ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjU5ZDM4MzIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTUsMTEgKzE1LDEzIEBACiBEb2MvdG9vbHMvcHlnbWVudHMvCiBEb2MvdG9vbHMvc3BoaW54LwogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogTGliL19zeXNjb25maWdkYXRhLnB5CiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogTWFrZWZpbGUKIE1ha2VmaWxlLnByZQogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaAogTW9kdWxlcy9TZXR1cAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKQEAgLTU3LDYgKzU5LDggQEAKIHB5YnVpbGRkaXIudHh0CiBweWNvbmZpZy5oCiBweXRob24KK3B5dGhvbi1jb25maWcKK3B5dGhvbi1jb25maWcucHkKIHB5dGhvbi5leGUKIHB5dGhvbi1nZGIucHkKIHB5dGhvbi5leGUtZ2RiLnB5CmRpZmYgLS1naXQgYS8uaGdlb2wgYi8uaGdlb2wKaW5kZXggNGUwMzY5MC4uYWFkNzljMiAxMDA2NDQKLS0tIGEvLmhnZW9sCisrKyBiLy5oZ2VvbApAQCAtMjYsNiArMjYsNyBAQAogKioucHNkICA9IEJJTgogKioudGFyICA9IEJJTgogKioud2F2ICA9IEJJTgorKioud2hsICA9IEJJTgogKioueGFyICA9IEJJTgogKiouemlwICA9IEJJTgogCmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggYzQyZGQwMy4uNjEyOGMyYiAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMTksNiArMTksOCBAQAogcHljb25maWcuaCQKIHB5dGhvbiQKIHB5dGhvbi5leGUkCitweXRob24tY29uZmlnJAorcHl0aG9uLWNvbmZpZy5weSQKIHJlZmxvZy50eHQkCiB0YWdzJAogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKQEAgLTI4LDEyICszMCwxNCBAQAogRG9jL3Rvb2xzL2ppbmphMi8KIERvYy90b29scy9weWdtZW50cy8KIE1pc2MvcHl0aG9uLnBjCitNaXNjL3B5dGhvbi1jb25maWcuc2gkCiBNb2R1bGVzL1NldHVwJAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKIE1vZHVsZXMvY29uZmlnLmMKIE1vZHVsZXMvbGRfc29fYWl4JAogUGFyc2VyL3BnZW4kCitebGNvdi1yZXBvcnQvCiBeY29yZQogXnB5dGhvbi1nZGIucHkKIF5weXRob24uZXhlLWdkYi5weQpAQCAtODIsNiArODYsOSBAQAogUENidWlsZC9XaW4zMi10ZW1wLSoKIFBDYnVpbGQveDY0LXRlbXAtKgogUENidWlsZC9hbWQ2NAorUENidWlsZC9pcGNoCitUb29scy91bmljb2RlL2J1aWxkLworVG9vbHMvdW5pY29kZS9NQVBQSU5HUy8KIEJ1aWxkTG9nLmh0bQogX19weWNhY2hlX18KIE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIKQEAgLTg5LDMgKzk2LDcgQEAKIC5jb3ZlcmFnZQogY292ZXJhZ2UvCiBodG1sY292LworKi5nY2RhCisqLmdjbm8KKyouZ2NvdgorY292ZXJhZ2UuaW5mbwpkaWZmIC0tZ2l0IGEvLmhndGFncyBiLy5oZ3RhZ3MKaW5kZXggNzgwMWFjZi4uMmJmZWU0OSAxMDA2NDQKLS0tIGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC0xMTgsMyArMTE4LDggQEAKIGZkNTNjNTAwZjhiODBmNTRmM2VjZWRlYzlkYTJlOGM3ZTUyYTY4ODggdjMuMy4zcmMxCiBkMzI0NDJjMGU2MGRmYmQ3MTIzNGU4MDdkM2QxZGVkZDIyNzQ5NWE5IHYzLjMuM3JjMgogYzM4OTYyNzVjMGY2MWIyNTEwYTZjN2U2YzQ1OGE3NTAzNTlhOTFiOCB2My4zLjMKKzQ2NTM1ZjY1ZTdmM2JjZGNmMTc2ZjM2ZDM0YmMxZmVkNzE5ZmZkMmIgdjMuNC4wYTEKKzkyNjVhMjE2OGUyY2IyYTg0Nzg1ZDg3MTc3OTJhY2M2NjFlNmI2OTIgdjMuNC4wYTIKK2RkOWNkZjkwYTUwNzM1MTA4NzdlOWRkNTExMmY4ZTZjZjIwZDVlODkgdjMuNC4wYTMKK2UyNDViMGQ3MjA5YmI2ZDBlMTkzMTZlMWUyYWYxYWE5YzIxMzkxMDQgdjMuNC4wYTQKKzM0MDVkYzlhNmFmYWEwYTA2ZGQxZjZmMTgyZWM1Yzk5OGRjZTZmNWYgdjMuNC4wYjEKZGlmZiAtLWdpdCBhLy5oZ3RvdWNoIGIvLmhndG91Y2gKaW5kZXggMGFmOGMxOS4uN2UzYTVlNyAxMDA2NDQKLS0tIGEvLmhndG91Y2gKKysrIGIvLmhndG91Y2gKQEAgLTQsOCArNCw4IEBACiAKIFB5dGhvbi9pbXBvcnRsaWIuaDogTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwogCi1JbmNsdWRlL2FzdC5oOiBQYXJzZXIvUHl0aG9uLmFzZGwgUGFyc2VyL2FzZGwucHkgUGFyc2VyL2FzZGxfYy5weQotUHl0aG9uL1B5dGhvbi1hc3QuYzogSW5jbHVkZS9hc3QuaAorSW5jbHVkZS9QeXRob24tYXN0Lmg6IFBhcnNlci9QeXRob24uYXNkbCBQYXJzZXIvYXNkbC5weSBQYXJzZXIvYXNkbF9jLnB5CitQeXRob24vUHl0aG9uLWFzdC5jOiBJbmNsdWRlL1B5dGhvbi1hc3QuaAogCiBQeXRob24vb3Bjb2RlX3RhcmdldHMuaDogUHl0aG9uL21ha2VvcGNvZGV0YXJnZXRzLnB5IExpYi9vcGNvZGUucHkKIApkaWZmIC0tZ2l0IGEvRG9jL1JFQURNRS50eHQgYi9Eb2MvUkVBRE1FLnR4dAppbmRleCBjNjNmYzYwLi42NGUzMDdlIDEwMDY0NAotLS0gYS9Eb2MvUkVBRE1FLnR4dAorKysgYi9Eb2MvUkVBRE1FLnR4dApAQCAtNyw3ICs3LDggQEAKIAogRG9jdW1lbnRhdGlvbiBvbiB0aGUgYXV0aG9yaW5nIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWJvdXQKIGJvdGggc3R5bGUgYW5kIG1hcmt1cCwgaXMgYXZhaWxhYmxlIGluIHRoZSAiRG9jdW1lbnRpbmcgUHl0aG9uIiBjaGFwdGVyIG9mIHRoZQotZG9jdW1lbnRhdGlvbi4gIFRoZXJlJ3MgYWxzbyBhIGNoYXB0ZXIgaW50ZW5kZWQgdG8gcG9pbnQgb3V0IGRpZmZlcmVuY2VzIHRvCitkZXZlbG9wZXJzIGd1aWRlIChodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2RvY3VtZW50aW5nLmh0bWwpLgorVGhlcmUncyBhbHNvIGEgY2hhcHRlciBpbnRlbmRlZCB0byBwb2ludCBvdXQgZGlmZmVyZW5jZXMgdG8KIHRob3NlIGZhbWlsaWFyIHdpdGggdGhlIHByZXZpb3VzIGRvY3Mgd3JpdHRlbiBpbiBMYVRlWC4KIAogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0IGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAppbmRleCA2NTkwNGVlLi4yZDU2Mzg2IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKQEAgLTc0LDI2ICs3NCwzNSBAQAogCiAuLiBfbWFwb2JqZWN0czoKIAotTWFwcGluZyBPYmplY3RzCi09PT09PT09PT09PT09PT0KK0NvbnRhaW5lciBPYmplY3RzCis9PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6IG9iamVjdDogbWFwcGluZwogCiAuLiB0b2N0cmVlOjoKIAogICAgZGljdC5yc3QKKyAgIHNldC5yc3QKIAogCiAuLiBfb3RoZXJvYmplY3RzOgogCitGdW5jdGlvbiBPYmplY3RzCis9PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorCisgICBmdW5jdGlvbi5yc3QKKyAgIG1ldGhvZC5yc3QKKyAgIGNlbGwucnN0CisgICBjb2RlLnJzdAorCisKIE90aGVyIE9iamVjdHMKID09PT09PT09PT09PT0KIAogLi4gdG9jdHJlZTo6CiAKLSAgIHNldC5yc3QKLSAgIGZ1bmN0aW9uLnJzdAotICAgbWV0aG9kLnJzdAogICAgZmlsZS5yc3QKICAgIG1vZHVsZS5yc3QKICAgIGl0ZXJhdG9yLnJzdApAQCAtMTAyLDcgKzExMSw2IEBACiAgICBtZW1vcnl2aWV3LnJzdAogICAgd2Vha3JlZi5yc3QKICAgIGNhcHN1bGUucnN0Ci0gICBjZWxsLnJzdAogICAgZ2VuLnJzdAogICAgZGF0ZXRpbWUucnN0Ci0gICBjb2RlLnJzdAorCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGljdC5yc3QgYi9Eb2MvYy1hcGkvZGljdC5yc3QKaW5kZXggNmJhY2MzMi4uNWE5ZGNhMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RpY3QucnN0CisrKyBiL0RvYy9jLWFwaS9kaWN0LnJzdApAQCAtODQsNyArODQsNyBAQAogICAgb24gZmFpbHVyZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJlbW92ZSB0aGUgZW50cnkgaW4gZGljdGlvbmFyeSAqcCogd2hpY2ggaGFzIGEga2V5IHNwZWNpZmllZCBieSB0aGUgc3RyaW5nCiAgICAqa2V5Ki4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBvbiBmYWlsdXJlLgpAQCAtMTEwLDYgKzExMCwxNSBAQAogICAgOmM6dHlwZTpgY2hhclwqYCwgcmF0aGVyIHRoYW4gYSA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdCkKKworICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgUHl0aG9uLWxldmVsIDptZXRoOmBkaWN0LnNldGRlZmF1bHRgLiAgSWYgcHJlc2VudCwgaXQKKyAgIHJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gKmtleSogZnJvbSB0aGUgZGljdGlvbmFyeSAqcCouICBJZiB0aGUga2V5CisgICBpcyBub3QgaW4gdGhlIGRpY3QsIGl0IGlzIGluc2VydGVkIHdpdGggdmFsdWUgKmRlZmF1bHRvYmoqIGFuZCAqZGVmYXVsdG9iaioKKyAgIGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIGhhc2ggZnVuY3Rpb24gb2YgKmtleSogb25seSBvbmNlLAorICAgaW5zdGVhZCBvZiBldmFsdWF0aW5nIGl0IGluZGVwZW5kZW50bHkgZm9yIHRoZSBsb29rdXAgYW5kIHRoZSBpbnNlcnRpb24uCisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfSXRlbXMoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiBhIDpjOnR5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggYzNkOTc4Zi4uODY1OGE1OCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtMjM1LDcgKzIzNSw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZSBmaWxlbmFtZQogICAgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGhlCiAgICBmaWxlbmFtZSBpcyBnaXZlbiBhcyBhIEMgc3RyaW5nLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorICAgZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBQeU9iamVjdCAqZmlsZW5hbWUpCkBAIC0yOTMsMjAgKzI5MywyNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICBTZXQgZmlsZSwgbGluZSwgYW5kIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiAgSWYgdGhlCiAgICBjdXJyZW50IGV4Y2VwdGlvbiBpcyBub3QgYSA6ZXhjOmBTeW50YXhFcnJvcmAsIHRoZW4gaXQgc2V0cyBhZGRpdGlvbmFsCiAgICBhdHRyaWJ1dGVzLCB3aGljaCBtYWtlIHRoZSBleGNlcHRpb24gcHJpbnRpbmcgc3Vic3lzdGVtIHRoaW5rIHRoZSBleGNlcHRpb24KLSAgIGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgLiAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBpcyBhIDpleGM6YFN5bnRheEVycm9yYC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKKworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdGAsIGJ1dCAqZmlsZW5hbWUqIGlzIGEgYnl0ZSBzdHJpbmcKKyAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogCi0gICBMaWtlIDpjOmZ1bmM6YFB5RXJyX1N5bnRheExvY2F0aW9uRXhjYCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbkV4YCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcwogICAgb21pdHRlZC4KIAogCkBAIC0zNTUsMTUgKzM2MiwyMiBAQAogICAgZG9jdW1lbnRhdGlvbi4gIFRoZXJlIGlzIG5vIEMgQVBJIGZvciB3YXJuaW5nIGNvbnRyb2wuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCi0gICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBkZXNjcmliZWQgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdGAgZXhjZXB0IHRoYXQgKm1lc3NhZ2UqIGFuZAorICAgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywgYW5kICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggY2MxOTBjOS4uNmYyZWNlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtMTcsNyArMTcsNyBAQAogdGhlIDptb2Q6YGlvYCBBUElzIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKKy4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiAKICAgIENyZWF0ZSBhIFB5dGhvbiBmaWxlIG9iamVjdCBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYWxyZWFkeQogICAgb3BlbmVkIGZpbGUgKmZkKi4gIFRoZSBhcmd1bWVudHMgKm5hbWUqLCAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDI3MDE1MmUuLjZjZDJiOGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgIGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGNvbXBpbGUKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXNgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVgLCBidXQgdGhlIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mCiAgICB0aGUgbW9kdWxlIG9iamVjdCBpcyBzZXQgdG8gKnBhdGhuYW1lKiBpZiBpdCBpcyBub24tYGBOVUxMYGAuCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsIGNoYXIgKmNwYXRobmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdGAsIGJ1dCAqbmFtZSosICpwYXRobmFtZSogYW5kCiAgICAqY3BhdGhuYW1lKiBhcmUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLiBBdHRlbXB0cyBhcmUgYWxzbyBtYWRlIHRvIGZpZ3VyZSBvdXQKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0YCwgYnV0IHRoZSBuYW1lIGlzIGEKICAgIFVURi04IGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCA3MDU1MDlmLi42NDM5ZDdmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC04Niw2ICs4NiwzNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycykKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKKyAgICAgIHNpbmdsZTogbWFpbigpCisgICAgICB0cmlwbGU6IHN0ZGluOyBzdGRvdXQ7IHNkdGVycgorCisgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLCBpZiBpdCBpcworICAgY2FsbGVkIGF0IGFsbC4gSXQgc3BlY2lmaWVzIHdoaWNoIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0byB1c2UKKyAgIHdpdGggc3RhbmRhcmQgSU8sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgorCisgICBJdCBvdmVycmlkZXMgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgdmFsdWVzLCBhbmQgYWxsb3dzIGVtYmVkZGluZyBjb2RlCisgICB0byBjb250cm9sIElPIGVuY29kaW5nIHdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGRvZXMgbm90IHdvcmsuCisKKyAgIGBgZW5jb2RpbmdgYCBhbmQvb3IgYGBlcnJvcnNgYCBtYXkgYmUgTlVMTCB0byB1c2UKKyAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGFuZC9vciBkZWZhdWx0IHZhbHVlcyAoZGVwZW5kaW5nIG9uIG90aGVyCisgICBzZXR0aW5ncykuCisKKyAgIE5vdGUgdGhhdCA6ZGF0YTpgc3lzLnN0ZGVycmAgYWx3YXlzIHVzZXMgdGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvcgorICAgaGFuZGxlciwgcmVnYXJkbGVzcyBvZiB0aGlzIChvciBhbnkgb3RoZXIpIHNldHRpbmcuCisKKyAgIElmIDpjOmZ1bmM6YFB5X0ZpbmFsaXplYCBpcyBjYWxsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZAorICAgYWdhaW4gaW4gb3JkZXIgdG8gYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMgdG8gOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhIG5vbnplcm8gdmFsdWUgb24gZXJyb3IgKGUuZy4gY2FsbGluZyBhZnRlciB0aGUKKyAgIGludGVycHJldGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQcm9ncmFtTmFtZSh3Y2hhcl90ICpuYW1lKQogCiAgICAuLiBpbmRleDo6CkBAIC0zMjksNyArMzU5LDExIEBACiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KKyAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldAorICAgdG8gMSB1bmxlc3MgdGhlIDpwcm9ncmFtOmBweXRob25gIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlCisgICA6b3B0aW9uOmAtSWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IFRoZSAqdXBkYXRlcGF0aCogdmFsdWUgZGVwZW5kcyBvbiA6b3B0aW9uOmAtSWAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtNjU3LDYgKzY5MSwyMCBAQAogICAgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIG1haW5seSBhIGhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHSUxTdGF0ZV9DaGVjaygpCisKKyAgIFJldHVybiAxIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyBob2xkaW5nIHRoZSBHSUwgYW5kIDAgb3RoZXJ3aXNlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCBhdCBhbnkgdGltZS4KKyAgIE9ubHkgaWYgaXQgaGFzIGhhZCBpdHMgUHl0aG9uIHRocmVhZCBzdGF0ZSBpbml0aWFsaXplZCBhbmQgY3VycmVudGx5IGlzCisgICBob2xkaW5nIHRoZSBHSUwgd2lsbCBpdCByZXR1cm4gMS4KKyAgIFRoaXMgaXMgbWFpbmx5IGEgaGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24uICBJdCBjYW4gYmUgdXNlZnVsCisgICBmb3IgZXhhbXBsZSBpbiBjYWxsYmFjayBjb250ZXh0cyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2hlbgorICAga25vd2luZyB0aGF0IHRoZSBHSUwgaXMgbG9ja2VkIGNhbiBhbGxvdyB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gc2Vuc2l0aXZlCisgICBhY3Rpb25zIG9yIG90aGVyd2lzZSBiZWhhdmUgZGlmZmVyZW50bHkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IGQ1NDMwZmQuLmIzNDgwMTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogCiAgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaAogICAgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXBwaW5nLnJzdCBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdAppbmRleCAwZWYyOTYxLi4yODAzZmQwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL21hcHBpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiAgICBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgpAQCAtNjcsMTMgKzY3LDEzIEBACiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9ba2V5XWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqIGluIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeS5yc3QgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdAppbmRleCA4YWZhNTZhLi5hODJlMWMyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdApAQCAtODQsNiArODQsNDggQEAKIGZvciB0aGUgSS9PIGJ1ZmZlciBlc2NhcGVzIGNvbXBsZXRlbHkgdGhlIFB5dGhvbiBtZW1vcnkgbWFuYWdlci4KIAogCitSYXcgTWVtb3J5IEludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzZXRzIGFyZSB3cmFwcGVycyB0byB0aGUgc3lzdGVtIGFsbG9jYXRvci4gVGhlc2UKK2Z1bmN0aW9ucyBhcmUgdGhyZWFkLXNhZmUsIHRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIGRvZXMgbm90CituZWVkIHRvIGJlIGhlbGQuCisKK1RoZSBkZWZhdWx0IHJhdyBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBuKQorCisgICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlCisgICBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFJlcXVlc3RpbmcgemVybyBieXRlcworICAgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYKKyAgIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQorCisgICBSZXNpemVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCogdG8gKm4qIGJ5dGVzLiBUaGUgY29udGVudHMgd2lsbAorICAgYmUgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2l6ZXMuIElmICpwKiBpcyAqTlVMTCosCisgICB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBgUHlNZW1fUmF3TWFsbG9jKG4pYGA7IGVsc2UgaWYgKm4qIGlzIGVxdWFsIHRvCisgICB6ZXJvLCB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlc2l6ZWQgYnV0IGlzIG5vdCBmcmVlZCwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyCisgICBpcyBub24tKk5VTEwqLiBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLiBJZgorICAgdGhlIHJlcXVlc3QgZmFpbHMsIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIHJldHVybnMgKk5VTEwqIGFuZCAqcCogcmVtYWlucworICAgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBtZW1vcnkgYXJlYS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnApCisKKyAgIEZyZWVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCosIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKKyAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4KKyAgIE90aGVyd2lzZSwgb3IgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkCisgICBiZWhhdmlvciBvY2N1cnMuIElmICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKKwogLi4gX21lbW9yeWludGVyZmFjZToKIAogTWVtb3J5IEludGVyZmFjZQpAQCAtOTEsOCArMTMzLDE2IEBACiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2V0cywgbW9kZWxlZCBhZnRlciB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgc3BlY2lmeWluZwogYmVoYXZpb3Igd2hlbiByZXF1ZXN0aW5nIHplcm8gYnl0ZXMsIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpbmcgYW5kIHJlbGVhc2luZwotbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwOgorbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwLgogCitUaGUgZGVmYXVsdCBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHdhcm5pbmc6OgorCisgICBUaGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBtdXN0IGJlIGhlbGQgd2hlbiB1c2luZyB0aGVzZQorICAgZnVuY3Rpb25zLgogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fTWFsbG9jKHNpemVfdCBuKQogCkBAIC0xNTUsNiArMjA1LDEyNSBAQAogOmM6ZnVuYzpgUHlNZW1fTkVXYCwgOmM6ZnVuYzpgUHlNZW1fUkVTSVpFYCwgOmM6ZnVuYzpgUHlNZW1fREVMYC4KIAogCitDdXN0b21pemUgTWVtb3J5IEFsbG9jYXRvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3IKKworICAgU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yLiBUaGUgc3RydWN0dXJlIGhhcworICAgZm91ciBmaWVsZHM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgYGB2b2lkICpjdHhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiBtYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICAgICAgICAgfCBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiByZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpYGAgfCBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpYGAgICAgICAgICAgICAgICAgICAgICAgfCBmcmVlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3JEb21haW4KKworICAgRW51bSB1c2VkIHRvIGlkZW50aWZ5IGFuIGFsbG9jYXRvciBkb21haW4uIERvbWFpbnM6CisKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX1JBV2A6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX01FTWA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX09CSmA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLgorCisgICBUaGUgbmV3IGFsbG9jYXRvciBtdXN0IHJldHVybiBhIGRpc3RpbmN0IG5vbi1OVUxMIHBvaW50ZXIgd2hlbiByZXF1ZXN0aW5nCisgICB6ZXJvIGJ5dGVzLgorCisgICBGb3IgdGhlIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9SQVdgIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlCisgICB0aHJlYWQtc2FmZTogdGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgaXMgbm90IGhlbGQgd2hlbiB0aGUKKyAgIGFsbG9jYXRvciBpcyBjYWxsZWQuCisKKyAgIElmIHRoZSBuZXcgYWxsb2NhdG9yIGlzIG5vdCBhIGhvb2sgKGRvZXMgbm90IGNhbGwgdGhlIHByZXZpb3VzIGFsbG9jYXRvciksCisgICB0aGUgOmM6ZnVuYzpgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzYCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlCisgICBkZWJ1ZyBob29rcyBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCisKKyAgIFNldHVwIGhvb2tzIHRvIGRldGVjdCBidWdzIGluIHRoZSBmb2xsb3dpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3IKKyAgIGZ1bmN0aW9uczoKKworICAgLSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgIC0gOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCisgICAtIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAorCisgICBOZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhDQmBgLCBmcmVlZCBtZW1vcnkgaXMKKyAgIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhEQmBgLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAgY2FsbGVkIG9uIGEgYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgCisgICAtIGRldGVjdCB3cml0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGJ1ZmZlciB1bmRlcmZsb3cpCisgICAtIGRldGVjdCB3cml0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGJ1ZmZlciBvdmVyZmxvdykKKworICAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIGlzIGRlYnVnIG1vZGUuCisKKworQ3VzdG9taXplIFB5T2JqZWN0IEFyZW5hIEFsbG9jYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gaGFzIGEgKnB5bWFsbG9jKiBhbGxvY2F0b3IgZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiA1MTIgYnl0ZXMuIFRoaXMKK2FsbG9jYXRvciBpcyBvcHRpbWl6ZWQgZm9yIHNtYWxsIG9iamVjdHMgd2l0aCBhIHNob3J0IGxpZmV0aW1lLiBJdCB1c2VzIG1lbW9yeQorbWFwcGluZ3MgY2FsbGVkICJhcmVuYXMiIHdpdGggYSBmaXhlZCBzaXplIG9mIDI1NiBLQi4gSXQgZmFsbHMgYmFjayB0bworOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgZm9yIGFsbG9jYXRpb25zIGxhcmdlcgordGhhbiA1MTIgYnl0ZXMuICAqcHltYWxsb2MqIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB1c2VkIGJ5Cis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLgorCitUaGUgZGVmYXVsdCBhcmVuYSBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworKiA6YzpmdW5jOmBWaXJ0dWFsQWxsb2NgIGFuZCA6YzpmdW5jOmBWaXJ0dWFsRnJlZWAgb24gV2luZG93cywKKyogOmM6ZnVuYzpgbW1hcGAgYW5kIDpjOmZ1bmM6YG11bm1hcGAgaWYgYXZhaWxhYmxlLAorKiA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU9iamVjdEFyZW5hQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGFyZW5hIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIHRocmVlIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICB8IGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSwgdm9pZCAqcHRyKWBgIHwgZnJlZSBhbiBhcmVuYSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKwogLi4gX21lbW9yeWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCBlODBlMGVhLi4yNmM0Mzg0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtMzUsMTMgKzM1LDIwIEBACiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2ZpbGVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKKyAgICAgIHNpbmdsZTogX19wYWNrYWdlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fbG9hZGVyX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqbmFtZSouCi0gICBPbmx5IHRoZSBtb2R1bGUncyA6YXR0cjpgX19kb2NfX2AgYW5kIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluOwotICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19wYWNrYWdlX19gLCBhbmQKKyAgIDphdHRyOmBfX2xvYWRlcl9fYCBhdHRyaWJ1dGVzIGFyZSBmaWxsZWQgaW4gKGFsbCBidXQgOmF0dHI6YF9fbmFtZV9fYCBhcmUgc2V0CisgICB0byBgYE5vbmVgYCk7IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AKKyAgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AgYXJlIHNldCB0byBgYE5vbmVgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9vYmplY3QucnN0CmluZGV4IDBhYmEzNjAuLmJlNmQ3OTggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9vYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9vYmplY3QucnN0CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgIG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGNhbGxhYmxlX29iamVjdCgqYXJncylgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNoYXIgKmZvcm1hdCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgKmNhbGxhYmxlKiwgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBDIGFyZ3VtZW50cy4KICAgIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIHVzaW5nIGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgc3R5bGUgZm9ybWF0CkBAIC0yNTAsOCArMjUwLDExIEBACiAgICBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLCA6YzpmdW5jOmBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzYCBpcyBhCiAgICBmYXN0ZXIgYWx0ZXJuYXRpdmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgdHlwZSBvZiAqZm9ybWF0KiB3YXMgY2hhbmdlZCBmcm9tIGBgY2hhciAqYGAuCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLCBjaGFyICpmb3JtYXQsIC4uLikKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgKm1ldGhvZCogb2Ygb2JqZWN0ICpvKiB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIEMKICAgIGFyZ3VtZW50cy4gIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIGJ5IGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgZm9ybWF0CkBAIC0yNjEsNiArMjY0LDkgQEAKICAgIE5vdGUgdGhhdCBpZiB5b3Ugb25seSBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLAogICAgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3NgIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHR5cGVzIG9mICptZXRob2QqIGFuZCAqZm9ybWF0KiB3ZXJlIGNoYW5nZWQgZnJvbSBgYGNoYXIgKmBgLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsIC4uLiwgTlVMTCkKIApAQCAtMzQyLDYgKzM0OCwxNSBAQAogICAgcmV0dXJuZWQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxlbihvKWBgLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdCkKKworICAgUmV0dXJuIGFuIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKm8qLiBGaXJzdCB0cnlpbmcgdG8gcmV0dXJuIGl0cworICAgYWN0dWFsIGxlbmd0aCwgdGhlbiBhbiBlc3RpbWF0ZSB1c2luZyBgYF9fbGVuZ3RoX2hpbnRfX2BgLCBhbmQgZmluYWxseQorICAgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLiBPbiBlcnJvciBgYC0xYGAgaXMgcmV0dXJuZWQuIFRoaXMgaXMgdGhlCisgICBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KG8sIGRlZmF1bHQpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dldEl0ZW0oUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKaW5kZXggYjJiODAzOC4uNDhiMTNlNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdApAQCAtNDY1LDYgKzQ2NSwxNCBAQAogICAgICAgOmNvbnN0OmBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUdgLgogCiAKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUKKworICAgICAgVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgc2xvdCBpcyBwcmVzZW50IGluIHRoZQorICAgICAgdHlwZSBzdHJ1Y3R1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6bWVtYmVyOjogY2hhciogUHlUeXBlT2JqZWN0LnRwX2RvYwogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQgQyBzdHJpbmcgZ2l2aW5nIHRoZSBkb2NzdHJpbmcgZm9yIHRoaXMKQEAgLTk2OCw2ICs5NzYsNDcgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZDsgaXQgaXMgY2FsY3VsYXRlZCBmcmVzaCBieSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgLgogCiAKKy4uIGM6bWVtYmVyOjogZGVzdHJ1Y3RvciBQeVR5cGVPYmplY3QudHBfZmluYWxpemUKKworICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBmaW5hbGl6YXRpb24gZnVuY3Rpb24uICBJdHMgc2lnbmF0dXJlIGlzCisgICA6Yzp0eXBlOmBkZXN0cnVjdG9yYDo6CisKKyAgICAgIHZvaWQgdHBfZmluYWxpemUoUHlPYmplY3QgKikKKworICAgSWYgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBpcyBzZXQsIHRoZSBpbnRlcnByZXRlciBjYWxscyBpdCBvbmNlIHdoZW4KKyAgIGZpbmFsaXppbmcgYW4gaW5zdGFuY2UuICBJdCBpcyBjYWxsZWQgZWl0aGVyIGZyb20gdGhlIGdhcmJhZ2UKKyAgIGNvbGxlY3RvciAoaWYgdGhlIGluc3RhbmNlIGlzIHBhcnQgb2YgYW4gaXNvbGF0ZWQgcmVmZXJlbmNlIGN5Y2xlKSBvcgorICAganVzdCBiZWZvcmUgdGhlIG9iamVjdCBpcyBkZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIGl0IGlzIGd1YXJhbnRlZWQKKyAgIHRvIGJlIGNhbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLCBlbnN1cmluZworICAgdGhhdCBpdCBmaW5kcyB0aGUgb2JqZWN0IGluIGEgc2FuZSBzdGF0ZS4KKworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzaG91bGQgbm90IG11dGF0ZSB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhdHVzOworICAgdGhlcmVmb3JlLCBhIHJlY29tbWVuZGVkIHdheSB0byB3cml0ZSBhIG5vbi10cml2aWFsIGZpbmFsaXplciBpczo6CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBsb2NhbF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKKyAgICAgIHsKKyAgICAgICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgICAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgICAgICAgIC8qIC4uLiAqLworCisgICAgICAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgICB9CisKKyAgIEZvciB0aGlzIGZpZWxkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCAoZXZlbiB0aHJvdWdoIGluaGVyaXRhbmNlKSwKKyAgIHlvdSBtdXN0IGFsc28gc2V0IHRoZSA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRWAgZmxhZ3MgYml0LgorCisgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIHNlZWFsc286OiAiU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIiAoOnBlcDpgNDQyYCkKKworCiAuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfY2FjaGUKIAogICAgVW51c2VkLiAgTm90IGluaGVyaXRlZC4gIEludGVybmFsIHVzZSBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0IGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CmluZGV4IDM2NDljZmIuLmM3ZWQ1ZTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91bmljb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKQEAgLTUyNiwxMiArNTI2LDIzIEBACiAgICAgICBUaGUgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBvbmx5IGF2YWlsYWJsZQogICAgICAgd2hlbiA6Y29uc3Q6YEhBVkVfTE9OR19MT05HYCBpcyBkZWZpbmVkLgogCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSB3aWR0aCBmb3JtYXR0ZXIgdW5pdCBpcyBudW1iZXIgb2YgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBieXRlcy4KKyAgICAgIFRoZSBwcmVjaXNpb24gZm9ybWF0dGVyIHVuaXQgaXMgbnVtYmVyIG9mIGJ5dGVzIGZvciBgYCIlcyJgYCBhbmQKKyAgICAgIGBgIiVWImBgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBOVUxMKSwgYW5kIGEgbnVtYmVyIG9mCisgICAgICBjaGFyYWN0ZXJzIGZvciBgYCIlQSJgYCwgYGAiJVUiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhbmQgYGAiJVYiYGAKKyAgICAgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBub3QgTlVMTCkuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBTdXBwb3J0IGZvciBgYCIlbGxkImBgIGFuZCBgYCIlbGx1ImBgIGFkZGVkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgU3VwcG9ydCBmb3IgYGAiJWxpImBgLCBgYCIlbGxpImBgIGFuZCBgYCIlemkiYGAgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IHdpZHRoIGFuZCBwcmVjaXNpb24gZm9ybWF0dGVyIGZvciBgYCIlcyJgYCwgYGAiJUEiYGAsIGBgIiVVImBgLAorICAgICAgYGAiJVYiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhZGRlZC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CmluZGV4IDE0ZWY4ZGYuLjlmMjFiODkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKKysrIGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdApAQCAtMTQ0LDYgKzE0NCwzNyBAQAogICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBSZXR1cm5zIGBgMGBgIGF0IEVPRi4KIAogCisuLiBjOnZhcjo6IGludCAoKlB5T1NfSW5wdXRIb29rKSh2b2lkKQorCisgICBDYW4gYmUgc2V0IHRvIHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdG90eXBlCisgICBgYGludCBmdW5jKHZvaWQpYGAuICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBQeXRob24ncworICAgaW50ZXJwcmV0ZXIgcHJvbXB0IGlzIGFib3V0IHRvIGJlY29tZSBpZGxlIGFuZCB3YWl0IGZvciB1c2VyIGlucHV0CisgICBmcm9tIHRoZSB0ZXJtaW5hbC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4gIE92ZXJyaWRpbmcgdGhpcworICAgaG9vayBjYW4gYmUgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGludGVycHJldGVyJ3MgcHJvbXB0IHdpdGggb3RoZXIKKyAgIGV2ZW50IGxvb3BzLCBhcyBkb25lIGluIHRoZSA6ZmlsZTpgTW9kdWxlcy9fdGtpbnRlci5jYCBpbiB0aGUKKyAgIFB5dGhvbiBzb3VyY2UgY29kZS4KKworCisuLiBjOnZhcjo6IGNoYXIqICgqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKikKKworICAgQ2FuIGJlIHNldCB0byBwb2ludCB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHByb3RvdHlwZQorICAgYGBjaGFyICpmdW5jKEZJTEUgKnN0ZGluLCBGSUxFICpzdGRvdXQsIGNoYXIgKnByb21wdClgYCwKKyAgIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgZnVuY3Rpb24gdXNlZCB0byByZWFkIGEgc2luZ2xlIGxpbmUgb2YgaW5wdXQKKyAgIGF0IHRoZSBpbnRlcnByZXRlcidzIHByb21wdC4gIFRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBvdXRwdXQKKyAgIHRoZSBzdHJpbmcgKnByb21wdCogaWYgaXQncyBub3QgKk5VTEwqLCBhbmQgdGhlbiByZWFkIGEgbGluZSBvZgorICAgaW5wdXQgZnJvbSB0aGUgcHJvdmlkZWQgc3RhbmRhcmQgaW5wdXQgZmlsZSwgcmV0dXJuaW5nIHRoZQorICAgcmVzdWx0aW5nIHN0cmluZy4gIEZvciBleGFtcGxlLCBUaGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBzZXRzCisgICB0aGlzIGhvb2sgdG8gcHJvdmlkZSBsaW5lLWVkaXRpbmcgYW5kIHRhYi1jb21wbGV0aW9uIGZlYXR1cmVzLgorCisgICBUaGUgcmVzdWx0IG11c3QgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBvciAqTlVMTCogaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmVzdWx0IG11c3QgYmUgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBieQorICAgICAgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYC4KKworCiAuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzdGFydCkKIAogICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvCkBAIC0yMzUsMTYgKzI2NiwxNSBAQAogICAgKm9wdGltaXplKiBzZXQgdG8gYGAtMWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogCiAgICBQYXJzZSBhbmQgY29tcGlsZSB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGluICpzdHIqLCByZXR1cm5pbmcgdGhlIHJlc3VsdGluZyBjb2RlCiAgICBvYmplY3QuICBUaGUgc3RhcnQgdG9rZW4gaXMgZ2l2ZW4gYnkgKnN0YXJ0KjsgdGhpcyBjYW4gYmUgdXNlZCB0byBjb25zdHJhaW4gdGhlCiAgICBjb2RlIHdoaWNoIGNhbiBiZSBjb21waWxlZCBhbmQgc2hvdWxkIGJlIDpjb25zdDpgUHlfZXZhbF9pbnB1dGAsCiAgICA6Y29uc3Q6YFB5X2ZpbGVfaW5wdXRgLCBvciA6Y29uc3Q6YFB5X3NpbmdsZV9pbnB1dGAuICBUaGUgZmlsZW5hbWUgc3BlY2lmaWVkIGJ5CiAgICAqZmlsZW5hbWUqIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBjb2RlIG9iamVjdCBhbmQgbWF5IGFwcGVhciBpbiB0cmFjZWJhY2tzIG9yCi0gICA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9uIG1lc3NhZ2VzLCBpdCBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgVGhpcyByZXR1cm5zICpOVUxMKiBpZiB0aGUKLSAgIGNvZGUgY2Fubm90IGJlIHBhcnNlZCBvciBjb21waWxlZC4KKyAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb24gbWVzc2FnZXMuICBUaGlzIHJldHVybnMgKk5VTEwqIGlmIHRoZSBjb2RlCisgICBjYW5ub3QgYmUgcGFyc2VkIG9yIGNvbXBpbGVkLgogCiAgICBUaGUgaW50ZWdlciAqb3B0aW1pemUqIHNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIG9mIHRoZSBjb21waWxlcjsgYQogICAgdmFsdWUgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIgYXMgZ2l2ZW4gYnkKQEAgLTI1Miw5ICsyODIsMTYgQEAKICAgIGBgX19kZWJ1Z19fYGAgaXMgdHJ1ZSksIGBgMWBgIChhc3NlcnRzIGFyZSByZW1vdmVkLCBgYF9fZGVidWdfX2BgIGlzIGZhbHNlKQogICAgb3IgYGAyYGAgKGRvY3N0cmluZ3MgYXJlIHJlbW92ZWQgdG9vKS4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorCisgICBMaWtlIDpjOmZ1bmM6YFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzYCwgYnV0ICpmaWxlbmFtZSogaXMgYSBieXRlIHN0cmluZworICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFdmFsX0V2YWxDb2RlKFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCiAKICAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeUV2YWxfRXZhbENvZGVFeGAsIHdpdGgganVzdApAQCAtMzM4LDQgKzM3NSwzIEBACiAKICAgIFRoaXMgYml0IGNhbiBiZSBzZXQgaW4gKmZsYWdzKiB0byBjYXVzZSBkaXZpc2lvbiBvcGVyYXRvciBgYC9gYCB0byBiZQogICAgaW50ZXJwcmV0ZWQgYXMgInRydWUgZGl2aXNpb24iIGFjY29yZGluZyB0byA6cGVwOmAyMzhgLgotCmRpZmYgLS1naXQgYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0IGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdAppbmRleCBhNDI1ODRjLi44MTRjM2IwIDEwMDY0NAotLS0gYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CisrKyBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKQEAgLTIyMCw2ICsyMjAsMTEgQEAKIFB5RGljdF9HZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpwOjA6CiBQeURpY3RfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6OjA6CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6cDowOgorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmtleTowOmNvbmRpdGlvbmFsbHkgKzEgaWYgaW5zZXJ0ZWQgaW50byB0aGUgZGljdAorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmRlZmF1bHQ6MDpjb25kaXRpb25hbGx5ICsxIGlmIGluc2VydGVkIGludG8gdGhlIGRpY3QKKwogUHlEaWN0X0l0ZW1zOlB5T2JqZWN0Kjo6KzE6CiBQeURpY3RfSXRlbXM6UHlPYmplY3QqOnA6MDoKIApAQCAtNTAzLDEzICs1MDgsMTMgQEAKIFB5SW1wb3J0X0NsZWFudXA6dm9pZDo6OgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpQeU9iamVjdCo6OisxOgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6Y2hhcio6bmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0KjpjbzowOgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OlB5T2JqZWN0Kjo6KzE6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOm5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6UHlPYmplY3QqOmNvOjA6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOnBhdGhuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y29uc3QgY2hhcio6cGF0aG5hbWU6OgogCiBQeUltcG9ydF9HZXRNYWdpY051bWJlcjpsb25nOjo6CiAKQEAgLTUxOSw3ICs1MjQsNyBAQAogUHlJbXBvcnRfSW1wb3J0OlB5T2JqZWN0KjpuYW1lOjA6CiAKIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTppbnQ6OjoKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTpjaGFyKjo6OgorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmNvbnN0IGNoYXIqOjo6CiAKIFB5SW1wb3J0X0ltcG9ydE1vZHVsZTpQeU9iamVjdCo6OisxOgogUHlJbXBvcnRfSW1wb3J0TW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgpAQCAtNjY4LDcgKzY3Myw3IEBACiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc6dW5zaWduZWQgbG9uZyBsb25nOnY6OgogCiBQeUxvbmdfRnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgotUHlMb25nX0Zyb21TdHJpbmc6Y2hhcio6c3RyOjoKK1B5TG9uZ19Gcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cjo6CiBQeUxvbmdfRnJvbVN0cmluZzpjaGFyKio6cGVuZDo6CiBQeUxvbmdfRnJvbVN0cmluZzppbnQ6YmFzZTo6CiAKQEAgLTY5Niw3ICs3MDEsNyBAQAogCiBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCiBQeU1hcHBpbmdfSGFzS2V5OmludDo6OgogUHlNYXBwaW5nX0hhc0tleTpQeU9iamVjdCo6bzowOgpAQCAtNzA0LDcgKzcwOSw3IEBACiAKIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKIFB5TWFwcGluZ19JdGVtczpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0l0ZW1zOlB5T2JqZWN0KjpvOjA6CkBAIC03MTcsNyArNzIyLDcgQEAKIAogUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19TZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6djorMToKIAogUHlNYXBwaW5nX1ZhbHVlczpQeU9iamVjdCo6OisxOgpAQCAtNzMwLDcgKzczNSw3IEBACiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlOkZJTEUqOmZpbGU6OgogCiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6UHlPYmplY3QqOjorMToKLVB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpjaGFyKjpzdHJpbmc6OgorUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cmluZzo6CiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6aW50Omxlbjo6CiAKIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CkBAIC05MTIsNyArOTE3LDcgQEAKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOlB5T2JqZWN0Kjo6KzE6CiBQeU9iamVjdF9DYWxsRnVuY3Rpb246UHlPYmplY3QqOmNhbGxhYmxlX29iamVjdDowOgotUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsRnVuY3Rpb246Y29uc3QgY2hhcio6Zm9ybWF0OjoKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnczpQeU9iamVjdCo6OisxOgpAQCAtOTIxLDggKzkyNiw4IEBACiAKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOjorMToKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOm86MDoKLVB5T2JqZWN0X0NhbGxNZXRob2Q6Y2hhcio6bTo6Ci1QeU9iamVjdF9DYWxsTWV0aG9kOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsTWV0aG9kOmNvbnN0IGNoYXIqOm06OgorUHlPYmplY3RfQ2FsbE1ldGhvZDpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlPYmplY3RfQ2FsbE1ldGhvZDo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M6UHlPYmplY3QqOjorMToKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAppbmRleCBkMWFiN2RiLi44M2M2OGFlIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CkBAIC0yMzksNyArMjM5LDggQEAKIGNvbmZpZ3VyYXRpb24gZmlsZSwgOmZpbGU6YHNldHVwLmNmZ2BcIC0tLXNlZSBzZWN0aW9uIDpyZWY6YHNldHVwLWNvbmZpZ2AuICBJZgogeW91IGRpc3RyaWJ1dGUgb3IgcGFja2FnZSBtYW55IFB5dGhvbiBtb2R1bGUgZGlzdHJpYnV0aW9ucywgeW91IG1pZ2h0IHdhbnQgdG8KIHB1dCBvcHRpb25zIHRoYXQgYXBwbHkgdG8gYWxsIG9mIHRoZW0gaW4geW91ciBwZXJzb25hbCBEaXN0dXRpbHMgY29uZmlndXJhdGlvbgotZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLgorZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLiAgSWYgeW91IHdhbnQgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZQordGhpcyBmaWxlLCB5b3UgY2FuIHBhc3MgdGhlIDpvcHRpb246YC0tbm8tdXNlci1jZmdgIG9wdGlvbiB0byA6ZmlsZTpgc2V0dXAucHlgLgogCiBUaGVyZSBhcmUgdGhyZWUgc3RlcHMgdG8gYnVpbGRpbmcgYSBiaW5hcnkgUlBNIHBhY2thZ2UsIGFsbCBvZiB3aGljaCBhcmUKIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgRGlzdHV0aWxzOgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKaW5kZXggMTY2NjQzNi4uOWY3YTM4ZSAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CkBAIC0yNiwxNiArMjYsMTYgQEAKICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSsKIHwgYGB6aXBgYCAgIHwgemlwIGZpbGUgKDpmaWxlOmAuemlwYCkgfCAoMSksKDMpIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCAoMiksKDQpIHwKK3wgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCBcKDIpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmd6YCkgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCBcKDQpICAgIHwKK3wgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCAgICAgICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmJ6MmApICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIHwgYGB6dGFyYGAgIHwgY29tcHJlc3NlZCB0YXIgZmlsZSAgICAgfCBcKDQpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLlpgKSAgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCBcKDQpICAgIHwKK3wgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIAogTm90ZXM6CkBAIC01MSw4ICs1MSwxNiBAQAogICAgb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IHNpbmNlIFB5dGhvbiAxLjYpCiAKICg0KQotICAgcmVxdWlyZXMgZXh0ZXJuYWwgdXRpbGl0aWVzOiA6cHJvZ3JhbTpgdGFyYCBhbmQgcG9zc2libHkgb25lIG9mIDpwcm9ncmFtOmBnemlwYCwKLSAgIDpwcm9ncmFtOmBiemlwMmAsIG9yIDpwcm9ncmFtOmBjb21wcmVzc2AKKyAgIHJlcXVpcmVzIHRoZSA6cHJvZ3JhbTpgY29tcHJlc3NgIHByb2dyYW0uIE5vdGljZSB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdworICAgcGVuZGluZyBmb3IgZGVwcmVjYXRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvbi4KKworV2hlbiB1c2luZyBhbnkgYGB0YXJgYCBmb3JtYXQgKGBgZ3p0YXJgYCwgYGBienRhcmBgLCBgYHp0YXJgYCBvcgorYGB0YXJgYCksIHVuZGVyIFVuaXggeW91IGNhbiBzcGVjaWZ5IHRoZSBgYG93bmVyYGAgYW5kIGBgZ3JvdXBgYCBuYW1lcwordGhhdCB3aWxsIGJlIHNldCBmb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGFyY2hpdmUuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCBhbGwgZmlsZXMgb2YgdGhlIGFyY2hpdmUgdG8gYmUgb3duZWQgYnkgcm9vdDo6CisKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdAogCiAKIC4uIF9tYW5pZmVzdDoKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAppbmRleCBiZDY2MDg2Li42Y2I2ODZhIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CkBAIC0yODUsMTQgKzI4NSwxNCBAQAogKiBgYHB5dGhvblguWS1jb25maWcgLS1jZmxhZ3NgYCB3aWxsIGdpdmUgeW91IHRoZSByZWNvbW1lbmRlZCBmbGFncyB3aGVuCiAgIGNvbXBpbGluZzo6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy4zLWNvbmZpZyAtLWNmbGFncwotICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy4zbSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjNtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKKyAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWNmbGFncworICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjRtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKIAogKiBgYHB5dGhvblguWS1jb25maWcgLS1sZGZsYWdzYGAgd2lsbCBnaXZlIHlvdSB0aGUgcmVjb21tZW5kZWQgZmxhZ3Mgd2hlbgogICBsaW5raW5nOjoKIAotICAgJCAvb3B0L2Jpbi9weXRob24zLjMtY29uZmlnIC0tbGRmbGFncwotICAgLUwvb3B0L2xpYi9weXRob24zLjMvY29uZmlnLTMuM20gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuM20gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCisgICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1sZGZsYWdzCisgICAtTC9vcHQvbGliL3B5dGhvbjMuNC9jb25maWctMy40bSAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uMy40bSAtWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKIAogLi4gbm90ZTo6CiAgICBUbyBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBzZXZlcmFsIFB5dGhvbiBpbnN0YWxsYXRpb25zIChhbmQgZXNwZWNpYWxseQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAppbmRleCBmNDg0YmE0Li40NWI1NzIxIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdApAQCAtMTU3LDcgKzE1Nyw4IEBACiAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAvKiB0cF9mbGFncyAqLwogCiBBbGwgdHlwZXMgc2hvdWxkIGluY2x1ZGUgdGhpcyBjb25zdGFudCBpbiB0aGVpciBmbGFncy4gIEl0IGVuYWJsZXMgYWxsIG9mIHRoZQotbWVtYmVycyBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUHl0aG9uLgorbWVtYmVycyBkZWZpbmVkIHVudGlsIGF0IGxlYXN0IFB5dGhvbiAzLjMuICBJZiB5b3UgbmVlZCBmdXJ0aGVyIG1lbWJlcnMsCit5b3Ugd2lsbCBuZWVkIHRvIE9SIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzLgogCiBXZSBwcm92aWRlIGEgZG9jIHN0cmluZyBmb3IgdGhlIHR5cGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RvY2AuIDo6CiAKQEAgLTkyOCw4ICs5MjksOSBAQAogCiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGluc3RhbmNlIG9mIHlvdXIgdHlwZSBpcwogcmVkdWNlZCB0byB6ZXJvIGFuZCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhbnRzIHRvIHJlY2xhaW0gaXQuICBJZiB5b3VyIHR5cGUKLWhhcyBtZW1vcnkgdG8gZnJlZSBvciBvdGhlciBjbGVhbi11cCB0byBwZXJmb3JtLCBwdXQgaXQgaGVyZS4gIFRoZSBvYmplY3QgaXRzZWxmCi1uZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcyBmdW5jdGlvbjo6CitoYXMgbWVtb3J5IHRvIGZyZWUgb3Igb3RoZXIgY2xlYW4tdXAgdG8gcGVyZm9ybSwgeW91IGNhbiBwdXQgaXQgaGVyZS4gIFRoZQorb2JqZWN0IGl0c2VsZiBuZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcworZnVuY3Rpb246OgogCiAgICBzdGF0aWMgdm9pZAogICAgbmV3ZGF0YXR5cGVfZGVhbGxvYyhuZXdkYXRhdHlwZW9iamVjdCAqIG9iaikKQEAgLTk4MCw2ICs5ODIsMjIgQEAKICAgICAgICBQeV9UWVBFKG9iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKICAgIH0KIAorLi4gbm90ZTo6CisgICBUaGVyZSBhcmUgbGltaXRhdGlvbnMgdG8gd2hhdCB5b3UgY2FuIHNhZmVseSBkbyBpbiBhIGRlYWxsb2NhdG9yIGZ1bmN0aW9uLgorICAgRmlyc3QsIGlmIHlvdXIgdHlwZSBzdXBwb3J0cyBnYXJiYWdlIGNvbGxlY3Rpb24gKHVzaW5nIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF90cmF2ZXJzZWAKKyAgIGFuZC9vciA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfY2xlYXJgKSwgc29tZSBvZiB0aGUgb2JqZWN0J3MgbWVtYmVycyBjYW4gaGF2ZSBiZWVuCisgICBjbGVhcmVkIG9yIGZpbmFsaXplZCBieSB0aGUgdGltZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgaXMgY2FsbGVkLiAgU2Vjb25kLCBpbgorICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCB5b3VyIG9iamVjdCBpcyBpbiBhbiB1bnN0YWJsZSBzdGF0ZTogaXRzIHJlZmVyZW5jZQorICAgY291bnQgaXMgZXF1YWwgdG8gemVyby4gIEFueSBjYWxsIHRvIGEgbm9uLXRyaXZpYWwgb2JqZWN0IG9yIEFQSSAoYXMgaW4gdGhlCisgICBleGFtcGxlIGFib3ZlKSBtaWdodCBlbmQgdXAgY2FsbGluZyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgYWdhaW4sIGNhdXNpbmcgYQorICAgZG91YmxlIGZyZWUgYW5kIGEgY3Jhc2guCisKKyAgIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgaXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIHB1dCBhbnkgY29tcGxleAorICAgZmluYWxpemF0aW9uIGNvZGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCBhbmQgaW5zdGVhZCB1c2UgdGhlIG5ldworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCB0eXBlIG1ldGhvZC4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6cGVwOmA0NDJgIGV4cGxhaW5zIHRoZSBuZXcgZmluYWxpemF0aW9uIHNjaGVtZS4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBzdHJpbmc7IG9iamVjdCByZXByZXNlbnRhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9saWJyYXJ5LnJzdCBiL0RvYy9mYXEvbGlicmFyeS5yc3QKaW5kZXggYzhlZjllNy4uOGJkNzc0YiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9saWJyYXJ5LnJzdAorKysgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYyA9IHN5cy5zdGRpbi5yZWFkKDEpCiAgICAgICAgICAgICAgICBwcmludCgiR290IGNoYXJhY3RlciIsIHJlcHIoYykpCi0gICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKICAgIGZpbmFsbHk6CiAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQUZMVVNILCBvbGR0ZXJtKQpAQCAtMjI0LDcgKzIyNCwxMSBAQAogICAgOmZ1bmM6YHRlcm1pb3MudGNzZXRhdHRyYCB0dXJucyBvZmYgc3RkaW4ncyBlY2hvaW5nIGFuZCBkaXNhYmxlcyBjYW5vbmljYWwKICAgIG1vZGUuICA6ZnVuYzpgZmNudGwuZm5jdGxgIGlzIHVzZWQgdG8gb2J0YWluIHN0ZGluJ3MgZmlsZSBkZXNjcmlwdG9yIGZsYWdzCiAgICBhbmQgbW9kaWZ5IHRoZW0gZm9yIG5vbi1ibG9ja2luZyBtb2RlLiAgU2luY2UgcmVhZGluZyBzdGRpbiB3aGVuIGl0IGlzIGVtcHR5Ci0gICByZXN1bHRzIGluIGFuIDpleGM6YElPRXJyb3JgLCB0aGlzIGVycm9yIGlzIGNhdWdodCBhbmQgaWdub3JlZC4KKyAgIHJlc3VsdHMgaW4gYW4gOmV4YzpgT1NFcnJvcmAsIHRoaXMgZXJyb3IgaXMgY2F1Z2h0IGFuZCBpZ25vcmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnN5cy5zdGRpbi5yZWFkKiB1c2VkIHRvIHJhaXNlIDpleGM6YElPRXJyb3JgLiBTdGFydGluZyBmcm9tIFB5dGhvbiAzLjMKKyAgICAgIDpleGM6YElPRXJyb3JgIGlzIGFsaWFzIGZvciA6ZXhjOmBPU0Vycm9yYC4KIAogCiBUaHJlYWRzCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdCBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CmluZGV4IDg4N2YwYjQuLmFjMTJkYTMgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CisrKyBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CkBAIC0xNzQxLDEyICsxNzQxLDEyIEBACiBGb3IgcmVhc29ucyBvZiBlZmZpY2llbmN5IGFzIHdlbGwgYXMgY29uc2lzdGVuY3ksIFB5dGhvbiBvbmx5IHJlYWRzIHRoZSBtb2R1bGUKIGZpbGUgb24gdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMgaW1wb3J0ZWQuICBJZiBpdCBkaWRuJ3QsIGluIGEgcHJvZ3JhbQogY29uc2lzdGluZyBvZiBtYW55IG1vZHVsZXMgd2hlcmUgZWFjaCBvbmUgaW1wb3J0cyB0aGUgc2FtZSBiYXNpYyBtb2R1bGUsIHRoZQotYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZXJlYWRpbmcgb2YgYQorYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZS1yZWFkaW5nIG9mIGEKIGNoYW5nZWQgbW9kdWxlLCBkbyB0aGlzOjoKIAotICAgaW1wb3J0IGltcAorICAgaW1wb3J0IGltcG9ydGxpYgogICAgaW1wb3J0IG1vZG5hbWUKLSAgIGltcC5yZWxvYWQobW9kbmFtZSkKKyAgIGltcG9ydGxpYi5yZWxvYWQobW9kbmFtZSkKIAogV2FybmluZzogdGhpcyB0ZWNobmlxdWUgaXMgbm90IDEwMCUgZm9vbC1wcm9vZi4gIEluIHBhcnRpY3VsYXIsIG1vZHVsZXMKIGNvbnRhaW5pbmcgc3RhdGVtZW50cyBsaWtlIDo6CkBAIC0xNzU4LDEwICsxNzU4LDEwIEBACiB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGNsYXNzIGRlZmluaXRpb24uICBUaGlzIGNhbiByZXN1bHQgaW4gdGhlIGZvbGxvd2luZwogcGFyYWRveGljYWwgYmVoYXZpb3VyOgogCi0gICA+Pj4gaW1wb3J0IGltcAorICAgPj4+IGltcG9ydCBpbXBvcnRsaWIKICAgID4+PiBpbXBvcnQgY2xzCiAgICA+Pj4gYyA9IGNscy5DKCkgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQwotICAgPj4+IGltcC5yZWxvYWQoY2xzKQorICAgPj4+IGltcG9ydGxpYi5yZWxvYWQoY2xzKQogICAgPG1vZHVsZSAnY2xzJyBmcm9tICdjbHMucHknPgogICAgPj4+IGlzaW5zdGFuY2UoYywgY2xzLkMpICAgICAgICMgaXNpbnN0YW5jZSBpcyBmYWxzZT8hPwogICAgRmFsc2UKZGlmZiAtLWdpdCBhL0RvYy9nbG9zc2FyeS5yc3QgYi9Eb2MvZ2xvc3NhcnkucnN0CmluZGV4IDcxZTQ2ODYuLmRmNDcwNTEgMTAwNjQ0Ci0tLSBhL0RvYy9nbG9zc2FyeS5yc3QKKysrIGIvRG9jL2dsb3NzYXJ5LnJzdApAQCAtMzAyLDYgKzMwMiwxNSBAQAogICAgICAgICAgPj4+IHN1bShpKmkgZm9yIGkgaW4gcmFuZ2UoMTApKSAgICAgICAgICMgc3VtIG9mIHNxdWFyZXMgMCwgMSwgNCwgLi4uIDgxCiAgICAgICAgICAyODUKIAorICAgZ2VuZXJpYyBmdW5jdGlvbgorICAgICAgQSBmdW5jdGlvbiBjb21wb3NlZCBvZiBtdWx0aXBsZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBzYW1lIG9wZXJhdGlvbgorICAgICAgZm9yIGRpZmZlcmVudCB0eXBlcy4gV2hpY2ggaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHVzZWQgZHVyaW5nIGEgY2FsbCBpcworICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgZGlzcGF0Y2ggYWxnb3JpdGhtLgorCisgICAgICBTZWUgYWxzbyB0aGUgOnRlcm06YHNpbmdsZSBkaXNwYXRjaGAgZ2xvc3NhcnkgZW50cnksIHRoZQorICAgICAgOmZ1bmM6YGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaGAgZGVjb3JhdG9yLCBhbmQgOnBlcDpgNDQzYC4KKworCiAgICBHSUwKICAgICAgIFNlZSA6dGVybTpgZ2xvYmFsIGludGVycHJldGVyIGxvY2tgLgogCkBAIC02NjMsMjAgKzY3MiwyNyBAQAogICAgcG9zaXRpb25hbCBhcmd1bWVudAogICAgICAgU2VlIDp0ZXJtOmBhcmd1bWVudGAuCiAKLSAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKLSAgICAgIEEgcHJvdmlzaW9uYWwgcGFja2FnZSBpcyBvbmUgd2hpY2ggaGFzIGJlZW4gZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkIGZyb20KKyAgIHByb3Zpc2lvbmFsIEFQSQorICAgICAgQSBwcm92aXNpb25hbCBBUEkgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCiAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeSdzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBXaGlsZSBtYWpvcgotICAgICAgY2hhbmdlcyB0byBzdWNoIHBhY2thZ2VzIGFyZSBub3QgZXhwZWN0ZWQsIGFzIGxvbmcgYXMgdGhleSBhcmUgbWFya2VkCisgICAgICBjaGFuZ2VzIHRvIHN1Y2ggaW50ZXJmYWNlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAogICAgICAgcHJvdmlzaW9uYWwsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsCi0gICAgICBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAorICAgICAgb2YgdGhlIGludGVyZmFjZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAogICAgICAgY2hhbmdlcyB3aWxsIG5vdCBiZSBtYWRlIGdyYXR1aXRvdXNseSAtLSB0aGV5IHdpbGwgb2NjdXIgb25seSBpZiBzZXJpb3VzCi0gICAgICBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZiB0aGUKLSAgICAgIHBhY2thZ2UuCisgICAgICBmdW5kYW1lbnRhbCBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbgorICAgICAgb2YgdGhlIEFQSS4KKworICAgICAgRXZlbiBmb3IgcHJvdmlzaW9uYWwgQVBJcywgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSBzZWVuIGFzCisgICAgICBhICJzb2x1dGlvbiBvZiBsYXN0IHJlc29ydCIgLSBldmVyeSBhdHRlbXB0IHdpbGwgc3RpbGwgYmUgbWFkZSB0byBmaW5kCisgICAgICBhIGJhY2t3YXJkcyBjb21wYXRpYmxlIHJlc29sdXRpb24gdG8gYW55IGlkZW50aWZpZWQgcHJvYmxlbXMuCiAKICAgICAgIFRoaXMgcHJvY2VzcyBhbGxvd3MgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdG8gY29udGludWUgdG8gZXZvbHZlIG92ZXIKICAgICAgIHRpbWUsIHdpdGhvdXQgbG9ja2luZyBpbiBwcm9ibGVtYXRpYyBkZXNpZ24gZXJyb3JzIGZvciBleHRlbmRlZCBwZXJpb2RzCiAgICAgICBvZiB0aW1lLiAgU2VlIDpwZXA6YDQxMWAgZm9yIG1vcmUgZGV0YWlscy4KIAorICAgcHJvdmlzaW9uYWwgcGFja2FnZQorICAgICAgU2VlIDp0ZXJtOmBwcm92aXNpb25hbCBBUElgLgorCiAgICBQeXRob24gMzAwMAogICAgICAgTmlja25hbWUgZm9yIHRoZSBQeXRob24gMy54IHJlbGVhc2UgbGluZSAoY29pbmVkIGxvbmcgYWdvIHdoZW4gdGhlCiAgICAgICByZWxlYXNlIG9mIHZlcnNpb24gMyB3YXMgc29tZXRoaW5nIGluIHRoZSBkaXN0YW50IGZ1dHVyZS4pICBUaGlzIGlzIGFsc28KQEAgLTc1NSw2ICs3NzEsMTAgQEAKICAgICAgIG1hcHBpbmcgcmF0aGVyIHRoYW4gYSBzZXF1ZW5jZSBiZWNhdXNlIHRoZSBsb29rdXBzIHVzZSBhcmJpdHJhcnkKICAgICAgIDp0ZXJtOmBpbW11dGFibGVgIGtleXMgcmF0aGVyIHRoYW4gaW50ZWdlcnMuCiAKKyAgIHNpbmdsZSBkaXNwYXRjaAorICAgICAgQSBmb3JtIG9mIDp0ZXJtOmBnZW5lcmljIGZ1bmN0aW9uYCBkaXNwYXRjaCB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMKKyAgICAgIGNob3NlbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBhIHNpbmdsZSBhcmd1bWVudC4KKwogICAgc2xpY2UKICAgICAgIEFuIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5pbmcgYSBwb3J0aW9uIG9mIGEgOnRlcm06YHNlcXVlbmNlYC4gIEEgc2xpY2UgaXMKICAgICAgIGNyZWF0ZWQgdXNpbmcgdGhlIHN1YnNjcmlwdCBub3RhdGlvbiwgYGBbXWBgIHdpdGggY29sb25zIGJldHdlZW4gbnVtYmVycwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0IGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CmluZGV4IGQyNDFmMWEuLjBmNGM0ZTQgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAorKysgYi9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKQEAgLTMsNyArMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiA6QXV0aG9yOiBBLiBNLiBLdWNobGluZwotOlJlbGVhc2U6IDAuMzEKKzpSZWxlYXNlOiAwLjMyCiAKIEluIHRoaXMgZG9jdW1lbnQsIHdlJ2xsIHRha2UgYSB0b3VyIG9mIFB5dGhvbidzIGZlYXR1cmVzIHN1aXRhYmxlIGZvcgogaW1wbGVtZW50aW5nIHByb2dyYW1zIGluIGEgZnVuY3Rpb25hbCBzdHlsZS4gIEFmdGVyIGFuIGludHJvZHVjdGlvbiB0byB0aGUKQEAgLTE1LDkgKzE1LDkgQEAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09CiAKLVRoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUgYmFzaWMgY29uY2VwdCBvZiBmdW5jdGlvbmFsIHByb2dyYW1taW5nOyBpZiB5b3UncmUKLWp1c3QgaW50ZXJlc3RlZCBpbiBsZWFybmluZyBhYm91dCBQeXRob24gbGFuZ3VhZ2UgZmVhdHVyZXMsIHNraXAgdG8gdGhlIG5leHQKLXNlY3Rpb24uCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYKK3lvdSdyZSBqdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLAorc2tpcCB0byB0aGUgbmV4dCBzZWN0aW9uIG9uIDpyZWY6YGZ1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzYC4KIAogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHN1cHBvcnQgZGVjb21wb3NpbmcgcHJvYmxlbXMgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKIApAQCAtMTczLDYgKzE3Myw4IEBACiBhIGZldyBmdW5jdGlvbnMgc3BlY2lhbGl6ZWQgZm9yIHRoZSBjdXJyZW50IHRhc2suCiAKIAorLi4gX2Z1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzOgorCiBJdGVyYXRvcnMKID09PT09PT09PQogCkBAIC02NzAsNyArNjcyLDcgQEAKIAogOmZ1bmM6YHNvcnRlZChpdGVyYWJsZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpIDxzb3J0ZWQ+YCBjb2xsZWN0cyBhbGwgdGhlCiBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUgaW50byBhIGxpc3QsIHNvcnRzIHRoZSBsaXN0LCBhbmQgcmV0dXJucyB0aGUgc29ydGVkCi1yZXN1bHQuICBUaGUgKmtleSosIGFuZCAqcmV2ZXJzZSogYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK3Jlc3VsdC4gIFRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiBjb25zdHJ1Y3RlZCBsaXN0J3MgOm1ldGg6YH5saXN0LnNvcnRgIG1ldGhvZC4gOjoKIAogICAgID4+PiBpbXBvcnQgcmFuZG9tCkBAIC04MzYsNyArODM4LDggQEAKIHByZWRpY2F0ZS4KIAogOmZ1bmM6YGl0ZXJ0b29scy5maWx0ZXJmYWxzZShwcmVkaWNhdGUsIGl0ZXIpIDxpdGVydG9vbHMuZmlsdGVyZmFsc2U+YCBpcyB0aGUKLW9wcG9zaXRlLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgZmFsc2U6Ogorb3Bwb3NpdGUgb2YgOmZ1bmM6YGZpbHRlcmAsIHJldHVybmluZyBhbGwgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUKK3JldHVybnMgZmFsc2U6OgogCiAgICAgaXRlcnRvb2xzLmZpbHRlcmZhbHNlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgogICAgICAgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgLi4uCkBAIC04NjQsNiArODY3LDc3IEBACiAgICAgaXRlcnRvb2xzLmRyb3B3aGlsZShpc19ldmVuLCBpdGVydG9vbHMuY291bnQoKSkgPT4KICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAuLi4KIAorOmZ1bmM6YGl0ZXJ0b29scy5jb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIDxpdGVydG9vbHMuY29tcHJlc3M+YCB0YWtlcyB0d28KK2l0ZXJhdG9ycyBhbmQgcmV0dXJucyBvbmx5IHRob3NlIGVsZW1lbnRzIG9mICpkYXRhKiBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKK2VsZW1lbnQgb2YgKnNlbGVjdG9ycyogaXMgdHJ1ZSwgc3RvcHBpbmcgd2hlbmV2ZXIgZWl0aGVyIG9uZSBpcyBleGhhdXN0ZWQ6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKFsxLDIsMyw0LDVdLCBbVHJ1ZSwgVHJ1ZSwgRmFsc2UsIEZhbHNlLCBUcnVlXSkgPT4KKyAgICAgICAxLCAyLCA1CisKKworQ29tYmluYXRvcmljIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoaXRlcmFibGUsIHIpIDxpdGVydG9vbHMuY29tYmluYXRpb25zPmAKK3JldHVybnMgYW4gaXRlcmF0b3IgZ2l2aW5nIGFsbCBwb3NzaWJsZSAqciotdHVwbGUgY29tYmluYXRpb25zIG9mIHRoZQorZWxlbWVudHMgY29udGFpbmVkIGluICppdGVyYWJsZSouICA6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgNSkKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAzKSA9PgorICAgICAgKDEsIDIsIDMpLCAoMSwgMiwgNCksICgxLCAyLCA1KSwgKDEsIDMsIDQpLCAoMSwgMywgNSksICgxLCA0LCA1KSwKKyAgICAgICgyLCAzLCA0KSwgKDIsIDMsIDUpLCAoMiwgNCwgNSksCisgICAgICAoMywgNCwgNSkKKworVGhlIGVsZW1lbnRzIHdpdGhpbiBlYWNoIHR1cGxlIHJlbWFpbiBpbiB0aGUgc2FtZSBvcmRlciBhcworKml0ZXJhYmxlKiByZXR1cm5lZCB0aGVtLiAgRm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgMSBpcyBhbHdheXMgYmVmb3JlCisyLCAzLCA0LCBvciA1IGluIHRoZSBleGFtcGxlcyBhYm92ZS4gIEEgc2ltaWxhciBmdW5jdGlvbiwKKzpmdW5jOmBpdGVydG9vbHMucGVybXV0YXRpb25zKGl0ZXJhYmxlLCByPU5vbmUpIDxpdGVydG9vbHMucGVybXV0YXRpb25zPmAsCityZW1vdmVzIHRoaXMgY29uc3RyYWludCBvbiB0aGUgb3JkZXIsIHJldHVybmluZyBhbGwgcG9zc2libGUKK2FycmFuZ2VtZW50cyBvZiBsZW5ndGggKnIqOjoKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDEpLCAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDEpLCAoMywgMiksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDEpLCAoNCwgMiksICg0LCAzKSwgKDQsIDUpLAorICAgICAgKDUsIDEpLCAoNSwgMiksICg1LCAzKSwgKDUsIDQpCisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKFsxLCAyLCAzLCA0LCA1XSkgPT4KKyAgICAgICgxLCAyLCAzLCA0LCA1KSwgKDEsIDIsIDMsIDUsIDQpLCAoMSwgMiwgNCwgMywgNSksCisgICAgICAuLi4KKyAgICAgICg1LCA0LCAzLCAyLCAxKQorCitJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgdmFsdWUgZm9yICpyKiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVyYWJsZSBpcyB1c2VkLAorbWVhbmluZyB0aGF0IGFsbCB0aGUgZWxlbWVudHMgYXJlIHBlcm11dGVkLgorCitOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHByb2R1Y2UgYWxsIG9mIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkKK3Bvc2l0aW9uIGFuZCBkb24ndCByZXF1aXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mICppdGVyYWJsZSogYXJlIHVuaXF1ZTo6CisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKCdhYmEnLCAzKSA9PgorICAgICAgKCdhJywgJ2InLCAnYScpLCAoJ2EnLCAnYScsICdiJyksICgnYicsICdhJywgJ2EnKSwKKyAgICAgICgnYicsICdhJywgJ2EnKSwgKCdhJywgJ2EnLCAnYicpLCAoJ2EnLCAnYicsICdhJykKKworVGhlIGlkZW50aWNhbCB0dXBsZSBgYCgnYScsICdhJywgJ2InKWBgIG9jY3VycyB0d2ljZSwgYnV0IHRoZSB0d28gJ2EnCitzdHJpbmdzIGNhbWUgZnJvbSBkaWZmZXJlbnQgcG9zaXRpb25zLgorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcikgPGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudD5gCitmdW5jdGlvbiByZWxheGVzIGEgZGlmZmVyZW50IGNvbnN0cmFpbnQ6IGVsZW1lbnRzIGNhbiBiZSByZXBlYXRlZAord2l0aGluIGEgc2luZ2xlIHR1cGxlLiAgQ29uY2VwdHVhbGx5IGFuIGVsZW1lbnQgaXMgc2VsZWN0ZWQgZm9yIHRoZQorZmlyc3QgcG9zaXRpb24gb2YgZWFjaCB0dXBsZSBhbmQgdGhlbiBpcyByZXBsYWNlZCBiZWZvcmUgdGhlIHNlY29uZAorZWxlbWVudCBpcyBzZWxlY3RlZC4gIDo6CisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMiksICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgMyksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDQpLCAoNCwgNSksCisgICAgICAoNSwgNSkKKwogCiBHcm91cGluZyBlbGVtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk4Niw2ICsxMDYwLDE3IEBACiAgICBmb3IgaSBpbiBbMSwyLDNdOgogICAgICAgIHByb2R1Y3QgKj0gaQogCitBIHJlbGF0ZWQgZnVuY3Rpb24gaXMgYGl0ZXJ0b29scy5hY2N1bXVsYXRlKGl0ZXJhYmxlLCBmdW5jPW9wZXJhdG9yLmFkZCkgPGl0ZXJ0b29scy5hY2N1bXVsYXRlYC4KK0l0IHBlcmZvcm1zIHRoZSBzYW1lIGNhbGN1bGF0aW9uLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgb25seSB0aGUKK2ZpbmFsIHJlc3VsdCwgOmZ1bmM6YGFjY3VtdWxhdGVgIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBhbHNvIHlpZWxkcworZWFjaCBwYXJ0aWFsIHJlc3VsdDo6CisKKyAgICBpdGVydG9vbHMuYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkgPT4KKyAgICAgIDEsIDMsIDYsIDEwLCAxNQorCisgICAgaXRlcnRvb2xzLmFjY3VtdWxhdGUoWzEsMiwzLDQsNV0sIG9wZXJhdG9yLm11bCkgPT4KKyAgICAgIDEsIDIsIDYsIDI0LCAxMjAKKwogCiBUaGUgb3BlcmF0b3IgbW9kdWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTU5LDUxICsxMjQ0LDYgQEAKIAogLi4gY29tbWVudAogCi0gICAgVG9waWNzIHRvIHBsYWNlCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIFhYWCBvcy53YWxrKCkKLQotICAgIFhYWCBOZWVkIGEgbGFyZ2UgZXhhbXBsZS4KLQotICAgIEJ1dCB3aWxsIGFuIGV4YW1wbGUgYWRkIG11Y2g/ICBJJ2xsIHBvc3QgYSBmaXJzdCBkcmFmdCBhbmQgc2VlCi0gICAgd2hhdCB0aGUgY29tbWVudHMgc2F5LgotCi0uLiBjb21tZW50Ci0KLSAgICBPcmlnaW5hbCBvdXRsaW5lOgotICAgIEludHJvZHVjdGlvbgotICAgICAgICAgICAgSWRlYSBvZiBGUAotICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyBidWlsdCBvdXQgb2YgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBhcmUgc3RyaWN0bHkgaW5wdXQtb3V0cHV0LCBubyBpbnRlcm5hbCBzdGF0ZQotICAgICAgICAgICAgT3Bwb3NlZCB0byBPTyBwcm9ncmFtbWluZywgd2hlcmUgb2JqZWN0cyBoYXZlIHN0YXRlCi0KLSAgICAgICAgICAgIFdoeSBGUD8KLSAgICAgICAgICAgICAgICAgICAgRm9ybWFsIHByb3ZhYmlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudCBpcyBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHZlcnkgcmVsZXZhbnQgdG8gUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgIE1vZHVsYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbWFsbCBmdW5jdGlvbnMgdGhhdCBkbyBvbmUgdGhpbmcKLSAgICAgICAgICAgICAgICAgICAgRGVidWdnYWJpbGl0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHRlc3QgZHVlIHRvIGxhY2sgb2Ygc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHZlcmlmeSBvdXRwdXQgZnJvbSBpbnRlcm1lZGlhdGUgc3RlcHMKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zYWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhc3NlbWJsZSBhIHRvb2xib3ggb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG1peGVkCi0KLSAgICBUYWNrbGluZyBhIHByb2JsZW0KLSAgICAgICAgICAgIE5lZWQgYSBzaWduaWZpY2FudCBleGFtcGxlCi0KLSAgICBJdGVyYXRvcnMKLSAgICBHZW5lcmF0b3JzCi0gICAgVGhlIGl0ZXJ0b29scyBtb2R1bGUKLSAgICBMaXN0IGNvbXByZWhlbnNpb25zCi0gICAgU21hbGwgZnVuY3Rpb25zIGFuZCB0aGUgbGFtYmRhIHN0YXRlbWVudAotICAgIEJ1aWx0LWluIGZ1bmN0aW9ucwotICAgICAgICAgICAgbWFwCi0gICAgICAgICAgICBmaWx0ZXIKLQotLi4gY29tbWVudAotCiAgICAgSGFuZHkgbGl0dGxlIGZ1bmN0aW9uIGZvciBwcmludGluZyBwYXJ0IG9mIGFuIGl0ZXJhdG9yIC0tIHVzZWQKICAgICB3aGlsZSB3cml0aW5nIHRoaXMgZG9jdW1lbnQuCiAKQEAgLTEyMTQsNSArMTI1NCwzIEBACiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIoZWxlbSkpCiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLCAnKQogICAgICAgICBwcmludChlbGVtWy0xXSkKLQotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKaW5kZXggM2YyNTZlMS4uZmViOWI2YyAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdApAQCAtNzA0LDkgKzcwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIocmVjb3JkLm5hbWUpCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShyZWNvcmQpICMgTm8gbGV2ZWwgb3IgZmlsdGVyIGxvZ2ljIGFwcGxpZWQgLSBqdXN0IGRvIGl0IQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdHJhY2ViYWNrCiAgICAgICAgICAgICAgICAgcHJpbnQoJ1dob29wcyEgUHJvYmxlbTonLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKaW5kZXggMTY1NDg2YS4uYzdhODAyYSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdApAQCAtOTAwLDEwICs5MDAsMTAgQEAKICAgIGRpc2sgZmlsZXMsIHJvdGF0aW5nIHRoZSBsb2cgZmlsZSBhdCBjZXJ0YWluIHRpbWVkIGludGVydmFscy4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuU29ja2V0SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gVENQL0lQCi0gICBzb2NrZXRzLgorICAgc29ja2V0cy4gU2luY2UgMy40LCBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBhbHNvIHN1cHBvcnRlZC4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBVRFAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5TTVRQSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBkZXNpZ25hdGVkCiAgICBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3JlZ2V4LnJzdCBiL0RvYy9ob3d0by9yZWdleC5yc3QKaW5kZXggNTIwM2U1My4uZmJlNzYzYiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3JlZ2V4LnJzdAorKysgYi9Eb2MvaG93dG8vcmVnZXgucnN0CkBAIC0yNzEsOCArMjcxLDggQEAKIAogICAgPj4+IGltcG9ydCByZQogICAgPj4+IHAgPSByZS5jb21waWxlKCdhYionKQotICAgPj4+IHAgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCAweC4uLj4KKyAgID4+PiBwCisgICByZS5jb21waWxlKCdhYionKQogCiA6ZnVuYzpgcmUuY29tcGlsZWAgYWxzbyBhY2NlcHRzIGFuIG9wdGlvbmFsICpmbGFncyogYXJndW1lbnQsIHVzZWQgdG8gZW5hYmxlCiB2YXJpb3VzIHNwZWNpYWwgZmVhdHVyZXMgYW5kIHN5bnRheCB2YXJpYXRpb25zLiAgV2UnbGwgZ28gb3ZlciB0aGUgYXZhaWxhYmxlCkBAIC0zODMsOCArMzgzLDggQEAKIAogICAgPj4+IGltcG9ydCByZQogICAgPj4+IHAgPSByZS5jb21waWxlKCdbYS16XSsnKQotICAgPj4+IHAgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCAweC4uLj4KKyAgID4+PiBwCisgICByZS5jb21waWxlKCdbYS16XSsnKQogCiBOb3csIHlvdSBjYW4gdHJ5IG1hdGNoaW5nIHZhcmlvdXMgc3RyaW5ncyBhZ2FpbnN0IHRoZSBSRSBgYFthLXpdK2BgLiAgQW4gZW1wdHkKIHN0cmluZyBzaG91bGRuJ3QgbWF0Y2ggYXQgYWxsLCBzaW5jZSBgYCtgYCBtZWFucyAnb25lIG9yIG1vcmUgcmVwZXRpdGlvbnMnLgpAQCAtNDAyLDcgKzQwMiw3IEBACiAKICAgID4+PiBtID0gcC5tYXRjaCgndGVtcG8nKQogICAgPj4+IG0gICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA1KSwgbWF0Y2g9J3RlbXBvJz4KIAogTm93IHlvdSBjYW4gcXVlcnkgdGhlIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gIGZvciBpbmZvcm1hdGlvbgogYWJvdXQgdGhlIG1hdGNoaW5nIHN0cmluZy4gIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gIGluc3RhbmNlcwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICA+Pj4gcHJpbnQocC5tYXRjaCgnOjo6IG1lc3NhZ2UnKSkKICAgIE5vbmUKICAgID4+PiBtID0gcC5zZWFyY2goJzo6OiBtZXNzYWdlJyk7IHByaW50KG0pICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNCwgMTEpLCBtYXRjaD0nbWVzc2FnZSc+CiAgICA+Pj4gbS5ncm91cCgpCiAgICAnbWVzc2FnZScKICAgID4+PiBtLnNwYW4oKQpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICA+Pj4gcHJpbnQocmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb21hZ2UgYW1rJykpCiAgICBOb25lCiAgICA+Pj4gcmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb20gYW1rIFRodSBNYXkgMTQgMTk6MTI6MTAgMTk5OCcpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNSksIG1hdGNoPSdGcm9tICc+CiAKIFVuZGVyIHRoZSBob29kLCB0aGVzZSBmdW5jdGlvbnMgc2ltcGx5IGNyZWF0ZSBhIHBhdHRlcm4gb2JqZWN0IGZvciB5b3UKIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb24gaXQuICBUaGV5IGFsc28gc3RvcmUgdGhlIGNvbXBpbGVkCkBAIC02ODUsNyArNjg1LDcgQEAKICAgIGxpbmUsIHRoZSBSRSB0byB1c2UgaXMgYGBeRnJvbWBgLiA6OgogCiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCdeRnJvbScsICdGcm9tIEhlcmUgdG8gRXRlcm5pdHknKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9J0Zyb20nPgogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnXkZyb20nLCAnUmVjaXRpbmcgRnJvbSBNZW1vcnknKSkKICAgICAgIE5vbmUKIApAQCAtNjk3LDExICs2OTcsMTEgQEAKICAgIG9yIGFueSBsb2NhdGlvbiBmb2xsb3dlZCBieSBhIG5ld2xpbmUgY2hhcmFjdGVyLiAgICAgOjoKIAogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfScpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDYsIDcpLCBtYXRjaD0nfSc+CiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCd9JCcsICd7YmxvY2t9ICcpKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfVxuJykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNiwgNyksIG1hdGNoPSd9Jz4KIAogICAgVG8gbWF0Y2ggYSBsaXRlcmFsIGBgJyQnYGAsIHVzZSBgYFwkYGAgb3IgZW5jbG9zZSBpdCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsCiAgICBhcyBpbiAgYGBbJF1gYC4KQEAgLTcyNiw3ICs3MjYsNyBAQAogCiAgICAgICA+Pj4gcCA9IHJlLmNvbXBpbGUocidcYmNsYXNzXGInKQogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCdubyBjbGFzcyBhdCBhbGwnKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgzLCA4KSwgbWF0Y2g9J2NsYXNzJz4KICAgICAgID4+PiBwcmludChwLnNlYXJjaCgndGhlIGRlY2xhc3NpZmllZCBhbGdvcml0aG0nKSkKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnb25lIHN1YmNsYXNzIGlzJykpCkBAIC03NDQsNyArNzQ0LDcgQEAKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnbm8gY2xhc3MgYXQgYWxsJykpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ1xiJyArICdjbGFzcycgKyAnXGInKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA3KSwgbWF0Y2g9J1x4MDhjbGFzc1x4MDgnPgogCiAgICBTZWNvbmQsIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgd2hlcmUgdGhlcmUncyBubyB1c2UgZm9yIHRoaXMgYXNzZXJ0aW9uLAogICAgYGBcYmBgIHJlcHJlc2VudHMgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uJ3MKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91cmxsaWIyLnJzdCBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAppbmRleCA3NGVlZWUwLi43YjIxN2VhIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QKKysrIGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CkBAIC01MDcsNyArNTA3LDcgQEAKICAgICAtLSBgYFByb3h5SGFuZGxlcmBgIChpZiBhIHByb3h5IHNldHRpbmcgc3VjaCBhcyBhbiA6ZW52dmFyOmBodHRwX3Byb3h5YAogICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIGBgVW5rbm93bkhhbmRsZXJgYCwgYGBIVFRQSGFuZGxlcmBgLAogICAgIGBgSFRUUERlZmF1bHRFcnJvckhhbmRsZXJgYCwgYGBIVFRQUmVkaXJlY3RIYW5kbGVyYGAsIGBgRlRQSGFuZGxlcmBgLAotICAgIGBgRmlsZUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KKyAgICBgYEZpbGVIYW5kbGVyYGAsIGBgRGF0YUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KIAogYGB0b3BfbGV2ZWxfdXJsYGAgaXMgaW4gZmFjdCAqZWl0aGVyKiBhIGZ1bGwgVVJMIChpbmNsdWRpbmcgdGhlICdodHRwOicgc2NoZW1lCiBjb21wb25lbnQgYW5kIHRoZSBob3N0bmFtZSBhbmQgb3B0aW9uYWxseSB0aGUgcG9ydCBudW1iZXIpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQppbmRleCBjYzU1MjllLi4zYzdjNzcwIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKQEAgLTgsNyArOCw3IEBACiAjIEZvciBndWVzc2luZyBNSU1FIHR5cGUgYmFzZWQgb24gZmlsZSBuYW1lIGV4dGVuc2lvbgogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIGZyb20gZW1haWwgaW1wb3J0IGVuY29kZXJzCiBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKQEAgLTIyLDQ0ICsyMiwzNiBAQAogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIiIlwKKyAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIiJcCiBTZW5kIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhcyBhIE1JTUUgbWVzc2FnZS4KLQotVXNhZ2U6ICVwcm9nIFtvcHRpb25zXQotCiBVbmxlc3MgdGhlIC1vIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGVtYWlsIGlzIHNlbnQgYnkgZm9yd2FyZGluZyB0byB5b3VyIGxvY2FsCiBTTVRQIHNlcnZlciwgd2hpY2ggdGhlbiBkb2VzIHRoZSBub3JtYWwgZGVsaXZlcnkgcHJvY2Vzcy4gIFlvdXIgbG9jYWwgbWFjaGluZQogbXVzdCBiZSBydW5uaW5nIGFuIFNNVFAgc2VydmVyLgogIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9ubHkgdGhlIHJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGFyZSBzZW50LCBhbmQgd2UgZG9uJ3QgcmVjdXJzZSB0bwotICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdGSUxFJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlByaW50IHRoZSBjb21wb3NlZCBtZXNzYWdlIHRvIEZJTEUgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2UgdG8gdGhlIFNNVFAgc2VydmVyLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZW5kZXInLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdTRU5ERVInLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIChyZXF1aXJlZCknKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlY2lwaWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGRlc3Q9J3JlY2lwaWVudHMnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0EgVG86IGhlYWRlciB2YWx1ZSAoYXQgbGVhc3Qgb25lIHJlcXVpcmVkKScpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5zZW5kZXIgb3Igbm90IG9wdHMucmVjaXBpZW50czoKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIGRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kaXJlY3RvcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT25seSB0aGUgcmVndWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgc2VudCwgYW5kIHdlIGRvbid0IHJlY3Vyc2UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW91dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiUHJpbnQgdGhlIGNvbXBvc2VkIG1lc3NhZ2UgdG8gRklMRSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zZW5kZXInLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZhbHVlIG9mIHRoZSBGcm9tOiBoZWFkZXIgKHJlcXVpcmVkKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZWNpcGllbnQnLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgZGVzdD0ncmVjaXBpZW50cycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIFRvOiBoZWFkZXIgdmFsdWUgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCknKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgZGlyZWN0b3J5ID0gYXJncy5kaXJlY3RvcnkKICAgICBpZiBub3QgZGlyZWN0b3J5OgogICAgICAgICBkaXJlY3RvcnkgPSAnLicKICAgICAjIENyZWF0ZSB0aGUgZW5jbG9zaW5nIChvdXRlcikgbWVzc2FnZQogICAgIG91dGVyID0gTUlNRU11bHRpcGFydCgpCiAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdDb250ZW50cyBvZiBkaXJlY3RvcnkgJXMnICUgb3MucGF0aC5hYnNwYXRoKGRpcmVjdG9yeSkKLSAgICBvdXRlclsnVG8nXSA9IENPTU1BU1BBQ0Uuam9pbihvcHRzLnJlY2lwaWVudHMpCi0gICAgb3V0ZXJbJ0Zyb20nXSA9IG9wdHMuc2VuZGVyCisgICAgb3V0ZXJbJ1RvJ10gPSBDT01NQVNQQUNFLmpvaW4oYXJncy5yZWNpcGllbnRzKQorICAgIG91dGVyWydGcm9tJ10gPSBhcmdzLnNlbmRlcgogICAgIG91dGVyLnByZWFtYmxlID0gJ1lvdSB3aWxsIG5vdCBzZWUgdGhpcyBpbiBhIE1JTUUtYXdhcmUgbWFpbCByZWFkZXIuXG4nCiAKICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgpAQCAtNzYsMjMgKzY4LDE5IEBACiAgICAgICAgICAgICBjdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nCiAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gY3R5cGUuc3BsaXQoJy8nLCAxKQogICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCkKLSAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAotICAgICAgICAgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGZwOgorICAgICAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxpZiBtYWludHlwZSA9PSAnaW1hZ2UnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FSW1hZ2UoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVJbWFnZShmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsaWYgbWFpbnR5cGUgPT0gJ2F1ZGlvJzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUF1ZGlvKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FQXVkaW8oZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FQmFzZShtYWludHlwZSwgc3VidHlwZSkKLSAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCisgICAgICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKGZwLnJlYWQoKSkKICAgICAgICAgICAgICMgRW5jb2RlIHRoZSBwYXlsb2FkIHVzaW5nIEJhc2U2NAogICAgICAgICAgICAgZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NChtc2cpCiAgICAgICAgICMgU2V0IHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIKQEAgLTEwMCwxNCArODgsMTIgQEAKICAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKICAgICAjIE5vdyBzZW5kIG9yIHN0b3JlIHRoZSBtZXNzYWdlCiAgICAgY29tcG9zZWQgPSBvdXRlci5hc19zdHJpbmcoKQotICAgIGlmIG9wdHMub3V0cHV0OgotICAgICAgICBmcCA9IG9wZW4ob3B0cy5vdXRwdXQsICd3JykKLSAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICBpZiBhcmdzLm91dHB1dDoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0cHV0LCAndycpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCiAgICAgZWxzZToKLSAgICAgICAgcyA9IHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykKLSAgICAgICAgcy5zZW5kbWFpbChvcHRzLnNlbmRlciwgb3B0cy5yZWNpcGllbnRzLCBjb21wb3NlZCkKLSAgICAgICAgcy5xdWl0KCkKKyAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpIGFzIHM6CisgICAgICAgICAgICBzLnNlbmRtYWlsKGFyZ3Muc2VuZGVyLCBhcmdzLnJlY2lwaWVudHMsIGNvbXBvc2VkKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQppbmRleCAzNjUzNTQzLi41NzRhMGI2IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKQEAgLTgsNDEgKzgsMjcgQEAKIGltcG9ydCBlcnJubwogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIAogZGVmIG1haW4oKToKLSAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9IiIiXAorICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKIFVucGFjayBhIE1JTUUgbWVzc2FnZSBpbnRvIGEgZGlyZWN0b3J5IG9mIGZpbGVzLgotCi1Vc2FnZTogJXByb2cgW29wdGlvbnNdIG1zZ2ZpbGUKICIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kaXJlY3RvcnknLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiVW5wYWNrIHRoZSBNSU1FIG1lc3NhZ2UgaW50byB0aGUgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICBleGlzdC4iIiIpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5kaXJlY3Rvcnk6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRpcmVjdG9yeScsIHJlcXVpcmVkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlVucGFjayB0aGUgTUlNRSBtZXNzYWdlIGludG8gdGhlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdtc2dmaWxlJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgd2l0aCBvcGVuKGFyZ3MubXNnZmlsZSkgYXMgZnA6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQogCiAgICAgdHJ5OgotICAgICAgICBtc2dmaWxlID0gYXJnc1swXQotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9zLm1rZGlyKG9wdHMuZGlyZWN0b3J5KQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICMgSWdub3JlIGRpcmVjdG9yeSBleGlzdHMgZXJyb3IKLSAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi0gICAgZnAgPSBvcGVuKG1zZ2ZpbGUpCi0gICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCi0gICAgZnAuY2xvc2UoKQorICAgICAgICBvcy5ta2RpcihhcmdzLmRpcmVjdG9yeSkKKyAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICBwYXNzCiAKICAgICBjb3VudGVyID0gMQogICAgIGZvciBwYXJ0IGluIG1zZy53YWxrKCk6CkBAIC01OSw5ICs0NSw4IEBACiAgICAgICAgICAgICAgICAgZXh0ID0gJy5iaW4nCiAgICAgICAgICAgICBmaWxlbmFtZSA9ICdwYXJ0LSUwM2QlcycgJSAoY291bnRlciwgZXh0KQogICAgICAgICBjb3VudGVyICs9IDEKLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihvcHRzLmRpcmVjdG9yeSwgZmlsZW5hbWUpLCAnd2InKQotICAgICAgICBmcC53cml0ZShwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGFyZ3MuZGlyZWN0b3J5LCBmaWxlbmFtZSksICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUocGFydC5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5IGIvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NjNlYTkuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotIwotIyBTaW1wbGUgYmVuY2htYXJrcyBmb3IgdGhlIG11bHRpcHJvY2Vzc2luZyBwYWNrYWdlCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IHRpbWUKLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCBxdWV1ZQotaW1wb3J0IGdjCi0KLV90aW1lciA9IHRpbWUucGVyZl9jb3VudGVyCi0KLWRlbHRhID0gMQotCi0KLSMjIyMgVEVTVF9RVUVVRVNQRUVECi0KLWRlZiBxdWV1ZXNwZWVkX2Z1bmMocSwgYywgaXRlcmF0aW9ucyk6Ci0gICAgYSA9ICcwJyAqIDI1NgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotICAgIGMucmVsZWFzZSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgcS5wdXQoYSkKLQotICAgIHEucHV0KCdTVE9QJykKLQotZGVmIHRlc3RfcXVldWVzcGVlZChQcm9jZXNzLCBxLCBjKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1xdWV1ZXNwZWVkX2Z1bmMsIGFyZ3M9KHEsIGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgYy53YWl0KCkKLSAgICAgICAgYy5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBxLmdldCgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zLCAnb2JqZWN0cyBwYXNzZWQgdGhyb3VnaCB0aGUgcXVldWUgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX1BJUEVTUEVFRAotCi1kZWYgcGlwZV9mdW5jKGMsIGNvbmQsIGl0ZXJhdGlvbnMpOgotICAgIGEgPSAnMCcgKiAyNTYKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgIGMuc2VuZChhKQotCi0gICAgYy5zZW5kKCdTVE9QJykKLQotZGVmIHRlc3RfcGlwZXNwZWVkKCk6Ci0gICAgYywgZCA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXBpcGVfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGQsIGNvbmQsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjb25kLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgY29uZC53YWl0KCkKLSAgICAgICAgY29uZC5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBjLnJlY3YoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdvYmplY3RzIHBhc3NlZCB0aHJvdWdoIGNvbm5lY3Rpb24gaW4nLGVsYXBzZWQsJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9TRVFTUEVFRAotCi1kZWYgdGVzdF9zZXFzcGVlZChzZXEpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBhID0gc2VxWzVdCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ2l0ZXJhdGlvbnMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX0xPQ0sKLQotZGVmIHRlc3RfbG9ja3NwZWVkKGwpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBsLmFjcXVpcmUoKQotICAgICAgICAgICAgbC5yZWxlYXNlKCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICBwcmludChpdGVyYXRpb25zLCAnaXRlcmF0aW9ucyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfQ09ORElUSU9OCi0KLWRlZiBjb25kaXRpb25zcGVlZF9mdW5jKGMsIE4pOgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgIGMud2FpdCgpCi0gICAgICAgIGMubm90aWZ5KCkKLQotICAgIGMucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X2NvbmRpdGlvbnNwZWVkKFByb2Nlc3MsIGMpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgYy5hY3F1aXJlKCkKLSAgICAgICAgcCA9IFByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbnNwZWVkX2Z1bmMsIGFyZ3M9KGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBwLnN0YXJ0KCkKLQotICAgICAgICBjLndhaXQoKQotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgYy5ub3RpZnkoKQotICAgICAgICAgICAgYy53YWl0KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICAgICAgYy5yZWxlYXNlKCkKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMgKiAyLCAnd2FpdHMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zICogMiAvIGVsYXBzZWQpCi0KLSMjIyMKLQotZGVmIHRlc3QoKToKLSAgICBtYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgZ2MuZGlzYWJsZSgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUuUXVldWVcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKHRocmVhZGluZy5UaHJlYWQsIHF1ZXVlLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG1hbmFnZXIuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlBpcGVcbicpCi0gICAgdGVzdF9waXBlc3BlZWQoKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3RcbicpCi0gICAgdGVzdF9zZXFzcGVlZChsaXN0KHJhbmdlKDEwKSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3QgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG1hbmFnZXIubGlzdChsaXN0KHJhbmdlKDEwKSkpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1GYWxzZSlcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkoJ2knLCBsaXN0KHJhbmdlKDEwKSksIGxvY2s9RmFsc2UpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1UcnVlKVxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG11bHRpcHJvY2Vzc2luZy5BcnJheSgnaScsIGxpc3QocmFuZ2UoMTApKSwgbG9jaz1UcnVlKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuTG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZCh0aHJlYWRpbmcuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuUkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQodGhyZWFkaW5nLlJMb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5Mb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5STG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtdWx0aXByb2Nlc3NpbmcuUkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBybG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuUkxvY2soKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQodGhyZWFkaW5nLlRocmVhZCwgdGhyZWFkaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgY29uZGl0aW9uIG1hbmFnZWQgYnkgYSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtYW5hZ2VyLkNvbmRpdGlvbigpKQotCi0gICAgZ2MuZW5hYmxlKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQppbmRleCA3MjkxNzQzLi4xYzc5NmE1IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQpAQCAtMSwxMSArMSwzIEBACi0jCi0jIFRoaXMgbW9kdWxlIHNob3dzIGhvdyB0byB1c2UgYXJiaXRyYXJ5IGNhbGxhYmxlcyB3aXRoIGEgc3ViY2xhc3Mgb2YKLSMgYEJhc2VNYW5hZ2VyYC4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgZnJlZXplX3N1cHBvcnQKIGZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBCYXNlTWFuYWdlciwgQmFzZVByb3h5CiBpbXBvcnQgb3BlcmF0b3IKQEAgLTI3LDEyICsxOSwxMCBAQAogCiAjIFByb3h5IHR5cGUgZm9yIGdlbmVyYXRvciBvYmplY3RzCiBjbGFzcyBHZW5lcmF0b3JQcm94eShCYXNlUHJveHkpOgotICAgIF9leHBvc2VkXyA9ICgnbmV4dCcsICdfX25leHRfXycpCisgICAgX2V4cG9zZWRfID0gWydfX25leHRfXyddCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ25leHQnKQotICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ19fbmV4dF9fJykKIAogIyBGdW5jdGlvbiB0byByZXR1cm4gdGhlIG9wZXJhdG9yIG1vZHVsZQpAQCAtOTAsOCArODAsNiBAQAogICAgIG9wID0gbWFuYWdlci5vcGVyYXRvcigpCiAgICAgcHJpbnQoJ29wLmFkZCgyMywgNDUpID0nLCBvcC5hZGQoMjMsIDQ1KSkKICAgICBwcmludCgnb3AucG93KDIsIDk0KSA9Jywgb3AucG93KDIsIDk0KSkKLSAgICBwcmludCgnb3AuZ2V0c2xpY2UocmFuZ2UoMTApLCAyLCA2KSA9Jywgb3AuZ2V0c2xpY2UobGlzdChyYW5nZSgxMCkpLCAyLCA2KSkKLSAgICBwcmludCgnb3AucmVwZWF0KHJhbmdlKDUpLCAzKSA9Jywgb3AucmVwZWF0KGxpc3QocmFuZ2UoNSkpLCAzKSkKICAgICBwcmludCgnb3AuX2V4cG9zZWRfID0nLCBvcC5fZXhwb3NlZF8pCiAKICMjCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weSBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CmluZGV4IDE1Nzg0OTguLjExMTAxZTEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CkBAIC0xLDEwICsxLDMgQEAKLSMKLSMgQSB0ZXN0IG9mIGBtdWx0aXByb2Nlc3NpbmcuUG9vbGAgY2xhc3MKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHJhbmRvbQpAQCAtNDYsMjY5ICszOSwxMTUgQEAKICMKIAogZGVmIHRlc3QoKToKLSAgICBwcmludCgnY3B1X2NvdW50KCkgPSAlZFxuJyAlIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKLQotICAgICMKLSAgICAjIENyZWF0ZSBwb29sCi0gICAgIwotCiAgICAgUFJPQ0VTU0VTID0gNAogICAgIHByaW50KCdDcmVhdGluZyBwb29sIHdpdGggJWQgcHJvY2Vzc2VzXG4nICUgUFJPQ0VTU0VTKQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbChQUk9DRVNTRVMpCi0gICAgcHJpbnQoJ3Bvb2wgPSAlcycgJSBwb29sKQotICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFRlc3RzCi0gICAgIworICAgIHdpdGggbXVsdGlwcm9jZXNzaW5nLlBvb2woUFJPQ0VTU0VTKSBhcyBwb29sOgorICAgICAgICAjCisgICAgICAgICMgVGVzdHMKKyAgICAgICAgIwogCi0gICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAotICAgICAgICAgICAgWyhwbHVzLCAoaSwgOCkpIGZvciBpIGluIHJhbmdlKDEwKV0KKyAgICAgICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAorICAgICAgICAgICAgICAgIFsocGx1cywgKGksIDgpKSBmb3IgaSBpbiByYW5nZSgxMCldCiAKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCB0KSBmb3IgdCBpbiBUQVNLU10KLSAgICBpbWFwX2l0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQotICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgdCkgZm9yIHQgaW4gVEFTS1NdCisgICAgICAgIGltYXBfaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCi0gICAgZm9yIHIgaW4gcmVzdWx0czoKLSAgICAgICAgcHJpbnQoJ1x0Jywgci5nZXQoKSkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBwcmludCgnXHQnLCByLmdldCgpKQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcCgpOicpCi0gICAgZm9yIHggaW4gaW1hcF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF9pdDoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKLSAgICBmb3IgeCBpbiBpbWFwX3Vub3JkZXJlZF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF91bm9yZGVyZWRfaXQ6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wubWFwKCkgLS0tIHdpbGwgYmxvY2sgdGlsbCBjb21wbGV0ZTonKQotICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5tYXAoKSAtLS0gd2lsbCBibG9jayB0aWxsIGNvbXBsZXRlOicpCisgICAgICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFNpbXBsZSBiZW5jaG1hcmtzCi0gICAgIworICAgICAgICAjCisgICAgICAgICMgVGVzdCBlcnJvciBoYW5kbGluZworICAgICAgICAjCiAKLSAgICBOID0gMTAwMDAwCi0gICAgcHJpbnQoJ2RlZiBwb3czKHgpOiByZXR1cm4geCoqMycpCisgICAgICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCiAKLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBBID0gbGlzdChtYXAocG93MywgcmFuZ2UoTikpKQotICAgIHByaW50KCdcdG1hcChwb3czLCByYW5nZSglZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChOLCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQiA9IHBvb2wubWFwKHBvdzMsIHJhbmdlKE4pKQotICAgIHByaW50KCdcdHBvb2wubWFwKHBvdzMsIHJhbmdlKCVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKE4sIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBDID0gbGlzdChwb29sLmltYXAocG93MywgcmFuZ2UoTiksIGNodW5rc2l6ZT1OLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChwb3czLCByYW5nZSglZCksIGNodW5rc2l6ZT0lZCkpOlxuXHRcdCVzJyBcCi0gICAgICAgICAgJyBzZWNvbmRzJyAlIChOLCBOLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBMID0gW05vbmVdICogMTAwMDAwMAotICAgIHByaW50KCdkZWYgbm9vcCh4KTogcGFzcycpCi0gICAgcHJpbnQoJ0wgPSBbTm9uZV0gKiAxMDAwMDAwJykKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEEgPSBsaXN0KG1hcChub29wLCBMKSkKLSAgICBwcmludCgnXHRtYXAobm9vcCwgTCk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBCID0gcG9vbC5tYXAobm9vcCwgTCkKLSAgICBwcmludCgnXHRwb29sLm1hcChub29wLCBMKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAodGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEMgPSBsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9bGVuKEwpLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9JWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAobGVuKEwpLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBkZWwgQSwgQiwgQywgTAotCi0gICAgIwotICAgICMgVGVzdCBlcnJvciBoYW5kbGluZwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wuYXBwbHkoZiwgKDUsKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wubWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLm1hcCgpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChsaXN0KHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgaXQgPSBwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKQotICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgeCA9IG5leHQoaXQpCisgICAgICAgICAgICBwcmludChwb29sLmFwcGx5KGYsICg1LCkpKQogICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBpZiBpID09IDU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgaSA9PSA1OgotICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgYXNzZXJ0IGkgPT0gOQotICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIElNYXBJdGVyYXRvci5uZXh0KCknKQotICAgIHByaW50KCkKLQotICAgICMKLSAgICAjIFRlc3RpbmcgdGltZW91dHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgVEFTS1NbMF0pCi0gICAgd2hpbGUgMToKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSByZXMuZ2V0KDAuMDIpKQotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5tYXAoKScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgcHJpbnQoJ1Rlc3RpbmcgSU1hcEl0ZXJhdG9yLm5leHQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICBpdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKLSAgICB3aGlsZSAxOgotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQobGlzdChwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICAjCi0gICAgIyBUZXN0aW5nIGNhbGxiYWNrCi0gICAgIworICAgICAgICBpdCA9IHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIHByaW50KCdUZXN0aW5nIGNhbGxiYWNrOicpCisgICAgICAgIGFzc2VydCBpID09IDkKKyAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gSU1hcEl0ZXJhdG9yLm5leHQoKScpCisgICAgICAgIHByaW50KCkKIAotICAgIEEgPSBbXQotICAgIEIgPSBbNTYsIDAsIDEsIDgsIDI3LCA2NCwgMTI1LCAyMTYsIDM0MywgNTEyLCA3MjldCisgICAgICAgICMKKyAgICAgICAgIyBUZXN0aW5nIHRpbWVvdXRzCisgICAgICAgICMKIAotICAgIHIgPSBwb29sLmFwcGx5X2FzeW5jKG11bCwgKDcsIDgpLCBjYWxsYmFjaz1BLmFwcGVuZCkKLSAgICByLndhaXQoKQorICAgICAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKKyAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIFRBU0tTWzBdKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIHJlcy5nZXQoMC4wMikpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQorICAgICAgICBwcmludCgpCisgICAgICAgIHByaW50KCkKIAotICAgIHIgPSBwb29sLm1hcF9hc3luYyhwb3czLCBsaXN0KHJhbmdlKDEwKSksIGNhbGxiYWNrPUEuZXh0ZW5kKQotICAgIHIud2FpdCgpCi0KLSAgICBpZiBBID09IEI6Ci0gICAgICAgIHByaW50KCdcdGNhbGxiYWNrcyBzdWNjZWVkZWRcbicpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1x0KioqIGNhbGxiYWNrcyBmYWlsZWRcblx0XHQlcyAhPSAlc1xuJyAlIChBLCBCKSkKLQotICAgICMKLSAgICAjIENoZWNrIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyB0YXNrcwotICAgICMKLQotICAgIGFzc2VydCBub3QgcG9vbC5fY2FjaGUsICdjYWNoZSA9ICVyJyAlIHBvb2wuX2NhY2hlCi0KLSAgICAjCi0gICAgIyBDaGVjayBjbG9zZSgpIG1ldGhvZHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBjbG9zZSgpOicpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcmVzdWx0ID0gcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbMC41XSkKLSAgICBwb29sLmNsb3NlKCkKLSAgICBwb29sLmpvaW4oKQotCi0gICAgYXNzZXJ0IHJlc3VsdC5nZXQoKSBpcyBOb25lCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGNsb3NlKCkgc3VjY2VlZGVkXG4nKQotCi0gICAgIwotICAgICMgQ2hlY2sgdGVybWluYXRlKCkgbWV0aG9kCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgdGVybWluYXRlKCk6JykKLQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgyKQotICAgIERFTFRBID0gMC4xCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0gICAgcG9vbC50ZXJtaW5hdGUoKQotICAgIHBvb2wuam9pbigpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdHRlcm1pbmF0ZSgpIHN1Y2NlZWRlZFxuJykKLQotICAgICMKLSAgICAjIENoZWNrIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGdhcmJhZ2UgY29sbGVjdGlvbjonKQotCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCi0gICAgREVMVEEgPSAwLjEKLSAgICBwcm9jZXNzZXMgPSBwb29sLl9wb29sCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0KLSAgICByZXN1bHRzID0gcG9vbCA9IE5vbmUKLQotICAgIHRpbWUuc2xlZXAoREVMVEEgKiAyKQotCi0gICAgZm9yIHdvcmtlciBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGdhcmJhZ2UgY29sbGVjdGlvbiBzdWNjZWVkZWRcbicpCisgICAgICAgIHByaW50KCdUZXN0aW5nIElNYXBJdGVyYXRvci5uZXh0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCisgICAgICAgIGl0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLQotICAgIGFzc2VydCBsZW4oc3lzLmFyZ3YpIGluICgxLCAyKQotCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxIG9yIHN5cy5hcmd2WzFdID09ICdwcm9jZXNzZXMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICd0aHJlYWRzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyB0aHJlYWRzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15IGFzIG11bHRpcHJvY2Vzc2luZwotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdVc2FnZTpcblx0JXMgW3Byb2Nlc3NlcyB8IHRocmVhZHNdJyAlIHN5cy5hcmd2WzBdKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDIpCi0KICAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weSBiL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFkYmMzOC4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotIwotIyBBIHRlc3QgZmlsZSBmb3IgdGhlIGBtdWx0aXByb2Nlc3NpbmdgIHBhY2thZ2UKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5cwotaW1wb3J0IHJhbmRvbQotZnJvbSBxdWV1ZSBpbXBvcnQgRW1wdHkKLQotaW1wb3J0IG11bHRpcHJvY2Vzc2luZyAgICAgICAgICAgICAgICMgbWF5IGdldCBvdmVyd3JpdHRlbgotCi0KLSMjIyMgVEVTVF9WQUxVRQotCi1kZWYgdmFsdWVfZnVuYyhydW5uaW5nLCBtdXRleCk6Ci0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjQpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBwcmludCgnXG5cdFx0XHQnICsgc3RyKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkgKyAnIGhhcyBmaW5pc2hlZCcpCi0gICAgcnVubmluZy52YWx1ZSAtPSAxCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3ZhbHVlKCk6Ci0gICAgVEFTS1MgPSAxMAotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCBUQVNLUykKLSAgICBtdXRleCA9IG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkKLQotICAgIGZvciBpIGluIHJhbmdlKFRBU0tTKToKLSAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD12YWx1ZV9mdW5jLCBhcmdzPShydW5uaW5nLCBtdXRleCkpCi0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgd2hpbGUgcnVubmluZy52YWx1ZSA+IDA6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC4wOCkKLSAgICAgICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHByaW50KHJ1bm5pbmcudmFsdWUsIGVuZD0nICcpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHByaW50KCkKLSAgICBwcmludCgnTm8gbW9yZSBydW5uaW5nIHByb2Nlc3NlcycpCi0KLQotIyMjIyBURVNUX1FVRVVFCi0KLWRlZiBxdWV1ZV9mdW5jKHF1ZXVlKToKLSAgICBmb3IgaSBpbiByYW5nZSgzMCk6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC41ICogcmFuZG9tLnJhbmRvbSgpKQotICAgICAgICBxdWV1ZS5wdXQoaSppKQotICAgIHF1ZXVlLnB1dCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3F1ZXVlKCk6Ci0gICAgcSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXF1ZXVlX2Z1bmMsIGFyZ3M9KHEsKSkKLSAgICBwLnN0YXJ0KCkKLQotICAgIG8gPSBOb25lCi0gICAgd2hpbGUgbyAhPSAnU1RPUCc6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG8gPSBxLmdldCh0aW1lb3V0PTAuMykKLSAgICAgICAgICAgIHByaW50KG8sIGVuZD0nICcpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IEVtcHR5OgotICAgICAgICAgICAgcHJpbnQoJ1RJTUVPVVQnKQotCi0gICAgcHJpbnQoKQotCi0KLSMjIyMgVEVTVF9DT05ESVRJT04KLQotZGVmIGNvbmRpdGlvbl9mdW5jKGNvbmQpOgotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoJ1x0JyArIHN0cihjb25kKSkKLSAgICB0aW1lLnNsZWVwKDIpCi0gICAgcHJpbnQoJ1x0Y2hpbGQgaXMgbm90aWZ5aW5nJykKLSAgICBwcmludCgnXHQnICsgc3RyKGNvbmQpKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9jb25kaXRpb24oKToKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbl9mdW5jLCBhcmdzPShjb25kLCkpCi0gICAgcHJpbnQoY29uZCkKLQotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KGNvbmQpCi0KLSAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCdtYWluIGlzIHdhaXRpbmcnKQotICAgIGNvbmQud2FpdCgpCi0gICAgcHJpbnQoJ21haW4gaGFzIHdva2VuIHVwJykKLQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5yZWxlYXNlKCkKLSAgICBwcmludChjb25kKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICBwLmpvaW4oKQotICAgIHByaW50KGNvbmQpCi0KLQotIyMjIyBURVNUX1NFTUFQSE9SRQotCi1kZWYgc2VtYXBob3JlX2Z1bmMoc2VtYSwgbXV0ZXgsIHJ1bm5pbmcpOgotICAgIHNlbWEuYWNxdWlyZSgpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlICs9IDEKLSAgICBwcmludChydW5uaW5nLnZhbHVlLCAndGFza3MgYXJlIHJ1bm5pbmcnKQotICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjIpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlIC09IDEKLSAgICBwcmludCgnJXMgaGFzIGZpbmlzaGVkJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHNlbWEucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3NlbWFwaG9yZSgpOgotICAgIHNlbWEgPSBtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKDMpCi0gICAgbXV0ZXggPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCAwKQotCi0gICAgcHJvY2Vzc2VzID0gWwotICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VtYXBob3JlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbWEsIG11dGV4LCBydW5uaW5nKSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApCi0gICAgICAgIF0KLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX0pPSU5fVElNRU9VVAotCi1kZWYgam9pbl90aW1lb3V0X2Z1bmMoKToKLSAgICBwcmludCgnXHRjaGlsZCBzbGVlcGluZycpCi0gICAgdGltZS5zbGVlcCg1LjUpCi0gICAgcHJpbnQoJ1xuXHRjaGlsZCB0ZXJtaW5hdGluZycpCi0KLWRlZiB0ZXN0X2pvaW5fdGltZW91dCgpOgotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9am9pbl90aW1lb3V0X2Z1bmMpCi0gICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnd2FpdGluZyBmb3IgcHJvY2VzcyB0byBmaW5pc2gnKQotCi0gICAgd2hpbGUgMToKLSAgICAgICAgcC5qb2luKHRpbWVvdXQ9MSkKLSAgICAgICAgaWYgbm90IHAuaXNfYWxpdmUoKToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHByaW50KCcuJywgZW5kPScgJykKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLQotIyMjIyBURVNUX0VWRU5UCi0KLWRlZiBldmVudF9mdW5jKGV2ZW50KToKLSAgICBwcmludCgnXHQlciBpcyB3YWl0aW5nJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBldmVudC53YWl0KCkKLSAgICBwcmludCgnXHQlciBoYXMgd29rZW4gdXAnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotCi1kZWYgdGVzdF9ldmVudCgpOgotICAgIGV2ZW50ID0gbXVsdGlwcm9jZXNzaW5nLkV2ZW50KCkKLQotICAgIHByb2Nlc3NlcyA9IFttdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9ZXZlbnRfZnVuYywgYXJncz0oZXZlbnQsKSkKLSAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSldCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ21haW4gaXMgc2xlZXBpbmcnKQotICAgIHRpbWUuc2xlZXAoMikKLQotICAgIHByaW50KCdtYWluIGlzIHNldHRpbmcgZXZlbnQnKQotICAgIGV2ZW50LnNldCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX1NIQVJFRFZBTFVFUwotCi1kZWYgc2hhcmVkdmFsdWVzX2Z1bmModmFsdWVzLCBhcnJheXMsIHNoYXJlZF92YWx1ZXMsIHNoYXJlZF9hcnJheXMpOgotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgdiA9IHZhbHVlc1tpXVsxXQotICAgICAgICBzdiA9IHNoYXJlZF92YWx1ZXNbaV0udmFsdWUKLSAgICAgICAgYXNzZXJ0IHYgPT0gc3YKLQotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgYSA9IGFycmF5c1tpXVsxXQotICAgICAgICBzYSA9IGxpc3Qoc2hhcmVkX2FycmF5c1tpXVs6XSkKLSAgICAgICAgYXNzZXJ0IGEgPT0gc2EKLQotICAgIHByaW50KCdUZXN0cyBwYXNzZWQnKQotCi1kZWYgdGVzdF9zaGFyZWR2YWx1ZXMoKToKLSAgICB2YWx1ZXMgPSBbCi0gICAgICAgICgnaScsIDEwKSwKLSAgICAgICAgKCdoJywgLTIpLAotICAgICAgICAoJ2QnLCAxLjI1KQotICAgICAgICBdCi0gICAgYXJyYXlzID0gWwotICAgICAgICAoJ2knLCBsaXN0KHJhbmdlKDEwMCkpKSwKLSAgICAgICAgKCdkJywgWzAuMjUgKiBpIGZvciBpIGluIHJhbmdlKDEwMCldKSwKLSAgICAgICAgKCdIJywgbGlzdChyYW5nZSgxMDAwKSkpCi0gICAgICAgIF0KLQotICAgIHNoYXJlZF92YWx1ZXMgPSBbbXVsdGlwcm9jZXNzaW5nLlZhbHVlKGlkLCB2KSBmb3IgaWQsIHYgaW4gdmFsdWVzXQotICAgIHNoYXJlZF9hcnJheXMgPSBbbXVsdGlwcm9jZXNzaW5nLkFycmF5KGlkLCBhKSBmb3IgaWQsIGEgaW4gYXJyYXlzXQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAotICAgICAgICB0YXJnZXQ9c2hhcmVkdmFsdWVzX2Z1bmMsCi0gICAgICAgIGFyZ3M9KHZhbHVlcywgYXJyYXlzLCBzaGFyZWRfdmFsdWVzLCBzaGFyZWRfYXJyYXlzKQotICAgICAgICApCi0gICAgcC5zdGFydCgpCi0gICAgcC5qb2luKCkKLQotICAgIGFzc2VydCBwLmV4aXRjb2RlID09IDAKLQotCi0jIyMjCi0KLWRlZiB0ZXN0KG5hbWVzcGFjZT1tdWx0aXByb2Nlc3NpbmcpOgotICAgIGdsb2JhbCBtdWx0aXByb2Nlc3NpbmcKLQotICAgIG11bHRpcHJvY2Vzc2luZyA9IG5hbWVzcGFjZQotCi0gICAgZm9yIGZ1bmMgaW4gW3Rlc3RfdmFsdWUsIHRlc3RfcXVldWUsIHRlc3RfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICB0ZXN0X3NlbWFwaG9yZSwgdGVzdF9qb2luX3RpbWVvdXQsIHRlc3RfZXZlbnQsCi0gICAgICAgICAgICAgICAgIHRlc3Rfc2hhcmVkdmFsdWVzXToKLQotICAgICAgICBwcmludCgnXG5cdCMjIyMjIyMjICVzXG4nICUgZnVuYy5fX25hbWVfXykKLSAgICAgICAgZnVuYygpCi0KLSAgICBpZ25vcmUgPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkgICAgICAjIGNsZWFudXAgYW55IG9sZCBwcm9jZXNzZXMKLSAgICBpZiBoYXNhdHRyKG11bHRpcHJvY2Vzc2luZywgJ19kZWJ1Z19pbmZvJyk6Ci0gICAgICAgIGluZm8gPSBtdWx0aXByb2Nlc3NpbmcuX2RlYnVnX2luZm8oKQotICAgICAgICBpZiBpbmZvOgotICAgICAgICAgICAgcHJpbnQoaW5mbykKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RoZXJlIHNob3VsZCBiZSBubyBwb3NpdGl2ZSByZWZjb3VudHMgbGVmdCcpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotCi0gICAgYXNzZXJ0IGxlbihzeXMuYXJndikgaW4gKDEsIDIpCi0KLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDEgb3Igc3lzLmFyZ3ZbMV0gPT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBuYW1lc3BhY2UgPSBtdWx0aXByb2Nlc3NpbmcKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICdtYW5hZ2VyJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgYW5kIGEgbWFuYWdlciAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgbmFtZXNwYWNlID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgICAgICBuYW1lc3BhY2UuUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5jdXJyZW50X3Byb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5hY3RpdmVfY2hpbGRyZW4gPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAndGhyZWFkcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgdGhyZWFkcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teSBhcyBuYW1lc3BhY2UKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnVXNhZ2U6XG5cdCVzIFtwcm9jZXNzZXMgfCBtYW5hZ2VyIHwgdGhyZWFkc10nICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMikKLQotICAgIHRlc3QobmFtZXNwYWNlKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weSBiL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTAyNGQuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSMKLSMgRXhhbXBsZSB3aGVyZSBhIHBvb2wgb2YgaHR0cCBzZXJ2ZXJzIHNoYXJlIGEgc2luZ2xlIGxpc3RlbmluZyBzb2NrZXQKLSMKLSMgT24gV2luZG93cyB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIHRoZSBhYmlsaXR5IHRvIHBpY2tsZSBhIHNvY2tldAotIyBvYmplY3Qgc28gdGhhdCB0aGUgd29ya2VyIHByb2Nlc3NlcyBjYW4gaW5oZXJpdCBhIGNvcHkgb2YgdGhlIHNlcnZlcgotIyBvYmplY3QuICAoV2UgaW1wb3J0IGBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uYCB0byBlbmFibGUgdGhpcyBwaWNrbGluZy4pCi0jCi0jIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci0jIHVzaW5nIGEgcHJvY2Vzcy1zaGFyZWQgbG9jayAtLSBkb2VzIG5vdCBzZWVtIHRvIGJlIG5lY2Vzc2FyeS4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgZnJlZXplX3N1cHBvcnQKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXIKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgotCi1pZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiAgICAjIG1ha2Ugc29ja2V0cyBwaWNrYWJsZS9pbmhlcml0YWJsZQotCi0KLWRlZiBub3RlKGZvcm1hdCwgKmFyZ3MpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1slc11cdCVzXG4nICUgKGN1cnJlbnRfcHJvY2VzcygpLm5hbWUsIGZvcm1hdCAlIGFyZ3MpKQotCi0KLWNsYXNzIFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0gICAgIyB3ZSBvdmVycmlkZSBsb2dfbWVzc2FnZSgpIHRvIHNob3cgd2hpY2ggcHJvY2VzcyBpcyBoYW5kbGluZyB0aGUgcmVxdWVzdAotICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKLSAgICAgICAgbm90ZShmb3JtYXQsICphcmdzKQotCi1kZWYgc2VydmVfZm9yZXZlcihzZXJ2ZXIpOgotICAgIG5vdGUoJ3N0YXJ0aW5nIHNlcnZlcicpCi0gICAgdHJ5OgotICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpCi0gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICBwYXNzCi0KLQotZGVmIHJ1bnBvb2woYWRkcmVzcywgbnVtYmVyX29mX3Byb2Nlc3Nlcyk6Ci0gICAgIyBjcmVhdGUgYSBzaW5nbGUgc2VydmVyIG9iamVjdCAtLSBjaGlsZHJlbiB3aWxsIGVhY2ggaW5oZXJpdCBhIGNvcHkKLSAgICBzZXJ2ZXIgPSBIVFRQU2VydmVyKGFkZHJlc3MsIFJlcXVlc3RIYW5kbGVyKQotCi0gICAgIyBjcmVhdGUgY2hpbGQgcHJvY2Vzc2VzIHRvIGFjdCBhcyB3b3JrZXJzCi0gICAgZm9yIGkgaW4gcmFuZ2UobnVtYmVyX29mX3Byb2Nlc3NlcyAtIDEpOgotICAgICAgICBQcm9jZXNzKHRhcmdldD1zZXJ2ZV9mb3JldmVyLCBhcmdzPShzZXJ2ZXIsKSkuc3RhcnQoKQotCi0gICAgIyBtYWluIHByb2Nlc3MgYWxzbyBhY3RzIGFzIGEgd29ya2VyCi0gICAgc2VydmVfZm9yZXZlcihzZXJ2ZXIpCi0KLQotZGVmIHRlc3QoKToKLSAgICBESVIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJykKLSAgICBBRERSRVNTID0gKCdsb2NhbGhvc3QnLCA4MDAwKQotICAgIE5VTUJFUl9PRl9QUk9DRVNTRVMgPSA0Ci0KLSAgICBwcmludCgnU2VydmluZyBhdCBodHRwOi8vJXM6JWQgdXNpbmcgJWQgd29ya2VyIHByb2Nlc3NlcycgJSBcCi0gICAgICAgICAgKEFERFJFU1NbMF0sIEFERFJFU1NbMV0sIE5VTUJFUl9PRl9QUk9DRVNTRVMpKQotICAgIHByaW50KCdUbyBleGl0IHByZXNzIEN0cmwtJyArIFsnQycsICdCcmVhayddW3N5cy5wbGF0Zm9ybT09J3dpbjMyJ10pCi0KLSAgICBvcy5jaGRpcihESVIpCi0gICAgcnVucG9vbChBRERSRVNTLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQppbmRleCBlNjZkOTdiLi4zYjkyMjY5IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQpAQCAtMSwxNiArMSwzIEBACi0jCi0jIFNpbXBsZSBleGFtcGxlIHdoaWNoIHVzZXMgYSBwb29sIG9mIHdvcmtlcnMgdG8gY2Fycnkgb3V0IHNvbWUgdGFza3MuCi0jCi0jIE5vdGljZSB0aGF0IHRoZSByZXN1bHRzIHdpbGwgcHJvYmFibHkgbm90IGNvbWUgb3V0IG9mIHRoZSBvdXRwdXQKLSMgcXVldWUgaW4gdGhlIHNhbWUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGNvcnJlc3BvbmRpbmcgdGFza3Mgd2VyZQotIyBwdXQgb24gdGhlIGlucHV0IHF1ZXVlLiAgSWYgaXQgaXMgaW1wb3J0YW50IHRvIGdldCB0aGUgcmVzdWx0cyBiYWNrCi0jIGluIHRoZSBvcmlnaW5hbCBvcmRlciB0aGVuIGNvbnNpZGVyIHVzaW5nIGBQb29sLm1hcCgpYCBvcgotIyBgUG9vbC5pbWFwKClgICh3aGljaCB3aWxsIHNhdmUgb24gdGhlIGFtb3VudCBvZiBjb2RlIG5lZWRlZCBhbnl3YXkpLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGltcG9ydCB0aW1lCiBpbXBvcnQgcmFuZG9tCiAKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmggYi9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCmluZGV4IDMyNjQ3YzAuLmZjYjg0NmEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKKysrIGIvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaApAQCAtNzAsNCArNzAsMTEgQEAKICAgICBQeU9iamVjdCAqdHBfc3ViY2xhc3NlczsKICAgICBQeU9iamVjdCAqdHBfd2Vha2xpc3Q7CiAKKyAgICBkZXN0cnVjdG9yIHRwX2RlbDsKKworICAgIC8qIFR5cGUgYXR0cmlidXRlIGNhY2hlIHZlcnNpb24gdGFnLiBBZGRlZCBpbiB2ZXJzaW9uIDIuNiAqLworICAgIHVuc2lnbmVkIGludCB0cF92ZXJzaW9uX3RhZzsKKworICAgIGRlc3RydWN0b3IgdHBfZmluYWxpemU7CisKIH0gUHlUeXBlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdAppbmRleCAxZTVmNDJkLi4xMDkyZTZiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS8ydG8zLnJzdAorKysgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdApAQCAtMTQyLDYgKzE0MiwzOSBAQAogICAgUmVtb3ZlcyB1c2FnZSBvZiA6ZnVuYzpgYXBwbHlgLiAgRm9yIGV4YW1wbGUgYGBhcHBseShmdW5jdGlvbiwgKmFyZ3MsCiAgICAqKmt3YXJncylgYCBpcyBjb252ZXJ0ZWQgdG8gYGBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpYGAuCiAKKy4uIDJ0bzNmaXhlcjo6IGFzc2VydHMKKworICAgUmVwbGFjZXMgZGVwcmVjYXRlZCA6bW9kOmB1bml0dGVzdGAgbWV0aG9kIG5hbWVzIHdpdGggdGhlIGNvcnJlY3Qgb25lcy4KKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBgYGZhaWxVbmxlc3NFcXVhbChhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsPmAKKyAgIGBgYXNzZXJ0RXF1YWxzKGEsIGIpYGAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWw+YAorICAgYGBmYWlsSWZFcXVhbChhLCBiKWBgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEVxdWFscyhhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsPmAKKyAgIGBgZmFpbFVubGVzcyhhKWBgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgYXNzZXJ0XyhhKWBgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgZmFpbElmKGEpYGAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RmFsc2U+YAorICAgYGBmYWlsVW5sZXNzUmFpc2VzKGV4YywgY2FsKWBgICAgIDptZXRoOmBhc3NlcnRSYWlzZXMoZXhjLCBjYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlcz5gCisgICBgYGZhaWxVbmxlc3NBbG1vc3RFcXVhbChhLCBiKWBgICAgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsPmAKKyAgIGBgYXNzZXJ0QWxtb3N0RXF1YWxzKGEsIGIpYGAgICAgICA6bWV0aDpgYXNzZXJ0QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWw+YAorICAgYGBmYWlsSWZBbG1vc3RFcXVhbChhLCBiKWBgICAgICAgIDptZXRoOmBhc3NlcnROb3RBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEFsbW9zdEVxdWFscyhhLCBiKWBgICAgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsPmAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogLi4gMnRvM2ZpeGVyOjogYmFzZXN0cmluZwogCiAgICBDb252ZXJ0cyA6Y2xhc3M6YGJhc2VzdHJpbmdgIHRvIDpjbGFzczpgc3RyYC4KQEAgLTM0Miw2ICszNzUsMTAgQEAKIAogICAgSGFuZGxlcyB0aGUgbW92ZSBvZiA6ZnVuYzpgcmVkdWNlYCB0byA6ZnVuYzpgZnVuY3Rvb2xzLnJlZHVjZWAuCiAKKy4uIDJ0bzNmaXhlcjo6IHJlbG9hZAorCisgICBDb252ZXJ0cyA6ZnVuYzpgcmVsb2FkYCB0byA6ZnVuYzpgaW1wLnJlbG9hZGAuCisKIC4uIDJ0bzNmaXhlcjo6IHJlbmFtZXMKIAogICAgQ2hhbmdlcyA6ZGF0YTpgc3lzLm1heGludGAgdG8gOmRhdGE6YHN5cy5tYXhzaXplYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FiYy5yc3QgYi9Eb2MvbGlicmFyeS9hYmMucnN0CmluZGV4IDkyOTkxMjQuLjc4NTNkMzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWJjLnJzdApAQCAtMTIsOSArMTIsOSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyA6dGVybTpgYWJzdHJhY3QgYmFzZQotY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOyBzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMKLXdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlIDptb2Q6YG51bWJlcnNgIG1vZHVsZQotcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCitjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgKEFCQ3MpIGluIFB5dGhvbiwgYXMgb3V0bGluZWQgaW4gOnBlcDpgMzExOWA7CitzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMgd2FzIGFkZGVkIHRvIFB5dGhvbi4gKFNlZSBhbHNvIDpwZXA6YDMxNDFgIGFuZCB0aGUKKzptb2Q6YG51bWJlcnNgIG1vZHVsZSByZWdhcmRpbmcgYSB0eXBlIGhpZXJhcmNoeSBmb3IgbnVtYmVycyBiYXNlZCBvbiBBQkNzLikKIAogVGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgaGFzIHNvbWUgY29uY3JldGUgY2xhc3NlcyB0aGF0IGRlcml2ZSBmcm9tCiBBQkNzOyB0aGVzZSBjYW4sIG9mIGNvdXJzZSwgYmUgZnVydGhlciBkZXJpdmVkLiBJbiBhZGRpdGlvbiB0aGUKQEAgLTIzLDcgKzIzLDcgQEAKIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzOgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IEFCQ01ldGEKIApAQCAtNTgsNiArNTgsMTAgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB0byBhbGxvdyB1c2FnZSBhcyBhIGNsYXNzIGRlY29yYXRvci4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFRvIGRldGVjdCBjYWxscyB0byA6bWV0aDpgcmVnaXN0ZXJgLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgIDpmdW5jOmBnZXRfY2FjaGVfdG9rZW5gIGZ1bmN0aW9uLgorCiAgICBZb3UgY2FuIGFsc28gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gYW4gYWJzdHJhY3QgYmFzZSBjbGFzczoKIAogICAgLi4gbWV0aG9kOjogX19zdWJjbGFzc2hvb2tfXyhzdWJjbGFzcykKQEAgLTEyNyw2ICsxMzEsMTkgQEAKICAgIGF2YWlsYWJsZSBhcyBhIG1ldGhvZCBvZiBgYEZvb2BgLCBzbyBpdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5LgogCiAKKy4uIGNsYXNzOjogQUJDCisKKyAgIEEgaGVscGVyIGNsYXNzIHRoYXQgaGFzIDpjbGFzczpgQUJDTWV0YWAgYXMgaXRzIG1ldGFjbGFzcy4gIFdpdGggdGhpcyBjbGFzcywKKyAgIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgYnkgc2ltcGx5IGRlcml2aW5nIGZyb20gOmNsYXNzOmBBQkNgLAorICAgYXZvaWRpbmcgc29tZXRpbWVzIGNvbmZ1c2luZyBtZXRhY2xhc3MgdXNhZ2UuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiA6Y2xhc3M6YEFCQ2AgaXMgc3RpbGwgOmNsYXNzOmBBQkNNZXRhYCwgdGhlcmVmb3JlCisgICBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBBQkNgIHJlcXVpcmVzIHRoZSB1c3VhbCBwcmVjYXV0aW9ucyByZWdhcmRpbmcgbWV0YWNsYXNzCisgICB1c2FnZSwgYXMgbXVsdGlwbGUgaW5oZXJpdGFuY2UgbWF5IGxlYWQgdG8gbWV0YWNsYXNzIGNvbmZsaWN0cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzOgogCiAuLiBkZWNvcmF0b3I6OiBhYnN0cmFjdG1ldGhvZApAQCAtMjk1LDYgKzMxMiwxOSBAQAogICAgICAgIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAsIG1ha2luZyB0aGlzIGRlY29yYXRvciByZWR1bmRhbnQuCiAKIAorVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NhY2hlX3Rva2VuKCkKKworICAgUmV0dXJucyB0aGUgY3VycmVudCBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhY2hlIHRva2VuLgorCisgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIGludGVnZXIgaWRlbnRpZnlpbmcgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUKKyAgIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4gVGhpcyBudW1iZXIgY2hhbmdlcworICAgd2l0aCBldmVyeSBjYWxsIHRvIDptZXRoOmBBQkNNZXRhLnJlZ2lzdGVyYCBvbiBhbnkgQUJDLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEMrKyBwcm9ncmFtbWVycyBzaG91bGQgbm90ZSB0aGF0IFB5dGhvbidzIHZpcnR1YWwgYmFzZSBjbGFzcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QgYi9Eb2MvbGlicmFyeS9haWZjLnJzdAppbmRleCA4YTM1NDFiLi45ZmZiNWEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9haWZjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9haWZjLnJzdApAQCAtMzAsOCArMzAsOCBAQAogc2FtcGxlZC4gIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW5kaWNhdGUgaWYgdGhlIGF1ZGlvIGlzIG1vbm8sIHN0ZXJlbywgb3IKIHF1YWRyby4gIEVhY2ggZnJhbWUgY29uc2lzdHMgb2Ygb25lIHNhbXBsZSBwZXIgY2hhbm5lbC4gIFRoZSBzYW1wbGUgc2l6ZSBpcyB0aGUKIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBzYW1wbGUuICBUaHVzIGEgZnJhbWUgY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKiBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKlwqXCAqZnJhbWVyYXRlKiBieXRlcy4KK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZWBgIGJ5dGVzLCBhbmQgYSBzZWNvbmQncyB3b3J0aCBvZiBhdWRpbyBjb25zaXN0cyBvZgorYGBuY2hhbm5lbHMgKiBzYW1wbGVzaXplICogZnJhbWVyYXRlYGAgYnl0ZXMuCiAKIEZvciBleGFtcGxlLCBDRCBxdWFsaXR5IGF1ZGlvIGhhcyBhIHNhbXBsZSBzaXplIG9mIHR3byBieXRlcyAoMTYgYml0cyksIHVzZXMgdHdvCiBjaGFubmVscyAoc3RlcmVvKSBhbmQgaGFzIGEgZnJhbWUgcmF0ZSBvZiA0NCwxMDAgZnJhbWVzL3NlY29uZC4gIFRoaXMgZ2l2ZXMgYQpAQCAtNTEsNiArNTEsMTEgQEAKICAgIHVzZWQgZm9yIHdyaXRpbmcsIHRoZSBmaWxlIG9iamVjdCBzaG91bGQgYmUgc2Vla2FibGUsIHVubGVzcyB5b3Uga25vdyBhaGVhZCBvZgogICAgdGltZSBob3cgbWFueSBzYW1wbGVzIHlvdSBhcmUgZ29pbmcgdG8gd3JpdGUgaW4gdG90YWwgYW5kIHVzZQogICAgOm1ldGg6YHdyaXRlZnJhbWVzcmF3YCBhbmQgOm1ldGg6YHNldG5mcmFtZXNgLgorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgfmFpZmMuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCiAKIE9iamVjdHMgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYCB3aGVuIGEgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcgaGF2ZSB0aGUKIGZvbGxvd2luZyBtZXRob2RzOgpAQCAtOTIsNyArOTcsOSBAQAogCiAuLiBtZXRob2Q6OiBhaWZjLmdldHBhcmFtcygpCiAKLSAgIFJldHVybiBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZSBhYm92ZSB2YWx1ZXMgaW4gdGhlIGFib3ZlIG9yZGVyLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRtYXJrZXJzKCkKQEAgLTIxOCwxMiArMjI1LDE4IEBACiAgICBXcml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgYXVkaW8KICAgIGZpbGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gc2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBhaWZjLndyaXRlZnJhbWVzcmF3KGRhdGEpCiAKICAgIExpa2UgOm1ldGg6YHdyaXRlZnJhbWVzYCwgZXhjZXB0IHRoYXQgdGhlIGhlYWRlciBvZiB0aGUgYXVkaW8gZmlsZSBpcyBub3QKICAgIHVwZGF0ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IGFpZmMuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKaW5kZXggMGIxOGM2ZC4uNWI3ZDAxNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApAQCAtOTc3LDkgKzk3Nyw5IEBACiBgYHR5cGVgYCBhcmd1bWVudCBpcyBhcHBsaWVkIHRvIGRlZmF1bHQgYXJndW1lbnRzLgogCiBUbyBlYXNlIHRoZSB1c2Ugb2YgdmFyaW91cyB0eXBlcyBvZiBmaWxlcywgdGhlIGFyZ3BhcnNlIG1vZHVsZSBwcm92aWRlcyB0aGUKLWZhY3RvcnkgRmlsZVR5cGUgd2hpY2ggdGFrZXMgdGhlIGBgbW9kZT1gYCBhbmQgYGBidWZzaXplPWBgIGFyZ3VtZW50cyBvZiB0aGUKLTpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYQotd3JpdGFibGUgZmlsZTo6CitmYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAsIGBgYnVmc2l6ZT1gYCwgYGBlbmNvZGluZz1gYCBhbmQKK2BgZXJyb3JzPWBgIGFyZ3VtZW50cyBvZiB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsCitgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSB3cml0YWJsZSBmaWxlOjoKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpCkBAIC0xNjQ2LDE3ICsxNjQ2LDE5IEBACiBGaWxlVHlwZSBvYmplY3RzCiBeXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9Tm9uZSkKKy4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCiAgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKLSAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyBmaWxlcwotICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6OgorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzCisgICBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMsIGJ1ZmZlciBzaXplcywgZW5jb2RpbmdzIGFuZCBlcnJvciBoYW5kbGluZworICAgKHNlZSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMpOjoKIAogICAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCi0gICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLW91dHB1dCcsICdvdXQnXSkKLSAgICAgIE5hbWVzcGFjZShvdXRwdXQ9PF9pby5CdWZmZXJlZFdyaXRlciBuYW1lPSdvdXQnPikKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJhdycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCisgICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdVVEYtOCcpKQorICAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1yYXcnLCAncmF3LmRhdCcsICdmaWxlLnR4dCddKQorICAgICAgTmFtZXNwYWNlKG91dD08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nZmlsZS50eHQnIG1vZGU9J3cnIGVuY29kaW5nPSdVVEYtOCc+LCByYXc9PF9pby5GaWxlSU8gbmFtZT0ncmF3LmRhdCcgbW9kZT0nd2InPikKIAogICAgRmlsZVR5cGUgb2JqZWN0cyB1bmRlcnN0YW5kIHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLSdgYCBhbmQgYXV0b21hdGljYWxseQogICAgY29udmVydCB0aGlzIGludG8gYGBzeXMuc3RkaW5gYCBmb3IgcmVhZGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdAppbmRleCA1NWM2MWQ3Li43YjgxMDc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CkBAIC0xMCw2ICsxMCwxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiAgRm9yIG5ldyBjb2RlIHdlCisgICByZWNvbW1lbmQgdXNpbmcgOm1vZDpgYXN5bmNpb2AuCisKIFRoaXMgbW9kdWxlIGJ1aWxkcyBvbiB0aGUgOm1vZDpgYXN5bmNvcmVgIGluZnJhc3RydWN0dXJlLCBzaW1wbGlmeWluZwogYXN5bmNocm9ub3VzIGNsaWVudHMgYW5kIHNlcnZlcnMgYW5kIG1ha2luZyBpdCBlYXNpZXIgdG8gaGFuZGxlIHByb3RvY29scwogd2hvc2UgZWxlbWVudHMgYXJlIHRlcm1pbmF0ZWQgYnkgYXJiaXRyYXJ5IHN0cmluZ3MsIG9yIGFyZSBvZiB2YXJpYWJsZSBsZW5ndGguCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODE1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdApAQCAtMCwwICsxLDU4NiBAQAorOm1vZDpgYXN5bmNpb2AgLS0gQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGFzeW5jaW8KKyAgIDpzeW5vcHNpczogQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9hc3luY2lvL2AKKworLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHdyaXRpbmcgc2luZ2xlLXRocmVhZGVkIGNvbmN1cnJlbnQKK2NvZGUgdXNpbmcgY29yb3V0aW5lcywgbXVsdGlwbGV4aW5nIEkvTyBhY2Nlc3Mgb3ZlciBzb2NrZXRzIGFuZCBvdGhlcgorcmVzb3VyY2VzLCBydW5uaW5nIG5ldHdvcmsgY2xpZW50cyBhbmQgc2VydmVycywgYW5kIG90aGVyIHJlbGF0ZWQgcHJpbWl0aXZlcy4KKworSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbGlzdCBvZiB0aGUgcGFja2FnZSBjb250ZW50czoKKworKiBhIHBsdWdnYWJsZSA6cmVmOmBldmVudCBsb29wIDxldmVudC1sb29wPmAgd2l0aCB2YXJpb3VzIHN5c3RlbS1zcGVjaWZpYworICBpbXBsZW1lbnRhdGlvbnM7CisKKyogOnJlZjpgdHJhbnNwb3J0IDx0cmFuc3BvcnQ+YCBhbmQgOnJlZjpgcHJvdG9jb2wgPHByb3RvY29sPmAgYWJzdHJhY3Rpb25zCisgIChzaW1pbGFyIHRvIHRob3NlIGluIGBUd2lzdGVkIDxodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vPmBfKTsKKworKiBjb25jcmV0ZSBzdXBwb3J0IGZvciBUQ1AsIFVEUCwgU1NMLCBzdWJwcm9jZXNzIHBpcGVzLCBkZWxheWVkIGNhbGxzLCBhbmQKKyAgb3RoZXJzIChzb21lIG1heSBiZSBzeXN0ZW0tZGVwZW5kZW50KTsKKworKiBhIEZ1dHVyZSBjbGFzcyB0aGF0IG1pbWlja3MgdGhlIG9uZSBpbiB0aGUgOm1vZDpgY29uY3VycmVudC5mdXR1cmVzYCBtb2R1bGUsCisgIGJ1dCBhZGFwdGVkIGZvciB1c2Ugd2l0aCB0aGUgZXZlbnQgbG9vcDsKKworKiBjb3JvdXRpbmVzIGFuZCB0YXNrcyBiYXNlZCBvbiBgYHlpZWxkIGZyb21gYCAoOlBFUDpgMzgwYCksIHRvIGhlbHAgd3JpdGUKKyAgY29uY3VycmVudCBjb2RlIGluIGEgc2VxdWVudGlhbCBmYXNoaW9uOworCisqIGNhbmNlbGxhdGlvbiBzdXBwb3J0IGZvciBGdXR1cmVzIGFuZCBjb3JvdXRpbmVzOworCisqIDpyZWY6YHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIDxzeW5jPmAgZm9yIHVzZSBiZXR3ZWVuIGNvcm91dGluZXMgaW4KKyAgYSBzaW5nbGUgdGhyZWFkLCBtaW1pY2tpbmcgdGhvc2UgaW4gdGhlIDptb2Q6YHRocmVhZGluZ2AgbW9kdWxlOworCisqIGFuIGludGVyZmFjZSBmb3IgcGFzc2luZyB3b3JrIG9mZiB0byBhIHRocmVhZHBvb2wsIGZvciB0aW1lcyB3aGVuCisgIHlvdSBhYnNvbHV0ZWx5LCBwb3NpdGl2ZWx5IGhhdmUgdG8gdXNlIGEgbGlicmFyeSB0aGF0IG1ha2VzIGJsb2NraW5nCisgIEkvTyBjYWxscy4KKworCitEaXNjbGFpbWVyCistLS0tLS0tLS0tCisKK0Z1bGwgZG9jdW1lbnRhdGlvbiBpcyBub3QgeWV0IHJlYWR5OyB3ZSBob3BlIHRvIGhhdmUgaXQgd3JpdHRlbgorYmVmb3JlIFB5dGhvbiAzLjQgbGVhdmVzIGJldGEuICBVbnRpbCB0aGVuLCB0aGUgYmVzdCByZWZlcmVuY2UgaXMKKzpQRVA6YDMxNTZgLiAgRm9yIGEgbW90aXZhdGlvbmFsIHByaW1lciBvbiB0cmFuc3BvcnRzIGFuZCBwcm90b2NvbHMsCitzZWUgOlBFUDpgMzE1M2AuCisKKworLi4gWFhYIHNob3VsZCB0aGUgYXN5bmNpbyBkb2N1bWVudGF0aW9uIGNvbWUgaW4gc2V2ZXJhbCBwYWdlcywgYXMgZm9yIGxvZ2dpbmc/CisKKworLi4gX2V2ZW50LWxvb3A6CisKK0V2ZW50IGxvb3BzCistLS0tLS0tLS0tLQorCitUaGUgZXZlbnQgbG9vcCBpcyB0aGUgY2VudHJhbCBleGVjdXRpb24gZGV2aWNlIHByb3ZpZGVkIGJ5IDptb2Q6YGFzeW5jaW9gLgorSXQgcHJvdmlkZXMgbXVsdGlwbGUgZmFjaWxpdGllcywgYW1vbmdzdCB3aGljaDoKKworKiBSZWdpc3RlcmluZywgZXhlY3V0aW5nIGFuZCBjYW5jZWxsaW5nIGRlbGF5ZWQgY2FsbHMgKHRpbWVvdXRzKQorCisqIENyZWF0aW5nIGNsaWVudCBhbmQgc2VydmVyIDpyZWY6YHRyYW5zcG9ydHMgPHRyYW5zcG9ydD5gIGZvciB2YXJpb3VzCisgIGtpbmRzIG9mIGNvbW11bmljYXRpb24KKworKiBMYXVuY2hpbmcgc3VicHJvY2Vzc2VzIGFuZCB0aGUgYXNzb2NpYXRlZCA6cmVmOmB0cmFuc3BvcnRzIDx0cmFuc3BvcnQ+YAorICBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGFuIGV4dGVybmFsIHByb2dyYW0KKworKiBEZWxlZ2F0aW5nIGNvc3RseSBmdW5jdGlvbiBjYWxscyB0byBhIHBvb2wgb2YgdGhyZWFkcworCitHZXR0aW5nIGFuIGV2ZW50IGxvb3AKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZWFzaWVzdCB3YXkgdG8gZ2V0IGFuIGV2ZW50IGxvb3AgaXMgdG8gY2FsbCB0aGUgOmZ1bmM6YGdldF9ldmVudF9sb29wYAorZnVuY3Rpb24uCisKKy4uIFhYWCBtb3JlIGRvY3MKKworRGVsYXllZCBjYWxscworXl5eXl5eXl5eXl5eXgorCitUaGUgZXZlbnQgbG9vcCBoYXMgaXRzIG93biBpbnRlcm5hbCBjbG9jayBmb3IgY29tcHV0aW5nIHRpbWVvdXRzLgorV2hpY2ggY2xvY2sgaXMgdXNlZCBkZXBlbmRzIG9uIHRoZSAocGxhdGZvcm0tc3BlY2lmaWMpIGV2ZW50IGxvb3AKK2ltcGxlbWVudGF0aW9uOyBpZGVhbGx5IGl0IGlzIGEgbW9ub3RvbmljIGNsb2NrLiAgVGhpcyB3aWxsIGdlbmVyYWxseSBiZQorYSBkaWZmZXJlbnQgY2xvY2sgdGhhbiA6ZnVuYzpgdGltZS50aW1lYC4KKworLi4gbWV0aG9kOjogdGltZSgpCisKKyAgIFJldHVybiB0aGUgY3VycmVudCB0aW1lLCBhcyBhIDpjbGFzczpgZmxvYXRgIHZhbHVlLCBhY2NvcmRpbmcgdG8gdGhlCisgICBldmVudCBsb29wJ3MgaW50ZXJuYWwgY2xvY2suCisKKy4uIG1ldGhvZDo6IGNhbGxfbGF0ZXIoZGVsYXksIGNhbGxiYWNrLCAqYXJncykKKworICAgQXJyYW5nZSBmb3IgdGhlICpjYWxsYmFjayogdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBnaXZlbiAqZGVsYXkqCisgICBzZWNvbmRzIChlaXRoZXIgYW4gaW50IG9yIGZsb2F0KS4KKworICAgQSAiaGFuZGxlIiBpcyByZXR1cm5lZDogYW4gb3BhcXVlIG9iamVjdCB3aXRoIGEgOm1ldGg6YGNhbmNlbGAgbWV0aG9kCisgICB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbC4KKworICAgKmNhbGxiYWNrKiB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGNhbGwgdG8gOm1ldGg6YGNhbGxfbGF0ZXJgLgorICAgSWYgdHdvIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIGZvciBleGFjdGx5IHRoZSBzYW1lIHRpbWUsIGl0IGlzCisgICB1bmRlZmluZWQgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZmlyc3QuCisKKyAgIFRoZSBvcHRpb25hbCBwb3NpdGlvbmFsICphcmdzKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgd2hlbiBpdAorICAgaXMgY2FsbGVkLiBJZiB5b3Ugd2FudCB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdpdGggc29tZSBuYW1lZAorICAgYXJndW1lbnRzLCB1c2UgYSBjbG9zdXJlIG9yIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAuCisKKy4uIG1ldGhvZDo6IGNhbGxfYXQod2hlbiwgY2FsbGJhY2ssICphcmdzKQorCisgICBBcnJhbmdlIGZvciB0aGUgKmNhbGxiYWNrKiB0byBiZSBjYWxsZWQgYXQgdGhlIGdpdmVuIGFic29sdXRlIHRpbWVzdGFtcAorICAgKndoZW4qIChhbiBpbnQgb3IgZmxvYXQpLCB1c2luZyB0aGUgc2FtZSB0aW1lIHJlZmVyZW5jZSBhcyA6bWV0aDpgdGltZWAuCisKKyAgIFRoaXMgbWV0aG9kJ3MgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgOm1ldGg6YGNhbGxfbGF0ZXJgLgorCitDcmVhdGluZyBjb25uZWN0aW9ucworXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogY3JlYXRlX2Nvbm5lY3Rpb24ocHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICoqb3B0aW9ucykKKworICAgQ3JlYXRlIGEgc3RyZWFtaW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gSW50ZXJuZXQgKmhvc3QqIGFuZAorICAgKnBvcnQqLiAgKnByb3RvY29sX2ZhY3RvcnkqIG11c3QgYmUgYSBjYWxsYWJsZSByZXR1cm5pbmcgYQorICAgOnJlZjpgcHJvdG9jb2wgPHByb3RvY29sPmAgaW5zdGFuY2UuCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHdoaWNoIHdpbGwgdHJ5IHRvCisgICBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgY29yb3V0aW5lIHJldHVybnMgYSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgIHBhaXIuCisKKyAgIFRoZSBjaHJvbm9sb2dpY2FsIHN5bm9wc2lzIG9mIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBhcyBmb2xsb3dzOgorCisgICAjLiBUaGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIGEgOnJlZjpgdHJhbnNwb3J0IDx0cmFuc3BvcnQ+YAorICAgICAgaXMgY3JlYXRlZCB0byByZXByZXNlbnQgaXQuCisKKyAgICMuICpwcm90b2NvbF9mYWN0b3J5KiBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMgYW5kIG11c3QgcmV0dXJuIGEKKyAgICAgIDpyZWY6YHByb3RvY29sIDxwcm90b2NvbD5gIGluc3RhbmNlLgorCisgICAjLiBUaGUgcHJvdG9jb2wgaW5zdGFuY2UgaXMgdGllZCB0byB0aGUgdHJhbnNwb3J0LCBhbmQgaXRzCisgICAgICA6bWV0aDpgY29ubmVjdGlvbl9tYWRlYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAjLiBUaGUgY29yb3V0aW5lIHJldHVybnMgc3VjY2Vzc2Z1bGx5IHdpdGggdGhlIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAKKyAgICAgIHBhaXIuCisKKyAgIFRoZSBjcmVhdGVkIHRyYW5zcG9ydCBpcyBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYmlkaXJlY3Rpb25hbCBzdHJlYW0uCisKKyAgIC4uIG5vdGU6OgorICAgICAgKnByb3RvY29sX2ZhY3RvcnkqIGNhbiBiZSBhbnkga2luZCBvZiBjYWxsYWJsZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgICBhIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHVzZSBhIHByZS1jcmVhdGVkCisgICAgICBwcm90b2NvbCBpbnN0YW5jZSwgeW91IGNhbiBwYXNzIGBgbGFtYmRhOiBteV9wcm90b2NvbGBgLgorCisgICAqb3B0aW9ucyogYXJlIG9wdGlvbmFsIG5hbWVkIGFyZ3VtZW50cyBhbGxvd2luZyB0byBjaGFuZ2UgaG93IHRoZQorICAgY29ubmVjdGlvbiBpcyBjcmVhdGVkOgorCisgICAqICpzc2wqOiBpZiBnaXZlbiBhbmQgbm90IGZhbHNlLCBhIFNTTC9UTFMgdHJhbnNwb3J0IGlzIGNyZWF0ZWQKKyAgICAgKGJ5IGRlZmF1bHQgYSBwbGFpbiBUQ1AgdHJhbnNwb3J0IGlzIGNyZWF0ZWQpLiAgSWYgKnNzbCogaXMKKyAgICAgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QsIHRoaXMgY29udGV4dCBpcyB1c2VkIHRvIGNyZWF0ZQorICAgICB0aGUgdHJhbnNwb3J0OyBpZiAqc3NsKiBpcyA6Y29uc3Q6YFRydWVgLCBhIGNvbnRleHQgd2l0aCBzb21lCisgICAgIHVuc3BlY2lmaWVkIGRlZmF1bHQgc2V0dGluZ3MgaXMgdXNlZC4KKworICAgKiAqc2VydmVyX2hvc3RuYW1lKiwgaXMgb25seSBmb3IgdXNlIHRvZ2V0aGVyIHdpdGggKnNzbCosCisgICAgIGFuZCBzZXRzIG9yIG92ZXJyaWRlcyB0aGUgaG9zdG5hbWUgdGhhdCB0aGUgdGFyZ2V0IHNlcnZlcidzIGNlcnRpZmljYXRlCisgICAgIHdpbGwgYmUgbWF0Y2hlZCBhZ2FpbnN0LiAgQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgdGhlICpob3N0KiBhcmd1bWVudAorICAgICBpcyB1c2VkLiAgSWYgKmhvc3QqIGlzIGVtcHR5LCB0aGVyZSBpcyBubyBkZWZhdWx0IGFuZCB5b3UgbXVzdCBwYXNzIGEKKyAgICAgdmFsdWUgZm9yICpzZXJ2ZXJfaG9zdG5hbWUqLiAgSWYgKnNlcnZlcl9ob3N0bmFtZSogaXMgYW4gZW1wdHkKKyAgICAgc3RyaW5nLCBob3N0bmFtZSBtYXRjaGluZyBpcyBkaXNhYmxlZCAod2hpY2ggaXMgYSBzZXJpb3VzIHNlY3VyaXR5CisgICAgIHJpc2ssIGFsbG93aW5nIGZvciBtYW4taW4tdGhlLW1pZGRsZS1hdHRhY2tzKS4KKworICAgKiAqZmFtaWx5KiwgKnByb3RvKiwgKmZsYWdzKiBhcmUgdGhlIG9wdGlvbmFsIGFkZHJlc3MgZmFtaWx5LCBwcm90b2NvbAorICAgICBhbmQgZmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gZ2V0YWRkcmluZm8oKSBmb3IgKmhvc3QqIHJlc29sdXRpb24uCisgICAgIElmIGdpdmVuLCB0aGVzZSBzaG91bGQgYWxsIGJlIGludGVnZXJzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgOm1vZDpgc29ja2V0YCBtb2R1bGUgY29uc3RhbnRzLgorCisgICAqICpzb2NrKiwgaWYgZ2l2ZW4sIHNob3VsZCBiZSBhbiBleGlzdGluZywgYWxyZWFkeSBjb25uZWN0ZWQKKyAgICAgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBvYmplY3QgdG8gYmUgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorICAgICBJZiAqc29jayogaXMgZ2l2ZW4sIG5vbmUgb2YgKmhvc3QqLCAqcG9ydCosICpmYW1pbHkqLCAqcHJvdG8qLCAqZmxhZ3MqCisgICAgIGFuZCAqbG9jYWxfYWRkciogc2hvdWxkIGJlIHNwZWNpZmllZC4KKworICAgKiAqbG9jYWxfYWRkciosIGlmIGdpdmVuLCBpcyBhIGBgKGxvY2FsX2hvc3QsIGxvY2FsX3BvcnQpYGAgdHVwbGUgdXNlZAorICAgICB0byBiaW5kIHRoZSBzb2NrZXQgdG8gbG9jYWxseS4gIFRoZSAqbG9jYWxfaG9zdCogYW5kICpsb2NhbF9wb3J0KgorICAgICBhcmUgbG9va2VkIHVwIHVzaW5nIGdldGFkZHJpbmZvKCksIHNpbWlsYXJseSB0byAqaG9zdCogYW5kICpwb3J0Ki4KKworCisuLiBfcHJvdG9jb2w6CisKK1Byb3RvY29scworLS0tLS0tLS0tCisKKzptb2Q6YGFzeW5jaW9gIHByb3ZpZGVzIGJhc2UgY2xhc3NlcyB0aGF0IHlvdSBjYW4gc3ViY2xhc3MgdG8gaW1wbGVtZW50Cit5b3VyIG5ldHdvcmsgcHJvdG9jb2xzLiAgVGhvc2UgY2xhc3NlcyBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCis6cmVmOmB0cmFuc3BvcnRzIDx0cmFuc3BvcnQ+YCAoc2VlIGJlbG93KTogdGhlIHByb3RvY29sIHBhcnNlcyBpbmNvbWluZworZGF0YSBhbmQgYXNrcyBmb3IgdGhlIHdyaXRpbmcgb2Ygb3V0Z29pbmcgZGF0YSwgd2hpbGUgdGhlIHRyYW5zcG9ydCBpcworcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgSS9PIGFuZCBidWZmZXJpbmcuCisKK1doZW4gc3ViY2xhc3NpbmcgYSBwcm90b2NvbCBjbGFzcywgaXQgaXMgcmVjb21tZW5kZWQgeW91IG92ZXJyaWRlIGNlcnRhaW4KK21ldGhvZHMuICBUaG9zZSBtZXRob2RzIGFyZSBjYWxsYmFja3M6IHRoZXkgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHRyYW5zcG9ydAorb24gY2VydGFpbiBldmVudHMgKGZvciBleGFtcGxlIHdoZW4gc29tZSBkYXRhIGlzIHJlY2VpdmVkKTsgeW91IHNob3VsZG4ndAorY2FsbCB0aGVtIHlvdXJzZWxmLCB1bmxlc3MgeW91IGFyZSBpbXBsZW1lbnRpbmcgYSB0cmFuc3BvcnQuCisKKy4uIG5vdGU6OgorICAgQWxsIGNhbGxiYWNrcyBoYXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zLCB3aGljaCBhcmUgZW1wdHkuICBUaGVyZWZvcmUsCisgICB5b3Ugb25seSBuZWVkIHRvIGltcGxlbWVudCB0aGUgY2FsbGJhY2tzIGZvciB0aGUgZXZlbnRzIGluIHdoaWNoIHlvdQorICAgYXJlIGludGVyZXN0ZWQuCisKKworUHJvdG9jb2wgY2xhc3NlcworXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IFByb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgc3RyZWFtaW5nIHByb3RvY29scyAoZm9yIHVzZSB3aXRoCisgICBlLmcuIFRDUCBhbmQgU1NMIHRyYW5zcG9ydHMpLgorCisuLiBjbGFzczo6IERhdGFncmFtUHJvdG9jb2wKKworICAgVGhlIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBkYXRhZ3JhbSBwcm90b2NvbHMgKGZvciB1c2Ugd2l0aAorICAgZS5nLiBVRFAgdHJhbnNwb3J0cykuCisKKy4uIGNsYXNzOjogU3VicHJvY2Vzc1Byb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgcHJvdG9jb2xzIGNvbW11bmljYXRpbmcgd2l0aCBjaGlsZAorICAgcHJvY2Vzc2VzICh0aHJvdWdoIGEgc2V0IG9mIHVuaWRpcmVjdGlvbmFsIHBpcGVzKS4KKworCitDb25uZWN0aW9uIGNhbGxiYWNrcworXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAgYW5kCis6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBjb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQorCisgICBDYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbWFkZS4KKworICAgVGhlICp0cmFuc3BvcnQqIGFyZ3VtZW50IGlzIHRoZSB0cmFuc3BvcnQgcmVwcmVzZW50aW5nIHRoZQorICAgY29ubmVjdGlvbi4gIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHN0b3JpbmcgaXQgc29tZXdoZXJlCisgICAoZS5nLiBhcyBhbiBhdHRyaWJ1dGUpIGlmIHlvdSBuZWVkIHRvLgorCisuLiBtZXRob2Q6OiBjb25uZWN0aW9uX2xvc3QoZXhjKQorCisgICBDYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgVGhlIGFyZ3VtZW50IGlzIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIDpjb25zdDpgTm9uZWAuCisgICBUaGUgbGF0dGVyIG1lYW5zIGEgcmVndWxhciBFT0YgaXMgcmVjZWl2ZWQsIG9yIHRoZSBjb25uZWN0aW9uIHdhcworICAgYWJvcnRlZCBvciBjbG9zZWQgYnkgdGhpcyBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLgorCis6bWV0aDpgY29ubmVjdGlvbl9tYWRlYCBhbmQgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgYXJlIGNhbGxlZCBleGFjdGx5IG9uY2UKK3BlciBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICBBbGwgb3RoZXIgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIGJldHdlZW4gdGhvc2UKK3R3byBtZXRob2RzLCB3aGljaCBhbGxvd3MgZm9yIGVhc2llciByZXNvdXJjZSBtYW5hZ2VtZW50IGluIHlvdXIgcHJvdG9jb2wKK2ltcGxlbWVudGF0aW9uLgorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9ubHkgb24gOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgCitpbnN0YW5jZXM6CisKKy4uIG1ldGhvZDo6IHBpcGVfZGF0YV9yZWNlaXZlZChmZCwgZGF0YSkKKworICAgQ2FsbGVkIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3Mgd3JpdGVzIGRhdGEgaW50byBpdHMgc3Rkb3V0IG9yIHN0ZGVyciBwaXBlLgorICAgKmZkKiBpcyB0aGUgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHBpcGUuICAqZGF0YSogaXMgYSBub24tZW1wdHkKKyAgIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhLgorCisuLiBtZXRob2Q6OiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChmZCwgZXhjKQorCisgICBDYWxsZWQgd2hlbiBvbmUgb2YgdGhlIHBpcGVzIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgY2hpbGQgcHJvY2VzcworICAgaXMgY2xvc2VkLiAgKmZkKiBpcyB0aGUgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgdGhhdCB3YXMgY2xvc2VkLgorCisuLiBtZXRob2Q6OiBwcm9jZXNzX2V4aXRlZCgpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBleGl0ZWQuCisKKworRGF0YSByZWNlcHRpb24gY2FsbGJhY2tzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworU3RyZWFtaW5nIHByb3RvY29scworIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogZGF0YV9yZWNlaXZlZChkYXRhKQorCisgICBDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuICAqZGF0YSogaXMgYSBub24tZW1wdHkgYnl0ZXMgb2JqZWN0CisgICBjb250YWluaW5nIHRoZSBpbmNvbWluZyBkYXRhLgorCisgICAuLiBub3RlOjoKKyAgICAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYnVmZmVyZWQsIGNodW5rZWQgb3IgcmVhc3NlbWJsZWQgZGVwZW5kcyBvbgorICAgICAgdGhlIHRyYW5zcG9ydC4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGRuJ3QgcmVseSBvbiBzcGVjaWZpYyBzZW1hbnRpY3MKKyAgICAgIGFuZCBpbnN0ZWFkIG1ha2UgeW91ciBwYXJzaW5nIGdlbmVyaWMgYW5kIGZsZXhpYmxlIGVub3VnaC4gIEhvd2V2ZXIsCisgICAgICBkYXRhIGlzIGFsd2F5cyByZWNlaXZlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKworLi4gbWV0aG9kOjogZW9mX3JlY2VpdmVkKCkKKworICAgQ2FsbHMgd2hlbiB0aGUgb3RoZXIgZW5kIHNpZ25hbHMgaXQgd29uJ3Qgc2VuZCBhbnkgbW9yZSBkYXRhCisgICAoZm9yIGV4YW1wbGUgYnkgY2FsbGluZyA6bWV0aDpgd3JpdGVfZW9mYCwgaWYgdGhlIG90aGVyIGVuZCBhbHNvIHVzZXMKKyAgIGFzeW5jaW8pLgorCisgICBUaGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEgZmFsc2UgdmFsdWUgKGluY2x1ZGluZyBOb25lKSwgaW4gd2hpY2ggY2FzZQorICAgdGhlIHRyYW5zcG9ydCB3aWxsIGNsb3NlIGl0c2VsZi4gIENvbnZlcnNlbHksIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgYQorICAgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4gIFNpbmNlIHRoZQorICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIE5vbmUsIGl0IGltcGxpY2l0bHkgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgorCisgICAuLiBub3RlOjoKKyAgICAgIFNvbWUgdHJhbnNwb3J0cyBzdWNoIGFzIFNTTCBkb24ndCBzdXBwb3J0IGhhbGYtY2xvc2VkIGNvbm5lY3Rpb25zLAorICAgICAgaW4gd2hpY2ggY2FzZSByZXR1cm5pbmcgdHJ1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgbm90IHByZXZlbnQgY2xvc2luZworICAgICAgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmBkYXRhX3JlY2VpdmVkYCBjYW4gYmUgY2FsbGVkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdGltZXMgZHVyaW5nCithIGNvbm5lY3Rpb24uICBIb3dldmVyLCA6bWV0aDpgZW9mX3JlY2VpdmVkYCBpcyBjYWxsZWQgYXQgbW9zdCBvbmNlCithbmQsIGlmIGNhbGxlZCwgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIHdvbid0IGJlIGNhbGxlZCBhZnRlciBpdC4KKworRGF0YWdyYW0gcHJvdG9jb2xzCisiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBvbiA6Y2xhc3M6YERhdGFncmFtUHJvdG9jb2xgIGluc3RhbmNlcy4KKworLi4gbWV0aG9kOjogZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKworICAgQ2FsbGVkIHdoZW4gYSBkYXRhZ3JhbSBpcyByZWNlaXZlZC4gICpkYXRhKiBpcyBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nCisgICB0aGUgaW5jb21pbmcgZGF0YS4gICphZGRyKiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcGVlciBzZW5kaW5nIHRoZSBkYXRhOworICAgdGhlIGV4YWN0IGZvcm1hdCBkZXBlbmRzIG9uIHRoZSB0cmFuc3BvcnQuCisKKy4uIG1ldGhvZDo6IGVycm9yX3JlY2VpdmVkKGV4YykKKworICAgQ2FsbGVkIHdoZW4gYSBwcmV2aW91cyBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbgorICAgOmNsYXNzOmBPU0Vycm9yYC4gICpleGMqIGlzIHRoZSA6Y2xhc3M6YE9TRXJyb3JgIGluc3RhbmNlLgorCisgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gcmFyZSBjb25kaXRpb25zLCB3aGVuIHRoZSB0cmFuc3BvcnQgKGUuZy4gVURQKQorICAgZGV0ZWN0cyB0aGF0IGEgZGF0YWdyYW0gY291bGRuJ3QgYmUgZGVsaXZlcmVkIHRvIGl0cyByZWNpcGllbnQuCisgICBJbiBtYW55IGNvbmRpdGlvbnMgdGhvdWdoLCB1bmRlbGl2ZXJhYmxlIGRhdGFncmFtcyB3aWxsIGJlIHNpbGVudGx5CisgICBkcm9wcGVkLgorCisKK0Zsb3cgY29udHJvbCBjYWxsYmFja3MKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAgYW5kCis6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBwYXVzZV93cml0aW5nKCkKKworICAgQ2FsbGVkIHdoZW4gdGhlIHRyYW5zcG9ydCdzIGJ1ZmZlciBnb2VzIG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyay4KKworLi4gbWV0aG9kOjogcmVzdW1lX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKworOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGFuZCA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIGNhbGxzIGFyZSBwYWlyZWQgLS0KKzptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBidWZmZXIgZ29lcyBzdHJpY3RseSBvdmVyCit0aGUgaGlnaC13YXRlciBtYXJrIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUKK2V2ZW4gbW9yZSksIGFuZCBldmVudHVhbGx5IDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKK2J1ZmZlciBzaXplIHJlYWNoZXMgdGhlIGxvdy13YXRlciBtYXJrLgorCisuLiBub3RlOjoKKyAgIElmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBub3QgY2FsbGVkIC0tIGl0IG11c3QgZ28gc3RyaWN0bHkgb3Zlci4KKyAgIENvbnZlcnNlbHksIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoaW5ncyBnbyBhcyBleHBlY3RlZCB3aGVuIGVpdGhlcgorICAgbWFyayBpcyB6ZXJvLgorCisKKy4uIF90cmFuc3BvcnQ6CisKK1RyYW5zcG9ydHMKKy0tLS0tLS0tLS0KKworVHJhbnNwb3J0cyBhcmUgY2xhc3NlZCBwcm92aWRlZCBieSA6bW9kOmBhc3luY2lvYCBpbiBvcmRlciB0byBhYnN0cmFjdAordmFyaW91cyBraW5kcyBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiAgWW91IGdlbmVyYWxseSB3b24ndCBpbnN0YW50aWF0ZQorYSB0cmFuc3BvcnQgeW91cnNlbGY7IGluc3RlYWQsIHlvdSB3aWxsIGNhbGwgYSA6Y2xhc3M6YEV2ZW50TG9vcGAgbWV0aG9kCit3aGljaCB3aWxsIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGFuZCB0cnkgdG8gaW5pdGlhdGUgdGhlIHVuZGVybHlpbmcKK2NvbW11bmljYXRpb24gY2hhbm5lbCwgY2FsbGluZyB5b3UgYmFjayB3aGVuIGl0IHN1Y2NlZWRzLgorCitPbmNlIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXMgZXN0YWJsaXNoZWQsIGEgdHJhbnNwb3J0IGlzIGFsd2F5cworcGFpcmVkIHdpdGggYSA6cmVmOmBwcm90b2NvbCA8cHJvdG9jb2w+YCBpbnN0YW5jZS4gIFRoZSBwcm90b2NvbCBjYW4KK3RoZW4gY2FsbCB0aGUgdHJhbnNwb3J0J3MgbWV0aG9kcyBmb3IgdmFyaW91cyBwdXJwb3Nlcy4KKworOm1vZDpgYXN5bmNpb2AgY3VycmVudGx5IGltcGxlbWVudHMgdHJhbnNwb3J0cyBmb3IgVENQLCBVRFAsIFNTTCwgYW5kCitzdWJwcm9jZXNzIHBpcGVzLiAgVGhlIG1ldGhvZHMgYXZhaWxhYmxlIG9uIGEgdHJhbnNwb3J0IGRlcGVuZCBvbgordGhlIHRyYW5zcG9ydCdzIGtpbmQuCisKK01ldGhvZHMgY29tbW9uIHRvIGFsbCB0cmFuc3BvcnRzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBjbG9zZShzZWxmKQorCisgICBDbG9zZSB0aGUgdHJhbnNwb3J0LiAgSWYgdGhlIHRyYW5zcG9ydCBoYXMgYSBidWZmZXIgZm9yIG91dGdvaW5nCisgICBkYXRhLCBidWZmZXJlZCBkYXRhIHdpbGwgYmUgZmx1c2hlZCBhc3luY2hyb25vdXNseS4gIE5vIG1vcmUgZGF0YQorICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgcHJvdG9jb2wncyA6bWV0aDpgY29ubmVjdGlvbl9sb3N0YCBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aAorICAgOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKworLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQorCisgICBSZXR1cm4gb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uLiAgKm5hbWUqIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZworICAgdGhlIHBpZWNlIG9mIHRyYW5zcG9ydC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBnZXQsICpkZWZhdWx0KiBpcyB0aGUKKyAgIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgaW5mb3JtYXRpb24gZG9lc24ndCBleGlzdC4KKworICAgVGhpcyBtZXRob2QgYWxsb3dzIHRyYW5zcG9ydCBpbXBsZW1lbnRhdGlvbnMgdG8gZWFzaWx5IGV4cG9zZQorICAgY2hhbm5lbC1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworTWV0aG9kcyBvZiByZWFkYWJsZSBzdHJlYW1pbmcgdHJhbnNwb3J0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBwYXVzZV9yZWFkaW5nKCkKKworICAgUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQgb2YgdGhlIHRyYW5zcG9ydC4gIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8KKyAgIHRoZSBwcm90b2NvbCdzIDptZXRoOmBkYXRhX3JlY2VpdmVkYCBtZXRob2QgdW50aWwgbWV0aDpgcmVzdW1lX3JlYWRpbmdgCisgICBpcyBjYWxsZWQuCisKKy4uIG1ldGhvZDo6IHJlc3VtZV9yZWFkaW5nKCkKKworICAgUmVzdW1lIHRoZSByZWNlaXZpbmcgZW5kLiAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIG1ldGhvZAorICAgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2FpbiBpZiBzb21lIGRhdGEgaXMgYXZhaWxhYmxlIGZvciByZWFkaW5nLgorCitNZXRob2RzIG9mIHdyaXRhYmxlIHN0cmVhbWluZyB0cmFuc3BvcnRzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IHdyaXRlKGRhdGEpCisKKyAgIFdyaXRlIHNvbWUgKmRhdGEqIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorCisuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGxpc3Rfb2ZfZGF0YSkKKworICAgV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKyAgIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZyA6bWV0aDpgd3JpdGVgIG9uIGVhY2gKKyAgIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmFibGUsIGJ1dCBtYXkgYmUgaW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseS4KKworLi4gbWV0aG9kOjogd3JpdGVfZW9mKCkKKworICAgQ2xvc2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgdHJhbnNwb3J0IGFmdGVyIGZsdXNoaW5nIGJ1ZmZlcmVkIGRhdGEuCisgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKworICAgVGhpcyBtZXRob2QgY2FuIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSB0cmFuc3BvcnQKKyAgIChlLmcuIFNTTCkgZG9lc24ndCBzdXBwb3J0IGhhbGYtY2xvc2VzLgorCisuLiBtZXRob2Q6OiBjYW5fd3JpdGVfZW9mKCkKKworICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgdGhlIHRyYW5zcG9ydCBzdXBwb3J0cyA6bWV0aDpgd3JpdGVfZW9mYCwKKyAgIDpjb25zdDpgRmFsc2VgIGlmIG5vdC4KKworLi4gbWV0aG9kOjogYWJvcnQoKQorCisgICBDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucworICAgdG8gY29tcGxldGUuICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgZXZlbnR1YWxseSBiZQorICAgY2FsbGVkIHdpdGggOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKy4uIG1ldGhvZDo6IHNldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9Tm9uZSwgbG93PU5vbmUpCisKKyAgIFNldCB0aGUgKmhpZ2gqLSBhbmQgKmxvdyotd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgIFRoZXNlIHR3byB2YWx1ZXMgY29udHJvbCB3aGVuIGNhbGwgdGhlIHByb3RvY29sJ3MKKyAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBhbmQgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBtZXRob2RzIGFyZSBjYWxsZWQuCisgICBJZiBzcGVjaWZpZWQsIHRoZSBsb3ctd2F0ZXIgbGltaXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciAqaGlnaCogbm9yICpsb3cqIGNhbiBiZSBuZWdhdGl2ZS4KKworICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGEKKyAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgIGhpZ2gtd2F0ZXIgbGltaXQuICBTZXR0aW5nICpoaWdoKiB0byB6ZXJvIGZvcmNlcyAqbG93KiB0byB6ZXJvIGFzCisgICB3ZWxsLCBhbmQgY2F1c2VzIDptZXRoOmBwYXVzZV93cml0aW5nYCB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlCisgICBidWZmZXIgYmVjb21lcyBub24tZW1wdHkuICBTZXR0aW5nICpsb3cqIHRvIHplcm8gY2F1c2VzCisgICA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICByZWR1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGRvaW5nIEkvTyBhbmQgY29tcHV0YXRpb24KKyAgIGNvbmN1cnJlbnRseS4KKworLi4gbWV0aG9kOjogZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorCitNZXRob2RzIG9mIGRhdGFncmFtIHRyYW5zcG9ydHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBzZW5kdG8oZGF0YSwgYWRkcj1Ob25lKQorCisgICBTZW5kIHRoZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHJlbW90ZSBwZWVyIGdpdmVuIGJ5ICphZGRyKiAoYQorICAgdHJhbnNwb3J0LWRlcGVuZGVudCB0YXJnZXQgYWRkcmVzcykuICBJZiAqYWRkciogaXMgOmNvbnN0OmBOb25lYCwgdGhlCisgICBkYXRhIGlzIHNlbnQgdG8gdGhlIHRhcmdldCBhZGRyZXNzIGdpdmVuIG9uIHRyYW5zcG9ydCBjcmVhdGlvbi4KKworICAgVGhpcyBtZXRob2QgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisKKy4uIG1ldGhvZDo6IGFib3J0KCkKKworICAgQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIG9wZXJhdGlvbnMKKyAgIHRvIGNvbXBsZXRlLiAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgIFRoZSBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGV2ZW50dWFsbHkgYmUKKyAgIGNhbGxlZCB3aXRoIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCitNZXRob2RzIG9mIHN1YnByb2Nlc3MgdHJhbnNwb3J0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogZ2V0X3BpZCgpCisKKyAgIFJldHVybiB0aGUgc3VicHJvY2VzcyBwcm9jZXNzIGlkIGFzIGFuIGludGVnZXIuCisKKy4uIG1ldGhvZDo6IGdldF9yZXR1cm5jb2RlKCkKKworICAgUmV0dXJuIHRoZSBzdWJwcm9jZXNzIHJldHVybmNvZGUgYXMgYW4gaW50ZWdlciBvciA6Y29uc3Q6YE5vbmVgCisgICBpZiBpdCBoYXNuJ3QgcmV0dXJuZWQsIHNpbWlsYXJseSB0byB0aGUKKyAgIDphdHRyOmBzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGVgIGF0dHJpYnV0ZS4KKworLi4gbWV0aG9kOjogZ2V0X3BpcGVfdHJhbnNwb3J0KGZkKQorCisgICBSZXR1cm4gdGhlIHRyYW5zcG9ydCBmb3IgdGhlIGNvbW11bmljYXRpb24gcGlwZSBjb3JyZXNwb25kb25nIHRvIHRoZQorICAgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgKmZkKi4gIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGEgcmVhZGFibGUgb3IKKyAgIHdyaXRhYmxlIHN0cmVhbWluZyB0cmFuc3BvcnQsIGRlcGVuZGluZyBvbiB0aGUgKmZkKi4gIElmICpmZCogZG9lc24ndAorICAgY29ycmVzcG9uZCB0byBhIHBpcGUgYmVsb25naW5nIHRvIHRoaXMgdHJhbnNwb3J0LCA6Y29uc3Q6YE5vbmVgIGlzCisgICByZXR1cm5lZC4KKworLi4gbWV0aG9kOjogc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICBTZW5kIHRoZSAqc2lnbmFsKiBudW1iZXIgdG8gdGhlIHN1YnByb2Nlc3MsIGFzIGluCisgICA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbGAuCisKKy4uIG1ldGhvZDo6IHRlcm1pbmF0ZSgpCisKKyAgIEFzayB0aGUgc3VicHJvY2VzcyB0byBzdG9wLCBhcyBpbiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGVgLgorICAgVGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIHRoZSA6bWV0aDpgY2xvc2VgIG1ldGhvZC4KKworICAgT24gUE9TSVggc3lzdGVtcywgdGhpcyBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgIE9uIFdpbmRvd3MsIHRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbiBUZXJtaW5hdGVQcm9jZXNzKCkgaXMgY2FsbGVkIHRvCisgICBzdG9wIHRoZSBzdWJwcm9jZXNzLgorCisuLiBtZXRob2Q6OiBraWxsKHNlbGYpCisKKyAgIEtpbGwgdGhlIHN1YnByb2Nlc3MsIGFzIGluIDptZXRoOmBzdWJwcm9jZXNzLlBvcGVuLmtpbGxgCisKKyAgIE9uIFBPU0lYIHN5c3RlbXMsIHRoZSBmdW5jdGlvbiBzZW5kcyBTSUdLSUxMIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgT24gV2luZG93cywgdGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIDptZXRoOmB0ZXJtaW5hdGVgLgorCisKKy4uIF9jb3JvdXRpbmU6CisKK0Nvcm91dGluZXMKKy0tLS0tLS0tLS0KKworCisuLiBfc3luYzoKKworU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK0EgOmNsYXNzOmBQcm90b2NvbGAgaW1wbGVtZW50aW5nIGFuIGVjaG8gc2VydmVyOjoKKworICAgY2xhc3MgRWNob1NlcnZlcihhc3luY2lvLlByb3RvY29sKToKKworICAgICAgIFRJTUVPVVQgPSA1LjAKKworICAgICAgIGRlZiB0aW1lb3V0KHNlbGYpOgorICAgICAgICAgICBwcmludCgnY29ubmVjdGlvbiB0aW1lb3V0LCBjbG9zaW5nLicpCisgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LmNsb3NlKCkKKworICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Rpb24gbWFkZScpCisgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgICAgIyBzdGFydCA1IHNlY29uZHMgdGltZW91dCB0aW1lcgorICAgICAgICAgICBzZWxmLmhfdGltZW91dCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKS5jYWxsX2xhdGVyKAorICAgICAgICAgICAgICAgc2VsZi5USU1FT1VULCBzZWxmLnRpbWVvdXQpCisKKyAgICAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgICAgcHJpbnQoJ2RhdGEgcmVjZWl2ZWQ6ICcsIGRhdGEuZGVjb2RlKCkpCisgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LndyaXRlKGInUmU6ICcgKyBkYXRhKQorCisgICAgICAgICAgICMgcmVzdGFydCB0aW1lb3V0IHRpbWVyCisgICAgICAgICAgIHNlbGYuaF90aW1lb3V0LmNhbmNlbCgpCisgICAgICAgICAgIHNlbGYuaF90aW1lb3V0ID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpLmNhbGxfbGF0ZXIoCisgICAgICAgICAgICAgICBzZWxmLlRJTUVPVVQsIHNlbGYudGltZW91dCkKKworICAgICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgICAgIHBhc3MKKworICAgICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Rpb24gbG9zdDonLCBleGMpCisgICAgICAgICAgIHNlbGYuaF90aW1lb3V0LmNhbmNlbCgpCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdAppbmRleCA4ZjQ5NGQwLi42MTA3OWM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CkBAIC0xMyw2ICsxMywxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiAgRm9yIG5ldyBjb2RlIHdlCisgICByZWNvbW1lbmQgdXNpbmcgOm1vZDpgYXN5bmNpb2AuCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBiYXNpYyBpbmZyYXN0cnVjdHVyZSBmb3Igd3JpdGluZyBhc3luY2hyb25vdXMgIHNvY2tldAogc2VydmljZSBjbGllbnRzIGFuZCBzZXJ2ZXJzLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdCBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CmluZGV4IGVkYjM4NzAuLmZiYjdmYzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CkBAIC02LDkgKzYsMTYgQEAKIAogCiBUaGUgOm1vZDpgYXVkaW9vcGAgbW9kdWxlIGNvbnRhaW5zIHNvbWUgdXNlZnVsIG9wZXJhdGlvbnMgb24gc291bmQgZnJhZ21lbnRzLgotSXQgb3BlcmF0ZXMgb24gc291bmQgZnJhZ21lbnRzIGNvbnNpc3Rpbmcgb2Ygc2lnbmVkIGludGVnZXIgc2FtcGxlcyA4LCAxNiBvciAzMgotYml0cyB3aWRlLCBzdG9yZWQgaW4gYnl0ZXMgb2JqZWN0cy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlIGludGVnZXJzLCB1bmxlc3MKLXNwZWNpZmllZCBvdGhlcndpc2UuCitJdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2LCAyNAorb3IgMzIgYml0cyB3aWRlLCBzdG9yZWQgaW4gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlCitpbnRlZ2VycywgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBTdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcyB3YXMgYWRkZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkIGJ5IGFsbCBmdW5jdGlvbnMgaW4gdGhpcworICAgbW9kdWxlLiAgU3RyaW5ncyBubyBtb3JlIHN1cHBvcnRlZC4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBJbnRlbC9EVkkgQURQQ00KQEAgLTM1LDcgKzQyLDcgQEAKIC4uIGZ1bmN0aW9uOjogYWRkKGZyYWdtZW50MSwgZnJhZ21lbnQyLCB3aWR0aCkKIAogICAgUmV0dXJuIGEgZnJhZ21lbnQgd2hpY2ggaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gc2FtcGxlcyBwYXNzZWQgYXMgcGFyYW1ldGVycy4KLSAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCBvciBgYDRgYC4gIEJvdGgKKyAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCwgYGAzYGAgb3IgYGA0YGAuICBCb3RoCiAgICBmcmFnbWVudHMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgU2FtcGxlcyBhcmUgdHJ1bmNhdGVkIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuCiAKIApAQCAtNzAsNiArNzcsMTQgQEAKICAgIHNhbXBsZS4gIFNhbXBsZXMgd3JhcCBhcm91bmQgaW4gY2FzZSBvZiBvdmVyZmxvdy4KIAogCisuLiBmdW5jdGlvbjo6IGJ5dGVzd2FwKGZyYWdtZW50LCB3aWR0aCkKKworICAgIkJ5dGVzd2FwIiBhbGwgc2FtcGxlcyBpbiBhIGZyYWdtZW50IGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBmcmFnbWVudC4KKyAgIENvbnZlcnRzIGJpZy1lbmRpYW4gc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY3Jvc3MoZnJhZ21lbnQsIHdpZHRoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB6ZXJvIGNyb3NzaW5ncyBpbiB0aGUgZnJhZ21lbnQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgpAQCAtMTMzLDE5ICsxNDgsMTkgQEAKIAogLi4gZnVuY3Rpb246OiBsaW4ybGluKGZyYWdtZW50LCB3aWR0aCwgbmV3d2lkdGgpCiAKLSAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSBhbmQgNC1ieXRlIGZvcm1hdHMuCisgICBDb252ZXJ0IHNhbXBsZXMgYmV0d2VlbiAxLSwgMi0sIDMtIGFuZCA0LWJ5dGUgZm9ybWF0cy4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiBhbmQgMzIgYml0IHNhbXBsZXMgYXJlCisgICAgICBJbiBzb21lIGF1ZGlvIGZvcm1hdHMsIHN1Y2ggYXMgLldBViBmaWxlcywgMTYsIDI0IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKICAgICAgIHNpZ25lZCwgYnV0IDggYml0IHNhbXBsZXMgYXJlIHVuc2lnbmVkLiAgU28gd2hlbiBjb252ZXJ0aW5nIHRvIDggYml0IHdpZGUKICAgICAgIHNhbXBsZXMgZm9yIHRoZXNlIGZvcm1hdHMsIHlvdSBuZWVkIHRvIGFsc28gYWRkIDEyOCB0byB0aGUgcmVzdWx0OjoKIAogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AubGluMmxpbihmcmFtZXMsIG9sZF93aWR0aCwgMSkKICAgICAgICAgIG5ld19mcmFtZXMgPSBhdWRpb29wLmJpYXMobmV3X2ZyYW1lcywgMSwgMTI4KQogCi0gICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiBvciAzMgotICAgICAgYml0IHdpZHRoIHNhbXBsZXMuCisgICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiwgMjQKKyAgICAgIG9yIDMyIGJpdCB3aWR0aCBzYW1wbGVzLgogCiAKIC4uIGZ1bmN0aW9uOjogbGluMnVsYXcoZnJhZ21lbnQsIHdpZHRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdCBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKaW5kZXggM2IyM2U3OS4uYTdlZWQwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CkBAIC0yNyw2ICsyNywxMCBAQAogICAgQVNDSUktb25seSBVbmljb2RlIHN0cmluZ3MgYXJlIG5vdyBhY2NlcHRlZCBieSB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mCiAgICB0aGUgbW9kZXJuIGludGVyZmFjZS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsCisgICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLgorCiBUaGUgbW9kZXJuIGludGVyZmFjZSBwcm92aWRlczoKIAogLi4gZnVuY3Rpb246OiBiNjRlbmNvZGUocywgYWx0Y2hhcnM9Tm9uZSkKQEAgLTEyOCw2ICsxMzIsNzYgQEAKICAgIHN0cmluZy4KIAogCisuLiBmdW5jdGlvbjo6IGE4NWVuY29kZShzLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCB3cmFwY29sPTAsIHBhZD1GYWxzZSwgYWRvYmU9RmFsc2UpCisKKyAgIEVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEFzY2lpODUuCisKKyAgICpzKiBpcyB0aGUgc3RyaW5nIHRvIGVuY29kZS4gVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICpmb2xkc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBmbGFnIHRoYXQgdXNlcyB0aGUgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZSAneScKKyAgIGluc3RlYWQgb2YgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApIGFzIHN1cHBvcnRlZCBieSAnYnRvYScuIFRoaXMKKyAgIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBc2NpaTg1IGVuY29kaW5nLgorCisgICAqd3JhcGNvbCogY29udHJvbHMgd2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBoYXZlIG5ld2xpbmUgKCdcbicpCisgICBjaGFyYWN0ZXJzIGFkZGVkIHRvIGl0LiBJZiB0aGlzIGlzIG5vbi16ZXJvLCBlYWNoIG91dHB1dCBsaW5lIHdpbGwgYmUKKyAgIGF0IG1vc3QgdGhpcyBtYW55IGNoYXJhY3RlcnMgbG9uZy4KKworICAgKnBhZCogY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIDQKKyAgIGJlZm9yZSBlbmNvZGluZy4gTm90ZSB0aGF0IHRoZSBgYGJ0b2FgYCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcGFkcy4KKworICAgKmFkb2JlKiBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggYGA8fmBgCisgICBhbmQgYGB+PmBgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBZG9iZSBpbXBsZW1lbnRhdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBhODVkZWNvZGUocywgKiwgZm9sZHNwYWNlcz1GYWxzZSwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWInIFx0XG5cclx2JykKKworICAgRGVjb2RlIGFuIEFzY2lpODUgZW5jb2RlZCBieXRlIHN0cmluZy4KKworICAgKnMqIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuCisKKyAgICpmb2xkc3BhY2VzKiBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlCisgICBzaG91bGQgYmUgYWNjZXB0ZWQgYXMgc2hvcnRoYW5kIGZvciA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkuCisgICBUaGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBc2NpaTg1IGVuY29kaW5nLgorCisgICAqYWRvYmUqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHNlcXVlbmNlIGlzIGluIEFkb2JlIEFzY2lpODUgZm9ybWF0CisgICAoaS5lLiBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4pLgorCisgICAqaWdub3JlY2hhcnMqIHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBpZ25vcmUKKyAgIGZyb20gdGhlIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkKKyAgIGRlZmF1bHQgY29udGFpbnMgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBBU0NJSS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVlbmNvZGUocywgcGFkPUZhbHNlKQorCisgICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBiYXNlODUsIGFzIHVzZWQgaW4gZS5nLiBnaXQtc3R5bGUgYmluYXJ5CisgICBkaWZmcy4KKworICAgSWYgKnBhZCogaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoICJcXDAiIHNvIGl0cyBsZW5ndGggaXMgYQorICAgbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVkZWNvZGUoYikKKworICAgRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgc3RyaW5nLiAgUGFkZGluZyBpcyBpbXBsaWNpdGx5IHJlbW92ZWQsIGlmCisgICBuZWNlc3NhcnkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG5vdGU6OgorICAgQm90aCBCYXNlODUgYW5kIEFzY2lpODUgaGF2ZSBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDUgdG8gNCAoNSBCYXNlODUgb3IKKyAgIEFzY2lpODUgY2hhcmFjdGVycyBjYW4gZW5jb2RlIDQgYmluYXJ5IGJ5dGVzKSwgd2hpbGUgdGhlIGJldHRlci1rbm93bgorICAgQmFzZTY0IGhhcyBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDYgdG8gNC4gIFRoZXkgYXJlIHRoZXJlZm9yZSBtb3JlCisgICBlZmZpY2llbnQgd2hlbiBzcGFjZSBleHBlbnNpdmUuICBUaGV5IGRpZmZlciBieSBkZXRhaWxzIHN1Y2ggYXMgdGhlCisgICBjaGFyYWN0ZXIgbWFwIHVzZWQgZm9yIGVuY29kaW5nLgorCisKIFRoZSBsZWdhY3kgaW50ZXJmYWNlOgogCiAuLiBmdW5jdGlvbjo6IGRlY29kZShpbnB1dCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYnoyLnJzdCBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKaW5kZXggZDA2YTM5YS4uNDRlMTMzMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYnoyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iejIucnN0CkBAIC0zNyw4ICszNyw4IEBACiAgICBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAndydgYCwgYGAnd2InYGAsCi0gICBgYCdhJ2BgLCBvciBgYCdhYidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLCBgYCd3dCdgYCwgb3IgYGAnYXQnYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAneCdgYCwgYGAneGInYGAsIGBgJ2EnYGAgb3IgYGAnYWInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwKKyAgIGBgJ3d0J2BgLCBgYCd4dCdgYCwgb3IgYGAnYXQnYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIFRoZSAqY29tcHJlc3NsZXZlbCogYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDEgdG8gOSwgYXMgZm9yIHRoZQogICAgOmNsYXNzOmBCWjJGaWxlYCBjb25zdHJ1Y3Rvci4KQEAgLTU0LDYgKzU0LDkgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGAneCdgYCAoZXhjbHVzaXZlIGNyZWF0aW9uKSBtb2RlIHdhcyBhZGRlZC4KKwogCiAuLiBjbGFzczo6IEJaMkZpbGUoZmlsZW5hbWUsIG1vZGU9J3InLCBidWZmZXJpbmc9Tm9uZSwgY29tcHJlc3NsZXZlbD05KQogCkBAIC02NCw4ICs2Nyw5IEBACiAgICBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgZWl0aGVyIGBgJ3InYGAgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCBgYCd3J2BgIGZvcgotICAgb3ZlcndyaXRpbmcsIG9yIGBgJ2EnYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcwotICAgYGAncmInYGAsIGBgJ3diJ2BgLCBhbmQgYGAnYWInYGAgcmVzcGVjdGl2ZWx5LgorICAgb3ZlcndyaXRpbmcsIGBgJ3gnYGAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbiwgb3IgYGAnYSdgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZQorICAgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyBgYCdyYidgYCwgYGAnd2InYGAsIGBgJ3hiJ2BgIGFuZCBgYCdhYidgYAorICAgcmVzcGVjdGl2ZWx5LgogCiAgICBJZiAqZmlsZW5hbWUqIGlzIGEgZmlsZSBvYmplY3QgKHJhdGhlciB0aGFuIGFuIGFjdHVhbCBmaWxlIG5hbWUpLCBhIG1vZGUgb2YKICAgIGBgJ3cnYGAgZG9lcyBub3QgdHJ1bmNhdGUgdGhlIGZpbGUsIGFuZCBpcyBpbnN0ZWFkIGVxdWl2YWxlbnQgdG8gYGAnYSdgYC4KQEAgLTEwOCw2ICsxMTIsOSBAQAogICAgICAgVGhlIGBgJ2EnYGAgKGFwcGVuZCkgbW9kZSB3YXMgYWRkZWQsIGFsb25nIHdpdGggc3VwcG9ydCBmb3IgcmVhZGluZwogICAgICAgbXVsdGktc3RyZWFtIGZpbGVzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCisKIAogSW5jcmVtZW50YWwgKGRlKWNvbXByZXNzaW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGUucnN0IGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKaW5kZXggZTg2OTAwNC4uNWI1ZDdjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKQEAgLTEzMiwxMiArMTMyLDE1IEBACiAKIC4uIG1ldGhvZDo6IEludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdChiYW5uZXI9Tm9uZSkKIAotICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsIGJhbm5lciBhcmd1bWVudAorICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsICpiYW5uZXIqIGFyZ3VtZW50CiAgICBzcGVjaWZ5IHRoZSBiYW5uZXIgdG8gcHJpbnQgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmFjdGlvbjsgYnkgZGVmYXVsdCBpdCBwcmludHMgYQogICAgYmFubmVyIHNpbWlsYXIgdG8gdGhlIG9uZSBwcmludGVkIGJ5IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIsIGZvbGxvd2VkCiAgICBieSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY29uc29sZSBvYmplY3QgaW4gcGFyZW50aGVzZXMgKHNvIGFzIG5vdCB0byBjb25mdXNlCiAgICB0aGlzIHdpdGggdGhlIHJlYWwgaW50ZXJwcmV0ZXIgLS0gc2luY2UgaXQncyBzbyBjbG9zZSEpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVG8gc3VwcHJlc3MgcHJpbnRpbmcgYW55IGJhbm5lciwgcGFzcyBhbiBlbXB0eSBzdHJpbmcuCisKIAogLi4gbWV0aG9kOjogSW50ZXJhY3RpdmVDb25zb2xlLnB1c2gobGluZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKaW5kZXggMDA5YWUyNi4uODQzZGUyNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CkBAIC0zNjUsMTggKzM2NSwyMyBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIDpwZXA6YDM4M2AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIGEgc2luZ2xlIGNvZGVjOgorSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIFVuaWNvZGUgZW5jb2RpbmcKK3NjaGVtZXM6CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXxgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCAgIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAotfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlcyBpbiBVVEYtOC4gICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3xgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCwgdXRmLTE2LCB1dGYtMzIsIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAorfCAgICAgICAgICAgICAgICAgICB8IHV0Zi0xNi1iZSwgdXRmLTE2LWxlLCAgfCBjb2RlcyBpbiBhbGwgdGhlIFVuaWNvZGUgZW5jb2Rpbmcgc2NoZW1lcy58Cit8ICAgICAgICAgICAgICAgICAgIHwgdXRmLTMyLWJlLCB1dGYtMzItbGUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKICAgIFRoZSBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgYW5kIGBgJ3N1cnJvZ2F0ZXBhc3MnYGAgZXJyb3IgaGFuZGxlcnMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgYGAnc3Vycm9nYXRlcGFzcydgYCBlcnJvciBoYW5kbGVycyBub3cgd29ya3Mgd2l0aCB1dGYtMTZcKiBhbmQgdXRmLTMyXCogY29kZWNzLgorCiBUaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGNhbiBiZSBleHRlbmRlZCB2aWEgOm1ldGg6YHJlZ2lzdGVyX2Vycm9yYC4KIAogCkBAIC0xMDIyLDYgKzEwMjcsMTAgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMDI2ICAgICAgICAgIHwgaWJtMTAyNiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHVya2lzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3AxMTI1ICAgICAgICAgIHwgMTEyNSwgaWJtMTEyNSwgY3A4NjZ1LCBydXNjaWkgIHwgVWtyYWluaWFuICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy40ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMTQwICAgICAgICAgIHwgaWJtMTE0MCAgICAgICAgICAgICAgICAgICAgICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMjUwICAgICAgICAgIHwgd2luZG93cy0xMjUwICAgICAgICAgICAgICAgICAgIHwgQ2VudHJhbCBhbmQgRWFzdGVybiBFdXJvcGUgICAgIHwKQEAgLTExNjcsNiArMTE3NiwxMiBAQAogfCB1dGZfOF9zaWcgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbGwgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHV0Zi0xNlwqIGFuZCB1dGYtMzJcKiBlbmNvZGVycyBubyBsb25nZXIgYWxsb3cgc3Vycm9nYXRlIGNvZGUgcG9pbnRzCisgICAoVStEODAwLS1VK0RGRkYpIHRvIGJlIGVuY29kZWQuICBUaGUgdXRmLTMyXCogZGVjb2RlcnMgbm8gbG9uZ2VyIGRlY29kZQorICAgYnl0ZSBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4KKworCiBQeXRob24gU3BlY2lmaWMgRW5jb2RpbmdzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExNzcsNiArMTE5Miw5IEBACiBhcmJpdHJhcnkgZGF0YSB0cmFuc2Zvcm1zIHJhdGhlciB0aGFuIGp1c3QgdGV4dCBlbmNvZGluZ3MpLiAgRm9yIGFzeW1tZXRyaWMKIGNvZGVjcywgdGhlIHN0YXRlZCBwdXJwb3NlIGRlc2NyaWJlcyB0aGUgZW5jb2RpbmcgZGlyZWN0aW9uLgogCitUZXh0IEVuY29kaW5ncworXl5eXl5eXl5eXl5eXl4KKwogVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBieXRlc2AgZW5jb2RpbmcgYW5kCiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIHRvIDpjbGFzczpgc3RyYCBkZWNvZGluZywgc2ltaWxhciB0byB0aGUgVW5pY29kZSB0ZXh0CiBlbmNvZGluZ3MuCkBAIC0xMjIzLDU3ICsxMjQxLDgzIEBACiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAuLiBkZXByZWNhdGVkOjogMy4zICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1UaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgdG8gOmNsYXNzOmBieXRlc2AKLW1hcHBpbmdzLgorLi4gX2JpbmFyeS10cmFuc2Zvcm1zOgorCitCaW5hcnkgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSBiaW5hcnkgdHJhbnNmb3JtczogOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YAordG8gOmNsYXNzOmBieXRlc2AgbWFwcGluZ3MuCiAKIAotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfEx8CisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THxMfAogCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyL2RlY29kZXIgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGJhc2U2NF9jb2RlYyBbI2I2NF1fIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICB8IDptZXRoOmBiYXNlNjQuYjY0ZW5jb2RlYCwgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlcyBhIHRyYWlsaW5nICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgYGAnXG4nYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYnoyX2NvZGVjICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgIHwgOm1ldGg6YGJ6Mi5jb21wcmVzc2AsICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgdXNpbmcgYnoyICAgICAgICAgICAgICAgICB8IDptZXRoOmBiejIuZGVjb21wcmVzc2AgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaGV4X2NvZGVjICAgICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZlbmNvZGVgLCAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgaGV4YWRlY2ltYWwgICAgICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZGVjb2RlYCAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBkaWdpdHMgcGVyIGJ5dGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBxdW9wcmlfY29kZWMgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AsIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWQgcHJpbnRhYmxlICAgICAgICAgIHwgOm1ldGg6YHF1b3ByaS5kZWNvZGVzdHJpbmdgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB1dV9jb2RlYyAgICAgICAgICAgICB8IENvbnZlcnQgdGhlIG9wZXJhbmQgdXNpbmcgfCA6bWV0aDpgdXUuZW5jb2RlYCwgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB6bGliX2NvZGVjICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfCA6bWV0aDpgemxpYi5jb21wcmVzc2AsICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICAgIHwgQWxpYXNlcyAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyIC8gZGVjb2RlciAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBiYXNlNjRfY29kZWMgWyNiNjRdXyB8IGJhc2U2NCwgYmFzZV82NCAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgICAgIHwgOm1ldGg6YGJhc2U2NC5iNjRlbmNvZGVgIC8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgICAgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgaW5jbHVkZXMgYSB0cmFpbGluZyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBhY2NlcHRzIGFueSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgYXMgaW5wdXQgZm9yIGVuY29kaW5nIGFuZCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBkZWNvZGluZyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYnoyX2NvZGVjICAgICAgICAgICAgfCBiejIgICAgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmBiejIuY29tcHJlc3NgIC8gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgaGV4X2NvZGVjICAgICAgICAgICAgfCBoZXggICAgICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZW5jb2RlYCAvICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZkZWNvZGVgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgZGlnaXRzIHBlciBieXRlICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgcXVvcHJpLCAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AgL3wKK3wgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWRwcmludGFibGUsIHwgcXVvdGVkIHByaW50YWJsZSAgICAgICAgICAgICB8IDptZXRoOmBxdW9wcmkuZGVjb2Rlc3RyaW5nYCAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZF9wcmludGFibGUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgdXVfY29kZWMgICAgICAgICAgICAgfCB1dSAgICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyAgICB8IDptZXRoOmB1dS5lbmNvZGVgIC8gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgemxpYl9jb2RlYyAgICAgICAgICAgfCB6aXAsIHpsaWIgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCAvICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotLi4gWyNiNjRdIFJhdGhlciB0aGFuIGFjY2VwdGluZyBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCwKLSAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhY2NlcHRzIG9ubHkgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBmb3IKLSAgIGVuY29kaW5nIGFuZCBvbmx5IDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsIGFuZCBBU0NJSS1vbmx5Ci0gICBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvciBkZWNvZGluZwotCi0KLVRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOmNsYXNzOmBzdHJgIHRvIDpjbGFzczpgc3RyYCBtYXBwaW5ncy4KLQotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAotCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IHJvdF8xMyAgICAgICAgICAgICB8IFJldHVybnMgdGhlIENhZXNhci1jeXBoZXIgfAotfCAgICAgICAgICAgICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisuLiBbI2I2NF0gSW4gYWRkaXRpb24gdG8gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCwKKyAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhbHNvIGFjY2VwdHMgQVNDSUktb25seSBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvcgorICAgZGVjb2RpbmcKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICBieXRlcy10by1ieXRlcyBhbmQgc3RyLXRvLXN0ciBjb2RlY3MuCisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYmluYXJ5IHRyYW5zZm9ybXMuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYWxpYXNlcyBmb3IgdGhlIGJpbmFyeSB0cmFuc2Zvcm1zLgorCisKKy4uIF90ZXh0LXRyYW5zZm9ybXM6CisKK1RleHQgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgY29kZWMgcHJvdmlkZXMgYSB0ZXh0IHRyYW5zZm9ybTogYSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBzdHJgCittYXBwaW5nLgorCisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfGx8THwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICB8IEFsaWFzZXMgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCByb3RfMTMgICAgICAgICAgICAgfCByb3QxMyAgIHwgUmV0dXJucyB0aGUgQ2Flc2FyLWN5cGhlciB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBgYHJvdF8xM2BgIHRleHQgdHJhbnNmb3JtLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgUmVzdG9yYXRpb24gb2YgdGhlIGBgcm90MTNgYCBhbGlhcy4KIAogCiA6bW9kOmBlbmNvZGluZ3MuaWRuYWAgLS0tIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBpbiBBcHBsaWNhdGlvbnMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CmluZGV4IDRiMjE5MzIuLjM1NmY0NzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdApAQCAtMTUsNyArMTUsNyBAQAogICAgaW1wb3J0IGl0ZXJ0b29scwogICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2xsZWN0aW9ucy9hYmMucHlgCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9fY29sbGVjdGlvbnNfYWJjLnB5YAogCiAtLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKaW5kZXggNzY0NWYyYS4uODBjNmM3NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdApAQCAtNzYsMTQgKzc2LDE5IEBACiAgICAgICAgIGJlIG1vZGlmaWVkIHRvIGNoYW5nZSB3aGljaCBtYXBwaW5ncyBhcmUgc2VhcmNoZWQuICBUaGUgbGlzdCBzaG91bGQKICAgICAgICAgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hcHBpbmcuCiAKLSAgICAuLiBtZXRob2Q6OiBuZXdfY2hpbGQoKQorICAgIC4uIG1ldGhvZDo6IG5ld19jaGlsZChtPU5vbmUpCiAKLSAgICAgICAgUmV0dXJucyBhIG5ldyA6Y2xhc3M6YENoYWluTWFwYCBjb250YWluaW5nIGEgbmV3IDpjbGFzczpgZGljdGAgZm9sbG93ZWQgYnkKLSAgICAgICAgYWxsIG9mIHRoZSBtYXBzIGluIHRoZSBjdXJyZW50IGluc3RhbmNlLiAgQSBjYWxsIHRvIGBgZC5uZXdfY2hpbGQoKWBgIGlzCi0gICAgICAgIGVxdWl2YWxlbnQgdG86IGBgQ2hhaW5NYXAoe30sICpkLm1hcHMpYGAuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgorICAgICAgICBSZXR1cm5zIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYSBuZXcgbWFwIGZvbGxvd2VkIGJ5CisgICAgICAgIGFsbCBvZiB0aGUgbWFwcyBpbiB0aGUgY3VycmVudCBpbnN0YW5jZS4gIElmIGBgbWBgIGlzIHNwZWNpZmllZCwKKyAgICAgICAgaXQgYmVjb21lcyB0aGUgbmV3IG1hcCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgb2YgbWFwcGluZ3M7IGlmIG5vdAorICAgICAgICBzcGVjaWZpZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZCwgc28gdGhhdCBhIGNhbGwgdG8gYGBkLm5ld19jaGlsZCgpYGAKKyAgICAgICAgaXMgZXF1aXZhbGVudCB0bzogYGBDaGFpbk1hcCh7fSwgKmQubWFwcylgYC4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yCiAgICAgICAgIGNyZWF0aW5nIHN1YmNvbnRleHRzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBhbHRlcmluZyB2YWx1ZXMgaW4gYW55CiAgICAgICAgIG9mIHRoZSBwYXJlbnQgbWFwcGluZ3MuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgVGhlIG9wdGlvbmFsIGBgbWBgIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKICAgICAuLiBhdHRyaWJ1dGU6OiBwYXJlbnRzCiAKICAgICAgICAgUHJvcGVydHkgcmV0dXJuaW5nIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBtYXBzIGluCkBAIC0zNjksMTAgKzM3NCw2IEBACiAKIC4uIHNlZWFsc286OgogCi0gICAgKiBgQ291bnRlciBjbGFzcyA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjExLz5gXwotICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNSBhbmQgYW4gZWFybHkgYEJhZyByZWNpcGUKLSAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvPmBfIGZvciBQeXRob24gMi40LgotCiAgICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXwogICAgICAgaW4gU21hbGx0YWxrLgogCkBAIC05MTUsMTEgKzkxNiw2IEBACiAgICAgPj4+IGNsYXNzIFN0YXR1czoKICAgICAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKIAotLi4gc2VlYWxzbzo6Ci0KLSAgICAqIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KLSAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBSZWNpcGUgZm9yIG5hbWVkIHR1cGxlIGFic3RyYWN0IGJhc2UgY2xhc3Mgd2l0aCBhIG1ldGFjbGFzcyBtaXgtaW4KICAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCiAgICAgICBieSBKYW4gS2FsaXN6ZXdza2kuICBCZXNpZGVzIHByb3ZpZGluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgZm9yCkBAIC05ODIsMTAgKzk3OCw2IEBACiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCiBzZW1hbnRpY3MgcGFzcy1pbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCiAKLS4uIHNlZWFsc286OgotCi0gICAgYEVxdWl2YWxlbnQgT3JkZXJlZERpY3QgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTMvPmBfCi0gICAgdGhhdCBydW5zIG9uIFB5dGhvbiAyLjQgb3IgbGF0ZXIuCiAKIDpjbGFzczpgT3JkZXJlZERpY3RgIEV4YW1wbGVzIGFuZCBSZWNpcGVzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CmluZGV4IGYyYTUxMmYuLjBkZTI4MWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKQEAgLTIwLDcgKzIwLDYgQEAKICAgIHN1YnByb2Nlc3MucnN0CiAgICBzY2hlZC5yc3QKICAgIHF1ZXVlLnJzdAotICAgc2VsZWN0LnJzdAogCiAKIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnQgbW9kdWxlcyBmb3Igc29tZSBvZiB0aGUgYWJvdmUgc2VydmljZXM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdAppbmRleCBjMmY5MmIzLi45MzUzOGU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKQEAgLTE2NCw2ICsxNjQsOSBAQAogYWxsb3dzIGl0IHRvIHNpZGUtc3RlcCB0aGUgOnRlcm06YEdsb2JhbCBJbnRlcnByZXRlciBMb2NrYCBidXQgYWxzbyBtZWFucyB0aGF0CiBvbmx5IHBpY2tsYWJsZSBvYmplY3RzIGNhbiBiZSBleGVjdXRlZCBhbmQgcmV0dXJuZWQuCiAKK1RoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIG11c3QgYmUgaW1wb3J0YWJsZSBieSB3b3JrZXIgc3VicHJvY2Vzc2VzLiBUaGlzIG1lYW5zCit0aGF0IDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCBub3Qgd29yayBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisKIENhbGxpbmcgOmNsYXNzOmBFeGVjdXRvcmAgb3IgOmNsYXNzOmBGdXR1cmVgIG1ldGhvZHMgZnJvbSBhIGNhbGxhYmxlIHN1Ym1pdHRlZAogdG8gYSA6Y2xhc3M6YFByb2Nlc3NQb29sRXhlY3V0b3JgIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CmluZGV4IGZiYTQ4ZjQuLjgyZWZkMGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CkBAIC05NSw2ICs5NSw4MyBAQAogICAgYGBwYWdlLmNsb3NlKClgYCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSA6a2V5d29yZDpgd2l0aGAgYmxvY2sgaXMgZXhpdGVkLgogCiAKKy4uIGZ1bmN0aW9uOjogc3VwcHJlc3MoKmV4Y2VwdGlvbnMpCisKKyAgIFJldHVybiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHN1cHByZXNzZXMgYW55IG9mIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9ucworICAgaWYgdGhleSBvY2N1ciBpbiB0aGUgYm9keSBvZiBhIHdpdGggc3RhdGVtZW50IGFuZCB0aGVuIHJlc3VtZXMgZXhlY3V0aW9uCisgICB3aXRoIHRoZSBmaXJzdCBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIHdpdGggc3RhdGVtZW50LgorCisgICBBcyB3aXRoIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBjb21wbGV0ZWx5IHN1cHByZXNzZXMgZXhjZXB0aW9ucywgdGhpcworICAgY29udGV4dCBtYW5hZ2VyIHNob3VsZCBiZSB1c2VkIG9ubHkgdG8gY292ZXIgdmVyeSBzcGVjaWZpYyBlcnJvcnMgd2hlcmUKKyAgIHNpbGVudGx5IGNvbnRpbnVpbmcgd2l0aCBwcm9ncmFtIGV4ZWN1dGlvbiBpcyBrbm93biB0byBiZSB0aGUgcmlnaHQKKyAgIHRoaW5nIHRvIGRvLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgICBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IHN1cHByZXNzCisKKyAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lZmlsZS50bXAnKQorCisgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZW90aGVyZmlsZS50bXAnKQorCisgICBUaGlzIGNvZGUgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZWZpbGUudG1wJykKKyAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgICAgIHRyeToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lb3RoZXJmaWxlLnRtcCcpCisgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICBwYXNzCisKKyAgIFRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIDpyZWY6YHJlZW50cmFudCA8cmVlbnRyYW50LWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHJlZGlyZWN0X3N0ZG91dChuZXdfdGFyZ2V0KQorCisgICBDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIDpkYXRhOmBzeXMuc3Rkb3V0YCB0bworICAgYW5vdGhlciBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3QuCisKKyAgIFRoaXMgdG9vbCBhZGRzIGZsZXhpYmlsaXR5IHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBvciBjbGFzc2VzIHdob3NlIG91dHB1dAorICAgaXMgaGFyZHdpcmVkIHRvIHN0ZG91dC4KKworICAgRm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQgb2YgOmZ1bmM6YGhlbHBgIG5vcm1hbGx5IGlzIHNlbnQgdG8gKnN5cy5zdGRvdXQqLgorICAgWW91IGNhbiBjYXB0dXJlIHRoYXQgb3V0cHV0IGluIGEgc3RyaW5nIGJ5IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8gYQorICAgOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0OjoKKworICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIGhlbHAocG93KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gYSBmaWxlIG9uIGRpc2ssIHJlZGlyZWN0IHRoZSBvdXRwdXQKKyAgIHRvIGEgcmVndWxhciBmaWxlOjoKKworICAgICAgICB3aXRoIG9wZW4oJ2hlbHAudHh0JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gKnN5cy5zdGRlcnIqOjoKKworICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAocG93KQorCisgICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzaWRlIGVmZmVjdCBvbiA6ZGF0YTpgc3lzLnN0ZG91dGAgbWVhbnMgdGhhdCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIGFuZCBtb3N0IHRocmVhZGVkCisgICBhcHBsaWNhdGlvbnMuIEl0IGFsc28gaGFzIG5vIGVmZmVjdCBvbiB0aGUgb3V0cHV0IG9mIHN1YnByb2Nlc3Nlcy4KKyAgIEhvd2V2ZXIsIGl0IGlzIHN0aWxsIGEgdXNlZnVsIGFwcHJvYWNoIGZvciBtYW55IHV0aWxpdHkgc2NyaXB0cy4KKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmV1c2FibGUgYnV0IG5vdCByZWVudHJhbnQgPHJldXNhYmxlLWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbGFzczo6IENvbnRleHREZWNvcmF0b3IoKQogCiAgICBBIGJhc2UgY2xhc3MgdGhhdCBlbmFibGVzIGEgY29udGV4dCBtYW5hZ2VyIHRvIGFsc28gYmUgdXNlZCBhcyBhIGRlY29yYXRvci4KQEAgLTUyMCwzICs1OTcsMTUzIEBACiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uIDprZXl3b3JkOmB3aXRoYAogICAgICAgc3RhdGVtZW50LgogCisuLiBfc2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtczoKKworU2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBjb250ZXh0IG1hbmFnZXJzIGFyZSB3cml0dGVuIGluIGEgd2F5IHRoYXQgbWVhbnMgdGhleSBjYW4gb25seSBiZQordXNlZCBlZmZlY3RpdmVseSBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgb25jZS4gVGhlc2Ugc2luZ2xlIHVzZQorY29udGV4dCBtYW5hZ2VycyBtdXN0IGJlIGNyZWF0ZWQgYWZyZXNoIGVhY2ggdGltZSB0aGV5J3JlIHVzZWQgLQorYXR0ZW1wdGluZyB0byB1c2UgdGhlbSBhIHNlY29uZCB0aW1lIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24gb3IKK290aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkuCisKK1RoaXMgY29tbW9uIGxpbWl0YXRpb24gbWVhbnMgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYWR2aXNhYmxlIHRvIGNyZWF0ZQorY29udGV4dCBtYW5hZ2VycyBkaXJlY3RseSBpbiB0aGUgaGVhZGVyIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50Cit3aGVyZSB0aGV5IGFyZSB1c2VkIChhcyBzaG93biBpbiBhbGwgb2YgdGhlIHVzYWdlIGV4YW1wbGVzIGFib3ZlKS4KKworRmlsZXMgYXJlIGFuIGV4YW1wbGUgb2YgZWZmZWN0aXZlbHkgc2luZ2xlIHVzZSBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZQordGhlIGZpcnN0IDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2lsbCBjbG9zZSB0aGUgZmlsZSwgcHJldmVudGluZyBhbnkKK2Z1cnRoZXIgSU8gb3BlcmF0aW9ucyB1c2luZyB0aGF0IGZpbGUgb2JqZWN0LgorCitDb250ZXh0IG1hbmFnZXJzIGNyZWF0ZWQgdXNpbmcgOmZ1bmM6YGNvbnRleHRtYW5hZ2VyYCBhcmUgYWxzbyBzaW5nbGUgdXNlCitjb250ZXh0IG1hbmFnZXJzLCBhbmQgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZmFpbGluZwordG8geWllbGQgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSB0aGVtIGEgc2Vjb25kIHRpbWU6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKyAgICA+Pj4gQGNvbnRleHRtYW5hZ2VyCisgICAgLi4uIGRlZiBzaW5nbGV1c2UoKToKKyAgICAuLi4gICAgIHByaW50KCJCZWZvcmUiKQorICAgIC4uLiAgICAgeWllbGQKKyAgICAuLi4gICAgIHByaW50KCJBZnRlciIpCisgICAgLi4uCisgICAgPj4+IGNtID0gc2luZ2xldXNlKCkKKyAgICA+Pj4gd2l0aCBjbToKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICBCZWZvcmUKKyAgICBBZnRlcgorICAgID4+PiB3aXRoIGNtOgorICAgIC4uLiAgICBwYXNzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICBSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBkaWRuJ3QgeWllbGQKKworCisuLiBfcmVlbnRyYW50LWNtczoKKworUmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vcmUgc29waGlzdGljYXRlZCBjb250ZXh0IG1hbmFnZXJzIG1heSBiZSAicmVlbnRyYW50Ii4gVGhlc2UgY29udGV4dAorbWFuYWdlcnMgY2FuIG5vdCBvbmx5IGJlIHVzZWQgaW4gbXVsdGlwbGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudHMsCitidXQgbWF5IGFsc28gYmUgdXNlZCAqaW5zaWRlKiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdGhhdCBpcyBhbHJlYWR5Cit1c2luZyB0aGUgc2FtZSBjb250ZXh0IG1hbmFnZXIuCisKKzpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYCBpcyBhbiBleGFtcGxlIG9mIGEgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlciwgYXMgYXJlCis6ZnVuYzpgc3VwcHJlc3NgIGFuZCA6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YC4gSGVyZSdzIGEgdmVyeSBzaW1wbGUgZXhhbXBsZSBvZgorcmVlbnRyYW50IHVzZTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXQKKyAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gc3RyZWFtID0gU3RyaW5nSU8oKQorICAgID4+PiB3cml0ZV90b19zdHJlYW0gPSByZWRpcmVjdF9zdGRvdXQoc3RyZWFtKQorICAgID4+PiB3aXRoIHdyaXRlX3RvX3N0cmVhbToKKyAgICAuLi4gICAgIHByaW50KCJUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQiKQorICAgIC4uLiAgICAgd2l0aCB3cml0ZV90b19zdHJlYW06CisgICAgLi4uICAgICAgICAgcHJpbnQoIlRoaXMgaXMgYWxzbyB3cml0dGVuIHRvIHRoZSBzdHJlYW0iKQorICAgIC4uLgorICAgID4+PiBwcmludCgiVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dCIpCisgICAgVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dAorICAgID4+PiBwcmludChzdHJlYW0uZ2V0dmFsdWUoKSkKKyAgICBUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQKKyAgICBUaGlzIGlzIGFsc28gd3JpdHRlbiB0byB0aGUgc3RyZWFtCisKK1JlYWwgd29ybGQgZXhhbXBsZXMgb2YgcmVlbnRyYW5jeSBhcmUgbW9yZSBsaWtlbHkgdG8gaW52b2x2ZSBtdWx0aXBsZQorZnVuY3Rpb25zIGNhbGxpbmcgZWFjaCBvdGhlciBhbmQgaGVuY2UgYmUgZmFyIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGlzCitleGFtcGxlLgorCitOb3RlIGFsc28gdGhhdCBiZWluZyByZWVudHJhbnQgaXMgKm5vdCogdGhlIHNhbWUgdGhpbmcgYXMgYmVpbmcgdGhyZWFkIHNhZmUuCis6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YCwgZm9yIGV4YW1wbGUsIGlzIGRlZmluaXRlbHkgbm90IHRocmVhZCBzYWZlLCBhcyBpdAorbWFrZXMgYSBnbG9iYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBzeXN0ZW0gc3RhdGUgYnkgYmluZGluZyA6ZGF0YTpgc3lzLnN0ZG91dGAKK3RvIGEgZGlmZmVyZW50IHN0cmVhbS4KKworCisuLiBfcmV1c2FibGUtY21zOgorCitSZXVzYWJsZSBjb250ZXh0IG1hbmFnZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0Rpc3RpbmN0IGZyb20gYm90aCBzaW5nbGUgdXNlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgInJldXNhYmxlIgorY29udGV4dCBtYW5hZ2VycyAob3IsIHRvIGJlIGNvbXBsZXRlbHkgZXhwbGljaXQsICJyZXVzYWJsZSwgYnV0IG5vdAorcmVlbnRyYW50IiBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZSByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgYWxzbworcmV1c2FibGUpLiBUaGVzZSBjb250ZXh0IG1hbmFnZXJzIHN1cHBvcnQgYmVpbmcgdXNlZCBtdWx0aXBsZSB0aW1lcywgYnV0Cit3aWxsIGZhaWwgKG9yIG90aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkpIGlmIHRoZSBzcGVjaWZpYyBjb250ZXh0IG1hbmFnZXIKK2luc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiBhIGNvbnRhaW5pbmcgd2l0aCBzdGF0ZW1lbnQuCisKKzpjbGFzczpgdGhyZWFkaW5nLkxvY2tgIGlzIGFuIGV4YW1wbGUgb2YgYSByZXVzYWJsZSwgYnV0IG5vdCByZWVudHJhbnQsCitjb250ZXh0IG1hbmFnZXIgKGZvciBhIHJlZW50cmFudCBsb2NrLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlCis6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AgaW5zdGVhZCkuCisKK0Fub3RoZXIgZXhhbXBsZSBvZiBhIHJldXNhYmxlLCBidXQgbm90IHJlZW50cmFudCwgY29udGV4dCBtYW5hZ2VyIGlzCis6Y2xhc3M6YEV4aXRTdGFja2AsIGFzIGl0IGludm9rZXMgKmFsbCogY3VycmVudGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzCit3aGVuIGxlYXZpbmcgYW55IHdpdGggc3RhdGVtZW50LCByZWdhcmRsZXNzIG9mIHdoZXJlIHRob3NlIGNhbGxiYWNrcword2VyZSBhZGRlZDo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKKyAgICA+Pj4gc3RhY2sgPSBFeGl0U3RhY2soKQorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBmaXJzdCBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIGZpcnN0IGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgZmlyc3QgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGZpcnN0IGNvbnRleHQKKyAgICA+Pj4gd2l0aCBzdGFjazoKKyAgICAuLi4gICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgc2Vjb25kIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBzZWNvbmQgY29udGV4dAorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0IikKKyAgICAuLi4gICAgIHdpdGggc3RhY2s6CisgICAgLi4uICAgICAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgICAgICBwcmludCgiTGVhdmluZyBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIG91dGVyIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgaW5uZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0CisgICAgTGVhdmluZyBvdXRlciBjb250ZXh0CisKK0FzIHRoZSBvdXRwdXQgZnJvbSB0aGUgZXhhbXBsZSBzaG93cywgcmV1c2luZyBhIHNpbmdsZSBzdGFjayBvYmplY3QgYWNyb3NzCittdWx0aXBsZSB3aXRoIHN0YXRlbWVudHMgd29ya3MgY29ycmVjdGx5LCBidXQgYXR0ZW1wdGluZyB0byBuZXN0IHRoZW0KK3dpbGwgY2F1c2UgdGhlIHN0YWNrIHRvIGJlIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5uZXJtb3N0IHdpdGgKK3N0YXRlbWVudCwgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgZGVzaXJhYmxlIGJlaGF2aW91ci4KKworVXNpbmcgc2VwYXJhdGUgOmNsYXNzOmBFeGl0U3RhY2tgIGluc3RhbmNlcyBpbnN0ZWFkIG9mIHJldXNpbmcgYSBzaW5nbGUKK2luc3RhbmNlIGF2b2lkcyB0aGF0IHByb2JsZW06OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgRXhpdFN0YWNrCisgICAgPj4+IHdpdGggRXhpdFN0YWNrKCkgYXMgb3V0ZXJfc3RhY2s6CisgICAgLi4uICAgICBvdXRlcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgd2l0aCBFeGl0U3RhY2soKSBhcyBpbm5lcl9zdGFjazoKKyAgICAuLi4gICAgICAgICBpbm5lcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgICAgIHByaW50KCJMZWF2aW5nIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgb3V0ZXIgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBpbm5lciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dAorICAgIExlYXZpbmcgb3V0ZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CmluZGV4IGQwMzgyZTAuLjQ4YWYwODIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdApAQCAtMzAsMyArMzAsNCBAQAogICAgY29weS5yc3QKICAgIHBwcmludC5yc3QKICAgIHJlcHJsaWIucnN0CisgICBlbnVtLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0IGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CmluZGV4IDA2NWU4NTAuLmU0ZjFlYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKQEAgLTE3MCwxMCArMTcwLDEyIEBACiAgICAqIGBgMCA8PSBzZWNvbmRzIDwgMzYwMCoyNGBgICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gb25lIGRheSkKICAgICogYGAtOTk5OTk5OTk5IDw9IGRheXMgPD0gOTk5OTk5OTk5YGAKIAotICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywgdGhlIGZyYWN0aW9uYWwKLSAgIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZSBjb21iaW5lZCBhbmQgdGhlaXIgc3VtIGlzIHJvdW5kZWQKLSAgIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kLiAgSWYgbm8gYXJndW1lbnQgaXMgYSBmbG9hdCwgdGhlIGNvbnZlcnNpb24gYW5kCi0gICBub3JtYWxpemF0aW9uIHByb2Nlc3NlcyBhcmUgZXhhY3QgKG5vIGluZm9ybWF0aW9uIGlzIGxvc3QpLgorICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywKKyAgIHRoZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZQorICAgY29tYmluZWQgYW5kIHRoZWlyIHN1bSBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kIHVzaW5nCisgICByb3VuZC1oYWxmLXRvLWV2ZW4gdGllYnJlYWtlci4gIElmIG5vIGFyZ3VtZW50IGlzIGEgZmxvYXQsIHRoZQorICAgY29udmVyc2lvbiBhbmQgbm9ybWFsaXphdGlvbiBwcm9jZXNzZXMgYXJlIGV4YWN0IChubyBpbmZvcm1hdGlvbiBpcworICAgbG9zdCkuCiAKICAgIElmIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIGRheXMgbGllcyBvdXRzaWRlIHRoZSBpbmRpY2F0ZWQgcmFuZ2UsCiAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpcyByYWlzZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYm0ucnN0IGIvRG9jL2xpYnJhcnkvZGJtLnJzdAppbmRleCA4MWEwNWM3Li5mNTQ5NmQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kYm0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RibS5yc3QKQEAgLTczLDMzICs3MywzOSBAQAogc3RyaW5ncyBhcmUgdXNlZCB0aGV5IGFyZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byB0aGUgZGVmYXVsdCBlbmNvZGluZyBiZWZvcmUKIGJlaW5nIHN0b3JlZC4KIAorVGhlc2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgYmVpbmcgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHdoaWNoCit3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlbSB3aGVuIGRvbmUuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBZGRlZCBuYXRpdmUgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0byB0aGUgb2JqZWN0cworICAgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYC4KKwogVGhlIGZvbGxvd2luZyBleGFtcGxlIHJlY29yZHMgc29tZSBob3N0bmFtZXMgYW5kIGEgY29ycmVzcG9uZGluZyB0aXRsZSwgIGFuZAogdGhlbiBwcmludHMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2U6OgogCiAgICBpbXBvcnQgZGJtCiAKICAgICMgT3BlbiBkYXRhYmFzZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LgotICAgZGIgPSBkYm0ub3BlbignY2FjaGUnLCAnYycpCisgICB3aXRoIGRibS5vcGVuKCdjYWNoZScsICdjJykgYXMgZGI6CiAKLSAgICMgUmVjb3JkIHNvbWUgdmFsdWVzCi0gICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJwotICAgZGJbJ3d3dy5weXRob24ub3JnJ10gPSAnUHl0aG9uIFdlYnNpdGUnCi0gICBkYlsnd3d3LmNubi5jb20nXSA9ICdDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBSZWNvcmQgc29tZSB2YWx1ZXMKKyAgICAgICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJworICAgICAgIGRiWyd3d3cucHl0aG9uLm9yZyddID0gJ1B5dGhvbiBXZWJzaXRlJworICAgICAgIGRiWyd3d3cuY25uLmNvbSddID0gJ0NhYmxlIE5ld3MgTmV0d29yaycKIAotICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgotICAgYXNzZXJ0IGRiW2Ind3d3LnB5dGhvbi5vcmcnXSA9PSBiJ1B5dGhvbiBXZWJzaXRlJwotICAgIyBOb3RpY2UgaG93IHRoZSB2YWx1ZSBpcyBub3cgaW4gYnl0ZXMuCi0gICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgorICAgICAgIGFzc2VydCBkYltiJ3d3dy5weXRob24ub3JnJ10gPT0gYidQeXRob24gV2Vic2l0ZScKKyAgICAgICAjIE5vdGljZSBob3cgdGhlIHZhbHVlIGlzIG5vdyBpbiBieXRlcy4KKyAgICAgICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCiAKLSAgICMgT2Z0ZW4tdXNlZCBtZXRob2RzIG9mIHRoZSBkaWN0IGludGVyZmFjZSB3b3JrIHRvby4KLSAgIHByaW50KGRiLmdldCgncHl0aG9uLm9yZycsIGInbm90IHByZXNlbnQnKSkKKyAgICAgICAjIE9mdGVuLXVzZWQgbWV0aG9kcyBvZiB0aGUgZGljdCBpbnRlcmZhY2Ugd29yayB0b28uCisgICAgICAgcHJpbnQoZGIuZ2V0KCdweXRob24ub3JnJywgYidub3QgcHJlc2VudCcpKQogCi0gICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAotICAgIyBsaWtlbHkgYSBUeXBlRXJyb3IpLgotICAgZGJbJ3d3dy55YWhvby5jb20nXSA9IDQKKyAgICAgICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAorICAgICAgICMgbGlrZWx5IGEgVHlwZUVycm9yKS4KKyAgICAgICBkYlsnd3d3LnlhaG9vLmNvbSddID0gNAogCi0gICAjIENsb3NlIHdoZW4gZG9uZS4KLSAgIGRiLmNsb3NlKCkKKyAgICMgZGIgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgd2hlbiBsZWF2aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RlYnVnLnJzdCBiL0RvYy9saWJyYXJ5L2RlYnVnLnJzdAppbmRleCBjNjlmYjFjLi44OGEyZmE2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGVidWcucnN0CkBAIC0xNSwzICsxNSw0IEBACiAgICBwcm9maWxlLnJzdAogICAgdGltZWl0LnJzdAogICAgdHJhY2UucnN0CisgICB0cmFjZW1hbGxvYy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdCBiL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdAppbmRleCAyMzY4NzY5Li4wNmU3MDQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CkBAIC0yMyw0ICsyMywzIEBACiAgICB1bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAogICAgMnRvMy5yc3QKICAgIHRlc3QucnN0Ci0gICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzLnJzdCBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKaW5kZXggZWM3MTEyZC4uNzU5NjIyOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaXMucnN0CkBAIC0yNiw3ICsyNiw4IEBACiAgICBkZWYgbXlmdW5jKGFsaXN0KToKICAgICAgICByZXR1cm4gbGVuKGFsaXN0KQogCi10aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBkaXNhc3NlbWJseSBvZiA6ZnVuYzpgbXlmdW5jYDo6Cit0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGlzYXNzZW1ibHkgb2YKKzpmdW5jOmBteWZ1bmNgOjoKIAogICAgPj4+IGRpcy5kaXMobXlmdW5jKQogICAgICAyICAgICAgICAgICAwIExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChsZW4pCkBAIC0zNiw4ICszNyw3NSBAQAogCiAoVGhlICIyIiBpcyBhIGxpbmUgbnVtYmVyKS4KIAotVGhlIDptb2Q6YGRpc2AgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50czoKK0J5dGVjb2RlIGFuYWx5c2lzCistLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgYnl0ZWNvZGUgYW5hbHlzaXMgQVBJIGFsbG93cyBwaWVjZXMgb2YgUHl0aG9uIGNvZGUgdG8gYmUgd3JhcHBlZCBpbiBhCis6Y2xhc3M6YEJ5dGVjb2RlYCBvYmplY3QgdGhhdCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byBkZXRhaWxzIG9mIHRoZQorY29tcGlsZWQgY29kZS4KKworLi4gY2xhc3M6OiBCeXRlY29kZSh4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpCisKKyAgIEFuYWx5c2UgdGhlIGJ5dGVjb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2YKKyAgIHNvdXJjZSBjb2RlLCBvciBhIGNvZGUgb2JqZWN0IChhcyByZXR1cm5lZCBieSA6ZnVuYzpgY29tcGlsZWApLgorCisgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgbWFueSBvZiB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdywKKyAgIG1vc3Qgbm90YWJseSA6ZnVuYzpgZ2V0X2luc3RydWN0aW9uc2AsIGFzIGl0ZXJhdGluZyBvdmVyIGEKKyAgIDpjbGFzczpgQnl0ZWNvZGVgIGluc3RhbmNlIHlpZWxkcyB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyBhcworICAgOmNsYXNzOmBJbnN0cnVjdGlvbmAgaW5zdGFuY2VzLgorCisgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgIGJlIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLgorICAgT3RoZXJ3aXNlLCB0aGUgc291cmNlIGxpbmUgaW5mb3JtYXRpb24gKGlmIGFueSkgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbQorICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKworICAgSWYgKmN1cnJlbnRfb2Zmc2V0KiBpcyBub3QgTm9uZSwgaXQgcmVmZXJzIHRvIGFuIGluc3RydWN0aW9uIG9mZnNldAorICAgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLiBTZXR0aW5nIHRoaXMgbWVhbnMgOm1ldGg6YGRpc2Agd2lsbCBkaXNwbGF5CisgICBhICJjdXJyZW50IGluc3RydWN0aW9uIiBtYXJrZXIgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIG9wY29kZS4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBmcm9tX3RyYWNlYmFjayh0YikKKworICAgICAgQ29uc3RydWN0IGEgOmNsYXNzOmBCeXRlY29kZWAgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrLAorICAgICAgc2V0dGluZyAqY3VycmVudF9vZmZzZXQqIHRvIHRoZSBpbnN0cnVjdGlvbiByZXNwb25zaWJsZSBmb3IgdGhlCisgICAgICBleGNlcHRpb24uCisKKyAgIC4uIGRhdGE6OiBjb2Rlb2JqCisKKyAgICAgIFRoZSBjb21waWxlZCBjb2RlIG9iamVjdC4KKworICAgLi4gZGF0YTo6IGZpcnN0X2xpbmUKKworICAgICAgVGhlIGZpcnN0IHNvdXJjZSBsaW5lIG9mIHRoZSBjb2RlIG9iamVjdCAoaWYgYXZhaWxhYmxlKQorCisgICAuLiBtZXRob2Q6OiBkaXMoKQorCisgICAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgdmlldyBvZiB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyAodGhlIHNhbWUgYXMKKyAgICAgIHByaW50ZWQgYnkgOmZ1bmM6YGRpc2AsIGJ1dCByZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nKS4KKworICAgLi4gbWV0aG9kOjogaW5mbygpCisKKyAgICAgIFJldHVybiBhIGZvcm1hdHRlZCBtdWx0aS1saW5lIHN0cmluZyB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgY29kZSBvYmplY3QsIGxpa2UgOmZ1bmM6YGNvZGVfaW5mb2AuCisKK0V4YW1wbGU6OgorCisgICAgPj4+IGJ5dGVjb2RlID0gZGlzLkJ5dGVjb2RlKG15ZnVuYykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIC4uLgorICAgIExPQURfR0xPQkFMCisgICAgTE9BRF9GQVNUCisgICAgQ0FMTF9GVU5DVElPTgorICAgIFJFVFVSTl9WQUxVRQorCisKK0FuYWx5c2lzIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBhbHNvIGRlZmluZXMgdGhlIGZvbGxvd2luZyBhbmFseXNpcyBmdW5jdGlvbnMgdGhhdAorY29udmVydCB0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGRlc2lyZWQgb3V0cHV0LiBUaGV5IGNhbiBiZSB1c2VmdWwgaWYKK29ubHkgYSBzaW5nbGUgb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCwgc28gdGhlIGludGVybWVkaWF0ZSBhbmFseXNpcworb2JqZWN0IGlzbid0IHVzZWZ1bDoKIAogLi4gZnVuY3Rpb246OiBjb2RlX2luZm8oeCkKIApAQCAtNTEsMTcgKzExOSwyMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gZnVuY3Rpb246OiBzaG93X2NvZGUoeCkKKy4uIGZ1bmN0aW9uOjogc2hvd19jb2RlKHgsICosIGZpbGU9Tm9uZSkKIAogICAgUHJpbnQgZGV0YWlsZWQgY29kZSBvYmplY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAotICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0IHRvIHN0ZG91dC4KKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdCB0byAqZmlsZSogKG9yIGBgc3lzLnN0ZG91dGBgIGlmICpmaWxlKgorICAgaXMgbm90IHNwZWNpZmllZCkuCiAKLSAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCkpYGAsIGludGVuZGVkIGZvcgotICAgaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gYXQgdGhlIGludGVycHJldGVyIHByb21wdC4KKyAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCksIGZpbGU9ZmlsZSlgYCwKKyAgIGludGVuZGVkIGZvciBpbnRlcmFjdGl2ZSBleHBsb3JhdGlvbiBhdCB0aGUgaW50ZXJwcmV0ZXIgcHJvbXB0LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotLi4gZnVuY3Rpb246OiBkaXMoeD1Ob25lKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIGBgZmlsZWBgIHBhcmFtZXRlcgorCisKKy4uIGZ1bmN0aW9uOjogZGlzKHg9Tm9uZSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSB0aGUgKngqIG9iamVjdC4gICp4KiBjYW4gZGVub3RlIGVpdGhlciBhIG1vZHVsZSwgYSBjbGFzcywgYQogICAgbWV0aG9kLCBhIGZ1bmN0aW9uLCBhIGNvZGUgb2JqZWN0LCBhIHN0cmluZyBvZiBzb3VyY2UgY29kZSBvciBhIGJ5dGUgc2VxdWVuY2UKQEAgLTcyLDE2ICsxNDUsMjggQEAKICAgIGRpc2Fzc2VtYmxlZC4gIElmIG5vIG9iamVjdCBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBkaXNhc3NlbWJsZXMgdGhlIGxhc3QKICAgIHRyYWNlYmFjay4KIAorICAgVGhlIGRpc2Fzc2VtYmx5IGlzIHdyaXR0ZW4gYXMgdGV4dCB0byB0aGUgc3VwcGxpZWQgYGBmaWxlYGAgYXJndW1lbnQgaWYKKyAgIHByb3ZpZGVkIGFuZCB0byBgYHN5cy5zdGRvdXRgYCBvdGhlcndpc2UuCiAKLS4uIGZ1bmN0aW9uOjogZGlzdGIodGI9Tm9uZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgdGhlIHRvcC1vZi1zdGFjayBmdW5jdGlvbiBvZiBhIHRyYWNlYmFjaywgdXNpbmcgdGhlIGxhc3QKICAgIHRyYWNlYmFjayBpZiBub25lIHdhcyBwYXNzZWQuICBUaGUgaW5zdHJ1Y3Rpb24gY2F1c2luZyB0aGUgZXhjZXB0aW9uIGlzCiAgICBpbmRpY2F0ZWQuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgogCi0uLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xKQotICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCisgICAgICAgICAgICAgIGRpc2NvKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIGEgY29kZSBvYmplY3QsIGluZGljYXRpbmcgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaWYgKmxhc3RpKiB3YXMKICAgIHByb3ZpZGVkLiAgVGhlIG91dHB1dCBpcyBkaXZpZGVkIGluIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKQEAgLTk3LDYgKzE4MiwyOCBAQAogICAgVGhlIHBhcmFtZXRlciBpbnRlcnByZXRhdGlvbiByZWNvZ25pemVzIGxvY2FsIGFuZCBnbG9iYWwgdmFyaWFibGUgbmFtZXMsCiAgICBjb25zdGFudCB2YWx1ZXMsIGJyYW5jaCB0YXJnZXRzLCBhbmQgY29tcGFyZSBvcGVyYXRvcnMuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBnZXRfaW5zdHJ1Y3Rpb25zKHgsICosIGZpcnN0X2xpbmU9Tm9uZSkKKworICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24sIG1ldGhvZCwKKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdC4KKworICAgVGhlIGl0ZXJhdG9yIGdlbmVyYXRlcyBhIHNlcmllcyBvZiA6Y2xhc3M6YEluc3RydWN0aW9uYCBuYW1lZCB0dXBsZXMKKyAgIGdpdmluZyB0aGUgZGV0YWlscyBvZiBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgSWYgKmZpcnN0X2xpbmUqIGlzIG5vdCBOb25lLCBpdCBpbmRpY2F0ZXMgdGhlIGxpbmUgbnVtYmVyIHRoYXQgc2hvdWxkCisgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgIHRoZSBkaXNhc3NlbWJsZWQgY29kZSBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZmluZGxpbmVzdGFydHMoY29kZSkKIApAQCAtMTExLDYxICsyMTgsNjcgQEAKICAgIHJldHVybiBhIGxpc3Qgb2YgdGhlc2Ugb2Zmc2V0cy4KIAogCi0uLiBkYXRhOjogb3BuYW1lCisuLiBmdW5jdGlvbjo6IHN0YWNrX2VmZmVjdChvcGNvZGUsIFtvcGFyZ10pCiAKLSAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKyAgIENvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiAqb3Bjb2RlKiB3aXRoIGFyZ3VtZW50ICpvcGFyZyouCiAKLQotLi4gZGF0YTo6IG9wbWFwCi0KLSAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgotCi0KLS4uIGRhdGE6OiBjbXBfb3AKLQotICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgotCi0KLS4uIGRhdGE6OiBoYXNjb25zdAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgotCi0KLS4uIGRhdGE6OiBoYXNmcmVlCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUuCi0KLQotLi4gZGF0YTo6IGhhc25hbWUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLgotCi0KLS4uIGRhdGE6OiBoYXNqcmVsCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSByZWxhdGl2ZSBqdW1wIHRhcmdldC4KLQotCi0uLiBkYXRhOjogaGFzamFicwotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGFuIGFic29sdXRlIGp1bXAgdGFyZ2V0LgotCi0KLS4uIGRhdGE6OiBoYXNsb2NhbAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBsb2NhbCB2YXJpYWJsZS4KLQotCi0uLiBkYXRhOjogaGFzY29tcGFyZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgb2YgQm9vbGVhbiBvcGVyYXRpb25zLgotCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gX2J5dGVjb2RlczoKIAogUHl0aG9uIEJ5dGVjb2RlIEluc3RydWN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgOmZ1bmM6YGdldF9pbnN0cnVjdGlvbnNgIGZ1bmN0aW9uIGFuZCA6Y2xhc3M6YEJ5dGVjb2RlYCBjbGFzcyBwcm92aWRlCitkZXRhaWxzIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBhcyA6Y2xhc3M6YEluc3RydWN0aW9uYCBpbnN0YW5jZXM6CisKKy4uIGNsYXNzOjogSW5zdHJ1Y3Rpb24KKworICAgRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgLi4gZGF0YTo6IG9wY29kZQorCisgICAgICBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbiwgY29ycmVzcG9uZGluZyB0byB0aGUgb3Bjb2RlIHZhbHVlcyBsaXN0ZWQKKyAgICAgIGJlbG93IGFuZCB0aGUgYnl0ZWNvZGUgdmFsdWVzIGluIHRoZSA6cmVmOmBvcGNvZGVfY29sbGVjdGlvbnNgLgorCisKKyAgIC4uIGRhdGE6OiBvcG5hbWUKKworICAgICAgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisKKworICAgLi4gZGF0YTo6IGFyZworCisgICAgICBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKworCisgICAuLiBkYXRhOjogYXJndmFsCisKKyAgICAgIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKworCisgICAuLiBkYXRhOjogYXJncmVwcgorCisgICAgICBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKworCisgICAuLiBkYXRhOjogb2Zmc2V0CisKKyAgICAgIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKworCisgICAuLiBkYXRhOjogc3RhcnRzX2xpbmUKKworICAgICAgbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorCisKKyAgIC4uIGRhdGE6OiBpc19qdW1wX3RhcmdldAorCisgICAgICBUcnVlIGlmIG90aGVyIGNvZGUganVtcHMgdG8gaGVyZSwgb3RoZXJ3aXNlIEZhbHNlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBQeXRob24gY29tcGlsZXIgY3VycmVudGx5IGdlbmVyYXRlcyB0aGUgZm9sbG93aW5nIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KIAogCkBAIC01MDYsMTIgKzYxOSw2IEBACiAgICAuLiBYWFggZXhwbGFpbiB0aGUgV0hZIHN0dWZmIQogCiAKLS4uIG9wY29kZTo6IFNUT1JFX0xPQ0FMUwotCi0gICBQb3BzIFRPUyBmcm9tIHRoZSBzdGFjayBhbmQgc3RvcmVzIGl0IGFzIHRoZSBjdXJyZW50IGZyYW1lJ3MgYGBmX2xvY2Fsc2BgLgotICAgVGhpcyBpcyB1c2VkIGluIGNsYXNzIGNvbnN0cnVjdGlvbi4KLQotCiBBbGwgb2YgdGhlIGZvbGxvd2luZyBvcGNvZGVzIGV4cGVjdCBhcmd1bWVudHMuICBBbiBhcmd1bWVudCBpcyB0d28gYnl0ZXMsIHdpdGgKIHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgbGFzdC4KIApAQCAtNzIyLDYgKzgyOSwxMyBAQAogICAgUHVzaGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhlIGNlbGwgY29udGFpbnMgb24gdGhlIHN0YWNrLgogCiAKKy4uIG9wY29kZTo6IExPQURfQ0xBU1NERVJFRiAoaSkKKworICAgTXVjaCBsaWtlIDpvcGNvZGU6YExPQURfREVSRUZgIGJ1dCBmaXJzdCBjaGVja3MgdGhlIGxvY2FscyBkaWN0aW9uYXJ5IGJlZm9yZQorICAgY29uc3VsdGluZyB0aGUgY2VsbC4gIFRoaXMgaXMgdXNlZCBmb3IgbG9hZGluZyBmcmVlIHZhcmlhYmxlcyBpbiBjbGFzcworICAgYm9kaWVzLgorCisKIC4uIG9wY29kZTo6IFNUT1JFX0RFUkVGIChpKQogCiAgICBTdG9yZXMgVE9TIGludG8gdGhlIGNlbGwgY29udGFpbmVkIGluIHNsb3QgKmkqIG9mIHRoZSBjZWxsIGFuZCBmcmVlIHZhcmlhYmxlCkBAIC04MjAsMyArOTM0LDYyIEBACiAgICB3aGljaCBkb24ndCB0YWtlIGFyZ3VtZW50cyBgYDwgSEFWRV9BUkdVTUVOVGBgIGFuZCB0aG9zZSB3aGljaCBkbyBgYD49CiAgICBIQVZFX0FSR1VNRU5UYGAuCiAKKy4uIF9vcGNvZGVfY29sbGVjdGlvbnM6CisKK09wY29kZSBjb2xsZWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNvbGxlY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgYXV0b21hdGljIGludHJvc3BlY3Rpb24gb2YgYnl0ZWNvZGUKK2luc3RydWN0aW9uczoKKworLi4gZGF0YTo6IG9wbmFtZQorCisgICBTZXF1ZW5jZSBvZiBvcGVyYXRpb24gbmFtZXMsIGluZGV4YWJsZSB1c2luZyB0aGUgYnl0ZWNvZGUuCisKKworLi4gZGF0YTo6IG9wbWFwCisKKyAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgorCisKKy4uIGRhdGE6OiBjbXBfb3AKKworICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgorCisKKy4uIGRhdGE6OiBoYXNjb25zdAorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgorCisKKy4uIGRhdGE6OiBoYXNmcmVlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUgKG5vdGUgdGhhdCAnZnJlZScgaW4KKyAgIHRoaXMgY29udGV4dCByZWZlcnMgdG8gbmFtZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgdGhhdCBhcmUgcmVmZXJlbmNlZCBieQorICAgaW5uZXIgc2NvcGVzIG9yIG5hbWVzIGluIG91dGVyIHNjb3BlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGZyb20gdGhpcyBzY29wZS4KKyAgIEl0IGRvZXMgKm5vdCogaW5jbHVkZSByZWZlcmVuY2VzIHRvIGdsb2JhbCBvciBidWlsdGluIHNjb3BlcykuCisKKworLi4gZGF0YTo6IGhhc25hbWUKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLgorCisKKy4uIGRhdGE6OiBoYXNqcmVsCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSByZWxhdGl2ZSBqdW1wIHRhcmdldC4KKworCisuLiBkYXRhOjogaGFzamFicworCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGFuIGFic29sdXRlIGp1bXAgdGFyZ2V0LgorCisKKy4uIGRhdGE6OiBoYXNsb2NhbAorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBsb2NhbCB2YXJpYWJsZS4KKworCisuLiBkYXRhOjogaGFzY29tcGFyZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgb2YgQm9vbGVhbiBvcGVyYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdCBiL0RvYy9saWJyYXJ5L2Rpc3RyaWJ1dGlvbi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzZjVkZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2Rpc3RyaWJ1dGlvbi5yc3QKQEAgLTAsMCArMSwxNCBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1NvZnR3YXJlIFBhY2thZ2luZyBhbmQgRGlzdHJpYnV0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGVzZSBsaWJyYXJpZXMgaGVscCB5b3Ugd2l0aCBwdWJsaXNoaW5nIGFuZCBpbnN0YWxsaW5nIFB5dGhvbiBzb2Z0d2FyZS4KK1doaWxlIHRoZXNlIG1vZHVsZXMgYXJlIGRlc2lnbmVkIHRvIHdvcmsgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKK2BQeXRob24gUGFja2FnZSBJbmRleCA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmc+YF9fLCB0aGV5IGNhbiBhbHNvIGJlIHVzZWQKK3dpdGggYSBsb2NhbCBpbmRleCBzZXJ2ZXIsIG9yIHdpdGhvdXQgYW55IGluZGV4IHNlcnZlciBhdCBhbGwuCisKKy4uIHRvY3RyZWU6OgorCisgICBkaXN0dXRpbHMucnN0CisgICBlbnN1cmVwaXAucnN0CisgICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QgYi9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdAppbmRleCAyMjJjNzE5Li4yOGRmNDljIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdApAQCAtMjc4LDYgKzI3OCwxMCBAQAogQW55IGNsYXNzZXMgZm91bmQgYXJlIHJlY3Vyc2l2ZWx5IHNlYXJjaGVkIHNpbWlsYXJseSwgdG8gdGVzdCBkb2NzdHJpbmdzIGluCiB0aGVpciBjb250YWluZWQgbWV0aG9kcyBhbmQgbmVzdGVkIGNsYXNzZXMuCiAKKy4uIGltcGwtZGV0YWlsOjoKKyAgIFByaW9yIHRvIHZlcnNpb24gMy40LCBleHRlbnNpb24gbW9kdWxlcyB3cml0dGVuIGluIEMgd2VyZSBub3QgZnVsbHkKKyAgIHNlYXJjaGVkIGJ5IGRvY3Rlc3QuCisKIAogLi4gX2RvY3Rlc3QtZmluZGluZy1leGFtcGxlczoKIApAQCAtNDk1LDcgKzQ5OSwxMCBAQAogQSBudW1iZXIgb2Ygb3B0aW9uIGZsYWdzIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mIGRvY3Rlc3QncyBiZWhhdmlvci4KIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZ3MgYXJlIHN1cHBsaWVkIGFzIG1vZHVsZSBjb25zdGFudHMsIHdoaWNoIGNhbiBiZQogb3InZWQgdG9nZXRoZXIgYW5kIHBhc3NlZCB0byB2YXJpb3VzIGZ1bmN0aW9ucy4gIFRoZSBuYW1lcyBjYW4gYWxzbyBiZSB1c2VkIGluCi06cmVmOmBkb2N0ZXN0IGRpcmVjdGl2ZXMgPGRvY3Rlc3QtZGlyZWN0aXZlcz5gLgorOnJlZjpgZG9jdGVzdCBkaXJlY3RpdmVzIDxkb2N0ZXN0LWRpcmVjdGl2ZXM+YCwgYW5kIG1heSBiZSBwYXNzZWQgdG8gdGhlCitkb2N0ZXN0IGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdmlhIHRoZSBgYC1vYGAgb3B0aW9uLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQgdGhlIGBgLW9gYCBjb21tYW5kIGxpbmUgb3B0aW9uCiAKIFRoZSBmaXJzdCBncm91cCBvZiBvcHRpb25zIGRlZmluZSB0ZXN0IHNlbWFudGljcywgY29udHJvbGxpbmcgYXNwZWN0cyBvZiBob3cKIGRvY3Rlc3QgZGVjaWRlcyB3aGV0aGVyIGFjdHVhbCBvdXRwdXQgbWF0Y2hlcyBhbiBleGFtcGxlJ3MgZXhwZWN0ZWQgb3V0cHV0OgpAQCAtNjMzLDYgKzY0MCwxOSBAQAogICAgdGhlIG91dHB1dCBpcyBzdXBwcmVzc2VkLgogCiAKKy4uIGRhdGE6OiBGQUlMX0ZBU1QKKworICAgV2hlbiBzcGVjaWZpZWQsIGV4aXQgYWZ0ZXIgdGhlIGZpcnN0IGZhaWxpbmcgZXhhbXBsZSBhbmQgZG9uJ3QgYXR0ZW1wdCB0byBydW4KKyAgIHRoZSByZW1haW5pbmcgZXhhbXBsZXMuIFRodXMsIHRoZSBudW1iZXIgb2YgZmFpbHVyZXMgcmVwb3J0ZWQgd2lsbCBiZSBhdCBtb3N0CisgICAxLiAgVGhpcyBmbGFnIG1heSBiZSB1c2VmdWwgZHVyaW5nIGRlYnVnZ2luZywgc2luY2UgZXhhbXBsZXMgYWZ0ZXIgdGhlIGZpcnN0CisgICBmYWlsdXJlIHdvbid0IGV2ZW4gcHJvZHVjZSBkZWJ1Z2dpbmcgb3V0cHV0LgorCisgICBUaGUgZG9jdGVzdCBjb21tYW5kIGxpbmUgYWNjZXB0cyB0aGUgb3B0aW9uIGBgLWZgYCBhcyBhIHNob3J0aGFuZCBmb3IgYGAtbworICAgRkFJTF9GQVNUYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGRhdGE6OiBSRVBPUlRJTkdfRkxBR1MKIAogICAgQSBiaXRtYXNrIG9yJ2luZyB0b2dldGhlciBhbGwgdGhlIHJlcG9ydGluZyBmbGFncyBhYm92ZS4KQEAgLTEyNjksOSArMTI4OSw4IEBACiAKICAgIEEgcHJvY2Vzc2luZyBjbGFzcyB1c2VkIHRvIGV4dHJhY3QgdGhlIDpjbGFzczpgRG9jVGVzdGBcIHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8KICAgIGEgZ2l2ZW4gb2JqZWN0LCBmcm9tIGl0cyBkb2NzdHJpbmcgYW5kIHRoZSBkb2NzdHJpbmdzIG9mIGl0cyBjb250YWluZWQgb2JqZWN0cy4KLSAgIDpjbGFzczpgRG9jVGVzdGBcIHMgY2FuIGN1cnJlbnRseSBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIG9iamVjdCB0eXBlczoKLSAgIG1vZHVsZXMsIGZ1bmN0aW9ucywgY2xhc3NlcywgbWV0aG9kcywgc3RhdGljbWV0aG9kcywgY2xhc3NtZXRob2RzLCBhbmQKLSAgIHByb3BlcnRpZXMuCisgICA6Y2xhc3M6YERvY1Rlc3RgXCBzIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBtb2R1bGVzLCBjbGFzc2VzLCBmdW5jdGlvbnMsCisgICBtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBjbGFzc21ldGhvZHMsIGFuZCBwcm9wZXJ0aWVzLgogCiAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKnZlcmJvc2UqIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG9iamVjdHMgc2VhcmNoZWQgYnkKICAgIHRoZSBmaW5kZXIuICBJdCBkZWZhdWx0cyB0byBgYEZhbHNlYGAgKG5vIG91dHB1dCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2MmRhMQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdApAQCAtMCwwICsxLDQyNyBAQAorOm1vZDpgZW1haWwuY29udGVudG1hbmFnZXJgOiBNYW5hZ2luZyBNSU1FIENvbnRlbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1vZHVsZTo6IGVtYWlsLmNvbnRlbnRtYW5hZ2VyCisgICA6c3lub3BzaXM6IFN0b3JpbmcgYW5kIFJldHJpZXZpbmcgQ29udGVudCBmcm9tIE1JTUUgUGFydHMKKworLi4gbW9kdWxlYXV0aG9yOjogUi4gRGF2aWQgTXVycmF5IDxyZG11cnJheUBiaXRkYW5jZS5jb20+CisuLiBzZWN0aW9uYXV0aG9yOjogUi4gRGF2aWQgTXVycmF5IDxyZG11cnJheUBiaXRkYW5jZS5jb20+CisKKworLi4gbm90ZTo6CisKKyAgIFRoZSBjb250ZW50bWFuYWdlciBtb2R1bGUgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgb24gYQorICAgOnRlcm06YHByb3Zpc2lvbmFsIGJhc2lzIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuIEJhY2t3YXJkcyBpbmNvbXBhdGlibGUKKyAgIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbCBvZiB0aGUgbW9kdWxlKSBtYXkgb2NjdXIgaWYgZGVlbWVkCisgICBuZWNlc3NhcnkgYnkgdGhlIGNvcmUgZGV2ZWxvcGVycy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICBhcyBhIDp0ZXJtOmBwcm92aXNpb25hbCBtb2R1bGUgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4KKworVGhlIDptb2Q6YH5lbWFpbC5tZXNzYWdlYCBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyB0aGF0IGNhbiByZXByZXNlbnQgYW4KK2FyYml0cmFyeSBlbWFpbCBtZXNzYWdlLiAgVGhhdCBiYXNpYyBtZXNzYWdlIG1vZGVsIGhhcyBhIHVzZWZ1bCBhbmQgZmxleGlibGUKK0FQSSwgYnV0IGl0IHByb3ZpZGVzIG9ubHkgYSBsb3dlci1sZXZlbCBBUEkgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGdlbmVyaWMKK3BhcnRzIG9mIGEgbWVzc2FnZSAodGhlIGhlYWRlcnMsIGdlbmVyaWMgaGVhZGVyIHBhcmFtZXRlcnMsIGFuZCB0aGUgcGF5bG9hZCwKK3doaWNoIG1heSBiZSBhIGxpc3Qgb2Ygc3ViLXBhcnRzKS4gIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNsYXNzZXMgYW5kIHRvb2xzCit0aGF0IHByb3ZpZGUgYW4gZW5oYW5jZWQgYW5kIGV4dGVuc2libGUgQVBJIGZvciBkZWFsaW5nIHdpdGggdmFyaW91cyBzcGVjaWZpYwordHlwZXMgb2YgY29udGVudCwgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIHJldHJpZXZlIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlCithcyBhIHNwZWNpYWxpemVkIG9iamVjdCB0eXBlIHJhdGhlciB0aGFuIGFzIGEgc2ltcGxlIGJ5dGVzIG9iamVjdC4gIFRoZSBtb2R1bGUKK2F1dG9tYXRpY2FsbHkgdGFrZXMgY2FyZSBvZiB0aGUgUkZDLXNwZWNpZmllZCBNSU1FIGRldGFpbHMgKHJlcXVpcmVkIGhlYWRlcnMKK2FuZCBwYXJhbWV0ZXJzLCBldGMuKSBmb3IgdGhlIGNlcnRhaW4gY29tbW9uIGNvbnRlbnQgdHlwZXMgY29udGVudCBwcm9wZXJ0aWVzLAorYW5kIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgdHlwZXMgY2FuIGJlIGFkZGVkIGJ5IGFuIGFwcGxpY2F0aW9uIHVzaW5nIHRoZQorZXh0ZW5zaW9uIG1lY2hhbmlzbXMuCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGVwb255bW91cyAiQ29udGVudCBNYW5hZ2VyIiBjbGFzc2VzLiAgVGhlIGJhc2UKKzpjbGFzczpgLkNvbnRlbnRNYW5hZ2VyYCBjbGFzcyBkZWZpbmVzIGFuIEFQSSBmb3IgcmVnaXN0ZXJpbmcgY29udGVudAorbWFuYWdlbWVudCBmdW5jdGlvbnMgd2hpY2ggZXh0cmFjdCBkYXRhIGZyb20gYGBNZXNzYWdlYGAgb2JqZWN0cyBvciBpbnNlcnQgZGF0YQorYW5kIGhlYWRlcnMgaW50byBgYE1lc3NhZ2VgYCBvYmplY3RzLCB0aHVzIHByb3ZpZGluZyBhIHdheSBvZiBjb252ZXJ0aW5nCitiZXR3ZWVuIGBgTWVzc2FnZWBgIG9iamVjdHMgY29udGFpbmluZyBkYXRhIGFuZCBvdGhlciByZXByZXNlbnRhdGlvbnMgb2YgdGhhdAorZGF0YSAoUHl0aG9uIGRhdGEgdHlwZXMsIHNwZWNpYWxpemVkIFB5dGhvbiBvYmplY3RzLCBleHRlcm5hbCBmaWxlcywgZXRjKS4gIFRoZQorbW9kdWxlIGFsc28gZGVmaW5lcyBvbmUgY29uY3JldGUgY29udGVudCBtYW5hZ2VyOiA6ZGF0YTpgcmF3X2RhdGFfbWFuYWdlcmAKK2NvbnZlcnRzIGJldHdlZW4gTUlNRSBjb250ZW50IHR5cGVzIGFuZCBgYHN0cmBgIG9yIGBgYnl0ZXNgYCBkYXRhLiAgSXQgYWxzbworcHJvdmlkZXMgYSBjb252ZW5pZW50IEFQSSBmb3IgbWFuYWdpbmcgdGhlIE1JTUUgcGFyYW1ldGVycyB3aGVuIGluc2VydGluZworY29udGVudCBpbnRvIGBgTWVzc2FnZWBgXCBzLiAgSXQgYWxzbyBoYW5kbGVzIGluc2VydGluZyBhbmQgZXh0cmFjdGluZworYGBNZXNzYWdlYGAgb2JqZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYGBtZXNzYWdlL3JmYzgyMmBgIGNvbnRlbnQgdHlwZS4KKworQW5vdGhlciBwYXJ0IG9mIHRoZSBlbmhhbmNlZCBpbnRlcmZhY2UgaXMgc3ViY2xhc3NlcyBvZgorOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCB0aGF0IHByb3ZpZGUgbmV3IGNvbnZlbmllbmNlIEFQSSBmdW5jdGlvbnMsCitpbmNsdWRpbmcgY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgY2FsbGluZyB0aGUgQ29udGVudCBNYW5hZ2VycyBkZXJpdmVkIGZyb20KK3RoaXMgbW9kdWxlLgorCisuLiBub3RlOjoKKworICAgQWx0aG91Z2ggOmNsYXNzOmAuRW1haWxNZXNzYWdlYCBhbmQgOmNsYXNzOmAuTUlNRVBhcnRgIGFyZSBjdXJyZW50bHkKKyAgIGRvY3VtZW50ZWQgaW4gdGhpcyBtb2R1bGUgYmVjYXVzZSBvZiB0aGUgcHJvdmlzaW9uYWwgbmF0dXJlIG9mIHRoZSBjb2RlLCB0aGUKKyAgIGltcGxlbWVudGF0aW9uIGxpdmVzIGluIHRoZSA6bW9kOmBlbWFpbC5tZXNzYWdlYCBtb2R1bGUuCisKKworLi4gY2xhc3M6OiBFbWFpbE1lc3NhZ2UocG9saWN5PWRlZmF1bHQpCisKKyAgIElmICpwb2xpY3kqIGlzIHNwZWNpZmllZCAoaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgCisgICBjbGFzcykgdXNlIHRoZSBydWxlcyBpdCBzcGVjaWZpZXMgdG8gdWRwYXRlIGFuZCBzZXJpYWxpemUgdGhlIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUgbWVzc2FnZS4gIElmICpwb2xpY3kqIGlzIG5vdCBzZXQsIHVzZSB0aGUKKyAgIDpjbGFzczpgfmVtYWlsLnBvbGljeS5kZWZhdWx0YCBwb2xpY3ksIHdoaWNoIGZvbGxvd3MgdGhlIHJ1bGVzIG9mIHRoZSBlbWFpbAorICAgUkZDcyBleGNlcHQgZm9yIGxpbmUgZW5kaW5ncyAoaW5zdGVhZCBvZiB0aGUgUkZDIG1hbmRhdGVkIGBgXHJcbmBgLCBpdCB1c2VzCisgICB0aGUgUHl0aG9uIHN0YW5kYXJkIGBgXG5gYCBsaW5lIGVuZGluZ3MpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KKworICAgVGhpcyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAuICBJdCBhZGRzCisgICB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKKworICAgLi4gYXR0cmlidXRlOjogaXNfYXR0YWNobWVudAorCisgICAgICBTZXQgdG8gYGBUcnVlYGAgaWYgdGhlcmUgaXMgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyCisgICAgICBhbmQgaXRzIChjYXNlIGluc2Vuc2l0aXZlKSB2YWx1ZSBpcyBgYGF0dGFjaG1lbnRgYCwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworCisgICAuLiBtZXRob2Q6OiBnZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKQorCisgICAgICBSZXR1cm4gdGhlIE1JTUUgcGFydCB0aGF0IGlzIHRoZSBiZXN0IGNhbmRpZGF0ZSB0byBiZSB0aGUgImJvZHkiIG9mIHRoZQorICAgICAgbWVzc2FnZS4KKworICAgICAgKnByZWZlcmVuY2VsaXN0KiBtdXN0IGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBmcm9tIHRoZSBzZXQgYGByZWxhdGVkYGAsCisgICAgICBgYGh0bWxgYCwgYW5kIGBgcGxhaW5gYCwgYW5kIGluZGljYXRlcyB0aGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBmb3IgdGhlCisgICAgICBjb250ZW50IHR5cGUgb2YgdGhlIHBhcnQgcmV0dXJuZWQuCisKKyAgICAgIFN0YXJ0IGxvb2tpbmcgZm9yIGNhbmRpZGF0ZSBtYXRjaGVzIHdpdGggdGhlIG9iamVjdCBvbiB3aGljaCB0aGUKKyAgICAgIGBgZ2V0X2JvZHlgYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAgICBJZiBgYHJlbGF0ZWRgYCBpcyBub3QgaW5jbHVkZWQgaW4gKnByZWZlcmVuY2VsaXN0KiwgY29uc2lkZXIgdGhlIHJvb3QKKyAgICAgIHBhcnQgKG9yIHN1YnBhcnQgb2YgdGhlIHJvb3QgcGFydCkgb2YgYW55IHJlbGF0ZWQgZW5jb3VudGVyZWQgYXMgYQorICAgICAgY2FuZGlkYXRlIGlmIHRoZSAoc3ViLSlwYXJ0IG1hdGNoZXMgYSBwcmVmZXJlbmNlLgorCisgICAgICBXaGVuIGVuY291bnRlcmluZyBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgY2hlY2sgdGhlIGBgc3RhcnRgYCBwYXJhbWV0ZXIKKyAgICAgIGFuZCBpZiBhIHBhcnQgd2l0aCBhIG1hdGNoaW5nIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBpcyBmb3VuZCwgY29uc2lkZXIKKyAgICAgIG9ubHkgaXQgd2hlbiBsb29raW5nIGZvciBjYW5kaWRhdGUgbWF0Y2hlcy4gIE90aGVyd2lzZSBjb25zaWRlciBvbmx5IHRoZQorICAgICAgZmlyc3QgKGRlZmF1bHQgcm9vdCkgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLgorCisgICAgICBJZiBhIHBhcnQgaGFzIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlciwgb25seSBjb25zaWRlcgorICAgICAgdGhlIHBhcnQgYSBjYW5kaWRhdGUgbWF0Y2ggaWYgdGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgaXMgYGBpbmxpbmVgYC4KKworICAgICAgSWYgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBtYXRjaGVzIGFueSBvZiB0aGUgcHJlZmVyZW5jZXMgaW4KKyAgICAgICpwcmVmZXJuZWNsaXN0KiwgcmV0dXJuIGBgTm9uZWBgLgorCisgICAgICBOb3RlczogKDEpIEZvciBtb3N0IGFwcGxpY2F0aW9ucyB0aGUgb25seSAqcHJlZmVyZW5jZWxpc3QqIGNvbWJpbmF0aW9ucworICAgICAgdGhhdCByZWFsbHkgbWFrZSBzZW5zZSBhcmUgYGAoJ3BsYWluJywpYGAsIGBgKCdodG1sJywgJ3BsYWluJylgYCwgYW5kIHRoZQorICAgICAgZGVmYXVsdCwgYGAoJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpYGAuICAoMikgQmVjYXVzZSBtYXRjaGluZyBzdGFydHMKKyAgICAgIHdpdGggdGhlIG9iamVjdCBvbiB3aGljaCBgYGdldF9ib2R5YGAgaXMgY2FsbGVkLCBjYWxsaW5nIGBgZ2V0X2JvZHlgYCBvbgorICAgICAgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgd2lsbCByZXR1cm4gdGhlIG9iamVjdCBpdHNlbGYgdW5sZXNzCisgICAgICAqcHJlZmVyZW5jZWxpc3QqIGhhcyBhIG5vbi1kZWZhdWx0IHZhbHVlLiAoMykgTWVzc2FnZXMgKG9yIG1lc3NhZ2UgcGFydHMpCisgICAgICB0aGF0IGRvIG5vdCBzcGVjaWZ5IGEgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgb3Igd2hvc2UKKyAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciBpcyBpbnZhbGlkIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB0aGV5CisgICAgICBhcmUgb2YgdHlwZSBgYHRleHQvcGxhaW5gYCwgd2hpY2ggbWF5IG9jY2FzaW9uYWxseSBjYXVzZSBgYGdldF9ib2R5YGAgdG8KKyAgICAgIHJldHVybiB1bmV4cGVjdGVkIHJlc3VsdHMuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9hdHRhY2htZW50cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgcGFydHMgb2YgdGhlIG1lc3NhZ2UgdGhhdCBhcmUgbm90CisgICAgICBjYW5kaWRhdGUgImJvZHkiIHBhcnRzLiAgVGhhdCBpcywgc2tpcCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIG9mCisgICAgICBgYHRleHQvcGxhaW5gYCwgYGB0ZXh0L2h0bWxgYCwgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvcgorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCAodW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgbWFya2VkIGFzCisgICAgICBhdHRhY2htZW50cyB2aWEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgKSwgYW5kCisgICAgICByZXR1cm4gYWxsIHJlbWFpbmluZyBwYXJ0cy4gIFdoZW4gYXBwbGllZCBkaXJlY3RseSB0byBhCisgICAgICBgYG11bHRpcGFydC9yZWxhdGVkYGAsIHJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBhbGwgdGhlIHJlbGF0ZWQgcGFydHMKKyAgICAgIGV4Y2VwdCB0aGUgcm9vdCBwYXJ0IChpZTogdGhlIHBhcnQgcG9pbnRlZCB0byBieSB0aGUgYGBzdGFydGBgIHBhcmFtZXRlciwKKyAgICAgIG9yIHRoZSBmaXJzdCBwYXJ0IGlmIHRoZXJlIGlzIG5vIGBgc3RhcnRgYCBwYXJhbWV0ZXIgb3IgdGhlIGBgc3RhcnRgYAorICAgICAgcGFyYW1ldGVyIGRvZXNuJ3QgbWF0Y2ggdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBvZiBhbnkgb2YgdGhlCisgICAgICBwYXJ0cykuICBXaGVuIGFwcGxpZWQgZGlyZWN0bHkgdG8gYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgIG9yIGEKKyAgICAgIG5vbi1gYG11bHRpcGFydGBgLCByZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9wYXJ0cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgaW1tZWRpYXRlIHN1Yi1wYXJ0cyBvZiB0aGUgbWVzc2FnZSwKKyAgICAgIHdoaWNoIHdpbGwgYmUgZW1wdHkgZm9yIGEgbm9uLWBgbXVsdGlwYXJ0YGAuICAoU2VlIGFsc28KKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS53YWxrYC4pCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBDYWxsIHRoZSBgYGdldF9jb250ZW50YGAgbWV0aG9kIG9mIHRoZSAqY29udGVudF9tYW5hZ2VyKiwgcGFzc2luZyBzZWxmCisgICAgICBhcyB0aGUgbWVzc2FnZSBvYmplY3QsIGFuZCBwYXNzaW5nIGFsb25nIGFueSBvdGhlciBhcmd1bWVudHMgb3Iga2V5d29yZHMKKyAgICAgIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlCisgICAgICB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogc2V0X2NvbnRlbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBDYWxsIHRoZSBgYHNldF9jb250ZW50YGAgbWV0aG9kIG9mIHRoZSAqY29udGVudF9tYW5hZ2VyKiwgcGFzc2luZyBzZWxmCisgICAgICBhcyB0aGUgbWVzc2FnZSBvYmplY3QsIGFuZCBwYXNzaW5nIGFsb25nIGFueSBvdGhlciBhcmd1bWVudHMgb3Iga2V5d29yZHMKKyAgICAgIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlCisgICAgICB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9yZWxhdGVkKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCBtZXNzYWdlIGludG8gYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgbWVzc2FnZSwKKyAgICAgIG1vdmluZyBhbnkgZXhpc3RpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtYCBoZWFkZXJzIGFuZCBwYXlsb2FkIGludG8gYQorICAgICAgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnRgYC4gIElmICpib3VuZGFyeSogaXMgc3BlY2lmaWVkLCB1c2UKKyAgICAgIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gdGhlIG11bHRpcGFydCwgb3RoZXJ3aXNlIGxlYXZlIHRoZSBib3VuZGFyeQorICAgICAgdG8gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4gaXQgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUKKyAgICAgIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9hbHRlcm5hdGl2ZShib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAgb3IgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgaW50byBhCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBtb3ZpbmcgYW55IGV4aXN0aW5nIDptYWlsaGVhZGVyOmBDb250ZW50LWAKKyAgICAgIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlIGBgbXVsdGlwYXJ0YGAuICBJZgorICAgICAgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nIGluIHRoZSBtdWx0aXBhcnQsCisgICAgICBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5IHRvIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aGVuIGl0IGlzCisgICAgICBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IG1ha2VfbWl4ZWQoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgLCBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgb3IgYQorICAgICAgYGBtdWx0aXBhcnQtYWx0ZXJuYXRpdmVgYCBpbnRvIGEgYGBtdWx0aXBhcnQvbWl4ZWRgYCwgbW92aW5nIGFueSBleGlzdGluZworICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtYCBoZWFkZXJzIGFuZCBwYXlsb2FkIGludG8gYSAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgICAgYGBtdWx0aXBhcnRgYC4gIElmICpib3VuZGFyeSogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZworICAgICAgaW4gdGhlIG11bHRpcGFydCwgb3RoZXJ3aXNlIGxlYXZlIHRoZSBib3VuZGFyeSB0byBiZSBhdXRvbWF0aWNhbGx5CisgICAgICBjcmVhdGVkIHdoZW4gaXQgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfcmVsYXRlZCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZQorICAgICAgb2JqZWN0LCBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwKKyAgICAgIGFuZCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYKKyAgICAgIHRoZSBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGNhbGwgOm1ldGg6YG1ha2VfcmVsYXRlZGAgYW5kIHRoZW4KKyAgICAgIHByb2NlZWQgYXMgYWJvdmUuICBJZiB0aGUgbWVzc2FnZSBpcyBhbnkgb3RoZXIgdHlwZSBvZiBgYG11bHRpcGFydGBgLAorICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLiBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKyAgICAgIElmIHRoZSBhZGRlZCBwYXJ0IGhhcyBubyA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLAorICAgICAgYWRkIG9uZSB3aXRoIHRoZSB2YWx1ZSBgYGlubGluZWBgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9hbHRlcm5hdGl2ZSgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2UKKyAgICAgIG9iamVjdCwgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsIGFuZAorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmIHRoZQorICAgICAgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgIG9yIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgY2FsbAorICAgICAgOm1ldGg6YG1ha2VfYWx0ZXJuYXRpdmVgIGFuZCB0aGVuIHByb2NlZWQgYXMgYWJvdmUuICBJZiB0aGUgbWVzc2FnZSBpcworICAgICAgYW55IG90aGVyIHR5cGUgb2YgYGBtdWx0aXBhcnRgYCwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLiBJZgorICAgICAgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZAorICAgICAgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2F0dGFjaG1lbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBJZiB0aGUgbWVzc2FnZSBpcyBhIGBgbXVsdGlwYXJ0L21peGVkYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIG9iamVjdCwKKyAgICAgIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLCBhbmQKKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZiB0aGUKKyAgICAgIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCwgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvcgorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCwgY2FsbCA6bWV0aDpgbWFrZV9taXhlZGAgYW5kIHRoZW4gcHJvY2VlZCBhcworICAgICAgYWJvdmUuIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgYGBjb250ZW50X21hbmFnZXJgYAorICAgICAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLiAgSWYgdGhlIGFkZGVkIHBhcnQKKyAgICAgIGhhcyBubyA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLCBhZGQgb25lIHdpdGggdGhlIHZhbHVlCisgICAgICBgYGF0dGFjaG1lbnRgYC4gIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGJvdGggZm9yIGV4cGxpY2l0IGF0dGFjaG1lbnRzCisgICAgICAoOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgIGFuZCBgYGlubGluZWBgIGF0dGFjaG1lbnRzCisgICAgICAoOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZWApLCBieSBwYXNzaW5nIGFwcHJvcHJpYXRlCisgICAgICBvcHRpb25zIHRvIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgLgorCisKKyAgIC4uIG1ldGhvZDo6IGNsZWFyKCkKKworICAgICAgUmVtb3ZlIHRoZSBwYXlsb2FkIGFuZCBhbGwgb2YgdGhlIGhlYWRlcnMuCisKKworICAgLi4gbWV0aG9kOjogY2xlYXJfY29udGVudCgpCisKKyAgICAgIFJlbW92ZSB0aGUgcGF5bG9hZCBhbmQgYWxsIG9mIHRoZSA6ZXhjOmBDb250ZW50LWAgaGVhZGVycywgbGVhdmluZworICAgICAgYWxsIG90aGVyIGhlYWRlcnMgaW50YWN0IGFuZCBpbiB0aGVpciBvcmlnaW5hbCBvcmRlci4KKworCisuLiBjbGFzczo6IENvbnRlbnRNYW5hZ2VyKCkKKworICAgQmFzZSBjbGFzcyBmb3IgY29udGVudCBtYW5hZ2Vycy4gIFByb3ZpZGVzIHRoZSBzdGFuZGFyZCByZWdpc3RyeSBtZWNoYW5pc21zCisgICB0byByZWdpc3RlciBjb252ZXJ0ZXJzIGJldHdlZW4gTUlNRSBjb250ZW50IGFuZCBvdGhlciByZXByZXNlbnRhdGlvbnMsIGFzCisgICB3ZWxsIGFzIHRoZSBgYGdldF9jb250ZW50YGAgYW5kIGBgc2V0X2NvbnRlbnRgYCBkaXNwYXRjaCBtZXRob2RzLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jb250ZW50KG1zZywgKmFyZ3MsICoqa3cpCisKKyAgICAgIExvb2sgdXAgYSBoYW5kbGVyIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBgYG1pbWV0eXBlYGAgb2YgKm1zZyogKHNlZSBuZXh0CisgICAgICBwYXJhZ3JhcGgpLCBjYWxsIGl0LCBwYXNzaW5nIHRocm91Z2ggYWxsIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgcmVzdWx0CisgICAgICBvZiB0aGUgY2FsbC4gIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBoYW5kbGVyIHdpbGwgZXh0cmFjdCB0aGUKKyAgICAgIHBheWxvYWQgZnJvbSAqbXNnKiBhbmQgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGVuY29kZXMgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgIHRoZSBleHRyYWN0ZWQgZGF0YS4KKworICAgICAgVG8gZmluZCB0aGUgaGFuZGxlciwgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBrZXlzIGluIHRoZSByZWdpc3RyeSwKKyAgICAgIHN0b3BwaW5nIHdpdGggdGhlIGZpcnN0IG9uZSBmb3VuZDoKKworICAgICAgICAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZnVsbCBNSU1FIHR5cGUgKGBgbWFpbnR5cGUvc3VidHlwZWBgKQorICAgICAgICAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYGBtYWludHlwZWBgCisgICAgICAgICAgICAqIHRoZSBlbXB0eSBzdHJpbmcKKworICAgICAgSWYgbm9uZSBvZiB0aGVzZSBrZXlzIHByb2R1Y2UgYSBoYW5kbGVyLCByYWlzZSBhIDpleGM6YEtleUVycm9yYCBmb3IgdGhlCisgICAgICBmdWxsIE1JTUUgdHlwZS4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudChtc2csIG9iaiwgKmFyZ3MsICoqa3cpCisKKyAgICAgIElmIHRoZSBgYG1haW50eXBlYGAgaXMgYGBtdWx0aXBhcnRgYCwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgOyBvdGhlcndpc2UKKyAgICAgIGxvb2sgdXAgYSBoYW5kbGVyIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSB0eXBlIG9mICpvYmoqIChzZWUgbmV4dAorICAgICAgcGFyYWdyYXBoKSwgY2FsbCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmNsZWFyX2NvbnRlbnRgIG9uIHRoZQorICAgICAgKm1zZyosIGFuZCBjYWxsIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLCBwYXNzaW5nIHRocm91Z2ggYWxsIGFyZ3VtZW50cy4gIFRoZQorICAgICAgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgaGFuZGxlciB3aWxsIHRyYW5zZm9ybSBhbmQgc3RvcmUgKm9iaiogaW50bworICAgICAgKm1zZyosIHBvc3NpYmx5IG1ha2luZyBvdGhlciBjaGFuZ2VzIHRvICptc2cqIGFzIHdlbGwsIHN1Y2ggYXMgYWRkaW5nCisgICAgICB2YXJpb3VzIE1JTUUgaGVhZGVycyB0byBlbmNvZGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGludGVycHJldCB0aGUgc3RvcmVkCisgICAgICBkYXRhLgorCisgICAgICBUbyBmaW5kIHRoZSBoYW5kbGVyLCBvYnRhaW4gdGhlIHR5cGUgb2YgKm9iaiogKGBgdHlwID0gdHlwZShvYmopYGApLCBhbmQKKyAgICAgIGxvb2sgZm9yIHRoZSBmb2xsb3dpbmcga2V5cyBpbiB0aGUgcmVnaXN0cnksIHN0b3BwaW5nIHdpdGggdGhlIGZpcnN0IG9uZQorICAgICAgZm91bmQ6CisKKyAgICAgICAgICAgKiB0aGUgdHlwZSBpdHNlbGYgKGBgdHlwYGApCisgICAgICAgICAgICogdGhlIHR5cGUncyBmdWxseSBxdWFsaWZpZWQgbmFtZSAoYGB0eXAuX19tb2R1bGVfXyArICcuJyArCisgICAgICAgICAgICAgdHlwLl9fcXVhbG5hbWVfX2BgKS4KKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIHF1YWxuYW1lIChgYHR5cC5fX3F1YWxuYW1lX19gYCkKKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIG5hbWUgKGBgdHlwLl9fbmFtZV9fYGApLgorCisgICAgICBJZiBub25lIG9mIHRoZSBhYm92ZSBtYXRjaCwgcmVwZWF0IGFsbCBvZiB0aGUgY2hlY2tzIGFib3ZlIGZvciBlYWNoIG9mCisgICAgICB0aGUgdHlwZXMgaW4gdGhlIDp0ZXJtOmBNUk9gIChgYHR5cC5fX21yb19fYGApLiAgRmluYWxseSwgaWYgbm8gb3RoZXIga2V5CisgICAgICB5aWVsZHMgYSBoYW5kbGVyLCBjaGVjayBmb3IgYSBoYW5kbGVyIGZvciB0aGUga2V5IGBgTm9uZWBgLiAgSWYgdGhlcmUgaXMKKyAgICAgIG5vIGhhbmRsZXIgZm9yIGBgTm9uZWBgLCByYWlzZSBhIDpleGM6YEtleUVycm9yYCBmb3IgdGhlIGZ1bGx5CisgICAgICBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZS4KKworICAgICAgQWxzbyBhZGQgYSA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXIgaWYgb25lIGlzIG5vdCBwcmVzZW50IChzZWUKKyAgICAgIGFsc28gOmNsYXNzOmAuTUlNRVBhcnRgKS4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfZ2V0X2hhbmRsZXIoa2V5LCBoYW5kbGVyKQorCisgICAgICBSZWNvcmQgdGhlIGZ1bmN0aW9uICpoYW5kbGVyKiBhcyB0aGUgaGFuZGxlciBmb3IgKmtleSouICBGb3IgdGhlIHBvc3NpYmxlCisgICAgICB2YWx1ZXMgb2YgKmtleSosIHNlZSA6bWV0aDpgZ2V0X2NvbnRlbnRgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9zZXRfaGFuZGxlcih0eXBla2V5LCBoYW5kbGVyKQorCisgICAgICBSZWNvcmQgKmhhbmRsZXIqIGFzIHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYW4gb2JqZWN0IG9mIGEgdHlwZQorICAgICAgbWF0Y2hpbmcgKnR5cGVrZXkqIGlzIHBhc3NlZCB0byA6bWV0aDpgc2V0X2NvbnRlbnRgLiAgRm9yIHRoZSBwb3NzaWJsZQorICAgICAgdmFsdWVzIG9mICp0eXBla2V5Kiwgc2VlIDptZXRoOmBzZXRfY29udGVudGAuCisKKworLi4gY2xhc3M6OiBNSU1FUGFydChwb2xpY3k9ZGVmYXVsdCkKKworICAgIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHN1YnBhcnQgb2YgYSBNSU1FIG1lc3NhZ2UuICBJdCBpcyBpZGVudGljYWwgdG8KKyAgICA6Y2xhc3M6YEVtYWlsTWVzc2FnZWAsIGV4Y2VwdCB0aGF0IG5vIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlcnMgYXJlCisgICAgYWRkZWQgd2hlbiA6bWV0aDpgfkVtYWlsTWVzc2FnZS5zZXRfY29udGVudGAgaXMgY2FsbGVkLCBzaW5jZSBzdWItcGFydHMgZG8KKyAgICBub3QgbmVlZCB0aGVpciBvd24gOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycy4KKworCitDb250ZW50IE1hbmFnZXIgSW5zdGFuY2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0N1cnJlbnRseSB0aGUgZW1haWwgcGFja2FnZSBwcm92aWRlcyBvbmx5IG9uZSBjb25jcmV0ZSBjb250ZW50IG1hbmFnZXIsCis6ZGF0YTpgcmF3X2RhdGFfbWFuYWdlcmAsIGFsdGhvdWdoIG1vcmUgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCis6ZGF0YTpgcmF3X2RhdGFfbWFuYWdlcmAgaXMgdGhlCis6YXR0cjpgfmVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5jb250ZW50X21hbmFnZXJgIHByb3ZpZGVkIGJ5Cis6YXR0cjpgfmVtYWlsLnBvbGljeS5FbWFpbFBvbGljeWAgYW5kIGl0cyBkZXJpdmF0aXZlcy4KKworCisuLiBkYXRhOjogcmF3X2RhdGFfbWFuYWdlcgorCisgICBUaGlzIGNvbnRlbnQgbWFuYWdlciBwcm92aWRlcyBvbmx5IGEgbWluaW11bSBpbnRlcmZhY2UgYmV5b25kIHRoYXQgcHJvdmlkZWQKKyAgIGJ5IDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaXRzZWxmOiAgaXQgZGVhbHMgb25seSB3aXRoIHRleHQsIHJhdworICAgYnl0ZSBzdHJpbmdzLCBhbmQgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzLiAgTmV2ZXJ0aGVsZXNzLCBpdAorICAgcHJvdmlkZXMgc2lnbmlmaWNhbnQgYWR2YW50YWdlcyBjb21wYXJlZCB0byB0aGUgYmFzZSBBUEk6IGBgZ2V0X2NvbnRlbnRgYCBvbgorICAgYSB0ZXh0IHBhcnQgd2lsbCByZXR1cm4gYSB1bmljb2RlIHN0cmluZyB3aXRob3V0IHRoZSBhcHBsaWNhdGlvbiBuZWVkaW5nIHRvCisgICBtYW51YWxseSBkZWNvZGUgaXQsIGBgc2V0X2NvbnRlbnRgYCBwcm92aWRlcyBhIHJpY2ggc2V0IG9mIG9wdGlvbnMgZm9yCisgICBjb250cm9sbGluZyB0aGUgaGVhZGVycyBhZGRlZCB0byBhIHBhcnQgYW5kIGNvbnRyb2xsaW5nIHRoZSBjb250ZW50IHRyYW5zZmVyCisgICBlbmNvZGluZywgYW5kIGl0IGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgdmFyaW91cyBgYGFkZF9gYCBtZXRob2RzLCB0aGVyZWJ5CisgICBzaW1wbGlmeWluZyB0aGUgY3JlYXRpb24gb2YgbXVsdGlwYXJ0IG1lc3NhZ2VzLgorCisgICAuLiBtZXRob2Q6OiBnZXRfY29udGVudChtc2csIGVycm9ycz0ncmVwbGFjZScpCisKKyAgICAgIFJldHVybiB0aGUgcGF5bG9hZCBvZiB0aGUgcGFydCBhcyBlaXRoZXIgYSBzdHJpbmcgKGZvciBgYHRleHRgYCBwYXJ0cyksIGEKKyAgICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlYCBvYmplY3QgKGZvciBgYG1lc3NhZ2UvcmZjODIyYGAKKyAgICAgIHBhcnRzKSwgb3IgYSBgYGJ5dGVzYGAgb2JqZWN0IChmb3IgYWxsIG90aGVyIG5vbi1tdWx0aXBhcnQgdHlwZXMpLiAgUmFpc2UKKyAgICAgIGEgOmV4YzpgS2V5RXJyb3JgIGlmIGNhbGxlZCBvbiBhIGBgbXVsdGlwYXJ0YGAuICBJZiB0aGUgcGFydCBpcyBhCisgICAgICBgYHRleHRgYCBwYXJ0IGFuZCAqZXJyb3JzKiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgZXJyb3IgaGFuZGxlciB3aGVuCisgICAgICBkZWNvZGluZyB0aGUgcGF5bG9hZCB0byB1bmljb2RlLiAgVGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBpcworICAgICAgYGByZXBsYWNlYGAuCisKKyAgIC4uIG1ldGhvZDo6IHNldF9jb250ZW50KG1zZywgPCdzdHInPiwgc3VidHlwZT0icGxhaW4iLCBjaGFyc2V0PSd1dGYtOCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RlPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorICAgICAgICAgICAgICAgc2V0X2NvbnRlbnQobXNnLCA8J2J5dGVzJz4sIG1haW50eXBlLCBzdWJ0eXBlLCBjdGU9ImJhc2U2NCIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorICAgICAgICAgICAgICAgc2V0X2NvbnRlbnQobXNnLCA8J01lc3NhZ2UnPiwgY3RlPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorICAgICAgICAgICAgICAgc2V0X2NvbnRlbnQobXNnLCA8J2xpc3QnPiwgc3VidHlwZT0nbWl4ZWQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKworICAgICAgIEFkZCBoZWFkZXJzIGFuZCBwYXlsb2FkIHRvICptc2cqOgorCisgICAgICAgQWRkIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyIHdpdGggYSBgYG1haW50eXBlL3N1YnR5cGVgYAorICAgICAgIHZhbHVlLgorCisgICAgICAgICAgICogRm9yIGBgc3RyYGAsIHNldCB0aGUgTUlNRSBgYG1haW50eXBlYGAgdG8gYGB0ZXh0YGAsIGFuZCBzZXQgdGhlCisgICAgICAgICAgICAgc3VidHlwZSB0byAqc3VidHlwZSogaWYgaXQgaXMgc3BlY2lmaWVkLCBvciBgYHBsYWluYGAgaWYgaXQgaXMgbm90LgorICAgICAgICAgICAqIEZvciBgYGJ5dGVzYGAsIHVzZSB0aGUgc3BlY2lmaWVkICptYWludHlwZSogYW5kICpzdWJ0eXBlKiwgb3IKKyAgICAgICAgICAgICByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgaWYgdGhleSBhcmUgbm90IHNwZWNpZmllZC4KKyAgICAgICAgICAgKiBGb3IgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzLCBzZXQgdGhlIG1haW50eXBlIHRvCisgICAgICAgICAgICAgYGBtZXNzYWdlYGAsIGFuZCBzZXQgdGhlIHN1YnR5cGUgdG8gKnN1YnR5cGUqIGlmIGl0IGlzIHNwZWNpZmllZAorICAgICAgICAgICAgIG9yIGBgcmZjODIyYGAgaWYgaXQgaXMgbm90LiAgSWYgKnN1YnR5cGUqIGlzIGBgcGFydGlhbGBgLCByYWlzZSBhbgorICAgICAgICAgICAgIGVycm9yIChgYGJ5dGVzYGAgb2JqZWN0cyBtdXN0IGJlIHVzZWQgdG8gY29uc3RydWN0CisgICAgICAgICAgICAgYGBtZXNzYWdlL3BhcnRpYWxgYCBwYXJ0cykuCisgICAgICAgICAgICogRm9yICo8J2xpc3QnPiosIHdoaWNoIHNob3VsZCBiZSBhIGxpc3Qgb2YKKyAgICAgICAgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMsIHNldCB0aGUgYGBtYWludHlwZWBgIHRvCisgICAgICAgICAgICAgYGBtdWx0aXBhcnRgYCwgYW5kIHRoZSBgYHN1YnR5cGVgYCB0byAqc3VidHlwZSogaWYgaXQgaXMKKyAgICAgICAgICAgICBzcGVjaWZpZWQsIGFuZCBgYG1peGVkYGAgaWYgaXQgaXMgbm90LiAgSWYgdGhlIG1lc3NhZ2UgcGFydHMgaW4KKyAgICAgICAgICAgICB0aGUgKjwnbGlzdCc+KiBoYXZlIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlcnMsIHJlbW92ZQorICAgICAgICAgICAgIHRoZW0uCisKKyAgICAgICBJZiAqY2hhcnNldCogaXMgcHJvdmlkZWQgKHdoaWNoIGlzIHZhbGlkIG9ubHkgZm9yIGBgc3RyYGApLCBlbmNvZGUgdGhlCisgICAgICAgc3RyaW5nIHRvIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNldC4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgYGB1dGYtOGBgLiAgSWYgdGhlIHNwZWNpZmllZCAqY2hhcnNldCogaXMgYSBrbm93biBhbGlhcyBmb3IgYSBzdGFuZGFyZAorICAgICAgIE1JTUUgY2hhcnNldCBuYW1lLCB1c2UgdGhlIHN0YW5kYXJkIGNoYXJzZXQgaW5zdGVhZC4KKworICAgICAgIElmICpjdGUqIGlzIHNldCwgZW5jb2RlIHRoZSBwYXlsb2FkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCB0cmFuc2ZlcgorICAgICAgIGVuY29kaW5nLCBhbmQgc2V0IHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmRjb2RpbmdgIGhlYWRlciB0bworICAgICAgIHRoYXQgdmFsdWUuICBGb3IgYGBzdHJgYCBvYmplY3RzLCBpZiBpdCBpcyBub3Qgc2V0IHVzZSBoZXVyaXN0aWNzIHRvCisgICAgICAgZGV0ZXJtaW5lIHRoZSBtb3N0IGNvbXBhY3QgZW5jb2RpbmcuICBQb3NzaWJsZSB2YWx1ZXMgZm9yICpjdGUqIGFyZQorICAgICAgIGBgcXVvdGVkLXByaW50YWJsZWBgLCBgYGJhc2U2NGBgLCBgYDdiaXRgYCwgYGA4Yml0YGAsIGFuZCBgYGJpbmFyeWBgLgorICAgICAgIElmIHRoZSBpbnB1dCBjYW5ub3QgYmUgZW5jb2RlZCBpbiB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIChlZzogYGA3Yml0YGApLAorICAgICAgIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAuICBGb3IgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCwgcGVyCisgICAgICAgOnJmYzpgMjA0NmAsIHJhaXNlIGFuIGVycm9yIGlmIGEgKmN0ZSogb2YgYGBxdW90ZWQtcHJpbnRhYmxlYGAgb3IKKyAgICAgICBgYGJhc2U2NGBgIGlzIHJlcXVlc3RlZCBmb3IgKnN1YnR5cGUqIGBgcmZjODIyYGAsIGFuZCBmb3IgYW55ICpjdGUqCisgICAgICAgb3RoZXIgdGhhbiBgYDdiaXRgYCBmb3IgKnN1YnR5cGUqIGBgZXh0ZXJuYWwtYm9keWBgLiAgRm9yCisgICAgICAgYGBtZXNzYWdlL3JmYzgyMmBgLCB1c2UgYGA4Yml0YGAgaWYgKmN0ZSogaXMgbm90IHNwZWNpZmllZC4gIEZvciBhbGwKKyAgICAgICBvdGhlciB2YWx1ZXMgb2YgKnN1YnR5cGUqLCB1c2UgYGA3Yml0YGAuCisKKyAgICAgICAuLiBub3RlOjogQSAqY3RlKiBvZiBgYGJpbmFyeWBgIGRvZXMgbm90IGFjdHVhbGx5IHdvcmsgY29ycmVjdGx5IHlldC4KKyAgICAgICAgICBUaGUgYGBNZXNzYWdlYGAgb2JqZWN0IGFzIG1vZGlmaWVkIGJ5IGBgc2V0X2NvbnRlbnRgYCBpcyBjb3JyZWN0LCBidXQKKyAgICAgICAgICA6Y2xhc3M6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3JgIGRvZXMgbm90IHNlcmlhbGl6ZSBpdAorICAgICAgICAgIGNvcnJlY3RseS4KKworICAgICAgIElmICpkaXNwb3NpdGlvbiogaXMgc2V0LCB1c2UgaXQgYXMgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIuICBJZiBub3Qgc3BlY2lmaWVkLCBhbmQKKyAgICAgICAqZmlsZW5hbWUqIGlzIHNwZWNpZmllZCwgYWRkIHRoZSBoZWFkZXIgd2l0aCB0aGUgdmFsdWUgYGBhdHRhY2htZW50YGAuCisgICAgICAgSWYgaXQgaXMgbm90IHNwZWNpZmllZCBhbmQgKmZpbGVuYW1lKiBpcyBhbHNvIG5vdCBzcGVjaWZpZWQsIGRvIG5vdCBhZGQKKyAgICAgICB0aGUgaGVhZGVyLiAgVGhlIG9ubHkgdmFsaWQgdmFsdWVzIGZvciAqZGlzcG9zaXRpb24qIGFyZSBgYGF0dGFjaG1lbnRgYAorICAgICAgIGFuZCBgYGlubGluZWBgLgorCisgICAgICAgSWYgKmZpbGVuYW1lKiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgdmFsdWUgb2YgdGhlIGBgZmlsZW5hbWVgYAorICAgICAgIHBhcmFtZXRlciBvZiB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlci4gIFRoZXJlIGlzIG5vCisgICAgICAgZGVmYXVsdC4KKworICAgICAgIElmICpjaWQqIGlzIHNwZWNpZmllZCwgYWRkIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIGhlYWRlciB3aXRoCisgICAgICAgKmNpZCogYXMgaXRzIHZhbHVlLgorCisgICAgICAgSWYgKnBhcmFtcyogaXMgc3BlY2lmaWVkLCBpdGVyYXRlIGl0cyBgYGl0ZW1zYGAgbWV0aG9kIGFuZCB1c2UgdGhlCisgICAgICAgcmVzdWx0aW5nIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMgdG8gc2V0IGFkZGl0aW9uYWwgcGFyYW10ZXJzIG9uIHRoZQorICAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlci4KKworICAgICAgIElmICpoZWFkZXJzKiBpcyBzcGVjaWZpZWQgYW5kIGlzIGEgbGlzdCBvZiBzdHJpbmdzIG9mIHRoZSBmb3JtCisgICAgICAgYGBoZWFkZXJuYW1lOiBoZWFkZXJ2YWx1ZWBgIG9yIGEgbGlzdCBvZiBgYGhlYWRlcmBgIG9iamVjdHMKKyAgICAgICAoZGlzdGluZ3Vpc2VkIGZyb20gc3RyaW5ncyBieSBoYXZpbmcgYSBgYG5hbWVgYCBhdHRyaWJ1dGUpLCBhZGQgdGhlCisgICAgICAgaGVhZGVycyB0byAqbXNnKi4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKaW5kZXggNTc2NTMxZC4uYzBmOTQ3ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKQEAgLTMzLDIzICszMywzMSBAQAogCiAuLiBjbGFzczo6IE1lc3NhZ2UocG9saWN5PWNvbXBhdDMyKQogCi0gICBUaGUgKnBvbGljeSogYXJndW1lbnQgZGV0ZXJtaWVucyB0aGUgOm1vZDpgfmVtYWlsLnBvbGljeWAgdGhhdCB3aWxsIGJlIHVzZWQKLSAgIHRvIHVwZGF0ZSB0aGUgbWVzc2FnZSBtb2RlbC4gIFRoZSBkZWZhdWx0IHZhbHVlLCA6Y2xhc3M6YGNvbXBhdDMyCi0gICA8ZW1haWwucG9saWN5LkNvbXBhdDMyPmAgbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKLSAgIFB5dGhvbiAzLjIgdmVyc2lvbiBvZiB0aGUgZW1haWwgcGFja2FnZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKyAgIElmICpwb2xpY3kqIGlzIHNwZWNpZmllZCAoaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgCisgICBjbGFzcykgdXNlIHRoZSBydWxlcyBpdCBzcGVjaWZpZXMgdG8gdWRwYXRlIGFuZCBzZXJpYWxpemUgdGhlIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUgbWVzc2FnZS4gIElmICpwb2xpY3kqIGlzIG5vdCBzZXQsIHVzZSB0aGUgOmNsYXNzOmBjb21wYXQzMgorICAgPGVtYWlsLnBvbGljeS5Db21wYXQzMj5gIHBvbGljeSwgd2hpY2ggbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aAorICAgdGhlIFB5dGhvbiAzLjIgdmVyc2lvbiBvZiB0aGUgZW1haWwgcGFja2FnZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKICAgIDptb2Q6YH5lbWFpbC5wb2xpY3lgIGRvY3VtZW50YXRpb24uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zIFRoZSAqcG9saWN5KiBrZXl3b3JkIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAogCi0gICAuLiBtZXRob2Q6OiBhc19zdHJpbmcodW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wKQorICAgLi4gbWV0aG9kOjogYXNfc3RyaW5nKHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCwgcG9saWN5PU5vbmUpCiAKICAgICAgIFJldHVybiB0aGUgZW50aXJlIG1lc3NhZ2UgZmxhdHRlbmVkIGFzIGEgc3RyaW5nLiAgV2hlbiBvcHRpb25hbCAqdW5peGZyb20qCi0gICAgICBpcyBgYFRydWVgYCwgdGhlIGVudmVsb3BlIGhlYWRlciBpcyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgc3RyaW5nLgotICAgICAgKnVuaXhmcm9tKiBkZWZhdWx0cyB0byBgYEZhbHNlYGAuICBGbGF0dGVuaW5nIHRoZSBtZXNzYWdlIG1heSB0cmlnZ2VyCi0gICAgICBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmIGRlZmF1bHRzIG5lZWQgdG8gYmUgZmlsbGVkIGluIHRvCi0gICAgICBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcgKGZvciBleGFtcGxlLCBNSU1FIGJvdW5kYXJpZXMgbWF5Ci0gICAgICBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgorICAgICAgaXMgdHJ1ZSwgdGhlIGVudmVsb3BlIGhlYWRlciBpcyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgc3RyaW5nLgorICAgICAgKnVuaXhmcm9tKiBkZWZhdWx0cyB0byBgYEZhbHNlYGAuICBGb3IgYmFja3dhcmQgY29tcGFiaXRpbGl0eSByZWFzb25zLAorICAgICAgKm1heGhlYWRlcmxlbiogZGVmYXVsdHMgdG8gYGAwYGAsIHNvIGlmIHlvdSB3YW50IGEgZGlmZmVyZW50IHZhbHVlIHlvdQorICAgICAgbXVzdCBvdmVycmlkZSBpdCBleHBsaWNpdGx5ICh0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciAqbWF4X2xpbmVfbGVuZ3RoKiBpbgorICAgICAgdGhlIHBvbGljeSB3aWxsIGJlIGlnbm9yZWQgYnkgdGhpcyBtZXRob2QpLiAgVGhlICpwb2xpY3kqIGFyZ3VtZW50IG1heSBiZQorICAgICAgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwb2xpY3kgb2J0YWluZWQgZnJvbSB0aGUgbWVzc2FnZSBpbnN0YW5jZS4KKyAgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIHByb2R1Y2VkIGJ5IHRoZQorICAgICAgbWV0aG9kLCBzaW5jZSB0aGUgc3BlY2lmaWVkICpwb2xpY3kqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgYEdlbmVyYXRvcmBgLgorCisgICAgICBGbGF0dGVuaW5nIHRoZSBtZXNzYWdlIG1heSB0cmlnZ2VyIGNoYW5nZXMgdG8gdGhlIDpjbGFzczpgTWVzc2FnZWAgaWYKKyAgICAgIGRlZmF1bHRzIG5lZWQgdG8gYmUgZmlsbGVkIGluIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiB0byBhIHN0cmluZworICAgICAgKGZvciBleGFtcGxlLCBNSU1FIGJvdW5kYXJpZXMgbWF5IGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCkuCiAKICAgICAgIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlIGFuZCBtYXkgbm90IGFsd2F5cwogICAgICAgZm9ybWF0IHRoZSBtZXNzYWdlIHRoZSB3YXkgeW91IHdhbnQuICBGb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCBpdCBkb2VzCkBAIC02NSwxMCArNzMsNTggQEAKICAgICAgICAgIGcuZmxhdHRlbihtc2cpCiAgICAgICAgICB0ZXh0ID0gZnAuZ2V0dmFsdWUoKQogCisgICAgICBJZiB0aGUgbWVzc2FnZSBvYmplY3QgY29udGFpbnMgYmluYXJ5IGRhdGEgdGhhdCBpcyBub3QgZW5jb2RlZCBhY2NvcmRpbmcKKyAgICAgIHRvIFJGQyBzdGFuZGFyZHMsIHRoZSBub24tY29tcGxpYW50IGRhdGEgd2lsbCBiZSByZXBsYWNlZCBieSB1bmljb2RlCisgICAgICAidW5rbm93biBjaGFyYWN0ZXIiIGNvZGUgcG9pbnRzLiAgKFNlZSBhbHNvIDptZXRoOmAuYXNfYnl0ZXNgIGFuZAorICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYC4pCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IHRoZSAqcG9saWN5KiBrZXl3b3JkIGFyZ3VtZW50IHdhcyBhZGRlZC4KKwogCiAgICAuLiBtZXRob2Q6OiBfX3N0cl9fKCkKIAotICAgICAgRXF1aXZhbGVudCB0byBgYGFzX3N0cmluZyh1bml4ZnJvbT1UcnVlKWBgLgorICAgICAgRXF1aXZhbGVudCB0byA6bWV0aDpgLmFzX3N0cmluZygpYC4gIEFsbG93cyBgYHN0cihtc2cpYGAgdG8gcHJvZHVjZSBhCisgICAgICBzdHJpbmcgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIG1lc3NhZ2UuCisKKworICAgLi4gbWV0aG9kOjogYXNfYnl0ZXModW5peGZyb209RmFsc2UsIHBvbGljeT1Ob25lKQorCisgICAgICBSZXR1cm4gdGhlIGVudGlyZSBtZXNzYWdlIGZsYXR0ZW5lZCBhcyBhIGJ5dGVzIG9iamVjdC4gIFdoZW4gb3B0aW9uYWwKKyAgICAgICp1bml4ZnJvbSogaXMgdHJ1ZSwgdGhlIGVudmVsb3BlIGhlYWRlciBpcyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQKKyAgICAgIHN0cmluZy4gICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgVGhlICpwb2xpY3kqIGFyZ3VtZW50IG1heSBiZQorICAgICAgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwb2xpY3kgb2J0YWluZWQgZnJvbSB0aGUgbWVzc2FnZSBpbnN0YW5jZS4KKyAgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIHByb2R1Y2VkIGJ5IHRoZQorICAgICAgbWV0aG9kLCBzaW5jZSB0aGUgc3BlY2lmaWVkICpwb2xpY3kqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQorICAgICAgYGBCeXRlc0dlbmVyYXRvcmBgLgorCisgICAgICBGbGF0dGVuaW5nIHRoZSBtZXNzYWdlIG1heSB0cmlnZ2VyIGNoYW5nZXMgdG8gdGhlIDpjbGFzczpgTWVzc2FnZWAgaWYKKyAgICAgIGRlZmF1bHRzIG5lZWQgdG8gYmUgZmlsbGVkIGluIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiB0byBhIHN0cmluZworICAgICAgKGZvciBleGFtcGxlLCBNSU1FIGJvdW5kYXJpZXMgbWF5IGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCkuCisKKyAgICAgIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlIGFuZCBtYXkgbm90IGFsd2F5cworICAgICAgZm9ybWF0IHRoZSBtZXNzYWdlIHRoZSB3YXkgeW91IHdhbnQuICBGb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCBpdCBkb2VzCisgICAgICBub3QgZG8gdGhlIG1hbmdsaW5nIG9mIGxpbmVzIHRoYXQgYmVnaW4gd2l0aCBgYEZyb21gYCB0aGF0IGlzCisgICAgICByZXF1aXJlZCBieSB0aGUgdW5peCBtYm94IGZvcm1hdC4gIEZvciBtb3JlIGZsZXhpYmlsaXR5LCBpbnN0YW50aWF0ZSBhCisgICAgICA6Y2xhc3M6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3JgIGluc3RhbmNlIGFuZCB1c2UgaXRzCisgICAgICA6bWV0aDpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvci5mbGF0dGVuYCBtZXRob2QgZGlyZWN0bHkuCisgICAgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgICAgIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KKyAgICAgICAgIGZyb20gZW1haWwuZ2VuZXJhdG9yIGltcG9ydCBCeXRlc0dlbmVyYXRvcgorICAgICAgICAgZnAgPSBCeXRlc0lPKCkKKyAgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihmcCwgbWFuZ2xlX2Zyb21fPVRydWUsIG1heGhlYWRlcmxlbj02MCkKKyAgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgICB0ZXh0ID0gZnAuZ2V0dmFsdWUoKQorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisgICAuLiBtZXRob2Q6OiBfX2J5dGVzX18oKQorCisgICAgICBFcXVpdmFsZW50IHRvIDptZXRoOmAuYXNfYnl0ZXMoKWAuICBBbGxvd3MgYGBieXRlcyhtc2cpYGAgdG8gcHJvZHVjZSBhCisgICAgICBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIG1lc3NhZ2UuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAKICAgIC4uIG1ldGhvZDo6IGlzX211bHRpcGFydCgpCkBAIC00MTAsNyArNDY2LDggQEAKICAgICAgIHRvIGBgRmFsc2VgYC4KIAogCi0gICAuLiBtZXRob2Q6OiBzZXRfcGFyYW0ocGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJykKKyAgIC4uIG1ldGhvZDo6IHNldF9wYXJhbShwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycsIHJlcGxhY2U9RmFsc2UpCiAKICAgICAgIFNldCBhIHBhcmFtZXRlciBpbiB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyLiAgSWYgdGhlCiAgICAgICBwYXJhbWV0ZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGhlYWRlciwgaXRzIHZhbHVlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aApAQCAtNDI3LDYgKzQ4NCwxMiBAQAogICAgICAgbGFuZ3VhZ2UsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHN0cmluZy4gIEJvdGggKmNoYXJzZXQqIGFuZCAqbGFuZ3VhZ2UqCiAgICAgICBzaG91bGQgYmUgc3RyaW5ncy4KIAorICAgICAgSWYgKnJlcGxhY2UqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpIHRoZSBoZWFkZXIgaXMgbW92ZWQgdG8gdGhlCisgICAgICBlbmQgb2YgdGhlIGxpc3Qgb2YgaGVhZGVycy4gIElmICpyZXBsYWNlKiBpcyBgYFRydWVgYCwgdGhlIGhlYWRlcgorICAgICAgd2lsbCBiZSB1cGRhdGVkIGluIHBsYWNlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDogMy40IGBgcmVwbGFjZWBgIGtleXdvcmQgd2FzIGFkZGVkLgorCiAKICAgIC4uIG1ldGhvZDo6IGRlbF9wYXJhbShwYXJhbSwgaGVhZGVyPSdjb250ZW50LXR5cGUnLCByZXF1b3RlPVRydWUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CmluZGV4IGNiMjAyM2MuLmMyZjllNmEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdApAQCAtOTcsNiArOTcsMTcgQEAKIGBgc2VuZG1haWwnc2BgIGBgc3RkaW5gYCwgd2hlcmUgdGhlIGRlZmF1bHQgcG9saWN5IHdvdWxkIHVzZSBgYFxuYGAgbGluZQogc2VwYXJhdG9ycy4KIAorU29tZSBlbWFpbCBwYWNrYWdlIG1ldGhvZHMgYWNjZXB0IGEgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCwgYWxsb3dpbmcgdGhlCitwb2xpY3kgdG8gYmUgb3ZlcnJpZGRlbiBmb3IgdGhhdCBtZXRob2QuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHVzZXMKK3RoZSA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmdgIG1ldGhvZCBvZiB0aGUgKm1zZyogb2JqZWN0IGZyb20KK3RoZSBwcmV2aW91cyBleGFtcGxlIGFuZCB3cml0ZXMgdGhlIG1lc3NhZ2UgdG8gYSBmaWxlIHVzaW5nIHRoZSBuYXRpdmUgbGluZQorc2VwYXJhdG9ycyBmb3IgdGhlIHBsYXRmb3JtIG9uIHdoaWNoIGl0IGlzIHJ1bm5pbmc6OgorCisgICA+Pj4gaW1wb3J0IG9zCisgICA+Pj4gd2l0aCBvcGVuKCdjb252ZXJ0ZWQudHh0JywgJ3diJykgYXMgZjoKKyAgIC4uLiAgICAgZi53cml0ZShtc2cuYXNfYnl0ZXMocG9saWN5PW1zZy5wb2xpY3kuY2xvbmUobGluZXNlcD1vcy5saW5lc2VwKSkpCisgICAxNworCiBQb2xpY3kgb2JqZWN0cyBjYW4gYWxzbyBiZSBjb21iaW5lZCB1c2luZyB0aGUgYWRkaXRpb24gb3BlcmF0b3IsIHByb2R1Y2luZyBhCiBwb2xpY3kgb2JqZWN0IHdob3NlIHNldHRpbmdzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBub24tZGVmYXVsdCB2YWx1ZXMgb2YgdGhlCiBzdW1tZWQgb2JqZWN0czo6CkBAIC0zNjAsNyArMzcxLDcgQEAKICAgIHRvKSA6cmZjOmA1MzIyYCwgOnJmYzpgMjA0N2AsIGFuZCB0aGUgY3VycmVudCBNSU1FIFJGQ3MuCiAKICAgIFRoaXMgcG9saWN5IGFkZHMgbmV3IGhlYWRlciBwYXJzaW5nIGFuZCBmb2xkaW5nIGFsZ29yaXRobXMuICBJbnN0ZWFkIG9mCi0gICBzaW1wbGUgc3RyaW5ncywgaGVhZGVycyBhcmUgY3VzdG9tIG9iamVjdHMgd2l0aCBjdXN0b20gYXR0cmlidXRlcyBkZXBlbmRpbmcKKyAgIHNpbXBsZSBzdHJpbmdzLCBoZWFkZXJzIGFyZSBgYHN0cmBgIHN1YmNsYXNzZXMgd2l0aCBhdHRyaWJ1dGVzIHRoYXQgZGVwZW5kCiAgICBvbiB0aGUgdHlwZSBvZiB0aGUgZmllbGQuICBUaGUgcGFyc2luZyBhbmQgZm9sZGluZyBhbGdvcml0aG0gZnVsbHkgaW1wbGVtZW50CiAgICA6cmZjOmAyMDQ3YCBhbmQgOnJmYzpgNTMyMmAuCiAKQEAgLTM5Nyw2ICs0MDgsMjAgQEAKICAgICAgIGZpZWxkcyBhcmUgdHJlYXRlZCBhcyB1bnN0cnVjdHVyZWQuICBUaGlzIGxpc3Qgd2lsbCBiZSBjb21wbGV0ZWQgYmVmb3JlCiAgICAgICB0aGUgZXh0ZW5zaW9uIGlzIG1hcmtlZCBzdGFibGUuKQogCisgICAuLiBhdHRyaWJ1dGU6OiBjb250ZW50X21hbmFnZXIKKworICAgICAgQW4gb2JqZWN0IHdpdGggYXQgbGVhc3QgdHdvIG1ldGhvZHM6IGdldF9jb250ZW50IGFuZCBzZXRfY29udGVudC4gIFdoZW4KKyAgICAgIHRoZSA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudGAgb3IKKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9jb250ZW50YCBtZXRob2Qgb2YgYQorICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3QgaXMgY2FsbGVkLCBpdCBjYWxscyB0aGUKKyAgICAgIGNvcnJlc3BvbmRpbmcgbWV0aG9kIG9mIHRoaXMgb2JqZWN0LCBwYXNzaW5nIGl0IHRoZSBtZXNzYWdlIG9iamVjdCBhcyBpdHMKKyAgICAgIGZpcnN0IGFyZ3VtZW50LCBhbmQgYW55IGFyZ3VtZW50cyBvciBrZXl3b3JkcyB0aGF0IHdlcmUgcGFzc2VkIHRvIGl0IGFzCisgICAgICBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIEJ5IGRlZmF1bHQgYGBjb250ZW50X21hbmFnZXJgYCBpcyBzZXQgdG8KKyAgICAgIDpkYXRhOmB+ZW1haWwuY29udGVudG1hbmFnZXIucmF3X2RhdGFfbWFuYWdlcmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZCAzLjQKKworCiAgICBUaGUgY2xhc3MgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGFic3RyYWN0CiAgICBtZXRob2RzIG9mIDpjbGFzczpgUG9saWN5YDoKIApAQCAtNDE2LDcgKzQ0MSw3IEBACiAgICAgICBUaGUgbmFtZSBpcyByZXR1cm5lZCB1bmNoYW5nZWQuICBJZiB0aGUgaW5wdXQgdmFsdWUgaGFzIGEgYGBuYW1lYGAKICAgICAgIGF0dHJpYnV0ZSBhbmQgaXQgbWF0Y2hlcyAqbmFtZSogaWdub3JpbmcgY2FzZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkCiAgICAgICB1bmNoYW5nZWQuICBPdGhlcndpc2UgdGhlICpuYW1lKiBhbmQgKnZhbHVlKiBhcmUgcGFzc2VkIHRvCi0gICAgICBgYGhlYWRlcl9mYWN0b3J5YGAsIGFuZCB0aGUgcmVzdWx0aW5nIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkIGFzCisgICAgICBgYGhlYWRlcl9mYWN0b3J5YGAsIGFuZCB0aGUgcmVzdWx0aW5nIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQgYXMKICAgICAgIHRoZSB2YWx1ZS4gIEluIHRoaXMgY2FzZSBhIGBgVmFsdWVFcnJvcmBgIGlzIHJhaXNlZCBpZiB0aGUgaW5wdXQgdmFsdWUKICAgICAgIGNvbnRhaW5zIENSIG9yIExGIGNoYXJhY3RlcnMuCiAKQEAgLTQyNCw3ICs0NDksNyBAQAogCiAgICAgICBJZiB0aGUgdmFsdWUgaGFzIGEgYGBuYW1lYGAgYXR0cmlidXRlLCBpdCBpcyByZXR1cm5lZCB0byB1bm1vZGlmaWVkLgogICAgICAgT3RoZXJ3aXNlIHRoZSAqbmFtZSosIGFuZCB0aGUgKnZhbHVlKiB3aXRoIGFueSBDUiBvciBMRiBjaGFyYWN0ZXJzCi0gICAgICByZW1vdmVkLCBhcmUgcGFzc2VkIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAsIGFuZCB0aGUgcmVzdWx0aW5nIGN1c3RvbQorICAgICAgcmVtb3ZlZCwgYXJlIHBhc3NlZCB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZwogICAgICAgaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZC4gIEFueSBzdXJyb2dhdGVlc2NhcGVkIGJ5dGVzIGdldCB0dXJuZWQgaW50bwogICAgICAgdGhlIHVuaWNvZGUgdW5rbm93bi1jaGFyYWN0ZXIgZ2x5cGguCiAKQEAgLTQzNCw5ICs0NTksOSBAQAogICAgICAgQSB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIGEgJ3NvdXJjZSB2YWx1ZScgaWYgYW5kIG9ubHkgaWYgaXQgZG9lcyBub3QKICAgICAgIGhhdmUgYSBgYG5hbWVgYCBhdHRyaWJ1dGUgKGhhdmluZyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSBtZWFucyBpdCBpcyBhCiAgICAgICBoZWFkZXIgb2JqZWN0IG9mIHNvbWUgc29ydCkuICBJZiBhIHNvdXJjZSB2YWx1ZSBuZWVkcyB0byBiZSByZWZvbGRlZAotICAgICAgYWNjb3JkaW5nIHRvIHRoZSBwb2xpY3ksIGl0IGlzIGNvbnZlcnRlZCBpbnRvIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgYnkKKyAgICAgIGFjY29yZGluZyB0byB0aGUgcG9saWN5LCBpdCBpcyBjb252ZXJ0ZWQgaW50byBhIGhlYWRlciBvYmplY3QgYnkKICAgICAgIHBhc3NpbmcgdGhlICpuYW1lKiBhbmQgdGhlICp2YWx1ZSogd2l0aCBhbnkgQ1IgYW5kIExGIGNoYXJhY3RlcnMgcmVtb3ZlZAotICAgICAgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYC4gIEZvbGRpbmcgb2YgYSBjdXN0b20gaGVhZGVyIG9iamVjdCBpcyBkb25lIGJ5CisgICAgICB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLiAgRm9sZGluZyBvZiBhIGhlYWRlciBvYmplY3QgaXMgZG9uZSBieQogICAgICAgY2FsbGluZyBpdHMgYGBmb2xkYGAgbWV0aG9kIHdpdGggdGhlIGN1cnJlbnQgcG9saWN5LgogCiAgICAgICBTb3VyY2UgdmFsdWVzIGFyZSBzcGxpdCBpbnRvIGxpbmVzIHVzaW5nIDptZXRoOmB+c3RyLnNwbGl0bGluZXNgLiAgSWYKQEAgLTQ5MSwyMyArNTE2LDIzIEBACiB0aGUgZW1haWwgcGFja2FnZSBpcyBjaGFuZ2VkIGZyb20gdGhlIFB5dGhvbiAzLjIgQVBJIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKIAogICAgKiBTZXR0aW5nIGEgaGVhZGVyIG9uIGEgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCByZXN1bHRzIGluIHRoYXQKLSAgICAgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBjdXN0b20gaGVhZGVyIG9iamVjdCBjcmVhdGVkLgorICAgICBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGhlYWRlciBvYmplY3QgY3JlYXRlZC4KIAogICAgKiBGZXRjaGluZyBhIGhlYWRlciB2YWx1ZSBmcm9tIGEgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCByZXN1bHRzCi0gICAgIGluIHRoYXQgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBjdXN0b20gaGVhZGVyIG9iamVjdCBjcmVhdGVkIGFuZAorICAgICBpbiB0aGF0IGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgaGVhZGVyIG9iamVjdCBjcmVhdGVkIGFuZAogICAgICByZXR1cm5lZC4KIAotICAgKiBBbnkgY3VzdG9tIGhlYWRlciBvYmplY3QsIG9yIGFueSBoZWFkZXIgdGhhdCBpcyByZWZvbGRlZCBkdWUgdG8gdGhlCisgICAqIEFueSBoZWFkZXIgb2JqZWN0LCBvciBhbnkgaGVhZGVyIHRoYXQgaXMgcmVmb2xkZWQgZHVlIHRvIHRoZQogICAgICBwb2xpY3kgc2V0dGluZ3MsIGlzIGZvbGRlZCB1c2luZyBhbiBhbGdvcml0aG0gdGhhdCBmdWxseSBpbXBsZW1lbnRzIHRoZQogICAgICBSRkMgZm9sZGluZyBhbGdvcml0aG1zLCBpbmNsdWRpbmcga25vd2luZyB3aGVyZSBlbmNvZGVkIHdvcmRzIGFyZSByZXF1aXJlZAogICAgICBhbmQgYWxsb3dlZC4KIAogRnJvbSB0aGUgYXBwbGljYXRpb24gdmlldywgdGhpcyBtZWFucyB0aGF0IGFueSBoZWFkZXIgb2J0YWluZWQgdGhyb3VnaCB0aGUKLTpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaXMgYSBjdXN0b20gaGVhZGVyIG9iamVjdCB3aXRoIGN1c3RvbQorOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpcyBhIGhlYWRlciBvYmplY3Qgd2l0aCBleHRyYQogYXR0cmlidXRlcywgd2hvc2Ugc3RyaW5nIHZhbHVlIGlzIHRoZSBmdWxseSBkZWNvZGVkIHVuaWNvZGUgdmFsdWUgb2YgdGhlCiBoZWFkZXIuICBMaWtld2lzZSwgYSBoZWFkZXIgbWF5IGJlIGFzc2lnbmVkIGEgbmV3IHZhbHVlLCBvciBhIG5ldyBoZWFkZXIKIGNyZWF0ZWQsIHVzaW5nIGEgdW5pY29kZSBzdHJpbmcsIGFuZCB0aGUgcG9saWN5IHdpbGwgdGFrZSBjYXJlIG9mIGNvbnZlcnRpbmcKIHRoZSB1bmljb2RlIHN0cmluZyBpbnRvIHRoZSBjb3JyZWN0IFJGQyBlbmNvZGVkIGZvcm0uCiAKLVRoZSBjdXN0b20gaGVhZGVyIG9iamVjdHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgYXJlIGRlc2NyaWJlZCBpbgorVGhlIGhlYWRlciBvYmplY3RzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFyZSBkZXNjcmliZWQgaW4KIDptb2Q6YH5lbWFpbC5oZWFkZXJyZWdpc3RyeWAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKaW5kZXggYTZjYmJjZS4uMzMxZDJlZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnJzdApAQCAtNTMsNiArNTMsNyBAQAogICAgZW1haWwuZ2VuZXJhdG9yLnJzdAogICAgZW1haWwucG9saWN5LnJzdAogICAgZW1haWwuaGVhZGVycmVnaXN0cnkucnN0CisgICBlbWFpbC5jb250ZW50bWFuYWdlci5yc3QKICAgIGVtYWlsLm1pbWUucnN0CiAgICBlbWFpbC5oZWFkZXIucnN0CiAgICBlbWFpbC5jaGFyc2V0LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdCBiL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1NmQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QKQEAgLTAsMCArMSwxMjUgQEAKKzptb2Q6YGVuc3VyZXBpcGAgLS0tIEJvb3RzdHJhcHBpbmcgdGhlIGBgcGlwYGAgaW5zdGFsbGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBlbnN1cmVwaXAKKyAgIDpzeW5vcHNpczogQm9vdHN0cmFwcGluZyB0aGUgYGBwaXBgYCBpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24KKyAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuCisKK1RoZSA6bW9kOmBlbnN1cmVwaXBgIHBhY2thZ2UgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYm9vdHN0cmFwcGluZyB0aGUgYGBwaXBgYAoraW5zdGFsbGVyIGludG8gYW4gZXhpc3RpbmcgUHl0aG9uIGluc3RhbGxhdGlvbiBvciB2aXJ0dWFsIGVudmlyb25tZW50LiBUaGlzCitib290c3RyYXBwaW5nIGFwcHJvYWNoIHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgYGBwaXBgYCBpcyBhbiBpbmRlcGVuZGVudAorcHJvamVjdCB3aXRoIGl0cyBvd24gcmVsZWFzZSBjeWNsZSwgYW5kIHRoZSBsYXRlc3QgYXZhaWxhYmxlIHN0YWJsZSB2ZXJzaW9uCitpcyBidW5kbGVkIHdpdGggbWFpbnRlbmFuY2UgYW5kIGZlYXR1cmUgcmVsZWFzZXMgb2YgdGhlIENQeXRob24gcmVmZXJlbmNlCitpbnRlcnByZXRlci4KKworSW4gbW9zdCBjYXNlcywgZW5kIHVzZXJzIG9mIFB5dGhvbiBzaG91bGRuJ3QgbmVlZCB0byBpbnZva2UgdGhpcyBtb2R1bGUKK2RpcmVjdGx5IChhcyBgYHBpcGBgIHNob3VsZCBiZSBib290c3RyYXBwZWQgYnkgZGVmYXVsdCksIGJ1dCBpdCBtYXkgYmUKK25lZWRlZCBpZiBpbnN0YWxsaW5nIGBgcGlwYGAgd2FzIHNraXBwZWQgd2hlbiBpbnN0YWxsaW5nIFB5dGhvbiAob3IKK3doZW4gY3JlYXRpbmcgYSB2aXJ0dWFsIGVudmlyb25tZW50KSBvciBhZnRlciBleHBsaWNpdGx5IHVuaW5zdGFsbGluZworYGBwaXBgYC4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIG5vdGU6OgorCisgICBUaGlzIG1vZHVsZSAqZG9lcyBub3QqIGFjY2VzcyB0aGUgaW50ZXJuZXQuIEFsbCBvZiB0aGUgY29tcG9uZW50cworICAgbmVlZGVkIHRvIGJvb3RzdHJhcCBgYHBpcGBgIGFyZSBpbmNsdWRlZCBhcyBpbnRlcm5hbCBwYXJ0cyBvZiB0aGUKKyAgIHBhY2thZ2UuCisKKy4uIHNlZWFsc286OgorCisgICA6cmVmOmBpbnN0YWxsLWluZGV4YAorICAgICAgVGhlIGVuZCB1c2VyIGd1aWRlIGZvciBpbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcworCisgICA6cGVwOmA0NTNgOiBFeHBsaWNpdCBib290c3RyYXBwaW5nIG9mIHBpcCBpbiBQeXRob24gaW5zdGFsbGF0aW9ucworICAgICAgVGhlIG9yaWdpbmFsIHJhdGlvbmFsZSBhbmQgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBtb2R1bGUuCisKKworQ29tbWFuZCBsaW5lIGludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBpcyBpbnZva2VkIHVzaW5nIHRoZSBpbnRlcnByZXRlcidzIGBgLW1gYCBzd2l0Y2guCisKK1RoZSBzaW1wbGVzdCBwb3NzaWJsZSBpbnZvY2F0aW9uIGlzOjoKKworICAgIHB5dGhvbiAtbSBlbnN1cmVwaXAKKworVGhpcyBpbnZvY2F0aW9uIHdpbGwgaW5zdGFsbCBgYHBpcGBgIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZCwKK2J1dCBvdGhlcndpc2UgZG9lcyBub3RoaW5nLiBUbyBlbnN1cmUgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGBgcGlwYGAKK2lzIGF0IGxlYXN0IGFzIHJlY2VudCBhcyB0aGUgb25lIGJ1bmRsZWQgd2l0aCBgYGVuc3VyZXBpcGBgLCBwYXNzIHRoZQorYGAtLXVwZ3JhZGVgYCBvcHRpb246OgorCisgICAgcHl0aG9uIC1tIGVuc3VyZXBpcCAtLXVwZ3JhZGUKKworQnkgZGVmYXVsdCwgYGBwaXBgYCBpcyBpbnN0YWxsZWQgaW50byB0aGUgY3VycmVudCB2aXJ0dWFsIGVudmlyb25tZW50CisoaWYgb25lIGlzIGFjdGl2ZSkgb3IgaW50byB0aGUgc3lzdGVtIHNpdGUgcGFja2FnZXMgKGlmIHRoZXJlIGlzIG5vCithY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCkuIFRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb24gY2FuIGJlIGNvbnRyb2xsZWQKK3Rocm91Z2ggdHdvIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnM6CisKKyogYGAtLXJvb3QgPGRpcj5gYDogSW5zdGFsbHMgYGBwaXBgYCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcm9vdCBkaXJlY3RvcnkKKyAgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCAoaWYgYW55KQorICBvciB0aGUgZGVmYXVsdCByb290IGZvciB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uLgorKiBgYC0tdXNlcmBgOiBJbnN0YWxscyBgYHBpcGBgIGludG8gdGhlIHVzZXIgc2l0ZSBwYWNrYWdlcyBkaXJlY3RvcnkgcmF0aGVyCisgIHRoYW4gZ2xvYmFsbHkgZm9yIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHRoaXMgb3B0aW9uIGlzIG5vdAorICBwZXJtaXR0ZWQgaW5zaWRlIGFuIGFjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50KS4KKworQnkgZGVmYXVsdCwgdGhlIHNjcmlwdHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgKHdoZXJlCitYLlkgc3RhbmRzIGZvciB0aGUgdmVyc2lvbiBvZiBQeXRob24gdXNlZCB0byBpbnZva2UgYGBlbnN1cmVwaXBgYCkuIFRoZQorc2NyaXB0cyBpbnN0YWxsZWQgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCB0d28gYWRkaXRpb25hbCBjb21tYW5kIGxpbmUKK29wdGlvbnM6CisKKyogYGAtLWFsdGluc3RhbGxgYDogaWYgYW4gYWx0ZXJuYXRlIGluc3RhbGxhdGlvbiBpcyByZXF1ZXN0ZWQsIHRoZSBgYHBpcFhgYAorICBzY3JpcHQgd2lsbCAqbm90KiBiZSBpbnN0YWxsZWQuCisKKyogYGAtLWRlZmF1bHQtcGlwYGA6IGlmIGEgImRlZmF1bHQgcGlwIiBpbnN0YWxsYXRpb24gaXMgcmVxdWVzdGVkLCB0aGUKKyAgIGBgcGlwYGAgc2NyaXB0IHdpbGwgYmUgaW5zdGFsbGVkIGluIGFkZGl0aW9uIHRvIHRoZSB0d28gcmVndWxhciBzY3JpcHRzLgorCitQcm92aWRpbmcgYm90aCBvZiB0aGUgc2NyaXB0IHNlbGVjdGlvbiBvcHRpb25zIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24uCisKKworTW9kdWxlIEFQSQorLS0tLS0tLS0tLQorCis6bW9kOmBlbnN1cmVwaXBgIGV4cG9zZXMgdHdvIGZ1bmN0aW9ucyBmb3IgcHJvZ3JhbW1hdGljIHVzZToKKworLi4gZnVuY3Rpb246OiB2ZXJzaW9uKCkKKworICAgUmV0dXJucyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBidW5kbGVkIHZlcnNpb24gb2YgcGlwIHRoYXQgd2lsbCBiZQorICAgaW5zdGFsbGVkIHdoZW4gYm9vdHN0cmFwcGluZyBhbiBlbnZpcm9ubWVudC4KKworLi4gZnVuY3Rpb246OiBib290c3RyYXAocm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTApCisKKyAgIEJvb3RzdHJhcHMgYGBwaXBgYCBpbnRvIHRoZSBjdXJyZW50IG9yIGRlc2lnbmF0ZWQgZW52aXJvbm1lbnQuCisKKyAgICpyb290KiBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgcm9vdCBkaXJlY3RvcnkgdG8gaW5zdGFsbCByZWxhdGl2ZSB0by4KKyAgIElmICpyb290KiBpcyBOb25lLCB0aGVuIGluc3RhbGxhdGlvbiB1c2VzIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb24KKyAgIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KKworICAgKnVwZ3JhZGUqIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB1cGdyYWRlIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbgorICAgb2YgYW4gZWFybGllciB2ZXJzaW9uIG9mIGBgcGlwYGAgdG8gdGhlIGJ1bmRsZWQgdmVyc2lvbi4KKworICAgKnVzZXIqIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSB0aGUgdXNlciBzY2hlbWUgcmF0aGVyIHRoYW4gaW5zdGFsbGluZworICAgZ2xvYmFsbHkuCisKKyAgIEJ5IGRlZmF1bHQsIHRoZSBzY3JpcHRzIGBgcGlwWGBgIGFuZCBgYHBpcFguWWBgIHdpbGwgYmUgaW5zdGFsbGVkICh3aGVyZQorICAgWC5ZIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBQeXRob24pLgorCisgICBJZiAqYWx0aW5zdGFsbCogaXMgc2V0LCB0aGVuIGBgcGlwWGBgIHdpbGwgKm5vdCogYmUgaW5zdGFsbGVkLgorCisgICBJZiAqZGVmYXVsdF9waXAqIGlzIHNldCwgdGhlbiBgYHBpcGBgIHdpbGwgYmUgaW5zdGFsbGVkIGluIGFkZGl0aW9uIHRvCisgICB0aGUgdHdvIHJlZ3VsYXIgc2NyaXB0cy4KKworICAgU2V0dGluZyBib3RoICphbHRpbnN0YWxsKiBhbmQgKmRlZmF1bHRfcGlwKiB3aWxsIHRyaWdnZXIKKyAgIDpleGM6YFZhbHVlRXJyb3JgLgorCisgICAqdmVyYm9zaXR5KiBjb250cm9scyB0aGUgbGV2ZWwgb2Ygb3V0cHV0IHRvIDpkYXRhOmBzeXMuc3Rkb3V0YCBmcm9tIHRoZQorICAgYm9vdHN0cmFwcGluZyBvcGVyYXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYm9vdHN0cmFwcGluZyBwcm9jZXNzIG1heSBpbnN0YWxsIGFkZGl0aW9uYWwgbW9kdWxlcyByZXF1aXJlZCBieQorICAgICAgYGBwaXBgYCwgYnV0IG90aGVyIHNvZnR3YXJlIHNob3VsZCBub3QgYXNzdW1lIHRob3NlIGRlcGVuZGVuY2llcyB3aWxsCisgICAgICBhbHdheXMgYmUgcHJlc2VudCBieSBkZWZhdWx0IChhcyB0aGUgZGVwZW5kZW5jaWVzIG1heSBiZSByZW1vdmVkIGluIGEKKyAgICAgIGZ1dHVyZSB2ZXJzaW9uIG9mIGBgcGlwYGApLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW51bS5yc3QgYi9Eb2MvbGlicmFyeS9lbnVtLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjAzMGZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW51bS5yc3QKQEAgLTAsMCArMSw2ODggQEAKKzptb2Q6YGVudW1gIC0tLSBTdXBwb3J0IGZvciBlbnVtZXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogZW51bQorICAgOnN5bm9wc2lzOiBJbXBsZW1lbnRhdGlvbiBvZiBhbiBlbnVtZXJhdGlvbiBjbGFzcy4KKworLi4gOm1vZHVsZWF1dGhvcjo6IEV0aGFuIEZ1cm1hbiA8ZXRoYW5Ac3RvbmVsZWFmLnVzPgorLi4gOnNlY3Rpb25hdXRob3I6OiBCYXJyeSBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+LAorLi4gOnNlY3Rpb25hdXRob3I6OiBFbGkgQmVuZGVyc2t5IDxlbGliZW5AZ21haWwuY29tPiwKKy4uIDpzZWN0aW9uYXV0aG9yOjogRXRoYW4gRnVybWFuIDxldGhhbkBzdG9uZWxlYWYudXM+CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2VudW0ucHlgCisKKy0tLS0tLS0tLS0tLS0tLS0KKworQW4gZW51bWVyYXRpb24gaXMgYSBzZXQgb2Ygc3ltYm9saWMgbmFtZXMgKG1lbWJlcnMpIGJvdW5kIHRvIHVuaXF1ZSwgY29uc3RhbnQKK3ZhbHVlcy4gIFdpdGhpbiBhbiBlbnVtZXJhdGlvbiwgdGhlIG1lbWJlcnMgY2FuIGJlIGNvbXBhcmVkIGJ5IGlkZW50aXR5LCBhbmQKK3RoZSBlbnVtZXJhdGlvbiBpdHNlbGYgY2FuIGJlIGl0ZXJhdGVkIG92ZXIuCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgdHdvIGVudW1lcmF0aW9uIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdW5pcXVlCitzZXRzIG9mIG5hbWVzIGFuZCB2YWx1ZXM6IDpjbGFzczpgRW51bWAgYW5kIDpjbGFzczpgSW50RW51bWAuICBJdCBhbHNvIGRlZmluZXMKK29uZSBkZWNvcmF0b3IsIDpmdW5jOmB1bmlxdWVgLCB0aGF0IGVuc3VyZXMgb25seSB1bmlxdWUgbWVtYmVyIHZhbHVlcyBhcmUKK3ByZXNlbnQgaW4gYW4gZW51bWVyYXRpb24uCisKKworQ3JlYXRpbmcgYW4gRW51bQorLS0tLS0tLS0tLS0tLS0tLQorCitFbnVtZXJhdGlvbnMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIDprZXl3b3JkOmBjbGFzc2Agc3ludGF4LCB3aGljaCBtYWtlcyB0aGVtCitlYXN5IHRvIHJlYWQgYW5kIHdyaXRlLiAgQW4gYWx0ZXJuYXRpdmUgY3JlYXRpb24gbWV0aG9kIGlzIGRlc2NyaWJlZCBpbgorYEZ1bmN0aW9uYWwgQVBJYF8uICBUbyBkZWZpbmUgYW4gZW51bWVyYXRpb24sIHN1YmNsYXNzIDpjbGFzczpgRW51bWAgYXMKK2ZvbGxvd3M6OgorCisgICAgPj4+IGZyb20gZW51bSBpbXBvcnQgRW51bQorICAgID4+PiBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAuLi4gICAgIHJlZCA9IDEKKyAgICAuLi4gICAgIGdyZWVuID0gMgorICAgIC4uLiAgICAgYmx1ZSA9IDMKKyAgICAuLi4KKworLi4gbm90ZTo6IE5vbWVuY2xhdHVyZQorCisgIC0gVGhlIGNsYXNzIDpjbGFzczpgQ29sb3JgIGlzIGFuICplbnVtZXJhdGlvbiogKG9yICplbnVtKikKKyAgLSBUaGUgYXR0cmlidXRlcyA6YXR0cjpgQ29sb3IucmVkYCwgOmF0dHI6YENvbG9yLmdyZWVuYCwgZXRjLiwgYXJlCisgICAgKmVudW1lcmF0aW9uIG1lbWJlcnMqIChvciAqZW51bSBtZW1iZXJzKikuCisgIC0gVGhlIGVudW0gbWVtYmVycyBoYXZlICpuYW1lcyogYW5kICp2YWx1ZXMqICh0aGUgbmFtZSBvZgorICAgIDphdHRyOmBDb2xvci5yZWRgIGlzIGBgcmVkYGAsIHRoZSB2YWx1ZSBvZiA6YXR0cjpgQ29sb3IuYmx1ZWAgaXMKKyAgICBgYDNgYCwgZXRjLikKKworLi4gbm90ZTo6CisKKyAgICBFdmVuIHRob3VnaCB3ZSB1c2UgdGhlIDprZXl3b3JkOmBjbGFzc2Agc3ludGF4IHRvIGNyZWF0ZSBFbnVtcywgRW51bXMKKyAgICBhcmUgbm90IG5vcm1hbCBQeXRob24gY2xhc3Nlcy4gIFNlZSBgSG93IGFyZSBFbnVtcyBkaWZmZXJlbnQ/YF8gZm9yCisgICAgbW9yZSBkZXRhaWxzLgorCitFbnVtZXJhdGlvbiBtZW1iZXJzIGhhdmUgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uczo6CisKKyAgICA+Pj4gcHJpbnQoQ29sb3IucmVkKQorICAgIENvbG9yLnJlZAorCisuLi53aGlsZSB0aGVpciBgYHJlcHJgYCBoYXMgbW9yZSBpbmZvcm1hdGlvbjo6CisKKyAgICA+Pj4gcHJpbnQocmVwcihDb2xvci5yZWQpKQorICAgIDxDb2xvci5yZWQ6IDE+CisKK1RoZSAqdHlwZSogb2YgYW4gZW51bWVyYXRpb24gbWVtYmVyIGlzIHRoZSBlbnVtZXJhdGlvbiBpdCBiZWxvbmdzIHRvOjoKKworICAgID4+PiB0eXBlKENvbG9yLnJlZCkKKyAgICA8ZW51bSAnQ29sb3InPgorICAgID4+PiBpc2luc3RhbmNlKENvbG9yLmdyZWVuLCBDb2xvcikKKyAgICBUcnVlCisgICAgPj4+CisKK0VudW0gbWVtYmVycyBhbHNvIGhhdmUgYSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlaXIgaXRlbSBuYW1lOjoKKworICAgID4+PiBwcmludChDb2xvci5yZWQubmFtZSkKKyAgICByZWQKKworRW51bWVyYXRpb25zIHN1cHBvcnQgaXRlcmF0aW9uLCBpbiBkZWZpbml0aW9uIG9yZGVyOjoKKworICAgID4+PiBjbGFzcyBTaGFrZShFbnVtKToKKyAgICAuLi4gICAgIHZhbmlsbGEgPSA3CisgICAgLi4uICAgICBjaG9jb2xhdGUgPSA0CisgICAgLi4uICAgICBjb29raWVzID0gOQorICAgIC4uLiAgICAgbWludCA9IDMKKyAgICAuLi4KKyAgICA+Pj4gZm9yIHNoYWtlIGluIFNoYWtlOgorICAgIC4uLiAgICAgcHJpbnQoc2hha2UpCisgICAgLi4uCisgICAgU2hha2UudmFuaWxsYQorICAgIFNoYWtlLmNob2NvbGF0ZQorICAgIFNoYWtlLmNvb2tpZXMKKyAgICBTaGFrZS5taW50CisKK0VudW1lcmF0aW9uIG1lbWJlcnMgYXJlIGhhc2hhYmxlLCBzbyB0aGV5IGNhbiBiZSB1c2VkIGluIGRpY3Rpb25hcmllcyBhbmQgc2V0czo6CisKKyAgICA+Pj4gYXBwbGVzID0ge30KKyAgICA+Pj4gYXBwbGVzW0NvbG9yLnJlZF0gPSAncmVkIGRlbGljaW91cycKKyAgICA+Pj4gYXBwbGVzW0NvbG9yLmdyZWVuXSA9ICdncmFubnkgc21pdGgnCisgICAgPj4+IGFwcGxlcyA9PSB7Q29sb3IucmVkOiAncmVkIGRlbGljaW91cycsIENvbG9yLmdyZWVuOiAnZ3Jhbm55IHNtaXRoJ30KKyAgICBUcnVlCisKKworUHJvZ3JhbW1hdGljIGFjY2VzcyB0byBlbnVtZXJhdGlvbiBtZW1iZXJzIGFuZCB0aGVpciBhdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZXRpbWVzIGl0J3MgdXNlZnVsIHRvIGFjY2VzcyBtZW1iZXJzIGluIGVudW1lcmF0aW9ucyBwcm9ncmFtbWF0aWNhbGx5IChpLmUuCitzaXR1YXRpb25zIHdoZXJlIGBgQ29sb3IucmVkYGAgd29uJ3QgZG8gYmVjYXVzZSB0aGUgZXhhY3QgY29sb3IgaXMgbm90IGtub3duCithdCBwcm9ncmFtLXdyaXRpbmcgdGltZSkuICBgYEVudW1gYCBhbGxvd3Mgc3VjaCBhY2Nlc3M6OgorCisgICAgPj4+IENvbG9yKDEpCisgICAgPENvbG9yLnJlZDogMT4KKyAgICA+Pj4gQ29sb3IoMykKKyAgICA8Q29sb3IuYmx1ZTogMz4KKworSWYgeW91IHdhbnQgdG8gYWNjZXNzIGVudW0gbWVtYmVycyBieSAqbmFtZSosIHVzZSBpdGVtIGFjY2Vzczo6CisKKyAgICA+Pj4gQ29sb3JbJ3JlZCddCisgICAgPENvbG9yLnJlZDogMT4KKyAgICA+Pj4gQ29sb3JbJ2dyZWVuJ10KKyAgICA8Q29sb3IuZ3JlZW46IDI+CisKK0lmIGhhdmUgYW4gZW51bSBtZW1iZXIgYW5kIG5lZWQgaXRzIDphdHRyOmBuYW1lYCBvciA6YXR0cjpgdmFsdWVgOjoKKworICAgID4+PiBtZW1iZXIgPSBDb2xvci5yZWQKKyAgICA+Pj4gbWVtYmVyLm5hbWUKKyAgICAncmVkJworICAgID4+PiBtZW1iZXIudmFsdWUKKyAgICAxCisKKworRHVwbGljYXRpbmcgZW51bSBtZW1iZXJzIGFuZCB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hhdmluZyB0d28gZW51bSBtZW1iZXJzIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBpbnZhbGlkOjoKKworICAgID4+PiBjbGFzcyBTaGFwZShFbnVtKToKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4gICAgIHNxdWFyZSA9IDMKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gcmV1c2Uga2V5OiAnc3F1YXJlJworCitIb3dldmVyLCB0d28gZW51bSBtZW1iZXJzIGFyZSBhbGxvd2VkIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBHaXZlbiB0d28gbWVtYmVycworQSBhbmQgQiB3aXRoIHRoZSBzYW1lIHZhbHVlIChhbmQgQSBkZWZpbmVkIGZpcnN0KSwgQiBpcyBhbiBhbGlhcyB0byBBLiAgQnktdmFsdWUKK2xvb2t1cCBvZiB0aGUgdmFsdWUgb2YgQSBhbmQgQiB3aWxsIHJldHVybiBBLiAgQnktbmFtZSBsb29rdXAgb2YgQiB3aWxsIGFsc28KK3JldHVybiBBOjoKKworICAgID4+PiBjbGFzcyBTaGFwZShFbnVtKToKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4gICAgIGRpYW1vbmQgPSAxCisgICAgLi4uICAgICBjaXJjbGUgPSAzCisgICAgLi4uICAgICBhbGlhc19mb3Jfc3F1YXJlID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZS5zcXVhcmUKKyAgICA8U2hhcGUuc3F1YXJlOiAyPgorICAgID4+PiBTaGFwZS5hbGlhc19mb3Jfc3F1YXJlCisgICAgPFNoYXBlLnNxdWFyZTogMj4KKyAgICA+Pj4gU2hhcGUoMikKKyAgICA8U2hhcGUuc3F1YXJlOiAyPgorCisuLiBub3RlOjoKKworICAgIEF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBhbHJlYWR5CisgICAgZGVmaW5lZCBhdHRyaWJ1dGUgKGFub3RoZXIgbWVtYmVyLCBhIG1ldGhvZCwgZXRjLikgb3IgYXR0ZW1wdGluZyB0byBjcmVhdGUKKyAgICBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgbWVtYmVyIGlzIG5vdCBhbGxvd2VkLgorCisKK0Vuc3VyaW5nIHVuaXF1ZSBlbnVtZXJhdGlvbiB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgZW51bWVyYXRpb25zIGFsbG93IG11bHRpcGxlIG5hbWVzIGFzIGFsaWFzZXMgZm9yIHRoZSBzYW1lIHZhbHVlLgorV2hlbiB0aGlzIGJlaGF2aW9yIGlzbid0IGRlc2lyZWQsIHRoZSBmb2xsb3dpbmcgZGVjb3JhdG9yIGNhbiBiZSB1c2VkIHRvCitlbnN1cmUgZWFjaCB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBpbiB0aGUgZW51bWVyYXRpb246CisKKy4uIGRlY29yYXRvcjo6IHVuaXF1ZQorCitBIDprZXl3b3JkOmBjbGFzc2AgZGVjb3JhdG9yIHNwZWNpZmljYWxseSBmb3IgZW51bWVyYXRpb25zLiAgSXQgc2VhcmNoZXMgYW4KK2VudW1lcmF0aW9uJ3MgOmF0dHI6YF9fbWVtYmVyc19fYCBnYXRoZXJpbmcgYW55IGFsaWFzZXMgaXQgZmluZHM7IGlmIGFueSBhcmUKK2ZvdW5kIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCB3aXRoIHRoZSBkZXRhaWxzOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEVudW0sIHVuaXF1ZQorICAgID4+PiBAdW5pcXVlCisgICAgLi4uIGNsYXNzIE1pc3Rha2UoRW51bSk6CisgICAgLi4uICAgICBvbmUgPSAxCisgICAgLi4uICAgICB0d28gPSAyCisgICAgLi4uICAgICB0aHJlZSA9IDMKKyAgICAuLi4gICAgIGZvdXIgPSAzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGR1cGxpY2F0ZSB2YWx1ZXMgZm91bmQgaW4gPGVudW0gJ01pc3Rha2UnPjogZm91ciAtPiB0aHJlZQorCisKK0l0ZXJhdGlvbgorLS0tLS0tLS0tCisKK0l0ZXJhdGluZyBvdmVyIHRoZSBtZW1iZXJzIG9mIGFuIGVudW0gZG9lcyBub3QgcHJvdmlkZSB0aGUgYWxpYXNlczo6CisKKyAgICA+Pj4gbGlzdChTaGFwZSkKKyAgICBbPFNoYXBlLnNxdWFyZTogMj4sIDxTaGFwZS5kaWFtb25kOiAxPiwgPFNoYXBlLmNpcmNsZTogMz5dCisKK1RoZSBzcGVjaWFsIGF0dHJpYnV0ZSBgYF9fbWVtYmVyc19fYGAgaXMgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IG1hcHBpbmcgbmFtZXMKK3RvIG1lbWJlcnMuICBJdCBpbmNsdWRlcyBhbGwgbmFtZXMgZGVmaW5lZCBpbiB0aGUgZW51bWVyYXRpb24sIGluY2x1ZGluZyB0aGUKK2FsaWFzZXM6OgorCisgICAgPj4+IGZvciBuYW1lLCBtZW1iZXIgaW4gU2hhcGUuX19tZW1iZXJzX18uaXRlbXMoKToKKyAgICAuLi4gICAgIG5hbWUsIG1lbWJlcgorICAgIC4uLgorICAgICgnc3F1YXJlJywgPFNoYXBlLnNxdWFyZTogMj4pCisgICAgKCdkaWFtb25kJywgPFNoYXBlLmRpYW1vbmQ6IDE+KQorICAgICgnY2lyY2xlJywgPFNoYXBlLmNpcmNsZTogMz4pCisgICAgKCdhbGlhc19mb3Jfc3F1YXJlJywgPFNoYXBlLnNxdWFyZTogMj4pCisKK1RoZSBgYF9fbWVtYmVyc19fYGAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIGZvciBkZXRhaWxlZCBwcm9ncmFtbWF0aWMgYWNjZXNzIHRvCit0aGUgZW51bWVyYXRpb24gbWVtYmVycy4gIEZvciBleGFtcGxlLCBmaW5kaW5nIGFsbCB0aGUgYWxpYXNlczo6CisKKyAgICA+Pj4gW25hbWUgZm9yIG5hbWUsIG1lbWJlciBpbiBTaGFwZS5fX21lbWJlcnNfXy5pdGVtcygpIGlmIG1lbWJlci5uYW1lICE9IG5hbWVdCisgICAgWydhbGlhc19mb3Jfc3F1YXJlJ10KKworCitDb21wYXJpc29ucworLS0tLS0tLS0tLS0KKworRW51bWVyYXRpb24gbWVtYmVycyBhcmUgY29tcGFyZWQgYnkgaWRlbnRpdHk6OgorCisgICAgPj4+IENvbG9yLnJlZCBpcyBDb2xvci5yZWQKKyAgICBUcnVlCisgICAgPj4+IENvbG9yLnJlZCBpcyBDb2xvci5ibHVlCisgICAgRmFsc2UKKyAgICA+Pj4gQ29sb3IucmVkIGlzIG5vdCBDb2xvci5ibHVlCisgICAgVHJ1ZQorCitPcmRlcmVkIGNvbXBhcmlzb25zIGJldHdlZW4gZW51bWVyYXRpb24gdmFsdWVzIGFyZSAqbm90KiBzdXBwb3J0ZWQuICBFbnVtCittZW1iZXJzIGFyZSBub3QgaW50ZWdlcnMgKGJ1dCBzZWUgYEludEVudW1gXyBiZWxvdyk6OgorCisgICAgPj4+IENvbG9yLnJlZCA8IENvbG9yLmJsdWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFR5cGVFcnJvcjogdW5vcmRlcmFibGUgdHlwZXM6IENvbG9yKCkgPCBDb2xvcigpCisKK0VxdWFsaXR5IGNvbXBhcmlzb25zIGFyZSBkZWZpbmVkIHRob3VnaDo6CisKKyAgICA+Pj4gQ29sb3IuYmx1ZSA9PSBDb2xvci5yZWQKKyAgICBGYWxzZQorICAgID4+PiBDb2xvci5ibHVlICE9IENvbG9yLnJlZAorICAgIFRydWUKKyAgICA+Pj4gQ29sb3IuYmx1ZSA9PSBDb2xvci5ibHVlCisgICAgVHJ1ZQorCitDb21wYXJpc29ucyBhZ2FpbnN0IG5vbi1lbnVtZXJhdGlvbiB2YWx1ZXMgd2lsbCBhbHdheXMgY29tcGFyZSBub3QgZXF1YWwKKyhhZ2FpbiwgOmNsYXNzOmBJbnRFbnVtYCB3YXMgZXhwbGljaXRseSBkZXNpZ25lZCB0byBiZWhhdmUgZGlmZmVyZW50bHksIHNlZQorYmVsb3cpOjoKKworICAgID4+PiBDb2xvci5ibHVlID09IDIKKyAgICBGYWxzZQorCisKK0FsbG93ZWQgbWVtYmVycyBhbmQgYXR0cmlidXRlcyBvZiBlbnVtZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGV4YW1wbGVzIGFib3ZlIHVzZSBpbnRlZ2VycyBmb3IgZW51bWVyYXRpb24gdmFsdWVzLiAgVXNpbmcgaW50ZWdlcnMgaXMKK3Nob3J0IGFuZCBoYW5keSAoYW5kIHByb3ZpZGVkIGJ5IGRlZmF1bHQgYnkgdGhlIGBGdW5jdGlvbmFsIEFQSWBfKSwgYnV0IG5vdAorc3RyaWN0bHkgZW5mb3JjZWQuICBJbiB0aGUgdmFzdCBtYWpvcml0eSBvZiB1c2UtY2FzZXMsIG9uZSBkb2Vzbid0IGNhcmUgd2hhdAordGhlIGFjdHVhbCB2YWx1ZSBvZiBhbiBlbnVtZXJhdGlvbiBpcy4gIEJ1dCBpZiB0aGUgdmFsdWUgKmlzKiBpbXBvcnRhbnQsCitlbnVtZXJhdGlvbnMgY2FuIGhhdmUgYXJiaXRyYXJ5IHZhbHVlcy4KKworRW51bWVyYXRpb25zIGFyZSBQeXRob24gY2xhc3NlcywgYW5kIGNhbiBoYXZlIG1ldGhvZHMgYW5kIHNwZWNpYWwgbWV0aG9kcyBhcwordXN1YWwuICBJZiB3ZSBoYXZlIHRoaXMgZW51bWVyYXRpb246OgorCisgICAgPj4+IGNsYXNzIE1vb2QoRW51bSk6CisgICAgLi4uICAgICBmdW5reSA9IDEKKyAgICAuLi4gICAgIGhhcHB5ID0gMworICAgIC4uLgorICAgIC4uLiAgICAgZGVmIGRlc2NyaWJlKHNlbGYpOgorICAgIC4uLiAgICAgICAgICMgc2VsZiBpcyB0aGUgbWVtYmVyIGhlcmUKKyAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5uYW1lLCBzZWxmLnZhbHVlCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gJ215IGN1c3RvbSBzdHIhIHswfScuZm9ybWF0KHNlbGYudmFsdWUpCisgICAgLi4uCisgICAgLi4uICAgICBAY2xhc3NtZXRob2QKKyAgICAuLi4gICAgIGRlZiBmYXZvcml0ZV9tb29kKGNscyk6CisgICAgLi4uICAgICAgICAgIyBjbHMgaGVyZSBpcyB0aGUgZW51bWVyYXRpb24KKyAgICAuLi4gICAgICAgICByZXR1cm4gY2xzLmhhcHB5CisgICAgLi4uCisKK1RoZW46OgorCisgICAgPj4+IE1vb2QuZmF2b3JpdGVfbW9vZCgpCisgICAgPE1vb2QuaGFwcHk6IDM+CisgICAgPj4+IE1vb2QuaGFwcHkuZGVzY3JpYmUoKQorICAgICgnaGFwcHknLCAzKQorICAgID4+PiBzdHIoTW9vZC5mdW5reSkKKyAgICAnbXkgY3VzdG9tIHN0ciEgMScKKworVGhlIHJ1bGVzIGZvciB3aGF0IGlzIGFsbG93ZWQgYXJlIGFzIGZvbGxvd3M6IF9zdW5kZXJfIG5hbWVzIChzdGFydGluZyBhbmQKK2VuZGluZyB3aXRoIGEgc2luZ2xlIHVuZGVyc2NvcmUpIGFyZSByZXNlcnZlZCBieSBlbnVtIGFuZCBjYW5ub3QgYmUgdXNlZDsKK2FsbCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgd2l0aGluIGFuIGVudW1lcmF0aW9uIHdpbGwgYmVjb21lIG1lbWJlcnMgb2YgdGhpcworZW51bWVyYXRpb24sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAqX19kdW5kZXJfXyogbmFtZXMgYW5kIGRlc2NyaXB0b3JzIChtZXRob2RzCithcmUgYWxzbyBkZXNjcmlwdG9ycykuCisKK05vdGU6ICBpZiB5b3VyIGVudW1lcmF0aW9uIGRlZmluZXMgOm1ldGg6YF9fbmV3X19gIGFuZC9vciA6bWV0aDpgX19pbml0X19gIHRoZW4KK3doYXRldmVyIHZhbHVlKHMpIHdlcmUgZ2l2ZW4gdG8gdGhlIGVudW0gbWVtYmVyIHdpbGwgYmUgcGFzc2VkIGludG8gdGhvc2UKK21ldGhvZHMuICBTZWUgYFBsYW5ldGBfIGZvciBhbiBleGFtcGxlLgorCisKK1Jlc3RyaWN0ZWQgc3ViY2xhc3Npbmcgb2YgZW51bWVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdWJjbGFzc2luZyBhbiBlbnVtZXJhdGlvbiBpcyBhbGxvd2VkIG9ubHkgaWYgdGhlIGVudW1lcmF0aW9uIGRvZXMgbm90IGRlZmluZQorYW55IG1lbWJlcnMuICBTbyB0aGlzIGlzIGZvcmJpZGRlbjo6CisKKyAgICA+Pj4gY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAuLi4gICAgIHBpbmsgPSAxNworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBUeXBlRXJyb3I6IENhbm5vdCBleHRlbmQgZW51bWVyYXRpb25zCisKK0J1dCB0aGlzIGlzIGFsbG93ZWQ6OgorCisgICAgPj4+IGNsYXNzIEZvbyhFbnVtKToKKyAgICAuLi4gICAgIGRlZiBzb21lX2JlaGF2aW9yKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQmFyKEZvbyk6CisgICAgLi4uICAgICBoYXBweSA9IDEKKyAgICAuLi4gICAgIHNhZCA9IDIKKyAgICAuLi4KKworQWxsb3dpbmcgc3ViY2xhc3Npbmcgb2YgZW51bXMgdGhhdCBkZWZpbmUgbWVtYmVycyB3b3VsZCBsZWFkIHRvIGEgdmlvbGF0aW9uIG9mCitzb21lIGltcG9ydGFudCBpbnZhcmlhbnRzIG9mIHR5cGVzIGFuZCBpbnN0YW5jZXMuICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWFrZXMKK3NlbnNlIHRvIGFsbG93IHNoYXJpbmcgc29tZSBjb21tb24gYmVoYXZpb3IgYmV0d2VlbiBhIGdyb3VwIG9mIGVudW1lcmF0aW9ucy4KKyhTZWUgYE9yZGVyZWRFbnVtYF8gZm9yIGFuIGV4YW1wbGUuKQorCisKK1BpY2tsaW5nCistLS0tLS0tLQorCitFbnVtZXJhdGlvbnMgY2FuIGJlIHBpY2tsZWQgYW5kIHVucGlja2xlZDo6CisKKyAgICA+Pj4gZnJvbSB0ZXN0LnRlc3RfZW51bSBpbXBvcnQgRnJ1aXQKKyAgICA+Pj4gZnJvbSBwaWNrbGUgaW1wb3J0IGR1bXBzLCBsb2FkcworICAgID4+PiBGcnVpdC50b21hdG8gaXMgbG9hZHMoZHVtcHMoRnJ1aXQudG9tYXRvKSkKKyAgICBUcnVlCisKK1RoZSB1c3VhbCByZXN0cmljdGlvbnMgZm9yIHBpY2tsaW5nIGFwcGx5OiBwaWNrbGFibGUgZW51bXMgbXVzdCBiZSBkZWZpbmVkIGluCit0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlLCBzaW5jZSB1bnBpY2tsaW5nIHJlcXVpcmVzIHRoZW0gdG8gYmUgaW1wb3J0YWJsZQorZnJvbSB0aGF0IG1vZHVsZS4KKworLi4gd2FybmluZzo6CisKKyAgICBJbiBvcmRlciB0byBzdXBwb3J0IHRoZSBzaW5nbGV0b24gbmF0dXJlIG9mIGVudW1lcmF0aW9uIG1lbWJlcnMsIHBpY2tsZQorICAgIHByb3RvY29sIHZlcnNpb24gMiBvciBoaWdoZXIgbXVzdCBiZSB1c2VkLgorCisKK0Z1bmN0aW9uYWwgQVBJCistLS0tLS0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmBFbnVtYCBjbGFzcyBpcyBjYWxsYWJsZSwgcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCBBUEk6OgorCisgICAgPj4+IEFuaW1hbCA9IEVudW0oJ0FuaW1hbCcsICdhbnQgYmVlIGNhdCBkb2cnKQorICAgID4+PiBBbmltYWwKKyAgICA8ZW51bSAnQW5pbWFsJz4KKyAgICA+Pj4gQW5pbWFsLmFudAorICAgIDxBbmltYWwuYW50OiAxPgorICAgID4+PiBBbmltYWwuYW50LnZhbHVlCisgICAgMQorICAgID4+PiBsaXN0KEFuaW1hbCkKKyAgICBbPEFuaW1hbC5hbnQ6IDE+LCA8QW5pbWFsLmJlZTogMj4sIDxBbmltYWwuY2F0OiAzPiwgPEFuaW1hbC5kb2c6IDQ+XQorCitUaGUgc2VtYW50aWNzIG9mIHRoaXMgQVBJIHJlc2VtYmxlIDpjbGFzczpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgLiBUaGUgZmlyc3QKK2FyZ3VtZW50IG9mIHRoZSBjYWxsIHRvIDpjbGFzczpgRW51bWAgaXMgdGhlIG5hbWUgb2YgdGhlIGVudW1lcmF0aW9uLgorCitUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSAqc291cmNlKiBvZiBlbnVtZXJhdGlvbiBtZW1iZXIgbmFtZXMuICBJdCBjYW4gYmUgYQord2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nIG9mIG5hbWVzLCBhIHNlcXVlbmNlIG9mIG5hbWVzLCBhIHNlcXVlbmNlIG9mCisyLXR1cGxlcyB3aXRoIGtleS92YWx1ZSBwYWlycywgb3IgYSBtYXBwaW5nIChlLmcuIGRpY3Rpb25hcnkpIG9mIG5hbWVzIHRvCit2YWx1ZXMuICBUaGUgbGFzdCB0d28gb3B0aW9ucyBlbmFibGUgYXNzaWduaW5nIGFyYml0cmFyeSB2YWx1ZXMgdG8KK2VudW1lcmF0aW9uczsgdGhlIG90aGVycyBhdXRvLWFzc2lnbiBpbmNyZWFzaW5nIGludGVnZXJzIHN0YXJ0aW5nIHdpdGggMS4gIEEKK25ldyBjbGFzcyBkZXJpdmVkIGZyb20gOmNsYXNzOmBFbnVtYCBpcyByZXR1cm5lZC4gIEluIG90aGVyIHdvcmRzLCB0aGUgYWJvdmUKK2Fzc2lnbm1lbnQgdG8gOmNsYXNzOmBBbmltYWxgIGlzIGVxdWl2YWxlbnQgdG86OgorCisgICAgPj4+IGNsYXNzIEFuaW1hbHMoRW51bSk6CisgICAgLi4uICAgICBhbnQgPSAxCisgICAgLi4uICAgICBiZWUgPSAyCisgICAgLi4uICAgICBjYXQgPSAzCisgICAgLi4uICAgICBkb2cgPSA0CisgICAgLi4uCisKK1RoZSByZWFzb24gZm9yIGRlZmF1bHRpbmcgdG8gYGAxYGAgYXMgdGhlIHN0YXJ0aW5nIG51bWJlciBhbmQgbm90IGBgMGBgIGlzCit0aGF0IGBgMGBgIGlzIGBgRmFsc2VgYCBpbiBhIGJvb2xlYW4gc2Vuc2UsIGJ1dCBlbnVtIG1lbWJlcnMgYWxsIGV2YWx1YXRlCit0byBgYFRydWVgYC4KKworUGlja2xpbmcgZW51bXMgY3JlYXRlZCB3aXRoIHRoZSBmdW5jdGlvbmFsIEFQSSBjYW4gYmUgdHJpY2t5IGFzIGZyYW1lIHN0YWNrCitpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSB1c2VkIHRvIHRyeSBhbmQgZmlndXJlIG91dCB3aGljaCBtb2R1bGUgdGhlCitlbnVtZXJhdGlvbiBpcyBiZWluZyBjcmVhdGVkIGluIChlLmcuIGl0IHdpbGwgZmFpbCBpZiB5b3UgdXNlIGEgdXRpbGl0eQorZnVuY3Rpb24gaW4gc2VwYXJhdGUgbW9kdWxlLCBhbmQgYWxzbyBtYXkgbm90IHdvcmsgb24gSXJvblB5dGhvbiBvciBKeXRob24pLgorVGhlIHNvbHV0aW9uIGlzIHRvIHNwZWNpZnkgdGhlIG1vZHVsZSBuYW1lIGV4cGxpY2l0bHkgYXMgZm9sbG93czo6CisKKyAgICA+Pj4gQW5pbWFscyA9IEVudW0oJ0FuaW1hbHMnLCAnYW50IGJlZSBjYXQgZG9nJywgbW9kdWxlPV9fbmFtZV9fKQorCitEZXJpdmVkIEVudW1lcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50RW51bQorXl5eXl5eXgorCitBIHZhcmlhdGlvbiBvZiA6Y2xhc3M6YEVudW1gIGlzIHByb3ZpZGVkIHdoaWNoIGlzIGFsc28gYSBzdWJjbGFzcyBvZgorOmNsYXNzOmBpbnRgLiAgTWVtYmVycyBvZiBhbiA6Y2xhc3M6YEludEVudW1gIGNhbiBiZSBjb21wYXJlZCB0byBpbnRlZ2VyczsKK2J5IGV4dGVuc2lvbiwgaW50ZWdlciBlbnVtZXJhdGlvbnMgb2YgZGlmZmVyZW50IHR5cGVzIGNhbiBhbHNvIGJlIGNvbXBhcmVkCit0byBlYWNoIG90aGVyOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEludEVudW0KKyAgICA+Pj4gY2xhc3MgU2hhcGUoSW50RW51bSk6CisgICAgLi4uICAgICBjaXJjbGUgPSAxCisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IGNsYXNzIFJlcXVlc3QoSW50RW51bSk6CisgICAgLi4uICAgICBwb3N0ID0gMQorICAgIC4uLiAgICAgZ2V0ID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZSA9PSAxCisgICAgRmFsc2UKKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IDEKKyAgICBUcnVlCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSBSZXF1ZXN0LnBvc3QKKyAgICBUcnVlCisKK0hvd2V2ZXIsIHRoZXkgc3RpbGwgY2FuJ3QgYmUgY29tcGFyZWQgdG8gc3RhbmRhcmQgOmNsYXNzOmBFbnVtYCBlbnVtZXJhdGlvbnM6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEludEVudW0pOgorICAgIC4uLiAgICAgY2lyY2xlID0gMQorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAuLi4gICAgIHJlZCA9IDEKKyAgICAuLi4gICAgIGdyZWVuID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gQ29sb3IucmVkCisgICAgRmFsc2UKKworOmNsYXNzOmBJbnRFbnVtYCB2YWx1ZXMgYmVoYXZlIGxpa2UgaW50ZWdlcnMgaW4gb3RoZXIgd2F5cyB5b3UnZCBleHBlY3Q6OgorCisgICAgPj4+IGludChTaGFwZS5jaXJjbGUpCisgICAgMQorICAgID4+PiBbJ2EnLCAnYicsICdjJ11bU2hhcGUuY2lyY2xlXQorICAgICdiJworICAgID4+PiBbaSBmb3IgaSBpbiByYW5nZShTaGFwZS5zcXVhcmUpXQorICAgIFswLCAxXQorCitGb3IgdGhlIHZhc3QgbWFqb3JpdHkgb2YgY29kZSwgOmNsYXNzOmBFbnVtYCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCwKK3NpbmNlIDpjbGFzczpgSW50RW51bWAgYnJlYWtzIHNvbWUgc2VtYW50aWMgcHJvbWlzZXMgb2YgYW4gZW51bWVyYXRpb24gKGJ5CitiZWluZyBjb21wYXJhYmxlIHRvIGludGVnZXJzLCBhbmQgdGh1cyBieSB0cmFuc2l0aXZpdHkgdG8gb3RoZXIKK3VucmVsYXRlZCBlbnVtZXJhdGlvbnMpLiAgSXQgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBzcGVjaWFsIGNhc2VzIHdoZXJlCit0aGVyZSdzIG5vIG90aGVyIGNob2ljZTsgZm9yIGV4YW1wbGUsIHdoZW4gaW50ZWdlciBjb25zdGFudHMgYXJlCityZXBsYWNlZCB3aXRoIGVudW1lcmF0aW9ucyBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aCBjb2RlCit0aGF0IHN0aWxsIGV4cGVjdHMgaW50ZWdlcnMuCisKKworT3RoZXJzCiteXl5eXl4KKworV2hpbGUgOmNsYXNzOmBJbnRFbnVtYCBpcyBwYXJ0IG9mIHRoZSA6bW9kOmBlbnVtYCBtb2R1bGUsIGl0IHdvdWxkIGJlIHZlcnkKK3NpbXBsZSB0byBpbXBsZW1lbnQgaW5kZXBlbmRlbnRseTo6CisKKyAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgIHBhc3MKKworVGhpcyBkZW1vbnN0cmF0ZXMgaG93IHNpbWlsYXIgZGVyaXZlZCBlbnVtZXJhdGlvbnMgY2FuIGJlIGRlZmluZWQ7IGZvciBleGFtcGxlCithIDpjbGFzczpgU3RyRW51bWAgdGhhdCBtaXhlcyBpbiA6Y2xhc3M6YHN0cmAgaW5zdGVhZCBvZiA6Y2xhc3M6YGludGAuCisKK1NvbWUgcnVsZXM6CisKKzEuIFdoZW4gc3ViY2xhc3NpbmcgOmNsYXNzOmBFbnVtYCwgbWl4LWluIHR5cGVzIG11c3QgYXBwZWFyIGJlZm9yZQorICAgOmNsYXNzOmBFbnVtYCBpdHNlbGYgaW4gdGhlIHNlcXVlbmNlIG9mIGJhc2VzLCBhcyBpbiB0aGUgOmNsYXNzOmBJbnRFbnVtYAorICAgZXhhbXBsZSBhYm92ZS4KKzIuIFdoaWxlIDpjbGFzczpgRW51bWAgY2FuIGhhdmUgbWVtYmVycyBvZiBhbnkgdHlwZSwgb25jZSB5b3UgbWl4IGluIGFuCisgICBhZGRpdGlvbmFsIHR5cGUsIGFsbCB0aGUgbWVtYmVycyBtdXN0IGhhdmUgdmFsdWVzIG9mIHRoYXQgdHlwZSwgZS5nLgorICAgOmNsYXNzOmBpbnRgIGFib3ZlLiAgVGhpcyByZXN0cmljdGlvbiBkb2VzIG5vdCBhcHBseSB0byBtaXgtaW5zIHdoaWNoIG9ubHkKKyAgIGFkZCBtZXRob2RzIGFuZCBkb24ndCBzcGVjaWZ5IGFub3RoZXIgZGF0YSB0eXBlIHN1Y2ggYXMgOmNsYXNzOmBpbnRgIG9yCisgICA6Y2xhc3M6YHN0cmAuCiszLiBXaGVuIGFub3RoZXIgZGF0YSB0eXBlIGlzIG1peGVkIGluLCB0aGUgOmF0dHI6YHZhbHVlYCBhdHRyaWJ1dGUgaXMgKm5vdCB0aGUKKyAgIHNhbWUqIGFzIHRoZSBlbnVtIG1lbWJlciBpdHNlbGYsIGFsdGhvdWdoIGl0IGlzIGVxdWl2YWxhbnQgYW5kIHdpbGwgY29tcGFyZQorICAgZXF1YWwuCis0LiAlLXN0eWxlIGZvcm1hdHRpbmc6ICBgJXNgIGFuZCBgJXJgIGNhbGwgOmNsYXNzOmBFbnVtYCdzIDptZXRoOmBfX3N0cl9fYCBhbmQKKyAgIDptZXRoOmBfX3JlcHJfX2AgcmVzcGVjdGl2ZWx5OyBvdGhlciBjb2RlcyAoc3VjaCBhcyBgJWlgIG9yIGAlaGAgZm9yCisgICBJbnRFbnVtKSB0cmVhdCB0aGUgZW51bSBtZW1iZXIgYXMgaXRzIG1peGVkLWluIHR5cGUuCis1LiA6bWV0aDpgc3RyLl9fZm9ybWF0X19gIChvciA6ZnVuYzpgZm9ybWF0YCkgd2lsbCB1c2UgdGhlIG1peGVkLWluCisgICB0eXBlJ3MgOm1ldGg6YF9fZm9ybWF0X19gLiAgSWYgdGhlIDpjbGFzczpgRW51bWAncyA6ZnVuYzpgc3RyYCBvcgorICAgOmZ1bmM6YHJlcHJgIGlzIGRlc2lyZWQgdXNlIHRoZSBgIXNgIG9yIGAhcmAgOmNsYXNzOmBzdHJgIGZvcm1hdCBjb2Rlcy4KKworCitJbnRlcmVzdGluZyBleGFtcGxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpbGUgOmNsYXNzOmBFbnVtYCBhbmQgOmNsYXNzOmBJbnRFbnVtYCBhcmUgZXhwZWN0ZWQgdG8gY292ZXIgdGhlIG1ham9yaXR5IG9mCit1c2UtY2FzZXMsIHRoZXkgY2Fubm90IGNvdmVyIHRoZW0gYWxsLiAgSGVyZSBhcmUgcmVjaXBlcyBmb3Igc29tZSBkaWZmZXJlbnQKK3R5cGVzIG9mIGVudW1lcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGRpcmVjdGx5LCBvciBhcyBleGFtcGxlcyBmb3IgY3JlYXRpbmcKK29uZSdzIG93bi4KKworCitBdXRvTnVtYmVyCiteXl5eXl5eXl5eCisKK0F2b2lkcyBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgdmFsdWUgZm9yIGVhY2ggZW51bWVyYXRpb24gbWVtYmVyOjoKKworICAgID4+PiBjbGFzcyBBdXRvTnVtYmVyKEVudW0pOgorICAgIC4uLiAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAuLi4gICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgIC4uLiAgICAgICAgIG9iaiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAuLi4gICAgICAgICBvYmouX3ZhbHVlXyA9IHZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIG9iagorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihBdXRvTnVtYmVyKToKKyAgICAuLi4gICAgIHJlZCA9ICgpCisgICAgLi4uICAgICBncmVlbiA9ICgpCisgICAgLi4uICAgICBibHVlID0gKCkKKyAgICAuLi4KKyAgICA+Pj4gQ29sb3IuZ3JlZW4udmFsdWUgPT0gMgorICAgIFRydWUKKworLi4gbm90ZTo6CisKKyAgICBUaGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCwgaWYgZGVmaW5lZCwgaXMgdXNlZCBkdXJpbmcgY3JlYXRpb24gb2YgdGhlIEVudW0KKyAgICBtZW1iZXJzOyBpdCBpcyB0aGVuIHJlcGxhY2VkIGJ5IEVudW0ncyA6bWV0aDpgX19uZXdfX2Agd2hpY2ggaXMgdXNlZCBhZnRlcgorICAgIGNsYXNzIGNyZWF0aW9uIGZvciBsb29rdXAgb2YgZXhpc3RpbmcgbWVtYmVycy4gIER1ZSB0byB0aGUgd2F5IEVudW1zIGFyZQorICAgIHN1cHBvc2VkIHRvIGJlaGF2ZSwgdGhlcmUgaXMgbm8gd2F5IHRvIGN1c3RvbWl6ZSBFbnVtJ3MgOm1ldGg6YF9fbmV3X19gLgorCisKK09yZGVyZWRFbnVtCiteXl5eXl5eXl5eXgorCitBbiBvcmRlcmVkIGVudW1lcmF0aW9uIHRoYXQgaXMgbm90IGJhc2VkIG9uIDpjbGFzczpgSW50RW51bWAgYW5kIHNvIG1haW50YWlucwordGhlIG5vcm1hbCA6Y2xhc3M6YEVudW1gIGludmFyaWFudHMgKHN1Y2ggYXMgbm90IGJlaW5nIGNvbXBhcmFibGUgdG8gb3RoZXIKK2VudW1lcmF0aW9ucyk6OgorCisgICAgPj4+IGNsYXNzIE9yZGVyZWRFbnVtKEVudW0pOgorICAgIC4uLiAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+PSBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLiAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgR3JhZGUoT3JkZXJlZEVudW0pOgorICAgIC4uLiAgICAgQSA9IDUKKyAgICAuLi4gICAgIEIgPSA0CisgICAgLi4uICAgICBDID0gMworICAgIC4uLiAgICAgRCA9IDIKKyAgICAuLi4gICAgIEYgPSAxCisgICAgLi4uCisgICAgPj4+IEdyYWRlLkMgPCBHcmFkZS5BCisgICAgVHJ1ZQorCisKK0R1cGxpY2F0ZUZyZWVFbnVtCiteXl5eXl5eXl5eXl5eXl5eXgorCitSYWlzZXMgYW4gZXJyb3IgaWYgYSBkdXBsaWNhdGUgbWVtYmVyIG5hbWUgaXMgZm91bmQgaW5zdGVhZCBvZiBjcmVhdGluZyBhbgorYWxpYXM6OgorCisgICAgPj4+IGNsYXNzIER1cGxpY2F0ZUZyZWVFbnVtKEVudW0pOgorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAuLi4gICAgICAgICBjbHMgPSBzZWxmLl9fY2xhc3NfXworICAgIC4uLiAgICAgICAgIGlmIGFueShzZWxmLnZhbHVlID09IGUudmFsdWUgZm9yIGUgaW4gY2xzKToKKyAgICAuLi4gICAgICAgICAgICAgYSA9IHNlbGYubmFtZQorICAgIC4uLiAgICAgICAgICAgICBlID0gY2xzKHNlbGYudmFsdWUpLm5hbWUKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAuLi4gICAgICAgICAgICAgICAgICJhbGlhc2VzIG5vdCBhbGxvd2VkIGluIER1cGxpY2F0ZUZyZWVFbnVtOiAgJXIgLS0+ICVyIgorICAgIC4uLiAgICAgICAgICAgICAgICAgJSAoYSwgZSkpCisgICAgLi4uCisgICAgPj4+IGNsYXNzIENvbG9yKER1cGxpY2F0ZUZyZWVFbnVtKToKKyAgICAuLi4gICAgIHJlZCA9IDEKKyAgICAuLi4gICAgIGdyZWVuID0gMgorICAgIC4uLiAgICAgYmx1ZSA9IDMKKyAgICAuLi4gICAgIGdyZW5lID0gMgorICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBhbGlhc2VzIG5vdCBhbGxvd2VkIGluIER1cGxpY2F0ZUZyZWVFbnVtOiAgJ2dyZW5lJyAtLT4gJ2dyZWVuJworCisuLiBub3RlOjoKKworICAgIFRoaXMgaXMgYSB1c2VmdWwgZXhhbXBsZSBmb3Igc3ViY2xhc3NpbmcgRW51bSB0byBhZGQgb3IgY2hhbmdlIG90aGVyCisgICAgYmVoYXZpb3JzIGFzIHdlbGwgYXMgZGlzYWxsb3dpbmcgYWxpYXNlcy4gIElmIHRoZSBvbmx5IGRlc2lyZWQgY2hhbmdlIGlzCisgICAgZGlzYWxsb3dpbmcgYWxpYXNlcywgdGhlIDpmdW5jOmB1bmlxdWVgIGRlY29yYXRvciBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCisKK1BsYW5ldAorXl5eXl5eCisKK0lmIDptZXRoOmBfX25ld19fYCBvciA6bWV0aDpgX19pbml0X19gIGlzIGRlZmluZWQgdGhlIHZhbHVlIG9mIHRoZSBlbnVtIG1lbWJlcgord2lsbCBiZSBwYXNzZWQgdG8gdGhvc2UgbWV0aG9kczo6CisKKyAgICA+Pj4gY2xhc3MgUGxhbmV0KEVudW0pOgorICAgIC4uLiAgICAgTUVSQ1VSWSA9ICgzLjMwM2UrMjMsIDIuNDM5N2U2KQorICAgIC4uLiAgICAgVkVOVVMgICA9ICg0Ljg2OWUrMjQsIDYuMDUxOGU2KQorICAgIC4uLiAgICAgRUFSVEggICA9ICg1Ljk3NmUrMjQsIDYuMzc4MTRlNikKKyAgICAuLi4gICAgIE1BUlMgICAgPSAoNi40MjFlKzIzLCAzLjM5NzJlNikKKyAgICAuLi4gICAgIEpVUElURVIgPSAoMS45ZSsyNywgICA3LjE0OTJlNykKKyAgICAuLi4gICAgIFNBVFVSTiAgPSAoNS42ODhlKzI2LCA2LjAyNjhlNykKKyAgICAuLi4gICAgIFVSQU5VUyAgPSAoOC42ODZlKzI1LCAyLjU1NTllNykKKyAgICAuLi4gICAgIE5FUFRVTkUgPSAoMS4wMjRlKzI2LCAyLjQ3NDZlNykKKyAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXNzLCByYWRpdXMpOgorICAgIC4uLiAgICAgICAgIHNlbGYubWFzcyA9IG1hc3MgICAgICAgIyBpbiBraWxvZ3JhbXMKKyAgICAuLi4gICAgICAgICBzZWxmLnJhZGl1cyA9IHJhZGl1cyAgICMgaW4gbWV0ZXJzCisgICAgLi4uICAgICBAcHJvcGVydHkKKyAgICAuLi4gICAgIGRlZiBzdXJmYWNlX2dyYXZpdHkoc2VsZik6CisgICAgLi4uICAgICAgICAgIyB1bml2ZXJzYWwgZ3Jhdml0YXRpb25hbCBjb25zdGFudCAgKG0zIGtnLTEgcy0yKQorICAgIC4uLiAgICAgICAgIEcgPSA2LjY3MzAwRS0xMQorICAgIC4uLiAgICAgICAgIHJldHVybiBHICogc2VsZi5tYXNzIC8gKHNlbGYucmFkaXVzICogc2VsZi5yYWRpdXMpCisgICAgLi4uCisgICAgPj4+IFBsYW5ldC5FQVJUSC52YWx1ZQorICAgICg1Ljk3NmUrMjQsIDYzNzgxNDAuMCkKKyAgICA+Pj4gUGxhbmV0LkVBUlRILnN1cmZhY2VfZ3Jhdml0eQorICAgIDkuODAyNjUyNzQzMzM3MTI5CisKKworSG93IGFyZSBFbnVtcyBkaWZmZXJlbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW51bXMgaGF2ZSBhIGN1c3RvbSBtZXRhY2xhc3MgdGhhdCBhZmZlY3RzIG1hbnkgYXNwZWN0cyBvZiBib3RoIGRlcml2ZWQgRW51bQorY2xhc3NlcyBhbmQgdGhlaXIgaW5zdGFuY2VzIChtZW1iZXJzKS4KKworCitFbnVtIENsYXNzZXMKK15eXl5eXl5eXl5eXgorCitUaGUgOmNsYXNzOmBFbnVtTWV0YWAgbWV0YWNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgdGhlCis6bWV0aDpgX19jb250YWluc19fYCwgOm1ldGg6YF9fZGlyX19gLCA6bWV0aDpgX19pdGVyX19gIGFuZCBvdGhlciBtZXRob2RzIHRoYXQKK2FsbG93IG9uZSB0byBkbyB0aGluZ3Mgd2l0aCBhbiA6Y2xhc3M6YEVudW1gIGNsYXNzIHRoYXQgZmFpbCBvbiBhIHR5cGljYWwKK2NsYXNzLCBzdWNoIGFzIGBsaXN0KENvbG9yKWAgb3IgYHNvbWVfdmFyIGluIENvbG9yYC4gIDpjbGFzczpgRW51bU1ldGFgIGlzCityZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB2YXJpb3VzIG90aGVyIG1ldGhvZHMgb24gdGhlIGZpbmFsIDpjbGFzczpgRW51bWAKK2NsYXNzIGFyZSBjb3JyZWN0IChzdWNoIGFzIDptZXRoOmBfX25ld19fYCwgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCwKKzptZXRoOmBfX3N0cl9fYCBhbmQgOm1ldGg6YF9fcmVwcl9fYCkKKworCitFbnVtIE1lbWJlcnMgKGFrYSBpbnN0YW5jZXMpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBtb3N0IGludGVyZXN0aW5nIHRoaW5nIGFib3V0IEVudW0gbWVtYmVycyBpcyB0aGF0IHRoZXkgYXJlIHNpbmdsZXRvbnMuCis6Y2xhc3M6YEVudW1NZXRhYCBjcmVhdGVzIHRoZW0gYWxsIHdoaWxlIGl0IGlzIGNyZWF0aW5nIHRoZSA6Y2xhc3M6YEVudW1gCitjbGFzcyBpdHNlbGYsIGFuZCB0aGVuIHB1dHMgYSBjdXN0b20gOm1ldGg6YF9fbmV3X19gIGluIHBsYWNlIHRvIGVuc3VyZQordGhhdCBubyBuZXcgb25lcyBhcmUgZXZlciBpbnN0YW50aWF0ZWQgYnkgcmV0dXJuaW5nIG9ubHkgdGhlIGV4aXN0aW5nCittZW1iZXIgaW5zdGFuY2VzLgorCisKK0ZpbmVyIFBvaW50cworXl5eXl5eXl5eXl5eCisKK0VudW0gbWVtYmVycyBhcmUgaW5zdGFuY2VzIG9mIGFuIEVudW0gY2xhc3MsIGFuZCBldmVuIHRob3VnaCB0aGV5IGFyZQorYWNjZXNzaWJsZSBhcyBgRW51bUNsYXNzLm1lbWJlcmAsIHRoZXkgYXJlIG5vdCBhY2Nlc3NpYmxlIGRpcmVjdGx5IGZyb20KK3RoZSBtZW1iZXI6OgorCisgICAgPj4+IENvbG9yLnJlZAorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yLnJlZC5ibHVlCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIEF0dHJpYnV0ZUVycm9yOiAnQ29sb3InIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdibHVlJworCitMaWtld2lzZSwgdGhlIDphdHRyOmBfX21lbWJlcnNfX2AgaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNsYXNzLgorCitJZiB5b3UgZ2l2ZSB5b3VyIDpjbGFzczpgRW51bWAgc3ViY2xhc3MgZXh0cmEgbWV0aG9kcywgbGlrZSB0aGUgYFBsYW5ldGBfCitjbGFzcyBhYm92ZSwgdGhvc2UgbWV0aG9kcyB3aWxsIHNob3cgdXAgaW4gYSA6ZnVuYzpgZGlyYCBvZiB0aGUgbWVtYmVyLAorYnV0IG5vdCBvZiB0aGUgY2xhc3M6OgorCisgICAgPj4+IGRpcihQbGFuZXQpCisgICAgWydFQVJUSCcsICdKVVBJVEVSJywgJ01BUlMnLCAnTUVSQ1VSWScsICdORVBUVU5FJywgJ1NBVFVSTicsICdVUkFOVVMnLCAnVkVOVVMnLCAnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXyddCisgICAgPj4+IGRpcihQbGFuZXQuRUFSVEgpCisgICAgWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAnc3VyZmFjZV9ncmF2aXR5JywgJ3ZhbHVlJ10KKworQSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHdpbGwgb25seSBiZSB1c2VkIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlCis6Y2xhc3M6YEVudW1gIG1lbWJlcnMgLS0gYWZ0ZXIgdGhhdCBpdCBpcyByZXBsYWNlZC4gIFRoaXMgbWVhbnMgaWYgeW91IHdpc2ggdG8KK2NoYW5nZSBob3cgOmNsYXNzOmBFbnVtYCBtZW1iZXJzIGFyZSBsb29rZWQgdXAgeW91IGVpdGhlciBoYXZlIHRvIHdyaXRlIGEKK2hlbHBlciBmdW5jdGlvbiBvciBhIDpmdW5jOmBjbGFzc21ldGhvZGAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CmluZGV4IDZlNDU1OWMuLjcwNGFiYmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CkBAIC0yNTksNiArMjU5LDEyIEBACiAgICAgICA6ZXhjOmBWTVNFcnJvcmAsIDpleGM6YHNvY2tldC5lcnJvcmAsIDpleGM6YHNlbGVjdC5lcnJvcmAgYW5kCiAgICAgICA6ZXhjOmBtbWFwLmVycm9yYCBoYXZlIGJlZW4gbWVyZ2VkIGludG8gOmV4YzpgT1NFcnJvcmAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisKKyAgICAgIFRoZSA6YXR0cjpgZmlsZW5hbWVgIGF0dHJpYnV0ZSBpcyBub3cgdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSBwYXNzZWQgdG8KKyAgICAgIHRoZSBmdW5jdGlvbiwgaW5zdGVhZCBvZiB0aGUgbmFtZSBlbmNvZGVkIHRvIG9yIGRlY29kZWQgZnJvbSB0aGUKKyAgICAgIGZpbGVzeXN0ZW0gZW5jb2RpbmcuCisKIAogLi4gZXhjZXB0aW9uOjogT3ZlcmZsb3dFcnJvcgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0IGIvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdAppbmRleCAzYzMzNjIxLi42MWJjNTAzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKQEAgLTI3LDYgKzI3LDcgQEAKICogT25seSB0aGUgZmlsZW5hbWUsIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgbGluZSBudW1iZXIgYXJlCiAgIGRpc3BsYXllZC4gKG5vIHNvdXJjZSBjb2RlKQogKiBJdCBpcyBsaW1pdGVkIHRvIDEwMCBmcmFtZXMgYW5kIDEwMCB0aHJlYWRzLgorKiBUaGUgb3JkZXIgaXMgcmV2ZXJzZWQ6IHRoZSBtb3N0IHJlY2VudCBjYWxsIGlzIHNob3duIGZpcnN0LgogCiBCeSBkZWZhdWx0LCB0aGUgUHl0aG9uIHRyYWNlYmFjayBpcyB3cml0dGVuIHRvIDpkYXRhOmBzeXMuc3RkZXJyYC4gVG8gc2VlCiB0cmFjZWJhY2tzLCBhcHBsaWNhdGlvbnMgbXVzdCBiZSBydW4gaW4gdGhlIHRlcm1pbmFsLiBBIGxvZyBmaWxlIGNhbgpAQCAtMTI5LDcgKzEzMCw3IEBACiAgICAgPj4+IGN0eXBlcy5zdHJpbmdfYXQoMCkKICAgICBGYXRhbCBQeXRob24gZXJyb3I6IFNlZ21lbnRhdGlvbiBmYXVsdAogCi0gICAgQ3VycmVudCB0aHJlYWQgMHgwMDAwN2ZiODk5ZjM5NzAwOgorICAgIEN1cnJlbnQgdGhyZWFkIDB4MDAwMDdmYjg5OWYzOTcwMCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CiAgICAgICBGaWxlICIvaG9tZS9weXRob24vY3B5dGhvbi9MaWIvY3R5cGVzL19faW5pdF9fLnB5IiwgbGluZSA0ODYgaW4gc3RyaW5nX2F0CiAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxIGluIDxtb2R1bGU+CiAgICAgU2VnbWVudGF0aW9uIGZhdWx0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CmluZGV4IDhhODhmOGMuLjg0NzFhNzIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0CkBAIC0yNyw2ICsyNywxMCBAQAogICAgTm90ZSB0aGF0IG5vIGV4dGVybmFsIHByb2dyYW1zIGFyZSBjYWxsZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLCBnaXZpbmcgaXQKICAgIHBvcnRhYmlsaXR5IGFuZCBlZmZpY2llbmN5LgogCisgICBUaGlzIGZ1bmN0aW9uIHVzZXMgYSBjYWNoZSBmb3IgcGFzdCBjb21wYXJpc29ucyBhbmQgdGhlIHJlc3VsdHMsCisgICB3aXRoIGEgY2FjaGUgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSByZWx5aW5nIG9uIHN0YWxlIHNpZ25hdHVyZXMKKyAgIG9yIGJ5IGV4cGxpY2l0bHkgY2FsbGluZyA6ZnVuYzpgY2xlYXJfY2FjaGVgLgorCiAKIC4uIGZ1bmN0aW9uOjogY21wZmlsZXMoZGlyMSwgZGlyMiwgY29tbW9uLCBzaGFsbG93PVRydWUpCiAKQEAgLTQ4LDYgKzUyLDE1IEBACiAgICBvbmUgb2YgdGhlIHRocmVlIHJldHVybmVkIGxpc3RzLgogCiAKKy4uIGZ1bmN0aW9uOjogY2xlYXJfY2FjaGUoKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgQ2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuIFRoaXMgbWF5IGJlIHVzZWZ1bCBpZiBhIGZpbGUgaXMgY29tcGFyZWQgc28gcXVpY2tseQorICAgYWZ0ZXIgaXQgaXMgbW9kaWZpZWQgdGhhdCBpdCBpcyB3aXRoaW4gdGhlIG10aW1lIHJlc29sdXRpb24gb2YKKyAgIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0uCisKKwogLi4gX2RpcmNtcC1vYmplY3RzOgogCiBUaGUgOmNsYXNzOmBkaXJjbXBgIGNsYXNzCkBAIC01NSwyOCArNjgsMjUgQEAKIAogLi4gY2xhc3M6OiBkaXJjbXAoYSwgYiwgaWdub3JlPU5vbmUsIGhpZGU9Tm9uZSkKIAotICAgQ29uc3RydWN0IGEgbmV3IGRpcmVjdG9yeSBjb21wYXJpc29uIG9iamVjdCwgdG8gY29tcGFyZSB0aGUgZGlyZWN0b3JpZXMgKmEqIGFuZAotICAgKmIqLiAqaWdub3JlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaWdub3JlLCBhbmQgZGVmYXVsdHMgdG8gYGBbJ1JDUycsICdDVlMnLAotICAgJ3RhZ3MnXWBgLiAqaGlkZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsIGFuZCBkZWZhdWx0cyB0byBgYFtvcy5jdXJkaXIsCi0gICBvcy5wYXJkaXJdYGAuCisgICBDb25zdHJ1Y3QgYSBuZXcgZGlyZWN0b3J5IGNvbXBhcmlzb24gb2JqZWN0LCB0byBjb21wYXJlIHRoZSBkaXJlY3RvcmllcyAqYSoKKyAgIGFuZCAqYiouICAqaWdub3JlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaWdub3JlLCBhbmQgZGVmYXVsdHMgdG8KKyAgIDphdHRyOmBmaWxlY21wLkRFRkFVTFRfSUdOT1JFU2AuICAqaGlkZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsIGFuZAorICAgZGVmYXVsdHMgdG8gYGBbb3MuY3VyZGlyLCBvcy5wYXJkaXJdYGAuCiAKICAgIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MgY29tcGFyZXMgZmlsZXMgYnkgZG9pbmcgKnNoYWxsb3cqIGNvbXBhcmlzb25zCiAgICBhcyBkZXNjcmliZWQgZm9yIDpmdW5jOmBmaWxlY21wLmNtcGAuCiAKICAgIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydCgpCiAKICAgICAgIFByaW50ICh0byA6ZGF0YTpgc3lzLnN0ZG91dGApIGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqLgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydF9wYXJ0aWFsX2Nsb3N1cmUoKQogCiAgICAgICBQcmludCBhIGNvbXBhcmlzb24gYmV0d2VlbiAqYSogYW5kICpiKiBhbmQgY29tbW9uIGltbWVkaWF0ZQogICAgICAgc3ViZGlyZWN0b3JpZXMuCiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0X2Z1bGxfY2xvc3VyZSgpCiAKICAgICAgIFByaW50IGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqIGFuZCBjb21tb24gc3ViZGlyZWN0b3JpZXMKQEAgLTEzMyw3ICsxNDMsNyBAQAogCiAgICAuLiBhdHRyaWJ1dGU6OiBjb21tb25fZmlsZXMKIAotICAgICAgRmlsZXMgaW4gYm90aCAqYSogYW5kICpiKgorICAgICAgRmlsZXMgaW4gYm90aCAqYSogYW5kICpiKi4KIAogCiAgICAuLiBhdHRyaWJ1dGU6OiBjb21tb25fZnVubnkKQEAgLTE2NCw2ICsxNzQsMTIgQEAKICAgICAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIG5hbWVzIGluIDphdHRyOmBjb21tb25fZGlyc2AgdG8gOmNsYXNzOmBkaXJjbXBgCiAgICAgICBvYmplY3RzLgogCisuLiBhdHRyaWJ1dGU6OiBERUZBVUxUX0lHTk9SRVMKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIExpc3Qgb2YgZGlyZWN0b3JpZXMgaWdub3JlZCBieSA6Y2xhc3M6YGRpcmNtcGAgYnkgZGVmYXVsdC4KKwogCiBIZXJlIGlzIGEgc2ltcGxpZmllZCBleGFtcGxlIG9mIHVzaW5nIHRoZSBgYHN1YmRpcnNgYCBhdHRyaWJ1dGUgdG8gc2VhcmNoCiByZWN1cnNpdmVseSB0aHJvdWdoIHR3byBkaXJlY3RvcmllcyB0byBzaG93IGNvbW1vbiBkaWZmZXJlbnQgZmlsZXM6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKaW5kZXggZDVhNDg3NS4uZWUwNjgzMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CkBAIC0xNjAsNiArMTYwLDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICBUaGUgYGAnclUnYGAgYW5kIGBgJ1UnYGAgbW9kZXMuCisKIAogKipPcHRpb25hbCBpbi1wbGFjZSBmaWx0ZXJpbmc6KiogaWYgdGhlIGtleXdvcmQgYXJndW1lbnQgYGBpbnBsYWNlPVRydWVgYCBpcwogcGFzc2VkIHRvIDpmdW5jOmBmaWxlaW5wdXQuaW5wdXRgIG9yIHRvIHRoZSA6Y2xhc3M6YEZpbGVJbnB1dGAgY29uc3RydWN0b3IsIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZXN5cy5yc3QgYi9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdAppbmRleCA1ODk5OGE4Li4wM2UwODViIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdApAQCAtMTIsNiArMTIsNyBAQAogCiAuLiB0b2N0cmVlOjoKIAorICAgcGF0aGxpYi5yc3QKICAgIG9zLnBhdGgucnN0CiAgICBmaWxlaW5wdXQucnN0CiAgICBzdGF0LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAppbmRleCBlMDQzNGIwLi5lZjkzZjA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdApAQCAtODYsNyArODYsNyBAQAogICAgICAgJy4qXFwudHh0JCcKICAgICAgID4+PiByZW9iaiA9IHJlLmNvbXBpbGUocmVnZXgpCiAgICAgICA+Pj4gcmVvYmoubWF0Y2goJ2Zvb2Jhci50eHQnKQotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEwKSwgbWF0Y2g9J2Zvb2Jhci50eHQnPgogCiAKIC4uIHNlZWFsc286OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdCBiL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKaW5kZXggODhiZTExYy4uYmRjOWU3YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CkBAIC00LDYgKzQsMTAgQEAKIC4uIG1vZHVsZTo6IGZvcm1hdHRlcgogICAgOnN5bm9wc2lzOiBHZW5lcmljIG91dHB1dCBmb3JtYXR0ZXIgYW5kIGRldmljZSBpbnRlcmZhY2UuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgIER1ZSB0byBsYWNrIG9mIHVzYWdlLCB0aGUgZm9ybWF0dGVyIG1vZHVsZSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBpcyBzbGF0ZWQKKyAgIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjYuCisKIAogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdHdvIGludGVyZmFjZSBkZWZpbml0aW9ucywgZWFjaCB3aXRoIG11bHRpcGxlCiBpbXBsZW1lbnRhdGlvbnM6IFRoZSAqZm9ybWF0dGVyKiBpbnRlcmZhY2UsIGFuZCB0aGUgKndyaXRlciogaW50ZXJmYWNlIHdoaWNoIGlzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdAppbmRleCA0ZWJmM2NhLi40NzRiYjFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKQEAgLTU0Myw2ICs1NDMsMTAgQEAKICAgIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgbWV0aG9kIGlzIG5vdCBmb3VuZCBvciBpZiBlaXRoZXIKICAgIHRoZSAqZm9ybWF0X3NwZWMqIG9yIHRoZSByZXR1cm4gdmFsdWUgYXJlIG5vdCBzdHJpbmdzLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIGBgb2JqZWN0KCkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYylgYCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYAorICAgICAgaWYgKmZvcm1hdF9zcGVjKiBpcyBub3QgZW1wdHkgc3RyaW5nLgorCiAKIC4uIF9mdW5jLWZyb3plbnNldDoKIC4uIGZ1bmN0aW9uOjogZnJvemVuc2V0KFtpdGVyYWJsZV0pCkBAIC02NjYsNiArNjcwLDEyIEBACiAKICAgIFRoZSBpbnRlZ2VyIHR5cGUgaXMgZGVzY3JpYmVkIGluIDpyZWY6YHR5cGVzbnVtZXJpY2AuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiAqYmFzZSogaXMgbm90IGFuIGluc3RhbmNlIG9mIDpjbGFzczpgaW50YCBhbmQgdGhlICpiYXNlKiBvYmplY3QgaGFzIGEKKyAgICAgIDptZXRoOmBiYXNlLl9faW5kZXhfXyA8b2JqZWN0Ll9faW5kZXhfXz5gIG1ldGhvZCwgdGhhdCBtZXRob2QgaXMgY2FsbGVkCisgICAgICB0byBvYnRhaW4gYW4gaW50ZWdlciBmb3IgdGhlIGJhc2UuICBQcmV2aW91cyB2ZXJzaW9ucyB1c2VkCisgICAgICA6bWV0aDpgYmFzZS5fX2ludF9fIDxvYmplY3QuX19pbnRfXz5gIGluc3RlYWQgb2YgOm1ldGg6YGJhc2UuX19pbmRleF9fCisgICAgICA8b2JqZWN0Ll9faW5kZXhfXz5gLgogCiAuLiBmdW5jdGlvbjo6IGlzaW5zdGFuY2Uob2JqZWN0LCBjbGFzc2luZm8pCiAKQEAgLTc0OCwxOSArNzU4LDIyIEBACiAgICBhbHJlYWR5IGFycmFuZ2VkIGludG8gYXJndW1lbnQgdHVwbGVzLCBzZWUgOmZ1bmM6YGl0ZXJ0b29scy5zdGFybWFwYFwuCiAKIAotLi4gZnVuY3Rpb246OiBtYXgoaXRlcmFibGUsICpbLCBrZXldKQorLi4gZnVuY3Rpb246OiBtYXgoaXRlcmFibGUsICpbLCBkZWZhdWx0LCBrZXldKQogICAgICAgICAgICAgICBtYXgoYXJnMSwgYXJnMiwgKmFyZ3NbLCBrZXldKQogCiAgICBSZXR1cm4gdGhlIGxhcmdlc3QgaXRlbSBpbiBhbiBpdGVyYWJsZSBvciB0aGUgbGFyZ2VzdCBvZiB0d28gb3IgbW9yZQogICAgYXJndW1lbnRzLgogCi0gICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgKml0ZXJhYmxlKiBtdXN0IGJlIGEgbm9uLWVtcHR5Ci0gICBpdGVyYWJsZSAoc3VjaCBhcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgVGhlIGxhcmdlc3QgaXRlbQotICAgaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlCi0gICBwcm92aWRlZCwgdGhlIGxhcmdlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIHJldHVybmVkLgorICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBhbiA6dGVybTpgaXRlcmFibGVgLgorICAgVGhlIGxhcmdlc3QgaXRlbSBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsCisgICBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzCisgICByZXR1cm5lZC4KIAotICAgVGhlIG9wdGlvbmFsIGtleXdvcmQtb25seSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcKLSAgIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4KKyAgIFRoZXJlIGFyZSB0d28gb3B0aW9uYWwga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gVGhlICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcworICAgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLiBUaGUKKyAgICpkZWZhdWx0KiBhcmd1bWVudCBzcGVjaWZpZXMgYW4gb2JqZWN0IHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgaXRlcmFibGUgaXMKKyAgIGVtcHR5LiBJZiB0aGUgaXRlcmFibGUgaXMgZW1wdHkgYW5kICpkZWZhdWx0KiBpcyBub3QgcHJvdmlkZWQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgSWYgbXVsdGlwbGUgaXRlbXMgYXJlIG1heGltYWwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBvbmUKICAgIGVuY291bnRlcmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgc29ydC1zdGFiaWxpdHkgcHJlc2VydmluZyB0b29scwpAQCAtNzc2LDE5ICs3ODksMjIgQEAKICAgIDpyZWY6YHR5cGVtZW1vcnl2aWV3YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCi0uLiBmdW5jdGlvbjo6IG1pbihpdGVyYWJsZSwgKlssIGtleV0pCisuLiBmdW5jdGlvbjo6IG1pbihpdGVyYWJsZSwgKlssIGRlZmF1bHQsIGtleV0pCiAgICAgICAgICAgICAgIG1pbihhcmcxLCBhcmcyLCAqYXJnc1ssIGtleV0pCiAKICAgIFJldHVybiB0aGUgc21hbGxlc3QgaXRlbSBpbiBhbiBpdGVyYWJsZSBvciB0aGUgc21hbGxlc3Qgb2YgdHdvIG9yIG1vcmUKICAgIGFyZ3VtZW50cy4KIAotICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsICppdGVyYWJsZSogbXVzdCBiZSBhIG5vbi1lbXB0eQotICAgaXRlcmFibGUgKHN1Y2ggYXMgYSBub24tZW1wdHkgc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFRoZSBzbWFsbGVzdCBpdGVtCi0gICBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUKLSAgIHByb3ZpZGVkLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIHJldHVybmVkLgorICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBhbiA6dGVybTpgaXRlcmFibGVgLgorICAgVGhlIHNtYWxsZXN0IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbAorICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcworICAgcmV0dXJuZWQuCiAKLSAgIFRoZSBvcHRpb25hbCBrZXl3b3JkLW9ubHkgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nCi0gICBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuCisgICBUaGVyZSBhcmUgdHdvIG9wdGlvbmFsIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFRoZSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMKKyAgIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4gVGhlCisgICAqZGVmYXVsdCogYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzCisgICBlbXB0eS4gSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5IGFuZCAqZGVmYXVsdCogaXMgbm90IHByb3ZpZGVkLCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIElmIG11bHRpcGxlIGl0ZW1zIGFyZSBtaW5pbWFsLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgb25lCiAgICBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIHNvcnQtc3RhYmlsaXR5IHByZXNlcnZpbmcgdG9vbHMKQEAgLTg1Niw4ICs4NzIsNyBAQAogICAgYGAnYidgYCAgIGJpbmFyeSBtb2RlCiAgICBgYCd0J2BgICAgdGV4dCBtb2RlIChkZWZhdWx0KQogICAgYGAnKydgYCAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKQotICAgYGAnVSdgYCAgIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHNob3VsZAotICAgICAgICAgICAgIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlKQorICAgYGAnVSdgYCAgIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIG1vZGUgKGRlcHJlY2F0ZWQpCiAgICA9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgYGAncidgYCAob3BlbiBmb3IgcmVhZGluZyB0ZXh0LCBzeW5vbnltIG9mIGBgJ3J0J2BgKS4KQEAgLTk2Myw2ICs5NzgsOCBAQAogICAgOm1vZDpgb3Mub3BlbmAgYXMgKm9wZW5lciogcmVzdWx0cyBpbiBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gcGFzc2luZwogICAgYGBOb25lYGApLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgdGhlIDpyZWY6YGRpcl9mZCA8ZGlyX2ZkPmAgcGFyYW1ldGVyIG9mIHRoZQogICAgOmZ1bmM6YG9zLm9wZW5gIGZ1bmN0aW9uIHRvIG9wZW4gYSBmaWxlIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gZGlyZWN0b3J5OjoKIApAQCAtOTc2LDEwICs5OTMsNiBAQAogICAgICAgLi4uCiAgICAgICA+Pj4gb3MuY2xvc2UoZGlyX2ZkKSAgIyBkb24ndCBsZWFrIGEgZmlsZSBkZXNjcmlwdG9yCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBUaGUgKm9wZW5lciogcGFyYW1ldGVyIHdhcyBhZGRlZC4KLSAgICAgIFRoZSBgYCd4J2BgIG1vZGUgd2FzIGFkZGVkLgotCiAgICBUaGUgdHlwZSBvZiA6dGVybTpgZmlsZSBvYmplY3RgIHJldHVybmVkIGJ5IHRoZSA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24KICAgIGRlcGVuZHMgb24gdGhlIG1vZGUuICBXaGVuIDpmdW5jOmBvcGVuYCBpcyB1c2VkIHRvIG9wZW4gYSBmaWxlIGluIGEgdGV4dAogICAgbW9kZSAoYGAndydgYCwgYGAncidgYCwgYGAnd3QnYGAsIGBgJ3J0J2BgLCBldGMuKSwgaXQgcmV0dXJucyBhIHN1YmNsYXNzIG9mCkBAIC0xMDA2LDEwICsxMDE5LDE4IEBACiAgICBhbmQgOm1vZDpgc2h1dGlsYC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgorICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCiAgICAgICA6ZXhjOmBJT0Vycm9yYCB1c2VkIHRvIGJlIHJhaXNlZCwgaXQgaXMgbm93IGFuIGFsaWFzIG9mIDpleGM6YE9TRXJyb3JgLgogICAgICAgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpcyBub3cgcmFpc2VkIGlmIHRoZSBmaWxlIG9wZW5lZCBpbiBleGNsdXNpdmUKICAgICAgIGNyZWF0aW9uIG1vZGUgKGBgJ3gnYGApIGFscmVhZHkgZXhpc3RzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGZpbGUgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKworICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy40IDQuMAorICAgICAgVGhlIGBgJ1UnYGAgbW9kZS4KKwogCiAuLiBYWFggd29ya3MgZm9yIGJ5dGVzIHRvbywgYnV0IHNob3VsZCBpdD8KIC4uIGZ1bmN0aW9uOjogb3JkKGMpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAppbmRleCAzYzk0NmUzLi43N2NkODM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKQEAgLTYsNiArNiw3IEBACiAuLiBtb2R1bGVhdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIC4uIG1vZHVsZWF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KIC4uIG1vZHVsZWF1dGhvcjo6IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW5AZ21haWwuY29tPgorLi4gbW9kdWxlYXV0aG9yOjogxYF1a2FzeiBMYW5nYSA8bHVrYXN6QGxhbmdhLnBsPgogLi4gc2VjdGlvbmF1dGhvcjo6IFBldGVyIEhhcnJpcyA8c2NhdkBibHVleW9uZGVyLmNvLnVrPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9mdW5jdG9vbHMucHlgCkBAIC0xMzMsMTUgKzEzNCwzNCBAQAogCiAgICAgICAgQHRvdGFsX29yZGVyaW5nCiAgICAgICAgY2xhc3MgU3R1ZGVudDoKKyAgICAgICAgICAgZGVmIF9pc192YWxpZF9vcGVyYW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoaGFzYXR0cihvdGhlciwgImxhc3RuYW1lIikgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob3RoZXIsICJmaXJzdG5hbWUiKSkKICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfdmFsaWRfb3BlcmFuZChvdGhlcik6CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpID09CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX29wZXJhbmQob3RoZXIpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA8CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGlsZSB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSB3ZWxsIGJlaGF2ZWQgdG90YWxseQorICAgICAgb3JkZXJlZCB0eXBlcywgaXQgKmRvZXMqIGNvbWUgYXQgdGhlIGNvc3Qgb2Ygc2xvd2VyIGV4ZWN1dGlvbiBhbmQKKyAgICAgIG1vcmUgY29tcGxleCBzdGFjayB0cmFjZXMgZm9yIHRoZSBkZXJpdmVkIGNvbXBhcmlzb24gbWV0aG9kcy4gSWYKKyAgICAgIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyBpbmRpY2F0ZXMgdGhpcyBpcyBhIGJvdHRsZW5lY2sgZm9yIGEgZ2l2ZW4KKyAgICAgIGFwcGxpY2F0aW9uLCBpbXBsZW1lbnRpbmcgYWxsIHNpeCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBpbnN0ZWFkIGlzCisgICAgICBsaWtlbHkgdG8gcHJvdmlkZSBhbiBlYXN5IHNwZWVkIGJvb3N0LgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJldHVybmluZyBOb3RJbXBsZW1lbnRlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yCisgICAgICB1bnJlY29nbmlzZWQgdHlwZXMgaXMgbm93IHN1cHBvcnRlZC4KIAogLi4gZnVuY3Rpb246OiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQogCkBAIC0xNzQsNiArMTk0LDQ4IEBACiAgICAgICAxOAogCiAKKy4uIGNsYXNzOjogcGFydGlhbG1ldGhvZChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgcGFydGlhbG1ldGhvZGAgZGVzY3JpcHRvciB3aGljaCBiZWhhdmVzCisgICBsaWtlIDpjbGFzczpgcGFydGlhbGAgZXhjZXB0IHRoYXQgaXQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIG1ldGhvZAorICAgZGVmaW5pdGlvbiByYXRoZXIgdGhhbiBiZWluZyBkaXJlY3RseSBjYWxsYWJsZS4KKworICAgKmZ1bmMqIG11c3QgYmUgYSA6dGVybTpgZGVzY3JpcHRvcmAgb3IgYSBjYWxsYWJsZSAob2JqZWN0cyB3aGljaCBhcmUgYm90aCwKKyAgIGxpa2Ugbm9ybWFsIGZ1bmN0aW9ucywgYXJlIGhhbmRsZWQgYXMgZGVzY3JpcHRvcnMpLgorCisgICBXaGVuICpmdW5jKiBpcyBhIGRlc2NyaXB0b3IgKHN1Y2ggYXMgYSBub3JtYWwgUHl0aG9uIGZ1bmN0aW9uLAorICAgOmZ1bmM6YGNsYXNzbWV0aG9kYCwgOmZ1bmM6YHN0YXRpY21ldGhvZGAsIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAgb3IKKyAgIGFub3RoZXIgaW5zdGFuY2Ugb2YgOmNsYXNzOmBwYXJ0aWFsbWV0aG9kYCksIGNhbGxzIHRvIGBgX19nZXRfX2BgIGFyZQorICAgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3IsIGFuZCBhbiBhcHByb3ByaWF0ZQorICAgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3QgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4KKworICAgV2hlbiAqZnVuYyogaXMgYSBub24tZGVzY3JpcHRvciBjYWxsYWJsZSwgYW4gYXBwcm9wcmlhdGUgYm91bmQgbWV0aG9kIGlzCisgICBjcmVhdGVkIGR5bmFtaWNhbGx5LiBUaGlzIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBQeXRob24gZnVuY3Rpb24gd2hlbgorICAgdXNlZCBhcyBhIG1ldGhvZDogdGhlICpzZWxmKiBhcmd1bWVudCB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSBmaXJzdAorICAgcG9zaXRpb25hbCBhcmd1bWVudCwgZXZlbiBiZWZvcmUgdGhlICphcmdzKiBhbmQgKmtleXdvcmRzKiBzdXBwbGllZCB0bworICAgdGhlIDpjbGFzczpgcGFydGlhbG1ldGhvZGAgY29uc3RydWN0b3IuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gY2xhc3MgQ2VsbChvYmplY3QpOgorICAgICAgLi4uICAgICBAcHJvcGVydHkKKyAgICAgIC4uLiAgICAgZGVmIGFsaXZlKHNlbGYpOgorICAgICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuX2FsaXZlCisgICAgICAuLi4gICAgIGRlZiBzZXRfc3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgLi4uICAgICAgICAgc2VsZi5fYWxpdmUgPSBib29sKHN0YXRlKQorICAgICAgLi4uICAgICBzZXRfYWxpdmUgPSBwYXJ0aWFsbWV0aG9kKHNldF9zdGF0ZSwgVHJ1ZSkKKyAgICAgIC4uLiAgICAgc2V0X2RlYWQgPSBwYXJ0aWFsbWV0aG9kKHNldF9zdGF0ZSwgRmFsc2UpCisgICAgICAuLi4KKyAgICAgID4+PiBjID0gQ2VsbCgpCisgICAgICA+Pj4gYy5hbGl2ZQorICAgICAgRmFsc2UKKyAgICAgID4+PiBjLnNldF9hbGl2ZSgpCisgICAgICA+Pj4gYy5hbGl2ZQorICAgICAgVHJ1ZQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHJlZHVjZShmdW5jdGlvbiwgaXRlcmFibGVbLCBpbml0aWFsaXplcl0pCiAKICAgIEFwcGx5ICpmdW5jdGlvbiogb2YgdHdvIGFyZ3VtZW50cyBjdW11bGF0aXZlbHkgdG8gdGhlIGl0ZW1zIG9mICpzZXF1ZW5jZSosIGZyb20KQEAgLTE5OCw2ICsyNjAsMTExIEBACiAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKIAorLi4gZGVjb3JhdG9yOjogc2luZ2xlZGlzcGF0Y2goZGVmYXVsdCkKKworICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSA6dGVybTpgc2luZ2xlLWRpc3BhdGNoIDxzaW5nbGUKKyAgIGRpc3BhdGNoPmAgOnRlcm06YGdlbmVyaWMgZnVuY3Rpb25gLgorCisgICBUbyBkZWZpbmUgYSBnZW5lcmljIGZ1bmN0aW9uLCBkZWNvcmF0ZSBpdCB3aXRoIHRoZSBgYEBzaW5nbGVkaXNwYXRjaGBgCisgICBkZWNvcmF0b3IuIE5vdGUgdGhhdCB0aGUgZGlzcGF0Y2ggaGFwcGVucyBvbiB0aGUgdHlwZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQsCisgICBjcmVhdGUgeW91ciBmdW5jdGlvbiBhY2NvcmRpbmdseTo6CisKKyAgICAgPj4+IGZyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaAorICAgICA+Pj4gQHNpbmdsZWRpc3BhdGNoCisgICAgIC4uLiBkZWYgZnVuKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkxldCBtZSBqdXN0IHNheSwiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZykKKworICAgVG8gYWRkIG92ZXJsb2FkZWQgaW1wbGVtZW50YXRpb25zIHRvIHRoZSBmdW5jdGlvbiwgdXNlIHRoZSA6ZnVuYzpgcmVnaXN0ZXJgCisgICBhdHRyaWJ1dGUgb2YgdGhlIGdlbmVyaWMgZnVuY3Rpb24uICBJdCBpcyBhIGRlY29yYXRvciwgdGFraW5nIGEgdHlwZQorICAgcGFyYW1ldGVyIGFuZCBkZWNvcmF0aW5nIGEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBvcGVyYXRpb24gZm9yIHRoYXQKKyAgIHR5cGU6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGludCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIlN0cmVuZ3RoIGluIG51bWJlcnMsIGVoPyIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnKQorICAgICAuLi4KKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIobGlzdCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkVudW1lcmF0ZSB0aGlzOiIpCisgICAgIC4uLiAgICAgZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFyZyk6CisgICAgIC4uLiAgICAgICAgIHByaW50KGksIGVsZW0pCisKKyAgIFRvIGVuYWJsZSByZWdpc3RlcmluZyBsYW1iZGFzIGFuZCBwcmUtZXhpc3RpbmcgZnVuY3Rpb25zLCB0aGUKKyAgIDpmdW5jOmByZWdpc3RlcmAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIGluIGEgZnVuY3Rpb25hbCBmb3JtOjoKKworICAgICA+Pj4gZGVmIG5vdGhpbmcoYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBwcmludCgiTm90aGluZy4iKQorICAgICAuLi4KKyAgICAgPj4+IGZ1bi5yZWdpc3Rlcih0eXBlKE5vbmUpLCBub3RoaW5nKQorCisgICBUaGUgOmZ1bmM6YHJlZ2lzdGVyYCBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgdW5kZWNvcmF0ZWQgZnVuY3Rpb24gd2hpY2gKKyAgIGVuYWJsZXMgZGVjb3JhdG9yIHN0YWNraW5nLCBwaWNrbGluZywgYXMgd2VsbCBhcyBjcmVhdGluZyB1bml0IHRlc3RzIGZvcgorICAgZWFjaCB2YXJpYW50IGluZGVwZW5kZW50bHk6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGZsb2F0KQorICAgICAuLi4gQGZ1bi5yZWdpc3RlcihEZWNpbWFsKQorICAgICAuLi4gZGVmIGZ1bl9udW0oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiSGFsZiBvZiB5b3VyIG51bWJlcjoiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZyAvIDIpCisgICAgIC4uLgorICAgICA+Pj4gZnVuX251bSBpcyBmdW4KKyAgICAgRmFsc2UKKworICAgV2hlbiBjYWxsZWQsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGRpc3BhdGNoZXMgb24gdGhlIHR5cGUgb2YgdGhlIGZpcnN0CisgICBhcmd1bWVudDo6CisKKyAgICAgPj4+IGZ1bigiSGVsbG8sIHdvcmxkLiIpCisgICAgIEhlbGxvLCB3b3JsZC4KKyAgICAgPj4+IGZ1bigidGVzdC4iLCB2ZXJib3NlPVRydWUpCisgICAgIExldCBtZSBqdXN0IHNheSwgdGVzdC4KKyAgICAgPj4+IGZ1big0MiwgdmVyYm9zZT1UcnVlKQorICAgICBTdHJlbmd0aCBpbiBudW1iZXJzLCBlaD8gNDIKKyAgICAgPj4+IGZ1bihbJ3NwYW0nLCAnc3BhbScsICdlZ2dzJywgJ3NwYW0nXSwgdmVyYm9zZT1UcnVlKQorICAgICBFbnVtZXJhdGUgdGhpczoKKyAgICAgMCBzcGFtCisgICAgIDEgc3BhbQorICAgICAyIGVnZ3MKKyAgICAgMyBzcGFtCisgICAgID4+PiBmdW4oTm9uZSkKKyAgICAgTm90aGluZy4KKyAgICAgPj4+IGZ1bigxLjIzKQorICAgICAwLjYxNQorCisgICBXaGVyZSB0aGVyZSBpcyBubyByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIHR5cGUsIGl0cworICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorICAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlY29yYXRlZCB3aXRoIGBgQHNpbmdsZWRpc3BhdGNoYGAgaXMgcmVnaXN0ZXJlZAorICAgZm9yIHRoZSBiYXNlIGBgb2JqZWN0YGAgdHlwZSwgd2hpY2ggbWVhbnMgaXQgaXMgdXNlZCBpZiBubyBiZXR0ZXIKKyAgIGltcGxlbWVudGF0aW9uIGlzIGZvdW5kLgorCisgICBUbyBjaGVjayB3aGljaCBpbXBsZW1lbnRhdGlvbiB3aWxsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGNob29zZSBmb3IKKyAgIGEgZ2l2ZW4gdHlwZSwgdXNlIHRoZSBgYGRpc3BhdGNoKClgYCBhdHRyaWJ1dGU6OgorCisgICAgID4+PiBmdW4uZGlzcGF0Y2goZmxvYXQpCisgICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgICA+Pj4gZnVuLmRpc3BhdGNoKGRpY3QpICAgICMgbm90ZTogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICA8ZnVuY3Rpb24gZnVuIGF0IDB4MTAzZmUwMDAwPgorCisgICBUbyBhY2Nlc3MgYWxsIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb25zLCB1c2UgdGhlIHJlYWQtb25seSBgYHJlZ2lzdHJ5YGAKKyAgIGF0dHJpYnV0ZTo6CisKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5LmtleXMoKQorICAgIGRpY3Rfa2V5cyhbPGNsYXNzICdOb25lVHlwZSc+LCA8Y2xhc3MgJ2ludCc+LCA8Y2xhc3MgJ29iamVjdCc+LAorICAgICAgICAgICAgICA8Y2xhc3MgJ2RlY2ltYWwuRGVjaW1hbCc+LCA8Y2xhc3MgJ2xpc3QnPiwKKyAgICAgICAgICAgICAgPGNsYXNzICdmbG9hdCc+XSkKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5W2Zsb2F0XQorICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgID4+PiBmdW4ucmVnaXN0cnlbb2JqZWN0XQorICAgIDxmdW5jdGlvbiBmdW4gYXQgMHgxMDNmZTAwMDA+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgd3JhcHBlZCwgYXNzaWduZWQ9V1JBUFBFUl9BU1NJR05NRU5UUywgdXBkYXRlZD1XUkFQUEVSX1VQREFURVMpCiAKICAgIFVwZGF0ZSBhICp3cmFwcGVyKiBmdW5jdGlvbiB0byBsb29rIGxpa2UgdGhlICp3cmFwcGVkKiBmdW5jdGlvbi4gVGhlIG9wdGlvbmFsCkBAIC0yMTIsOCArMzc5LDggQEAKIAogICAgVG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBmb3IgaW50cm9zcGVjdGlvbiBhbmQgb3RoZXIgcHVycG9zZXMKICAgIChlLmcuIGJ5cGFzc2luZyBhIGNhY2hpbmcgZGVjb3JhdG9yIHN1Y2ggYXMgOmZ1bmM6YGxydV9jYWNoZWApLCB0aGlzIGZ1bmN0aW9uCi0gICBhdXRvbWF0aWNhbGx5IGFkZHMgYSBfX3dyYXBwZWRfXyBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KLSAgIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KKyAgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KKyAgIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLgogCiAgICBUaGUgbWFpbiBpbnRlbmRlZCB1c2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgaW4gOnRlcm06YGRlY29yYXRvcmAgZnVuY3Rpb25zIHdoaWNoCiAgICB3cmFwIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gYW5kIHJldHVybiB0aGUgd3JhcHBlci4gSWYgdGhlIHdyYXBwZXIgZnVuY3Rpb24gaXMKQEAgLTIzNiw2ICs0MDMsMTEgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBNaXNzaW5nIGF0dHJpYnV0ZXMgbm8gbG9uZ2VyIHRyaWdnZXIgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgbm93IGFsd2F5cyByZWZlcnMgdG8gdGhlIHdyYXBwZWQKKyAgICAgIGZ1bmN0aW9uLCBldmVuIGlmIHRoYXQgZnVuY3Rpb24gZGVmaW5lZCBhIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUuCisgICAgICAoc2VlIDppc3N1ZTpgMTc0ODJgKQorCiAKIC4uIGRlY29yYXRvcjo6IHdyYXBzKHdyYXBwZWQsIGFzc2lnbmVkPVdSQVBQRVJfQVNTSUdOTUVOVFMsIHVwZGF0ZWQ9V1JBUFBFUl9VUERBVEVTKQogCkBAIC0zMDEsNCArNDczLDMgQEAKIGFyZSBub3QgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiAgQWxzbywgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3RzIGRlZmluZWQgaW4KIGNsYXNzZXMgYmVoYXZlIGxpa2Ugc3RhdGljIG1ldGhvZHMgYW5kIGRvIG5vdCB0cmFuc2Zvcm0gaW50byBib3VuZCBtZXRob2RzCiBkdXJpbmcgaW5zdGFuY2UgYXR0cmlidXRlIGxvb2stdXAuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2djLnJzdCBiL0RvYy9saWJyYXJ5L2djLnJzdAppbmRleCA1ODc4ZGE1Li44ZTNhNGJkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2MucnN0CkBAIC02Nyw2ICs2NywyNCBAQAogICAgcmV0dXJuZWQuCiAKIAorLi4gZnVuY3Rpb246OiBnZXRfc3RhdHMoKQorCisgICBSZXR1cm4gYSBsaXN0IG9mIDMgcGVyLWdlbmVyYXRpb24gZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgY29sbGVjdGlvbgorICAgc3RhdGlzdGljcyBzaW5jZSBpbnRlcnByZXRlciBzdGFydC4gIEF0IHRoaXMgbW9tZW50LCBlYWNoIGRpY3Rpb25hcnkgd2lsbAorICAgY29udGFpbiB0aGUgZm9sbG93aW5nIGl0ZW1zOgorCisgICAqIGBgY29sbGVjdGlvbnNgYCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZ2VuZXJhdGlvbiB3YXMgY29sbGVjdGVkOworCisgICAqIGBgY29sbGVjdGVkYGAgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGNvbGxlY3RlZCBpbnNpZGUgdGhpcworICAgICBnZW5lcmF0aW9uOworCisgICAqIGBgdW5jb2xsZWN0YWJsZWBgIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyB3aGljaCB3ZXJlIGZvdW5kCisgICAgIHRvIGJlIHVuY29sbGVjdGFibGUgKGFuZCB3ZXJlIHRoZXJlZm9yZSBtb3ZlZCB0byB0aGUgOmRhdGE6YGdhcmJhZ2VgCisgICAgIGxpc3QpIGluc2lkZSB0aGlzIGdlbmVyYXRpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc2V0X3RocmVzaG9sZCh0aHJlc2hvbGQwWywgdGhyZXNob2xkMVssIHRocmVzaG9sZDJdXSkKIAogICAgU2V0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGhyZXNob2xkcyAodGhlIGNvbGxlY3Rpb24gZnJlcXVlbmN5KS4gU2V0dGluZwpAQCAtMTU4LDI0ICsxNzYsMTMgQEAKIAogLi4gZGF0YTo6IGdhcmJhZ2UKIAotICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQgbm90IGJlCi0gICBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IG9iamVjdHMgd2l0aAotICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMuIE9iamVjdHMgdGhhdCBoYXZlIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFuZCBhcmUKLSAgIHBhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUgY2F1c2UgdGhlIGVudGlyZSByZWZlcmVuY2UgY3ljbGUgdG8gYmUgdW5jb2xsZWN0YWJsZSwKLSAgIGluY2x1ZGluZyBvYmplY3RzIG5vdCBuZWNlc3NhcmlseSBpbiB0aGUgY3ljbGUgYnV0IHJlYWNoYWJsZSBvbmx5IGZyb20gaXQuCi0gICBQeXRob24gZG9lc24ndCBjb2xsZWN0IHN1Y2ggY3ljbGVzIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSwgaW4gZ2VuZXJhbCwgaXQgaXNuJ3QKLSAgIHBvc3NpYmxlIGZvciBQeXRob24gdG8gZ3Vlc3MgYSBzYWZlIG9yZGVyIGluIHdoaWNoIHRvIHJ1biB0aGUgOm1ldGg6YF9fZGVsX19gCi0gICBtZXRob2RzLiAgSWYgeW91IGtub3cgYSBzYWZlIG9yZGVyLCB5b3UgY2FuIGZvcmNlIHRoZSBpc3N1ZSBieSBleGFtaW5pbmcgdGhlCi0gICAqZ2FyYmFnZSogbGlzdCwgYW5kIGV4cGxpY2l0bHkgYnJlYWtpbmcgY3ljbGVzIGR1ZSB0byB5b3VyIG9iamVjdHMgd2l0aGluIHRoZQotICAgbGlzdC4gIE5vdGUgdGhhdCB0aGVzZSBvYmplY3RzIGFyZSBrZXB0IGFsaXZlIGV2ZW4gc28gYnkgdmlydHVlIG9mIGJlaW5nIGluIHRoZQotICAgKmdhcmJhZ2UqIGxpc3QsIHNvIHRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSAqZ2FyYmFnZSogdG9vLiAgRm9yIGV4YW1wbGUsCi0gICBhZnRlciBicmVha2luZyBjeWNsZXMsIGRvIGBgZGVsIGdjLmdhcmJhZ2VbOl1gYCB0byBlbXB0eSB0aGUgbGlzdC4gIEl0J3MKLSAgIGdlbmVyYWxseSBiZXR0ZXIgdG8gYXZvaWQgdGhlIGlzc3VlIGJ5IG5vdCBjcmVhdGluZyBjeWNsZXMgY29udGFpbmluZyBvYmplY3RzCi0gICB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLCBhbmQgKmdhcmJhZ2UqIGNhbiBiZSBleGFtaW5lZCBpbiB0aGF0IGNhc2UgdG8KLSAgIHZlcmlmeSB0aGF0IG5vIHN1Y2ggY3ljbGVzIGFyZSBiZWluZyBjcmVhdGVkLgorICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQKKyAgIG5vdCBiZSBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgdGhpcworICAgbGlzdCBzaG91bGQgYmUgZW1wdHkgbW9zdCBvZiB0aGUgdGltZSwgZXhjZXB0IHdoZW4gdXNpbmcgaW5zdGFuY2VzIG9mCisgICBDIGV4dGVuc2lvbiB0eXBlcyB3aXRoIGEgbm9uLU5VTEwgYGB0cF9kZWxgYCBzbG90LgogCi0gICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlIGFkZGVkCi0gICB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCisgICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlCisgICBhZGRlZCB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBJZiB0aGlzIGxpc3QgaXMgbm9uLWVtcHR5IGF0IGludGVycHJldGVyIHNodXRkb3duLCBhCkBAIC0xODMsNiArMTkwLDEwIEBACiAgICAgICA6Y29uc3Q6YERFQlVHX1VOQ09MTEVDVEFCTEVgIGlzIHNldCwgaW4gYWRkaXRpb24gYWxsIHVuY29sbGVjdGFibGUgb2JqZWN0cwogICAgICAgYXJlIHByaW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBGb2xsb3dpbmcgOnBlcDpgNDQyYCwgb2JqZWN0cyB3aXRoIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBkb24ndCBlbmQKKyAgICAgIHVwIGluIDphdHRyOmBnYy5nYXJiYWdlYCBhbnltb3JlLgorCiAuLiBkYXRhOjogY2FsbGJhY2tzCiAKICAgIEEgbGlzdCBvZiBjYWxsYmFja3MgdGhhdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGJlZm9yZSBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2dsb2IucnN0IGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKaW5kZXggZWZmMTM4Yi4uYWJjYmYzOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKQEAgLTI1LDYgKzI1LDEwIEBACiBGb3IgZXhhbXBsZSwgYGAnWz9dJ2BgIG1hdGNoZXMgdGhlIGNoYXJhY3RlciBgYCc/J2BgLgogCiAKKy4uIHNlZWFsc286OgorICAgVGhlIDptb2Q6YHBhdGhsaWJgIG1vZHVsZSBvZmZlcnMgaGlnaC1sZXZlbCBwYXRoIG9iamVjdHMuCisKKwogLi4gZnVuY3Rpb246OiBnbG9iKHBhdGhuYW1lKQogCiAgICBSZXR1cm4gYSBwb3NzaWJseS1lbXB0eSBsaXN0IG9mIHBhdGggbmFtZXMgdGhhdCBtYXRjaCAqcGF0aG5hbWUqLCB3aGljaCBtdXN0IGJlCkBAIC00MCw2ICs0NCwxNyBAQAogICAgd2l0aG91dCBhY3R1YWxseSBzdG9yaW5nIHRoZW0gYWxsIHNpbXVsdGFuZW91c2x5LgogCiAKKy4uIGZ1bmN0aW9uOjogZXNjYXBlKHBhdGhuYW1lKQorCisgICBFc2NhcGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyAoYGAnPydgYCwgYGAnKidgYCBhbmQgYGAnWydgYCkuCisgICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBtYXRjaCBhbiBhcmJpdHJhcnkgbGl0ZXJhbCBzdHJpbmcgdGhhdCBtYXkKKyAgIGhhdmUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGl0LiAgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIGRyaXZlL1VOQworICAgc2hhcmVwb2ludHMgYXJlIG5vdCBlc2NhcGVkLCBlLmcuIG9uIFdpbmRvd3MKKyAgIGBgZXNjYXBlKCcvLz8vYzovUXVvIHZhZGlzPy50eHQnKWBgIHJldHVybnMgYGAnLy8/L2M6L1F1byB2YWRpc1s/XS50eHQnYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGRpcmVjdG9yeSBjb250YWluaW5nIG9ubHkgdGhlIGZvbGxvd2luZyBmaWxlczoKIDpmaWxlOmAxLmdpZmAsIDpmaWxlOmAyLnR4dGAsIGFuZCA6ZmlsZTpgY2FyZC5naWZgLiAgOmZ1bmM6YGdsb2JgIHdpbGwgcHJvZHVjZQogdGhlIGZvbGxvd2luZyByZXN1bHRzLiAgTm90aWNlIGhvdyBhbnkgbGVhZGluZyBjb21wb25lbnRzIG9mIHRoZSBwYXRoIGFyZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QgYi9Eb2MvbGlicmFyeS9nemlwLnJzdAppbmRleCBlYzE2ZjZhLi5kZTUwNjNhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nemlwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nemlwLnJzdApAQCAtMzUsOCArMzUsOCBAQAogICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0KSwgb3IgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAncidgYCwgYGAncmInYGAsIGBgJ2EnYGAsIGBgJ2FiJ2BgLAotICAgYGAndydgYCwgb3IgYGAnd2InYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwgYGAnYXQnYGAsIG9yIGBgJ3d0J2BgIGZvcgotICAgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KKyAgIGBgJ3cnYGAsIGBgJ3diJ2BgLCBgYCd4J2BgIG9yIGBgJ3hiJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsCisgICBgYCdhdCdgYCwgYGAnd3QnYGAsIG9yIGBgJ3h0J2BgIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgogCiAgICBUaGUgKmNvbXByZXNzbGV2ZWwqIGFyZ3VtZW50IGlzIGFuIGludGVnZXIgZnJvbSAwIHRvIDksIGFzIGZvciB0aGUKICAgIDpjbGFzczpgR3ppcEZpbGVgIGNvbnN0cnVjdG9yLgpAQCAtNTMsNiArNTMsOSBAQAogICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgKmZpbGVuYW1lKiBiZWluZyBhIGZpbGUgb2JqZWN0LCBzdXBwb3J0IGZvciB0ZXh0IG1vZGUsCiAgICAgICBhbmQgdGhlICplbmNvZGluZyosICplcnJvcnMqIGFuZCAqbmV3bGluZSogYXJndW1lbnRzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgJ3gnYGAsIGBgJ3hiJ2BgIGFuZCBgYCd4dCdgYCBtb2Rlcy4KKwogCiAuLiBjbGFzczo6IEd6aXBGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9Tm9uZSwgY29tcHJlc3NsZXZlbD05LCBmaWxlb2JqPU5vbmUsIG10aW1lPU5vbmUpCiAKQEAgLTczLDggKzc2LDkgQEAKICAgIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAncidgYCwgYGAncmInYGAsIGBgJ2EnYGAsIGBgJ2FiJ2BgLCBgYCd3J2BgLAotICAgb3IgYGAnd2InYGAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBvciB3cml0dGVuLiAgVGhlIGRlZmF1bHQKLSAgIGlzIHRoZSBtb2RlIG9mICpmaWxlb2JqKiBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KKyAgIGBgJ3diJ2BgLCBgYCd4J2BgLCBvciBgYCd4YidgYCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yCisgICB3cml0dGVuLiAgVGhlIGRlZmF1bHQgaXMgdGhlIG1vZGUgb2YgKmZpbGVvYmoqIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIHRoZQorICAgZGVmYXVsdCBpcyBgYCdyYidgYC4KIAogICAgTm90ZSB0aGF0IHRoZSBmaWxlIGlzIGFsd2F5cyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuIFRvIG9wZW4gYSBjb21wcmVzc2VkIGZpbGUKICAgIGluIHRleHQgbW9kZSwgdXNlIDpmdW5jOmAub3BlbmAgKG9yIHdyYXAgeW91ciA6Y2xhc3M6YEd6aXBGaWxlYCB3aXRoIGFuCkBAIC0xMjUsNiArMTI5LDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGUgOm1ldGg6YGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWQxYCBtZXRob2QgaXMgbm93IGltcGxlbWVudGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgJ3gnYGAgYW5kIGBgJ3hiJ2BgIG1vZGVzLgorCiAKIC4uIGZ1bmN0aW9uOjogY29tcHJlc3MoZGF0YSwgY29tcHJlc3NsZXZlbD05KQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdCBiL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CmluZGV4IDQ5ZmVkZWMuLmIxZGFiYTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CkBAIC0zMiw2ICszMiwxMCBAQAogICAgU29tZSBhbGdvcml0aG1zIGhhdmUga25vd24gaGFzaCBjb2xsaXNpb24gd2Vha25lc3NlcywgcmVmZXIgdG8gdGhlICJTZWUKICAgIGFsc28iIHNlY3Rpb24gYXQgdGhlIGVuZC4KIAorCitIYXNoIGFsZ29yaXRobXMKKy0tLS0tLS0tLS0tLS0tLQorCiBUaGVyZSBpcyBvbmUgY29uc3RydWN0b3IgbWV0aG9kIG5hbWVkIGZvciBlYWNoIHR5cGUgb2YgOmRmbjpgaGFzaGAuICBBbGwgcmV0dXJuCiBhIGhhc2ggb2JqZWN0IHdpdGggdGhlIHNhbWUgc2ltcGxlIGludGVyZmFjZS4gRm9yIGV4YW1wbGU6IHVzZSA6ZnVuYzpgc2hhMWAgdG8KIGNyZWF0ZSBhIFNIQTEgaGFzaCBvYmplY3QuIFlvdSBjYW4gbm93IGZlZWQgdGhpcyBvYmplY3Qgd2l0aCA6dGVybTpgYnl0ZXMtbGlrZQpAQCAtNTMsOSArNTcsMTMgQEAKIC4uIGluZGV4Ojogc2luZ2xlOiBPcGVuU1NMOyAodXNlIGluIG1vZHVsZSBoYXNobGliKQogCiBDb25zdHJ1Y3RvcnMgZm9yIGhhc2ggYWxnb3JpdGhtcyB0aGF0IGFyZSBhbHdheXMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBhcmUKLTpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsIGFuZAotOmZ1bmM6YHNoYTUxMmAuICBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uIHRoZQotT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KKzpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsCis6ZnVuYzpgc2hhNTEyYCwgOmZ1bmM6YHNoYTNfMjI0YCwgOmZ1bmM6YHNoYTNfMjU2YCwgOmZ1bmM6YHNoYTNfMzg0YCwgYW5kCis6ZnVuYzpgc2hhM181MTJgLiBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uCit0aGUgT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCBzaGEzIGZhbWlseSBvZiBoYXNoIGFsZ29yaXRobXMuCiAKIEZvciBleGFtcGxlLCB0byBvYnRhaW4gdGhlIGRpZ2VzdCBvZiB0aGUgYnl0ZSBzdHJpbmcgYGBiJ05vYm9keSBpbnNwZWN0cyB0aGUKIHNwYW1taXNoIHJlcGV0aXRpb24nYGA6OgpAQCAtMTIyLDYgKzEzMCwxOCBAQAogCiAgICBUaGUgaW50ZXJuYWwgYmxvY2sgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gaW4gYnl0ZXMuCiAKK0EgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworLi4gYXR0cmlidXRlOjogaGFzaC5uYW1lCisKKyAgIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGlzIGhhc2gsIGFsd2F5cyBsb3dlcmNhc2UgYW5kIGFsd2F5cyBzdWl0YWJsZSBhcyBhCisgICBwYXJhbWV0ZXIgdG8gOmZ1bmM6YG5ld2AgdG8gY3JlYXRlIGFub3RoZXIgaGFzaCBvZiB0aGlzIHR5cGUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmFtZSBhdHRyaWJ1dGUgaGFzIGJlZW4gcHJlc2VudCBpbiBDUHl0aG9uIHNpbmNlIGl0cyBpbmNlcHRpb24sIGJ1dAorICAgICAgdW50aWwgUHl0aG9uIDMuNCB3YXMgbm90IGZvcm1hbGx5IHNwZWNpZmllZCwgc28gbWF5IG5vdCBleGlzdCBvbiBzb21lCisgICAgICBwbGF0Zm9ybXMuCisKIEEgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogCkBAIC0xNTgsNiArMTc4LDQ1IEBACiAgICBjb21wdXRlIHRoZSBkaWdlc3RzIG9mIGRhdGEgc2hhcmluZyBhIGNvbW1vbiBpbml0aWFsIHN1YnN0cmluZy4KIAogCitLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworS2V5IGRlcml2YXRpb24gYW5kIGtleSBzdHJldGNoaW5nIGFsZ29yaXRobXMgYXJlIGRlc2lnbmVkIGZvciBzZWN1cmUgcGFzc3dvcmQKK2hhc2hpbmcuIE5haXZlIGFsZ29yaXRobXMgc3VjaCBhcyBgYHNoYTEocGFzc3dvcmQpYGAgYXJlIG5vdCByZXNpc3RhbnQKK2FnYWluc3QgYnJ1dGUtZm9yY2UgYXR0YWNrcy4gQSBnb29kIHBhc3N3b3JkIGhhc2hpbmcgZnVuY3Rpb24gbXVzdCBiZSB0dW5hYmxlLAorc2xvdyBhbmQgaW5jbHVkZSBhIHNhbHQuCisKKworLi4gZnVuY3Rpb246OiBwYmtkZjJfaG1hYyhuYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbj1Ob25lKQorCisgICBUaGUgZnVuY3Rpb24gcHJvdmlkZXMgUEtDUyM1IHBhc3N3b3JkLWJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIuIEl0CisgICB1c2VzIEhNQUMgYXMgcHNldWRvcmFuZG9tIGZ1bmN0aW9uLgorCisgICBUaGUgc3RyaW5nICpuYW1lKiBpcyB0aGUgZGVzaXJlZCBuYW1lIG9mIHRoZSBoYXNoIGRpZ2VzdCBhbGdvcml0aG0gZm9yCisgICBITUFDLCBlLmcuICdzaGExJyBvciAnc2hhMjU2Jy4gKnBhc3N3b3JkKiBhbmQgKnNhbHQqIGFyZSBpbnRlcnByZXRlZCBhcworICAgYnVmZmVycyBvZiBieXRlcy4gQXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgc2hvdWxkIGxpbWl0ICpwYXNzd29yZCogdG8KKyAgIGEgc2Vuc2libGUgdmFsdWUgKGUuZy4gMTAyNCkuICpzYWx0KiBzaG91bGQgYmUgYWJvdXQgMTYgb3IgbW9yZSBieXRlcyBmcm9tCisgICBhIHByb3BlciBzb3VyY2UsIGUuZy4gOmZ1bmM6YG9zLnVyYW5kb21gLgorCisgICBUaGUgbnVtYmVyIG9mICpyb3VuZHMqIHNob3VsZCBiZSBjaG9zZW4gYmFzZWQgb24gdGhlIGhhc2ggYWxnb3JpdGhtIGFuZAorICAgY29tcHV0aW5nIHBvd2VyLiBBcyBvZiAyMDEzIGEgdmFsdWUgb2YgYXQgbGVhc3QgMTAwLDAwMCByb3VuZHMgb2YgU0hBLTI1NgorICAgaGF2ZSBiZWVuIHN1Z2dlc3RlZC4KKworICAgKmRrbGVuKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkZXJpdmVkIGtleS4gSWYgKmRrbGVuKiBpcyBgYE5vbmVgYCB0aGVuIHRoZQorICAgZGlnZXN0IHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtICpuYW1lKiBpcyB1c2VkLCBlLmcuIDY0IGZvciBTSEEtNTEyLgorCisgICA+Pj4gaW1wb3J0IGhhc2hsaWIsIGJpbmFzY2lpCisgICA+Pj4gZGsgPSBoYXNobGliLnBia2RmMl9obWFjKCdzaGEyNTYnLCBiJ3Bhc3N3b3JkJywgYidzYWx0JywgMTAwMDAwKQorICAgPj4+IGJpbmFzY2lpLmhleGxpZnkoZGspCisgICBiJzAzOTRhMmVkZTMzMmM5YTEzZWI4MmU5YjI0NjMxNjA0YzMxZGY5NzhiNGUyZjBmYmQyYzU0OTk0NGY5ZDc5YTUnCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBub3RlOjogQSBmYXN0IGltcGxlbWVudGF0aW9uIG9mICpwYmtkZjJfaG1hYyogaXMgYXZhaWxhYmxlIHdpdGggT3BlblNTTC4KKyAgICAgIFRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpbmxpbmUgdmVyc2lvbiBvZiA6bW9kOmBobWFjYC4gSXQgaXMKKyAgICAgIGFib3V0IHRocmVlIHRpbWVzIHNsb3dlciBhbmQgZG9lc24ndCByZWxlYXNlIHRoZSBHSUwuCisKKwogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmBobWFjYApAQCAtMTczLDMgKzIzMiw1IEBACiAgICAgICBXaWtpcGVkaWEgYXJ0aWNsZSB3aXRoIGluZm9ybWF0aW9uIG9uIHdoaWNoIGFsZ29yaXRobXMgaGF2ZSBrbm93biBpc3N1ZXMgYW5kCiAgICAgICB3aGF0IHRoYXQgbWVhbnMgcmVnYXJkaW5nIHRoZWlyIHVzZS4KIAorICAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjg5OC50eHQKKyAgICAgIFBLQ1MgIzU6IFBhc3N3b3JkLUJhc2VkIENyeXB0b2dyYXBoeSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gMi4wCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9obWFjLnJzdCBiL0RvYy9saWJyYXJ5L2htYWMucnN0CmluZGV4IDk1NzU2OTMuLjJlOWIwYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2htYWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2htYWMucnN0CkBAIC0xNiwyMCArMTYsMzMgQEAKIAogLi4gZnVuY3Rpb246OiBuZXcoa2V5LCBtc2c9Tm9uZSwgZGlnZXN0bW9kPU5vbmUpCiAKLSAgIFJldHVybiBhIG5ldyBobWFjIG9iamVjdC4gICprZXkqIGlzIGEgYnl0ZXMgb2JqZWN0IGdpdmluZyB0aGUgc2VjcmV0IGtleS4gIElmCi0gICAqbXNnKiBpcyBwcmVzZW50LCB0aGUgbWV0aG9kIGNhbGwgYGB1cGRhdGUobXNnKWBgIGlzIG1hZGUuICAqZGlnZXN0bW9kKiBpcwotICAgdGhlIGRpZ2VzdCBjb25zdHJ1Y3RvciBvciBtb2R1bGUgZm9yIHRoZSBITUFDIG9iamVjdCB0byB1c2UuIEl0IGRlZmF1bHRzIHRvCi0gICB0aGUgOmRhdGE6YGhhc2hsaWIubWQ1YCBjb25zdHJ1Y3Rvci4KKyAgIFJldHVybiBhIG5ldyBobWFjIG9iamVjdC4gICprZXkqIGlzIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCBnaXZpbmcgdGhlCisgICBzZWNyZXQga2V5LiAgSWYgKm1zZyogaXMgcHJlc2VudCwgdGhlIG1ldGhvZCBjYWxsIGBgdXBkYXRlKG1zZylgYCBpcyBtYWRlLgorICAgKmRpZ2VzdG1vZCogaXMgdGhlIGRpZ2VzdCBuYW1lLCBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQworICAgb2JqZWN0IHRvIHVzZS4gSXQgc3VwcG9ydHMgYW55IG5hbWUgc3VpdGFibGUgdG8gOmZ1bmM6YGhhc2hsaWIubmV3YCBhbmQKKyAgIGRlZmF1bHRzIHRvIHRoZSA6ZGF0YTpgaGFzaGxpYi5tZDVgIGNvbnN0cnVjdG9yLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgUGFyYW1ldGVyICprZXkqIGNhbiBiZSBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QuIFBhcmFtZXRlciAqbXNnKiBjYW4KKyAgICAgIGJlIG9mIGFueSB0eXBlIHN1cHBvcnRlZCBieSA6bW9kOmBoYXNobGliYC4KKworICAgICAgUGFyYW10ZXIgKmRpZ2VzdG1vZCogY2FuIGJlIHRoZSBuYW1lIG9mIGEgaGFzaCBhbGdvcml0aG0uCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIE1ENSBhcyBpbXBsaWNpdCBkZWZhdWx0IGRpZ2VzdCBmb3IgKmRpZ2VzdG1vZCogaXMgZGVwcmVjYXRlZC4KIAogCiBBbiBITUFDIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAuLiBtZXRob2Q6OiBITUFDLnVwZGF0ZShtc2cpCiAKLSAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCB0aGUgYnl0ZXMgb2JqZWN0ICptc2cqLiAgUmVwZWF0ZWQgY2FsbHMgYXJlCi0gICBlcXVpdmFsZW50IHRvIGEgc2luZ2xlIGNhbGwgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGFyZ3VtZW50czoKKyAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCAqbXNnKi4gIFJlcGVhdGVkIGNhbGxzIGFyZSBlcXVpdmFsZW50IHRvIGEKKyAgIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6CiAgICBgYG0udXBkYXRlKGEpOyBtLnVwZGF0ZShiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLnVwZGF0ZShhICsgYilgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqbXNnKiBjYW4gYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgorCiAKIC4uIG1ldGhvZDo6IEhNQUMuZGlnZXN0KCkKIApAQCAtNjYsNiArNzksMjUgQEAKICAgIGNvbXB1dGUgdGhlIGRpZ2VzdHMgb2Ygc3RyaW5ncyB0aGF0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc3Vic3RyaW5nLgogCiAKK0EgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworLi4gYXR0cmlidXRlOjogSE1BQy5kaWdlc3Rfc2l6ZQorCisgICBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIEhNQUMgZGlnZXN0IGluIGJ5dGVzLgorCisuLiBhdHRyaWJ1dGU6OiBITUFDLmJsb2NrX3NpemUKKworICAgVGhlIGludGVybmFsIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtIGluIGJ5dGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYXR0cmlidXRlOjogSE1BQy5uYW1lCisKKyAgIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGlzIEhNQUMsIGFsd2F5cyBsb3dlcmNhc2UsIGUuZy4gYGBobWFjLW1kNWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGlzIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9uOgogCiAuLiBmdW5jdGlvbjo6IGNvbXBhcmVfZGlnZXN0KGEsIGIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CmluZGV4IDBhYWJiYWQuLjA5YjBhYmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CkBAIC0yMCw2ICsyMCw3IEBACiAgICBOb3RlIHRoYXQgdGhlIHRyYWlsaW5nIHNlbWljb2xvbiBpcyBpbmNsdWRlZCBpbiB0aGUgbmFtZSAoZS5nLiBgYCdndDsnYGApLAogICAgaG93ZXZlciBzb21lIG9mIHRoZSBuYW1lcyBhcmUgYWNjZXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGV2ZW4gd2l0aG91dCB0aGUKICAgIHNlbWljb2xvbjogaW4gdGhpcyBjYXNlIHRoZSBuYW1lIGlzIHByZXNlbnQgd2l0aCBhbmQgd2l0aG91dCB0aGUgYGAnOydgYC4KKyAgIFNlZSBhbHNvIDpmdW5jOmBodG1sLnVuZXNjYXBlYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdAppbmRleCBlNDE1NGVmLi40NGI3ZDZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CkBAIC0xNiwxNCArMTYsMjEgQEAKIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjbGFzcyA6Y2xhc3M6YEhUTUxQYXJzZXJgIHdoaWNoIHNlcnZlcyBhcyB0aGUgYmFzaXMgZm9yCiBwYXJzaW5nIHRleHQgZmlsZXMgZm9ybWF0dGVkIGluIEhUTUwgKEh5cGVyVGV4dCBNYXJrLXVwIExhbmd1YWdlKSBhbmQgWEhUTUwuCiAKLS4uIGNsYXNzOjogSFRNTFBhcnNlcihzdHJpY3Q9RmFsc2UpCisuLiBjbGFzczo6IEhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlLCAqLCBjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCi0gICBDcmVhdGUgYSBwYXJzZXIgaW5zdGFuY2UuICBJZiAqc3RyaWN0KiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSwgdGhlIHBhcnNlcgotICAgd2lsbCBhY2NlcHQgYW5kIHBhcnNlIGludmFsaWQgbWFya3VwLiAgSWYgKnN0cmljdCogaXMgYGBUcnVlYGAgdGhlIHBhcnNlcgotICAgd2lsbCByYWlzZSBhbiA6ZXhjOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3JgIGV4Y2VwdGlvbiBpbnN0ZWFkIFsjXV8gd2hlbgotICAgaXQncyBub3QgYWJsZSB0byBwYXJzZSB0aGUgbWFya3VwLgotICAgVGhlIHVzZSBvZiBgYHN0cmljdD1UcnVlYGAgaXMgZGlzY291cmFnZWQgYW5kIHRoZSAqc3RyaWN0KiBhcmd1bWVudCBpcwotICAgZGVwcmVjYXRlZC4KKyAgIENyZWF0ZSBhIHBhcnNlciBpbnN0YW5jZS4KKworICAgSWYgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIGBgVHJ1ZWBgIChkZWZhdWx0OiBgYEZhbHNlYGApLCBhbGwgY2hhcmFjdGVyCisgICByZWZlcmVuY2VzIChleGNlcHQgdGhlIG9uZXMgaW4gYGBzY3JpcHRgYC9gYHN0eWxlYGAgZWxlbWVudHMpIGFyZQorICAgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLgorICAgVGhlIHVzZSBvZiBgYGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZWBgIGlzIGVuY291cmFnZWQgYW5kIHdpbGwgYmVjb21lCisgICB0aGUgZGVmYXVsdCBpbiBQeXRob24gMy41LgorCisgICBJZiAqc3RyaWN0KiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSwgdGhlIHBhcnNlciB3aWxsIGFjY2VwdCBhbmQgcGFyc2UKKyAgIGludmFsaWQgbWFya3VwLiAgSWYgKnN0cmljdCogaXMgYGBUcnVlYGAgdGhlIHBhcnNlciB3aWxsIHJhaXNlIGFuCisgICA6ZXhjOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3JgIGV4Y2VwdGlvbiBpbnN0ZWFkIFsjXV8gd2hlbiBpdCdzIG5vdAorICAgYWJsZSB0byBwYXJzZSB0aGUgbWFya3VwLiAgVGhlIHVzZSBvZiBgYHN0cmljdD1UcnVlYGAgaXMgZGlzY291cmFnZWQgYW5kCisgICB0aGUgKnN0cmljdCogYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4KIAogICAgQW4gOmNsYXNzOmAuSFRNTFBhcnNlcmAgaW5zdGFuY2UgaXMgZmVkIEhUTUwgZGF0YSBhbmQgY2FsbHMgaGFuZGxlciBtZXRob2RzCiAgICB3aGVuIHN0YXJ0IHRhZ3MsIGVuZCB0YWdzLCB0ZXh0LCBjb21tZW50cywgYW5kIG90aGVyIG1hcmt1cCBlbGVtZW50cyBhcmUKQEAgLTM0LDEyICs0MSwxNSBAQAogICAgaGFuZGxlciBmb3IgZWxlbWVudHMgd2hpY2ggYXJlIGNsb3NlZCBpbXBsaWNpdGx5IGJ5IGNsb3NpbmcgYW4gb3V0ZXIgZWxlbWVudC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgICpzdHJpY3QqIGtleXdvcmQgYWRkZWQuCisgICAgICAqc3RyaWN0KiBhcmd1bWVudCBhZGRlZC4KIAogICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNQogICAgICAgVGhlICpzdHJpY3QqIGFyZ3VtZW50IGFuZCB0aGUgc3RyaWN0IG1vZGUgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuCiAgICAgICBUaGUgcGFyc2VyIGlzIG5vdyBhYmxlIHRvIGFjY2VwdCBhbmQgcGFyc2UgaW52YWxpZCBtYXJrdXAgdG9vLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmNvbnZlcnRfY2hhcnJlZnMqIGtleXdvcmQgYXJndW1lbnQgYWRkZWQuCisKIEFuIGV4Y2VwdGlvbiBpcyBkZWZpbmVkIGFzIHdlbGw6CiAKIApAQCAtNzQsNyArODQsNyBAQAogICAgICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgICAgcHJpbnQoIkVuY291bnRlcmVkIHNvbWUgZGF0YSAgOiIsIGRhdGEpCiAKLSAgIHBhcnNlciA9IE15SFRNTFBhcnNlcihzdHJpY3Q9RmFsc2UpCisgICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoKQogICAgcGFyc2VyLmZlZWQoJzxodG1sPjxoZWFkPjx0aXRsZT5UZXN0PC90aXRsZT48L2hlYWQ+JwogICAgICAgICAgICAgICAgJzxib2R5PjxoMT5QYXJzZSBtZSE8L2gxPjwvYm9keT48L2h0bWw+JykKIApAQCAtMTgxLDcgKzE5MSw4IEBACiAKICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwcm9jZXNzIGEgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSBvZiB0aGUgZm9ybQogICAgYGAmbmFtZTtgYCAoZS5nLiBgYCZndDtgYCksIHdoZXJlICpuYW1lKiBpcyBhIGdlbmVyYWwgZW50aXR5IHJlZmVyZW5jZQotICAgKGUuZy4gYGAnZ3QnYGApLgorICAgKGUuZy4gYGAnZ3QnYGApLiAgVGhpcyBtZXRob2QgaXMgbmV2ZXIgY2FsbGVkIGlmICpjb252ZXJ0X2NoYXJyZWZzKiBpcworICAgYGBUcnVlYGAuCiAKIAogLi4gbWV0aG9kOjogSFRNTFBhcnNlci5oYW5kbGVfY2hhcnJlZihuYW1lKQpAQCAtMTg5LDcgKzIwMCw4IEBACiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcHJvY2VzcyBkZWNpbWFsIGFuZCBoZXhhZGVjaW1hbCBudW1lcmljIGNoYXJhY3RlcgogICAgcmVmZXJlbmNlcyBvZiB0aGUgZm9ybSBgYCYjTk5OO2BgIGFuZCBgYCYjeE5OTjtgYC4gIEZvciBleGFtcGxlLCB0aGUgZGVjaW1hbAogICAgZXF1aXZhbGVudCBmb3IgYGAmZ3Q7YGAgaXMgYGAmIzYyO2BgLCB3aGVyZWFzIHRoZSBoZXhhZGVjaW1hbCBpcyBgYCYjeDNFO2BgOwotICAgaW4gdGhpcyBjYXNlIHRoZSBtZXRob2Qgd2lsbCByZWNlaXZlIGBgJzYyJ2BgIG9yIGBgJ3gzRSdgYC4KKyAgIGluIHRoaXMgY2FzZSB0aGUgbWV0aG9kIHdpbGwgcmVjZWl2ZSBgYCc2MidgYCBvciBgYCd4M0UnYGAuICBUaGlzIG1ldGhvZAorICAgaXMgbmV2ZXIgY2FsbGVkIGlmICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBgYFRydWVgYC4KIAogCiAuLiBtZXRob2Q6OiBIVE1MUGFyc2VyLmhhbmRsZV9jb21tZW50KGRhdGEpCkBAIC0yNzIsNyArMjg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJEZWNsICAgICA6IiwgZGF0YSkKIAotICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSkKKyAgIHBhcnNlciA9IE15SFRNTFBhcnNlcigpCiAKIFBhcnNpbmcgYSBkb2N0eXBlOjoKIApAQCAtMzI0LDcgKzMzNiw4IEBACiAgICBOdW0gZW50ICA6ID4KIAogRmVlZGluZyBpbmNvbXBsZXRlIGNodW5rcyB0byA6bWV0aDpgfkhUTUxQYXJzZXIuZmVlZGAgd29ya3MsIGJ1dAotOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2U6OgorOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyh1bmxlc3MgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIHNldCB0byBgYFRydWVgYCk6OgogCiAgICA+Pj4gZm9yIGNodW5rIGluIFsnPHNwJywgJ2FuPmJ1ZmYnLCAnZXJlZCAnLCAndGV4dDwvcycsICdwYW4+J106CiAgICAuLi4gICAgIHBhcnNlci5mZWVkKGNodW5rKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnJzdAppbmRleCAxMTA3Y2E5Li5kMDcwNmJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLnJzdApAQCAtMjAsNiArMjAsMTcgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKworLi4gZnVuY3Rpb246OiB1bmVzY2FwZShzKQorCisgICBDb252ZXJ0IGFsbCBuYW1lZCBhbmQgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyAoZS5nLiBgYCZndDtgYCwKKyAgIGBgJiM2MjtgYCwgYGAmeDNlO2BgKSBpbiB0aGUgc3RyaW5nICpzKiB0byB0aGUgY29ycmVzcG9uZGluZyB1bmljb2RlCisgICBjaGFyYWN0ZXJzLiAgVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBydWxlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIDUgc3RhbmRhcmQKKyAgIGZvciBib3RoIHZhbGlkIGFuZCBpbnZhbGlkIGNoYXJhY3RlciByZWZlcmVuY2VzLCBhbmQgdGhlIDpkYXRhOmBsaXN0IG9mCisgICBIVE1MIDUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgPGh0bWwuZW50aXRpZXMuaHRtbDU+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC0tLS0tLS0tLS0tLS0tCiAKIFN1Ym1vZHVsZXMgaW4gdGhlIGBgaHRtbGBgIHBhY2thZ2UgYXJlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CmluZGV4IDRkYWVlZWEuLjg5MmU2MmYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKQEAgLTI3LDcgKzI3LDcgQEAKIFRoZSBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAKLS4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lWywgc3RyaWN0XVssIHRpbWVvdXRdLCBcCisuLiBjbGFzczo6IEhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZVssIHRpbWVvdXRdLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKICAgIEFuIDpjbGFzczpgSFRUUENvbm5lY3Rpb25gIGluc3RhbmNlIHJlcHJlc2VudHMgb25lIHRyYW5zYWN0aW9uIHdpdGggYW4gSFRUUApAQCAtNTEsMTMgKzUxLDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKnNvdXJjZV9hZGRyZXNzKiB3YXMgYWRkZWQuCiAKLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMiAzLjQKLSAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIgotICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgICpzdHJpY3QqIHBhcmFtZXRlciBpcyByZW1vdmVkLiBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBub3Qgc3VwcG9ydGVkLgogCiAKIC4uIGNsYXNzOjogSFRUUFNDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZSwga2V5X2ZpbGU9Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlPU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZT1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSkKIApAQCAtODksMTkgKzg5LDE5IEBACiAgICAgICBUaGlzIGNsYXNzIG5vdyBzdXBwb3J0cyBIVFRQUyB2aXJ0dWFsIGhvc3RzIGlmIHBvc3NpYmxlICh0aGF0IGlzLAogICAgICAgaWYgOmRhdGE6YHNzbC5IQVNfU05JYCBpcyB0cnVlKS4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgcmVtb3ZlZC4gSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm90IHN1cHBvcnRlZCBhbnltb3JlLgogCiAKLS4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MFssIHN0cmljdF0sIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKKy4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MCwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKQogCiAgICBDbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHJldHVybmVkIHVwb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAgTm90CiAgICBpbnN0YW50aWF0ZWQgZGlyZWN0bHkgYnkgdXNlci4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgcmVtb3ZlZC4gSFRUUCAwLjkgc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm90IHN1cHBvcnRlZCBhbnltb3JlLgogCiAKIFRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGFzIGFwcHJvcHJpYXRlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CmluZGV4IDVhZWI3MTkuLjExM2FjNDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKQEAgLTE3MCwxMiArMTcwLDE5IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCi0gICAuLiBtZXRob2Q6OiBzZW5kX2Vycm9yKGNvZGUsIG1lc3NhZ2U9Tm9uZSkKKyAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lLCBleHBsYWluPU5vbmUpCiAKICAgICAgIFNlbmRzIGFuZCBsb2dzIGEgY29tcGxldGUgZXJyb3IgcmVwbHkgdG8gdGhlIGNsaWVudC4gVGhlIG51bWVyaWMgKmNvZGUqCi0gICAgICBzcGVjaWZpZXMgdGhlIEhUVFAgZXJyb3IgY29kZSwgd2l0aCAqbWVzc2FnZSogYXMgb3B0aW9uYWwsIG1vcmUgc3BlY2lmaWMgdGV4dC4gQQotICAgICAgY29tcGxldGUgc2V0IG9mIGhlYWRlcnMgaXMgc2VudCwgZm9sbG93ZWQgYnkgdGV4dCBjb21wb3NlZCB1c2luZyB0aGUKLSAgICAgIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUuCisgICAgICBzcGVjaWZpZXMgdGhlIEhUVFAgZXJyb3IgY29kZSwgd2l0aCAqbWVzc2FnZSogYXMgb3B0aW9uYWwsIG1vcmUgc3BlY2lmaWMKKyAgICAgIHRleHQsIHVzdWFsbHkgcmVmZXJyaW5nIHRvIHNob3J0IG1lc3NhZ2UgcmVzcG9uc2UuICBUaGUgKmV4cGxhaW4qCisgICAgICBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzZW5kIGEgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIGluCisgICAgICByZXNwb25zZSBjb250ZW50IGJvZHkuICBBIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzIGlzIHNlbnQsIGZvbGxvd2VkIGJ5CisgICAgICB0ZXh0IGNvbXBvc2VkIHVzaW5nIHRoZSA6YXR0cjpgZXJyb3JfbWVzc2FnZV9mb3JtYXRgIGNsYXNzIHZhcmlhYmxlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgVGhlIGVycm9yIHJlc3BvbnNlIGluY2x1ZGVzIGEgQ29udGVudC1MZW5ndGggaGVhZGVyLgorICAgICAgICAgQWRkZWQgdGhlICpleHBsYWluKiBhcmd1bWVudC4KKwogCiAgICAuLiBtZXRob2Q6OiBzZW5kX3Jlc3BvbnNlKGNvZGUsIG1lc3NhZ2U9Tm9uZSkKIApAQCAtMzYxLDYgKzM2OCwxNSBAQAogCiAgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwCiAKK0J5IGRlZmF1bHQsIHNlcnZlciBiaW5kcyBpdHNlbGYgdG8gYWxsIGludGVyZmFjZXMuIFRvIHJlc3RyaWN0IGl0IHRvIGJpbmQgdG8gYQorcGFydGljdWxhciBpbnRlcmZhY2Ugb25seSwgYGAtLWJpbmQgQUREUkVTU2BgIGFyZ3VtZW50IGNhbiBiZSB1c2VkLiBGb3IgZS5nLCB0bworcmVzdHJpY3QgdGhlIHNlcnZlciB0byBiaW5kIG9ubHkgdG8gbG9jYWxob3N0LiA6OgorCisgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwIC0tYmluZCAxMjcuMC4wLjEKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgYGAtLWJpbmRgYCBhcmd1bWVudCB3YXMgaW50cm9kdWNlZC4KKwogCiAuLiBjbGFzczo6IENHSUhUVFBSZXF1ZXN0SGFuZGxlcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pZGxlLnJzdCBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CmluZGV4IDM2ZDc4YjAuLjI3MThjZWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lkbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CkBAIC0xNiw3MCArMTYsODIgQEAKIAogKiBjb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgOm1vZDpgdGtpbnRlcmAgR1VJIHRvb2xraXQKIAotKiBjcm9zcy1wbGF0Zm9ybTogd29ya3Mgb24gV2luZG93cyBhbmQgVW5peAorKiBjcm9zcy1wbGF0Zm9ybTogd29ya3Mgb24gV2luZG93cywgVW5peCwgYW5kIE1hYyBPUyBYCiAKLSogbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcgYW5kIG1hbnkgb3RoZXIKLSAgZmVhdHVyZXMsIGUuZy4gc21hcnQgaW5kZW50IGFuZCBjYWxsIHRpcHMKKyogbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsCisgIHNtYXJ0IGluZGVudCwgY2FsbCB0aXBzLCBhbmQgbWFueSBvdGhlciBmZWF0dXJlcwogCiAqIFB5dGhvbiBzaGVsbCB3aW5kb3cgKGEuay5hLiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikKIAotKiBkZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgIGFuZCBzdGVwKQorKiBkZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgYW5kIHN0ZXApCiAKIAogTWVudXMKIC0tLS0tCiAKK0lETEUgaGFzIHR3byB3aW5kb3cgdHlwZXMsIHRoZSBTaGVsbCB3aW5kb3cgYW5kIHRoZSBFZGl0b3Igd2luZG93LiBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gSURMRSdzCittZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gRWFjaCBtZW51Citkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIENsaWNrIG9uCit0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYSBzZXBhcmF0ZSB3aW5kb3cKK2NvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZCAoZm9yIFVuaXggYW5kIFdpbmRvd3Mgb25seSkuCiAKLUZpbGUgbWVudQotXl5eXl5eXl5eCitGaWxlIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIE5ldyBmaWxlCi0gICBjcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgQ3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKIAogT3Blbi4uLgotICAgb3BlbiBhbiBleGlzdGluZyBmaWxlCisgICBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKIAogT3BlbiBtb2R1bGUuLi4KLSAgIG9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKworUmVjZW50IEZpbGVzCisgICBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKIAogQ2xhc3MgYnJvd3NlcgotICAgc2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQorICAgU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQogCiBQYXRoIGJyb3dzZXIKLSAgIHNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKKyAgIFNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBDbGFzcyBicm93c2VyCiAgICBzaW5nbGU6IFBhdGggYnJvd3NlcgogCiBTYXZlCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQgd2luZG93cyBoYXZlIGEgXCogYmVmb3JlIGFuZAotICAgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZCB3aW5kb3dzIGhhdmUgYQorICAgXCogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQogCiBTYXZlIEFzLi4uCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gbmV3IGZpbGUsIHdoaWNoIGJlY29tZXMgdGhlIGFzc29jaWF0ZWQgZmlsZQogCiBTYXZlIENvcHkgQXMuLi4KLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQorCitQcmludCBXaW5kb3cKKyAgIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdwogCiBDbG9zZQotICAgY2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgQ2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCiBFeGl0Ci0gICBjbG9zZSBhbGwgd2luZG93cyBhbmQgcXVpdCBJRExFIChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgIENsb3NlIGFsbCB3aW5kb3dzIGFuZCBxdWl0IElETEUgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCiAKLUVkaXQgbWVudQotXl5eXl5eXl5eCitFZGl0IG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFVuZG8KLSAgIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cgKG1heCAxMDAwIGNoYW5nZXMpCisgICBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93IChhIG1heGltdW0gb2YgMTAwMCBjaGFuZ2VzIG1heSBiZSB1bmRvbmUpCiAKIFJlZG8KICAgIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CiAKIEN1dAotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgorICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KIAogQ29weQogICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKQEAgLTEwOCwxMSArMTIwLDMwIEBACiBHbyB0byBsaW5lCiAgICBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCiAKK0V4cGFuZCB3b3JkCisgICBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlciB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsKKyAgIHJlcGVhdCB0byBnZXQgYSBkaWZmZXJlbnQgZXhwYW5zaW9uCisKK1Nob3cgY2FsbCB0aXAKKyAgIEFmdGVyIGFuIHVuY2xvc2VkIHBhcmVudGhlc2lzIGZvciBhIGZ1bmN0aW9uLCBvcGVuIGEgc21hbGwgd2luZG93IHdpdGgKKyAgIGZ1bmN0aW9uIHBhcmFtZXRlciBoaW50cworCitTaG93IHN1cnJvdW5kaW5nIHBhcmVucworICAgSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworCitTaG93IENvbXBsZXRpb25zCisgICBPcGVuIGEgc2Nyb2xsIHdpbmRvdyBhbGxvd2luZyBzZWxlY3Rpb24ga2V5d29yZHMgYW5kIGF0dHJpYnV0ZXMuIFNlZQorICAgQ29tcGxldGlvbnMgYmVsb3cuCisKKworRm9ybWF0IG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKIEluZGVudCByZWdpb24KLSAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCisgICBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKQogCiBEZWRlbnQgcmVnaW9uCi0gICBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCisgICBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGggKGRlZmF1bHQgNCBzcGFjZXMpCiAKIENvbW1lbnQgb3V0IHJlZ2lvbgogICAgSW5zZXJ0ICMjIGluIGZyb250IG9mIHNlbGVjdGVkIGxpbmVzCkBAIC0xMjEsNjcgKzE1MiwxMjEgQEAKICAgIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwogCiBUYWJpZnkgcmVnaW9uCi0gICBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMKKyAgIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicy4gKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZworICAgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKIAogVW50YWJpZnkgcmVnaW9uCi0gICBUdXJuICphbGwqIHRhYnMgaW50byB0aGUgcmlnaHQgbnVtYmVyIG9mIHNwYWNlcworICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNwYWNlcwogCi1FeHBhbmQgd29yZAotICAgRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdAotICAgdG8gZ2V0IGEgZGlmZmVyZW50IGV4cGFuc2lvbgorVG9nZ2xlIHRhYnMKKyAgIE9wZW4gYSBkaWFsb2cgdG8gc3dpdGNoIGJldHdlZW4gaW5kZW50aW5nIHdpdGggc3BhY2VzIGFuZCB0YWJzLgorCitOZXcgSW5kZW50IFdpZHRoCisgICBPcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguIFRoZSBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24KKyAgIGNvbW11bml0eSBpcyA0IHNwYWNlcy4KIAogRm9ybWF0IFBhcmFncmFwaAotICAgUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQgcGFyYWdyYXBoCisgICBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZCBwYXJhZ3JhcGguIEFsbCBsaW5lcyBpbiB0aGUKKyAgIHBhcmFncmFwaCB3aWxsIGJlIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KIAotSW1wb3J0IG1vZHVsZQotICAgSW1wb3J0IG9yIHJlbG9hZCB0aGUgY3VycmVudCBtb2R1bGUKLQotUnVuIHNjcmlwdAotICAgRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKK1N0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgIFJlbW92ZXMgYW55IHNwYWNlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGFzdCBub24tc3BhY2UgY2hhcmFjdGVyCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogSW1wb3J0IG1vZHVsZQogICAgc2luZ2xlOiBSdW4gc2NyaXB0CiAKIAotV2luZG93cyBtZW51Ci1eXl5eXl5eXl5eXl4KK1J1biBtZW51IChFZGl0b3Igd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1ab29tIEhlaWdodAotICAgdG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDI0eDgwKSBhbmQgbWF4aW11bSBoZWlnaHQuCitQeXRob24gU2hlbGwKKyAgIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdwogCi1UaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7IHNlbGVjdCBvbmUgdG8gYnJpbmcKLWl0IHRvIHRoZSBmb3JlZ3JvdW5kIChkZWljb25pZnlpbmcgaXQgaWYgbmVjZXNzYXJ5KS4KK0NoZWNrIG1vZHVsZQorICAgQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgbW9kdWxlIGN1cnJlbnRseSBvcGVuIGluIHRoZSBFZGl0b3Igd2luZG93LiBJZiB0aGUKKyAgIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgogCitSdW4gbW9kdWxlCisgICBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQsIHRoZW4gZXhlY3V0ZSB0aGUgY3VycmVudGx5CisgICBvcGVuIG1vZHVsZS4gIElmIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBwcm9tcHQgdGhlIHVzZXIKKyAgIHRvIHNhdmUgdGhlIGNvZGUuCiAKLURlYnVnIG1lbnUKLV5eXl5eXl5eXl4KK1NoZWxsIG1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLSogaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgb25seQorVmlldyBMYXN0IFJlc3RhcnQKKyAgU2Nyb2xsIHRoZSBzaGVsbCB3aW5kb3cgdG8gdGhlIGxhc3QgU2hlbGwgcmVzdGFydAorCitSZXN0YXJ0IFNoZWxsCisgIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudAorCitEZWJ1ZyBtZW51IChTaGVsbCB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBHbyB0byBmaWxlL2xpbmUKICAgIExvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLAogICAgYW5kIHNob3cgdGhlIGxpbmUuICBVc2VmdWwgdG8gdmlldyB0aGUgc291cmNlIGxpbmVzIHJlZmVyZW5jZWQgaW4gYW4KLSAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suCisgICBleGNlcHRpb24gdHJhY2ViYWNrLiBBdmFpbGFibGUgaW4gdGhlIGNvbnRleHQgbWVudSBvZiB0aGUgU2hlbGwgd2luZG93LgogCi1EZWJ1Z2dlcgotICAgUnVuIGNvbW1hbmRzIGluIHRoZSBzaGVsbCB1bmRlciB0aGUgZGVidWdnZXIuCitEZWJ1Z2dlciAodG9nZ2xlKQorICAgVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZCBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbgorICAgdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgogCiBTdGFjayB2aWV3ZXIKLSAgIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24uCisgICBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCiAKIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIKLSAgIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjay4KKyAgIFRvZ2dsZSBhdXRvbWF0aWNhbGx5IG9wZW5pbmcgdGhlIHN0YWNrIHZpZXdlciBvbiB1bmhhbmRsZWQgZXhjZXB0aW9uCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogc3RhY2sgdmlld2VyCiAgICBzaW5nbGU6IGRlYnVnZ2VyCiAKK09wdGlvbnMgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotRWRpdCBjb250ZXh0IG1lbnUKLV5eXl5eXl5eXl5eXl5eXl5eCitDb25maWd1cmUgSURMRQorICAgT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nLiAgRm9udHMsIGluZGVudGF0aW9uLCBrZXliaW5kaW5ncywgYW5kIGNvbG9yCisgICB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuICBTdGFydHVwIFByZWZlcmVuY2VzIG1heSBiZSBzZXQsIGFuZCBhZGRpdGlvbmFsCisgICBoZWxwIHNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZC4KIAotKiBSaWdodC1jbGljayBpbiBFZGl0IHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQorQ29kZSBDb250ZXh0ICh0b2dnbGUpKEVkaXRvciBXaW5kb3cgb25seSkKKyAgIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0CisgICBvZiB0aGUgc2VjdGlvbiBvZiBjb2RlIHdoaWNoIGlzIHNjcm9sbGluZyBvZmYgdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCitXaW5kb3dzIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1pvb20gSGVpZ2h0CisgICBUb2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSAoNDB4ODAgaW5pdGlhbCBzZXR0aW5nKSBhbmQgbWF4aW11bQorICAgaGVpZ2h0LiBUaGUgaW5pdGlhbCBzaXplIGlzIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cgdW5kZXIgdGhlIGdlbmVyYWwKKyAgIHRhYi4KKworVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCitpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuCisKK0hlbHAgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworQWJvdXQgSURMRQorICAgVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCisKK0lETEUgSGVscAorICAgRGlzcGxheSBhIGhlbHAgZmlsZSBmb3IgSURMRSBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQKKyAgIG5hdmlnYXRpb24sIGFuZCBvdGhlciB0aXBzLgorCitQeXRob24gRG9jcworICAgQWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZiBpbnN0YWxsZWQuIE9yIHdpbGwgc3RhcnQgYSB3ZWIgYnJvd3NlcgorICAgYW5kIG9wZW4gZG9jcy5weXRob24ub3JnIHNob3dpbmcgdGhlIGxhdGVzdCBQeXRob24gZG9jdW1lbnRhdGlvbi4KKworQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyCit0aGUgR2VuZXJhbCB0YWIuCisKK0VkaXRvciBXaW5kb3cgY29udGV4dCBtZW51CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisqIFJpZ2h0LWNsaWNrIGluIEVkaXRvciB3aW5kb3cgKENvbnRyb2wtY2xpY2sgb24gT1MgWCkKIAogQ3V0CiAgICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgc2VsZWN0aW9uCkBAIC0yMDcsOCArMjkyLDggQEAKICAgIHNpbmdsZTogYnJlYWtwb2ludHMKIAogCi1TaGVsbCBjb250ZXh0IG1lbnUKLV5eXl5eXl5eXl5eXl5eXl5eXgorU2hlbGwgV2luZG93IGNvbnRleHQgbWVudQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiAqIFJpZ2h0LWNsaWNrIGluIFB5dGhvbiBTaGVsbCB3aW5kb3cgKENvbnRyb2wtY2xpY2sgb24gT1MgWCkKIApAQCAtMjI1LDE5ICszMTAsNDQgQEAKICAgIFNhbWUgYXMgaW4gRGVidWcgbWVudS4KIAogCi1CYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICogOmtiZDpgQmFja3NwYWNlYCBkZWxldGVzIHRvIHRoZSBsZWZ0OyA6a2JkOmBEZWxgIGRlbGV0ZXMgdG8gdGhlIHJpZ2h0CiAKKyogOmtiZDpgQy1CYWNrc3BhY2VgIGRlbGV0ZSB3b3JkIGxlZnQ7IDprYmQ6YEMtRGVsYCBkZWxldGUgd29yZCB0byB0aGUgcmlnaHQKKwogKiBBcnJvdyBrZXlzIGFuZCA6a2JkOmBQYWdlIFVwYC86a2JkOmBQYWdlIERvd25gIHRvIG1vdmUgYXJvdW5kCiAKKyogOmtiZDpgQy1MZWZ0QXJyb3dgIGFuZCA6a2JkOmBDLVJpZ2h0QXJyb3dgIG1vdmVzIGJ5IHdvcmRzCisKICogOmtiZDpgSG9tZWAvOmtiZDpgRW5kYCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZQogCiAqIDprYmQ6YEMtSG9tZWAvOmtiZDpgQy1FbmRgIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlCiAKLSogU29tZSA6cHJvZ3JhbTpgRW1hY3NgIGJpbmRpbmdzIG1heSBhbHNvIHdvcmssIGluY2x1ZGluZyA6a2JkOmBDLUJgLAotICA6a2JkOmBDLVBgLCA6a2JkOmBDLUFgLCA6a2JkOmBDLUVgLCA6a2JkOmBDLURgLCA6a2JkOmBDLUxgCisqIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisKKyAgICogOmtiZDpgQy1hYCBiZWdpbm5pbmcgb2YgbGluZQorCisgICAqIDprYmQ6YEMtZWAgZW5kIG9mIGxpbmUKKworICAgKiA6a2JkOmBDLWtgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKworICAgKiA6a2JkOmBDLWxgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKworICAgKiA6a2JkOmBDLWJgIGdvIGJhY2t3YXJkcyBvbmUgY2hhcmFjdGVyIHdpdGhvdXQgZGVsZXRpbmcgKHVzdWFsbHkgeW91IGNhbgorICAgICBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcykKKworICAgKiA6a2JkOmBDLWZgIGdvIGZvcndhcmQgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKyAgICAgYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yIHRoaXMpCisKKyAgICogOmtiZDpgQy1wYCBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgorICAgICB0aGlzKQorCisgICAqIDprYmQ6YEMtZGAgZGVsZXRlIG5leHQgY2hhcmFjdGVyCisKK1N0YW5kYXJkIGtleWJpbmRpbmdzIChsaWtlIDprYmQ6YEMtY2AgdG8gY29weSBhbmQgOmtiZDpgQy12YCB0byBwYXN0ZSkKK21heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cuCiAKIAogQXV0b21hdGljIGluZGVudGF0aW9uCkBAIC0yNDYsMjcgKzM1Niw3NiBAQAogQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcyAoaW4gdGhlCiBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcyAoYnJlYWssIHJldHVybiBldGMuKQogdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcgaW5kZW50YXRpb24sIDprYmQ6YEJhY2tzcGFjZWAgZGVsZXRlcyB1cAotdG8gNCBzcGFjZXMgaWYgdGhleSBhcmUgdGhlcmUuIDprYmQ6YFRhYmAgaW5zZXJ0cyAxLTQgc3BhY2VzIChpbiB0aGUgUHl0aG9uCi1TaGVsbCB3aW5kb3cgb25lIHRhYikuIFNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdAotbWVudS4KK3RvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA6a2JkOmBUYWJgIGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uCitTaGVsbCB3aW5kb3cgb25lIHRhYiksIG51bWJlciBkZXBlbmRzIG9uIEluZGVudCB3aWR0aC4gQ3VycmVudGx5IHRhYnMKK2FyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZSB0byBUY2wvVGsgbGltaXRhdGlvbnMuCiAKK1NlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LgorCitDb21wbGV0aW9ucworXl5eXl5eXl5eXl4KKworQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mIGNsYXNzZXMsCitib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkIGZvcgorZmlsZW5hbWVzLgorCitUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkgKGRlZmF1bHQgaXMKK3R3byBzZWNvbmRzKSBhZnRlciBhICcuJyBvciAoaW4gYSBzdHJpbmcpIGFuIG9zLnNlcCBpcyB0eXBlZC4gSWYgYWZ0ZXIgb25lCitvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlciBjaGFyYWN0ZXJzKSBhIHRhYiBpcyB0eXBlZAordGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZSBjb250aW51YXRpb24gaXMgZm91bmQuCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gZm9yIHRoZSBjaGFyYWN0ZXJzIGVudGVyZWQsIGEKKzprYmQ6YFRhYmAgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgorCisnU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQorOmtiZDpgQy1zcGFjZWAgd2lsbCBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiBJbiBhbiBlbXB0eQorc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBPbiBhCitibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAorY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gSWYgc29tZQorY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KKworSWYgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuICBFbnRlcmluZyBhIDprYmQ6YHRhYmAgd2lsbAorY2F1c2UgdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0b3Igd2luZG93IG9yCitTaGVsbC4gIFR3byA6a2JkOmB0YWJgIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCit3aWxsIHJldHVybiBvciBhIGRvdWJsZSBjbGljay4gIEN1cnNvciBrZXlzLCBQYWdlIFVwL0Rvd24sIG1vdXNlIHNlbGVjdGlvbiwKK2FuZCB0aGUgc2Nyb2xsIHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCisKKyJIaWRkZW4iIGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHR5cGluZyB0aGUgYmVnaW5uaW5nIG9mIGhpZGRlbgorbmFtZSBhZnRlciBhICcuJywgZS5nLiAnXycuIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKK2BgX19hbGxfX2BgIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgorCitDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQorCitDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuIE5hbWVzIGluCithbiBFZGl0b3Igd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIGBgX19tYWluX19gYCBhbmQgOmRhdGE6YHN5cy5tb2R1bGVzYCB3aWxsCitub3QgYmUgZm91bmQuICBSdW4gdGhlIG1vZHVsZSBvbmNlIHdpdGggeW91ciBpbXBvcnRzIHRvIGNvcnJlY3QgdGhpcyBzaXR1YXRpb24uCitOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4gc3lzLm1vZHVsZXMsIHNvCittdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCisKK0lmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5Citsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT3IgYW5vdGhlciBvcHRpb24gaXMgdGhlIGRlbGF5IGNvdWxkCitiZSBzZXQgdG8gemVyby4gQW5vdGhlciBhbHRlcm5hdGl2ZSB0byBwcmV2ZW50aW5nIEFDVyBwb3B1cHMgaXMgdG8KK2Rpc2FibGUgdGhlIGNhbGwgdGlwcyBleHRlbnNpb24uCiAKIFB5dGhvbiBTaGVsbCB3aW5kb3cKIF5eXl5eXl5eXl5eXl5eXl5eXl4KIAotKiA6a2JkOmBDLUNgIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQKKyogOmtiZDpgQy1jYCBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kCiAKLSogOmtiZDpgQy1EYCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCBhIGBgPj4+YGAgcHJvbXB0CisqIDprYmQ6YEMtZGAgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSBgYD4+PmBgIHByb21wdAorICAodGhpcyBpcyA6a2JkOmBDLXpgIG9uIFdpbmRvd3MpLgogCi0qIDprYmQ6YEFsdC1wYCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkCisqIDprYmQ6YEFsdC0vYCAoRXhwYW5kIHdvcmQpIGlzIGFsc28gdXNlZnVsIHRvIHJlZHVjZSB0eXBpbmcKIAotKiA6a2JkOmBBbHQtbmAgcmV0cmlldmVzIG5leHQKKyAgQ29tbWFuZCBoaXN0b3J5CiAKLSogOmtiZDpgUmV0dXJuYCB3aGlsZSBvbiBhbnkgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kCisgICogOmtiZDpgQWx0LXBgIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuIE9uCisgICAgT1MgWCB1c2UgOmtiZDpgQy1wYC4KIAotKiA6a2JkOmBBbHQtL2AgKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCBoZXJlCisgICogOmtiZDpgQWx0LW5gIHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSA6a2JkOmBDLW5gLgogCi0uLiBpbmRleDo6IHNpbmdsZTogaW5kZW50YXRpb24KKyAgKiA6a2JkOmBSZXR1cm5gIHdoaWxlIG9uIGFueSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQKIAogCiBTeW50YXggY29sb3JzCkBAIC0zMDgsMTcgKzQ2NywxNyBAQAogCiBVcG9uIHN0YXJ0dXAgd2l0aCB0aGUgYGAtc2BgIG9wdGlvbiwgSURMRSB3aWxsIGV4ZWN1dGUgdGhlIGZpbGUgcmVmZXJlbmNlZCBieQogdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyA6ZW52dmFyOmBJRExFU1RBUlRVUGAgb3IgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAuCi1JZGxlIGZpcnN0IGNoZWNrcyBmb3IgYGBJRExFU1RBUlRVUGBgOyBpZiBgYElETEVTVEFSVFVQYGAgaXMgcHJlc2VudCB0aGUgZmlsZQotcmVmZXJlbmNlZCBpcyBydW4uICBJZiBgYElETEVTVEFSVFVQYGAgaXMgbm90IHByZXNlbnQsIElkbGUgY2hlY2tzIGZvcgorSURMRSBmaXJzdCBjaGVja3MgZm9yIGBgSURMRVNUQVJUVVBgYDsgaWYgYGBJRExFU1RBUlRVUGBgIGlzIHByZXNlbnQgdGhlIGZpbGUKK3JlZmVyZW5jZWQgaXMgcnVuLiAgSWYgYGBJRExFU1RBUlRVUGBgIGlzIG5vdCBwcmVzZW50LCBJRExFIGNoZWNrcyBmb3IKIGBgUFlUSE9OU1RBUlRVUGBgLiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCi1jb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElkbGUKK2NvbnZlbmllbnQgcGxhY2VzIHRvIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHkgZnJvbSB0aGUgSURMRQogc2hlbGwsIG9yIGZvciBleGVjdXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgdG8gaW1wb3J0IGNvbW1vbiBtb2R1bGVzLgogCiBJbiBhZGRpdGlvbiwgYGBUa2BgIGFsc28gbG9hZHMgYSBzdGFydHVwIGZpbGUgaWYgaXQgaXMgcHJlc2VudC4gIE5vdGUgdGhhdCB0aGUKIFRrIGZpbGUgaXMgbG9hZGVkIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgYWRkaXRpb25hbCBmaWxlIGlzIGBgLklkbGUucHlgYCBhbmQgaXMKIGxvb2tlZCBmb3IgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFN0YXRlbWVudHMgaW4gdGhpcyBmaWxlIHdpbGwgYmUKIGV4ZWN1dGVkIGluIHRoZSBUayBuYW1lc3BhY2UsIHNvIHRoaXMgZmlsZSBpcyBub3QgdXNlZnVsIGZvciBpbXBvcnRpbmcgZnVuY3Rpb25zCi10byBiZSB1c2VkIGZyb20gSWRsZSdzIFB5dGhvbiBzaGVsbC4KK3RvIGJlIHVzZWQgZnJvbSBJRExFJ3MgUHl0aG9uIHNoZWxsLgogCiAKIENvbW1hbmQgbGluZSB1c2FnZQpAQCAtMzQ5LDMgKzUwOCw0NSBAQAogICAgdGhlIGFyZ3VtZW50cyBhcmUgc3RpbGwgYXZhaWxhYmxlIGluIGBgc3lzLmFyZ3ZgYC4KIAogCitBZGRpdGlvbmFsIGhlbHAgc291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSURMRSBpbmNsdWRlcyBhIGhlbHAgbWVudSBlbnRyeSBjYWxsZWQgIlB5dGhvbiBEb2NzIiB0aGF0IHdpbGwgb3BlbiB0aGUKK2V4dGVuc2l2ZSBzb3VyY2VzIG9mIGhlbHAsIGluY2x1ZGluZyB0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCBkb2NzLnB5dGhvbi5vcmcuCitTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIGhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyB0aGUKK0NvbmZpZ3VyZSBJRExFIGRpYWxvZy4gU2VlIHRoZSBJRExFIGhlbHAgb3B0aW9uIGluIHRoZSBoZWxwIG1lbnUgb2YgSURMRSBmb3IKK21vcmUgaW5mb3JtYXRpb24uCisKKworT3RoZXIgcHJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb250IHByZWZlcmVuY2VzLCBoaWdobGlnaHRpbmcsIGtleXMsIGFuZCBnZW5lcmFsIHByZWZlcmVuY2VzIGNhbiBiZQorY2hhbmdlZCB2aWEgdGhlIENvbmZpZ3VyZSBJRExFIG1lbnUgb3B0aW9uLiAgQmUgc3VyZSB0byBub3RlIHRoYXQKK2tleXMgY2FuIGJlIHVzZXIgZGVmaW5lZCwgSURMRSBzaGlwcyB3aXRoIGZvdXIgYnVpbHQgaW4ga2V5IHNldHMuIEluCithZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhIGN1c3RvbSBrZXkgc2V0IGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cKK3VuZGVyIHRoZSBrZXlzIHRhYi4KKworRXh0ZW5zaW9ucworLS0tLS0tLS0tLQorCitJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCitjb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiAgVGhlCitkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKKworKiBGb3JtYXRQYXJhZ3JhcGgKKworKiBBdXRvRXhwYW5kCisKKyogWm9vbUhlaWdodAorCisqIFNjcmlwdEJpbmRpbmcKKworKiBDYWxsVGlwcworCisqIFBhcmVuTWF0Y2gKKworKiBBdXRvQ29tcGxldGUKKworKiBDb2RlQ29udGV4dAorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXAucnN0IGIvRG9jL2xpYnJhcnkvaW1wLnJzdAppbmRleCBlYmRiZDRkLi42NjQ3YjllIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKQEAgLTEsNiArMSw5IEBACiA6bW9kOmBpbXBgIC0tLSBBY2Nlc3MgdGhlIDpyZWY6YGltcG9ydCA8aW1wb3J0c3lzdGVtPmAgaW50ZXJuYWxzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgIFRoZSA6bW9kOmBpbXBgIHBhY2thZ2UgaXMgcGVuZGluZyBkZXByZWNhdGlvbiBpbiBmYXZvciBvZiA6bW9kOmBpbXBvcnRsaWJgLgorCiAuLiBtb2R1bGU6OiBpbXAKICAgIDpzeW5vcHNpczogQWNjZXNzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudC4KIApAQCAtMTEsMTAgKzE0LDYgQEAKIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4gIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIGZ1bmN0aW9uczoKIAogCi0uLiBub3RlOjoKLSAgIE5ldyBwcm9ncmFtcyBzaG91bGQgdXNlIDptb2Q6YGltcG9ydGxpYmAgcmF0aGVyIHRoYW4gdGhpcyBtb2R1bGUuCi0KLQogLi4gZnVuY3Rpb246OiBnZXRfbWFnaWMoKQogCiAgICAuLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQpAQCAtMjIsNiArMjEsOSBAQAogICAgUmV0dXJuIHRoZSBtYWdpYyBzdHJpbmcgdmFsdWUgdXNlZCB0byByZWNvZ25pemUgYnl0ZS1jb21waWxlZCBjb2RlIGZpbGVzCiAgICAoOmZpbGU6YC5weWNgIGZpbGVzKS4gIChUaGlzIHZhbHVlIG1heSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggUHl0aG9uIHZlcnNpb24uKQogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVXNlIDphdHRyOmBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVJgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRfc3VmZml4ZXMoKQogCkBAIC0xMDEsOCArMTAzLDEwIEBACiAgICB1c2luZyBhIDprZXl3b3JkOmB0cnlgIC4uLiA6a2V5d29yZDpgZmluYWxseWAgc3RhdGVtZW50LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVbm5lZWRlZCBhcyBsb2FkZXJzIHNob3VsZCBiZSB1c2VkIHRvIGxvYWQgbW9kdWxlcyBhbmQKLSAgICAgIDpmdW5jOmBmaW5kX21vZHVsZWAgaXMgZGVwcmVjYXRlZC4KKyAgICAgIElmIHByZXZpb3VzbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIDpmdW5jOmBpbXAuZmluZF9tb2R1bGVgIHRoZW4KKyAgICAgIGNhbGwgYGBsb2FkX21vZHVsZSgpYGAgb24gdGhlIHJldHVybmVkIGxvYWRlci4gSWYgeW91IHdpc2ggdG8gbG9hZCBhCisgICAgICBtb2R1bGUgZnJvbSBhIHNwZWNpZmljIGZpbGUsIHRoZW4gdXNlIG9uZSBvZiB0aGUgZmlsZS1iYXNlZCBsb2FkZXJzIGZvdW5kCisgICAgICBpbiA6bW9kOmBpbXBvcnRsaWIubWFjaGluZXJ5YC4KIAogCiAuLiBmdW5jdGlvbjo6IG5ld19tb2R1bGUobmFtZSkKQEAgLTExMCw2ICsxMTQsOSBAQAogICAgUmV0dXJuIGEgbmV3IGVtcHR5IG1vZHVsZSBvYmplY3QgY2FsbGVkICpuYW1lKi4gIFRoaXMgb2JqZWN0IGlzICpub3QqIGluc2VydGVkCiAgICBpbiBgYHN5cy5tb2R1bGVzYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6Y2xhc3M6YHR5cGVzLk1vZHVsZVR5cGVgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiByZWxvYWQobW9kdWxlKQogCkBAIC0xNzYsNiArMTgzLDkgQEAKICAgICAgIFJlbGllcyBvbiBib3RoIGBgX19uYW1lX19gYCBhbmQgYGBfX2xvYWRlcl9fYGAgYmVpbmcgZGVmaW5lZCBvbiB0aGUgbW9kdWxlCiAgICAgICBiZWluZyByZWxvYWRlZCBpbnN0ZWFkIG9mIGp1c3QgYGBfX25hbWVfX2BgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5yZWxvYWRgIGluc3RlYWQuCisKIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNvbnZlbmllbmNlcyBmb3IgaGFuZGxpbmcgOnBlcDpgMzE0N2AgYnl0ZS1jb21waWxlZAogZmlsZSBwYXRocy4KQEAgLTIwMSw2ICsyMTEsOSBAQAogICAgICAgSWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIGBgTm9uZWBgLCB0aGVuCiAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBzb3VyY2VfZnJvbV9jYWNoZShwYXRoKQogCkBAIC0yMTYsMTQgKzIyOSwxNyBAQAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2hlbgogICAgICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X3RhZygpCiAKICAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgbWFnaWMgdGFnIHN0cmluZyBtYXRjaGluZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uJ3MKICAgIG1hZ2ljIG51bWJlciwgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9tYWdpY2AuCiAKLSAgIC4uIG5vdGU6OgotICAgICAgWW91IG1heSB1c2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCiAgICAgICBpbiBQeXRob24gMy4zLgogCiAKQEAgLTI1MSw2ICsyNjcsOCBAQAogICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCiAgICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogYWNxdWlyZV9sb2NrKCkKIApAQCAtMjY5LDYgKzI4Nyw4IEBACiAgICB0aGUgbW9zdCBwYXJ0LiAgQSBnbG9iYWwgaW1wb3J0IGxvY2sgaXMga2VwdCBmb3Igc29tZSBjcml0aWNhbCB0YXNrcywKICAgIHN1Y2ggYXMgaW5pdGlhbGl6aW5nIHRoZSBwZXItbW9kdWxlIGxvY2tzLgogCisuLiBkZXByZWNhdGVkOjogMy40CisKIAogLi4gZnVuY3Rpb246OiByZWxlYXNlX2xvY2soKQogCkBAIC0yODAsNiArMzAwLDggQEAKICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAogICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKwogCiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3aXRoIGludGVnZXIgdmFsdWVzLCBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLCBhcmUgdXNlZAogdG8gaW5kaWNhdGUgdGhlIHNlYXJjaCByZXN1bHQgb2YgOmZ1bmM6YGZpbmRfbW9kdWxlYC4KQEAgLTM0NSw2ICszNjcsOSBAQAogICAgICAgYGBOb25lYGAgaXMgaW5zZXJ0ZWQgaW50byBgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgaW5zdGVhZCBvZiBhbgogICAgICAgaW5zdGFuY2Ugb2YgOmNsYXNzOmBOdWxsSW1wb3J0ZXJgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBJbnNlcnQgYGBOb25lYGAgaW50byBgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgaW5zdGVhZC4KKwogCiAuLiBfZXhhbXBsZXMtaW1wOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0IGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdAppbmRleCBlZmQwMjdiLi5mYzYzYThiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgRmluZCB0aGUgbG9hZGVyIGZvciBhIG1vZHVsZSwgb3B0aW9uYWxseSB3aXRoaW4gdGhlIHNwZWNpZmllZCAqcGF0aCouIElmIHRoZQogICAgbW9kdWxlIGlzIGluIDphdHRyOmBzeXMubW9kdWxlc2AsIHRoZW4gYGBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fYGAgaXMKLSAgIHJldHVybmVkICh1bmxlc3MgdGhlIGxvYWRlciB3b3VsZCBiZSBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZQorICAgcmV0dXJuZWQgKHVubGVzcyB0aGUgbG9hZGVyIHdvdWxkIGJlIGBgTm9uZWBgIG9yIGlzIG5vdCBzZXQsIGluIHdoaWNoIGNhc2UKICAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCkuIE90aGVyd2lzZSBhIHNlYXJjaCB1c2luZyA6YXR0cjpgc3lzLm1ldGFfcGF0aGAKICAgIGlzIGRvbmUuIGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBpcyBmb3VuZC4KIApAQCAtOTksNiArOTksMTIgQEAKICAgIHdpbGwgbmVlZCB0byBpbXBvcnQgYWxsIHBhcmVudCBwYWNrYWdlcyBvZiB0aGUgc3VibW9kdWxlIGFuZCB1c2UgdGhlIGNvcnJlY3QKICAgIGFyZ3VtZW50IHRvICpwYXRoKi4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYF9fbG9hZGVyX19gYCBpcyBub3Qgc2V0LCByYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCwganVzdCBsaWtlIHdoZW4gdGhlCisgICAgICBhdHRyaWJ1dGUgaXMgc2V0IHRvIGBgTm9uZWBgLgorCiAuLiBmdW5jdGlvbjo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAogICAgSW52YWxpZGF0ZSB0aGUgaW50ZXJuYWwgY2FjaGVzIG9mIGZpbmRlcnMgc3RvcmVkIGF0CkBAIC0xMDksNiArMTE1LDc0IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBmdW5jdGlvbjo6IHJlbG9hZChtb2R1bGUpCisKKyAgIFJlbG9hZCBhIHByZXZpb3VzbHkgaW1wb3J0ZWQgKm1vZHVsZSouICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIG1vZHVsZSBvYmplY3QsCisgICBzbyBpdCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICBoYXZlIGVkaXRlZCB0aGUgbW9kdWxlIHNvdXJjZSBmaWxlIHVzaW5nIGFuIGV4dGVybmFsIGVkaXRvciBhbmQgd2FudCB0byB0cnkKKyAgIG91dCB0aGUgbmV3IHZlcnNpb24gd2l0aG91dCBsZWF2aW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBUaGUgcmV0dXJuIHZhbHVlCisgICBpcyB0aGUgbW9kdWxlIG9iamVjdCAod2hpY2ggY2FuIGJlIGRpZmZlcmVudCBpZiByZS1pbXBvcnRpbmcgY2F1c2VzIGEKKyAgIGRpZmZlcmVudCBvYmplY3QgdG8gYmUgcGxhY2VkIGluIDpkYXRhOmBzeXMubW9kdWxlc2ApLgorCisgICBXaGVuIDpmdW5jOmByZWxvYWRgIGlzIGV4ZWN1dGVkOgorCisgICAqIFB5dGhvbiBtb2R1bGVzJyBjb2RlIGlzIHJlY29tcGlsZWQgYW5kIHRoZSBtb2R1bGUtbGV2ZWwgY29kZSByZS1leGVjdXRlZCwKKyAgICAgZGVmaW5pbmcgYSBuZXcgc2V0IG9mIG9iamVjdHMgd2hpY2ggYXJlIGJvdW5kIHRvIG5hbWVzIGluIHRoZSBtb2R1bGUncworICAgICBkaWN0aW9uYXJ5IGJ5IHJldXNpbmcgdGhlIDp0ZXJtOmBsb2FkZXJgIHdoaWNoIG9yaWdpbmFsbHkgbG9hZGVkIHRoZQorICAgICBtb2R1bGUuICBUaGUgYGBpbml0YGAgZnVuY3Rpb24gb2YgZXh0ZW5zaW9uIG1vZHVsZXMgaXMgbm90IGNhbGxlZCBhIHNlY29uZAorICAgICB0aW1lLgorCisgICAqIEFzIHdpdGggYWxsIG90aGVyIG9iamVjdHMgaW4gUHl0aG9uIHRoZSBvbGQgb2JqZWN0cyBhcmUgb25seSByZWNsYWltZWQKKyAgICAgYWZ0ZXIgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wIHRvIHplcm8uCisKKyAgICogVGhlIG5hbWVzIGluIHRoZSBtb2R1bGUgbmFtZXNwYWNlIGFyZSB1cGRhdGVkIHRvIHBvaW50IHRvIGFueSBuZXcgb3IKKyAgICAgY2hhbmdlZCBvYmplY3RzLgorCisgICAqIE90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBvYmplY3RzIChzdWNoIGFzIG5hbWVzIGV4dGVybmFsIHRvIHRoZSBtb2R1bGUpIGFyZQorICAgICBub3QgcmVib3VuZCB0byByZWZlciB0byB0aGUgbmV3IG9iamVjdHMgYW5kIG11c3QgYmUgdXBkYXRlZCBpbiBlYWNoIG5hbWVzcGFjZQorICAgICB3aGVyZSB0aGV5IG9jY3VyIGlmIHRoYXQgaXMgZGVzaXJlZC4KKworICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIGNhdmVhdHM6CisKKyAgIElmIGEgbW9kdWxlIGlzIHN5bnRhY3RpY2FsbHkgY29ycmVjdCBidXQgaXRzIGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgZmlyc3QKKyAgIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudCBmb3IgaXQgZG9lcyBub3QgYmluZCBpdHMgbmFtZSBsb2NhbGx5LCBidXQgZG9lcworICAgc3RvcmUgYSAocGFydGlhbGx5IGluaXRpYWxpemVkKSBtb2R1bGUgb2JqZWN0IGluIGBgc3lzLm1vZHVsZXNgYC4gIFRvIHJlbG9hZAorICAgdGhlIG1vZHVsZSB5b3UgbXVzdCBmaXJzdCA6a2V5d29yZDpgaW1wb3J0YCBpdCBhZ2FpbiAodGhpcyB3aWxsIGJpbmQgdGhlIG5hbWUKKyAgIHRvIHRoZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgbW9kdWxlIG9iamVjdCkgYmVmb3JlIHlvdSBjYW4gOmZ1bmM6YHJlbG9hZGAgaXQuCisKKyAgIFdoZW4gYSBtb2R1bGUgaXMgcmVsb2FkZWQsIGl0cyBkaWN0aW9uYXJ5IChjb250YWluaW5nIHRoZSBtb2R1bGUncyBnbG9iYWwKKyAgIHZhcmlhYmxlcykgaXMgcmV0YWluZWQuICBSZWRlZmluaXRpb25zIG9mIG5hbWVzIHdpbGwgb3ZlcnJpZGUgdGhlIG9sZAorICAgZGVmaW5pdGlvbnMsIHNvIHRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhIHByb2JsZW0uICBJZiB0aGUgbmV3IHZlcnNpb24gb2YgYQorICAgbW9kdWxlIGRvZXMgbm90IGRlZmluZSBhIG5hbWUgdGhhdCB3YXMgZGVmaW5lZCBieSB0aGUgb2xkIHZlcnNpb24sIHRoZSBvbGQKKyAgIGRlZmluaXRpb24gcmVtYWlucy4gIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCB0byB0aGUgbW9kdWxlJ3MgYWR2YW50YWdlIGlmIGl0CisgICBtYWludGFpbnMgYSBnbG9iYWwgdGFibGUgb3IgY2FjaGUgb2Ygb2JqZWN0cyAtLS0gd2l0aCBhIDprZXl3b3JkOmB0cnlgCisgICBzdGF0ZW1lbnQgaXQgY2FuIHRlc3QgZm9yIHRoZSB0YWJsZSdzIHByZXNlbmNlIGFuZCBza2lwIGl0cyBpbml0aWFsaXphdGlvbiBpZgorICAgZGVzaXJlZDo6CisKKyAgICAgIHRyeToKKyAgICAgICAgICBjYWNoZQorICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICBjYWNoZSA9IHt9CisKKyAgIEl0IGlzIGxlZ2FsIHRob3VnaCBnZW5lcmFsbHkgbm90IHZlcnkgdXNlZnVsIHRvIHJlbG9hZCBidWlsdC1pbiBvcgorICAgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgKHRoaXMgaXMgbm90IHRydWUgZm9yIGUuZy4gOm1vZDpgc3lzYCwKKyAgIDptb2Q6YF9fbWFpbl9fYCwgOm1vZDpgYnVpbHRpbnNgIGFuZCBvdGhlciBrZXkgbW9kdWxlcyB3aGVyZSByZWxvYWRpbmcgaXMKKyAgIGZyb3duZWQgdXBvbikuIEluIG1hbnkgY2FzZXMsIGhvd2V2ZXIsIGV4dGVuc2lvbiBtb2R1bGVzIGFyZSBub3QgZGVzaWduZWQgdG8KKyAgIGJlIGluaXRpYWxpemVkIG1vcmUgdGhhbiBvbmNlLCBhbmQgbWF5IGZhaWwgaW4gYXJiaXRyYXJ5IHdheXMgd2hlbiByZWxvYWRlZC4KKworICAgSWYgYSBtb2R1bGUgaW1wb3J0cyBvYmplY3RzIGZyb20gYW5vdGhlciBtb2R1bGUgdXNpbmcgOmtleXdvcmQ6YGZyb21gIC4uLgorICAgOmtleXdvcmQ6YGltcG9ydGAgLi4uLCBjYWxsaW5nIDpmdW5jOmByZWxvYWRgIGZvciB0aGUgb3RoZXIgbW9kdWxlIGRvZXMgbm90CisgICByZWRlZmluZSB0aGUgb2JqZWN0cyBpbXBvcnRlZCBmcm9tIGl0IC0tLSBvbmUgd2F5IGFyb3VuZCB0aGlzIGlzIHRvCisgICByZS1leGVjdXRlIHRoZSA6a2V5d29yZDpgZnJvbWAgc3RhdGVtZW50LCBhbm90aGVyIGlzIHRvIHVzZSA6a2V5d29yZDpgaW1wb3J0YAorICAgYW5kIHF1YWxpZmllZCBuYW1lcyAoKm1vZHVsZS5uYW1lKikgaW5zdGVhZC4KKworICAgSWYgYSBtb2R1bGUgaW5zdGFudGlhdGVzIGluc3RhbmNlcyBvZiBhIGNsYXNzLCByZWxvYWRpbmcgdGhlIG1vZHVsZSB0aGF0CisgICBkZWZpbmVzIHRoZSBjbGFzcyBkb2VzIG5vdCBhZmZlY3QgdGhlIG1ldGhvZCBkZWZpbml0aW9ucyBvZiB0aGUgaW5zdGFuY2VzIC0tLQorICAgdGhleSBjb250aW51ZSB0byB1c2UgdGhlIG9sZCBjbGFzcyBkZWZpbml0aW9uLiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgZGVyaXZlZAorICAgY2xhc3Nlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogOm1vZDpgaW1wb3J0bGliLmFiY2AgLS0gQWJzdHJhY3QgYmFzZSBjbGFzc2VzIHJlbGF0ZWQgdG8gaW1wb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMiw4ICsyMDYsNiBAQAogICAgICAgICAgICAgICAgKy0tIEV4ZWN1dGlvbkxvYWRlciAtLSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gRmlsZUxvYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBTb3VyY2VMb2FkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeUxvYWRlciAoZGVwcmVjYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeVB5Y0xvYWRlciAoZGVwcmVjYXRlZCkKIAogCiAuLiBjbGFzczo6IEZpbmRlcgpAQCAtMTQ5LDYgKzIyMSwxMCBAQAogICAgICAgbW9kdWxlLiAgT3JpZ2luYWxseSBzcGVjaWZpZWQgaW4gOnBlcDpgMzAyYCwgdGhpcyBtZXRob2Qgd2FzIG1lYW50CiAgICAgICBmb3IgdXNlIGluIDpkYXRhOmBzeXMubWV0YV9wYXRoYCBhbmQgaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbS4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IE1ldGFQYXRoRmluZGVyCiAKQEAgLTE2NSwxMiArMjQxLDE5IEBACiAgICAgICB3aWxsIGJlIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19wYXRoX19gIGZyb20gdGhlIHBhcmVudAogICAgICAgcGFja2FnZS4gSWYgYSBsb2FkZXIgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgLi4gbWV0aG9kOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICAgICBBbiBvcHRpb25hbCBtZXRob2Qgd2hpY2gsIHdoZW4gY2FsbGVkLCBzaG91bGQgaW52YWxpZGF0ZSBhbnkgaW50ZXJuYWwKICAgICAgIGNhY2hlIHVzZWQgYnkgdGhlIGZpbmRlci4gVXNlZCBieSA6ZnVuYzpgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzYAogICAgICAgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNhY2hlcyBvZiBhbGwgZmluZGVycyBvbiA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgTm9uZWBgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YgYGBOb3RJbXBsZW1lbnRlZGBgLgorCiAKIC4uIGNsYXNzOjogUGF0aEVudHJ5RmluZGVyCiAKQEAgLTE3OCw3ICsyNjEsNyBAQAogICAgaXQgYmVhcnMgc29tZSBzaW1pbGFyaXRpZXMgdG8gOmNsYXNzOmBNZXRhUGF0aEZpbmRlcmAsIGBgUGF0aEVudHJ5RmluZGVyYGAKICAgIGlzIG1lYW50IGZvciB1c2Ugb25seSB3aXRoaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbSBwcm92aWRlZAogICAgYnkgOmNsYXNzOmBQYXRoRmluZGVyYC4gVGhpcyBBQkMgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEZpbmRlcmAgZm9yCi0gICBjb21wYXRpYmlsaXR5LgorICAgY29tcGF0aWJpbGl0eSByZWFzb25zIG9ubHkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCkBAIC0xOTAsOSArMjczLDEyIEBACiAgICAgICBwYWNrYWdlLiBUaGUgbG9hZGVyIG1heSBiZSBgYE5vbmVgYCB3aGlsZSBzcGVjaWZ5aW5nIGBgcG9ydGlvbmBgIHRvCiAgICAgICBzaWduaWZ5IHRoZSBjb250cmlidXRpb24gb2YgdGhlIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyB0byBhIG5hbWVzcGFjZQogICAgICAgcGFja2FnZS4gQW4gZW1wdHkgbGlzdCBjYW4gYmUgdXNlZCBmb3IgYGBwb3J0aW9uYGAgdG8gc2lnbmlmeSB0aGUgbG9hZGVyCi0gICAgICBpcyBub3QgcGFydCBvZiBhIHBhY2thZ2UuIElmIGBgbG9hZGVyYGAgaXMgYGBOb25lYGAgYW5kIGBgcG9ydGlvbmBgIGlzCi0gICAgICB0aGUgZW1wdHkgbGlzdCB0aGVuIG5vIGxvYWRlciBvciBsb2NhdGlvbiBmb3IgYSBuYW1lc3BhY2UgcGFja2FnZSB3ZXJlCi0gICAgICBmb3VuZCAoaS5lLiBmYWlsdXJlIHRvIGZpbmQgYW55dGhpbmcgZm9yIHRoZSBtb2R1bGUpLgorICAgICAgaXMgbm90IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4gSWYgYGBsb2FkZXJgYCBpcyBgYE5vbmVgYCBhbmQKKyAgICAgIGBgcG9ydGlvbmBgIGlzIHRoZSBlbXB0eSBsaXN0IHRoZW4gbm8gbG9hZGVyIG9yIGxvY2F0aW9uIGZvciBhIG5hbWVzcGFjZQorICAgICAgcGFja2FnZSB3ZXJlIGZvdW5kIChpLmUuIGZhaWx1cmUgdG8gZmluZCBhbnl0aGluZyBmb3IgdGhlIG1vZHVsZSkuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgKE5vbmUsIFtdKWBgIGluc3RlYWQgb2YgcmFpc2luZyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KIAogICAgLi4gbWV0aG9kOjogZmluZF9tb2R1bGUoZnVsbG5hbWUpCiAKQEAgLTIyNCwxMiArMzEwLDExIEBACiAgICAgICAgIGZyb20gdGhlIGltcG9ydC4gSWYgdGhlIGxvYWRlciBpbnNlcnRlZCBhIG1vZHVsZSBhbmQgdGhlIGxvYWQgZmFpbHMsIGl0CiAgICAgICAgIG11c3QgYmUgcmVtb3ZlZCBieSB0aGUgbG9hZGVyIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYDsgbW9kdWxlcyBhbHJlYWR5CiAgICAgICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2AgYmVmb3JlIHRoZSBsb2FkZXIgYmVnYW4gZXhlY3V0aW9uIHNob3VsZCBiZSBsZWZ0Ci0gICAgICAgIGFsb25lLiBUaGUgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgaGFuZGxlcwotICAgICAgICBhbGwgb2YgdGhlc2UgZGV0YWlscy4KKyAgICAgICAgYWxvbmUgKHNlZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgKS4KIAogICAgICAgICBUaGUgbG9hZGVyIHNob3VsZCBzZXQgc2V2ZXJhbCBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUuCiAgICAgICAgIChOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBjaGFuZ2Ugd2hlbiBhIG1vZHVsZSBpcwotICAgICAgICByZWxvYWRlZC4pCisgICAgICAgIHJlbG9hZGVkKToKIAogICAgICAgICAtIDphdHRyOmBfX25hbWVfX2AKICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCkBAIC0yNDksMjAgKzMzNCwyOCBAQAogICAgICAgICAtIDphdHRyOmBfX3BhY2thZ2VfX2AKICAgICAgICAgICAgIFRoZSBwYXJlbnQgcGFja2FnZSBmb3IgdGhlIG1vZHVsZS9wYWNrYWdlLiBJZiB0aGUgbW9kdWxlIGlzCiAgICAgICAgICAgICB0b3AtbGV2ZWwgdGhlbiBpdCBoYXMgYSB2YWx1ZSBvZiB0aGUgZW1wdHkgc3RyaW5nLiBUaGUKLSAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5zZXRfcGFja2FnZWAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlIGRldGFpbHMKLSAgICAgICAgICAgIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgorICAgICAgICAgICAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgICAgIGRldGFpbHMgZm9yIDphdHRyOmBfX3BhY2thZ2VfX2AuCiAKICAgICAgICAgLSA6YXR0cjpgX19sb2FkZXJfX2AKLSAgICAgICAgICAgIFRoZSBsb2FkZXIgdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuCi0gICAgICAgICAgICAoVGhpcyBpcyBub3Qgc2V0IGJ5IHRoZSBidWlsdC1pbiBpbXBvcnQgbWFjaGluZXJ5LAotICAgICAgICAgICAgYnV0IGl0IHNob3VsZCBiZSBzZXQgd2hlbmV2ZXIgYSA6dGVybTpgbG9hZGVyYCBpcyB1c2VkLikKKyAgICAgICAgICAgIFRoZSBsb2FkZXIgdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuIFRoZQorICAgICAgICAgICAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgICAgIGRldGFpbHMgZm9yIDphdHRyOmBfX3BhY2thZ2VfX2AuCisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YKKyAgICAgICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKICAgICAuLiBtZXRob2Q6OiBtb2R1bGVfcmVwcihtb2R1bGUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwciwgYXMgYSBzdHJpbmcuCisgICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlCisgICAgICAgIGdpdmVuIG1vZHVsZSdzIHJlcHIsIGFzIGEgc3RyaW5nLiBUaGUgbW9kdWxlIHR5cGUncyBkZWZhdWx0IHJlcHIoKSB3aWxsCisgICAgICAgIHVzZSB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIGFzIGFwcHJvcHJpYXRlLgogCi0gICAgICAgIC4uIHZlcnNpb25hZGRlZDogMy4zCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIE1hZGUgb3B0aW9uYWwgaW5zdGVhZCBvZiBhbiBhYnN0cmFjdG1ldGhvZC4KIAogCiAuLiBjbGFzczo6IFJlc291cmNlTG9hZGVyCkBAIC0yODEsNiArMzc0LDkgQEAKICAgICAgICAgYmUgZm91bmQuIFRoZSAqcGF0aCogaXMgZXhwZWN0ZWQgdG8gYmUgY29uc3RydWN0ZWQgdXNpbmcgYSBtb2R1bGUncwogICAgICAgICA6YXR0cjpgX19maWxlX19gIGF0dHJpYnV0ZSBvciBhbiBpdGVtIGZyb20gYSBwYWNrYWdlJ3MgOmF0dHI6YF9fcGF0aF9fYC4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSU9FcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IEluc3BlY3RMb2FkZXIKIApAQCAtMjg5LDE0ICszODUsMjEgQEAKIAogICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQogCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIDpjbGFzczpgY29kZWAgb2JqZWN0IGZvciBhIG1vZHVsZS4KLSAgICAgICAgYGBOb25lYGAgaXMgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgY29kZSBvYmplY3QKKyAgICAgICAgUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBmb3IgYSBtb2R1bGUuCisgICAgICAgIGBgTm9uZWBgIHNob3VsZCBiZSByZXR1cm5lZCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGhhdmUgYSBjb2RlIG9iamVjdAogICAgICAgICAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLiAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCBpZiBsb2FkZXIgY2Fubm90CiAgICAgICAgIGZpbmQgdGhlIHJlcXVlc3RlZCBtb2R1bGUuCiAKKyAgICAgICAgLi4gbm90ZTo6CisgICAgICAgICAgIFdoaWxlIHRoZSBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQKKyAgICAgICAgICAgaXQgYmUgb3ZlcnJpZGRlbiBpZiBwb3NzaWJsZSBmb3IgcGVyZm9ybWFuY2UuCisKICAgICAgICAgLi4gaW5kZXg6OgogICAgICAgICAgICBzaW5nbGU6IHVuaXZlcnNhbCBuZXdsaW5lczsgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2UgbWV0aG9kCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTm8gbG9uZ2VyIGFic3RyYWN0IGFuZCBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLgorCiAgICAgLi4gbWV0aG9kOjogZ2V0X3NvdXJjZShmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIHRoZSBzb3VyY2Ugb2YgYSBtb2R1bGUuIEl0IGlzIHJldHVybmVkIGFzCkBAIC0zMDUsMTIgKzQwOCwzMyBAQAogICAgICAgICBpZiBubyBzb3VyY2UgaXMgYXZhaWxhYmxlIChlLmcuIGEgYnVpbHQtaW4gbW9kdWxlKS4gUmFpc2VzCiAgICAgICAgIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGNhbm5vdCBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgIC4uIG1ldGhvZDo6IGlzX3BhY2thZ2UoZnVsbG5hbWUpCiAKICAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiBhIHRydWUgdmFsdWUgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGEKICAgICAgICAgZmFsc2UgdmFsdWUgb3RoZXJ3aXNlLiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZQogICAgICAgICA6dGVybTpgbG9hZGVyYCBjYW5ub3QgZmluZCB0aGUgbW9kdWxlLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKworICAgIC4uIG1ldGhvZDo6IHNvdXJjZV90b19jb2RlKGRhdGEsIHBhdGg9JzxzdHJpbmc+JykKKworICAgICAgICBDcmVhdGUgYSBjb2RlIG9iamVjdCBmcm9tIFB5dGhvbiBzb3VyY2UuCisKKyAgICAgICAgVGhlICpkYXRhKiBhcmd1bWVudCBjYW4gYmUgd2hhdGV2ZXIgdGhlIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbgorICAgICAgICBzdXBwb3J0cyAoaS5lLiBzdHJpbmcgb3IgYnl0ZXMpLiBUaGUgKnBhdGgqIGFyZ3VtZW50IHNob3VsZCBiZQorICAgICAgICB0aGUgInBhdGgiIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBvcmlnaW5hdGVkIGZyb20sIHdoaWNoIGNhbiBiZSBhbgorICAgICAgICBhYnN0cmFjdCBjb25jZXB0IChlLmcuIGxvY2F0aW9uIGluIGEgemlwIGZpbGUpLgorCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5sb2FkX21vZHVsZWAuCisKIAogLi4gY2xhc3M6OiBFeGVjdXRpb25Mb2FkZXIKIApAQCAtMzI4LDYgKzQ1Miw5IEBACiAgICAgICAgIHRoZSBzb3VyY2UgZmlsZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgYnl0ZWNvZGUgd2FzIHVzZWQgdG8gbG9hZCB0aGUKICAgICAgICAgbW9kdWxlLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IEZpbGVMb2FkZXIoZnVsbG5hbWUsIHBhdGgpCiAKQEAgLTM1OCw3ICs0ODUsNyBAQAogCiAgICAuLiBtZXRob2Q6OiBnZXRfZGF0YShwYXRoKQogCi0gICAgICBSZXR1cm5zIHRoZSBvcGVuLCBiaW5hcnkgZmlsZSBmb3IgKnBhdGgqLgorICAgICAgUmVhZHMgKnBhdGgqIGFzIGEgYmluYXJ5IGZpbGUgYW5kIHJldHVybnMgdGhlIGJ5dGVzIGZyb20gaXQuCiAKIAogLi4gY2xhc3M6OiBTb3VyY2VMb2FkZXIKQEAgLTM3Myw3ICs1MDAsOCBAQAogICAgICAgICAgIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZC4KIAogICAgIFRoZSBhYnN0cmFjdCBtZXRob2RzIGRlZmluZWQgYnkgdGhpcyBjbGFzcyBhcmUgdG8gYWRkIG9wdGlvbmFsIGJ5dGVjb2RlCi0gICAgZmlsZSBzdXBwb3J0LiBOb3QgaW1wbGVtZW50aW5nIHRoZXNlIG9wdGlvbmFsIG1ldGhvZHMgY2F1c2VzIHRoZSBsb2FkZXIgdG8KKyAgICBmaWxlIHN1cHBvcnQuIE5vdCBpbXBsZW1lbnRpbmcgdGhlc2Ugb3B0aW9uYWwgbWV0aG9kcyAob3IgY2F1c2luZyB0aGVtIHRvCisgICAgcmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmApIGNhdXNlcyB0aGUgbG9hZGVyIHRvCiAgICAgb25seSB3b3JrIHdpdGggc291cmNlIGNvZGUuIEltcGxlbWVudGluZyB0aGUgbWV0aG9kcyBhbGxvd3MgdGhlIGxvYWRlciB0bwogICAgIHdvcmsgd2l0aCBzb3VyY2UgKmFuZCogYnl0ZWNvZGUgZmlsZXM7IGl0IGRvZXMgbm90IGFsbG93IGZvciAqc291cmNlbGVzcyoKICAgICBsb2FkaW5nIHdoZXJlIG9ubHkgYnl0ZWNvZGUgaXMgcHJvdmlkZWQuICBCeXRlY29kZSBmaWxlcyBhcmUgYW4KQEAgLTM5MCwxMCArNTE4LDEzIEBACiAgICAgICAgIC0gYGAnc2l6ZSdgYCAob3B0aW9uYWwpOiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgc291cmNlIGNvZGUuCiAKICAgICAgICAgQW55IG90aGVyIGtleXMgaW4gdGhlIGRpY3Rpb25hcnkgYXJlIGlnbm9yZWQsIHRvIGFsbG93IGZvciBmdXR1cmUKLSAgICAgICAgZXh0ZW5zaW9ucy4KKyAgICAgICAgZXh0ZW5zaW9ucy4gSWYgdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQsIDpleGM6YElPRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZSA6ZXhjOmBJT0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAgICAgLi4gbWV0aG9kOjogcGF0aF9tdGltZShwYXRoKQogCiAgICAgICAgIE9wdGlvbmFsIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlCkBAIC00MDIsNyArNTMzLDEwIEBACiAgICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgOm1ldGg6YHBhdGhfc3RhdHNgLiAgWW91IGRvbid0CiAgICAgICAgICAgIGhhdmUgdG8gaW1wbGVtZW50IGl0LCBidXQgaXQgaXMgc3RpbGwgYXZhaWxhYmxlIGZvciBjb21wYXRpYmlsaXR5Ci0gICAgICAgICAgIHB1cnBvc2VzLgorICAgICAgICAgICBwdXJwb3Nlcy4gUmFpc2UgOmV4YzpgSU9FcnJvcmAgaWYgdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCisKKyAgICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICAgIFJhaXNlIDpleGM6YElPRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKICAgICAuLiBtZXRob2Q6OiBzZXRfZGF0YShwYXRoLCBkYXRhKQogCkBAIC00MTQsNiArNTQ4LDkgQEAKICAgICAgICAgKDphdHRyOmBlcnJuby5FQUNDRVNgLzpleGM6YFBlcm1pc3Npb25FcnJvcmApLCBkbyBub3QgcHJvcGFnYXRlIHRoZQogICAgICAgICBleGNlcHRpb24uCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTm8gbG9uZ2VyIHJhaXNlcyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aGVuIGNhbGxlZC4KKwogICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQogCiAgICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBJbnNwZWN0TG9hZGVyLmdldF9jb2RlYC4KQEAgLTQzNSwxNDIgKzU3Miw2IEBACiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBlbmQgaW4gYGBfX2luaXRfX2BgLgogCiAKLS4uIGNsYXNzOjogUHlMb2FkZXIKLQotICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5oZXJpdGluZyBmcm9tCi0gICAgOmNsYXNzOmBFeGVjdXRpb25Mb2FkZXJgIGFuZAotICAgIDpjbGFzczpgUmVzb3VyY2VMb2FkZXJgIGRlc2lnbmVkIHRvIGVhc2UgdGhlIGxvYWRpbmcgb2YKLSAgICBQeXRob24gc291cmNlIG1vZHVsZXMgKGJ5dGVjb2RlIGlzIG5vdCBoYW5kbGVkOyBzZWUKLSAgICA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgZm9yIGEgc291cmNlL2J5dGVjb2RlIEFCQykuIEEgc3ViY2xhc3MKLSAgICBpbXBsZW1lbnRpbmcgdGhpcyBBQkMgd2lsbCBvbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgZXhwb3NpbmcgaG93IHRoZSBzb3VyY2UKLSAgICBjb2RlIGlzIHN0b3JlZDsgYWxsIG90aGVyIGRldGFpbHMgZm9yIGxvYWRpbmcgUHl0aG9uIHNvdXJjZSBjb2RlIHdpbGwgYmUKLSAgICBoYW5kbGVkIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb2Yga2V5IG1ldGhvZHMuCi0KLSAgICAuLiBkZXByZWNhdGVkOjogMy4yCi0gICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIGlzCi0gICAgICAgIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40LiBTZWUgYmVsb3cgZm9yIGhvdyB0byBjcmVhdGUgYQotICAgICAgICBzdWJjbGFzcyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMuCi0KLSAgICBJZiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMSBpcyByZXF1aXJlZCwgdGhlbiB1c2UgdGhlIGZvbGxvd2luZyBpZGlvbQotICAgIHRvIGltcGxlbWVudCBhIHN1YmNsYXNzIHRoYXQgd2lsbCB3b3JrIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzIChtYWtlIHN1cmUKLSAgICB0byBpbXBsZW1lbnQgOm1ldGg6YEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgKTo6Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBTb3VyY2VMb2FkZXIKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBQeUxvYWRlciBhcyBTb3VyY2VMb2FkZXIKLQotCi0gICAgICAgIGNsYXNzIEN1c3RvbUxvYWRlcihTb3VyY2VMb2FkZXIpOgotICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZS4iIiIKLSAgICAgICAgICAgICAgICAjIEltcGxlbWVudCAuLi4KLQotICAgICAgICAgICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgc291cmNlX3BhdGggaW4gdGVybXMgb2YgZ2V0X2ZpbGVuYW1lLiIiIgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIkltcGxlbWVudCBpc19wYWNrYWdlIGJ5IGxvb2tpbmcgZm9yIGFuIF9faW5pdF9fIGZpbGUKLSAgICAgICAgICAgICAgICBuYW1lIGFzIHJldHVybmVkIGJ5IGdldF9maWxlbmFtZS4iIiIKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLQotICAgIC4uIG1ldGhvZDo6IHNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBjb2RlIGZvciBhCi0gICAgICAgIG1vZHVsZS4gU2hvdWxkIHJldHVybiBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4KLSAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCi0gICAgICAgIG1vZHVsZS4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgIHRoYXQKLSAgICAgICAgcmVsaWVzIG9uIDptZXRoOmBzb3VyY2VfcGF0aGAuIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucwotICAgICAgICBgYE5vbmVgYCwgdGhlbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgotCi0gICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgCi0gICAgICAgIHRoYXQgbG9hZHMgUHl0aG9uIHNvdXJjZSBjb2RlLiBBbGwgbmVlZGVkIGluZm9ybWF0aW9uIGNvbWVzIGZyb20gdGhlCi0gICAgICAgIGFic3RyYWN0IG1ldGhvZHMgcmVxdWlyZWQgYnkgdGhpcyBBQkMuIFRoZSBvbmx5IHBlcnRpbmVudCBhc3N1bXB0aW9uCi0gICAgICAgIG1hZGUgYnkgdGhpcyBtZXRob2QgaXMgdGhhdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlCi0gICAgICAgIDphdHRyOmBfX3BhdGhfX2AgaXMgc2V0IHRvIGBgW29zLnBhdGguZGlybmFtZShfX2ZpbGVfXyldYGAuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfY29kZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgIHRoYXQgY3JlYXRlcyBjb2RlIG9iamVjdHMKLSAgICAgICAgZnJvbSBQeXRob24gc291cmNlIGNvZGUsIGJ5IHJlcXVlc3RpbmcgdGhlIHNvdXJjZSBjb2RlICh1c2luZwotICAgICAgICA6bWV0aDpgc291cmNlX3BhdGhgIGFuZCA6bWV0aDpgZ2V0X2RhdGFgKSBhbmQgY29tcGlsaW5nIGl0IHdpdGggdGhlCi0gICAgICAgIGJ1aWx0LWluIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgLiBVc2VzCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlJlc291cmNlTG9hZGVyLmdldF9kYXRhYCBhbmQgOm1ldGg6YHNvdXJjZV9wYXRoYAotICAgICAgICB0byBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgSXQgdHJpZXMgdG8gZ3Vlc3MgdGhlIHNvdXJjZSBlbmNvZGluZyB1c2luZwotICAgICAgICA6ZnVuYzpgdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nYC4KLQotCi0uLiBjbGFzczo6IFB5UHljTG9hZGVyCi0KLSAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGluaGVyaXRpbmcgZnJvbSA6Y2xhc3M6YFB5TG9hZGVyYC4KLSAgICBUaGlzIEFCQyBpcyBtZWFudCB0byBoZWxwIGluIGNyZWF0aW5nIGxvYWRlcnMgdGhhdCBzdXBwb3J0IGJvdGggUHl0aG9uCi0gICAgc291cmNlIGFuZCBieXRlY29kZS4KLQotICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKLSAgICAgICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIDpjbGFzczpgU291cmNlTG9hZGVyYCBhbmQgdG8KLSAgICAgICAgcHJvcGVybHkgc3VwcG9ydCA6cGVwOmAzMTQ3YC4gSWYgY29tcGF0aWJpbGl0eSBpcyByZXF1aXJlZCB3aXRoCi0gICAgICAgIFB5dGhvbiAzLjEsIGltcGxlbWVudCBib3RoIDpjbGFzczpgU291cmNlTG9hZGVyYCBhbmQgOmNsYXNzOmBQeUxvYWRlcmA7Ci0gICAgICAgIGluc3RydWN0aW9ucyBvbiBob3cgdG8gZG8gc28gYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgotICAgICAgICA6Y2xhc3M6YFB5TG9hZGVyYC4gRG8gbm90ZSB0aGF0IHRoaXMgc29sdXRpb24gd2lsbCBub3Qgc3VwcG9ydAotICAgICAgICBzb3VyY2VsZXNzL2J5dGVjb2RlLW9ubHkgbG9hZGluZzsgb25seSBzb3VyY2UgKmFuZCogYnl0ZWNvZGUgbG9hZGluZy4KLQotICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICAgVXBkYXRlZCB0byBwYXJzZSAoYnV0IG5vdCB1c2UpIHRoZSBuZXcgc291cmNlIHNpemUgZmllbGQgaW4gYnl0ZWNvZGUKLSAgICAgICBmaWxlcyB3aGVuIHJlYWRpbmcgYW5kIHRvIHdyaXRlIG91dCB0aGUgZmllbGQgcHJvcGVybHkgd2hlbiB3cml0aW5nLgotCi0gICAgLi4gbWV0aG9kOjogc291cmNlX210aW1lKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHNvdXJjZQotICAgICAgICBjb2RlIG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgc2hvdWxkIGJlIGFuCi0gICAgICAgIGludGVnZXIuIElmIHRoZXJlIGlzIG5vIHNvdXJjZSBjb2RlLCByZXR1cm4gYGBOb25lYGAuIElmIHRoZQotICAgICAgICBtb2R1bGUgY2Fubm90IGJlIGZvdW5kIHRoZW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IGJ5dGVjb2RlX3BhdGgoZnVsbG5hbWUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIHBhdGggdG8gdGhlIGJ5dGVjb2RlIGZvciB0aGUKLSAgICAgICAgc3BlY2lmaWVkIG1vZHVsZSwgaWYgaXQgZXhpc3RzLiBJdCByZXR1cm5zIGBgTm9uZWBgCi0gICAgICAgIGlmIG5vIGJ5dGVjb2RlIGV4aXN0cyAoeWV0KS4KLSAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCi0gICAgICAgIG1vZHVsZS4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0IHJlbGllcyBvbgotICAgICAgICA6bWV0aDpgUHlMb2FkZXIuc291cmNlX3BhdGhgIGFuZCA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAuCi0gICAgICAgIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoZW4gdGhhdCB2YWx1ZSBpcyByZXR1cm5lZC4KLSAgICAgICAgRWxzZSBpZiA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoYXQgcGF0aCB3aWxsIGJlCi0gICAgICAgIHJldHVybmVkLiBJZiBhIHBhdGggaXMgbm90IGF2YWlsYWJsZSBmcm9tIGJvdGggbWV0aG9kcywKLSAgICAgICAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IHdyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBieXRlY29kZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggaGFzIHRoZSBsb2FkZXIgd3JpdGUgKmJ5dGVjb2RlKiBmb3IgZnV0dXJlCi0gICAgICAgIHVzZS4gSWYgdGhlIGJ5dGVjb2RlIGlzIHdyaXR0ZW4sIHJldHVybiBgYFRydWVgYC4gUmV0dXJuCi0gICAgICAgIGBgRmFsc2VgYCBpZiB0aGUgYnl0ZWNvZGUgY291bGQgbm90IGJlIHdyaXR0ZW4uIFRoaXMgbWV0aG9kCi0gICAgICAgIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIDpkYXRhOmBzeXMuZG9udF93cml0ZV9ieXRlY29kZWAgaXMgdHJ1ZS4KLSAgICAgICAgVGhlICpieXRlY29kZSogYXJndW1lbnQgc2hvdWxkIGJlIGEgYnl0ZXMgc3RyaW5nIG9yIGJ5dGVzIGFycmF5LgotCi0KIDptb2Q6YGltcG9ydGxpYi5tYWNoaW5lcnlgIC0tIEltcG9ydGVycyBhbmQgcGF0aCBob29rcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTY4Niw2ICs2ODcsMTAgQEAKICAgICAgQ2FsbHMgOm1ldGg6YGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmludmFsaWRhdGVfY2FjaGVzYCBvbiBhbGwKICAgICAgZmluZGVycyBzdG9yZWQgaW4gOmF0dHI6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYC4KIAorICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICBDYWxscyBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2Agd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICBmb3IgYGAnJ2BgIChpLmUuIHRoZSBlbXB0eSBzdHJpbmcpLgorCiAKIC4uIGNsYXNzOjogRmlsZUZpbmRlcihwYXRoLCBcKmxvYWRlcl9kZXRhaWxzKQogCkBAIC04MDAsNyArODA1LDcgQEAKIAogLi4gY2xhc3M6OiBFeHRlbnNpb25GaWxlTG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQogCi0gICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyYCBmb3IKKyAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlcmAgZm9yCiAgICBleHRlbnNpb24gbW9kdWxlcy4KIAogICAgVGhlICpmdWxsbmFtZSogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGxvYWRlciBpcyB0bwpAQCAtODM0LDYgKzgzOSw3MCBAQAogCiAgICAgICBSZXR1cm5zIGBgTm9uZWBgIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGRvIG5vdCBoYXZlIHNvdXJjZSBjb2RlLgogCisgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKKyAgICAgIFJldHVybnMgOmF0dHI6YHBhdGhgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjbGFzczo6IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgbG9hZGVyX3N0YXRlPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSkKKworICAgQSBzcGVjaWZpY2F0aW9uIGZvciBhIG1vZHVsZSdzIGltcG9ydC1zeXN0ZW0tcmVsYXRlZCBzdGF0ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIGF0dHJpYnV0ZTo6IG5hbWUKKworICAgKGBgX19uYW1lX19gYCkKKworICAgQSBzdHJpbmcgZm9yIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsb2FkZXIKKworICAgKGBgX19sb2FkZXJfX2BgKQorCisgICBUaGUgbG9hZGVyIHRvIHVzZSBmb3IgbG9hZGluZy4gIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgdGhpcyBzaG91bGQgYmUKKyAgIHNldCB0byBOb25lLgorCisgICAuLiBhdHRyaWJ1dGU6OiBvcmlnaW4KKworICAgKGBgX19maWxlX19gYCkKKworICAgTmFtZSBvZiB0aGUgcGxhY2UgZnJvbSB3aGljaCB0aGUgbW9kdWxlIGlzIGxvYWRlZCwgZS5nLiAiYnVpbHRpbiIgZm9yCisgICBidWlsdC1pbiBtb2R1bGVzIGFuZCB0aGUgZmlsZW5hbWUgZm9yIG1vZHVsZXMgbG9hZGVkIGZyb20gc291cmNlLgorICAgTm9ybWFsbHkgIm9yaWdpbiIgc2hvdWxkIGJlIHNldCwgYnV0IGl0IG1heSBiZSBOb25lICh0aGUgZGVmYXVsdCkKKyAgIHdoaWNoIGluZGljYXRlcyBpdCBpcyB1bnNwZWNpZmllZC4KKworICAgLi4gYXR0cmlidXRlOjogc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKworICAgKGBgX19wYXRoX19gYCkKKworICAgTGlzdCBvZiBzdHJpbmdzIGZvciB3aGVyZSB0byBmaW5kIHN1Ym1vZHVsZXMsIGlmIGEgcGFja2FnZSAoTm9uZQorICAgb3RoZXJ3aXNlKS4KKworICAgLi4gYXR0cmlidXRlOjogbG9hZGVyX3N0YXRlCisKKyAgIENvbnRhaW5lciBvZiBleHRyYSBtb2R1bGUtc3BlY2lmaWMgZGF0YSBmb3IgdXNlIGR1cmluZyBsb2FkaW5nIChvcgorICAgTm9uZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNhY2hlZAorCisgICAoYGBfX2NhY2hlZF9fYGApCisKKyAgIFN0cmluZyBmb3Igd2hlcmUgdGhlIGNvbXBpbGVkIG1vZHVsZSBzaG91bGQgYmUgc3RvcmVkIChvciBOb25lKS4KKworICAgLi4gYXR0cmlidXRlOjogcGFyZW50CisKKyAgIChgYF9fcGFja2FnZV9fYGApCisKKyAgIChSZWFkLW9ubHkpIEZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHdoaWNoIHRoZSBtb2R1bGUKKyAgIGJlbG9uZ3MgYXMgYSBzdWJtb2R1bGUgKG9yIE5vbmUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBoYXNfbG9jYXRpb24KKworICAgKFJlYWQtb25seSkgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBtb2R1bGUncyAib3JpZ2luIgorICAgYXR0cmlidXRlIHJlZmVycyB0byBhIGxvYWRhYmxlIGxvY2F0aW9uLgogCiA6bW9kOmBpbXBvcnRsaWIudXRpbGAgLS0gVXRpbGl0eSBjb2RlIGZvciBpbXBvcnRlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODQ0LDYgKzkxMyw1MSBAQAogVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIHZhcmlvdXMgb2JqZWN0cyB0aGF0IGhlbHAgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZgogYW4gOnRlcm06YGltcG9ydGVyYC4KIAorLi4gYXR0cmlidXRlOjogTUFHSUNfTlVNQkVSCisKKyAgIFRoZSBieXRlcyB3aGljaCByZXByZXNlbnQgdGhlIGJ5dGVjb2RlIHZlcnNpb24gbnVtYmVyLiBJZiB5b3UgbmVlZCBoZWxwIHdpdGgKKyAgIGxvYWRpbmcvd3JpdGluZyBieXRlY29kZSB0aGVuIGNvbnNpZGVyIDpjbGFzczpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBjYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZT1Ob25lKQorCisgICBSZXR1cm4gdGhlIDpwZXA6YDMxNDdgIHBhdGggdG8gdGhlIGJ5dGUtY29tcGlsZWQgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICBzb3VyY2UgKnBhdGgqLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcyBgYC9mb28vYmFyL2Jhei5weWBgIHRoZSByZXR1cm4KKyAgIHZhbHVlIHdvdWxkIGJlIGBgL2Zvby9iYXIvX19weWNhY2hlX18vYmF6LmNweXRob24tMzIucHljYGAgZm9yIFB5dGhvbiAzLjIuCisgICBUaGUgYGBjcHl0aG9uLTMyYGAgc3RyaW5nIGNvbWVzIGZyb20gdGhlIGN1cnJlbnQgbWFnaWMgdGFnIChzZWUKKyAgIDpmdW5jOmBnZXRfdGFnYDsgaWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkIHRoZW4KKyAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdpbGwgYmUgcmFpc2VkKS4gIFRoZSByZXR1cm5lZCBwYXRoIHdpbGwgZW5kIGluCisgICBgYC5weWNgYCB3aGVuIGBgX19kZWJ1Z19fYGAgaXMgVHJ1ZSBvciBgYC5weW9gYCBmb3IgYW4gb3B0aW1pemVkIFB5dGhvbgorICAgKGkuZS4gYGBfX2RlYnVnX19gYCBpcyBGYWxzZSkuICBCeSBwYXNzaW5nIGluIFRydWUgb3IgRmFsc2UgZm9yCisgICAqZGVidWdfb3ZlcnJpZGUqIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHN5c3RlbSdzIHZhbHVlIGZvciBgYF9fZGVidWdfX2BgIGZvcgorICAgZXh0ZW5zaW9uIHNlbGVjdGlvbi4KKworICAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgIEdpdmVuIHRoZSAqcGF0aCogdG8gYSA6cGVwOmAzMTQ3YCBmaWxlIG5hbWUsIHJldHVybiB0aGUgYXNzb2NpYXRlZCBzb3VyY2UgY29kZQorICAgZmlsZSBwYXRoLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcworICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCB0aGUgcmV0dXJuZWQgcGF0aCB3b3VsZCBiZQorICAgYGAvZm9vL2Jhci9iYXoucHlgYC4gICpwYXRoKiBuZWVkIG5vdCBleGlzdCwgaG93ZXZlciBpZiBpdCBkb2VzIG5vdCBjb25mb3JtCisgICB0byA6cGVwOmAzMTQ3YCBmb3JtYXQsIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkLiBJZgorICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLAorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcykKKworICAgRGVjb2RlIHRoZSBnaXZlbiBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZworICAgd2l0aCB1bml2ZXJzYWwgbmV3bGluZXMgKGFzIHJlcXVpcmVkIGJ5CisgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpCiAKICAgIFJlc29sdmUgYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSB0byBhbiBhYnNvbHV0ZSBvbmUuCkBAIC04NjIsNyArOTc2LDcgQEAKIAogLi4gZGVjb3JhdG9yOjogbW9kdWxlX2Zvcl9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAorICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKICAgICB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIKICAgICBtb2R1bGUgb2JqZWN0IHRvIGxvYWQgd2l0aC4gVGhlIGRlY29yYXRlZCBtZXRob2QgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGNhbGwKICAgICBzaWduYXR1cmUgdGFraW5nIHR3byBwb3NpdGlvbmFsIGFyZ3VtZW50cwpAQCAtODczLDU1ICs5ODcsNjIgQEAKIAogICAgIFRoZSBkZWNvcmF0ZWQgbWV0aG9kIHdpbGwgdGFrZSBpbiB0aGUgKipuYW1lKiogb2YgdGhlIG1vZHVsZSB0byBiZSBsb2FkZWQKICAgICBhcyBleHBlY3RlZCBmb3IgYSA6dGVybTpgbG9hZGVyYC4gSWYgdGhlIG1vZHVsZSBpcyBub3QgZm91bmQgaW4KLSAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gYSBuZXcgb25lIGlzIGNvbnN0cnVjdGVkIHdpdGggaXRzCi0gICAgOmF0dHI6YF9fbmFtZV9fYCBhdHRyaWJ1dGUgc2V0IHRvICoqbmFtZSoqLCA6YXR0cjpgX19sb2FkZXJfX2Agc2V0IHRvCi0gICAgKipzZWxmKiosIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gIHNldCBpZgotICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuaXNfcGFja2FnZWAgaXMgZGVmaW5lZCBmb3IgKipzZWxmKiogYW5kCi0gICAgZG9lcyBub3QgcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIGZvciAqKm5hbWUqKi4gSWYgYSBuZXcgbW9kdWxlIGlzIG5vdAotICAgIG5lZWRlZCB0aGVuIHRoZSBtb2R1bGUgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZQotICAgIG1ldGhvZC4KKyAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gYSBuZXcgb25lIGlzIGNvbnN0cnVjdGVkLiBSZWdhcmRsZXNzIG9mIHdoZXJlIHRoZQorICAgIG1vZHVsZSBjYW1lIGZyb20sIDphdHRyOmBfX2xvYWRlcl9fYCBzZXQgdG8gKipzZWxmKiogYW5kIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgICBpcyBzZXQgYmFzZWQgb24gd2hhdCA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgIHJldHVybnMKKyAgICAoaWYgYXZhaWxhYmxlKS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgc2V0IHVuY29uZGl0aW9uYWxseSB0byBzdXBwb3J0CisgICAgcmVsb2FkaW5nLgogCiAgICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBieSB0aGUgZGVjb3JhdGVkIG1ldGhvZCBhbmQgYSBtb2R1bGUgd2FzIGFkZGVkIHRvCi0gICAgOmRhdGE6YHN5cy5tb2R1bGVzYCBpdCB3aWxsIGJlIHJlbW92ZWQgdG8gcHJldmVudCBhIHBhcnRpYWxseSBpbml0aWFsaXplZAotICAgIG1vZHVsZSBmcm9tIGJlaW5nIGluIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4gSWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeQotICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBpdCBpcyBsZWZ0IGFsb25lLgotCi0gICAgVXNlIG9mIHRoaXMgZGVjb3JhdG9yIGhhbmRsZXMgYWxsIHRoZSBkZXRhaWxzIG9mIHdoaWNoIG1vZHVsZSBvYmplY3QgYQotICAgIGxvYWRlciBzaG91bGQgaW5pdGlhbGl6ZSBhcyBzcGVjaWZpZWQgYnkgOnBlcDpgMzAyYCBhcyBiZXN0IGFzIHBvc3NpYmxlLgorICAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZW4gdGhlIG1vZHVsZSB3aWxsIGJlIHJlbW92ZWQgdG8gcHJldmVudCBhIHBhcnRpYWxseQorICAgIGluaXRpYWxpemVkIG1vZHVsZSBmcm9tIGJlaW5nIGluIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4gSWYgdGhlIG1vZHVsZQorICAgIHdhcyBhbHJlYWR5IGluIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBpdCBpcyBsZWZ0IGFsb25lLgogCiAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICA6YXR0cjpgX19sb2FkZXJfX2AgYW5kIDphdHRyOmBfX3BhY2thZ2VfX2AgYXJlIGF1dG9tYXRpY2FsbHkgc2V0CiAgICAgICAgKHdoZW4gcG9zc2libGUpLgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBTZXQgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fbG9hZGVyX19gIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgICAgICB1bmNvbmRpdGlvbmFsbHkgdG8gc3VwcG9ydCByZWxvYWRpbmcuCisKKyAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVGhlIGltcG9ydCBtYWNoaW5lcnkgbm93IGRpcmVjdGx5IHBlcmZvcm1zIGFsbCB0aGUgZnVuY3Rpb25hbGl0eQorICAgICAgIHByb3ZpZGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisKIC4uIGRlY29yYXRvcjo6IHNldF9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAotICAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgYXR0cmlidXRlIG9uIGxvYWRlZCBtb2R1bGVzLiBJZiB0aGUgYXR0cmlidXRlIGlzIGFscmVhZHkgc2V0IHRoZSBkZWNvcmF0b3IKLSAgICBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0byB0aGUKLSAgICB3cmFwcGVkIG1ldGhvZCAoaS5lLiBgYHNlbGZgYCkgaXMgd2hhdCA6YXR0cjpgX19sb2FkZXJfX2Agc2hvdWxkIGJlIHNldCB0by4KKyAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKKyAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCisgICBhdHRyaWJ1dGUgb24gdGhlIHJldHVybmVkIG1vZHVsZS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IHNldCB0aGUKKyAgIGRlY29yYXRvciBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0bworICAgdGhlIHdyYXBwZWQgbWV0aG9kIChpLmUuIGBgc2VsZmBgKSBpcyB3aGF0IDphdHRyOmBfX2xvYWRlcl9fYCBzaG91bGQgYmUgc2V0CisgICB0by4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgOmZ1bmM6YG1vZHVsZV9mb3JfbG9hZGVyYCBiZSB1c2VkIG92ZXIgdGhpcwotICAgICAgZGVjb3JhdG9yIGFzIGl0IHN1YnN1bWVzIHRoaXMgZnVuY3Rpb25hbGl0eS4KLQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFNldCBgYF9fbG9hZGVyX19gYCBpZiBzZXQgdG8gYGBOb25lYGAsIGFzIGlmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QKKyAgICAgIGV4aXN0LgogCiAuLiBkZWNvcmF0b3I6OiBzZXRfcGFja2FnZQogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AKLSAgICBhdHRyaWJ1dGUgb24gdGhlIG1vZHVsZSByZXR1cm5lZCBieSB0aGUgbG9hZGVyLiBJZiA6YXR0cjpgX19wYWNrYWdlX19gIGlzCi0gICAgc2V0IGFuZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCi0gICAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgcmV0dXJuZWQgYnkgdGhlIGxvYWRlciBpcyB3aGF0IGhhcyB0aGUgYXR0cmlidXRlCi0gICAgc2V0IG9uIGFuZCBub3QgdGhlIG1vZHVsZSBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLgorICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYXR0cmlidXRlIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIElmIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgIGlzIHNldCBhbmQgaGFzIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5vbmVgYCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkLgogCi0gICAgUmVsaWFuY2Ugb24gdGhpcyBkZWNvcmF0b3IgaXMgZGlzY291cmFnZWQgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byBzZXQKLSAgICA6YXR0cjpgX19wYWNrYWdlX19gIGJlZm9yZSBpbXBvcnRpbmcuIEJ5Ci0gICAgc2V0dGluZyBpdCBiZWZvcmVoYW5kIHRoZSBjb2RlIGZvciB0aGUgbW9kdWxlIGlzIGV4ZWN1dGVkIHdpdGggdGhlCi0gICAgYXR0cmlidXRlIHNldCBhbmQgdGh1cyBjYW4gYmUgdXNlZCBieSBnbG9iYWwgbGV2ZWwgY29kZSBkdXJpbmcKLSAgICBpbml0aWFsaXphdGlvbi4KKy4uIGZ1bmN0aW9uOjogc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBpc19wYWNrYWdlPU5vbmUpCiAKLSAgIC4uIG5vdGU6OgorICAgQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIDpjbGFzczpgTW9kdWxlU3BlY2AgaW5zdGFuY2UgYmFzZWQKKyAgIG9uIGEgbG9hZGVyLiAgVGhlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZXkgZG8gZm9yCisgICBNb2R1bGVTcGVjLiAgVGhlIGZ1bmN0aW9uIHVzZXMgYXZhaWxhYmxlIDp0ZXJtOmBsb2FkZXJgIEFQSXMsIHN1Y2ggYXMKKyAgIDptZXRoOmBJbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgLCB0byBmaWxsIGluIGFueSBtaXNzaW5nCisgICBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlYy4KIAotICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCA6ZnVuYzpgbW9kdWxlX2Zvcl9sb2FkZXJgIGJlIHVzZWQgb3ZlciB0aGlzCi0gICAgICBkZWNvcmF0b3IgYXMgaXQgc3Vic3VtZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9jYXRpb24sICosIGxvYWRlcj1Ob25lLCBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lKQorCisgICBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgOmNsYXNzOmBNb2R1bGVTcGVjYCBpbnN0YW5jZSBiYXNlZAorICAgb24gdGhlIHBhdGggdG8gYSBmaWxlLiAgTWlzc2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGZpbGxlZCBpbiBvbiB0aGUKKyAgIHNwZWMgYnkgbWFraW5nIHVzZSBvZiBsb2FkZXIgQVBJcyBhbmQgYnkgdGhlIGltcGxpY2F0aW9uIHRoYXQgdGhlCisgICBtb2R1bGUgd2lsbCBiZSBmaWxlLWJhc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luZGV4LnJzdCBiL0RvYy9saWJyYXJ5L2luZGV4LnJzdAppbmRleCAxYjI1YzZlLi44MTI4OWE1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbmRleC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5kZXgucnN0CkBAIC02NSw2ICs2NSw3IEBACiAgICB0ay5yc3QKICAgIGRldmVsb3BtZW50LnJzdAogICAgZGVidWcucnN0CisgICBkaXN0cmlidXRpb24ucnN0CiAgICBweXRob24ucnN0CiAgICBjdXN0b21pbnRlcnAucnN0CiAgICBtb2R1bGVzLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAppbmRleCA2MjVlYTZlLi40MWM2MWI3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdApAQCAtMTczLDggKzE3Myw5IEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICA6ZnVuYzpgZ2V0bWVtYmVyc2AgZG9lcyBub3QgcmV0dXJuIG1ldGFjbGFzcyBhdHRyaWJ1dGVzIHdoZW4gdGhlIGFyZ3VtZW50Ci0gICAgICBpcyBhIGNsYXNzICh0aGlzIGJlaGF2aW9yIGlzIGluaGVyaXRlZCBmcm9tIHRoZSA6ZnVuYzpgZGlyYCBmdW5jdGlvbikuCisgICAgICA6ZnVuYzpgZ2V0bWVtYmVyc2Agd2lsbCBvbmx5IHJldHVybiBjbGFzcyBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlCisgICAgICBtZXRhY2xhc3Mgd2hlbiB0aGUgYXJndW1lbnQgaXMgYSBjbGFzcyBhbmQgdGhvc2UgYXR0cmlidXRlcyBoYXZlIGJlZW4KKyAgICAgIGxpc3RlZCBpbiB0aGUgbWV0YWNsYXNzJyBjdXN0b20gOm1ldGg6YF9fZGlyX19gLgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0bW9kdWxlaW5mbyhwYXRoKQpAQCAtNzk3LDYgKzc5OCwyMyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gZnVuY3Rpb246OiB1bndyYXAoZnVuYywgKiwgc3RvcD1Ob25lKQorCisgICBHZXQgdGhlIG9iamVjdCB3cmFwcGVkIGJ5ICpmdW5jKi4gSXQgZm9sbG93cyB0aGUgY2hhaW4gb2YgOmF0dHI6YF9fd3JhcHBlZF9fYAorICAgYXR0cmlidXRlcyByZXR1cm5pbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBjaGFpbi4KKworICAgKnN0b3AqIGlzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGFjY2VwdGluZyBhbiBvYmplY3QgaW4gdGhlIHdyYXBwZXIgY2hhaW4KKyAgIGFzIGl0cyBzb2xlIGFyZ3VtZW50IHRoYXQgYWxsb3dzIHRoZSB1bndyYXBwaW5nIHRvIGJlIHRlcm1pbmF0ZWQgZWFybHkgaWYKKyAgIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgdHJ1ZSB2YWx1ZS4gSWYgdGhlIGNhbGxiYWNrIG5ldmVyIHJldHVybnMgYSB0cnVlCisgICB2YWx1ZSwgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBjaGFpbiBpcyByZXR1cm5lZCBhcyB1c3VhbC4gRm9yIGV4YW1wbGUsCisgICA6ZnVuYzpgc2lnbmF0dXJlYCB1c2VzIHRoaXMgdG8gc3RvcCB1bndyYXBwaW5nIGlmIGFueSBvYmplY3QgaW4gdGhlCisgICBjaGFpbiBoYXMgYSBgYF9fc2lnbmF0dXJlX19gYCBhdHRyaWJ1dGUgZGVmaW5lZC4KKworICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIGEgY3ljbGUgaXMgZW5jb3VudGVyZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIF9pbnNwZWN0LXN0YWNrOgogCiBUaGUgaW50ZXJwcmV0ZXIgc3RhY2sKQEAgLTgyOSw2ICs4NDcsMTAgQEAKICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICBkZWwgZnJhbWUKIAorICAgSWYgeW91IHdhbnQgdG8ga2VlcCB0aGUgZnJhbWUgYXJvdW5kIChmb3IgZXhhbXBsZSB0byBwcmludCBhIHRyYWNlYmFjaworICAgbGF0ZXIpLCB5b3UgY2FuIGFsc28gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSB1c2luZyB0aGUKKyAgIDptZXRoOmBmcmFtZS5jbGVhcmAgbWV0aG9kLgorCiBUaGUgb3B0aW9uYWwgKmNvbnRleHQqIGFyZ3VtZW50IHN1cHBvcnRlZCBieSBtb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpZXMKIHRoZSBudW1iZXIgb2YgbGluZXMgb2YgY29udGV4dCB0byByZXR1cm4sIHdoaWNoIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGN1cnJlbnQKIGxpbmUuCkBAIC05ODUsMyArMTAwNywyMiBAQAogICAgICAgcmV0dXJuIGFuIGVtcHR5IGRpY3Rpb25hcnkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisKKy4uIF9pbnNwZWN0LW1vZHVsZS1jbGk6CisKK0NvbW1hbmQgTGluZSBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIGEgYmFzaWMgaW50cm9zcGVjdGlvbiBjYXBhYmlsaXR5Citmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKy4uIHByb2dyYW06OiBpbnNwZWN0CisKK0J5IGRlZmF1bHQsIGFjY2VwdHMgdGhlIG5hbWUgb2YgYSBtb2R1bGUgYW5kIHByaW50cyB0aGUgc291cmNlIG9mIHRoYXQKK21vZHVsZS4gQSBjbGFzcyBvciBmdW5jdGlvbiB3aXRoaW4gdGhlIG1vZHVsZSBjYW4gYmUgcHJpbnRlZCBpbnN0ZWFkIGJ5CithcHBlbmRlZCBhIGNvbG9uIGFuZCB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3QuCisKKy4uIGNtZG9wdGlvbjo6IC0tZGV0YWlscworCisgICBQcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgc291cmNlIGNvZGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lvLnJzdCBiL0RvYy9saWJyYXJ5L2lvLnJzdAppbmRleCA3MzI4OGY4Li43OTI1ZTMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pby5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW8ucnN0CkBAIC0yODMsMTAgKzI4MywxMCBAQAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHJlYWQgZnJvbS4gIElmIEZhbHNlLCA6bWV0aDpgcmVhZGAKICAgICAgIHdpbGwgcmFpc2UgOmV4YzpgT1NFcnJvcmAuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKGxpbWl0PS0xKQorICAgLi4gbWV0aG9kOjogcmVhZGxpbmUoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIG9uZSBsaW5lIGZyb20gdGhlIHN0cmVhbS4gIElmICpsaW1pdCogaXMgc3BlY2lmaWVkLCBhdAotICAgICAgbW9zdCAqbGltaXQqIGJ5dGVzIHdpbGwgYmUgcmVhZC4KKyAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqc2l6ZSogaXMgc3BlY2lmaWVkLCBhdAorICAgICAgbW9zdCAqc2l6ZSogYnl0ZXMgd2lsbCBiZSByZWFkLgogCiAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBgYGInXG4nYGAgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHQgZmlsZXMsCiAgICAgICB0aGUgKm5ld2xpbmVzKiBhcmd1bWVudCB0byA6ZnVuYzpgb3BlbmAgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCkBAIC0zNjYsMTQgKzM2NiwxNCBAQAogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAsCiAgICA6Y2xhc3M6YFJhd0lPQmFzZWAgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0gICAuLiBtZXRob2Q6OiByZWFkKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgdXAgdG8gKm4qIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZW0uICBBcyBhIGNvbnZlbmllbmNlLAotICAgICAgaWYgKm4qIGlzIHVuc3BlY2lmaWVkIG9yIC0xLCA6bWV0aDpgcmVhZGFsbGAgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlLAotICAgICAgb25seSBvbmUgc3lzdGVtIGNhbGwgaXMgZXZlciBtYWRlLiAgRmV3ZXIgdGhhbiAqbiogYnl0ZXMgbWF5IGJlCi0gICAgICByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYWxsIHJldHVybnMgZmV3ZXIgdGhhbiAqbiogYnl0ZXMuCisgICAgICBSZWFkIHVwIHRvICpzaXplKiBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGVtLiAgQXMgYSBjb252ZW5pZW5jZSwKKyAgICAgIGlmICpzaXplKiBpcyB1bnNwZWNpZmllZCBvciAtMSwgOm1ldGg6YHJlYWRhbGxgIGlzIGNhbGxlZC4gIE90aGVyd2lzZSwKKyAgICAgIG9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEZld2VyIHRoYW4gKnNpemUqIGJ5dGVzIG1heSBiZQorICAgICAgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FsbCByZXR1cm5zIGZld2VyIHRoYW4gKnNpemUqIGJ5dGVzLgogCi0gICAgICBJZiAwIGJ5dGVzIGFyZSByZXR1cm5lZCwgYW5kICpuKiB3YXMgbm90IDAsIHRoaXMgaW5kaWNhdGVzIGVuZCBvZiBmaWxlLgorICAgICAgSWYgMCBieXRlcyBhcmUgcmV0dXJuZWQsIGFuZCAqc2l6ZSogd2FzIG5vdCAwLCB0aGlzIGluZGljYXRlcyBlbmQgb2YgZmlsZS4KICAgICAgIElmIHRoZSBvYmplY3QgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUsCiAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIApAQCAtNDQyLDEwICs0NDIsMTAgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcy4gIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBgYE5vbmVgYCwgb3IKLSAgICAgIG5lZ2F0aXZlLCBkYXRhIGlzIHJlYWQgYW5kIHJldHVybmVkIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgQW4gZW1wdHkKKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMuICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgYGBOb25lYGAsCisgICAgICBvciBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIEFuIGVtcHR5CiAgICAgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IGF0IEVPRi4KIAogICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBhbmQgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBub3QKQEAgLTQ1Nyw5ICs0NTcsOSBAQAogICAgICAgQSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluCiAgICAgICBub24gYmxvY2tpbmctbW9kZSwgYW5kIGhhcyBubyBkYXRhIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcKICAgICAgIHJhdyBzdHJlYW0ncyA6bWV0aDpgflJhd0lPQmFzZS5yZWFkYCBtZXRob2QuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91CiAgICAgICBhcmUgaW1wbGVtZW50aW5nIHlvdXIgb3duIGJ1ZmZlcmluZyBvbiB0b3Agb2YgYSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYAogICAgICAgb2JqZWN0LgpAQCAtNTIyLDYgKzUyMiw4IEBACiAgICA6bW9kOmBvcy5vcGVuYCBhcyAqb3BlbmVyKiByZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nCiAgICBgYE5vbmVgYCkuCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIGZpbGUgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICBTZWUgdGhlIDpmdW5jOmBvcGVuYCBidWlsdC1pbiBmdW5jdGlvbiBmb3IgZXhhbXBsZXMgb24gdXNpbmcgdGhlICpvcGVuZXIqCiAgICBwYXJhbWV0ZXIuCiAKQEAgLTUyOSw2ICs1MzEsOSBAQAogICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAgICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmaWxlIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGZyb20gOmNsYXNzOmBJT0Jhc2VgIGFuZAogICAgOmNsYXNzOmBSYXdJT0Jhc2VgLCA6Y2xhc3M6YEZpbGVJT2AgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkYXRhCiAgICBhdHRyaWJ1dGVzOgpAQCAtNjAxLDIxICs2MDYsMjEgQEAKICAgIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZXRob2RzIGluIGFkZGl0aW9uIHRvCiAgICB0aG9zZSBmcm9tIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGFuZCA6Y2xhc3M6YElPQmFzZWA6CiAKLSAgIC4uIG1ldGhvZDo6IHBlZWsoW25dKQorICAgLi4gbWV0aG9kOjogcGVlayhbc2l6ZV0pCiAKICAgICAgIFJldHVybiBieXRlcyBmcm9tIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLiAgQXQgbW9zdCBvbmUKICAgICAgIHNpbmdsZSByZWFkIG9uIHRoZSByYXcgc3RyZWFtIGlzIGRvbmUgdG8gc2F0aXNmeSB0aGUgY2FsbC4gVGhlIG51bWJlciBvZgogICAgICAgYnl0ZXMgcmV0dXJuZWQgbWF5IGJlIGxlc3Mgb3IgbW9yZSB0aGFuIHJlcXVlc3RlZC4KIAotICAgLi4gbWV0aG9kOjogcmVhZChbbl0pCisgICAuLiBtZXRob2Q6OiByZWFkKFtzaXplXSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuICpuKiBieXRlcywgb3IgaWYgKm4qIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwgRU9GCi0gICAgICBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgorICAgICAgUmVhZCBhbmQgcmV0dXJuICpzaXplKiBieXRlcywgb3IgaWYgKnNpemUqIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwKKyAgICAgIEVPRiBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uICBJZgotICAgICAgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIG9ubHkgYnVmZmVyZWQgYnl0ZXMgYXJlIHJldHVybmVkLgorICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uCisgICAgICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgb25seSBidWZmZXJlZCBieXRlcyBhcmUgcmV0dXJuZWQuCiAgICAgICBPdGhlcndpc2UsIG9uZSByYXcgc3RyZWFtIHJlYWQgY2FsbCBpcyBtYWRlLgogCiAKQEAgLTczNCwxNyArNzM5LDE3IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCi0gICAuLiBtZXRob2Q6OiByZWFkKG4pCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemUpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpuKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZQotICAgICAgOmNsYXNzOmBzdHJgLiAgSWYgKm4qIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB1bnRpbCBFT0YuCisgICAgICBSZWFkIGFuZCByZXR1cm4gYXQgbW9zdCAqc2l6ZSogY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJlYW0gYXMgYSBzaW5nbGUKKyAgICAgIDpjbGFzczpgc3RyYC4gIElmICpzaXplKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdW50aWwgRU9GLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKICAgICAgIFJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YgYW5kIHJldHVybiBhIHNpbmdsZSBgYHN0cmBgLiAgSWYgdGhlIHN0cmVhbSBpcwogICAgICAgYWxyZWFkeSBhdCBFT0YsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KIAotICAgICAgSWYgKmxpbWl0KiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKmxpbWl0KiBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVhZC4KKyAgICAgIElmICpzaXplKiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKnNpemUqIGNoYXJhY3RlcnMgd2lsbCBiZSByZWFkLgogCiAgICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldCwgd2hlbmNlPVNFRUtfU0VUKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0IGIvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdAppbmRleCA3NjlhZjcyLi44MjZlNGFhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKQEAgLTE2MSw3ICsxNjEsMTYgQEAKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3ByaXZhdGUKIAogICAgICAgYGBUcnVlYGAgaWYgdGhlIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLiAgU2VlCi0gICAgICA6UkZDOmAxOTE4YCAoZm9yIElQdjQpIG9yIDpSRkM6YDQxOTNgIChmb3IgSVB2NikuCisgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSAoZm9yIElQdjQpIG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5CisgICAgICAoZm9yIElQdjYpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBpc19nbG9iYWwKKworICAgICAgYGBUcnVlYGAgaWYgdGhlIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuICBTZWUKKyAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5IChmb3IgSVB2NCkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkKKyAgICAgIChmb3IgSVB2NikuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAgICAuLiBhdHRyaWJ1dGU6OiBpc191bnNwZWNpZmllZAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pcGMucnN0IGIvRG9jL2xpYnJhcnkvaXBjLnJzdAppbmRleCA5MWVjNjkzLi4yNDQwYmQ0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pcGMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lwYy5yc3QKQEAgLTE4LDYgKzE4LDkgQEAKIAogICAgc29ja2V0LnJzdAogICAgc3NsLnJzdAorICAgc2VsZWN0LnJzdAorICAgc2VsZWN0b3JzLnJzdAorICAgYXN5bmNpby5yc3QKICAgIGFzeW5jb3JlLnJzdAogICAgYXN5bmNoYXQucnN0CiAgICBzaWduYWwucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9qc29uLnJzdCBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CmluZGV4IGY2NTIwMzkuLjVkOTdlZTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2pzb24ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CkBAIC00Miw4ICs0Miw3IEBACiBQcmV0dHkgcHJpbnRpbmc6OgogCiAgICAgPj4+IGltcG9ydCBqc29uCi0gICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsCi0gICAgLi4uICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpKQorICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkpCiAgICAgewogICAgICAgICAiNCI6IDUsCiAgICAgICAgICI2IjogNwpAQCAtMTU4LDE1ICsxNTcsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6CisgICBJZiBzcGVjaWZpZWQsICpzZXBhcmF0b3JzKiBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCi0gICAgICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZQotICAgICAgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuICppbmRlbnQqIGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgotCi0gICBJZiAqc2VwYXJhdG9ycyogaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlLCB0aGVuIGl0Ci0gICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuICBgYCgnLCcsCi0gICAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVzZSBgYCgnLCcsICc6ICcpYGAgYXMgZGVmYXVsdCBpZiAqaW5kZW50KiBpcyBub3QgYGBOb25lYGAuCiAKICAgICpkZWZhdWx0KG9iaikqIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24gb2YKICAgICpvYmoqIG9yIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuICBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCkBAIC0yNDgsNiArMjQ1LDggQEAKICAgIGt3YXJnOyBvdGhlcndpc2UgOmNsYXNzOmBKU09ORGVjb2RlcmAgaXMgdXNlZC4gIEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKICAgIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuCiAKKyAgIElmIHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBpcyBub3QgYSB2YWxpZCBKU09OIGRvY3VtZW50LCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogLi4gZnVuY3Rpb246OiBsb2FkcyhzLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIG9iamVjdF9wYWlyc19ob29rPU5vbmUsICoqa3cpCiAKQEAgLTI1Nyw2ICsyNTYsOCBAQAogICAgVGhlIG90aGVyIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YGxvYWRgLCBleGNlcHQKICAgICplbmNvZGluZyogd2hpY2ggaXMgaWdub3JlZCBhbmQgZGVwcmVjYXRlZC4KIAorICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogCiBFbmNvZGVycyBhbmQgRGVjb2RlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzU0LDIzICszNTUsMjYgQEAKIAogICAgLi4gX3B5LXRvLWpzb24tdGFibGU6CiAKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgUHl0aG9uICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKLSAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKLSAgIHwgZGljdCAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgbGlzdCwgdHVwbGUgICAgICAgfCBhcnJheSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgc3RyICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgaW50LCBmbG9hdCAgICAgICAgfCBudW1iZXIgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgVHJ1ZSAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgRmFsc2UgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgTm9uZSAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgUHl0aG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKKyAgIHwgZGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgbGlzdCwgdHVwbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcnJheSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgc3RyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgaW50LCBmbG9hdCwgaW50LSAmIGZsb2F0LWRlcml2ZWQgRW51bXMgfCBudW1iZXIgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGludC0gYW5kIGZsb2F0LWRlcml2ZWQgRW51bSBjbGFzc2VzLgogCiAgICBUbyBleHRlbmQgdGhpcyB0byByZWNvZ25pemUgb3RoZXIgb2JqZWN0cywgc3ViY2xhc3MgYW5kIGltcGxlbWVudCBhCiAgICA6bWV0aDpgZGVmYXVsdGAgbWV0aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxlIG9iamVjdApAQCAtNDEwLDE1ICs0MTQsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlCi0gICAgICB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gKmluZGVudCogaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCi0KICAgIElmIHNwZWNpZmllZCwgKnNlcGFyYXRvcnMqIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAotICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgcmVwcmVzZW50YXRpb24sIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXNlIGBgKCcsJywgJzogJylgYCBhcyBkZWZhdWx0IGlmICppbmRlbnQqIGlzIG5vdCBgYE5vbmVgYC4KIAogICAgSWYgc3BlY2lmaWVkLCAqZGVmYXVsdCogaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgY2FuJ3QKICAgIG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlIHZlcnNpb24gb2YgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKaW5kZXggYzAwYjUzMi4uOGMxNWVlMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdApAQCAtODAsMTEgKzgwLDIzIEBACiAKIC4uIGZ1bmN0aW9uOjogZmlsZUNvbmZpZyhmbmFtZSwgZGVmYXVsdHM9Tm9uZSwgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzPVRydWUpCiAKLSAgIFJlYWRzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIDptb2Q6YGNvbmZpZ3BhcnNlcmBcLWZvcm1hdCBmaWxlCi0gICBuYW1lZCAqZm5hbWUqLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuCi0gICBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4gZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkCi0gICBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlciBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzCi0gICBhbmQgbG9hZCB0aGUgY2hvc2VuIGNvbmZpZ3VyYXRpb24pLgorICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUuCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbgorICAgZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyCisgICBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzIGFuZCBsb2FkIHRoZSBjaG9zZW4KKyAgIGNvbmZpZ3VyYXRpb24pLgorCisgICA6cGFyYW0gZm5hbWU6IEEgZmlsZW5hbWUsIG9yIGEgZmlsZS1saWtlIG9iamVjdCwgb3IgYW4gaW5zdGFuY2UgZGVyaXZlZAorICAgICAgICAgICAgICAgICBmcm9tIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgLiBJZiBhCisgICAgICAgICAgICAgICAgIGBgUmF3Q29uZmlnUGFyc2VyYGAtZGVyaXZlZCBpbnN0YW5jZSBpcyBwYXNzZWQsIGl0IGlzIHVzZWQgYXMKKyAgICAgICAgICAgICAgICAgaXMuIE90aGVyd2lzZSwgYSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuQ29uZmlncGFyc2VyYCBpcworICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWFkIGJ5IGl0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQgaW4gYGBmbmFtZWBgLiBJZiB0aGF0IGhhcyBhIDptZXRoOmByZWFkbGluZWAKKyAgICAgICAgICAgICAgICAgbWV0aG9kLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZS1saWtlIG9iamVjdCBhbmQgcmVhZCB1c2luZworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZF9maWxlYDsgb3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZW5hbWUgYW5kIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZGAuCisKIAogICAgOnBhcmFtIGRlZmF1bHRzOiBEZWZhdWx0cyB0byBiZSBwYXNzZWQgdG8gdGhlIENvbmZpZ1BhcnNlciBjYW4gYmUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgYXJndW1lbnQuCkBAIC05OCw4ICsxMTAsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIGFuY2VzdG9ycyBhcmUgZXhwbGljaXRseSBuYW1lZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmB+Y29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcmAgaXMKKyAgICAgIG5vdyBhY2NlcHRlZCBhcyBhIHZhbHVlIGZvciBgYGZuYW1lYGAuIFRoaXMgZmFjaWxpdGF0ZXM6CiAKLS4uIGZ1bmN0aW9uOjogbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JUKQorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUgd2hlcmUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGp1c3QgcGFydAorICAgICAgICBvZiB0aGUgb3ZlcmFsbCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIGZpbGUsIGFuZCB0aGVuIG1vZGlmaWVkIGJ5IHRoZSB1c2luZworICAgICAgICBhcHBsaWNhdGlvbiAoZS5nLiBiYXNlZCBvbiBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBvciBvdGhlciBhc3BlY3RzCisgICAgICAgIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50KSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBgZmlsZUNvbmZpZ2BgLgorCisuLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpCiAKICAgIFN0YXJ0cyB1cCBhIHNvY2tldCBzZXJ2ZXIgb24gdGhlIHNwZWNpZmllZCBwb3J0LCBhbmQgbGlzdGVucyBmb3IgbmV3CiAgICBjb25maWd1cmF0aW9ucy4gSWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQsIHRoZSBtb2R1bGUncyBkZWZhdWx0CkBAIC0xMTAsNiArMTMxLDE3IEBACiAgICA6bWV0aDpgfnRocmVhZGluZy5UaHJlYWQuam9pbmAgd2hlbiBhcHByb3ByaWF0ZS4gVG8gc3RvcCB0aGUgc2VydmVyLAogICAgY2FsbCA6ZnVuYzpgc3RvcExpc3RlbmluZ2AuCiAKKyAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQsIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHNob3VsZAorICAgdmVyaWZ5IHdoZXRoZXIgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgYXJlIHZhbGlkIGFuZCBzaG91bGQgYmUKKyAgIHByb2Nlc3NlZC4gVGhpcyBjb3VsZCBiZSBkb25lIGJ5IGVuY3J5cHRpbmcgYW5kL29yIHNpZ25pbmcgd2hhdCBpcyBzZW50CisgICBhY3Jvc3MgdGhlIHNvY2tldCwgc3VjaCB0aGF0IHRoZSBgYHZlcmlmeWBgIGNhbGxhYmxlIGNhbiBwZXJmb3JtCisgICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGFuZC9vciBkZWNyeXB0aW9uLiBUaGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBpcyBjYWxsZWQKKyAgIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgLSBhbmQgc2hvdWxkCisgICByZXR1cm4gdGhlIGJ5dGVzIHRvIGJlIHByb2Nlc3NlZCwgb3IgTm9uZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBieXRlcyBzaG91bGQKKyAgIGJlIGRpc2NhcmRlZC4gVGhlIHJldHVybmVkIGJ5dGVzIGNvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwYXNzZWQgaW4gYnl0ZXMKKyAgIChlLmcuIHdoZW4gb25seSB2ZXJpZmljYXRpb24gaXMgZG9uZSksIG9yIHRoZXkgY291bGQgYmUgY29tcGxldGVseSBkaWZmZXJlbnQKKyAgIChwZXJoYXBzIGlmIGRlY3J5cHRpb24gd2VyZSBwZXJmb3JtZWQpLgorCiAgICBUbyBzZW5kIGEgY29uZmlndXJhdGlvbiB0byB0aGUgc29ja2V0LCByZWFkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCiAgICBzZW5kIGl0IHRvIHRoZSBzb2NrZXQgYXMgYSBzdHJpbmcgb2YgYnl0ZXMgcHJlY2VkZWQgYnkgYSBmb3VyLWJ5dGUgbGVuZ3RoCiAgICBzdHJpbmcgcGFja2VkIGluIGJpbmFyeSB1c2luZyBgYHN0cnVjdC5wYWNrKCc+TCcsIG4pYGAuCkBAIC0xMjYsNyArMTU4LDEyIEBACiAgICAgICA6ZnVuYzpgbGlzdGVuYCBzb2NrZXQgYW5kIHNlbmRpbmcgYSBjb25maWd1cmF0aW9uIHdoaWNoIHJ1bnMgd2hhdGV2ZXIKICAgICAgIGNvZGUgdGhlIGF0dGFja2VyIHdhbnRzIHRvIGhhdmUgZXhlY3V0ZWQgaW4gdGhlIHZpY3RpbSdzIHByb2Nlc3MuIFRoaXMgaXMKICAgICAgIGVzcGVjaWFsbHkgZWFzeSB0byBkbyBpZiB0aGUgZGVmYXVsdCBwb3J0IGlzIHVzZWQsIGJ1dCBub3QgaGFyZCBldmVuIGlmIGEKLSAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLgorICAgICAgZGlmZmVyZW50IHBvcnQgaXMgdXNlZCkuIFRvIGF2b2lkIHRoZSByaXNrIG9mIHRoaXMgaGFwcGVuaW5nLCB1c2UgdGhlCisgICAgICBgYHZlcmlmeWBgIGFyZ3VtZW50IHRvIDpmdW5jOmBsaXN0ZW5gIHRvIHByZXZlbnQgdW5yZWNvZ25pc2VkCisgICAgICBjb25maWd1cmF0aW9ucyBmcm9tIGJlaW5nIGFwcGxpZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LgorICAgICAgVGhlIGBgdmVyaWZ5YGAgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAuLiBmdW5jdGlvbjo6IHN0b3BMaXN0ZW5pbmcoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CmluZGV4IGQwZGM1NzIuLjA0ZDBmMjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CkBAIC0zMDAsNyArMzAwLDcgQEAKIHRpbWVkIGludGVydmFscy4KIAogCi0uLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpCisuLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UsIGF0VGltZT1Ob25lKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgY2xhc3MuIFRoZQogICAgc3BlY2lmaWVkIGZpbGUgaXMgb3BlbmVkIGFuZCB1c2VkIGFzIHRoZSBzdHJlYW0gZm9yIGxvZ2dpbmcuIE9uIHJvdGF0aW5nIGl0IGFsc28KQEAgLTM1MCw2ICszNTAsMTIgQEAKICAgIElmICpkZWxheSogaXMgdHJ1ZSwgdGhlbiBmaWxlIG9wZW5pbmcgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGZpcnN0IGNhbGwgdG8KICAgIDptZXRoOmBlbWl0YC4KIAorICAgSWYgKmF0VGltZSogaXMgbm90IGBgTm9uZWBgLCBpdCBtdXN0IGJlIGEgYGBkYXRldGltZS50aW1lYGAgaW5zdGFuY2Ugd2hpY2gKKyAgIHNwZWNpZmllcyB0aGUgdGltZSBvZiBkYXkgd2hlbiByb2xsb3ZlciBvY2N1cnMsIGZvciB0aGUgY2FzZXMgd2hlcmUgcm9sbG92ZXIKKyAgIGlzIHNldCB0byBoYXBwZW4gImF0IG1pZG5pZ2h0IiBvciAib24gYSBwYXJ0aWN1bGFyIHdlZWtkYXkiLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmF0VGltZSogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAogICAgLi4gbWV0aG9kOjogZG9Sb2xsb3ZlcigpCiAKQEAgLTM3NSw2ICszODEsOSBAQAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmhvc3QqIGFuZCAqcG9ydCouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYHBvcnRgYCBpcyBzcGVjaWZpZWQgYXMgYGBOb25lYGAsIGEgVW5peCBkb21haW4gc29ja2V0IGlzIGNyZWF0ZWQKKyAgICAgIHVzaW5nIHRoZSB2YWx1ZSBpbiBgYGhvc3RgYCAtIG90aGVyd2lzZSwgYSBUQ1Agc29ja2V0IGlzIGNyZWF0ZWQuCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIApAQCAtNDYwLDYgKzQ2OSw5IEBACiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YERhdGFncmFtSGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICpob3N0KiBhbmQgKnBvcnQqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBwb3J0YGAgaXMgc3BlY2lmaWVkIGFzIGBgTm9uZWBgLCBhIFVuaXggZG9tYWluIHNvY2tldCBpcyBjcmVhdGVkCisgICAgICB1c2luZyB0aGUgdmFsdWUgaW4gYGBob3N0YGAgLSBvdGhlcndpc2UsIGEgVENQIHNvY2tldCBpcyBjcmVhdGVkLgogCiAgICAuLiBtZXRob2Q6OiBlbWl0KCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbHptYS5yc3QgYi9Eb2MvbGlicmFyeS9sem1hLnJzdAppbmRleCA1ZmQ1MDM5Li5iMjAxMjA2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sem1hLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sem1hLnJzdApAQCAtMzksOCArMzksOCBAQAogICAgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAiciJgYCwgYGAicmIiYGAsIGBgInciYGAsIGBgIndiImBgLAotICAgYGAiYSJgYCBvciBgYCJhYiJgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgInJ0ImBgLCBgYCJ3dCJgYCwgb3IgYGAiYXQiYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgorICAgYGAieCJgYCwgYGAieGIiYGAsIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwKKyAgIGBgInd0ImBgLCBgYCJ4dCJgYCwgb3IgYGAiYXQiYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAicmIiYGAuCiAKICAgIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcsIHRoZSAqZm9ybWF0KiBhbmQgKmZpbHRlcnMqIGFyZ3VtZW50cyBoYXZlCiAgICB0aGUgc2FtZSBtZWFuaW5ncyBhcyBmb3IgOmNsYXNzOmBMWk1BRGVjb21wcmVzc29yYC4gSW4gdGhpcyBjYXNlLCB0aGUgKmNoZWNrKgpAQCAtNTcsNiArNTcsOSBAQAogICAgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCiAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAsIGBgInhiImBgIGFuZCBgYCJ4dCJgYCBtb2Rlcy4KKwogCiAuLiBjbGFzczo6IExaTUFGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9InIiLCBcKiwgZm9ybWF0PU5vbmUsIGNoZWNrPS0xLCBwcmVzZXQ9Tm9uZSwgZmlsdGVycz1Ob25lKQogCkBAIC02OSw4ICs3Miw5IEBACiAgICBmaWxlIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCBpcyBjbG9zZWQuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgYCJyImBgIGZvciByZWFkaW5nIChkZWZhdWx0KSwgYGAidyJgYCBmb3IKLSAgIG92ZXJ3cml0aW5nLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMKLSAgIGBgInJiImBgLCBgYCJ3YiJgYCwgYW5kIGBgImFiImBgIHJlc3BlY3RpdmVseS4KKyAgIG92ZXJ3cml0aW5nLCBgYCJ4ImBgIGZvciBleGNsdXNpdmUgY3JlYXRpb24sIG9yIGBgImEiYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UKKyAgIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgYGAicmIiYGAsIGBgIndiImBgLCBgYCJ4YiJgYCBhbmQgYGAiYWIiYGAKKyAgIHJlc3BlY3RpdmVseS4KIAogICAgSWYgKmZpbGVuYW1lKiBpcyBhIGZpbGUgb2JqZWN0IChyYXRoZXIgdGhhbiBhbiBhY3R1YWwgZmlsZSBuYW1lKSwgYSBtb2RlIG9mCiAgICBgYCJ3ImBgIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlLCBhbmQgaXMgaW5zdGVhZCBlcXVpdmFsZW50IHRvIGBgImEiYGAuCkBAIC05OCw2ICsxMDIsOSBAQAogICAgICAgYnl0ZSBvZiBkYXRhIHdpbGwgYmUgcmV0dXJuZWQsIHVubGVzcyBFT0YgaGFzIGJlZW4gcmVhY2hlZC4gVGhlIGV4YWN0CiAgICAgICBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQgaXMgdW5zcGVjaWZpZWQgKHRoZSAqc2l6ZSogYXJndW1lbnQgaXMgaWdub3JlZCkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAieCJgYCBhbmQgYGAieGIiYGAgbW9kZXMuCisKIAogQ29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdCBiL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CmluZGV4IDNiOWUzZDIuLjEyNGViNjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CkBAIC00MCwxMCArNDAsMTEgQEAKIHBvaW50IG51bWJlcnMsIGNvbXBsZXggbnVtYmVycywgc3RyaW5ncywgYnl0ZXMsIGJ5dGVhcnJheXMsIHR1cGxlcywgbGlzdHMsIHNldHMsCiBmcm96ZW5zZXRzLCBkaWN0aW9uYXJpZXMsIGFuZCBjb2RlIG9iamVjdHMsIHdoZXJlIGl0IHNob3VsZCBiZSB1bmRlcnN0b29kIHRoYXQKIHR1cGxlcywgbGlzdHMsIHNldHMsIGZyb3plbnNldHMgYW5kIGRpY3Rpb25hcmllcyBhcmUgb25seSBzdXBwb3J0ZWQgYXMgbG9uZyBhcwotdGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQ7IGFuZCByZWN1cnNpdmUgbGlzdHMsIHNldHMKLWFuZCBkaWN0aW9uYXJpZXMgc2hvdWxkIG5vdCBiZSB3cml0dGVuICh0aGV5IHdpbGwgY2F1c2UgaW5maW5pdGUgbG9vcHMpLiAgVGhlCit0aGUgdmFsdWVzIGNvbnRhaW5lZCB0aGVyZWluIGFyZSB0aGVtc2VsdmVzIHN1cHBvcnRlZC4KIHNpbmdsZXRvbnMgOmNvbnN0OmBOb25lYCwgOmNvbnN0OmBFbGxpcHNpc2AgYW5kIDpleGM6YFN0b3BJdGVyYXRpb25gIGNhbiBhbHNvIGJlCiBtYXJzaGFsbGVkIGFuZCB1bm1hcnNoYWxsZWQuCitGb3IgZm9ybWF0ICp2ZXJzaW9uKiBsb3dlciB0aGFuIDMsIHJlY3Vyc2l2ZSBsaXN0cywgc2V0cyBhbmQgZGljdGlvbmFyaWVzIGNhbm5vdAorYmUgd3JpdHRlbiAoc2VlIGJlbG93KS4KIAogVGhlcmUgYXJlIGZ1bmN0aW9ucyB0aGF0IHJlYWQvd3JpdGUgZmlsZXMgYXMgd2VsbCBhcyBmdW5jdGlvbnMgb3BlcmF0aW5nIG9uCiBzdHJpbmdzLgpAQCAtMTAzLDcgKzEwNCw5IEBACiAKICAgIEluZGljYXRlcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZHVsZSB1c2VzLiBWZXJzaW9uIDAgaXMgdGhlIGhpc3RvcmljYWwKICAgIGZvcm1hdCwgdmVyc2lvbiAxIHNoYXJlcyBpbnRlcm5lZCBzdHJpbmdzIGFuZCB2ZXJzaW9uIDIgdXNlcyBhIGJpbmFyeSBmb3JtYXQKLSAgIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIDIuCisgICBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KKyAgIFZlcnNpb24gMyBhZGRzIHN1cHBvcnQgZm9yIG9iamVjdCBpbnN0YW5jaW5nIGFuZCByZWN1cnNpb24uCisgICBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIDMuCiAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0IGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAppbmRleCAzZDFjMjA5Li4yYzQ0ZGM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKQEAgLTkzLDExICs5MywxMDggQEAKICAgICAgICAgcC5zdGFydCgpCiAgICAgICAgIHAuam9pbigpCiAKLUZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkgKG9uIFdpbmRvd3MpIHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBwYXJ0IGlzCitGb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBwYXJ0IGlzCiBuZWNlc3NhcnksIHNlZSA6cmVmOmBtdWx0aXByb2Nlc3NpbmctcHJvZ3JhbW1pbmdgLgogCiAKIAorQ29udGV4dHMgYW5kIHN0YXJ0IG1ldGhvZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0RlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agc3VwcG9ydHMgdGhyZWUgd2F5cwordG8gc3RhcnQgYSBwcm9jZXNzLiAgVGhlc2UgKnN0YXJ0IG1ldGhvZHMqIGFyZQorCisgICpzcGF3bioKKyAgICBUaGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgZnJlc2ggcHl0aG9uIGludGVycHJldGVyIHByb2Nlc3MuICBUaGUKKyAgICBjaGlsZCBwcm9jZXNzIHdpbGwgb25seSBpbmhlcml0IHRob3NlIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gcnVuCisgICAgdGhlIHByb2Nlc3Mgb2JqZWN0cyA6bWV0aDpgflByb2Nlc3MucnVuYCBtZXRob2QuICBJbiBwYXJ0aWN1bGFyLAorICAgIHVubmVjZXNzYXJ5IGZpbGUgZGVzY3JpcHRvcnMgYW5kIGhhbmRsZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MKKyAgICB3aWxsIG5vdCBiZSBpbmhlcml0ZWQuICBTdGFydGluZyBhIHByb2Nlc3MgdXNpbmcgdGhpcyBtZXRob2QgaXMKKyAgICByYXRoZXIgc2xvdyBjb21wYXJlZCB0byB1c2luZyAqZm9yayogb3IgKmZvcmtzZXJ2ZXIqLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuICBUaGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisgICpmb3JrKgorICAgIFRoZSBwYXJlbnQgcHJvY2VzcyB1c2VzIDpmdW5jOmBvcy5mb3JrYCB0byBmb3JrIHRoZSBQeXRob24KKyAgICBpbnRlcnByZXRlci4gIFRoZSBjaGlsZCBwcm9jZXNzLCB3aGVuIGl0IGJlZ2lucywgaXMgZWZmZWN0aXZlbHkKKyAgICBpZGVudGljYWwgdG8gdGhlIHBhcmVudCBwcm9jZXNzLiAgQWxsIHJlc291cmNlcyBvZiB0aGUgcGFyZW50IGFyZQorICAgIGluaGVyaXRlZCBieSB0aGUgY2hpbGQgcHJvY2Vzcy4gIE5vdGUgdGhhdCBzYWZlbHkgZm9ya2luZyBhCisgICAgbXVsdGl0aHJlYWRlZCBwcm9jZXNzIGlzIHByb2JsZW1hdGljLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggb25seS4gIFRoZSBkZWZhdWx0IG9uIFVuaXguCisKKyAgKmZvcmtzZXJ2ZXIqCisgICAgV2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgYW5kIHNlbGVjdHMgdGhlICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2QsCisgICAgYSBzZXJ2ZXIgcHJvY2VzcyBpcyBzdGFydGVkLiAgRnJvbSB0aGVuIG9uLCB3aGVuZXZlciBhIG5ldyBwcm9jZXNzCisgICAgaXMgbmVlZGVkLCB0aGUgcGFyZW50IHByb2Nlc3MgY29ubmVjdHMgdG8gdGhlIHNlcnZlciBhbmQgcmVxdWVzdHMKKyAgICB0aGF0IGl0IGZvcmsgYSBuZXcgcHJvY2Vzcy4gIFRoZSBmb3JrIHNlcnZlciBwcm9jZXNzIGlzIHNpbmdsZQorICAgIHRocmVhZGVkIHNvIGl0IGlzIHNhZmUgZm9yIGl0IHRvIHVzZSA6ZnVuYzpgb3MuZm9ya2AuICBObworICAgIHVubmVjZXNzYXJ5IHJlc291cmNlcyBhcmUgaW5oZXJpdGVkLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzCisgICAgb3ZlciBVbml4IHBpcGVzLgorCitCZWZvcmUgUHl0aG9uIDMuNCAqZm9yayogd2FzIHRoZSBvbmx5IG9wdGlvbiBhdmFpbGFibGUgb24gVW5peC4gIEFsc28sCitwcmlvciB0byBQeXRob24gMy40LCBjaGlsZCBwcm9jZXNzZXMgd291bGQgaW5oZXJpdCBhbGwgdGhlIHBhcmVudHMKK2luaGVyaXRhYmxlIGhhbmRsZXMgb24gV2luZG93cy4KKworT24gVW5peCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcyB3aWxsIGFsc28KK3N0YXJ0IGEgKnNlbWFwaG9yZSB0cmFja2VyKiBwcm9jZXNzIHdoaWNoIHRyYWNrcyB0aGUgdW5saW5rZWQgbmFtZWQKK3NlbWFwaG9yZXMgY3JlYXRlZCBieSBwcm9jZXNzZXMgb2YgdGhlIHByb2dyYW0uICBXaGVuIGFsbCBwcm9jZXNzZXMKK2hhdmUgZXhpdGVkIHRoZSBzZW1hcGhvcmUgdHJhY2tlciB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3Jlcy4KK1VzdWFsbHkgdGhlcmUgc2hvdWxkIGJlIG5vbmUsIGJ1dCBpZiBhIHByb2Nlc3Mgd2FzIGtpbGxlZCBieSBhIHNpZ25hbAordGhlcmUgbWF5IHNvbWUgImxlYWtlZCIgc2VtYXBob3Jlcy4gIChVbmxpbmtpbmcgdGhlIG5hbWVkIHNlbWFwaG9yZXMKK2lzIGEgc2VyaW91cyBtYXR0ZXIgc2luY2UgdGhlIHN5c3RlbSBhbGxvd3Mgb25seSBhIGxpbWl0ZWQgbnVtYmVyLCBhbmQKK3RoZXkgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSB1bmxpbmtlZCB1bnRpbCB0aGUgbmV4dCByZWJvb3QuKQorCitUbyBzZWxlY3QgdGhlIGEgc3RhcnQgbWV0aG9kIHlvdSB1c2UgdGhlIDpmdW5jOmBzZXRfc3RhcnRfbWV0aG9kYCBpbgordGhlIGBgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJ2BgIGNsYXVzZSBvZiB0aGUgbWFpbiBtb2R1bGUuICBGb3IKK2V4YW1wbGU6OgorCisgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtcAorCisgICAgICAgZGVmIGZvbyhxKToKKyAgICAgICAgICAgcS5wdXQoJ2hlbGxvJykKKworICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgICAgIG1wLnNldF9zdGFydF9tZXRob2QoJ3NwYXduJykKKyAgICAgICAgICAgcSA9IG1wLlF1ZXVlKCkKKyAgICAgICAgICAgcCA9IG1wLlByb2Nlc3ModGFyZ2V0PWZvbywgYXJncz0ocSwpKQorICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgcHJpbnQocS5nZXQoKSkKKyAgICAgICAgICAgcC5qb2luKCkKKworOmZ1bmM6YHNldF9zdGFydF9tZXRob2RgIHNob3VsZCBub3QgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSBpbiB0aGUKK3Byb2dyYW0uCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIDpmdW5jOmBnZXRfY29udGV4dGAgdG8gb2J0YWluIGEgY29udGV4dAorb2JqZWN0LiAgQ29udGV4dCBvYmplY3RzIGhhdmUgdGhlIHNhbWUgQVBJIGFzIHRoZSBtdWx0aXByb2Nlc3NpbmcKK21vZHVsZSwgYW5kIGFsbG93IG9uZSB0byB1c2UgbXVsdGlwbGUgc3RhcnQgbWV0aG9kcyBpbiB0aGUgc2FtZQorcHJvZ3JhbS4gOjoKKworICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAKKworICAgICAgIGRlZiBmb28ocSk6CisgICAgICAgICAgIHEucHV0KCdoZWxsbycpCisKKyAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICBjdHggPSBtcC5nZXRfY29udGV4dCgnc3Bhd24nKQorICAgICAgICAgICBxID0gY3R4LlF1ZXVlKCkKKyAgICAgICAgICAgcCA9IGN0eC5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgIHByaW50KHEuZ2V0KCkpCisgICAgICAgICAgIHAuam9pbigpCisKK05vdGUgdGhhdCBvYmplY3RzIHJlbGF0ZWQgdG8gb25lIGNvbnRleHQgbWF5IG5vdCBiZSBjb21wYXRpYmxlIHdpdGgKK3Byb2Nlc3NlcyBmb3IgYSBkaWZmZXJlbnQgY29udGV4dC4gIEluIHBhcnRpY3VsYXIsIGxvY2tzIGNyZWF0ZWQgdXNpbmcKK3RoZSAqZm9yayogY29udGV4dCBjYW5ub3QgYmUgcGFzc2VkIHRvIGEgcHJvY2Vzc2VzIHN0YXJ0ZWQgdXNpbmcgdGhlCisqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzLgorCitBIGxpYnJhcnkgd2hpY2ggd2FudHMgdG8gdXNlIGEgcGFydGljdWxhciBzdGFydCBtZXRob2Qgc2hvdWxkIHByb2JhYmx5Cit1c2UgOmZ1bmM6YGdldF9jb250ZXh0YCB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIHRoZSBjaG9pY2Ugb2YgdGhlCitsaWJyYXJ5IHVzZXIuCisKKwogRXhjaGFuZ2luZyBvYmplY3RzIGJldHdlZW4gcHJvY2Vzc2VzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMjc0LDE1ICszNzEsMzEgQEAKIEZvciBleGFtcGxlOjoKIAogICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wKKyAgIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKIAogICAgZGVmIGYoeCk6CiAgICAgICAgcmV0dXJuIHgqeAogCiAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgIHdpdGggUG9vbChwcm9jZXNzZXM9NCkgYXMgcG9vbDogICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCi0gICAgICAgICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5Ci0gICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQodGltZW91dD0xKSkgICAgICAgIyBwcmludHMgIjEwMCIgdW5sZXNzIHlvdXIgY29tcHV0ZXIgaXMgKnZlcnkqIHNsb3cKLSAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgcmFuZ2UoMTApKSkgICAgICAjIHByaW50cyAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgIyBzdGFydCA0IHdvcmtlciBwcm9jZXNzZXMKKyAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6CisKKyAgICAgICAgICAgIyBwcmludCAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpCisKKyAgICAgICAgICAgIyBwcmludCBzYW1lIG51bWJlcnMgaW4gYXJiaXRyYXJ5IG9yZGVyCisgICAgICAgICAgIGZvciBpIGluIHBvb2wuaW1hcF91bm9yZGVyZWQoZiwgcmFuZ2UoMTApKToKKyAgICAgICAgICAgICAgIHByaW50KGkpCisKKyAgICAgICAgICAgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5CisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkKKyAgICAgICAgICAgcHJpbnQocmVzLmdldCh0aW1lb3V0PTEpKSAgICAgICAgICAgICAjIHByaW50cyAiMTAwIgorCisgICAgICAgICAgICMgbWFrZSB3b3JrZXIgc2xlZXAgZm9yIDEwIHNlY3MKKyAgICAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhzbGVlcCwgMTApCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyByYWlzZXMgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcgorCisgICAgICAgIyBleGl0aW5nIHRoZSAnd2l0aCctYmxvY2sgaGFzIHN0b3BwZWQgdGhlIHBvb2wKIAogTm90ZSB0aGF0IHRoZSBtZXRob2RzIG9mIGEgcG9vbCBzaG91bGQgb25seSBldmVyIGJlIHVzZWQgYnkgdGhlCiBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgaXQuCkBAIC03MzEsNiArODQ0LDkgQEAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbS4gIE1heSByYWlzZQogICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKKyAgIC4uIHNlZWFsc286OgorICAgICAgOmZ1bmM6YG9zLmNwdV9jb3VudGAKKwogLi4gZnVuY3Rpb246OiBjdXJyZW50X3Byb2Nlc3MoKQogCiAgICBSZXR1cm4gdGhlIDpjbGFzczpgUHJvY2Vzc2Agb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4KQEAgLTc2MSw2ICs4NzcsNDMgQEAKICAgIElmIHRoZSBtb2R1bGUgaXMgYmVpbmcgcnVuIG5vcm1hbGx5IGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdGhlbgogICAgOmZ1bmM6YGZyZWV6ZV9zdXBwb3J0YCBoYXMgbm8gZWZmZWN0LgogCisuLiBmdW5jdGlvbjo6IGdldF9hbGxfc3RhcnRfbWV0aG9kcygpCisKKyAgIFJldHVybnMgYSBsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgc3RhcnQgbWV0aG9kcywgdGhlIGZpcnN0IG9mIHdoaWNoCisgICBpcyB0aGUgZGVmYXVsdC4gIFRoZSBwb3NzaWJsZSBzdGFydCBtZXRob2RzIGFyZSBgYCdmb3JrJ2BgLAorICAgYGAnc3Bhd24nYGAgYW5kIGBgJ2ZvcmtzZXJ2ZXInYGAuICBPbiBXaW5kb3dzIG9ubHkgYGAnc3Bhd24nYGAgaXMKKyAgIGF2YWlsYWJsZS4gIE9uIFVuaXggYGAnZm9yaydgYCBhbmQgYGAnc3Bhd24nYGAgYXJlIGFsd2F5cworICAgc3VwcG9ydGVkLCB3aXRoIGBgJ2ZvcmsnYGAgYmVpbmcgdGhlIGRlZmF1bHQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGdldF9jb250ZXh0KG1ldGhvZD1Ob25lKQorCisgICBSZXR1cm4gYSBjb250ZXh0IG9iamVjdCB3aGljaCBoYXMgdGhlIHNhbWUgYXR0cmlidXRlcyBhcyB0aGUKKyAgIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlLgorCisgICBJZiAqbWV0aG9kKiBpcyAqTm9uZSogdGhlbiB0aGUgZGVmYXVsdCBjb250ZXh0IGlzIHJldHVybmVkLgorICAgT3RoZXJ3aXNlICptZXRob2QqIHNob3VsZCBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwKKyAgIGBgJ2ZvcmtzZXJ2ZXInYGAuICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIHNwZWNpZmllZAorICAgc3RhcnQgbWV0aG9kIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGdldF9zdGFydF9tZXRob2QoYWxsb3dfbm9uZT1GYWxzZSkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHN0YXJ0IG1ldGhvZCB1c2VkIGZvciBzdGFydGluZyBwcm9jZXNzZXMuCisKKyAgIElmIHRoZSBzdGFydCBtZXRob2QgaGFzIG5vdCBiZWVuIGZpeGVkIGFuZCAqYWxsb3dfbm9uZSogaXMgZmFsc2UsCisgICB0aGVuIHRoZSBzdGFydCBtZXRob2QgaXMgZml4ZWQgdG8gdGhlIGRlZmF1bHQgYW5kIHRoZSBuYW1lIGlzCisgICByZXR1cm5lZC4gIElmIHRoZSBzdGFydCBtZXRob2QgaGFzIG5vdCBiZWVuIGZpeGVkIGFuZCAqYWxsb3dfbm9uZSoKKyAgIGlzIHRydWUgdGhlbiAqTm9uZSogaXMgcmV0dXJuZWQuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGBgJ2ZvcmsnYGAsIGBgJ3NwYXduJ2BgLCBgYCdmb3Jrc2VydmVyJ2BgCisgICBvciAqTm9uZSouICBgYCdmb3JrJ2BgIGlzIHRoZSBkZWZhdWx0IG9uIFVuaXgsIHdoaWxlIGBgJ3NwYXduJ2BgIGlzCisgICB0aGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZnVuY3Rpb246OiBzZXRfZXhlY3V0YWJsZSgpCiAKICAgIFNldHMgdGhlIHBhdGggb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB0byB1c2Ugd2hlbiBzdGFydGluZyBhIGNoaWxkIHByb2Nlc3MuCkBAIC03NjksOCArOTIyLDIxIEBACiAKICAgICAgIHNldF9leGVjdXRhYmxlKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob253LmV4ZScpKQogCi0gICBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGNoaWxkIHByb2Nlc3Nlcy4gIChXaW5kb3dzIG9ubHkpCisgICBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGNoaWxkIHByb2Nlc3Nlcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIE5vdyBzdXBwb3J0ZWQgb24gVW5peCB3aGVuIHRoZSBgYCdzcGF3bidgYCBzdGFydCBtZXRob2QgaXMgdXNlZC4KKworLi4gZnVuY3Rpb246OiBzZXRfc3RhcnRfbWV0aG9kKG1ldGhvZCkKKworICAgU2V0IHRoZSBtZXRob2Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gc3RhcnQgY2hpbGQgcHJvY2Vzc2VzLgorICAgKm1ldGhvZCogY2FuIGJlIGBgJ2ZvcmsnYGAsIGBgJ3NwYXduJ2BgIG9yIGBgJ2ZvcmtzZXJ2ZXInYGAuCisKKyAgIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlLCBhbmQgaXQgc2hvdWxkIGJlCisgICBwcm90ZWN0ZWQgaW5zaWRlIHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlCisgICBtYWluIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIG5vdGU6OgogCkBAIC0xNjc4LDE0ICsxODQ0LDE0IEBACiBPbmUgY2FuIGNyZWF0ZSBhIHBvb2wgb2YgcHJvY2Vzc2VzIHdoaWNoIHdpbGwgY2Fycnkgb3V0IHRhc2tzIHN1Ym1pdHRlZCB0byBpdAogd2l0aCB0aGUgOmNsYXNzOmBQb29sYCBjbGFzcy4KIAotLi4gY2xhc3M6OiBQb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZF1dXV0pCisuLiBjbGFzczo6IFBvb2woW3Byb2Nlc3Nlc1ssIGluaXRpYWxpemVyWywgaW5pdGFyZ3NbLCBtYXh0YXNrc3BlcmNoaWxkIFssIGNvbnRleHRdXV1dXSkKIAogICAgQSBwcm9jZXNzIHBvb2wgb2JqZWN0IHdoaWNoIGNvbnRyb2xzIGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzIHRvIHdoaWNoIGpvYnMKICAgIGNhbiBiZSBzdWJtaXR0ZWQuICBJdCBzdXBwb3J0cyBhc3luY2hyb25vdXMgcmVzdWx0cyB3aXRoIHRpbWVvdXRzIGFuZAogICAgY2FsbGJhY2tzIGFuZCBoYXMgYSBwYXJhbGxlbCBtYXAgaW1wbGVtZW50YXRpb24uCiAKICAgICpwcm9jZXNzZXMqIGlzIHRoZSBudW1iZXIgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB1c2UuICBJZiAqcHJvY2Vzc2VzKiBpcwotICAgYGBOb25lYGAgdGhlbiB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IDpmdW5jOmBjcHVfY291bnRgIGlzIHVzZWQuICBJZgorICAgYGBOb25lYGAgdGhlbiB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IDpmdW5jOmBvcy5jcHVfY291bnRgIGlzIHVzZWQuICBJZgogICAgKmluaXRpYWxpemVyKiBpcyBub3QgYGBOb25lYGAgdGhlbiBlYWNoIHdvcmtlciBwcm9jZXNzIHdpbGwgY2FsbAogICAgYGBpbml0aWFsaXplcigqaW5pdGFyZ3MpYGAgd2hlbiBpdCBzdGFydHMuCiAKQEAgLTE2OTgsNiArMTg2NCwxMyBAQAogICAgICAgdW51c2VkIHJlc291cmNlcyB0byBiZSBmcmVlZC4gVGhlIGRlZmF1bHQgKm1heHRhc2tzcGVyY2hpbGQqIGlzIE5vbmUsIHdoaWNoCiAgICAgICBtZWFucyB3b3JrZXIgcHJvY2Vzc2VzIHdpbGwgbGl2ZSBhcyBsb25nIGFzIHRoZSBwb29sLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgICpjb250ZXh0KiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb250ZXh0IHVzZWQgZm9yIHN0YXJ0aW5nCisgICAgICB0aGUgd29ya2VyIHByb2Nlc3Nlcy4gIFVzdWFsbHkgYSBwb29sIGlzIGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICBmdW5jdGlvbiA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLlBvb2xgIG9yIHRoZSA6bWV0aDpgUG9vbGAgbWV0aG9kCisgICAgICBvZiBhIGNvbnRleHQgb2JqZWN0LiAgSW4gYm90aCBjYXNlcyAqY29udGV4dCogaXMgc2V0CisgICAgICBhcHByb3ByaWF0ZWx5LgorCiAgICAuLiBub3RlOjoKIAogICAgICAgV29ya2VyIHByb2Nlc3NlcyB3aXRoaW4gYSA6Y2xhc3M6YFBvb2xgIHR5cGljYWxseSBsaXZlIGZvciB0aGUgY29tcGxldGUKQEAgLTIxODksNDMgKzIzNjIsOCBAQAogICAgIFtJTkZPL01haW5Qcm9jZXNzXSBzZW5kaW5nIHNodXRkb3duIG1lc3NhZ2UgdG8gbWFuYWdlcgogICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBleGl0aW5nIHdpdGggZXhpdGNvZGUgMAogCi1JbiBhZGRpdGlvbiB0byBoYXZpbmcgdGhlc2UgdHdvIGxvZ2dpbmcgZnVuY3Rpb25zLCB0aGUgbXVsdGlwcm9jZXNzaW5nIGFsc28KLWV4cG9zZXMgdHdvIGFkZGl0aW9uYWwgbG9nZ2luZyBsZXZlbCBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgIDpjb25zdDpgU1VCV0FSTklOR2AKLWFuZCA6Y29uc3Q6YFNVQkRFQlVHYC4gVGhlIHRhYmxlIGJlbG93IGlsbHVzdHJhdGVzIHdoZXJlIHRoZXNlcyBmaXQgaW4gdGhlCi1ub3JtYWwgbGV2ZWwgaGllcmFyY2h5LgotCi0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotfCBMZXZlbCAgICAgICAgICB8IE51bWVyaWMgdmFsdWUgIHwKLSs9PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT0rCi18IGBgU1VCV0FSTklOR2BgIHwgMjUgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGBTVUJERUJVR2BgICAgfCA1ICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotCiBGb3IgYSBmdWxsIHRhYmxlIG9mIGxvZ2dpbmcgbGV2ZWxzLCBzZWUgdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZS4KIAotVGhlc2UgYWRkaXRpb25hbCBsb2dnaW5nIGxldmVscyBhcmUgdXNlZCBwcmltYXJpbHkgZm9yIGNlcnRhaW4gZGVidWcgbWVzc2FnZXMKLXdpdGhpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4gQmVsb3cgaXMgdGhlIHNhbWUgZXhhbXBsZSBhcyBhYm92ZSwgZXhjZXB0Ci13aXRoIDpjb25zdDpgU1VCREVCVUdgIGVuYWJsZWQ6OgotCi0gICAgPj4+IGltcG9ydCBtdWx0aXByb2Nlc3NpbmcsIGxvZ2dpbmcKLSAgICA+Pj4gbG9nZ2VyID0gbXVsdGlwcm9jZXNzaW5nLmxvZ190b19zdGRlcnIoKQotICAgID4+PiBsb2dnZXIuc2V0TGV2ZWwobXVsdGlwcm9jZXNzaW5nLlNVQkRFQlVHKQotICAgID4+PiBsb2dnZXIud2FybmluZygnZG9vbWVkJykKLSAgICBbV0FSTklORy9NYWluUHJvY2Vzc10gZG9vbWVkCi0gICAgPj4+IG0gPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBjaGlsZCBwcm9jZXNzIGNhbGxpbmcgc2VsZi5ydW4oKQotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gY3JlYXRlZCB0ZW1wIGRpcmVjdG9yeSAvLi4uL3B5bXAtLi4uCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIHNlcnZpbmcgYXQgJy8uLi4vcHltcC1kakdCWE4vbGlzdGVuZXItLi4uJwotICAgID4+PiBkZWwgbQotICAgIFtTVUJERUJVRy9NYWluUHJvY2Vzc10gZmluYWxpemVyIGNhbGxpbmcgLi4uCi0gICAgW0lORk8vTWFpblByb2Nlc3NdIHNlbmRpbmcgc2h1dGRvd24gbWVzc2FnZSB0byBtYW5hZ2VyCi0gICAgW0RFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciByZWNlaXZlZCBzaHV0ZG93biBtZXNzYWdlCi0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gY2FsbGluZyA8RmluYWxpemUgb2JqZWN0LCBjYWxsYmFjaz11bmxpbmssIC4uLgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGZpbmFsaXplciBjYWxsaW5nIDxidWlsdC1pbiBmdW5jdGlvbiB1bmxpbms+IC4uLgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGNhbGxpbmcgPEZpbmFsaXplIG9iamVjdCwgZGVhZD4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBmaW5hbGl6ZXIgY2FsbGluZyA8ZnVuY3Rpb24gcm10cmVlIGF0IDB4NWFhNzMwPiAuLi4KLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgZXhpdGluZyB3aXRoIGV4aXRjb2RlIDAKIAogVGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZy5kdW1teWAgbW9kdWxlCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTIyNDYsOCArMjM4NCwxMCBAQAogOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4KIAogCi1BbGwgcGxhdGZvcm1zCi1+fn5+fn5+fn5+fn5+CitBbGwgc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyBhcHBsaWVzIHRvIGFsbCBzdGFydCBtZXRob2RzLgogCiBBdm9pZCBzaGFyZWQgc3RhdGUKIApAQCAtMjI4MSwxMSArMjQyMSwxMyBAQAogCiBCZXR0ZXIgdG8gaW5oZXJpdCB0aGFuIHBpY2tsZS91bnBpY2tsZQogCi0gICAgT24gV2luZG93cyBtYW55IHR5cGVzIGZyb20gOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBuZWVkIHRvIGJlIHBpY2tsYWJsZSBzbwotICAgIHRoYXQgY2hpbGQgcHJvY2Vzc2VzIGNhbiB1c2UgdGhlbS4gIEhvd2V2ZXIsIG9uZSBzaG91bGQgZ2VuZXJhbGx5IGF2b2lkCi0gICAgc2VuZGluZyBzaGFyZWQgb2JqZWN0cyB0byBvdGhlciBwcm9jZXNzZXMgdXNpbmcgcGlwZXMgb3IgcXVldWVzLiAgSW5zdGVhZAotICAgIHlvdSBzaG91bGQgYXJyYW5nZSB0aGUgcHJvZ3JhbSBzbyB0aGF0IGEgcHJvY2VzcyB3aGljaCBuZWVkcyBhY2Nlc3MgdG8gYQotICAgIHNoYXJlZCByZXNvdXJjZSBjcmVhdGVkIGVsc2V3aGVyZSBjYW4gaW5oZXJpdCBpdCBmcm9tIGFuIGFuY2VzdG9yIHByb2Nlc3MuCisgICAgV2hlbiB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcyBtYW55IHR5cGVzCisgICAgZnJvbSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5lZWQgdG8gYmUgcGlja2xhYmxlIHNvIHRoYXQgY2hpbGQKKyAgICBwcm9jZXNzZXMgY2FuIHVzZSB0aGVtLiAgSG93ZXZlciwgb25lIHNob3VsZCBnZW5lcmFsbHkgYXZvaWQKKyAgICBzZW5kaW5nIHNoYXJlZCBvYmplY3RzIHRvIG90aGVyIHByb2Nlc3NlcyB1c2luZyBwaXBlcyBvciBxdWV1ZXMuCisgICAgSW5zdGVhZCB5b3Ugc2hvdWxkIGFycmFuZ2UgdGhlIHByb2dyYW0gc28gdGhhdCBhIHByb2Nlc3Mgd2hpY2gKKyAgICBuZWVkcyBhY2Nlc3MgdG8gYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBlbHNld2hlcmUgY2FuIGluaGVyaXQgaXQKKyAgICBmcm9tIGFuIGFuY2VzdG9yIHByb2Nlc3MuCiAKIEF2b2lkIHRlcm1pbmF0aW5nIHByb2Nlc3NlcwogCkBAIC0yMzMyLDE1ICsyNDc0LDE3IEBACiAKIEV4cGxpY2l0bHkgcGFzcyByZXNvdXJjZXMgdG8gY2hpbGQgcHJvY2Vzc2VzCiAKLSAgICBPbiBVbml4IGEgY2hpbGQgcHJvY2VzcyBjYW4gbWFrZSB1c2Ugb2YgYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBpbiBhCi0gICAgcGFyZW50IHByb2Nlc3MgdXNpbmcgYSBnbG9iYWwgcmVzb3VyY2UuICBIb3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gcGFzcyB0aGUKLSAgICBvYmplY3QgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAgICBPbiBVbml4IHVzaW5nIHRoZSAqZm9yayogc3RhcnQgbWV0aG9kLCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UKKyAgICB1c2Ugb2YgYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBpbiBhIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEKKyAgICBnbG9iYWwgcmVzb3VyY2UuICBIb3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGFzIGFuCisgICAgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4KIAotICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MgdGhpcyBhbHNvCi0gICAgZW5zdXJlcyB0aGF0IGFzIGxvbmcgYXMgdGhlIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdAotICAgIGJlIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKLSAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlIHBhcmVudAotICAgIHByb2Nlc3MuCisgICAgQXBhcnQgZnJvbSBtYWtpbmcgdGhlIGNvZGUgKHBvdGVudGlhbGx5KSBjb21wYXRpYmxlIHdpdGggV2luZG93cworICAgIGFuZCB0aGUgb3RoZXIgc3RhcnQgbWV0aG9kcyB0aGlzIGFsc28gZW5zdXJlcyB0aGF0IGFzIGxvbmcgYXMgdGhlCisgICAgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGdhcmJhZ2UKKyAgICBjb2xsZWN0ZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgVGhpcyBtaWdodCBiZSBpbXBvcnRhbnQgaWYgc29tZQorICAgIHJlc291cmNlIGlzIGZyZWVkIHdoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUKKyAgICBwYXJlbnQgcHJvY2Vzcy4KIAogICAgIFNvIGZvciBpbnN0YW5jZSA6OgogCkBAIC0yMzk5LDE3ICsyNTQzLDE5IEBACiAKICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDppc3N1ZTpgNTE1NWAsIDppc3N1ZTpgNTMxM2AgYW5kIDppc3N1ZTpgNTMzMWAKIAotV2luZG93cwotfn5+fn5+fgorVGhlICpzcGF3biogYW5kICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotU2luY2UgV2luZG93cyBsYWNrcyA6ZnVuYzpgb3MuZm9ya2AgaXQgaGFzIGEgZmV3IGV4dHJhIHJlc3RyaWN0aW9uczoKK1RoZXJlIGFyZSBhIGZldyBleHRyYSByZXN0cmljdGlvbiB3aGljaCBkb24ndCBhcHBseSB0byB0aGUgKmZvcmsqCitzdGFydCBtZXRob2QuCiAKIE1vcmUgcGlja2xhYmlsaXR5CiAKLSAgICBFbnN1cmUgdGhhdCBhbGwgYXJndW1lbnRzIHRvIDptZXRoOmBQcm9jZXNzLl9faW5pdF9fYCBhcmUgcGlja2xhYmxlLiAgVGhpcwotICAgIG1lYW5zLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IGJvdW5kIG9yIHVuYm91bmQgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseQotICAgIGFzIHRoZSBgYHRhcmdldGBgIGFyZ3VtZW50IG9uIFdpbmRvd3MgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZQotICAgIHRoYXQgaW5zdGVhZC4KKyAgICBFbnN1cmUgdGhhdCBhbGwgYXJndW1lbnRzIHRvIDptZXRoOmBQcm9jZXNzLl9faW5pdF9fYCBhcmUKKyAgICBwaWNrbGFibGUuICBUaGlzIG1lYW5zLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IGJvdW5kIG9yIHVuYm91bmQKKyAgICBtZXRob2RzIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBgYHRhcmdldGBgICh1bmxlc3MgeW91IHVzZQorICAgIHRoZSAqZm9yayogc3RhcnQgbWV0aG9kKSAtLS0ganVzdCBkZWZpbmUgYSBmdW5jdGlvbiBhbmQgdXNlIHRoYXQKKyAgICBpbnN0ZWFkLgogCiAgICAgQWxzbywgaWYgeW91IHN1YmNsYXNzIDpjbGFzczpgfm11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzYCB0aGVuIG1ha2Ugc3VyZSB0aGF0CiAgICAgaW5zdGFuY2VzIHdpbGwgYmUgcGlja2xhYmxlIHdoZW4gdGhlIDptZXRoOmBQcm9jZXNzLnN0YXJ0CkBAIC0yNDMxLDcgKzI1NzcsOCBAQAogICAgIGludGVycHJldGVyIHdpdGhvdXQgY2F1c2luZyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyAoc3VjaCBhIHN0YXJ0aW5nIGEgbmV3CiAgICAgcHJvY2VzcykuCiAKLSAgICBGb3IgZXhhbXBsZSwgdW5kZXIgV2luZG93cyBydW5uaW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHdvdWxkIGZhaWwgd2l0aCBhCisgICAgRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2QKKyAgICBydW5uaW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHdvdWxkIGZhaWwgd2l0aCBhCiAgICAgOmV4YzpgUnVudGltZUVycm9yYDo6CiAKICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MKQEAgLTI0NDUsMTMgKzI1OTIsMTQgQEAKICAgICBJbnN0ZWFkIG9uZSBzaG91bGQgcHJvdGVjdCB0aGUgImVudHJ5IHBvaW50IiBvZiB0aGUgcHJvZ3JhbSBieSB1c2luZyBgYGlmCiAgICAgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpgYCBhcyBmb2xsb3dzOjoKIAotICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBmcmVlemVfc3VwcG9ydAorICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBmcmVlemVfc3VwcG9ydCwgc2V0X3N0YXJ0X21ldGhvZAogCiAgICAgICAgZGVmIGZvbygpOgogICAgICAgICAgICBwcmludCgnaGVsbG8nKQogCiAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorICAgICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCiAgICAgICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1mb28pCiAgICAgICAgICAgIHAuc3RhcnQoKQogCkBAIC0yNDgyLDI2ICsyNjMwLDcgQEAKICAgIDpsYW5ndWFnZTogcHl0aG9uMwogCiAKLVN5bmNocm9uaXphdGlvbiB0eXBlcyBsaWtlIGxvY2tzLCBjb25kaXRpb25zIGFuZCBxdWV1ZXM6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKLSAgIDpsYW5ndWFnZTogcHl0aG9uMwotCi0KIEFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gdXNlIHF1ZXVlcyB0byBmZWVkIHRhc2tzIHRvIGEgY29sbGVjdGlvbiBvZiB3b3JrZXIKIHByb2Nlc3NlcyBhbmQgY29sbGVjdCB0aGUgcmVzdWx0czoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF93b3JrZXJzLnB5Ci0KLQotQW4gZXhhbXBsZSBvZiBob3cgYSBwb29sIG9mIHdvcmtlciBwcm9jZXNzZXMgY2FuIGVhY2ggcnVuIGEKLTpjbGFzczpgfmh0dHAuc2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcmAgaW5zdGFuY2Ugd2hpbGUgc2hhcmluZyBhIHNpbmdsZQotbGlzdGVuaW5nIHNvY2tldC4KLQotLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKLQotCi1Tb21lIHNpbXBsZSBiZW5jaG1hcmtzIGNvbXBhcmluZyA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIHdpdGggOm1vZDpgdGhyZWFkaW5nYDoKLQotLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5Ci0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L25ldHJjLnJzdCBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdAppbmRleCA1NjRmMTAxLi4yM2ZmZWQ2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbmV0cmMucnN0CkBAIC0yOSw3ICsyOSw3IEBACiAgICBUaGlzIGltcGxlbWVudHMgc2VjdXJpdHkgYmVoYXZpb3IgZXF1aXZhbGVudCB0byB0aGF0IG9mIGZ0cCBhbmQgb3RoZXIKICAgIHByb2dyYW1zIHRoYXQgdXNlIDpmaWxlOmAubmV0cmNgLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4zIEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgQWRkZWQgdGhlIFBPU0lYIHBlcm1pc3Npb24gY2hlY2suCiAKIAogLi4gZXhjZXB0aW9uOjogTmV0cmNQYXJzZUVycm9yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CmluZGV4IDc1OWQzYjcuLjlhYjJjOTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBubnRwbGliYCAtLS0gTk5UUCBwcm90b2NvbCBjbGllbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC03MSw3ICs3MCw3IEBACiAgICByZWFkZXItc3BlY2lmaWMgY29tbWFuZHMsIHN1Y2ggYXMgYGBncm91cGBgLiAgSWYgeW91IGdldCB1bmV4cGVjdGVkCiAgICA6ZXhjOmBOTlRQUGVybWFuZW50RXJyb3JgXCBzLCB5b3UgbWlnaHQgbmVlZCB0byBzZXQgKnJlYWRlcm1vZGUqLgogICAgOmNsYXNzOmBOTlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bwotICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4Yzpgc29ja2V0LmVycm9yYCBleGNlcHRpb25zIGFuZCB0byBjbG9zZSB0aGUgTk5UUAorICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKICAgIGNvbm5lY3Rpb24gd2hlbiBkb25lLiBIZXJlIGlzIGEgc2FtcGxlIG9uIGhvdyB1c2luZyBpdDoKIAogICAgID4+PiBmcm9tIG5udHBsaWIgaW1wb3J0IE5OVFAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L251bWVyaWMucnN0IGIvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QKaW5kZXggMjczMmE4NC4uN2M3NmE0NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QKQEAgLTIzLDMgKzIzLDQgQEAKICAgIGRlY2ltYWwucnN0CiAgICBmcmFjdGlvbnMucnN0CiAgICByYW5kb20ucnN0CisgICBzdGF0aXN0aWNzLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0IGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CmluZGV4IDAzNTQ3Y2EuLjgwYmFkNzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKQEAgLTExLDYgKzExLDkgQEAKICAgIGltcG9ydCBvcGVyYXRvcgogICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlciwgaWFkZAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9vcGVyYXRvci5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBlZmZpY2llbnQgZnVuY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8KIHRoZSBpbnRyaW5zaWMgb3BlcmF0b3JzIG9mIFB5dGhvbi4gIEZvciBleGFtcGxlLCBgYG9wZXJhdG9yLmFkZCh4LCB5KWBgIGlzCkBAIC0yMzUsNiArMjM4LDE0IEBACiAKIC4uIFhYWDogZmluZCBhIGJldHRlciwgcmVhZGFibGUsIGV4YW1wbGUKIAorLi4gZnVuY3Rpb246OiBsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCkKKworICAgUmV0dXJuIGFuIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKm8qLiBGaXJzdCB0cnlpbmcgdG8gcmV0dXJuIGl0cworICAgYWN0dWFsIGxlbmd0aCwgdGhlbiBhbiBlc3RpbWF0ZSB1c2luZyA6bWV0aDpgb2JqZWN0Ll9fbGVuZ3RoX2hpbnRfX2AsIGFuZAorICAgZmluYWxseSByZXR1cm5pbmcgdGhlIGRlZmF1bHQgdmFsdWUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUaGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBhbHNvIGRlZmluZXMgdG9vbHMgZm9yIGdlbmVyYWxpemVkIGF0dHJpYnV0ZSBhbmQgaXRlbQogbG9va3Vwcy4gIFRoZXNlIGFyZSB1c2VmdWwgZm9yIG1ha2luZyBmYXN0IGZpZWxkIGV4dHJhY3RvcnMgYXMgYXJndW1lbnRzIGZvcgogOmZ1bmM6YG1hcGAsIDpmdW5jOmBzb3J0ZWRgLCA6bWV0aDpgaXRlcnRvb2xzLmdyb3VwYnlgLCBvciBvdGhlciBmdW5jdGlvbnMgdGhhdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAppbmRleCAzNmYyZDE0Li4wMzM1MGQ3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdApAQCAtMjIsNiArMjIsMTEgQEAKIGV4cGxpY2l0bHkgd2hlbiBhbiBhcHBsaWNhdGlvbiBkZXNpcmVzIHNoZWxsLWxpa2UgcGF0aCBleHBhbnNpb24uICAoU2VlIGFsc28KIHRoZSA6bW9kOmBnbG9iYCBtb2R1bGUuKQogCisKKy4uIHNlZWFsc286OgorICAgVGhlIDptb2Q6YHBhdGhsaWJgIG1vZHVsZSBvZmZlcnMgaGlnaC1sZXZlbCBwYXRoIG9iamVjdHMuCisKKwogLi4gbm90ZTo6CiAKICAgIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYWNjZXB0IGVpdGhlciBvbmx5IGJ5dGVzIG9yIG9ubHkgc3RyaW5nIG9iamVjdHMgYXMKQEAgLTQyLDcgKzQ3LDYgQEAKICAgICogOm1vZDpgcG9zaXhwYXRoYCBmb3IgVU5JWC1zdHlsZSBwYXRocwogICAgKiA6bW9kOmBudHBhdGhgIGZvciBXaW5kb3dzIHBhdGhzCiAgICAqIDptb2Q6YG1hY3BhdGhgIGZvciBvbGQtc3R5bGUgTWFjT1MgcGF0aHMKLSAgICogOm1vZDpgb3MyZW14cGF0aGAgZm9yIE9TLzIgRU1YIHBhdGhzCiAKIAogLi4gZnVuY3Rpb246OiBhYnNwYXRoKHBhdGgpCkBAIC0yNTAsMTUgKzI1NCwxNCBAQAogICAgT24gVW5peCwgdGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyIGFuZCByYWlzZXMgYW4KICAgIGV4Y2VwdGlvbiBpZiBhIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KIAotICAgT24gV2luZG93cywgdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmluYWwgcGF0aAotICAgbmFtZSB1c2luZyB0aGUgV2luZG93cyBBUEkgY2FsbCBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuIFRoaXMgZnVuY3Rpb24KLSAgIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaGFuZGxlcyBjYW5ub3QgYmUgb2J0YWluZWQgdG8gZWl0aGVyIGZpbGUuCi0KICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFdpbmRvd3Mgbm93IHVzZXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgYWxsIG90aGVyIHBsYXRmb3Jtcy4KKwogCiAuLiBmdW5jdGlvbjo6IHNhbWVvcGVuZmlsZShmcDEsIGZwMikKIApAQCAtMjc3LDcgKzI4MCwxMCBAQAogICAgOmZ1bmM6YG9zLmxzdGF0YCwgb3IgOmZ1bmM6YG9zLnN0YXRgLiAgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZQogICAgdW5kZXJseWluZyBjb21wYXJpc29uIHVzZWQgYnkgOmZ1bmM6YHNhbWVmaWxlYCBhbmQgOmZ1bmM6YHNhbWVvcGVuZmlsZWAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAogCiAuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5yc3QgYi9Eb2MvbGlicmFyeS9vcy5yc3QKaW5kZXggMmMzMzM2Ni4uNjdmOTRhYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnJzdApAQCAtNTQsNyArNTQsNyBAQAogCiAgICBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIGltcG9ydGVkLiAgVGhlIGZvbGxvd2luZwogICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsIGBgJ21hYydgYCwKLSAgIGBgJ29zMidgYCwgYGAnY2UnYGAsIGBgJ2phdmEnYGAuCisgICBgYCdjZSdgYCwgYGAnamF2YSdgYC4KIAogICAgLi4gc2VlYWxzbzo6CiAgICAgICA6YXR0cjpgc3lzLnBsYXRmb3JtYCBoYXMgYSBmaW5lciBncmFudWxhcml0eS4gIDpmdW5jOmBvcy51bmFtZWAgZ2l2ZXMKQEAgLTY4NSwxNyArNjg1LDMwIEBACiAKIC4uIGZ1bmN0aW9uOjogZHVwKGZkKQogCi0gICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouCisgICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIE9uIFdpbmRvd3MsIHdoZW4gZHVwbGljYXRpbmcgYSBzdGFuZGFyZCBzdHJlYW0gKDA6IHN0ZGluLCAxOiBzdGRvdXQsCisgICAyOiBzdGRlcnIpLCB0aGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBpbmhlcml0YWJsZQorICAgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCiAKLS4uIGZ1bmN0aW9uOjogZHVwMihmZCwgZmQyKQorCisuLiBmdW5jdGlvbjo6IGR1cDIoZmQsIGZkMiwgaW5oZXJpdGFibGU9VHJ1ZSkKIAogICAgRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvciAqZmQqIHRvICpmZDIqLCBjbG9zaW5nIHRoZSBsYXR0ZXIgZmlyc3QgaWYgbmVjZXNzYXJ5LgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciAqZmQyKiBpcyA6cmVmOmBpbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YCBieSBkZWZhdWx0LAorICAgb3Igbm9uLWluaGVyaXRhYmxlIGlmICppbmhlcml0YWJsZSogaXMgYGBGYWxzZWBgLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgdGhlIG9wdGlvbmFsICppbmhlcml0YWJsZSogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogZmNobW9kKGZkLCBtb2RlKQogCkBAIC04NDYsMTcgKzg1OSwyMSBAQAogICAgT3BlbiB0aGUgZmlsZSAqZmlsZSogYW5kIHNldCB2YXJpb3VzIGZsYWdzIGFjY29yZGluZyB0byAqZmxhZ3MqIGFuZCBwb3NzaWJseQogICAgaXRzIG1vZGUgYWNjb3JkaW5nIHRvICptb2RlKi4gIFdoZW4gY29tcHV0aW5nICptb2RlKiwgdGhlIGN1cnJlbnQgdW1hc2sgdmFsdWUKICAgIGlzIGZpcnN0IG1hc2tlZCBvdXQuICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIG5ld2x5IG9wZW5lZCBmaWxlLgorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmxhZyBhbmQgbW9kZSB2YWx1ZXMsIHNlZSB0aGUgQyBydW4tdGltZSBkb2N1bWVudGF0aW9uOwogICAgZmxhZyBjb25zdGFudHMgKGxpa2UgOmNvbnN0OmBPX1JET05MWWAgYW5kIDpjb25zdDpgT19XUk9OTFlgKSBhcmUgZGVmaW5lZCBpbgotICAgdGhpcyBtb2R1bGUgdG9vIChzZWUgOnJlZjpgb3Blbi1jb25zdGFudHNgKS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCisgICB0aGUgOm1vZDpgb3NgIG1vZHVsZS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCiAgICA6Y29uc3Q6YE9fQklOQVJZYCBpcyBuZWVkZWQgdG8gb3BlbiBmaWxlcyBpbiBiaW5hcnkgbW9kZS4KIAogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMKLSAgIDxkaXJfZmQ+YC4KKyAgIDxkaXJfZmQ+YCB3aXRoIHRoZSAqZGlyX2ZkKiBwYXJhbWV0ZXIuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBsb3ctbGV2ZWwgSS9PLiAgRm9yIG5vcm1hbCB1c2FnZSwgdXNlIHRoZQpAQCAtODY3LDI1ICs4ODQsOTIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQorOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCitgYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgordGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4CitvciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fUkRPTkxZCisgICAgICAgICAgT19XUk9OTFkKKyAgICAgICAgICBPX1JEV1IKKyAgICAgICAgICBPX0FQUEVORAorICAgICAgICAgIE9fQ1JFQVQKKyAgICAgICAgICBPX0VYQ0wKKyAgICAgICAgICBPX1RSVU5DCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fRFNZTkMKKyAgICAgICAgICBPX1JTWU5DCisgICAgICAgICAgT19TWU5DCisgICAgICAgICAgT19OREVMQVkKKyAgICAgICAgICBPX05PTkJMT0NLCisgICAgICAgICAgT19OT0NUVFkKKyAgICAgICAgICBPX1NITE9DSworICAgICAgICAgIE9fRVhMT0NLCisgICAgICAgICAgT19DTE9FWEVDCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KKworLi4gZGF0YTo6IE9fQklOQVJZCisgICAgICAgICAgT19OT0lOSEVSSVQKKyAgICAgICAgICBPX1NIT1JUX0xJVkVECisgICAgICAgICAgT19URU1QT1JBUlkKKyAgICAgICAgICBPX1JBTkRPTQorICAgICAgICAgIE9fU0VRVUVOVElBTAorICAgICAgICAgIE9fVEVYVAorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fQVNZTkMKKyAgICAgICAgICBPX0RJUkVDVAorICAgICAgICAgIE9fRElSRUNUT1JZCisgICAgICAgICAgT19OT0ZPTExPVworICAgICAgICAgIE9fTk9BVElNRQorICAgICAgICAgIE9fUEFUSAorICAgICAgICAgIE9fVE1QRklMRQorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQorICAgdGhlIEMgbGlicmFyeS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCA6ZGF0YTpgT19UTVBGSUxFYCBjb25zdGFudC4gSXQncyBvbmx5IGF2YWlsYWJsZSBvbiBMaW51eCBLZXJuZWwgMy4xMQorICAgICAgb3IgbmV3ZXIuCisKIAogLi4gZnVuY3Rpb246OiBvcGVucHR5KCkKIAogICAgLi4gaW5kZXg6OiBtb2R1bGU6IHB0eQogCi0gICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAobWFzdGVyLAotICAgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gRm9yIGEgKHNsaWdodGx5KSBtb3JlIHBvcnRhYmxlCi0gICBhcHByb2FjaCwgdXNlIHRoZSA6bW9kOmBwdHlgIG1vZHVsZS4KKyAgIE9wZW4gYSBuZXcgcHNldWRvLXRlcm1pbmFsIHBhaXIuIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycworICAgYGAobWFzdGVyLCBzbGF2ZSlgYCBmb3IgdGhlIHB0eSBhbmQgdGhlIHR0eSwgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUKKyAgIGRlc2NyaXB0b3JzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuIEZvciBhIChzbGlnaHRseSkgbW9yZQorICAgcG9ydGFibGUgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCiAKICAgIEF2YWlsYWJpbGl0eTogc29tZSBmbGF2b3JzIG9mIFVuaXguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlKCkKIAotICAgQ3JlYXRlIGEgcGlwZS4gIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBgYChyLCB3KWBgIHVzYWJsZSBmb3IgcmVhZGluZwotICAgYW5kIHdyaXRpbmcsIHJlc3BlY3RpdmVseS4KKyAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yCisgICByZWFkaW5nIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBpcGUyKGZsYWdzKQogCkBAIC0xMDgwLDc4ICsxMTY0LDYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIF9vcGVuLWNvbnN0YW50czoKLQotYGBvcGVuKClgYCBmbGFnIGNvbnN0YW50cwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQotOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCi1gYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgotdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4Ci1vciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fUkRPTkxZCi0gICAgICAgICAgT19XUk9OTFkKLSAgICAgICAgICBPX1JEV1IKLSAgICAgICAgICBPX0FQUEVORAotICAgICAgICAgIE9fQ1JFQVQKLSAgICAgICAgICBPX0VYQ0wKLSAgICAgICAgICBPX1RSVU5DCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fRFNZTkMKLSAgICAgICAgICBPX1JTWU5DCi0gICAgICAgICAgT19TWU5DCi0gICAgICAgICAgT19OREVMQVkKLSAgICAgICAgICBPX05PTkJMT0NLCi0gICAgICAgICAgT19OT0NUVFkKLSAgICAgICAgICBPX1NITE9DSwotICAgICAgICAgIE9fRVhMT0NLCi0gICAgICAgICAgT19DTE9FWEVDCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KLQotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KLQotLi4gZGF0YTo6IE9fQklOQVJZCi0gICAgICAgICAgT19OT0lOSEVSSVQKLSAgICAgICAgICBPX1NIT1JUX0xJVkVECi0gICAgICAgICAgT19URU1QT1JBUlkKLSAgICAgICAgICBPX1JBTkRPTQotICAgICAgICAgIE9fU0VRVUVOVElBTAotICAgICAgICAgIE9fVEVYVAotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fQVNZTkMKLSAgICAgICAgICBPX0RJUkVDVAotICAgICAgICAgIE9fRElSRUNUT1JZCi0gICAgICAgICAgT19OT0ZPTExPVwotICAgICAgICAgIE9fTk9BVElNRQotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQotICAgdGhlIEMgbGlicmFyeS4KLQotCi0uLiBkYXRhOjogUlRMRF9MQVpZCi0gICAgICAgICAgUlRMRF9OT1cKLSAgICAgICAgICBSVExEX0dMT0JBTAotICAgICAgICAgIFJUTERfTE9DQUwKLSAgICAgICAgICBSVExEX05PREVMRVRFCi0gICAgICAgICAgUlRMRF9OT0xPQUQKLSAgICAgICAgICBSVExEX0RFRVBCSU5ECi0KLSAgIFNlZSB0aGUgVW5peCBtYW51YWwgcGFnZSA6bWFucGFnZTpgZGxvcGVuKDMpYC4KLQotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0KLQogLi4gX3Rlcm1pbmFsLXNpemU6CiAKIFF1ZXJ5aW5nIHRoZSBzaXplIG9mIGEgdGVybWluYWwKQEAgLTExODksNiArMTIwMSw0OSBAQAogICAgICAgSGVpZ2h0IG9mIHRoZSB0ZXJtaW5hbCB3aW5kb3cgaW4gY2hhcmFjdGVycy4KIAogCisuLiBfZmRfaW5oZXJpdGFuY2U6CisKK0luaGVyaXRhbmNlIG9mIEZpbGUgRGVzY3JpcHRvcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK0EgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbiAiaW5oZXJpdGFibGUiIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IKK2NhbiBiZSBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLiAgU2luY2UgUHl0aG9uIDMuNCwgZmlsZSBkZXNjcmlwdG9ycworY3JlYXRlZCBieSBQeXRob24gYXJlIG5vbi1pbmhlcml0YWJsZSBieSBkZWZhdWx0LgorCitPbiBVTklYLCBub24taW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGluIGNoaWxkIHByb2Nlc3NlcyBhdCB0aGUKK2V4ZWN1dGlvbiBvZiBhIG5ldyBwcm9ncmFtLCBvdGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSBpbmhlcml0ZWQuCisKK09uIFdpbmRvd3MsIG5vbi1pbmhlcml0YWJsZSBoYW5kbGVzIGFuZCBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaW4gY2hpbGQKK3Byb2Nlc3NlcywgZXhjZXB0IGZvciBzdGFuZGFyZCBzdHJlYW1zIChmaWxlIGRlc2NyaXB0b3JzIDAsIDEgYW5kIDI6IHN0ZGluLCBzdGRvdXQKK2FuZCBzdGRlcnIpLCB3aGljaCBhcmUgYWx3YXlzIGluaGVyaXRlZC4gIFVzaW5nIDpmdW5jOmBzcGF3blwqIDxzcGF3bmw+YCBmdW5jdGlvbnMsCithbGwgaW5oZXJpdGFibGUgaGFuZGxlcyBhbmQgYWxsIGluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGluaGVyaXRlZC4KK1VzaW5nIHRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUsIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGV4Y2VwdCBzdGFuZGFyZAorc3RyZWFtcyBhcmUgY2xvc2VkLCBhbmQgaW5oZXJpdGFibGUgaGFuZGxlcyBhcmUgb25seSBpbmhlcml0ZWQgaWYgdGhlCisqY2xvc2VfZmRzKiBwYXJhbWV0ZXIgaXMgYGBGYWxzZWBgLgorCisuLiBmdW5jdGlvbjo6IGdldF9pbmhlcml0YWJsZShmZCkKKworICAgR2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IgKGEgYm9vbGVhbikuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUpCisKKyAgIEdldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlIChhIGJvb2xlYW4pLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUsIGluaGVyaXRhYmxlKQorCisgICBTZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisKIC4uIF9vcy1maWxlLWRpcjoKIAogRmlsZXMgYW5kIERpcmVjdG9yaWVzCkBAIC0zMDQ3LDcgKzMxMDIsNyBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIGEgc3VwcG9ydGVkIGJ5IHRoZQorVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUKIG9wZXJhdGluZyBzeXN0ZW0uCiAKIC4uIGRhdGE6OiBTQ0hFRF9PVEhFUgpAQCAtMzE1NiwxMCArMzIxMSw2IEBACiAgICBSZXR1cm4gdGhlIHNldCBvZiBDUFVzIHRoZSBwcm9jZXNzIHdpdGggUElEICpwaWQqIChvciB0aGUgY3VycmVudCBwcm9jZXNzCiAgICBpZiB6ZXJvKSBpcyByZXN0cmljdGVkIHRvLgogCi0gICAuLiBzZWVhbHNvOjoKLSAgICAgIDpmdW5jOmBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50YCByZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUKLSAgICAgIHN5c3RlbS4KLQogCiAuLiBfb3MtcGF0aDoKIApAQCAtMzE5Nyw2ICszMjQ4LDEzIEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAorLi4gZnVuY3Rpb246OiBjcHVfY291bnQoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uIFJldHVybnMgTm9uZSBpZiB1bmRldGVybWluZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0bG9hZGF2ZygpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgc3lzdGVtIHJ1biBxdWV1ZSBhdmVyYWdlZCBvdmVyIHRoZSBsYXN0CkBAIC0zMjk1LDYgKzMzNTMsMTkgQEAKICAgIFRoZSBmaWxlIHBhdGggb2YgdGhlIG51bGwgZGV2aWNlLiBGb3IgZXhhbXBsZTogYGAnL2Rldi9udWxsJ2BgIGZvcgogICAgUE9TSVgsIGBgJ251bCdgYCBmb3IgV2luZG93cy4gIEFsc28gYXZhaWxhYmxlIHZpYSA6bW9kOmBvcy5wYXRoYC4KIAorLi4gZGF0YTo6IFJUTERfTEFaWQorICAgICAgICAgIFJUTERfTk9XCisgICAgICAgICAgUlRMRF9HTE9CQUwKKyAgICAgICAgICBSVExEX0xPQ0FMCisgICAgICAgICAgUlRMRF9OT0RFTEVURQorICAgICAgICAgIFJUTERfTk9MT0FECisgICAgICAgICAgUlRMRF9ERUVQQklORAorCisgICBGbGFncyBmb3IgdXNlIHdpdGggdGhlIDpmdW5jOmB+c3lzLnNldGRsb3BlbmZsYWdzYCBhbmQKKyAgIDpmdW5jOmB+c3lzLmdldGRsb3BlbmZsYWdzYCBmdW5jdGlvbnMuICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UKKyAgIDptYW5wYWdlOmBkbG9wZW4oMylgIGZvciB3aGF0IHRoZSBkaWZmZXJlbnQgZmxhZ3MgbWVhbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIC4uIF9vcy1taXNjZnVuYzoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wYXRobGliLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGEzMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QKQEAgLTAsMCArMSw4NzMgQEAKKworOm1vZDpgcGF0aGxpYmAgLS0tIE9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogcGF0aGxpYgorICAgOnN5bm9wc2lzOiBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworCisuLiBpbmRleDo6IHNpbmdsZTogcGF0aDsgb3BlcmF0aW9ucworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCitUaGlzIG1vZHVsZSBvZmZlcnMgY2xhc3NlcyByZXByZXNlbnRpbmcgZmlsZXN5c3RlbSBwYXRocyB3aXRoIHNlbWFudGljcworYXBwcm9wcmlhdGUgZm9yIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4gIFBhdGggY2xhc3NlcyBhcmUgZGl2aWRlZAorYmV0d2VlbiA6cmVmOmBwdXJlIHBhdGhzIDxwdXJlLXBhdGhzPmAsIHdoaWNoIHByb3ZpZGUgcHVyZWx5IGNvbXB1dGF0aW9uYWwKK29wZXJhdGlvbnMgd2l0aG91dCBJL08sIGFuZCA6cmVmOmBjb25jcmV0ZSBwYXRocyA8Y29uY3JldGUtcGF0aHM+YCwgd2hpY2gKK2luaGVyaXQgZnJvbSBwdXJlIHBhdGhzIGJ1dCBhbHNvIHByb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKK1RoZSBtYWluIHBvaW50IG9mIGVudHJ5IGlzIHRoZSA6Y2xhc3M6YFBhdGhgIGNsYXNzLCB3aGljaCB3aWxsIGluc3RhbnRpYXRlCithIDpyZWY6YGNvbmNyZXRlIHBhdGggPGNvbmNyZXRlLXBhdGhzPmAgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorCisuLiBub3RlOjoKKyAgIFRoaXMgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKKyAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiBzZWVhbHNvOjoKKyAgIDpwZXA6YDQyOGA6IFRoZSBwYXRobGliIG1vZHVsZSAtLSBvYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocy4KKworLi4gc2VlYWxzbzo6CisgICBGb3IgbG93LWxldmVsIHBhdGggbWFuaXB1bGF0aW9uIG9uIHN0cmluZ3MsIHlvdSBjYW4gYWxzbyB1c2UgdGhlCisgICA6bW9kOmBvcy5wYXRoYCBtb2R1bGUuCisKKworQmFzaWMgdXNlCistLS0tLS0tLS0KKworSW1wb3J0aW5nIHRoZSBtYWluIGNsYXNzOjoKKworICAgPj4+IGZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAorCitMaXN0aW5nIHN1YmRpcmVjdG9yaWVzOjoKKworICAgPj4+IHAgPSBQYXRoKCcuJykKKyAgID4+PiBbeCBmb3IgeCBpbiBwLml0ZXJkaXIoKSBpZiB4LmlzX2RpcigpXQorICAgW1Bvc2l4UGF0aCgnLmhnJyksIFBvc2l4UGF0aCgnZG9jcycpLCBQb3NpeFBhdGgoJ2Rpc3QnKSwKKyAgICBQb3NpeFBhdGgoJ19fcHljYWNoZV9fJyksIFBvc2l4UGF0aCgnYnVpbGQnKV0KKworTGlzdGluZyBQeXRob24gc291cmNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IHRyZWU6OgorCisgICA+Pj4gbGlzdChwLmdsb2IoJyoqLyoucHknKSkKKyAgIFtQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpLCBQb3NpeFBhdGgoJ3NldHVwLnB5JyksCisgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpXQorCitOYXZpZ2F0aW5nIGluc2lkZSBhIGRpcmVjdG9yeSB0cmVlOjoKKworICAgPj4+IHAgPSBQYXRoKCcvZXRjJykKKyAgID4+PiBxID0gcCAvICdpbml0LmQnIC8gJ3JlYm9vdCcKKyAgID4+PiBxCisgICBQb3NpeFBhdGgoJy9ldGMvaW5pdC5kL3JlYm9vdCcpCisgICA+Pj4gcS5yZXNvbHZlKCkKKyAgIFBvc2l4UGF0aCgnL2V0Yy9yYy5kL2luaXQuZC9oYWx0JykKKworUXVlcnlpbmcgcGF0aCBwcm9wZXJ0aWVzOjoKKworICAgPj4+IHEuZXhpc3RzKCkKKyAgIFRydWUKKyAgID4+PiBxLmlzX2RpcigpCisgICBGYWxzZQorCitPcGVuaW5nIGEgZmlsZTo6CisKKyAgID4+PiB3aXRoIHEub3BlbigpIGFzIGY6IGYucmVhZGxpbmUoKQorICAgLi4uCisgICAnIyEvYmluL2Jhc2hcbicKKworCisuLiBfcHVyZS1wYXRoczoKKworUHVyZSBwYXRocworLS0tLS0tLS0tLQorCitQdXJlIHBhdGggb2JqZWN0cyBwcm92aWRlIHBhdGgtaGFuZGxpbmcgb3BlcmF0aW9ucyB3aGljaCBkb24ndCBhY3R1YWxseQorYWNjZXNzIGEgZmlsZXN5c3RlbS4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIGFjY2VzcyB0aGVzZSBjbGFzc2VzLCB3aGljaAord2UgYWxzbyBjYWxsICpmbGF2b3Vycyo6CisKKworLi4gY2xhc3M6OiBQdXJlUG9zaXhQYXRoCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgcGF0aCBmbGF2b3VyIHJlcHJlc2VudHMgbm9uLVdpbmRvd3MKKyAgIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKworLi4gY2xhc3M6OiBQdXJlV2luZG93c1BhdGgKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFB1cmVQYXRoYCwgdGhpcyBwYXRoIGZsYXZvdXIgcmVwcmVzZW50cyBXaW5kb3dzCisgICBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworLi4gY2xhc3M6OiBQdXJlUGF0aAorCisgICBBIGdlbmVyaWMgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBzeXN0ZW0ncyBwYXRoIGZsYXZvdXIgKGluc3RhbnRpYXRpbmcKKyAgIGl0IGNyZWF0ZXMgZWl0aGVyIGEgOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCBvciBhIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYCk6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ3NldHVwLnB5JykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ3NldHVwLnB5JykKKworCitSZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0geW91J3JlIHJ1bm5pbmcgb24sIHlvdSBjYW4gaW5zdGFudGlhdGUgYWxsIG9mCit0aGVzZSBjbGFzc2VzLCBzaW5jZSB0aGV5IGRvbid0IHByb3ZpZGUgYW55IG9wZXJhdGlvbiB0aGF0IGRvZXMgc3lzdGVtIGNhbGxzLgorCisKK0NvbnN0cnVjdGluZyBwYXRocworXl5eXl5eXl5eXl5eXl5eXl5eCisKK1BhdGggY29uc3RydWN0b3JzIGFjY2VwdCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorV2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgYXJndW1lbnQsIGEgcGF0aCBvYmplY3QgcG9pbnRzIHRvIHRoZSBjdXJyZW50CitkaXJlY3Rvcnk6OgorCisgICA+Pj4gUHVyZVBhdGgoKQorICAgUHVyZVBvc2l4UGF0aCgnLicpCisKK0FueSBhcmd1bWVudCBjYW4gYmUgYSBzdHJpbmcgb3IgYnl0ZXMgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhcmJpdHJhcnkgbnVtYmVyCitvZiBwYXRoIHNlZ21lbnRzLCBidXQgaXQgY2FuIGFsc28gYmUgYW5vdGhlciBwYXRoIG9iamVjdDo6CisKKyAgID4+PiBQdXJlUGF0aCgnZm9vJywgJ3NvbWUvcGF0aCcsICdiYXInKQorICAgUHVyZVBvc2l4UGF0aCgnZm9vL3NvbWUvcGF0aC9iYXInKQorICAgPj4+IFB1cmVQYXRoKFBhdGgoJ2ZvbycpLCBQYXRoKCdiYXInKSkKKyAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9iYXInKQorCitXaGVuIHNldmVyYWwgYWJzb2x1dGUgcGF0aHMgYXJlIGdpdmVuLCB0aGUgbGFzdCBpcyB0YWtlbiBhcyBhbiBhbmNob3IKKyhtaW1pY2tpbmcgOmZ1bmM6YG9zLnBhdGguam9pbmAncyBiZWhhdmlvdXIpOjoKKworICAgPj4+IFB1cmVQYXRoKCcvZXRjJywgJy91c3InLCAnbGliNjQnKQorICAgUHVyZVBvc2l4UGF0aCgnL3Vzci9saWI2NCcpCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9XaW5kb3dzJywgJ2Q6YmFyJykKKyAgIFB1cmVXaW5kb3dzUGF0aCgnZDpiYXInKQorCitIb3dldmVyLCBpbiBhIFdpbmRvd3MgcGF0aCwgY2hhbmdpbmcgdGhlIGxvY2FsIHJvb3QgZG9lc24ndCBkaXNjYXJkIHRoZQorcHJldmlvdXMgZHJpdmUgc2V0dGluZzo6CisKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnLCAnL1Byb2dyYW0gRmlsZXMnKQorICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworU3B1cmlvdXMgc2xhc2hlcyBhbmQgc2luZ2xlIGRvdHMgYXJlIGNvbGxhcHNlZCwgYnV0IGRvdWJsZSBkb3RzIChgYCcuLidgYCkKK2FyZSBub3QsIHNpbmNlIHRoaXMgd291bGQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIGEgcGF0aCBpbiB0aGUgZmFjZSBvZgorc3ltYm9saWMgbGlua3M6OgorCisgICA+Pj4gUHVyZVBhdGgoJ2Zvby8vYmFyJykKKyAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9iYXInKQorICAgPj4+IFB1cmVQYXRoKCdmb28vLi9iYXInKQorICAgUHVyZVBvc2l4UGF0aCgnZm9vL2JhcicpCisgICA+Pj4gUHVyZVBhdGgoJ2Zvby8uLi9iYXInKQorICAgUHVyZVBvc2l4UGF0aCgnZm9vLy4uL2JhcicpCisKKyhhIG5hw692ZSBhcHByb2FjaCB3b3VsZCBtYWtlIGBgUHVyZVBvc2l4UGF0aCgnZm9vLy4uL2JhcicpYGAgZXF1aXZhbGVudAordG8gYGBQdXJlUG9zaXhQYXRoKCdiYXInKWBgLCB3aGljaCBpcyB3cm9uZyBpZiBgYGZvb2BgIGlzIGEgc3ltYm9saWMgbGluawordG8gYW5vdGhlciBkaXJlY3RvcnkpCisKKworR2VuZXJhbCBwcm9wZXJ0aWVzCiteXl5eXl5eXl5eXl5eXl5eXl4KKworUGF0aHMgYXJlIGltbXV0YWJsZSBhbmQgaGFzaGFibGUuICBQYXRocyBvZiBhIHNhbWUgZmxhdm91ciBhcmUgY29tcGFyYWJsZQorYW5kIG9yZGVyYWJsZS4gIFRoZXNlIHByb3BlcnRpZXMgcmVzcGVjdCB0aGUgZmxhdm91cidzIGNhc2UtZm9sZGluZworc2VtYW50aWNzOjoKKworICAgPj4+IFB1cmVQb3NpeFBhdGgoJ2ZvbycpID09IFB1cmVQb3NpeFBhdGgoJ0ZPTycpCisgICBGYWxzZQorICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnZm9vJykgPT0gUHVyZVdpbmRvd3NQYXRoKCdGT08nKQorICAgVHJ1ZQorICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnRk9PJykgaW4geyBQdXJlV2luZG93c1BhdGgoJ2ZvbycpIH0KKyAgIFRydWUKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ0M6JykgPCBQdXJlV2luZG93c1BhdGgoJ2Q6JykKKyAgIFRydWUKKworUGF0aHMgb2YgYSBkaWZmZXJlbnQgZmxhdm91ciBjb21wYXJlIHVuZXF1YWwgYW5kIGNhbm5vdCBiZSBvcmRlcmVkOjoKKworICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnZm9vJykgPT0gUHVyZVBvc2l4UGF0aCgnZm9vJykKKyAgIEZhbHNlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdmb28nKSA8IFB1cmVQb3NpeFBhdGgoJ2ZvbycpCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICBUeXBlRXJyb3I6IHVub3JkZXJhYmxlIHR5cGVzOiBQdXJlV2luZG93c1BhdGgoKSA8IFB1cmVQb3NpeFBhdGgoKQorCisKK09wZXJhdG9ycworXl5eXl5eXl5eCisKK1RoZSBzbGFzaCBvcGVyYXRvciBoZWxwcyBjcmVhdGUgY2hpbGQgcGF0aHMsIHNpbWlsYXJseSB0byA6ZnVuYzpgb3MucGF0aC5qb2luYDo6CisKKyAgID4+PiBwID0gUHVyZVBhdGgoJy9ldGMnKQorICAgPj4+IHAKKyAgIFB1cmVQb3NpeFBhdGgoJy9ldGMnKQorICAgPj4+IHAgLyAnaW5pdC5kJyAvICdhcGFjaGUyJworICAgUHVyZVBvc2l4UGF0aCgnL2V0Yy9pbml0LmQvYXBhY2hlMicpCisgICA+Pj4gcSA9IFB1cmVQYXRoKCdiaW4nKQorICAgPj4+ICcvdXNyJyAvIHEKKyAgIFB1cmVQb3NpeFBhdGgoJy91c3IvYmluJykKKworVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHBhdGggaXMgdGhlIHJhdyBmaWxlc3lzdGVtIHBhdGggaXRzZWxmCisoaW4gbmF0aXZlIGZvcm0sIGUuZy4gd2l0aCBiYWNrc2xhc2hlcyB1bmRlciBXaW5kb3dzKSwgd2hpY2ggeW91IGNhbgorcGFzcyB0byBhbnkgZnVuY3Rpb24gdGFraW5nIGEgZmlsZSBwYXRoIGFzIGEgc3RyaW5nOjoKKworICAgPj4+IHAgPSBQdXJlUGF0aCgnL2V0YycpCisgICA+Pj4gc3RyKHApCisgICAnL2V0YycKKyAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKyAgID4+PiBzdHIocCkKKyAgICdjOlxcUHJvZ3JhbSBGaWxlcycKKworU2ltaWxhcmx5LCBjYWxsaW5nIDpjbGFzczpgYnl0ZXNgIG9uIGEgcGF0aCBnaXZlcyB0aGUgcmF3IGZpbGVzeXN0ZW0gcGF0aCBhcyBhCitieXRlcyBvYmplY3QsIGFzIGVuY29kZWQgYnkgOmZ1bmM6YG9zLmZzZW5jb2RlYDo6CisKKyAgID4+PiBieXRlcyhwKQorICAgYicvZXRjJworCisuLiBub3RlOjoKKyAgIENhbGxpbmcgOmNsYXNzOmBieXRlc2AgaXMgb25seSByZWNvbW1lbmRlZCB1bmRlciBVbml4LiAgVW5kZXIgV2luZG93cywKKyAgIHRoZSB1bmljb2RlIGZvcm0gaXMgdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBvZiBmaWxlc3lzdGVtIHBhdGhzLgorCisKK0FjY2Vzc2luZyBpbmRpdmlkdWFsIHBhcnRzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUbyBhY2Nlc3MgdGhlIGluZGl2aWR1YWwgInBhcnRzIiAoY29tcG9uZW50cykgb2YgYSBwYXRoLCB1c2UgdGhlIGZvbGxvd2luZworcHJvcGVydHk6CisKKy4uIGRhdGE6OiBQdXJlUGF0aC5wYXJ0cworCisgICBBIHR1cGxlIGdpdmluZyBhY2Nlc3MgdG8gdGhlIHBhdGgncyB2YXJpb3VzIGNvbXBvbmVudHM6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQYXRoKCcvdXNyL2Jpbi9weXRob24zJykKKyAgICAgID4+PiBwLnBhcnRzCisgICAgICAoJy8nLCAndXNyJywgJ2JpbicsICdweXRob24zJykKKworICAgICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvUFNGJykKKyAgICAgID4+PiBwLnBhcnRzCisgICAgICAoJ2M6XFwnLCAnUHJvZ3JhbSBGaWxlcycsICdQU0YnKQorCisgICAobm90ZSBob3cgdGhlIGRyaXZlIGFuZCBsb2NhbCByb290IGFyZSByZWdyb3VwZWQgaW4gYSBzaW5nbGUgcGFydCkKKworCitNZXRob2RzIGFuZCBwcm9wZXJ0aWVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1B1cmUgcGF0aHMgcHJvdmlkZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYW5kIHByb3BlcnRpZXM6CisKKy4uIGRhdGE6OiBQdXJlUGF0aC5kcml2ZQorCisgICBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRyaXZlIGxldHRlciBvciBuYW1lLCBpZiBhbnk6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzLycpLmRyaXZlCisgICAgICAnYzonCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvUHJvZ3JhbSBGaWxlcy8nKS5kcml2ZQorICAgICAgJycKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuZHJpdmUKKyAgICAgICcnCisKKyAgIFVOQyBzaGFyZXMgYXJlIGFsc28gY29uc2lkZXJlZCBkcml2ZXM6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL2hvc3Qvc2hhcmUvZm9vLnR4dCcpLmRyaXZlCisgICAgICAnXFxcXGhvc3RcXHNoYXJlJworCisuLiBkYXRhOjogUHVyZVBhdGgucm9vdAorCisgICBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIChsb2NhbCBvciBnbG9iYWwpIHJvb3QsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykucm9vdAorICAgICAgJ1xcJworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLnJvb3QKKyAgICAgICcnCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLnJvb3QKKyAgICAgICcvJworCisgICBVTkMgc2hhcmVzIGFsd2F5cyBoYXZlIGEgcm9vdDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vaG9zdC9zaGFyZScpLnJvb3QKKyAgICAgICdcXCcKKworLi4gZGF0YTo6IFB1cmVQYXRoLmFuY2hvcgorCisgICBUaGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZHJpdmUgYW5kIHJvb3Q6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzLycpLmFuY2hvcgorICAgICAgJ2M6XFwnCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykuYW5jaG9yCisgICAgICAnYzonCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmFuY2hvcgorICAgICAgJy8nCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL2hvc3Qvc2hhcmUnKS5hbmNob3IKKyAgICAgICdcXFxcaG9zdFxcc2hhcmVcXCcKKworCisuLiBkYXRhOjogUHVyZVBhdGgucGFyZW50cworCisgICBBbiBpbW11dGFibGUgc2VxdWVuY2UgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgbG9naWNhbCBhbmNlc3RvcnMgb2YKKyAgIHRoZSBwYXRoOjoKKworICAgICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6L2Zvby9iYXIvc2V0dXAucHknKQorICAgICAgPj4+IHAucGFyZW50c1swXQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9mb28vYmFyJykKKyAgICAgID4+PiBwLnBhcmVudHNbMV0KKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovZm9vJykKKyAgICAgID4+PiBwLnBhcmVudHNbMl0KKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovJykKKworCisuLiBkYXRhOjogUHVyZVBhdGgucGFyZW50CisKKyAgIFRoZSBsb2dpY2FsIHBhcmVudCBvZiB0aGUgcGF0aDo6CisKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnL2EvYi9jL2QnKQorICAgICAgPj4+IHAucGFyZW50CisgICAgICBQdXJlUG9zaXhQYXRoKCcvYS9iL2MnKQorCisgICBZb3UgY2Fubm90IGdvIHBhc3QgYW4gYW5jaG9yLCBvciBlbXB0eSBwYXRoOjoKKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvJykKKyAgICAgID4+PiBwLnBhcmVudAorICAgICAgUHVyZVBvc2l4UGF0aCgnLycpCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy4nKQorICAgICAgPj4+IHAucGFyZW50CisgICAgICBQdXJlUG9zaXhQYXRoKCcuJykKKworICAgLi4gbm90ZTo6CisgICAgICBUaGlzIGlzIGEgcHVyZWx5IGxleGljYWwgb3BlcmF0aW9uLCBoZW5jZSB0aGUgZm9sbG93aW5nIGJlaGF2aW91cjo6CisKKyAgICAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnZm9vLy4uJykKKyAgICAgICAgID4+PiBwLnBhcmVudAorICAgICAgICAgUHVyZVBvc2l4UGF0aCgnZm9vJykKKworICAgICAgSWYgeW91IHdhbnQgdG8gd2FsayBhbiBhcmJpdHJhcnkgZmlsZXN5c3RlbSBwYXRoIHVwd2FyZHMsIGl0IGlzCisgICAgICByZWNvbW1lbmRlZCB0byBmaXJzdCBjYWxsIDptZXRoOmBQYXRoLnJlc29sdmVgIHNvIGFzIHRvIHJlc29sdmUKKyAgICAgIHN5bWxpbmtzIGFuZCBlbGltaW5hdGUgYCIuLiJgIGNvbXBvbmVudHMuCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLm5hbWUKKworICAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgZXhjbHVkaW5nIHRoZSBkcml2ZSBhbmQKKyAgIHJvb3QsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5L3NldHVwLnB5JykubmFtZQorICAgICAgJ3NldHVwLnB5JworCisgICBVTkMgZHJpdmUgbmFtZXMgYXJlIG5vdCBjb25zaWRlcmVkOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9zb21lL3NoYXJlL3NldHVwLnB5JykubmFtZQorICAgICAgJ3NldHVwLnB5JworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9zb21lL3NoYXJlJykubmFtZQorICAgICAgJycKKworCisuLiBkYXRhOjogUHVyZVBhdGguc3VmZml4CisKKyAgIFRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgZmluYWwgY29tcG9uZW50LCBpZiBhbnk6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS9zZXR1cC5weScpLnN1ZmZpeAorICAgICAgJy5weScKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5neicpLnN1ZmZpeAorICAgICAgJy5neicKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5Jykuc3VmZml4CisgICAgICAnJworCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5zdWZmaXhlcworCisgICBBIGxpc3Qgb2YgdGhlIHBhdGgncyBmaWxlIGV4dGVuc2lvbnM6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS50YXIuZ2FyJykuc3VmZml4ZXMKKyAgICAgIFsnLnRhcicsICcuZ2FyJ10KKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5neicpLnN1ZmZpeGVzCisgICAgICBbJy50YXInLCAnLmd6J10KKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5Jykuc3VmZml4ZXMKKyAgICAgIFtdCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnN0ZW0KKworICAgVGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCB3aXRob3V0IGl0cyBzdWZmaXg6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS50YXIuZ3onKS5zdGVtCisgICAgICAnbGlicmFyeS50YXInCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS50YXInKS5zdGVtCisgICAgICAnbGlicmFyeScKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5Jykuc3RlbQorICAgICAgJ2xpYnJhcnknCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGguYXNfcG9zaXgoKQorCisgICBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhdGggd2l0aCBmb3J3YXJkIHNsYXNoZXMgKGBgL2BgKTo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOlxcd2luZG93cycpCisgICAgICA+Pj4gc3RyKHApCisgICAgICAnYzpcXHdpbmRvd3MnCisgICAgICA+Pj4gcC5hc19wb3NpeCgpCisgICAgICAnYzovd2luZG93cycKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5hc191cmkoKQorCisgICBSZXByZXNlbnQgdGhlIHBhdGggYXMgYSBgYGZpbGVgYCBVUkkuICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYKKyAgIHRoZSBwYXRoIGlzbid0IGFic29sdXRlLgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBwLmFzX3VyaSgpCisgICAgICAnZmlsZTovLy9ldGMvcGFzc3dkJworICAgICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnKQorICAgICAgPj4+IHAuYXNfdXJpKCkKKyAgICAgICdmaWxlOi8vL2M6L1dpbmRvd3MnCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGguaXNfYWJzb2x1dGUoKQorCisgICBSZXR1cm4gd2hldGhlciB0aGUgcGF0aCBpcyBhYnNvbHV0ZSBvciBub3QuICBBIHBhdGggaXMgY29uc2lkZXJlZCBhYnNvbHV0ZQorICAgaWYgaXQgaGFzIGJvdGggYSByb290IGFuZCAoaWYgdGhlIGZsYXZvdXIgYWxsb3dzKSBhIGRyaXZlOjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9hL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnYS9iJykuaXNfYWJzb2x1dGUoKQorICAgICAgRmFsc2UKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovYS9iJykuaXNfYWJzb2x1dGUoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnL2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOicpLmlzX2Fic29sdXRlKCkKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL3NvbWUvc2hhcmUnKS5pc19hYnNvbHV0ZSgpCisgICAgICBUcnVlCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGguaXNfcmVzZXJ2ZWQoKQorCisgICBXaXRoIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYCwgcmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIGlzIGNvbnNpZGVyZWQKKyAgIHJlc2VydmVkIHVuZGVyIFdpbmRvd3MsIGBgRmFsc2VgYCBvdGhlcndpc2UuICBXaXRoIDpjbGFzczpgUHVyZVBvc2l4UGF0aGAsCisgICBgYEZhbHNlYGAgaXMgYWx3YXlzIHJldHVybmVkLgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdudWwnKS5pc19yZXNlcnZlZCgpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbnVsJykuaXNfcmVzZXJ2ZWQoKQorICAgICAgRmFsc2UKKworICAgRmlsZSBzeXN0ZW0gY2FsbHMgb24gcmVzZXJ2ZWQgcGF0aHMgY2FuIGZhaWwgbXlzdGVyaW91c2x5IG9yIGhhdmUKKyAgIHVuaW50ZW5kZWQgZWZmZWN0cy4KKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5qb2lucGF0aCgqb3RoZXIpCisKKyAgIENhbGxpbmcgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBjb21iaW5pbmcgdGhlIHBhdGggd2l0aCBlYWNoIG9mCisgICB0aGUgKm90aGVyKiBhcmd1bWVudHMgaW4gdHVybjo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuam9pbnBhdGgoJ3Bhc3N3ZCcpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmpvaW5wYXRoKFB1cmVQb3NpeFBhdGgoJ3Bhc3N3ZCcpKQorICAgICAgUHVyZVBvc2l4UGF0aCgnL2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5qb2lucGF0aCgnaW5pdC5kJywgJ2FwYWNoZTInKQorICAgICAgUHVyZVBvc2l4UGF0aCgnL2V0Yy9pbml0LmQvYXBhY2hlMicpCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOicpLmpvaW5wYXRoKCcvUHJvZ3JhbSBGaWxlcycpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLm1hdGNoKHBhdHRlcm4pCisKKyAgIE1hdGNoIHRoaXMgcGF0aCBhZ2FpbnN0IHRoZSBwcm92aWRlZCBnbG9iLXN0eWxlIHBhdHRlcm4uICBSZXR1cm4gYGBUcnVlYGAKKyAgIGlmIG1hdGNoaW5nIGlzIHN1Y2Nlc3NmdWwsIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIElmICpwYXR0ZXJuKiBpcyByZWxhdGl2ZSwgdGhlIHBhdGggY2FuIGJlIGVpdGhlciByZWxhdGl2ZSBvciBhYnNvbHV0ZSwKKyAgIGFuZCBtYXRjaGluZyBpcyBkb25lIGZyb20gdGhlIHJpZ2h0OjoKKworICAgICAgPj4+IFB1cmVQYXRoKCdhL2IucHknKS5tYXRjaCgnKi5weScpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVBhdGgoJy9hL2IvYy5weScpLm1hdGNoKCdiLyoucHknKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQYXRoKCcvYS9iL2MucHknKS5tYXRjaCgnYS8qLnB5JykKKyAgICAgIEZhbHNlCisKKyAgIElmICpwYXR0ZXJuKiBpcyBhYnNvbHV0ZSwgdGhlIHBhdGggbXVzdCBiZSBhYnNvbHV0ZSwgYW5kIHRoZSB3aG9sZSBwYXRoCisgICBtdXN0IG1hdGNoOjoKKworICAgICAgPj4+IFB1cmVQYXRoKCcvYS5weScpLm1hdGNoKCcvKi5weScpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVBhdGgoJ2EvYi5weScpLm1hdGNoKCcvKi5weScpCisgICAgICBGYWxzZQorCisgICBBcyB3aXRoIG90aGVyIG1ldGhvZHMsIGNhc2Utc2Vuc2l0aXZpdHkgaXMgb2JzZXJ2ZWQ6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdiLnB5JykubWF0Y2goJyouUFknKQorICAgICAgVHJ1ZQorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLnJlbGF0aXZlX3RvKCpvdGhlcikKKworICAgQ29tcHV0ZSBhIHZlcnNpb24gb2YgdGhpcyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBwYXRoIHJlcHJlc2VudGVkIGJ5CisgICAqb3RoZXIqLiAgSWYgaXQncyBpbXBvc3NpYmxlLCBWYWx1ZUVycm9yIGlzIHJhaXNlZDo6CisKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnL2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IHAucmVsYXRpdmVfdG8oJy8nKQorICAgICAgUHVyZVBvc2l4UGF0aCgnZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5yZWxhdGl2ZV90bygnL2V0YycpCisgICAgICBQdXJlUG9zaXhQYXRoKCdwYXNzd2QnKQorICAgICAgPj4+IHAucmVsYXRpdmVfdG8oJy91c3InKQorICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICBGaWxlICJwYXRobGliLnB5IiwgbGluZSA2OTQsIGluIHJlbGF0aXZlX3RvCisgICAgICAgICAgLmZvcm1hdChzdHIoc2VsZiksIHN0cihmb3JtYXR0ZWQpKSkKKyAgICAgIFZhbHVlRXJyb3I6ICcvZXRjL3Bhc3N3ZCcgZG9lcyBub3Qgc3RhcnQgd2l0aCAnL3VzcicKKworCisuLiBfY29uY3JldGUtcGF0aHM6CisKKworQ29uY3JldGUgcGF0aHMKKy0tLS0tLS0tLS0tLS0tCisKK0NvbmNyZXRlIHBhdGhzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSBwdXJlIHBhdGggY2xhc3Nlcy4gIEluIGFkZGl0aW9uIHRvCitvcGVyYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBsYXR0ZXIsIHRoZXkgYWxzbyBwcm92aWRlIG1ldGhvZHMgdG8gZG8gc3lzdGVtCitjYWxscyBvbiBwYXRoIG9iamVjdHMuICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBpbnN0YW50aWF0ZSBjb25jcmV0ZSBwYXRoczoKKworCisuLiBjbGFzczo6IFBvc2l4UGF0aAorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUGF0aGAgYW5kIDpjbGFzczpgUHVyZVBvc2l4UGF0aGAsIHRoaXMgY2xhc3MKKyAgIHJlcHJlc2VudHMgY29uY3JldGUgbm9uLVdpbmRvd3MgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBQb3NpeFBhdGgoJy9ldGMnKQorICAgICAgUG9zaXhQYXRoKCcvZXRjJykKKworLi4gY2xhc3M6OiBXaW5kb3dzUGF0aAorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUGF0aGAgYW5kIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYCwgdGhpcyBjbGFzcworICAgcmVwcmVzZW50cyBjb25jcmV0ZSBXaW5kb3dzIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykKKyAgICAgIFdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworLi4gY2xhc3M6OiBQYXRoCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBjb25jcmV0ZSBwYXRocyBvZgorICAgdGhlIHN5c3RlbSdzIHBhdGggZmxhdm91ciAoaW5zdGFudGlhdGluZyBpdCBjcmVhdGVzIGVpdGhlciBhCisgICA6Y2xhc3M6YFBvc2l4UGF0aGAgb3IgYSA6Y2xhc3M6YFdpbmRvd3NQYXRoYCk6OgorCisgICAgICA+Pj4gUGF0aCgnc2V0dXAucHknKQorICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisKKworWW91IGNhbiBvbmx5IGluc3RhbnRpYXRlIHRoZSBjbGFzcyBmbGF2b3VyIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBzeXN0ZW0KKyhhbGxvd2luZyBzeXN0ZW0gY2FsbHMgb24gbm9uLWNvbXBhdGlibGUgcGF0aCBmbGF2b3VycyBjb3VsZCBsZWFkIHRvCitidWdzIG9yIGZhaWx1cmVzIGluIHlvdXIgYXBwbGljYXRpb24pOjoKKworICAgPj4+IGltcG9ydCBvcworICAgPj4+IG9zLm5hbWUKKyAgICdwb3NpeCcKKyAgID4+PiBQYXRoKCdzZXR1cC5weScpCisgICBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKyAgID4+PiBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKyAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgPj4+IFdpbmRvd3NQYXRoKCdzZXR1cC5weScpCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgIEZpbGUgInBhdGhsaWIucHkiLCBsaW5lIDc5OCwgaW4gX19uZXdfXworICAgICAgICUgKGNscy5fX25hbWVfXywpKQorICAgTm90SW1wbGVtZW50ZWRFcnJvcjogY2Fubm90IGluc3RhbnRpYXRlICdXaW5kb3dzUGF0aCcgb24geW91ciBzeXN0ZW0KKworCitNZXRob2RzCiteXl5eXl5eCisKK0NvbmNyZXRlIHBhdGhzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIGFkZGl0aW9uIHRvIHB1cmUgcGF0aHMKK21ldGhvZHMuICBNYW55IG9mIHRoZXNlIG1ldGhvZHMgY2FuIHJhaXNlIGFuIDpleGM6YE9TRXJyb3JgIGlmIGEgc3lzdGVtCitjYWxsIGZhaWxzIChmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QpOgorCisuLiBjbGFzc21ldGhvZDo6IFBhdGguY3dkKCkKKworICAgUmV0dXJuIGEgbmV3IHBhdGggb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKGFzIHJldHVybmVkCisgICBieSA6ZnVuYzpgb3MuZ2V0Y3dkYCk6OgorCisgICAgICA+Pj4gUGF0aC5jd2QoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWInKQorCisKKy4uIG1ldGhvZDo6IFBhdGguc3RhdCgpCisKKyAgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhdGggKHNpbWlsYXJseSB0byA6ZnVuYzpgb3Muc3RhdGApLgorICAgVGhlIHJlc3VsdCBpcyBsb29rZWQgdXAgYXQgZWFjaCBjYWxsIHRvIHRoaXMgbWV0aG9kLgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9zaXplCisgICAgICA5NTYKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9tdGltZQorICAgICAgMTMyNzg4MzU0Ny44NTI1NTQKKworCisuLiBtZXRob2Q6OiBQYXRoLmNobW9kKG1vZGUpCisKKyAgIENoYW5nZSB0aGUgZmlsZSBtb2RlIGFuZCBwZXJtaXNzaW9ucywgbGlrZSA6ZnVuYzpgb3MuY2htb2RgOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdzZXR1cC5weScpCisgICAgICA+Pj4gcC5zdGF0KCkuc3RfbW9kZQorICAgICAgMzMyNzcKKyAgICAgID4+PiBwLmNobW9kKDBvNDQ0KQorICAgICAgPj4+IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgIDMzMDYwCisKKworLi4gbWV0aG9kOjogUGF0aC5leGlzdHMoKQorCisgICBXaGV0aGVyIHRoZSBwYXRoIHBvaW50cyB0byBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeTo6CisKKyAgICAgID4+PiBQYXRoKCcuJykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCdzZXR1cC5weScpLmV4aXN0cygpCisgICAgICBUcnVlCisgICAgICA+Pj4gUGF0aCgnL2V0YycpLmV4aXN0cygpCisgICAgICBUcnVlCisgICAgICA+Pj4gUGF0aCgnbm9uZXhpc3RlbnRmaWxlJykuZXhpc3RzKCkKKyAgICAgIEZhbHNlCisKKyAgIC4uIG5vdGU6OgorICAgICAgSWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltbGluaywgOm1ldGg6YGV4aXN0c2AgcmV0dXJucyB3aGV0aGVyIHRoZQorICAgICAgc3ltbGluayAqcG9pbnRzIHRvKiBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeS4KKworCisuLiBtZXRob2Q6OiBQYXRoLmdsb2IocGF0dGVybikKKworICAgR2xvYiB0aGUgZ2l2ZW4gKnBhdHRlcm4qIGluIHRoZSBkaXJlY3RvcnkgcmVwcmVzZW50ZWQgYnkgdGhpcyBwYXRoLAorICAgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGZpbGVzIChvZiBhbnkga2luZCk6OgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoJy4nKS5nbG9iKCcqLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdwYXRobGliLnB5JyksIFBvc2l4UGF0aCgnc2V0dXAucHknKSwgUG9zaXhQYXRoKCd0ZXN0X3BhdGhsaWIucHknKV0KKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgnLicpLmdsb2IoJyovKi5weScpKQorICAgICAgW1Bvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyldCisKKyAgIFRoZSAiYGAqKmBgIiBwYXR0ZXJuIG1lYW5zICJ0aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHN1YmRpcmVjdG9yaWVzLAorICAgcmVjdXJzaXZlbHkiLiAgSW4gb3RoZXIgd29yZHMsIGl0IGVuYWJsZXMgcmVjdXJzaXZlIGdsb2JiaW5nOjoKKworICAgICAgPj4+IHNvcnRlZChQYXRoKCcuJykuZ2xvYignKiovKi5weScpKQorICAgICAgW1Bvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorCisgICAuLiBub3RlOjoKKyAgICAgIFVzaW5nIHRoZSAiYGAqKmBgIiBwYXR0ZXJuIGluIGxhcmdlIGRpcmVjdG9yeSB0cmVlcyBtYXkgY29uc3VtZQorICAgICAgYW4gaW5vcmRpbmF0ZSBhbW91bnQgb2YgdGltZS4KKworCisuLiBtZXRob2Q6OiBQYXRoLmdyb3VwKCkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBncm91cCBvd25pbmcgdGhlIGZpbGUuICA6ZXhjOmBLZXlFcnJvcmAgaXMgdGhyb3duCisgICBpZiB0aGUgZmlsZSdzIGdpZCBpc24ndCBmb3VuZCBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfZGlyKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIGRpcmVjdG9yeSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19maWxlKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHJlZ3VsYXIgZmlsZSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIHJlZ3VsYXIgZmlsZSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19zeW1saW5rKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWJvbGljIGxpbmssIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Q7IG90aGVyIGVycm9ycyAoc3VjaAorICAgYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfc29ja2V0KCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIFVuaXggc29ja2V0IChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgVW5peCBzb2NrZXQpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfZmlmbygpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBGSUZPIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgRklGTyksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19ibG9ja19kZXZpY2UoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgYmxvY2sgZGV2aWNlIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgYmxvY2sgZGV2aWNlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2NoYXJfZGV2aWNlKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGNoYXJhY3RlciBkZXZpY2UgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBjaGFyYWN0ZXIgZGV2aWNlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLml0ZXJkaXIoKQorCisgICBXaGVuIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwgeWllbGQgcGF0aCBvYmplY3RzIG9mIHRoZSBkaXJlY3RvcnkKKyAgIGNvbnRlbnRzOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdkb2NzJykKKyAgICAgID4+PiBmb3IgY2hpbGQgaW4gcC5pdGVyZGlyKCk6IGNoaWxkCisgICAgICAuLi4KKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9fdGVtcGxhdGVzJykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9tYWtlLmJhdCcpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvaW5kZXgucnN0JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9fYnVpbGQnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL19zdGF0aWMnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL01ha2VmaWxlJykKKworLi4gbWV0aG9kOjogUGF0aC5sY2htb2QobW9kZSkKKworICAgTGlrZSA6bWV0aDpgUGF0aC5jaG1vZGAgYnV0LCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1ib2xpYyBsaW5rLCB0aGUKKyAgIHN5bWJvbGljIGxpbmsncyBtb2RlIGlzIGNoYW5nZWQgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgubHN0YXQoKQorCisgICBMaWtlIDptZXRoOmBQYXRoLnN0YXRgIGJ1dCwgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltYm9saWMgbGluaywgcmV0dXJuCisgICB0aGUgc3ltYm9saWMgbGluaydzIGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKworCisuLiBtZXRob2Q6OiBQYXRoLm1rZGlyKG1vZGU9MG83NzcsIHBhcmVudHM9RmFsc2UpCisKKyAgIENyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgYXQgdGhpcyBnaXZlbiBwYXRoLiAgSWYgKm1vZGUqIGlzIGdpdmVuLCBpdCBpcworICAgY29tYmluZWQgd2l0aCB0aGUgcHJvY2VzcycgYGB1bWFza2BgIHZhbHVlIHRvIGRldGVybWluZSB0aGUgZmlsZSBtb2RlCisgICBhbmQgYWNjZXNzIGZsYWdzLiAgSWYgdGhlIHBhdGggYWxyZWFkeSBleGlzdHMsIDpleGM6YE9TRXJyb3JgIGlzIHJhaXNlZC4KKworICAgSWYgKnBhcmVudHMqIGlzIHRydWUsIGFueSBtaXNzaW5nIHBhcmVudHMgb2YgdGhpcyBwYXRoIGFyZSBjcmVhdGVkCisgICBhcyBuZWVkZWQuICBJZiAqcGFyZW50cyogaXMgZmFsc2UgKHRoZSBkZWZhdWx0KSwgYSBtaXNzaW5nIHBhcmVudCByYWlzZXMKKyAgIDpleGM6YE9TRXJyb3JgLgorCisKKy4uIG1ldGhvZDo6IFBhdGgub3Blbihtb2RlPSdyJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKQorCisgICBPcGVuIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGgsIGxpa2UgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYAorICAgZnVuY3Rpb24gZG9lczo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnc2V0dXAucHknKQorICAgICAgPj4+IHdpdGggcC5vcGVuKCkgYXMgZjoKKyAgICAgIC4uLiAgICAgZi5yZWFkbGluZSgpCisgICAgICAuLi4KKyAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zXG4nCisKKworLi4gbWV0aG9kOjogUGF0aC5vd25lcigpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgdXNlciBvd25pbmcgdGhlIGZpbGUuICA6ZXhjOmBLZXlFcnJvcmAgaXMgdGhyb3duCisgICBpZiB0aGUgZmlsZSdzIHVpZCBpc24ndCBmb3VuZCBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmVuYW1lKHRhcmdldCkKKworICAgUmVuYW1lIHRoaXMgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIGdpdmVuICp0YXJnZXQqLiAgKnRhcmdldCogY2FuIGJlCisgICBlaXRoZXIgYSBzdHJpbmcgb3IgYW5vdGhlciBwYXRoIG9iamVjdDo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnZm9vJykKKyAgICAgID4+PiBwLm9wZW4oJ3cnKS53cml0ZSgnc29tZSB0ZXh0JykKKyAgICAgIDkKKyAgICAgID4+PiB0YXJnZXQgPSBQYXRoKCdiYXInKQorICAgICAgPj4+IHAucmVuYW1lKHRhcmdldCkKKyAgICAgID4+PiB0YXJnZXQub3BlbigpLnJlYWQoKQorICAgICAgJ3NvbWUgdGV4dCcKKworCisuLiBtZXRob2Q6OiBQYXRoLnJlcGxhY2UodGFyZ2V0KQorCisgICBSZW5hbWUgdGhpcyBmaWxlIG9yIGRpcmVjdG9yeSB0byB0aGUgZ2l2ZW4gKnRhcmdldCouICBJZiAqdGFyZ2V0KiBwb2ludHMKKyAgIHRvIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LCBpdCB3aWxsIGJlIHVuY29uZGl0aW9uYWxseSByZXBsYWNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnJlc29sdmUoKQorCisgICBNYWtlIHRoZSBwYXRoIGFic29sdXRlLCByZXNvbHZpbmcgYW55IHN5bWxpbmtzLiAgQSBuZXcgcGF0aCBvYmplY3QgaXMKKyAgIHJldHVybmVkOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCkKKyAgICAgID4+PiBwCisgICAgICBQb3NpeFBhdGgoJy4nKQorICAgICAgPj4+IHAucmVzb2x2ZSgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYicpCisKKyAgIGAiLi4iYCBjb21wb25lbnRzIGFyZSBhbHNvIGVsaW1pbmF0ZWQgKHRoaXMgaXMgdGhlIG9ubHkgbWV0aG9kIHRvIGRvIHNvKTo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnZG9jcy8uLi9zZXR1cC5weScpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliL3NldHVwLnB5JykKKworICAgSWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgOmV4YzpgRmlsZU5vdEZvdW5kRXJyb3JgIGlzIHJhaXNlZC4gIElmIGFuCisgICBpbmZpbml0ZSBsb29wIGlzIGVuY291bnRlcmVkIGFsb25nIHRoZSByZXNvbHV0aW9uIHBhdGgsCisgICA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnJnbG9iKHBhdHRlcm4pCisKKyAgIFRoaXMgaXMgbGlrZSBjYWxsaW5nIDptZXRoOmBnbG9iYCB3aXRoICJgYCoqYGAiIGFkZGVkIGluIGZyb250IG9mIHRoZQorICAgZ2l2ZW4gKnBhdHRlcm4qOgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoKS5yZ2xvYigiKi5weSIpKQorICAgICAgW1Bvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorCisKKy4uIG1ldGhvZDo6IFBhdGgucm1kaXIoKQorCisgICBSZW1vdmUgdGhpcyBkaXJlY3RvcnkuICBUaGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuCisKKworLi4gbWV0aG9kOjogUGF0aC5zeW1saW5rX3RvKHRhcmdldCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSkKKworICAgTWFrZSB0aGlzIHBhdGggYSBzeW1ib2xpYyBsaW5rIHRvICp0YXJnZXQqLiAgVW5kZXIgV2luZG93cywKKyAgICp0YXJnZXRfaXNfZGlyZWN0b3J5KiBtdXN0IGJlIHRydWUgKGRlZmF1bHQgYGBGYWxzZWBgKSBpZiB0aGUgbGluaydzIHRhcmdldAorICAgaXMgYSBkaXJlY3RvcnkuICBVbmRlciBQT1NJWCwgKnRhcmdldF9pc19kaXJlY3RvcnkqJ3MgdmFsdWUgaXMgaWdub3JlZC4KKworICAgICAgPj4+IHAgPSBQYXRoKCdteWxpbmsnKQorICAgICAgPj4+IHAuc3ltbGlua190bygnc2V0dXAucHknKQorICAgICAgPj4+IHAucmVzb2x2ZSgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYi9zZXR1cC5weScpCisgICAgICA+Pj4gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgOTU2CisgICAgICA+Pj4gcC5sc3RhdCgpLnN0X3NpemUKKyAgICAgIDgKKworICAgLi4gbm90ZTo6CisgICAgICBUaGUgb3JkZXIgb2YgYXJndW1lbnRzIChsaW5rLCB0YXJnZXQpIGlzIHRoZSByZXZlcnNlCisgICAgICBvZiA6ZnVuYzpgb3Muc3ltbGlua2Ancy4KKworCisuLiBtZXRob2Q6OiBQYXRoLnRvdWNoKG1vZGU9MG83NzcsIGV4aXN0X29rPVRydWUpCisKKyAgIENyZWF0ZSBhIGZpbGUgYXQgdGhpcyBnaXZlbiBwYXRoLiAgSWYgKm1vZGUqIGlzIGdpdmVuLCBpdCBpcyBjb21iaW5lZAorICAgd2l0aCB0aGUgcHJvY2VzcycgYGB1bWFza2BgIHZhbHVlIHRvIGRldGVybWluZSB0aGUgZmlsZSBtb2RlIGFuZCBhY2Nlc3MKKyAgIGZsYWdzLiAgSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBpZiAqZXhpc3Rfb2sqCisgICBpcyB0cnVlIChhbmQgaXRzIG1vZGlmaWNhdGlvbiB0aW1lIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZSksCisgICBvdGhlcndpc2UgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgudW5saW5rKCkKKworICAgUmVtb3ZlIHRoaXMgZmlsZSBvciBzeW1ib2xpYyBsaW5rLiAgSWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5LAorICAgdXNlIDpmdW5jOmBQYXRoLnJtZGlyYCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGRiLnJzdCBiL0RvYy9saWJyYXJ5L3BkYi5yc3QKaW5kZXggZjRlMzdhYy4uNDhhOGE2YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGRiLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wZGIucnN0CkBAIC00MSw3ICs0MSw3IEBACiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgVGFiLWNvbXBsZXRpb24gdmlhIHRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIGlzIGF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kCiAgICBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzCi0gICBhcmd1bWVudHMgb2YgdGhlIGBgcHJpbnRgYCBjb21tYW5kLgorICAgYXJndW1lbnRzIG9mIHRoZSBgYHBgYCBjb21tYW5kLgogCiA6ZmlsZTpgcGRiLnB5YCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuICBGb3IKIGV4YW1wbGU6OgpAQCAtMzA5LDcgKzMwOSw3IEBACiAgICBgYGVuZGBgIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6OgogCiAgICAgICAoUGRiKSBjb21tYW5kcyAxCi0gICAgICAoY29tKSBwcmludCBzb21lX3ZhcmlhYmxlCisgICAgICAoY29tKSBwIHNvbWVfdmFyaWFibGUKICAgICAgIChjb20pIGVuZAogICAgICAgKFBkYikKIApAQCAtNDAzLDEzICs0MDMsMTkgQEAKIAogICAgUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCiAKLS4uIHBkYmNvbW1hbmQ6OiBwKHJpbnQpIGV4cHJlc3Npb24KKy4uIHBkYmNvbW1hbmQ6OiBwIGV4cHJlc3Npb24KIAogICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHMgdmFsdWUuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBgYHByaW50KClgYCBjYW4gYWxzbyBiZSB1c2VkLCBidXQgaXMgbm90IGEgZGVidWdnZXIgY29tbWFuZCAtLS0gdGhpcyBleGVjdXRlcyB0aGUKKyAgICAgIFB5dGhvbiA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uLgorCisKIC4uIHBkYmNvbW1hbmQ6OiBwcCBleHByZXNzaW9uCiAKLSAgIExpa2UgdGhlIDpwZGJjbWQ6YHByaW50YCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzCisgICBMaWtlIHRoZSA6cGRiY21kOmBwYCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzCiAgICBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGUgOm1vZDpgcHByaW50YCBtb2R1bGUuCiAKIC4uIHBkYmNvbW1hbmQ6OiB3aGF0aXMgZXhwcmVzc2lvbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGlja2xlLnJzdCBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKaW5kZXggYTk5MTE3Yy4uNDllYzljMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9waWNrbGUucnN0CkBAIC0zODQsNyArMzg0LDggQEAKIAogKiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBhbmQgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgb25seSBwaWNrbGFibGUgb2JqZWN0cwogCi0qIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUKKyogZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZSAodXNpbmcgOmtleXdvcmQ6YGRlZmAsIG5vdAorICA6a2V5d29yZDpgbGFtYmRhYCkKIAogKiBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlCiAKQEAgLTQwMiw3ICs0MDMsNyBAQAogOmZ1bmM6YHN5cy5zZXRyZWN1cnNpb25saW1pdGAuCiAKIE5vdGUgdGhhdCBmdW5jdGlvbnMgKGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQpIGFyZSBwaWNrbGVkIGJ5ICJmdWxseSBxdWFsaWZpZWQiCi1uYW1lIHJlZmVyZW5jZSwgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGZ1bmN0aW9uIG5hbWUgaXMKK25hbWUgcmVmZXJlbmNlLCBub3QgYnkgdmFsdWUuIFsjXV8gIFRoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lIGlzCiBwaWNrbGVkLCBhbG9uZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4uICBOZWl0aGVyCiB0aGUgZnVuY3Rpb24ncyBjb2RlLCBub3IgYW55IG9mIGl0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIGFyZSBwaWNrbGVkLiAgVGh1cyB0aGUKIGRlZmluaW5nIG1vZHVsZSBtdXN0IGJlIGltcG9ydGFibGUgaW4gdGhlIHVucGlja2xpbmcgZW52aXJvbm1lbnQsIGFuZCB0aGUgbW9kdWxlCkBAIC00NTgsMTIgKzQ1OSwyOSBAQAogQ2xhc3NlcyBjYW4gYWx0ZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGJ5IHByb3ZpZGluZyBvbmUgb3Igc2V2ZXJhbCBzcGVjaWFsCiBtZXRob2RzOgogCisuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRuZXdhcmdzX2V4X18oKQorCisgICBJbiBwcm90b2NvbHMgNCBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZQorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlCisgICA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24gdW5waWNrbGluZy4gIFRoZSBtZXRob2QgbXVzdCByZXR1cm4gYSBwYWlyCisgICBgYChhcmdzLCBrd2FyZ3MpYGAgd2hlcmUgKmFyZ3MqIGlzIGEgdHVwbGUgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMKKyAgIGFuZCAqa3dhcmdzKiBhIGRpY3Rpb25hcnkgb2YgbmFtZWQgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RpbmcgdGhlCisgICBvYmplY3QuICBUaG9zZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uCisgICB1bnBpY2tsaW5nLgorCisgICBZb3Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIG1ldGhvZCBpZiB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCBvZiB5b3VyCisgICBjbGFzcyByZXF1aXJlcyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiAgT3RoZXJ3aXNlLCBpdCBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIGNvbXBhdGliaWxpdHkgdG8gaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2AuCisKKwogLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0bmV3YXJnc19fKCkKIAotICAgSW4gcHJvdG9jb2wgMiBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZSA6bWV0aDpgX19nZXRuZXdhcmdzX19gCi0gICBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbgotICAgdW5waWNrbGluZy4gIFRoaXMgaXMgb2Z0ZW4gbmVlZGVkIGZvciBjbGFzc2VzIHdob3NlIDptZXRoOmBfX25ld19fYCBtZXRob2QKLSAgIHJlcXVpcmVzIGFyZ3VtZW50cy4KKyAgIFRoaXMgbWV0aG9kIHNlcnZlIGEgc2ltaWxhciBwdXJwb3NlIGFzIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgYnV0CisgICBmb3IgcHJvdG9jb2xzIDIgYW5kIG5ld2VyLiAgSXQgbXVzdCByZXR1cm4gYSB0dXBsZSBvZiBhcmd1bWVudHMgYGFyZ3NgCisgICB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uIHVucGlja2xpbmcuCisKKyAgIEluIHByb3RvY29scyA0IGFuZCBuZXdlciwgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCB3aWxsIG5vdCBiZSBjYWxsZWQgaWYKKyAgIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgaXMgZGVmaW5lZC4KIAogCiAuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRzdGF0ZV9fKCkKQEAgLTQ5NSwxMCArNTEzLDEwIEBACiAKICAgIEF0IHVucGlja2xpbmcgdGltZSwgc29tZSBtZXRob2RzIGxpa2UgOm1ldGg6YF9fZ2V0YXR0cl9fYCwKICAgIDptZXRoOmBfX2dldGF0dHJpYnV0ZV9fYCwgb3IgOm1ldGg6YF9fc2V0YXR0cl9fYCBtYXkgYmUgY2FsbGVkIHVwb24gdGhlCi0gICBpbnN0YW5jZS4gIEluIGNhc2UgdGhvc2UgbWV0aG9kcyByZWx5IG9uIHNvbWUgaW50ZXJuYWwgaW52YXJpYW50IGJlaW5nIHRydWUsCi0gICB0aGUgdHlwZSBzaG91bGQgaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2AgdG8gZXN0YWJsaXNoIHN1Y2ggYW4KLSAgIGludmFyaWFudDsgb3RoZXJ3aXNlLCBuZWl0aGVyIDptZXRoOmBfX25ld19fYCBub3IgOm1ldGg6YF9faW5pdF9fYCB3aWxsIGJlCi0gICBjYWxsZWQuCisgICBpbnN0YW5jZS4gIEluIGNhc2UgdGhvc2UgbWV0aG9kcyByZWx5IG9uIHNvbWUgaW50ZXJuYWwgaW52YXJpYW50IGJlaW5nCisgICB0cnVlLCB0aGUgdHlwZSBzaG91bGQgaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2Agb3IKKyAgIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgdG8gZXN0YWJsaXNoIHN1Y2ggYW4gaW52YXJpYW50OyBvdGhlcndpc2UsCisgICBuZWl0aGVyIDptZXRoOmBfX25ld19fYCBub3IgOm1ldGg6YF9faW5pdF9fYCB3aWxsIGJlIGNhbGxlZC4KIAogLi4gaW5kZXg6OiBwYWlyOiBjb3B5OyBwcm90b2NvbAogCkBAIC01MTAsNyArNTI4LDcgQEAKIAogQWx0aG91Z2ggcG93ZXJmdWwsIGltcGxlbWVudGluZyA6bWV0aDpgX19yZWR1Y2VfX2AgZGlyZWN0bHkgaW4geW91ciBjbGFzc2VzIGlzCiBlcnJvciBwcm9uZS4gIEZvciB0aGlzIHJlYXNvbiwgY2xhc3MgZGVzaWduZXJzIHNob3VsZCB1c2UgdGhlIGhpZ2gtbGV2ZWwKLWludGVyZmFjZSAoaS5lLiwgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCwgOm1ldGg6YF9fZ2V0c3RhdGVfX2AgYW5kCitpbnRlcmZhY2UgKGkuZS4sIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AsIDptZXRoOmBfX2dldHN0YXRlX19gIGFuZAogOm1ldGg6YF9fc2V0c3RhdGVfX2ApIHdoZW5ldmVyIHBvc3NpYmxlLiAgV2Ugd2lsbCBzaG93LCBob3dldmVyLCBjYXNlcyB3aGVyZQogdXNpbmcgOm1ldGg6YF9fcmVkdWNlX19gIGlzIHRoZSBvbmx5IG9wdGlvbiBvciBsZWFkcyB0byBtb3JlIGVmZmljaWVudCBwaWNrbGluZwogb3IgYm90aC4KQEAgLTg1MCw2ICs4NjgsOSBAQAogCiAuLiBbI10gRG9uJ3QgY29uZnVzZSB0aGlzIHdpdGggdGhlIDptb2Q6YG1hcnNoYWxgIG1vZHVsZQogCisuLiBbI10gVGhpcyBpcyB3aHkgOmtleXdvcmQ6YGxhbWJkYWAgZnVuY3Rpb25zIGNhbm5vdCBiZSBwaWNrbGVkOiAgYWxsCisgICAgOmtleXdvcmQ6YGxhbWJkYWAgZnVuY3Rpb25zIHNoYXJlIHRoZSBzYW1lIG5hbWU6ICBgYDxsYW1iZGE+YGAuCisKIC4uIFsjXSBUaGUgZXhjZXB0aW9uIHJhaXNlZCB3aWxsIGxpa2VseSBiZSBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgb3IgYW4KICAgIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdCBiL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdAppbmRleCBhMjY3MzY4Li45MmRlODYwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CkBAIC0xNiwyNiArMTYsMjEgQEAKIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgInByb3BlcnR5IGxpc3QiCi1YTUwgZmlsZXMgdXNlZCBtYWlubHkgYnkgTWFjIE9TIFguCitmaWxlcyB1c2VkIG1haW5seSBieSBNYWMgT1MgWCBhbmQgc3VwcG9ydHMgYm90aCBiaW5hcnkgYW5kIFhNTCBwbGlzdCBmaWxlcy4KIAotVGhlIHByb3BlcnR5IGxpc3QgKGBgLnBsaXN0YGApIGZpbGUgZm9ybWF0IGlzIGEgc2ltcGxlIFhNTCBwaWNrbGUgc3VwcG9ydGluZworVGhlIHByb3BlcnR5IGxpc3QgKGBgLnBsaXN0YGApIGZpbGUgZm9ybWF0IGlzIGEgc2ltcGxlIHNlcmlhbGl6YXRpb24gc3VwcG9ydGluZwogYmFzaWMgb2JqZWN0IHR5cGVzLCBsaWtlIGRpY3Rpb25hcmllcywgbGlzdHMsIG51bWJlcnMgYW5kIHN0cmluZ3MuICBVc3VhbGx5IHRoZQogdG9wIGxldmVsIG9iamVjdCBpcyBhIGRpY3Rpb25hcnkuCiAKLVRvIHdyaXRlIG91dCBhbmQgdG8gcGFyc2UgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIDpmdW5jOmB3cml0ZVBsaXN0YCBhbmQKLTpmdW5jOmByZWFkUGxpc3RgIGZ1bmN0aW9ucy4KK1RvIHdyaXRlIG91dCBhbmQgdG8gcGFyc2UgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIDpmdW5jOmBkdW1wYCBhbmQKKzpmdW5jOmBsb2FkYCBmdW5jdGlvbnMuCiAKLVRvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHVzZSA6ZnVuYzpgd3JpdGVQbGlzdFRvQnl0ZXNgCi1hbmQgOmZ1bmM6YHJlYWRQbGlzdEZyb21CeXRlc2AuCitUbyB3b3JrIHdpdGggcGxpc3QgZGF0YSBpbiBieXRlcyBvYmplY3RzLCB1c2UgOmZ1bmM6YGR1bXBzYAorYW5kIDpmdW5jOmBsb2Fkc2AuCiAKIFZhbHVlcyBjYW4gYmUgc3RyaW5ncywgaW50ZWdlcnMsIGZsb2F0cywgYm9vbGVhbnMsIHR1cGxlcywgbGlzdHMsIGRpY3Rpb25hcmllcwotKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCA6Y2xhc3M6YERhdGFgIG9yIDpjbGFzczpgZGF0ZXRpbWUuZGF0ZXRpbWVgCi1vYmplY3RzLiAgU3RyaW5nIHZhbHVlcyAoaW5jbHVkaW5nIGRpY3Rpb25hcnkga2V5cykgaGF2ZSB0byBiZSB1bmljb2RlIHN0cmluZ3MgLS0KLXRoZXkgd2lsbCBiZSB3cml0dGVuIG91dCBhcyBVVEYtOC4KLQotVGhlIGBgPGRhdGE+YGAgcGxpc3QgdHlwZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgOmNsYXNzOmBEYXRhYCBjbGFzcy4gIFRoaXMgaXMKLWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFB5dGhvbiBieXRlcyBvYmplY3QuICBVc2UgOmNsYXNzOmBEYXRhYCBpZiB5b3VyIHN0cmluZ3MKLWNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzLgorKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCA6Y2xhc3M6YERhdGFgLCA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlc2FycmF5YAorb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAgb2JqZWN0cy4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTQ1LDM3ICs0MCwxNDUgQEAKIAogVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAotLi4gZnVuY3Rpb246OiByZWFkUGxpc3QocGF0aE9yRmlsZSkKKy4uIGZ1bmN0aW9uOjogbG9hZChmcCwgXCosIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlLCBkaWN0X3R5cGU9ZGljdCkKIAotICAgUmVhZCBhIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgZWl0aGVyIGJlIGEgZmlsZSBuYW1lIG9yIGEgKHJlYWRhYmxlIGFuZAotICAgYmluYXJ5KSBmaWxlIG9iamVjdC4gIFJldHVybiB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkgaXMgYQorICAgUmVhZCBhIHBsaXN0IGZpbGUuICpmcCogc2hvdWxkIGJlIGEgcmVhZGFibGUgYW5kIGJpbmFyeSBmaWxlIG9iamVjdC4KKyAgIFJldHVybiB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkgaXMgYQogICAgZGljdGlvbmFyeSkuCiAKLSAgIFRoZSBYTUwgZGF0YSBpcyBwYXJzZWQgdXNpbmcgdGhlIEV4cGF0IHBhcnNlciBmcm9tIDptb2Q6YHhtbC5wYXJzZXJzLmV4cGF0YAotICAgLS0gc2VlIGl0cyBkb2N1bWVudGF0aW9uIGZvciBwb3NzaWJsZSBleGNlcHRpb25zIG9uIGlsbC1mb3JtZWQgWE1MLgotICAgVW5rbm93biBlbGVtZW50cyB3aWxsIHNpbXBseSBiZSBpZ25vcmVkIGJ5IHRoZSBwbGlzdCBwYXJzZXIuCisgICBUaGUgKmZtdCogaXMgdGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBhbmQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHZhbGlkOgorCisgICAqIDpkYXRhOmBOb25lYDogQXV0b2RldGVjdCB0aGUgZmlsZSBmb3JtYXQKKworICAgKiA6ZGF0YTpgRk1UX1hNTGA6IFhNTCBmaWxlIGZvcm1hdAorCisgICAqIDpkYXRhOmBGTVRfQklOQVJZYDogQmluYXJ5IHBsaXN0IGZvcm1hdAorCisgICBJZiAqdXNlX2J1aWx0aW5fdHlwZXMqIGlzIFRydWUgKHRoZSBkZWZhdWx0KSBiaW5hcnkgZGF0YSB3aWxsIGJlIHJldHVybmVkCisgICBhcyBpbnN0YW5jZXMgb2YgOmNsYXNzOmBieXRlc2AsIG90aGVyd2lzZSBpdCBpcyByZXR1cm5lZCBhcyBpbnN0YW5jZXMgb2YKKyAgIDpjbGFzczpgRGF0YWAuCisKKyAgIFRoZSAqZGljdF90eXBlKiBpcyB0aGUgdHlwZSB1c2VkIGZvciBkaWN0aW9uYXJpZXMgdGhhdCBhcmUgcmVhZCBmcm9tIHRoZQorICAgcGxpc3QgZmlsZS4gVGhlIGV4YWN0IHN0cnVjdHVyZSBvZiB0aGUgcGxpc3QgY2FuIGJlIHJlY292ZXJlZCBieSB1c2luZworICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgKGFsdGhvdWdoIHRoZSBvcmRlciBvZiBrZXlzIHNob3VsZG4ndCBiZQorICAgaW1wb3J0YW50IGluIHBsaXN0IGZpbGVzKS4KKworICAgWE1MIGRhdGEgZm9yIHRoZSA6ZGF0YTpgRk1UX1hNTGAgZm9ybWF0IGlzIHBhcnNlZCB1c2luZyB0aGUgRXhwYXQgcGFyc2VyCisgICBmcm9tIDptb2Q6YHhtbC5wYXJzZXJzLmV4cGF0YCAtLSBzZWUgaXRzIGRvY3VtZW50YXRpb24gZm9yIHBvc3NpYmxlCisgICBleGNlcHRpb25zIG9uIGlsbC1mb3JtZWQgWE1MLiAgVW5rbm93biBlbGVtZW50cyB3aWxsIHNpbXBseSBiZSBpZ25vcmVkCisgICBieSB0aGUgcGxpc3QgcGFyc2VyLgorCisgICBUaGUgcGFyc2VyIGZvciB0aGUgYmluYXJ5IGZvcm1hdCByYWlzZXMgOmV4YzpgSW52YWxpZEZpbGVFeGNlcHRpb25gCisgICB3aGVuIHRoZSBmaWxlIGNhbm5vdCBiZSBwYXJzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogbG9hZHMoZGF0YSwgXCosIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlLCBkaWN0X3R5cGU9ZGljdCkKKworICAgTG9hZCBhIHBsaXN0IGZyb20gYSBieXRlcyBvYmplY3QuIFNlZSA6ZnVuYzpgbG9hZGAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mCisgICB0aGUga2V5d29yZCBhcmd1bWVudHMuCisKKworLi4gZnVuY3Rpb246OiBkdW1wKHZhbHVlLCBmcCwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFdyaXRlICp2YWx1ZSogdG8gYSBwbGlzdCBmaWxlLiAqRnAqIHNob3VsZCBiZSBhIHdyaXRhYmxlLCBiaW5hcnkKKyAgIGZpbGUgb2JqZWN0LgorCisgICBUaGUgKmZtdCogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHBsaXN0IGZpbGUgYW5kIGNhbiBiZQorICAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZvcm1hdHRlZCBwbGlzdCBmaWxlCisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgZm9ybWF0dGVkIHBsaXN0IGZpbGUKKworICAgV2hlbiAqc29ydF9rZXlzKiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgdGhlIGtleXMgZm9yIGRpY3Rpb25hcmllcyB3aWxsIGJlCisgICB3cml0dGVuIHRvIHRoZSBwbGlzdCBpbiBzb3J0ZWQgb3JkZXIsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgd3JpdHRlbiBpbgorICAgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGUgZGljdGlvbmFyeS4KKworICAgV2hlbiAqc2tpcGtleXMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgdGhlIGZ1bmN0aW9uIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgCisgICB3aGVuIGEga2V5IG9mIGEgZGljdGlvbmFyeSBpcyBub3QgYSBzdHJpbmcsIG90aGVyd2lzZSBzdWNoIGtleXMgYXJlIHNraXBwZWQuCisKKyAgIEEgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb2JqZWN0IGlzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUgb3IKKyAgIGEgY29udGFpbmVyIHRoYXQgY29udGFpbnMgb2JqZWN0cyBvZiB1bnN1cHBvcnRlZCB0eXBlcy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqZm10KiwgKnNvcnRfa2V5cyogYW5kICpza2lwa2V5cyogYXJndW1lbnRzLgorCisKKy4uIGZ1bmN0aW9uOjogZHVtcHModmFsdWUsIFwqLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorCisgICBSZXR1cm4gKnZhbHVlKiBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuIFNlZQorICAgdGhlIGRvY3VtZW50YXRpb24gZm9yIDpmdW5jOmBkdW1wYCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGtleXdvcmQKKyAgIGFyZ3VtZW50cyBvZiB0aGlzIGZ1bmN0aW9uLgorCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkOgorCisuLiBmdW5jdGlvbjo6IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorCisgICBSZWFkIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBiZSBlaXRoZXIgYSBmaWxlIG5hbWUgb3IgYSAocmVhZGFibGUKKyAgIGFuZCBiaW5hcnkpIGZpbGUgb2JqZWN0LiBSZXR1cm5zIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseQorICAgaXMgYSBkaWN0aW9uYXJ5KS4KKworICAgVGhpcyBmdW5jdGlvbiBjYWxscyA6ZnVuYzpgbG9hZGAgdG8gZG8gdGhlIGFjdHVhbCB3b3JrLCB0aGUgdGhlIGRvY3VtZW50YXRpb24KKyAgIG9mIDpmdW5jOmB0aGF0IGZ1bmN0aW9uIDxsb2FkPmAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIERpY3QgdmFsdWVzIGluIHRoZSByZXN1bHQgaGF2ZSBhIGBgX19nZXRhdHRyX19gYCBtZXRob2QgdGhhdCBkZWZlcnMKKyAgICAgIHRvIGBgX19nZXRpdGVtX2BgLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiB1c2UgYXR0cmlidXRlIGFjY2VzcyB0bworICAgICAgYWNjZXNzIGl0ZW1zIG9mIHRoZXNlIGRpY3Rpb25hcmllcy4KKworICAgLi4gZGVwcmVjYXRlZDogMy40IFVzZSA6ZnVuYzpgbG9hZGAgaW5zdGVhZC4KIAogCiAuLiBmdW5jdGlvbjo6IHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgcGF0aE9yRmlsZSkKIAotICAgIFdyaXRlICpyb290T2JqZWN0KiB0byBhIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgZWl0aGVyIGJlIGEgZmlsZSBuYW1lCi0gICAgb3IgYSAod3JpdGFibGUgYW5kIGJpbmFyeSkgZmlsZSBvYmplY3QuCisgICBXcml0ZSAqcm9vdE9iamVjdCogdG8gYW4gWE1MIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgYmUgZWl0aGVyIGEgZmlsZSBuYW1lCisgICBvciBhICh3cml0YWJsZSBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdAogCi0gICAgQSA6ZXhjOmBUeXBlRXJyb3JgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBvYmplY3QgaXMgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZSBvcgotICAgIGEgY29udGFpbmVyIHRoYXQgY29udGFpbnMgb2JqZWN0cyBvZiB1bnN1cHBvcnRlZCB0eXBlcy4KKyAgIC4uIGRlcHJlY2F0ZWQ6IDMuNCBVc2UgOmZ1bmM6YGR1bXBgIGluc3RlYWQuCiAKIAogLi4gZnVuY3Rpb246OiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSkKIAogICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCiAKKyAgIFNlZSA6ZnVuYzpgbG9hZGAgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgRGljdCB2YWx1ZXMgaW4gdGhlIHJlc3VsdCBoYXZlIGEgYGBfX2dldGF0dHJfX2BgIG1ldGhvZCB0aGF0IGRlZmVycworICAgICAgdG8gYGBfX2dldGl0ZW1fYGAuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBhdHRyaWJ1dGUgYWNjZXNzIHRvCisgICAgICBhY2Nlc3MgaXRlbXMgb2YgdGhlc2UgZGljdGlvbmFyaWVzLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSA6ZnVuYzpgbG9hZHNgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KQogCi0gICBSZXR1cm4gKnJvb3RPYmplY3QqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KKyAgIFJldHVybiAqcm9vdE9iamVjdCogYXMgYW4gWE1MIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBkdW1wc2AgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqZm10KiwgKnNvcnRfa2V5cyogYW5kICpza2lwa2V5cyogYXJndW1lbnRzLgogCiAKLVRoZSBmb2xsb3dpbmcgY2xhc3MgaXMgYXZhaWxhYmxlOgorVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSBhdmFpbGFibGU6CisKKy4uIGNsYXNzOjogRGljdChbZGljdF0pOgorCisgICBSZXR1cm4gYW4gZXh0ZW5kZWQgbWFwcGluZyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyBkaWN0aW9uYXJ5CisgICAqZGljdCouCisKKyAgIFRoaXMgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YGRpY3RgIHdoZXJlIGF0dHJpYnV0ZSBhY2Nlc3MgY2FuCisgICBiZSB1c2VkIHRvIGFjY2VzcyBpdGVtcy4gVGhhdCBpcywgYGBhRGljdC5rZXlgYCBpcyB0aGUgc2FtZSBhcworICAgYGBhRGljdFsna2V5J11gYCBmb3IgZ2V0dGluZywgc2V0dGluZyBhbmQgZGVsZXRpbmcgaXRlbXMgaW4gdGhlIG1hcHBpbmcuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjAKKwogCiAuLiBjbGFzczo6IERhdGEoZGF0YSkKIApAQCAtODYsNiArMTg5LDI0IEBACiAgICBJdCBoYXMgb25lIGF0dHJpYnV0ZSwgOmF0dHI6YGRhdGFgLCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBQeXRob24KICAgIGJ5dGVzIG9iamVjdCBzdG9yZWQgaW4gaXQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIGEgOmNsYXNzOmBieXRlc2Agb2JqZWN0IGluc3RlYWQKKworCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgYXZhaWFibGU6CisKKy4uIGRhdGE6OiBGTVRfWE1MCisKKyAgIFRoZSBYTUwgZm9ybWF0IGZvciBwbGlzdCBmaWxlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IEZNVF9CSU5BUlkKKworICAgVGhlIGJpbmFyeSBmb3JtYXQgZm9yIHBsaXN0IGZpbGVzCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIEV4YW1wbGVzCiAtLS0tLS0tLQpAQCAtMTAzLDEzICsyMjQsMTUgQEAKICAgICAgICAgICAgIGFUcnVlVmFsdWUgPSBUcnVlLAogICAgICAgICAgICAgYUZhbHNlVmFsdWUgPSBGYWxzZSwKICAgICAgICAgKSwKLSAgICAgICAgc29tZURhdGEgPSBEYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICBzb21lTW9yZURhdGEgPSBEYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwKSwKKyAgICAgICAgc29tZURhdGEgPSBiIjxiaW5hcnkgZ3Vuaz4iLAorICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPiIgKiAxMCwKICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKHRpbWUubWt0aW1lKHRpbWUuZ210aW1lKCkpKSwKICAgICApCi0gICAgd3JpdGVQbGlzdChwbCwgZmlsZU5hbWUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAnd2InKSBhcyBmcDoKKyAgICAgICAgZHVtcChwbCwgZnApCiAKIFBhcnNpbmcgYSBwbGlzdDo6CiAKLSAgICBwbCA9IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHBsID0gbG9hZChmcCkKICAgICBwcmludChwbFsiYUtleSJdKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdCBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKaW5kZXggYjQwODBkNi4uZTI0OGQ2YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CkBAIC0xMyw4ICsxMywxMSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNsYXNzLCA6Y2xhc3M6YFBPUDNgLCB3aGljaCBlbmNhcHN1bGF0ZXMgYSBjb25uZWN0aW9uIHRvIGEKLVBPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE3MjVgLiAgVGhlCi06Y2xhc3M6YFBPUDNgIGNsYXNzIHN1cHBvcnRzIGJvdGggdGhlIG1pbmltYWwgYW5kIG9wdGlvbmFsIGNvbW1hbmQgc2V0cy4KK1BPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE5MzlgLiBUaGUKKzpjbGFzczpgUE9QM2AgY2xhc3Mgc3VwcG9ydHMgYm90aCB0aGUgbWluaW1hbCBhbmQgb3B0aW9uYWwgY29tbWFuZCBzZXRzIGZyb20KKzpyZmM6YDE5MzlgLiBUaGUgOmNsYXNzOmBQT1AzYCBjbGFzcyBhbHNvIHN1cHBvcnRzIHRoZSBgU1RMU2AgY29tbWFuZCBpbnRyb2R1Y2VkCitpbiA6cmZjOmAyNTk1YCB0byBlbmFibGUgZW5jcnlwdGVkIGNvbW11bmljYXRpb24gb24gYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLgorCiBBZGRpdGlvbmFsbHksIHRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgOmNsYXNzOmBQT1AzX1NTTGAsIHdoaWNoIHByb3ZpZGVzCiBzdXBwb3J0IGZvciBjb25uZWN0aW5nIHRvIFBPUDMgc2VydmVycyB0aGF0IHVzZSBTU0wgYXMgYW4gdW5kZXJseWluZyBwcm90b2NvbAogbGF5ZXIuCkBAIC05Nyw2ICsxMDAsMTQgQEAKICAgIFJldHVybnMgdGhlIGdyZWV0aW5nIHN0cmluZyBzZW50IGJ5IHRoZSBQT1AzIHNlcnZlci4KIAogCisuLiBtZXRob2Q6OiBQT1AzLmNhcGEoKQorCisgICBRdWVyeSB0aGUgc2VydmVyJ3MgY2FwYWJpbGl0aWVzIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNDQ5YC4KKyAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IGluIHRoZSBmb3JtIGBgeyduYW1lJzogWydwYXJhbScuLi5dfWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBQT1AzLnVzZXIodXNlcm5hbWUpCiAKICAgIFNlbmQgdXNlciBjb21tYW5kLCByZXNwb25zZSBzaG91bGQgaW5kaWNhdGUgdGhhdCBhIHBhc3N3b3JkIGlzIHJlcXVpcmVkLgpAQCAtMTc2LDYgKzE4NywxOCBAQAogICAgdGhlIHVuaXF1ZSBpZCBmb3IgdGhhdCBtZXNzYWdlIGluIHRoZSBmb3JtIGBgJ3Jlc3BvbnNlIG1lc2dudW0gdWlkYGAsIG90aGVyd2lzZQogICAgcmVzdWx0IGlzIGxpc3QgYGAocmVzcG9uc2UsIFsnbWVzZ251bSB1aWQnLCAuLi5dLCBvY3RldHMpYGAuCiAKKy4uIG1ldGhvZDo6IFBPUDMuc3Rscyhjb250ZXh0PU5vbmUpCisKKyAgIFN0YXJ0IGEgVExTIHNlc3Npb24gb24gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNTk1YC4KKyAgIFRoaXMgaXMgb25seSBhbGxvd2VkIGJlZm9yZSB1c2VyIGF1dGhlbnRpY2F0aW9uCisKKyAgICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzCisgICBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvCisgICBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkgc3RydWN0dXJlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBJbnN0YW5jZXMgb2YgOmNsYXNzOmBQT1AzX1NTTGAgaGF2ZSBubyBhZGRpdGlvbmFsIG1ldGhvZHMuIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcwogc3ViY2xhc3MgaXMgaWRlbnRpY2FsIHRvIGl0cyBwYXJlbnQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CmluZGV4IDNhODYzMzEuLjQ0N2Y4ZjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdApAQCAtMTQsOCArMTQsOCBAQAogUHl0aG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIGZvcm0gd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGludGVycHJldGVyLgogSWYgdGhlIGZvcm1hdHRlZCBzdHJ1Y3R1cmVzIGluY2x1ZGUgb2JqZWN0cyB3aGljaCBhcmUgbm90IGZ1bmRhbWVudGFsIFB5dGhvbgogdHlwZXMsIHRoZSByZXByZXNlbnRhdGlvbiBtYXkgbm90IGJlIGxvYWRhYmxlLiAgVGhpcyBtYXkgYmUgdGhlIGNhc2UgaWYgb2JqZWN0cwotc3VjaCBhcyBmaWxlcywgc29ja2V0cywgY2xhc3Nlcywgb3IgaW5zdGFuY2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55Ci1vdGhlciBidWlsdC1pbiBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gY29uc3RhbnRzLgorc3VjaCBhcyBmaWxlcywgc29ja2V0cyBvciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55IG90aGVyCitvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gbGl0ZXJhbHMuCiAKIFRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24ga2VlcHMgb2JqZWN0cyBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGNhbiwgYW5kCiBicmVha3MgdGhlbSBvbnRvIG11bHRpcGxlIGxpbmVzIGlmIHRoZXkgZG9uJ3QgZml0IHdpdGhpbiB0aGUgYWxsb3dlZCB3aWR0aC4KQEAgLTI5LDE0ICsyOSwxNCBAQAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogUHJldHR5UHJpbnRlcihpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lKQorLi4gY2xhc3M6OiBQcmV0dHlQcmludGVyKGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKQogCiAgICBDb25zdHJ1Y3QgYSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGluc3RhbmNlLiAgVGhpcyBjb25zdHJ1Y3RvciB1bmRlcnN0YW5kcwogICAgc2V2ZXJhbCBrZXl3b3JkIHBhcmFtZXRlcnMuICBBbiBvdXRwdXQgc3RyZWFtIG1heSBiZSBzZXQgdXNpbmcgdGhlICpzdHJlYW0qCiAgICBrZXl3b3JkOyB0aGUgb25seSBtZXRob2QgdXNlZCBvbiB0aGUgc3RyZWFtIG9iamVjdCBpcyB0aGUgZmlsZSBwcm90b2NvbCdzCiAgICA6bWV0aDpgd3JpdGVgIG1ldGhvZC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGFkb3B0cwotICAgYGBzeXMuc3Rkb3V0YGAuICBUaHJlZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUKLSAgIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbi4gIFRoZSBrZXl3b3JkcyBhcmUgKmluZGVudCosICpkZXB0aCosIGFuZCAqd2lkdGgqLiAgVGhlCisgICBgYHN5cy5zdGRvdXRgYC4gIFRoZQogICAgYW1vdW50IG9mIGluZGVudGF0aW9uIGFkZGVkIGZvciBlYWNoIHJlY3Vyc2l2ZSBsZXZlbCBpcyBzcGVjaWZpZWQgYnkgKmluZGVudCo7CiAgICB0aGUgZGVmYXVsdCBpcyBvbmUuICBPdGhlciB2YWx1ZXMgY2FuIGNhdXNlIG91dHB1dCB0byBsb29rIGEgbGl0dGxlIG9kZCwgYnV0IGNhbgogICAgbWFrZSBuZXN0aW5nIGVhc2llciB0byBzcG90LiAgVGhlIG51bWJlciBvZiBsZXZlbHMgd2hpY2ggbWF5IGJlIHByaW50ZWQgaXMKQEAgLTQ1LDcgKzQ1LDEyIEBACiAgICB0aGUgZGVwdGggb2YgdGhlIG9iamVjdHMgYmVpbmcgZm9ybWF0dGVkLiAgVGhlIGRlc2lyZWQgb3V0cHV0IHdpZHRoIGlzCiAgICBjb25zdHJhaW5lZCB1c2luZyB0aGUgKndpZHRoKiBwYXJhbWV0ZXI7IHRoZSBkZWZhdWx0IGlzIDgwIGNoYXJhY3RlcnMuICBJZiBhCiAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGZvcm1hdHRlZCB3aXRoaW4gdGhlIGNvbnN0cmFpbmVkIHdpZHRoLCBhIGJlc3QgZWZmb3J0IHdpbGwKLSAgIGJlIG1hZGUuCisgICBiZSBtYWRlLiAgSWYgKmNvbXBhY3QqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgZWFjaCBpdGVtIG9mIGEgbG9uZyBzZXF1ZW5jZQorICAgd2lsbCBiZSBmb3JtYXR0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLiAgSWYgKmNvbXBhY3QqIGlzIHRydWUsIGFzIG1hbnkgaXRlbXMKKyAgIGFzIHdpbGwgZml0IHdpdGhpbiB0aGUgKndpZHRoKiB3aWxsIGJlIGZvcm1hdHRlZCBvbiBlYWNoIG91dHB1dCBsaW5lLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKICAgICAgID4+PiBpbXBvcnQgcHByaW50CiAgICAgICA+Pj4gc3R1ZmYgPSBbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLCAnbmknXQpAQCAtNTgsNiArNjMsMTIgQEAKICAgICAgICAgICAnbHVtYmVyamFjaycsCiAgICAgICAgICAgJ2tuaWdodHMnLAogICAgICAgICAgICduaSddCisgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcih3aWR0aD00MSwgY29tcGFjdD1UcnVlKQorICAgICAgPj4+IHBwLnBwcmludChzdHVmZikKKyAgICAgIFtbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywKKyAgICAgICAgJ2tuaWdodHMnLCAnbmknXSwKKyAgICAgICAnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsCisgICAgICAgJ25pJ10KICAgICAgID4+PiB0dXAgPSAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywKICAgICAgIC4uLiAoJ3BhcnJvdCcsICgnZnJlc2ggZnJ1aXQnLCkpKSkpKSkpCiAgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcihkZXB0aD02KQpAQCAtNjUsMjMgKzc2LDMwIEBACiAgICAgICAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywgKC4uLikpKSkpKSkKIAogCi1UaGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIGRlcml2YXRpdmUgZnVuY3Rpb25zOgorVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgc2V2ZXJhbCBzaG9ydGN1dCBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSkKIAotICAgUmV0dXJuIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogYXMgYSBzdHJpbmcuICAqaW5kZW50KiwgKndpZHRoKgotICAgYW5kICpkZXB0aCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMKLSAgIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKyAgIFJldHVybiB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIGFzIGEgc3RyaW5nLiAgKmluZGVudCosCisgICAqd2lkdGgqLCAqZGVwdGgqIGFuZCAqY29tcGFjdCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAKKyAgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1GYWxzZSkKIAogICAgUHJpbnRzIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogb24gKnN0cmVhbSosIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUuICBJZiAqc3RyZWFtKiBpcyBgYE5vbmVgYCwgYGBzeXMuc3Rkb3V0YGAgaXMgdXNlZC4gIFRoaXMgbWF5IGJlIHVzZWQKICAgIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBpbnN0ZWFkIG9mIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uIGZvcgogICAgaW5zcGVjdGluZyB2YWx1ZXMgKHlvdSBjYW4gZXZlbiByZWFzc2lnbiBgYHByaW50ID0gcHByaW50LnBwcmludGBgIGZvciB1c2UKLSAgIHdpdGhpbiBhIHNjb3BlKS4gICppbmRlbnQqLCAqd2lkdGgqIGFuZCAqZGVwdGgqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotICAgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisgICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiwgKmRlcHRoKiBhbmQgKmNvbXBhY3QqIHdpbGwgYmUgcGFzc2VkCisgICB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogICAgICAgPj4+IGltcG9ydCBwcHJpbnQKICAgICAgID4+PiBzdHVmZiA9IFsnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsICduaSddCkBAIC0xOTMsMTAxICsyMTEsMTQxIEBACiAtLS0tLS0tCiAKIFRvIGRlbW9uc3RyYXRlIHNldmVyYWwgdXNlcyBvZiB0aGUgOmZ1bmM6YHBwcmludGAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLAotbGV0J3MgZmV0Y2ggaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9qZWN0IGZyb20gUHlQSTo6CitsZXQncyBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2plY3QgZnJvbSBgUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmc+YF86OgogCiAgICA+Pj4gaW1wb3J0IGpzb24KICAgID4+PiBpbXBvcnQgcHByaW50CiAgICA+Pj4gZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgotICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci9qc29uJykgYXMgdXJsOgorICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvanNvbicpIGFzIHVybDoKICAgIC4uLiAgICAgaHR0cF9pbmZvID0gdXJsLmluZm8oKQogICAgLi4uICAgICByYXdfZGF0YSA9IHVybC5yZWFkKCkuZGVjb2RlKGh0dHBfaW5mby5nZXRfY29udGVudF9jaGFyc2V0KCkpCiAgICA+Pj4gcHJvamVjdF9pbmZvID0ganNvbi5sb2FkcyhyYXdfZGF0YSkKLSAgID4+PiByZXN1bHQgPSB7J2hlYWRlcnMnOiBodHRwX2luZm8uaXRlbXMoKSwgJ2JvZHknOiBwcm9qZWN0X2luZm99CiAKIEluIGl0cyBiYXNpYyBmb3JtLCA6ZnVuYzpgcHByaW50YCBzaG93cyB0aGUgd2hvbGUgb2JqZWN0OjoKIAotICAgPj4+IHBwcmludC5wcHJpbnQocmVzdWx0KQotICAgeydib2R5JzogeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyddLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7J2NvbW1lbnRfdGV4dCc6ICcnLAotICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDQ3LAotICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ2NvbmZpZ3BhcnNlci0zLjIuMHIzLnRhci5neicsCi0gICAgICAgICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnODUwMGZkODdjNjFhYzBkZTMyOGZjOTk2ZmNlNjliOTYnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ3NkaXN0JywKLSAgICAgICAgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiAzMjI4MSwKLSAgICAgICAgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDExLTA1LTEwVDE2OjI4OjUwJywKLSAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvYy9jb25maWdwYXJzZXIvY29uZmlncGFyc2VyLTMuMi4wcjMudGFyLmd6J31dfSwKLSAgICdoZWFkZXJzJzogWygnRGF0ZScsICdTYXQsIDE0IE1heSAyMDExIDEyOjQ4OjUyIEdNVCcpLAotICAgICAgICAgICAgICAgKCdTZXJ2ZXInLCAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2lubGluZScpLAotICAgICAgICAgICAgICAgKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyksCi0gICAgICAgICAgICAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywgJ2NodW5rZWQnKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXX0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbykKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyIDo6IE9ubHknXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcHJvdG9jb2wgaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgbmV0d29ya2luZyBmcmFtZXdvcmsgd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3snY29tbWVudF90ZXh0JzogJycsCisgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA3MTg0NCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLnRhci5iejInLAorICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAorICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc2ZTI4OTgyNWYzYmY1NTkxY2ZkNjcwODc0Y2MwODYyZCcsCisgICAgICAgICAgICAgICdwYWNrYWdldHlwZSc6ICdzZGlzdCcsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI2MTU3MzMsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ3OjAzJywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLnRhci5iejInfSwKKyAgICAgICAgICAgICB7J2NvbW1lbnRfdGV4dCc6ICcnLAorICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNTIyNCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaScsCisgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCisgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzZiNzc4ZjUyMDFiNjIyYTU1MTlhMmFjYTFhMmZlNTEyJywKKyAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ2JkaXN0X21zaScsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICcyLjcnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI5MTYzNTIsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ4OjE1JywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy8yLjcvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaSd9XX0KIAogVGhlIHJlc3VsdCBjYW4gYmUgbGltaXRlZCB0byBhIGNlcnRhaW4gKmRlcHRoKiAoZWxsaXBzaXMgaXMgdXNlZCBmb3IgZGVlcGVyCiBjb250ZW50cyk6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHQsIGRlcHRoPTMpCi0gICB7J2JvZHknOiB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7Li4ufV19LAotICAgJ2hlYWRlcnMnOiBbKCdEYXRlJywgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgICAgICAgICAgICAoJ1NlcnZlcicsICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnaW5saW5lJyksCi0gICAgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAgICAgICAgICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldfQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvLCBkZXB0aD0yKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCisgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0FuIGV4dGVuc2libGUgZnJhbWV3b3JrIGZvciBQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsIGZvY3VzXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gZXZlbnQtYmFzZWQgbmV0d29yayBwcm9ncmFtbWluZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXByb3RvY29sIGludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzIG5ldHdvcmtpbmcgZnJhbWV3b3JrIHdyaXR0ZW4gaW4gUHl0aG9uJywKKyAgICAgICAgICAgICAndmVyc2lvbic6ICcxMi4zLjAnfSwKKyAgICAndXJscyc6IFt7Li4ufSwgey4uLn1dfQogCi1BZGRpdGlvbmFsbHksIG1heGltdW0gKndpZHRoKiBjYW4gYmUgc3VnZ2VzdGVkLiBJZiBhIGxvbmcgb2JqZWN0IGNhbm5vdCBiZQotc3BsaXQsIHRoZSBzcGVjaWZpZWQgd2lkdGggd2lsbCBiZSBleGNlZWRlZDo6CitBZGRpdGlvbmFsbHksIG1heGltdW0gY2hhcmFjdGVyICp3aWR0aCogY2FuIGJlIHN1Z2dlc3RlZC4gSWYgYSBsb25nIG9iamVjdAorY2Fubm90IGJlIHNwbGl0LCB0aGUgc3BlY2lmaWVkIHdpZHRoIHdpbGwgYmUgZXhjZWVkZWQ6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHRbJ2hlYWRlcnMnXSwgd2lkdGg9MzApCi0gICBbKCdEYXRlJywKLSAgICAgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgKCdTZXJ2ZXInLAotICAgICAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsCi0gICAgICdpbmxpbmUnKSwKLSAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywKLSAgICAgJ2NodW5rZWQnKSwKLSAgICAoJ0NvbnRlbnQtVHlwZScsCi0gICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbywgZGVwdGg9Miwgd2lkdGg9NTApCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyYW1ld29yayBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgcHJvZ3JhbW1pbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgbXVsdGlwcm90b2NvbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICduZXR3b3JraW5nIGZyYW1ld29yayAnCisgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3suLi59LCB7Li4ufV19CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wdHkucnN0IGIvRG9jL2xpYnJhcnkvcHR5LnJzdAppbmRleCAyYjkzODViLi45MGJhZWM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wdHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B0eS5yc3QKQEAgLTQ1LDYgKzQ1LDkgQEAKICAgIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgZGVmYXVsdHMgdHJ5IHRvIHJlYWQgMTAyNCBieXRlcyBlYWNoIHRpbWUgdGhleSBhcmUKICAgIGNhbGxlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIDpmdW5jOmBzcGF3bmAgbm93IHJldHVybnMgdGhlIHN0YXR1cyB2YWx1ZSBmcm9tIDpmdW5jOmBvcy53YWl0cGlkYAorICAgICAgb24gdGhlIGNoaWxkIHByb2Nlc3MuCiAKIEV4YW1wbGUKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKaW5kZXggMDdkZGMyNS4uYmFlODQ1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKQEAgLTI4LDcgKzI4LDcgQEAKIAogLi4gZnVuY3Rpb246OiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKQogCi0gICBDb21waWxlIGEgc291cmNlIGZpbGUgdG8gYnl0ZS1jb2RlIGFuZCB3cml0ZSBvdXQgdGhlIGJ5dGUtY29kZSBjYWNoZSAgZmlsZS4KKyAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlIGZpbGUuCiAgICBUaGUgc291cmNlIGNvZGUgaXMgbG9hZGVkIGZyb20gdGhlIGZpbGUgbmFtZSAqZmlsZSouICBUaGUgIGJ5dGUtY29kZSBpcwogICAgd3JpdHRlbiB0byAqY2ZpbGUqLCB3aGljaCBkZWZhdWx0cyB0byB0aGUgOlBFUDpgMzE0N2AgcGF0aCwgZW5kaW5nIGluCiAgICBgYC5weWNgYCAoYGAucHlvYGAgaWYgb3B0aW1pemF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIpLgpAQCAtNDEsNiArNDEsMTMgQEAKICAgIGlzIHJhaXNlZC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGF0aCB0byBieXRlLWNvbXBpbGVkIGZpbGUsIGkuZS4KICAgIHdoYXRldmVyICpjZmlsZSogdmFsdWUgd2FzIHVzZWQuCiAKKyAgIElmIHRoZSBwYXRoIHRoYXQgKmNmaWxlKiBiZWNvbWVzIChlaXRoZXIgZXhwbGljaXRseSBzcGVjaWZpZWQgb3IgY29tcHV0ZWQpCisgICBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSwgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKyAgIFRoaXMgaXMgdG8gYWN0IGFzIGEgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIHR1cm4gdGhvc2UgcGF0aHMgaW50byByZWd1bGFyCisgICBmaWxlcyBpZiBpdCBpcyBhbGxvd2VkIHRvIHdyaXRlIGJ5dGUtY29tcGlsZWQgZmlsZXMgdG8gdGhvc2UgcGF0aHMuIFRoaXMgaXMKKyAgIGEgc2lkZS1lZmZlY3Qgb2YgaW1wb3J0IHVzaW5nIGZpbGUgcmVuYW1pbmcgdG8gcGxhY2UgdGhlIGZpbmFsIGJ5dGUtY29tcGlsZWQKKyAgIGZpbGUgaW50byBwbGFjZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZmlsZSB3cml0aW5nIGlzc3Vlcy4KKwogICAgKm9wdGltaXplKiBjb250cm9scyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIGFuZCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluCiAgICA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uICBUaGUgZGVmYXVsdCBvZiBgYC0xYGAgc2VsZWN0cyB0aGUgb3B0aW1pemF0aW9uCiAgICBsZXZlbCBvZiB0aGUgY3VycmVudCBpbnRlcnByZXRlci4KQEAgLTUwLDYgKzU3LDEzIEBACiAgICAgICBkZWZhdWx0IHdhcyAqZmlsZSogKyBgYCdjJ2BgIChgYCdvJ2BgIGlmIG9wdGltaXphdGlvbiB3YXMgZW5hYmxlZCkuCiAgICAgICBBbHNvIGFkZGVkIHRoZSAqb3B0aW1pemUqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5nZWQgY29kZSB0byB1c2UgOm1vZDpgaW1wb3J0bGliYCBmb3IgdGhlIGJ5dGUtY29kZSBjYWNoZSBmaWxlIHdyaXRpbmcuCisgICAgICBUaGlzIG1lYW5zIGZpbGUgY3JlYXRpb24vd3JpdGluZyBzZW1hbnRpY3Mgbm93IG1hdGNoIHdoYXQgOm1vZDpgaW1wb3J0bGliYAorICAgICAgZG9lcywgZS5nLiBwZXJtaXNzaW9ucywgd3JpdGUtYW5kLW1vdmUgc2VtYW50aWNzLCBldGMuIEFsc28gYWRkZWQgdGhlCisgICAgICBjYXZlYXQgdGhhdCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIHJhaXNlZCBpZiAqY2ZpbGUqIGlzIGEgc3ltbGluayBvcgorICAgICAgbm9uLXJlZ3VsYXIgZmlsZS4KKwogCiAuLiBmdW5jdGlvbjo6IG1haW4oYXJncz1Ob25lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weXRob24ucnN0IGIvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdAppbmRleCBiNjdmYmZjLi5mMzA3ZDdkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weXRob24ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKQEAgLTI1LDQgKzI1LDMgQEAKICAgIGluc3BlY3QucnN0CiAgICBzaXRlLnJzdAogICAgZnBlY3RsLnJzdAotICAgZGlzdHV0aWxzLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmUucnN0IGIvRG9jL2xpYnJhcnkvcmUucnN0CmluZGV4IDc2MmNhNDkuLmZhNmE5Y2UgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZS5yc3QKQEAgLTQ4MSw3ICs0ODEsNyBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoZSBjb21waWxlZCB2ZXJzaW9ucyBvZiB0aGUgbW9zdCByZWNlbnQgcGF0dGVybnMgcGFzc2VkIHRvCi0gICAgICA6ZnVuYzpgcmUubWF0Y2hgLCA6ZnVuYzpgcmUuc2VhcmNoYCBvciA6ZnVuYzpgcmUuY29tcGlsZWAgYXJlIGNhY2hlZCwgc28KKyAgICAgIDpmdW5jOmByZS5jb21waWxlYCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBtYXRjaGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCwgc28KICAgICAgIHByb2dyYW1zIHRoYXQgdXNlIG9ubHkgYSBmZXcgcmVndWxhciBleHByZXNzaW9ucyBhdCBhIHRpbWUgbmVlZG4ndCB3b3JyeQogICAgICAgYWJvdXQgY29tcGlsaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKQEAgLTU4NCw2ICs1ODQsMTYgQEAKICAgIGluc3RlYWQgKHNlZSBhbHNvIDpyZWY6YHNlYXJjaC12cy1tYXRjaGApLgogCiAKKy4uIGZ1bmN0aW9uOjogZnVsbG1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCkKKworICAgSWYgdGhlIHdob2xlICpzdHJpbmcqIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqcGF0dGVybiosIHJldHVybiBhCisgICBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gLiAgUmV0dXJuIGBgTm9uZWBgIGlmIHRoZQorICAgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhCisgICB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTAsIGZsYWdzPTApCiAKICAgIFNwbGl0ICpzdHJpbmcqIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiAqcGF0dGVybiouICBJZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgYXJlCkBAIC03NTUsNyArNzY1LDcgQEAKIAogICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJkIikKICAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIikgICAgICMgTWF0Y2ggYXQgaW5kZXggMAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J2QnPgogICAgPj4+IHBhdHRlcm4uc2VhcmNoKCJkb2ciLCAxKSAgIyBObyBtYXRjaDsgc2VhcmNoIGRvZXNuJ3QgaW5jbHVkZSB0aGUgImQiCiAKIApAQCAtNzcyLDEyICs3ODIsMzAgQEAKICAgID4+PiBwYXR0ZXJuID0gcmUuY29tcGlsZSgibyIpCiAgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgogICAgPj4+IHBhdHRlcm4ubWF0Y2goImRvZyIsIDEpICAgIyBNYXRjaCBhcyAibyIgaXMgdGhlIDJuZCBjaGFyYWN0ZXIgb2YgImRvZyIuCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDEsIDIpLCBtYXRjaD0nbyc+CiAKICAgIElmIHlvdSB3YW50IHRvIGxvY2F0ZSBhIG1hdGNoIGFueXdoZXJlIGluICpzdHJpbmcqLCB1c2UKICAgIDptZXRoOmB+cmVnZXguc2VhcmNoYCBpbnN0ZWFkIChzZWUgYWxzbyA6cmVmOmBzZWFyY2gtdnMtbWF0Y2hgKS4KIAogCisuLiBtZXRob2Q6OiByZWdleC5mdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pCisKKyAgIElmIHRoZSB3aG9sZSAqc3RyaW5nKiBtYXRjaGVzIHRoaXMgcmVndWxhciBleHByZXNzaW9uLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nCisgICA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90CisgICBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgVGhlIG9wdGlvbmFsICpwb3MqIGFuZCAqZW5kcG9zKiBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgdGhlCisgICA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgbWV0aG9kLgorCisgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoIm9bZ2hdIikKKyAgID4+PiBwYXR0ZXJuLmZ1bGxtYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJvZ3JlIikgICAgICMgTm8gbWF0Y2ggYXMgbm90IHRoZSBmdWxsIHN0cmluZyBtYXRjaGVzLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJkb2dnaWUiLCAxLCAzKSAgICMgTWF0Y2hlcyB3aXRoaW4gZ2l2ZW4gbGltaXRzLgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHJlZ2V4LnNwbGl0KHN0cmluZywgbWF4c3BsaXQ9MCkKIAogICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3BsaXRgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KQEAgLTExMzksNyArMTE2Nyw3IEBACiAKICAgID4+PiByZS5tYXRjaCgiYyIsICJhYmNkZWYiKSAgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgiYyIsICJhYmNkZWYiKSAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDIsIDMpLCBtYXRjaD0nYyc+CiAKIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYmVnaW5uaW5nIHdpdGggYGAnXidgYCBjYW4gYmUgdXNlZCB3aXRoIDpmdW5jOmBzZWFyY2hgIHRvCiByZXN0cmljdCB0aGUgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOjoKQEAgLTExNDcsNyArMTE3NSw3IEBACiAgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5jIiwgImFiY2RlZiIpICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5hIiwgImFiY2RlZiIpICAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nYSc+CiAKIE5vdGUgaG93ZXZlciB0aGF0IGluIDpjb25zdDpgTVVMVElMSU5FYCBtb2RlIDpmdW5jOmBtYXRjaGAgb25seSBtYXRjaGVzIGF0IHRoZQogYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcsIHdoZXJlYXMgdXNpbmcgOmZ1bmM6YHNlYXJjaGAgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgpAQCAtMTE1NSw3ICsxMTgzLDcgQEAKIAogICAgPj4+IHJlLm1hdGNoKCdYJywgJ0FcbkJcblgnLCByZS5NVUxUSUxJTkUpICAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCdeWCcsICdBXG5CXG5YJywgcmUuTVVMVElMSU5FKSAgIyBNYXRjaAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg0LCA1KSwgbWF0Y2g9J1gnPgogCiAKIE1ha2luZyBhIFBob25lYm9vawpAQCAtMTI3NCw5ICsxMzAyLDkgQEAKIGZ1bmN0aW9uYWxseSBpZGVudGljYWw6CiAKICAgID4+PiByZS5tYXRjaChyIlxXKC4pXDFcVyIsICIgZmYgIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPScgZmYgJz4KICAgID4+PiByZS5tYXRjaCgiXFxXKC4pXFwxXFxXIiwgIiBmZiAiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9JyBmZiAnPgogCiBXaGVuIG9uZSB3YW50cyB0byBtYXRjaCBhIGxpdGVyYWwgYmFja3NsYXNoLCBpdCBtdXN0IGJlIGVzY2FwZWQgaW4gdGhlIHJlZ3VsYXIKIGV4cHJlc3Npb24uICBXaXRoIHJhdyBzdHJpbmcgbm90YXRpb24sIHRoaXMgbWVhbnMgYGByIlxcImBgLiAgV2l0aG91dCByYXcgc3RyaW5nCkBAIC0xMjg0LDkgKzEzMTIsOSBAQAogZnVuY3Rpb25hbGx5IGlkZW50aWNhbDoKIAogICAgPj4+IHJlLm1hdGNoKHIiXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAgICA+Pj4gcmUubWF0Y2goIlxcXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAKIAogV3JpdGluZyBhIFRva2VuaXplcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0IGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CmluZGV4IDExMzQ2MTkuLjY5MjMxMGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKQEAgLTE5MCwyOCArMTkwLDMyIEBACiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSdzCiBoaXN0b3J5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnVuY3Rpb25zIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBhbmQgc2F2ZSBhIGhpc3RvcnkKLWZpbGUgbmFtZWQgOmZpbGU6YC5weWhpc3RgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlIGJlbG93IHdvdWxkCi1ub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBmcm9tIHRoZSB1c2VyJ3MKLTplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CitmaWxlIG5hbWVkIDpmaWxlOmAucHl0aG9uX2hpc3RvcnlgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlCitiZWxvdyB3b3VsZCBub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucworZnJvbSB0aGUgdXNlcidzIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CiAKKyAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBvcwogICAgaW1wb3J0IHJlYWRsaW5lCi0gICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weWhpc3QiKQorCisgICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weXRob25faGlzdG9yeSIpCiAgICB0cnk6CiAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcGFzcwotICAgaW1wb3J0IGF0ZXhpdAorCiAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0ZmlsZSkKLSAgIGRlbCBvcywgaGlzdGZpbGUKKworVGhpcyBjb2RlIGlzIGFjdHVhbGx5IGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gUHl0aG9uIGlzIHJ1biBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGV4dGVuZHMgdGhlIDpjbGFzczpgY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGVgIGNsYXNzIHRvCiBzdXBwb3J0IGhpc3Rvcnkgc2F2ZS9yZXN0b3JlLiA6OgogCi0gICBpbXBvcnQgY29kZQotICAgaW1wb3J0IHJlYWRsaW5lCiAgICBpbXBvcnQgYXRleGl0CisgICBpbXBvcnQgY29kZQogICAgaW1wb3J0IG9zCisgICBpbXBvcnQgcmVhZGxpbmUKIAogICAgY2xhc3MgSGlzdG9yeUNvbnNvbGUoY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbHM9Tm9uZSwgZmlsZW5hbWU9Ijxjb25zb2xlPiIsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKaW5kZXggZWQ4NTg1MC4uOWJiNTg0OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdApAQCAtNzQsNiArNzQsMjcgQEAKICAgIGBgc2V0cmxpbWl0YGAgbWF5IGFsc28gcmFpc2UgOmV4YzpgZXJyb3JgIGlmIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsCiAgICBmYWlscy4KIAorLi4gZnVuY3Rpb246OiBwcmxpbWl0KHBpZCwgcmVzb3VyY2VbLCBsaW1pdHNdKQorCisgICBDb21iaW5lcyA6ZnVuYzpgc2V0cmxpbWl0YCBhbmQgOmZ1bmM6YGdldHJsaW1pdGAgaW4gb25lIGZ1bmN0aW9uIGFuZAorICAgc3VwcG9ydHMgdG8gZ2V0IGFuZCBzZXQgdGhlIHJlc291cmNlcyBsaW1pdHMgb2YgYW4gYXJiaXRyYXJ5IHByb2Nlc3MuIElmCisgICAqcGlkKiBpcyAwLCB0aGVuIHRoZSBjYWxsIGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKnJlc291cmNlKiBhbmQKKyAgICpsaW1pdHMqIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgc2V0cmxpbWl0YCwgZXhjZXB0IHRoYXQKKyAgICpsaW1pdHMqIGlzIG9wdGlvbmFsLgorCisgICBXaGVuICpsaW1pdHMqIGlzIG5vdCBnaXZlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgKnJlc291cmNlKiBsaW1pdCBvZiB0aGUKKyAgIHByb2Nlc3MgKnBpZCouIFdoZW4gKmxpbWl0cyogaXMgZ2l2ZW4gdGhlICpyZXNvdXJjZSogbGltaXQgb2YgdGhlIHByb2Nlc3MgaXMKKyAgIHNldCBhbmQgdGhlIGZvcm1lciByZXNvdXJjZSBsaW1pdCBpcyByZXR1cm5lZC4KKworICAgUmFpc2VzIDpleGM6YFByb2Nlc3NMb29rdXBFcnJvcmAgd2hlbiAqcGlkKiBjYW4ndCBiZSBmb3VuZCBhbmQKKyAgIDpleGM6YFBlcm1pc3Npb25FcnJvcmAgd2hlbiB0aGUgdXNlciBkb2Vzbid0IGhhdmUgYGBDQVBfU1lTX1JFU09VUkNFYGAgZm9yCisgICB0aGUgcHJvY2Vzcy4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMzYgb3IgbGF0ZXIgd2l0aCBnbGliYyAyLjEzIG9yIGxhdGVyCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZXNlIHN5bWJvbHMgZGVmaW5lIHJlc291cmNlcyB3aG9zZSBjb25zdW1wdGlvbiBjYW4gYmUgY29udHJvbGxlZCB1c2luZyB0aGUKIDpmdW5jOmBzZXRybGltaXRgIGFuZCA6ZnVuYzpgZ2V0cmxpbWl0YCBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93LiBUaGUgdmFsdWVzIG9mCiB0aGVzZSBzeW1ib2xzIGFyZSBleGFjdGx5IHRoZSBjb25zdGFudHMgdXNlZCBieSBDIHByb2dyYW1zLgpAQCAtMTUxLDYgKzE3Miw1MiBAQAogICAgVGhlIG1heGltdW0gYXJlYSAoaW4gYnl0ZXMpIG9mIGFkZHJlc3Mgc3BhY2Ugd2hpY2ggbWF5IGJlIHRha2VuIGJ5IHRoZSBwcm9jZXNzLgogCiAKKy4uIGRhdGE6OiBSTElNSVRfTVNHUVVFVUUKKworICAgVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgZm9yIFBPU0lYIG1lc3NhZ2UgcXVldWVzLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi44IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX05JQ0UKKworICAgVGhlIGNlaWxpbmcgZm9yIHRoZSBwcm9jZXNzJ3MgbmljZSBsZXZlbCAoY2FsY3VsYXRlZCBhcyAyMCAtIHJsaW1fY3VyKS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMTIgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfUlRQUklPCisKKyAgIFRoZSBjZWlsaW5nIG9mIHRoZSByZWFsLXRpbWUgcHJpb3JpdHkuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjEyIG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX1JUVElNRQorCisgICBUaGUgdGltZSBsaW1pdCAoaW4gbWljcm9zZWNvbmRzKSBvbiBDUFUgdGltZSB0aGF0IGEgcHJvY2VzcyBjYW4gc3BlbmQKKyAgIHVuZGVyIHJlYWwtdGltZSBzY2hlZHVsaW5nIHdpdGhvdXQgbWFraW5nIGEgYmxvY2tpbmcgc3lzY2FsbC4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMjUgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfU0lHUEVORElORworCisgICBUaGUgbnVtYmVyIG9mIHNpZ25hbHMgd2hpY2ggdGhlIHByb2Nlc3MgbWF5IHF1ZXVlLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi44IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBSZXNvdXJjZSBVc2FnZQogLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0IGIvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CmluZGV4IDYzMzA4OGQuLjllZDAxYzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKQEAgLTI3LDE4ICsyNywxMCBAQAogICAgcmVhZGxpbmUuX19uYW1lX18gICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgKICAgID4+PiByZWFkbGluZS4KIAotVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFB5dGhvbidzIGludGVyYWN0aXZlCi1tb2RlLiAgQSB1c2VyIGNhbiBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBoaXMgb3IgaGVyIGluaXRpYWxpemF0aW9uIGZpbGUKLShpZGVudGlmaWVkIGJ5IHRoZSA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSkgdG8gZ2V0Ci1hdXRvbWF0aWMgOmtiZDpgVGFiYCBjb21wbGV0aW9uOjoKLQotICAgdHJ5OgotICAgICAgIGltcG9ydCByZWFkbGluZQotICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgIHByaW50KCJNb2R1bGUgcmVhZGxpbmUgbm90IGF2YWlsYWJsZS4iKQotICAgZWxzZToKLSAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKLSAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgidGFiOiBjb21wbGV0ZSIpCitUaGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggUHl0aG9uJ3MKKzpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gLiAgVW5sZXNzIFB5dGhvbiBpcyBydW4gd2l0aCB0aGUKKzpvcHRpb246YC1TYCBvcHRpb24sIHRoZSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBhbmQgY29uZmlndXJlZAorKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogT24gcGxhdGZvcm1zIHdpdGhvdXQgOm1vZDpgcmVhZGxpbmVgLCB0aGUgOmNsYXNzOmBDb21wbGV0ZXJgIGNsYXNzIGRlZmluZWQgYnkKIHRoaXMgbW9kdWxlIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdAppbmRleCBiMWZkM2E4Li41MjRlNDExIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKQEAgLTE0LDYgKzE0LDE0IEBACiBJdCBjYW5ub3QgYmUgdXNlZCBvbiByZWd1bGFyIGZpbGVzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZmlsZSBoYXMgZ3Jvd24gc2luY2UKIGl0IHdhcyBsYXN0IHJlYWQuCiAKKy4uIG5vdGU6OgorCisgICBUaGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08KKyAgIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUgOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4gVXNlcnMgYXJlCisgICBlbmNvdXJhZ2VkIHRvIHVzZSB0aGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgaW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudAorICAgcHJlY2lzZSBjb250cm9sIG92ZXIgdGhlIE9TLWxldmVsIHByaW1pdGl2ZXMgdXNlZC4KKworCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZzoKIAogCkBAIC0zNyw4ICs0NSwxMyBAQAogICAgaW5jcmVhc2VzIHRoaXMgdmFsdWUsIDpjOmZ1bmM6YGRldnBvbGxgIG1heSByZXR1cm4gYW4KICAgIGluY29tcGxldGUgbGlzdCBvZiBhY3RpdmUgZmlsZSBkZXNjcmlwdG9ycy4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIC4uIGZ1bmN0aW9uOjogZXBvbGwoc2l6ZWhpbnQ9LTEsIGZsYWdzPTApCiAKICAgIChPbmx5IHN1cHBvcnRlZCBvbiBMaW51eCAyLjUuNDQgYW5kIG5ld2VyLikgUmV0dXJuIGFuIGVkZ2UgcG9sbGluZyBvYmplY3QsCkBAIC00NywxMSArNjAsMTcgQEAKICAgIHRvIDpjb25zdDpgRVBPTExfQ0xPRVhFQ2AsIHdoaWNoIGNhdXNlcyB0aGUgZXBvbGwgZGVzY3JpcHRvciB0byBiZSBjbG9zZWQKICAgIGF1dG9tYXRpY2FsbHkgd2hlbiA6ZnVuYzpgb3MuZXhlY3ZlYCBpcyBjYWxsZWQuIFNlZSBzZWN0aW9uCiAgICA6cmVmOmBlcG9sbC1vYmplY3RzYCBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGVwb2xsaW5nIG9iamVjdHMuCisgICBUaGV5IGFsc28gc3VwcG9ydCB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgdGhlICpmbGFncyogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBvbGwoKQogCkBAIC02Niw2ICs4NSwxMSBAQAogICAgKE9ubHkgc3VwcG9ydGVkIG9uIEJTRC4pICBSZXR1cm5zIGEga2VybmVsIHF1ZXVlIG9iamVjdDsgc2VlIHNlY3Rpb24KICAgIDpyZWY6YGtxdWV1ZS1vYmplY3RzYCBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGtxdWV1ZSBvYmplY3RzLgogCisgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjoga2V2ZW50KGlkZW50LCBmaWx0ZXI9S1FfRklMVEVSX1JFQUQsIGZsYWdzPUtRX0VWX0FERCwgZmZsYWdzPTAsIGRhdGE9MCwgdWRhdGE9MCkKIApAQCAtMTQ0LDYgKzE2OCwyNyBAQAogb2JqZWN0LgogCiAKKy4uIG1ldGhvZDo6IGRldnBvbGwuY2xvc2UoKQorCisgICBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBwb2xsaW5nIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gYXR0cmlidXRlOjogZGV2cG9sbC5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIHBvbGxpbmcgb2JqZWN0IGlzIGNsb3NlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gbWV0aG9kOjogZGV2cG9sbC5maWxlbm8oKQorCisgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIHBvbGxpbmcgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBkZXZwb2xsLnJlZ2lzdGVyKGZkWywgZXZlbnRtYXNrXSkKIAogICAgUmVnaXN0ZXIgYSBmaWxlIGRlc2NyaXB0b3Igd2l0aCB0aGUgcG9sbGluZyBvYmplY3QuICBGdXR1cmUgY2FsbHMgdG8gdGhlCkBAIC0yNDEsNiArMjg2LDExIEBACiAgICBDbG9zZSB0aGUgY29udHJvbCBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGVwb2xsIG9iamVjdC4KIAogCisuLiBhdHRyaWJ1dGU6OiBlcG9sbC5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGVwb2xsIG9iamVjdCBpcyBjbG9zZWQuCisKKwogLi4gbWV0aG9kOjogZXBvbGwuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBjb250cm9sIGZkLgpAQCAtMzYwLDYgKzQxMCwxMSBAQAogICAgQ2xvc2UgdGhlIGNvbnRyb2wgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBrcXVldWUgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGtxdWV1ZS5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGtxdWV1ZSBvYmplY3QgaXMgY2xvc2VkLgorCisKIC4uIG1ldGhvZDo6IGtxdWV1ZS5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGNhNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApAQCAtMCwwICsxLDIzOSBAQAorOm1vZDpgc2VsZWN0b3JzYCAtLSBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHNlbGVjdG9ycworICAgOnN5bm9wc2lzOiBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIG1vZHVsZQoraW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudCBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCitJdCBkZWZpbmVzIGEgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFic3RyYWN0IGJhc2UgY2xhc3MsIGFsb25nIHdpdGggc2V2ZXJhbAorY29uY3JldGUgaW1wbGVtZW50YXRpb25zICg6Y2xhc3M6YEtxdWV1ZVNlbGVjdG9yYCwgOmNsYXNzOmBFcG9sbFNlbGVjdG9yYC4uLiksCit0aGF0IGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIEkvTyByZWFkaW5lc3Mgbm90aWZpY2F0aW9uIG9uIG11bHRpcGxlIGZpbGUKK29iamVjdHMuIEluIHRoZSBmb2xsb3dpbmcsICJmaWxlIG9iamVjdCIgcmVmZXJzIHRvIGFueSBvYmplY3Qgd2l0aCBhCis6bWV0aDpgZmlsZW5vKClgIG1ldGhvZCwgb3IgYSByYXcgZmlsZSBkZXNjcmlwdG9yLiBTZWUgOnRlcm06YGZpbGUgb2JqZWN0YC4KKworOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGlzIGFuIGFsaWFzIHRvIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtOiB0aGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIG1vc3QKK3VzZXJzLgorCisuLiBub3RlOjoKKyAgIFRoZSB0eXBlIG9mIGZpbGUgb2JqZWN0cyBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm06IG9uIFdpbmRvd3MsCisgICBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBub3QgcGlwZXMsIHdoZXJlYXMgb24gVW5peCwgYm90aCBhcmUgc3VwcG9ydGVkCisgICAoc29tZSBvdGhlciB0eXBlcyBtYXkgYmUgc3VwcG9ydGVkIGFzIHdlbGwsIHN1Y2ggYXMgZmlmb3Mgb3Igc3BlY2lhbCBmaWxlCisgICBkZXZpY2VzKS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDptb2Q6YHNlbGVjdGAKKyAgICAgIExvdy1sZXZlbCBJL08gbXVsdGlwbGV4aW5nIG1vZHVsZS4KKworCitDbGFzc2VzCistLS0tLS0tCisKK0NsYXNzZXMgaGllcmFyY2h5OjoKKworICAgQmFzZVNlbGVjdG9yCisgICArLS0gU2VsZWN0U2VsZWN0b3IKKyAgICstLSBQb2xsU2VsZWN0b3IKKyAgICstLSBFcG9sbFNlbGVjdG9yCisgICArLS0gS3F1ZXVlU2VsZWN0b3IKKworCitJbiB0aGUgZm9sbG93aW5nLCAqZXZlbnRzKiBpcyBhIGJpdHdpc2UgbWFzayBpbmRpY2F0aW5nIHdoaWNoIEkvTyBldmVudHMgc2hvdWxkCitiZSB3YWl0ZWQgZm9yIG9uIGEgZ2l2ZW4gZmlsZSBvYmplY3QuIEl0IGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKK2JlbG93OgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRVZFTlRfUkVBRGAgICB8IEF2YWlsYWJsZSBmb3IgcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRVZFTlRfV1JJVEVgICB8IEF2YWlsYWJsZSBmb3Igd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworLi4gY2xhc3M6OiBTZWxlY3RvcktleQorCisgICBBIDpjbGFzczpgU2VsZWN0b3JLZXlgIGlzIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgdXNlZCB0bworICAgYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIHVuZGVybHlpbmcgZmlsZSBkZWNyaXB0b3IsIHNlbGVjdGVkIGV2ZW50CisgICBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiBJdCBpcyByZXR1cm5lZCBieSBzZXZlcmFsIDpjbGFzczpgQmFzZVNlbGVjdG9yYAorICAgbWV0aG9kcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW9iagorCisgICAgICBGaWxlIG9iamVjdCByZWdpc3RlcmVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmZAorCisgICAgICBVbmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4KKworICAgLi4gYXR0cmlidXRlOjogZXZlbnRzCisKKyAgICAgIEV2ZW50cyB0aGF0IG11c3QgYmUgd2FpdGVkIGZvciBvbiB0aGlzIGZpbGUgb2JqZWN0LgorCisgICAuLiBhdHRyaWJ1dGU6OiBkYXRhCisKKyAgICAgIE9wdGlvbmFsIG9wYXF1ZSBkYXRhIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlIG9iamVjdDogZm9yIGV4YW1wbGUsIHRoaXMKKyAgICAgIGNvdWxkIGJlIHVzZWQgdG8gc3RvcmUgYSBwZXItY2xpZW50IHNlc3Npb24gSUQuCisKKworLi4gY2xhc3M6OiBCYXNlU2VsZWN0b3IKKworICAgQSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgaXMgdXNlZCB0byB3YWl0IGZvciBJL08gZXZlbnQgcmVhZGluZXNzIG9uIG11bHRpcGxlCisgICBmaWxlIG9iamVjdHMuIEl0IHN1cHBvcnRzIGZpbGUgc3RyZWFtIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBhCisgICBtZXRob2QgdG8gd2FpdCBmb3IgSS9PIGV2ZW50cyBvbiB0aG9zZSBzdHJlYW1zLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQuCisgICBJdCdzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MsIHNvIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuIFVzZQorICAgOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGluc3RlYWQsIG9yIG9uZSBvZiA6Y2xhc3M6YFNlbGVjdFNlbGVjdG9yYCwKKyAgIDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgIGV0Yy4gaWYgeW91IHdhbnQgdG8gc3BlY2lmaWNhbGx5IHVzZSBhbgorICAgaW1wbGVtZW50YXRpb24sIGFuZCB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGl0LgorICAgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFuZCBpdHMgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlCisgICA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKworICAgLi4gbWV0aG9kOjogcmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIFJlZ2lzdGVyIGEgZmlsZSBvYmplY3QgZm9yIHNlbGVjdGlvbiwgbW9uaXRvcmluZyBpdCBmb3IgSS9PIGV2ZW50cy4KKworICAgICAgKmZpbGVvYmoqIGlzIHRoZSBmaWxlIG9iamVjdCB0byBtb25pdG9yLgorICAgICAgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgb2YgZXZlbnRzIHRvIG1vbml0b3IuCisgICAgICAqZGF0YSogaXMgYW4gb3BhcXVlIG9iamVjdC4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHVucmVnaXN0ZXIoZmlsZW9iaikKKworICAgICAgVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZyb20gc2VsZWN0aW9uLCByZW1vdmluZyBpdCBmcm9tIG1vbml0b3JpbmcuIEEKKyAgICAgIGZpbGUgb2JqZWN0IHNoYWxsIGJlIHVucmVnaXN0ZXJlZCBwcmlvciB0byBiZWluZyBjbG9zZWQuCisKKyAgICAgICpmaWxlb2JqKiBtdXN0IGJlIGEgZmlsZSBvYmplY3QgcHJldmlvdXNseSByZWdpc3RlcmVkLgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBtb2RpZnkoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIENoYW5nZSBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QncyBtb25pdG9yZWQgZXZlbnRzIG9yIGF0dGFjaGVkIGRhdGEuCisKKyAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byA6bWV0aDpgQmFzZVNlbGVjdG9yLnVucmVnaXN0ZXIoZmlsZW9iailgIGZvbGxvd2VkCisgICAgICBieSA6bWV0aDpgQmFzZVNlbGVjdG9yLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSlgLCBleGNlcHQgdGhhdCBpdAorICAgICAgY2FuIGJlIGltcGxlbWVudGVkIG1vcmUgZWZmaWNpZW50bHkuCisKKyAgICAgIFRoaXMgcmV0dXJucyBhIG5ldyA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpbnN0YW5jZSwgb3IgcmFpc2VzIGEKKyAgICAgIDpleGM6YFZhbHVlRXJyb3JgIGluIGNhc2Ugb2YgaW52YWxpZCBldmVudCBtYXNrIG9yIGZpbGUgZGVzY3JpcHRvciwgb3IKKyAgICAgIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHNlbGVjdCh0aW1lb3V0PU5vbmUpCisKKyAgICAgIFdhaXQgdW50aWwgc29tZSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0cyBiZWNvbWUgcmVhZHksIG9yIHRoZSB0aW1lb3V0CisgICAgICBleHBpcmVzLgorCisgICAgICBJZiBgYHRpbWVvdXQgPiAwYGAsIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdhaXQgdGltZSwgaW4gc2Vjb25kcy4KKyAgICAgIElmIGBgdGltZW91dCA8PSAwYGAsIHRoZSBjYWxsIHdvbid0IGJsb2NrLCBhbmQgd2lsbCByZXBvcnQgdGhlIGN1cnJlbnRseQorICAgICAgcmVhZHkgZmlsZSBvYmplY3RzLgorICAgICAgSWYgKnRpbWVvdXQqIGlzIGBgTm9uZWBgLCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIGEgbW9uaXRvcmVkIGZpbGUgb2JqZWN0CisgICAgICBiZWNvbWVzIHJlYWR5LgorCisgICAgICBUaGlzIHJldHVybnMgYSBsaXN0IG9mIGBgKGtleSwgZXZlbnRzKWBgIHR1cGxlcywgb25lIGZvciBlYWNoIHJlYWR5IGZpbGUKKyAgICAgIG9iamVjdC4KKworICAgICAgKmtleSogaXMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gYSByZWFkeSBmaWxlCisgICAgICBvYmplY3QuCisgICAgICAqZXZlbnRzKiBpcyBhIGJpdG1hc2sgb2YgZXZlbnRzIHJlYWR5IG9uIHRoaXMgZmlsZSBvYmplY3QuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2xvc2UgdGhlIHNlbGVjdG9yLgorCisgICAgICBUaGlzIG11c3QgYmUgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSB1bmRlcmx5aW5nIHJlc291cmNlIGlzIGZyZWVkLgorICAgICAgVGhlIHNlbGVjdG9yIHNoYWxsIG5vdCBiZSB1c2VkIG9uY2UgaXQgaGFzIGJlZW4gY2xvc2VkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfa2V5KGZpbGVvYmopCisKKyAgICAgIFJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QuCisKKyAgICAgIFRoaXMgcmV0dXJucyB0aGUgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UgYXNzb2NpYXRlZCB0byB0aGlzIGZpbGUKKyAgICAgIG9iamVjdCwgb3IgcmFpc2VzIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9tYXAoKQorCisgICAgICBSZXR1cm4gYSBtYXBwaW5nIG9mIGZpbGUgb2JqZWN0cyB0byBzZWxlY3RvciBrZXlzLgorCisgICAgICBUaGlzIHJldHVybnMgYSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5hYmMuTWFwcGluZ2AgaW5zdGFuY2UgbWFwcGluZworICAgICAgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdHMgdG8gdGhlaXIgYXNzb2NpYXRlZCA6Y2xhc3M6YFNlbGVjdG9yS2V5YAorICAgICAgaW5zdGFuY2UuCisKKworLi4gY2xhc3M6OiBEZWZhdWx0U2VsZWN0b3IoKQorCisgICBUaGUgZGVmYXVsdCBzZWxlY3RvciBjbGFzcywgdXNpbmcgdGhlIG1vc3QgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uCisgICBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIFRoaXMgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IKKyAgIG1vc3QgdXNlcnMuCisKKworLi4gY2xhc3M6OiBTZWxlY3RTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3Quc2VsZWN0YC1iYXNlZCBzZWxlY3Rvci4KKworCisuLiBjbGFzczo6IFBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QucG9sbGAtYmFzZWQgc2VsZWN0b3IuCisKKworLi4gY2xhc3M6OiBFcG9sbFNlbGVjdG9yKCkKKworICAgOmZ1bmM6YHNlbGVjdC5lcG9sbGAtYmFzZWQgc2VsZWN0b3IuCisKKyAgIC4uIG1ldGhvZDo6IGZpbGVubygpCisKKyAgICAgIFRoaXMgcmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgYnkgdGhlIHVuZGVybHlpbmcKKyAgICAgIDpmdW5jOmBzZWxlY3QuZXBvbGxgIG9iamVjdC4KKworCisuLiBjbGFzczo6IEtxdWV1ZVNlbGVjdG9yKCkKKworICAgOmZ1bmM6YHNlbGVjdC5rcXVldWVgLWJhc2VkIHNlbGVjdG9yLgorCisgICAuLiBtZXRob2Q6OiBmaWxlbm8oKQorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAgICA6ZnVuYzpgc2VsZWN0LmtxdWV1ZWAgb2JqZWN0LgorCisKK0V4YW1wbGVzIG9mIHNlbGVjdG9yIHVzYWdlOjoKKworICAgPj4+IGltcG9ydCBzZWxlY3RvcnMKKyAgID4+PiBpbXBvcnQgc29ja2V0CisgICA+Pj4KKyAgID4+PiBzID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpCisgICA+Pj4gciwgdyA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgID4+PgorICAgPj4+IHMucmVnaXN0ZXIociwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICBTZWxlY3RvcktleShmaWxlb2JqPTxzb2NrZXQuc29ja2V0IGZkPTQsIGZhbWlseT0xLCB0eXBlPTEsIHByb3RvPTA+LCBmZD00LCBldmVudHM9MSwgZGF0YT1Ob25lKQorICAgPj4+IHMucmVnaXN0ZXIodywgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgU2VsZWN0b3JLZXkoZmlsZW9iaj08c29ja2V0LnNvY2tldCBmZD01LCBmYW1pbHk9MSwgdHlwZT0xLCBwcm90bz0wPiwgZmQ9NSwgZXZlbnRzPTIsIGRhdGE9Tm9uZSkKKyAgID4+PgorICAgPj4+IHByaW50KHMuc2VsZWN0KCkpCisgICBbKFNlbGVjdG9yS2V5KGZpbGVvYmo9PHNvY2tldC5zb2NrZXQgZmQ9NSwgZmFtaWx5PTEsIHR5cGU9MSwgcHJvdG89MD4sIGZkPTUsIGV2ZW50cz0yLCBkYXRhPU5vbmUpLCAyKV0KKyAgID4+PgorICAgPj4+IGZvciBrZXksIGV2ZW50cyBpbiBzLnNlbGVjdCgpOgorICAgLi4uICAgICBpZiBldmVudHMgJiBzZWxlY3RvcnMuRVZFTlRfV1JJVEU6CisgICAuLi4gICAgICAgICBrZXkuZmlsZW9iai5zZW5kKGInc3BhbScpCisgICAuLi4KKyAgIDQKKyAgID4+PiBmb3Iga2V5LCBldmVudHMgaW4gcy5zZWxlY3QoKToKKyAgIC4uLiAgICAgaWYgZXZlbnRzICYgc2VsZWN0b3JzLkVWRU5UX1JFQUQ6CisgICAuLi4gICAgICAgICBwcmludChrZXkuZmlsZW9iai5yZWN2KDEwMjQpKQorICAgLi4uCisgICBiJ3NwYW0nCisgICA+Pj4gcy5jbG9zZSgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0IGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAppbmRleCAwNDhmODBhLi40YmE5ZGRjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKQEAgLTQ0LDggKzQ0LDExIEBACiAgICAuLiBub3RlOjoKIAogICAgICAgRG8gbm90IHJlbHkgb24gdGhlIHNoZWxmIGJlaW5nIGNsb3NlZCBhdXRvbWF0aWNhbGx5OyBhbHdheXMgY2FsbAotICAgICAgOm1ldGg6YGNsb3NlYCBleHBsaWNpdGx5IHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55IG1vcmUsIG9yIHVzZSBhCi0gICAgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdpdGggOmZ1bmM6YGNvbnRleHRsaWIuY2xvc2luZ2AuCisgICAgICA6bWV0aDpgflNoZWxmLmNsb3NlYCBleHBsaWNpdGx5IHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55IG1vcmUsIG9yCisgICAgICB1c2UgOmZ1bmM6YHNoZWx2ZS5vcGVuYCBhcyBhIGNvbnRleHQgbWFuYWdlcjo6CisKKyAgICAgICAgICB3aXRoIHNoZWx2ZS5vcGVuKCdzcGFtJykgYXMgZGI6CisgICAgICAgICAgICAgIGRiWydlZ2dzJ10gPSAnZWdncycKIAogLi4gd2FybmluZzo6CiAKQEAgLTExOCwxMCArMTIxLDE1IEBACiAgICBUaGUgKmtleWVuY29kaW5nKiBwYXJhbWV0ZXIgaXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gZW5jb2RlIGtleXMgYmVmb3JlIHRoZXkKICAgIGFyZSB1c2VkIHdpdGggdGhlIHVuZGVybHlpbmcgZGljdC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICAgICBUaGUgKmtleWVuY29kaW5nKiBwYXJhbWV0ZXI7IHByZXZpb3VzbHksIGtleXMgd2VyZSBhbHdheXMgZW5jb2RlZCBpbgorICAgOmNsYXNzOmBTaGVsZmAgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCB0aGUgKmtleWVuY29kaW5nKiBwYXJhbWV0ZXI7IHByZXZpb3VzbHksIGtleXMgd2VyZSBhbHdheXMgZW5jb2RlZCBpbgogICAgICAgVVRGLTguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBjb250ZXh0IG1hbmFnZXIgc3VwcG9ydC4KKwogCiAuLiBjbGFzczo6IEJzZERiU2hlbGYoZGljdCwgcHJvdG9jb2w9Tm9uZSwgd3JpdGViYWNrPUZhbHNlLCBrZXllbmNvZGluZz0ndXRmLTgnKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0IGIvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAppbmRleCBhMTQ1N2QwLi5lNGYzNDhjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKQEAgLTUzLDcgKzUzLDcgQEAKICAgICpkc3QqIGFuZCByZXR1cm4gKmRzdCouICAqc3JjKiBhbmQgKmRzdCogYXJlIHBhdGggbmFtZXMgZ2l2ZW4gYXMgc3RyaW5ncy4KICAgICpkc3QqIG11c3QgYmUgdGhlIGNvbXBsZXRlIHRhcmdldCBmaWxlIG5hbWU7IGxvb2sgYXQgOmZ1bmM6YHNodXRpbC5jb3B5YAogICAgZm9yIGEgY29weSB0aGF0IGFjY2VwdHMgYSB0YXJnZXQgZGlyZWN0b3J5IHBhdGguICBJZiAqc3JjKiBhbmQgKmRzdCoKLSAgIHNwZWNpZnkgdGhlIHNhbWUgZmlsZSwgOmV4YzpgRXJyb3JgIGlzIHJhaXNlZC4KKyAgIHNwZWNpZnkgdGhlIHNhbWUgZmlsZSwgOmV4YzpgU2FtZUZpbGVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBUaGUgZGVzdGluYXRpb24gbG9jYXRpb24gbXVzdCBiZSB3cml0YWJsZTsgb3RoZXJ3aXNlLCBhbiA6ZXhjOmBPU0Vycm9yYAogICAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBJZiAqZHN0KiBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXBsYWNlZC4KQEAgLTY5LDYgKzY5LDE5IEBACiAgICAgICBBZGRlZCAqZm9sbG93X3N5bWxpbmtzKiBhcmd1bWVudC4KICAgICAgIE5vdyByZXR1cm5zICpkc3QqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgUmFpc2UgOmV4YzpgU2FtZUZpbGVFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBFcnJvcmAuICBTaW5jZSB0aGUgZm9ybWVyIGlzCisgICAgICBhIHN1YmNsYXNzIG9mIHRoZSBsYXR0ZXIsIHRoaXMgY2hhbmdlIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUuCisKKworLi4gZXhjZXB0aW9uOjogU2FtZUZpbGVFcnJvcgorCisgICBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbiA6ZnVuYzpgY29weWZpbGVgCisgICBhcmUgdGhlIHNhbWUgZmlsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBjb3B5bW9kZShzcmMsIGRzdCwgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpCiAKICAgIENvcHkgdGhlIHBlcm1pc3Npb24gYml0cyBmcm9tICpzcmMqIHRvICpkc3QqLiAgVGhlIGZpbGUgY29udGVudHMsIG93bmVyLCBhbmQKQEAgLTM4MCwxMSArMzkzLDEwIEBACiAgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQogICAgICAgIHRyeToKICAgICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCi0gICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKLSAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKLSAgICAgICAgICAgcGFzcwogICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKKyAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKKyAgICAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgICAgIGlmIGVycm9yczoKICAgICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaXRlLnJzdCBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CmluZGV4IDM2YjgwYzMuLmQ5M2U5MzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NpdGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CkBAIC0zOCw2ICszOCw5IEBACiBpZiBpdCByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBhbmQgaWYgc28sIGFkZHMgaXQgdG8gYGBzeXMucGF0aGBgIGFuZAogYWxzbyBpbnNwZWN0cyB0aGUgbmV3bHkgYWRkZWQgcGF0aCBmb3IgY29uZmlndXJhdGlvbiBmaWxlcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgU3VwcG9ydCBmb3IgdGhlICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjUuCisKIElmIGEgZmlsZSBuYW1lZCAicHl2ZW52LmNmZyIgZXhpc3RzIG9uZSBkaXJlY3RvcnkgYWJvdmUgc3lzLmV4ZWN1dGFibGUsCiBzeXMucHJlZml4IGFuZCBzeXMuZXhlY19wcmVmaXggYXJlIHNldCB0byB0aGF0IGRpcmVjdG9yeSBhbmQKIGl0IGlzIGFsc28gY2hlY2tlZCBmb3Igc2l0ZS1wYWNrYWdlcyBhbmQgc2l0ZS1weXRob24gKHN5cy5iYXNlX3ByZWZpeCBhbmQKQEAgLTExMSw2ICsxMTQsMjMgQEAKIDptb2Q6YHNpdGVjdXN0b21pemVgIGFuZCA6bW9kOmB1c2VyY3VzdG9taXplYCBpcyBzdGlsbCBhdHRlbXB0ZWQuCiAKIAorLi4gX3JsY29tcGxldGVyLWNvbmZpZzoKKworUmVhZGxpbmUgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCA6bW9kOmByZWFkbGluZWAsIHRoaXMgbW9kdWxlIHdpbGwgYWxzbyBpbXBvcnQgYW5kCitjb25maWd1cmUgdGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUsIGlmIFB5dGhvbiBpcyBzdGFydGVkIGluCis6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlIDx0dXQtaW50ZXJhY3RpdmU+YCBhbmQgd2l0aG91dCB0aGUgOm9wdGlvbjpgLVNgIG9wdGlvbi4KK1RoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGVuYWJsZSB0YWItY29tcGxldGlvbiBhbmQgdG8gdXNlCis6ZmlsZTpgfi8ucHl0aG9uX2hpc3RvcnlgIGFzIHRoZSBoaXN0b3J5IHNhdmUgZmlsZS4gIFRvIGRpc2FibGUgaXQsIG92ZXJyaWRlCit0aGUgOmRhdGE6YHN5cy5fX2ludGVyYWN0aXZlaG9va19fYCBhdHRyaWJ1dGUgaW4geW91ciA6bW9kOmBzaXRlY3VzdG9taXplYAorb3IgOm1vZDpgdXNlcmN1c3RvbWl6ZWAgbW9kdWxlIG9yIHlvdXIgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4KKworCitNb2R1bGUgY29udGVudHMKKy0tLS0tLS0tLS0tLS0tLQorCiAuLiBkYXRhOjogUFJFRklYRVMKIAogICAgQSBsaXN0IG9mIHByZWZpeGVzIGZvciBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yaWVzLgpAQCAtMTUzLDggKzE3Myw3IEBACiAKICAgIEFkZHMgYWxsIHRoZSBzdGFuZGFyZCBzaXRlLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBtb2R1bGUgc2VhcmNoCiAgICBwYXRoLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoaXMgbW9kdWxlIGlzIGltcG9ydGVkLAotICAgdW5sZXNzIHRoZSA6cHJvZ3JhbTpgcHl0aG9uYCBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AKLSAgIGZsYWcuCisgICB1bmxlc3MgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AgZmxhZy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBjYWxsZWQgdW5jb25kaXRpb25uYWxseS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NtdHBkLnJzdCBiL0RvYy9saWJyYXJ5L3NtdHBkLnJzdAppbmRleCBmMzA1ODE4Li4zZWJlZDA2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc210cGQucnN0CkBAIC0yNyw3ICsyNyw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0KIAogCi0uLiBjbGFzczo6IFNNVFBTZXJ2ZXIobG9jYWxhZGRyLCByZW1vdGVhZGRyLCBkYXRhX3NpemVfbGltaXQ9MzM1NTQ0MzIpCisuLiBjbGFzczo6IFNNVFBTZXJ2ZXIobG9jYWxhZGRyLCByZW1vdGVhZGRyLCBkYXRhX3NpemVfbGltaXQ9MzM1NTQ0MzIsXAorICAgICAgICAgICAgICAgICAgICAgIG1hcD1Ob25lKQogCiAgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBTTVRQU2VydmVyYCBvYmplY3QsIHdoaWNoIGJpbmRzIHRvIGxvY2FsIGFkZHJlc3MKICAgICpsb2NhbGFkZHIqLiAgSXQgd2lsbCB0cmVhdCAqcmVtb3RlYWRkciogYXMgYW4gdXBzdHJlYW0gU01UUCByZWxheWVyLiAgSXQKQEAgLTM4LDYgKzM5LDggQEAKICAgIGFjY2VwdGVkIGluIGEgYGBEQVRBYGAgY29tbWFuZC4gIEEgdmFsdWUgb2YgYGBOb25lYGAgb3IgYGAwYGAgbWVhbnMgbm8KICAgIGxpbWl0LgogCisgICBBIGRpY3Rpb25hcnkgY2FuIGJlIHNwZWNpZmllZCBpbiAqbWFwKiB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBzb2NrZXQgbWFwLgorCiAgICAuLiBtZXRob2Q6OiBwcm9jZXNzX21lc3NhZ2UocGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpCiAKICAgICAgIFJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGV4Y2VwdGlvbi4gT3ZlcnJpZGUgdGhpcyBpbiBzdWJjbGFzc2VzIHRvCkBAIC01Myw2ICs1Niw5IEBACiAgICAgICBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gdXNlIGEgY3VzdG9tIDpjbGFzczpgU01UUENoYW5uZWxgIGZvcgogICAgICAgbWFuYWdpbmcgU01UUCBjbGllbnRzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICptYXAqIGFyZ3VtZW50IHdhcyBhZGRlZC4KKwogCiBEZWJ1Z2dpbmdTZXJ2ZXIgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkwLDExICs5NiwyMCBAQAogU01UUENoYW5uZWwgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBjbGFzczo6IFNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkcikKKy4uIGNsYXNzOjogU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9MzM1NTQ0MzIsXAorICAgICAgICAgICAgICAgICAgICAgICBtYXA9Tm9uZSkpCiAKICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNNVFBDaGFubmVsYCBvYmplY3Qgd2hpY2ggbWFuYWdlcyB0aGUgY29tbXVuaWNhdGlvbgogICAgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCBhIHNpbmdsZSBTTVRQIGNsaWVudC4KIAorICAgKmNvbm4qIGFuZCAqYWRkciogYXJlIGFzIHBlciB0aGUgaW5zdGFuY2UgdmFyaWFibGVzIGRlc2NyaWJlZCBiZWxvdy4KKworICAgKmRhdGFfc2l6ZV9saW1pdCogc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgYmUKKyAgIGFjY2VwdGVkIGluIGEgYGBEQVRBYGAgY29tbWFuZC4gIEEgdmFsdWUgb2YgYGBOb25lYGAgb3IgYGAwYGAgbWVhbnMgbm8KKyAgIGxpbWl0LgorCisgICBBIGRpY3Rpb25hcnkgY2FuIGJlIHNwZWNpZmllZCBpbiAqbWFwKiB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBzb2NrZXQgbWFwLgorCiAgICBUbyB1c2UgYSBjdXN0b20gU01UUENoYW5uZWwgaW1wbGVtZW50YXRpb24geW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlCiAgICA6YXR0cjpgU01UUFNlcnZlci5jaGFubmVsX2NsYXNzYCBvZiB5b3VyIDpjbGFzczpgU01UUFNlcnZlcmAuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0IGIvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKaW5kZXggYWRkYzZiZS4uYTdkMTUzOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKQEAgLTExMCw4ICsxMTAsOCBAQAogCiAuLiBleGNlcHRpb246OiBTTVRQRXhjZXB0aW9uCiAKLSAgIFRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBmb3IgYWxsIHRoZSBvdGhlciBleGNlcHRpb25zIHByb3ZpZGVkIGJ5IHRoaXMKLSAgIG1vZHVsZS4KKyAgIFN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgIHRoYXQgaXMgdGhlIGJhc2UgZXhjZXB0aW9uIGNsYXNzIGZvciBhbGwKKyAgIHRoZSBvdGhlciBleGNlcHRpb25zIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLgogCiAKIC4uIGV4Y2VwdGlvbjo6IFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CmluZGV4IGFhMThhZTQuLmIwMTIzOGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdApAQCAtMTA3LDggKzEwNyw4IEBACiAKICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLS0gQ2VydGFpbiBvdGhlciBhZGRyZXNzIGZhbWlsaWVzICg6Y29uc3Q6YEFGX0JMVUVUT09USGAsIDpjb25zdDpgQUZfUEFDS0VUYCkKLSAgc3VwcG9ydCBzcGVjaWZpYyByZXByZXNlbnRhdGlvbnMuCistIENlcnRhaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcyAoOmNvbnN0OmBBRl9CTFVFVE9PVEhgLCA6Y29uc3Q6YEFGX1BBQ0tFVGAsCisgIDpjb25zdDpgQUZfQ0FOYCkgc3VwcG9ydCBzcGVjaWZpYyByZXByZXNlbnRhdGlvbnMuCiAKICAgLi4gWFhYIGRvY3VtZW50IHRoZW0hCiAKQEAgLTI1Nyw2ICsyNTcsMTYgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGRhdGE6OiBDQU5fQkNNCisgICAgICAgICAgQ0FOX0JDTV8qCisKKyAgIENBTl9CQ00sIGluIHRoZSBDQU4gcHJvdG9jb2wgZmFtaWx5LCBpcyB0aGUgYnJvYWRjYXN0IG1hbmFnZXIgKEJDTSkgcHJvdG9jb2wuCisgICBCcm9hZGNhc3QgbWFuYWdlciBjb25zdGFudHMsIGRvY3VtZW50ZWQgaW4gdGhlIExpbnV4IGRvY3VtZW50YXRpb24sIGFyZSBhbHNvCisgICBkZWZpbmVkIGluIHRoZSBzb2NrZXQgbW9kdWxlLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4ID49IDIuNi4yNS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGRhdGE6OiBBRl9SRFMKICAgICAgICAgICBQRl9SRFMKQEAgLTI4Myw2ICsyOTMsMTEgQEAKICAgIFRJUEMgcmVsYXRlZCBjb25zdGFudHMsIG1hdGNoaW5nIHRoZSBvbmVzIGV4cG9ydGVkIGJ5IHRoZSBDIHNvY2tldCBBUEkuIFNlZQogICAgdGhlIFRJUEMgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorLi4gZGF0YTo6IEFGX0xJTksKKworICBBdmFpbGFiaWxpdHk6IEJTRCwgT1NYLgorCisgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogaGFzX2lwdjYKIApAQCAtNDQ1LDIwICs0NjAsMjkgQEAKICAgIGBgJ3VkcCdgYCwgb3RoZXJ3aXNlIGFueSBwcm90b2NvbCB3aWxsIG1hdGNoLgogCiAKLS4uIGZ1bmN0aW9uOjogc29ja2V0KFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pCisuLiBmdW5jdGlvbjo6IHNvY2tldChmYW1pbHk9QUZfSU5FVCwgdHlwZT1TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmlsZW5vPU5vbmUpCiAKICAgIENyZWF0ZSBhIG5ldyBzb2NrZXQgdXNpbmcgdGhlIGdpdmVuIGFkZHJlc3MgZmFtaWx5LCBzb2NrZXQgdHlwZSBhbmQgcHJvdG9jb2wKICAgIG51bWJlci4gIFRoZSBhZGRyZXNzIGZhbWlseSBzaG91bGQgYmUgOmNvbnN0OmBBRl9JTkVUYCAodGhlIGRlZmF1bHQpLAogICAgOmNvbnN0OmBBRl9JTkVUNmAsIDpjb25zdDpgQUZfVU5JWGAsIDpjb25zdDpgQUZfQ0FOYCBvciA6Y29uc3Q6YEFGX1JEU2AuIFRoZQogICAgc29ja2V0IHR5cGUgc2hvdWxkIGJlIDpjb25zdDpgU09DS19TVFJFQU1gICh0aGUgZGVmYXVsdCksCiAgICA6Y29uc3Q6YFNPQ0tfREdSQU1gLCA6Y29uc3Q6YFNPQ0tfUkFXYCBvciBwZXJoYXBzIG9uZSBvZiB0aGUgb3RoZXIgYGBTT0NLX2BgCi0gICBjb25zdGFudHMuIFRoZSBwcm90b2NvbCBudW1iZXIgaXMgdXN1YWxseSB6ZXJvIGFuZCBtYXkgYmUgb21pdHRlZCBpbiB0aGF0Ci0gICBjYXNlIG9yIDpjb25zdDpgQ0FOX1JBV2AgaW4gY2FzZSB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgOmNvbnN0OmBBRl9DQU5gLgorICAgY29uc3RhbnRzLiBUaGUgcHJvdG9jb2wgbnVtYmVyIGlzIHVzdWFsbHkgemVybyBhbmQgbWF5IGJlIG9taXR0ZWQgb3IgaW4gdGhlCisgICBjYXNlIHdoZXJlIHRoZSBhZGRyZXNzIGZhbWlseSBpcyA6Y29uc3Q6YEFGX0NBTmAgdGhlIHByb3RvY29sIHNob3VsZCBiZSBvbmUKKyAgIG9mIDpjb25zdDpgQ0FOX1JBV2Agb3IgOmNvbnN0OmBDQU5fQkNNYC4KKworICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoZSBBRl9DQU4gZmFtaWx5IHdhcyBhZGRlZC4KICAgICAgIFRoZSBBRl9SRFMgZmFtaWx5IHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBUaGUgQ0FOX0JDTSBwcm90b2NvbCB3YXMgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pCiAKQEAgLTQ2OCwxMiArNDkyLDE3IEBACiAgICBpZiBkZWZpbmVkIG9uIHRoZSBwbGF0Zm9ybTsgb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcyA6Y29uc3Q6YEFGX0lORVRgLgogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXRzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBUaGUgcmV0dXJuZWQgc29ja2V0IG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIHdob2xlIHNvY2tldCBBUEksIHJhdGhlcgogICAgICAgdGhhbiBhIHN1YnNldC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBzb2NrZXRzIGFyZSBub3cgbm9uLWluaGVyaXRhYmxlLgogCi0uLiBmdW5jdGlvbjo6IGZyb21mZChmZCwgZmFtaWx5LCB0eXBlWywgcHJvdG9dKQorCisuLiBmdW5jdGlvbjo6IGZyb21mZChmZCwgZmFtaWx5LCB0eXBlLCBwcm90bz0wKQogCiAgICBEdXBsaWNhdGUgdGhlIGZpbGUgZGVzY3JpcHRvciAqZmQqIChhbiBpbnRlZ2VyIGFzIHJldHVybmVkIGJ5IGEgZmlsZSBvYmplY3QncwogICAgOm1ldGg6YGZpbGVub2AgbWV0aG9kKSBhbmQgYnVpbGQgYSBzb2NrZXQgb2JqZWN0IGZyb20gdGhlIHJlc3VsdC4gIEFkZHJlc3MKQEAgLTQ4NCw2ICs1MTMsMTEgQEAKICAgIGEgc29ja2V0IHBhc3NlZCB0byBhIHByb2dyYW0gYXMgc3RhbmRhcmQgaW5wdXQgb3Igb3V0cHV0IChzdWNoIGFzIGEgc2VydmVyCiAgICBzdGFydGVkIGJ5IHRoZSBVbml4IGluZXQgZGFlbW9uKS4gIFRoZSBzb2NrZXQgaXMgYXNzdW1lZCB0byBiZSBpbiBibG9ja2luZyBtb2RlLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogbnRvaGwoeCkKIApAQCAtNTYwLDcgKzU5NCw3IEBACiAgICBib3RoIHRoZSB2YWx1ZSBvZiAqYWRkcmVzc19mYW1pbHkqIGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBvZgogICAgOmM6ZnVuYzpgaW5ldF9wdG9uYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcykuCisgICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKSwgV2luZG93cy4KIAogCiAuLiBmdW5jdGlvbjo6IGluZXRfbnRvcChhZGRyZXNzX2ZhbWlseSwgcGFja2VkX2lwKQpAQCAtNTc2LDcgKzYxMCw3IEBACiAgICBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHksIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLiAgQQogICAgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkIGZvciBlcnJvcnMgZnJvbSB0aGUgY2FsbCB0byA6ZnVuYzpgaW5ldF9udG9wYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcykuCisgICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKSwgV2luZG93cy4KIAogCiAuLgpAQCAtNzEyLDYgKzc0NiwxMSBAQAogICAgKm5ldyogc29ja2V0IG9iamVjdCB1c2FibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLCBhbmQKICAgICphZGRyZXNzKiBpcyB0aGUgYWRkcmVzcyBib3VuZCB0byB0aGUgc29ja2V0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LmJpbmQoYWRkcmVzcykKIApAQCAtNzU3LDYgKzc5NiwxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmR1cCgpCisKKyAgIER1cGxpY2F0ZSB0aGUgc29ja2V0LgorCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIHNvY2tldCdzIGZpbGUgZGVzY3JpcHRvciAoYSBzbWFsbCBpbnRlZ2VyKS4gIFRoaXMgaXMgdXNlZnVsIHdpdGgKQEAgLTc2Nyw2ICs4MTYsMTUgQEAKICAgIHRoaXMgbGltaXRhdGlvbi4KIAogCisuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0X2luaGVyaXRhYmxlKCkKKworICAgR2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZTogYGBUcnVlYGAgaWYgdGhlIHNvY2tldCBjYW4gYmUgaW5oZXJpdGVkIGluCisgICBjaGlsZCBwcm9jZXNzZXMsIGBgRmFsc2VgYCBpZiBpdCBjYW5ub3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5nZXRwZWVybmFtZSgpCiAKICAgIFJldHVybiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQuICBUaGlzIGlzIHVzZWZ1bCB0bwpAQCAtMTA1MCw2ICsxMTA4LDE0IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBtZXRob2Q6OiBzb2NrZXQuc2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlKQorCisgICBTZXQgdGhlIDpyZWY6YGluaGVyaXRhYmxlIGZsYWcgPGZkX2luaGVyaXRhbmNlPmAgb2YgdGhlIHNvY2tldCdzIGZpbGUKKyAgIGRlc2NyaXB0b3Igb3Igc29ja2V0J3MgaGFuZGxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuc2V0YmxvY2tpbmcoZmxhZykKIAogICAgU2V0IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZyBtb2RlIG9mIHRoZSBzb2NrZXQ6IGlmICpmbGFnKiBpcyBmYWxzZSwgdGhlCkBAIC0xMzMxLDcgKzEzOTcsMTYgQEAKICAgIHMuaW9jdGwoc29ja2V0LlNJT19SQ1ZBTEwsIHNvY2tldC5SQ1ZBTExfT0ZGKQogCiBUaGUgbGFzdCBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgdGhlIHNvY2tldCBpbnRlcmZhY2UgdG8gY29tbXVuaWNhdGUgdG8gYSBDQU4KLW5ldHdvcmsuIFRoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWRnZTo6CituZXR3b3JrIHVzaW5nIHRoZSByYXcgc29ja2V0IHByb3RvY29sLiBUbyB1c2UgQ0FOIHdpdGggdGhlIGJyb2FkY2FzdAorbWFuYWdlciBwcm90b2NvbCBpbnN0ZWFkLCBvcGVuIGEgc29ja2V0IHdpdGg6OgorCisgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pCisKK0FmdGVyIGJpbmRpbmcgKDpjb25zdDpgQ0FOX1JBV2ApIG9yIGNvbm5lY3RpbmcgKDpjb25zdDpgQ0FOX0JDTWApIHRoZSBzb2NrZXQsIHlvdQorY2FuIHVzZSB0aGUgOm1ldGg6YHNvY2tldC5zZW5kYCwgYW5kIHRoZSA6bWV0aDpgc29ja2V0LnJlY3ZgIG9wZXJhdGlvbnMgKGFuZAordGhlaXIgY291bnRlcnBhcnRzKSBvbiB0aGUgc29ja2V0IG9iamVjdCBhcyB1c3VhbC4KKworVGhpcyBleGFtcGxlIG1pZ2h0IHJlcXVpcmUgc3BlY2lhbCBwcml2aWxlZGdlOjoKIAogICAgaW1wb3J0IHNvY2tldAogICAgaW1wb3J0IHN0cnVjdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3B3ZC5yc3QgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdAppbmRleCBhZGQ2MTFmLi41OGJlNzhmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcHdkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdApAQCAtMTksOSArMTksOSBAQAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgSW5kZXggfCBBdHRyaWJ1dGUgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8CiArPT09PT09PSs9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCAwICAgICB8IGBgc3BfbmFtYGAgICAgfCBMb2dpbiBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMCAgICAgfCBgYHNwX25hbXBgYCAgIHwgTG9naW4gbmFtZSAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCAxICAgICB8IGBgc3BfcHdkYGAgICAgfCBFbmNyeXB0ZWQgcGFzc3dvcmQgICAgICAgICAgICAgIHwKK3wgMSAgICAgfCBgYHNwX3B3ZHBgYCAgIHwgRW5jcnlwdGVkIHBhc3N3b3JkICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAyICAgICB8IGBgc3BfbHN0Y2hnYGAgfCBEYXRlIG9mIGxhc3QgY2hhbmdlICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0zNiwxNSArMzYsMTUgQEAKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDYgICAgIHwgYGBzcF9pbmFjdGBgICB8IE51bWJlciBvZiBkYXlzIGFmdGVyIHBhc3N3b3JkICAgfAogfCAgICAgICB8ICAgICAgICAgICAgICAgfCBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgICAgICAgIHwKLXwgICAgICAgfCAgICAgICAgICAgICAgIHwgYmxvY2tlZCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIHwgICAgICAgICAgICAgICB8IGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgNyAgICAgfCBgYHNwX2V4cGlyZWBgIHwgTnVtYmVyIG9mIGRheXMgc2luY2UgMTk3MC0wMS0wMSB8Ci18ICAgICAgIHwgICAgICAgICAgICAgICB8IHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQgICAgICAgfAorfCAgICAgICB8ICAgICAgICAgICAgICAgfCB3aGVuIGFjY291bnQgZXhwaXJlcyAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDggICAgIHwgYGBzcF9mbGFnYGAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotVGhlIHNwX25hbSBhbmQgc3BfcHdkIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KK1RoZSBzcF9uYW1wIGFuZCBzcF9wd2RwIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIGVudHJ5IGFza2VkIGZvciBjYW5ub3QgYmUgZm91bmQuCiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAppbmRleCBhMmJkNDhjLi42ZDFmNzZhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdApAQCAtMTU5LDcgKzE1OSw3IEBACiAgICBmaXJzdCBibGFuayBmb3IgdGhlIGNvbHVtbiBuYW1lOiB0aGUgY29sdW1uIG5hbWUgd291bGQgc2ltcGx5IGJlICJ4Ii4KIAogCi0uLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzXSkKKy4uIGZ1bmN0aW9uOjogY29ubmVjdChkYXRhYmFzZVssIHRpbWVvdXQsIGRldGVjdF90eXBlcywgaXNvbGF0aW9uX2xldmVsLCBjaGVja19zYW1lX3RocmVhZCwgZmFjdG9yeSwgY2FjaGVkX3N0YXRlbWVudHMsIHVyaV0pCiAKICAgIE9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgU1FMaXRlIGRhdGFiYXNlIGZpbGUgKmRhdGFiYXNlKi4gWW91IGNhbiB1c2UKICAgIGBgIjptZW1vcnk6ImBgIHRvIG9wZW4gYSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGhhdCByZXNpZGVzIGluIFJBTQpAQCAtMTk1LDYgKzE5NSwxOCBAQAogICAgZm9yIHRoZSBjb25uZWN0aW9uLCB5b3UgY2FuIHNldCB0aGUgKmNhY2hlZF9zdGF0ZW1lbnRzKiBwYXJhbWV0ZXIuIFRoZSBjdXJyZW50bHkKICAgIGltcGxlbWVudGVkIGRlZmF1bHQgaXMgdG8gY2FjaGUgMTAwIHN0YXRlbWVudHMuCiAKKyAgIElmICp1cmkqIGlzIHRydWUsICpkYXRhYmFzZSogaXMgaW50ZXJwcmV0ZWQgYXMgYSBVUkkuIFRoaXMgYWxsb3dzIHlvdQorICAgdG8gc3BlY2lmeSBvcHRpb25zLiBGb3IgZXhhbXBsZSwgdG8gb3BlbiBhIGRhdGFiYXNlIGluIHJlYWQtb25seSBtb2RlCisgICB5b3UgY2FuIHVzZTo6CisKKyAgICAgICBkYiA9IHNxbGl0ZTMuY29ubmVjdCgnZmlsZTpwYXRoL3RvL2RhdGFiYXNlP21vZGU9cm8nLCB1cmk9VHJ1ZSkKKworICAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZlYXR1cmUsIGluY2x1ZGluZyBhIGxpc3Qgb2YgcmVjb2duaXplZCBvcHRpb25zLCBjYW4KKyAgIGJlIGZvdW5kIGluIHRoZSBgU1FMaXRlIFVSSSBkb2N1bWVudGF0aW9uIDxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKnVyaSogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfY29udmVydGVyKHR5cGVuYW1lLCBjYWxsYWJsZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3NsLnJzdCBiL0RvYy9saWJyYXJ5L3NzbC5yc3QKaW5kZXggYzRlMTcxMi4uOTA5MWFmZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3NsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zc2wucnN0CkBAIC0yNiw3ICsyNiw4IEBACiAKICAgIFNvbWUgYmVoYXZpb3IgbWF5IGJlIHBsYXRmb3JtIGRlcGVuZGVudCwgc2luY2UgY2FsbHMgYXJlIG1hZGUgdG8gdGhlCiAgICBvcGVyYXRpbmcgc3lzdGVtIHNvY2tldCBBUElzLiAgVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIE9wZW5TU0wgbWF5IGFsc28KLSAgIGNhdXNlIHZhcmlhdGlvbnMgaW4gYmVoYXZpb3IuCisgICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLiBGb3IgZXhhbXBsZSwgVExTdjEuMSBhbmQgVExTdjEuMiBjb21lIHdpdGgKKyAgIG9wZW5zc2wgdmVyc2lvbiAxLjAuMS4KIAogLi4gd2FybmluZzo6CiAgICBEb24ndCB1c2UgdGhpcyBtb2R1bGUgd2l0aG91dCByZWFkaW5nIHRoZSA6cmVmOmBzc2wtc2VjdXJpdHlgLiAgRG9pbmcgc28KQEAgLTE4MywxNCArMTg0LDE2IEBACiAKICAgICAgLi4gdGFibGU6OgogCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09Ci0gICAgICAgICpjbGllbnQqIC8gKipzZXJ2ZXIqKiAgICAqKlNTTHYyKiogICoqU1NMdjMqKiAgKipTU0x2MjMqKiAgKipUTFN2MSoqCi0gICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tCi0gICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqU1NMdjMqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYyMyogICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpUTFN2MSogICAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICB5ZXMKLSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0KKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT09ICA9PT09PT09PT09PQorICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKiAgKipUTFN2MS4xKiogICoqVExTdjEuMioqCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KKyAgICAgICAgKlNTTHYyKiAgICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjMqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqVExTdjEuMSogICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIG5vCisgICAgICAgICpUTFN2MS4yKiAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzCisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KIAogICAgLi4gbm90ZTo6CiAKQEAgLTIyNCw2ICsyMjcsNDUgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBOZXcgb3B0aW9uYWwgYXJndW1lbnQgKmNpcGhlcnMqLgogCisKK0NvbnRleHQgY3JlYXRpb24KK15eXl5eXl5eXl5eXl5eXl4KKworQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBoZWxwcyBjcmVhdGUgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3RzIGZvciBjb21tb24KK3B1cnBvc2VzLgorCisuLiBmdW5jdGlvbjo6IGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILCBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKQorCisgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3Qgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGZvcgorICAgdGhlIGdpdmVuICpwdXJwb3NlKi4gIFRoZSBzZXR0aW5ncyBhcmUgY2hvc2VuIGJ5IHRoZSA6bW9kOmBzc2xgIG1vZHVsZSwKKyAgIGFuZCB1c3VhbGx5IHJlcHJlc2VudCBhIGhpZ2hlciBzZWN1cml0eSBsZXZlbCB0aGFuIHdoZW4gY2FsbGluZyB0aGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgY29uc3RydWN0b3IgZGlyZWN0bHkuCisKKyAgICpjYWZpbGUqLCAqY2FwYXRoKiwgKmNhZGF0YSogcmVwcmVzZW50IG9wdGlvbmFsIENBIGNlcnRpZmljYXRlcyB0bworICAgdHJ1c3QgZm9yIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiwgYXMgaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2AuICBJZiBhbGwgdGhyZWUgYXJlCisgICA6Y29uc3Q6YE5vbmVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBjaG9vc2UgdG8gdHJ1c3QgdGhlIHN5c3RlbSdzIGRlZmF1bHQKKyAgIENBIGNlcnRpZmljYXRlcyBpbnN0ZWFkLgorCisgICBUaGUgc2V0dGluZ3MgaW4gUHl0aG9uIDMuNCBhcmU6IDpkYXRhOmBQUk9UT0NPTF9UTFN2MWAgd2l0aCBoaWdoIGVuY3J5cHRpb24KKyAgIGNpcGhlciBzdWl0ZXMgd2l0aG91dCBSQzQgYW5kIHdpdGhvdXQgdW5hdXRoZW50aWNhdGVkIGNpcGhlciBzdWl0ZXMuCisgICBQYXNzaW5nIDpkYXRhOmB+UHVycG9zZS5TRVJWRVJfQVVUSGAgYXMgKnB1cnBvc2UqIHNldHMKKyAgIDpkYXRhOmB+U1NMQ29udGV4dC52ZXJpZnlfbW9kZWAgdG8gOmRhdGE6YENFUlRfUkVRVUlSRURgIGFuZCBlaXRoZXIKKyAgIGxvYWRzIENBIGNlcnRpZmljYXRlcyAod2hlbiBhdCBsZWFzdCBvbmUgb2YgKmNhZmlsZSosICpjYXBhdGgqIG9yICpjYWRhdGEqCisgICBpcyBnaXZlbikgb3IgdXNlcyA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgIHRvIGxvYWQgZGVmYXVsdAorICAgQ0EgY2VydGlmaWNhdGVzLgorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBwcm90b2NvbCwgb3B0aW9ucywgY2lwaGVyIGFuZCBvdGhlciBzZXR0aW5ncyBtYXkgY2hhbmdlIHRvIG1vcmUKKyAgICAgIHJlc3RyaWN0aXZlIHZhbHVlcyBhbnl0aW1lIHdpdGhvdXQgcHJpb3IgZGVwcmVjYXRpb24uICBUaGUgdmFsdWVzCisgICAgICByZXByZXNlbnQgYSBmYWlyIGJhbGFuY2UgYmV0d2VlbiBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4KKworICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyBzcGVjaWZpYyBzZXR0aW5ncywgeW91IHNob3VsZCBjcmVhdGUgYQorICAgICAgOmNsYXNzOmBTU0xDb250ZXh0YCBhbmQgYXBwbHkgdGhlIHNldHRpbmdzIHlvdXJzZWxmLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBSYW5kb20gZ2VuZXJhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzUzLDYgKzM5NSw2MSBAQAogICAgR2l2ZW4gYSBjZXJ0aWZpY2F0ZSBhcyBhbiBBU0NJSSBQRU0gc3RyaW5nLCByZXR1cm5zIGEgREVSLWVuY29kZWQgc2VxdWVuY2Ugb2YKICAgIGJ5dGVzIGZvciB0aGF0IHNhbWUgY2VydGlmaWNhdGUuCiAKKy4uIGZ1bmN0aW9uOjogZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworICAgUmV0dXJucyBhIG5hbWVkIHR1cGxlIHdpdGggcGF0aHMgdG8gT3BlblNTTCdzIGRlZmF1bHQgY2FmaWxlIGFuZCBjYXBhdGguCisgICBUaGUgcGF0aHMgYXJlIHRoZSBzYW1lIGFzIHVzZWQgYnkKKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc2AuIFRoZSByZXR1cm4gdmFsdWUgaXMgYQorICAgOnRlcm06YG5hbWVkIHR1cGxlYCBgYERlZmF1bHRWZXJpZnlQYXRoc2BgOgorCisgICAqIDphdHRyOmBjYWZpbGVgIC0gcmVzb2x2ZWQgcGF0aCB0byBjYWZpbGUgb3IgTm9uZSBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LAorICAgKiA6YXR0cjpgY2FwYXRoYCAtIHJlc29sdmVkIHBhdGggdG8gY2FwYXRoIG9yIE5vbmUgaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYWZpbGVfZW52YCAtIE9wZW5TU0wncyBlbnZpcm9ubWVudCBrZXkgdGhhdCBwb2ludHMgdG8gYSBjYWZpbGUsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhZmlsZWAgLSBoYXJkIGNvZGVkIHBhdGggdG8gYSBjYWZpbGUsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhcGF0aF9lbnZgIC0gT3BlblNTTCdzIGVudmlyb25tZW50IGtleSB0aGF0IHBvaW50cyB0byBhIGNhcGF0aCwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FwYXRoYCAtIGhhcmQgY29kZWQgcGF0aCB0byBhIGNhcGF0aCBkaXJlY3RvcnkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVfbmFtZSkKKworICAgUmV0cmlldmUgY2VydGlmaWNhdGVzIGZyb20gV2luZG93cycgc3lzdGVtIGNlcnQgc3RvcmUuICpzdG9yZV9uYW1lKiBtYXkgYmUKKyAgIG9uZSBvZiBgYENBYGAsIGBgUk9PVGBgIG9yIGBgTVlgYC4gV2luZG93cyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGNlcnQKKyAgIHN0b3JlcywgdG9vLgorCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGNlcnRfYnl0ZXMsIGVuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuCisgICBUaGUgZW5jb2RpbmdfdHlwZSBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mIGNlcnRfYnl0ZXMuIEl0IGlzIGVpdGhlcgorICAgOmNvbnN0OmB4NTA5X2FzbmAgZm9yIFguNTA5IEFTTi4xIGRhdGEgb3IgOmNvbnN0OmBwa2NzXzdfYXNuYCBmb3IKKyAgIFBLQ1MjNyBBU04uMSBkYXRhLiBUcnVzdCBzcGVjaWZpZXMgdGhlIHB1cnBvc2Ugb2YgdGhlIGNlcnRpZmljYXRlIGFzIGEgc2V0CisgICBvZiBPSURTIG9yIGV4YWN0bHkgYGBUcnVlYGAgaWYgdGhlIGNlcnRpZmljYXRlIGlzIHRydXN0d29ydGh5IGZvciBhbGwKKyAgIHB1cnBvc2VzLgorCisgICBFeGFtcGxlOjoKKworICAgICAgPj4+IHNzbC5lbnVtX2NlcnRpZmljYXRlcygiQ0EiKQorICAgICAgWyhiJ2RhdGEuLi4nLCAneDUwOV9hc24nLCB7JzEuMy42LjEuNS41LjcuMy4xJywgJzEuMy42LjEuNS41LjcuMy4yJ30pLAorICAgICAgIChiJ2RhdGEuLi4nLCAneDUwOV9hc24nLCBUcnVlKV0KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBlbnVtX2NybHMoc3RvcmVfbmFtZSkKKworICAgUmV0cmlldmUgQ1JMcyBmcm9tIFdpbmRvd3MnIHN5c3RlbSBjZXJ0IHN0b3JlLiAqc3RvcmVfbmFtZSogbWF5IGJlCisgICBvbmUgb2YgYGBDQWBgLCBgYFJPT1RgYCBvciBgYE1ZYGAuIFdpbmRvd3MgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBjZXJ0CisgICBzdG9yZXMsIHRvby4KKworICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChjZXJ0X2J5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLgorICAgVGhlIGVuY29kaW5nX3R5cGUgc3BlY2lmaWVzIHRoZSBlbmNvZGluZyBvZiBjZXJ0X2J5dGVzLiBJdCBpcyBlaXRoZXIKKyAgIDpjb25zdDpgeDUwOV9hc25gIGZvciBYLjUwOSBBU04uMSBkYXRhIG9yIDpjb25zdDpgcGtjc183X2FzbmAgZm9yCisgICBQS0NTIzcgQVNOLjEgZGF0YS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBDb25zdGFudHMKIF5eXl5eXl5eXgogCkBAIC0zODksNiArNDg2LDM4IEBACiAgICBiZSBwYXNzZWQsIGVpdGhlciB0byA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgIG9yIGFzIGEKICAgIHZhbHVlIG9mIHRoZSBgYGNhX2NlcnRzYGAgcGFyYW1ldGVyIHRvIDpmdW5jOmB3cmFwX3NvY2tldGAuCiAKKy4uIGRhdGE6OiBWRVJJRllfREVGQVVMVAorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSW4gdGhpcyBtb2RlLAorICAgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgYXJlIG5vdCBjaGVja2VkLiBCeSBkZWZhdWx0IE9wZW5TU0wKKyAgIGRvZXMgbmVpdGhlciByZXF1aXJlIG5vciB2ZXJpZnkgQ1JMcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0xFQUYKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AuIEluIHRoaXMgbW9kZSwgb25seSB0aGUKKyAgIHBlZXIgY2VydCBpcyBjaGVjayBidXQgbm9uIG9mIHRoZSBpbnRlcm1lZGlhdGUgQ0EgY2VydGlmaWNhdGVzLiBUaGUgbW9kZQorICAgcmVxdWlyZXMgYSB2YWxpZCBDUkwgdGhhdCBpcyBzaWduZWQgYnkgdGhlIHBlZXIgY2VydCdzIGlzc3VlciAoaXRzIGRpcmVjdAorICAgYW5jZXN0b3IgQ0EpLiBJZiBubyBwcm9wZXIgaGFzIGJlZW4gbG9hZGVkCisgICA6YXR0cjpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLCB2YWxpZGF0aW9uIHdpbGwgZmFpbC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0NIQUlOCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgLiBJbiB0aGlzIG1vZGUsIENSTHMgb2YKKyAgIGFsbCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHBlZXIgY2VydCBjaGFpbiBhcmUgY2hlY2tlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfWDUwOV9TVFJJQ1QKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AgdG8gZGlzYWJsZSB3b3JrYXJvdW5kcworICAgZm9yIGJyb2tlbiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBkYXRhOjogUFJPVE9DT0xfU1NMdjIKIAogICAgU2VsZWN0cyBTU0wgdmVyc2lvbiAyIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCkBAIC00MTQsOSArNTQzLDI1IEBACiAKIC4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MQogCi0gICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIFRoaXMgaXMgdGhlIG1vc3QKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4wIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8xCisKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KKyAgIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8yCisKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjIgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gVGhpcyBpcyB0aGUgbW9zdAogICAgbW9kZXJuIHZlcnNpb24sIGFuZCBwcm9iYWJseSB0aGUgYmVzdCBjaG9pY2UgZm9yIG1heGltdW0gcHJvdGVjdGlvbiwgaWYgYm90aAogICAgc2lkZXMgY2FuIHNwZWFrIGl0LgorICAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IE9QX0FMTAogCkBAIC00NTAsNiArNTk1LDIyIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogT1BfTk9fVExTdjFfMQorCisgICBQcmV2ZW50cyBhIFRMU3YxLjEgY29ubmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIGNvbmp1bmN0aW9uCisgICB3aXRoIDpjb25zdDpgUFJPVE9DT0xfU1NMdjIzYC4gSXQgcHJldmVudHMgdGhlIHBlZXJzIGZyb20gY2hvb3NpbmcgVExTdjEuMSBhcworICAgdGhlIHByb3RvY29sIHZlcnNpb24uIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBPUF9OT19UTFN2MV8yCisKKyAgIFByZXZlbnRzIGEgVExTdjEuMiBjb25uZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4gY29uanVuY3Rpb24KKyAgIHdpdGggOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgLiBJdCBwcmV2ZW50cyB0aGUgcGVlcnMgZnJvbSBjaG9vc2luZyBUTFN2MS4yIGFzCisgICB0aGUgcHJvdG9jb2wgdmVyc2lvbi4gQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGF0YTo6IE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQogCiAgICBVc2UgdGhlIHNlcnZlcidzIGNpcGhlciBvcmRlcmluZyBwcmVmZXJlbmNlLCByYXRoZXIgdGhhbiB0aGUgY2xpZW50J3MuCkBAIC01NDYsNiArNzA3LDM3IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorICAgICAgICAgIEFMRVJUX0RFU0NSSVBUSU9OXyoKKworICAgQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gOnJmYzpgNTI0NmAgYW5kIG90aGVycy4gVGhlIGBJQU5BIFRMUyBBbGVydCBSZWdpc3RyeQorICAgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTY+YF8KKyAgIGNvbnRhaW5zIHRoaXMgbGlzdCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgUkZDcyB3aGVyZSB0aGVpciBtZWFuaW5nIGlzIGRlZmluZWQuCisKKyAgIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLlNFUlZFUl9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgc2VydmVycyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBjbGllbnQtc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLkNMSUVOVF9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgY2xpZW50cyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBzZXJ2ZXItc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogU1NMIFNvY2tldHMKIC0tLS0tLS0tLS0tCkBAIC01ODQsNyArNzc2LDggQEAKIC4uIG1ldGhvZDo6IFNTTFNvY2tldC5nZXRwZWVyY2VydChiaW5hcnlfZm9ybT1GYWxzZSkKIAogICAgSWYgdGhlcmUgaXMgbm8gY2VydGlmaWNhdGUgZm9yIHRoZSBwZWVyIG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24sCi0gICByZXR1cm5zIGBgTm9uZWBgLgorICAgcmV0dXJuIGBgTm9uZWBgLiAgSWYgdGhlIFNTTCBoYW5kc2hha2UgaGFzbid0IGJlZW4gZG9uZSB5ZXQsIHJhaXNlCisgICA6ZXhjOmBWYWx1ZUVycm9yYC4KIAogICAgSWYgdGhlIGBgYmluYXJ5X2Zvcm1gYCBwYXJhbWV0ZXIgaXMgOmNvbnN0OmBGYWxzZWAsIGFuZCBhIGNlcnRpZmljYXRlIHdhcwogICAgcmVjZWl2ZWQgZnJvbSB0aGUgcGVlciwgdGhpcyBtZXRob2QgcmV0dXJucyBhIDpjbGFzczpgZGljdGAgaW5zdGFuY2UuICBJZiB0aGUKQEAgLTY0MSw2ICs4MzQsMTMgQEAKICAgICAgIFRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGluY2x1ZGVzIGFkZGl0aW9uYWwgaXRlbXMgc3VjaCBhcyBgYGlzc3VlcmBgCiAgICAgICBhbmQgYGBub3RCZWZvcmVgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCB3aGVuIHRoZSBoYW5kc2hha2UgaXNuJ3QgZG9uZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGluY2x1ZGVzIGFkZGl0aW9uYWwgWDUwOXYzIGV4dGVuc2lvbiBpdGVtcworICAgICAgc3VjaCBhcyBgYGNybERpc3RyaWJ1dGlvblBvaW50c2BgLCBgYGNhSXNzdWVyc2BgIGFuZCBgYE9DU1BgYCBVUklzLgorCiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuY2lwaGVyKCkKIAogICAgUmV0dXJucyBhIHRocmVlLXZhbHVlIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNpcGhlciBiZWluZyB1c2VkLCB0aGUKQEAgLTcxMSwxMSArOTExLDMwIEBACiAKICAgIENyZWF0ZSBhIG5ldyBTU0wgY29udGV4dC4gIFlvdSBtdXN0IHBhc3MgKnByb3RvY29sKiB3aGljaCBtdXN0IGJlIG9uZQogICAgb2YgdGhlIGBgUFJPVE9DT0xfKmBgIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgotICAgOmRhdGE6YFBST1RPQ09MX1NTTHYyM2AgaXMgcmVjb21tZW5kZWQgZm9yIG1heGltdW0gaW50ZXJvcGVyYWJpbGl0eS4KKyAgIDpkYXRhOmBQUk9UT0NPTF9TU0x2MjNgIGlzIGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgbWF4aW11bQorICAgaW50ZXJvcGVyYWJpbGl0eS4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6ZnVuYzpgY3JlYXRlX2RlZmF1bHRfY29udGV4dGAgbGV0cyB0aGUgOm1vZDpgc3NsYCBtb2R1bGUgY2hvb3NlCisgICAgICBzZWN1cml0eSBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwdXJwb3NlLgogCiAKIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKworICAgR2V0IHN0YXRpc3RpY3MgYWJvdXQgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLCBjb3VudCBvZgorICAgWC41MDkgY2VydGlmaWNhdGVzIGZsYWdnZWQgYXMgQ0EgY2VydGlmaWNhdGVzIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uCisgICBsaXN0cyBhcyBkaWN0aW9uYXJ5LgorCisgICBFeGFtcGxlIGZvciBhIGNvbnRleHQgd2l0aCBvbmUgQ0EgY2VydCBhbmQgb25lIG90aGVyIGNlcnQ6OgorCisgICAgICA+Pj4gY29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKyAgICAgIHsnY3JsJzogMCwgJ3g1MDlfY2EnOiAxLCAneDUwOSc6IDJ9CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUsIHBhc3N3b3JkPU5vbmUpCiAKICAgIExvYWQgYSBwcml2YXRlIGtleSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2VydGlmaWNhdGUuICBUaGUgKmNlcnRmaWxlKgpAQCAtNzQ2LDEyICs5NjUsMzIgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBOZXcgb3B0aW9uYWwgYXJndW1lbnQgKnBhc3N3b3JkKi4KIAotLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lKQorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRIKQorCisgICBMb2FkIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcyBmcm9tCisgICBkZWZhdWx0IGxvY2F0aW9ucy4gT24gV2luZG93cyBpdCBsb2FkcyBDQSBjZXJ0cyBmcm9tIHRoZSBgYENBYGAgYW5kCisgICBgYFJPT1RgYCBzeXN0ZW0gc3RvcmVzLiBPbiBvdGhlciBzeXN0ZW1zIGl0IGNhbGxzCisgICA6bWV0aDpgU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgLiBJbiB0aGUgZnV0dXJlIHRoZSBtZXRob2QgbWF5CisgICBsb2FkIENBIGNlcnRpZmljYXRlcyBmcm9tIG90aGVyIGxvY2F0aW9ucywgdG9vLgorCisgICBUaGUgKnB1cnBvc2UqIGZsYWcgc3BlY2lmaWVzIHdoYXQga2luZCBvZiBDQSBjZXJ0aWZpY2F0ZXMgYXJlIGxvYWRlZC4gVGhlCisgICBkZWZhdWx0IHNldHRpbmdzIDpkYXRhOmBQdXJwb3NlLlNFUlZFUl9BVVRIYCBsb2FkcyBjZXJ0aWZpY2F0ZXMsIHRoYXQgYXJlCisgICBmbGFnZ2VkIGFuZCB0cnVzdGVkIGZvciBUTFMgd2ViIHNlcnZlciBhdXRoZW50aWNhdGlvbiAoY2xpZW50IHNpZGUKKyAgIHNvY2tldHMpLiA6ZGF0YTpgUHVycG9zZS5DTElFTlRfQVVUSGAgbG9hZHMgQ0EgY2VydGlmaWNhdGVzIGZvciBjbGllbnQKKyAgIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBvbiB0aGUgc2VydmVyIHNpZGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKQogCiAgICBMb2FkIGEgc2V0IG9mICJjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgdXNlZCB0byB2YWxpZGF0ZQogICAgb3RoZXIgcGVlcnMnIGNlcnRpZmljYXRlcyB3aGVuIDpkYXRhOmB2ZXJpZnlfbW9kZWAgaXMgb3RoZXIgdGhhbgogICAgOmRhdGE6YENFUlRfTk9ORWAuICBBdCBsZWFzdCBvbmUgb2YgKmNhZmlsZSogb3IgKmNhcGF0aCogbXVzdCBiZSBzcGVjaWZpZWQuCiAKKyAgIFRoaXMgbWV0aG9kIGNhbiBhbHNvIGxvYWQgY2VydGlmaWNhdGlvbiByZXZvY2F0aW9uIGxpc3RzIChDUkxzKSBpbiBQRU0gb3IKKyAgIG9yIERFUiBmb3JtYXQuIEluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIENSTHMsIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AKKyAgIG11c3QgYmUgY29uZmlndXJlZCBwcm9wZXJseS4KKwogICAgVGhlICpjYWZpbGUqIHN0cmluZywgaWYgcHJlc2VudCwgaXMgdGhlIHBhdGggdG8gYSBmaWxlIG9mIGNvbmNhdGVuYXRlZAogICAgQ0EgY2VydGlmaWNhdGVzIGluIFBFTSBmb3JtYXQuIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZgogICAgOnJlZjpgc3NsLWNlcnRpZmljYXRlc2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGFycmFuZ2UgdGhlCkBAIC03NjIsNiArMTAwMSwyNSBAQAogICAgZm9sbG93aW5nIGFuIGBPcGVuU1NMIHNwZWNpZmljIGxheW91dAogICAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9zc2wvU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMuaHRtbD5gXy4KIAorICAgVGhlICpjYWRhdGEqIG9iamVjdCwgaWYgcHJlc2VudCwgaXMgZWl0aGVyIGFuIEFTQ0lJIHN0cmluZyBvZiBvbmUgb3IgbW9yZQorICAgUEVNLWVuY29kZWQgY2VydGlmaWNhdGVzIG9yIGEgYnl0ZXMtbGlrZSBvYmplY3Qgb2YgREVSLWVuY29kZWQKKyAgIGNlcnRpZmljYXRlcy4gTGlrZSB3aXRoICpjYXBhdGgqIGV4dHJhIGxpbmVzIGFyb3VuZCBQRU0tZW5jb2RlZAorICAgY2VydGlmaWNhdGVzIGFyZSBpZ25vcmVkIGJ1dCBhdCBsZWFzdCBvbmUgY2VydGlmaWNhdGUgbXVzdCBiZSBwcmVzZW50LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjYWRhdGEqCisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBHZXQgYSBsaXN0IG9mIGxvYWRlZCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzLiBJZiB0aGUKKyAgIGBgYmluYXJ5X2Zvcm1gYCBwYXJhbWV0ZXIgaXMgOmNvbnN0OmBGYWxzZWAgZWFjaCBsaXN0CisgICBlbnRyeSBpcyBhIGRpY3QgbGlrZSB0aGUgb3V0cHV0IG9mIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLiBPdGhlcndpc2UKKyAgIHRoZSBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgREVSLWVuY29kZWQgY2VydGlmaWNhdGVzLiBUaGUgcmV0dXJuZWQgbGlzdAorICAgZG9lcyBub3QgY29udGFpbiBjZXJ0aWZpY2F0ZXMgZnJvbSAqY2FwYXRoKiB1bmxlc3MgYSBjZXJ0aWZpY2F0ZSB3YXMKKyAgIHJlcXVlc3RlZCBhbmQgbG9hZGVkIGJ5IGEgU1NMIGNvbm5lY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCiAKICAgIExvYWQgYSBzZXQgb2YgZGVmYXVsdCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIGZyb20KQEAgLTc5OSw2ICsxMDU3LDU2IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlcnZlcl9uYW1lX2NhbGxiYWNrKQorCisgICBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFRMUyBDbGllbnQgSGVsbG8KKyAgIGhhbmRzaGFrZSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IHRoZSBTU0wvVExTIHNlcnZlciB3aGVuIHRoZSBUTFMgY2xpZW50CisgICBzcGVjaWZpZXMgYSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uLiBUaGUgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiBtZWNoYW5pc20KKyAgIGlzIHNwZWNpZmllZCBpbiA6cmZjOmA2MDY2YCBzZWN0aW9uIDMgLSBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uLgorCisgICBPbmx5IG9uZSBjYWxsYmFjayBjYW4gYmUgc2V0IHBlciBgYFNTTENvbnRleHRgYC4gIElmICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayoKKyAgIGlzIGBgTm9uZWBgIHRoZW4gdGhlIGNhbGxiYWNrIGlzIGRpc2FibGVkLiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gYQorICAgc3Vic2VxdWVudCB0aW1lIHdpbGwgZGlzYWJsZSB0aGUgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrLgorCisgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayosIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhyZWUKKyAgIGFyZ3VtZW50czsgdGhlIGZpcnN0IGJlaW5nIHRoZSA6Y2xhc3M6YHNzbC5TU0xTb2NrZXRgLCB0aGUgc2Vjb25kIGlzIGEgc3RyaW5nCisgICB0aGF0IHJlcHJlc2VudHMgdGhlIHNlcnZlciBuYW1lIHRoYXQgdGhlIGNsaWVudCBpcyBpbnRlbmRpbmcgdG8gY29tbXVuaWNhdGUKKyAgIChvciA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGRvZXMgbm90IGNvbnRhaW4gYSBzZXJ2ZXIgbmFtZSkKKyAgIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIG9yaWdpbmFsIDpjbGFzczpgU1NMQ29udGV4dGAuIFRoZSBzZXJ2ZXIgbmFtZQorICAgYXJndW1lbnQgaXMgdGhlIElETkEgZGVjb2RlZCBzZXJ2ZXIgbmFtZS4KKworICAgQSB0eXBpY2FsIHVzZSBvZiB0aGlzIGNhbGxiYWNrIGlzIHRvIGNoYW5nZSB0aGUgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCdzCisgICA6YXR0cjpgU1NMU29ja2V0LmNvbnRleHRgIGF0dHJpYnV0ZSB0byBhIG5ldyBvYmplY3Qgb2YgdHlwZQorICAgOmNsYXNzOmBTU0xDb250ZXh0YCByZXByZXNlbnRpbmcgYSBjZXJ0aWZpY2F0ZSBjaGFpbiB0aGF0IG1hdGNoZXMgdGhlIHNlcnZlcgorICAgbmFtZS4KKworICAgRHVlIHRvIHRoZSBlYXJseSBuZWdvdGlhdGlvbiBwaGFzZSBvZiB0aGUgVExTIGNvbm5lY3Rpb24sIG9ubHkgbGltaXRlZAorICAgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyBhcmUgdXNhYmxlIGxpa2UKKyAgIDptZXRoOmBTU0xTb2NrZXQuc2VsZWN0ZWRfbnBuX3Byb3RvY29sYCBhbmQgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YC4KKyAgIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLCA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwKKyAgIDptZXRoOmBTU0xTb2NrZXQuY2lwaGVyYCBhbmQgOm1ldGg6YFNTTFNvY2tldC5jb21wcmVzc2AgbWV0aG9kcyByZXF1aXJlIHRoYXQKKyAgIHRoZSBUTFMgY29ubmVjdGlvbiBoYXMgcHJvZ3Jlc3NlZCBiZXlvbmQgdGhlIFRMUyBDbGllbnQgSGVsbG8gYW5kIHRoZXJlZm9yZQorICAgd2lsbCBub3QgY29udGFpbiByZXR1cm4gbWVhbmluZ2Z1bCB2YWx1ZXMgbm9yIGNhbiB0aGV5IGJlIGNhbGxlZCBzYWZlbHkuCisKKyAgIFRoZSAqc2VydmVyX25hbWVfY2FsbGJhY2sqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGBgTm9uZWBgIHRvIGFsbG93IHRoZQorICAgVExTIG5lZ290aWF0aW9uIHRvIGNvbnRpbnVlLiAgSWYgYSBUTFMgZmFpbHVyZSBpcyByZXF1aXJlZCwgYSBjb25zdGFudAorICAgOmNvbnN0OmBBTEVSVF9ERVNDUklQVElPTl8qIDxBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUj5gIGNhbiBiZQorICAgcmV0dXJuZWQuICBPdGhlciByZXR1cm4gdmFsdWVzIHdpbGwgcmVzdWx0IGluIGEgVExTIGZhdGFsIGVycm9yIHdpdGgKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JgLgorCisgICBJZiB0aGVyZSBpcyBhIElETkEgZGVjb2RpbmcgZXJyb3Igb24gdGhlIHNlcnZlciBuYW1lLCB0aGUgVExTIGNvbm5lY3Rpb24KKyAgIHdpbGwgdGVybWluYXRlIHdpdGggYW4gOmNvbnN0OmBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUmAgZmF0YWwgVExTCisgICBhbGVydCBtZXNzYWdlIHRvIHRoZSBjbGllbnQuCisKKyAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgZnJvbSB0aGUgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiBmdW5jdGlvbiB0aGUgVExTCisgICBjb25uZWN0aW9uIHdpbGwgdGVybWluYXRlIHdpdGggYSBmYXRhbCBUTFMgYWxlcnQgbWVzc2FnZQorICAgOmNvbnN0OmBBTEVSVF9ERVNDUklQVElPTl9IQU5EU0hBS0VfRkFJTFVSRWAuCisKKyAgIFRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaWYgdGhlIE9wZW5TU0wgbGlicmFyeQorICAgaGFkIE9QRU5TU0xfTk9fVExTRVhUIGRlZmluZWQgd2hlbiBpdCB3YXMgYnVpbHQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKGRoZmlsZSkKIAogICAgTG9hZCB0aGUga2V5IGdlbmVyYXRpb24gcGFyYW1ldGVycyBmb3IgRGlmZmllLUhlbG1hbiAoREgpIGtleSBleGNoYW5nZS4KQEAgLTg2Miw2ICsxMTcwLDE4IEBACiAgICAgICA+Pj4gc3RhdHNbJ2hpdHMnXSwgc3RhdHNbJ21pc3NlcyddCiAgICAgICAoMCwgMCkKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5nZXRfY2FfY2VydHMoYmluYXJ5X2Zvcm09RmFsc2UpCisKKyAgIFJldHVybnMgYSBsaXN0IG9mIGRpY3RzIHdpdGggaW5mb3JtYXRpb24gb2YgbG9hZGVkIENBIGNlcnRzLiBJZiB0aGUKKyAgIG9wdGlvbmFsIGFyZ3VtZW50IGlzIFRydWUsIHJldHVybnMgYSBERVItZW5jb2RlZCBjb3B5IG9mIHRoZSBDQQorICAgY2VydGlmaWNhdGUuCisKKyAgIC4uIG5vdGU6OgorICAgICAgQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmUKKyAgICAgIGJlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC5vcHRpb25zCiAKICAgIEFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBzZXQgb2YgU1NMIG9wdGlvbnMgZW5hYmxlZCBvbiB0aGlzIGNvbnRleHQuCkBAIC04NzgsNiArMTE5OCwxNSBAQAogICAgVGhlIHByb3RvY29sIHZlcnNpb24gY2hvc2VuIHdoZW4gY29uc3RydWN0aW5nIHRoZSBjb250ZXh0LiAgVGhpcyBhdHRyaWJ1dGUKICAgIGlzIHJlYWQtb25seS4KIAorLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3MKKworICAgVGhlIGZsYWdzIGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb3BlcmF0aW9ucy4gWW91IGNhbiBzZXQgZmxhZ3MgbGlrZQorICAgOmRhdGE6YFZFUklGWV9DUkxfQ0hFQ0tfTEVBRmAgYnkgT1JpbmcgdGhlbSB0b2dldGhlci4gQnkgZGVmYXVsdCBPcGVuU1NMCisgICBkb2VzIG5laXRoZXIgcmVxdWlyZSBub3IgdmVyaWZ5IGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgKENSTHMpLgorICAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMC45LjgrLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC52ZXJpZnlfbW9kZQogCiAgICBXaGV0aGVyIHRvIHRyeSB0byB2ZXJpZnkgb3RoZXIgcGVlcnMnIGNlcnRpZmljYXRlcyBhbmQgaG93IHRvIGJlaGF2ZQpAQCAtMTM0MywzICsxNjcyLDEyIEBACiAKICAgIGBSRkMgNDM2NjogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIEV4dGVuc2lvbnMgPGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQzNjY+YF8KICAgICAgICBCbGFrZS1XaWxzb24gZXQuIGFsLgorCisgICBgUkZDIDUyNDY6IFRoZSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgUHJvdG9jb2wgVmVyc2lvbiAxLjIgPGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzUyNDY+YF8KKyAgICAgICBULiBEaWVya3MgZXQuIGFsLgorCisgICBgUkZDIDYwNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM2MDY2PmBfCisgICAgICAgRC4gRWFzdGxha2UKKworICAgYElBTkEgVExTOiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgUGFyYW1ldGVycyA8aHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWw+YF8KKyAgICAgICBJQU5BCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdGF0LnJzdCBiL0RvYy9saWJyYXJ5L3N0YXQucnN0CmluZGV4IDZjMjBhYTIuLjI0NzY5ZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0YXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0YXQucnN0CkBAIC02LDcgKzYsOCBAQAogICAgICAgICAgICAgICBvcy5sc3RhdCgpIGFuZCBvcy5mc3RhdCgpLgogLi4gc2VjdGlvbmF1dGhvcjo6IFNraXAgTW9udGFuYXJvIDxza2lwQGF1dG9tYXRyaXguY29tPgogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdGF0LnB5YAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBNb2R1bGVzL19zdGF0LmNgCisgICAgICAgICAgICAgICAgIDpzb3VyY2U6YExpYi9zdGF0LnB5YAogCiAtLS0tLS0tLS0tLS0tLQogCkBAIC0xNSw2ICsxNiw5IEBACiBleGlzdCkuICBGb3IgY29tcGxldGUgZGV0YWlscyBhYm91dCB0aGUgOmM6ZnVuYzpgc3RhdGAsIDpjOmZ1bmM6YGZzdGF0YCBhbmQKIDpjOmZ1bmM6YGxzdGF0YCBjYWxscywgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBzeXN0ZW0uCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgc3RhdCBtb2R1bGUgaXMgYmFja2VkIGJ5IGEgQyBpbXBsZW1lbnRhdGlvbi4KKwogVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIHRlc3QgZm9yIHNwZWNpZmljIGZpbGUKIHR5cGVzOgogCkBAIC01Myw2ICs1NywyNCBAQAogCiAgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhIHNvY2tldC4KIAorLi4gZnVuY3Rpb246OiBTX0lTRE9PUihtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhIGRvb3IuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IFNfSVNQT1JUKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGFuIGV2ZW50IHBvcnQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IFNfSVNXSFQobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSB3aGl0ZW91dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFR3byBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBmb3IgbW9yZSBnZW5lcmFsIG1hbmlwdWxhdGlvbiBvZiB0aGUgZmlsZSdzCiBtb2RlOgogCkBAIC0xMTMsNiArMTM1LDEwIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIDpkYXRhOmBTX0lGRE9PUmAsIDpkYXRhOmBTX0lGUE9SVGAgYW5kCisgICAgICA6ZGF0YTpgU19JRldIVGAuCisKIAogQWxsIHRoZSB2YXJpYWJsZXMgYmVsb3cgYXJlIHNpbXBseSBzeW1ib2xpYyBpbmRleGVzIGludG8gdGhlIDEwLXR1cGxlIHJldHVybmVkCiBieSA6ZnVuYzpgb3Muc3RhdGAsIDpmdW5jOmBvcy5mc3RhdGAgb3IgOmZ1bmM6YG9zLmxzdGF0YC4KQEAgLTIxMCw2ICsyMzYsMjkgQEAKIAogICAgRklGTy4KIAorLi4gZGF0YTo6IFNfSUZET09SCisKKyAgIERvb3IuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogU19JRlBPUlQKKworICAgRXZlbnQgcG9ydC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBTX0lGV0hUCisKKyAgIFdoaXRlb3V0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbm90ZTo6CisKKyAgIDpkYXRhOmBTX0lGRE9PUmAsIDpkYXRhOmBTX0lGUE9SVGAgb3IgOmRhdGE6YFNfSUZXSFRgIGFyZSBkZWZpbmVkIGFzCisgICAwIHdoZW4gdGhlIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgdGhlIGZpbGUgdHlwZXMuCisKIFRoZSBmb2xsb3dpbmcgZmxhZ3MgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgKm1vZGUqIGFyZ3VtZW50IG9mIDpmdW5jOmBvcy5jaG1vZGA6CiAKIC4uIGRhdGE6OiBTX0lTVUlECmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdCBiL0RvYy9saWJyYXJ5L3N0YXRpc3RpY3MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzU5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApAQCAtMCwwICsxLDQwOCBAQAorOm1vZDpgc3RhdGlzdGljc2AgLS0tIE1hdGhlbWF0aWNhbCBzdGF0aXN0aWNzIGZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBzdGF0aXN0aWNzCisgICA6c3lub3BzaXM6IG1hdGhlbWF0aWNhbCBzdGF0aXN0aWNzIGZ1bmN0aW9ucworLi4gbW9kdWxlYXV0aG9yOjogU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4KKy4uIHNlY3Rpb25hdXRob3I6OiBTdGV2ZW4gRCdBcHJhbm8gPHN0ZXZlK3B5dGhvbkBwZWFyd29vZC5pbmZvPgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gdGVzdHNldHVwOjogKgorCisgICBmcm9tIHN0YXRpc3RpY3MgaW1wb3J0ICoKKyAgIF9fbmFtZV9fID0gJzxkb2N0ZXN0PicKKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RhdGlzdGljcy5weWAKKworLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBtYXRoZW1hdGljYWwgc3RhdGlzdGljcyBvZgorbnVtZXJpYyAoOmNsYXNzOmBSZWFsYC12YWx1ZWQpIGRhdGEuCisKK0F2ZXJhZ2VzIGFuZCBtZWFzdXJlcyBvZiBjZW50cmFsIGxvY2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBmdW5jdGlvbnMgY2FsY3VsYXRlIGFuIGF2ZXJhZ2Ugb3IgdHlwaWNhbCB2YWx1ZSBmcm9tIGEgcG9wdWxhdGlvbgorb3Igc2FtcGxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6ZnVuYzpgbWVhbmAgICAgICAgICAgICAgQXJpdGhtZXRpYyBtZWFuICgiYXZlcmFnZSIpIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuYCAgICAgICAgICAgTWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2xvd2AgICAgICAgTG93IG1lZGlhbiBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbl9oaWdoYCAgICAgIEhpZ2ggbWVkaWFuIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgICAgTWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGdyb3VwZWQgZGF0YS4KKzpmdW5jOmBtb2RlYCAgICAgICAgICAgICBNb2RlIChtb3N0IGNvbW1vbiB2YWx1ZSkgb2YgZGlzY3JldGUgZGF0YS4KKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWVhc3VyZXMgb2Ygc3ByZWFkCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgZnVuY3Rpb25zIGNhbGN1bGF0ZSBhIG1lYXN1cmUgb2YgaG93IG11Y2ggdGhlIHBvcHVsYXRpb24gb3Igc2FtcGxlCit0ZW5kcyB0byBkZXZpYXRlIGZyb20gdGhlIHR5cGljYWwgb3IgYXZlcmFnZSB2YWx1ZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBwc3RkZXZgICAgICAgICAgICBQb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorOmZ1bmM6YHB2YXJpYW5jZWAgICAgICAgIFBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgZGF0YS4KKzpmdW5jOmBzdGRldmAgICAgICAgICAgICBTYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis6ZnVuYzpgdmFyaWFuY2VgICAgICAgICAgU2FtcGxlIHZhcmlhbmNlIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworRnVuY3Rpb24gZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiBUaGUgZnVuY3Rpb25zIGRvIG5vdCByZXF1aXJlIHRoZSBkYXRhIGdpdmVuIHRvIHRoZW0gdG8gYmUgc29ydGVkLgorSG93ZXZlciwgZm9yIHJlYWRpbmcgY29udmVuaWVuY2UsIG1vc3Qgb2YgdGhlIGV4YW1wbGVzIHNob3cgc29ydGVkIHNlcXVlbmNlcy4KKworLi4gZnVuY3Rpb246OiBtZWFuKGRhdGEpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIGFyaXRobWV0aWMgbWVhbiBvZiAqZGF0YSosIGEgc2VxdWVuY2Ugb3IgaXRlcmF0b3Igb2YKKyAgIHJlYWwtdmFsdWVkIG51bWJlcnMuCisKKyAgIFRoZSBhcml0aG1ldGljIG1lYW4gaXMgdGhlIHN1bSBvZiB0aGUgZGF0YSBkaXZpZGVkIGJ5IHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzLiAgSXQgaXMgY29tbW9ubHkgY2FsbGVkICJ0aGUgYXZlcmFnZSIsIGFsdGhvdWdoIGl0IGlzIG9ubHkgb25lIG9mIG1hbnkKKyAgIGRpZmZlcmVudCBtYXRoZW1hdGljYWwgYXZlcmFnZXMuICBJdCBpcyBhIG1lYXN1cmUgb2YgdGhlIGNlbnRyYWwgbG9jYXRpb24gb2YKKyAgIHRoZSBkYXRhLgorCisgICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgd2lsbCBiZSByYWlzZWQuCisKKyAgIFNvbWUgZXhhbXBsZXMgb2YgdXNlOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lYW4oWzEsIDIsIDMsIDQsIDRdKQorICAgICAgMi44CisgICAgICA+Pj4gbWVhbihbLTEuMCwgMi41LCAzLjI1LCA1Ljc1XSkKKyAgICAgIDIuNjI1CisKKyAgICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgICAgPj4+IG1lYW4oW0YoMywgNyksIEYoMSwgMjEpLCBGKDUsIDMpLCBGKDEsIDMpXSkKKyAgICAgIEZyYWN0aW9uKDEzLCAyMSkKKworICAgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgICA+Pj4gbWVhbihbRCgiMC41IiksIEQoIjAuNzUiKSwgRCgiMC42MjUiKSwgRCgiMC4zNzUiKV0pCisgICAgICBEZWNpbWFsKCcwLjU2MjUnKQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIG1lYW4gaXMgc3Ryb25nbHkgYWZmZWN0ZWQgYnkgb3V0bGllcnMgYW5kIGlzIG5vdCBhIHJvYnVzdCBlc3RpbWF0b3IKKyAgICAgIGZvciBjZW50cmFsIGxvY2F0aW9uOiB0aGUgbWVhbiBpcyBub3QgbmVjZXNzYXJpbHkgYSB0eXBpY2FsIGV4YW1wbGUgb2YgdGhlCisgICAgICBkYXRhIHBvaW50cy4gIEZvciBtb3JlIHJvYnVzdCwgYWx0aG91Z2ggbGVzcyBlZmZpY2llbnQsIG1lYXN1cmVzIG9mCisgICAgICBjZW50cmFsIGxvY2F0aW9uLCBzZWUgOmZ1bmM6YG1lZGlhbmAgYW5kIDpmdW5jOmBtb2RlYC4gIChJbiB0aGlzIGNhc2UsCisgICAgICAiZWZmaWNpZW50IiByZWZlcnMgdG8gc3RhdGlzdGljYWwgZWZmaWNpZW5jeSByYXRoZXIgdGhhbiBjb21wdXRhdGlvbmFsCisgICAgICBlZmZpY2llbmN5LikKKworICAgICAgVGhlIHNhbXBsZSBtZWFuIGdpdmVzIGFuIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSB0cnVlIHBvcHVsYXRpb24gbWVhbiwKKyAgICAgIHdoaWNoIG1lYW5zIHRoYXQsIHRha2VuIG9uIGF2ZXJhZ2Ugb3ZlciBhbGwgdGhlIHBvc3NpYmxlIHNhbXBsZXMsCisgICAgICBgYG1lYW4oc2FtcGxlKWBgIGNvbnZlcmdlcyBvbiB0aGUgdHJ1ZSBtZWFuIG9mIHRoZSBlbnRpcmUgcG9wdWxhdGlvbi4gIElmCisgICAgICAqZGF0YSogcmVwcmVzZW50cyB0aGUgZW50aXJlIHBvcHVsYXRpb24gcmF0aGVyIHRoYW4gYSBzYW1wbGUsIHRoZW4KKyAgICAgIGBgbWVhbihkYXRhKWBgIGlzIGVxdWl2YWxlbnQgdG8gY2FsY3VsYXRpbmcgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuIM68LgorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuKGRhdGEpCisKKyAgIFJldHVybiB0aGUgbWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIG51bWVyaWMgZGF0YSwgdXNpbmcgdGhlIGNvbW1vbiAibWVhbiBvZgorICAgbWlkZGxlIHR3byIgbWV0aG9kLiAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgVGhlIG1lZGlhbiBpcyBhIHJvYnVzdCBtZWFzdXJlIG9mIGNlbnRyYWwgbG9jYXRpb24sIGFuZCBpcyBsZXNzIGFmZmVjdGVkIGJ5CisgICB0aGUgcHJlc2VuY2Ugb2Ygb3V0bGllcnMgaW4geW91ciBkYXRhLiAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzCisgICBvZGQsIHRoZSBtaWRkbGUgZGF0YSBwb2ludCBpcyByZXR1cm5lZDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW4oWzEsIDMsIDVdKQorICAgICAgMworCisgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgZXZlbiwgdGhlIG1lZGlhbiBpcyBpbnRlcnBvbGF0ZWQgYnkgdGFraW5nCisgICB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1LCA3XSkKKyAgICAgIDQuMAorCisgICBUaGlzIGlzIHN1aXRlZCBmb3Igd2hlbiB5b3VyIGRhdGEgaXMgZGlzY3JldGUsIGFuZCB5b3UgZG9uJ3QgbWluZCB0aGF0IHRoZQorICAgbWVkaWFuIG1heSBub3QgYmUgYW4gYWN0dWFsIGRhdGEgcG9pbnQuCisKKyAgIC4uIHNlZWFsc286OiA6ZnVuYzpgbWVkaWFuX2xvd2AsIDpmdW5jOmBtZWRpYW5faGlnaGAsIDpmdW5jOmBtZWRpYW5fZ3JvdXBlZGAKKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbl9sb3coZGF0YSkKKworICAgUmV0dXJuIHRoZSBsb3cgbWVkaWFuIG9mIG51bWVyaWMgZGF0YS4gIElmICpkYXRhKiBpcyBlbXB0eSwKKyAgIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaXMgcmFpc2VkLgorCisgICBUaGUgbG93IG1lZGlhbiBpcyBhbHdheXMgYSBtZW1iZXIgb2YgdGhlIGRhdGEgc2V0LiAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEKKyAgIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBzbWFsbGVyIG9mCisgICB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNV0pCisgICAgICAzCisgICAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNSwgN10pCisgICAgICAzCisKKyAgIFVzZSB0aGUgbG93IG1lZGlhbiB3aGVuIHlvdXIgZGF0YSBhcmUgZGlzY3JldGUgYW5kIHlvdSBwcmVmZXIgdGhlIG1lZGlhbiB0bworICAgYmUgYW4gYWN0dWFsIGRhdGEgcG9pbnQgcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGVkLgorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuX2hpZ2goZGF0YSkKKworICAgUmV0dXJuIHRoZSBoaWdoIG1lZGlhbiBvZiBkYXRhLiAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgCisgICBpcyByYWlzZWQuCisKKyAgIFRoZSBoaWdoIG1lZGlhbiBpcyBhbHdheXMgYSBtZW1iZXIgb2YgdGhlIGRhdGEgc2V0LiAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEKKyAgIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBsYXJnZXIgb2YKKyAgIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNV0pCisgICAgICAzCisgICAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDUsIDddKQorICAgICAgNQorCisgICBVc2UgdGhlIGhpZ2ggbWVkaWFuIHdoZW4geW91ciBkYXRhIGFyZSBkaXNjcmV0ZSBhbmQgeW91IHByZWZlciB0aGUgbWVkaWFuIHRvCisgICBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludCByYXRoZXIgdGhhbiBpbnRlcnBvbGF0ZWQuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW5fZ3JvdXBlZChkYXRhLCBpbnRlcnZhbD0xKQorCisgICBSZXR1cm4gdGhlIG1lZGlhbiBvZiBncm91cGVkIGNvbnRpbnVvdXMgZGF0YSwgY2FsY3VsYXRlZCBhcyB0aGUgNTB0aAorICAgcGVyY2VudGlsZSwgdXNpbmcgaW50ZXJwb2xhdGlvbi4gIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYAorICAgaXMgcmFpc2VkLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFs1MiwgNTIsIDUzLCA1NF0pCisgICAgICA1Mi41CisKKyAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGRhdGEgYXJlIHJvdW5kZWQsIHNvIHRoYXQgZWFjaCB2YWx1ZSByZXByZXNlbnRzCisgICB0aGUgbWlkcG9pbnQgb2YgZGF0YSBjbGFzc2VzLCBlLmcuIDEgaXMgdGhlIG1pZHBvaW50IG9mIHRoZSBjbGFzcyAwLjUtMS41LCAyCisgICBpcyB0aGUgbWlkcG9pbnQgb2YgMS41LTIuNSwgMyBpcyB0aGUgbWlkcG9pbnQgb2YgMi41LTMuNSwgZXRjLiAgV2l0aCB0aGUgZGF0YQorICAgZ2l2ZW4sIHRoZSBtaWRkbGUgdmFsdWUgZmFsbHMgc29tZXdoZXJlIGluIHRoZSBjbGFzcyAzLjUtNC41LCBhbmQKKyAgIGludGVycG9sYXRpb24gaXMgdXNlZCB0byBlc3RpbWF0ZSBpdDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMiwgMiwgMywgNCwgNCwgNCwgNCwgNCwgNV0pCisgICAgICAzLjcKKworICAgT3B0aW9uYWwgYXJndW1lbnQgKmludGVydmFsKiByZXByZXNlbnRzIHRoZSBjbGFzcyBpbnRlcnZhbCwgYW5kIGRlZmF1bHRzCisgICB0byAxLiAgQ2hhbmdpbmcgdGhlIGNsYXNzIGludGVydmFsIG5hdHVyYWxseSB3aWxsIGNoYW5nZSB0aGUgaW50ZXJwb2xhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTEpCisgICAgICAzLjI1CisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0yKQorICAgICAgMy41CisKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgZGF0YSBwb2ludHMgYXJlIGF0IGxlYXN0CisgICAqaW50ZXJ2YWwqIGFwYXJ0LgorCisgICAuLiBpbXBsLWRldGFpbDo6CisKKyAgICAgIFVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgOmZ1bmM6YG1lZGlhbl9ncm91cGVkYCBtYXkgY29lcmNlIGRhdGEgcG9pbnRzIHRvCisgICAgICBmbG9hdHMuICBUaGlzIGJlaGF2aW91ciBpcyBsaWtlbHkgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICAqICJTdGF0aXN0aWNzIGZvciB0aGUgQmVoYXZpb3JhbCBTY2llbmNlcyIsIEZyZWRlcmljayBKIEdyYXZldHRlciBhbmQKKyAgICAgICAgTGFycnkgQiBXYWxsbmF1ICg4dGggRWRpdGlvbikuCisKKyAgICAgICogQ2FsY3VsYXRpbmcgdGhlIGBtZWRpYW4gPGh0dHA6Ly93d3cudWFsYmVydGEuY2Evfm9wc2Nhbi9tZWRpYW4uaHRtbD5gXy4KKworICAgICAgKiBUaGUgYFNTTUVESUFOCisgICAgICAgIDxodHRwczovL3Byb2plY3RzLmdub21lLm9yZy9nbnVtZXJpYy9kb2MvZ251bWVyaWMtZnVuY3Rpb24tU1NNRURJQU4uc2h0bWw+YF8KKyAgICAgICAgZnVuY3Rpb24gaW4gdGhlIEdub21lIEdudW1lcmljIHNwcmVhZHNoZWV0LCBpbmNsdWRpbmcgYHRoaXMgZGlzY3Vzc2lvbgorICAgICAgICA8aHR0cHM6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy9nbnVtZXJpYy1saXN0LzIwMTEtQXByaWwvbXNnMDAwMTguaHRtbD5gXy4KKworCisuLiBmdW5jdGlvbjo6IG1vZGUoZGF0YSkKKworICAgUmV0dXJuIHRoZSBtb3N0IGNvbW1vbiBkYXRhIHBvaW50IGZyb20gZGlzY3JldGUgb3Igbm9taW5hbCAqZGF0YSouICBUaGUgbW9kZQorICAgKHdoZW4gaXQgZXhpc3RzKSBpcyB0aGUgbW9zdCB0eXBpY2FsIHZhbHVlLCBhbmQgaXMgYSByb2J1c3QgbWVhc3VyZSBvZgorICAgY2VudHJhbCBsb2NhdGlvbi4KKworICAgSWYgKmRhdGEqIGlzIGVtcHR5LCBvciBpZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbW9zdCBjb21tb24gdmFsdWUsCisgICA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgYGBtb2RlYGAgYXNzdW1lcyBkaXNjcmV0ZSBkYXRhLCBhbmQgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZS4gVGhpcyBpcyB0aGUKKyAgIHN0YW5kYXJkIHRyZWF0bWVudCBvZiB0aGUgbW9kZSBhcyBjb21tb25seSB0YXVnaHQgaW4gc2Nob29sczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtb2RlKFsxLCAxLCAyLCAzLCAzLCAzLCAzLCA0XSkKKyAgICAgIDMKKworICAgVGhlIG1vZGUgaXMgdW5pcXVlIGluIHRoYXQgaXQgaXMgdGhlIG9ubHkgc3RhdGlzdGljIHdoaWNoIGFsc28gYXBwbGllcworICAgdG8gbm9taW5hbCAobm9uLW51bWVyaWMpIGRhdGE6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbW9kZShbInJlZCIsICJibHVlIiwgImJsdWUiLCAicmVkIiwgImdyZWVuIiwgInJlZCIsICJyZWQiXSkKKyAgICAgICdyZWQnCisKKworLi4gZnVuY3Rpb246OiBwc3RkZXYoZGF0YSwgbXU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3B1bGF0aW9uCisgICB2YXJpYW5jZSkuICBTZWUgOmZ1bmM6YHB2YXJpYW5jZWAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBwc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMC45ODY4OTMyNzM1MjcyNTEKKworCisuLiBmdW5jdGlvbjo6IHB2YXJpYW5jZShkYXRhLCBtdT1Ob25lKQorCisgICBSZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgKmRhdGEqLCBhIG5vbi1lbXB0eSBpdGVyYWJsZSBvZiByZWFsLXZhbHVlZAorICAgbnVtYmVycy4gIFZhcmlhbmNlLCBvciBzZWNvbmQgbW9tZW50IGFib3V0IHRoZSBtZWFuLCBpcyBhIG1lYXN1cmUgb2YgdGhlCisgICB2YXJpYWJpbGl0eSAoc3ByZWFkIG9yIGRpc3BlcnNpb24pIG9mIGRhdGEuICBBIGxhcmdlIHZhcmlhbmNlIGluZGljYXRlcyB0aGF0CisgICB0aGUgZGF0YSBpcyBzcHJlYWQgb3V0OyBhIHNtYWxsIHZhcmlhbmNlIGluZGljYXRlcyBpdCBpcyBjbHVzdGVyZWQgY2xvc2VseQorICAgYXJvdW5kIHRoZSBtZWFuLgorCisgICBJZiB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgKmRhdGEqLiAgSWYgaXQgaXMgbWlzc2luZyBvciBgYE5vbmVgYCAodGhlIGRlZmF1bHQpLCB0aGUgbWVhbiBpcworICAgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLiAgVG8KKyAgIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBmcm9tIGEgc2FtcGxlLCB0aGUgOmZ1bmM6YHZhcmlhbmNlYCBmdW5jdGlvbiBpcyB1c3VhbGx5CisgICBhIGJldHRlciBjaG9pY2UuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBpcyBlbXB0eS4KKworICAgRXhhbXBsZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZGF0YSA9IFswLjAsIDAuMjUsIDAuMjUsIDEuMjUsIDEuNSwgMS43NSwgMi43NSwgMy4yNV0KKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSkKKyAgICAgIDEuMjUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogdG8gYXZvaWQgcmVjYWxjdWxhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtdSA9IG1lYW4oZGF0YSkKKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgICAxLjI1CisKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0ZW1wdCB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBwYXNzZWQgdGhlIGFjdHVhbCBtZWFuCisgICBhcyAqbXUqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKm11KiBtYXkgbGVhZCB0byBpbnZhbGlkIG9yIGltcG9zc2libGUKKyAgIHJlc3VsdHMuCisKKyAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgICAgPj4+IHB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMjQuODE1JykKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gcHZhcmlhbmNlKFtGKDEsIDQpLCBGKDUsIDQpLCBGKDEsIDIpXSkKKyAgICAgIEZyYWN0aW9uKDEzLCA3MikKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFdoZW4gY2FsbGVkIHdpdGggdGhlIGVudGlyZSBwb3B1bGF0aW9uLCB0aGlzIGdpdmVzIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlCisgICAgICDPg8KyLiAgV2hlbiBjYWxsZWQgb24gYSBzYW1wbGUgaW5zdGVhZCwgdGhpcyBpcyB0aGUgYmlhc2VkIHNhbXBsZSB2YXJpYW5jZQorICAgICAgc8KyLCBhbHNvIGtub3duIGFzIHZhcmlhbmNlIHdpdGggTiBkZWdyZWVzIG9mIGZyZWVkb20uCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuIM68LCB5b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uCisgICAgICB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGEgc2FtcGxlLCBnaXZpbmcgdGhlIGtub3duIHBvcHVsYXRpb24gbWVhbiBhcworICAgICAgdGhlIHNlY29uZCBhcmd1bWVudC4gIFByb3ZpZGVkIHRoZSBkYXRhIHBvaW50cyBhcmUgcmVwcmVzZW50YXRpdmUKKyAgICAgIChlLmcuIGluZGVwZW5kZW50IGFuZCBpZGVudGljYWxseSBkaXN0cmlidXRlZCksIHRoZSByZXN1bHQgd2lsbCBiZSBhbgorICAgICAgdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKworLi4gZnVuY3Rpb246OiBzdGRldihkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBzYW1wbGUKKyAgIHZhcmlhbmNlKS4gIFNlZSA6ZnVuYzpgdmFyaWFuY2VgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMS4wODEwODc0MTU1MjE5ODI3CisKKworLi4gZnVuY3Rpb246OiB2YXJpYW5jZShkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHZhcmlhbmNlIG9mICpkYXRhKiwgYW4gaXRlcmFibGUgb2YgYXQgbGVhc3QgdHdvIHJlYWwtdmFsdWVkCisgICBudW1iZXJzLiAgVmFyaWFuY2UsIG9yIHNlY29uZCBtb21lbnQgYWJvdXQgdGhlIG1lYW4sIGlzIGEgbWVhc3VyZSBvZiB0aGUKKyAgIHZhcmlhYmlsaXR5IChzcHJlYWQgb3IgZGlzcGVyc2lvbikgb2YgZGF0YS4gIEEgbGFyZ2UgdmFyaWFuY2UgaW5kaWNhdGVzIHRoYXQKKyAgIHRoZSBkYXRhIGlzIHNwcmVhZCBvdXQ7IGEgc21hbGwgdmFyaWFuY2UgaW5kaWNhdGVzIGl0IGlzIGNsdXN0ZXJlZCBjbG9zZWx5CisgICBhcm91bmQgdGhlIG1lYW4uCisKKyAgIElmIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgKnhiYXIqIGlzIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICpkYXRhKi4gIElmIGl0IGlzIG1pc3Npbmcgb3IgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1lYW4gaXMKKyAgIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3VyIGRhdGEgaXMgYSBzYW1wbGUgZnJvbSBhIHBvcHVsYXRpb24uIFRvIGNhbGN1bGF0ZQorICAgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLCBzZWUgOmZ1bmM6YHB2YXJpYW5jZWAuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBoYXMgZmV3ZXIgdGhhbiB0d28gdmFsdWVzLgorCisgICBFeGFtcGxlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBkYXRhID0gWzIuNzUsIDEuNzUsIDEuMjUsIDAuMjUsIDAuNSwgMS4yNSwgMy41XQorICAgICAgPj4+IHZhcmlhbmNlKGRhdGEpCisgICAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICp4YmFyKiB0byBhdm9pZCByZWNhbGN1bGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG0gPSBtZWFuKGRhdGEpCisgICAgICA+Pj4gdmFyaWFuY2UoZGF0YSwgbSkKKyAgICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgcGFzc2VkIHRoZSBhY3R1YWwgbWVhbgorICAgYXMgKnhiYXIqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKnhiYXIqIGNhbiBsZWFkIHRvIGludmFsaWQgb3IKKyAgIGltcG9zc2libGUgcmVzdWx0cy4KKworICAgRGVjaW1hbCBhbmQgRnJhY3Rpb24gdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMzEuMDE4NzUnKQorCisgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICAgID4+PiB2YXJpYW5jZShbRigxLCA2KSwgRigxLCAyKSwgRig1LCAzKV0pCisgICAgICBGcmFjdGlvbig2NywgMTA4KQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBpcyB0aGUgc2FtcGxlIHZhcmlhbmNlIHPCsiB3aXRoIEJlc3NlbCdzIGNvcnJlY3Rpb24sIGFsc28ga25vd24gYXMKKyAgICAgIHZhcmlhbmNlIHdpdGggTi0xIGRlZ3JlZXMgb2YgZnJlZWRvbS4gIFByb3ZpZGVkIHRoYXQgdGhlIGRhdGEgcG9pbnRzIGFyZQorICAgICAgcmVwcmVzZW50YXRpdmUgKGUuZy4gaW5kZXBlbmRlbnQgYW5kIGlkZW50aWNhbGx5IGRpc3RyaWJ1dGVkKSwgdGhlIHJlc3VsdAorICAgICAgc2hvdWxkIGJlIGFuIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSB0cnVlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIGFjdHVhbCBwb3B1bGF0aW9uIG1lYW4gzrwgeW91IHNob3VsZCBwYXNzIGl0IHRvIHRoZQorICAgICAgOmZ1bmM6YHB2YXJpYW5jZWAgZnVuY3Rpb24gYXMgdGhlICptdSogcGFyYW1ldGVyIHRvIGdldCB0aGUgdmFyaWFuY2Ugb2YgYQorICAgICAgc2FtcGxlLgorCitFeGNlcHRpb25zCistLS0tLS0tLS0tCisKK0Egc2luZ2xlIGV4Y2VwdGlvbiBpcyBkZWZpbmVkOgorCisuLiBleGNlcHRpb246OiBTdGF0aXN0aWNzRXJyb3IKKworICAgU3ViY2xhc3Mgb2YgOmV4YzpgVmFsdWVFcnJvcmAgZm9yIHN0YXRpc3RpY3MtcmVsYXRlZCBleGNlcHRpb25zLgorCisuLgorICAgIyBUaGlzIG1vZGVsaW5lcyBtdXN0IGFwcGVhciB3aXRoaW4gdGhlIGxhc3QgdGVuIGxpbmVzIG9mIHRoZSBmaWxlLgorICAga2F0ZTogaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10YWJzIG9uOyBlbmNvZGluZyB1dGYtODsKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAppbmRleCBkYjNlZjg4Li42NjM1YjBlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CkBAIC0xNTI2LDcgKzE1MjYsNyBAQAogICAgYXQgdGhhdCBwb3NpdGlvbi4KIAogCi0uLiBtZXRob2Q6OiBzdHIuZXhwYW5kdGFicyhbdGFic2l6ZV0pCisuLiBtZXRob2Q6OiBzdHIuZXhwYW5kdGFicyh0YWJzaXplPTgpCiAKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5IG9uZSBvcgogICAgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZSBnaXZlbiB0YWIgc2l6ZS4gIFRhYgpAQCAtMjQ2Miw2ICsyNDYyLDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgT25lLWRpbWVuc2lvbmFsIG1lbW9yeXZpZXdzIHdpdGggZm9ybWF0cyAnQicsICdiJyBvciAnYycgYXJlIG5vdyBoYXNoYWJsZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIG1lbW9yeXZpZXcgaXMgbm93IHJlZ2lzdGVyZWQgYXV0b21hdGljYWxseSB3aXRoCisgICAgICA6Y2xhc3M6YGNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZWAKKwogICAgOmNsYXNzOmBtZW1vcnl2aWV3YCBoYXMgc2V2ZXJhbCBtZXRob2RzOgogCiAgICAuLiBtZXRob2Q6OiBfX2VxX18oZXhwb3J0ZXIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0IGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdAppbmRleCA5OTQ1MDZjLi5mMmVhMzYxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKQEAgLTY2LDYgKzY2LDE5IEBACiAgICBmb3JtYXQgKGBgbGVuKGJ1ZmZlcltvZmZzZXQ6XSlgYCBtdXN0IGJlIGF0IGxlYXN0IGBgY2FsY3NpemUoZm10KWBgKS4KIAogCisuLiBmdW5jdGlvbjo6IGl0ZXJfdW5wYWNrKGZtdCwgYnVmZmVyKQorCisgICBJdGVyYXRpdmVseSB1bnBhY2sgZnJvbSB0aGUgYnVmZmVyICpidWZmZXIqIGFjY29yZGluZyB0byB0aGUgZm9ybWF0CisgICBzdHJpbmcgKmZtdCouICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gaXRlcmF0b3Igd2hpY2ggd2lsbCByZWFkCisgICBlcXVhbGx5LXNpemVkIGNodW5rcyBmcm9tIHRoZSBidWZmZXIgdW50aWwgYWxsIGl0cyBjb250ZW50cyBoYXZlIGJlZW4KKyAgIGNvbnN1bWVkLiAgVGhlIGJ1ZmZlcidzIHNpemUgaW4gYnl0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBhbW91bnQKKyAgIG9mIGRhdGEgcmVxdWlyZWQgYnkgdGhlIGZvcm1hdCwgYXMgcmVmbGVjdGVkIGJ5IDpmdW5jOmBjYWxjc2l6ZWAuCisKKyAgIEVhY2ggaXRlcmF0aW9uIHlpZWxkcyBhIHR1cGxlIGFzIHNwZWNpZmllZCBieSB0aGUgZm9ybWF0IHN0cmluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBjYWxjc2l6ZShmbXQpCiAKICAgIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0IChhbmQgaGVuY2Ugb2YgdGhlIGJ5dGVzIG9iamVjdCBwcm9kdWNlZCBieQpAQCAtMzg4LDYgKzQwMSwxMyBAQAogICAgICAgKGBgbGVuKGJ1ZmZlcltvZmZzZXQ6XSlgYCBtdXN0IGJlIGF0IGxlYXN0IDphdHRyOmBzZWxmLnNpemVgKS4KIAogCisgICAuLiBtZXRob2Q6OiBpdGVyX3VucGFjayhidWZmZXIpCisKKyAgICAgIElkZW50aWNhbCB0byB0aGUgOmZ1bmM6YGl0ZXJfdW5wYWNrYCBmdW5jdGlvbiwgdXNpbmcgdGhlIGNvbXBpbGVkIGZvcm1hdC4KKyAgICAgIChgYGxlbihidWZmZXIpYGAgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDphdHRyOmBzZWxmLnNpemVgKS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIC4uIGF0dHJpYnV0ZTo6IGZvcm1hdAogCiAgICAgICBUaGUgZm9ybWF0IHN0cmluZyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIFN0cnVjdCBvYmplY3QuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdCBiL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CmluZGV4IDE1NzY0OWMuLmRkOGE1ZDIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCiAKIAotLi4gZnVuY3Rpb246OiBjaGVja19vdXRwdXQoYXJncywgKiwgc3RkaW49Tm9uZSwgc3RkZXJyPU5vbmUsIHNoZWxsPUZhbHNlLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogY2hlY2tfb3V0cHV0KGFyZ3MsICosIGlucHV0PU5vbmUsIHN0ZGluPU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1GYWxzZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0aW1lb3V0PU5vbmUpCiAKICAgIFJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzIGFuZCByZXR1cm4gaXRzIG91dHB1dC4KIApAQCAtMTI5LDE1ICsxMjksMjEgQEAKICAgIGluIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIChoZW5jZSB0aGUgdXNlIG9mIGtleXdvcmQtb25seSBub3RhdGlvbgogICAgaW4gdGhlIGFiYnJldmlhdGVkIHNpZ25hdHVyZSkuIFRoZSBmdWxsIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBsYXJnZWx5IHRoZQogICAgc2FtZSBhcyB0aGF0IG9mIHRoZSA6Y2xhc3M6YFBvcGVuYCBjb25zdHJ1Y3RvciAtIHRoaXMgZnVuY3Rpb25zIHBhc3NlcyBhbGwKLSAgIHN1cHBsaWVkIGFyZ3VtZW50cyBvdGhlciB0aGFuICp0aW1lb3V0KiBkaXJlY3RseSB0aHJvdWdoIHRvIHRoYXQgaW50ZXJmYWNlLgotICAgSW4gYWRkaXRpb24sICpzdGRvdXQqIGlzIG5vdCBwZXJtaXR0ZWQgYXMgYW4gYXJndW1lbnQsIGFzIGl0IGlzIHVzZWQKLSAgIGludGVybmFsbHkgdG8gY29sbGVjdCB0aGUgb3V0cHV0IGZyb20gdGhlIHN1YnByb2Nlc3MuCisgICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqaW5wdXQqIGFuZCAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0bworICAgdGhhdCBpbnRlcmZhY2UuICBJbiBhZGRpdGlvbiwgKnN0ZG91dCogaXMgbm90IHBlcm1pdHRlZCBhcyBhbiBhcmd1bWVudCwgYXMKKyAgIGl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBjb2xsZWN0IHRoZSBvdXRwdXQgZnJvbSB0aGUgc3VicHJvY2Vzcy4KIAogICAgVGhlICp0aW1lb3V0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLndhaXRgLiBJZiB0aGUgdGltZW91dAogICAgZXhwaXJlcywgdGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWQgYW5kIHRoZW4gd2FpdGVkIGZvciBhZ2Fpbi4gIFRoZQogICAgOmV4YzpgVGltZW91dEV4cGlyZWRgIGV4Y2VwdGlvbiB3aWxsIGJlIHJlLXJhaXNlZCBhZnRlciB0aGUgY2hpbGQgcHJvY2VzcwogICAgaGFzIHRlcm1pbmF0ZWQuCiAKKyAgIFRoZSAqaW5wdXQqIGFyZ3VtZW50IGlzIHBhc3NlZCB0byA6bWV0aDpgUG9wZW4uY29tbXVuaWNhdGVgIGFuZCB0aHVzIHRvIHRoZQorICAgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgdXNlZCBpdCBtdXN0IGJlIGEgYnl0ZSBzZXF1ZW5jZSwgb3IgYSBzdHJpbmcgaWYKKyAgIGBgdW5pdmVyc2FsX25ld2xpbmVzPVRydWVgYC4gIFdoZW4gdXNlZCwgdGhlIGludGVybmFsIDpjbGFzczpgUG9wZW5gIG9iamVjdAorICAgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHdpdGggYGBzdGRpbj1QSVBFYGAsIGFuZCB0aGUgKnN0ZGluKiBhcmd1bWVudCBtYXkKKyAgIG5vdCBiZSB1c2VkIGFzIHdlbGwuCisKICAgIEV4YW1wbGVzOjoKIAogICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZWNobyIsICJIZWxsbyBXb3JsZCEiXSkKQEAgLTE0Niw2ICsxNTIsMTAgQEAKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImVjaG8iLCAiSGVsbG8gV29ybGQhIl0sIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQogICAgICAgJ0hlbGxvIFdvcmxkIVxuJwogCisgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJzZWQiLCAiLWUiLCAicy9mb28vYmFyLyJdLAorICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0PWIid2hlbiBpbiB0aGUgY291cnNlIG9mIGZvb21hbiBldmVudHNcbiIpCisgICAgICBiJ3doZW4gaW4gdGhlIGNvdXJzZSBvZiBiYXJtYW4gZXZlbnRzXG4nCisKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiZXhpdCAxIiwgc2hlbGw9VHJ1ZSkKICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgIC4uLgpAQCAtMTY3LDEwICsxNzcsNiBAQAogICAgICAgLi4uICAgICBzaGVsbD1UcnVlKQogICAgICAgJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJwogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKLQotICAgLi4KLQogICAgLi4gd2FybmluZzo6CiAKICAgICAgIEludm9raW5nIHRoZSBzeXN0ZW0gc2hlbGwgd2l0aCBgYHNoZWxsPVRydWVgYCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQKQEAgLTE4Myw5ICsxODksMTMgQEAKICAgICAgIHJlYWQgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcywgdGhlIGNoaWxkIHByb2Nlc3MgbWF5IGJsb2NrIGlmIGl0CiAgICAgICBnZW5lcmF0ZXMgZW5vdWdoIG91dHB1dCB0byB0aGUgcGlwZSB0byBmaWxsIHVwIHRoZSBPUyBwaXBlIGJ1ZmZlci4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmlucHV0KiB3YXMgYWRkZWQuCiAKIC4uIGRhdGE6OiBERVZOVUxMCiAKQEAgLTgzMyw4ICs4NDMsNiBAQAogICAgVGhlIG5ldyBwcm9jZXNzIGhhcyBhIG5ldyBjb25zb2xlLCBpbnN0ZWFkIG9mIGluaGVyaXRpbmcgaXRzIHBhcmVudCdzCiAgICBjb25zb2xlICh0aGUgZGVmYXVsdCkuCiAKLSAgIFRoaXMgZmxhZyBpcyBhbHdheXMgc2V0IHdoZW4gOmNsYXNzOmBQb3BlbmAgaXMgY3JlYXRlZCB3aXRoIGBgc2hlbGw9VHJ1ZWBgLgotCiAuLiBkYXRhOjogQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQCiAKICAgIEEgOmNsYXNzOmBQb3BlbmAgYGBjcmVhdGlvbmZsYWdzYGAgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhhdCBhIG5ldyBwcm9jZXNzCkBAIC0xMDQ5LDkgKzEwNTcsOSBAQAogCiAgICBSZXR1cm4gYGAoc3RhdHVzLCBvdXRwdXQpYGAgb2YgZXhlY3V0aW5nICpjbWQqIGluIGEgc2hlbGwuCiAKLSAgIEV4ZWN1dGUgdGhlIHN0cmluZyAqY21kKiBpbiBhIHNoZWxsIHdpdGggOmNsYXNzOmBQb3BlbmAgYW5kIHJldHVybiBhIDItdHVwbGUKLSAgIGBgKHN0YXR1cywgb3V0cHV0KWBgIHZpYSA6ZnVuYzpgUG9wZW4uY29tbXVuaWNhdGVgLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZQotICAgaXMgdXNlZDsgc2VlIHRoZSBub3RlcyBvbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgbW9yZSBkZXRhaWxzLgorICAgRXhlY3V0ZSB0aGUgc3RyaW5nICpjbWQqIGluIGEgc2hlbGwgd2l0aCA6bWV0aDpgUG9wZW4uY2hlY2tfb3V0cHV0YCBhbmQKKyAgIHJldHVybiBhIDItdHVwbGUgYGAoc3RhdHVzLCBvdXRwdXQpYGAuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzIHVzZWQ7CisgICBzZWUgdGhlIG5vdGVzIG9uIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCiAgICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZSBpbnRlcnByZXRlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VuYXUucnN0IGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CmluZGV4IDRiZGI5OWIuLjE1YzA2YjUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKQEAgLTE1MCw4ICsxNTAsOSBAQAogCiAuLiBtZXRob2Q6OiBBVV9yZWFkLmdldHBhcmFtcygpCiAKLSAgIFJldHVybnMgYSB0dXBsZSBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwKLSAgIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUgOm1ldGg6YGdldFwqYCBtZXRob2RzLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogQVVfcmVhZC5yZWFkZnJhbWVzKG4pCkBAIC0yMTEsNiArMjEyLDkgQEAKIAogICAgU2V0IHRoZSBzYW1wbGUgd2lkdGggKGluIGJ5dGVzLikKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIDI0LWJpdCBzYW1wbGVzLgorCiAKIC4uIG1ldGhvZDo6IEFVX3dyaXRlLnNldGZyYW1lcmF0ZShuKQogCkBAIC0yNDYsMTEgKzI1MCwxNyBAQAogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMsIHdpdGhvdXQgY29ycmVjdGluZyAqbmZyYW1lcyouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IEFVX3dyaXRlLndyaXRlZnJhbWVzKGRhdGEpCiAKICAgIFdyaXRlIGF1ZGlvIGZyYW1lcyBhbmQgbWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5cy5yc3QgYi9Eb2MvbGlicmFyeS9zeXMucnN0CmluZGV4IGJjMWQ5ZmUuLmI4ODVkZTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzLnJzdApAQCAtMzgwLDYgKzM4MCwyMSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorLi4gZnVuY3Rpb246OiBnZXRhbGxvY2F0ZWRibG9ja3MoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnkgdGhlIGludGVycHJldGVyLAorICAgcmVnYXJkbGVzcyBvZiB0aGVpciBzaXplLiAgVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgdXNlZnVsIGZvciB0cmFja2luZworICAgYW5kIGRlYnVnZ2luZyBtZW1vcnkgbGVha3MuICBCZWNhdXNlIG9mIHRoZSBpbnRlcnByZXRlcidzIGludGVybmFsCisgICBjYWNoZXMsIHRoZSByZXN1bHQgY2FuIHZhcnkgZnJvbSBjYWxsIHRvIGNhbGw7IHlvdSBtYXkgaGF2ZSB0byBjYWxsCisgICA6ZnVuYzpgX2NsZWFyX3R5cGVfY2FjaGUoKWAgYW5kIDpmdW5jOmBnYy5jb2xsZWN0KClgIHRvIGdldCBtb3JlCisgICBwcmVkaWN0YWJsZSByZXN1bHRzLgorCisgICBJZiBhIFB5dGhvbiBidWlsZCBvciBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgcmVhc29uYWJseSBjb21wdXRlIHRoaXMKKyAgIGluZm9ybWF0aW9uLCA6ZnVuYzpgZ2V0YWxsb2NhdGVkYmxvY2tzKClgIGlzIGFsbG93ZWQgdG8gcmV0dXJuIDAgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBnZXRjaGVja2ludGVydmFsKCkKIAogICAgUmV0dXJuIHRoZSBpbnRlcnByZXRlcidzICJjaGVjayBpbnRlcnZhbCI7IHNlZSA6ZnVuYzpgc2V0Y2hlY2tpbnRlcnZhbGAuCkBAIC0zOTYsOSArNDExLDEwIEBACiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZGxvcGVuZmxhZ3MoKQogCi0gICBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZsYWdzIHRoYXQgYXJlIHVzZWQgZm9yIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuCi0gICBUaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIDptb2Q6YGN0eXBlc2AgYW5kIDptb2Q6YERMRkNOYCBtb2R1bGVzLgotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvcgorICAgOmM6ZnVuYzpgZGxvcGVuYCBjYWxscy4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyB2YWx1ZXMgY2FuIGJlCisgICBmb3VuZCBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSAoYGBSVExEX3h4eGBgIGNvbnN0YW50cywgZS5nLgorICAgOmRhdGE6YG9zLlJUTERfTEFaWWApLiAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKQEAgLTU3OCw5ICs1OTQsMjAgQEAKICAgIHwgOmNvbnN0OmBpbWFnYCAgICAgICB8IG11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgICAgfCBjb21wbGV4IG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBhbGdvcml0aG1gICB8IG5hbWUgb2YgdGhlIGFsZ29yaXRobSBmb3IgaGFzaGluZyBvZiBzdHIsIGJ5dGVzLCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgfCBhbmQgbWVtb3J5dmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBoYXNoX2JpdHNgICB8IGludGVybmFsIG91dHB1dCBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YHNlZWRfYml0c2AgIHwgc2l6ZSBvZiB0aGUgc2VlZCBrZXkgb2YgdGhlIGhhc2ggYWxnb3JpdGhtICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOiAzLjQKKyAgICAgIEFkZGVkICphbGdvcml0aG0qLCAqaGFzaF9iaXRzKiBhbmQgKnNlZWRfYml0cyoKKwogCiAuLiBkYXRhOjogaGV4dmVyc2lvbgogCkBAIC02NjQsNiArNjkxLDE2IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisuLiBkYXRhOjogX19pbnRlcmFjdGl2ZWhvb2tfXworCisgICBXaGVuIHByZXNlbnQsIHRoaXMgZnVuY3Rpb24gaXMgYXV0b21hdGljYWxseSBjYWxsZWQgKHdpdGggbm8gYXJndW1lbnRzKQorICAgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgaXMgbGF1bmNoZWQgaW4gOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAuCisgICBUaGlzIGlzIGRvbmUgYWZ0ZXIgdGhlIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUgaXMgcmVhZCwgc28gdGhhdCB5b3UKKyAgIGNhbiBzZXQgdGhpcyBob29rIHRoZXJlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGludGVybihzdHJpbmcpCiAKICAgIEVudGVyICpzdHJpbmcqIGluIHRoZSB0YWJsZSBvZiAiaW50ZXJuZWQiIHN0cmluZ3MgYW5kIHJldHVybiB0aGUgaW50ZXJuZWQgc3RyaW5nCkBAIC04MTEsOCArODQ4LDYgQEAKICAgIFdpbmRvd3MgICAgICAgICAgYGAnd2luMzInYGAKICAgIFdpbmRvd3MvQ3lnd2luICAgYGAnY3lnd2luJ2BgCiAgICBNYWMgT1MgWCAgICAgICAgIGBgJ2RhcndpbidgYAotICAgT1MvMiAgICAgICAgICAgICBgYCdvczInYGAKLSAgIE9TLzIgRU1YICAgICAgICAgYGAnb3MyZW14J2BgCiAgICA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwpAQCAtODgzLDcgKzkxOCw3IEBACiAgICB0aGUgaW50ZXJwcmV0ZXIgbG9hZHMgZXh0ZW5zaW9uIG1vZHVsZXMuICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgd2lsbCBlbmFibGUgYQogICAgbGF6eSByZXNvbHZpbmcgb2Ygc3ltYm9scyB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSwgaWYgY2FsbGVkIGFzCiAgICBgYHN5cy5zZXRkbG9wZW5mbGFncygwKWBgLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXMKLSAgIGBgc3lzLnNldGRsb3BlbmZsYWdzKG9zLlJUTERfR0xPQkFMKWBgLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXMKKyAgIGBgc3lzLnNldGRsb3BlbmZsYWdzKG9zLlJUTERfR0xPQkFMKWBgLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIHZhbHVlcwogICAgY2FuIGJlIGZvdW5kIGluIHRoZSA6bW9kOmBvc2AgbW9kdWxlIChgYFJUTERfeHh4YGAgY29uc3RhbnRzLCBlLmcuCiAgICA6ZGF0YTpgb3MuUlRMRF9MQVpZYCkuCiAKQEAgLTEwOTMsNyArMTEyOCw2IEBACiAgICB8IDpjb25zdDpgbmFtZWAgICAgfCBOYW1lIG9mIHRoZSB0aHJlYWQgaW1wbGVtZW50YXRpb246ICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAnbnQnYGA6IFdpbmRvd3MgdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdvczInYGA6IE9TLzIgdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ3B0aHJlYWQnYGA6IFBPU0lYIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAnc29sYXJpcydgYDogU29sYXJpcyB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CmluZGV4IGM0N2RjY2UuLjUzNWFjNTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdApAQCAtODMsOCArODMsNiBAQAogICBsb2NhdGVkIHVuZGVyIHRoZSB1c2VyIGhvbWUgZGlyZWN0b3J5LgogLSAqbnQqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3JtcyBsaWtlIFdpbmRvd3MuCiAtICpudF91c2VyKjogc2NoZW1lIGZvciBOVCBwbGF0Zm9ybXMsIHdoZW4gdGhlICp1c2VyKiBvcHRpb24gaXMgdXNlZC4KLS0gKm9zMio6IHNjaGVtZSBmb3IgT1MvMiBwbGF0Zm9ybXMuCi0tICpvczJfaG9tZSo6IHNjaGVtZSBmb3IgT1MvMiBwYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgogCiBFYWNoIHNjaGVtZSBpcyBpdHNlbGYgY29tcG9zZWQgb2YgYSBzZXJpZXMgb2YgcGF0aHMgYW5kIGVhY2ggcGF0aCBoYXMgYSB1bmlxdWUKIGlkZW50aWZpZXIuICBQeXRob24gY3VycmVudGx5IHVzZXMgZWlnaHQgcGF0aHM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CmluZGV4IGI4YjY1YjkuLmQ3ZTNiNWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CkBAIC01OTEsNiArNTkxLDY3IEBACiAgICBSZXR1cm4gOmNvbnN0OmBUcnVlYCBpZiBpdCBpcyBvbmUgb2YgY2hhcmFjdGVyIGRldmljZSwgYmxvY2sgZGV2aWNlIG9yIEZJRk8uCiAKIAorLi4gX3RhcmZpbGUtY29tbWFuZGxpbmU6CisKK0NvbW1hbmQgTGluZSBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1RoZSA6bW9kOmB0YXJmaWxlYCBtb2R1bGUgcHJvdmlkZXMgYSBzaW1wbGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSB0byBpbnRlcmFjdAord2l0aCB0YXIgYXJjaGl2ZXMuCisKK0lmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyB0YXIgYXJjaGl2ZSwgc3BlY2lmeSBpdHMgbmFtZSBhZnRlciB0aGUgOm9wdGlvbjpgLWNgCitvcHRpb24gYW5kIHRoZW4gbGlzdCB0aGUgZmlsZW5hbWUocykgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQ6OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtYyBtb250eS50YXIgIHNwYW0udHh0IGVnZ3MudHh0CisKK1Bhc3NpbmcgYSBkaXJlY3RvcnkgaXMgYWxzbyBhY2NlcHRhYmxlOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWMgbW9udHkudGFyIGxpZmUtb2YtYnJpYW5fMTk3OS8KKworSWYgeW91IHdhbnQgdG8gZXh0cmFjdCBhIHRhciBhcmNoaXZlIGludG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB1c2UKK3RoZSA6b3B0aW9uOmAtZWAgb3B0aW9uOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWUgbW9udHkudGFyCisKK1lvdSBjYW4gYWxzbyBleHRyYWN0IGEgdGFyIGFyY2hpdmUgaW50byBhIGRpZmZlcmVudCBkaXJlY3RvcnkgYnkgcGFzc2luZyB0aGUKK2RpcmVjdG9yeSdzIG5hbWU6OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtZSBtb250eS50YXIgIG90aGVyLWRpci8KKworRm9yIGEgbGlzdCBvZiB0aGUgZmlsZXMgaW4gYSB0YXIgYXJjaGl2ZSwgdXNlIHRoZSA6b3B0aW9uOmAtbGAgb3B0aW9uOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWwgbW9udHkudGFyCisKKworQ29tbWFuZCBsaW5lIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIGNtZG9wdGlvbjo6IC1sIDx0YXJmaWxlPgorICAgICAgICAgICAgICAgLS1saXN0IDx0YXJmaWxlPgorCisgICBMaXN0IGZpbGVzIGluIGEgdGFyZmlsZS4KKworLi4gY21kb3B0aW9uOjogLWMgPHRhcmZpbGU+IDxzb3VyY2UxPiA8c291cmNlTj4KKyAgICAgICAgICAgICAgIC0tY3JlYXRlIDx0YXJmaWxlPiA8c291cmNlMT4gPHNvdXJjZU4+CisKKyAgIENyZWF0ZSB0YXJmaWxlIGZyb20gc291cmNlIGZpbGVzLgorCisuLiBjbWRvcHRpb246OiAtZSA8dGFyZmlsZT4gWzxvdXRwdXRfZGlyPl0KKyAgICAgICAgICAgICAgIC0tZXh0cmFjdCA8dGFyZmlsZT4gWzxvdXRwdXRfZGlyPl0KKworICAgRXh0cmFjdCB0YXJmaWxlIGludG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmICpvdXRwdXRfZGlyKiBpcyBub3Qgc3BlY2lmaWVkLgorCisuLiBjbWRvcHRpb246OiAtdCA8dGFyZmlsZT4KKyAgICAgICAgICAgICAgIC0tdGVzdCA8dGFyZmlsZT4KKworICAgVGVzdCB3aGV0aGVyIHRoZSB0YXJmaWxlIGlzIHZhbGlkIG9yIG5vdC4KKworLi4gY21kb3B0aW9uOjogLXYsIC0tdmVyYm9zZQorCisgICBWZXJib3NlIG91dHB1dAorCiAuLiBfdGFyLWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGVzdC5yc3QgYi9Eb2MvbGlicmFyeS90ZXN0LnJzdAppbmRleCBjMTI3MGY0Li4yYzUxNTQ5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZXN0LnJzdApAQCAtNDQyLDEzICs0NDIsNiBAQAogICAgQSBkZWNvcmF0b3IgZm9yIHJ1bm5pbmcgdGVzdHMgdGhhdCByZXF1aXJlIHN1cHBvcnQgZm9yIHN5bWJvbGljIGxpbmtzLgogCiAKLS4uIGZ1bmN0aW9uOjogc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKQotCi0gICBBIGNvbnRleHQgbWFuYWdlciB0aGF0IGRpc2FibGVzIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcKLSAgIGBTZXRFcnJvck1vZGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjElMjh2PXZzLjg1JTI5LmFzcHg+YF8uCi0gICBPbiBvdGhlciBwbGF0Zm9ybXMgaXQncyBhIG5vLW9wLgotCi0KIC4uIGRlY29yYXRvcjo6IGFudGljaXBhdGVfZmFpbHVyZShjb25kaXRpb24pCiAKICAgIEEgZGVjb3JhdG9yIHRvIGNvbmRpdGlvbmFsbHkgbWFyayB0ZXN0cyB3aXRoCkBAIC01OTMsNiArNTg2LDIxIEBACiAgICBUZW1wb3JhcmlseSB1bnNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBlbnZ2YXJgYC4KIAogCisuLiBjbGFzczo6IFN1cHByZXNzQ3Jhc2hSZXBvcnQoKQorCisgICBBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIHRyeSB0byBwcmV2ZW50IGNyYXNoIGRpYWxvZyBwb3B1cHMgb24gdGVzdHMgdGhhdAorICAgYXJlIGV4cGVjdGVkIHRvIGNyYXNoIGEgc3VicHJvY2Vzcy4KKworICAgT24gV2luZG93cywgaXQgZGlzYWJsZXMgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZworICAgYFNldEVycm9yTW9kZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMS5hc3B4PmBfLgorCisgICBPbiBVTklYLCA6ZnVuYzpgcmVzb3VyY2Uuc2V0cmxpbWl0YCBpcyB1c2VkIHRvIHNldAorICAgOmF0dHI6YHJlc291cmNlLlJMSU1JVF9DT1JFYCdzIHNvZnQgbGltaXQgdG8gMCB0byBwcmV2ZW50IGNvcmVkdW1wIGZpbGUKKyAgIGNyZWF0aW9uLgorCisgICBPbiBib3RoIHBsYXRmb3JtcywgdGhlIG9sZCB2YWx1ZSBpcyByZXN0b3JlZCBieSA6bWV0aDpgX19leGl0X19gLgorCisKIC4uIGNsYXNzOjogV2FybmluZ3NSZWNvcmRlcigpCiAKICAgIENsYXNzIHVzZWQgdG8gcmVjb3JkIHdhcm5pbmdzIGZvciB1bml0IHRlc3RzLiBTZWUgZG9jdW1lbnRhdGlvbiBvZgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0IGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CmluZGV4IGM2MjUyNTQuLjFiYTQyYTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKQEAgLTEwLDExICsxMCwxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgOm1vZDpgdGV4dHdyYXBgIG1vZHVsZSBwcm92aWRlcyB0d28gY29udmVuaWVuY2UgZnVuY3Rpb25zLCA6ZnVuYzpgd3JhcGAgYW5kCi06ZnVuYzpgZmlsbGAsIGFzIHdlbGwgYXMgOmNsYXNzOmBUZXh0V3JhcHBlcmAsIHRoZSBjbGFzcyB0aGF0IGRvZXMgYWxsIHRoZSB3b3JrLAotYW5kIHR3byB1dGlsaXR5IGZ1bmN0aW9ucywgOmZ1bmM6YGRlZGVudGAgYW5kIDpmdW5jOmBpbmRlbnRgLiAgSWYgeW91J3JlIGp1c3Qgd3JhcHBpbmcgb3IgZmlsbGluZyBvbmUKLW9yIHR3byAgdGV4dCBzdHJpbmdzLCB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHNob3VsZCBiZSBnb29kIGVub3VnaDsKLW90aGVyd2lzZSwgIHlvdSBzaG91bGQgdXNlIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgVGV4dFdyYXBwZXJgIGZvciBlZmZpY2llbmN5LgorVGhlIDptb2Q6YHRleHR3cmFwYCBtb2R1bGUgcHJvdmlkZXMgc29tZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMsCithcyB3ZWxsIGFzIDpjbGFzczpgVGV4dFdyYXBwZXJgLCB0aGUgY2xhc3MgdGhhdCBkb2VzIGFsbCB0aGUgd29yay4KK0lmIHlvdSdyZSBqdXN0IHdyYXBwaW5nIG9yIGZpbGxpbmcgb25lIG9yIHR3byB0ZXh0IHN0cmluZ3MsIHRoZSBjb252ZW5pZW5jZQorZnVuY3Rpb25zIHNob3VsZCBiZSBnb29kIGVub3VnaDsgb3RoZXJ3aXNlLCB5b3Ugc2hvdWxkIHVzZSBhbiBpbnN0YW5jZSBvZgorOmNsYXNzOmBUZXh0V3JhcHBlcmAgZm9yIGVmZmljaWVuY3kuCiAKIC4uIGZ1bmN0aW9uOjogd3JhcCh0ZXh0LCB3aWR0aD03MCwgKiprd2FyZ3MpCiAKQEAgLTM5LDE5ICszOSwyNCBAQAogICAgSW4gcGFydGljdWxhciwgOmZ1bmM6YGZpbGxgIGFjY2VwdHMgZXhhY3RseSB0aGUgc2FtZSBrZXl3b3JkIGFyZ3VtZW50cyBhcwogICAgOmZ1bmM6YHdyYXBgLgogCi1Cb3RoIDpmdW5jOmB3cmFwYCBhbmQgOmZ1bmM6YGZpbGxgIHdvcmsgYnkgY3JlYXRpbmcgYSA6Y2xhc3M6YFRleHRXcmFwcGVyYAotaW5zdGFuY2UgYW5kIGNhbGxpbmcgYSBzaW5nbGUgbWV0aG9kIG9uIGl0LiAgVGhhdCBpbnN0YW5jZSBpcyBub3QgcmV1c2VkLCBzbyBmb3IKLWFwcGxpY2F0aW9ucyB0aGF0IHdyYXAvZmlsbCBtYW55IHRleHQgc3RyaW5ncywgaXQgd2lsbCBiZSBtb3JlIGVmZmljaWVudCBmb3IgeW91Ci10byBjcmVhdGUgeW91ciBvd24gOmNsYXNzOmBUZXh0V3JhcHBlcmAgb2JqZWN0LgogCi1UZXh0IGlzIHByZWZlcmFibHkgd3JhcHBlZCBvbiB3aGl0ZXNwYWNlcyBhbmQgcmlnaHQgYWZ0ZXIgdGhlIGh5cGhlbnMgaW4KLWh5cGhlbmF0ZWQgd29yZHM7IG9ubHkgdGhlbiB3aWxsIGxvbmcgd29yZHMgYmUgYnJva2VuIGlmIG5lY2Vzc2FyeSwgdW5sZXNzCi06YXR0cjpgVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc2AgaXMgc2V0IHRvIGZhbHNlLgorLi4gZnVuY3Rpb246OiBzaG9ydGVuKHRleHQsIHdpZHRoPTcwLCAqLCBwbGFjZWhvbGRlcj0iIFsuLi5dIikKIAotVHdvIGFkZGl0aW9uYWwgdXRpbGl0eSBmdW5jdGlvbiwgOmZ1bmM6YGRlZGVudGAgYW5kIDpmdW5jOmBpbmRlbnRgLCBhcmUKLXByb3ZpZGVkIHRvIHJlbW92ZSBpbmRlbnRhdGlvbiBmcm9tIHN0cmluZ3MgdGhhdCBoYXZlIHVud2FudGVkIHdoaXRlc3BhY2UKLXRvIHRoZSBsZWZ0IG9mIHRoZSB0ZXh0IGFuZCB0byBhZGQgYW4gYXJiaXRyYXJ5IHByZWZpeCB0byBzZWxlY3RlZCBsaW5lcwotaW4gYSBibG9jayBvZiB0ZXh0LgorICAgQ29sbGFwc2UgYW5kIHRydW5jYXRlIHRoZSBnaXZlbiB0ZXh0IHRvIGZpdCBpbiB0aGUgZ2l2ZW4gd2lkdGguCisKKyAgIFRoZSB0ZXh0IGZpcnN0IGhhcyBpdHMgd2hpdGVzcGFjZSBjb2xsYXBzZWQuICBJZiBpdCB0aGVuIGZpdHMgaW4KKyAgIHRoZSAqd2lkdGgqLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuICBPdGhlcndpc2UsIGFzIG1hbnkgd29yZHMKKyAgIGFzIHBvc3NpYmxlIGFyZSBqb2luZWQgYW5kIHRoZW4gdGhlICpwbGFjZWhvbGRlciogaXMgYXBwZW5kZWQ6OgorCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTEyKQorICAgICAgJ0hlbGxvIHdvcmxkIScKKyAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTEpCisgICAgICAnSGVsbG8gWy4uLl0nCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gd29ybGQiLCB3aWR0aD0xMCwgcGxhY2Vob2xkZXI9Ii4uLiIpCisgICAgICAnSGVsbG8uLi4nCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZGVkZW50KHRleHQpCiAKQEAgLTEwMiw2ICsxMDcsMTYgQEAKICAgICAgICsgd29ybGQKIAogCis6ZnVuYzpgd3JhcGAsIDpmdW5jOmBmaWxsYCBhbmQgOmZ1bmM6YHNob3J0ZW5gIHdvcmsgYnkgY3JlYXRpbmcgYQorOmNsYXNzOmBUZXh0V3JhcHBlcmAgaW5zdGFuY2UgYW5kIGNhbGxpbmcgYSBzaW5nbGUgbWV0aG9kIG9uIGl0LiAgVGhhdAoraW5zdGFuY2UgaXMgbm90IHJldXNlZCwgc28gZm9yIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MgbWFueSB0ZXh0CitzdHJpbmdzLCBpdCBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdG8gY3JlYXRlIHlvdXIgb3duCis6Y2xhc3M6YFRleHRXcmFwcGVyYCBvYmplY3QuCisKK1RleHQgaXMgcHJlZmVyYWJseSB3cmFwcGVkIG9uIHdoaXRlc3BhY2VzIGFuZCByaWdodCBhZnRlciB0aGUgaHlwaGVucyBpbgoraHlwaGVuYXRlZCB3b3Jkczsgb25seSB0aGVuIHdpbGwgbG9uZyB3b3JkcyBiZSBicm9rZW4gaWYgbmVjZXNzYXJ5LCB1bmxlc3MKKzphdHRyOmBUZXh0V3JhcHBlci5icmVha19sb25nX3dvcmRzYCBpcyBzZXQgdG8gZmFsc2UuCisKIC4uIGNsYXNzOjogVGV4dFdyYXBwZXIoKiprd2FyZ3MpCiAKICAgIFRoZSA6Y2xhc3M6YFRleHRXcmFwcGVyYCBjb25zdHJ1Y3RvciBhY2NlcHRzIGEgbnVtYmVyIG9mIG9wdGlvbmFsIGtleXdvcmQKQEAgLTIzNSw3ICsyNTAsMjMgQEAKICAgICAgIHdhcyB0byBhbHdheXMgYWxsb3cgYnJlYWtpbmcgaHlwaGVuYXRlZCB3b3Jkcy4KIAogCi0gICA6Y2xhc3M6YFRleHRXcmFwcGVyYCBhbHNvIHByb3ZpZGVzIHR3byBwdWJsaWMgbWV0aG9kcywgYW5hbG9nb3VzIHRvIHRoZQorICAgLi4gYXR0cmlidXRlOjogbWF4X2xpbmVzCisKKyAgICAgIChkZWZhdWx0OiBgYE5vbmVgYCkgSWYgbm90IGBgTm9uZWBgLCB0aGVuIHRoZSB0ZXh0IGJlIHdpbGwgdHJ1bmNhdGVkIHRvCisgICAgICAqbWF4X2xpbmVzKiBsaW5lcy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgLi4gYXR0cmlidXRlOjogcGxhY2Vob2xkZXIKKworICAgICAgKGRlZmF1bHQ6IGBgJyBbLi4uXSdgYCkgU3RyaW5nIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbGFzdCBsaW5lIG9mCisgICAgICB0ZXh0IGlmIGl0IHdpbGwgYmUgdHJ1bmNhdGVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisgICA6Y2xhc3M6YFRleHRXcmFwcGVyYCBhbHNvIHByb3ZpZGVzIHNvbWUgcHVibGljIG1ldGhvZHMsIGFuYWxvZ291cyB0byB0aGUKICAgIG1vZHVsZS1sZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbnM6CiAKICAgIC4uIG1ldGhvZDo6IHdyYXAodGV4dCkKQEAgLTI1MSw0ICsyODIsMyBAQAogCiAgICAgICBXcmFwcyB0aGUgc2luZ2xlIHBhcmFncmFwaCBpbiAqdGV4dCosIGFuZCByZXR1cm5zIGEgc2luZ2xlIHN0cmluZwogICAgICAgY29udGFpbmluZyB0aGUgd3JhcHBlZCBwYXJhZ3JhcGguCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CmluZGV4IDdjMzI2ZDEuLjRhM2IzZWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdApAQCAtNTcsNiArNTcsMTUgQEAKICAgIGFuZCB0aHJlYWRzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gc3RhcnRlZC4KIAogCisuLiBmdW5jdGlvbjo6IG1haW5fdGhyZWFkKCkKKworICAgUmV0dXJuIHRoZSBtYWluIDpjbGFzczpgVGhyZWFkYCBvYmplY3QuICBJbiBub3JtYWwgY29uZGl0aW9ucywgdGhlCisgICBtYWluIHRocmVhZCBpcyB0aGUgdGhyZWFkIGZyb20gd2hpY2ggdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3YXMKKyAgIHN0YXJ0ZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc2V0dHJhY2UoZnVuYykKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IHRyYWNlIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aW1laXQucnN0IGIvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAppbmRleCBhNDg3OTE3Li4wY2MxNTg2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aW1laXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgdCA9IFRpbWVyKC4uLikgICAgICAgIyBvdXRzaWRlIHRoZSB0cnkvZXhjZXB0CiAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgdC50aW1laXQoLi4uKSAgICAjIG9yIHQucmVwZWF0KC4uLikKLSAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgdC5wcmludF9leGMoKQogCiAgICAgICBUaGUgYWR2YW50YWdlIG92ZXIgdGhlIHN0YW5kYXJkIHRyYWNlYmFjayBpcyB0aGF0IHNvdXJjZSBsaW5lcyBpbiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0IGIvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKaW5kZXggYWQzN2E3Yi4uODNmMGVkNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKQEAgLTc0NywzMiArNzQ3LDYgQEAKICAgIGRpc3BsYXllZC4gIFlvdSBjYW4gdXNlIHRoZXNlIDptb2Q6YHRraW50ZXJgIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlc2Ugc3BlY2lhbAogICAgcG9pbnRzIGluIHRleHQgd2lkZ2V0czoKIAotLi4gZnVuY3Rpb246OiBBdEVuZCgpCi0gICAgICByZWZlcnMgdG8gdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIHRleHQKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0SW5zZXJ0KCkKLSAgICAgIHJlZmVycyB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIHRleHQgY3Vyc29yIGlzCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdFNlbEZpcnN0KCkKLSAgICAgIGluZGljYXRlcyB0aGUgYmVnaW5uaW5nIHBvaW50IG9mIHRoZSBzZWxlY3RlZCB0ZXh0Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdFNlbExhc3QoKQotICAgICAgZGVub3RlcyB0aGUgbGFzdCBwb2ludCBvZiB0aGUgc2VsZWN0ZWQgdGV4dCBhbmQgZmluYWxseQotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXQoeFssIHldKQotICAgICAgcmVmZXJzIHRvIHRoZSBjaGFyYWN0ZXIgYXQgcGl4ZWwgbG9jYXRpb24gKngqLCAqeSogKHdpdGggKnkqIG5vdCB1c2VkIGluIHRoZQotICAgICAgY2FzZSBvZiBhIHRleHQgZW50cnkgd2lkZ2V0LCB3aGljaCBjb250YWlucyBhIHNpbmdsZSBsaW5lIG9mIHRleHQpLgotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KIFRleHQgd2lkZ2V0IGluZGV4ZXMKICAgIFRoZSBpbmRleCBub3RhdGlvbiBmb3IgVGV4dCB3aWRnZXRzIGlzIHZlcnkgcmljaCBhbmQgaXMgYmVzdCBkZXNjcmliZWQgaW4gdGhlIFRrCiAgICBtYW4gcGFnZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0IGIvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdAppbmRleCAzMmU1NzMzLi5iNjhhOGYxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKQEAgLTEyOSw2ICsxMjksMTMgQEAKIAogICAgQSBzaG9ydGhhbmQgZm9yIGBgZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpYGAuCiAKKy4uIGZ1bmN0aW9uOjogY2xlYXJfZnJhbWVzKHRiKQorCisgICBDbGVhcnMgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhbGwgdGhlIHN0YWNrIGZyYW1lcyBpbiBhIHRyYWNlYmFjayAqdGIqCisgICBieSBjYWxsaW5nIHRoZSA6bWV0aDpgY2xlYXJgIG1ldGhvZCBvZiBlYWNoIGZyYW1lIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogLi4gX3RyYWNlYmFjay1leGFtcGxlOgogCkBAIC0xNDYsNyArMTUzLDcgQEAKICAgICAgICBzb3VyY2UgPSBpbnB1dCgiPj4+ICIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBleGVjKHNvdXJjZSwgZW52ZGlyKQotICAgICAgIGV4Y2VwdDoKKyAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBwcmludCgiRXhjZXB0aW9uIGluIHVzZXIgY29kZToiKQogICAgICAgICAgICBwcmludCgiLSIqNjApCiAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3Rkb3V0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0IGIvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzE2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QKQEAgLTAsMCArMSw2MDUgQEAKKzptb2Q6YHRyYWNlbWFsbG9jYCAtLS0gVHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiB0cmFjZW1hbGxvYworICAgOnN5bm9wc2lzOiBUcmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisKK1RoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgYSBkZWJ1ZyB0b29sIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5CitQeXRob24uIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisKKyogVHJhY2ViYWNrIHdoZXJlIGFuIG9iamVjdCB3YXMgYWxsb2NhdGVkCisqIFN0YXRpc3RpY3Mgb24gYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MgcGVyIGZpbGVuYW1lIGFuZCBwZXIgbGluZSBudW1iZXI6CisgIHRvdGFsIHNpemUsIG51bWJlciBhbmQgYXZlcmFnZSBzaXplIG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCisqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHNuYXBzaG90cyB0byBkZXRlY3QgbWVtb3J5IGxlYWtzCisKK1RvIHRyYWNlIG1vc3QgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLCB0aGUgbW9kdWxlIHNob3VsZCBiZSBzdGFydGVkCithcyBlYXJseSBhcyBwb3NzaWJsZSBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05UUkFDRU1BTExPQ2AgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIHRvIGBgMWBgLCBvciBieSB1c2luZyA6b3B0aW9uOmAtWGAgYGB0cmFjZW1hbGxvY2BgIGNvbW1hbmQgbGluZQorb3B0aW9uLiBUaGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IHJ1bnRpbWUgdG8KK3N0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzIHRoZSBtb3N0IHJlY2VudAorZnJhbWUgKDEgZnJhbWUpLiBUbyBzdG9yZSAyNSBmcmFtZXMgYXQgc3RhcnR1cDogc2V0IHRoZQorOmVudnZhcjpgUFlUSE9OVFJBQ0VNQUxMT0NgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGBgMjVgYCwgb3IgdXNlIHRoZQorOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2M9MjVgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCitFeGFtcGxlcworPT09PT09PT0KKworRGlzcGxheSB0aGUgdG9wIDEwCistLS0tLS0tLS0tLS0tLS0tLS0KKworRGlzcGxheSB0aGUgMTAgZmlsZXMgYWxsb2NhdGluZyB0aGUgbW9zdCBtZW1vcnk6OgorCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJykKKworICAgIHByaW50KCJbIFRvcCAxMCBdIikKKyAgICBmb3Igc3RhdCBpbiB0b3Bfc3RhdHNbOjEwXToKKyAgICAgICAgcHJpbnQoc3RhdCkKKworCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgWyBUb3AgMTAgXQorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjcxNjogc2l6ZT00ODU1IEtpQiwgY291bnQ9MzkzMjgsIGF2ZXJhZ2U9MTI2IEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoyODQ6IHNpemU9NTIxIEtpQiwgY291bnQ9MzE5OSwgYXZlcmFnZT0xNjcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9jb2xsZWN0aW9ucy9fX2luaXRfXy5weTozNjg6IHNpemU9MjQ0IEtpQiwgY291bnQ9MjMxNSwgYXZlcmFnZT0xMDggQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9jYXNlLnB5OjM4MTogc2l6ZT0xODUgS2lCLCBjb3VudD03NzksIGF2ZXJhZ2U9MjQzIEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvY2FzZS5weTo0MDI6IHNpemU9MTU0IEtpQiwgY291bnQ9Mzc4LCBhdmVyYWdlPTQxNiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2FiYy5weToxMzM6IHNpemU9ODguNyBLaUIsIGNvdW50PTM0NywgYXZlcmFnZT0yNjIgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjE0NDY6IHNpemU9NzAuNCBLaUIsIGNvdW50PTkxMSwgYXZlcmFnZT03OSBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46MTQ1NDogc2l6ZT01Mi4wIEtpQiwgY291bnQ9MjUsIGF2ZXJhZ2U9MjEzMSBCCisgICAgPHN0cmluZz46NTogc2l6ZT00OS43IEtpQiwgY291bnQ9MTQ4LCBhdmVyYWdlPTM0NCBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3N5c2NvbmZpZy5weTo0MTE6IHNpemU9NDguMCBLaUIsIGNvdW50PTEsIGF2ZXJhZ2U9NDguMCBLaUIKKworV2UgY2FuIHNlZSB0aGF0IFB5dGhvbiBsb2FkZWQgYGA0LjggTWlCYGAgZGF0YSAoYnl0ZWNvZGUgYW5kIGNvbnN0YW50cykgZnJvbQorbW9kdWxlcyBhbmQgdGhhdCB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSBhbGxvY2F0ZWQgYGAyNDQgS2lCYGAgdG8gYnVpbGQKKzpjbGFzczpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIHR5cGVzLgorCitTZWUgOm1ldGg6YFNuYXBzaG90LnN0YXRpc3RpY3NgIGZvciBtb3JlIG9wdGlvbnMuCisKKworQ29tcHV0ZSBkaWZmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUYWtlIHR3byBzbmFwc2hvdHMgYW5kIGRpc3BsYXkgdGhlIGRpZmZlcmVuY2VzOjoKKworICAgIGltcG9ydCB0cmFjZW1hbGxvYworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKyAgICAjIC4uLiBzdGFydCB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QxID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgIyAuLi4gY2FsbCB0aGUgZnVuY3Rpb24gbGVha2luZyBtZW1vcnkgLi4uCisgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisKKyAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdDEsICdsaW5lbm8nKQorCisgICAgcHJpbnQoIlsgVG9wIDEwIGRpZmZlcmVuY2VzIF0iKQorICAgIGZvciBzdGF0IGluIHRvcF9zdGF0c1s6MTBdOgorICAgICAgICBwcmludChzdGF0KQorCitFeGFtcGxlIG9mIG91dHB1dCBiZWZvcmUvYWZ0ZXIgcnVubmluZyBzb21lIHRlc3RzIG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICBbIFRvcCAxMCBkaWZmZXJlbmNlcyBdCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46NzE2OiBzaXplPTgxNzMgS2lCICgrNDQyOCBLaUIpLCBjb3VudD03MTMzMiAoKzM5MzY5KSwgYXZlcmFnZT0xMTcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9saW5lY2FjaGUucHk6MTI3OiBzaXplPTk0MCBLaUIgKCs5NDAgS2lCKSwgY291bnQ9ODEwNiAoKzgxMDYpLCBhdmVyYWdlPTExOSBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L2Nhc2UucHk6NTcxOiBzaXplPTI5OCBLaUIgKCsyOTggS2lCKSwgY291bnQ9NTg5ICgrNTg5KSwgYXZlcmFnZT01MTkgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjI4NDogc2l6ZT0xMDA1IEtpQiAoKzE2NiBLaUIpLCBjb3VudD03NDIzICgrMTUyNiksIGF2ZXJhZ2U9MTM5IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvbWltZXR5cGVzLnB5OjIxNzogc2l6ZT0xMTIgS2lCICgrMTEyIEtpQiksIGNvdW50PTEzMzQgKCsxMzM0KSwgYXZlcmFnZT04NiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2h0dHAvc2VydmVyLnB5Ojg0ODogc2l6ZT05Ni4wIEtpQiAoKzk2LjAgS2lCKSwgY291bnQ9MSAoKzEpLCBhdmVyYWdlPTk2LjAgS2lCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2luc3BlY3QucHk6MTQ2NTogc2l6ZT04My41IEtpQiAoKzgzLjUgS2lCKSwgY291bnQ9MTA5ICgrMTA5KSwgYXZlcmFnZT03ODQgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9tb2NrLnB5OjQ5MTogc2l6ZT03Ny43IEtpQiAoKzc3LjcgS2lCKSwgY291bnQ9MTQzICgrMTQzKSwgYXZlcmFnZT01NTcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91cmxsaWIvcGFyc2UucHk6NDc2OiBzaXplPTcxLjggS2lCICgrNzEuOCBLaUIpLCBjb3VudD05NjkgKCs5NjkpLCBhdmVyYWdlPTc2IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvY29udGV4dGxpYi5weTozODogc2l6ZT02Ny4yIEtpQiAoKzY3LjIgS2lCKSwgY291bnQ9MTI2ICgrMTI2KSwgYXZlcmFnZT01NDYgQgorCitXZSBjYW4gc2VlIHRoYXQgUHl0aG9uIGhhcyBsb2FkZWQgYGA4LjIgTWlCYGAgb2YgbW9kdWxlIGRhdGEgKGJ5dGVjb2RlIGFuZAorY29uc3RhbnRzKSwgYW5kIHRoYXQgdGhpcyBpcyBgYDQuNCBNaUJgYCBtb3JlIHRoYW4gaGFkIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUKK3Rlc3RzLCB3aGVuIHRoZSBwcmV2aW91cyBzbmFwc2hvdCB3YXMgdGFrZW4uIFNpbWlsYXJseSwgdGhlIDptb2Q6YGxpbmVjYWNoZWAKK21vZHVsZSBoYXMgY2FjaGVkIGBgOTQwIEtpQmBgIG9mIFB5dGhvbiBzb3VyY2UgY29kZSB0byBmb3JtYXQgdHJhY2ViYWNrcywgYWxsCitvZiBpdCBzaW5jZSB0aGUgcHJldmlvdXMgc25hcHNob3QuCisKK0lmIHRoZSBzeXN0ZW0gaGFzIGxpdHRsZSBmcmVlIG1lbW9yeSwgc25hcHNob3RzIGNhbiBiZSB3cml0dGVuIG9uIGRpc2sgdXNpbmcKK3RoZSA6bWV0aDpgU25hcHNob3QuZHVtcGAgbWV0aG9kIHRvIGFuYWx5emUgdGhlIHNuYXBzaG90IG9mZmxpbmUuIFRoZW4gdXNlIHRoZQorOm1ldGg6YFNuYXBzaG90LmxvYWRgIG1ldGhvZCByZWxvYWQgdGhlIHNuYXBzaG90LgorCisKK0dldCB0aGUgdHJhY2ViYWNrIG9mIGEgbWVtb3J5IGJsb2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb2RlIHRvIGRpc3BsYXkgdGhlIHRyYWNlYmFjayBvZiB0aGUgYmlnZ2VzdCBtZW1vcnkgYmxvY2s6OgorCisgICAgaW1wb3J0IGxpbmVjYWNoZQorICAgIGltcG9ydCB0cmFjZW1hbGxvYworCisgICAgIyBTdG9yZSAyNSBmcmFtZXMKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgyNSkKKworICAgICMgLi4uIHJ1biB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCd0cmFjZWJhY2snKQorCisgICAgIyBwaWNrIHRoZSBiaWdnZXN0IG1lbW9yeSBibG9jaworICAgIHN0YXQgPSB0b3Bfc3RhdHNbMF0KKyAgICBwcmludCgiJXMgbWVtb3J5IGJsb2NrczogJS4xZiBLaUIiICUgKHN0YXQuY291bnQsIHN0YXQuc2l6ZSAvIDEwMjQpKQorICAgIGZvciBmcmFtZSBpbiBzdGF0LnRyYWNlYmFjazoKKyAgICAgICAgcHJpbnQoJyAgRmlsZSAiJXMiLCBsaW5lICVzJyAlIChmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKSkKKyAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZyYW1lLmZpbGVuYW1lLCBmcmFtZS5saW5lbm8pCisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIHByaW50KCcgICAgJyArIGxpbmUpCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZSAodHJhY2ViYWNrIGxpbWl0ZWQgdG8gMjUgZnJhbWVzKTo6CisKKyAgICA5MDMgbWVtb3J5IGJsb2NrczogODcwLjEgS2lCCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgNzE2CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTAzNgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDkzNAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDEwNjgKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA2MTkKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNTgxCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTYxNAorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L2RvY3Rlc3QucHkiLCBsaW5lIDEwMQorICAgICAgICBpbXBvcnQgcGRiCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMjg0CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgOTM4CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTA2OAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDYxOQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE1ODEKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNjE0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5IiwgbGluZSAxNzI4CisgICAgICAgIGltcG9ydCBkb2N0ZXN0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5IiwgbGluZSAyMQorICAgICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHBpY2tsZXRvb2xzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDEyNzYKKyAgICAgICAgdGVzdF9ydW5uZXIoKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDk3NgorICAgICAgICBkaXNwbGF5X2ZhaWx1cmU9bm90IHZlcmJvc2UpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgNzYxCisgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDE1NjMKKyAgICAgICAgbWFpbigpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9fX21haW5fXy5weSIsIGxpbmUgMworICAgICAgICByZWdydGVzdC5tYWluX2luX3RlbXBfY3dkKCkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9ydW5weS5weSIsIGxpbmUgNzMKKyAgICAgICAgZXhlYyhjb2RlLCBydW5fZ2xvYmFscykKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9ydW5weS5weSIsIGxpbmUgMTYwCisgICAgICAgICJfX21haW5fXyIsIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQorCitXZSBjYW4gc2VlIHRoYXQgdGhlIG1vc3QgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGltcG9ydGxpYmAgbW9kdWxlIHRvCitsb2FkIGRhdGEgKGJ5dGVjb2RlIGFuZCBjb25zdGFudHMpIGZyb20gbW9kdWxlczogYGA4NzAgS2lCYGAuIFRoZSB0cmFjZWJhY2sgaXMKK3doZXJlIHRoZSA6bW9kOmBpbXBvcnRsaWJgIGxvYWRlZCBkYXRhIG1vc3QgcmVjZW50bHk6IG9uIHRoZSBgYGltcG9ydCBwZGJgYAorbGluZSBvZiB0aGUgOm1vZDpgZG9jdGVzdGAgbW9kdWxlLiBUaGUgdHJhY2ViYWNrIG1heSBjaGFuZ2UgaWYgYSBuZXcgbW9kdWxlIGlzCitsb2FkZWQuCisKKworUHJldHR5IHRvcAorLS0tLS0tLS0tLQorCitDb2RlIHRvIGRpc3BsYXkgdGhlIDEwIGxpbmVzIGFsbG9jYXRpbmcgdGhlIG1vc3QgbWVtb3J5IHdpdGggYSBwcmV0dHkgb3V0cHV0LAoraWdub3JpbmcgYGA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPmBgIGFuZCBgYDx1bmtub3duPmBgIGZpbGVzOjoKKworICAgIGltcG9ydCBvcworICAgIGltcG9ydCB0cmFjZW1hbGxvYworCisgICAgZGVmIGRpc3BsYXlfdG9wKHNuYXBzaG90LCBncm91cF9ieT0nbGluZW5vJywgbGltaXQ9MTApOgorICAgICAgICBzbmFwc2hvdCA9IHNuYXBzaG90LmZpbHRlcl90cmFjZXMoKAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIpLAorICAgICAgICApKQorICAgICAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKGdyb3VwX2J5KQorCisgICAgICAgIHByaW50KCJUb3AgJXMgbGluZXMiICUgbGltaXQpCisgICAgICAgIGZvciBpbmRleCwgc3RhdCBpbiBlbnVtZXJhdGUodG9wX3N0YXRzWzpsaW1pdF0sIDEpOgorICAgICAgICAgICAgZnJhbWUgPSBzdGF0LnRyYWNlYmFja1swXQorICAgICAgICAgICAgIyByZXBsYWNlICIvcGF0aC90by9tb2R1bGUvZmlsZS5weSIgd2l0aCAibW9kdWxlL2ZpbGUucHkiCisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnNlcC5qb2luKGZyYW1lLmZpbGVuYW1lLnNwbGl0KG9zLnNlcClbLTI6XSkKKyAgICAgICAgICAgIHByaW50KCIjJXM6ICVzOiVzOiAlLjFmIEtpQiIKKyAgICAgICAgICAgICAgICAgICUgKGluZGV4LCBmaWxlbmFtZSwgZnJhbWUubGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgc3RhdC5zaXplIC8gMTAyNCkpCisKKyAgICAgICAgb3RoZXIgPSB0b3Bfc3RhdHNbbGltaXQ6XQorICAgICAgICBpZiBvdGhlcjoKKyAgICAgICAgICAgIHNpemUgPSBzdW0oc3RhdC5zaXplIGZvciBzdGF0IGluIG90aGVyKQorICAgICAgICAgICAgcHJpbnQoIiVzIG90aGVyOiAlLjFmIEtpQiIgJSAobGVuKG90aGVyKSwgc2l6ZSAvIDEwMjQpKQorICAgICAgICB0b3RhbCA9IHN1bShzdGF0LnNpemUgZm9yIHN0YXQgaW4gdG9wX3N0YXRzKQorICAgICAgICBwcmludCgiVG90YWwgYWxsb2NhdGVkIHNpemU6ICUuMWYgS2lCIiAlICh0b3RhbCAvIDEwMjQpKQorCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIGRpc3BsYXlfdG9wKHNuYXBzaG90LCAxMCkKKworRXhhbXBsZSBvZiBvdXRwdXQgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlOjoKKworICAgIDIwMTMtMTEtMDggMTQ6MTY6NTguMTQ5MzIwOiBUb3AgMTAgbGluZXMKKyAgICAjMTogY29sbGVjdGlvbnMvX19pbml0X18ucHk6MzY4OiAyOTEuOSBLaUIKKyAgICAjMjogTGliL2RvY3Rlc3QucHk6MTI5MTogMjAwLjIgS2lCCisgICAgIzM6IHVuaXR0ZXN0L2Nhc2UucHk6NTcxOiAxNjAuMyBLaUIKKyAgICAjNDogTGliL2FiYy5weToxMzM6IDk5LjggS2lCCisgICAgIzU6IHVybGxpYi9wYXJzZS5weTo0NzY6IDcxLjggS2lCCisgICAgIzY6IDxzdHJpbmc+OjU6IDYyLjcgS2lCCisgICAgIzc6IExpYi9iYXNlNjQucHk6MTQwOiA1OS44IEtpQgorICAgICM4OiBMaWIvX3dlYWtyZWZzZXQucHk6Mzc6IDUxLjggS2lCCisgICAgIzk6IGNvbGxlY3Rpb25zL19faW5pdF9fLnB5OjM2MjogNTAuNiBLaUIKKyAgICAjMTA6IHRlc3QvdGVzdF9zaXRlLnB5OjU2OiA0OC4wIEtpQgorICAgIDc0OTYgb3RoZXI6IDQxNjEuOSBLaUIKKyAgICBUb3RhbCBhbGxvY2F0ZWQgc2l6ZTogNTI1OC44IEtpQgorCitTZWUgOm1ldGg6YFNuYXBzaG90LnN0YXRpc3RpY3NgIGZvciBtb3JlIG9wdGlvbnMuCisKKworQVBJCis9PT0KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworLi4gZnVuY3Rpb246OiBjbGVhcl90cmFjZXMoKQorCisgICBDbGVhciB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RvcGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisKKyAgIEdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0ICpvYmoqIHdhcyBhbGxvY2F0ZWQuCisgICBSZXR1cm4gYSA6Y2xhc3M6YFRyYWNlYmFja2AgaW5zdGFuY2UsIG9yIGBgTm9uZWBgIGlmIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AKKyAgIG1vZHVsZSBpcyBub3QgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgZGlkIG5vdCB0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZgorICAgdGhlIG9iamVjdC4KKworICAgU2VlIGFsc28gOmZ1bmM6YGdjLmdldF9yZWZlcnJlcnNgIGFuZCA6ZnVuYzpgc3lzLmdldHNpemVvZmAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3RyYWNlYmFja19saW1pdCgpCisKKyAgIEdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiB0aGUgdHJhY2ViYWNrIG9mIGEgdHJhY2UuCisKKyAgIFRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgdG8KKyAgIGdldCB0aGUgbGltaXQsIG90aGVyd2lzZSBhbiBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgICBUaGUgbGltaXQgaXMgc2V0IGJ5IHRoZSA6ZnVuYzpgc3RhcnRgIGZ1bmN0aW9uLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3RyYWNlZF9tZW1vcnkoKQorCisgICBHZXQgdGhlIGN1cnJlbnQgc2l6ZSBhbmQgbWF4aW11bSBzaXplIG9mIG1lbW9yeSBibG9ja3MgdHJhY2VkIGJ5IHRoZQorICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBhcyBhIHR1cGxlOiBgYChzaXplOiBpbnQsIG1heF9zaXplOiBpbnQpYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKworICAgR2V0IHRoZSBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMgb2YgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgdXNlZCB0byBzdG9yZQorICAgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MuCisgICBSZXR1cm4gYW4gOmNsYXNzOmBpbnRgLgorCisKKy4uIGZ1bmN0aW9uOjogaXNfdHJhY2luZygpCisKKyAgICBgYFRydWVgYCBpZiB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBpcyB0cmFjaW5nIFB5dGhvbiBtZW1vcnkKKyAgICBhbGxvY2F0aW9ucywgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgIFNlZSBhbHNvIDpmdW5jOmBzdGFydGAgYW5kIDpmdW5jOmBzdG9wYCBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdGFydChuZnJhbWU6IGludD0xKQorCisgICBTdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IGluc3RhbGwgaG9va3Mgb24gUHl0aG9uIG1lbW9yeQorICAgYWxsb2NhdG9ycy4gQ29sbGVjdGVkIHRyYWNlYmFja3Mgb2YgdHJhY2VzIHdpbGwgYmUgbGltaXRlZCB0byAqbmZyYW1lKgorICAgZnJhbWVzLiBCeSBkZWZhdWx0LCBhIHRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzIHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWU6IHRoZSBsaW1pdCBpcyBgYDFgYC4gKm5mcmFtZSogbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGBgMWBgLgorCisgICBTdG9yaW5nIG1vcmUgdGhhbiBgYDFgYCBmcmFtZSBpcyBvbmx5IHVzZWZ1bCB0byBjb21wdXRlIHN0YXRpc3RpY3MgZ3JvdXBlZAorICAgYnkgYGAndHJhY2ViYWNrJ2BgIG9yIHRvIGNvbXB1dGUgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzOiBzZWUgdGhlCisgICA6bWV0aDpgU25hcHNob3QuY29tcGFyZV90b2AgYW5kIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBtZXRob2RzLgorCisgICBTdG9yaW5nIG1vcmUgZnJhbWVzIGluY3JlYXNlcyB0aGUgbWVtb3J5IGFuZCBDUFUgb3ZlcmhlYWQgb2YgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBVc2UgdGhlIDpmdW5jOmBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5YCBmdW5jdGlvbgorICAgdG8gbWVhc3VyZSBob3cgbXVjaCBtZW1vcnkgaXMgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4KKworICAgVGhlIDplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgKGBgUFlUSE9OVFJBQ0VNQUxMT0M9TkZSQU1FYGApIGFuZCB0aGUgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2M9TkZSQU1FYGAKKyAgIGNvbW1hbmQgbGluZSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3RhcnQgdHJhY2luZyBhdCBzdGFydHVwLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RvcGAsIDpmdW5jOmBpc190cmFjaW5nYCBhbmQgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdG9wKCkKKworICAgU3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IHVuaW5zdGFsbCBob29rcyBvbiBQeXRob24gbWVtb3J5CisgICBhbGxvY2F0b3JzLiBBbHNvIGNsZWFycyBhbGwgcHJldmlvdXNseSBjb2xsZWN0ZWQgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MKKyAgIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIENhbGwgOmZ1bmM6YHRha2Vfc25hcHNob3RgIGZ1bmN0aW9uIHRvIHRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgYmVmb3JlCisgICBjbGVhcmluZyB0aGVtLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RhcnRgLCA6ZnVuYzpgaXNfdHJhY2luZ2AgYW5kIDpmdW5jOmBjbGVhcl90cmFjZXNgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiB0YWtlX3NuYXBzaG90KCkKKworICAgVGFrZSBhIHNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIFJldHVybiBhIG5ldworICAgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2UuCisKKyAgIFRoZSBzbmFwc2hvdCBkb2VzIG5vdCBpbmNsdWRlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJlZm9yZSB0aGUKKyAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgc3RhcnRlZCB0byB0cmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIFRyYWNlYmFja3Mgb2YgdHJhY2VzIGFyZSBsaW1pdGVkIHRvIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YCBmcmFtZXMuIFVzZQorICAgdGhlICpuZnJhbWUqIHBhcmFtZXRlciBvZiB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbiB0byBzdG9yZSBtb3JlIGZyYW1lcy4KKworICAgVGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0byB0YWtlIGEKKyAgIHNuYXBzaG90LCBzZWUgdGhlIHRoZSA6ZnVuYzpgc3RhcnRgIGZ1bmN0aW9uLgorCisgICBTZWUgYWxzbyB0aGUgOmZ1bmM6YGdldF9vYmplY3RfdHJhY2ViYWNrYCBmdW5jdGlvbi4KKworCitGaWx0ZXIKKy0tLS0tLQorCisuLiBjbGFzczo6IEZpbHRlcihpbmNsdXNpdmU6IGJvb2wsIGZpbGVuYW1lX3BhdHRlcm46IHN0ciwgbGluZW5vOiBpbnQ9Tm9uZSwgYWxsX2ZyYW1lczogYm9vbD1GYWxzZSkKKworICAgRmlsdGVyIG9uIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzLgorCisgICBTZWUgdGhlIDpmdW5jOmBmbm1hdGNoLmZubWF0Y2hgIGZ1bmN0aW9uIGZvciB0aGUgc3ludGF4IG9mCisgICAqZmlsZW5hbWVfcGF0dGVybiouIFRoZSBgYCcucHljJ2BgIGFuZCBgYCcucHlvJ2BgIGZpbGUgZXh0ZW5zaW9ucyBhcmUKKyAgIHJlcGxhY2VkIHdpdGggYGAnLnB5J2BgLgorCisgICBFeGFtcGxlczoKKworICAgKiBgYEZpbHRlcihUcnVlLCBzdWJwcm9jZXNzLl9fZmlsZV9fKWBgIG9ubHkgaW5jbHVkZXMgdHJhY2VzIG9mIHRoZQorICAgICA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUKKyAgICogYGBGaWx0ZXIoRmFsc2UsIHRyYWNlbWFsbG9jLl9fZmlsZV9fKWBgIGV4Y2x1ZGVzIHRyYWNlcyBvZiB0aGUKKyAgICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZQorICAgKiBgYEZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIpYGAgZXhjbHVkZXMgZW1wdHkgdHJhY2ViYWNrcworCisgICAuLiBhdHRyaWJ1dGU6OiBpbmNsdXNpdmUKKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBUcnVlYGAgKGluY2x1ZGUpLCBvbmx5IHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkCisgICAgICBpbiBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBGYWxzZWBgIChleGNsdWRlKSwgaWdub3JlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGluCisgICAgICBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgLi4gYXR0cmlidXRlOjogbGluZW5vCisKKyAgICAgIExpbmUgbnVtYmVyIChgYGludGBgKSBvZiB0aGUgZmlsdGVyLiBJZiAqbGluZW5vKiBpcyBgYE5vbmVgYCwgdGhlIGZpbHRlcgorICAgICAgbWF0Y2hlcyBhbnkgbGluZSBudW1iZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lX3BhdHRlcm4KKworICAgICAgRmlsZW5hbWUgcGF0dGVybiBvZiB0aGUgZmlsdGVyIChgYHN0cmBgKS4KKworICAgLi4gYXR0cmlidXRlOjogYWxsX2ZyYW1lcworCisgICAgICBJZiAqYWxsX2ZyYW1lcyogaXMgYGBUcnVlYGAsIGFsbCBmcmFtZXMgb2YgdGhlIHRyYWNlYmFjayBhcmUgY2hlY2tlZC4gSWYKKyAgICAgICphbGxfZnJhbWVzKiBpcyBgYEZhbHNlYGAsIG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lIGlzIGNoZWNrZWQuCisKKyAgICAgIFRoaXMgYXR0cmlidXRlIGlzIGlnbm9yZWQgaWYgdGhlIHRyYWNlYmFjayBsaW1pdCBpcyBsZXNzIHRoYW4gYGAyYGAuICBTZWUKKyAgICAgIHRoZSA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnVuY3Rpb24gYW5kCisgICAgICA6YXR0cjpgU25hcHNob3QudHJhY2ViYWNrX2xpbWl0YCBhdHRyaWJ1dGUuCisKKworRnJhbWUKKy0tLS0tCisKKy4uIGNsYXNzOjogRnJhbWUKKworICAgRnJhbWUgb2YgYSB0cmFjZWJhY2suCisKKyAgIFRoZSA6Y2xhc3M6YFRyYWNlYmFja2AgY2xhc3MgaXMgYSBzZXF1ZW5jZSBvZiA6Y2xhc3M6YEZyYW1lYCBpbnN0YW5jZXMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lCisKKyAgICAgIEZpbGVuYW1lIChgYHN0cmBgKS4KKworICAgLi4gYXR0cmlidXRlOjogbGluZW5vCisKKyAgICAgIExpbmUgbnVtYmVyIChgYGludGBgKS4KKworCitTbmFwc2hvdAorLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTbmFwc2hvdAorCisgICBTbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorCisgICBUaGUgOmZ1bmM6YHRha2Vfc25hcHNob3RgIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzbmFwc2hvdCBpbnN0YW5jZS4KKworICAgLi4gbWV0aG9kOjogY29tcGFyZV90byhvbGRfc25hcHNob3Q6IFNuYXBzaG90LCBncm91cF9ieTogc3RyLCBjdW11bGF0aXZlOiBib29sPUZhbHNlKQorCisgICAgICBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyB3aXRoIGFuIG9sZCBzbmFwc2hvdC4gR2V0IHN0YXRpc3RpY3MgYXMgYSBzb3J0ZWQKKyAgICAgIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYCBpbnN0YW5jZXMgZ3JvdXBlZCBieSAqZ3JvdXBfYnkqLgorCisgICAgICBTZWUgdGhlIDptZXRoOmBzdGF0aXN0aWNzYCBtZXRob2QgZm9yICpncm91cF9ieSogYW5kICpjdW11bGF0aXZlKgorICAgICAgcGFyYW1ldGVycy4KKworICAgICAgVGhlIHJlc3VsdCBpcyBzb3J0ZWQgZnJvbSB0aGUgYmlnZ2VzdCB0byB0aGUgc21hbGxlc3QgYnk6IGFic29sdXRlIHZhbHVlCisgICAgICBvZiA6YXR0cjpgU3RhdGlzdGljRGlmZi5zaXplX2RpZmZgLCA6YXR0cjpgU3RhdGlzdGljRGlmZi5zaXplYCwgYWJzb2x1dGUKKyAgICAgIHZhbHVlIG9mIDphdHRyOmBTdGF0aXN0aWNEaWZmLmNvdW50X2RpZmZgLCA6YXR0cjpgU3RhdGlzdGljLmNvdW50YCBhbmQKKyAgICAgIHRoZW4gYnkgOmF0dHI6YFN0YXRpc3RpY0RpZmYudHJhY2ViYWNrYC4KKworCisgICAuLiBtZXRob2Q6OiBkdW1wKGZpbGVuYW1lKQorCisgICAgICBXcml0ZSB0aGUgc25hcHNob3QgaW50byBhIGZpbGUuCisKKyAgICAgIFVzZSA6bWV0aDpgbG9hZGAgdG8gcmVsb2FkIHRoZSBzbmFwc2hvdC4KKworCisgICAuLiBtZXRob2Q6OiBmaWx0ZXJfdHJhY2VzKGZpbHRlcnMpCisKKyAgICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNuYXBzaG90YCBpbnN0YW5jZSB3aXRoIGEgZmlsdGVyZWQgOmF0dHI6YHRyYWNlc2AKKyAgICAgIHNlcXVlbmNlLCAqZmlsdGVycyogaXMgYSBsaXN0IG9mIDpjbGFzczpgRmlsdGVyYCBpbnN0YW5jZXMuICBJZiAqZmlsdGVycyoKKyAgICAgIGlzIGFuIGVtcHR5IGxpc3QsIHJldHVybiBhIG5ldyA6Y2xhc3M6YFNuYXBzaG90YCBpbnN0YW5jZSB3aXRoIGEgY29weSBvZgorICAgICAgdGhlIHRyYWNlcy4KKworICAgICAgQWxsIGluY2x1c2l2ZSBmaWx0ZXJzIGFyZSBhcHBsaWVkIGF0IG9uY2UsIGEgdHJhY2UgaXMgaWdub3JlZCBpZiBubworICAgICAgaW5jbHVzaXZlIGZpbHRlcnMgbWF0Y2ggaXQuIEEgdHJhY2UgaXMgaWdub3JlZCBpZiBhdCBsZWFzdCBvbmUgZXhjbHVzaXZlCisgICAgICBmaWx0ZXIgbWF0Y2hzIGl0LgorCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogbG9hZChmaWxlbmFtZSkKKworICAgICAgTG9hZCBhIHNuYXBzaG90IGZyb20gYSBmaWxlLgorCisgICAgICBTZWUgYWxzbyA6bWV0aDpgZHVtcGAuCisKKworICAgLi4gbWV0aG9kOjogc3RhdGlzdGljcyhncm91cF9ieTogc3RyLCBjdW11bGF0aXZlOiBib29sPUZhbHNlKQorCisgICAgICBHZXQgc3RhdGlzdGljcyBhcyBhIHNvcnRlZCBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljYCBpbnN0YW5jZXMgZ3JvdXBlZAorICAgICAgYnkgKmdyb3VwX2J5KjoKKworICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIGdyb3VwX2J5ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24KKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICBgYCdmaWxlbmFtZSdgYCAgICAgICAgIGZpbGVuYW1lCisgICAgICBgYCdsaW5lbm8nYGAgICAgICAgICAgIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlcgorICAgICAgYGAndHJhY2ViYWNrJ2BgICAgICAgICB0cmFjZWJhY2sKKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIElmICpjdW11bGF0aXZlKiBpcyBgYFRydWVgYCwgY3VtdWxhdGUgc2l6ZSBhbmQgY291bnQgb2YgbWVtb3J5IGJsb2NrcyBvZgorICAgICAgYWxsIGZyYW1lcyBvZiB0aGUgdHJhY2ViYWNrIG9mIGEgdHJhY2UsIG5vdCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICAgIFRoZSBjdW11bGF0aXZlIG1vZGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoICpncm91cF9ieSogZXF1YWxzIHRvCisgICAgICBgYCdmaWxlbmFtZSdgYCBhbmQgYGAnbGluZW5vJ2BgLgorCisgICAgICBUaGUgcmVzdWx0IGlzIHNvcnRlZCBmcm9tIHRoZSBiaWdnZXN0IHRvIHRoZSBzbWFsbGVzdCBieToKKyAgICAgIDphdHRyOmBTdGF0aXN0aWMuc2l6ZWAsIDphdHRyOmBTdGF0aXN0aWMuY291bnRgIGFuZCB0aGVuIGJ5CisgICAgICA6YXR0cjpgU3RhdGlzdGljLnRyYWNlYmFja2AuCisKKworICAgLi4gYXR0cmlidXRlOjogdHJhY2ViYWNrX2xpbWl0CisKKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiA6YXR0cjpgdHJhY2VzYDoKKyAgICAgIHJlc3VsdCBvZiB0aGUgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIHdoZW4gdGhlIHNuYXBzaG90IHdhcyB0YWtlbi4KKworICAgLi4gYXR0cmlidXRlOjogdHJhY2VzCisKKyAgICAgIFRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uOiBzZXF1ZW5jZSBvZgorICAgICAgOmNsYXNzOmBUcmFjZWAgaW5zdGFuY2VzLgorCisgICAgICBUaGUgc2VxdWVuY2UgaGFzIGFuIHVuZGVmaW5lZCBvcmRlci4gVXNlIHRoZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AKKyAgICAgIG1ldGhvZCB0byBnZXQgYSBzb3J0ZWQgbGlzdCBvZiBzdGF0aXN0aWNzLgorCisKK1N0YXRpc3RpYworLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogU3RhdGlzdGljCisKKyAgIFN0YXRpc3RpYyBvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIDpmdW5jOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCByZXR1cm5zIGEgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY2AgaW5zdGFuY2VzLgorCisgICBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYCBjbGFzcy4KKworICAgLi4gYXR0cmlidXRlOjogY291bnQKKworICAgICAgTnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1N0YXRpc3RpY0RpZmYKKy0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTdGF0aXN0aWNEaWZmCisKKyAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGFuIG9sZCBhbmQgYSBuZXcKKyAgIDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlLgorCisgICA6ZnVuYzpgU25hcHNob3QuY29tcGFyZV90b2AgcmV0dXJucyBhIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYAorICAgaW5zdGFuY2VzLiBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNgIGNsYXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudAorCisgICAgICBOdW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKTogYGAwYGAgaWYKKyAgICAgIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudF9kaWZmCisKKyAgICAgIERpZmZlcmVuY2Ugb2YgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgYmV0d2VlbiB0aGUgb2xkIGFuZCB0aGUgbmV3CisgICAgICBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGluCisgICAgICB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKToKKyAgICAgIGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplX2RpZmYKKworICAgICAgRGlmZmVyZW5jZSBvZiB0b3RhbCBzaXplIG9mIG1lbW9yeSBibG9ja3MgaW4gYnl0ZXMgYmV0d2VlbiB0aGUgb2xkIGFuZAorICAgICAgdGhlIG5ldyBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4KKyAgICAgIGFsbG9jYXRlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2tzIHdlcmUgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1RyYWNlCistLS0tLQorCisuLiBjbGFzczo6IFRyYWNlCisKKyAgIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrLgorCisgICBUaGUgOmF0dHI6YFNuYXBzaG90LnRyYWNlc2AgYXR0cmlidXRlIGlzIGEgc2VxdWVuY2Ugb2YgOmNsYXNzOmBUcmFjZWAKKyAgIGluc3RhbmNlcy4KKworICAgLi4gYXR0cmlidXRlOjogc2l6ZQorCisgICAgICBTaXplIG9mIHRoZSBtZW1vcnkgYmxvY2sgaW4gYnl0ZXMgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2sgd2FzIGFsbG9jYXRlZCwgOmNsYXNzOmBUcmFjZWJhY2tgCisgICAgICBpbnN0YW5jZS4KKworCitUcmFjZWJhY2sKKy0tLS0tLS0tLQorCisuLiBjbGFzczo6IFRyYWNlYmFjaworCisgICBTZXF1ZW5jZSBvZiA6Y2xhc3M6YEZyYW1lYCBpbnN0YW5jZXMgc29ydGVkIGZyb20gdGhlIG1vc3QgcmVjZW50IGZyYW1lIHRvCisgICB0aGUgb2xkZXN0IGZyYW1lLgorCisgICBBIHRyYWNlYmFjayBjb250YWlucyBhdCBsZWFzdCBgYDFgYCBmcmFtZS4gSWYgdGhlIGBgdHJhY2VtYWxsb2NgYCBtb2R1bGUKKyAgIGZhaWxlZCB0byBnZXQgYSBmcmFtZSwgdGhlIGZpbGVuYW1lIGBgIjx1bmtub3duPiJgYCBhdCBsaW5lIG51bWJlciBgYDBgYCBpcworICAgdXNlZC4KKworICAgV2hlbiBhIHNuYXBzaG90IGlzIHRha2VuLCB0cmFjZWJhY2tzIG9mIHRyYWNlcyBhcmUgbGltaXRlZCB0bworICAgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIGZyYW1lcy4gU2VlIHRoZSA6ZnVuYzpgdGFrZV9zbmFwc2hvdGAgZnVuY3Rpb24uCisKKyAgIFRoZSA6YXR0cjpgVHJhY2UudHJhY2ViYWNrYCBhdHRyaWJ1dGUgaXMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUcmFjZWJhY2tgCisgICBpbnN0YW5jZS4KKworCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS90eXBlcy5yc3QKaW5kZXggNjk1NDgwZi4uYzRmNTdlNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdApAQCAtMTA3LDkgKzEwNywzNSBAQAogICAgQyIuKQogCiAKLS4uIGRhdGE6OiBNb2R1bGVUeXBlCisuLiBjbGFzczo6IE1vZHVsZVR5cGUobmFtZSwgZG9jPU5vbmUpCiAKLSAgIFRoZSB0eXBlIG9mIG1vZHVsZXMuCisgICBUaGUgdHlwZSBvZiA6dGVybTpgbW9kdWxlcyA8bW9kdWxlPmAuIENvbnN0cnVjdG9yIHRha2VzIHRoZSBuYW1lIG9mIHRoZQorICAgbW9kdWxlIHRvIGJlIGNyZWF0ZWQgYW5kIG9wdGlvbmFsbHkgaXRzIDp0ZXJtOmBkb2NzdHJpbmdgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2RvY19fCisKKyAgICAgIFRoZSA6dGVybTpgZG9jc3RyaW5nYCBvZiB0aGUgbW9kdWxlLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogX19sb2FkZXJfXworCisgICAgICBUaGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggbG9hZGVkIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgRGVmYXVsdHMgdG8gYGBOb25lYGAuIFByZXZpb3VzbHkgdGhlIGF0dHJpYnV0ZSB3YXMgb3B0aW9uYWwuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fbmFtZV9fCisKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fcGFja2FnZV9fCisKKyAgICAgIFdoaWNoIDp0ZXJtOmBwYWNrYWdlYCBhIG1vZHVsZSBiZWxvbmdzIHRvLiBJZiB0aGUgbW9kdWxlIGlzIHRvcC1sZXZlbAorICAgICAgKGkuZS4gbm90IGEgcGFydCBvZiBhbnkgc3BlY2lmaWMgcGFja2FnZSkgdGhlbiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQKKyAgICAgIHRvIGBgJydgYCwgZWxzZSBpdCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlICh3aGljaCBjYW4gYmUKKyAgICAgIDphdHRyOmBfX25hbWVfX2AgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgaXRzZWxmKS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBEZWZhdWx0cyB0byBgYE5vbmVgYC4gUHJldmlvdXNseSB0aGUgYXR0cmlidXRlIHdhcyBvcHRpb25hbC4KIAogCiAuLiBkYXRhOjogVHJhY2ViYWNrVHlwZQpAQCAtMjEyLDYgKzIzOCw4IEBACiAgICAgICAgICAgICAgICBrZXlzID0gc29ydGVkKHNlbGYuX19kaWN0X18pCiAgICAgICAgICAgICAgICBpdGVtcyA9ICgie309eyFyfSIuZm9ybWF0KGssIHNlbGYuX19kaWN0X19ba10pIGZvciBrIGluIGtleXMpCiAgICAgICAgICAgICAgICByZXR1cm4gInt9KHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sICIsICIuam9pbihpdGVtcykpCisgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KIAogICAgYGBTaW1wbGVOYW1lc3BhY2VgYCBtYXkgYmUgdXNlZnVsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGBgY2xhc3MgTlM6IHBhc3NgYC4KICAgIEhvd2V2ZXIsIGZvciBhIHN0cnVjdHVyZWQgcmVjb3JkIHR5cGUgdXNlIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdCBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAppbmRleCBhZDcwZGQ5Li4zYjNkM2EwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CkBAIC0xNSw4ICsxNSw4IEBACiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgKFVDRCkgd2hpY2gKIGRlZmluZXMgY2hhcmFjdGVyIHByb3BlcnRpZXMgZm9yIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMuIFRoZSBkYXRhIGNvbnRhaW5lZCBpbgotdGhpcyBkYXRhYmFzZSBpcyBjb21waWxlZCBmcm9tIHRoZSBgVUNEIHZlcnNpb24gNi4xLjAKLTxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2Q+YF8uCit0aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA2LjMuMAorPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZD5gXy4KIAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgVW5pY29kZQogU3RhbmRhcmQgQW5uZXggIzQ0LCBgIlVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIgpAQCAtMTY2LDYgKzE2Niw2IEBACiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkL05hbWVBbGlhc2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lQWxpYXNlcy50eHQKIAotLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQKKy4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvTmFtZWRTZXF1ZW5jZXMudHh0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CmluZGV4IGQ3ZDY5N2QuLjQ0NGMyMDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CkBAIC0yNzcsNiArMjc3LDIwIEBACiAgICAgICAgLi4uCiAgICAgQXR0cmlidXRlRXJyb3I6IG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdvbGRfbWV0aG9kJwogCitVc2luZyBhIHNwZWNpZmljYXRpb24gYWxzbyBlbmFibGVzIGEgc21hcnRlciBtYXRjaGluZyBvZiBjYWxscyBtYWRlIHRvIHRoZQorbW9jaywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHNvbWUgcGFyYW1ldGVycyB3ZXJlIHBhc3NlZCBhcyBwb3NpdGlvbmFsIG9yCituYW1lZCBhcmd1bWVudHM6OgorCisgICA+Pj4gZGVmIGYoYSwgYiwgYyk6IHBhc3MKKyAgIC4uLgorICAgPj4+IG1vY2sgPSBNb2NrKHNwZWM9ZikKKyAgID4+PiBtb2NrKDEsIDIsIDMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisKK0lmIHlvdSB3YW50IHRoaXMgc21hcnRlciBtYXRjaGluZyB0byBhbHNvIHdvcmsgd2l0aCBtZXRob2QgY2FsbHMgb24gdGhlIG1vY2ssCit5b3UgY2FuIHVzZSA6cmVmOmBhdXRvLXNwZWNjaW5nIDxhdXRvLXNwZWNjaW5nPmAuCisKIElmIHlvdSB3YW50IGEgc3Ryb25nZXIgZm9ybSBvZiBzcGVjaWZpY2F0aW9uIHRoYXQgcHJldmVudHMgdGhlIHNldHRpbmcKIG9mIGFyYml0cmFyeSBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgdGhlIGdldHRpbmcgb2YgdGhlbSB0aGVuIHlvdSBjYW4gdXNlCiBgc3BlY19zZXRgIGluc3RlYWQgb2YgYHNwZWNgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAppbmRleCA5NDk0ODYxLi5kN2VmY2Y0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdApAQCAtMjY0LDcgKzI2NCw2IEBACiAgICAgICAgICAgICA8TW9jayBuYW1lPSdtb2NrLm1ldGhvZCgpJyBpZD0nLi4uJz4KICAgICAgICAgICAgID4+PiBtb2NrLm1ldGhvZC5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMywgdGVzdD0nd293JykKIAotCiAgICAgLi4gbWV0aG9kOjogYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgICAgQXNzZXJ0IHRoYXQgdGhlIG1vY2sgd2FzIGNhbGxlZCBleGFjdGx5IG9uY2UgYW5kIHdpdGggdGhlIHNwZWNpZmllZApAQCAtNjg1LDYgKzY4NCwyNyBAQAogICAgICAgLi4uCiAgICAgS2V5RXJyb3IKIAorQSBjYWxsYWJsZSBtb2NrIHdoaWNoIHdhcyBjcmVhdGVkIHdpdGggYSAqc3BlYyogKG9yIGEgKnNwZWNfc2V0Kikgd2lsbAoraW50cm9zcGVjdCB0aGUgc3BlY2lmaWNhdGlvbiBvYmplY3QncyBzaWduYXR1cmUgd2hlbiBtYXRjaGluZyBjYWxscyB0bwordGhlIG1vY2suICBUaGVyZWZvcmUsIGl0IGNhbiBtYXRjaCB0aGUgYWN0dWFsIGNhbGwncyBhcmd1bWVudHMgcmVnYXJkbGVzcworb2Ygd2hldGhlciB0aGV5IHdlcmUgcGFzc2VkIHBvc2l0aW9uYWxseSBvciBieSBuYW1lOjoKKworICAgPj4+IGRlZiBmKGEsIGIsIGMpOiBwYXNzCisgICAuLi4KKyAgID4+PiBtb2NrID0gTW9jayhzcGVjPWYpCisgICA+Pj4gbW9jaygxLCAyLCBjPTMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKworVGhpcyBhcHBsaWVzIHRvIDptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX3dpdGhgLAorOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoYCwgOm1ldGg6YH5Nb2NrLmFzc2VydF9oYXNfY2FsbHNgIGFuZAorOm1ldGg6YH5Nb2NrLmFzc2VydF9hbnlfY2FsbGAuICBXaGVuIDpyZWY6YGF1dG8tc3BlY2NpbmdgLCBpdCB3aWxsIGFsc28KK2FwcGx5IHRvIG1ldGhvZCBjYWxscyBvbiB0aGUgbW9jayBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzaWduYXR1cmUgaW50cm9zcGVjdGlvbiBvbiBzcGVjY2VkIGFuZCBhdXRvc3BlY2NlZCBtb2NrIG9iamVjdHMuCisKIAogLi4gY2xhc3M6OiBQcm9wZXJ0eU1vY2soKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xOTY5LDggKzE5ODksMTMgQEAKICAgICBkZWZhdWx0KSB0aGVuIGEgYE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCiAgICAgdG8gbWV0aG9kcyBvciBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBvbiBzdGFuZGFyZCBmaWxlIGhhbmRsZXMuCiAKLSAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGB+aW8uSU9CYXNlLnJlYWRgIG1ldGhvZCBvZiB0aGUgZmlsZSBoYW5kbGUKLSAgICB0byByZXR1cm4uICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgorICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGAsCisgICAgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVgLCBhbmQgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVzYCBtZXRob2RzCisgICAgb2YgdGhlIGZpbGUgaGFuZGxlIHRvIHJldHVybi4gIENhbGxzIHRvIHRob3NlIG1ldGhvZHMgd2lsbCB0YWtlIGRhdGEgZnJvbQorICAgIGByZWFkX2RhdGFgIHVudGlsIGl0IGlzIGRlcGxldGVkLiAgVGhlIG1vY2sgb2YgdGhlc2UgbWV0aG9kcyBpcyBwcmV0dHkKKyAgICBzaW1wbGlzdGljLiAgSWYgeW91IG5lZWQgbW9yZSBjb250cm9sIG92ZXIgdGhlIGRhdGEgdGhhdCB5b3UgYXJlIGZlZWRpbmcgdG8KKyAgICB0aGUgdGVzdGVkIGNvZGUgeW91IHdpbGwgbmVlZCB0byBjdXN0b21pemUgdGhpcyBtb2NrIGZvciB5b3Vyc2VsZi4KKyAgICBgcmVhZF9kYXRhYCBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KIAogVXNpbmcgYG9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyIGlzIGEgZ3JlYXQgd2F5IHRvIGVuc3VyZSB5b3VyIGZpbGUgaGFuZGxlcwogYXJlIGNsb3NlZCBwcm9wZXJseSBhbmQgaXMgYmVjb21pbmcgY29tbW9uOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAppbmRleCA1MTU3YjI2Li42MzEwNjI0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CkBAIC01NjMsNiArNTYzLDY4IEBACiBTa2lwcGVkIGNsYXNzZXMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgc2V0VXBDbGFzc2Agb3IgOm1ldGg6YHRlYXJEb3duQ2xhc3NgIHJ1bi4KIAogCisuLiBfc3VidGVzdHM6CisKK0Rpc3Rpbmd1aXNoaW5nIHRlc3QgaXRlcmF0aW9ucyB1c2luZyBzdWJ0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitXaGVuIHNvbWUgb2YgeW91ciB0ZXN0cyBkaWZmZXIgb25seSBieSBhIHNvbWUgdmVyeSBzbWFsbCBkaWZmZXJlbmNlcywgZm9yCitpbnN0YW5jZSBzb21lIHBhcmFtZXRlcnMsIHVuaXR0ZXN0IGFsbG93cyB5b3UgdG8gZGlzdGluZ3Vpc2ggdGhlbSBpbnNpZGUKK3RoZSBib2R5IG9mIGEgdGVzdCBtZXRob2QgdXNpbmcgdGhlIDptZXRoOmB+VGVzdENhc2Uuc3ViVGVzdGAgY29udGV4dCBtYW5hZ2VyLgorCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0ZXN0OjoKKworICAgY2xhc3MgTnVtYmVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgZGVmIHRlc3RfZXZlbihzZWxmKToKKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIFRlc3QgdGhhdCBudW1iZXJzIGJldHdlZW4gMCBhbmQgNSBhcmUgYWxsIGV2ZW4uCisgICAgICAgICAgICIiIgorICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCA2KToKKyAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKword2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9MSkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT0zKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTUpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworV2l0aG91dCB1c2luZyBhIHN1YnRlc3QsIGV4ZWN1dGlvbiB3b3VsZCBzdG9wIGFmdGVyIHRoZSBmaXJzdCBmYWlsdXJlLAorYW5kIHRoZSBlcnJvciB3b3VsZCBiZSBsZXNzIGVhc3kgdG8gZGlhZ25vc2UgYmVjYXVzZSB0aGUgdmFsdWUgb2YgYGBpYGAKK3dvdWxkbid0IGJlIGRpc3BsYXllZDo6CisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworCiAuLiBfdW5pdHRlc3QtY29udGVudHM6CiAKIENsYXNzZXMgYW5kIGZ1bmN0aW9ucwpAQCAtNjc2LDYgKzczOCwyMSBAQAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorICAgLi4gbWV0aG9kOjogc3ViVGVzdChtc2c9Tm9uZSwgKipwYXJhbXMpCisKKyAgICAgIFJldHVybiBhIGNvbnRleHQgbWFuYWdlciB3aGljaCBleGVjdXRlcyB0aGUgZW5jbG9zZWQgY29kZSBibG9jayBhcyBhCisgICAgICBzdWJ0ZXN0LiAgKm1zZyogYW5kICpwYXJhbXMqIGFyZSBvcHRpb25hbCwgYXJiaXRyYXJ5IHZhbHVlcyB3aGljaCBhcmUKKyAgICAgIGRpc3BsYXllZCB3aGVuZXZlciBhIHN1YnRlc3QgZmFpbHMsIGFsbG93aW5nIHlvdSB0byBpZGVudGlmeSB0aGVtCisgICAgICBjbGVhcmx5LgorCisgICAgICBBIHRlc3QgY2FzZSBjYW4gY29udGFpbiBhbnkgbnVtYmVyIG9mIHN1YnRlc3QgZGVjbGFyYXRpb25zLCBhbmQKKyAgICAgIHRoZXkgY2FuIGJlIGFyYml0cmFyaWx5IG5lc3RlZC4KKworICAgICAgU2VlIDpyZWY6YHN1YnRlc3RzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogICAgLi4gbWV0aG9kOjogZGVidWcoKQogCiAgICAgICBSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIHRoZSByZXN1bHQuICBUaGlzIGFsbG93cyBleGNlcHRpb25zIHJhaXNlZApAQCAtODA2LDggKzg4Myw4IEBACiAKIAogCi0gICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoYXQgZXhjZXB0aW9ucyBhbmQgd2FybmluZ3MgYXJlIHJhaXNlZCB1c2luZwotICAgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGVjayB0aGUgcHJvZHVjdGlvbiBvZiBleGNlcHRpb25zLCB3YXJuaW5ncyBhbmQKKyAgIGxvZyBtZXNzYWdlcyB1c2luZyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogICAgfCBNZXRob2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2hlY2tzIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmV3IGluICAgICB8CkBAIC04MjQsNiArOTAxLDkgQEAKICAgIHwgOm1ldGg6YGFzc2VydFdhcm5zUmVnZXgod2FybiwgciwgZnVuLCAqYXJncywgKiprd2RzKSAgICB8IGBgZnVuKCphcmdzLCAqKmt3ZHMpYGAgcmFpc2VzICp3YXJuKiB8IDMuMiAgICAgICAgfAogICAgfCA8VGVzdENhc2UuYXNzZXJ0V2FybnNSZWdleD5gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kIHRoZSBtZXNzYWdlIG1hdGNoZXMgcmVnZXggKnIqICAgIHwgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgIHwgOm1ldGg6YGFzc2VydExvZ3MobG9nZ2VyLCBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSBgYHdpdGhgYCBibG9jayBsb2dzIG9uICpsb2dnZXIqICB8IDMuNCAgICAgICAgfAorICAgfCA8VGVzdENhc2UuYXNzZXJ0TG9ncz5gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2l0aCBtaW5pbXVtICpsZXZlbCogICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIAogICAgLi4gbWV0aG9kOjogYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbiwgY2FsbGFibGUsICphcmdzLCAqKmt3ZHMpCiAgICAgICAgICAgICAgICBhc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBtc2c9Tm9uZSkKQEAgLTk1NCw2ICsxMDM0LDQ3IEBACiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgICAgQWRkZWQgdGhlICptc2cqIGtleXdvcmQgYXJndW1lbnQgd2hlbiB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCisgICAuLiBtZXRob2Q6OiBhc3NlcnRMb2dzKGxvZ2dlcj1Ob25lLCBsZXZlbD1Ob25lKQorCisgICAgICBBIGNvbnRleHQgbWFuYWdlciB0byB0ZXN0IHRoYXQgYXQgbGVhc3Qgb25lIG1lc3NhZ2UgaXMgbG9nZ2VkIG9uCisgICAgICB0aGUgKmxvZ2dlciogb3Igb25lIG9mIGl0cyBjaGlsZHJlbiwgd2l0aCBhdCBsZWFzdCB0aGUgZ2l2ZW4KKyAgICAgICpsZXZlbCouCisKKyAgICAgIElmIGdpdmVuLCAqbG9nZ2VyKiBzaG91bGQgYmUgYSA6Y2xhc3M6YGxvZ2dpbmcuTG9nZ2VyYCBvYmplY3Qgb3IgYQorICAgICAgOmNsYXNzOmBzdHJgIGdpdmluZyB0aGUgbmFtZSBvZiBhIGxvZ2dlci4gIFRoZSBkZWZhdWx0IGlzIHRoZSByb290CisgICAgICBsb2dnZXIsIHdoaWNoIHdpbGwgY2F0Y2ggYWxsIG1lc3NhZ2VzLgorCisgICAgICBJZiBnaXZlbiwgKmxldmVsKiBzaG91bGQgYmUgZWl0aGVyIGEgbnVtZXJpYyBsb2dnaW5nIGxldmVsIG9yCisgICAgICBpdHMgc3RyaW5nIGVxdWl2YWxlbnQgKGZvciBleGFtcGxlIGVpdGhlciBgYCJFUlJPUiJgYCBvcgorICAgICAgOmF0dHI6YGxvZ2dpbmcuRVJST1JgKS4gIFRoZSBkZWZhdWx0IGlzIDphdHRyOmBsb2dnaW5nLklORk9gLgorCisgICAgICBUaGUgdGVzdCBwYXNzZXMgaWYgYXQgbGVhc3Qgb25lIG1lc3NhZ2UgZW1pdHRlZCBpbnNpZGUgdGhlIGBgd2l0aGBgCisgICAgICBibG9jayBtYXRjaGVzIHRoZSAqbG9nZ2VyKiBhbmQgKmxldmVsKiBjb25kaXRpb25zLCBvdGhlcndpc2UgaXQgZmFpbHMuCisKKyAgICAgIFRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGNvbnRleHQgbWFuYWdlciBpcyBhIHJlY29yZGluZyBoZWxwZXIKKyAgICAgIHdoaWNoIGtlZXBzIHRyYWNrcyBvZiB0aGUgbWF0Y2hpbmcgbG9nIG1lc3NhZ2VzLiAgSXQgaGFzIHR3bworICAgICAgYXR0cmlidXRlczoKKworICAgICAgLi4gYXR0cmlidXRlOjogcmVjb3JkcworCisgICAgICAgICBBIGxpc3Qgb2YgOmNsYXNzOmBsb2dnaW5nLkxvZ1JlY29yZGAgb2JqZWN0cyBvZiB0aGUgbWF0Y2hpbmcKKyAgICAgICAgIGxvZyBtZXNzYWdlcy4KKworICAgICAgLi4gYXR0cmlidXRlOjogb3V0cHV0CisKKyAgICAgICAgIEEgbGlzdCBvZiA6Y2xhc3M6YHN0cmAgb2JqZWN0cyB3aXRoIHRoZSBmb3JtYXR0ZWQgb3V0cHV0IG9mCisgICAgICAgICBtYXRjaGluZyBtZXNzYWdlcy4KKworICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nLCBsZXZlbD0nSU5GTycpIGFzIGNtOgorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpLmluZm8oJ2ZpcnN0IG1lc3NhZ2UnKQorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKICAgIFRoZXJlIGFyZSBhbHNvIG90aGVyIG1ldGhvZHMgdXNlZCB0byBwZXJmb3JtIG1vcmUgc3BlY2lmaWMgY2hlY2tzLCBzdWNoIGFzOgogCkBAIC0xMzkzLDE1ICsxNTE0LDI0IEBACiAKICAgICAgIFRlc3RzIGdyb3VwZWQgYnkgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYXJlIGFsd2F5cyBhY2Nlc3NlZCBieSBpdGVyYXRpb24uCiAgICAgICBTdWJjbGFzc2VzIGNhbiBsYXppbHkgcHJvdmlkZSB0ZXN0cyBieSBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2AuIE5vdGUKLSAgICAgIHRoYXQgdGhpcyBtZXRob2QgbWF5YmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUKLSAgICAgIChmb3IgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpCi0gICAgICBzbyB0aGUgdGVzdHMgcmV0dXJuZWQgbXVzdCBiZSB0aGUgc2FtZSBmb3IgcmVwZWF0ZWQgaXRlcmF0aW9ucy4KKyAgICAgIHRoYXQgdGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIG9uIGEgc2luZ2xlIHN1aXRlIChmb3IKKyAgICAgIGV4YW1wbGUgd2hlbiBjb3VudGluZyB0ZXN0cyBvciBjb21wYXJpbmcgZm9yIGVxdWFsaXR5KSBzbyB0aGUgdGVzdHMKKyAgICAgIHJldHVybmVkIGJ5IHJlcGVhdGVkIGl0ZXJhdGlvbnMgYmVmb3JlIDptZXRoOmBUZXN0U3VpdGUucnVuYCBtdXN0IGJlIHRoZQorICAgICAgc2FtZSBmb3IgZWFjaCBjYWxsIGl0ZXJhdGlvbi4gQWZ0ZXIgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gLCBjYWxsZXJzIHNob3VsZAorICAgICAgbm90IHJlbHkgb24gdGhlIHRlc3RzIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIHVubGVzcyB0aGUgY2FsbGVyIHVzZXMgYQorICAgICAgc3ViY2xhc3MgdGhhdCBvdmVycmlkZXMgOm1ldGg6YFRlc3RTdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXhgIHRvIHByZXNlcnZlCisgICAgICB0ZXN0IHJlZmVyZW5jZXMuCiAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYWNjZXNzZWQgdGVzdHMgZGlyZWN0bHkgcmF0aGVyCiAgICAgICAgICB0aGFuIHRocm91Z2ggaXRlcmF0aW9uLCBzbyBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2Agd2Fzbid0IHN1ZmZpY2llbnQKICAgICAgICAgIGZvciBwcm92aWRpbmcgdGVzdHMuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgaGVsZCByZWZlcmVuY2VzIHRvIGVhY2gKKyAgICAgICAgIDpjbGFzczpgVGVzdENhc2VgIGFmdGVyIDptZXRoOmBUZXN0U3VpdGUucnVuYC4gU3ViY2xhc3NlcyBjYW4gcmVzdG9yZQorICAgICAgICAgdGhhdCBiZWhhdmlvciBieSBvdmVycmlkaW5nIDptZXRoOmBUZXN0U3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4YC4KKwogICAgSW4gdGhlIHR5cGljYWwgdXNhZ2Ugb2YgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgb2JqZWN0LCB0aGUgOm1ldGg6YHJ1bmAgbWV0aG9kCiAgICBpcyBpbnZva2VkIGJ5IGEgOmNsYXNzOmBUZXN0UnVubmVyYCByYXRoZXIgdGhhbiBieSB0aGUgZW5kLXVzZXIgdGVzdCBoYXJuZXNzLgogCkBAIC0xNTAwLDcgKzE2MzAsOSBAQAogICAgICAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkuCiAKICAgICAgIElmIGltcG9ydGluZyBhIG1vZHVsZSBmYWlscywgZm9yIGV4YW1wbGUgZHVlIHRvIGEgc3ludGF4IGVycm9yLCB0aGVuIHRoaXMKLSAgICAgIHdpbGwgYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgZXJyb3IgYW5kIGRpc2NvdmVyeSB3aWxsIGNvbnRpbnVlLgorICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuICBJZiB0aGUKKyAgICAgIGltcG9ydCBmYWlsdXJlIGlzIGR1ZSB0byA6ZXhjOmBTa2lwVGVzdGAgYmVpbmcgcmFpc2VkLCBpdCB3aWxsIGJlIHJlY29yZGVkCisgICAgICBhcyBhIHNraXAgaW5zdGVhZCBvZiBhbiBlcnJvci4KIAogICAgICAgSWYgYSB0ZXN0IHBhY2thZ2UgbmFtZSAoZGlyZWN0b3J5IHdpdGggOmZpbGU6YF9faW5pdF9fLnB5YCkgbWF0Y2hlcyB0aGUKICAgICAgIHBhdHRlcm4gdGhlbiB0aGUgcGFja2FnZSB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgYGBsb2FkX3Rlc3RzYGAKQEAgLTE1MTksNiArMTY1MSwxNSBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIE1vZHVsZXMgdGhhdCByYWlzZSA6ZXhjOmBTa2lwVGVzdGAgb24gaW1wb3J0IGFyZSByZWNvcmRlZCBhcyBza2lwcywKKyAgICAgICAgIG5vdCBlcnJvcnMuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCB0byBlbnN1cmUgZXhlY3V0aW9uIG9yZGVyIGZvciBhCisgICAgICAgICBnaXZlbiB0ZXN0IHN1aXRlIGlzIHRoZSBzYW1lIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0ncyBvcmRlcmluZworICAgICAgICAgaXMgbm90IGRlcGVuZGVudCBvbiBmaWxlIG5hbWUgbGlrZSBpbiBleHQzLzQuCisKIAogICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG9mIGEgOmNsYXNzOmBUZXN0TG9hZGVyYCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgYnkKICAgIHN1YmNsYXNzaW5nIG9yIGFzc2lnbm1lbnQgb24gYW4gaW5zdGFuY2U6CkBAIC0xNzI4LDYgKzE4NjksMjIgQEAKICAgICAgIDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYCBhdHRyaWJ1dGUuCiAKIAorICAgLi4gbWV0aG9kOjogYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBvdXRjb21lKQorCisgICAgICBDYWxsZWQgd2hlbiBhIHN1YnRlc3QgZmluaXNoZXMuICAqdGVzdCogaXMgdGhlIHRlc3QgY2FzZQorICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgdGVzdCBtZXRob2QuICAqc3VidGVzdCogaXMgYSBjdXN0b20KKyAgICAgIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIHN1YnRlc3QuCisKKyAgICAgIElmICpvdXRjb21lKiBpcyA6Y29uc3Q6YE5vbmVgLCB0aGUgc3VidGVzdCBzdWNjZWVkZWQuICBPdGhlcndpc2UsCisgICAgICBpdCBmYWlsZWQgd2l0aCBhbiBleGNlcHRpb24gd2hlcmUgKm91dGNvbWUqIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0KKyAgICAgIHJldHVybmVkIGJ5IDpmdW5jOmBzeXMuZXhjX2luZm9gOiBgYCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKWBgLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgb3V0Y29tZSBpcyBhCisgICAgICBzdWNjZXNzLCBhbmQgcmVjb3JkcyBzdWJ0ZXN0IGZhaWx1cmVzIGFzIG5vcm1hbCBmYWlsdXJlcy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY2xhc3M6OiBUZXh0VGVzdFJlc3VsdChzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KQogCiAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgVGVzdFJlc3VsdGAgdXNlZCBieSB0aGUKQEAgLTE4MzcsNiArMTk5NCwxMCBAQAogICAgICAgVGhlICp2ZXJib3NpdHkqLCAqZmFpbGZhc3QqLCAqY2F0Y2hicmVhayosICpidWZmZXIqCiAgICAgICBhbmQgKndhcm5pbmdzKiBwYXJhbWV0ZXJzIHdlcmUgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKmRlZmF1bHRUZXN0KiBwYXJhbWV0ZXIgd2FzIGNoYW5nZWQgdG8gYWxzbyBhY2NlcHQgYW4gaXRlcmFibGUgb2YKKyAgICAgIHRlc3QgbmFtZXMuCisKIAogbG9hZF90ZXN0cyBQcm90b2NvbAogIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKaW5kZXggMjVjMTNiZC4uOWZiNThmNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CkBAIC00Niw2ICs0NiwxMyBAQAogCiAgICAgICBUaGlzIGlzIHVzdWFsbHkgYSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgcmVhc29uIGZvciB0aGlzIGVycm9yLgogCisgICAuLiBhdHRyaWJ1dGU6OiBoZWFkZXJzCisKKyAgICAgIFRoZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgZm9yIHRoZSBIVFRQIHJlcXVlc3QgdGhhdCBjYXVzZSB0aGUKKyAgICAgIDpleGM6YEhUVFBFcnJvcmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBleGNlcHRpb246OiBDb250ZW50VG9vU2hvcnRFcnJvcihtc2csIGNvbnRlbnQpCiAKICAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHRoZSA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CmluZGV4IGVhYzIyMmYuLjYxYjc3MzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKQEAgLTIyMCwxMCArMjIwLDE1IEBACiAgICAqbWV0aG9kKiBzaG91bGQgYmUgYSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdGhhdAogICAgd2lsbCBiZSB1c2VkIChlLmcuIGBgJ0hFQUQnYGApLiAgSXRzIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUKICAgIDphdHRyOmB+UmVxdWVzdC5tZXRob2RgIGF0dHJpYnV0ZSBhbmQgaXMgdXNlZCBieSA6bWV0aDpgZ2V0X21ldGhvZCgpYC4KKyAgIFN1YmNsYXNzZXMgbWF5IGluZGljYXRlIGEgZGVmYXVsdCBtZXRob2QgYnkgc2V0dGluZyB0aGUKKyAgIDphdHRyOmB+UmVxdWVzdC5tZXRob2RgIGF0dHJpYnV0ZSBpbiB0aGUgY2xhc3MgaXRzZWxmLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgOmF0dHI6YFJlcXVlc3QubWV0aG9kYCBhcmd1bWVudCBpcyBhZGRlZCB0byB0aGUgUmVxdWVzdCBjbGFzcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIERlZmF1bHQgOmF0dHI6YFJlcXVlc3QubWV0aG9kYCBtYXkgYmUgaW5kaWNhdGVkIGF0IHRoZSBjbGFzcyBsZXZlbC4KKwogCiAuLiBjbGFzczo6IE9wZW5lckRpcmVjdG9yKCkKIApAQCAtMzU2LDYgKzM2MSwxMSBAQAogCiAgICBPcGVuIGxvY2FsIGZpbGVzLgogCisuLiBjbGFzczo6IERhdGFIYW5kbGVyKCkKKworICAgT3BlbiBkYXRhIFVSTHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBjbGFzczo6IEZUUEhhbmRsZXIoKQogCkBAIC0zOTEsNiArNDAxLDEyIEBACiAKICAgIFRoZSBvcmlnaW5hbCBVUkwgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgUmVxdWVzdC5mdWxsX3VybCBpcyBhIHByb3BlcnR5IHdpdGggc2V0dGVyLCBnZXR0ZXIgYW5kIGEgZGVsZXRlci4gR2V0dGluZworICAgOmF0dHI6YH5SZXF1ZXN0LmZ1bGxfdXJsYCByZXR1cm5zIHRoZSBvcmlnaW5hbCByZXF1ZXN0IFVSTCB3aXRoIHRoZQorICAgZnJhZ21lbnQsIGlmIGl0IHdhcyBwcmVzZW50LgorCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LnR5cGUKIAogICAgVGhlIFVSSSBzY2hlbWUuCkBAIC00MTMsNiArNDI5LDEwIEBACiAKICAgIFRoZSBlbnRpdHkgYm9keSBmb3IgdGhlIHJlcXVlc3QsIG9yIE5vbmUgaWYgbm90IHNwZWNpZmllZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5naW5nIHZhbHVlIG9mIDphdHRyOmBSZXF1ZXN0LmRhdGFgIG5vdyBkZWxldGVzICJDb250ZW50LUxlbmd0aCIKKyAgICAgIGhlYWRlciBpZiBpdCB3YXMgcHJldmlvdXNseSBzZXQgb3IgY2FsY3VsYXRlZC4KKwogLi4gYXR0cmlidXRlOjogUmVxdWVzdC51bnZlcmlmaWFibGUKIAogICAgYm9vbGVhbiwgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgdW52ZXJpZmlhYmxlIGFzIGRlZmluZWQKQEAgLTQ2MSwxMCArNDgxLDIyIEBACiAgICB1bnJlZGlyZWN0ZWQpLgogCiAKKy4uIG1ldGhvZDo6IFJlcXVlc3QucmVtb3ZlX2hlYWRlcihoZWFkZXIpCisKKyAgIFJlbW92ZSBuYW1lZCBoZWFkZXIgZnJvbSB0aGUgcmVxdWVzdCBpbnN0YW5jZSAoYm90aCBmcm9tIHJlZ3VsYXIgYW5kCisgICB1bnJlZGlyZWN0ZWQgaGVhZGVycykuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2Z1bGxfdXJsKCkKIAogICAgUmV0dXJuIHRoZSBVUkwgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorCisgICBSZXR1cm5zIDphdHRyOmBSZXF1ZXN0LmZ1bGxfdXJsYAorCiAKIC4uIG1ldGhvZDo6IFJlcXVlc3Quc2V0X3Byb3h5KGhvc3QsIHR5cGUpCiAKQEAgLTQ3Myw1NCArNTA1LDYgQEAKICAgIFVSTCBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IuCiAKIAotLi4gbWV0aG9kOjogUmVxdWVzdC5hZGRfZGF0YShkYXRhKQotCi0gICBTZXQgdGhlIDpjbGFzczpgUmVxdWVzdGAgZGF0YSB0byAqZGF0YSouICBUaGlzIGlzIGlnbm9yZWQgYnkgYWxsIGhhbmRsZXJzIGV4Y2VwdAotICAgSFRUUCBoYW5kbGVycyAtLS0gYW5kIHRoZXJlIGl0IHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nLCBhbmQgd2lsbCBjaGFuZ2UgdGhlCi0gICByZXF1ZXN0IHRvIGJlIGBgUE9TVGBgIHJhdGhlciB0aGFuIGBgR0VUYGAuICBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuaGFzX2RhdGEoKQotCi0gICBSZXR1cm4gd2hldGhlciB0aGUgaW5zdGFuY2UgaGFzIGEgbm9uLVwgYGBOb25lYGAgZGF0YS4gRGVwcmVjYXRlZCBpbiAzLjMsCi0gICB1c2UgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9kYXRhKCkKLQotICAgUmV0dXJuIHRoZSBpbnN0YW5jZSdzIGRhdGEuICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfdHlwZSgpCi0KLSAgIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgVVJMIC0tLSBhbHNvIGtub3duIGFzIHRoZSBzY2hlbWUuICBEZXByZWNhdGVkIGluIDMuMywKLSAgIHVzZSA6YXR0cjpgUmVxdWVzdC50eXBlYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2hvc3QoKQotCi0gICBSZXR1cm4gdGhlIGhvc3QgdG8gd2hpY2ggYSBjb25uZWN0aW9uIHdpbGwgYmUgbWFkZS4gRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QuaG9zdGAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9zZWxlY3RvcigpCi0KLSAgIFJldHVybiB0aGUgc2VsZWN0b3IgLS0tIHRoZSBwYXJ0IG9mIHRoZSBVUkwgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuCi0gICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0LnNlbGVjdG9yYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9oZWFkZXIoaGVhZGVyX25hbWUsIGRlZmF1bHQ9Tm9uZSkKIAogICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gaGVhZGVyLiBJZiB0aGUgaGVhZGVyIGlzIG5vdCBwcmVzZW50LCByZXR1cm4KQEAgLTUzMSwyNiArNTE1LDEwIEBACiAKICAgIFJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIChoZWFkZXJfbmFtZSwgaGVhZGVyX3ZhbHVlKSBvZiB0aGUgUmVxdWVzdCBoZWFkZXJzLgogCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3Quc2V0X3Byb3h5KGhvc3QsIHR5cGUpCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X29yaWdpbl9yZXFfaG9zdCgpCi0KLSAgIFJldHVybiB0aGUgcmVxdWVzdC1ob3N0IG9mIHRoZSBvcmlnaW4gdHJhbnNhY3Rpb24sIGFzIGRlZmluZWQgYnkKLSAgIDpyZmM6YDI5NjVgLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBjb25zdHJ1Y3Rvci4KLSAgIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3Qub3JpZ2luX3JlcV9ob3N0YC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlKCkKLQotICAgUmV0dXJuIHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgdW52ZXJpZmlhYmxlLCBhcyBkZWZpbmVkIGJ5IFJGQyAyOTY1LiBTZWUgdGhlCi0gICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBjb25zdHJ1Y3Rvci4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0LnVudmVyaWZpYWJsZWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgUmVxdWVzdCBtZXRob2RzIGFkZF9kYXRhLCBoYXNfZGF0YSwgZ2V0X2RhdGEsIGdldF90eXBlLCBnZXRfaG9zdCwKKyAgZ2V0X3NlbGVjdG9yLCBnZXRfb3JpZ2luX3JlcV9ob3N0IGFuZCBpc191bnZlcmlmaWFibGUgZGVwcmVjYXRlZCBzaW5jZSAzLjMKKyAgaGF2ZSBiZWVuIHJlbW92ZWQuCiAKIC4uIF9vcGVuZXItZGlyZWN0b3Itb2JqZWN0czoKIApAQCAtOTgzLDYgKzk1MSwyMSBAQAogICAgICAgaG9zdG5hbWUgaXMgZ2l2ZW4sIGFuIDpleGM6YH51cmxsaWIuZXJyb3IuVVJMRXJyb3JgIGlzIHJhaXNlZC4KIAogCisuLiBfZGF0YS1oYW5kbGVyLW9iamVjdHM6CisKK0RhdGFIYW5kbGVyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogRGF0YUhhbmRsZXIuZGF0YV9vcGVuKHJlcSkKKworICAgUmVhZCBhIGRhdGEgVVJMLiBUaGlzIGtpbmQgb2YgVVJMIGNvbnRhaW5zIHRoZSBjb250ZW50IGVuY29kZWQgaW4gdGhlIFVSTAorICAgaXRzZWxmLiBUaGUgZGF0YSBVUkwgc3ludGF4IGlzIHNwZWNpZmllZCBpbiA6cmZjOmAyMzk3YC4gVGhpcyBpbXBsZW1lbnRhdGlvbgorICAgaWdub3JlcyB3aGl0ZSBzcGFjZXMgaW4gYmFzZTY0IGVuY29kZWQgZGF0YSBVUkxzIHNvIHRoZSBVUkwgbWF5IGJlIHdyYXBwZWQKKyAgIGluIHdoYXRldmVyIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uIEJ1dCBldmVuIHRob3VnaCBzb21lIGJyb3dzZXJzIGRvbid0CisgICBtaW5kIGFib3V0IGEgbWlzc2luZyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTCwgdGhpcworICAgaW1wbGVtZW50YXRpb24gd2lsbCByYWlzZSBhbiA6ZXhjOmBWYWx1ZUVycm9yYCBpbiB0aGF0IGNhc2UuCisKKwogLi4gX2Z0cC1oYW5kbGVyLW9iamVjdHM6CiAKIEZUUEhhbmRsZXIgT2JqZWN0cwpAQCAtMTM5OCw3ICsxMzgxLDkgQEAKICAgICAgcGFpcjogRlRQOyBwcm90b2NvbAogCiAqIEN1cnJlbnRseSwgb25seSB0aGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBIVFRQICh2ZXJzaW9ucyAwLjkgYW5kCi0gIDEuMCksIEZUUCwgYW5kIGxvY2FsIGZpbGVzLgorICAxLjApLCBGVFAsIGxvY2FsIGZpbGVzLCBhbmQgZGF0YSBVUkxzLgorCisgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IEFkZGVkIHN1cHBvcnQgZm9yIGRhdGEgVVJMcy4KIAogKiBUaGUgY2FjaGluZyBmZWF0dXJlIG9mIDpmdW5jOmB1cmxyZXRyaWV2ZWAgaGFzIGJlZW4gZGlzYWJsZWQgdW50aWwgc29tZW9uZQogICBmaW5kcyB0aGUgdGltZSB0byBoYWNrIHByb3BlciBwcm9jZXNzaW5nIG9mIEV4cGlyYXRpb24gdGltZSBoZWFkZXJzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdmVudi5yc3QgYi9Eb2MvbGlicmFyeS92ZW52LnJzdAppbmRleCAyZGQyMWU1Li5lZmMyMTM3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS92ZW52LnJzdAorKysgYi9Eb2MvbGlicmFyeS92ZW52LnJzdApAQCAtODUsNyArODUsOCBAQAogbWVjaGFuaXNtcyBmb3IgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCBjcmVhdG9ycyB0byBjdXN0b21pemUgZW52aXJvbm1lbnQKIGNyZWF0aW9uIGFjY29yZGluZyB0byB0aGVpciBuZWVkcywgdGhlIDpjbGFzczpgRW52QnVpbGRlcmAgY2xhc3MuCiAKLS4uIGNsYXNzOjogRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlKQorLi4gY2xhc3M6OiBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSkKIAogICAgIFRoZSA6Y2xhc3M6YEVudkJ1aWxkZXJgIGNsYXNzIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBrZXl3b3JkIGFyZ3VtZW50cyBvbgogICAgIGluc3RhbnRpYXRpb246CkBAIC05Myw4ICs5NCw4IEBACiAgICAgKiBgYHN5c3RlbV9zaXRlX3BhY2thZ2VzYGAgLS0gYSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhhdCB0aGUgc3lzdGVtIFB5dGhvbgogICAgICAgc2l0ZS1wYWNrYWdlcyBzaG91bGQgYmUgYXZhaWxhYmxlIHRvIHRoZSBlbnZpcm9ubWVudCAoZGVmYXVsdHMgdG8gYGBGYWxzZWBgKS4KIAotICAgICogYGBjbGVhcmBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgVHJ1ZSwgd2lsbCBkZWxldGUgYW55IGV4aXN0aW5nIHRhcmdldAotICAgICAgZGlyZWN0b3J5IGluc3RlYWQgb2YgcmFpc2luZyBhbiBleGNlcHRpb24gKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCisgICAgKiBgYGNsZWFyYGAgLS0gYSBCb29sZWFuIHZhbHVlIHdoaWNoLCBpZiBUcnVlLCB3aWxsIGRlbGV0ZSB0aGUgY29udGVudHMgb2YKKyAgICAgIGFueSBleGlzdGluZyB0YXJnZXQgZGlyZWN0b3J5LCBiZWZvcmUgY3JlYXRpbmcgdGhlIGVudmlyb25tZW50LgogCiAgICAgKiBgYHN5bWxpbmtzYGAgLS0gYSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBhdHRlbXB0IHRvIHN5bWxpbmsgdGhlCiAgICAgICBQeXRob24gYmluYXJ5IChhbmQgYW55IG5lY2Vzc2FyeSBETExzIG9yIG90aGVyIGJpbmFyaWVzLApAQCAtMTA1LDYgKzEwNiwxMSBAQAogICAgICAgZW52aXJvbm1lbnQgd2l0aCB0aGUgcnVubmluZyBQeXRob24gLSBmb3IgdXNlIHdoZW4gdGhhdCBQeXRob24gaGFzIGJlZW4KICAgICAgIHVwZ3JhZGVkIGluLXBsYWNlIChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgogCisgICAgKiBgYHdpdGhfcGlwYGAgLS0gYSBCb29sZWFuIHZhbHVlIHdoaWNoLCBpZiBUcnVlLCBlbnN1cmVzIHBpcCBpcworICAgICAgaW5zdGFsbGVkIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50CisKKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgIEFkZGVkIHRoZSBgYHdpdGhfcGlwYGAgcGFyYW1ldGVyCiAKIAogICAgIENyZWF0b3JzIG9mIHRoaXJkLXBhcnR5IHZpcnR1YWwgZW52aXJvbm1lbnQgdG9vbHMgd2lsbCBiZSBmcmVlIHRvIHVzZSB0aGUKQEAgLTE4OCw2ICsxOTQsOSBAQAogICAgICAgICAqIGBgX19WRU5WX05BTUVfX2BgIGlzIHJlcGxhY2VkIHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUgKGZpbmFsIHBhdGgKICAgICAgICAgICBzZWdtZW50IG9mIGVudmlyb25tZW50IGRpcmVjdG9yeSkuCiAKKyAgICAgICAgKiBgYF9fVkVOVl9QUk9NUFRfX2BgIGlzIHJlcGxhY2VkIHdpdGggdGhlIHByb21wdCAodGhlIGVudmlyb25tZW50CisgICAgICAgICAgbmFtZSBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2VzIGFuZCB3aXRoIGEgZm9sbG93aW5nIHNwYWNlKQorCiAgICAgICAgICogYGBfX1ZFTlZfQklOX05BTUVfX2BgIGlzIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGJpbiBkaXJlY3RvcnkKICAgICAgICAgICAoZWl0aGVyIGBgYmluYGAgb3IgYGBTY3JpcHRzYGApLgogCkBAIC0xOTksMTEgKzIwOCwxNSBAQAogCiBUaGVyZSBpcyBhbHNvIGEgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9uOgogCi0uLiBmdW5jdGlvbjo6IGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIHN5bWxpbmtzPUZhbHNlKQorLi4gZnVuY3Rpb246OiBjcmVhdGUoZW52X2Rpciwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgd2l0aF9waXA9RmFsc2UpCiAKICAgICBDcmVhdGUgYW4gOmNsYXNzOmBFbnZCdWlsZGVyYCB3aXRoIHRoZSBnaXZlbiBrZXl3b3JkIGFyZ3VtZW50cywgYW5kIGNhbGwgaXRzCiAgICAgOm1ldGg6YH5FbnZCdWlsZGVyLmNyZWF0ZWAgbWV0aG9kIHdpdGggdGhlICplbnZfZGlyKiBhcmd1bWVudC4KIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgQWRkZWQgdGhlIGBgd2l0aF9waXBgYCBwYXJhbWV0ZXIKKwogQW4gZXhhbXBsZSBvZiBleHRlbmRpbmcgYGBFbnZCdWlsZGVyYGAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dhdmUucnN0IGIvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKaW5kZXggYWZhZmI0NS4uYzMyZTFmYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKQEAgLTE5LDI2ICsxOSwzMiBAQAogLi4gZnVuY3Rpb246OiBvcGVuKGZpbGUsIG1vZGU9Tm9uZSkKIAogICAgSWYgKmZpbGUqIGlzIGEgc3RyaW5nLCBvcGVuIHRoZSBmaWxlIGJ5IHRoYXQgbmFtZSwgb3RoZXJ3aXNlIHRyZWF0IGl0IGFzIGEKLSAgIHNlZWthYmxlIGZpbGUtbGlrZSBvYmplY3QuICAqbW9kZSogY2FuIGJlIGFueSBvZgorICAgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmU6CiAKLSAgIGBgJ3InYGAsIGBgJ3JiJ2BgCisgICBgYCdyYidgYAogICAgICAgUmVhZCBvbmx5IG1vZGUuCiAKLSAgIGBgJ3cnYGAsIGBgJ3diJ2BgCisgICBgYCd3YidgYAogICAgICAgV3JpdGUgb25seSBtb2RlLgogCiAgICBOb3RlIHRoYXQgaXQgZG9lcyBub3QgYWxsb3cgcmVhZC93cml0ZSBXQVYgZmlsZXMuCiAKLSAgIEEgKm1vZGUqIG9mIGBgJ3InYGAgb3IgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEKLSAgICptb2RlKiBvZiBgYCd3J2BgIG9yIGBgJ3diJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfd3JpdGVgIG9iamVjdC4gIElmCi0gICAqbW9kZSogaXMgb21pdHRlZCBhbmQgYSBmaWxlLWxpa2Ugb2JqZWN0IGlzIHBhc3NlZCBhcyAqZmlsZSosIGBgZmlsZS5tb2RlYGAKLSAgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yICptb2RlKiAodGhlIGBgJ2InYGAgZmxhZyBpcyBzdGlsbCBhZGRlZCBpZgotICAgbmVjZXNzYXJ5KS4KKyAgIEEgKm1vZGUqIG9mIGBgJ3JiJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfcmVhZGAgb2JqZWN0LCB3aGlsZSBhICptb2RlKiBvZgorICAgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYgKm1vZGUqIGlzIG9taXR0ZWQgYW5kIGEKKyAgIGZpbGUtbGlrZSBvYmplY3QgaXMgcGFzc2VkIGFzICpmaWxlKiwgYGBmaWxlLm1vZGVgYCBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0CisgICB2YWx1ZSBmb3IgKm1vZGUqLgogCiAgICBJZiB5b3UgcGFzcyBpbiBhIGZpbGUtbGlrZSBvYmplY3QsIHRoZSB3YXZlIG9iamVjdCB3aWxsIG5vdCBjbG9zZSBpdCB3aGVuIGl0cwogICAgOm1ldGg6YGNsb3NlYCBtZXRob2QgaXMgY2FsbGVkOyBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2xvc2UKICAgIHRoZSBmaWxlIG9iamVjdC4KIAorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgV2F2ZV9yZWFkLmNsb3NlKCkKKyAgIDx3YXZlLldhdmVfcmVhZC5jbG9zZT5gIG9yIDptZXRoOmBXYXZlX3dyaXRlLmNsb3NlKCkKKyAgIDx3YXZlLldhdmVfd3JpdGUuY2xvc2UoKT5gIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB1bnNlZWthYmxlIGZpbGVzLgogCiAuLiBmdW5jdGlvbjo6IG9wZW5mcChmaWxlLCBtb2RlKQogCkBAIC05OCw4ICsxMDQsOSBAQAogCiAuLiBtZXRob2Q6OiBXYXZlX3JlYWQuZ2V0cGFyYW1zKCkKIAotICAgUmV0dXJucyBhIHR1cGxlIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLCBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLAotICAgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZSA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCisgICBSZXR1cm5zIGEgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwKKyAgIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUKKyAgIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KIAogCiAuLiBtZXRob2Q6OiBXYXZlX3JlYWQucmVhZGZyYW1lcyhuKQpAQCAtMTQ5LDcgKzE1Niw4IEBACiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLmNsb3NlKCkKIAogICAgTWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LCBhbmQgY2xvc2UgdGhlIGZpbGUgaWYgaXQgd2FzIG9wZW5lZCBieQotICAgOm1vZDpgd2F2ZWAuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBvYmplY3QgY29sbGVjdGlvbi4KKyAgIDptb2Q6YHdhdmVgLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gb2JqZWN0IGNvbGxlY3Rpb24uIENhbiByYWlzZSBhbgorICAgZXhjZXB0aW9uIGlmICpuZnJhbWVzKiBpcyBub3QgY29ycmVjdCBhbmQgYSBmaWxlIGlzIG5vdCBzZWVrYWJsZS4KIAogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLnNldG5jaGFubmVscyhuKQpAQCAtMjAwLDEwICsyMDgsMTcgQEAKIAogICAgV3JpdGUgYXVkaW8gZnJhbWVzLCB3aXRob3V0IGNvcnJlY3RpbmcgKm5mcmFtZXMqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLndyaXRlZnJhbWVzKGRhdGEpCiAKLSAgIFdyaXRlIGF1ZGlvIGZyYW1lcyBhbmQgbWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LgorICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuIENhbiByYWlzZSBhbgorICAgZXhjZXB0aW9uIGlmIGEgZmlsZSBpcyBub3Qgc2Vla2FibGUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgogCiAKIE5vdGUgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIHNldCBhbnkgcGFyYW1ldGVycyBhZnRlciBjYWxsaW5nIDptZXRoOmB3cml0ZWZyYW1lc2AKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0IGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKaW5kZXggMjI0ZjQ0Mi4uZTg0YWMyYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKQEAgLTUxLDEwICs1MSwxNiBAQAogYnV0IGtlZXBzIHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgZWxlbWVudHMsIGp1c3QgbGlrZSBhCiA6Y2xhc3M6YFdlYWtLZXlEaWN0aW9uYXJ5YCBkb2VzLgogCi1Nb3N0IHByb2dyYW1zIHNob3VsZCBmaW5kIHRoYXQgdXNpbmcgb25lIG9mIHRoZXNlIHdlYWsgY29udGFpbmVyIHR5cGVzIGlzIGFsbAotdGhleSBuZWVkIC0tIGl0J3Mgbm90IHVzdWFsbHkgbmVjZXNzYXJ5IHRvIGNyZWF0ZSB5b3VyIG93biB3ZWFrIHJlZmVyZW5jZXMKLWRpcmVjdGx5LiAgVGhlIGxvdy1sZXZlbCBtYWNoaW5lcnkgdXNlZCBieSB0aGUgd2VhayBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9ucwotaXMgZXhwb3NlZCBieSB0aGUgOm1vZDpgd2Vha3JlZmAgbW9kdWxlIGZvciB0aGUgYmVuZWZpdCBvZiBhZHZhbmNlZCB1c2VzLgorOmNsYXNzOmBmaW5hbGl6ZWAgcHJvdmlkZXMgYSBzdHJhaWdodCBmb3J3YXJkIHdheSB0byByZWdpc3RlciBhCitjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KK1RoaXMgaXMgc2ltcGxlciB0byB1c2UgdGhhbiBzZXR0aW5nIHVwIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gYSByYXcKK3dlYWsgcmVmZXJlbmNlLCBzaW5jZSB0aGUgbW9kdWxlIGF1dG9tYXRpY2FsbHkgZW5zdXJlcyB0aGF0IHRoZSBmaW5hbGl6ZXIKK3JlbWFpbnMgYWxpdmUgdW50aWwgdGhlIG9iamVjdCBpcyBjb2xsZWN0ZWQuCisKK01vc3QgcHJvZ3JhbXMgc2hvdWxkIGZpbmQgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2Ugd2VhayBjb250YWluZXIgdHlwZXMKK29yIDpjbGFzczpgZmluYWxpemVgIGlzIGFsbCB0aGV5IG5lZWQgLS0gaXQncyBub3QgdXN1YWxseSBuZWNlc3NhcnkgdG8KK2NyZWF0ZSB5b3VyIG93biB3ZWFrIHJlZmVyZW5jZXMgZGlyZWN0bHkuICBUaGUgbG93LWxldmVsIG1hY2hpbmVyeSBpcworZXhwb3NlZCBieSB0aGUgOm1vZDpgd2Vha3JlZmAgbW9kdWxlIGZvciB0aGUgYmVuZWZpdCBvZiBhZHZhbmNlZCB1c2VzLgogCiBOb3QgYWxsIG9iamVjdHMgY2FuIGJlIHdlYWtseSByZWZlcmVuY2VkOyB0aG9zZSBvYmplY3RzIHdoaWNoIGNhbiBpbmNsdWRlIGNsYXNzCiBpbnN0YW5jZXMsIGZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbiAoYnV0IG5vdCBpbiBDKSwgaW5zdGFuY2UgbWV0aG9kcywgc2V0cywKQEAgLTExMSw2ICsxMTcsMjQgQEAKIAogICAgVGhpcyBpcyBhIHN1YmNsYXNzYWJsZSB0eXBlIHJhdGhlciB0aGFuIGEgZmFjdG9yeSBmdW5jdGlvbi4KIAorICAgLi4gYXR0cmlidXRlOjogX19jYWxsYmFja19fCisKKyAgICAgIFRoaXMgcmVhZC1vbmx5IGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBjYWxsYmFjayBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGUKKyAgICAgIHdlYWtyZWYuICBJZiB0aGVyZSBpcyBubyBjYWxsYmFjayBvciBpZiB0aGUgcmVmZXJlbnQgb2YgdGhlIHdlYWtyZWYgaXMKKyAgICAgIG5vIGxvbmdlciBhbGl2ZSB0aGVuIHRoaXMgYXR0cmlidXRlIHdpbGwgaGF2ZSB2YWx1ZSBgYE5vbmVgYC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIExpa2UgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIHdlYWsgcmVmZXJlbmNlIGNhbGxiYWNrcyBjYW4gYmUKKyAgICAgIGNhbGxlZCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gd2hlbiBtb2R1bGUgZ2xvYmFscyBoYXZlIGJlZW4KKyAgICAgIG92ZXJ3cml0dGVuIHdpdGggOmNvbnN0OmBOb25lYC4gIFRoaXMgY2FuIG1ha2Ugd3JpdGluZyByb2J1c3QKKyAgICAgIHdlYWsgcmVmZXJlbmNlIGNhbGxiYWNrcyBhIGNoYWxsZW5nZS4gIENhbGxiYWNrcyByZWdpc3RlcmVkCisgICAgICB1c2luZyA6Y2xhc3M6YGZpbmFsaXplYCBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIGlzc3VlCisgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBub3QgYmUgcnVuIGFmdGVyIG1vZHVsZSB0ZWFyZG93biBoYXMgYmVndW4uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgOmF0dHI6YF9fY2FsbGJhY2tfX2AgYXR0cmlidXRlLgorCiAKIC4uIGZ1bmN0aW9uOjogcHJveHkob2JqZWN0WywgY2FsbGJhY2tdKQogCkBAIC0xOTIsNiArMjE2LDk4IEBACiAgICBkaXNjYXJkZWQgd2hlbiBubyBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IGV4aXN0cyBhbnkgbW9yZS4KIAogCisuLiBjbGFzczo6IFdlYWtNZXRob2QobWV0aG9kKQorCisgICBBIGN1c3RvbSA6Y2xhc3M6YHJlZmAgc3ViY2xhc3Mgd2hpY2ggc2ltdWxhdGVzIGEgd2VhayByZWZlcmVuY2UgdG8gYSBib3VuZAorICAgbWV0aG9kIChpLmUuLCBhIG1ldGhvZCBkZWZpbmVkIG9uIGEgY2xhc3MgYW5kIGxvb2tlZCB1cCBvbiBhbiBpbnN0YW5jZSkuCisgICBTaW5jZSBhIGJvdW5kIG1ldGhvZCBpcyBlcGhlbWVyYWwsIGEgc3RhbmRhcmQgd2VhayByZWZlcmVuY2UgY2Fubm90IGtlZXAKKyAgIGhvbGQgb2YgaXQuICA6Y2xhc3M6YFdlYWtNZXRob2RgIGhhcyBzcGVjaWFsIGNvZGUgdG8gcmVjcmVhdGUgdGhlIGJvdW5kCisgICBtZXRob2QgdW50aWwgZWl0aGVyIHRoZSBvYmplY3Qgb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRpZXM6OgorCisgICAgICA+Pj4gY2xhc3MgQzoKKyAgICAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKToKKyAgICAgIC4uLiAgICAgICAgIHByaW50KCJtZXRob2QgY2FsbGVkISIpCisgICAgICAuLi4KKyAgICAgID4+PiBjID0gQygpCisgICAgICA+Pj4gciA9IHdlYWtyZWYucmVmKGMubWV0aG9kKQorICAgICAgPj4+IHIoKQorICAgICAgPj4+IHIgPSB3ZWFrcmVmLldlYWtNZXRob2QoYy5tZXRob2QpCisgICAgICA+Pj4gcigpCisgICAgICA8Ym91bmQgbWV0aG9kIEMubWV0aG9kIG9mIDxfX21haW5fXy5DIG9iamVjdCBhdCAweDdmYzg1OTgzMDIyMD4+CisgICAgICA+Pj4gcigpKCkKKyAgICAgIG1ldGhvZCBjYWxsZWQhCisgICAgICA+Pj4gZGVsIGMKKyAgICAgID4+PiBnYy5jb2xsZWN0KCkKKyAgICAgIDAKKyAgICAgID4+PiByKCkKKyAgICAgID4+PgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gY2xhc3M6OiBmaW5hbGl6ZShvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncykKKworICAgUmV0dXJuIGEgY2FsbGFibGUgZmluYWxpemVyIG9iamVjdCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuICpvYmoqCisgICBpcyBnYXJiYWdlIGNvbGxlY3RlZC4gVW5saWtlIGFuIG9yZGluYXJ5IHdlYWsgcmVmZXJlbmNlLCBhIGZpbmFsaXplciBpcworICAgd2lsbCBhbHdheXMgc3Vydml2ZSB1bnRpbCB0aGUgcmVmZXJlbmNlIG9iamVjdCBpcyBjb2xsZWN0ZWQsIGdyZWF0bHkKKyAgIHNpbXBsaWZ5aW5nIGxpZmVjeWNsZSBtYW5hZ2VtZW50LgorCisgICBBIGZpbmFsaXplciBpcyBjb25zaWRlcmVkICphbGl2ZSogdW50aWwgaXQgaXMgY2FsbGVkIChlaXRoZXIgZXhwbGljaXRseQorICAgb3IgYXQgZ2FyYmFnZSBjb2xsZWN0aW9uKSwgYW5kIGFmdGVyIHRoYXQgaXQgaXMgKmRlYWQqLiAgQ2FsbGluZyBhIGxpdmUKKyAgIGZpbmFsaXplciByZXR1cm5zIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBgYGZ1bmMoKmFyZywgKiprd2FyZ3MpYGAsCisgICB3aGVyZWFzIGNhbGxpbmcgYSBkZWFkIGZpbmFsaXplciByZXR1cm5zIDpjb25zdDpgTm9uZWAuCisKKyAgIEV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGZpbmFsaXplciBjYWxsYmFja3MgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgd2lsbCBiZSBzaG93biBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0LCBidXQgY2Fubm90IGJlCisgICBwcm9wYWdhdGVkLiAgVGhleSBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZXhjZXB0aW9ucyByYWlzZWQKKyAgIGZyb20gYW4gb2JqZWN0J3MgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBvciBhIHdlYWsgcmVmZXJlbmNlJ3MKKyAgIGNhbGxiYWNrLgorCisgICBXaGVuIHRoZSBwcm9ncmFtIGV4aXRzLCBlYWNoIHJlbWFpbmluZyBsaXZlIGZpbmFsaXplciBpcyBjYWxsZWQKKyAgIHVubGVzcyBpdHMgOmF0dHI6YGF0ZXhpdGAgYXR0cmlidXRlIGhhcyBiZWVuIHNldCB0byBmYWxzZS4gIFRoZXkKKyAgIGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBjcmVhdGlvbi4KKworICAgQSBmaW5hbGl6ZXIgd2lsbCBuZXZlciBpbnZva2UgaXRzIGNhbGxiYWNrIGR1cmluZyB0aGUgbGF0ZXIgcGFydCBvZgorICAgdGhlIGludGVycHJldGVyIHNodXRkb3duIHdoZW4gbW9kdWxlIGdsb2JhbHMgYXJlIGxpYWJsZSB0byBoYXZlCisgICBiZWVuIHJlcGxhY2VkIGJ5IDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IF9fY2FsbF9fKCkKKworICAgICAgSWYgKnNlbGYqIGlzIGFsaXZlIHRoZW4gbWFyayBpdCBhcyBkZWFkIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgY2FsbGluZyBgYGZ1bmMoKmFyZ3MsICoqa3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4KKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IGRldGFjaCgpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIG1hcmsgaXQgYXMgZGVhZCBhbmQgcmV0dXJuIHRoZSB0dXBsZQorICAgICAgYGAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpYGAuICBJZiAqc2VsZiogaXMgZGVhZCB0aGVuIHJldHVybgorICAgICAgOmNvbnN0OmBOb25lYC4KKworICAgLi4gbWV0aG9kOjogcGVlaygpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIHJldHVybiB0aGUgdHVwbGUgYGAob2JqLCBmdW5jLCBhcmdzLAorICAgICAga3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4gOmNvbnN0OmBOb25lYC4KKworICAgLi4gYXR0cmlidXRlOjogYWxpdmUKKworICAgICAgUHJvcGVydHkgd2hpY2ggaXMgdHJ1ZSBpZiB0aGUgZmluYWxpemVyIGlzIGFsaXZlLCBmYWxzZSBvdGhlcndpc2UuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGF0ZXhpdAorCisgICAgICBBIHdyaXRhYmxlIGJvb2xlYW4gcHJvcGVydHkgd2hpY2ggYnkgZGVmYXVsdCBpcyB0cnVlLiAgV2hlbiB0aGUKKyAgICAgIHByb2dyYW0gZXhpdHMsIGl0IGNhbGxzIGFsbCByZW1haW5pbmcgbGl2ZSBmaW5hbGl6ZXJzIGZvciB3aGljaAorICAgICAgOmF0dHI6YC5hdGV4aXRgIGlzIHRydWUuICBUaGV5IGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciBvZgorICAgICAgY3JlYXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgKmZ1bmMqLCAqYXJncyogYW5kICprd2FyZ3MqIGRvCisgICAgICBub3Qgb3duIGFueSByZWZlcmVuY2VzIHRvICpvYmoqLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKKyAgICAgIHNpbmNlIG90aGVyd2lzZSAqb2JqKiB3aWxsIG5ldmVyIGJlIGdhcmJhZ2UgY29sbGVjdGVkLiAgSW4KKyAgICAgIHBhcnRpY3VsYXIsICpmdW5jKiBzaG91bGQgbm90IGJlIGEgYm91bmQgbWV0aG9kIG9mICpvYmoqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBkYXRhOjogUmVmZXJlbmNlVHlwZQogCiAgICBUaGUgdHlwZSBvYmplY3QgZm9yIHdlYWsgcmVmZXJlbmNlcyBvYmplY3RzLgpAQCAtMjMyLDggKzM0OCw5IEBACiBXZWFrIFJlZmVyZW5jZSBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdlYWsgcmVmZXJlbmNlIG9iamVjdHMgaGF2ZSBubyBhdHRyaWJ1dGVzIG9yIG1ldGhvZHMsIGJ1dCBkbyBhbGxvdyB0aGUgcmVmZXJlbnQKLXRvIGJlIG9idGFpbmVkLCBpZiBpdCBzdGlsbCBleGlzdHMsIGJ5IGNhbGxpbmcgaXQ6CitXZWFrIHJlZmVyZW5jZSBvYmplY3RzIGhhdmUgbm8gbWV0aG9kcyBhbmQgbm8gYXR0cmlidXRlcyBiZXNpZGVzCis6YXR0cjpgcmVmLl9fY2FsbGJhY2tfX2AuIEEgd2VhayByZWZlcmVuY2Ugb2JqZWN0IGFsbG93cyB0aGUgcmVmZXJlbnQgdG8gYmUKK29idGFpbmVkLCBpZiBpdCBzdGlsbCBleGlzdHMsIGJ5IGNhbGxpbmcgaXQ6CiAKICAgID4+PiBpbXBvcnQgd2Vha3JlZgogICAgPj4+IGNsYXNzIE9iamVjdDoKQEAgLTMyNiwzICs0NDMsMTQwIEBACiAgICBkZWYgaWQyb2JqKG9pZCk6CiAgICAgICAgcmV0dXJuIF9pZDJvYmpfZGljdFtvaWRdCiAKKworLi4gX2ZpbmFsaXplLWV4YW1wbGVzOgorCitGaW5hbGl6ZXIgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1haW4gYmVuZWZpdCBvZiB1c2luZyA6Y2xhc3M6YGZpbmFsaXplYCBpcyB0aGF0IGl0IG1ha2VzIGl0IHNpbXBsZQordG8gcmVnaXN0ZXIgYSBjYWxsYmFjayB3aXRob3V0IG5lZWRpbmcgdG8gcHJlc2VydmUgdGhlIHJldHVybmVkIGZpbmFsaXplcgorb2JqZWN0LiAgRm9yIGluc3RhbmNlCisKKyAgICA+Pj4gaW1wb3J0IHdlYWtyZWYKKyAgICA+Pj4gY2xhc3MgT2JqZWN0OgorICAgIC4uLiAgICAgcGFzcworICAgIC4uLgorICAgID4+PiBrZW5ueSA9IE9iamVjdCgpCisgICAgPj4+IHdlYWtyZWYuZmluYWxpemUoa2VubnksIHByaW50LCAiWW91IGtpbGxlZCBLZW5ueSEiKSAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgPGZpbmFsaXplIG9iamVjdCBhdCAuLi47IGZvciAnT2JqZWN0JyBhdCAuLi4+CisgICAgPj4+IGRlbCBrZW5ueQorICAgIFlvdSBraWxsZWQgS2VubnkhCisKK1RoZSBmaW5hbGl6ZXIgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBhcyB3ZWxsLiAgSG93ZXZlciB0aGUgZmluYWxpemVyCit3aWxsIGludm9rZSB0aGUgY2FsbGJhY2sgYXQgbW9zdCBvbmNlLgorCisgICAgPj4+IGRlZiBjYWxsYmFjayh4LCB5LCB6KToKKyAgICAuLi4gICAgIHByaW50KCJDQUxMQkFDSyIpCisgICAgLi4uICAgICByZXR1cm4geCArIHkgKyB6CisgICAgLi4uCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IGYgPSB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgY2FsbGJhY2ssIDEsIDIsIHo9MykKKyAgICA+Pj4gYXNzZXJ0IGYuYWxpdmUKKyAgICA+Pj4gYXNzZXJ0IGYoKSA9PSA2CisgICAgQ0FMTEJBQ0sKKyAgICA+Pj4gYXNzZXJ0IG5vdCBmLmFsaXZlCisgICAgPj4+IGYoKSAgICAgICAgICAgICAgICAgICAgICMgY2FsbGJhY2sgbm90IGNhbGxlZCBiZWNhdXNlIGZpbmFsaXplciBkZWFkCisgICAgPj4+IGRlbCBvYmogICAgICAgICAgICAgICAgICMgY2FsbGJhY2sgbm90IGNhbGxlZCBiZWNhdXNlIGZpbmFsaXplciBkZWFkCisKK1lvdSBjYW4gdW5yZWdpc3RlciBhIGZpbmFsaXplciB1c2luZyBpdHMgOm1ldGg6YH5maW5hbGl6ZS5kZXRhY2hgCittZXRob2QuICBUaGlzIGtpbGxzIHRoZSBmaW5hbGl6ZXIgYW5kIHJldHVybnMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8KK3RoZSBjb25zdHJ1Y3RvciB3aGVuIGl0IHdhcyBjcmVhdGVkLgorCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IGYgPSB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgY2FsbGJhY2ssIDEsIDIsIHo9MykKKyAgICA+Pj4gZi5kZXRhY2goKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZG9jdGVzdDorRUxMSVBTSVMKKyAgICAoPF9fbWFpbl9fLk9iamVjdCBvYmplY3QgLi4uPiwgPGZ1bmN0aW9uIGNhbGxiYWNrIC4uLj4sICgxLCAyKSwgeyd6JzogM30pCisgICAgPj4+IG5ld29iaiwgZnVuYywgYXJncywga3dhcmdzID0gXworICAgID4+PiBhc3NlcnQgbm90IGYuYWxpdmUKKyAgICA+Pj4gYXNzZXJ0IG5ld29iaiBpcyBvYmoKKyAgICA+Pj4gYXNzZXJ0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSA9PSA2CisgICAgQ0FMTEJBQ0sKKworVW5sZXNzIHlvdSBzZXQgdGhlIDphdHRyOmB+ZmluYWxpemUuYXRleGl0YCBhdHRyaWJ1dGUgdG8KKzpjb25zdDpgRmFsc2VgLCBhIGZpbmFsaXplciB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBwcm9ncmFtIGV4aXRzIGlmIGl0CitpcyBzdGlsbCBhbGl2ZS4gIEZvciBpbnN0YW5jZQorCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IHdlYWtyZWYuZmluYWxpemUob2JqLCBwcmludCwgIm9iaiBkZWFkIG9yIGV4aXRpbmciKSAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgPGZpbmFsaXplIG9iamVjdCBhdCAuLi47IGZvciAnT2JqZWN0JyBhdCAuLi4+CisgICAgPj4+IGV4aXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RvY3Rlc3Q6K1NLSVAKKyAgICBvYmogZGVhZCBvciBleGl0aW5nCisKKworQ29tcGFyaW5nIGZpbmFsaXplcnMgd2l0aCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3NlIHdlIHdhbnQgdG8gY3JlYXRlIGEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIHJlcHJlc2VudCB0ZW1wb3JhcnkKK2RpcmVjdG9yaWVzLiAgVGhlIGRpcmVjdG9yaWVzIHNob3VsZCBiZSBkZWxldGVkIHdpdGggdGhlaXIgY29udGVudHMKK3doZW4gdGhlIGZpcnN0IG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzIG9jY3VyczoKKworKiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLAorKiB0aGUgb2JqZWN0J3MgOm1ldGg6YHJlbW92ZWAgbWV0aG9kIGlzIGNhbGxlZCwgb3IKKyogdGhlIHByb2dyYW0gZXhpdHMuCisKK1dlIG1pZ2h0IHRyeSB0byBpbXBsZW1lbnQgdGhlIGNsYXNzIHVzaW5nIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBhcworZm9sbG93czo6CisKKyAgICBjbGFzcyBUZW1wRGlyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICBkZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIHJlbW92ZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lIGlzIE5vbmUKKworICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKCkKKworU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBubyBsb25nZXIgcHJldmVudAorcmVmZXJlbmNlIGN5Y2xlcyBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgbW9kdWxlIGdsb2JhbHMgYXJlCitubyBsb25nZXIgZm9yY2VkIHRvIDpjb25zdDpgTm9uZWAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duLiBTbyB0aGlzCitjb2RlIHNob3VsZCB3b3JrIHdpdGhvdXQgYW55IGlzc3VlcyBvbiBDUHl0aG9uLgorCitIb3dldmVyLCBoYW5kbGluZyBvZiA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpcyBub3RvcmlvdXNseSBpbXBsZW1lbnRhdGlvbgorc3BlY2lmaWMsIHNpbmNlIGl0IGRlcGVuZHMgb24gaW50ZXJuYWwgZGV0YWlscyBvZiB0aGUgaW50ZXJwcmV0ZXIncyBnYXJiYWdlCitjb2xsZWN0b3IgaW1wbGVtZW50YXRpb24uCisKK0EgbW9yZSByb2J1c3QgYWx0ZXJuYXRpdmUgY2FuIGJlIHRvIGRlZmluZSBhIGZpbmFsaXplciB3aGljaCBvbmx5IHJlZmVyZW5jZXMKK3RoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIG9iamVjdHMgdGhhdCBpdCBuZWVkcywgcmF0aGVyIHRoYW4gaGF2aW5nIGFjY2VzcwordG8gdGhlIGZ1bGwgc3RhdGUgb2YgdGhlIG9iamVjdDo6CisKKyAgICBjbGFzcyBUZW1wRGlyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplciA9IHdlYWtyZWYuZmluYWxpemUoc2VsZiwgc2h1dGlsLnJtdHJlZSwgc2VsZi5uYW1lKQorCisgICAgICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZXIoKQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgcmVtb3ZlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZmluYWxpemVyLmFsaXZlCisKK0RlZmluZWQgbGlrZSB0aGlzLCBvdXIgZmluYWxpemVyIG9ubHkgcmVjZWl2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRldGFpbHMKK2l0IG5lZWRzIHRvIGNsZWFuIHVwIHRoZSBkaXJlY3RvcnkgYXBwcm9wcmlhdGVseS4gSWYgdGhlIG9iamVjdCBuZXZlciBnZXRzCitnYXJiYWdlIGNvbGxlY3RlZCB0aGUgZmluYWxpemVyIHdpbGwgc3RpbGwgYmUgY2FsbGVkIGF0IGV4aXQuCisKK1RoZSBvdGhlciBhZHZhbnRhZ2Ugb2Ygd2Vha3JlZiBiYXNlZCBmaW5hbGl6ZXJzIGlzIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB0bworcmVnaXN0ZXIgZmluYWxpemVycyBmb3IgY2xhc3NlcyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBjb250cm9sbGVkIGJ5IGEKK3RoaXJkIHBhcnR5LCBzdWNoIGFzIHJ1bm5pbmcgY29kZSB3aGVuIGEgbW9kdWxlIGlzIHVubG9hZGVkOjoKKworICAgIGltcG9ydCB3ZWFrcmVmLCBzeXMKKyAgICBkZWYgdW5sb2FkaW5nX21vZHVsZSgpOgorICAgICAgICAjIGltcGxpY2l0IHJlZmVyZW5jZSB0byB0aGUgbW9kdWxlIGdsb2JhbHMgZnJvbSB0aGUgZnVuY3Rpb24gYm9keQorICAgIHdlYWtyZWYuZmluYWxpemUoc3lzLm1vZHVsZXNbX19uYW1lX19dLCB1bmxvYWRpbmdfbW9kdWxlKQorCisKKy4uIG5vdGU6OgorCisgICBJZiB5b3UgY3JlYXRlIGEgZmluYWxpemVyIG9iamVjdCBpbiBhIGRhZW1vbmljIHRocmVhZCBqdXN0IGFzIHRoZQorICAgdGhlIHByb2dyYW0gZXhpdHMgdGhlbiB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgZmluYWxpemVyCisgICBkb2VzIG5vdCBnZXQgY2FsbGVkIGF0IGV4aXQuICBIb3dldmVyLCBpbiBhIGRhZW1vbmljIHRocmVhZAorICAgOmZ1bmM6YGF0ZXhpdC5yZWdpc3RlcmAsIGBgdHJ5OiAuLi4gZmluYWxseTogLi4uYGAgYW5kIGBgd2l0aDogLi4uYGAKKyAgIGRvIG5vdCBndWFyYW50ZWUgdGhhdCBjbGVhbnVwIG9jY3VycyBlaXRoZXIuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0IGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAppbmRleCBjZjY1MjE5Li40Yzg5ZGMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKQEAgLTEwNSw2ICsxMDUsNDMgQEAKICAgID4+PiByb290WzBdWzFdLnRleHQKICAgICcyMDA4JwogCitQdWxsIEFQSSBmb3Igbm9uLWJsb2NraW5nIHBhcnNpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitNb3N0IHBhcnNpbmcgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlIHJlcXVpcmUgdG8gcmVhZCB0aGUgd2hvbGUKK2RvY3VtZW50IGF0IG9uY2UgYmVmb3JlIHJldHVybmluZyBhbnkgcmVzdWx0LiAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGEKKzpjbGFzczpgWE1MUGFyc2VyYCBhbmQgZmVlZCBkYXRhIGludG8gaXQgaW5jcmVtZW50YWxseSwgYnV0IGl0J3MgYSBwdXNoIEFQSSB0aGF0CitjYWxscyBtZXRob2RzIG9uIGEgY2FsbGJhY2sgdGFyZ2V0LCB3aGljaCBpcyB0b28gbG93LWxldmVsIGFuZCBpbmNvbnZlbmllbnQgZm9yCittb3N0IG5lZWRzLiAgU29tZXRpbWVzIHdoYXQgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIGlzIHRvIGJlIGFibGUgdG8gcGFyc2UgWE1MCitpbmNyZW1lbnRhbGx5LCB3aXRob3V0IGJsb2NraW5nIG9wZXJhdGlvbnMsIHdoaWxlIGVuam95aW5nIHRoZSBjb252ZW5pZW5jZSBvZgorZnVsbHkgY29uc3RydWN0ZWQgOmNsYXNzOmBFbGVtZW50YCBvYmplY3RzLgorCitUaGUgbW9zdCBwb3dlcmZ1bCB0b29sIGZvciBkb2luZyB0aGlzIGlzIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAuICBJdCBkb2VzIG5vdAorcmVxdWlyZSBhIGJsb2NraW5nIHJlYWQgdG8gb2J0YWluIHRoZSBYTUwgZGF0YSwgYW5kIGlzIGluc3RlYWQgZmVkIHdpdGggZGF0YQoraW5jcmVtZW50YWxseSB3aXRoIDptZXRoOmBYTUxQdWxsUGFyc2VyLmZlZWRgIGNhbGxzLiAgVG8gZ2V0IHRoZSBwYXJzZWQgWE1MCitlbGVtZW50cywgY2FsbCA6bWV0aDpgWE1MUHVsbFBhcnNlci5yZWFkX2V2ZW50c2AuICBIZXJlJ3MgYW4gZXhhbXBsZTo6CisKKyAgID4+PiBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKFsnc3RhcnQnLCAnZW5kJ10pCisgICA+Pj4gcGFyc2VyLmZlZWQoJzxteXRhZz5zb21ldGV4dCcpCisgICA+Pj4gbGlzdChwYXJzZXIucmVhZF9ldmVudHMoKSkKKyAgIFsoJ3N0YXJ0JywgPEVsZW1lbnQgJ215dGFnJyBhdCAweDdmYTY2ZGIyYmU1OD4pXQorICAgPj4+IHBhcnNlci5mZWVkKCcgbW9yZSB0ZXh0PC9teXRhZz4nKQorICAgPj4+IGZvciBldmVudCwgZWxlbSBpbiBwYXJzZXIucmVhZF9ldmVudHMoKToKKyAgIC4uLiAgIHByaW50KGV2ZW50KQorICAgLi4uICAgcHJpbnQoZWxlbS50YWcsICd0ZXh0PScsIGVsZW0udGV4dCkKKyAgIC4uLgorICAgZW5kCisKK1RoZSBvYnZpb3VzIHVzZSBjYXNlIGlzIGFwcGxpY2F0aW9ucyB0aGF0IG9wZXJhdGUgaW4gYSBub24tYmxvY2tpbmcgZmFzaGlvbgord2hlcmUgdGhlIFhNTCBkYXRhIGlzIGJlaW5nIHJlY2VpdmVkIGZyb20gYSBzb2NrZXQgb3IgcmVhZCBpbmNyZW1lbnRhbGx5IGZyb20KK3NvbWUgc3RvcmFnZSBkZXZpY2UuICBJbiBzdWNoIGNhc2VzLCBibG9ja2luZyByZWFkcyBhcmUgdW5hY2NlcHRhYmxlLgorCitCZWNhdXNlIGl0J3Mgc28gZmxleGlibGUsIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgY2FuIGJlIGluY29udmVuaWVudCB0byB1c2UgZm9yCitzaW1wbGVyIHVzZS1jYXNlcy4gIElmIHlvdSBkb24ndCBtaW5kIHlvdXIgYXBwbGljYXRpb24gYmxvY2tpbmcgb24gcmVhZGluZyBYTUwKK2RhdGEgYnV0IHdvdWxkIHN0aWxsIGxpa2UgdG8gaGF2ZSBpbmNyZW1lbnRhbCBwYXJzaW5nIGNhcGFiaWxpdGllcywgdGFrZSBhIGxvb2sKK2F0IDpmdW5jOmBpdGVycGFyc2VgLiAgSXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSdyZSByZWFkaW5nIGEgbGFyZ2UgWE1MIGRvY3VtZW50CithbmQgZG9uJ3Qgd2FudCB0byBob2xkIGl0IHdob2xseSBpbiBtZW1vcnkuCisKIEZpbmRpbmcgaW50ZXJlc3RpbmcgZWxlbWVudHMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzc5LDI1ICs0MTYsMzIgQEAKIAogICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzIHdoYXQncwogICAgZ29pbmcgb24gdG8gdGhlIHVzZXIuICAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIDp0ZXJtOmBmaWxlIG9iamVjdGAKLSAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqZXZlbnRzKiBpcyBhIHR1cGxlIG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIFRoZQotICAgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwgYGAic3RhcnQtbnMiYGAKLSAgIGFuZCBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCisgICBjb250YWluaW5nIFhNTCBkYXRhLiAgKmV2ZW50cyogaXMgYSBzZXF1ZW5jZSBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBUaGUKKyAgIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsIGBgInN0YXJ0LW5zImBgIGFuZAorICAgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQogICAgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seSBgYCJlbmQiYGAgZXZlbnRzIGFyZSByZXBvcnRlZC4KICAgICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCi0gICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBjYW4gb25seSB1c2UgdGhlIGRlZmF1bHQKLSAgIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEgdGFyZ2V0LiAgUmV0dXJucyBhbiA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZwotICAgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisgICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YKKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBhbmQgY2FuIG9ubHkgdXNlIHRoZSBkZWZhdWx0IDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEKKyAgIHRhcmdldC4gIFJldHVybnMgYW4gOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisKKyAgIE5vdGUgdGhhdCB3aGlsZSA6ZnVuYzpgaXRlcnBhcnNlYCBidWlsZHMgdGhlIHRyZWUgaW5jcmVtZW50YWxseSwgaXQgaXNzdWVzCisgICBibG9ja2luZyByZWFkcyBvbiAqc291cmNlKiAob3IgdGhlIGZpbGUgaXQgbmFtZXMpLiAgQXMgc3VjaCwgaXQncyB1bnN1aXRhYmxlCisgICBmb3IgYXBwbGljYXRpb25zIHdoZXJlIGJsb2NraW5nIHJlYWRzIGNhbid0IGJlIG1hZGUuICBGb3IgZnVsbHkgbm9uLWJsb2NraW5nCisgICBwYXJzaW5nLCBzZWUgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBpdGVycGFyc2VgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIKLSAgICAgIGNoYXJhY3RlciBvZiBhIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlCi0gICAgICBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLCBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMKLSAgICAgIGFyZSB1bmRlZmluZWQgYXQgdGhhdCBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47Ci0gICAgICB0aGV5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuCisgICAgICA6ZnVuYzpgaXRlcnBhcnNlYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iIGNoYXJhY3RlciBvZiBhCisgICAgICBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLAorICAgICAgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIGFyZSB1bmRlZmluZWQgYXQgdGhhdAorICAgICAgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOyB0aGV5IG1heSBvciBtYXkgbm90IGJlCisgICAgICBwcmVzZW50LgogCiAgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlICpwYXJzZXIqIGFyZ3VtZW50LgogCiAuLiBmdW5jdGlvbjo6IHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpCiAKQEAgLTQzOCwyOSArNDgyLDM5IEBACiAgICBhcmd1bWVudHMuICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCiAKLS4uIGZ1bmN0aW9uOjogdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKKworLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGEgbGlzdCBvZiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogICAgSXQgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBzcGVjaWZpYyBzZXF1ZW5jZSwgZXhjZXB0IHRoYXQKICAgIGBgIiIuam9pbih0b3N0cmluZ2xpc3QoZWxlbWVudCkpID09IHRvc3RyaW5nKGVsZW1lbnQpYGAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IFhNTCh0ZXh0LCBwYXJzZXI9Tm9uZSkKIApAQCAtNzUzLDcgKzgwNyw4IEBACiAKIAogICAgLi4gbWV0aG9kOjogd3JpdGUoZmlsZSwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgeG1sX2RlY2xhcmF0aW9uPU5vbmUsIFwKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsIG1ldGhvZD0ieG1sIikKKyAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKIAogICAgICAgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuICAqZmlsZSogaXMgYSBmaWxlIG5hbWUsIG9yIGEKICAgICAgIDp0ZXJtOmBmaWxlIG9iamVjdGAgb3BlbmVkIGZvciB3cml0aW5nLiAgKmVuY29kaW5nKiBbMV1fIGlzIHRoZSBvdXRwdXQKQEAgLTc2NCw2ICs4MTksMTAgQEAKICAgICAgICpkZWZhdWx0X25hbWVzcGFjZSogc2V0cyB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIChmb3IgInhtbG5zIikuCiAgICAgICAqbWV0aG9kKiBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMKICAgICAgIGBgInhtbCJgYCkuCisgICAgICBUaGUga2V5d29yZC1vbmx5ICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBmb3JtYXR0aW5nCisgICAgICBvZiBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbm8gY29udGVudC4gIElmICpUcnVlKiAodGhlIGRlZmF1bHQpLCB0aGV5IGFyZQorICAgICAgZW1pdHRlZCBhcyBhIHNpbmdsZSBzZWxmLWNsb3NlZCB0YWcsIG90aGVyd2lzZSB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgcGFpcgorICAgICAgb2Ygc3RhcnQvZW5kIHRhZ3MuCiAKICAgICAgIFRoZSBvdXRwdXQgaXMgZWl0aGVyIGEgc3RyaW5nICg6Y2xhc3M6YHN0cmApIG9yIGJpbmFyeSAoOmNsYXNzOmBieXRlc2ApLgogICAgICAgVGhpcyBpcyBjb250cm9sbGVkIGJ5IHRoZSAqZW5jb2RpbmcqIGFyZ3VtZW50LiAgSWYgKmVuY29kaW5nKiBpcwpAQCAtNzcyLDYgKzgzMSw5IEBACiAgICAgICA6dGVybTpgZmlsZSBvYmplY3RgOyBtYWtlIHN1cmUgeW91IGRvIG5vdCB0cnkgdG8gd3JpdGUgYSBzdHJpbmcgdG8gYQogICAgICAgYmluYXJ5IHN0cmVhbSBhbmQgdmljZSB2ZXJzYS4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCisKIAogVGhpcyBpcyB0aGUgWE1MIGZpbGUgdGhhdCBpcyBnb2luZyB0byBiZSBtYW5pcHVsYXRlZDo6CiAKQEAgLTgxNyw2ICs4NzksNyBAQAogICAgOmNsYXNzOmBRTmFtZWAgaW5zdGFuY2VzIGFyZSBvcGFxdWUuCiAKIAorCiAuLiBfZWxlbWVudHRyZWUtdHJlZWJ1aWxkZXItb2JqZWN0czoKIAogVHJlZUJ1aWxkZXIgT2JqZWN0cwpAQCAtODc2LDEzICs5MzksMTcgQEAKIAogLi4gY2xhc3M6OiBYTUxQYXJzZXIoaHRtbD0wLCB0YXJnZXQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSkKIAotICAgOmNsYXNzOmBFbGVtZW50YCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhLCBiYXNlZCBvbiB0aGUgZXhwYXQKLSAgIHBhcnNlci4gICpodG1sKiBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkKLSAgIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgKnRhcmdldCogaXMgdGhlIHRhcmdldCBvYmplY3QuICBJZiBvbWl0dGVkLCB0aGUKLSAgIGJ1aWxkZXIgdXNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgY2xhc3MuCi0gICAqZW5jb2RpbmcqIFsxXV8gaXMgb3B0aW9uYWwuICBJZiBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcKKyAgIFRoaXMgY2xhc3MgaXMgdGhlIGxvdy1sZXZlbCBidWlsZGluZyBibG9jayBvZiB0aGUgbW9kdWxlLiAgSXQgdXNlcworICAgOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIGZvciBlZmZpY2llbnQsIGV2ZW50LWJhc2VkIHBhcnNpbmcgb2YgWE1MLiAgSXQgY2FuCisgICBiZSBmZWQgWE1MIGRhdGEgaW5jcmVtZW50YWxsIHdpdGggdGhlIDptZXRoOmBmZWVkYCBtZXRob2QsIGFuZCBwYXJzaW5nIGV2ZW50cworICAgYXJlIHRyYW5zbGF0ZWQgdG8gYSBwdXNoIEFQSSAtIGJ5IGludm9raW5nIGNhbGxiYWNrcyBvbiB0aGUgKnRhcmdldCogb2JqZWN0LgorICAgSWYgKnRhcmdldCogaXMgb21pdHRlZCwgdGhlIHN0YW5kYXJkIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGlzIHVzZWQuICBUaGUKKyAgICpodG1sKiBhcmd1bWVudCB3YXMgaGlzdG9yaWNhbGx5IHVzZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBpcyBub3cKKyAgIGRlcHJlY2F0ZWQuICBJZiAqZW5jb2RpbmcqIFsxXV8gaXMgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMgdGhlIGVuY29kaW5nCiAgICBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBUaGUgKmh0bWwqIGFyZ3VtZW50LgogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCiAKQEAgLTkwMiwxMiArOTY5LDEyIEBACiAKICAgICAgIEZlZWRzIGRhdGEgdG8gdGhlIHBhcnNlci4gICpkYXRhKiBpcyBlbmNvZGVkIGRhdGEuCiAKLSAgIDptZXRoOmBYTUxQYXJzZXIuZmVlZGAgY2FsbHMgKnRhcmdldCpcJ3MgYGBzdGFydCgpYGAgbWV0aG9kCi0gICBmb3IgZWFjaCBvcGVuaW5nIHRhZywgaXRzIGBgZW5kKClgYCBtZXRob2QgZm9yIGVhY2ggY2xvc2luZyB0YWcsCi0gICBhbmQgZGF0YSBpcyBwcm9jZXNzZWQgYnkgbWV0aG9kIGBgZGF0YSgpYGAuICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYAotICAgY2FsbHMgKnRhcmdldCpcJ3MgbWV0aG9kIGBgY2xvc2UoKWBgLgotICAgOmNsYXNzOmBYTUxQYXJzZXJgIGNhbiBiZSB1c2VkIG5vdCBvbmx5IGZvciBidWlsZGluZyBhIHRyZWUgc3RydWN0dXJlLgotICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGNvdW50aW5nIHRoZSBtYXhpbXVtIGRlcHRoIG9mIGFuIFhNTCBmaWxlOjoKKyAgIDptZXRoOmBYTUxQYXJzZXIuZmVlZGAgY2FsbHMgKnRhcmdldCpcJ3MgYGBzdGFydCh0YWcsIGF0dHJzX2RpY3QpYGAgbWV0aG9kCisgICBmb3IgZWFjaCBvcGVuaW5nIHRhZywgaXRzIGBgZW5kKHRhZylgYCBtZXRob2QgZm9yIGVhY2ggY2xvc2luZyB0YWcsIGFuZCBkYXRhCisgICBpcyBwcm9jZXNzZWQgYnkgbWV0aG9kIGBgZGF0YShkYXRhKWBgLiAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAgY2FsbHMKKyAgICp0YXJnZXQqXCdzIG1ldGhvZCBgYGNsb3NlKClgYC4gOmNsYXNzOmBYTUxQYXJzZXJgIGNhbiBiZSB1c2VkIG5vdCBvbmx5IGZvcgorICAgYnVpbGRpbmcgYSB0cmVlIHN0cnVjdHVyZS4gVGhpcyBpcyBhbiBleGFtcGxlIG9mIGNvdW50aW5nIHRoZSBtYXhpbXVtIGRlcHRoCisgICBvZiBhbiBYTUwgZmlsZTo6CiAKICAgICA+Pj4gZnJvbSB4bWwuZXRyZWUuRWxlbWVudFRyZWUgaW1wb3J0IFhNTFBhcnNlcgogICAgID4+PiBjbGFzcyBNYXhEZXB0aDogICAgICAgICAgICAgICAgICAgICAjIFRoZSB0YXJnZXQgb2JqZWN0IG9mIHRoZSBwYXJzZXIKQEAgLTk0MSw2ICsxMDA4LDU4IEBACiAgICAgPj4+IHBhcnNlci5jbG9zZSgpCiAgICAgNAogCisKKy4uIF9lbGVtZW50dHJlZS14bWxwdWxscGFyc2VyLW9iamVjdHM6CisKK1hNTFB1bGxQYXJzZXIgT2JqZWN0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogWE1MUHVsbFBhcnNlcihldmVudHM9Tm9uZSkKKworICAgQSBwdWxsIHBhcnNlciBzdWl0YWJsZSBmb3Igbm9uLWJsb2NraW5nIGFwcGxpY2F0aW9ucy4gIEl0cyBpbnB1dC1zaWRlIEFQSSBpcworICAgc2ltaWxhciB0byB0aGF0IG9mIDpjbGFzczpgWE1MUGFyc2VyYCwgYnV0IGluc3RlYWQgb2YgcHVzaGluZyBjYWxscyB0byBhCisgICBjYWxsYmFjayB0YXJnZXQsIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgY29sbGVjdHMgYW4gaW50ZXJuYWwgbGlzdCBvZiBwYXJzaW5nCisgICBldmVudHMgYW5kIGxldHMgdGhlIHVzZXIgcmVhZCBmcm9tIGl0LiAqZXZlbnRzKiBpcyBhIHNlcXVlbmNlIG9mIGV2ZW50cyB0bworICAgcmVwb3J0IGJhY2suICBUaGUgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwKKyAgIGBgInN0YXJ0LW5zImBgIGFuZCBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQKKyAgIG5hbWVzcGFjZSBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5IGBgImVuZCJgYCBldmVudHMgYXJlCisgICByZXBvcnRlZC4KKworICAgLi4gbWV0aG9kOjogZmVlZChkYXRhKQorCisgICAgICBGZWVkIHRoZSBnaXZlbiBieXRlcyBkYXRhIHRvIHRoZSBwYXJzZXIuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgU2lnbmFsIHRoZSBwYXJzZXIgdGhhdCB0aGUgZGF0YSBzdHJlYW0gaXMgdGVybWluYXRlZC4gVW5saWtlCisgICAgICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYCwgdGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgOmNvbnN0OmBOb25lYC4KKyAgICAgIEFueSBldmVudHMgbm90IHlldCByZXRyaWV2ZWQgd2hlbiB0aGUgcGFyc2VyIGlzIGNsb3NlZCBjYW4gc3RpbGwgYmUKKyAgICAgIHJlYWQgd2l0aCA6bWV0aDpgcmVhZF9ldmVudHNgLgorCisgICAuLiBtZXRob2Q6OiByZWFkX2V2ZW50cygpCisKKyAgICAgIEl0ZXJhdGUgb3ZlciB0aGUgZXZlbnRzIHdoaWNoIGhhdmUgYmVlbiBlbmNvdW50ZXJlZCBpbiB0aGUgZGF0YSBmZWQgdG8gdGhlCisgICAgICBwYXJzZXIuICBUaGlzIG1ldGhvZCB5aWVsZHMgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMsIHdoZXJlICpldmVudCogaXMgYQorICAgICAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiBldmVudCAoZS5nLiBgYCJlbmQiYGApIGFuZCAqZWxlbSogaXMgdGhlCisgICAgICBlbmNvdW50ZXJlZCA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdC4KKworICAgICAgRXZlbnRzIHByb3ZpZGVkIGluIGEgcHJldmlvdXMgY2FsbCB0byA6bWV0aDpgcmVhZF9ldmVudHNgIHdpbGwgbm90IGJlCisgICAgICB5aWVsZGVkIGFnYWluLiBBcyBldmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIHF1ZXVlIG9ubHkgYXMKKyAgICAgIHRoZXkgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvciwgbXVsdGlwbGUgcmVhZGVycyBjYWxsaW5nCisgICAgICA6bWV0aDpgcmVhZF9ldmVudHNgIGluIHBhcmFsbGVsIHdpbGwgaGF2ZSB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIKKyAgICAgIGNoYXJhY3RlciBvZiBhIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlCisgICAgICBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLCBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMKKyAgICAgIGFyZSB1bmRlZmluZWQgYXQgdGhhdCBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47CisgICAgICB0aGV5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuCisKKyAgICAgIElmIHlvdSBuZWVkIGEgZnVsbHkgcG9wdWxhdGVkIGVsZW1lbnQsIGxvb2sgZm9yICJlbmQiIGV2ZW50cyBpbnN0ZWFkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRXhjZXB0aW9ucwogXl5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CmluZGV4IDdhNjQ4MmIuLjE5NjY3MTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CkBAIC0xMzAsNyArMTMwLDcgQEAKIC0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogWmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSkKKy4uIGNsYXNzOjogWmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKQogCiAgICBPcGVuIGEgWklQIGZpbGUsIHdoZXJlICpmaWxlKiBjYW4gYmUgZWl0aGVyIGEgcGF0aCB0byBhIGZpbGUgKGEgc3RyaW5nKSBvciBhCiAgICBmaWxlLWxpa2Ugb2JqZWN0LiAgVGhlICptb2RlKiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGBgJ3InYGAgdG8gcmVhZCBhbiBleGlzdGluZwpAQCAtMTQ0LDE1ICsxNDQsMTIgQEAKICAgIGFuZCBzaG91bGQgYmUgOmNvbnN0OmBaSVBfU1RPUkVEYCwgOmNvbnN0OmBaSVBfREVGTEFURURgLAogICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgOyB1bnJlY29nbml6ZWQKICAgIHZhbHVlcyB3aWxsIGNhdXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAgdG8gYmUgcmFpc2VkLiAgSWYgOmNvbnN0OmBaSVBfREVGTEFURURgLAotICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgIGlzIHNwZWNpZmllZCBidXQgdGhlIGNvcnJlc3BvbmRlZCBtb2R1bGUKKyAgIDpjb25zdDpgWklQX0JaSVAyYCBvciA6Y29uc3Q6YFpJUF9MWk1BYCBpcyBzcGVjaWZpZWQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZQogICAgKDptb2Q6YHpsaWJgLCA6bW9kOmBiejJgIG9yIDptb2Q6YGx6bWFgKSBpcyBub3QgYXZhaWxhYmxlLCA6ZXhjOmBSdW50aW1lRXJyb3JgCiAgICBpcyBhbHNvIHJhaXNlZC4gVGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBaSVBfU1RPUkVEYC4gIElmICphbGxvd1ppcDY0KiBpcwotICAgYGBUcnVlYGAgemlwZmlsZSB3aWxsIGNyZWF0ZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0IGV4dGVuc2lvbnMgd2hlbgotICAgdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHaUIuIElmIGl0IGlzICBmYWxzZSAodGhlIGRlZmF1bHQpIDptb2Q6YHppcGZpbGVgCisgICBgYFRydWVgYCAodGhlIGRlZmF1bHQpIHppcGZpbGUgd2lsbCBjcmVhdGUgWklQIGZpbGVzIHRoYXQgdXNlIHRoZSBaSVA2NAorICAgZXh0ZW5zaW9ucyB3aGVuIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR2lCLiBJZiBpdCBpcyAgZmFsc2UgOm1vZDpgemlwZmlsZWAKICAgIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIFpJUCBmaWxlIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucy4KLSAgIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSB0aGUgZGVmYXVsdCA6cHJvZ3JhbTpgemlwYAotICAgYW5kIDpwcm9ncmFtOmB1bnppcGAgY29tbWFuZHMgb24gVW5peCAodGhlIEluZm9aSVAgdXRpbGl0aWVzKSBkb24ndCBzdXBwb3J0Ci0gICB0aGVzZSBleHRlbnNpb25zLgogCiAgICBJZiB0aGUgZmlsZSBpcyBjcmVhdGVkIHdpdGggbW9kZSBgYCdhJ2BgIG9yIGBgJ3cnYGAgYW5kIHRoZW4KICAgIDptZXRoOmBjbG9zZWQgPGNsb3NlPmAgd2l0aG91dCBhZGRpbmcgYW55IGZpbGVzIHRvIHRoZSBhcmNoaXZlLCB0aGUgYXBwcm9wcmlhdGUKQEAgLTE3MSw2ICsxNjgsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIDptb2Q6YGJ6aXAyIDxiejI+YCBhbmQgOm1vZDpgbHptYWAgY29tcHJlc3Npb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBaSVA2NCBleHRlbnNpb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisKIAogLi4gbWV0aG9kOjogWmlwRmlsZS5jbG9zZSgpCiAKQEAgLTIzNCw2ICsyMzQsOSBAQAogICAgICAgb3IgYSA6Y2xhc3M6YFppcEluZm9gIG9iamVjdC4gIFlvdSB3aWxsIGFwcHJlY2lhdGUgdGhpcyB3aGVuIHRyeWluZyB0byByZWFkIGEKICAgICAgIFpJUCBmaWxlIHRoYXQgY29udGFpbnMgbWVtYmVycyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4KIAorICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy40IDMuNgorICAgICAgVGhlIGBgJ1UnYGAgb3IgIGBgJ3JVJ2BgIG1vZGUuICBVc2UgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBmb3IgcmVhZGluZworICAgICAgY29tcHJlc3NlZCB0ZXh0IGZpbGVzIGluIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIG1vZGUuCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUuZXh0cmFjdChtZW1iZXIsIHBhdGg9Tm9uZSwgcHdkPU5vbmUpCiAKQEAgLTI2NiwxMCArMjY5LDggQEAKICAgICAgIE5ldmVyIGV4dHJhY3QgYXJjaGl2ZXMgZnJvbSB1bnRydXN0ZWQgc291cmNlcyB3aXRob3V0IHByaW9yIGluc3BlY3Rpb24uCiAgICAgICBJdCBpcyBwb3NzaWJsZSB0aGF0IGZpbGVzIGFyZSBjcmVhdGVkIG91dHNpZGUgb2YgKnBhdGgqLCBlLmcuIG1lbWJlcnMKICAgICAgIHRoYXQgaGF2ZSBhYnNvbHV0ZSBmaWxlbmFtZXMgc3RhcnRpbmcgd2l0aCBgYCIvImBgIG9yIGZpbGVuYW1lcyB3aXRoIHR3bwotICAgICAgZG90cyBgYCIuLiJgYC4KLQotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuMQotICAgICAgVGhlIHppcGZpbGUgbW9kdWxlIGF0dGVtcHRzIHRvIHByZXZlbnQgdGhhdC4gIFNlZSA6bWV0aDpgZXh0cmFjdGAgbm90ZS4KKyAgICAgIGRvdHMgYGAiLi4iYGAuICBUaGlzIG1vZHVsZSBhdHRlbXB0cyB0byBwcmV2ZW50IHRoYXQuCisgICAgICBTZWUgOm1ldGg6YGV4dHJhY3RgIG5vdGUuCiAKIAogLi4gbWV0aG9kOjogWmlwRmlsZS5wcmludGRpcigpCkBAIC0zNzYsMTUgKzM3NywxOCBAQAogVGhlIDpjbGFzczpgUHlaaXBGaWxlYCBjb25zdHJ1Y3RvciB0YWtlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZQogOmNsYXNzOmBaaXBGaWxlYCBjb25zdHJ1Y3RvciwgYW5kIG9uZSBhZGRpdGlvbmFsIHBhcmFtZXRlciwgKm9wdGltaXplKi4KIAotLi4gY2xhc3M6OiBQeVppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9RmFsc2UsIFwKKy4uIGNsYXNzOjogUHlaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUsIFwKICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplPS0xKQogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKICAgICAgIFRoZSAqb3B0aW1pemUqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKwogICAgSW5zdGFuY2VzIGhhdmUgb25lIG1ldGhvZCBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZiA6Y2xhc3M6YFppcEZpbGVgIG9iamVjdHM6CiAKLSAgIC4uIG1ldGhvZDo6IFB5WmlwRmlsZS53cml0ZXB5KHBhdGhuYW1lLCBiYXNlbmFtZT0nJykKKyAgIC4uIG1ldGhvZDo6IFB5WmlwRmlsZS53cml0ZXB5KHBhdGhuYW1lLCBiYXNlbmFtZT0nJywgZmlsdGVyZnVuYz1Ob25lKQogCiAgICAgICBTZWFyY2ggZm9yIGZpbGVzIDpmaWxlOmBcKi5weWAgYW5kIGFkZCB0aGUgY29ycmVzcG9uZGluZyBmaWxlIHRvIHRoZQogICAgICAgYXJjaGl2ZS4KQEAgLTQwNiw3ICs0MTAsMTAgQEAKICAgICAgIHBhY2thZ2UgZGlyZWN0b3J5LCB0aGVuIGFsbCA6ZmlsZTpgXCoucHlbY29dYCBhcmUgYWRkZWQgdW5kZXIgdGhlIHBhY2thZ2UKICAgICAgIG5hbWUgYXMgYSBmaWxlIHBhdGgsIGFuZCBpZiBhbnkgc3ViZGlyZWN0b3JpZXMgYXJlIHBhY2thZ2UgZGlyZWN0b3JpZXMsCiAgICAgICBhbGwgb2YgdGhlc2UgYXJlIGFkZGVkIHJlY3Vyc2l2ZWx5LiAgKmJhc2VuYW1lKiBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwKLSAgICAgIHVzZSBvbmx5LiAgVGhlIDptZXRoOmB3cml0ZXB5YCBtZXRob2QgbWFrZXMgYXJjaGl2ZXMgd2l0aCBmaWxlIG5hbWVzIGxpa2UKKyAgICAgIHVzZSBvbmx5LiAgV2hlbiAqZmlsdGVyZnVuYyhwYXRobmFtZSkqIGlzIGdpdmVuLCBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZXZlcnkKKyAgICAgIGludm9jYXRpb24uIFdoZW4gaXQgcmV0dXJucyBhIEZhbHNlIHZhbHVlLCB0aGF0IHBhdGggYW5kIGl0cyBzdWJwYXRocyB3aWxsCisgICAgICBiZSBpZ25vcmVkLgorICAgICAgVGhlIDptZXRoOmB3cml0ZXB5YCBtZXRob2QgbWFrZXMgYXJjaGl2ZXMgd2l0aCBmaWxlIG5hbWVzIGxpa2UKICAgICAgIHRoaXM6OgogCiAgICAgICAgICBzdHJpbmcucHljICAgICAgICAgICAgICAgICAgICMgVG9wIGxldmVsIG5hbWUKQEAgLTQxNSw2ICs0MjIsOSBAQAogICAgICAgICAgdGVzdC9ib2d1cy9fX2luaXRfXy5weWMgICAgICAjIFN1YnBhY2thZ2UgZGlyZWN0b3J5CiAgICAgICAgICB0ZXN0L2JvZ3VzL215ZmlsZS5weWMgICAgICAgICMgU3VibW9kdWxlIHRlc3QuYm9ndXMubXlmaWxlCiAKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgICAgVGhlICpmaWx0ZXJmdW5jKiBwYXJhbWV0ZXIuCisKIAogLi4gX3ppcGluZm8tb2JqZWN0czoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpY2Vuc2UucnN0IGIvRG9jL2xpY2Vuc2UucnN0CmluZGV4IDNlOTNhMjYuLmRkYzY5YjggMTAwNjQ0Ci0tLSBhL0RvYy9saWNlbnNlLnJzdAorKysgYi9Eb2MvbGljZW5zZS5yc3QKQEAgLTU5MCw2ICs1OTAsNTQgQEAKICAgU1VDSCBEQU1BR0UuCiAKIAorU0hBLTMKKy0tLS0tCisKK1RoZSBtb2R1bGUgOm1vZDpgX3NoYTNgIGFuZCA6bW9kOmBoYXNobGliYCBhcmUgdXNpbmcgdGhlIHJlZmVyZW5jZQoraW1wbGVtZW50YXRpb24gb2YgS2VjY2FrLiBUaGUgZmlsZXMgYXQgOmZpbGU6YE1vZHVsZXMvX3NoYTMva2VjY2FrL2AgY29udGFpbgordGhlIGZvbGxvd2luZyBub3RlOjoKKworICBUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCisgIE1pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKKyAgcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKKyAgSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKKyAgaGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKKyAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKKyAgYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCisgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKworCitTaXBIYXNoMjQKKy0tLS0tLS0tLQorCitUaGUgZmlsZSA6ZmlsZTpgUHl0aG9uL3B5aGFzaC5jYCBjb250YWlucyBNYXJlayBNYWprb3dza2knIGltcGxlbWVudGF0aW9uIG9mCitEYW4gQmVybnN0ZWluJ3MgU2lwSGFzaDI0IGFsZ29yaXRobS4gVGhlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbm90ZTo6CisKKyAgPE1JVCBMaWNlbnNlPgorICBDb3B5cmlnaHQgKGMpIDIwMTMgIE1hcmVrIE1hamtvd3NraSA8bWFyZWtAcG9wY291bnQub3JnPgorCisgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICA8L01JVCBMaWNlbnNlPgorCisgIE9yaWdpbmFsIGxvY2F0aW9uOgorICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFqZWsvY3NpcGhhc2gvCisKKyAgU29sdXRpb24gaW5zcGlyZWQgYnkgY29kZSBmcm9tOgorICAgICBTYW11ZWwgTmV2ZXMgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUpCisgICAgIGRqYiAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZTIpCisgICAgIEplYW4tUGhpbGlwcGUgQXVtYXNzb24gKGh0dHBzOi8vMTMxMDAyLm5ldC9zaXBoYXNoL3NpcGhhc2gyNC5jKQorCisKIHN0cnRvZCBhbmQgZHRvYQogLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTg0NSwzICs4OTMsNDQgQEAKICAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgogICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CiAKKworY2Z1aGFzaAorLS0tLS0tLQorCitUaGUgaW1wbGVtZW50dGF0aW9uIG9mIHRoZSBoYXNoIHRhYmxlIHVzZWQgYnkgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBpcyBiYXNlZAorb24gdGhlIGNmdWhhc2ggcHJvamVjdDo6CisKKyAgIENvcHlyaWdodCAoYykgMjAwNSBEb24gT3dlbnMKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6CisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAgIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICAgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdCBiL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0CmluZGV4IDhhZmM2OWUuLmUzNWFhOWYgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0CkBAIC00OTMsMTQgKzQ5MywxNSBAQAogdmFsdWUsIGFsbCBmb2xsb3dpbmcgcGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQKIHZhbHVlIC0tLSB0aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci4KIAotKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzCi1leGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uCi1pcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzCi1pcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUKLW9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdAotKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLgotVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlIGBgTm9uZWBgCi1hcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOjoKKyoqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdoZW4gdGhlIGZ1bmN0aW9uCitkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbgordGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2gKK2NhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEKK211dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUKK29iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QKK21vZGlmaWVkLiAgVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlCitgYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLAorZS5nLjo6CiAKICAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKToKICAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6CmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKaW5kZXggMjEyOGZmYy4uMGM2YTBhYiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdApAQCAtOTM0LDYgKzkzNCwyMCBAQAogICAgICAgZnJhbWUpLiAgQSBkZWJ1Z2dlciBjYW4gaW1wbGVtZW50IGEgSnVtcCBjb21tYW5kIChha2EgU2V0IE5leHQgU3RhdGVtZW50KQogICAgICAgYnkgd3JpdGluZyB0byBmX2xpbmVuby4KIAorICAgICAgRnJhbWUgb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6CisKKyAgICAgIC4uIG1ldGhvZDo6IGZyYW1lLmNsZWFyKCkKKworICAgICAgICAgVGhpcyBtZXRob2QgY2xlYXJzIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBoZWxkIGJ5IHRoZQorICAgICAgICAgZnJhbWUuICBBbHNvLCBpZiB0aGUgZnJhbWUgYmVsb25nZWQgdG8gYSBnZW5lcmF0b3IsIHRoZSBnZW5lcmF0b3IKKyAgICAgICAgIGlzIGZpbmFsaXplZC4gIFRoaXMgaGVscHMgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBpbnZvbHZpbmcgZnJhbWUKKyAgICAgICAgIG9iamVjdHMgKGZvciBleGFtcGxlIHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uIGFuZCBzdG9yaW5nIGl0cworICAgICAgICAgdHJhY2ViYWNrIGZvciBsYXRlciB1c2UpLgorCisgICAgICAgICA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgY3VycmVudGx5IGV4ZWN1dGluZy4KKworICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIFRyYWNlYmFjayBvYmplY3RzCiAgICAgICAuLiBpbmRleDo6CiAgICAgICAgICBvYmplY3Q6IHRyYWNlYmFjawpAQCAtMTEyMSwxMiArMTEzNSwxMCBAQAogICAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0IHNpdHVhdGlvbgogICAgICAgY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzOyB0aGUgbGF0dGVyIHR3bwogICAgICAgc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpbiBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLgotICAgICAgQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlCi0gICAgICBkZXRlY3RvciBpcyBlbmFibGVkIChpdCdzIG9uIGJ5IGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZgotICAgICAgdGhlcmUgYXJlIG5vIFB5dGhvbi0gbGV2ZWwgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgaW52b2x2ZWQuIFJlZmVyIHRvIHRoZQotICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDptb2Q6YGdjYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93Ci0gICAgICA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGUgY3ljbGUgZGV0ZWN0b3IsIHBhcnRpY3VsYXJseQotICAgICAgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYCB2YWx1ZS4KKyAgICAgIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIHdoZW4KKyAgICAgIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCAoaXQncyBvbiBieSBkZWZhdWx0KS4gUmVmZXIgdG8gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgZ2NgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzCisgICAgICB0b3BpYy4KIAogICAgLi4gd2FybmluZzo6CiAKQEAgLTE4MzAsNiArMTg0MiwxNSBAQAogICAgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC4KIAogCisuLiBtZXRob2Q6OiBvYmplY3QuX19sZW5ndGhfaGludF9fKHNlbGYpCisKKyAgIENhbGxlZCB0byBpbXBsZW1lbnQgOmZ1bmM6YG9wZXJhdG9yLmxlbmd0aF9oaW50YC4gU2hvdWxkIHJldHVybiBhbiBlc3RpbWF0ZWQKKyAgIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuIHRoZSBhY3R1YWwgbGVuZ3RoKS4KKyAgIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGBgPj1gYCAwLiBUaGlzIG1ldGhvZCBpcyBwdXJlbHkgYW4KKyAgIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbm90ZTo6CiAKICAgIFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy4gIEEgY2FsbCBsaWtlIDo6CmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKaW5kZXggZWI0OTdhMS4uYmU3OWI5OSAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdApAQCAtMjEwLDYgKzIxMCw3IEBACiAuLiBpbmRleDo6CiAgICAgc2luZ2xlOiBmaW5kZXIKICAgICBzaW5nbGU6IGxvYWRlcgorICAgIHNpbmdsZTogbW9kdWxlIHNwZWMKIAogSWYgdGhlIG5hbWVkIG1vZHVsZSBpcyBub3QgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlbiBQeXRob24ncyBpbXBvcnQKIHByb3RvY29sIGlzIGludm9rZWQgdG8gZmluZCBhbmQgbG9hZCB0aGUgbW9kdWxlLiAgVGhpcyBwcm90b2NvbCBjb25zaXN0cyBvZgpAQCAtMjMwLDEzICsyMzEsMTcgQEAKIHJhbmdlIGFuZCBzY29wZSBvZiBtb2R1bGUgc2VhcmNoaW5nLgogCiBGaW5kZXJzIGRvIG5vdCBhY3R1YWxseSBsb2FkIG1vZHVsZXMuICBJZiB0aGV5IGNhbiBmaW5kIHRoZSBuYW1lZCBtb2R1bGUsIHRoZXkKLXJldHVybiBhIDp0ZXJtOmBsb2FkZXJgLCB3aGljaCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB0aGVuIGludm9rZXMgdG8gbG9hZCB0aGUKLW1vZHVsZSBhbmQgY3JlYXRlIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSBvYmplY3QuCityZXR1cm4gYSA6ZGZuOmBtb2R1bGUgc3BlY2AsIGFuIGVuY2Fwc3VsYXRpb24gb2YgdGhlIG1vZHVsZSdzIGltcG9ydC1yZWxhdGVkCitpbmZvcm1hdGlvbiwgd2hpY2ggdGhlIGltcG9ydCBtYWNoaW5lcnkgdGhlbiB1c2VzIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLgogCiBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBwcm90b2NvbCBmb3IgZmluZGVycyBhbmQgbG9hZGVycyBpbiBtb3JlCiBkZXRhaWwsIGluY2x1ZGluZyBob3cgeW91IGNhbiBjcmVhdGUgYW5kIHJlZ2lzdGVyIG5ldyBvbmVzIHRvIGV4dGVuZCB0aGUKIGltcG9ydCBtYWNoaW5lcnkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24sIGZpbmRlcnMgcmV0dXJuZWQgOnRlcm06YGxvYWRlcnMgPGxvYWRlcj5gCisgICBkaXJlY3RseSwgd2hlcmVhcyBub3cgdGhleSByZXR1cm4gbW9kdWxlIHNwZWNzIHdoaWNoICpjb250YWluKiBsb2FkZXJzLgorICAgTG9hZGVycyBhcmUgc3RpbGwgdXNlZCBkdXJpbmcgaW1wb3J0IGJ1dCBoYXZlIGZld2VyIHJlc3BvbnNpYmlsaXRpZXMuCiAKIEltcG9ydCBob29rcwogLS0tLS0tLS0tLS0tCkBAIC0yNzAsMjQgKzI3NSwyMyBAQAogCiAuLiBpbmRleDo6CiAgICAgc2luZ2xlOiBzeXMubWV0YV9wYXRoCi0gICAgcGFpcjogZmluZGVyOyBmaW5kX21vZHVsZQotICAgIHBhaXI6IGZpbmRlcjsgZmluZF9sb2FkZXIKKyAgICBwYWlyOiBmaW5kZXI7IGZpbmRfc3BlYwogCiBXaGVuIHRoZSBuYW1lZCBtb2R1bGUgaXMgbm90IGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2AsIFB5dGhvbiBuZXh0CiBzZWFyY2hlcyA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAsIHdoaWNoIGNvbnRhaW5zIGEgbGlzdCBvZiBtZXRhIHBhdGggZmluZGVyCiBvYmplY3RzLiAgVGhlc2UgZmluZGVycyBhcmUgcXVlcmllZCBpbiBvcmRlciB0byBzZWUgaWYgdGhleSBrbm93IGhvdyB0byBoYW5kbGUKIHRoZSBuYW1lZCBtb2R1bGUuICBNZXRhIHBhdGggZmluZGVycyBtdXN0IGltcGxlbWVudCBhIG1ldGhvZCBjYWxsZWQKLTptZXRoOmBmaW5kX21vZHVsZSgpYCB3aGljaCB0YWtlcyB0d28gYXJndW1lbnRzLCBhIG5hbWUgYW5kIGFuIGltcG9ydCBwYXRoLgorOm1ldGg6YGZpbmRfc3BlYygpYCB3aGljaCB0YWtlcyB0d28gYXJndW1lbnRzLCBhIG5hbWUgYW5kIGFuIGltcG9ydCBwYXRoLgogVGhlIG1ldGEgcGF0aCBmaW5kZXIgY2FuIHVzZSBhbnkgc3RyYXRlZ3kgaXQgd2FudHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgY2FuCiBoYW5kbGUgdGhlIG5hbWVkIG1vZHVsZSBvciBub3QuCiAKIElmIHRoZSBtZXRhIHBhdGggZmluZGVyIGtub3dzIGhvdyB0byBoYW5kbGUgdGhlIG5hbWVkIG1vZHVsZSwgaXQgcmV0dXJucyBhCi1sb2FkZXIgb2JqZWN0LiAgSWYgaXQgY2Fubm90IGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGBgTm9uZWBgLiAgSWYKK3NwZWMgb2JqZWN0LiAgSWYgaXQgY2Fubm90IGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGBgTm9uZWBgLiAgSWYKIDpkYXRhOmBzeXMubWV0YV9wYXRoYCBwcm9jZXNzaW5nIHJlYWNoZXMgdGhlIGVuZCBvZiBpdHMgbGlzdCB3aXRob3V0IHJldHVybmluZwotYSBsb2FkZXIsIHRoZW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIEFueSBvdGhlciBleGNlcHRpb25zIHJhaXNlZAorYSBzcGVjLCB0aGVuIGFuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuICBBbnkgb3RoZXIgZXhjZXB0aW9ucyByYWlzZWQKIGFyZSBzaW1wbHkgcHJvcGFnYXRlZCB1cCwgYWJvcnRpbmcgdGhlIGltcG9ydCBwcm9jZXNzLgogCi1UaGUgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBvZiBtZXRhIHBhdGggZmluZGVycyBpcyBjYWxsZWQgd2l0aCB0d28KK1RoZSA6bWV0aDpgZmluZF9zcGVjKClgIG1ldGhvZCBvZiBtZXRhIHBhdGggZmluZGVycyBpcyBjYWxsZWQgd2l0aCB0d28KIGFyZ3VtZW50cy4gIFRoZSBmaXJzdCBpcyB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZwogaW1wb3J0ZWQsIGZvciBleGFtcGxlIGBgZm9vLmJhci5iYXpgYC4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhdGgKIGVudHJpZXMgdG8gdXNlIGZvciB0aGUgbW9kdWxlIHNlYXJjaC4gIEZvciB0b3AtbGV2ZWwgbW9kdWxlcywgdGhlIHNlY29uZApAQCAtMjk5LDEyICszMDMsMTIgQEAKIFRoZSBtZXRhIHBhdGggbWF5IGJlIHRyYXZlcnNlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzaW5nbGUgaW1wb3J0IHJlcXVlc3QuCiBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgbm9uZSBvZiB0aGUgbW9kdWxlcyBpbnZvbHZlZCBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZCwKIGltcG9ydGluZyBgYGZvby5iYXIuYmF6YGAgd2lsbCBmaXJzdCBwZXJmb3JtIGEgdG9wIGxldmVsIGltcG9ydCwgY2FsbGluZwotYGBtcGYuZmluZF9tb2R1bGUoImZvbyIsIE5vbmUpYGAgb24gZWFjaCBtZXRhIHBhdGggZmluZGVyIChgYG1wZmBgKS4gQWZ0ZXIKK2BgbXBmLmZpbmRfc3BlYygiZm9vIiwgTm9uZSlgYCBvbiBlYWNoIG1ldGEgcGF0aCBmaW5kZXIgKGBgbXBmYGApLiBBZnRlcgogYGBmb29gYCBoYXMgYmVlbiBpbXBvcnRlZCwgYGBmb28uYmFyYGAgd2lsbCBiZSBpbXBvcnRlZCBieSB0cmF2ZXJzaW5nIHRoZQogbWV0YSBwYXRoIGEgc2Vjb25kIHRpbWUsIGNhbGxpbmcKLWBgbXBmLmZpbmRfbW9kdWxlKCJmb28uYmFyIiwgZm9vLl9fcGF0aF9fKWBgLiBPbmNlIGBgZm9vLmJhcmBgIGhhcyBiZWVuCitgYG1wZi5maW5kX3NwZWMoImZvby5iYXIiLCBmb28uX19wYXRoX18pYGAuIE9uY2UgYGBmb28uYmFyYGAgaGFzIGJlZW4KIGltcG9ydGVkLCB0aGUgZmluYWwgdHJhdmVyc2FsIHdpbGwgY2FsbAotYGBtcGYuZmluZF9tb2R1bGUoImZvby5iYXIuYmF6IiwgZm9vLmJhci5fX3BhdGhfXylgYC4KK2BgbXBmLmZpbmRfc3BlYygiZm9vLmJhci5iYXoiLCBmb28uYmFyLl9fcGF0aF9fKWBgLgogCiBTb21lIG1ldGEgcGF0aCBmaW5kZXJzIG9ubHkgc3VwcG9ydCB0b3AgbGV2ZWwgaW1wb3J0cy4gVGhlc2UgaW1wb3J0ZXJzIHdpbGwKIGFsd2F5cyByZXR1cm4gYGBOb25lYGAgd2hlbiBhbnl0aGluZyBvdGhlciB0aGFuIGBgTm9uZWBgIGlzIHBhc3NlZCBhcyB0aGUKQEAgLTMxNSwxMjkgKzMxOSwyMzEgQEAKIG1vZHVsZXMsIGFuZCBvbmUgdGhhdCBrbm93cyBob3cgdG8gaW1wb3J0IG1vZHVsZXMgZnJvbSBhbiA6dGVybTpgaW1wb3J0IHBhdGhgCiAoaS5lLiB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgZmluZF9zcGVjKCkgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIHJlcGxhY2VkIDptZXRoOmBmaW5kX21vZHVsZSgpYC4KKyAgIHdoaWNoIGlzIG5vdyBkZXByZWNhdGVkLiAgV2hpbGUgaXQgd2lsbCBjb250aW51ZSB0byB3b3JrIHdpdGhvdXQgY2hhbmdlLAorICAgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB0cnkgaXQgb25seSBpZiB0aGUgZmluZGVyIGRvZXMgbm90IGltcGxlbWVudAorICAgZmluZF9zcGVjKCkuCiAKLUxvYWRlcnMKKworTG9hZGluZwogPT09PT09PQogCi1JZiBhbmQgd2hlbiBhIG1vZHVsZSBsb2FkZXIgaXMgZm91bmQgaXRzCi06bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCBtZXRob2QgaXMgY2FsbGVkLCB3aXRoIGEgc2luZ2xlCi1hcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICBUaGlzIG1ldGhvZAotaGFzIHNldmVyYWwgcmVzcG9uc2liaWxpdGllcywgYW5kIHNob3VsZCByZXR1cm4gdGhlIG1vZHVsZSBvYmplY3QgaXQgaGFzCi1sb2FkZWQgWyNmbmxvXV8uICBJZiBpdCBjYW5ub3QgbG9hZCB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KLTpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCi06bWV0aDpgbG9hZF9tb2R1bGUoKWAgd2lsbCBiZSBwcm9wYWdhdGVkLgorSWYgYW5kIHdoZW4gYSBtb2R1bGUgc3BlYyBpcyBmb3VuZCwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB1c2UgaXQgKGFuZAordGhlIGxvYWRlciBpdCBjb250YWlucykgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBIZXJlIGlzIGFuIGFwcHJveGltYXRpb24KK29mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGxvYWRpbmcgcG9ydGlvbiBvZiBpbXBvcnQ6OgogCi1JbiBtYW55IGNhc2VzLCB0aGUgZmluZGVyIGFuZCBsb2FkZXIgY2FuIGJlIHRoZSBzYW1lIG9iamVjdDsgaW4gc3VjaCBjYXNlcyB0aGUKLTptZXRoOmBmaW5kZXIuZmluZF9tb2R1bGUoKWAgd291bGQganVzdCByZXR1cm4gYGBzZWxmYGAuCisgICAgbW9kdWxlID0gTm9uZQorICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lIGFuZCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICBtb2R1bGUgPSBzcGVjLmxvYWRlci5jcmVhdGVfbW9kdWxlKHNwZWMpCisgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgIG1vZHVsZSA9IE1vZHVsZVR5cGUoc3BlYy5uYW1lKQorICAgICMgVGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGdldCBzZXQgaGVyZToKKyAgICBfaW5pdF9tb2R1bGVfYXR0cnMoc3BlYywgbW9kdWxlKQogCi1Mb2FkZXJzIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXSA9IG1vZHVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB1bnN1cHBvcnRlZAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICBlbGlmIG5vdCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgIGVsc2U6CisgICAgICAgIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJhaXNlCisgICAgbW9kdWxlX3RvX3JldHVybiA9IHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKworTm90ZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6CiAKICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgotICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4gIChPdGhlcndpc2UsCi0gICA6ZnVuYzpgaW1wLnJlbG9hZGAgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKSAgSWYgdGhlIG5hbWVkIG1vZHVsZSBkb2VzCi0gICBub3QgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUKLSAgIG9iamVjdCBhbmQgYWRkIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AuCisgICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBpbXBvcnQgd2lsbCBoYXZlIGFscmVhZHkgcmV0dXJuZWQgaXQuCiAKLSAgIE5vdGUgdGhhdCB0aGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgKiBUaGUgbW9kdWxlIHdpbGwgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlcgogICAgZXhlY3V0ZXMgdGhlIG1vZHVsZSBjb2RlLiAgVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgdGhlIG1vZHVsZSBjb2RlIG1heQogICAgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGltcG9ydCBpdHNlbGY7IGFkZGluZyBpdCB0byA6ZGF0YTpgc3lzLm1vZHVsZXNgCiAgICBiZWZvcmVoYW5kIHByZXZlbnRzIHVuYm91bmRlZCByZWN1cnNpb24gaW4gdGhlIHdvcnN0IGNhc2UgYW5kIG11bHRpcGxlCiAgICBsb2FkaW5nIGluIHRoZSBiZXN0LgogCi0gICBJZiBsb2FkaW5nIGZhaWxzLCB0aGUgbG9hZGVyIG11c3QgcmVtb3ZlIGFueSBtb2R1bGVzIGl0IGhhcyBpbnNlcnRlZCBpbnRvCi0gICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBidXQgaXQgbXVzdCByZW1vdmUgKipvbmx5KiogdGhlIGZhaWxpbmcgbW9kdWxlLCBhbmQKLSAgIG9ubHkgaWYgdGhlIGxvYWRlciBpdHNlbGYgaGFzIGxvYWRlZCBpdCBleHBsaWNpdGx5LiAgQW55IG1vZHVsZSBhbHJlYWR5IGluCi0gICB0aGUgOmRhdGE6YHN5cy5tb2R1bGVzYCBjYWNoZSwgYW5kIGFueSBtb2R1bGUgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZAotICAgYXMgYSBzaWRlLWVmZmVjdCwgbXVzdCByZW1haW4gaW4gdGhlIGNhY2hlLgorICogSWYgbG9hZGluZyBmYWlscywgdGhlIGZhaWxpbmcgbW9kdWxlIC0tIGFuZCBvbmx5IHRoZSBmYWlsaW5nIG1vZHVsZSAtLQorICAgZ2V0cyByZW1vdmVkIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYC4gIEFueSBtb2R1bGUgYWxyZWFkeSBpbiB0aGUKKyAgIDpkYXRhOmBzeXMubW9kdWxlc2AgY2FjaGUsIGFuZCBhbnkgbW9kdWxlIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQKKyAgIGFzIGEgc2lkZS1lZmZlY3QsIG11c3QgcmVtYWluIGluIHRoZSBjYWNoZS4gIFRoaXMgY29udHJhc3RzIHdpdGgKKyAgIHJlbG9hZGluZyB3aGVyZSBldmVuIHRoZSBmYWlsaW5nIG1vZHVsZSBpcyBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKLSAqIFRoZSBsb2FkZXIgbWF5IHNldCB0aGUgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlLiAgSWYgc2V0LCB0aGlzCi0gICBhdHRyaWJ1dGUncyB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nLiAgVGhlIGxvYWRlciBtYXkgb3B0IHRvIGxlYXZlCi0gICBgYF9fZmlsZV9fYGAgdW5zZXQgaWYgaXQgaGFzIG5vIHNlbWFudGljIG1lYW5pbmcgKGUuZy4gYSBtb2R1bGUgbG9hZGVkIGZyb20KLSAgIGEgZGF0YWJhc2UpLiBJZiBgYF9fZmlsZV9fYGAgaXMgc2V0LCBpdCBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSB0byBzZXQgdGhlCi0gICBgYF9fY2FjaGVkX19gYCBhdHRyaWJ1dGUgd2hpY2ggaXMgdGhlIHBhdGggdG8gYW55IGNvbXBpbGVkIHZlcnNpb24gb2YgdGhlCi0gICBjb2RlIChlLmcuIGJ5dGUtY29tcGlsZWQgZmlsZSkuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QgdG8gc2V0IHRoaXMKLSAgIGF0dHJpYnV0ZTsgdGhlIHBhdGggY2FuIHNpbXBseSBwb2ludCB0byB3aGV0aGVyIHRoZSBjb21waWxlZCBmaWxlIHdvdWxkCi0gICBleGlzdCAoc2VlIDpwZXA6YDMxNDdgKS4KKyAqIEFmdGVyIHRoZSBtb2R1bGUgaXMgY3JlYXRlZCBidXQgYmVmb3JlIGV4ZWN1dGlvbiwgdGhlIGltcG9ydCBtYWNoaW5lcnkKKyAgIHNldHMgdGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzICgiaW5pdF9tb2R1bGVfYXR0cnMiKSwgYXMKKyAgIHN1bW1hcml6ZWQgaW4gYSA6cmVmOmBsYXRlciBzZWN0aW9uIDxpbXBvcnQtbW9kLWF0dHJzPmAuCiAKLSAqIFRoZSBsb2FkZXIgbWF5IHNldCB0aGUgYGBfX25hbWVfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlLiAgV2hpbGUgbm90Ci0gICByZXF1aXJlZCwgc2V0dGluZyB0aGlzIGF0dHJpYnV0ZSBpcyBoaWdobHkgcmVjb21tZW5kZWQgc28gdGhhdCB0aGUKLSAgIDptZXRoOmByZXByKClgIG9mIHRoZSBtb2R1bGUgaXMgbW9yZSBpbmZvcm1hdGl2ZS4KKyAqIE1vZHVsZSBleGVjdXRpb24gaXMgdGhlIGtleSBtb21lbnQgb2YgbG9hZGluZyBpbiB3aGljaCB0aGUgbW9kdWxlJ3MKKyAgIG5hbWVzcGFjZSBnZXRzIHBvcHVsYXRlZC4gIEV4ZWN1dGlvbiBpcyBlbnRpcmVseSBkZWxlZ2F0ZWQgdG8gdGhlCisgICBsb2FkZXIsIHdoaWNoIGdldHMgdG8gZGVjaWRlIHdoYXQgZ2V0cyBwb3B1bGF0ZWQgYW5kIGhvdy4KIAotICogSWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgKGVpdGhlciByZWd1bGFyIG9yIG5hbWVzcGFjZSksIHRoZSBsb2FkZXIgbXVzdAotICAgc2V0IHRoZSBtb2R1bGUgb2JqZWN0J3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4gIFRoZSB2YWx1ZSBtdXN0IGJlCi0gICBpdGVyYWJsZSwgYnV0IG1heSBiZSBlbXB0eSBpZiBgYF9fcGF0aF9fYGAgaGFzIG5vIGZ1cnRoZXIgc2lnbmlmaWNhbmNlCi0gICB0byB0aGUgbG9hZGVyLiBJZiBgYF9fcGF0aF9fYGAgaXMgbm90IGVtcHR5LCBpdCBtdXN0IHByb2R1Y2Ugc3RyaW5ncwotICAgd2hlbiBpdGVyYXRlZCBvdmVyLiBNb3JlIGRldGFpbHMgb24gdGhlIHNlbWFudGljcyBvZiBgYF9fcGF0aF9fYGAgYXJlCi0gICBnaXZlbiA6cmVmOmBiZWxvdyA8cGFja2FnZS1wYXRoLXJ1bGVzPmAuCisgKiBUaGUgbW9kdWxlIGNyZWF0ZWQgZHVyaW5nIGxvYWRpbmcgYW5kIHBhc3NlZCB0byBleGVjX21vZHVsZSgpIG1heQorICAgbm90IGJlIHRoZSBvbmUgcmV0dXJuZWQgYXQgdGhlIGVuZCBvZiBpbXBvcnQgWyNmbmxvXV8uCiAKLSAqIFRoZSBgYF9fbG9hZGVyX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGxvYWRlciBvYmplY3QgdGhhdCBsb2FkZWQKLSAgIHRoZSBtb2R1bGUuICBUaGlzIGlzIG1vc3RseSBmb3IgaW50cm9zcGVjdGlvbiBhbmQgcmVsb2FkaW5nLCBidXQgY2FuIGJlCi0gICB1c2VkIGZvciBhZGRpdGlvbmFsIGxvYWRlci1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBmb3IgZXhhbXBsZSBnZXR0aW5nCi0gICBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGxvYWRlci4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgaW1wb3J0IHN5c3RlbSBoYXMgdGFrZW4gb3ZlciB0aGUgYm9pbGVycGxhdGUgcmVzcG9uc2liaWxpdGllcyBvZgorICAgbG9hZGVycy4gIFRoZXNlIHdlcmUgcHJldmlvdXNseSBwZXJmb3JtZWQgYnkgdGhlIDptZXRoOmBsb2FkX21vZHVsZSgpYAorICAgbWV0aG9kLgogCi0gKiBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0LiAgSXRzIHZhbHVlIG11c3QgYmUgYQotICAgc3RyaW5nLCBidXQgaXQgY2FuIGJlIHRoZSBzYW1lIHZhbHVlIGFzIGl0cyBgYF9fbmFtZV9fYGAuICBJZiB0aGUgYXR0cmlidXRlCi0gICBpcyBzZXQgdG8gYGBOb25lYGAgb3IgaXMgbWlzc2luZywgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBmaWxsIGl0IGluIHdpdGggYQotICAgbW9yZSBhcHByb3ByaWF0ZSB2YWx1ZS4gIFdoZW4gdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAKLSAgIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLAotICAgYGBfX3BhY2thZ2VfX2BgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yCi0gICBmb3Igc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCi0gICBkZXRhaWxzLgorTG9hZGVycworLS0tLS0tLQogCi0gICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAotICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCitNb2R1bGUgbG9hZGVycyBwcm92aWRlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBvZiBsb2FkaW5nOiBtb2R1bGUgZXhlY3V0aW9uLgorVGhlIGltcG9ydCBtYWNoaW5lcnkgY2FsbHMgdGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGUoKWAKK21ldGhvZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbW9kdWxlIG9iamVjdCB0byBleGVjdXRlLiAgQW55IHZhbHVlCityZXR1cm5lZCBmcm9tIGV4ZWNfbW9kdWxlKCkgaXMgaWdub3JlZC4KKworTG9hZGVycyBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CiAKICAqIElmIHRoZSBtb2R1bGUgaXMgYSBQeXRob24gbW9kdWxlIChhcyBvcHBvc2VkIHRvIGEgYnVpbHQtaW4gbW9kdWxlIG9yIGEKICAgIGR5bmFtaWNhbGx5IGxvYWRlZCBleHRlbnNpb24pLCB0aGUgbG9hZGVyIHNob3VsZCBleGVjdXRlIHRoZSBtb2R1bGUncyBjb2RlCiAgICBpbiB0aGUgbW9kdWxlJ3MgZ2xvYmFsIG5hbWUgc3BhY2UgKGBgbW9kdWxlLl9fZGljdF9fYGApLgogCisgKiBJZiBsb2FkZXIgY2Fubm90IGV4ZWN1dGUgdGhlIG1vZHVsZSwgaXQgc2hvdWxkIHJhaXNlIGFuCisgICA6ZXhjOmBJbXBvcnRFcnJvcmAsIGFsdGhvdWdoIGFueSBvdGhlciBleGNlcHRpb24gcmFpc2VkIGR1cmluZworICAgOm1ldGg6YGV4ZWNfbW9kdWxlKClgIHdpbGwgYmUgcHJvcGFnYXRlZC4KIAotTW9kdWxlIHJlcHJzCi0tLS0tLS0tLS0tLS0KK0luIG1hbnkgY2FzZXMsIHRoZSBmaW5kZXIgYW5kIGxvYWRlciBjYW4gYmUgdGhlIHNhbWUgb2JqZWN0OyBpbiBzdWNoIGNhc2VzIHRoZQorOm1ldGg6YGZpbmRlci5maW5kX3NwZWMoKWAgd291bGQganVzdCByZXR1cm4gYSBzcGVjIHdpdGggdGhlIGxvYWRlciBzZXQKK3RvIGBgc2VsZmBgLgogCi1CeSBkZWZhdWx0LCBhbGwgbW9kdWxlcyBoYXZlIGEgdXNhYmxlIHJlcHIsIGhvd2V2ZXIgZGVwZW5kaW5nIG9uIHRoZQotYXR0cmlidXRlcyBzZXQgYWJvdmUsIGFuZCBob29rcyBpbiB0aGUgbG9hZGVyLCB5b3UgY2FuIG1vcmUgZXhwbGljaXRseSBjb250cm9sCi10aGUgcmVwciBvZiBtb2R1bGUgb2JqZWN0cy4KK01vZHVsZSBsb2FkZXJzIG1heSBvcHQgaW4gdG8gY3JlYXRpbmcgdGhlIG1vZHVsZSBvYmplY3QgZHVyaW5nIGxvYWRpbmcKK2J5IGltcGxlbWVudGluZyBhIDptZXRoOmBjcmVhdGVfbW9kdWxlKClgIG1ldGhvZC4gIEl0IHRha2VzIG9uZSBhcmd1bWVudCwKK3RoZSBtb2R1bGUgc3BlYywgYW5kIHJldHVybnMgdGhlIG5ldyBtb2R1bGUgb2JqZWN0IHRvIHVzZSBkdXJpbmcgbG9hZGluZy4KK2NyZWF0ZV9tb2R1bGUoKSBkb2VzIG5vdCBuZWVkIHRvIHNldCBhbnkgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlIG9iamVjdC4KK0lmIHRoZSBsb2FkZXIgZG9lcyBub3QgZGVmaW5lIGNyZWF0ZV9tb2R1bGUoKSwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbAorY3JlYXRlIHRoZSBuZXcgbW9kdWxlIGl0c2VsZi4KIAotTG9hZGVycyBtYXkgaW1wbGVtZW50IGEgOm1ldGg6YG1vZHVsZV9yZXByKClgIG1ldGhvZCB3aGljaCB0YWtlcyBhIHNpbmdsZQotYXJndW1lbnQsIHRoZSBtb2R1bGUgb2JqZWN0LiAgV2hlbiBgYHJlcHIobW9kdWxlKWBgIGlzIGNhbGxlZCBmb3IgYSBtb2R1bGUKLXdpdGggYSBsb2FkZXIgc3VwcG9ydGluZyB0aGlzIHByb3RvY29sLCB3aGF0ZXZlciBpcyByZXR1cm5lZCBmcm9tCi1gYG1vZHVsZS5fX2xvYWRlcl9fLm1vZHVsZV9yZXByKG1vZHVsZSlgYCBpcyByZXR1cm5lZCBhcyB0aGUgbW9kdWxlJ3MgcmVwcgotd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuICBUaGlzIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nLgorLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICBUaGUgY3JlYXRlX21vZHVsZSgpIG1ldGhvZCBvZiBsb2FkZXJzLgogCi1JZiB0aGUgbW9kdWxlIGhhcyBubyBgYF9fbG9hZGVyX19gYCBhdHRyaWJ1dGUsIG9yIHRoZSBsb2FkZXIgaGFzIG5vCi06bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kLCB0aGVuIHRoZSBtb2R1bGUgb2JqZWN0IGltcGxlbWVudGF0aW9uIGl0c2VsZgotd2lsbCBjcmFmdCBhIGRlZmF1bHQgcmVwciB1c2luZyB3aGF0ZXZlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuICBJdCB3aWxsCi10cnkgdG8gdXNlIHRoZSBgYG1vZHVsZS5fX25hbWVfX2BgLCBgYG1vZHVsZS5fX2ZpbGVfX2BgLCBhbmQKLWBgbW9kdWxlLl9fbG9hZGVyX19gYCBhcyBpbnB1dCBpbnRvIHRoZSByZXByLCB3aXRoIGRlZmF1bHRzIGZvciB3aGF0ZXZlcgotaW5mb3JtYXRpb24gaXMgbWlzc2luZy4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgbG9hZF9tb2R1bGUoKSBtZXRob2Qgd2FzIHJlcGxhY2VkIGJ5IGV4ZWNfbW9kdWxlKCkgYW5kIHRoZSBpbXBvcnQKKyAgIG1hY2hpbmVyeSBhc3N1bWVkIGFsbCB0aGUgYm9pbGVycGxhdGUgcmVzcG9uc2liaWxpdGllcyBvZiBsb2FkaW5nLgogCi1IZXJlIGFyZSB0aGUgZXhhY3QgcnVsZXMgdXNlZDoKKyAgIEZvciBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgbG9hZGVycywgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB1c2UKKyAgIHRoZSA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlKClgIG1ldGhvZCBvZiBsb2FkZXJzIGlmIGl0CisgICBleGlzdHMgYW5kIHRoZSBsb2FkZXIgZG9lcyBub3QgYWxzbyBpbXBsZW1lbnQgZXhlY19tb2R1bGUoKS4gIEhvd2V2ZXIsCisgICBsb2FkX21vZHVsZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGxvYWRlcnMgc2hvdWxkIGltcGxlbWVudAorICAgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgogCi0gKiBJZiB0aGUgbW9kdWxlIGhhcyBhIGBgX19sb2FkZXJfX2BgIGFuZCB0aGF0IGxvYWRlciBoYXMgYQotICAgOm1ldGg6YG1vZHVsZV9yZXByKClgIG1ldGhvZCwgY2FsbCBpdCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUKLSAgIG1vZHVsZSBvYmplY3QuICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdXNlZCBhcyB0aGUgbW9kdWxlJ3MgcmVwci4KKyAgIFRoZSBsb2FkX21vZHVsZSgpIG1ldGhvZCBtdXN0IGltcGxlbWVudCBhbGwgdGhlIGJvaWxlcnBsYXRlIGxvYWRpbmcKKyAgIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGFib3ZlIGluIGFkZGl0aW9uIHRvIGV4ZWN1dGluZyB0aGUgbW9kdWxlLiAgQWxsCisgICB0aGUgc2FtZSBjb25zdHJhaW50cyBhcHBseSwgd2l0aCBzb21lIGFkZGl0aW9uYWwgY2xhcmlmaWNhdGlvbjoKIAotICogSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiA6bWV0aDpgbW9kdWxlX3JlcHIoKWAsIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0Ci0gICBhbmQgZGlzY2FyZGVkLCBhbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBtb2R1bGUncyByZXByIGNvbnRpbnVlcyBhcyBpZgotICAgOm1ldGg6YG1vZHVsZV9yZXByKClgIGRpZCBub3QgZXhpc3QuCisgICAgKiBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4KKyAgICAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZSBsb2FkZXIgbXVzdCB1c2UgdGhhdCBleGlzdGluZyBtb2R1bGUuCisgICAgICAoT3RoZXJ3aXNlLCA6ZnVuYzpgaW1wLnJlbG9hZGAgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKSAgSWYgdGhlCisgICAgICBuYW1lZCBtb2R1bGUgZG9lcyBub3QgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlcgorICAgICAgbXVzdCBjcmVhdGUgYSBuZXcgbW9kdWxlIG9iamVjdCBhbmQgYWRkIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKLSAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSwgdGhpcyBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlCi0gICBtb2R1bGUncyByZXByLgorICAgICogVGhlIG1vZHVsZSAqbXVzdCogZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlcgorICAgICAgZXhlY3V0ZXMgdGhlIG1vZHVsZSBjb2RlLCB0byBwcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gb3IgbXVsdGlwbGUKKyAgICAgIGxvYWRpbmcuCiAKLSAqIElmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19maWxlX19gYCBidXQgZG9lcyBoYXZlIGEgYGBfX2xvYWRlcl9fYGAsIHRoZW4gdGhlCi0gICBsb2FkZXIncyByZXByIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgbW9kdWxlJ3MgcmVwci4KKyAgICAqIElmIGxvYWRpbmcgZmFpbHMsIHRoZSBsb2FkZXIgbXVzdCByZW1vdmUgYW55IG1vZHVsZXMgaXQgaGFzIGluc2VydGVkCisgICAgICBpbnRvIDpkYXRhOmBzeXMubW9kdWxlc2AsIGJ1dCBpdCBtdXN0IHJlbW92ZSAqKm9ubHkqKiB0aGUgZmFpbGluZworICAgICAgbW9kdWxlLCBhbmQgb25seSBpZiB0aGUgbG9hZGVyIGl0c2VsZiBoYXMgbG9hZGVkIGl0IGV4cGxpY2l0bHkuCiAKLSAqIE90aGVyd2lzZSwganVzdCB1c2UgdGhlIG1vZHVsZSdzIGBgX19uYW1lX19gYCBpbiB0aGUgcmVwci4KK01vZHVsZSBzcGVjCistLS0tLS0tLS0tLQogCi1UaGlzIGV4YW1wbGUsIGZyb20gOnBlcDpgNDIwYCBzaG93cyBob3cgYSBsb2FkZXIgY2FuIGNyYWZ0IGl0cyBvd24gbW9kdWxlCi1yZXByOjoKK1RoZSBpbXBvcnQgbWFjaGluZXJ5IHVzZXMgYSB2YXJpZXR5IG9mIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggbW9kdWxlCitkdXJpbmcgaW1wb3J0LCBlc3BlY2lhbGx5IGJlZm9yZSBsb2FkaW5nLiAgTW9zdCBvZiB0aGUgaW5mb3JtYXRpb24gaXMKK2NvbW1vbiB0byBhbGwgbW9kdWxlcy4gIFRoZSBwdXJwb3NlIG9mIGEgbW9kdWxlJ3Mgc3BlYyBpcyB0byBlbmNhcHN1bGF0ZQordGhpcyBpbXBvcnQtcmVsYXRlZCBpbmZvcm1hdGlvbiBvbiBhIHBlci1tb2R1bGUgYmFzaXMuCiAKLSAgICBjbGFzcyBOYW1lc3BhY2VMb2FkZXI6Ci0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgbW9kdWxlX3JlcHIoY2xzLCBtb2R1bGUpOgotICAgICAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKG5hbWVzcGFjZSk+Ii5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorVXNpbmcgYSBzcGVjIGR1cmluZyBpbXBvcnQgYWxsb3dzIHN0YXRlIHRvIGJlIHRyYW5zZmVycmVkIGJldHdlZW4gaW1wb3J0CitzeXN0ZW0gY29tcG9uZW50cywgZS5nLiBiZXR3ZWVuIHRoZSBmaW5kZXIgdGhhdCBjcmVhdGVzIHRoZSBtb2R1bGUgc3BlYworYW5kIHRoZSBsb2FkZXIgdGhhdCBleGVjdXRlcyBpdC4gIE1vc3QgaW1wb3J0YW50bHksIGl0IGFsbG93cyB0aGUKK2ltcG9ydCBtYWNoaW5lcnkgdG8gcGVyZm9ybSB0aGUgYm9pbGVycGxhdGUgb3BlcmF0aW9ucyBvZiBsb2FkaW5nLAord2hlcmVhcyB3aXRob3V0IGEgbW9kdWxlIHNwZWMgdGhlIGxvYWRlciBoYWQgdGhhdCByZXNwb25zaWJpbGl0eS4KIAorU2VlIDpjbGFzczpgfmltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlY2AgZm9yIG1vcmUgc3BlY2lmaWNzIG9uIHdoYXQKK2luZm9ybWF0aW9uIGEgbW9kdWxlJ3Mgc3BlYyBtYXkgaG9sZC4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIF9pbXBvcnQtbW9kLWF0dHJzOgorCitJbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGltcG9ydCBtYWNoaW5lcnkgZmlsbHMgaW4gdGhlc2UgYXR0cmlidXRlcyBvbiBlYWNoIG1vZHVsZSBvYmplY3QKK2R1cmluZyBsb2FkaW5nLCBiYXNlZCBvbiB0aGUgbW9kdWxlJ3Mgc3BlYywgYmVmb3JlIHRoZSBsb2FkZXIgZXhlY3V0ZXMKK3RoZSBtb2R1bGUuCisKKy4uIGF0dHJpYnV0ZTo6IF9fbmFtZV9fCisKKyAgIFRoZSBgYF9fbmFtZV9fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZgorICAgdGhlIG1vZHVsZS4gIFRoaXMgbmFtZSBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBtb2R1bGUgaW4KKyAgIHRoZSBpbXBvcnQgc3lzdGVtLgorCisuLiBhdHRyaWJ1dGU6OiBfX2xvYWRlcl9fCisKKyAgIFRoZSBgYF9fbG9hZGVyX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGxvYWRlciBvYmplY3QgdGhhdAorICAgdGhlIGltcG9ydCBtYWNoaW5lcnkgdXNlZCB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5CisgICBmb3IgaW50cm9zcGVjdGlvbiwgYnV0IGNhbiBiZSB1c2VkIGZvciBhZGRpdGlvbmFsIGxvYWRlci1zcGVjaWZpYworICAgZnVuY3Rpb25hbGl0eSwgZm9yIGV4YW1wbGUgZ2V0dGluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGxvYWRlci4KKworLi4gYXR0cmlidXRlOjogX19wYWNrYWdlX18KKworICAgVGhlIG1vZHVsZSdzIGBgX19wYWNrYWdlX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQuICBJdHMgdmFsdWUgbXVzdAorICAgYmUgYSBzdHJpbmcsIGJ1dCBpdCBjYW4gYmUgdGhlIHNhbWUgdmFsdWUgYXMgaXRzIGBgX19uYW1lX19gYC4gIFdoZW4KKyAgIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBpdHMgYGBfX3BhY2thZ2VfX2BgIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8KKyAgIGl0cyBgYF9fbmFtZV9fYGAuICBXaGVuIHRoZSBtb2R1bGUgaXMgbm90IGEgcGFja2FnZSwgYGBfX3BhY2thZ2VfX2BgCisgICBzaG91bGQgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRvcC1sZXZlbCBtb2R1bGVzLCBvciBmb3IKKyAgIHN1Ym1vZHVsZXMsIHRvIHRoZSBwYXJlbnQgcGFja2FnZSdzIG5hbWUuICBTZWUgOnBlcDpgMzY2YCBmb3IgZnVydGhlcgorICAgZGV0YWlscy4KKworICAgVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBpbnN0ZWFkIG9mIGBgX19uYW1lX19gYCB0byBjYWxjdWxhdGUgZXhwbGljaXQKKyAgIHJlbGF0aXZlIGltcG9ydHMgZm9yIG1haW4gbW9kdWxlcywgYXMgZGVmaW5lZCBpbiA6cGVwOmAzNjZgLgorCisuLiBhdHRyaWJ1dGU6OiBfX3NwZWNfXworCisgICBUaGUgYGBfX3NwZWNfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbW9kdWxlIHNwZWMgdGhhdCB3YXMKKyAgIHVzZWQgd2hlbiBpbXBvcnRpbmcgdGhlIG1vZHVsZS4gIFRoaXMgaXMgdXNlZCBwcmltYXJpbHkgZm9yCisgICBpbnRyb3NwZWN0aW9uIGFuZCBkdXJpbmcgcmVsb2FkaW5nLgorCisuLiBhdHRyaWJ1dGU6OiBfX3BhdGhfXworCisgICBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIG1vZHVsZQorICAgb2JqZWN0J3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIFRoZSB2YWx1ZSBtdXN0IGJlCisgICBpdGVyYWJsZSwgYnV0IG1heSBiZSBlbXB0eSBpZiBgYF9fcGF0aF9fYGAgaGFzIG5vIGZ1cnRoZXIgc2lnbmlmaWNhbmNlLgorICAgSWYgYGBfX3BhdGhfX2BgIGlzIG5vdCBlbXB0eSwgaXQgbXVzdCBwcm9kdWNlIHN0cmluZ3Mgd2hlbiBpdGVyYXRlZAorICAgb3Zlci4gTW9yZSBkZXRhaWxzIG9uIHRoZSBzZW1hbnRpY3Mgb2YgYGBfX3BhdGhfX2BgIGFyZSBnaXZlbgorICAgOnJlZjpgYmVsb3cgPHBhY2thZ2UtcGF0aC1ydWxlcz5gLgorCisgICBOb24tcGFja2FnZSBtb2R1bGVzIHNob3VsZCBub3QgaGF2ZSBhIGBgX19wYXRoX19gYCBhdHRyaWJ1dGUuCisKKy4uIGF0dHJpYnV0ZTo6IF9fZmlsZV9fCisuLiBhdHRyaWJ1dGU6OiBfX2NhY2hlZF9fCisKKyAgIGBgX19maWxlX19gYCBpcyBvcHRpb25hbC4gSWYgc2V0LCB0aGlzIGF0dHJpYnV0ZSdzIHZhbHVlIG11c3QgYmUgYQorICAgc3RyaW5nLiAgVGhlIGltcG9ydCBzeXN0ZW0gbWF5IG9wdCB0byBsZWF2ZSBgYF9fZmlsZV9fYGAgdW5zZXQgaWYgaXQKKyAgIGhhcyBubyBzZW1hbnRpYyBtZWFuaW5nIChlLmcuIGEgbW9kdWxlIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UpLgorCisgICBJZiBgYF9fZmlsZV9fYGAgaXMgc2V0LCBpdCBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSB0byBzZXQgdGhlCisgICBgYF9fY2FjaGVkX19gYCBhdHRyaWJ1dGUgd2hpY2ggaXMgdGhlIHBhdGggdG8gYW55IGNvbXBpbGVkIHZlcnNpb24gb2YKKyAgIHRoZSBjb2RlIChlLmcuIGJ5dGUtY29tcGlsZWQgZmlsZSkuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QKKyAgIHRvIHNldCB0aGlzIGF0dHJpYnV0ZTsgdGhlIHBhdGggY2FuIHNpbXBseSBwb2ludCB0byB3aGVyZSB0aGUKKyAgIGNvbXBpbGVkIGZpbGUgd291bGQgZXhpc3QgKHNlZSA6cGVwOmAzMTQ3YCkuCisKKyAgIEl0IGlzIGFsc28gYXBwcm9wcmlhdGUgdG8gc2V0IGBgX19jYWNoZWRfX2BgIHdoZW4gYGBfX2ZpbGVfX2BgIGlzIG5vdAorICAgc2V0LiAgSG93ZXZlciwgdGhhdCBzY2VuYXJpbyBpcyBxdWl0ZSBhdHlwaWNhbC4gIFVsdGltYXRlbHksIHRoZQorICAgbG9hZGVyIGlzIHdoYXQgbWFrZXMgdXNlIG9mIGBgX19maWxlX19gYCBhbmQvb3IgYGBfX2NhY2hlZF9fYGAuICBTbworICAgaWYgYSBsb2FkZXIgY2FuIGxvYWQgZnJvbSBhIGNhY2hlZCBtb2R1bGUgYnV0IG90aGVyd2lzZSBkb2VzIG5vdCBsb2FkCisgICBmcm9tIGEgZmlsZSwgdGhhdCBhdHlwaWNhbCBzY2VuYXJpbyBtYXkgYmUgYXBwcm9wcmlhdGUuCiAKIC4uIF9wYWNrYWdlLXBhdGgtcnVsZXM6CiAKQEAgLTQ2Miw5ICs1NjgsNDYgQEAKIGF0dHJpYnV0ZSwgYW5kIHRoaXMgd2FzIHR5cGljYWxseSB0aGUgd2F5IG5hbWVzcGFjZSBwYWNrYWdlcyB3ZXJlIGltcGxlbWVudGVkCiBwcmlvciB0byA6cGVwOmA0MjBgLiAgV2l0aCB0aGUgYWRvcHRpb24gb2YgOnBlcDpgNDIwYCwgbmFtZXNwYWNlIHBhY2thZ2VzIG5vCiBsb25nZXIgbmVlZCB0byBzdXBwbHkgYGBfX2luaXRfXy5weWBgIGZpbGVzIGNvbnRhaW5pbmcgb25seSBgYF9fcGF0aF9fYGAKLW1hbmlwdWxhdGlvbiBjb2RlOyB0aGUgbmFtZXNwYWNlIGxvYWRlciBhdXRvbWF0aWNhbGx5IHNldHMgYGBfX3BhdGhfX2BgCittYW5pcHVsYXRpb24gY29kZTsgdGhlIGltcG9ydCBtYWNoaW5lcnkgYXV0b21hdGljYWxseSBzZXRzIGBgX19wYXRoX19gYAogY29ycmVjdGx5IGZvciB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCiAKK01vZHVsZSByZXBycworLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCithdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGluIHRoZSBtb2R1bGUncyBzcGVjLCB5b3UgY2FuIG1vcmUgZXhwbGljaXRseQorY29udHJvbCB0aGUgcmVwciBvZiBtb2R1bGUgb2JqZWN0cy4KKworSWYgdGhlIG1vZHVsZSBoYXMgYSBzcGVjIChgYF9fc3BlY19fYGApLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeQordG8gZ2VuZXJhdGUgYSByZXByIGZyb20gaXQuICBJZiB0aGF0IGZhaWxzIG9yIHRoZXJlIGlzIG5vIHNwZWMsIHRoZSBpbXBvcnQKK3N5c3RlbSB3aWxsIGNyYWZ0IGEgZGVmYXVsdCByZXByIHVzaW5nIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZQorb24gdGhlIG1vZHVsZS4gIEl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgYGBtb2R1bGUuX19uYW1lX19gYCwKK2BgbW9kdWxlLl9fZmlsZV9fYGAsIGFuZCBgYG1vZHVsZS5fX2xvYWRlcl9fYGAgYXMgaW5wdXQgaW50byB0aGUgcmVwciwKK3dpdGggZGVmYXVsdHMgZm9yIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIG1pc3NpbmcuCisKK0hlcmUgYXJlIHRoZSBleGFjdCBydWxlcyB1c2VkOgorCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBhIGBgX19zcGVjX19gYCBhdHRyaWJ1dGUsIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc3BlYworICAgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVwci4gIFRoZSAibmFtZSIsICJsb2FkZXIiLCAib3JpZ2luIiwgYW5kCisgICAiaGFzX2xvY2F0aW9uIiBhdHRyaWJ1dGVzIGFyZSBjb25zdWx0ZWQuCisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSwgdGhpcyBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlCisgICBtb2R1bGUncyByZXByLgorCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBubyBgYF9fZmlsZV9fYGAgYnV0IGRvZXMgaGF2ZSBhIGBgX19sb2FkZXJfX2BgIHRoYXQgaXMgbm90CisgICBgYE5vbmVgYCwgdGhlbiB0aGUgbG9hZGVyJ3MgcmVwciBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG1vZHVsZSdzIHJlcHIuCisKKyAqIE90aGVyd2lzZSwganVzdCB1c2UgdGhlIG1vZHVsZSdzIGBgX19uYW1lX19gYCBpbiB0aGUgcmVwci4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFVzZSBvZiBsb2FkZXIubW9kdWxlX3JlcHIoKSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB0aGUgbW9kdWxlIHNwZWMKKyAgIGlzIG5vdyB1c2VkIGJ5IHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRvIGdlbmVyYXRlIGEgbW9kdWxlIHJlcHIuCisKKyAgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMywgdGhlIG1vZHVsZSByZXByIHdpbGwgYmUKKyAgIGdlbmVyYXRlZCBieSBjYWxsaW5nIHRoZSBsb2FkZXIncyA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kLCBpZgorICAgZGVmaW5lZCwgYmVmb3JlIHRyeWluZyBlaXRoZXIgYXBwcm9hY2ggZGVzY3JpYmVkIGFib3ZlLiAgSG93ZXZlciwgdGhlCisgICBtZXRob2QgaXMgZGVwcmVjYXRlZC4KKwogCiBUaGUgUGF0aCBCYXNlZCBGaW5kZXIKID09PT09PT09PT09PT09PT09PT09PQpAQCAtNTI5LDcgKzY3Miw3IEBACiBub3QgYmUgbGltaXRlZCB0byB0aGlzLgogCiBBcyBhIG1ldGEgcGF0aCBmaW5kZXIsIHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgIGltcGxlbWVudHMgdGhlCi06bWV0aDpgZmluZF9tb2R1bGUoKWAgcHJvdG9jb2wgcHJldmlvdXNseSBkZXNjcmliZWQsIGhvd2V2ZXIgaXQgZXhwb3NlcworOm1ldGg6YGZpbmRfc3BlYygpYCBwcm90b2NvbCBwcmV2aW91c2x5IGRlc2NyaWJlZCwgaG93ZXZlciBpdCBleHBvc2VzCiBhZGRpdGlvbmFsIGhvb2tzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIGhvdyBtb2R1bGVzIGFyZSBmb3VuZCBhbmQKIGxvYWRlZCBmcm9tIHRoZSA6dGVybTpgaW1wb3J0IHBhdGhgLgogCkBAIC01NTEsOCArNjk0LDggQEAKIAogVGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaXMgYSA6dGVybTpgbWV0YSBwYXRoIGZpbmRlcmAsIHNvIHRoZSBpbXBvcnQKIG1hY2hpbmVyeSBiZWdpbnMgdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAgc2VhcmNoIGJ5IGNhbGxpbmcgdGhlIHBhdGgKLWJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QgYXMgZGVzY3JpYmVkIHByZXZpb3VzbHkuICBXaGVuCi10aGUgYGBwYXRoYGAgYXJndW1lbnQgdG8gOm1ldGg6YGZpbmRfbW9kdWxlKClgIGlzIGdpdmVuLCBpdCB3aWxsIGJlIGEKK2Jhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX3NwZWMoKWAgbWV0aG9kIGFzIGRlc2NyaWJlZCBwcmV2aW91c2x5LiAgV2hlbgordGhlIGBgcGF0aGBgIGFyZ3VtZW50IHRvIDptZXRoOmBmaW5kX3NwZWMoKWAgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgYQogbGlzdCBvZiBzdHJpbmcgcGF0aHMgdG8gdHJhdmVyc2UgLSB0eXBpY2FsbHkgYSBwYWNrYWdlJ3MgYGBfX3BhdGhfX2BgCiBhdHRyaWJ1dGUgZm9yIGFuIGltcG9ydCB3aXRoaW4gdGhhdCBwYWNrYWdlLiAgSWYgdGhlIGBgcGF0aGBgIGFyZ3VtZW50CiBpcyBgYE5vbmVgYCwgdGhpcyBpbmRpY2F0ZXMgYSB0b3AgbGV2ZWwgaW1wb3J0IGFuZCA6ZGF0YTpgc3lzLnBhdGhgIGlzIHVzZWQuCkBAIC01ODMsNTEgKzcyNiw3MCBAQAogYXJndW1lbnQsIGl0IHNob3VsZCByYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAuCiAKIElmIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgaXRlcmF0aW9uIGVuZHMgd2l0aCBubyA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgCi1iZWluZyByZXR1cm5lZCwgdGhlbiB0aGUgcGF0aCBiYXNlZCBmaW5kZXIncyA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kCitiZWluZyByZXR1cm5lZCwgdGhlbiB0aGUgcGF0aCBiYXNlZCBmaW5kZXIncyA6bWV0aDpgZmluZF9zcGVjKClgIG1ldGhvZAogd2lsbCBzdG9yZSBgYE5vbmVgYCBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgICh0byBpbmRpY2F0ZSB0aGF0CiB0aGVyZSBpcyBubyBmaW5kZXIgZm9yIHRoaXMgcGF0aCBlbnRyeSkgYW5kIHJldHVybiBgYE5vbmVgYCwgaW5kaWNhdGluZyB0aGF0CiB0aGlzIDp0ZXJtOmBtZXRhIHBhdGggZmluZGVyYCBjb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlLgogCiBJZiBhIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAgKmlzKiByZXR1cm5lZCBieSBvbmUgb2YgdGhlIDp0ZXJtOmBwYXRoIGVudHJ5CiBob29rYCBjYWxsYWJsZXMgb24gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCwgdGhlbiB0aGUgZm9sbG93aW5nIHByb3RvY29sIGlzIHVzZWQKLXRvIGFzayB0aGUgZmluZGVyIGZvciBhIG1vZHVsZSBsb2FkZXIsIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuCi0KK3RvIGFzayB0aGUgZmluZGVyIGZvciBhIG1vZHVsZSBzcGVjLCB3aGljaCBpcyB0aGVuIHVzZWQgd2hlbiBsb2FkaW5nIHRoZQorbW9kdWxlLgogCiBQYXRoIGVudHJ5IGZpbmRlciBwcm90b2NvbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gb3JkZXIgdG8gc3VwcG9ydCBpbXBvcnRzIG9mIG1vZHVsZXMgYW5kIGluaXRpYWxpemVkIHBhY2thZ2VzIGFuZCBhbHNvIHRvCiBjb250cmlidXRlIHBvcnRpb25zIHRvIG5hbWVzcGFjZSBwYWNrYWdlcywgcGF0aCBlbnRyeSBmaW5kZXJzIG11c3QgaW1wbGVtZW50Ci10aGUgOm1ldGg6YGZpbmRfbG9hZGVyKClgIG1ldGhvZC4KK3RoZSA6bWV0aDpgZmluZF9zcGVjKClgIG1ldGhvZC4KIAotOm1ldGg6YGZpbmRfbG9hZGVyKClgIHRha2VzIG9uZSBhcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQotbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSAyLXR1cGxlIHdoZXJlIHRoZQotZmlyc3QgaXRlbSBpcyB0aGUgbG9hZGVyIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgYSBuYW1lc3BhY2UgOnRlcm06YHBvcnRpb25gLgotV2hlbiB0aGUgZmlyc3QgaXRlbSAoaS5lLiB0aGUgbG9hZGVyKSBpcyBgYE5vbmVgYCwgdGhpcyBtZWFucyB0aGF0IHdoaWxlIHRoZQotcGF0aCBlbnRyeSBmaW5kZXIgZG9lcyBub3QgaGF2ZSBhIGxvYWRlciBmb3IgdGhlIG5hbWVkIG1vZHVsZSwgaXQga25vd3MgdGhhdCB0aGUKLXBhdGggZW50cnkgY29udHJpYnV0ZXMgdG8gYSBuYW1lc3BhY2UgcG9ydGlvbiBmb3IgdGhlIG5hbWVkIG1vZHVsZS4gIFRoaXMgd2lsbAotYWxtb3N0IGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVyZSBQeXRob24gaXMgYXNrZWQgdG8gaW1wb3J0IGEgbmFtZXNwYWNlIHBhY2thZ2UKLXRoYXQgaGFzIG5vIHBoeXNpY2FsIHByZXNlbmNlIG9uIHRoZSBmaWxlIHN5c3RlbS4gIFdoZW4gYSBwYXRoIGVudHJ5IGZpbmRlcgotcmV0dXJucyBgYE5vbmVgYCBmb3IgdGhlIGxvYWRlciwgdGhlIHNlY29uZCBpdGVtIG9mIHRoZSAyLXR1cGxlIHJldHVybiB2YWx1ZQotbXVzdCBiZSBhIHNlcXVlbmNlLCBhbHRob3VnaCBpdCBjYW4gYmUgZW1wdHkuCis6bWV0aDpgZmluZF9zcGVjKClgIHRha2VzIG9uZSBhcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQorbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgOm1ldGg6YGZpbmRfc3BlYygpYCByZXR1cm5zIGEgZnVsbHkgcG9wdWxhdGVkCitzcGVjIGZvciB0aGUgbW9kdWxlLiAgVGhpcyBzcGVjIHdpbGwgYWx3YXlzIGhhdmUgImxvYWRlciIgc2V0ICh3aXRoIG9uZQorZXhjZXB0aW9uKS4KIAotSWYgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSBub24tYGBOb25lYGAgbG9hZGVyIHZhbHVlLCB0aGUgcG9ydGlvbiBpcwotaWdub3JlZCBhbmQgdGhlIGxvYWRlciBpcyByZXR1cm5lZCBmcm9tIHRoZSBwYXRoIGJhc2VkIGZpbmRlciwgdGVybWluYXRpbmcKLXRoZSBzZWFyY2ggdGhyb3VnaCB0aGUgcGF0aCBlbnRyaWVzLgorVG8gaW5kaWNhdGUgdG8gdGhlIGltcG9ydCBtYWNoaW5lcnkgdGhhdCB0aGUgc3BlYyByZXByZXNlbnRzIGEgbmFtZXNwYWNlCis6dGVybTpgcG9ydGlvbmAuIHRoZSBwYXRoIGVudHJ5IGZpbmRlciBzZXRzICJsb2FkZXIiIG9uIHRoZSBzcGVjIHRvCitgYE5vbmVgYCBhbmQgInN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIiB0byBhIGxpc3QgY29udGFpbmluZyB0aGUKK3BvcnRpb24uCiAKLUZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW1wb3J0Ci1wcm90b2NvbCwgbWFueSBwYXRoIGVudHJ5IGZpbmRlcnMgYWxzbyBzdXBwb3J0IHRoZSBzYW1lLAotdHJhZGl0aW9uYWwgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCB0aGF0IG1ldGEgcGF0aCBmaW5kZXJzIHN1cHBvcnQuCi1Ib3dldmVyIHBhdGggZW50cnkgZmluZGVyIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2RzIGFyZSBuZXZlciBjYWxsZWQKLXdpdGggYSBgYHBhdGhgYCBhcmd1bWVudCAodGhleSBhcmUgZXhwZWN0ZWQgdG8gcmVjb3JkIHRoZSBhcHByb3ByaWF0ZQotcGF0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbml0aWFsIGNhbGwgdG8gdGhlIHBhdGggaG9vaykuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgZmluZF9zcGVjKCkgcmVwbGFjZWQgZmluZF9sb2FkZXIoKSBhbmQgZmluZF9tb2R1bGUoKSwgYnV0IG9mIHdoaWNoCisgICBhcmUgbm93IGRlcHJlY2F0ZWQsIGJ1dCB3aWxsIGJlIHVzZWQgaWYgZmluZF9zcGVjKCkgaXMgbm90IGRlZmluZWQuCiAKLVRoZSA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIG9uIHBhdGggZW50cnkgZmluZGVycyBpcyBkZXByZWNhdGVkLAotYXMgaXQgZG9lcyBub3QgYWxsb3cgdGhlIHBhdGggZW50cnkgZmluZGVyIHRvIGNvbnRyaWJ1dGUgcG9ydGlvbnMgdG8KLW5hbWVzcGFjZSBwYWNrYWdlcy4gSW5zdGVhZCBwYXRoIGVudHJ5IGZpbmRlcnMgc2hvdWxkIGltcGxlbWVudCB0aGUKLTptZXRoOmBmaW5kX2xvYWRlcigpYCBtZXRob2QgYXMgZGVzY3JpYmVkIGFib3ZlLiBJZiBpdCBleGlzdHMgb24gdGhlIHBhdGgKLWVudHJ5IGZpbmRlciwgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBhbHdheXMgY2FsbCA6bWV0aDpgZmluZF9sb2FkZXIoKWAKLWluIHByZWZlcmVuY2UgdG8gOm1ldGg6YGZpbmRfbW9kdWxlKClgLgorICAgT2xkZXIgcGF0aCBlbnRyeSBmaW5kZXJzIG1heSBpbXBsZW1lbnQgb25lIG9mIHRoZXNlIHR3byBkZXByZWNhdGVkIG1ldGhvZHMKKyAgIGluc3RlYWQgb2YgOm1ldGg6YGZpbmRfc3BlYygpYC4gIFRoZSBtZXRob2RzIGFyZSBzdGlsbCByZXNwZWN0ZWQgZm9yIHRoZQorICAgc2FrZSBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgSG93ZXZldmVyLCBpZiBmaW5kX3NwZWMoKSBpcyBpbXBsZW1lbnRlZAorICAgb24gdGhlIHBhdGggZW50cnkgZmluZGVyLCB0aGUgbGVnYWN5IG1ldGhvZHMgYXJlIGlnbm9yZWQuCisKKyAgIDptZXRoOmBmaW5kX2xvYWRlcigpYCB0YWtlcyBvbmUgYXJndW1lbnQsIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUKKyAgIG1vZHVsZSBiZWluZyBpbXBvcnRlZC4gIDptZXRoOmBmaW5kX2xvYWRlcigpYCByZXR1cm5zIGEgMi10dXBsZSB3aGVyZSB0aGUKKyAgIGZpcnN0IGl0ZW0gaXMgdGhlIGxvYWRlciBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIGEgbmFtZXNwYWNlIDp0ZXJtOmBwb3J0aW9uYC4KKyAgIFdoZW4gdGhlIGZpcnN0IGl0ZW0gKGkuZS4gdGhlIGxvYWRlcikgaXMgYGBOb25lYGAsIHRoaXMgbWVhbnMgdGhhdCB3aGlsZSB0aGUKKyAgIHBhdGggZW50cnkgZmluZGVyIGRvZXMgbm90IGhhdmUgYSBsb2FkZXIgZm9yIHRoZSBuYW1lZCBtb2R1bGUsIGl0IGtub3dzIHRoYXQKKyAgIHRoZSBwYXRoIGVudHJ5IGNvbnRyaWJ1dGVzIHRvIGEgbmFtZXNwYWNlIHBvcnRpb24gZm9yIHRoZSBuYW1lZCBtb2R1bGUuCisgICBUaGlzIHdpbGwgYWxtb3N0IGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVyZSBQeXRob24gaXMgYXNrZWQgdG8gaW1wb3J0IGEKKyAgIG5hbWVzcGFjZSBwYWNrYWdlIHRoYXQgaGFzIG5vIHBoeXNpY2FsIHByZXNlbmNlIG9uIHRoZSBmaWxlIHN5c3RlbS4KKyAgIFdoZW4gYSBwYXRoIGVudHJ5IGZpbmRlciByZXR1cm5zIGBgTm9uZWBgIGZvciB0aGUgbG9hZGVyLCB0aGUgc2Vjb25kCisgICBpdGVtIG9mIHRoZSAyLXR1cGxlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc2VxdWVuY2UsIGFsdGhvdWdoIGl0IGNhbiBiZQorICAgZW1wdHkuCisKKyAgIElmIDptZXRoOmBmaW5kX2xvYWRlcigpYCByZXR1cm5zIGEgbm9uLWBgTm9uZWBgIGxvYWRlciB2YWx1ZSwgdGhlIHBvcnRpb24gaXMKKyAgIGlnbm9yZWQgYW5kIHRoZSBsb2FkZXIgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcGF0aCBiYXNlZCBmaW5kZXIsIHRlcm1pbmF0aW5nCisgICB0aGUgc2VhcmNoIHRocm91Z2ggdGhlIHBhdGggZW50cmllcy4KKworICAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBpbXBvcnQKKyAgIHByb3RvY29sLCBtYW55IHBhdGggZW50cnkgZmluZGVycyBhbHNvIHN1cHBvcnQgdGhlIHNhbWUsCisgICB0cmFkaXRpb25hbCA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIHRoYXQgbWV0YSBwYXRoIGZpbmRlcnMgc3VwcG9ydC4KKyAgIEhvd2V2ZXIgcGF0aCBlbnRyeSBmaW5kZXIgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZHMgYXJlIG5ldmVyIGNhbGxlZAorICAgd2l0aCBhIGBgcGF0aGBgIGFyZ3VtZW50ICh0aGV5IGFyZSBleHBlY3RlZCB0byByZWNvcmQgdGhlIGFwcHJvcHJpYXRlCisgICBwYXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgcGF0aCBob29rKS4KKworICAgVGhlIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2Qgb24gcGF0aCBlbnRyeSBmaW5kZXJzIGlzIGRlcHJlY2F0ZWQsCisgICBhcyBpdCBkb2VzIG5vdCBhbGxvdyB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgdG8gY29udHJpYnV0ZSBwb3J0aW9ucyB0bworICAgbmFtZXNwYWNlIHBhY2thZ2VzLiAgSWYgYm90aCA6bWV0aDpgZmluZF9sb2FkZXIoKWAgYW5kIDptZXRoOmBmaW5kX21vZHVsZSgpYAorICAgZXhpc3Qgb24gYSBwYXRoIGVudHJ5IGZpbmRlciwgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBhbHdheXMgY2FsbAorICAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIGluIHByZWZlcmVuY2UgdG8gOm1ldGg6YGZpbmRfbW9kdWxlKClgLgogCiAKIFJlcGxhY2luZyB0aGUgc3RhbmRhcmQgaW1wb3J0IHN5c3RlbQpAQCAtNjQ2LDcgKzgwOCw3IEBACiBUbyBzZWxlY3RpdmVseSBwcmV2ZW50IGltcG9ydCBvZiBzb21lIG1vZHVsZXMgZnJvbSBhIGhvb2sgZWFybHkgb24gdGhlCiBtZXRhIHBhdGggKHJhdGhlciB0aGFuIGRpc2FibGluZyB0aGUgc3RhbmRhcmQgaW1wb3J0IHN5c3RlbSBlbnRpcmVseSksCiBpdCBpcyBzdWZmaWNpZW50IHRvIHJhaXNlIDpleGM6YEltcG9ydEVycm9yYCBkaXJlY3RseSBmcm9tCi06bWV0aDpgZmluZF9tb2R1bGVgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGBgTm9uZWBgLiBUaGUgbGF0dGVyIGluZGljYXRlcworOm1ldGg6YGZpbmRfc3BlY2AgaW5zdGVhZCBvZiByZXR1cm5pbmcgYGBOb25lYGAuIFRoZSBsYXR0ZXIgaW5kaWNhdGVzCiB0aGF0IHRoZSBtZXRhIHBhdGggc2VhcmNoIHNob3VsZCBjb250aW51ZS4gd2hpbGUgcmFpc2luZyBhbiBleGNlcHRpb24KIHRlcm1pbmF0ZXMgaXQgaW1tZWRpYXRlbHkuCiAKQEAgLTY4OCw2ICs4NTAsMTEgQEAKIAogOnBlcDpgMzM4YCBkZWZpbmVzIGV4ZWN1dGluZyBtb2R1bGVzIGFzIHNjcmlwdHMuCiAKKzpwZXA6YDQ1MWAgYWRkcyB0aGUgZW5jYXBzdWxhdGlvbiBvZiBwZXItbW9kdWxlIGltcG9ydCBzdGF0ZSBpbiBzcGVjCitvYmplY3RzLiAgSXQgYWxzbyBvZmYtbG9hZHMgbW9zdCBvZiB0aGUgYm9pbGVycGxhdGUgcmVzcG9uc2liaWxpdGllcyBvZgorbG9hZGVycyBiYWNrIG9udG8gdGhlIGltcG9ydCBtYWNoaW5lcnkuICBUaGVzZSBjaGFuZ2VzIGFsbG93IHRoZQorZGVwcmVjYXRpb24gb2Ygc2V2ZXJhbCBBUElzIGluIHRoZSBpbXBvcnQgc3lzdGVtIGFuZCBhbHNvIGFkZGl0aW9uIG9mIG5ldworbWV0aG9kcyB0byBmaW5kZXJzIGFuZCBsb2FkZXJzLgogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbCBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKaW5kZXggYTBlYzMyZi4uZWQ1ZGEwYyAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCkBAIC0zLDcgKzMsNyBAQAogCSAgICA8aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgogCSAgICA8dWw+CiAJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi43LyI+UHl0aG9uIDIuNyAoc3RhYmxlKTwvYT48L2xpPgotCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC8iPlB5dGhvbiAzLjQgKGluIGRldmVsb3BtZW50KTwvYT48L2xpPgorCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy8iPlB5dGhvbiAzLjMgKHN0YWJsZSk8L2E+PC9saT4KICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvdmVyc2lvbnMvIj5PbGQgdmVyc2lvbnM8L2E+PC9saT4KICAgICAgICAgICAgIDwvdWw+CiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weSBiL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQppbmRleCAzODhmZTNhLi4yYjVkZTE0IDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CkBAIC0xMCw3ICsxMCw3IEBACiAiIiIKIAogSVNTVUVfVVJJID0gJ2h0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUlcycKLVNPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuMy8lcycKK1NPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlL2RlZmF1bHQvJXMnCiAKIGZyb20gZG9jdXRpbHMgaW1wb3J0IG5vZGVzLCB1dGlscwogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKaW5kZXggZjEyNGZmMi4uNjdhZDAxZiAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgpAQCAtMTQxLDE1ICsxNDEsOCBAQAogbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLCw6cG9ydCxob3N0OnBvcnQKIGxpYnJhcnkvbW1hcCwsOmkyLG9ialtpMTppMl0KIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgQWRkIG1vcmUgdGFza3MgdXNpbmcgYHB1dCgpYAotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBIHRlc3QgZmlsZSBmb3IgdGhlIGBtdWx0aXByb2Nlc3NpbmdgIHBhY2thZ2UKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgQSB0ZXN0IG9mIGBtdWx0aXByb2Nlc3NpbmcuUG9vbGAgY2xhc3MKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgYEJhc2VNYW5hZ2VyYC4KLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgaW4gdGhlIG9yaWdpbmFsIG9yZGVyIHRoZW4gY29uc2lkZXIgdXNpbmcgYFBvb2wubWFwKClgIG9yCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwiPj4+IGwuX2NhbGxtZXRob2QoJ19fZ2V0aXRlbV9fJywgKDIwLCkpICAgICAjIGVxdWl2IHRvIGBsWzIwXWAiCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwiPj4+IGwuX2NhbGxtZXRob2QoJ19fZ2V0c2xpY2VfXycsICgyLCA3KSkgICAjIGVxdWl2IHRvIGBsWzI6N11gIgotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgc3luY2hyb25pemUgYWNjZXNzIHRvIGBzb2NrZXQuYWNjZXB0KClgIG1ldGhvZCBieQotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBvYmplY3QuICAoV2UgaW1wb3J0IGBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uYCB0byBlbmFibGUgdGhpcyBwaWNrbGluZy4pCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIGBQb29sLmltYXAoKWAgKHdoaWNoIHdpbGwgc2F2ZSBvbiB0aGUgYW1vdW50IG9mIGNvZGUgbmVlZGVkIGFueXdheSkuCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsOnF1ZXVlLCI+Pj4gUXVldWVNYW5hZ2VyLnJlZ2lzdGVyKCdnZXRfcXVldWUnLCBjYWxsYWJsZT1sYW1iZGE6cXVldWUpIgogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBmKClgIGFuZCBgZygpYCBhY2Nlc3NpYmxlIHZpYSBwcm94eQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBnKClgIGFuZCBgX2goKWAgYWNjZXNzaWJsZSB2aWEgcHJveHkKQEAgLTE1OCwyMCArMTUxLDE2IEBACiBsaWJyYXJ5L25udHBsaWIsLDpsaW5lcyw6bGluZXMKIGxpYnJhcnkvb3B0cGFyc2UsLDpsZW4sImRlbCBwYXJzZXIucmFyZ3NbOmxlbih2YWx1ZSldIgogbGlicmFyeS9vcy5wYXRoLCw6Zm9vLGM6Zm9vCitsaWJyYXJ5L3BhdGhsaWIsLDpiYXIsIj4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnLCAnZDpiYXInKSIKK2xpYnJhcnkvcGF0aGxpYiwsOmJhcixQdXJlV2luZG93c1BhdGgoJ2Q6YmFyJykKK2xpYnJhcnkvcGF0aGxpYiwsOlByb2dyYW0sPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLnJvb3QKK2xpYnJhcnkvcGF0aGxpYiwsOlByb2dyYW0sPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLmFuY2hvcgogbGlicmFyeS9wZGIsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vCiBsaWJyYXJ5L3BpY2tsZSwsOm1lbW9yeSwiY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgiIjptZW1vcnk6IiIpIgogbGlicmFyeS9wb3NpeCwsYCwiQ0ZMQUdTPSIiYGdldGNvbmYgTEZTX0NGTEFHU2AiIiBPUFQ9IiItZyAtTzIgJENGTEFHUyIiIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMgOjogUHl0aG9uIE1vZHVsZXMnXSwiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMiA6OiBPbmx5J10sIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgogbGlicmFyeS9wcm9maWxlLCw6bGluZW5vLGZpbGVuYW1lOmxpbmVubyhmdW5jdGlvbikKIGxpYnJhcnkvcHlleHBhdCwsOmVsZW0xLDxweTplbGVtMSAvPgogbGlicmFyeS9weWV4cGF0LCw6cHksInhtbG5zOnB5ID0gIiJodHRwOi8vd3d3LnB5dGhvbi5vcmcvbnMvIiI+IgpAQCAtMTgzLDYgKzE3Miw3IEBACiBsaWJyYXJ5L3NxbGl0ZTMsLDphZ2UsImN1ci5leGVjdXRlKCIic2VsZWN0ICogZnJvbSBwZW9wbGUgd2hlcmUgbmFtZV9sYXN0PTp3aG8gYW5kIGFnZT06YWdlIiIsIHsiIndobyIiOiB3aG8sICIiYWdlIiI6IGFnZX0pIgogbGlicmFyeS9zcWxpdGUzLCw6bWVtb3J5LAogbGlicmFyeS9zcWxpdGUzLCw6d2hvLCJjdXIuZXhlY3V0ZSgiInNlbGVjdCAqIGZyb20gcGVvcGxlIHdoZXJlIG5hbWVfbGFzdD06d2hvIGFuZCBhZ2U9OmFnZSIiLCB7IiJ3aG8iIjogd2hvLCAiImFnZSIiOiBhZ2V9KSIKK2xpYnJhcnkvc3FsaXRlMywsOnBhdGgsImRiID0gc3FsaXRlMy5jb25uZWN0KCdmaWxlOnBhdGgvdG8vZGF0YWJhc2U/bW9kZT1ybycsIHVyaT1UcnVlKSIKIGxpYnJhcnkvc3NsLCw6TXksIk9yZ2FuaXphdGlvbmFsIFVuaXQgTmFtZSAoZWcsIHNlY3Rpb24pIFtdOk15IEdyb3VwIgogbGlicmFyeS9zc2wsLDpNeSwiT3JnYW5pemF0aW9uIE5hbWUgKGVnLCBjb21wYW55KSBbSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkXTpNeSBPcmdhbml6YXRpb24sIEluYy4iCiBsaWJyYXJ5L3NzbCwsOm15c2VydmVyLCJDb21tb24gTmFtZSAoZWcsIFlPVVIgbmFtZSkgW106bXlzZXJ2ZXIubXlncm91cC5teW9yZ2FuaXphdGlvbi5jb20iCkBAIC0yMDcsNyArMTk3LDEyIEBACiBsaWJyYXJ5L3RhcmZpbGUsLDp4eiwndzp4eicKIGxpYnJhcnkvdGltZSwsOm1tLAogbGlicmFyeS90aW1lLCw6c3MsCitsaWJyYXJ5L3RyYWNlbWFsbG9jLCw6bGltaXQsImZvciBpbmRleCwgc3RhdCBpbiBlbnVtZXJhdGUodG9wX3N0YXRzWzpsaW1pdF0sIDEpOiIKIGxpYnJhcnkvdHVydGxlLCw6OixFeGFtcGxlOjoKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6Zm9vLCJzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywiCitsaWJyYXJ5L3VuaXR0ZXN0LDE0MTIsOmZpcnN0LCJzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywiCitsaWJyYXJ5L3VuaXR0ZXN0LDE0MTIsOmZvbywnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQorbGlicmFyeS91bml0dGVzdCwxNDEyLDpzZWNvbmQsJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpjbG9zZSxDb25uZWN0aW9uOmNsb3NlCiBsaWJyYXJ5L3VybGxpYi5yZXF1ZXN0LCw6bGFuZywieG1sbnM9IiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiIgeG1sOmxhbmc9IiJlbiIiIGxhbmc9IiJlbiIiPlxuXG48aGVhZD5cbiIKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpwYXNzd29yZCwiIiJqb2U6cGFzc3dvcmRAcHl0aG9uLm9yZyIiIgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdCBiL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKaW5kZXggMzZhY2IwNi4uYWJmMzBmMCAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CkBAIC03LDE0MCArNywyNyBAQAogU29tZSB2ZXJzaW9ucyBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHN1cHBvcnQgZWRpdGluZyBvZiB0aGUgY3VycmVudCBpbnB1dAogbGluZSBhbmQgaGlzdG9yeSBzdWJzdGl0dXRpb24sIHNpbWlsYXIgdG8gZmFjaWxpdGllcyBmb3VuZCBpbiB0aGUgS29ybiBzaGVsbCBhbmQKIHRoZSBHTlUgQmFzaCBzaGVsbC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGBHTlUgUmVhZGxpbmVgXyBsaWJyYXJ5LAotd2hpY2ggc3VwcG9ydHMgRW1hY3Mtc3R5bGUgYW5kIHZpLXN0eWxlIGVkaXRpbmcuICBUaGlzIGxpYnJhcnkgaGFzIGl0cyBvd24KLWRvY3VtZW50YXRpb24gd2hpY2ggSSB3b24ndCBkdXBsaWNhdGUgaGVyZTsgaG93ZXZlciwgdGhlIGJhc2ljcyBhcmUgZWFzaWx5Ci1leHBsYWluZWQuICBUaGUgaW50ZXJhY3RpdmUgZWRpdGluZyBhbmQgaGlzdG9yeSBkZXNjcmliZWQgaGVyZSBhcmUgb3B0aW9uYWxseQotYXZhaWxhYmxlIGluIHRoZSBVbml4IGFuZCBDeWd3aW4gdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLgotCi1UaGlzIGNoYXB0ZXIgZG9lcyAqbm90KiBkb2N1bWVudCB0aGUgZWRpdGluZyBmYWNpbGl0aWVzIG9mIE1hcmsgSGFtbW9uZCdzCi1QeXRob25XaW4gcGFja2FnZSBvciB0aGUgVGstYmFzZWQgZW52aXJvbm1lbnQsIElETEUsIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uLgotVGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5IHJlY2FsbCB3aGljaCBvcGVyYXRlcyB3aXRoaW4gRE9TIGJveGVzIG9uIE5UIGFuZCBzb21lCi1vdGhlciBET1MgYW5kIFdpbmRvd3MgZmxhdm9ycyAgaXMgeWV0IGFub3RoZXIgYmVhc3QuCi0KLQotLi4gX3R1dC1saW5lZWRpdGluZzoKLQotTGluZSBFZGl0aW5nCi09PT09PT09PT09PT0KLQotSWYgc3VwcG9ydGVkLCBpbnB1dCBsaW5lIGVkaXRpbmcgaXMgYWN0aXZlIHdoZW5ldmVyIHRoZSBpbnRlcnByZXRlciBwcmludHMgYQotcHJpbWFyeSBvciBzZWNvbmRhcnkgcHJvbXB0LiAgVGhlIGN1cnJlbnQgbGluZSBjYW4gYmUgZWRpdGVkIHVzaW5nIHRoZQotY29udmVudGlvbmFsIEVtYWNzIGNvbnRyb2wgY2hhcmFjdGVycy4gIFRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGVzZSBhcmU6Ci06a2JkOmBDLUFgIChDb250cm9sLUEpIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSwgOmtiZDpgQy1FYAotdG8gdGhlIGVuZCwgOmtiZDpgQy1CYCBtb3ZlcyBpdCBvbmUgcG9zaXRpb24gdG8gdGhlIGxlZnQsIDprYmQ6YEMtRmAgdG8gdGhlCi1yaWdodC4gIEJhY2tzcGFjZSBlcmFzZXMgdGhlIGNoYXJhY3RlciB0byB0aGUgbGVmdCBvZiB0aGUgY3Vyc29yLCA6a2JkOmBDLURgIHRoZQotY2hhcmFjdGVyIHRvIGl0cyByaWdodC4gOmtiZDpgQy1LYCBraWxscyAoZXJhc2VzKSB0aGUgcmVzdCBvZiB0aGUgbGluZSB0byB0aGUKLXJpZ2h0IG9mIHRoZSBjdXJzb3IsIDprYmQ6YEMtWWAgeWFua3MgYmFjayB0aGUgbGFzdCBraWxsZWQgc3RyaW5nLgotOmtiZDpgQy11bmRlcnNjb3JlYCB1bmRvZXMgdGhlIGxhc3QgY2hhbmdlIHlvdSBtYWRlOyBpdCBjYW4gYmUgcmVwZWF0ZWQgZm9yCi1jdW11bGF0aXZlIGVmZmVjdC4KLQotCi0uLiBfdHV0LWhpc3Rvcnk6Ci0KLUhpc3RvcnkgU3Vic3RpdHV0aW9uCi09PT09PT09PT09PT09PT09PT09PQotCi1IaXN0b3J5IHN1YnN0aXR1dGlvbiB3b3JrcyBhcyBmb2xsb3dzLiAgQWxsIG5vbi1lbXB0eSBpbnB1dCBsaW5lcyBpc3N1ZWQgYXJlCi1zYXZlZCBpbiBhIGhpc3RvcnkgYnVmZmVyLCBhbmQgd2hlbiBhIG5ldyBwcm9tcHQgaXMgZ2l2ZW4geW91IGFyZSBwb3NpdGlvbmVkIG9uCi1hIG5ldyBsaW5lIGF0IHRoZSBib3R0b20gb2YgdGhpcyBidWZmZXIuIDprYmQ6YEMtUGAgbW92ZXMgb25lIGxpbmUgdXAgKGJhY2spIGluCi10aGUgaGlzdG9yeSBidWZmZXIsIDprYmQ6YEMtTmAgbW92ZXMgb25lIGRvd24uICBBbnkgbGluZSBpbiB0aGUgaGlzdG9yeSBidWZmZXIKLWNhbiBiZSBlZGl0ZWQ7IGFuIGFzdGVyaXNrIGFwcGVhcnMgaW4gZnJvbnQgb2YgdGhlIHByb21wdCB0byBtYXJrIGEgbGluZSBhcwotbW9kaWZpZWQuICBQcmVzc2luZyB0aGUgOmtiZDpgUmV0dXJuYCBrZXkgcGFzc2VzIHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlCi1pbnRlcnByZXRlci4gIDprYmQ6YEMtUmAgc3RhcnRzIGFuIGluY3JlbWVudGFsIHJldmVyc2Ugc2VhcmNoOyA6a2JkOmBDLVNgIHN0YXJ0cwotYSBmb3J3YXJkIHNlYXJjaC4KK3doaWNoIHN1cHBvcnRzIHZhcmlvdXMgc3R5bGVzIG9mIGVkaXRpbmcuICBUaGlzIGxpYnJhcnkgaGFzIGl0cyBvd24KK2RvY3VtZW50YXRpb24gd2hpY2ggd2Ugd29uJ3QgZHVwbGljYXRlIGhlcmUuCiAKIAogLi4gX3R1dC1rZXliaW5kaW5nczoKIAotS2V5IEJpbmRpbmdzCi09PT09PT09PT09PT0KK1RhYiBDb21wbGV0aW9uIGFuZCBIaXN0b3J5IEVkaXRpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGtleSBiaW5kaW5ncyBhbmQgc29tZSBvdGhlciBwYXJhbWV0ZXJzIG9mIHRoZSBSZWFkbGluZSBsaWJyYXJ5IGNhbiBiZQotY3VzdG9taXplZCBieSBwbGFjaW5nIGNvbW1hbmRzIGluIGFuIGluaXRpYWxpemF0aW9uIGZpbGUgY2FsbGVkCi06ZmlsZTpgfi8uaW5wdXRyY2AuICBLZXkgYmluZGluZ3MgaGF2ZSB0aGUgZm9ybSA6OgotCi0gICBrZXktbmFtZTogZnVuY3Rpb24tbmFtZQotCi1vciA6OgotCi0gICAic3RyaW5nIjogZnVuY3Rpb24tbmFtZQotCi1hbmQgb3B0aW9ucyBjYW4gYmUgc2V0IHdpdGggOjoKLQotICAgc2V0IG9wdGlvbi1uYW1lIHZhbHVlCi0KLUZvciBleGFtcGxlOjoKLQotICAgIyBJIHByZWZlciB2aS1zdHlsZSBlZGl0aW5nOgotICAgc2V0IGVkaXRpbmctbW9kZSB2aQotCi0gICAjIEVkaXQgdXNpbmcgYSBzaW5nbGUgbGluZToKLSAgIHNldCBob3Jpem9udGFsLXNjcm9sbC1tb2RlIE9uCi0KLSAgICMgUmViaW5kIHNvbWUga2V5czoKLSAgIE1ldGEtaDogYmFja3dhcmQta2lsbC13b3JkCi0gICAiXEMtdSI6IHVuaXZlcnNhbC1hcmd1bWVudAotICAgIlxDLXhcQy1yIjogcmUtcmVhZC1pbml0LWZpbGUKLQotTm90ZSB0aGF0IHRoZSBkZWZhdWx0IGJpbmRpbmcgZm9yIDprYmQ6YFRhYmAgaW4gUHl0aG9uIGlzIHRvIGluc2VydCBhIDprYmQ6YFRhYmAKLWNoYXJhY3RlciBpbnN0ZWFkIG9mIFJlYWRsaW5lJ3MgZGVmYXVsdCBmaWxlbmFtZSBjb21wbGV0aW9uIGZ1bmN0aW9uLiAgSWYgeW91Ci1pbnNpc3QsIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSBwdXR0aW5nIDo6Ci0KLSAgIFRhYjogY29tcGxldGUKLQotaW4geW91ciA6ZmlsZTpgfi8uaW5wdXRyY2AuICAoT2YgY291cnNlLCB0aGlzIG1ha2VzIGl0IGhhcmRlciB0byB0eXBlIGluZGVudGVkCi1jb250aW51YXRpb24gbGluZXMgaWYgeW91J3JlIGFjY3VzdG9tZWQgdG8gdXNpbmcgOmtiZDpgVGFiYCBmb3IgdGhhdCBwdXJwb3NlLikKLQotLi4gaW5kZXg6OgotICAgbW9kdWxlOiBybGNvbXBsZXRlcgotICAgbW9kdWxlOiByZWFkbGluZQotCi1BdXRvbWF0aWMgY29tcGxldGlvbiBvZiB2YXJpYWJsZSBhbmQgbW9kdWxlIG5hbWVzIGlzIG9wdGlvbmFsbHkgYXZhaWxhYmxlLiAgVG8KLWVuYWJsZSBpdCBpbiB0aGUgaW50ZXJwcmV0ZXIncyBpbnRlcmFjdGl2ZSBtb2RlLCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyCi1zdGFydHVwIGZpbGU6IFsjXV8gIDo6Ci0KLSAgIGltcG9ydCBybGNvbXBsZXRlciwgcmVhZGxpbmUKLSAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCd0YWI6IGNvbXBsZXRlJykKLQotVGhpcyBiaW5kcyB0aGUgOmtiZDpgVGFiYCBrZXkgdG8gdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24sIHNvIGhpdHRpbmcgdGhlCi06a2JkOmBUYWJgIGtleSB0d2ljZSBzdWdnZXN0cyBjb21wbGV0aW9uczsgaXQgbG9va3MgYXQgUHl0aG9uIHN0YXRlbWVudCBuYW1lcywKLXRoZSBjdXJyZW50IGxvY2FsIHZhcmlhYmxlcywgYW5kIHRoZSBhdmFpbGFibGUgbW9kdWxlIG5hbWVzLiAgRm9yIGRvdHRlZAotZXhwcmVzc2lvbnMgc3VjaCBhcyBgYHN0cmluZy5hYGAsIGl0IHdpbGwgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gdXAgdG8gdGhlCi1maW5hbCBgYCcuJ2BgIGFuZCB0aGVuIHN1Z2dlc3QgY29tcGxldGlvbnMgZnJvbSB0aGUgYXR0cmlidXRlcyBvZiB0aGUgcmVzdWx0aW5nCi1vYmplY3QuICBOb3RlIHRoYXQgdGhpcyBtYXkgZXhlY3V0ZSBhcHBsaWNhdGlvbi1kZWZpbmVkIGNvZGUgaWYgYW4gb2JqZWN0IHdpdGggYQotOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QgaXMgcGFydCBvZiB0aGUgZXhwcmVzc2lvbi4KLQotQSBtb3JlIGNhcGFibGUgc3RhcnR1cCBmaWxlIG1pZ2h0IGxvb2sgbGlrZSB0aGlzIGV4YW1wbGUuICBOb3RlIHRoYXQgdGhpcwotZGVsZXRlcyB0aGUgbmFtZXMgaXQgY3JlYXRlcyBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQ7IHRoaXMgaXMgZG9uZSBzaW5jZQotdGhlIHN0YXJ0dXAgZmlsZSBpcyBleGVjdXRlZCBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgdGhlIGludGVyYWN0aXZlIGNvbW1hbmRzLAotYW5kIHJlbW92aW5nIHRoZSBuYW1lcyBhdm9pZHMgY3JlYXRpbmcgc2lkZSBlZmZlY3RzIGluIHRoZSBpbnRlcmFjdGl2ZQotZW52aXJvbm1lbnQuICBZb3UgbWF5IGZpbmQgaXQgY29udmVuaWVudCB0byBrZWVwIHNvbWUgb2YgdGhlIGltcG9ydGVkIG1vZHVsZXMsCi1zdWNoIGFzIDptb2Q6YG9zYCwgd2hpY2ggdHVybiBvdXQgdG8gYmUgbmVlZGVkIGluIG1vc3Qgc2Vzc2lvbnMgd2l0aCB0aGUKLWludGVycHJldGVyLiA6OgotCi0gICAjIEFkZCBhdXRvLWNvbXBsZXRpb24gYW5kIGEgc3RvcmVkIGhpc3RvcnkgZmlsZSBvZiBjb21tYW5kcyB0byB5b3VyIFB5dGhvbgotICAgIyBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4gUmVxdWlyZXMgUHl0aG9uIDIuMCssIHJlYWRsaW5lLiBBdXRvY29tcGxldGUgaXMKLSAgICMgYm91bmQgdG8gdGhlIEVzYyBrZXkgYnkgZGVmYXVsdCAoeW91IGNhbiBjaGFuZ2UgaXQgLSBzZWUgcmVhZGxpbmUgZG9jcykuCi0gICAjCi0gICAjIFN0b3JlIHRoZSBmaWxlIGluIH4vLnB5c3RhcnR1cCwgYW5kIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2ludAotICAgIyB0byBpdDogICJleHBvcnQgUFlUSE9OU1RBUlRVUD1+Ly5weXN0YXJ0dXAiIGluIGJhc2guCi0KLSAgIGltcG9ydCBhdGV4aXQKLSAgIGltcG9ydCBvcwotICAgaW1wb3J0IHJlYWRsaW5lCi0gICBpbXBvcnQgcmxjb21wbGV0ZXIKLQotICAgaGlzdG9yeVBhdGggPSBvcy5wYXRoLmV4cGFuZHVzZXIoIn4vLnB5aGlzdG9yeSIpCi0KLSAgIGRlZiBzYXZlX2hpc3RvcnkoaGlzdG9yeVBhdGg9aGlzdG9yeVBhdGgpOgotICAgICAgIGltcG9ydCByZWFkbGluZQotICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZShoaXN0b3J5UGF0aCkKLQotICAgaWYgb3MucGF0aC5leGlzdHMoaGlzdG9yeVBhdGgpOgotICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RvcnlQYXRoKQotCi0gICBhdGV4aXQucmVnaXN0ZXIoc2F2ZV9oaXN0b3J5KQotICAgZGVsIG9zLCBhdGV4aXQsIHJlYWRsaW5lLCBybGNvbXBsZXRlciwgc2F2ZV9oaXN0b3J5LCBoaXN0b3J5UGF0aAorQ29tcGxldGlvbiBvZiB2YXJpYWJsZSBhbmQgbW9kdWxlIG5hbWVzIGlzCis6cmVmOmBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgPHJsY29tcGxldGVyLWNvbmZpZz5gIGF0IGludGVycHJldGVyIHN0YXJ0dXAgc28KK3RoYXQgdGhlIDprYmQ6YFRhYmAga2V5IGludm9rZXMgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb247IGl0IGxvb2tzIGF0CitQeXRob24gc3RhdGVtZW50IG5hbWVzLCB0aGUgY3VycmVudCBsb2NhbCB2YXJpYWJsZXMsIGFuZCB0aGUgYXZhaWxhYmxlCittb2R1bGUgbmFtZXMuICBGb3IgZG90dGVkIGV4cHJlc3Npb25zIHN1Y2ggYXMgYGBzdHJpbmcuYWBgLCBpdCB3aWxsIGV2YWx1YXRlCit0aGUgZXhwcmVzc2lvbiB1cCB0byB0aGUgZmluYWwgYGAnLidgYCBhbmQgdGhlbiBzdWdnZXN0IGNvbXBsZXRpb25zIGZyb20KK3RoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcgb2JqZWN0LiAgTm90ZSB0aGF0IHRoaXMgbWF5IGV4ZWN1dGUKK2FwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBpZiBhbiBvYmplY3Qgd2l0aCBhIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kCitpcyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uLiAgVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBhbHNvIHNhdmVzIHlvdXIKK2hpc3RvcnkgaW50byBhIGZpbGUgbmFtZWQgOmZpbGU6YC5weXRob25faGlzdG9yeWAgaW4geW91ciB1c2VyIGRpcmVjdG9yeS4KK1RoZSBoaXN0b3J5IHdpbGwgYmUgYXZhaWxhYmxlIGFnYWluIGR1cmluZyB0aGUgbmV4dCBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcgorc2Vzc2lvbi4KIAogCiAuLiBfdHV0LWNvbW1lbnRhcnk6CkBAIC0xNjIsMTQgKzQ5LDYgQEAKIGJweXRob25fLgogCiAKLS4uIHJ1YnJpYzo6IEZvb3Rub3RlcwotCi0uLiBbI10gUHl0aG9uIHdpbGwgZXhlY3V0ZSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGlkZW50aWZpZWQgYnkgdGhlCi0gICA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHlvdSBzdGFydCBhbiBpbnRlcmFjdGl2ZQotICAgaW50ZXJwcmV0ZXIuICBUbyBjdXN0b21pemUgUHl0aG9uIGV2ZW4gZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBzZWUKLSAgIDpyZWY6YHR1dC1jdXN0b21pemVgLgotCi0KIC4uIF9HTlUgUmVhZGxpbmU6IGh0dHA6Ly90aXN3d3cuY2FzZS5lZHUvcGhwL2NoZXQvcmVhZGxpbmUvcmx0b3AuaHRtbAogLi4gX0lQeXRob246IGh0dHA6Ly9pcHl0aG9uLnNjaXB5Lm9yZy8KIC4uIF9icHl0aG9uOiBodHRwOi8vd3d3LmJweXRob24taW50ZXJwcmV0ZXIub3JnLwpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdCBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKaW5kZXggY2RjMmJmMi4uYzE4MjUxMSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CkBAIC0xMCwxMyArMTAsMTMgQEAKIEludm9raW5nIHRoZSBJbnRlcnByZXRlcgogPT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgdXN1YWxseSBpbnN0YWxsZWQgYXMgOmZpbGU6YC91c3IvbG9jYWwvYmluL3B5dGhvbjMuM2AKK1RoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgdXN1YWxseSBpbnN0YWxsZWQgYXMgOmZpbGU6YC91c3IvbG9jYWwvYmluL3B5dGhvbjMuNGAKIG9uIHRob3NlIG1hY2hpbmVzIHdoZXJlIGl0IGlzIGF2YWlsYWJsZTsgcHV0dGluZyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW5gIGluIHlvdXIKIFVuaXggc2hlbGwncyBzZWFyY2ggcGF0aCBtYWtlcyBpdCBwb3NzaWJsZSB0byBzdGFydCBpdCBieSB0eXBpbmcgdGhlIGNvbW1hbmQ6CiAKIC4uIGNvZGUtYmxvY2s6OiB0ZXh0CiAKLSAgIHB5dGhvbjMuMworICAgcHl0aG9uMy40CiAKIHRvIHRoZSBzaGVsbC4gWyNdXyBTaW5jZSB0aGUgY2hvaWNlIG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGludGVycHJldGVyIGxpdmVzCiBpcyBhbiBpbnN0YWxsYXRpb24gb3B0aW9uLCBvdGhlciBwbGFjZXMgYXJlIHBvc3NpYmxlOyBjaGVjayB3aXRoIHlvdXIgbG9jYWwKQEAgLTI0LDExICsyNCwxMSBAQAogcG9wdWxhciBhbHRlcm5hdGl2ZSBsb2NhdGlvbi4pCiAKIE9uIFdpbmRvd3MgbWFjaGluZXMsIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIGlzIHVzdWFsbHkgcGxhY2VkIGluCi06ZmlsZTpgQzpcXFB5dGhvbjMzYCwgdGhvdWdoIHlvdSBjYW4gY2hhbmdlIHRoaXMgd2hlbiB5b3UncmUgcnVubmluZyB0aGUKKzpmaWxlOmBDOlxcUHl0aG9uMzRgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQogaW5zdGFsbGVyLiAgVG8gYWRkIHRoaXMgZGlyZWN0b3J5IHRvIHlvdXIgcGF0aCwgIHlvdSBjYW4gdHlwZSB0aGUgZm9sbG93aW5nCiBjb21tYW5kIGludG8gdGhlIGNvbW1hbmQgcHJvbXB0IGluIGEgRE9TIGJveDo6CiAKLSAgIHNldCBwYXRoPSVwYXRoJTtDOlxweXRob24zMworICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjM0CiAKIFR5cGluZyBhbiBlbmQtb2YtZmlsZSBjaGFyYWN0ZXIgKDprYmQ6YENvbnRyb2wtRGAgb24gVW5peCwgOmtiZDpgQ29udHJvbC1aYCBvbgogV2luZG93cykgYXQgdGhlIHByaW1hcnkgcHJvbXB0IGNhdXNlcyB0aGUgaW50ZXJwcmV0ZXIgdG8gZXhpdCB3aXRoIGEgemVybyBleGl0CkBAIC05NSw4ICs5NSw4IEBACiBwcmludHMgYSB3ZWxjb21lIG1lc3NhZ2Ugc3RhdGluZyBpdHMgdmVyc2lvbiBudW1iZXIgYW5kIGEgY29weXJpZ2h0IG5vdGljZQogYmVmb3JlIHByaW50aW5nIHRoZSBmaXJzdCBwcm9tcHQ6OgogCi0gICAkIHB5dGhvbjMuMwotICAgUHl0aG9uIDMuMyAoZGVmYXVsdCwgU2VwIDI0IDIwMTIsIDA5OjI1OjA0KQorICAgJCBweXRob24zLjQKKyAgIFB5dGhvbiAzLjQgKGRlZmF1bHQsIFNlcCAyNCAyMDEyLCAwOToyNTowNCkKICAgIFtHQ0MgNC42LjNdIG9uIGxpbnV4MgogICAgVHlwZSAiaGVscCIsICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2UiIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgPj4+CkBAIC0xNDksNyArMTQ5LDcgQEAKIE9uIEJTRCdpc2ggVW5peCBzeXN0ZW1zLCBQeXRob24gc2NyaXB0cyBjYW4gYmUgbWFkZSBkaXJlY3RseSBleGVjdXRhYmxlLCBsaWtlCiBzaGVsbCBzY3JpcHRzLCBieSBwdXR0aW5nIHRoZSBsaW5lIDo6CiAKLSAgICMhIC91c3IvYmluL2VudiBweXRob24zLjMKKyAgICMhIC91c3IvYmluL2VudiBweXRob24zLjQKIAogKGFzc3VtaW5nIHRoYXQgdGhlIGludGVycHJldGVyIGlzIG9uIHRoZSB1c2VyJ3MgOmVudnZhcjpgUEFUSGApIGF0IHRoZSBiZWdpbm5pbmcKIG9mIHRoZSBzY3JpcHQgYW5kIGdpdmluZyB0aGUgZmlsZSBhbiBleGVjdXRhYmxlIG1vZGUuICBUaGUgYGAjIWBgIG11c3QgYmUgdGhlCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QgYi9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKaW5kZXggMTkwMjk2NC4uOTRhNjZhYyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdApAQCAtMjc4LDI0ICsyNzgsMjMgQEAKICAgID4+PiBkaXIoZmlibykKICAgIFsnX19uYW1lX18nLCAnZmliJywgJ2ZpYjInXQogICAgPj4+IGRpcihzeXMpICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQotICAgWydfX2Rpc3BsYXlob29rX18nLCAnX19kb2NfXycsICdfX2VnZ2luc2VydCcsICdfX2V4Y2VwdGhvb2tfXycsCi0gICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wbGVuJywgJ19fc3RkZXJyX18nLAotICAgICdfX3N0ZGluX18nLCAnX19zdGRvdXRfXycsICdfY2xlYXJfdHlwZV9jYWNoZScsICdfY3VycmVudF9mcmFtZXMnLAotICAgICdfZGVidWdtYWxsb2NzdGF0cycsICdfZ2V0ZnJhbWUnLCAnX2hvbWUnLCAnX21lcmN1cmlhbCcsICdfeG9wdGlvbnMnLAotICAgICdhYmlmbGFncycsICdhcGlfdmVyc2lvbicsICdhcmd2JywgJ2Jhc2VfZXhlY19wcmVmaXgnLCAnYmFzZV9wcmVmaXgnLAotICAgICdidWlsdGluX21vZHVsZV9uYW1lcycsICdieXRlb3JkZXInLCAnY2FsbF90cmFjaW5nJywgJ2NhbGxzdGF0cycsCi0gICAgJ2NvcHlyaWdodCcsICdkaXNwbGF5aG9vaycsICdkb250X3dyaXRlX2J5dGVjb2RlJywgJ2V4Y19pbmZvJywKLSAgICAnZXhjZXB0aG9vaycsICdleGVjX3ByZWZpeCcsICdleGVjdXRhYmxlJywgJ2V4aXQnLCAnZmxhZ3MnLCAnZmxvYXRfaW5mbycsCi0gICAgJ2Zsb2F0X3JlcHJfc3R5bGUnLCAnZ2V0Y2hlY2tpbnRlcnZhbCcsICdnZXRkZWZhdWx0ZW5jb2RpbmcnLAotICAgICdnZXRkbG9wZW5mbGFncycsICdnZXRmaWxlc3lzdGVtZW5jb2RpbmcnLCAnZ2V0b2JqZWN0cycsICdnZXRwcm9maWxlJywKLSAgICAnZ2V0cmVjdXJzaW9ubGltaXQnLCAnZ2V0cmVmY291bnQnLCAnZ2V0c2l6ZW9mJywgJ2dldHN3aXRjaGludGVydmFsJywKLSAgICAnZ2V0dG90YWxyZWZjb3VudCcsICdnZXR0cmFjZScsICdoYXNoX2luZm8nLCAnaGV4dmVyc2lvbicsCi0gICAgJ2ltcGxlbWVudGF0aW9uJywgJ2ludF9pbmZvJywgJ2ludGVybicsICdtYXhzaXplJywgJ21heHVuaWNvZGUnLAotICAgICdtZXRhX3BhdGgnLCAnbW9kdWxlcycsICdwYXRoJywgJ3BhdGhfaG9va3MnLCAncGF0aF9pbXBvcnRlcl9jYWNoZScsCi0gICAgJ3BsYXRmb3JtJywgJ3ByZWZpeCcsICdwczEnLCAnc2V0Y2hlY2tpbnRlcnZhbCcsICdzZXRkbG9wZW5mbGFncycsCi0gICAgJ3NldHByb2ZpbGUnLCAnc2V0cmVjdXJzaW9ubGltaXQnLCAnc2V0c3dpdGNoaW50ZXJ2YWwnLCAnc2V0dHJhY2UnLAotICAgICdzdGRlcnInLCAnc3RkaW4nLCAnc3Rkb3V0JywgJ3RocmVhZF9pbmZvJywgJ3ZlcnNpb24nLCAndmVyc2lvbl9pbmZvJywKLSAgICAnd2Fybm9wdGlvbnMnXQorICAgWydfX2Rpc3BsYXlob29rX18nLCAnX19kb2NfXycsICdfX2V4Y2VwdGhvb2tfXycsICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywKKyAgICAnX19wYWNrYWdlX18nLCAnX19zdGRlcnJfXycsICdfX3N0ZGluX18nLCAnX19zdGRvdXRfXycsCisgICAgJ19jbGVhcl90eXBlX2NhY2hlJywgJ19jdXJyZW50X2ZyYW1lcycsICdfZGVidWdtYWxsb2NzdGF0cycsICdfZ2V0ZnJhbWUnLAorICAgICdfaG9tZScsICdfbWVyY3VyaWFsJywgJ194b3B0aW9ucycsICdhYmlmbGFncycsICdhcGlfdmVyc2lvbicsICdhcmd2JywKKyAgICAnYmFzZV9leGVjX3ByZWZpeCcsICdiYXNlX3ByZWZpeCcsICdidWlsdGluX21vZHVsZV9uYW1lcycsICdieXRlb3JkZXInLAorICAgICdjYWxsX3RyYWNpbmcnLCAnY2FsbHN0YXRzJywgJ2NvcHlyaWdodCcsICdkaXNwbGF5aG9vaycsCisgICAgJ2RvbnRfd3JpdGVfYnl0ZWNvZGUnLCAnZXhjX2luZm8nLCAnZXhjZXB0aG9vaycsICdleGVjX3ByZWZpeCcsCisgICAgJ2V4ZWN1dGFibGUnLCAnZXhpdCcsICdmbGFncycsICdmbG9hdF9pbmZvJywgJ2Zsb2F0X3JlcHJfc3R5bGUnLAorICAgICdnZXRjaGVja2ludGVydmFsJywgJ2dldGRlZmF1bHRlbmNvZGluZycsICdnZXRkbG9wZW5mbGFncycsCisgICAgJ2dldGZpbGVzeXN0ZW1lbmNvZGluZycsICdnZXRvYmplY3RzJywgJ2dldHByb2ZpbGUnLCAnZ2V0cmVjdXJzaW9ubGltaXQnLAorICAgICdnZXRyZWZjb3VudCcsICdnZXRzaXplb2YnLCAnZ2V0c3dpdGNoaW50ZXJ2YWwnLCAnZ2V0dG90YWxyZWZjb3VudCcsCisgICAgJ2dldHRyYWNlJywgJ2hhc2hfaW5mbycsICdoZXh2ZXJzaW9uJywgJ2ltcGxlbWVudGF0aW9uJywgJ2ludF9pbmZvJywKKyAgICAnaW50ZXJuJywgJ21heHNpemUnLCAnbWF4dW5pY29kZScsICdtZXRhX3BhdGgnLCAnbW9kdWxlcycsICdwYXRoJywKKyAgICAncGF0aF9ob29rcycsICdwYXRoX2ltcG9ydGVyX2NhY2hlJywgJ3BsYXRmb3JtJywgJ3ByZWZpeCcsICdwczEnLAorICAgICdzZXRjaGVja2ludGVydmFsJywgJ3NldGRsb3BlbmZsYWdzJywgJ3NldHByb2ZpbGUnLCAnc2V0cmVjdXJzaW9ubGltaXQnLAorICAgICdzZXRzd2l0Y2hpbnRlcnZhbCcsICdzZXR0cmFjZScsICdzdGRlcnInLCAnc3RkaW4nLCAnc3Rkb3V0JywKKyAgICAndGhyZWFkX2luZm8nLCAndmVyc2lvbicsICd2ZXJzaW9uX2luZm8nLCAnd2Fybm9wdGlvbnMnXQogCiBXaXRob3V0IGFyZ3VtZW50cywgOmZ1bmM6YGRpcmAgbGlzdHMgdGhlIG5hbWVzIHlvdSBoYXZlIGRlZmluZWQgY3VycmVudGx5OjoKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAppbmRleCA3ZTdhMTU0Li4yZTNlZDE4IDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdApAQCAtMTUsNyArMTUsNyBAQAogCiAgICA+Pj4gaW1wb3J0IG9zCiAgICA+Pj4gb3MuZ2V0Y3dkKCkgICAgICAjIFJldHVybiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQotICAgJ0M6XFxQeXRob24zMycKKyAgICdDOlxcUHl0aG9uMzQnCiAgICA+Pj4gb3MuY2hkaXIoJy9zZXJ2ZXIvYWNjZXNzbG9ncycpICAgIyBDaGFuZ2UgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICAgPj4+IG9zLnN5c3RlbSgnbWtkaXIgdG9kYXknKSAgICMgUnVuIHRoZSBjb21tYW5kIG1rZGlyIGluIHRoZSBzeXN0ZW0gc2hlbGwKICAgIDAKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAppbmRleCBjMWRkNjlhLi5jMDE5N2VhIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CkBAIC0yNzcsNyArMjc3LDcgQEAKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KICAgICAgICBkWydwcmltYXJ5J10gICAgICAgICAgICAgICAgIyBlbnRyeSB3YXMgYXV0b21hdGljYWxseSByZW1vdmVkCi0gICAgIEZpbGUgIkM6L3B5dGhvbjMzL2xpYi93ZWFrcmVmLnB5IiwgbGluZSA0NiwgaW4gX19nZXRpdGVtX18KKyAgICAgRmlsZSAiQzovcHl0aG9uMzQvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXwogICAgICAgIG8gPSBzZWxmLmRhdGFba2V5XSgpCiAgICBLZXlFcnJvcjogJ3ByaW1hcnknCiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9jbWRsaW5lLnJzdCBiL0RvYy91c2luZy9jbWRsaW5lLnJzdAppbmRleCA0ZTcxNjhmLi5kMTgyMmZiIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QKKysrIGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CkBAIC0yNCw3ICsyNCw3IEBACiAKIFdoZW4gaW52b2tpbmcgUHl0aG9uLCB5b3UgbWF5IHNwZWNpZnkgYW55IG9mIHRoZXNlIG9wdGlvbnM6OgogCi0gICAgcHl0aG9uIFstYkJkRWhpT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KKyAgICBweXRob24gWy1iQmRFaGlJT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KIAogVGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlIGlzLCBvZiBjb3Vyc2UsIGEgc2ltcGxlIGludm9jYXRpb24gb2YgYSBzY3JpcHQ6OgogCkBAIC0xNDcsNyArMTQ3LDEyIEBACiAKIElmIG5vIGludGVyZmFjZSBvcHRpb24gaXMgZ2l2ZW4sIDpvcHRpb246YC1pYCBpcyBpbXBsaWVkLCBgYHN5cy5hcmd2WzBdYGAgaXMKIGFuIGVtcHR5IHN0cmluZyAoYGAiImBgKSBhbmQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgYWRkZWQgdG8gdGhlCi1zdGFydCBvZiA6ZGF0YTpgc3lzLnBhdGhgLgorc3RhcnQgb2YgOmRhdGE6YHN5cy5wYXRoYC4gIEFsc28sIHRhYi1jb21wbGV0aW9uIGFuZCBoaXN0b3J5IGVkaXRpbmcgaXMKK2F1dG9tYXRpY2FsbHkgZW5hYmxlZCwgaWYgYXZhaWxhYmxlIG9uIHlvdXIgcGxhdGZvcm0gKHNlZQorOnJlZjpgcmxjb21wbGV0ZXItY29uZmlnYCkuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBdXRvbWF0aWMgZW5hYmxpbmcgb2YgdGFiLWNvbXBsZXRpb24gYW5kIGhpc3RvcnkgZWRpdGluZy4KIAogLi4gc2VlYWxzbzo6ICA6cmVmOmB0dXQtaW52b2tpbmdgCiAKQEAgLTE3MCw2ICsxNzUsOCBAQAogICAgICAgIFB5dGhvbiAzLjAKIAogCisuLiBfdXNpbmctb24tbWlzYy1vcHRpb25zOgorCiBNaXNjZWxsYW5lb3VzIG9wdGlvbnMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCkBAIC0yMDgsNiArMjE1LDE3IEBACiAgICByYWlzZXMgYW4gZXhjZXB0aW9uLiAgU2VlIGFsc28gOmVudnZhcjpgUFlUSE9OSU5TUEVDVGAuCiAKIAorLi4gY21kb3B0aW9uOjogLUkKKworICAgUnVuIFB5dGhvbiBpbiBpc29sYXRlZCBtb2RlLiBUaGlzIGFsc28gaW1wbGllcyAtRSBhbmQgLXMuCisgICBJbiBpc29sYXRlZCBtb2RlIDpkYXRhOmBzeXMucGF0aGAgY29udGFpbnMgbmVpdGhlciB0aGUgc2NyaXB0J3MgZGlyZWN0b3J5IG5vcgorICAgdGhlIHVzZXIncyBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeS4gQWxsIDplbnZ2YXI6YFBZVEhPTipgIGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgYXJlIGlnbm9yZWQsIHRvby4gRnVydGhlciByZXN0cmljdGlvbnMgbWF5IGJlIGltcG9zZWQgdG8gcHJldmVudAorICAgdGhlIHVzZXIgZnJvbSBpbmplY3RpbmcgbWFsaWNpb3VzIGNvZGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGNtZG9wdGlvbjo6IC1PCiAKICAgIFR1cm4gb24gYmFzaWMgb3B0aW1pemF0aW9ucy4gIFRoaXMgY2hhbmdlcyB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIGZvcgpAQCAtMzU4LDkgKzM3NiwxOSBAQAogLi4gY21kb3B0aW9uOjogLVgKIAogICAgUmVzZXJ2ZWQgZm9yIHZhcmlvdXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgb3B0aW9ucy4gIENQeXRob24gY3VycmVudGx5Ci0gICBkZWZpbmVzIGp1c3Qgb25lLCB5b3UgY2FuIHVzZSBgYC1YIGZhdWx0aGFuZGxlcmBgIHRvIGVuYWJsZQotICAgOm1vZDpgZmF1bHRoYW5kbGVyYC4gSXQgYWxzbyBhbGxvd3MgdG8gcGFzcyBhcmJpdHJhcnkgdmFsdWVzIGFuZCByZXRyaWV2ZQotICAgdGhlbSB0aHJvdWdoIHRoZSA6ZGF0YTpgc3lzLl94b3B0aW9uc2AgZGljdGlvbmFyeS4KKyAgIGRlZmluZXMgdGhlIGZvbGxvd2luZyBwb3NzaWJsZSB2YWx1ZXM6CisKKyAgICogYGAtWCBmYXVsdGhhbmRsZXJgYCB0byBlbmFibGUgOm1vZDpgZmF1bHRoYW5kbGVyYDsKKyAgICogYGAtWCBzaG93cmVmY291bnRgYCB0byBlbmFibGUgdGhlIG91dHB1dCBvZiB0aGUgdG90YWwgcmVmZXJlbmNlIGNvdW50CisgICAgIGFuZCBtZW1vcnkgYmxvY2tzIChvbmx5IHdvcmtzIG9uIGRlYnVnIGJ1aWxkcyk7CisgICAqIGBgLVggdHJhY2VtYWxsb2NgYCB0byBzdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgdXNpbmcgdGhlCisgICAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUuIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lIGlzCisgICAgIHN0b3JlZCBpbiBhIHRyYWNlYmFjayBvZiBhIHRyYWNlLiBVc2UgYGAtWCB0cmFjZW1hbGxvYz1ORlJBTUVgYCB0byBzdGFydAorICAgICB0cmFjaW5nIHdpdGggYSB0cmFjZWJhY2sgbGltaXQgb2YgKk5GUkFNRSogZnJhbWVzLiBTZWUgdGhlCisgICAgIDpmdW5jOmB0cmFjZW1hbGxvYy5zdGFydGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIEl0IGFsc28gYWxsb3dzIHRvIHBhc3MgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgcmV0cmlldmUgdGhlbSB0aHJvdWdoIHRoZQorICAgOmRhdGE6YHN5cy5feG9wdGlvbnNgIGRpY3Rpb25hcnkuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBJdCBpcyBub3cgYWxsb3dlZCB0byBwYXNzIDpvcHRpb246YC1YYCB3aXRoIENQeXRob24uCkBAIC0zNjgsNiArMzk2LDkgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgVGhlIGBgLVggZmF1bHRoYW5kbGVyYGAgb3B0aW9uLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSBgYC1YIHNob3dyZWZjb3VudGBgIGFuZCBgYC1YIHRyYWNlbWFsbG9jYGAgb3B0aW9ucy4KKwogCiBPcHRpb25zIHlvdSBzaG91bGRuJ3QgdXNlCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0zODUsNyArNDE2LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW5mbHVlbmNlIFB5dGhvbidzIGJlaGF2aW9yLCB0aGV5IGFyZSBwcm9jZXNzZWQKLWJlZm9yZSB0aGUgY29tbWFuZC1saW5lIHN3aXRjaGVzIG90aGVyIHRoYW4gLUUuICBJdCBpcyBjdXN0b21hcnkgdGhhdAorYmVmb3JlIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgb3RoZXIgdGhhbiAtRSBvciAtSS4gIEl0IGlzIGN1c3RvbWFyeSB0aGF0CiBjb21tYW5kLWxpbmUgc3dpdGNoZXMgb3ZlcnJpZGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgd2hlcmUgdGhlcmUgaXMgYQogY29uZmxpY3QuCiAKQEAgLTQzMCw3ICs0NjEsNyBAQAogICAgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIHdoZXJlIGludGVyYWN0aXZlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBzbwogICAgdGhhdCBvYmplY3RzIGRlZmluZWQgb3IgaW1wb3J0ZWQgaW4gaXQgY2FuIGJlIHVzZWQgd2l0aG91dCBxdWFsaWZpY2F0aW9uIGluCiAgICB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbi4gIFlvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIHByb21wdHMgOmRhdGE6YHN5cy5wczFgIGFuZAotICAgOmRhdGE6YHN5cy5wczJgIGluIHRoaXMgZmlsZS4KKyAgIDpkYXRhOmBzeXMucHMyYCBhbmQgdGhlIGhvb2sgOmRhdGE6YHN5cy5fX2ludGVyYWN0aXZlaG9va19fYCBpbiB0aGlzIGZpbGUuCiAKIAogLi4gZW52dmFyOjogUFlUSE9OWTJLCkBAIC00ODUsOSArNTE2LDkgQEAKIAogLi4gZW52dmFyOjogUFlUSE9ORE9OVFdSSVRFQllURUNPREUKIAotICAgSWYgdGhpcyBpcyBzZXQsIFB5dGhvbiB3b24ndCB0cnkgdG8gd3JpdGUgYGAucHljYGAgb3IgYGAucHlvYGAgZmlsZXMgb24gdGhlCi0gICBpbXBvcnQgb2Ygc291cmNlIG1vZHVsZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUgOm9wdGlvbjpgLUJgCi0gICBvcHRpb24uCisgICBJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcsIFB5dGhvbiB3b24ndCB0cnkgdG8gd3JpdGUgYGAucHljYGAgb3IKKyAgIGBgLnB5b2BgIGZpbGVzIG9uIHRoZSBpbXBvcnQgb2Ygc291cmNlIG1vZHVsZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgIHNwZWNpZnlpbmcgdGhlIDpvcHRpb246YC1CYCBvcHRpb24uCiAKIAogLi4gZW52dmFyOjogUFlUSE9OSEFTSFNFRUQKQEAgLTUxMiwxMyArNTQzLDE2IEBACiAuLiBlbnZ2YXI6OiBQWVRIT05JT0VOQ09ESU5HCiAKICAgIElmIHRoaXMgaXMgc2V0IGJlZm9yZSBydW5uaW5nIHRoZSBpbnRlcnByZXRlciwgaXQgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZyB1c2VkCi0gICBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheCBgYGVuY29kaW5nbmFtZTplcnJvcmhhbmRsZXJgYC4gVGhlCi0gICBgYDplcnJvcmhhbmRsZXJgYCBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbgotICAgOmZ1bmM6YHN0ci5lbmNvZGVgLgorICAgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIsIGluIHRoZSBzeW50YXggYGBlbmNvZGluZ25hbWU6ZXJyb3JoYW5kbGVyYGAuICBCb3RoCisgICB0aGUgYGBlbmNvZGluZ25hbWVgYCBhbmQgdGhlIGBgOmVycm9yaGFuZGxlcmBgIHBhcnRzIGFyZSBvcHRpb25hbCBhbmQgaGF2ZQorICAgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgc3RyLmVuY29kZWAuCiAKICAgIEZvciBzdGRlcnIsIHRoZSBgYDplcnJvcmhhbmRsZXJgYCBwYXJ0IGlzIGlnbm9yZWQ7IHRoZSBoYW5kbGVyIHdpbGwgYWx3YXlzIGJlCiAgICBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgZW5jb2RpbmduYW1lYGAgcGFydCBpcyBub3cgb3B0aW9uYWwuCisKIAogLi4gZW52dmFyOjogUFlUSE9OTk9VU0VSU0lURQogCkBAIC01NTYsMTUgKzU5MCwyNiBAQAogCiAuLiBlbnZ2YXI6OiBQWVRIT05GQVVMVEhBTkRMRVIKIAotICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCBpcyBjYWxsZWQKLSAgIGF0IHN0YXJ0dXA6IGluc3RhbGwgYSBoYW5kbGVyIGZvciA6Y29uc3Q6YFNJR1NFR1ZgLCA6Y29uc3Q6YFNJR0ZQRWAsCi0gICA6Y29uc3Q6YFNJR0FCUlRgLCA6Y29uc3Q6YFNJR0JVU2AgYW5kIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzIHRvIGR1bXAgdGhlCi0gICBQeXRob24gdHJhY2ViYWNrLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIDpvcHRpb246YC1YYCBgYGZhdWx0aGFuZGxlcmBgCi0gICBvcHRpb24uCisgICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcsCisgICA6ZnVuYzpgZmF1bHRoYW5kbGVyLmVuYWJsZWAgaXMgY2FsbGVkIGF0IHN0YXJ0dXA6IGluc3RhbGwgYSBoYW5kbGVyIGZvcgorICAgOmNvbnN0OmBTSUdTRUdWYCwgOmNvbnN0OmBTSUdGUEVgLCA6Y29uc3Q6YFNJR0FCUlRgLCA6Y29uc3Q6YFNJR0JVU2AgYW5kCisgICA6Y29uc3Q6YFNJR0lMTGAgc2lnbmFscyB0byBkdW1wIHRoZSBQeXRob24gdHJhY2ViYWNrLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICA6b3B0aW9uOmAtWGAgYGBmYXVsdGhhbmRsZXJgYCBvcHRpb24uCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKKy4uIGVudnZhcjo6IFBZVEhPTlRSQUNFTUFMTE9DCisKKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgc3RhcnQgdHJhY2luZworICAgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyB1c2luZyB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4gVGhlIHZhbHVlIG9mCisgICB0aGUgdmFyaWFibGUgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gYSB0cmFjZWJhY2sgb2YgYQorICAgdHJhY2UuIEZvciBleGFtcGxlLCBgYFBZVEhPTlRSQUNFTUFMTE9DPTFgYCBzdG9yZXMgb25seSB0aGUgbW9zdCByZWNlbnQKKyAgIGZyYW1lLiBTZWUgdGhlIDpmdW5jOmB0cmFjZW1hbGxvYy5zdGFydGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIERlYnVnLW1vZGUgdmFyaWFibGVzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fgogCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvbWFjLnJzdCBiL0RvYy91c2luZy9tYWMucnN0CmluZGV4IDNlMWI3NGQuLjViZTQzOWYgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9tYWMucnN0CisrKyBiL0RvYy91c2luZy9tYWMucnN0CkBAIC0yNSw3ICsyNSw3IEBACiAKIFdoYXQgeW91IGdldCBhZnRlciBpbnN0YWxsaW5nIGlzIGEgbnVtYmVyIG9mIHRoaW5nczoKIAotKiBBIDpmaWxlOmBNYWNQeXRob24gMy4zYCBmb2xkZXIgaW4geW91ciA6ZmlsZTpgQXBwbGljYXRpb25zYCBmb2xkZXIuIEluIGhlcmUKKyogQSA6ZmlsZTpgTWFjUHl0aG9uIDMuNGAgZm9sZGVyIGluIHlvdXIgOmZpbGU6YEFwcGxpY2F0aW9uc2AgZm9sZGVyLiBJbiBoZXJlCiAgIHlvdSBmaW5kIElETEUsIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB0aGF0IGlzIGEgc3RhbmRhcmQgcGFydCBvZiBvZmZpY2lhbAogICBQeXRob24gZGlzdHJpYnV0aW9uczsgUHl0aG9uTGF1bmNoZXIsIHdoaWNoIGhhbmRsZXMgZG91YmxlLWNsaWNraW5nIFB5dGhvbgogICBzY3JpcHRzIGZyb20gdGhlIEZpbmRlcjsgYW5kIHRoZSAiQnVpbGQgQXBwbGV0IiB0b29sLCB3aGljaCBhbGxvd3MgeW91IHRvCkBAIC05Myw3ICs5Myw3IEBACiBhbnl0aGluZyB0aGF0IGhhcyBhIEdVSSkgbmVlZCB0byBiZSBydW4gaW4gYSBzcGVjaWFsIHdheS4gVXNlIDpwcm9ncmFtOmBweXRob253YAogaW5zdGVhZCBvZiA6cHJvZ3JhbTpgcHl0aG9uYCB0byBzdGFydCBzdWNoIHNjcmlwdHMuCiAKLVdpdGggUHl0aG9uIDMuMywgeW91IGNhbiB1c2UgZWl0aGVyIDpwcm9ncmFtOmBweXRob25gIG9yIDpwcm9ncmFtOmBweXRob253YC4KK1dpdGggUHl0aG9uIDMuNCwgeW91IGNhbiB1c2UgZWl0aGVyIDpwcm9ncmFtOmBweXRob25gIG9yIDpwcm9ncmFtOmBweXRob253YC4KIAogCiBDb25maWd1cmF0aW9uCkBAIC0xNTgsNyArMTU4LDcgQEAKIERpc3RyaWJ1dGluZyBQeXRob24gQXBwbGljYXRpb25zIG9uIHRoZSBNYWMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlICJCdWlsZCBBcHBsZXQiIHRvb2wgdGhhdCBpcyBwbGFjZWQgaW4gdGhlIE1hY1B5dGhvbiAzLjMgZm9sZGVyIGlzIGZpbmUgZm9yCitUaGUgIkJ1aWxkIEFwcGxldCIgdG9vbCB0aGF0IGlzIHBsYWNlZCBpbiB0aGUgTWFjUHl0aG9uIDMuNCBmb2xkZXIgaXMgZmluZSBmb3IKIHBhY2thZ2luZyBzbWFsbCBQeXRob24gc2NyaXB0cyBvbiB5b3VyIG93biBtYWNoaW5lIHRvIHJ1biBhcyBhIHN0YW5kYXJkIE1hYwogYXBwbGljYXRpb24uIFRoaXMgdG9vbCwgaG93ZXZlciwgaXMgbm90IHJvYnVzdCBlbm91Z2ggdG8gZGlzdHJpYnV0ZSBQeXRob24KIGFwcGxpY2F0aW9ucyB0byBvdGhlciB1c2Vycy4KZGlmZiAtLWdpdCBhL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMgYi9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCmluZGV4IDVmZGJjOWIuLjg2OGJiYzggMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKKysrIGIvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYwpAQCAtMjUsNyArMjUsNyBAQAogVGhlIGNvbW1hbmQsIGlmIHJ1biB3aXRoIGBgLWhgYCwgd2lsbCBzaG93IHRoZSBhdmFpbGFibGUgb3B0aW9uczo6CiAKICAgICB1c2FnZTogcHl2ZW52IFstaF0gWy0tc3lzdGVtLXNpdGUtcGFja2FnZXNdIFstLXN5bWxpbmtzXSBbLS1jbGVhcl0KLSAgICAgICAgICAgICAgICAgIFstLXVwZ3JhZGVdIEVOVl9ESVIgW0VOVl9ESVIgLi4uXQorICAgICAgICAgICAgICAgICAgWy0tdXBncmFkZV0gWy0td2l0aG91dC1waXBdIEVOVl9ESVIgW0VOVl9ESVIgLi4uXQogCiAgICAgQ3JlYXRlcyB2aXJ0dWFsIFB5dGhvbiBlbnZpcm9ubWVudHMgaW4gb25lIG9yIG1vcmUgdGFyZ2V0IGRpcmVjdG9yaWVzLgogCkBAIC00Myw2ICs0MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgICAgICAtLXVwZ3JhZGUgICAgICAgICAgICAgIFVwZ3JhZGUgdGhlIGVudmlyb25tZW50IGRpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgorICAgICAgLS13aXRob3V0LXBpcCAgICAgICAgICBTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgYnkgZGVmYXVsdCkKKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEluc3RhbGxzIHBpcCBieSBkZWZhdWx0LCBhZGRlZCB0aGUgYGAtLXdpdGhvdXQtcGlwYGAgb3B0aW9uCiAKIElmIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGFuIGVycm9yIHdpbGwgYmUgcmFpc2VkLCB1bmxlc3MKIHRoZSBgYC0tY2xlYXJgYCBvciBgYC0tdXBncmFkZWBgIG9wdGlvbiB3YXMgcHJvdmlkZWQuCkBAIC01MSwyNSArNTYsMjkgQEAKIGBgaW5jbHVkZS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc2BgIGtleSwgc2V0IHRvIGBgdHJ1ZWBgIGlmIGBgdmVudmBgIGlzCiBydW4gd2l0aCB0aGUgYGAtLXN5c3RlbS1zaXRlLXBhY2thZ2VzYGAgb3B0aW9uLCBgYGZhbHNlYGAgb3RoZXJ3aXNlLgogCitVbmxlc3MgdGhlIGBgLS13aXRob3V0LXBpcGBgIG9wdGlvbiBpcyBnaXZlbiwgOm1vZDpgZW5zdXJlcGlwYCB3aWxsIGJlCitpbnZva2VkIHRvIGJvb3RzdHJhcCBgYHBpcGBgIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuCisKIE11bHRpcGxlIHBhdGhzIGNhbiBiZSBnaXZlbiB0byBgYHB5dmVudmBgLCBpbiB3aGljaCBjYXNlIGFuIGlkZW50aWNhbAogdmlydHVhbGVudiB3aWxsIGJlIGNyZWF0ZWQsIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gb3B0aW9ucywgYXQgZWFjaAogcHJvdmlkZWQgcGF0aC4KIAogT25jZSBhIHZlbnYgaGFzIGJlZW4gY3JlYXRlZCwgaXQgY2FuIGJlICJhY3RpdmF0ZWQiIHVzaW5nIGEgc2NyaXB0IGluIHRoZQotdmVudidzIGJpbmFyeSBkaXJlY3RvcnkuIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBzY3JpcHQgaXMgcGxhdGZvcm0tc3BlY2lmaWM6IG9uCi1hIFBvc2l4IHBsYXRmb3JtLCB5b3Ugd291bGQgdHlwaWNhbGx5IGRvOjoKK3ZlbnYncyBiaW5hcnkgZGlyZWN0b3J5LiBUaGUgaW52b2NhdGlvbiBvZiB0aGUgc2NyaXB0IGlzIHBsYXRmb3JtLXNwZWNpZmljOgogCi0gICAgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZQotCi13aGVyZWFzIG9uIFdpbmRvd3MsIHlvdSBtaWdodCBkbzo6Ci0KLSAgICBDOlw+IDx2ZW52Pi9TY3JpcHRzL2FjdGl2YXRlCi0KLWlmIHlvdSBhcmUgdXNpbmcgdGhlIGBgY21kLmV4ZWBgIHNoZWxsLCBvciBwZXJoYXBzOjoKLQotICAgIFBTIEM6XD4gPHZlbnY+L1NjcmlwdHMvQWN0aXZhdGUucHMxCi0KLWlmIHlvdSB1c2UgUG93ZXJTaGVsbC4KKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBQbGF0Zm9ybSAgICB8IFNoZWxsICAgICAgICAgICB8IENvbW1hbmQgdG8gYWN0aXZhdGUgdmlydHVhbCBlbnZpcm9ubWVudCB8CisrPT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgUG9zaXggICAgICAgfCBiYXNoL3pzaCAgICAgICAgfCAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgZmlzaCAgICAgICAgICAgIHwgJCAuIDx2ZW52Pi9iaW4vYWN0aXZhdGUuZmlzaCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICB8IGNzaC90Y3NoICAgICAgICB8ICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUuY3NoICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgV2luZG93cyAgICAgfCBjbWQuZXhlICAgICAgICAgfCBDOlw+IDx2ZW52Pi9TY3JpcHRzL2FjdGl2YXRlLmJhdCAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgUG93ZXJTaGVsbCAgICAgIHwgUFMgQzpcPiA8dmVudj4vU2NyaXB0cy9BY3RpdmF0ZS5wczEgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiBZb3UgZG9uJ3Qgc3BlY2lmaWNhbGx5ICpuZWVkKiB0byBhY3RpdmF0ZSBhbiBlbnZpcm9ubWVudDsgYWN0aXZhdGlvbiBqdXN0CiBwcmVwZW5kcyB0aGUgdmVudidzIGJpbmFyeSBkaXJlY3RvcnkgdG8geW91ciBwYXRoLCBzbyB0aGF0ICJweXRob24iIGludm9rZXMgdGhlCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy40LnJzdCBiL0RvYy93aGF0c25ldy8zLjQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMWFiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApAQCAtMCwwICsxLDEwNzAgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgV2hhdCdzIE5ldyBJbiBQeXRob24gMy40CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy4uIDpBdXRob3I6IFNvbWVvbmUgPGVtYWlsPgorICAgKHVuY29tbWVudCBpZiB0aGVyZSBpcyBhIHByaW5jaXBhbCBhdXRob3IpCisKKy4uIFJ1bGVzIGZvciBtYWludGVuYW5jZToKKworICAgKiBBbnlvbmUgY2FuIGFkZCB0ZXh0IHRvIHRoaXMgZG9jdW1lbnQsIGJ1dCB0aGUgbWFpbnRhaW5lciByZXNlcnZlcyB0aGUKKyAgIHJpZ2h0IHRvIHJld3JpdGUgYW55IGFkZGl0aW9ucy4gSW4gcGFydGljdWxhciwgZm9yIG9ic2N1cmUgb3IgZXNvdGVyaWMKKyAgIGZlYXR1cmVzLCB0aGUgbWFpbnRhaW5lciBtYXkgcmVkdWNlIGFueSBhZGRpdGlvbiB0byBhIHNpbXBsZSByZWZlcmVuY2UgdG8KKyAgIHRoZSBuZXcgZG9jdW1lbnRhdGlvbiByYXRoZXIgdGhhbiBleHBsYWluaW5nIHRoZSBmZWF0dXJlIGlubGluZS4KKworICAgKiBXaGlsZSB0aGUgbWFpbnRhaW5lciB3aWxsIHBlcmlvZGljYWxseSBnbyB0aHJvdWdoIE1pc2MvTkVXUworICAgYW5kIGFkZCBjaGFuZ2VzLCBpdCdzIGJlc3Qgbm90IHRvIHJlbHkgb24gdGhpcy4gV2Uga25vdyBmcm9tIGV4cGVyaWVuY2UKKyAgIHRoYXQgYW55IGNoYW5nZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIFdoYXQncyBOZXcgZG9jdW1lbnRhdGlvbiBhcm91bmQgdGhlCisgICB0aW1lIG9mIHRoZSBvcmlnaW5hbCByZWxlYXNlIHdpbGwgcmVtYWluIGxhcmdlbHkgdW5rbm93biB0byB0aGUgY29tbXVuaXR5CisgICBmb3IgeWVhcnMsIGV2ZW4gaWYgdGhleSdyZSBhZGRlZCBsYXRlci4gV2UgYWxzbyBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0CisgICBvdGhlciBwcmlvcml0aWVzIGNhbiBhcmlzZSwgYW5kIHRoZSBtYWludGFpbmVyIHdpbGwgcnVuIG91dCBvZiB0aW1lIHRvIGRvCisgICB1cGRhdGVzIC0gaW4gc3VjaCBjYXNlcywgZW5kIHVzZXJzIHdpbGwgYmUgbXVjaCBiZXR0ZXIgc2VydmVkIGJ5IHBhcnRpYWwKKyAgIG5vdGlmaWNhdGlvbnMgdGhhdCBhdCBsZWFzdCBnaXZlIGEgaGludCBhYm91dCBuZXcgZmVhdHVyZXMgdG8KKyAgIGludmVzdGlnYXRlLgorCisgICAqIFRoaXMgaXMgbm90IGEgY29tcGxldGUgbGlzdCBvZiBldmVyeSBzaW5nbGUgY2hhbmdlOyBjb21wbGV0ZW5lc3MKKyAgIGlzIHRoZSBwdXJwb3NlIG9mIE1pc2MvTkVXUy4gVGhlIFdoYXQncyBOZXcgc2hvdWxkIGZvY3VzIG9uIGNoYW5nZXMgdGhhdAorICAgYXJlIHZpc2libGUgdG8gUHl0aG9uICp1c2VycyogYW5kIHRoYXQgKnJlcXVpcmUqIGEgZmVhdHVyZSByZWxlYXNlIChpLmUuCisgICBtb3N0IGJ1ZyBmaXhlcyBzaG91bGQgb25seSBiZSByZWNvcmRlZCBpbiBNaXNjL05FV1MpCisKKyAgICogUEVQcyBzaG91bGQgbm90IGJlIG1hcmtlZCBGaW5hbCB1bnRpbCB0aGV5IGhhdmUgYW4gZW50cnkgaW4gV2hhdCdzIE5ldy4KKyAgIEEgcGxhY2Vob2xkZXIgZW50cnkgdGhhdCBpcyBqdXN0IGEgc2VjdGlvbiBoZWFkZXIgYW5kIGEgbGluayB0byB0aGUgUEVQCisgICAoZS5nICI6cGVwOmAzOTdgIGhhcyBiZWVuIGltcGxlbWVudGVkIikgaXMgYWNjZXB0YWJsZS4gSWYgYSBQRVAgaGFzIGJlZW4KKyAgIGltcGxlbWVudGVkIGFuZCBub3RlZCBpbiBXaGF0J3MgTmV3LCBkb24ndCBmb3JnZXQgdG8gbWFyayBpdCBhcyBGaW5hbCEKKworICAgKiBJZiB5b3Ugd2FudCB0byBkcmF3IHlvdXIgbmV3IHRleHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUKKyAgIG1haW50YWluZXIsIGFkZCAnWFhYJyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhZ3JhcGggb3IKKyAgIHNlY3Rpb24uCisKKyAgICogSXQncyBPSyB0byBhZGQganVzdCBhIHZlcnkgYnJpZWYgbm90ZSBhYm91dCBhIGNoYW5nZS4gIEZvcgorICAgZXhhbXBsZTogIlRoZSA6cmVmOmB+c29ja2V0LnRyYW5zbW9ncmlmeSgpYCBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gdGhlCisgICA6bW9kOmBzb2NrZXRgIG1vZHVsZS4iICBUaGUgbWFpbnRhaW5lciB3aWxsIHJlc2VhcmNoIHRoZSBjaGFuZ2UgYW5kCisgICB3cml0ZSB0aGUgbmVjZXNzYXJ5IHRleHQgKGlmIGFwcHJvcHJpYXRlKS4gVGhlIGFkdmFudGFnZSBvZiBkb2luZyB0aGlzCisgICBpcyB0aGF0IGV2ZW4gaWYgbm8gbW9yZSBkZXNjcmlwdGl2ZSB0ZXh0IGlzIGV2ZXIgYWRkZWQsIHJlYWRlcnMgd2lsbCBhdAorICAgbGVhc3QgaGF2ZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBuZXcgZmVhdHVyZSBleGlzdHMgYW5kIGEgbGluayB0byB0aGUKKyAgIHJlbGV2YW50IGRvY3VtZW50YXRpb24uCisKKyAgICogWW91IGNhbiBjb21tZW50IG91dCB5b3VyIGFkZGl0aW9ucyBpZiB5b3UgbGlrZSwgYnV0IGl0J3Mgbm90CisgICBuZWNlc3NhcnkgKGVzcGVjaWFsbHkgd2hlbiBhIGZpbmFsIHJlbGVhc2UgaXMgc29tZSBtb250aHMgYXdheSkuCisKKyAgICogQ3JlZGl0IHRoZSBhdXRob3Igb2YgYSBwYXRjaCBvciBidWdmaXguICAgSnVzdCB0aGUgbmFtZSBpcworICAgc3VmZmljaWVudDsgdGhlIGUtbWFpbCBhZGRyZXNzIGlzbid0IG5lY2Vzc2FyeS4KKworICAgKiBJdCdzIGhlbHBmdWwgdG8gYWRkIHRoZSBidWcvcGF0Y2ggbnVtYmVyIGFzIGEgY29tbWVudDoKKworICAgVGhlIDpyZWY6YH5zb2NrZXQudHJhbnNtb2dyaWZ5KClgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlLiAoQ29udHJpYnV0ZWQgYnkgUC5ZLiBEZXZlbG9wZXIgaW4gOmlzc3VlOmAxMjM0NWAuKQorCisgICBUaGlzIHNhdmVzIHRoZSBtYWludGFpbmVyIHRoZSBlZmZvcnQgb2YgZ29pbmcgdGhyb3VnaCB0aGUgTWVyY3VyaWFsIGxvZworICAgd2hlbiByZXNlYXJjaGluZyBhIGNoYW5nZS4KKworICAgKiBDcm9zcyByZWZlcmVuY2luZyB0aXA6IDpyZWY6YG1vZC5hdHRyYCB3aWxsIGRpc3BsYXkgYXMgYGBtb2QuYXR0cmBgLAorICAgd2hpbGUgOnJlZjpgfm1vZC5hdHRyYCB3aWxsIGRpc3BsYXkgYXMgYGBhdHRyYGAuCisKK1RoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAzLjQsIGNvbXBhcmVkIHRvIDMuMy4KKworLi4gUHl0aG9uIDMuNCB3YXMgcmVsZWFzZWQgb24gVEJELgorCitGb3IgZnVsbCBkZXRhaWxzLCBzZWUgdGhlCitgY2hhbmdlbG9nIDxodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy9jaGFuZ2Vsb2cuaHRtbD5gXy4KKworLi4gbm90ZTo6IFByZXJlbGVhc2UgdXNlcnMgc2hvdWxkIGJlIGF3YXJlIHRoYXQgdGhpcyBkb2N1bWVudCBpcyBjdXJyZW50bHkgaW4KKyAgIGRyYWZ0IGZvcm0uIEl0IHdpbGwgYmUgdXBkYXRlZCBzdWJzdGFudGlhbGx5IGFzIFB5dGhvbiAzLjQgbW92ZXMgdG93YXJkcworICAgcmVsZWFzZSwgc28gaXQncyB3b3J0aCBjaGVja2luZyBiYWNrIGV2ZW4gYWZ0ZXIgcmVhZGluZyBlYXJsaWVyIHZlcnNpb25zLgorCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MjlgIC0gUHl0aG9uIDMuNCBSZWxlYXNlIFNjaGVkdWxlCisKKworU3VtbWFyeSAtLSBSZWxlYXNlIGhpZ2hsaWdodHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIFRoaXMgc2VjdGlvbiBzaW5nbGVzIG91dCB0aGUgbW9zdCBpbXBvcnRhbnQgY2hhbmdlcyBpbiBQeXRob24gMy40LgorICAgQnJldml0eSBpcyBrZXkuCisKK05ldyBzeW50YXggZmVhdHVyZXM6CisKKyogTm8gbmV3IHN5bnRheCBmZWF0dXJlcyBhcmUgcGxhbm5lZCBmb3IgUHl0aG9uIDMuNC4KKworTmV3IGxpYnJhcnkgbW9kdWxlczoKKworKiA6bW9kOmBhc3luY2lvYDogTmV3IHByb3Zpc29uYWwgQVBJIGZvciBhc3luY2hyb25vdXMgSU8gKDpwZXA6YDMxNTZgKS4KKyogOm1vZDpgZW51bWA6IFN1cHBvcnQgZm9yIGVudW1lcmF0aW9uIHR5cGVzICg6cGVwOmA0MzVgKS4KKyogOm1vZDpgZW5zdXJlcGlwYDogQm9vdHN0cmFwcGluZyB0aGUgcGlwIGluc3RhbGxlciAoOnBlcDpgNDUzYCkuCisqIDptb2Q6YHBhdGhsaWJgOiBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocyAoOnBlcDpgNDI4YCkuCisqIDptb2Q6YHNlbGVjdG9yc2A6IEhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorICA6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLgorKiA6bW9kOmBzdGF0aXN0aWNzYDogQSBiYXNpYyBudW1lcmljYWxseSBzdGFibGUgc3RhdGlzdGljcyBsaWJyYXJ5ICg6cGVwOmA0NTBgKS4KKyogOm1vZDpgdHJhY2VtYWxsb2NgOiBUcmFjZSBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zICg6cGVwOmA0NTRgKS4KKworTmV3IGV4cGVjdGVkIGZlYXR1cmVzIGZvciBQeXRob24gaW1wbGVtZW50YXRpb25zOgorCisqIDpyZWY6YFBFUCA0NDY6IE1ha2UgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIG5vbi1pbmhlcml0YWJsZSA8cGVwLTQ0Nj5gLgorKiBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciA6cmVmOmBpc29sYXRlZCBtb2RlIDx1c2luZy1vbi1taXNjLW9wdGlvbnM+YCwKKyAgKDppc3N1ZTpgMTY0OTlgKS4KKyogOnJlZjpgaW1wcm92ZW1lbnRzIDxjb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM+YCBpbiB0aGUgaGFuZGxpbmcgb2YKKyAgY29kZWNzIHRoYXQgYXJlIG5vdCB0ZXh0IGVuY29kaW5ncworCitTaWduaWZpY2FudGx5IEltcHJvdmVkIExpYnJhcnkgTW9kdWxlczoKKworKiBTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMgaW4gOm1vZDpgZnVuY3Rvb29sc2AgKDpwZXA6YDQ0M2ApCisqIE5ldyA6bW9kOmBwaWNrbGVgIHByb3RvY29sIDQgKDpwZXA6YDMxNTRgKQorKiBTSEEtMyAoS2VjY2FrKSBzdXBwb3J0IGZvciA6bW9kOmBoYXNobGliYC4KKyogVExTdjEuMSBhbmQgVExTdjEuMiBzdXBwb3J0IGZvciA6bW9kOmBzc2xgLgorKiA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5vdyBoYXMgb3B0aW9uIHRvIGF2b2lkIHVzaW5nIDpmdW5jOmBvcy5mb3JrYAorICBvbiBVbml4ICg6aXNzdWU6YDg3MTNgKS4KKworQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBpbXByb3ZlbWVudHM6CisKKyogOnJlZjpgUEVQIDQ0MjogU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIDxwZXAtNDQyPmAKKyogOnJlZjpgUEVQIDQ0NTogQ29uZmlndXJhYmxlIG1lbW9yeSBhbGxvY2F0b3JzIDxwZXAtNDQ1PmAKKyogOnBlcDpgNDU2YCBTZWN1cmUgYW5kIGludGVyY2hhbmdlYWJsZSBoYXNoIGFsZ29yaXRobQorKiBJbXByb3ZlIGZpbmFsaXphdGlvbiBvZiBQeXRob24gbW9kdWxlcyB0byBhdm9pZCBzZXR0aW5nIHRoZWlyIGdsb2JhbHMKKyAgdG8gTm9uZSwgaW4gbW9zdCBjYXNlcyAoOmlzc3VlOmAxODIxNGApLgorKiBBIG1vcmUgZWZmaWNpZW50IDptb2Q6YG1hcnNoYWxgIGZvcm1hdCAoOmlzc3VlOmAxNjQ3NWApLgorKiAiQXJndW1lbnQgQ2xpbmljIiwgYW4gaW5pdGlhbCBzdGVwIHRvd2FyZHMgcHJvdmlkaW5nIGltcHJvdmVkIGludHJvc3BlY3Rpb24KKyAgc3VwcG9ydCBmb3IgYnVpbHRpbiBhbmQgc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gdHlwZXMgaW1wbGVtZW50ZWQgaW4gQworICAoOnBlcDpgNDM2YCkKKworUGxlYXNlIHJlYWQgb24gZm9yIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHVzZXItZmFjaW5nIGNoYW5nZXMuCisKKworUEVQIDQ1MzogRXhwbGljaXQgYm9vdHN0cmFwcGluZyBvZiBwaXAgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBuZXcgOm1vZDpgZW5zdXJlcGlwYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgNDUzYCkgcHJvdmlkZXMgYSBzdGFuZGFyZAorY3Jvc3MtcGxhdGZvcm0gbWVjaGFuaXNtIHRvIGJvb3N0cmFwIHRoZSBwaXAgaW5zdGFsbGVyIGludG8gUHl0aG9uCitpbnN0YWxsYXRpb25zIGFuZCB2aXJ0dWFsIGVudmlyb25tZW50cy4KKworVGhlIDptb2Q6YHZlbnZgIG1vZHVsZSBhbmQgdGhlIDpjb21tYW5kOmBweXZlbnZgIHV0aWxpdHkgbWFrZSB1c2Ugb2YgdGhpcworbW9kdWxlIHRvIG1ha2UgYGBwaXBgYCByZWFkaWx5IGF2YWlsYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gV2hlbgordXNpbmcgdGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UsIGBgcGlwYGAgaXMgaW5zdGFsbGVkIGJ5IGRlZmF1bHQsIHdoaWxlCitmb3IgdGhlIG1vZHVsZSBBUEkgaW5zdGFsbGF0aW9uIG9mIGBgcGlwYGAgbXVzdCBiZSByZXF1ZXN0ZWQgZXhwbGljaXRseS4KKworRm9yIENQeXRob24gc291cmNlIGJ1aWxkcyBvbiBQT1NJWCBzeXN0ZW1zLCB0aGUgYGBtYWtlIGluc3RhbGxgYCBhbmQKK2BgbWFrZSBhbHRpbnN0YWxsYGAgY29tbWFuZHMgYm9vdHN0cmFwIGBgcGlwYGAgYnkgZGVmYXVsdC4gVGhpcyBiZWhhdmlvdXIKK2NhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggY29uZmlndXJlIG9wdGlvbnMsIGFuZCBvdmVycmlkZGVuIHRocm91Z2gKK01ha2VmaWxlIG9wdGlvbnMuCisKK09uIFdpbmRvd3MgYW5kIE1hYyBPUyBYLCB0aGUgQ1B5dGhvbiBpbnN0YWxsZXJzIG5vdyBvZmZlciB0aGUgb3B0aW9uIHRvCitpbnN0YWxsIGBgcGlwYGAgYWxvbmcgd2l0aCBDUHl0aG9uIGl0c2VsZi4KKworLi4gbm90ZTo6CisKKyAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBQRVAgNDUzIGlzIHN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4gUmVmZXIgdG8KKyAgIDppc3N1ZTpgMTkzNDdgIGZvciB0aGUgcHJvZ3Jlc3Mgb24gYWRkaXRpb25hbCBzdGVwczoKKworICAgKiBIYXZpbmcgdGhlIGJpbmFyeSBpbnN0YWxsZXJzIGluc3RhbGwgYGBwaXBgYCBieSBkZWZhdWx0CisgICAqIFJlY29tbWVuZGluZyB0aGUgdXNlIG9mIGBgcGlwYGAgaW4gdGhlICJJbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGUiCisgICAgIGRvY3VtZW50YXRpb24uCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTNgIC0gRXhwbGljaXQgYm9vdHN0cmFwcGluZyBvZiBwaXAgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGJ5IERvbmFsZCBTdHVmZnQgYW5kIE5pY2sgQ29naGxhbiwgaW1wbGVtZW50ZWQgYnkKKyAgICAgIERvbmFsZCBTdHVmZnQsIE5pY2sgQ29naGxhbiwgTWFydGluIHZvbiBMw7Z3aXMgYW5kIE5lZCBEZWlseS4KKworCisuLiBfcGVwLTQ0NjoKKworUEVQIDQ0NjogTWFrZSBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgbm9uLWluaGVyaXRhYmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOnBlcDpgNDQ2YCBtYWtlcyBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgOnJlZjpgbm9uLWluaGVyaXRhYmxlCis8ZmRfaW5oZXJpdGFuY2U+YC4gIE5ldyBmdW5jdGlvbnMgYW5kIG1ldGhvZHM6CisKKyogOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaW5oZXJpdGFibGVgCisqIDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgCisqIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldF9pbmhlcml0YWJsZWAsIDptZXRoOmBzb2NrZXQuc29ja2V0LnNldF9pbmhlcml0YWJsZWAKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0NmAgLSBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lci4KKworCisuLiBfY29kZWMtaGFuZGxpbmctaW1wcm92ZW1lbnRzOgorCitJbXByb3ZlbWVudHMgdG8gY29kZWMgaGFuZGxpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTaW5jZSBpdCB3YXMgZmlyc3QgaW50cm9kdWNlZCwgdGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlIGhhcyBhbHdheXMgYmVlbgoraW50ZW5kZWQgdG8gb3BlcmF0ZSBhcyBhIHR5cGUtbmV1dHJhbCBkeW5hbWljIGVuY29kaW5nIGFuZCBkZWNvZGluZworc3lzdGVtLiBIb3dldmVyLCBpdHMgY2xvc2UgY291cGxpbmcgd2l0aCB0aGUgUHl0aG9uIHRleHQgbW9kZWwsIGVzcGVjaWFsbHkKK3RoZSB0eXBlIHJlc3RyaWN0ZWQgY29udmVuaWVuY2UgbWV0aG9kcyBvbiB0aGUgYnVpbHRpbiA6Y2xhc3M6YHN0cmAsCis6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIHR5cGVzLCBoYXMgaGlzdG9yaWNhbGx5IG9ic2N1cmVkIHRoYXQKK2ZhY3QuCisKK0FzIGEga2V5IHN0ZXAgaW4gY2xhcmlmeWluZyB0aGUgc2l0dWF0aW9uLCB0aGUgOm1ldGg6YGNvZGVjcy5lbmNvZGVgIGFuZAorOm1ldGg6YGNvZGVjcy5kZWNvZGVgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBhcmUgbm93IHByb3Blcmx5IGRvY3VtZW50ZWQgaW4KK1B5dGhvbiAyLjcsIDMuMyBhbmQgMy40LiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBleGlzdGVkIGluIHRoZSA6bW9kOmBjb2RlY3NgCittb2R1bGUgKGFuZCBoYXZlIGJlZW4gY292ZXJlZCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlKSBzaW5jZSBQeXRob24gMi40LAorYnV0IHdlcmUgcHJldmlvdXNseSBvbmx5IGRpc2NvdmVyYWJsZSB0aHJvdWdoIHJ1bnRpbWUgaW50cm9zcGVjdGlvbi4KKworVW5saWtlIHRoZSBjb252ZW5pZW5jZSBtZXRob2RzIG9uIDpjbGFzczpgc3RyYCwgOmNsYXNzOmBieXRlc2AgYW5kCis6Y2xhc3M6YGJ5dGVhcnJheWAsIHRoZXNlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzdXBwb3J0IGFyYml0cmFyeSBjb2RlY3MKK2luIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzLCByYXRoZXIgdGhhbiBiZWluZyBsaW1pdGVkIHRvIFVuaWNvZGUgdGV4dAorZW5jb2RpbmdzIChpbiBQeXRob24gMykgb3IgYGBiYXNlc3RyaW5nYGAgPC0+IGBgYmFzZXN0cmluZ2BgIGNvbnZlcnNpb25zCisoaW4gUHl0aG9uIDIpLgorCitJbiBQeXRob24gMy40LCB0aGUgaW50ZXJwcmV0ZXIgaXMgYWJsZSB0byBpZGVudGlmeSB0aGUga25vd24gbm9uLXRleHQKK2VuY29kaW5ncyBwcm92aWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgZGlyZWN0IHVzZXJzIHRvd2FyZHMgdGhlc2UKK2dlbmVyYWwgcHVycG9zZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgd2hlbiBhcHByb3ByaWF0ZTo6CisKKyAgICA+Pj4gYiJhYmNkZWYiLmRlY29kZSgiaGV4IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAnaGV4JyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyB1c2UgY29kZWNzLmRlY29kZSgpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzCisKKyAgICA+Pj4gImhlbGxvIi5lbmNvZGUoInJvdDEzIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAncm90MTMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7IHVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworSW4gYSByZWxhdGVkIGNoYW5nZSwgd2hlbmV2ZXIgaXQgaXMgZmVhc2libGUgd2l0aG91dCBicmVha2luZyBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHksIGV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgb3BlcmF0aW9ucword2lsbCBiZSB3cmFwcGVkIGluIGEgY2hhaW5lZCBleGNlcHRpb24gb2YgdGhlIHNhbWUgdHlwZSB0aGF0IG1lbnRpb25zIHRoZQorbmFtZSBvZiB0aGUgY29kZWMgcmVzcG9uc2libGUgZm9yIHByb2R1Y2luZyB0aGUgZXJyb3I6OgorCisgICAgPj4+IGltcG9ydCBjb2RlY3MKKworICAgID4+PiBjb2RlY3MuZGVjb2RlKGIiYWJjZGVmZ2giLCAiaGV4IikKKyAgICBiaW5hc2NpaS5FcnJvcjogTm9uLWhleGFkZWNpbWFsIGRpZ2l0IGZvdW5kCisKKyAgICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBiaW5hc2NpaS5FcnJvcjogZGVjb2Rpbmcgd2l0aCAnaGV4JyBjb2RlYyBmYWlsZWQgKEVycm9yOiBOb24taGV4YWRlY2ltYWwgZGlnaXQgZm91bmQpCisKKyAgICA+Pj4gY29kZWNzLmVuY29kZSgiaGVsbG8iLCAiYnoyIikKKyAgICBUeXBlRXJyb3I6ICdzdHInIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBpbnRlcmZhY2UKKworICAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFR5cGVFcnJvcjogZW5jb2Rpbmcgd2l0aCAnYnoyJyBjb2RlYyBmYWlsZWQgKFR5cGVFcnJvcjogJ3N0cicgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSkKKworRmluYWxseSwgYXMgdGhlIGV4YW1wbGVzIGFib3ZlIHNob3csIHRoZXNlIGltcHJvdmVtZW50cyBoYXZlIHBlcm1pdHRlZAordGhlIHJlc3RvcmF0aW9uIG9mIHRoZSBjb252ZW5pZW5jZSBhbGlhc2VzIGZvciB0aGUgbm9uLVVuaWNvZGUgY29kZWNzIHRoYXQKK3dlcmUgdGhlbXNlbHZlcyByZXN0b3JlZCBpbiBQeXRob24gMy4yLiBUaGlzIG1lYW5zIHRoYXQgZW5jb2RpbmcgYmluYXJ5IGRhdGEKK3RvIGFuZCBmcm9tIGl0cyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiAoZm9yIGV4YW1wbGUpIGNhbiBub3cgYmUgd3JpdHRlbgorYXM6OgorCisgICAgPj4+IGZyb20gY29kZWNzIGltcG9ydCBlbmNvZGUsIGRlY29kZQorICAgID4+PiBlbmNvZGUoYiJoZWxsbyIsICJoZXgiKQorICAgIGInNjg2NTZjNmM2ZicKKyAgICA+Pj4gZGVjb2RlKGIiNjg2NTZjNmM2ZiIsICJoZXgiKQorICAgIGInaGVsbG8nCisKK1RoZSBiaW5hcnkgYW5kIHRleHQgdHJhbnNmb3JtcyBwcm92aWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBhcmUgZGV0YWlsZWQKK2luIDpyZWY6YGJpbmFyeS10cmFuc2Zvcm1zYCBhbmQgOnJlZjpgdGV4dC10cmFuc2Zvcm1zYC4KKworKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDc0NzVgLCAsIDppc3N1ZTpgMTc4MjdgLAorOmlzc3VlOmAxNzgyOGAgYW5kIDppc3N1ZTpgMTk2MTlgKQorCisuLiBfcGVwLTQ1MToKKworUEVQIDQ1MTogQSBNb2R1bGVTcGVjIFR5cGUgZm9yIHRoZSBJbXBvcnQgU3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOnBlcDpgNDUxYCBwcm92aWRlcyBhbiBlbmNhcHN1bGF0aW9uIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIG1vZHVsZQordGhhdCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZSB0byBsb2FkIGl0LCAoaS5lLiBhIG1vZHVsZSBzcGVjKS4KK1RoaXMgaGVscHMgc2ltcGxpZnkgYm90aCB0aGUgaW1wb3J0IGltcGxlbWVudGF0aW9uIGFuZCBzZXZlcmFsCitpbXBvcnQtcmVsYXRlZCBBUElzLiAgVGhlIGNoYW5nZSBpcyBhbHNvIGEgc3RlcHBpbmcgc3RvbmUgZm9yIHNldmVyYWwKK2Z1dHVyZSBpbXBvcnQtcmVsYXRlZCBpbXByb3ZlbWVudHMuCisKK2h0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMTMtTm92ZW1iZXIvMTMwMTExLmh0bWwKKworVGhlIHB1YmxpYy1mYWNpbmcgY2hhbmdlcyBmcm9tIHRoZSBQRVAgYXJlIGVudGlyZWx5IGJhY2t3YXJkLWNvbXBhdGlibGUuCitGdXJ0aGVybW9yZSwgdGhleSBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gZXZlcnlvbmUgYnV0IGltcG9ydGVyCithdXRob3JzLiAgS2V5IGZpbmRlciBhbmQgbG9hZGVyIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsIGJ1dCB0aGV5Cit3aWxsIGNvbnRpbnVlIHdvcmtpbmcuICBOZXcgaW1wb3J0ZXJzIHNob3VsZCB1c2UgdGhlIG5ldyBtZXRob2RzCitkZXNjcmliZWQgaW4gdGhlIFBFUC4gIEV4aXN0aW5nIGltcG9ydGVycyBzaG91bGQgYmUgdXBkYXRlZCB0byBpbXBsZW1lbnQKK3RoZSBuZXcgbWV0aG9kcy4KKworCitQaWNrbGUgcHJvdG9jb2wgNAorPT09PT09PT09PT09PT09PT0KKworVGhlIG5ldyA6bW9kOmBwaWNrbGVgIHByb3RvY29sIGFkZHJlc3NlcyBhIG51bWJlciBvZiBpc3N1ZXMgdGhhdCB3ZXJlIHByZXNlbnQKK2luIHByZXZpb3VzIHByb3RvY29scywgc3VjaCBhcyB0aGUgc2VyaWFsaXphdGlvbiBvZiBuZXN0ZWQgY2xhc3NlcywgdmVyeQorbGFyZ2Ugc3RyaW5ncyBhbmQgY29udGFpbmVycywgb3IgY2xhc3NlcyB3aG9zZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHRha2VzCitrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiAgSXQgYWxzbyBicmluZ3MgYSBjb3VwbGUgZWZmaWNpZW5jeSBpbXByb3ZlbWVudHMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU0YCAtIFBpY2tsZSBwcm90b2NvbCA0CisgICAgICBQRVAgd3JpdHRlbiBieSBBbnRvaW5lIFBpdHJvdSBhbmQgaW1wbGVtZW50ZWQgYnkgQWxleGFuZHJlIFZhc3NhbG90dGkuCisKKworT3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PQorCitTb21lIHNtYWxsZXIgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIFB5dGhvbiBsYW5ndWFnZSBhcmU6CisKKyogVW5pY29kZSBkYXRhYmFzZSB1cGRhdGVkIHRvIFVDRCB2ZXJzaW9uIDYuMy4KKworKiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAgbm93IGFjY2VwdCBhICpkZWZhdWx0KiBhcmd1bWVudCB0aGF0IGNhbiBiZSB1c2VkCisgIHRvIHNwZWNpZnkgdGhlIHZhbHVlIHRoZXkgcmV0dXJuIGlmIHRoZSBpdGVyYWJsZSB0aGV5IGFyZSBldmFsdWF0aW5nIGhhcyBubworICBlbGVtZW50cy4gIENvbnRyaWJ1dGVkIGJ5IEp1bGlhbiBCZXJtYW4gaW4gOmlzc3VlOmAxODExMWAuCisKKyogTW9kdWxlIG9iamVjdHMgYXJlIG5vdyA6bW9kOmB3ZWFrcmVmYCdhYmxlLgorCisqIE1vZHVsZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlcyAoYW5kIHJlbGF0ZWQgdmFsdWVzKSBzaG91bGQgbm93IGFsd2F5cworICBjb250YWluIGFic29sdXRlIHBhdGhzIGJ5IGRlZmF1bHQsIHdpdGggdGhlIHNvbGUgZXhjZXB0aW9uIG9mCisgIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0IGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nCisgIGEgcmVsYXRpdmUgcGF0aCAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTg0MTZgKS4KKworKiBOb3cgYWxsIHRoZSBVVEYtXCogY29kZWNzIChleGNlcHQgVVRGLTcpIHJlamVjdCBzdXJyb2dhdGVzIGR1cmluZyBib3RoCisgIGVuY29kaW5nIGFuZCBkZWNvZGluZyB1bmxlc3MgdGhlIGBgc3Vycm9nYXRlcGFzc2BgIGVycm9yIGhhbmRsZXIgaXMgdXNlZCwKKyAgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBVVEYtMTYgZGVjb2RlciB0aGF0IGFjY2VwdHMgdmFsaWQgc3Vycm9nYXRlIHBhaXJzLAorICBhbmQgdGhlIFVURi0xNiBlbmNvZGVyIHRoYXQgcHJvZHVjZXMgdGhlbSB3aGlsZSBlbmNvZGluZyBub24tQk1QIGNoYXJhY3RlcnMuCisgIENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyLCBLYW5nLUhhbyAoS2VubnkpIEx1IGFuZCBTZXJoaXkgU3RvcmNoYWthIGluCisgIDppc3N1ZTpgMTI4OTJgLgorCisKK05ldyBNb2R1bGVzCis9PT09PT09PT09PQorCisKK2FzeW5jaW8KKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBhc3luY2lvYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgMzE1NmApIHByb3ZpZGVzIGEgc3RhbmRhcmQKK3BsdWdnYWJsZSBldmVudCBsb29wIG1vZGVsIGZvciBQeXRob24sIHByb3ZpZGluZyBzb2xpZCBhc3luY2hyb25vdXMgSU8KK3N1cHBvcnQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIGFuZCBtYWtpbmcgaXQgZWFzaWVyIGZvciBvdGhlciBldmVudCBsb29wCitpbXBsZW1lbnRhdGlvbnMgdG8gaW50ZXJvcGVyYXRlIHdpdGggdGhlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGVhY2ggb3RoZXIuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU2YCAtIEFzeW5jaHJvbm91cyBJTyBTdXBwb3J0IFJlYm9vdGVkOiB0aGUgImFzeW5jaW8iIE1vZHVsZQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGF0aW9uIGxlZCBieSBHdWlkbyB2YW4gUm9zc3VtLgorCitlbnVtCistLS0tCisKK1RoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQzNWApIHByb3ZpZGVzIGEgc3RhbmRhcmQKK2ltcGxlbWVudGF0aW9uIG9mIGVudW1lcmF0aW9uIHR5cGVzLCBhbGxvd2luZyBvdGhlciBtb2R1bGVzIChzdWNoIGFzCis6bW9kOmBzb2NrZXRgKSB0byBwcm92aWRlIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIGJldHRlcgorZGVidWdnaW5nIHN1cHBvcnQgYnkgcmVwbGFjaW5nIG9wYXF1ZSBpbnRlZ2VyIGNvbnN0YW50cyB3aXRoIGJhY2t3YXJkcworY29tcGF0aWJsZSBlbnVtZXJhdGlvbiB2YWx1ZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MzVgIC0gQWRkaW5nIGFuIEVudW0gdHlwZSB0byB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkKKyAgICAgIFBFUCB3cml0dGVuIGJ5IEJhcnJ5IFdhcnNhdywgRWxpIEJlbmRlcnNreSBhbmQgRXRoYW4gRnVybWFuLAorICAgICAgaW1wbGVtZW50ZWQgYnkgRXRoYW4gRnVybWFuLgorCisKK3BhdGhsaWIKKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMKK3dpdGggc2VtYW50aWNzIGFwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlCitkaXZpZGVkIGJldHdlZW4gKnB1cmUgcGF0aHMqLCB3aGljaCBwcm92aWRlIHB1cmVseSBjb21wdXRhdGlvbmFsIG9wZXJhdGlvbnMKK3dpdGhvdXQgSS9PLCBhbmQgKmNvbmNyZXRlIHBhdGhzKiwgd2hpY2ggaW5oZXJpdCBmcm9tIHB1cmUgcGF0aHMgYnV0IGFsc28KK3Byb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MjhgIC0gVGhlIHBhdGhsaWIgbW9kdWxlIC0tIG9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgQW50b2luZSBQaXRyb3UuCisKKworc2VsZWN0b3JzCistLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSAoY3JlYXRlZCBhcyBwYXJ0IG9mIGltcGxlbWVudGluZyA6cGVwOmAzMTU2YCkKK2FsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuCisKKworc3RhdGlzdGljcworLS0tLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YHN0YXRpc3RpY3NgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTBgKSBvZmZlcnMgc29tZSBjb3JlCitzdGF0aXN0aWNzIGZ1bmN0aW9uYWxpdHkgZGlyZWN0bHkgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuIFRoaXMgbW9kdWxlCitzdXBwb3J0cyBjYWxjdWxhdGlvbiBvZiB0aGUgbWVhbiwgbWVkaWFuLCBtb2RlLCB2YXJpYW5jZSBhbmQgc3RhbmRhcmQKK2RldmlhdGlvbiBvZiBhIGRhdGEgc2VyaWVzLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDUwYCAtIEFkZGluZyBBIFN0YXRpc3RpY3MgTW9kdWxlIFRvIFRoZSBTdGFuZGFyZCBMaWJyYXJ5CisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgU3RldmVuIEQnQXByYW5vCisKKwordHJhY2VtYWxsb2MKKy0tLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTRgKSBpcyBhIGRlYnVnIHRvb2wgdG8KK3RyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4gSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKworKiBUcmFjZWJhY2sgd2hlcmUgYW4gb2JqZWN0IHdhcyBhbGxvY2F0ZWQKKyogU3RhdGlzdGljcyBvbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcyBwZXIgZmlsZW5hbWUgYW5kIHBlciBsaW5lIG51bWJlcjoKKyAgdG90YWwgc2l6ZSwgbnVtYmVyIGFuZCBhdmVyYWdlIHNpemUgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MKKyogQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gc25hcHNob3RzIHRvIGRldGVjdCBtZW1vcnkgbGVha3MKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ1NGAgLSBBZGQgYSBuZXcgdHJhY2VtYWxsb2MgbW9kdWxlIHRvIHRyYWNlIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lcgorCisKK0ltcHJvdmVkIE1vZHVsZXMKKz09PT09PT09PT09PT09PT0KKworYWlmYworLS0tLQorCitUaGUgOm1ldGg6YH5haWZjLmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzgxOGAuKQorCisKK2F1ZGlvb3AKKy0tLS0tLS0KKworQWRkZWQgc3VwcG9ydCBmb3IgMjQtYml0IHNhbXBsZXMgKDppc3N1ZTpgMTI4NjZgKS4KKworQWRkZWQgdGhlIDpmdW5jOmB+YXVkaW9vcC5ieXRlc3dhcGAgZnVuY3Rpb24gdG8gY29udmVydCBiaWctZW5kaWFuIHNhbXBsZXMKK3RvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2EgKDppc3N1ZTpgMTk2NDFgKS4KKworCitiYXNlNjQKKy0tLS0tLQorCitUaGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBpbiA6bW9kOmBiYXNlNjRgIG5vdyBhY2NlcHQgYW55Cis6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGluIGNhc2VzIHdoZXJlIGl0IHByZXZpb3VzbHkgcmVxdWlyZWQgYQorOmNsYXNzOmBieXRlc2Agb3IgOmNsYXNzOmBieXRlYXJyYXlgIGluc3RhbmNlICg6aXNzdWU6YDE3ODM5YCkuCisKKworY29sb3JzeXMKKy0tLS0tLS0tCisKK1RoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBjb2VmZmljaWVudHMgZm9yIHRoZSBSR0IgLS0tIFlJUSBjb252ZXJzaW9ucyBoYXZlCitiZWVuIGV4cGFuZGVkIHNvIHRoYXQgdGhleSBtYXRjaCB0aGUgRkNDIE5UU0MgdmVyc2lvbnMuICBUaGUgY2hhbmdlIGluCityZXN1bHRzIHNob3VsZCBiZSBsZXNzIHRoYW4gMSUgYW5kIG1heSBiZXR0ZXIgbWF0Y2ggcmVzdWx0cyBmb3VuZCBlbHNld2hlcmUuCisKKworY29udGV4dGxpYgorLS0tLS0tLS0tLQorCitUaGUgbmV3IDpjbGFzczpgY29udGV4dGxpYi5zdXBwcmVzc2AgY29udGV4dCBtYW5hZ2VyIGhlbHBzIHRvIGNsYXJpZnkgdGhlCitpbnRlbnQgb2YgY29kZSB0aGF0IGRlbGliZXJhdGVseSBzdXBwcmVzc2VzIGV4Y2VwdGlvbnMgZnJvbSBhIHNpbmdsZQorc3RhdGVtZW50LiAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAxNTgwNmAgYW5kCitaZXJvIFBpcmFldXMgaW4gOmlzc3VlOmAxOTI2NmApCisKK1RoZSBuZXcgOmZ1bmM6YGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0YCBjb250ZXh0IG1hbmFnZXIgbWFrZXMgaXQgZWFzaWVyCitmb3IgdXRpbGl0eSBzY3JpcHRzIHRvIGhhbmRsZSBpbmZsZXhpYmxlIEFQSXMgdGhhdCBkb24ndCBwcm92aWRlIGFueQorb3B0aW9ucyB0byByZXRyaWV2ZSB0aGVpciBvdXRwdXQgYXMgYSBzdHJpbmcgb3IgZGlyZWN0IGl0IHRvIHNvbWV3aGVyZQorb3RoZXIgdGhhbiA6ZGF0YTpgc3lzLnN0ZG91dGAuIEluIGNvbmp1bmN0aW9uIHdpdGggOmNsYXNzOmBpby5TdHJpbmdJT2AsCit0aGlzIGNvbnRleHQgbWFuYWdlciBpcyBhbHNvIHVzZWZ1bCBmb3IgY2hlY2tpbmcgZXhwZWN0ZWQgb3V0cHV0IGZyb20KK2NvbW1hbmQgbGluZSB1dGlsaXRpZXMuIChDb250cmlidXRlIGJ5IFJheW1vbmQgSGV0dGluZ2VyIGluIDppc3N1ZTpgMTU4MDVgKQorCitUaGUgOm1vZDpgY29udGV4dGxpYmAgZG9jdW1lbnRhdGlvbiBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gaW5jbHVkZSBhCis6cmVmOmBkaXNjdXNzaW9uIDxzaW5nbGUtdXNlLXJldXNhYmxlLWFuZC1yZWVudHJhbnQtY21zPmAgb2YgdGhlCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHNpbmdsZSB1c2UsIHJldXNhYmxlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2Vycy4KKworCitkaXMKKy0tLQorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgaXMgbm93IGJ1aWx0IGFyb3VuZCBhbiA6Y2xhc3M6YH5kaXMuSW5zdHJ1Y3Rpb25gIGNsYXNzCit0aGF0IHByb3ZpZGVzIGRldGFpbHMgb2YgaW5kaXZpZHVhbCBieXRlY29kZSBvcGVyYXRpb25zIGFuZCBhCis6ZnVuYzpgfmRpcy5nZXRfaW5zdHJ1Y3Rpb25zYCBpdGVyYXRvciB0aGF0IGVtaXRzIHRoZSBJbnN0cnVjdGlvbiBzdHJlYW0gZm9yIGEKK2dpdmVuIHBpZWNlIG9mIFB5dGhvbiBjb2RlLiBUaGUgdmFyaW91cyBkaXNwbGF5IHRvb2xzIGluIHRoZSA6bW9kOmBkaXNgCittb2R1bGUgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYmUgYmFzZWQgb24gdGhlc2UgbmV3IGNvbXBvbmVudHMuCisKK1RoZSBuZXcgOmNsYXNzOmBkaXMuQnl0ZWNvZGVgIGNsYXNzIHByb3ZpZGVzIGFuIG9iamVjdC1vcmllbnRlZCBBUEkgZm9yCitpbnNwZWN0aW5nIGJ5dGVjb2RlLCBib3RoIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0gYW5kIGZvciBpdGVyYXRpbmcgb3ZlcgoraW5zdHJ1Y3Rpb25zLgorCisoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuLCBSeWFuIEtlbGx5IGFuZCBUaG9tYXMgS2x1eXZlciBpbiA6aXNzdWU6YDExODE2YAorYW5kIENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3OTE2YCkKKworCitkb2N0ZXN0CistLS0tLS0tCisKK0FkZGVkIDpkYXRhOmB+ZG9jdGVzdC5GQUlMX0ZBU1RgIGZsYWcgdG8gaGFsdCB0ZXN0IHJ1bm5pbmcgYXMgc29vbiBhcyB0aGUgZmlyc3QKK2ZhaWx1cmUgaXMgZGV0ZWN0ZWQuICAoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQgTXVycmF5IGFuZCBEYW5pZWwgVXJiYW4gaW4KKzppc3N1ZTpgMTY1MjJgLikKKworVXBkYXRlZCB0aGUgZG9jdGVzdCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHVzZSA6bW9kOmBhcmdwYXJzZWAsIGFuZCBhZGRlZAorYGAtb2BgIGFuZCBgYC1mYGAgb3B0aW9ucyB0byB0aGUgaW50ZXJmYWNlLiAgYGAtb2BgIGFsbG93cyBkb2N0ZXN0IG9wdGlvbnMgdG8KK2JlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgYGAtZmBgIGlzIGEgc2hvcnRoYW5kIGZvciBgYC1vCitGQUlMX0ZBU1RgYCAodG8gcGFyYWxsZWwgdGhlIHNpbWlsYXIgb3B0aW9uIHN1cHBvcnRlZCBieSB0aGUgOm1vZDpgdW5pdHRlc3RgCitDTEkpLiAgKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDExMzkwYC4pCisKKworZW1haWwKKy0tLS0tCisKKzptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ2Agbm93IGFjY2VwdHMgYSAqcG9saWN5KiBhcmd1bWVudCB0bworb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9mIHRoZSBtZXNzYWdlIHdoZW4gZ2VuZXJhdGluZyBhIHN0cmluZworcmVwcmVzZW50YXRpb24gb2YgaXQuICBUaGlzIG1lYW5zIHRoYXQgYGBhc19zdHJpbmdgYCBjYW4gbm93IGJlIHVzZWQgaW4gbW9yZQorY2lyY3Vtc3RhbmNlcywgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY3JlYXRlIGFuZCB1c2UgYSA6bW9kOmB+ZW1haWwuZ2VuZXJhdG9yYCBpbgorb3JkZXIgdG8gcGFzcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMgdG8gaXRzIGBgZmxhdHRlbmBgIG1ldGhvZC4KKworTmV3IG1ldGhvZCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19ieXRlc2AgYWRkZWQgdG8gcHJvZHVjZSBhIGJ5dGVzCityZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBpbiBhIGZhc2hpb24gc2ltaWxhciB0byBob3cgYGBhc19zdHJpbmdgYAorcHJvZHVjZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICBJdCBkb2VzIG5vdCBhY2NlcHQgdGhlICptYXhoZWFkZXJsZW4qCithcmd1bWVudCwgYnV0IGRvZXMgYWNjZXB0IHRoZSAqdW5peGZyb20qIGFuZCAqcG9saWN5KiBhcmd1bWVudHMuIFRoZQorOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2J5dGVzX19gIG1ldGhvZAorY2FsbHMgaXQsIG1lYW5pbmcgdGhhdCBgYGJ5dGVzKG15bXNnKWBgIHdpbGwgbm93IHByb2R1Y2UgdGhlIGludHVpdGl2ZQorcmVzdWx0OiAgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZnVsbHkgZm9ybWF0dGVkIG1lc3NhZ2UuCisKKyhDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxODYwMGAuKQorCitBIHBhaXIgb2YgbmV3IHN1YmNsYXNzZXMgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBoYXZlIGJlZW4gYWRkZWQsCithbG9uZyB3aXRoIGEgbmV3IHN1Yi1tb2R1bGUsIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAuICBBbGwgZG9jdW1lbnRhdGlvbgoraXMgY3VycmVudGx5IGluIHRoZSBuZXcgbW9kdWxlLCB3aGljaCBpcyBiZWluZyBhZGRlZCBhcyBwYXJ0IG9mIHRoZSBuZXcKKzp0ZXJtOmBwcm92aXNpb25hbCA8cHJvdmlzaW9uYWwgcGFja2FnZT5gIGVtYWlsIEFQSS4gIFRoZXNlIGNsYXNzZXMgcHJvdmlkZSBhCitudW1iZXIgb2YgbmV3IG1ldGhvZHMgdGhhdCBtYWtlIGV4dHJhY3RpbmcgY29udGVudCBmcm9tIGFuZCBpbnNlcnRpbmcgY29udGVudAoraW50byBlbWFpbCBtZXNzYWdlcyBtdWNoIGVhc2llci4gIFNlZSB0aGUgOm1vZDpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyYAorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworVGhlc2UgQVBJIGFkZGl0aW9ucyBjb21wbGV0ZSB0aGUgYnVsayBvZiB0aGUgd29yayB0aGF0IHdhcyBwbGFubmVkIGFzIHBhcnQgb2YKK3RoZSBlbWFpbDYgcHJvamVjdC4gIFRoZSBjdXJyZW50bHkgcHJvdmlzaW9uYWwgQVBJIGlzIHNjaGVkdWxlZCB0byBiZWNvbWUgZmluYWwKK2luIFB5dGhvbiAzLjUgKHBvc3NpYmx5IHdpdGggYSBmZXcgbWlub3IgYWRkaXRpb25zIGluIHRoZSBhcmVhIG9mIGVycm9yCitoYW5kbGluZykuCisKKyhDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxODg5MWAuKQorCisKK2Z1bmN0b29scworLS0tLS0tLS0tCisKK1RoZSBuZXcgOmZ1bmM6YH5mdW5jdG9vbHMucGFydGlhbG1ldGhvZGAgZGVzY3JpcHRvciBicmluZyBwYXJ0aWFsIGFyZ3VtZW50CithcHBsaWNhdGlvbiB0byBkZXNjcmlwdG9ycywganVzdCBhcyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBwcm92aWRlcworZm9yIG5vcm1hbCBjYWxsYWJsZXMuIFRoZSBuZXcgZGVzY3JpcHRvciBhbHNvIG1ha2VzIGl0IGVhc2llciB0byBnZXQKK2FyYml0cmFyeSBjYWxsYWJsZXMgKGluY2x1ZGluZyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBpbnN0YW5jZXMpCit0byBiZWhhdmUgbGlrZSBub3JtYWwgaW5zdGFuY2UgbWV0aG9kcyB3aGVuIGluY2x1ZGVkIGluIGEgY2xhc3MgZGVmaW5pdGlvbi4KKworKENvbnRyaWJ1dGVkIGJ5IEFsb24gSG9yZXYgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDQzMzFgKQorCitUaGUgbmV3IDpmdW5jOmB+ZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoYCBkZWNvcmF0b3IgYnJpbmdzIHN1cHBvcnQgZm9yCitzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5LiBXaGVyZQorb2JqZWN0IG9yaWVudGVkIHByb2dyYW1taW5nIGZvY3VzZXMgb24gZ3JvdXBpbmcgbXVsdGlwbGUgb3BlcmF0aW9ucyBvbiBhCitjb21tb24gc2V0IG9mIGRhdGEgaW50byBhIGNsYXNzLCBhIGdlbmVyaWMgZnVuY3Rpb24gZm9jdXNlcyBvbiBncm91cGluZworbXVsdGlwbGUgaW1wbGVtZW50YXRpb25zIG9mIGFuIG9wZXJhdGlvbiB0aGF0IGFsbG93cyBpdCB0byB3b3JrIHdpdGgKKypkaWZmZXJlbnQqIGtpbmRzIG9mIGRhdGEuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDNgIC0gU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb25zCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgxYF1a2FzeiBMYW5nYS4KKworCitoYXNobGliCistLS0tLS0tCisKK05ldyA6ZnVuYzpgaGFzaGxpYi5wYmtkZjJfaG1hY2AgZnVuY3Rpb24uCisKKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTg1ODJgKQorCisKK2h0bWwKKy0tLS0KKworQWRkZWQgYSBuZXcgOmZ1bmM6YGh0bWwudW5lc2NhcGVgIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgSFRNTDUgY2hhcmFjdGVyCityZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KKworKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDI5MjdgKQorCitBZGRlZCBhIG5ldyAqY29udmVydF9jaGFycmVmcyoga2V5d29yZCBhcmd1bWVudCB0bworOmNsYXNzOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlcmAgdGhhdCwgd2hlbiBgYFRydWVgYCwgYXV0b21hdGljYWxseSBjb252ZXJ0cworYWxsIGNoYXJhY3RlciByZWZlcmVuY2VzLiAgRm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHksIGl0cyB2YWx1ZSBkZWZhdWx0cwordG8gYGBGYWxzZWBgLCBidXQgaXQgd2lsbCBjaGFuZ2UgdG8gYGBUcnVlYGAgaW4gZnV0dXJlIHZlcnNpb25zLCBzbyB5b3UKK2FyZSBpbnZpdGVkIHRvIHNldCBpdCBleHBsaWNpdGx5IGFuZCB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZSB0aGlzIG5ldyBmZWF0dXJlLgorCisoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTM2MzNgKQorCitUaGUgKnN0cmljdCogYXJndW1lbnQgb2YgOmNsYXNzOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlcmAgaXMgbm93IGRlcHJlY2F0ZWQuCisKKyhDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxNTExNGApCisKKworaW5zcGVjdAorLS0tLS0tLQorCisKK1RoZSBpbnNwZWN0IG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgOnJlZjpgY29tbWFuZCBsaW5lIGludGVyZmFjZQorPGluc3BlY3QtbW9kdWxlLWNsaT5gIHRvIHF1aWNrbHkgZGlzcGxheSBzb3VyY2UgY29kZSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGZvciBtb2R1bGVzLCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEKK2FuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxODYyNmApCisKKzpmdW5jOmB+aW5zcGVjdC51bndyYXBgIG1ha2VzIGl0IGVhc3kgdG8gdW5yYXZlbCB3cmFwcGVyIGZ1bmN0aW9uIGNoYWlucworY3JlYXRlZCBieSA6ZnVuYzpgZnVuY3Rvb2xzLndyYXBzYCAoYW5kIGFueSBvdGhlciBBUEkgdGhhdCBzZXRzIHRoZQorYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBvbiBhIHdyYXBwZXIgZnVuY3Rpb24pLiAoQ29udHJpYnV0ZWQgYnkKK0RhbmllbCBVcmJhbiwgQWFyb24gSWxlcyBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTMyNjZgKQorCitBcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSwgdGhlCis6bW9kOmBpbnNwZWN0YCBtb2R1bGUgbm93IGhhcyBzdWJzdGFudGlhbGx5IGJldHRlciBzdXBwb3J0IGZvciBjdXN0b20KK2BgX19kaXJfX2BgIG1ldGhvZHMgYW5kIGR5bmFtaWMgY2xhc3MgYXR0cmlidXRlcyBwcm92aWRlZCB0aHJvdWdoCittZXRhY2xhc3NlcyAoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTg5MjlgIGFuZAorOmlzc3VlOmAxOTAzMGApCisKKworbW1hcAorLS0tLQorCittbWFwIG9iamVjdHMgY2FuIG5vdyBiZSB3ZWFrcmVmJ2VkLgorCisoQ29udHJpYnV0ZWQgYnkgVmFsZXJpZSBMYW1iZXJ0IGluIDppc3N1ZTpgNDg4NWAuKQorCisKK211bHRpcHJvY2Vzc2luZworLS0tLS0tLS0tLS0tLS0tCisKK09uIFVuaXggdHdvIG5ldyAqc3RhcnQgbWV0aG9kcyogaGF2ZSBiZWVuIGFkZGVkIGZvciBzdGFydGluZyBwcm9jZXNzZXMKK3VzaW5nIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuICBUaGVzZSBtYWtlIHRoZSBtaXhpbmcgb2YgcHJvY2Vzc2VzIHdpdGgKK3RocmVhZHMgbW9yZSByb2J1c3QuICBTZWUgOmlzc3VlOmA4NzEzYC4KKworQWxzbywgZXhjZXB0IHdoZW4gdXNpbmcgdGhlIG9sZCAqZm9yayogc3RhcnQgbWV0aG9kLCBjaGlsZCBwcm9jZXNzZXMKK3dpbGwgbm8gbG9uZ2VyIGluaGVyaXQgdW5uZWVkZWQgaGFuZGxlcy9maWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlaXIgcGFyZW50cy4KKworCitvcworLS0KKworTmV3IGZ1bmN0aW9ucyB0byBnZXQgYW5kIHNldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiBhIGZpbGUKK2Rlc2NyaXB0b3JzIG9yIGEgV2luZG93cyBoYW5kbGU6CisKKyogOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaW5oZXJpdGFibGVgCisqIDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgCisKKworcGRiCistLS0KKworVGhlIGBgcHJpbnRgYCBjb21tYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBwZGJgLCByZXN0b3JpbmcgYWNjZXNzIHRvIHRoZQorYGBwcmludGBgIGZ1bmN0aW9uLgorCitSYXRpb25hbGU6IFB5dGhvbjIncyBgYHBkYmBgIGRpZCBub3QgaGF2ZSBhIGBgcHJpbnRgYCBjb21tYW5kOyBpbnN0ZWFkLAorZW50ZXJpbmcgYGBwcmludGBgIGV4ZWN1dGVkIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LiAgSW4gUHl0aG9uMyBgYHByaW50YGAgd2FzCittaXN0YWtlbmx5IG1hZGUgYW4gYWxpYXMgZm9yIHRoZSBwZGIgOnBkYmNtZDpgcGAgY29tbWFuZC4gIGBgcGBgLCBob3dldmVyLAorcHJpbnRzIHRoZSBgYHJlcHJgYCBvZiBpdHMgYXJndW1lbnQsIG5vdCB0aGUgYGBzdHJgYCBsaWtlIHRoZSBQeXRob24yIGBgcHJpbnRgYAorY29tbWFuZCBkaWQuICBXb3JzZSwgdGhlIFB5dGhvbjMgYGBwZGIgcHJpbnRgYCBjb21tYW5kIHNoYWRvd2VkIHRoZSBQeXRob24zCitgYHByaW50YGAgZnVuY3Rpb24sIG1ha2luZyBpdCBpbmFjY2Vzc2libGUgYXQgdGhlIGBgcGRiYGAgcHJvbXB0LgorCisoQ29udHJpYnV0ZWQgYnkgQ29ubm9yIE9zYm9ybiBpbiA6aXNzdWU6YDE4NzY0YC4pCisKKworcG9wbGliCistLS0tLS0KKworTmV3IDptZXRoOmB+cG9wbGliLlBPUDMuc3Rsc2AgbWV0aG9kIHRvIHN3aXRjaCBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8KK2FuIGVuY3J5cHRlZCBQT1AzIHNlc3Npb24uCisKK05ldyA6bWV0aDpgfnBvcGxpYi5QT1AzLmNhcGFgIG1ldGhvZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlCitQT1AzIHNlcnZlci4KKworKENvbnRyaWJ1dGVkIGJ5IExvcmVuem8gQ2F0dWNjaSBpbiA6aXNzdWU6YDQ0NzNgLikKKworCitwcHJpbnQKKy0tLS0tLQorCitUaGUgOm1vZDpgcHByaW50YCBtb2R1bGUgbm93IHN1cHBvcnRzICpjb21wYWN0KiBtb2RlIGZvciBmb3JtYXR0aW5nIGxvbmcKK3NlcXVlbmNlcyAoOmlzc3VlOmAxOTEzMmApLgorCisKK3B5ZG9jCistLS0tLQorCitXaGlsZSBzaWduaWZpY2FudCBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gbWFkZSB0byA6bW9kOmBweWRvY2AgZGlyZWN0bHksCitpdHMgaGFuZGxpbmcgb2YgY3VzdG9tIGBgX19kaXJfX2BgIG1ldGhvZHMgYW5kIHZhcmlvdXMgZGVzY3JpcHRvcgorYmVoYXZpb3VycyBoYXMgYmVlbiBpbXByb3ZlZCBzdWJzdGFudGlhbGx5IGJ5IHRoZSB1bmRlcmx5aW5nIGNoYW5nZXMgaW4KK3RoZSA6bW9kOmBpbnNwZWN0YCBtb2R1bGUuCisKKworcmUKKy0tCisKK0FkZGVkIDpmdW5jOmByZS5mdWxsbWF0Y2hgIGZ1bmN0aW9uIGFuZCA6bWV0aDpgcmVnZXguZnVsbG1hdGNoYCBtZXRob2QsCit3aGljaCBhbmNob3IgdGhlIHBhdHRlcm4gYXQgYm90aCBlbmRzIG9mIHRoZSBzdHJpbmcgdG8gbWF0Y2guCisoQ29udHJpYnV0ZWQgYnkgTWF0dGhldyBCYXJuZXR0IGluIDppc3N1ZTpgMTYyMDNgLikKKworVGhlIHJlcHIgb2YgOnJlZjpgcmVnZXggb2JqZWN0cyA8cmUtb2JqZWN0cz5gIG5vdyBpbmNsdWRlcyB0aGUgcGF0dGVybgorYW5kIHRoZSBmbGFnczsgdGhlIHJlcHIgb2YgOnJlZjpgbWF0Y2ggb2JqZWN0cyA8bWF0Y2gtb2JqZWN0cz5gIG5vdworaW5jbHVkZXMgdGhlIHN0YXJ0LCBlbmQsIGFuZCB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZC4KKworKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxMzU5MmAgYW5kIDppc3N1ZTpgMTcwODdgLikKKworCityZXNvdXJjZQorLS0tLS0tLS0KKworTmV3IDpmdW5jOmByZXNvdXJjZS5wcmxpbWl0YCBmdW5jdGlvbiBhbmQgTGludXggc3BlY2lmaWMgY29uc3RhbnRzLgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjU5NWAgYW5kIDppc3N1ZTpgMTkzMjRgLikKKworc210cGxpYgorLS0tLS0tLQorCis6ZXhjOmB+c210cGxpYi5TTVRQRXhjZXB0aW9uYCBpcyBub3cgYSBzdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYCwgd2hpY2ggYWxsb3dzCitib3RoIHNvY2tldCBsZXZlbCBlcnJvcnMgYW5kIFNNVFAgcHJvdG9jb2wgbGV2ZWwgZXJyb3JzIHRvIGJlIGNhdWdodCBpbiBvbmUKK3RyeS9leGNlcHQgc3RhdGVtZW50IGJ5IGNvZGUgdGhhdCBvbmx5IGNhcmVzIHdoZXRoZXIgb3Igbm90IGFuIGVycm9yIG9jY3VycmVkLgorKDppc3N1ZTpgMjExOGApLgorCisKK3NvY2tldAorLS0tLS0tCisKK1NvY2tldCBvYmplY3RzIGhhdmUgbmV3IG1ldGhvZHMgdG8gZ2V0IG9yIHNldCB0aGVpciA6cmVmOmBpbmhlcml0YWJsZSBmbGFnCis8ZmRfaW5oZXJpdGFuY2U+YDoKKworKiA6bWV0aDpgc29ja2V0LnNvY2tldC5nZXRfaW5oZXJpdGFibGVgLCA6bWV0aDpgc29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGVgCisKK1RoZSBgYHNvY2tldC5BRl8qYGAgYW5kIGBgc29ja2V0LlNPQ0tfKmBgIGNvbnN0YW50cyBhcmUgZW51bWVyYXRpb24gdmFsdWVzLAordXNpbmcgdGhlIG5ldyA6bW9kOmBlbnVtYCBtb2R1bGUuIFRoaXMgYWxsb3dzIGRlc2NyaXB0aXZlIHJlcG9ydGluZyBkdXJpbmcKK2RlYnVnZ2luZywgaW5zdGVhZCBvZiBzZWVpbmcgaW50ZWdlciAibWFnaWMgbnVtYmVycyIuCisKK3NzbAorLS0tCisKK1RMU3YxLjEgYW5kIFRMU3YxLjIgc3VwcG9ydC4KKworKENvbnRyaWJ1dGVkIGJ5IE1pY2hlbGUgT3Jyw7kgYW5kIEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTY2OTJgKQorCisqIE5ldyBkaWFnbm9zdGljIGZ1bmN0aW9ucyA6ZnVuYzpgfnNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgLAorICA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHNgIGFuZAorICA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmdldF9jYV9jZXJ0c2AKKworKiBBZGQgOmZ1bmM6YHNzbC5lbnVtX2NlcnRfc3RvcmVgIHRvIHJldHJpZXZlIGNlcnRpZmljYXRlcyBhbmQgQ1JMIGZyb20gV2luZG93cycKKyAgY2VydCBzdG9yZS4KKworKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODE0M2AsIDppc3N1ZTpgMTgxNDdgIGFuZAorIDppc3N1ZTpgMTcxMzRgLikKKworU3VwcG9ydCBmb3Igc2VydmVyLXNpZGUgU05JIHVzaW5nIHRoZSBuZXcKKzptZXRoOmBzc2wuU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AgbWV0aG9kLgorCisoQ29udHJpYnV0ZWQgYnkgRGFuaWVsIEJsYWNrIGluIDppc3N1ZTpgODEwOWAuKQorCisKK3N0YXQKKy0tLS0KKworVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBpcyBub3cgYmFja2VkIGJ5IGEgQyBpbXBsZW1lbnRhdGlvbiBpbiA6bW9kOmBfc3RhdGAuIEEgQworaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgYXMgbW9zdCBvZiB0aGUgdmFsdWVzIGFyZW4ndCBzdGFuZGFyZGl6ZWQgYW5kCitwbGF0Zm9ybS1kZXBlbmRlbnQuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDExMDE2YC4pCisKK1RoZSBtb2R1bGUgc3VwcG9ydHMgbmV3IGZpbGUgdHlwZXM6IGRvb3IsIGV2ZW50IHBvcnQgYW5kIHdoaXRlb3V0LgorCisKK3N0cnVjdAorLS0tLS0tCisKK1N0cmVhbWluZyBzdHJ1Y3QgdW5wYWNraW5nIHVzaW5nIDpmdW5jOmBzdHJ1Y3QuaXRlcl91bnBhY2tgLgorCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNzgwNGAuKQorCisKK3N1bmF1CistLS0tLQorCitUaGUgOm1ldGg6YH5zdW5hdS5nZXRwYXJhbXNgIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4gYQorcGxhaW4gdHVwbGUuICAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTg5MDFgLikKKworOm1ldGg6YHN1bmF1Lm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sICg6aXNzdWU6YDE4ODc4YCkuCisKKwordHJhY2ViYWNrCistLS0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YHRyYWNlYmFjay5jbGVhcl9mcmFtZXNgIGZ1bmN0aW9uIHRha2VzIGEgdHJhY2ViYWNrIG9iamVjdAorYW5kIGNsZWFycyB0aGUgbG9jYWwgdmFyaWFibGVzIGluIGFsbCBvZiB0aGUgZnJhbWVzIGl0IHJlZmVyZW5jZXMsCityZWR1Y2luZyB0aGUgYW1vdW50IG9mIG1lbW9yeSBjb25zdW1lZCAoOmlzc3VlOmAxNTY1NTI1YCkuCisKKwordXJsbGliCistLS0tLS0KKworQWRkIHN1cHBvcnQuZm9yIGBgZGF0YTpgYCBVUkxzIGluIDptb2Q6YHVybGxpYi5yZXF1ZXN0YC4KKworKENvbnRyaWJ1dGVkIGJ5IE1hdGhpYXMgUGFuemVuYsO2Y2sgaW4gOmlzc3VlOmAxNjQyM2AuKQorCisKK3VuaXR0ZXN0CistLS0tLS0tLQorCitTdXBwb3J0IGZvciBlYXN5IGR5bmFtaWNhbGx5LWdlbmVyYXRlZCBzdWJ0ZXN0cyB1c2luZyB0aGUKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc3ViVGVzdGAgY29udGV4dCBtYW5hZ2VyLgorCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNjk5N2AuKQorCisKK3dhdmUKKy0tLS0KKworVGhlIDptZXRoOmB+d2F2ZS5nZXRwYXJhbXNgIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4gYQorcGxhaW4gdHVwbGUuICAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTc0ODdgLikKKworOm1ldGg6YHdhdmUub3BlbmAgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICAoQ29udHJpYnV0ZWQKK2J5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3NjE2YC4pCisKKword2Vha3JlZgorLS0tLS0tLQorCitOZXcgOmNsYXNzOmB+d2Vha3JlZi5XZWFrTWV0aG9kYCBjbGFzcyBzaW11bGF0ZXMgd2VhayByZWZlcmVuY2VzIHRvIGJvdW5kCittZXRob2RzLiAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNDYzMWAuKQorCitOZXcgOmNsYXNzOmB+d2Vha3JlZi5maW5hbGl6ZWAgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjawordG8gYmUgaW52b2tlZCB3aGVuIGFuIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCwgd2l0aG91dCBuZWVkaW5nIHRvCitjYXJlZnVsbHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHdlYWsgcmVmZXJlbmNlIGl0c2VsZi4gKENvbnRyaWJ1dGVkIGJ5CitSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmAxNTUyOGApCisKKworeG1sLmV0cmVlCistLS0tLS0tLS0KKworQWRkIGFuIGV2ZW50LWRyaXZlbiBwYXJzZXIgZm9yIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMsCis6Y2xhc3M6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUHVsbFBhcnNlcmAuCisKKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3NzQxYC4pCisKKworemlwZmlsZS5QeVppcGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCBhIGZpbHRlciBmdW5jdGlvbiB0byBpZ25vcmUgc29tZSBwYWNrYWdlcyAodGVzdHMgZm9yIGluc3RhbmNlKSwKKzptZXRoOmB+emlwZmlsZS5QeVppcEZpbGUud3JpdGVweWAuCisKKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gVGlzbWVyIGluIDppc3N1ZTpgMTkyNzRgLikKKworCitPdGhlciBpbXByb3ZlbWVudHMKKz09PT09PT09PT09PT09PT09PQorCitUYWItY29tcGxldGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4KKworKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGFuZCDDiXJpYyBBcmF1am8gaW4gOmlzc3VlOmA1ODQ1YC4pCisKK1B5dGhvbiBpbnZvY2F0aW9uIGNoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW52b2tpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3aXRoIGBgLS12ZXJzaW9uYGAgbm93IG91dHB1dHMgdGhlIHZlcnNpb24gdG8KK3N0YW5kYXJkIG91dHB1dCBpbnN0ZWFkIG9mIHN0YW5kYXJkIGVycm9yICg6aXNzdWU6YDE4MzM4YCkuIFNpbWlsYXIgY2hhbmdlcword2VyZSBtYWRlIHRvIDptb2Q6YGFyZ3BhcnNlYCAoOmlzc3VlOmAxODkyMGApIGFuZCBvdGhlciBtb2R1bGVzIHRoYXQgaGF2ZQorc2NyaXB0LWxpa2UgaW52b2NhdGlvbiBjYXBhYmlsaXRpZXMgKDppc3N1ZTpgMTg5MjJgKS4KKworT3B0aW1pemF0aW9ucworPT09PT09PT09PT09PQorCitNYWpvciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgaGF2ZSBiZWVuIGFkZGVkOgorCisqIFRoZSBVVEYtMzIgZGVjb2RlciBpcyBub3cgM3ggdG8gNHggZmFzdGVyLgorCisqIFRoZSBjb3N0IG9mIGhhc2ggY29sbGlzaW9ucyBmb3Igc2V0cyBpcyBub3cgcmVkdWNlZC4gIEVhY2ggaGFzaCB0YWJsZQorICBwcm9iZSBub3cgY2hlY2tzIGEgc2VyaWVzIG9mIGNvbnNlY3V0aXZlLCBhZGphY2VudCBrZXkvaGFzaCBwYWlycyBiZWZvcmUKKyAgY29udGludWluZyB0byBtYWtlIHJhbmRvbSBwcm9iZXMgdGhyb3VnaCB0aGUgaGFzaCB0YWJsZS4gIFRoaXMgZXhwbG9pdHMKKyAgY2FjaGUgbG9jYWxpdHkgdG8gbWFrZSBjb2xsaXNpb24gcmVzb2x1dGlvbiBsZXNzIGV4cGVuc2l2ZS4KKworICBUaGUgY29sbGlzaW9uIHJlc29sdXRpb24gc2NoZW1lIGNhbiBiZSBkZXNjcmliZWQgYXMgYSBoeWJyaWQgb2YgbGluZWFyCisgIHByb2JpbmcgYW5kIG9wZW4gYWRkcmVzc2luZy4gIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBsaW5lYXIgcHJvYmVzCisgIGRlZmF1bHRzIHRvIG5pbmUuICBUaGlzIGNhbiBiZSBjaGFuZ2VkIGF0IGNvbXBpbGUtdGltZSBieSBkZWZpbmluZworICBMSU5FQVJfUFJPQkVTIHRvIGJlIGFueSB2YWx1ZS4gIFNldCBMSU5FQVJfUFJPQkVTPTAgdG8gdHVybi1vZmYKKyAgbGluZWFyIHByb2JpbmcgZW50aXJlbHkuCisKKyAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyIGluIDppc3N1ZTpgMTg3NzFgLikKKworKiBUaGUgaW50ZXJwcmV0ZXIgc3RhcnRzIGFib3V0IDMwJSBmYXN0ZXIuIEEgY291cGxlIG9mIG1lYXN1cmVzIGxlYWQgdG8gdGhlCisgIHNwZWVkdXAuIFRoZSBpbnRlcnByZXRlciBsb2FkcyBmZXdlciBtb2R1bGVzIG9uIHN0YXJ0dXAsIGUuZy4gdGhlIDptb2Q6YHJlYCwKKyAgOm1vZDpgY29sbGVjdGlvbnNgIGFuZCA6bW9kOmBsb2NhbGVgIG1vZHVsZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgbm8KKyAgbG9uZ2VyIGltcG9ydGVkIGJ5IGRlZmF1bHQuIFRoZSBtYXJzaGFsIG1vZHVsZSBoYXMgYmVlbiBpbXByb3ZlZCB0byBsb2FkCisgIGNvbXBpbGVkIFB5dGhvbiBjb2RlIGZhc3Rlci4KKworICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UsIENocmlzdGlhbiBIZWltZXMgYW5kIFZpY3RvciBTdGlubmVyIGluCisgIDppc3N1ZTpgMTkyMTlgLCA6aXNzdWU6YDE5MjE4YCwgOmlzc3VlOmAxOTIwOWAsIDppc3N1ZTpgMTkyMDVgIGFuZAorICA6aXNzdWU6YDk1NDhgKQorCisKK0NQeXRob24gSW1wbGVtZW50YXRpb24gQ2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworLi4gX3BlcC00NDU6CisKK1BFUCA0NDU6IEN1c3RvbWl6YXRpb24gb2YgQ1B5dGhvbiBtZW1vcnkgYWxsb2NhdG9ycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQ0NWAgYWRkcyBuZXcgQyBsZXZlbCBpbnRlcmZhY2VzIHRvIGN1c3RvbWl6ZSBtZW1vcnkgYWxsb2NhdGlvbiBpbgordGhlIENQeXRob24gaW50ZXJwcmV0ZXIuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDVgIC0gQWRkIG5ldyBBUElzIHRvIGN1c3RvbWl6ZSBQeXRob24gbWVtb3J5IGFsbG9jYXRvcnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lci4KKworCisuLiBfcGVwLTQ0MjoKKworUEVQIDQ0MjogU2FmZSBvYmplY3QgZmluYWxpemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQyYCByZW1vdmVzIHRoZSBjdXJyZW50IGxpbWl0YXRpb25zIGFuZCBxdWlya3Mgb2Ygb2JqZWN0IGZpbmFsaXphdGlvbgoraW4gQ1B5dGhvbi4gV2l0aCBpdCwgb2JqZWN0cyB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLCBhcyB3ZWxsIGFzCitnZW5lcmF0b3JzIHdpdGggOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZXMsIGNhbiBiZSBmaW5hbGl6ZWQgd2hlbiB0aGV5IGFyZQorcGFydCBvZiBhIHJlZmVyZW5jZSBjeWNsZS4KKworQXMgcGFydCBvZiB0aGlzIGNoYW5nZSwgbW9kdWxlIGdsb2JhbHMgYXJlIG5vIGxvbmdlciBmb3JjaWJseSBzZXQgdG8KKzpjb25zdDpgTm9uZWAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duIGluIG1vc3QgY2FzZXMsIGluc3RlYWQgcmVseWluZworb24gdGhlIG5vcm1hbCBvcGVyYXRpb24gb2YgdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3Rvci4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0MmAgLSBTYWZlIG9iamVjdCBmaW5hbGl6YXRpb24KKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBBbnRvaW5lIFBpdHJvdS4KKworCitPdGhlciBidWlsZCBhbmQgQyBBUEkgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlcyB0byBQeXRob24ncyBidWlsZCBwcm9jZXNzIGFuZCB0byB0aGUgQyBBUEkgaW5jbHVkZToKKworKiBUaGUgbmV3IDpjOmZ1bmM6YFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmdgIHByZS1pbml0aWFsaXphdGlvbiBBUEkKKyAgYWxsb3dzIGFwcGxpY2F0aW9ucyBlbWJlZGRpbmcgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIgdG8gcmVsaWFibHkgZm9yY2UKKyAgYSBwYXJ0aWN1bGFyIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3RhbmRhcmQgc3RyZWFtcworICAoQ29udHJpYnV0ZWQgYnkgQmFzdGllbiBNb250YWduZSBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTYxMjlgKQorCisqIE1vc3QgUHl0aG9uIEMgQVBJcyB0aGF0IGRvbid0IG11dGF0ZSBzdHJpbmcgYXJndW1lbnRzIGFyZSBub3cgY29ycmVjdGx5CisgIG1hcmtlZCBhcyBhY2NlcHRpbmcgYGBjb25zdCBjaGFyICpgYCByYXRoZXIgdGhhbiBgYGNoYXIgKmBgIChDb250cmlidXRlZAorICBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTc3MjY3M2ApLgorCisqICJBcmd1bWVudCBDbGluaWMiICg6cGVwOmA0MzZgKSBpcyBub3cgcGFydCBvZiB0aGUgQ1B5dGhvbiBidWlsZCBwcm9jZXNzCisgIGFuZCBjYW4gYmUgdXNlZCB0byBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBkZWZpbmluZyBhbmQgbWFpbnRhaW5pbmcKKyAgYWNjdXJhdGUgc2lnbmF0dXJlcyBmb3IgYnVpbHRpbnMgYW5kIHN0YW5kYXJkIGxpYnJhcnkgZXh0ZW5zaW9uIG1vZHVsZXMKKyAgaW1wbGVtZW50ZWQgaW4gQy4KKworICAuLiBub3RlOjoKKyAgICAgVGhlIEFyZ3VtZW50IENsaW5pYyBQRVAgaXMgbm90IGZ1bGx5IHVwIHRvIGRhdGUgd2l0aCB0aGUgc3RhdGUgb2YgdGhlCisgICAgIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBiZWVuIGRlZW1lZCBhY2NlcHRhYmxlIGJ5IHRoZSByZWxlYXNlIG1hbmFnZXIKKyAgICAgYW5kIGNvcmUgZGV2ZWxvcG1lbnQgdGVhbSBpbiB0aGlzIGNhc2UsIGFzIEFyZ3VtZW50IENsaW5pYyB3aWxsIG5vdAorICAgICBiZSBtYWRlIGF2YWlsYWJsZSBhcyBhIHB1YmxpYyBBUEkgZm9yIHRoaXJkIHBhcnR5IHVzZSBpbiBQeXRob24gMy40LgorCisKK0RlcHJlY2F0ZWQKKz09PT09PT09PT0KKworVW5zdXBwb3J0ZWQgT3BlcmF0aW5nIFN5c3RlbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogT1MvMgorKiBXaW5kb3dzIDIwMDAKKworCitEZXByZWNhdGVkIFB5dGhvbiBtb2R1bGVzLCBmdW5jdGlvbnMgYW5kIG1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIDptZXRoOmBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5pc2JqdW5rYCBhbmQKKyAgOm1ldGg6YGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmlzYnBvcHVsYXJgIHdlcmUgcmVtb3ZlZDogdXNlIGBgeCBpbiBzbS5ianVua2BgIGFuZAorICBgYHggaW4gc20uYnBvcHVsYXJgYCwgd2hlcmUgKnNtKiBpcyBhIDpjbGFzczpgfmRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyYCBvYmplY3QuCisKKyogOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uLiBVc2luZworICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWRgIGFuZAorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnNgIGFsbG93cyBzdWJjbGFzc2VzIG9mIGEgbG9hZGVyCisgIHRvIG1vcmUgZWFzaWx5IGN1c3RvbWl6ZSBtb2R1bGUgbG9hZGluZy4KKworKiBUaGUgOm1vZDpgaW1wYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4gVG8ga2VlcCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgUHl0aG9uIDIvMyBjb2RlIGJhc2VzLCB0aGUgbW9kdWxlJ3MgcmVtb3ZhbCBpcyBjdXJyZW50bHkgbm90IHNjaGVkdWxlZC4KKworKiBUaGUgOm1vZDpgZm9ybWF0dGVyYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbiBhbmQgaXMgc2xhdGVkIGZvciByZW1vdmFsCisgIGluIFB5dGhvbiAzLjYuCisKKyogTUQ1IGFzIGRlZmF1bHQgZGlnZXN0bW9kIGZvciA6bW9kOmBobWFjYCBpcyBkZXByZWNhdGVkLiBQeXRob24gMy42IHdpbGwKKyAgcmVxdWlyZSBhbiBleHBsaWNpdCBkaWdlc3QgbmFtZSBvciBjb25zdHJ1Y3RvciBhcyAqZGlnZXN0bW9kKiBhcmd1bWVudC4KKworCitEZXByZWNhdGVkIGZ1bmN0aW9ucyBhbmQgdHlwZXMgb2YgdGhlIEMgQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGBgUHlUaHJlYWRTdGF0ZS50aWNrX2NvdW50ZXJgYCBmaWVsZCBoYXMgYmVlbiByZW1vdmVkOiBpdHMgdmFsdWUgd2FzCisgIG1lYW5pbmdsZXNzIHNpbmNlIFB5dGhvbiAzLjIgKCJuZXcgR0lMIikuCisKKworRGVwcmVjYXRlZCBmZWF0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBzaXRlIG1vZHVsZSBhZGRpbmcgYSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB0byBzeXMucGF0aCwgaWYgaXQKKyAgZXhpc3RzLCBpcyBkZXByZWNhdGVkICg6aXNzdWU6YDE5Mzc1YCkuCisKKworUG9ydGluZyB0byBQeXRob24gMy40Cis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGxpc3RzIHByZXZpb3VzbHkgZGVzY3JpYmVkIGNoYW5nZXMgYW5kIG90aGVyIGJ1Z2ZpeGVzCit0aGF0IG1heSByZXF1aXJlIGNoYW5nZXMgdG8geW91ciBjb2RlLgorCisqIFRoZSBBQkNzIGRlZmluZWQgaW4gOm1vZDpgaW1wb3J0bGliLmFiY2Agbm93IGVpdGhlciByYWlzZSB0aGUgYXBwcm9wcmlhdGUKKyAgZXhjZXB0aW9uIG9yIHJldHVybiBhIGRlZmF1bHQgdmFsdWUgaW5zdGVhZCBvZiByYWlzaW5nCisgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGJsaW5kbHkuIFRoaXMgd2lsbCBvbmx5IGFmZmVjdCBjb2RlIGNhbGxpbmcKKyAgOmZ1bmM6YHN1cGVyYCBhbmQgZmFsbGluZyB0aHJvdWdoIGFsbCB0aGUgd2F5IHRvIHRoZSBBQkNzLiBGb3IgY29tcGF0aWJpbGl0eSwKKyAgY2F0Y2ggYm90aCA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBvciB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIGFzIG5lZWRlZC4KKworKiBUaGUgbW9kdWxlIHR5cGUgbm93IGluaXRpYWxpemVzIHRoZSA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AKKyAgYXR0cmlidXRlcyB0byBgYE5vbmVgYCBieSBkZWZhdWx0LiBUbyBkZXRlcm1pbmUgaWYgdGhlc2UgYXR0cmlidXRlcyB3ZXJlIHNldAorICBpbiBhIGJhY2t3YXJkcy1jb21wYXRpYmxlIGZhc2hpb24sIHVzZSBlLmcuCisgIGBgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgbm90IE5vbmVgYC4KKworKiA6bWV0aDpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIG5vdyBzZXRzIGBgX19sb2FkZXJfX2BgIGFuZAorICBgYF9fcGFja2FnZV9fYGAgdW5jb25kaXRpb25hbGx5IHRvIHByb3Blcmx5IHN1cHBvcnQgcmVsb2FkaW5nLiBJZiB0aGlzIGlzIG5vdAorICBkZXNpcmVkIHRoZW4geW91IHdpbGwgbmVlZCB0byBzZXQgdGhlc2UgYXR0cmlidXRlcyBtYW51YWxseS4gWW91IGNhbiB1c2UKKyAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkYCBmb3IgbW9kdWxlIG1hbmFnZW1lbnQuCisKKyogSW1wb3J0IG5vdyByZXNldHMgcmVsZXZhbnQgYXR0cmlidXRlcyAoZS5nLiBgYF9fbmFtZV9fYGAsIGBgX19sb2FkZXJfX2BgLAorICBgYF9fcGFja2FnZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGApIHVuY29uZGl0aW9uYWxseSB3aGVuIHJlbG9hZGluZy4KKworKiBGcm96ZW4gcGFja2FnZXMgbm8gbG9uZ2VyIHNldCBgYF9fcGF0aF9fYGAgdG8gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UKKyAgbmFtZSBidXQgYW4gZW1wdHkgbGlzdCBpbnN0ZWFkLiBEZXRlcm1pbmcgaWYgYSBtb2R1bGUgaXMgYSBwYWNrYWdlIHNob3VsZCBiZQorICBkb25lIHVzaW5nIGBgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpYGAuCisKKyogOmM6ZnVuYzpgUHlFcnJfU2V0SW1wb3J0RXJyb3JgIG5vdyBzZXRzIDpleGM6YFR5cGVFcnJvcmAgd2hlbiBpdHMgKiptc2cqKgorICBhcmd1bWVudCBpcyBub3Qgc2V0LiBQcmV2aW91c2x5IG9ubHkgYGBOVUxMYGAgd2FzIHJldHVybmVkIHdpdGggbm8gZXhjZXB0aW9uCisgIHNldC4KKworKiA6ZnVuYzpgcHlfY29tcGlsZS5jb21waWxlYCBub3cgcmFpc2VzIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaWYgdGhlIGZpbGUgcGF0aAorICBpdCB3b3VsZCB3cml0ZSB0byBpcyBhIHN5bWxpbmsgb3IgYSBub24tcmVndWxhciBmaWxlLiBUaGlzIGlzIHRvIGFjdCBhcyBhCisgIHdhcm5pbmcgdGhhdCBpbXBvcnQgd2lsbCBvdmVyd3JpdGUgdGhvc2UgZmlsZXMgd2l0aCBhIHJlZ3VsYXIgZmlsZSByZWdhcmRsZXNzCisgIG9mIHdoYXQgdHlwZSBvZiBmaWxlIHBhdGggdGhleSB3ZXJlIG9yaWdpbmFsbHkuCisKKyogOm1ldGg6YGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2VgIG5vIGxvbmdlciByYWlzZXMKKyAgOmV4YzpgSW1wb3J0RXJyb3JgIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGJlaW5nIGxvYWRlZCB0cmlnZ2VycyBhCisgIDpleGM6YFN5bnRheEVycm9yYCBvciA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgLiBBcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMKKyAgbWVhbnQgdG8gYmUgcmFpc2VkIG9ubHkgd2hlbiBzb3VyY2UgY29kZSBjYW5ub3QgYmUgZm91bmQgYnV0IGl0IHNob3VsZCwgaXQgd2FzCisgIGZlbHQgdG8gYmUgb3Zlci1yZWFjaGluZy9vdmVybG9hZGluZyBvZiB0aGF0IG1lYW5pbmcgd2hlbiB0aGUgc291cmNlIGNvZGUgaXMKKyAgZm91bmQgYnV0IGltcHJvcGVybHkgc3RydWN0dXJlZC4gSWYgeW91IHdlcmUgY2F0Y2hpbmcgSW1wb3J0RXJyb3IgYmVmb3JlIGFuZAorICB3aXNoIHRvIGNvbnRpbnVlIHRvIGlnbm9yZSBzeW50YXggb3IgZGVjb2RpbmcgaXNzdWVzLCBjYXRjaCBhbGwgdGhyZWUKKyAgZXhjZXB0aW9ucyBub3cuCisKKyogOmZ1bmM6YGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcmAgYW5kIDpmdW5jOmBmdW5jdG9vbHMud3JhcHNgIG5vdyBjb3JyZWN0bHkKKyAgc2V0IHRoZSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIHRvIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVyLCBldmVuIGlmCisgIHRoYXQgZnVuY3Rpb24gYWxzbyBoYWQgaXRzIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgc2V0LiBUaGlzIG1lYW5zCisgIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGVzIG5vdyBjb3JyZWN0bHkgbGluayBhIHN0YWNrIG9mIGRlY29yYXRlZAorICBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gZXZlcnkgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBpbiB0aGUgY2hhaW4KKyAgcmVmZXJyaW5nIHRvIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24uIEludHJvc3BlY3Rpb24gbGlicmFyaWVzIHRoYXQKKyAgYXNzdW1lZCB0aGUgcHJldmlvdXMgYmVoYXZpb3VyIHdhcyBpbnRlbnRpb25hbCBjYW4gdXNlCisgIDpmdW5jOmBpbnNwZWN0LnVud3JhcGAgdG8gYWNjZXNzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiB0aGUgY2hhaW4gdGhhdCBoYXMKKyAgbm8gYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZS4KKworKiAoQyBBUEkpIFRoZSByZXN1bHQgb2YgdGhlIDpjOmRhdGE6YFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXJgIGNhbGxiYWNrIG11c3QKKyAgbm93IGJlIGEgc3RyaW5nIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yCisgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBvciAqTlVMTCogaWYgYW4gZXJyb3Igb2NjdXJyZWQsIGluc3RlYWQgb2YgYQorICBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX01hbGxvY2Agb3IgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AuCisKKyogOmNsYXNzOmBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXJgIG5vdyBwYXNzZXMgb24gdGhlIGN1cnJlbnQgd29ya2luZworICBkaXJlY3RvcnkgdG8gb2JqZWN0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGZvciB0aGUgZW1wdHkgc3RyaW5nLiBUaGlzCisgIHJlc3VsdHMgaW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBuZXZlciBjb250YWluaW5nIGBgJydgYCwgdGh1cworICBpdGVyYXRpbmcgdGhyb3VnaCA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGJhc2VkIG9uIDpkYXRhOmBzeXMucGF0aGAKKyAgd2lsbCBub3QgZmluZCBhbGwga2V5cy4gQSBtb2R1bGUncyBgYF9fZmlsZV9fYGAgd2hlbiBpbXBvcnRlZCBpbiB0aGUgY3VycmVudAorICB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGFsc28gbm93IGhhdmUgYW4gYWJzb2x1dGUgcGF0aCwgaW5jbHVkaW5nIHdoZW4gdXNpbmcKKyAgYGAtbWBgIHdpdGggdGhlIGludGVycHJldGVyICh0aGlzIGRvZXMgbm90IGluZmx1ZW5jZSB3aGVuIHRoZSBwYXRoIHRvIGEgZmlsZQorICBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZSkuCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0IGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdAppbmRleCBiYzEyMDZiLi4yOTkwMmU0IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CisrKyBiL0RvYy93aGF0c25ldy9pbmRleC5yc3QKQEAgLTExLDYgKzExLDcgQEAKIC4uIHRvY3RyZWU6OgogICAgOm1heGRlcHRoOiAyCiAKKyAgIDMuNC5yc3QKICAgIDMuMy5yc3QKICAgIDMuMi5yc3QKICAgIDMuMS5yc3QKZGlmZiAtLWdpdCBhL0luY2x1ZGUvUHl0aG9uLWFzdC5oIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKaW5kZXggMDBlOTJkMC4uNjdkNjc3YiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24tYXN0LmgKKysrIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKQEAgLTE4Miw4ICsxODIsOSBAQAogICAgICAgICAgICAgICAgICAgU2V0Q29tcF9raW5kPTksIERpY3RDb21wX2tpbmQ9MTAsIEdlbmVyYXRvckV4cF9raW5kPTExLAogICAgICAgICAgICAgICAgICAgWWllbGRfa2luZD0xMiwgWWllbGRGcm9tX2tpbmQ9MTMsIENvbXBhcmVfa2luZD0xNCwKICAgICAgICAgICAgICAgICAgIENhbGxfa2luZD0xNSwgTnVtX2tpbmQ9MTYsIFN0cl9raW5kPTE3LCBCeXRlc19raW5kPTE4LAotICAgICAgICAgICAgICAgICAgRWxsaXBzaXNfa2luZD0xOSwgQXR0cmlidXRlX2tpbmQ9MjAsIFN1YnNjcmlwdF9raW5kPTIxLAotICAgICAgICAgICAgICAgICAgU3RhcnJlZF9raW5kPTIyLCBOYW1lX2tpbmQ9MjMsIExpc3Rfa2luZD0yNCwgVHVwbGVfa2luZD0yNX07CisgICAgICAgICAgICAgICAgICBOYW1lQ29uc3RhbnRfa2luZD0xOSwgRWxsaXBzaXNfa2luZD0yMCwgQXR0cmlidXRlX2tpbmQ9MjEsCisgICAgICAgICAgICAgICAgICBTdWJzY3JpcHRfa2luZD0yMiwgU3RhcnJlZF9raW5kPTIzLCBOYW1lX2tpbmQ9MjQsCisgICAgICAgICAgICAgICAgICBMaXN0X2tpbmQ9MjUsIFR1cGxlX2tpbmQ9MjZ9Owogc3RydWN0IF9leHByIHsKICAgICBlbnVtIF9leHByX2tpbmQga2luZDsKICAgICB1bmlvbiB7CkBAIC0yNzksNiArMjgwLDEwIEBACiAgICAgICAgIH0gQnl0ZXM7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc2luZ2xldG9uIHZhbHVlOworICAgICAgICB9IE5hbWVDb25zdGFudDsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwogICAgICAgICAgICAgaWRlbnRpZmllciBhdHRyOwogICAgICAgICAgICAgZXhwcl9jb250ZXh0X3R5IGN0eDsKQEAgLTM1OSwxOCArMzY0LDE4IEBACiAKIHN0cnVjdCBfYXJndW1lbnRzIHsKICAgICBhc2RsX3NlcSAqYXJnczsKLSAgICBpZGVudGlmaWVyIHZhcmFyZzsKLSAgICBleHByX3R5IHZhcmFyZ2Fubm90YXRpb247CisgICAgYXJnX3R5IHZhcmFyZzsKICAgICBhc2RsX3NlcSAqa3dvbmx5YXJnczsKLSAgICBpZGVudGlmaWVyIGt3YXJnOwotICAgIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uOwotICAgIGFzZGxfc2VxICpkZWZhdWx0czsKICAgICBhc2RsX3NlcSAqa3dfZGVmYXVsdHM7CisgICAgYXJnX3R5IGt3YXJnOworICAgIGFzZGxfc2VxICpkZWZhdWx0czsKIH07CiAKIHN0cnVjdCBfYXJnIHsKICAgICBpZGVudGlmaWVyIGFyZzsKICAgICBleHByX3R5IGFubm90YXRpb247CisgICAgaW50IGxpbmVubzsKKyAgICBpbnQgY29sX29mZnNldDsKIH07CiAKIHN0cnVjdCBfa2V5d29yZCB7CkBAIC01MDksNiArNTE0LDkgQEAKIGV4cHJfdHkgX1B5X1N0cihzdHJpbmcgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgQnl0ZXMoYTAsIGExLCBhMiwgYTMpIF9QeV9CeXRlcyhhMCwgYTEsIGEyLCBhMykKIGV4cHJfdHkgX1B5X0J5dGVzKGJ5dGVzIHMsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIE5hbWVDb25zdGFudChhMCwgYTEsIGEyLCBhMykgX1B5X05hbWVDb25zdGFudChhMCwgYTEsIGEyLCBhMykKK2V4cHJfdHkgX1B5X05hbWVDb25zdGFudChzaW5nbGV0b24gdmFsdWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hCisgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZW5hKTsKICNkZWZpbmUgRWxsaXBzaXMoYTAsIGExLCBhMikgX1B5X0VsbGlwc2lzKGEwLCBhMSwgYTIpCiBleHByX3R5IF9QeV9FbGxpcHNpcyhpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBBdHRyaWJ1dGUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkgX1B5X0F0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KQpAQCAtNTQyLDExICs1NTAsMTAgQEAKIGV4Y2VwdGhhbmRsZXJfdHkgX1B5X0V4Y2VwdEhhbmRsZXIoZXhwcl90eSB0eXBlLCBpZGVudGlmaWVyIG5hbWUsIGFzZGxfc2VxICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZW5hKTsKLSNkZWZpbmUgYXJndW1lbnRzKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpIF9QeV9hcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkKLWFyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgaWRlbnRpZmllciB2YXJhcmcsIGV4cHJfdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ2Fubm90YXRpb24sIGFzZGxfc2VxICoga3dvbmx5YXJncywgaWRlbnRpZmllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uLCBhc2RsX3NlcSAqIGRlZmF1bHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOworI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpIF9QeV9hcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpCithcmd1bWVudHNfdHkgX1B5X2FyZ3VtZW50cyhhc2RsX3NlcSAqIGFyZ3MsIGFyZ190eSB2YXJhcmcsIGFzZGxfc2VxICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3MsIGFzZGxfc2VxICoga3dfZGVmYXVsdHMsIGFyZ190eSBrd2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICogZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgYXJnKGEwLCBhMSwgYTIpIF9QeV9hcmcoYTAsIGExLCBhMikKIGFyZ190eSBfUHlfYXJnKGlkZW50aWZpZXIgYXJnLCBleHByX3R5IGFubm90YXRpb24sIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUga2V5d29yZChhMCwgYTEsIGEyKSBfUHlfa2V5d29yZChhMCwgYTEsIGEyKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24uaCBiL0luY2x1ZGUvUHl0aG9uLmgKaW5kZXggYTc4YTcyMS4uMmRkODI5MCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24uaAorKysgYi9JbmNsdWRlL1B5dGhvbi5oCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAib2JqaW1wbC5oIgogI2luY2x1ZGUgInR5cGVzbG90cy5oIgorI2luY2x1ZGUgInB5aGFzaC5oIgogCiAjaW5jbHVkZSAicHlkZWJ1Zy5oIgogCmRpZmYgLS1naXQgYS9JbmNsdWRlL2Fic3RyYWN0LmggYi9JbmNsdWRlL2Fic3RyYWN0LmgKaW5kZXggYzk2MjRmMy4uZDI1OGFkNSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hYnN0cmFjdC5oCisrKyBiL0luY2x1ZGUvYWJzdHJhY3QuaApAQCAtMTQ0LDcgKzE0NCw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIGludCBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBpbnQgUHlPYmplY3RfSGFzQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBSZXR1cm5zIDEgaWYgbyBoYXMgdGhlIGF0dHJpYnV0ZSBhdHRyX25hbWUsIGFuZCAwIG90aGVyd2lzZS4KICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbjoKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBQeU9iamVjdCogUHlPYmplY3RfR2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgUmV0cmlldmUgYW4gYXR0cmlidXRlZCBuYW1lZCBhdHRyX25hbWUgZm9ybSBvYmplY3Qgby4KICAgICAgUmV0dXJucyB0aGUgYXR0cmlidXRlIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS4KQEAgLTE4OSw3ICsxODksNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdik7CisgICAgIGludCBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKIAogICAgICBTZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYXR0cl9uYW1lLCBmb3Igb2JqZWN0IG8sCiAgICAgIHRvIHRoZSB2YWx1ZSwgdi4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKICAgICAgLyogaW1wbGVtZW50ZWQgYXMgYSBtYWNybzoKIAotICAgICBpbnQgUHlPYmplY3RfRGVsQXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgaW50IFB5T2JqZWN0X0RlbEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgRGVsZXRlIGF0dHJpYnV0ZSBuYW1lZCBhdHRyX25hbWUsIGZvciBvYmplY3Qgby4gUmV0dXJucwogICAgICAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uCkBAIC0yODQsNyArMjg0LDcgQEAKICAgICAgICAqLwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZV9vYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QsIGNhbGxhYmxlX29iamVjdCwgd2l0aCBhCkBAIC0yOTYsOCArMjk2LDkgQEAKICAgICAgICAqLwogCiAKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjaGFyICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCBtIG9mIG9iamVjdCBvIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YKQEAgLTMwOCw4ICszMDksOSBAQAogICAgICBQeXRob24gZXhwcmVzc2lvbjogby5tZXRob2QoYXJncykuCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgICAgICBMaWtlIFB5T2JqZWN0X0NhbGxNZXRob2QsIGJ1dCBleHBlY3QgYSBfUHlfSWRlbnRpZmllciogYXMgdGhlCkBAIC0zMTcsMTMgKzMxOSwxNiBAQAogICAgICAgICovCiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUKFB5T2JqZWN0ICpjYWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9JZGVudGlmaWVyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKQEAgLTMzOSwxMSArMzQ0LDEwIEBACiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhQeU9iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWV0aG9kLCAuLi4pOwotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKFB5T2JqZWN0ICpvLAorICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKIAotCiAgICAgICAgLyoKICAgICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkIG0gb2Ygb2JqZWN0IG8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgogICAgICBDIGFyZ3VtZW50cy4gIFRoZSBDIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgYXMgUHlPYmplY3QgKgpAQCAtNDA0LDggKzQwOCw5IEBACiAjZGVmaW5lIFB5T2JqZWN0X0xlbmd0aCBQeU9iamVjdF9TaXplCiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLSAgICAgUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBfUHlPYmplY3RfSGFzTGVuKFB5T2JqZWN0ICpvKTsKICNlbmRpZgorUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90KTsKIAogICAgICAgIC8qCiAgICAgIEd1ZXNzIHRoZSBzaXplIG9mIG9iamVjdCBvIHVzaW5nIGxlbihvKSBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLgpAQCAtNDI5LDcgKzQzNCw3IEBACiAgICAgIHN0YXRlbWVudDogb1trZXldPXYuCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCwga2V5LCBmcm9tIHRoZSBvYmplY3QgKm8uCkBAIC0xMTUxLDcgKzExNTYsNyBAQAogCiAgICAgIC8qIGltcGxlbWVudGVkIGFzIGEgbWFjcm86CiAKLSAgICAgaW50IFB5TWFwcGluZ19EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgUmVtb3ZlIHRoZSBtYXBwaW5nIGZvciBvYmplY3QsIGtleSwgZnJvbSB0aGUgb2JqZWN0ICpvLgogICAgICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KQEAgLTExNjksNyArMTE3NCw3IEBACiAgICAgICAgKi8KICNkZWZpbmUgUHlNYXBwaW5nX0RlbEl0ZW0oTyxLKSBQeU9iamVjdF9EZWxJdGVtKChPKSwoSykpCiAKLSAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpOwogCiAgICAgICAgLyoKICAgICAgT24gc3VjY2VzcywgcmV0dXJuIDEgaWYgdGhlIG1hcHBpbmcgb2JqZWN0IGhhcyB0aGUga2V5LCBrZXksCkBAIC0xMjEzLDcgKzEyMTgsOCBAQAogCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBSZXR1cm4gZWxlbWVudCBvZiBvIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCwga2V5LCBvciBOVUxMCkBAIC0xMjIxLDcgKzEyMjcsNyBAQAogICAgICBvW2tleV0uCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSk7CiAKICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc2RsLmggYi9JbmNsdWRlL2FzZGwuaAppbmRleCA2YmY2MThmLi40OTUxNTNjIDEwMDY0NAotLS0gYS9JbmNsdWRlL2FzZGwuaAorKysgYi9JbmNsdWRlL2FzZGwuaApAQCAtNSw2ICs1LDcgQEAKIHR5cGVkZWYgUHlPYmplY3QgKiBzdHJpbmc7CiB0eXBlZGVmIFB5T2JqZWN0ICogYnl0ZXM7CiB0eXBlZGVmIFB5T2JqZWN0ICogb2JqZWN0OwordHlwZWRlZiBQeU9iamVjdCAqIHNpbmdsZXRvbjsKIAogLyogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgY29kZSBnZW5lcmF0ZWQgYnkgYXNkbF9jLnB5IHdhcyBjb21wbGV0ZWx5CiAgICBpbmRlcGVuZGVudCBvZiBQeXRob24sIGJ1dCBpdCBpcyBhIGdvYWwgdGhlIHJlcXVpcmVzIHRvbyBtdWNoIHdvcmsKQEAgLTI0LDE3ICsyNSwxOSBAQAogICAgIGludCBlbGVtZW50c1sxXTsKIH0gYXNkbF9pbnRfc2VxOwogCi1hc2RsX3NlcSAqYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOwotYXNkbF9pbnRfc2VxICphc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOworYXNkbF9zZXEgKl9QeV9hc2RsX3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7Cithc2RsX2ludF9zZXEgKl9QeV9hc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOwogCiAjZGVmaW5lIGFzZGxfc2VxX0dFVChTLCBJKSAoUyktPmVsZW1lbnRzWyhJKV0KICNkZWZpbmUgYXNkbF9zZXFfTEVOKFMpICgoUykgPT0gTlVMTCA/IDAgOiAoUyktPnNpemUpCiAjaWZkZWYgUHlfREVCVUcKLSNkZWZpbmUgYXNkbF9zZXFfU0VUKFMsIEksIFYpIHsgXAotICAgICAgICBpbnQgX2FzZGxfaSA9IChJKTsgXAotICAgICAgICBhc3NlcnQoKFMpICYmIF9hc2RsX2kgPCAoUyktPnNpemUpOyBcCisjZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSBcCisgICAgZG8geyBcCisgICAgICAgIFB5X3NzaXplX3QgX2FzZGxfaSA9IChJKTsgXAorICAgICAgICBhc3NlcnQoKFMpICE9IE5VTEwpOyBcCisgICAgICAgIGFzc2VydChfYXNkbF9pIDwgKFMpLT5zaXplKTsgXAogICAgICAgICAoUyktPmVsZW1lbnRzW19hc2RsX2ldID0gKFYpOyBcCi19CisgICAgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSAoUyktPmVsZW1lbnRzW0ldID0gKFYpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYXN0LmggYi9JbmNsdWRlL2FzdC5oCmluZGV4IDA1NWU4ZGMuLjZhOGM4MTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYXN0LmgKKysrIGIvSW5jbHVkZS9hc3QuaApAQCAtMTAsNiArMTAsMTEgQEAKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKG1vZF90eSkgUHlBU1RfRnJvbU5vZGVPYmplY3QoCisgICAgY29uc3Qgbm9kZSAqbiwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUFyZW5hICphcmVuYSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKaW5kZXggZWNjZDQ0Yy4uYTc1N2I4OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCkBAIC0yMiwxMCArMjIsMTEgQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9WQVJfSEVBRAorICAgIFB5X3NzaXplX3Qgb2JfYWxsb2M7IC8qIEhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZCBpbiBvYl9ieXRlcyAqLworICAgIGNoYXIgKm9iX2J5dGVzOyAgICAgIC8qIFBoeXNpY2FsIGJhY2tpbmcgYnVmZmVyICovCisgICAgY2hhciAqb2Jfc3RhcnQ7ICAgICAgLyogTG9naWNhbCBzdGFydCBpbnNpZGUgb2JfYnl0ZXMgKi8KICAgICAvKiBYWFgobm5vcndpdHopOiBzaG91bGQgb2JfZXhwb3J0cyBiZSBQeV9zc2l6ZV90PyAqLwotICAgIGludCBvYl9leHBvcnRzOyAvKiBob3cgbWFueSBidWZmZXIgZXhwb3J0cyAqLwotICAgIFB5X3NzaXplX3Qgb2JfYWxsb2M7IC8qIEhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZCAqLwotICAgIGNoYXIgKm9iX2J5dGVzOworICAgIGludCBvYl9leHBvcnRzOyAgICAgIC8qIEhvdyBtYW55IGJ1ZmZlciBleHBvcnRzICovCiB9IFB5Qnl0ZUFycmF5T2JqZWN0OwogI2VuZGlmCiAKQEAgLTQ5LDggKzUwLDggQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpIFwKICAgICAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSwgXAotICAgICBQeV9TSVpFKHNlbGYpID8gKChQeUJ5dGVBcnJheU9iamVjdCAqKShzZWxmKSktPm9iX2J5dGVzIDogX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZykKLSNkZWZpbmUgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLFB5X1NJWkUoc2VsZikpCisgICAgIFB5X1NJWkUoc2VsZikgPyAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopKHNlbGYpKS0+b2Jfc3RhcnQgOiBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nKQorI2RlZmluZSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSwgUHlfU0laRShzZWxmKSkKIAogUHlBUElfREFUQShjaGFyKSBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nW107CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAppbmRleCBkN2M3ZmZkLi4wZWU4ZDM2IDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCkBAIC04NiwxMSArODYsMTEgQEAKICAgIDAtdGVybWluYXRlZCAocGFzc2luZyBhIHN0cmluZyB3aXRoIGVtYmVkZGVkIE5VTEwgY2hhcmFjdGVycyB3aWxsCiAgICBjYXVzZSBhbiBleGNlcHRpb24pLiAgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZSgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqLAkvKiBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QgKi8KLSAgICByZWdpc3RlciBjaGFyICoqcywJCS8qIHBvaW50ZXIgdG8gYnVmZmVyIHZhcmlhYmxlICovCi0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuCS8qIHBvaW50ZXIgdG8gbGVuZ3RoIHZhcmlhYmxlIG9yIE5VTEwKLQkJCQkgICAob25seSBwb3NzaWJsZSBmb3IgMC10ZXJtaW5hdGVkCi0JCQkJICAgc3RyaW5ncykgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgIC8qIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCAqLworICAgIGNoYXIgKipzLCAgICAgICAgICAgLyogcG9pbnRlciB0byBidWZmZXIgdmFyaWFibGUgKi8KKyAgICBQeV9zc2l6ZV90ICpsZW4gICAgIC8qIHBvaW50ZXIgdG8gbGVuZ3RoIHZhcmlhYmxlIG9yIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHBvc3NpYmxlIGZvciAwLXRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MpICovCiAgICAgKTsKIAogLyogVXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlLCBpbnNlcnQgdGhlIHRob3VzYW5kcyBncm91cGluZwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb2RlY3MuaCBiL0luY2x1ZGUvY29kZWNzLmgKaW5kZXggMGQ5ZTliNC4uNWNhNTA1ZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb2RlY3MuaAorKysgYi9JbmNsdWRlL2NvZGVjcy5oCkBAIC05NCw2ICs5NCwzMyBAQAogICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycwogICAgICAgICk7CiAKKyNpZm5kZWYgUFlfTElNSVRFRF9BUEkKKy8qIFRleHQgY29kZWMgc3BlY2lmaWMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIEFQSS4KKworICAgQ2hlY2tzIHRoZSBlbmNvZGluZyBhZ2FpbnN0IGEgbGlzdCBvZiBjb2RlY3Mgd2hpY2ggZG8gbm90CisgICBpbXBsZW1lbnQgYSBzdHI8LT5ieXRlcyBlbmNvZGluZyBiZWZvcmUgYXR0ZW1wdGluZyB0aGUKKyAgIG9wZXJhdGlvbi4KKworICAgUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBUElzIGFyZSBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdAorICAgYmUgdXNlZCBpbiBQeXRob24gQyBleHRlbnNpb25zLgorCisgKi8KKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlDb2RlY19FbmNvZGVUZXh0KAorICAgICAgIFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCisgICAgICAgKTsKKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlDb2RlY19EZWNvZGVUZXh0KAorICAgICAgIFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCisgICAgICAgKTsKKyNlbmRpZgorCisKKwogLyogLS0tIENvZGVjIExvb2t1cCBBUElzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogCiAgICBBbGwgQVBJcyByZXR1cm4gYSBjb2RlYyBvYmplY3Qgd2l0aCBpbmNyZW1lbnRlZCByZWZjb3VudCBhbmQgYXJlCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvbXBpbGUuaCBiL0luY2x1ZGUvY29tcGlsZS5oCmluZGV4IGFjMjYzNmQuLmM2NjUwZDcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29tcGlsZS5oCisrKyBiL0luY2x1ZGUvY29tcGlsZS5oCkBAIC0zNiwxMSArMzYsMjcgQEAKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGludCBvcHRpbWl6ZSwKICAgICBQeUFyZW5hICphcmVuYSk7Ci1QeUFQSV9GVU5DKFB5RnV0dXJlRmVhdHVyZXMgKikgUHlGdXR1cmVfRnJvbUFTVChzdHJ1Y3QgX21vZCAqLCBjb25zdCBjaGFyICopOworUHlBUElfRlVOQyhQeUNvZGVPYmplY3QgKikgUHlBU1RfQ29tcGlsZU9iamVjdCgKKyAgICBzdHJ1Y3QgX21vZCAqbW9kLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIGludCBvcHRpbWl6ZSwKKyAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKFB5RnV0dXJlRmVhdHVyZXMgKikgUHlGdXR1cmVfRnJvbUFTVCgKKyAgICBzdHJ1Y3QgX21vZCAqIG1vZCwKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgKTsKK1B5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KAorICAgIHN0cnVjdCBfbW9kICogbW9kLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZQorICAgICk7CiAKIC8qIF9QeV9NYW5nbGUgaXMgZGVmaW5lZCBpbiBjb21waWxlLmMgKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBfUHlfTWFuZ2xlKFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqbmFtZSk7CiAKKyNkZWZpbmUgUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1QgSU5UX01BWAorUHlBUElfRlVOQyhpbnQpIFB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChpbnQgb3Bjb2RlLCBpbnQgb3BhcmcpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9kaWN0b2JqZWN0LmggYi9JbmNsdWRlL2RpY3RvYmplY3QuaAppbmRleCBkODlhYWM4Li4yODU5NjY5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2RpY3RvYmplY3QuaAorKysgYi9JbmNsdWRlL2RpY3RvYmplY3QuaApAQCAtNTMsNiArNTMsOCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0dldEl0ZW1JZFdpdGhFcnJvcihQeU9iamVjdCAqZHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlEaWN0X1NldERlZmF1bHQoCisgICAgUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdG9iaik7CiBQeUFQSV9GVU5DKGludCkgUHlEaWN0X1NldEl0ZW0oUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqaXRlbSk7CiBQeUFQSV9GVU5DKGludCkgUHlEaWN0X0RlbEl0ZW0oUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlEaWN0X0NsZWFyKFB5T2JqZWN0ICptcCk7CkBAIC0xMDksOSArMTExLDExIEBACiBQeUFQSV9GVU5DKGludCkgUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKmRwLCBjb25zdCBjaGFyICprZXkpOwogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgX1B5RGljdF9EZWxJdGVtSWQoUHlPYmplY3QgKm1wLCBzdHJ1Y3QgX1B5X0lkZW50aWZpZXIgKmtleSk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeURpY3RfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpOworCiBpbnQgX1B5T2JqZWN0RGljdF9TZXRJdGVtKFB5VHlwZU9iamVjdCAqdHAsIFB5T2JqZWN0ICoqZGljdHB0ciwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICp2YWx1ZSk7CiBQeU9iamVjdCAqX1B5RGljdF9Mb2FkR2xvYmFsKFB5RGljdE9iamVjdCAqLCBQeURpY3RPYmplY3QgKiwgUHlPYmplY3QgKik7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeURpY3RfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpOwogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxlb2JqZWN0LmggYi9JbmNsdWRlL2ZpbGVvYmplY3QuaAppbmRleCBhOTljOTRkLi4wOTM5NzQ0IDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZpbGVvYmplY3QuaAorKysgYi9JbmNsdWRlL2ZpbGVvYmplY3QuaApAQCAtOCw4ICs4LDkgQEAKIAogI2RlZmluZSBQWV9TVERJT1RFWFRNT0RFICJiIgogCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9Gcm9tRmQoaW50LCBjaGFyICosIGNoYXIgKiwgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkgICAgIGNoYXIgKiwgaW50KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0Zyb21GZChpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfR2V0TGluZShQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZU9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZVN0cmluZyhjb25zdCBjaGFyICosIFB5T2JqZWN0ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxldXRpbHMuaCBiL0luY2x1ZGUvZmlsZXV0aWxzLmgKaW5kZXggN2MxOGNmMi4uNTQ2NmUzYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9maWxldXRpbHMuaAorKysgYi9JbmNsdWRlL2ZpbGV1dGlscy5oCkBAIC0yNywxMSArMjcsMTkgQEAKICAgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1Zik7CiAjZW5kaWYKIAorUHlBUElfRlVOQyhpbnQpIF9QeV9vcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGludCBmbGFncyk7CisKIFB5QVBJX0ZVTkMoRklMRSAqKSBfUHlfd2ZvcGVuKAogICAgIGNvbnN0IHdjaGFyX3QgKnBhdGgsCiAgICAgY29uc3Qgd2NoYXJfdCAqbW9kZSk7CiAKIFB5QVBJX0ZVTkMoRklMRSopIF9QeV9mb3BlbigKKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICBjb25zdCBjaGFyICptb2RlKTsKKworUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuX29iaigKICAgICBQeU9iamVjdCAqcGF0aCwKICAgICBjb25zdCBjaGFyICptb2RlKTsKIApAQCAtNTMsNiArNjEsMTMgQEAKICAgICB3Y2hhcl90ICpidWYsCiAgICAgc2l6ZV90IHNpemUpOwogCitQeUFQSV9GVU5DKGludCkgX1B5X2dldF9pbmhlcml0YWJsZShpbnQgZmQpOworCitQeUFQSV9GVU5DKGludCkgX1B5X3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2R1cChpbnQgZmQpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oIGIvSW5jbHVkZS9mcmFtZW9iamVjdC5oCmluZGV4IDMzZjczYWYuLmI0MWJlYTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZnJhbWVvYmplY3QuaAorKysgYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKQEAgLTM2LDYgKzM2LDggQEAKICAgICAgICAgICAgbm9uLWdlbmVyYXRvciBmcmFtZXMuIFNlZSB0aGUgc2F2ZV9leGNfc3RhdGUgYW5kIHN3YXBfZXhjX3N0YXRlCiAgICAgICAgICAgIGZ1bmN0aW9ucyBpbiBjZXZhbC5jIGZvciBkZXRhaWxzIG9mIHRoZWlyIHVzZS4gKi8KICAgICBQeU9iamVjdCAqZl9leGNfdHlwZSwgKmZfZXhjX3ZhbHVlLCAqZl9leGNfdHJhY2ViYWNrOworICAgIC8qIEJvcnJvd2VkIHJlZmVyZW5jZSB0byBhIGdlbmVyYXRvciwgb3IgTlVMTCAqLworICAgIFB5T2JqZWN0ICpmX2dlbjsKIAogICAgIFB5VGhyZWFkU3RhdGUgKmZfdHN0YXRlOwogICAgIGludCBmX2xhc3RpOyAgICAgICAgICAgICAgICAvKiBMYXN0IGluc3RydWN0aW9uIGlmIGNhbGxlZCAqLwpAQCAtNDYsNiArNDgsNyBAQAogICAgICAgIGJ5dGVjb2RlIGluZGV4LiAqLwogICAgIGludCBmX2xpbmVubzsgICAgICAgICAgICAgICAvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGZfaWJsb2NrOyAgICAgICAgICAgICAgIC8qIGluZGV4IGluIGZfYmxvY2tzdGFjayAqLworICAgIGNoYXIgZl9leGVjdXRpbmc7ICAgICAgICAgICAvKiB3aGV0aGVyIHRoZSBmcmFtZSBpcyBzdGlsbCBleGVjdXRpbmcgKi8KICAgICBQeVRyeUJsb2NrIGZfYmxvY2tzdGFja1tDT19NQVhCTE9DS1NdOyAvKiBmb3IgdHJ5IGFuZCBsb29wIGJsb2NrcyAqLwogICAgIFB5T2JqZWN0ICpmX2xvY2Fsc3BsdXNbMV07ICAvKiBsb2NhbHMrc3RhY2ssIGR5bmFtaWNhbGx5IHNpemVkICovCiB9IFB5RnJhbWVPYmplY3Q7CkBAIC03NSw2ICs3OCw4IEBACiAvKiBDb252ZXJzaW9ucyBiZXR3ZWVuICJmYXN0IGxvY2FscyIgYW5kIGxvY2FscyBpbiBkaWN0aW9uYXJ5ICovCiAKIFB5QVBJX0ZVTkModm9pZCkgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QoUHlGcmFtZU9iamVjdCAqLCBpbnQpOworCitQeUFQSV9GVU5DKGludCkgUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoUHlGcmFtZU9iamVjdCAqZik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKik7CiAKIFB5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0NsZWFyRnJlZUxpc3Qodm9pZCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2dlbm9iamVjdC5oIGIvSW5jbHVkZS9nZW5vYmplY3QuaAppbmRleCBlZDQ1MWJhLi42NWYxZWNmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2dlbm9iamVjdC5oCisrKyBiL0luY2x1ZGUvZ2Vub2JqZWN0LmgKQEAgLTM2LDYgKzM2LDggQEAKIFB5QVBJX0ZVTkMoaW50KSBQeUdlbl9OZWVkc0ZpbmFsaXppbmcoUHlHZW5PYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgX1B5R2VuX0ZldGNoU3RvcEl0ZXJhdGlvblZhbHVlKFB5T2JqZWN0ICoqKTsKIFB5T2JqZWN0ICpfUHlHZW5fU2VuZChQeUdlbk9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5R2VuX0ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKTsKKwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvZ3JhbW1hci5oIGIvSW5jbHVkZS9ncmFtbWFyLmgKaW5kZXggODQyNmRhMy4uYmE3ZDE5ZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ncmFtbWFyLmgKKysrIGIvSW5jbHVkZS9ncmFtbWFyLmgKQEAgLTY5LDE0ICs2OSwxNCBAQAogLyogRlVOQ1RJT05TICovCiAKIGdyYW1tYXIgKm5ld2dyYW1tYXIoaW50IHN0YXJ0KTsKLWRmYSAqYWRkZGZhKGdyYW1tYXIgKmcsIGludCB0eXBlLCBjaGFyICpuYW1lKTsKK2RmYSAqYWRkZGZhKGdyYW1tYXIgKmcsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKIGludCBhZGRzdGF0ZShkZmEgKmQpOwogdm9pZCBhZGRhcmMoZGZhICpkLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgbGJsKTsKIGRmYSAqUHlHcmFtbWFyX0ZpbmRERkEoZ3JhbW1hciAqZywgaW50IHR5cGUpOwogCi1pbnQgYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cik7Ci1pbnQgZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpOwotY2hhciAqUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpOworaW50IGFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpOworaW50IGZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKTsKK2NvbnN0IGNoYXIgKlB5R3JhbW1hcl9MYWJlbFJlcHIobGFiZWwgKmxiKTsKIHZvaWQgdHJhbnNsYXRlbGFiZWxzKGdyYW1tYXIgKmcpOwogCiB2b2lkIGFkZGZpcnN0c2V0cyhncmFtbWFyICpnKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvaW1wb3J0LmggYi9JbmNsdWRlL2ltcG9ydC5oCmluZGV4IGZkYzI3MzMuLjRhNTE1ZDUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvaW1wb3J0LmgKKysrIGIvSW5jbHVkZS9pbXBvcnQuaApAQCAtMTMsMTkgKzEzLDE5IEBACiBQeUFQSV9GVU5DKGxvbmcpIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyKHZvaWQpOwogUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5SW1wb3J0X0dldE1hZ2ljVGFnKHZvaWQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSgKLSAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqY28KICAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbywKLSAgICBjaGFyICpwYXRobmFtZSAgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqcGF0aG5hbWUgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKLSAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqY28sCi0gICAgY2hhciAqcGF0aG5hbWUsICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwotICAgIGNoYXIgKmNwYXRobmFtZSAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqY3BhdGhuYW1lICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KAogICAgIFB5T2JqZWN0ICpuYW1lLApAQCAtNzIsNyArNzIsNyBAQAogICAgIFB5T2JqZWN0ICpuYW1lCiAgICAgKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoCi0gICAgY2hhciAqbmFtZSAgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgKTsKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQpAQCAtOTIsMTIgKzkyLDEyIEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludClfUHlJbXBvcnRfRml4dXBCdWlsdGluKAogICAgIFB5T2JqZWN0ICptb2QsCi0gICAgY2hhciAqbmFtZSAgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoaW50KV9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogCiBzdHJ1Y3QgX2luaXR0YWIgewotICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0KiAoKmluaXRmdW5jKSh2b2lkKTsKIH07CiBQeUFQSV9EQVRBKHN0cnVjdCBfaW5pdHRhYiAqKSBQeUltcG9ydF9Jbml0dGFiOwpAQCAtMTEzLDE1ICsxMTMsMTUgQEAKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogc3RydWN0IF9mcm96ZW4gewotICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLwotICAgIHVuc2lnbmVkIGNoYXIgKmNvZGU7CisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29kZTsKICAgICBpbnQgc2l6ZTsKIH07CiAKIC8qIEVtYmVkZGluZyBhcHBzIG1heSBjaGFuZ2UgdGhpcyBwb2ludGVyIHRvIHBvaW50IHRvIHRoZWlyIGZhdm9yaXRlCiAgICBjb2xsZWN0aW9uIG9mIGZyb3plbiBtb2R1bGVzOiAqLwogCi1QeUFQSV9EQVRBKHN0cnVjdCBfZnJvemVuICopIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CitQeUFQSV9EQVRBKGNvbnN0IHN0cnVjdCBfZnJvemVuICopIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2xvbmdvYmplY3QuaCBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCmluZGV4IGZiZTczOGMuLjdjM2Y2ZDAgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbG9uZ29iamVjdC5oCisrKyBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCkBAIC01Miw2ICs1MiwxOSBAQAogI2Vycm9yICJzaXplb2YocGlkX3QpIGlzIG5laXRoZXIgc2l6ZW9mKGludCksIHNpemVvZihsb25nKSBvciBzaXplb2YobG9uZyBsb25nKSIKICNlbmRpZiAvKiBTSVpFT0ZfUElEX1QgKi8KIAorI2lmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0lOVAorIyAgZGVmaW5lIF9QeV9QQVJTRV9JTlRQVFIgImkiCisjICBkZWZpbmUgX1B5X1BBUlNFX1VJTlRQVFIgIkkiCisjZWxpZiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAibCIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiayIKKyNlbGlmIGRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykgJiYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfTE9OR19MT05HCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAiTCIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiSyIKKyNlbHNlCisjICBlcnJvciAidm9pZCogZGlmZmVyZW50IGluIHNpemUgZnJvbSBpbnQsIGxvbmcgYW5kIGxvbmcgbG9uZyIKKyNlbmRpZiAvKiBTSVpFT0ZfVk9JRF9QICovCisKIC8qIFVzZWQgYnkgUHl0aG9uL215c3RydG91bC5jLiAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfREFUQSh1bnNpZ25lZCBjaGFyKSBfUHlMb25nX0RpZ2l0VmFsdWVbMjU2XTsKQEAgLTgwLDcgKzkzLDcgQEAKIFB5QVBJX0ZVTkMoUFlfTE9OR19MT05HKSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICosIGludCAqKTsKICNlbmRpZiAvKiBIQVZFX0xPTkdfTE9ORyAqLwogCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tU3RyaW5nKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVVuaWNvZGUoUHlfVU5JQ09ERSosIFB5X3NzaXplX3QsIGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdChQeU9iamVjdCAqdSwgaW50IGJhc2UpOwpAQCAtMTc2LDggKzE4OSw4IEBACiAvKiBUaGVzZSBhcmVuJ3QgcmVhbGx5IHBhcnQgb2YgdGhlIGludCBvYmplY3QsIGJ1dCB0aGV5J3JlIGhhbmR5LiBUaGUKICAgIGZ1bmN0aW9ucyBhcmUgaW4gUHl0aG9uL215c3RydG91bC5jLgogICovCi1QeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5T1Nfc3RydG91bChjaGFyICosIGNoYXIgKiosIGludCk7Ci1QeUFQSV9GVU5DKGxvbmcpIFB5T1Nfc3RydG9sKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK1B5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlPU19zdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK1B5QVBJX0ZVTkMobG9uZykgUHlPU19zdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvbWFyc2hhbC5oIGIvSW5jbHVkZS9tYXJzaGFsLmgKaW5kZXggZTk2ZDA2Mi4uMDlkOTMzNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tYXJzaGFsLmgKKysrIGIvSW5jbHVkZS9tYXJzaGFsLmgKQEAgLTcsNyArNyw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFB5X01BUlNIQUxfVkVSU0lPTiAyCisjZGVmaW5lIFB5X01BUlNIQUxfVkVSU0lPTiA0CiAKIFB5QVBJX0ZVTkModm9pZCkgUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZShsb25nLCBGSUxFICosIGludCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZShQeU9iamVjdCAqLCBGSUxFICosIGludCk7CkBAIC0xOSw3ICsxOSw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUoRklMRSAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGUoRklMRSAqKTsKICNlbmRpZgotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqLCBQeV9zc2l6ZV90KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kc3VwcG9ydC5oIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKaW5kZXggZWNmMWRjYy4uYWI3MjVmNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2RzdXBwb3J0LmgKKysrIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIC8qIER1ZSB0byBhIGdsaXRjaCBpbiAzLjIsIHRoZSBfU2l6ZVQgdmVyc2lvbnMgd2VyZW4ndCBleHBvcnRlZCBmcm9tIHRoZSBETEwuICovCiAjaWYgIWRlZmluZWQoUFlfU1NJWkVfVF9DTEVBTikgfHwgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzAzMDAwMAogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLVB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKSBQeV9GT1JNQVRfUEFSU0VUVVBMRShQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKTsKK1B5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjaGFyICoqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cyhQeU9iamVjdCAqKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqZWN0LmggYi9JbmNsdWRlL29iamVjdC5oCmluZGV4IDIwYzQ3ODAuLjhkZTIyMDggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9vYmplY3QuaApAQCAtMTQzLDcgKzE0Myw4IEBACiAgICAgUHlPYmplY3QgKm9iamVjdDsKIH0gX1B5X0lkZW50aWZpZXI7CiAKLSNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmcodmFybmFtZSwgdmFsdWUpICBzdGF0aWMgX1B5X0lkZW50aWZpZXIgdmFybmFtZSA9IHsgMCwgdmFsdWUsIDAgfQorI2RlZmluZSBfUHlfc3RhdGljX3N0cmluZ19pbml0KHZhbHVlKSB7IDAsIHZhbHVlLCAwIH0KKyNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmcodmFybmFtZSwgdmFsdWUpICBzdGF0aWMgX1B5X0lkZW50aWZpZXIgdmFybmFtZSA9IF9QeV9zdGF0aWNfc3RyaW5nX2luaXQodmFsdWUpCiAjZGVmaW5lIF9QeV9JREVOVElGSUVSKHZhcm5hbWUpIF9QeV9zdGF0aWNfc3RyaW5nKFB5SWRfIyN2YXJuYW1lLCAjdmFybmFtZSkKIAogLyoKQEAgLTM2Miw3ICszNjMsNyBAQAogICAgIFB5QnVmZmVyUHJvY3MgKnRwX2FzX2J1ZmZlcjsKIAogICAgIC8qIEZsYWdzIHRvIGRlZmluZSBwcmVzZW5jZSBvZiBvcHRpb25hbC9leHBhbmRlZCBmZWF0dXJlcyAqLwotICAgIGxvbmcgdHBfZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyB0cF9mbGFnczsKIAogICAgIGNvbnN0IGNoYXIgKnRwX2RvYzsgLyogRG9jdW1lbnRhdGlvbiBzdHJpbmcgKi8KIApAQCAtNDA4LDYgKzQwOSw4IEBACiAgICAgLyogVHlwZSBhdHRyaWJ1dGUgY2FjaGUgdmVyc2lvbiB0YWcuIEFkZGVkIGluIHZlcnNpb24gMi42ICovCiAgICAgdW5zaWduZWQgaW50IHRwX3ZlcnNpb25fdGFnOwogCisgICAgZGVzdHJ1Y3RvciB0cF9maW5hbGl6ZTsKKwogI2lmZGVmIENPVU5UX0FMTE9DUwogICAgIC8qIHRoZXNlIG11c3QgYmUgbGFzdCBhbmQgbmV2ZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCAqLwogICAgIFB5X3NzaXplX3QgdHBfYWxsb2NzOwpAQCAtNDI4LDcgKzQzMSw3IEBACiAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICBpbnQgYmFzaWNzaXplOwogICAgIGludCBpdGVtc2l6ZTsKLSAgICBpbnQgZmxhZ3M7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgIFB5VHlwZV9TbG90ICpzbG90czsgLyogdGVybWluYXRlZCBieSBzbG90PT0wLiAqLwogfSBQeVR5cGVfU3BlYzsKIApAQCAtNDcwLDcgKzQ3Myw3IEBACiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlCYXNlT2JqZWN0X1R5cGU7IC8qIGJ1aWx0LWluICdvYmplY3QnICovCiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlTdXBlcl9UeXBlOyAvKiBidWlsdC1pbiAnc3VwZXInICovCiAKLVB5QVBJX0ZVTkMobG9uZykgUHlUeXBlX0dldEZsYWdzKFB5VHlwZU9iamVjdCopOworUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0Kik7CiAKICNkZWZpbmUgUHlUeXBlX0NoZWNrKG9wKSBcCiAgICAgUHlUeXBlX0Zhc3RTdWJjbGFzcyhQeV9UWVBFKG9wKSwgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTKQpAQCAtNTMwLDYgKzUzMyw4IEBACiBQeUFQSV9GVU5DKGludCkgUHlDYWxsYWJsZV9DaGVjayhQeU9iamVjdCAqKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9DbGVhcldlYWtSZWZzKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9DYWxsRmluYWxpemVyKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqKTsKIAogLyogU2FtZSBhcyBQeU9iamVjdF9HZW5lcmlje0dldCxTZXR9QXR0ciwgYnV0IHBhc3NpbmcgdGhlIGF0dHJpYnV0ZXMKICAgIGRpY3QgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLiAqLwpAQCAtNTU3LDIzICs1NjIsNiBAQAogUHlBUElfRlVOQyhpbnQpIFB5X1JlcHJFbnRlcihQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlfUmVwckxlYXZlKFB5T2JqZWN0ICopOwogCi0vKiBIZWxwZXJzIGZvciBoYXNoIGZ1bmN0aW9ucyAqLwotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoRG91YmxlKGRvdWJsZSk7Ci1QeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hQb2ludGVyKHZvaWQqKTsKLVB5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaEJ5dGVzKHVuc2lnbmVkIGNoYXIqLCBQeV9zc2l6ZV90KTsKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlfaGFzaF90IHByZWZpeDsKLSAgICBQeV9oYXNoX3Qgc3VmZml4OwotfSBfUHlfSGFzaFNlY3JldF90OwotUHlBUElfREFUQShfUHlfSGFzaFNlY3JldF90KSBfUHlfSGFzaFNlY3JldDsKLQotI2lmZGVmIFB5X0RFQlVHCi1QeUFQSV9EQVRBKGludCkgX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQ7Ci0jZW5kaWYKLQogLyogSGVscGVyIGZvciBwYXNzaW5nIG9iamVjdHMgdG8gcHJpbnRmIGFuZCB0aGUgbGlrZSAqLwogI2RlZmluZSBQeU9iamVjdF9SRVBSKG9iaikgX1B5VW5pY29kZV9Bc1N0cmluZyhQeU9iamVjdF9SZXByKG9iaikpCiAKQEAgLTYwNCw1MCArNTkyLDU1IEBACiAqLwogCiAvKiBTZXQgaWYgdGhlIHR5cGUgb2JqZWN0IGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0hFQVBUWVBFICgxTDw8OSkKKyNkZWZpbmUgUHlfVFBGTEFHU19IRUFQVFlQRSAoMVVMIDw8IDkpCiAKIC8qIFNldCBpZiB0aGUgdHlwZSBhbGxvd3Mgc3ViY2xhc3NpbmcgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19CQVNFVFlQRSAoMUw8PDEwKQorI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VUWVBFICgxVUwgPDwgMTApCiAKIC8qIFNldCBpZiB0aGUgdHlwZSBpcyAncmVhZHknIC0tIGZ1bGx5IGluaXRpYWxpemVkICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFkgKDFMPDwxMikKKyNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWSAoMVVMIDw8IDEyKQogCiAvKiBTZXQgd2hpbGUgdGhlIHR5cGUgaXMgYmVpbmcgJ3JlYWRpZWQnLCB0byBwcmV2ZW50IHJlY3Vyc2l2ZSByZWFkeSBjYWxscyAqLwotI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZSU5HICgxTDw8MTMpCisjZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFlJTkcgKDFVTCA8PCAxMykKIAogLyogT2JqZWN0cyBzdXBwb3J0IGdhcmJhZ2UgY29sbGVjdGlvbiAoc2VlIG9iamltcC5oKSAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfR0MgKDFMPDwxNCkKKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0dDICgxVUwgPDwgMTQpCiAKIC8qIFRoZXNlIHR3byBiaXRzIGFyZSBwcmVzZXJ2ZWQgZm9yIFN0YWNrbGVzcyBQeXRob24sIG5leHQgYWZ0ZXIgdGhpcyBpcyAxNyAqLwogI2lmZGVmIFNUQUNLTEVTUwotI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiAoM0w8PDE1KQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiAoM1VMIDw8IDE1KQogI2Vsc2UKICNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gMAogI2VuZGlmCiAKIC8qIE9iamVjdHMgc3VwcG9ydCB0eXBlIGF0dHJpYnV0ZSBjYWNoZSAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUcgICAoMUw8PDE4KQotI2RlZmluZSBQeV9UUEZMQUdTX1ZBTElEX1ZFUlNJT05fVEFHICAoMUw8PDE5KQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUcgICAoMVVMIDw8IDE4KQorI2RlZmluZSBQeV9UUEZMQUdTX1ZBTElEX1ZFUlNJT05fVEFHICAoMVVMIDw8IDE5KQogCiAvKiBUeXBlIGlzIGFic3RyYWN0IGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QgKDFMPDwyMCkKKyNkZWZpbmUgUHlfVFBGTEFHU19JU19BQlNUUkFDVCAoMVVMIDw8IDIwKQogCiAvKiBUaGVzZSBmbGFncyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSB0eXBlIGlzIGEgc3ViY2xhc3MuICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSU5UX1NVQkNMQVNTICAgICAgICAgKDFMPDwyMykKLSNkZWZpbmUgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTICAgICAgICAoMUw8PDI0KQotI2RlZmluZSBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MgICAgICAgICgxTDw8MjUpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1MgICAgICAgKDFMPDwyNikKLSNkZWZpbmUgUHlfVFBGTEFHU19CWVRFU19TVUJDTEFTUyAgICAgICAoMUw8PDI3KQotI2RlZmluZSBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MgICAgICgxTDw8MjgpCi0jZGVmaW5lIFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTUyAgICAgICAgKDFMPDwyOSkKLSNkZWZpbmUgUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUyAgICAoMUw8PDMwKQotI2RlZmluZSBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgICAgICAgICgxTDw8MzEpCisjZGVmaW5lIFB5X1RQRkxBR1NfTE9OR19TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyNCkKKyNkZWZpbmUgUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI1KQorI2RlZmluZSBQeV9UUEZMQUdTX1RVUExFX1NVQkNMQVNTICAgICAgICgxVUwgPDwgMjYpCisjZGVmaW5lIFB5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1MgICAgICAgKDFVTCA8PCAyNykKKyNkZWZpbmUgUHlfVFBGTEFHU19VTklDT0RFX1NVQkNMQVNTICAgICAoMVVMIDw8IDI4KQorI2RlZmluZSBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjkpCisjZGVmaW5lIFB5X1RQRkxBR1NfQkFTRV9FWENfU1VCQ0xBU1MgICAgKDFVTCA8PCAzMCkKKyNkZWZpbmUgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDMxKQogCiAjZGVmaW5lIFB5X1RQRkxBR1NfREVGQVVMVCAgKCBcCiAgICAgICAgICAgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OIHwgXAogICAgICAgICAgICAgICAgICBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUcgfCBcCiAgICAgICAgICAgICAgICAgMCkKIAorLyogTk9URTogVGhlIGZvbGxvd2luZyBmbGFncyByZXVzZSBsb3dlciBiaXRzIChyZW1vdmVkIGFzIHBhcnQgb2YgdGhlCisgKiBQeXRob24gMy4wIHRyYW5zaXRpb24pLiAqLworCisvKiBUeXBlIHN0cnVjdHVyZSBoYXMgdHBfZmluYWxpemUgbWVtYmVyICgzLjQpICovCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSAoMVVMIDw8IDApCisKICNpZmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeVR5cGVfSGFzRmVhdHVyZSh0LGYpICAoKFB5VHlwZV9HZXRGbGFncyh0KSAmIChmKSkgIT0gMCkKICNlbHNlCkBAIC02ODIsMTIgKzY3NSw2IEBACiBjb21wbGljYXRpb25zIGluIHRoZSBkZWFsbG9jYXRpb24gZnVuY3Rpb24uICAoVGhpcyBpcyBhY3R1YWxseSBhCiBkZWNpc2lvbiB0aGF0J3MgdXAgdG8gdGhlIGltcGxlbWVudGVyIG9mIGVhY2ggbmV3IHR5cGUgc28gaWYgeW91IHdhbnQsCiB5b3UgY2FuIGNvdW50IHN1Y2ggcmVmZXJlbmNlcyB0byB0aGUgdHlwZSBvYmplY3QuKQotCi0qKiogV0FSTklORyoqKiBUaGUgUHlfREVDUkVGIG1hY3JvIG11c3QgaGF2ZSBhIHNpZGUtZWZmZWN0LWZyZWUgYXJndW1lbnQKLXNpbmNlIGl0IG1heSBldmFsdWF0ZSBpdHMgYXJndW1lbnQgbXVsdGlwbGUgdGltZXMuICAoVGhlIGFsdGVybmF0aXZlCi13b3VsZCBiZSB0byBtYWNlIGl0IGEgcHJvcGVyIGZ1bmN0aW9uIG9yIGFzc2lnbiBpdCB0byBhIGdsb2JhbCB0ZW1wb3JhcnkKLXZhcmlhYmxlIGZpcnN0LCBib3RoIG9mIHdoaWNoIGFyZSBzbG93ZXI7IGFuZCBpbiBhIG11bHRpLXRocmVhZGVkCi1lbnZpcm9ubWVudCB0aGUgZ2xvYmFsIHZhcmlhYmxlIHRyaWNrIGlzIG5vdCBzYWZlLikKICovCiAKIC8qIEZpcnN0IGRlZmluZSBhIHBpbGUgb2Ygc2ltcGxlIGhlbHBlciBtYWNyb3MsIG9uZSBzZXQgcGVyIHNwZWNpYWwKQEAgLTcwNCw3ICs2OTEsNiBAQAogUHlBUElfRlVOQyh2b2lkKSBfUHlfTmVnYXRpdmVSZWZjb3VudChjb25zdCBjaGFyICpmbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVubywgUHlPYmplY3QgKm9wKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5RGljdF9EdW1teSh2b2lkKTsKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U2V0X0R1bW15KHZvaWQpOwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfR2V0UmVmVG90YWwodm9pZCk7CiAjZGVmaW5lIF9QeV9JTkNfUkVGVE9UQUwgICAgICAgIF9QeV9SZWZUb3RhbCsrCiAjZGVmaW5lIF9QeV9ERUNfUkVGVE9UQUwgICAgICAgIF9QeV9SZWZUb3RhbC0tCkBAIC03NjYsMTUgKzc1MiwxNiBAQAogCiAjZGVmaW5lIFB5X0lOQ1JFRihvcCkgKCAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgX1B5X0lOQ19SRUZUT1RBTCAgX1B5X1JFRl9ERUJVR19DT01NQSAgICAgICBcCi0gICAgKChQeU9iamVjdCopKG9wKSktPm9iX3JlZmNudCsrKQorICAgICgoUHlPYmplY3QgKikob3ApKS0+b2JfcmVmY250KyspCiAKICNkZWZpbmUgUHlfREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfZGVjcmVmX3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgIFwKICAgICAgICAgaWYgKF9QeV9ERUNfUkVGVE9UQUwgIF9QeV9SRUZfREVCVUdfQ09NTUEgICAgICAgXAotICAgICAgICAtLSgoUHlPYmplY3QqKShvcCkpLT5vYl9yZWZjbnQgIT0gMCkgICAgICAgICAgICBcCi0gICAgICAgICAgICBfUHlfQ0hFQ0tfUkVGQ05UKG9wKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLS0oX3B5X2RlY3JlZl90bXApLT5vYl9yZWZjbnQgIT0gMCkgICAgICAgICAgICAgXAorICAgICAgICAgICAgX1B5X0NIRUNLX1JFRkNOVChfcHlfZGVjcmVmX3RtcCkgICAgICAgICAgICBcCiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX1B5X0RlYWxsb2MoKFB5T2JqZWN0ICopKG9wKSk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfUHlfRGVhbGxvYyhfcHlfZGVjcmVmX3RtcCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAogLyogU2FmZWx5IGRlY3JlZiBgb3BgIGFuZCBzZXQgYG9wYCB0byBOVUxMLCBlc3BlY2lhbGx5IHVzZWZ1bCBpbiB0cF9jbGVhcgpAQCAtODEzLDE2ICs4MDAsMjcgQEAKICAqLwogI2RlZmluZSBQeV9DTEVBUihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAob3ApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlPYmplY3QgKl9weV90bXAgPSAoUHlPYmplY3QgKikob3ApOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV90bXAgPSAoUHlPYmplY3QgKikob3ApOyAgIFwKKyAgICAgICAgaWYgKF9weV90bXAgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIChvcCkgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIFB5X0RFQ1JFRihfcHlfdG1wKTsgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAvKiBNYWNyb3MgdG8gdXNlIGluIGNhc2UgdGhlIG9iamVjdCBwb2ludGVyIG1heSBiZSBOVUxMOiAqLwotI2RlZmluZSBQeV9YSU5DUkVGKG9wKSBkbyB7IGlmICgob3ApID09IE5VTEwpIDsgZWxzZSBQeV9JTkNSRUYob3ApOyB9IHdoaWxlICgwKQotI2RlZmluZSBQeV9YREVDUkVGKG9wKSBkbyB7IGlmICgob3ApID09IE5VTEwpIDsgZWxzZSBQeV9ERUNSRUYob3ApOyB9IHdoaWxlICgwKQorI2RlZmluZSBQeV9YSU5DUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3hpbmNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgXAorICAgICAgICBpZiAoX3B5X3hpbmNyZWZfdG1wICE9IE5VTEwpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfSU5DUkVGKF9weV94aW5jcmVmX3RtcCk7ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUHlfWERFQ1JFRihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV94ZGVjcmVmX3RtcCA9IChQeU9iamVjdCAqKShvcCk7IFwKKyAgICAgICAgaWYgKF9weV94ZGVjcmVmX3RtcCAhPSBOVUxMKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihfcHlfeGRlY3JlZl90bXApOyAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAvKgogVGhlc2UgYXJlIHByb3ZpZGVkIGFzIGNvbnZlbmllbmNlcyB0byBQeXRob24gcnVudGltZSBlbWJlZGRlcnMsIHNvIHRoYXQKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqaW1wbC5oIGIvSW5jbHVkZS9vYmppbXBsLmgKaW5kZXggYzZiN2RmNC4uOWEyN2VjMyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vYmppbXBsLmgKKysrIGIvSW5jbHVkZS9vYmppbXBsLmgKQEAgLTk0LDUxICs5NCwyNyBAQAogICAgdGhlIG9iamVjdCBnZXRzIGluaXRpYWxpemVkIHZpYSBQeU9iamVjdF97SW5pdCwgSW5pdFZhcn0gYWZ0ZXIgb2J0YWluaW5nCiAgICB0aGUgcmF3IG1lbW9yeS4KICovCi1QeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfTWFsbG9jKHNpemVfdCk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfUmVhbGxvYyh2b2lkICosIHNpemVfdCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0ZyZWUodm9pZCAqKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9GcmVlKHZvaWQgKnB0cik7CiAKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLCByZWdhcmRsZXNzIG9mIHNpemUgKi8KK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKTsKIAogLyogTWFjcm9zICovCiAjaWZkZWYgV0lUSF9QWU1BTExPQwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpOwogI2VuZGlmIC8qICNpZm5kZWYgUHlfTElNSVRFRF9BUEkgKi8KLSNpZmRlZiBQWU1BTExPQ19ERUJVRyAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgUFlNQUxMT0NfREVCVUcgKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnRnJlZSh2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnRHVtcEFkZHJlc3MoY29uc3Qgdm9pZCAqcCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoY2hhciBhcGksIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoY2hhciBhcGksIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlQXBpKGNoYXIgYXBpLCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpwKTsKLSNkZWZpbmUgUHlPYmplY3RfTUFMTE9DICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X01hbGxvYyAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z01hbGxvYwotI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBfUHlPYmplY3RfRGVidWdSZWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X1JlYWxsb2MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfRlJFRSAgICAgICAgICAgX1B5T2JqZWN0X0RlYnVnRnJlZQotI2RlZmluZSBQeU9iamVjdF9GcmVlICAgICAgICAgICBfUHlPYmplY3RfRGVidWdGcmVlCisjZW5kaWYKIAotI2Vsc2UgICAvKiBXSVRIX1BZTUFMTE9DICYmICEgUFlNQUxMT0NfREVCVUcgKi8KKy8qIE1hY3JvcyAqLwogI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBQeU9iamVjdF9NYWxsb2MKICNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgUHlPYmplY3RfUmVhbGxvYwogI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBQeU9iamVjdF9GcmVlCi0jZW5kaWYKLQotI2Vsc2UgICAvKiAhIFdJVEhfUFlNQUxMT0MgKi8KLSNkZWZpbmUgUHlPYmplY3RfTUFMTE9DICAgICAgICAgUHlNZW1fTUFMTE9DCi0jZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIFB5TWVtX1JFQUxMT0MKLSNkZWZpbmUgUHlPYmplY3RfRlJFRSAgICAgICAgICAgUHlNZW1fRlJFRQotCi0jZW5kaWYgIC8qIFdJVEhfUFlNQUxMT0MgKi8KLQogI2RlZmluZSBQeU9iamVjdF9EZWwgICAgICAgICAgICBQeU9iamVjdF9GcmVlCi0jZGVmaW5lIFB5T2JqZWN0X0RFTCAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUKKyNkZWZpbmUgUHlPYmplY3RfREVMICAgICAgICAgICAgUHlPYmplY3RfRnJlZQorCiAKIC8qCiAgKiBHZW5lcmljIG9iamVjdCBhbGxvY2F0b3IgaW50ZXJmYWNlCkBAIC0yMjIsNiArMTk4LDI2IEBACiAgICBjb25zdHJ1Y3RvciB5b3Ugd291bGQgc3RhcnQgZGlyZWN0bHkgd2l0aCBQeU9iamVjdF9Jbml0L0luaXRWYXIKICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgMiBmdW5jdGlvbnMgKi8KKyAgICB2b2lkICpjdHg7CisKKyAgICAvKiBhbGxvY2F0ZSBhbiBhcmVuYSBvZiBzaXplIGJ5dGVzICovCisgICAgdm9pZCogKCphbGxvYykgKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOworCisgICAgLyogZnJlZSBhbiBhcmVuYSAqLworICAgIHZvaWQgKCpmcmVlKSAodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKK30gUHlPYmplY3RBcmVuYUFsbG9jYXRvcjsKKworLyogR2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0dldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcik7CisKKy8qIFNldCB0aGUgYXJlbmEgYWxsb2NhdG9yLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9TZXRBcmVuYUFsbG9jYXRvcihQeU9iamVjdEFyZW5hQWxsb2NhdG9yICphbGxvY2F0b3IpOworI2VuZGlmCisKKwogLyoKICAqIEdhcmJhZ2UgQ29sbGVjdGlvbiBTdXBwb3J0CiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjMwLDYgKzIyNiwxMCBAQAogLyogQyBlcXVpdmFsZW50IG9mIGdjLmNvbGxlY3QoKS4gKi8KIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlHQ19Db2xsZWN0KHZvaWQpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeUdDX0NvbGxlY3ROb0ZhaWwodm9pZCk7CisjZW5kaWYKKwogLyogVGVzdCBpZiBhIHR5cGUgaGFzIGEgR0MgaGVhZCAqLwogI2RlZmluZSBQeVR5cGVfSVNfR0ModCkgUHlUeXBlX0hhc0ZlYXR1cmUoKHQpLCBQeV9UUEZMQUdTX0hBVkVfR0MpCiAKQEAgLTI0OSwxMyArMjQ5LDM3IEBACiAgICAgICAgIHVuaW9uIF9nY19oZWFkICpnY19wcmV2OwogICAgICAgICBQeV9zc2l6ZV90IGdjX3JlZnM7CiAgICAgfSBnYzsKLSAgICBsb25nIGRvdWJsZSBkdW1teTsgIC8qIGZvcmNlIHdvcnN0LWNhc2UgYWxpZ25tZW50ICovCisgICAgZG91YmxlIGR1bW15OyAgLyogZm9yY2Ugd29yc3QtY2FzZSBhbGlnbm1lbnQgKi8KIH0gUHlHQ19IZWFkOwogCiBleHRlcm4gUHlHQ19IZWFkICpfUHlHQ19nZW5lcmF0aW9uMDsKIAogI2RlZmluZSBfUHlfQVNfR0MobykgKChQeUdDX0hlYWQgKikobyktMSkKIAorLyogQml0IDAgaXMgc2V0IHdoZW4gdHBfZmluYWxpemUgaXMgY2FsbGVkICovCisjZGVmaW5lIF9QeUdDX1JFRlNfTUFTS19GSU5BTElaRUQgICgxIDw8IDApCisvKiBUaGUgKE4tMSkgbW9zdCBzaWduaWZpY2FudCBiaXRzIGNvbnRhaW4gdGhlIGdjIHN0YXRlIC8gcmVmY291bnQgKi8KKyNkZWZpbmUgX1B5R0NfUkVGU19TSElGVCAgICAgICAgICAgKDEpCisjZGVmaW5lIF9QeUdDX1JFRlNfTUFTSyAgICAgICAgICAgICgoKHNpemVfdCkgLTEpIDw8IF9QeUdDX1JFRlNfU0hJRlQpCisKKyNkZWZpbmUgX1B5R0NIZWFkX1JFRlMoZykgKChnKS0+Z2MuZ2NfcmVmcyA+PiBfUHlHQ19SRUZTX1NISUZUKQorI2RlZmluZSBfUHlHQ0hlYWRfU0VUX1JFRlMoZywgdikgZG8geyBcCisgICAgKGcpLT5nYy5nY19yZWZzID0gKChnKS0+Z2MuZ2NfcmVmcyAmIH5fUHlHQ19SRUZTX01BU0spIFwKKyAgICAgICAgfCAodiA8PCBfUHlHQ19SRUZTX1NISUZUKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIF9QeUdDSGVhZF9ERUNSRUYoZykgKChnKS0+Z2MuZ2NfcmVmcyAtPSAxIDw8IF9QeUdDX1JFRlNfU0hJRlQpCisKKyNkZWZpbmUgX1B5R0NIZWFkX0ZJTkFMSVpFRChnKSAoKChnKS0+Z2MuZ2NfcmVmcyAmIF9QeUdDX1JFRlNfTUFTS19GSU5BTElaRUQpICE9IDApCisjZGVmaW5lIF9QeUdDSGVhZF9TRVRfRklOQUxJWkVEKGcsIHYpIGRvIHsgIFwKKyAgICAoZyktPmdjLmdjX3JlZnMgPSAoKGcpLT5nYy5nY19yZWZzICYgfl9QeUdDX1JFRlNfTUFTS19GSU5BTElaRUQpIFwKKyAgICAgICAgfCAodiAhPSAwKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX1B5R0NfRklOQUxJWkVEKG8pIF9QeUdDSGVhZF9GSU5BTElaRUQoX1B5X0FTX0dDKG8pKQorI2RlZmluZSBfUHlHQ19TRVRfRklOQUxJWkVEKG8sIHYpIF9QeUdDSGVhZF9TRVRfRklOQUxJWkVEKF9QeV9BU19HQyhvKSwgdikKKworI2RlZmluZSBfUHlHQ19SRUZTKG8pIF9QeUdDSGVhZF9SRUZTKF9QeV9BU19HQyhvKSkKKwogI2RlZmluZSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCAgICAgICAgICAgICAgICAgICAgKC0yKQogI2RlZmluZSBfUHlHQ19SRUZTX1JFQUNIQUJMRSAgICAgICAgICAgICAgICAgICAgKC0zKQogI2RlZmluZSBfUHlHQ19SRUZTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFICAgICAgKC00KQpAQCAtMjY0LDkgKzI4OCw5IEBACiAgKiBjb2xsZWN0b3IgaXQgbXVzdCBiZSBzYWZlIHRvIGNhbGwgdGhlIG9iX3RyYXZlcnNlIG1ldGhvZC4gKi8KICNkZWZpbmUgX1B5T2JqZWN0X0dDX1RSQUNLKG8pIGRvIHsgXAogICAgIFB5R0NfSGVhZCAqZyA9IF9QeV9BU19HQyhvKTsgXAotICAgIGlmIChnLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKSBcCisgICAgaWYgKF9QeUdDSGVhZF9SRUZTKGcpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKSBcCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkdDIG9iamVjdCBhbHJlYWR5IHRyYWNrZWQiKTsgXAotICAgIGctPmdjLmdjX3JlZnMgPSBfUHlHQ19SRUZTX1JFQUNIQUJMRTsgXAorICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCBfUHlHQ19SRUZTX1JFQUNIQUJMRSk7IFwKICAgICBnLT5nYy5nY19uZXh0ID0gX1B5R0NfZ2VuZXJhdGlvbjA7IFwKICAgICBnLT5nYy5nY19wcmV2ID0gX1B5R0NfZ2VuZXJhdGlvbjAtPmdjLmdjX3ByZXY7IFwKICAgICBnLT5nYy5nY19wcmV2LT5nYy5nY19uZXh0ID0gZzsgXApAQCAtMjc5LDggKzMwMyw4IEBACiAgKi8KICNkZWZpbmUgX1B5T2JqZWN0X0dDX1VOVFJBQ0sobykgZG8geyBcCiAgICAgUHlHQ19IZWFkICpnID0gX1B5X0FTX0dDKG8pOyBcCi0gICAgYXNzZXJ0KGctPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCi0gICAgZy0+Z2MuZ2NfcmVmcyA9IF9QeUdDX1JFRlNfVU5UUkFDS0VEOyBcCisgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGcpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAorICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKICAgICBnLT5nYy5nY19wcmV2LT5nYy5nY19uZXh0ID0gZy0+Z2MuZ2NfbmV4dDsgXAogICAgIGctPmdjLmdjX25leHQtPmdjLmdjX3ByZXYgPSBnLT5nYy5nY19wcmV2OyBcCiAgICAgZy0+Z2MuZ2NfbmV4dCA9IE5VTEw7IFwKQEAgLTI4OCw3ICszMTIsNyBAQAogCiAvKiBUcnVlIGlmIHRoZSBvYmplY3QgaXMgY3VycmVudGx5IHRyYWNrZWQgYnkgdGhlIEdDLiAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfSVNfVFJBQ0tFRChvKSBcCi0gICAgKChfUHlfQVNfR0MobykpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKQorICAgIChfUHlHQ19SRUZTKG8pICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKQogCiAvKiBUcnVlIGlmIHRoZSBvYmplY3QgbWF5IGJlIHRyYWNrZWQgYnkgdGhlIEdDIGluIHRoZSBmdXR1cmUsIG9yIGFscmVhZHkgaXMuCiAgICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gaW1wbGVtZW50IHNvbWUgb3B0aW1pemF0aW9ucy4gKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvb3Bjb2RlLmggYi9JbmNsdWRlL29wY29kZS5oCmluZGV4IGE5MDE4NGQuLjA5MzZmMmQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb3Bjb2RlLmgKKysrIGIvSW5jbHVkZS9vcGNvZGUuaApAQCAtNDksNyArNDksNiBAQAogI2RlZmluZSBCSU5BUllfT1IgICAgICAgNjYKICNkZWZpbmUgSU5QTEFDRV9QT1dFUiAgIDY3CiAjZGVmaW5lIEdFVF9JVEVSICAgICAgICA2OAotI2RlZmluZSBTVE9SRV9MT0NBTFMgICAgNjkKICNkZWZpbmUgUFJJTlRfRVhQUiAgICAgIDcwCiAjZGVmaW5lIExPQURfQlVJTERfQ0xBU1MgNzEKICNkZWZpbmUgWUlFTERfRlJPTSAgICAgIDcyCkBAIC0xNDAsNiArMTM5LDcgQEAKICNkZWZpbmUgU0VUX0FERCAgICAgICAgIDE0NgogI2RlZmluZSBNQVBfQUREICAgICAgICAgMTQ3CiAKKyNkZWZpbmUgTE9BRF9DTEFTU0RFUkVGICAgMTQ4CiAKIC8qIEVYQ0VQVF9IQU5ETEVSIGlzIGEgc3BlY2lhbCwgaW1wbGljaXQgYmxvY2sgdHlwZSB3aGljaCBpcyBjcmVhdGVkIHdoZW4KICAgIGVudGVyaW5nIGFuIGV4Y2VwdCBoYW5kbGVyLiBJdCBpcyBub3QgYW4gb3Bjb2RlIGJ1dCB3ZSBkZWZpbmUgaXQgaGVyZQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vc2RlZnMuaCBiL0luY2x1ZGUvb3NkZWZzLmgKaW5kZXggMDVjMGM4ZS4uMGMyZTM0YiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vc2RlZnMuaAorKysgYi9JbmNsdWRlL29zZGVmcy5oCkBAIC05LDE2ICs5LDEwIEBACiAKIC8qIE1vZCBieSBjaHJpc2g6IFFOWCBoYXMgV0FUQ09NLCBidXQgaXNuJ3QgRE9TICovCiAjaWYgIWRlZmluZWQoX19RTlhfXykKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykgfHwgZGVmaW5lZChQWU9TX09TMikKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBNQVhQQVRITEVOIDI2MAotI2RlZmluZSBTRVAgTCcvJwotI2RlZmluZSBBTFRTRVAgTCdcXCcKLSNlbHNlCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykgfHwgZGVmaW5lZChfX0RKR1BQX18pCiAjZGVmaW5lIFNFUCBMJ1xcJwogI2RlZmluZSBBTFRTRVAgTCcvJwogI2RlZmluZSBNQVhQQVRITEVOIDI1NgotI2VuZGlmCiAjZGVmaW5lIERFTElNIEwnOycKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3BhcnNldG9rLmggYi9JbmNsdWRlL3BhcnNldG9rLmgKaW5kZXggOTExZGZjMS4uMmFjYjg1NCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXJzZXRvay5oCisrKyBiL0luY2x1ZGUvcGFyc2V0b2suaApAQCAtMzgsMjkgKzM4LDQ5IEBACiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmcoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICopOwogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlRmlsZSAoRklMRSAqLCBjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICosIHBlcnJkZXRhaWwgKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKik7CiAKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzKGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqLCBpbnQpOwotUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLAotCQkJCQkgICBjb25zdCBjaGFyKiwgZ3JhbW1hciAqLAotCQkJCQkJIGludCwgY2hhciAqLCBjaGFyICosCi0JCQkJCQkgcGVycmRldGFpbCAqLCBpbnQpOworUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzKAorICAgIEZJTEUgKmZwLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKKyAgICBwZXJyZGV0YWlsICplcnJfcmV0LAorICAgIGludCBmbGFncyk7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeCgKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgY29uc3QgY2hhciAqZW5jLAogICAgIGdyYW1tYXIgKmcsCiAgICAgaW50IHN0YXJ0LAotICAgIGNoYXIgKnBzMSwKLSAgICBjaGFyICpwczIsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKKyAgICBwZXJyZGV0YWlsICplcnJfcmV0LAorICAgIGludCAqZmxhZ3MpOworUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlRmlsZU9iamVjdCgKKyAgICBGSUxFICpmcCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgY29uc3QgY2hhciAqZW5jLAorICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIGNvbnN0IGNoYXIgKnBzMSwKKyAgICBjb25zdCBjaGFyICpwczIsCiAgICAgcGVycmRldGFpbCAqZXJyX3JldCwKICAgICBpbnQgKmZsYWdzKTsKIAotUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZShjb25zdCBjaGFyICosCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgICAgZ3JhbW1hciAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqLCBpbnQpOworUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZSgKKyAgICBjb25zdCBjaGFyICpzLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBwZXJyZGV0YWlsICplcnJfcmV0LAorICAgIGludCBmbGFncyk7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lRXgoCiAgICAgY29uc3QgY2hhciAqcywKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC02OCw2ICs4OCwxMyBAQAogICAgIGludCBzdGFydCwKICAgICBwZXJyZGV0YWlsICplcnJfcmV0LAogICAgIGludCAqZmxhZ3MpOworUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CiAKIC8qIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBweXRob25ydW4uYywKICAgIG5vdCBpbiBwYXJzZXRvay5jICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3BhdGNobGV2ZWwuaCBiL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCmluZGV4IDA1NGI5ZWIuLmU2Yzk4ZTQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCisrKyBiL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCkBAIC0xNywxMyArMTcsMTMgQEAKIC8qIFZlcnNpb24gcGFyc2VkIG91dCBpbnRvIG51bWVyaWMgdmFsdWVzICovCiAvKi0tc3RhcnQgY29uc3RhbnRzLS0qLwogI2RlZmluZSBQWV9NQUpPUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlOT1JfVkVSU0lPTgkzCi0jZGVmaW5lIFBZX01JQ1JPX1ZFUlNJT04JMwotI2RlZmluZSBQWV9SRUxFQVNFX0xFVkVMCVBZX1JFTEVBU0VfTEVWRUxfRklOQUwKLSNkZWZpbmUgUFlfUkVMRUFTRV9TRVJJQUwJMAorI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTQKKyNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgkwCisjZGVmaW5lIFBZX1JFTEVBU0VfTEVWRUwJUFlfUkVMRUFTRV9MRVZFTF9CRVRBCisjZGVmaW5lIFBZX1JFTEVBU0VfU0VSSUFMCTEKIAogLyogVmVyc2lvbiBhcyBhIHN0cmluZyAqLwotI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIzLjMuMysiCisjZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjMuNC4wYjEiCiAvKi0tZW5kIGNvbnN0YW50cy0tKi8KIAogLyogVmVyc2lvbiBhcyBhIHNpbmdsZSA0LWJ5dGUgaGV4IG51bWJlciwgZS5nLiAweDAxMDUwMkIyID09IDEuNS4yYjIuCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZGVidWcuaCBiL0luY2x1ZGUvcHlkZWJ1Zy5oCmluZGV4IDk3YzJmOGMuLjhmZTk4MTggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlkZWJ1Zy5oCisrKyBiL0luY2x1ZGUvcHlkZWJ1Zy5oCkBAIC0yMCw2ICsyMCw3IEBACiBQeUFQSV9EQVRBKGludCkgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeTsKIFB5QVBJX0RBVEEoaW50KSBQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnOwogUHlBUElfREFUQShpbnQpIFB5X0hhc2hSYW5kb21pemF0aW9uRmxhZzsKK1B5QVBJX0RBVEEoaW50KSBQeV9Jc29sYXRlZEZsYWc7CiAKIC8qIHRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBnZXRlbnYoKSB0aGF0IHBheXMgYXR0ZW50aW9uIHRvCiAgICBQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWcuICBJdCBzaG91bGQgYmUgdXNlZCBmb3IgZ2V0dGluZyB2YXJpYWJsZXMgbGlrZQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWVycm9ycy5oIGIvSW5jbHVkZS9weWVycm9ycy5oCmluZGV4IGUzODUxMjMuLjZhOGUwZTggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHllcnJvcnMuaAorKysgYi9JbmNsdWRlL3B5ZXJyb3JzLmgKQEAgLTc1LDYgKzc1LDcgQEAKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXROb25lKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRPYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUVycl9TZXRLZXlFcnJvcihQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0U3RyaW5nKAogICAgIFB5T2JqZWN0ICpleGNlcHRpb24sCiAgICAgY29uc3QgY2hhciAqc3RyaW5nICAgLyogZGVjb2RlZCBmcm9tIHV0Zi04ICovCkBAIC0yODQsNiArMjg1LDI4IEBACiAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZG9jLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9Xcml0ZVVucmFpc2FibGUoUHlPYmplY3QgKik7CiAKKy8qIEluIGV4Y2VwdGlvbnMuYyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorLyogSGVscGVyIHRoYXQgYXR0ZW1wdHMgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBleGNlcHRpb24gd2l0aCBvbmUgb2YgdGhlCisgKiBzYW1lIHR5cGUgYnV0IHdpdGggYSBwcmVmaXggYWRkZWQgdG8gdGhlIGV4Y2VwdGlvbiB0ZXh0LiBUaGUgcmVzdWx0aW5nCisgKiBleGNlcHRpb24gZGVzY3JpcHRpb24gbG9va3MgbGlrZToKKyAqCisgKiAgICAgcHJlZml4IChleGNfdHlwZTogb3JpZ2luYWxfZXhjX3N0cikKKyAqCisgKiBPbmx5IHNvbWUgZXhjZXB0aW9ucyBjYW4gYmUgc2FmZWx5IHJlcGxhY2VkLiBJZiB0aGUgZnVuY3Rpb24gZGV0ZXJtaW5lcworICogaXQgaXNuJ3Qgc2FmZSB0byBwZXJmb3JtIHRoZSByZXBsYWNlbWVudCwgaXQgd2lsbCBsZWF2ZSB0aGUgb3JpZ2luYWwKKyAqIHVubW9kaWZpZWQgZXhjZXB0aW9uIGluIHBsYWNlLgorICoKKyAqIFJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gdGhlIG5ldyBleGNlcHRpb24gKGlmIGFueSksIE5VTEwgaWYgdGhlCisgKiBleGlzdGluZyBleGNlcHRpb24gd2FzIGxlZnQgaW4gcGxhY2UuCisgKi8KK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5RXJyX1RyeVNldEZyb21DYXVzZSgKKyAgICBjb25zdCBjaGFyICpwcmVmaXhfZm9ybWF0LCAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLworICAgIC4uLgorICAgICk7CisjZW5kaWYKKworCiAvKiBJbiBzaWdjaGVjay5jIG9yIHNpZ25hbG1vZHVsZS5jICovCiBQeUFQSV9GVU5DKGludCkgUHlFcnJfQ2hlY2tTaWduYWxzKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRJbnRlcnJ1cHQodm9pZCk7CkBAIC0zMDEsOSArMzI0LDE2IEBACiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGludCBsaW5lbm8sCiAgICAgaW50IGNvbF9vZmZzZXQpOworUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdCgKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubywKKyAgICBpbnQgY29sX29mZnNldCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1Byb2dyYW1UZXh0KAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgbGluZW5vKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBsaW5lbm8pOwogCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIG1vZGlmeSB1bmljb2RlCiAgICBleGNlcHRpb25zIGZyb20gQyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWhhc2guaCBiL0luY2x1ZGUvcHloYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjOTI4MQotLS0gL2Rldi9udWxsCisrKyBiL0luY2x1ZGUvcHloYXNoLmgKQEAgLTAsMCArMSwxNDcgQEAKKyNpZm5kZWYgUHlfSEFTSF9ICisKKyNkZWZpbmUgUHlfSEFTSF9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXMoY29uc3Qgdm9pZCosIFB5X3NzaXplX3QpOworI2VuZGlmCisKKy8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLworI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCisKKy8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKKyAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KKyAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCisKKyNpZiBTSVpFT0ZfVk9JRF9QID49IDgKKyMgIGRlZmluZSBfUHlIQVNIX0JJVFMgNjEKKyNlbHNlCisjICBkZWZpbmUgX1B5SEFTSF9CSVRTIDMxCisjZW5kaWYKKworI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCisjZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQorI2RlZmluZSBfUHlIQVNIX05BTiAwCisjZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKKworCisvKiBoYXNoIHNlY3JldAorICoKKyAqIG1lbW9yeSBsYXlvdXQgb24gNjQgYml0IHN5c3RlbXMKKyAqICAgY2NjY2NjY2MgY2NjY2NjY2MgY2NjY2NjY2MgIHVjIC0tIHVuc2lnbmVkIGNoYXJbMjRdCisgKiAgIHBwcHBwcHBwIHNzc3Nzc3NzIC4uLi4uLi4uICBmbnYgLS0gdHdvIFB5X2hhc2hfdAorICogICBrMGswazBrMCBrMWsxazFrMSAuLi4uLi4uLiAgc2lwaGFzaCAtLSB0d28gUFlfVUlOVDY0X1QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gc3Nzc3Nzc3MgIGRqYngzM2EgLS0gMTYgYnl0ZXMgcGFkZGluZyArIG9uZSBQeV9oYXNoX3QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gZWVlZWVlZWUgIHB5ZXhwYXQgWE1MIGhhc2ggc2FsdAorICoKKyAqIG1lbW9yeSBsYXlvdXQgb24gMzIgYml0IHN5c3RlbXMKKyAqICAgY2NjY2NjY2MgY2NjY2NjY2MgY2NjY2NjY2MgIHVjCisgKiAgIHBwcHBzc3NzIC4uLi4uLi4uIC4uLi4uLi4uICBmbnYgLS0gdHdvIFB5X2hhc2hfdAorICogICBrMGswazBrMCBrMWsxazFrMSAuLi4uLi4uLiAgc2lwaGFzaCAtLSB0d28gUFlfVUlOVDY0X1QgKCopCisgKiAgIC4uLi4uLi4uIC4uLi4uLi4uIHNzc3MuLi4uICBkamJ4MzNhIC0tIDE2IGJ5dGVzIHBhZGRpbmcgKyBvbmUgUHlfaGFzaF90CisgKiAgIC4uLi4uLi4uIC4uLi4uLi4uIGVlZWUuLi4uICBweWV4cGF0IFhNTCBoYXNoIHNhbHQKKyAqCisgKiAoKikgVGhlIHNpcGhhc2ggbWVtYmVyIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIDMyIGJpdCBwbGF0Zm9ybXMgd2l0aG91dAorICogICAgIGFuIHVuc2lnbmVkIGludDY0IGRhdGEgdHlwZS4KKyAqLwordHlwZWRlZiB1bmlvbiB7CisgICAgLyogZW5zdXJlIDI0IGJ5dGVzICovCisgICAgdW5zaWduZWQgY2hhciB1Y1syNF07CisgICAgLyogdHdvIFB5X2hhc2hfdCBmb3IgRk5WICovCisgICAgc3RydWN0IHsKKyAgICAgICAgUHlfaGFzaF90IHByZWZpeDsKKyAgICAgICAgUHlfaGFzaF90IHN1ZmZpeDsKKyAgICB9IGZudjsKKyNpZmRlZiBQWV9VSU5UNjRfVAorICAgIC8qIHR3byB1aW50NjQgZm9yIFNpcEhhc2gyNCAqLworICAgIHN0cnVjdCB7CisgICAgICAgIFBZX1VJTlQ2NF9UIGswOworICAgICAgICBQWV9VSU5UNjRfVCBrMTsKKyAgICB9IHNpcGhhc2g7CisjZW5kaWYKKyAgICAvKiBhIGRpZmZlcmVudCAoISkgUHlfaGFzaF90IGZvciBzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uICovCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwYWRkaW5nWzE2XTsKKyAgICAgICAgUHlfaGFzaF90IHN1ZmZpeDsKKyAgICB9IGRqYngzM2E7CisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwYWRkaW5nWzE2XTsKKyAgICAgICAgUHlfaGFzaF90IGhhc2hzYWx0OworICAgIH0gZXhwYXQ7Cit9IF9QeV9IYXNoU2VjcmV0X3Q7CitQeUFQSV9EQVRBKF9QeV9IYXNoU2VjcmV0X3QpIF9QeV9IYXNoU2VjcmV0OworCisjaWZkZWYgUHlfREVCVUcKK1B5QVBJX0RBVEEoaW50KSBfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZDsKKyNlbmRpZgorCisKKy8qIGhhc2ggZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X2hhc2hfdCAoKmNvbnN0IGhhc2gpKGNvbnN0IHZvaWQgKiwgUHlfc3NpemVfdCk7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBpbnQgaGFzaF9iaXRzOworICAgIGNvbnN0IGludCBzZWVkX2JpdHM7Cit9IFB5SGFzaF9GdW5jRGVmOworCitQeUFQSV9GVU5DKFB5SGFzaF9GdW5jRGVmKikgUHlIYXNoX0dldEZ1bmNEZWYodm9pZCk7CisjZW5kaWYKKworCisvKiBjdXRvZmYgZm9yIHNtYWxsIHN0cmluZyBESkJYMzNBIG9wdGltaXphdGlvbiBpbiByYW5nZSBbMSwgY3V0b2ZmKS4KKyAqCisgKiBBYm91dCA1MCUgb2YgdGhlIHN0cmluZ3MgaW4gYSB0eXBpY2FsIFB5dGhvbiBhcHBsaWNhdGlvbiBhcmUgc21hbGxlciB0aGFuCisgKiA2IHRvIDcgY2hhcnMuIEhvd2V2ZXIgREpCWDMzQSBpcyB2dWxuZXJhYmxlIHRvIGhhc2ggY29sbGlzaW9uIGF0dGFja3MuCisgKiBORVZFUiB1c2UgREpCWDMzQSBmb3IgbG9uZyBzdHJpbmdzIQorICoKKyAqIEEgUHlfSEFTSF9DVVRPRkYgb2YgMCBkaXNhYmxlcyBzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uLiAzMiBiaXQgcGxhdGZvcm1zCisgKiBzaG91bGQgdXNlIGEgc21hbGxlciBjdXRvZmYgYmVjYXVzZSBpdCBpcyBlYXNpZXIgdG8gY3JlYXRlIGNvbGxpZGluZworICogc3RyaW5ncy4gQSBjdXRvZmYgb2YgNyBvbiA2NGJpdCBwbGF0Zm9ybXMgYW5kIDUgb24gMzJiaXQgcGxhdGZvcm1zIHNob3VsZAorICogcHJvdmlkZSBhIGRlY2VudCBzYWZldHkgbWFyZ2luLgorICovCisjaWZuZGVmIFB5X0hBU0hfQ1VUT0ZGCisjICBkZWZpbmUgUHlfSEFTSF9DVVRPRkYgMAorI2VsaWYgKFB5X0hBU0hfQ1VUT0ZGID4gNyB8fCBQeV9IQVNIX0NVVE9GRiA8IDApCisjICBlcnJvciBQeV9IQVNIX0NVVE9GRiBtdXN0IGluIHJhbmdlIDAuLi43LgorI2VuZGlmIC8qIFB5X0hBU0hfQ1VUT0ZGICovCisKKworLyogaGFzaCBhbGdvcml0aG0gc2VsZWN0aW9uCisgKgorICogVGhlIHZhbHVlcyBmb3IgUHlfSEFTSF9TSVBIQVNIMjQgYW5kIFB5X0hBU0hfRk5WIGFyZSBoYXJkLWNvZGVkIGluIHRoZQorICogY29uZmlndXJlIHNjcmlwdC4KKyAqCisgKiAtIEZOViBpcyBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3JtcyBhbmQgYXJjaGl0ZWN0dXJlcy4KKyAqIC0gU0lQSEFTSDI0IG9ubHkgd29ya3Mgb24gcGxhZm9ybXMgdGhhdCBwcm92aWRlIFBZX1VJTlQ2NF9UIGFuZCBkb2Vzbid0CisgKiAgIHJlcXVpcmUgYWxpZ25lZCBtZW1vcnkgZm9yIGludGVnZXJzLgorICogLSBXaXRoIEVYVEVSTkFMIGVtYmVkZGVycyBjYW4gcHJvdmlkZSBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB3aXRoOjoKKyAqCisgKiAgICAgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmMgPSB7Li4ufTsKKyAqCisgKiBYWFg6IEZpZ3VyZSBvdXQgX19kZWNsc3BlYygpIGZvciBleHRlcm4gUHlIYXNoX0Z1bmNEZWYuCisgKi8KKyNkZWZpbmUgUHlfSEFTSF9FWFRFUk5BTCAwCisjZGVmaW5lIFB5X0hBU0hfU0lQSEFTSDI0IDEKKyNkZWZpbmUgUHlfSEFTSF9GTlYgMgorCisjaWZuZGVmIFB5X0hBU0hfQUxHT1JJVEhNCisjICBpZiAoZGVmaW5lZChQWV9VSU5UNjRfVCkgJiYgZGVmaW5lZChQWV9VSU5UMzJfVCkgXAorICAgICAgICYmICFkZWZpbmVkKEhBVkVfQUxJR05FRF9SRVFVSVJFRCkpCisjICAgIGRlZmluZSBQeV9IQVNIX0FMR09SSVRITSBQeV9IQVNIX1NJUEhBU0gyNAorIyAgZWxzZQorIyAgICBkZWZpbmUgUHlfSEFTSF9BTEdPUklUSE0gUHlfSEFTSF9GTlYKKyMgIGVuZGlmIC8qIHVpbnQ2NF90ICYmIHVpbnQzMl90ICYmIGFsaWduZWQgKi8KKyNlbmRpZiAvKiBQeV9IQVNIX0FMR09SSVRITSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogIVB5X0hBU0hfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weW1lbS5oIGIvSW5jbHVkZS9weW1lbS5oCmluZGV4IDEwYjViZWEuLjgzZjE1MzcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHltZW0uaAorKysgYi9JbmNsdWRlL3B5bWVtLmgKQEAgLTExLDYgKzExLDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBzaXplKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fUmF3RnJlZSh2b2lkICpwdHIpOworCisKIC8qIEJFV0FSRToKIAogICAgRWFjaCBpbnRlcmZhY2UgZXhwb3J0cyBib3RoIGZ1bmN0aW9ucyBhbmQgbWFjcm9zLiAgRXh0ZW5zaW9uIG1vZHVsZXMgc2hvdWxkCkBAIC00OSwyMSArNTQsMTQgQEAKICAgIHBlcmZvcm1lZCBvbiBmYWlsdXJlIChubyBleGNlcHRpb24gaXMgc2V0LCBubyB3YXJuaW5nIGlzIHByaW50ZWQsIGV0YykuCiAqLwogCi1QeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fTWFsbG9jKHNpemVfdCk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fUmVhbGxvYyh2b2lkICosIHNpemVfdCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5TWVtX0ZyZWUodm9pZCAqKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9NYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9GcmVlKHZvaWQgKnB0cik7CiAKLS8qIFN0YXJ0aW5nIGZyb20gUHl0aG9uIDEuNiwgdGhlIHdyYXBwZXJzIFB5X3tNYWxsb2MsUmVhbGxvYyxGcmVlfSBhcmUKLSAgIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFRoZXkgdXNlZCB0byBjYWxsIFB5RXJyX05vTWVtb3J5KCkgb24gZmFpbHVyZS4gKi8KK1B5QVBJX0ZVTkMoY2hhciAqKSBfUHlNZW1fUmF3U3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7CitQeUFQSV9GVU5DKGNoYXIgKikgX1B5TWVtX1N0cmR1cChjb25zdCBjaGFyICpzdHIpOwogCiAvKiBNYWNyb3MuICovCi0jaWZkZWYgUFlNQUxMT0NfREVCVUcKLS8qIFJlZGlyZWN0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyB0byBQeXRob24ncyBkZWJ1Z2dpbmcgYWxsb2NhdG9yLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MJCV9QeU1lbV9EZWJ1Z01hbGxvYwotI2RlZmluZSBQeU1lbV9SRUFMTE9DCQlfUHlNZW1fRGVidWdSZWFsbG9jCi0jZGVmaW5lIFB5TWVtX0ZSRUUJCV9QeU1lbV9EZWJ1Z0ZyZWUKLQotI2Vsc2UJLyogISBQWU1BTExPQ19ERUJVRyAqLwogCiAvKiBQeU1lbV9NQUxMT0MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zCkBAIC03MSwxMyArNjksOSBAQAogICAgcHltYWxsb2MuIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLwogLyogUmV0dXJucyBOVUxMIHRvIGluZGljYXRlIGVycm9yIGlmIGEgbmVnYXRpdmUgc2l6ZSBvciBzaXplIGxhcmdlciB0aGFuCiAgICBQeV9zc2l6ZV90IGNhbiByZXByZXNlbnQgaXMgc3VwcGxpZWQuICBIZWxwcyBwcmV2ZW50cyBzZWN1cml0eSBob2xlcy4gKi8KLSNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pCQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYID8gTlVMTCBcCi0JCQkJOiBtYWxsb2MoKG4pID8gKG4pIDogMSkpCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikJKChzaXplX3QpKG4pID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAgPyBOVUxMIFwKLQkJCQk6IHJlYWxsb2MoKHApLCAobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fRlJFRQkJZnJlZQotCi0jZW5kaWYJLyogUFlNQUxMT0NfREVCVUcgKi8KKyNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pICAgICAgICAgUHlNZW1fTWFsbG9jKG4pCisjZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikgICAgIFB5TWVtX1JlYWxsb2MocCwgbikKKyNkZWZpbmUgUHlNZW1fRlJFRShwKSAgICAgICAgICAgUHlNZW1fRnJlZShwKQogCiAvKgogICogVHlwZS1vcmllbnRlZCBtZW1vcnkgaW50ZXJmYWNlCkBAIC0xMTUsNiArMTA5LDY5IEBACiAjZGVmaW5lIFB5TWVtX0RlbAkJUHlNZW1fRnJlZQogI2RlZmluZSBQeU1lbV9ERUwJCVB5TWVtX0ZSRUUKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBlbnVtIHsKKyAgICAvKiBQeU1lbV9SYXdNYWxsb2MoKSwgUHlNZW1fUmF3UmVhbGxvYygpIGFuZCBQeU1lbV9SYXdGcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fUkFXLAorCisgICAgLyogUHlNZW1fTWFsbG9jKCksIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX01FTSwKKworICAgIC8qIFB5T2JqZWN0X01hbGxvYygpLCBQeU9iamVjdF9SZWFsbG9jKCkgYW5kIFB5T2JqZWN0X0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9PQkoKK30gUHlNZW1BbGxvY2F0b3JEb21haW47CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgMyBmdW5jdGlvbnMgKi8KKyAgICB2b2lkICpjdHg7CisKKyAgICAvKiBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqbWFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKnJlYWxsb2MpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKmN0eCwgdm9pZCAqcHRyKTsKK30gUHlNZW1BbGxvY2F0b3I7CisKKy8qIEdldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKyAgIFRoZSBuZXcgYWxsb2NhdG9yIG11c3QgcmV0dXJuIGEgZGlzdGluY3Qgbm9uLU5VTEwgcG9pbnRlciB3aGVuIHJlcXVlc3RpbmcKKyAgIHplcm8gYnl0ZXMuCisKKyAgIEZvciB0aGUgUFlNRU1fRE9NQUlOX1JBVyBkb21haW4sIHRoZSBhbGxvY2F0b3IgbXVzdCBiZSB0aHJlYWQtc2FmZTogdGhlIEdJTAorICAgaXMgbm90IGhlbGQgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNhbGxlZC4KKworICAgSWYgdGhlIG5ldyBhbGxvY2F0b3IgaXMgbm90IGEgaG9vayAoZG9uJ3QgY2FsbCB0aGUgcHJldmlvdXMgYWxsb2NhdG9yKSwgdGhlCisgICBQeU1lbV9TZXR1cERlYnVnSG9va3MoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlIGRlYnVnIGhvb2tzCisgICBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0dXAgaG9va3MgdG8gZGV0ZWN0IGJ1Z3MgaW4gdGhlIGZvbGxvd2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRvcgorICAgZnVuY3Rpb25zOgorCisgICAtIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCksIFB5TWVtX1Jhd0ZyZWUoKQorICAgLSBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpLCBQeU1lbV9GcmVlKCkKKyAgIC0gUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpCisKKyAgIE5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdGhlIGJ5dGUgMHhDQiwgZnJlZWQgbWVtb3J5IGlzIGZpbGxlZAorICAgd2l0aCB0aGUgYnl0ZSAweERCLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogUHlPYmplY3RfRnJlZSgpIGNhbGxlZCBvbiBhIGJ1ZmZlciBhbGxvY2F0ZWQKKyAgICAgYnkgUHlNZW1fTWFsbG9jKCkKKyAgIC0gZGV0ZWN0IHdyaXRlIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIHVuZGVyZmxvdykKKyAgIC0gZGV0ZWN0IHdyaXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIG92ZXJmbG93KQorCisgICBUaGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIFB5dGhvbiBpcyBub3QgY29tcGlsZWQgaXMgZGVidWcgbW9kZS4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5cG9ydC5oIGIvSW5jbHVkZS9weXBvcnQuaAppbmRleCBhNWVkZWE5Li5jNzA2MjEzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5cG9ydC5oCisrKyBiL0luY2x1ZGUvcHlwb3J0LmgKQEAgLTE0NCwyMyArMTQ0LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLS8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLwotI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCi0KLS8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKLSAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KLSAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCi0KLSNpZiBTSVpFT0ZfVk9JRF9QID49IDgKLSNkZWZpbmUgX1B5SEFTSF9CSVRTIDYxCi0jZWxzZQotI2RlZmluZSBfUHlIQVNIX0JJVFMgMzEKLSNlbmRpZgotI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCi0jZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQotI2RlZmluZSBfUHlIQVNIX05BTiAwCi0jZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKLQogLyogdWludHB0cl90IGlzIHRoZSBDOVggbmFtZSBmb3IgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSBzdWNoIHRoYXQgYQogICogbGVnaXRpbWF0ZSB2b2lkKiBjYW4gYmUgY2FzdCB0byB1aW50cHRyX3QgYW5kIHRoZW4gYmFjayB0byB2b2lkKiBhZ2FpbgogICogd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLiAgU2ltaWxhcmx5IGZvciBpbnRwdHJfdCwgd3J0IGEgc2lnbmVkCkBAIC0xOTksMTAgKzE4MiwxOSBAQAogI2VuZGlmCiAKIC8qIFB5X2hhc2hfdCBpcyB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlci4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX0hBU0hfVCBTSVpFT0ZfU0laRV9UCiB0eXBlZGVmIFB5X3NzaXplX3QgUHlfaGFzaF90OwogLyogUHlfdWhhc2hfdCBpcyB0aGUgdW5zaWduZWQgZXF1aXZhbGVudCBuZWVkZWQgdG8gY2FsY3VsYXRlIG51bWVyaWMgaGFzaC4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX1VIQVNIX1QgU0laRU9GX1NJWkVfVAogdHlwZWRlZiBzaXplX3QgUHlfdWhhc2hfdDsKIAorLyogT25seSB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IG1heSBub3QgYmUgUFlfU1NJWkVfVF9DTEVBTi4gKi8KKyNpZmRlZiBQWV9TU0laRV9UX0NMRUFOCit0eXBlZGVmIFB5X3NzaXplX3QgUHlfc3NpemVfY2xlYW5fdDsKKyNlbHNlCit0eXBlZGVmIGludCBQeV9zc2l6ZV9jbGVhbl90OworI2VuZGlmCisKIC8qIExhcmdlc3QgcG9zc2libGUgdmFsdWUgb2Ygc2l6ZV90LgogICAgU0laRV9NQVggaXMgcGFydCBvZiBDOTksIHNvIGl0IG1pZ2h0IGJlIGRlZmluZWQgb24gc29tZQogICAgcGxhdGZvcm1zLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgKHNpemVfdCktMSBpcyBhIHBvcnRhYmxlCkBAIC0yMTksMTAgKzIxMSw2IEBACiAvKiBTbWFsbGVzdCBuZWdhdGl2ZSB2YWx1ZSBvZiB0eXBlIFB5X3NzaXplX3QuICovCiAjZGVmaW5lIFBZX1NTSVpFX1RfTUlOICgtUFlfU1NJWkVfVF9NQVgtMSkKIAotI2lmIFNJWkVPRl9QSURfVCA+IFNJWkVPRl9MT05HCi0jICAgZXJyb3IgIlB5dGhvbiBkb2Vzbid0IHN1cHBvcnQgc2l6ZW9mKHBpZF90KSA+IHNpemVvZihsb25nKSIKLSNlbmRpZgotCiAvKiBQWV9GT1JNQVRfU0laRV9UIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgbW9kaWZpZXIgZm9yIHVzZSBpbiBhIHByaW50ZgogICogZm9ybWF0IHRvIGNvbnZlcnQgYW4gYXJndW1lbnQgd2l0aCB0aGUgd2lkdGggb2YgYSBzaXplX3Qgb3IgUHlfc3NpemVfdC4KICAqIEM5OSBpbnRyb2R1Y2VkICJ6IiBmb3IgdGhpcyBwdXJwb3NlLCBidXQgbm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCB0aGF0OwpAQCAtMjY3LDcgKzI1NSw3IEBACiAgKi8KICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogIyAgIGlmbmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCi0jICAgICAgIGlmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyMgICAgICAgaWZkZWYgTVNfV0lORE9XUwogIyAgICAgICAgICAgZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkcgIkk2NCIKICMgICAgICAgZWxzZQogIyAgICAgICAgICAgZXJyb3IgIlRoaXMgcGxhdGZvcm0ncyBweWNvbmZpZy5oIG5lZWRzIHRvIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HIgpAQCAtMzkyLDE3ICszODAsMjAgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9IKQogI2luY2x1ZGUgPHN0YXQuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKQorI2lmbmRlZiBTX0lGTVQKIC8qIFZpc3VhbEFnZSBDL0MrKyBGYWlsZWQgdG8gRGVmaW5lIE1vdW50VHlwZSBGaWVsZCBpbiBzeXMvc3RhdC5oICovCi0jZGVmaW5lIFNfSUZNVCAoU19JRkRJUnxTX0lGQ0hSfFNfSUZSRUcpCisjZGVmaW5lIFNfSUZNVCAwMTcwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGTE5LCisvKiBXaW5kb3dzIGRvZXNuJ3QgZGVmaW5lIFNfSUZMTksgYnV0IHBvc2l4bW9kdWxlLmMgbWFwcworICogSU9fUkVQQVJTRV9UQUdfU1lNTElOSyB0byBTX0lGTE5LICovCisjICBkZWZpbmUgU19JRkxOSyAwMTIwMDAwCiAjZW5kaWYKIAogI2lmbmRlZiBTX0lTUkVHCkBAIC00MTMsNiArNDA0LDkgQEAKICNkZWZpbmUgU19JU0RJUih4KSAoKCh4KSAmIFNfSUZNVCkgPT0gU19JRkRJUikKICNlbmRpZgogCisjaWZuZGVmIFNfSVNDSFIKKyNkZWZpbmUgU19JU0NIUih4KSAoKCh4KSAmIFNfSUZNVCkgPT0gU19JRkNIUikKKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIC8qIE1vdmUgdGhpcyBkb3duIGhlcmUgc2luY2Ugc29tZSBDKysgI2luY2x1ZGUncyBkb24ndCBsaWtlIHRvIGJlIGluY2x1ZGVkCkBAIC04MzUsMTUgKzgyOSw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEFkZCBQeUFyZ19QYXJzZVR1cGxlIGZvcm1hdCB3aGVyZSBhdmFpbGFibGUuCi0gKi8KLSNpZmRlZiBIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRQotI2RlZmluZSBQeV9GT1JNQVRfUEFSU0VUVVBMRShmdW5jLHAxLHAyKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoZnVuYyxwMSxwMikpKQotI2Vsc2UKLSNkZWZpbmUgUHlfRk9STUFUX1BBUlNFVFVQTEUoZnVuYyxwMSxwMikKLSNlbmRpZgotCi0vKgogICogU3BlY2lmeSBhbGlnbm1lbnQgb24gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCBpdC4KICAqLwogI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKQEAgLTg4MSw0ICs4NjYsMTggQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBDb252ZW5pZW50IG1hY3JvcyB0byBkZWFsIHdpdGggZW5kaWFubmVzcyBvZiB0aGUgcGxhdGZvcm0uIFdPUkRTX0JJR0VORElBTiBpcworICogZGV0ZWN0ZWQgYnkgY29uZmlndXJlIGFuZCBkZWZpbmVkIGluIHB5Y29uZmlnLmguIFRoZSBjb2RlIGluIHB5Y29uZmlnLmgKKyAqIGFsc28gdGFrZXMgY2FyZSBvZiBBcHBsZSdzIHVuaXZlcnNhbCBidWlsZHMuCisgKi8KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBQWV9CSUdfRU5ESUFOIDEKKyNkZWZpbmUgUFlfTElUVExFX0VORElBTiAwCisjZWxzZQorI2RlZmluZSBQWV9CSUdfRU5ESUFOIDAKKyNkZWZpbmUgUFlfTElUVExFX0VORElBTiAxCisjZW5kaWYKKwogI2VuZGlmIC8qIFB5X1BZUE9SVF9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5c3RhdGUuaCBiL0luY2x1ZGUvcHlzdGF0ZS5oCmluZGV4IDIwMTdiMDIuLjA2YWY4MDggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlzdGF0ZS5oCisrKyBiL0luY2x1ZGUvcHlzdGF0ZS5oCkBAIC02OSw2ICs2OSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfdHMgewogICAgIC8qIFNlZSBQeXRob24vY2V2YWwuYyBmb3IgY29tbWVudHMgZXhwbGFpbmluZyBtb3N0IGZpZWxkcyAqLwogCisgICAgc3RydWN0IF90cyAqcHJldjsKICAgICBzdHJ1Y3QgX3RzICpuZXh0OwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwogCkBAIC05OSwxNiArMTAwLDYgQEAKIAogICAgIFB5T2JqZWN0ICpkaWN0OyAgLyogU3RvcmVzIHBlci10aHJlYWQgc3RhdGUgKi8KIAotICAgIC8qIFhYWCBkb2Vzbid0IG1lYW4gYW55dGhpbmcgYW55bW9yZSAodGhlIGNvbW1lbnQgYmVsb3cgaXMgb2Jzb2xldGUpCi0gICAgICAgPT4gZGVwcmVjYXRlIG9yIHJlbW92ZT8gKi8KLSAgICAvKiB0aWNrX2NvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGNoZWNrX2ludGVydmFsIHRpY2tlcgotICAgICAqIHJlYWNoZXMgemVyby4gVGhlIHB1cnBvc2UgaXMgdG8gZ2l2ZSBhIHVzZWZ1bCBtZWFzdXJlIG9mIHRoZSBudW1iZXIKLSAgICAgKiBvZiBpbnRlcnByZXRlZCBieXRlY29kZSBpbnN0cnVjdGlvbnMgaW4gYSBnaXZlbiB0aHJlYWQuICBUaGlzCi0gICAgICogZXh0cmVtZWx5IGxpZ2h0d2VpZ2h0IHN0YXRpc3RpYyBjb2xsZWN0b3IgbWF5IGJlIG9mIGludGVyZXN0IHRvCi0gICAgICogcHJvZmlsZXJzIChsaWtlIHBzeWNvLmppdCgpKSwgYWx0aG91Z2ggbm90aGluZyBpbiB0aGUgY29yZSB1c2VzIGl0LgotICAgICAqLwotICAgIGludCB0aWNrX2NvdW50ZXI7Ci0KICAgICBpbnQgZ2lsc3RhdGVfY291bnRlcjsKIAogICAgIFB5T2JqZWN0ICphc3luY19leGM7IC8qIEFzeW5jaHJvbm91cyBleGNlcHRpb24gdG8gcmFpc2UgKi8KQEAgLTExNyw2ICsxMDgsMzIgQEAKICAgICBpbnQgdHJhc2hfZGVsZXRlX25lc3Rpbmc7CiAgICAgUHlPYmplY3QgKnRyYXNoX2RlbGV0ZV9sYXRlcjsKIAorICAgIC8qIENhbGxlZCB3aGVuIGEgdGhyZWFkIHN0YXRlIGlzIGRlbGV0ZWQgbm9ybWFsbHksIGJ1dCBub3Qgd2hlbiBpdAorICAgICAqIGlzIGRlc3Ryb3llZCBhZnRlciBmb3JrKCkuCisgICAgICogUGFpbjogIHRvIHByZXZlbnQgcmFyZSBidXQgZmF0YWwgc2h1dGRvd24gZXJyb3JzIChpc3N1ZSAxODgwOCksCisgICAgICogVGhyZWFkLmpvaW4oKSBtdXN0IHdhaXQgZm9yIHRoZSBqb2luJ2VkIHRocmVhZCdzIHRzdGF0ZSB0byBiZSB1bmxpbmtlZAorICAgICAqIGZyb20gdGhlIHRzdGF0ZSBjaGFpbi4gIFRoYXQgaGFwcGVucyBhdCB0aGUgZW5kIG9mIGEgdGhyZWFkJ3MgbGlmZSwKKyAgICAgKiBpbiBweXN0YXRlLmMuCisgICAgICogVGhlIG9idmlvdXMgd2F5IGRvZXNuJ3QgcXVpdGUgd29yazogIGNyZWF0ZSBhIGxvY2sgd2hpY2ggdGhlIHRzdGF0ZQorICAgICAqIHVubGlua2luZyBjb2RlIHJlbGVhc2VzLCBhbmQgaGF2ZSBUaHJlYWQuam9pbigpIHdhaXQgdG8gYWNxdWlyZSB0aGF0CisgICAgICogbG9jay4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgX2FyZV8gYXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZToKKyAgICAgKiBpZiB0aGUgdGhyZWFkIGhvbGRzIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgbG9jaywgZGVjcmVmJ2luZyB0aGUKKyAgICAgKiBsb2NrIHdpbGwgZGVsZXRlIHRoZSBsb2NrLCBhbmQgdGhhdCBtYXkgdHJpZ2dlciBhcmJpdHJhcnkgUHl0aG9uIGNvZGUKKyAgICAgKiBpZiB0aGVyZSdzIGEgd2Vha3JlZiwgd2l0aCBhIGNhbGxiYWNrLCB0byB0aGUgbG9jay4gIEJ1dCBieSB0aGlzIHRpbWUKKyAgICAgKiBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50IGlzIGFscmVhZHkgTlVMTCwgc28gb25seSB0aGUgc2ltcGxlc3Qgb2YgQyBjb2RlCisgICAgICogY2FuIGJlIGFsbG93ZWQgdG8gcnVuIChpbiBwYXJ0aWN1bGFyIGl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIHRvCisgICAgICogcmVsZWFzZSB0aGUgR0lMKS4KKyAgICAgKiBTbyBpbnN0ZWFkIG9mIGhvbGRpbmcgdGhlIGxvY2sgZGlyZWN0bHksIHRoZSB0c3RhdGUgaG9sZHMgYSB3ZWFrcmVmIHRvCisgICAgICogdGhlIGxvY2s6ICB0aGF0J3MgdGhlIHZhbHVlIG9mIG9uX2RlbGV0ZV9kYXRhIGJlbG93LiAgRGVjcmVmJ2luZyBhCisgICAgICogd2Vha3JlZiBpcyBoYXJtbGVzcy4KKyAgICAgKiBvbl9kZWxldGUgcG9pbnRzIHRvIF90aHJlYWRtb2R1bGUuYydzIHN0YXRpYyByZWxlYXNlX3NlbnRpbmVsKCkgZnVuY3Rpb24uCisgICAgICogQWZ0ZXIgdGhlIHRzdGF0ZSBpcyB1bmxpbmtlZCwgcmVsZWFzZV9zZW50aW5lbCBpcyBjYWxsZWQgd2l0aCB0aGUKKyAgICAgKiB3ZWFrcmVmLXRvLWxvY2sgKG9uX2RlbGV0ZV9kYXRhKSBhcmd1bWVudCwgYW5kIHJlbGVhc2Vfc2VudGluZWwgcmVsZWFzZXMKKyAgICAgKiB0aGUgaW5kaXJlY3RseSBoZWxkIGxvY2suCisgICAgICovCisgICAgdm9pZCAoKm9uX2RlbGV0ZSkodm9pZCAqKTsKKyAgICB2b2lkICpvbl9kZWxldGVfZGF0YTsKKwogICAgIC8qIFhYWCBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIGFsc28gYmUgaGVyZSAqLwogCiB9IFB5VGhyZWFkU3RhdGU7CkBAIC0xMzMsMTIgKzE1MCwxNiBAQAogUHlBUElfRlVOQyhpbnQpIFB5U3RhdGVfUmVtb3ZlTW9kdWxlKHN0cnVjdCBQeU1vZHVsZURlZiopOwogI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlTdGF0ZV9GaW5kTW9kdWxlKHN0cnVjdCBQeU1vZHVsZURlZiopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBfUHlTdGF0ZV9DbGVhck1vZHVsZXModm9pZCk7CisjZW5kaWYKIAogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIFB5VGhyZWFkU3RhdGVfTmV3KFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKTsKIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYyhQeUludGVycHJldGVyU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeVRocmVhZFN0YXRlX0luaXQoUHlUaHJlYWRTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRTdGF0ZV9DbGVhcihQeVRocmVhZFN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0RlbGV0ZShQeVRocmVhZFN0YXRlICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUdJTFN0YXRlX1JlaW5pdCh2b2lkKTsKQEAgLTIxMiw2ICsyMzMsMTEgQEAKICovCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUodm9pZCk7CiAKKy8qIEhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uIC0gcmV0dXJuIDEgaWYgdGhlIGN1cnJlbnQgdGhyZWFkCisgKiBjdXJyZW50bHkgaG9sZHMgdGhlIEdJTCwgMCBvdGhlcndpc2UKKyAqLworUHlBUElfRlVOQyhpbnQpIFB5R0lMU3RhdGVfQ2hlY2sodm9pZCk7CisKICNlbmRpZiAgIC8qICNpZmRlZiBXSVRIX1RIUkVBRCAqLwogCiAvKiBUaGUgaW1wbGVtZW50YXRpb24gb2Ygc3lzLl9jdXJyZW50X2ZyYW1lcygpICBSZXR1cm5zIGEgZGljdCBtYXBwaW5nCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5dGhvbnJ1bi5oIGIvSW5jbHVkZS9weXRob25ydW4uaAppbmRleCBlOGE1ODJkLi5jMzY0OTQ3IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKyBiL0luY2x1ZGUvcHl0aG9ucnVuLmgKQEAgLTI4LDYgKzI4LDE0IEBACiBQeUFQSV9GVU5DKHZvaWQpIFB5X1NldFB5dGhvbkhvbWUod2NoYXJfdCAqKTsKIFB5QVBJX0ZVTkMod2NoYXJfdCAqKSBQeV9HZXRQeXRob25Ib21lKHZvaWQpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisvKiBPbmx5IHVzZWQgYnkgYXBwbGljYXRpb25zIHRoYXQgZW1iZWQgdGhlIGludGVycHJldGVyIGFuZCBuZWVkIHRvCisgKiBvdmVycmlkZSB0aGUgc3RhbmRhcmQgZW5jb2RpbmcgZGV0ZXJtaW5hdGlvbiBtZWNoYW5pc20KKyAqLworUHlBUElfRlVOQyhpbnQpIFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworI2VuZGlmCisKIFB5QVBJX0ZVTkModm9pZCkgUHlfSW5pdGlhbGl6ZSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlfSW5pdGlhbGl6ZUV4KGludCk7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCkBAIC01NSw2ICs2MywxMCBAQAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKTsKK1B5QVBJX0ZVTkMoaW50KSBQeVJ1bl9JbnRlcmFjdGl2ZU9uZU9iamVjdCgKKyAgICBGSUxFICpmcCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncyk7CiBQeUFQSV9GVU5DKGludCkgUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoCiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwpAQCAtNjYsNiArNzgsMTIgQEAKICAgICBpbnQgc3RhcnQsCiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IHN0YXJ0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgUHlBcmVuYSAqYXJlbmEpOwogUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tRmlsZSgKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC03Niw2ICs5NCwxNiBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50ICplcnJjb2RlLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoCisgICAgRklMRSAqZnAsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGNvbnN0IGNoYXIqIGVuYywKKyAgICBpbnQgc3RhcnQsCisgICAgY2hhciAqcHMxLAorICAgIGNoYXIgKnBzMiwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIGludCAqZXJyY29kZSwKKyAgICBQeUFyZW5hICphcmVuYSk7CiAjZW5kaWYKIAogI2lmbmRlZiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZwpAQCAtMTE3LDExICsxNDUsMjAgQEAKICAgICBpbnQgc3RhcnQsCiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgb3B0aW1pemUpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeV9Db21waWxlU3RyaW5nT2JqZWN0KAorICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIGludCBvcHRpbWl6ZSk7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoc3RydWN0IHN5bXRhYmxlICopIFB5X1N5bXRhYmxlU3RyaW5nKAogICAgIGNvbnN0IGNoYXIgKnN0ciwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IHN0YXJ0KTsKK1B5QVBJX0ZVTkMoc3RydWN0IHN5bXRhYmxlICopIFB5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KAorICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IHN0YXJ0KTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9QcmludCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfUHJpbnRFeChpbnQpOwpAQCAtMTk3LDcgKzIzNCw3IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeUV4Y19Jbml0KFB5T2JqZWN0ICogYmx0aW5tb2QpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRIb29rc19Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIF9QeUZyYW1lX0luaXQodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeUZsb2F0X0luaXQodm9pZCk7CitQeUFQSV9GVU5DKGludCkgX1B5RmxvYXRfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVBcnJheV9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlSYW5kb21fSW5pdCh2b2lkKTsKICNlbmRpZgpAQCAtMjE3LDE5ICsyNTQsMjEgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlCeXRlQXJyYXlfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGbG9hdF9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeU9TX0ZpbmlJbnRlcnJ1cHRzKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0NfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTbGljZV9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlUeXBlX0Zpbmkodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9GaW5pKHZvaWQpOwogCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUgKikgX1B5X0ZpbmFsaXppbmc7CiAjZW5kaWYKIAogLyogU3R1ZmYgd2l0aCBubyBwcm9wZXIgaG9tZSAoeWV0KSAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitQeUFQSV9GVU5DKGNoYXIgKikgUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKICNlbmRpZgogUHlBUElfREFUQShpbnQpICgqUHlPU19JbnB1dEhvb2spKHZvaWQpOwotUHlBUElfREFUQShjaGFyKSAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK1B5QVBJX0RBVEEoY2hhcikgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUqKSBfUHlPU19SZWFkbGluZVRTdGF0ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zZXRvYmplY3QuaCBiL0luY2x1ZGUvc2V0b2JqZWN0LmgKaW5kZXggYTE0ODc0Yi4uYWUzZjU1NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zZXRvYmplY3QuaAorKysgYi9JbmNsdWRlL3NldG9iamVjdC5oCkBAIC0yMyw4ICsyMyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICAvKiBDYWNoZWQgaGFzaCBjb2RlIG9mIHRoZSBrZXkuICovCi0gICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeV9oYXNoX3QgaGFzaDsKIH0gc2V0ZW50cnk7CiAKIApAQCAtNTEsOSArNTEsOSBAQAogICAgICAqLwogICAgIHNldGVudHJ5ICp0YWJsZTsKICAgICBzZXRlbnRyeSAqKCpsb29rdXApKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpOworICAgIFB5X2hhc2hfdCBoYXNoOyAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KICAgICBzZXRlbnRyeSBzbWFsbHRhYmxlW1B5U2V0X01JTlNJWkVdOwogCi0gICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGJ5IGZyb3plbnNldCBvYmplY3RzICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAgICAgIC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9OwogI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCkBAIC02MSw2ICs2MSwxMCBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0X1R5cGU7CiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlGcm96ZW5TZXRfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVNldEl0ZXJfVHlwZTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgX1B5U2V0X0R1bW15OworI2VuZGlmCisKIAogLyogSW52YXJpYW50cyBmb3IgZnJvemVuc2V0czoKICAqICAgICBkYXRhIGlzIGltbXV0YWJsZS4KQEAgLTEwMSw3ICsxMDUsNiBAQAogUHlBUElfRlVOQyhpbnQpIF9QeVNldF9VcGRhdGUoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKml0ZXJhYmxlKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5U2V0X0NsZWFyRnJlZUxpc3Qodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL3NsaWNlb2JqZWN0LmggYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKaW5kZXggOGJlYzE3OS4uZjdlZTkwYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zbGljZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvc2xpY2VvYmplY3QuaApAQCAtMzQsNiArMzQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzdGVwKTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U2xpY2VfRnJvbUluZGljZXMoUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBzdG9wKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydF9wdHIsIFB5T2JqZWN0ICoqc3RvcF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0ZXBfcHRyKTsKICNlbmRpZgogUHlBUElfRlVOQyhpbnQpIFB5U2xpY2VfR2V0SW5kaWNlcyhQeU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXApOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaCBiL0luY2x1ZGUvc3RydWN0c2VxLmgKaW5kZXggMzBjNTJhYy4uYWYyMjcxNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaAorKysgYi9JbmNsdWRlL3N0cnVjdHNlcS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CitQeUFQSV9GVU5DKGludCkgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoUHlUeXBlT2JqZWN0ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlUeXBlT2JqZWN0KikgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlKFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3ltdGFibGUuaCBiL0luY2x1ZGUvc3ltdGFibGUuaAppbmRleCA2ZWQzYTJiLi4xY2ZkODg0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5bXRhYmxlLmgKKysrIGIvSW5jbHVkZS9zeW10YWJsZS5oCkBAIC0xNiw3ICsxNiw3IEBACiBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5OwogCiBzdHJ1Y3Qgc3ltdGFibGUgewotICAgIGNvbnN0IGNoYXIgKnN0X2ZpbGVuYW1lOyAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAorICAgIFB5T2JqZWN0ICpzdF9maWxlbmFtZTsgICAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgc3RydWN0IF9zeW10YWJsZV9lbnRyeSAqc3RfY3VyOyAvKiBjdXJyZW50IHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIHN0cnVjdCBfc3ltdGFibGVfZW50cnkgKnN0X3RvcDsgLyogc3ltYm9sIHRhYmxlIGVudHJ5IGZvciBtb2R1bGUgKi8KQEAgLTQxLDYgKzQxLDcgQEAKICAgICBQeU9iamVjdCAqc3RlX25hbWU7ICAgICAgLyogc3RyaW5nOiBuYW1lIG9mIGN1cnJlbnQgYmxvY2sgKi8KICAgICBQeU9iamVjdCAqc3RlX3Zhcm5hbWVzOyAgLyogbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCiAgICAgUHlPYmplY3QgKnN0ZV9jaGlsZHJlbjsgIC8qIGxpc3Qgb2YgY2hpbGQgYmxvY2tzICovCisgICAgUHlPYmplY3QgKnN0ZV9kaXJlY3RpdmVzOy8qIGxvY2F0aW9ucyBvZiBnbG9iYWwgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMgKi8KICAgICBfUHlfYmxvY2tfdHkgc3RlX3R5cGU7ICAgLyogbW9kdWxlLCBjbGFzcywgb3IgZnVuY3Rpb24gKi8KICAgICBpbnQgc3RlX3Vub3B0aW1pemVkOyAgICAgLyogZmFsc2UgaWYgbmFtZXNwYWNlIGlzIG9wdGltaXplZCAqLwogICAgIGludCBzdGVfbmVzdGVkOyAgICAgIC8qIHRydWUgaWYgYmxvY2sgaXMgbmVzdGVkICovCkBAIC01Miw2ICs1Myw5IEBACiAgICAgdW5zaWduZWQgc3RlX3ZhcmtleXdvcmRzIDogMTsgLyogdHJ1ZSBpZiBibG9jayBoYXMgdmFya2V5d29yZHMgKi8KICAgICB1bnNpZ25lZCBzdGVfcmV0dXJuc192YWx1ZSA6IDE7ICAvKiB0cnVlIGlmIG5hbWVzcGFjZSB1c2VzIHJldHVybiB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJndW1lbnQgKi8KKyAgICB1bnNpZ25lZCBzdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA6IDE7IC8qIGZvciBjbGFzcyBzY29wZXMsIHRydWUgaWYgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc3VyZSBvdmVyIF9fY2xhc3NfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGNyZWF0ZWQgKi8KICAgICBpbnQgc3RlX2xpbmVubzsgICAgICAgICAgLyogZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfY29sX29mZnNldDsgICAgICAvKiBvZmZzZXQgb2YgZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfb3B0X2xpbmVubzsgICAgICAvKiBsaW5lbm8gb2YgbGFzdCBleGVjIG9yIGltcG9ydCAqICovCkBAIC03MCw2ICs3NCwxMCBAQAogICAgIG1vZF90eSBtb2QsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CitQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KAorICAgIG1vZF90eSBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CiBQeUFQSV9GVU5DKFB5U1RFbnRyeU9iamVjdCAqKSBQeVN5bXRhYmxlX0xvb2t1cChzdHJ1Y3Qgc3ltdGFibGUgKiwgdm9pZCAqKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeVN5bXRhYmxlX0ZyZWUoc3RydWN0IHN5bXRhYmxlICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zeXNtb2R1bGUuaCBiL0luY2x1ZGUvc3lzbW9kdWxlLmgKaW5kZXggMGNhYmY2Zi4uOTI1YzJhMyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zeXNtb2R1bGUuaAorKysgYi9JbmNsdWRlL3N5c21vZHVsZS5oCkBAIC04LDcgKzgsMTAgQEAKICNlbmRpZgogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3lzX0dldE9iamVjdChjb25zdCBjaGFyICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTeXNfR2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSk7CiBQeUFQSV9GVU5DKGludCkgUHlTeXNfU2V0T2JqZWN0KGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgX1B5U3lzX1NldE9iamVjdElkKF9QeV9JZGVudGlmaWVyICprZXksIFB5T2JqZWN0ICopOworCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3lzX1NldEFyZ3YoaW50LCB3Y2hhcl90ICoqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0QXJndkV4KGludCwgd2NoYXJfdCAqKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0UGF0aChjb25zdCB3Y2hhcl90ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90b2tlbi5oIGIvSW5jbHVkZS90b2tlbi5oCmluZGV4IGY3ZjY1MDQuLjkwNTAyMmIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdG9rZW4uaAorKysgYi9JbmNsdWRlL3Rva2VuLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNkZWZpbmUgSVNFT0YoeCkJCSgoeCkgPT0gRU5ETUFSS0VSKQogCiAKLVB5QVBJX0RBVEEoY2hhciAqKSBfUHlQYXJzZXJfVG9rZW5OYW1lc1tdOyAvKiBUb2tlbiBuYW1lcyAqLworUHlBUElfREFUQShjb25zdCBjaGFyICopIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW107IC8qIFRva2VuIG5hbWVzICovCiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9PbmVDaGFyKGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9Ud29DaGFycyhpbnQsIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9UaHJlZUNoYXJzKGludCwgaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmggYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAppbmRleCBhOGY1YjVkLi5iNmQzMzFiIDEwMDY0NAotLS0gYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAorKysgYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaApAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgfSB3aGlsZSAoMCkKIAogLyogbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzICovCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REZGRikKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSBjaCAmJiBjaCA8PSAweERCRkYpCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShjaCkgKDB4REMwMCA8PSBjaCAmJiBjaCA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REJGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGNoKSAoMHhEQzAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCiAvKiBKb2luIHR3byBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgcmV0dXJuIGEgc2luZ2xlIFB5X1VDUzQgdmFsdWUuICovCiAjZGVmaW5lIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTKGhpZ2gsIGxvdykgIFwKICAgICAoKCgoKFB5X1VDUzQpKGhpZ2gpICYgMHgwM0ZGKSA8PCAxMCkgfCAgICAgIFwKQEAgLTg1OSw3ICs4NTksNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqLCAgICAgLyogT2JqZWN0ICovCisgICAgUHlPYmplY3QgKm9iaiwgICAgICAgICAgICAgIC8qIE9iamVjdCAqLwogICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCAgICAgICAvKiBlbmNvZGluZyAqLwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CkBAIC04NzgsNyArODc4LDcgQEAKICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRnJvbU9iamVjdCgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCisgICAgUHlPYmplY3QgKm9iaiAgICAgIC8qIE9iamVjdCAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKApAQCAtODk4LDIyICs4OTgsMjggQEAKICAgICBQeV9VQ1M0IG1heGNoYXI7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5X3NzaXplX3QgcG9zOwotICAgIC8qIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgd2hlbiBvdmVyYWxsb2NhdGlvbiBpcyBlbmFibGVkLAotICAgICAgIHNlZSBfUHlVbmljb2RlV3JpdGVyX0luaXQoKSAqLworCisgICAgLyogbWluaW11bSBudW1iZXIgb2YgYWxsb2NhdGVkIGNoYXJhY3RlcnMgKGRlZmF1bHQ6IDApICovCiAgICAgUHlfc3NpemVfdCBtaW5fbGVuZ3RoOworCisgICAgLyogbWluaW11bSBjaGFyYWN0ZXIgKGRlZmF1bHQ6IDEyNywgQVNDSUkpICovCisgICAgUHlfVUNTNCBtaW5fY2hhcjsKKworICAgIC8qIElmIG5vbi16ZXJvLCBvdmVyYWxsb2NhdGUgdGhlIGJ1ZmZlciBieSAyNSUgKGRlZmF1bHQ6IDApLiAqLwogICAgIHVuc2lnbmVkIGNoYXIgb3ZlcmFsbG9jYXRlOworCiAgICAgLyogSWYgcmVhZG9ubHkgaXMgMSwgYnVmZmVyIGlzIGEgc2hhcmVkIHN0cmluZyAoY2Fubm90IGJlIG1vZGlmaWVkKQogICAgICAgIGFuZCBzaXplIGlzIHNldCB0byAwLiAqLwogICAgIHVuc2lnbmVkIGNoYXIgcmVhZG9ubHk7CiB9IF9QeVVuaWNvZGVXcml0ZXIgOwogCiAvKiBJbml0aWFsaXplIGEgVW5pY29kZSB3cml0ZXIuCi0KLSAgIElmIG1pbl9sZW5ndGggaXMgZ3JlYXRlciB0aGFuIHplcm8sIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgpCi0gICBvdmVyYWxsb2NhdGVzIHRoZSBidWZmZXIgYW5kIG1pbl9sZW5ndGggaXMgdGhlIG1pbmltdW0gbGVuZ3RoIGluIGNoYXJhY3RlcnMKLSAgIG9mIHRoZSBidWZmZXIuICovCisgKgorICogQnkgZGVmYXVsdCwgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgaXMgMCBjaGFyYWN0ZXIgYW5kIG92ZXJhbGxvY2F0aW9uIGlzCisgKiBkaXNhYmxlZC4gU2V0IG1pbl9sZW5ndGgsIG1pbl9jaGFyIGFuZCBvdmVyYWxsb2NhdGUgYXR0cmlidXRlcyB0byBjb250cm9sCisgKiB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYnVmZmVyLiAqLwogUHlBUElfRlVOQyh2b2lkKQotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKTsKK19QeVVuaWNvZGVXcml0ZXJfSW5pdChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogCiAvKiBQcmVwYXJlIHRoZSBidWZmZXIgdG8gd3JpdGUgJ2xlbmd0aCcgY2hhcmFjdGVycwogICAgd2l0aCB0aGUgc3BlY2lmaWVkIG1heGltdW0gY2hhcmFjdGVyLgpAQCAtOTMzLDEyICs5MzksNTIgQEAKIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZUludGVybmFsKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuZ3RoLCBQeV9VQ1M0IG1heGNoYXIpOwogCisvKiBBcHBlbmQgYSBVbmljb2RlIGNoYXJhY3Rlci4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogUHlBUElfRlVOQyhpbnQpCi1fUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0cik7CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlfVUNTNCBjaAorICAgICk7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIFB5T2JqZWN0ICpzdHIgICAgICAgICAgICAgICAvKiBVbmljb2RlIHN0cmluZyAqLworICAgICk7CisKKy8qIEFwcGVuZCBhIHN1YnN0cmluZyBvZiBhIFVuaWNvZGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIFB5T2JqZWN0ICpzdHIsICAgICAgICAgICAgICAvKiBVbmljb2RlIHN0cmluZyAqLworICAgIFB5X3NzaXplX3Qgc3RhcnQsCisgICAgUHlfc3NpemVfdCBlbmQKKyAgICApOworCisvKiBBcHBlbmQgYSBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBieXRlIHN0cmluZyAqLworICAgIFB5X3NzaXplX3QgbGVuICAgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcywgb3IgLTEgaWYgdW5rbm93biAqLworICAgICk7CisKKy8qIEFwcGVuZCBhIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIGNvbnN0IGNoYXIgKnN0ciwgICAgICAgICAgIC8qIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgLyogbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgd3JpdGVyIGFzIGFuIFVuaWNvZGUgc3RyaW5nLiBDbGVhciB0aGUKKyAgIGJ1ZmZlciBvZiB0aGUgd3JpdGVyLiBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMCisgICBvbiBlcnJvci4gKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKKy8qIERlYWxsb2NhdGUgbWVtb3J5IG9mIGEgd3JpdGVyIChjbGVhciBpdHMgaW50ZXJuYWwgYnVmZmVyKS4gKi8KIFB5QVBJX0ZVTkModm9pZCkKIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogI2VuZGlmCkBAIC05NzcsNyArMTAyMyw3IEBACiAgICBUaGUgYnVmZmVyIGlzIGNvcGllZCBpbnRvIHRoZSBuZXcgb2JqZWN0LiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKLSAgICByZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LCAgLyogd2NoYXJfdCBidWZmZXIgKi8KKyAgICBjb25zdCB3Y2hhcl90ICp3LCAgICAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCkBAIC05OTUsNyArMTA0MSw3IEBACiAKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlVbmljb2RlX0FzV2lkZUNoYXIoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCi0gICAgcmVnaXN0ZXIgd2NoYXJfdCAqdywgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCisgICAgd2NoYXJfdCAqdywgICAgICAgICAgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBzaXplICAgICAgICAgICAgIC8qIHNpemUgb2YgYnVmZmVyICovCiAgICAgKTsKIApAQCAtMTcyNiw3ICsxNzcyLDcgQEAKIC8qIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHRvIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4gVGhlIGVuY29kZXIgaXMKICAgIHN0cmljdCBpcyAqc3Vycm9nYXRlZXNjYXBlKiBpcyBlcXVhbCB0byB6ZXJvLCBvdGhlcndpc2UgdGhlCiAgICAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyIGlzIHVzZWQuIFJldHVybiBhIGJ5dGVzIG9iamVjdC4gVGhlIHN0cmluZwotICAgY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLi4gKi8KKyAgIGNhbm5vdCBjb250YWluIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsCkBAIC0xOTUwLDEzICsxOTk2LDE5IEBACiAgICAgKTsKIAogLyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgcmV0dXJuIC0xLCAwLCAxIGZvciBsZXNzIHRoYW4sIGVxdWFsLAotICAgZ3JlYXRlciB0aGFuIHJlc3AuICovCisgICBncmVhdGVyIHRoYW4gcmVzcC4KKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogCiBQeUFQSV9GVU5DKGludCkgUHlVbmljb2RlX0NvbXBhcmUoCiAgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJpZ2h0ICAgICAgICAgICAgIC8qIFJpZ2h0IHN0cmluZyAqLwogICAgICk7CiAKK1B5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQoCisgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCisgICAgX1B5X0lkZW50aWZpZXIgKnJpZ2h0ICAgICAgIC8qIFJpZ2h0IGlkZW50aWZpZXIgKi8KKyAgICApOworCiBQeUFQSV9GVU5DKGludCkgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoCiAgICAgUHlPYmplY3QgKmxlZnQsCiAgICAgY29uc3QgY2hhciAqcmlnaHQgICAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3dhcm5pbmdzLmggYi9JbmNsdWRlL3dhcm5pbmdzLmgKaW5kZXggYjdkYjY4MS4uMjE3YzA2YSAxMDA2NDQKLS0tIGEvSW5jbHVkZS93YXJuaW5ncy5oCisrKyBiL0luY2x1ZGUvd2FybmluZ3MuaApAQCAtMTcsNiArMTcsMTMgQEAKICAgICBQeV9zc2l6ZV90IHN0YWNrX2xldmVsLAogICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgICAgICAgICAvKiBBU0NJSS1lbmNvZGVkIHN0cmluZyAgKi8KICAgICAuLi4pOworUHlBUElfRlVOQyhpbnQpIFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdCgKKyAgICBQeU9iamVjdCAqY2F0ZWdvcnksCisgICAgUHlPYmplY3QgKm1lc3NhZ2UsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBsaW5lbm8sCisgICAgUHlPYmplY3QgKm1vZHVsZSwKKyAgICBQeU9iamVjdCAqcmVnaXN0cnkpOwogUHlBUElfRlVOQyhpbnQpIFB5RXJyX1dhcm5FeHBsaWNpdCgKICAgICBQeU9iamVjdCAqY2F0ZWdvcnksCiAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCkBAIC0yNSw2ICszMiwxMiBAQAogICAgIGNvbnN0IGNoYXIgKm1vZHVsZSwgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpyZWdpc3RyeSk7CiAKK1B5QVBJX0ZVTkMoaW50KQorUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKIC8qIERFUFJFQ0FURUQ6IFVzZSBQeUVycl9XYXJuRXgoKSBpbnN0ZWFkLiAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUVycl9XYXJuKGNhdGVnb3J5LCBtc2cpIFB5RXJyX1dhcm5FeChjYXRlZ29yeSwgbXNnLCAxKQpkaWZmIC0tZ2l0IGEvTGliL19ib290bG9jYWxlLnB5IGIvTGliL19ib290bG9jYWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2NhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2Jvb3Rsb2NhbGUucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiQSBtaW5pbWFsIHN1YnNldCBvZiB0aGUgbG9jYWxlIG1vZHVsZSB1c2VkIGF0IGludGVycHJldGVyIHN0YXJ0dXAKKyhpbXBvcnRlZCBieSB0aGUgX2lvIG1vZHVsZSksIGluIG9yZGVyIHRvIHJlZHVjZSBzdGFydHVwIHRpbWUuCisKK0Rvbid0IGltcG9ydCBkaXJlY3RseSBmcm9tIHRoaXJkLXBhcnR5IGNvZGU7IHVzZSB0aGUgYGxvY2FsZWAgbW9kdWxlIGluc3RlYWQhCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IF9sb2NhbGUKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBfbG9jYWxlLl9nZXRkZWZhdWx0bG9jYWxlKClbMV0KK2Vsc2U6CisgICAgdHJ5OgorICAgICAgICBfbG9jYWxlLkNPREVTRVQKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgICAgICAjIFRoaXMgcGF0aCBmb3IgbGVnYWN5IHN5c3RlbXMgbmVlZHMgdGhlIG1vcmUgY29tcGxleAorICAgICAgICAgICAgIyBnZXRkZWZhdWx0bG9jYWxlKCkgZnVuY3Rpb24sIGltcG9ydCB0aGUgZnVsbCBsb2NhbGUgbW9kdWxlLgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgZG9fc2V0bG9jYWxlCisgICAgICAgICAgICByZXN1bHQgPSBfbG9jYWxlLm5sX2xhbmdpbmZvKF9sb2NhbGUuQ09ERVNFVCkKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZSBzZXR0aW5nIGhhcyBhbiBpbnZhbGlkIHZhbHVlLgorICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0byBVVEYtOCBpbiB0aGF0IGNhc2UgYmVjYXVzZQorICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCisgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcgbm90aGluZyB3aWxsIGNyYXNoIHRoZQorICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0ZXIuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL19jb2xsZWN0aW9uc19hYmMucHkgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWExZmYyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL19jb2xsZWN0aW9uc19hYmMucHkKQEAgLTAsMCArMSw3MzQgQEAKKyMgQ29weXJpZ2h0IDIwMDcgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKworIiIiQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBmb3IgY29sbGVjdGlvbnMsIGFjY29yZGluZyB0byBQRVAgMzExOS4KKworVW5pdCB0ZXN0cyBhcmUgaW4gdGVzdF9jb2xsZWN0aW9ucy4KKyIiIgorCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2ltcG9ydCBzeXMKKworX19hbGxfXyA9IFsiSGFzaGFibGUiLCAiSXRlcmFibGUiLCAiSXRlcmF0b3IiLAorICAgICAgICAgICAiU2l6ZWQiLCAiQ29udGFpbmVyIiwgIkNhbGxhYmxlIiwKKyAgICAgICAgICAgIlNldCIsICJNdXRhYmxlU2V0IiwKKyAgICAgICAgICAgIk1hcHBpbmciLCAiTXV0YWJsZU1hcHBpbmciLAorICAgICAgICAgICAiTWFwcGluZ1ZpZXciLCAiS2V5c1ZpZXciLCAiSXRlbXNWaWV3IiwgIlZhbHVlc1ZpZXciLAorICAgICAgICAgICAiU2VxdWVuY2UiLCAiTXV0YWJsZVNlcXVlbmNlIiwKKyAgICAgICAgICAgIkJ5dGVTdHJpbmciLAorICAgICAgICAgICBdCisKKyMgVGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVuYW1lZCBmcm9tIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIHRvCisjIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0dXAuIFNvbWUgb2YgdGhlIHR5cGVzIHN1Y2ggYXMgTXV0YWJsZU1hcHBpbmcgYXJlCisjIHJlcXVpcmVkIGVhcmx5IGJ1dCBjb2xsZWN0aW9ucyBtb2R1bGUgaW1wb3J0cyBhIGxvdCBvZiBvdGhlciBtb2R1bGVzLgorIyBTZWUgaXNzdWUgIzE5MjE4CitfX25hbWVfXyA9ICJjb2xsZWN0aW9ucy5hYmMiCisKKyMgUHJpdmF0ZSBsaXN0IG9mIHR5cGVzIHRoYXQgd2Ugd2FudCB0byByZWdpc3RlciB3aXRoIHRoZSB2YXJpb3VzIEFCQ3MKKyMgc28gdGhhdCB0aGV5IHdpbGwgcGFzcyB0ZXN0cyBsaWtlOgorIyAgICAgICBpdCA9IGl0ZXIoc29tZWJ5dGVhcnJheSkKKyMgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaXQsIEl0ZXJhYmxlKQorIyBOb3RlOiAgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGVzZSB0eXBlcyBtYW55IG5vdCBiZSBkaXN0aW5jdAorIyBhbmQgdGhleSBtYWtlIGhhdmUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHR5cGVzIHRoYXQKKyMgYXJlIG5vdCBpbmNsdWRlZCBvbiB0aGlzIGxpc3QuCitieXRlc19pdGVyYXRvciA9IHR5cGUoaXRlcihiJycpKQorYnl0ZWFycmF5X2l0ZXJhdG9yID0gdHlwZShpdGVyKGJ5dGVhcnJheSgpKSkKKyNjYWxsYWJsZV9pdGVyYXRvciA9ID8/PworZGljdF9rZXlpdGVyYXRvciA9IHR5cGUoaXRlcih7fS5rZXlzKCkpKQorZGljdF92YWx1ZWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LnZhbHVlcygpKSkKK2RpY3RfaXRlbWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9Lml0ZW1zKCkpKQorbGlzdF9pdGVyYXRvciA9IHR5cGUoaXRlcihbXSkpCitsaXN0X3JldmVyc2VpdGVyYXRvciA9IHR5cGUoaXRlcihyZXZlcnNlZChbXSkpKQorcmFuZ2VfaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmFuZ2UoMCkpKQorc2V0X2l0ZXJhdG9yID0gdHlwZShpdGVyKHNldCgpKSkKK3N0cl9pdGVyYXRvciA9IHR5cGUoaXRlcigiIikpCit0dXBsZV9pdGVyYXRvciA9IHR5cGUoaXRlcigoKSkpCit6aXBfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoemlwKCkpKQorIyMgdmlld3MgIyMKK2RpY3Rfa2V5cyA9IHR5cGUoe30ua2V5cygpKQorZGljdF92YWx1ZXMgPSB0eXBlKHt9LnZhbHVlcygpKQorZGljdF9pdGVtcyA9IHR5cGUoe30uaXRlbXMoKSkKKyMjIG1pc2MgIyMKK21hcHBpbmdwcm94eSA9IHR5cGUodHlwZS5fX2RpY3RfXykKKworCisjIyMgT05FLVRSSUNLIFBPTklFUyAjIyMKKworY2xhc3MgSGFzaGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBIYXNoYWJsZToKKyAgICAgICAgICAgIGZvciBCIGluIEMuX19tcm9fXzoKKyAgICAgICAgICAgICAgICBpZiAiX19oYXNoX18iIGluIEIuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIGlmIEIuX19kaWN0X19bIl9faGFzaF9fIl06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB3aGlsZSBGYWxzZToKKyAgICAgICAgICAgIHlpZWxkIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBJdGVyYWJsZToKKyAgICAgICAgICAgIGlmIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYXRvcihJdGVyYWJsZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAnUmV0dXJuIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgaXRlcmF0b3IuIFdoZW4gZXhoYXVzdGVkLCByYWlzZSBTdG9wSXRlcmF0aW9uJworICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgSXRlcmF0b3I6CisgICAgICAgICAgICBpZiAoYW55KCJfX25leHRfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pIGFuZAorICAgICAgICAgICAgICAgIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKK0l0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVzX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZWFycmF5X2l0ZXJhdG9yKQorI0l0ZXJhdG9yLnJlZ2lzdGVyKGNhbGxhYmxlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9rZXlpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfdmFsdWVpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfaXRlbWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfcmV2ZXJzZWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIocmFuZ2VfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzZXRfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzdHJfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3Rlcih0dXBsZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHppcF9pdGVyYXRvcikKKworY2xhc3MgU2l6ZWQobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIFNpemVkOgorICAgICAgICAgICAgaWYgYW55KCJfX2xlbl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ29udGFpbmVyKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBDb250YWluZXI6CisgICAgICAgICAgICBpZiBhbnkoIl9fY29udGFpbnNfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIENhbGxhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIENhbGxhYmxlOgorICAgICAgICAgICAgaWYgYW55KCJfX2NhbGxfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKKyMjIyBTRVRTICMjIworCisKK2NsYXNzIFNldChTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICAiIiJBIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXyBhbmQgX19sZW5fXy4KKworICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQorICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgcmVkZWZpbmUgX19sZV9fIGFuZAorICAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBpZiBsZW4oc2VsZikgPiBsZW4ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBlbGVtIGluIHNlbGY6CisgICAgICAgICAgICBpZiBlbGVtIG5vdCBpbiBvdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gbGVuKHNlbGYpIDwgbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG90aGVyLl9fbHRfXyhzZWxmKQorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBvdGhlci5fX2xlX18oc2VsZikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gbGVuKHNlbGYpID09IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoY2xzLCBpdCk6CisgICAgICAgICcnJ0NvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgZnJvbSBhbnkgaXRlcmFibGUgaW5wdXQuCisKKyAgICAgICAgTXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGUgY2xhc3MgY29uc3RydWN0b3Igc2lnbmF0dXJlCisgICAgICAgIGRvZXMgbm90IGFjY2VwdCBhbiBpdGVyYWJsZSBmb3IgYW4gaW5wdXQuCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gY2xzKGl0KQorCisgICAgZGVmIF9fYW5kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBvdGhlciBpZiB2YWx1ZSBpbiBzZWxmKQorCisgICAgZGVmIGlzZGlzam9pbnQoc2VsZiwgb3RoZXIpOgorICAgICAgICAnUmV0dXJuIFRydWUgaWYgdHdvIHNldHMgaGF2ZSBhIG51bGwgaW50ZXJzZWN0aW9uLicKKyAgICAgICAgZm9yIHZhbHVlIGluIG90aGVyOgorICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX29yX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGNoYWluID0gKGUgZm9yIHMgaW4gKHNlbGYsIG90aGVyKSBmb3IgZSBpbiBzKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZShjaGFpbikKKworICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gc2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBub3QgaW4gb3RoZXIpCisKKyAgICBkZWYgX194b3JfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIG90aGVyID0gc2VsZi5fZnJvbV9pdGVyYWJsZShvdGhlcikKKyAgICAgICAgcmV0dXJuIChzZWxmIC0gb3RoZXIpIHwgKG90aGVyIC0gc2VsZikKKworICAgIGRlZiBfaGFzaChzZWxmKToKKyAgICAgICAgIiIiQ29tcHV0ZSB0aGUgaGFzaCB2YWx1ZSBvZiBhIHNldC4KKworICAgICAgICBOb3RlIHRoYXQgd2UgZG9uJ3QgZGVmaW5lIF9faGFzaF9fOiBub3QgYWxsIHNldHMgYXJlIGhhc2hhYmxlLgorICAgICAgICBCdXQgaWYgeW91IGRlZmluZSBhIGhhc2hhYmxlIHNldCB0eXBlLCBpdHMgX19oYXNoX18gc2hvdWxkCisgICAgICAgIGNhbGwgdGhpcyBmdW5jdGlvbi4KKworICAgICAgICBUaGlzIG11c3QgYmUgY29tcGF0aWJsZSBfX2VxX18uCisKKyAgICAgICAgQWxsIHNldHMgb3VnaHQgdG8gY29tcGFyZSBlcXVhbCBpZiB0aGV5IGNvbnRhaW4gdGhlIHNhbWUKKyAgICAgICAgZWxlbWVudHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhbmQKKyAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzOyBzbyB0aGVyZSdzIG5vdCBtdWNoCisgICAgICAgIGZyZWVkb20gZm9yIF9fZXFfXyBvciBfX2hhc2hfXy4gIFdlIG1hdGNoIHRoZSBhbGdvcml0aG0gdXNlZAorICAgICAgICBieSB0aGUgYnVpbHQtaW4gZnJvemVuc2V0IHR5cGUuCisgICAgICAgICIiIgorICAgICAgICBNQVggPSBzeXMubWF4c2l6ZQorICAgICAgICBNQVNLID0gMiAqIE1BWCArIDEKKyAgICAgICAgbiA9IGxlbihzZWxmKQorICAgICAgICBoID0gMTkyNzg2ODIzNyAqIChuICsgMSkKKyAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGZvciB4IGluIHNlbGY6CisgICAgICAgICAgICBoeCA9IGhhc2goeCkKKyAgICAgICAgICAgIGggXj0gKGh4IF4gKGh4IDw8IDE2KSBeIDg5ODY5NzQ3KSAgKiAzNjQ0Nzk4MTY3CisgICAgICAgICAgICBoICY9IE1BU0sKKyAgICAgICAgaCA9IGggKiA2OTA2OSArIDkwNzEzMzkyMworICAgICAgICBoICY9IE1BU0sKKyAgICAgICAgaWYgaCA+IE1BWDoKKyAgICAgICAgICAgIGggLT0gTUFTSyArIDEKKyAgICAgICAgaWYgaCA9PSAtMToKKyAgICAgICAgICAgIGggPSA1OTA5MjM3MTMKKyAgICAgICAgcmV0dXJuIGgKKworU2V0LnJlZ2lzdGVyKGZyb3plbnNldCkKKworCitjbGFzcyBNdXRhYmxlU2V0KFNldCk6CisgICAgIiIiQSBtdXRhYmxlIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXywgX19sZW5fXywKKyAgICBhZGQoKSwgYW5kIGRpc2NhcmQoKS4KKworICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQorICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgcmVkZWZpbmUgX19sZV9fIGFuZAorICAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBhZGQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJBZGQgYW4gZWxlbWVudC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGRpc2NhcmQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gIERvIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYgYWJzZW50LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuIElmIG5vdCBhIG1lbWJlciwgcmFpc2UgYSBLZXlFcnJvci4iIiIKKyAgICAgICAgaWYgdmFsdWUgbm90IGluIHNlbGY6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcih2YWx1ZSkKKyAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorCisgICAgZGVmIHBvcChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwb3BwZWQgdmFsdWUuICBSYWlzZSBLZXlFcnJvciBpZiBlbXB0eS4iIiIKKyAgICAgICAgaXQgPSBpdGVyKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gbmV4dChpdCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJUaGlzIGlzIHNsb3cgKGNyZWF0ZXMgTiBuZXcgaXRlcmF0b3JzISkgYnV0IGVmZmVjdGl2ZS4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2lvcl9fKHNlbGYsIGl0KToKKyAgICAgICAgZm9yIHZhbHVlIGluIGl0OgorICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19pYW5kX18oc2VsZiwgaXQpOgorICAgICAgICBmb3IgdmFsdWUgaW4gKHNlbGYgLSBpdCk6CisgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19peG9yX18oc2VsZiwgaXQpOgorICAgICAgICBpZiBpdCBpcyBzZWxmOgorICAgICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdCwgU2V0KToKKyAgICAgICAgICAgICAgICBpdCA9IHNlbGYuX2Zyb21faXRlcmFibGUoaXQpCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faXN1Yl9fKHNlbGYsIGl0KToKKyAgICAgICAgaWYgaXQgaXMgc2VsZjoKKyAgICAgICAgICAgIHNlbGYuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgorICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworTXV0YWJsZVNldC5yZWdpc3RlcihzZXQpCisKKworIyMjIE1BUFBJTkdTICMjIworCisKK2NsYXNzIE1hcHBpbmcoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgICIiIkEgTWFwcGluZyBpcyBhIGdlbmVyaWMgY29udGFpbmVyIGZvciBhc3NvY2lhdGluZyBrZXkvdmFsdWUKKyAgICBwYWlycy4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fZ2V0aXRlbV9fLCBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICdELmdldChrWyxkXSkgLT4gRFtrXSBpZiBrIGluIEQsIGVsc2UgZC4gIGQgZGVmYXVsdHMgdG8gTm9uZS4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAiRC5rZXlzKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3Mga2V5cyIKKyAgICAgICAgcmV0dXJuIEtleXNWaWV3KHNlbGYpCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgICJELml0ZW1zKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgaXRlbXMiCisgICAgICAgIHJldHVybiBJdGVtc1ZpZXcoc2VsZikKKworICAgIGRlZiB2YWx1ZXMoc2VsZik6CisgICAgICAgICJELnZhbHVlcygpIC0+IGFuIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyB2YWx1ZXMiCisgICAgICAgIHJldHVybiBWYWx1ZXNWaWV3KHNlbGYpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIE1hcHBpbmcpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBkaWN0KHNlbGYuaXRlbXMoKSkgPT0gZGljdChvdGhlci5pdGVtcygpKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCisKK01hcHBpbmcucmVnaXN0ZXIobWFwcGluZ3Byb3h5KQorCisKK2NsYXNzIE1hcHBpbmdWaWV3KFNpemVkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBwaW5nKToKKyAgICAgICAgc2VsZi5fbWFwcGluZyA9IG1hcHBpbmcKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX21hcHBpbmcpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnezAuX19jbGFzc19fLl9fbmFtZV9ffSh7MC5fbWFwcGluZyFyfSknLmZvcm1hdChzZWxmKQorCisKK2NsYXNzIEtleXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKKyAgICAgICAgcmV0dXJuIHNldChpdCkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9tYXBwaW5nCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fbWFwcGluZworCitLZXlzVmlldy5yZWdpc3RlcihkaWN0X2tleXMpCisKKworY2xhc3MgSXRlbXNWaWV3KE1hcHBpbmdWaWV3LCBTZXQpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKKyAgICAgICAgcmV0dXJuIHNldChpdCkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CisgICAgICAgIGtleSwgdmFsdWUgPSBpdGVtCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHYgPSBzZWxmLl9tYXBwaW5nW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdiA9PSB2YWx1ZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICB5aWVsZCAoa2V5LCBzZWxmLl9tYXBwaW5nW2tleV0pCisKK0l0ZW1zVmlldy5yZWdpc3RlcihkaWN0X2l0ZW1zKQorCisKK2NsYXNzIFZhbHVlc1ZpZXcoTWFwcGluZ1ZpZXcpOgorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIGlmIHZhbHVlID09IHNlbGYuX21hcHBpbmdba2V5XToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgeWllbGQgc2VsZi5fbWFwcGluZ1trZXldCisKK1ZhbHVlc1ZpZXcucmVnaXN0ZXIoZGljdF92YWx1ZXMpCisKKworY2xhc3MgTXV0YWJsZU1hcHBpbmcoTWFwcGluZyk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgIiIiQSBNdXRhYmxlTWFwcGluZyBpcyBhIGdlbmVyaWMgY29udGFpbmVyIGZvciBhc3NvY2lhdGluZworICAgIGtleS92YWx1ZSBwYWlycy4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fZ2V0aXRlbV9fLCBfX3NldGl0ZW1fXywgX19kZWxpdGVtX18sCisgICAgX19pdGVyX18sIGFuZCBfX2xlbl9fLgorCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIF9fbWFya2VyID0gb2JqZWN0KCkKKworICAgIGRlZiBwb3Aoc2VsZiwga2V5LCBkZWZhdWx0PV9fbWFya2VyKToKKyAgICAgICAgJycnRC5wb3Aoa1ssZF0pIC0+IHYsIHJlbW92ZSBzcGVjaWZpZWQga2V5IGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuCisgICAgICAgICAgSWYga2V5IGlzIG5vdCBmb3VuZCwgZCBpcyByZXR1cm5lZCBpZiBnaXZlbiwgb3RoZXJ3aXNlIEtleUVycm9yIGlzIHJhaXNlZC4KKyAgICAgICAgJycnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgc2VsZi5fX21hcmtlcjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlbCBzZWxmW2tleV0KKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHBvcGl0ZW0oc2VsZik6CisgICAgICAgICcnJ0QucG9waXRlbSgpIC0+IChrLCB2KSwgcmVtb3ZlIGFuZCByZXR1cm4gc29tZSAoa2V5LCB2YWx1ZSkgcGFpcgorICAgICAgICAgICBhcyBhIDItdHVwbGU7IGJ1dCByYWlzZSBLZXlFcnJvciBpZiBEIGlzIGVtcHR5LgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gbmV4dChpdGVyKHNlbGYpKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgIHZhbHVlID0gc2VsZltrZXldCisgICAgICAgIGRlbCBzZWxmW2tleV0KKyAgICAgICAgcmV0dXJuIGtleSwgdmFsdWUKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgJ0QuY2xlYXIoKSAtPiBOb25lLiAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIEQuJworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9waXRlbSgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB1cGRhdGUoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICcnJyBELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gbWFwcGluZy9pdGVyYWJsZSBFIGFuZCBGLgorICAgICAgICAgICAgSWYgRSBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciBrIGluIEU6IERba10gPSBFW2tdCisgICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGxhY2tzIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIChrLCB2KSBpbiBFOiBEW2tdID0gdgorICAgICAgICAgICAgSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrLCB2IGluIEYuaXRlbXMoKTogRFtrXSA9IHYKKyAgICAgICAgJycnCisgICAgICAgIGlmIGxlbihhcmdzKSA+IDI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IG1vc3QgMiBwb3NpdGlvbmFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICh7fSBnaXZlbikiLmZvcm1hdChsZW4oYXJncykpKQorICAgICAgICBlbGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50ICgwIGdpdmVuKSIpCisgICAgICAgIHNlbGYgPSBhcmdzWzBdCisgICAgICAgIG90aGVyID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPj0gMiBlbHNlICgpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6CisgICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KKyAgICAgICAgZWxpZiBoYXNhdHRyKG90aGVyLCAia2V5cyIpOgorICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlci5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga3dkcy5pdGVtcygpOgorICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKKworICAgIGRlZiBzZXRkZWZhdWx0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgJ0Quc2V0ZGVmYXVsdChrWyxkXSkgLT4gRC5nZXQoayxkKSwgYWxzbyBzZXQgRFtrXT1kIGlmIGsgbm90IGluIEQnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZltrZXldID0gZGVmYXVsdAorICAgICAgICByZXR1cm4gZGVmYXVsdAorCitNdXRhYmxlTWFwcGluZy5yZWdpc3RlcihkaWN0KQorCisKKyMjIyBTRVFVRU5DRVMgIyMjCisKKworY2xhc3MgU2VxdWVuY2UoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgorCisgICAgIiIiQWxsIHRoZSBvcGVyYXRpb25zIG9uIGEgcmVhZC1vbmx5IHNlcXVlbmNlLgorCisgICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IG92ZXJyaWRlIF9fbmV3X18gb3IgX19pbml0X18sCisgICAgX19nZXRpdGVtX18sIGFuZCBfX2xlbl9fLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgaSA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB2ID0gc2VsZltpXQorICAgICAgICAgICAgICAgIHlpZWxkIHYKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgorICAgICAgICBmb3IgdiBpbiBzZWxmOgorICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX3JldmVyc2VkX18oc2VsZik6CisgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKGxlbihzZWxmKSkpOgorICAgICAgICAgICAgeWllbGQgc2VsZltpXQorCisgICAgZGVmIGluZGV4KHNlbGYsIHZhbHVlKToKKyAgICAgICAgJycnUy5pbmRleCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gZmlyc3QgaW5kZXggb2YgdmFsdWUuCisgICAgICAgICAgIFJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KKyAgICAgICAgJycnCisgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZShzZWxmKToKKyAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgZGVmIGNvdW50KHNlbGYsIHZhbHVlKToKKyAgICAgICAgJ1MuY291bnQodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB2YWx1ZScKKyAgICAgICAgcmV0dXJuIHN1bSgxIGZvciB2IGluIHNlbGYgaWYgdiA9PSB2YWx1ZSkKKworU2VxdWVuY2UucmVnaXN0ZXIodHVwbGUpCitTZXF1ZW5jZS5yZWdpc3RlcihzdHIpCitTZXF1ZW5jZS5yZWdpc3RlcihyYW5nZSkKK1NlcXVlbmNlLnJlZ2lzdGVyKG1lbW9yeXZpZXcpCisKKworY2xhc3MgQnl0ZVN0cmluZyhTZXF1ZW5jZSk6CisKKyAgICAiIiJUaGlzIHVuaWZpZXMgYnl0ZXMgYW5kIGJ5dGVhcnJheS4KKworICAgIFhYWCBTaG91bGQgYWRkIGFsbCB0aGVpciBtZXRob2RzLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlcykKK0J5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZWFycmF5KQorCisKK2NsYXNzIE11dGFibGVTZXF1ZW5jZShTZXF1ZW5jZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgIiIiQWxsIHRoZSBvcGVyYXRpb25zIG9uIGEgcmVhZC13cml0ZSBzZXF1ZW5jZS4KKworICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIF9fbmV3X18gb3IgX19pbml0X18sCisgICAgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywgX19sZW5fXywgYW5kIGluc2VydCgpLgorCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKToKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgdmFsdWUpOgorICAgICAgICAnUy5pbnNlcnQoaW5kZXgsIHZhbHVlKSAtLSBpbnNlcnQgdmFsdWUgYmVmb3JlIGluZGV4JworICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgJ1MuYXBwZW5kKHZhbHVlKSAtLSBhcHBlbmQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UnCisgICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmKSwgdmFsdWUpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICdTLmNsZWFyKCkgLT4gTm9uZSAtLSByZW1vdmUgYWxsIGl0ZW1zIGZyb20gUycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHJldmVyc2Uoc2VsZik6CisgICAgICAgICdTLnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSonCisgICAgICAgIG4gPSBsZW4oc2VsZikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi8vMik6CisgICAgICAgICAgICBzZWxmW2ldLCBzZWxmW24taS0xXSA9IHNlbGZbbi1pLTFdLCBzZWxmW2ldCisKKyAgICBkZWYgZXh0ZW5kKHNlbGYsIHZhbHVlcyk6CisgICAgICAgICdTLmV4dGVuZChpdGVyYWJsZSkgLS0gZXh0ZW5kIHNlcXVlbmNlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZScKKyAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hcHBlbmQodikKKworICAgIGRlZiBwb3Aoc2VsZiwgaW5kZXg9LTEpOgorICAgICAgICAnJydTLnBvcChbaW5kZXhdKSAtPiBpdGVtIC0tIHJlbW92ZSBhbmQgcmV0dXJuIGl0ZW0gYXQgaW5kZXggKGRlZmF1bHQgbGFzdCkuCisgICAgICAgICAgIFJhaXNlIEluZGV4RXJyb3IgaWYgbGlzdCBpcyBlbXB0eSBvciBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCisgICAgICAgICcnJworICAgICAgICB2ID0gc2VsZltpbmRleF0KKyAgICAgICAgZGVsIHNlbGZbaW5kZXhdCisgICAgICAgIHJldHVybiB2CisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgJycnUy5yZW1vdmUodmFsdWUpIC0tIHJlbW92ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHZhbHVlLgorICAgICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KKyAgICAgICAgJycnCisgICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQorCisgICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbHVlcyk6CisgICAgICAgIHNlbGYuZXh0ZW5kKHZhbHVlcykKKyAgICAgICAgcmV0dXJuIHNlbGYKKworTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGxpc3QpCitNdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoYnl0ZWFycmF5KSAgIyBNdWx0aXBseSBpbmhlcml0aW5nLCBzZWUgQnl0ZVN0cmluZwpkaWZmIC0tZ2l0IGEvTGliL19kdW1teV90aHJlYWQucHkgYi9MaWIvX2R1bW15X3RocmVhZC5weQppbmRleCAxM2IxZjI2Li5iNjdjZmI5IDEwMDY0NAotLS0gYS9MaWIvX2R1bW15X3RocmVhZC5weQorKysgYi9MaWIvX2R1bW15X3RocmVhZC5weQpAQCAtODEsNiArODEsMTAgQEAKICAgICAgICAgcmFpc2UgZXJyb3IoInNldHRpbmcgdGhyZWFkIHN0YWNrIHNpemUgbm90IHN1cHBvcnRlZCIpCiAgICAgcmV0dXJuIDAKIAorZGVmIF9zZXRfc2VudGluZWwoKToKKyAgICAiIiJEdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBfdGhyZWFkLl9zZXRfc2VudGluZWwoKS4iIiIKKyAgICByZXR1cm4gTG9ja1R5cGUoKQorCiBjbGFzcyBMb2NrVHlwZShvYmplY3QpOgogICAgICIiIkNsYXNzIGltcGxlbWVudGluZyBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBfdGhyZWFkLkxvY2tUeXBlLgogCmRpZmYgLS1naXQgYS9MaWIvX29zeF9zdXBwb3J0LnB5IGIvTGliL19vc3hfc3VwcG9ydC5weQppbmRleCA1MGIyZDE3Li40MGZjNzhiIDEwMDY0NAotLS0gYS9MaWIvX29zeF9zdXBwb3J0LnB5CisrKyBiL0xpYi9fb3N4X3N1cHBvcnQucHkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICBwYXRocyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4ZWN1dGFibGUpCiAKLSAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igb3MubmFtZSA9PSAnb3MyJykgYW5kIChleHQgIT0gJy5leGUnKToKKyAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CiAgICAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlICsgJy5leGUnCiAKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhlY3V0YWJsZSk6CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIF9TWVNURU1fVkVSU0lPTiA9ICcnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QnKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIFdlJ3JlIG9uIGEgcGxhaW4gZGFyd2luIGJveCwgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAjIGJlaGF2aW91ci4KICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9fcHlpby5weSBiL0xpYi9fcHlpby5weQppbmRleCBhYWI2MGRiLi5kNmVlZTc5IDEwMDY0NAotLS0gYS9MaWIvX3B5aW8ucHkKKysrIGIvTGliL19weWlvLnB5CkBAIC0zNCw3ICszNCw3IEBACiBkZWYgb3BlbihmaWxlLCBtb2RlPSJyIiwgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwKICAgICAgICAgIG5ld2xpbmU9Tm9uZSwgY2xvc2VmZD1UcnVlLCBvcGVuZXI9Tm9uZSk6CiAKLSAgICByIiIiT3BlbiBmaWxlIGFuZCByZXR1cm4gYSBzdHJlYW0uICBSYWlzZSBJT0Vycm9yIHVwb24gZmFpbHVyZS4KKyAgICByIiIiT3BlbiBmaWxlIGFuZCByZXR1cm4gYSBzdHJlYW0uICBSYWlzZSBPU0Vycm9yIHVwb24gZmFpbHVyZS4KIAogICAgIGZpbGUgaXMgZWl0aGVyIGEgdGV4dCBvciBieXRlIHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgKGFuZCB0aGUgcGF0aAogICAgIGlmIHRoZSBmaWxlIGlzbid0IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KSBvZiB0aGUgZmlsZSB0bwpAQCAtNjIsOCArNjIsNyBAQAogICAgICdiJyAgICAgICBiaW5hcnkgbW9kZQogICAgICd0JyAgICAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpCiAgICAgJysnICAgICAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKQotICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHVubmVlZGVkCi0gICAgICAgICAgICAgIGZvciBuZXcgY29kZSkKKyAgICAnVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZGVwcmVjYXRlZCkKICAgICA9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBUaGUgZGVmYXVsdCBtb2RlIGlzICdydCcgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCkuIEZvciBiaW5hcnkgcmFuZG9tCkBAIC03OSw2ICs3OCwxMCBAQAogICAgIHJldHVybmVkIGFzIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGEKICAgICBwbGF0Zm9ybS1kZXBlbmRlbnQgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZyBpZiBnaXZlbi4KIAorICAgICdVJyBtb2RlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGluIGZ1dHVyZSB2ZXJzaW9ucworICAgIG9mIFB5dGhvbi4gIEl0IGhhcyBubyBlZmZlY3QgaW4gUHl0aG9uIDMuICBVc2UgbmV3bGluZSB0byBjb250cm9sCisgICAgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuCisKICAgICBidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS4KICAgICBQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0CiAgICAgbGluZSBidWZmZXJpbmcgKG9ubHkgdXNhYmxlIGluIHRleHQgbW9kZSksIGFuZCBhbiBpbnRlZ2VyID4gMSB0byBpbmRpY2F0ZQpAQCAtMTI5LDYgKzEzMiw4IEBACiAgICAgYmUga2VwdCBvcGVuIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiBUaGlzIGRvZXMgbm90IHdvcmsgd2hlbiBhIGZpbGUgbmFtZSBpcwogICAgIGdpdmVuIGFuZCBtdXN0IGJlIFRydWUgaW4gdGhhdCBjYXNlLgogCisgICAgVGhlIG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBub24taW5oZXJpdGFibGUuCisKICAgICBBIGN1c3RvbSBvcGVuZXIgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhIGNhbGxhYmxlIGFzICpvcGVuZXIqLiBUaGUKICAgICB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgb2JqZWN0IGlzIHRoZW4gb2J0YWluZWQgYnkgY2FsbGluZwogICAgICpvcGVuZXIqIHdpdGggKCpmaWxlKiwgKmZsYWdzKikuICpvcGVuZXIqIG11c3QgcmV0dXJuIGFuIG9wZW4gZmlsZQpAQCAtMTcyLDYgKzE3Nyw5IEBACiAgICAgaWYgIlUiIGluIG1vZGVzOgogICAgICAgICBpZiBjcmVhdGluZyBvciB3cml0aW5nIG9yIGFwcGVuZGluZzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IHVzZSBVIGFuZCB3cml0aW5nIG1vZGUgYXQgb25jZSIpCisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHJlYWRpbmcgPSBUcnVlCiAgICAgaWYgdGV4dCBhbmQgYmluYXJ5OgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBoYXZlIHRleHQgYW5kIGJpbmFyeSBtb2RlIGF0IG9uY2UiKQpAQCAtMjAwLDcgKzIwOCw3IEBACiAgICAgICAgIGJ1ZmZlcmluZyA9IERFRkFVTFRfQlVGRkVSX1NJWkUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKLSAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJzID4gMToKQEAgLTI1NCw3ICsyNjIsNyBAQAogdHJ5OgogICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBJT0Vycm9yKToKKyAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcGFzcwogCiAKQEAgLTI3OCw3ICsyODYsNyBAQAogICAgIHJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLgogCiAgICAgTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpcwotICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBJT0Vycm9yIGluIHRoaXMgY2FzZS4KKyAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgT1NFcnJvciBpbiB0aGlzIGNhc2UuCiAKICAgICBJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmcKICAgICB0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGEKQEAgLTI5NCw3ICszMDIsNyBAQAogICAgICMjIyBJbnRlcm5hbCAjIyMKIAogICAgIGRlZiBfdW5zdXBwb3J0ZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy4iIiIKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgogICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiJXMuJXMoKSBub3Qgc3VwcG9ydGVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbmFtZSkpCiAKQEAgLTQ0MSw3ICs0NDksNyBAQAogICAgIGRlZiBmaWxlbm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgKGFuIGludCkgaWYgb25lIGV4aXN0cy4KIAotICAgICAgICBBbiBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgQW4gT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgiZmlsZW5vIikKIApAQCAtNDU1LDExICs0NjMsMTEgQEAKIAogICAgICMjIyBSZWFkbGluZVtzXSBhbmQgd3JpdGVsaW5lcyAjIyMKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD0tMSk6CisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgogICAgICAgICByIiIiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0uCiAKLSAgICAgICAgSWYgbGltaXQgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IGxpbWl0IGJ5dGVzIHdpbGwgYmUgcmVhZC4KLSAgICAgICAgTGltaXQgc2hvdWxkIGJlIGFuIGludC4KKyAgICAgICAgSWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGF0IG1vc3Qgc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICAgIFNpemUgc2hvdWxkIGJlIGFuIGludC4KIAogICAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBiJ1xuJyBmb3IgYmluYXJ5IGZpbGVzOyBmb3IgdGV4dAogICAgICAgICBmaWxlcywgdGhlIG5ld2xpbmVzIGFyZ3VtZW50IHRvIG9wZW4gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCkBAIC00NzIsMTggKzQ4MCwxOCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkYWhlYWQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgICAgICAgICAgbiA9IChyZWFkYWhlYWQuZmluZChiIlxuIikgKyAxKSBvciBsZW4ocmVhZGFoZWFkKQotICAgICAgICAgICAgICAgIGlmIGxpbWl0ID49IDA6Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBtaW4obiwgbGltaXQpCisgICAgICAgICAgICAgICAgaWYgc2l6ZSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gbWluKG4sIHNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRlZiBucmVhZGFoZWFkKCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIGxpbWl0ID0gLTEKLSAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uoc2l6ZSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGFuIGludGVnZXIiKQogICAgICAgICByZXMgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBsaW1pdCA8IDAgb3IgbGVuKHJlcykgPCBsaW1pdDoKKyAgICAgICAgd2hpbGUgc2l6ZSA8IDAgb3IgbGVuKHJlcykgPCBzaXplOgogICAgICAgICAgICAgYiA9IHNlbGYucmVhZChucmVhZGFoZWFkKCkpCiAgICAgICAgICAgICBpZiBub3QgYjoKICAgICAgICAgICAgICAgICBicmVhawpAQCAtNTQyLDE3ICs1NTAsMTcgQEAKICAgICAjIHByaW1pdGl2ZSBvcGVyYXRpb24sIGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8gbmFzdHkgcmVjdXJzaW9uIGluIGNhc2UKICAgICAjIGEgc3ViY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgZWl0aGVyLikKIAotICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBvbiBFT0YsIG9yIE5vbmUgaWYgdGhlIG9iamVjdCBpcwogICAgICAgICBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWxsKCkKLSAgICAgICAgYiA9IGJ5dGVhcnJheShuLl9faW5kZXhfXygpKQorICAgICAgICBiID0gYnl0ZWFycmF5KHNpemUuX19pbmRleF9fKCkpCiAgICAgICAgIG4gPSBzZWxmLnJlYWRpbnRvKGIpCiAgICAgICAgIGlmIG4gaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC02MTAsOCArNjE4LDggQEAKICAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLgogICAgICIiIgogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMsIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgTm9uZSwgb3IgbmVnYXRpdmUsIHJlYWRzIGFuZAogICAgICAgICByZXR1cm5zIGFsbCBkYXRhIHVudGlsIEVPRi4KQEAgLTYzMCw5ICs2MzgsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQiKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKLSAgICAgICAgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKKyAgICAgICAgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZDEiKQogCkBAIC02OTksMTMgKzcwNywxMyBAQAogICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgogICAgICAgICBuZXdfcG9zaXRpb24gPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQogICAgICAgICBpZiBuZXdfcG9zaXRpb24gPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gbmV3X3Bvc2l0aW9uCiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcG9zID0gc2VsZi5yYXcudGVsbCgpCiAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBwb3MKIAogICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CkBAIC04MjAsMjQgKzgyOCwyNCBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcoc2VsZi5fYnVmZmVyKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlYWQgZnJvbSBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBzaXplID0gbGVuKHNlbGYuX2J1ZmZlcikKICAgICAgICAgaWYgbGVuKHNlbGYuX2J1ZmZlcikgPD0gc2VsZi5fcG9zOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICBuZXdwb3MgPSBtaW4obGVuKHNlbGYuX2J1ZmZlciksIHNlbGYuX3BvcyArIG4pCisgICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgc2l6ZSkKICAgICAgICAgYiA9IHNlbGYuX2J1ZmZlcltzZWxmLl9wb3MgOiBuZXdwb3NdCiAgICAgICAgIHNlbGYuX3BvcyA9IG5ld3BvcwogICAgICAgICByZXR1cm4gYnl0ZXMoYikKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgICIiIlRoaXMgaXMgdGhlIHNhbWUgYXMgcmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWQobikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZChzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKQEAgLTkyNyw3ICs5MzUsNyBAQAogICAgICAgICAiIiJDcmVhdGUgYSBuZXcgYnVmZmVyZWQgcmVhZGVyIHVzaW5nIHRoZSBnaXZlbiByZWFkYWJsZSByYXcgSU8gb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHJhdy5yZWFkYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQogCiAgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQogICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgpAQCAtOTQwLDE4ICs5NDgsMTggQEAKICAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBiIiIKICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIG4gYnl0ZXMuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBzaXplIGJ5dGVzLgogCi0gICAgICAgIFJldHVybnMgZXhhY3RseSBuIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTworICAgICAgICBSZXR1cm5zIGV4YWN0bHkgc2l6ZSBieXRlcyBvZiBkYXRhIHVubGVzcyB0aGUgdW5kZXJseWluZyByYXcgSU8KICAgICAgICAgc3RyZWFtIHJlYWNoZXMgRU9GIG9yIGlmIHRoZSBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZwotICAgICAgICBtb2RlLiBJZiBuIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKKyAgICAgICAgbW9kZS4gSWYgc2l6ZSBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkCiAgICAgICAgIGJsb2NrLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA8IC0xOgorICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCBzaXplIDwgLTE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG51bWJlciBvZiBieXRlcyB0byByZWFkIikKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChuKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoc2l6ZSkKIAogICAgIGRlZiBfcmVhZF91bmxvY2tlZChzZWxmLCBuPU5vbmUpOgogICAgICAgICBub2RhdGFfdmFsID0gYiIiCkBAIC0xMDExLDcgKzEwMTksNyBAQAogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKICAgICAgICAgcmV0dXJuIG91dFs6bl0gaWYgb3V0IGVsc2Ugbm9kYXRhX3ZhbAogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgogICAgICAgICAiIiJSZXR1cm5zIGJ1ZmZlcmVkIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4KIAogICAgICAgICBUaGUgYXJndW1lbnQgaW5kaWNhdGVzIGEgZGVzaXJlZCBtaW5pbWFsIG51bWJlciBvZiBieXRlczsgd2UKQEAgLTEwMTksNyArMTAyNyw3IEBACiAgICAgICAgIHRoYW4gc2VsZi5idWZmZXJfc2l6ZS4KICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQobikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wZWVrX3VubG9ja2VkKHNpemUpCiAKICAgICBkZWYgX3BlZWtfdW5sb2NrZWQoc2VsZiwgbj0wKToKICAgICAgICAgd2FudCA9IG1pbihuLCBzZWxmLmJ1ZmZlcl9zaXplKQpAQCAtMTAzNywxOCArMTA0NSwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICAiIiJSZWFkcyB1cCB0byBuIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKLSAgICAgICAgIyBSZXR1cm5zIHVwIHRvIG4gYnl0ZXMuICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgd2UKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CisgICAgICAgICIiIlJlYWRzIHVwIHRvIHNpemUgYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgorICAgICAgICAjIFJldHVybnMgdXAgdG8gc2l6ZSBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQogICAgICAgICAjIG9ubHkgcmV0dXJuIGJ1ZmZlcmVkIGJ5dGVzLiAgT3RoZXJ3aXNlLCB3ZSBkbyBvbmUgcmF3IHJlYWQuCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm51bWJlciBvZiBieXRlcyB0byByZWFkIG11c3QgYmUgcG9zaXRpdmUiKQotICAgICAgICBpZiBuID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9wZWVrX3VubG9ja2VkKDEpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZCgKLSAgICAgICAgICAgICAgICBtaW4obiwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKKyAgICAgICAgICAgICAgICBtaW4oc2l6ZSwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gX0J1ZmZlcmVkSU9NaXhpbi50ZWxsKHNlbGYpIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSArIHNlbGYuX3JlYWRfcG9zCkBAIC0xMDc0LDcgKzEwODIsNyBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSk6CiAgICAgICAgIGlmIG5vdCByYXcud3JpdGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKIAogICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKICAgICAgICAgaWYgYnVmZmVyX3NpemUgPD0gMDoKQEAgLTExMzgsNyArMTE0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVBR0FJTiwKICAgICAgICAgICAgICAgICAgICAgIndyaXRlIGNvdWxkIG5vdCBjb21wbGV0ZSB3aXRob3V0IGJsb2NraW5nIiwgMCkKICAgICAgICAgICAgIGlmIG4gPiBsZW4oc2VsZi5fd3JpdGVfYnVmKSBvciBuIDwgMDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ3cml0ZSgpIHJldHVybmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCiAgICAgICAgICAgICBkZWwgc2VsZi5fd3JpdGVfYnVmWzpuXQogCiAgICAgZGVmIHRlbGwoc2VsZik6CkBAIC0xMTc0LDE4ICsxMTgyLDE4IEBACiAgICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIHR3byBSYXdJTyBpbnN0YW5jZXMuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgcmVhZGVyLnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCiAKICAgICAgICAgaWYgbm90IHdyaXRlci53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQogCiAgICAgICAgIHNlbGYucmVhZGVyID0gQnVmZmVyZWRSZWFkZXIocmVhZGVyLCBidWZmZXJfc2l6ZSkKICAgICAgICAgc2VsZi53cml0ZXIgPSBCdWZmZXJlZFdyaXRlcih3cml0ZXIsIGJ1ZmZlcl9zaXplKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKG4pCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKHNpemUpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkaW50byhiKQpAQCAtMTE5MywxMSArMTIwMSwxMSBAQAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRlKGIpCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucGVlayhuKQorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wZWVrKHNpemUpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkMShuKQorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKHNpemUpCiAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkYWJsZSgpCkBAIC0xMjQ4LDcgKzEyNTYsNyBAQAogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKICAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKICAgICAgICAgaWYgcG9zIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInNlZWsoKSByZXR1cm5lZCBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInNlZWsoKSByZXR1cm5lZCBpbnZhbGlkIHBvc2l0aW9uIikKICAgICAgICAgcmV0dXJuIHBvcwogCiAgICAgZGVmIHRlbGwoc2VsZik6CkBAIC0xMjYzLDIzICsxMjcxLDIzIEBACiAgICAgICAgICMgVXNlIHNlZWsgdG8gZmx1c2ggdGhlIHJlYWQgYnVmZmVyLgogICAgICAgICByZXR1cm4gQnVmZmVyZWRXcml0ZXIudHJ1bmNhdGUoc2VsZiwgcG9zKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCiAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZChzZWxmLCBuKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZChzZWxmLCBzaXplKQogCiAgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgogICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKHNlbGYsIGIpCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CiAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucGVlayhzZWxmLCBuKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucGVlayhzZWxmLCBzaXplKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkMShzZWxmLCBuKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZDEoc2VsZiwgc2l6ZSkKIAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgaWYgc2VsZi5fcmVhZF9idWY6CkBAIC0xMjk5LDExICsxMzA3LDExIEBACiAgICAgYXJlIGltbXV0YWJsZS4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgogICAgICIiIgogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICIiIlJlYWQgYXQgbW9zdCBuIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0sIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAiIiJSZWFkIGF0IG1vc3Qgc2l6ZSBjaGFyYWN0ZXJzIGZyb20gc3RyZWFtLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAotICAgICAgICBSZWFkIGZyb20gdW5kZXJseWluZyBidWZmZXIgdW50aWwgd2UgaGF2ZSBuIGNoYXJhY3RlcnMgb3Igd2UgaGl0IEVPRi4KLSAgICAgICAgSWYgbiBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRi4KKyAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgc2l6ZSBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCisgICAgICAgIElmIHNpemUgaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCiAKICAgICAgICAgUmV0dXJucyBhIHN0cmluZy4KICAgICAgICAgIiIiCkBAIC0xNzI3LDcgKzE3MzUsNyBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fc2Vla2FibGU6CiAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKICAgICAgICAgaWYgbm90IHNlbGYuX3RlbGxpbmc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsaW5nIHBvc2l0aW9uIGRpc2FibGVkIGJ5IG5leHQoKSBjYWxsIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQogICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci50ZWxsKCkKICAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIKQEAgLTE4MTQsNyArMTgyMiw3IEBACiAgICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUoYicnLCBmaW5hbD1UcnVlKSkKICAgICAgICAgICAgICAgICBuZWVkX2VvZiA9IDEKICAgICAgICAgICAgICAgICBpZiBjaGFyc19kZWNvZGVkIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKIAogICAgICAgICAgICAgIyBUaGUgcmV0dXJuZWQgY29va2llIGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IHNhZmUgc3RhcnQgcG9pbnQuCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFja19jb29raWUoCkBAIC0xODkxLDcgKzE4OTksNyBAQAogCiAgICAgICAgICAgICAjIFNraXAgY2hhcnNfdG9fc2tpcCBvZiB0aGUgZGVjb2RlZCBjaGFyYWN0ZXJzLgogICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2RlY29kZWRfY2hhcnMpIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2FuJ3QgcmVzdG9yZSBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQogICAgICAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkID0gY2hhcnNfdG9fc2tpcAogCiAgICAgICAgICMgRmluYWxseSwgcmVzZXQgdGhlIGVuY29kZXIgKG1lcmVseSB1c2VmdWwgZm9yIHByb3BlciBCT00gaGFuZGxpbmcpCkBAIC0xOTA3LDE2ICsxOTE1LDE2IEBACiAgICAgICAgICAgICAgICAgZW5jb2Rlci5yZXNldCgpCiAgICAgICAgIHJldHVybiBjb29raWUKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgc2VsZi5fY2hlY2tSZWFkYWJsZSgpCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKICAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIgb3Igc2VsZi5fZ2V0X2RlY29kZXIoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuLl9faW5kZXhfXworICAgICAgICAgICAgc2l6ZS5fX2luZGV4X18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpIGZyb20gZXJyCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgICMgUmVhZCBldmVyeXRoaW5nLgogICAgICAgICAgICAgcmVzdWx0ID0gKHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkgKwogICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIuZGVjb2RlKHNlbGYuYnVmZmVyLnJlYWQoKSwgZmluYWw9VHJ1ZSkpCkBAIC0xOTI0LDEyICsxOTMyLDEyIEBACiAgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyB0byByZXR1cm4uCisgICAgICAgICAgICAjIEtlZXAgcmVhZGluZyBjaHVua3MgdW50aWwgd2UgaGF2ZSBzaXplIGNoYXJhY3RlcnMgdG8gcmV0dXJuLgogICAgICAgICAgICAgZW9mID0gRmFsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKG4pCi0gICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IG4gYW5kIG5vdCBlb2Y6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhzaXplKQorICAgICAgICAgICAgd2hpbGUgbGVuKHJlc3VsdCkgPCBzaXplIGFuZCBub3QgZW9mOgogICAgICAgICAgICAgICAgIGVvZiA9IG5vdCBzZWxmLl9yZWFkX2NodW5rKCkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobiAtIGxlbihyZXN1bHQpKQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhzaXplIC0gbGVuKHJlc3VsdCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CkBAIC0xOTQxLDEzICsxOTQ5LDEzIEBACiAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9Tm9uZSk6CisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVhZCBmcm9tIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIGxpbWl0ID0gLTEKLSAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uoc2l6ZSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGFuIGludGVnZXIiKQogCiAgICAgICAgICMgR3JhYiBhbGwgdGhlIGRlY29kZWQgdGV4dCAod2Ugd2lsbCByZXdpbmQgYW55IGV4dHJhIGJpdHMgbGF0ZXIpLgogICAgICAgICBsaW5lID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKQpAQCAtMjAwNiw4ICsyMDE0LDggQEAKICAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gcG9zICsgbGVuKHNlbGYuX3JlYWRubCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAotICAgICAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgbGVuKGxpbmUpID49IGxpbWl0OgotICAgICAgICAgICAgICAgIGVuZHBvcyA9IGxpbWl0ICAjIHJlYWNoZWQgbGVuZ3RoIGxpbWl0CisgICAgICAgICAgICBpZiBzaXplID49IDAgYW5kIGxlbihsaW5lKSA+PSBzaXplOgorICAgICAgICAgICAgICAgIGVuZHBvcyA9IHNpemUgICMgcmVhY2hlZCBsZW5ndGggc2l6ZQogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgICMgTm8gbGluZSBlbmRpbmcgc2VlbiB5ZXQgLSBnZXQgbW9yZSBkYXRhJwpAQCAtMjAyMiw4ICsyMDMwLDggQEAKICAgICAgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQogCi0gICAgICAgIGlmIGxpbWl0ID49IDAgYW5kIGVuZHBvcyA+IGxpbWl0OgotICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgZG9uJ3QgZXhjZWVkIGxpbWl0CisgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgZW5kcG9zID4gc2l6ZToKKyAgICAgICAgICAgIGVuZHBvcyA9IHNpemUgICMgZG9uJ3QgZXhjZWVkIHNpemUKIAogICAgICAgICAjIFJld2luZCBfZGVjb2RlZF9jaGFycyB0byBqdXN0IGFmdGVyIHRoZSBsaW5lIGVuZGluZyB3ZSBmb3VuZC4KICAgICAgICAgc2VsZi5fcmV3aW5kX2RlY29kZWRfY2hhcnMobGVuKGxpbmUpIC0gZW5kcG9zKQpAQCAtMjA1NCw3ICsyMDYyLDYgQEAKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGluaXRpYWxfdmFsdWUsIHN0cik6CiAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbml0aWFsX3ZhbHVlIG11c3QgYmUgc3RyIG9yIE5vbmUsIG5vdCB7MH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodHlwZShpbml0aWFsX3ZhbHVlKS5fX25hbWVfXykpCi0gICAgICAgICAgICAgICAgaW5pdGlhbF92YWx1ZSA9IHN0cihpbml0aWFsX3ZhbHVlKQogICAgICAgICAgICAgc2VsZi53cml0ZShpbml0aWFsX3ZhbHVlKQogICAgICAgICAgICAgc2VsZi5zZWVrKDApCiAKZGlmZiAtLWdpdCBhL0xpYi9fc2l0ZWJ1aWx0aW5zLnB5IGIvTGliL19zaXRlYnVpbHRpbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyMTM1OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9fc2l0ZWJ1aWx0aW5zLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyIiIgorVGhlIG9iamVjdHMgdXNlZCBieSB0aGUgc2l0ZSBtb2R1bGUgdG8gYWRkIGN1c3RvbSBidWlsdGlucy4KKyIiIgorCisjIFRob3NlIG9iamVjdHMgYXJlIGFsbW9zdCBpbW1vcnRhbCBhbmQgdGhleSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZWlyIG1vZHVsZQorIyBnbG9iYWxzLiAgRGVmaW5pbmcgdGhlbSBpbiB0aGUgc2l0ZSBtb2R1bGUgd291bGQga2VlcCB0b28gbWFueSByZWZlcmVuY2VzCisjIGFsaXZlLgorIyBOb3RlIHRoaXMgbWVhbnMgdGhpcyBtb2R1bGUgc2hvdWxkIGFsc28gYXZvaWQga2VlcCB0aGluZ3MgYWxpdmUgaW4gaXRzCisjIGdsb2JhbHMuCisKK2ltcG9ydCBzeXMKKworY2xhc3MgUXVpdHRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBlb2YpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW9mID0gZW9mCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ1VzZSAlcygpIG9yICVzIHRvIGV4aXQnICUgKHNlbGYubmFtZSwgc2VsZi5lb2YpCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNvZGU9Tm9uZSk6CisgICAgICAgICMgU2hlbGxzIGxpa2UgSURMRSBjYXRjaCB0aGUgU3lzdGVtRXhpdCwgYnV0IGxpc3RlbiB3aGVuIHRoZWlyCisgICAgICAgICMgc3RkaW4gd3JhcHBlciBpcyBjbG9zZWQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChjb2RlKQorCisKK2NsYXNzIF9QcmludGVyKG9iamVjdCk6CisgICAgIiIiaW50ZXJhY3RpdmUgcHJvbXB0IG9iamVjdHMgZm9yIHByaW50aW5nIHRoZSBsaWNlbnNlIHRleHQsIGEgbGlzdCBvZgorICAgIGNvbnRyaWJ1dG9ycyBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2UuIiIiCisKKyAgICBNQVhMSU5FUyA9IDIzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGF0YSwgZmlsZXM9KCksIGRpcnM9KCkpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX19kYXRhID0gZGF0YQorICAgICAgICBzZWxmLl9fbGluZXMgPSBOb25lCisgICAgICAgIHNlbGYuX19maWxlbmFtZXMgPSBbb3MucGF0aC5qb2luKGRpciwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzXQorCisgICAgZGVmIF9fc2V0dXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX19saW5lczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fX2ZpbGVuYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZnA6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9fZGF0YQorICAgICAgICBzZWxmLl9fbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCisgICAgICAgIHNlbGYuX19saW5lY250ID0gbGVuKHNlbGYuX19saW5lcykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fX3NldHVwKCkKKyAgICAgICAgaWYgbGVuKHNlbGYuX19saW5lcykgPD0gc2VsZi5NQVhMSU5FUzoKKyAgICAgICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5fX2xpbmVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJUeXBlICVzKCkgdG8gc2VlIHRoZSBmdWxsICVzIHRleHQiICUgKChzZWxmLl9fbmFtZSwpKjIpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgIHNlbGYuX19zZXR1cCgpCisgICAgICAgIHByb21wdCA9ICdIaXQgUmV0dXJuIGZvciBtb3JlLCBvciBxIChhbmQgUmV0dXJuKSB0byBxdWl0OiAnCisgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsaW5lbm8sIGxpbmVubyArIHNlbGYuTUFYTElORVMpOgorICAgICAgICAgICAgICAgICAgICBwcmludChzZWxmLl9fbGluZXNbaV0pCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lbm8gKz0gc2VsZi5NQVhMSU5FUworICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGlsZSBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gaW5wdXQocHJvbXB0KQorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgnJywgJ3EnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ3EnOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisKK2NsYXNzIF9IZWxwZXIob2JqZWN0KToKKyAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0aW4gJ2hlbHAnLgorICAgIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBweWRvYy5oZWxwICh3aXRoIGEgdHdpc3QpLgorCisgICAgIiIiCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVHlwZSBoZWxwKCkgZm9yIGludGVyYWN0aXZlIGhlbHAsICIgXAorICAgICAgICAgICAgICAgIm9yIGhlbHAob2JqZWN0KSBmb3IgaGVscCBhYm91dCBvYmplY3QuIgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgaW1wb3J0IHB5ZG9jCisgICAgICAgIHJldHVybiBweWRvYy5oZWxwKCphcmdzLCAqKmt3ZHMpCmRpZmYgLS1naXQgYS9MaWIvX3N0cnB0aW1lLnB5IGIvTGliL19zdHJwdGltZS5weQppbmRleCA5MDU4YTY5Li5kMTAxYzZkIDEwMDY0NAotLS0gYS9MaWIvX3N0cnB0aW1lLnB5CisrKyBiL0xpYi9fc3RycHRpbWUucHkKQEAgLTIxLDcgKzIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZSBhcyBkYXRldGltZV90aW1lem9uZSkKIHRyeToKICAgICBmcm9tIF90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCi1leGNlcHQ6CitleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZnJvbSBfZHVtbXlfdGhyZWFkIGltcG9ydCBhbGxvY2F0ZV9sb2NrIGFzIF90aHJlYWRfYWxsb2NhdGVfbG9jawogCiBfX2FsbF9fID0gW10KZGlmZiAtLWdpdCBhL0xpYi9hYmMucHkgYi9MaWIvYWJjLnB5CmluZGV4IDA5Nzc4ZTguLjI2NGM2MGMgMTAwNjQ0Ci0tLSBhL0xpYi9hYmMucHkKKysrIGIvTGliL2FiYy5weQpAQCAtNSw2ICs1LDcgQEAKIAogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAogCisKIGRlZiBhYnN0cmFjdG1ldGhvZChmdW5jb2JqKToKICAgICAiIiJBIGRlY29yYXRvciBpbmRpY2F0aW5nIGFic3RyYWN0IG1ldGhvZHMuCiAKQEAgLTEyNCw2ICsxMjUsOCBAQAogICAgICMgQSBnbG9iYWwgY291bnRlciB0aGF0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIGNsYXNzIGlzCiAgICAgIyByZWdpc3RlcmVkIGFzIGEgdmlydHVhbCBzdWJjbGFzcyBvZiBhbnl0aGluZy4gIEl0IGZvcmNlcyB0aGUKICAgICAjIG5lZ2F0aXZlIGNhY2hlIHRvIGJlIGNsZWFyZWQgYmVmb3JlIGl0cyBuZXh0IHVzZS4KKyAgICAjIE5vdGU6IHRoaXMgY291bnRlciBpcyBwcml2YXRlLiBVc2UgYGFiYy5nZXRfY2FjaGVfdG9rZW4oKWAgZm9yCisgICAgIyAgICAgICBleHRlcm5hbCBjb2RlLgogICAgIF9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIgPSAwCiAKICAgICBkZWYgX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKToKQEAgLTIyNiwzICsyMjksMjAgQEAKICAgICAgICAgIyBObyBkaWNlOyB1cGRhdGUgbmVnYXRpdmUgY2FjaGUKICAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUuYWRkKHN1YmNsYXNzKQogICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBBQkMobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICIiIkhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSBhbiBBQkMgdXNpbmcKKyAgICBpbmhlcml0YW5jZS4KKyAgICAiIiIKKyAgICBwYXNzCisKKworZGVmIGdldF9jYWNoZV90b2tlbigpOgorICAgICIiIlJldHVybnMgdGhlIGN1cnJlbnQgQUJDIGNhY2hlIHRva2VuLgorCisgICAgVGhlIHRva2VuIGlzIGFuIG9wYXF1ZSBpbnRlZ2VyIGlkZW50aWZ5aW5nIHRoZSBjdXJyZW50IHZlcnNpb24gb2YKKyAgICB0aGUgQUJDIGNhY2hlIGZvciB2aXJ0dWFsIHN1YmNsYXNzZXMuIFRoaXMgbnVtYmVyIGNoYW5nZXMgd2l0aAorICAgIGV2ZXJ5IGNhbGwgdG8gYGByZWdpc3RlcigpYGAgb24gYW55IEFCQy4KKyAgICAiIiIKKyAgICByZXR1cm4gQUJDTWV0YS5fYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyCmRpZmYgLS1naXQgYS9MaWIvYWlmYy5weSBiL0xpYi9haWZjLnB5CmluZGV4IDg2YTVlZGMuLmMxYzhlYTcgMTAwNjQ0Ci0tLSBhL0xpYi9haWZjLnB5CisrKyBiL0xpYi9haWZjLnB5CkBAIC02OSw3ICs2OSw3IEBACiAgIGdldGNvbXB0eXBlKCkgICAtLSByZXR1cm5zIGNvbXByZXNzaW9uIHR5cGUgKCdOT05FJyBmb3IgQUlGRiBmaWxlcykKICAgZ2V0Y29tcG5hbWUoKSAgIC0tIHJldHVybnMgaHVtYW4tcmVhZGFibGUgdmVyc2lvbiBvZgogICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgKCdub3QgY29tcHJlc3NlZCcgZm9yIEFJRkYgZmlsZXMpCi0gIGdldHBhcmFtcygpIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgZ2V0cGFyYW1zKCkgLS0gcmV0dXJucyBhIG5hbWVkdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCiAgICAgICAgICAgICAgYWJvdmUgaW4gdGhlIGFib3ZlIG9yZGVyCiAgIGdldG1hcmtlcnMoKSAgICAtLSBnZXQgdGhlIGxpc3Qgb2YgbWFya3MgaW4gdGhlIGF1ZGlvIGZpbGUgb3IgTm9uZQogICAgICAgICAgICAgIGlmIHRoZXJlIGFyZSBubyBtYXJrcwpAQCAtMjUyLDYgKzI1MiwxMSBAQAogICAgIF93cml0ZV91bG9uZyhmLCBsb21hbnQpCiAKIGZyb20gY2h1bmsgaW1wb3J0IENodW5rCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK19haWZjX3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19haWZjX3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICduY2hhbm5lbHMgc2FtcHdpZHRoIGZyYW1lcmF0ZSBuZnJhbWVzIGNvbXB0eXBlIGNvbXBuYW1lJykKKwogCiBjbGFzcyBBaWZjX3JlYWQ6CiAgICAgIyBWYXJpYWJsZXMgdXNlZCBpbiB0aGlzIGNsYXNzOgpAQCAtMzM0LDYgKzMzOSwxMiBAQAogICAgICAgICAjIGVsc2UsIGFzc3VtZSBpdCBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0IGFscmVhZHkKICAgICAgICAgc2VsZi5pbml0ZnAoZikKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTM3Miw5ICszODMsOSBAQAogIyMgICAgICByZXR1cm4gc2VsZi5fdmVyc2lvbgogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF9haWZjX3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIGdldG1hcmtlcnMoc2VsZik6CiAgICAgICAgIGlmIGxlbihzZWxmLl9tYXJrZXJzKSA9PSAwOgpAQCAtNTUxLDYgKzU2MiwxMiBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTY0NCw4ICs2NjEsOCBAQAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHMgb3Igbm90IHNlbGYuX3NhbXB3aWR0aCBvciBub3Qgc2VsZi5fZnJhbWVyYXRlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25vdCBhbGwgcGFyYW1ldGVycyBzZXQnKQotICAgICAgICByZXR1cm4gc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwgXAotICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUKKyAgICAgICAgcmV0dXJuIF9haWZjX3BhcmFtcyhzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZSkKIAogICAgIGRlZiBzZXRtYXJrKHNlbGYsIGlkLCBwb3MsIG5hbWUpOgogICAgICAgICBpZiBpZCA8PSAwOgpAQCAtNjc1LDYgKzY5Miw4IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbihsZW4oZGF0YSkpCiAgICAgICAgIG5mcmFtZXMgPSBsZW4oZGF0YSkgLy8gKHNlbGYuX3NhbXB3aWR0aCAqIHNlbGYuX25jaGFubmVscykKICAgICAgICAgaWYgc2VsZi5fY29udmVydDoKQEAgLTg3Myw4ICs4OTIsNyBAQAogICAgIGlmIG5vdCBzeXMuYXJndlsxOl06CiAgICAgICAgIHN5cy5hcmd2LmFwcGVuZCgnL3Vzci9kZW1vcy9kYXRhL2F1ZGlvL2JhY2guYWlmZicpCiAgICAgZm4gPSBzeXMuYXJndlsxXQotICAgIGYgPSBvcGVuKGZuLCAncicpCi0gICAgdHJ5OgorICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgogICAgICAgICBwcmludCgiUmVhZGluZyIsIGZuKQogICAgICAgICBwcmludCgibmNoYW5uZWxzID0iLCBmLmdldG5jaGFubmVscygpKQogICAgICAgICBwcmludCgibmZyYW1lcyAgID0iLCBmLmdldG5mcmFtZXMoKSkKQEAgLTg4NSwxNiArOTAzLDExIEBACiAgICAgICAgIGlmIHN5cy5hcmd2WzI6XToKICAgICAgICAgICAgIGduID0gc3lzLmFyZ3ZbMl0KICAgICAgICAgICAgIHByaW50KCJXcml0aW5nIiwgZ24pCi0gICAgICAgICAgICBnID0gb3BlbihnbiwgJ3cnKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGduLCAndycpIGFzIGc6CiAgICAgICAgICAgICAgICAgZy5zZXRwYXJhbXMoZi5nZXRwYXJhbXMoKSkKICAgICAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkZnJhbWVzKDEwMjQpCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZy53cml0ZWZyYW1lcyhkYXRhKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBnLmNsb3NlKCkKICAgICAgICAgICAgIHByaW50KCJEb25lLiIpCi0gICAgZmluYWxseToKLSAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvYXJncGFyc2UucHkgYi9MaWIvYXJncGFyc2UucHkKaW5kZXggZjI1YjFiNi4uOTUyMGUwZSAxMDA2NDQKLS0tIGEvTGliL2FyZ3BhcnNlLnB5CisrKyBiL0xpYi9hcmdwYXJzZS5weQpAQCAtNjA2LDggKzYwNiw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9pbmRlbnQoKQotICAgICAgICAgICAgZm9yIHN1YmFjdGlvbiBpbiBnZXRfc3ViYWN0aW9ucygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1YmFjdGlvbgorICAgICAgICAgICAgeWllbGQgZnJvbSBnZXRfc3ViYWN0aW9ucygpCiAgICAgICAgICAgICBzZWxmLl9kZWRlbnQoKQogCiAgICAgZGVmIF9zcGxpdF9saW5lcyhzZWxmLCB0ZXh0LCB3aWR0aCk6CkBAIC0xMDM4LDcgKzEwMzcsOCBAQAogICAgICAgICAgICAgdmVyc2lvbiA9IHBhcnNlci52ZXJzaW9uCiAgICAgICAgIGZvcm1hdHRlciA9IHBhcnNlci5fZ2V0X2Zvcm1hdHRlcigpCiAgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dCh2ZXJzaW9uKQotICAgICAgICBwYXJzZXIuZXhpdChtZXNzYWdlPWZvcm1hdHRlci5mb3JtYXRfaGVscCgpKQorICAgICAgICBwYXJzZXIuX3ByaW50X21lc3NhZ2UoZm9ybWF0dGVyLmZvcm1hdF9oZWxwKCksIF9zeXMuc3Rkb3V0KQorICAgICAgICBwYXJzZXIuZXhpdCgpCiAKIAogY2xhc3MgX1N1YlBhcnNlcnNBY3Rpb24oQWN0aW9uKToKQEAgLTExNDEsMTEgKzExNDEsMTcgQEAKICAgICAgICAgICAgIHNhbWUgdmFsdWVzIGFzIHRoZSBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KICAgICAgICAgLSBidWZzaXplIC0tIFRoZSBmaWxlJ3MgZGVzaXJlZCBidWZmZXIgc2l6ZS4gQWNjZXB0cyB0aGUgc2FtZSB2YWx1ZXMgYXMKICAgICAgICAgICAgIHRoZSBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KKyAgICAgICAgLSBlbmNvZGluZyAtLSBUaGUgZmlsZSdzIGVuY29kaW5nLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUKKyAgICAgICAgICAgIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICAgICAtIGVycm9ycyAtLSBBIHN0cmluZyBpbmRpY2F0aW5nIGhvdyBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZXJyb3JzIGFyZSB0bworICAgICAgICAgICAgYmUgaGFuZGxlZC4gQWNjZXB0cyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZT0ncicsIGJ1ZnNpemU9LTEpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpOgogICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQogICAgICAgICBzZWxmLl9idWZzaXplID0gYnVmc2l6ZQorICAgICAgICBzZWxmLl9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgIHNlbGYuX2Vycm9ycyA9IGVycm9ycwogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHN0cmluZyk6CiAgICAgICAgICMgdGhlIHNwZWNpYWwgYXJndW1lbnQgIi0iIG1lYW5zIHN5cy5zdGR7aW4sb3V0fQpAQCAtMTE2MCwxNCArMTE2NiwxOCBAQAogCiAgICAgICAgICMgYWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgdXNlZCBhcyBmaWxlIG5hbWVzCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBvcGVuKHN0cmluZywgc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJldHVybiBvcGVuKHN0cmluZywgc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZSwgc2VsZi5fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvcnMpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBtZXNzYWdlID0gXygiY2FuJ3Qgb3BlbiAnJXMnOiAlcyIpCiAgICAgICAgICAgICByYWlzZSBBcmd1bWVudFR5cGVFcnJvcihtZXNzYWdlICUgKHN0cmluZywgZSkpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIGFyZ3MgPSBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplCi0gICAgICAgIGFyZ3Nfc3RyID0gJywgJy5qb2luKHJlcHIoYXJnKSBmb3IgYXJnIGluIGFyZ3MgaWYgYXJnICE9IC0xKQorICAgICAgICBrd2FyZ3MgPSBbKCdlbmNvZGluZycsIHNlbGYuX2VuY29kaW5nKSwgKCdlcnJvcnMnLCBzZWxmLl9lcnJvcnMpXQorICAgICAgICBhcmdzX3N0ciA9ICcsICcuam9pbihbcmVwcihhcmcpIGZvciBhcmcgaW4gYXJncyBpZiBhcmcgIT0gLTFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyclcz0lcicgJSAoa3csIGFyZykgZm9yIGt3LCBhcmcgaW4ga3dhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhcmcgaXMgbm90IE5vbmVdKQogICAgICAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZShzZWxmKS5fX25hbWVfXywgYXJnc19zdHIpCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMDAxLDE3ICsyMDExLDE0IEBACiAgICAgICAgICAgICAjIHJlcGxhY2UgYXJndW1lbnRzIHJlZmVyZW5jaW5nIGZpbGVzIHdpdGggdGhlIGZpbGUgY29udGVudAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZSA9IG9wZW4oYXJnX3N0cmluZ1sxOl0pCi0gICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGFyZ19zdHJpbmdbMTpdKSBhcyBhcmdzX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnX2xpbmUgaW4gYXJnc19maWxlLnJlYWQoKS5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhhcmdfbGluZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzLmFwcGVuZChhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IHNlbGYuX3JlYWRfYXJnc19mcm9tX2ZpbGVzKGFyZ19zdHJpbmdzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyZ19zdHJpbmdzLmV4dGVuZChhcmdfc3RyaW5ncykKLSAgICAgICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGVyciA9IF9zeXMuZXhjX2luZm8oKVsxXQogICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKHN0cihlcnIpKQogCmRpZmYgLS1naXQgYS9MaWIvYXN0LnB5IGIvTGliL2FzdC5weQppbmRleCAxM2Y1OWY5Li4wMmMzYjI4IDEwMDY0NAotLS0gYS9MaWIvYXN0LnB5CisrKyBiL0xpYi9hc3QucHkKQEAgLTQyLDcgKzQyLDYgQEAKICAgICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBieXRlcywgbnVtYmVycywgdHVwbGVzLCBsaXN0cywgZGljdHMsCiAgICAgc2V0cywgYm9vbGVhbnMsIGFuZCBOb25lLgogICAgICIiIgotICAgIF9zYWZlX25hbWVzID0geydOb25lJzogTm9uZSwgJ1RydWUnOiBUcnVlLCAnRmFsc2UnOiBGYWxzZX0KICAgICBpZiBpc2luc3RhbmNlKG5vZGVfb3Jfc3RyaW5nLCBzdHIpOgogICAgICAgICBub2RlX29yX3N0cmluZyA9IHBhcnNlKG5vZGVfb3Jfc3RyaW5nLCBtb2RlPSdldmFsJykKICAgICBpZiBpc2luc3RhbmNlKG5vZGVfb3Jfc3RyaW5nLCBFeHByZXNzaW9uKToKQEAgLTYxLDkgKzYwLDggQEAKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIERpY3QpOgogICAgICAgICAgICAgcmV0dXJuIGRpY3QoKF9jb252ZXJ0KGspLCBfY29udmVydCh2KSkgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHppcChub2RlLmtleXMsIG5vZGUudmFsdWVzKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWUpOgotICAgICAgICAgICAgaWYgbm9kZS5pZCBpbiBfc2FmZV9uYW1lczoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NhZmVfbmFtZXNbbm9kZS5pZF0KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWVDb25zdGFudCk6CisgICAgICAgICAgICByZXR1cm4gbm9kZS52YWx1ZQogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgVW5hcnlPcCkgYW5kIFwKICAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUub3AsIChVQWRkLCBVU3ViKSkgYW5kIFwKICAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUub3BlcmFuZCwgKE51bSwgVW5hcnlPcCwgQmluT3ApKToKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2hhdC5weSBiL0xpYi9hc3luY2hhdC5weQppbmRleCBlZWEzNDE4Li4wMzc4ZmE3IDEwMDY0NAotLS0gYS9MaWIvYXN5bmNoYXQucHkKKysrIGIvTGliL2FzeW5jaGF0LnB5CkBAIC01Niw4ICs1Niw4IEBACiAKICAgICAjIHRoZXNlIGFyZSBvdmVycmlkYWJsZSBkZWZhdWx0cwogCi0gICAgYWNfaW5fYnVmZmVyX3NpemUgICAgICAgPSA0MDk2Ci0gICAgYWNfb3V0X2J1ZmZlcl9zaXplICAgICAgPSA0MDk2CisgICAgYWNfaW5fYnVmZmVyX3NpemUgICAgICAgPSA2NTUzNgorICAgIGFjX291dF9idWZmZXJfc2l6ZSAgICAgID0gNjU1MzYKIAogICAgICMgd2UgZG9uJ3Qgd2FudCB0byBlbmFibGUgdGhlIHVzZSBvZiBlbmNvZGluZyBieSBkZWZhdWx0LCBiZWNhdXNlIHRoYXQgaXMgYQogICAgICMgc2lnbiBvZiBhbiBhcHBsaWNhdGlvbiBidWcgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHBhc3Mgc2lsZW50bHkKQEAgLTExMSw3ICsxMTEsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3YgKHNlbGYuYWNfaW5fYnVmZmVyX3NpemUpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcigpCiAgICAgICAgICAgICByZXR1cm4KIApAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAgICAjIHNlbmQgdGhlIGRhdGEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBudW1fc2VudCA9IHNlbGYuc2VuZChkYXRhKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vX19pbml0X18ucHkgYi9MaWIvYXN5bmNpby9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDI4OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vX19pbml0X18ucHkKQEAgLTAsMCArMSw0MSBAQAorIiIiVGhlIGFzeW5jaW8gcGFja2FnZSwgdHJhY2tpbmcgUEVQIDMxNTYuIiIiCisKK2ltcG9ydCBzeXMKKworIyBUaGUgc2VsZWN0b3JzIG1vZHVsZSBpcyBpbiB0aGUgc3RkbGliIGluIFB5dGhvbiAzLjQgYnV0IG5vdCBpbiAzLjMuCisjIERvIHRoaXMgZmlyc3QsIHNvIHRoZSBvdGhlciBzdWJtb2R1bGVzIGNhbiB1c2UgImZyb20gLiBpbXBvcnQgc2VsZWN0b3JzIi4KKyMgUHJlZmVyIGFzeW5jaW8vc2VsZWN0b3JzLnB5IG92ZXIgdGhlIHN0ZGxpYiBvbmUsIGFzIG91cnMgbWF5IGJlIG5ld2VyLgordHJ5OgorICAgIGZyb20gLiBpbXBvcnQgc2VsZWN0b3JzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHNlbGVjdG9ycyAgIyBXaWxsIGFsc28gYmUgZXhwb3J0ZWQuCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICMgU2ltaWxhciB0aGluZyBmb3IgX292ZXJsYXBwZWQuCisgICAgdHJ5OgorICAgICAgICBmcm9tIC4gaW1wb3J0IF9vdmVybGFwcGVkCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgX292ZXJsYXBwZWQgICMgV2lsbCBhbHNvIGJlIGV4cG9ydGVkLgorCisjIFRoaXMgcmVsaWVzIG9uIGVhY2ggb2YgdGhlIHN1Ym1vZHVsZXMgaGF2aW5nIGFuIF9fYWxsX18gdmFyaWFibGUuCitmcm9tIC5mdXR1cmVzIGltcG9ydCAqCitmcm9tIC5ldmVudHMgaW1wb3J0ICoKK2Zyb20gLmxvY2tzIGltcG9ydCAqCitmcm9tIC50cmFuc3BvcnRzIGltcG9ydCAqCitmcm9tIC5wcm90b2NvbHMgaW1wb3J0ICoKK2Zyb20gLnN0cmVhbXMgaW1wb3J0ICoKK2Zyb20gLnRhc2tzIGltcG9ydCAqCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgZnJvbSAud2luZG93c19ldmVudHMgaW1wb3J0ICoKK2Vsc2U6CisgICAgZnJvbSAudW5peF9ldmVudHMgaW1wb3J0ICogICMgcHJhZ21hOiBubyBjb3ZlcgorCisKK19fYWxsX18gPSAoZnV0dXJlcy5fX2FsbF9fICsKKyAgICAgICAgICAgZXZlbnRzLl9fYWxsX18gKworICAgICAgICAgICBsb2Nrcy5fX2FsbF9fICsKKyAgICAgICAgICAgdHJhbnNwb3J0cy5fX2FsbF9fICsKKyAgICAgICAgICAgcHJvdG9jb2xzLl9fYWxsX18gKworICAgICAgICAgICBzdHJlYW1zLl9fYWxsX18gKworICAgICAgICAgICB0YXNrcy5fX2FsbF9fKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9iYXNlX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmQxMTdiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKQEAgLTAsMCArMSw2NDQgQEAKKyIiIkJhc2UgaW1wbGVtZW50YXRpb24gb2YgZXZlbnQgbG9vcC4KKworVGhlIGV2ZW50IGxvb3AgY2FuIGJlIGJyb2tlbiB1cCBpbnRvIGEgbXVsdGlwbGV4ZXIgKHRoZSBwYXJ0CityZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHVzIG9mIElPIGV2ZW50cykgYW5kIHRoZSBldmVudCBsb29wIHByb3BlciwKK3doaWNoIHdyYXBzIGEgbXVsdGlwbGV4ZXIgd2l0aCBmdW5jdGlvbmFsaXR5IGZvciBzY2hlZHVsaW5nIGNhbGxiYWNrcywKK2ltbWVkaWF0ZWx5IG9yIGF0IGEgZ2l2ZW4gdGltZSBpbiB0aGUgZnV0dXJlLgorCitXaGVuZXZlciBhIHB1YmxpYyBBUEkgdGFrZXMgYSBjYWxsYmFjaywgc3Vic2VxdWVudCBwb3NpdGlvbmFsCithcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGlmL3doZW4gaXQgaXMgY2FsbGVkLiAgVGhpcworYXZvaWRzIHRoZSBwcm9saWZlcmF0aW9uIG9mIHRyaXZpYWwgbGFtYmRhcyBpbXBsZW1lbnRpbmcgY2xvc3VyZXMuCitLZXl3b3JkIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxiYWNrIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGlzIGlzIGEKK2NvbnNjaW91cyBkZXNpZ24gZGVjaXNpb24sIGxlYXZpbmcgdGhlIGRvb3Igb3BlbiBmb3Iga2V5d29yZCBhcmd1bWVudHMKK3RvIG1vZGlmeSB0aGUgbWVhbmluZyBvZiB0aGUgQVBJIGNhbGwgaXRzZWxmLgorIiIiCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgaGVhcHEKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK19fYWxsX18gPSBbJ0Jhc2VFdmVudExvb3AnLCAnU2VydmVyJ10KKworCisjIEFyZ3VtZW50IGZvciBkZWZhdWx0IHRocmVhZCBwb29sIGV4ZWN1dG9yIGNyZWF0aW9uLgorX01BWF9XT1JLRVJTID0gNQorCisKK2NsYXNzIF9TdG9wRXJyb3IoQmFzZUV4Y2VwdGlvbik6CisgICAgIiIiUmFpc2VkIHRvIHN0b3AgdGhlIGV2ZW50IGxvb3AuIiIiCisKKworZGVmIF9yYWlzZV9zdG9wX2Vycm9yKCphcmdzKToKKyAgICByYWlzZSBfU3RvcEVycm9yCisKKworY2xhc3MgU2VydmVyKGV2ZW50cy5BYnN0cmFjdFNlcnZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29ja2V0cyk6CisgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5zb2NrZXRzID0gc29ja2V0cworICAgICAgICBzZWxmLmFjdGl2ZV9jb3VudCA9IDAKKyAgICAgICAgc2VsZi53YWl0ZXJzID0gW10KKworICAgIGRlZiBhdHRhY2goc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc29ja2V0cyBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLmFjdGl2ZV9jb3VudCArPSAxCisKKyAgICBkZWYgZGV0YWNoKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIGFzc2VydCBzZWxmLmFjdGl2ZV9jb3VudCA+IDAKKyAgICAgICAgc2VsZi5hY3RpdmVfY291bnQgLT0gMQorICAgICAgICBpZiBzZWxmLmFjdGl2ZV9jb3VudCA9PSAwIGFuZCBzZWxmLnNvY2tldHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dha2V1cCgpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNvY2tldHMgPSBzZWxmLnNvY2tldHMKKyAgICAgICAgaWYgc29ja2V0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0cyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBzb2NrIGluIHNvY2tldHM6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcoc29jaykKKyAgICAgICAgICAgIGlmIHNlbGYuYWN0aXZlX2NvdW50ID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBfd2FrZXVwKHNlbGYpOgorICAgICAgICB3YWl0ZXJzID0gc2VsZi53YWl0ZXJzCisgICAgICAgIHNlbGYud2FpdGVycyA9IE5vbmUKKyAgICAgICAgZm9yIHdhaXRlciBpbiB3YWl0ZXJzOgorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQod2FpdGVyKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0X2Nsb3NlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zb2NrZXRzIGlzIE5vbmUgb3Igc2VsZi53YWl0ZXJzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYud2FpdGVycy5hcHBlbmQod2FpdGVyKQorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisKK2NsYXNzIEJhc2VFdmVudExvb3AoZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhZHkgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZCA9IFtdCisgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyA9IDAKKyAgICAgICAgc2VsZi5fcnVubmluZyA9IEZhbHNlCisKKyAgICBkZWYgX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgc29ja2V0IHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgU1NMIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBkYXRhZ3JhbSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlYWQgcGlwZSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgd3JpdGUgcGlwZSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIHN1YnByb2Nlc3MgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3JlYWRfZnJvbV9zZWxmKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgIiIiUHJvY2VzcyBzZWxlY3RvciBldmVudHMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW5fZm9yZXZlcihzZWxmKToKKyAgICAgICAgIiIiUnVuIHVudGlsIHN0b3AoKSBpcyBjYWxsZWQuIiIiCisgICAgICAgIGlmIHNlbGYuX3J1bm5pbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V2ZW50IGxvb3AgaXMgcnVubmluZy4nKQorICAgICAgICBzZWxmLl9ydW5uaW5nID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX29uY2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBfU3RvcEVycm9yOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcnVubmluZyA9IEZhbHNlCisKKyAgICBkZWYgcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgICIiIlJ1biB1bnRpbCB0aGUgRnV0dXJlIGlzIGRvbmUuCisKKyAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgY29yb3V0aW5lLCBpdCBpcyB3cmFwcGVkIGluIGEgVGFzay4KKworICAgICAgICBYWFggVEJEOiBJdCB3b3VsZCBiZSBkaXNhc3Ryb3VzIHRvIGNhbGwgcnVuX3VudGlsX2NvbXBsZXRlKCkKKyAgICAgICAgd2l0aCB0aGUgc2FtZSBjb3JvdXRpbmUgdHdpY2UgLS0gaXQgd291bGQgd3JhcCBpdCBpbiB0d28KKyAgICAgICAgZGlmZmVyZW50IFRhc2tzIGFuZCB0aGF0IGNhbid0IGJlIGdvb2QuCisKKyAgICAgICAgUmV0dXJuIHRoZSBGdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlIGl0cyBleGNlcHRpb24uCisgICAgICAgICIiIgorICAgICAgICBmdXR1cmUgPSB0YXNrcy5hc3luYyhmdXR1cmUsIGxvb3A9c2VsZikKKyAgICAgICAgZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKF9yYWlzZV9zdG9wX2Vycm9yKQorICAgICAgICBzZWxmLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZnV0dXJlLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9yYWlzZV9zdG9wX2Vycm9yKQorICAgICAgICBpZiBub3QgZnV0dXJlLmRvbmUoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBzdG9wcGVkIGJlZm9yZSBGdXR1cmUgY29tcGxldGVkLicpCisKKyAgICAgICAgcmV0dXJuIGZ1dHVyZS5yZXN1bHQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgcnVubmluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBFdmVyeSBjYWxsYmFjayBzY2hlZHVsZWQgYmVmb3JlIHN0b3AoKSBpcyBjYWxsZWQgd2lsbCBydW4uCisgICAgICAgIENhbGxiYWNrIHNjaGVkdWxlZCBhZnRlciBzdG9wKCkgaXMgY2FsbGVkIHdvbid0LiAgSG93ZXZlciwKKyAgICAgICAgdGhvc2UgY2FsbGJhY2tzIHdpbGwgcnVuIGlmIHJ1bigpIGlzIGNhbGxlZCBhZ2FpbiBsYXRlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY2FsbF9zb29uKF9yYWlzZV9zdG9wX2Vycm9yKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIGNsZWFycyB0aGUgcXVldWVzIGFuZCBzaHV0cyBkb3duIHRoZSBleGVjdXRvciwKKyAgICAgICAgYnV0IGRvZXMgbm90IHdhaXQgZm9yIHRoZSBleGVjdXRvciB0byBmaW5pc2guCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9yZWFkeS5jbGVhcigpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZC5jbGVhcigpCisgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICBpZiBleGVjdXRvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgICAgICBleGVjdXRvci5zaHV0ZG93bih3YWl0PUZhbHNlKQorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgcnVubmluZyBzdGF0dXMgb2YgZXZlbnQgbG9vcC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5pbmcKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgYWNjb3JkaW5nIHRvIHRoZSBldmVudCBsb29wJ3MgY2xvY2suIiIiCisgICAgICAgIHJldHVybiB0aW1lLm1vbm90b25pYygpCisKKyAgICBkZWYgY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQXJyYW5nZSBmb3IgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYXQgYSBnaXZlbiB0aW1lLgorCisgICAgICAgIFJldHVybiBhIEhhbmRsZTogYW4gb3BhcXVlIG9iamVjdCB3aXRoIGEgY2FuY2VsKCkgbWV0aG9kIHRoYXQKKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBjYWxsLgorCisgICAgICAgIFRoZSBkZWxheSBjYW4gYmUgYW4gaW50IG9yIGZsb2F0LCBleHByZXNzZWQgaW4gc2Vjb25kcy4gIEl0IGlzCisgICAgICAgIGFsd2F5cyBhIHJlbGF0aXZlIHRpbWUuCisKKyAgICAgICAgRWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuICBJZiB0d28gY2FsbGJhY2tzCisgICAgICAgIGFyZSBzY2hlZHVsZWQgZm9yIGV4YWN0bHkgdGhlIHNhbWUgdGltZSwgaXQgdW5kZWZpbmVkIHdoaWNoCisgICAgICAgIHdpbGwgYmUgY2FsbGVkIGZpcnN0LgorCisgICAgICAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgICAgdGhlIGNhbGxiYWNrIHdoZW4gaXQgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbF9hdChzZWxmLnRpbWUoKSArIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJMaWtlIGNhbGxfbGF0ZXIoKSwgYnV0IHVzZXMgYW4gYWJzb2x1dGUgdGltZS4iIiIKKyAgICAgICAgdGltZXIgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIGhlYXBxLmhlYXBwdXNoKHNlbGYuX3NjaGVkdWxlZCwgdGltZXIpCisgICAgICAgIHJldHVybiB0aW1lcgorCisgICAgZGVmIGNhbGxfc29vbihzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCisgICAgICAgIFRoaXMgb3BlcmF0ZXMgYXMgYSBGSUZPIHF1ZXVlLCBjYWxsYmFja3MgYXJlIGNhbGxlZCBpbiB0aGUKKyAgICAgICAgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgcmVnaXN0ZXJlZC4gIEVhY2ggY2FsbGJhY2sgd2lsbCBiZQorICAgICAgICBjYWxsZWQgZXhhY3RseSBvbmNlLgorCisgICAgICAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgICAgdGhlIGNhbGxiYWNrIHdoZW4gaXQgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgY2FsbF9zb29uX3RocmVhZHNhZmUoc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGhhbmRsZSA9IHNlbGYuY2FsbF9zb29uKGNhbGxiYWNrLCAqYXJncykKKyAgICAgICAgc2VsZi5fd3JpdGVfdG9fc2VsZigpCisgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgIGRlZiBydW5faW5fZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY2FsbGJhY2ssIGV2ZW50cy5IYW5kbGUpOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBhcmdzCisgICAgICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoY2FsbGJhY2ssIGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgICAgIGlmIGNhbGxiYWNrLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICAgICAgY2FsbGJhY2ssIGFyZ3MgPSBjYWxsYmFjay5fY2FsbGJhY2ssIGNhbGxiYWNrLl9hcmdzCisgICAgICAgIGlmIGV4ZWN1dG9yIGlzIE5vbmU6CisgICAgICAgICAgICBleGVjdXRvciA9IHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IKKyAgICAgICAgICAgIGlmIGV4ZWN1dG9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZXhlY3V0b3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKF9NQVhfV09SS0VSUykKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yID0gZXhlY3V0b3IKKyAgICAgICAgcmV0dXJuIGZ1dHVyZXMud3JhcF9mdXR1cmUoZXhlY3V0b3Iuc3VibWl0KGNhbGxiYWNrLCAqYXJncyksIGxvb3A9c2VsZikKKworICAgIGRlZiBzZXRfZGVmYXVsdF9leGVjdXRvcihzZWxmLCBleGVjdXRvcik6CisgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBleGVjdXRvcgorCisgICAgZGVmIGdldGFkZHJpbmZvKHNlbGYsIGhvc3QsIHBvcnQsICosCisgICAgICAgICAgICAgICAgICAgIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5faW5fZXhlY3V0b3IoTm9uZSwgc29ja2V0LmdldGFkZHJpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpCisKKyAgICBkZWYgZ2V0bmFtZWluZm8oc2VsZiwgc29ja2FkZHIsIGZsYWdzPTApOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5faW5fZXhlY3V0b3IoTm9uZSwgc29ja2V0LmdldG5hbWVpbmZvLCBzb2NrYWRkciwgZmxhZ3MpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgaXMgbm90IE5vbmUgYW5kIG5vdCBzc2w6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZXJ2ZXJfaG9zdG5hbWUgaXMgb25seSBtZWFuaW5nZnVsIHdpdGggc3NsJykKKworICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgaXMgTm9uZSBhbmQgc3NsOgorICAgICAgICAgICAgIyBVc2UgaG9zdCBhcyBkZWZhdWx0IGZvciBzZXJ2ZXJfaG9zdG5hbWUuICBJdCBpcyBhbiBlcnJvcgorICAgICAgICAgICAgIyBpZiBob3N0IGlzIGVtcHR5IG9yIG5vdCBzZXQsIGUuZy4gd2hlbiBhbgorICAgICAgICAgICAgIyBhbHJlYWR5LWNvbm5lY3RlZCBzb2NrZXQgd2FzIHBhc3NlZCBvciB3aGVuIG9ubHkgYSBwb3J0CisgICAgICAgICAgICAjIGlzIGdpdmVuLiAgVG8gYXZvaWQgdGhpcyBlcnJvciwgeW91IGNhbiBwYXNzCisgICAgICAgICAgICAjIHNlcnZlcl9ob3N0bmFtZT0nJyAtLSB0aGlzIHdpbGwgYnlwYXNzIHRoZSBob3N0bmFtZQorICAgICAgICAgICAgIyBjaGVjay4gIChUaGlzIGFsc28gbWVhbnMgdGhhdCBpZiBob3N0IGlzIGEgbnVtZXJpYworICAgICAgICAgICAgIyBJUC9JUHY2IGFkZHJlc3MsIHdlIHdpbGwgYXR0ZW1wdCB0byB2ZXJpZnkgdGhhdCBleGFjdAorICAgICAgICAgICAgIyBhZGRyZXNzOyB0aGlzIHdpbGwgcHJvYmFibHkgZmFpbCwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvCisgICAgICAgICAgICAjIGNyZWF0ZSBhIGNlcnRpZmljYXRlIGZvciBhIHNwZWNpZmljIElQIGFkZHJlc3MsIHNvIHdlCisgICAgICAgICAgICAjIGRvbid0IGp1ZGdlIGl0IGhlcmUuKQorICAgICAgICAgICAgaWYgbm90IGhvc3Q6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignWW91IG11c3Qgc2V0IHNlcnZlcl9ob3N0bmFtZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hlbiB1c2luZyBzc2wgd2l0aG91dCBhIGhvc3QnKQorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gaG9zdAorCisgICAgICAgIGlmIGhvc3QgaXMgbm90IE5vbmUgb3IgcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ2hvc3QvcG9ydCBhbmQgc29jayBjYW4gbm90IGJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lJykKKworICAgICAgICAgICAgZjEgPSBzZWxmLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPXByb3RvLCBmbGFncz1mbGFncykKKyAgICAgICAgICAgIGZzID0gW2YxXQorICAgICAgICAgICAgaWYgbG9jYWxfYWRkciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmMiA9IHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgICAgICpsb2NhbF9hZGRyLCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgICAgIGZzLmFwcGVuZChmMikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZjIgPSBOb25lCisKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Mud2FpdChmcywgbG9vcD1zZWxmKQorCisgICAgICAgICAgICBpbmZvcyA9IGYxLnJlc3VsdCgpCisgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKyAgICAgICAgICAgIGlmIGYyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxhZGRyX2luZm9zID0gZjIucmVzdWx0KCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGFkZHJfaW5mb3M6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisKKyAgICAgICAgICAgIGV4Y2VwdGlvbnMgPSBbXQorICAgICAgICAgICAgZm9yIGZhbWlseSwgdHlwZSwgcHJvdG8sIGNuYW1lLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5PWZhbWlseSwgdHlwZT10eXBlLCBwcm90bz1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZjIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXywgXywgXywgXywgbGFkZHIgaW4gbGFkZHJfaW5mb3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQobGFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMgPSBPU0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLmVycm5vLCAnZXJyb3Igd2hpbGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0dGVtcHRpbmcgdG8gYmluZCBvbiBhZGRyZXNzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9OiB7fScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhZGRyLCBleGMuc3RyZXJyb3IubG93ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKGV4YykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKGV4YykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsZW4oZXhjZXB0aW9ucykgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgSWYgdGhleSBhbGwgaGF2ZSB0aGUgc2FtZSBzdHIoKSwgcmFpc2Ugb25lLgorICAgICAgICAgICAgICAgICAgICBtb2RlbCA9IHN0cihleGNlcHRpb25zWzBdKQorICAgICAgICAgICAgICAgICAgICBpZiBhbGwoc3RyKGV4YykgPT0gbW9kZWwgZm9yIGV4YyBpbiBleGNlcHRpb25zKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnNbMF0KKyAgICAgICAgICAgICAgICAgICAgIyBSYWlzZSBhIGNvbWJpbmVkIGV4Y2VwdGlvbiBzbyB0aGUgdXNlciBjYW4gc2VlIGFsbAorICAgICAgICAgICAgICAgICAgICAjIHRoZSB2YXJpb3VzIGVycm9yIG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdNdWx0aXBsZSBleGNlcHRpb25zOiB7fScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKHN0cihleGMpIGZvciBleGMgaW4gZXhjZXB0aW9ucykpKQorCisgICAgICAgIGVsaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnaG9zdCBhbmQgcG9ydCB3YXMgbm90IHNwZWNpZmllZCBhbmQgbm8gc29jayBzcGVjaWZpZWQnKQorCisgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBpZiBzc2w6CisgICAgICAgICAgICBzc2xjb250ZXh0ID0gTm9uZSBpZiBpc2luc3RhbmNlKHNzbCwgYm9vbCkgZWxzZSBzc2wKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCB3YWl0ZXIpCisKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYsIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgICIiIkNyZWF0ZSBkYXRhZ3JhbSBjb25uZWN0aW9uLiIiIgorICAgICAgICBpZiBub3QgKGxvY2FsX2FkZHIgb3IgcmVtb3RlX2FkZHIpOgorICAgICAgICAgICAgaWYgZmFtaWx5ID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5leHBlY3RlZCBhZGRyZXNzIGZhbWlseScpCisgICAgICAgICAgICBhZGRyX3BhaXJzX2luZm8gPSAoKChmYW1pbHksIHByb3RvKSwgKE5vbmUsIE5vbmUpKSwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGpvaW4gYWRkcmVzc3MgYnkgKGZhbWlseSwgcHJvdG9jb2wpCisgICAgICAgICAgICBhZGRyX2luZm9zID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICAgICAgZm9yIGlkeCwgYWRkciBpbiAoKDAsIGxvY2FsX2FkZHIpLCAoMSwgcmVtb3RlX2FkZHIpKToKKyAgICAgICAgICAgICAgICBpZiBhZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhZGRyLCB0dXBsZSkgYW5kIGxlbihhZGRyKSA9PSAyLCAoCisgICAgICAgICAgICAgICAgICAgICAgICAnMi10dXBsZSBpcyBleHBlY3RlZCcpCisKKyAgICAgICAgICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAqYWRkciwgZmFtaWx5PWZhbWlseSwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvPXByb3RvLCBmbGFncz1mbGFncykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGluZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgICAgICAgICBmb3IgZmFtLCBfLCBwcm8sIF8sIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSAoZmFtLCBwcm8pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluIGFkZHJfaW5mb3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9pbmZvc1trZXldID0gW05vbmUsIE5vbmVdCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV1baWR4XSA9IGFkZHJlc3MKKworICAgICAgICAgICAgIyBlYWNoIGFkZHIgaGFzIHRvIGhhdmUgaW5mbyBmb3IgZWFjaCAoZmFtaWx5LCBwcm90bykgcGFpcgorICAgICAgICAgICAgYWRkcl9wYWlyc19pbmZvID0gWworICAgICAgICAgICAgICAgIChrZXksIGFkZHJfcGFpcikgZm9yIGtleSwgYWRkcl9wYWlyIGluIGFkZHJfaW5mb3MuaXRlbXMoKQorICAgICAgICAgICAgICAgIGlmIG5vdCAoKGxvY2FsX2FkZHIgYW5kIGFkZHJfcGFpclswXSBpcyBOb25lKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW90ZV9hZGRyIGFuZCBhZGRyX3BhaXJbMV0gaXMgTm9uZSkpXQorCisgICAgICAgICAgICBpZiBub3QgYWRkcl9wYWlyc19pbmZvOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2NhbiBub3QgZ2V0IGFkZHJlc3MgaW5mb3JtYXRpb24nKQorCisgICAgICAgIGV4Y2VwdGlvbnMgPSBbXQorCisgICAgICAgIGZvciAoKGZhbWlseSwgcHJvdG8pLAorICAgICAgICAgICAgIChsb2NhbF9hZGRyZXNzLCByZW1vdGVfYWRkcmVzcykpIGluIGFkZHJfcGFpcnNfaW5mbzoKKyAgICAgICAgICAgIHNvY2sgPSBOb25lCisgICAgICAgICAgICByX2FkZHIgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoCisgICAgICAgICAgICAgICAgICAgIGZhbWlseT1mYW1pbHksIHR5cGU9c29ja2V0LlNPQ0tfREdSQU0sIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorCisgICAgICAgICAgICAgICAgaWYgbG9jYWxfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgc29jay5iaW5kKGxvY2FsX2FkZHJlc3MpCisgICAgICAgICAgICAgICAgaWYgcmVtb3RlX2FkZHI6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5zb2NrX2Nvbm5lY3Qoc29jaywgcmVtb3RlX2FkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHJfYWRkciA9IHJlbW90ZV9hZGRyZXNzCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCByX2FkZHIpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9zZXJ2ZXIoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICBmbGFncz1zb2NrZXQuQUlfUEFTU0lWRSwKKyAgICAgICAgICAgICAgICAgICAgICBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgYmFja2xvZz0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcz1Ob25lKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3NsLCBib29sKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc3NsIGFyZ3VtZW50IG11c3QgYmUgYW4gU1NMQ29udGV4dCBvciBOb25lJykKKyAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZSBvciBwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnaG9zdC9wb3J0IGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBBRl9JTkVUNiA9IGdldGF0dHIoc29ja2V0LCAnQUZfSU5FVDYnLCAwKQorICAgICAgICAgICAgaWYgcmV1c2VfYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldXNlX2FkZHJlc3MgPSBvcy5uYW1lID09ICdwb3NpeCcgYW5kIHN5cy5wbGF0Zm9ybSAhPSAnY3lnd2luJworICAgICAgICAgICAgc29ja2V0cyA9IFtdCisgICAgICAgICAgICBpZiBob3N0ID09ICcnOgorICAgICAgICAgICAgICAgIGhvc3QgPSBOb25lCisKKyAgICAgICAgICAgIGluZm9zID0geWllbGQgZnJvbSBzZWxmLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTAsIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgaWYgbm90IGluZm9zOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisKKyAgICAgICAgICAgIGNvbXBsZXRlZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIHJlcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBc3N1bWUgaXQncyBhIGJhZCBmYW1pbHkvdHlwZS9wcm90b2NvbCBjb21iaW5hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHNvY2tldHMuYXBwZW5kKHNvY2spCisgICAgICAgICAgICAgICAgICAgIGlmIHJldXNlX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgIyBEaXNhYmxlIElQdjQvSVB2NiBkdWFsIHN0YWNrIHN1cHBvcnQgKGVuYWJsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgIyBkZWZhdWx0IG9uIExpbnV4KSB3aGljaCBtYWtlcyBhIHNpbmdsZSBzb2NrZXQKKyAgICAgICAgICAgICAgICAgICAgIyBsaXN0ZW4gb24gYm90aCBhZGRyZXNzIGZhbWlsaWVzLgorICAgICAgICAgICAgICAgICAgICBpZiBhZiA9PSBBRl9JTkVUNiBhbmQgaGFzYXR0cihzb2NrZXQsICdJUFBST1RPX0lQVjYnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFY2X1Y2T05MWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQoc2EpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLmVycm5vLCAnZXJyb3Igd2hpbGUgYXR0ZW1wdGluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBiaW5kIG9uIGFkZHJlc3MgJXI6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzYSwgZXJyLnN0cmVycm9yLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IFRydWUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0IGFuZCBwb3J0IHdhcyBub3Qgc3BlY2lmaWVkIGFuZCBubyBzb2NrIHNwZWNpZmllZCcpCisgICAgICAgICAgICBzb2NrZXRzID0gW3NvY2tdCisKKyAgICAgICAgc2VydmVyID0gU2VydmVyKHNlbGYsIHNvY2tldHMpCisgICAgICAgIGZvciBzb2NrIGluIHNvY2tldHM6CisgICAgICAgICAgICBzb2NrLmxpc3RlbihiYWNrbG9nKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZpbmcocHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsLCBzZXJ2ZXIpCisgICAgICAgIHJldHVybiBzZXJ2ZXIKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY29ubmVjdF9yZWFkX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHBpcGUsIHByb3RvY29sLCB3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGNvbm5lY3Rfd3JpdGVfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHBpcGUsIHByb3RvY29sLCB3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHN1YnByb2Nlc3Nfc2hlbGwoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgY21kLCAqLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHNoZWxsPVRydWUsIGJ1ZnNpemU9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgIGFzc2VydCBub3QgdW5pdmVyc2FsX25ld2xpbmVzLCAidW5pdmVyc2FsX25ld2xpbmVzIG11c3QgYmUgRmFsc2UiCisgICAgICAgIGFzc2VydCBzaGVsbCwgInNoZWxsIG11c3QgYmUgVHJ1ZSIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY21kLCBzdHIpLCBjbWQKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnNwb3J0ID0geWllbGQgZnJvbSBzZWxmLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KAorICAgICAgICAgICAgcHJvdG9jb2wsIGNtZCwgVHJ1ZSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19leGVjKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksICphcmdzLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCBzaGVsbD1GYWxzZSwgYnVmc2l6ZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICBhc3NlcnQgbm90IHVuaXZlcnNhbF9uZXdsaW5lcywgInVuaXZlcnNhbF9uZXdsaW5lcyBtdXN0IGJlIEZhbHNlIgorICAgICAgICBhc3NlcnQgbm90IHNoZWxsLCAic2hlbGwgbXVzdCBiZSBGYWxzZSIKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnNwb3J0ID0geWllbGQgZnJvbSBzZWxmLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KAorICAgICAgICAgICAgcHJvdG9jb2wsIGFyZ3MsIEZhbHNlLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgZGVmIF9hZGRfY2FsbGJhY2soc2VsZiwgaGFuZGxlKToKKyAgICAgICAgIiIiQWRkIGEgSGFuZGxlIHRvIHJlYWR5IG9yIHNjaGVkdWxlZC4iIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIHJlcXVpcmVkIGhlcmUnCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuVGltZXJIYW5kbGUpOgorICAgICAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fc2NoZWR1bGVkLCBoYW5kbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorCisgICAgZGVmIF9hZGRfY2FsbGJhY2tfc2lnbmFsc2FmZShzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJMaWtlIF9hZGRfY2FsbGJhY2soKSBidXQgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4iIiIKKyAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKGhhbmRsZSkKKyAgICAgICAgc2VsZi5fd3JpdGVfdG9fc2VsZigpCisKKyAgICBkZWYgX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICAiIiJSdW4gb25lIGZ1bGwgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgY2FsbHMgYWxsIGN1cnJlbnRseSByZWFkeSBjYWxsYmFja3MsIHBvbGxzIGZvciBJL08sCisgICAgICAgIHNjaGVkdWxlcyB0aGUgcmVzdWx0aW5nIGNhbGxiYWNrcywgYW5kIGZpbmFsbHkgc2NoZWR1bGVzCisgICAgICAgICdjYWxsX2xhdGVyJyBjYWxsYmFja3MuCisgICAgICAgICIiIgorICAgICAgICAjIFJlbW92ZSBkZWxheWVkIGNhbGxzIHRoYXQgd2VyZSBjYW5jZWxsZWQgZnJvbSBoZWFkIG9mIHF1ZXVlLgorICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQgYW5kIHNlbGYuX3NjaGVkdWxlZFswXS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisKKyAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcmVhZHk6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICBlbGlmIHNlbGYuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgICMgQ29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lb3V0LgorICAgICAgICAgICAgd2hlbiA9IHNlbGYuX3NjaGVkdWxlZFswXS5fd2hlbgorICAgICAgICAgICAgZGVhZGxpbmUgPSBtYXgoMCwgd2hlbiAtIHNlbGYudGltZSgpKQorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbWluKHRpbWVvdXQsIGRlYWRsaW5lKQorCisgICAgICAgICMgVE9ETzogSW5zdHJ1bWVudGF0aW9uIG9ubHkgaW4gZGVidWcgbW9kZT8KKyAgICAgICAgdDAgPSBzZWxmLnRpbWUoKQorICAgICAgICBldmVudF9saXN0ID0gc2VsZi5fc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgIHQxID0gc2VsZi50aW1lKCkKKyAgICAgICAgYXJnc3RyID0gJycgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgJ3s6LjNmfScuZm9ybWF0KHRpbWVvdXQpCisgICAgICAgIGlmIHQxLXQwID49IDE6CisgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgICAgIGxvZ2dlci5sb2cobGV2ZWwsICdwb2xsJXMgdG9vayAlLjNmIHNlY29uZHMnLCBhcmdzdHIsIHQxLXQwKQorICAgICAgICBzZWxmLl9wcm9jZXNzX2V2ZW50cyhldmVudF9saXN0KQorCisgICAgICAgICMgSGFuZGxlICdsYXRlcicgY2FsbGJhY2tzIHRoYXQgYXJlIHJlYWR5LgorICAgICAgICBub3cgPSBzZWxmLnRpbWUoKQorICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICBoYW5kbGUgPSBzZWxmLl9zY2hlZHVsZWRbMF0KKyAgICAgICAgICAgIGlmIGhhbmRsZS5fd2hlbiA+IG5vdzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaGFuZGxlID0gaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisgICAgICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorCisgICAgICAgICMgVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSBjYWxsYmFja3MgYXJlIGFjdHVhbGx5ICpjYWxsZWQqLgorICAgICAgICAjIEFsbCBvdGhlciBwbGFjZXMganVzdCBhZGQgdGhlbSB0byByZWFkeS4KKyAgICAgICAgIyBOb3RlOiBXZSBydW4gYWxsIGN1cnJlbnRseSBzY2hlZHVsZWQgY2FsbGJhY2tzLCBidXQgbm90IGFueQorICAgICAgICAjIGNhbGxiYWNrcyBzY2hlZHVsZWQgYnkgY2FsbGJhY2tzIHJ1biB0aGlzIHRpbWUgYXJvdW5kIC0tCisgICAgICAgICMgdGhleSB3aWxsIGJlIHJ1biB0aGUgbmV4dCB0aW1lIChhZnRlciBhbm90aGVyIEkvTyBwb2xsKS4KKyAgICAgICAgIyBVc2UgYW4gaWRpb20gdGhhdCBpcyB0aHJlYWRzYWZlIHdpdGhvdXQgdXNpbmcgbG9ja3MuCisgICAgICAgIG50b2RvID0gbGVuKHNlbGYuX3JlYWR5KQorICAgICAgICBmb3IgaSBpbiByYW5nZShudG9kbyk6CisgICAgICAgICAgICBoYW5kbGUgPSBzZWxmLl9yZWFkeS5wb3BsZWZ0KCkKKyAgICAgICAgICAgIGlmIG5vdCBoYW5kbGUuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBoYW5kbGUuX3J1bigpCisgICAgICAgIGhhbmRsZSA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkgYi9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1ZmIxNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Jhc2Vfc3VicHJvY2Vzcy5weQpAQCAtMCwwICsxLDE2NiBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCB0YXNrcworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCisKKworU1RESU4gPSAwCitTVERPVVQgPSAxCitTVERFUlIgPSAyCisKKworY2xhc3MgQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQodHJhbnNwb3J0cy5TdWJwcm9jZXNzVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisKKyAgICAgICAgc2VsZi5fcGlwZXMgPSB7fQorICAgICAgICBpZiBzdGRpbiA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1tTVERJTl0gPSBOb25lCisgICAgICAgIGlmIHN0ZG91dCA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1tTVERPVVRdID0gTm9uZQorICAgICAgICBpZiBzdGRlcnIgPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgc2VsZi5fcGlwZXNbU1RERVJSXSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGVuZGluZ19jYWxscyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICBzZWxmLl9zdGFydChhcmdzPWFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVyciwgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3N1YnByb2Nlc3MnXSA9IHNlbGYuX3Byb2MKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgYXJncywgc2hlbGwsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfd3JpdGVfc3VicHJvY2Vzc19waXBlX3Byb3RvKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3JlYWRfc3VicHJvY2Vzc19waXBlX3Byb3RvKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gc2VsZi5fcGlwZXMudmFsdWVzKCk6CisgICAgICAgICAgICBwcm90by5waXBlLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5fcmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorCisgICAgZGVmIGdldF9waWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBpZAorCisgICAgZGVmIGdldF9yZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmV0dXJuY29kZQorCisgICAgZGVmIGdldF9waXBlX3RyYW5zcG9ydChzZWxmLCBmZCk6CisgICAgICAgIGlmIGZkIGluIHNlbGYuX3BpcGVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BpcGVzW2ZkXS5waXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNlbmRfc2lnbmFsKHNlbGYsIHNpZ25hbCk6CisgICAgICAgIHNlbGYuX3Byb2Muc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYy50ZXJtaW5hdGUoKQorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX3Byb2Mua2lsbCgpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIF9wb3N0X2luaXQoc2VsZik6CisgICAgICAgIHByb2MgPSBzZWxmLl9wcm9jCisgICAgICAgIGxvb3AgPSBzZWxmLl9sb29wCisgICAgICAgIGlmIHByb2Muc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3Rfd3JpdGVfcGlwZSgKKyAgICAgICAgICAgICAgICBsYW1iZGE6IFdyaXRlU3VicHJvY2Vzc1BpcGVQcm90byhzZWxmLCBTVERJTiksCisgICAgICAgICAgICAgICAgcHJvYy5zdGRpbikKKyAgICAgICAgaWYgcHJvYy5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgU1RET1VUKSwKKyAgICAgICAgICAgICAgICBwcm9jLnN0ZG91dCkKKyAgICAgICAgaWYgcHJvYy5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgU1RERVJSKSwKKyAgICAgICAgICAgICAgICBwcm9jLnN0ZGVycikKKyAgICAgICAgaWYgbm90IHNlbGYuX3BpcGVzOgorICAgICAgICAgICAgc2VsZi5fdHJ5X2Nvbm5lY3RlZCgpCisKKyAgICBkZWYgX2NhbGwoc2VsZiwgY2IsICpkYXRhKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMuYXBwZW5kKChjYiwgZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYiwgKmRhdGEpCisKKyAgICBkZWYgX3RyeV9jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wZW5kaW5nX2NhbGxzIGlzIG5vdCBOb25lCisgICAgICAgIGlmIGFsbChwIGlzIG5vdCBOb25lIGFuZCBwLmNvbm5lY3RlZCBmb3IgcCBpbiBzZWxmLl9waXBlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgICAgICBmb3IgY2FsbGJhY2ssIGRhdGEgaW4gc2VsZi5fcGVuZGluZ19jYWxsczoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYWxsYmFjaywgKmRhdGEpCisgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX2NhbGxzID0gTm9uZQorCisgICAgZGVmIF9waXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5waXBlX2Nvbm5lY3Rpb25fbG9zdCwgZmQsIGV4YykKKyAgICAgICAgc2VsZi5fdHJ5X2ZpbmlzaCgpCisKKyAgICBkZWYgX3BpcGVfZGF0YV9yZWNlaXZlZChzZWxmLCBmZCwgZGF0YSk6CisgICAgICAgIHNlbGYuX2NhbGwoc2VsZi5fcHJvdG9jb2wucGlwZV9kYXRhX3JlY2VpdmVkLCBmZCwgZGF0YSkKKworICAgIGRlZiBfcHJvY2Vzc19leGl0ZWQoc2VsZiwgcmV0dXJuY29kZSk6CisgICAgICAgIGFzc2VydCByZXR1cm5jb2RlIGlzIG5vdCBOb25lLCByZXR1cm5jb2RlCisgICAgICAgIGFzc2VydCBzZWxmLl9yZXR1cm5jb2RlIGlzIE5vbmUsIHNlbGYuX3JldHVybmNvZGUKKyAgICAgICAgc2VsZi5fcmV0dXJuY29kZSA9IHJldHVybmNvZGUKKyAgICAgICAgc2VsZi5fbG9vcC5fc3VicHJvY2Vzc19jbG9zZWQoc2VsZikKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5wcm9jZXNzX2V4aXRlZCkKKyAgICAgICAgc2VsZi5fdHJ5X2ZpbmlzaCgpCisKKyAgICBkZWYgX3RyeV9maW5pc2goc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fZmluaXNoZWQKKyAgICAgICAgaWYgc2VsZi5fcmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGFsbChwIGlzIG5vdCBOb25lIGFuZCBwLmRpc2Nvbm5lY3RlZAorICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5fcGlwZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKworY2xhc3MgV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvKHByb3RvY29scy5CYXNlUHJvdG9jb2wpOgorICAgIHBpcGUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYywgZmQpOgorICAgICAgICBzZWxmLnByb2MgPSBwcm9jCisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuZGlzY29ubmVjdGVkID0gRmFsc2UKKyAgICAgICAgcHJvYy5fcGlwZXNbZmRdID0gc2VsZgorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgc2VsZi5waXBlID0gdHJhbnNwb3J0CisgICAgICAgIHNlbGYucHJvYy5fdHJ5X2Nvbm5lY3RlZCgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuZGlzY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnByb2MuX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYuZmQsIGV4YykKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBSZWFkU3VicHJvY2Vzc1BpcGVQcm90byhXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbHMuUHJvdG9jb2wpOgorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYucHJvYy5fcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYuZmQsIGRhdGEpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9jb25zdGFudHMucHkgYi9MaWIvYXN5bmNpby9jb25zdGFudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllMTIzMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2NvbnN0YW50cy5weQpAQCAtMCwwICsxLDcgQEAKKyIiIkNvbnN0YW50cy4iIiIKKworIyBBZnRlciB0aGUgY29ubmVjdGlvbiBpcyBsb3N0LCBsb2cgd2FybmluZ3MgYWZ0ZXIgdGhpcyBtYW55IHdyaXRlKClzLgorTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTID0gNQorCisjIFNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgYWNjZXB0KCkuCitBQ0NFUFRfUkVUUllfREVMQVkgPSAxCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhZTMxMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2V2ZW50cy5weQpAQCAtMCwwICsxLDQzOCBAQAorIiIiRXZlbnQgbG9vcCBhbmQgZXZlbnQgbG9vcCBwb2xpY3kuIiIiCisKK19fYWxsX18gPSBbJ0Fic3RyYWN0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgJ0Fic3RyYWN0RXZlbnRMb29wJywgJ0Fic3RyYWN0U2VydmVyJywKKyAgICAgICAgICAgJ0hhbmRsZScsICdUaW1lckhhbmRsZScsCisgICAgICAgICAgICdnZXRfZXZlbnRfbG9vcF9wb2xpY3knLCAnc2V0X2V2ZW50X2xvb3BfcG9saWN5JywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wJywgJ3NldF9ldmVudF9sb29wJywgJ25ld19ldmVudF9sb29wJywKKyAgICAgICAgICAgJ2dldF9jaGlsZF93YXRjaGVyJywgJ3NldF9jaGlsZF93YXRjaGVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNvY2tldAorCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIEhhbmRsZToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FsbGJhY2ssIGFyZ3MpOgorICAgICAgICBzZWxmLl9jYWxsYmFjayA9IGNhbGxiYWNrCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IEZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9ICdIYW5kbGUoe30sIHt9KScuZm9ybWF0KHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKQorICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXMgKz0gJzxjYW5jZWxsZWQ+JworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisKKyAgICBkZWYgX3J1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2soKnNlbGYuX2FyZ3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdFeGNlcHRpb24gaW4gY2FsbGJhY2sgJXMgJXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaywgc2VsZi5fYXJncykKKyAgICAgICAgc2VsZiA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKworZGVmIG1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKToKKyAgICAjIFRPRE86IElubGluZSB0aGlzPyAgT3IgbWFrZSBpdCBhIHByaXZhdGUgRXZlbnRMb29wIG1ldGhvZD8KKyAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoY2FsbGJhY2ssIEhhbmRsZSksICdBIEhhbmRsZSBpcyBub3QgYSBjYWxsYmFjaycKKyAgICByZXR1cm4gSGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorCisKK2NsYXNzIFRpbWVySGFuZGxlKEhhbmRsZSk6CisgICAgIiIiT2JqZWN0IHJldHVybmVkIGJ5IHRpbWVkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBtZXRob2RzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdoZW4sIGNhbGxiYWNrLCBhcmdzKToKKyAgICAgICAgYXNzZXJ0IHdoZW4gaXMgbm90IE5vbmUKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhjYWxsYmFjaywgYXJncykKKworICAgICAgICBzZWxmLl93aGVuID0gd2hlbgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSAnVGltZXJIYW5kbGUoe30sIHt9LCB7fSknLmZvcm1hdChzZWxmLl93aGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXJncykKKyAgICAgICAgaWYgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgcmVzICs9ICc8Y2FuY2VsbGVkPicKKworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3doZW4pCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3doZW4gPCBvdGhlci5fd2hlbgorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3doZW4gPCBvdGhlci5fd2hlbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2hlbiA+IG90aGVyLl93aGVuCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fd2hlbiA+IG90aGVyLl93aGVuOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRpbWVySGFuZGxlKToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5fd2hlbiA9PSBvdGhlci5fd2hlbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2sgPT0gb3RoZXIuX2NhbGxiYWNrIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID09IG90aGVyLl9hcmdzIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPT0gb3RoZXIuX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLl9fZXFfXyhvdGhlcikKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkIGlmIGVxdWFsIGlzIE5vdEltcGxlbWVudGVkIGVsc2Ugbm90IGVxdWFsCisKKworY2xhc3MgQWJzdHJhY3RTZXJ2ZXI6CisgICAgIiIiQWJzdHJhY3Qgc2VydmVyIHJldHVybmVkIGJ5IGNyZWF0ZV9zZXJ2aWNlKCkuIiIiCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIlN0b3Agc2VydmluZy4gIFRoaXMgbGVhdmVzIGV4aXN0aW5nIGNvbm5lY3Rpb25zIG9wZW4uIiIiCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJDb3JvdXRpbmUgdG8gd2FpdCB1bnRpbCBzZXJ2aWNlIGlzIGNsb3NlZC4iIiIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQWJzdHJhY3RFdmVudExvb3A6CisgICAgIiIiQWJzdHJhY3QgZXZlbnQgbG9vcC4iIiIKKworICAgICMgUnVubmluZyBhbmQgc3RvcHBpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBkZWYgcnVuX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBzdG9wKCkgaXMgY2FsbGVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBhIEZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIGV2ZW50IGxvb3AgYXMgc29vbiBhcyByZWFzb25hYmxlLgorCisgICAgICAgIEV4YWN0bHkgaG93IHNvb24gdGhhdCBpcyBtYXkgZGVwZW5kIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0CisgICAgICAgIG5vIG1vcmUgSS9PIGNhbGxiYWNrcyBzaG91bGQgYmUgc2NoZWR1bGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBldmVudCBsb29wIGlzIGN1cnJlbnRseSBydW5uaW5nLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBsb29wLgorCisgICAgICAgIFRoZSBsb29wIHNob3VsZCBub3QgYmUgcnVubmluZy4KKworICAgICAgICBUaGlzIGlzIGlkZW1wb3RlbnQgYW5kIGlycmV2ZXJzaWJsZS4KKworICAgICAgICBObyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBvbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgc2NoZWR1bGluZyBjYWxsYmFja3MuICBBbGwgdGhlc2UgcmV0dXJuIEhhbmRsZXMuCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxfbGF0ZXIoMCwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhyZWFkcy4KKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE5ldHdvcmsgSS9PIG1ldGhvZHMgcmV0dXJuaW5nIEZ1dHVyZXMuCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUsCisgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUsIHJldXNlX2FkZHJlc3M9Tm9uZSk6CisgICAgICAgICIiIkEgY29yb3V0aW5lIHdoaWNoIGNyZWF0ZXMgYSBUQ1Agc2VydmVyIGJvdW5kIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIFNlcnZlciBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgICAgICB0aGUgc2VydmljZS4KKworICAgICAgICBJZiBob3N0IGlzIGFuIGVtcHR5IHN0cmluZyBvciBOb25lIGFsbCBpbnRlcmZhY2VzIGFyZSBhc3N1bWVkCisgICAgICAgIGFuZCBhIGxpc3Qgb2YgbXVsdGlwbGUgc29ja2V0cyB3aWxsIGJlIHJldHVybmVkIChtb3N0IGxpa2VseQorICAgICAgICBvbmUgZm9yIElQdjQgYW5kIGFub3RoZXIgb25lIGZvciBJUHY2KS4KKworICAgICAgICBmYW1pbHkgY2FuIGJlIHNldCB0byBlaXRoZXIgQUZfSU5FVCBvciBBRl9JTkVUNiB0byBmb3JjZSB0aGUKKyAgICAgICAgc29ja2V0IHRvIHVzZSBJUHY0IG9yIElQdjYuIElmIG5vdCBzZXQgaXQgd2lsbCBiZSBkZXRlcm1pbmVkCisgICAgICAgIGZyb20gaG9zdCAoZGVmYXVsdHMgdG8gQUZfVU5TUEVDKS4KKworICAgICAgICBmbGFncyBpcyBhIGJpdG1hc2sgZm9yIGdldGFkZHJpbmZvKCkuCisKKyAgICAgICAgc29jayBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gdXNlIGEgcHJlZXhpc3RpbmcKKyAgICAgICAgc29ja2V0IG9iamVjdC4KKworICAgICAgICBiYWNrbG9nIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29ubmVjdGlvbnMgcGFzc2VkIHRvCisgICAgICAgIGxpc3RlbigpIChkZWZhdWx0cyB0byAxMDApLgorCisgICAgICAgIHNzbCBjYW4gYmUgc2V0IHRvIGFuIFNTTENvbnRleHQgdG8gZW5hYmxlIFNTTCBvdmVyIHRoZQorICAgICAgICBhY2NlcHRlZCBjb25uZWN0aW9ucy4KKworICAgICAgICByZXVzZV9hZGRyZXNzIHRlbGxzIHRoZSBrZXJuZWwgdG8gcmV1c2UgYSBsb2NhbCBzb2NrZXQgaW4KKyAgICAgICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgICAgICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgICAgICBVTklYLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCByZW1vdGVfYWRkcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFBpcGVzIGFuZCBzdWJwcm9jZXNzZXMuCisKKyAgICBkZWYgY29ubmVjdF9yZWFkX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIHJlYWQgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggUHJvdG9jb2wgaW50ZXJmYWNlLgorICAgICAgICBwaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgICAgICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydAorICAgICAgICBSZWFkVHJhbnNwb3J0IEFCQyIiIgorICAgICAgICAjIFRoZSByZWFzb24gdG8gYWNjZXB0IGZpbGUtbGlrZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAjIGlzOiB3ZSBuZWVkIHRvIG93biBwaXBlIGFuZCBjbG9zZSBpdCBhdCB0cmFuc3BvcnQgZmluaXNoaW5nCisgICAgICAgICMgQ2FuIGdvdCBjb21wbGljYXRlZCBlcnJvcnMgaWYgcGFzcyBmLmZpbGVubygpLAorICAgICAgICAjIGNsb3NlIGZkIGluIHBpcGUgdHJhbnNwb3J0IHRoZW4gY2xvc2UgZiBhbmQgdmlzZSB2ZXJzYS4KKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNvbm5lY3Rfd3JpdGVfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgd3JpdGUgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggQmFzZVByb3RvY29sIGludGVyZmFjZS4KKyAgICAgICAgUGlwZSBpcyBmaWxlLWxpa2Ugb2JqZWN0IGFscmVhZHkgc3dpdGNoZWQgdG8gbm9uYmxvY2tpbmcuCisgICAgICAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnQKKyAgICAgICAgV3JpdGVUcmFuc3BvcnQgQUJDIiIiCisgICAgICAgICMgVGhlIHJlYXNvbiB0byBhY2NlcHQgZmlsZS1saWtlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3QgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaXM6IHdlIG5lZWQgdG8gb3duIHBpcGUgYW5kIGNsb3NlIGl0IGF0IHRyYW5zcG9ydCBmaW5pc2hpbmcKKyAgICAgICAgIyBDYW4gZ290IGNvbXBsaWNhdGVkIGVycm9ycyBpZiBwYXNzIGYuZmlsZW5vKCksCisgICAgICAgICMgY2xvc2UgZmQgaW4gcGlwZSB0cmFuc3BvcnQgdGhlbiBjbG9zZSBmIGFuZCB2aXNlIHZlcnNhLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN1YnByb2Nlc3NfZXhlYyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCAqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBSZWFkeS1iYXNlZCBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4KKyAgICAjIFRoZSBhZGRfKigpIG1ldGhvZHMgcmV0dXJuIE5vbmUuCisgICAgIyBUaGUgcmVtb3ZlXyooKSBtZXRob2RzIHJldHVybiBUcnVlIGlmIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCwKKyAgICAjIEZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRlbGV0ZS4KKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ29tcGxldGlvbiBiYXNlZCBJL08gbWV0aG9kcyByZXR1cm5pbmcgRnV0dXJlcy4KKworICAgIGRlZiBzb2NrX3JlY3Yoc2VsZiwgc29jaywgbmJ5dGVzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfY29ubmVjdChzZWxmLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFNpZ25hbCBoYW5kbGluZy4KKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeToKKyAgICAiIiJBYnN0cmFjdCBwb2xpY3kgZm9yIGFjY2Vzc2luZyB0aGUgZXZlbnQgbG9vcC4iIiIKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ2hpbGQgcHJvY2Vzc2VzIGhhbmRsaW5nIChVbml4IG9ubHkpLgorCisgICAgZGVmIGdldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9jaGlsZF93YXRjaGVyKHNlbGYsIHdhdGNoZXIpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEJhc2VEZWZhdWx0RXZlbnRMb29wUG9saWN5KEFic3RyYWN0RXZlbnRMb29wUG9saWN5KToKKyAgICAiIiJEZWZhdWx0IHBvbGljeSBpbXBsZW1lbnRhdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBldmVudCBsb29wLgorCisgICAgSW4gdGhpcyBwb2xpY3ksIGVhY2ggdGhyZWFkIGhhcyBpdHMgb3duIGV2ZW50IGxvb3AuICBIb3dldmVyLCB3ZQorICAgIG9ubHkgYXV0b21hdGljYWxseSBjcmVhdGUgYW4gZXZlbnQgbG9vcCBieSBkZWZhdWx0IGZvciB0aGUgbWFpbgorICAgIHRocmVhZDsgb3RoZXIgdGhyZWFkcyBieSBkZWZhdWx0IGhhdmUgbm8gZXZlbnQgbG9vcC4KKworICAgIE90aGVyIHBvbGljaWVzIG1heSBoYXZlIGRpZmZlcmVudCBydWxlcyAoZS5nLiBhIHNpbmdsZSBnbG9iYWwKKyAgICBldmVudCBsb29wLCBvciBhdXRvbWF0aWNhbGx5IGNyZWF0aW5nIGFuIGV2ZW50IGxvb3AgcGVyIHRocmVhZCwgb3IKKyAgICB1c2luZyBzb21lIG90aGVyIG5vdGlvbiBvZiBjb250ZXh0IHRvIHdoaWNoIGFuIGV2ZW50IGxvb3AgaXMKKyAgICBhc3NvY2lhdGVkKS4KKyAgICAiIiIKKworICAgIF9sb29wX2ZhY3RvcnkgPSBOb25lCisKKyAgICBjbGFzcyBfTG9jYWwodGhyZWFkaW5nLmxvY2FsKToKKyAgICAgICAgX2xvb3AgPSBOb25lCisgICAgICAgIF9zZXRfY2FsbGVkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9jYWwgPSBzZWxmLl9Mb2NhbCgpCisKKyAgICBkZWYgZ2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIG1heSBiZSBOb25lIG9yIGFuIGluc3RhbmNlIG9mIEV2ZW50TG9vcC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChzZWxmLl9sb2NhbC5fbG9vcCBpcyBOb25lIGFuZAorICAgICAgICAgICAgbm90IHNlbGYuX2xvY2FsLl9zZXRfY2FsbGVkIGFuZAorICAgICAgICAgICAgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgdGhyZWFkaW5nLl9NYWluVGhyZWFkKSk6CisgICAgICAgICAgICBzZWxmLl9sb2NhbC5fbG9vcCA9IHNlbGYubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBhc3NlcnQgc2VsZi5fbG9jYWwuX2xvb3AgaXMgbm90IE5vbmUsIFwKKyAgICAgICAgICAgICAgICgnVGhlcmUgaXMgbm8gY3VycmVudCBldmVudCBsb29wIGluIHRocmVhZCAlci4nICUKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbG9jYWwuX2xvb3AKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiU2V0IHRoZSBldmVudCBsb29wLiIiIgorICAgICAgICBzZWxmLl9sb2NhbC5fc2V0X2NhbGxlZCA9IFRydWUKKyAgICAgICAgYXNzZXJ0IGxvb3AgaXMgTm9uZSBvciBpc2luc3RhbmNlKGxvb3AsIEFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICBzZWxmLl9sb2NhbC5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGV2ZW50IGxvb3AuCisKKyAgICAgICAgWW91IG11c3QgY2FsbCBzZXRfZXZlbnRfbG9vcCgpIHRvIG1ha2UgdGhpcyB0aGUgY3VycmVudCBldmVudAorICAgICAgICBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3BfZmFjdG9yeSgpCisKKworIyBFdmVudCBsb29wIHBvbGljeS4gIFRoZSBwb2xpY3kgaXRzZWxmIGlzIGFsd2F5cyBnbG9iYWwsIGV2ZW4gaWYgdGhlCisjIHBvbGljeSdzIHJ1bGVzIHNheSB0aGF0IHRoZXJlIGlzIGFuIGV2ZW50IGxvb3AgcGVyIHRocmVhZCAob3Igb3RoZXIKKyMgbm90aW9uIG9mIGNvbnRleHQpLiAgVGhlIGRlZmF1bHQgcG9saWN5IGlzIGluc3RhbGxlZCBieSB0aGUgZmlyc3QKKyMgY2FsbCB0byBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS4KK19ldmVudF9sb29wX3BvbGljeSA9IE5vbmUKKworIyBMb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBvbi10aGUtZmx5IGNyZWF0aW9uIG9mIHRoZSBldmVudCBsb29wIHBvbGljeS4KK19sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisKK2RlZiBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgIGdsb2JhbCBfZXZlbnRfbG9vcF9wb2xpY3kKKyAgICB3aXRoIF9sb2NrOgorICAgICAgICBpZiBfZXZlbnRfbG9vcF9wb2xpY3kgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgRGVmYXVsdEV2ZW50TG9vcFBvbGljeQorICAgICAgICAgICAgX2V2ZW50X2xvb3BfcG9saWN5ID0gRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKworZGVmIGdldF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgICIiIlhYWCIiIgorICAgIGlmIF9ldmVudF9sb29wX3BvbGljeSBpcyBOb25lOgorICAgICAgICBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgcmV0dXJuIF9ldmVudF9sb29wX3BvbGljeQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KToKKyAgICAiIiJYWFgiIiIKKyAgICBnbG9iYWwgX2V2ZW50X2xvb3BfcG9saWN5CisgICAgYXNzZXJ0IHBvbGljeSBpcyBOb25lIG9yIGlzaW5zdGFuY2UocG9saWN5LCBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeSkKKyAgICBfZXZlbnRfbG9vcF9wb2xpY3kgPSBwb2xpY3kKKworCitkZWYgZ2V0X2V2ZW50X2xvb3AoKToKKyAgICAiIiJYWFgiIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2V2ZW50X2xvb3AoKQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcChsb29wKToKKyAgICAiIiJYWFgiIiIKKyAgICBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfZXZlbnRfbG9vcChsb29wKQorCisKK2RlZiBuZXdfZXZlbnRfbG9vcCgpOgorICAgICIiIlhYWCIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5uZXdfZXZlbnRfbG9vcCgpCisKKworZGVmIGdldF9jaGlsZF93YXRjaGVyKCk6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9jaGlsZF93YXRjaGVyKCkKKworCitkZWYgc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcik6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9mdXR1cmVzLnB5IGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDNlNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpAQCAtMCwwICsxLDM0MyBAQAorIiIiQSBGdXR1cmUgY2xhc3Mgc2ltaWxhciB0byB0aGUgb25lIGluIFBFUCAzMTQ4LiIiIgorCitfX2FsbF9fID0gWydDYW5jZWxsZWRFcnJvcicsICdUaW1lb3V0RXJyb3InLAorICAgICAgICAgICAnSW52YWxpZFN0YXRlRXJyb3InLAorICAgICAgICAgICAnRnV0dXJlJywgJ3dyYXBfZnV0dXJlJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzLl9iYXNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRyYWNlYmFjaworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworIyBTdGF0ZXMgZm9yIEZ1dHVyZS4KK19QRU5ESU5HID0gJ1BFTkRJTkcnCitfQ0FOQ0VMTEVEID0gJ0NBTkNFTExFRCcKK19GSU5JU0hFRCA9ICdGSU5JU0hFRCcKKworIyBUT0RPOiBEbyB3ZSByZWFsbHkgd2FudCB0byBkZXBlbmQgb24gY29uY3VycmVudC5mdXR1cmVzIGludGVybmFscz8KK0Vycm9yID0gY29uY3VycmVudC5mdXR1cmVzLl9iYXNlLkVycm9yCitDYW5jZWxsZWRFcnJvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcgorVGltZW91dEVycm9yID0gY29uY3VycmVudC5mdXR1cmVzLlRpbWVvdXRFcnJvcgorCitTVEFDS19ERUJVRyA9IGxvZ2dpbmcuREVCVUcgLSAxICAjIGhlYXZ5LWR1dHkgZGVidWdnaW5nCisKKworY2xhc3MgSW52YWxpZFN0YXRlRXJyb3IoRXJyb3IpOgorICAgICIiIlRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBzdGF0ZS4iIiIKKyAgICAjIFRPRE86IFNob3cgdGhlIGZ1dHVyZSwgaXRzIHN0YXRlLCB0aGUgbWV0aG9kLCBhbmQgdGhlIHJlcXVpcmVkIHN0YXRlLgorCisKK2NsYXNzIF9UcmFjZWJhY2tMb2dnZXI6CisgICAgIiIiSGVscGVyIHRvIGxvZyBhIHRyYWNlYmFjayB1cG9uIGRlc3RydWN0aW9uIGlmIG5vdCBjbGVhcmVkLgorCisgICAgVGhpcyBzb2x2ZXMgYSBuYXN0eSBwcm9ibGVtIHdpdGggRnV0dXJlcyBhbmQgVGFza3MgdGhhdCBoYXZlIGFuCisgICAgZXhjZXB0aW9uIHNldDogaWYgbm9ib2R5IGFza3MgZm9yIHRoZSBleGNlcHRpb24sIHRoZSBleGNlcHRpb24gaXMKKyAgICBuZXZlciBsb2dnZWQuICBUaGlzIHZpb2xhdGVzIHRoZSBaZW4gb2YgUHl0aG9uOiAnRXJyb3JzIHNob3VsZAorICAgIG5ldmVyIHBhc3Mgc2lsZW50bHkuICBVbmxlc3MgZXhwbGljaXRseSBzaWxlbmNlZC4nCisKKyAgICBIb3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIGxvZyB0aGUgZXhjZXB0aW9uIGFzIHNvb24gYXMKKyAgICBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkOiBpZiB0aGUgY2FsbGluZyBjb2RlIGlzIHdyaXR0ZW4KKyAgICBwcm9wZXJseSwgaXQgd2lsbCBnZXQgdGhlIGV4Y2VwdGlvbiBhbmQgaGFuZGxlIGl0IHByb3Blcmx5LiAgQnV0CisgICAgd2UgKmRvKiB3YW50IHRvIGxvZyBpdCBpZiByZXN1bHQoKSBvciBleGNlcHRpb24oKSB3YXMgbmV2ZXIgY2FsbGVkCisgICAgLS0gb3RoZXJ3aXNlIGRldmVsb3BlcnMgd2FzdGUgYSBsb3Qgb2YgdGltZSB3b25kZXJpbmcgd2h5IHRoZWlyCisgICAgYnVnZ3kgY29kZSBmYWlscyBzaWxlbnRseS4KKworICAgIEFuIGVhcmxpZXIgYXR0ZW1wdCBhZGRlZCBhIF9fZGVsX18oKSBtZXRob2QgdG8gdGhlIEZ1dHVyZSBjbGFzcworICAgIGl0c2VsZiwgYnV0IHRoaXMgYmFja2ZpcmVkIGJlY2F1c2UgdGhlIHByZXNlbmNlIG9mIF9fZGVsX18oKQorICAgIHByZXZlbnRzIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGJyZWFraW5nIGN5Y2xlcy4gIEEgd2F5IG91dCBvZgorICAgIHRoaXMgY2F0Y2gtMjIgaXMgdG8gYXZvaWQgaGF2aW5nIGEgX19kZWxfXygpIG1ldGhvZCBvbiB0aGUgRnV0dXJlCisgICAgY2xhc3MgaXRzZWxmLCBidXQgaW5zdGVhZCB0byBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgaGVscGVyIG9iamVjdAorICAgIHdpdGggYSBfX2RlbF9fKCkgbWV0aG9kIHRoYXQgbG9ncyB0aGUgdHJhY2ViYWNrLCB3aGVyZSB3ZSBlbnN1cmUKKyAgICB0aGF0IHRoZSBoZWxwZXIgb2JqZWN0IGRvZXNuJ3QgcGFydGljaXBhdGUgaW4gY3ljbGVzLCBhbmQgb25seSB0aGUKKyAgICBGdXR1cmUgaGFzIGEgcmVmZXJlbmNlIHRvIGl0LgorCisgICAgVGhlIGhlbHBlciBvYmplY3QgaXMgYWRkZWQgd2hlbiBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkLiAgV2hlbgorICAgIHRoZSBGdXR1cmUgaXMgY29sbGVjdGVkLCBhbmQgdGhlIGhlbHBlciBpcyBwcmVzZW50LCB0aGUgaGVscGVyCisgICAgb2JqZWN0IGlzIGFsc28gY29sbGVjdGVkLCBhbmQgaXRzIF9fZGVsX18oKSBtZXRob2Qgd2lsbCBsb2cgdGhlCisgICAgdHJhY2ViYWNrLiAgV2hlbiB0aGUgRnV0dXJlJ3MgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkgbWV0aG9kIGlzCisgICAgY2FsbGVkIChhbmQgYSBoZWxwZXIgb2JqZWN0IGlzIHByZXNlbnQpLCBpdCByZW1vdmVzIHRoZSB0aGUgaGVscGVyCisgICAgb2JqZWN0LCBhZnRlciBjYWxsaW5nIGl0cyBjbGVhcigpIG1ldGhvZCB0byBwcmV2ZW50IGl0IGZyb20KKyAgICBsb2dnaW5nLgorCisgICAgT25lIGRvd25zaWRlIGlzIHRoYXQgd2UgZG8gYSBmYWlyIGFtb3VudCBvZiB3b3JrIHRvIGV4dHJhY3QgdGhlCisgICAgdHJhY2ViYWNrIGZyb20gdGhlIGV4Y2VwdGlvbiwgZXZlbiB3aGVuIGl0IGlzIG5ldmVyIGxvZ2dlZC4gIEl0CisgICAgd291bGQgc2VlbSBjaGVhcGVyIHRvIGp1c3Qgc3RvcmUgdGhlIGV4Y2VwdGlvbiBvYmplY3QsIGJ1dCB0aGF0CisgICAgcmVmZXJlbmNlcyB0aGUgdHJhY2ViYWNrLCB3aGljaCByZWZlcmVuY2VzIHN0YWNrIGZyYW1lcywgd2hpY2ggbWF5CisgICAgcmVmZXJlbmNlIHRoZSBGdXR1cmUsIHdoaWNoIHJlZmVyZW5jZXMgdGhlIF9UcmFjZWJhY2tMb2dnZXIsIGFuZAorICAgIHRoZW4gdGhlIF9UcmFjZWJhY2tMb2dnZXIgd291bGQgYmUgaW5jbHVkZWQgaW4gYSBjeWNsZSwgd2hpY2ggaXMKKyAgICB3aGF0IHdlJ3JlIHRyeWluZyB0byBhdm9pZCEgIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgZG9uJ3QKKyAgICBpbW1lZGlhdGVseSBmb3JtYXQgdGhlIGV4Y2VwdGlvbjsgd2Ugb25seSBkbyB0aGUgd29yayB3aGVuCisgICAgYWN0aXZhdGUoKSBpcyBjYWxsZWQsIHdoaWNoIGNhbGwgaXMgZGVsYXllZCB1bnRpbCBhZnRlciBhbGwgdGhlCisgICAgRnV0dXJlJ3MgY2FsbGJhY2tzIGhhdmUgcnVuLiAgU2luY2UgdXN1YWxseSBhIEZ1dHVyZSBoYXMgYXQgbGVhc3QKKyAgICBvbmUgY2FsbGJhY2sgKHR5cGljYWxseSBzZXQgYnkgJ3lpZWxkIGZyb20nKSBhbmQgdXN1YWxseSB0aGF0CisgICAgY2FsbGJhY2sgZXh0cmFjdHMgdGhlIGNhbGxiYWNrLCB0aGVyZWJ5IHJlbW92aW5nIHRoZSBuZWVkIHRvCisgICAgZm9ybWF0IHRoZSBleGNlcHRpb24uCisKKyAgICBQUy4gSSBkb24ndCBjbGFpbSBjcmVkaXQgZm9yIHRoaXMgc29sdXRpb24uICBJIGZpcnN0IGhlYXJkIG9mIGl0CisgICAgaW4gYSBkaXNjdXNzaW9uIGFib3V0IGNsb3NpbmcgZmlsZXMgd2hlbiB0aGV5IGFyZSBjb2xsZWN0ZWQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ2V4YycsICd0YiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5leGMgPSBleGMKKyAgICAgICAgc2VsZi50YiA9IE5vbmUKKworICAgIGRlZiBhY3RpdmF0ZShzZWxmKToKKyAgICAgICAgZXhjID0gc2VsZi5leGMKKyAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5leGMgPSBOb25lCisgICAgICAgICAgICBzZWxmLnRiID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oZXhjLl9fY2xhc3NfXywgZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy5fX3RyYWNlYmFja19fKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLmV4YyA9IE5vbmUKKyAgICAgICAgc2VsZi50YiA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRiOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGdXR1cmUvVGFzayBleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZDpcbiVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKHNlbGYudGIpKQorCisKK2NsYXNzIEZ1dHVyZToKKyAgICAiIiJUaGlzIGNsYXNzIGlzICphbG1vc3QqIGNvbXBhdGlibGUgd2l0aCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLgorCisgICAgRGlmZmVyZW5jZXM6CisKKyAgICAtIHJlc3VsdCgpIGFuZCBleGNlcHRpb24oKSBkbyBub3QgdGFrZSBhIHRpbWVvdXQgYXJndW1lbnQgYW5kCisgICAgICByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgZnV0dXJlIGlzbid0IGRvbmUgeWV0LgorCisgICAgLSBDYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGFkZF9kb25lX2NhbGxiYWNrKCkgYXJlIGFsd2F5cyBjYWxsZWQKKyAgICAgIHZpYSB0aGUgZXZlbnQgbG9vcCdzIGNhbGxfc29vbl90aHJlYWRzYWZlKCkuCisKKyAgICAtIFRoaXMgY2xhc3MgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgd2FpdCgpIGFuZCBhc19jb21wbGV0ZWQoKQorICAgICAgbWV0aG9kcyBpbiB0aGUgY29uY3VycmVudC5mdXR1cmVzIHBhY2thZ2UuCisKKyAgICAoSW4gUHl0aG9uIDMuNCBvciBsYXRlciB3ZSBtYXkgYmUgYWJsZSB0byB1bmlmeSB0aGUgaW1wbGVtZW50YXRpb25zLikKKyAgICAiIiIKKworICAgICMgQ2xhc3MgdmFyaWFibGVzIHNlcnZpbmcgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIHZhcmlhYmxlcy4KKyAgICBfc3RhdGUgPSBfUEVORElORworICAgIF9yZXN1bHQgPSBOb25lCisgICAgX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICBfbG9vcCA9IE5vbmUKKworICAgIF9ibG9ja2luZyA9IEZhbHNlICAjIHByb3BlciB1c2Ugb2YgZnV0dXJlICh5aWVsZCB2cyB5aWVsZCBmcm9tKQorCisgICAgX3RiX2xvZ2dlciA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJJbml0aWFsaXplIHRoZSBmdXR1cmUuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsIGV2ZW50X2xvb3AgYXJndW1lbnQgYWxsb3dzIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSBldmVudAorICAgICAgICBsb29wIG9iamVjdCB1c2VkIGJ5IHRoZSBmdXR1cmUuIElmIGl0J3Mgbm90IHByb3ZpZGVkLCB0aGUgZnV0dXJlIHVzZXMKKyAgICAgICAgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0ZJTklTSEVEOgorICAgICAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlcyArPSAnPGV4Y2VwdGlvbj17IXJ9PicuZm9ybWF0KHNlbGYuX2V4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8cmVzdWx0PXshcn0+Jy5mb3JtYXQoc2VsZi5fcmVzdWx0KQorICAgICAgICBlbGlmIHNlbGYuX2NhbGxiYWNrczoKKyAgICAgICAgICAgIHNpemUgPSBsZW4oc2VsZi5fY2FsbGJhY2tzKQorICAgICAgICAgICAgaWYgc2l6ZSA+IDI6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8e30sIFt7fSwgPHt9IG1vcmU+LCB7fV0+Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlLCBzZWxmLl9jYWxsYmFja3NbMF0sCisgICAgICAgICAgICAgICAgICAgIHNpemUtMiwgc2VsZi5fY2FsbGJhY2tzWy0xXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8e30sIHt9PicuZm9ybWF0KHNlbGYuX3N0YXRlLCBzZWxmLl9jYWxsYmFja3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMgKz0gJzx7fT4nLmZvcm1hdChzZWxmLl9zdGF0ZSkKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQ2FuY2VsIHRoZSBmdXR1cmUgYW5kIHNjaGVkdWxlIGNhbGxiYWNrcy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSBvciBjYW5jZWxsZWQsIHJldHVybiBGYWxzZS4gIE90aGVyd2lzZSwKKyAgICAgICAgY2hhbmdlIHRoZSBmdXR1cmUncyBzdGF0ZSB0byBjYW5jZWxsZWQsIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5kCisgICAgICAgIHJldHVybiBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfQ0FOQ0VMTEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3NjaGVkdWxlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IEFzayB0aGUgZXZlbnQgbG9vcCB0byBjYWxsIGFsbCBjYWxsYmFja3MuCisKKyAgICAgICAgVGhlIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiBBbHNvCisgICAgICAgIGNsZWFycyB0aGUgY2FsbGJhY2sgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGNhbGxiYWNrcyA9IHNlbGYuX2NhbGxiYWNrc1s6XQorICAgICAgICBpZiBub3QgY2FsbGJhY2tzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzWzpdID0gW10KKyAgICAgICAgZm9yIGNhbGxiYWNrIGluIGNhbGxiYWNrczoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCBzZWxmKQorCisgICAgZGVmIGNhbmNlbGxlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRAorCisgICAgIyBEb24ndCBpbXBsZW1lbnQgcnVubmluZygpOyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE4Njk5CisKKyAgICBkZWYgZG9uZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIERvbmUgbWVhbnMgZWl0aGVyIHRoYXQgYSByZXN1bHQgLyBleGNlcHRpb24gYXJlIGF2YWlsYWJsZSwgb3IgdGhhdCB0aGUKKyAgICAgICAgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkcKKworICAgIGRlZiByZXN1bHQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVzdWx0IHRoaXMgZnV0dXJlIHJlcHJlc2VudHMuCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcyBDYW5jZWxsZWRFcnJvci4gIElmIHRoZQorICAgICAgICBmdXR1cmUncyByZXN1bHQgaXNuJ3QgeWV0IGF2YWlsYWJsZSwgcmFpc2VzIEludmFsaWRTdGF0ZUVycm9yLiAgSWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lIGFuZCBoYXMgYW4gZXhjZXB0aW9uIHNldCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdSZXN1bHQgaXMgbm90IHJlYWR5LicpCisgICAgICAgIGlmIHNlbGYuX3RiX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0CisKKyAgICBkZWYgZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBzZXQgb24gdGhpcyBmdXR1cmUuCisKKyAgICAgICAgVGhlIGV4Y2VwdGlvbiAob3IgTm9uZSBpZiBubyBleGNlcHRpb24gd2FzIHNldCkgaXMgcmV0dXJuZWQgb25seSBpZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUuICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzCisgICAgICAgIENhbmNlbGxlZEVycm9yLiAgSWYgdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdFeGNlcHRpb24gaXMgbm90IHNldC4nKQorICAgICAgICBpZiBzZWxmLl90Yl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uCisKKyAgICBkZWYgYWRkX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAiIiJBZGQgYSBjYWxsYmFjayB0byBiZSBydW4gd2hlbiB0aGUgZnV0dXJlIGJlY29tZXMgZG9uZS4KKworICAgICAgICBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgZnV0dXJlIG9iamVjdC4gSWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIGlzIGNhbGxlZCwgdGhlIGNhbGxiYWNrIGlzCisgICAgICAgIHNjaGVkdWxlZCB3aXRoIGNhbGxfc29vbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oZm4sIHNlbGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFja3MuYXBwZW5kKGZuKQorCisgICAgIyBOZXcgbWV0aG9kIG5vdCBpbiBQRVAgMzE0OC4KKworICAgIGRlZiByZW1vdmVfZG9uZV9jYWxsYmFjayhzZWxmLCBmbik6CisgICAgICAgICIiIlJlbW92ZSBhbGwgaW5zdGFuY2VzIG9mIGEgY2FsbGJhY2sgZnJvbSB0aGUgImNhbGwgd2hlbiBkb25lIiBsaXN0LgorCisgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBjYWxsYmFja3MgcmVtb3ZlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbHRlcmVkX2NhbGxiYWNrcyA9IFtmIGZvciBmIGluIHNlbGYuX2NhbGxiYWNrcyBpZiBmICE9IGZuXQorICAgICAgICByZW1vdmVkX2NvdW50ID0gbGVuKHNlbGYuX2NhbGxiYWNrcykgLSBsZW4oZmlsdGVyZWRfY2FsbGJhY2tzKQorICAgICAgICBpZiByZW1vdmVkX2NvdW50OgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2tzWzpdID0gZmlsdGVyZWRfY2FsbGJhY2tzCisgICAgICAgIHJldHVybiByZW1vdmVkX2NvdW50CisKKyAgICAjIFNvLWNhbGxlZCBpbnRlcm5hbCBtZXRob2RzIChub3RlOiBubyBzZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VsKCkpLgorCisgICAgZGVmIHNldF9yZXN1bHQoc2VsZiwgcmVzdWx0KToKKyAgICAgICAgIiIiTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBpdHMgcmVzdWx0LgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgICAgSW52YWxpZFN0YXRlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCd7fTogeyFyfScuZm9ybWF0KHNlbGYuX3N0YXRlLCBzZWxmKSkKKyAgICAgICAgc2VsZi5fcmVzdWx0ID0gcmVzdWx0CisgICAgICAgIHNlbGYuX3N0YXRlID0gX0ZJTklTSEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24pOgorICAgICAgICAiIiJNYXJrIHRoZSBmdXR1cmUgZG9uZSBhbmQgc2V0IGFuIGV4Y2VwdGlvbi4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcigne306IHshcn0nLmZvcm1hdChzZWxmLl9zdGF0ZSwgc2VsZikpCisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbgorICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBfVHJhY2ViYWNrTG9nZ2VyKGV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfRklOSVNIRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKyAgICAgICAgIyBBcnJhbmdlIGZvciB0aGUgbG9nZ2VyIHRvIGJlIGFjdGl2YXRlZCBhZnRlciBhbGwgY2FsbGJhY2tzCisgICAgICAgICMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gY2FsbCByZXN1bHQoKSBvciBleGNlcHRpb24oKS4KKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fdGJfbG9nZ2VyLmFjdGl2YXRlKQorCisgICAgIyBUcnVseSBpbnRlcm5hbCBtZXRob2RzLgorCisgICAgZGVmIF9jb3B5X3N0YXRlKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRvIGNvcHkgc3RhdGUgZnJvbSBhbm90aGVyIEZ1dHVyZS4KKworICAgICAgICBUaGUgb3RoZXIgRnV0dXJlIG1heSBiZSBhIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgb3RoZXIuZG9uZSgpCisgICAgICAgIGlmIHNlbGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRvbmUoKQorICAgICAgICBpZiBvdGhlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IG90aGVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICBpZiBleGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3RoZXIucmVzdWx0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXN1bHQocmVzdWx0KQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9ibG9ja2luZyA9IFRydWUKKyAgICAgICAgICAgIHlpZWxkIHNlbGYgICMgVGhpcyB0ZWxscyBUYXNrIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24uCisgICAgICAgIGFzc2VydCBzZWxmLmRvbmUoKSwgInlpZWxkIGZyb20gd2Fzbid0IHVzZWQgd2l0aCBmdXR1cmUiCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdCgpICAjIE1heSByYWlzZSB0b28uCisKKworZGVmIHdyYXBfZnV0dXJlKGZ1dCwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgb2JqZWN0LiIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnV0LCBGdXR1cmUpOgorICAgICAgICByZXR1cm4gZnV0CisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZnV0LCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKSwgXAorICAgICAgICAnY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSBpcyBleHBlY3RlZCwgZ290IHshcn0nLmZvcm1hdChmdXQpCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBuZXdfZnV0dXJlID0gRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfY2hlY2tfY2FuY2VsX290aGVyKGYpOgorICAgICAgICBpZiBmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgZnV0LmNhbmNlbCgpCisKKyAgICBuZXdfZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKF9jaGVja19jYW5jZWxfb3RoZXIpCisgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKAorICAgICAgICBsYW1iZGEgZnV0dXJlOiBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKAorICAgICAgICAgICAgbmV3X2Z1dHVyZS5fY29weV9zdGF0ZSwgZnV0KSkKKyAgICByZXR1cm4gbmV3X2Z1dHVyZQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vbG9ja3MucHkgYi9MaWIvYXN5bmNpby9sb2Nrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQ1OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vbG9ja3MucHkKQEAgLTAsMCArMSw0MzMgQEAKKyIiIlN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiIiIgorCitfX2FsbF9fID0gWydMb2NrJywgJ0V2ZW50JywgJ0NvbmRpdGlvbicsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCisKKworY2xhc3MgTG9jazoKKyAgICAiIiJQcmltaXRpdmUgbG9jayBvYmplY3RzLgorCisgICAgQSBwcmltaXRpdmUgbG9jayBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgdGhhdCBpcyBub3Qgb3duZWQKKyAgICBieSBhIHBhcnRpY3VsYXIgY29yb3V0aW5lIHdoZW4gbG9ja2VkLiAgQSBwcmltaXRpdmUgbG9jayBpcyBpbiBvbmUKKyAgICBvZiB0d28gc3RhdGVzLCAnbG9ja2VkJyBvciAndW5sb2NrZWQnLgorCisgICAgSXQgaXMgY3JlYXRlZCBpbiB0aGUgdW5sb2NrZWQgc3RhdGUuICBJdCBoYXMgdHdvIGJhc2ljIG1ldGhvZHMsCisgICAgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkuICBXaGVuIHRoZSBzdGF0ZSBpcyB1bmxvY2tlZCwgYWNxdWlyZSgpCisgICAgY2hhbmdlcyB0aGUgc3RhdGUgdG8gbG9ja2VkIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUKKyAgICBzdGF0ZSBpcyBsb2NrZWQsIGFjcXVpcmUoKSBibG9ja3MgdW50aWwgYSBjYWxsIHRvIHJlbGVhc2UoKSBpbgorICAgIGFub3RoZXIgY29yb3V0aW5lIGNoYW5nZXMgaXQgdG8gdW5sb2NrZWQsIHRoZW4gdGhlIGFjcXVpcmUoKSBjYWxsCisgICAgcmVzZXRzIGl0IHRvIGxvY2tlZCBhbmQgcmV0dXJucy4gIFRoZSByZWxlYXNlKCkgbWV0aG9kIHNob3VsZCBvbmx5CisgICAgYmUgY2FsbGVkIGluIHRoZSBsb2NrZWQgc3RhdGU7IGl0IGNoYW5nZXMgdGhlIHN0YXRlIHRvIHVubG9ja2VkCisgICAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbgorICAgIHVubG9ja2VkIGxvY2ssIGEgUnVudGltZUVycm9yIHdpbGwgYmUgcmFpc2VkLgorCisgICAgV2hlbiBtb3JlIHRoYW4gb25lIGNvcm91dGluZSBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSB3YWl0aW5nIGZvcgorICAgIHRoZSBzdGF0ZSB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSBjb3JvdXRpbmUgcHJvY2VlZHMgd2hlbiBhCisgICAgcmVsZWFzZSgpIGNhbGwgcmVzZXRzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZDsgZmlyc3QgY29yb3V0aW5lIHdoaWNoCisgICAgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAgYWNxdWlyZSgpIGlzIGEgY29yb3V0aW5lIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggJ3lpZWxkIGZyb20nLgorCisgICAgTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICAnKHlpZWxkIGZyb20gbG9jayknCisgICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisKKyAgICBVc2FnZToKKworICAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgIC4uLgorICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgLi4uCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgQ29udGV4dCBtYW5hZ2VyIHVzYWdlOgorCisgICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAgLi4uCisgICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICAgLi4uCisKKyAgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZToKKworICAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKKyAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICMgbG9jayBpcyBhY3F1aXJlZAorICAgICAgICAgICAuLi4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYuX2xvY2tlZCBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiBsb2NrIGlzIGFjcXVpcmVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbG9ja2VkCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGFjcXVpcmUoc2VsZik6CisgICAgICAgICIiIkFjcXVpcmUgYSBsb2NrLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvCisgICAgICAgIGxvY2tlZCBhbmQgcmV0dXJucyBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlcnMgYW5kIG5vdCBzZWxmLl9sb2NrZWQ6CisgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICAiIiJSZWxlYXNlIGEgbG9jay4KKworICAgICAgICBXaGVuIHRoZSBsb2NrIGlzIGxvY2tlZCwgcmVzZXQgaXQgdG8gdW5sb2NrZWQsIGFuZCByZXR1cm4uCisgICAgICAgIElmIGFueSBvdGhlciBjb3JvdXRpbmVzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZQorICAgICAgICB1bmxvY2tlZCwgYWxsb3cgZXhhY3RseSBvbmUgb2YgdGhlbSB0byBwcm9jZWVkLgorCisgICAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gRmFsc2UKKyAgICAgICAgICAgICMgV2FrZSB1cCB0aGUgZmlyc3Qgd2FpdGVyIHdobyBpc24ndCBjYW5jZWxsZWQuCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0xvY2sgaXMgbm90IGFjcXVpcmVkLicpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gc2VsZgorCisKK2NsYXNzIEV2ZW50OgorICAgICIiIkFuIEV2ZW50IGltcGxlbWVudGF0aW9uLCBvdXIgZXF1aXZhbGVudCB0byB0aHJlYWRpbmcuRXZlbnQuCisKKyAgICBDbGFzcyBpbXBsZW1lbnRpbmcgZXZlbnQgb2JqZWN0cy4gQW4gZXZlbnQgbWFuYWdlcyBhIGZsYWcgdGhhdCBjYW4gYmUgc2V0CisgICAgdG8gdHJ1ZSB3aXRoIHRoZSBzZXQoKSBtZXRob2QgYW5kIHJlc2V0IHRvIGZhbHNlIHdpdGggdGhlIGNsZWFyKCkgbWV0aG9kLgorICAgIFRoZSB3YWl0KCkgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZyBpcyB0cnVlLiBUaGUgZmxhZyBpcyBpbml0aWFsbHkKKyAgICBmYWxzZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl92YWx1ZSA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdzZXQnIGlmIHNlbGYuX3ZhbHVlIGVsc2UgJ3Vuc2V0JworICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBpc19zZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorCisgICAgZGVmIHNldChzZWxmKToKKyAgICAgICAgIiIiU2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIHRydWUuIEFsbCBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIGl0IHRvCisgICAgICAgIGJlY29tZSB0cnVlIGFyZSBhd2FrZW5lZC4gQ29yb3V0aW5lIHRoYXQgY2FsbCB3YWl0KCkgb25jZSB0aGUgZmxhZyBpcworICAgICAgICB0cnVlIHdpbGwgbm90IGJsb2NrIGF0IGFsbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gVHJ1ZQorCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlc2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGNvcm91dGluZXMgY2FsbGluZworICAgICAgICB3YWl0KCkgd2lsbCBibG9jayB1bnRpbCBzZXQoKSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBpbnRlcm5hbCBmbGFnCisgICAgICAgIHRvIHRydWUgYWdhaW4uIiIiCisgICAgICAgIHNlbGYuX3ZhbHVlID0gRmFsc2UKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgdW50aWwgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgICAgICBJZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlIG9uIGVudHJ5LCByZXR1cm4gVHJ1ZQorICAgICAgICBpbW1lZGlhdGVseS4gIE90aGVyd2lzZSwgYmxvY2sgdW50aWwgYW5vdGhlciBjb3JvdXRpbmUgY2FsbHMKKyAgICAgICAgc2V0KCkgdG8gc2V0IHRoZSBmbGFnIHRvIHRydWUsIHRoZW4gcmV0dXJuIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisKK2NsYXNzIENvbmRpdGlvbjoKKyAgICAiIiJBIENvbmRpdGlvbiBpbXBsZW1lbnRhdGlvbiwgb3VyIGVxdWl2YWxlbnQgdG8gdGhyZWFkaW5nLkNvbmRpdGlvbi4KKworICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjb25kaXRpb24gdmFyaWFibGUgb2JqZWN0cy4gQSBjb25kaXRpb24gdmFyaWFibGUKKyAgICBhbGxvd3Mgb25lIG9yIG1vcmUgY29yb3V0aW5lcyB0byB3YWl0IHVudGlsIHRoZXkgYXJlIG5vdGlmaWVkIGJ5IGFub3RoZXIKKyAgICBjb3JvdXRpbmUuCisKKyAgICBBIG5ldyBMb2NrIG9iamVjdCBpcyBjcmVhdGVkIGFuZCB1c2VkIGFzIHRoZSB1bmRlcmx5aW5nIGxvY2suCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgICAgICAjIExvY2sgYXMgYW4gYXR0cmlidXRlIGFzIGluIHRocmVhZGluZy5Db25kaXRpb24uCisgICAgICAgIGxvY2sgPSBMb2NrKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKyAgICAgICAgIyBFeHBvcnQgdGhlIGxvY2sncyBsb2NrZWQoKSwgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkgbWV0aG9kcy4KKyAgICAgICAgc2VsZi5sb2NrZWQgPSBsb2NrLmxvY2tlZAorICAgICAgICBzZWxmLmFjcXVpcmUgPSBsb2NrLmFjcXVpcmUKKyAgICAgICAgc2VsZi5yZWxlYXNlID0gbG9jay5yZWxlYXNlCisKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGV4dHJhID0gJ2xvY2tlZCcgaWYgc2VsZi5sb2NrZWQoKSBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIldhaXQgdW50aWwgbm90aWZpZWQuCisKKyAgICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzCisgICAgICAgIG1ldGhvZCBpcyBjYWxsZWQsIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBUaGlzIG1ldGhvZCByZWxlYXNlcyB0aGUgdW5kZXJseWluZyBsb2NrLCBhbmQgdGhlbiBibG9ja3MKKyAgICAgICAgdW50aWwgaXQgaXMgYXdha2VuZWQgYnkgYSBub3RpZnkoKSBvciBub3RpZnlfYWxsKCkgY2FsbCBmb3IKKyAgICAgICAgdGhlIHNhbWUgY29uZGl0aW9uIHZhcmlhYmxlIGluIGFub3RoZXIgY29yb3V0aW5lLiAgT25jZQorICAgICAgICBhd2FrZW5lZCwgaXQgcmUtYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHJldHVybnMgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tlZCgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgd2FpdCBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBrZWVwX2xvY2sgPSBUcnVlCisgICAgICAgIHNlbGYucmVsZWFzZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgICAgICBleGNlcHQgR2VuZXJhdG9yRXhpdDoKKyAgICAgICAgICAgIGtlZXBfbG9jayA9IEZhbHNlICAjIFByZXZlbnQgeWllbGQgaW4gZmluYWxseSBjbGF1c2UuCisgICAgICAgICAgICByYWlzZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYga2VlcF9sb2NrOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgd2FpdF9mb3Ioc2VsZiwgcHJlZGljYXRlKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCBhIHByZWRpY2F0ZSBiZWNvbWVzIHRydWUuCisKKyAgICAgICAgVGhlIHByZWRpY2F0ZSBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCByZXN1bHQgd2lsbCBiZQorICAgICAgICBpbnRlcnByZXRlZCBhcyBhIGJvb2xlYW4gdmFsdWUuICBUaGUgZmluYWwgcHJlZGljYXRlIHZhbHVlIGlzCisgICAgICAgIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUoKQorICAgICAgICB3aGlsZSBub3QgcmVzdWx0OgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIG5vdGlmeShzZWxmLCBuPTEpOgorICAgICAgICAiIiJCeSBkZWZhdWx0LCB3YWtlIHVwIG9uZSBjb3JvdXRpbmUgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbiwgaWYgYW55LgorICAgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kCisgICAgICAgIGlzIGNhbGxlZCwgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHdha2VzIHVwIGF0IG1vc3QgbiBvZiB0aGUgY29yb3V0aW5lcyB3YWl0aW5nIGZvciB0aGUKKyAgICAgICAgY29uZGl0aW9uIHZhcmlhYmxlOyBpdCBpcyBhIG5vLW9wIGlmIG5vIGNvcm91dGluZXMgYXJlIHdhaXRpbmcuCisKKyAgICAgICAgTm90ZTogYW4gYXdha2VuZWQgY29yb3V0aW5lIGRvZXMgbm90IGFjdHVhbGx5IHJldHVybiBmcm9tIGl0cworICAgICAgICB3YWl0KCkgY2FsbCB1bnRpbCBpdCBjYW4gcmVhY3F1aXJlIHRoZSBsb2NrLiBTaW5jZSBub3RpZnkoKSBkb2VzCisgICAgICAgIG5vdCByZWxlYXNlIHRoZSBsb2NrLCBpdHMgY2FsbGVyIHNob3VsZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tlZCgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgbm90aWZ5IG9uIHVuLWFjcXVpcmVkIGxvY2snKQorCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgZm9yIGZ1dCBpbiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgaWYgaWR4ID49IG46CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChGYWxzZSkKKworICAgIGRlZiBub3RpZnlfYWxsKHNlbGYpOgorICAgICAgICAiIiJXYWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uIFRoaXMgbWV0aG9kIGFjdHMKKyAgICAgICAgbGlrZSBub3RpZnkoKSwgYnV0IHdha2VzIHVwIGFsbCB3YWl0aW5nIHRocmVhZHMgaW5zdGVhZCBvZiBvbmUuIElmIHRoZQorICAgICAgICBjYWxsaW5nIHRocmVhZCBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLAorICAgICAgICBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLm5vdGlmeShsZW4oc2VsZi5fd2FpdGVycykpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbG9jay5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19leGl0X18oKmFyZ3MpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworCitjbGFzcyBTZW1hcGhvcmU6CisgICAgIiIiQSBTZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgICBBIHNlbWFwaG9yZSBtYW5hZ2VzIGFuIGludGVybmFsIGNvdW50ZXIgd2hpY2ggaXMgZGVjcmVtZW50ZWQgYnkgZWFjaAorICAgIGFjcXVpcmUoKSBjYWxsIGFuZCBpbmNyZW1lbnRlZCBieSBlYWNoIHJlbGVhc2UoKSBjYWxsLiBUaGUgY291bnRlcgorICAgIGNhbiBuZXZlciBnbyBiZWxvdyB6ZXJvOyB3aGVuIGFjcXVpcmUoKSBmaW5kcyB0aGF0IGl0IGlzIHplcm8sIGl0IGJsb2NrcywKKyAgICB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxzIHJlbGVhc2UoKS4KKworICAgIFNlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisKKyAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgZ2l2ZXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBpbnRlcm5hbAorICAgIGNvdW50ZXI7IGl0IGRlZmF1bHRzIHRvIDEuIElmIHRoZSB2YWx1ZSBnaXZlbiBpcyBsZXNzIHRoYW4gMCwKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTZW1hcGhvcmUgaW5pdGlhbCB2YWx1ZSBtdXN0IGJlID49IDAiKQorICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2xvY2tlZCA9ICh2YWx1ZSA9PSAwKQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnbG9ja2VkJyBpZiBzZWxmLl9sb2NrZWQgZWxzZSAndW5sb2NrZWQsdmFsdWU6e30nLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlKQorICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBsb2NrZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiBzZW1hcGhvcmUgY2FuIG5vdCBiZSBhY3F1aXJlZCBpbW1lZGlhdGVseS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2tlZAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBhY3F1aXJlKHNlbGYpOgorICAgICAgICAiIiJBY3F1aXJlIGEgc2VtYXBob3JlLgorCisgICAgICAgIElmIHRoZSBpbnRlcm5hbCBjb3VudGVyIGlzIGxhcmdlciB0aGFuIHplcm8gb24gZW50cnksCisgICAgICAgIGRlY3JlbWVudCBpdCBieSBvbmUgYW5kIHJldHVybiBUcnVlIGltbWVkaWF0ZWx5LiAgSWYgaXQgaXMKKyAgICAgICAgemVybyBvbiBlbnRyeSwgYmxvY2ssIHdhaXRpbmcgdW50aWwgc29tZSBvdGhlciBjb3JvdXRpbmUgaGFzCisgICAgICAgIGNhbGxlZCByZWxlYXNlKCkgdG8gbWFrZSBpdCBsYXJnZXIgdGhhbiAwLCBhbmQgdGhlbiByZXR1cm4KKyAgICAgICAgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0ZXJzIGFuZCBzZWxmLl92YWx1ZSA+IDA6CisgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiUmVsZWFzZSBhIHNlbWFwaG9yZSwgaW5jcmVtZW50aW5nIHRoZSBpbnRlcm5hbCBjb3VudGVyIGJ5IG9uZS4KKyAgICAgICAgV2hlbiBpdCB3YXMgemVybyBvbiBlbnRyeSBhbmQgYW5vdGhlciBjb3JvdXRpbmUgaXMgd2FpdGluZyBmb3IgaXQgdG8KKyAgICAgICAgYmVjb21lIGxhcmdlciB0aGFuIHplcm8gYWdhaW4sIHdha2UgdXAgdGhhdCBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl92YWx1ZSArPSAxCisgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgIGZvciB3YWl0ZXIgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgVE9ETzogVGhpcyBpcyBxdWVzdGlvbmFibGUuICBIb3cgZG8gd2Uga25vdyB0aGUgdXNlciBhY3R1YWxseQorICAgICAgICAjIHdyb3RlICJ3aXRoICh5aWVsZCBmcm9tIHNlbWEpIiBpbnN0ZWFkIG9mICJ3aXRoIHNlbWEiPworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gc2VsZgorCisKK2NsYXNzIEJvdW5kZWRTZW1hcGhvcmUoU2VtYXBob3JlKToKKyAgICAiIiJBIGJvdW5kZWQgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorCisgICAgVGhpcyByYWlzZXMgVmFsdWVFcnJvciBpbiByZWxlYXNlKCkgaWYgaXQgd291bGQgaW5jcmVhc2UgdGhlIHZhbHVlCisgICAgYWJvdmUgdGhlIGluaXRpYWwgdmFsdWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fYm91bmRfdmFsdWUgPSB2YWx1ZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHZhbHVlLCBsb29wPWxvb3ApCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdmFsdWUgPj0gc2VsZi5fYm91bmRfdmFsdWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCb3VuZGVkU2VtYXBob3JlIHJlbGVhc2VkIHRvbyBtYW55IHRpbWVzJykKKyAgICAgICAgc3VwZXIoKS5yZWxlYXNlKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2xvZy5weSBiL0xpYi9hc3luY2lvL2xvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E3MDc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vbG9nLnB5CkBAIC0wLDAgKzEsNyBAQAorIiIiTG9nZ2luZyBjb25maWd1cmF0aW9uLiIiIgorCitpbXBvcnQgbG9nZ2luZworCisKKyMgTmFtZSB0aGUgbG9nZ2VyIGFmdGVyIHRoZSBwYWNrYWdlLgorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19wYWNrYWdlX18pCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMjZiOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDM2MCBAQAorIiIiRXZlbnQgbG9vcCB1c2luZyBhIHByb2FjdG9yIGFuZCByZWxhdGVkIGNsYXNzZXMuCisKK0EgcHJvYWN0b3IgaXMgYSAibm90aWZ5LW9uLWNvbXBsZXRpb24iIG11bHRpcGxleGVyLiAgQ3VycmVudGx5IGEKK3Byb2FjdG9yIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gV2luZG93cyB3aXRoIElPQ1AuCisiIiIKKworaW1wb3J0IHNvY2tldAorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbnN0YW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQodHJhbnNwb3J0cy5CYXNlVHJhbnNwb3J0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBwaXBlIGFuZCBzb2NrZXQgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fc2V0X2V4dHJhKHNvY2spCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX3NvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl93cml0ZV9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlICAjIFNldCB3aGVuIGNsb3NlKCkgY2FsbGVkLgorICAgICAgICBzZWxmLl9lb2Zfd3JpdHRlbiA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX3NlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlci5hdHRhY2goc2VsZikKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBfc2V0X2V4dHJhKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gc29jaworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXIgYW5kIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjKToKKyAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmF0YWwgZXJyb3IgZm9yICVzJywgc2VsZikKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorCisgICAgZGVmIF9mb3JjZV9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5jYW5jZWwoKQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBYWFggSWYgdGhlcmUgaXMgYSBwZW5kaW5nIG92ZXJsYXBwZWQgcmVhZCBvbiB0aGUgb3RoZXIKKyAgICAgICAgICAgICMgZW5kIHRoZW4gaXQgbWF5IGZhaWwgd2l0aCBFUlJPUl9ORVROQU1FX0RFTEVURUQgaWYgd2UKKyAgICAgICAgICAgICMganVzdCBjbG9zZSBvdXIgZW5kLiAgRmlyc3QgY2FsbGluZyBzaHV0ZG93bigpIHNlZW1zIHRvCisgICAgICAgICAgICAjIGN1cmUgaXQsIGJ1dCBtYXliZSB1c2luZyBEaXNjb25uZWN0RXgoKSB3b3VsZCBiZSBiZXR0ZXIuCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3NvY2ssICdzaHV0ZG93bicpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VydmVyID0gc2VsZi5fc2VydmVyCisgICAgICAgICAgICBpZiBzZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VydmVyLmRldGFjaChzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlciA9IE5vbmUKKworCitjbGFzcyBfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciByZWFkIHBpcGVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhLCBzZXJ2ZXIpCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wX3JlYWRpbmcpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9jbG9zaW5nLCAnQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGF1c2VkLCAnQWxyZWFkeSBwYXVzZWQnCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3BhdXNlZCwgJ05vdCBwYXVzZWQnCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fbG9vcF9yZWFkaW5nLCBzZWxmLl9yZWFkX2Z1dCkKKworICAgIGRlZiBfbG9vcF9yZWFkaW5nKHNlbGYsIGZ1dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9yZWFkX2Z1dCBpcyBmdXQgb3IgKHNlbGYuX3JlYWRfZnV0IGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZykKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgICAgICAgICBkYXRhID0gZnV0LnJlc3VsdCgpICAjIGRlbGl2ZXIgZGF0YSBsYXRlciBpbiAiZmluYWxseSIgY2xhdXNlCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgIyBzaW5jZSBjbG9zZSgpIGhhcyBiZWVuIGNhbGxlZCB3ZSBpZ25vcmUgYW55IHJlYWQgZGF0YQorICAgICAgICAgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGRhdGEgPT0gYicnOgorICAgICAgICAgICAgICAgICMgd2UgZ290IGVuZC1vZi1maWxlIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBleGNlcHQgQ29ubmVjdGlvblJlc2V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3BfcmVhZGluZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvckJhc2VQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuV3JpdGVUcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3Igd3JpdGUgcGlwZXMuIiIiCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKSwgcmVwcihkYXRhKQorICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ3dyaXRlX2VvZigpIGFscmVhZHkgY2FsbGVkJykKKworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3Bfd3JpdGluZygpCisKKyAgICBkZWYgX2xvb3Bfd3JpdGluZyhzZWxmLCBmPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3NlcnQgZiBpcyBzZWxmLl93cml0ZV9mdXQKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgZi5yZXN1bHQoKQorICAgICAgICAgICAgZGF0YSA9IGInJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnNlbmQoc2VsZi5fc29jaywgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3dyaXRpbmcpCisgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uUmVzZXRFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKworY2xhc3MgX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciBkdXBsZXggcGlwZXMuIiIiCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciBjb25uZWN0ZWQgc29ja2V0cy4iIiIKKworICAgIGRlZiBfc2V0X2V4dHJhKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9leHRyYVsnc29ja2V0J10gPSBzb2NrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrbmFtZSddID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmICdwZWVybmFtZScgbm90IGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gc29jay5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZyBvciBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9lb2Zfd3JpdHRlbiA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisKK2NsYXNzIEJhc2VQcm9hY3RvckV2ZW50TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9hY3Rvcik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHByb2FjdG9yOiAlcycsIHByb2FjdG9yLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IgPSBwcm9hY3RvcgorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHByb2FjdG9yICAgIyBjb252ZW5pZW50IGFsaWFzCisgICAgICAgIHByb2FjdG9yLnNldF9sb29wKHNlbGYpCisgICAgICAgIHNlbGYuX21ha2Vfc2VsZl9waXBlKCkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX2R1cGxleF9waXBlX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBfbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIGNoZWNrX2Zvcl9oYW5ndXA9VHJ1ZSk6CisgICAgICAgIGlmIGNoZWNrX2Zvcl9oYW5ndXA6CisgICAgICAgICAgICAjIFdlIHdhbnQgY29ubmVjdGlvbl9sb3N0KCkgdG8gYmUgY2FsbGVkIHdoZW4gb3RoZXIgZW5kIGNsb3NlcworICAgICAgICAgICAgcmV0dXJuIF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBvdGhlciBlbmQgY2xvc2VzIHdlIG1heSBub3Qgbm90aWNlIGZvciBhIGxvbmcgdGltZQorICAgICAgICAgICAgcmV0dXJuIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jbG9zZV9zZWxmX3BpcGUoKQorICAgICAgICAgICAgc2VsZi5fcHJvYWN0b3IuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYWN0b3IgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnJlY3Yoc29jaywgbikKKworICAgIGRlZiBzb2NrX3NlbmRhbGwoc2VsZiwgc29jaywgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5zZW5kKHNvY2ssIGRhdGEpCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuY29ubmVjdChzb2NrLCBhZGRyZXNzKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuYWNjZXB0KHNvY2spCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLl9zc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX3Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9jc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgLT0gMQorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgIyBBIHNlbGYtc29ja2V0LCByZWFsbHkuIDotKQorICAgICAgICBzZWxmLl9zc29jaywgc2VsZi5fY3NvY2sgPSBzZWxmLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fc3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorICAgICAgICBzZWxmLmNhbGxfc29vbihzZWxmLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiBfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZiwgZj1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmLnJlc3VsdCgpICAjIG1heSByYWlzZQorICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc3NvY2ssIDQwOTYpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYuX2Nzb2NrLnNlbmQoYid4JykKKworICAgIGRlZiBfc3RhcnRfc2VydmluZyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2w9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBhc3NlcnQgbm90IHNzbCwgJ0lvY3BFdmVudExvb3AgaXMgaW5jb21wYXRpYmxlIHdpdGggU1NMLicKKworICAgICAgICBkZWYgbG9vcChmPU5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBmLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5hY2NlcHQoc29jaykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNvY2suZmlsZW5vKCkgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0FjY2VwdCBmYWlsZWQnKQorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGxvb3ApCisKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24obG9vcCkKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgIHBhc3MgICAgIyBYWFggaGFyZCB3b3JrIGN1cnJlbnRseSBkb25lIGluIHBvbGwKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9wcm9hY3Rvci5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgIHNvY2suY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5IGIvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOTRmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9wcm90b2NvbHMucHkKQEAgLTAsMCArMSwxMjggQEAKKyIiIkFic3RyYWN0IFByb3RvY29sIGNsYXNzLiIiIgorCitfX2FsbF9fID0gWydQcm90b2NvbCcsICdEYXRhZ3JhbVByb3RvY29sJ10KKworCitjbGFzcyBCYXNlUHJvdG9jb2w6CisgICAgIiIiQUJDIGZvciBiYXNlIHByb3RvY29sIGNsYXNzLgorCisgICAgVXN1YWxseSB1c2VyIGltcGxlbWVudHMgcHJvdG9jb2xzIHRoYXQgZGVyaXZlZCBmcm9tIEJhc2VQcm90b2NvbAorICAgIGxpa2UgUHJvdG9jb2wgb3IgUHJvY2Vzc1Byb3RvY29sLgorCisgICAgVGhlIG9ubHkgY2FzZSB3aGVuIEJhc2VQcm90b2NvbCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkgaXMKKyAgICB3cml0ZS1vbmx5IHRyYW5zcG9ydCBsaWtlIHdyaXRlIHBpcGUKKyAgICAiIiIKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hZGUuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSB0cmFuc3BvcnQgcmVwcmVzZW50aW5nIHRoZSBwaXBlIGNvbm5lY3Rpb24uCisgICAgICAgIFRvIHJlY2VpdmUgZGF0YSwgd2FpdCBmb3IgZGF0YV9yZWNlaXZlZCgpIGNhbGxzLgorICAgICAgICBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCwgY29ubmVjdGlvbl9sb3N0KCkgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCBvciBjbG9zZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgTm9uZSAodGhlIGxhdHRlcgorICAgICAgICBtZWFuaW5nIGEgcmVndWxhciBFT0YgaXMgcmVjZWl2ZWQgb3IgdGhlIGNvbm5lY3Rpb24gd2FzCisgICAgICAgIGFib3J0ZWQgb3IgY2xvc2VkKS4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIHRyYW5zcG9ydCdzIGJ1ZmZlciBnb2VzIG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyay4KKworICAgICAgICBQYXVzZSBhbmQgcmVzdW1lIGNhbGxzIGFyZSBwYWlyZWQgLS0gcGF1c2Vfd3JpdGluZygpIGlzIGNhbGxlZAorICAgICAgICBvbmNlIHdoZW4gdGhlIGJ1ZmZlciBnb2VzIHN0cmljdGx5IG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyaworICAgICAgICAoZXZlbiBpZiBzdWJzZXF1ZW50IHdyaXRlcyBpbmNyZWFzZXMgdGhlIGJ1ZmZlciBzaXplIGV2ZW4KKyAgICAgICAgbW9yZSksIGFuZCBldmVudHVhbGx5IHJlc3VtZV93cml0aW5nKCkgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKKyAgICAgICAgYnVmZmVyIHNpemUgcmVhY2hlcyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKyAgICAgICAgTm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgICAgICAgcGF1c2Vfd3JpdGluZygpIGlzIG5vdCBjYWxsZWQgLS0gaXQgbXVzdCBnbyBzdHJpY3RseSBvdmVyLgorICAgICAgICBDb252ZXJzZWx5LCByZXN1bWVfd3JpdGluZygpIGlzIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgc2l6ZSBpcworICAgICAgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICAgICAgIGFyZSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGdvIGFzIGV4cGVjdGVkIHdoZW4gZWl0aGVyCisgICAgICAgIG1hcmsgaXMgemVyby4KKworICAgICAgICBOT1RFOiBUaGlzIGlzIHRoZSBvbmx5IFByb3RvY29sIGNhbGxiYWNrIHRoYXQgaXMgbm90IGNhbGxlZAorICAgICAgICB0aHJvdWdoIEV2ZW50TG9vcC5jYWxsX3Nvb24oKSAtLSBpZiBpdCB3ZXJlLCBpdCB3b3VsZCBoYXZlIG5vCisgICAgICAgIGVmZmVjdCB3aGVuIGl0J3MgbW9zdCBuZWVkZWQgKHdoZW4gdGhlIGFwcCBrZWVwcyB3cml0aW5nCisgICAgICAgIHdpdGhvdXQgeWllbGRpbmcgdW50aWwgcGF1c2Vfd3JpdGluZygpIGlzIGNhbGxlZCkuCisgICAgICAgICIiIgorCisgICAgZGVmIHJlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKyAgICAgICAgU2VlIHBhdXNlX3dyaXRpbmcoKSBmb3IgZGV0YWlscy4KKyAgICAgICAgIiIiCisKKworY2xhc3MgUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJBQkMgcmVwcmVzZW50aW5nIGEgcHJvdG9jb2wuCisKKyAgICBUaGUgdXNlciBzaG91bGQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiAgVGhleSBjYW4gaW5oZXJpdCBmcm9tCisgICAgdGhpcyBjbGFzcyBidXQgZG9uJ3QgbmVlZCB0by4gIFRoZSBpbXBsZW1lbnRhdGlvbnMgaGVyZSBkbworICAgIG5vdGhpbmcgKHRoZXkgZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucykuCisKKyAgICBXaGVuIHRoZSB1c2VyIHdhbnRzIHRvIHJlcXVlc3RzIGEgdHJhbnNwb3J0LCB0aGV5IHBhc3MgYSBwcm90b2NvbAorICAgIGZhY3RvcnkgdG8gYSB1dGlsaXR5IGZ1bmN0aW9uIChlLmcuLCBFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oKSkuCisKKyAgICBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUgc3VjY2Vzc2Z1bGx5LCBjb25uZWN0aW9uX21hZGUoKSBpcworICAgIGNhbGxlZCB3aXRoIGEgc3VpdGFibGUgdHJhbnNwb3J0IG9iamVjdC4gIFRoZW4gZGF0YV9yZWNlaXZlZCgpCisgICAgd2lsbCBiZSBjYWxsZWQgMCBvciBtb3JlIHRpbWVzIHdpdGggZGF0YSAoYnl0ZXMpIHJlY2VpdmVkIGZyb20gdGhlCisgICAgdHJhbnNwb3J0OyBmaW5hbGx5LCBjb25uZWN0aW9uX2xvc3QoKSB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UKKyAgICB3aXRoIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIE5vbmUgYXMgYW4gYXJndW1lbnQuCisKKyAgICBTdGF0ZSBtYWNoaW5lIG9mIGNhbGxzOgorCisgICAgICBzdGFydCAtPiBDTSBbLT4gRFIqXSBbLT4gRVI/XSAtPiBDTCAtPiBlbmQKKyAgICAiIiIKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBvdGhlciBlbmQgY2FsbHMgd3JpdGVfZW9mKCkgb3IgZXF1aXZhbGVudC4KKworICAgICAgICBJZiB0aGlzIHJldHVybnMgYSBmYWxzZSB2YWx1ZSAoaW5jbHVkaW5nIE5vbmUpLCB0aGUgdHJhbnNwb3J0CisgICAgICAgIHdpbGwgY2xvc2UgaXRzZWxmLiAgSWYgaXQgcmV0dXJucyBhIHRydWUgdmFsdWUsIGNsb3NpbmcgdGhlCisgICAgICAgIHRyYW5zcG9ydCBpcyB1cCB0byB0aGUgcHJvdG9jb2wuCisgICAgICAgICIiIgorCisKK2NsYXNzIERhdGFncmFtUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJBQkMgcmVwcmVzZW50aW5nIGEgZGF0YWdyYW0gcHJvdG9jb2wuIiIiCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgZGF0YWdyYW0gaXMgcmVjZWl2ZWQuIiIiCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbiBPU0Vycm9yLgorCisgICAgICAgIChPdGhlciB0aGFuIEJsb2NraW5nSU9FcnJvciBvciBJbnRlcnJ1cHRlZEVycm9yLikKKyAgICAgICAgIiIiCisKKworY2xhc3MgU3VicHJvY2Vzc1Byb3RvY29sKEJhc2VQcm90b2NvbCk6CisgICAgIiIiQUJDIHJlcHJlc2VudGluZyBhIHByb3RvY29sIGZvciBzdWJwcm9jZXNzIGNhbGxzLiIiIgorCisgICAgZGVmIHBpcGVfZGF0YV9yZWNlaXZlZChzZWxmLCBmZCwgZGF0YSk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBzdWJwcm9jZXNzIHdyaXRlcyBkYXRhIGludG8gc3Rkb3V0L3N0ZGVyciBwaXBlLgorCisgICAgICAgIGZkIGlzIGludCBmaWxlIGRhc2NyaXB0b3IuCisgICAgICAgIGRhdGEgaXMgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgIGRlZiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGlsZCBwcm9jZXNzIGlzCisgICAgICAgIGNsb3NlZC4KKworICAgICAgICBmZCBpcyB0aGUgaW50IGZpbGUgZGVzY3JpcHRvciB0aGF0IHdhcyBjbG9zZWQuCisgICAgICAgICIiIgorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzdWJwcm9jZXNzIGhhcyBleGl0ZWQuIiIiCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9xdWV1ZXMucHkgYi9MaWIvYXN5bmNpby9xdWV1ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1YmY0NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3F1ZXVlcy5weQpAQCAtMCwwICsxLDI4NCBAQAorIiIiUXVldWVzIiIiCisKK19fYWxsX18gPSBbJ1F1ZXVlJywgJ1ByaW9yaXR5UXVldWUnLCAnTGlmb1F1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLAorICAgICAgICAgICAnRnVsbCcsICdFbXB0eSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGhlYXBxCitpbXBvcnQgcXVldWUKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBsb2NrcworZnJvbSAudGFza3MgaW1wb3J0IGNvcm91dGluZQorCisKKyMgUmUtZXhwb3J0IHF1ZXVlLkZ1bGwgYW5kIC5FbXB0eSBleGNlcHRpb25zLgorRnVsbCA9IHF1ZXVlLkZ1bGwKK0VtcHR5ID0gcXVldWUuRW1wdHkKKworCitjbGFzcyBRdWV1ZToKKyAgICAiIiJBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgIElmIG1heHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBxdWV1ZSBzaXplIGlzIGluZmluaXRlLiBJZiBpdAorICAgIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHRoZW4gInlpZWxkIGZyb20gcHV0KCkiIHdpbGwgYmxvY2sgd2hlbiB0aGUKKyAgICBxdWV1ZSByZWFjaGVzIG1heHNpemUsIHVudGlsIGFuIGl0ZW0gaXMgcmVtb3ZlZCBieSBnZXQoKS4KKworICAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBRdWV1ZSwgeW91IGNhbiByZWxpYWJseSBrbm93IHRoaXMgUXVldWUncyBzaXplCisgICAgd2l0aCBxc2l6ZSgpLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBUdWxpcCBhcHBsaWNhdGlvbiB3b24ndCBiZQorICAgIGludGVycnVwdGVkIGJldHdlZW4gY2FsbGluZyBxc2l6ZSgpIGFuZCBkb2luZyBhbiBvcGVyYXRpb24gb24gdGhlIFF1ZXVlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9tYXhzaXplID0gbWF4c2l6ZQorCisgICAgICAgICMgRnV0dXJlcy4KKyAgICAgICAgc2VsZi5fZ2V0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgIyBQYWlycyBvZiAoaXRlbSwgRnV0dXJlKS4KKyAgICAgICAgc2VsZi5fcHV0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5faW5pdChtYXhzaXplKQorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wbGVmdCgpCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IGF0IHs6I3h9IHt9PicuZm9ybWF0KAorICAgICAgICAgICAgdHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IHt9PicuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9mb3JtYXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICdtYXhzaXplPXshcn0nLmZvcm1hdChzZWxmLl9tYXhzaXplKQorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcXVldWUnLCBOb25lKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIF9xdWV1ZT17IXJ9Jy5mb3JtYXQobGlzdChzZWxmLl9xdWV1ZSkpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfZ2V0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fZ2V0dGVycykpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfcHV0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fcHV0dGVycykpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfY29uc3VtZV9kb25lX2dldHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIGdldCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX2dldHRlcnMgYW5kIHNlbGYuX2dldHRlcnNbMF0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBfY29uc3VtZV9kb25lX3B1dHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIHB1dCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX3B1dHRlcnMgYW5kIHNlbGYuX3B1dHRlcnNbMF1bMV0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBxc2l6ZShzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9xdWV1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhzaXplKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgcXVldWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYXhzaXplCisKKyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3F1ZXVlCisKKyAgICBkZWYgZnVsbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIG1heHNpemUgaXRlbXMgaW4gdGhlIHF1ZXVlLgorCisgICAgICAgIE5vdGU6IGlmIHRoZSBRdWV1ZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBtYXhzaXplPTAgKHRoZSBkZWZhdWx0KSwKKyAgICAgICAgdGhlbiBmdWxsKCkgaXMgbmV2ZXIgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX21heHNpemUgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucXNpemUoKSA9PSBzZWxmLl9tYXhzaXplCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHB1dChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuCisKKyAgICAgICAgSWYgeW91IHlpZWxkIGZyb20gcHV0KCksIHdhaXQgdW50aWwgYSBmcmVlIHNsb3QgaXMgYXZhaWxhYmxlCisgICAgICAgIGJlZm9yZSBhZGRpbmcgaXRlbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9nZXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fZ2V0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcXVldWUsICgKKyAgICAgICAgICAgICAgICAncXVldWUgbm9uLWVtcHR5LCB3aHkgYXJlIGdldHRlcnMgd2FpdGluZz8nKQorCisgICAgICAgICAgICBnZXR0ZXIgPSBzZWxmLl9nZXR0ZXJzLnBvcGxlZnQoKQorCisgICAgICAgICAgICAjIFVzZSBfcHV0IGFuZCBfZ2V0IGluc3RlYWQgb2YgcGFzc2luZyBpdGVtIHN0cmFpZ2h0IHRvIGdldHRlciwgaW4KKyAgICAgICAgICAgICMgY2FzZSBhIHN1YmNsYXNzIGhhcyBsb2dpYyB0aGF0IG11c3QgcnVuIChlLmcuIEpvaW5hYmxlUXVldWUpLgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICBnZXR0ZXIuc2V0X3Jlc3VsdChzZWxmLl9nZXQoKSkKKworICAgICAgICBlbGlmIHNlbGYuX21heHNpemUgPiAwIGFuZCBzZWxmLl9tYXhzaXplID09IHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5hcHBlbmQoKGl0ZW0sIHdhaXRlcikpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIGRlZiBwdXRfbm93YWl0KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSB3aXRob3V0IGJsb2NraW5nLgorCisgICAgICAgIElmIG5vIGZyZWUgc2xvdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHJhaXNlIEZ1bGwuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfZ2V0dGVycygpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3F1ZXVlLCAoCisgICAgICAgICAgICAgICAgJ3F1ZXVlIG5vbi1lbXB0eSwgd2h5IGFyZSBnZXR0ZXJzIHdhaXRpbmc/JykKKworICAgICAgICAgICAgZ2V0dGVyID0gc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgICAgICAgICAgIyBVc2UgX3B1dCBhbmQgX2dldCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXRlbSBzdHJhaWdodCB0byBnZXR0ZXIsIGluCisgICAgICAgICAgICAjIGNhc2UgYSBzdWJjbGFzcyBoYXMgbG9naWMgdGhhdCBtdXN0IHJ1biAoZS5nLiBKb2luYWJsZVF1ZXVlKS4KKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorICAgICAgICAgICAgZ2V0dGVyLnNldF9yZXN1bHQoc2VsZi5fZ2V0KCkpCisKKyAgICAgICAgZWxpZiBzZWxmLl9tYXhzaXplID4gMCBhbmQgc2VsZi5fbWF4c2l6ZSA9PSBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICByYWlzZSBGdWxsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICAgIElmIHlvdSB5aWVsZCBmcm9tIGdldCgpLCB3YWl0IHVudGlsIGEgaXRlbSBpcyBhdmFpbGFibGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfcHV0dGVycygpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5mdWxsKCksICdxdWV1ZSBub3QgZnVsbCwgd2h5IGFyZSBwdXR0ZXJzIHdhaXRpbmc/JworICAgICAgICAgICAgaXRlbSwgcHV0dGVyID0gc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorCisgICAgICAgICAgICAjIFdoZW4gYSBnZXR0ZXIgcnVucyBhbmQgZnJlZXMgdXAgYSBzbG90IHNvIHRoaXMgcHV0dGVyIGNhbgorICAgICAgICAgICAgIyBydW4sIHdlIG5lZWQgdG8gZGVmZXIgdGhlIHB1dCBmb3IgYSB0aWNrIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAjIGdldHRlcnMgYW5kIHB1dHRlcnMgYWx0ZXJuYXRlIHBlcmZlY3RseS4gU2VlCisgICAgICAgICAgICAjIENoYW5uZWxUZXN0LnRlc3Rfd2FpdC4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHB1dHRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKworICAgICAgICBlbGlmIHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgICAgICBzZWxmLl9nZXR0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gd2FpdGVyKQorCisgICAgZGVmIGdldF9ub3dhaXQoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZW0gaWYgb25lIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgZWxzZSByYWlzZSBFbXB0eS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9wdXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fcHV0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmZ1bGwoKSwgJ3F1ZXVlIG5vdCBmdWxsLCB3aHkgYXJlIHB1dHRlcnMgd2FpdGluZz8nCisgICAgICAgICAgICBpdGVtLCBwdXR0ZXIgPSBzZWxmLl9wdXR0ZXJzLnBvcGxlZnQoKQorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICAjIFdha2UgcHV0dGVyIG9uIG5leHQgdGljay4KKyAgICAgICAgICAgIHB1dHRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorCisgICAgICAgIGVsaWYgc2VsZi5xc2l6ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFbXB0eQorCisKK2NsYXNzIFByaW9yaXR5UXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWU7IHJldHJpZXZlcyBlbnRyaWVzIGluIHByaW9yaXR5IG9yZGVyIChsb3dlc3QgZmlyc3QpLgorCisgICAgRW50cmllcyBhcmUgdHlwaWNhbGx5IHR1cGxlcyBvZiB0aGUgZm9ybTogKHByaW9yaXR5IG51bWJlciwgZGF0YSkuCisgICAgIiIiCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gW10KKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0sIGhlYXBwdXNoPWhlYXBxLmhlYXBwdXNoKToKKyAgICAgICAgaGVhcHB1c2goc2VsZi5fcXVldWUsIGl0ZW0pCisKKyAgICBkZWYgX2dldChzZWxmLCBoZWFwcG9wPWhlYXBxLmhlYXBwb3ApOgorICAgICAgICByZXR1cm4gaGVhcHBvcChzZWxmLl9xdWV1ZSkKKworCitjbGFzcyBMaWZvUXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWUgdGhhdCByZXRyaWV2ZXMgbW9zdCByZWNlbnRseSBhZGRlZCBlbnRyaWVzIGZpcnN0LiIiIgorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IFtdCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX2dldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3F1ZXVlLnBvcCgpCisKKworY2xhc3MgSm9pbmFibGVRdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZSB3aXRoIHRhc2tfZG9uZSgpIGFuZCBqb2luKCkgbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTAsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obWF4c2l6ZT1tYXhzaXplLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSAwCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl9maW5pc2hlZC5zZXQoKQorCisgICAgZGVmIF9mb3JtYXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFF1ZXVlLl9mb3JtYXQoc2VsZikKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrczoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIHRhc2tzPXt9Jy5mb3JtYXQoc2VsZi5fdW5maW5pc2hlZF90YXNrcykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSk6CisgICAgICAgIHN1cGVyKCkuX3B1dChpdGVtKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzICs9IDEKKyAgICAgICAgc2VsZi5fZmluaXNoZWQuY2xlYXIoKQorCisgICAgZGVmIHRhc2tfZG9uZShzZWxmKToKKyAgICAgICAgIiIiSW5kaWNhdGUgdGhhdCBhIGZvcm1lcmx5IGVucXVldWVkIHRhc2sgaXMgY29tcGxldGUuCisKKyAgICAgICAgVXNlZCBieSBxdWV1ZSBjb25zdW1lcnMuIEZvciBlYWNoIGdldCgpIHVzZWQgdG8gZmV0Y2ggYSB0YXNrLAorICAgICAgICBhIHN1YnNlcXVlbnQgY2FsbCB0byB0YXNrX2RvbmUoKSB0ZWxscyB0aGUgcXVldWUgdGhhdCB0aGUgcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgICBJZiBhIGpvaW4oKSBpcyBjdXJyZW50bHkgYmxvY2tpbmcsIGl0IHdpbGwgcmVzdW1lIHdoZW4gYWxsIGl0ZW1zIGhhdmUKKyAgICAgICAgYmVlbiBwcm9jZXNzZWQgKG1lYW5pbmcgdGhhdCBhIHRhc2tfZG9uZSgpIGNhbGwgd2FzIHJlY2VpdmVkIGZvciBldmVyeQorICAgICAgICBpdGVtIHRoYXQgaGFkIGJlZW4gcHV0KCkgaW50byB0aGUgcXVldWUpLgorCisgICAgICAgIFJhaXNlcyBWYWx1ZUVycm9yIGlmIGNhbGxlZCBtb3JlIHRpbWVzIHRoYW4gdGhlcmUgd2VyZSBpdGVtcyBwbGFjZWQgaW4KKyAgICAgICAgdGhlIHF1ZXVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndGFza19kb25lKCkgY2FsbGVkIHRvbyBtYW55IHRpbWVzJykKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyAtPSAxCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkLnNldCgpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGpvaW4oc2VsZik6CisgICAgICAgICIiIkJsb2NrIHVudGlsIGFsbCBpdGVtcyBpbiB0aGUgcXVldWUgaGF2ZSBiZWVuIGdvdHRlbiBhbmQgcHJvY2Vzc2VkLgorCisgICAgICAgIFRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGdvZXMgdXAgd2hlbmV2ZXIgYW4gaXRlbSBpcyBhZGRlZCB0byB0aGUKKyAgICAgICAgcXVldWUuIFRoZSBjb3VudCBnb2VzIGRvd24gd2hlbmV2ZXIgYSBjb25zdW1lciB0aHJlYWQgY2FsbHMgdGFza19kb25lKCkKKyAgICAgICAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSB3YXMgcmV0cmlldmVkIGFuZCBhbGwgd29yayBvbiBpdCBpcyBjb21wbGV0ZS4KKyAgICAgICAgV2hlbiB0aGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBkcm9wcyB0byB6ZXJvLCBqb2luKCkgdW5ibG9ja3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID4gMDoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluaXNoZWQud2FpdCgpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0MTQ1OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDg0MiBAQAorIiIiRXZlbnQgbG9vcCB1c2luZyBhIHNlbGVjdG9yIGFuZCByZWxhdGVkIGNsYXNzZXMuCisKK0Egc2VsZWN0b3IgaXMgYSAibm90aWZ5LXdoZW4tcmVhZHkiIG11bHRpcGxleGVyLiAgRm9yIGEgc3ViY2xhc3Mgd2hpY2gKK2Fsc28gaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2lnbmFsIGhhbmRsaW5nLCBzZWUgdGhlIHVuaXhfZXZlbnRzIHN1Yi1tb2R1bGUuCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzb2NrZXQKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gLiBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIEJhc2VTZWxlY3RvckV2ZW50TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKyAgICAiIiJTZWxlY3RvciBldmVudCBsb29wLgorCisgICAgU2VlIGV2ZW50cy5FdmVudExvb3AgZm9yIEFQSSBzcGVjaWZpY2F0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbGVjdG9yPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKworICAgICAgICBpZiBzZWxlY3RvciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBzZWxlY3RvcjogJXMnLCBzZWxlY3Rvci5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gc2VsZWN0b3IKKyAgICAgICAgc2VsZi5fbWFrZV9zZWxmX3BpcGUoKQorCisgICAgZGVmIF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgc2VydmVyX3NpZGUsIHNlcnZlcl9ob3N0bmFtZSwgZXh0cmEsIHNlcnZlcikKKworICAgIGRlZiBfbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIGFkZHJlc3MsIGV4dHJhKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zZWxlY3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2Nsb3NlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNlbGYuX3Nzb2NrLmZpbGVubygpKQorICAgICAgICBzZWxmLl9zc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX3Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9jc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgLT0gMQorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgIyBBIHNlbGYtc29ja2V0LCByZWFsbHkuIDotKQorICAgICAgICBzZWxmLl9zc29jaywgc2VsZi5fY3NvY2sgPSBzZWxmLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fc3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorICAgICAgICBzZWxmLmFkZF9yZWFkZXIoc2VsZi5fc3NvY2suZmlsZW5vKCksIHNlbGYuX3JlYWRfZnJvbV9zZWxmKQorCisgICAgZGVmIF9yZWFkX2Zyb21fc2VsZihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc3NvY2sucmVjdigxKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Nzb2NrLnNlbmQoYid4JykKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9zdGFydF9zZXJ2aW5nKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzZWxmLmFkZF9yZWFkZXIoc29jay5maWxlbm8oKSwgc2VsZi5fYWNjZXB0X2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2xjb250ZXh0LCBzZXJ2ZXIpCisKKyAgICBkZWYgX2FjY2VwdF9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0PU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yLCBDb25uZWN0aW9uQWJvcnRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MgICMgRmFsc2UgYWxhcm0uCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICMgVGhlcmUncyBub3doZXJlIHRvIHNlbmQgdGhlIGVycm9yLCBzbyBqdXN0IGxvZyBpdC4KKyAgICAgICAgICAgICMgVE9ETzogU29tZW9uZSB3aWxsIHdhbnQgYW4gZXJyb3IgaGFuZGxlciBmb3IgdGhpcy4KKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyBpbiAoZXJybm8uRU1GSUxFLCBlcnJuby5FTkZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0JVRlMsIGVycm5vLkVOT01FTSk6CisgICAgICAgICAgICAgICAgIyBTb21lIHBsYXRmb3JtcyAoZS5nLiBMaW51eCBrZWVwIHJlcG9ydGluZyB0aGUgRkQgYXMKKyAgICAgICAgICAgICAgICAjIHJlYWR5LCBzbyB3ZSByZW1vdmUgdGhlIHJlYWQgaGFuZGxlciB0ZW1wb3JhcmlseS4KKyAgICAgICAgICAgICAgICAjIFdlJ2xsIHRyeSBhZ2FpbiBpbiBhIHdoaWxlLgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0FjY2VwdCBvdXQgb2Ygc3lzdGVtIHJlc291cmNlICglcyknLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNvY2suZmlsZW5vKCkpCisgICAgICAgICAgICAgICAgc2VsZi5jYWxsX2xhdGVyKGNvbnN0YW50cy5BQ0NFUFRfUkVUUllfREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbGNvbnRleHQsIHNlcnZlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgICMgVGhlIGV2ZW50IGxvb3Agd2lsbCBjYXRjaCwgbG9nIGFuZCBpZ25vcmUgaXQuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgIHNlbGYuX21ha2Vfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2xfZmFjdG9yeSgpLCBzc2xjb250ZXh0LCBOb25lLAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLCBleHRyYT17J3BlZXJuYW1lJzogYWRkcn0sIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2xfZmFjdG9yeSgpLCBleHRyYT17J3BlZXJuYW1lJzogYWRkcn0sCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgICMgSXQncyBub3cgdXAgdG8gdGhlIHByb3RvY29sIHRvIGhhbmRsZSB0aGUgY29ubmVjdGlvbi4KKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSByZWFkZXIgY2FsbGJhY2suIiIiCisgICAgICAgIGhhbmRsZSA9IGV2ZW50cy5tYWtlX2hhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IucmVnaXN0ZXIoZmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZSwgTm9uZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzayB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGUsIHdyaXRlcikpCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgICIiIlJlbW92ZSBhIHJlYWRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIG1hc2sgJj0gfnNlbGVjdG9ycy5FVkVOVF9SRUFECisgICAgICAgICAgICBpZiBub3QgbWFzazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci51bnJlZ2lzdGVyKGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2ssIChOb25lLCB3cml0ZXIpKQorCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgd3JpdGVyIGNhbGxiYWNrLi4iIiIKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5yZWdpc3RlcihmZCwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIGhhbmRsZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzayB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZGVyLCBoYW5kbGUpKQorICAgICAgICAgICAgaWYgd3JpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdyaXRlci5jYW5jZWwoKQorCisgICAgZGVmIHJlbW92ZV93cml0ZXIoc2VsZiwgZmQpOgorICAgICAgICAiIiJSZW1vdmUgYSB3cml0ZXIgY2FsbGJhY2suIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICAjIFJlbW92ZSBib3RoIHdyaXRlciBhbmQgY29ubmVjdG9yLgorICAgICAgICAgICAgbWFzayAmPSB+c2VsZWN0b3JzLkVWRU5UX1dSSVRFCisgICAgICAgICAgICBpZiBub3QgbWFzazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci51bnJlZ2lzdGVyKGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2ssIChyZWFkZXIsIE5vbmUpKQorCisgICAgICAgICAgICBpZiB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgd3JpdGVyLmNhbmNlbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc29ja19yZWN2KHNlbGYsIHNvY2ssIG4pOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBzZWxmLl9zb2NrX3JlY3YoZnV0LCBGYWxzZSwgc29jaywgbikKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX3JlY3Yoc2VsZiwgZnV0LCByZWdpc3RlcmVkLCBzb2NrLCBuKToKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgY2FsbGJhY2sgZWFybHkuICBJdCBzaG91bGQgYmUgcmFyZSB0aGF0IHRoZQorICAgICAgICAgICAgIyBzZWxlY3RvciBzYXlzIHRoZSBmZCBpcyByZWFkeSBidXQgdGhlIGNhbGwgc3RpbGwgcmV0dXJucworICAgICAgICAgICAgIyBFQUdBSU4sIGFuZCBJIGFtIHdpbGxpbmcgdG8gdGFrZSBhIGhpdCBpbiB0aGF0IGNhc2UgaW4KKyAgICAgICAgICAgICMgb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNvY2sucmVjdihuKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF9yZWFkZXIoZmQsIHNlbGYuX3NvY2tfcmVjdiwgZnV0LCBUcnVlLCBzb2NrLCBuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KGRhdGEpCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgc2VsZi5fc29ja19zZW5kYWxsKGZ1dCwgRmFsc2UsIHNvY2ssIGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfc2VuZGFsbChzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2ssIGRhdGEpOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKworICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gc29jay5zZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbiA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtuOl0KKyAgICAgICAgICAgIHNlbGYuYWRkX3dyaXRlcihmZCwgc2VsZi5fc29ja19zZW5kYWxsLCBmdXQsIFRydWUsIHNvY2ssIGRhdGEpCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgIyBUaGF0IGFkZHJlc3MgYmV0dGVyIG5vdCByZXF1aXJlIGEgbG9va3VwISAgV2UncmUgbm90IGNhbGxpbmcKKyAgICAgICAgIyBzZWxmLmdldGFkZHJpbmZvKCkgZm9yIHlvdSBoZXJlLiAgQnV0IHZlcmlmeWluZyB0aGlzIGlzCisgICAgICAgICMgY29tcGxpY2F0ZWQ7IHRoZSBzb2NrZXQgbW9kdWxlIGRvZXNuJ3QgaGF2ZSBhIHBhdHRlcm4gZm9yCisgICAgICAgICMgSVB2NiBhZGRyZXNzZXMgKHRoZXJlIGFyZSB0b28gbWFueSBmb3JtcywgYXBwYXJlbnRseSkuCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19jb25uZWN0KGZ1dCwgRmFsc2UsIHNvY2ssIGFkZHJlc3MpCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19jb25uZWN0KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgYWRkcmVzcyk6CisgICAgICAgICMgVE9ETzogVXNlIGdldGFkZHJpbmZvKCkgdG8gbG9vayB1cCB0aGUgYWRkcmVzcywgdG8gYXZvaWQgdGhlCisgICAgICAgICMgdHJhcCBvZiBoYW5naW5nIHRoZSBlbnRpcmUgZXZlbnQgbG9vcCB3aGVuIHRoZSBhZGRyZXNzCisgICAgICAgICMgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLiAgKE9UT0gsIHRoZSBjYWxsZXIgc2hvdWxkCisgICAgICAgICMgYWxyZWFkeSBoYXZlIGRvbmUgdGhpcywgc28gaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZAorICAgICAgICAjIGVhc2lseSB0ZWxsIHdoZXRoZXIgdGhlIGFkZHJlc3MgbmVlZHMgbG9va2luZyB1cCBvciBub3QuICBJCisgICAgICAgICMga25vdyBob3cgdG8gZG8gdGhpcyBmb3IgSVB2NCwgYnV0IElQdjYgYWRkcmVzc2VzIGhhdmUgbWFueQorICAgICAgICAjIHN5bnRheGVzLikKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgICAgICAjIEZpcnN0IHRpbWUgYXJvdW5kLgorICAgICAgICAgICAgICAgIHNvY2suY29ubmVjdChhZGRyZXNzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnIgPSBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FUlJPUikKKyAgICAgICAgICAgICAgICBpZiBlcnIgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBKdW1wIHRvIHRoZSBleGNlcHQgY2xhdXNlIGJlbG93LgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgJ0Nvbm5lY3QgY2FsbCBmYWlsZWQgJXMnICUgKGFkZHJlc3MsKSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hZGRfd3JpdGVyKGZkLCBzZWxmLl9zb2NrX2Nvbm5lY3QsIGZ1dCwgVHJ1ZSwgc29jaywgYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBzZWxmLl9zb2NrX2FjY2VwdChmdXQsIEZhbHNlLCBzb2NrKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfYWNjZXB0KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jayk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkcmVzcyA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3JlYWRlcihmZCwgc2VsZi5fc29ja19hY2NlcHQsIGZ1dCwgVHJ1ZSwgc29jaykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdCgoY29ubiwgYWRkcmVzcykpCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICBmb3Iga2V5LCBtYXNrIGluIGV2ZW50X2xpc3Q6CisgICAgICAgICAgICBmaWxlb2JqLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmZpbGVvYmosIGtleS5kYXRhCisgICAgICAgICAgICBpZiBtYXNrICYgc2VsZWN0b3JzLkVWRU5UX1JFQUQgYW5kIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiByZWFkZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHJlYWRlcikKKyAgICAgICAgICAgIGlmIG1hc2sgJiBzZWxlY3RvcnMuRVZFTlRfV1JJVEUgYW5kIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB3cml0ZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHdyaXRlcikKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc29jay5maWxlbm8oKSkKKyAgICAgICAgc29jay5jbG9zZSgpCisKKworY2xhc3MgX1NlbGVjdG9yVHJhbnNwb3J0KHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKworICAgIG1heF9zaXplID0gMjU2ICogMTAyNCAgIyBCdWZmZXIgc2l6ZSBwYXNzZWQgdG8gcmVjdigpLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsnc29ja2V0J10gPSBzb2NrCisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrbmFtZSddID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIGlmICdwZWVybmFtZScgbm90IGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gc29jay5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gTm9uZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9zb2NrID0gc29jaworICAgICAgICBzZWxmLl9zb2NrX2ZkID0gc29jay5maWxlbm8oKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3NlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAgICMgU2V0IHdoZW4gY2FsbCB0byBjb25uZWN0aW9uX2xvc3Qgc2NoZWR1bGVkLgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBjYWxsZWQuCisgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKQorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIuYXR0YWNoKHNlbGYpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4Yyk6CisgICAgICAgICMgU2hvdWxkIGJlIGNhbGxlZCBmcm9tIGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkuCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgKEJyb2tlblBpcGVFcnJvciwgQ29ubmVjdGlvblJlc2V0RXJyb3IpKToKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhdGFsIGVycm9yIGZvciAlcycsIHNlbGYpCisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKworICAgIGRlZiBfZm9yY2VfY2xvc2Uoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3NvY2sgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9zZXJ2ZXIKKyAgICAgICAgICAgIGlmIHNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuZGV0YWNoKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyID0gTm9uZQorCisgICAgZGVmIF9tYXliZV9wYXVzZV9wcm90b2NvbChzZWxmKToKKyAgICAgICAgc2l6ZSA9IHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKyAgICAgICAgaWYgc2l6ZSA8PSBzZWxmLl9oaWdoX3dhdGVyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm90b2NvbF9wYXVzZWQ6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wucGF1c2Vfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ3BhdXNlX3dyaXRpbmcoKSBmYWlsZWQnKQorCisgICAgZGVmIF9tYXliZV9yZXN1bWVfcHJvdG9jb2woc2VsZik6CisgICAgICAgIGlmIChzZWxmLl9wcm90b2NvbF9wYXVzZWQgYW5kCisgICAgICAgICAgICBzZWxmLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpIDw9IHNlbGYuX2xvd193YXRlcik6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLnJlc3VtZV93cml0aW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigncmVzdW1lX3dyaXRpbmcoKSBmYWlsZWQnKQorCisgICAgZGVmIHNldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICBpZiBoaWdoIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsb3cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBoaWdoID0gNjQqMTAyNAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoaWdoID0gNCpsb3cKKyAgICAgICAgaWYgbG93IGlzIE5vbmU6CisgICAgICAgICAgICBsb3cgPSBoaWdoIC8vIDQKKyAgICAgICAgYXNzZXJ0IDAgPD0gbG93IDw9IGhpZ2gsIHJlcHIoKGxvdywgaGlnaCkpCisgICAgICAgIHNlbGYuX2hpZ2hfd2F0ZXIgPSBoaWdoCisgICAgICAgIHNlbGYuX2xvd193YXRlciA9IGxvdworCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1bShsZW4oZGF0YSkgZm9yIGRhdGEgaW4gc2VsZi5fYnVmZmVyKQorCisKK2NsYXNzIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fY2xvc2luZywgJ0Nhbm5vdCBwYXVzZV9yZWFkaW5nKCkgd2hlbiBjbG9zaW5nJworICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BhdXNlZCwgJ0FscmVhZHkgcGF1c2VkJworICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fcGF1c2VkLCAnTm90IHBhdXNlZCcKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2sucmVjdihzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYga2VlcF9vcGVuOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIGtlZXBpbmcgdGhlIGNvbm5lY3Rpb24gb3BlbiBzbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBjYW4gd3JpdGUgbW9yZSwgYnV0IHdlIHN0aWxsIGNhbid0CisgICAgICAgICAgICAgICAgICAgICMgcmVjZWl2ZSBtb3JlLCBzbyByZW1vdmUgdGhlIHJlYWRlciBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKSwgcmVwcih0eXBlKGRhdGEpKQorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2VvZiwgJ0Nhbm5vdCBjYWxsIHdyaXRlKCkgYWZ0ZXIgd3JpdGVfZW9mKCknCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIE9wdGltaXphdGlvbjogdHJ5IHRvIHNlbmQgbm93LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgTm90IGFsbCB3YXMgd3JpdHRlbjsgcmVnaXN0ZXIgd3JpdGUgaGFuZGxlci4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICAjIEFkZCBpdCB0byB0aGUgYnVmZmVyLgorICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgIGFzc2VydCBkYXRhLCAnRGF0YSBzaG91bGQgbm90IGJlIGVtcHR5JworCisgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpICAjIE9wdGltaXN0aWNhbGx5OyBtYXkgaGF2ZSB0byBwdXQgaXQgYmFjayBsYXRlci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpICAjIFN0aWxsIG5lZWQgdG8gd3JpdGUgdGhpcy4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpICAjIFN0aWxsIG5lZWQgdG8gd3JpdGUgdGhpcy4KKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2VvZiA9IFRydWUKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBpZiBzc2wgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc3RkbGliIHNzbCBtb2R1bGUgbm90IGF2YWlsYWJsZScpCisKKyAgICAgICAgaWYgc2VydmVyX3NpZGU6CisgICAgICAgICAgICBpZiBub3Qgc3NsY29udGV4dDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXJ2ZXIgc2lkZSBzc2wgbmVlZHMgYSB2YWxpZCBTU0xDb250ZXh0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgICMgQ2xpZW50IHNpZGUgbWF5IHBhc3Mgc3NsPVRydWUgdG8gdXNlIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICMgY29udGV4dDsgaW4gdGhhdCBjYXNlIHRoZSBzc2xjb250ZXh0IHBhc3NlZCBpcyBOb25lLgorICAgICAgICAgICAgICAgICMgVGhlIGRlZmF1bHQgaXMgdGhlIHNhbWUgYXMgdXNlZCBieSB1cmxsaWIgd2l0aAorICAgICAgICAgICAgICAgICMgY2FkZWZhdWx0PVRydWUuCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdfY3JlYXRlX3N0ZGxpYl9jb250ZXh0Jyk6CisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEZhbGxiYWNrIGZvciBQeXRob24gMy4zLgorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorCisgICAgICAgIHdyYXBfa3dhcmdzID0geworICAgICAgICAgICAgJ3NlcnZlcl9zaWRlJzogc2VydmVyX3NpZGUsCisgICAgICAgICAgICAnZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QnOiBGYWxzZSwKKyAgICAgICAgfQorICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgYW5kIG5vdCBzZXJ2ZXJfc2lkZSBhbmQgc3NsLkhBU19TTkk6CisgICAgICAgICAgICB3cmFwX2t3YXJnc1snc2VydmVyX2hvc3RuYW1lJ10gPSBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgc3Nsc29jayA9IHNzbGNvbnRleHQud3JhcF9zb2NrZXQocmF3c29jaywgKip3cmFwX2t3YXJncykKKworICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNzbHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorCisgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzZWxmLl93YWl0ZXIgPSB3YWl0ZXIKKyAgICAgICAgc2VsZi5fcmF3c29jayA9IHJhd3NvY2sKKyAgICAgICAgc2VsZi5fc3NsY29udGV4dCA9IHNzbGNvbnRleHQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgICAgICAjIFNTTC1zcGVjaWZpYyBleHRyYSBpbmZvLiAgKHBlZXJjZXJ0IGlzIHNldCBsYXRlcikKKyAgICAgICAgc2VsZi5fZXh0cmEudXBkYXRlKHNzbGNvbnRleHQ9c3NsY29udGV4dCkKKworICAgICAgICBzZWxmLl9vbl9oYW5kc2hha2UoKQorCisgICAgZGVmIF9vbl9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suZG9faGFuZHNoYWtlKCkKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50UmVhZEVycm9yOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgICAgICMgVmVyaWZ5IGhvc3RuYW1lIGlmIHJlcXVlc3RlZC4KKyAgICAgICAgcGVlcmNlcnQgPSBzZWxmLl9zb2NrLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgaWYgKHNlbGYuX3NlcnZlcl9ob3N0bmFtZSBhbmQKKyAgICAgICAgICAgIHNlbGYuX3NzbGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lKHBlZXJjZXJ0LCBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEFkZCBleHRyYSBpbmZvIHRoYXQgYmVjb21lcyBhdmFpbGFibGUgYWZ0ZXIgaGFuZHNoYWtlLgorICAgICAgICBzZWxmLl9leHRyYS51cGRhdGUocGVlcmNlcnQ9cGVlcmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXI9c2VsZi5fc29jay5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uPXNlbGYuX3NvY2suY29tcHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3dhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgICMgWFhYIFRoaXMgaXMgYSBiaXQgaWNreSwgZ2l2ZW4gdGhlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorICAgICAgICAjIF9yZWFkX3JlYWR5KCkuICBJcyBpdCBwb3NzaWJsZSB0byBldm9rZSBhIGRlYWRsb2NrPyAgSSBkb24ndAorICAgICAgICAjIGtub3csIGFsdGhvdWdoIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0OyB3cml0ZSgpIHdpbGwgc3RpbGwKKyAgICAgICAgIyBhY2NlcHQgbW9yZSBkYXRhIGZvciB0aGUgYnVmZmVyIGFuZCBldmVudHVhbGx5IHRoZSBhcHAgd2lsbAorICAgICAgICAjIGNhbGwgcmVzdW1lX3JlYWRpbmcoKSBhZ2FpbiwgYW5kIHRoaW5ncyB3aWxsIGZsb3cgYWdhaW4uCisKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9jbG9zaW5nLCAnQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGF1c2VkLCAnQWxyZWFkeSBwYXVzZWQnCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wYXVzZWQsICdOb3QgcGF1c2VkJworICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl93cml0ZV93YW50c19yZWFkOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2sucmVjdihzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwgc3NsLlNTTFdhbnRSZWFkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdyZXR1cm5pbmcgdHJ1ZSBmcm9tIGVvZl9yZWNlaXZlZCgpICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMgbm8gZWZmZWN0IHdoZW4gdXNpbmcgc3NsJykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3JlYWRfd2FudHNfd3JpdGU6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfcmVhZHkoKQorCisgICAgICAgICAgICBpZiBub3QgKHNlbGYuX3BhdXNlZCBvciBzZWxmLl9jbG9zaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc3NsLlNTTFdhbnRXcml0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50UmVhZEVycm9yOgorICAgICAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbiA8IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGFbbjpdKQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpLCByZXByKHR5cGUoZGF0YSkpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgIyBBZGQgaXQgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgYWRkcmVzcz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmEpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc3VtKGxlbihkYXRhKSBmb3IgZGF0YSwgXyBpbiBzZWxmLl9idWZmZXIpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEsIGFkZHIgPSBzZWxmLl9zb2NrLnJlY3Zmcm9tKHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQoZXhjKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkKGRhdGEsIGFkZHIpCisKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGFkZHI9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKSwgcmVwcih0eXBlKGRhdGEpKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICBhc3NlcnQgYWRkciBpbiAoTm9uZSwgc2VsZi5fYWRkcmVzcykKKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgYW5kIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzZW5kIGl0IHJpZ2h0IGF3YXkgZmlyc3QuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kdG8oZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fc2VuZHRvX3JlYWR5KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKChkYXRhLCBhZGRyKSkKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIF9zZW5kdG9fcmVhZHkoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIGRhdGEsIGFkZHIgPSBzZWxmLl9idWZmZXIucG9wbGVmdCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kdG8oZGF0YSwgYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kbGVmdCgoZGF0YSwgYWRkcikpICAjIFRyeSBhZ2FpbiBsYXRlci4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSAgIyBNYXkgYXBwZW5kIHRvIGJ1ZmZlci4KKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc3RyZWFtcy5weSBiL0xpYi9hc3luY2lvL3N0cmVhbXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjNGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3N0cmVhbXMucHkKQEAgLTAsMCArMSwzOTggQEAKKyIiIlN0cmVhbS1yZWxhdGVkIHRoaW5ncy4iIiIKKworX19hbGxfXyA9IFsnU3RyZWFtUmVhZGVyJywgJ1N0cmVhbVdyaXRlcicsICdTdHJlYW1SZWFkZXJQcm90b2NvbCcsCisgICAgICAgICAgICdvcGVuX2Nvbm5lY3Rpb24nLCAnc3RhcnRfc2VydmVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29sbGVjdGlvbnMKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKKworCitfREVGQVVMVF9MSU1JVCA9IDIqKjE2CisKKworQHRhc2tzLmNvcm91dGluZQorZGVmIG9wZW5fY29ubmVjdGlvbihob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAiIiJBIHdyYXBwZXIgZm9yIGNyZWF0ZV9jb25uZWN0aW9uKCkgcmV0dXJuaW5nIGEgKHJlYWRlciwgd3JpdGVyKSBwYWlyLgorCisgICAgVGhlIHJlYWRlciByZXR1cm5lZCBpcyBhIFN0cmVhbVJlYWRlciBpbnN0YW5jZTsgdGhlIHdyaXRlciBpcyBhCisgICAgVHJhbnNwb3J0LgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgYWxsIHRoZSB1c3VhbCBhcmd1bWVudHMgdG8gY3JlYXRlX2Nvbm5lY3Rpb24oKQorICAgIGV4Y2VwdCBwcm90b2NvbF9mYWN0b3J5OyBtb3N0IGNvbW1vbiBhcmUgcG9zaXRpb25hbCBob3N0IGFuZCBwb3J0LAorICAgIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBmb2xsb3dpbmcuCisKKyAgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBsb29wICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgICBpbnN0YW5jZSB0byB1c2UpIGFuZCBsaW1pdCAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgIFN0cmVhbVJlYWRlcikuCisKKyAgICAoSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBTdHJlYW1SZWFkZXIgYW5kL29yCisgICAgU3RyZWFtUmVhZGVyUHJvdG9jb2wgY2xhc3NlcywganVzdCBjb3B5IHRoZSBjb2RlIC0tIHRoZXJlJ3MKKyAgICByZWFsbHkgbm90aGluZyBzcGVjaWFsIGhlcmUgZXhjZXB0IHNvbWUgY29udmVuaWVuY2UuKQorICAgICIiIgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgcmVhZGVyID0gU3RyZWFtUmVhZGVyKGxpbWl0PWxpbWl0LCBsb29wPWxvb3ApCisgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIpCisgICAgdHJhbnNwb3J0LCBfID0geWllbGQgZnJvbSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICBsYW1iZGE6IHByb3RvY29sLCBob3N0LCBwb3J0LCAqKmt3ZHMpCisgICAgd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCkKKyAgICByZXR1cm4gcmVhZGVyLCB3cml0ZXIKKworCitAdGFza3MuY29yb3V0aW5lCitkZWYgc3RhcnRfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICIiIlN0YXJ0IGEgc29ja2V0IHNlcnZlciwgY2FsbCBiYWNrIGZvciBlYWNoIGNsaWVudCBjb25uZWN0ZWQuCisKKyAgICBUaGUgZmlyc3QgcGFyYW1ldGVyLCBgY2xpZW50X2Nvbm5lY3RlZF9jYmAsIHRha2VzIHR3byBwYXJhbWV0ZXJzOgorICAgIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIuICBjbGllbnRfcmVhZGVyIGlzIGEgU3RyZWFtUmVhZGVyCisgICAgb2JqZWN0LCB3aGlsZSBjbGllbnRfd3JpdGVyIGlzIGEgU3RyZWFtV3JpdGVyIG9iamVjdC4gIFRoaXMKKyAgICBwYXJhbWV0ZXIgY2FuIGVpdGhlciBiZSBhIHBsYWluIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGEgY29yb3V0aW5lOworICAgIGlmIGl0IGlzIGEgY29yb3V0aW5lLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gYQorICAgIFRhc2suCisKKyAgICBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgIGxvb3AuY3JlYXRlX3NlcnZlcigpIGV4Y2VwdCBwcm90b2NvbF9mYWN0b3J5OyBtb3N0IGNvbW1vbiBhcmUKKyAgICBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgIGZvbGxvd2luZy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgbG9vcC5jcmVhdGVfc2VydmVyKCkuCisKKyAgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBsb29wICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgICBpbnN0YW5jZSB0byB1c2UpIGFuZCBsaW1pdCAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgIFN0cmVhbVJlYWRlcikuCisKKyAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGxvb3AuY3JlYXRlX3NlcnZlcigpLCBpLmUuIGEKKyAgICBTZXJ2ZXIgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHNlcnZpY2UuCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgICAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlciwgY2xpZW50X2Nvbm5lY3RlZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgICAgIHJldHVybiBwcm90b2NvbAorCisgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCBob3N0LCBwb3J0LCAqKmt3ZHMpKQorCisKK2NsYXNzIFN0cmVhbVJlYWRlclByb3RvY29sKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgIiIiVHJpdmlhbCBoZWxwZXIgY2xhc3MgdG8gYWRhcHQgYmV0d2VlbiBQcm90b2NvbCBhbmQgU3RyZWFtUmVhZGVyLgorCisgICAgKFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgaW5zdGVhZCBvZiBtYWtpbmcgU3RyZWFtUmVhZGVyIGl0c2VsZiBhCisgICAgUHJvdG9jb2wgc3ViY2xhc3MsIGJlY2F1c2UgdGhlIFN0cmVhbVJlYWRlciBoYXMgb3RoZXIgcG90ZW50aWFsCisgICAgdXNlcywgYW5kIHRvIHByZXZlbnQgdGhlIHVzZXIgb2YgdGhlIFN0cmVhbVJlYWRlciB0byBhY2NpZGVudGFsbHkKKyAgICBjYWxsIGluYXBwcm9wcmlhdGUgbWV0aG9kcyBvZiB0aGUgcHJvdG9jb2wuKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbV9yZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2I9Tm9uZSwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlciA9IHN0cmVhbV9yZWFkZXIKKyAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fZHJhaW5fd2FpdGVyID0gTm9uZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiID0gY2xpZW50X2Nvbm5lY3RlZF9jYgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcCAgIyBNYXkgYmUgTm9uZTsgd2UgbWF5IG5ldmVyIG5lZWQgaXQuCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpCisgICAgICAgIGlmIHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2Ioc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlcikKKyAgICAgICAgICAgIGlmIHRhc2tzLmlzY29yb3V0aW5lKHJlcyk6CisgICAgICAgICAgICAgICAgdGFza3MuVGFzayhyZXMsIGxvb3A9c2VsZi5fbG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZW9mKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICMgQWxzbyB3YWtlIHVwIHRoZSB3cml0aW5nIHNpZGUuCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuZmVlZF9kYXRhKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZW9mKCkKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BhdXNlZAorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fZHJhaW5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgU3RyZWFtV3JpdGVyOgorICAgICIiIldyYXBzIGEgVHJhbnNwb3J0LgorCisgICAgVGhpcyBleHBvc2VzIHdyaXRlKCksIHdyaXRlbGluZXMoKSwgW2Nhbl9dd3JpdGVfZW9mKCksCisgICAgZ2V0X2V4dHJhX2luZm8oKSBhbmQgY2xvc2UoKS4gIEl0IGFkZHMgZHJhaW4oKSB3aGljaCByZXR1cm5zIGFuCisgICAgb3B0aW9uYWwgRnV0dXJlIG9uIHdoaWNoIHlvdSBjYW4gd2FpdCBmb3IgZmxvdyBjb250cm9sLiAgSXQgYWxzbworICAgIGFkZHMgYSB0cmFuc3BvcnQgYXR0cmlidXRlIHdoaWNoIHJlZmVyZW5jZXMgdGhlIFRyYW5zcG9ydAorICAgIGRpcmVjdGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3JlYWRlciA9IHJlYWRlcgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRyYW5zcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGVsaW5lcyhkYXRhKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC53cml0ZV9lb2YoKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2FuX3dyaXRlX2VvZigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIGdldF9leHRyYV9pbmZvKHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdCkKKworICAgIGRlZiBkcmFpbihzZWxmKToKKyAgICAgICAgIiIiVGhpcyBtZXRob2QgaGFzIGFuIHVudXN1YWwgcmV0dXJuIHZhbHVlLgorCisgICAgICAgIFRoZSBpbnRlbmRlZCB1c2UgaXMgdG8gd3JpdGUKKworICAgICAgICAgIHcud3JpdGUoZGF0YSkKKyAgICAgICAgICB5aWVsZCBmcm9tIHcuZHJhaW4oKQorCisgICAgICAgIFdoZW4gdGhlcmUncyBub3RoaW5nIHRvIHdhaXQgZm9yLCBkcmFpbigpIHJldHVybnMgKCksIGFuZCB0aGUKKyAgICAgICAgeWllbGQtZnJvbSBjb250aW51ZXMgaW1tZWRpYXRlbHkuICBXaGVuIHRoZSB0cmFuc3BvcnQgYnVmZmVyCisgICAgICAgIGlzIGZ1bGwgKHRoZSBwcm90b2NvbCBpcyBwYXVzZWQpLCBkcmFpbigpIGNyZWF0ZXMgYW5kIHJldHVybnMKKyAgICAgICAgYSBGdXR1cmUgYW5kIHRoZSB5aWVsZC1mcm9tIHdpbGwgYmxvY2sgdW50aWwgdGhhdCBGdXR1cmUgaXMKKyAgICAgICAgY29tcGxldGVkLCB3aGljaCB3aWxsIGhhcHBlbiB3aGVuIHRoZSBidWZmZXIgaXMgKHBhcnRpYWxseSkKKyAgICAgICAgZHJhaW5lZCBhbmQgdGhlIHByb3RvY29sIGlzIHJlc3VtZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9yZWFkZXIuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX3dyaXRlci5fZXhjZXB0aW9uCisgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydC5fY29ubl9sb3N0OiAgIyBVc2VzIHByaXZhdGUgdmFyaWFibGUuCisgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcignQ29ubmVjdGlvbiBsb3N0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb3RvY29sLl9wYXVzZWQ6CisgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fcHJvdG9jb2wuX2RyYWluX3dhaXRlcgorICAgICAgICBhc3NlcnQgd2FpdGVyIGlzIE5vbmUgb3Igd2FpdGVyLmNhbmNlbGxlZCgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wuX2RyYWluX3dhaXRlciA9IHdhaXRlcgorICAgICAgICByZXR1cm4gd2FpdGVyCisKKworY2xhc3MgU3RyZWFtUmVhZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCBsb29wPU5vbmUpOgorICAgICAgICAjIFRoZSBsaW5lIGxlbmd0aCBsaW1pdCBpcyAgYSBzZWN1cml0eSBmZWF0dXJlOworICAgICAgICAjIGl0IGFsc28gZG91YmxlcyBhcyBoYWxmIHRoZSBidWZmZXIgbGltaXQuCisgICAgICAgIHNlbGYuX2xpbWl0ID0gbGltaXQKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKCkgICMgRGVxdWUgb2YgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCA9IDAgICMgQnl0ZXMgaW4gYnVmZmVyLgorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZSAgIyBXaGV0aGVyIHdlJ3JlIGRvbmUuCisgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUgICMgQSBmdXR1cmUuCisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgZGVmIGV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjCisKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIHNldF90cmFuc3BvcnQoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3RyYW5zcG9ydCBpcyBOb25lLCAnVHJhbnNwb3J0IGFscmVhZHkgc2V0JworICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkIGFuZCBzZWxmLl9ieXRlX2NvdW50IDw9IHNlbGYuX2xpbWl0OgorICAgICAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgZmVlZF9lb2Yoc2VsZik6CisgICAgICAgIHNlbGYuX2VvZiA9IFRydWUKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoVHJ1ZSkKKworICAgIGRlZiBmZWVkX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLl9ieXRlX2NvdW50ICs9IGxlbihkYXRhKQorCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgICAgIGlmIChzZWxmLl90cmFuc3BvcnQgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICBub3Qgc2VsZi5fcGF1c2VkIGFuZAorICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCA+IDIqc2VsZi5fbGltaXQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICMgVGhlIHRyYW5zcG9ydCBjYW4ndCBiZSBwYXVzZWQuCisgICAgICAgICAgICAgICAgIyBXZSdsbCBqdXN0IGhhdmUgdG8gYnVmZmVyIGFsbCBkYXRhLgorICAgICAgICAgICAgICAgICMgRm9yZ2V0IHRoZSB0cmFuc3BvcnQgc28gd2UgZG9uJ3Qga2VlcCB0cnlpbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIHBhcnRzX3NpemUgPSAwCisgICAgICAgIG5vdF9lbm91Z2ggPSBUcnVlCisKKyAgICAgICAgd2hpbGUgbm90X2Vub3VnaDoKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX2J1ZmZlciBhbmQgbm90X2Vub3VnaDoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyLnBvcGxlZnQoKQorICAgICAgICAgICAgICAgIGljaGFyID0gZGF0YS5maW5kKGInXG4nKQorICAgICAgICAgICAgICAgIGlmIGljaGFyIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHBhcnRzX3NpemUgKz0gbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWNoYXIgKz0gMQorICAgICAgICAgICAgICAgICAgICBoZWFkLCB0YWlsID0gZGF0YVs6aWNoYXJdLCBkYXRhW2ljaGFyOl0KKyAgICAgICAgICAgICAgICAgICAgaWYgdGFpbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmRsZWZ0KHRhaWwpCisgICAgICAgICAgICAgICAgICAgIG5vdF9lbm91Z2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgcGFydHNfc2l6ZSArPSBsZW4oaGVhZCkKKworICAgICAgICAgICAgICAgIGlmIHBhcnRzX3NpemUgPiBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCAtPSBwYXJ0c19zaXplCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdMaW5lIGlzIHRvbyBsb25nJykKKworICAgICAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdF9lbm91Z2g6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3dhaXRlciBpcyBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisKKyAgICAgICAgbGluZSA9IGInJy5qb2luKHBhcnRzKQorICAgICAgICBzZWxmLl9ieXRlX2NvdW50IC09IHBhcnRzX3NpemUKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3RyYW5zcG9ydCgpCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYnl0ZV9jb3VudCBhbmQgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIGlmIG4gPCAwIG9yIHNlbGYuX2J5dGVfY291bnQgPD0gbjoKKyAgICAgICAgICAgIGRhdGEgPSBiJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCA9IDAKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIHBhcnRzX2J5dGVzID0gMAorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXIgYW5kIHBhcnRzX2J5dGVzIDwgbjoKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIucG9wbGVmdCgpCisgICAgICAgICAgICBkYXRhX2J5dGVzID0gbGVuKGRhdGEpCisgICAgICAgICAgICBpZiBuIDwgcGFydHNfYnl0ZXMgKyBkYXRhX2J5dGVzOgorICAgICAgICAgICAgICAgIGRhdGFfYnl0ZXMgPSBuIC0gcGFydHNfYnl0ZXMKKyAgICAgICAgICAgICAgICBkYXRhLCByZXN0ID0gZGF0YVs6ZGF0YV9ieXRlc10sIGRhdGFbZGF0YV9ieXRlczpdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZGxlZnQocmVzdCkKKworICAgICAgICAgICAgcGFydHMuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICBwYXJ0c19ieXRlcyArPSBkYXRhX2J5dGVzCisgICAgICAgICAgICBzZWxmLl9ieXRlX2NvdW50IC09IGRhdGFfYnl0ZXMKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorCisgICAgICAgIHJldHVybiBiJycuam9pbihwYXJ0cykKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgcmVhZGV4YWN0bHkoc2VsZiwgbik6CisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgICAgIGlmIG4gPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBiJycKKworICAgICAgICB3aGlsZSBzZWxmLl9ieXRlX2NvdW50IDwgbiBhbmQgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2FpdGVyCisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZWxmLnJlYWQobikpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby90YXNrcy5weSBiL0xpYi9hc3luY2lvL3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjFhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90YXNrcy5weQpAQCAtMCwwICsxLDYzNyBAQAorIiIiU3VwcG9ydCBmb3IgdGFza3MsIGNvcm91dGluZXMgYW5kIHRoZSBzY2hlZHVsZXIuIiIiCisKK19fYWxsX18gPSBbJ2Nvcm91dGluZScsICdUYXNrJywKKyAgICAgICAgICAgJ0ZJUlNUX0NPTVBMRVRFRCcsICdGSVJTVF9FWENFUFRJT04nLCAnQUxMX0NPTVBMRVRFRCcsCisgICAgICAgICAgICd3YWl0JywgJ3dhaXRfZm9yJywgJ2FzX2NvbXBsZXRlZCcsICdzbGVlcCcsICdhc3luYycsCisgICAgICAgICAgICdnYXRoZXInLAorICAgICAgICAgICBdCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKyMgSWYgeW91IHNldCBfREVCVUcgdG8gdHJ1ZSwgQGNvcm91dGluZSB3aWxsIHdyYXAgdGhlIHJlc3VsdGluZworIyBnZW5lcmF0b3Igb2JqZWN0cyBpbiBhIENvcm9XcmFwcGVyIGluc3RhbmNlIChkZWZpbmVkIGJlbG93KS4gIFRoYXQKKyMgaW5zdGFuY2Ugd2lsbCBsb2cgYSBtZXNzYWdlIHdoZW4gdGhlIGdlbmVyYXRvciBpcyBuZXZlciBpdGVyYXRlZAorIyBvdmVyLCB3aGljaCBtYXkgaGFwcGVuIHdoZW4geW91IGZvcmdldCB0byB1c2UgInlpZWxkIGZyb20iIHdpdGggYQorIyBjb3JvdXRpbmUgY2FsbC4gIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIF9ERUJVRyBmbGFnIGlzIHRha2VuCisjIHdoZW4gdGhlIGRlY29yYXRvciBpcyB1c2VkLCBzbyB0byBiZSBvZiBhbnkgdXNlIGl0IG11c3QgYmUgc2V0CisjIGJlZm9yZSB5b3UgZGVmaW5lIHlvdXIgY29yb3V0aW5lcy4gIEEgZG93bnNpZGUgb2YgdXNpbmcgdGhpcyBmZWF0dXJlCisjIGlzIHRoYXQgdHJhY2ViYWNrcyBzaG93IGVudHJpZXMgZm9yIHRoZSBDb3JvV3JhcHBlci5fX25leHRfXyBtZXRob2QKKyMgd2hlbiBfREVCVUcgaXMgdHJ1ZS4KK19ERUJVRyA9IEZhbHNlCisKKworY2xhc3MgQ29yb1dyYXBwZXI6CisgICAgIiIiV3JhcHBlciBmb3IgY29yb3V0aW5lIGluIF9ERUJVRyBtb2RlLiIiIgorCisgICAgX19zbG90X18gPSBbJ2dlbicsICdmdW5jJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW4sIGZ1bmMpOgorICAgICAgICBhc3NlcnQgaW5zcGVjdC5pc2dlbmVyYXRvcihnZW4pLCBnZW4KKyAgICAgICAgc2VsZi5nZW4gPSBnZW4KKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbmV4dChzZWxmLmdlbikKKworICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLnNlbmQodmFsdWUpCisKKyAgICBkZWYgdGhyb3coc2VsZiwgZXhjKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLnRocm93KGV4YykKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmNsb3NlKCkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBmcmFtZSA9IHNlbGYuZ2VuLmdpX2ZyYW1lCisgICAgICAgIGlmIGZyYW1lIGlzIG5vdCBOb25lIGFuZCBmcmFtZS5mX2xhc3RpID09IC0xOgorICAgICAgICAgICAgZnVuYyA9IHNlbGYuZnVuYworICAgICAgICAgICAgY29kZSA9IGZ1bmMuX19jb2RlX18KKyAgICAgICAgICAgIGZpbGVuYW1lID0gY29kZS5jb19maWxlbmFtZQorICAgICAgICAgICAgbGluZW5vID0gY29kZS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKAorICAgICAgICAgICAgICAgICdDb3JvdXRpbmUgJXIgZGVmaW5lZCBhdCAlczolcyB3YXMgbmV2ZXIgeWllbGRlZCBmcm9tJywKKyAgICAgICAgICAgICAgICBmdW5jLl9fbmFtZV9fLCBmaWxlbmFtZSwgbGluZW5vKQorCisKK2RlZiBjb3JvdXRpbmUoZnVuYyk6CisgICAgIiIiRGVjb3JhdG9yIHRvIG1hcmsgY29yb3V0aW5lcy4KKworICAgIElmIHRoZSBjb3JvdXRpbmUgaXMgbm90IHlpZWxkZWQgZnJvbSBiZWZvcmUgaXQgaXMgZGVzdHJveWVkLAorICAgIGFuIGVycm9yIG1lc3NhZ2UgaXMgbG9nZ2VkLgorICAgICIiIgorICAgIGlmIGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbihmdW5jKToKKyAgICAgICAgY29ybyA9IGZ1bmMKKyAgICBlbHNlOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgICAgIGRlZiBjb3JvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJlcyA9IGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlcywgZnV0dXJlcy5GdXR1cmUpIG9yIGluc3BlY3QuaXNnZW5lcmF0b3IocmVzKToKKyAgICAgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHJlcworICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgaWYgbm90IF9ERUJVRzoKKyAgICAgICAgd3JhcHBlciA9IGNvcm8KKyAgICBlbHNlOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgdyA9IENvcm9XcmFwcGVyKGNvcm8oKmFyZ3MsICoqa3dkcyksIGZ1bmMpCisgICAgICAgICAgICB3Ll9fbmFtZV9fID0gY29yby5fX25hbWVfXworICAgICAgICAgICAgdy5fX2RvY19fID0gY29yby5fX2RvY19fCisgICAgICAgICAgICByZXR1cm4gdworCisgICAgd3JhcHBlci5faXNfY29yb3V0aW5lID0gVHJ1ZSAgIyBGb3IgaXNjb3JvdXRpbmVmdW5jdGlvbigpLgorICAgIHJldHVybiB3cmFwcGVyCisKKworZGVmIGlzY29yb3V0aW5lZnVuY3Rpb24oZnVuYyk6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgZnVuYyBpcyBhIGRlY29yYXRlZCBjb3JvdXRpbmUgZnVuY3Rpb24uIiIiCisgICAgcmV0dXJuIGdldGF0dHIoZnVuYywgJ19pc19jb3JvdXRpbmUnLCBGYWxzZSkKKworCitkZWYgaXNjb3JvdXRpbmUob2JqKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBvYmogaXMgYSBjb3JvdXRpbmUgb2JqZWN0LiIiIgorICAgIHJldHVybiBpc2luc3RhbmNlKG9iaiwgQ29yb1dyYXBwZXIpIG9yIGluc3BlY3QuaXNnZW5lcmF0b3Iob2JqKQorCisKK2NsYXNzIFRhc2soZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIkEgY29yb3V0aW5lIHdyYXBwZWQgaW4gYSBGdXR1cmUuIiIiCisKKyAgICAjIEFuIGltcG9ydGFudCBpbnZhcmlhbnQgbWFpbnRhaW5lZCB3aGlsZSBhIFRhc2sgbm90IGRvbmU6CisgICAgIworICAgICMgLSBFaXRoZXIgX2Z1dF93YWl0ZXIgaXMgTm9uZSwgYW5kIF9zdGVwKCkgaXMgc2NoZWR1bGVkOworICAgICMgLSBvciBfZnV0X3dhaXRlciBpcyBzb21lIEZ1dHVyZSwgYW5kIF9zdGVwKCkgaXMgKm5vdCogc2NoZWR1bGVkLgorICAgICMKKyAgICAjIFRoZSBvbmx5IHRyYW5zaXRpb24gZnJvbSB0aGUgbGF0dGVyIHRvIHRoZSBmb3JtZXIgaXMgdGhyb3VnaAorICAgICMgX3dha2V1cCgpLiAgV2hlbiBfZnV0X3dhaXRlciBpcyBub3QgTm9uZSwgb25lIG9mIGl0cyBjYWxsYmFja3MKKyAgICAjIG11c3QgYmUgX3dha2V1cCgpLgorCisgICAgIyBXZWFrIHNldCBjb250YWluaW5nIGFsbCB0YXNrcyBhbGl2ZS4KKyAgICBfYWxsX3Rhc2tzID0gd2Vha3JlZi5XZWFrU2V0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhbGxfdGFza3MoY2xzLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzZXQgb2YgYWxsIHRhc2tzIGZvciBhbiBldmVudCBsb29wLgorCisgICAgICAgIEJ5IGRlZmF1bHQgYWxsIHRhc2tzIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGFyZSByZXR1cm5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICByZXR1cm4ge3QgZm9yIHQgaW4gY2xzLl9hbGxfdGFza3MgaWYgdC5fbG9vcCBpcyBsb29wfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvcm8sICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2Nvcm91dGluZShjb3JvKSwgcmVwcihjb3JvKSAgIyBOb3QgYSBjb3JvdXRpbmUgZnVuY3Rpb24hCisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl9jb3JvID0gaXRlcihjb3JvKSAgIyBVc2UgdGhlIGl0ZXJhdG9yIGp1c3QgaW4gY2FzZS4KKyAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9zdGVwKQorICAgICAgICBzZWxmLl9fY2xhc3NfXy5fYWxsX3Rhc2tzLmFkZChzZWxmKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgaWYgKHNlbGYuX211c3RfY2FuY2VsIGFuZAorICAgICAgICAgICAgc2VsZi5fc3RhdGUgPT0gZnV0dXJlcy5fUEVORElORyBhbmQKKyAgICAgICAgICAgICc8UEVORElORycgaW4gcmVzKToKKyAgICAgICAgICAgIHJlcyA9IHJlcy5yZXBsYWNlKCc8UEVORElORycsICc8Q0FOQ0VMTElORycsIDEpCisgICAgICAgIGkgPSByZXMuZmluZCgnPCcpCisgICAgICAgIGlmIGkgPCAwOgorICAgICAgICAgICAgaSA9IGxlbihyZXMpCisgICAgICAgIHJlcyA9IHJlc1s6aV0gKyAnKDx7fT4pJy5mb3JtYXQoc2VsZi5fY29yby5fX25hbWVfXykgKyByZXNbaTpdCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBnZXRfc3RhY2soc2VsZiwgKiwgbGltaXQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBzdGFjayBmcmFtZXMgZm9yIHRoaXMgdGFzaydzIGNvcm91dGluZS4KKworICAgICAgICBJZiB0aGUgY29yb3V0aW5lIGlzIGFjdGl2ZSwgdGhpcyByZXR1cm5zIHRoZSBzdGFjayB3aGVyZSBpdCBpcworICAgICAgICBzdXNwZW5kZWQuICBJZiB0aGUgY29yb3V0aW5lIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9yIHdhcworICAgICAgICBjYW5jZWxsZWQsIHRoaXMgcmV0dXJucyBhbiBlbXB0eSBsaXN0LiAgSWYgdGhlIGNvcm91dGluZSB3YXMKKyAgICAgICAgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24sIHRoaXMgcmV0dXJucyB0aGUgbGlzdCBvZiB0cmFjZWJhY2sKKyAgICAgICAgZnJhbWVzLgorCisgICAgICAgIFRoZSBmcmFtZXMgYXJlIGFsd2F5cyBvcmRlcmVkIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKworICAgICAgICBUaGUgb3B0aW9uYWwgbGltaXQgZ2l2ZXMgdGhlIG1heGltdW0gbnVtbWJlciBvZiBmcmFtZXMgdG8KKyAgICAgICAgcmV0dXJuOyBieSBkZWZhdWx0IGFsbCBhdmFpbGFibGUgZnJhbWVzIGFyZSByZXR1cm5lZC4gIEl0cworICAgICAgICBtZWFuaW5nIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBzdGFjayBvciBhIHRyYWNlYmFjayBpcworICAgICAgICByZXR1cm5lZDogdGhlIG5ld2VzdCBmcmFtZXMgb2YgYSBzdGFjayBhcmUgcmV0dXJuZWQsIGJ1dCB0aGUKKyAgICAgICAgb2xkZXN0IGZyYW1lcyBvZiBhIHRyYWNlYmFjayBhcmUgcmV0dXJuZWQuICAoVGhpcyBtYXRjaGVzIHRoZQorICAgICAgICBiZWhhdmlvciBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZS4pCisKKyAgICAgICAgRm9yIHJlYXNvbnMgYmV5b25kIG91ciBjb250cm9sLCBvbmx5IG9uZSBzdGFjayBmcmFtZSBpcworICAgICAgICByZXR1cm5lZCBmb3IgYSBzdXNwZW5kZWQgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZnJhbWVzID0gW10KKyAgICAgICAgZiA9IHNlbGYuX2Nvcm8uZ2lfZnJhbWUKKyAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IDw9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBsaW1pdCAtPSAxCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGYgPSBmLmZfYmFjaworICAgICAgICAgICAgZnJhbWVzLnJldmVyc2UoKQorICAgICAgICBlbGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRiID0gc2VsZi5fZXhjZXB0aW9uLl9fdHJhY2ViYWNrX18KKyAgICAgICAgICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgLT0gMQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQodGIudGJfZnJhbWUpCisgICAgICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBmcmFtZXMKKworICAgIGRlZiBwcmludF9zdGFjayhzZWxmLCAqLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgorICAgICAgICAiIiJQcmludCB0aGUgc3RhY2sgb3IgdHJhY2ViYWNrIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgICAgVGhpcyBwcm9kdWNlcyBvdXRwdXQgc2ltaWxhciB0byB0aGF0IG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLAorICAgICAgICBmb3IgdGhlIGZyYW1lcyByZXRyaWV2ZWQgYnkgZ2V0X3N0YWNrKCkuICBUaGUgbGltaXQgYXJndW1lbnQKKyAgICAgICAgaXMgcGFzc2VkIHRvIGdldF9zdGFjaygpLiAgVGhlIGZpbGUgYXJndW1lbnQgaXMgYW4gSS9PIHN0cmVhbQorICAgICAgICB0byB3aGljaCB0aGUgb3V0cHV0IGdvZXM7IGJ5IGRlZmF1bHQgaXQgZ29lcyB0byBzeXMuc3RkZXJyLgorICAgICAgICAiIiIKKyAgICAgICAgZXh0cmFjdGVkX2xpc3QgPSBbXQorICAgICAgICBjaGVja2VkID0gc2V0KCkKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5nZXRfc3RhY2sobGltaXQ9bGltaXQpOgorICAgICAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubworICAgICAgICAgICAgY28gPSBmLmZfY29kZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQorICAgICAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiBjaGVja2VkOgorICAgICAgICAgICAgICAgIGNoZWNrZWQuYWRkKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQorICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQorICAgICAgICAgICAgZXh0cmFjdGVkX2xpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKKyAgICAgICAgZXhjID0gc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIGlmIG5vdCBleHRyYWN0ZWRfbGlzdDoKKyAgICAgICAgICAgIHByaW50KCdObyBzdGFjayBmb3IgJXInICUgc2VsZiwgZmlsZT1maWxlKQorICAgICAgICBlbGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50KCdUcmFjZWJhY2sgZm9yICVyIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicgJSBzZWxmLAorICAgICAgICAgICAgICAgICAgZmlsZT1maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoJ1N0YWNrIGZvciAlciAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonICUgc2VsZiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZmlsZSkKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2xpc3QoZXh0cmFjdGVkX2xpc3QsIGZpbGU9ZmlsZSkKKyAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGMuX19jbGFzc19fLCBleGMpOgorICAgICAgICAgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZmlsZSwgZW5kPScnKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIuY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgIyBMZWF2ZSBzZWxmLl9mdXRfd2FpdGVyOyBpdCBtYXkgYmUgYSBUYXNrIHRoYXQKKyAgICAgICAgICAgICAgICAjIGNhdGNoZXMgYW5kIGlnbm9yZXMgdGhlIGNhbmNlbGxhdGlvbiBzbyB3ZSBtYXkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gY2FuY2VsIGl0IGFnYWluIGxhdGVyLgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgSXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHNlbGYuX3N0ZXAgaXMgYWxyZWFkeSBzY2hlZHVsZWQuCisgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9zdGVwKHNlbGYsIHZhbHVlPU5vbmUsIGV4Yz1Ob25lKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRvbmUoKSwgXAorICAgICAgICAgICAgJ19zdGVwKCk6IGFscmVhZHkgZG9uZTogeyFyfSwgeyFyfSwgeyFyfScuZm9ybWF0KHNlbGYsIHZhbHVlLCBleGMpCisgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgICAgICBleGMgPSBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKCkKKyAgICAgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgY29ybyA9IHNlbGYuX2Nvcm8KKyAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IE5vbmUKKyAgICAgICAgIyBDYWxsIGVpdGhlciBjb3JvLnRocm93KGV4Yykgb3IgY29yby5zZW5kKHZhbHVlKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcm8udGhyb3coZXhjKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JvLnNlbmQodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQoY29ybykKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5zZXRfcmVzdWx0KGV4Yy52YWx1ZSkKKyAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc3VwZXIoKS5jYW5jZWwoKSAgIyBJLmUuLCBGdXR1cmUuY2FuY2VsKHNlbGYpLgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgICAgICAgICAjIFlpZWxkZWQgRnV0dXJlIG11c3QgY29tZSBmcm9tIEZ1dHVyZS5fX2l0ZXJfXygpLgorICAgICAgICAgICAgICAgIGlmIHJlc3VsdC5fYmxvY2tpbmc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5fYmxvY2tpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fd2FrZXVwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mdXRfd2FpdGVyID0gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlci5jYW5jZWwoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0YXNrIHshcn0gd2l0aCB7IXJ9Jy5mb3JtYXQoc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICBlbGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgQmFyZSB5aWVsZCByZWxpbnF1aXNoZXMgY29udHJvbCBmb3Igb25lIGV2ZW50IGxvb3AgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3N0ZXApCisgICAgICAgICAgICBlbGlmIGluc3BlY3QuaXNnZW5lcmF0b3IocmVzdWx0KToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIGEgZ2VuZXJhdG9yIGlzIGp1c3Qgd3JvbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdnZW5lcmF0b3IgaW4gdGFzayB7IXJ9IHdpdGgge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCByZXN1bHQpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBzb21ldGhpbmcgZWxzZSBpcyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1Rhc2sgZ290IGJhZCB5aWVsZDogeyFyfScuZm9ybWF0KHJlc3VsdCkpKQorICAgICAgICBzZWxmID0gTm9uZQorCisgICAgZGVmIF93YWtldXAoc2VsZiwgZnV0dXJlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBmdXR1cmUucmVzdWx0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAjIFRoaXMgbWF5IGFsc28gYmUgYSBjYW5jZWxsYXRpb24uCisgICAgICAgICAgICBzZWxmLl9zdGVwKE5vbmUsIGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZXAodmFsdWUsIE5vbmUpCisgICAgICAgIHNlbGYgPSBOb25lICAjIE5lZWRlZCB0byBicmVhayBjeWNsZXMgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLgorCisKKyMgd2FpdCgpIGFuZCBhc19jb21wbGV0ZWQoKSBzaW1pbGFyIHRvIHRob3NlIGluIFBFUCAzMTQ4LgorCitGSVJTVF9DT01QTEVURUQgPSBjb25jdXJyZW50LmZ1dHVyZXMuRklSU1RfQ09NUExFVEVECitGSVJTVF9FWENFUFRJT04gPSBjb25jdXJyZW50LmZ1dHVyZXMuRklSU1RfRVhDRVBUSU9OCitBTExfQ09NUExFVEVEID0gY29uY3VycmVudC5mdXR1cmVzLkFMTF9DT01QTEVURUQKKworCitAY29yb3V0aW5lCitkZWYgd2FpdChmcywgKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUsIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpOgorICAgICIiIldhaXQgZm9yIHRoZSBGdXR1cmVzIGFuZCBjb3JvdXRpbmVzIGdpdmVuIGJ5IGZzIHRvIGNvbXBsZXRlLgorCisgICAgQ29yb3V0aW5lcyB3aWxsIGJlIHdyYXBwZWQgaW4gVGFza3MuCisKKyAgICBSZXR1cm5zIHR3byBzZXRzIG9mIEZ1dHVyZTogKGRvbmUsIHBlbmRpbmcpLgorCisgICAgVXNhZ2U6CisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KGZzKQorCisgICAgTm90ZTogVGhpcyBkb2VzIG5vdCByYWlzZSBUaW1lb3V0RXJyb3IhIEZ1dHVyZXMgdGhhdCBhcmVuJ3QgZG9uZQorICAgIHdoZW4gdGhlIHRpbWVvdXQgb2NjdXJzIGFyZSByZXR1cm5lZCBpbiB0aGUgc2Vjb25kIHNldC4KKyAgICAiIiIKKyAgICBpZiBub3QgZnM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NldCBvZiBjb3JvdXRpbmVzL0Z1dHVyZXMgaXMgZW1wdHkuJykKKworICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBmcyA9IHNldChhc3luYyhmLCBsb29wPWxvb3ApIGZvciBmIGluIGZzKQorCisgICAgaWYgcmV0dXJuX3doZW4gbm90IGluIChGSVJTVF9DT01QTEVURUQsIEZJUlNUX0VYQ0VQVElPTiwgQUxMX0NPTVBMRVRFRCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgcmV0dXJuX3doZW4gdmFsdWU6IHt9Jy5mb3JtYXQocmV0dXJuX3doZW4pKQorICAgIHJldHVybiAoeWllbGQgZnJvbSBfd2FpdChmcywgdGltZW91dCwgcmV0dXJuX3doZW4sIGxvb3ApKQorCisKK2RlZiBfcmVsZWFzZV93YWl0ZXIod2FpdGVyLCB2YWx1ZT1UcnVlLCAqYXJncyk6CisgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KHZhbHVlKQorCisKK0Bjb3JvdXRpbmUKK2RlZiB3YWl0X2ZvcihmdXQsIHRpbWVvdXQsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgdGhlIHNpbmdsZSBGdXR1cmUgb3IgY29yb3V0aW5lIHRvIGNvbXBsZXRlLCB3aXRoIHRpbWVvdXQuCisKKyAgICBDb3JvdXRpbmUgd2lsbCBiZSB3cmFwcGVkIGluIFRhc2suCisKKyAgICBSZXR1cm5zIHJlc3VsdCBvZiB0aGUgRnV0dXJlIG9yIGNvcm91dGluZS4gIFJhaXNlcyBUaW1lb3V0RXJyb3Igd2hlbgorICAgIHRpbWVvdXQgb2NjdXJzLgorCisgICAgVXNhZ2U6CisKKyAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBhc3luY2lvLndhaXRfZm9yKGZ1dCwgMTAuMCkKKworICAgICIiIgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgdGltZW91dF9oYW5kbGUgPSBsb29wLmNhbGxfbGF0ZXIodGltZW91dCwgX3JlbGVhc2Vfd2FpdGVyLCB3YWl0ZXIsIEZhbHNlKQorICAgIGNiID0gZnVuY3Rvb2xzLnBhcnRpYWwoX3JlbGVhc2Vfd2FpdGVyLCB3YWl0ZXIsIFRydWUpCisKKyAgICBmdXQgPSBhc3luYyhmdXQsIGxvb3A9bG9vcCkKKyAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisKKyAgICB0cnk6CisgICAgICAgIGlmICh5aWVsZCBmcm9tIHdhaXRlcik6CisgICAgICAgICAgICByZXR1cm4gZnV0LnJlc3VsdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgICAgICByYWlzZSBmdXR1cmVzLlRpbWVvdXRFcnJvcigpCisgICAgZmluYWxseToKKyAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKworCitAY29yb3V0aW5lCitkZWYgX3dhaXQoZnMsIHRpbWVvdXQsIHJldHVybl93aGVuLCBsb29wKToKKyAgICAiIiJJbnRlcm5hbCBoZWxwZXIgZm9yIHdhaXQoKSBhbmQgX3dhaXRfZm9yKCkuCisKKyAgICBUaGUgZnMgYXJndW1lbnQgbXVzdCBiZSBhIGNvbGxlY3Rpb24gb2YgRnV0dXJlcy4KKyAgICAiIiIKKyAgICBhc3NlcnQgZnMsICdTZXQgb2YgRnV0dXJlcyBpcyBlbXB0eS4nCisgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gTm9uZQorICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyKQorICAgIGNvdW50ZXIgPSBsZW4oZnMpCisKKyAgICBkZWYgX29uX2NvbXBsZXRpb24oZik6CisgICAgICAgIG5vbmxvY2FsIGNvdW50ZXIKKyAgICAgICAgY291bnRlciAtPSAxCisgICAgICAgIGlmIChjb3VudGVyIDw9IDAgb3IKKyAgICAgICAgICAgIHJldHVybl93aGVuID09IEZJUlNUX0NPTVBMRVRFRCBvcgorICAgICAgICAgICAgcmV0dXJuX3doZW4gPT0gRklSU1RfRVhDRVBUSU9OIGFuZCAobm90IGYuY2FuY2VsbGVkKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lKSk6CisgICAgICAgICAgICBpZiB0aW1lb3V0X2hhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoRmFsc2UpCisKKyAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhfb25fY29tcGxldGlvbikKKworICAgIHRyeToKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiB0aW1lb3V0X2hhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKyAgICBkb25lLCBwZW5kaW5nID0gc2V0KCksIHNldCgpCisgICAgZm9yIGYgaW4gZnM6CisgICAgICAgIGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisgICAgICAgIGlmIGYuZG9uZSgpOgorICAgICAgICAgICAgZG9uZS5hZGQoZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBlbmRpbmcuYWRkKGYpCisgICAgcmV0dXJuIGRvbmUsIHBlbmRpbmcKKworCisjIFRoaXMgaXMgKm5vdCogYSBAY29yb3V0aW5lISAgSXQgaXMganVzdCBhbiBpdGVyYXRvciAoeWllbGRpbmcgRnV0dXJlcykuCitkZWYgYXNfY29tcGxldGVkKGZzLCAqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIHdob3NlIHZhbHVlcywgd2hlbiB3YWl0ZWQgZm9yLCBhcmUgRnV0dXJlcy4KKworICAgIFRoaXMgZGlmZmVycyBmcm9tIFBFUCAzMTQ4OyB0aGUgcHJvcGVyIHdheSB0byB1c2UgdGhpcyBpczoKKworICAgICAgICBmb3IgZiBpbiBhc19jb21wbGV0ZWQoZnMpOgorICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBmICAjIFRoZSAneWllbGQgZnJvbScgbWF5IHJhaXNlLgorICAgICAgICAgICAgIyBVc2UgcmVzdWx0LgorCisgICAgUmFpc2VzIFRpbWVvdXRFcnJvciBpZiB0aGUgdGltZW91dCBvY2N1cnMgYmVmb3JlIGFsbCBGdXR1cmVzIGFyZQorICAgIGRvbmUuCisKKyAgICBOb3RlOiBUaGUgZnV0dXJlcyAnZicgYXJlIG5vdCBuZWNlc3NhcmlseSBtZW1iZXJzIG9mIGZzLgorICAgICIiIgorICAgIGxvb3AgPSBsb29wIGlmIGxvb3AgaXMgbm90IE5vbmUgZWxzZSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIGRlYWRsaW5lID0gTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSBsb29wLnRpbWUoKSArIHRpbWVvdXQKKyAgICB0b2RvID0gc2V0KGFzeW5jKGYsIGxvb3A9bG9vcCkgZm9yIGYgaW4gZnMpCisgICAgY29tcGxldGVkID0gY29sbGVjdGlvbnMuZGVxdWUoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfd2FpdF9mb3Jfb25lKCk6CisgICAgICAgIHdoaWxlIG5vdCBjb21wbGV0ZWQ6CisgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQorICAgICAgICAgICAgaWYgZGVhZGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gbG9vcC50aW1lKCkKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gX3dhaXQoCisgICAgICAgICAgICAgICAgdG9kbywgdGltZW91dCwgRklSU1RfQ09NUExFVEVELCBsb29wKQorICAgICAgICAgICAgIyBNdWx0aXBsZSBjYWxsZXJzIG1pZ2h0IGJlIHdhaXRpbmcgZm9yIHRoZSBzYW1lIGV2ZW50cworICAgICAgICAgICAgIyBhbmQgZ2V0dGluZyB0aGUgc2FtZSBvdXRjb21lLiAgRGVkdXBlIGJ5IHVwZGF0aW5nIHRvZG8uCisgICAgICAgICAgICBmb3IgZiBpbiBkb25lOgorICAgICAgICAgICAgICAgIGlmIGYgaW4gdG9kbzoKKyAgICAgICAgICAgICAgICAgICAgdG9kby5yZW1vdmUoZikKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkLmFwcGVuZChmKQorICAgICAgICBmID0gY29tcGxldGVkLnBvcGxlZnQoKQorICAgICAgICByZXR1cm4gZi5yZXN1bHQoKSAgIyBNYXkgcmFpc2UuCisKKyAgICBmb3IgXyBpbiByYW5nZShsZW4odG9kbykpOgorICAgICAgICB5aWVsZCBfd2FpdF9mb3Jfb25lKCkKKworCitAY29yb3V0aW5lCitkZWYgc2xlZXAoZGVsYXksIHJlc3VsdD1Ob25lLCAqLCBsb29wPU5vbmUpOgorICAgICIiIkNvcm91dGluZSB0aGF0IGNvbXBsZXRlcyBhZnRlciBhIGdpdmVuIHRpbWUgKGluIHNlY29uZHMpLiIiIgorICAgIGZ1dHVyZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICBoID0gZnV0dXJlLl9sb29wLmNhbGxfbGF0ZXIoZGVsYXksIGZ1dHVyZS5zZXRfcmVzdWx0LCByZXN1bHQpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZnV0dXJlKQorICAgIGZpbmFsbHk6CisgICAgICAgIGguY2FuY2VsKCkKKworCitkZWYgYXN5bmMoY29yb19vcl9mdXR1cmUsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV3JhcCBhIGNvcm91dGluZSBpbiBhIGZ1dHVyZS4KKworICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIEZ1dHVyZSwgaXQgaXMgcmV0dXJuZWQgZGlyZWN0bHkuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShjb3JvX29yX2Z1dHVyZSwgZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lIGFuZCBsb29wIGlzIG5vdCBjb3JvX29yX2Z1dHVyZS5fbG9vcDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2xvb3AgYXJndW1lbnQgbXVzdCBhZ3JlZSB3aXRoIEZ1dHVyZScpCisgICAgICAgIHJldHVybiBjb3JvX29yX2Z1dHVyZQorICAgIGVsaWYgaXNjb3JvdXRpbmUoY29yb19vcl9mdXR1cmUpOgorICAgICAgICByZXR1cm4gVGFzayhjb3JvX29yX2Z1dHVyZSwgbG9vcD1sb29wKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBGdXR1cmUgb3IgY29yb3V0aW5lIGlzIHJlcXVpcmVkJykKKworCitjbGFzcyBfR2F0aGVyaW5nRnV0dXJlKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJIZWxwZXIgZm9yIGdhdGhlcigpLgorCisgICAgVGhpcyBvdmVycmlkZXMgY2FuY2VsKCkgdG8gY2FuY2VsIGFsbCB0aGUgY2hpbGRyZW4gYW5kIGFjdCBtb3JlCisgICAgbGlrZSBUYXNrLmNhbmNlbCgpLCB3aGljaCBkb2Vzbid0IGltbWVkaWF0ZWx5IG1hcmsgaXRzZWxmIGFzCisgICAgY2FuY2VsbGVkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoaWxkcmVuLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBjaGlsZHJlbgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuX2NoaWxkcmVuOgorICAgICAgICAgICAgY2hpbGQuY2FuY2VsKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgZ2F0aGVyKCpjb3Jvc19vcl9mdXR1cmVzLCBsb29wPU5vbmUsIHJldHVybl9leGNlcHRpb25zPUZhbHNlKToKKyAgICAiIiJSZXR1cm4gYSBmdXR1cmUgYWdncmVnYXRpbmcgcmVzdWx0cyBmcm9tIHRoZSBnaXZlbiBjb3JvdXRpbmVzCisgICAgb3IgZnV0dXJlcy4KKworICAgIEFsbCBmdXR1cmVzIG11c3Qgc2hhcmUgdGhlIHNhbWUgZXZlbnQgbG9vcC4gIElmIGFsbCB0aGUgdGFza3MgYXJlCisgICAgZG9uZSBzdWNjZXNzZnVsbHksIHRoZSByZXR1cm5lZCBmdXR1cmUncyByZXN1bHQgaXMgdGhlIGxpc3Qgb2YKKyAgICByZXN1bHRzIChpbiB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIHNlcXVlbmNlLCBub3QgbmVjZXNzYXJpbHkKKyAgICB0aGUgb3JkZXIgb2YgcmVzdWx0cyBhcnJpdmFsKS4gIElmICpyZXN1bHRfZXhjZXB0aW9uKiBpcyBUcnVlLAorICAgIGV4Y2VwdGlvbnMgaW4gdGhlIHRhc2tzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzIHN1Y2Nlc3NmdWwKKyAgICByZXN1bHRzLCBhbmQgZ2F0aGVyZWQgaW4gdGhlIHJlc3VsdCBsaXN0OyBvdGhlcndpc2UsIHRoZSBmaXJzdAorICAgIHJhaXNlZCBleGNlcHRpb24gd2lsbCBiZSBpbW1lZGlhdGVseSBwcm9wYWdhdGVkIHRvIHRoZSByZXR1cm5lZAorICAgIGZ1dHVyZS4KKworICAgIENhbmNlbGxhdGlvbjogaWYgdGhlIG91dGVyIEZ1dHVyZSBpcyBjYW5jZWxsZWQsIGFsbCBjaGlsZHJlbiAodGhhdAorICAgIGhhdmUgbm90IGNvbXBsZXRlZCB5ZXQpIGFyZSBhbHNvIGNhbmNlbGxlZC4gIElmIGFueSBjaGlsZCBpcworICAgIGNhbmNlbGxlZCwgdGhpcyBpcyB0cmVhdGVkIGFzIGlmIGl0IHJhaXNlZCBDYW5jZWxsZWRFcnJvciAtLQorICAgIHRoZSBvdXRlciBGdXR1cmUgaXMgKm5vdCogY2FuY2VsbGVkIGluIHRoaXMgY2FzZS4gIChUaGlzIGlzIHRvCisgICAgcHJldmVudCB0aGUgY2FuY2VsbGF0aW9uIG9mIG9uZSBjaGlsZCB0byBjYXVzZSBvdGhlciBjaGlsZHJlbiB0bworICAgIGJlIGNhbmNlbGxlZC4pCisgICAgIiIiCisgICAgY2hpbGRyZW4gPSBbYXN5bmMoZnV0LCBsb29wPWxvb3ApIGZvciBmdXQgaW4gY29yb3Nfb3JfZnV0dXJlc10KKyAgICBuID0gbGVuKGNoaWxkcmVuKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgb3V0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgIG91dGVyLnNldF9yZXN1bHQoW10pCisgICAgICAgIHJldHVybiBvdXRlcgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGNoaWxkcmVuWzBdLl9sb29wCisgICAgZm9yIGZ1dCBpbiBjaGlsZHJlbjoKKyAgICAgICAgaWYgZnV0Ll9sb29wIGlzIG5vdCBsb29wOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZnV0dXJlcyBhcmUgdGllZCB0byBkaWZmZXJlbnQgZXZlbnQgbG9vcHMiKQorICAgIG91dGVyID0gX0dhdGhlcmluZ0Z1dHVyZShjaGlsZHJlbiwgbG9vcD1sb29wKQorICAgIG5maW5pc2hlZCA9IDAKKyAgICByZXN1bHRzID0gW05vbmVdICogbgorCisgICAgZGVmIF9kb25lX2NhbGxiYWNrKGksIGZ1dCk6CisgICAgICAgIG5vbmxvY2FsIG5maW5pc2hlZAorICAgICAgICBpZiBvdXRlci5fc3RhdGUgIT0gZnV0dXJlcy5fUEVORElORzoKKyAgICAgICAgICAgIGlmIGZ1dC5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgTWFyayBleGNlcHRpb24gcmV0cmlldmVkLgorICAgICAgICAgICAgICAgIGZ1dC5leGNlcHRpb24oKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGZ1dC5fc3RhdGUgPT0gZnV0dXJlcy5fQ0FOQ0VMTEVEOgorICAgICAgICAgICAgcmVzID0gZnV0dXJlcy5DYW5jZWxsZWRFcnJvcigpCisgICAgICAgICAgICBpZiBub3QgcmV0dXJuX2V4Y2VwdGlvbnM6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X2V4Y2VwdGlvbihyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgZnV0Ll9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXMgPSBmdXQuZXhjZXB0aW9uKCkgICMgTWFyayBleGNlcHRpb24gcmV0cmlldmVkLgorICAgICAgICAgICAgaWYgbm90IHJldHVybl9leGNlcHRpb25zOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24ocmVzKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzID0gZnV0Ll9yZXN1bHQKKyAgICAgICAgcmVzdWx0c1tpXSA9IHJlcworICAgICAgICBuZmluaXNoZWQgKz0gMQorICAgICAgICBpZiBuZmluaXNoZWQgPT0gbjoKKyAgICAgICAgICAgIG91dGVyLnNldF9yZXN1bHQocmVzdWx0cykKKworICAgIGZvciBpLCBmdXQgaW4gZW51bWVyYXRlKGNoaWxkcmVuKToKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGZ1bmN0b29scy5wYXJ0aWFsKF9kb25lX2NhbGxiYWNrLCBpKSkKKyAgICByZXR1cm4gb3V0ZXIKKworCitkZWYgc2hpZWxkKGFyZywgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXYWl0IGZvciBhIGZ1dHVyZSwgc2hpZWxkaW5nIGl0IGZyb20gY2FuY2VsbGF0aW9uLgorCisgICAgVGhlIHN0YXRlbWVudAorCisgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc2hpZWxkKHNvbWV0aGluZygpKQorCisgICAgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNvbWV0aGluZygpCisKKyAgICAqZXhjZXB0KiB0aGF0IGlmIHRoZSBjb3JvdXRpbmUgY29udGFpbmluZyBpdCBpcyBjYW5jZWxsZWQsIHRoZQorICAgIHRhc2sgcnVubmluZyBpbiBzb21ldGhpbmcoKSBpcyBub3QgY2FuY2VsbGVkLiAgRnJvbSB0aGUgUE9WIG9mCisgICAgc29tZXRoaW5nKCksIHRoZSBjYW5jZWxsYXRpb24gZGlkIG5vdCBoYXBwZW4uICBCdXQgaXRzIGNhbGxlciBpcworICAgIHN0aWxsIGNhbmNlbGxlZCwgc28gdGhlIHlpZWxkLWZyb20gZXhwcmVzc2lvbiBzdGlsbCByYWlzZXMKKyAgICBDYW5jZWxsZWRFcnJvci4gIE5vdGU6IElmIHNvbWV0aGluZygpIGlzIGNhbmNlbGxlZCBieSBvdGhlciBtZWFucworICAgIHRoaXMgd2lsbCBzdGlsbCBjYW5jZWwgc2hpZWxkKCkuCisKKyAgICBJZiB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IGlnbm9yZSBjYW5jZWxsYXRpb24gKG5vdCByZWNvbW1lbmRlZCkKKyAgICB5b3UgY2FuIGNvbWJpbmUgc2hpZWxkKCkgd2l0aCBhIHRyeS9leGNlcHQgY2xhdXNlLCBhcyBmb2xsb3dzOgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc2hpZWxkKHNvbWV0aGluZygpKQorICAgICAgICBleGNlcHQgQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICByZXMgPSBOb25lCisgICAgIiIiCisgICAgaW5uZXIgPSBhc3luYyhhcmcsIGxvb3A9bG9vcCkKKyAgICBpZiBpbm5lci5kb25lKCk6CisgICAgICAgICMgU2hvcnRjdXQuCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIGxvb3AgPSBpbm5lci5fbG9vcAorICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIF9kb25lX2NhbGxiYWNrKGlubmVyKToKKyAgICAgICAgaWYgb3V0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAjIE1hcmsgaW5uZXIncyByZXN1bHQgYXMgcmV0cmlldmVkLgorICAgICAgICAgICAgaW5uZXIuY2FuY2VsbGVkKCkgb3IgaW5uZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBpbm5lci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIG91dGVyLmNhbmNlbCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGMgPSBpbm5lci5leGNlcHRpb24oKQorICAgICAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KGlubmVyLnJlc3VsdCgpKQorCisgICAgaW5uZXIuYWRkX2RvbmVfY2FsbGJhY2soX2RvbmVfY2FsbGJhY2spCisgICAgcmV0dXJuIG91dGVyCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby90ZXN0X3V0aWxzLnB5IGIvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjc4ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weQpAQCAtMCwwICsxLDI2MiBAQAorIiIiVXRpbGl0aWVzIHNoYXJlZCBieSB0ZXN0cy4iIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGlvCitpbXBvcnQgdW5pdHRlc3QubW9jaworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIgaW1wb3J0IG1ha2Vfc2VydmVyLCBXU0dJUmVxdWVzdEhhbmRsZXIsIFdTR0lTZXJ2ZXIKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgZnJvbSAud2luZG93c191dGlscyBpbXBvcnQgc29ja2V0cGFpcgorZWxzZToKKyAgICBmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0cGFpciAgIyBwcmFnbWE6IG5vIGNvdmVyCisKKworZGVmIGR1bW15X3NzbF9jb250ZXh0KCk6CisgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisKKworZGVmIHJ1bl9icmllZmx5KGxvb3ApOgorICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgb25jZSgpOgorICAgICAgICBwYXNzCisgICAgZ2VuID0gb25jZSgpCisgICAgdCA9IHRhc2tzLlRhc2soZ2VuLCBsb29wPWxvb3ApCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgIGZpbmFsbHk6CisgICAgICAgIGdlbi5jbG9zZSgpCisKKworZGVmIHJ1bl91bnRpbChsb29wLCBwcmVkLCB0aW1lb3V0PU5vbmUpOgorICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisgICAgd2hpbGUgbm90IHByZWQoKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5zbGVlcCh0aW1lb3V0LCBsb29wPWxvb3ApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcnVuX2JyaWVmbHkobG9vcCkKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBydW5fb25jZShsb29wKToKKyAgICAiIiJsb29wLnN0b3AoKSBzY2hlZHVsZXMgX3JhaXNlX3N0b3BfZXJyb3IoKQorICAgIGFuZCBydW5fZm9yZXZlcigpIHJ1bnMgdW50aWwgX3JhaXNlX3N0b3BfZXJyb3IoKSBjYWxsYmFjay4KKyAgICB0aGlzIHdvbnQgd29yayBpZiB0ZXN0IHdhaXRzIGZvciBzb21lIElPIGV2ZW50cywgYmVjYXVzZQorICAgIF9yYWlzZV9zdG9wX2Vycm9yKCkgcnVucyBiZWZvcmUgYW55IG9mIGlvIGV2ZW50cyBjYWxsYmFja3MuCisgICAgIiIiCisgICAgbG9vcC5zdG9wKCkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHJ1bl90ZXN0X3NlcnZlcigqLCBob3N0PScxMjcuMC4wLjEnLCBwb3J0PTAsIHVzZV9zc2w9RmFsc2UpOgorCisgICAgY2xhc3MgU2lsZW50V1NHSVJlcXVlc3RIYW5kbGVyKFdTR0lSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIGRlZiBnZXRfc3RkZXJyKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGlvLlN0cmluZ0lPKCkKKworICAgICAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBTaWxlbnRXU0dJU2VydmVyKFdTR0lTZXJ2ZXIpOgorICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGNsYXNzIFNTTFdTR0lTZXJ2ZXIoU2lsZW50V1NHSVNlcnZlcik6CisgICAgICAgIGRlZiBmaW5pc2hfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICAgICAjIFRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiBvdXIgdGVzdCBkaXJlY3RvcnkgKHdoaWNoCisgICAgICAgICAgICAjIGNvbnRhaW5zIHRoZSBzYW1wbGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlcykgZGlmZmVycworICAgICAgICAgICAgIyBiZXR3ZWVuIHRoZSBzdGRsaWIgYW5kIHN0YW5kLWFsb25lIFR1bGlwL2FzeW5jaW8uCisgICAgICAgICAgICAjIFByZWZlciBvdXIgb3duIGlmIHdlIGNhbiBmaW5kIGl0LgorICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAndGVzdHMnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaGVyZSk6CisgICAgICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QnLCAndGVzdF9hc3luY2lvJykKKyAgICAgICAgICAgIGtleWZpbGUgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ3NhbXBsZS5rZXknKQorICAgICAgICAgICAgY2VydGZpbGUgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ3NhbXBsZS5jcnQnKQorICAgICAgICAgICAgc3NvY2sgPSBzc2wud3JhcF9zb2NrZXQocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3Moc3NvY2ssIGNsaWVudF9hZGRyZXNzLCBzZWxmKQorICAgICAgICAgICAgICAgIHNzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgbWF5YmUgc29ja2V0IGhhcyBiZWVuIGNsb3NlZCBieSBwZWVyCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGFwcChlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CisgICAgICAgIHN0YXR1cyA9ICcyMDAgT0snCisgICAgICAgIGhlYWRlcnMgPSBbKCdDb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbicpXQorICAgICAgICBzdGFydF9yZXNwb25zZShzdGF0dXMsIGhlYWRlcnMpCisgICAgICAgIHJldHVybiBbYidUZXN0IG1lc3NhZ2UnXQorCisgICAgIyBSdW4gdGhlIHRlc3QgV1NHSSBzZXJ2ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgaW4gb3JkZXIgbm90IHRvCisgICAgIyBpbnRlcmZlcmUgd2l0aCBldmVudCBoYW5kbGluZyBpbiB0aGUgbWFpbiB0aHJlYWQKKyAgICBzZXJ2ZXJfY2xhc3MgPSBTU0xXU0dJU2VydmVyIGlmIHVzZV9zc2wgZWxzZSBTaWxlbnRXU0dJU2VydmVyCisgICAgaHR0cGQgPSBtYWtlX3NlcnZlcihob3N0LCBwb3J0LCBhcHAsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY2xhc3MsIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcikKKyAgICBodHRwZC5hZGRyZXNzID0gaHR0cGQuc2VydmVyX2FkZHJlc3MKKyAgICBzZXJ2ZXJfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aHR0cGQuc2VydmVfZm9yZXZlcikKKyAgICBzZXJ2ZXJfdGhyZWFkLnN0YXJ0KCkKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGh0dHBkCisgICAgZmluYWxseToKKyAgICAgICAgaHR0cGQuc2h1dGRvd24oKQorICAgICAgICBodHRwZC5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICBzZXJ2ZXJfdGhyZWFkLmpvaW4oKQorCisKK2RlZiBtYWtlX3Rlc3RfcHJvdG9jb2woYmFzZSk6CisgICAgZGN0ID0ge30KKyAgICBmb3IgbmFtZSBpbiBkaXIoYmFzZSk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX18nKSBhbmQgbmFtZS5lbmRzd2l0aCgnX18nKToKKyAgICAgICAgICAgICMgc2tpcCBtYWdpYyBuYW1lcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZGN0W25hbWVdID0gdW5pdHRlc3QubW9jay5Nb2NrKHJldHVybl92YWx1ZT1Ob25lKQorICAgIHJldHVybiB0eXBlKCdUZXN0UHJvdG9jb2wnLCAoYmFzZSwpICsgYmFzZS5fX2Jhc2VzX18sIGRjdCkoKQorCisKK2NsYXNzIFRlc3RTZWxlY3RvcihzZWxlY3RvcnMuQmFzZVNlbGVjdG9yKToKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dCk6CisgICAgICAgIHJldHVybiBbXQorCisKK2NsYXNzIFRlc3RMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorICAgICIiIkxvb3AgZm9yIHVuaXR0ZXN0cy4KKworICAgIEl0IG1hbmFnZXMgc2VsZiB0aW1lIGRpcmVjdGx5LgorICAgIElmIHNvbWV0aGluZyBzY2hlZHVsZWQgdG8gYmUgZXhlY3V0ZWQgbGF0ZXIgdGhlbgorICAgIG9uIG5leHQgbG9vcCBpdGVyYXRpb24gYWZ0ZXIgYWxsIHJlYWR5IGhhbmRsZXJzIGRvbmUKKyAgICBnZW5lcmF0b3IgcGFzc2VkIHRvIF9faW5pdF9fIGlzIGNhbGxpbmcuCisKKyAgICBHZW5lcmF0b3Igc2hvdWxkIGJlIGxpa2UgdGhpczoKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAuLi4KKyAgICAgICAgICAgIC4uLiA9IHlpZWxkIHRpbWVfYWR2YW5jZQorCisgICAgVmFsdWUgcmV0dW5lZCBieSB5aWVsZCBpcyBhYnNvbHV0ZSB0aW1lIG9mIG5leHQgc2NoZWR1bGVkIGhhbmRsZXIuCisgICAgVmFsdWUgcGFzc2VkIHRvIHlpZWxkIGlzIHRpbWUgYWR2YW5jZSB0byBtb3ZlIGxvb3AncyB0aW1lIGZvcndhcmQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKworICAgICAgICBpZiBnZW4gaXMgTm9uZToKKyAgICAgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgc2VsZi5fY2hlY2tfb25fY2xvc2UgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfb25fY2xvc2UgPSBUcnVlCisKKyAgICAgICAgc2VsZi5fZ2VuID0gZ2VuKCkKKyAgICAgICAgbmV4dChzZWxmLl9nZW4pCisgICAgICAgIHNlbGYuX3RpbWUgPSAwCisgICAgICAgIHNlbGYuX3RpbWVycyA9IFtdCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gVGVzdFNlbGVjdG9yKCkKKworICAgICAgICBzZWxmLnJlYWRlcnMgPSB7fQorICAgICAgICBzZWxmLndyaXRlcnMgPSB7fQorICAgICAgICBzZWxmLnJlc2V0X2NvdW50ZXJzKCkKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGltZQorCisgICAgZGVmIGFkdmFuY2VfdGltZShzZWxmLCBhZHZhbmNlKToKKyAgICAgICAgIiIiTW92ZSB0ZXN0IHRpbWUgZm9yd2FyZC4iIiIKKyAgICAgICAgaWYgYWR2YW5jZToKKyAgICAgICAgICAgIHNlbGYuX3RpbWUgKz0gYWR2YW5jZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jaGVja19vbl9jbG9zZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9nZW4uc2VuZCgwKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZTogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJUaW1lIGdlbmVyYXRvciBpcyBub3QgZmluaXNoZWQiKQorCisgICAgZGVmIGFkZF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYucmVhZGVyc1tmZF0gPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLnJlYWRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi5yZWFkZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLnJlYWRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLnJlYWRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi53cml0ZXJzW2ZkXSA9IGV2ZW50cy5tYWtlX2hhbmRsZShjYWxsYmFjaywgYXJncykKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyX2NvdW50W2ZkXSArPSAxCisgICAgICAgIGlmIGZkIGluIHNlbGYud3JpdGVyczoKKyAgICAgICAgICAgIGRlbCBzZWxmLndyaXRlcnNbZmRdCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYXNzZXJ0X3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgYXNzZXJ0IGZkIGluIHNlbGYud3JpdGVycywgJ2ZkIHt9IGlzIG5vdCByZWdpc3RlcmVkJy5mb3JtYXQoZmQpCisgICAgICAgIGhhbmRsZSA9IHNlbGYud3JpdGVyc1tmZF0KKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fY2FsbGJhY2sgPT0gY2FsbGJhY2ssICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBhc3NlcnQgaGFuZGxlLl9hcmdzID09IGFyZ3MsICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fYXJncywgYXJncykKKworICAgIGRlZiByZXNldF9jb3VudGVycyhzZWxmKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyX2NvdW50ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXJfY291bnQgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChpbnQpCisKKyAgICBkZWYgX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9ydW5fb25jZSgpCisgICAgICAgIGZvciB3aGVuIGluIHNlbGYuX3RpbWVyczoKKyAgICAgICAgICAgIGFkdmFuY2UgPSBzZWxmLl9nZW4uc2VuZCh3aGVuKQorICAgICAgICAgICAgc2VsZi5hZHZhbmNlX3RpbWUoYWR2YW5jZSkKKyAgICAgICAgc2VsZi5fdGltZXJzID0gW10KKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYuX3RpbWVycy5hcHBlbmQod2hlbikKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuY2FsbF9hdCh3aGVuLCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdHJhbnNwb3J0cy5weSBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmOTIyNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKQEAgLTAsMCArMSwyMTEgQEAKKyIiIkFic3RyYWN0IFRyYW5zcG9ydCBjbGFzcy4iIiIKKworX19hbGxfXyA9IFsnUmVhZFRyYW5zcG9ydCcsICdXcml0ZVRyYW5zcG9ydCcsICdUcmFuc3BvcnQnXQorCisKK2NsYXNzIEJhc2VUcmFuc3BvcnQ6CisgICAgIiIiQmFzZSBBQkMgZm9yIHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0cmE9Tm9uZSk6CisgICAgICAgIGlmIGV4dHJhIGlzIE5vbmU6CisgICAgICAgICAgICBleHRyYSA9IHt9CisgICAgICAgIHNlbGYuX2V4dHJhID0gZXh0cmEKKworICAgIGRlZiBnZXRfZXh0cmFfaW5mbyhzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJHZXQgb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZXh0cmEuZ2V0KG5hbWUsIGRlZmF1bHQpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGZsdXNoZWQgYXN5bmNocm9ub3VzbHkuICBObyBtb3JlIGRhdGEKKyAgICAgICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgICAgICBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBjYWxsZWQKKyAgICAgICAgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBSZWFkVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkFCQyBmb3IgcmVhZC1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgTm8gZGF0YSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncyBkYXRhX3JlY2VpdmVkKCkKKyAgICAgICAgbWV0aG9kIHVudGlsIHJlc3VtZV9yZWFkaW5nKCkgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXN1bWUgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgRGF0YSByZWNlaXZlZCB3aWxsIG9uY2UgYWdhaW4gYmUgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCdzCisgICAgICAgIGRhdGFfcmVjZWl2ZWQoKSBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgV3JpdGVUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiQUJDIGZvciB3cml0ZS1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgICIiIlNldCB0aGUgaGlnaC0gYW5kIGxvdy13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4KKworICAgICAgICBUaGVzZSB0d28gdmFsdWVzIGNvbnRyb2wgd2hlbiB0byBjYWxsIHRoZSBwcm90b2NvbCdzCisgICAgICAgIHBhdXNlX3dyaXRpbmcoKSBhbmQgcmVzdW1lX3dyaXRpbmcoKSBtZXRob2RzLiAgSWYgc3BlY2lmaWVkLAorICAgICAgICB0aGUgbG93LXdhdGVyIGxpbWl0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciB2YWx1ZSBjYW4gYmUgbmVnYXRpdmUuCisKKyAgICAgICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQgaXMgZ2l2ZW4sIHRoZSBsb3ctd2F0ZXIgbGltaXQgZGVmYXVsdHMgdG8gYQorICAgICAgICBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQuICBTZXR0aW5nIGhpZ2ggdG8gemVybyBmb3JjZXMgbG93IHRvIHplcm8gYXMKKyAgICAgICAgd2VsbCwgYW5kIGNhdXNlcyBwYXVzZV93cml0aW5nKCkgdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZQorICAgICAgICBidWZmZXIgYmVjb21lcyBub24tZW1wdHkuICBTZXR0aW5nIGxvdyB0byB6ZXJvIGNhdXNlcworICAgICAgICByZXN1bWVfd3JpdGluZygpIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgICAgVXNlIG9mIHplcm8gZm9yIGVpdGhlciBsaW1pdCBpcyBnZW5lcmFsbHkgc3ViLW9wdGltYWwgYXMgaXQKKyAgICAgICAgcmVkdWNlcyBvcHBvcnR1bml0aWVzIGZvciBkb2luZyBJL08gYW5kIGNvbXB1dGF0aW9uCisgICAgICAgIGNvbmN1cnJlbnRseS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiV3JpdGUgc29tZSBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhpcyBkb2VzIG5vdCBibG9jazsgaXQgYnVmZmVycyB0aGUgZGF0YSBhbmQgYXJyYW5nZXMgZm9yIGl0CisgICAgICAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHdyaXRlbGluZXMoc2VsZiwgbGlzdF9vZl9kYXRhKToKKyAgICAgICAgIiIiV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IGNhbGxzIHdyaXRlKCkgZm9yIGVhY2ggaXRlbSBpbgorICAgICAgICB0aGUgbGlzdC9pdGVyYWJsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBkYXRhIGluIGxpc3Rfb2ZfZGF0YToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoZGF0YSkKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB3cml0ZSBlbmQgYWZ0ZXIgZmx1c2hpbmcgYnVmZmVyZWQgZGF0YS4KKworICAgICAgICAoVGhpcyBpcyBsaWtlIHR5cGluZyBeRCBpbnRvIGEgVU5JWCBwcm9ncmFtIHJlYWRpbmcgZnJvbSBzdGRpbi4pCisKKyAgICAgICAgRGF0YSBtYXkgc3RpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhpcyB0cmFuc3BvcnQgc3VwcG9ydHMgd3JpdGVfZW9mKCksIEZhbHNlIGlmIG5vdC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBsb3N0LiAgTm8gbW9yZSBkYXRhIHdpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBiZQorICAgICAgICBjYWxsZWQgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBUcmFuc3BvcnQoUmVhZFRyYW5zcG9ydCwgV3JpdGVUcmFuc3BvcnQpOgorICAgICIiIkFCQyByZXByZXNlbnRpbmcgYSBiaWRpcmVjdGlvbmFsIHRyYW5zcG9ydC4KKworICAgIFRoZXJlIG1heSBiZSBzZXZlcmFsIGltcGxlbWVudGF0aW9ucywgYnV0IHR5cGljYWxseSwgdGhlIHVzZXIgZG9lcworICAgIG5vdCBpbXBsZW1lbnQgbmV3IHRyYW5zcG9ydHM7IHJhdGhlciwgdGhlIHBsYXRmb3JtIHByb3ZpZGVzIHNvbWUKKyAgICB1c2VmdWwgdHJhbnNwb3J0cyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgcGxhdGZvcm0ncyBiZXN0CisgICAgcHJhY3RpY2VzLgorCisgICAgVGhlIHVzZXIgbmV2ZXIgaW5zdGFudGlhdGVzIGEgdHJhbnNwb3J0IGRpcmVjdGx5OyB0aGV5IGNhbGwgYQorICAgIHV0aWxpdHkgZnVuY3Rpb24sIHBhc3NpbmcgaXQgYSBwcm90b2NvbCBmYWN0b3J5IGFuZCBvdGhlcgorICAgIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBjcmVhdGUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wuICAoRS5nLgorICAgIEV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbigpIG9yIEV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKCkuKQorCisgICAgVGhlIHV0aWxpdHkgZnVuY3Rpb24gd2lsbCBhc3luY2hyb25vdXNseSBjcmVhdGUgYSB0cmFuc3BvcnQgYW5kIGEKKyAgICBwcm90b2NvbCBhbmQgaG9vayB0aGVtIHVwIGJ5IGNhbGxpbmcgdGhlIHByb3RvY29sJ3MKKyAgICBjb25uZWN0aW9uX21hZGUoKSBtZXRob2QsIHBhc3NpbmcgaXQgdGhlIHRyYW5zcG9ydC4KKworICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIHJhaXNlcyBOb3RJbXBsZW1lbnRlZCBmb3IgZXZlcnkgbWV0aG9kCisgICAgZXhjZXB0IHdyaXRlbGluZXMoKSwgd2hpY2ggY2FsbHMgd3JpdGUoKSBpbiBhIGxvb3AuCisgICAgIiIiCisKKworY2xhc3MgRGF0YWdyYW1UcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiQUJDIGZvciBkYXRhZ3JhbSAoVURQKSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyPU5vbmUpOgorICAgICAgICAiIiJTZW5kIGRhdGEgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBUaGlzIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgICAgICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIGFkZHIgaXMgdGFyZ2V0IHNvY2tldCBhZGRyZXNzLgorICAgICAgICBJZiBhZGRyIGlzIE5vbmUgdXNlIHRhcmdldCBhZGRyZXNzIHBvaW50ZWQgb24gdHJhbnNwb3J0IGNyZWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBsb3N0LiAgTm8gbW9yZSBkYXRhIHdpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBiZQorICAgICAgICBjYWxsZWQgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBTdWJwcm9jZXNzVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorCisgICAgZGVmIGdldF9waWQoc2VsZik6CisgICAgICAgICIiIkdldCBzdWJwcm9jZXNzIGlkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3JldHVybmNvZGUoc2VsZik6CisgICAgICAgICIiIkdldCBzdWJwcm9jZXNzIHJldHVybmNvZGUuCisKKyAgICAgICAgU2VlIGFsc28KKyAgICAgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfcGlwZV90cmFuc3BvcnQoc2VsZiwgZmQpOgorICAgICAgICAiIiJHZXQgdHJhbnNwb3J0IGZvciBwaXBlIHdpdGggbnVtYmVyIGZkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgIiIiU2VuZCBzaWduYWwgdG8gc3VicHJvY2Vzcy4KKworICAgICAgICBTZWUgYWxzbzoKKyAgICAgICAgZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4uc2VuZF9zaWduYWwKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgQWxpYXMgZm9yIGNsb3NlKCkgbWV0aG9kLgorCisgICAgICAgIE9uIFBvc2l4IE9TcyB0aGUgbWV0aG9kIHNlbmRzIFNJR1RFUk0gdG8gdGhlIHN1YnByb2Nlc3MuCisgICAgICAgIE9uIFdpbmRvd3MgdGhlIFdpbjMyIEFQSSBmdW5jdGlvbiBUZXJtaW5hdGVQcm9jZXNzKCkKKyAgICAgICAgIGlzIGNhbGxlZCB0byBzdG9wIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4udGVybWluYXRlCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgIiIiS2lsbCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBPbiBQb3NpeCBPU3MgdGhlIGZ1bmN0aW9uIHNlbmRzIFNJR0tJTEwgdG8gdGhlIHN1YnByb2Nlc3MuCisgICAgICAgIE9uIFdpbmRvd3Mga2lsbCgpIGlzIGFuIGFsaWFzIGZvciB0ZXJtaW5hdGUoKS4KKworICAgICAgICBTZWUgYWxzbzoKKyAgICAgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLmtpbGwKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxMWVmZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNzQ0IEBACisiIiJTZWxlY3RvciBldmVudGxvb3AgZm9yIFVuaXggd2l0aCBzaWduYWwgaGFuZGxpbmcuIiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGZjbnRsCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCisKK2Zyb20gLiBpbXBvcnQgYmFzZV9zdWJwcm9jZXNzCitmcm9tIC4gaW1wb3J0IGNvbnN0YW50cworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCB0YXNrcworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK19fYWxsX18gPSBbJ1NlbGVjdG9yRXZlbnRMb29wJywgJ1NURElOJywgJ1NURE9VVCcsICdTVERFUlInLAorICAgICAgICAgICAnQWJzdHJhY3RDaGlsZFdhdGNoZXInLCAnU2FmZUNoaWxkV2F0Y2hlcicsCisgICAgICAgICAgICdGYXN0Q2hpbGRXYXRjaGVyJywgJ0RlZmF1bHRFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICBdCisKK1NURElOID0gMAorU1RET1VUID0gMQorU1RERVJSID0gMgorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ1NpZ25hbHMgYXJlIG5vdCByZWFsbHkgc3VwcG9ydGVkIG9uIFdpbmRvd3MnKQorCisKK2NsYXNzIF9Vbml4U2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgIiIiVW5peCBldmVudCBsb29wCisKKyAgICBBZGRzIHNpZ25hbCBoYW5kbGluZyB0byBTZWxlY3RvckV2ZW50TG9vcAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbGVjdG9yPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNlbGVjdG9yKQorICAgICAgICBzZWxmLl9zaWduYWxfaGFuZGxlcnMgPSB7fQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc29ja2V0LnNvY2tldHBhaXIoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBmb3Igc2lnIGluIGxpc3Qoc2VsZi5fc2lnbmFsX2hhbmRsZXJzKToKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZykKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZywgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuICBVTklYIG9ubHkuCisKKyAgICAgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgc2lnbmFsIG51bWJlciBpcyBpbnZhbGlkIG9yIHVuY2F0Y2hhYmxlLgorICAgICAgICBSYWlzZSBSdW50aW1lRXJyb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHNldHRpbmcgdXAgdGhlIGhhbmRsZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja19zaWduYWwoc2lnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNldF93YWtldXBfZmQoKSByYWlzZXMgVmFsdWVFcnJvciBpZiB0aGlzIGlzIG5vdCB0aGUKKyAgICAgICAgICAgICMgbWFpbiB0aHJlYWQuICBCeSBjYWxsaW5nIGl0IGVhcmx5IHdlIGVuc3VyZSB0aGF0IGFuCisgICAgICAgICAgICAjIGV2ZW50IGxvb3AgcnVubmluZyBpbiBhbm90aGVyIHRocmVhZCBjYW5ub3QgYWRkIGEgc2lnbmFsCisgICAgICAgICAgICAjIGhhbmRsZXIuCisgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZChzZWxmLl9jc29jay5maWxlbm8oKSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHN0cihleGMpKQorCisgICAgICAgIGhhbmRsZSA9IGV2ZW50cy5tYWtlX2hhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10gPSBoYW5kbGUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZywgc2VsZi5faGFuZGxlX3NpZ25hbCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoLTEpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbmV4YzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3NldF93YWtldXBfZmQoLTEpIGZhaWxlZDogJXMnLCBuZXhjKQorCisgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2lnIHt9IGNhbm5vdCBiZSBjYXVnaHQnLmZvcm1hdChzaWcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9oYW5kbGVfc2lnbmFsKHNlbGYsIHNpZywgYXJnKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRoYXQgaXMgdGhlIGFjdHVhbCBzaWduYWwgaGFuZGxlci4iIiIKKyAgICAgICAgaGFuZGxlID0gc2VsZi5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWcpCisgICAgICAgIGlmIGhhbmRsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICAjIEFzc3VtZSBpdCdzIHNvbWUgcmFjZSBjb25kaXRpb24uCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKSAgIyBSZW1vdmUgaXQgcHJvcGVybHkuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9hZGRfY2FsbGJhY2tfc2lnbmFsc2FmZShoYW5kbGUpCisKKyAgICBkZWYgcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZyk6CisgICAgICAgICIiIlJlbW92ZSBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLiAgVU5JWCBvbmx5LgorCisgICAgICAgIFJldHVybiBUcnVlIGlmIGEgc2lnbmFsIGhhbmRsZXIgd2FzIHJlbW92ZWQsIEZhbHNlIGlmIG5vdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX3NpZ25hbChzaWcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9zaWduYWxfaGFuZGxlcnNbc2lnXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzaWcgPT0gc2lnbmFsLlNJR0lOVDoKKyAgICAgICAgICAgIGhhbmRsZXIgPSBzaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5TSUdfREZMCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWcsIGhhbmRsZXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaWcge30gY2Fubm90IGJlIGNhdWdodCcuZm9ybWF0KHNpZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgbm90IHNlbGYuX3NpZ25hbF9oYW5kbGVyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnc2V0X3dha2V1cF9mZCgtMSkgZmFpbGVkOiAlcycsIGV4YykKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9jaGVja19zaWduYWwoc2VsZiwgc2lnKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRvIHZhbGlkYXRlIGEgc2lnbmFsLgorCisgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHNpZ25hbCBudW1iZXIgaXMgaW52YWxpZCBvciB1bmNhdGNoYWJsZS4KKyAgICAgICAgUmFpc2UgUnVudGltZUVycm9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXR0aW5nIHVwIHRoZSBoYW5kbGVyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2lnLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzaWcgbXVzdCBiZSBhbiBpbnQsIG5vdCB7IXJ9Jy5mb3JtYXQoc2lnKSkKKworICAgICAgICBpZiBub3QgKDEgPD0gc2lnIDwgc2lnbmFsLk5TSUcpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnc2lnIHt9IG91dCBvZiByYW5nZSgxLCB7fSknLmZvcm1hdChzaWcsIHNpZ25hbC5OU0lHKSkKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIGV2ZW50cy5nZXRfY2hpbGRfd2F0Y2hlcigpIGFzIHdhdGNoZXI6CisgICAgICAgICAgICB0cmFuc3AgPSBfVW5peFN1YnByb2Nlc3NUcmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncykKKyAgICAgICAgICAgIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIodHJhbnNwLmdldF9waWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hpbGRfd2F0Y2hlcl9jYWxsYmFjaywgdHJhbnNwKQorICAgICAgICB5aWVsZCBmcm9tIHRyYW5zcC5fcG9zdF9pbml0KCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcAorCisgICAgZGVmIF9jaGlsZF93YXRjaGVyX2NhbGxiYWNrKHNlbGYsIHBpZCwgcmV0dXJuY29kZSwgdHJhbnNwKToKKyAgICAgICAgc2VsZi5jYWxsX3Nvb25fdGhyZWFkc2FmZSh0cmFuc3AuX3Byb2Nlc3NfZXhpdGVkLCByZXR1cm5jb2RlKQorCisgICAgZGVmIF9zdWJwcm9jZXNzX2Nsb3NlZChzZWxmLCB0cmFuc3ApOgorICAgICAgICBwYXNzCisKKworZGVmIF9zZXRfbm9uYmxvY2tpbmcoZmQpOgorICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgZmxhZ3MgPSBmbGFncyB8IG9zLk9fTk9OQkxPQ0sKKyAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmxhZ3MpCisKKworY2xhc3MgX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCh0cmFuc3BvcnRzLlJlYWRUcmFuc3BvcnQpOgorCisgICAgbWF4X3NpemUgPSAyNTYgKiAxMDI0ICAjIG1heCBieXRlcyB3ZSByZWFkIGluIG9uZSBldmVudGxvb3AgaXRlcmF0aW9uCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHBpcGUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fcGlwZSA9IHBpcGUKKyAgICAgICAgc2VsZi5fZmlsZW5vID0gcGlwZS5maWxlbm8oKQorICAgICAgICBtb2RlID0gb3MuZnN0YXQoc2VsZi5fZmlsZW5vKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTRklGTyhtb2RlKSBvciBzdGF0LlNfSVNTT0NLKG1vZGUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBpcGUgdHJhbnNwb3J0IGlzIGZvciBwaXBlcy9zb2NrZXRzIG9ubHkuIikKKyAgICAgICAgX3NldF9ub25ibG9ja2luZyhzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9maWxlbm8sIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24od2FpdGVyLnNldF9yZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYuX2ZpbGVubywgc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4Yyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhdGFsIGVycm9yIGZvciAlcycsIHNlbGYpCisgICAgICAgIHNlbGYuX2Nsb3NlKGV4YykKKworICAgIGRlZiBfY2xvc2Uoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworCitjbGFzcyBfVW5peFdyaXRlUGlwZVRyYW5zcG9ydCh0cmFuc3BvcnRzLldyaXRlVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gcGlwZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9waXBlID0gcGlwZQorICAgICAgICBzZWxmLl9maWxlbm8gPSBwaXBlLmZpbGVubygpCisgICAgICAgIG1vZGUgPSBvcy5mc3RhdChzZWxmLl9maWxlbm8pLnN0X21vZGUKKyAgICAgICAgaXNfc29ja2V0ID0gc3RhdC5TX0lTU09DSyhtb2RlKQorICAgICAgICBpc19waXBlID0gc3RhdC5TX0lTRklGTyhtb2RlKQorICAgICAgICBpZiBub3QgKGlzX3NvY2tldCBvciBpc19waXBlKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBpcGUgdHJhbnNwb3J0IGlzIGZvciBwaXBlcy9zb2NrZXRzIG9ubHkuIikKKyAgICAgICAgX3NldF9ub25ibG9ja2luZyhzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBvciB3cml0ZV9lb2YoKSBjYWxsZWQuCisKKyAgICAgICAgIyBPbiBBSVgsIHRoZSByZWFkZXIgdHJpY2sgb25seSB3b3JrcyBmb3Igc29ja2V0cy4KKyAgICAgICAgIyBPbiBvdGhlciBwbGF0Zm9ybXMgaXQgd29ya3MgZm9yIHBpcGVzIGFuZCBzb2NrZXRzLgorICAgICAgICAjIChFeGNlcHRpb246IE9TIFggMTAuND8gIElzc3VlICMxOTI5NC4pCisgICAgICAgIGlmIGlzX3NvY2tldCBvciBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICAjIFBpcGUgd2FzIGNsb3NlZCBieSBwZWVyLgorICAgICAgICBzZWxmLl9jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKSwgcmVwcihkYXRhKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCBvciBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcy53cml0ZShwaXBlLCBkYXRhKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzZW5kIGl0IHJpZ2h0IGF3YXkgZmlyc3QuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IG9zLndyaXRlKHNlbGYuX2ZpbGVubywgZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBhc3NlcnQgZGF0YSwgJ0RhdGEgc2hvdWxkIG5vdCBiZSBlbXB0eScKKworICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gb3Mud3JpdGUoc2VsZi5fZmlsZW5vLCBkYXRhKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICMgUmVtb3ZlIHdyaXRlciBoZXJlLCBfZmF0YWxfZXJyb3IoKSBkb2Vzbid0IGl0CisgICAgICAgICAgICAjIGJlY2F1c2UgX2J1ZmZlciBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpICAjIFRyeSBhZ2FpbiBsYXRlci4KKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBUT0RPOiBNYWtlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gd3JpdGVfZW9mKCksIGNsb3NlKCksCisgICAgIyBhYm9ydCgpLCBfZmF0YWxfZXJyb3IoKSBhbmQgX2Nsb3NlKCkgbW9yZSBzdHJhaWdodGZvcndhcmQuCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBzZWxmLl9waXBlCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgIyB3cml0ZV9lb2YgaXMgYWxsIHdoYXQgd2UgbmVlZGVkIHRvIGNsb3NlIHRoZSB3cml0ZSBwaXBlCisgICAgICAgICAgICBzZWxmLndyaXRlX2VvZigpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4Yyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhdGFsIGVycm9yIGZvciAlcycsIHNlbGYpCisgICAgICAgIHNlbGYuX2Nsb3NlKGV4YykKKworICAgIGRlZiBfY2xvc2Uoc2VsZiwgZXhjPU5vbmUpOgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIF9Vbml4U3VicHJvY2Vzc1RyYW5zcG9ydChiYXNlX3N1YnByb2Nlc3MuQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHN0ZGluX3cgPSBOb25lCisgICAgICAgIGlmIHN0ZGluID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgICMgVXNlIGEgc29ja2V0IHBhaXIgZm9yIHN0ZGluLCBzaW5jZSBub3QgYWxsIHBsYXRmb3JtcworICAgICAgICAgICAgIyBzdXBwb3J0IHNlbGVjdGluZyByZWFkIGV2ZW50cyBvbiB0aGUgd3JpdGUgZW5kIG9mIGEKKyAgICAgICAgICAgICMgc29ja2V0ICh3aGljaCB3ZSB1c2UgaW4gb3JkZXIgdG8gZGV0ZWN0IGNsb3Npbmcgb2YgdGhlCisgICAgICAgICAgICAjIG90aGVyIGVuZCkuICBOb3RhYmx5IHRoaXMgaXMgbmVlZGVkIG9uIEFJWCwgYW5kIHdvcmtzCisgICAgICAgICAgICAjIGp1c3QgZmluZSBvbiBvdGhlciBwbGF0Zm9ybXMuCisgICAgICAgICAgICBzdGRpbiwgc3RkaW5fdyA9IHNlbGYuX2xvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIGFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgaWYgc3RkaW5fdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBvcGVuKHN0ZGluX3cuZGV0YWNoKCksICdyYicsIGJ1ZmZlcmluZz1idWZzaXplKQorCisKK2NsYXNzIEFic3RyYWN0Q2hpbGRXYXRjaGVyOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1vbml0b3JpbmcgY2hpbGQgcHJvY2Vzc2VzLgorCisgICAgT2JqZWN0cyBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcyBtb25pdG9yIGEgY29sbGVjdGlvbiBvZiBzdWJwcm9jZXNzZXMgYW5kCisgICAgcmVwb3J0IHRoZWlyIHRlcm1pbmF0aW9uIG9yIGludGVycnVwdGlvbiBieSBhIHNpZ25hbC4KKworICAgIE5ldyBjYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCAuYWRkX2NoaWxkX2hhbmRsZXIoKS4gU3RhcnRpbmcgYSBuZXcKKyAgICBwcm9jZXNzIG11c3QgYmUgZG9uZSB3aXRoaW4gYSAnd2l0aCcgYmxvY2sgdG8gYWxsb3cgdGhlIHdhdGNoZXIgdG8gc3VzcGVuZAorICAgIGl0cyBhY3Rpdml0eSB1bnRpbCB0aGUgbmV3IHByb2Nlc3MgaWYgZnVsbHkgcmVnaXN0ZXJlZCAodGhpcyBpcyBuZWVkZWQgdG8KKyAgICBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMpLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgd2l0aCB3YXRjaGVyOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInNsZWVwIDEiKQorICAgICAgICAgICAgd2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcihwcm9jLnBpZCwgY2FsbGJhY2spCisKKyAgICBOb3RlczoKKyAgICAgICAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgY2xhc3MgbXVzdCBiZSB0aHJlYWQtc2FmZS4KKworICAgICAgICBTaW5jZSBjaGlsZCB3YXRjaGVyIG9iamVjdHMgbWF5IGNhdGNoIHRoZSBTSUdDSExEIHNpZ25hbCBhbmQgY2FsbAorICAgICAgICB3YWl0cGlkKC0xKSwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGFjdGl2ZSBvYmplY3QgcGVyIHByb2Nlc3MuCisgICAgIiIiCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJSZWdpc3RlciBhIG5ldyBjaGlsZCBoYW5kbGVyLgorCisgICAgICAgIEFycmFuZ2UgZm9yIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpIHRvIGJlIGNhbGxlZCB3aGVuCisgICAgICAgIHByb2Nlc3MgJ3BpZCcgdGVybWluYXRlcy4gU3BlY2lmeWluZyBhbm90aGVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZQorICAgICAgICBwcm9jZXNzIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBoYW5kbGVyLgorCisgICAgICAgIE5vdGU6IGNhbGxiYWNrKCkgbXVzdCBiZSB0aHJlYWQtc2FmZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkKToKKyAgICAgICAgIiIiUmVtb3ZlcyB0aGUgaGFuZGxlciBmb3IgcHJvY2VzcyAncGlkJy4KKworICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBUcnVlIGlmIHRoZSBoYW5kbGVyIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCwKKyAgICAgICAgRmFsc2UgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gcmVtb3ZlLiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGF0dGFjaF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJBdHRhY2ggdGhlIHdhdGNoZXIgdG8gYW4gZXZlbnQgbG9vcC4KKworICAgICAgICBJZiB0aGUgd2F0Y2hlciB3YXMgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhbiBldmVudCBsb29wLCB0aGVuIGl0IGlzCisgICAgICAgIGZpcnN0IGRldGFjaGVkIGJlZm9yZSBhdHRhY2hpbmcgdG8gdGhlIG5ldyBsb29wLgorCisgICAgICAgIE5vdGU6IGxvb3AgbWF5IGJlIE5vbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHdhdGNoZXIuCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiRW50ZXIgdGhlIHdhdGNoZXIncyBjb250ZXh0IGFuZCBhbGxvdyBzdGFydGluZyBuZXcgcHJvY2Vzc2VzCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiBzZWxmIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICAiIiJFeGl0IHRoZSB3YXRjaGVyJ3MgY29udGV4dCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworCitjbGFzcyBCYXNlQ2hpbGRXYXRjaGVyKEFic3RyYWN0Q2hpbGRXYXRjaGVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5hdHRhY2hfbG9vcChOb25lKQorCisgICAgZGVmIF9kb193YWl0cGlkKHNlbGYsIGV4cGVjdGVkX3BpZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgYXR0YWNoX2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgIGFzc2VydCBsb29wIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShsb29wLCBldmVudHMuQWJzdHJhY3RFdmVudExvb3ApCisKKyAgICAgICAgaWYgc2VsZi5fbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdDSExEKQorCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgc2VsZi5fc2lnX2NobGQpCisKKyAgICAgICAgICAgICMgUHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIGNhc2UgYSBjaGlsZCB0ZXJtaW5hdGVkCisgICAgICAgICAgICAjIGR1cmluZyB0aGUgc3dpdGNoLgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZF9hbGwoKQorCisgICAgZGVmIF9zaWdfY2hsZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZF9hbGwoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5rbm93biBleGNlcHRpb24gaW4gU0lHQ0hMRCBoYW5kbGVyJykKKworICAgIGRlZiBfY29tcHV0ZV9yZXR1cm5jb2RlKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGRpZWQgYmVjYXVzZSBvZiBhIHNpZ25hbC4KKyAgICAgICAgICAgIHJldHVybiAtb3MuV1RFUk1TSUcoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBleGl0ZWQgKGUuZyBzeXMuZXhpdCgpKS4KKyAgICAgICAgICAgIHJldHVybiBvcy5XRVhJVFNUQVRVUyhzdGF0dXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBleGl0ZWQsIGJ1dCB3ZSBkb24ndCB1bmRlcnN0YW5kIGl0cyBzdGF0dXMuCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIGxldCdzIGp1c3QKKyAgICAgICAgICAgICMgcmV0dXJuIHRoYXQgc3RhdHVzOyBwZXJoYXBzIHRoYXQgaGVscHMgZGVidWcgaXQuCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKKworY2xhc3MgU2FmZUNoaWxkV2F0Y2hlcihCYXNlQ2hpbGRXYXRjaGVyKToKKyAgICAiIiInU2FmZScgY2hpbGQgd2F0Y2hlciBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIGRpc3J1cHRpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMgYnkKKyAgICBwb2xsaW5nIGV4cGxpY2l0bHkgZWFjaCBwcm9jZXNzIGluIHRoZSBTSUdDSExEIGhhbmRsZXIgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgb3Mud2FpdHBpZCgtMSkuCisKKyAgICBUaGlzIGlzIGEgc2FmZSBzb2x1dGlvbiBidXQgaXQgaGFzIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgd2hlbiBoYW5kbGluZyBhCisgICAgYmlnIG51bWJlciBvZiBjaGlsZHJlbiAoTyhuKSBlYWNoIHRpbWUgU0lHQ0hMRCBpcyByYWlzZWQpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrc1twaWRdID0gY2FsbGJhY2ssIGFyZ3MKKworICAgICAgICAjIFByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQuCisgICAgICAgIHNlbGYuX2RvX3dhaXRwaWQocGlkKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RvX3dhaXRwaWRfYWxsKHNlbGYpOgorCisgICAgICAgIGZvciBwaWQgaW4gbGlzdChzZWxmLl9jYWxsYmFja3MpOgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZChwaWQpCisKKyAgICBkZWYgX2RvX3dhaXRwaWQoc2VsZiwgZXhwZWN0ZWRfcGlkKToKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkX3BpZCA+IDAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoZXhwZWN0ZWRfcGlkLCBvcy5XTk9IQU5HKQorICAgICAgICBleGNlcHQgQ2hpbGRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGlzIGFscmVhZHkgcmVhcGVkCisgICAgICAgICAgICAjIChtYXkgaGFwcGVuIGlmIHdhaXRwaWQoKSBpcyBjYWxsZWQgZWxzZXdoZXJlKS4KKyAgICAgICAgICAgIHBpZCA9IGV4cGVjdGVkX3BpZAorICAgICAgICAgICAgcmV0dXJuY29kZSA9IDI1NQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgIlVua25vd24gY2hpbGQgcHJvY2VzcyBwaWQgJWQsIHdpbGwgcmVwb3J0IHJldHVybmNvZGUgMjU1IiwKKyAgICAgICAgICAgICAgICBwaWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlLgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fY29tcHV0ZV9yZXR1cm5jb2RlKHN0YXR1cykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IHNlbGYuX2NhbGxiYWNrcy5wb3AocGlkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICMgTWF5IGhhcHBlbiBpZiAucmVtb3ZlX2NoaWxkX2hhbmRsZXIoKSBpcyBjYWxsZWQKKyAgICAgICAgICAgICMgYWZ0ZXIgb3Mud2FpdHBpZCgpIHJldHVybnMuCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisKK2NsYXNzIEZhc3RDaGlsZFdhdGNoZXIoQmFzZUNoaWxkV2F0Y2hlcik6CisgICAgIiIiJ0Zhc3QnIGNoaWxkIHdhdGNoZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGlzIGltcGxlbWVudGF0aW9uIHJlYXBzIGV2ZXJ5IHRlcm1pbmF0ZWQgcHJvY2Vzc2VzIGJ5IGNhbGxpbmcKKyAgICBvcy53YWl0cGlkKC0xKSBkaXJlY3RseSwgcG9zc2libHkgYnJlYWtpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMKKyAgICBhbmQgd2FpdGluZyBmb3IgdGhlaXIgdGVybWluYXRpb24uCisKKyAgICBUaGVyZSBpcyBubyBub3RpY2VhYmxlIG92ZXJoZWFkIHdoZW4gaGFuZGxpbmcgYSBiaWcgbnVtYmVyIG9mIGNoaWxkcmVuCisgICAgKE8oMSkgZWFjaCB0aW1lIGEgY2hpbGQgdGVybWluYXRlcykuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0ge30KKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fem9tYmllcyA9IHt9CisgICAgICAgIHNlbGYuX2ZvcmtzID0gMAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzZWxmLl96b21iaWVzLmNsZWFyKCkKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9mb3JrcyArPSAxCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmtzIC09IDEKKworICAgICAgICAgICAgaWYgc2VsZi5fZm9ya3Mgb3Igbm90IHNlbGYuX3pvbWJpZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGNvbGxhdGVyYWxfdmljdGltcyA9IHN0cihzZWxmLl96b21iaWVzKQorICAgICAgICAgICAgc2VsZi5fem9tYmllcy5jbGVhcigpCisKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAiQ2F1Z2h0IHN1YnByb2Nlc3NlcyB0ZXJtaW5hdGlvbiBmcm9tIHVua25vd24gcGlkczogJXMiLAorICAgICAgICAgICAgY29sbGF0ZXJhbF92aWN0aW1zKQorCisgICAgZGVmIGFkZF9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2ZvcmtzLCAiTXVzdCB1c2UgdGhlIGNvbnRleHQgbWFuYWdlciIKKworICAgICAgICBzZWxmLl9jYWxsYmFja3NbcGlkXSA9IGNhbGxiYWNrLCBhcmdzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgbm90IGFscmVhZHkgdGVybWluYXRlZC4KKyAgICAgICAgICAgICMgKHJhaXNlIEtleUVycm9yIGlmIHN0aWxsIGFsaXZlKQorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX3pvbWJpZXMucG9wKHBpZCkKKworICAgICAgICAgICAgIyBDaGlsZCBpcyBkZWFkLCB0aGVyZWZvcmUgd2UgY2FuIGZpcmUgdGhlIGNhbGxiYWNrIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgIyBGaXJzdCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgZGljdC4KKyAgICAgICAgICAgICMgKHJhaXNlIEtleUVycm9yIGlmIC5yZW1vdmVfY2hpbGRfaGFuZGxlcigpIHdhcyBjYWxsZWQgaW4tYmV0d2VlbikKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RvX3dhaXRwaWRfYWxsKHNlbGYpOgorICAgICAgICAjIEJlY2F1c2Ugb2Ygc2lnbmFsIGNvYWxlc2NpbmcsIHdlIG11c3Qga2VlcCBjYWxsaW5nIHdhaXRwaWQoKSBhcworICAgICAgICAjIGxvbmcgYXMgd2UncmUgYWJsZSB0byByZWFwIGEgY2hpbGQuCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKC0xLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgICMgTm8gbW9yZSBjaGlsZCBwcm9jZXNzZXMgZXhpc3QuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICAjIEEgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fY29tcHV0ZV9yZXR1cm5jb2RlKHN0YXR1cykKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNhbGxiYWNrLCBhcmdzID0gc2VsZi5fY2FsbGJhY2tzLnBvcChwaWQpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgIyB1bmtub3duIGNoaWxkCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9mb3JrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSXQgbWF5IG5vdCBiZSByZWdpc3RlcmVkIHlldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3pvbWJpZXNbcGlkXSA9IHJldHVybmNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgIkNhdWdodCBzdWJwcm9jZXNzIHRlcm1pbmF0aW9uIGZyb20gdW5rbm93biBwaWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgIiVkIC0+ICVkIiwgcGlkLCByZXR1cm5jb2RlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisKK2NsYXNzIF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeShldmVudHMuQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3kpOgorICAgICIiIlhYWCIiIgorICAgIF9sb29wX2ZhY3RvcnkgPSBfVW5peFNlbGVjdG9yRXZlbnRMb29wCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl93YXRjaGVyID0gTm9uZQorCisgICAgZGVmIF9pbml0X3dhdGNoZXIoc2VsZik6CisgICAgICAgIHdpdGggZXZlbnRzLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBOb25lOiAgIyBwcmFnbWE6IG5vIGJyYW5jaAorICAgICAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIgPSBTYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLl9NYWluVGhyZWFkKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLl9sb2NhbC5fbG9vcCkKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiU2V0IHRoZSBldmVudCBsb29wLgorCisgICAgICAgIEFzIGEgc2lkZSBlZmZlY3QsIGlmIGEgY2hpbGQgd2F0Y2hlciB3YXMgc2V0IGJlZm9yZSwgdGhlbiBjYWxsaW5nCisgICAgICAgIC5zZXRfZXZlbnRfbG9vcCgpIGZyb20gdGhlIG1haW4gdGhyZWFkIHdpbGwgY2FsbCAuYXR0YWNoX2xvb3AobG9vcCkgb24KKyAgICAgICAgdGhlIGNoaWxkIHdhdGNoZXIuCisgICAgICAgICIiIgorCisgICAgICAgIHN1cGVyKCkuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgICAgICBpZiBzZWxmLl93YXRjaGVyIGlzIG5vdCBOb25lIGFuZCBcCisgICAgICAgICAgICBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCB0aHJlYWRpbmcuX01haW5UaHJlYWQpOgorICAgICAgICAgICAgc2VsZi5fd2F0Y2hlci5hdHRhY2hfbG9vcChsb29wKQorCisgICAgZGVmIGdldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIGNoaWxkIHdhdGNoZXIKKworICAgICAgICBJZiBub3QgeWV0IHNldCwgYSBTYWZlQ2hpbGRXYXRjaGVyIG9iamVjdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl93YXRjaGVyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9pbml0X3dhdGNoZXIoKQorCisgICAgICAgIHJldHVybiBzZWxmLl93YXRjaGVyCisKKyAgICBkZWYgc2V0X2NoaWxkX3dhdGNoZXIoc2VsZiwgd2F0Y2hlcik6CisgICAgICAgICIiIlNldCB0aGUgY2hpbGQgd2F0Y2hlciIiIgorCisgICAgICAgIGFzc2VydCB3YXRjaGVyIGlzIE5vbmUgb3IgaXNpbnN0YW5jZSh3YXRjaGVyLCBBYnN0cmFjdENoaWxkV2F0Y2hlcikKKworICAgICAgICBpZiBzZWxmLl93YXRjaGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2F0Y2hlci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5fd2F0Y2hlciA9IHdhdGNoZXIKKworU2VsZWN0b3JFdmVudExvb3AgPSBfVW5peFNlbGVjdG9yRXZlbnRMb29wCitEZWZhdWx0RXZlbnRMb29wUG9saWN5ID0gX1VuaXhEZWZhdWx0RXZlbnRMb29wUG9saWN5CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3dpbmRvd3NfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWQyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpAQCAtMCwwICsxLDQ3NSBAQAorIiIiU2VsZWN0b3IgYW5kIHByb2FjdG9yIGV2ZW50bG9vcHMgZm9yIFdpbmRvd3MuIiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgc3RydWN0CitpbXBvcnQgX3dpbmFwaQorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBiYXNlX3N1YnByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm9hY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IHdpbmRvd3NfdXRpbHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCitmcm9tIC4gaW1wb3J0IF9vdmVybGFwcGVkCisKKworX19hbGxfXyA9IFsnU2VsZWN0b3JFdmVudExvb3AnLCAnUHJvYWN0b3JFdmVudExvb3AnLCAnSW9jcFByb2FjdG9yJywKKyAgICAgICAgICAgJ0RlZmF1bHRFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICBdCisKKworTlVMTCA9IDAKK0lORklOSVRFID0gMHhmZmZmZmZmZgorRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEID0gMTIyNQorRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEID0gMTIzNgorCisKK2NsYXNzIF9PdmVybGFwcGVkRnV0dXJlKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJTdWJjbGFzcyBvZiBGdXR1cmUgd2hpY2ggcmVwcmVzZW50cyBhbiBvdmVybGFwcGVkIG9wZXJhdGlvbi4KKworICAgIENhbmNlbGxpbmcgaXQgd2lsbCBpbW1lZGlhdGVseSBjYW5jZWwgdGhlIG92ZXJsYXBwZWQgb3BlcmF0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG92LCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5vdiA9IG92CisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm92LmNhbmNlbCgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gc3VwZXIoKS5jYW5jZWwoKQorCisKK2NsYXNzIF9XYWl0SGFuZGxlRnV0dXJlKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJTdWJjbGFzcyBvZiBGdXR1cmUgd2hpY2ggcmVwcmVzZW50cyBhIHdhaXQgaGFuZGxlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhaXRfaGFuZGxlLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdF9oYW5kbGUgPSB3YWl0X2hhbmRsZQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5jYW5jZWwoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfb3ZlcmxhcHBlZC5VbnJlZ2lzdGVyV2FpdChzZWxmLl93YWl0X2hhbmRsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUud2luZXJyb3IgIT0gX292ZXJsYXBwZWQuRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2NsYXNzIFBpcGVTZXJ2ZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHNlcnZlci4KKworICAgIFRoaXMgaXMgbXVjaCBsaWtlIGEgYm91bmQsIGxpc3RlbmluZyBzb2NrZXQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcyA9IHdlYWtyZWYuV2Vha1NldCgpCisgICAgICAgIHNlbGYuX3BpcGUgPSBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoVHJ1ZSkKKworICAgIGRlZiBfZ2V0X3VuY29ubmVjdGVkX3BpcGUoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIG5ldyBpbnN0YW5jZSBhbmQgcmV0dXJuIHByZXZpb3VzIG9uZS4gIFRoaXMgZW5zdXJlcworICAgICAgICAjIHRoYXQgKHVudGlsIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkKSB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3QKKyAgICAgICAgIyBvbmUgcGlwZSBoYW5kbGUgZm9yIGFkZHJlc3MuICBUaGVyZWZvcmUgaWYgYSBjbGllbnQgYXR0ZW1wdAorICAgICAgICAjIHRvIGNvbm5lY3QgaXQgd2lsbCBub3QgZmFpbCB3aXRoIEZpbGVOb3RGb3VuZEVycm9yLgorICAgICAgICB0bXAsIHNlbGYuX3BpcGUgPSBzZWxmLl9waXBlLCBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoRmFsc2UpCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiBfc2VydmVyX3BpcGVfaGFuZGxlKHNlbGYsIGZpcnN0KToKKyAgICAgICAgIyBSZXR1cm4gYSB3cmFwcGVyIGZvciBhIG5ldyBwaXBlIGhhbmRsZS4KKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZmxhZ3MgPSBfd2luYXBpLlBJUEVfQUNDRVNTX0RVUExFWCB8IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKyAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICBmbGFncyB8PSBfd2luYXBpLkZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFCisgICAgICAgIGggPSBfd2luYXBpLkNyZWF0ZU5hbWVkUGlwZSgKKyAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MsIGZsYWdzLAorICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1RZUEVfTUVTU0FHRSB8IF93aW5hcGkuUElQRV9SRUFETU9ERV9NRVNTQUdFIHwKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9XQUlULAorICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1VOTElNSVRFRF9JTlNUQU5DRVMsCisgICAgICAgICAgICB3aW5kb3dzX3V0aWxzLkJVRlNJWkUsIHdpbmRvd3NfdXRpbHMuQlVGU0laRSwKKyAgICAgICAgICAgIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsIF93aW5hcGkuTlVMTCkKKyAgICAgICAgcGlwZSA9IHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZShoKQorICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcy5hZGQocGlwZSkKKyAgICAgICAgcmV0dXJuIHBpcGUKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBDbG9zZSBhbGwgaW5zdGFuY2VzIHdoaWNoIGhhdmUgbm90IGJlZW4gY29ubmVjdGVkIHRvIGJ5IGEgY2xpZW50LgorICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIHBpcGUgaW4gc2VsZi5fZnJlZV9pbnN0YW5jZXM6CisgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2ZyZWVfaW5zdGFuY2VzLmNsZWFyKCkKKworICAgIF9fZGVsX18gPSBjbG9zZQorCisKK2NsYXNzIF9XaW5kb3dzU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgIiIiV2luZG93cyB2ZXJzaW9uIG9mIHNlbGVjdG9yIGV2ZW50IGxvb3AuIiIiCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisKK2NsYXNzIFByb2FjdG9yRXZlbnRMb29wKHByb2FjdG9yX2V2ZW50cy5CYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICIiIldpbmRvd3MgdmVyc2lvbiBvZiBwcm9hY3RvciBldmVudCBsb29wIHVzaW5nIElPQ1AuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYWN0b3I9Tm9uZSk6CisgICAgICAgIGlmIHByb2FjdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9hY3RvciA9IElvY3BQcm9hY3RvcigpCisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocHJvYWN0b3IpCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfcGlwZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGFkZHJlc3MpOgorICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuY29ubmVjdF9waXBlKGFkZHJlc3MpCisgICAgICAgIHBpcGUgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnMgPSBzZWxmLl9tYWtlX2R1cGxleF9waXBlX3RyYW5zcG9ydChwaXBlLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17J2FkZHInOiBhZGRyZXNzfSkKKyAgICAgICAgcmV0dXJuIHRyYW5zLCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBzdGFydF9zZXJ2aW5nX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgYWRkcmVzcyk6CisgICAgICAgIHNlcnZlciA9IFBpcGVTZXJ2ZXIoYWRkcmVzcykKKworICAgICAgICBkZWYgbG9vcChmPU5vbmUpOgorICAgICAgICAgICAgcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgICAgICBwaXBlID0gZi5yZXN1bHQoKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuX2ZyZWVfaW5zdGFuY2VzLmRpc2NhcmQocGlwZSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLCBwcm90b2NvbCwgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisgICAgICAgICAgICAgICAgcGlwZSA9IHNlcnZlci5fZ2V0X3VuY29ubmVjdGVkX3BpcGUoKQorICAgICAgICAgICAgICAgIGlmIHBpcGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmFjY2VwdF9waXBlKHBpcGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBwaXBlIGFuZCBwaXBlLmZpbGVubygpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdQaXBlIGFjY2VwdCBmYWlsZWQnKQorICAgICAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIGlmIHBpcGU6CisgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGxvb3ApCisKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24obG9vcCkKKyAgICAgICAgcmV0dXJuIFtzZXJ2ZXJdCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBzZXJ2ZXIpOgorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICB0cmFuc3AgPSBfV2luZG93c1N1YnByb2Nlc3NUcmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpCisgICAgICAgIHlpZWxkIGZyb20gdHJhbnNwLl9wb3N0X2luaXQoKQorICAgICAgICByZXR1cm4gdHJhbnNwCisKKyAgICBkZWYgX3N1YnByb2Nlc3NfY2xvc2VkKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBJb2NwUHJvYWN0b3I6CisgICAgIiIiUHJvYWN0b3IgaW1wbGVtZW50YXRpb24gdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25jdXJyZW5jeT0weGZmZmZmZmZmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2lvY3AgPSBfb3ZlcmxhcHBlZC5DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KAorICAgICAgICAgICAgX292ZXJsYXBwZWQuSU5WQUxJRF9IQU5ETEVfVkFMVUUsIE5VTEwsIDAsIGNvbmN1cnJlbmN5KQorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgZGVmIHNldF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcmVzdWx0czoKKyAgICAgICAgICAgIHNlbGYuX3BvbGwodGltZW91dCkKKyAgICAgICAgdG1wID0gc2VsZi5fcmVzdWx0cworICAgICAgICBzZWxmLl9yZXN1bHRzID0gW10KKyAgICAgICAgcmV0dXJuIHRtcAorCisgICAgZGVmIHJlY3Yoc2VsZiwgY29ubiwgbmJ5dGVzLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBUmVjdihjb25uLmZpbGVubygpLCBuYnl0ZXMsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuUmVhZEZpbGUoY29ubi5maWxlbm8oKSwgbmJ5dGVzKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9ORVROQU1FX0RFTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCpleGMuYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoKQorCisgICAgZGVmIHNlbmQoc2VsZiwgY29ubiwgYnVmLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBU2VuZChjb25uLmZpbGVubygpLCBidWYsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuV3JpdGVGaWxlKGNvbm4uZmlsZW5vKCksIGJ1ZikKKworICAgICAgICBkZWYgZmluaXNoKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgPT0gX292ZXJsYXBwZWQuRVJST1JfTkVUTkFNRV9ERUxFVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcigqZXhjLmFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaCkKKworICAgIGRlZiBhY2NlcHQoc2VsZiwgbGlzdGVuZXIpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AobGlzdGVuZXIpCisgICAgICAgIGNvbm4gPSBzZWxmLl9nZXRfYWNjZXB0X3NvY2tldChsaXN0ZW5lci5mYW1pbHkpCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5BY2NlcHRFeChsaXN0ZW5lci5maWxlbm8oKSwgY29ubi5maWxlbm8oKSkKKworICAgICAgICBkZWYgZmluaXNoX2FjY2VwdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUIHNvIGdldHNvY2tuYW1lKCkgZXRjIHdvcmsuCisgICAgICAgICAgICBidWYgPSBzdHJ1Y3QucGFjaygnQFAnLCBsaXN0ZW5lci5maWxlbm8oKSkKKyAgICAgICAgICAgIGNvbm4uc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5TT19VUERBVEVfQUNDRVBUX0NPTlRFWFQsIGJ1ZikKKyAgICAgICAgICAgIGNvbm4uc2V0dGltZW91dChsaXN0ZW5lci5nZXR0aW1lb3V0KCkpCisgICAgICAgICAgICByZXR1cm4gY29ubiwgY29ubi5nZXRwZWVybmFtZSgpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBsaXN0ZW5lciwgZmluaXNoX2FjY2VwdCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYsIGNvbm4sIGFkZHJlc3MpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AoY29ubikKKyAgICAgICAgIyBUaGUgc29ja2V0IG5lZWRzIHRvIGJlIGxvY2FsbHkgYm91bmQgYmVmb3JlIHdlIGNhbGwgQ29ubmVjdEV4KCkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLkJpbmRMb2NhbChjb25uLmZpbGVubygpLCBjb25uLmZhbWlseSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUud2luZXJyb3IgIT0gZXJybm8uV1NBRUlOVkFMOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFByb2JhYmx5IGFscmVhZHkgbG9jYWxseSBib3VuZDsgY2hlY2sgdXNpbmcgZ2V0c29ja25hbWUoKS4KKyAgICAgICAgICAgIGlmIGNvbm4uZ2V0c29ja25hbWUoKVsxXSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5Db25uZWN0RXgoY29ubi5maWxlbm8oKSwgYWRkcmVzcykKKworICAgICAgICBkZWYgZmluaXNoX2Nvbm5lY3QodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgICMgVXNlIFNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQgc28gZ2V0c29ja25hbWUoKSBldGMgd29yay4KKyAgICAgICAgICAgIGNvbm4uc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5TT19VUERBVEVfQ09OTkVDVF9DT05URVhULCAwKQorICAgICAgICAgICAgcmV0dXJuIGNvbm4KKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaF9jb25uZWN0KQorCisgICAgZGVmIGFjY2VwdF9waXBlKHNlbGYsIHBpcGUpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AocGlwZSkKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkNvbm5lY3ROYW1lZFBpcGUocGlwZS5maWxlbm8oKSkKKworICAgICAgICBkZWYgZmluaXNoKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIG92LmdldHJlc3VsdCgpCisgICAgICAgICAgICByZXR1cm4gcGlwZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgcGlwZSwgZmluaXNoKQorCisgICAgZGVmIGNvbm5lY3RfcGlwZShzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LldhaXROYW1lZFBpcGVBbmRDb25uZWN0KGFkZHJlc3MsIHNlbGYuX2lvY3AsIG92LmFkZHJlc3MpCisKKyAgICAgICAgZGVmIGZpbmlzaChlcnIsIGhhbmRsZSwgb3YpOgorICAgICAgICAgICAgIyBlcnIsIGhhbmRsZSB3ZXJlIGFyZ3VtZW50cyBwYXNzZWQgdG8gUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKQorICAgICAgICAgICAgIyBpbiBhIGZ1bmN0aW9uIHJ1biBpbiBhIHRocmVhZCBwb29sLgorICAgICAgICAgICAgaWYgZXJyID09IF9vdmVybGFwcGVkLkVSUk9SX1NFTV9USU1FT1VUOgorICAgICAgICAgICAgICAgICMgQ29ubmVjdGlvbiBkaWQgbm90IHN1Y2NlZWQgd2l0aGluIHRpbWUgbGltaXQuCisgICAgICAgICAgICAgICAgbXNnID0gX292ZXJsYXBwZWQuRm9ybWF0TWVzc2FnZShlcnIpCisgICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlZnVzZWRFcnJvcigwLCBtc2csIE5vbmUsIGVycikKKyAgICAgICAgICAgIGVsaWYgZXJyICE9IDA6CisgICAgICAgICAgICAgICAgbXNnID0gX292ZXJsYXBwZWQuRm9ybWF0TWVzc2FnZShlcnIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCBtc2csIE5vbmUsIGVycikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZShoYW5kbGUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBOb25lLCBmaW5pc2gsIHdhaXRfZm9yX3Bvc3Q9VHJ1ZSkKKworICAgIGRlZiB3YWl0X2Zvcl9oYW5kbGUoc2VsZiwgaGFuZGxlLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBtcyA9IF93aW5hcGkuSU5GSU5JVEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zID0gaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KQorCisgICAgICAgICMgV2Ugb25seSBjcmVhdGUgb3Ygc28gd2UgY2FuIHVzZSBvdi5hZGRyZXNzIGFzIGEga2V5IGZvciB0aGUgY2FjaGUuCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICB3aCA9IF9vdmVybGFwcGVkLlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZSgKKyAgICAgICAgICAgIGhhbmRsZSwgc2VsZi5faW9jcCwgb3YuYWRkcmVzcywgbXMpCisgICAgICAgIGYgPSBfV2FpdEhhbmRsZUZ1dHVyZSh3aCwgbG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgaWYgbm90IGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5VbnJlZ2lzdGVyV2FpdCh3aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yICE9IF9vdmVybGFwcGVkLkVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBzZWNvbmQgd2FpdCBtZWFucyB0aGF0IHdlIHNob3VsZCBvbmx5IHVzZQorICAgICAgICAgICAgIyB0aGlzIHdpdGggaGFuZGxlcyB0eXBlcyB3aGVyZSBhIHN1Y2Nlc3NmdWwgd2FpdCBoYXMgbm8KKyAgICAgICAgICAgICMgZWZmZWN0LiAgU28gZXZlbnRzIG9yIHByb2Nlc3NlcyBhcmUgYWxsIHJpZ2h0LCBidXQgbG9ja3MKKyAgICAgICAgICAgICMgb3Igc2VtYXBob3JlcyBhcmUgbm90LiAgQWxzbyBub3RlIGlmIHRoZSBoYW5kbGUgaXMKKyAgICAgICAgICAgICMgc2lnbmFsbGVkIGFuZCB0aGVuIHF1aWNrbHkgcmVzZXQsIHRoZW4gd2UgbWF5IHJldHVybgorICAgICAgICAgICAgIyBGYWxzZSBldmVuIHRob3VnaCB3ZSBoYXZlIG5vdCB0aW1lZCBvdXQuCisgICAgICAgICAgICByZXR1cm4gKF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIDApID09CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgICAgICBzZWxmLl9jYWNoZVtvdi5hZGRyZXNzXSA9IChmLCBvdiwgTm9uZSwgZmluaXNoKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIF9yZWdpc3Rlcl93aXRoX2lvY3Aoc2VsZiwgb2JqKToKKyAgICAgICAgIyBUbyBnZXQgbm90aWZpY2F0aW9ucyBvZiBmaW5pc2hlZCBvcHMgb24gdGhpcyBvYmplY3RzIHNlbnQgdG8gdGhlCisgICAgICAgICMgY29tcGxldGlvbiBwb3J0LCB3ZXJlIG11c3QgcmVnaXN0ZXIgdGhlIGhhbmRsZS4KKyAgICAgICAgaWYgb2JqIG5vdCBpbiBzZWxmLl9yZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZC5hZGQob2JqKQorICAgICAgICAgICAgX292ZXJsYXBwZWQuQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChvYmouZmlsZW5vKCksIHNlbGYuX2lvY3AsIDAsIDApCisgICAgICAgICAgICAjIFhYWCBXZSBjb3VsZCBhbHNvIHVzZSBTZXRGaWxlQ29tcGxldGlvbk5vdGlmaWNhdGlvbk1vZGVzKCkKKyAgICAgICAgICAgICMgdG8gYXZvaWQgc2VuZGluZyBub3RpZmljYXRpb25zIHRvIGNvbXBsZXRpb24gcG9ydCBvZiBvcHMKKyAgICAgICAgICAgICMgdGhhdCBzdWNjZWVkIGltbWVkaWF0ZWx5LgorCisgICAgZGVmIF9yZWdpc3RlcihzZWxmLCBvdiwgb2JqLCBjYWxsYmFjaywgd2FpdF9mb3JfcG9zdD1GYWxzZSk6CisgICAgICAgICMgUmV0dXJuIGEgZnV0dXJlIHdoaWNoIHdpbGwgYmUgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgIyBvcGVyYXRpb24gd2hlbiBpdCBjb21wbGV0ZXMuICBUaGUgZnV0dXJlJ3MgdmFsdWUgaXMgYWN0dWFsbHkKKyAgICAgICAgIyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGJhY2soKS4KKyAgICAgICAgZiA9IF9PdmVybGFwcGVkRnV0dXJlKG92LCBsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGlmIG92LnBlbmRpbmcgb3Igd2FpdF9mb3JfcG9zdDoKKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdGhlIG92ZXJsYXBwZWQgb3BlcmF0aW9uIGZvciBsYXRlci4gIE5vdGUgdGhhdAorICAgICAgICAgICAgIyB3ZSBvbmx5IHN0b3JlIG9iaiB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZ2FyYmFnZQorICAgICAgICAgICAgIyBjb2xsZWN0ZWQgdG9vIGVhcmx5LgorICAgICAgICAgICAgc2VsZi5fY2FjaGVbb3YuYWRkcmVzc10gPSAoZiwgb3YsIG9iaiwgY2FsbGJhY2spCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCwgc28gbm8gbmVlZCB0byBwb3N0cG9uZSB0aGUKKyAgICAgICAgICAgICMgd29yay4gIFdlIGNhbm5vdCB0YWtlIHRoaXMgc2hvcnQgY3V0IGlmIHdlIG5lZWQgdGhlCisgICAgICAgICAgICAjIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXkgdmFsdWVzIHJldHVybmVkIGJ5CisgICAgICAgICAgICAjIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayhOb25lLCBOb25lLCBvdikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiBfZ2V0X2FjY2VwdF9zb2NrZXQoc2VsZiwgZmFtaWx5KToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoZmFtaWx5KQorICAgICAgICBzLnNldHRpbWVvdXQoMCkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBtcyA9IElORklOSVRFCisgICAgICAgIGVsaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSB0aW1lb3V0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zID0gaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KQorICAgICAgICAgICAgaWYgbXMgPj0gSU5GSU5JVEU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGltZW91dCB0b28gYmlnIikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0YXR1cyA9IF9vdmVybGFwcGVkLkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoc2VsZi5faW9jcCwgbXMpCisgICAgICAgICAgICBpZiBzdGF0dXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVyciwgdHJhbnNmZXJyZWQsIGtleSwgYWRkcmVzcyA9IHN0YXR1cworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYsIG92LCBvYmosIGNhbGxiYWNrID0gc2VsZi5fY2FjaGUucG9wKGFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgIyBrZXkgaXMgZWl0aGVyIHplcm8sIG9yIGl0IGlzIHVzZWQgdG8gcmV0dXJuIGEgcGlwZQorICAgICAgICAgICAgICAgICMgaGFuZGxlIHdoaWNoIHNob3VsZCBiZSBjbG9zZWQgdG8gYXZvaWQgYSBsZWFrLgorICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKDAsIF9vdmVybGFwcGVkLklOVkFMSURfSEFORExFX1ZBTFVFKToKKyAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShrZXkpCisgICAgICAgICAgICAgICAgbXMgPSAwCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG9iaiBpbiBzZWxmLl9zdG9wcGVkX3NlcnZpbmc6CisgICAgICAgICAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICAgICAgZWxpZiBub3QgZi5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2sodHJhbnNmZXJyZWQsIGtleSwgb3YpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdHMuYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZi5zZXRfcmVzdWx0KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRzLmFwcGVuZChmKQorICAgICAgICAgICAgbXMgPSAwCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBvYmopOgorICAgICAgICAjIG9iaiBpcyBhIHNvY2tldCBvciBwaXBlIGhhbmRsZS4gIEl0IHdpbGwgYmUgY2xvc2VkIGluCisgICAgICAgICMgQmFzZVByb2FjdG9yRXZlbnRMb29wLl9zdG9wX3NlcnZpbmcoKSB3aGljaCB3aWxsIG1ha2UgYW55CisgICAgICAgICMgcGVuZGluZyBvcGVyYXRpb25zIGZhaWwgcXVpY2tseS4KKyAgICAgICAgc2VsZi5fc3RvcHBlZF9zZXJ2aW5nLmFkZChvYmopCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2FuY2VsIHJlbWFpbmluZyByZWdpc3RlcmVkIG9wZXJhdGlvbnMuCisgICAgICAgIGZvciBhZGRyZXNzLCAoZiwgb3YsIG9iaiwgY2FsbGJhY2spIGluIGxpc3Qoc2VsZi5fY2FjaGUuaXRlbXMoKSk6CisgICAgICAgICAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoZSBvcGVyYXRpb24gd2FzIHN0YXJ0ZWQgd2l0aCBjb25uZWN0X3BpcGUoKSB3aGljaAorICAgICAgICAgICAgICAgICMgcXVldWVzIGEgdGFzayB0byBXaW5kb3dzJyB0aHJlYWQgcG9vbC4gIFRoaXMgY2Fubm90CisgICAgICAgICAgICAgICAgIyBiZSBjYW5jZWxsZWQsIHNvIGp1c3QgZm9yZ2V0IGl0LgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9jYWNoZVthZGRyZXNzXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG92LmNhbmNlbCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aGlsZSBzZWxmLl9jYWNoZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wb2xsKDEpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygndGFraW5nIGxvbmcgdGltZSB0byBjbG9zZSBwcm9hY3RvcicpCisKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIGlmIHNlbGYuX2lvY3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHNlbGYuX2lvY3ApCisgICAgICAgICAgICBzZWxmLl9pb2NwID0gTm9uZQorCisKK2NsYXNzIF9XaW5kb3dzU3VicHJvY2Vzc1RyYW5zcG9ydChiYXNlX3N1YnByb2Nlc3MuQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX3Byb2MgPSB3aW5kb3dzX3V0aWxzLlBvcGVuKAorICAgICAgICAgICAgYXJncywgc2hlbGw9c2hlbGwsIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLAorICAgICAgICAgICAgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKworICAgICAgICBkZWYgY2FsbGJhY2soZik6CisgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fcHJvYy5wb2xsKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfZXhpdGVkKHJldHVybmNvZGUpCisKKyAgICAgICAgZiA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShpbnQoc2VsZi5fcHJvYy5faGFuZGxlKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYWxsYmFjaykKKworCitTZWxlY3RvckV2ZW50TG9vcCA9IF9XaW5kb3dzU2VsZWN0b3JFdmVudExvb3AKKworCitjbGFzcyBfV2luZG93c0RlZmF1bHRFdmVudExvb3BQb2xpY3koZXZlbnRzLkJhc2VEZWZhdWx0RXZlbnRMb29wUG9saWN5KToKKyAgICBfbG9vcF9mYWN0b3J5ID0gU2VsZWN0b3JFdmVudExvb3AKKworCitEZWZhdWx0RXZlbnRMb29wUG9saWN5ID0gX1dpbmRvd3NEZWZhdWx0RXZlbnRMb29wUG9saWN5CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5IGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFjMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpAQCAtMCwwICsxLDE5MiBAQAorIiIiCitWYXJpb3VzIFdpbmRvd3Mgc3BlY2lmaWMgYml0cyBhbmQgcGllY2VzCisiIiIKKworaW1wb3J0IHN5cworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCd3aW4zMiBvbmx5JykKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1zdmNydAoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgX3dpbmFwaQorCisKK19fYWxsX18gPSBbJ3NvY2tldHBhaXInLCAncGlwZScsICdQb3BlbicsICdQSVBFJywgJ1BpcGVIYW5kbGUnXQorCisKKyMgQ29uc3RhbnRzL2dsb2JhbHMKKworCitCVUZTSVpFID0gODE5MgorUElQRSA9IHN1YnByb2Nlc3MuUElQRQorU1RET1VUID0gc3VicHJvY2Vzcy5TVERPVVQKK19tbWFwX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIHNvY2tldC5zb2NrZXRwYWlyKCkKKworCitkZWYgc29ja2V0cGFpcihmYW1pbHk9c29ja2V0LkFGX0lORVQsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz0wKToKKyAgICAiIiJBIHNvY2tldCBwYWlyIHVzYWJsZSBhcyBhIHNlbGYtcGlwZSwgZm9yIFdpbmRvd3MuCisKKyAgICBPcmlnaW46IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzQzMjU3ODMsIGJ5IEdlZXJ0IEphbnNlbi4gIFB1YmxpYyBkb21haW4uCisgICAgIiIiCisgICAgIyBXZSBjcmVhdGUgYSBjb25uZWN0ZWQgVENQIHNvY2tldC4gTm90ZSB0aGUgdHJpY2sgd2l0aCBzZXRibG9ja2luZygwKQorICAgICMgdGhhdCBwcmV2ZW50cyB1cyBmcm9tIGhhdmluZyB0byBjcmVhdGUgYSB0aHJlYWQuCisgICAgbHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgbHNvY2suYmluZCgoJ2xvY2FsaG9zdCcsIDApKQorICAgIGxzb2NrLmxpc3RlbigxKQorICAgIGFkZHIsIHBvcnQgPSBsc29jay5nZXRzb2NrbmFtZSgpCisgICAgY3NvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgdHJ5OgorICAgICAgICBjc29jay5jb25uZWN0KChhZGRyLCBwb3J0KSkKKyAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBsc29jay5jbG9zZSgpCisgICAgICAgIGNzb2NrLmNsb3NlKCkKKyAgICAgICAgcmFpc2UKKyAgICBzc29jaywgXyA9IGxzb2NrLmFjY2VwdCgpCisgICAgY3NvY2suc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICBsc29jay5jbG9zZSgpCisgICAgcmV0dXJuIChzc29jaywgY3NvY2spCisKKworIyBSZXBsYWNlbWVudCBmb3Igb3MucGlwZSgpIHVzaW5nIGhhbmRsZXMgaW5zdGVhZCBvZiBmZHMKKworCitkZWYgcGlwZSgqLCBkdXBsZXg9RmFsc2UsIG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpLCBidWZzaXplPUJVRlNJWkUpOgorICAgICIiIkxpa2Ugb3MucGlwZSgpIGJ1dCB3aXRoIG92ZXJsYXBwZWQgc3VwcG9ydCBhbmQgdXNpbmcgaGFuZGxlcyBub3QgZmRzLiIiIgorICAgIGFkZHJlc3MgPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHl0aG9uLXBpcGUtJWQtJWQtJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0cGlkKCksIG5leHQoX21tYXBfY291bnRlcikpKQorCisgICAgaWYgZHVwbGV4OgorICAgICAgICBvcGVubW9kZSA9IF93aW5hcGkuUElQRV9BQ0NFU1NfRFVQTEVYCisgICAgICAgIGFjY2VzcyA9IF93aW5hcGkuR0VORVJJQ19SRUFEIHwgX3dpbmFwaS5HRU5FUklDX1dSSVRFCisgICAgICAgIG9ic2l6ZSwgaWJzaXplID0gYnVmc2l6ZSwgYnVmc2l6ZQorICAgIGVsc2U6CisgICAgICAgIG9wZW5tb2RlID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19JTkJPVU5ECisgICAgICAgIGFjY2VzcyA9IF93aW5hcGkuR0VORVJJQ19XUklURQorICAgICAgICBvYnNpemUsIGlic2l6ZSA9IDAsIGJ1ZnNpemUKKworICAgIG9wZW5tb2RlIHw9IF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UKKworICAgIGlmIG92ZXJsYXBwZWRbMF06CisgICAgICAgIG9wZW5tb2RlIHw9IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKworICAgIGlmIG92ZXJsYXBwZWRbMV06CisgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzID0gX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRAorICAgIGVsc2U6CisgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzID0gMAorCisgICAgaDEgPSBoMiA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGgxID0gX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUoCisgICAgICAgICAgICBhZGRyZXNzLCBvcGVubW9kZSwgX3dpbmFwaS5QSVBFX1dBSVQsCisgICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMKQorCisgICAgICAgIGgyID0gX3dpbmFwaS5DcmVhdGVGaWxlKAorICAgICAgICAgICAgYWRkcmVzcywgYWNjZXNzLCAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKKyAgICAgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzLCBfd2luYXBpLk5VTEwpCisKKyAgICAgICAgb3YgPSBfd2luYXBpLkNvbm5lY3ROYW1lZFBpcGUoaDEsIG92ZXJsYXBwZWQ9VHJ1ZSkKKyAgICAgICAgb3YuR2V0T3ZlcmxhcHBlZFJlc3VsdChUcnVlKQorICAgICAgICByZXR1cm4gaDEsIGgyCisgICAgZXhjZXB0OgorICAgICAgICBpZiBoMSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDEpCisgICAgICAgIGlmIGgyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMikKKyAgICAgICAgcmFpc2UKKworCisjIFdyYXBwZXIgZm9yIGEgcGlwZSBoYW5kbGUKKworCitjbGFzcyBQaXBlSGFuZGxlOgorICAgICIiIldyYXBwZXIgZm9yIGFuIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGUgd2hpY2ggaXMgdmFndWVseSBmaWxlLW9iamVjdCBsaWtlLgorCisgICAgVGhlIElPQ1AgZXZlbnQgbG9vcCBjYW4gdXNlIHRoZXNlIGluc3RlYWQgb2Ygc29ja2V0IG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIHNlbGYuX2hhbmRsZSA9IGhhbmRsZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhhbmRsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZQorCisgICAgZGVmIGNsb3NlKHNlbGYsICosIENsb3NlSGFuZGxlPV93aW5hcGkuQ2xvc2VIYW5kbGUpOgorICAgICAgICBpZiBzZWxmLl9oYW5kbGUgIT0gLTE6CisgICAgICAgICAgICBDbG9zZUhhbmRsZShzZWxmLl9oYW5kbGUpCisgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSAtMQorCisgICAgX19kZWxfXyA9IGNsb3NlCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKworIyBSZXBsYWNlbWVudCBmb3Igc3VicHJvY2Vzcy5Qb3BlbiB1c2luZyBvdmVybGFwcGVkIHBpcGUgaGFuZGxlcworCisKK2NsYXNzIFBvcGVuKHN1YnByb2Nlc3MuUG9wZW4pOgorICAgICIiIlJlcGxhY2VtZW50IGZvciBzdWJwcm9jZXNzLlBvcGVuIHVzaW5nIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGVzLgorCisgICAgVGhlIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciBhcmUgTm9uZSBvciBpbnN0YW5jZXMgb2YgUGlwZUhhbmRsZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCAqKmt3ZHMpOgorICAgICAgICBhc3NlcnQgbm90IGt3ZHMuZ2V0KCd1bml2ZXJzYWxfbmV3bGluZXMnKQorICAgICAgICBhc3NlcnQga3dkcy5nZXQoJ2J1ZnNpemUnLCAwKSA9PSAwCisgICAgICAgIHN0ZGluX3JmZCA9IHN0ZG91dF93ZmQgPSBzdGRlcnJfd2ZkID0gTm9uZQorICAgICAgICBzdGRpbl93aCA9IHN0ZG91dF9yaCA9IHN0ZGVycl9yaCA9IE5vbmUKKyAgICAgICAgaWYgc3RkaW4gPT0gUElQRToKKyAgICAgICAgICAgIHN0ZGluX3JoLCBzdGRpbl93aCA9IHBpcGUob3ZlcmxhcHBlZD0oRmFsc2UsIFRydWUpLCBkdXBsZXg9VHJ1ZSkKKyAgICAgICAgICAgIHN0ZGluX3JmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRpbl9yaCwgb3MuT19SRE9OTFkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRpbl9yZmQgPSBzdGRpbgorICAgICAgICBpZiBzdGRvdXQgPT0gUElQRToKKyAgICAgICAgICAgIHN0ZG91dF9yaCwgc3Rkb3V0X3doID0gcGlwZShvdmVybGFwcGVkPShUcnVlLCBGYWxzZSkpCisgICAgICAgICAgICBzdGRvdXRfd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZG91dF93aCwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZG91dF93ZmQgPSBzdGRvdXQKKyAgICAgICAgaWYgc3RkZXJyID09IFBJUEU6CisgICAgICAgICAgICBzdGRlcnJfcmgsIHN0ZGVycl93aCA9IHBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgRmFsc2UpKQorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRlcnJfd2gsIDApCisgICAgICAgIGVsaWYgc3RkZXJyID09IFNURE9VVDoKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBzdGRvdXRfd2ZkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gc3RkZXJyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oYXJncywgc3RkaW49c3RkaW5fcmZkLCBzdGRvdXQ9c3Rkb3V0X3dmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVycl93ZmQsICoqa3dkcykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZm9yIGggaW4gKHN0ZGluX3doLCBzdGRvdXRfcmgsIHN0ZGVycl9yaCk6CisgICAgICAgICAgICAgICAgaWYgaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN0ZGluX3doIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4gPSBQaXBlSGFuZGxlKHN0ZGluX3doKQorICAgICAgICAgICAgaWYgc3Rkb3V0X3JoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gUGlwZUhhbmRsZShzdGRvdXRfcmgpCisgICAgICAgICAgICBpZiBzdGRlcnJfcmggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBQaXBlSGFuZGxlKHN0ZGVycl9yaCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHN0ZGluID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3RkaW5fcmZkKQorICAgICAgICAgICAgaWYgc3Rkb3V0ID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3Rkb3V0X3dmZCkKKyAgICAgICAgICAgIGlmIHN0ZGVyciA9PSBQSVBFOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZGVycl93ZmQpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNvcmUucHkgYi9MaWIvYXN5bmNvcmUucHkKaW5kZXggOTA5ZDlmNi4uNzU0ODFkZCAxMDA2NDQKLS0tIGEvTGliL2FzeW5jb3JlLnB5CisrKyBiL0xpYi9hc3luY29yZS5weQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICBvYmouaGFuZGxlX2V4cHRfZXZlbnQoKQogICAgICAgICBpZiBmbGFncyAmIChzZWxlY3QuUE9MTEhVUCB8IHNlbGVjdC5QT0xMRVJSIHwgc2VsZWN0LlBPTExOVkFMKToKICAgICAgICAgICAgIG9iai5oYW5kbGVfY2xvc2UoKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBlLmFyZ3NbMF0gbm90IGluIF9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgICBvYmouaGFuZGxlX2Vycm9yKCkKICAgICAgICAgZWxzZToKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgICAgICAgIyBwYXNzZWQgYmUgY29ubmVjdGVkLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuYWRkciA9IHNvY2suZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKEVOT1RDT05OLCBFSU5WQUwpOgogICAgICAgICAgICAgICAgICAgICAjIFRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBnb3QgYW4gdW5jb25uZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgIyBzb2NrZXQuCkBAIC0zMDQsNyArMzA0LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUikgfCAxCiAgICAgICAgICAgICAgICAgKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM0NSw3ICszNDUsNyBAQAogICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcmVzcwogICAgICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdF9ldmVudCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJyLCBlcnJvcmNvZGVbZXJyXSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLCBlcnJvcmNvZGVbZXJyXSkKIAogICAgIGRlZiBhY2NlcHQoc2VsZik6CiAgICAgICAgICMgWFhYIGNhbiByZXR1cm4gZWl0aGVyIGFuIGFkZHJlc3MgcGFpciBvciBOb25lCkBAIC0zNTMsNyArMzUzLDcgQEAKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIChFV09VTERCTE9DSywgRUNPTk5BQk9SVEVELCBFQUdBSU4pOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzY1LDcgKzM2NSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuc29ja2V0LnNlbmQoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdID09IEVXT1VMREJMT0NLOgogICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAgICBlbGlmIHdoeS5hcmdzWzBdIGluIF9ESVNDT05ORUNURUQ6CkBAIC0zODQsNyArMzg0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAjIHdpbnNvY2sgc29tZXRpbWVzIHJhaXNlcyBFTk9UQ09OTgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCkBAIC0zOTcsMTEgKzM5NywxMiBAQAogICAgICAgICBzZWxmLmFjY2VwdGluZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuY29ubmVjdGluZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuZGVsX2NoYW5uZWwoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgotICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gbm90IGluIChFTk9UQ09OTiwgRUJBREYpOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYuc29ja2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBub3QgaW4gKEVOT1RDT05OLCBFQkFERik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAjIGNoZWFwIGluaGVyaXRhbmNlLCB1c2VkIHRvIHBhc3MgYWxsIG90aGVyIGF0dHJpYnV0ZQogICAgICMgcmVmZXJlbmNlcyB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgpAQCAtNDQzLDcgKzQ0NCw3IEBACiAgICAgZGVmIGhhbmRsZV9jb25uZWN0X2V2ZW50KHNlbGYpOgogICAgICAgICBlcnIgPSBzZWxmLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fRVJST1IpCiAgICAgICAgIGlmIGVyciAhPSAwOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVyciwgX3N0cmVycm9yKGVycikpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgX3N0cmVycm9yKGVycikpCiAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3QoKQogICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IFRydWUKICAgICAgICAgc2VsZi5jb25uZWN0aW5nID0gRmFsc2UKQEAgLTUzMiw3ICs1MzMsNyBAQAogCiAgICAgZGVmIGluaXRpYXRlX3NlbmQoc2VsZik6CiAgICAgICAgIG51bV9zZW50ID0gMAotICAgICAgICBudW1fc2VudCA9IGRpc3BhdGNoZXIuc2VuZChzZWxmLCBzZWxmLm91dF9idWZmZXJbOjUxMl0pCisgICAgICAgIG51bV9zZW50ID0gZGlzcGF0Y2hlci5zZW5kKHNlbGYsIHNlbGYub3V0X2J1ZmZlcls6NjU1MzZdKQogICAgICAgICBzZWxmLm91dF9idWZmZXIgPSBzZWxmLm91dF9idWZmZXJbbnVtX3NlbnQ6XQogCiAgICAgZGVmIGhhbmRsZV93cml0ZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9iYXNlNjQucHkgYi9MaWIvYmFzZTY0LnB5CmluZGV4IGI2ZTgyYjYuLjg0ODE4Y2YgMTAwNzU1Ci0tLSBhL0xpYi9iYXNlNjQucHkKKysrIGIvTGliL2Jhc2U2NC5weQpAQCAtMSw2ICsxLDYgQEAKICMhIC91c3IvYmluL2VudiBweXRob24zCiAKLSIiIlJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzIiIiCisiIiJCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IChSRkMgMzU0OCksIEJhc2U4NSBhbmQgQXNjaWk4NSBkYXRhIGVuY29kaW5ncyIiIgogCiAjIE1vZGlmaWVkIDA0LU9jdC0xOTk1IGJ5IEphY2sgSmFuc2VuIHRvIHVzZSBiaW5hc2NpaSBtb2R1bGUKICMgTW9kaWZpZWQgMzAtRGVjLTIwMDMgYnkgQmFycnkgV2Fyc2F3IHRvIGFkZCBmdWxsIFJGQyAzNTQ4IHN1cHBvcnQKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgcmUKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGl0ZXJ0b29scwogCiAKIF9fYWxsX18gPSBbCkBAIC0xNyw2ICsxOCw4IEBACiAgICAgIyBHZW5lcmFsaXplZCBpbnRlcmZhY2UgZm9yIG90aGVyIGVuY29kaW5ncwogICAgICdiNjRlbmNvZGUnLCAnYjY0ZGVjb2RlJywgJ2IzMmVuY29kZScsICdiMzJkZWNvZGUnLAogICAgICdiMTZlbmNvZGUnLCAnYjE2ZGVjb2RlJywKKyAgICAjIEJhc2U4NSBhbmQgQXNjaWk4NSBlbmNvZGluZ3MKKyAgICAnYjg1ZW5jb2RlJywgJ2I4NWRlY29kZScsICdhODVlbmNvZGUnLCAnYTg1ZGVjb2RlJywKICAgICAjIFN0YW5kYXJkIEJhc2U2NCBlbmNvZGluZwogICAgICdzdGFuZGFyZF9iNjRlbmNvZGUnLCAnc3RhbmRhcmRfYjY0ZGVjb2RlJywKICAgICAjIFNvbWUgY29tbW9uIEJhc2U2NCBhbHRlcm5hdGl2ZXMuICBBcyByZWZlcmVuY2VkIGJ5IFJGQyAzNDU4LCBzZWUgdGhyZWFkCkBAIC0zNSwxMSArMzgsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBzLmVuY29kZSgnYXNjaWknKQogICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3RyaW5nIGFyZ3VtZW50IHNob3VsZCBjb250YWluIG9ubHkgQVNDSUkgY2hhcmFjdGVycycpCi0gICAgZWxpZiBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKKyAgICBpZiBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKICAgICAgICAgcmV0dXJuIHMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBieXRlcyBvciBBU0NJSSBzdHJpbmcsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKLQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcocykudG9ieXRlcygpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBieXRlcy1saWtlIG9iamVjdCBvciBBU0NJSSAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nLCBub3QgJXIiICUgcy5fX2NsYXNzX18uX19uYW1lX18pIGZyb20gTm9uZQogCiAKICMgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHVzZXMgYmluYXNjaWkKQEAgLTU0LDE0ICs1OSw5IEBACiAKICAgICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAjIFN0cmlwIG9mZiB0aGUgdHJhaWxpbmcgbmV3bGluZQogICAgIGVuY29kZWQgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KHMpWzotMV0KICAgICBpZiBhbHRjaGFycyBpcyBub3QgTm9uZToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYWx0Y2hhcnMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFsdGNoYXJzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgYXNzZXJ0IGxlbihhbHRjaGFycykgPT0gMiwgcmVwcihhbHRjaGFycykKICAgICAgICAgcmV0dXJuIGVuY29kZWQudHJhbnNsYXRlKGJ5dGVzLm1ha2V0cmFucyhiJysvJywgYWx0Y2hhcnMpKQogICAgIHJldHVybiBlbmNvZGVkCkBAIC0xMzgsMjEgKzEzOCwxMCBAQAogCiAKICMgQmFzZTMyIGVuY29kaW5nL2RlY29kaW5nIG11c3QgYmUgZG9uZSBpbiBQeXRob24KLV9iMzJhbHBoYWJldCA9IHsKLSAgICAwOiBiJ0EnLCAgOTogYidKJywgMTg6IGInUycsIDI3OiBiJzMnLAotICAgIDE6IGInQicsIDEwOiBiJ0snLCAxOTogYidUJywgMjg6IGInNCcsCi0gICAgMjogYidDJywgMTE6IGInTCcsIDIwOiBiJ1UnLCAyOTogYic1JywKLSAgICAzOiBiJ0QnLCAxMjogYidNJywgMjE6IGInVicsIDMwOiBiJzYnLAotICAgIDQ6IGInRScsIDEzOiBiJ04nLCAyMjogYidXJywgMzE6IGInNycsCi0gICAgNTogYidGJywgMTQ6IGInTycsIDIzOiBiJ1gnLAotICAgIDY6IGInRycsIDE1OiBiJ1AnLCAyNDogYidZJywKLSAgICA3OiBiJ0gnLCAxNjogYidRJywgMjU6IGInWicsCi0gICAgODogYidJJywgMTc6IGInUicsIDI2OiBiJzInLAotICAgIH0KLQotX2IzMnRhYiA9IFt2WzBdIGZvciBrLCB2IGluIHNvcnRlZChfYjMyYWxwaGFiZXQuaXRlbXMoKSldCi1fYjMycmV2ID0gZGljdChbKHZbMF0sIGspIGZvciBrLCB2IGluIF9iMzJhbHBoYWJldC5pdGVtcygpXSkKLQorX2IzMmFscGhhYmV0ID0gYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2NycKK19iMzJ0YWIgPSBbYnl0ZXMoW2ldKSBmb3IgaSBpbiBfYjMyYWxwaGFiZXRdCitfYjMydGFiMiA9IFthICsgYiBmb3IgYSBpbiBfYjMydGFiIGZvciBiIGluIF9iMzJ0YWJdCitfYjMycmV2ID0ge3Y6IGsgZm9yIGssIHYgaW4gZW51bWVyYXRlKF9iMzJhbHBoYWJldCl9CiAKIGRlZiBiMzJlbmNvZGUocyk6CiAgICAgIiIiRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQmFzZTMyLgpAQCAtMTYwLDMxICsxNDksMjEgQEAKICAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICBxdWFudGEsIGxlZnRvdmVyID0gZGl2bW9kKGxlbihzKSwgNSkKKyAgICAgICAgcyA9IG1lbW9yeXZpZXcocykudG9ieXRlcygpCisgICAgbGVmdG92ZXIgPSBsZW4ocykgJSA1CiAgICAgIyBQYWQgdGhlIGxhc3QgcXVhbnR1bSB3aXRoIHplcm8gYml0cyBpZiBuZWNlc3NhcnkKICAgICBpZiBsZWZ0b3ZlcjoKICAgICAgICAgcyA9IHMgKyBieXRlcyg1IC0gbGVmdG92ZXIpICAjIERvbid0IHVzZSArPSAhCi0gICAgICAgIHF1YW50YSArPSAxCiAgICAgZW5jb2RlZCA9IGJ5dGVhcnJheSgpCi0gICAgZm9yIGkgaW4gcmFuZ2UocXVhbnRhKToKLSAgICAgICAgIyBjMSBhbmQgYzIgYXJlIDE2IGJpdHMgd2lkZSwgYzMgaXMgOCBiaXRzIHdpZGUuICBUaGUgaW50ZW50IG9mIHRoaXMKLSAgICAgICAgIyBjb2RlIGlzIHRvIHByb2Nlc3MgdGhlIDQwIGJpdHMgaW4gdW5pdHMgb2YgNSBiaXRzLiAgU28gd2UgdGFrZSB0aGUgMQotICAgICAgICAjIGxlZnRvdmVyIGJpdCBvZiBjMSBhbmQgdGFjayBpdCBvbnRvIGMyLiAgVGhlbiB3ZSB0YWtlIHRoZSAyIGxlZnRvdmVyCi0gICAgICAgICMgYml0cyBvZiBjMiBhbmQgdGFjayB0aGVtIG9udG8gYzMuICBUaGUgc2hpZnRzIGFuZCBtYXNrcyBhcmUgaW50ZW5kZWQKLSAgICAgICAgIyB0byBnaXZlIHVzIHZhbHVlcyBvZiBleGFjdGx5IDUgYml0cyBpbiB3aWR0aC4KLSAgICAgICAgYzEsIGMyLCBjMyA9IHN0cnVjdC51bnBhY2soJyFISEInLCBzW2kqNTooaSsxKSo1XSkKLSAgICAgICAgYzIgKz0gKGMxICYgMSkgPDwgMTYgIyAxNyBiaXRzIHdpZGUKLSAgICAgICAgYzMgKz0gKGMyICYgMykgPDwgOCAgIyAxMCBiaXRzIHdpZGUKLSAgICAgICAgZW5jb2RlZCArPSBieXRlcyhbX2IzMnRhYltjMSA+PiAxMV0sICAgICAgICAgIyBiaXRzIDEgLSA1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMxID4+IDYpICYgMHgxZl0sICMgYml0cyA2IC0gMTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzEgPj4gMSkgJiAweDFmXSwgIyBiaXRzIDExIC0gMTUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMiA+PiAxMl0sICAgICAgICAgIyBiaXRzIDE2IC0gMjAgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiA3KSAmIDB4MWZdLCAjIGJpdHMgMjEgLSAyNSAoNiAtIDEwKQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiAyKSAmIDB4MWZdLCAjIGJpdHMgMjYgLSAzMCAoMTEgLSAxNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMyA+PiA1XSwgICAgICAgICAgIyBiaXRzIDMxIC0gMzUgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MzICYgMHgxZl0sICAgICAgICAjIGJpdHMgMzYgLSA0MCAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgZnJvbV9ieXRlcyA9IGludC5mcm9tX2J5dGVzCisgICAgYjMydGFiMiA9IF9iMzJ0YWIyCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCA1KToKKyAgICAgICAgYyA9IGZyb21fYnl0ZXMoc1tpOiBpICsgNV0sICdiaWcnKQorICAgICAgICBlbmNvZGVkICs9IChiMzJ0YWIyW2MgPj4gMzBdICsgICAgICAgICAgICMgYml0cyAxIC0gMTAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMlsoYyA+PiAyMCkgJiAweDNmZl0gKyAjIGJpdHMgMTEgLSAyMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyWyhjID4+IDEwKSAmIDB4M2ZmXSArICMgYml0cyAyMSAtIDMwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbYyAmIDB4M2ZmXSAgICAgICAgICAgIyBiaXRzIDMxIC0gNDAKKyAgICAgICAgICAgICAgICAgICApCiAgICAgIyBBZGp1c3QgZm9yIGFueSBsZWZ0b3ZlciBwYXJ0aWFsIHF1YW50YQogICAgIGlmIGxlZnRvdmVyID09IDE6CiAgICAgICAgIGVuY29kZWRbLTY6XSA9IGInPT09PT09JwpAQCAtMTk2LDcgKzE3NSw2IEBACiAgICAgICAgIGVuY29kZWRbLTE6XSA9IGInPScKICAgICByZXR1cm4gYnl0ZXMoZW5jb2RlZCkKIAotCiBkZWYgYjMyZGVjb2RlKHMsIGNhc2Vmb2xkPUZhbHNlLCBtYXAwMT1Ob25lKToKICAgICAiIiJEZWNvZGUgYSBCYXNlMzIgZW5jb2RlZCBieXRlIHN0cmluZy4KIApAQCAtMjE3LDggKzE5NSw3IEBACiAgICAgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dC4KICAgICAiIiIKICAgICBzID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEocykKLSAgICBxdWFudGEsIGxlZnRvdmVyID0gZGl2bW9kKGxlbihzKSwgOCkKLSAgICBpZiBsZWZ0b3ZlcjoKKyAgICBpZiBsZW4ocykgJSA4OgogICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignSW5jb3JyZWN0IHBhZGRpbmcnKQogICAgICMgSGFuZGxlIHNlY3Rpb24gMi40IHplcm8gYW5kIG9uZSBtYXBwaW5nLiAgVGhlIGZsYWcgbWFwMDEgd2lsbCBiZSBlaXRoZXIKICAgICAjIEZhbHNlLCBvciB0aGUgY2hhcmFjdGVyIHRvIG1hcCB0aGUgZGlnaXQgMSAob25lKSB0by4gIEl0IHNob3VsZCBiZQpAQCAtMjMyLDQyICsyMDksMzYgQEAKICAgICAjIFN0cmlwIG9mZiBwYWQgY2hhcmFjdGVycyBmcm9tIHRoZSByaWdodC4gIFdlIG5lZWQgdG8gY291bnQgdGhlIHBhZAogICAgICMgY2hhcmFjdGVycyBiZWNhdXNlIHRoaXMgd2lsbCB0ZWxsIHVzIGhvdyBtYW55IG51bGwgYnl0ZXMgdG8gcmVtb3ZlIGZyb20KICAgICAjIHRoZSBlbmQgb2YgdGhlIGRlY29kZWQgc3RyaW5nLgotICAgIHBhZGNoYXJzID0gMAotICAgIG1vID0gcmUuc2VhcmNoKGInKD9QPHBhZD5bPV0qKSQnLCBzKQotICAgIGlmIG1vOgotICAgICAgICBwYWRjaGFycyA9IGxlbihtby5ncm91cCgncGFkJykpCi0gICAgICAgIGlmIHBhZGNoYXJzID4gMDoKLSAgICAgICAgICAgIHMgPSBzWzotcGFkY2hhcnNdCisgICAgbCA9IGxlbihzKQorICAgIHMgPSBzLnJzdHJpcChiJz0nKQorICAgIHBhZGNoYXJzID0gbCAtIGxlbihzKQogICAgICMgTm93IGRlY29kZSB0aGUgZnVsbCBxdWFudGEKLSAgICBwYXJ0cyA9IFtdCi0gICAgYWNjID0gMAotICAgIHNoaWZ0ID0gMzUKLSAgICBmb3IgYyBpbiBzOgotICAgICAgICB2YWwgPSBfYjMycmV2LmdldChjKQotICAgICAgICBpZiB2YWwgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTMyIGRpZ2l0IGZvdW5kJykKLSAgICAgICAgYWNjICs9IF9iMzJyZXZbY10gPDwgc2hpZnQKLSAgICAgICAgc2hpZnQgLT0gNQotICAgICAgICBpZiBzaGlmdCA8IDA6Ci0gICAgICAgICAgICBwYXJ0cy5hcHBlbmQoYmluYXNjaWkudW5oZXhsaWZ5KGJ5dGVzKCclMDEweCcgJSBhY2MsICJhc2NpaSIpKSkKLSAgICAgICAgICAgIGFjYyA9IDAKLSAgICAgICAgICAgIHNoaWZ0ID0gMzUKKyAgICBkZWNvZGVkID0gYnl0ZWFycmF5KCkKKyAgICBiMzJyZXYgPSBfYjMycmV2CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCA4KToKKyAgICAgICAgcXVhbnRhID0gc1tpOiBpICsgOF0KKyAgICAgICAgYWNjID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgYyBpbiBxdWFudGE6CisgICAgICAgICAgICAgICAgYWNjID0gKGFjYyA8PCA1KSArIGIzMnJldltjXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UzMiBkaWdpdCBmb3VuZCcpIGZyb20gTm9uZQorICAgICAgICBkZWNvZGVkICs9IGFjYy50b19ieXRlcyg1LCAnYmlnJykKICAgICAjIFByb2Nlc3MgdGhlIGxhc3QsIHBhcnRpYWwgcXVhbnRhCi0gICAgbGFzdCA9IGJpbmFzY2lpLnVuaGV4bGlmeShieXRlcygnJTAxMHgnICUgYWNjLCAiYXNjaWkiKSkKLSAgICBpZiBwYWRjaGFycyA9PSAwOgotICAgICAgICBsYXN0ID0gYicnICAgICAgICAgICAgICAgICAgICAgICMgTm8gY2hhcmFjdGVycwotICAgIGVsaWYgcGFkY2hhcnMgPT0gMToKLSAgICAgICAgbGFzdCA9IGxhc3RbOi0xXQotICAgIGVsaWYgcGFkY2hhcnMgPT0gMzoKLSAgICAgICAgbGFzdCA9IGxhc3RbOi0yXQotICAgIGVsaWYgcGFkY2hhcnMgPT0gNDoKLSAgICAgICAgbGFzdCA9IGxhc3RbOi0zXQotICAgIGVsaWYgcGFkY2hhcnMgPT0gNjoKLSAgICAgICAgbGFzdCA9IGxhc3RbOi00XQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCi0gICAgcGFydHMuYXBwZW5kKGxhc3QpCi0gICAgcmV0dXJuIGInJy5qb2luKHBhcnRzKQorICAgIGlmIHBhZGNoYXJzOgorICAgICAgICBhY2MgPDw9IDUgKiBwYWRjaGFycworICAgICAgICBsYXN0ID0gYWNjLnRvX2J5dGVzKDUsICdiaWcnKQorICAgICAgICBpZiBwYWRjaGFycyA9PSAxOgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTFdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gMzoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0yXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDQ6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotM10KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSA2OgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignSW5jb3JyZWN0IHBhZGRpbmcnKQorICAgIHJldHVybiBieXRlcyhkZWNvZGVkKQogCiAKIApAQCAtMjc5LDggKzI1MCw2IEBACiAKICAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICByZXR1cm4gYmluYXNjaWkuaGV4bGlmeShzKS51cHBlcigpCiAKIApAQCAtMzAyLDcgKzI3MSwxOTMgQEAKICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMTYgZGlnaXQgZm91bmQnKQogICAgIHJldHVybiBiaW5hc2NpaS51bmhleGxpZnkocykKIAorIworIyBBc2NpaTg1IGVuY29kaW5nL2RlY29kaW5nCisjCiAKK2RlZiBfODVlbmNvZGUoYiwgY2hhcnMsIGNoYXJzMiwgcGFkPUZhbHNlLCBmb2xkbnVscz1GYWxzZSwgZm9sZHNwYWNlcz1GYWxzZSk6CisgICAgIyBIZWxwZXIgZnVuY3Rpb24gZm9yIGE4NWVuY29kZSBhbmQgYjg1ZW5jb2RlCisgICAgaWYgbm90IGlzaW5zdGFuY2UoYiwgYnl0ZXNfdHlwZXMpOgorICAgICAgICBiID0gbWVtb3J5dmlldyhiKS50b2J5dGVzKCkKKworICAgIHBhZGRpbmcgPSAoLWxlbihiKSkgJSA0CisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgYiA9IGIgKyBiJ1wwJyAqIHBhZGRpbmcKKyAgICB3b3JkcyA9IHN0cnVjdC5TdHJ1Y3QoJyElZEknICUgKGxlbihiKSAvLyA0KSkudW5wYWNrKGIpCisKKyAgICBhODVjaGFyczIgPSBfYTg1Y2hhcnMyCisgICAgYTg1Y2hhcnMgPSBfYTg1Y2hhcnMKKyAgICBjaHVua3MgPSBbYid6JyBpZiBmb2xkbnVscyBhbmQgbm90IHdvcmQgZWxzZQorICAgICAgICAgICAgICBiJ3knIGlmIGZvbGRzcGFjZXMgYW5kIHdvcmQgPT0gMHgyMDIwMjAyMCBlbHNlCisgICAgICAgICAgICAgIChjaGFyczJbd29yZCAvLyA2MTQxMjVdICsKKyAgICAgICAgICAgICAgIGNoYXJzMlt3b3JkIC8vIDg1ICUgNzIyNV0gKworICAgICAgICAgICAgICAgY2hhcnNbd29yZCAlIDg1XSkKKyAgICAgICAgICAgICAgZm9yIHdvcmQgaW4gd29yZHNdCisKKyAgICBpZiBwYWRkaW5nIGFuZCBub3QgcGFkOgorICAgICAgICBpZiBjaHVua3NbLTFdID09IGIneic6CisgICAgICAgICAgICBjaHVua3NbLTFdID0gY2hhcnNbMF0gKiA1CisgICAgICAgIGNodW5rc1stMV0gPSBjaHVua3NbLTFdWzotcGFkZGluZ10KKworICAgIHJldHVybiBiJycuam9pbihjaHVua3MpCisKK19BODVTVEFSVCA9IGIiPH4iCitfQTg1RU5EID0gYiJ+PiIKK19hODVjaGFycyA9IFtieXRlcyhbaV0pIGZvciBpIGluIHJhbmdlKDMzLCAxMTgpXQorX2E4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9hODVjaGFycyBmb3IgYiBpbiBfYTg1Y2hhcnNdCisKK2RlZiBhODVlbmNvZGUoYiwgKiwgZm9sZHNwYWNlcz1GYWxzZSwgd3JhcGNvbD0wLCBwYWQ9RmFsc2UsIGFkb2JlPUZhbHNlKToKKyAgICAiIiJFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBBc2NpaTg1LgorCisgICAgYiBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KKworICAgIGZvbGRzcGFjZXMgaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IHVzZXMgdGhlIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2UgJ3knCisgICAgaW5zdGVhZCBvZiA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkgYXMgc3VwcG9ydGVkIGJ5ICdidG9hJy4gVGhpcworICAgIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBZG9iZSBlbmNvZGluZy4KKworICAgIHdyYXBjb2wgY29udHJvbHMgd2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBoYXZlIG5ld2xpbmUgKCdcbicpIGNoYXJhY3RlcnMKKyAgICBhZGRlZCB0byBpdC4gSWYgdGhpcyBpcyBub24temVybywgZWFjaCBvdXRwdXQgbGluZSB3aWxsIGJlIGF0IG1vc3QgdGhpcworICAgIG1hbnkgY2hhcmFjdGVycyBsb25nLgorCisgICAgcGFkIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHN0cmluZyBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA0IGJlZm9yZQorICAgIGVuY29kaW5nLiBOb3RlIHRoYXQgdGhlIGJ0b2EgaW1wbGVtZW50YXRpb24gYWx3YXlzIHBhZHMuCisKKyAgICBhZG9iZSBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggPH4gYW5kIH4+LAorICAgIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFkb2JlIGltcGxlbWVudGF0aW9uLgorICAgICIiIgorICAgIHJlc3VsdCA9IF84NWVuY29kZShiLCBfYTg1Y2hhcnMsIF9hODVjaGFyczIsIHBhZCwgVHJ1ZSwgZm9sZHNwYWNlcykKKworICAgIGlmIGFkb2JlOgorICAgICAgICByZXN1bHQgPSBfQTg1U1RBUlQgKyByZXN1bHQKKyAgICBpZiB3cmFwY29sOgorICAgICAgICB3cmFwY29sID0gbWF4KDIgaWYgYWRvYmUgZWxzZSAxLCB3cmFwY29sKQorICAgICAgICBjaHVua3MgPSBbcmVzdWx0W2k6IGkgKyB3cmFwY29sXQorICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHJlc3VsdCksIHdyYXBjb2wpXQorICAgICAgICBpZiBhZG9iZToKKyAgICAgICAgICAgIGlmIGxlbihjaHVua3NbLTFdKSArIDIgPiB3cmFwY29sOgorICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoYicnKQorICAgICAgICByZXN1bHQgPSBiJ1xuJy5qb2luKGNodW5rcykKKyAgICBpZiBhZG9iZToKKyAgICAgICAgcmVzdWx0ICs9IF9BODVFTkQKKworICAgIHJldHVybiByZXN1bHQKKworZGVmIGE4NWRlY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YicgXHRcblxyXHYnKToKKyAgICAiIiJEZWNvZGUgYW4gQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc3RyaW5nLgorCisgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLgorCisgICAgZm9sZHNwYWNlcyBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlIHNob3VsZCBiZQorICAgIGFjY2VwdGVkIGFzIHNob3J0aGFuZCBmb3IgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApLiBUaGlzIGZlYXR1cmUgaXMKKyAgICBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFkb2JlIGVuY29kaW5nLgorCisgICAgYWRvYmUgY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgaW4gQWRvYmUgQXNjaWk4NSBmb3JtYXQgKGkuZS4KKyAgICBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4pLgorCisgICAgaWdub3JlY2hhcnMgc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGlnbm9yZSBmcm9tIHRoZQorICAgIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkgZGVmYXVsdAorICAgIGNvbnRhaW5zIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gQVNDSUkuCisgICAgIiIiCisgICAgYiA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKGIpCisgICAgaWYgYWRvYmU6CisgICAgICAgIGlmIG5vdCAoYi5zdGFydHN3aXRoKF9BODVTVEFSVCkgYW5kIGIuZW5kc3dpdGgoX0E4NUVORCkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2VzIG11c3QgYmUgYnJhY2tldGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IHt9IGFuZCB7fSIuZm9ybWF0KF9BODVTVEFSVCwgX0E4NUVORCkpCisgICAgICAgIGIgPSBiWzI6LTJdICMgU3RyaXAgb2ZmIHN0YXJ0L2VuZCBtYXJrZXJzCisgICAgIworICAgICMgV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoaXMgc3RlcHdpc2UsIHNvIGFzIHRvIGlnbm9yZSBzcGFjZXMgYW5kIGhhbmRsZQorICAgICMgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZXMKKyAgICAjCisgICAgcGFja0kgPSBzdHJ1Y3QuU3RydWN0KCchSScpLnBhY2sKKyAgICBkZWNvZGVkID0gW10KKyAgICBkZWNvZGVkX2FwcGVuZCA9IGRlY29kZWQuYXBwZW5kCisgICAgY3VyciA9IFtdCisgICAgY3Vycl9hcHBlbmQgPSBjdXJyLmFwcGVuZAorICAgIGN1cnJfY2xlYXIgPSBjdXJyLmNsZWFyCisgICAgZm9yIHggaW4gYiArIGIndScgKiA0OgorICAgICAgICBpZiBiJyEnWzBdIDw9IHggPD0gYid1J1swXToKKyAgICAgICAgICAgIGN1cnJfYXBwZW5kKHgpCisgICAgICAgICAgICBpZiBsZW4oY3VycikgPT0gNToKKyAgICAgICAgICAgICAgICBhY2MgPSAwCisgICAgICAgICAgICAgICAgZm9yIHggaW4gY3VycjoKKyAgICAgICAgICAgICAgICAgICAgYWNjID0gODUgKiBhY2MgKyAoeCAtIDMzKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBc2NpaTg1IG92ZXJmbG93JykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgY3Vycl9jbGVhcigpCisgICAgICAgIGVsaWYgeCA9PSBiJ3onWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd6IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidcMFwwXDBcMCcpCisgICAgICAgIGVsaWYgZm9sZHNwYWNlcyBhbmQgeCA9PSBiJ3knWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidceDIwXHgyMFx4MjBceDIwJykKKyAgICAgICAgZWxpZiB4IGluIGlnbm9yZWNoYXJzOgorICAgICAgICAgICAgIyBTa2lwIHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb24tQXNjaWk4NSBkaWdpdCBmb3VuZDogJWMnICUgeCkKKworICAgIHJlc3VsdCA9IGInJy5qb2luKGRlY29kZWQpCisgICAgcGFkZGluZyA9IDQgLSBsZW4oY3VycikKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICAjIFRocm93IGF3YXkgdGhlIGV4dHJhIHBhZGRpbmcKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CisKKyMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG9yaWdpbmFsbHkgdGFrZW4gKHdpdGggcGVybWlzc2lvbikgZnJvbSBNZXJjdXJpYWwKKworX2I4NWNoYXJzID0gYiIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIFwKKyAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXohIyQlJigpKistOzw9Pj9AXl9ge3x9fiIKK19iODVjaGFycyA9IFtieXRlcyhbaV0pIGZvciBpIGluIF9iODVjaGFyc10KK19iODVjaGFyczIgPSBbKGEgKyBiKSBmb3IgYSBpbiBfYjg1Y2hhcnMgZm9yIGIgaW4gX2I4NWNoYXJzXQorX2I4NWRlYyA9IE5vbmUKKworZGVmIGI4NWVuY29kZShiLCBwYWQ9RmFsc2UpOgorICAgICIiIkVuY29kZSBhbiBBU0NJSS1lbmNvZGVkIGJ5dGUgYXJyYXkgaW4gYmFzZTg1IGZvcm1hdC4KKworICAgIElmIHBhZCBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggIlwwIiBzbyBpdHMgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YKKyAgICA0IGNoYXJhY3RlcnMgYmVmb3JlIGVuY29kaW5nLgorICAgICIiIgorICAgIHJldHVybiBfODVlbmNvZGUoYiwgX2I4NWNoYXJzLCBfYjg1Y2hhcnMyLCBwYWQpCisKK2RlZiBiODVkZWNvZGUoYik6CisgICAgIiIiRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgYXJyYXkiIiIKKyAgICBiID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEoYikKKyAgICBnbG9iYWwgX2I4NWRlYworICAgIGlmIF9iODVkZWMgaXMgTm9uZToKKyAgICAgICAgX2I4NWRlYyA9IFtOb25lXSAqIDI1NgorICAgICAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUoX2I4NWNoYXJzKToKKyAgICAgICAgICAgIF9iODVkZWNbY1swXV0gPSBpCisKKyAgICBwYWRkaW5nID0gKC1sZW4oYikpICUgNQorICAgIGIgPSBiICsgYid+JyAqIHBhZGRpbmcKKyAgICBvdXQgPSBbXQorICAgIHBhY2tJID0gc3RydWN0LlN0cnVjdCgnIUknKS5wYWNrCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGIpLCA1KToKKyAgICAgICAgY2h1bmsgPSBiW2k6aSArIDVdCisgICAgICAgIGFjYyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGMgaW4gY2h1bms6CisgICAgICAgICAgICAgICAgYWNjID0gYWNjICogODUgKyBfYjg1ZGVjW2NdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBmb3IgaiwgYyBpbiBlbnVtZXJhdGUoY2h1bmspOgorICAgICAgICAgICAgICAgIGlmIF9iODVkZWNbY10gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYmFkIGJhc2U4NSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gJWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChpICsgaikpIGZyb20gTm9uZQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0LmFwcGVuZChwYWNrSShhY2MpKQorICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYmFzZTg1IG92ZXJmbG93IGluIGh1bmsgc3RhcnRpbmcgYXQgYnl0ZSAlZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpKSBmcm9tIE5vbmUKKworICAgIHJlc3VsdCA9IGInJy5qb2luKG91dCkKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICByZXN1bHQgPSByZXN1bHRbOi1wYWRkaW5nXQorICAgIHJldHVybiByZXN1bHQKIAogIyBMZWdhY3kgaW50ZXJmYWNlLiAgVGhpcyBjb2RlIGNvdWxkIGJlIGNsZWFuZWQgdXAgc2luY2UgSSBkb24ndCBiZWxpZXZlCiAjIGJpbmFzY2lpIGhhcyBhbnkgbGluZSBsZW5ndGggbGltaXRhdGlvbnMuICBJdCBqdXN0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBpdApAQCAtMzM1LDEyICs0OTAsMjYgQEAKICAgICAgICAgcyA9IGJpbmFzY2lpLmEyYl9iYXNlNjQobGluZSkKICAgICAgICAgb3V0cHV0LndyaXRlKHMpCiAKK2RlZiBfaW5wdXRfdHlwZV9jaGVjayhzKToKKyAgICB0cnk6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KHMpCisgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6CisgICAgICAgIG1zZyA9ICJleHBlY3RlZCBieXRlcy1saWtlIG9iamVjdCwgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpIGZyb20gZXJyCisgICAgaWYgbS5mb3JtYXQgbm90IGluICgnYycsICdiJywgJ0InKToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCBzaW5nbGUgYnl0ZSBlbGVtZW50cywgbm90ICVyIGZyb20gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtLmZvcm1hdCwgcy5fX2NsYXNzX18uX19uYW1lX18pKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIGlmIG0ubmRpbSAhPSAxOgorICAgICAgICBtc2cgPSAoImV4cGVjdGVkIDEtRCBkYXRhLCBub3QgJWQtRCBkYXRhIGZyb20gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtLm5kaW0sIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKwogCiBkZWYgZW5jb2RlYnl0ZXMocyk6CiAgICAgIiIiRW5jb2RlIGEgYnl0ZXN0cmluZyBpbnRvIGEgYnl0ZXN0cmluZyBjb250YWluaW5nIG11bHRpcGxlIGxpbmVzCiAgICAgb2YgYmFzZS02NCBkYXRhLiIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQorICAgIF9pbnB1dF90eXBlX2NoZWNrKHMpCiAgICAgcGllY2VzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIE1BWEJJTlNJWkUpOgogICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBNQVhCSU5TSVpFXQpAQCAtMzU3LDggKzUyNiw3IEBACiAKIGRlZiBkZWNvZGVieXRlcyhzKToKICAgICAiIiJEZWNvZGUgYSBieXRlc3RyaW5nIG9mIGJhc2UtNjQgZGF0YSBpbnRvIGEgYnl0ZXN0cmluZy4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHJldHVybiBiaW5hc2NpaS5hMmJfYmFzZTY0KHMpCiAKIGRlZiBkZWNvZGVzdHJpbmcocyk6CmRpZmYgLS1naXQgYS9MaWIvYmRiLnB5IGIvTGliL2JkYi5weQppbmRleCBkZDFmNDI4Li42N2EwODQ2IDEwMDY0NAotLS0gYS9MaWIvYmRiLnB5CisrKyBiL0xpYi9iZGIucHkKQEAgLTMsNiArMyw3IEBACiBpbXBvcnQgZm5tYXRjaAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCitmcm9tIGluc3BlY3QgaW1wb3J0IENPX0dFTkVSQVRPUgogCiBfX2FsbF9fID0gWyJCZGJRdWl0IiwgIkJkYiIsICJCcmVha3BvaW50Il0KIApAQCAtNzUsMjQgKzc2LDQ4IEBACiAgICAgICAgIGlmIG5vdCAoc2VsZi5zdG9wX2hlcmUoZnJhbWUpIG9yIHNlbGYuYnJlYWtfYW55d2hlcmUoZnJhbWUpKToKICAgICAgICAgICAgICMgTm8gbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uCiAgICAgICAgICAgICByZXR1cm4gIyBOb25lCisgICAgICAgICMgSWdub3JlIGNhbGwgZXZlbnRzIGluIGdlbmVyYXRvciBleGNlcHQgd2hlbiBzdGVwcGluZy4KKyAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAgICAgICAgIHNlbGYudXNlcl9jYWxsKGZyYW1lLCBhcmcpCiAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgIGRlZiBkaXNwYXRjaF9yZXR1cm4oc2VsZiwgZnJhbWUsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYuc3RvcF9oZXJlKGZyYW1lKSBvciBmcmFtZSA9PSBzZWxmLnJldHVybmZyYW1lOgorICAgICAgICAgICAgIyBJZ25vcmUgcmV0dXJuIGV2ZW50cyBpbiBnZW5lcmF0b3IgZXhjZXB0IHdoZW4gc3RlcHBpbmcuCisgICAgICAgICAgICBpZiBzZWxmLnN0b3BmcmFtZSBhbmQgZnJhbWUuZl9jb2RlLmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcmFtZV9yZXR1cm5pbmcgPSBmcmFtZQogICAgICAgICAgICAgICAgIHNlbGYudXNlcl9yZXR1cm4oZnJhbWUsIGFyZykKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcmFtZV9yZXR1cm5pbmcgPSBOb25lCiAgICAgICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CisgICAgICAgICAgICAjIFRoZSB1c2VyIGlzc3VlZCBhICduZXh0JyBvciAndW50aWwnIGNvbW1hbmQuCisgICAgICAgICAgICBpZiBzZWxmLnN0b3BmcmFtZSBpcyBmcmFtZSBhbmQgc2VsZi5zdG9wbGluZW5vICE9IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhOb25lLCBOb25lKQogICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogCiAgICAgZGVmIGRpc3BhdGNoX2V4Y2VwdGlvbihzZWxmLCBmcmFtZSwgYXJnKToKICAgICAgICAgaWYgc2VsZi5zdG9wX2hlcmUoZnJhbWUpOgorICAgICAgICAgICAgIyBXaGVuIHN0ZXBwaW5nIHdpdGggbmV4dC91bnRpbC9yZXR1cm4gaW4gYSBnZW5lcmF0b3IgZnJhbWUsIHNraXAKKyAgICAgICAgICAgICMgdGhlIGludGVybmFsIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uICh3aXRoIG5vIHRyYWNlYmFjaykKKyAgICAgICAgICAgICMgdHJpZ2dlcmVkIGJ5IGEgc3ViaXRlcmF0b3IgcnVuIHdpdGggdGhlICd5aWVsZCBmcm9tJyBzdGF0ZW1lbnQuCisgICAgICAgICAgICBpZiBub3QgKGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUgorICAgICAgICAgICAgICAgICAgICBhbmQgYXJnWzBdIGlzIFN0b3BJdGVyYXRpb24gYW5kIGFyZ1syXSBpcyBOb25lKToKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXJfZXhjZXB0aW9uKGZyYW1lLCBhcmcpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5xdWl0dGluZzogcmFpc2UgQmRiUXVpdAorICAgICAgICAjIFN0b3AgYXQgdGhlIFN0b3BJdGVyYXRpb24gb3IgR2VuZXJhdG9yRXhpdCBleGNlcHRpb24gd2hlbiB0aGUgdXNlcgorICAgICAgICAjIGhhcyBzZXQgc3RvcGZyYW1lIGluIGEgZ2VuZXJhdG9yIGJ5IGlzc3VpbmcgYSByZXR1cm4gY29tbWFuZCwgb3IgYQorICAgICAgICAjIG5leHQvdW50aWwgY29tbWFuZCBhdCB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gdGhlIGdlbmVyYXRvciBiZWZvcmUgdGhlCisgICAgICAgICMgZXhjZXB0aW9uLgorICAgICAgICBlbGlmIChzZWxmLnN0b3BmcmFtZSBhbmQgZnJhbWUgaXMgbm90IHNlbGYuc3RvcGZyYW1lCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc3RvcGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUgorICAgICAgICAgICAgICAgIGFuZCBhcmdbMF0gaW4gKFN0b3BJdGVyYXRpb24sIEdlbmVyYXRvckV4aXQpKToKICAgICAgICAgICAgIHNlbGYudXNlcl9leGNlcHRpb24oZnJhbWUsIGFyZykKICAgICAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKKwogICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogCiAgICAgIyBOb3JtYWxseSBkZXJpdmVkIGNsYXNzZXMgZG9uJ3Qgb3ZlcnJpZGUgdGhlIGZvbGxvd2luZwpAQCAtMTE1LDEwICsxNDAsOCBAQAogICAgICAgICAgICAgaWYgc2VsZi5zdG9wbGluZW5vID09IC0xOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmZfbGluZW5vID49IHNlbGYuc3RvcGxpbmVubwotICAgICAgICB3aGlsZSBmcmFtZSBpcyBub3QgTm9uZSBhbmQgZnJhbWUgaXMgbm90IHNlbGYuc3RvcGZyYW1lOgotICAgICAgICAgICAgaWYgZnJhbWUgaXMgc2VsZi5ib3RmcmFtZToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgaWYgbm90IHNlbGYuc3RvcGZyYW1lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgYnJlYWtfaGVyZShzZWxmLCBmcmFtZSk6CkBAIC0yMDcsNyArMjMwLDEwIEBACiAKICAgICBkZWYgc2V0X3JldHVybihzZWxmLCBmcmFtZSk6CiAgICAgICAgICIiIlN0b3Agd2hlbiByZXR1cm5pbmcgZnJvbSB0aGUgZ2l2ZW4gZnJhbWUuIiIiCi0gICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhmcmFtZS5mX2JhY2ssIGZyYW1lKQorICAgICAgICBpZiBmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1I6CisgICAgICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUsIE5vbmUsIC0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLmZfYmFjaywgZnJhbWUpCiAKICAgICBkZWYgc2V0X3RyYWNlKHNlbGYsIGZyYW1lPU5vbmUpOgogICAgICAgICAiIiJTdGFydCBkZWJ1Z2dpbmcgZnJvbSBgZnJhbWVgLgpkaWZmIC0tZ2l0IGEvTGliL2J6Mi5weSBiL0xpYi9iejIucHkKaW5kZXggYzMwNzUwNy4uNmJjNjExZSAxMDA2NDQKLS0tIGEvTGliL2J6Mi5weQorKysgYi9MaWIvYnoyLnB5CkBAIC05LDcgKzksNiBAQAogCiBfX2F1dGhvcl9fID0gIk5hZGVlbSBWYXdkYSA8bmFkZWVtLnZhd2RhQGdtYWlsLmNvbT4iCiAKLWltcG9ydCBidWlsdGlucwogaW1wb3J0IGlvCiBpbXBvcnQgd2FybmluZ3MKIApAQCAtMjgsNiArMjcsOCBAQAogCiBfQlVGRkVSX1NJWkUgPSA4MTkyCiAKK19idWlsdGluX29wZW4gPSBvcGVuCisKIAogY2xhc3MgQloyRmlsZShpby5CdWZmZXJlZElPQmFzZSk6CiAKQEAgLTQzLDE2ICs0NCwxNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpOgogICAgICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlLgogCi0gICAgICAgIElmIGZpbGVuYW1lIGlzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCwgaXMgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8KLSAgICAgICAgYmUgb3BlbmVkLiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGZpbGUgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KLSAgICAgICAgcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGl0IGdpdmVzIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSBmaWxlIHRvIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAotICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsIG9yICdhJyBmb3IKLSAgICAgICAgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsIGFuZCAnYWInLgorICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICd4JyBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICdhJyBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsICd4YicsIGFuZCAnYWInLgogCiAgICAgICAgIGJ1ZmZlcmluZyBpcyBpZ25vcmVkLiBJdHMgdXNlIGlzIGRlcHJlY2F0ZWQuCiAKLSAgICAgICAgSWYgbW9kZSBpcyAndycgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKKyAgICAgICAgSWYgbW9kZSBpcyAndycsICd4JyBvciAnYScsIGNvbXByZXNzbGV2ZWwgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMQogICAgICAgICBhbmQgOSBzcGVjaWZ5aW5nIHRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbjogMSBwcm9kdWNlcyB0aGUgbGVhc3QKICAgICAgICAgY29tcHJlc3Npb24sIGFuZCA5IChkZWZhdWx0KSBwcm9kdWNlcyB0aGUgbW9zdCBjb21wcmVzc2lvbi4KIApAQCAtODUsMTUgKzg3LDE5IEBACiAgICAgICAgICAgICBtb2RlID0gIndiIgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCisgICAgICAgIGVsaWYgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIG1vZGUgPSAieGIiCisgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxpZiBtb2RlIGluICgiYSIsICJhYiIpOgogICAgICAgICAgICAgbW9kZSA9ICJhYiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiB7IXJ9Ii5mb3JtYXQobW9kZSkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6ICVyIiAlIChtb2RlLCkpCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgKHN0ciwgYnl0ZXMpKToKLSAgICAgICAgICAgIHNlbGYuX2ZwID0gYnVpbHRpbnMub3BlbihmaWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuX2ZwID0gX2J1aWx0aW5fb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZnAgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9tb2RlID0gbW9kZV9jb2RlCiAgICAgICAgIGVsaWYgaGFzYXR0cihmaWxlbmFtZSwgInJlYWQiKSBvciBoYXNhdHRyKGZpbGVuYW1lLCAid3JpdGUiKToKQEAgLTE4OSwxNSArMTk1LDE3IEBACiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICAgICAjIEVuZC1vZi1zdHJlYW0gbWFya2VyIGFuZCBlbmQgb2YgZmlsZS4gV2UncmUgZ29vZC4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBQcm9ibGVtIC0gd2Ugd2VyZSBleHBlY3RpbmcgbW9yZSBjb21wcmVzc2VkIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCiAKLSAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKIAogICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MocmF3YmxvY2spCkBAIC00MTIsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9hbGwocmV0dXJuX2RhdGE9RmFsc2UpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5fc2l6ZSArIG9mZnNldAogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciB3aGVuY2U6IHt9Ii5mb3JtYXQod2hlbmNlKSkKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciB3aGVuY2U6ICVzIiAlICh3aGVuY2UsKSkKIAogICAgICAgICAgICAgIyBNYWtlIGl0IHNvIHRoYXQgb2Zmc2V0IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCBmb3J3YXJkLgogICAgICAgICAgICAgaWYgb2Zmc2V0IDwgc2VsZi5fcG9zOgpAQCAtNDM2LDIwICs0NDQsMjAgQEAKICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgogICAgICIiIk9wZW4gYSBiemlwMi1jb21wcmVzc2VkIGZpbGUgaW4gYmluYXJ5IG9yIHRleHQgbW9kZS4KIAotICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgotICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KKyAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMKKyAgICBvYmplY3QpLCBvciBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJhIiBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwKLSAgICBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlCi0gICAgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCisgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAieCIsICJ4YiIsICJhIiBvcgorICAgICJhYiIgZm9yIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiLCAieHQiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4KKyAgICBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCiAKLSAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgQloyRmlsZSBjb25zdHJ1Y3RvcjoKLSAgICBCWjJGaWxlKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2xldmVsKS4gSW4gdGhpcyBjYXNlLCB0aGUgZW5jb2RpbmcsIGVycm9ycwotICAgIGFuZCBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KKyAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgQloyRmlsZQorICAgIGNvbnN0cnVjdG9yOiBCWjJGaWxlKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2xldmVsKS4gSW4gdGhpcyBjYXNlLAorICAgIHRoZSBlbmNvZGluZywgZXJyb3JzIGFuZCBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KIAogICAgIEZvciB0ZXh0IG1vZGUsIGEgQloyRmlsZSBvYmplY3QgaXMgY3JlYXRlZCwgYW5kIHdyYXBwZWQgaW4gYW4KLSAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IgaGFuZGxpbmcKLSAgICBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgorICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgorICAgIGhhbmRsaW5nIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCiAKICAgICAiIiIKICAgICBpZiAidCIgaW4gbW9kZToKZGlmZiAtLWdpdCBhL0xpYi9jUHJvZmlsZS5weSBiL0xpYi9jUHJvZmlsZS5weQppbmRleCBjMjRkNDViLi4xMTg0Mzg1IDEwMDc1NQotLS0gYS9MaWIvY1Byb2ZpbGUucHkKKysrIGIvTGliL2NQcm9maWxlLnB5CkBAIC03LDU0ICs3LDIwIEBACiBfX2FsbF9fID0gWyJydW4iLCAicnVuY3R4IiwgIlByb2ZpbGUiXQogCiBpbXBvcnQgX2xzcHJvZgoraW1wb3J0IHByb2ZpbGUgYXMgX3B5cHJvZmlsZQogCiAjIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogIyBTaW1wbGUgaW50ZXJmYWNlCiAKIGRlZiBydW4oc3RhdGVtZW50LCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKLSAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyIG9wdGlvbmFsbHkgc2F2aW5nIHJlc3VsdHMgaW4gZmlsZW5hbWUKLQotICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZQotICAgICJleGVjIiBzdGF0ZW1lbnQsIGFuZCBhbiBvcHRpb25hbCBmaWxlIG5hbWUuICBJbiBhbGwgY2FzZXMgdGhpcwotICAgIHJvdXRpbmUgYXR0ZW1wdHMgdG8gImV4ZWMiIGl0cyBmaXJzdCBhcmd1bWVudCBhbmQgZ2F0aGVyIHByb2ZpbGluZwotICAgIHN0YXRpc3RpY3MgZnJvbSB0aGUgZXhlY3V0aW9uLiBJZiBubyBmaWxlIG5hbWUgaXMgcHJlc2VudCwgdGhlbiB0aGlzCi0gICAgZnVuY3Rpb24gYXV0b21hdGljYWxseSBwcmludHMgYSBzaW1wbGUgcHJvZmlsaW5nIHJlcG9ydCwgc29ydGVkIGJ5IHRoZQotICAgIHN0YW5kYXJkIG5hbWUgc3RyaW5nIChmaWxlL2xpbmUvZnVuY3Rpb24tbmFtZSkgdGhhdCBpcyBwcmVzZW50ZWQgaW4KLSAgICBlYWNoIGxpbmUuCi0gICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHJlc3VsdCA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHByb2YgPSBwcm9mLnJ1bihzdGF0ZW1lbnQpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQotICAgIHJldHVybiByZXN1bHQKKyAgICByZXR1cm4gX3B5cHJvZmlsZS5fVXRpbHMoUHJvZmlsZSkucnVuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvcnQpCiAKIGRlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUsIHNvcnQ9LTEpOgotICAgICIiIlJ1biBzdGF0ZW1lbnQgdW5kZXIgcHJvZmlsZXIsIHN1cHBseWluZyB5b3VyIG93biBnbG9iYWxzIGFuZCBsb2NhbHMsCi0gICAgb3B0aW9uYWxseSBzYXZpbmcgcmVzdWx0cyBpbiBmaWxlbmFtZS4KKyAgICByZXR1cm4gX3B5cHJvZmlsZS5fVXRpbHMoUHJvZmlsZSkucnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIHNvcnQpCiAKLSAgICBzdGF0ZW1lbnQgYW5kIGZpbGVuYW1lIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHByb2ZpbGUucnVuCi0gICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHJlc3VsdCA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHByb2YgPSBwcm9mLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscykKLSAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgICAgICBwYXNzCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXN1bHQgPSBwcm9mLnByaW50X3N0YXRzKHNvcnQpCi0gICAgcmV0dXJuIHJlc3VsdAorcnVuLl9fZG9jX18gPSBfcHlwcm9maWxlLnJ1bi5fX2RvY19fCitydW5jdHguX19kb2NfXyA9IF9weXByb2ZpbGUucnVuY3R4Ll9fZG9jX18KIAogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIApAQCAtNzcsMTAgKzQzLDkgQEAKIAogICAgIGRlZiBkdW1wX3N0YXRzKHNlbGYsIGZpbGUpOgogICAgICAgICBpbXBvcnQgbWFyc2hhbAotICAgICAgICBmID0gb3BlbihmaWxlLCAnd2InKQotICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCi0gICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLnN0YXRzLCBmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKIAogICAgIGRlZiBjcmVhdGVfc3RhdHMoc2VsZik6CiAgICAgICAgIHNlbGYuZGlzYWJsZSgpCmRpZmYgLS1naXQgYS9MaWIvY2dpLnB5IGIvTGliL2NnaS5weQppbmRleCAwNmUwM2I1Li4xZDgwNDBjIDEwMDc1NQotLS0gYS9MaWIvY2dpLnB5CisrKyBiL0xpYi9jZ2kucHkKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBpZiBsb2dmaWxlIGFuZCBub3QgbG9nZnA6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxvZ2ZwID0gb3Blbihsb2dmaWxlLCAiYSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICBpZiBub3QgbG9nZnA6CiAgICAgICAgIGxvZyA9IG5vbG9nCkBAIC01NTIsNiArNTUyLDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnJlYWRfc2luZ2xlKCkKIAorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbi4iIiIKICAgICAgICAgcmV0dXJuICJGaWVsZFN0b3JhZ2UoJXIsICVyLCAlcikiICUgKApAQCAtNjcwLDcgKzY3Niw2IEBACiAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZywgZXJyb3JzPXNlbGYuZXJyb3JzKQogICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcXVlcnk6CiAgICAgICAgICAgICAgICAgc2VsZi5saXN0LmFwcGVuZChNaW5pRmllbGRTdG9yYWdlKGtleSwgdmFsdWUpKQotICAgICAgICAgICAgRmllbGRTdG9yYWdlQ2xhc3MgPSBOb25lCiAKICAgICAgICAga2xhc3MgPSBzZWxmLkZpZWxkU3RvcmFnZUNsYXNzIG9yIHNlbGYuX19jbGFzc19fCiAgICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKCkgIyBieXRlcwpAQCAtOTU4LDggKzk2Myw4IEBACiAgICAgcHJpbnQoIjxIMz5DdXJyZW50IFdvcmtpbmcgRGlyZWN0b3J5OjwvSDM+IikKICAgICB0cnk6CiAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQoIm9zLmVycm9yOiIsIGh0bWwuZXNjYXBlKHN0cihtc2cpKSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CisgICAgICAgIHByaW50KCJPU0Vycm9yOiIsIGh0bWwuZXNjYXBlKHN0cihtc2cpKSkKICAgICBlbHNlOgogICAgICAgICBwcmludChodG1sLmVzY2FwZShwd2QpKQogICAgIHByaW50KCkKZGlmZiAtLWdpdCBhL0xpYi9jaHVuay5weSBiL0xpYi9jaHVuay5weQppbmRleCA1ODYzZWQwLi5kYzkwYTc1IDEwMDY0NAotLS0gYS9MaWIvY2h1bmsucHkKKysrIGIvTGliL2NodW5rLnB5CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIHNlbGYuc2l6ZV9yZWFkID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IHNlbGYuZmlsZS50ZWxsKCkKLSAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgSU9FcnJvcik6CisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5zZWVrYWJsZSA9IEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnNlZWthYmxlID0gVHJ1ZQpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBzZWxmLnNlZWthYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2Fubm90IHNlZWsiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2Fubm90IHNlZWsiKQogICAgICAgICBpZiB3aGVuY2UgPT0gMToKICAgICAgICAgICAgIHBvcyA9IHBvcyArIHNlbGYuc2l6ZV9yZWFkCiAgICAgICAgIGVsaWYgd2hlbmNlID09IDI6CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuc2VlayhuLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuc2l6ZV9yZWFkID0gc2VsZi5zaXplX3JlYWQgKyBuCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2hpbGUgc2VsZi5zaXplX3JlYWQgPCBzZWxmLmNodW5rc2l6ZToKICAgICAgICAgICAgIG4gPSBtaW4oODE5Miwgc2VsZi5jaHVua3NpemUgLSBzZWxmLnNpemVfcmVhZCkKZGlmZiAtLWdpdCBhL0xpYi9jb2RlLnB5IGIvTGliL2NvZGUucHkKaW5kZXggOTAyMGFhYi4uZjgxODRiNiAxMDA2NDQKLS0tIGEvTGliL2NvZGUucHkKKysrIGIvTGliL2NvZGUucHkKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuKCVzKVxuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgIChzeXMudmVyc2lvbiwgc3lzLnBsYXRmb3JtLCBjcHJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pKQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIGJhbm5lcjoKICAgICAgICAgICAgIHNlbGYud3JpdGUoIiVzXG4iICUgc3RyKGJhbm5lcikpCiAgICAgICAgIG1vcmUgPSAwCiAgICAgICAgIHdoaWxlIDE6CmRpZmYgLS1naXQgYS9MaWIvY29kZWNzLnB5IGIvTGliL2NvZGVjcy5weQppbmRleCA2YTZlYjkwLi4yZTJlNzU1IDEwMDY0NAotLS0gYS9MaWIvY29kZWNzLnB5CisrKyBiL0xpYi9jb2RlY3MucHkKQEAgLTczLDkgKzczLDE5IEBACiAjIyMgQ29kZWMgYmFzZSBjbGFzc2VzIChkZWZpbmluZyB0aGUgQVBJKQogCiBjbGFzcyBDb2RlY0luZm8odHVwbGUpOgorICAgICIiIkNvZGVjIGRldGFpbHMgd2hlbiBsb29raW5nIHVwIHRoZSBjb2RlYyByZWdpc3RyeSIiIgorCisgICAgIyBQcml2YXRlIEFQSSB0byBhbGxvdyBQeXRob24gMy40IHRvIGJsYWNrbGlzdCB0aGUga25vd24gbm9uLVVuaWNvZGUKKyAgICAjIGNvZGVjcyBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gQSBtb3JlIGdlbmVyYWwgbWVjaGFuaXNtIHRvCisgICAgIyByZWxpYWJseSBkaXN0aW5ndWlzaCB0ZXN0IGVuY29kaW5ncyBmcm9tIG90aGVyIGNvZGVjcyB3aWxsIGhvcGVmdWxseQorICAgICMgYmUgZGVmaW5lZCBmb3IgUHl0aG9uIDMuNQorICAgICMKKyAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk2MTkKKyAgICBfaXNfdGV4dF9lbmNvZGluZyA9IFRydWUgIyBBc3N1bWUgY29kZWNzIGFyZSB0ZXh0IGVuY29kaW5ncyBieSBkZWZhdWx0CiAKICAgICBkZWYgX19uZXdfXyhjbHMsIGVuY29kZSwgZGVjb2RlLCBzdHJlYW1yZWFkZXI9Tm9uZSwgc3RyZWFtd3JpdGVyPU5vbmUsCi0gICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1Ob25lLCBpbmNyZW1lbnRhbGRlY29kZXI9Tm9uZSwgbmFtZT1Ob25lKToKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPU5vbmUsIGluY3JlbWVudGFsZGVjb2Rlcj1Ob25lLCBuYW1lPU5vbmUsCisgICAgICAgICosIF9pc190ZXh0X2VuY29kaW5nPU5vbmUpOgogICAgICAgICBzZWxmID0gdHVwbGUuX19uZXdfXyhjbHMsIChlbmNvZGUsIGRlY29kZSwgc3RyZWFtcmVhZGVyLCBzdHJlYW13cml0ZXIpKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgIHNlbGYuZW5jb2RlID0gZW5jb2RlCkBAIC04NCw2ICs5NCw4IEBACiAgICAgICAgIHNlbGYuaW5jcmVtZW50YWxkZWNvZGVyID0gaW5jcmVtZW50YWxkZWNvZGVyCiAgICAgICAgIHNlbGYuc3RyZWFtd3JpdGVyID0gc3RyZWFtd3JpdGVyCiAgICAgICAgIHNlbGYuc3RyZWFtcmVhZGVyID0gc3RyZWFtcmVhZGVyCisgICAgICAgIGlmIF9pc190ZXh0X2VuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5faXNfdGV4dF9lbmNvZGluZyA9IF9pc190ZXh0X2VuY29kaW5nCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKaW5kZXggZDczNzI5NS4uMDJiZGM1NyAxMDA2NDQKLS0tIGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CisrKyBiL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQpAQCAtMywxNiArMywxNiBAQAogCiAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgY29udGludWUgdG8gbWFrZSB0aGUgY29sbGVjdGlvbnMgQUJDcwogIyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgY29sbGVjdGlvbnMgbW9kdWxlLgotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0ICoKLWltcG9ydCBjb2xsZWN0aW9ucy5hYmMKLV9fYWxsX18gKz0gY29sbGVjdGlvbnMuYWJjLl9fYWxsX18KK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgKgoraW1wb3J0IF9jb2xsZWN0aW9uc19hYmMKK19fYWxsX18gKz0gX2NvbGxlY3Rpb25zX2FiYy5fX2FsbF9fCiAKIGZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgZGVmYXVsdGRpY3QKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIgYXMgX2l0ZW1nZXR0ZXIsIGVxIGFzIF9lcQogZnJvbSBrZXl3b3JkIGltcG9ydCBpc2tleXdvcmQgYXMgX2lza2V5d29yZAogaW1wb3J0IHN5cyBhcyBfc3lzCiBpbXBvcnQgaGVhcHEgYXMgX2hlYXBxCi1mcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQorZnJvbSBfd2Vha3JlZiBpbXBvcnQgcHJveHkgYXMgX3Byb3h5CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0IGFzIF9yZXBlYXQsIGNoYWluIGFzIF9jaGFpbiwgc3Rhcm1hcCBhcyBfc3Rhcm1hcAogZnJvbSByZXBybGliIGltcG9ydCByZWN1cnNpdmVfcmVwciBhcyBfcmVjdXJzaXZlX3JlcHIKIApAQCAtMTk5LDEzICsxOTksMTAgQEAKIAogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICAnUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZycKLSAgICAgICAgaXRlbXMgPSBbW2ssIHNlbGZba11dIGZvciBrIGluIHNlbGZdCiAgICAgICAgIGluc3RfZGljdCA9IHZhcnMoc2VsZikuY29weSgpCiAgICAgICAgIGZvciBrIGluIHZhcnMoT3JkZXJlZERpY3QoKSk6CiAgICAgICAgICAgICBpbnN0X2RpY3QucG9wKGssIE5vbmUpCi0gICAgICAgIGlmIGluc3RfZGljdDoKLSAgICAgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIChpdGVtcywpLCBpbnN0X2RpY3QpCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKGl0ZW1zLCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoKSwgaW5zdF9kaWN0IG9yIE5vbmUsIE5vbmUsIGl0ZXIoc2VsZi5pdGVtcygpKQogCiAgICAgZGVmIGNvcHkoc2VsZik6CiAgICAgICAgICdvZC5jb3B5KCkgLT4gYSBzaGFsbG93IGNvcHkgb2Ygb2QnCkBAIC04MjIsOSArODE5LDE0IEBACiAKICAgICBfX2NvcHlfXyA9IGNvcHkKIAotICAgIGRlZiBuZXdfY2hpbGQoc2VsZik6ICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucHVzaCgpCi0gICAgICAgICdOZXcgQ2hhaW5NYXAgd2l0aCBhIG5ldyBkaWN0IGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLicKLSAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHt9LCAqc2VsZi5tYXBzKQorICAgIGRlZiBuZXdfY2hpbGQoc2VsZiwgbT1Ob25lKTogICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucHVzaCgpCisgICAgICAgICcnJworICAgICAgICBOZXcgQ2hhaW5NYXAgd2l0aCBhIG5ldyBtYXAgZm9sbG93ZWQgYnkgYWxsIHByZXZpb3VzIG1hcHMuIElmIG5vCisgICAgICAgIG1hcCBpcyBwcm92aWRlZCwgYW4gZW1wdHkgZGljdCBpcyB1c2VkLgorICAgICAgICAnJycKKyAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgbSA9IHt9CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhtLCAqc2VsZi5tYXBzKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHBhcmVudHMoc2VsZik6ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wb3AoKQpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL2FiYy5weSBiL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKaW5kZXggNzkzOTI2OC4uODkxNjAwZCAxMDA2NDQKLS0tIGEvTGliL2NvbGxlY3Rpb25zL2FiYy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CkBAIC0xLDcyOCArMSwyIEBACi0jIENvcHlyaWdodCAyMDA3IEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0KLSIiIkFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgZm9yIGNvbGxlY3Rpb25zLCBhY2NvcmRpbmcgdG8gUEVQIDMxMTkuCi0KLVVuaXQgdGVzdHMgYXJlIGluIHRlc3RfY29sbGVjdGlvbnMuCi0iIiIKLQotZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCi1pbXBvcnQgc3lzCi0KLV9fYWxsX18gPSBbIkhhc2hhYmxlIiwgIkl0ZXJhYmxlIiwgIkl0ZXJhdG9yIiwKLSAgICAgICAgICAgIlNpemVkIiwgIkNvbnRhaW5lciIsICJDYWxsYWJsZSIsCi0gICAgICAgICAgICJTZXQiLCAiTXV0YWJsZVNldCIsCi0gICAgICAgICAgICJNYXBwaW5nIiwgIk11dGFibGVNYXBwaW5nIiwKLSAgICAgICAgICAgIk1hcHBpbmdWaWV3IiwgIktleXNWaWV3IiwgIkl0ZW1zVmlldyIsICJWYWx1ZXNWaWV3IiwKLSAgICAgICAgICAgIlNlcXVlbmNlIiwgIk11dGFibGVTZXF1ZW5jZSIsCi0gICAgICAgICAgICJCeXRlU3RyaW5nIiwKLSAgICAgICAgICAgXQotCi0jIFByaXZhdGUgbGlzdCBvZiB0eXBlcyB0aGF0IHdlIHdhbnQgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgdmFyaW91cyBBQkNzCi0jIHNvIHRoYXQgdGhleSB3aWxsIHBhc3MgdGVzdHMgbGlrZToKLSMgICAgICAgaXQgPSBpdGVyKHNvbWVieXRlYXJyYXkpCi0jICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGl0LCBJdGVyYWJsZSkKLSMgTm90ZTogIGluIG90aGVyIGltcGxlbWVudGF0aW9ucywgdGhlc2UgdHlwZXMgbWFueSBub3QgYmUgZGlzdGluY3QKLSMgYW5kIHRoZXkgbWFrZSBoYXZlIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB0eXBlcyB0aGF0Ci0jIGFyZSBub3QgaW5jbHVkZWQgb24gdGhpcyBsaXN0LgotYnl0ZXNfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYicnKSkKLWJ5dGVhcnJheV9pdGVyYXRvciA9IHR5cGUoaXRlcihieXRlYXJyYXkoKSkpCi0jY2FsbGFibGVfaXRlcmF0b3IgPSA/Pz8KLWRpY3Rfa2V5aXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30ua2V5cygpKSkKLWRpY3RfdmFsdWVpdGVyYXRvciA9IHR5cGUoaXRlcih7fS52YWx1ZXMoKSkpCi1kaWN0X2l0ZW1pdGVyYXRvciA9IHR5cGUoaXRlcih7fS5pdGVtcygpKSkKLWxpc3RfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoW10pKQotbGlzdF9yZXZlcnNlaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmV2ZXJzZWQoW10pKSkKLXJhbmdlX2l0ZXJhdG9yID0gdHlwZShpdGVyKHJhbmdlKDApKSkKLXNldF9pdGVyYXRvciA9IHR5cGUoaXRlcihzZXQoKSkpCi1zdHJfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoIiIpKQotdHVwbGVfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoKCkpKQotemlwX2l0ZXJhdG9yID0gdHlwZShpdGVyKHppcCgpKSkKLSMjIHZpZXdzICMjCi1kaWN0X2tleXMgPSB0eXBlKHt9LmtleXMoKSkKLWRpY3RfdmFsdWVzID0gdHlwZSh7fS52YWx1ZXMoKSkKLWRpY3RfaXRlbXMgPSB0eXBlKHt9Lml0ZW1zKCkpCi0jIyBtaXNjICMjCi1tYXBwaW5ncHJveHkgPSB0eXBlKHR5cGUuX19kaWN0X18pCi0KLQotIyMjIE9ORS1UUklDSyBQT05JRVMgIyMjCi0KLWNsYXNzIEhhc2hhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgSGFzaGFibGU6Ci0gICAgICAgICAgICBmb3IgQiBpbiBDLl9fbXJvX186Ci0gICAgICAgICAgICAgICAgaWYgIl9faGFzaF9fIiBpbiBCLl9fZGljdF9fOgotICAgICAgICAgICAgICAgICAgICBpZiBCLl9fZGljdF9fWyJfX2hhc2hfXyJdOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgSXRlcmFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgd2hpbGUgRmFsc2U6Ci0gICAgICAgICAgICB5aWVsZCBOb25lCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgSXRlcmFibGU6Ci0gICAgICAgICAgICBpZiBhbnkoIl9faXRlcl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgSXRlcmF0b3IoSXRlcmFibGUpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgJ1JldHVybiB0aGUgbmV4dCBpdGVtIGZyb20gdGhlIGl0ZXJhdG9yLiBXaGVuIGV4aGF1c3RlZCwgcmFpc2UgU3RvcEl0ZXJhdGlvbicKLSAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEl0ZXJhdG9yOgotICAgICAgICAgICAgaWYgKGFueSgiX19uZXh0X18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSBhbmQKLSAgICAgICAgICAgICAgICBhbnkoIl9faXRlcl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykpOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi1JdGVyYXRvci5yZWdpc3RlcihieXRlc19pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVhcnJheV9pdGVyYXRvcikKLSNJdGVyYXRvci5yZWdpc3RlcihjYWxsYWJsZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGRpY3Rfa2V5aXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X3ZhbHVlaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X2l0ZW1pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihsaXN0X3JldmVyc2VpdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHJhbmdlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoc2V0X2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoc3RyX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIodHVwbGVfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3Rlcih6aXBfaXRlcmF0b3IpCi0KLWNsYXNzIFNpemVkKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDAKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBTaXplZDoKLSAgICAgICAgICAgIGlmIGFueSgiX19sZW5fXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIENvbnRhaW5lcihtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgQ29udGFpbmVyOgotICAgICAgICAgICAgaWYgYW55KCJfX2NvbnRhaW5zX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBDYWxsYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBDYWxsYWJsZToKLSAgICAgICAgICAgIGlmIGFueSgiX19jYWxsX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi0jIyMgU0VUUyAjIyMKLQotCi1jbGFzcyBTZXQoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgotCi0gICAgIiIiQSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCi0gICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18gYW5kIF9fbGVuX18uCi0KLSAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKLSAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKLSAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgaWYgbGVuKHNlbGYpID4gbGVuKG90aGVyKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBmb3IgZWxlbSBpbiBzZWxmOgotICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQotCi0gICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBvdGhlci5fX2x0X18oc2VsZikKLQotICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gb3RoZXIuX19sZV9fKHNlbGYpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA9PSBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9mcm9tX2l0ZXJhYmxlKGNscywgaXQpOgotICAgICAgICAnJydDb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGZyb20gYW55IGl0ZXJhYmxlIGlucHV0LgotCi0gICAgICAgIE11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIHNpZ25hdHVyZQotICAgICAgICBkb2VzIG5vdCBhY2NlcHQgYW4gaXRlcmFibGUgZm9yIGFuIGlucHV0LgotICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIGNscyhpdCkKLQotICAgIGRlZiBfX2FuZF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gb3RoZXIgaWYgdmFsdWUgaW4gc2VsZikKLQotICAgIGRlZiBpc2Rpc2pvaW50KHNlbGYsIG90aGVyKToKLSAgICAgICAgJ1JldHVybiBUcnVlIGlmIHR3byBzZXRzIGhhdmUgYSBudWxsIGludGVyc2VjdGlvbi4nCi0gICAgICAgIGZvciB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX19vcl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICBjaGFpbiA9IChlIGZvciBzIGluIChzZWxmLCBvdGhlcikgZm9yIGUgaW4gcykKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUoY2hhaW4pCi0KLSAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgICAgIG90aGVyID0gc2VsZi5fZnJvbV9pdGVyYWJsZShvdGhlcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIHNlbGYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIG90aGVyKQotCi0gICAgZGVmIF9feG9yX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCi0gICAgICAgIHJldHVybiAoc2VsZiAtIG90aGVyKSB8IChvdGhlciAtIHNlbGYpCi0KLSAgICBkZWYgX2hhc2goc2VsZik6Ci0gICAgICAgICIiIkNvbXB1dGUgdGhlIGhhc2ggdmFsdWUgb2YgYSBzZXQuCi0KLSAgICAgICAgTm90ZSB0aGF0IHdlIGRvbid0IGRlZmluZSBfX2hhc2hfXzogbm90IGFsbCBzZXRzIGFyZSBoYXNoYWJsZS4KLSAgICAgICAgQnV0IGlmIHlvdSBkZWZpbmUgYSBoYXNoYWJsZSBzZXQgdHlwZSwgaXRzIF9faGFzaF9fIHNob3VsZAotICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24uCi0KLSAgICAgICAgVGhpcyBtdXN0IGJlIGNvbXBhdGlibGUgX19lcV9fLgotCi0gICAgICAgIEFsbCBzZXRzIG91Z2h0IHRvIGNvbXBhcmUgZXF1YWwgaWYgdGhleSBjb250YWluIHRoZSBzYW1lCi0gICAgICAgIGVsZW1lbnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgYW5kCi0gICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50czsgc28gdGhlcmUncyBub3QgbXVjaAotICAgICAgICBmcmVlZG9tIGZvciBfX2VxX18gb3IgX19oYXNoX18uICBXZSBtYXRjaCB0aGUgYWxnb3JpdGhtIHVzZWQKLSAgICAgICAgYnkgdGhlIGJ1aWx0LWluIGZyb3plbnNldCB0eXBlLgotICAgICAgICAiIiIKLSAgICAgICAgTUFYID0gc3lzLm1heHNpemUKLSAgICAgICAgTUFTSyA9IDIgKiBNQVggKyAxCi0gICAgICAgIG4gPSBsZW4oc2VsZikKLSAgICAgICAgaCA9IDE5Mjc4NjgyMzcgKiAobiArIDEpCi0gICAgICAgIGggJj0gTUFTSwotICAgICAgICBmb3IgeCBpbiBzZWxmOgotICAgICAgICAgICAgaHggPSBoYXNoKHgpCi0gICAgICAgICAgICBoIF49IChoeCBeIChoeCA8PCAxNikgXiA4OTg2OTc0NykgICogMzY0NDc5ODE2NwotICAgICAgICAgICAgaCAmPSBNQVNLCi0gICAgICAgIGggPSBoICogNjkwNjkgKyA5MDcxMzM5MjMKLSAgICAgICAgaCAmPSBNQVNLCi0gICAgICAgIGlmIGggPiBNQVg6Ci0gICAgICAgICAgICBoIC09IE1BU0sgKyAxCi0gICAgICAgIGlmIGggPT0gLTE6Ci0gICAgICAgICAgICBoID0gNTkwOTIzNzEzCi0gICAgICAgIHJldHVybiBoCi0KLVNldC5yZWdpc3Rlcihmcm96ZW5zZXQpCi0KLQotY2xhc3MgTXV0YWJsZVNldChTZXQpOgotICAgICIiIkEgbXV0YWJsZSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCi0gICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18sIF9fbGVuX18sCi0gICAgYWRkKCksIGFuZCBkaXNjYXJkKCkuCi0KLSAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKLSAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKLSAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgYWRkKHNlbGYsIHZhbHVlKToKLSAgICAgICAgIiIiQWRkIGFuIGVsZW1lbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBkaXNjYXJkKHNlbGYsIHZhbHVlKToKLSAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuICBEbyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGFic2VudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiBJZiBub3QgYSBtZW1iZXIsIHJhaXNlIGEgS2V5RXJyb3IuIiIiCi0gICAgICAgIGlmIHZhbHVlIG5vdCBpbiBzZWxmOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IodmFsdWUpCi0gICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLQotICAgIGRlZiBwb3Aoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgcG9wcGVkIHZhbHVlLiAgUmFpc2UgS2V5RXJyb3IgaWYgZW1wdHkuIiIiCi0gICAgICAgIGl0ID0gaXRlcihzZWxmKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZSA9IG5leHQoaXQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gdmFsdWUKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgIiIiVGhpcyBpcyBzbG93IChjcmVhdGVzIE4gbmV3IGl0ZXJhdG9ycyEpIGJ1dCBlZmZlY3RpdmUuIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3AoKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgX19pb3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9faWFuZF9fKHNlbGYsIGl0KToKLSAgICAgICAgZm9yIHZhbHVlIGluIChzZWxmIC0gaXQpOgotICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9faXhvcl9fKHNlbGYsIGl0KToKLSAgICAgICAgaWYgaXQgaXMgc2VsZjoKLSAgICAgICAgICAgIHNlbGYuY2xlYXIoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXQsIFNldCk6Ci0gICAgICAgICAgICAgICAgaXQgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKGl0KQotICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgotICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2lzdWJfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIGl0IGlzIHNlbGY6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLU11dGFibGVTZXQucmVnaXN0ZXIoc2V0KQotCi0KLSMjIyBNQVBQSU5HUyAjIyMKLQotCi1jbGFzcyBNYXBwaW5nKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBIE1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcga2V5L3ZhbHVlCi0gICAgcGFpcnMuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19pdGVyX18sIGFuZCBfX2xlbl9fLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAnRC5nZXQoa1ssZF0pIC0+IERba10gaWYgayBpbiBELCBlbHNlIGQuICBkIGRlZmF1bHRzIHRvIE5vbmUuJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgIkQua2V5cygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGtleXMiCi0gICAgICAgIHJldHVybiBLZXlzVmlldyhzZWxmKQotCi0gICAgZGVmIGl0ZW1zKHNlbGYpOgotICAgICAgICAiRC5pdGVtcygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGl0ZW1zIgotICAgICAgICByZXR1cm4gSXRlbXNWaWV3KHNlbGYpCi0KLSAgICBkZWYgdmFsdWVzKHNlbGYpOgotICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIgotICAgICAgICByZXR1cm4gVmFsdWVzVmlldyhzZWxmKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gZGljdChzZWxmLml0ZW1zKCkpID09IGRpY3Qob3RoZXIuaXRlbXMoKSkKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQotCi1NYXBwaW5nLnJlZ2lzdGVyKG1hcHBpbmdwcm94eSkKLQotCi1jbGFzcyBNYXBwaW5nVmlldyhTaXplZCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFwcGluZyk6Ci0gICAgICAgIHNlbGYuX21hcHBpbmcgPSBtYXBwaW5nCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9tYXBwaW5nKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJ3swLl9fY2xhc3NfXy5fX25hbWVfX30oezAuX21hcHBpbmchcn0pJy5mb3JtYXQoc2VsZikKLQotCi1jbGFzcyBLZXlzVmlldyhNYXBwaW5nVmlldywgU2V0KToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6Ci0gICAgICAgIHJldHVybiBzZXQoaXQpCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fbWFwcGluZwotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCBrZXkKLQotS2V5c1ZpZXcucmVnaXN0ZXIoZGljdF9rZXlzKQotCi0KLWNsYXNzIEl0ZW1zVmlldyhNYXBwaW5nVmlldywgU2V0KToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6Ci0gICAgICAgIHJldHVybiBzZXQoaXQpCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgotICAgICAgICBrZXksIHZhbHVlID0gaXRlbQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2ID0gc2VsZi5fbWFwcGluZ1trZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHYgPT0gdmFsdWUKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQgKGtleSwgc2VsZi5fbWFwcGluZ1trZXldKQotCi1JdGVtc1ZpZXcucmVnaXN0ZXIoZGljdF9pdGVtcykKLQotCi1jbGFzcyBWYWx1ZXNWaWV3KE1hcHBpbmdWaWV3KToKLQotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICBpZiB2YWx1ZSA9PSBzZWxmLl9tYXBwaW5nW2tleV06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIHNlbGYuX21hcHBpbmdba2V5XQotCi1WYWx1ZXNWaWV3LnJlZ2lzdGVyKGRpY3RfdmFsdWVzKQotCi0KLWNsYXNzIE11dGFibGVNYXBwaW5nKE1hcHBpbmcpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkEgTXV0YWJsZU1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcKLSAgICBrZXkvdmFsdWUgcGFpcnMuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLAotICAgIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBfX21hcmtlciA9IG9iamVjdCgpCi0KLSAgICBkZWYgcG9wKHNlbGYsIGtleSwgZGVmYXVsdD1fX21hcmtlcik6Ci0gICAgICAgICcnJ0QucG9wKGtbLGRdKSAtPiB2LCByZW1vdmUgc3BlY2lmaWVkIGtleSBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlLgotICAgICAgICAgIElmIGtleSBpcyBub3QgZm91bmQsIGQgaXMgcmV0dXJuZWQgaWYgZ2l2ZW4sIG90aGVyd2lzZSBLZXlFcnJvciBpcyByYWlzZWQuCi0gICAgICAgICcnJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpZiBkZWZhdWx0IGlzIHNlbGYuX19tYXJrZXI6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWwgc2VsZltrZXldCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUKLQotICAgIGRlZiBwb3BpdGVtKHNlbGYpOgotICAgICAgICAnJydELnBvcGl0ZW0oKSAtPiAoaywgdiksIHJlbW92ZSBhbmQgcmV0dXJuIHNvbWUgKGtleSwgdmFsdWUpIHBhaXIKLSAgICAgICAgICAgYXMgYSAyLXR1cGxlOyBidXQgcmFpc2UgS2V5RXJyb3IgaWYgRCBpcyBlbXB0eS4KLSAgICAgICAgJycnCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGtleSA9IG5leHQoaXRlcihzZWxmKSkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcgotICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgICBkZWwgc2VsZltrZXldCi0gICAgICAgIHJldHVybiBrZXksIHZhbHVlCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICdELmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBELicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcGl0ZW0oKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgdXBkYXRlKCphcmdzLCAqKmt3ZHMpOgotICAgICAgICAnJycgRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIG1hcHBpbmcvaXRlcmFibGUgRSBhbmQgRi4KLSAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgayBpbiBFOiBEW2tdID0gRVtrXQotICAgICAgICAgICAgSWYgRSBwcmVzZW50IGFuZCBsYWNrcyAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciAoaywgdikgaW4gRTogRFtrXSA9IHYKLSAgICAgICAgICAgIEluIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgaywgdiBpbiBGLml0ZW1zKCk6IERba10gPSB2Ci0gICAgICAgICcnJwotICAgICAgICBpZiBsZW4oYXJncykgPiAyOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoe30gZ2l2ZW4pIi5mb3JtYXQobGVuKGFyZ3MpKSkKLSAgICAgICAgZWxpZiBub3QgYXJnczoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikiKQotICAgICAgICBzZWxmID0gYXJnc1swXQotICAgICAgICBvdGhlciA9IGFyZ3NbMV0gaWYgbGVuKGFyZ3MpID49IDIgZWxzZSAoKQotCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE1hcHBpbmcpOgotICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICAgIGVsaWYgaGFzYXR0cihvdGhlciwgImtleXMiKToKLSAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXIua2V5cygpOgotICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIG90aGVyOgotICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCi0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3ZHMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCi0KLSAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgICAgICdELnNldGRlZmF1bHQoa1ssZF0pIC0+IEQuZ2V0KGssZCksIGFsc28gc2V0IERba109ZCBpZiBrIG5vdCBpbiBEJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IGRlZmF1bHQKLSAgICAgICAgcmV0dXJuIGRlZmF1bHQKLQotTXV0YWJsZU1hcHBpbmcucmVnaXN0ZXIoZGljdCkKLQotCi0jIyMgU0VRVUVOQ0VTICMjIwotCi0KLWNsYXNzIFNlcXVlbmNlKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KLQotICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAotICAgIF9fZ2V0aXRlbV9fLCBhbmQgX19sZW5fXy4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGkgPSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdiA9IHNlbGZbaV0KLSAgICAgICAgICAgICAgICB5aWVsZCB2Ci0gICAgICAgICAgICAgICAgaSArPSAxCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgZm9yIHYgaW4gc2VsZjoKLSAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpOgotICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShsZW4oc2VsZikpKToKLSAgICAgICAgICAgIHlpZWxkIHNlbGZbaV0KLQotICAgIGRlZiBpbmRleChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICcnJ1MuaW5kZXgodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIGZpcnN0IGluZGV4IG9mIHZhbHVlLgotICAgICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCi0gICAgICAgICcnJwotICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiB2ID09IHZhbHVlOgotICAgICAgICAgICAgICAgIHJldHVybiBpCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKLQotICAgIGRlZiBjb3VudChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICdTLmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUnCi0gICAgICAgIHJldHVybiBzdW0oMSBmb3IgdiBpbiBzZWxmIGlmIHYgPT0gdmFsdWUpCi0KLVNlcXVlbmNlLnJlZ2lzdGVyKHR1cGxlKQotU2VxdWVuY2UucmVnaXN0ZXIoc3RyKQotU2VxdWVuY2UucmVnaXN0ZXIocmFuZ2UpCi0KLQotY2xhc3MgQnl0ZVN0cmluZyhTZXF1ZW5jZSk6Ci0KLSAgICAiIiJUaGlzIHVuaWZpZXMgYnl0ZXMgYW5kIGJ5dGVhcnJheS4KLQotICAgIFhYWCBTaG91bGQgYWRkIGFsbCB0aGVpciBtZXRob2RzLgotICAgICIiIgotCi0gICAgX19zbG90c19fID0gKCkKLQotQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlcykKLUJ5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZWFycmF5KQotCi0KLWNsYXNzIE11dGFibGVTZXF1ZW5jZShTZXF1ZW5jZSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQWxsIHRoZSBvcGVyYXRpb25zIG9uIGEgcmVhZC1vbmx5IHNlcXVlbmNlLgotCi0gICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IHByb3ZpZGUgX19uZXdfXyBvciBfX2luaXRfXywKLSAgICBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLCBfX2xlbl9fLCBhbmQgaW5zZXJ0KCkuCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOgotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOgotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCB2YWx1ZSk6Ci0gICAgICAgICdTLmluc2VydChpbmRleCwgdmFsdWUpIC0tIGluc2VydCB2YWx1ZSBiZWZvcmUgaW5kZXgnCi0gICAgICAgIHJhaXNlIEluZGV4RXJyb3IKLQotICAgIGRlZiBhcHBlbmQoc2VsZiwgdmFsdWUpOgotICAgICAgICAnUy5hcHBlbmQodmFsdWUpIC0tIGFwcGVuZCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZScKLSAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYpLCB2YWx1ZSkKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgJ1MuY2xlYXIoKSAtPiBOb25lIC0tIHJlbW92ZSBhbGwgaXRlbXMgZnJvbSBTJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmV2ZXJzZShzZWxmKToKLSAgICAgICAgJ1MucmV2ZXJzZSgpIC0tIHJldmVyc2UgKklOIFBMQUNFKicKLSAgICAgICAgbiA9IGxlbihzZWxmKQotICAgICAgICBmb3IgaSBpbiByYW5nZShuLy8yKToKLSAgICAgICAgICAgIHNlbGZbaV0sIHNlbGZbbi1pLTFdID0gc2VsZltuLWktMV0sIHNlbGZbaV0KLQotICAgIGRlZiBleHRlbmQoc2VsZiwgdmFsdWVzKToKLSAgICAgICAgJ1MuZXh0ZW5kKGl0ZXJhYmxlKSAtLSBleHRlbmQgc2VxdWVuY2UgYnkgYXBwZW5kaW5nIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhYmxlJwotICAgICAgICBmb3IgdiBpbiB2YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmFwcGVuZCh2KQotCi0gICAgZGVmIHBvcChzZWxmLCBpbmRleD0tMSk6Ci0gICAgICAgICcnJ1MucG9wKFtpbmRleF0pIC0+IGl0ZW0gLS0gcmVtb3ZlIGFuZCByZXR1cm4gaXRlbSBhdCBpbmRleCAoZGVmYXVsdCBsYXN0KS4KLSAgICAgICAgICAgUmFpc2UgSW5kZXhFcnJvciBpZiBsaXN0IGlzIGVtcHR5IG9yIGluZGV4IGlzIG91dCBvZiByYW5nZS4KLSAgICAgICAgJycnCi0gICAgICAgIHYgPSBzZWxmW2luZGV4XQotICAgICAgICBkZWwgc2VsZltpbmRleF0KLSAgICAgICAgcmV0dXJuIHYKLQotICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLnJlbW92ZSh2YWx1ZSkgLS0gcmVtb3ZlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdmFsdWUuCi0gICAgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAgICAnJycKLSAgICAgICAgZGVsIHNlbGZbc2VsZi5pbmRleCh2YWx1ZSldCi0KLSAgICBkZWYgX19pYWRkX18oc2VsZiwgdmFsdWVzKToKLSAgICAgICAgc2VsZi5leHRlbmQodmFsdWVzKQotICAgICAgICByZXR1cm4gc2VsZgotCi1NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIobGlzdCkKLU11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihieXRlYXJyYXkpICAjIE11bHRpcGx5IGluaGVyaXRpbmcsIHNlZSBCeXRlU3RyaW5nCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgX19hbGxfXwpkaWZmIC0tZ2l0IGEvTGliL2NvbG9yc3lzLnB5IGIvTGliL2NvbG9yc3lzLnB5CmluZGV4IGE2YzBjZjYuLmI5M2UzODQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xvcnN5cy5weQorKysgYi9MaWIvY29sb3JzeXMucHkKQEAgLTMzLDE3ICszMywyNSBAQAogIyBZSVE6IHVzZWQgYnkgY29tcG9zaXRlIHZpZGVvIHNpZ25hbHMgKGxpbmVhciBjb21iaW5hdGlvbnMgb2YgUkdCKQogIyBZOiBwZXJjZWl2ZWQgZ3JleSBsZXZlbCAoMC4wID09IGJsYWNrLCAxLjAgPT0gd2hpdGUpCiAjIEksIFE6IGNvbG9yIGNvbXBvbmVudHMKKyMKKyMgVGhlcmUgYXJlIGEgZ3JlYXQgbWFueSB2ZXJzaW9ucyBvZiB0aGUgY29uc3RhbnRzIHVzZWQgaW4gdGhlc2UgZm9ybXVsYWUuCisjIFRoZSBvbmVzIGluIHRoaXMgbGlicmFyeSB1c2VzIGNvbnN0YW50cyBmcm9tIHRoZSBGQ0MgdmVyc2lvbiBvZiBOVFNDLgogCiBkZWYgcmdiX3RvX3lpcShyLCBnLCBiKToKICAgICB5ID0gMC4zMCpyICsgMC41OSpnICsgMC4xMSpiCi0gICAgaSA9IDAuNjAqciAtIDAuMjgqZyAtIDAuMzIqYgotICAgIHEgPSAwLjIxKnIgLSAwLjUyKmcgKyAwLjMxKmIKKyAgICBpID0gMC43NCooci15KSAtIDAuMjcqKGIteSkKKyAgICBxID0gMC40OCooci15KSArIDAuNDEqKGIteSkKICAgICByZXR1cm4gKHksIGksIHEpCiAKIGRlZiB5aXFfdG9fcmdiKHksIGksIHEpOgotICAgIHIgPSB5ICsgMC45NDgyNjIqaSArIDAuNjI0MDEzKnEKLSAgICBnID0geSAtIDAuMjc2MDY2KmkgLSAwLjYzOTgxMCpxCi0gICAgYiA9IHkgLSAxLjEwNTQ1MCppICsgMS43Mjk4NjAqcQorICAgICMgciA9IHkgKyAoMC4yNypxICsgMC40MSppKSAvICgwLjc0KjAuNDEgKyAwLjI3KjAuNDgpCisgICAgIyBiID0geSArICgwLjc0KnEgLSAwLjQ4KmkpIC8gKDAuNzQqMC40MSArIDAuMjcqMC40OCkKKyAgICAjIGcgPSB5IC0gKDAuMzAqKHIteSkgKyAwLjExKihiLXkpKSAvIDAuNTkKKworICAgIHIgPSB5ICsgMC45NDY4ODIyMTcwOTAwNjkzKmkgKyAwLjYyMzU1NjU4MTk4NjE0MzMqcQorICAgIGcgPSB5IC0gMC4yNzQ3ODc2NDYyOTg5NzgzNCppIC0gMC42MzU2OTEwNzkxODczODAxKnEKKyAgICBiID0geSAtIDEuMTA4NTQ1MDM0NjQyMDMyMippICsgMS43MDkwMDY5Mjg0MDY0NjY2KnEKKwogICAgIGlmIHIgPCAwLjA6CiAgICAgICAgIHIgPSAwLjAKICAgICBpZiBnIDwgMC4wOgpkaWZmIC0tZ2l0IGEvTGliL2NvbXBpbGVhbGwucHkgYi9MaWIvY29tcGlsZWFsbC5weQppbmRleCBkM2NmZjZhLi40NzVkYzFjIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZWFsbC5weQorKysgYi9MaWIvY29tcGlsZWFsbC5weQpAQCAtMTMsNyArMTMsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzdHJ1Y3QKIApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwcmludCgnTGlzdGluZyB7IXJ9Li4uJy5mb3JtYXQoZGlyKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgbGlzdCB7IXJ9Ii5mb3JtYXQoZGlyKSkKICAgICAgICAgbmFtZXMgPSBbXQogICAgIG5hbWVzLnNvcnQoKQpAQCAtOTEsMjIgKzkxLDIzIEBACiAgICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgotICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lKQogICAgICAgICAgICAgY2FjaGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGNmaWxlKQogICAgICAgICBoZWFkLCB0YWlsID0gbmFtZVs6LTNdLCBuYW1lWy0zOl0KICAgICAgICAgaWYgdGFpbCA9PSAnLnB5JzoKICAgICAgICAgICAgIGlmIG5vdCBmb3JjZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG10aW1lID0gaW50KG9zLnN0YXQoZnVsbG5hbWUpLnN0X210aW1lKQotICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZSkKICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmaWxlLCAncmInKSBhcyBjaGFuZGxlOgogICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gY2hhbmRsZS5yZWFkKDgpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdCA9PSBhY3R1YWw6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcwotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ0NvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQpAQCAtMTI0LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmRlY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nKQogICAgICAgICAgICAgICAgIHByaW50KG1zZykKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAotICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHF1aWV0OgogICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGNvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yMDksNyArMjEwLDcgQEAKICAgICAgICAgICAgIHdpdGggKHN5cy5zdGRpbiBpZiBhcmdzLmZsaXN0PT0nLScgZWxzZSBvcGVuKGFyZ3MuZmxpc3QpKSBhcyBmOgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVfZGVzdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJlYWRpbmcgZmlsZSBsaXN0IHt9Ii5mb3JtYXQoYXJncy5mbGlzdCkpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weSBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKaW5kZXggY2EzYWViZC4uM2QwMzI4MCAxMDA2NDQKLS0tIGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CkBAIC0xOTgsOCArMTk4LDcgQEAKICAgICAgICAgd2FpdGVyID0gX2NyZWF0ZV9hbmRfaW5zdGFsbF93YWl0ZXJzKGZzLCBfQVNfQ09NUExFVEVEKQogCiAgICAgdHJ5OgotICAgICAgICBmb3IgZnV0dXJlIGluIGZpbmlzaGVkOgotICAgICAgICAgICAgeWllbGQgZnV0dXJlCisgICAgICAgIHlpZWxkIGZyb20gZmluaXNoZWQKIAogICAgICAgICB3aGlsZSBwZW5kaW5nOgogICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CmluZGV4IGFkZjJhYjQuLjA3YjUyMjUgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKQEAgLTQwLDcgKzQwLDcgQEAKIAogUHJvY2VzcyAjMS4ubjoKIC0gcmVhZHMgX0NhbGxJdGVtcyBmcm9tICJDYWxsIFEiLCBleGVjdXRlcyB0aGUgY2FsbHMsIGFuZCBwdXRzIHRoZSByZXN1bHRpbmcKLSAgX1Jlc3VsdEl0ZW1zIGluICJSZXF1ZXN0IFEiCisgIF9SZXN1bHRJdGVtcyBpbiAiUmVzdWx0IFEiCiAiIiIKIAogX19hdXRob3JfXyA9ICdCcmlhbiBRdWlubGFuIChicmlhbkBzd2VldGFwcC5jb20pJwpAQCAtNDksOCArNDksOSBAQAogaW1wb3J0IG9zCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgX2Jhc2UKIGltcG9ydCBxdWV1ZQorZnJvbSBxdWV1ZSBpbXBvcnQgRnVsbAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZSwgRnVsbAorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNpbXBsZVF1ZXVlCiBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgd2Vha3JlZgpAQCAtMjQwLDYgKzI0MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGVybWluYXRlZCBhYnJ1cHRseSB3aGlsZSB0aGUgZnV0dXJlIHdhcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicnVubmluZyBvciBwZW5kaW5nLiIKICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMuY2xlYXIoKQogICAgICAgICAgICAgIyBUZXJtaW5hdGUgcmVtYWluaW5nIHdvcmtlcnMgZm9yY2libHk6IHRoZSBxdWV1ZXMgb3IgdGhlaXIKICAgICAgICAgICAgICMgbG9ja3MgbWF5IGJlIGluIGEgZGlydHkgc3RhdGUgYW5kIGJsb2NrIGZvcmV2ZXIuCkBAIC0yNjQsNiArMjY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfZXhjZXB0aW9uKHJlc3VsdF9pdGVtLmV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9yZXN1bHQocmVzdWx0X2l0ZW0ucmVzdWx0KQorICAgICAgICAgICAgICAgICMgRGVsZXRlIHJlZmVyZW5jZXMgdG8gb2JqZWN0LiBTZWUgaXNzdWUxNjI4NAorICAgICAgICAgICAgICAgIGRlbCB3b3JrX2l0ZW0KICAgICAgICAgIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzdGFydCBzaHV0dGluZyBkb3duLgogICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICMgTm8gbW9yZSB3b3JrIGl0ZW1zIGNhbiBiZSBhZGRlZCBpZjoKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgICBfY2hlY2tfc3lzdGVtX2xpbWl0cygpCiAKICAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQppbmRleCA5NWJiNjgyLi5mOWJlYjBmIDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQpAQCAtNjMsNiArNjMsOCBAQAogICAgICAgICAgICAgd29ya19pdGVtID0gd29ya19xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKICAgICAgICAgICAgIGlmIHdvcmtfaXRlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0ucnVuKCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGV4ZWN1dG9yID0gZXhlY3V0b3JfcmVmZXJlbmNlKCkKICAgICAgICAgICAgICMgRXhpdCBpZjoKZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGZkZTFjMTIuLjc5NGY4NTcgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtNjg3LDcgKzY4Nyw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoZnAsIGZpbGVuYW1lKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmVhZF9vay5hcHBlbmQoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiByZWFkX29rCmRpZmYgLS1naXQgYS9MaWIvY29udGV4dGxpYi5weSBiL0xpYi9jb250ZXh0bGliLnB5CmluZGV4IGY4ZTAyNmIuLmQzMjE5ZjYgMTAwNjQ0Ci0tLSBhL0xpYi9jb250ZXh0bGliLnB5CisrKyBiL0xpYi9jb250ZXh0bGliLnB5CkBAIC00LDcgKzQsOCBAQAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCi1fX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJjbG9zaW5nIiwgIkNvbnRleHREZWNvcmF0b3IiLCAiRXhpdFN0YWNrIl0KK19fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgImNsb3NpbmciLCAiQ29udGV4dERlY29yYXRvciIsICJFeGl0U3RhY2siLAorICAgICAgICAgICAicmVkaXJlY3Rfc3Rkb3V0IiwgInN1cHByZXNzIl0KIAogCiBjbGFzcyBDb250ZXh0RGVjb3JhdG9yKG9iamVjdCk6CkBAIC0zNiw2ICszNywxNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprd2RzKToKICAgICAgICAgc2VsZi5nZW4gPSBmdW5jKCphcmdzLCAqKmt3ZHMpCiAgICAgICAgIHNlbGYuZnVuYywgc2VsZi5hcmdzLCBzZWxmLmt3ZHMgPSBmdW5jLCBhcmdzLCBrd2RzCisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGRvYyA9IGdldGF0dHIoZnVuYywgIl9fZG9jX18iLCBOb25lKQorICAgICAgICBpZiBkb2MgaXMgTm9uZToKKyAgICAgICAgICAgIGRvYyA9IHR5cGUoc2VsZikuX19kb2NfXworICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2MKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIHN0aWxsIGRvZXNuJ3QgcHJvdmlkZSBnb29kIGhlbHAgb3V0cHV0IHdoZW4KKyAgICAgICAgIyBpbnNwZWN0aW5nIHRoZSBjcmVhdGVkIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMsIHNpbmNlIHB5ZG9jCisgICAgICAgICMgY3VycmVudGx5IGJ5cGFzc2VzIHRoZSBpbnN0YW5jZSBkb2NzdHJpbmcgYW5kIHNob3dzIHRoZSBkb2NzdHJpbmcKKyAgICAgICAgIyBmb3IgdGhlIGNsYXNzIGluc3RlYWQuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTQwNCBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgZGVmIF9yZWNyZWF0ZV9jbShzZWxmKToKICAgICAgICAgIyBfR0NNIGluc3RhbmNlcyBhcmUgb25lLXNob3QgY29udGV4dCBtYW5hZ2Vycywgc28gdGhlCkBAIC00Nyw3ICs1OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBuZXh0KHNlbGYuZ2VuKQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZ2VuZXJhdG9yIGRpZG4ndCB5aWVsZCIpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKSBmcm9tIE5vbmUKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgaWYgdHlwZSBpcyBOb25lOgpAQCAtMTQwLDYgKzE1MSw2MiBAQAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgogICAgICAgICBzZWxmLnRoaW5nLmNsb3NlKCkKIAorY2xhc3MgcmVkaXJlY3Rfc3Rkb3V0OgorICAgICIiIkNvbnRleHQgbWFuYWdlciBmb3IgdGVtcG9yYXJpbHkgcmVkaXJlY3Rpbmcgc3Rkb3V0IHRvIGFub3RoZXIgZmlsZQorCisgICAgICAgICMgSG93IHRvIHNlbmQgaGVscCgpIHRvIHN0ZGVycgorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAoZGlyKQorCisgICAgICAgICMgSG93IHRvIHdyaXRlIGhlbHAoKSB0byBhIGZpbGUKKyAgICAgICAgd2l0aCBvcGVuKCdoZWxwLnR4dCcsICd3JykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgICAgIGhlbHAocG93KQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld190YXJnZXQpOgorICAgICAgICBzZWxmLl9uZXdfdGFyZ2V0ID0gbmV3X3RhcmdldAorICAgICAgICAjIFdlIHVzZSBhIGxpc3Qgb2Ygb2xkIHRhcmdldHMgdG8gbWFrZSB0aGlzIENNIHJlLWVudHJhbnQKKyAgICAgICAgc2VsZi5fb2xkX3RhcmdldHMgPSBbXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb2xkX3RhcmdldHMuYXBwZW5kKHN5cy5zdGRvdXQpCisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9uZXdfdGFyZ2V0CisgICAgICAgIHJldHVybiBzZWxmLl9uZXdfdGFyZ2V0CisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fb2xkX3RhcmdldHMucG9wKCkKKworCitjbGFzcyBzdXBwcmVzczoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc3VwcHJlc3Mgc3BlY2lmaWVkIGV4Y2VwdGlvbnMKKworICAgIEFmdGVyIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgZXhlY3V0aW9uIHByb2NlZWRzIHdpdGggdGhlIG5leHQKKyAgICBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KKworICAgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICAgb3MucmVtb3ZlKHNvbWVmaWxlKQorICAgICAgICAgIyBFeGVjdXRpb24gc3RpbGwgcmVzdW1lcyBoZXJlIGlmIHRoZSBmaWxlIHdhcyBhbHJlYWR5IHJlbW92ZWQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqZXhjZXB0aW9ucyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbnMgPSBleGNlcHRpb25zCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICAjIFVubGlrZSBpc2luc3RhbmNlIGFuZCBpc3N1YmNsYXNzLCBDUHl0aG9uIGV4Y2VwdGlvbiBoYW5kbGluZworICAgICAgICAjIGN1cnJlbnRseSBvbmx5IGxvb2tzIGF0IHRoZSBjb25jcmV0ZSB0eXBlIGhpZXJhcmNoeSAoaWdub3JpbmcKKyAgICAgICAgIyB0aGUgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNraW5nIGhvb2tzKS4gV2hpbGUgR3VpZG8gY29uc2lkZXJzCisgICAgICAgICMgdGhhdCBhIGJ1ZyByYXRoZXIgdGhhbiBhIGZlYXR1cmUsIGl0J3MgYSBmYWlybHkgaGFyZCBvbmUgdG8gZml4CisgICAgICAgICMgZHVlIHRvIHZhcmlvdXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gc3VwcHJlc3MgcHJvdmlkZXMKKyAgICAgICAgIyB0aGUgc2ltcGxlciBpc3N1YmNsYXNzIGJhc2VkIHNlbWFudGljcywgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisgICAgICAgICMgZXhhY3RseSByZXByb2R1Y2UgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBDUHl0aG9uIGludGVycHJldGVyLgorICAgICAgICAjCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjAyOSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIHJldHVybiBleGN0eXBlIGlzIG5vdCBOb25lIGFuZCBpc3N1YmNsYXNzKGV4Y3R5cGUsIHNlbGYuX2V4Y2VwdGlvbnMpCisKIAogIyBJbnNwaXJlZCBieSBkaXNjdXNzaW9ucyBvbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTM1ODUKIGNsYXNzIEV4aXRTdGFjayhvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL2NvcHlyZWcucHkgYi9MaWIvY29weXJlZy5weQppbmRleCA2NmMwZjhhLi42N2Y1YmIwIDEwMDY0NAotLS0gYS9MaWIvY29weXJlZy5weQorKysgYi9MaWIvY29weXJlZy5weQpAQCAtODcsNiArODcsMTIgQEAKIGRlZiBfX25ld29ial9fKGNscywgKmFyZ3MpOgogICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsICphcmdzKQogCitkZWYgX19uZXdvYmpfZXhfXyhjbHMsIGFyZ3MsIGt3YXJncyk6CisgICAgIiIiVXNlZCBieSBwaWNrbGUgcHJvdG9jb2wgNCwgaW5zdGVhZCBvZiBfX25ld29ial9fIHRvIGFsbG93IGNsYXNzZXMgd2l0aAorICAgIGtleXdvcmQtb25seSBhcmd1bWVudHMgdG8gYmUgcGlja2xlZCBjb3JyZWN0bHkuCisgICAgIiIiCisgICAgcmV0dXJuIGNscy5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorCiBkZWYgX3Nsb3RuYW1lcyhjbHMpOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2Ygc2xvdCBuYW1lcyBmb3IgYSBnaXZlbiBjbGFzcy4KIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKaW5kZXggYzkyZTEzMC4uZTM0YzY0NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CkBAIC0zNCwxNyArMzQsMTUgQEAKICAgICAgRlVOQ0ZMQUdfVVNFX0VSUk5PIGFzIF9GVU5DRkxBR19VU0VfRVJSTk8sIFwKICAgICAgRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUiBhcyBfRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUgogCi0iIiIKLVdJTk9MRUFQSSAtPiBIUkVTVUxUCi1XSU5PTEVBUElfKHR5cGUpCi0KLVNURE1FVEhPRENBTExUWVBFCi0KLVNURE1FVEhPRChuYW1lKQotU1RETUVUSE9EXyh0eXBlLCBuYW1lKQotCi1TVERBUElDQUxMVFlQRQotIiIiCisjIFdJTk9MRUFQSSAtPiBIUkVTVUxUCisjIFdJTk9MRUFQSV8odHlwZSkKKyMKKyMgU1RETUVUSE9EQ0FMTFRZUEUKKyMKKyMgU1RETUVUSE9EKG5hbWUpCisjIFNURE1FVEhPRF8odHlwZSwgbmFtZSkKKyMKKyMgU1REQVBJQ0FMTFRZUEUKIAogZGVmIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGluaXQsIHNpemU9Tm9uZSk6CiAgICAgIiIiY3JlYXRlX3N0cmluZ19idWZmZXIoYUJ5dGVzKSAtPiBjaGFyYWN0ZXIgYXJyYXkKQEAgLTM5NSw3ICszOTMsNyBAQAogICAgICAgICBfdHlwZV8gPSAibCIKICAgICAgICAgIyBfY2hlY2tfcmV0dmFsXyBpcyBjYWxsZWQgd2l0aCB0aGUgZnVuY3Rpb24ncyByZXN1bHQgd2hlbiBpdAogICAgICAgICAjIGlzIHVzZWQgYXMgcmVzdHlwZS4gIEl0IGNoZWNrcyBmb3IgdGhlIEZBSUxFRCBiaXQsIGFuZAotICAgICAgICAjIHJhaXNlcyBhIFdpbmRvd3NFcnJvciBpZiBpdCBpcyBzZXQuCisgICAgICAgICMgcmFpc2VzIGFuIE9TRXJyb3IgaWYgaXQgaXMgc2V0LgogICAgICAgICAjCiAgICAgICAgICMgVGhlIF9jaGVja19yZXR2YWxfIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBpbiBDLCBzbyB0aGF0IHRoZQogICAgICAgICAjIG1ldGhvZCBkZWZpbml0aW9uIGl0c2VsZiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHRyYWNlYmFjawpAQCAtNDA3LDcgKzQwNSw3IEBACiAgICAgY2xhc3MgT2xlRExMKENETEwpOgogICAgICAgICAiIiJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBkbGwgZXhwb3J0aW5nIGZ1bmN0aW9ucyB1c2luZyB0aGUKICAgICAgICAgV2luZG93cyBzdGRjYWxsIGNhbGxpbmcgY29udmVudGlvbiwgYW5kIHJldHVybmluZyBIUkVTVUxULgotICAgICAgICBIUkVTVUxUIGVycm9yIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSByYWlzZWQgYXMgV2luZG93c0Vycm9yCisgICAgICAgIEhSRVNVTFQgZXJyb3IgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJhaXNlZCBhcyBPU0Vycm9yCiAgICAgICAgIGV4Y2VwdGlvbnMuCiAgICAgICAgICIiIgogICAgICAgICBfZnVuY19mbGFnc18gPSBfRlVOQ0ZMQUdfU1REQ0FMTApAQCAtNDU2LDcgKzQ1NCw3IEBACiAgICAgICAgICAgICBjb2RlID0gR2V0TGFzdEVycm9yKCkKICAgICAgICAgaWYgZGVzY3IgaXMgTm9uZToKICAgICAgICAgICAgIGRlc2NyID0gRm9ybWF0RXJyb3IoY29kZSkuc3RyaXAoKQotICAgICAgICByZXR1cm4gV2luZG93c0Vycm9yKE5vbmUsIGRlc2NyLCBOb25lLCBjb2RlKQorICAgICAgICByZXR1cm4gT1NFcnJvcihOb25lLCBkZXNjciwgTm9uZSwgY29kZSkKIAogaWYgc2l6ZW9mKGNfdWludCkgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWludApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CmluZGV4IGNjNWZlMDIuLjdjNzIyMTAgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTM3LDcgKzM3LDcgQEAKIAogZGVmIGZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIG1hc2spOgogICAgIGltcG9ydCBmbm1hdGNoCi0gICAgaWYgKGhhc2F0dHIocGFja2FnZSwgIl9fbG9hZGVyX18iKSBhbmQKKyAgICBpZiAocGFja2FnZS5fX2xvYWRlcl9fIGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdfZmlsZXMnKSk6CiAgICAgICAgIHBhdGggPSBwYWNrYWdlLl9fbmFtZV9fLnJlcGxhY2UoIi4iLCBvcy5wYXRoLnNlcCkKICAgICAgICAgbWFzayA9IG9zLnBhdGguam9pbihwYXRoLCBtYXNrKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQppbmRleCAwMWNjYzU3Li4xOWJiODEzIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBwYXNzCiAgICAgZWxzZToKICAgICAgICAgZGVmIHRlc3Rfb2xlZGxsKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVkbGwub2xlYXV0MzIuQ3JlYXRlVHlwZUxpYjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTm9uZSwgTm9uZSkKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CmluZGV4IGNiZjJlMDUuLjI3MWUzZjUgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKQEAgLTUsMTcgKzUsMTQgQEAKIAogIyBYWFggVGhpcyB0ZXN0IG11c3QgYmUgcmV2aWV3ZWQgZm9yIGNvcnJlY3RuZXNzISEhCiAKLSIiIgotY3R5cGVzJyB0eXBlcyBhcmUgY29udGFpbmVyIHR5cGVzLgotCi1UaGV5IGhhdmUgYW4gaW50ZXJuYWwgbWVtb3J5IGJsb2NrLCB3aGljaCBvbmx5IGNvbnNpc3RzIG9mIHNvbWUgYnl0ZXMsCi1idXQgaXQgaGFzIHRvIGtlZXAgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFzIHdlbGwuIFRoaXMgaXMgbm90Ci1yZWFsbHkgbmVlZGVkIGZvciB0cml2aWFsIEMgdHlwZXMgbGlrZSBpbnQgb3IgY2hhciwgYnV0IGl0IGlzIGltcG9ydGFudAotZm9yIGFnZ3JlZ2F0ZSB0eXBlcyBsaWtlIHN0cmluZ3Mgb3IgcG9pbnRlcnMgaW4gcGFydGljdWxhci4KLQotV2hhdCBhYm91dCBwb2ludGVycz8KLQotIiIiCisjIGN0eXBlcycgdHlwZXMgYXJlIGNvbnRhaW5lciB0eXBlcy4KKyMKKyMgVGhleSBoYXZlIGFuIGludGVybmFsIG1lbW9yeSBibG9jaywgd2hpY2ggb25seSBjb25zaXN0cyBvZiBzb21lIGJ5dGVzLAorIyBidXQgaXQgaGFzIHRvIGtlZXAgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFzIHdlbGwuIFRoaXMgaXMgbm90CisjIHJlYWxseSBuZWVkZWQgZm9yIHRyaXZpYWwgQyB0eXBlcyBsaWtlIGludCBvciBjaGFyLCBidXQgaXQgaXMgaW1wb3J0YW50CisjIGZvciBhZ2dyZWdhdGUgdHlwZXMgbGlrZSBzdHJpbmdzIG9yIHBvaW50ZXJzIGluIHBhcnRpY3VsYXIuCisjCisjIFdoYXQgYWJvdXQgcG9pbnRlcnM/CiAKIGNsYXNzIE9iamVjdHNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2VydFNhbWUoc2VsZiwgYSwgYik6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CmluZGV4IGVkYTg0NmQuLmZkMjY4MzcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CkBAIC0zLDM1ICszLDMzIEBACiBpbXBvcnQgdW5pdHRlc3QKIAogIyBCb2IgSXBwb2xpdG86Ci0iIiIKLU9rLi4gdGhlIGNvZGUgdG8gZmluZCB0aGUgZmlsZW5hbWUgZm9yIF9fZ2V0YXR0cl9fIHNob3VsZCBsb29rCi1zb21ldGhpbmcgbGlrZToKLQotaW1wb3J0IG9zCi1mcm9tIG1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAotCi1kZWYgZmluZF9saWIobmFtZSk6Ci0gICAgIHBvc3NpYmxlID0gWydsaWInK25hbWUrJy5keWxpYicsIG5hbWUrJy5keWxpYicsCi0gICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQotICAgICBmb3IgZHlsaWIgaW4gcG9zc2libGU6Ci0gICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKLSAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgIHBhc3MKLSAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCi0KLUl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKLQotID4+PiBmaW5kX2xpYigncHRocmVhZCcpCi0nL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWInCi0gPj4+IGZpbmRfbGliKCd6JykKLScvdXNyL2xpYi9saWJ6LjEuZHlsaWInCi0gPj4+IGZpbmRfbGliKCdJT0tpdCcpCi0nL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnCi0KLS1ib2IKLQotIiIiCisjCisjIE9rLi4gdGhlIGNvZGUgdG8gZmluZCB0aGUgZmlsZW5hbWUgZm9yIF9fZ2V0YXR0cl9fIHNob3VsZCBsb29rCisjIHNvbWV0aGluZyBsaWtlOgorIworIyBpbXBvcnQgb3MKKyMgZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKKyMKKyMgZGVmIGZpbmRfbGliKG5hbWUpOgorIyAgICAgIHBvc3NpYmxlID0gWydsaWInK25hbWUrJy5keWxpYicsIG5hbWUrJy5keWxpYicsCisjICAgICAgbmFtZSsnLmZyYW1ld29yay8nK25hbWVdCisjICAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgorIyAgICAgICAgICB0cnk6CisjICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5yZWFscGF0aChkeWxkX2ZpbmQoZHlsaWIpKQorIyAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyMgICAgICAgICAgICAgIHBhc3MKKyMgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiJXMgbm90IGZvdW5kIiAlIChuYW1lLCkKKyMKKyMgSXQnbGwgaGF2ZSBvdXRwdXQgbGlrZSB0aGlzOgorIworIyAgPj4+IGZpbmRfbGliKCdwdGhyZWFkJykKKyMgJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJworIyAgPj4+IGZpbmRfbGliKCd6JykKKyMgJy91c3IvbGliL2xpYnouMS5keWxpYicKKyMgID4+PiBmaW5kX2xpYignSU9LaXQnKQorIyAnL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnCisjCisjIC1ib2IKIAogZnJvbSBjdHlwZXMubWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKaW5kZXggZGEyMTMzNi4uOTFhZDMxNCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICAjIENhbGwgZnVuY3Rpb25zIHdpdGggaW52YWxpZCBhcmd1bWVudHMsIGFuZCBtYWtlIHN1cmUKICAgICAgICAgICAgICAgICAjIHRoYXQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIHRyYXBwZWQgYW5kIHJhaXNlIGFuCiAgICAgICAgICAgICAgICAgIyBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQSwgMzIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQogCiAgICAgICAgIGRlZiB0ZXN0X25vYXJncyhzZWxmKToKICAgICAgICAgICAgICMgVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBvbiB3aW4zMiB4NjQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdXRpbC5weSBiL0xpYi9jdHlwZXMvdXRpbC5weQppbmRleCAwNTRjNTExLi4wY2YyMDc2IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3V0aWwucHkKKysrIGIvTGliL2N0eXBlcy91dGlsLnB5CkBAIC0xMDIsOSArMTAyLDggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoY2NvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnY2Mgb3IgY2MgY29tbWFuZCBub3QgZm91bmQnKQogICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgdHJhY2UpCkBAIC0xMzMsOCArMTMyLDEwIEBACiAgICAgICAgICAgICBjbWQgPSAnaWYgISB0eXBlIG9iamR1bXAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGV4aXQgMTA7IGZpOycgXAogICAgICAgICAgICAgICAgICAgIm9iamR1bXAgLXAgLWogLmR5bmFtaWMgMj4vZGV2L251bGwgIiArIGYKICAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCi0gICAgICAgICAgICBkdW1wID0gZi5yZWFkKCkKLSAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZHVtcCA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCiAgICAgICAgICAgICBpZiBydiA9PSAxMDoKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdvYmpkdW1wIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xzU09OQU1FXHMrKFteXHNdKyknLCBkdW1wKQpAQCAtMTc3LDEwICsxNzgsMTEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY21kID0gJ2VudiBMQ19BTEw9QyAvdXNyL2Jpbi9jcmxlIDI+L2Rldi9udWxsJwogCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBvcy5wb3BlbihjbWQpLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgotICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRGVmYXVsdCBMaWJyYXJ5IFBhdGggKEVMRik6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQogCiAgICAgICAgICAgICBpZiBub3QgcGF0aHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kYXRldGltZS5weSBiL0xpYi9kYXRldGltZS5weQppbmRleCBkMWYzNTNiLi4xNzg5NzE0IDEwMDY0NAotLS0gYS9MaWIvZGF0ZXRpbWUucHkKKysrIGIvTGliL2RhdGV0aW1lLnB5CkBAIC0yMyw5ICsyMywxMCBAQAogIyBmb3IgYWxsIGNvbXB1dGF0aW9ucy4gIFNlZSB0aGUgYm9vayBmb3IgYWxnb3JpdGhtcyBmb3IgY29udmVydGluZyBiZXR3ZWVuCiAjIHByb2xlcHRpYyBHcmVnb3JpYW4gb3JkaW5hbHMgYW5kIG1hbnkgb3RoZXIgY2FsZW5kYXIgc3lzdGVtcy4KIAotX0RBWVNfSU5fTU9OVEggPSBbTm9uZSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KKyMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCitfREFZU19JTl9NT05USCA9IFstMSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KIAotX0RBWVNfQkVGT1JFX01PTlRIID0gW05vbmVdCitfREFZU19CRUZPUkVfTU9OVEggPSBbLTFdICMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCiBkYm0gPSAwCiBmb3IgZGltIGluIF9EQVlTX0lOX01PTlRIWzE6XToKICAgICBfREFZU19CRUZPUkVfTU9OVEguYXBwZW5kKGRibSkKQEAgLTE5MTcsMjAzICsxOTE4LDIwMyBAQAogdGltZXpvbmUubWluID0gdGltZXpvbmUuX2NyZWF0ZSh0aW1lem9uZS5fbWlub2Zmc2V0KQogdGltZXpvbmUubWF4ID0gdGltZXpvbmUuX2NyZWF0ZSh0aW1lem9uZS5fbWF4b2Zmc2V0KQogX0VQT0NIID0gZGF0ZXRpbWUoMTk3MCwgMSwgMSwgdHppbmZvPXRpbWV6b25lLnV0YykKLSIiIgotU29tZSB0aW1lIHpvbmUgYWxnZWJyYS4gIEZvciBhIGRhdGV0aW1lIHgsIGxldAotICAgIHgubiA9IHggc3RyaXBwZWQgb2YgaXRzIHRpbWV6b25lIC0tIGl0cyBuYWl2ZSB0aW1lLgotICAgIHgubyA9IHgudXRjb2Zmc2V0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCi0gICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICB4LmQgPSB4LmRzdCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgeC5zID0geCdzIHN0YW5kYXJkIG9mZnNldCwgeC5vIC0geC5kCiAKLU5vdyBzb21lIGRlcml2ZWQgcnVsZXMsIHdoZXJlIGsgaXMgYSBkdXJhdGlvbiAodGltZWRlbHRhKS4KKyMgU29tZSB0aW1lIHpvbmUgYWxnZWJyYS4gIEZvciBhIGRhdGV0aW1lIHgsIGxldAorIyAgICAgeC5uID0geCBzdHJpcHBlZCBvZiBpdHMgdGltZXpvbmUgLS0gaXRzIG5haXZlIHRpbWUuCisjICAgICB4Lm8gPSB4LnV0Y29mZnNldCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgorIyAgICAgICAgICAgcmV0dXJuIE5vbmUKKyMgICAgIHguZCA9IHguZHN0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCisjICAgICAgICAgICByZXR1cm4gTm9uZQorIyAgICAgeC5zID0geCdzIHN0YW5kYXJkIG9mZnNldCwgeC5vIC0geC5kCisjCisjIE5vdyBzb21lIGRlcml2ZWQgcnVsZXMsIHdoZXJlIGsgaXMgYSBkdXJhdGlvbiAodGltZWRlbHRhKS4KKyMKKyMgMS4geC5vID0geC5zICsgeC5kCisjICAgIFRoaXMgZm9sbG93cyBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIHgucy4KKyMKKyMgMi4gSWYgeCBhbmQgeSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsIHgucyA9IHkucy4KKyMgICAgVGhpcyBpcyBhY3R1YWxseSBhIHJlcXVpcmVtZW50LCBhbiBhc3N1bXB0aW9uIHdlIG5lZWQgdG8gbWFrZSBhYm91dAorIyAgICBzYW5lIHR6aW5mbyBjbGFzc2VzLgorIworIyAzLiBUaGUgbmFpdmUgVVRDIHRpbWUgY29ycmVzcG9uZGluZyB0byB4IGlzIHgubiAtIHguby4KKyMgICAgVGhpcyBpcyBhZ2FpbiBhIHJlcXVpcmVtZW50IGZvciBhIHNhbmUgdHppbmZvIGNsYXNzLgorIworIyA0LiAoeCtrKS5zID0geC5zCisjICAgIFRoaXMgZm9sbG93cyBmcm9tICMyLCBhbmQgdGhhdCBkYXRpbWV0aW1ldHordGltZWRlbHRhIHByZXNlcnZlcyB0emluZm8uCisjCisjIDUuICh4K2spLm4gPSB4Lm4gKyBrCisjICAgIEFnYWluIGZvbGxvd3MgZnJvbSBob3cgYXJpdGhtZXRpYyBpcyBkZWZpbmVkLgorIworIyBOb3cgd2UgY2FuIGV4cGxhaW4gdHouZnJvbXV0Yyh4KS4gIExldCdzIGFzc3VtZSBpdCdzIGFuIGludGVyZXN0aW5nIGNhc2UKKyMgKG1lYW5pbmcgdGhhdCB0aGUgdmFyaW91cyB0emluZm8gbWV0aG9kcyBleGlzdCwgYW5kIGRvbid0IGJsb3cgdXAgb3IgcmV0dXJuCisjIE5vbmUgd2hlbiBjYWxsZWQpLgorIworIyBUaGUgZnVuY3Rpb24gd2FudHMgdG8gcmV0dXJuIGEgZGF0ZXRpbWUgeSB3aXRoIHRpbWV6b25lIHR6LCBlcXVpdmFsZW50IHRvIHguCisjIHggaXMgYWxyZWFkeSBpbiBVVEMuCisjCisjIEJ5ICMzLCB3ZSB3YW50CisjCisjICAgICB5Lm4gLSB5Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXQorIworIyBUaGUgYWxnb3JpdGhtIHN0YXJ0cyBieSBhdHRhY2hpbmcgdHogdG8geC5uLCBhbmQgY2FsbGluZyB0aGF0IHkuICBTbworIyB4Lm4gPSB5Lm4gYXQgdGhlIHN0YXJ0LiAgVGhlbiBpdCB3YW50cyB0byBhZGQgYSBkdXJhdGlvbiBrIHRvIHksIHNvIHRoYXQgWzFdCisjIGJlY29tZXMgdHJ1ZTsgaW4gZWZmZWN0LCB3ZSB3YW50IHRvIHNvbHZlIFsyXSBmb3IgazoKKyMKKyMgICAgKHkraykubiAtICh5K2spLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgWzJdCisjCisjIEJ5ICMxLCB0aGlzIGlzIHRoZSBzYW1lIGFzCisjCisjICAgICh5K2spLm4gLSAoKHkraykucyArICh5K2spLmQpID0geC5uICAgICAgICAgIFszXQorIworIyBCeSAjNSwgKHkraykubiA9IHkubiArIGssIHdoaWNoIGVxdWFscyB4Lm4gKyBrIGJlY2F1c2UgeC5uPXkubiBhdCB0aGUgc3RhcnQuCisjIFN1YnN0aXR1dGluZyB0aGF0IGludG8gWzNdLAorIworIyAgICB4Lm4gKyBrIC0gKHkraykucyAtICh5K2spLmQgPSB4Lm47IHRoZSB4Lm4gdGVybXMgY2FuY2VsLCBsZWF2aW5nCisjICAgIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IDA7IHJlYXJyYW5naW5nLAorIyAgICBrID0gKHkraykucyAtICh5K2spLmQ7IGJ5ICM0LCAoeStrKS5zID09IHkucywgc28KKyMgICAgayA9IHkucyAtICh5K2spLmQKKyMKKyMgT24gdGhlIFJIUywgKHkraykuZCBjYW4ndCBiZSBjb21wdXRlZCBkaXJlY3RseSwgYnV0IHkucyBjYW4gYmUsIGFuZCB3ZQorIyBhcHByb3hpbWF0ZSBrIGJ5IGlnbm9yaW5nIHRoZSAoeStrKS5kIHRlcm0gYXQgZmlyc3QuICBOb3RlIHRoYXQgayBjYW4ndCBiZQorIyB2ZXJ5IGxhcmdlLCBzaW5jZSBhbGwgb2Zmc2V0LXJldHVybmluZyBtZXRob2RzIHJldHVybiBhIGR1cmF0aW9uIG9mIG1hZ25pdHVkZQorIyBsZXNzIHRoYW4gMjQgaG91cnMuICBGb3IgdGhhdCByZWFzb24sIGlmIHkgaXMgZmlybWx5IGluIHN0ZCB0aW1lLCAoeStrKS5kIG11c3QKKyMgYmUgMCwgc28gaWdub3JpbmcgaXQgaGFzIG5vIGNvbnNlcXVlbmNlIHRoZW4uCisjCisjIEluIGFueSBjYXNlLCB0aGUgbmV3IHZhbHVlIGlzCisjCisjICAgICB6ID0geSArIHkucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XQorIworIyBJdCdzIGhlbHBmdWwgdG8gc3RlcCBiYWNrIGF0IGxvb2sgYXQgWzRdIGZyb20gYSBoaWdoZXIgbGV2ZWw6ICBpdCdzIHNpbXBseQorIyBtYXBwaW5nIGZyb20gVVRDIHRvIHR6J3Mgc3RhbmRhcmQgdGltZS4KKyMKKyMgQXQgdGhpcyBwb2ludCwgaWYKKyMKKyMgICAgIHoubiAtIHoubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzVdCisjCisjIHdlIGhhdmUgYW4gZXF1aXZhbGVudCB0aW1lLCBhbmQgYXJlIGFsbW9zdCBkb25lLiAgVGhlIGluc2VjdXJpdHkgaGVyZSBpcworIyBhdCB0aGUgc3RhcnQgb2YgZGF5bGlnaHQgdGltZS4gIFBpY3R1cmUgVVMgRWFzdGVybiBmb3IgY29uY3JldGVuZXNzLiAgVGhlIHdhbGwKKyMgdGltZSBqdW1wcyBmcm9tIDE6NTkgdG8gMzowMCwgYW5kIHdhbGwgaG91cnMgb2YgdGhlIGZvcm0gMjpNTSBkb24ndCBtYWtlIGdvb2QKKyMgc2Vuc2UgdGhlbi4gIFRoZSBkb2NzIGFzayB0aGF0IGFuIEVhc3Rlcm4gdHppbmZvIGNsYXNzIGNvbnNpZGVyIHN1Y2ggYSB0aW1lIHRvCisjIGJlIEVEVCAoYmVjYXVzZSBpdCdzICJhZnRlciAyIiksIHdoaWNoIGlzIGEgcmVkdW5kYW50IHNwZWxsaW5nIG9mIDE6TU0gRVNUCisjIG9uIHRoZSBkYXkgRFNUIHN0YXJ0cy4gIFdlIHdhbnQgdG8gcmV0dXJuIHRoZSAxOk1NIEVTVCBzcGVsbGluZyBiZWNhdXNlIHRoYXQncworIyB0aGUgb25seSBzcGVsbGluZyB0aGF0IG1ha2VzIHNlbnNlIG9uIHRoZSBsb2NhbCB3YWxsIGNsb2NrLgorIworIyBJbiBmYWN0LCBpZiBbNV0gaG9sZHMgYXQgdGhpcyBwb2ludCwgd2UgZG8gaGF2ZSB0aGUgc3RhbmRhcmQtdGltZSBzcGVsbGluZywKKyMgYnV0IHRoYXQgdGFrZXMgYSBiaXQgb2YgcHJvb2YuICBXZSBmaXJzdCBwcm92ZSBhIHN0cm9uZ2VyIHJlc3VsdC4gIFdoYXQncyB0aGUKKyMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbNV0/ICBMZXQKKyMKKyMgICAgIGRpZmYgPSB4Lm4gLSAoei5uIC0gei5vKSAgICAgICAgICAgICAgICAgICAgWzZdCisjCisjIE5vdworIyAgICAgei5uID0gICAgICAgICAgICAgICAgICAgICAgIGJ5IFs0XQorIyAgICAgKHkgKyB5LnMpLm4gPSAgICAgICAgICAgICAgIGJ5ICM1CisjICAgICB5Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeS5uID0geC5uCisjICAgICB4Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeiBhbmQgeSBhcmUgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LnMgPSB6LnMgYnkgIzIKKyMgICAgIHgubiArIHoucworIworIyBQbHVnZ2luZyB0aGF0IGJhY2sgaW50byBbNl0gZ2l2ZXMKKyMKKyMgICAgIGRpZmYgPQorIyAgICAgeC5uIC0gKCh4Lm4gKyB6LnMpIC0gei5vKSA9ICAgICBleHBhbmRpbmcKKyMgICAgIHgubiAtIHgubiAtIHoucyArIHoubyA9ICAgICAgICAgY2FuY2VsbGluZworIyAgICAgLSB6LnMgKyB6Lm8gPSAgICAgICAgICAgICAgICAgICBieSAjMgorIyAgICAgei5kCisjCisjIFNvIGRpZmYgPSB6LmQuCisjCisjIElmIFs1XSBpcyB0cnVlIG5vdywgZGlmZiA9IDAsIHNvIHouZCA9IDAgdG9vLCBhbmQgd2UgaGF2ZSB0aGUgc3RhbmRhcmQtdGltZQorIyBzcGVsbGluZyB3ZSB3YW50ZWQgaW4gdGhlIGVuZGNhc2UgZGVzY3JpYmVkIGFib3ZlLiAgV2UncmUgZG9uZS4gIENvbnRyYXJpbHksCisjIGlmIHouZCA9IDAsIHRoZW4gd2UgaGF2ZSBhIFVUQyBlcXVpdmFsZW50LCBhbmQgYXJlIGFsc28gZG9uZS4KKyMKKyMgSWYgWzVdIGlzIG5vdCB0cnVlIG5vdywgZGlmZiA9IHouZCAhPSAwLCBhbmQgei5kIGlzIHRoZSBvZmZzZXQgd2UgbmVlZCB0bworIyBhZGQgdG8geiAoaW4gZWZmZWN0LCB6IGlzIGluIHR6J3Mgc3RhbmRhcmQgdGltZSwgYW5kIHdlIG5lZWQgdG8gc2hpZnQgdGhlCisjIGxvY2FsIGNsb2NrIGludG8gdHoncyBkYXlsaWdodCB0aW1lKS4KKyMKKyMgTGV0CisjCisjICAgICB6JyA9IHogKyB6LmQgPSB6ICsgZGlmZiAgICAgICAgICAgICAgICAgICAgIFs3XQorIworIyBhbmQgd2UgY2FuIGFnYWluIGFzayB3aGV0aGVyCisjCisjICAgICB6Jy5uIC0geicubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4XQorIworIyBJZiBzbywgd2UncmUgZG9uZS4gIElmIG5vdCwgdGhlIHR6aW5mbyBjbGFzcyBpcyBpbnNhbmUsIGFjY29yZGluZyB0byB0aGUKKyMgYXNzdW1wdGlvbnMgd2UndmUgbWFkZS4gIFRoaXMgYWxzbyByZXF1aXJlcyBhIGJpdCBvZiBwcm9vZi4gIEFzIGJlZm9yZSwgbGV0J3MKKyMgY29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbOF0gKGFuZCBza2lwcGluZyBzb21lIG9mCisjIHRoZSBqdXN0aWZpY2F0aW9ucyBmb3IgdGhlIGtpbmRzIG9mIHN1YnN0aXR1dGlvbnMgd2UndmUgZG9uZSBzZXZlcmFsIHRpbWVzCisjIGFscmVhZHkpOgorIworIyAgICAgZGlmZicgPSB4Lm4gLSAoeicubiAtIHonLm8pID0gICAgICAgICAgIHJlcGxhY2luZyB6Jy5uIHZpYSBbN10KKyMgICAgICAgICAgICAgeC5uICAtICh6Lm4gKyBkaWZmIC0geicubykgPSAgICByZXBsYWNpbmcgZGlmZiB2aWEgWzZdCisjICAgICAgICAgICAgIHgubiAtICh6Lm4gKyB4Lm4gLSAoei5uIC0gei5vKSAtIHonLm8pID0KKyMgICAgICAgICAgICAgeC5uIC0gei5uIC0geC5uICsgei5uIC0gei5vICsgeicubyA9ICAgIGNhbmNlbCB4Lm4KKyMgICAgICAgICAgICAgLSB6Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgIGNhbmNlbCB6Lm4KKyMgICAgICAgICAgICAgLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgICAgICAgICAgIzEgdHdpY2UKKyMgICAgICAgICAgICAgLXoucyAtIHouZCArIHonLnMgKyB6Jy5kID0gICAgICAgICAgeiBhbmQgeicgaGF2ZSBzYW1lIHR6aW5mbworIyAgICAgICAgICAgICB6Jy5kIC0gei5kCisjCisjIFNvIHonIGlzIFVUQy1lcXVpdmFsZW50IHRvIHggaWZmIHonLmQgPSB6LmQgYXQgdGhpcyBwb2ludC4gIElmIHRoZXkgYXJlIGVxdWFsLAorIyB3ZSd2ZSBmb3VuZCB0aGUgVVRDLWVxdWl2YWxlbnQgc28gYXJlIGRvbmUuICBJbiBmYWN0LCB3ZSBzdG9wIHdpdGggWzddIGFuZAorIyByZXR1cm4geicsIG5vdCBib3RoZXJpbmcgdG8gY29tcHV0ZSB6Jy5kLgorIworIyBIb3cgY291bGQgei5kIGFuZCB6J2QgZGlmZmVyPyAgeicgPSB6ICsgei5kIFs3XSwgc28gbWVyZWx5IG1vdmluZyB6JyBieQorIyBhIGRzdCgpIG9mZnNldCwgYW5kIHN0YXJ0aW5nICpmcm9tKiBhIHRpbWUgYWxyZWFkeSBpbiBEU1QgKHdlIGtub3cgei5kICE9IDApLAorIyB3b3VsZCBoYXZlIHRvIGNoYW5nZSB0aGUgcmVzdWx0IGRzdCgpIHJldHVybnM6ICB3ZSBzdGFydCBpbiBEU1QsIGFuZCBtb3ZpbmcKKyMgYSBsaXR0bGUgZnVydGhlciBpbnRvIGl0IHRha2VzIHVzIG91dCBvZiBEU1QuCisjCisjIFRoZXJlIGlzbid0IGEgc2FuZSBjYXNlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbi4gIFRoZSBjbG9zZXN0IGl0IGdldHMgaXMgYXQKKyMgdGhlIGVuZCBvZiBEU1QsIHdoZXJlIHRoZXJlJ3MgYW4gaG91ciBpbiBVVEMgd2l0aCBubyBzcGVsbGluZyBpbiBhIGh5YnJpZAorIyB0emluZm8gY2xhc3MuICBJbiBVUyBFYXN0ZXJuLCB0aGF0J3MgNTpNTSBVVEMgPSAwOk1NIEVTVCA9IDE6TU0gRURULiAgRHVyaW5nCisjIHRoYXQgaG91ciwgb24gYW4gRWFzdGVybiBjbG9jayAxOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgKDY6TU0KKyMgVVRDKSBiZWNhdXNlIHRoZSBkb2NzIGluc2lzdCBvbiB0aGF0LCBidXQgMDpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBkYXlsaWdodAorIyB0aW1lICg0Ok1NIFVUQykuICBUaGVyZSBpcyBubyBsb2NhbCB0aW1lIG1hcHBpbmcgdG8gNTpNTSBVVEMuICBUaGUgbG9jYWwKKyMgY2xvY2sganVtcHMgZnJvbSAxOjU5IGJhY2sgdG8gMTowMCBhZ2FpbiwgYW5kIHJlcGVhdHMgdGhlIDE6TU0gaG91ciBpbgorIyBzdGFuZGFyZCB0aW1lLiAgU2luY2UgdGhhdCdzIHdoYXQgdGhlIGxvY2FsIGNsb2NrICpkb2VzKiwgd2Ugd2FudCB0byBtYXAgYm90aAorIyBVVEMgaG91cnMgNTpNTSBhbmQgNjpNTSB0byAxOk1NIEVhc3Rlcm4uICBUaGUgcmVzdWx0IGlzIGFtYmlndW91cworIyBpbiBsb2NhbCB0aW1lLCBidXQgc28gaXQgZ29lcyAtLSBpdCdzIHRoZSB3YXkgdGhlIGxvY2FsIGNsb2NrIHdvcmtzLgorIworIyBXaGVuIHggPSA1Ok1NIFVUQyBpcyB0aGUgaW5wdXQgdG8gdGhpcyBhbGdvcml0aG0sIHgubz0wLCB5Lm89LTUgYW5kIHkuZD0wLAorIyBzbyB6PTA6TU0uICB6LmQ9NjAgKG1pbnV0ZXMpIHRoZW4sIHNvIFs1XSBkb2Vzbid0IGhvbGQgYW5kIHdlIGtlZXAgZ29pbmcuCisjIHonID0geiArIHouZCA9IDE6TU0gdGhlbiwgYW5kIHonLmQ9MCwgYW5kIHonLmQgLSB6LmQgPSAtNjAgIT0gMCBzbyBbOF0KKyMgKGNvcnJlY3RseSkgY29uY2x1ZGVzIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IHRvIHguCisjCisjIEJlY2F1c2Ugd2Uga25vdyB6LmQgc2FpZCB6IHdhcyBpbiBkYXlsaWdodCB0aW1lIChlbHNlIFs1XSB3b3VsZCBoYXZlIGhlbGQgYW5kCisjIHdlIHdvdWxkIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHdlIGtub3cgei5kICE9IHonLmQgKGVsc2UgWzhdIHdvdWxkIGhhdmUgaGVsZAorIyBhbmQgd2UgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgdGhlcmUgYXJlIG9ubHkgMiBwb3NzaWJsZSB2YWx1ZXMgZHN0KCkgY2FuCisjIHJldHVybiBpbiBFYXN0ZXJuLCBpdCBmb2xsb3dzIHRoYXQgeicuZCBtdXN0IGJlIDAgKHdoaWNoIGl0IGlzIGluIHRoZSBleGFtcGxlLAorIyBidXQgdGhlIHJlYXNvbmluZyBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgZXhhbXBsZSAtLSBpdCBkZXBlbmRzIG9uIHRoZXJlIGJlaW5nCisjIHR3byBwb3NzaWJsZSBkc3QoKSBvdXRjb21lcywgb25lIHplcm8gYW5kIHRoZSBvdGhlciBub24temVybykuICBUaGVyZWZvcmUKKyMgeicgbXVzdCBiZSBpbiBzdGFuZGFyZCB0aW1lLCBhbmQgaXMgdGhlIHNwZWxsaW5nIHdlIHdhbnQgaW4gdGhpcyBjYXNlLgorIworIyBOb3RlIGFnYWluIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IGFzIGZhciBhcyB0aGUgaHlicmlkIHR6aW5mbyBjbGFzcyBpcworIyBjb25jZXJuZWQgKGJlY2F1c2UgaXQgdGFrZXMgeicgYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSByYXRoZXIgdGhhbiB0aGUKKyMgZGF5bGlnaHQgdGltZSB3ZSBpbnRlbmQgaGVyZSksIGJ1dCByZXR1cm5pbmcgaXQgZ2l2ZXMgdGhlIHJlYWwtbGlmZSAibG9jYWwKKyMgY2xvY2sgcmVwZWF0cyBhbiBob3VyIiBiZWhhdmlvciB3aGVuIG1hcHBpbmcgdGhlICJ1bnNwZWxsYWJsZSIgVVRDIGhvdXIgaW50bworIyB0ei4KKyMKKyMgV2hlbiB0aGUgaW5wdXQgaXMgNjpNTSwgej0xOk1NIGFuZCB6LmQ9MCwgYW5kIHdlIHN0b3AgYXQgb25jZSwgYWdhaW4gd2l0aAorIyB0aGUgMTpNTSBzdGFuZGFyZCB0aW1lIHNwZWxsaW5nIHdlIHdhbnQuCisjCisjIFNvIGhvdyBjYW4gdGhpcyBicmVhaz8gIE9uZSBvZiB0aGUgYXNzdW1wdGlvbnMgbXVzdCBiZSB2aW9sYXRlZC4gIFR3bworIyBwb3NzaWJpbGl0aWVzOgorIworIyAxKSBbMl0gZWZmZWN0aXZlbHkgc2F5cyB0aGF0IHkucyBpcyBpbnZhcmlhbnQgYWNyb3NzIGFsbCB5IGJlbG9uZyB0byBhIGdpdmVuCisjICAgIHRpbWUgem9uZS4gIFRoaXMgaXNuJ3QgdHJ1ZSBpZiwgZm9yIHBvbGl0aWNhbCByZWFzb25zIG9yIGNvbnRpbmVudGFsIGRyaWZ0LAorIyAgICBhIHJlZ2lvbiBkZWNpZGVzIHRvIGNoYW5nZSBpdHMgYmFzZSBvZmZzZXQgZnJvbSBVVEMuCisjCisjIDIpIFRoZXJlIG1heSBiZSB2ZXJzaW9ucyBvZiAiZG91YmxlIGRheWxpZ2h0IiB0aW1lIHdoZXJlIHRoZSB0YWlsIGVuZCBvZgorIyAgICB0aGUgYW5hbHlzaXMgZ2l2ZXMgdXAgYSBzdGVwIHRvbyBlYXJseS4gIEkgaGF2ZW4ndCB0aG91Z2h0IGFib3V0IHRoYXQKKyMgICAgZW5vdWdoIHRvIHNheS4KKyMKKyMgSW4gYW55IGNhc2UsIGl0J3MgY2xlYXIgdGhhdCB0aGUgZGVmYXVsdCBmcm9tdXRjKCkgaXMgc3Ryb25nIGVub3VnaCB0byBoYW5kbGUKKyMgImFsbW9zdCBhbGwiIHRpbWUgem9uZXM6ICBzbyBsb25nIGFzIHRoZSBzdGFuZGFyZCBvZmZzZXQgaXMgaW52YXJpYW50LCBpdAorIyBkb2Vzbid0IG1hdHRlciBpZiBkYXlsaWdodCB0aW1lIHRyYW5zaXRpb24gcG9pbnRzIGNoYW5nZSBmcm9tIHllYXIgdG8geWVhciwgb3IKKyMgaWYgZGF5bGlnaHQgdGltZSBpcyBza2lwcGVkIGluIHNvbWUgeWVhcnM7IGl0IGRvZXNuJ3QgbWF0dGVyIGhvdyBsYXJnZSBvcgorIyBzbWFsbCBkc3QoKSBtYXkgZ2V0IHdpdGhpbiBpdHMgYm91bmRzOyBhbmQgaXQgZG9lc24ndCBldmVuIG1hdHRlciBpZiBzb21lCisjIHBlcnZlcnNlIHRpbWUgem9uZSByZXR1cm5zIGEgbmVnYXRpdmUgZHN0KCkpLiAgU28gYSBicmVha2luZyBjYXNlIG11c3QgYmUKKyMgcHJldHR5IGJpemFycmUsIGFuZCBhIHR6aW5mbyBzdWJjbGFzcyBjYW4gb3ZlcnJpZGUgZnJvbXV0YygpIGlmIGl0IGlzLgogCi0xLiB4Lm8gPSB4LnMgKyB4LmQKLSAgIFRoaXMgZm9sbG93cyBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIHgucy4KLQotMi4gSWYgeCBhbmQgeSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsIHgucyA9IHkucy4KLSAgIFRoaXMgaXMgYWN0dWFsbHkgYSByZXF1aXJlbWVudCwgYW4gYXNzdW1wdGlvbiB3ZSBuZWVkIHRvIG1ha2UgYWJvdXQKLSAgIHNhbmUgdHppbmZvIGNsYXNzZXMuCi0KLTMuIFRoZSBuYWl2ZSBVVEMgdGltZSBjb3JyZXNwb25kaW5nIHRvIHggaXMgeC5uIC0geC5vLgotICAgVGhpcyBpcyBhZ2FpbiBhIHJlcXVpcmVtZW50IGZvciBhIHNhbmUgdHppbmZvIGNsYXNzLgotCi00LiAoeCtrKS5zID0geC5zCi0gICBUaGlzIGZvbGxvd3MgZnJvbSAjMiwgYW5kIHRoYXQgZGF0aW1ldGltZXR6K3RpbWVkZWx0YSBwcmVzZXJ2ZXMgdHppbmZvLgotCi01LiAoeCtrKS5uID0geC5uICsgawotICAgQWdhaW4gZm9sbG93cyBmcm9tIGhvdyBhcml0aG1ldGljIGlzIGRlZmluZWQuCi0KLU5vdyB3ZSBjYW4gZXhwbGFpbiB0ei5mcm9tdXRjKHgpLiAgTGV0J3MgYXNzdW1lIGl0J3MgYW4gaW50ZXJlc3RpbmcgY2FzZQotKG1lYW5pbmcgdGhhdCB0aGUgdmFyaW91cyB0emluZm8gbWV0aG9kcyBleGlzdCwgYW5kIGRvbid0IGJsb3cgdXAgb3IgcmV0dXJuCi1Ob25lIHdoZW4gY2FsbGVkKS4KLQotVGhlIGZ1bmN0aW9uIHdhbnRzIHRvIHJldHVybiBhIGRhdGV0aW1lIHkgd2l0aCB0aW1lem9uZSB0eiwgZXF1aXZhbGVudCB0byB4LgoteCBpcyBhbHJlYWR5IGluIFVUQy4KLQotQnkgIzMsIHdlIHdhbnQKLQotICAgIHkubiAtIHkubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdCi0KLVRoZSBhbGdvcml0aG0gc3RhcnRzIGJ5IGF0dGFjaGluZyB0eiB0byB4Lm4sIGFuZCBjYWxsaW5nIHRoYXQgeS4gIFNvCi14Lm4gPSB5Lm4gYXQgdGhlIHN0YXJ0LiAgVGhlbiBpdCB3YW50cyB0byBhZGQgYSBkdXJhdGlvbiBrIHRvIHksIHNvIHRoYXQgWzFdCi1iZWNvbWVzIHRydWU7IGluIGVmZmVjdCwgd2Ugd2FudCB0byBzb2x2ZSBbMl0gZm9yIGs6Ci0KLSAgICh5K2spLm4gLSAoeStrKS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgIFsyXQotCi1CeSAjMSwgdGhpcyBpcyB0aGUgc2FtZSBhcwotCi0gICAoeStrKS5uIC0gKCh5K2spLnMgKyAoeStrKS5kKSA9IHgubiAgICAgICAgICBbM10KLQotQnkgIzUsICh5K2spLm4gPSB5Lm4gKyBrLCB3aGljaCBlcXVhbHMgeC5uICsgayBiZWNhdXNlIHgubj15Lm4gYXQgdGhlIHN0YXJ0LgotU3Vic3RpdHV0aW5nIHRoYXQgaW50byBbM10sCi0KLSAgIHgubiArIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IHgubjsgdGhlIHgubiB0ZXJtcyBjYW5jZWwsIGxlYXZpbmcKLSAgIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IDA7IHJlYXJyYW5naW5nLAotICAgayA9ICh5K2spLnMgLSAoeStrKS5kOyBieSAjNCwgKHkraykucyA9PSB5LnMsIHNvCi0gICBrID0geS5zIC0gKHkraykuZAotCi1PbiB0aGUgUkhTLCAoeStrKS5kIGNhbid0IGJlIGNvbXB1dGVkIGRpcmVjdGx5LCBidXQgeS5zIGNhbiBiZSwgYW5kIHdlCi1hcHByb3hpbWF0ZSBrIGJ5IGlnbm9yaW5nIHRoZSAoeStrKS5kIHRlcm0gYXQgZmlyc3QuICBOb3RlIHRoYXQgayBjYW4ndCBiZQotdmVyeSBsYXJnZSwgc2luY2UgYWxsIG9mZnNldC1yZXR1cm5pbmcgbWV0aG9kcyByZXR1cm4gYSBkdXJhdGlvbiBvZiBtYWduaXR1ZGUKLWxlc3MgdGhhbiAyNCBob3Vycy4gIEZvciB0aGF0IHJlYXNvbiwgaWYgeSBpcyBmaXJtbHkgaW4gc3RkIHRpbWUsICh5K2spLmQgbXVzdAotYmUgMCwgc28gaWdub3JpbmcgaXQgaGFzIG5vIGNvbnNlcXVlbmNlIHRoZW4uCi0KLUluIGFueSBjYXNlLCB0aGUgbmV3IHZhbHVlIGlzCi0KLSAgICB6ID0geSArIHkucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XQotCi1JdCdzIGhlbHBmdWwgdG8gc3RlcCBiYWNrIGF0IGxvb2sgYXQgWzRdIGZyb20gYSBoaWdoZXIgbGV2ZWw6ICBpdCdzIHNpbXBseQotbWFwcGluZyBmcm9tIFVUQyB0byB0eidzIHN0YW5kYXJkIHRpbWUuCi0KLUF0IHRoaXMgcG9pbnQsIGlmCi0KLSAgICB6Lm4gLSB6Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1XQotCi13ZSBoYXZlIGFuIGVxdWl2YWxlbnQgdGltZSwgYW5kIGFyZSBhbG1vc3QgZG9uZS4gIFRoZSBpbnNlY3VyaXR5IGhlcmUgaXMKLWF0IHRoZSBzdGFydCBvZiBkYXlsaWdodCB0aW1lLiAgUGljdHVyZSBVUyBFYXN0ZXJuIGZvciBjb25jcmV0ZW5lc3MuICBUaGUgd2FsbAotdGltZSBqdW1wcyBmcm9tIDE6NTkgdG8gMzowMCwgYW5kIHdhbGwgaG91cnMgb2YgdGhlIGZvcm0gMjpNTSBkb24ndCBtYWtlIGdvb2QKLXNlbnNlIHRoZW4uICBUaGUgZG9jcyBhc2sgdGhhdCBhbiBFYXN0ZXJuIHR6aW5mbyBjbGFzcyBjb25zaWRlciBzdWNoIGEgdGltZSB0bwotYmUgRURUIChiZWNhdXNlIGl0J3MgImFmdGVyIDIiKSwgd2hpY2ggaXMgYSByZWR1bmRhbnQgc3BlbGxpbmcgb2YgMTpNTSBFU1QKLW9uIHRoZSBkYXkgRFNUIHN0YXJ0cy4gIFdlIHdhbnQgdG8gcmV0dXJuIHRoZSAxOk1NIEVTVCBzcGVsbGluZyBiZWNhdXNlIHRoYXQncwotdGhlIG9ubHkgc3BlbGxpbmcgdGhhdCBtYWtlcyBzZW5zZSBvbiB0aGUgbG9jYWwgd2FsbCBjbG9jay4KLQotSW4gZmFjdCwgaWYgWzVdIGhvbGRzIGF0IHRoaXMgcG9pbnQsIHdlIGRvIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcsCi1idXQgdGhhdCB0YWtlcyBhIGJpdCBvZiBwcm9vZi4gIFdlIGZpcnN0IHByb3ZlIGEgc3Ryb25nZXIgcmVzdWx0LiAgV2hhdCdzIHRoZQotZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbNV0/ICBMZXQKLQotICAgIGRpZmYgPSB4Lm4gLSAoei5uIC0gei5vKSAgICAgICAgICAgICAgICAgICAgWzZdCi0KLU5vdwotICAgIHoubiA9ICAgICAgICAgICAgICAgICAgICAgICBieSBbNF0KLSAgICAoeSArIHkucykubiA9ICAgICAgICAgICAgICAgYnkgIzUKLSAgICB5Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeS5uID0geC5uCi0gICAgeC5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHogYW5kIHkgYXJlIGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkucyA9IHoucyBieSAjMgotICAgIHgubiArIHoucwotCi1QbHVnZ2luZyB0aGF0IGJhY2sgaW50byBbNl0gZ2l2ZXMKLQotICAgIGRpZmYgPQotICAgIHgubiAtICgoeC5uICsgei5zKSAtIHoubykgPSAgICAgZXhwYW5kaW5nCi0gICAgeC5uIC0geC5uIC0gei5zICsgei5vID0gICAgICAgICBjYW5jZWxsaW5nCi0gICAgLSB6LnMgKyB6Lm8gPSAgICAgICAgICAgICAgICAgICBieSAjMgotICAgIHouZAotCi1TbyBkaWZmID0gei5kLgotCi1JZiBbNV0gaXMgdHJ1ZSBub3csIGRpZmYgPSAwLCBzbyB6LmQgPSAwIHRvbywgYW5kIHdlIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUKLXNwZWxsaW5nIHdlIHdhbnRlZCBpbiB0aGUgZW5kY2FzZSBkZXNjcmliZWQgYWJvdmUuICBXZSdyZSBkb25lLiAgQ29udHJhcmlseSwKLWlmIHouZCA9IDAsIHRoZW4gd2UgaGF2ZSBhIFVUQyBlcXVpdmFsZW50LCBhbmQgYXJlIGFsc28gZG9uZS4KLQotSWYgWzVdIGlzIG5vdCB0cnVlIG5vdywgZGlmZiA9IHouZCAhPSAwLCBhbmQgei5kIGlzIHRoZSBvZmZzZXQgd2UgbmVlZCB0bwotYWRkIHRvIHogKGluIGVmZmVjdCwgeiBpcyBpbiB0eidzIHN0YW5kYXJkIHRpbWUsIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IHRoZQotbG9jYWwgY2xvY2sgaW50byB0eidzIGRheWxpZ2h0IHRpbWUpLgotCi1MZXQKLQotICAgIHonID0geiArIHouZCA9IHogKyBkaWZmICAgICAgICAgICAgICAgICAgICAgWzddCi0KLWFuZCB3ZSBjYW4gYWdhaW4gYXNrIHdoZXRoZXIKLQotICAgIHonLm4gLSB6Jy5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgWzhdCi0KLUlmIHNvLCB3ZSdyZSBkb25lLiAgSWYgbm90LCB0aGUgdHppbmZvIGNsYXNzIGlzIGluc2FuZSwgYWNjb3JkaW5nIHRvIHRoZQotYXNzdW1wdGlvbnMgd2UndmUgbWFkZS4gIFRoaXMgYWxzbyByZXF1aXJlcyBhIGJpdCBvZiBwcm9vZi4gIEFzIGJlZm9yZSwgbGV0J3MKLWNvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzhdIChhbmQgc2tpcHBpbmcgc29tZSBvZgotdGhlIGp1c3RpZmljYXRpb25zIGZvciB0aGUga2luZHMgb2Ygc3Vic3RpdHV0aW9ucyB3ZSd2ZSBkb25lIHNldmVyYWwgdGltZXMKLWFscmVhZHkpOgotCi0gICAgZGlmZicgPSB4Lm4gLSAoeicubiAtIHonLm8pID0gICAgICAgICAgIHJlcGxhY2luZyB6Jy5uIHZpYSBbN10KLSAgICAgICAgICAgIHgubiAgLSAoei5uICsgZGlmZiAtIHonLm8pID0gICAgcmVwbGFjaW5nIGRpZmYgdmlhIFs2XQotICAgICAgICAgICAgeC5uIC0gKHoubiArIHgubiAtICh6Lm4gLSB6Lm8pIC0geicubykgPQotICAgICAgICAgICAgeC5uIC0gei5uIC0geC5uICsgei5uIC0gei5vICsgeicubyA9ICAgIGNhbmNlbCB4Lm4KLSAgICAgICAgICAgIC0gei5uICsgei5uIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICBjYW5jZWwgei5uCi0gICAgICAgICAgICAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgICAgICAgICAjMSB0d2ljZQotICAgICAgICAgICAgLXoucyAtIHouZCArIHonLnMgKyB6Jy5kID0gICAgICAgICAgeiBhbmQgeicgaGF2ZSBzYW1lIHR6aW5mbwotICAgICAgICAgICAgeicuZCAtIHouZAotCi1TbyB6JyBpcyBVVEMtZXF1aXZhbGVudCB0byB4IGlmZiB6Jy5kID0gei5kIGF0IHRoaXMgcG9pbnQuICBJZiB0aGV5IGFyZSBlcXVhbCwKLXdlJ3ZlIGZvdW5kIHRoZSBVVEMtZXF1aXZhbGVudCBzbyBhcmUgZG9uZS4gIEluIGZhY3QsIHdlIHN0b3Agd2l0aCBbN10gYW5kCi1yZXR1cm4geicsIG5vdCBib3RoZXJpbmcgdG8gY29tcHV0ZSB6Jy5kLgotCi1Ib3cgY291bGQgei5kIGFuZCB6J2QgZGlmZmVyPyAgeicgPSB6ICsgei5kIFs3XSwgc28gbWVyZWx5IG1vdmluZyB6JyBieQotYSBkc3QoKSBvZmZzZXQsIGFuZCBzdGFydGluZyAqZnJvbSogYSB0aW1lIGFscmVhZHkgaW4gRFNUICh3ZSBrbm93IHouZCAhPSAwKSwKLXdvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSByZXN1bHQgZHN0KCkgcmV0dXJuczogIHdlIHN0YXJ0IGluIERTVCwgYW5kIG1vdmluZwotYSBsaXR0bGUgZnVydGhlciBpbnRvIGl0IHRha2VzIHVzIG91dCBvZiBEU1QuCi0KLVRoZXJlIGlzbid0IGEgc2FuZSBjYXNlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbi4gIFRoZSBjbG9zZXN0IGl0IGdldHMgaXMgYXQKLXRoZSBlbmQgb2YgRFNULCB3aGVyZSB0aGVyZSdzIGFuIGhvdXIgaW4gVVRDIHdpdGggbm8gc3BlbGxpbmcgaW4gYSBoeWJyaWQKLXR6aW5mbyBjbGFzcy4gIEluIFVTIEVhc3Rlcm4sIHRoYXQncyA1Ok1NIFVUQyA9IDA6TU0gRVNUID0gMTpNTSBFRFQuICBEdXJpbmcKLXRoYXQgaG91ciwgb24gYW4gRWFzdGVybiBjbG9jayAxOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgKDY6TU0KLVVUQykgYmVjYXVzZSB0aGUgZG9jcyBpbnNpc3Qgb24gdGhhdCwgYnV0IDA6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gZGF5bGlnaHQKLXRpbWUgKDQ6TU0gVVRDKS4gIFRoZXJlIGlzIG5vIGxvY2FsIHRpbWUgbWFwcGluZyB0byA1Ok1NIFVUQy4gIFRoZSBsb2NhbAotY2xvY2sganVtcHMgZnJvbSAxOjU5IGJhY2sgdG8gMTowMCBhZ2FpbiwgYW5kIHJlcGVhdHMgdGhlIDE6TU0gaG91ciBpbgotc3RhbmRhcmQgdGltZS4gIFNpbmNlIHRoYXQncyB3aGF0IHRoZSBsb2NhbCBjbG9jayAqZG9lcyosIHdlIHdhbnQgdG8gbWFwIGJvdGgKLVVUQyBob3VycyA1Ok1NIGFuZCA2Ok1NIHRvIDE6TU0gRWFzdGVybi4gIFRoZSByZXN1bHQgaXMgYW1iaWd1b3VzCi1pbiBsb2NhbCB0aW1lLCBidXQgc28gaXQgZ29lcyAtLSBpdCdzIHRoZSB3YXkgdGhlIGxvY2FsIGNsb2NrIHdvcmtzLgotCi1XaGVuIHggPSA1Ok1NIFVUQyBpcyB0aGUgaW5wdXQgdG8gdGhpcyBhbGdvcml0aG0sIHgubz0wLCB5Lm89LTUgYW5kIHkuZD0wLAotc28gej0wOk1NLiAgei5kPTYwIChtaW51dGVzKSB0aGVuLCBzbyBbNV0gZG9lc24ndCBob2xkIGFuZCB3ZSBrZWVwIGdvaW5nLgoteicgPSB6ICsgei5kID0gMTpNTSB0aGVuLCBhbmQgeicuZD0wLCBhbmQgeicuZCAtIHouZCA9IC02MCAhPSAwIHNvIFs4XQotKGNvcnJlY3RseSkgY29uY2x1ZGVzIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IHRvIHguCi0KLUJlY2F1c2Ugd2Uga25vdyB6LmQgc2FpZCB6IHdhcyBpbiBkYXlsaWdodCB0aW1lIChlbHNlIFs1XSB3b3VsZCBoYXZlIGhlbGQgYW5kCi13ZSB3b3VsZCBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB3ZSBrbm93IHouZCAhPSB6Jy5kIChlbHNlIFs4XSB3b3VsZCBoYXZlIGhlbGQKLWFuZCB3ZSBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB0aGVyZSBhcmUgb25seSAyIHBvc3NpYmxlIHZhbHVlcyBkc3QoKSBjYW4KLXJldHVybiBpbiBFYXN0ZXJuLCBpdCBmb2xsb3dzIHRoYXQgeicuZCBtdXN0IGJlIDAgKHdoaWNoIGl0IGlzIGluIHRoZSBleGFtcGxlLAotYnV0IHRoZSByZWFzb25pbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGV4YW1wbGUgLS0gaXQgZGVwZW5kcyBvbiB0aGVyZSBiZWluZwotdHdvIHBvc3NpYmxlIGRzdCgpIG91dGNvbWVzLCBvbmUgemVybyBhbmQgdGhlIG90aGVyIG5vbi16ZXJvKS4gIFRoZXJlZm9yZQoteicgbXVzdCBiZSBpbiBzdGFuZGFyZCB0aW1lLCBhbmQgaXMgdGhlIHNwZWxsaW5nIHdlIHdhbnQgaW4gdGhpcyBjYXNlLgotCi1Ob3RlIGFnYWluIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IGFzIGZhciBhcyB0aGUgaHlicmlkIHR6aW5mbyBjbGFzcyBpcwotY29uY2VybmVkIChiZWNhdXNlIGl0IHRha2VzIHonIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgcmF0aGVyIHRoYW4gdGhlCi1kYXlsaWdodCB0aW1lIHdlIGludGVuZCBoZXJlKSwgYnV0IHJldHVybmluZyBpdCBnaXZlcyB0aGUgcmVhbC1saWZlICJsb2NhbAotY2xvY2sgcmVwZWF0cyBhbiBob3VyIiBiZWhhdmlvciB3aGVuIG1hcHBpbmcgdGhlICJ1bnNwZWxsYWJsZSIgVVRDIGhvdXIgaW50bwotdHouCi0KLVdoZW4gdGhlIGlucHV0IGlzIDY6TU0sIHo9MTpNTSBhbmQgei5kPTAsIGFuZCB3ZSBzdG9wIGF0IG9uY2UsIGFnYWluIHdpdGgKLXRoZSAxOk1NIHN0YW5kYXJkIHRpbWUgc3BlbGxpbmcgd2Ugd2FudC4KLQotU28gaG93IGNhbiB0aGlzIGJyZWFrPyAgT25lIG9mIHRoZSBhc3N1bXB0aW9ucyBtdXN0IGJlIHZpb2xhdGVkLiAgVHdvCi1wb3NzaWJpbGl0aWVzOgotCi0xKSBbMl0gZWZmZWN0aXZlbHkgc2F5cyB0aGF0IHkucyBpcyBpbnZhcmlhbnQgYWNyb3NzIGFsbCB5IGJlbG9uZyB0byBhIGdpdmVuCi0gICB0aW1lIHpvbmUuICBUaGlzIGlzbid0IHRydWUgaWYsIGZvciBwb2xpdGljYWwgcmVhc29ucyBvciBjb250aW5lbnRhbCBkcmlmdCwKLSAgIGEgcmVnaW9uIGRlY2lkZXMgdG8gY2hhbmdlIGl0cyBiYXNlIG9mZnNldCBmcm9tIFVUQy4KLQotMikgVGhlcmUgbWF5IGJlIHZlcnNpb25zIG9mICJkb3VibGUgZGF5bGlnaHQiIHRpbWUgd2hlcmUgdGhlIHRhaWwgZW5kIG9mCi0gICB0aGUgYW5hbHlzaXMgZ2l2ZXMgdXAgYSBzdGVwIHRvbyBlYXJseS4gIEkgaGF2ZW4ndCB0aG91Z2h0IGFib3V0IHRoYXQKLSAgIGVub3VnaCB0byBzYXkuCi0KLUluIGFueSBjYXNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGRlZmF1bHQgZnJvbXV0YygpIGlzIHN0cm9uZyBlbm91Z2ggdG8gaGFuZGxlCi0iYWxtb3N0IGFsbCIgdGltZSB6b25lczogIHNvIGxvbmcgYXMgdGhlIHN0YW5kYXJkIG9mZnNldCBpcyBpbnZhcmlhbnQsIGl0Ci1kb2Vzbid0IG1hdHRlciBpZiBkYXlsaWdodCB0aW1lIHRyYW5zaXRpb24gcG9pbnRzIGNoYW5nZSBmcm9tIHllYXIgdG8geWVhciwgb3IKLWlmIGRheWxpZ2h0IHRpbWUgaXMgc2tpcHBlZCBpbiBzb21lIHllYXJzOyBpdCBkb2Vzbid0IG1hdHRlciBob3cgbGFyZ2Ugb3IKLXNtYWxsIGRzdCgpIG1heSBnZXQgd2l0aGluIGl0cyBib3VuZHM7IGFuZCBpdCBkb2Vzbid0IGV2ZW4gbWF0dGVyIGlmIHNvbWUKLXBlcnZlcnNlIHRpbWUgem9uZSByZXR1cm5zIGEgbmVnYXRpdmUgZHN0KCkpLiAgU28gYSBicmVha2luZyBjYXNlIG11c3QgYmUKLXByZXR0eSBiaXphcnJlLCBhbmQgYSB0emluZm8gc3ViY2xhc3MgY2FuIG92ZXJyaWRlIGZyb211dGMoKSBpZiBpdCBpcy4KLSIiIgogdHJ5OgogICAgIGZyb20gX2RhdGV0aW1lIGltcG9ydCAqCiBleGNlcHQgSW1wb3J0RXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvZGJtL19faW5pdF9fLnB5IGIvTGliL2RibS9fX2luaXRfXy5weQppbmRleCBhNzgzZmRlLi41ZjQ2NjRhIDEwMDY0NAotLS0gYS9MaWIvZGJtL19faW5pdF9fLnB5CisrKyBiL0xpYi9kYm0vX19pbml0X18ucHkKQEAgLTQyLDcgKzQyLDcgQEAKIF9kZWZhdWx0bW9kID0gTm9uZQogX21vZHVsZXMgPSB7fQogCi1lcnJvciA9IChlcnJvciwgSU9FcnJvcikKK2Vycm9yID0gKGVycm9yLCBPU0Vycm9yKQogCiB0cnk6CiAgICAgZnJvbSBkYm0gaW1wb3J0IG5kYm0KQEAgLTExMSwxMiArMTExLDEwIEBACiAgICAgdHJ5OgogICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSArICIucGFnIiwgInJiIikKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICMgZGJtIGxpbmtlZCB3aXRoIGdkYm0gb24gT1MvMiBkb2Vzbid0IGhhdmUgLmRpciBmaWxlCi0gICAgICAgIGlmIG5vdCAobmRibS5saWJyYXJ5ID09ICJHTlUgZ2RibSIgYW5kIHN5cy5wbGF0Zm9ybSA9PSAib3MyZW14Iik6Ci0gICAgICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSArICIuZGlyIiwgInJiIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSArICIuZGlyIiwgInJiIikKKyAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHJldHVybiAiZGJtLm5kYm0iCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgc29tZSBkYm0gZW11bGF0aW9ucyBiYXNlZCBvbiBCZXJrZWxleSBEQiBnZW5lcmF0ZSBhIC5kYiBmaWxlCiAgICAgICAgICMgc29tZSBkbyBub3QsIGJ1dCB0aGV5IHNob3VsZCBiZSBjYXVnaHQgYnkgdGhlIGJzZCBjaGVja3MKICAgICAgICAgdHJ5OgpAQCAtMTI5LDcgKzEyNyw3IEBACiAgICAgICAgICAgICAgICAgZCA9IG5kYm0ub3BlbihmaWxlbmFtZSkKICAgICAgICAgICAgICAgICBkLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gImRibS5uZGJtIgotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAjIENoZWNrIGZvciBkdW1iZGJtIG5leHQgLS0gdGhpcyBoYXMgYSAuZGlyIGFuZCBhIC5kYXQgZmlsZQpAQCAtMTQ2LDEzICsxNDQsMTMgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gImRibS5kdW1iIgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogCiAgICAgIyBTZWUgaWYgdGhlIGZpbGUgZXhpc3RzLCByZXR1cm4gTm9uZSBpZiBub3QKICAgICB0cnk6CiAgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lLCAicmIiKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgIyBSZWFkIHRoZSBzdGFydCBvZiB0aGUgZmlsZSAtLSB0aGUgbWFnaWMgbnVtYmVyCmRpZmYgLS1naXQgYS9MaWIvZGJtL2R1bWIucHkgYi9MaWIvZGJtL2R1bWIucHkKaW5kZXggY2ZiOTEyMy4uYmE2YTIwZCAxMDA2NDQKLS0tIGEvTGliL2RibS9kdW1iLnB5CisrKyBiL0xpYi9kYm0vZHVtYi5weQpAQCAtMjksNyArMjksNyBAQAogCiBfQkxPQ0tTSVpFID0gNTEyCiAKLWVycm9yID0gSU9FcnJvcgorZXJyb3IgPSBPU0Vycm9yCiAKIGNsYXNzIF9EYXRhYmFzZShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CiAKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgIyBNb2QgYnkgSmFjazogY3JlYXRlIGRhdGEgZmlsZSBpZiBuZWVkZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3cnLCBlbmNvZGluZz0iTGF0aW4tMSIpCiAgICAgICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kYXRmaWxlKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgc2VsZi5faW5kZXggPSB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ3InLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CkBAIC0xMDAsMTIgKzEwMCwxMiBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnVubGluayhzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnJlbmFtZShzZWxmLl9kaXJmaWxlLCBzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGYgPSBzZWxmLl9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQpAQCAtMjM2LDYgKzIzNiwxMiBAQAogICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX29zLCAnY2htb2QnKToKICAgICAgICAgICAgIHNlbGYuX29zLmNobW9kKGZpbGUsIHNlbGYuX21vZGUpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKIAogZGVmIG9wZW4oZmlsZSwgZmxhZz1Ob25lLCBtb2RlPTBvNjY2KToKICAgICAiIiJPcGVuIHRoZSBkYXRhYmFzZSBmaWxlLCBmaWxlbmFtZSwgYW5kIHJldHVybiBjb3JyZXNwb25kaW5nIG9iamVjdC4KZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggOWYzN2U0Zi4uN2JjMWM5NCAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTcwNCw4ICs3MDQsNyBAQAogCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXIgdG8gRGVjaW1hbCIgJSB2YWx1ZSkKIAotICAgICMgQGNsYXNzbWV0aG9kLCBidXQgQGRlY29yYXRvciBpcyBub3QgdmFsaWQgUHl0aG9uIDIuMyBzeW50YXgsIHNvCi0gICAgIyBkb24ndCB1c2UgaXQgKHNlZSBub3RlcyBvbiBQeTIuMyBjb21wYXRpYmlsaXR5IGF0IHRvcCBvZiBmaWxlKQorICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tX2Zsb2F0KGNscywgZik6CiAgICAgICAgICIiIkNvbnZlcnRzIGEgZmxvYXQgdG8gYSBkZWNpbWFsIG51bWJlciwgZXhhY3RseS4KIApAQCAtNzQ0LDcgKzc0Myw2IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gY2xzKHJlc3VsdCkKLSAgICBmcm9tX2Zsb2F0ID0gY2xhc3NtZXRob2QoZnJvbV9mbG9hdCkKIAogICAgIGRlZiBfaXNuYW4oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgbnVtYmVyIGlzIG5vdCBhY3R1YWxseSBvbmUuCmRpZmYgLS1naXQgYS9MaWIvZGlmZmxpYi5weSBiL0xpYi9kaWZmbGliLnB5CmluZGV4IGZlOTRjYzQuLjE1OWNiZTQgMTAwNjQ0Ci0tLSBhL0xpYi9kaWZmbGliLnB5CisrKyBiL0xpYi9kaWZmbGliLnB5CkBAIC0zMzYsMjAgKzMzNiw2IEBACiAgICAgICAgICAgICBmb3IgZWx0IGluIHBvcHVsYXI6ICMgZGl0dG87IGFzIGZhc3QgZm9yIDElIGRlbGV0aW9uCiAgICAgICAgICAgICAgICAgZGVsIGIyaltlbHRdCiAKLSAgICBkZWYgaXNianVuayhzZWxmLCBpdGVtKToKLSAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5ianVuaycuIgotICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNianVuayhpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYmp1bmsnIGluc3RlYWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0gICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYmp1bmsKLQotICAgIGRlZiBpc2Jwb3B1bGFyKHNlbGYsIGl0ZW0pOgotICAgICAgICAiRGVwcmVjYXRlZDsgdXNlICdpdGVtIGluIFNlcXVlbmNlTWF0Y2hlcigpLmJwb3B1bGFyJy4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4oIidTZXF1ZW5jZU1hdGNoZXIoKS5pc2Jwb3B1bGFyKGl0ZW0pJyBpcyBkZXByZWNhdGVkO1xuIgotICAgICAgICAgICAgICAgICAgICAgICJ1c2UgJ2l0ZW0gaW4gU01pbnN0YW5jZS5icG9wdWxhcicgaW5zdGVhZC4iLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5icG9wdWxhcgotCiAgICAgZGVmIGZpbmRfbG9uZ2VzdF9tYXRjaChzZWxmLCBhbG8sIGFoaSwgYmxvLCBiaGkpOgogICAgICAgICAiIiJGaW5kIGxvbmdlc3QgbWF0Y2hpbmcgYmxvY2sgaW4gYVthbG86YWhpXSBhbmQgYltibG86YmhpXS4KIApAQCAtOTIyLDggKzkwOCw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gdGFnICVyJyAlICh0YWcsKSkKIAotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfZHVtcChzZWxmLCB0YWcsIHgsIGxvLCBoaSk6CiAgICAgICAgICIiIkdlbmVyYXRlIGNvbXBhcmlzb24gcmVzdWx0cyBmb3IgYSBzYW1lLXRhZ2dlZCByYW5nZS4iIiIKQEAgLTk0Miw4ICs5MjcsNyBAQAogICAgICAgICAgICAgc2Vjb25kID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCiAgICAgICAgIGZvciBnIGluIGZpcnN0LCBzZWNvbmQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9mYW5jeV9yZXBsYWNlKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIHIiIiIKQEAgLTk5Nyw4ICs5ODEsNyBAQAogICAgICAgICAgICAgIyBubyBub24taWRlbnRpY2FsICJwcmV0dHkgY2xvc2UiIHBhaXIKICAgICAgICAgICAgIGlmIGVxaSBpcyBOb25lOgogICAgICAgICAgICAgICAgICMgbm8gaWRlbnRpY2FsIHBhaXIgZWl0aGVyIC0tIHRyZWF0IGl0IGFzIGEgc3RyYWlnaHQgcmVwbGFjZQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3BsYWluX3JlcGxhY2UoYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcGxhaW5fcmVwbGFjZShhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAjIG5vIGNsb3NlIHBhaXIsIGJ1dCBhbiBpZGVudGljYWwgcGFpciAtLSBzeW5jaCB1cCBvbiB0aGF0CiAgICAgICAgICAgICBiZXN0X2ksIGJlc3RfaiwgYmVzdF9yYXRpbyA9IGVxaSwgZXFqLCAxLjAKQEAgLTEwMTAsOCArOTkzLDcgQEAKICAgICAgICAgIyBpZGVudGljYWwKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYmVmb3JlIHRoZSBzeW5jaCBwb2ludAotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKQogCiAgICAgICAgICMgZG8gaW50cmFsaW5lIG1hcmtpbmcgb24gdGhlIHN5bmNoIHBhaXIKICAgICAgICAgYWVsdCwgYmVsdCA9IGFbYmVzdF9pXSwgYltiZXN0X2pdCkBAIC0xMDMzLDE1ICsxMDE1LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGJ0YWdzICs9ICcgJyAqIGxiCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biB0YWcgJXInICUgKHRhZywpKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIHRoZSBzeW5jaCBwYWlyIGlzIGlkZW50aWNhbAogICAgICAgICAgICAgeWllbGQgJyAgJyArIGFlbHQKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYWZ0ZXIgdGhlIHN5bmNoIHBvaW50Ci0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBiZXN0X2krMSwgYWhpLCBiLCBiZXN0X2orMSwgYmhpKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYmVzdF9pKzEsIGFoaSwgYiwgYmVzdF9qKzEsIGJoaSkKIAogICAgIGRlZiBfZmFuY3lfaGVscGVyKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIGcgPSBbXQpAQCAtMTA1Myw4ICsxMDMzLDcgQEAKICAgICAgICAgZWxpZiBibG8gPCBiaGk6CiAgICAgICAgICAgICBnID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCi0gICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9xZm9ybWF0KHNlbGYsIGFsaW5lLCBibGluZSwgYXRhZ3MsIGJ0YWdzKToKICAgICAgICAgciIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpcy5weSBiL0xpYi9kaXMucHkKaW5kZXggNTQzZmRjNy4uODFjYmU3ZiAxMDA2NDQKLS0tIGEvTGliL2Rpcy5weQorKysgYi9MaWIvZGlzLnB5CkBAIC0yLDEyICsyLDE1IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KIAogZnJvbSBvcGNvZGUgaW1wb3J0ICoKIGZyb20gb3Bjb2RlIGltcG9ydCBfX2FsbF9fIGFzIF9vcGNvZGVzX2FsbAogCiBfX2FsbF9fID0gWyJjb2RlX2luZm8iLCAiZGlzIiwgImRpc2Fzc2VtYmxlIiwgImRpc3RiIiwgImRpc2NvIiwKLSAgICAgICAgICAgImZpbmRsaW5lc3RhcnRzIiwgImZpbmRsYWJlbHMiLCAic2hvd19jb2RlIl0gKyBfb3Bjb2Rlc19hbGwKKyAgICAgICAgICAgImZpbmRsaW5lc3RhcnRzIiwgImZpbmRsYWJlbHMiLCAic2hvd19jb2RlIiwKKyAgICAgICAgICAgImdldF9pbnN0cnVjdGlvbnMiLCAiSW5zdHJ1Y3Rpb24iLCAiQnl0ZWNvZGUiXSArIF9vcGNvZGVzX2FsbAogZGVsIF9vcGNvZGVzX2FsbAogCiBfaGF2ZV9jb2RlID0gKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuQ29kZVR5cGUsIHR5cGUpCkBAIC0yNSwxNCArMjgsMTQgQEAKICAgICAgICAgYyA9IGNvbXBpbGUoc291cmNlLCBuYW1lLCAnZXhlYycpCiAgICAgcmV0dXJuIGMKIAotZGVmIGRpcyh4PU5vbmUpOgorZGVmIGRpcyh4PU5vbmUsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiRGlzYXNzZW1ibGUgY2xhc3NlcywgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLgogCiAgICAgV2l0aCBubyBhcmd1bWVudCwgZGlzYXNzZW1ibGUgdGhlIGxhc3QgdHJhY2ViYWNrLgogCiAgICAgIiIiCiAgICAgaWYgeCBpcyBOb25lOgotICAgICAgICBkaXN0YigpCisgICAgICAgIGRpc3RiKGZpbGU9ZmlsZSkKICAgICAgICAgcmV0dXJuCiAgICAgaWYgaGFzYXR0cih4LCAnX19mdW5jX18nKTogICMgTWV0aG9kCiAgICAgICAgIHggPSB4Ll9fZnVuY19fCkBAIC00MiwyMyArNDUsMjMgQEAKICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoeC5fX2RpY3RfXy5pdGVtcygpKQogICAgICAgICBmb3IgbmFtZSwgeDEgaW4gaXRlbXM6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgxLCBfaGF2ZV9jb2RlKToKLSAgICAgICAgICAgICAgICBwcmludCgiRGlzYXNzZW1ibHkgb2YgJXM6IiAlIG5hbWUpCisgICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lLCBmaWxlPWZpbGUpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkaXMoeDEpCisgICAgICAgICAgICAgICAgICAgIGRpcyh4MSwgZmlsZT1maWxlKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgICAgICBwcmludCgiU29ycnk6IiwgbXNnKQotICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNvcnJ5OiIsIG1zZywgZmlsZT1maWxlKQorICAgICAgICAgICAgICAgIHByaW50KGZpbGU9ZmlsZSkKICAgICBlbGlmIGhhc2F0dHIoeCwgJ2NvX2NvZGUnKTogIyBDb2RlIG9iamVjdAotICAgICAgICBkaXNhc3NlbWJsZSh4KQorICAgICAgICBkaXNhc3NlbWJsZSh4LCBmaWxlPWZpbGUpCiAgICAgZWxpZiBpc2luc3RhbmNlKHgsIChieXRlcywgYnl0ZWFycmF5KSk6ICMgUmF3IGJ5dGVjb2RlCi0gICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyh4KQorICAgICAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoeCwgZmlsZT1maWxlKQogICAgIGVsaWYgaXNpbnN0YW5jZSh4LCBzdHIpOiAgICAjIFNvdXJjZSBjb2RlCi0gICAgICAgIF9kaXNhc3NlbWJsZV9zdHIoeCkKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX3N0cih4LCBmaWxlPWZpbGUpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHgpLl9fbmFtZV9fKQogCi1kZWYgZGlzdGIodGI9Tm9uZSk6CitkZWYgZGlzdGIodGI9Tm9uZSwgKiwgZmlsZT1Ob25lKToKICAgICAiIiJEaXNhc3NlbWJsZSBhIHRyYWNlYmFjayAoZGVmYXVsdDogbGFzdCB0cmFjZWJhY2spLiIiIgogICAgIGlmIHRiIGlzIE5vbmU6CiAgICAgICAgIHRyeToKQEAgLTY2LDcgKzY5LDcgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJubyBsYXN0IHRyYWNlYmFjayB0byBkaXNhc3NlbWJsZSIpCiAgICAgICAgIHdoaWxlIHRiLnRiX25leHQ6IHRiID0gdGIudGJfbmV4dAotICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGkpCisgICAgZGlzYXNzZW1ibGUodGIudGJfZnJhbWUuZl9jb2RlLCB0Yi50Yl9sYXN0aSwgZmlsZT1maWxlKQogCiAjIFRoZSBpbnNwZWN0IG1vZHVsZSBpbnRlcnJvZ2F0ZXMgdGhpcyBkaWN0aW9uYXJ5IHRvIGJ1aWxkIGl0cwogIyBsaXN0IG9mIENPXyogY29uc3RhbnRzLiBJdCBpcyBhbHNvIHVzZWQgYnkgcHJldHR5X2ZsYWdzIHRvCkBAIC05NSwxOSArOTgsMjIgQEAKICAgICAgICAgbmFtZXMuYXBwZW5kKGhleChmbGFncykpCiAgICAgcmV0dXJuICIsICIuam9pbihuYW1lcykKIAotZGVmIGNvZGVfaW5mbyh4KToKLSAgICAiIiJGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuIiIiCitkZWYgX2dldF9jb2RlX29iamVjdCh4KToKKyAgICAiIiJIZWxwZXIgdG8gaGFuZGxlIG1ldGhvZHMsIGZ1bmN0aW9ucywgc3RyaW5ncyBhbmQgcmF3IGNvZGUgb2JqZWN0cyIiIgogICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICMgTWV0aG9kCiAgICAgICAgIHggPSB4Ll9fZnVuY19fCiAgICAgaWYgaGFzYXR0cih4LCAnX19jb2RlX18nKTogIyBGdW5jdGlvbgogICAgICAgICB4ID0geC5fX2NvZGVfXwogICAgIGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgICMgU291cmNlIGNvZGUKLSAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGNvZGVfaW5mbz4iKQorICAgICAgICB4ID0gX3RyeV9jb21waWxlKHgsICI8ZGlzYXNzZW1ibHk+IikKICAgICBpZiBoYXNhdHRyKHgsICdjb19jb2RlJyk6ICAjIENvZGUgb2JqZWN0Ci0gICAgICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyh4KQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuIHgKKyAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKKyAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKKworZGVmIGNvZGVfaW5mbyh4KToKKyAgICAiIiJGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuIiIiCisgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKF9nZXRfY29kZV9vYmplY3QoeCkpCiAKIGRlZiBfZm9ybWF0X2NvZGVfaW5mbyhjbyk6CiAgICAgbGluZXMgPSBbXQpAQCAtMTQwLDEwNiArMTQ2LDIwNiBAQAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIlNGQ6ICVzIiAlIGlfbikKICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQogCi1kZWYgc2hvd19jb2RlKGNvKToKLSAgICAiIiJQcmludCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZSB0byBzdGRvdXQuIiIiCi0gICAgcHJpbnQoY29kZV9pbmZvKGNvKSkKK2RlZiBzaG93X2NvZGUoY28sICosIGZpbGU9Tm9uZSk6CisgICAgIiIiUHJpbnQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUgdG8gKmZpbGUqLgogCi1kZWYgZGlzYXNzZW1ibGUoY28sIGxhc3RpPS0xKToKLSAgICAiIiJEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LiIiIgotICAgIGNvZGUgPSBjby5jb19jb2RlCi0gICAgbGFiZWxzID0gZmluZGxhYmVscyhjb2RlKQorICAgIElmICpmaWxlKiBpcyBub3QgcHJvdmlkZWQsIHRoZSBvdXRwdXQgaXMgcHJpbnRlZCBvbiBzdGRvdXQuCisgICAgIiIiCisgICAgcHJpbnQoY29kZV9pbmZvKGNvKSwgZmlsZT1maWxlKQorCitfSW5zdHJ1Y3Rpb24gPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCJfSW5zdHJ1Y3Rpb24iLAorICAgICAib3BuYW1lIG9wY29kZSBhcmcgYXJndmFsIGFyZ3JlcHIgb2Zmc2V0IHN0YXJ0c19saW5lIGlzX2p1bXBfdGFyZ2V0IikKKworY2xhc3MgSW5zdHJ1Y3Rpb24oX0luc3RydWN0aW9uKToKKyAgICAiIiJEZXRhaWxzIGZvciBhIGJ5dGVjb2RlIG9wZXJhdGlvbgorCisgICAgICAgRGVmaW5lZCBmaWVsZHM6CisgICAgICAgICBvcG5hbWUgLSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBvcGVyYXRpb24KKyAgICAgICAgIG9wY29kZSAtIG51bWVyaWMgY29kZSBmb3Igb3BlcmF0aW9uCisgICAgICAgICBhcmcgLSBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKyAgICAgICAgIGFyZ3ZhbCAtIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKyAgICAgICAgIGFyZ3JlcHIgLSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKyAgICAgICAgIG9mZnNldCAtIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKyAgICAgICAgIHN0YXJ0c19saW5lIC0gbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorICAgICAgICAgaXNfanVtcF90YXJnZXQgLSBUcnVlIGlmIG90aGVyIGNvZGUganVtcHMgdG8gaGVyZSwgb3RoZXJ3aXNlIEZhbHNlCisgICAgIiIiCisKKyAgICBkZWYgX2Rpc2Fzc2VtYmxlKHNlbGYsIGxpbmVub193aWR0aD0zLCBtYXJrX2FzX2N1cnJlbnQ9RmFsc2UpOgorICAgICAgICAiIiJGb3JtYXQgaW5zdHJ1Y3Rpb24gZGV0YWlscyBmb3IgaW5jbHVzaW9uIGluIGRpc2Fzc2VtYmx5IG91dHB1dAorCisgICAgICAgICpsaW5lbm9fd2lkdGgqIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lIG51bWJlciBmaWVsZCAoMCBvbWl0cyBpdCkKKyAgICAgICAgKm1hcmtfYXNfY3VycmVudCogaW5zZXJ0cyBhICctLT4nIG1hcmtlciBhcnJvdyBhcyBwYXJ0IG9mIHRoZSBsaW5lCisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgPSBbXQorICAgICAgICAjIENvbHVtbjogU291cmNlIGNvZGUgbGluZSBudW1iZXIKKyAgICAgICAgaWYgbGluZW5vX3dpZHRoOgorICAgICAgICAgICAgaWYgc2VsZi5zdGFydHNfbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lbm9fZm10ID0gIiUlJWRkIiAlIGxpbmVub193aWR0aAorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQobGluZW5vX2ZtdCAlIHNlbGYuc3RhcnRzX2xpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAnICogbGluZW5vX3dpZHRoKQorICAgICAgICAjIENvbHVtbjogQ3VycmVudCBpbnN0cnVjdGlvbiBpbmRpY2F0b3IKKyAgICAgICAgaWYgbWFya19hc19jdXJyZW50OgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnLS0+JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAgICcpCisgICAgICAgICMgQ29sdW1uOiBKdW1wIHRhcmdldCBtYXJrZXIKKyAgICAgICAgaWYgc2VsZi5pc19qdW1wX3RhcmdldDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJz4+JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAgJykKKyAgICAgICAgIyBDb2x1bW46IEluc3RydWN0aW9uIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGNvZGUgc2VxdWVuY2UKKyAgICAgICAgZmllbGRzLmFwcGVuZChyZXByKHNlbGYub2Zmc2V0KS5yanVzdCg0KSkKKyAgICAgICAgIyBDb2x1bW46IE9wY29kZSBuYW1lCisgICAgICAgIGZpZWxkcy5hcHBlbmQoc2VsZi5vcG5hbWUubGp1c3QoMjApKQorICAgICAgICAjIENvbHVtbjogT3Bjb2RlIGFyZ3VtZW50CisgICAgICAgIGlmIHNlbGYuYXJnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChyZXByKHNlbGYuYXJnKS5yanVzdCg1KSkKKyAgICAgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgYXJndW1lbnQgZGV0YWlscworICAgICAgICAgICAgaWYgc2VsZi5hcmdyZXByOgorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJygnICsgc2VsZi5hcmdyZXByICsgJyknKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4oZmllbGRzKS5yc3RyaXAoKQorCisKK2RlZiBnZXRfaW5zdHJ1Y3Rpb25zKHgsICosIGZpcnN0X2xpbmU9Tm9uZSk6CisgICAgIiIiSXRlcmF0b3IgZm9yIHRoZSBvcGNvZGVzIGluIG1ldGhvZHMsIGZ1bmN0aW9ucyBvciBjb2RlCisKKyAgICBHZW5lcmF0ZXMgYSBzZXJpZXMgb2YgSW5zdHJ1Y3Rpb24gbmFtZWQgdHVwbGVzIGdpdmluZyB0aGUgZGV0YWlscyBvZgorICAgIGVhY2ggb3BlcmF0aW9ucyBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgIElmICpmaXJzdF9saW5lKiBpcyBub3QgTm9uZSwgaXQgaW5kaWNhdGVzIHRoZSBsaW5lIG51bWJlciB0aGF0IHNob3VsZAorICAgIGJlIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLgorICAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgICB0aGUgZGlzYXNzZW1ibGVkIGNvZGUgb2JqZWN0LgorICAgICIiIgorICAgIGNvID0gX2dldF9jb2RlX29iamVjdCh4KQorICAgIGNlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCiAgICAgbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgIGlmIGZpcnN0X2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgIGxpbmVfb2Zmc2V0ID0gZmlyc3RfbGluZSAtIGNvLmNvX2ZpcnN0bGluZW5vCisgICAgZWxzZToKKyAgICAgICAgbGluZV9vZmZzZXQgPSAwCisgICAgcmV0dXJuIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvLmNvX2NvZGUsIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjZWxsX25hbWVzLCBsaW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldCkKKworZGVmIF9nZXRfY29uc3RfaW5mbyhjb25zdF9pbmRleCwgY29uc3RfbGlzdCk6CisgICAgIiIiSGVscGVyIHRvIGdldCBvcHRpb25hbCBkZXRhaWxzIGFib3V0IGNvbnN0IHJlZmVyZW5jZXMKKworICAgICAgIFJldHVybnMgdGhlIGRlcmVmZXJlbmNlZCBjb25zdGFudCBhbmQgaXRzIHJlcHIgaWYgdGhlIGNvbnN0YW50CisgICAgICAgbGlzdCBpcyBkZWZpbmVkLgorICAgICAgIE90aGVyd2lzZSByZXR1cm5zIHRoZSBjb25zdGFudCBpbmRleCBhbmQgaXRzIHJlcHIoKS4KKyAgICAiIiIKKyAgICBhcmd2YWwgPSBjb25zdF9pbmRleAorICAgIGlmIGNvbnN0X2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3ZhbCA9IGNvbnN0X2xpc3RbY29uc3RfaW5kZXhdCisgICAgcmV0dXJuIGFyZ3ZhbCwgcmVwcihhcmd2YWwpCisKK2RlZiBfZ2V0X25hbWVfaW5mbyhuYW1lX2luZGV4LCBuYW1lX2xpc3QpOgorICAgICIiIkhlbHBlciB0byBnZXQgb3B0aW9uYWwgZGV0YWlscyBhYm91dCBuYW1lZCByZWZlcmVuY2VzCisKKyAgICAgICBSZXR1cm5zIHRoZSBkZXJlZmVyZW5jZWQgbmFtZSBhcyBib3RoIHZhbHVlIGFuZCByZXByIGlmIHRoZSBuYW1lCisgICAgICAgbGlzdCBpcyBkZWZpbmVkLgorICAgICAgIE90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIGluZGV4IGFuZCBpdHMgcmVwcigpLgorICAgICIiIgorICAgIGFyZ3ZhbCA9IG5hbWVfaW5kZXgKKyAgICBpZiBuYW1lX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3ZhbCA9IG5hbWVfbGlzdFtuYW1lX2luZGV4XQorICAgICAgICBhcmdyZXByID0gYXJndmFsCisgICAgZWxzZToKKyAgICAgICAgYXJncmVwciA9IHJlcHIoYXJndmFsKQorICAgIHJldHVybiBhcmd2YWwsIGFyZ3JlcHIKKworCitkZWYgX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY29kZSwgdmFybmFtZXM9Tm9uZSwgbmFtZXM9Tm9uZSwgY29uc3RhbnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgY2VsbHM9Tm9uZSwgbGluZXN0YXJ0cz1Ob25lLCBsaW5lX29mZnNldD0wKToKKyAgICAiIiJJdGVyYXRlIG92ZXIgdGhlIGluc3RydWN0aW9ucyBpbiBhIGJ5dGVjb2RlIHN0cmluZy4KKworICAgIEdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIEluc3RydWN0aW9uIG5hbWVkdHVwbGVzIGdpdmluZyB0aGUgZGV0YWlscyBvZiBlYWNoCisgICAgb3Bjb2RlLiAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29kZSdzIHJ1bnRpbWUgZW52aXJvbm1lbnQKKyAgICAoZS5nLiB2YXJpYWJsZSBuYW1lcywgY29uc3RhbnRzKSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIG9wdGlvbmFsCisgICAgYXJndW1lbnRzLgorCisgICAgIiIiCisgICAgbGFiZWxzID0gZmluZGxhYmVscyhjb2RlKQorICAgIGV4dGVuZGVkX2FyZyA9IDAKKyAgICBzdGFydHNfbGluZSA9IE5vbmUKKyAgICBmcmVlID0gTm9uZQorICAgICMgZW51bWVyYXRlKCkgaXMgbm90IGFuIG9wdGlvbiwgc2luY2Ugd2Ugc29tZXRpbWVzIHByb2Nlc3MKKyAgICAjIG11bHRpcGxlIGVsZW1lbnRzIG9uIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB0aGUgbG9vcAogICAgIG4gPSBsZW4oY29kZSkKICAgICBpID0gMAotICAgIGV4dGVuZGVkX2FyZyA9IDAKLSAgICBmcmVlID0gTm9uZQogICAgIHdoaWxlIGkgPCBuOgogICAgICAgICBvcCA9IGNvZGVbaV0KLSAgICAgICAgaWYgaSBpbiBsaW5lc3RhcnRzOgotICAgICAgICAgICAgaWYgaSA+IDA6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoIiUzZCIgJSBsaW5lc3RhcnRzW2ldLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJyAgICcsIGVuZD0nICcpCi0KLSAgICAgICAgaWYgaSA9PSBsYXN0aTogcHJpbnQoJy0tPicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICAnLCBlbmQ9JyAnKQotICAgICAgICBpZiBpIGluIGxhYmVsczogcHJpbnQoJz4+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgJywgZW5kPScgJykKLSAgICAgICAgcHJpbnQocmVwcihpKS5yanVzdCg0KSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQob3BuYW1lW29wXS5sanVzdCgyMCksIGVuZD0nICcpCisgICAgICAgIG9mZnNldCA9IGkKKyAgICAgICAgaWYgbGluZXN0YXJ0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YXJ0c19saW5lID0gbGluZXN0YXJ0cy5nZXQoaSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHN0YXJ0c19saW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0YXJ0c19saW5lICs9IGxpbmVfb2Zmc2V0CisgICAgICAgIGlzX2p1bXBfdGFyZ2V0ID0gaSBpbiBsYWJlbHMKICAgICAgICAgaSA9IGkrMQorICAgICAgICBhcmcgPSBOb25lCisgICAgICAgIGFyZ3ZhbCA9IE5vbmUKKyAgICAgICAgYXJncmVwciA9ICcnCiAgICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6Ci0gICAgICAgICAgICBvcGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2ICsgZXh0ZW5kZWRfYXJnCisgICAgICAgICAgICBhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZwogICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gMAogICAgICAgICAgICAgaSA9IGkrMgogICAgICAgICAgICAgaWYgb3AgPT0gRVhURU5ERURfQVJHOgotICAgICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IG9wYXJnKjY1NTM2Ci0gICAgICAgICAgICBwcmludChyZXByKG9wYXJnKS5yanVzdCg1KSwgZW5kPScgJykKKyAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSBhcmcqNjU1MzYKKyAgICAgICAgICAgICMgIFNldCBhcmd2YWwgdG8gdGhlIGRlcmVmZXJlbmNlZCB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgd2hlbgorICAgICAgICAgICAgIyAgYXZhaWxhYmUsIGFuZCBhcmdyZXByIHRvIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYXJndmFsLgorICAgICAgICAgICAgIyAgICBfZGlzYXNzZW1ibGVfYnl0ZXMgbmVlZHMgdGhlIHN0cmluZyByZXByIG9mIHRoZQorICAgICAgICAgICAgIyAgICByYXcgbmFtZSBpbmRleCBmb3IgTE9BRF9HTE9CQUwsIExPQURfQ09OU1QsIGV0Yy4KKyAgICAgICAgICAgIGFyZ3ZhbCA9IGFyZwogICAgICAgICAgICAgaWYgb3AgaW4gaGFzY29uc3Q6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjby5jb19jb25zdHNbb3BhcmddKSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X2NvbnN0X2luZm8oYXJnLCBjb25zdGFudHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hbWU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY28uY29fbmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgbmFtZXMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyh0byAnICsgcmVwcihpICsgb3BhcmcpICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCA9IGkgKyBhcmcKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gInRvICIgKyByZXByKGFyZ3ZhbCkKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY28uY29fdmFybmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgdmFybmFtZXMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2NvbXBhcmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY21wX29wW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBjbXBfb3BbYXJnXQorICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSBhcmd2YWwKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzZnJlZToKLSAgICAgICAgICAgICAgICBpZiBmcmVlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCi0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgZnJlZVtvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9uYW1lX2luZm8oYXJnLCBjZWxscykKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbmFyZ3M6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyglZCBwb3NpdGlvbmFsLCAlZCBrZXl3b3JkIHBhaXIpJwotICAgICAgICAgICAgICAgICAgICAgICUgKGNvZGVbaS0yXSwgY29kZVtpLTFdKSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSAiJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyIiAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSkKKyAgICAgICAgeWllbGQgSW5zdHJ1Y3Rpb24ob3BuYW1lW29wXSwgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgYXJndmFsLCBhcmdyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHN0YXJ0c19saW5lLCBpc19qdW1wX3RhcmdldCkKKworZGVmIGRpc2Fzc2VtYmxlKGNvLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKToKKyAgICAiIiJEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LiIiIgorICAgIGNlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCisgICAgbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCBsYXN0aSwgY28uY29fdmFybmFtZXMsIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICBjby5jb19jb25zdHMsIGNlbGxfbmFtZXMsIGxpbmVzdGFydHMsIGZpbGU9ZmlsZSkKIAogZGVmIF9kaXNhc3NlbWJsZV9ieXRlcyhjb2RlLCBsYXN0aT0tMSwgdmFybmFtZXM9Tm9uZSwgbmFtZXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzPU5vbmUpOgotICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKLSAgICBuID0gbGVuKGNvZGUpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbjoKLSAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIGlmIGkgPT0gbGFzdGk6IHByaW50KCctLT4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAgJywgZW5kPScgJykKLSAgICAgICAgaWYgaSBpbiBsYWJlbHM6IHByaW50KCc+PicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICcsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHJlcHIoaSkucmp1c3QoNCksIGVuZD0nICcpCi0gICAgICAgIHByaW50KG9wbmFtZVtvcF0ubGp1c3QoMTUpLCBlbmQ9JyAnKQotICAgICAgICBpID0gaSsxCi0gICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6Ci0gICAgICAgICAgICBvcGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2Ci0gICAgICAgICAgICBpID0gaSsyCi0gICAgICAgICAgICBwcmludChyZXByKG9wYXJnKS5yanVzdCg1KSwgZW5kPScgJykKLSAgICAgICAgICAgIGlmIG9wIGluIGhhc2NvbnN0OgotICAgICAgICAgICAgICAgIGlmIGNvbnN0YW50czoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjb25zdGFudHNbb3BhcmddKSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKSclb3BhcmcsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hbWU6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIG5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKSclb3BhcmcsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyh0byAnICsgcmVwcihpICsgb3BhcmcpICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNsb2NhbDoKLSAgICAgICAgICAgICAgICBpZiB2YXJuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgdmFybmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJWQpJyAlIG9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNjb21wYXJlOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIHByaW50KCcoJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyKScKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSksIGVuZD0nICcpCi0gICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzPU5vbmUsIGNlbGxzPU5vbmUsIGxpbmVzdGFydHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKiwgZmlsZT1Ob25lLCBsaW5lX29mZnNldD0wKToKKyAgICAjIE9taXQgdGhlIGxpbmUgbnVtYmVyIGNvbHVtbiBlbnRpcmVseSBpZiB3ZSBoYXZlIG5vIGxpbmUgbnVtYmVyIGluZm8KKyAgICBzaG93X2xpbmVubyA9IGxpbmVzdGFydHMgaXMgbm90IE5vbmUKKyAgICAjIFRPRE8/OiBBZGp1c3Qgd2lkdGggdXB3YXJkcyBpZiBtYXgobGluZXN0YXJ0cy52YWx1ZXMoKSkgPj0gMTAwMD8KKyAgICBsaW5lbm9fd2lkdGggPSAzIGlmIHNob3dfbGluZW5vIGVsc2UgMAorICAgIGZvciBpbnN0ciBpbiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjb2RlLCB2YXJuYW1lcywgbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cywgY2VsbHMsIGxpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PWxpbmVfb2Zmc2V0KToKKyAgICAgICAgbmV3X3NvdXJjZV9saW5lID0gKHNob3dfbGluZW5vIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIuc3RhcnRzX2xpbmUgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ci5vZmZzZXQgPiAwKQorICAgICAgICBpZiBuZXdfc291cmNlX2xpbmU6CisgICAgICAgICAgICBwcmludChmaWxlPWZpbGUpCisgICAgICAgIGlzX2N1cnJlbnRfaW5zdHIgPSBpbnN0ci5vZmZzZXQgPT0gbGFzdGkKKyAgICAgICAgcHJpbnQoaW5zdHIuX2Rpc2Fzc2VtYmxlKGxpbmVub193aWR0aCwgaXNfY3VycmVudF9pbnN0ciksIGZpbGU9ZmlsZSkKIAotZGVmIF9kaXNhc3NlbWJsZV9zdHIoc291cmNlKToKK2RlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSwgKiwgZmlsZT1Ob25lKToKICAgICAiIiJDb21waWxlIHRoZSBzb3VyY2Ugc3RyaW5nLCB0aGVuIGRpc2Fzc2VtYmxlIHRoZSBjb2RlIG9iamVjdC4iIiIKLSAgICBkaXNhc3NlbWJsZShfdHJ5X2NvbXBpbGUoc291cmNlLCAnPGRpcz4nKSkKKyAgICBkaXNhc3NlbWJsZShfdHJ5X2NvbXBpbGUoc291cmNlLCAnPGRpcz4nKSwgZmlsZT1maWxlKQogCiBkaXNjbyA9IGRpc2Fzc2VtYmxlICAgICAgICAgICAgICAgICAgICAgIyBYWFggRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAKQEAgLTI1MCwxOSArMzU2LDIxIEBACiAKICAgICAiIiIKICAgICBsYWJlbHMgPSBbXQorICAgICMgZW51bWVyYXRlKCkgaXMgbm90IGFuIG9wdGlvbiwgc2luY2Ugd2Ugc29tZXRpbWVzIHByb2Nlc3MKKyAgICAjIG11bHRpcGxlIGVsZW1lbnRzIG9uIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB0aGUgbG9vcAogICAgIG4gPSBsZW4oY29kZSkKICAgICBpID0gMAogICAgIHdoaWxlIGkgPCBuOgogICAgICAgICBvcCA9IGNvZGVbaV0KICAgICAgICAgaSA9IGkrMQogICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgorICAgICAgICAgICAgYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKICAgICAgICAgICAgIGkgPSBpKzIKICAgICAgICAgICAgIGxhYmVsID0gLTEKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgbGFiZWwgPSBpK29wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBpK2FyZwogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqYWJzOgotICAgICAgICAgICAgICAgIGxhYmVsID0gb3BhcmcKKyAgICAgICAgICAgICAgICBsYWJlbCA9IGFyZwogICAgICAgICAgICAgaWYgbGFiZWwgPj0gMDoKICAgICAgICAgICAgICAgICBpZiBsYWJlbCBub3QgaW4gbGFiZWxzOgogICAgICAgICAgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKQpAQCAtMjkwLDI3ICszOTgsNzcgQEAKICAgICBpZiBsaW5lbm8gIT0gbGFzdGxpbmVubzoKICAgICAgICAgeWllbGQgKGFkZHIsIGxpbmVubykKIAorY2xhc3MgQnl0ZWNvZGU6CisgICAgIiIiVGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgb2YgYSBwaWVjZSBvZiBjb2RlCisKKyAgICBJbnN0YW50aWF0ZSB0aGlzIHdpdGggYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2YgY29kZSwgb3IgYSBjb2RlIG9iamVjdAorICAgIChhcyByZXR1cm5lZCBieSBjb21waWxlKCkpLgorCisgICAgSXRlcmF0aW5nIG92ZXIgdGhpcyB5aWVsZHMgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYXMgSW5zdHJ1Y3Rpb24gaW5zdGFuY2VzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpOgorICAgICAgICBzZWxmLmNvZGVvYmogPSBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICAgICAgaWYgZmlyc3RfbGluZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lID0gY28uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lID0gZmlyc3RfbGluZQorICAgICAgICAgICAgc2VsZi5fbGluZV9vZmZzZXQgPSBmaXJzdF9saW5lIC0gY28uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgc2VsZi5fY2VsbF9uYW1lcyA9IGNvLmNvX2NlbGx2YXJzICsgY28uY29fZnJlZXZhcnMKKyAgICAgICAgc2VsZi5fbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgICAgICBzZWxmLl9vcmlnaW5hbF9vYmplY3QgPSB4CisgICAgICAgIHNlbGYuY3VycmVudF9vZmZzZXQgPSBjdXJyZW50X29mZnNldAorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBjbyA9IHNlbGYuY29kZW9iagorICAgICAgICByZXR1cm4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY28uY29fY29kZSwgY28uY29fdmFybmFtZXMsIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBzZWxmLl9jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PXNlbGYuX2xpbmVfb2Zmc2V0KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9KHshcn0pIi5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9vYmplY3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV90cmFjZWJhY2soY2xzLCB0Yik6CisgICAgICAgICIiIiBDb25zdHJ1Y3QgYSBCeXRlY29kZSBmcm9tIHRoZSBnaXZlbiB0cmFjZWJhY2sgIiIiCisgICAgICAgIHdoaWxlIHRiLnRiX25leHQ6CisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICAgICAgcmV0dXJuIGNscyh0Yi50Yl9mcmFtZS5mX2NvZGUsIGN1cnJlbnRfb2Zmc2V0PXRiLnRiX2xhc3RpKQorCisgICAgZGVmIGluZm8oc2VsZik6CisgICAgICAgICIiIlJldHVybiBmb3JtYXR0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUgb2JqZWN0LiIiIgorICAgICAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oc2VsZi5jb2Rlb2JqKQorCisgICAgZGVmIGRpcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZm9ybWF0dGVkIHZpZXcgb2YgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMuIiIiCisgICAgICAgIGNvID0gc2VsZi5jb2Rlb2JqCisgICAgICAgIGlmIHNlbGYuY3VycmVudF9vZmZzZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLmN1cnJlbnRfb2Zmc2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvZmZzZXQgPSAtMQorICAgICAgICB3aXRoIGlvLlN0cmluZ0lPKCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKGNvLmNvX2NvZGUsIHZhcm5hbWVzPWNvLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzPWNvLmNvX25hbWVzLCBjb25zdGFudHM9Y28uY29fY29uc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzPXNlbGYuX2NlbGxfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXN0YXJ0cz1zZWxmLl9saW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PXNlbGYuX2xpbmVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RpPW9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKIGRlZiBfdGVzdCgpOgogICAgICIiIlNpbXBsZSB0ZXN0IHByb2dyYW0gdG8gZGlzYXNzZW1ibGUgYSBmaWxlLiIiIgotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgidXNhZ2U6IHB5dGhvbiBkaXMucHkgWy18ZmlsZV1cbiIpCi0gICAgICAgICAgICBzeXMuZXhpdCgyKQotICAgICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgICAgIGlmIG5vdCBmbiBvciBmbiA9PSAiLSI6Ci0gICAgICAgICAgICBmbiA9IE5vbmUKLSAgICBlbHNlOgotICAgICAgICBmbiA9IE5vbmUKLSAgICBpZiBmbiBpcyBOb25lOgotICAgICAgICBmID0gc3lzLnN0ZGluCi0gICAgZWxzZToKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgc291cmNlID0gZi5yZWFkKCkKLSAgICBpZiBmbiBpcyBub3QgTm9uZToKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSAiPHN0ZGluPiIKLSAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGZuLCAiZXhlYyIpCisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5maWxlJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgpLCBuYXJncz0nPycsIGRlZmF1bHQ9Jy0nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgd2l0aCBhcmdzLmluZmlsZSBhcyBpbmZpbGU6CisgICAgICAgIHNvdXJjZSA9IGluZmlsZS5yZWFkKCkKKyAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGFyZ3MuaW5maWxlLm5hbWUsICJleGVjIikKICAgICBkaXMoY29kZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkgYi9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CmluZGV4IDY3NDdhYjguLjM4YTUwODYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQpAQCAtMTMsNSArMTMsNSBAQAogIyBVcGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFB5dGhvbiByZWxlYXNlIHByb2Nlc3MuCiAjCiAjLS1zdGFydCBjb25zdGFudHMtLQotX192ZXJzaW9uX18gPSAiMy4zLjMiCitfX3ZlcnNpb25fXyA9ICIzLjQuMGIxIgogIy0tZW5kIGNvbnN0YW50cy0tCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CmluZGV4IGZjZGEwOGUuLjQ0NzBiYjAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CkBAIC0xOCwxNSArMTgsNTUgQEAKIGZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCBta3BhdGgKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAotZGVmIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKK3RyeToKKyAgICBmcm9tIHB3ZCBpbXBvcnQgZ2V0cHduYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRwd25hbSA9IE5vbmUKKwordHJ5OgorICAgIGZyb20gZ3JwIGltcG9ydCBnZXRncm5hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldGdybmFtID0gTm9uZQorCitkZWYgX2dldF9naWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhIGdpZCwgZ2l2ZW4gYSBncm91cCBuYW1lLiIiIgorICAgIGlmIGdldGdybmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0Z3JuYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgX2dldF91aWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhbiB1aWQsIGdpdmVuIGEgdXNlciBuYW1lLiIiIgorICAgIGlmIGdldHB3bmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0cHduYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgYmFzZV9kaXIsIGNvbXByZXNzPSJnemlwIiwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsCisgICAgICAgICAgICAgICAgIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICIiIkNyZWF0ZSBhIChwb3NzaWJseSBjb21wcmVzc2VkKSB0YXIgZmlsZSBmcm9tIGFsbCB0aGUgZmlsZXMgdW5kZXIKICAgICAnYmFzZV9kaXInLgogCiAgICAgJ2NvbXByZXNzJyBtdXN0IGJlICJnemlwIiAodGhlIGRlZmF1bHQpLCAiY29tcHJlc3MiLCAiYnppcDIiLCBvciBOb25lLgotICAgIEJvdGggInRhciIgYW5kIHRoZSBjb21wcmVzc2lvbiB1dGlsaXR5IG5hbWVkIGJ5ICdjb21wcmVzcycgbXVzdCBiZSBvbgotICAgIHRoZSBkZWZhdWx0IHByb2dyYW0gc2VhcmNoIHBhdGgsIHNvIHRoaXMgaXMgcHJvYmFibHkgVW5peC1zcGVjaWZpYy4KKyAgICAoY29tcHJlc3Mgd2lsbCBiZSBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIpCisKKyAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvd25lciBhbmQgYSBncm91cCBmb3IgdGhlCisgICAgYXJjaGl2ZSB0aGF0IGlzIGJlaW5nIGJ1aWx0LiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cAorICAgIHdpbGwgYmUgdXNlZC4KKwogICAgIFRoZSBvdXRwdXQgdGFyIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9kaXInICsgICIudGFyIiwgcG9zc2libHkgcGx1cwogICAgIHRoZSBhcHByb3ByaWF0ZSBjb21wcmVzc2lvbiBleHRlbnNpb24gKCIuZ3oiLCAiLmJ6MiIgb3IgIi5aIikuCisKICAgICBSZXR1cm5zIHRoZSBvdXRwdXQgZmlsZW5hbWUuCiAgICAgIiIiCiAgICAgdGFyX2NvbXByZXNzaW9uID0geydnemlwJzogJ2d6JywgJ2J6aXAyJzogJ2J6MicsIE5vbmU6ICcnLCAnY29tcHJlc3MnOiAnJ30KQEAgLTQ4LDEwICs4OCwyMyBAQAogICAgIGltcG9ydCB0YXJmaWxlICAjIGxhdGUgaW1wb3J0IHNvIFB5dGhvbiBidWlsZCBpdHNlbGYgZG9lc24ndCBicmVhawogCiAgICAgbG9nLmluZm8oJ0NyZWF0aW5nIHRhciBhcmNoaXZlJykKKworICAgIHVpZCA9IF9nZXRfdWlkKG93bmVyKQorICAgIGdpZCA9IF9nZXRfZ2lkKGdyb3VwKQorCisgICAgZGVmIF9zZXRfdWlkX2dpZCh0YXJpbmZvKToKKyAgICAgICAgaWYgZ2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby5naWQgPSBnaWQKKyAgICAgICAgICAgIHRhcmluZm8uZ25hbWUgPSBncm91cAorICAgICAgICBpZiB1aWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJpbmZvLnVpZCA9IHVpZAorICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9IG93bmVyCisgICAgICAgIHJldHVybiB0YXJpbmZvCisKICAgICBpZiBub3QgZHJ5X3J1bjoKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSwgJ3d8JXMnICUgdGFyX2NvbXByZXNzaW9uW2NvbXByZXNzXSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGFyLmFkZChiYXNlX2RpcikKKyAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIsIGZpbHRlcj1fc2V0X3VpZF9naWQpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0YXIuY2xvc2UoKQogCkBAIC0xNDAsNyArMTkzLDcgQEAKICAgICByZXR1cm4gTm9uZQogCiBkZWYgbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLCB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgIGRyeV9ydW49MCk6CisgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CiAgICAgIiIiQ3JlYXRlIGFuIGFyY2hpdmUgZmlsZSAoZWcuIHppcCBvciB0YXIpLgogCiAgICAgJ2Jhc2VfbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljCkBAIC0xNTMsNiArMjA2LDkgQEAKICAgICBpZS4gJ2Jhc2VfZGlyJyB3aWxsIGJlIHRoZSBjb21tb24gcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQKICAgICBkaXJlY3RvcmllcyBpbiB0aGUgYXJjaGl2ZS4gICdyb290X2RpcicgYW5kICdiYXNlX2RpcicgYm90aCBkZWZhdWx0CiAgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSBmaWxlLgorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBhcmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGFyY2hpdmUuIEJ5IGRlZmF1bHQsCisgICAgdXNlcyB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAuCiAgICAgIiIiCiAgICAgc2F2ZV9jd2QgPSBvcy5nZXRjd2QoKQogICAgIGlmIHJvb3RfZGlyIGlzIG5vdCBOb25lOgpAQCAtMTc0LDYgKzIzMCwxMSBAQAogICAgIGZ1bmMgPSBmb3JtYXRfaW5mb1swXQogICAgIGZvciBhcmcsIHZhbCBpbiBmb3JtYXRfaW5mb1sxXToKICAgICAgICAga3dhcmdzW2FyZ10gPSB2YWwKKworICAgIGlmIGZvcm1hdCAhPSAnemlwJzoKKyAgICAgICAga3dhcmdzWydvd25lciddID0gb3duZXIKKyAgICAgICAga3dhcmdzWydncm91cCddID0gZ3JvdXAKKwogICAgIHRyeToKICAgICAgICAgZmlsZW5hbWUgPSBmdW5jKGJhc2VfbmFtZSwgYmFzZV9kaXIsICoqa3dhcmdzKQogICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CmluZGV4IGM3OTVjOTUuLjkxMWU4NGQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICAgICAgcmV0dXJuIG1hY3Jvcywgb2JqZWN0cywgZXh0cmEsIHBwX29wdHMsIGJ1aWxkCiAKICAgICBkZWYgX2dldF9jY19hcmdzKHNlbGYsIHBwX29wdHMsIGRlYnVnLCBiZWZvcmUpOgotICAgICAgICAjIHdvcmtzIGZvciB1bml4Y2NvbXBpbGVyLCBlbXhjY29tcGlsZXIsIGN5Z3dpbmNjb21waWxlcgorICAgICAgICAjIHdvcmtzIGZvciB1bml4Y2NvbXBpbGVyLCBjeWd3aW5jY29tcGlsZXIKICAgICAgICAgY2NfYXJncyA9IHBwX29wdHMgKyBbJy1jJ10KICAgICAgICAgaWYgZGVidWc6CiAgICAgICAgICAgICBjY19hcmdzWzowXSA9IFsnLWcnXQpAQCAtOTI2LDcgKzkyNiw2IEBACiAgICAgIyBvbiBhIGN5Z3dpbiBidWlsdCBweXRob24gd2UgY2FuIHVzZSBnY2MgbGlrZSBhbiBvcmRpbmFyeSBVTklYaXNoCiAgICAgIyBjb21waWxlcgogICAgICgnY3lnd2luLionLCAndW5peCcpLAotICAgICgnb3MyZW14JywgJ2VteCcpLAogCiAgICAgIyBPUyBuYW1lIG1hcHBpbmdzCiAgICAgKCdwb3NpeCcsICd1bml4JyksCkBAIC05NjgsOCArOTY3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWluZ3czMiBwb3J0IG9mIEdOVSBDIENvbXBpbGVyIGZvciBXaW4zMiIpLAogICAgICAgICAgICAgICAgICAgICdiY3BwJzogICAgKCdiY3BwY29tcGlsZXInLCAnQkNQUENvbXBpbGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQm9ybGFuZCBDKysgQ29tcGlsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAnZW14JzogICAgICgnZW14Y2NvbXBpbGVyJywgJ0VNWENDb21waWxlcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNWCBwb3J0IG9mIEdOVSBDIENvbXBpbGVyIGZvciBPUy8yIiksCiAgICAgICAgICAgICAgICAgIH0KIAogZGVmIHNob3dfY29tcGlsZXJzKCk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NtZC5weSBiL0xpYi9kaXN0dXRpbHMvY21kLnB5CmluZGV4IDNlYTA4MTAuLmM4OWQ1ZWYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY21kLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY21kLnB5CkBAIC0zNjUsOSArMzY1LDExIEBACiAgICAgICAgIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgogICAgICAgICBzcGF3bihjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKIAotICAgIGRlZiBtYWtlX2FyY2hpdmUoc2VsZiwgYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyPU5vbmUsIGJhc2VfZGlyPU5vbmUpOgorICAgIGRlZiBtYWtlX2FyY2hpdmUoc2VsZiwgYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyPU5vbmUsIGJhc2VfZGlyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lKToKICAgICAgICAgcmV0dXJuIGFyY2hpdmVfdXRpbC5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyLCBiYXNlX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49c2VsZi5kcnlfcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCiAKICAgICBkZWYgbWFrZV9maWxlKHNlbGYsIGluZmlsZXMsIG91dGZpbGUsIGZ1bmMsIGFyZ3MsCiAgICAgICAgICAgICAgICAgICBleGVjX21zZz1Ob25lLCBza2lwX21zZz1Ob25lLCBsZXZlbD0xKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQppbmRleCBjNTE4OGViLi42ODE0YTFjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CkBAIC0zNyw2ICszNywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgIltkZWZhdWx0OiBkaXN0XSIpLAogICAgICAgICAgICAgICAgICAgICAoJ3NraXAtYnVpbGQnLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgInNraXAgcmVidWlsZGluZyBldmVyeXRoaW5nIChmb3IgdGVzdGluZy9kZWJ1Z2dpbmcpIiksCisgICAgICAgICAgICAgICAgICAgICgnb3duZXI9JywgJ3UnLAorICAgICAgICAgICAgICAgICAgICAgIk93bmVyIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IHVzZXJdIiksCisgICAgICAgICAgICAgICAgICAgICgnZ3JvdXA9JywgJ2cnLAorICAgICAgICAgICAgICAgICAgICAgIkdyb3VwIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICAgICAgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnc2tpcC1idWlsZCddCkBAIC01Miw4ICs1OCw3IEBACiAgICAgIyBUaGlzIHdvbid0IGRvIGluIHJlYWxpdHk6IHdpbGwgbmVlZCB0byBkaXN0aW5ndWlzaCBSUE0taXNoIExpbnV4LAogICAgICMgRGViaWFuLWlzaCBMaW51eCwgU29sYXJpcywgRnJlZUJTRCwgLi4uLCBXaW5kb3dzLCBNYWMgT1MuCiAgICAgZGVmYXVsdF9mb3JtYXQgPSB7J3Bvc2l4JzogJ2d6dGFyJywKLSAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJywKLSAgICAgICAgICAgICAgICAgICAgICAnb3MyJzogJ3ppcCd9CisgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCd9CiAKICAgICAjIEVzdGFibGlzaCB0aGUgcHJlZmVycmVkIG9yZGVyIChmb3IgdGhlIC0taGVscC1mb3JtYXRzIG9wdGlvbikuCiAgICAgZm9ybWF0X2NvbW1hbmRzID0gWydycG0nLCAnZ3p0YXInLCAnYnp0YXInLCAnenRhcicsICd0YXInLApAQCAtNzgsNiArODMsOCBAQAogICAgICAgICBzZWxmLmZvcm1hdHMgPSBOb25lCiAgICAgICAgIHNlbGYuZGlzdF9kaXIgPSBOb25lCiAgICAgICAgIHNlbGYuc2tpcF9idWlsZCA9IDAKKyAgICAgICAgc2VsZi5ncm91cCA9IE5vbmUKKyAgICAgICAgc2VsZi5vd25lciA9IE5vbmUKIAogICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjIGhhdmUgdG8gZmluYWxpemUgJ3BsYXRfbmFtZScgYmVmb3JlICdiZGlzdF9iYXNlJwpAQCAtMTIzLDYgKzEzMCwxMSBAQAogICAgICAgICAgICAgaWYgY21kX25hbWUgbm90IGluIHNlbGYubm9fZm9ybWF0X29wdGlvbjoKICAgICAgICAgICAgICAgICBzdWJfY21kLmZvcm1hdCA9IHNlbGYuZm9ybWF0c1tpXQogCisgICAgICAgICAgICAjIHBhc3NpbmcgdGhlIG93bmVyIGFuZCBncm91cCBuYW1lcyBmb3IgdGFyIGFyY2hpdmluZworICAgICAgICAgICAgaWYgY21kX25hbWUgPT0gJ2JkaXN0X2R1bWInOgorICAgICAgICAgICAgICAgIHN1Yl9jbWQub3duZXIgPSBzZWxmLm93bmVyCisgICAgICAgICAgICAgICAgc3ViX2NtZC5ncm91cCA9IHNlbGYuZ3JvdXAKKwogICAgICAgICAgICAgIyBJZiB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgYWdhaW4sIHRlbGwgaXQgdG8KICAgICAgICAgICAgICMga2VlcCBpdHMgdGVtcG9yYXJ5IGZpbGVzIGFyb3VuZCBzbyBzdWJzZXF1ZW50IHJ1bnMgZ28gZmFzdGVyLgogICAgICAgICAgICAgaWYgY21kX25hbWUgaW4gY29tbWFuZHNbaSsxOl06CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CmluZGV4IDFhYjA5ZDEuLjQ0MDVkMTIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CkBAIC0zMywxMyArMzMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgKCdyZWxhdGl2ZScsIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAiYnVpbGQgdGhlIGFyY2hpdmUgdXNpbmcgcmVsYXRpdmUgcGF0aHMiCiAgICAgICAgICAgICAgICAgICAgICAiKGRlZmF1bHQ6IGZhbHNlKSIpLAorICAgICAgICAgICAgICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICAgICAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICAgICAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgICAgICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2tlZXAtdGVtcCcsICdza2lwLWJ1aWxkJywgJ3JlbGF0aXZlJ10KIAogICAgIGRlZmF1bHRfZm9ybWF0ID0geyAncG9zaXgnOiAnZ3p0YXInLAotICAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ29zMic6ICd6aXAnIH0KKyAgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcgfQogCiAgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5iZGlzdF9kaXIgPSBOb25lCkBAIC00OSw2ICs1NCw4IEBACiAgICAgICAgIHNlbGYuZGlzdF9kaXIgPSBOb25lCiAgICAgICAgIHNlbGYuc2tpcF9idWlsZCA9IE5vbmUKICAgICAgICAgc2VsZi5yZWxhdGl2ZSA9IDAKKyAgICAgICAgc2VsZi5vd25lciA9IE5vbmUKKyAgICAgICAgc2VsZi5ncm91cCA9IE5vbmUKIAogICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmJkaXN0X2RpciBpcyBOb25lOgpAQCAtODUsMTEgKzkyLDYgQEAKICAgICAgICAgYXJjaGl2ZV9iYXNlbmFtZSA9ICIlcy4lcyIgJSAoc2VsZi5kaXN0cmlidXRpb24uZ2V0X2Z1bGxuYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGxhdF9uYW1lKQogCi0gICAgICAgICMgT1MvMiBvYmplY3RzIHRvIGFueSAiOiIgY2hhcmFjdGVycyBpbiBhIGZpbGVuYW1lIChzdWNoIGFzIHdoZW4KLSAgICAgICAgIyBhIHRpbWVzdGFtcCBpcyB1c2VkIGluIGEgdmVyc2lvbikgc28gY2hhbmdlIHRoZW0gdG8gaHlwaGVucy4KLSAgICAgICAgaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgICAgIGFyY2hpdmVfYmFzZW5hbWUgPSBhcmNoaXZlX2Jhc2VuYW1lLnJlcGxhY2UoIjoiLCAiLSIpCi0KICAgICAgICAgcHNldWRvaW5zdGFsbF9yb290ID0gb3MucGF0aC5qb2luKHNlbGYuZGlzdF9kaXIsIGFyY2hpdmVfYmFzZW5hbWUpCiAgICAgICAgIGlmIG5vdCBzZWxmLnJlbGF0aXZlOgogICAgICAgICAgICAgYXJjaGl2ZV9yb290ID0gc2VsZi5iZGlzdF9kaXIKQEAgLTEwNyw3ICsxMDksOCBAQAogCiAgICAgICAgICMgTWFrZSB0aGUgYXJjaGl2ZQogICAgICAgICBmaWxlbmFtZSA9IHNlbGYubWFrZV9hcmNoaXZlKHBzZXVkb2luc3RhbGxfcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCwgcm9vdF9kaXI9YXJjaGl2ZV9yb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0LCByb290X2Rpcj1hcmNoaXZlX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9c2VsZi5vd25lciwgZ3JvdXA9c2VsZi5ncm91cCkKICAgICAgICAgaWYgc2VsZi5kaXN0cmlidXRpb24uaGFzX2V4dF9tb2R1bGVzKCk6CiAgICAgICAgICAgICBweXZlcnNpb24gPSBnZXRfcHl0aG9uX3ZlcnNpb24oKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKaW5kZXggYmM2YTIzZi4uODA2ODliNiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CkBAIC0yMzAsMTEgKzIzMCw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQycsICdWQzYnKSkKIAotICAgICAgICAjIE9TLzIgKEVNWCkgZG9lc24ndCBzdXBwb3J0IERlYnVnIHZzIFJlbGVhc2UgYnVpbGRzLCBidXQgaGFzIHRoZQotICAgICAgICAjIGltcG9ydCBsaWJyYXJpZXMgaW4gaXRzICJDb25maWciIHN1YmRpcmVjdG9yeQotICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdDb25maWcnKSkKLQogICAgICAgICAjIGZvciBleHRlbnNpb25zIHVuZGVyIEN5Z3dpbiBhbmQgQXRoZU9TIFB5dGhvbidzIGxpYnJhcnkgZGlyZWN0b3J5IG11c3QgYmUKICAgICAgICAgIyBhcHBlbmRlZCB0byBsaWJyYXJ5X2RpcnMKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAnY3lnd2luJyBvciBzeXMucGxhdGZvcm1bOjZdID09ICdhdGhlb3MnOgpAQCAtNjE5LDkgKzYxNCw2IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gInN3aWcuZXhlIgotICAgICAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICAjIGFzc3VtZSBzd2lnIGF2YWlsYWJsZSBpbiB0aGUgUEFUSC4KLSAgICAgICAgICAgIHJldHVybiAic3dpZy5leGUiCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyBob3cgdG8gZmluZCAobXVjaCBsZXNzIHJ1bikgU1dJRyAiCkBAIC02NzIsOSArNjY0LDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X2NvbmZpZ192YXIKICAgICAgICAgZXh0X3BhdGggPSBleHRfbmFtZS5zcGxpdCgnLicpCi0gICAgICAgICMgT1MvMiBoYXMgYW4gOCBjaGFyYWN0ZXIgbW9kdWxlIChleHRlbnNpb24pIGxpbWl0IDotKAotICAgICAgICBpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgZXh0X3BhdGhbbGVuKGV4dF9wYXRoKSAtIDFdID0gZXh0X3BhdGhbbGVuKGV4dF9wYXRoKSAtIDFdWzo4XQogICAgICAgICAjIGV4dGVuc2lvbnMgaW4gZGVidWdfbW9kZSBhcmUgbmFtZWQgJ21vZHVsZV9kLnB5ZCcgdW5kZXIgd2luZG93cwogICAgICAgICBleHRfc3VmZml4ID0gZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKQogICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIHNlbGYuZGVidWc6CkBAIC02OTUsNyArNjg0LDcgQEAKICAgICBkZWYgZ2V0X2xpYnJhcmllcyhzZWxmLCBleHQpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHRvIGxpbmsgYWdhaW5zdCB3aGVuIGJ1aWxkaW5nIGEKICAgICAgICAgc2hhcmVkIGV4dGVuc2lvbi4gIE9uIG1vc3QgcGxhdGZvcm1zLCB0aGlzIGlzIGp1c3QgJ2V4dC5saWJyYXJpZXMnOwotICAgICAgICBvbiBXaW5kb3dzIGFuZCBPUy8yLCB3ZSBhZGQgdGhlIFB5dGhvbiBsaWJyYXJ5IChlZy4gcHl0aG9uMjAuZGxsKS4KKyAgICAgICAgb24gV2luZG93cywgd2UgYWRkIHRoZSBQeXRob24gbGlicmFyeSAoZWcuIHB5dGhvbjIwLmRsbCkuCiAgICAgICAgICIiIgogICAgICAgICAjIFRoZSBweXRob24gbGlicmFyeSBpcyBhbHdheXMgbmVlZGVkIG9uIFdpbmRvd3MuICBGb3IgTVNWQywgdGhpcwogICAgICAgICAjIGlzIHJlZHVuZGFudCwgc2luY2UgdGhlIGxpYnJhcnkgaXMgbWVudGlvbmVkIGluIGEgcHJhZ21hIGluCkBAIC03MTUsMTkgKzcwNCw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMgKyBbcHl0aG9ubGliXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcwotICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAib3MyZW14IjoKLSAgICAgICAgICAgICMgRU1YL0dDQyByZXF1aXJlcyB0aGUgcHl0aG9uIGxpYnJhcnkgZXhwbGljaXRseSwgYW5kIEkKLSAgICAgICAgICAgICMgYmVsaWV2ZSBWQUNQUCBkb2VzIGFzIHdlbGwgKHRob3VnaCBub3QgY29uZmlybWVkKSAtIEFJTSBBcHIwMQotICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQlZCIKLSAgICAgICAgICAgICMgZGVidWcgdmVyc2lvbnMgb2YgdGhlIG1haW4gRExMIGFyZW4ndCBzdXBwb3J0ZWQsIGF0IGxlYXN0Ci0gICAgICAgICAgICAjIG5vdCBhdCB0aGlzIHRpbWUgLSBBSU0gQXByMDEKLSAgICAgICAgICAgICNpZiBzZWxmLmRlYnVnOgotICAgICAgICAgICAgIyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlICsgJ19kJwotICAgICAgICAgICAgcHl0aG9ubGliID0gKHRlbXBsYXRlICUKLSAgICAgICAgICAgICAgICAgICAoc3lzLmhleHZlcnNpb24gPj4gMjQsIChzeXMuaGV4dmVyc2lvbiA+PiAxNikgJiAweGZmKSkKLSAgICAgICAgICAgICMgZG9uJ3QgZXh0ZW5kIGV4dC5saWJyYXJpZXMsIGl0IG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlcgotICAgICAgICAgICAgIyBleHRlbnNpb25zLCBpdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgbGlzdAotICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMgKyBbcHl0aG9ubGliXQogICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gImN5Z3dpbiI6CiAgICAgICAgICAgICB0ZW1wbGF0ZSA9ICJweXRob24lZC4lZCIKICAgICAgICAgICAgIHB5dGhvbmxpYiA9ICh0ZW1wbGF0ZSAlCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKaW5kZXggZDQ4ZWI2OS4uOTEwMGI5NiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQpAQCAtMyw3ICszLDcgQEAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnYnVpbGRfcHknIGNvbW1hbmQuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIApAQCAtMzEzLDExICszMTMsMTEgQEAKICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGZpbGVuYW1lKQogICAgICAgICAgICAgaWYgaW5jbHVkZV9ieXRlY29kZToKICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGU6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPVRydWUpKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKICAgICAgICAgICAgICAgICBpZiBzZWxmLm9wdGltaXplID4gMDoKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICAgICAgICAgb3V0cHV0cyArPSBbCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKaW5kZXggNGI1YjIyZS4uOTBhODM4MCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgICMgc2NyaXB0LgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNjcmlwdCwgInJiIikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBmID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQppbmRleCAzYzY3NWQxLi40NTY1MTFjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQpAQCAtNTgsMTMgKzU4LDYgQEAKICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAogICAgICAgICB9LAogICAgICdudCc6IFdJTkRPV1NfU0NIRU1FLAotICAgICdvczInOiB7Ci0gICAgICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAotICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9TY3JpcHRzJywKLSAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAotICAgICAgICB9LAogICAgIH0KIAogIyB1c2VyIHNpdGUgc2NoZW1lcwpAQCAtODYsMTQgKzc5LDYgQEAKICAgICAgICAgJ2RhdGEnICAgOiAnJHVzZXJiYXNlJywKICAgICAgICAgfQogCi0gICAgSU5TVEFMTF9TQ0hFTUVTWydvczJfaG9tZSddID0gewotICAgICAgICAncHVyZWxpYic6ICckdXNlcnNpdGUnLAotICAgICAgICAncGxhdGxpYic6ICckdXNlcnNpdGUnLAotICAgICAgICAnaGVhZGVycyc6ICckdXNlcmJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKLSAgICAgICAgJ3NjcmlwdHMnOiAnJHVzZXJiYXNlL2JpbicsCi0gICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCi0gICAgICAgIH0KLQogIyBUaGUga2V5cyB0byBhbiBpbnN0YWxsYXRpb24gc2NoZW1lOyBpZiBhbnkgbmV3IHR5cGVzIG9mIGZpbGVzIGFyZSB0byBiZQogIyBpbnN0YWxsZWQsIGJlIHN1cmUgdG8gYWRkIGFuIGVudHJ5IHRvIGV2ZXJ5IGluc3RhbGxhdGlvbiBzY2hlbWUgYWJvdmUsCiAjIGFuZCB0byBTQ0hFTUVfS0VZUyBoZXJlLgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CmluZGV4IDE1YzA4ZjEuLjIxNTgxM2IgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKQEAgLTQsNyArNCw3IEBACiAoaW5zdGFsbCBhbGwgUHl0aG9uIG1vZHVsZXMpLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogICAgICAgICAgICAgaWYgZXh0ICE9IFBZVEhPTl9TT1VSQ0VfRVhURU5TSU9OOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGU6Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgIHB5X2ZpbGUsIGRlYnVnX292ZXJyaWRlPVRydWUpKQogICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgIHB5X2ZpbGUsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAogICAgICAgICByZXR1cm4gYnl0ZWNvZGVfZmlsZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQppbmRleCAxMTZmNjdlLi43ZWEzZDVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CkBAIC03NCw2ICs3NCwxMCBAQAogICAgICAgICAoJ21ldGFkYXRhLWNoZWNrJywgTm9uZSwKICAgICAgICAgICJFbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgZWxlbWVudHMgb2YgbWV0YS1kYXRhICIKICAgICAgICAgICJhcmUgc3VwcGxpZWQuIFdhcm4gaWYgYW55IG1pc3NpbmcuIFtkZWZhdWx0XSIpLAorICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IHVzZXJdIiksCisgICAgICAgICgnZ3JvdXA9JywgJ2cnLAorICAgICAgICAgIkdyb3VwIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsndXNlLWRlZmF1bHRzJywgJ3BydW5lJywKQEAgLTExMyw2ICsxMTcsOCBAQAogCiAgICAgICAgIHNlbGYuYXJjaGl2ZV9maWxlcyA9IE5vbmUKICAgICAgICAgc2VsZi5tZXRhZGF0YV9jaGVjayA9IDEKKyAgICAgICAgc2VsZi5vd25lciA9IE5vbmUKKyAgICAgICAgc2VsZi5ncm91cCA9IE5vbmUKIAogICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLm1hbmlmZXN0IGlzIE5vbmU6CkBAIC00NDQsNyArNDUwLDggQEAKICAgICAgICAgICAgIHNlbGYuZm9ybWF0cy5hcHBlbmQoc2VsZi5mb3JtYXRzLnBvcChzZWxmLmZvcm1hdHMuaW5kZXgoJ3RhcicpKSkKIAogICAgICAgICBmb3IgZm10IGluIHNlbGYuZm9ybWF0czoKLSAgICAgICAgICAgIGZpbGUgPSBzZWxmLm1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZtdCwgYmFzZV9kaXI9YmFzZV9kaXIpCisgICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgICAgICBhcmNoaXZlX2ZpbGVzLmFwcGVuZChmaWxlKQogICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlcy5hcHBlbmQoKCdzZGlzdCcsICcnLCBmaWxlKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKaW5kZXggZDJiYzgyYy4uMjg3MTU4MyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHVybG9wZW4ocmVxdWVzdCkKICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5nZXRjb2RlKCkKICAgICAgICAgICAgIHJlYXNvbiA9IHJlc3VsdC5tc2cKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShzdHIoZSksIGxvZy5FUlJPUikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNlcHQgSFRUUEVycm9yIGFzIGU6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CmluZGV4IDFmZDUzMzQuLjc0MzlhODMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CkBAIC0yMSw3ICsyMSw3IEBACiBjbGFzcyBQeVBJUkNDb21tYW5kKENvbW1hbmQpOgogICAgICIiIkJhc2UgY29tbWFuZCB0aGF0IGtub3dzIGhvdyB0byBoYW5kbGUgdGhlIC5weXBpcmMgZmlsZQogICAgICIiIgotICAgIERFRkFVTFRfUkVQT1NJVE9SWSA9ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknCisgICAgREVGQVVMVF9SRVBPU0lUT1JZID0gJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknCiAgICAgREVGQVVMVF9SRUFMTSA9ICdweXBpJwogICAgIHJlcG9zaXRvcnkgPSBOb25lCiAgICAgcmVhbG0gPSBOb25lCkBAIC04Myw2ICs4MywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGNvbmZpZy5nZXQoc2VydmVyLCBrZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGRlZmF1bHQKKworICAgICAgICAgICAgICAgICAgICAjIHdvcmsgYXJvdW5kIHBlb3BsZSBoYXZpbmcgInJlcG9zaXRvcnkiIGZvciB0aGUgInB5cGkiCisgICAgICAgICAgICAgICAgICAgICMgc2VjdGlvbiBvZiB0aGVpciBjb25maWcgc2V0IHRvIHRoZSBIVFRQIChyYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICAjIEhUVFBTKSBVUkwKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZlciA9PSAncHlwaScgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGluIChzZWxmLkRFRkFVTFRfUkVQT1NJVE9SWSwgJ3B5cGknKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WydyZXBvc2l0b3J5J10gPSBzZWxmLkRFRkFVTFRfUkVQT1NJVE9SWQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQKKwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFsnc2VydmVyJ10gPT0gcmVwb3NpdG9yeSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFsncmVwb3NpdG9yeSddID09IHJlcG9zaXRvcnkpOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29yZS5weSBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQppbmRleCAyNjAzMzJhLi5jODExZDViIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CkBAIC0xMjgsOCArMTI4LDkgQEAKICAgICBpZiBfc2V0dXBfc3RvcF9hZnRlciA9PSAiY29uZmlnIjoKICAgICAgICAgcmV0dXJuIGRpc3QKIAotICAgICMgUGFyc2UgdGhlIGNvbW1hbmQgbGluZTsgYW55IGNvbW1hbmQtbGluZSBlcnJvcnMgYXJlIHRoZSBlbmQgdXNlcidzCi0gICAgIyBmYXVsdCwgc28gdHVybiB0aGVtIGludG8gU3lzdGVtRXhpdCB0byBzdXBwcmVzcyB0cmFjZWJhY2tzLgorICAgICMgUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhbmQgb3ZlcnJpZGUgY29uZmlnIGZpbGVzOyBhbnkKKyAgICAjIGNvbW1hbmQtbGluZSBlcnJvcnMgYXJlIHRoZSBlbmQgdXNlcidzIGZhdWx0LCBzbyB0dXJuIHRoZW0gaW50bworICAgICMgU3lzdGVtRXhpdCB0byBzdXBwcmVzcyB0cmFjZWJhY2tzLgogICAgIHRyeToKICAgICAgICAgb2sgPSBkaXN0LnBhcnNlX2NvbW1hbmRfbGluZSgpCiAgICAgZXhjZXB0IERpc3R1dGlsc0FyZ0Vycm9yIGFzIG1zZzoKQEAgLTE0OCw3ICsxNDksNyBAQAogICAgICAgICAgICAgZGlzdC5ydW5fY29tbWFuZHMoKQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJpbnRlcnJ1cHRlZCIpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgZXJyb3IgPSBncm9rX2Vudmlyb25tZW50X2Vycm9yKGV4YykKIAogICAgICAgICAgICAgaWYgREVCVUc6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CmluZGV4IGUwMDc0YTEuLmQyOGIxYjMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CkBAIC01NCw3ICs1NCw4IEBACiBmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IGdlbl9wcmVwcm9jZXNzX29wdGlvbnMsIGdlbl9saWJfb3B0aW9ucwogZnJvbSBkaXN0dXRpbHMudW5peGNjb21waWxlciBpbXBvcnQgVW5peENDb21waWxlcgogZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCB3cml0ZV9maWxlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvciwgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNFeGVjRXJyb3IsIENDb21waWxlckVycm9yLAorICAgICAgICBDb21waWxlRXJyb3IsIFVua25vd25GaWxlRXJyb3IpCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKQEAgLTI5NCwxOCArMjk1LDE3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlbnRyeV9wb2ludCA9ICcnCiAKLSAgICAgICAgaWYgc2VsZi5nY2NfdmVyc2lvbiA8ICc0JyBvciBpc19jeWd3aW5nY2MoKToKLSAgICAgICAgICAgIG5vX2N5Z3dpbiA9ICcgLW1uby1jeWd3aW4nCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnJworICAgICAgICBpZiBpc19jeWd3aW5nY2MoKToKKyAgICAgICAgICAgIHJhaXNlIENDb21waWxlckVycm9yKAorICAgICAgICAgICAgICAgICdDeWd3aW4gZ2NjIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1jb21waWxlcj1taW5ndzMyJykKIAotICAgICAgICBzZWxmLnNldF9leGVjdXRhYmxlcyhjb21waWxlcj0nZ2NjJXMgLU8gLVdhbGwnICUgbm9fY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjJXMgLW1kbGwgLU8gLVdhbGwnICUgbm9fY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9jeHg9J2crKyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX2V4ZT0nZ2NjJXMnICUgbm9fY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzJXMgJXMgJXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmxpbmtlcl9kbGwsIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9vcHRpb24sIGVudHJ5X3BvaW50KSkKKyAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyAtTyAtV2FsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyX3NvPSdnY2MgLW1kbGwgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9jeHg9J2crKyAtTyAtV2FsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9zbz0nJXMgJXMgJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBzaGFyZWRfb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X3BvaW50KSkKICAgICAgICAgIyBNYXliZSB3ZSBzaG91bGQgYWxzbyBhcHBlbmQgLW10aHJlYWRzLCBidXQgdGhlbiB0aGUgZmluaXNoZWQKICAgICAgICAgIyBkbGxzIG5lZWQgYW5vdGhlciBkbGwgKG1pbmd3bTEwLmRsbCBzZWUgTWluZ3czMiBkb2NzKQogICAgICAgICAjICgtbXRocmVhZHM6IFN1cHBvcnQgdGhyZWFkLXNhZmUgZXhjZXB0aW9uIGhhbmRsaW5nIG9uIGBNaW5ndzMyJykKQEAgLTM2NCw3ICszNjQsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBDT05GSUdfSF9OT1RPSywgIiclcycgZG9lcyBub3QgbWVudGlvbiAnX19HTlVDX18nIiAlIGZuCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjb25maWdfaC5jbG9zZSgpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgcmV0dXJuIChDT05GSUdfSF9VTkNFUlRBSU4sCiAgICAgICAgICAgICAgICAgImNvdWxkbid0IHJlYWQgJyVzJzogJXMiICUgKGZuLCBleGMuc3RyZXJyb3IpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQppbmRleCAyODI2ZmY4Li4yYjM1YWEzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgICAgICAiY2Fubm90IGNvcHkgdHJlZSAnJXMnOiBub3QgYSBkaXJlY3RvcnkiICUgc3JjKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNyYykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAoZXJybm8sIGVycnN0cikgPSBlCiAgICAgICAgIGlmIGRyeV9ydW46CiAgICAgICAgICAgICBuYW1lcyA9IFtdCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgoY21kWzFdKQogICAgICAgICAgICAgaWYgYWJzcGF0aCBpbiBfcGF0aF9jcmVhdGVkOgogICAgICAgICAgICAgICAgIGRlbCBfcGF0aF9jcmVhdGVkW2Fic3BhdGhdCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcikgYXMgZXhjOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgICAgICBsb2cud2Fybihncm9rX2Vudmlyb25tZW50X2Vycm9yKAogICAgICAgICAgICAgICAgICAgICBleGMsICJlcnJvciByZW1vdmluZyAlczogIiAlIGRpcmVjdG9yeSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQppbmRleCAxMWEyMTAyLi43ZWIwNGJjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9kaXN0LnB5CkBAIC01Miw3ICs1Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgKCdxdWlldCcsICdxJywgInJ1biBxdWlldGx5ICh0dXJucyB2ZXJib3NpdHkgb2ZmKSIpLAogICAgICAgICAgICAgICAgICAgICAgICgnZHJ5LXJ1bicsICduJywgImRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIiksCiAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ2gnLCAic2hvdyBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UiKSwKLSAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAoJ25vLXVzZXItY2ZnJywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZSBweWRpc3R1dGlscy5jZmcgaW4geW91ciBob21lIGRpcmVjdG9yeScpLAorICAgIF0KIAogICAgICMgJ2NvbW1vbl91c2FnZScgaXMgYSBzaG9ydCAoMi0zIGxpbmUpIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjb21tb24KICAgICAjIHVzYWdlIG9mIHRoZSBzZXR1cCBzY3JpcHQuCkBAIC0yNTksNiArMjYxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpCiAKKyAgICAgICAgIyBuby11c2VyLWNmZyBpcyBoYW5kbGVkIGJlZm9yZSBvdGhlciBjb21tYW5kIGxpbmUgYXJncworICAgICAgICAjIGJlY2F1c2Ugb3RoZXIgYXJncyBvdmVycmlkZSB0aGUgY29uZmlnIGZpbGVzLCBhbmQgdGhpcworICAgICAgICAjIG9uZSBpcyBuZWVkZWQgYmVmb3JlIHdlIGNhbiBsb2FkIHRoZSBjb25maWcgZmlsZXMuCisgICAgICAgICMgSWYgYXR0cnNbJ3NjcmlwdF9hcmdzJ10gd2Fzbid0IHBhc3NlZCwgYXNzdW1lIGZhbHNlLgorICAgICAgICAjCisgICAgICAgICMgVGhpcyBhbHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IGxvb2sgYXQgdGhlIGdsb2JhbCBvcHRpb25zCisgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNjcmlwdF9hcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLnNjcmlwdF9hcmdzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGFyZyA9PSAnLS1uby11c2VyLWNmZyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKIAogICAgIGRlZiBnZXRfb3B0aW9uX2RpY3Qoc2VsZiwgY29tbWFuZCk6CkBAIC0zMTAsNyArMzI4LDEwIEBACiAgICAgICAgIERpc3R1dGlscyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IChpZS4gd2hlcmUgdGhlIHRvcC1sZXZlbAogICAgICAgICBEaXN0dXRpbHMgX19pbnN0X18ucHkgZmlsZSBsaXZlcyksIGEgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUKICAgICAgICAgZGlyZWN0b3J5IG5hbWVkIC5weWRpc3R1dGlscy5jZmcgb24gVW5peCBhbmQgcHlkaXN0dXRpbHMuY2ZnCi0gICAgICAgIG9uIFdpbmRvd3MvTWFjLCBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgb24gV2luZG93cy9NYWM7IGFuZCBzZXR1cC5jZmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSBmaWxlIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCisgICAgICAgIC0tbm8tdXNlci1jZmcgb3B0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgZmlsZXMgPSBbXQogICAgICAgICBjaGVja19lbnZpcm9uKCkKQEAgLTMzMCwxNSArMzUxLDE5IEBACiAgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gInB5ZGlzdHV0aWxzLmNmZyIKIAogICAgICAgICAjIEFuZCBsb29rIGZvciB0aGUgdXNlciBjb25maWcgZmlsZQotICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHVzZXJfZmlsZSk6Ci0gICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQorICAgICAgICBpZiBzZWxmLndhbnRfdXNlcl9jZmc6CisgICAgICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZCh1c2VyX2ZpbGUpCiAKICAgICAgICAgIyBBbGwgcGxhdGZvcm1zIHN1cHBvcnQgbG9jYWwgc2V0dXAuY2ZnCiAgICAgICAgIGxvY2FsX2ZpbGUgPSAic2V0dXAuY2ZnIgogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbF9maWxlKToKICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChsb2NhbF9maWxlKQogCisgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgidXNpbmcgY29uZmlnIGZpbGVzOiAlcyIgJSAnLCAnLmpvaW4oZmlsZXMpKQorCiAgICAgICAgIHJldHVybiBmaWxlcwogCiAgICAgZGVmIHBhcnNlX2NvbmZpZ19maWxlcyhzZWxmLCBmaWxlbmFtZXM9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc1ZjhkLi4wMDAwMDAwCi0tLSBhL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLSIiImRpc3R1dGlscy5lbXhjY29tcGlsZXIKLQotUHJvdmlkZXMgdGhlIEVNWENDb21waWxlciBjbGFzcywgYSBzdWJjbGFzcyBvZiBVbml4Q0NvbXBpbGVyIHRoYXQKLWhhbmRsZXMgdGhlIEVNWCBwb3J0IG9mIHRoZSBHTlUgQyBjb21waWxlciB0byBPUy8yLgotIiIiCi0KLSMgaXNzdWVzOgotIwotIyAqIE9TLzIgaW5zaXN0cyB0aGF0IERMTHMgY2FuIGhhdmUgbmFtZXMgbm8gbG9uZ2VyIHRoYW4gOCBjaGFyYWN0ZXJzCi0jICAgV2UgcHV0IGV4cG9ydF9zeW1ib2xzIGluIGEgZGVmLWZpbGUsIGFzIHRob3VnaCB0aGUgRExMIGNhbiBoYXZlCi0jICAgYW4gYXJiaXRyYXJ5IGxlbmd0aCBuYW1lLCBidXQgdHJ1bmNhdGUgdGhlIG91dHB1dCBmaWxlbmFtZS4KLSMKLSMgKiBvbmx5IHVzZSBPTUYgb2JqZWN0cyBhbmQgdXNlIExJTkszODYgYXMgdGhlIGxpbmtlciAoLVpvbWYpCi0jCi0jICogYWx3YXlzIGJ1aWxkIGZvciBtdWx0aXRocmVhZGluZyAoLVptdCkgYXMgdGhlIGFjY29tcGFueWluZyBPUy8yIHBvcnQKLSMgICBvZiBQeXRob24gaXMgb25seSBkaXN0cmlidXRlZCB3aXRoIHRocmVhZHMgZW5hYmxlZC4KLSMKLSMgdGVzdGVkIGNvbmZpZ3VyYXRpb25zOgotIwotIyAqIEVNWCBnY2MgMi44MS9FTVggMC45ZCBmaXgwMwotCi1pbXBvcnQgb3Msc3lzLGNvcHkKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywgZ2VuX2xpYl9vcHRpb25zCi1mcm9tIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIGltcG9ydCBVbml4Q0NvbXBpbGVyCi1mcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IHdyaXRlX2ZpbGUKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yLCBDb21waWxlRXJyb3IsIFVua25vd25GaWxlRXJyb3IKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLQotY2xhc3MgRU1YQ0NvbXBpbGVyIChVbml4Q0NvbXBpbGVyKToKLQotICAgIGNvbXBpbGVyX3R5cGUgPSAnZW14JwotICAgIG9ial9leHRlbnNpb24gPSAiLm9iaiIKLSAgICBzdGF0aWNfbGliX2V4dGVuc2lvbiA9ICIubGliIgotICAgIHNoYXJlZF9saWJfZXh0ZW5zaW9uID0gIi5kbGwiCi0gICAgc3RhdGljX2xpYl9mb3JtYXQgPSAiJXMlcyIKLSAgICBzaGFyZWRfbGliX2Zvcm1hdCA9ICIlcyVzIgotICAgIHJlc19leHRlbnNpb24gPSAiLnJlcyIgICAgICAjIGNvbXBpbGVkIHJlc291cmNlIGZpbGUKLSAgICBleGVfZXh0ZW5zaW9uID0gIi5leGUiCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsCi0gICAgICAgICAgICAgICAgICBmb3JjZT0wKToKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLl9faW5pdF9fIChzZWxmLCB2ZXJib3NlLCBkcnlfcnVuLCBmb3JjZSkKLQotICAgICAgICAoc3RhdHVzLCBkZXRhaWxzKSA9IGNoZWNrX2NvbmZpZ19oKCkKLSAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiUHl0aG9uJ3MgR0NDIHN0YXR1czogJXMgKGRldGFpbHM6ICVzKSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIGRldGFpbHMpKQotICAgICAgICBpZiBzdGF0dXMgaXMgbm90IENPTkZJR19IX09LOgotICAgICAgICAgICAgc2VsZi53YXJuKAotICAgICAgICAgICAgICAgICJQeXRob24ncyBweWNvbmZpZy5oIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHlvdXIgY29tcGlsZXIuICAiICsKLSAgICAgICAgICAgICAgICAoIlJlYXNvbjogJXMuIiAlIGRldGFpbHMpICsKLSAgICAgICAgICAgICAgICAiQ29tcGlsaW5nIG1heSBmYWlsIGJlY2F1c2Ugb2YgdW5kZWZpbmVkIHByZXByb2Nlc3NvciBtYWNyb3MuIikKLQotICAgICAgICAoc2VsZi5nY2NfdmVyc2lvbiwgc2VsZi5sZF92ZXJzaW9uKSA9IFwKLSAgICAgICAgICAgIGdldF92ZXJzaW9ucygpCi0gICAgICAgIHNlbGYuZGVidWdfcHJpbnQoc2VsZi5jb21waWxlcl90eXBlICsgIjogZ2NjICVzLCBsZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZ2NjX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGRfdmVyc2lvbikgKQotCi0gICAgICAgICMgSGFyZC1jb2RlIEdDQyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoaXMgaXMgYWxsIGFib3V0LgotICAgICAgICAjIFhYWCBvcHRpbWl6YXRpb24sIHdhcm5pbmdzIGV0Yy4gc2hvdWxkIGJlIGN1c3RvbWl6YWJsZS4KLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX2V4ZT0nZ2NjIC1ab21mIC1abXQgLVpjcnRkbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289J2djYyAtWm9tZiAtWm10IC1aY3J0ZGxsIC1aZGxsJykKLQotICAgICAgICAjIHdhbnQgdGhlIGdjYyBsaWJyYXJ5IHN0YXRpY2FsbHkgbGlua2VkIChzbyB0aGF0IHdlIGRvbid0IGhhdmUKLSAgICAgICAgIyB0byBkaXN0cmlidXRlIGEgdmVyc2lvbiBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyIHdlIGhhdmUpCi0gICAgICAgIHNlbGYuZGxsX2xpYnJhcmllcz1bImdjYyJdCi0KLSAgICAjIF9faW5pdF9fICgpCi0KLSAgICBkZWYgX2NvbXBpbGUoc2VsZiwgb2JqLCBzcmMsIGV4dCwgY2NfYXJncywgZXh0cmFfcG9zdGFyZ3MsIHBwX29wdHMpOgotICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAjIGdjYyByZXF1aXJlcyAnLnJjJyBjb21waWxlZCB0byBiaW5hcnkgKCcucmVzJykgZmlsZXMgISEhCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbInJjIiwgIi1yIiwgc3JjXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCi0gICAgICAgIGVsc2U6ICMgZm9yIG90aGVyIGZpbGVzIHVzZSB0aGUgQy1jb21waWxlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oc2VsZi5jb21waWxlcl9zbyArIGNjX2FyZ3MgKyBbc3JjLCAnLW8nLCBvYmpdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKLQotICAgIGRlZiBsaW5rIChzZWxmLAotICAgICAgICAgICAgICB0YXJnZXRfZGVzYywKLSAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKLSAgICAgICAgICAgICAgZGVidWc9MCwKLSAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICBidWlsZF90ZW1wPU5vbmUsCi0gICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgotCi0gICAgICAgICMgdXNlIHNlcGFyYXRlIGNvcGllcywgc28gd2UgY2FuIG1vZGlmeSB0aGUgbGlzdHMKLSAgICAgICAgZXh0cmFfcHJlYXJncyA9IGNvcHkuY29weShleHRyYV9wcmVhcmdzIG9yIFtdKQotICAgICAgICBsaWJyYXJpZXMgPSBjb3B5LmNvcHkobGlicmFyaWVzIG9yIFtdKQotICAgICAgICBvYmplY3RzID0gY29weS5jb3B5KG9iamVjdHMgb3IgW10pCi0KLSAgICAgICAgIyBBZGRpdGlvbmFsIGxpYnJhcmllcwotICAgICAgICBsaWJyYXJpZXMuZXh0ZW5kKHNlbGYuZGxsX2xpYnJhcmllcykKLQotICAgICAgICAjIGhhbmRsZSBleHBvcnQgc3ltYm9scyBieSBjcmVhdGluZyBhIGRlZi1maWxlCi0gICAgICAgICMgd2l0aCBleGVjdXRhYmxlcyB0aGlzIG9ubHkgd29ya3Mgd2l0aCBnY2MvbGQgYXMgbGlua2VyCi0gICAgICAgIGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAgICAgKHRhcmdldF9kZXNjICE9IHNlbGYuRVhFQ1VUQUJMRSkpOgotICAgICAgICAgICAgIyAoVGhlIGxpbmtlciBkb2Vzbid0IGRvIGFueXRoaW5nIGlmIG91dHB1dCBpcyB1cC10by1kYXRlLgotICAgICAgICAgICAgIyBTbyBpdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdGhpcywKLSAgICAgICAgICAgICMgYnV0IGZvciB0aGlzIHdlIGhhZCB0byBpbnNlcnQgc29tZSB1bmNoYW5nZWQgcGFydHMgb2YKLSAgICAgICAgICAgICMgVW5peENDb21waWxlciwgYW5kIHRoaXMgaXMgbm90IHdoYXQgd2Ugd2FudC4pCi0KLSAgICAgICAgICAgICMgd2Ugd2FudCB0byBwdXQgc29tZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCi0gICAgICAgICAgICAjIG9iamVjdCBmaWxlcyBhcmUsIGJ1aWxkX3RlbXAgZG9lc24ndCBoZWxwIG11Y2gKLSAgICAgICAgICAgICMgd2hlcmUgYXJlIHRoZSBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIHRlbXBfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9iamVjdHNbMF0pCi0gICAgICAgICAgICAjIG5hbWUgb2YgZGxsIHRvIGdpdmUgdGhlIGhlbHBlciBmaWxlcyB0aGUgc2FtZSBiYXNlIG5hbWUKLSAgICAgICAgICAgIChkbGxfbmFtZSwgZGxsX2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KAotICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKLQotICAgICAgICAgICAgIyBnZW5lcmF0ZSB0aGUgZmlsZW5hbWVzIGZvciB0aGVzZSBmaWxlcwotICAgICAgICAgICAgZGVmX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcF9kaXIsIGRsbF9uYW1lICsgIi5kZWYiKQotCi0gICAgICAgICAgICAjIEdlbmVyYXRlIC5kZWYgZmlsZQotICAgICAgICAgICAgY29udGVudHMgPSBbCi0gICAgICAgICAgICAgICAgIkxJQlJBUlkgJXMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgJSBcCi0gICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpWzBdLAotICAgICAgICAgICAgICAgICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIsCi0gICAgICAgICAgICAgICAgIkVYUE9SVFMiXQotICAgICAgICAgICAgZm9yIHN5bSBpbiBleHBvcnRfc3ltYm9sczoKLSAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoJyAgIiVzIicgJSBzeW0pCi0gICAgICAgICAgICBzZWxmLmV4ZWN1dGUod3JpdGVfZmlsZSwgKGRlZl9maWxlLCBjb250ZW50cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRpbmcgJXMiICUgZGVmX2ZpbGUpCi0KLSAgICAgICAgICAgICMgbmV4dCBhZGQgb3B0aW9ucyBmb3IgZGVmLWZpbGUgYW5kIHRvIGNyZWF0aW5nIGltcG9ydCBsaWJyYXJpZXMKLSAgICAgICAgICAgICMgZm9yIGdjYy9sZCB0aGUgZGVmLWZpbGUgaXMgc3BlY2lmaWVkIGFzIGFueSBvdGhlciBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKGRlZl9maWxlKQotCi0gICAgICAgICNlbmQ6IGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAjICAgICAgICAodGFyZ2V0X2Rlc2MgIT0gc2VsZi5FWEVDVVRBQkxFIG9yIHNlbGYubGlua2VyX2RsbCA9PSAiZ2NjIikpOgotCi0gICAgICAgICMgd2hvIHdhbnRzIHN5bWJvbHMgYW5kIGEgbWFueSB0aW1lcyBsYXJnZXIgb3V0cHV0IGZpbGUKLSAgICAgICAgIyBzaG91bGQgZXhwbGljaXRseSBzd2l0Y2ggdGhlIGRlYnVnIG1vZGUgb24KLSAgICAgICAgIyBvdGhlcndpc2Ugd2UgbGV0IGRsbHdyYXAvbGQgc3RyaXAgdGhlIG91dHB1dCBmaWxlCi0gICAgICAgICMgKE9uIG15IG1hY2hpbmU6IDEwS0IgPCBzdHJpcHBlZF9maWxlIDwgPz8xMDBLQgotICAgICAgICAjICAgdW5zdHJpcHBlZF9maWxlID0gc3RyaXBwZWRfZmlsZSArIFhYWCBLQgotICAgICAgICAjICAoIFhYWD0yNTQgZm9yIGEgdHlwaWNhbCBweXRob24gZXh0ZW5zaW9uKSkKLSAgICAgICAgaWYgbm90IGRlYnVnOgotICAgICAgICAgICAgZXh0cmFfcHJlYXJncy5hcHBlbmQoIi1zIikKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLmxpbmsoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICMgZXhwb3J0X3N5bWJvbHMsIHdlIGRvIHRoaXMgaW4gb3VyIGRlZi1maWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZykKLQotICAgICMgbGluayAoKQotCi0gICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICMgb3ZlcnJpZGUgdGhlIG9iamVjdF9maWxlbmFtZXMgbWV0aG9kIGZyb20gQ0NvbXBpbGVyIHRvCi0gICAgIyBzdXBwb3J0IHJjIGFuZCByZXMtZmlsZXMKLSAgICBkZWYgb2JqZWN0X2ZpbGVuYW1lcyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2ZpbGVuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfZGlyPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9JycpOgotICAgICAgICBpZiBvdXRwdXRfZGlyIGlzIE5vbmU6IG91dHB1dF9kaXIgPSAnJwotICAgICAgICBvYmpfbmFtZXMgPSBbXQotICAgICAgICBmb3Igc3JjX25hbWUgaW4gc291cmNlX2ZpbGVuYW1lczoKLSAgICAgICAgICAgICMgdXNlIG5vcm1jYXNlIHRvIG1ha2Ugc3VyZSAnLnJjJyBpcyByZWFsbHkgJy5yYycgYW5kIG5vdCAnLlJDJwotICAgICAgICAgICAgKGJhc2UsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0IChvcy5wYXRoLm5vcm1jYXNlKHNyY19uYW1lKSkKLSAgICAgICAgICAgIGlmIGV4dCBub3QgaW4gKHNlbGYuc3JjX2V4dGVuc2lvbnMgKyBbJy5yYyddKToKLSAgICAgICAgICAgICAgICByYWlzZSBVbmtub3duRmlsZUVycm9yKCJ1bmtub3duIGZpbGUgdHlwZSAnJXMnIChmcm9tICclcycpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAoZXh0LCBzcmNfbmFtZSkpCi0gICAgICAgICAgICBpZiBzdHJpcF9kaXI6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUgKGJhc2UpCi0gICAgICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAgICAgIyB0aGVzZSBuZWVkIHRvIGJlIGNvbXBpbGVkIHRvIG9iamVjdCBmaWxlcwotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYucmVzX2V4dGVuc2lvbikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYub2JqX2V4dGVuc2lvbikpCi0gICAgICAgIHJldHVybiBvYmpfbmFtZXMKLQotICAgICMgb2JqZWN0X2ZpbGVuYW1lcyAoKQotCi0gICAgIyBvdmVycmlkZSB0aGUgZmluZF9saWJyYXJ5X2ZpbGUgbWV0aG9kIGZyb20gVW5peENDb21waWxlcgotICAgICMgdG8gZGVhbCB3aXRoIGZpbGUgbmFtaW5nL3NlYXJjaGluZyBkaWZmZXJlbmNlcwotICAgIGRlZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCBkaXJzLCBsaWIsIGRlYnVnPTApOgotICAgICAgICBzaG9ydGxpYiA9ICclcy5saWInICUgbGliCi0gICAgICAgIGxvbmdsaWIgPSAnbGliJXMubGliJyAlIGxpYiAgICAjIHRoaXMgZm9ybSB2ZXJ5IHJhcmUKLQotICAgICAgICAjIGdldCBFTVgncyBkZWZhdWx0IGxpYnJhcnkgZGlyZWN0b3J5IHNlYXJjaCBwYXRoCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVteF9kaXJzID0gb3MuZW52aXJvblsnTElCUkFSWV9QQVRIJ10uc3BsaXQoJzsnKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBlbXhfZGlycyA9IFtdCi0KLSAgICAgICAgZm9yIGRpciBpbiBkaXJzICsgZW14X2RpcnM6Ci0gICAgICAgICAgICBzaG9ydGxpYnAgPSBvcy5wYXRoLmpvaW4oZGlyLCBzaG9ydGxpYikKLSAgICAgICAgICAgIGxvbmdsaWJwID0gb3MucGF0aC5qb2luKGRpciwgbG9uZ2xpYikKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNob3J0bGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0bGlicAotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsb25nbGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvbmdsaWJwCi0KLSAgICAgICAgIyBPb3BzLCBkaWRuJ3QgZmluZCBpdCBpbiAqYW55KiBvZiAnZGlycycKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotIyBjbGFzcyBFTVhDQ29tcGlsZXIKLQotCi0jIEJlY2F1c2UgdGhlc2UgY29tcGlsZXJzIGFyZW4ndCBjb25maWd1cmVkIGluIFB5dGhvbidzIHB5Y29uZmlnLmggZmlsZSBieQotIyBkZWZhdWx0LCB3ZSBzaG91bGQgYXQgbGVhc3Qgd2FybiB0aGUgdXNlciBpZiBoZSBpcyB1c2luZyBhIHVubW9kaWZpZWQKLSMgdmVyc2lvbi4KLQotQ09ORklHX0hfT0sgPSAib2siCi1DT05GSUdfSF9OT1RPSyA9ICJub3Qgb2siCi1DT05GSUdfSF9VTkNFUlRBSU4gPSAidW5jZXJ0YWluIgotCi1kZWYgY2hlY2tfY29uZmlnX2goKToKLQotICAgICIiIkNoZWNrIGlmIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHNwZWNpZmljYWxseSwgcHljb25maWcuaCkKLSAgICBhcHBlYXJzIGFtZW5hYmxlIHRvIGJ1aWxkaW5nIGV4dGVuc2lvbnMgd2l0aCBHQ0MuICBSZXR1cm5zIGEgdHVwbGUKLSAgICAoc3RhdHVzLCBkZXRhaWxzKSwgd2hlcmUgJ3N0YXR1cycgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgotICAgICAgQ09ORklHX0hfT0sKLSAgICAgICAgYWxsIGlzIHdlbGwsIGdvIGFoZWFkIGFuZCBjb21waWxlCi0gICAgICBDT05GSUdfSF9OT1RPSwotICAgICAgICBkb2Vzbid0IGxvb2sgZ29vZAotICAgICAgQ09ORklHX0hfVU5DRVJUQUlOCi0gICAgICAgIG5vdCBzdXJlIC0tIHVuYWJsZSB0byByZWFkIHB5Y29uZmlnLmgKLSAgICAnZGV0YWlscycgaXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgc2l0dWF0aW9uLgotCi0gICAgTm90ZSB0aGVyZSBhcmUgdHdvIHdheXMgdG8gY29uY2x1ZGUgIk9LIjogZWl0aGVyICdzeXMudmVyc2lvbicgY29udGFpbnMKLSAgICB0aGUgc3RyaW5nICJHQ0MiIChpbXBseWluZyB0aGF0IHRoaXMgUHl0aG9uIHdhcyBidWlsdCB3aXRoIEdDQyksIG9yIHRoZQotICAgIGluc3RhbGxlZCAicHljb25maWcuaCIgY29udGFpbnMgdGhlIHN0cmluZyAiX19HTlVDX18iLgotICAgICIiIgotCi0gICAgIyBYWFggc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIGNoZWNrcyBzeXMudmVyc2lvbiwgaXQncyBub3Qgc3RyaWN0bHkgYQotICAgICMgInB5Y29uZmlnLmgiIGNoZWNrIC0tIHNob3VsZCBwcm9iYWJseSBiZSByZW5hbWVkLi4uCi0KLSAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgIyBpZiBzeXMudmVyc2lvbiBjb250YWlucyBHQ0MgdGhlbiBweXRob24gd2FzIGNvbXBpbGVkIHdpdGgKLSAgICAjIEdDQywgYW5kIHRoZSBweWNvbmZpZy5oIGZpbGUgc2hvdWxkIGJlIE9LCi0gICAgaWYgc3lzLnZlcnNpb24uZmluZCgiR0NDIikgPj0gMDoKLSAgICAgICAgcmV0dXJuIChDT05GSUdfSF9PSywgInN5cy52ZXJzaW9uIG1lbnRpb25zICdHQ0MnIikKLQotICAgIGZuID0gc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpCi0gICAgdHJ5OgotICAgICAgICAjIEl0IHdvdWxkIHByb2JhYmx5IGJldHRlciB0byByZWFkIHNpbmdsZSBsaW5lcyB0byBzZWFyY2guCi0gICAgICAgICMgQnV0IHdlIGRvIHRoaXMgb25seSBvbmNlLCBhbmQgaXQgaXMgZmFzdCBlbm91Z2gKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMgPSBmLnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBleGNlcHQgSU9FcnJvciBhcyBleGM6Ci0gICAgICAgICMgaWYgd2UgY2FuJ3QgcmVhZCB0aGlzIGZpbGUsIHdlIGNhbm5vdCBzYXkgaXQgaXMgd3JvbmcKLSAgICAgICAgIyB0aGUgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBsYXRlciBhYm91dCB0aGlzIGZpbGUgYXMgbWlzc2luZwotICAgICAgICByZXR1cm4gKENPTkZJR19IX1VOQ0VSVEFJTiwKLSAgICAgICAgICAgICAgICAiY291bGRuJ3QgcmVhZCAnJXMnOiAlcyIgJSAoZm4sIGV4Yy5zdHJlcnJvcikpCi0KLSAgICBlbHNlOgotICAgICAgICAjICJweWNvbmZpZy5oIiBjb250YWlucyBhbiAiI2lmZGVmIF9fR05VQ19fIiBvciBzb21ldGhpbmcgc2ltaWxhcgotICAgICAgICBpZiBzLmZpbmQoIl9fR05VQ19fIikgPj0gMDoKLSAgICAgICAgICAgIHJldHVybiAoQ09ORklHX0hfT0ssICInJXMnIG1lbnRpb25zICdfX0dOVUNfXyciICUgZm4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gKENPTkZJR19IX05PVE9LLCAiJyVzJyBkb2VzIG5vdCBtZW50aW9uICdfX0dOVUNfXyciICUgZm4pCi0KLQotZGVmIGdldF92ZXJzaW9ucygpOgotICAgICIiIiBUcnkgdG8gZmluZCBvdXQgdGhlIHZlcnNpb25zIG9mIGdjYyBhbmQgbGQuCi0gICAgICAgIElmIG5vdCBwb3NzaWJsZSBpdCByZXR1cm5zIE5vbmUgZm9yIGl0LgotICAgICIiIgotICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IFN0cmljdFZlcnNpb24KLSAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCi0gICAgaW1wb3J0IHJlCi0KLSAgICBnY2NfZXhlID0gZmluZF9leGVjdXRhYmxlKCdnY2MnKQotICAgIGlmIGdjY19leGU6Ci0gICAgICAgIG91dCA9IG9zLnBvcGVuKGdjY19leGUgKyAnIC1kdW1wdmVyc2lvbicsJ3InKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRfc3RyaW5nID0gb3V0LnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0LmNsb3NlKCkKLSAgICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKCcoXGQrXC5cZCtcLlxkKyknLCBvdXRfc3RyaW5nLCByZS5BU0NJSSkKLSAgICAgICAgaWYgcmVzdWx0OgotICAgICAgICAgICAgZ2NjX3ZlcnNpb24gPSBTdHJpY3RWZXJzaW9uKHJlc3VsdC5ncm91cCgxKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgICMgRU1YIGxkIGhhcyBubyB3YXkgb2YgcmVwb3J0aW5nIHZlcnNpb24gbnVtYmVyLCBhbmQgd2UgdXNlIEdDQwotICAgICMgYW55d2F5IC0gc28gd2UgY2FuIGxpbmsgT01GIERMTHMKLSAgICBsZF92ZXJzaW9uID0gTm9uZQotICAgIHJldHVybiAoZ2NjX3ZlcnNpb24sIGxkX3ZlcnNpb24pCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weSBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CmluZGV4IGViMTNjOTguLjhiOTMwNTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CkBAIC0zNSw4ICszNSw4IEBACiAKIGNsYXNzIERpc3R1dGlsc0ZpbGVFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkFueSBwcm9ibGVtcyBpbiB0aGUgZmlsZXN5c3RlbTogZXhwZWN0ZWQgZmlsZSBub3QgZm91bmQsIGV0Yy4KLSAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIElPRXJyb3Igb3IKLSAgICBPU0Vycm9yIGNvdWxkIGJlIHJhaXNlZC4iIiIKKyAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIE9TRXJyb3IKKyAgICBjb3VsZCBiZSByYWlzZWQuIiIiCiAgICAgcGFzcwogCiBjbGFzcyBEaXN0dXRpbHNPcHRpb25FcnJvciAoRGlzdHV0aWxzRXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQppbmRleCA5YmRkMTRlLi5mNmVkMjkwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQpAQCAtMjcsMjYgKzI3LDI2IEBACiAgICAgdHJ5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmc3JjID0gb3BlbihzcmMsICdyYicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJjb3VsZCBub3Qgb3BlbiAnJXMnOiAlcyIgJSAoc3JjLCBlLnN0cmVycm9yKSkKIAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhkc3QpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGVsZXRlICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkc3QgPSBvcGVuKGRzdCwgJ3diJykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKIAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZzcmMucmVhZChidWZmZXJfc2l6ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZyb20gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkc3Qud3JpdGUoYnVmKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHdyaXRlIHRvICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogICAgIGZpbmFsbHk6CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICBjb3B5X2l0ID0gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRzdCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAobnVtLCBtc2cpID0gZQogICAgICAgICBpZiBudW0gPT0gZXJybm8uRVhERVY6CiAgICAgICAgICAgICBjb3B5X2l0ID0gVHJ1ZQpAQCAtMjA1LDExICsyMDUsMTEgQEAKICAgICAgICAgY29weV9maWxlKHNyYywgZHN0LCB2ZXJib3NlPXZlcmJvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgKG51bSwgbXNnKSA9IGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgImNvdWxkbid0IG1vdmUgJyVzJyB0byAnJXMnIGJ5IGNvcHkvZGVsZXRlOiAiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKaW5kZXggYjNmNmNlMS4uOTY4OGYyMCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQpAQCAtNzI5LDcgKzcyOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hbmlmZXN0X2ZpbGUKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgLS0gTWlzY2VsbGFuZW91cyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3NwYXduLnB5IGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQppbmRleCBmNThjNTVmLi5iMWM1YTQ0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKQEAgLTMyLDggKzMyLDYgQEAKICAgICAgICAgX3NwYXduX3Bvc2l4KGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKICAgICBlbGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgX3NwYXduX250KGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIF9zcGF3bl9vczIoY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1kcnlfcnVuKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAgICJkb24ndCBrbm93IGhvdyB0byBzcGF3biBwcm9ncmFtcyBvbiBwbGF0Zm9ybSAnJXMnIiAlIG9zLm5hbWUpCkBAIC03NCwyNiArNzIsNiBAQAogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAogICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykpCiAKLWRlZiBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGg9MSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgIGV4ZWN1dGFibGUgPSBjbWRbMF0KLSAgICBpZiBzZWFyY2hfcGF0aDoKLSAgICAgICAgIyBlaXRoZXIgd2UgZmluZCBvbmUgb3IgaXQgc3RheXMgdGhlIHNhbWUKLSAgICAgICAgZXhlY3V0YWJsZSA9IGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlKSBvciBleGVjdXRhYmxlCi0gICAgbG9nLmluZm8oJyAnLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSkpCi0gICAgaWYgbm90IGRyeV9ydW46Ci0gICAgICAgICMgc3Bhd252IGZvciBPUy8yIEVNWCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYyA9IG9zLnNwYXdudihvcy5QX1dBSVQsIGV4ZWN1dGFibGUsIGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgIyB0aGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kIGlzbid0IGZvdW5kCi0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiY29tbWFuZCAnJXMnIGZhaWxlZDogJXMiICUgKGNtZFswXSwgZXhjLmFyZ3NbLTFdKSkKLSAgICAgICAgaWYgcmMgIT0gMDoKLSAgICAgICAgICAgICMgYW5kIHRoaXMgcmVmbGVjdHMgdGhlIGNvbW1hbmQgcnVubmluZyBidXQgZmFpbGluZwotICAgICAgICAgICAgbG9nLmRlYnVnKCJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykpCi0KIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiAgICAgX2NmZ190YXJnZXQgPSBOb25lCkBAIC0xODAsNyArMTU4LDcgQEAKICAgICBwYXRocyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4ZWN1dGFibGUpCiAKLSAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igb3MubmFtZSA9PSAnb3MyJykgYW5kIChleHQgIT0gJy5leGUnKToKKyAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CiAgICAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlICsgJy5leGUnCiAKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhlY3V0YWJsZSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CmluZGV4IGI5NDc5ODguLjc1NTM3ZGIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CkBAIC0xMTQsOCArMTE0LDYgQEAKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIiwgcHl0aG9uX2RpcikKICAgICBlbGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIikKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiSW5jbHVkZSIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICJJIGRvbid0IGtub3cgd2hlcmUgUHl0aG9uIGluc3RhbGxzIGl0cyBDIGhlYWRlciBmaWxlcyAiCkBAIC0xNTcsMTEgKzE1NSw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAiSSBkb24ndCBrbm93IHdoZXJlIFB5dGhvbiBpbnN0YWxscyBpdHMgbGlicmFyeSAiCkBAIC00NDIsNyArNDM1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKICAgICAgICAgcGFyc2VfbWFrZWZpbGUoZmlsZW5hbWUsIGcpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKICAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgpAQCAtNDU0LDcgKzQ0Nyw3IEBACiAgICAgICAgIGZpbGVuYW1lID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmaWxlOgogICAgICAgICAgICAgcGFyc2VfY29uZmlnX2goZmlsZSwgZykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQogICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CiAgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCkBAIC00OTIsNyArNDg1LDYgQEAKICAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQogICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQogCi0gICAgZ1snU08nXSA9ICcucHlkJwogICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwogICAgIGdbJ0VYRSddID0gIi5leGUiCiAgICAgZ1snVkVSU0lPTiddID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkucmVwbGFjZSgiLiIsICIiKQpAQCAtNTAyLDI0ICs0OTQsNiBAQAogICAgIF9jb25maWdfdmFycyA9IGcKIAogCi1kZWYgX2luaXRfb3MyKCk6Ci0gICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBPUy8yIiIiCi0gICAgZyA9IHt9Ci0gICAgIyBzZXQgYmFzaWMgaW5zdGFsbCBkaXJlY3RvcmllcwotICAgIGdbJ0xJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCi0gICAgZ1snQklOTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKLQotICAgICMgWFhYIGhtbW0uLiBhIG5vcm1hbCBpbnN0YWxsIHB1dHMgaW5jbHVkZSBmaWxlcyBoZXJlCi0gICAgZ1snSU5DTFVERVBZJ10gPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTApCi0KLSAgICBnWydTTyddID0gJy5weWQnCi0gICAgZ1snRVhUX1NVRkZJWCddID0gJy5weWQnCi0gICAgZ1snRVhFJ10gPSAiLmV4ZSIKLQotICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKLSAgICBfY29uZmlnX3ZhcnMgPSBnCi0KLQogZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CiAgICAgIiIiV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24KICAgICB2YXJpYWJsZXMgcmVsZXZhbnQgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAgR2VuZXJhbGx5IHRoaXMgaW5jbHVkZXMKQEAgLTU0NCw2ICs1MTgsMTEgQEAKICAgICAgICAgX2NvbmZpZ192YXJzWydwcmVmaXgnXSA9IFBSRUZJWAogICAgICAgICBfY29uZmlnX3ZhcnNbJ2V4ZWNfcHJlZml4J10gPSBFWEVDX1BSRUZJWAogCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNlZSBpc3N1ZTE5NTU1CisgICAgICAgIFNPID0gX2NvbmZpZ192YXJzLmdldCgnRVhUX1NVRkZJWCcpCisgICAgICAgIGlmIFNPIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2NvbmZpZ192YXJzWydTTyddID0gU08KKwogICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCiAgICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgpAQCAtNTk0LDQgKzU3Myw3IEBACiAgICAgcmV0dXJuZWQgYnkgJ2dldF9jb25maWdfdmFycygpJy4gIEVxdWl2YWxlbnQgdG8KICAgICBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKICAgICAiIiIKKyAgICBpZiBuYW1lID09ICdTTyc6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCdTTyBpcyBkZXByZWNhdGVkLCB1c2UgRVhUX1NVRkZJWCcsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICByZXR1cm4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQppbmRleCBkM2ZiMjRhLi42YjQyYzVhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKQEAgLTE2LDYgKzE2LDEzIEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwgcGF0Y2gKIAogdHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKK3RyeToKICAgICBpbXBvcnQgemlwZmlsZQogICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNzcsNyArODQsNyBAQAogCiAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKIAogICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgdGFyZ2V0X25hbWUpCiAKQEAgLTI3NSw2ICsyODIsNTggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRlbCBBUkNISVZFX0ZPUk1BVFNbJ3h4eCddCiAKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfb3duZXJfZ3JvdXAoc2VsZik6CisgICAgICAgICMgdGVzdGluZyBtYWtlX2FyY2hpdmUgd2l0aCBvd25lciBhbmQgZ3JvdXAsIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgIyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUncyBub3QgZ2lkL3VpZCBzdXBwb3J0CisgICAgICAgIGlmIFVJRF9HSURfU1VQUE9SVDoKKyAgICAgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JworCisgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfcm9vdF9vd25lcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorCisgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEFyY2hpdmVVdGlsVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKaW5kZXggMGFkMzJkNC4uYzhjY2RjMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfZHVtYi4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgemlwZmlsZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC03NSw4ICs3NCw2IEBACiAgICAgICAgICMgc2VlIHdoYXQgd2UgaGF2ZQogICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQogICAgICAgICBiYXNlID0gIiVzLiVzLnppcCIgJSAoZGlzdC5nZXRfZnVsbG5hbWUoKSwgY21kLnBsYXRfbmFtZSkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoJzonLCAnLScpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0X2NyZWF0ZWQsIFtiYXNlXSkKIApAQCAtOTAsNyArODcsNyBAQAogICAgICAgICBjb250ZW50cyA9IHNvcnRlZChvcy5wYXRoLmJhc2VuYW1lKGZuKSBmb3IgZm4gaW4gY29udGVudHMpCiAgICAgICAgIHdhbnRlZCA9IFsnZm9vLTAuMS1weSVzLiVzLmVnZy1pbmZvJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnZm9vLnB5J10KICAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpKQorICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBzb3J0ZWQod2FudGVkKSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQppbmRleCAyY2U5ZDQ0Li5jOGY2Yjg5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CkBAIC0yLDcgKzIsNiBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weQpAQCAtNjMsNyArNjIsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhweWNhY2hlX2RpcikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBweWNfZmlsZXMgPSBvcy5saXN0ZGlyKHB5Y2FjaGVfZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19pbml0X18uJXMucHljIiAlIGltcC5nZXRfdGFnKCksIHB5Y19maWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBweWNfZmlsZXMpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYWNrYWdlX2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgYnVncyAjMTY2ODU5Ni8jMTcyMDg5NwpAQCAtMTAyLDcgKzEwMiw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYm9pbGVkZWdncy4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ10pCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAnYnl0ZS1jb21waWxlIGRpc2FibGVkJykKICAgICBkZWYgdGVzdF9ieXRlX2NvbXBpbGVfb3B0aW1pemVkKHNlbGYpOgpAQCAtMTE5LDcgKzEyMCw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnYm9pbGVkZWdncy4lcy5weW8nICUgaW1wLmdldF90YWcoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZvdW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgZGVmIHRlc3RfZGlyX2luX3BhY2thZ2VfZGF0YShzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQppbmRleCAwZThkNjVlLi40ZGU4MjVhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKQEAgLTg3LDcgKzg3LDcgQEAKIAogICAgICAgICBjb25maWcgPSBsaXN0KHNvcnRlZChjb25maWcuaXRlbXMoKSkpCiAgICAgICAgIHdhaXRlZCA9IFsoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLCAoJ3JlYWxtJywgJ3B5cGknKSwKLSAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSwKKyAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpJyksCiAgICAgICAgICAgICAgICAgICAoJ3NlcnZlcicsICdzZXJ2ZXIxJyksICgndXNlcm5hbWUnLCAnbWUnKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25maWcsIHdhaXRlZCkKIApAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICBjb25maWcgPSBjbWQuX3JlYWRfcHlwaXJjKCkKICAgICAgICAgY29uZmlnID0gbGlzdChzb3J0ZWQoY29uZmlnLml0ZW1zKCkpKQogICAgICAgICB3YWl0ZWQgPSBbKCdwYXNzd29yZCcsICdzZWNyZXQnKSwgKCdyZWFsbScsICdweXBpJyksCi0gICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJyksCisgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyLWxvZ2luJyksICgndXNlcm5hbWUnLCAndGFyZWsnKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25maWcsIHdhaXRlZCkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQppbmRleCA5YThjYTE5Li5iN2ZkM2ZiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpAQCAtMzksNiArMzksNyBAQAogCiAKIGNsYXNzIERpc3RyaWJ1dGlvblRlc3RDYXNlKHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMTMsNiArMjE0LDM0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRpc3QuYW5ub3VuY2UsIGFyZ3MsIGt3YXJncykKIAogCisgICAgZGVmIHRlc3RfZmluZF9jb25maWdfZmlsZXNfZGlzYWJsZShzZWxmKToKKyAgICAgICAgIyBUaWNrZXQgIzExODA6IEFsbG93IHVzZXIgdG8gZGlzYWJsZSB0aGVpciBob21lIGNvbmZpZyBmaWxlLgorICAgICAgICB0ZW1wX2hvbWUgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfaG9tZSwgIi5weWRpc3R1dGlscy5jZmciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2hvbWUsICJweWRpc3R1dGlscy5jZmciKQorCisgICAgICAgIHdpdGggb3Blbih1c2VyX2ZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdbZGlzdHV0aWxzXVxuJykKKworICAgICAgICBkZWYgX2V4cGFuZGVyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIHRlbXBfaG9tZQorCisgICAgICAgIG9sZF9leHBhbmRlciA9IG9zLnBhdGguZXhwYW5kdXNlcgorICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBfZXhwYW5kZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IERpc3RyaWJ1dGlvbigpCisgICAgICAgICAgICBhbGxfZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKworICAgICAgICAgICAgZCA9IERpc3RyaWJ1dGlvbihhdHRycz17J3NjcmlwdF9hcmdzJzogWyctLW5vLXVzZXItY2ZnJ119KQorICAgICAgICAgICAgZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlciA9IG9sZF9leHBhbmRlcgorCisgICAgICAgICMgbWFrZSBzdXJlIC0tbm8tdXNlci1jZmcgZGlzYWJsZXMgdGhlIHVzZXIgY2ZnIGZpbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsX2ZpbGVzKS0xLCBsZW4oZmlsZXMpKQorCiBjbGFzcyBNZXRhZGF0YVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHN1cHBvcnQuRW52aXJvbkd1YXJkLAogICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTQwNiwxNCArNDM1LDE0IEBACiAgICAgICAgIFBLR19JTkZPLnNlZWsoMCkKICAgICAgICAgbWV0YWRhdGEucmVhZF9wa2dfZmlsZShQS0dfSU5GTykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5uYW1lLCAicGFja2FnZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLnZlcnNpb24sICIxLjAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5kZXNjcmlwdGlvbiwgInh4eCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLmRvd25sb2FkX3VybCwgJ2h0dHA6Ly9leGFtcGxlLmNvbScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLmtleXdvcmRzLCBbJ29uZScsICd0d28nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YWRhdGEucGxhdGZvcm1zLCBbJ1VOS05PV04nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YWRhdGEub2Jzb2xldGVzLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5yZXF1aXJlcywgWydmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5uYW1lLCAicGFja2FnZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEudmVyc2lvbiwgIjEuMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEuZGVzY3JpcHRpb24sICJ4eHgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmRvd25sb2FkX3VybCwgJ2h0dHA6Ly9leGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEua2V5d29yZHMsIFsnb25lJywgJ3R3byddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLnBsYXRmb3JtcywgWydVTktOT1dOJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEub2Jzb2xldGVzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLnJlcXVpcmVzLCBbJ2ZvbyddKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKaW5kZXggZWRlODhlNS4uMThlMWU1NyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbC4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzaXRlCkBAIC05NCw3ICs5Myw3IEBACiAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCiAKLSAgICAgICAgZm9yIGtleSBpbiAoJ250X3VzZXInLCAndW5peF91c2VyJywgJ29zMl9ob21lJyk6CisgICAgICAgIGZvciBrZXkgaW4gKCdudF91c2VyJywgJ3VuaXhfdXNlcicpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIElOU1RBTExfU0NIRU1FUykKIAogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCd9KQpAQCAtMTkzLDcgKzE5Miw4IEBACiAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICBmb3VuZCA9IFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUpIGZvciBsaW5lIGluIGNvbnRlbnQuc3BsaXRsaW5lcygpXQotICAgICAgICBleHBlY3RlZCA9IFsnaGVsbG8ucHknLCAnaGVsbG8uJXMucHljJyAlIGltcC5nZXRfdGFnKCksICdzYXloaScsCisgICAgICAgIGV4cGVjdGVkID0gWydoZWxsby5weScsICdoZWxsby4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgJ3NheWhpJywKICAgICAgICAgICAgICAgICAgICAgJ1VOS05PV04tMC4wLjAtcHklcy4lcy5lZ2ctaW5mbycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgZXhwZWN0ZWQpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQppbmRleCBkMGRmY2EwLi40MGRkMWE5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CkBAIC0xLDcgKzEsNyBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YS4iIiIKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYiBpbXBvcnQgaW5zdGFsbF9saWIKQEAgLTQ0LDggKzQ0LDEwIEBACiAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocHJvamVjdF9kaXIsICdmb28ucHknKQogICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZiwgJyMgcHl0aG9uIGZpbGUnKQogICAgICAgICBjbWQuYnl0ZV9jb21waWxlKFtmXSkKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsIGRlYnVnX292ZXJyaWRlPVRydWUpCi0gICAgICAgIHB5b19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1UcnVlKQorICAgICAgICBweW9fZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX2ZpbGUpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHlvX2ZpbGUpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKaW5kZXggZTYzNTlkNi4uMTY0NTg2YiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQpAQCAtMTQsNiArMTQsMTIgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBaTElCX1NVUFBPUlQgPSBGYWxzZQogCit0cnk6CisgICAgaW1wb3J0IGdycAorICAgIGltcG9ydCBwd2QKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVUlEX0dJRF9TVVBQT1JUID0gRmFsc2UKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdCBpbXBvcnQgc2Rpc3QsIHNob3dfZm9ybWF0cwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCkBAIC00MjUsNiArNDMxLDU2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZpbGVuYW1lcyksIFsnZmFrZS0xLjAnLCAnZmFrZS0xLjAvUEtHLUlORk8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zha2UtMS4wL1JFQURNRS5tYW51YWwnXSkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9tYWtlX2Rpc3RyaWJ1dGlvbl9vd25lcl9ncm91cChzZWxmKToKKworICAgICAgICAjIGNoZWNrIGlmIHRhciBhbmQgZ3ppcCBhcmUgaW5zdGFsbGVkCisgICAgICAgIGlmIChmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGlzIE5vbmUgb3IKKyAgICAgICAgICAgICAgICBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSBpcyBOb25lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgbm93IGJ1aWxkaW5nIGEgc2Rpc3QKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKworICAgICAgICAjIGNyZWF0aW5nIGEgZ3p0YXIgYW5kIHNwZWNpZnlpbmcgdGhlIG93bmVyK2dyb3VwCisgICAgICAgIGNtZC5mb3JtYXRzID0gWydnenRhciddCisgICAgICAgIGNtZC5vd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBjbWQuZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIG1ha2luZyBzdXJlIHdlIGhhdmUgdGhlIGdvb2QgcmlnaHRzCisgICAgICAgIGFyY2hpdmVfbmFtZSA9IGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcsICdmYWtlLTEuMC50YXIuZ3onKQorICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIuZ2lkLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKKyAgICAgICAgIyBidWlsZGluZyBhIHNkaXN0IGFnYWluCisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBjcmVhdGluZyBhIGd6dGFyCisgICAgICAgIGNtZC5mb3JtYXRzID0gWydnenRhciddCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBnb29kIHJpZ2h0cworICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisKKyAgICAgICAgIyBub3RlIHRoYXQgd2UgYXJlIG5vdCB0ZXN0aW5nIHRoZSBncm91cCBvd25lcnNoaXAgaGVyZQorICAgICAgICAjIGJlY2F1c2UsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm1zIGFuZCB0aGUgY29udGFpbmVyCisgICAgICAgICMgcmlnaHRzIChzZWUgIzc0MDgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCBvcy5nZXR1aWQoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU0Rpc3RUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKaW5kZXggMDc4MTJkOC4uYjVmZGM5OCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CkBAIC0xLDE2ICsxLDE0IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnN5c2NvbmZpZy4iIiIKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlc3QKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiBmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IGdldF9kZWZhdWx0X2NvbXBpbGVyCiBmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCiAKLWNsYXNzIFN5c2NvbmZpZ1Rlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3lzY29uZmlnVGVzdENhc2Uoc3VwcG9ydC5FbnZpcm9uR3VhcmQsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKFN5c2NvbmZpZ1Rlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCiAgICAgICAgIHNlbGYubWFrZWZpbGUgPSBOb25lCkBAIC0zMiw3ICszMCw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjb25maWdfaCksIGNvbmZpZ19oKQogCiAgICAgZGVmIHRlc3RfZ2V0X3B5dGhvbl9saWIoc2VsZik6Ci0gICAgICAgIGxpYl9kaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKQogICAgICAgICAjIFhYWCBkb2Vzbid0IHdvcmsgb24gTGludXggd2hlbiBQeXRob24gd2FzIG5ldmVyIGluc3RhbGxlZCBiZWZvcmUKICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGxpYl9kaXIpLCBsaWJfZGlyKQogICAgICAgICAjIHRlc3QgZm9yIHB5dGhvbnh4LmxpYj8KQEAgLTY3LDggKzY0LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhQeXRob25faCksIFB5dGhvbl9oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5c2NvbmZpZy5faXNfcHl0aG9uX3NvdXJjZV9kaXIoc3JjZGlyKSkKICAgICAgICAgZWxpZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZGlybmFtZShzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjZGlyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICAgICBzcmNkaXIpCiAKICAgICBkZWYgdGVzdF9zcmNkaXJfaW5kZXBlbmRlbnRfb2ZfY3dkKHNlbGYpOgogICAgICAgICAjIHNyY2RpciBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKQEAgLTEyOSwxMCArMTI3LDEzIEBACiAKICAgICBkZWYgdGVzdF9zeXNjb25maWdfbW9kdWxlKHNlbGYpOgogICAgICAgICBpbXBvcnQgc3lzY29uZmlnIGFzIGdsb2JhbF9zeXNjb25maWcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpKQogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJyksJ2NvbXBpbGVyIGZsYWdzIGN1c3RvbWl6ZWQnKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpLAorICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGVyIGZsYWdzIGN1c3RvbWl6ZWQnKQogICAgIGRlZiB0ZXN0X3N5c2NvbmZpZ19jb21waWxlcl92YXJzKHNlbGYpOgogICAgICAgICAjIE9uIE9TIFgsIGJpbmFyeSBpbnN0YWxsZXJzIHN1cHBvcnQgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZGluZyBvbgogICAgICAgICAjIHZhcmlvdXMgbGV2ZWxzIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggZGlmZmVyaW5nIFhjb2RlCkBAIC0xNTEsOSArMTUyLDMwIEBACiAgICAgICAgIGltcG9ydCBzeXNjb25maWcgYXMgZ2xvYmFsX3N5c2NvbmZpZwogICAgICAgICBpZiBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJyk6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciwgJ1NPJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX3ZhbHVlKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19pbl92YXJzKHNlbGYpOgorICAgICAgICB2YXJzID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHZhcnNbJ1NPJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyc1snU08nXSwgdmFyc1snRVhUX1NVRkZJWCddKQogCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQppbmRleCBhNDc0NTk2Li4xZmNiYTg4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQogICAgICAgICBmb3IgYXR0ciwgd2FpdGVkIGluICgoJ3VzZXJuYW1lJywgJ21lJyksICgncGFzc3dvcmQnLCAnc2VjcmV0JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncmVhbG0nLCAncHlwaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihjbWQsIGF0dHIpLCB3YWl0ZWQpCiAKICAgICBkZWYgdGVzdF9zYXZlZF9wYXNzd29yZChzZWxmKToKQEAgLTExNCwxMSArMTE0LDEyIEBACiAgICAgICAgICAjIHdoYXQgZGlkIHdlIHNlbmQgPwogICAgICAgICBoZWFkZXJzID0gZGljdChzZWxmLmxhc3Rfb3Blbi5yZXEuaGVhZGVycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjA4NycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoZWFkZXJzWydDb250ZW50LXR5cGUnXS5zdGFydHN3aXRoKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfbWV0aG9kKCksICdQT1NUJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKKyAgICAgICAgY29udGVudF90eXBlID0gaGVhZGVyc1snQ29udGVudC10eXBlJ10KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbnRlbnRfdHlwZS5zdGFydHN3aXRoKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9tZXRob2QoKSwgJ1BPU1QnKQorICAgICAgICBleHBlY3RlZF91cmwgPSAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X2Z1bGxfdXJsKCksIGV4cGVjdGVkX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKHVwbG9hZFRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQppbmRleCAwMDIxOWNmLi41NDg4NjVjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQpAQCAtMjM2LDcgKzIzNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9yb290LCAnYzpcXHJvb3QnLCAnaXRzXFxoZXJlJykKIAotICAgICAgICAjIFhYWCBwbGF0Zm9ybXMgdG8gYmUgY292ZXJlZDogb3MyLCBtYWMKKyAgICAgICAgIyBYWFggcGxhdGZvcm1zIHRvIGJlIGNvdmVyZWQ6IG1hYwogCiAgICAgZGVmIHRlc3RfY2hlY2tfZW52aXJvbihzZWxmKToKICAgICAgICAgdXRpbC5fZW52aXJvbl9jaGVja2VkID0gMApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CmluZGV4IDY3ZDgxNjYuLmVmYjM4MzQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdHJpbmcKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgpAQCAtMTU0LDEyICsxNTQsNiBAQAogICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCiAKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIChkcml2ZSwgcGF0aCkgPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aG5hbWUpCi0gICAgICAgIGlmIHBhdGhbMF0gPT0gb3Muc2VwOgotICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCi0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKCJub3RoaW5nIGtub3duIGFib3V0IHBsYXRmb3JtICclcyciICUgb3MubmFtZSkKIApAQCAtMjEzLDggKzIwNyw4IEBACiAKIAogZGVmIGdyb2tfZW52aXJvbm1lbnRfZXJyb3IgKGV4YywgcHJlZml4PSJlcnJvcjogIik6Ci0gICAgIiIiR2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFuIEVudmlyb25tZW50RXJyb3IgKElPRXJyb3Igb3IKLSAgICBPU0Vycm9yKSBleGNlcHRpb24gb2JqZWN0LiAgSGFuZGxlcyBQeXRob24gMS41LjEgYW5kIDEuNS4yIHN0eWxlcywgYW5kCisgICAgIiIiR2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFuIE9TRXJyb3IKKyAgICBleGNlcHRpb24gb2JqZWN0LiAgSGFuZGxlcyBQeXRob24gMS41LjEgYW5kIDEuNS4yIHN0eWxlcywgYW5kCiAgICAgZG9lcyB3aGF0IGl0IGNhbiB0byBkZWFsIHdpdGggZXhjZXB0aW9uIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIGEKICAgICBmaWxlbmFtZSAod2hpY2ggaGFwcGVucyB3aGVuIHRoZSBlcnJvciBpcyBkdWUgdG8gYSB0d28tZmlsZSBvcGVyYXRpb24sCiAgICAgc3VjaCBhcyAncmVuYW1lKCknIG9yICdsaW5rKCknLiAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBhcyBhIHN0cmluZwpAQCAtNDU5LDkgKzQ1MywxMCBAQAogICAgICAgICAgICAgIyAgIGNmaWxlIC0gYnl0ZS1jb21waWxlZCBmaWxlCiAgICAgICAgICAgICAjICAgZGZpbGUgLSBwdXJwb3J0ZWQgc291cmNlIGZpbGVuYW1lIChzYW1lIGFzICdmaWxlJyBieSBkZWZhdWx0KQogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQorICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKICAgICAgICAgICAgIGRmaWxlID0gZmlsZQogICAgICAgICAgICAgaWYgcHJlZml4OgogICAgICAgICAgICAgICAgIGlmIGZpbGVbOmxlbihwcmVmaXgpXSAhPSBwcmVmaXg6CmRpZmYgLS1naXQgYS9MaWIvZG9jdGVzdC5weSBiL0xpYi9kb2N0ZXN0LnB5CmluZGV4IDBiNDg1ZjEuLmVlNGUwNjggMTAwNjQ0Ci0tLSBhL0xpYi9kb2N0ZXN0LnB5CisrKyBiL0xpYi9kb2N0ZXN0LnB5CkBAIC02Miw2ICs2Miw3IEBACiAgICAgJ1JFUE9SVF9ORElGRicsCiAgICAgJ1JFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUnLAogICAgICdSRVBPUlRJTkdfRkxBR1MnLAorICAgICdGQUlMX0ZBU1QnLAogICAgICMgMS4gVXRpbGl0eSBGdW5jdGlvbnMKICAgICAjIDIuIEV4YW1wbGUgJiBEb2NUZXN0CiAgICAgJ0V4YW1wbGUnLApAQCAtOTIsNiArOTMsNyBAQAogXQogCiBpbXBvcnQgX19mdXR1cmVfXworaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTE1MCwxMSArMTUyLDEzIEBACiBSRVBPUlRfQ0RJRkYgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfQ0RJRkYnKQogUkVQT1JUX05ESUZGID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX05ESUZGJykKIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFJykKK0ZBSUxfRkFTVCA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ0ZBSUxfRkFTVCcpCiAKIFJFUE9SVElOR19GTEFHUyA9IChSRVBPUlRfVURJRkYgfAogICAgICAgICAgICAgICAgICAgIFJFUE9SVF9DRElGRiB8CiAgICAgICAgICAgICAgICAgICAgUkVQT1JUX05ESUZGIHwKLSAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFKQorICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgfAorICAgICAgICAgICAgICAgICAgIEZBSUxfRkFTVCkKIAogIyBTcGVjaWFsIHN0cmluZyBtYXJrZXJzIGZvciB1c2UgaW4gYHdhbnRgIHN0cmluZ3M6CiBCTEFOS0xJTkVfTUFSS0VSID0gJzxCTEFOS0xJTkU+JwpAQCAtMjEyLDcgKzIxNiw3IEBACiAgICAgaWYgbW9kdWxlX3JlbGF0aXZlOgogICAgICAgICBwYWNrYWdlID0gX25vcm1hbGl6ZV9tb2R1bGUocGFja2FnZSwgMykKICAgICAgICAgZmlsZW5hbWUgPSBfbW9kdWxlX3JlbGF0aXZlX3BhdGgocGFja2FnZSwgZmlsZW5hbWUpCi0gICAgICAgIGlmIGhhc2F0dHIocGFja2FnZSwgJ19fbG9hZGVyX18nKToKKyAgICAgICAgaWYgZ2V0YXR0cihwYWNrYWdlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdnZXRfZGF0YScpOgogICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMgPSBwYWNrYWdlLl9fbG9hZGVyX18uZ2V0X2RhdGEoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9IGZpbGVfY29udGVudHMuZGVjb2RlKGVuY29kaW5nKQpAQCAtOTE0LDYgKzkxOCw4IEBACiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlIGlzIGluc3BlY3QuZ2V0bW9kdWxlKG9iamVjdCkKICAgICAgICAgZWxpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuX19kaWN0X18gaXMgb2JqZWN0Ll9fZ2xvYmFsc19fCisgICAgICAgIGVsaWYgaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3Iob2JqZWN0KToKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUuX19uYW1lX18gPT0gb2JqZWN0Ll9fb2JqY2xhc3NfXy5fX21vZHVsZV9fCiAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2NsYXNzKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fbmFtZV9fID09IG9iamVjdC5fX21vZHVsZV9fCiAgICAgICAgIGVsaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CkBAIC05NDYsNyArOTUyLDcgQEAKICAgICAgICAgICAgIGZvciB2YWxuYW1lLCB2YWwgaW4gb2JqLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgdmFsbmFtZSA9ICclcy4lcycgJSAobmFtZSwgdmFsbmFtZSkKICAgICAgICAgICAgICAgICAjIFJlY3Vyc2UgdG8gZnVuY3Rpb25zICYgY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpKSBhbmQKKyAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkpIGFuZAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcm9tX21vZHVsZShtb2R1bGUsIHZhbCkpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5kKHRlc3RzLCB2YWwsIHZhbG5hbWUsIG1vZHVsZSwgc291cmNlX2xpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzLCBzZWVuKQpAQCAtOTU4LDkgKzk2NCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18ga2V5cyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3RyaW5nczogJXIiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSh2YWxuYW1lKSwpKQotICAgICAgICAgICAgICAgIGlmIG5vdCAoaW5zcGVjdC5pc2Z1bmN0aW9uKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtZXRob2QodmFsKSBvciBpbnNwZWN0LmlzbW9kdWxlKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsLCBzdHIpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtb2R1bGUodmFsKSBvciBpc2luc3RhbmNlKHZhbCwgc3RyKSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18gdmFsdWVzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzdHJpbmdzLCBmdW5jdGlvbnMsIG1ldGhvZHMsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3Nlcywgb3IgbW9kdWxlczogJXIiICUKQEAgLTk3OSw3ICs5ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICB2YWwgPSBnZXRhdHRyKG9iaiwgdmFsbmFtZSkuX19mdW5jX18KIAogICAgICAgICAgICAgICAgICMgUmVjdXJzZSB0byBtZXRob2RzLCBwcm9wZXJ0aWVzLCBhbmQgbmVzdGVkIGNsYXNzZXMuCi0gICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0LmlzZnVuY3Rpb24odmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSBvcgorICAgICAgICAgICAgICAgIGlmICgoaW5zcGVjdC5pc3JvdXRpbmUodmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSBvcgogICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsLCBwcm9wZXJ0eSkpIGFuZAogICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zyb21fbW9kdWxlKG1vZHVsZSwgdmFsKSk6CiAgICAgICAgICAgICAgICAgICAgIHZhbG5hbWUgPSAnJXMuJXMnICUgKG5hbWUsIHZhbG5hbWUpCkBAIC0xMzQyLDYgKzEzNDcsOSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICgidW5rbm93biBvdXRjb21lIiwgb3V0Y29tZSkKIAorICAgICAgICAgICAgaWYgZmFpbHVyZXMgYW5kIHNlbGYub3B0aW9uZmxhZ3MgJiBGQUlMX0ZBU1Q6CisgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICAjIFJlc3RvcmUgdGhlIG9wdGlvbiBmbGFncyAoaW4gY2FzZSB0aGV5IHdlcmUgbW9kaWZpZWQpCiAgICAgICAgIHNlbGYub3B0aW9uZmxhZ3MgPSBvcmlnaW5hbF9vcHRpb25mbGFncwogCkBAIC0yMjgzLDYgKzIyOTEsMTIgQEAKICAgICBfX3N0cl9fID0gc2hvcnREZXNjcmlwdGlvbgogCiAKK2NsYXNzIF9Eb2NUZXN0U3VpdGUodW5pdHRlc3QuVGVzdFN1aXRlKToKKworICAgIGRlZiBfcmVtb3ZlVGVzdEF0SW5kZXgoc2VsZiwgaW5kZXgpOgorICAgICAgICBwYXNzCisKKwogZGVmIERvY1Rlc3RTdWl0ZShtb2R1bGU9Tm9uZSwgZ2xvYnM9Tm9uZSwgZXh0cmFnbG9icz1Ob25lLCB0ZXN0X2ZpbmRlcj1Ob25lLAogICAgICAgICAgICAgICAgICAqKm9wdGlvbnMpOgogICAgICIiIgpAQCAtMjMyOCw3ICsyMzQyLDcgQEAKIAogICAgIGlmIG5vdCB0ZXN0cyBhbmQgc3lzLmZsYWdzLm9wdGltaXplID49MjoKICAgICAgICAgIyBTa2lwIGRvY3Rlc3RzIHdoZW4gcnVubmluZyB3aXRoIC1PMgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlID0gX0RvY1Rlc3RTdWl0ZSgpCiAgICAgICAgIHN1aXRlLmFkZFRlc3QoU2tpcERvY1Rlc3RDYXNlKG1vZHVsZSkpCiAgICAgICAgIHJldHVybiBzdWl0ZQogICAgIGVsaWYgbm90IHRlc3RzOgpAQCAtMjM0Miw3ICsyMzU2LDcgQEAKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtb2R1bGUsICJoYXMgbm8gZG9jc3RyaW5ncyIpCiAKICAgICB0ZXN0cy5zb3J0KCkKLSAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKIAogICAgIGZvciB0ZXN0IGluIHRlc3RzOgogICAgICAgICBpZiBsZW4odGVzdC5leGFtcGxlcykgPT0gMDoKQEAgLTI0NTIsNyArMjQ2Niw3IEBACiAgICAgZW5jb2RpbmcKICAgICAgIEFuIGVuY29kaW5nIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGZpbGVzIHRvIHVuaWNvZGUuCiAgICAgIiIiCi0gICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIHN1aXRlID0gX0RvY1Rlc3RTdWl0ZSgpCiAKICAgICAjIFdlIGRvIHRoaXMgaGVyZSBzbyB0aGF0IF9ub3JtYWxpemVfbW9kdWxlIGlzIGNhbGxlZCBhdCB0aGUgcmlnaHQKICAgICAjIGxldmVsLiAgSWYgaXQgd2VyZSBjYWxsZWQgaW4gRG9jRmlsZVRlc3QsIHRoZW4gdGhpcyBmdW5jdGlvbgpAQCAtMjcwMiwxMyArMjcxNiwzMCBAQAogCiAKIGRlZiBfdGVzdCgpOgotICAgIHRlc3RmaWxlcyA9IFthcmcgZm9yIGFyZyBpbiBzeXMuYXJndlsxOl0gaWYgYXJnIGFuZCBhcmdbMF0gIT0gJy0nXQotICAgIGlmIG5vdCB0ZXN0ZmlsZXM6Ci0gICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQotICAgICAgICBpZiAnX19sb2FkZXJfXycgaW4gZ2xvYmFscygpOiAgICAgICAgICAjIHB5dGhvbiAtbQotICAgICAgICAgICAgbmFtZSwgXyA9IG9zLnBhdGguc3BsaXRleHQobmFtZSkKLSAgICAgICAgcHJpbnQoInVzYWdlOiB7MH0gWy12XSBmaWxlIC4uLiIuZm9ybWF0KG5hbWUpKQotICAgICAgICByZXR1cm4gMgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJkb2N0ZXN0IHJ1bm5lciIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ByaW50IHZlcnkgdmVyYm9zZSBvdXRwdXQgZm9yIGFsbCB0ZXN0cycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vcHRpb24nLCBhY3Rpb249J2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPU9QVElPTkZMQUdTX0JZX05BTUUua2V5cygpLCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ3NwZWNpZnkgYSBkb2N0ZXN0IG9wdGlvbiBmbGFnIHRvIGFwcGx5JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB0byB0aGUgdGVzdCBydW47IG1heSBiZSBzcGVjaWZpZWQgbW9yZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdGhhbiBvbmNlIHRvIGFwcGx5IG11bHRpcGxlIG9wdGlvbnMnKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZhaWwtZmFzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnc3RvcCBydW5uaW5nIHRlc3RzIGFmdGVyIGZpcnN0IGZhaWx1cmUgKHRoaXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGlzIGEgc2hvcnRoYW5kIGZvciAtbyBGQUlMX0ZBU1QsIGFuZCBpcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIC1vIG9wdGlvbnMpJykpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZmlsZScsIG5hcmdzPScrJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpbGUgY29udGFpbmluZyB0aGUgdGVzdHMgdG8gcnVuJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHRlc3RmaWxlcyA9IGFyZ3MuZmlsZQorICAgICMgVmVyYm9zZSB1c2VkIHRvIGJlIGhhbmRsZWQgYnkgdGhlICJpbnNwZWN0IGFyZ3YiIG1hZ2ljIGluIERvY1Rlc3RSdW5uZXIsCisgICAgIyBidXQgc2luY2Ugd2UgYXJlIHVzaW5nIGFyZ3BhcnNlIHdlIGFyZSBwYXNzaW5nIGl0IG1hbnVhbGx5IG5vdy4KKyAgICB2ZXJib3NlID0gYXJncy52ZXJib3NlCisgICAgb3B0aW9ucyA9IDAKKyAgICBmb3Igb3B0aW9uIGluIGFyZ3Mub3B0aW9uOgorICAgICAgICBvcHRpb25zIHw9IE9QVElPTkZMQUdTX0JZX05BTUVbb3B0aW9uXQorICAgIGlmIGFyZ3MuZmFpbF9mYXN0OgorICAgICAgICBvcHRpb25zIHw9IEZBSUxfRkFTVAogICAgIGZvciBmaWxlbmFtZSBpbiB0ZXN0ZmlsZXM6CiAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCIucHkiKToKICAgICAgICAgICAgICMgSXQgaXMgYSBtb2R1bGUgLS0gaW5zZXJ0IGl0cyBkaXIgaW50byBzeXMucGF0aCBhbmQgdHJ5IHRvCkBAIC0yNzE4LDkgKzI3NDksMTAgQEAKICAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBkaXJuYW1lKQogICAgICAgICAgICAgbSA9IF9faW1wb3J0X18oZmlsZW5hbWVbOi0zXSkKICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQotICAgICAgICAgICAgZmFpbHVyZXMsIF8gPSB0ZXN0bW9kKG0pCisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3Rtb2QobSwgdmVyYm9zZT12ZXJib3NlLCBvcHRpb25mbGFncz1vcHRpb25zKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmFpbHVyZXMsIF8gPSB0ZXN0ZmlsZShmaWxlbmFtZSwgbW9kdWxlX3JlbGF0aXZlPUZhbHNlKQorICAgICAgICAgICAgZmFpbHVyZXMsIF8gPSB0ZXN0ZmlsZShmaWxlbmFtZSwgbW9kdWxlX3JlbGF0aXZlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9dmVyYm9zZSwgb3B0aW9uZmxhZ3M9b3B0aW9ucykKICAgICAgICAgaWYgZmFpbHVyZXM6CiAgICAgICAgICAgICByZXR1cm4gMQogICAgIHJldHVybiAwCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkgYi9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKaW5kZXggMjkxNDM3Yy4uMDM5MjM3OSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQpAQCAtMzY4LDggKzM2OCw3IEBACiAgICAgICAgICAgICAgICAgeWllbGQgKGluZGVudCArICcgICAgISEgaW52YWxpZCBlbGVtZW50IGluIHRva2VuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlzdDogeyFyfScuZm9ybWF0KHRva2VuKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdG9rZW4uX3BwKGluZGVudCsnICAgICcpOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB0b2tlbi5fcHAoaW5kZW50KycgICAgJykKICAgICAgICAgaWYgc2VsZi5kZWZlY3RzOgogICAgICAgICAgICAgZXh0cmEgPSAnIERlZmVjdHM6IHt9Jy5mb3JtYXQoc2VsZi5kZWZlY3RzKQogICAgICAgICBlbHNlOgpAQCAtMTMxNSwyNCArMTMxNCwyMiBAQAogIyBQYXJzZXIKICMKIAotIiIiUGFyc2Ugc3RyaW5ncyBhY2NvcmRpbmcgdG8gUkZDODIyLzIwNDcvMjgyMi81MzIyIHJ1bGVzLgotCi1UaGlzIGlzIGEgc3RhdGVsZXNzIHBhcnNlci4gIEVhY2ggZ2V0X1hYWCBmdW5jdGlvbiBhY2NlcHRzIGEgc3RyaW5nIGFuZAotcmV0dXJucyBlaXRoZXIgYSBUZXJtaW5hbCBvciBhIFRva2VuTGlzdCByZXByZXNlbnRpbmcgdGhlIFJGQyBvYmplY3QgbmFtZWQKLWJ5IHRoZSBtZXRob2QgYW5kIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyB1bnBhcnNlZCBjaGFyYWN0ZXJzCi1mcm9tIHRoZSBpbnB1dC4gIFRodXMgYSBwYXJzZXIgbWV0aG9kIGNvbnN1bWVzIHRoZSBuZXh0IHN5bnRhY3RpYyBjb25zdHJ1Y3QKLW9mIGEgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY29uc3RydWN0IHBsdXMgdGhlCi11bnBhcnNlZCByZW1haW5kZXIgb2YgdGhlIGlucHV0IHN0cmluZy4KLQotRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3RydWN0dXJlZCBoZWFkZXIgaXMgYSAncGhyYXNlJywKLXRoZW46Ci0KLSAgICBwaHJhc2UsIHZhbHVlID0gZ2V0X3BocmFzZSh2YWx1ZSkKLQotcmV0dXJucyB0aGUgY29tcGxldGUgcGhyYXNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgdmFsdWUsIHBsdXMgYW55Ci1jaGFyYWN0ZXJzIGxlZnQgaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgcGhyYXNlIGlzIHJlbW92ZWQuCi0KLSIiIgorIyBQYXJzZSBzdHJpbmdzIGFjY29yZGluZyB0byBSRkM4MjIvMjA0Ny8yODIyLzUzMjIgcnVsZXMuCisjCisjIFRoaXMgaXMgYSBzdGF0ZWxlc3MgcGFyc2VyLiAgRWFjaCBnZXRfWFhYIGZ1bmN0aW9uIGFjY2VwdHMgYSBzdHJpbmcgYW5kCisjIHJldHVybnMgZWl0aGVyIGEgVGVybWluYWwgb3IgYSBUb2tlbkxpc3QgcmVwcmVzZW50aW5nIHRoZSBSRkMgb2JqZWN0IG5hbWVkCisjIGJ5IHRoZSBtZXRob2QgYW5kIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyB1bnBhcnNlZCBjaGFyYWN0ZXJzCisjIGZyb20gdGhlIGlucHV0LiAgVGh1cyBhIHBhcnNlciBtZXRob2QgY29uc3VtZXMgdGhlIG5leHQgc3ludGFjdGljIGNvbnN0cnVjdAorIyBvZiBhIGdpdmVuIHR5cGUgYW5kIHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNvbnN0cnVjdCBwbHVzIHRoZQorIyB1bnBhcnNlZCByZW1haW5kZXIgb2YgdGhlIGlucHV0IHN0cmluZy4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3RydWN0dXJlZCBoZWFkZXIgaXMgYSAncGhyYXNlJywKKyMgdGhlbjoKKyMKKyMgICAgIHBocmFzZSwgdmFsdWUgPSBnZXRfcGhyYXNlKHZhbHVlKQorIworIyByZXR1cm5zIHRoZSBjb21wbGV0ZSBwaHJhc2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyB2YWx1ZSwgcGx1cyBhbnkKKyMgY2hhcmFjdGVycyBsZWZ0IGluIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIHBocmFzZSBpcyByZW1vdmVkLgogCiBfd3NwX3NwbGl0dGVyID0gcmUuY29tcGlsZShyJyhbe31dKyknLmZvcm1hdCgnJy5qb2luKFdTUCkpKS5zcGxpdAogX25vbl9hdG9tX2VuZF9tYXRjaGVyID0gcmUuY29tcGlsZShyIltee31dKyIuZm9ybWF0KApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2NvbnRlbnRtYW5hZ2VyLnB5IGIvTGliL2VtYWlsL2NvbnRlbnRtYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjM2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkKQEAgLTAsMCArMSwyNDkgQEAKK2ltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGVtYWlsLmNoYXJzZXQKK2ltcG9ydCBlbWFpbC5tZXNzYWdlCitpbXBvcnQgZW1haWwuZXJyb3JzCitmcm9tIGVtYWlsIGltcG9ydCBxdW9wcmltaW1lCisKK2NsYXNzIENvbnRlbnRNYW5hZ2VyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9oYW5kbGVycyA9IHt9CisgICAgICAgIHNlbGYuc2V0X2hhbmRsZXJzID0ge30KKworICAgIGRlZiBhZGRfZ2V0X2hhbmRsZXIoc2VsZiwga2V5LCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi5nZXRfaGFuZGxlcnNba2V5XSA9IGhhbmRsZXIKKworICAgIGRlZiBnZXRfY29udGVudChzZWxmLCBtc2csICphcmdzLCAqKmt3KToKKyAgICAgICAgY29udGVudF90eXBlID0gbXNnLmdldF9jb250ZW50X3R5cGUoKQorICAgICAgICBpZiBjb250ZW50X3R5cGUgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbY29udGVudF90eXBlXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICBtYWludHlwZSA9IG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpCisgICAgICAgIGlmIG1haW50eXBlIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzW21haW50eXBlXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICBpZiAnJyBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1snJ10obXNnLCAqYXJncywgKiprdykKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoY29udGVudF90eXBlKQorCisgICAgZGVmIGFkZF9zZXRfaGFuZGxlcihzZWxmLCB0eXBla2V5LCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi5zZXRfaGFuZGxlcnNbdHlwZWtleV0gPSBoYW5kbGVyCisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBvYmosICphcmdzLCAqKmt3KToKKyAgICAgICAgaWYgbXNnLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICAjIFhYWDogaXMgdGhpcyBlcnJvciBhIGdvb2QgaWRlYSBvciBub3Q/ICBXZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLAorICAgICAgICAgICAgIyBidXQgd2UgY2FuJ3QgYWRkIGl0IGxhdGVyLCBzbyBkbyBpdCBmb3Igbm93LgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzZXRfY29udGVudCBub3QgdmFsaWQgb24gbXVsdGlwYXJ0IikKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuX2ZpbmRfc2V0X2hhbmRsZXIobXNnLCBvYmopCisgICAgICAgIG1zZy5jbGVhcl9jb250ZW50KCkKKyAgICAgICAgaGFuZGxlcihtc2csIG9iaiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgX2ZpbmRfc2V0X2hhbmRsZXIoc2VsZiwgbXNnLCBvYmopOgorICAgICAgICBmdWxsX3BhdGhfZm9yX2Vycm9yID0gTm9uZQorICAgICAgICBmb3IgdHlwIGluIHR5cGUob2JqKS5fX21yb19fOgorICAgICAgICAgICAgaWYgdHlwIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1t0eXBdCisgICAgICAgICAgICBxbmFtZSA9IHR5cC5fX3F1YWxuYW1lX18KKyAgICAgICAgICAgIG1vZG5hbWUgPSBnZXRhdHRyKHR5cCwgJ19fbW9kdWxlX18nLCAnJykKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9ICcuJy5qb2luKChtb2RuYW1lLCBxbmFtZSkpIGlmIG1vZG5hbWUgZWxzZSBxbmFtZQorICAgICAgICAgICAgaWYgZnVsbF9wYXRoX2Zvcl9lcnJvciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aF9mb3JfZXJyb3IgPSBmdWxsX3BhdGgKKyAgICAgICAgICAgIGlmIGZ1bGxfcGF0aCBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbZnVsbF9wYXRoXQorICAgICAgICAgICAgaWYgcW5hbWUgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW3FuYW1lXQorICAgICAgICAgICAgbmFtZSA9IHR5cC5fX25hbWVfXworICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbbmFtZV0KKyAgICAgICAgaWYgTm9uZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tOb25lXQorICAgICAgICByYWlzZSBLZXlFcnJvcihmdWxsX3BhdGhfZm9yX2Vycm9yKQorCisKK3Jhd19kYXRhX21hbmFnZXIgPSBDb250ZW50TWFuYWdlcigpCisKKworZGVmIGdldF90ZXh0X2NvbnRlbnQobXNnLCBlcnJvcnM9J3JlcGxhY2UnKToKKyAgICBjb250ZW50ID0gbXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKQorICAgIGNoYXJzZXQgPSBtc2cuZ2V0X3BhcmFtKCdjaGFyc2V0JywgJ0FTQ0lJJykKKyAgICByZXR1cm4gY29udGVudC5kZWNvZGUoY2hhcnNldCwgZXJyb3JzPWVycm9ycykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKCd0ZXh0JywgZ2V0X3RleHRfY29udGVudCkKKworCitkZWYgZ2V0X25vbl90ZXh0X2NvbnRlbnQobXNnKToKKyAgICByZXR1cm4gbXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKQorZm9yIG1haW50eXBlIGluICdhdWRpbyBpbWFnZSB2aWRlbyBhcHBsaWNhdGlvbicuc3BsaXQoKToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcihtYWludHlwZSwgZ2V0X25vbl90ZXh0X2NvbnRlbnQpCisKKworZGVmIGdldF9tZXNzYWdlX2NvbnRlbnQobXNnKToKKyAgICByZXR1cm4gbXNnLmdldF9wYXlsb2FkKDApCitmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ21lc3NhZ2UvJytzdWJ0eXBlLCBnZXRfbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBnZXRfYW5kX2ZpeHVwX3Vua25vd25fbWVzc2FnZV9jb250ZW50KG1zZyk6CisgICAgIyBJZiB3ZSBkb24ndCB1bmRlcnN0YW5kIGEgbWVzc2FnZSBzdWJ0eXBlLCB3ZSBhcmUgc3VwcG9zZWQgdG8gdHJlYXQgaXQgYXMKKyAgICAjIGlmIGl0IHdlcmUgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLCBwZXIKKyAgICAjIHRvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi40LiAgRmVlZHBhcnNlciBkb2Vzbid0IGRvIHRoYXQsCisgICAgIyBzbyBkbyBvdXIgYmVzdCB0byBmaXggdGhpbmdzIHVwLiAgTm90ZSB0aGF0IGl0IGlzICpub3QqIGFwcHJvcHJpYXRlIHRvCisgICAgIyBtb2RlbCBtZXNzYWdlL3BhcnRpYWwgY29udGVudCBhcyBNZXNzYWdlIG9iamVjdHMsIHNvIHRoZXkgYXJlIGhhbmRsZWQKKyAgICAjIGhlcmUgYXMgd2VsbC4gIChIb3cgdG8gcmVhc3NlbWJsZSB0aGVtIGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcyBjb21tZW50IDopCisgICAgcmV0dXJuIGJ5dGVzKG1zZy5nZXRfcGF5bG9hZCgwKSkKK3Jhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKCdtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9hbmRfZml4dXBfdW5rbm93bl9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIF9wcmVwYXJlX3NldChtc2csIG1haW50eXBlLCBzdWJ0eXBlLCBoZWFkZXJzKToKKyAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJy8nLmpvaW4oKG1haW50eXBlLCBzdWJ0eXBlKSkKKyAgICBpZiBoZWFkZXJzOgorICAgICAgICBpZiBub3QgaGFzYXR0cihoZWFkZXJzWzBdLCAnbmFtZScpOgorICAgICAgICAgICAgbXAgPSBtc2cucG9saWN5CisgICAgICAgICAgICBoZWFkZXJzID0gW21wLmhlYWRlcl9mYWN0b3J5KCptcC5oZWFkZXJfc291cmNlX3BhcnNlKFtoZWFkZXJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIGhlYWRlciBpbiBoZWFkZXJzXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaGVhZGVyIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgaWYgaGVhZGVyLmRlZmVjdHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGhlYWRlci5kZWZlY3RzWzBdCisgICAgICAgICAgICAgICAgbXNnW2hlYWRlci5uYW1lXSA9IGhlYWRlcgorICAgICAgICBleGNlcHQgZW1haWwuZXJyb3JzLkhlYWRlckRlZmVjdCBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGhlYWRlcjoge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmZvbGQocG9saWN5PW1zZy5wb2xpY3kpKSkgZnJvbSBleGMKKworCitkZWYgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpOgorICAgIGlmIGRpc3Bvc2l0aW9uIGlzIE5vbmUgYW5kIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBkaXNwb3NpdGlvbiA9ICdhdHRhY2htZW50JworICAgIGlmIGRpc3Bvc2l0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICBtc2dbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9IGRpc3Bvc2l0aW9uCisgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIG1zZy5zZXRfcGFyYW0oJ2ZpbGVuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9J0NvbnRlbnQtRGlzcG9zaXRpb24nLAorICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2U9VHJ1ZSkKKyAgICBpZiBjaWQgaXMgbm90IE5vbmU6CisgICAgICAgIG1zZ1snQ29udGVudC1JRCddID0gY2lkCisgICAgaWYgcGFyYW1zIGlzIG5vdCBOb25lOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBwYXJhbXMuaXRlbXMoKToKKyAgICAgICAgICAgIG1zZy5zZXRfcGFyYW0oa2V5LCB2YWx1ZSkKKworCisjIFhYWDogVGhpcyBpcyBhIGNsZWFuZWQtdXAgdmVyc2lvbiBvZiBiYXNlNjRtaW1lLmJvZHlfZW5jb2RlLiAgSXQgd291bGQKKyMgYmUgbmljZSB0byBkcm9wIGJvdGggdGhpcyBhbmQgcXVvcHJpbWltZS5ib2R5X2VuY29kZSBpbiBmYXZvciBvZgorIyBlbmhhbmNlZCBiaW5hc2NpaSByb3V0aW5lcyB0aGF0IGFjY2VwdGVkIGEgbWF4X2xpbmVfbGVuZ3RoIHBhcmFtZXRlci4KK2RlZiBfZW5jb2RlX2Jhc2U2NChkYXRhLCBtYXhfbGluZV9sZW5ndGgpOgorICAgIGVuY29kZWRfbGluZXMgPSBbXQorICAgIHVuZW5jb2RlZF9ieXRlc19wZXJfbGluZSA9IG1heF9saW5lX2xlbmd0aCAqIDMgLy8gNAorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lKToKKyAgICAgICAgdGhpc2xpbmUgPSBkYXRhW2k6aSt1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmVdCisgICAgICAgIGVuY29kZWRfbGluZXMuYXBwZW5kKGJpbmFzY2lpLmIyYV9iYXNlNjQodGhpc2xpbmUpLmRlY29kZSgnYXNjaWknKSkKKyAgICByZXR1cm4gJycuam9pbihlbmNvZGVkX2xpbmVzKQorCisKK2RlZiBfZW5jb2RlX3RleHQoc3RyaW5nLCBjaGFyc2V0LCBjdGUsIHBvbGljeSk6CisgICAgbGluZXMgPSBzdHJpbmcuZW5jb2RlKGNoYXJzZXQpLnNwbGl0bGluZXMoKQorICAgIGxpbmVzZXAgPSBwb2xpY3kubGluZXNlcC5lbmNvZGUoJ2FzY2lpJykKKyAgICBkZWYgZW1iZWRlZF9ib2R5KGxpbmVzKTogcmV0dXJuIGxpbmVzZXAuam9pbihsaW5lcykgKyBsaW5lc2VwCisgICAgZGVmIG5vcm1hbF9ib2R5KGxpbmVzKTogcmV0dXJuIGInXG4nLmpvaW4obGluZXMpICsgYidcbicKKyAgICBpZiBjdGU9PU5vbmU6CisgICAgICAgICMgVXNlIGhldXJpc3RpY3MgdG8gZGVjaWRlIG9uIHRoZSAiYmVzdCIgZW5jb2RpbmcuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiAnN2JpdCcsIG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgKHBvbGljeS5jdGVfdHlwZSA9PSAnOGJpdCcgYW5kCisgICAgICAgICAgICAgICAgbWF4KGxlbih4KSBmb3IgeCBpbiBsaW5lcykgPD0gcG9saWN5Lm1heF9saW5lX2xlbmd0aCk6CisgICAgICAgICAgICByZXR1cm4gJzhiaXQnLCBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICBzbmlmZiA9IGVtYmVkZWRfYm9keShsaW5lc1s6MTBdKQorICAgICAgICBzbmlmZl9xcCA9IHF1b3ByaW1pbWUuYm9keV9lbmNvZGUoc25pZmYuZGVjb2RlKCdsYXRpbi0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgICAgICBzbmlmZl9iYXNlNjQgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KHNuaWZmKQorICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgdW5mYWlyIHRvIHFwOyBpdCBpbmNsdWRlcyBsaW5lc2VwcywgYmFzZTY0IGRvZXNuJ3QuCisgICAgICAgIGlmIGxlbihzbmlmZl9xcCkgPiBsZW4oc25pZmZfYmFzZTY0KToKKyAgICAgICAgICAgIGN0ZSA9ICdiYXNlNjQnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjdGUgPSAncXVvdGVkLXByaW50YWJsZScKKyAgICAgICAgICAgIGlmIGxlbihsaW5lcykgPD0gMTA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGN0ZSwgc25pZmZfcXAKKyAgICBpZiBjdGUgPT0gJzdiaXQnOgorICAgICAgICBkYXRhID0gbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknKQorICAgIGVsaWYgY3RlID09ICc4Yml0JzoKKyAgICAgICAgZGF0YSA9IG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgZWxpZiBjdGUgPT0gJ3F1b3RlZC1wcmludGFibGUnOgorICAgICAgICBkYXRhID0gcXVvcHJpbWltZS5ib2R5X2VuY29kZShub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdsYXRpbi0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxpZiBjdGUgPT0gJ2Jhc2U2NCc6CisgICAgICAgIGRhdGEgPSBfZW5jb2RlX2Jhc2U2NChlbWJlZGVkX2JvZHkobGluZXMpLCBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gY29udGVudCB0cmFuc2ZlciBlbmNvZGluZyB7fSIuZm9ybWF0KGN0ZSkpCisgICAgcmV0dXJuIGN0ZSwgZGF0YQorCisKK2RlZiBzZXRfdGV4dF9jb250ZW50KG1zZywgc3RyaW5nLCBzdWJ0eXBlPSJwbGFpbiIsIGNoYXJzZXQ9J3V0Zi04JywgY3RlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIF9wcmVwYXJlX3NldChtc2csICd0ZXh0Jywgc3VidHlwZSwgaGVhZGVycykKKyAgICBjdGUsIHBheWxvYWQgPSBfZW5jb2RlX3RleHQoc3RyaW5nLCBjaGFyc2V0LCBjdGUsIG1zZy5wb2xpY3kpCisgICAgbXNnLnNldF9wYXlsb2FkKHBheWxvYWQpCisgICAgbXNnLnNldF9wYXJhbSgnY2hhcnNldCcsCisgICAgICAgICAgICAgICAgICBlbWFpbC5jaGFyc2V0LkFMSUFTRVMuZ2V0KGNoYXJzZXQsIGNoYXJzZXQpLAorICAgICAgICAgICAgICAgICAgcmVwbGFjZT1UcnVlKQorICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gY3RlCisgICAgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9zZXRfaGFuZGxlcihzdHIsIHNldF90ZXh0X2NvbnRlbnQpCisKKworZGVmIHNldF9tZXNzYWdlX2NvbnRlbnQobXNnLCBtZXNzYWdlLCBzdWJ0eXBlPSJyZmM4MjIiLCBjdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIGlmIHN1YnR5cGUgPT0gJ3BhcnRpYWwnOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtZXNzYWdlL3BhcnRpYWwgaXMgbm90IHN1cHBvcnRlZCBmb3IgTWVzc2FnZSBvYmplY3RzIikKKyAgICBpZiBzdWJ0eXBlID09ICdyZmM4MjInOgorICAgICAgICBpZiBjdGUgbm90IGluIChOb25lLCAnN2JpdCcsICc4Yml0JywgJ2JpbmFyeScpOgorICAgICAgICAgICAgIyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjEgbWFuZGF0ZS4KKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UvcmZjODIyIHBhcnRzIGRvIG5vdCBzdXBwb3J0IGN0ZT17fSIuZm9ybWF0KGN0ZSkpCisgICAgICAgICMgOGJpdCB3aWxsIGdldCBjb2VyY2VkIG9uIHNlcmlhbGl6YXRpb24gaWYgcG9saWN5LmN0ZV90eXBlPSc3Yml0Jy4gIFdlCisgICAgICAgICMgbWF5IGVuZCB1cCBjbGFpbWluZyA4Yml0IHdoZW4gaXQgaXNuJ3QgbmVlZGVkLCBidXQgdGhlIG9ubHkgbmVnYXRpdmUKKyAgICAgICAgIyByZXN1bHQgb2YgdGhhdCBzaG91bGQgYmUgYSBnYXRld2F5IHRoYXQgbmVlZHMgdG8gY29lcmNlIHRvIDdiaXQKKyAgICAgICAgIyBoYXZpbmcgdG8gbG9vayB0aHJvdWdoIHRoZSB3aG9sZSBlbWJlZGRlZCBtZXNzYWdlIHRvIGRpc2NvdmVyIHdoZXRoZXIKKyAgICAgICAgIyBvciBub3QgaXQgYWN0dWFsbHkgaGFzIHRvIGRvIGFueXRoaW5nLgorICAgICAgICBjdGUgPSAnOGJpdCcgaWYgY3RlIGlzIE5vbmUgZWxzZSBjdGUKKyAgICBlbGlmIHN1YnR5cGUgPT0gJ2V4dGVybmFsLWJvZHknOgorICAgICAgICBpZiBjdGUgbm90IGluIChOb25lLCAnN2JpdCcpOgorICAgICAgICAgICAgIyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjMgbWFuZGF0ZS4KKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UvZXh0ZXJuYWwtYm9keSBwYXJ0cyBkbyBub3Qgc3VwcG9ydCBjdGU9e30iLmZvcm1hdChjdGUpKQorICAgICAgICBjdGUgPSAnN2JpdCcKKyAgICBlbGlmIGN0ZSBpcyBOb25lOgorICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuNCBzYXlzIGFsbCBmdXR1cmUKKyAgICAgICAgIyBzdWJ0eXBlcyBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byA3Yml0LCBzbyBhc3N1bWUgdGhhdC4KKyAgICAgICAgY3RlID0gJzdiaXQnCisgICAgX3ByZXBhcmVfc2V0KG1zZywgJ21lc3NhZ2UnLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIG1zZy5zZXRfcGF5bG9hZChbbWVzc2FnZV0pCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgc2V0X21lc3NhZ2VfY29udGVudCkKKworCitkZWYgc2V0X2J5dGVzX2NvbnRlbnQobXNnLCBkYXRhLCBtYWludHlwZSwgc3VidHlwZSwgY3RlPSdiYXNlNjQnLAorICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICBfcHJlcGFyZV9zZXQobXNnLCBtYWludHlwZSwgc3VidHlwZSwgaGVhZGVycykKKyAgICBpZiBjdGUgPT0gJ2Jhc2U2NCc6CisgICAgICAgIGRhdGEgPSBfZW5jb2RlX2Jhc2U2NChkYXRhLCBtYXhfbGluZV9sZW5ndGg9bXNnLnBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxpZiBjdGUgPT0gJ3F1b3RlZC1wcmludGFibGUnOgorICAgICAgICAjIFhYWDogcXVvcHJpbWltZS5ib2R5X2VuY29kZSB3b24ndCBlbmNvZGUgbmV3bGluZSBjaGFyYWN0ZXJzIGluIGRhdGEsCisgICAgICAgICMgc28gd2UgY2FuJ3QgdXNlIGl0LiAgVGhpcyBtZWFucyBtYXhfbGluZV9sZW5ndGggaXMgaWdub3JlZC4gIEFub3RoZXIKKyAgICAgICAgIyBidWcgdG8gZml4IGxhdGVyLiAgKE5vdGU6IGVuY29kZXJzLnF1b3ByaSBpcyBicm9rZW4gb24gbGluZSBlbmRzLikKKyAgICAgICAgZGF0YSA9IGJpbmFzY2lpLmIyYV9xcChkYXRhLCBpc3RleHQ9RmFsc2UsIGhlYWRlcj1GYWxzZSwgcXVvdGV0YWJzPVRydWUpCisgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgnYXNjaWknKQorICAgIGVsaWYgY3RlID09ICc3Yml0JzoKKyAgICAgICAgIyBNYWtlIHN1cmUgaXQgcmVhbGx5IGlzIG9ubHkgQVNDSUkuICBUaGUgZWFybHkgd2FybmluZyBoZXJlIHNlZW1zCisgICAgICAgICMgd29ydGggdGhlIG92ZXJoZWFkLi4uaWYgeW91IGNhcmUgd3JpdGUgeW91ciBvd24gY29udGVudCBtYW5hZ2VyIDopLgorICAgICAgICBkYXRhLmVuY29kZSgnYXNjaWknKQorICAgIGVsaWYgY3RlIGluICgnOGJpdCcsICdiaW5hcnknKToKKyAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgIG1zZy5zZXRfcGF5bG9hZChkYXRhKQorICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gY3RlCisgICAgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpCitmb3IgdHlwIGluIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9zZXRfaGFuZGxlcih0eXAsIHNldF9ieXRlc19jb250ZW50KQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkgYi9MaWIvZW1haWwvZmVlZHBhcnNlci5weQppbmRleCBlYTQxZTk1Li5lYjc1ZmUzIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weQorKysgYi9MaWIvZW1haWwvZmVlZHBhcnNlci5weQpAQCAtOTgsMjQgKzk4LDE1IEBACiAgICAgICAgICIiIlB1c2ggc29tZSBuZXcgZGF0YSBpbnRvIHRoaXMgb2JqZWN0LiIiIgogICAgICAgICAjIEhhbmRsZSBhbnkgcHJldmlvdXMgbGVmdG92ZXJzCiAgICAgICAgIGRhdGEsIHNlbGYuX3BhcnRpYWwgPSBzZWxmLl9wYXJ0aWFsICsgZGF0YSwgJycKLSAgICAgICAgIyBDcmFjayBpbnRvIGxpbmVzLCBidXQgcHJlc2VydmUgdGhlIG5ld2xpbmVzIG9uIHRoZSBlbmQgb2YgZWFjaAotICAgICAgICBwYXJ0cyA9IE5MQ1JFX2NyYWNrLnNwbGl0KGRhdGEpCi0gICAgICAgICMgVGhlICphaGVtKiBpbnRlcmVzdGluZyBiZWhhdmlvdXIgb2YgcmUuc3BsaXQgd2hlbiBzdXBwbGllZCBncm91cGluZwotICAgICAgICAjIHBhcmVudGhlc2VzIGlzIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcmVzdWx0aW5nIGxpc3QgaXMgdGhlCi0gICAgICAgICMgZGF0YSBhZnRlciB0aGUgZmluYWwgUkUuICBJbiB0aGUgY2FzZSBvZiBhIE5ML0NSIHRlcm1pbmF0ZWQgc3RyaW5nLAotICAgICAgICAjIHRoaXMgaXMgdGhlIGVtcHR5IHN0cmluZy4KLSAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgpCi0gICAgICAgICNHQU4gMjlNYXIwOSAgYnVncyAxNTU1NTcwLCAxNzIxODYyICBDb25mdXNpb24gYXQgOEsgYm91bmRhcnkgZW5kaW5nIHdpdGggXHI6Ci0gICAgICAgICMgaXMgdGhlcmUgYSBcbiB0byBmb2xsb3cgbGF0ZXI/Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wYXJ0aWFsIGFuZCBwYXJ0cyBhbmQgcGFydHNbLTFdLmVuZHN3aXRoKCdccicpOgotICAgICAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgtMikrcGFydHMucG9wKCkKLSAgICAgICAgIyBwYXJ0cyBpcyBhIGxpc3Qgb2Ygc3RyaW5ncywgYWx0ZXJuYXRpbmcgYmV0d2VlbiB0aGUgbGluZSBjb250ZW50cwotICAgICAgICAjIGFuZCB0aGUgZW9sIGNoYXJhY3RlcihzKS4gIEdhdGhlciB1cCBhIGxpc3Qgb2YgbGluZXMgYWZ0ZXIKLSAgICAgICAgIyByZS1hdHRhY2hpbmcgdGhlIG5ld2xpbmVzLgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJ0cykgLy8gMik6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQocGFydHNbaSoyXSArIHBhcnRzW2kqMisxXSkKLSAgICAgICAgc2VsZi5wdXNobGluZXMobGluZXMpCisgICAgICAgICMgQ3JhY2sgaW50byBsaW5lcywgYnV0IHByZXNlcnZlIHRoZSBsaW5lc2VwIGNoYXJhY3RlcnMgb24gdGhlIGVuZCBvZiBlYWNoCisgICAgICAgIHBhcnRzID0gZGF0YS5zcGxpdGxpbmVzKFRydWUpCisgICAgICAgICMgSWYgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgbGlzdCBkb2VzIG5vdCBlbmQgaW4gYSBuZXdsaW5lLCB0aGVuIHRyZWF0CisgICAgICAgICMgaXQgYXMgYSBwYXJ0aWFsIGxpbmUuICBXZSBvbmx5IGNoZWNrIGZvciAnXG4nIGhlcmUgYmVjYXVzZSBhIGxpbmUKKyAgICAgICAgIyBlbmRpbmcgd2l0aCAnXHInIG1pZ2h0IGJlIGEgbGluZSB0aGF0IHdhcyBzcGxpdCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgICAgICAgIyAnXHJcbicgc2VxdWVuY2UgKHNlZSBidWdzIDE1NTU1NzAgYW5kIDE3MjE4NjIpLgorICAgICAgICBpZiBwYXJ0cyBhbmQgbm90IHBhcnRzWy0xXS5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoKQorICAgICAgICBzZWxmLnB1c2hsaW5lcyhwYXJ0cykKIAogICAgIGRlZiBwdXNobGluZXMoc2VsZiwgbGluZXMpOgogICAgICAgICAjIFJldmVyc2UgYW5kIGluc2VydCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpbmVzLgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2l0ZXJhdG9ycy5weSBiL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKaW5kZXggM2FkYzRhMC4uYjU1MDJlZSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQorKysgYi9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CkBAIC0yNiw4ICsyNiw3IEBACiAgICAgeWllbGQgc2VsZgogICAgIGlmIHNlbGYuaXNfbXVsdGlwYXJ0KCk6CiAgICAgICAgIGZvciBzdWJwYXJ0IGluIHNlbGYuZ2V0X3BheWxvYWQoKToKLSAgICAgICAgICAgIGZvciBzdWJzdWJwYXJ0IGluIHN1YnBhcnQud2FsaygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1YnN1YnBhcnQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3VicGFydC53YWxrKCkKIAogCiAMCkBAIC00MCw4ICszOSw3IEBACiAgICAgZm9yIHN1YnBhcnQgaW4gbXNnLndhbGsoKToKICAgICAgICAgcGF5bG9hZCA9IHN1YnBhcnQuZ2V0X3BheWxvYWQoZGVjb2RlPWRlY29kZSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBzdHIpOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gU3RyaW5nSU8ocGF5bG9hZCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBTdHJpbmdJTyhwYXlsb2FkKQogCiAKIGRlZiB0eXBlZF9zdWJwYXJ0X2l0ZXJhdG9yKG1zZywgbWFpbnR5cGU9J3RleHQnLCBzdWJ0eXBlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL21lc3NhZ2UucHkgYi9MaWIvZW1haWwvbWVzc2FnZS5weQppbmRleCBmNDNhMzgwLi5jZTY3M2IwIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWVzc2FnZS5weQorKysgYi9MaWIvZW1haWwvbWVzc2FnZS5weQpAQCAtOCw4ICs4LDYgQEAKIAogaW1wb3J0IHJlCiBpbXBvcnQgdXUKLWltcG9ydCBiYXNlNjQKLWltcG9ydCBiaW5hc2NpaQogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KIAogIyBJbnRyYXBhY2thZ2UgaW1wb3J0cwpAQCAtMTMyLDIyICsxMzAsNTAgQEAKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KLSAgICAgICAgVGhpcyBpbmNsdWRlcyB0aGUgaGVhZGVycywgYm9keSwgYW5kIGVudmVsb3BlIGhlYWRlci4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmFzX3N0cmluZygpCiAKLSAgICBkZWYgYXNfc3RyaW5nKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCk6CisgICAgZGVmIGFzX3N0cmluZyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCi0gICAgICAgIE9wdGlvbmFsIGB1bml4ZnJvbScgd2hlbiBUcnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCi0gICAgICAgIGhlYWRlci4KIAotICAgICAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGFuZCBtYXkgbm90IGdlbmVyYXRlIHRoZSBtZXNzYWdlIGV4YWN0bHkKLSAgICAgICAgYXMgeW91IGludGVuZC4gIEZvciBtb3JlIGZsZXhpYmlsaXR5LCB1c2UgdGhlIGZsYXR0ZW4oKSBtZXRob2Qgb2YgYQotICAgICAgICBHZW5lcmF0b3IgaW5zdGFuY2UuCisgICAgICAgIE9wdGlvbmFsICd1bml4ZnJvbScsIHdoZW4gdHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQorICAgICAgICBoZWFkZXIuICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zLCBpZiBtYXhoZWFkZXJsZW4gaXMKKyAgICAgICAgbm90IHNwZWNpZmllZCBpdCBkZWZhdWx0cyB0byAwLCBzbyB5b3UgbXVzdCBvdmVycmlkZSBpdCBleHBsaWNpdGx5CisgICAgICAgIGlmIHlvdSB3YW50IGEgZGlmZmVyZW50IG1heGhlYWRlcmxlbi4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgR2VuZXJhdG9yIGluc3RhbmNlIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBtZXNhc2dlOyBpZiBpdCBpcyBub3QKKyAgICAgICAgc3BlY2lmaWVkIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIGluc3RhbmNlIGlzIHVzZWQuCisKKyAgICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQKKyAgICAgICAgYWNjb3JkaW5nIHRvIFJGQyBzdGFuZGFyZHMsIHRoZSBub24tY29tcGxpYW50IGRhdGEgd2lsbCBiZSByZXBsYWNlZCBieQorICAgICAgICB1bmljb2RlICJ1bmtub3duIGNoYXJhY3RlciIgY29kZSBwb2ludHMuCiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5IGlmIHBvbGljeSBpcyBOb25lIGVsc2UgcG9saWN5CiAgICAgICAgIGZwID0gU3RyaW5nSU8oKQotICAgICAgICBnID0gR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89RmFsc2UsIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4pCisgICAgICAgIGcgPSBHZW5lcmF0b3IoZnAsCisgICAgICAgICAgICAgICAgICAgICAgbWFuZ2xlX2Zyb21fPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeSkKKyAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQorICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQorCisgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5hc19ieXRlcygpCisKKyAgICBkZWYgYXNfYnl0ZXMoc2VsZiwgdW5peGZyb209RmFsc2UsIHBvbGljeT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisKKyAgICAgICAgT3B0aW9uYWwgJ3VuaXhmcm9tJywgd2hlbiB0cnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCisgICAgICAgIGhlYWRlci4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUgQnl0ZXNHZW5lcmF0b3IgaW5zdGFuY2UgdXNlZCB0bworICAgICAgICBzZXJpYWxpemUgdGhlIG1lc3NhZ2U7IGlmIG5vdCBzcGVjaWZpZWQgdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgdGhlIG1lc3NhZ2UgaW5zdGFuY2UgaXMgdXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gZW1haWwuZ2VuZXJhdG9yIGltcG9ydCBCeXRlc0dlbmVyYXRvcgorICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeSBpZiBwb2xpY3kgaXMgTm9uZSBlbHNlIHBvbGljeQorICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1GYWxzZSwgcG9saWN5PXBvbGljeSkKICAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQogICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQogCkBAIC02NTEsNyArNjc3LDcgQEAKICAgICAgICAgcmV0dXJuIGZhaWxvYmoKIAogICAgIGRlZiBzZXRfcGFyYW0oc2VsZiwgcGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycpOgorICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJywgcmVwbGFjZT1GYWxzZSk6CiAgICAgICAgICIiIlNldCBhIHBhcmFtZXRlciBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KIAogICAgICAgICBJZiB0aGUgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoZWFkZXIsIGl0cyB2YWx1ZSB3aWxsIGJlCkBAIC02OTUsOCArNzIxLDExIEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSBTRU1JU1BBQ0Uuam9pbihbY3R5cGUsIGFwcGVuZF9wYXJhbV0pCiAgICAgICAgIGlmIGN0eXBlICE9IHNlbGYuZ2V0KGhlYWRlcik6Ci0gICAgICAgICAgICBkZWwgc2VsZltoZWFkZXJdCi0gICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQorICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlcGxhY2VfaGVhZGVyKGhlYWRlciwgY3R5cGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmW2hlYWRlcl0KKyAgICAgICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQogCiAgICAgZGVmIGRlbF9wYXJhbShzZWxmLCBwYXJhbSwgaGVhZGVyPSdjb250ZW50LXR5cGUnLCByZXF1b3RlPVRydWUpOgogICAgICAgICAiIiJSZW1vdmUgdGhlIGdpdmVuIHBhcmFtZXRlciBjb21wbGV0ZWx5IGZyb20gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCkBAIC04NzcsMyArOTA2LDIwOCBAQAogCiAgICAgIyBJLmUuIGRlZiB3YWxrKHNlbGYpOiAuLi4KICAgICBmcm9tIGVtYWlsLml0ZXJhdG9ycyBpbXBvcnQgd2FsaworCisKK2NsYXNzIE1JTUVQYXJ0KE1lc3NhZ2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvbGljeT1Ob25lKToKKyAgICAgICAgaWYgcG9saWN5IGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIGVtYWlsLnBvbGljeSBpbXBvcnQgZGVmYXVsdAorICAgICAgICAgICAgcG9saWN5ID0gZGVmYXVsdAorICAgICAgICBNZXNzYWdlLl9faW5pdF9fKHNlbGYsIHBvbGljeSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBjX2QgPSBzZWxmLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpCisgICAgICAgIGlmIGNfZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBjX2QubG93ZXIoKSA9PSAnYXR0YWNobWVudCcKKworICAgIGRlZiBfZmluZF9ib2R5KHNlbGYsIHBhcnQsIHByZWZlcmVuY2VsaXN0KToKKyAgICAgICAgaWYgcGFydC5pc19hdHRhY2htZW50OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gcGFydC5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6CisgICAgICAgICAgICBpZiBzdWJ0eXBlIGluIHByZWZlcmVuY2VsaXN0OgorICAgICAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleChzdWJ0eXBlKSwgcGFydCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYWludHlwZSAhPSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzdWJ0eXBlICE9ICdyZWxhdGVkJzoKKyAgICAgICAgICAgIGZvciBzdWJwYXJ0IGluIHBhcnQuaXRlcl9wYXJ0cygpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KHN1YnBhcnQsIHByZWZlcmVuY2VsaXN0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmICdyZWxhdGVkJyBpbiBwcmVmZXJlbmNlbGlzdDoKKyAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleCgncmVsYXRlZCcpLCBwYXJ0KQorICAgICAgICBjYW5kaWRhdGUgPSBOb25lCisgICAgICAgIHN0YXJ0ID0gcGFydC5nZXRfcGFyYW0oJ3N0YXJ0JykKKyAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICBmb3Igc3VicGFydCBpbiBwYXJ0Lml0ZXJfcGFydHMoKToKKyAgICAgICAgICAgICAgICBpZiBzdWJwYXJ0Wydjb250ZW50LWlkJ10gPT0gc3RhcnQ6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHN1YnBhcnQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICBzdWJwYXJ0cyA9IHBhcnQuZ2V0X3BheWxvYWQoKQorICAgICAgICAgICAgY2FuZGlkYXRlID0gc3VicGFydHNbMF0gaWYgc3VicGFydHMgZWxzZSBOb25lCisgICAgICAgIGlmIGNhbmRpZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KGNhbmRpZGF0ZSwgcHJlZmVyZW5jZWxpc3QpCisKKyAgICBkZWYgZ2V0X2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSk6CisgICAgICAgICIiIlJldHVybiBiZXN0IGNhbmRpZGF0ZSBtaW1lIHBhcnQgZm9yIGRpc3BsYXkgYXMgJ2JvZHknIG9mIG1lc3NhZ2UuCisKKyAgICAgICAgRG8gYSBkZXB0aCBmaXJzdCBzZWFyY2gsIHN0YXJ0aW5nIHdpdGggc2VsZiwgbG9va2luZyBmb3IgdGhlIGZpcnN0IHBhcnQKKyAgICAgICAgbWF0Y2hpbmcgZWFjaCBvZiB0aGUgaXRlbXMgaW4gcHJlZmVyZW5jZWxpc3QsIGFuZCByZXR1cm4gdGhlIHBhcnQKKyAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgaXRlbSB0aGF0IGhhcyBhIG1hdGNoLCBvciBOb25lIGlmIG5vIGl0ZW1zCisgICAgICAgIGhhdmUgYSBtYXRjaC4gIElmICdyZWxhdGVkJyBpcyBub3QgaW5jbHVkZWQgaW4gcHJlZmVyZW5jZWxpc3QsIGNvbnNpZGVyCisgICAgICAgIHRoZSByb290IHBhcnQgb2YgYW55IG11bHRpcGFydC9yZWxhdGVkIGVuY291bnRlcmVkIGFzIGEgY2FuZGlkYXRlCisgICAgICAgIG1hdGNoLiAgSWdub3JlIHBhcnRzIHdpdGggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnLgorICAgICAgICAiIiIKKyAgICAgICAgYmVzdF9wcmlvID0gbGVuKHByZWZlcmVuY2VsaXN0KQorICAgICAgICBib2R5ID0gTm9uZQorICAgICAgICBmb3IgcHJpbywgcGFydCBpbiBzZWxmLl9maW5kX2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3QpOgorICAgICAgICAgICAgaWYgcHJpbyA8IGJlc3RfcHJpbzoKKyAgICAgICAgICAgICAgICBiZXN0X3ByaW8gPSBwcmlvCisgICAgICAgICAgICAgICAgYm9keSA9IHBhcnQKKyAgICAgICAgICAgICAgICBpZiBwcmlvID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBib2R5CisKKyAgICBfYm9keV90eXBlcyA9IHsoJ3RleHQnLCAncGxhaW4nKSwKKyAgICAgICAgICAgICAgICAgICAoJ3RleHQnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICgnbXVsdGlwYXJ0JywgJ3JlbGF0ZWQnKSwKKyAgICAgICAgICAgICAgICAgICAoJ211bHRpcGFydCcsICdhbHRlcm5hdGl2ZScpfQorICAgIGRlZiBpdGVyX2F0dGFjaG1lbnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgbm9uLW1haW4gcGFydHMgb2YgYSBtdWx0aXBhcnQuCisKKyAgICAgICAgU2tpcCB0aGUgZmlyc3Qgb2YgZWFjaCBvY2N1cnJlbmNlIG9mIHRleHQvcGxhaW4sIHRleHQvaHRtbCwKKyAgICAgICAgbXVsdGlwYXJ0L3JlbGF0ZWQsIG9yIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBpbiB0aGUgbXVsdGlwYXJ0ICh1bmxlc3MKKyAgICAgICAgdGhleSBoYXZlIGEgJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnIGhlYWRlcikgYW5kIGluY2x1ZGUgYWxsCisgICAgICAgIHJlbWFpbmluZyBzdWJwYXJ0cyBpbiB0aGUgcmV0dXJuZWQgaXRlcmF0b3IuICBXaGVuIGFwcGxpZWQgdG8gYQorICAgICAgICBtdWx0aXBhcnQvcmVsYXRlZCwgcmV0dXJuIGFsbCBwYXJ0cyBleGNlcHQgdGhlIHJvb3QgcGFydC4gIFJldHVybiBhbgorICAgICAgICBlbXB0eSBpdGVyYXRvciB3aGVuIGFwcGxpZWQgdG8gYSBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUgb3IgYQorICAgICAgICBub24tbXVsdGlwYXJ0LgorICAgICAgICAiIiIKKyAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBzZWxmLmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgIGlmIG1haW50eXBlICE9ICdtdWx0aXBhcnQnIG9yIHN1YnR5cGUgPT0gJ2FsdGVybmF0aXZlJzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJ0cyA9IHNlbGYuZ2V0X3BheWxvYWQoKQorICAgICAgICBpZiBtYWludHlwZSA9PSAnbXVsdGlwYXJ0JyBhbmQgc3VidHlwZSA9PSAncmVsYXRlZCc6CisgICAgICAgICAgICAjIEZvciByZWxhdGVkLCB3ZSB0cmVhdCBldmVyeXRoaW5nIGJ1dCB0aGUgcm9vdCBhcyBhbiBhdHRhY2htZW50LgorICAgICAgICAgICAgIyBUaGUgcm9vdCBtYXkgYmUgaW5kaWNhdGVkIGJ5ICdzdGFydCc7IGlmIHRoZXJlJ3Mgbm8gc3RhcnQgb3Igd2UKKyAgICAgICAgICAgICMgY2FuJ3QgZmluZCB0aGUgbmFtZWQgc3RhcnQsIHRyZWF0IHRoZSBmaXJzdCBzdWJwYXJ0IGFzIHRoZSByb290LgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLmdldF9wYXJhbSgnc3RhcnQnKQorICAgICAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFydC5nZXQoJ2NvbnRlbnQtaWQnKSA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKHBhcnQpCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXR0YWNobWVudHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXJ0cy5wb3AoMCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcGFydHMKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIE90aGVyd2lzZSB3ZSBtb3JlIG9yIGxlc3MgaW52ZXJ0IHRoZSByZW1haW5pbmcgbG9naWMgaW4gZ2V0X2JvZHkuCisgICAgICAgICMgVGhpcyBvbmx5IHJlYWxseSB3b3JrcyBpbiBlZGdlIGNhc2VzIChleDogbm9uLXRleHQgcmVsYXRlZHMgb3IKKyAgICAgICAgIyBhbHRlcm5hdGl2ZXMpIGlmIHRoZSBzZW5kaW5nIGFnZW50IHNldHMgY29udGVudC1kaXNwb3NpdGlvbi4KKyAgICAgICAgc2VlbiA9IFtdICAgIyBPbmx5IHNraXAgdGhlIGZpcnN0IGV4YW1wbGUgb2YgZWFjaCBjYW5kaWRhdGUgdHlwZS4KKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgICAgIGlmICgobWFpbnR5cGUsIHN1YnR5cGUpIGluIHNlbGYuX2JvZHlfdHlwZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBwYXJ0LmlzX2F0dGFjaG1lbnQgYW5kIHN1YnR5cGUgbm90IGluIHNlZW4pOgorICAgICAgICAgICAgICAgIHNlZW4uYXBwZW5kKHN1YnR5cGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIHBhcnQKKworICAgIGRlZiBpdGVyX3BhcnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBhbGwgaW1tZWRpYXRlIHN1YnBhcnRzIG9mIGEgbXVsdGlwYXJ0LgorCisgICAgICAgIFJldHVybiBhbiBlbXB0eSBpdGVyYXRvciBmb3IgYSBub24tbXVsdGlwYXJ0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmdldF9wYXlsb2FkKCkKKworICAgIGRlZiBnZXRfY29udGVudChzZWxmLCAqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpOgorICAgICAgICBpZiBjb250ZW50X21hbmFnZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciA9IHNlbGYucG9saWN5LmNvbnRlbnRfbWFuYWdlcgorICAgICAgICByZXR1cm4gY29udGVudF9tYW5hZ2VyLmdldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIHNldF9jb250ZW50KHNlbGYsICphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIGNvbnRlbnRfbWFuYWdlciBpcyBOb25lOgorICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyID0gc2VsZi5wb2xpY3kuY29udGVudF9tYW5hZ2VyCisgICAgICAgIGNvbnRlbnRfbWFuYWdlci5zZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBfbWFrZV9tdWx0aXBhcnQoc2VsZiwgc3VidHlwZSwgZGlzYWxsb3dlZF9zdWJ0eXBlcywgYm91bmRhcnkpOgorICAgICAgICBpZiBzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICBleGlzdGluZ19zdWJ0eXBlID0gc2VsZi5nZXRfY29udGVudF9zdWJ0eXBlKCkKKyAgICAgICAgICAgIGRpc2FsbG93ZWRfc3VidHlwZXMgPSBkaXNhbGxvd2VkX3N1YnR5cGVzICsgKHN1YnR5cGUsKQorICAgICAgICAgICAgaWYgZXhpc3Rpbmdfc3VidHlwZSBpbiBkaXNhbGxvd2VkX3N1YnR5cGVzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHt9IHRvIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nX3N1YnR5cGUsIHN1YnR5cGUpKQorICAgICAgICBrZWVwX2hlYWRlcnMgPSBbXQorICAgICAgICBwYXJ0X2hlYWRlcnMgPSBbXQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5faGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHBhcnRfaGVhZGVycy5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2VlcF9oZWFkZXJzLmFwcGVuZCgobmFtZSwgdmFsdWUpKQorICAgICAgICBpZiBwYXJ0X2hlYWRlcnM6CisgICAgICAgICAgICAjIFRoZXJlIGlzIGV4aXN0aW5nIGNvbnRlbnQsIG1vdmUgaXQgdG8gdGhlIGZpcnN0IHN1YnBhcnQuCisgICAgICAgICAgICBwYXJ0ID0gdHlwZShzZWxmKShwb2xpY3k9c2VsZi5wb2xpY3kpCisgICAgICAgICAgICBwYXJ0Ll9oZWFkZXJzID0gcGFydF9oZWFkZXJzCisgICAgICAgICAgICBwYXJ0Ll9wYXlsb2FkID0gc2VsZi5fcGF5bG9hZAorICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IFtwYXJ0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IFtdCisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBrZWVwX2hlYWRlcnMKKyAgICAgICAgc2VsZlsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlCisgICAgICAgIGlmIGJvdW5kYXJ5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zZXRfcGFyYW0oJ2JvdW5kYXJ5JywgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9yZWxhdGVkKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgncmVsYXRlZCcsICgnYWx0ZXJuYXRpdmUnLCAnbWl4ZWQnKSwgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9hbHRlcm5hdGl2ZShzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ2FsdGVybmF0aXZlJywgKCdtaXhlZCcsKSwgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9taXhlZChzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ21peGVkJywgKCksIGJvdW5kYXJ5KQorCisgICAgZGVmIF9hZGRfbXVsdGlwYXJ0KHNlbGYsIF9zdWJ0eXBlLCAqYXJncywgX2Rpc3A9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIChzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgIT0gJ211bHRpcGFydCcgb3IKKyAgICAgICAgICAgICAgICBzZWxmLmdldF9jb250ZW50X3N1YnR5cGUoKSAhPSBfc3VidHlwZSk6CisgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdtYWtlXycgKyBfc3VidHlwZSkoKQorICAgICAgICBwYXJ0ID0gdHlwZShzZWxmKShwb2xpY3k9c2VsZi5wb2xpY3kpCisgICAgICAgIHBhcnQuc2V0X2NvbnRlbnQoKmFyZ3MsICoqa3cpCisgICAgICAgIGlmIF9kaXNwIGFuZCAnY29udGVudC1kaXNwb3NpdGlvbicgbm90IGluIHBhcnQ6CisgICAgICAgICAgICBwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSBfZGlzcAorICAgICAgICBzZWxmLmF0dGFjaChwYXJ0KQorCisgICAgZGVmIGFkZF9yZWxhdGVkKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgncmVsYXRlZCcsICphcmdzLCBfZGlzcD0naW5saW5lJywgKiprdykKKworICAgIGRlZiBhZGRfYWx0ZXJuYXRpdmUoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdhbHRlcm5hdGl2ZScsICphcmdzLCAqKmt3KQorCisgICAgZGVmIGFkZF9hdHRhY2htZW50KHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgnbWl4ZWQnLCAqYXJncywgX2Rpc3A9J2F0dGFjaG1lbnQnLCAqKmt3KQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9oZWFkZXJzID0gW10KKyAgICAgICAgc2VsZi5fcGF5bG9hZCA9IE5vbmUKKworICAgIGRlZiBjbGVhcl9jb250ZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9oZWFkZXJzID0gWyhuLCB2KSBmb3IgbiwgdiBpbiBzZWxmLl9oZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG4ubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpXQorICAgICAgICBzZWxmLl9wYXlsb2FkID0gTm9uZQorCisKK2NsYXNzIEVtYWlsTWVzc2FnZShNSU1FUGFydCk6CisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzdXBlcigpLnNldF9jb250ZW50KCphcmdzLCAqKmt3KQorICAgICAgICBpZiAnTUlNRS1WZXJzaW9uJyBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHNlbGZbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9wYXJzZXIucHkgYi9MaWIvZW1haWwvcGFyc2VyLnB5CmluZGV4IDc1MmJmMzUuLmY0OWQzMWQgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL3BhcnNlci5weQpAQCAtNCw3ICs0LDggQEAKIAogIiIiQSBwYXJzZXIgb2YgUkZDIDI4MjIgYW5kIE1JTUUgZW1haWwgbWVzc2FnZXMuIiIiCiAKLV9fYWxsX18gPSBbJ1BhcnNlcicsICdIZWFkZXJQYXJzZXInLCAnQnl0ZXNQYXJzZXInLCAnQnl0ZXNIZWFkZXJQYXJzZXInXQorX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlcicsICdCeXRlc1BhcnNlcicsICdCeXRlc0hlYWRlclBhcnNlcicsCisgICAgICAgICAgICdGZWVkUGFyc2VyJywgJ0J5dGVzRmVlZFBhcnNlciddCiAKIGltcG9ydCB3YXJuaW5ncwogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIFRleHRJT1dyYXBwZXIKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9wb2xpY3kucHkgYi9MaWIvZW1haWwvcG9saWN5LnB5CmluZGV4IDM4ZTg4YWYuLmYwYjIwZjQgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9wb2xpY3kucHkKKysrIGIvTGliL2VtYWlsL3BvbGljeS5weQpAQCAtNSw2ICs1LDcgQEAKIGZyb20gZW1haWwuX3BvbGljeWJhc2UgaW1wb3J0IFBvbGljeSwgQ29tcGF0MzIsIGNvbXBhdDMyLCBfZXh0ZW5kX2RvY3N0cmluZ3MKIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IF9oYXNfc3Vycm9nYXRlcwogZnJvbSBlbWFpbC5oZWFkZXJyZWdpc3RyeSBpbXBvcnQgSGVhZGVyUmVnaXN0cnkgYXMgSGVhZGVyUmVnaXN0cnkKK2Zyb20gZW1haWwuY29udGVudG1hbmFnZXIgaW1wb3J0IHJhd19kYXRhX21hbmFnZXIKIAogX19hbGxfXyA9IFsKICAgICAnQ29tcGF0MzInLApAQCAtNTgsMTAgKzU5LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsIHRyZWF0bWVudCwgd2hpbGUgYWxsIG90aGVyIGZpZWxkcyBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWF0ZWQgYXMgdW5zdHJ1Y3R1cmVkLiAgVGhpcyBsaXN0IHdpbGwgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGV4dGVuc2lvbiBpcyBtYXJrZWQgc3RhYmxlLikKKworICAgIGNvbnRlbnRfbWFuYWdlciAgICAgLS0gYW4gb2JqZWN0IHdpdGggYXQgbGVhc3QgdHdvIG1ldGhvZHM6IGdldF9jb250ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2V0X2NvbnRlbnQuICBXaGVuIHRoZSBnZXRfY29udGVudCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2NvbnRlbnQgbWV0aG9kIG9mIGEgTWVzc2FnZSBvYmplY3QgaXMgY2FsbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgY2FsbHMgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kIG9mIHRoaXMgb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2luZyBpdCB0aGUgbWVzc2FnZSBvYmplY3QgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFueSBhcmd1bWVudHMgb3Iga2V5d29yZHMgdGhhdCB3ZXJlIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBUaGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YTpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyLnJhd19kYXRhX21hbmFnZXJgLgorCiAgICAgIiIiCiAKICAgICByZWZvbGRfc291cmNlID0gJ2xvbmcnCiAgICAgaGVhZGVyX2ZhY3RvcnkgPSBIZWFkZXJSZWdpc3RyeSgpCisgICAgY29udGVudF9tYW5hZ2VyID0gcmF3X2RhdGFfbWFuYWdlcgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3cpOgogICAgICAgICAjIEVuc3VyZSB0aGF0IGVhY2ggbmV3IGluc3RhbmNlIGdldHMgYSB1bmlxdWUgaGVhZGVyIGZhY3RvcnkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC91dGlscy5weSBiL0xpYi9lbWFpbC91dGlscy5weQppbmRleCA5M2E2MjVjLi4yNWIwZDU2IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvdXRpbHMucHkKKysrIGIvTGliL2VtYWlsL3V0aWxzLnB5CkBAIC01NCwxNyArNTQsMjcgQEAKIHNwZWNpYWxzcmUgPSByZS5jb21waWxlKHInW11bXFwoKTw+QCw6OyIuXScpCiBlc2NhcGVzcmUgPSByZS5jb21waWxlKHInW1xcIl0nKQogCi0jIEhvdyB0byBmaWd1cmUgb3V0IGlmIHdlIGFyZSBwcm9jZXNzaW5nIHN0cmluZ3MgdGhhdCBjb21lIGZyb20gYSBieXRlCi0jIHNvdXJjZSB3aXRoIHVuZGVjb2RhYmxlIGNoYXJhY3RlcnMuCi1faGFzX3N1cnJvZ2F0ZXMgPSByZS5jb21waWxlKAotICAgICcoW15cdWQ4MDAtXHVkYmZmXXxcQSlbXHVkYzAwLVx1ZGZmZl0oW15cdWRjMDAtXHVkZmZmXXxcWiknKS5zZWFyY2gKK2RlZiBfaGFzX3N1cnJvZ2F0ZXMocyk6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgcyBjb250YWlucyBzdXJyb2dhdGUtZXNjYXBlZCBiaW5hcnkgZGF0YS4iIiIKKyAgICAjIFRoaXMgY2hlY2sgaXMgYmFzZWQgb24gdGhlIGZhY3QgdGhhdCB1bmxlc3MgdGhlcmUgYXJlIHN1cnJvZ2F0ZXMsIHV0ZjgKKyAgICAjIChQeXRob24ncyBkZWZhdWx0IGVuY29kaW5nKSBjYW4gZW5jb2RlIGFueSBzdHJpbmcuICBUaGlzIGlzIHRoZSBmYXN0ZXN0CisgICAgIyB3YXkgdG8gY2hlY2sgZm9yIHN1cnJvZ2F0ZXMsIHNlZSBpc3N1ZSAxMTQ1NCBmb3IgdGltaW5ncy4KKyAgICB0cnk6CisgICAgICAgIHMuZW5jb2RlKCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIFRydWUKIAogIyBIb3cgdG8gZGVhbCB3aXRoIGEgc3RyaW5nIGNvbnRhaW5pbmcgYnl0ZXMgYmVmb3JlIGhhbmRpbmcgaXQgdG8gdGhlCiAjIGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlICdub3JtYWwnIGludGVyZmFjZS4KIGRlZiBfc2FuaXRpemUoc3RyaW5nKToKLSAgICAjIFR1cm4gYW55IGVzY2FwZWQgYnl0ZXMgaW50byB1bmljb2RlICd1bmtub3duJyBjaGFyLgotICAgIG9yaWdpbmFsX2J5dGVzID0gc3RyaW5nLmVuY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKLSAgICByZXR1cm4gb3JpZ2luYWxfYnl0ZXMuZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJykKKyAgICAjIFR1cm4gYW55IGVzY2FwZWQgYnl0ZXMgaW50byB1bmljb2RlICd1bmtub3duJyBjaGFyLiAgSWYgdGhlIGVzY2FwZWQKKyAgICAjIGJ5dGVzIGhhcHBlbiB0byBiZSB1dGYtOCB0aGV5IHdpbGwgaW5zdGVhZCBnZXQgZGVjb2RlZCwgZXZlbiBpZiB0aGV5CisgICAgIyB3ZXJlIGludmFsaWQgaW4gdGhlIGNoYXJzZXQgdGhlIHNvdXJjZSB3YXMgc3VwcG9zZWQgdG8gYmUgaW4uICBUaGlzCisgICAgIyBzZWVtcyBsaWtlIGl0IGlzIG5vdCBhIGJhZCB0aGluZzsgYSBkZWZlY3Qgd2FzIHN0aWxsIHJlZ2lzdGVyZWQuCisgICAgb3JpZ2luYWxfYnl0ZXMgPSBzdHJpbmcuZW5jb2RlKCd1dGYtOCcsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgIHJldHVybiBvcmlnaW5hbF9ieXRlcy5kZWNvZGUoJ3V0Zi04JywgJ3JlcGxhY2UnKQorCiAKIAogIyBIZWxwZXJzCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKaW5kZXggMjM1ZGViNS4uNTQ2MWFhMCAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQpAQCAtMzMsOSArMzMsOSBAQAogICAgICd1cycgICAgICAgICAgICAgICAgIDogJ2FzY2lpJywKICAgICAndXNfYXNjaWknICAgICAgICAgICA6ICdhc2NpaScsCiAKLSAgICAjIyBiYXNlNjRfY29kZWMgY29kZWMKLSAgICAjJ2Jhc2U2NCcgICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKLSAgICAjJ2Jhc2VfNjQnICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKKyAgICAjIGJhc2U2NF9jb2RlYyBjb2RlYworICAgICdiYXNlNjQnICAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCisgICAgJ2Jhc2VfNjQnICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKIAogICAgICMgYmlnNSBjb2RlYwogICAgICdiaWc1X3R3JyAgICAgICAgICAgIDogJ2JpZzUnLApAQCAtNDUsOCArNDUsOCBAQAogICAgICdiaWc1X2hrc2NzJyAgICAgICAgIDogJ2JpZzVoa3NjcycsCiAgICAgJ2hrc2NzJyAgICAgICAgICAgICAgOiAnYmlnNWhrc2NzJywKIAotICAgICMjIGJ6Ml9jb2RlYyBjb2RlYwotICAgICMnYnoyJyAgICAgICAgICAgICAgICA6ICdiejJfY29kZWMnLAorICAgICMgYnoyX2NvZGVjIGNvZGVjCisgICAgJ2J6MicgICAgICAgICAgICAgICAgOiAnYnoyX2NvZGVjJywKIAogICAgICMgY3AwMzcgY29kZWMKICAgICAnMDM3JyAgICAgICAgICAgICAgICA6ICdjcDAzNycsCkBAIC02Myw2ICs2MywxMiBAQAogICAgICdjc2libTEwMjYnICAgICAgICAgIDogJ2NwMTAyNicsCiAgICAgJ2libTEwMjYnICAgICAgICAgICAgOiAnY3AxMDI2JywKIAorICAgICMgY3AxMTI1IGNvZGVjCisgICAgJzExMjUnICAgICAgICAgICAgICAgIDogJ2NwMTEyNScsCisgICAgJ2libTExMjUnICAgICAgICAgICAgIDogJ2NwMTEyNScsCisgICAgJ2NwODY2dScgICAgICAgICAgICAgIDogJ2NwMTEyNScsCisgICAgJ3J1c2NpaScgICAgICAgICAgICAgIDogJ2NwMTEyNScsCisKICAgICAjIGNwMTE0MCBjb2RlYwogICAgICcxMTQwJyAgICAgICAgICAgICAgIDogJ2NwMTE0MCcsCiAgICAgJ2libTExNDAnICAgICAgICAgICAgOiAnY3AxMTQwJywKQEAgLTI0OCw4ICsyNTQsOCBAQAogICAgICdjcDkzNicgICAgICAgICAgICAgIDogJ2diaycsCiAgICAgJ21zOTM2JyAgICAgICAgICAgICAgOiAnZ2JrJywKIAotICAgICMjIGhleF9jb2RlYyBjb2RlYwotICAgICMnaGV4JyAgICAgICAgICAgICAgICA6ICdoZXhfY29kZWMnLAorICAgICMgaGV4X2NvZGVjIGNvZGVjCisgICAgJ2hleCcgICAgICAgICAgICAgICAgOiAnaGV4X2NvZGVjJywKIAogICAgICMgaHBfcm9tYW44IGNvZGVjCiAgICAgJ3JvbWFuOCcgICAgICAgICAgICAgOiAnaHBfcm9tYW44JywKQEAgLTQ1MCwxMyArNDU2LDEzIEBACiAgICAgJ2NwMTU0JyAgICAgICAgICAgICAgOiAncHRjcDE1NCcsCiAgICAgJ2N5cmlsbGljX2FzaWFuJyAgICAgOiAncHRjcDE1NCcsCiAKLSAgICAjIyBxdW9wcmlfY29kZWMgY29kZWMKLSAgICAjJ3F1b3ByaScgICAgICAgICAgICAgOiAncXVvcHJpX2NvZGVjJywKLSAgICAjJ3F1b3RlZF9wcmludGFibGUnICAgOiAncXVvcHJpX2NvZGVjJywKLSAgICAjJ3F1b3RlZHByaW50YWJsZScgICAgOiAncXVvcHJpX2NvZGVjJywKKyAgICAjIHF1b3ByaV9jb2RlYyBjb2RlYworICAgICdxdW9wcmknICAgICAgICAgICAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgJ3F1b3RlZF9wcmludGFibGUnICAgOiAncXVvcHJpX2NvZGVjJywKKyAgICAncXVvdGVkcHJpbnRhYmxlJyAgICA6ICdxdW9wcmlfY29kZWMnLAogCi0gICAgIyMgcm90XzEzIGNvZGVjCi0gICAgIydyb3QxMycgICAgICAgICAgICAgIDogJ3JvdF8xMycsCisgICAgIyByb3RfMTMgY29kZWMKKyAgICAncm90MTMnICAgICAgICAgICAgICA6ICdyb3RfMTMnLAogCiAgICAgIyBzaGlmdF9qaXMgY29kZWMKICAgICAnY3NzaGlmdGppcycgICAgICAgICA6ICdzaGlmdF9qaXMnLApAQCAtNTE4LDEyICs1MjQsMTIgQEAKICAgICAndXRmOF91Y3MyJyAgICAgICAgICA6ICd1dGZfOCcsCiAgICAgJ3V0ZjhfdWNzNCcgICAgICAgICAgOiAndXRmXzgnLAogCi0gICAgIyMgdXVfY29kZWMgY29kZWMKLSAgICAjJ3V1JyAgICAgICAgICAgICAgICAgOiAndXVfY29kZWMnLAorICAgICMgdXVfY29kZWMgY29kZWMKKyAgICAndXUnICAgICAgICAgICAgICAgICA6ICd1dV9jb2RlYycsCiAKLSAgICAjIyB6bGliX2NvZGVjIGNvZGVjCi0gICAgIyd6aXAnICAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAotICAgICMnemxpYicgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKKyAgICAjIHpsaWJfY29kZWMgY29kZWMKKyAgICAnemlwJyAgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKKyAgICAnemxpYicgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKIAogICAgICMgdGVtcG9yYXJ5IG1hYyBDSksgYWxpYXNlcywgd2lsbCBiZSByZXBsYWNlZCBieSBwcm9wZXIgY29kZWNzIGluIDMuMQogICAgICd4X21hY19qYXBhbmVzZScgICAgICA6ICdzaGlmdF9qaXMnLApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL2Jhc2U2NF9jb2RlYy5weQppbmRleCAzMjFhOTYxLi44ODFkMWJhIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2Jhc2U2NF9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2Jhc2U2NF9jb2RlYy5weQpAQCAtNTIsNCArNTIsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5CmluZGV4IGU2NWQyMjYuLmZkOTQ5NWUgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5CkBAIC03NCw0ICs3NCw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkgYi9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CmluZGV4IGJmZTJjMWUuLjRlZGQ3MDggMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKKysrIGIvTGliL2VuY29kaW5ncy9jcDAzNy5weQpAQCAtMzAxLDcgKzMwMSw2IEBACiAgICAgJ1x4ZDknICAgICAjICAweEZEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQogICAgICdceGRhJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKICAgICAnXHg5ZicgICAgICMgIDB4RkYgLT4gQ09OVFJPTAotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDExMjUucHkgYi9MaWIvZW5jb2RpbmdzL2NwMTEyNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZkNjlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9jcDExMjUucHkKQEAgLTAsMCArMSw2OTggQEAKKyIiIiBQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgZm9yIENQMTEyNQorCisiIiIjIgorCitpbXBvcnQgY29kZWNzCisKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisKKyAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfbWFwKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nX3RhYmxlKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nX21hcClbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdjcDExMjUnLAorICAgICAgICBlbmNvZGU9Q29kZWMoKS5lbmNvZGUsCisgICAgICAgIGRlY29kZT1Db2RlYygpLmRlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICApCisKKyMjIyBEZWNvZGluZyBNYXAKKworZGVjb2RpbmdfbWFwID0gY29kZWNzLm1ha2VfaWRlbnRpdHlfZGljdChyYW5nZSgyNTYpKQorZGVjb2RpbmdfbWFwLnVwZGF0ZSh7CisgICAgMHgwMDgwOiAweDA0MTAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCisgICAgMHgwMDgxOiAweDA0MTEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCRQorICAgIDB4MDA4MjogMHgwNDEyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKKyAgICAweDAwODM6IDB4MDQxMywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorICAgIDB4MDA4NDogMHgwNDE0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKKyAgICAweDAwODU6IDB4MDQxNSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisgICAgMHgwMDg2OiAweDA0MTYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyAgICAweDAwODc6IDB4MDQxNywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCisgICAgMHgwMDg4OiAweDA0MTgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCisgICAgMHgwMDg5OiAweDA0MTksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwMDhhOiAweDA0MWEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorICAgIDB4MDA4YjogMHgwNDFiLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKKyAgICAweDAwOGM6IDB4MDQxYywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCisgICAgMHgwMDhkOiAweDA0MWQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTgorICAgIDB4MDA4ZTogMHgwNDFlLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDA4ZjogMHgwNDFmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKKyAgICAweDAwOTA6IDB4MDQyMCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCisgICAgMHgwMDkxOiAweDA0MjEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworICAgIDB4MDA5MjogMHgwNDIyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyAgICAweDAwOTM6IDB4MDQyMywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUKKyAgICAweDAwOTQ6IDB4MDQyNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCisgICAgMHgwMDk1OiAweDA0MjUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorICAgIDB4MDA5NjogMHgwNDI2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCisgICAgMHgwMDk3OiAweDA0MjcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUKKyAgICAweDAwOTg6IDB4MDQyOCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorICAgIDB4MDA5OTogMHgwNDI5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyAgICAweDAwOWE6IDB4MDQyYSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDA5YjogMHgwNDJiLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorICAgIDB4MDA5YzogMHgwNDJjLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwMDlkOiAweDA0MmQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFCisgICAgMHgwMDllOiAweDA0MmUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorICAgIDB4MDA5ZjogMHgwNDJmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKKyAgICAweDAwYTA6IDB4MDQzMCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBBCisgICAgMHgwMGExOiAweDA0MzEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKKyAgICAweDAwYTI6IDB4MDQzMiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBWRQorICAgIDB4MDBhMzogMHgwNDMzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRQorICAgIDB4MDBhNDogMHgwNDM0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFCisgICAgMHgwMGE1OiAweDA0MzUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyAgICAweDAwYTY6IDB4MDQzNiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKKyAgICAweDAwYTc6IDB4MDQzNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaRQorICAgIDB4MDBhODogMHgwNDM4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKKyAgICAweDAwYTk6IDB4MDQzOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwMGFhOiAweDA0M2EsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKKyAgICAweDAwYWI6IDB4MDQzYiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTAorICAgIDB4MDBhYzogMHgwNDNjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCisgICAgMHgwMGFkOiAweDA0M2QsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KKyAgICAweDAwYWU6IDB4MDQzZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBPCisgICAgMHgwMGFmOiAweDA0M2YsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKKyAgICAweDAwYjA6IDB4MjU5MSwgICAgICMgIExJR0hUIFNIQURFCisgICAgMHgwMGIxOiAweDI1OTIsICAgICAjICBNRURJVU0gU0hBREUKKyAgICAweDAwYjI6IDB4MjU5MywgICAgICMgIERBUksgU0hBREUKKyAgICAweDAwYjM6IDB4MjUwMiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgIDB4MDBiNDogMHgyNTI0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgwMGI1OiAweDI1NjEsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MDBiNjogMHgyNTYyLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDAwYjc6IDB4MjU1NiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDAwYjg6IDB4MjU1NSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDAwYjk6IDB4MjU2MywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDAwYmE6IDB4MjU1MSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAweDAwYmI6IDB4MjU1NywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIDB4MDBiYzogMHgyNTVkLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgIDB4MDBiZDogMHgyNTVjLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDAwYmU6IDB4MjU1YiwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgwMGJmOiAweDI1MTAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgIDB4MDBjMDogMHgyNTE0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgIDB4MDBjMTogMHgyNTM0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGMyOiAweDI1MmMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjMzogMHgyNTFjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MDBjNDogMHgyNTAwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAweDAwYzU6IDB4MjUzYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjNjogMHgyNTVlLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgwMGM3OiAweDI1NWYsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDAwYzg6IDB4MjU1YSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgMHgwMGM5OiAweDI1NTQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgMHgwMGNhOiAweDI1NjksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNiOiAweDI1NjYsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2M6IDB4MjU2MCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgwMGNkOiAweDI1NTAsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAweDAwY2U6IDB4MjU2YywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2Y6IDB4MjU2NywgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgwMGQwOiAweDI1NjgsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MDBkMTogMHgyNTY0LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MDBkMjogMHgyNTY1LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MDBkMzogMHgyNTU5LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgwMGQ0OiAweDI1NTgsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDAwZDU6IDB4MjU1MiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgwMGQ2OiAweDI1NTMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MDBkNzogMHgyNTZiLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDAwZDg6IDB4MjU2YSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgwMGQ5OiAweDI1MTgsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAweDAwZGE6IDB4MjUwYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgIDB4MDBkYjogMHgyNTg4LCAgICAgIyAgRlVMTCBCTE9DSworICAgIDB4MDBkYzogMHgyNTg0LCAgICAgIyAgTE9XRVIgSEFMRiBCTE9DSworICAgIDB4MDBkZDogMHgyNThjLCAgICAgIyAgTEVGVCBIQUxGIEJMT0NLCisgICAgMHgwMGRlOiAweDI1OTAsICAgICAjICBSSUdIVCBIQUxGIEJMT0NLCisgICAgMHgwMGRmOiAweDI1ODAsICAgICAjICBVUFBFUiBIQUxGIEJMT0NLCisgICAgMHgwMGUwOiAweDA0NDAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKKyAgICAweDAwZTE6IDB4MDQ0MSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUworICAgIDB4MDBlMjogMHgwNDQyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCisgICAgMHgwMGUzOiAweDA0NDMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorICAgIDB4MDBlNDogMHgwNDQ0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCisgICAgMHgwMGU1OiAweDA0NDUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKKyAgICAweDAwZTY6IDB4MDQ0NiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKKyAgICAweDAwZTc6IDB4MDQ0NywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyAgICAweDAwZTg6IDB4MDQ0OCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKKyAgICAweDAwZTk6IDB4MDQ0OSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorICAgIDB4MDBlYTogMHgwNDRhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDBlYjogMHgwNDRiLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUKKyAgICAweDAwZWM6IDB4MDQ0YywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDAwZWQ6IDB4MDQ0ZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFCisgICAgMHgwMGVlOiAweDA0NGUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWVUKKyAgICAweDAwZWY6IDB4MDQ0ZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZQQorICAgIDB4MDBmMDogMHgwNDAxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KKyAgICAweDAwZjE6IDB4MDQ1MSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJTworICAgIDB4MDBmMjogMHgwNDkwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgwMGYzOiAweDA0OTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgwMGY0OiAweDA0MDQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDAwZjU6IDB4MDQ1NCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDAwZjY6IDB4MDQwNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDBmNzogMHgwNDU2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDBmODogMHgwNDA3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUkKKyAgICAweDAwZjk6IDB4MDQ1NywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZSQorICAgIDB4MDBmYTogMHgwMGI3LCAgICAgIyAgTUlERExFIERPVAorICAgIDB4MDBmYjogMHgyMjFhLCAgICAgIyAgU1FVQVJFIFJPT1QKKyAgICAweDAwZmM6IDB4MjExNiwgICAgICMgIE5VTUVSTyBTSUdOCisgICAgMHgwMGZkOiAweDAwYTQsICAgICAjICBDVVJSRU5DWSBTSUdOCisgICAgMHgwMGZlOiAweDI1YTAsICAgICAjICBCTEFDSyBTUVVBUkUKKyAgICAweDAwZmY6IDB4MDBhMCwgICAgICMgIE5PLUJSRUFLIFNQQUNFCit9KQorCisjIyMgRGVjb2RpbmcgVGFibGUKKworZGVjb2RpbmdfdGFibGUgPSAoCisgICAgJ1x4MDAnICAgICAjICAweDAwMDAgLT4gTlVMTAorICAgICdceDAxJyAgICAgIyAgMHgwMDAxIC0+IFNUQVJUIE9GIEhFQURJTkcKKyAgICAnXHgwMicgICAgICMgIDB4MDAwMiAtPiBTVEFSVCBPRiBURVhUCisgICAgJ1x4MDMnICAgICAjICAweDAwMDMgLT4gRU5EIE9GIFRFWFQKKyAgICAnXHgwNCcgICAgICMgIDB4MDAwNCAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgJ1x4MDUnICAgICAjICAweDAwMDUgLT4gRU5RVUlSWQorICAgICdceDA2JyAgICAgIyAgMHgwMDA2IC0+IEFDS05PV0xFREdFCisgICAgJ1x4MDcnICAgICAjICAweDAwMDcgLT4gQkVMTAorICAgICdceDA4JyAgICAgIyAgMHgwMDA4IC0+IEJBQ0tTUEFDRQorICAgICdcdCcgICAgICAgIyAgMHgwMDA5IC0+IEhPUklaT05UQUwgVEFCVUxBVElPTgorICAgICdcbicgICAgICAgIyAgMHgwMDBhIC0+IExJTkUgRkVFRAorICAgICdceDBiJyAgICAgIyAgMHgwMDBiIC0+IFZFUlRJQ0FMIFRBQlVMQVRJT04KKyAgICAnXHgwYycgICAgICMgIDB4MDAwYyAtPiBGT1JNIEZFRUQKKyAgICAnXHInICAgICAgICMgIDB4MDAwZCAtPiBDQVJSSUFHRSBSRVRVUk4KKyAgICAnXHgwZScgICAgICMgIDB4MDAwZSAtPiBTSElGVCBPVVQKKyAgICAnXHgwZicgICAgICMgIDB4MDAwZiAtPiBTSElGVCBJTgorICAgICdceDEwJyAgICAgIyAgMHgwMDEwIC0+IERBVEEgTElOSyBFU0NBUEUKKyAgICAnXHgxMScgICAgICMgIDB4MDAxMSAtPiBERVZJQ0UgQ09OVFJPTCBPTkUKKyAgICAnXHgxMicgICAgICMgIDB4MDAxMiAtPiBERVZJQ0UgQ09OVFJPTCBUV08KKyAgICAnXHgxMycgICAgICMgIDB4MDAxMyAtPiBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgICdceDE0JyAgICAgIyAgMHgwMDE0IC0+IERFVklDRSBDT05UUk9MIEZPVVIKKyAgICAnXHgxNScgICAgICMgIDB4MDAxNSAtPiBORUdBVElWRSBBQ0tOT1dMRURHRQorICAgICdceDE2JyAgICAgIyAgMHgwMDE2IC0+IFNZTkNIUk9OT1VTIElETEUKKyAgICAnXHgxNycgICAgICMgIDB4MDAxNyAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLCisgICAgJ1x4MTgnICAgICAjICAweDAwMTggLT4gQ0FOQ0VMCisgICAgJ1x4MTknICAgICAjICAweDAwMTkgLT4gRU5EIE9GIE1FRElVTQorICAgICdceDFhJyAgICAgIyAgMHgwMDFhIC0+IFNVQlNUSVRVVEUKKyAgICAnXHgxYicgICAgICMgIDB4MDAxYiAtPiBFU0NBUEUKKyAgICAnXHgxYycgICAgICMgIDB4MDAxYyAtPiBGSUxFIFNFUEFSQVRPUgorICAgICdceDFkJyAgICAgIyAgMHgwMDFkIC0+IEdST1VQIFNFUEFSQVRPUgorICAgICdceDFlJyAgICAgIyAgMHgwMDFlIC0+IFJFQ09SRCBTRVBBUkFUT1IKKyAgICAnXHgxZicgICAgICMgIDB4MDAxZiAtPiBVTklUIFNFUEFSQVRPUgorICAgICcgJyAgICAgICAgIyAgMHgwMDIwIC0+IFNQQUNFCisgICAgJyEnICAgICAgICAjICAweDAwMjEgLT4gRVhDTEFNQVRJT04gTUFSSworICAgICciJyAgICAgICAgIyAgMHgwMDIyIC0+IFFVT1RBVElPTiBNQVJLCisgICAgJyMnICAgICAgICAjICAweDAwMjMgLT4gTlVNQkVSIFNJR04KKyAgICAnJCcgICAgICAgICMgIDB4MDAyNCAtPiBET0xMQVIgU0lHTgorICAgICclJyAgICAgICAgIyAgMHgwMDI1IC0+IFBFUkNFTlQgU0lHTgorICAgICcmJyAgICAgICAgIyAgMHgwMDI2IC0+IEFNUEVSU0FORAorICAgICInIiAgICAgICAgIyAgMHgwMDI3IC0+IEFQT1NUUk9QSEUKKyAgICAnKCcgICAgICAgICMgIDB4MDAyOCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgJyknICAgICAgICAjICAweDAwMjkgLT4gUklHSFQgUEFSRU5USEVTSVMKKyAgICAnKicgICAgICAgICMgIDB4MDAyYSAtPiBBU1RFUklTSworICAgICcrJyAgICAgICAgIyAgMHgwMDJiIC0+IFBMVVMgU0lHTgorICAgICcsJyAgICAgICAgIyAgMHgwMDJjIC0+IENPTU1BCisgICAgJy0nICAgICAgICAjICAweDAwMmQgLT4gSFlQSEVOLU1JTlVTCisgICAgJy4nICAgICAgICAjICAweDAwMmUgLT4gRlVMTCBTVE9QCisgICAgJy8nICAgICAgICAjICAweDAwMmYgLT4gU09MSURVUworICAgICcwJyAgICAgICAgIyAgMHgwMDMwIC0+IERJR0lUIFpFUk8KKyAgICAnMScgICAgICAgICMgIDB4MDAzMSAtPiBESUdJVCBPTkUKKyAgICAnMicgICAgICAgICMgIDB4MDAzMiAtPiBESUdJVCBUV08KKyAgICAnMycgICAgICAgICMgIDB4MDAzMyAtPiBESUdJVCBUSFJFRQorICAgICc0JyAgICAgICAgIyAgMHgwMDM0IC0+IERJR0lUIEZPVVIKKyAgICAnNScgICAgICAgICMgIDB4MDAzNSAtPiBESUdJVCBGSVZFCisgICAgJzYnICAgICAgICAjICAweDAwMzYgLT4gRElHSVQgU0lYCisgICAgJzcnICAgICAgICAjICAweDAwMzcgLT4gRElHSVQgU0VWRU4KKyAgICAnOCcgICAgICAgICMgIDB4MDAzOCAtPiBESUdJVCBFSUdIVAorICAgICc5JyAgICAgICAgIyAgMHgwMDM5IC0+IERJR0lUIE5JTkUKKyAgICAnOicgICAgICAgICMgIDB4MDAzYSAtPiBDT0xPTgorICAgICc7JyAgICAgICAgIyAgMHgwMDNiIC0+IFNFTUlDT0xPTgorICAgICc8JyAgICAgICAgIyAgMHgwMDNjIC0+IExFU1MtVEhBTiBTSUdOCisgICAgJz0nICAgICAgICAjICAweDAwM2QgLT4gRVFVQUxTIFNJR04KKyAgICAnPicgICAgICAgICMgIDB4MDAzZSAtPiBHUkVBVEVSLVRIQU4gU0lHTgorICAgICc/JyAgICAgICAgIyAgMHgwMDNmIC0+IFFVRVNUSU9OIE1BUksKKyAgICAnQCcgICAgICAgICMgIDB4MDA0MCAtPiBDT01NRVJDSUFMIEFUCisgICAgJ0EnICAgICAgICAjICAweDAwNDEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgICdCJyAgICAgICAgIyAgMHgwMDQyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICAnQycgICAgICAgICMgIDB4MDA0MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgJ0QnICAgICAgICAjICAweDAwNDQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgICdFJyAgICAgICAgIyAgMHgwMDQ1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICAnRicgICAgICAgICMgIDB4MDA0NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgJ0cnICAgICAgICAjICAweDAwNDcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgICdIJyAgICAgICAgIyAgMHgwMDQ4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICAnSScgICAgICAgICMgIDB4MDA0OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgJ0onICAgICAgICAjICAweDAwNGEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgICdLJyAgICAgICAgIyAgMHgwMDRiIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICAnTCcgICAgICAgICMgIDB4MDA0YyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgJ00nICAgICAgICAjICAweDAwNGQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgICdOJyAgICAgICAgIyAgMHgwMDRlIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICAnTycgICAgICAgICMgIDB4MDA0ZiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1AnICAgICAgICAjICAweDAwNTAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgICdRJyAgICAgICAgIyAgMHgwMDUxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICAnUicgICAgICAgICMgIDB4MDA1MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgJ1MnICAgICAgICAjICAweDAwNTMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgICdUJyAgICAgICAgIyAgMHgwMDU0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICAnVScgICAgICAgICMgIDB4MDA1NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1YnICAgICAgICAjICAweDAwNTYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgICdXJyAgICAgICAgIyAgMHgwMDU3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICAnWCcgICAgICAgICMgIDB4MDA1OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgJ1knICAgICAgICAjICAweDAwNTkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgICdaJyAgICAgICAgIyAgMHgwMDVhIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICAnWycgICAgICAgICMgIDB4MDA1YiAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1xcJyAgICAgICAjICAweDAwNWMgLT4gUkVWRVJTRSBTT0xJRFVTCisgICAgJ10nICAgICAgICAjICAweDAwNWQgLT4gUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXicgICAgICAgICMgIDB4MDA1ZSAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgICdfJyAgICAgICAgIyAgMHgwMDVmIC0+IExPVyBMSU5FCisgICAgJ2AnICAgICAgICAjICAweDAwNjAgLT4gR1JBVkUgQUNDRU5UCisgICAgJ2EnICAgICAgICAjICAweDAwNjEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAnYicgICAgICAgICMgIDB4MDA2MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgICdjJyAgICAgICAgIyAgMHgwMDYzIC0+IExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgJ2QnICAgICAgICAjICAweDAwNjQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAnZScgICAgICAgICMgIDB4MDA2NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgICdmJyAgICAgICAgIyAgMHgwMDY2IC0+IExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgJ2cnICAgICAgICAjICAweDAwNjcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAnaCcgICAgICAgICMgIDB4MDA2OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgICdpJyAgICAgICAgIyAgMHgwMDY5IC0+IExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgJ2onICAgICAgICAjICAweDAwNmEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAnaycgICAgICAgICMgIDB4MDA2YiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgICdsJyAgICAgICAgIyAgMHgwMDZjIC0+IExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgJ20nICAgICAgICAjICAweDAwNmQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAnbicgICAgICAgICMgIDB4MDA2ZSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgICdvJyAgICAgICAgIyAgMHgwMDZmIC0+IExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgJ3AnICAgICAgICAjICAweDAwNzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAncScgICAgICAgICMgIDB4MDA3MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgICdyJyAgICAgICAgIyAgMHgwMDcyIC0+IExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgJ3MnICAgICAgICAjICAweDAwNzMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAndCcgICAgICAgICMgIDB4MDA3NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgICd1JyAgICAgICAgIyAgMHgwMDc1IC0+IExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgJ3YnICAgICAgICAjICAweDAwNzYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAndycgICAgICAgICMgIDB4MDA3NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgICd4JyAgICAgICAgIyAgMHgwMDc4IC0+IExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgJ3knICAgICAgICAjICAweDAwNzkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAneicgICAgICAgICMgIDB4MDA3YSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgICd7JyAgICAgICAgIyAgMHgwMDdiIC0+IExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgICd8JyAgICAgICAgIyAgMHgwMDdjIC0+IFZFUlRJQ0FMIExJTkUKKyAgICAnfScgICAgICAgICMgIDB4MDA3ZCAtPiBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgJ34nICAgICAgICAjICAweDAwN2UgLT4gVElMREUKKyAgICAnXHg3ZicgICAgICMgIDB4MDA3ZiAtPiBERUxFVEUKKyAgICAnXHUwNDEwJyAgICMgIDB4MDA4MCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCisgICAgJ1x1MDQxMScgICAjICAweDAwODEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKKyAgICAnXHUwNDEyJyAgICMgIDB4MDA4MiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorICAgICdcdTA0MTMnICAgIyAgMHgwMDgzIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorICAgICdcdTA0MTQnICAgIyAgMHgwMDg0IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIERFCisgICAgJ1x1MDQxNScgICAjICAweDAwODUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyAgICAnXHUwNDE2JyAgICMgIDB4MDA4NiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyAgICAnXHUwNDE3JyAgICMgIDB4MDA4NyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRQorICAgICdcdTA0MTgnICAgIyAgMHgwMDg4IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyAgICAnXHUwNDE5JyAgICMgIDB4MDA4OSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCisgICAgJ1x1MDQxYScgICAjICAweDAwOGEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKKyAgICAnXHUwNDFiJyAgICMgIDB4MDA4YiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorICAgICdcdTA0MWMnICAgIyAgMHgwMDhjIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCisgICAgJ1x1MDQxZCcgICAjICAweDAwOGQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KKyAgICAnXHUwNDFlJyAgICMgIDB4MDA4ZSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1x1MDQxZicgICAjICAweDAwOGYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKKyAgICAnXHUwNDIwJyAgICMgIDB4MDA5MCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUgorICAgICdcdTA0MjEnICAgIyAgMHgwMDkxIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisgICAgJ1x1MDQyMicgICAjICAweDAwOTIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyAgICAnXHUwNDIzJyAgICMgIDB4MDA5MyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1x1MDQyNCcgICAjICAweDAwOTQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKKyAgICAnXHUwNDI1JyAgICMgIDB4MDA5NSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorICAgICdcdTA0MjYnICAgIyAgMHgwMDk2IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorICAgICdcdTA0MjcnICAgIyAgMHgwMDk3IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorICAgICdcdTA0MjgnICAgIyAgMHgwMDk4IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorICAgICdcdTA0MjknICAgIyAgMHgwMDk5IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQ0hBCisgICAgJ1x1MDQyYScgICAjICAweDAwOWEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCisgICAgJ1x1MDQyYicgICAjICAweDAwOWIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorICAgICdcdTA0MmMnICAgIyAgMHgwMDljIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgorICAgICdcdTA0MmQnICAgIyAgMHgwMDlkIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAnXHUwNDJlJyAgICMgIDB4MDA5ZSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorICAgICdcdTA0MmYnICAgIyAgMHgwMDlmIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlBCisgICAgJ1x1MDQzMCcgICAjICAweDAwYTAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyAgICAnXHUwNDMxJyAgICMgIDB4MDBhMSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKKyAgICAnXHUwNDMyJyAgICMgIDB4MDBhMiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVkUKKyAgICAnXHUwNDMzJyAgICMgIDB4MDBhMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCisgICAgJ1x1MDQzNCcgICAjICAweDAwYTQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFCisgICAgJ1x1MDQzNScgICAjICAweDAwYTUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCisgICAgJ1x1MDQzNicgICAjICAweDAwYTYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorICAgICdcdTA0MzcnICAgIyAgMHgwMGE3IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBaRQorICAgICdcdTA0MzgnICAgIyAgMHgwMGE4IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJCisgICAgJ1x1MDQzOScgICAjICAweDAwYTkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKKyAgICAnXHUwNDNhJyAgICMgIDB4MDBhYSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKKyAgICAnXHUwNDNiJyAgICMgIDB4MDBhYiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKKyAgICAnXHUwNDNjJyAgICMgIDB4MDBhYyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KKyAgICAnXHUwNDNkJyAgICMgIDB4MDBhZCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KKyAgICAnXHUwNDNlJyAgICMgIDB4MDBhZSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgTworICAgICdcdTA0M2YnICAgIyAgMHgwMGFmIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBQRQorICAgICdcdTI1OTEnICAgIyAgMHgwMGIwIC0+IExJR0hUIFNIQURFCisgICAgJ1x1MjU5MicgICAjICAweDAwYjEgLT4gTUVESVVNIFNIQURFCisgICAgJ1x1MjU5MycgICAjICAweDAwYjIgLT4gREFSSyBTSEFERQorICAgICdcdTI1MDInICAgIyAgMHgwMGIzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgICdcdTI1MjQnICAgIyAgMHgwMGI0IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgICdcdTI1NjEnICAgIyAgMHgwMGI1IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgJ1x1MjU2MicgICAjICAweDAwYjYgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTU2JyAgICMgIDB4MDBiNyAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgJ1x1MjU1NScgICAjICAweDAwYjggLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgICdcdTI1NjMnICAgIyAgMHgwMGI5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAnXHUyNTUxJyAgICMgIDB4MDBiYSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgJ1x1MjU1NycgICAjICAweDAwYmIgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgJ1x1MjU1ZCcgICAjICAweDAwYmMgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgICdcdTI1NWMnICAgIyAgMHgwMGJkIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgJ1x1MjU1YicgICAjICAweDAwYmUgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAnXHUyNTEwJyAgICMgIDB4MDBiZiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgICdcdTI1MTQnICAgIyAgMHgwMGMwIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAnXHUyNTM0JyAgICMgIDB4MDBjMSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTJjJyAgICMgIDB4MDBjMiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1MWMnICAgIyAgMHgwMGMzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAnXHUyNTAwJyAgICMgIDB4MDBjNCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgICdcdTI1M2MnICAgIyAgMHgwMGM1IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NWUnICAgIyAgMHgwMGM2IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgICdcdTI1NWYnICAgIyAgMHgwMGM3IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgICdcdTI1NWEnICAgIyAgMHgwMGM4IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgJ1x1MjU1NCcgICAjICAweDAwYzkgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgICdcdTI1NjknICAgIyAgMHgwMGNhIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTY2JyAgICMgIDB4MDBjYiAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTYwJyAgICMgIDB4MDBjYyAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgICdcdTI1NTAnICAgIyAgMHgwMGNkIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgICdcdTI1NmMnICAgIyAgMHgwMGNlIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTY3JyAgICMgIDB4MDBjZiAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgICdcdTI1NjgnICAgIyAgMHgwMGQwIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgJ1x1MjU2NCcgICAjICAweDAwZDEgLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgICdcdTI1NjUnICAgIyAgMHgwMGQyIC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAnXHUyNTU5JyAgICMgIDB4MDBkMyAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAnXHUyNTU4JyAgICMgIDB4MDBkNCAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAnXHUyNTUyJyAgICMgIDB4MDBkNSAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgICdcdTI1NTMnICAgIyAgMHgwMGQ2IC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgJ1x1MjU2YicgICAjICAweDAwZDcgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAnXHUyNTZhJyAgICMgIDB4MDBkOCAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgICdcdTI1MTgnICAgIyAgMHgwMGQ5IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgICdcdTI1MGMnICAgIyAgMHgwMGRhIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgICdcdTI1ODgnICAgIyAgMHgwMGRiIC0+IEZVTEwgQkxPQ0sKKyAgICAnXHUyNTg0JyAgICMgIDB4MDBkYyAtPiBMT1dFUiBIQUxGIEJMT0NLCisgICAgJ1x1MjU4YycgICAjICAweDAwZGQgLT4gTEVGVCBIQUxGIEJMT0NLCisgICAgJ1x1MjU5MCcgICAjICAweDAwZGUgLT4gUklHSFQgSEFMRiBCTE9DSworICAgICdcdTI1ODAnICAgIyAgMHgwMGRmIC0+IFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAnXHUwNDQwJyAgICMgIDB4MDBlMCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKKyAgICAnXHUwNDQxJyAgICMgIDB4MDBlMSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAnXHUwNDQyJyAgICMgIDB4MDBlMiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKKyAgICAnXHUwNDQzJyAgICMgIDB4MDBlMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorICAgICdcdTA0NDQnICAgIyAgMHgwMGU0IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFRgorICAgICdcdTA0NDUnICAgIyAgMHgwMGU1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBIQQorICAgICdcdTA0NDYnICAgIyAgMHgwMGU2IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKKyAgICAnXHUwNDQ3JyAgICMgIDB4MDBlNyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCisgICAgJ1x1MDQ0OCcgICAjICAweDAwZTggLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQQorICAgICdcdTA0NDknICAgIyAgMHgwMGU5IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorICAgICdcdTA0NGEnICAgIyAgMHgwMGVhIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KKyAgICAnXHUwNDRiJyAgICMgIDB4MDBlYiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQorICAgICdcdTA0NGMnICAgIyAgMHgwMGVjIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAnXHUwNDRkJyAgICMgIDB4MDBlZCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorICAgICdcdTA0NGUnICAgIyAgMHgwMGVlIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZVQorICAgICdcdTA0NGYnICAgIyAgMHgwMGVmIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZQQorICAgICdcdTA0MDEnICAgIyAgMHgwMGYwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIElPCisgICAgJ1x1MDQ1MScgICAjICAweDAwZjEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCisgICAgJ1x1MDQ5MCcgICAjICAweDAwZjIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgJ1x1MDQ5MScgICAjICAweDAwZjMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgICdcdTA0MDQnICAgIyAgMHgwMGY0IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgICdcdTA0NTQnICAgIyAgMHgwMGY1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAnXHUwNDA2JyAgICMgIDB4MDBmNiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAnXHUwNDU2JyAgICMgIDB4MDBmNyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgJ1x1MDQwNycgICAjICAweDAwZjggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUkKKyAgICAnXHUwNDU3JyAgICMgIDB4MDBmOSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUkKKyAgICAnXHhiNycgICAgICMgIDB4MDBmYSAtPiBNSURETEUgRE9UCisgICAgJ1x1MjIxYScgICAjICAweDAwZmIgLT4gU1FVQVJFIFJPT1QKKyAgICAnXHUyMTE2JyAgICMgIDB4MDBmYyAtPiBOVU1FUk8gU0lHTgorICAgICdceGE0JyAgICAgIyAgMHgwMGZkIC0+IENVUlJFTkNZIFNJR04KKyAgICAnXHUyNWEwJyAgICMgIDB4MDBmZSAtPiBCTEFDSyBTUVVBUkUKKyAgICAnXHhhMCcgICAgICMgIDB4MDBmZiAtPiBOTy1CUkVBSyBTUEFDRQorKQorCisjIyMgRW5jb2RpbmcgTWFwCisKK2VuY29kaW5nX21hcCA9IHsKKyAgICAweDAwMDA6IDB4MDAwMCwgICAgICMgIE5VTEwKKyAgICAweDAwMDE6IDB4MDAwMSwgICAgICMgIFNUQVJUIE9GIEhFQURJTkcKKyAgICAweDAwMDI6IDB4MDAwMiwgICAgICMgIFNUQVJUIE9GIFRFWFQKKyAgICAweDAwMDM6IDB4MDAwMywgICAgICMgIEVORCBPRiBURVhUCisgICAgMHgwMDA0OiAweDAwMDQsICAgICAjICBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgMHgwMDA1OiAweDAwMDUsICAgICAjICBFTlFVSVJZCisgICAgMHgwMDA2OiAweDAwMDYsICAgICAjICBBQ0tOT1dMRURHRQorICAgIDB4MDAwNzogMHgwMDA3LCAgICAgIyAgQkVMTAorICAgIDB4MDAwODogMHgwMDA4LCAgICAgIyAgQkFDS1NQQUNFCisgICAgMHgwMDA5OiAweDAwMDksICAgICAjICBIT1JJWk9OVEFMIFRBQlVMQVRJT04KKyAgICAweDAwMGE6IDB4MDAwYSwgICAgICMgIExJTkUgRkVFRAorICAgIDB4MDAwYjogMHgwMDBiLCAgICAgIyAgVkVSVElDQUwgVEFCVUxBVElPTgorICAgIDB4MDAwYzogMHgwMDBjLCAgICAgIyAgRk9STSBGRUVECisgICAgMHgwMDBkOiAweDAwMGQsICAgICAjICBDQVJSSUFHRSBSRVRVUk4KKyAgICAweDAwMGU6IDB4MDAwZSwgICAgICMgIFNISUZUIE9VVAorICAgIDB4MDAwZjogMHgwMDBmLCAgICAgIyAgU0hJRlQgSU4KKyAgICAweDAwMTA6IDB4MDAxMCwgICAgICMgIERBVEEgTElOSyBFU0NBUEUKKyAgICAweDAwMTE6IDB4MDAxMSwgICAgICMgIERFVklDRSBDT05UUk9MIE9ORQorICAgIDB4MDAxMjogMHgwMDEyLCAgICAgIyAgREVWSUNFIENPTlRST0wgVFdPCisgICAgMHgwMDEzOiAweDAwMTMsICAgICAjICBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgIDB4MDAxNDogMHgwMDE0LCAgICAgIyAgREVWSUNFIENPTlRST0wgRk9VUgorICAgIDB4MDAxNTogMHgwMDE1LCAgICAgIyAgTkVHQVRJVkUgQUNLTk9XTEVER0UKKyAgICAweDAwMTY6IDB4MDAxNiwgICAgICMgIFNZTkNIUk9OT1VTIElETEUKKyAgICAweDAwMTc6IDB4MDAxNywgICAgICMgIEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sKKyAgICAweDAwMTg6IDB4MDAxOCwgICAgICMgIENBTkNFTAorICAgIDB4MDAxOTogMHgwMDE5LCAgICAgIyAgRU5EIE9GIE1FRElVTQorICAgIDB4MDAxYTogMHgwMDFhLCAgICAgIyAgU1VCU1RJVFVURQorICAgIDB4MDAxYjogMHgwMDFiLCAgICAgIyAgRVNDQVBFCisgICAgMHgwMDFjOiAweDAwMWMsICAgICAjICBGSUxFIFNFUEFSQVRPUgorICAgIDB4MDAxZDogMHgwMDFkLCAgICAgIyAgR1JPVVAgU0VQQVJBVE9SCisgICAgMHgwMDFlOiAweDAwMWUsICAgICAjICBSRUNPUkQgU0VQQVJBVE9SCisgICAgMHgwMDFmOiAweDAwMWYsICAgICAjICBVTklUIFNFUEFSQVRPUgorICAgIDB4MDAyMDogMHgwMDIwLCAgICAgIyAgU1BBQ0UKKyAgICAweDAwMjE6IDB4MDAyMSwgICAgICMgIEVYQ0xBTUFUSU9OIE1BUksKKyAgICAweDAwMjI6IDB4MDAyMiwgICAgICMgIFFVT1RBVElPTiBNQVJLCisgICAgMHgwMDIzOiAweDAwMjMsICAgICAjICBOVU1CRVIgU0lHTgorICAgIDB4MDAyNDogMHgwMDI0LCAgICAgIyAgRE9MTEFSIFNJR04KKyAgICAweDAwMjU6IDB4MDAyNSwgICAgICMgIFBFUkNFTlQgU0lHTgorICAgIDB4MDAyNjogMHgwMDI2LCAgICAgIyAgQU1QRVJTQU5ECisgICAgMHgwMDI3OiAweDAwMjcsICAgICAjICBBUE9TVFJPUEhFCisgICAgMHgwMDI4OiAweDAwMjgsICAgICAjICBMRUZUIFBBUkVOVEhFU0lTCisgICAgMHgwMDI5OiAweDAwMjksICAgICAjICBSSUdIVCBQQVJFTlRIRVNJUworICAgIDB4MDAyYTogMHgwMDJhLCAgICAgIyAgQVNURVJJU0sKKyAgICAweDAwMmI6IDB4MDAyYiwgICAgICMgIFBMVVMgU0lHTgorICAgIDB4MDAyYzogMHgwMDJjLCAgICAgIyAgQ09NTUEKKyAgICAweDAwMmQ6IDB4MDAyZCwgICAgICMgIEhZUEhFTi1NSU5VUworICAgIDB4MDAyZTogMHgwMDJlLCAgICAgIyAgRlVMTCBTVE9QCisgICAgMHgwMDJmOiAweDAwMmYsICAgICAjICBTT0xJRFVTCisgICAgMHgwMDMwOiAweDAwMzAsICAgICAjICBESUdJVCBaRVJPCisgICAgMHgwMDMxOiAweDAwMzEsICAgICAjICBESUdJVCBPTkUKKyAgICAweDAwMzI6IDB4MDAzMiwgICAgICMgIERJR0lUIFRXTworICAgIDB4MDAzMzogMHgwMDMzLCAgICAgIyAgRElHSVQgVEhSRUUKKyAgICAweDAwMzQ6IDB4MDAzNCwgICAgICMgIERJR0lUIEZPVVIKKyAgICAweDAwMzU6IDB4MDAzNSwgICAgICMgIERJR0lUIEZJVkUKKyAgICAweDAwMzY6IDB4MDAzNiwgICAgICMgIERJR0lUIFNJWAorICAgIDB4MDAzNzogMHgwMDM3LCAgICAgIyAgRElHSVQgU0VWRU4KKyAgICAweDAwMzg6IDB4MDAzOCwgICAgICMgIERJR0lUIEVJR0hUCisgICAgMHgwMDM5OiAweDAwMzksICAgICAjICBESUdJVCBOSU5FCisgICAgMHgwMDNhOiAweDAwM2EsICAgICAjICBDT0xPTgorICAgIDB4MDAzYjogMHgwMDNiLCAgICAgIyAgU0VNSUNPTE9OCisgICAgMHgwMDNjOiAweDAwM2MsICAgICAjICBMRVNTLVRIQU4gU0lHTgorICAgIDB4MDAzZDogMHgwMDNkLCAgICAgIyAgRVFVQUxTIFNJR04KKyAgICAweDAwM2U6IDB4MDAzZSwgICAgICMgIEdSRUFURVItVEhBTiBTSUdOCisgICAgMHgwMDNmOiAweDAwM2YsICAgICAjICBRVUVTVElPTiBNQVJLCisgICAgMHgwMDQwOiAweDAwNDAsICAgICAjICBDT01NRVJDSUFMIEFUCisgICAgMHgwMDQxOiAweDAwNDEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgMHgwMDQyOiAweDAwNDIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgMHgwMDQzOiAweDAwNDMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgMHgwMDQ0OiAweDAwNDQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgMHgwMDQ1OiAweDAwNDUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgMHgwMDQ2OiAweDAwNDYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgMHgwMDQ3OiAweDAwNDcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgMHgwMDQ4OiAweDAwNDgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgMHgwMDQ5OiAweDAwNDksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgMHgwMDRhOiAweDAwNGEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgMHgwMDRiOiAweDAwNGIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgMHgwMDRjOiAweDAwNGMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgMHgwMDRkOiAweDAwNGQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgMHgwMDRlOiAweDAwNGUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgMHgwMDRmOiAweDAwNGYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgMHgwMDUwOiAweDAwNTAsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgMHgwMDUxOiAweDAwNTEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgMHgwMDUyOiAweDAwNTIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgMHgwMDUzOiAweDAwNTMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgMHgwMDU0OiAweDAwNTQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgMHgwMDU1OiAweDAwNTUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgMHgwMDU2OiAweDAwNTYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgMHgwMDU3OiAweDAwNTcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgMHgwMDU4OiAweDAwNTgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgMHgwMDU5OiAweDAwNTksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgMHgwMDVhOiAweDAwNWEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgMHgwMDViOiAweDAwNWIsICAgICAjICBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgMHgwMDVjOiAweDAwNWMsICAgICAjICBSRVZFUlNFIFNPTElEVVMKKyAgICAweDAwNWQ6IDB4MDA1ZCwgICAgICMgIFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgMHgwMDVlOiAweDAwNWUsICAgICAjICBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIDB4MDA1ZjogMHgwMDVmLCAgICAgIyAgTE9XIExJTkUKKyAgICAweDAwNjA6IDB4MDA2MCwgICAgICMgIEdSQVZFIEFDQ0VOVAorICAgIDB4MDA2MTogMHgwMDYxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAweDAwNjI6IDB4MDA2MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgMHgwMDYzOiAweDAwNjMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgIDB4MDA2NDogMHgwMDY0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAweDAwNjU6IDB4MDA2NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgMHgwMDY2OiAweDAwNjYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgIDB4MDA2NzogMHgwMDY3LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAweDAwNjg6IDB4MDA2OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBICisgICAgMHgwMDY5OiAweDAwNjksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgIDB4MDA2YTogMHgwMDZhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAweDAwNmI6IDB4MDA2YiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgMHgwMDZjOiAweDAwNmMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgIDB4MDA2ZDogMHgwMDZkLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAweDAwNmU6IDB4MDA2ZSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgMHgwMDZmOiAweDAwNmYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgIDB4MDA3MDogMHgwMDcwLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAweDAwNzE6IDB4MDA3MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgMHgwMDcyOiAweDAwNzIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgIDB4MDA3MzogMHgwMDczLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAweDAwNzQ6IDB4MDA3NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgMHgwMDc1OiAweDAwNzUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgIDB4MDA3NjogMHgwMDc2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAweDAwNzc6IDB4MDA3NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgMHgwMDc4OiAweDAwNzgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgIDB4MDA3OTogMHgwMDc5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAweDAwN2E6IDB4MDA3YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgMHgwMDdiOiAweDAwN2IsICAgICAjICBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAweDAwN2M6IDB4MDA3YywgICAgICMgIFZFUlRJQ0FMIExJTkUKKyAgICAweDAwN2Q6IDB4MDA3ZCwgICAgICMgIFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAweDAwN2U6IDB4MDA3ZSwgICAgICMgIFRJTERFCisgICAgMHgwMDdmOiAweDAwN2YsICAgICAjICBERUxFVEUKKyAgICAweDAwYTA6IDB4MDBmZiwgICAgICMgIE5PLUJSRUFLIFNQQUNFCisgICAgMHgwMGE0OiAweDAwZmQsICAgICAjICBDVVJSRU5DWSBTSUdOCisgICAgMHgwMGI3OiAweDAwZmEsICAgICAjICBNSURETEUgRE9UCisgICAgMHgwNDAxOiAweDAwZjAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworICAgIDB4MDQwNDogMHgwMGY0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwNDA2OiAweDAwZjYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDA0MDc6IDB4MDBmOCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlJCisgICAgMHgwNDEwOiAweDAwODAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCisgICAgMHgwNDExOiAweDAwODEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCRQorICAgIDB4MDQxMjogMHgwMDgyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKKyAgICAweDA0MTM6IDB4MDA4MywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRQorICAgIDB4MDQxNDogMHgwMDg0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKKyAgICAweDA0MTU6IDB4MDA4NSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisgICAgMHgwNDE2OiAweDAwODYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyAgICAweDA0MTc6IDB4MDA4NywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCisgICAgMHgwNDE4OiAweDAwODgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCisgICAgMHgwNDE5OiAweDAwODksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwNDFhOiAweDAwOGEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorICAgIDB4MDQxYjogMHgwMDhiLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKKyAgICAweDA0MWM6IDB4MDA4YywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCisgICAgMHgwNDFkOiAweDAwOGQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTgorICAgIDB4MDQxZTogMHgwMDhlLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDQxZjogMHgwMDhmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKKyAgICAweDA0MjA6IDB4MDA5MCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCisgICAgMHgwNDIxOiAweDAwOTEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworICAgIDB4MDQyMjogMHgwMDkyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyAgICAweDA0MjM6IDB4MDA5MywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFUKKyAgICAweDA0MjQ6IDB4MDA5NCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCisgICAgMHgwNDI1OiAweDAwOTUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQQorICAgIDB4MDQyNjogMHgwMDk2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCisgICAgMHgwNDI3OiAweDAwOTcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUKKyAgICAweDA0Mjg6IDB4MDA5OCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQQorICAgIDB4MDQyOTogMHgwMDk5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyAgICAweDA0MmE6IDB4MDA5YSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDQyYjogMHgwMDliLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUVSVQorICAgIDB4MDQyYzogMHgwMDljLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwNDJkOiAweDAwOWQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFCisgICAgMHgwNDJlOiAweDAwOWUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorICAgIDB4MDQyZjogMHgwMDlmLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKKyAgICAweDA0MzA6IDB4MDBhMCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBBCisgICAgMHgwNDMxOiAweDAwYTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQkUKKyAgICAweDA0MzI6IDB4MDBhMiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBWRQorICAgIDB4MDQzMzogMHgwMGEzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRQorICAgIDB4MDQzNDogMHgwMGE0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIERFCisgICAgMHgwNDM1OiAweDAwYTUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyAgICAweDA0MzY6IDB4MDBhNiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKKyAgICAweDA0Mzc6IDB4MDBhNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBaRQorICAgIDB4MDQzODogMHgwMGE4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKKyAgICAweDA0Mzk6IDB4MDBhOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCisgICAgMHgwNDNhOiAweDAwYWEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgS0EKKyAgICAweDA0M2I6IDB4MDBhYiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTAorICAgIDB4MDQzYzogMHgwMGFjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCisgICAgMHgwNDNkOiAweDAwYWQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU4KKyAgICAweDA0M2U6IDB4MDBhZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBPCisgICAgMHgwNDNmOiAweDAwYWYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKKyAgICAweDA0NDA6IDB4MDBlMCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUgorICAgIDB4MDQ0MTogMHgwMGUxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCisgICAgMHgwNDQyOiAweDAwZTIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKKyAgICAweDA0NDM6IDB4MDBlMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVCisgICAgMHgwNDQ0OiAweDAwZTQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKKyAgICAweDA0NDU6IDB4MDBlNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQQorICAgIDB4MDQ0NjogMHgwMGU2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQorICAgIDB4MDQ0NzogMHgwMGU3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQorICAgIDB4MDQ0ODogMHgwMGU4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQQorICAgIDB4MDQ0OTogMHgwMGU5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCisgICAgMHgwNDRhOiAweDAwZWEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwNDRiOiAweDAwZWIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQorICAgIDB4MDQ0YzogMHgwMGVjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDQ0ZDogMHgwMGVkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyAgICAweDA0NGU6IDB4MDBlZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZVQorICAgIDB4MDQ0ZjogMHgwMGVmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCisgICAgMHgwNDUxOiAweDAwZjEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAweDA0NTQ6IDB4MDBmNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDA0NTY6IDB4MDBmNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDA0NTc6IDB4MDBmOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZSQorICAgIDB4MDQ5MDogMHgwMGYyLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgwNDkxOiAweDAwZjMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgMHgyMTE2OiAweDAwZmMsICAgICAjICBOVU1FUk8gU0lHTgorICAgIDB4MjIxYTogMHgwMGZiLCAgICAgIyAgU1FVQVJFIFJPT1QKKyAgICAweDI1MDA6IDB4MDBjNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgMHgyNTAyOiAweDAwYjMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAweDI1MGM6IDB4MDBkYSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgIDB4MjUxMDogMHgwMGJmLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAweDI1MTQ6IDB4MDBjMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAweDI1MTg6IDB4MDBkOSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIDB4MjUxYzogMHgwMGMzLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MjUyNDogMHgwMGI0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgyNTJjOiAweDAwYzIsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjUzNDogMHgwMGMxLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTNjOiAweDAwYzUsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDI1NTA6IDB4MDBjZCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIDB4MjU1MTogMHgwMGJhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgIDB4MjU1MjogMHgwMGQ1LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDI1NTM6IDB4MDBkNiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgyNTU0OiAweDAwYzksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgMHgyNTU1OiAweDAwYjgsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgyNTU2OiAweDAwYjcsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgyNTU3OiAweDAwYmIsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICAweDI1NTg6IDB4MDBkNCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MjU1OTogMHgwMGQzLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgyNTVhOiAweDAwYzgsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIDB4MjU1YjogMHgwMGJlLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDI1NWM6IDB4MDBiZCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgyNTVkOiAweDAwYmMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgMHgyNTVlOiAweDAwYzYsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDI1NWY6IDB4MDBjNywgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MjU2MDogMHgwMGNjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDI1NjE6IDB4MDBiNSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgyNTYyOiAweDAwYjYsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MjU2MzogMHgwMGI5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MjU2NDogMHgwMGQxLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MjU2NTogMHgwMGQyLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MjU2NjogMHgwMGNiLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTY3OiAweDAwY2YsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MjU2ODogMHgwMGQwLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDI1Njk6IDB4MDBjYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDI1NmE6IDB4MDBkOCwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgyNTZiOiAweDAwZDcsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MjU2YzogMHgwMGNlLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU4MDogMHgwMGRmLCAgICAgIyAgVVBQRVIgSEFMRiBCTE9DSworICAgIDB4MjU4NDogMHgwMGRjLCAgICAgIyAgTE9XRVIgSEFMRiBCTE9DSworICAgIDB4MjU4ODogMHgwMGRiLCAgICAgIyAgRlVMTCBCTE9DSworICAgIDB4MjU4YzogMHgwMGRkLCAgICAgIyAgTEVGVCBIQUxGIEJMT0NLCisgICAgMHgyNTkwOiAweDAwZGUsICAgICAjICBSSUdIVCBIQUxGIEJMT0NLCisgICAgMHgyNTkxOiAweDAwYjAsICAgICAjICBMSUdIVCBTSEFERQorICAgIDB4MjU5MjogMHgwMGIxLCAgICAgIyAgTUVESVVNIFNIQURFCisgICAgMHgyNTkzOiAweDAwYjIsICAgICAjICBEQVJLIFNIQURFCisgICAgMHgyNWEwOiAweDAwZmUsICAgICAjICBCTEFDSyBTUVVBUkUKK30KZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3AyNzMucHkgYi9MaWIvZW5jb2RpbmdzL2NwMjczLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzZkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL2NwMjczLnB5CkBAIC0wLDAgKzEsMzA3IEBACisiIiIgUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIGNwMjczIGdlbmVyYXRlZCBmcm9tICdweXRob24tbWFwcGluZ3MvQ1AyNzMuVFhUJyB3aXRoIGdlbmNvZGVjLnB5LgorCisiIiIjIgorCitpbXBvcnQgY29kZWNzCisKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisKKyAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfdGFibGUpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfdGFibGUpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZGVjb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0nY3AyNzMnLAorICAgICAgICBlbmNvZGU9Q29kZWMoKS5lbmNvZGUsCisgICAgICAgIGRlY29kZT1Db2RlYygpLmRlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICApCisKKworIyMjIERlY29kaW5nIFRhYmxlCisKK2RlY29kaW5nX3RhYmxlID0gKAorICAgICdceDAwJyAgICAgICMgIDB4MDAgLT4gTlVMTCAoTlVMKQorICAgICdceDAxJyAgICAgICMgIDB4MDEgLT4gU1RBUlQgT0YgSEVBRElORyAoU09IKQorICAgICdceDAyJyAgICAgICMgIDB4MDIgLT4gU1RBUlQgT0YgVEVYVCAoU1RYKQorICAgICdceDAzJyAgICAgICMgIDB4MDMgLT4gRU5EIE9GIFRFWFQgKEVUWCkKKyAgICAnXHg5YycgICAgICAjICAweDA0IC0+IFNUUklORyBURVJNSU5BVE9SIChTVCkKKyAgICAnXHQnICAgICAgICAjICAweDA1IC0+IENIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkKKyAgICAnXHg4NicgICAgICAjICAweDA2IC0+IFNUQVJUIE9GIFNFTEVDVEVEIEFSRUEgKFNTQSkKKyAgICAnXHg3ZicgICAgICAjICAweDA3IC0+IERFTEVURSAoREVMKQorICAgICdceDk3JyAgICAgICMgIDB4MDggLT4gRU5EIE9GIEdVQVJERUQgQVJFQSAoRVBBKQorICAgICdceDhkJyAgICAgICMgIDB4MDkgLT4gUkVWRVJTRSBMSU5FIEZFRUQgKFJJKQorICAgICdceDhlJyAgICAgICMgIDB4MEEgLT4gU0lOR0xFLVNISUZUIFRXTyAoU1MyKQorICAgICdceDBiJyAgICAgICMgIDB4MEIgLT4gTElORSBUQUJVTEFUSU9OIChWVCkKKyAgICAnXHgwYycgICAgICAjICAweDBDIC0+IEZPUk0gRkVFRCAoRkYpCisgICAgJ1xyJyAgICAgICAgIyAgMHgwRCAtPiBDQVJSSUFHRSBSRVRVUk4gKENSKQorICAgICdceDBlJyAgICAgICMgIDB4MEUgLT4gU0hJRlQgT1VUIChTTykKKyAgICAnXHgwZicgICAgICAjICAweDBGIC0+IFNISUZUIElOIChTSSkKKyAgICAnXHgxMCcgICAgICAjICAweDEwIC0+IERBVEFMSU5LIEVTQ0FQRSAoRExFKQorICAgICdceDExJyAgICAgICMgIDB4MTEgLT4gREVWSUNFIENPTlRST0wgT05FIChEQzEpCisgICAgJ1x4MTInICAgICAgIyAgMHgxMiAtPiBERVZJQ0UgQ09OVFJPTCBUV08gKERDMikKKyAgICAnXHgxMycgICAgICAjICAweDEzIC0+IERFVklDRSBDT05UUk9MIFRIUkVFIChEQzMpCisgICAgJ1x4OWQnICAgICAgIyAgMHgxNCAtPiBPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkQgKE9TQykKKyAgICAnXHg4NScgICAgICAjICAweDE1IC0+IE5FWFQgTElORSAoTkVMKQorICAgICdceDA4JyAgICAgICMgIDB4MTYgLT4gQkFDS1NQQUNFIChCUykKKyAgICAnXHg4NycgICAgICAjICAweDE3IC0+IEVORCBPRiBTRUxFQ1RFRCBBUkVBIChFU0EpCisgICAgJ1x4MTgnICAgICAgIyAgMHgxOCAtPiBDQU5DRUwgKENBTikKKyAgICAnXHgxOScgICAgICAjICAweDE5IC0+IEVORCBPRiBNRURJVU0gKEVNKQorICAgICdceDkyJyAgICAgICMgIDB4MUEgLT4gUFJJVkFURSBVU0UgVFdPIChQVTIpCisgICAgJ1x4OGYnICAgICAgIyAgMHgxQiAtPiBTSU5HTEUtU0hJRlQgVEhSRUUgKFNTMykKKyAgICAnXHgxYycgICAgICAjICAweDFDIC0+IEZJTEUgU0VQQVJBVE9SIChJUzQpCisgICAgJ1x4MWQnICAgICAgIyAgMHgxRCAtPiBHUk9VUCBTRVBBUkFUT1IgKElTMykKKyAgICAnXHgxZScgICAgICAjICAweDFFIC0+IFJFQ09SRCBTRVBBUkFUT1IgKElTMikKKyAgICAnXHgxZicgICAgICAjICAweDFGIC0+IFVOSVQgU0VQQVJBVE9SIChJUzEpCisgICAgJ1x4ODAnICAgICAgIyAgMHgyMCAtPiBQQURESU5HIENIQVJBQ1RFUiAoUEFEKQorICAgICdceDgxJyAgICAgICMgIDB4MjEgLT4gSElHSCBPQ1RFVCBQUkVTRVQgKEhPUCkKKyAgICAnXHg4MicgICAgICAjICAweDIyIC0+IEJSRUFLIFBFUk1JVFRFRCBIRVJFIChCUEgpCisgICAgJ1x4ODMnICAgICAgIyAgMHgyMyAtPiBOTyBCUkVBSyBIRVJFIChOQkgpCisgICAgJ1x4ODQnICAgICAgIyAgMHgyNCAtPiBJTkRFWCAoSU5EKQorICAgICdcbicgICAgICAgICMgIDB4MjUgLT4gTElORSBGRUVEIChMRikKKyAgICAnXHgxNycgICAgICAjICAweDI2IC0+IEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKEVUQikKKyAgICAnXHgxYicgICAgICAjICAweDI3IC0+IEVTQ0FQRSAoRVNDKQorICAgICdceDg4JyAgICAgICMgIDB4MjggLT4gQ0hBUkFDVEVSIFRBQlVMQVRJT04gU0VUIChIVFMpCisgICAgJ1x4ODknICAgICAgIyAgMHgyOSAtPiBDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT04gKEhUSikKKyAgICAnXHg4YScgICAgICAjICAweDJBIC0+IExJTkUgVEFCVUxBVElPTiBTRVQgKFZUUykKKyAgICAnXHg4YicgICAgICAjICAweDJCIC0+IFBBUlRJQUwgTElORSBGT1JXQVJEIChQTEQpCisgICAgJ1x4OGMnICAgICAgIyAgMHgyQyAtPiBQQVJUSUFMIExJTkUgQkFDS1dBUkQgKFBMVSkKKyAgICAnXHgwNScgICAgICAjICAweDJEIC0+IEVOUVVJUlkgKEVOUSkKKyAgICAnXHgwNicgICAgICAjICAweDJFIC0+IEFDS05PV0xFREdFIChBQ0spCisgICAgJ1x4MDcnICAgICAgIyAgMHgyRiAtPiBCRUxMIChCRUwpCisgICAgJ1x4OTAnICAgICAgIyAgMHgzMCAtPiBERVZJQ0UgQ09OVFJPTCBTVFJJTkcgKERDUykKKyAgICAnXHg5MScgICAgICAjICAweDMxIC0+IFBSSVZBVEUgVVNFIE9ORSAoUFUxKQorICAgICdceDE2JyAgICAgICMgIDB4MzIgLT4gU1lOQ0hST05PVVMgSURMRSAoU1lOKQorICAgICdceDkzJyAgICAgICMgIDB4MzMgLT4gU0VUIFRSQU5TTUlUIFNUQVRFIChTVFMpCisgICAgJ1x4OTQnICAgICAgIyAgMHgzNCAtPiBDQU5DRUwgQ0hBUkFDVEVSIChDQ0gpCisgICAgJ1x4OTUnICAgICAgIyAgMHgzNSAtPiBNRVNTQUdFIFdBSVRJTkcgKE1XKQorICAgICdceDk2JyAgICAgICMgIDB4MzYgLT4gU1RBUlQgT0YgR1VBUkRFRCBBUkVBIChTUEEpCisgICAgJ1x4MDQnICAgICAgIyAgMHgzNyAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OIChFT1QpCisgICAgJ1x4OTgnICAgICAgIyAgMHgzOCAtPiBTVEFSVCBPRiBTVFJJTkcgKFNPUykKKyAgICAnXHg5OScgICAgICAjICAweDM5IC0+IFNJTkdMRSBHUkFQSElDIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTR0NJKQorICAgICdceDlhJyAgICAgICMgIDB4M0EgLT4gU0lOR0xFIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTQ0kpCisgICAgJ1x4OWInICAgICAgIyAgMHgzQiAtPiBDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVIgKENTSSkKKyAgICAnXHgxNCcgICAgICAjICAweDNDIC0+IERFVklDRSBDT05UUk9MIEZPVVIgKERDNCkKKyAgICAnXHgxNScgICAgICAjICAweDNEIC0+IE5FR0FUSVZFIEFDS05PV0xFREdFIChOQUspCisgICAgJ1x4OWUnICAgICAgIyAgMHgzRSAtPiBQUklWQUNZIE1FU1NBR0UgKFBNKQorICAgICdceDFhJyAgICAgICMgIDB4M0YgLT4gU1VCU1RJVFVURSAoU1VCKQorICAgICcgJyAgICAgICAgICMgIDB4NDAgLT4gU1BBQ0UKKyAgICAnXHhhMCcgICAgICAjICAweDQxIC0+IE5PLUJSRUFLIFNQQUNFCisgICAgJ1x4ZTInICAgICAgIyAgMHg0MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAneycgICAgICAgICAjICAweDQzIC0+IExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgICdceGUwJyAgICAgICMgIDB4NDQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgICdceGUxJyAgICAgICMgIDB4NDUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgICdceGUzJyAgICAgICMgIDB4NDYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgICdceGU1JyAgICAgICMgIDB4NDcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgJ1x4ZTcnICAgICAgIyAgMHg0OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAnXHhmMScgICAgICAjICAweDQ5IC0+IExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAnXHhjNCcgICAgICAjICAweDRBIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAnLicgICAgICAgICAjICAweDRCIC0+IEZVTEwgU1RPUAorICAgICc8JyAgICAgICAgICMgIDB4NEMgLT4gTEVTUy1USEFOIFNJR04KKyAgICAnKCcgICAgICAgICAjICAweDREIC0+IExFRlQgUEFSRU5USEVTSVMKKyAgICAnKycgICAgICAgICAjICAweDRFIC0+IFBMVVMgU0lHTgorICAgICchJyAgICAgICAgICMgIDB4NEYgLT4gRVhDTEFNQVRJT04gTUFSSworICAgICcmJyAgICAgICAgICMgIDB4NTAgLT4gQU1QRVJTQU5ECisgICAgJ1x4ZTknICAgICAgIyAgMHg1MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgJ1x4ZWEnICAgICAgIyAgMHg1MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhlYicgICAgICAjICAweDUzIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZTgnICAgICAgIyAgMHg1NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgJ1x4ZWQnICAgICAgIyAgMHg1NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgJ1x4ZWUnICAgICAgIyAgMHg1NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhlZicgICAgICAjICAweDU3IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZWMnICAgICAgIyAgMHg1OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgJ34nICAgICAgICAgIyAgMHg1OSAtPiBUSUxERQorICAgICdceGRjJyAgICAgICMgIDB4NUEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgICckJyAgICAgICAgICMgIDB4NUIgLT4gRE9MTEFSIFNJR04KKyAgICAnKicgICAgICAgICAjICAweDVDIC0+IEFTVEVSSVNLCisgICAgJyknICAgICAgICAgIyAgMHg1RCAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgICc7JyAgICAgICAgICMgIDB4NUUgLT4gU0VNSUNPTE9OCisgICAgJ14nICAgICAgICAgIyAgMHg1RiAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgICctJyAgICAgICAgICMgIDB4NjAgLT4gSFlQSEVOLU1JTlVTCisgICAgJy8nICAgICAgICAgIyAgMHg2MSAtPiBTT0xJRFVTCisgICAgJ1x4YzInICAgICAgIyAgMHg2MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgICdbJyAgICAgICAgICMgIDB4NjMgLT4gTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgICdceGMwJyAgICAgICMgIDB4NjQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgJ1x4YzEnICAgICAgIyAgMHg2NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKyAgICAnXHhjMycgICAgICAjICAweDY2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgICdceGM1JyAgICAgICMgIDB4NjcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAnXHhjNycgICAgICAjICAweDY4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgJ1x4ZDEnICAgICAgIyAgMHg2OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAnXHhmNicgICAgICAjICAweDZBIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgJywnICAgICAgICAgIyAgMHg2QiAtPiBDT01NQQorICAgICclJyAgICAgICAgICMgIDB4NkMgLT4gUEVSQ0VOVCBTSUdOCisgICAgJ18nICAgICAgICAgIyAgMHg2RCAtPiBMT1cgTElORQorICAgICc+JyAgICAgICAgICMgIDB4NkUgLT4gR1JFQVRFUi1USEFOIFNJR04KKyAgICAnPycgICAgICAgICAjICAweDZGIC0+IFFVRVNUSU9OIE1BUksKKyAgICAnXHhmOCcgICAgICAjICAweDcwIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgJ1x4YzknICAgICAgIyAgMHg3MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAnXHhjYScgICAgICAjICAweDcyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4Y2InICAgICAgIyAgMHg3MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgJ1x4YzgnICAgICAgIyAgMHg3NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAnXHhjZCcgICAgICAjICAweDc1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgICdceGNlJyAgICAgICMgIDB4NzYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhjZicgICAgICAjICAweDc3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhjYycgICAgICAjICAweDc4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgICdgJyAgICAgICAgICMgIDB4NzkgLT4gR1JBVkUgQUNDRU5UCisgICAgJzonICAgICAgICAgIyAgMHg3QSAtPiBDT0xPTgorICAgICcjJyAgICAgICAgICMgIDB4N0IgLT4gTlVNQkVSIFNJR04KKyAgICAnXHhhNycgICAgICAjICAweDdDIC0+IFNFQ1RJT04gU0lHTgorICAgICInIiAgICAgICAgICMgIDB4N0QgLT4gQVBPU1RST1BIRQorICAgICc9JyAgICAgICAgICMgIDB4N0UgLT4gRVFVQUxTIFNJR04KKyAgICAnIicgICAgICAgICAjICAweDdGIC0+IFFVT1RBVElPTiBNQVJLCisgICAgJ1x4ZDgnICAgICAgIyAgMHg4MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgJ2EnICAgICAgICAgIyAgMHg4MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQQorICAgICdiJyAgICAgICAgICMgIDB4ODIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICAnYycgICAgICAgICAjICAweDgzIC0+IExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgJ2QnICAgICAgICAgIyAgMHg4NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRAorICAgICdlJyAgICAgICAgICMgIDB4ODUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICAnZicgICAgICAgICAjICAweDg2IC0+IExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgJ2cnICAgICAgICAgIyAgMHg4NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRworICAgICdoJyAgICAgICAgICMgIDB4ODggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICAnaScgICAgICAgICAjICAweDg5IC0+IExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgJ1x4YWInICAgICAgIyAgMHg4QSAtPiBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgICdceGJiJyAgICAgICMgIDB4OEIgLT4gUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x4ZjAnICAgICAgIyAgMHg4QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisgICAgJ1x4ZmQnICAgICAgIyAgMHg4RCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgJ1x4ZmUnICAgICAgIyAgMHg4RSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKyAgICAnXHhiMScgICAgICAjICAweDhGIC0+IFBMVVMtTUlOVVMgU0lHTgorICAgICdceGIwJyAgICAgICMgIDB4OTAgLT4gREVHUkVFIFNJR04KKyAgICAnaicgICAgICAgICAjICAweDkxIC0+IExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgJ2snICAgICAgICAgIyAgMHg5MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgICdsJyAgICAgICAgICMgIDB4OTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAnbScgICAgICAgICAjICAweDk0IC0+IExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgJ24nICAgICAgICAgIyAgMHg5NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgICdvJyAgICAgICAgICMgIDB4OTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAncCcgICAgICAgICAjICAweDk3IC0+IExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgJ3EnICAgICAgICAgIyAgMHg5OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgICdyJyAgICAgICAgICMgIDB4OTkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAnXHhhYScgICAgICAjICAweDlBIC0+IEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgJ1x4YmEnICAgICAgIyAgMHg5QiAtPiBNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyAgICAnXHhlNicgICAgICAjICAweDlDIC0+IExBVElOIFNNQUxMIExFVFRFUiBBRQorICAgICdceGI4JyAgICAgICMgIDB4OUQgLT4gQ0VESUxMQQorICAgICdceGM2JyAgICAgICMgIDB4OUUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUKKyAgICAnXHhhNCcgICAgICAjICAweDlGIC0+IENVUlJFTkNZIFNJR04KKyAgICAnXHhiNScgICAgICAjICAweEEwIC0+IE1JQ1JPIFNJR04KKyAgICAnXHhkZicgICAgICAjICAweEExIC0+IExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTIChHZXJtYW4pCisgICAgJ3MnICAgICAgICAgIyAgMHhBMiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUworICAgICd0JyAgICAgICAgICMgIDB4QTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICAndScgICAgICAgICAjICAweEE0IC0+IExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgJ3YnICAgICAgICAgIyAgMHhBNSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVgorICAgICd3JyAgICAgICAgICMgIDB4QTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICAneCcgICAgICAgICAjICAweEE3IC0+IExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgJ3knICAgICAgICAgIyAgMHhBOCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWQorICAgICd6JyAgICAgICAgICMgIDB4QTkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICAnXHhhMScgICAgICAjICAweEFBIC0+IElOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnXHhiZicgICAgICAjICAweEFCIC0+IElOVkVSVEVEIFFVRVNUSU9OIE1BUksKKyAgICAnXHhkMCcgICAgICAjICAweEFDIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQorICAgICdceGRkJyAgICAgICMgIDB4QUQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgJ1x4ZGUnICAgICAgIyAgMHhBRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorICAgICdceGFlJyAgICAgICMgIDB4QUYgLT4gUkVHSVNURVJFRCBTSUdOCisgICAgJ1x4YTInICAgICAgIyAgMHhCMCAtPiBDRU5UIFNJR04KKyAgICAnXHhhMycgICAgICAjICAweEIxIC0+IFBPVU5EIFNJR04KKyAgICAnXHhhNScgICAgICAjICAweEIyIC0+IFlFTiBTSUdOCisgICAgJ1x4YjcnICAgICAgIyAgMHhCMyAtPiBNSURETEUgRE9UCisgICAgJ1x4YTknICAgICAgIyAgMHhCNCAtPiBDT1BZUklHSFQgU0lHTgorICAgICdAJyAgICAgICAgICMgIDB4QjUgLT4gQ09NTUVSQ0lBTCBBVAorICAgICdceGI2JyAgICAgICMgIDB4QjYgLT4gUElMQ1JPVyBTSUdOCisgICAgJ1x4YmMnICAgICAgIyAgMHhCNyAtPiBWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKyAgICAnXHhiZCcgICAgICAjICAweEI4IC0+IFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRgorICAgICdceGJlJyAgICAgICMgIDB4QjkgLT4gVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisgICAgJ1x4YWMnICAgICAgIyAgMHhCQSAtPiBOT1QgU0lHTgorICAgICd8JyAgICAgICAgICMgIDB4QkIgLT4gVkVSVElDQUwgTElORQorICAgICdcdTIwM2UnICAgICMgIDB4QkMgLT4gT1ZFUkxJTkUKKyAgICAnXHhhOCcgICAgICAjICAweEJEIC0+IERJQUVSRVNJUworICAgICdceGI0JyAgICAgICMgIDB4QkUgLT4gQUNVVEUgQUNDRU5UCisgICAgJ1x4ZDcnICAgICAgIyAgMHhCRiAtPiBNVUxUSVBMSUNBVElPTiBTSUdOCisgICAgJ1x4ZTQnICAgICAgIyAgMHhDMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgICdBJyAgICAgICAgICMgIDB4QzEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgICdCJyAgICAgICAgICMgIDB4QzIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgICdDJyAgICAgICAgICMgIDB4QzMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgICdEJyAgICAgICAgICMgIDB4QzQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgICdFJyAgICAgICAgICMgIDB4QzUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgICdGJyAgICAgICAgICMgIDB4QzYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgICdHJyAgICAgICAgICMgIDB4QzcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgICdIJyAgICAgICAgICMgIDB4QzggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgICdJJyAgICAgICAgICMgIDB4QzkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgICdceGFkJyAgICAgICMgIDB4Q0EgLT4gU09GVCBIWVBIRU4KKyAgICAnXHhmNCcgICAgICAjICAweENCIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGE2JyAgICAgICMgIDB4Q0MgLT4gQlJPS0VOIEJBUgorICAgICdceGYyJyAgICAgICMgIDB4Q0QgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgICdceGYzJyAgICAgICMgIDB4Q0UgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgICdceGY1JyAgICAgICMgIDB4Q0YgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgICdceGZjJyAgICAgICMgIDB4RDAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAnSicgICAgICAgICAjICAweEQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAnSycgICAgICAgICAjICAweEQyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICAnTCcgICAgICAgICAjICAweEQzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEwKKyAgICAnTScgICAgICAgICAjICAweEQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICAnTicgICAgICAgICAjICAweEQ1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICAnTycgICAgICAgICAjICAweEQ2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8KKyAgICAnUCcgICAgICAgICAjICAweEQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICAnUScgICAgICAgICAjICAweEQ4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICAnUicgICAgICAgICAjICAweEQ5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFIKKyAgICAnXHhiOScgICAgICAjICAweERBIC0+IFNVUEVSU0NSSVBUIE9ORQorICAgICdceGZiJyAgICAgICMgIDB4REIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ30nICAgICAgICAgIyAgMHhEQyAtPiBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgJ1x4ZjknICAgICAgIyAgMHhERCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgJ1x4ZmEnICAgICAgIyAgMHhERSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgJ1x4ZmYnICAgICAgIyAgMHhERiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworICAgICdceGQ2JyAgICAgICMgIDB4RTAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgICdceGY3JyAgICAgICMgIDB4RTEgLT4gRElWSVNJT04gU0lHTgorICAgICdTJyAgICAgICAgICMgIDB4RTIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgICdUJyAgICAgICAgICMgIDB4RTMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgICdVJyAgICAgICAgICMgIDB4RTQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgICdWJyAgICAgICAgICMgIDB4RTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgICdXJyAgICAgICAgICMgIDB4RTYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgICdYJyAgICAgICAgICMgIDB4RTcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgICdZJyAgICAgICAgICMgIDB4RTggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgICdaJyAgICAgICAgICMgIDB4RTkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgICdceGIyJyAgICAgICMgIDB4RUEgLT4gU1VQRVJTQ1JJUFQgVFdPCisgICAgJ1x4ZDQnICAgICAgIyAgMHhFQiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgICdcXCcgICAgICAgICMgIDB4RUMgLT4gUkVWRVJTRSBTT0xJRFVTCisgICAgJ1x4ZDInICAgICAgIyAgMHhFRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAnXHhkMycgICAgICAjICAweEVFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgICdceGQ1JyAgICAgICMgIDB4RUYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgJzAnICAgICAgICAgIyAgMHhGMCAtPiBESUdJVCBaRVJPCisgICAgJzEnICAgICAgICAgIyAgMHhGMSAtPiBESUdJVCBPTkUKKyAgICAnMicgICAgICAgICAjICAweEYyIC0+IERJR0lUIFRXTworICAgICczJyAgICAgICAgICMgIDB4RjMgLT4gRElHSVQgVEhSRUUKKyAgICAnNCcgICAgICAgICAjICAweEY0IC0+IERJR0lUIEZPVVIKKyAgICAnNScgICAgICAgICAjICAweEY1IC0+IERJR0lUIEZJVkUKKyAgICAnNicgICAgICAgICAjICAweEY2IC0+IERJR0lUIFNJWAorICAgICc3JyAgICAgICAgICMgIDB4RjcgLT4gRElHSVQgU0VWRU4KKyAgICAnOCcgICAgICAgICAjICAweEY4IC0+IERJR0lUIEVJR0hUCisgICAgJzknICAgICAgICAgIyAgMHhGOSAtPiBESUdJVCBOSU5FCisgICAgJ1x4YjMnICAgICAgIyAgMHhGQSAtPiBTVVBFUlNDUklQVCBUSFJFRQorICAgICdceGRiJyAgICAgICMgIDB4RkIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXScgICAgICAgICAjICAweEZDIC0+IFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1x4ZDknICAgICAgIyAgMHhGRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAnXHhkYScgICAgICAjICAweEZFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgICdceDlmJyAgICAgICMgIDB4RkYgLT4gQVBQTElDQVRJT04gUFJPR1JBTSBDT01NQU5EIChBUEMpCispCisKKyMjIyBFbmNvZGluZyB0YWJsZQorZW5jb2RpbmdfdGFibGU9Y29kZWNzLmNoYXJtYXBfYnVpbGQoZGVjb2RpbmdfdGFibGUpCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5IGIvTGliL2VuY29kaW5ncy9jcDUwMC5weQppbmRleCBhOTc1YmU3Li41ZjYxNTM1IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGQ5JyAgICAgIyAgMHhGRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKICAgICAnXHhkYScgICAgICMgIDB4RkUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCiAgICAgJ1x4OWYnICAgICAjICAweEZGIC0+IENPTlRST0wKLSAgICAnXHVmZmZlJyAgICMjIFdpZGVuIHRvIFVDUzIgZm9yIG9wdGltaXphdGlvbgogKQogCiAjIyMgRW5jb2RpbmcgdGFibGUKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy9oZXhfY29kZWMucHkKaW5kZXggZTAwM2ZjMy4uZjJlZDBhNyAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9oZXhfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy9oZXhfY29kZWMucHkKQEAgLTUyLDQgKzUyLDUgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkgYi9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weQppbmRleCBkOWNjNTE2Li44Y2ZjMDFmIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weQorKysgYi9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weQpAQCAtMzAxLDcgKzMwMSw2IEBACiAgICAgJ1x4ZmQnICAgICAjICAweEZEIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKICAgICAnXHhmZScgICAgICMgIDB4RkUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCiAgICAgJ1x4ZmYnICAgICAjICAweEZGIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5CmluZGV4IDkyNDNmYzQuLjcwZjcwODMgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5CkBAIC01Myw0ICs1Myw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5IGIvTGliL2VuY29kaW5ncy9yb3RfMTMucHkKaW5kZXggMzE0MGMxNC4uZmZmOTE1MyAxMDA3NTUKLS0tIGEvTGliL2VuY29kaW5ncy9yb3RfMTMucHkKKysrIGIvTGliL2VuY29kaW5ncy9yb3RfMTMucHkKQEAgLTQzLDYgKzQzLDcgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQogCiAjIyMgTWFwCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weQppbmRleCA2OWM2ZjE3Li5lMzI2OWU0IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKQEAgLTk2LDQgKzk2LDUgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5CmluZGV4IGUwYjljZGEuLjRjODFjYTEgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3psaWJfY29kZWMucHkKQEAgLTc0LDQgKzc0LDUgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2Vuc3VyZXBpcC9fX2luaXRfXy5weSBiL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkYWNkYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkKQEAgLTAsMCArMSw5MiBAQAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHBrZ3V0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCisjIFRPRE86IFJlbW92ZSB0aGUgLS1wcmUgZmxhZyB3aGVuIGEgcGlwIDEuNSBmaW5hbCBjb3B5IGlzIGF2YWlsYWJsZQorCisKK19fYWxsX18gPSBbInZlcnNpb24iLCAiYm9vdHN0cmFwIl0KKworCitfU0VUVVBUT09MU19WRVJTSU9OID0gIjEuMy4yIgorCitfUElQX1ZFUlNJT04gPSAiMS41LnJjMSIKKworX1BST0pFQ1RTID0gWworICAgICgic2V0dXB0b29scyIsIF9TRVRVUFRPT0xTX1ZFUlNJT04pLAorICAgICgicGlwIiwgX1BJUF9WRVJTSU9OKSwKK10KKworCitkZWYgX3J1bl9waXAoYXJncywgYWRkaXRpb25hbF9wYXRocyk6CisgICAgIyBBZGQgb3VyIGJ1bmRsZWQgc29mdHdhcmUgdG8gdGhlIHN5cy5wYXRoIHNvIHdlIGNhbiBpbXBvcnQgaXQKKyAgICBzeXMucGF0aCA9IGFkZGl0aW9uYWxfcGF0aHMgKyBzeXMucGF0aAorCisgICAgIyBJbnN0YWxsIHRoZSBidW5kbGVkIHNvZnR3YXJlCisgICAgaW1wb3J0IHBpcAorICAgIHBpcC5tYWluKGFyZ3MpCisKKworZGVmIHZlcnNpb24oKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGJ1bmRsZWQgdmVyc2lvbiBvZiBwaXAuCisgICAgIiIiCisgICAgcmV0dXJuIF9QSVBfVkVSU0lPTgorCisKK2RlZiBib290c3RyYXAoKiwgcm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLAorICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwKKyAgICAgICAgICAgICAgdmVyYm9zaXR5PTApOgorICAgICIiIgorICAgIEJvb3RzdHJhcCBwaXAgaW50byB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uIChvciB0aGUgZ2l2ZW4gcm9vdAorICAgIGRpcmVjdG9yeSkuCisgICAgIiIiCisgICAgaWYgYWx0aW5zdGFsbCBhbmQgZGVmYXVsdF9waXA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCB1c2UgYWx0aW5zdGFsbCBhbmQgZGVmYXVsdF9waXAgdG9nZXRoZXIiKQorCisgICAgIyBCeSBkZWZhdWx0LCBpbnN0YWxsaW5nIHBpcCBhbmQgc2V0dXB0b29scyBpbnN0YWxscyBhbGwgb2YgdGhlCisgICAgIyBmb2xsb3dpbmcgc2NyaXB0cyAoWC5ZID09IHJ1bm5pbmcgUHl0aG9uIHZlcnNpb24pOgorICAgICMKKyAgICAjICAgcGlwLCBwaXBYLCBwaXBYLlksIGVhc3lfaW5zdGFsbCwgZWFzeV9pbnN0YWxsLVguWQorICAgICMKKyAgICAjIHBpcCAxLjUrIGFsbG93cyBlbnN1cmVwaXAgdG8gcmVxdWVzdCB0aGF0IHNvbWUgb2YgdGhvc2UgYmUgbGVmdCBvdXQKKyAgICBpZiBhbHRpbnN0YWxsOgorICAgICAgICAjIG9taXQgcGlwLCBwaXBYIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJhbHRpbnN0YWxsIgorICAgIGVsaWYgbm90IGRlZmF1bHRfcGlwOgorICAgICAgICAjIG9taXQgcGlwIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJpbnN0YWxsIgorCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICMgUHV0IG91ciBidW5kbGVkIHdoZWVscyBpbnRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY29uc3RydWN0IHRoZQorICAgICAgICAjIGFkZGl0aW9uYWwgcGF0aHMgdGhhdCBuZWVkIGFkZGVkIHRvIHN5cy5wYXRoCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBbXQorICAgICAgICBmb3IgcHJvamVjdCwgdmVyc2lvbiBpbiBfUFJPSkVDVFM6CisgICAgICAgICAgICB3aGVlbF9uYW1lID0gInt9LXt9LXB5Mi5weTMtbm9uZS1hbnkud2hsIi5mb3JtYXQocHJvamVjdCwgdmVyc2lvbikKKyAgICAgICAgICAgIHdobCA9IHBrZ3V0aWwuZ2V0X2RhdGEoCisgICAgICAgICAgICAgICAgImVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgIl9idW5kbGVkL3t9Ii5mb3JtYXQod2hlZWxfbmFtZSksCisgICAgICAgICAgICApCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSksICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKHdobCkKKworICAgICAgICAgICAgYWRkaXRpb25hbF9wYXRocy5hcHBlbmQob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSkpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHBpcCBjb21tYW5kCisgICAgICAgIGFyZ3MgPSBbCisgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsIHRtcGRpciwKKyAgICAgICAgICAgICMgVGVtcG9yYXJ5IHVudGlsIHBpcCAxLjUgaXMgZmluYWwKKyAgICAgICAgICAgICItLXByZSIsCisgICAgICAgIF0KKyAgICAgICAgaWYgcm9vdDoKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXJvb3QiLCByb290XQorICAgICAgICBpZiB1cGdyYWRlOgorICAgICAgICAgICAgYXJncyArPSBbIi0tdXBncmFkZSJdCisgICAgICAgIGlmIHVzZXI6CisgICAgICAgICAgICBhcmdzICs9IFsiLS11c2VyIl0KKyAgICAgICAgaWYgdmVyYm9zaXR5OgorICAgICAgICAgICAgYXJncyArPSBbIi0iICsgInYiICogdmVyYm9zaXR5XQorCisgICAgICAgIF9ydW5fcGlwKGFyZ3MgKyBbcFswXSBmb3IgcCBpbiBfUFJPSkVDVFNdLCBhZGRpdGlvbmFsX3BhdGhzKQpkaWZmIC0tZ2l0IGEvTGliL2Vuc3VyZXBpcC9fX21haW5fXy5weSBiL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlODQ1OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkKQEAgLTAsMCArMSw2NiBAQAoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZW5zdXJlcGlwCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSJweXRob24gLW0gZW5zdXJlcGlwIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS12ZXJzaW9uIiwKKyAgICAgICAgYWN0aW9uPSJ2ZXJzaW9uIiwKKyAgICAgICAgdmVyc2lvbj0icGlwIHt9Ii5mb3JtYXQoZW5zdXJlcGlwLnZlcnNpb24oKSksCisgICAgICAgIGhlbHA9IlNob3cgdGhlIHZlcnNpb24gb2YgcGlwIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgUHl0aG9uLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItdiIsICItLXZlcmJvc2UiLAorICAgICAgICBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgZGVmYXVsdD0wLAorICAgICAgICBkZXN0PSJ2ZXJib3NpdHkiLAorICAgICAgICBoZWxwPSgiR2l2ZSBtb3JlIG91dHB1dC4gT3B0aW9uIGlzIGFkZGl0aXZlLCBhbmQgY2FuIGJlIHVzZWQgdXAgdG8gMyAiCisgICAgICAgICAgICAgICJ0aW1lcy4iKSwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi1VIiwgIi0tdXBncmFkZSIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9IlVwZ3JhZGUgcGlwIGFuZCBkZXBlbmRlbmNpZXMsIGV2ZW4gaWYgYWxyZWFkeSBpbnN0YWxsZWQuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdXNlciIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9Ikluc3RhbGwgdXNpbmcgdGhlIHVzZXIgc2NoZW1lLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXJvb3QiLAorICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9Ikluc3RhbGwgZXZlcnl0aGluZyByZWxhdGl2ZSB0byB0aGlzIGFsdGVybmF0ZSByb290IGRpcmVjdG9yeS4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1hbHRpbnN0YWxsIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oIk1ha2UgYW4gYWx0ZXJuYXRlIGluc3RhbGwsIGluc3RhbGxpbmcgb25seSB0aGUgWC5ZIHZlcnNpb25lZCIKKyAgICAgICAgICAgICAgInNjcmlwdHMgKERlZmF1bHQ6IHBpcFgsIHBpcFguWSwgZWFzeV9pbnN0YWxsLVguWSkiKSwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tZGVmYXVsdC1waXAiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgiTWFrZSBhIGRlZmF1bHQgcGlwIGluc3RhbGwsIGluc3RhbGxpbmcgdGhlIHVucXVhbGlmaWVkIHBpcCAiCisgICAgICAgICAgICAgICJhbmQgZWFzeV9pbnN0YWxsIGluIGFkZGl0aW9uIHRvIHRoZSB2ZXJzaW9uZWQgc2NyaXB0cyIpLAorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKAorICAgICAgICByb290PWFyZ3Mucm9vdCwKKyAgICAgICAgdXBncmFkZT1hcmdzLnVwZ3JhZGUsCisgICAgICAgIHVzZXI9YXJncy51c2VyLAorICAgICAgICB2ZXJib3NpdHk9YXJncy52ZXJib3NpdHksCisgICAgICAgIGFsdGluc3RhbGw9YXJncy5hbHRpbnN0YWxsLAorICAgICAgICBkZWZhdWx0X3BpcD1hcmdzLmRlZmF1bHRfcGlwLAorICAgICkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9waXAtMS41LnJjMS1weTIucHkzLW5vbmUtYW55LndobCBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNS5yYzEtcHkyLnB5My1ub25lLWFueS53aGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxODg5NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNS5yYzEtcHkyLnB5My1ub25lLWFueS53aGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9zZXR1cHRvb2xzLTEuMy4yLXB5Mi5weTMtbm9uZS1hbnkud2hsIGIvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9zZXR1cHRvb2xzLTEuMy4yLXB5Mi5weTMtbm9uZS1hbnkud2hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTYyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMS4zLjItcHkyLnB5My1ub25lLWFueS53aGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL2VudW0ucHkgYi9MaWIvZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDU4ZjhkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VudW0ucHkKQEAgLTAsMCArMSw1MDQgQEAKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIHR5cGVzIGltcG9ydCBNYXBwaW5nUHJveHlUeXBlLCBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKworX19hbGxfXyA9IFsnRW51bScsICdJbnRFbnVtJywgJ3VuaXF1ZSddCisKKworZGVmIF9pc19kZXNjcmlwdG9yKG9iaik6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIG9iaiBpcyBhIGRlc2NyaXB0b3IsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICByZXR1cm4gKAorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX2dldF9fJykgb3IKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19zZXRfXycpIG9yCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fZGVsZXRlX18nKSkKKworCitkZWYgX2lzX2R1bmRlcihuYW1lKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWYgYSBfX2R1bmRlcl9fIG5hbWUsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICByZXR1cm4gKG5hbWVbOjJdID09IG5hbWVbLTI6XSA9PSAnX18nIGFuZAorICAgICAgICAgICAgbmFtZVsyOjNdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbLTM6LTJdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIGxlbihuYW1lKSA+IDQpCisKKworZGVmIF9pc19zdW5kZXIobmFtZSk6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIGEgX3N1bmRlcl8gbmFtZSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgIHJldHVybiAobmFtZVswXSA9PSBuYW1lWy0xXSA9PSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWzE6Ml0gIT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVstMjotMV0gIT0gJ18nIGFuZAorICAgICAgICAgICAgbGVuKG5hbWUpID4gMikKKworCitkZWYgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoY2xzKToKKyAgICAiIiJNYWtlIHRoZSBnaXZlbiBjbGFzcyB1bi1waWNrbGFibGUuIiIiCisgICAgZGVmIF9icmVha19vbl9jYWxsX3JlZHVjZShzZWxmKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclciBjYW5ub3QgYmUgcGlja2xlZCcgJSBzZWxmKQorICAgIGNscy5fX3JlZHVjZV9fID0gX2JyZWFrX29uX2NhbGxfcmVkdWNlCisgICAgY2xzLl9fbW9kdWxlX18gPSAnPHVua25vd24+JworCisKK2NsYXNzIF9FbnVtRGljdChkaWN0KToKKyAgICAiIiJUcmFjayBlbnVtIG1lbWJlciBvcmRlciBhbmQgZW5zdXJlIG1lbWJlciBuYW1lcyBhcmUgbm90IHJldXNlZC4KKworICAgIEVudW1NZXRhIHdpbGwgdXNlIHRoZSBuYW1lcyBmb3VuZCBpbiBzZWxmLl9tZW1iZXJfbmFtZXMgYXMgdGhlCisgICAgZW51bWVyYXRpb24gbWVtYmVyIG5hbWVzLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fbWVtYmVyX25hbWVzID0gW10KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiQ2hhbmdlcyBhbnl0aGluZyBub3QgZHVuZGVyZWQgb3Igbm90IGEgZGVzY3JpcHRvci4KKworICAgICAgICBJZiBhbiBlbnVtIG1lbWJlciBuYW1lIGlzIHVzZWQgdHdpY2UsIGFuIGVycm9yIGlzIHJhaXNlZDsgZHVwbGljYXRlCisgICAgICAgIHZhbHVlcyBhcmUgbm90IGNoZWNrZWQgZm9yLgorCisgICAgICAgIFNpbmdsZSB1bmRlcnNjb3JlIChzdW5kZXIpIG5hbWVzIGFyZSByZXNlcnZlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX3N1bmRlcihrZXkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignX25hbWVzXyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBFbnVtIHVzZScpCisgICAgICAgIGVsaWYgX2lzX2R1bmRlcihrZXkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIGtleSBpbiBzZWxmLl9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICAjIGRlc2NyaXB0b3Igb3ZlcndyaXRpbmcgYW4gZW51bT8KKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQXR0ZW1wdGVkIHRvIHJldXNlIGtleTogJXInICUga2V5KQorICAgICAgICBlbGlmIG5vdCBfaXNfZGVzY3JpcHRvcih2YWx1ZSk6CisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICAjIGVudW0gb3ZlcndyaXRpbmcgYSBkZXNjcmlwdG9yPworICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignS2V5IGFscmVhZHkgZGVmaW5lZCBhczogJXInICUgc2VsZltrZXldKQorICAgICAgICAgICAgc2VsZi5fbWVtYmVyX25hbWVzLmFwcGVuZChrZXkpCisgICAgICAgIHN1cGVyKCkuX19zZXRpdGVtX18oa2V5LCB2YWx1ZSkKKworCisKKyMgRHVtbXkgdmFsdWUgZm9yIEVudW0gYXMgRW51bU1ldGEgZXhwbGljaXRseSBjaGVja3MgZm9yIGl0LCBidXQgb2YgY291cnNlCisjIHVudGlsIEVudW1NZXRhIGZpbmlzaGVzIHJ1bm5pbmcgdGhlIGZpcnN0IHRpbWUgdGhlIEVudW0gY2xhc3MgZG9lc24ndCBleGlzdC4KKyMgVGhpcyBpcyBhbHNvIHdoeSB0aGVyZSBhcmUgY2hlY2tzIGluIEVudW1NZXRhIGxpa2UgYGlmIEVudW0gaXMgbm90IE5vbmVgCitFbnVtID0gTm9uZQorCisKK2NsYXNzIEVudW1NZXRhKHR5cGUpOgorICAgICIiIk1ldGFjbGFzcyBmb3IgRW51bSIiIgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBjbHMsIGJhc2VzKToKKyAgICAgICAgcmV0dXJuIF9FbnVtRGljdCgpCisKKyAgICBkZWYgX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICAjIGFuIEVudW0gY2xhc3MgaXMgZmluYWwgb25jZSBlbnVtZXJhdGlvbiBpdGVtcyBoYXZlIGJlZW4gZGVmaW5lZDsgaXQKKyAgICAgICAgIyBjYW5ub3QgYmUgbWl4ZWQgd2l0aCBvdGhlciB0eXBlcyAoaW50LCBmbG9hdCwgZXRjLikgaWYgaXQgaGFzIGFuCisgICAgICAgICMgaW5oZXJpdGVkIF9fbmV3X18gdW5sZXNzIGEgbmV3IF9fbmV3X18gaXMgZGVmaW5lZCAob3IgdGhlIHJlc3VsdGluZworICAgICAgICAjIGNsYXNzIHdpbGwgZmFpbCkuCisgICAgICAgIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtID0gbWV0YWNscy5fZ2V0X21peGluc18oYmFzZXMpCisgICAgICAgIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncyA9IG1ldGFjbHMuX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtKQorCisgICAgICAgICMgc2F2ZSBlbnVtIGl0ZW1zIGludG8gc2VwYXJhdGUgbWFwcGluZyBzbyB0aGV5IGRvbid0IGdldCBiYWtlZCBpbnRvCisgICAgICAgICMgdGhlIG5ldyBjbGFzcworICAgICAgICBtZW1iZXJzID0ge2s6IGNsYXNzZGljdFtrXSBmb3IgayBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lc30KKyAgICAgICAgZm9yIG5hbWUgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICBkZWwgY2xhc3NkaWN0W25hbWVdCisKKyAgICAgICAgIyBjaGVjayBmb3IgaWxsZWdhbCBlbnVtIG5hbWVzIChhbnkgb3RoZXJzPykKKyAgICAgICAgaW52YWxpZF9uYW1lcyA9IHNldChtZW1iZXJzKSAmIHsnbXJvJywgfQorICAgICAgICBpZiBpbnZhbGlkX25hbWVzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBlbnVtIG1lbWJlciBuYW1lOiB7MH0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAnLCcuam9pbihpbnZhbGlkX25hbWVzKSkpCisKKyAgICAgICAgIyBjcmVhdGUgb3VyIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgZW51bV9jbGFzcyA9IHN1cGVyKCkuX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpCisgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18gPSBbXSAgICAgICAgICAgICAgICMgbmFtZXMgaW4gZGVmaW5pdGlvbiBvcmRlcgorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXyA9IE9yZGVyZWREaWN0KCkgICAgICAjIG5hbWUtPnZhbHVlIG1hcAorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfdHlwZV8gPSBtZW1iZXJfdHlwZQorCisgICAgICAgICMgUmV2ZXJzZSB2YWx1ZS0+bmFtZSBtYXAgZm9yIGhhc2hhYmxlIHZhbHVlcy4KKyAgICAgICAgZW51bV9jbGFzcy5fdmFsdWUybWVtYmVyX21hcF8gPSB7fQorCisgICAgICAgICMgY2hlY2sgZm9yIGEgX19nZXRuZXdhcmdzX18sIGFuZCBpZiBub3QgcHJlc2VudCBzYWJvdGFnZQorICAgICAgICAjIHBpY2tsaW5nLCBzaW5jZSBpdCB3b24ndCB3b3JrIGFueXdheQorICAgICAgICBpZiAobWVtYmVyX3R5cGUgaXMgbm90IG9iamVjdCBhbmQKKyAgICAgICAgICAgIG1lbWJlcl90eXBlLl9fZGljdF9fLmdldCgnX19nZXRuZXdhcmdzX18nKSBpcyBOb25lCisgICAgICAgICAgICApOgorICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKworICAgICAgICAjIGluc3RhbnRpYXRlIHRoZW0sIGNoZWNraW5nIGZvciBkdXBsaWNhdGVzIGFzIHdlIGdvCisgICAgICAgICMgd2UgaW5zdGFudGlhdGUgZmlyc3QgaW5zdGVhZCBvZiBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBmaXJzdCBpbiBjYXNlCisgICAgICAgICMgYSBjdXN0b20gX19uZXdfXyBpcyBkb2luZyBzb21ldGhpbmcgZnVua3kgd2l0aCB0aGUgdmFsdWVzIC0tIHN1Y2ggYXMKKyAgICAgICAgIyBhdXRvLW51bWJlcmluZyA7KQorICAgICAgICBmb3IgbWVtYmVyX25hbWUgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICB2YWx1ZSA9IG1lbWJlcnNbbWVtYmVyX25hbWVdCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpOgorICAgICAgICAgICAgICAgIGFyZ3MgPSAodmFsdWUsICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXJncyA9IHZhbHVlCisgICAgICAgICAgICBpZiBtZW1iZXJfdHlwZSBpcyB0dXBsZTogICAjIHNwZWNpYWwgY2FzZSBmb3IgdHVwbGUgZW51bXMKKyAgICAgICAgICAgICAgICBhcmdzID0gKGFyZ3MsICkgICAgICMgd3JhcCBpdCBvbmUgbW9yZSB0aW1lCisgICAgICAgICAgICBpZiBub3QgdXNlX2FyZ3M6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MpCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZW51bV9tZW1iZXIsICdfdmFsdWVfJyk6CisgICAgICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnVtX21lbWJlciA9IF9fbmV3X18oZW51bV9jbGFzcywgKmFyZ3MpCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZW51bV9tZW1iZXIsICdfdmFsdWVfJyk6CisgICAgICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyLl92YWx1ZV8gPSBtZW1iZXJfdHlwZSgqYXJncykKKyAgICAgICAgICAgIHZhbHVlID0gZW51bV9tZW1iZXIuX3ZhbHVlXworICAgICAgICAgICAgZW51bV9tZW1iZXIuX25hbWVfID0gbWVtYmVyX25hbWUKKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9fb2JqY2xhc3NfXyA9IGVudW1fY2xhc3MKKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9faW5pdF9fKCphcmdzKQorICAgICAgICAgICAgIyBJZiBhbm90aGVyIG1lbWJlciB3aXRoIHRoZSBzYW1lIHZhbHVlIHdhcyBhbHJlYWR5IGRlZmluZWQsIHRoZQorICAgICAgICAgICAgIyBuZXcgbWVtYmVyIGJlY29tZXMgYW4gYWxpYXMgdG8gdGhlIGV4aXN0aW5nIG9uZS4KKyAgICAgICAgICAgIGZvciBuYW1lLCBjYW5vbmljYWxfbWVtYmVyIGluIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgY2Fub25pY2FsX21lbWJlci52YWx1ZSA9PSBlbnVtX21lbWJlci5fdmFsdWVfOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlciA9IGNhbm9uaWNhbF9tZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBbGlhc2VzIGRvbid0IGFwcGVhciBpbiBtZW1iZXIgbmFtZXMgKG9ubHkgaW4gX19tZW1iZXJzX18pLgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18uYXBwZW5kKG1lbWJlcl9uYW1lKQorICAgICAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX21hcF9bbWVtYmVyX25hbWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IGZhaWwgaWYgdmFsdWUgaXMgbm90IGhhc2hhYmxlLiBXZSBjYW4ndCBhZGQgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgIyB0byB0aGUgbWFwLCBhbmQgYnktdmFsdWUgbG9va3VwcyBmb3IgdGhpcyB2YWx1ZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgIyBsaW5lYXIuCisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fdmFsdWUybWVtYmVyX21hcF9bdmFsdWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgcmVwciBhbmQgZnJpZW5kcyBhcmUgbm90IHRoZSBtaXhpbidzIG9yIHZhcmlvdXMKKyAgICAgICAgIyB0aGluZ3MgYnJlYWsgKHN1Y2ggYXMgcGlja2xlKQorICAgICAgICBmb3IgbmFtZSBpbiAoJ19fcmVwcl9fJywgJ19fc3RyX18nLCAnX19mb3JtYXRfXycsICdfX2dldG5ld2FyZ3NfXycpOgorICAgICAgICAgICAgY2xhc3NfbWV0aG9kID0gZ2V0YXR0cihlbnVtX2NsYXNzLCBuYW1lKQorICAgICAgICAgICAgb2JqX21ldGhvZCA9IGdldGF0dHIobWVtYmVyX3R5cGUsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBlbnVtX21ldGhvZCA9IGdldGF0dHIoZmlyc3RfZW51bSwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG9ial9tZXRob2QgaXMgbm90IE5vbmUgYW5kIG9ial9tZXRob2QgaXMgY2xhc3NfbWV0aG9kOgorICAgICAgICAgICAgICAgIHNldGF0dHIoZW51bV9jbGFzcywgbmFtZSwgZW51bV9tZXRob2QpCisKKyAgICAgICAgIyByZXBsYWNlIGFueSBvdGhlciBfX25ld19fIHdpdGggb3VyIG93biAoYXMgbG9uZyBhcyBFbnVtIGlzIG5vdCBOb25lLAorICAgICAgICAjIGFueXdheSkgLS0gYWdhaW4sIHRoaXMgaXMgdG8gc3VwcG9ydCBwaWNrbGUKKyAgICAgICAgaWYgRW51bSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgaWYgdGhlIHVzZXIgZGVmaW5lZCB0aGVpciBvd24gX19uZXdfXywgc2F2ZSBpdCBiZWZvcmUgaXQgZ2V0cworICAgICAgICAgICAgIyBjbG9iYmVyZWQgaW4gY2FzZSB0aGV5IHN1YmNsYXNzIGxhdGVyCisgICAgICAgICAgICBpZiBzYXZlX25ldzoKKyAgICAgICAgICAgICAgICBlbnVtX2NsYXNzLl9fbmV3X21lbWJlcl9fID0gX19uZXdfXworICAgICAgICAgICAgZW51bV9jbGFzcy5fX25ld19fID0gRW51bS5fX25ld19fCisgICAgICAgIHJldHVybiBlbnVtX2NsYXNzCisKKyAgICBkZWYgX19jYWxsX18oY2xzLCB2YWx1ZSwgbmFtZXM9Tm9uZSwgKiwgbW9kdWxlPU5vbmUsIHR5cGU9Tm9uZSk6CisgICAgICAgICIiIkVpdGhlciByZXR1cm5zIGFuIGV4aXN0aW5nIG1lbWJlciwgb3IgY3JlYXRlcyBhIG5ldyBlbnVtIGNsYXNzLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYm90aCB3aGVuIGFuIGVudW0gY2xhc3MgaXMgZ2l2ZW4gYSB2YWx1ZSB0byBtYXRjaAorICAgICAgICB0byBhbiBlbnVtZXJhdGlvbiBtZW1iZXIgKGkuZS4gQ29sb3IoMykpIGFuZCBmb3IgdGhlIGZ1bmN0aW9uYWwgQVBJCisgICAgICAgIChpLmUuIENvbG9yID0gRW51bSgnQ29sb3InLCBuYW1lcz0ncmVkIGdyZWVuIGJsdWUnKSkuCisKKyAgICAgICAgV2hlbiB1c2VkIGZvciB0aGUgZnVuY3Rpb25hbCBBUEk6IGBtb2R1bGVgLCBpZiBzZXQsIHdpbGwgYmUgc3RvcmVkIGluCisgICAgICAgIHRoZSBuZXcgY2xhc3MnIF9fbW9kdWxlX18gYXR0cmlidXRlOyBgdHlwZWAsIGlmIHNldCwgd2lsbCBiZSBtaXhlZCBpbgorICAgICAgICBhcyB0aGUgZmlyc3QgYmFzZSBjbGFzcy4KKworICAgICAgICBOb3RlOiBpZiBgbW9kdWxlYCBpcyBub3Qgc2V0IHRoaXMgcm91dGluZSB3aWxsIGF0dGVtcHQgdG8gZGlzY292ZXIgdGhlCisgICAgICAgIGNhbGxpbmcgbW9kdWxlIGJ5IHdhbGtpbmcgdGhlIGZyYW1lIHN0YWNrOyBpZiB0aGlzIGlzIHVuc3VjY2Vzc2Z1bAorICAgICAgICB0aGUgcmVzdWx0aW5nIGNsYXNzIHdpbGwgbm90IGJlIHBpY2tsZWFibGUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5hbWVzIGlzIE5vbmU6ICAjIHNpbXBsZSB2YWx1ZSBsb29rdXAKKyAgICAgICAgICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAjIG90aGVyd2lzZSwgZnVuY3Rpb25hbCBBUEk6IHdlJ3JlIGNyZWF0aW5nIGEgbmV3IEVudW0gdHlwZQorICAgICAgICByZXR1cm4gY2xzLl9jcmVhdGVfKHZhbHVlLCBuYW1lcywgbW9kdWxlPW1vZHVsZSwgdHlwZT10eXBlKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhjbHMsIG1lbWJlcik6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG1lbWJlciwgY2xzKSBhbmQgbWVtYmVyLm5hbWUgaW4gY2xzLl9tZW1iZXJfbWFwXworCisgICAgZGVmIF9fZGVsYXR0cl9fKGNscywgYXR0cik6CisgICAgICAgICMgbmljZXIgZXJyb3IgbWVzc2FnZSB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gZGVsZXRlIGFuIGF0dHJpYnV0ZQorICAgICAgICAjIChzZWUgaXNzdWUxOTAyNSkuCisgICAgICAgIGlmIGF0dHIgaW4gY2xzLl9tZW1iZXJfbWFwXzoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAiJXM6IGNhbm5vdCBkZWxldGUgRW51bSBtZW1iZXIuIiAlIGNscy5fX25hbWVfXykKKyAgICAgICAgc3VwZXIoKS5fX2RlbGF0dHJfXyhhdHRyKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJ10gKworICAgICAgICAgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lc18pCisKKyAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnVtIG1lbWJlciBtYXRjaGluZyBgbmFtZWAKKworICAgICAgICBXZSB1c2UgX19nZXRhdHRyX18gaW5zdGVhZCBvZiBkZXNjcmlwdG9ycyBvciBpbnNlcnRpbmcgaW50byB0aGUgZW51bQorICAgICAgICBjbGFzcycgX19kaWN0X18gaW4gb3JkZXIgdG8gc3VwcG9ydCBgbmFtZWAgYW5kIGB2YWx1ZWAgYmVpbmcgYm90aAorICAgICAgICBwcm9wZXJ0aWVzIGZvciBlbnVtIG1lbWJlcnMgKHdoaWNoIGxpdmUgaW4gdGhlIGNsYXNzJyBfX2RpY3RfXykgYW5kCisgICAgICAgIGVudW0gbWVtYmVycyB0aGVtc2VsdmVzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBfaXNfZHVuZGVyKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGNscy5fbWVtYmVyX21hcF9bbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkgZnJvbSBOb25lCisKKyAgICBkZWYgX19nZXRpdGVtX18oY2xzLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIGNscy5fbWVtYmVyX21hcF9bbmFtZV0KKworICAgIGRlZiBfX2l0ZXJfXyhjbHMpOgorICAgICAgICByZXR1cm4gKGNscy5fbWVtYmVyX21hcF9bbmFtZV0gZm9yIG5hbWUgaW4gY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fbGVuX18oY2xzKToKKyAgICAgICAgcmV0dXJuIGxlbihjbHMuX21lbWJlcl9uYW1lc18pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19tZW1iZXJzX18oY2xzKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUtPnZhbHVlLgorCisgICAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIE1hcHBpbmdQcm94eVR5cGUoY2xzLl9tZW1iZXJfbWFwXykKKworICAgIGRlZiBfX3JlcHJfXyhjbHMpOgorICAgICAgICByZXR1cm4gIjxlbnVtICVyPiIgJSBjbHMuX19uYW1lX18KKworICAgIGRlZiBfX3JldmVyc2VkX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIHJldmVyc2VkKGNscy5fbWVtYmVyX25hbWVzXykpCisKKyAgICBkZWYgX19zZXRhdHRyX18oY2xzLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIkJsb2NrIGF0dGVtcHRzIHRvIHJlYXNzaWduIEVudW0gbWVtYmVycy4KKworICAgICAgICBBIHNpbXBsZSBhc3NpZ25tZW50IHRvIHRoZSBjbGFzcyBuYW1lc3BhY2Ugb25seSBjaGFuZ2VzIG9uZSBvZiB0aGUKKyAgICAgICAgc2V2ZXJhbCBwb3NzaWJsZSB3YXlzIHRvIGdldCBhbiBFbnVtIG1lbWJlciBmcm9tIHRoZSBFbnVtIGNsYXNzLAorICAgICAgICByZXN1bHRpbmcgaW4gYW4gaW5jb25zaXN0ZW50IEVudW1lcmF0aW9uLgorCisgICAgICAgICIiIgorICAgICAgICBtZW1iZXJfbWFwID0gY2xzLl9fZGljdF9fLmdldCgnX21lbWJlcl9tYXBfJywge30pCisgICAgICAgIGlmIG5hbWUgaW4gbWVtYmVyX21hcDoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdDYW5ub3QgcmVhc3NpZ24gbWVtYmVycy4nKQorICAgICAgICBzdXBlcigpLl9fc2V0YXR0cl9fKG5hbWUsIHZhbHVlKQorCisgICAgZGVmIF9jcmVhdGVfKGNscywgY2xhc3NfbmFtZSwgbmFtZXM9Tm9uZSwgKiwgbW9kdWxlPU5vbmUsIHR5cGU9Tm9uZSk6CisgICAgICAgICIiIkNvbnZlbmllbmNlIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgRW51bSBjbGFzcy4KKworICAgICAgICBgbmFtZXNgIGNhbiBiZToKKworICAgICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgbWVtYmVyIG5hbWVzLCBzZXBhcmF0ZWQgZWl0aGVyIHdpdGggc3BhY2VzIG9yCisgICAgICAgICAgY29tbWFzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiBtZW1iZXIgbmFtZXMuICBWYWx1ZXMgYXJlIGF1dG8tbnVtYmVyZWQgZnJvbSAxLgorICAgICAgICAqIEFuIGl0ZXJhYmxlIG9mIChtZW1iZXIgbmFtZSwgdmFsdWUpIHBhaXJzLgorICAgICAgICAqIEEgbWFwcGluZyBvZiBtZW1iZXIgbmFtZSAtPiB2YWx1ZS4KKworICAgICAgICAiIiIKKyAgICAgICAgbWV0YWNscyA9IGNscy5fX2NsYXNzX18KKyAgICAgICAgYmFzZXMgPSAoY2xzLCApIGlmIHR5cGUgaXMgTm9uZSBlbHNlICh0eXBlLCBjbHMpCisgICAgICAgIGNsYXNzZGljdCA9IG1ldGFjbHMuX19wcmVwYXJlX18oY2xhc3NfbmFtZSwgYmFzZXMpCisKKyAgICAgICAgIyBzcGVjaWFsIHByb2Nlc3NpbmcgbmVlZGVkIGZvciBuYW1lcz8KKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgc3RyKToKKyAgICAgICAgICAgIG5hbWVzID0gbmFtZXMucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKQorICAgICAgICBpZiBpc2luc3RhbmNlKG5hbWVzLCAodHVwbGUsIGxpc3QpKSBhbmQgaXNpbnN0YW5jZShuYW1lc1swXSwgc3RyKToKKyAgICAgICAgICAgIG5hbWVzID0gWyhlLCBpKSBmb3IgKGksIGUpIGluIGVudW1lcmF0ZShuYW1lcywgMSldCisKKyAgICAgICAgIyBIZXJlLCBuYW1lcyBpcyBlaXRoZXIgYW4gaXRlcmFibGUgb2YgKG5hbWUsIHZhbHVlKSBvciBhIG1hcHBpbmcuCisgICAgICAgIGZvciBpdGVtIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBzdHIpOgorICAgICAgICAgICAgICAgIG1lbWJlcl9uYW1lLCBtZW1iZXJfdmFsdWUgPSBpdGVtLCBuYW1lc1tpdGVtXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbQorICAgICAgICAgICAgY2xhc3NkaWN0W21lbWJlcl9uYW1lXSA9IG1lbWJlcl92YWx1ZQorICAgICAgICBlbnVtX2NsYXNzID0gbWV0YWNscy5fX25ld19fKG1ldGFjbHMsIGNsYXNzX25hbWUsIGJhc2VzLCBjbGFzc2RpY3QpCisKKyAgICAgICAgIyBUT0RPOiByZXBsYWNlIHRoZSBmcmFtZSBoYWNrIGlmIGEgYmxlc3NlZCB3YXkgdG8ga25vdyB0aGUgY2FsbGluZworICAgICAgICAjIG1vZHVsZSBpcyBldmVyIGRldmVsb3BlZAorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzeXMuX2dldGZyYW1lKDIpLmZfZ2xvYmFsc1snX19uYW1lX18nXQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXhjOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBfbWFrZV9jbGFzc191bnBpY2tsYWJsZShlbnVtX2NsYXNzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW51bV9jbGFzcy5fX21vZHVsZV9fID0gbW9kdWxlCisKKyAgICAgICAgcmV0dXJuIGVudW1fY2xhc3MKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9taXhpbnNfKGJhc2VzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdHlwZSBmb3IgY3JlYXRpbmcgZW51bSBtZW1iZXJzLCBhbmQgdGhlIGZpcnN0IGluaGVyaXRlZAorICAgICAgICBlbnVtIGNsYXNzLgorCisgICAgICAgIGJhc2VzOiB0aGUgdHVwbGUgb2YgYmFzZXMgdGhhdCB3YXMgZ2l2ZW4gdG8gX19uZXdfXworCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgYmFzZXM6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0LCBFbnVtCisKKyAgICAgICAgIyBkb3VibGUgY2hlY2sgdGhhdCB3ZSBhcmUgbm90IHN1YmNsYXNzaW5nIGEgY2xhc3Mgd2l0aCBleGlzdGluZworICAgICAgICAjIGVudW1lcmF0aW9uIG1lbWJlcnM7IHdoaWxlIHdlJ3JlIGF0IGl0LCBzZWUgaWYgYW55IG90aGVyIGRhdGEKKyAgICAgICAgIyB0eXBlIGhhcyBiZWVuIG1peGVkIGluIHNvIHdlIGNhbiB1c2UgdGhlIGNvcnJlY3QgX19uZXdfXworICAgICAgICBtZW1iZXJfdHlwZSA9IGZpcnN0X2VudW0gPSBOb25lCisgICAgICAgIGZvciBiYXNlIGluIGJhc2VzOgorICAgICAgICAgICAgaWYgIChiYXNlIGlzIG5vdCBFbnVtIGFuZAorICAgICAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGJhc2UsIEVudW0pIGFuZAorICAgICAgICAgICAgICAgICAgICBiYXNlLl9tZW1iZXJfbmFtZXNfKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBleHRlbmQgZW51bWVyYXRpb25zIikKKyAgICAgICAgIyBiYXNlIGlzIG5vdyB0aGUgbGFzdCBiYXNlIGluIGJhc2VzCisgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGJhc2UsIEVudW0pOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuZXcgZW51bWVyYXRpb25zIG11c3QgYmUgY3JlYXRlZCBhcyAiCisgICAgICAgICAgICAgICAgICAgICJgQ2xhc3NOYW1lKFttaXhpbl90eXBlLF0gZW51bV90eXBlKWAiKQorCisgICAgICAgICMgZ2V0IGNvcnJlY3QgbWl4LWluIHR5cGUgKGVpdGhlciBtaXgtaW4gdHlwZSBvZiBFbnVtIHN1YmNsYXNzLCBvcgorICAgICAgICAjIGZpcnN0IGJhc2UgaWYgbGFzdCBiYXNlIGlzIEVudW0pCisgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGJhc2VzWzBdLCBFbnVtKToKKyAgICAgICAgICAgIG1lbWJlcl90eXBlID0gYmFzZXNbMF0gICAgICMgZmlyc3QgZGF0YSB0eXBlCisgICAgICAgICAgICBmaXJzdF9lbnVtID0gYmFzZXNbLTFdICAjIGVudW0gdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXNbMF0uX19tcm9fXzoKKyAgICAgICAgICAgICAgICAjIG1vc3QgY29tbW9uOiAoSW50RW51bSwgaW50LCBFbnVtLCBvYmplY3QpCisgICAgICAgICAgICAgICAgIyBwb3NzaWJsZTogICAgKDxFbnVtICdBdXRvSW50RW51bSc+LCA8RW51bSAnSW50RW51bSc+LAorICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICA8Y2xhc3MgJ2ludCc+LCA8RW51bSAnRW51bSc+LAorICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICA8Y2xhc3MgJ29iamVjdCc+KQorICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoYmFzZSwgRW51bSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpcnN0X2VudW0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VudW0gPSBiYXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gYmFzZQorCisgICAgICAgIHJldHVybiBtZW1iZXJfdHlwZSwgZmlyc3RfZW51bQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZmluZF9uZXdfKGNsYXNzZGljdCwgbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0pOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBfX25ld19fIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBlbnVtIG1lbWJlcnMuCisKKyAgICAgICAgY2xhc3NkaWN0OiB0aGUgY2xhc3MgZGljdGlvbmFyeSBnaXZlbiB0byBfX25ld19fCisgICAgICAgIG1lbWJlcl90eXBlOiB0aGUgZGF0YSB0eXBlIHdob3NlIF9fbmV3X18gd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQKKyAgICAgICAgZmlyc3RfZW51bTogZW51bWVyYXRpb24gdG8gY2hlY2sgZm9yIGFuIG92ZXJyaWRpbmcgX19uZXdfXworCisgICAgICAgICIiIgorICAgICAgICAjIG5vdyBmaW5kIHRoZSBjb3JyZWN0IF9fbmV3X18sIGNoZWNraW5nIHRvIHNlZSBvZiBvbmUgd2FzIGRlZmluZWQKKyAgICAgICAgIyBieSB0aGUgdXNlcjsgYWxzbyBjaGVjayBlYXJsaWVyIGVudW0gY2xhc3NlcyBpbiBjYXNlIGEgX19uZXdfXyB3YXMKKyAgICAgICAgIyBzYXZlZCBhcyBfX25ld19tZW1iZXJfXworICAgICAgICBfX25ld19fID0gY2xhc3NkaWN0LmdldCgnX19uZXdfXycsIE5vbmUpCisKKyAgICAgICAgIyBzaG91bGQgX19uZXdfXyBiZSBzYXZlZCBhcyBfX25ld19tZW1iZXJfXyBsYXRlcj8KKyAgICAgICAgc2F2ZV9uZXcgPSBfX25ld19fIGlzIG5vdCBOb25lCisKKyAgICAgICAgaWYgX19uZXdfXyBpcyBOb25lOgorICAgICAgICAgICAgIyBjaGVjayBhbGwgcG9zc2libGVzIGZvciBfX25ld19tZW1iZXJfXyBiZWZvcmUgZmFsbGluZyBiYWNrIHRvCisgICAgICAgICAgICAjIF9fbmV3X18KKyAgICAgICAgICAgIGZvciBtZXRob2QgaW4gKCdfX25ld19tZW1iZXJfXycsICdfX25ld19fJyk6CisgICAgICAgICAgICAgICAgZm9yIHBvc3NpYmxlIGluIChtZW1iZXJfdHlwZSwgZmlyc3RfZW51bSk6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGdldGF0dHIocG9zc2libGUsIG1ldGhvZCwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0IG5vdCBpbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLl9fbmV3X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9fbmV3X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bS5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06CisgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19fID0gdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIF9fbmV3X18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF9fbmV3X18gPSBvYmplY3QuX19uZXdfXworCisgICAgICAgICMgaWYgYSBub24tb2JqZWN0Ll9fbmV3X18gaXMgdXNlZCB0aGVuIHdoYXRldmVyIHZhbHVlL3R1cGxlIHdhcworICAgICAgICAjIGFzc2lnbmVkIHRvIHRoZSBlbnVtIG1lbWJlciBuYW1lIHdpbGwgYmUgcGFzc2VkIHRvIF9fbmV3X18gYW5kIHRvIHRoZQorICAgICAgICAjIG5ldyBlbnVtIG1lbWJlcidzIF9faW5pdF9fCisgICAgICAgIGlmIF9fbmV3X18gaXMgb2JqZWN0Ll9fbmV3X186CisgICAgICAgICAgICB1c2VfYXJncyA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VfYXJncyA9IFRydWUKKworICAgICAgICByZXR1cm4gX19uZXdfXywgc2F2ZV9uZXcsIHVzZV9hcmdzCisKKworY2xhc3MgRW51bShtZXRhY2xhc3M9RW51bU1ldGEpOgorICAgICIiIkdlbmVyaWMgZW51bWVyYXRpb24uCisKKyAgICBEZXJpdmUgZnJvbSB0aGlzIGNsYXNzIHRvIGRlZmluZSBuZXcgZW51bWVyYXRpb25zLgorCisgICAgIiIiCisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSk6CisgICAgICAgICMgYWxsIGVudW0gaW5zdGFuY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkIGR1cmluZyBjbGFzcyBjb25zdHJ1Y3Rpb24KKyAgICAgICAgIyB3aXRob3V0IGNhbGxpbmcgdGhpcyBtZXRob2Q7IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgbWV0YWNsYXNzJworICAgICAgICAjIF9fY2FsbF9fIChpLmUuIENvbG9yKDMpICksIGFuZCBieSBwaWNrbGUKKyAgICAgICAgaWYgdHlwZSh2YWx1ZSkgaXMgY2xzOgorICAgICAgICAgICAgIyBGb3IgbG9va3VwcyBsaWtlIENvbG9yKENvbG9yLnJlZCkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAjIGJ5LXZhbHVlIHNlYXJjaCBmb3IgYSBtYXRjaGluZyBlbnVtIG1lbWJlcgorICAgICAgICAjIHNlZSBpZiBpdCdzIGluIHRoZSByZXZlcnNlIG1hcHBpbmcgKGZvciBoYXNoYWJsZSB2YWx1ZXMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHZhbHVlIGluIGNscy5fdmFsdWUybWVtYmVyX21hcF86CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fdmFsdWUybWVtYmVyX21hcF9bdmFsdWVdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAjIG5vdCB0aGVyZSwgbm93IGRvIGxvbmcgc2VhcmNoIC0tIE8obikgYmVoYXZpb3IKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gY2xzLl9tZW1iZXJfbWFwXy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBpZiBtZW1iZXIudmFsdWUgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1iZXIKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgaXMgbm90IGEgdmFsaWQgJXMiICUgKHZhbHVlLCBjbHMuX19uYW1lX18pKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcy4lczogJXI+IiAlICgKKyAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fbmFtZV8sIHNlbGYuX3ZhbHVlXykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fbmFtZV8pCisKKyAgICBkZWYgX19kaXJfXyhzZWxmKToKKyAgICAgICAgYWRkZWRfYmVoYXZpb3IgPSBbbSBmb3IgbSBpbiBzZWxmLl9fY2xhc3NfXy5fX2RpY3RfXyBpZiBtWzBdICE9ICdfJ10KKyAgICAgICAgcmV0dXJuIChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICd2YWx1ZSddICsKKyAgICAgICAgICAgICAgICBhZGRlZF9iZWhhdmlvcikKKworICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgIyBtaXhlZC1pbiBFbnVtcyBzaG91bGQgdXNlIHRoZSBtaXhlZC1pbiB0eXBlJ3MgX19mb3JtYXRfXywgb3RoZXJ3aXNlCisgICAgICAgICMgd2UgY2FuIGdldCBzdHJhbmdlIHJlc3VsdHMgd2l0aCB0aGUgRW51bSBuYW1lIHNob3dpbmcgdXAgaW5zdGVhZCBvZgorICAgICAgICAjIHRoZSB2YWx1ZQorCisgICAgICAgICMgcHVyZSBFbnVtIGJyYW5jaAorICAgICAgICBpZiBzZWxmLl9tZW1iZXJfdHlwZV8gaXMgb2JqZWN0OgorICAgICAgICAgICAgY2xzID0gc3RyCisgICAgICAgICAgICB2YWwgPSBzdHIoc2VsZikKKyAgICAgICAgIyBtaXgtaW4gYnJhbmNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbHMgPSBzZWxmLl9tZW1iZXJfdHlwZV8KKyAgICAgICAgICAgIHZhbCA9IHNlbGYudmFsdWUKKyAgICAgICAgcmV0dXJuIGNscy5fX2Zvcm1hdF9fKHZhbCwgZm9ybWF0X3NwZWMpCisKKyAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fdmFsdWVfLCApCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX25hbWVfKQorCisgICAgIyBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgaXMgdXNlZCB0byBwcm92aWRlIGFjY2VzcyB0byB0aGUgYG5hbWVgIGFuZAorICAgICMgYHZhbHVlYCBwcm9wZXJ0aWVzIG9mIGVudW0gbWVtYmVycyB3aGlsZSBrZWVwaW5nIHNvbWUgbWVhc3VyZSBvZgorICAgICMgcHJvdGVjdGlvbiBmcm9tIG1vZGlmaWNhdGlvbiwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgZm9yIGFuIGVudW1lcmF0aW9uCisgICAgIyB0byBoYXZlIG1lbWJlcnMgbmFtZWQgYG5hbWVgIGFuZCBgdmFsdWVgLiAgVGhpcyB3b3JrcyBiZWNhdXNlIGVudW1lcmF0aW9uCisgICAgIyBtZW1iZXJzIGFyZSBub3Qgc2V0IGRpcmVjdGx5IG9uIHRoZSBlbnVtIGNsYXNzIC0tIF9fZ2V0YXR0cl9fIGlzCisgICAgIyB1c2VkIHRvIGxvb2sgdGhlbSB1cC4KKworICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGhlIG5hbWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZV8KKworICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgdmFsdWUoc2VsZik6CisgICAgICAgICIiIlRoZSB2YWx1ZSBvZiB0aGUgRW51bSBtZW1iZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8KKworCitjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgIiIiRW51bSB3aGVyZSBtZW1iZXJzIGFyZSBhbHNvIChhbmQgbXVzdCBiZSkgaW50cyIiIgorCisKK2RlZiB1bmlxdWUoZW51bWVyYXRpb24pOgorICAgICIiIkNsYXNzIGRlY29yYXRvciBmb3IgZW51bWVyYXRpb25zIGVuc3VyaW5nIHVuaXF1ZSBtZW1iZXIgdmFsdWVzLiIiIgorICAgIGR1cGxpY2F0ZXMgPSBbXQorICAgIGZvciBuYW1lLCBtZW1iZXIgaW4gZW51bWVyYXRpb24uX19tZW1iZXJzX18uaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSAhPSBtZW1iZXIubmFtZToKKyAgICAgICAgICAgIGR1cGxpY2F0ZXMuYXBwZW5kKChuYW1lLCBtZW1iZXIubmFtZSkpCisgICAgaWYgZHVwbGljYXRlczoKKyAgICAgICAgYWxpYXNfZGV0YWlscyA9ICcsICcuam9pbigKKyAgICAgICAgICAgICAgICBbIiVzIC0+ICVzIiAlIChhbGlhcywgbmFtZSkgZm9yIChhbGlhcywgbmFtZSkgaW4gZHVwbGljYXRlc10pCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2R1cGxpY2F0ZSB2YWx1ZXMgZm91bmQgaW4gJXI6ICVzJyAlCisgICAgICAgICAgICAgICAgKGVudW1lcmF0aW9uLCBhbGlhc19kZXRhaWxzKSkKKyAgICByZXR1cm4gZW51bWVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi9maWxlY21wLnB5IGIvTGliL2ZpbGVjbXAucHkKaW5kZXggZjVjZWExZC4uMzI4NTI4OCAxMDA2NDQKLS0tIGEvTGliL2ZpbGVjbXAucHkKKysrIGIvTGliL2ZpbGVjbXAucHkKQEAgLTYsNiArNiw3IEBACiBGdW5jdGlvbnM6CiAgICAgY21wKGYxLCBmMiwgc2hhbGxvdz1UcnVlKSAtPiBpbnQKICAgICBjbXBmaWxlcyhhLCBiLCBjb21tb24pIC0+IChbXSwgW10sIFtdKQorICAgIGNsZWFyX2NhY2hlKCkKIAogIiIiCiAKQEAgLTEzLDExICsxNCwxOCBAQAogaW1wb3J0IHN0YXQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCBmaWx0ZXJmYWxzZQogCi1fX2FsbF9fID0gWyJjbXAiLCAiZGlyY21wIiwgImNtcGZpbGVzIl0KK19fYWxsX18gPSBbJ2NsZWFyX2NhY2hlJywgJ2NtcCcsICdkaXJjbXAnLCAnY21wZmlsZXMnLCAnREVGQVVMVF9JR05PUkVTJ10KIAogX2NhY2hlID0ge30KIEJVRlNJWkUgPSA4KjEwMjQKIAorREVGQVVMVF9JR05PUkVTID0gWworICAgICdSQ1MnLCAnQ1ZTJywgJ3RhZ3MnLCAnLmdpdCcsICcuaGcnLCAnLmJ6cicsICdfZGFyY3MnLCAnX19weWNhY2hlX18nXQorCitkZWYgY2xlYXJfY2FjaGUoKToKKyAgICAiIiJDbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4iIiIKKyAgICBfY2FjaGUuY2xlYXIoKQorCiBkZWYgY21wKGYxLCBmMiwgc2hhbGxvdz1UcnVlKToKICAgICAiIiJDb21wYXJlIHR3byBmaWxlcy4KIApAQCAtMzUsNyArNDMsOCBAQAogICAgIFRydWUgaWYgdGhlIGZpbGVzIGFyZSB0aGUgc2FtZSwgRmFsc2Ugb3RoZXJ3aXNlLgogCiAgICAgVGhpcyBmdW5jdGlvbiB1c2VzIGEgY2FjaGUgZm9yIHBhc3QgY29tcGFyaXNvbnMgYW5kIHRoZSByZXN1bHRzLAotICAgIHdpdGggYSBjYWNoZSBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIHJlbHlpbmcgb24gc3RhbGUgc2lnbmF0dXJlcy4KKyAgICB3aXRoIGEgY2FjaGUgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSByZWx5aW5nIG9uIHN0YWxlIHNpZ25hdHVyZXMKKyAgICBvciBieSBleHBsaWNpdGx5IGNhbGxpbmcgY2xlYXJfY2FjaGUoKS4KIAogICAgICIiIgogCkBAIC01Miw3ICs2MSw3IEBACiAgICAgaWYgb3V0Y29tZSBpcyBOb25lOgogICAgICAgICBvdXRjb21lID0gX2RvX2NtcChmMSwgZjIpCiAgICAgICAgIGlmIGxlbihfY2FjaGUpID4gMTAwOiAgICAgICMgbGltaXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY2FjaGUKLSAgICAgICAgICAgIF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICBjbGVhcl9jYWNoZSgpCiAgICAgICAgIF9jYWNoZVtmMSwgZjIsIHMxLCBzMl0gPSBvdXRjb21lCiAgICAgcmV0dXJuIG91dGNvbWUKIApAQCAtODAsNyArODksNyBAQAogICAgIGRpcmNtcChhLCBiLCBpZ25vcmU9Tm9uZSwgaGlkZT1Ob25lKQogICAgICAgQSBhbmQgQiBhcmUgZGlyZWN0b3JpZXMuCiAgICAgICBJR05PUkUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwKLSAgICAgICAgZGVmYXVsdHMgdG8gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXS4KKyAgICAgICAgZGVmYXVsdHMgdG8gREVGQVVMVF9JR05PUkVTLgogICAgICAgSElERSBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwKICAgICAgICAgZGVmYXVsdHMgdG8gW29zLmN1cmRpciwgb3MucGFyZGlyXS4KIApAQCAtMTE2LDcgKzEyNSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmhpZGUgPSBoaWRlCiAgICAgICAgIGlmIGlnbm9yZSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBbJ1JDUycsICdDVlMnLCAndGFncyddICMgTmFtZXMgaWdub3JlZCBpbiBjb21wYXJpc29uCisgICAgICAgICAgICBzZWxmLmlnbm9yZSA9IERFRkFVTFRfSUdOT1JFUwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBpZ25vcmUKIApAQCAtMTQ3LDEyICsxNTYsMTIgQEAKICAgICAgICAgICAgIG9rID0gMQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFfc3RhdCA9IG9zLnN0YXQoYV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICAgICAjIHByaW50KCdDYW5cJ3Qgc3RhdCcsIGFfcGF0aCwgJzonLCB3aHkuYXJnc1sxXSkKICAgICAgICAgICAgICAgICBvayA9IDAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBiX3N0YXQgPSBvcy5zdGF0KGJfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBiX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAKQEAgLTI2OCw3ICsyNzcsNyBAQAogZGVmIF9jbXAoYSwgYiwgc2gsIGFicz1hYnMsIGNtcD1jbXApOgogICAgIHRyeToKICAgICAgICAgcmV0dXJuIG5vdCBhYnMoY21wKGEsIGIsIHNoKSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiAyCiAKIApkaWZmIC0tZ2l0IGEvTGliL2ZpbGVpbnB1dC5weSBiL0xpYi9maWxlaW5wdXQucHkKaW5kZXggODc5YTBmZC4uZGUyOTUxOCAxMDA2NDQKLS0tIGEvTGliL2ZpbGVpbnB1dC5weQorKysgYi9MaWIvZmlsZWlucHV0LnB5CkBAIC0zMCw3ICszMCw3IEBACiAKIEFsbCBmaWxlcyBhcmUgb3BlbmVkIGluIHRleHQgbW9kZSBieSBkZWZhdWx0LCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkKIHNldHRpbmcgdGhlIG1vZGUgcGFyYW1ldGVyIHRvIGlucHV0KCkgb3IgRmlsZUlucHV0Ll9faW5pdF9fKCkuCi1JZiBhbiBJL08gZXJyb3Igb2NjdXJzIGR1cmluZyBvcGVuaW5nIG9yIHJlYWRpbmcgYSBmaWxlLCB0aGUgSU9FcnJvcgorSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIE9TRXJyb3IKIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIElmIHN5cy5zdGRpbiBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0aGUgc2Vjb25kIGFuZCBmdXJ0aGVyIHVzZSB3aWxsCkBAIC0yMjIsNiArMjIyLDEwIEBACiAgICAgICAgIGlmIG1vZGUgbm90IGluICgncicsICdyVScsICdVJywgJ3JiJyk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGaWxlSW5wdXQgb3BlbmluZyBtb2RlIG11c3QgYmUgb25lIG9mICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidyJywgJ3JVJywgJ1UnIGFuZCAncmInIikKKyAgICAgICAgaWYgJ1UnIGluIG1vZGU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCiAgICAgICAgIGlmIG9wZW5ob29rOgogICAgICAgICAgICAgaWYgaW5wbGFjZToKQEAgLTMyMiw5ICszMjYsMTEgQEAKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnBsYWNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lICsgKHNlbGYuX2JhY2t1cCBvciAiLmJhayIpKQotICAgICAgICAgICAgICAgICAgICB0cnk6IG9zLnVubGluayhzZWxmLl9iYWNrdXBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOiBwYXNzCi0gICAgICAgICAgICAgICAgICAgICMgVGhlIG5leHQgZmV3IGxpbmVzIG1heSByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9iYWNrdXBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICMgVGhlIG5leHQgZmV3IGxpbmVzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzZWxmLl9maWxlbmFtZSwgc2VsZi5fYmFja3VwZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBvcGVuKHNlbGYuX2JhY2t1cGZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICB0cnk6CkBAIC0zNDYsNyArMzUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2F2ZXN0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX291dHB1dAogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhpcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIE9TRXJyb3IKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3Blbmhvb2s6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gc2VsZi5fb3Blbmhvb2soc2VsZi5fZmlsZW5hbWUsIHNlbGYuX21vZGUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvZm9ybWF0dGVyLnB5IGIvTGliL2Zvcm1hdHRlci5weQppbmRleCA2MGU2MGYxLi5kOGNjYTUyIDEwMDY0NAotLS0gYS9MaWIvZm9ybWF0dGVyLnB5CisrKyBiL0xpYi9mb3JtYXR0ZXIucHkKQEAgLTE5LDYgKzE5LDkgQEAKICIiIgogCiBpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLndhcm4oJ3RoZSBmb3JtYXR0ZXIgbW9kdWxlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnCisgICAgICAgICAgICAgICdQeXRob24gMy42JywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKIAogCiBBU19JUyA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9mcmFjdGlvbnMucHkgYi9MaWIvZnJhY3Rpb25zLnB5CmluZGV4IDhiZTUyZDIuLjc5ZTgzZmYgMTAwNjQ0Ci0tLSBhL0xpYi9mcmFjdGlvbnMucHkKKysrIGIvTGliL2ZyYWN0aW9ucy5weQpAQCAtMTgyLDggKzE4MiwxMCBAQAogICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGYsIGZsb2F0KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMuZnJvbV9mbG9hdCgpIG9ubHkgdGFrZXMgZmxvYXRzLCBub3QgJXIgKCVzKSIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbHMuX19uYW1lX18sIGYsIHR5cGUoZikuX19uYW1lX18pKQotICAgICAgICBpZiBtYXRoLmlzbmFuKGYpIG9yIG1hdGguaXNpbmYoZik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc25hbihmKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc2luZihmKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgcmV0dXJuIGNscygqZi5hc19pbnRlZ2VyX3JhdGlvKCkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTE5Niw5ICsxOTgsMTEgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAiJXMuZnJvbV9kZWNpbWFsKCkgb25seSB0YWtlcyBEZWNpbWFscywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBkZWMsIHR5cGUoZGVjKS5fX25hbWVfXykpCi0gICAgICAgIGlmIG5vdCBkZWMuaXNfZmluaXRlKCk6Ci0gICAgICAgICAgICAjIENhdGNoZXMgaW5maW5pdGllcyBhbmQgbmFucy4KLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19pbmZpbml0ZSgpOgorICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19uYW4oKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQogICAgICAgICBzaWduLCBkaWdpdHMsIGV4cCA9IGRlYy5hc190dXBsZSgpCiAgICAgICAgIGRpZ2l0cyA9IGludCgnJy5qb2luKG1hcChzdHIsIGRpZ2l0cykpKQogICAgICAgICBpZiBzaWduOgpkaWZmIC0tZ2l0IGEvTGliL2Z0cGxpYi5weSBiL0xpYi9mdHBsaWIucHkKaW5kZXggNWU3NWU2ZC4uMWIxNmUwYSAxMDA2NDQKLS0tIGEvTGliL2Z0cGxpYi5weQorKysgYi9MaWIvZnRwbGliLnB5CkBAIC0zOSw5ICszOSwxMCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc29ja2V0CitpbXBvcnQgd2FybmluZ3MKIGZyb20gc29ja2V0IGltcG9ydCBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVAogCi1fX2FsbF9fID0gWyJGVFAiLCJOZXRyYyJdCitfX2FsbF9fID0gWyJGVFAiLCAiTmV0cmMiXQogCiAjIE1hZ2ljIG51bWJlciBmcm9tIDxzb2NrZXQuaD4KIE1TR19PT0IgPSAweDEgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFByb2Nlc3MgZGF0YSBvdXQgb2YgYmFuZApAQCAtNjMsNyArNjQsNyBAQAogCiAjIEFsbCBleGNlcHRpb25zIChob3BlZnVsbHkpIHRoYXQgbWF5IGJlIHJhaXNlZCBoZXJlIGFuZCB0aGF0IGFyZW4ndAogIyAoYWx3YXlzKSBwcm9ncmFtbWluZyBlcnJvcnMgb24gb3VyIHNpZGUKLWFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yKQorYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IpCiAKIAogIyBMaW5lIHRlcm1pbmF0b3JzICh3ZSBhbHdheXMgb3V0cHV0IENSTEYsIGJ1dCBhY2NlcHQgYW55IG9mIENSTEYsIENSLCBMRikKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jayBpcyBub3QgTm9uZToKQEAgLTEzNiw2ICsxMzcsNyBAQAogICAgICAgICAnJydDb25uZWN0IHRvIGhvc3QuICBBcmd1bWVudHMgYXJlOgogICAgICAgICAgLSBob3N0OiBob3N0bmFtZSB0byBjb25uZWN0IHRvIChzdHJpbmcsIGRlZmF1bHQgcHJldmlvdXMgaG9zdCkKICAgICAgICAgIC0gcG9ydDogcG9ydCB0byBjb25uZWN0IHRvIChpbnRlZ2VyLCBkZWZhdWx0IHByZXZpb3VzIHBvcnQpCisgICAgICAgICAtIHRpbWVvdXQ6IHRoZSB0aW1lb3V0IHRvIHNldCBhZ2FpbnN0IHRoZSBmdHAgc29ja2V0KHMpCiAgICAgICAgICAtIHNvdXJjZV9hZGRyZXNzOiBhIDItdHVwbGUgKGhvc3QsIHBvcnQpIGZvciB0aGUgc29ja2V0IHRvIGJpbmQKICAgICAgICAgICAgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0aW5nLgogICAgICAgICAnJycKQEAgLTE4Niw3ICsxODgsOCBAQAogICAgICMgSW50ZXJuYWw6IHNlbmQgb25lIGxpbmUgdG8gdGhlIHNlcnZlciwgYXBwZW5kaW5nIENSTEYKICAgICBkZWYgcHV0bGluZShzZWxmLCBsaW5lKToKICAgICAgICAgbGluZSA9IGxpbmUgKyBDUkxGCi0gICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMTogcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgKHRocm91Z2ggcHV0bGluZSgpKQpAQCAtMjAyLDkgKzIwNSwxMiBAQAogICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CiAgICAgICAgICAgICBwcmludCgnKmdldConLCBzZWxmLnNhbml0aXplKGxpbmUpKQotICAgICAgICBpZiBub3QgbGluZTogcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6IGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjogbGluZSA9IGxpbmVbOi0xXQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQorICAgICAgICBlbGlmIGxpbmVbLTE6XSBpbiBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICByZXR1cm4gbGluZQogCiAgICAgIyBJbnRlcm5hbDogZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCB3aGljaCBtYXkgcG9zc2libHkKQEAgLTIyNyw3ICsyMzMsOCBAQAogICAgICMgUmFpc2UgdmFyaW91cyBlcnJvcnMgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBhbiBlcnJvcgogICAgIGRlZiBnZXRyZXNwKHNlbGYpOgogICAgICAgICByZXNwID0gc2VsZi5nZXRtdWx0aWxpbmUoKQotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nOgorICAgICAgICAgICAgcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCiAgICAgICAgIHNlbGYubGFzdHJlc3AgPSByZXNwWzozXQogICAgICAgICBjID0gcmVzcFs6MV0KICAgICAgICAgaWYgYyBpbiB7JzEnLCAnMicsICczJ306CkBAIC0yNTEsNyArMjU4LDggQEAKICAgICAgICAgSVAgYW5kIFN5bmNoOyB0aGF0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggdGhlIHNlcnZlcnMgSSd2ZQogICAgICAgICB0cmllZC4gIEluc3RlYWQsIGp1c3Qgc2VuZCB0aGUgQUJPUiBjb21tYW5kIGFzIE9PQiBkYXRhLicnJwogICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0IHVyZ2VudConLCBzZWxmLnNhbml0aXplKGxpbmUpKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CisgICAgICAgICAgICBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZSwgTVNHX09PQikKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKICAgICAgICAgaWYgcmVzcFs6M10gbm90IGluIHsnNDI2JywgJzIyNScsICcyMjYnfToKQEAgLTMwMCw3ICszMDgsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgc29jay5iaW5kKHNhKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBfOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgXzoKICAgICAgICAgICAgICAgICBlcnIgPSBfCiAgICAgICAgICAgICAgICAgaWYgc29jazoKICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCkBAIC0zMTEsOCArMzE5LDggQEAKICAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBlcnIKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKG1zZykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihtc2cpCiAgICAgICAgIHNvY2subGlzdGVuKDEpCiAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0gIyBHZXQgcHJvcGVyIHBvcnQKICAgICAgICAgaG9zdCA9IHNlbGYuc29jay5nZXRzb2NrbmFtZSgpWzBdICMgR2V0IHByb3BlciBob3N0CkBAIC0zOTIsOSArNDAwLDEyIEBACiAKICAgICBkZWYgbG9naW4oc2VsZiwgdXNlciA9ICcnLCBwYXNzd2QgPSAnJywgYWNjdCA9ICcnKToKICAgICAgICAgJycnTG9naW4sIGRlZmF1bHQgYW5vbnltb3VzLicnJwotICAgICAgICBpZiBub3QgdXNlcjogdXNlciA9ICdhbm9ueW1vdXMnCi0gICAgICAgIGlmIG5vdCBwYXNzd2Q6IHBhc3N3ZCA9ICcnCi0gICAgICAgIGlmIG5vdCBhY2N0OiBhY2N0ID0gJycKKyAgICAgICAgaWYgbm90IHVzZXI6CisgICAgICAgICAgICB1c2VyID0gJ2Fub255bW91cycKKyAgICAgICAgaWYgbm90IHBhc3N3ZDoKKyAgICAgICAgICAgIHBhc3N3ZCA9ICcnCisgICAgICAgIGlmIG5vdCBhY2N0OgorICAgICAgICAgICAgYWNjdCA9ICcnCiAgICAgICAgIGlmIHVzZXIgPT0gJ2Fub255bW91cycgYW5kIHBhc3N3ZCBpbiB7JycsICctJ306CiAgICAgICAgICAgICAjIElmIHRoZXJlIGlzIG5vIGFub255bW91cyBmdHAgcGFzc3dvcmQgc3BlY2lmaWVkCiAgICAgICAgICAgICAjIHRoZW4gd2UnbGwganVzdCB1c2UgYW5vbnltb3VzQApAQCAtNDA1LDggKzQxNiwxMCBAQAogICAgICAgICAgICAgIyAgIGhvc3Qgb3IgY291bnRyeS4KICAgICAgICAgICAgIHBhc3N3ZCA9IHBhc3N3ZCArICdhbm9ueW1vdXNAJwogICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdVU0VSICcgKyB1c2VyKQotICAgICAgICBpZiByZXNwWzBdID09ICczJzogcmVzcCA9IHNlbGYuc2VuZGNtZCgnUEFTUyAnICsgcGFzc3dkKQotICAgICAgICBpZiByZXNwWzBdID09ICczJzogcmVzcCA9IHNlbGYuc2VuZGNtZCgnQUNDVCAnICsgYWNjdCkKKyAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6CisgICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdQQVNTICcgKyBwYXNzd2QpCisgICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnQUNDVCAnICsgYWNjdCkKICAgICAgICAgaWYgcmVzcFswXSAhPSAnMic6CiAgICAgICAgICAgICByYWlzZSBlcnJvcl9yZXBseShyZXNwKQogICAgICAgICByZXR1cm4gcmVzcApAQCAtNDMyLDYgKzQ0NSw5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSkKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHJldHJsaW5lcyhzZWxmLCBjbWQsIGNhbGxiYWNrID0gTm9uZSk6CkBAIC00NDYsNyArNDYyLDggQEAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICBUaGUgcmVzcG9uc2UgY29kZS4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6IGNhbGxiYWNrID0gcHJpbnRfbGluZQorICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOgorICAgICAgICAgICAgY2FsbGJhY2sgPSBwcmludF9saW5lCiAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1RZUEUgQScpCiAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQpIGFzIGNvbm4sIFwKICAgICAgICAgICAgICAgICAgY29ubi5tYWtlZmlsZSgncicsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpIGFzIGZwOgpAQCAtNDU0LDcgKzQ3MSw4IEBACiAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gc2VsZi5tYXhsaW5lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOiBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgpAQCAtNDYyLDYgKzQ4MCw5IEBACiAgICAgICAgICAgICAgICAgZWxpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGxpbmUpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgpAQCAtNDgzLDkgKzUwNCwxNCBAQAogICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhaworICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOgorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiBzdG9ybGluZXMoc2VsZiwgY21kLCBmcCwgY2FsbGJhY2s9Tm9uZSk6CkBAIC01MDYsMTIgKzUzMiwxNyBAQAogICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCiAgICAgICAgICAgICAgICAgaWYgbGVuKGJ1ZikgPiBzZWxmLm1heGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhaworICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgogICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTFdIGluIEJfQ1JMRjogYnVmID0gYnVmWzotMV0KICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICsgQl9DUkxGCiAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOgorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiBhY2N0KHNlbGYsIHBhc3N3b3JkKToKQEAgLTY0Niw4ICs2NzcsMTAgQEAKIHRyeToKICAgICBpbXBvcnQgc3NsCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcworICAgIF9TU0xTb2NrZXQgPSBOb25lCiBlbHNlOgorICAgIF9TU0xTb2NrZXQgPSBzc2wuU1NMU29ja2V0CisKICAgICBjbGFzcyBGVFBfVExTKEZUUCk6CiAgICAgICAgICcnJ0EgRlRQIHN1YmNsYXNzIHdoaWNoIGFkZHMgVExTIHN1cHBvcnQgdG8gRlRQIGFzIGRlc2NyaWJlZAogICAgICAgICBpbiBSRkMtNDIxNy4KQEAgLTY5NCw2ICs3MjcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNlbGYuc3NsX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCiAgICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CiAgICAgICAgICAgICBzZWxmLl9wcm90X3AgPSBGYWxzZQogICAgICAgICAgICAgRlRQLl9faW5pdF9fKHNlbGYsIGhvc3QsIHVzZXIsIHBhc3N3ZCwgYWNjdCwgdGltZW91dCwgc291cmNlX2FkZHJlc3MpCkBAIC03MTEsMTIgKzc0OCw3IEBACiAgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBUTFMnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXNwID0gc2VsZi52b2lkY21kKCdBVVRIIFNTTCcpCi0gICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywgc2VsZi5rZXlmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZShtb2RlPSdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKICAgICAgICAgICAgIHJldHVybiByZXNwCiAKQEAgLTc1NSw4MCArNzg3LDkgQEAKICAgICAgICAgZGVmIG50cmFuc2ZlcmNtZChzZWxmLCBjbWQsIHJlc3Q9Tm9uZSk6CiAgICAgICAgICAgICBjb25uLCBzaXplID0gRlRQLm50cmFuc2ZlcmNtZChzZWxmLCBjbWQsIHJlc3QpCiAgICAgICAgICAgICBpZiBzZWxmLl9wcm90X3A6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBjb25uID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KGNvbm4pCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNzbC53cmFwX3NvY2tldChjb25uLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbikKKyAgICAgICAgICAgICAgICBjb25uID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KGNvbm4pCiAgICAgICAgICAgICByZXR1cm4gY29ubiwgc2l6ZQogCi0gICAgICAgIGRlZiByZXRyYmluYXJ5KHNlbGYsIGNtZCwgY2FsbGJhY2ssIGJsb2Nrc2l6ZT04MTkyLCByZXN0PU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiByZXRybGluZXMoc2VsZiwgY21kLCBjYWxsYmFjayA9IE5vbmUpOgotICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZTogY2FsbGJhY2sgPSBwcmludF9saW5lCi0gICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdUWVBFIEEnKQotICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kKQotICAgICAgICAgICAgZnAgPSBjb25uLm1ha2VmaWxlKCdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKLSAgICAgICAgICAgIHdpdGggZnAsIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IHNlbGYubWF4bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOiBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKToKLSAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBJJykKLSAgICAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZChibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHN0b3JsaW5lcyhzZWxmLCBjbWQsIGZwLCBjYWxsYmFjaz1Ob25lKToKLSAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBBJykKLSAgICAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQpIGFzIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGJ1ZikgPiBzZWxmLm1heGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMjpdICE9IEJfQ1JMRjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMV0gaW4gQl9DUkxGOiBidWYgPSBidWZbOi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICsgQl9DUkxGCi0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KICAgICAgICAgZGVmIGFib3J0KHNlbGYpOgogICAgICAgICAgICAgIyBvdmVycmlkZGVuIGFzIHdlIGNhbid0IHBhc3MgTVNHX09PQiBmbGFnIHRvIHNlbmRhbGwoKQogICAgICAgICAgICAgbGluZSA9IGInQUJPUicgKyBCX0NSTEYKQEAgLTgzOSw3ICs4MDAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHJlc3AKIAogICAgIF9fYWxsX18uYXBwZW5kKCdGVFBfVExTJykKLSAgICBhbGxfZXJyb3JzID0gKEVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvciwgc3NsLlNTTEVycm9yKQorICAgIGFsbF9lcnJvcnMgPSAoRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yLCBzc2wuU1NMRXJyb3IpCiAKIAogXzE1MF9yZSA9IE5vbmUKQEAgLTkzNiw3ICs4OTcsOCBAQAogCiBkZWYgZnRwY3Aoc291cmNlLCBzb3VyY2VuYW1lLCB0YXJnZXQsIHRhcmdldG5hbWUgPSAnJywgdHlwZSA9ICdJJyk6CiAgICAgJycnQ29weSBmaWxlIGZyb20gb25lIEZUUC1pbnN0YW5jZSB0byBhbm90aGVyLicnJwotICAgIGlmIG5vdCB0YXJnZXRuYW1lOiB0YXJnZXRuYW1lID0gc291cmNlbmFtZQorICAgIGlmIG5vdCB0YXJnZXRuYW1lOgorICAgICAgICB0YXJnZXRuYW1lID0gc291cmNlbmFtZQogICAgIHR5cGUgPSAnVFlQRSAnICsgdHlwZQogICAgIHNvdXJjZS52b2lkY21kKHR5cGUpCiAgICAgdGFyZ2V0LnZvaWRjbWQodHlwZSkKQEAgLTk0Niw5ICs5MDgsMTEgQEAKICAgICAjIHRyYW5zZmVyIHJlcXVlc3QuCiAgICAgIyBTbzogU1RPUiBiZWZvcmUgUkVUUiwgYmVjYXVzZSBoZXJlIHRoZSB0YXJnZXQgaXMgYSAidXNlciIuCiAgICAgdHJlcGx5ID0gdGFyZ2V0LnNlbmRjbWQoJ1NUT1IgJyArIHRhcmdldG5hbWUpCi0gICAgaWYgdHJlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKKyAgICBpZiB0cmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfToKKyAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQogICAgIHNyZXBseSA9IHNvdXJjZS5zZW5kY21kKCdSRVRSICcgKyBzb3VyY2VuYW1lKQotICAgIGlmIHNyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OiByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CisgICAgaWYgc3JlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306CisgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKICAgICBzb3VyY2Uudm9pZHJlc3AoKQogICAgIHRhcmdldC52b2lkcmVzcCgpCiAKQEAgLTk2NiwxOSArOTMwLDIyIEBACiAgICAgX19kZWZhY2N0ID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbmV0cmMgbW9kdWxlIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIGlmICJIT01FIiBpbiBvcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIkhPTUUiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLm5ldHJjIikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic3BlY2lmeSBmaWxlIHRvIGxvYWQgb3Igc2V0ICRIT01FIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzcGVjaWZ5IGZpbGUgdG8gbG9hZCBvciBzZXQgJEhPTUUiKQogICAgICAgICBzZWxmLl9faG9zdHMgPSB7fQogICAgICAgICBzZWxmLl9fbWFjcm9zID0ge30KICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAiciIpCiAgICAgICAgIGluX21hY3JvID0gMAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhaworICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGluX21hY3JvIGFuZCBsaW5lLnN0cmlwKCk6CiAgICAgICAgICAgICAgICAgbWFjcm9fbGluZXMuYXBwZW5kKGxpbmUpCiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTEwODcsNyArMTA1NCw3IEBACiAgICAgdXNlcmlkID0gcGFzc3dkID0gYWNjdCA9ICcnCiAgICAgdHJ5OgogICAgICAgICBuZXRyYyA9IE5ldHJjKHJjZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgcmNmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ291bGQgbm90IG9wZW4gYWNjb3VudCBmaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tIHVzaW5nIGFub255bW91cyBsb2dpbi4iKQpkaWZmIC0tZ2l0IGEvTGliL2Z1bmN0b29scy5weSBiL0xpYi9mdW5jdG9vbHMucHkKaW5kZXggMDUzZTQ0ZS4uMWU3OWIzMSAxMDA2NDQKLS0tIGEvTGliL2Z1bmN0b29scy5weQorKysgYi9MaWIvZnVuY3Rvb2xzLnB5CkBAIC0zLDE2ICszLDI0IEBACiAjIFB5dGhvbiBtb2R1bGUgd3JhcHBlciBmb3IgX2Z1bmN0b29scyBDIG1vZHVsZQogIyB0byBhbGxvdyB1dGlsaXRpZXMgd3JpdHRlbiBpbiBQeXRob24gdG8gYmUgYWRkZWQKICMgdG8gdGhlIGZ1bmN0b29scyBtb2R1bGUuCi0jIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+Ci0jIGFuZCBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+Ci0jICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+LAorIyBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+LAorIyBhbmQgxYF1a2FzeiBMYW5nYSA8bHVrYXN6IGF0IGxhbmdhLnBsPi4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KICMgU2VlIEMgc291cmNlIGNvZGUgZm9yIF9mdW5jdG9vbHMgY3JlZGl0cy9jb3B5cmlnaHQKIAogX19hbGxfXyA9IFsndXBkYXRlX3dyYXBwZXInLCAnd3JhcHMnLCAnV1JBUFBFUl9BU1NJR05NRU5UUycsICdXUkFQUEVSX1VQREFURVMnLAotICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnXQorICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnLAorICAgICAgICAgICAncGFydGlhbG1ldGhvZCcsICdzaW5nbGVkaXNwYXRjaCddCiAKLWZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbCwgcmVkdWNlCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitmcm9tIGFiYyBpbXBvcnQgZ2V0X2NhY2hlX3Rva2VuCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIHR5cGVzIGltcG9ydCBNYXBwaW5nUHJveHlUeXBlLCBNZXRob2RUeXBlCitmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtLZXlEaWN0aW9uYXJ5CiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBSTG9jawogZXhjZXB0OgpAQCAtNDcsNyArNTUsNiBAQAogICAgICAgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZyb20gdGhlIHdyYXBwZWQKICAgICAgICBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUykKICAgICAiIiIKLSAgICB3cmFwcGVyLl9fd3JhcHBlZF9fID0gd3JhcHBlZAogICAgIGZvciBhdHRyIGluIGFzc2lnbmVkOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIod3JhcHBlZCwgYXR0cikKQEAgLTU3LDYgKzY0LDkgQEAKICAgICAgICAgICAgIHNldGF0dHIod3JhcHBlciwgYXR0ciwgdmFsdWUpCiAgICAgZm9yIGF0dHIgaW4gdXBkYXRlZDoKICAgICAgICAgZ2V0YXR0cih3cmFwcGVyLCBhdHRyKS51cGRhdGUoZ2V0YXR0cih3cmFwcGVkLCBhdHRyLCB7fSkpCisgICAgIyBJc3N1ZSAjMTc0ODI6IHNldCBfX3dyYXBwZWRfXyBsYXN0IHNvIHdlIGRvbid0IGluYWR2ZXJ0ZW50bHkgY29weSBpdAorICAgICMgZnJvbSB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aGVuIHVwZGF0aW5nIF9fZGljdF9fCisgICAgd3JhcHBlci5fX3dyYXBwZWRfXyA9IHdyYXBwZWQKICAgICAjIFJldHVybiB0aGUgd3JhcHBlciBzbyB0aGlzIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHZpYSBwYXJ0aWFsKCkKICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC03OSwyMSArODksOTEgQEAKICMjIyB0b3RhbF9vcmRlcmluZyBjbGFzcyBkZWNvcmF0b3IKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKKyMgVGhlIGNvcnJlY3Qgd2F5IHRvIGluZGljYXRlIHRoYXQgYSBjb21wYXJpc29uIG9wZXJhdGlvbiBkb2Vzbid0CisjIHJlY29nbmlzZSB0aGUgb3RoZXIgdHlwZSBpcyB0byByZXR1cm4gTm90SW1wbGVtZW50ZWQgYW5kIGxldCB0aGUKKyMgaW50ZXJwcmV0ZXIgaGFuZGxlIHJhaXNpbmcgVHlwZUVycm9yIGlmIGJvdGggb3BlcmFuZHMgcmV0dXJuCisjIE5vdEltcGxlbWVudGVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBjb21wYXJpc29uIG1ldGhvZHMKKyMKKyMgVGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdG90YWxfb3JkZXJpbmcgbW9yZSBjb21wbGljYXRlZCwgc2luY2UKKyMgd2UgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmlnZ2VyIGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuIHR3bworIyBkaWZmZXJlbnQgdHlwZXMgdGhhdCBib3RoIHVzZSB0aGlzIGRlY29yYXRvciBlbmNvdW50ZXIgZWFjaCBvdGhlci4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIGEgdHlwZSBpbXBsZW1lbnRzIF9fbHRfXywgaXQncyBuYXR1cmFsIHRvIGRlZmluZQorIyBfX2d0X18gYXMgc29tZXRoaW5nIGxpa2U6CisjCisjICAgIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPCBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIKKyMKKyMgSG93ZXZlciwgdXNpbmcgdGhlIG9wZXJhdG9yIHN5bnRheCBsaWtlIHRoYXQgZW5kcyB1cCBpbnZva2luZyB0aGUgZnVsbAorIyB0eXBlIGNoZWNraW5nIG1hY2hpbmVyeSBhZ2FpbiBhbmQgbWVhbnMgd2UgY2FuIGVuZCB1cCBib3VuY2luZyBiYWNrIGFuZAorIyBmb3J0aCBiZXR3ZWVuIHRoZSB0d28gb3BlcmFuZHMgdW50aWwgd2UgcnVuIG91dCBvZiBzdGFjayBzcGFjZS4KKyMKKyMgVGhlIHNvbHV0aW9uIGlzIHRvIGRlZmluZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgaW52b2tlIHRoZSBhcHByb3ByaWF0ZQorIyBtYWdpYyBtZXRob2RzIGRpcmVjdGx5LCBlbnN1cmluZyB3ZSBvbmx5IHRyeSBlYWNoIG9wZXJhbmQgb25jZSwgYW5kCisjIHJldHVybiBOb3RJbXBsZW1lbnRlZCBpbW1lZGlhdGVseSBpZiBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZQorIyB1bmRlcmx5aW5nIHVzZXIgcHJvdmlkZWQgbWV0aG9kLiBVc2luZyB0aGlzIHNjaGVtZSwgdGhlIF9fZ3RfXyBkZXJpdmVkCisjIGZyb20gYSB1c2VyIHByb3ZpZGVkIF9fbHRfXyBiZWNvbWVzOgorIworIyAgICBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3BfYW5kX25vdF9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKQorCitkZWYgX25vdF9vcChvcCwgb3RoZXIpOgorICAgICMgIm5vdCBhIDwgYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgICMgIm5vdCBhIDw9IGIiIGhhbmRsZXMgImEgPiBiIgorICAgICMgIm5vdCBhID49IGIiIGhhbmRsZXMgImEgPCBiIgorICAgICMgIm5vdCBhID4gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKKworZGVmIF9vcF9vcl9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgImEgPCBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgICMgImEgPiBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBvciBzZWxmID09IG90aGVyCisKK2RlZiBfbm90X29wX2FuZF9ub3RfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJub3QgKGEgPCBiIG9yIGEgPT0gYikiIGhhbmRsZXMgImEgPiBiIgorICAgICMgIm5vdCBhIDwgYiBhbmQgYSAhPSBiIiBpcyBlcXVpdmFsZW50CisgICAgIyAibm90IChhID4gYiBvciBhID09IGIpIiBoYW5kbGVzICJhIDwgYiIKKyAgICAjICJub3QgYSA+IGIgYW5kIGEgIT0gYiIgaXMgZXF1aXZhbGVudAorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgYW5kIHNlbGYgIT0gb3RoZXIKKworZGVmIF9ub3Rfb3Bfb3JfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJub3QgYSA8PSBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgICMgIm5vdCBhID49IGIgb3IgYSA9PSBiIiBoYW5kbGVzICJhIDw9IGIiCisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gbm90IG9wX3Jlc3VsdCBvciBzZWxmID09IG90aGVyCisKK2RlZiBfb3BfYW5kX25vdF9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgImEgPD0gYiBhbmQgbm90IGEgPT0gYiIgaGFuZGxlcyAiYSA8IGIiCisgICAgIyAiYSA+PSBiIGFuZCBub3QgYSA9PSBiIiBoYW5kbGVzICJhID4gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBvcF9yZXN1bHQgYW5kIHNlbGYgIT0gb3RoZXIKKwogZGVmIHRvdGFsX29yZGVyaW5nKGNscyk6CiAgICAgIiIiQ2xhc3MgZGVjb3JhdG9yIHRoYXQgZmlsbHMgaW4gbWlzc2luZyBvcmRlcmluZyBtZXRob2RzIiIiCiAgICAgY29udmVydCA9IHsKLSAgICAgICAgJ19fbHRfXyc6IFsoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIpXSwKLSAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPD0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIpXSwKLSAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID4gb3RoZXIpXSwKLSAgICAgICAgJ19fZ2VfXyc6IFsoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogKG5vdCBzZWxmID49IG90aGVyKSBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+PSBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+PSBvdGhlcildCisgICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3BfYW5kX25vdF9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX29yX2VxKHNlbGYuX19sdF9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19sdF9fLCBvdGhlcikpXSwKKyAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9vcl9lcShzZWxmLl9fbGVfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX2FuZF9ub3RfZXEoc2VsZi5fX2xlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Aoc2VsZi5fX2xlX18sIG90aGVyKSldLAorICAgICAgICAnX19ndF9fJzogWygnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX2FuZF9ub3RfZXEoc2VsZi5fX2d0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9vcl9lcShzZWxmLl9fZ3RfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fZ3RfXywgb3RoZXIpKV0sCisgICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Bfb3JfZXEoc2VsZi5fX2dlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9hbmRfbm90X2VxKHNlbGYuX19nZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19nZV9fLCBvdGhlcikpXQogICAgIH0KICAgICAjIEZpbmQgdXNlci1kZWZpbmVkIGNvbXBhcmlzb25zIChub3QgdGhvc2UgaW5oZXJpdGVkIGZyb20gb2JqZWN0KS4KICAgICByb290cyA9IFtvcCBmb3Igb3AgaW4gY29udmVydCBpZiBnZXRhdHRyKGNscywgb3AsIE5vbmUpIGlzIG5vdCBnZXRhdHRyKG9iamVjdCwgb3AsIE5vbmUpXQpAQCAtMTQwLDYgKzIyMCwxMDMgQEAKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIHBhcnRpYWwoKSBhcmd1bWVudCBhcHBsaWNhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBQdXJlbHkgZnVuY3Rpb25hbCwgbm8gZGVzY3JpcHRvciBiZWhhdmlvdXIKK2RlZiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAiIiJOZXcgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgICBhbmQga2V5d29yZHMuCisgICAgIiIiCisgICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6CisgICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCisgICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCisgICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKKyAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCisgICAgbmV3ZnVuYy5hcmdzID0gYXJncworICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcworICAgIHJldHVybiBuZXdmdW5jCisKK3RyeToKKyAgICBmcm9tIF9mdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKKyMgRGVzY3JpcHRvciB2ZXJzaW9uCitjbGFzcyBwYXJ0aWFsbWV0aG9kKG9iamVjdCk6CisgICAgIiIiTWV0aG9kIGRlc2NyaXB0b3Igd2l0aCBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgICBhbmQga2V5d29yZHMuCisKKyAgICBTdXBwb3J0cyB3cmFwcGluZyBleGlzdGluZyBkZXNjcmlwdG9ycyBhbmQgaGFuZGxlcyBub24tZGVzY3JpcHRvcgorICAgIGNhbGxhYmxlcyBhcyBpbnN0YW5jZSBtZXRob2RzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZ1bmMpIGFuZCBub3QgaGFzYXR0cihmdW5jLCAiX19nZXRfXyIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ7IXJ9IGlzIG5vdCBjYWxsYWJsZSBvciBhIGRlc2NyaXB0b3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZ1bmMpKQorCisgICAgICAgICMgZnVuYyBjb3VsZCBiZSBhIGRlc2NyaXB0b3IgbGlrZSBjbGFzc21ldGhvZCB3aGljaCBpc24ndCBjYWxsYWJsZSwKKyAgICAgICAgIyBzbyB3ZSBjYW4ndCBpbmhlcml0IGZyb20gcGFydGlhbCAoaXQgdmVyaWZpZXMgZnVuYyBpcyBjYWxsYWJsZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmdW5jLCBwYXJ0aWFsbWV0aG9kKToKKyAgICAgICAgICAgICMgZmxhdHRlbmluZyBpcyBtYW5kYXRvcnkgaW4gb3JkZXIgdG8gcGxhY2UgY2xzL3NlbGYgYmVmb3JlIGFsbAorICAgICAgICAgICAgIyBvdGhlciBhcmd1bWVudHMKKyAgICAgICAgICAgICMgaXQncyBhbHNvIG1vcmUgZWZmaWNpZW50IHNpbmNlIG9ubHkgb25lIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisgICAgICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jLmZ1bmMKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGZ1bmMuYXJncyArIGFyZ3MKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMgPSBmdW5jLmtleXdvcmRzLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5rZXl3b3Jkcy51cGRhdGUoa2V5d29yZHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzID0ga2V5d29yZHMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgYXJncyA9ICIsICIuam9pbihtYXAocmVwciwgc2VsZi5hcmdzKSkKKyAgICAgICAga2V5d29yZHMgPSAiLCAiLmpvaW4oInt9PXshcn0iLmZvcm1hdChrLCB2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5rZXl3b3Jkcy5pdGVtcygpKQorICAgICAgICBmb3JtYXRfc3RyaW5nID0gInttb2R1bGV9LntjbHN9KHtmdW5jfSwge2FyZ3N9LCB7a2V5d29yZHN9KSIKKyAgICAgICAgcmV0dXJuIGZvcm1hdF9zdHJpbmcuZm9ybWF0KG1vZHVsZT1zZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzPXNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYz1zZWxmLmZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPWFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkcz1rZXl3b3JkcykKKworICAgIGRlZiBfbWFrZV91bmJvdW5kX21ldGhvZChzZWxmKToKKyAgICAgICAgZGVmIF9tZXRob2QoKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICAgICAgICAgY2FsbF9rZXl3b3JkcyA9IHNlbGYua2V5d29yZHMuY29weSgpCisgICAgICAgICAgICBjYWxsX2tleXdvcmRzLnVwZGF0ZShrZXl3b3JkcykKKyAgICAgICAgICAgIGNsc19vcl9zZWxmLCAqcmVzdCA9IGFyZ3MKKyAgICAgICAgICAgIGNhbGxfYXJncyA9IChjbHNfb3Jfc2VsZiwpICsgc2VsZi5hcmdzICsgdHVwbGUocmVzdCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bmMoKmNhbGxfYXJncywgKipjYWxsX2tleXdvcmRzKQorICAgICAgICBfbWV0aG9kLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXworICAgICAgICByZXR1cm4gX21ldGhvZAorCisgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBjbHMpOgorICAgICAgICBnZXQgPSBnZXRhdHRyKHNlbGYuZnVuYywgIl9fZ2V0X18iLCBOb25lKQorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgIGlmIGdldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5ld19mdW5jID0gZ2V0KG9iaiwgY2xzKQorICAgICAgICAgICAgaWYgbmV3X2Z1bmMgaXMgbm90IHNlbGYuZnVuYzoKKyAgICAgICAgICAgICAgICAjIEFzc3VtZSBfX2dldF9fIHJldHVybmluZyBzb21ldGhpbmcgbmV3IGluZGljYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAjIGNyZWF0aW9uIG9mIGFuIGFwcHJvcHJpYXRlIGNhbGxhYmxlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFydGlhbChuZXdfZnVuYywgKnNlbGYuYXJncywgKipzZWxmLmtleXdvcmRzKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9fc2VsZl9fID0gbmV3X2Z1bmMuX19zZWxmX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAjIElmIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3IgZGlkbid0IGRvIGFueXRoaW5nLCB0cmVhdCB0aGlzCisgICAgICAgICAgICAjIGxpa2UgYW4gaW5zdGFuY2UgbWV0aG9kCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlX3VuYm91bmRfbWV0aG9kKCkuX19nZXRfXyhvYmosIGNscykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9faXNhYnN0cmFjdG1ldGhvZF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLmZ1bmMsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIsIEZhbHNlKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgTFJVIENhY2hlIGZ1bmN0aW9uIGRlY29yYXRvcgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjIwLDcgKzM5Nyw2IEBACiAgICAgUFJFViwgTkVYVCwgS0VZLCBSRVNVTFQgPSAwLCAxLCAyLCAzICAgIyBuYW1lcyBmb3IgdGhlIGxpbmsgZmllbGRzCiAKICAgICBkZWYgZGVjb3JhdGluZ19mdW5jdGlvbih1c2VyX2Z1bmN0aW9uKToKLQogICAgICAgICBjYWNoZSA9IHt9CiAgICAgICAgIGhpdHMgPSBtaXNzZXMgPSAwCiAgICAgICAgIGZ1bGwgPSBGYWxzZQpAQCAtMzI5LDMgKzUwNSwyMTAgQEAKICAgICAgICAgcmV0dXJuIHVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIHVzZXJfZnVuY3Rpb24pCiAKICAgICByZXR1cm4gZGVjb3JhdGluZ19mdW5jdGlvbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgc2luZ2xlZGlzcGF0Y2goKSAtIHNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIGRlY29yYXRvcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIF9jM19tZXJnZShzZXF1ZW5jZXMpOgorICAgICIiIk1lcmdlcyBNUk9zIGluICpzZXF1ZW5jZXMqIHRvIGEgc2luZ2xlIE1STyB1c2luZyB0aGUgQzMgYWxnb3JpdGhtLgorCisgICAgQWRhcHRlZCBmcm9tIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy4KKworICAgICIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgc2VxdWVuY2VzID0gW3MgZm9yIHMgaW4gc2VxdWVuY2VzIGlmIHNdICAgIyBwdXJnZSBlbXB0eSBzZXF1ZW5jZXMKKyAgICAgICAgaWYgbm90IHNlcXVlbmNlczoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZm9yIHMxIGluIHNlcXVlbmNlczogICAjIGZpbmQgbWVyZ2UgY2FuZGlkYXRlcyBhbW9uZyBzZXEgaGVhZHMKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHMxWzBdCisgICAgICAgICAgICBmb3IgczIgaW4gc2VxdWVuY2VzOgorICAgICAgICAgICAgICAgIGlmIGNhbmRpZGF0ZSBpbiBzMlsxOl06CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgICAgICAjIHJlamVjdCB0aGUgY3VycmVudCBoZWFkLCBpdCBhcHBlYXJzIGxhdGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBjYW5kaWRhdGU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkluY29uc2lzdGVudCBoaWVyYXJjaHkiKQorICAgICAgICByZXN1bHQuYXBwZW5kKGNhbmRpZGF0ZSkKKyAgICAgICAgIyByZW1vdmUgdGhlIGNob3NlbiBjYW5kaWRhdGUKKyAgICAgICAgZm9yIHNlcSBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICBpZiBzZXFbMF0gPT0gY2FuZGlkYXRlOgorICAgICAgICAgICAgICAgIGRlbCBzZXFbMF0KKworZGVmIF9jM19tcm8oY2xzLCBhYmNzPU5vbmUpOgorICAgICIiIkNvbXB1dGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciB1c2luZyBleHRlbmRlZCBDMyBsaW5lYXJpemF0aW9uLgorCisgICAgSWYgbm8gKmFiY3MqIGFyZSBnaXZlbiwgdGhlIGFsZ29yaXRobSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlIGJ1aWx0LWluIEMzCisgICAgbGluZWFyaXphdGlvbiB1c2VkIGZvciBtZXRob2QgcmVzb2x1dGlvbi4KKworICAgIElmIGdpdmVuLCAqYWJjcyogaXMgYSBsaXN0IG9mIGFic3RyYWN0IGJhc2UgY2xhc3NlcyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZAorICAgIGludG8gdGhlIHJlc3VsdGluZyBNUk8uIFVucmVsYXRlZCBBQkNzIGFyZSBpZ25vcmVkIGFuZCBkb24ndCBlbmQgdXAgaW4gdGhlCisgICAgcmVzdWx0LiBUaGUgYWxnb3JpdGhtIGluc2VydHMgQUJDcyB3aGVyZSB0aGVpciBmdW5jdGlvbmFsaXR5IGlzIGludHJvZHVjZWQsCisgICAgaS5lLiBpc3N1YmNsYXNzKGNscywgYWJjKSByZXR1cm5zIFRydWUgZm9yIHRoZSBjbGFzcyBpdHNlbGYgYnV0IHJldHVybnMKKyAgICBGYWxzZSBmb3IgYWxsIGl0cyBkaXJlY3QgYmFzZSBjbGFzc2VzLiBJbXBsaWNpdCBBQkNzIGZvciBhIGdpdmVuIGNsYXNzCisgICAgKGVpdGhlciByZWdpc3RlcmVkIG9yIGluZmVycmVkIGZyb20gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lhbCBtZXRob2QgbGlrZQorICAgIF9fbGVuX18pIGFyZSBpbnNlcnRlZCBkaXJlY3RseSBhZnRlciB0aGUgbGFzdCBBQkMgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlCisgICAgTVJPIG9mIHNhaWQgY2xhc3MuIElmIHR3byBpbXBsaWNpdCBBQkNzIGVuZCB1cCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gdGhlCisgICAgcmVzdWx0aW5nIE1STywgdGhlaXIgb3JkZXJpbmcgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdHlwZXMgaW4gKmFiY3MqLgorCisgICAgIiIiCisgICAgZm9yIGksIGJhc2UgaW4gZW51bWVyYXRlKHJldmVyc2VkKGNscy5fX2Jhc2VzX18pKToKKyAgICAgICAgaWYgaGFzYXR0cihiYXNlLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgYm91bmRhcnkgPSBsZW4oY2xzLl9fYmFzZXNfXykgLSBpCisgICAgICAgICAgICBicmVhayAgICMgQmFzZXMgdXAgdG8gdGhlIGxhc3QgZXhwbGljaXQgQUJDIGFyZSBjb25zaWRlcmVkIGZpcnN0LgorICAgIGVsc2U6CisgICAgICAgIGJvdW5kYXJ5ID0gMAorICAgIGFiY3MgPSBsaXN0KGFiY3MpIGlmIGFiY3MgZWxzZSBbXQorICAgIGV4cGxpY2l0X2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fWzpib3VuZGFyeV0pCisgICAgYWJzdHJhY3RfYmFzZXMgPSBbXQorICAgIG90aGVyX2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fW2JvdW5kYXJ5Ol0pCisgICAgZm9yIGJhc2UgaW4gYWJjczoKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhjbHMsIGJhc2UpIGFuZCBub3QgYW55KAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoYiwgYmFzZSkgZm9yIGIgaW4gY2xzLl9fYmFzZXNfXworICAgICAgICAgICAgKToKKyAgICAgICAgICAgICMgSWYgKmNscyogaXMgdGhlIGNsYXNzIHRoYXQgaW50cm9kdWNlcyBiZWhhdmlvdXIgZGVzY3JpYmVkIGJ5CisgICAgICAgICAgICAjIGFuIEFCQyAqYmFzZSosIGluc2VydCBzYWlkIEFCQyB0byBpdHMgTVJPLgorICAgICAgICAgICAgYWJzdHJhY3RfYmFzZXMuYXBwZW5kKGJhc2UpCisgICAgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXM6CisgICAgICAgIGFiY3MucmVtb3ZlKGJhc2UpCisgICAgZXhwbGljaXRfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gZXhwbGljaXRfYmFzZXNdCisgICAgYWJzdHJhY3RfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXNdCisgICAgb3RoZXJfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gb3RoZXJfYmFzZXNdCisgICAgcmV0dXJuIF9jM19tZXJnZSgKKyAgICAgICAgW1tjbHNdXSArCisgICAgICAgIGV4cGxpY2l0X2MzX21yb3MgKyBhYnN0cmFjdF9jM19tcm9zICsgb3RoZXJfYzNfbXJvcyArCisgICAgICAgIFtleHBsaWNpdF9iYXNlc10gKyBbYWJzdHJhY3RfYmFzZXNdICsgW290aGVyX2Jhc2VzXQorICAgICkKKworZGVmIF9jb21wb3NlX21ybyhjbHMsIHR5cGVzKToKKyAgICAiIiJDYWxjdWxhdGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgYSBnaXZlbiBjbGFzcyAqY2xzKi4KKworICAgIEluY2x1ZGVzIHJlbGV2YW50IGFic3RyYWN0IGJhc2UgY2xhc3NlcyAod2l0aCB0aGVpciByZXNwZWN0aXZlIGJhc2VzKSBmcm9tCisgICAgdGhlICp0eXBlcyogaXRlcmFibGUuIFVzZXMgYSBtb2RpZmllZCBDMyBsaW5lYXJpemF0aW9uIGFsZ29yaXRobS4KKworICAgICIiIgorICAgIGJhc2VzID0gc2V0KGNscy5fX21yb19fKQorICAgICMgUmVtb3ZlIGVudHJpZXMgd2hpY2ggYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgX19tcm9fXyBvciB1bnJlbGF0ZWQuCisgICAgZGVmIGlzX3JlbGF0ZWQodHlwKToKKyAgICAgICAgcmV0dXJuICh0eXAgbm90IGluIGJhc2VzIGFuZCBoYXNhdHRyKHR5cCwgJ19fbXJvX18nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlzc3ViY2xhc3MoY2xzLCB0eXApKQorICAgIHR5cGVzID0gW24gZm9yIG4gaW4gdHlwZXMgaWYgaXNfcmVsYXRlZChuKV0KKyAgICAjIFJlbW92ZSBlbnRyaWVzIHdoaWNoIGFyZSBzdHJpY3QgYmFzZXMgb2Ygb3RoZXIgZW50cmllcyAodGhleSB3aWxsIGVuZCB1cAorICAgICMgaW4gdGhlIE1STyBhbnl3YXkuCisgICAgZGVmIGlzX3N0cmljdF9iYXNlKHR5cCk6CisgICAgICAgIGZvciBvdGhlciBpbiB0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cCAhPSBvdGhlciBhbmQgdHlwIGluIG90aGVyLl9fbXJvX186CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgdHlwZXMgPSBbbiBmb3IgbiBpbiB0eXBlcyBpZiBub3QgaXNfc3RyaWN0X2Jhc2UobildCisgICAgIyBTdWJjbGFzc2VzIG9mIHRoZSBBQkNzIGluICp0eXBlcyogd2hpY2ggYXJlIGFsc28gaW1wbGVtZW50ZWQgYnkKKyAgICAjICpjbHMqIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBBQkMgb3JkZXJpbmcuCisgICAgdHlwZV9zZXQgPSBzZXQodHlwZXMpCisgICAgbXJvID0gW10KKyAgICBmb3IgdHlwIGluIHR5cGVzOgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBzdWIgaW4gdHlwLl9fc3ViY2xhc3Nlc19fKCk6CisgICAgICAgICAgICBpZiBzdWIgbm90IGluIGJhc2VzIGFuZCBpc3N1YmNsYXNzKGNscywgc3ViKToKKyAgICAgICAgICAgICAgICBmb3VuZC5hcHBlbmQoW3MgZm9yIHMgaW4gc3ViLl9fbXJvX18gaWYgcyBpbiB0eXBlX3NldF0pCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIG1yby5hcHBlbmQodHlwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBGYXZvciBzdWJjbGFzc2VzIHdpdGggdGhlIGJpZ2dlc3QgbnVtYmVyIG9mIHVzZWZ1bCBiYXNlcworICAgICAgICBmb3VuZC5zb3J0KGtleT1sZW4sIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgZm9yIHN1YiBpbiBmb3VuZDoKKyAgICAgICAgICAgIGZvciBzdWJjbHMgaW4gc3ViOgorICAgICAgICAgICAgICAgIGlmIHN1YmNscyBub3QgaW4gbXJvOgorICAgICAgICAgICAgICAgICAgICBtcm8uYXBwZW5kKHN1YmNscykKKyAgICByZXR1cm4gX2MzX21ybyhjbHMsIGFiY3M9bXJvKQorCitkZWYgX2ZpbmRfaW1wbChjbHMsIHJlZ2lzdHJ5KToKKyAgICAiIiJSZXR1cm5zIHRoZSBiZXN0IG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIGZyb20gKnJlZ2lzdHJ5KiBmb3IgdHlwZSAqY2xzKi4KKworICAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzIG1ldGhvZAorICAgIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorCisgICAgTm90ZTogaWYgKnJlZ2lzdHJ5KiBkb2VzIG5vdCBjb250YWluIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYmFzZQorICAgICpvYmplY3QqIHR5cGUsIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOb25lLgorCisgICAgIiIiCisgICAgbXJvID0gX2NvbXBvc2VfbXJvKGNscywgcmVnaXN0cnkua2V5cygpKQorICAgIG1hdGNoID0gTm9uZQorICAgIGZvciB0IGluIG1ybzoKKyAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIElmICptYXRjaCogaXMgYW4gaW1wbGljaXQgQUJDIGJ1dCB0aGVyZSBpcyBhbm90aGVyIHVucmVsYXRlZCwKKyAgICAgICAgICAgICMgZXF1YWxseSBtYXRjaGluZyBpbXBsaWNpdCBBQkMsIHJlZnVzZSB0aGUgdGVtcHRhdGlvbiB0byBndWVzcy4KKyAgICAgICAgICAgIGlmICh0IGluIHJlZ2lzdHJ5IGFuZCB0IG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hdGNoIG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpc3N1YmNsYXNzKG1hdGNoLCB0KSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IHt9IG9yIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG1hdGNoLCB0KSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6CisgICAgICAgICAgICBtYXRjaCA9IHQKKyAgICByZXR1cm4gcmVnaXN0cnkuZ2V0KG1hdGNoKQorCitkZWYgc2luZ2xlZGlzcGF0Y2goZnVuYyk6CisgICAgIiIiU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yLgorCisgICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSBnZW5lcmljIGZ1bmN0aW9uLCB3aGljaCBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICBiZWhhdmlvdXJzIGRlcGVuZGluZyB1cG9uIHRoZSB0eXBlIG9mIGl0cyBmaXJzdCBhcmd1bWVudC4gVGhlIGRlY29yYXRlZAorICAgIGZ1bmN0aW9uIGFjdHMgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuZCBhZGRpdGlvbmFsCisgICAgaW1wbGVtZW50YXRpb25zIGNhbiBiZSByZWdpc3RlcmVkIHVzaW5nIHRoZSByZWdpc3RlcigpIGF0dHJpYnV0ZSBvZiB0aGUKKyAgICBnZW5lcmljIGZ1bmN0aW9uLgorCisgICAgIiIiCisgICAgcmVnaXN0cnkgPSB7fQorICAgIGRpc3BhdGNoX2NhY2hlID0gV2Vha0tleURpY3Rpb25hcnkoKQorICAgIGNhY2hlX3Rva2VuID0gTm9uZQorCisgICAgZGVmIGRpc3BhdGNoKGNscyk6CisgICAgICAgICIiImdlbmVyaWNfZnVuYy5kaXNwYXRjaChjbHMpIC0+IDxmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj4KKworICAgICAgICBSdW5zIHRoZSBkaXNwYXRjaCBhbGdvcml0aG0gdG8gcmV0dXJuIHRoZSBiZXN0IGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3IgdGhlIGdpdmVuICpjbHMqIHJlZ2lzdGVyZWQgb24gKmdlbmVyaWNfZnVuYyouCisKKyAgICAgICAgIiIiCisgICAgICAgIG5vbmxvY2FsIGNhY2hlX3Rva2VuCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3VycmVudF90b2tlbiA9IGdldF9jYWNoZV90b2tlbigpCisgICAgICAgICAgICBpZiBjYWNoZV90b2tlbiAhPSBjdXJyZW50X3Rva2VuOgorICAgICAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBjYWNoZV90b2tlbiA9IGN1cnJlbnRfdG9rZW4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wbCA9IGRpc3BhdGNoX2NhY2hlW2Nsc10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcGwgPSByZWdpc3RyeVtjbHNdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaW1wbCA9IF9maW5kX2ltcGwoY2xzLCByZWdpc3RyeSkKKyAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlW2Nsc10gPSBpbXBsCisgICAgICAgIHJldHVybiBpbXBsCisKKyAgICBkZWYgcmVnaXN0ZXIoY2xzLCBmdW5jPU5vbmUpOgorICAgICAgICAiIiJnZW5lcmljX2Z1bmMucmVnaXN0ZXIoY2xzLCBmdW5jKSAtPiBmdW5jCisKKyAgICAgICAgUmVnaXN0ZXJzIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gKmNscyogb24gYSAqZ2VuZXJpY19mdW5jKi4KKworICAgICAgICAiIiIKKyAgICAgICAgbm9ubG9jYWwgY2FjaGVfdG9rZW4KKyAgICAgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3RlcihjbHMsIGYpCisgICAgICAgIHJlZ2lzdHJ5W2Nsc10gPSBmdW5jCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIE5vbmUgYW5kIGhhc2F0dHIoY2xzLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgY2FjaGVfdG9rZW4gPSBnZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBkaXNwYXRjaF9jYWNoZS5jbGVhcigpCisgICAgICAgIHJldHVybiBmdW5jCisKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgIHJldHVybiBkaXNwYXRjaChhcmdzWzBdLl9fY2xhc3NfXykoKmFyZ3MsICoqa3cpCisKKyAgICByZWdpc3RyeVtvYmplY3RdID0gZnVuYworICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgorICAgIHdyYXBwZXIuZGlzcGF0Y2ggPSBkaXNwYXRjaAorICAgIHdyYXBwZXIucmVnaXN0cnkgPSBNYXBwaW5nUHJveHlUeXBlKHJlZ2lzdHJ5KQorICAgIHdyYXBwZXIuX2NsZWFyX2NhY2hlID0gZGlzcGF0Y2hfY2FjaGUuY2xlYXIKKyAgICB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmdW5jKQorICAgIHJldHVybiB3cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvZ2VuZXJpY3BhdGgucHkgYi9MaWIvZ2VuZXJpY3BhdGgucHkKaW5kZXggMzQwYzAwNC4uY2E0YTUxMCAxMDA2NDQKLS0tIGEvTGliL2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi9nZW5lcmljcGF0aC5weQpAQCAtNyw3ICs3LDggQEAKIGltcG9ydCBzdGF0CiAKIF9fYWxsX18gPSBbJ2NvbW1vbnByZWZpeCcsICdleGlzdHMnLCAnZ2V0YXRpbWUnLCAnZ2V0Y3RpbWUnLCAnZ2V0bXRpbWUnLAotICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnXQorICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnLCAnc2FtZWZpbGUnLCAnc2FtZW9wZW5maWxlJywKKyAgICAgICAgICAgJ3NhbWVzdGF0J10KIAogCiAjIERvZXMgYSBwYXRoIGV4aXN0PwpAQCAtMTYsNyArMTcsNyBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yNyw3ICsyOCw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTUkVHKHN0LnN0X21vZGUpCiAKQEAgLTM5LDcgKzQwLDcgQEAKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3Muc3RhdChzKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQogCkBAIC03NSw2ICs3NiwzMSBAQAogICAgICAgICAgICAgcmV0dXJuIHMxWzppXQogICAgIHJldHVybiBzMQogCisjIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQorIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/CitkZWYgc2FtZXN0YXQoczEsIHMyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHJldHVybiAoczEuc3RfaW5vID09IHMyLnN0X2lubyBhbmQKKyAgICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYpCisKKworIyBBcmUgdHdvIGZpbGVuYW1lcyByZWFsbHkgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZT8KK2RlZiBzYW1lZmlsZShmMSwgZjIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgorICAgIHMxID0gb3Muc3RhdChmMSkKKyAgICBzMiA9IG9zLnN0YXQoZjIpCisgICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKKworCisjIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KKyMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQorZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHMxID0gb3MuZnN0YXQoZnAxKQorICAgIHMyID0gb3MuZnN0YXQoZnAyKQorICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCisKKwogIyBTcGxpdCBhIHBhdGggaW4gcm9vdCBhbmQgZXh0ZW5zaW9uLgogIyBUaGUgZXh0ZW5zaW9uIGlzIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgdGhlIGxhc3QgZG90IGluIHRoZSBsYXN0CiAjIHBhdGhuYW1lIGNvbXBvbmVudDsgdGhlIHJvb3QgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhhdC4KZGlmZiAtLWdpdCBhL0xpYi9nZXRwYXNzLnB5IGIvTGliL2dldHBhc3MucHkKaW5kZXggMDA0NDc0Mi4uNTNjMzhiOCAxMDA2NDQKLS0tIGEvTGliL2dldHBhc3MucHkKKysrIGIvTGliL2dldHBhc3MucHkKQEAgLTE1LDcgKzE1LDExIEBACiAjICAgICAgICAgIEd1aWRvIHZhbiBSb3NzdW0gKFdpbmRvd3Mgc3VwcG9ydCBhbmQgY2xlYW51cCkKICMgICAgICAgICAgR3JlZ29yeSBQLiBTbWl0aCAodHR5IHN1cHBvcnQgJiBHZXRQYXNzV2FybmluZykKIAotaW1wb3J0IG9zLCBzeXMsIHdhcm5pbmdzCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncwogCiBfX2FsbF9fID0gWyJnZXRwYXNzIiwiZ2V0dXNlciIsIkdldFBhc3NXYXJuaW5nIl0KIApAQCAtMzgsNTIgKzQyLDU3IEBACiAKICAgICBBbHdheXMgcmVzdG9yZXMgdGVybWluYWwgc2V0dGluZ3MgYmVmb3JlIHJldHVybmluZy4KICAgICAiIiIKLSAgICBmZCA9IE5vbmUKLSAgICB0dHkgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICAjIEFsd2F5cyB0cnkgcmVhZGluZyBhbmQgd3JpdGluZyBkaXJlY3RseSBvbiB0aGUgdHR5IGZpcnN0LgotICAgICAgICBmZCA9IG9zLm9wZW4oJy9kZXYvdHR5Jywgb3MuT19SRFdSfG9zLk9fTk9DVFRZKQotICAgICAgICB0dHkgPSBvcy5mZG9wZW4oZmQsICd3KycsIDEpCi0gICAgICAgIGlucHV0ID0gdHR5Ci0gICAgICAgIGlmIG5vdCBzdHJlYW06Ci0gICAgICAgICAgICBzdHJlYW0gPSB0dHkKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgotICAgICAgICAjIElmIHRoYXQgZmFpbHMsIHNlZSBpZiBzdGRpbiBjYW4gYmUgY29udHJvbGxlZC4KKyAgICBwYXNzd2QgPSBOb25lCisgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmZCA9IHN5cy5zdGRpbi5maWxlbm8oKQotICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCi0gICAgICAgIGlucHV0ID0gc3lzLnN0ZGluCi0gICAgICAgIGlmIG5vdCBzdHJlYW06Ci0gICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCi0KLSAgICBpZiBmZCBpcyBub3QgTm9uZToKLSAgICAgICAgcGFzc3dkID0gTm9uZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvbGQgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkgICAgICMgYSBjb3B5IHRvIHNhdmUKLSAgICAgICAgICAgIG5ldyA9IG9sZFs6XQotICAgICAgICAgICAgbmV3WzNdICY9IH50ZXJtaW9zLkVDSE8gICMgMyA9PSAnbGZsYWdzJwotICAgICAgICAgICAgdGNzZXRhdHRyX2ZsYWdzID0gdGVybWlvcy5UQ1NBRkxVU0gKLSAgICAgICAgICAgIGlmIGhhc2F0dHIodGVybWlvcywgJ1RDU0FTT0ZUJyk6Ci0gICAgICAgICAgICAgICAgdGNzZXRhdHRyX2ZsYWdzIHw9IHRlcm1pb3MuVENTQVNPRlQKKyAgICAgICAgICAgICMgQWx3YXlzIHRyeSByZWFkaW5nIGFuZCB3cml0aW5nIGRpcmVjdGx5IG9uIHRoZSB0dHkgZmlyc3QuCisgICAgICAgICAgICBmZCA9IG9zLm9wZW4oJy9kZXYvdHR5Jywgb3MuT19SRFdSfG9zLk9fTk9DVFRZKQorICAgICAgICAgICAgdHR5ID0gaW8uRmlsZUlPKGZkLCAndysnKQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dCh0dHkpCisgICAgICAgICAgICBpbnB1dCA9IGlvLlRleHRJT1dyYXBwZXIodHR5KQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChpbnB1dCkKKyAgICAgICAgICAgIGlmIG5vdCBzdHJlYW06CisgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5wdXQKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgSWYgdGhhdCBmYWlscywgc2VlIGlmIHN0ZGluIGNhbiBiZSBjb250cm9sbGVkLgorICAgICAgICAgICAgc3RhY2suY2xvc2UoKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0Y3NldGF0dHJfZmxhZ3MsIG5ldykKLSAgICAgICAgICAgICAgICBwYXNzd2QgPSBfcmF3X2lucHV0KHByb21wdCwgc3RyZWFtLCBpbnB1dD1pbnB1dCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRjc2V0YXR0cl9mbGFncywgb2xkKQotICAgICAgICAgICAgICAgIHN0cmVhbS5mbHVzaCgpICAjIGlzc3VlNzIwOAotICAgICAgICBleGNlcHQgdGVybWlvcy5lcnJvcjoKLSAgICAgICAgICAgIGlmIHBhc3N3ZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAjIF9yYXdfaW5wdXQgc3VjY2VlZGVkLiAgVGhlIGZpbmFsIHRjc2V0YXR0ciBmYWlsZWQuICBSZXJhaXNlCi0gICAgICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHRlcm1pbmFsIGluIGFuIHVua25vd24gc3RhdGUuCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICMgV2UgY2FuJ3QgY29udHJvbCB0aGUgdHR5IG9yIHN0ZGluLiAgR2l2ZSB1cCBhbmQgdXNlIG5vcm1hbCBJTy4KLSAgICAgICAgICAgICMgZmFsbGJhY2tfZ2V0cGFzcygpIHJhaXNlcyBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nLgotICAgICAgICAgICAgZGVsIGlucHV0LCB0dHkgICMgY2xlYW4gdXAgdW51c2VkIGZpbGUgb2JqZWN0cyBiZWZvcmUgYmxvY2tpbmcKLSAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisgICAgICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGZkID0gTm9uZQorICAgICAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisgICAgICAgICAgICBpbnB1dCA9IHN5cy5zdGRpbgorICAgICAgICAgICAgaWYgbm90IHN0cmVhbToKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCiAKLSAgICBzdHJlYW0ud3JpdGUoJ1xuJykKLSAgICByZXR1cm4gcGFzc3dkCisgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKSAgICAgIyBhIGNvcHkgdG8gc2F2ZQorICAgICAgICAgICAgICAgIG5ldyA9IG9sZFs6XQorICAgICAgICAgICAgICAgIG5ld1szXSAmPSB+dGVybWlvcy5FQ0hPICAjIDMgPT0gJ2xmbGFncycKKyAgICAgICAgICAgICAgICB0Y3NldGF0dHJfZmxhZ3MgPSB0ZXJtaW9zLlRDU0FGTFVTSAorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIodGVybWlvcywgJ1RDU0FTT0ZUJyk6CisgICAgICAgICAgICAgICAgICAgIHRjc2V0YXR0cl9mbGFncyB8PSB0ZXJtaW9zLlRDU0FTT0ZUCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGNzZXRhdHRyX2ZsYWdzLCBuZXcpCisgICAgICAgICAgICAgICAgICAgIHBhc3N3ZCA9IF9yYXdfaW5wdXQocHJvbXB0LCBzdHJlYW0sIGlucHV0PWlucHV0KQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0Y3NldGF0dHJfZmxhZ3MsIG9sZCkKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmZsdXNoKCkgICMgaXNzdWU3MjA4CisgICAgICAgICAgICBleGNlcHQgdGVybWlvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBwYXNzd2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgX3Jhd19pbnB1dCBzdWNjZWVkZWQuICBUaGUgZmluYWwgdGNzZXRhdHRyIGZhaWxlZC4gIFJlcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHRlcm1pbmFsIGluIGFuIHVua25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCBjb250cm9sIHRoZSB0dHkgb3Igc3RkaW4uICBHaXZlIHVwIGFuZCB1c2Ugbm9ybWFsIElPLgorICAgICAgICAgICAgICAgICMgZmFsbGJhY2tfZ2V0cGFzcygpIHJhaXNlcyBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nLgorICAgICAgICAgICAgICAgIGlmIHN0cmVhbSBpcyBub3QgaW5wdXQ6CisgICAgICAgICAgICAgICAgICAgICMgY2xlYW4gdXAgdW51c2VkIGZpbGUgb2JqZWN0cyBiZWZvcmUgYmxvY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisKKyAgICAgICAgc3RyZWFtLndyaXRlKCdcbicpCisgICAgICAgIHJldHVybiBwYXNzd2QKIAogCiBkZWYgd2luX2dldHBhc3MocHJvbXB0PSdQYXNzd29yZDogJywgc3RyZWFtPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2dldHRleHQucHkgYi9MaWIvZ2V0dGV4dC5weQppbmRleCBlNDNmMDQ0Li4wNWQ5YzFlIDEwMDY0NAotLS0gYS9MaWIvZ2V0dGV4dC5weQorKysgYi9MaWIvZ2V0dGV4dC5weQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgICAgICAgICB2ZXJzaW9uLCBtc2djb3VudCwgbWFzdGVyaWR4LCB0cmFuc2lkeCA9IHVucGFjaygnPjRJJywgYnVmWzQ6MjBdKQogICAgICAgICAgICAgaWkgPSAnPklJJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQogICAgICAgICAjIE5vdyBwdXQgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIC5tbyBmaWxlIGJ1ZmZlciBpbnRvIHRoZSBjYXRhbG9nCiAgICAgICAgICMgZGljdGlvbmFyeS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbXNnY291bnQpOgpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gYnVmW21vZmY6bWVuZF0KICAgICAgICAgICAgICAgICB0bXNnID0gYnVmW3RvZmY6dGVuZF0KICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCiAgICAgICAgICAgICAjIFNlZSBpZiB3ZSdyZSBsb29raW5nIGF0IEdOVSAubW8gY29udmVudGlvbnMgZm9yIG1ldGFkYXRhCiAgICAgICAgICAgICBpZiBtbGVuID09IDA6CiAgICAgICAgICAgICAgICAgIyBDYXRhbG9nIGRlc2NyaXB0aW9uCkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICBpZiBub3QgbW9maWxlczoKICAgICAgICAgaWYgZmFsbGJhY2s6CiAgICAgICAgICAgICByZXR1cm4gTnVsbFRyYW5zbGF0aW9ucygpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoRU5PRU5ULCAnTm8gdHJhbnNsYXRpb24gZmlsZSBmb3VuZCBmb3IgZG9tYWluJywgZG9tYWluKQorICAgICAgICByYWlzZSBPU0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKICAgICAjIEF2b2lkIG9wZW5pbmcsIHJlYWRpbmcsIGFuZCBwYXJzaW5nIHRoZSAubW8gZmlsZSBhZnRlciBpdCdzIGJlZW4gZG9uZQogICAgICMgb25jZS4KICAgICByZXN1bHQgPSBOb25lCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQuZ2V0dGV4dChtZXNzYWdlKQogCkBAIC00NjgsNyArNDY4LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQubGdldHRleHQobWVzc2FnZSkKIApAQCAtNDc2LDcgKzQ3Niw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CkBAIC00ODcsNyArNDg3LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIG4gPT0gMToKICAgICAgICAgICAgIHJldHVybiBtc2dpZDEKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9nbG9iLnB5IGIvTGliL2dsb2IucHkKaW5kZXggMWY2MDI2NS4uZTM4OGI1ZiAxMDA2NDQKLS0tIGEvTGliL2dsb2IucHkKKysrIGIvTGliL2dsb2IucHkKQEAgLTMyLDggKzMyLDcgQEAKICAgICAgICAgcmV0dXJuCiAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQogICAgIGlmIG5vdCBkaXJuYW1lOgotICAgICAgICBmb3IgbmFtZSBpbiBnbG9iMShOb25lLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBuYW1lCisgICAgICAgIHlpZWxkIGZyb20gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpCiAgICAgICAgIHJldHVybgogICAgICMgYG9zLnBhdGguc3BsaXQoKWAgcmV0dXJucyB0aGUgYXJndW1lbnQgaXRzZWxmIGFzIGEgZGlybmFtZSBpZiBpdCBpcyBhCiAgICAgIyBkcml2ZSBvciBVTkMgcGF0aC4gIFByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGlmIGEgZHJpdmUgb3IgVU5DIHBhdGgKQEAgLTYyLDcgKzYxLDcgQEAKICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbm90IF9pc2hpZGRlbihwYXR0ZXJuKToKICAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBuYW1lcyBpZiBub3QgX2lzaGlkZGVuKHgpXQpAQCAtODAsOCArNzksOCBAQAogICAgIHJldHVybiBbXQogCiAKLW1hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnWyo/W10nKQotbWFnaWNfY2hlY2tfYnl0ZXMgPSByZS5jb21waWxlKGInWyo/W10nKQorbWFnaWNfY2hlY2sgPSByZS5jb21waWxlKCcoWyo/W10pJykKK21hZ2ljX2NoZWNrX2J5dGVzID0gcmUuY29tcGlsZShiJyhbKj9bXSknKQogCiBkZWYgaGFzX21hZ2ljKHMpOgogICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgpAQCAtOTIsMyArOTEsMTUgQEAKIAogZGVmIF9pc2hpZGRlbihwYXRoKToKICAgICByZXR1cm4gcGF0aFswXSBpbiAoJy4nLCBiJy4nWzBdKQorCitkZWYgZXNjYXBlKHBhdGhuYW1lKToKKyAgICAiIiJFc2NhcGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICAiIiIKKyAgICAjIEVzY2FwaW5nIGlzIGRvbmUgYnkgd3JhcHBpbmcgYW55IG9mICIqP1siIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzLgorICAgICMgTWV0YWNoYXJhY3RlcnMgZG8gbm90IHdvcmsgaW4gdGhlIGRyaXZlIHBhcnQgYW5kIHNob3VsZG4ndCBiZSBlc2NhcGVkLgorICAgIGRyaXZlLCBwYXRobmFtZSA9IG9zLnBhdGguc3BsaXRkcml2ZShwYXRobmFtZSkKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhuYW1lLCBieXRlcyk6CisgICAgICAgIHBhdGhuYW1lID0gbWFnaWNfY2hlY2tfYnl0ZXMuc3ViKGJyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICBlbHNlOgorICAgICAgICBwYXRobmFtZSA9IG1hZ2ljX2NoZWNrLnN1YihyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICByZXR1cm4gZHJpdmUgKyBwYXRobmFtZQpkaWZmIC0tZ2l0IGEvTGliL2d6aXAucHkgYi9MaWIvZ3ppcC5weQppbmRleCAyZmQwM2ZhLi44ZDIxZmU0IDEwMDY0NAotLS0gYS9MaWIvZ3ppcC5weQorKysgYi9MaWIvZ3ppcC5weQpAQCAtMjMsOSArMjMsOSBAQAogICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgogICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgImEiIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLAotICAgIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUKLSAgICBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJ4IiwgInhiIiwgImEiIG9yICJhYiIgZm9yCisgICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzCisgICAgInJiIiwgYW5kIHRoZSBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KIAogICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBHemlwRmlsZSBjb25zdHJ1Y3RvcjoKICAgICBHemlwRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKQEAgLTY1LDkgKzY1LDYgQEAKICAgICAjIG9yIHVuc2lnbmVkLgogICAgIG91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCB2YWx1ZSkpCiAKLWRlZiByZWFkMzIoaW5wdXQpOgotICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCI8SSIsIGlucHV0LnJlYWQoNCkpWzBdCi0KIGNsYXNzIF9QYWRkZWRGaWxlOgogICAgICIiIk1pbmltYWwgcmVhZC1vbmx5IGZpbGUgb2JqZWN0IHRoYXQgcHJlcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzCiAgICAgb2YgYW4gYWN0dWFsIGZpbGUuIFNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgZ3ppcC5weSwgYXMgaXQgbGFja3MKQEAgLTE1NCwxMSArMTUxLDExIEBACiAgICAgICAgIGZpbGVvYmosIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsCiAgICAgICAgIGFuZCBpbiB0aGlzIGNhc2UgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCi0gICAgICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgJ3InLCAncmInLCAnYScsICdhYicsICd3Jywgb3IgJ3diJywKLSAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAorICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsICd3YicsICd4Jywgb3IKKyAgICAgICAgJ3hiJyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0CiAgICAgICAgIGlzIHRoZSBtb2RlIG9mIGZpbGVvYmogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgJ3JiJy4KICAgICAgICAgQSBtb2RlIG9mICdyJyBpcyBlcXVpdmFsZW50IHRvIG9uZSBvZiAncmInLCBhbmQgc2ltaWxhcmx5IGZvciAndycgYW5kCi0gICAgICAgICd3YicsIGFuZCAnYScgYW5kICdhYicuCisgICAgICAgICd3YicsICdhJyBhbmQgJ2FiJywgYW5kICd4JyBhbmQgJ3hiJy4KIAogICAgICAgICBUaGUgY29tcHJlc3NsZXZlbCBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5IGNvbnRyb2xsaW5nIHRoZQogICAgICAgICBsZXZlbCBvZiBjb21wcmVzc2lvbjsgMSBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sCkBAIC0yMDQsNyArMjAxLDcgQEAKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gMTAwCiAgICAgICAgICAgICBmaWxlb2JqID0gX1BhZGRlZEZpbGUoZmlsZW9iaikKIAotICAgICAgICBlbGlmIG1vZGUuc3RhcnRzd2l0aCgoJ3cnLCAnYScpKToKKyAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnLCAneCcpKToKICAgICAgICAgICAgIHNlbGYubW9kZSA9IFdSSVRFCiAgICAgICAgICAgICBzZWxmLl9pbml0X3dyaXRlKGZpbGVuYW1lKQogICAgICAgICAgICAgc2VsZi5jb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooY29tcHJlc3NsZXZlbCwKQEAgLTI4MSwyOCArMjc4LDMyIEBACiAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihiIiIpICYgMHhmZmZmZmZmZgogICAgICAgICBzZWxmLnNpemUgPSAwCiAKKyAgICBkZWYgX3JlYWRfZXhhY3Qoc2VsZiwgbik6CisgICAgICAgIGRhdGEgPSBzZWxmLmZpbGVvYmoucmVhZChuKQorICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgYiA9IHNlbGYuZmlsZW9iai5yZWFkKG4gLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBpZiBub3QgYjoKKyAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCisgICAgICAgICAgICBkYXRhICs9IGIKKyAgICAgICAgcmV0dXJuIGRhdGEKKwogICAgIGRlZiBfcmVhZF9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgbWFnaWMgPSBzZWxmLmZpbGVvYmoucmVhZCgyKQogICAgICAgICBpZiBtYWdpYyA9PSBiJyc6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgbWFnaWMgIT0gYidcMDM3XDIxMyc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOb3QgYSBnemlwcGVkIGZpbGUnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKIAotICAgICAgICBtZXRob2QgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKKyAgICAgICAgbWV0aG9kLCBmbGFnLCBzZWxmLm10aW1lID0gc3RydWN0LnVucGFjaygiPEJCSXh4Iiwgc2VsZi5fcmVhZF9leGFjdCg4KSkKICAgICAgICAgaWYgbWV0aG9kICE9IDg6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCi0gICAgICAgIGZsYWcgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKLSAgICAgICAgc2VsZi5tdGltZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopCi0gICAgICAgICMgZXh0cmFmbGFnID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKLSAgICAgICAgIyBvcyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCiAKICAgICAgICAgaWYgZmxhZyAmIEZFWFRSQToKICAgICAgICAgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIGV4dHJhIGZpZWxkLCBpZiBwcmVzZW50Ci0gICAgICAgICAgICB4bGVuID0gb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgeGxlbiA9IHhsZW4gKyAyNTYqb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoeGxlbikKKyAgICAgICAgICAgIGV4dHJhX2xlbiwgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIHNlbGYuX3JlYWRfZXhhY3QoMikpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KGV4dHJhX2xlbikKICAgICAgICAgaWYgZmxhZyAmIEZOQU1FOgogICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTMxNiwxOCArMzE3LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHMgb3Igcz09YidcMDAwJzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQwogCiAgICAgICAgIHVudXNlZCA9IHNlbGYuZmlsZW9iai51bnVzZWQoKQogICAgICAgICBpZiB1bnVzZWQ6CiAgICAgICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3ModW51c2VkKQogICAgICAgICAgICAgc2VsZi5fYWRkX3JlYWRfZGF0YSh1bmNvbXByZXNzKQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHdyaXRlKHNlbGYsZGF0YSk6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAid3JpdGUoKSBvbiByZWFkLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlKCkgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdCIpCkBAIC0zNDgsMjcgKzM1MCwyMyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZCgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICByZWFkc2l6ZSA9IDEwMjQKICAgICAgICAgaWYgc2l6ZSA8IDA6ICAgICAgICAjIGdldCB0aGUgd2hvbGUgdGhpbmcKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKHJlYWRzaXplKQotICAgICAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCi0gICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCisgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAjIGp1c3QgZ2V0IHNvbWUgbW9yZSBvZiBpdAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdoaWxlIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWQocmVhZHNpemUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCiAKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KQEAgLTM4MSwxNyArMzc5LDE0IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGb3IgY2VydGFpbiBpbnB1dCBkYXRhLCBhIHNpbmdsZSBjYWxsIHRvIF9yZWFkKCkgbWF5IG5vdCByZXR1cm4KLSAgICAgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCi0gICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCisgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCisgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuX3JlYWQoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2l6ZSA8IDAgb3Igc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCkBAIC00MDUsNyArNDAwLDcgQEAKICAgICBkZWYgcGVlayhzZWxmLCBuKToKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInBlZWsoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgIyBEbyBub3QgcmV0dXJuIHJpZGljdWxvdXNseSBzbWFsbCBidWZmZXJzLCBmb3Igb25lIGNvbW1vbiBpZGlvbQogICAgICAgICAjIGlzIHRvIGNhbGwgcGVlaygxKSBhbmQgZXhwZWN0IG1vcmUgYnl0ZXMgaW4gcmV0dXJuLgpAQCAtNDE0LDEyICs0MDksOSBAQAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA9PSAwOgogICAgICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgotICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgMTAyNCBpcyB0aGUgc2FtZSBidWZmZXJpbmcgaGV1cmlzdGljIHVzZWQgaW4gcmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1cm4gYiIiIGlmIHdlIGhhdmVuJ3QgcmVhY2hlZCBFT0YuCisgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPT0gMCBhbmQgc2VsZi5fcmVhZChtYXgobiwgMTAyNCkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5leHRyYXNpemUKQEAgLTQzMiwxMyArNDI0LDE0IEBACiAKICAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT0xMDI0KToKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgICAgICBzZWxmLl9pbml0X3JlYWQoKQotICAgICAgICAgICAgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgc2VsZi5kZWNvbXByZXNzID0gemxpYi5kZWNvbXByZXNzb2JqKC16bGliLk1BWF9XQklUUykKICAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBGYWxzZQogCkBAIC00NTUsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ1JlYWNoZWQgRU9GJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyhidWYpCiAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQpAQCAtNDcxLDYgKzQ2NCw3IEBACiAgICAgICAgICAgICAjIGEgbmV3IG1lbWJlciBvbiB0aGUgbmV4dCBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZgpAQCAtNDg1LDEzICs0NzksMTIgQEAKICAgICAgICAgIyBXZSBjaGVjayB0aGUgdGhhdCB0aGUgY29tcHV0ZWQgQ1JDIGFuZCBzaXplIG9mIHRoZQogICAgICAgICAjIHVuY29tcHJlc3NlZCBkYXRhIG1hdGNoZXMgdGhlIHN0b3JlZCB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIHNpemUKICAgICAgICAgIyBzdG9yZWQgaXMgdGhlIHRydWUgZmlsZSBzaXplIG1vZCAyKiozMi4KLSAgICAgICAgY3JjMzIgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICBpc2l6ZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopICAjIG1heSBleGNlZWQgMkdCCisgICAgICAgIGNyYzMyLCBpc2l6ZSA9IHN0cnVjdC51bnBhY2soIjxJSSIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIGNyYzMyICE9IHNlbGYuY3JjOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ1JDIGNoZWNrIGZhaWxlZCAlcyAhPSAlcyIgJSAoaGV4KGNyYzMyKSwKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgoc2VsZi5jcmMpKSkKICAgICAgICAgZWxpZiBpc2l6ZSAhPSAoc2VsZi5zaXplICYgMHhmZmZmZmZmZik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJJbmNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcHJvZHVjZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKIAogICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KICAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CkBAIC01NDAsNyArNTMzLDcgQEAKICAgICAgICAgJycnUmV0dXJuIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIHRvIHRoZQogICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIGZpbGUnJycKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCiAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKDApCiAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCiAgICAgICAgIHNlbGYuZXh0cmFidWYgPSBiIiIKQEAgLTU2NSw3ICs1NTgsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlZWsgZnJvbSBlbmQgbm90IHN1cHBvcnRlZCcpCiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBXUklURToKICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYub2Zmc2V0OgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTmVnYXRpdmUgc2VlayBpbiB3cml0ZSBtb2RlJykKICAgICAgICAgICAgIGNvdW50ID0gb2Zmc2V0IC0gc2VsZi5vZmZzZXQKICAgICAgICAgICAgIGNodW5rID0gYnl0ZXMoMTAyNCkKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGNvdW50IC8vIDEwMjQpOgpkaWZmIC0tZ2l0IGEvTGliL2hhc2hsaWIucHkgYi9MaWIvaGFzaGxpYi5weQppbmRleCAyMTQ1NGM3Li43NzY3M2YwIDEwMDY0NAotLS0gYS9MaWIvaGFzaGxpYi5weQorKysgYi9MaWIvaGFzaGxpYi5weQpAQCAtMSw0ICsxLDQgQEAKLSMgIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQorIy4gIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQogIyAgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCkBAIC01NCw0MCArNTQsNTIgQEAKIAogIyBUaGlzIHR1cGxlIGFuZCBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCkgbXVzdCBiZSBtb2RpZmllZCBpZiBhIG5ldwogIyBhbHdheXMgYXZhaWxhYmxlIGFsZ29yaXRobSBpcyBhZGRlZC4KLV9fYWx3YXlzX3N1cHBvcnRlZCA9ICgnbWQ1JywgJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJykKK19fYWx3YXlzX3N1cHBvcnRlZCA9ICgnbWQ1JywgJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJywKKyAgICAgICAgICAgICAgICAgICAgICAnc2hhM18yMjQnLCAnc2hhM18yNTYnLCAnc2hhM18zODQnLCAnc2hhM181MTInKQogCiBhbGdvcml0aG1zX2d1YXJhbnRlZWQgPSBzZXQoX19hbHdheXNfc3VwcG9ydGVkKQogYWxnb3JpdGhtc19hdmFpbGFibGUgPSBzZXQoX19hbHdheXNfc3VwcG9ydGVkKQogCiBfX2FsbF9fID0gX19hbHdheXNfc3VwcG9ydGVkICsgKCduZXcnLCAnYWxnb3JpdGhtc19ndWFyYW50ZWVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZ29yaXRobXNfYXZhaWxhYmxlJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZ29yaXRobXNfYXZhaWxhYmxlJywgJ3Bia2RmMl9obWFjJykKIAogCitfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUgPSB7fQorCiBkZWYgX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICBjYWNoZSA9IF9fYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZQorICAgIGNvbnN0cnVjdG9yID0gY2FjaGUuZ2V0KG5hbWUpCisgICAgaWYgY29uc3RydWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcgogICAgIHRyeToKICAgICAgICAgaWYgbmFtZSBpbiAoJ1NIQTEnLCAnc2hhMScpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGExCi0gICAgICAgICAgICByZXR1cm4gX3NoYTEuc2hhMQorICAgICAgICAgICAgY2FjaGVbJ1NIQTEnXSA9IGNhY2hlWydzaGExJ10gPSBfc2hhMS5zaGExCiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ01ENScsICdtZDUnKToKICAgICAgICAgICAgIGltcG9ydCBfbWQ1Ci0gICAgICAgICAgICByZXR1cm4gX21kNS5tZDUKKyAgICAgICAgICAgIGNhY2hlWydNRDUnXSA9IGNhY2hlWydtZDUnXSA9IF9tZDUubWQ1CiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ1NIQTI1NicsICdzaGEyNTYnLCAnU0hBMjI0JywgJ3NoYTIyNCcpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGEyNTYKLSAgICAgICAgICAgIGJzID0gbmFtZVszOl0KLSAgICAgICAgICAgIGlmIGJzID09ICcyNTYnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhMjU2LnNoYTI1NgotICAgICAgICAgICAgZWxpZiBicyA9PSAnMjI0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTI1Ni5zaGEyMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEyMjQnXSA9IGNhY2hlWydzaGEyMjQnXSA9IF9zaGEyNTYuc2hhMjI0CisgICAgICAgICAgICBjYWNoZVsnU0hBMjU2J10gPSBjYWNoZVsnc2hhMjU2J10gPSBfc2hhMjU2LnNoYTI1NgogICAgICAgICBlbGlmIG5hbWUgaW4gKCdTSEE1MTInLCAnc2hhNTEyJywgJ1NIQTM4NCcsICdzaGEzODQnKToKICAgICAgICAgICAgIGltcG9ydCBfc2hhNTEyCi0gICAgICAgICAgICBicyA9IG5hbWVbMzpdCi0gICAgICAgICAgICBpZiBicyA9PSAnNTEyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTUxMi5zaGE1MTIKLSAgICAgICAgICAgIGVsaWYgYnMgPT0gJzM4NCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGE1MTIuc2hhMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBMzg0J10gPSBjYWNoZVsnc2hhMzg0J10gPSBfc2hhNTEyLnNoYTM4NAorICAgICAgICAgICAgY2FjaGVbJ1NIQTUxMiddID0gY2FjaGVbJ3NoYTUxMiddID0gX3NoYTUxMi5zaGE1MTIKKyAgICAgICAgZWxpZiBuYW1lIGluIHsnc2hhM18yMjQnLCAnc2hhM18yNTYnLCAnc2hhM18zODQnLCAnc2hhM181MTInLAorICAgICAgICAgICAgICAgICAgICAgICdTSEEzXzIyNCcsICdTSEEzXzI1NicsICdTSEEzXzM4NCcsICdTSEEzXzUxMid9OgorICAgICAgICAgICAgaW1wb3J0IF9zaGEzCisgICAgICAgICAgICBjYWNoZVsnU0hBM18yMjQnXSA9IGNhY2hlWydzaGEzXzIyNCddID0gX3NoYTMuc2hhM18yMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEzXzI1NiddID0gY2FjaGVbJ3NoYTNfMjU2J10gPSBfc2hhMy5zaGEzXzI1NgorICAgICAgICAgICAgY2FjaGVbJ1NIQTNfMzg0J10gPSBjYWNoZVsnc2hhM18zODQnXSA9IF9zaGEzLnNoYTNfMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBM181MTInXSA9IGNhY2hlWydzaGEzXzUxMiddID0gX3NoYTMuc2hhM181MTIKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MgICMgbm8gZXh0ZW5zaW9uIG1vZHVsZSwgdGhpcyBoYXNoIGlzIHVuc3VwcG9ydGVkLgogCisgICAgY29uc3RydWN0b3IgPSBjYWNoZS5nZXQobmFtZSkKKyAgICBpZiBjb25zdHJ1Y3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yCisKICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnN1cHBvcnRlZCBoYXNoIHR5cGUgJyArIG5hbWUpCiAKIApAQCAtMTM0LDYgKzE0Niw3MSBAQAogICAgIG5ldyA9IF9fcHlfbmV3CiAgICAgX19nZXRfaGFzaCA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IKIAordHJ5OgorICAgICMgT3BlblNTTCdzIFBLQ1M1X1BCS0RGMl9ITUFDIHJlcXVpcmVzIE9wZW5TU0wgMS4wKyB3aXRoIEhNQUMgYW5kIFNIQQorICAgIGZyb20gX2hhc2hsaWIgaW1wb3J0IHBia2RmMl9obWFjCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3RyYW5zXzVDID0gYnl0ZXMoKHggXiAweDVDKSBmb3IgeCBpbiByYW5nZSgyNTYpKQorICAgIF90cmFuc18zNiA9IGJ5dGVzKCh4IF4gMHgzNikgZm9yIHggaW4gcmFuZ2UoMjU2KSkKKworICAgIGRlZiBwYmtkZjJfaG1hYyhoYXNoX25hbWUsIHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBka2xlbj1Ob25lKToKKyAgICAgICAgIiIiUGFzc3dvcmQgYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMiAoUEtDUyAjNSB2Mi4wKQorCisgICAgICAgIFRoaXMgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiB0aGUgaG1hYyBtb2R1bGUgYWJvdXQgYXMgZmFzdAorICAgICAgICBhcyBPcGVuU1NMJ3MgUEtDUzVfUEJLREYyX0hNQUMgZm9yIHNob3J0IHBhc3N3b3JkcyBhbmQgbXVjaCBmYXN0ZXIKKyAgICAgICAgZm9yIGxvbmcgcGFzc3dvcmRzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaGFzaF9uYW1lLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKGhhc2hfbmFtZSkKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXNzd29yZCwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHBhc3N3b3JkID0gYnl0ZXMobWVtb3J5dmlldyhwYXNzd29yZCkpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNhbHQsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBzYWx0ID0gYnl0ZXMobWVtb3J5dmlldyhzYWx0KSkKKworICAgICAgICAjIEZhc3QgaW5saW5lIEhNQUMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaW5uZXIgPSBuZXcoaGFzaF9uYW1lKQorICAgICAgICBvdXRlciA9IG5ldyhoYXNoX25hbWUpCisgICAgICAgIGJsb2Nrc2l6ZSA9IGdldGF0dHIoaW5uZXIsICdibG9ja19zaXplJywgNjQpCisgICAgICAgIGlmIGxlbihwYXNzd29yZCkgPiBibG9ja3NpemU6CisgICAgICAgICAgICBwYXNzd29yZCA9IG5ldyhoYXNoX25hbWUsIHBhc3N3b3JkKS5kaWdlc3QoKQorICAgICAgICBwYXNzd29yZCA9IHBhc3N3b3JkICsgYidceDAwJyAqIChibG9ja3NpemUgLSBsZW4ocGFzc3dvcmQpKQorICAgICAgICBpbm5lci51cGRhdGUocGFzc3dvcmQudHJhbnNsYXRlKF90cmFuc18zNikpCisgICAgICAgIG91dGVyLnVwZGF0ZShwYXNzd29yZC50cmFuc2xhdGUoX3RyYW5zXzVDKSkKKworICAgICAgICBkZWYgcHJmKG1zZywgaW5uZXI9aW5uZXIsIG91dGVyPW91dGVyKToKKyAgICAgICAgICAgICMgUEJLREYyX0hNQUMgdXNlcyB0aGUgcGFzc3dvcmQgYXMga2V5LiBXZSBjYW4gcmUtdXNlIHRoZSBzYW1lCisgICAgICAgICAgICAjIGRpZ2VzdCBvYmplY3RzIGFuZCBhbmQganVzdCB1cGRhdGUgY29waWVzIHRvIHNraXAgaW5pdGlhbGl6YXRpb24uCisgICAgICAgICAgICBpY3B5ID0gaW5uZXIuY29weSgpCisgICAgICAgICAgICBvY3B5ID0gb3V0ZXIuY29weSgpCisgICAgICAgICAgICBpY3B5LnVwZGF0ZShtc2cpCisgICAgICAgICAgICBvY3B5LnVwZGF0ZShpY3B5LmRpZ2VzdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9jcHkuZGlnZXN0KCkKKworICAgICAgICBpZiBpdGVyYXRpb25zIDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoaXRlcmF0aW9ucykKKyAgICAgICAgaWYgZGtsZW4gaXMgTm9uZToKKyAgICAgICAgICAgIGRrbGVuID0gb3V0ZXIuZGlnZXN0X3NpemUKKyAgICAgICAgaWYgZGtsZW4gPCAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihka2xlbikKKworICAgICAgICBka2V5ID0gYicnCisgICAgICAgIGxvb3AgPSAxCisgICAgICAgIGZyb21fYnl0ZXMgPSBpbnQuZnJvbV9ieXRlcworICAgICAgICB3aGlsZSBsZW4oZGtleSkgPCBka2xlbjoKKyAgICAgICAgICAgIHByZXYgPSBwcmYoc2FsdCArIGxvb3AudG9fYnl0ZXMoNCwgJ2JpZycpKQorICAgICAgICAgICAgIyBlbmRpYW5lc3MgZG9lc24ndCBtYXR0ZXIgaGVyZSBhcyBsb25nIHRvIC8gZnJvbSB1c2UgdGhlIHNhbWUKKyAgICAgICAgICAgIHJrZXkgPSBpbnQuZnJvbV9ieXRlcyhwcmV2LCAnYmlnJykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMgLSAxKToKKyAgICAgICAgICAgICAgICBwcmV2ID0gcHJmKHByZXYpCisgICAgICAgICAgICAgICAgIyBya2V5ID0gcmtleSBeIHByZXYKKyAgICAgICAgICAgICAgICBya2V5IF49IGZyb21fYnl0ZXMocHJldiwgJ2JpZycpCisgICAgICAgICAgICBsb29wICs9IDEKKyAgICAgICAgICAgIGRrZXkgKz0gcmtleS50b19ieXRlcyhpbm5lci5kaWdlc3Rfc2l6ZSwgJ2JpZycpCisKKyAgICAgICAgcmV0dXJuIGRrZXlbOmRrbGVuXQorCisKIGZvciBfX2Z1bmNfbmFtZSBpbiBfX2Fsd2F5c19zdXBwb3J0ZWQ6CiAgICAgIyB0cnkgdGhlbSBhbGwsIHNvbWUgbWF5IG5vdCB3b3JrIGR1ZSB0byB0aGUgT3BlblNTTAogICAgICMgdmVyc2lvbiBub3Qgc3VwcG9ydGluZyB0aGF0IGFsZ29yaXRobS4KZGlmZiAtLWdpdCBhL0xpYi9obWFjLnB5IGIvTGliL2htYWMucHkKaW5kZXggNDI5N2E3MS4uNzc3ODVhMiAxMDA2NDQKLS0tIGEvTGliL2htYWMucHkKKysrIGIvTGliL2htYWMucHkKQEAgLTQsNyArNCw4IEBACiAiIiIKIAogaW1wb3J0IHdhcm5pbmdzIGFzIF93YXJuaW5ncwotZnJvbSBvcGVyYXRvciBpbXBvcnQgX2NvbXBhcmVfZGlnZXN0IGFzIGNvbXBhcmVfZGlnZXN0Citmcm9tIF9vcGVyYXRvciBpbXBvcnQgX2NvbXBhcmVfZGlnZXN0IGFzIGNvbXBhcmVfZGlnZXN0CitpbXBvcnQgaGFzaGxpYiBhcyBfaGFzaGxpYgogCiB0cmFuc181QyA9IGJ5dGVzKCh4IF4gMHg1QykgZm9yIHggaW4gcmFuZ2UoMjU2KSkKIHRyYW5zXzM2ID0gYnl0ZXMoKHggXiAweDM2KSBmb3IgeCBpbiByYW5nZSgyNTYpKQpAQCAtMjgsMjEgKzI5LDI3IEBACiAgICAgICAgIGtleTogICAgICAga2V5IGZvciB0aGUga2V5ZWQgaGFzaCBvYmplY3QuCiAgICAgICAgIG1zZzogICAgICAgSW5pdGlhbCBpbnB1dCBmb3IgdGhlIGhhc2gsIGlmIHByb3ZpZGVkLgogICAgICAgICBkaWdlc3Rtb2Q6IEEgbW9kdWxlIHN1cHBvcnRpbmcgUEVQIDI0Ny4gICpPUioKLSAgICAgICAgICAgICAgICAgICBBIGhhc2hsaWIgY29uc3RydWN0b3IgcmV0dXJuaW5nIGEgbmV3IGhhc2ggb2JqZWN0LgorICAgICAgICAgICAgICAgICAgIEEgaGFzaGxpYiBjb25zdHJ1Y3RvciByZXR1cm5pbmcgYSBuZXcgaGFzaCBvYmplY3QuICpPUioKKyAgICAgICAgICAgICAgICAgICBBIGhhc2ggbmFtZSBzdWl0YWJsZSBmb3IgaGFzaGxpYi5uZXcoKS4KICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBoYXNobGliLm1kNS4KKyAgICAgICAgICAgICAgICAgICBJbXBsaWNpdCBkZWZhdWx0IHRvIGhhc2hsaWIubWQ1IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICByZW1vdmVkIGluIFB5dGhvbiAzLjYuCiAKLSAgICAgICAgTm90ZToga2V5IGFuZCBtc2cgbXVzdCBiZSBieXRlcyBvYmplY3RzLgorICAgICAgICBOb3RlOiBrZXkgYW5kIG1zZyBtdXN0IGJlIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdHMuCiAgICAgICAgICIiIgogCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgYnl0ZXMpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXk6IGV4cGVjdGVkIGJ5dGVzLCBidXQgZ290ICVyIiAlIHR5cGUoa2V5KS5fX25hbWVfXykKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXk6IGV4cGVjdGVkIGJ5dGVzIG9yIGJ5dGVhcnJheSwgYnV0IGdvdCAlciIgJSB0eXBlKGtleSkuX19uYW1lX18pCiAKICAgICAgICAgaWYgZGlnZXN0bW9kIGlzIE5vbmU6Ci0gICAgICAgICAgICBpbXBvcnQgaGFzaGxpYgotICAgICAgICAgICAgZGlnZXN0bW9kID0gaGFzaGxpYi5tZDUKKyAgICAgICAgICAgIF93YXJuaW5ncy53YXJuKCJITUFDKCkgd2l0aG91dCBhbiBleHBsaWNpdCBkaWdlc3Rtb2QgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIGRlcHJlY2F0ZWQuIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgICAgIGRpZ2VzdG1vZCA9IF9oYXNobGliLm1kNQogCiAgICAgICAgIGlmIGNhbGxhYmxlKGRpZ2VzdG1vZCk6CiAgICAgICAgICAgICBzZWxmLmRpZ2VzdF9jb25zID0gZGlnZXN0bW9kCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkaWdlc3Rtb2QsIHN0cik6CisgICAgICAgICAgICBzZWxmLmRpZ2VzdF9jb25zID0gbGFtYmRhIGQ9YicnOiBfaGFzaGxpYi5uZXcoZGlnZXN0bW9kLCBkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGxhbWJkYSBkPWInJzogZGlnZXN0bW9kLm5ldyhkKQogCkBAIC02Myw2ICs3MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIDIpCiAgICAgICAgICAgICBibG9ja3NpemUgPSBzZWxmLmJsb2Nrc2l6ZQogCisgICAgICAgICMgc2VsZi5ibG9ja3NpemUgaXMgdGhlIGRlZmF1bHQgYmxvY2tzaXplLiBzZWxmLmJsb2NrX3NpemUgaXMKKyAgICAgICAgIyBlZmZlY3RpdmUgYmxvY2sgc2l6ZSBhcyB3ZWxsIGFzIHRoZSBwdWJsaWMgQVBJIGF0dHJpYnV0ZS4KKyAgICAgICAgc2VsZi5ibG9ja19zaXplID0gYmxvY2tzaXplCisKICAgICAgICAgaWYgbGVuKGtleSkgPiBibG9ja3NpemU6CiAgICAgICAgICAgICBrZXkgPSBzZWxmLmRpZ2VzdF9jb25zKGtleSkuZGlnZXN0KCkKIApAQCAtNzIsMTEgKzgzLDEzIEBACiAgICAgICAgIGlmIG1zZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYudXBkYXRlKG1zZykKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gImhtYWMtIiArIHNlbGYuaW5uZXIubmFtZQorCiAgICAgZGVmIHVwZGF0ZShzZWxmLCBtc2cpOgogICAgICAgICAiIiJVcGRhdGUgdGhpcyBoYXNoaW5nIG9iamVjdCB3aXRoIHRoZSBzdHJpbmcgbXNnLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobXNnLCBieXRlcyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBidXQgZ290ICVyIiAlIHR5cGUobXNnKS5fX25hbWVfXykKICAgICAgICAgc2VsZi5pbm5lci51cGRhdGUobXNnKQogCiAgICAgZGVmIGNvcHkoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvaHRtbC9fX2luaXRfXy5weSBiL0xpYi9odG1sL19faW5pdF9fLnB5CmluZGV4IDAyNjUyZWYuLmRhMGEwYTMgMTAwNjQ0Ci0tLSBhL0xpYi9odG1sL19faW5pdF9fLnB5CisrKyBiL0xpYi9odG1sL19faW5pdF9fLnB5CkBAIC0yLDEyICsyLDEyIEBACiBHZW5lcmFsIGZ1bmN0aW9ucyBmb3IgSFRNTCBtYW5pcHVsYXRpb24uCiAiIiIKIAoraW1wb3J0IHJlIGFzIF9yZQorZnJvbSBodG1sLmVudGl0aWVzIGltcG9ydCBodG1sNSBhcyBfaHRtbDUKIAotX2VzY2FwZV9tYXAgPSB7b3JkKCcmJyk6ICcmYW1wOycsIG9yZCgnPCcpOiAnJmx0OycsIG9yZCgnPicpOiAnJmd0Oyd9Ci1fZXNjYXBlX21hcF9mdWxsID0ge29yZCgnJicpOiAnJmFtcDsnLCBvcmQoJzwnKTogJyZsdDsnLCBvcmQoJz4nKTogJyZndDsnLAotICAgICAgICAgICAgICAgICAgICBvcmQoJyInKTogJyZxdW90OycsIG9yZCgnXCcnKTogJyYjeDI3Oyd9CiAKLSMgTkI6IHRoaXMgaXMgYSBjYW5kaWRhdGUgZm9yIGEgYnl0ZXMvc3RyaW5nIHBvbHltb3JwaGljIGludGVyZmFjZQorX19hbGxfXyA9IFsnZXNjYXBlJywgJ3VuZXNjYXBlJ10KKwogCiBkZWYgZXNjYXBlKHMsIHF1b3RlPVRydWUpOgogICAgICIiIgpAQCAtMTYsNiArMTYsMTE3IEBACiAgICAgY2hhcmFjdGVycywgYm90aCBkb3VibGUgcXVvdGUgKCIpIGFuZCBzaW5nbGUgcXVvdGUgKCcpIGNoYXJhY3RlcnMgYXJlIGFsc28KICAgICB0cmFuc2xhdGVkLgogICAgICIiIgorICAgIHMgPSBzLnJlcGxhY2UoIiYiLCAiJmFtcDsiKSAjIE11c3QgYmUgZG9uZSBmaXJzdCEKKyAgICBzID0gcy5yZXBsYWNlKCI8IiwgIiZsdDsiKQorICAgIHMgPSBzLnJlcGxhY2UoIj4iLCAiJmd0OyIpCiAgICAgaWYgcXVvdGU6Ci0gICAgICAgIHJldHVybiBzLnRyYW5zbGF0ZShfZXNjYXBlX21hcF9mdWxsKQotICAgIHJldHVybiBzLnRyYW5zbGF0ZShfZXNjYXBlX21hcCkKKyAgICAgICAgcyA9IHMucmVwbGFjZSgnIicsICImcXVvdDsiKQorICAgICAgICBzID0gcy5yZXBsYWNlKCdcJycsICImI3gyNzsiKQorICAgIHJldHVybiBzCisKKworIyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcworCitfaW52YWxpZF9jaGFycmVmcyA9IHsKKyAgICAweDAwOiAnXHVmZmZkJywgICMgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSCisgICAgMHgwZDogJ1xyJywgICAgICAjIENBUlJJQUdFIFJFVFVSTgorICAgIDB4ODA6ICdcdTIwYWMnLCAgIyBFVVJPIFNJR04KKyAgICAweDgxOiAnXHg4MScsICAgICMgPGNvbnRyb2w+CisgICAgMHg4MjogJ1x1MjAxYScsICAjIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworICAgIDB4ODM6ICdcdTAxOTInLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sKKyAgICAweDg0OiAnXHUyMDFlJywgICMgRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLCisgICAgMHg4NTogJ1x1MjAyNicsICAjIEhPUklaT05UQUwgRUxMSVBTSVMKKyAgICAweDg2OiAnXHUyMDIwJywgICMgREFHR0VSCisgICAgMHg4NzogJ1x1MjAyMScsICAjIERPVUJMRSBEQUdHRVIKKyAgICAweDg4OiAnXHUwMmM2JywgICMgTU9ESUZJRVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UCisgICAgMHg4OTogJ1x1MjAzMCcsICAjIFBFUiBNSUxMRSBTSUdOCisgICAgMHg4YTogJ1x1MDE2MCcsICAjIExBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTgorICAgIDB4OGI6ICdcdTIwMzknLCAgIyBTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OGM6ICdcdTAxNTInLCAgIyBMQVRJTiBDQVBJVEFMIExJR0FUVVJFIE9FCisgICAgMHg4ZDogJ1x4OGQnLCAgICAjIDxjb250cm9sPgorICAgIDB4OGU6ICdcdTAxN2QnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST04KKyAgICAweDhmOiAnXHg4ZicsICAgICMgPGNvbnRyb2w+CisgICAgMHg5MDogJ1x4OTAnLCAgICAjIDxjb250cm9sPgorICAgIDB4OTE6ICdcdTIwMTgnLCAgIyBMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTI6ICdcdTIwMTknLCAgIyBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDkzOiAnXHUyMDFjJywgICMgTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDk0OiAnXHUyMDFkJywgICMgUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5NTogJ1x1MjAyMicsICAjIEJVTExFVAorICAgIDB4OTY6ICdcdTIwMTMnLCAgIyBFTiBEQVNICisgICAgMHg5NzogJ1x1MjAxNCcsICAjIEVNIERBU0gKKyAgICAweDk4OiAnXHUwMmRjJywgICMgU01BTEwgVElMREUKKyAgICAweDk5OiAnXHUyMTIyJywgICMgVFJBREUgTUFSSyBTSUdOCisgICAgMHg5YTogJ1x1MDE2MScsICAjIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST04KKyAgICAweDliOiAnXHUyMDNhJywgICMgU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5YzogJ1x1MDE1MycsICAjIExBVElOIFNNQUxMIExJR0FUVVJFIE9FCisgICAgMHg5ZDogJ1x4OWQnLCAgICAjIDxjb250cm9sPgorICAgIDB4OWU6ICdcdTAxN2UnLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OCisgICAgMHg5ZjogJ1x1MDE3OCcsICAjIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKK30KKworX2ludmFsaWRfY29kZXBvaW50cyA9IHsKKyAgICAjIDB4MDAwMSB0byAweDAwMDgKKyAgICAweDEsIDB4MiwgMHgzLCAweDQsIDB4NSwgMHg2LCAweDcsIDB4OCwKKyAgICAjIDB4MDAwRSB0byAweDAwMUYKKyAgICAweGUsIDB4ZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgxOSwKKyAgICAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorICAgICMgMHgwMDdGIHRvIDB4MDA5RgorICAgIDB4N2YsIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksIDB4OGEsCisgICAgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwKKyAgICAweDk3LCAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAorICAgICMgMHhGREQwIHRvIDB4RkRFRgorICAgIDB4ZmRkMCwgMHhmZGQxLCAweGZkZDIsIDB4ZmRkMywgMHhmZGQ0LCAweGZkZDUsIDB4ZmRkNiwgMHhmZGQ3LCAweGZkZDgsCisgICAgMHhmZGQ5LCAweGZkZGEsIDB4ZmRkYiwgMHhmZGRjLCAweGZkZGQsIDB4ZmRkZSwgMHhmZGRmLCAweGZkZTAsIDB4ZmRlMSwKKyAgICAweGZkZTIsIDB4ZmRlMywgMHhmZGU0LCAweGZkZTUsIDB4ZmRlNiwgMHhmZGU3LCAweGZkZTgsIDB4ZmRlOSwgMHhmZGVhLAorICAgIDB4ZmRlYiwgMHhmZGVjLCAweGZkZWQsIDB4ZmRlZSwgMHhmZGVmLAorICAgICMgb3RoZXJzCisgICAgMHhiLCAweGZmZmUsIDB4ZmZmZiwgMHgxZmZmZSwgMHgxZmZmZiwgMHgyZmZmZSwgMHgyZmZmZiwgMHgzZmZmZSwgMHgzZmZmZiwKKyAgICAweDRmZmZlLCAweDRmZmZmLCAweDVmZmZlLCAweDVmZmZmLCAweDZmZmZlLCAweDZmZmZmLCAweDdmZmZlLCAweDdmZmZmLAorICAgIDB4OGZmZmUsIDB4OGZmZmYsIDB4OWZmZmUsIDB4OWZmZmYsIDB4YWZmZmUsIDB4YWZmZmYsIDB4YmZmZmUsIDB4YmZmZmYsCisgICAgMHhjZmZmZSwgMHhjZmZmZiwgMHhkZmZmZSwgMHhkZmZmZiwgMHhlZmZmZSwgMHhlZmZmZiwgMHhmZmZmZSwgMHhmZmZmZiwKKyAgICAweDEwZmZmZSwgMHgxMGZmZmYKK30KKworCitkZWYgX3JlcGxhY2VfY2hhcnJlZihzKToKKyAgICBzID0gcy5ncm91cCgxKQorICAgIGlmIHNbMF0gPT0gJyMnOgorICAgICAgICAjIG51bWVyaWMgY2hhcnJlZgorICAgICAgICBpZiBzWzFdIGluICd4WCc6CisgICAgICAgICAgICBudW0gPSBpbnQoc1syOl0ucnN0cmlwKCc7JyksIDE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbnVtID0gaW50KHNbMTpdLnJzdHJpcCgnOycpKQorICAgICAgICBpZiBudW0gaW4gX2ludmFsaWRfY2hhcnJlZnM6CisgICAgICAgICAgICByZXR1cm4gX2ludmFsaWRfY2hhcnJlZnNbbnVtXQorICAgICAgICBpZiAweEQ4MDAgPD0gbnVtIDw9IDB4REZGRiBvciBudW0gPiAweDEwRkZGRjoKKyAgICAgICAgICAgIHJldHVybiAnXHVGRkZEJworICAgICAgICBpZiBudW0gaW4gX2ludmFsaWRfY29kZXBvaW50czoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICByZXR1cm4gY2hyKG51bSkKKyAgICBlbHNlOgorICAgICAgICAjIG5hbWVkIGNoYXJyZWYKKyAgICAgICAgaWYgcyBpbiBfaHRtbDU6CisgICAgICAgICAgICByZXR1cm4gX2h0bWw1W3NdCisgICAgICAgICMgZmluZCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBuYW1lIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCkKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UobGVuKHMpLTEsIDEsIC0xKToKKyAgICAgICAgICAgIGlmIHNbOnhdIGluIF9odG1sNToKKyAgICAgICAgICAgICAgICByZXR1cm4gX2h0bWw1W3NbOnhdXSArIHNbeDpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJyYnICsgcworCisKK19jaGFycmVmID0gX3JlLmNvbXBpbGUocicmKCNbMC05XSs7PycKKyAgICAgICAgICAgICAgICAgICAgICAgcid8I1t4WF1bMC05YS1mQS1GXSs7PycKKyAgICAgICAgICAgICAgICAgICAgICAgcid8W15cdFxuXGYgPCYjO117MSwzMn07PyknKQorCitkZWYgdW5lc2NhcGUocyk6CisgICAgIiIiCisgICAgQ29udmVydCBhbGwgbmFtZWQgYW5kIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKGUuZy4gJmd0OywgJiM2MjssCisgICAgJngzZTspIGluIHRoZSBzdHJpbmcgcyB0byB0aGUgY29ycmVzcG9uZGluZyB1bmljb2RlIGNoYXJhY3RlcnMuCisgICAgVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBydWxlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIDUgc3RhbmRhcmQKKyAgICBmb3IgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcywgYW5kIHRoZSBsaXN0IG9mCisgICAgSFRNTCA1IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIGRlZmluZWQgaW4gaHRtbC5lbnRpdGllcy5odG1sNS4KKyAgICAiIiIKKyAgICBpZiAnJicgbm90IGluIHM6CisgICAgICAgIHJldHVybiBzCisgICAgcmV0dXJuIF9jaGFycmVmLnN1YihfcmVwbGFjZV9jaGFycmVmLCBzKQpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvcGFyc2VyLnB5IGIvTGliL2h0bWwvcGFyc2VyLnB5CmluZGV4IDJkM2JlZjMuLjEyYzI4YjggMTAwNjQ0Ci0tLSBhL0xpYi9odG1sL3BhcnNlci5weQorKysgYi9MaWIvaHRtbC9wYXJzZXIucHkKQEAgLTgsOSArOCwxNCBAQAogIyBhbmQgQ0RBVEEgKGNoYXJhY3RlciBkYXRhIC0tIG9ubHkgZW5kIHRhZ3MgYXJlIHNwZWNpYWwpLgogCiAKLWltcG9ydCBfbWFya3VwYmFzZQogaW1wb3J0IHJlCiBpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBfbWFya3VwYmFzZQorCitmcm9tIGh0bWwgaW1wb3J0IHVuZXNjYXBlCisKKworX19hbGxfXyA9IFsnSFRNTFBhcnNlciddCiAKICMgUmVndWxhciBleHByZXNzaW9ucyB1c2VkIGZvciBwYXJzaW5nCiAKQEAgLTkyLDYgKzk3LDggQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKK19kZWZhdWx0X3NlbnRpbmVsID0gb2JqZWN0KCkKKwogY2xhc3MgSFRNTFBhcnNlcihfbWFya3VwYmFzZS5QYXJzZXJCYXNlKToKICAgICAiIiJGaW5kIHRhZ3MgYW5kIG90aGVyIG1hcmt1cCBhbmQgY2FsbCBoYW5kbGVyIGZ1bmN0aW9ucy4KIApAQCAtMTA1LDI2ICsxMTIsMzkgQEAKICAgICBzZWxmLmhhbmRsZV9zdGFydGVuZHRhZygpOyBlbmQgdGFncyBieSBzZWxmLmhhbmRsZV9lbmR0YWcoKS4gIFRoZQogICAgIGRhdGEgYmV0d2VlbiB0YWdzIGlzIHBhc3NlZCBmcm9tIHRoZSBwYXJzZXIgdG8gdGhlIGRlcml2ZWQgY2xhc3MKICAgICBieSBjYWxsaW5nIHNlbGYuaGFuZGxlX2RhdGEoKSB3aXRoIHRoZSBkYXRhIGFzIGFyZ3VtZW50ICh0aGUgZGF0YQotICAgIG1heSBiZSBzcGxpdCB1cCBpbiBhcmJpdHJhcnkgY2h1bmtzKS4gIEVudGl0eSByZWZlcmVuY2VzIGFyZQotICAgIHBhc3NlZCBieSBjYWxsaW5nIHNlbGYuaGFuZGxlX2VudGl0eXJlZigpIHdpdGggdGhlIGVudGl0eQotICAgIHJlZmVyZW5jZSBhcyB0aGUgYXJndW1lbnQuICBOdW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIGFyZQotICAgIHBhc3NlZCB0byBzZWxmLmhhbmRsZV9jaGFycmVmKCkgd2l0aCB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCi0gICAgcmVmZXJlbmNlIGFzIHRoZSBhcmd1bWVudC4KKyAgICBtYXkgYmUgc3BsaXQgdXAgaW4gYXJiaXRyYXJ5IGNodW5rcykuICBJZiBjb252ZXJ0X2NoYXJyZWZzIGlzCisgICAgVHJ1ZSB0aGUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgYXJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5IHRvIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXIgKGFuZCBzZWxmLmhhbmRsZV9kYXRhKCkgaXMgbm8KKyAgICBsb25nZXIgc3BsaXQgaW4gY2h1bmtzKSwgb3RoZXJ3aXNlIHRoZXkgYXJlIHBhc3NlZCBieSBjYWxsaW5nCisgICAgc2VsZi5oYW5kbGVfZW50aXR5cmVmKCkgb3Igc2VsZi5oYW5kbGVfY2hhcnJlZigpIHdpdGggdGhlIHN0cmluZworICAgIGNvbnRhaW5pbmcgcmVzcGVjdGl2ZWx5IHRoZSBuYW1lZCBvciBudW1lcmljIHJlZmVyZW5jZSBhcyB0aGUKKyAgICBhcmd1bWVudC4KICAgICAiIiIKIAogICAgIENEQVRBX0NPTlRFTlRfRUxFTUVOVFMgPSAoInNjcmlwdCIsICJzdHlsZSIpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyaWN0PUZhbHNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyaWN0PV9kZWZhdWx0X3NlbnRpbmVsLCAqLAorICAgICAgICAgICAgICAgICBjb252ZXJ0X2NoYXJyZWZzPV9kZWZhdWx0X3NlbnRpbmVsKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbmQgcmVzZXQgdGhpcyBpbnN0YW5jZS4KIAorICAgICAgICBJZiBjb252ZXJ0X2NoYXJyZWZzIGlzIFRydWUgKGRlZmF1bHQ6IEZhbHNlKSwgYWxsIGNoYXJhY3RlciByZWZlcmVuY2VzCisgICAgICAgIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlcnMuCiAgICAgICAgIElmIHN0cmljdCBpcyBzZXQgdG8gRmFsc2UgKHRoZSBkZWZhdWx0KSB0aGUgcGFyc2VyIHdpbGwgcGFyc2UgaW52YWxpZAogICAgICAgICBtYXJrdXAsIG90aGVyd2lzZSBpdCB3aWxsIHJhaXNlIGFuIGVycm9yLiAgTm90ZSB0aGF0IHRoZSBzdHJpY3QgbW9kZQotICAgICAgICBpcyBkZXByZWNhdGVkLgorICAgICAgICBhbmQgYXJndW1lbnQgYXJlIGRlcHJlY2F0ZWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBzdHJpY3Q6Ci0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgc3RyaWN0IG1vZGUgaXMgZGVwcmVjYXRlZC4iLAorICAgICAgICBpZiBzdHJpY3QgaXMgbm90IF9kZWZhdWx0X3NlbnRpbmVsOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIHN0cmljdCBhcmd1bWVudCBhbmQgbW9kZSBhcmUgZGVwcmVjYXRlZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cmljdCA9IEZhbHNlICAjIGRlZmF1bHQKICAgICAgICAgc2VsZi5zdHJpY3QgPSBzdHJpY3QKKyAgICAgICAgaWYgY29udmVydF9jaGFycmVmcyBpcyBfZGVmYXVsdF9zZW50aW5lbDoKKyAgICAgICAgICAgIGNvbnZlcnRfY2hhcnJlZnMgPSBGYWxzZSAgIyBkZWZhdWx0CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgdmFsdWUgb2YgY29udmVydF9jaGFycmVmcyB3aWxsIGJlY29tZSBUcnVlIGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjMuNS4gWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHNldCB0aGUgdmFsdWUgZXhwbGljaXRseS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgc2VsZi5jb252ZXJ0X2NoYXJyZWZzID0gY29udmVydF9jaGFycmVmcwogICAgICAgICBzZWxmLnJlc2V0KCkKIAogICAgIGRlZiByZXNldChzZWxmKToKQEAgLTE0OSw2ICsxNjksOCBAQAogICAgICAgICBzZWxmLmdvYWhlYWQoMSkKIAogICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhlICdlcnJvcicgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKICAgICAgICAgcmFpc2UgSFRNTFBhcnNlRXJyb3IobWVzc2FnZSwgc2VsZi5nZXRwb3MoKSkKIAogICAgIF9fc3RhcnR0YWdfdGV4dCA9IE5vbmUKQEAgLTE3MywxNCArMTk1LDI1IEBACiAgICAgICAgIGkgPSAwCiAgICAgICAgIG4gPSBsZW4ocmF3ZGF0YSkKICAgICAgICAgd2hpbGUgaSA8IG46Ci0gICAgICAgICAgICBtYXRjaCA9IHNlbGYuaW50ZXJlc3Rpbmcuc2VhcmNoKHJhd2RhdGEsIGkpICMgPCBvciAmCi0gICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICBqID0gbWF0Y2guc3RhcnQoKQorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgIGogPSByYXdkYXRhLmZpbmQoJzwnLCBpKQorICAgICAgICAgICAgICAgIGlmIGogPCAwOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgICMgd2FpdCB0aWxsIHdlIGdldCBhbGwgdGhlIHRleHQKKyAgICAgICAgICAgICAgICAgICAgaiA9IG4KICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5jZGF0YV9lbGVtOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGogPSBuCi0gICAgICAgICAgICBpZiBpIDwgajogc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6al0pCisgICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLmludGVyZXN0aW5nLnNlYXJjaChyYXdkYXRhLCBpKSAgIyA8IG9yICYKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgaiA9IG1hdGNoLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBqID0gbgorICAgICAgICAgICAgaWYgaSA8IGo6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHVuZXNjYXBlKHJhd2RhdGFbaTpqXSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6al0pCiAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgaikKICAgICAgICAgICAgIGlmIGkgPT0gbjogYnJlYWsKICAgICAgICAgICAgIHN0YXJ0c3dpdGggPSByYXdkYXRhLnN0YXJ0c3dpdGgKQEAgLTIxNSw3ICsyNDgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gaSArIDEKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGsgKz0gMQotICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTprXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6a10pKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6a10pCiAgICAgICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIGspCiAgICAgICAgICAgICBlbGlmIHN0YXJ0c3dpdGgoIiYjIiwgaSk6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjaGFycmVmLm1hdGNoKHJhd2RhdGEsIGkpCkBAIC0yNjYsNyArMzAyLDEwIEBACiAgICAgICAgICAgICAgICAgYXNzZXJ0IDAsICJpbnRlcmVzdGluZy5zZWFyY2goKSBsaWVkIgogICAgICAgICAjIGVuZCB3aGlsZQogICAgICAgICBpZiBlbmQgYW5kIGkgPCBuIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgotICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6bl0pCisgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6bl0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTpuXSkKICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBuKQogICAgICAgICBzZWxmLnJhd2RhdGEgPSByYXdkYXRhW2k6XQogCkBAIC0zNDksNyArMzg4LDcgQEAKICAgICAgICAgICAgICAgICAgYXR0cnZhbHVlWzoxXSA9PSAnIicgPT0gYXR0cnZhbHVlWy0xOl06CiAgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gYXR0cnZhbHVlWzE6LTFdCiAgICAgICAgICAgICBpZiBhdHRydmFsdWU6Ci0gICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gc2VsZi51bmVzY2FwZShhdHRydmFsdWUpCisgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gdW5lc2NhcGUoYXR0cnZhbHVlKQogICAgICAgICAgICAgYXR0cnMuYXBwZW5kKChhdHRybmFtZS5sb3dlcigpLCBhdHRydmFsdWUpKQogICAgICAgICAgICAgayA9IG0uZW5kKCkKIApAQCAtNTA1LDMxICs1NDQsNyBAQAogCiAgICAgIyBJbnRlcm5hbCAtLSBoZWxwZXIgdG8gcmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVyIHF1b3RpbmcKICAgICBkZWYgdW5lc2NhcGUoc2VsZiwgcyk6Ci0gICAgICAgIGlmICcmJyBub3QgaW4gczoKLSAgICAgICAgICAgIHJldHVybiBzCi0gICAgICAgIGRlZiByZXBsYWNlRW50aXRpZXMocyk6Ci0gICAgICAgICAgICBzID0gcy5ncm91cHMoKVswXQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHNbMF0gPT0gIiMiOgotICAgICAgICAgICAgICAgICAgICBzID0gc1sxOl0KLSAgICAgICAgICAgICAgICAgICAgaWYgc1swXSBpbiBbJ3gnLCdYJ106Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHNbMTpdLnJzdHJpcCgnOycpLCAxNikKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBpbnQocy5yc3RyaXAoJzsnKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNocihjKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcmIycgKyBzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUKLSAgICAgICAgICAgICAgICBpZiBzIGluIGh0bWw1OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDVbc10KLSAgICAgICAgICAgICAgICBlbGlmIHMuZW5kc3dpdGgoJzsnKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJyArIHMKLSAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgyLCBsZW4ocykpOgotICAgICAgICAgICAgICAgICAgICBpZiBzWzp4XSBpbiBodG1sNToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sNVtzWzp4XV0gKyBzW3g6XQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJicgKyBzCi0KLSAgICAgICAgcmV0dXJuIHJlLnN1YihyIiYoIz9beFhdPyg/OlswLTlhLWZBLUZdKzt8XHd7MSwzMn07PykpIiwKLSAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlRW50aXRpZXMsIHMsIGZsYWdzPXJlLkFTQ0lJKQorICAgICAgICB3YXJuaW5ncy53YXJuKCdUaGUgdW5lc2NhcGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCAnCisgICAgICAgICAgICAgICAgICAgICAgJ2luIDMuNSwgdXNlIGh0bWwudW5lc2NhcGUoKSBpbnN0ZWFkLicsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIHJldHVybiB1bmVzY2FwZShzKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY2xpZW50LnB5IGIvTGliL2h0dHAvY2xpZW50LnB5CmluZGV4IGNjNDUyZTIuLjVjNTJiYTMgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL2NsaWVudC5weQorKysgYi9MaWIvaHR0cC9jbGllbnQucHkKQEAgLTI3MSw4ICsyNzEsNiBAQAogICAgIHJldHVybiBlbWFpbC5wYXJzZXIuUGFyc2VyKF9jbGFzcz1fY2xhc3MpLnBhcnNlc3RyKGhzdHJpbmcpCiAKIAotX3N0cmljdF9zZW50aW5lbCA9IG9iamVjdCgpCi0KIGNsYXNzIEhUVFBSZXNwb25zZShpby5SYXdJT0Jhc2UpOgogCiAgICAgIyBTZWUgUkZDIDI2MTYgc2VjIDE5LjYgYW5kIFJGQyAxOTQ1IHNlYyA2IGZvciBkZXRhaWxzLgpAQCAtMjgyLDcgKzI4MCw3IEBACiAgICAgIyB0ZXh0IGZvbGxvd2luZyBSRkMgMjA0Ny4gIFRoZSBiYXNpYyBzdGF0dXMgbGluZSBwYXJzaW5nIG9ubHkKICAgICAjIGFjY2VwdHMgaXNvLTg4NTktMS4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSk6CiAgICAgICAgICMgSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgY29udGVudC1sZW5ndGggaGVhZGVyLCB3ZSBuZWVkIHRvCiAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIGNsaWVudCBkb2Vzbid0IHJlYWQgbW9yZSB0aGFuIHRoZQogICAgICAgICAjIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuICBJZiBpdCBkb2VzLCBpdCB3aWxsIGJsb2NrIHVudGlsCkBAIC0yOTIsMTAgKzI5MCw2IEBACiAgICAgICAgICMgY2xpZW50cyB1bmxlc3MgdGhleSBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcuCiAgICAgICAgIHNlbGYuZnAgPSBzb2NrLm1ha2VmaWxlKCJyYiIpCiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGRlYnVnbGV2ZWwKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfc3RyaWN0X3NlbnRpbmVsOgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigidGhlICdzdHJpY3QnIGFyZ3VtZW50IGlzbid0IHN1cHBvcnRlZCBhbnltb3JlOyAiCi0gICAgICAgICAgICAgICAgImh0dHAuY2xpZW50IG5vdyBhbHdheXMgYXNzdW1lcyBIVFRQLzEueCBjb21wbGlhbnQgc2VydmVycy4iLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCiAKICAgICAgICAgIyBUaGUgSFRUUFJlc3BvbnNlIG9iamVjdCBpcyByZXR1cm5lZCB2aWEgdXJsbGliLiAgVGhlIGNsaWVudHMKQEAgLTczMiwxMyArNzI2LDE3IEBACiAgICAgZGVmYXVsdF9wb3J0ID0gSFRUUF9QT1JUCiAgICAgYXV0b19vcGVuID0gMQogICAgIGRlYnVnbGV2ZWwgPSAwCisgICAgIyBUQ1AgTWF4aW11bSBTZWdtZW50IFNpemUgKE1TUykgaXMgZGV0ZXJtaW5lZCBieSB0aGUgVENQIHN0YWNrIG9uCisgICAgIyBhIHBlci1jb25uZWN0aW9uIGJhc2lzLiAgVGhlcmUgaXMgbm8gc2ltcGxlIGFuZCBlZmZpY2llbnQKKyAgICAjIHBsYXRmb3JtIGluZGVwZW5kZW50IG1lY2hhbmlzbSBmb3IgZGV0ZXJtaW5pbmcgdGhlIE1TUywgc28KKyAgICAjIGluc3RlYWQgYSByZWFzb25hYmxlIGVzdGltYXRlIGlzIGNob3Nlbi4gIFRoZSBnZXRzb2Nrb3B0KCkKKyAgICAjIGludGVyZmFjZSB1c2luZyB0aGUgVENQX01BWFNFRyBwYXJhbWV0ZXIgbWF5IGJlIGEgc3VpdGFibGUKKyAgICAjIGFwcHJvYWNoIG9uIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMuIEEgdmFsdWUgb2YgMTZLaUIgaXMgY2hvc2VuCisgICAgIyBhcyBhIHJlYXNvbmFibGUgZXN0aW1hdGUgb2YgdGhlIG1heGltdW0gTVNTLgorICAgIG1zcyA9IDE2Mzg0CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBzdHJpY3Q9X3N0cmljdF9zZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgotICAgICAgICBpZiBzdHJpY3QgaXMgbm90IF9zdHJpY3Rfc2VudGluZWw6Ci0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ0aGUgJ3N0cmljdCcgYXJndW1lbnQgaXNuJ3Qgc3VwcG9ydGVkIGFueW1vcmU7ICIKLSAgICAgICAgICAgICAgICAiaHR0cC5jbGllbnQgbm93IGFsd2F5cyBhc3N1bWVzIEhUVFAvMS54IGNvbXBsaWFudCBzZXJ2ZXJzLiIsCi0gICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKToKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLnNvdXJjZV9hZGRyZXNzID0gc291cmNlX2FkZHJlc3MKICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQpAQCAtODA0LDggKzgwMiw4IEBACiAKICAgICAgICAgaWYgY29kZSAhPSAyMDA6CiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiVHVubmVsIGNvbm5lY3Rpb24gZmFpbGVkOiAlZCAlcyIgJSAoY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpcCgpKSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIlR1bm5lbCBjb25uZWN0aW9uIGZhaWxlZDogJWQgJXMiICUgKGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0cmlwKCkpKQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgbGluZSA9IHJlc3BvbnNlLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IF9NQVhMSU5FOgpAQCAtODk5LDggKzg5NywxMSBAQAogICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpdCiAgICAgICAgICMgSWYgbXNnIGFuZCBtZXNzYWdlX2JvZHkgYXJlIHNlbnQgaW4gYSBzaW5nbGUgc2VuZCgpIGNhbGwsCiAgICAgICAgICMgaXQgd2lsbCBhdm9pZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uCi0gICAgICAgICMgYmV0d2VlbiBkZWxheWVkIGFjayBhbmQgdGhlIE5hZ2xlIGFsZ29yaXRobS4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlX2JvZHksIGJ5dGVzKToKKyAgICAgICAgIyBiZXR3ZWVuIGRlbGF5ZWQgYWNrIGFuZCB0aGUgTmFnbGUgYWxnb3JpdGhtLiBIb3dldmVyLAorICAgICAgICAjIHRoZXJlIGlzIG5vIHBlcmZvcm1hbmNlIGdhaW4gaWYgdGhlIG1lc3NhZ2UgaXMgbGFyZ2VyCisgICAgICAgICMgdGhhbiBNU1MgKGFuZCB0aGVyZSBpcyBhIG1lbW9yeSBwZW5hbHR5IGZvciB0aGUgbWVzc2FnZQorICAgICAgICAjIGNvcHkpLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2VfYm9keSwgYnl0ZXMpIGFuZCBsZW4obWVzc2FnZV9ib2R5KSA8IHNlbGYubXNzOgogICAgICAgICAgICAgbXNnICs9IG1lc3NhZ2VfYm9keQogICAgICAgICAgICAgbWVzc2FnZV9ib2R5ID0gTm9uZQogICAgICAgICBzZWxmLnNlbmQobXNnKQpAQCAtMTE3MCwxNiArMTE3MSwxNSBAQAogICAgICAgICAjIFhYWCBTaG91bGQga2V5X2ZpbGUgYW5kIGNlcnRfZmlsZSBiZSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBjb250ZXh0PwogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIGNlcnRfZmlsZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLCBjaGVja19ob3N0bmFtZT1Ob25lKToKLSAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgc3RyaWN0LCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lLCAqLCBjb250ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3MpCiAgICAgICAgICAgICBzZWxmLmtleV9maWxlID0ga2V5X2ZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9maWxlID0gY2VydF9maWxlCiAgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBTb21lIHJlYXNvbmFibGUgZGVmYXVsdHMKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKICAgICAgICAgICAgIHdpbGxfdmVyaWZ5ID0gY29udGV4dC52ZXJpZnlfbW9kZSAhPSBzc2wuQ0VSVF9OT05FCiAgICAgICAgICAgICBpZiBjaGVja19ob3N0bmFtZSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lID0gd2lsbF92ZXJpZnkKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2Nvb2tpZWphci5weSBiL0xpYi9odHRwL2Nvb2tpZWphci5weQppbmRleCBkZGI3OWM1Li5iZTgyOGViIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jb29raWVqYXIucHkKKysrIGIvTGliL2h0dHAvY29va2llamFyLnB5CkBAIC0xMTkzLDggKzExOTMsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbWFwcGluZyA9IFRydWUKLSAgICAgICAgICAgIGZvciBzdWJvYmogaW4gZGVlcHZhbHVlcyhvYmopOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1Ym9iagorICAgICAgICAgICAgeWllbGQgZnJvbSBkZWVwdmFsdWVzKG9iaikKICAgICAgICAgaWYgbm90IG1hcHBpbmc6CiAgICAgICAgICAgICB5aWVsZCBvYmoKIApAQCAtMTczMSw4ICsxNzMwLDggQEAKICAgICAgICAgcmV0dXJuICI8JXNbJXNdPiIgJSAoc2VsZi5fX2NsYXNzX18sICIsICIuam9pbihyKSkKIAogCi0jIGRlcml2ZXMgZnJvbSBJT0Vycm9yIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjQuMAotY2xhc3MgTG9hZEVycm9yKElPRXJyb3IpOiBwYXNzCisjIGRlcml2ZXMgZnJvbSBPU0Vycm9yIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjQuMAorY2xhc3MgTG9hZEVycm9yKE9TRXJyb3IpOiBwYXNzCiAKIGNsYXNzIEZpbGVDb29raWVKYXIoQ29va2llSmFyKToKICAgICAiIiJDb29raWVKYXIgdGhhdCBjYW4gYmUgbG9hZGVkIGZyb20gYW5kIHNhdmVkIHRvIGEgZmlsZS4iIiIKQEAgLTE3NjIsMTcgKzE3NjEsMTQgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5fcmVhbGx5X2xvYWQoZiwgZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkLCBpZ25vcmVfZXhwaXJlcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHJldmVydChzZWxmLCBmaWxlbmFtZT1Ob25lLAogICAgICAgICAgICAgICAgaWdub3JlX2Rpc2NhcmQ9RmFsc2UsIGlnbm9yZV9leHBpcmVzPUZhbHNlKToKICAgICAgICAgIiIiQ2xlYXIgYWxsIGNvb2tpZXMgYW5kIHJlbG9hZCBjb29raWVzIGZyb20gYSBzYXZlZCBmaWxlLgogCi0gICAgICAgIFJhaXNlcyBMb2FkRXJyb3IgKG9yIElPRXJyb3IpIGlmIHJldmVyc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bDsgdGhlCisgICAgICAgIFJhaXNlcyBMb2FkRXJyb3IgKG9yIE9TRXJyb3IpIGlmIHJldmVyc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bDsgdGhlCiAgICAgICAgIG9iamVjdCdzIHN0YXRlIHdpbGwgbm90IGJlIGFsdGVyZWQgaWYgdGhpcyBoYXBwZW5zLgogCiAgICAgICAgICIiIgpAQCAtMTc4Nyw3ICsxNzgzLDcgQEAKICAgICAgICAgICAgIHNlbGYuX2Nvb2tpZXMgPSB7fQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYubG9hZChmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKQotICAgICAgICAgICAgZXhjZXB0IChMb2FkRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5fY29va2llcyA9IG9sZF9zdGF0ZQogICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTE4NTcsMTUgKzE4NTMsMTIgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgICMgVGhlcmUgcmVhbGx5IGlzbid0IGFuIExXUCBDb29raWVzIDIuMCBmb3JtYXQsIGJ1dCB0aGlzIGluZGljYXRlcwogICAgICAgICAgICAgIyB0aGF0IHRoZXJlIGlzIGV4dHJhIGluZm9ybWF0aW9uIGluIGhlcmUgKGRvbWFpbl9kb3QgYW5kCiAgICAgICAgICAgICAjIHBvcnRfc3BlYykgd2hpbGUgc3RpbGwgYmVpbmcgY29tcGF0aWJsZSB3aXRoIGxpYnd3dy1wZXJsLCBJIGhvcGUuCiAgICAgICAgICAgICBmLndyaXRlKCIjTFdQLUNvb2tpZXMtMi4wXG4iKQogICAgICAgICAgICAgZi53cml0ZShzZWxmLmFzX2x3cF9zdHIoaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIF9yZWFsbHlfbG9hZChzZWxmLCBmLCBmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKToKICAgICAgICAgbWFnaWMgPSBmLnJlYWRsaW5lKCkKQEAgLTE5MzgsOCArMTkzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfZXhwaXJlcyBhbmQgYy5pc19leHBpcmVkKG5vdyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9jb29raWUoYykKLQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgX3dhcm5fdW5oYW5kbGVkX2V4Y2VwdGlvbigpCkBAIC0yMDQ1LDcgKzIwMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Nvb2tpZShjKQogCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBfd2Fybl91bmhhbmRsZWRfZXhjZXB0aW9uKCkKQEAgLTIwNTcsOCArMjA0OSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuaGVhZGVyKQogICAgICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgICAgIGZvciBjb29raWUgaW4gc2VsZjoKQEAgLTIwODcsNSArMjA3OCwzIEBACiAgICAgICAgICAgICAgICAgICAgICJcdCIuam9pbihbY29va2llLmRvbWFpbiwgaW5pdGlhbF9kb3QsIGNvb2tpZS5wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSwgZXhwaXJlcywgbmFtZSwgdmFsdWVdKSsKICAgICAgICAgICAgICAgICAgICAgIlxuIikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvc2VydmVyLnB5IGIvTGliL2h0dHAvc2VydmVyLnB5CmluZGV4IDJiZmRhMTIuLjdiNTc3YjQgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL3NlcnZlci5weQorKysgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKQEAgLTQwMSwxMiArNDAxLDE3IEBACiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmNsb3NlX2Nvbm5lY3Rpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9vbmVfcmVxdWVzdCgpCiAKLSAgICBkZWYgc2VuZF9lcnJvcihzZWxmLCBjb2RlLCBtZXNzYWdlPU5vbmUpOgorICAgIGRlZiBzZW5kX2Vycm9yKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSwgZXhwbGFpbj1Ob25lKToKICAgICAgICAgIiIiU2VuZCBhbmQgbG9nIGFuIGVycm9yIHJlcGx5LgogCi0gICAgICAgIEFyZ3VtZW50cyBhcmUgdGhlIGVycm9yIGNvZGUsIGFuZCBhIGRldGFpbGVkIG1lc3NhZ2UuCi0gICAgICAgIFRoZSBkZXRhaWxlZCBtZXNzYWdlIGRlZmF1bHRzIHRvIHRoZSBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUKLSAgICAgICAgcmVzcG9uc2UgY29kZS4KKyAgICAgICAgQXJndW1lbnRzIGFyZQorICAgICAgICAqIGNvZGU6ICAgIGFuIEhUVFAgZXJyb3IgY29kZQorICAgICAgICAgICAgICAgICAgIDMgZGlnaXRzCisgICAgICAgICogbWVzc2FnZTogYSBzaW1wbGUgb3B0aW9uYWwgMSBsaW5lIHJlYXNvbiBwaHJhc2UuCisgICAgICAgICAgICAgICAgICAgKiggSFRBQiAvIFNQIC8gVkNIQVIgLyAleDgwLUZGICkKKyAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUgcmVzcG9uc2UgY29kZQorICAgICAgICAqIGV4cGxhaW46IGEgZGV0YWlsZWQgbWVzc2FnZSBkZWZhdWx0cyB0byB0aGUgbG9uZyBlbnRyeQorICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIHRoZSByZXNwb25zZSBjb2RlLgogCiAgICAgICAgIFRoaXMgc2VuZHMgYW4gZXJyb3IgcmVzcG9uc2UgKHNvIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkKICAgICAgICAgb3V0cHV0IGhhcyBiZWVuIGdlbmVyYXRlZCksIGxvZ3MgdGhlIGVycm9yLCBhbmQgZmluYWxseSBzZW5kcwpAQCAtNDIwLDE3ICs0MjUsMjAgQEAKICAgICAgICAgICAgIHNob3J0bXNnLCBsb25nbXNnID0gJz8/PycsICc/Pz8nCiAgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSBzaG9ydG1zZwotICAgICAgICBleHBsYWluID0gbG9uZ21zZworICAgICAgICBpZiBleHBsYWluIGlzIE5vbmU6CisgICAgICAgICAgICBleHBsYWluID0gbG9uZ21zZwogICAgICAgICBzZWxmLmxvZ19lcnJvcigiY29kZSAlZCwgbWVzc2FnZSAlcyIsIGNvZGUsIG1lc3NhZ2UpCiAgICAgICAgICMgdXNpbmcgX3F1b3RlX2h0bWwgdG8gcHJldmVudCBDcm9zcyBTaXRlIFNjcmlwdGluZyBhdHRhY2tzIChzZWUgYnVnICMxMTAwMjAxKQogICAgICAgICBjb250ZW50ID0gKHNlbGYuZXJyb3JfbWVzc2FnZV9mb3JtYXQgJQotICAgICAgICAgICAgICAgICAgIHsnY29kZSc6IGNvZGUsICdtZXNzYWdlJzogX3F1b3RlX2h0bWwobWVzc2FnZSksICdleHBsYWluJzogZXhwbGFpbn0pCisgICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBfcXVvdGVfaHRtbChleHBsYWluKX0pCisgICAgICAgIGJvZHkgPSBjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShjb2RlLCBtZXNzYWdlKQogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCBzZWxmLmVycm9yX2NvbnRlbnRfdHlwZSkKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgaW50KGxlbihib2R5KSkpCiAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgICBpZiBzZWxmLmNvbW1hbmQgIT0gJ0hFQUQnIGFuZCBjb2RlID49IDIwMCBhbmQgY29kZSBub3QgaW4gKDIwNCwgMzA0KToKLSAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoY29udGVudC5lbmNvZGUoJ1VURi04JywgJ3JlcGxhY2UnKSkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYm9keSkKIAogICAgIGRlZiBzZW5kX3Jlc3BvbnNlKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSk6CiAgICAgICAgICIiIkFkZCB0aGUgcmVzcG9uc2UgaGVhZGVyIHRvIHRoZSBoZWFkZXJzIGJ1ZmZlciBhbmQgbG9nIHRoZQpAQCAtNzA5LDcgKzcxNyw3IEBACiAgICAgICAgIGN0eXBlID0gc2VsZi5ndWVzc190eXBlKHBhdGgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQpAQCAtNzMwLDcgKzczOCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaXN0ID0gb3MubGlzdGRpcihwYXRoKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIk5vIHBlcm1pc3Npb24gdG8gbGlzdCBkaXJlY3RvcnkiKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgbGlzdC5zb3J0KGtleT1sYW1iZGEgYTogYS5sb3dlcigpKQpAQCAtMTEyNCw3ICsxMTMyLDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnNldHVpZChub2JvZHkpCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLnJmaWxlLmZpbGVubygpLCAwKQogICAgICAgICAgICAgICAgIG9zLmR1cDIoc2VsZi53ZmlsZS5maWxlbm8oKSwgMSkKQEAgLTExNzcsMTUgKzExODUsMTUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDR0kgc2NyaXB0IGV4aXRlZCBPSyIpCiAKIAotZGVmIHRlc3QoSGFuZGxlckNsYXNzID0gQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwKLSAgICAgICAgIFNlcnZlckNsYXNzID0gSFRUUFNlcnZlciwgcHJvdG9jb2w9IkhUVFAvMS4wIiwgcG9ydD04MDAwKToKK2RlZiB0ZXN0KEhhbmRsZXJDbGFzcz1CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgU2VydmVyQ2xhc3M9SFRUUFNlcnZlciwgcHJvdG9jb2w9IkhUVFAvMS4wIiwgcG9ydD04MDAwLCBiaW5kPSIiKToKICAgICAiIiJUZXN0IHRoZSBIVFRQIHJlcXVlc3QgaGFuZGxlciBjbGFzcy4KIAogICAgIFRoaXMgcnVucyBhbiBIVFRQIHNlcnZlciBvbiBwb3J0IDgwMDAgKG9yIHRoZSBmaXJzdCBjb21tYW5kIGxpbmUKICAgICBhcmd1bWVudCkuCiAKICAgICAiIiIKLSAgICBzZXJ2ZXJfYWRkcmVzcyA9ICgnJywgcG9ydCkKKyAgICBzZXJ2ZXJfYWRkcmVzcyA9IChiaW5kLCBwb3J0KQogCiAgICAgSGFuZGxlckNsYXNzLnByb3RvY29sX3ZlcnNpb24gPSBwcm90b2NvbAogICAgIGh0dHBkID0gU2VydmVyQ2xhc3Moc2VydmVyX2FkZHJlc3MsIEhhbmRsZXJDbGFzcykKQEAgLTEyMDMsMTIgKzEyMTEsMTYgQEAKICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jZ2knLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gYXMgQ0dJIFNlcnZlcicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iaW5kJywgJy1iJywgZGVmYXVsdD0nJywgbWV0YXZhcj0nQUREUkVTUycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTcGVjaWZ5IGFsdGVybmF0ZSBiaW5kIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnW2RlZmF1bHQ6IGFsbCBpbnRlcmZhY2VzXScpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncG9ydCcsIGFjdGlvbj0nc3RvcmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD04MDAwLCB0eXBlPWludCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPSc/JywKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgYWx0ZXJuYXRlIHBvcnQgW2RlZmF1bHQ6IDgwMDBdJykKICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgIGlmIGFyZ3MuY2dpOgotICAgICAgICB0ZXN0KEhhbmRsZXJDbGFzcz1DR0lIVFRQUmVxdWVzdEhhbmRsZXIsIHBvcnQ9YXJncy5wb3J0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0gQ0dJSFRUUFJlcXVlc3RIYW5kbGVyCiAgICAgZWxzZToKLSAgICAgICAgdGVzdChIYW5kbGVyQ2xhc3M9U2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLCBwb3J0PWFyZ3MucG9ydCkKKyAgICAgICAgaGFuZGxlcl9jbGFzcyA9IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgorICAgIHRlc3QoSGFuZGxlckNsYXNzPWhhbmRsZXJfY2xhc3MsIHBvcnQ9YXJncy5wb3J0LCBiaW5kPWFyZ3MuYmluZCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weSBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQppbmRleCBjOWFkMzY0Li5lYWY2OGNiIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKKysrIGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CkBAIC01NDgsNyArNTQ4LDcgQEAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoc2VsZi5oZWxwX3VybCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXN0cih3aHkpLCBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICBlbHNlOgpAQCAtODcxLDcgKzg3MSw3IEBACiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKGhlbHBmaWxlKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRG9jdW1lbnQgU3RhcnQgRmFpbHVyZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXN0cih3aHkpLCBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5IGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKaW5kZXggMzdhMzM3ZS4uYTk5ODlhOCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKKysrIGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlbmFtZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocHdkLCBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CmluZGV4IDJlMDczMTIuLmMwMDc0ZTIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQpAQCAtMTI1LDQgKzEyNSwzIEBACiAgICAgIyBIZW5jZSBJZGxlIG11c3QgYmUgcmVzdGFydGVkIGFmdGVyIGVkaXRpbmcgdGhpcyBmaWxlIGZvciBhIGxpdmUgdGVzdC4KICAgICBpbXBvcnQgdW5pdHRlc3QKICAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2dyZXAnLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKLQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5IGIvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CmluZGV4IGNiYTgwNDguLjc1ODlhYjggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQorKysgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKQEAgLTUwMyw3ICs1MDMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwd2QgPSAiIgogICAgICAgICAgICAgcmV0dXJuIHB3ZCwgIiIKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTkVXUy50eHQgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dAppbmRleCA1NDUwNzAxLi40NzhjMTgzIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ORVdTLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dApAQCAtMSwxMiArMSwxMCBAQAotV2hhdCdzIE5ldyBpbiBJRExFIDMuMy4yPworV2hhdCdzIE5ldyBpbiBJRExFIDMuNC4wPwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCiAtIElzc3VlICMxNzM5MDogRGlzcGxheSBQeXRob24gdmVyc2lvbiBvbiBJZGxlIHRpdGxlIGJhci4KICAgSW5pdGlhbCBwYXRjaCBieSBFZG1vbmQgQnVybmV0dC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM1MDY2OiBVcGRhdGUgSURMRSBkb2NzLiBQYXRjaCBieSBUb2RkIFJvdml0by4KIAogLSBJc3N1ZSAjMTc2MjU6IENsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QYXRoQnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CmluZGV4IGJhNDA3MTkuLjVlNWM2YmUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CkBAIC00NCw3ICs0NCw3IEBACiAgICAgZGVmIEdldFN1Ykxpc3Qoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzZWxmLmRpciBvciBvcy5jdXJkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgcGFja2FnZXMgPSBbXQogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CmluZGV4IGIyYTFmNTguLjM2YWZmOTIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKKysrIGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQpAQCAtNDE5LDcgKzQxOSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5ycGNjbHQgPSBNeVJQQ0NsaWVudChhZGRyKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmRpc3BsYXlfcG9ydF9iaW5kaW5nX2Vycm9yKCkKQEAgLTEwMzQsNyArMTAzNCwxMCBAQAogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9zdWIgPSAiPT09PSBObyBTdWJwcm9jZXNzID09PT0iCisgICAgICAgICAgICBub3N1YiA9ICgiPT09PSBObyBTdWJwcm9jZXNzID09PT1cblxuIiArCisgICAgICAgICAgICAgICAgICAgICJXQVJOSU5HOiBSdW5uaW5nIElETEUgd2l0aG91dCBhIFN1YnByb2Nlc3MgaXMgZGVwcmVjYXRlZFxuIiArCisgICAgICAgICAgICAgICAgICAgICJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgbGF0ZXIgdmVyc2lvbi4gU2VlIEhlbHAvSURMRSBIZWxwXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImZvciBkZXRhaWxzLlxuXG4iKQogICAgICAgICAgICAgc3lzLmRpc3BsYXlob29rID0gcnBjLmRpc3BsYXlob29rCiAKICAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuJXMiICUKQEAgLTEzOTIsNyArMTM5NSw4IEBACiAgICAgICAgaWRsZSAgWy1kbnNdIFstdCB0aXRsZV0gLSBbYXJnXSoKIAogICAtaCAgICAgICAgIHByaW50IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0gIC1uICAgICAgICAgcnVuIElETEUgd2l0aG91dCBhIHN1YnByb2Nlc3MgKHNlZSBIZWxwL0lETEUgSGVscCBmb3IgZGV0YWlscykKKyAgLW4gICAgICAgICBydW4gSURMRSB3aXRob3V0IGEgc3VicHJvY2VzcyAoREVQUkVDQVRFRCwKKyAgICAgICAgICAgICBzZWUgSGVscC9JRExFIEhlbHAgZm9yIGRldGFpbHMpCiAKIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyB3aWxsIG92ZXJyaWRlIHRoZSBJRExFICdzZXR0aW5ncycgY29uZmlndXJhdGlvbjoKIApAQCAtMTQ3MCw2ICsxNDc0LDggQEAKICAgICAgICAgaWYgbyA9PSAnLWknOgogICAgICAgICAgICAgZW5hYmxlX3NoZWxsID0gVHJ1ZQogICAgICAgICBpZiBvID09ICctbic6CisgICAgICAgICAgICBwcmludCgiIFdhcm5pbmc6IHJ1bm5pbmcgSURMRSB3aXRob3V0IGEgc3VicHJvY2VzcyBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICB1c2Vfc3VicHJvY2VzcyA9IEZhbHNlCiAgICAgICAgIGlmIG8gPT0gJy1yJzoKICAgICAgICAgICAgIHNjcmlwdCA9IGEKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkgYi9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CmluZGV4IDI1YmFlNDguLjFmNDg1NGQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKKysrIGIvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbmFtZShzZWxmLnBhdGgsIG5ld3BhdGgpCiAgICAgICAgICAgICBzZWxmLnBhdGggPSBuZXdwYXRoCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgR2V0SWNvbk5hbWUoc2VsZik6CkBAIC0zOTQsNyArMzk0LDcgQEAKICAgICBkZWYgR2V0U3ViTGlzdChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNlbGYucGF0aCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICBuYW1lcy5zb3J0KGtleSA9IG9zLnBhdGgubm9ybWNhc2UpCiAgICAgICAgIHN1Ymxpc3QgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weSBiL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKaW5kZXggYTk3NGQ1NC4uZWEyMDEwZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CkBAIC0yNzEsOCArMjcxLDEwIEBACiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBkZWZhdWx0CisKICAgICBkZWYgU2V0T3B0aW9uKHNlbGYsIGNvbmZpZ1R5cGUsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgogICAgICAgICAiIiJJbiB1c2VyJ3MgY29uZmlnIGZpbGUsIHNldCBzZWN0aW9uJ3Mgb3B0aW9uIHRvIHZhbHVlLgorCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uU2V0T3B0aW9uKHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCiAKQEAgLTYzOCw4ICs2NDAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBrZXlCaW5kaW5ncworCiAgICAgZGVmIEdldEV4dHJhSGVscFNvdXJjZUxpc3Qoc2VsZixjb25maWdTZXQpOgogICAgICAgICAiIiJGZXRjaCBsaXN0IG9mIGV4dHJhIGhlbHAgc291cmNlcyBmcm9tIGEgZ2l2ZW4gY29uZmlnU2V0LgorCiAgICAgICAgIFZhbGlkIGNvbmZpZ1NldHMgYXJlICd1c2VyJyBvciAnZGVmYXVsdCcuICBSZXR1cm4gYSBsaXN0IG9mIHR1cGxlcyBvZgogICAgICAgICB0aGUgZm9ybSAobWVudV9pdGVtICwgcGF0aF90b19oZWxwX2ZpbGUgLCBvcHRpb24pLCBvciByZXR1cm4gdGhlIGVtcHR5CiAgICAgICAgIGxpc3QuICAnb3B0aW9uJyBpcyB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBoZWxwIHJlc291cmNlLiAgJ29wdGlvbicKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAudHh0IGIvTGliL2lkbGVsaWIvaGVscC50eHQKaW5kZXggZmY3ODZjNS4uNjM3OGEyZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaGVscC50eHQKKysrIGIvTGliL2lkbGVsaWIvaGVscC50eHQKQEAgLTEsMTQyICsxLDE4NSBAQAogW1NlZSB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgKiogVElQUyAqKiBvbiB1c2luZyBJRExFICEhXQogCi1DbGljayBvbiB0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYQotc2VwYXJhdGUgd2luZG93IGNvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZC4KK0lETEUgaXMgdGhlIFB5dGhvbiBJREUgYnVpbHQgd2l0aCB0aGUgdGtpbnRlciBHVUkgdG9vbGtpdC4KIAotRmlsZSBNZW51OgorSURMRSBoYXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKy1jb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgdGtpbnRlciBHVUkgdG9vbGtpdAorLWNyb3NzLXBsYXRmb3JtOiB3b3JrcyBvbiBXaW5kb3dzLCBVbml4LCBhbmQgT1MgWAorLW11bHRpLXdpbmRvdyB0ZXh0IGVkaXRvciB3aXRoIG11bHRpcGxlIHVuZG8sIFB5dGhvbiBjb2xvcml6aW5nLCBzbWFydCBpbmRlbnQsCitjYWxsIHRpcHMsIGFuZCBtYW55IG90aGVyIGZlYXR1cmVzCistUHl0aG9uIHNoZWxsIHdpbmRvdyAoYS5rLmEgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIpCistZGVidWdnZXIgKG5vdCBjb21wbGV0ZSwgYnV0IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzLCB2aWV3IGFuZCBzdGVwKQogCi0JTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdwotCU9wZW4uLi4gICAgICAgICAgLS0gT3BlbiBhbiBleGlzdGluZyBmaWxlCi0JUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKLQlPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKLQlDbGFzcyBCcm93c2VyICAgIC0tIFNob3cgY2xhc3NlcyBhbmQgbWV0aG9kcyBpbiBjdXJyZW50IGZpbGUKLQlQYXRoIEJyb3dzZXIgICAgIC0tIFNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMKK01lbnVzOgorCitJRExFIGhhcyB0d28gd2luZG93IHR5cGVzIHRoZSBTaGVsbCB3aW5kb3cgYW5kIHRoZSBFZGl0b3Igd2luZG93LiBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gSURMRSdzCittZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gRWFjaCBtZW51Citkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIENsaWNrIG9uCit0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYSBzZXBhcmF0ZSB3aW5kb3cKK2NvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZCAoZm9yIFVuaXggYW5kIFdpbmRvd3Mgb25seSkuCisKK0ZpbGUgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgICAgICBPcGVuLi4uICAgICAgICAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQorICAgICAgICBPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgICAgICAgUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKKyAgICAgICAgQ2xhc3MgQnJvd3NlciAgICAtLSBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCisgICAgICAgIFBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWV0aG9kcwotCS0tLQotCVNhdmUgICAgICAgICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkCi0JCSAgICAgICAgICAgIHdpbmRvd3MgaGF2ZSBhICogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgICAgICAtLS0KKyAgICAgICAgU2F2ZSAgICAgICAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzIGhhdmUgYSAqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKIAotCVNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcwotCQkgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBmaWxlCi0JU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCi0JCSAgICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQotCS0tLQotCVByaW50IFdpbmRvdyAgICAgLS0gUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCi0JRXhpdCAgICAgICAgICAgICAtLSBDbG9zZSBhbGwgd2luZG93cywgcXVpdCAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIFNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgICAgICAgU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICAgICAgIC0tLQorICAgICAgICBQcmludCBXaW5kb3cgICAgIC0tIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIEV4aXQgICAgICAgICAgICAgLS0gQ2xvc2UgYWxsIHdpbmRvd3MsIHF1aXQgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCi1FZGl0IE1lbnU6CitFZGl0IE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgogCi0JVW5kbyAgICAgICAgICAgICAtLSBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKLQlSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBVbmRvICAgICAgICAgICAgIC0tIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQorICAgICAgICBSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgotCS0tLQotCUZpbmQuLi4gICAgICAgICAgLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCi0JRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKLQlGaW5kIFNlbGVjdGlvbiAgIC0tIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCi0JRmluZCBpbiBGaWxlcy4uLiAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcwotCVJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94Ci0JR28gdG8gTGluZSAgICAgICAtLSBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCi0JU2hvdyBDYWxsdGlwICAgICAtLSBPcGVuIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW0gaGludHMKLQlTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcwotCQkJICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKLQlTaG93IFBhcmVucwkgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcwotCUV4cGFuZCBXb3JkICAgICAgLS0gRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIKLQkJICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgorICAgICAgICAtLS0KKyAgICAgICAgRmluZC4uLiAgICAgICAgICAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggd2l0aCBtYW55IG9wdGlvbnMKKyAgICAgICAgRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKKyAgICAgICAgRmluZCBTZWxlY3Rpb24gICAtLSBTZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIHNlbGVjdGlvbgorICAgICAgICBGaW5kIGluIEZpbGVzLi4uIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCBmb3Igc2VhcmNoaW5nIGZpbGVzCisgICAgICAgIFJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94CisgICAgICAgIEdvIHRvIExpbmUgICAgICAgLS0gQXNrIGZvciBhIGxpbmUgbnVtYmVyIGFuZCBzaG93IHRoYXQgbGluZQorICAgICAgICBFeHBhbmQgV29yZCAgICAgIC0tIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBleHBhbnNpb24KKyAgICAgICAgU2hvdyBDYWxsdGlwICAgICAtLSBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzCisgICAgICAgIFNob3cgUGFyZW5zICAgICAgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworICAgICAgICBTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKIAotRm9ybWF0IE1lbnUgKG9ubHkgaW4gRWRpdCB3aW5kb3cpOgorRm9ybWF0IE1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk6CiAKLQlJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCi0JRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCi0JQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKLQlVbmNvbW1lbnQgUmVnaW9uICAgIC0tIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwotCVRhYmlmeSBSZWdpb24gICAgICAgLS0gVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzCi0JCShOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKLQlVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSByaWdodCBudW1iZXIgb2Ygc3BhY2VzCi0JTmV3IEluZGVudCBXaWR0aC4uLiAtLSBPcGVuIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoCi0JRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaAorICAgICAgICBJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVW5jb21tZW50IFJlZ2lvbiAgICAtLSBSZW1vdmUgbGVhZGluZyAjIG9yICMjIGZyb20gc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVGFiaWZ5IFJlZ2lvbiAgICAgICAtLSBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuCisgICAgICAgICAgICAgICAgKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZyA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQorICAgICAgICBVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSBjb3JyZW50IG51bWJlciBvZiBzcGFjZXMKKyAgICAgICAgVG9nZ2xlIHRhYnMgICAgICAgICAtLSBPcGVuIGEgZGlhbG9nIHRvIHN3aXRjaCBiZXR3ZWVuIGluZGVudGluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzIGFuZCB0YWJzLgorICAgICAgICBOZXcgSW5kZW50IFdpZHRoLi4uIC0tIE9wZW4gYSBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aC4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIGRlZmF1bHQgYnkgdGhlIFB5dGhvbiBjb21tdW5pdHkgaXMgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcy4KKyAgICAgICAgRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC4gQWxsIGxpbmVzIGluIHRoZSBwYXJhZ3JhcGggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KKyAgICAgICAgLS0tCisgICAgICAgIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgLS0gUmVtb3ZlZCBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlcgogCi1SdW4gTWVudSAob25seSBpbiBFZGl0IHdpbmRvdyk6CitSdW4gTWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KToKIAotCVB5dGhvbiBTaGVsbCAtLSBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBzaGVsbCB3aW5kb3cKLQktLS0KLQlDaGVjayBNb2R1bGUgLS0gUnVuIGEgc3ludGF4IGNoZWNrIG9uIHRoZSBtb2R1bGUKLQlSdW4gTW9kdWxlICAgLS0gRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKKyAgICAgICAgUHl0aG9uIFNoZWxsIC0tIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIHNoZWxsIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2hlY2sgTW9kdWxlIC0tIENoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvciB3aW5kb3cuICBJZiB0aGUgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgorICAgICAgICBSdW4gTW9kdWxlICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBjdXJyZW50bHkgb3BlbiBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLgogCi1TaGVsbCBNZW51IChvbmx5IGluIFNoZWxsIHdpbmRvdyk6CitTaGVsbCBNZW51IChTaGVsbCB3aW5kb3cgb25seSk6CiAKLQlWaWV3IExhc3QgUmVzdGFydCAtLSBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCByZXN0YXJ0Ci0JUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBhIGZyZXNoIGVudmlyb25tZW50CisgICAgICAgIFZpZXcgTGFzdCBSZXN0YXJ0IC0tIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IFNoZWxsIHJlc3RhcnQKKyAgICAgICAgUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50CiAKLURlYnVnIE1lbnUgKG9ubHkgaW4gU2hlbGwgd2luZG93KToKK0RlYnVnIE1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KToKIAotCUdvIHRvIEZpbGUvTGluZSAgIC0tIGxvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUKLQkJICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUKLQlEZWJ1Z2dlciAodG9nZ2xlKSAtLSBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgotCVN0YWNrIFZpZXdlciAgICAgIC0tIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KLQlBdXRvLW9wZW4gU3RhY2sgVmlld2VyICh0b2dnbGUpIC0tIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjaworICAgICAgICBHbyB0byBGaWxlL0xpbmUgICAtLSBMb29rIGFyb3VuZCB0aGUgaW5zZXJ0IHBvaW50IGZvciBhIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCB0byB2aWV3IHRoZSBzb3VyY2UgbGluZXMgcmVmZXJlbmNlZCBpbiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gdHJhY2ViYWNrLiAgQXZhaWxhYmxlIGluIHRoZSBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgb2YgdGhlIFNoZWxsIHdpbmRvdy4KKyAgICAgICAgRGVidWdnZXIgKHRvZ2dsZSkgLS0gVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyLgorICAgICAgICBTdGFjayBWaWV3ZXIgICAgICAtLSBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCisgICAgICAgIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIgKHRvZ2dsZSkgLS0gVG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayB2aWV3ZXIgb24gdW5oYW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uCiAKLU9wdGlvbnMgTWVudToKK09wdGlvbnMgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CiAKLQlDb25maWd1cmUgSURMRSAtLSBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sCisgICAgICAgIENvbmZpZ3VyZSBJRExFIC0tIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5YmluZGluZ3MsIGFuZCBjb2xvciB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIEFkZGl0aW9uYWwgSGVscAotICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCi0JCQkgIAotCQkJICBPbiBPUyBYIHRoaXMgbWVudSBpcyBub3QgcHJlc2VudCwgdXNlCi0JCQkgIG1lbnUgJ0lETEUgLT4gUHJlZmVyZW5jZXMuLi4nIGluc3RlYWQuCi0JLS0tCi0JQ29kZSBDb250ZXh0IC0tCSAgT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cgd2hpY2gKLQkJCSAgc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24gb2YgY29kZQotCQkJICB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb3IgdGhlIHdpbmRvdy4KLQkJCSAgKE5vdCBwcmVzZW50IGluIFNoZWxsIHdpbmRvdy4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIGFkZGl0aW9uYWwgSGVscAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCiAKLVdpbmRvd3MgTWVudToKKyAgICAgICAgLS0tCisgICAgICAgIENvZGUgQ29udGV4dCAodG9nZ2xlKSAtLSBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvZGUgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiBUaGlzIGlzIG5vdCBwcmVzZW50IGluIHRoZSBTaGVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93IG9ubHkgdGhlIEVkaXRvciB3aW5kb3cuCiAKLQlab29tIEhlaWdodCAtLSB0b2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBjb25maWd1cmVkIHNpemUKLQlhbmQgbWF4aW11bSBoZWlnaHQuCi0JLS0tCi0JVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOwotCXNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgotCW5lY2Vzc2FyeSkuCitXaW5kb3dzIE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgorCisgICAgICAgIFpvb20gSGVpZ2h0IC0tIFRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplICg0MHg4MCBpbml0aWFsCisgICAgICAgIHNldHRpbmcpIGFuZCBtYXhpbXVtIGhlaWdodC4gIFRoZSBpbml0aWFsIHNpemUgaXMgaW4gdGhlIENvbmZpZ3VyZQorICAgICAgICBJRExFIGRpYWxvZyB1bmRlciB0aGUgZ2VuZXJhbCB0YWIuCisgICAgICAgIC0tLQorICAgICAgICBUaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7CisgICAgICAgIHNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgorICAgICAgICBuZWNlc3NhcnkpLgogCiBIZWxwIE1lbnU6CiAKLQlBYm91dCBJRExFICAtLSBWZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMKLQlJRExFIFJlYWRtZSAtLSBCYWNrZ3JvdW5kIGRpc2N1c3Npb24gYW5kIGNoYW5nZSBkZXRhaWxzCi0JLS0tCi0JSURMRSBIZWxwICAgLS0gRGlzcGxheSB0aGlzIGZpbGUKLQlQeXRob24gRG9jcyAtLSBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmCi0JCSAgICAgICBpbnN0YWxsZWQuICBPdGhlcndpc2UsIGFjY2VzcyB3d3cucHl0aG9uLm9yZy4KLQktLS0KLQkoQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUpCisgICAgICAgIEFib3V0IElETEUgIC0tIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cworICAgICAgICAtLS0KKyAgICAgICAgSURMRSBIZWxwICAgLS0gRGlzcGxheSB0aGlzIGZpbGUgd2hpY2ggaXMgYSBoZWxwIGZpbGUgZm9yIElETEUKKyAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsaW5nIHRoZSBtZW51IG9wdGlvbnMsIGJhc2ljIGVkaXRpbmcgYW5kIG5hdmlnYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciB0aXBzLgorICAgICAgICBQeXRob24gRG9jcyAtLSBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4gIE9yIHdpbGwgc3RhcnQgYSB3ZWIgYnJvd3NlciBhbmQgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICBkb2NzLnB5dGhvbi5vcmcgc2hvd2luZyB0aGUgbGF0ZXN0IFB5dGhvbiBkb2N1bWVudGF0aW9uLgorICAgICAgICAtLS0KKyAgICAgICAgQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nIHVuZGVyIHRoZSBHZW5lcmFsIHRhYi4KIAotRWRpdCBjb250ZXh0IG1lbnUgKFJpZ2h0LWNsaWNrIC8gQ29udHJvbC1jbGljayBvbiBPUyBYIGluIEVkaXQgd2luZG93KToKK0VkaXRvciBjb250ZXh0IG1lbnUgKFJpZ2h0LWNsaWNrIC8gQ29udHJvbC1jbGljayBvbiBPUyBYIGluIEVkaXQgd2luZG93KToKIAotCUN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKKyAgICAgICAgQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KLQlDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCi0JUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93Ci0JU2V0IEJyZWFrcG9pbnQgICAtLSBTZXRzIGEgYnJlYWtwb2ludCAod2hlbiBkZWJ1Z2dlciBvcGVuKQotCUNsZWFyIEJyZWFrcG9pbnQgLS0gQ2xlYXJzIHRoZSBicmVha3BvaW50IG9uIHRoYXQgbGluZQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZXQgQnJlYWtwb2ludCAgIC0tIFNldHMgYSBicmVha3BvaW50LiBCcmVha3BvaW50cyBhcmUgb25seSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgZGVidWdnZXIgaXMgb3Blbi4KKyAgICAgICAgQ2xlYXIgQnJlYWtwb2ludCAtLSBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lCiAKIFNoZWxsIGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gU2hlbGwgd2luZG93KToKIAotCUN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKKyAgICAgICAgQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KLQlDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCi0JUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93Ci0JLS0tCi0JR28gdG8gZmlsZS9saW5lICAtLSBTYW1lIGFzIGluIERlYnVnIG1lbnUKKyAgICAgICAgQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgICAgICBQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKKyAgICAgICAgLS0tCisgICAgICAgIEdvIHRvIGZpbGUvbGluZSAgLS0gU2FtZSBhcyBpbiBEZWJ1ZyBtZW51CiAKIAogKiogVElQUyAqKgpAQCAtMTQ0LDE1OSArMTg3LDE4MiBAQAogCiBBZGRpdGlvbmFsIEhlbHAgU291cmNlczoKIAotCVdpbmRvd3MgdXNlcnMgY2FuIEdvb2dsZSBvbiB6b3Blc2hlbGYuY2htIHRvIGFjY2VzcyBab3BlIGhlbHAgZmlsZXMgaW4KLQl0aGUgV2luZG93cyBoZWxwIGZvcm1hdC4gIFRoZSBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBmZWF0dXJlIG9mIHRoZQotCWNvbmZpZ3VyYXRpb24gR1VJIHN1cHBvcnRzIC5jaG0sIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGV0eXBlcwotCXN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuICBTdXBwbHkgYSBNZW51IEl0ZW0gdGl0bGUsIGFuZCBlbnRlciB0aGUKLQlsb2NhdGlvbiBpbiB0aGUgSGVscCBGaWxlIFBhdGggc2xvdCBvZiB0aGUgTmV3IEhlbHAgU291cmNlIGRpYWxvZy4gIFVzZQotCWh0dHA6Ly8gYW5kL29yIHd3dy4gdG8gaWRlbnRpZnkgZXh0ZXJuYWwgVVJMcywgb3IgZG93bmxvYWQgdGhlIGZpbGUgYW5kCi0JYnJvd3NlIGZvciBpdHMgcGF0aCBvbiB5b3VyIG1hY2hpbmUgdXNpbmcgdGhlIEJyb3dzZSBidXR0b24uCisgICAgICAgIFdpbmRvd3MgdXNlcnMgY2FuIEdvb2dsZSBvbiB6b3Blc2hlbGYuY2htIHRvIGFjY2VzcyBab3BlIGhlbHAgZmlsZXMgaW4KKyAgICAgICAgdGhlIFdpbmRvd3MgaGVscCBmb3JtYXQuICBUaGUgQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgZmVhdHVyZSBvZiB0aGUKKyAgICAgICAgY29uZmlndXJhdGlvbiBHVUkgc3VwcG9ydHMgLmNobSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXR5cGVzCisgICAgICAgIHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuICBTdXBwbHkgYSBNZW51IEl0ZW0gdGl0bGUsIGFuZCBlbnRlciB0aGUKKyAgICAgICAgbG9jYXRpb24gaW4gdGhlIEhlbHAgRmlsZSBQYXRoIHNsb3Qgb2YgdGhlIE5ldyBIZWxwIFNvdXJjZSBkaWFsb2cuICBVc2UKKyAgICAgICAgaHR0cDovLyBhbmQvb3Igd3d3LiB0byBpZGVudGlmeSBleHRlcm5hbCBVUkxzLCBvciBkb3dubG9hZCB0aGUgZmlsZSBhbmQKKyAgICAgICAgYnJvd3NlIGZvciBpdHMgcGF0aCBvbiB5b3VyIG1hY2hpbmUgdXNpbmcgdGhlIEJyb3dzZSBidXR0b24uCiAKLQlBbGwgdXNlcnMgY2FuIGFjY2VzcyB0aGUgZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nCi0JdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgd3d3LnB5dGhvbi5vcmcvZG9jLiAgU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQKLQlvciByZW1vdmVkIGZyb20gdGhlIEhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyBDb25maWd1cmUgSURMRS4KKyAgICAgICAgQWxsIHVzZXJzIGNhbiBhY2Nlc3MgdGhlIGV4dGVuc2l2ZSBzb3VyY2VzIG9mIGhlbHAsIGluY2x1ZGluZworICAgICAgICB0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCBkb2NzLnB5dGhvbi5vcmcuICBTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZAorICAgICAgICBvciByZW1vdmVkIGZyb20gdGhlIEhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyBDb25maWd1cmUgSURMRS4KIAogQmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbjoKIAotCUJhY2tzcGFjZSBkZWxldGVzIGNoYXIgdG8gdGhlIGxlZnQ7IERFTCBkZWxldGVzIGNoYXIgdG8gdGhlIHJpZ2h0LgotCUNvbnRyb2wtYmFja3NwYWNlIGRlbGV0ZXMgd29yZCBsZWZ0LCBDb250cm9sLURFTCBkZWxldGVzIHdvcmQgcmlnaHQuCi0JQXJyb3cga2V5cyBhbmQgUGFnZSBVcC9Eb3duIG1vdmUgYXJvdW5kLgotCUNvbnRyb2wtbGVmdC9yaWdodCBBcnJvdyBtb3ZlcyBieSB3b3JkcyBpbiBhIHN0cmFuZ2UgYnV0IHVzZWZ1bCB3YXkuCi0JSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmUuCi0JQ29udHJvbC1Ib21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZS4KLQlTb21lIHVzZWZ1bCBFbWFjcyBiaW5kaW5ncyBhcmUgaW5oZXJpdGVkIGZyb20gVGNsL1RrOgotCQlDb250cm9sLWEgICAgIGJlZ2lubmluZyBvZiBsaW5lCi0JCUNvbnRyb2wtZSAgICAgZW5kIG9mIGxpbmUKLQkJQ29udHJvbC1rICAgICBraWxsIGxpbmUgKGJ1dCBkb2Vzbid0IHB1dCBpdCBpbiBjbGlwYm9hcmQpCi0JCUNvbnRyb2wtbCAgICAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAotCVN0YW5kYXJkIFdpbmRvd3MgYmluZGluZ3MgbWF5IHdvcmsgb24gdGhhdCBwbGF0Zm9ybS4KLQlLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIFNldHRpbmdzIERpYWxvZywgbG9vayB0aGVyZS4KKyAgICAgICAgQmFja3NwYWNlIGRlbGV0ZXMgY2hhciB0byB0aGUgbGVmdDsgREVMIGRlbGV0ZXMgY2hhciB0byB0aGUgcmlnaHQuCisgICAgICAgIENvbnRyb2wtYmFja3NwYWNlIGRlbGV0ZXMgd29yZCBsZWZ0LCBDb250cm9sLURFTCBkZWxldGVzIHdvcmQgcmlnaHQuCisgICAgICAgIEFycm93IGtleXMgYW5kIFBhZ2UgVXAvRG93biBtb3ZlIGFyb3VuZC4KKyAgICAgICAgQ29udHJvbC1sZWZ0L3JpZ2h0IEFycm93IG1vdmVzIGJ5IHdvcmRzIGluIGEgc3RyYW5nZSBidXQgdXNlZnVsIHdheS4KKyAgICAgICAgSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmUuCisgICAgICAgIENvbnRyb2wtSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGZpbGUuCisgICAgICAgIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisgICAgICAgICAgICAgICAgQ29udHJvbC1hICAgICBiZWdpbm5pbmcgb2YgbGluZQorICAgICAgICAgICAgICAgIENvbnRyb2wtZSAgICAgZW5kIG9mIGxpbmUKKyAgICAgICAgICAgICAgICBDb250cm9sLWsgICAgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKyAgICAgICAgICAgICAgICBDb250cm9sLWwgICAgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKyAgICAgICAgU3RhbmRhcmQga2V5YmluZGluZ3MgKGxpa2UgQ29udHJvbC1jIHRvIGNvcHkgYW5kIENvbnRyb2wtdiB0bworICAgICAgICBwYXN0ZSkgbWF5IHdvcmsuICBLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ3VyZSBJRExFCisgICAgICAgIGRpYWxvZy4KIAogQXV0b21hdGljIGluZGVudGF0aW9uOgogCi0JQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcwotCShpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMKLQkoYnJlYWssIHJldHVybiBldGMuKSB0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZwotCWluZGVudGF0aW9uLCBCYWNrc3BhY2UgZGVsZXRlcyB1cCB0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gIFRhYgotCWluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24KLQlJbmRlbnQgV2lkdGguICAoTi5CLiBDdXJyZW50bHkgdGFicyBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUKLQl0byBUY2wvVGsgaXNzdWVzLikKKyAgICAgICAgQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcworICAgICAgICAoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzCisgICAgICAgIChicmVhaywgcmV0dXJuIGV0Yy4pIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nCisgICAgICAgIGluZGVudGF0aW9uLCBCYWNrc3BhY2UgZGVsZXRlcyB1cCB0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gIFRhYgorICAgICAgICBpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgb25lIHRhYiksIG51bWJlciBkZXBlbmRzIG9uCisgICAgICAgIEluZGVudCBXaWR0aC4gQ3VycmVudGx5IHRhYnMgYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlCisgICAgICAgIHRvIFRjbC9UayBsaW1pdGF0aW9ucy4KIAogICAgICAgICBTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS4KIAogQ29tcGxldGlvbnM6CiAKLQlDb21wbGV0aW9ucyBhcmUgc3VwcGxpZWQgZm9yIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIGF0dHJpYnV0ZXMgb2YKLQljbGFzc2VzLCBib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuICBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZAotCWZvciBmaWxlbmFtZXMuCisgICAgICAgIENvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZgorICAgICAgICBjbGFzc2VzLCBib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuICBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZAorICAgICAgICBmb3IgZmlsZW5hbWVzLgogCi0JVGhlIEF1dG9Db21wbGV0ZVdpbmRvdyAoQUNXKSB3aWxsIG9wZW4gYWZ0ZXIgYSBwcmVkZWZpbmVkIGRlbGF5Ci0JKGRlZmF1bHQgaXMgdHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzCi0JdHlwZWQuICBJZiBhZnRlciBvbmUgb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIKLQljaGFyYWN0ZXJzKSB5b3UgdHlwZSBhIFRhYiB0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlCi0JY29udGludWF0aW9uIGlzIGZvdW5kLgorICAgICAgICBUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkKKyAgICAgICAgKGRlZmF1bHQgaXMgdHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzCisgICAgICAgIHR5cGVkLiAgSWYgYWZ0ZXIgb25lIG9mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyCisgICAgICAgIGNoYXJhY3RlcnMpIGEgdGFiIGlzIHR5cGVkIHRoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUKKyAgICAgICAgY29udGludWF0aW9uIGlzIGZvdW5kLgogCi0JSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQotCVRhYiB3aWxsIHN1cHBseSB0aGF0IGNvbXBsZXRpb24gd2l0aG91dCBvcGVuaW5nIHRoZSBBQ1cuCisgICAgICAgIElmIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gZm9yIHRoZSBjaGFyYWN0ZXJzIGVudGVyZWQsIGEKKyAgICAgICAgdGFiIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KIAotCSdTaG93IENvbXBsZXRpb25zJyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuICBJbiBhbiBlbXB0eQotCXN0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9uIGEKLQlibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAotCWNsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuICBJZiBzb21lCi0JY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KKyAgICAgICAgJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdywgYnkgZGVmYXVsdCB0aGUKKyAgICAgICAgQ29udHJvbC1zcGFjZSBrZXlzIHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gIEluIGFuIGVtcHR5CisgICAgICAgIHN0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9uIGEKKyAgICAgICAgYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKKyAgICAgICAgY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gIElmIHNvbWUKKyAgICAgICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KIAotCUlmIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGlzIHR5cGVkLCB0aGUgQUNXIHNlbGVjdGlvbiB3aWxsIGp1bXAgdG8gdGhlCi0JZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuIEVudGVyaW5nIGEgVGFiIHdpbGwgY2F1c2UKLQl0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXQgd2luZG93IG9yCi0JU2hlbGwuICBUd28gVGFicyBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcwotCXdpbGwgUmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2UKLQlzZWxlY3Rpb24sIGFuZCB0aGUgc2Nyb2xsd2hlZWwgYWxsIG9wZXJhdGUgb24gdGhlIEFDVy4KKyAgICAgICAgSWYgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKKyAgICAgICAgZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuIEVudGVyaW5nIGEgdGFiIHdpbGwgY2F1c2UKKyAgICAgICAgdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0IHdpbmRvdyBvcgorICAgICAgICBTaGVsbC4gIFR3byB0YWJzIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCisgICAgICAgIHdpbGwgcmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2UKKyAgICAgICAgc2VsZWN0aW9uLCBhbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgogCi0JJ0hpZGRlbicgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCi0JbmFtZSBhZnRlciBhICcuJy4gIGUuZy4gJ18nLiAgVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAotCSdfX2FsbF9fJyBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy4KKyAgICAgICAgIkhpZGRlbiIgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCisgICAgICAgIG5hbWUgYWZ0ZXIgYSAnLicsICBlLmcuICdfJy4gIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKKyAgICAgICAgJ19fYWxsX18nIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgogCi0JQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKKyAgICAgICAgQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKIAotCUNvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gIE5hbWVzIGluCi0JYW4gRWRpdCB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgX19tYWluX18gb3Igc3lzLm1vZHVsZXMgd2lsbCBub3QgYmUKLQlmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzCi0Jc2l0dWF0aW9uLiAgTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluCi0Jc3lzLm1vZHVsZXMsIHNvIG11Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS4KKyAgICAgICAgQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiAgTmFtZXMgaW4KKyAgICAgICAgYW4gRWRpdG9yIHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBfX21haW5fXyBvciBzeXMubW9kdWxlcyB3aWxsIG5vdCBiZQorICAgICAgICBmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzCisgICAgICAgIHNpdHVhdGlvbi4gIE5vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbgorICAgICAgICBzeXMubW9kdWxlcywgc28gbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgogCi0JSWYgeW91IGRvbid0IGxpa2UgdGhlIEFDVyBwb3BwaW5nIHVwIHVuYmlkZGVuLCBzaW1wbHkgbWFrZSB0aGUgZGVsYXkKLQlsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT1RPSCwgeW91IGNvdWxkIG1ha2UgdGhlIGRlbGF5IHplcm8uCi0KLQlZb3UgY291bGQgYWxzbyBzd2l0Y2ggb2ZmIHRoZSBDYWxsVGlwcyBleHRlbnNpb24uICAoV2Ugd2lsbCBiZSBhZGRpbmcKLQlhIGRlbGF5IHRvIHRoZSBjYWxsIHRpcCB3aW5kb3cuKQorICAgICAgICBJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorICAgICAgICBsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT3IgYW5vdGhlciBvcHRpb24gaXMgdGhlIGRlbGF5IGNvdWxkCisgICAgICAgIGJlIHNldCB0byB6ZXJvLiBBbm90aGVyIGFsdGVybmF0aXZlIHRvIHByZXZlbnRpbmcgQUNXIHBvcHVwcyBpcyB0bworICAgICAgICBkaXNhYmxlIHRoZSBjYWxsIHRpcHMgZXh0ZW5zaW9uLgogCiBQeXRob24gU2hlbGwgd2luZG93OgogCi0JQ29udHJvbC1jIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQuCi0JQ29udHJvbC1kIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0ID4+PiBwcm9tcHQuCisgICAgICAgIENvbnRyb2wtYyBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kLgorICAgICAgICBDb250cm9sLWQgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgPj4+IHByb21wdC4KKyAgICAgICAgQWx0LS8gZXhwYW5kIHdvcmQgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZy4KIAogICAgIENvbW1hbmQgaGlzdG9yeToKIAotCUFsdC1wIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuCi0JQWx0LW4gcmV0cmlldmVzIG5leHQuCi0JICAgICAgKFRoZXNlIGFyZSBDb250cm9sLXAsIENvbnRyb2wtbiBvbiBPUyBYKQotCVJldHVybiB3aGlsZSBjdXJzb3IgaXMgb24gYSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQuCi0JRXhwYW5kIHdvcmQgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZy4KKyAgICAgICAgQWx0LXAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4gT24gT1MgWAorICAgICAgICB1c2UgQ29udHJvbC1wLgorICAgICAgICBBbHQtbiByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgQ29udHJvbC1uLgorICAgICAgICBSZXR1cm4gd2hpbGUgY3Vyc29yIGlzIG9uIGEgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kLgogCiAgICAgU3ludGF4IGNvbG9yczoKIAotCVRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkIiwgc28geW91IG1heQotCW9jY2FzaW9uYWxseSBzZWUgdW5jb2xvcml6ZWQgdGV4dC4gIFRvIGNoYW5nZSB0aGUgY29sb3IKLQlzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgLyBIaWdobGlnaHRpbmcgZGlhbG9nLgorICAgICAgICBUaGUgY29sb3JpbmcgaXMgYXBwbGllZCBpbiBhIGJhY2tncm91bmQgInRocmVhZCIsIHNvIHlvdSBtYXkKKyAgICAgICAgb2NjYXNpb25hbGx5IHNlZSB1bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvcgorICAgICAgICBzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgLyBIaWdobGlnaHRpbmcgZGlhbG9nLgogCiAgICAgUHl0aG9uIGRlZmF1bHQgc3ludGF4IGNvbG9yczoKIAotCUtleXdvcmRzCW9yYW5nZQotCUJ1aWx0aW5zCXJveWFsIHB1cnBsZQotCVN0cmluZ3MJCWdyZWVuCi0JQ29tbWVudHMJcmVkCi0JRGVmaW5pdGlvbnMJYmx1ZQorICAgICAgICBLZXl3b3JkcyAgICAgICAgb3JhbmdlCisgICAgICAgIEJ1aWx0aW5zICAgICAgICByb3lhbCBwdXJwbGUKKyAgICAgICAgU3RyaW5ncyAgICAgICAgIGdyZWVuCisgICAgICAgIENvbW1lbnRzICAgICAgICByZWQKKyAgICAgICAgRGVmaW5pdGlvbnMgICAgIGJsdWUKIAogICAgIFNoZWxsIGRlZmF1bHQgY29sb3JzOgogCi0JQ29uc29sZSBvdXRwdXQJYnJvd24KLQlzdGRvdXQJCWJsdWUKLQlzdGRlcnIJCXJlZAotCXN0ZGluCQlibGFjaworICAgICAgICBDb25zb2xlIG91dHB1dCAgYnJvd24KKyAgICAgICAgc3Rkb3V0ICAgICAgICAgIGJsdWUKKyAgICAgICAgc3RkZXJyICAgICAgICAgIHJlZAorICAgICAgICBzdGRpbiAgICAgICAgICAgYmxhY2sKIAogT3RoZXIgcHJlZmVyZW5jZXM6CiAKLQlUaGUgZm9udCBwcmVmZXJlbmNlcywga2V5YmluZGluZywgYW5kIHN0YXJ0dXAgcHJlZmVyZW5jZXMgY2FuCi0JYmUgY2hhbmdlZCB1c2luZyB0aGUgU2V0dGluZ3MgZGlhbG9nLgorICAgICAgICBUaGUgZm9udCBwcmVmZXJlbmNlcywgaGlnaGxpZ2h0aW5nLCBrZXlzLCBhbmQgZ2VuZXJhbCBwcmVmZXJlbmNlcyBjYW4KKyAgICAgICAgYmUgY2hhbmdlZCB2aWEgdGhlIENvbmZpZ3VyZSBJRExFIG1lbnUgb3B0aW9uLiAgQmUgc3VyZSB0byBub3RlIHRoYXQKKyAgICAgICAga2V5cyBjYW4gYmUgdXNlciBkZWZpbmVkLCBJRExFIHNoaXBzIHdpdGggZm91ciBidWlsdCBpbiBrZXkgc2V0cy4gSW4KKyAgICAgICAgYWRkaXRpb24gYSB1c2VyIGNhbiBjcmVhdGUgYSBjdXN0b20ga2V5IHNldCBpbiB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nIHVuZGVyIHRoZSBrZXlzIHRhYi4KIAogQ29tbWFuZCBsaW5lIHVzYWdlOgogCi0JRW50ZXIgaWRsZSAtaCBhdCB0aGUgY29tbWFuZCBwcm9tcHQgdG8gZ2V0IGEgdXNhZ2UgbWVzc2FnZS4KKyAgICAgICAgRW50ZXIgaWRsZSAtaCBhdCB0aGUgY29tbWFuZCBwcm9tcHQgdG8gZ2V0IGEgdXNhZ2UgbWVzc2FnZS4KIAotUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczoKKyAgICAgICAgaWRsZS5weSBbLWMgY29tbWFuZF0gWy1kXSBbLWVdIFstc10gWy10IHRpdGxlXSBbYXJnXSAuLi4KIAotCUlmIElETEUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIGl0IHdpbGwgcnVuIGluIGEKLQlzaW5nbGUgcHJvY2VzcyBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZSBzdWJwcm9jZXNzIHdoaWNoIHJ1bnMgdGhlIFJQQwotCVB5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCi0JdGhlIHN1YnByb2Nlc3Mgb3IgdGhlIFJQQyBzb2NrZXQgaW50ZXJmYWNlIG9uIHlvdXIgcGxhdGZvcm0uICBIb3dldmVyLAotCWluIHRoaXMgbW9kZSB1c2VyIGNvZGUgaXMgbm90IGlzb2xhdGVkIGZyb20gSURMRSBpdHNlbGYuICBBbHNvLCB0aGUKLQllbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCi0JeW91ciBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLCB5b3UgbXVzdCByZWxvYWQoKSB0aGUgYWZmZWN0ZWQgbW9kdWxlcyBhbmQKLQlyZS1pbXBvcnQgYW55IHNwZWNpZmljIGl0ZW1zIChlLmcuIGZyb20gZm9vIGltcG9ydCBiYXopIGlmIHRoZSBjaGFuZ2VzCi0JYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKLQl3aXRoIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICAtYyBjb21tYW5kICBydW4gdGhpcyBjb21tYW5kCisgICAgICAgIC1kICAgICAgICAgIGVuYWJsZSBkZWJ1Z2dlcgorICAgICAgICAtZSAgICAgICAgICBlZGl0IG1vZGU7IGFyZ3VtZW50cyBhcmUgZmlsZXMgdG8gYmUgZWRpdGVkCisgICAgICAgIC1zICAgICAgICAgIHJ1biAkSURMRVNUQVJUVVAgb3IgJFBZVEhPTlNUQVJUVVAgZmlyc3QKKyAgICAgICAgLXQgdGl0bGUgICAgc2V0IHRpdGxlIG9mIHNoZWxsIHdpbmRvdworCisgICAgICAgIElmIHRoZXJlIGFyZSBhcmd1bWVudHM6CisgICAgICAgIDEuIElmIC1lIGlzIHVzZWQsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZCBzeXMuYXJndgorICAgICAgICAgICByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi4KKyAgICAgICAgMi4gT3RoZXJ3aXNlLCBpZiAtYyBpcyB1c2VkLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4KKyAgICAgICAgICAgc3lzLmFyZ3ZbMTouLi5dLCB3aXRoIHN5cy5hcmd2WzBdIHNldCB0byAtYy4KKyAgICAgICAgMy4gT3RoZXJ3aXNlLCBpZiBuZWl0aGVyIC1lIG5vciAtYyBpcyB1c2VkLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYQorICAgICAgICAgICBzY3JpcHQgd2hpY2ggaXMgZXhlY3V0ZWQgd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBpbgorICAgICAgICAgICBzeXMuYXJndlsxOi4uLl0gIGFuZCBzeXMuYXJndlswXSBzZXQgdG8gdGhlIHNjcmlwdCBuYW1lLiAgSWYgdGhlCisgICAgICAgICAgIHNjcmlwdCBuYW1lIGlzIC0sIG5vIHNjcmlwdCBpcyBleGVjdXRlZCBidXQgYW4gaW50ZXJhY3RpdmUgUHl0aG9uCisgICAgICAgICAgIHNlc3Npb24gaXMgc3RhcnRlZDsgdGhlIGFyZ3VtZW50cyBhcmUgc3RpbGwgYXZhaWxhYmxlIGluIHN5cy5hcmd2LgorCitSdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzOiAoREVQUkVDQVRFRCBpbiBQeXRob24gMy40IHNlZSBJc3N1ZSAxNjEyMykKKworICAgICAgICBJZiBJRExFIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgLW4gY29tbWFuZCBsaW5lIHN3aXRjaCBpdCB3aWxsIHJ1biBpbiBhCisgICAgICAgIHNpbmdsZSBwcm9jZXNzIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlIHN1YnByb2Nlc3Mgd2hpY2ggcnVucyB0aGUgUlBDCisgICAgICAgIFB5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCisgICAgICAgIHRoZSBzdWJwcm9jZXNzIG9yIHRoZSBSUEMgc29ja2V0IGludGVyZmFjZSBvbiB5b3VyIHBsYXRmb3JtLiAgSG93ZXZlciwKKyAgICAgICAgaW4gdGhpcyBtb2RlIHVzZXIgY29kZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSBJRExFIGl0c2VsZi4gIEFsc28sIHRoZQorICAgICAgICBlbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCisgICAgICAgIHlvdXIgY29kZSBoYXMgYmVlbiBtb2RpZmllZCwgeW91IG11c3QgcmVsb2FkKCkgdGhlIGFmZmVjdGVkIG1vZHVsZXMgYW5kCisgICAgICAgIHJlLWltcG9ydCBhbnkgc3BlY2lmaWMgaXRlbXMgKGUuZy4gZnJvbSBmb28gaW1wb3J0IGJheikgaWYgdGhlIGNoYW5nZXMKKyAgICAgICAgYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKKyAgICAgICAgd2l0aCB0aGUgZGVmYXVsdCBzdWJwcm9jZXNzIGlmIGF0IGFsbCBwb3NzaWJsZS4KIAogRXh0ZW5zaW9uczoKIAotCUlETEUgY29udGFpbnMgYW4gZXh0ZW5zaW9uIGZhY2lsaXR5LiAgU2VlIHRoZSBiZWdpbm5pbmcgb2YKLQljb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgotCVRoZSBkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKKyAgICAgICAgSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgorICAgICAgICBjb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgZGVmYXVsdCBleHRlbnNpb25zIGFyZSBjdXJyZW50bHk6CiAKLQkJRm9ybWF0UGFyYWdyYXBoCi0JCUF1dG9FeHBhbmQKLQkJWm9vbUhlaWdodAotCQlTY3JpcHRCaW5kaW5nCi0JCUNhbGxUaXBzCi0JCVBhcmVuTWF0Y2gKLQkJQXV0b0NvbXBsZXRlCi0JCUNvZGVDb250ZXh0CisgICAgICAgICAgICAgICAgRm9ybWF0UGFyYWdyYXBoCisgICAgICAgICAgICAgICAgQXV0b0V4cGFuZAorICAgICAgICAgICAgICAgIFpvb21IZWlnaHQKKyAgICAgICAgICAgICAgICBTY3JpcHRCaW5kaW5nCisgICAgICAgICAgICAgICAgQ2FsbFRpcHMKKyAgICAgICAgICAgICAgICBQYXJlbk1hdGNoCisgICAgICAgICAgICAgICAgQXV0b0NvbXBsZXRlCisgICAgICAgICAgICAgICAgQ29kZUNvbnRleHQKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CmluZGV4IDYwZjFkMzIuLmNkMmM4YmYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQpAQCAtMSArMSBAQAotSURMRV9WRVJTSU9OID0gIjMuMy4zIgorSURMRV9WRVJTSU9OID0gIjMuNC4wYjEiCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ycGMucHkgYi9MaWIvaWRsZWxpYi9ycGMucHkKaW5kZXggZGRjZTZlOS4uOWM1MWI4ZiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvcnBjLnB5CisrKyBiL0xpYi9pZGxlbGliL3JwYy5weQpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgICByZXR1cm4gKCJDQUxMRVhDIiwgZXgpCkBAIC0zNDAsNyArMzQwLDcgQEAKICAgICAgICAgICAgICAgICBuID0gc2VsZi5zb2NrLnNlbmQoc1s6QlVGU0laRV0pCiAgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInNvY2tldCBubyBsb25nZXIgZXhpc3RzIikKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzID0gc1tuOl0KQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuc29jay5yZWN2KEJVRlNJWkUpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKICAgICAgICAgICAgIGlmIGxlbihzKSA9PSAwOgogICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCkBAIC01MzcsNyArNTM3LDcgQEAKICAgICAgICAgICAgIFNvY2tldElPLl9faW5pdF9fKHNlbGYsIHdvcmtpbmdfc29jaykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByaW50KCIqKiBJbnZhbGlkIGhvc3Q6ICIsIGFkZHJlc3MsIGZpbGU9c3lzLl9fc3RkZXJyX18pCi0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKIAogICAgIGRlZiBnZXRfcmVtb3RlX3Byb3h5KHNlbGYsIG9pZCk6CiAgICAgICAgIHJldHVybiBSUENQcm94eShzZWxmLCBvaWQpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ydW4ucHkgYi9MaWIvaWRsZWxpYi9ydW4ucHkKaW5kZXggYzE4NTliNi4uMTNjZWM2MiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvcnVuLnB5CisrKyBiL0xpYi9pZGxlbGliL3J1bi5weQpAQCAtMTUwLDggKzE1MCw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlcnZlciA9IE15UlBDU2VydmVyKGFkZHJlc3MsIE15SGFuZGxlcikKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgcHJpbnQoIklETEUgU3VicHJvY2Vzczogc29ja2V0IGVycm9yOiAiICsgZXJyLmFyZ3NbMV0gKworICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBwcmludCgiSURMRSBTdWJwcm9jZXNzOiBPU0Vycm9yOiAiICsgZXJyLmFyZ3NbMV0gKwogICAgICAgICAgICAgICAgICAgIiwgcmV0cnlpbmcuLi4uIiwgZmlsZT1zeXMuX19zdGRlcnJfXykKICAgICAgICAgICAgIHNvY2tldF9lcnJvciA9IGVycgogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvaW1hcGxpYi5weSBiL0xpYi9pbWFwbGliLnB5CmluZGV4IDNmNjY1NmEuLmRhYmYxNjEgMTAwNjQ0Ci0tLSBhL0xpYi9pbWFwbGliLnB5CisrKyBiL0xpYi9pbWFwbGliLnB5CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByYWlzZQogCkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgVGhlIHNlcnZlciBtaWdodCBhbHJlYWR5IGhhdmUgY2xvc2VkIHRoZSBjb25uZWN0aW9uCiAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC01NTQsNyArNTU0LDcgQEAKICAgICAgICAgaW1wb3J0IGhtYWMKICAgICAgICAgcHdkID0gKHNlbGYucGFzc3dvcmQuZW5jb2RlKCdBU0NJSScpIGlmIGlzaW5zdGFuY2Uoc2VsZi5wYXNzd29yZCwgc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzZWxmLnBhc3N3b3JkKQotICAgICAgICByZXR1cm4gc2VsZi51c2VyICsgIiAiICsgaG1hYy5ITUFDKHB3ZCwgY2hhbGxlbmdlKS5oZXhkaWdlc3QoKQorICAgICAgICByZXR1cm4gc2VsZi51c2VyICsgIiAiICsgaG1hYy5ITUFDKHB3ZCwgY2hhbGxlbmdlLCAnbWQ1JykuaGV4ZGlnZXN0KCkKIAogCiAgICAgZGVmIGxvZ291dChzZWxmKToKQEAgLTc0Miw5ICs3NDIsNyBAQAogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnVExTIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKICAgICAgICAgIyBHZW5lcmF0ZSBhIGRlZmF1bHQgU1NMIGNvbnRleHQgaWYgbm9uZSB3YXMgcGFzc2VkLgogICAgICAgICBpZiBzc2xfY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICAgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCi0gICAgICAgICAgICBzc2xfY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCiAgICAgICAgIHR5cCwgZGF0ID0gc2VsZi5fc2ltcGxlX2NvbW1hbmQobmFtZSkKICAgICAgICAgaWYgdHlwID09ICdPSyc6CiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2xfY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCkBAIC05MTUsNyArOTEzLDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnNlbmQoZGF0YSArIENSTEYpCi0gICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBPU0Vycm9yKSBhcyB2YWw6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHZhbDoKICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogJXMnICUgdmFsKQogCiAgICAgICAgIGlmIGxpdGVyYWwgaXMgTm9uZToKQEAgLTk0MCw3ICs5MzgsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc2VuZChsaXRlcmFsKQogICAgICAgICAgICAgICAgIHNlbGYuc2VuZChDUkxGKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIE9TRXJyb3IpIGFzIHZhbDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHZhbDoKICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6ICVzJyAlIHZhbCkKIAogICAgICAgICAgICAgaWYgbm90IGxpdGVyYXRvcjoKQEAgLTEwODUsNyArMTA4Myw3IEBACiAKICAgICAgICAgIyBQcm90b2NvbCBtYW5kYXRlcyBhbGwgbGluZXMgdGVybWluYXRlZCBieSBDUkxGCiAgICAgICAgIGlmIG5vdCBsaW5lLmVuZHN3aXRoKGInXHJcbicpOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiB1bnRlcm1pbmF0ZWQgbGluZScpCisgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6IHVudGVybWluYXRlZCBsaW5lOiAlcicgJSBsaW5lKQogCiAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KICAgICAgICAgaWYgX19kZWJ1Z19fOgpAQCAtMTIxMCwxNSArMTIwOCwxNSBAQAogCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIHNzbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuc3NsX2NvbnRleHQgPSBzc2xfY29udGV4dAogICAgICAgICAgICAgSU1BUDQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCkKIAogICAgICAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZik6CiAgICAgICAgICAgICBzb2NrID0gSU1BUDQuX2NyZWF0ZV9zb2NrZXQoc2VsZikKLSAgICAgICAgICAgIGlmIHNlbGYuc3NsX2NvbnRleHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zc2xfY29udGV4dC53cmFwX3NvY2tldChzb2NrKQogCiAgICAgICAgIGRlZiBvcGVuKHNlbGYsIGhvc3Q9JycsIHBvcnQ9SU1BUDRfU1NMX1BPUlQpOgogICAgICAgICAgICAgIiIiU2V0dXAgY29ubmVjdGlvbiB0byByZW1vdGUgc2VydmVyIG9uICJob3N0OnBvcnQiLgpkaWZmIC0tZ2l0IGEvTGliL2ltZ2hkci5weSBiL0xpYi9pbWdoZHIucHkKaW5kZXggNmVlNDVkYS4uMGNiYTA2MyAxMDA2NDQKLS0tIGEvTGliL2ltZ2hkci5weQorKysgYi9MaWIvaW1naGRyLnB5CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByaW50KHdoYXQoZmlsZW5hbWUpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwcmludCgnKioqIG5vdCBmb3VuZCAqKionKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL2ltcC5weSBiL0xpYi9pbXAucHkKaW5kZXggNDA4ODM4My4uYzg0NDljNiAxMDA2NDQKLS0tIGEvTGliL2ltcC5weQorKysgYi9MaWIvaW1wLnB5CkBAIC0xNiwxOCArMTYsMjAgQEAKICAgICAjIFBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcuCiAgICAgbG9hZF9keW5hbWljID0gTm9uZQogCi0jIERpcmVjdGx5IGV4cG9zZWQgYnkgdGhpcyBtb2R1bGUKLWZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IG5ld19tb2R1bGUKLWZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlLCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgU291cmNlbGVzc0ZpbGVMb2FkZXIsIF9FUlJfTVNHLCBfU3BlY01ldGhvZHMKIAotCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRva2VuaXplCitpbXBvcnQgdHlwZXMKIGltcG9ydCB3YXJuaW5ncwogCit3YXJuaW5ncy53YXJuKCJ0aGUgaW1wIG1vZHVsZSBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBpbXBvcnRsaWI7ICIKKyAgICAgICAgICAgICAgInNlZSB0aGUgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbiBmb3IgYWx0ZXJuYXRpdmUgdXNlcyIsCisgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKICMgREVQUkVDQVRFRAogU0VBUkNIX0VSUk9SID0gMApAQCAtNDIsOSArNDQsMjMgQEAKIElNUF9IT09LID0gOQogCiAKK2RlZiBuZXdfbW9kdWxlKG5hbWUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBDcmVhdGUgYSBuZXcgbW9kdWxlLgorCisgICAgVGhlIG1vZHVsZSBpcyBub3QgZW50ZXJlZCBpbnRvIHN5cy5tb2R1bGVzLgorCisgICAgIiIiCisgICAgcmV0dXJuIHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKworCiBkZWYgZ2V0X21hZ2ljKCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4iIiIKLSAgICByZXR1cm4gX2Jvb3RzdHJhcC5fTUFHSUNfQllURVMKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4KKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5NQUdJQ19OVU1CRVIKIAogCiBkZWYgZ2V0X3RhZygpOgpAQCAtNTIsMTIgKzY4LDQyIEBACiAgICAgcmV0dXJuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKIAogCitkZWYgY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGU9Tm9uZSk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5Yy8ucHlvIGZpbGUuCisKKyAgICBUaGUgLnB5IGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0byB0aGUKKyAgICAucHljLy5weW8gZmlsZSBjYWxjdWxhdGVkIGFzIGlmIHRoZSAucHkgZmlsZSB3ZXJlIGltcG9ydGVkLiAgVGhlIGV4dGVuc2lvbgorICAgIHdpbGwgYmUgLnB5YyB1bmxlc3Mgc3lzLmZsYWdzLm9wdGltaXplIGlzIG5vbi16ZXJvLCB0aGVuIGl0IHdpbGwgYmUgLnB5by4KKworICAgIElmIGRlYnVnX292ZXJyaWRlIGlzIG5vdCBOb25lLCB0aGVuIGl0IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGluCisgICAgcGxhY2Ugb2Ygc3lzLmZsYWdzLm9wdGltaXplLgorCisgICAgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZSkKKworCitkZWYgc291cmNlX2Zyb21fY2FjaGUocGF0aCk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5Yy4vLnB5byBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weSBmaWxlLgorCisgICAgVGhlIC5weWMvLnB5byBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8KKyAgICB0aGUgLnB5IGZpbGUgY2FsY3VsYXRlZCB0byBjb3JyZXNwb25kIHRvIHRoZSAucHljLy5weW8gZmlsZS4gIElmIHBhdGggZG9lcworICAgIG5vdCBjb25mb3JtIHRvIFBFUCAzMTQ3IGZvcm1hdCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4gSWYKKyAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUgdGhlbiBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4KKworICAgICIiIgorICAgIHJldHVybiB1dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKwogZGVmIGdldF9zdWZmaXhlcygpOgotICAgIHdhcm5pbmdzLndhcm4oJ2ltcC5nZXRfc3VmZml4ZXMoKSBpcyBkZXByZWNhdGVkOyB1c2UgdGhlIGNvbnN0YW50cyAnCi0gICAgICAgICAgICAgICAgICAnZGVmaW5lZCBvbiBpbXBvcnRsaWIubWFjaGluZXJ5IGluc3RlYWQnLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgZXh0ZW5zaW9ucyA9IFsocywgJ3JiJywgQ19FWFRFTlNJT04pIGZvciBzIGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVNdCi0gICAgc291cmNlID0gWyhzLCAnVScsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KKyAgICBzb3VyY2UgPSBbKHMsICdyJywgUFlfU09VUkNFKSBmb3IgcyBpbiBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTXQogICAgIGJ5dGVjb2RlID0gWyhzLCAncmInLCBQWV9DT01QSUxFRCkgZm9yIHMgaW4gbWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTXQogCiAgICAgcmV0dXJuIGV4dGVuc2lvbnMgKyBzb3VyY2UgKyBieXRlY29kZQpAQCAtNjUsNyArMTExLDExIEBACiAKIGNsYXNzIE51bGxJbXBvcnRlcjoKIAotICAgICIiIk51bGwgaW1wb3J0IG9iamVjdC4iIiIKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgTnVsbCBpbXBvcnQgb2JqZWN0LgorCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CiAgICAgICAgIGlmIHBhdGggPT0gJyc6CkBAIC0xMDYsNDggKzE1Niw0OSBAQAogICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKIAogCi1jbGFzcyBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsIF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcik6CitjbGFzcyBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsIG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKToKIAogICAgICIiIkNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgaW1wbGVtZW50aW5nIGxvYWRfc291cmNlKCkuIiIiCiAKIAogZGVmIGxvYWRfc291cmNlKG5hbWUsIHBhdGhuYW1lLCBmaWxlPU5vbmUpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfc291cmNlKCkgaXMgZGVwcmVjYXRlZDsgdXNlICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkubG9hZF9tb2R1bGUoKScKLSAgICAgICAgICAgJyBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgIF9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgIGxvYWRlciA9IF9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMubG9hZCgpCiAgICAgIyBUbyBhbGxvdyByZWxvYWRpbmcgdG8gcG90ZW50aWFsbHkgd29yaywgdXNlIGEgbm9uLWhhY2tlZCBsb2FkZXIgd2hpY2gKICAgICAjIHdvbid0IHJlbHkgb24gYSBub3ctY2xvc2VkIGZpbGUgb2JqZWN0LgotICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fc3BlY19fLmxvYWRlciA9IG1vZHVsZS5fX2xvYWRlcl9fCiAgICAgcmV0dXJuIG1vZHVsZQogCiAKLWNsYXNzIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLAotICAgICAgICBfYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKToKK2NsYXNzIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBTb3VyY2VsZXNzRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX2NvbXBpbGVkKCkuIiIiCiAKIAogZGVmIGxvYWRfY29tcGlsZWQobmFtZSwgcGF0aG5hbWUsIGZpbGU9Tm9uZSk6Ci0gICAgbXNnID0gKCdpbXAubG9hZF9jb21waWxlZCgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKS4nCi0gICAgICAgICAgICdsb2FkX21vZHVsZSgpIGluc3RlYWQgJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KG5hbWUsIHBhdGhuYW1lLCBmaWxlKS5sb2FkX21vZHVsZShuYW1lKQotICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgIiIiKipERVBSRUNBVEVEKioiIiIKKyAgICBsb2FkZXIgPSBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMubG9hZCgpCiAgICAgIyBUbyBhbGxvdyByZWxvYWRpbmcgdG8gcG90ZW50aWFsbHkgd29yaywgdXNlIGEgbm9uLWhhY2tlZCBsb2FkZXIgd2hpY2gKICAgICAjIHdvbid0IHJlbHkgb24gYSBub3ctY2xvc2VkIGZpbGUgb2JqZWN0LgotICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19sb2FkZXJfXyA9IFNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXwogICAgIHJldHVybiBtb2R1bGUKIAogCiBkZWYgbG9hZF9wYWNrYWdlKG5hbWUsIHBhdGgpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfcGFja2FnZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBlaXRoZXIgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCkgb3IgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcigpIGluc3RlYWQnKQotICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgIiIiKipERVBSRUNBVEVEKioiIiIKICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICBleHRlbnNpb25zID0gKG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVNbOl0gKwogICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU1s6XSkKQEAgLTE1Nyw3ICsyMDgsMTMgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneyFyfSBpcyBub3QgYSBwYWNrYWdlJy5mb3JtYXQocGF0aCkpCi0gICAgcmV0dXJuIF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKS5sb2FkX21vZHVsZShuYW1lKQorICAgIHNwZWMgPSB1dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIHJldHVybiBtZXRob2RzLmV4ZWMoc3lzLm1vZHVsZXNbbmFtZV0pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG1ldGhvZHMubG9hZCgpCiAKIAogZGVmIGxvYWRfbW9kdWxlKG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBkZXRhaWxzKToKQEAgLTE2OSwzMiArMjI2LDMwIEBACiAKICAgICAiIiIKICAgICBzdWZmaXgsIG1vZGUsIHR5cGVfID0gZGV0YWlscwotICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICBpZiBtb2RlIGFuZCAobm90IG1vZGUuc3RhcnRzd2l0aCgoJ3InLCAnVScpKSBvciAnKycgaW4gbW9kZSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKLSAgICAgICAgZWxpZiBmaWxlIGlzIE5vbmUgYW5kIHR5cGVfIGluIHtQWV9TT1VSQ0UsIFBZX0NPTVBJTEVEfToKLSAgICAgICAgICAgIG1zZyA9ICdmaWxlIG9iamVjdCByZXF1aXJlZCBmb3IgaW1wb3J0ICh0eXBlIGNvZGUge30pJy5mb3JtYXQodHlwZV8pCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQWV9TT1VSQ0U6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9zb3VyY2UobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9jb21waWxlZChuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0VYVEVOU0lPTiBhbmQgbG9hZF9keW5hbWljIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgb3BlbmVkX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIG9wZW5lZF9maWxlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBLR19ESVJFQ1RPUlk6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQotICAgICAgICBlbGlmIHR5cGVfID09IENfQlVJTFRJTjoKLSAgICAgICAgICAgIHJldHVybiBpbml0X2J1aWx0aW4obmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9mcm96ZW4obmFtZSkKKyAgICBpZiBtb2RlIGFuZCAobm90IG1vZGUuc3RhcnRzd2l0aCgoJ3InLCAnVScpKSBvciAnKycgaW4gbW9kZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgZmlsZSBvcGVuIG1vZGUgeyFyfScuZm9ybWF0KG1vZGUpKQorICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06CisgICAgICAgIG1zZyA9ICdmaWxlIG9iamVjdCByZXF1aXJlZCBmb3IgaW1wb3J0ICh0eXBlIGNvZGUge30pJy5mb3JtYXQodHlwZV8pCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgorICAgICAgICByZXR1cm4gbG9hZF9zb3VyY2UobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9DT01QSUxFRDoKKyAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBDX0VYVEVOU0lPTiBhbmQgbG9hZF9keW5hbWljIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgorICAgICAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIG9wZW5lZF9maWxlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnID0gICJEb24ndCBrbm93IGhvdyB0byBpbXBvcnQge30gKHR5cGUgY29kZSB7fSkiLmZvcm1hdChuYW1lLCB0eXBlXykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKKyAgICBlbGlmIHR5cGVfID09IFBLR19ESVJFQ1RPUlk6CisgICAgICAgIHJldHVybiBsb2FkX3BhY2thZ2UobmFtZSwgZmlsZW5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46CisgICAgICAgIHJldHVybiBpbml0X2J1aWx0aW4obmFtZSkKKyAgICBlbGlmIHR5cGVfID09IFBZX0ZST1pFTjoKKyAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgZWxzZToKKyAgICAgICAgbXNnID0gICJEb24ndCBrbm93IGhvdyB0byBpbXBvcnQge30gKHR5cGUgY29kZSB7fSkiLmZvcm1hdChuYW1lLCB0eXBlXykKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCiAKIAogZGVmIGZpbmRfbW9kdWxlKG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC0yMzAsNTQgKzI4NSwzMSBAQAogICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHBhY2thZ2VfZGlyZWN0b3J5LCBwYWNrYWdlX2ZpbGVfbmFtZSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHBhY2thZ2VfZGlyZWN0b3J5LCAoJycsICcnLCBQS0dfRElSRUNUT1JZKQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScpCi0gICAgICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKLSAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBuYW1lICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGVudHJ5LCBmaWxlX25hbWUpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGJyZWFrICAjIEJyZWFrIG91dCBvZiBvdXRlciBsb29wIHdoZW4gYnJlYWtpbmcgb3V0IG9mIGlubmVyIGxvb3AuCisgICAgICAgIGZvciBzdWZmaXgsIG1vZGUsIHR5cGVfIGluIGdldF9zdWZmaXhlcygpOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAorICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGVudHJ5LCBmaWxlX25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgogICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9ib290c3RyYXAuX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQogCiAgICAgZW5jb2RpbmcgPSBOb25lCi0gICAgaWYgbW9kZSA9PSAnVSc6CisgICAgaWYgJ2InIG5vdCBpbiBtb2RlOgogICAgICAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoZmlsZS5yZWFkbGluZSlbMF0KICAgICBmaWxlID0gb3BlbihmaWxlX3BhdGgsIG1vZGUsIGVuY29kaW5nPWVuY29kaW5nKQogICAgIHJldHVybiBmaWxlLCBmaWxlX3BhdGgsIChzdWZmaXgsIG1vZGUsIHR5cGVfKQogCiAKLV9SRUxPQURJTkcgPSB7fQotCiBkZWYgcmVsb2FkKG1vZHVsZSk6Ci0gICAgIiIiUmVsb2FkIHRoZSBtb2R1bGUgYW5kIHJldHVybiBpdC4KKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgUmVsb2FkIHRoZSBtb2R1bGUgYW5kIHJldHVybiBpdC4KIAogICAgIFRoZSBtb2R1bGUgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGltcG9ydGVkIGJlZm9yZS4KIAogICAgICIiIgotICAgIGlmIG5vdCBtb2R1bGUgb3IgdHlwZShtb2R1bGUpICE9IHR5cGUoc3lzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJyZWxvYWQoKSBhcmd1bWVudCBtdXN0IGJlIG1vZHVsZSIpCi0gICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICBtc2cgPSAibW9kdWxlIHt9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQotICAgIGlmIG5hbWUgaW4gX1JFTE9BRElORzoKLSAgICAgICAgcmV0dXJuIF9SRUxPQURJTkdbbmFtZV0KLSAgICBfUkVMT0FESU5HW25hbWVdID0gbW9kdWxlCi0gICAgdHJ5OgotICAgICAgICBwYXJlbnRfbmFtZSA9IG5hbWUucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIGlmIHBhcmVudF9uYW1lIGFuZCBwYXJlbnRfbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBtc2cgPSAicGFyZW50IHshcn0gbm90IGluIHN5cy5tb2R1bGVzIgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChwYXJlbnRfbmFtZSksIG5hbWU9cGFyZW50X25hbWUpCi0gICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICMgVGhlIG1vZHVsZSBtYXkgaGF2ZSByZXBsYWNlZCBpdHNlbGYgaW4gc3lzLm1vZHVsZXMhCi0gICAgICAgIHJldHVybiBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dCi0gICAgZmluYWxseToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVsIF9SRUxPQURJTkdbbmFtZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBpbXBvcnRsaWIucmVsb2FkKG1vZHVsZSkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkgYi9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CmluZGV4IDIyYzkwZjIuLjNlOTY5YmIgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKKysrIGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQpAQCAtMSw1ICsxLDUgQEAKICIiIkEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgaW1wb3J0LiIiIgotX19hbGxfXyA9IFsnX19pbXBvcnRfXycsICdpbXBvcnRfbW9kdWxlJywgJ2ludmFsaWRhdGVfY2FjaGVzJ10KK19fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcycsICdyZWxvYWQnXQogCiAjIEJvb3RzdHJhcCBoZWxwICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTExLDYgKzExLDcgQEAKICMgaW5pdGlhbGlzZWQgYmVsb3cgaWYgdGhlIGZyb3plbiBvbmUgaXMgbm90IGF2YWlsYWJsZSkuCiBpbXBvcnQgX2ltcCAgIyBKdXN0IHRoZSBidWlsdGluIGNvbXBvbmVudCwgTk9UIHRoZSBmdWxsIFB5dGhvbiBtb2R1bGUKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogCiB0cnk6CiAgICAgaW1wb3J0IF9mcm96ZW5faW1wb3J0bGliIGFzIF9ib290c3RyYXAKQEAgLTQ1LDE5ICs0Niw0MiBAQAogICAgICAgICAgICAgZmluZGVyLmludmFsaWRhdGVfY2FjaGVzKCkKIAogCi1kZWYgZmluZF9sb2FkZXIobmFtZSwgcGF0aD1Ob25lKToKLSAgICAiIiJGaW5kIHRoZSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorZGVmIGZpbmRfc3BlYyhuYW1lLCBwYXRoPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3BlYyBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuCiAKICAgICBGaXJzdCwgc3lzLm1vZHVsZXMgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbXBvcnRlZC4gSWYKLSAgICBzbywgdGhlbiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fIGlzIHJldHVybmVkLiBJZiB0aGF0IGhhcHBlbnMgdG8gYmUKKyAgICBzbywgdGhlbiBzeXMubW9kdWxlc1tuYW1lXS5fX3NwZWNfXyBpcyByZXR1cm5lZC4gSWYgdGhhdCBoYXBwZW5zIHRvIGJlCiAgICAgc2V0IHRvIE5vbmUsIHRoZW4gVmFsdWVFcnJvciBpcyByYWlzZWQuIElmIHRoZSBtb2R1bGUgaXMgbm90IGluCi0gICAgc3lzLm1vZHVsZXMsIHRoZW4gc3lzLm1ldGFfcGF0aCBpcyBzZWFyY2hlZCBmb3IgYSBzdWl0YWJsZSBsb2FkZXIgd2l0aCB0aGUKLSAgICB2YWx1ZSBvZiAncGF0aCcgZ2l2ZW4gdG8gdGhlIGZpbmRlcnMuIE5vbmUgaXMgcmV0dXJuZWQgaWYgbm8gbG9hZGVyIGNvdWxkCisgICAgc3lzLm1vZHVsZXMsIHRoZW4gc3lzLm1ldGFfcGF0aCBpcyBzZWFyY2hlZCBmb3IgYSBzdWl0YWJsZSBzcGVjIHdpdGggdGhlCisgICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIHNwZWMgY291bGQKICAgICBiZSBmb3VuZC4KIAogICAgIERvdHRlZCBuYW1lcyBkbyBub3QgaGF2ZSB0aGVpciBwYXJlbnQgcGFja2FnZXMgaW1wbGljaXRseSBpbXBvcnRlZC4gWW91IHdpbGwKICAgICBtb3N0IGxpa2VseSBuZWVkIHRvIGV4cGxpY2l0bHkgaW1wb3J0IGFsbCBwYXJlbnQgcGFja2FnZXMgaW4gdGhlIHByb3BlcgotICAgIG9yZGVyIGZvciBhIHN1Ym1vZHVsZSB0byBnZXQgdGhlIGNvcnJlY3QgbG9hZGVyLgorICAgIG9yZGVyIGZvciBhIHN1Ym1vZHVsZSB0byBnZXQgdGhlIGNvcnJlY3Qgc3BlYy4KKworICAgICIiIgorICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZmluZF9zcGVjKG5hbWUsIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fc3BlY19fIGlzIG5vdCBzZXQnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBOb25lJy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gc3BlYworCisKKyMgWFhYIERlcHJlY2F0ZS4uLgorZGVmIGZpbmRfbG9hZGVyKG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorCisgICAgVGhpcyBpcyBhIGJhY2t3YXJkLWNvbXBhdGlibGUgd3JhcHBlciBhcm91bmQgZmluZF9zcGVjKCkuCiAKICAgICAiIiIKICAgICB0cnk6CkBAIC02OCw3ICs5MiwyMCBAQAogICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgogICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgcGFzcwotICAgIHJldHVybiBfYm9vdHN0cmFwLl9maW5kX21vZHVsZShuYW1lLCBwYXRoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19sb2FkZXJfXyBpcyBub3Qgc2V0Jy5mb3JtYXQobmFtZSkpCisKKyAgICBzcGVjID0gX2Jvb3RzdHJhcC5fZmluZF9zcGVjKG5hbWUsIHBhdGgpCisgICAgIyBXZSB3b24ndCB3b3JyeSBhYm91dCBtYWxmb3JtZWQgc3BlY3MgKG1pc3NpbmcgYXR0cmlidXRlcykuCisgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzcGVjIGZvciB7fSBtaXNzaW5nIGxvYWRlcicuZm9ybWF0KG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbmFtZXNwYWNlIHBhY2thZ2VzIGRvIG5vdCBoYXZlIGxvYWRlcnMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUpCisgICAgcmV0dXJuIHNwZWMubG9hZGVyCiAKIAogZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgcGFja2FnZT1Ob25lKToKQEAgLTgyLDkgKzExOSw1MCBAQAogICAgIGxldmVsID0gMAogICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnLicpOgogICAgICAgICBpZiBub3QgcGFja2FnZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsYXRpdmUgaW1wb3J0cyByZXF1aXJlIHRoZSAncGFja2FnZScgYXJndW1lbnQiKQorICAgICAgICAgICAgbXNnID0gKCJ0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHRvIHBlcmZvcm0gYSByZWxhdGl2ZSAiCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBmb3IgeyFyfSIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnLmZvcm1hdChuYW1lKSkKICAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBuYW1lOgogICAgICAgICAgICAgaWYgY2hhcmFjdGVyICE9ICcuJzoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgbGV2ZWwgKz0gMQogICAgIHJldHVybiBfYm9vdHN0cmFwLl9nY2RfaW1wb3J0KG5hbWVbbGV2ZWw6XSwgcGFja2FnZSwgbGV2ZWwpCisKKworX1JFTE9BRElORyA9IHt9CisKKworZGVmIHJlbG9hZChtb2R1bGUpOgorICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisKKyAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCisKKyAgICAiIiIKKyAgICBpZiBub3QgbW9kdWxlIG9yIG5vdCBpc2luc3RhbmNlKG1vZHVsZSwgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQorICAgIHRyeToKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX3NwZWNfXy5uYW1lCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisKKyAgICBpZiBzeXMubW9kdWxlcy5nZXQobmFtZSkgaXMgbm90IG1vZHVsZToKKyAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKKyAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6CisgICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCisgICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQorICAgIHRyeToKKyAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICBpZiBwYXJlbnRfbmFtZSBhbmQgcGFyZW50X25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fID0gX2Jvb3RzdHJhcC5fZmluZF9zcGVjKG5hbWUsIE5vbmUsIG1vZHVsZSkKKyAgICAgICAgbWV0aG9kcyA9IF9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgIG1ldGhvZHMuZXhlYyhtb2R1bGUpCisgICAgICAgICMgVGhlIG1vZHVsZSBtYXkgaGF2ZSByZXBsYWNlZCBpdHNlbGYgaW4gc3lzLm1vZHVsZXMhCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorICAgIGZpbmFsbHk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weSBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQppbmRleCBlNDBlYzkyLi4yMzVlMjQyIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKKysrIGIvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CkBAIC05LDcgKzksNyBAQAogIwogIyBJTVBPUlRBTlQ6IFdoZW5ldmVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoaXMgbW9kdWxlLCBiZSBzdXJlIHRvIHJ1bgogIyBhIHRvcC1sZXZlbCBtYWtlIGluIG9yZGVyIHRvIGdldCB0aGUgZnJvemVuIHZlcnNpb24gb2YgdGhlIG1vZHVsZQotIyB1cGRhdGUuIE5vdCBkb2luZyBzbywgd2lsbCByZXN1bHQgaW4gdGhlIE1ha2VmaWxlIHRvIGZhaWwgZm9yCisjIHVwZGF0ZS4gTm90IGRvaW5nIHNvIHdpbGwgcmVzdWx0IGluIHRoZSBNYWtlZmlsZSB0byBmYWlsIGZvcgogIyBhbGwgb3RoZXJzIHdobyBkb24ndCBoYXZlIGEgLi9weXRob24gYXJvdW5kIHRvIGZyZWV6ZSB0aGUgbW9kdWxlCiAjIGluIHRoZSBlYXJseSBzdGFnZXMgb2YgY29tcGlsYXRpb24uCiAjCkBAIC0yMCwxMCArMjAsNiBAQAogIyByZWZlcmVuY2UgYW55IGluamVjdGVkIG9iamVjdHMhIFRoaXMgaW5jbHVkZXMgbm90IG9ubHkgZ2xvYmFsIGNvZGUgYnV0IGFsc28KICMgYW55dGhpbmcgc3BlY2lmaWVkIGF0IHRoZSBjbGFzcyBsZXZlbC4KIAotIyBYWFggTWFrZSBzdXJlIGFsbCBwdWJsaWMgbmFtZXMgaGF2ZSBubyBzaW5nbGUgbGVhZGluZyB1bmRlcnNjb3JlIGFuZCBhbGwKLSMgICAgIG90aGVycyBkby4KLQotCiAjIEJvb3RzdHJhcC1yZWxhdGVkIGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIF9DQVNFX0lOU0VOU0lUSVZFX1BMQVRGT1JNUyA9ICd3aW4nLCAnY3lnd2luJywgJ2RhcndpbicKQEAgLTQxLDc2ICszNyw1OCBAQAogICAgIHJldHVybiBfcmVsYXhfY2FzZQogCiAKLSMgVE9ETzogRXhwb3NlIGZyb20gbWFyc2hhbAogZGVmIF93X2xvbmcoeCk6Ci0gICAgIiIiQ29udmVydCBhIDMyLWJpdCBpbnRlZ2VyIHRvIGxpdHRsZS1lbmRpYW4uCi0KLSAgICBYWFggVGVtcG9yYXJ5IHVudGlsIG1hcnNoYWwncyBsb25nIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZC4KLQotICAgICIiIgotICAgIHggPSBpbnQoeCkKLSAgICBpbnRfYnl0ZXMgPSBbXQotICAgIGludF9ieXRlcy5hcHBlbmQoeCAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiA4KSAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiAxNikgJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gMjQpICYgMHhGRikKLSAgICByZXR1cm4gYnl0ZWFycmF5KGludF9ieXRlcykKKyAgICAiIiJDb252ZXJ0IGEgMzItYml0IGludGVnZXIgdG8gbGl0dGxlLWVuZGlhbi4iIiIKKyAgICByZXR1cm4gKGludCh4KSAmIDB4RkZGRkZGRkYpLnRvX2J5dGVzKDQsICdsaXR0bGUnKQogCiAKLSMgVE9ETzogRXhwb3NlIGZyb20gbWFyc2hhbAogZGVmIF9yX2xvbmcoaW50X2J5dGVzKToKLSAgICAiIiJDb252ZXJ0IDQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiB0byBhbiBpbnRlZ2VyLgotCi0gICAgWFhYIFRlbXBvcmFyeSB1bnRpbCBtYXJzaGFsJ3MgbG9uZyBmdW5jdGlvbiBhcmUgZXhwb3NlZC4KLQotICAgICIiIgotICAgIHggPSBpbnRfYnl0ZXNbMF0KLSAgICB4IHw9IGludF9ieXRlc1sxXSA8PCA4Ci0gICAgeCB8PSBpbnRfYnl0ZXNbMl0gPDwgMTYKLSAgICB4IHw9IGludF9ieXRlc1szXSA8PCAyNAotICAgIHJldHVybiB4CisgICAgIiIiQ29udmVydCA0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gdG8gYW4gaW50ZWdlci4iIiIKKyAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoaW50X2J5dGVzLCAnbGl0dGxlJykKIAogCiBkZWYgX3BhdGhfam9pbigqcGF0aF9wYXJ0cyk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguam9pbigpLiIiIgotICAgIG5ld19wYXJ0cyA9IFtdCi0gICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0czoKLSAgICAgICAgaWYgbm90IHBhcnQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBuZXdfcGFydHMuYXBwZW5kKHBhcnQpCi0gICAgICAgIGlmIHBhcnRbLTFdIG5vdCBpbiBwYXRoX3NlcGFyYXRvcnM6Ci0gICAgICAgICAgICBuZXdfcGFydHMuYXBwZW5kKHBhdGhfc2VwKQotICAgIHJldHVybiAnJy5qb2luKG5ld19wYXJ0c1s6LTFdKSAgIyBEcm9wIHN1cGVyZmx1b3VzIHBhdGggc2VwYXJhdG9yLgorICAgIHJldHVybiBwYXRoX3NlcC5qb2luKFtwYXJ0LnJzdHJpcChwYXRoX3NlcGFyYXRvcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHBhdGhfcGFydHMgaWYgcGFydF0pCiAKIAogZGVmIF9wYXRoX3NwbGl0KHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLnNwbGl0KCkuIiIiCisgICAgaWYgbGVuKHBhdGhfc2VwYXJhdG9ycykgPT0gMToKKyAgICAgICAgZnJvbnQsIF8sIHRhaWwgPSBwYXRoLnJwYXJ0aXRpb24ocGF0aF9zZXApCisgICAgICAgIHJldHVybiBmcm9udCwgdGFpbAogICAgIGZvciB4IGluIHJldmVyc2VkKHBhdGgpOgogICAgICAgICBpZiB4IGluIHBhdGhfc2VwYXJhdG9yczoKLSAgICAgICAgICAgIHNlcCA9IHgKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgc2VwID0gcGF0aF9zZXAKLSAgICBmcm9udCwgXywgdGFpbCA9IHBhdGgucnBhcnRpdGlvbihzZXApCi0gICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgICAgICAgICBmcm9udCwgdGFpbCA9IHBhdGgucnNwbGl0KHgsIG1heHNwbGl0PTEpCisgICAgICAgICAgICByZXR1cm4gZnJvbnQsIHRhaWwKKyAgICByZXR1cm4gJycsIHBhdGgKKworCitkZWYgX3BhdGhfc3RhdChwYXRoKToKKyAgICAiIiJTdGF0IHRoZSBwYXRoLgorCisgICAgTWFkZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIG92ZXJyaWRlIGluIGV4cGVyaW1lbnRzCisgICAgKGUuZy4gY2FjaGUgc3RhdCByZXN1bHRzKS4KKworICAgICIiIgorICAgIHJldHVybiBfb3Muc3RhdChwYXRoKQogCiAKIGRlZiBfcGF0aF9pc19tb2RlX3R5cGUocGF0aCwgbW9kZSk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIHRoZSBwYXRoIGlzIHRoZSBzcGVjaWZpZWQgbW9kZSB0eXBlLiIiIgogICAgIHRyeToKLSAgICAgICAgc3RhdF9pbmZvID0gX29zLnN0YXQocGF0aCkKKyAgICAgICAgc3RhdF9pbmZvID0gX3BhdGhfc3RhdChwYXRoKQogICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gKHN0YXRfaW5mby5zdF9tb2RlICYgMG8xNzAwMDApID09IG1vZGUKIAogCi0jIFhYWCBDb3VsZCBhbHNvIGV4cG9zZSBNb2R1bGVzL2dldHBhdGguYzppc2ZpbGUoKQogZGVmIF9wYXRoX2lzZmlsZShwYXRoKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5pc2ZpbGUuIiIiCiAgICAgcmV0dXJuIF9wYXRoX2lzX21vZGVfdHlwZShwYXRoLCAwbzEwMDAwMCkKIAogCi0jIFhYWCBDb3VsZCBhbHNvIGV4cG9zZSBNb2R1bGVzL2dldHBhdGguYzppc2RpcigpCiBkZWYgX3BhdGhfaXNkaXIocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNkaXIuIiIiCiAgICAgaWYgbm90IHBhdGg6CkBAIC0xNDgsMTggKzEyNiwxMyBAQAogICAgIG5ldy5fX2RpY3RfXy51cGRhdGUob2xkLl9fZGljdF9fKQogCiAKK2RlZiBfbmV3X21vZHVsZShuYW1lKToKKyAgICByZXR1cm4gdHlwZShzeXMpKG5hbWUpCisKKwogX2NvZGVfdHlwZSA9IHR5cGUoX3dyYXAuX19jb2RlX18pCiAKIAotZGVmIG5ld19tb2R1bGUobmFtZSk6Ci0gICAgIiIiQ3JlYXRlIGEgbmV3IG1vZHVsZS4KLQotICAgIFRoZSBtb2R1bGUgaXMgbm90IGVudGVyZWQgaW50byBzeXMubW9kdWxlcy4KLQotICAgICIiIgotICAgIHJldHVybiB0eXBlKF9pbykobmFtZSkKLQotCiAjIE1vZHVsZS1sZXZlbCBsb2NraW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgQSBkaWN0IG1hcHBpbmcgbW9kdWxlIG5hbWVzIHRvIHdlYWtyZWZzIG9mIF9Nb2R1bGVMb2NrIGluc3RhbmNlcwpAQCAtMjE0LDcgKzE4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaGFzX2RlYWRsb2NrKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBfRGVhZGxvY2tFcnJvcigiZGVhZGxvY2sgZGV0ZWN0ZWQgYnkgJXIiICUgc2VsZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9EZWFkbG9ja0Vycm9yKCdkZWFkbG9jayBkZXRlY3RlZCBieSAlcicgJSBzZWxmKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndha2V1cC5hY3F1aXJlKEZhbHNlKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2FpdGVycyArPSAxCiAgICAgICAgICAgICAgICAgIyBXYWl0IGZvciBhIHJlbGVhc2UoKSBjYWxsCkBAIC0yMjcsNyArMjAwLDcgQEAKICAgICAgICAgdGlkID0gX3RocmVhZC5nZXRfaWRlbnQoKQogICAgICAgICB3aXRoIHNlbGYubG9jazoKICAgICAgICAgICAgIGlmIHNlbGYub3duZXIgIT0gdGlkOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jayIpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrJykKICAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvdW50ID4gMAogICAgICAgICAgICAgc2VsZi5jb3VudCAtPSAxCiAgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID09IDA6CkBAIC0yMzcsNyArMjEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi53YWtldXAucmVsZWFzZSgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX01vZHVsZUxvY2soJXIpIGF0ICVkIiAlIChzZWxmLm5hbWUsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gJ19Nb2R1bGVMb2NrKHshcn0pIGF0IHt9Jy5mb3JtYXQoc2VsZi5uYW1lLCBpZChzZWxmKSkKIAogCiBjbGFzcyBfRHVtbXlNb2R1bGVMb2NrOgpAQCAtMjU0LDExICsyMjcsMjggQEAKIAogICAgIGRlZiByZWxlYXNlKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNvdW50ID09IDA6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2siKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrJykKICAgICAgICAgc2VsZi5jb3VudCAtPSAxCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX0R1bW15TW9kdWxlTG9jayglcikgYXQgJWQiICUgKHNlbGYubmFtZSwgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAnX0R1bW15TW9kdWxlTG9jayh7IXJ9KSBhdCB7fScuZm9ybWF0KHNlbGYubmFtZSwgaWQoc2VsZikpCisKKworY2xhc3MgX01vZHVsZUxvY2tNYW5hZ2VyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9sb2NrID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fbG9jayA9IF9nZXRfbW9kdWxlX2xvY2soc2VsZi5fbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9pbXAucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fbG9jay5hY3F1aXJlKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQogCiAKICMgVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBmb3IgY29uc3VtcHRpb24gYnkgUHl0aG9uL2ltcG9ydC5jLgpAQCAtMzE1LDk1ICszMDUsMTA4IEBACiAKICMgRmluZGVyL2xvYWRlciB1dGlsaXR5IGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotIiIiTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgotSXQgc2hvdWxkIGNoYW5nZSBmb3IgZWFjaCBpbmNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBieXRlY29kZS4KKyMgTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgorIyBJdCBzaG91bGQgY2hhbmdlIGZvciBlYWNoIGluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIGJ5dGVjb2RlLgorIworIyBUaGUgdmFsdWUgb2YgQ1IgYW5kIExGIGlzIGluY29ycG9yYXRlZCBzbyBpZiB5b3UgZXZlciByZWFkIG9yIHdyaXRlCisjIGEgLnB5YyBmaWxlIGluIHRleHQgbW9kZSB0aGUgbWFnaWMgbnVtYmVyIHdpbGwgYmUgd3Jvbmc7IGFsc28sIHRoZQorIyBBcHBsZSBNUFcgY29tcGlsZXIgc3dhcHMgdGhlaXIgdmFsdWVzLCBib3RjaGluZyBzdHJpbmcgY29uc3RhbnRzLgorIworIyBUaGUgbWFnaWMgbnVtYmVycyBtdXN0IGJlIHNwYWNlZCBhcGFydCBhdCBsZWFzdCAyIHZhbHVlcywgYXMgdGhlCisjIC1VIGludGVycGV0ZXIgZmxhZyB3aWxsIGNhdXNlIE1BR0lDKzEgYmVpbmcgdXNlZC4gVGhleSBoYXZlIGJlZW4KKyMgb2RkIG51bWJlcnMgZm9yIHNvbWUgdGltZSBub3cuCisjCisjIFRoZXJlIHdlcmUgYSB2YXJpZXR5IG9mIG9sZCBzY2hlbWVzIGZvciBzZXR0aW5nIHRoZSBtYWdpYyBudW1iZXIuCisjIFRoZSBjdXJyZW50IHdvcmtpbmcgc2NoZW1lIGlzIHRvIGluY3JlbWVudCB0aGUgcHJldmlvdXMgdmFsdWUgYnkKKyMgMTAuCisjCisjIFN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKKyMgbnVtYmVyIGFsc28gaW5jbHVkZXMgYSBuZXcgIm1hZ2ljIHRhZyIsIGkuZS4gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdXNlZAorIyB0byByZXByZXNlbnQgdGhlIG1hZ2ljIG51bWJlciBpbiBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4gIFdoZW4geW91IGNoYW5nZQorIyB0aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKKyMgY2FuIGJlIG5hbWVkIGFmdGVyIHRoZSBQeXRob24gbWFqb3IgdmVyc2lvbiBvZiB0aGUgbWFnaWMgbnVtYmVyIGJ1bXAsIGJ1dAorIyBpdCBjYW4gcmVhbGx5IGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3MgZGlmZmVyZW50IHRoYW4gYW55dGhpbmcgZWxzZQorIyB0aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKKyMgd2l0aCBQeXRob24gMy4yYTAuCisjCisjIEtub3duIHZhbHVlczoKKyMgIFB5dGhvbiAxLjU6ICAgMjAxMjEKKyMgIFB5dGhvbiAxLjUuMTogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjUuMjogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjY6ICAgNTA0MjgKKyMgICAgIFB5dGhvbiAyLjA6ICAgNTA4MjMKKyMgICAgIFB5dGhvbiAyLjAuMTogNTA4MjMKKyMgICAgIFB5dGhvbiAyLjE6ICAgNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMTogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMjogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjI6ICAgNjA3MTcKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMjEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEgKCEpCisjICAgICBQeXRob24gMi40YTA6IDYyMDQxCisjICAgICBQeXRob24gMi40YTM6IDYyMDUxCisjICAgICBQeXRob24gMi40YjE6IDYyMDYxCisjICAgICBQeXRob24gMi41YTA6IDYyMDcxCisjICAgICBQeXRob24gMi41YTA6IDYyMDgxIChhc3QtYnJhbmNoKQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA5MSAod2l0aCkKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwOTIgKGNoYW5nZWQgV0lUSF9DTEVBTlVQIG9wY29kZSkKKyMgICAgIFB5dGhvbiAyLjViMzogNjIxMDEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uKQorIyAgICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCisjICAgICBQeXRob24gMi41YzE6IDYyMTIxIChmaXggd3JvbmcgbG5vdGFiIHdpdGggZm9yIGxvb3BzIGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBjb25zdGFudHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQpCisjICAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCisjICAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQorIyAgICAgUHl0aG9uIDIuNmExOiA2MjE2MSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikKKyMgICAgIFB5dGhvbiAyLjdhMDogNjIxNzEgKG9wdGltaXplIGxpc3QgY29tcHJlaGVuc2lvbnMvY2hhbmdlIExJU1RfQVBQRU5EKQorIyAgICAgUHl0aG9uIDIuN2EwOiA2MjE4MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisjICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCisjICAgICBQeXRob24gMi43YTAgIDYyMTkxIChpbnRyb2R1Y2UgU0VUVVBfV0lUSCkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIyMDEgKGludHJvZHVjZSBCVUlMRF9TRVQpCisjICAgICBQeXRob24gMi43YTAgIDYyMjExIChpbnRyb2R1Y2UgTUFQX0FERCBhbmQgU0VUX0FERCkKKyMgICAgIFB5dGhvbiAzMDAwOiAgIDMwMDAKKyMgICAgICAgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMjAgKGFkZGVkIEJVSUxEX1NFVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMzAgKGFkZGVkIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzKQorIyAgICAgICAgICAgICAgICAgICAgMzA0MCAoYWRkZWQgc2lnbmF0dXJlIGFubm90YXRpb25zKQorIyAgICAgICAgICAgICAgICAgICAgMzA1MCAocHJpbnQgYmVjb21lcyBhIGZ1bmN0aW9uKQorIyAgICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKKyMgICAgICAgICAgICAgICAgICAgIDMwNjEgKHN0cmluZyBsaXRlcmFscyBiZWNvbWUgdW5pY29kZSkKKyMgICAgICAgICAgICAgICAgICAgIDMwNzEgKFBFUCAzMTA5IHJhaXNlIGNoYW5nZXMpCisjICAgICAgICAgICAgICAgICAgICAzMDgxIChQRVAgMzEzNyBtYWtlIF9fZmlsZV9fIGFuZCBfX25hbWVfXyB1bmljb2RlKQorIyAgICAgICAgICAgICAgICAgICAgMzA5MSAoa2lsbCBzdHI4IGludGVybmluZykKKyMgICAgICAgICAgICAgICAgICAgIDMxMDEgKG1lcmdlIGZyb20gMi42YTAsIHNlZSA2MjE1MSkKKyMgICAgICAgICAgICAgICAgICAgIDMxMDMgKF9fZmlsZV9fIHBvaW50cyB0byBzb3VyY2UgZmlsZSkKKyMgICAgIFB5dGhvbiAzLjBhNDogMzExMSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCisjICAgICBQeXRob24gMy4wYTU6IDMxMzEgKGxleGljYWwgZXhjZXB0aW9uIHN0YWNraW5nLCBpbmNsdWRpbmcgUE9QX0VYQ0VQVCkKKyMgICAgIFB5dGhvbiAzLjFhMDogMzE0MSAob3B0aW1pemUgbGlzdCwgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zOgorIyAgICAgICAgICAgICBjaGFuZ2UgTElTVF9BUFBFTkQgYW5kIFNFVF9BREQsIGFkZCBNQVBfQUREKQorIyAgICAgUHl0aG9uIDMuMWEwOiAzMTUxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKKyMgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorIyAgICAgUHl0aG9uIDMuMmEwOiAzMTYwIChhZGQgU0VUVVBfV0lUSCkKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTIgIDMxODAgKGFkZCBERUxFVEVfREVSRUYpCisjICAgICBQeXRob24gMy4zYTAgIDMxOTAgX19jbGFzc19fIHN1cGVyIGNsb3N1cmUgY2hhbmdlZAorIyAgICAgUHl0aG9uIDMuM2EwICAzMjAwIChfX3F1YWxuYW1lX18gYWRkZWQpCisjICAgICAgICAgICAgICAgICAgICAgIDMyMTAgKGFkZGVkIHNpemUgbW9kdWxvIDIqKjMyIHRvIHRoZSBweWMgaGVhZGVyKQorIyAgICAgUHl0aG9uIDMuM2ExICAzMjIwIChjaGFuZ2VkIFBFUCAzODAgaW1wbGVtZW50YXRpb24pCisjICAgICBQeXRob24gMy4zYTQgIDMyMzAgKHJldmVydCBjaGFuZ2VzIHRvIGltcGxpY2l0IF9fY2xhc3NfXyBjbG9zdXJlKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjUwIChldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHQgYXJndW1lbnRzIGJlZm9yZQorIyAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQtb25seSBkZWZhdWx0cykKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI2MCAoYWRkIExPQURfQ0xBU1NERVJFRjsgYWxsb3cgbG9jYWxzIG9mIGNsYXNzIHRvIG92ZXJyaWRlCisjICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSB2YXJzKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjcwICh2YXJpb3VzIHR3ZWFrcyB0byB0aGUgX19jbGFzc19fIGNsb3N1cmUpCisjICAgICBQeXRob24gMy40YTEgIDMyODAgKHJlbW92ZSBpbXBsaWNpdCBjbGFzcyBhcmd1bWVudCkKKyMgICAgIFB5dGhvbiAzLjRhNCAgMzI5MCAoY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjICAgICBQeXRob24gMy40YTQgIDMzMDAgKG1vcmUgY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjCisjIE1BR0lDIG11c3QgY2hhbmdlIHdoZW5ldmVyIHRoZSBieXRlY29kZSBlbWl0dGVkIGJ5IHRoZSBjb21waWxlciBtYXkgbm8KKyMgbG9uZ2VyIGJlIHVuZGVyc3Rvb2QgYnkgb2xkZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBldmFsIGxvb3AgKHVzdWFsbHkKKyMgZHVlIHRvIHRoZSBhZGRpdGlvbiBvZiBuZXcgb3Bjb2RlcykuCiAKLVRoZSB2YWx1ZSBvZiBDUiBhbmQgTEYgaXMgaW5jb3Jwb3JhdGVkIHNvIGlmIHlvdSBldmVyIHJlYWQgb3Igd3JpdGUKLWEgLnB5YyBmaWxlIGluIHRleHQgbW9kZSB0aGUgbWFnaWMgbnVtYmVyIHdpbGwgYmUgd3Jvbmc7IGFsc28sIHRoZQotQXBwbGUgTVBXIGNvbXBpbGVyIHN3YXBzIHRoZWlyIHZhbHVlcywgYm90Y2hpbmcgc3RyaW5nIGNvbnN0YW50cy4KLQotVGhlIG1hZ2ljIG51bWJlcnMgbXVzdCBiZSBzcGFjZWQgYXBhcnQgYXQgbGVhc3QgMiB2YWx1ZXMsIGFzIHRoZQotLVUgaW50ZXJwZXRlciBmbGFnIHdpbGwgY2F1c2UgTUFHSUMrMSBiZWluZyB1c2VkLiBUaGV5IGhhdmUgYmVlbgotb2RkIG51bWJlcnMgZm9yIHNvbWUgdGltZSBub3cuCi0KLVRoZXJlIHdlcmUgYSB2YXJpZXR5IG9mIG9sZCBzY2hlbWVzIGZvciBzZXR0aW5nIHRoZSBtYWdpYyBudW1iZXIuCi1UaGUgY3VycmVudCB3b3JraW5nIHNjaGVtZSBpcyB0byBpbmNyZW1lbnQgdGhlIHByZXZpb3VzIHZhbHVlIGJ5Ci0xMC4KLQotU3RhcnRpbmcgd2l0aCB0aGUgYWRvcHRpb24gb2YgUEVQIDMxNDcgaW4gUHl0aG9uIDMuMiwgZXZlcnkgYnVtcCBpbiBtYWdpYwotbnVtYmVyIGFsc28gaW5jbHVkZXMgYSBuZXcgIm1hZ2ljIHRhZyIsIGkuZS4gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdXNlZAotdG8gcmVwcmVzZW50IHRoZSBtYWdpYyBudW1iZXIgaW4gX19weWNhY2hlX18gZGlyZWN0b3JpZXMuICBXaGVuIHlvdSBjaGFuZ2UKLXRoZSBtYWdpYyBudW1iZXIsIHlvdSBtdXN0IGFsc28gc2V0IGEgbmV3IHVuaXF1ZSBtYWdpYyB0YWcuICBHZW5lcmFsbHkgdGhpcwotY2FuIGJlIG5hbWVkIGFmdGVyIHRoZSBQeXRob24gbWFqb3IgdmVyc2lvbiBvZiB0aGUgbWFnaWMgbnVtYmVyIGJ1bXAsIGJ1dAotaXQgY2FuIHJlYWxseSBiZSBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIGRpZmZlcmVudCB0aGFuIGFueXRoaW5nIGVsc2UKLXRoYXQncyBjb21lIGJlZm9yZS4gIFRoZSB0YWdzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLCBzdGFydGluZwotd2l0aCBQeXRob24gMy4yYTAuCi0KLUtub3duIHZhbHVlczoKLSBQeXRob24gMS41OiAgIDIwMTIxCi0gUHl0aG9uIDEuNS4xOiAyMDEyMQotICAgIFB5dGhvbiAxLjUuMjogMjAxMjEKLSAgICBQeXRob24gMS42OiAgIDUwNDI4Ci0gICAgUHl0aG9uIDIuMDogICA1MDgyMwotICAgIFB5dGhvbiAyLjAuMTogNTA4MjMKLSAgICBQeXRob24gMi4xOiAgIDYwMjAyCi0gICAgUHl0aG9uIDIuMS4xOiA2MDIwMgotICAgIFB5dGhvbiAyLjEuMjogNjAyMDIKLSAgICBQeXRob24gMi4yOiAgIDYwNzE3Ci0gICAgUHl0aG9uIDIuM2EwOiA2MjAxMQotICAgIFB5dGhvbiAyLjNhMDogNjIwMjEKLSAgICBQeXRob24gMi4zYTA6IDYyMDExICghKQotICAgIFB5dGhvbiAyLjRhMDogNjIwNDEKLSAgICBQeXRob24gMi40YTM6IDYyMDUxCi0gICAgUHl0aG9uIDIuNGIxOiA2MjA2MQotICAgIFB5dGhvbiAyLjVhMDogNjIwNzEKLSAgICBQeXRob24gMi41YTA6IDYyMDgxIChhc3QtYnJhbmNoKQotICAgIFB5dGhvbiAyLjVhMDogNjIwOTEgKHdpdGgpCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA5MiAoY2hhbmdlZCBXSVRIX0NMRUFOVVAgb3Bjb2RlKQotICAgIFB5dGhvbiAyLjViMzogNjIxMDEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uKQotICAgIFB5dGhvbiAyLjViMzogNjIxMTEgKGZpeCB3cm9uZyBjb2RlOiB4ICs9IHlpZWxkKQotICAgIFB5dGhvbiAyLjVjMTogNjIxMjEgKGZpeCB3cm9uZyBsbm90YWIgd2l0aCBmb3IgbG9vcHMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBjb25zdGFudHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQpCi0gICAgUHl0aG9uIDIuNWMyOiA2MjEzMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4gaW4gbGlzdGNvbXAvZ2VuZXhwKQotICAgIFB5dGhvbiAyLjZhMDogNjIxNTEgKHBlZXBob2xlIG9wdGltaXphdGlvbnMgYW5kIFNUT1JFX01BUCBvcGNvZGUpCi0gICAgUHl0aG9uIDIuNmExOiA2MjE2MSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikKLSAgICBQeXRob24gMzAwMDogICAzMDAwCi0gICAgICAgICAgICAgICAgICAgMzAxMCAocmVtb3ZlZCBVTkFSWV9DT05WRVJUKQotICAgICAgICAgICAgICAgICAgIDMwMjAgKGFkZGVkIEJVSUxEX1NFVCkKLSAgICAgICAgICAgICAgICAgICAzMDMwIChhZGRlZCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycykKLSAgICAgICAgICAgICAgICAgICAzMDQwIChhZGRlZCBzaWduYXR1cmUgYW5ub3RhdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgMzA1MCAocHJpbnQgYmVjb21lcyBhIGZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAgIDMwNjAgKFBFUCAzMTE1IG1ldGFjbGFzcyBzeW50YXgpCi0gICAgICAgICAgICAgICAgICAgMzA2MSAoc3RyaW5nIGxpdGVyYWxzIGJlY29tZSB1bmljb2RlKQotICAgICAgICAgICAgICAgICAgIDMwNzEgKFBFUCAzMTA5IHJhaXNlIGNoYW5nZXMpCi0gICAgICAgICAgICAgICAgICAgMzA4MSAoUEVQIDMxMzcgbWFrZSBfX2ZpbGVfXyBhbmQgX19uYW1lX18gdW5pY29kZSkKLSAgICAgICAgICAgICAgICAgICAzMDkxIChraWxsIHN0cjggaW50ZXJuaW5nKQotICAgICAgICAgICAgICAgICAgIDMxMDEgKG1lcmdlIGZyb20gMi42YTAsIHNlZSA2MjE1MSkKLSAgICAgICAgICAgICAgICAgICAzMTAzIChfX2ZpbGVfXyBwb2ludHMgdG8gc291cmNlIGZpbGUpCi0gICAgUHl0aG9uIDMuMGE0OiAzMTExIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKS4KLSAgICBQeXRob24gMy4wYTU6IDMxMzEgKGxleGljYWwgZXhjZXB0aW9uIHN0YWNraW5nLCBpbmNsdWRpbmcgUE9QX0VYQ0VQVCkKLSAgICBQeXRob24gMy4xYTA6IDMxNDEgKG9wdGltaXplIGxpc3QsIHNldCBhbmQgZGljdCBjb21wcmVoZW5zaW9uczoKLSAgICAgICAgICAgIGNoYW5nZSBMSVNUX0FQUEVORCBhbmQgU0VUX0FERCwgYWRkIE1BUF9BREQpCi0gICAgUHl0aG9uIDMuMWEwOiAzMTUxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKLSAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKLSAgICBQeXRob24gMy4yYTA6IDMxNjAgKGFkZCBTRVRVUF9XSVRIKQotICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCi0gICAgUHl0aG9uIDMuMmExOiAzMTcwIChhZGQgRFVQX1RPUF9UV08sIHJlbW92ZSBEVVBfVE9QWCBhbmQgUk9UX0ZPVVIpCi0gICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKLSAgICBQeXRob24gMy4yYTIgIDMxODAgKGFkZCBERUxFVEVfREVSRUYpCi0gICAgUHl0aG9uIDMuM2EwICAzMTkwIF9fY2xhc3NfXyBzdXBlciBjbG9zdXJlIGNoYW5nZWQKLSAgICBQeXRob24gMy4zYTAgIDMyMDAgKF9fcXVhbG5hbWVfXyBhZGRlZCkKLSAgICAgICAgICAgICAgICAgICAgIDMyMTAgKGFkZGVkIHNpemUgbW9kdWxvIDIqKjMyIHRvIHRoZSBweWMgaGVhZGVyKQotICAgIFB5dGhvbiAzLjNhMSAgMzIyMCAoY2hhbmdlZCBQRVAgMzgwIGltcGxlbWVudGF0aW9uKQotICAgIFB5dGhvbiAzLjNhNCAgMzIzMCAocmV2ZXJ0IGNoYW5nZXMgdG8gaW1wbGljaXQgX19jbGFzc19fIGNsb3N1cmUpCi0KLU1BR0lDIG11c3QgY2hhbmdlIHdoZW5ldmVyIHRoZSBieXRlY29kZSBlbWl0dGVkIGJ5IHRoZSBjb21waWxlciBtYXkgbm8KLWxvbmdlciBiZSB1bmRlcnN0b29kIGJ5IG9sZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXZhbCBsb29wICh1c3VhbGx5Ci1kdWUgdG8gdGhlIGFkZGl0aW9uIG9mIG5ldyBvcGNvZGVzKS4KLQotIiIiCi1fUkFXX01BR0lDX05VTUJFUiA9IDMyMzAgfCBvcmQoJ1xyJykgPDwgMTYgfCBvcmQoJ1xuJykgPDwgMjQKLV9NQUdJQ19CWVRFUyA9IGJ5dGVzKF9SQVdfTUFHSUNfTlVNQkVSID4+IG4gJiAweGZmIGZvciBuIGluIHJhbmdlKDAsIDI1LCA4KSkKK01BR0lDX05VTUJFUiA9ICgzMzAwKS50b19ieXRlcygyLCAnbGl0dGxlJykgKyBiJ1xyXG4nCitfUkFXX01BR0lDX05VTUJFUiA9IGludC5mcm9tX2J5dGVzKE1BR0lDX05VTUJFUiwgJ2xpdHRsZScpICAjIEZvciBpbXBvcnQuYwogCiBfUFlDQUNIRSA9ICdfX3B5Y2FjaGVfXycKIApAQCAtNDgxLDYgKzQ4NCwxOCBAQAogICAgIHJldHVybiBzb3VyY2VfcGF0aCBpZiBfcGF0aF9pc2ZpbGUoc291cmNlX3BhdGgpIGVsc2UgYnl0ZWNvZGVfcGF0aAogCiAKK2RlZiBfY2FsY19tb2RlKHBhdGgpOgorICAgICIiIkNhbGN1bGF0ZSB0aGUgbW9kZSBwZXJtaXNzaW9ucyBmb3IgYSBieXRlY29kZSBmaWxlLiIiIgorICAgIHRyeToKKyAgICAgICAgbW9kZSA9IF9wYXRoX3N0YXQocGF0aCkuc3RfbW9kZQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBtb2RlID0gMG82NjYKKyAgICAjIFdlIGFsd2F5cyBlbnN1cmUgd3JpdGUgYWNjZXNzIHNvIHdlIGNhbiB1cGRhdGUgY2FjaGVkIGZpbGVzCisgICAgIyBsYXRlciBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MgKCM2MDc0KQorICAgIG1vZGUgfD0gMG8yMDAKKyAgICByZXR1cm4gbW9kZQorCisKIGRlZiBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UsICphcmdzLCB2ZXJib3NpdHk9MSk6CiAgICAgIiIiUHJpbnQgdGhlIG1lc3NhZ2UgdG8gc3RkZXJyIGlmIC12L1BZVEhPTlZFUkJPU0UgaXMgdHVybmVkIG9uLiIiIgogICAgIGlmIHN5cy5mbGFncy52ZXJib3NlID49IHZlcmJvc2l0eToKQEAgLTQ4OSw4NSArNTA0LDYgQEAKICAgICAgICAgcHJpbnQobWVzc2FnZS5mb3JtYXQoKmFyZ3MpLCBmaWxlPXN5cy5zdGRlcnIpCiAKIAotZGVmIHNldF9wYWNrYWdlKGZ4bik6Ci0gICAgIiIiU2V0IF9fcGFja2FnZV9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIiIiCi0gICAgZGVmIHNldF9wYWNrYWdlX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gZnhuKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgX3dyYXAoc2V0X3BhY2thZ2Vfd3JhcHBlciwgZnhuKQotICAgIHJldHVybiBzZXRfcGFja2FnZV93cmFwcGVyCi0KLQotZGVmIHNldF9sb2FkZXIoZnhuKToKLSAgICAiIiJTZXQgX19sb2FkZXJfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgotICAgIGRlZiBzZXRfbG9hZGVyX3dyYXBwZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gZnhuKHNlbGYsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIHJldHVybiBtb2R1bGUKLSAgICBfd3JhcChzZXRfbG9hZGVyX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gc2V0X2xvYWRlcl93cmFwcGVyCi0KLQotZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGZ4bik6Ci0gICAgIiIiRGVjb3JhdG9yIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlciBtb2R1bGUgZm9yIGxvYWRlcnMuCi0KLSAgICBUaGUgZGVjb3JhdGVkIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgbW9kdWxlIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUKLSAgICBuYW1lLiBUaGUgbW9kdWxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24gaXMgZWl0aGVyIGZyb20gc3lzLm1vZHVsZXMgaWYKLSAgICBpdCBhbHJlYWR5IGV4aXN0cyBvciBpcyBhIG5ldyBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaXMgbmV3LCB0aGVuIF9fbmFtZV9fCi0gICAgaXMgc2V0IHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbWV0aG9kLCBfX2xvYWRlcl9fIGlzIHNldCB0byBzZWxmLCBhbmQKLSAgICBfX3BhY2thZ2VfXyBpcyBzZXQgYWNjb3JkaW5nbHkgKGlmIHNlbGYuaXNfcGFja2FnZSgpIGlzIGRlZmluZWQpIHdpbGwgYmUgc2V0Ci0gICAgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIChpZiBzZWxmLmlzX3BhY2thZ2UoKSBkb2VzCi0gICAgbm90IHdvcmsgZm9yIHRoZSBtb2R1bGUgaXQgd2lsbCBiZSBzZXQgcG9zdC1sb2FkKS4KLQotICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSBkZWNvcmF0b3IgY3JlYXRlZCB0aGUgbW9kdWxlIGl0IGlzCi0gICAgc3Vic2VxdWVudGx5IHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4KLQotICAgIFRoZSBkZWNvcmF0b3IgYXNzdW1lcyB0aGF0IHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gdGFrZXMgdGhlIG1vZHVsZSBuYW1lIGFzCi0gICAgdGhlIHNlY29uZCBhcmd1bWVudC4KLQotICAgICIiIgotICAgIGRlZiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlcy5nZXQoZnVsbG5hbWUpCi0gICAgICAgIGlzX3JlbG9hZCA9IG1vZHVsZSBpcyBub3QgTm9uZQotICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgotICAgICAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgb3BlbigpIGlzIGNhbGxlZCBhcyB0aGUgJ2lvJyBtb2R1bGUKLSAgICAgICAgICAgICMgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UgdHJpZ2dlciBhbgotICAgICAgICAgICAgIyBpbmZpbml0ZSBsb29wLgotICAgICAgICAgICAgbW9kdWxlID0gbmV3X21vZHVsZShmdWxsbmFtZSkKLSAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcwotICAgICAgICAgICAgIyAob3RoZXJ3aXNlIGFuIG9wdGltaXphdGlvbiBzaG9ydGN1dCBpbiBpbXBvcnQuYyBiZWNvbWVzIHdyb25nKQotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCi0gICAgICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgSWYgX19wYWNrYWdlX18gd2FzIG5vdCBzZXQgYWJvdmUsIF9faW1wb3J0X18oKSB3aWxsIGRvIGl0IGxhdGVyLgotICAgICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBtb2R1bGUsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBGYWxzZQotICAgIF93cmFwKG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcgotCi0KIGRlZiBfY2hlY2tfbmFtZShtZXRob2QpOgogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhhdCB0aGUgbW9kdWxlIGJlaW5nIHJlcXVlc3RlZCBtYXRjaGVzIHRoZSBvbmUgdGhlCiAgICAgbG9hZGVyIGNhbiBoYW5kbGUuCkBAIC01ODAsNyArNTE2LDcgQEAKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQogICAgICAgICBlbGlmIHNlbGYubmFtZSAhPSBuYW1lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImxvYWRlciBjYW5ub3QgaGFuZGxlICVzIiAlIG5hbWUsIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdsb2FkZXIgY2Fubm90IGhhbmRsZSAlcycgJSBuYW1lLCBuYW1lPW5hbWUpCiAgICAgICAgIHJldHVybiBtZXRob2Qoc2VsZiwgbmFtZSwgKmFyZ3MsICoqa3dhcmdzKQogICAgIF93cmFwKF9jaGVja19uYW1lX3dyYXBwZXIsIG1ldGhvZCkKICAgICByZXR1cm4gX2NoZWNrX25hbWVfd3JhcHBlcgpAQCAtNTkwLDcgKzUyNiw3IEBACiAgICAgIiIiRGVjb3JhdG9yIHRvIHZlcmlmeSB0aGUgbmFtZWQgbW9kdWxlIGlzIGJ1aWx0LWluLiIiIgogICAgIGRlZiBfcmVxdWlyZXNfYnVpbHRpbl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJ7fSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUiLmZvcm1hdChmdWxsbmFtZSksCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUnLmZvcm1hdChmdWxsbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIGZ1bGxuYW1lKQogICAgIF93cmFwKF9yZXF1aXJlc19idWlsdGluX3dyYXBwZXIsIGZ4bikKQEAgLTYwMSw3ICs1MzcsNyBAQAogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhlIG5hbWVkIG1vZHVsZSBpcyBmcm96ZW4uIiIiCiAgICAgZGVmIF9yZXF1aXJlc19mcm96ZW5fd3JhcHBlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGlmIG5vdCBfaW1wLmlzX2Zyb3plbihmdWxsbmFtZSk6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigie30gaXMgbm90IGEgZnJvemVuIG1vZHVsZSIuZm9ybWF0KGZ1bGxuYW1lKSwKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUnLmZvcm1hdChmdWxsbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIGZ1bGxuYW1lKQogICAgIF93cmFwKF9yZXF1aXJlc19mcm96ZW5fd3JhcHBlciwgZnhuKQpAQCAtNjE2LDExICs1NTIsNjU5IEBACiAgICAgIyByZXR1cm4gTm9uZS4KICAgICBsb2FkZXIsIHBvcnRpb25zID0gc2VsZi5maW5kX2xvYWRlcihmdWxsbmFtZSkKICAgICBpZiBsb2FkZXIgaXMgTm9uZSBhbmQgbGVuKHBvcnRpb25zKToKLSAgICAgICAgbXNnID0gIk5vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fIgorICAgICAgICBtc2cgPSAnTm90IGltcG9ydGluZyBkaXJlY3Rvcnkge306IG1pc3NpbmcgX19pbml0X18nCiAgICAgICAgIF93YXJuaW5ncy53YXJuKG1zZy5mb3JtYXQocG9ydGlvbnNbMF0pLCBJbXBvcnRXYXJuaW5nKQogICAgIHJldHVybiBsb2FkZXIKIAogCitkZWYgX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpOgorICAgICIiIkxvYWQgdGhlIHNwZWNpZmllZCBtb2R1bGUgaW50byBzeXMubW9kdWxlcyBhbmQgcmV0dXJuIGl0LiIiIgorICAgICMgWFhYIERlcHJlY2F0aW9uIFdhcm5pbmcgaGVyZS4uLgorICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBzZWxmKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICBpZiBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgICAgIG1ldGhvZHMuZXhlYyhtb2R1bGUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tmdWxsbmFtZV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbWV0aG9kcy5sb2FkKCkKKworCitkZWYgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLCBzb3VyY2Vfc3RhdHM9Tm9uZSwgbmFtZT1Ob25lLCBwYXRoPU5vbmUpOgorICAgICIiIlZhbGlkYXRlIHRoZSBoZWFkZXIgb2YgdGhlIHBhc3NlZC1pbiBieXRlY29kZSBhZ2FpbnN0IHNvdXJjZV9zdGF0cyAoaWYKKyAgICBnaXZlbikgYW5kIHJldHVybmluZyB0aGUgYnl0ZWNvZGUgdGhhdCBjYW4gYmUgY29tcGlsZWQgYnkgY29tcGlsZSgpLgorCisgICAgQWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBlbmhhbmNlIGVycm9yIHJlcG9ydGluZy4KKworICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgaXMgaW5jb3JyZWN0IG9yIHRoZSBieXRlY29kZSBpcworICAgIGZvdW5kIHRvIGJlIHN0YWxlLiBFT0ZFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgZGF0YSBpcyBmb3VuZCB0byBiZQorICAgIHRydW5jYXRlZC4KKworICAgICIiIgorICAgIGV4Y19kZXRhaWxzID0ge30KKyAgICBpZiBuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1snbmFtZSddID0gbmFtZQorICAgIGVsc2U6CisgICAgICAgICMgVG8gcHJldmVudCBoYXZpbmcgdG8gbWFrZSBhbGwgbWVzc2FnZXMgaGF2ZSBhIGNvbmRpdGlvbmFsIG5hbWUuCisgICAgICAgIG5hbWUgPSAnPGJ5dGVjb2RlPicKKyAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1sncGF0aCddID0gcGF0aAorICAgIG1hZ2ljID0gZGF0YVs6NF0KKyAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCisgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCisgICAgaWYgbWFnaWMgIT0gTUFHSUNfTlVNQkVSOgorICAgICAgICBtZXNzYWdlID0gJ2JhZCBtYWdpYyBudW1iZXIgaW4geyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG1hZ2ljKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsICoqZXhjX2RldGFpbHMpCisgICAgZWxpZiBsZW4ocmF3X3RpbWVzdGFtcCkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHRpbWVzdGFtcCBpbiB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQorICAgIGVsaWYgbGVuKHJhd19zaXplKSAhPSA0OgorICAgICAgICBtZXNzYWdlID0gJ3JlYWNoZWQgRU9GIHdoaWxlIHJlYWRpbmcgc2l6ZSBvZiBzb3VyY2UgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBpZiBzb3VyY2Vfc3RhdHMgaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzb3VyY2Vfc3RhdHNbJ210aW1lJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3RpbWVzdGFtcCkgIT0gc291cmNlX210aW1lOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2Vfc2l6ZSA9IHNvdXJjZV9zdGF0c1snc2l6ZSddICYgMHhGRkZGRkZGRgorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmV4Y19kZXRhaWxzKQorICAgIHJldHVybiBkYXRhWzEyOl0KKworCitkZWYgX2NvbXBpbGVfYnl0ZWNvZGUoZGF0YSwgbmFtZT1Ob25lLCBieXRlY29kZV9wYXRoPU5vbmUsIHNvdXJjZV9wYXRoPU5vbmUpOgorICAgICIiIkNvbXBpbGUgYnl0ZWNvZGUgYXMgcmV0dXJuZWQgYnkgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcigpLiIiIgorICAgIGNvZGUgPSBtYXJzaGFsLmxvYWRzKGRhdGEpCisgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBfY29kZV90eXBlKToKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7IXJ9JywgYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgaWYgc291cmNlX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfaW1wLl9maXhfY29fZmlsZW5hbWUoY29kZSwgc291cmNlX3BhdGgpCisgICAgICAgIHJldHVybiBjb2RlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vbi1jb2RlIG9iamVjdCBpbiB7IXJ9Jy5mb3JtYXQoYnl0ZWNvZGVfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQorCitkZWYgX2NvZGVfdG9fYnl0ZWNvZGUoY29kZSwgbXRpbWU9MCwgc291cmNlX3NpemU9MCk6CisgICAgIiIiQ29tcGlsZSBhIGNvZGUgb2JqZWN0IGludG8gYnl0ZWNvZGUgZm9yIHdyaXRpbmcgb3V0IHRvIGEgYnl0ZS1jb21waWxlZAorICAgIGZpbGUuIiIiCisgICAgZGF0YSA9IGJ5dGVhcnJheShNQUdJQ19OVU1CRVIpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhtdGltZSkpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2Vfc2l6ZSkpCisgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlKSkKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyk6CisgICAgIiIiRGVjb2RlIGJ5dGVzIHJlcHJlc2VudGluZyBzb3VyY2UgY29kZSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcuCisKKyAgICBVbml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGlzIHVzZWQgaW4gdGhlIGRlY29kaW5nLgorICAgICIiIgorICAgIGltcG9ydCB0b2tlbml6ZSAgIyBUbyBhdm9pZCBib290c3RyYXAgaXNzdWVzLgorICAgIHNvdXJjZV9ieXRlc19yZWFkbGluZSA9IF9pby5CeXRlc0lPKHNvdXJjZV9ieXRlcykucmVhZGxpbmUKKyAgICBlbmNvZGluZyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhzb3VyY2VfYnl0ZXNfcmVhZGxpbmUpCisgICAgbmV3bGluZV9kZWNvZGVyID0gX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkKKyAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKKworCisjIE1vZHVsZSBzcGVjaWZpY2F0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBfbW9kdWxlX3JlcHIobW9kdWxlKToKKyAgICAjIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNb2R1bGVUeXBlX19yZXByX18oKS4KKyAgICBsb2FkZXIgPSBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKQorICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnbW9kdWxlX3JlcHInKToKKyAgICAgICAgIyBYWFggRGVwcmVjYXRpb24gV2FybmluZyBoZXJlLi4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBsb2FkZXIubW9kdWxlX3JlcHIobW9kdWxlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgIHRyeToKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX1NwZWNNZXRob2RzKHNwZWMpLm1vZHVsZV9yZXByKCkKKworICAgICMgV2UgY291bGQgdXNlIG1vZHVsZS5fX2NsYXNzX18uX19uYW1lX18gaW5zdGVhZCBvZiAnbW9kdWxlJyBpbiB0aGUKKyAgICAjIHZhcmlvdXMgcmVwciBwZXJtdXRhdGlvbnMuCisgICAgdHJ5OgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBuYW1lID0gJz8nCisgICAgdHJ5OgorICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZS5fX2ZpbGVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfT4nLmZvcm1hdChuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHshcn0pPicuZm9ybWF0KG5hbWUsIGxvYWRlcikKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQobmFtZSwgZmlsZW5hbWUpCisKKworY2xhc3MgX2luc3RhbGxlZF9zYWZlbHk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kdWxlKToKKyAgICAgICAgc2VsZi5fbW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuX3NwZWMgPSBtb2R1bGUuX19zcGVjX18KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcworICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMKKyAgICAgICAgIyB3cm9uZykKKyAgICAgICAgc2VsZi5fc3BlYy5faW5pdGlhbGl6aW5nID0gVHJ1ZQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLl9zcGVjLm5hbWVdID0gc2VsZi5fbW9kdWxlCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5fc3BlYworICAgICAgICAgICAgaWYgYW55KGFyZyBpcyBub3QgTm9uZSBmb3IgYXJnIGluIGFyZ3MpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnaW1wb3J0IHshcn0gIyB7IXJ9Jywgc3BlYy5uYW1lLCBzcGVjLmxvYWRlcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3NwZWMuX2luaXRpYWxpemluZyA9IEZhbHNlCisKKworY2xhc3MgTW9kdWxlU3BlYzoKKyAgICAiIiJUaGUgc3BlY2lmaWNhdGlvbiBmb3IgYSBtb2R1bGUsIHVzZWQgZm9yIGxvYWRpbmcuCisKKyAgICBBIG1vZHVsZSdzIHNwZWMgaXMgdGhlIHNvdXJjZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZHVsZS4gIEZvcgorICAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2R1bGUsIGluY2x1ZGluZyBzb3VyY2UsIHVzZSB0aGUgc3BlYydzCisgICAgbG9hZGVyLgorCisgICAgYG5hbWVgIGlzIHRoZSBhYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuICBgbG9hZGVyYCBpcyB0aGUgbG9hZGVyCisgICAgdG8gdXNlIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgYHBhcmVudGAgaXMgdGhlIG5hbWUgb2YgdGhlCisgICAgcGFja2FnZSB0aGUgbW9kdWxlIGlzIGluLiAgVGhlIHBhcmVudCBpcyBkZXJpdmVkIGZyb20gdGhlIG5hbWUuCisKKyAgICBgaXNfcGFja2FnZWAgZGV0ZXJtaW5lcyBpZiB0aGUgbW9kdWxlIGlzIGNvbnNpZGVyZWQgYSBwYWNrYWdlIG9yCisgICAgbm90LiAgT24gbW9kdWxlcyB0aGlzIGlzIHJlZmxlY3RlZCBieSB0aGUgYF9fcGF0aF9fYCBhdHRyaWJ1dGUuCisKKyAgICBgb3JpZ2luYCBpcyB0aGUgc3BlY2lmaWMgbG9jYXRpb24gdXNlZCBieSB0aGUgbG9hZGVyIGZyb20gd2hpY2ggdG8KKyAgICBsb2FkIHRoZSBtb2R1bGUsIGlmIHRoYXQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiAgV2hlbiBmaWxlbmFtZSBpcworICAgIHNldCwgb3JpZ2luIHdpbGwgbWF0Y2guCisKKyAgICBgaGFzX2xvY2F0aW9uYCBpbmRpY2F0ZXMgdGhhdCBhIHNwZWMncyAib3JpZ2luIiByZWZsZWN0cyBhIGxvY2F0aW9uLgorICAgIFdoZW4gdGhpcyBpcyBUcnVlLCBgX19maWxlX19gIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlIGlzIHNldC4KKworICAgIGBjYWNoZWRgIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FjaGVkIGJ5dGVjb2RlIGZpbGUsIGlmIGFueS4gIEl0CisgICAgY29ycmVzcG9uZHMgdG8gdGhlIGBfX2NhY2hlZF9fYCBhdHRyaWJ1dGUuCisKKyAgICBgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnNgIGlzIHRoZSBzZXF1ZW5jZSBvZiBwYXRoIGVudHJpZXMgdG8KKyAgICBzZWFyY2ggd2hlbiBpbXBvcnRpbmcgc3VibW9kdWxlcy4gIElmIHNldCwgaXNfcGFja2FnZSBzaG91bGQgYmUKKyAgICBUcnVlLS1hbmQgRmFsc2Ugb3RoZXJ3aXNlLgorCisgICAgUGFja2FnZXMgYXJlIHNpbXBseSBtb2R1bGVzIHRoYXQgKG1heSkgaGF2ZSBzdWJtb2R1bGVzLiAgSWYgYSBzcGVjCisgICAgaGFzIGEgbm9uLU5vbmUgdmFsdWUgaW4gYHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zYCwgdGhlIGltcG9ydAorICAgIHN5c3RlbSB3aWxsIGNvbnNpZGVyIG1vZHVsZXMgbG9hZGVkIGZyb20gdGhlIHNwZWMgYXMgcGFja2FnZXMuCisKKyAgICBPbmx5IGZpbmRlcnMgKHNlZSBpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyIGFuZAorICAgIGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyKSBzaG91bGQgbW9kaWZ5IE1vZHVsZVNwZWMgaW5zdGFuY2VzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgbG9hZGVyX3N0YXRlPU5vbmUsCisgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKKyAgICAgICAgc2VsZi5vcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgc2VsZi5sb2FkZXJfc3RhdGUgPSBsb2FkZXJfc3RhdGUKKyAgICAgICAgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtdIGlmIGlzX3BhY2thZ2UgZWxzZSBOb25lCisKKyAgICAgICAgIyBmaWxlLWxvY2F0aW9uIGF0dHJpYnV0ZXMKKyAgICAgICAgc2VsZi5fc2V0X2ZpbGVhdHRyID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY2FjaGVkID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gWyduYW1lPXshcn0nLmZvcm1hdChzZWxmLm5hbWUpLAorICAgICAgICAgICAgICAgICdsb2FkZXI9eyFyfScuZm9ybWF0KHNlbGYubG9hZGVyKV0KKyAgICAgICAgaWYgc2VsZi5vcmlnaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnb3JpZ2luPXshcn0nLmZvcm1hdChzZWxmLm9yaWdpbikpCisgICAgICAgIGlmIHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9e30nCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMpKQorICAgICAgICByZXR1cm4gJ3t9KHt9KScuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnLCAnLmpvaW4oYXJncykpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc21zbCA9IHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkZXIgPT0gb3RoZXIubG9hZGVyIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdpbiA9PSBvdGhlci5vcmlnaW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHNtc2wgPT0gb3RoZXIuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVkID09IG90aGVyLmNhY2hlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYXNfbG9jYXRpb24gPT0gb3RoZXIuaGFzX2xvY2F0aW9uKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjYWNoZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2NhY2hlZCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5vcmlnaW4gaXMgbm90IE5vbmUgYW5kIHNlbGYuX3NldF9maWxlYXR0cjoKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYub3JpZ2luCisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoU09VUkNFX1NVRkZJWEVTKSk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZCA9IGNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLmVuZHN3aXRoKHR1cGxlKEJZVEVDT0RFX1NVRkZJWEVTKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZCA9IGZpbGVuYW1lCisgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWQKKworICAgIEBjYWNoZWQuc2V0dGVyCisgICAgZGVmIGNhY2hlZChzZWxmLCBjYWNoZWQpOgorICAgICAgICBzZWxmLl9jYWNoZWQgPSBjYWNoZWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnQoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBtb2R1bGUncyBwYXJlbnQuIiIiCisgICAgICAgIGlmIHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFzX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2V0X2ZpbGVhdHRyCisKKworZGVmIHNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBtb2R1bGUgc3BlYyBiYXNlZCBvbiB2YXJpb3VzIGxvYWRlciBtZXRob2RzLiIiIgorICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnZ2V0X2ZpbGVuYW1lJyk6CisgICAgICAgIGlmIGlzX3BhY2thZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2FkZXI9bG9hZGVyKQorICAgICAgICBzZWFyY2ggPSBbXSBpZiBpc19wYWNrYWdlIGVsc2UgTm9uZQorICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9hZGVyPWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPXNlYXJjaCkKKworICAgIGlmIGlzX3BhY2thZ2UgaXMgTm9uZToKKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdpc19wYWNrYWdlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IGxvYWRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IE5vbmUgICMgYWthLCB1bmRlZmluZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBGYWxzZQorCisgICAgcmV0dXJuIE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49b3JpZ2luLCBpc19wYWNrYWdlPWlzX3BhY2thZ2UpCisKKworX1BPUFVMQVRFID0gb2JqZWN0KCkKKworCitkZWYgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9jYXRpb249Tm9uZSwgKiwgbG9hZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9X1BPUFVMQVRFKToKKyAgICAiIiJSZXR1cm4gYSBtb2R1bGUgc3BlYyBiYXNlZCBvbiBhIGZpbGUgbG9jYXRpb24uCisKKyAgICBUbyBpbmRpY2F0ZSB0aGF0IHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBzZXQKKyAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyB0byBhIGxpc3Qgb2YgZGlyZWN0b3J5IHBhdGhzLiAgQW4KKyAgICBlbXB0eSBsaXN0IGlzIHN1ZmZpY2llbnQsIHRob3VnaCBpdHMgbm90IG90aGVyd2lzZSB1c2VmdWwgdG8gdGhlCisgICAgaW1wb3J0IHN5c3RlbS4KKworICAgIFRoZSBsb2FkZXIgbXVzdCB0YWtlIGEgc3BlYyBhcyBpdHMgb25seSBfX2luaXRfXygpIGFyZy4KKworICAgICIiIgorICAgIGlmIGxvY2F0aW9uIGlzIE5vbmU6CisgICAgICAgICMgVGhlIGNhbGxlciBtYXkgc2ltcGx5IHdhbnQgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkIGxvY2F0aW9uLQorICAgICAgICAjIG9yaWVudGVkIHNwZWMuICBTbyB3ZSBzZXQgdGhlIGxvY2F0aW9uIHRvIGEgYm9ndXMgdmFsdWUgYW5kCisgICAgICAgICMgZmlsbCBpbiBhcyBtdWNoIGFzIHdlIGNhbi4KKyAgICAgICAgbG9jYXRpb24gPSAnPHVua25vd24+JworICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9maWxlbmFtZScpOgorICAgICAgICAgICAgIyBFeGVjdXRpb25Mb2FkZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IGxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIElmIHRoZSBsb2NhdGlvbiBpcyBvbiB0aGUgZmlsZXN5c3RlbSwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QsCisgICAgIyB3ZSBjb3VsZCByZXR1cm4gTm9uZSBoZXJlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGxvY2F0aW9uIGlzIG5vdAorICAgICMgdmFsaWQuICBIb3dldmVyLCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgb2YgdGVzdGluZyBzaW5jZSBhbgorICAgICMgaW5kaXJlY3QgbG9jYXRpb24gKGUuZy4gYSB6aXAgZmlsZSBvciBVUkwpIHdpbGwgbG9vayBsaWtlIGEKKyAgICAjIG5vbi1leGlzdGVudCBmaWxlIHJlbGF0aXZlIHRvIHRoZSBmaWxlc3lzdGVtLgorCisgICAgc3BlYyA9IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49bG9jYXRpb24pCisgICAgc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgIyBQaWNrIGEgbG9hZGVyIGlmIG9uZSB3YXNuJ3QgcHJvdmlkZWQuCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGZvciBsb2FkZXJfY2xhc3MsIHN1ZmZpeGVzIGluIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgorICAgICAgICAgICAgaWYgbG9jYXRpb24uZW5kc3dpdGgodHVwbGUoc3VmZml4ZXMpKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBsb2FkZXJfY2xhc3MobmFtZSwgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgc3BlYy5sb2FkZXIgPSBsb2FkZXIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgU2V0IHN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMgYXBwcm9wcmlhdGVseS4KKyAgICBpZiBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBfUE9QVUxBVEU6CisgICAgICAgICMgQ2hlY2sgdGhlIGxvYWRlci4KKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdpc19wYWNrYWdlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IGxvYWRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10KKyAgICBlbHNlOgorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID09IFtdOgorICAgICAgICBpZiBsb2NhdGlvbjoKKyAgICAgICAgICAgIGRpcm5hbWUgPSBfcGF0aF9zcGxpdChsb2NhdGlvbilbMF0KKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMuYXBwZW5kKGRpcm5hbWUpCisKKyAgICByZXR1cm4gc3BlYworCisKK2RlZiBfc3BlY19mcm9tX21vZHVsZShtb2R1bGUsIGxvYWRlcj1Ob25lLCBvcmlnaW49Tm9uZSk6CisgICAgIyBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciB1c2UgaW4gX3NldHVwKCkuCisgICAgdHJ5OgorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlciA9IG1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgbG9hZGVyIHdpbGwgc3RheSBOb25lLgorICAgICAgICAgICAgcGFzcworICAgIHRyeToKKyAgICAgICAgbG9jYXRpb24gPSBtb2R1bGUuX19maWxlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGxvY2F0aW9uID0gTm9uZQorICAgIGlmIG9yaWdpbiBpcyBOb25lOgorICAgICAgICBpZiBsb2NhdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9yaWdpbiA9IGxvYWRlci5fT1JJR0lOCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgb3JpZ2luID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3JpZ2luID0gbG9jYXRpb24KKyAgICB0cnk6CisgICAgICAgIGNhY2hlZCA9IG1vZHVsZS5fX2NhY2hlZF9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBjYWNoZWQgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IGxpc3QobW9kdWxlLl9fcGF0aF9fKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBOb25lCisKKyAgICBzcGVjID0gTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsIG9yaWdpbj1vcmlnaW4pCisgICAgc3BlYy5fc2V0X2ZpbGVhdHRyID0gRmFsc2UgaWYgbG9jYXRpb24gaXMgTm9uZSBlbHNlIFRydWUKKyAgICBzcGVjLmNhY2hlZCA9IGNhY2hlZAorICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgIHJldHVybiBzcGVjCisKKworY2xhc3MgX1NwZWNNZXRob2RzOgorCisgICAgIiIiQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgc3BlYyBvYmplY3RzIHRvIHByb3ZpZGUgc3BlYy1zcGVjaWZpYworICAgIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlYyk6CisgICAgICAgIHNlbGYuc3BlYyA9IHNwZWMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX21vZHVsZShjbHMsIG1vZHVsZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIHNwZWMgZnJvbSBhIG1vZHVsZSdzIGF0dHJpYnV0ZXMuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNwZWMuX19sb2FkZXJfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHNwZWMgPSBfZmluZF9zcGVjKG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKG1vZHVsZS5fX25hbWVfXywgbG9hZGVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihtb2R1bGUuX19uYW1lX18sIGxvYWRlcikKKyAgICAgICAgcmV0dXJuIGNscyhzcGVjKQorCisgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlcHIgdG8gdXNlIGZvciB0aGUgbW9kdWxlLiIiIgorICAgICAgICAjIFdlIG1vc3RseSByZXBsaWNhdGUgX21vZHVsZV9yZXByKCkgdXNpbmcgdGhlIHNwZWMgYXR0cmlidXRlcy4KKyAgICAgICAgc3BlYyA9IHNlbGYuc3BlYworICAgICAgICBuYW1lID0gJz8nIGlmIHNwZWMubmFtZSBpcyBOb25lIGVsc2Ugc3BlYy5uYW1lCisgICAgICAgIGlmIHNwZWMub3JpZ2luIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9ICh7IXJ9KT4nLmZvcm1hdChuYW1lLCBzcGVjLmxvYWRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdChuYW1lLCBzcGVjLm9yaWdpbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdChzcGVjLm5hbWUsIHNwZWMub3JpZ2luKQorCisgICAgZGVmIGluaXRfbW9kdWxlX2F0dHJzKHNlbGYsIG1vZHVsZSwgKiwgX292ZXJyaWRlPUZhbHNlLCBfZm9yY2VfbmFtZT1UcnVlKToKKyAgICAgICAgIiIiU2V0IHRoZSBtb2R1bGUncyBhdHRyaWJ1dGVzLgorCisgICAgICAgIEFsbCBtaXNzaW5nIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIHdpbGwgYmUgc2V0LiAgSGVyZQorICAgICAgICBpcyBob3cgdGhlIHNwZWMgYXR0cmlidXRlcyBtYXAgb250byB0aGUgbW9kdWxlOgorCisgICAgICAgIHNwZWMubmFtZSAtPiBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgc3BlYy5sb2FkZXIgLT4gbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgc3BlYy5wYXJlbnQgLT4gbW9kdWxlLl9fcGFja2FnZV9fCisgICAgICAgIHNwZWMgLT4gbW9kdWxlLl9fc3BlY19fCisKKyAgICAgICAgT3B0aW9uYWw6CisgICAgICAgIHNwZWMub3JpZ2luIC0+IG1vZHVsZS5fX2ZpbGVfXyAoaWYgc3BlYy5zZXRfZmlsZWF0dHIgaXMgdHJ1ZSkKKyAgICAgICAgc3BlYy5jYWNoZWQgLT4gbW9kdWxlLl9fY2FjaGVkX18gKGlmIF9fZmlsZV9fIGFsc28gc2V0KQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIC0+IG1vZHVsZS5fX3BhdGhfXyAoaWYgc2V0KQorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisKKyAgICAgICAgIyBUaGUgcGFzc2VkIGluIG1vZHVsZSBtYXkgYmUgbm90IHN1cHBvcnQgYXR0cmlidXRlIGFzc2lnbm1lbnQsCisgICAgICAgICMgaW4gd2hpY2ggY2FzZSB3ZSBzaW1wbHkgZG9uJ3Qgc2V0IHRoZSBhdHRyaWJ1dGVzLgorCisgICAgICAgICMgX19uYW1lX18KKyAgICAgICAgaWYgKF9vdmVycmlkZSBvciBfZm9yY2VfbmFtZSBvcgorICAgICAgICAgICAgZ2V0YXR0cihtb2R1bGUsICdfX25hbWVfXycsIE5vbmUpIGlzIE5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX25hbWVfXyA9IHNwZWMubmFtZQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fbG9hZGVyX18KKyAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBBIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaGFjay4KKyAgICAgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBfTmFtZXNwYWNlTG9hZGVyLl9fbmV3X18oX05hbWVzcGFjZUxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19wYWNrYWdlX18KKyAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNwZWMucGFyZW50CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19zcGVjX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3BhdGhfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX3BhdGhfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICAgICAgIyBfX2ZpbGVfXworICAgICAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc3BlYy5vcmlnaW4KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBfX2NhY2hlZF9fCisgICAgICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzcGVjLmNhY2hlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzcGVjLmNhY2hlZAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgbW9kdWxlIHRvIGJlIGxvYWRlZC4KKworICAgICAgICBUaGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgYXJlIGFsc28gc2V0IHdpdGggdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIHZhbHVlcyBmcm9tIHRoZSBzcGVjLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgICMgVHlwaWNhbGx5IGxvYWRlcnMgd2lsbCBub3QgaW1wbGVtZW50IGNyZWF0ZV9tb2R1bGUoKS4KKyAgICAgICAgaWYgaGFzYXR0cihzcGVjLmxvYWRlciwgJ2NyZWF0ZV9tb2R1bGUnKToKKyAgICAgICAgICAgICMgSWYgY3JlYXRlX21vZHVsZSgpIHJldHVybnMgYE5vbmVgIGl0IG1lYW5zIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAjIG1vZHVsZSBjcmVhdGlvbiBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNwZWMubG9hZGVyLmNyZWF0ZV9tb2R1bGUoc3BlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZHVsZSA9IE5vbmUKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgZXZlciBjYWxsZWQgYXMgdGhlICdpbycKKyAgICAgICAgICAgICMgbW9kdWxlIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlCisgICAgICAgICAgICAjIHRyaWdnZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgICAgIG1vZHVsZSA9IF9uZXdfbW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworICAgIGRlZiBfZXhlYyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJEbyBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byBleGVjdXRlIHRoZSBtb2R1bGUuCisKKyAgICAgICAgVGhlIG5hbWVzcGFjZSBvZiBgbW9kdWxlYCBpcyB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgZXhlY3V0aW9uLgorICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHRoZSBsb2FkZXIncyBgZXhlY19tb2R1bGUoKWAgbWV0aG9kLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKworICAgICMgVXNlZCBieSBpbXBvcnRsaWIucmVsb2FkKCkgYW5kIF9sb2FkX21vZHVsZV9zaGltKCkuCisgICAgZGVmIGV4ZWMoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgc3BlYyBpbiBhbiBleGlzdGluZyBtb2R1bGUncyBuYW1lc3BhY2UuIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLnNwZWMubmFtZQorICAgICAgICBfaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKG5hbWUpOgorICAgICAgICAgICAgaWYgc3lzLm1vZHVsZXMuZ2V0KG5hbWUpIGlzIG5vdCBtb2R1bGU6CisgICAgICAgICAgICAgICAgbXNnID0gJ21vZHVsZSB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcycuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdtaXNzaW5nIGxvYWRlcicsIG5hbWU9c2VsZi5zcGVjLm5hbWUpCisgICAgICAgICAgICAgICAgIyBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlLCBfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSwgX292ZXJyaWRlPVRydWUpCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgICAgICAjIFhYWCBEZXByZWNhdGlvbldhcm5pbmcgZ29lcyBoZXJlLi4uCisgICAgICAgICAgICAgICAgc2VsZi5zcGVjLmxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCisKKyAgICBkZWYgX2xvYWRfYmFja3dhcmRfY29tcGF0aWJsZShzZWxmKToKKyAgICAgICAgIyBYWFggRGVwcmVjYXRpb25XYXJuaW5nIGdvZXMgaGVyZS4uLgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgICMgVGhlIG1vZHVsZSBtdXN0IGJlIGluIHN5cy5tb2R1bGVzIQorICAgICAgICBzcGVjLmxvYWRlci5sb2FkX21vZHVsZShzcGVjLm5hbWUpCisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNwZWMubG9hZGVyCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFNpbmNlIG1vZHVsZS5fX3BhdGhfXyBtYXkgbm90IGxpbmUgdXAgd2l0aAorICAgICAgICAgICAgICAgICMgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX3BhdGhzLCB3ZSBjYW4ndCBuZWNlc3NhcmlseSByZWx5CisgICAgICAgICAgICAgICAgIyBvbiBzcGVjLnBhcmVudCBoZXJlLgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXworICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNwZWMubmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19zcGVjX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBtb2R1bGUKKworICAgICMgWFhYIElmIHdlIGRvbid0IGVuZCB1cCB1c2luZyB0aGlzIGZvciBweXRob25ydW4uYy9ydW5weSwgd2Ugc2hvdWxkCisgICAgIyAgICAgZ2V0IHJpZCBvZiBpdC4KKyAgICBkZWYgX2xvYWRfZXhpc3Rpbmcoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlYyB0aGUgc3BlYydlZCBtb2R1bGUgaW50byBhbiBleGlzdGluZyBtb2R1bGUncyBuYW1lc3BhY2UuIiIiCisgICAgICAgICMgRm9yIHVzZSBieSBydW5weS4KKyAgICAgICAgd2l0aCBfaW5zdGFsbGVkX3NhZmVseShtb2R1bGUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5leGVjKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIGxvYWRlZAorCisgICAgZGVmIF9sb2FkX3VubG9ja2VkKHNlbGYpOgorICAgICAgICAjIEEgaGVscGVyIGZvciBkaXJlY3QgdXNlIGJ5IHRoZSBpbXBvcnQgc3lzdGVtLgorICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBub3QgYSBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5zcGVjLmxvYWRlciwgJ2V4ZWNfbW9kdWxlJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfYmFja3dhcmRfY29tcGF0aWJsZSgpCisKKyAgICAgICAgbW9kdWxlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB3aXRoIF9pbnN0YWxsZWRfc2FmZWx5KG1vZHVsZSk6CisgICAgICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdtaXNzaW5nIGxvYWRlcicsIG5hbWU9c2VsZi5zcGVjLm5hbWUpCisgICAgICAgICAgICAgICAgIyBBIG5hbWVzcGFjZSBwYWNrYWdlIHNvIGRvIG5vdGhpbmcuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWMobW9kdWxlKQorCisgICAgICAgICMgV2UgZG9uJ3QgZW5zdXJlIHRoYXQgdGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGdldAorICAgICAgICAjIHNldCBpbiB0aGUgc3lzLm1vZHVsZXMgcmVwbGFjZW1lbnQgY2FzZS4gIFN1Y2ggbW9kdWxlcyBhcmUgb24KKyAgICAgICAgIyB0aGVpciBvd24uCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICMgQSBtZXRob2QgdXNlZCBkdXJpbmcgdGVzdGluZyBvZiBfbG9hZF91bmxvY2tlZCgpIGFuZCBieQorICAgICMgX2xvYWRfbW9kdWxlX3NoaW0oKS4KKyAgICBkZWYgbG9hZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IG1vZHVsZSBvYmplY3QsIGxvYWRlZCBieSB0aGUgc3BlYydzIGxvYWRlci4KKworICAgICAgICBUaGUgbW9kdWxlIGlzIG5vdCBhZGRlZCB0byBpdHMgcGFyZW50LgorCisgICAgICAgIElmIGEgbW9kdWxlIGlzIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMsIHRoYXQgZXhpc3RpbmcgbW9kdWxlIGdldHMKKyAgICAgICAgY2xvYmJlcmVkLgorCisgICAgICAgICIiIgorICAgICAgICBfaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb2FkX3VubG9ja2VkKCkKIAogCiAjIExvYWRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC02MzQsOSArMTIxOCwxOSBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG1vZHVsZSk6CisgICAgICAgICMgWFhYIGRlcHJlY2F0ZQorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoYnVpbHQtaW4pPicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKwogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChidWlsdC1pbik+Ii5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBfaW1wLmlzX2J1aWx0aW4oZnVsbG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGNscywgb3JpZ2luPSdidWlsdC1pbicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC02NDUsMjMgKzEyMzksMjYgQEAKICAgICAgICAgSWYgJ3BhdGgnIGlzIGV2ZXIgc3BlY2lmaWVkIHRoZW4gdGhlIHNlYXJjaCBpcyBjb25zaWRlcmVkIGEgZmFpbHVyZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBjbHMgaWYgX2ltcC5pc19idWlsdGluKGZ1bGxuYW1lKSBlbHNlIE5vbmUKKyAgICAgICAgc3BlYyA9IGNscy5maW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIHJldHVybiBzcGVjLmxvYWRlciBpZiBzcGVjIGlzIG5vdCBOb25lIGVsc2UgTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleGVjX21vZHVsZShtb2R1bGUpOgorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgICAgIG5hbWUgPSBzcGVjLm5hbWUKKyAgICAgICAgaWYgbm90IF9pbXAuaXNfYnVpbHRpbihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGJ1aWx0LWluIG1vZHVsZScuZm9ybWF0KG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgICAgICBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuaW5pdF9idWlsdGluLCBuYW1lKQorICAgICAgICAjIEhhdmUgdG8gbWFudWFsbHkgaW5pdGlhbGl6ZSBhdHRyaWJ1dGVzIHNpbmNlIGluaXRfYnVpbHRpbigpIGlzIG5vdAorICAgICAgICAjIGdvaW5nIHRvIGRvIGl0IGZvciB1cy4KKyAgICAgICAgIyBYWFg6IENyZWF0ZSBfaW1wLmV4ZWNfYnVpbHRpbihtb2R1bGUpCisgICAgICAgIF9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhzeXMubW9kdWxlc1tuYW1lXSkKIAogICAgIEBjbGFzc21ldGhvZAotICAgIEBzZXRfcGFja2FnZQotICAgIEBzZXRfbG9hZGVyCi0gICAgQF9yZXF1aXJlc19idWlsdGluCiAgICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGEgYnVpbHQtaW4gbW9kdWxlLiIiIgotICAgICAgICBpc19yZWxvYWQgPSBmdWxsbmFtZSBpbiBzeXMubW9kdWxlcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmluaXRfYnVpbHRpbiwgZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBfbG9hZF9tb2R1bGVfc2hpbShjbHMsIGZ1bGxuYW1lKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgQF9yZXF1aXJlc19idWlsdGluCkBAIC02NzksNiArMTI3Niw3IEBACiAgICAgQF9yZXF1aXJlc19idWlsdGluCiAgICAgZGVmIGlzX3BhY2thZ2UoY2xzLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIlJldHVybiBGYWxzZSBhcyBidWlsdC1pbiBtb2R1bGVzIGFyZSBuZXZlciBwYWNrYWdlcy4iIiIKKyAgICAgICAgIyBYWFggRGVwcmVjYXRpb25XYXJuaW5nIGhlcmUuLi4KICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIApAQCAtNjkxLDMxICsxMjg5LDM2IEBACiAKICAgICAiIiIKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbW9kdWxlX3JlcHIobSk6CisgICAgICAgICMgWFhYIGRlcHJlY2F0ZQorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoZnJvemVuKT4nLmZvcm1hdChtLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChmcm96ZW4pPiIuZm9ybWF0KG0uX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGNscywgb3JpZ2luPSdmcm96ZW4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgogICAgICAgICAiIiJGaW5kIGEgZnJvemVuIG1vZHVsZS4iIiIKICAgICAgICAgcmV0dXJuIGNscyBpZiBfaW1wLmlzX2Zyb3plbihmdWxsbmFtZSkgZWxzZSBOb25lCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4ZWNfbW9kdWxlKG1vZHVsZSk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19zcGVjX18ubmFtZQorICAgICAgICBpZiBub3QgX2ltcC5pc19mcm96ZW4obmFtZSk6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBmcm96ZW4gbW9kdWxlJy5mb3JtYXQobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUpCisgICAgICAgIGNvZGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuZ2V0X2Zyb3plbl9vYmplY3QsIG5hbWUpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgQHNldF9wYWNrYWdlCi0gICAgQHNldF9sb2FkZXIKLSAgICBAX3JlcXVpcmVzX2Zyb3plbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIGZyb3plbiBtb2R1bGUuIiIiCi0gICAgICAgIGlzX3JlbG9hZCA9IGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG0gPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuaW5pdF9mcm96ZW4sIGZ1bGxuYW1lKQotICAgICAgICAgICAgIyBMZXQgb3VyIG93biBtb2R1bGVfcmVwcigpIG1ldGhvZCBwcm9kdWNlIGEgc3VpdGFibGUgcmVwci4KLSAgICAgICAgICAgIGRlbCBtLl9fZmlsZV9fCi0gICAgICAgICAgICByZXR1cm4gbQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gX2xvYWRfbW9kdWxlX3NoaW0oY2xzLCBmdWxsbmFtZSkKIAogICAgIEBjbGFzc21ldGhvZAogICAgIEBfcmVxdWlyZXNfZnJvemVuCkBAIC03MzgsMjIgKzEzNDEsMjEgQEAKIAogY2xhc3MgV2luZG93c1JlZ2lzdHJ5RmluZGVyOgogCi0gICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4KLSAgICAiIiIKKyAgICAiIiJNZXRhIHBhdGggZmluZGVyIGZvciBtb2R1bGVzIGRlY2xhcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiIiIgogCiAgICAgUkVHSVNUUllfS0VZID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfSIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9JykKICAgICBSRUdJU1RSWV9LRVlfREVCVUcgPSAoCi0gICAgICAgICJTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259IgotICAgICAgICAiXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZyIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZycpCiAgICAgREVCVUdfQlVJTEQgPSBGYWxzZSAgIyBDaGFuZ2VkIGluIF9zZXR1cCgpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX29wZW5fcmVnaXN0cnkoY2xzLCBrZXkpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIGtleSkKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9MT0NBTF9NQUNISU5FLCBrZXkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTc2NiwyNCArMTM2OCwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c192ZXJzaW9uPXN5cy52ZXJzaW9uWzozXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBjbHMuX29wZW5fcmVnaXN0cnkoa2V5KSBhcyBoa2V5OgotICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICIiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICcnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBmaWxlcGF0aAogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgbW9kdWxlIG5hbWVkIGluIHRoZSByZWdpc3RyeS4iIiIKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAjIFhYWCB1bnRlc3RlZCEgTmVlZCBhIFdpbmRvd3MgcGVyc29uIHRvIHdyaXRlIHRlc3RzIChvdGhlcndpc2UgbW9jayBvdXQgYXBwcm9wcmlhdGVseSkKICAgICAgICAgZmlsZXBhdGggPSBjbHMuX3NlYXJjaF9yZWdpc3RyeShmdWxsbmFtZSkKICAgICAgICAgaWYgZmlsZXBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9vcy5zdGF0KGZpbGVwYXRoKQorICAgICAgICAgICAgX3BhdGhfc3RhdChmaWxlcGF0aCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBmb3IgbG9hZGVyLCBzdWZmaXhlcyBpbiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKICAgICAgICAgICAgIGlmIGZpbGVwYXRoLmVuZHN3aXRoKHR1cGxlKHN1ZmZpeGVzKSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlcihmdWxsbmFtZSwgZmlsZXBhdGgpCisgICAgICAgICAgICAgICAgc3BlYyA9IHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGxvYWRlcihmdWxsbmFtZSwgZmlsZXBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1maWxlcGF0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgbW9kdWxlIG5hbWVkIGluIHRoZSByZWdpc3RyeS4iIiIKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAKIGNsYXNzIF9Mb2FkZXJCYXNpY3M6CkBAIC03OTEsNiArMTQwNCw3IEBACiAgICAgIiIiQmFzZSBjbGFzcyBvZiBjb21tb24gY29kZSBuZWVkZWQgYnkgYm90aCBTb3VyY2VMb2FkZXIgYW5kCiAgICAgU291cmNlbGVzc0ZpbGVMb2FkZXIuIiIiCiAKKyAgICAjIFhYWCBkZXByZWNhdGU/CiAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2UgYnkgY2hlY2tpbmcgaWYKICAgICAgICAgdGhlIHBhdGggcmV0dXJuZWQgYnkgZ2V0X2ZpbGVuYW1lIGhhcyBhIGZpbGVuYW1lIG9mICdfX2luaXRfXy5weScuIiIiCkBAIC03OTksNzQgKzE0MTMsMTUgQEAKICAgICAgICAgdGFpbF9uYW1lID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCiAgICAgICAgIHJldHVybiBmaWxlbmFtZV9iYXNlID09ICdfX2luaXRfXycgYW5kIHRhaWxfbmFtZSAhPSAnX19pbml0X18nCiAKLSAgICBkZWYgX2J5dGVzX2Zyb21fYnl0ZWNvZGUoc2VsZiwgZnVsbG5hbWUsIGRhdGEsIGJ5dGVjb2RlX3BhdGgsIHNvdXJjZV9zdGF0cyk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbWFyc2hhbGxlZCBieXRlcyBmcm9tIGJ5dGVjb2RlLCB2ZXJpZnlpbmcgdGhlIG1hZ2ljCi0gICAgICAgIG51bWJlciwgdGltZXN0YW1wIGFuZCBzb3VyY2Ugc2l6ZSBhbG9uZyB0aGUgd2F5LgorICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJFeGVjdXRlIHRoZSBtb2R1bGUuIiIiCisgICAgICAgIGNvZGUgPSBzZWxmLmdldF9jb2RlKG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgaWYgY29kZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2Nhbm5vdCBsb2FkIG1vZHVsZSB7IXJ9IHdoZW4gZ2V0X2NvZGUoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV0dXJucyBOb25lJy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKSkKKyAgICAgICAgX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChleGVjLCBjb2RlLCBtb2R1bGUuX19kaWN0X18pCiAKLSAgICAgICAgSWYgc291cmNlX3N0YXRzIGlzIE5vbmUgdGhlbiBza2lwIHRoZSB0aW1lc3RhbXAgY2hlY2suCi0KLSAgICAgICAgIiIiCi0gICAgICAgIG1hZ2ljID0gZGF0YVs6NF0KLSAgICAgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQotICAgICAgICByYXdfc2l6ZSA9IGRhdGFbODoxMl0KLSAgICAgICAgaWYgbWFnaWMgIT0gX01BR0lDX0JZVEVTOgotICAgICAgICAgICAgbXNnID0gJ2JhZCBtYWdpYyBudW1iZXIgaW4geyFyfTogeyFyfScuZm9ybWF0KGZ1bGxuYW1lLCBtYWdpYykKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobXNnKQotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgIGVsaWYgbGVuKHJhd190aW1lc3RhbXApICE9IDQ6Ci0gICAgICAgICAgICBtZXNzYWdlID0gJ2JhZCB0aW1lc3RhbXAgaW4ge30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgICAgIGVsaWYgbGVuKHJhd19zaXplKSAhPSA0OgotICAgICAgICAgICAgbWVzc2FnZSA9ICdiYWQgc2l6ZSBpbiB7fScuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKLSAgICAgICAgaWYgc291cmNlX3N0YXRzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzb3VyY2Vfc3RhdHNbJ210aW1lJ10pCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBfcl9sb25nKHJhd190aW1lc3RhbXApICE9IHNvdXJjZV9tdGltZToKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdieXRlY29kZSBpcyBzdGFsZSBmb3Ige30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCBuYW1lPWZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc291cmNlX3NpemUgPSBzb3VyY2Vfc3RhdHNbJ3NpemUnXSAmIDB4RkZGRkZGRkYKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3NpemUpICE9IHNvdXJjZV9zaXplOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJieXRlY29kZSBpcyBzdGFsZSBmb3Ige30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICMgQ2FuJ3QgcmV0dXJuIHRoZSBjb2RlIG9iamVjdCBhcyBlcnJvcnMgZnJvbSBtYXJzaGFsIGxvYWRpbmcgbmVlZCB0bwotICAgICAgICAjIHByb3BhZ2F0ZSBldmVuIHdoZW4gc291cmNlIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgcmV0dXJuIGRhdGFbMTI6XQotCi0gICAgQG1vZHVsZV9mb3JfbG9hZGVyCi0gICAgZGVmIF9sb2FkX21vZHVsZShzZWxmLCBtb2R1bGUsICosIHNvdXJjZWxlc3M9RmFsc2UpOgotICAgICAgICAiIiJIZWxwZXIgZm9yIGxvYWRfbW9kdWxlIGFibGUgdG8gaGFuZGxlIGVpdGhlciBzb3VyY2Ugb3Igc291cmNlbGVzcwotICAgICAgICBsb2FkaW5nLiIiIgotICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5nZXRfY29kZShuYW1lKQotICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzZWxmLmdldF9maWxlbmFtZShuYW1lKQotICAgICAgICBpZiBub3Qgc291cmNlbGVzczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IGNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gbW9kdWxlLl9fZmlsZV9fCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IG1vZHVsZS5fX2ZpbGVfXwotICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBuYW1lCi0gICAgICAgIGlmIHNlbGYuaXNfcGFja2FnZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtfcGF0aF9zcGxpdChtb2R1bGUuX19maWxlX18pWzBdXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChleGVjLCBjb2RlX29iamVjdCwgbW9kdWxlLl9fZGljdF9fKQotICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgbG9hZF9tb2R1bGUgPSBfbG9hZF9tb2R1bGVfc2hpbQogCiAKIGNsYXNzIFNvdXJjZUxvYWRlcihfTG9hZGVyQmFzaWNzKToKQEAgLTg3NCw4ICsxNDI5LDEwIEBACiAgICAgZGVmIHBhdGhfbXRpbWUoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIChhbiBpbnQpIGZvciB0aGUKICAgICAgICAgc3BlY2lmaWVkIHBhdGgsIHdoZXJlIHBhdGggaXMgYSBzdHIuCisKKyAgICAgICAgUmFpc2VzIElPRXJyb3Igd2hlbiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgcmFpc2UgSU9FcnJvcgogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCByZXR1cm5pbmcgYSBtZXRhZGF0YSBkaWN0IGZvciB0aGUgc3BlY2lmaWVkIHBhdGgKQEAgLTg4Niw2ICsxNDQzLDcgQEAKICAgICAgICAgLSAnc2l6ZScgKG9wdGlvbmFsKSBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgc291cmNlIGNvZGUuCiAKICAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kIGFsbG93cyB0aGUgbG9hZGVyIHRvIHJlYWQgYnl0ZWNvZGUgZmlsZXMuCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4geydtdGltZSc6IHNlbGYucGF0aF9tdGltZShwYXRoKX0KIApAQCAtOTAzLDMyICsxNDYxLDI2IEBACiAgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3cml0ZXMgZGF0YSAoYnl0ZXMpIHRvIGEgZmlsZSBwYXRoIChhIHN0cikuCiAKICAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kIGFsbG93cyBmb3IgdGhlIHdyaXRpbmcgb2YgYnl0ZWNvZGUgZmlsZXMuCi0KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0TG9hZGVyLmdldF9zb3VyY2UuIiIiCi0gICAgICAgIGltcG9ydCB0b2tlbml6ZQogICAgICAgICBwYXRoID0gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoInNvdXJjZSBub3QgYXZhaWxhYmxlIHRocm91Z2ggZ2V0X2RhdGEoKSIsCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkgZnJvbSBleGMKLSAgICAgICAgcmVhZHNvdXJjZSA9IF9pby5CeXRlc0lPKHNvdXJjZV9ieXRlcykucmVhZGxpbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcocmVhZHNvdXJjZSkKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJGYWlsZWQgdG8gZGV0ZWN0IGVuY29kaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCi0gICAgICAgIG5ld2xpbmVfZGVjb2RlciA9IF9pby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBuZXdsaW5lX2RlY29kZXIuZGVjb2RlKHNvdXJjZV9ieXRlcy5kZWNvZGUoZW5jb2RpbmdbMF0pKQotICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJGYWlsZWQgdG8gZGVjb2RlIHNvdXJjZSBmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCisgICAgICAgIHJldHVybiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcykKKworICAgIGRlZiBzb3VyY2VfdG9fY29kZShzZWxmLCBkYXRhLCBwYXRoLCAqLCBfb3B0aW1pemU9LTEpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGNvbXBpbGVkIGZyb20gc291cmNlLgorCisgICAgICAgIFRoZSAnZGF0YScgYXJndW1lbnQgY2FuIGJlIGFueSBvYmplY3QgdHlwZSB0aGF0IGNvbXBpbGUoKSBzdXBwb3J0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKGNvbXBpbGUsIGRhdGEsIHBhdGgsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X2luaGVyaXQ9VHJ1ZSwgb3B0aW1pemU9X29wdGltaXplKQogCiAgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5nZXRfY29kZS4KQEAgLTk0Niw0NSArMTQ5OCwzNCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0ID0gc2VsZi5wYXRoX3N0YXRzKHNvdXJjZV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzdFsnbXRpbWUnXSkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gc2VsZi5fYnl0ZXNfZnJvbV9ieXRlY29kZShmdWxsbmFtZSwgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2RhdGEgPSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9zdGF0cz1zdCwgbmFtZT1mdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd7fSBtYXRjaGVzIHt9JywgYnl0ZWNvZGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFyc2hhbC5sb2FkcyhieXRlc19kYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmb3VuZCwgX2NvZGVfdHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ltcC5fZml4X2NvX2ZpbGVuYW1lKGZvdW5kLCBzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHt9JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIk5vbi1jb2RlIG9iamVjdCBpbiB7fSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KGJ5dGVjb2RlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29tcGlsZV9ieXRlY29kZShieXRlc19kYXRhLCBuYW1lPWZ1bGxuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGg9Ynl0ZWNvZGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfcGF0aD1zb3VyY2VfcGF0aCkKICAgICAgICAgc291cmNlX2J5dGVzID0gc2VsZi5nZXRfZGF0YShzb3VyY2VfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKGNvbXBpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9ieXRlcywgc291cmNlX3BhdGgsICdleGVjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2VfYnl0ZXMsIHNvdXJjZV9wYXRoKQogICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHt9Jywgc291cmNlX3BhdGgpCiAgICAgICAgIGlmIChub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgYW5kIGJ5dGVjb2RlX3BhdGggaXMgbm90IE5vbmUgYW5kCi0gICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShfTUFHSUNfQllURVMpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfd19sb25nKHNvdXJjZV9tdGltZSkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfd19sb25nKGxlbihzb3VyY2VfYnl0ZXMpKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICAgICAgICAgIHNvdXJjZV9tdGltZSBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICBkYXRhID0gX2NvZGVfdG9fYnl0ZWNvZGUoY29kZV9vYmplY3QsIHNvdXJjZV9tdGltZSwKKyAgICAgICAgICAgICAgICAgICAgbGVuKHNvdXJjZV9ieXRlcykpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfYnl0ZWNvZGUoc291cmNlX3BhdGgsIGJ5dGVjb2RlX3BhdGgsIGRhdGEpCiAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnd3JvdGUgeyFyfScsIGJ5dGVjb2RlX3BhdGgpCkBAIC05OTIsMTYgKzE1MzMsNiBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGNvZGVfb2JqZWN0CiAKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBMb2FkZXIubG9hZF9tb2R1bGUuCi0KLSAgICAgICAgUmVxdWlyZXMgRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZSBhbmQgUmVzb3VyY2VMb2FkZXIuZ2V0X2RhdGEgdG8gYmUKLSAgICAgICAgaW1wbGVtZW50ZWQgdG8gbG9hZCBzb3VyY2UgY29kZS4gVXNlIG9mIGJ5dGVjb2RlIGlzIGRpY3RhdGVkIGJ5IHdoZXRoZXIKLSAgICAgICAgZ2V0X2NvZGUgdXNlcy93cml0ZXMgYnl0ZWNvZGUuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9sb2FkX21vZHVsZShmdWxsbmFtZSkKLQogCiBjbGFzcyBGaWxlTG9hZGVyOgogCkBAIC0xMDE3LDcgKzE1NDgsOSBAQAogICAgIEBfY2hlY2tfbmFtZQogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkxvYWQgYSBtb2R1bGUgZnJvbSBhIGZpbGUuIiIiCi0gICAgICAgICMgSXNzdWUgIzE0ODU3OiBBdm9pZCB0aGUgemVyby1hcmd1bWVudCBmb3JtIHNvIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhpcyBtZXRob2QgaXMgZm9yIHRoZSBuYW1lIGNoZWNrLgorCisgICAgICAgICMgSXNzdWUgIzE0ODU3OiBBdm9pZCB0aGUgemVyby1hcmd1bWVudCBmb3JtIG9mIHN1cGVyIHNvIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAjIG9mIHRoYXQgZm9ybSBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGJyZWFraW5nIHRoZSBmcm96ZW4gbW9kdWxlCiAgICAgICAgIHJldHVybiBzdXBlcihGaWxlTG9hZGVyLCBzZWxmKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKIApAQCAtMTAzOCwxOCArMTU3MSwxMiBAQAogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBwYXRoLiIiIgotICAgICAgICBzdCA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0ID0gX3BhdGhfc3RhdChwYXRoKQogICAgICAgICByZXR1cm4geydtdGltZSc6IHN0LnN0X210aW1lLCAnc2l6ZSc6IHN0LnN0X3NpemV9CiAKICAgICBkZWYgX2NhY2hlX2J5dGVjb2RlKHNlbGYsIHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKToKICAgICAgICAgIyBBZGFwdCBiZXR3ZWVuIHRoZSB0d28gQVBJcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2RlID0gX29zLnN0YXQoc291cmNlX3BhdGgpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBtb2RlID0gMG82NjYKLSAgICAgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcwotICAgICAgICAjIGxhdGVyIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSByZWFkLW9ubHkgb24gV2luZG93cyAoIzYwNzQpCi0gICAgICAgIG1vZGUgfD0gMG8yMDAKKyAgICAgICAgbW9kZSA9IF9jYWxjX21vZGUoc291cmNlX3BhdGgpCiAgICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGJ5dGVjb2RlX3BhdGgsIGRhdGEsIF9tb2RlPW1vZGUpCiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSwgKiwgX21vZGU9MG82NjYpOgpAQCAtMTA4NSwyMCArMTYxMiwxMSBAQAogCiAgICAgIiIiTG9hZGVyIHdoaWNoIGhhbmRsZXMgc291cmNlbGVzcyBmaWxlIGltcG9ydHMuIiIiCiAKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNvdXJjZWxlc3M9VHJ1ZSkKLQogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsIHBhdGgsIE5vbmUpCi0gICAgICAgIGZvdW5kID0gbWFyc2hhbC5sb2FkcyhieXRlc19kYXRhKQotICAgICAgICBpZiBpc2luc3RhbmNlKGZvdW5kLCBfY29kZV90eXBlKToKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20geyFyfScsIHBhdGgpCi0gICAgICAgICAgICByZXR1cm4gZm91bmQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJOb24tY29kZSBvYmplY3QgaW4ge30iLmZvcm1hdChwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgYnl0ZXNfZGF0YSA9IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwgbmFtZT1mdWxsbmFtZSwgcGF0aD1wYXRoKQorICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwgYnl0ZWNvZGVfcGF0aD1wYXRoKQogCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gTm9uZSBhcyB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4iIiIKQEAgLTExMjEsMjMgKzE2MzksMjIgQEAKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIyBYWFggY3JlYXRlIF9pbXAuZXhlY19keW5hbWljKCkKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICBmdWxsbmFtZSA9IHNwZWMubmFtZQorICAgICAgICBtb2R1bGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAubG9hZF9keW5hbWljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgc2VsZi5wYXRoKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdleHRlbnNpb24gbW9kdWxlIGxvYWRlZCBmcm9tIHshcn0nLCBzZWxmLnBhdGgpCisgICAgICAgIGlmIHNlbGYuaXNfcGFja2FnZShmdWxsbmFtZSkgYW5kIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQoc2VsZi5wYXRoKVswXV0KKyAgICAgICAgX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICMgWFhYIGRlcHJlY2F0ZQogICAgIEBfY2hlY2tfbmFtZQotICAgIEBzZXRfcGFja2FnZQotICAgIEBzZXRfbG9hZGVyCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhbiBleHRlbnNpb24gbW9kdWxlLiIiIgotICAgICAgICBpc19yZWxvYWQgPSBmdWxsbmFtZSBpbiBzeXMubW9kdWxlcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAubG9hZF9keW5hbWljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgc2VsZi5wYXRoKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKSBhbmQgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQoc2VsZi5wYXRoKVswXV0KLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKQogCiAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpcyBhIHBhY2thZ2UuIiIiCkBAIC0xMTUzLDYgKzE2NzAsMTEgQEAKICAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgZXh0ZW5zaW9uIG1vZHVsZXMgaGF2ZSBubyBzb3VyY2UgY29kZS4iIiIKICAgICAgICAgcmV0dXJuIE5vbmUKIAorICAgIEBfY2hlY2tfbmFtZQorICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlIGFzIGZvdW5kIGJ5IHRoZSBmaW5kZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKwogCiBjbGFzcyBfTmFtZXNwYWNlUGF0aDoKICAgICAiIiJSZXByZXNlbnRzIGEgbmFtZXNwYWNlIHBhY2thZ2UncyBwYXRoLiAgSXQgdXNlcyB0aGUgbW9kdWxlIG5hbWUKQEAgLTExODUsMTEgKzE3MDcsMTIgQEAKICAgICAgICAgIyBJZiB0aGUgcGFyZW50J3MgcGF0aCBoYXMgY2hhbmdlZCwgcmVjYWxjdWxhdGUgX3BhdGgKICAgICAgICAgcGFyZW50X3BhdGggPSB0dXBsZShzZWxmLl9nZXRfcGFyZW50X3BhdGgoKSkgIyBNYWtlIGEgY29weQogICAgICAgICBpZiBwYXJlbnRfcGF0aCAhPSBzZWxmLl9sYXN0X3BhcmVudF9wYXRoOgotICAgICAgICAgICAgbG9hZGVyLCBuZXdfcGF0aCA9IHNlbGYuX3BhdGhfZmluZGVyKHNlbGYuX25hbWUsIHBhcmVudF9wYXRoKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYuX3BhdGhfZmluZGVyKHNlbGYuX25hbWUsIHBhcmVudF9wYXRoKQogICAgICAgICAgICAgIyBOb3RlIHRoYXQgbm8gY2hhbmdlcyBhcmUgbWFkZSBpZiBhIGxvYWRlciBpcyByZXR1cm5lZCwgYnV0IHdlCiAgICAgICAgICAgICAjICBkbyByZW1lbWJlciB0aGUgbmV3IHBhcmVudCBwYXRoCi0gICAgICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9wYXRoID0gbmV3X3BhdGgKKyAgICAgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmUgYW5kIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGF0aCA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKICAgICAgICAgICAgIHNlbGYuX2xhc3RfcGFyZW50X3BhdGggPSBwYXJlbnRfcGF0aCAgICAgIyBTYXZlIHRoZSBjb3B5CiAgICAgICAgIHJldHVybiBzZWxmLl9wYXRoCiAKQEAgLTEyMDAsNyArMTcyMyw3IEBACiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcmVjYWxjdWxhdGUoKSkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJfTmFtZXNwYWNlUGF0aCh7IXJ9KSIuZm9ybWF0KHNlbGYuX3BhdGgpCisgICAgICAgIHJldHVybiAnX05hbWVzcGFjZVBhdGgoeyFyfSknLmZvcm1hdChzZWxmLl9wYXRoKQogCiAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKICAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5fcmVjYWxjdWxhdGUoKQpAQCAtMTIwOSwyMCArMTczMiwzMCBAQAogICAgICAgICBzZWxmLl9wYXRoLmFwcGVuZChpdGVtKQogCiAKLWNsYXNzIE5hbWVzcGFjZUxvYWRlcjoKKyMgV2UgdXNlIHRoaXMgZXhjbHVzaXZlbHkgaW4gaW5pdF9tb2R1bGVfYXR0cnMoKSBmb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4KK2NsYXNzIF9OYW1lc3BhY2VMb2FkZXI6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhdGgsIHBhdGhfZmluZGVyKToKICAgICAgICAgc2VsZi5fcGF0aCA9IF9OYW1lc3BhY2VQYXRoKG5hbWUsIHBhdGgsIHBhdGhfZmluZGVyKQogCisgICAgIyBYWFggRGVwcmVjYXRlCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG1vZHVsZV9yZXByKGNscywgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKG5hbWVzcGFjZSk+Ii5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAobmFtZXNwYWNlKT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCiAKLSAgICBAbW9kdWxlX2Zvcl9sb2FkZXIKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUoJycsICc8c3RyaW5nPicsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCisKKyAgICAjIFhYWCBEZXByZWNhdGUKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGEgbmFtZXNwYWNlIG1vZHVsZS4iIiIKICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnbmFtZXNwYWNlIG1vZHVsZSBsb2FkZWQgd2l0aCBwYXRoIHshcn0nLCBzZWxmLl9wYXRoKQotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzZWxmLl9wYXRoCi0gICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKQogCiAKICMgRmluZGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEyNjUsNyArMTc5OCw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHBhdGggPT0gJyc6Ci0gICAgICAgICAgICBwYXRoID0gJy4nCisgICAgICAgICAgICBwYXRoID0gX29zLmdldGN3ZCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbmRlciA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyNzQsNyArMTgwNywyMCBAQAogICAgICAgICByZXR1cm4gZmluZGVyCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2dldF9sb2FkZXIoY2xzLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgZGVmIF9sZWdhY3lfZ2V0X3NwZWMoY2xzLCBmdWxsbmFtZSwgZmluZGVyKToKKyAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX2xvYWRlcicpOgorICAgICAgICAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihmdWxsbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShmdWxsbmFtZSkKKyAgICAgICAgICAgIHBvcnRpb25zID0gTm9uZQorICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgbG9hZGVyKQorICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHBvcnRpb25zCisgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2dldF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKICAgICAgICAgIiIiRmluZCB0aGUgbG9hZGVyIG9yIG5hbWVzcGFjZV9wYXRoIGZvciB0aGlzIG1vZHVsZS9wYWNrYWdlIG5hbWUuIiIiCiAgICAgICAgICMgSWYgdGhpcyBlbmRzIHVwIGJlaW5nIGEgbmFtZXNwYWNlIHBhY2thZ2UsIG5hbWVzcGFjZV9wYXRoIGlzCiAgICAgICAgICMgIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2lsbCBiZWNvbWUgaXRzIF9fcGF0aF9fCkBAIC0xMjg0LDM4ICsxODMwLDU4IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGZpbmRlciA9IGNscy5fcGF0aF9pbXBvcnRlcl9jYWNoZShlbnRyeSkKICAgICAgICAgICAgIGlmIGZpbmRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlciwgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX3NwZWMnKToKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMoZnVsbG5hbWUsIHRhcmdldCkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHBvcnRpb25zID0gW10KLSAgICAgICAgICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYSBsb2FkZXI6IHJldHVybiBpdCBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlciwgbmFtZXNwYWNlX3BhdGgKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IGNscy5fbGVnYWN5X2dldF9zcGVjKGZ1bGxuYW1lLCBmaW5kZXIpCisgICAgICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgICAgIHBvcnRpb25zID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgICAgIGlmIHBvcnRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzcGVjIG1pc3NpbmcgbG9hZGVyJykKICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgcG9zc2libHkgcGFydCBvZiBhIG5hbWVzcGFjZSBwYWNrYWdlLgogICAgICAgICAgICAgICAgICMgIFJlbWVtYmVyIHRoZXNlIHBhdGggZW50cmllcyAoaWYgYW55KSBmb3Igd2hlbiB3ZQogICAgICAgICAgICAgICAgICMgIGNyZWF0ZSBhIG5hbWVzcGFjZSBwYWNrYWdlLCBhbmQgY29udGludWUgaXRlcmF0aW5nCiAgICAgICAgICAgICAgICAgIyAgb24gcGF0aC4KICAgICAgICAgICAgICAgICBuYW1lc3BhY2VfcGF0aC5leHRlbmQocG9ydGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZSwgbmFtZXNwYWNlX3BhdGgKKyAgICAgICAgICAgIHNwZWMgPSBNb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICByZXR1cm4gc3BlYwogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIiIiZmluZCB0aGUgbW9kdWxlIG9uIHN5cy5wYXRoIG9yICdwYXRoJyBiYXNlZCBvbiBzeXMucGF0aF9ob29rcyBhbmQKICAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuIiIiCiAgICAgICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHBhdGggPSBzeXMucGF0aAotICAgICAgICBsb2FkZXIsIG5hbWVzcGFjZV9wYXRoID0gY2xzLl9nZXRfbG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQotICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZGVyCi0gICAgICAgIGVsc2U6CisgICAgICAgIHNwZWMgPSBjbHMuX2dldF9zcGVjKGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIG5hbWVzcGFjZV9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucwogICAgICAgICAgICAgaWYgbmFtZXNwYWNlX3BhdGg6CiAgICAgICAgICAgICAgICAgIyBXZSBmb3VuZCBhdCBsZWFzdCBvbmUgbmFtZXNwYWNlIHBhdGguICBSZXR1cm4gYQotICAgICAgICAgICAgICAgICMgIGxvYWRlciB3aGljaCBjYW4gY3JlYXRlIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gTmFtZXNwYWNlTG9hZGVyKGZ1bGxuYW1lLCBuYW1lc3BhY2VfcGF0aCwgY2xzLl9nZXRfbG9hZGVyKQorICAgICAgICAgICAgICAgICMgIHNwZWMgd2hpY2ggY2FuIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgc3BlYy5vcmlnaW4gPSAnbmFtZXNwYWNlJworICAgICAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBfTmFtZXNwYWNlUGF0aChmdWxsbmFtZSwgbmFtZXNwYWNlX3BhdGgsIGNscy5fZ2V0X3NwZWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiZmluZCB0aGUgbW9kdWxlIG9uIHN5cy5wYXRoIG9yICdwYXRoJyBiYXNlZCBvbiBzeXMucGF0aF9ob29rcyBhbmQKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuIiIiCisgICAgICAgICMgWFhYIERlcHJlY2F0aW9uIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgc3BlYyA9IGNscy5maW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgogCiAKIGNsYXNzIEZpbGVGaW5kZXI6CkBAIC0xMzUwLDEwICsxOTE2LDI4IEBACiAgICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCiAgICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIFtdCisgICAgICAgIHJldHVybiBzcGVjLmxvYWRlciwgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBvciBbXQorCisgICAgZGVmIF9nZXRfc3BlYyhzZWxmLCBsb2FkZXJfY2xhc3MsIGZ1bGxuYW1lLCBwYXRoLCBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgdGFyZ2V0KToKKyAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NsYXNzKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnZXRfc3BlYyA9IGxvYWRlci5fZ2V0X3NwZWMKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKGZ1bGxuYW1lLCBwYXRoLCBsb2FkZXI9bG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPXN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGdldF9zcGVjKGZ1bGxuYW1lLCBwYXRoLCBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgdGFyZ2V0KQorCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAiIiJUcnkgdG8gZmluZCBhIGxvYWRlciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUsIG9yIHRoZSBuYW1lc3BhY2UKKyAgICAgICAgcGFja2FnZSBwb3J0aW9ucy4gUmV0dXJucyAobG9hZGVyLCBsaXN0LW9mLXBvcnRpb25zKS4iIiIKICAgICAgICAgaXNfbmFtZXNwYWNlID0gRmFsc2UKICAgICAgICAgdGFpbF9tb2R1bGUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMl0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbXRpbWUgPSBfb3Muc3RhdChzZWxmLnBhdGgpLnN0X210aW1lCisgICAgICAgICAgICBtdGltZSA9IF9wYXRoX3N0YXQoc2VsZi5wYXRoIG9yIF9vcy5nZXRjd2QoKSkuc3RfbXRpbWUKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBtdGltZSA9IC0xCiAgICAgICAgIGlmIG10aW1lICE9IHNlbGYuX3BhdGhfbXRpbWU6CkBAIC0xMzY5LDMzICsxOTUzLDM0IEBACiAgICAgICAgICMgQ2hlY2sgaWYgdGhlIG1vZHVsZSBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSAoYW5kIHRodXMgYSBwYWNrYWdlKS4KICAgICAgICAgaWYgY2FjaGVfbW9kdWxlIGluIGNhY2hlOgogICAgICAgICAgICAgYmFzZV9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlKQotICAgICAgICAgICAgaWYgX3BhdGhfaXNkaXIoYmFzZV9wYXRoKToKLSAgICAgICAgICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXIgaW4gc2VsZi5fbG9hZGVyczoKLSAgICAgICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKLSAgICAgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihiYXNlX3BhdGgsIGluaXRfZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGlmIF9wYXRoX2lzZmlsZShmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChsb2FkZXIoZnVsbG5hbWUsIGZ1bGxfcGF0aCksIFtiYXNlX3BhdGhdKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgQSBuYW1lc3BhY2UgcGFja2FnZSwgcmV0dXJuIHRoZSBwYXRoIGlmIHdlIGRvbid0IGFsc28KLSAgICAgICAgICAgICAgICAgICAgIyAgZmluZCBhIG1vZHVsZSBpbiB0aGUgbmV4dCBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBUcnVlCisgICAgICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXJfY2xhc3MgaW4gc2VsZi5fbG9hZGVyczoKKyAgICAgICAgICAgICAgICBpbml0X2ZpbGVuYW1lID0gJ19faW5pdF9fJyArIHN1ZmZpeAorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGlmIF9wYXRoX2lzZmlsZShmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3NwZWMobG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgZnVsbF9wYXRoLCBbYmFzZV9wYXRoXSwgdGFyZ2V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIGEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndAorICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBfcGF0aF9pc2RpcihiYXNlX3BhdGgpCiAgICAgICAgICMgQ2hlY2sgZm9yIGEgZmlsZSB3LyBhIHByb3BlciBzdWZmaXggZXhpc3RzLgotICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXIgaW4gc2VsZi5fbG9hZGVyczoKKyAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6CiAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKHNlbGYucGF0aCwgdGFpbF9tb2R1bGUgKyBzdWZmaXgpCiAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd0cnlpbmcge30nLmZvcm1hdChmdWxsX3BhdGgpLCB2ZXJib3NpdHk9MikKICAgICAgICAgICAgIGlmIGNhY2hlX21vZHVsZSArIHN1ZmZpeCBpbiBjYWNoZToKICAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChsb2FkZXIoZnVsbG5hbWUsIGZ1bGxfcGF0aCksIFtdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3NwZWMobG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgZnVsbF9wYXRoLCBOb25lLCB0YXJnZXQpCiAgICAgICAgIGlmIGlzX25hbWVzcGFjZToKICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3Bvc3NpYmxlIG5hbWVzcGFjZSBmb3Ige30nLmZvcm1hdChiYXNlX3BhdGgpKQotICAgICAgICAgICAgcmV0dXJuIChOb25lLCBbYmFzZV9wYXRoXSkKLSAgICAgICAgcmV0dXJuIChOb25lLCBbXSkKKyAgICAgICAgICAgIHNwZWMgPSBNb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtiYXNlX3BhdGhdCisgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9maWxsX2NhY2hlKHNlbGYpOgogICAgICAgICAiIiJGaWxsIHRoZSBjYWNoZSBvZiBwb3RlbnRpYWwgbW9kdWxlcyBhbmQgcGFja2FnZXMgZm9yIHRoaXMgZGlyZWN0b3J5LiIiIgogICAgICAgICBwYXRoID0gc2VsZi5wYXRoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRlbnRzID0gX29zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gX29zLmxpc3RkaXIocGF0aCBvciBfb3MuZ2V0Y3dkKCkpCiAgICAgICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIFBlcm1pc3Npb25FcnJvciwgTm90QURpcmVjdG9yeUVycm9yKToKICAgICAgICAgICAgICMgRGlyZWN0b3J5IGhhcyBlaXRoZXIgYmVlbiByZW1vdmVkLCB0dXJuZWQgaW50byBhIGZpbGUsIG9yIG1hZGUKICAgICAgICAgICAgICMgdW5yZWFkYWJsZS4KQEAgLTE0MjAsNyArMjAwNSw3IEBACiAgICAgICAgICAgICAgICAgbG93ZXJfc3VmZml4X2NvbnRlbnRzLmFkZChuZXdfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX3BhdGhfY2FjaGUgPSBsb3dlcl9zdWZmaXhfY29udGVudHMKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TKToKLSAgICAgICAgICAgIHNlbGYuX3JlbGF4ZWRfcGF0aF9jYWNoZSA9IHNldChmbi5sb3dlcigpIGZvciBmbiBpbiBjb250ZW50cykKKyAgICAgICAgICAgIHNlbGYuX3JlbGF4ZWRfcGF0aF9jYWNoZSA9IHtmbi5sb3dlcigpIGZvciBmbiBpbiBjb250ZW50c30KIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBwYXRoX2hvb2soY2xzLCAqbG9hZGVyX2RldGFpbHMpOgpAQCAtMTQzNSwxMyArMjAyMCwxMyBAQAogICAgICAgICBkZWYgcGF0aF9ob29rX2Zvcl9GaWxlRmluZGVyKHBhdGgpOgogICAgICAgICAgICAgIiIiUGF0aCBob29rIGZvciBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIuIiIiCiAgICAgICAgICAgICBpZiBub3QgX3BhdGhfaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm9ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCIsIHBhdGg9cGF0aCkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignb25seSBkaXJlY3RvcmllcyBhcmUgc3VwcG9ydGVkJywgcGF0aD1wYXRoKQogICAgICAgICAgICAgcmV0dXJuIGNscyhwYXRoLCAqbG9hZGVyX2RldGFpbHMpCiAKICAgICAgICAgcmV0dXJuIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcgogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIkZpbGVGaW5kZXIoJXIpIiAlIChzZWxmLnBhdGgsKQorICAgICAgICByZXR1cm4gJ0ZpbGVGaW5kZXIoeyFyfSknLmZvcm1hdChzZWxmLnBhdGgpCiAKIAogIyBJbXBvcnQgaXRzZWxmICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTQ2OCwxOSArMjA1Myw0MyBAQAogICAgIHJldHVybiAne30ue30nLmZvcm1hdChiYXNlLCBuYW1lKSBpZiBuYW1lIGVsc2UgYmFzZQogCiAKLWRlZiBfZmluZF9tb2R1bGUobmFtZSwgcGF0aCk6CitkZWYgX2ZpbmRfc3BlYyhuYW1lLCBwYXRoLCB0YXJnZXQ9Tm9uZSk6CiAgICAgIiIiRmluZCBhIG1vZHVsZSdzIGxvYWRlci4iIiIKICAgICBpZiBub3Qgc3lzLm1ldGFfcGF0aDoKICAgICAgICAgX3dhcm5pbmdzLndhcm4oJ3N5cy5tZXRhX3BhdGggaXMgZW1wdHknLCBJbXBvcnRXYXJuaW5nKQorICAgICMgV2UgY2hlY2sgc3lzLm1vZHVsZXMgaGVyZSBmb3IgdGhlIHJlbG9hZCBjYXNlLiAgV2hpbGUgYSBwYXNzZWQtaW4KKyAgICAjIHRhcmdldCB3aWxsIHVzdWFsbHkgaW5kaWNhdGUgYSByZWxvYWQgdGhlcmUgaXMgbm8gZ3VhcmFudGVlLCB3aGVyZWFzCisgICAgIyBzeXMubW9kdWxlcyBwcm92aWRlcyBvbmUuCisgICAgaXNfcmVsb2FkID0gbmFtZSBpbiBzeXMubW9kdWxlcwogICAgIGZvciBmaW5kZXIgaW4gc3lzLm1ldGFfcGF0aDoKICAgICAgICAgd2l0aCBfSW1wb3J0TG9ja0NvbnRleHQoKToKLSAgICAgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShuYW1lLCBwYXRoKQotICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCi0gICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmluZF9zcGVjID0gZmluZGVyLmZpbmRfc3BlYworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShuYW1lLCBwYXRoKQorICAgICAgICAgICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlcikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18KKyAgICAgICAgICAgICAgICBzcGVjID0gZmluZF9zcGVjKG5hbWUsIHBhdGgsIHRhcmdldCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgVGhlIHBhcmVudCBpbXBvcnQgbWF5IGhhdmUgYWxyZWFkeSBpbXBvcnRlZCB0aGlzIG1vZHVsZS4KKyAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9fc3BlY19fID0gbW9kdWxlLl9fc3BlY19fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIFdlIHVzZSB0aGUgZm91bmQgc3BlYyBzaW5jZSB0aGF0IGlzIHRoZSBvbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICAjIHdlIHdvdWxkIGhhdmUgdXNlZCBpZiB0aGUgcGFyZW50IG1vZHVsZSBoYWRuJ3QKKyAgICAgICAgICAgICAgICAgICAgIyBiZWF0ZW4gdXMgdG8gdGhlIHB1bmNoLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIF9fc3BlY19fIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fc3BlY19fCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIE5vbmUKIApAQCAtMTQ4OCwyMSArMjA5NywyMiBAQAogZGVmIF9zYW5pdHlfY2hlY2sobmFtZSwgcGFja2FnZSwgbGV2ZWwpOgogICAgICIiIlZlcmlmeSBhcmd1bWVudHMgYXJlICJzYW5lIi4iIiIKICAgICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm1vZHVsZSBuYW1lIG11c3QgYmUgc3RyLCBub3Qge30iLmZvcm1hdCh0eXBlKG5hbWUpKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdtb2R1bGUgbmFtZSBtdXN0IGJlIHN0ciwgbm90IHt9Jy5mb3JtYXQodHlwZShuYW1lKSkpCiAgICAgaWYgbGV2ZWwgPCAwOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsZXZlbCBtdXN0IGJlID49IDAnKQogICAgIGlmIHBhY2thZ2U6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhY2thZ2UsIHN0cik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIl9fcGFja2FnZV9fIG5vdCBzZXQgdG8gYSBzdHJpbmciKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdfX3BhY2thZ2VfXyBub3Qgc2V0IHRvIGEgc3RyaW5nJykKICAgICAgICAgZWxpZiBwYWNrYWdlIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIG1zZyA9ICgiUGFyZW50IG1vZHVsZSB7IXJ9IG5vdCBsb2FkZWQsIGNhbm5vdCBwZXJmb3JtIHJlbGF0aXZlICIKLSAgICAgICAgICAgICAgICAgICAiaW1wb3J0IikKKyAgICAgICAgICAgIG1zZyA9ICgnUGFyZW50IG1vZHVsZSB7IXJ9IG5vdCBsb2FkZWQsIGNhbm5vdCBwZXJmb3JtIHJlbGF0aXZlICcKKyAgICAgICAgICAgICAgICAgICAnaW1wb3J0JykKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUVycm9yKG1zZy5mb3JtYXQocGFja2FnZSkpCiAgICAgaWYgbm90IG5hbWUgYW5kIGxldmVsID09IDA6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkVtcHR5IG1vZHVsZSBuYW1lIikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW1wdHkgbW9kdWxlIG5hbWUnKQogCiAKLV9FUlJfTVNHID0gJ05vIG1vZHVsZSBuYW1lZCB7IXJ9JworX0VSUl9NU0dfUFJFRklYID0gJ05vIG1vZHVsZSBuYW1lZCAnCitfRVJSX01TRyA9IF9FUlJfTVNHX1BSRUZJWCArICd7IXJ9JwogCiBkZWYgX2ZpbmRfYW5kX2xvYWRfdW5sb2NrZWQobmFtZSwgaW1wb3J0Xyk6CiAgICAgcGF0aCA9IE5vbmUKQEAgLTE1MTMsNTggKzIxMjMsMjggQEAKICAgICAgICAgIyBDcmF6eSBzaWRlLWVmZmVjdHMhCiAgICAgICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KLSAgICAgICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eTsgYmUgbmljZXIgdG8gc2tpcCB0aGUgZGljdCBsb29rdXAuCiAgICAgICAgIHBhcmVudF9tb2R1bGUgPSBzeXMubW9kdWxlc1twYXJlbnRdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBhdGggPSBwYXJlbnRfbW9kdWxlLl9fcGF0aF9fCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIG1zZyA9IChfRVJSX01TRyArICc7IHt9IGlzIG5vdCBhIHBhY2thZ2UnKS5mb3JtYXQobmFtZSwgcGFyZW50KQorICAgICAgICAgICAgbXNnID0gKF9FUlJfTVNHICsgJzsgeyFyfSBpcyBub3QgYSBwYWNrYWdlJykuZm9ybWF0KG5hbWUsIHBhcmVudCkKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQotICAgIGxvYWRlciA9IF9maW5kX21vZHVsZShuYW1lLCBwYXRoKQotICAgIGlmIGxvYWRlciBpcyBOb25lOgotICAgICAgICBleGMgPSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKLSAgICAgICAgIyBUT0RPKGJyZXR0KTogc3dpdGNoIHRvIGEgcHJvcGVyIE1vZHVsZU5vdEZvdW5kIGV4Y2VwdGlvbiBpbiBQeXRob24KLSAgICAgICAgIyAzLjQuCi0gICAgICAgIGV4Yy5fbm90X2ZvdW5kID0gVHJ1ZQotICAgICAgICByYWlzZSBleGMKLSAgICBlbGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCi0gICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdpbXBvcnQgeyFyfSAjIHshcn0nLCBuYW1lLCBsb2FkZXIpCi0gICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eTsgYmUgbmljZXIgdG8gc2tpcCB0aGUgZGljdCBsb29rdXAuCi0gICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBzcGVjID0gX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgZWxzZToKKyAgICAgICAgbW9kdWxlID0gX1NwZWNNZXRob2RzKHNwZWMpLl9sb2FkX3VubG9ja2VkKCkKICAgICBpZiBwYXJlbnQ6CiAgICAgICAgICMgU2V0IHRoZSBtb2R1bGUgYXMgYW4gYXR0cmlidXRlIG9uIGl0cyBwYXJlbnQuCiAgICAgICAgIHBhcmVudF9tb2R1bGUgPSBzeXMubW9kdWxlc1twYXJlbnRdCiAgICAgICAgIHNldGF0dHIocGFyZW50X21vZHVsZSwgbmFtZS5ycGFydGl0aW9uKCcuJylbMl0sIG1vZHVsZSkKLSAgICAjIFNldCBfX3BhY2thZ2VfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCi0gICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAjIFNldCBsb2FkZXIgaWYgbmVlZCBiZS4KLSAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKICAgICByZXR1cm4gbW9kdWxlCiAKIAogZGVmIF9maW5kX2FuZF9sb2FkKG5hbWUsIGltcG9ydF8pOgogICAgICIiIkZpbmQgYW5kIGxvYWQgdGhlIG1vZHVsZSwgYW5kIHJlbGVhc2UgdGhlIGltcG9ydCBsb2NrLiIiIgotICAgIHRyeToKLSAgICAgICAgbG9jayA9IF9nZXRfbW9kdWxlX2xvY2sobmFtZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCi0gICAgbG9jay5hY3F1aXJlKCkKLSAgICB0cnk6CisgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIobmFtZSk6CiAgICAgICAgIHJldHVybiBfZmluZF9hbmRfbG9hZF91bmxvY2tlZChuYW1lLCBpbXBvcnRfKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGxvY2sucmVsZWFzZSgpCiAKIAogZGVmIF9nY2RfaW1wb3J0KG5hbWUsIHBhY2thZ2U9Tm9uZSwgbGV2ZWw9MCk6CkBAIC0xNTg1LDggKzIxNjUsOCBAQAogICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCiAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CiAgICAgICAgIF9pbXAucmVsZWFzZV9sb2NrKCkKLSAgICAgICAgbWVzc2FnZSA9ICgiaW1wb3J0IG9mIHt9IGhhbHRlZDsgIgotICAgICAgICAgICAgICAgICAgICAiTm9uZSBpbiBzeXMubW9kdWxlcyIuZm9ybWF0KG5hbWUpKQorICAgICAgICBtZXNzYWdlID0gKCdpbXBvcnQgb2Yge30gaGFsdGVkOyAnCisgICAgICAgICAgICAgICAgICAgJ05vbmUgaW4gc3lzLm1vZHVsZXMnLmZvcm1hdChuYW1lKSkKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1uYW1lKQogICAgIF9sb2NrX3VubG9ja19tb2R1bGUobmFtZSkKICAgICByZXR1cm4gbW9kdWxlCkBAIC0xNjE2LDkgKzIxOTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAjIEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGRpY3RhdGVzIHdlIGlnbm9yZSBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgIyBpbXBvcnRzIHRyaWdnZXJlZCBieSBmcm9tbGlzdCBmb3IgbW9kdWxlcyB0aGF0IGRvbid0CiAgICAgICAgICAgICAgICAgICAgICMgZXhpc3QuCi0gICAgICAgICAgICAgICAgICAgICMgVE9ETyhicmV0dCk6IEluIFB5dGhvbiAzLjQsIGhhdmUgaW1wb3J0IHJhaXNlCi0gICAgICAgICAgICAgICAgICAgICMgICBNb2R1bGVOb3RGb3VuZCBhbmQgY2F0Y2ggdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihleGMsICdfbm90X2ZvdW5kJywgRmFsc2UpOgorICAgICAgICAgICAgICAgICAgICBpZiBzdHIoZXhjKS5zdGFydHN3aXRoKF9FUlJfTVNHX1BSRUZJWCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBleGMubmFtZSA9PSBmcm9tX25hbWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTE2ODYsNiArMjI2NCwxMyBAQAogICAgICAgICByZXR1cm4gX2hhbmRsZV9mcm9tbGlzdChtb2R1bGUsIGZyb21saXN0LCBfZ2NkX2ltcG9ydCkKIAogCitkZWYgX2J1aWx0aW5fZnJvbV9uYW1lKG5hbWUpOgorICAgIHNwZWMgPSBCdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKG5hbWUpCisgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbm8gYnVpbHQtaW4gbW9kdWxlIG5hbWVkICcgKyBuYW1lKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICByZXR1cm4gbWV0aG9kcy5fbG9hZF91bmxvY2tlZCgpCisKIAogZGVmIF9zZXR1cChzeXNfbW9kdWxlLCBfaW1wX21vZHVsZSk6CiAgICAgIiIiU2V0dXAgaW1wb3J0bGliIGJ5IGltcG9ydGluZyBuZWVkZWQgYnVpbHQtaW4gbW9kdWxlcyBhbmQgaW5qZWN0aW5nIHRoZW0KQEAgLTE3MDQsMjQgKzIyODksMzEgQEAKICAgICBlbHNlOgogICAgICAgICBCWVRFQ09ERV9TVUZGSVhFUyA9IERFQlVHX0JZVEVDT0RFX1NVRkZJWEVTCiAKKyAgICAjIFNldCB1cCB0aGUgc3BlYyBmb3IgZXhpc3RpbmcgYnVpbHRpbi9mcm96ZW4gbW9kdWxlcy4KICAgICBtb2R1bGVfdHlwZSA9IHR5cGUoc3lzKQogICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIG1vZHVsZV90eXBlKToKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKToKLSAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBCdWlsdGluSW1wb3J0ZXIKLSAgICAgICAgICAgICAgICBlbGlmIF9pbXAuaXNfZnJvemVuKG5hbWUpOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IEZyb3plbkltcG9ydGVyCisgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBCdWlsdGluSW1wb3J0ZXIKKyAgICAgICAgICAgIGVsaWYgX2ltcC5pc19mcm96ZW4obmFtZSk6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gRnJvemVuSW1wb3J0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNwZWMgPSBfc3BlY19mcm9tX21vZHVsZShtb2R1bGUsIGxvYWRlcikKKyAgICAgICAgICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICAgICAgICAgIG1ldGhvZHMuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQogCisgICAgIyBEaXJlY3RseSBsb2FkIGJ1aWx0LWluIG1vZHVsZXMgbmVlZGVkIGR1cmluZyBib290c3RyYXAuCiAgICAgc2VsZl9tb2R1bGUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KICAgICBmb3IgYnVpbHRpbl9uYW1lIGluICgnX2lvJywgJ193YXJuaW5ncycsICdidWlsdGlucycsICdtYXJzaGFsJyk6CiAgICAgICAgIGlmIGJ1aWx0aW5fbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShidWlsdGluX25hbWUpCisgICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZShidWlsdGluX25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IHN5cy5tb2R1bGVzW2J1aWx0aW5fbmFtZV0KICAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgYnVpbHRpbl9uYW1lLCBidWlsdGluX21vZHVsZSkKIAotICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pLCAoJ29zMicsIFsnXFwnLCAnLyddKQorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgb3MgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCisgICAgb3NfZGV0YWlscyA9ICgncG9zaXgnLCBbJy8nXSksICgnbnQnLCBbJ1xcJywgJy8nXSkKICAgICBmb3IgYnVpbHRpbl9vcywgcGF0aF9zZXBhcmF0b3JzIGluIG9zX2RldGFpbHM6CiAgICAgICAgICMgQXNzdW1wdGlvbiBtYWRlIGluIF9wYXRoX2pvaW4oKQogICAgICAgICBhc3NlcnQgYWxsKGxlbihzZXApID09IDEgZm9yIHNlcCBpbiBwYXRoX3NlcGFyYXRvcnMpCkBAIC0xNzMxLDMyICsyMzIzLDMzIEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShidWlsdGluX29zKQotICAgICAgICAgICAgICAgICMgVE9ETzogcmlwIG91dCBvczIgY29kZSBhZnRlciAzLjMgaXMgcmVsZWFzZWQgYXMgcGVyIFBFUCAxMQotICAgICAgICAgICAgICAgIGlmIGJ1aWx0aW5fb3MgPT0gJ29zMicgYW5kICdFTVggR0NDJyBpbiBzeXMudmVyc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgcGF0aF9zZXAgPSBwYXRoX3NlcGFyYXRvcnNbMV0KKyAgICAgICAgICAgICAgICBvc19tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoYnVpbHRpbl9vcykKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2ltcG9ydGxpYiByZXF1aXJlcyBwb3NpeCBvciBudCcpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19vcycsIG9zX21vZHVsZSkKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXAnLCBwYXRoX3NlcCkKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXBhcmF0b3JzJywgJycuam9pbihwYXRoX3NlcGFyYXRvcnMpKQogCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSBfdGhyZWFkIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgogICAgIHRyeToKLSAgICAgICAgdGhyZWFkX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX3RocmVhZCcpCisgICAgICAgIHRocmVhZF9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoJ190aHJlYWQnKQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIyBQeXRob24gd2FzIGJ1aWx0IHdpdGhvdXQgdGhyZWFkcwogICAgICAgICB0aHJlYWRfbW9kdWxlID0gTm9uZQotICAgIHdlYWtyZWZfbW9kdWxlID0gQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfd2Vha3JlZicpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ190aHJlYWQnLCB0aHJlYWRfbW9kdWxlKQogCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSBfd2Vha3JlZiBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KKyAgICB3ZWFrcmVmX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnX3dlYWtyZWYnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfd2Vha3JlZicsIHdlYWtyZWZfbW9kdWxlKQorCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSB3aW5yZWcgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCiAgICAgaWYgYnVpbHRpbl9vcyA9PSAnbnQnOgotICAgICAgICB3aW5yZWdfbW9kdWxlID0gQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKCd3aW5yZWcnKQorICAgICAgICB3aW5yZWdfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCd3aW5yZWcnKQogICAgICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dpbnJlZycsIHdpbnJlZ19tb2R1bGUpCiAKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX29zJywgb3NfbW9kdWxlKQotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfdGhyZWFkJywgdGhyZWFkX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dlYWtyZWYnLCB3ZWFrcmVmX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXAnLCBwYXRoX3NlcCkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXBhcmF0b3JzJywgc2V0KHBhdGhfc2VwYXJhdG9ycykpCiAgICAgIyBDb25zdGFudHMKICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3JlbGF4X2Nhc2UnLCBfbWFrZV9yZWxheF9jYXNlKCkpCiAgICAgRVhURU5TSU9OX1NVRkZJWEVTLmV4dGVuZChfaW1wLmV4dGVuc2lvbl9zdWZmaXhlcygpKQpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9hYmMucHkgYi9MaWIvaW1wb3J0bGliL2FiYy5weQppbmRleCAzODc1NjdhLi4zOTk1ZmYyIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL2FiYy5weQorKysgYi9MaWIvaW1wb3J0bGliL2FiYy5weQpAQCAtOCwxMSArOCw2IEBACiAgICAgICAgIHJhaXNlCiAgICAgX2Zyb3plbl9pbXBvcnRsaWIgPSBOb25lCiBpbXBvcnQgYWJjCi1pbXBvcnQgaW1wCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IHN5cwotaW1wb3J0IHRva2VuaXplCi1pbXBvcnQgd2FybmluZ3MKIAogCiBkZWYgX3JlZ2lzdGVyKGFic3RyYWN0X2NscywgKmNsYXNzZXMpOgpAQCAtMzcsMjggKzMyLDMxIEBACiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgogICAgICAgICAiIiJBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCBzaG91bGQgZmluZCBhIG1vZHVsZS4KICAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyIGFuZCB0aGUgb3B0aW9uYWwgcGF0aCBpcyBhIHN0ciBvciBOb25lLgotICAgICAgICBSZXR1cm5zIGEgTG9hZGVyIG9iamVjdC4KKyAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3Qgb3IgTm9uZS4KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCiBjbGFzcyBNZXRhUGF0aEZpbmRlcihGaW5kZXIpOgogCiAgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgaW1wb3J0IGZpbmRlcnMgb24gc3lzLm1ldGFfcGF0aC4iIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAjIFdlIGRvbid0IGRlZmluZSBmaW5kX3NwZWMoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKKyAgICAjIGhhc2F0dHIgY2hlY2tzIHdlIGRvIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworICAgICMgWFhYIERlcHJlY2F0ZQogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCwgd2hlbiBpbXBsZW1lbnRlZCwgc2hvdWxkIGZpbmQgYSBtb2R1bGUuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQgdGhlIHBhdGggaXMgYSBzdHIgb3IgTm9uZS4KLSAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3QuCisgICAgICAgICIiIlJldHVybiBhIGxvYWRlciBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBJZiBubyBtb2R1bGUgaXMgZm91bmQsIHJldHVybiBOb25lLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyIGFuZAorICAgICAgICB0aGUgcGF0aCBpcyBhIGxpc3Qgb2Ygc3RyaW5ncyBvciBOb25lLgorCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogX3JlZ2lzdGVyKE1ldGFQYXRoRmluZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgbWFjaGluZXJ5LlBhdGhGaW5kZXIsIG1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXIpCkBAIC02OCwyMyArNjYsMzEgQEAKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHBhdGggZW50cnkgZmluZGVycyB1c2VkIGJ5IFBhdGhGaW5kZXIuIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoLCB3aGVuIGltcGxlbWVudGVkLCByZXR1cm5zIGEgbW9kdWxlIGxvYWRlci4KLSAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIDItdHVwbGUgb2YgKExvYWRlciwgcG9ydGlvbikgd2hlcmUKLSAgICAgICAgcG9ydGlvbiBpcyBhIHNlcXVlbmNlIG9mIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyBjb250cmlidXRpbmcgdG8gcGFydCBvZgotICAgICAgICBhIG5hbWVzcGFjZSBwYWNrYWdlLiAgVGhlIHNlcXVlbmNlIG1heSBiZSBlbXB0eSBhbmQgdGhlIGxvYWRlciBtYXkgYmUKLSAgICAgICAgTm9uZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAjIFdlIGRvbid0IGRlZmluZSBmaW5kX3NwZWMoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKKyAgICAjIGhhc2F0dHIgY2hlY2tzIHdlIGRvIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAorICAgICMgWFhYIERlcHJlY2F0ZS4KKyAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gKGxvYWRlciwgbmFtZXNwYWNlIHBvcnRpb24pIGZvciB0aGUgcGF0aCBlbnRyeS4KKworICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBUaGUgbmFtZXNwYWNlIHBvcnRpb24gaXMgYSBzZXF1ZW5jZSBvZgorICAgICAgICBwYXRoIGVudHJpZXMgY29udHJpYnV0aW5nIHRvIHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4gVGhlCisgICAgICAgIHNlcXVlbmNlIG1heSBiZSBlbXB0eS4gIElmIGxvYWRlciBpcyBub3QgTm9uZSwgdGhlIHBvcnRpb24gd2lsbAorICAgICAgICBiZSBpZ25vcmVkLgorCisgICAgICAgIFRoZSBwb3J0aW9uIHdpbGwgYmUgZGlzY2FyZGVkIGlmIGFub3RoZXIgcGF0aCBlbnRyeSBmaW5kZXIKKyAgICAgICAgbG9jYXRlcyB0aGUgbW9kdWxlIGFzIGEgbm9ybWFsIG1vZHVsZSBvciBwYWNrYWdlLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gTm9uZSwgW10KKworICAgICMgWFhYIERlcHJlY2F0ZS4KICAgICBmaW5kX21vZHVsZSA9IF9ib290c3RyYXAuX2ZpbmRfbW9kdWxlX3NoaW0KIAogICAgIGRlZiBpbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKICAgICAgICAgIiIiQW4gb3B0aW9uYWwgbWV0aG9kIGZvciBjbGVhcmluZyB0aGUgZmluZGVyJ3MgY2FjaGUsIGlmIGFueS4KICAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBieSBQYXRoRmluZGVyLmludmFsaWRhdGVfY2FjaGVzKCkuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogX3JlZ2lzdGVyKFBhdGhFbnRyeUZpbmRlciwgbWFjaGluZXJ5LkZpbGVGaW5kZXIpCiAKQEAgLTkzLDE2ICs5OSw0MyBAQAogCiAgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgaW1wb3J0IGxvYWRlcnMuIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIGxvYWQgYSBtb2R1bGUuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAiIiJSZXR1cm4gYSBtb2R1bGUgdG8gaW5pdGlhbGl6ZSBhbmQgaW50byB3aGljaCB0byBsb2FkLgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IgaWYgYW55dGhpbmcgcHJldmVudHMgaXQKKyAgICAgICAgZnJvbSBjcmVhdGluZyBhIG5ldyBtb2R1bGUuICBJdCBtYXkgcmV0dXJuIE5vbmUgdG8gaW5kaWNhdGUKKyAgICAgICAgdGhhdCB0aGUgc3BlYyBzaG91bGQgY3JlYXRlIHRoZSBuZXcgbW9kdWxlLgorCisgICAgICAgIGNyZWF0ZV9tb2R1bGUoKSBpcyBvcHRpb25hbC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBCeSBkZWZhdWx0LCBkZWZlciB0byBfU3BlY01ldGhvZHMuY3JlYXRlKCkgZm9yIHRoZSBuZXcgbW9kdWxlLgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZXhlY19tb2R1bGUoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKKyAgICAjIGhhc2F0dHIgY2hlY2tzIHdlIGRvIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworICAgICMgWFhYIERlcHJlY2F0ZS4KKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGxvYWRlZCBtb2R1bGUuCisKKyAgICAgICAgVGhlIG1vZHVsZSBtdXN0IGJlIGFkZGVkIHRvIHN5cy5tb2R1bGVzIGFuZCBoYXZlIGltcG9ydC1yZWxhdGVkCisgICAgICAgIGF0dHJpYnV0ZXMgc2V0IHByb3Blcmx5LiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLgorCisgICAgICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCBvbiBmYWlsdXJlLgorCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCisgICAgIyBYWFggRGVwcmVjYXRlLgogICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZQotICAgICAgICBnaXZlbiBtb2R1bGUncyByZXByLiIiIgorICAgICAgICAiIiJSZXR1cm4gYSBtb2R1bGUncyByZXByLgorCisgICAgICAgIFVzZWQgYnkgdGhlIG1vZHVsZSB0eXBlIHdoZW4gdGhlIG1ldGhvZCBkb2VzIG5vdCByYWlzZQorICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCisgICAgICAgICIiIgorICAgICAgICAjIFRoZSBleGNlcHRpb24gd2lsbCBjYXVzZSBNb2R1bGVUeXBlLl9fcmVwcl9fIHRvIGlnbm9yZSB0aGlzIG1ldGhvZC4KICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKQEAgLTExOSw3ICsxNTIsNyBAQAogICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgYnl0ZXMgZm9yCiAgICAgICAgIHRoZSBzcGVjaWZpZWQgcGF0aC4gIFRoZSBwYXRoIG11c3QgYmUgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgcmFpc2UgSU9FcnJvcgogCiAKIGNsYXNzIEluc3BlY3RMb2FkZXIoTG9hZGVyKToKQEAgLTEzMSwyNiArMTY0LDQ3IEBACiAKICAgICAiIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUKLSAgICAgICAgbW9kdWxlIGlzIGEgcGFja2FnZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBib29sLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUKKyAgICAgICAgbW9kdWxlIGlzIGEgcGFja2FnZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBib29sLgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCiAgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgY29kZSBvYmplY3QKLSAgICAgICAgZm9yIHRoZSBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgdHlwZXMuQ29kZVR5cGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgIiIiTWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIGNvZGUgb2JqZWN0IGZvciB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSB0eXBlcy5Db2RlVHlwZSBpZiBwb3NzaWJsZSwgZWxzZQorICAgICAgICByZXR1cm5zIE5vbmUgaWYgYSBjb2RlIG9iamVjdCBkb2VzIG5vdCBtYWtlIHNlbnNlCisgICAgICAgIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZQorICAgICAgICBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UpCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZQotICAgICAgICBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgc3RyLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBzdHIuCiAKLV9yZWdpc3RlcihJbnNwZWN0TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgIGRlZiBzb3VyY2VfdG9fY29kZShzZWxmLCBkYXRhLCBwYXRoPSc8c3RyaW5nPicpOgorICAgICAgICAiIiJDb21waWxlICdkYXRhJyBpbnRvIGEgY29kZSBvYmplY3QuCisKKyAgICAgICAgVGhlICdkYXRhJyBhcmd1bWVudCBjYW4gYmUgYW55dGhpbmcgdGhhdCBjb21waWxlKCkgY2FuIGhhbmRsZS4gVGhlJ3BhdGgnCisgICAgICAgIGFyZ3VtZW50IHNob3VsZCBiZSB3aGVyZSB0aGUgZGF0YSB3YXMgcmV0cmlldmVkICh3aGVuIGFwcGxpY2FibGUpLiIiIgorICAgICAgICByZXR1cm4gY29tcGlsZShkYXRhLCBwYXRoLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQorCisgICAgZXhlY19tb2R1bGUgPSBfYm9vdHN0cmFwLl9Mb2FkZXJCYXNpY3MuZXhlY19tb2R1bGUKKyAgICBsb2FkX21vZHVsZSA9IF9ib290c3RyYXAuX0xvYWRlckJhc2ljcy5sb2FkX21vZHVsZQorCitfcmVnaXN0ZXIoSW5zcGVjdExvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyKQogCiAKIGNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKQEAgLTE2NSw4ICsyMTksMjkgQEAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCBzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IF9fZmlsZV9fIGlzIHRvIGJlCi0gICAgICAgIHNldCB0by4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZXQgdG8uCisKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIk1ldGhvZCB0byByZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGZvciBmdWxsbmFtZS4KKworICAgICAgICBTaG91bGQgcmV0dXJuIE5vbmUgaWYgbm90IGFwcGxpY2FibGUgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4KKyAgICAgICAgUmFpc2UgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UsIHBhdGgpCisKK19yZWdpc3RlcihFeGVjdXRpb25Mb2FkZXIsIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQogCiAKIGNsYXNzIEZpbGVMb2FkZXIoX2Jvb3RzdHJhcC5GaWxlTG9hZGVyLCBSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyKToKQEAgLTE5OCw3ICsyNzMsNyBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIChpbnQpIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgcGF0aCAoc3RyKS4iIiIKICAgICAgICAgaWYgc2VsZi5wYXRoX3N0YXRzLl9fZnVuY19fIGlzIFNvdXJjZUxvYWRlci5wYXRoX3N0YXRzOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgogICAgICAgICByZXR1cm4gaW50KHNlbGYucGF0aF9zdGF0cyhwYXRoKVsnbXRpbWUnXSkKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgpAQCAtMjA5LDcgKzI4NCw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5wYXRoX210aW1lLl9fZnVuY19fIGlzIFNvdXJjZUxvYWRlci5wYXRoX210aW1lOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgogICAgICAgICByZXR1cm4geydtdGltZSc6IHNlbGYucGF0aF9tdGltZShwYXRoKX0KIAogICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKQEAgLTIyMCwxODUgKzI5NSw2IEBACiAgICAgICAgIEFueSBuZWVkZWQgaW50ZXJtZWRpYXJ5IGRpcmVjdG9yaWVzIGFyZSB0byBiZSBjcmVhdGVkLiBJZiBmb3Igc29tZQogICAgICAgICByZWFzb24gdGhlIGZpbGUgY2Fubm90IGJlIHdyaXR0ZW4gYmVjYXVzZSBvZiBwZXJtaXNzaW9ucywgZmFpbAogICAgICAgICBzaWxlbnRseS4KLQogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiBfcmVnaXN0ZXIoU291cmNlTG9hZGVyLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKLQotY2xhc3MgUHlMb2FkZXIoU291cmNlTG9hZGVyKToKLQotICAgICIiIkltcGxlbWVudCB0aGUgZGVwcmVjYXRlZCBQeUxvYWRlciBBQkMgaW4gdGVybXMgb2YgU291cmNlTG9hZGVyLgotCi0gICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkISBJdCBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4KLSAgICBJZiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMSBpcyBub3QgbmVlZGVkIHRoZW4gaW1wbGVtZW50IHRoZQotICAgIFNvdXJjZUxvYWRlciBBQkMgaW5zdGVhZCBvZiB0aGlzIGNsYXNzLiBJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMKLSAgICBuZWVkZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20gdG8gaGF2ZSBhIHNpbmdsZSBjbGFzcyB0aGF0IGlzCi0gICAgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkczo6Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBTb3VyY2VMb2FkZXIKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBQeUxvYWRlciBhcyBTb3VyY2VMb2FkZXIKLQotCi0gICAgICAgIGNsYXNzIEN1c3RvbUxvYWRlcihTb3VyY2VMb2FkZXIpOgotICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCi0KLSAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgJycnSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4nJycKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLSAgICAiIiIKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuICBBY2NlcHRzIGEgc3RyIG1vZHVsZSBuYW1lIGFuZCByZXR1cm5zIHRoZSBwYXRoIHRvCi0gICAgICAgIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkltcGxlbWVudCBnZXRfZmlsZW5hbWUgaW4gdGVybXMgb2Ygc291cmNlX3BhdGguCi0KLSAgICAgICAgQXMgZ2V0X2ZpbGVuYW1lIHNob3VsZCBvbmx5IHJldHVybiBhIHNvdXJjZSBmaWxlIHBhdGggdGhlcmUgaXMgbm8KLSAgICAgICAgY2hhbmNlIG9mIHRoZSBwYXRoIG5vdCBleGlzdGluZyBidXQgbG9hZGluZyBzdGlsbCBiZWluZyBwb3NzaWJsZSwgc28KLSAgICAgICAgSW1wb3J0RXJyb3Igc2hvdWxkIHByb3BhZ2F0ZSBpbnN0ZWFkIG9mIGJlaW5nIHR1cm5lZCBpbnRvIHJldHVybmluZwotICAgICAgICBOb25lLgotCi0gICAgICAgICIiIgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQ7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIFNvdXJjZUxvYWRlciBpbnN0ZWFkLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSB0aGUgaW1wb3J0bGliIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGJlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICBwYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobmFtZT1mdWxsbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0KLQotY2xhc3MgUHlQeWNMb2FkZXIoUHlMb2FkZXIpOgotCi0gICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyB0byBhc3Npc3QgaW4gbG9hZGluZyBzb3VyY2UgYW5kIGJ5dGVjb2RlIGJ5Ci0gICAgcmVxdWlyaW5nIG9ubHkgYmFjay1lbmQgc3RvcmFnZSBtZXRob2RzIHRvIGJlIGltcGxlbWVudGVkLgotCi0gICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkISBSZW1vdmFsIGlzIHNsYXRlZCBmb3IgUHl0aG9uIDMuNC4gSW1wbGVtZW50Ci0gICAgdGhlIFNvdXJjZUxvYWRlciBBQkMgaW5zdGVhZC4gSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIG5lZWRlZCwgc2VlCi0gICAgUHlMb2FkZXIuCi0KLSAgICBUaGUgbWV0aG9kcyBnZXRfY29kZSwgZ2V0X3NvdXJjZSwgYW5kIGxvYWRfbW9kdWxlIGFyZSBpbXBsZW1lbnRlZCBmb3IgdGhlCi0gICAgdXNlci4KLQotICAgICIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgc291cmNlIG9yIGJ5dGVjb2RlIGZpbGUgcGF0aC4iIiIKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotICAgICAgICBwYXRoID0gc2VsZi5ieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBwYXRoIGF2YWlsYWJsZSBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7MCFyfSIuZm9ybWF0KGZ1bGxuYW1lKSwgbmFtZT1mdWxsbmFtZSkKLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkdldCBhIGNvZGUgb2JqZWN0IGZyb20gc291cmNlIG9yIGJ5dGVjb2RlLiIiIgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHNsYXRlZCBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmFsIGluIFB5dGhvbiAzLjQ7IHVzZSBTb3VyY2VMb2FkZXIgaW5zdGVhZC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQsIHNlZSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXRlc3QgZG9jdW1lbnRhdGlvbiBmb3IgUHlMb2FkZXIuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgc291cmNlX3RpbWVzdGFtcCA9IHNlbGYuc291cmNlX210aW1lKGZ1bGxuYW1lKQotICAgICAgICAjIFRyeSB0byB1c2UgYnl0ZWNvZGUgaWYgaXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi5ieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgICAgICAgICAgaWYgbGVuKG1hZ2ljKSA8IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQotICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfdGltZXN0YW1wKSA8IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgdGltZXN0YW1wIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHB5Y190aW1lc3RhbXAgPSBfYm9vdHN0cmFwLl9yX2xvbmcocmF3X3RpbWVzdGFtcCkKLSAgICAgICAgICAgICAgICByYXdfc291cmNlX3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgICAgICAgICAgaWYgbGVuKHJhd19zb3VyY2Vfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoImJhZCBmaWxlIHNpemUgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCi0gICAgICAgICAgICAgICAgIyBTb3VyY2Ugc2l6ZSBpcyB1bnVzZWQgYXMgdGhlIEFCQyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvCi0gICAgICAgICAgICAgICAgIyBnZXQgdGhlIHNpemUgb2YgdGhlIHNvdXJjZSBhaGVhZCBvZiByZWFkaW5nIGl0LgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlID0gZGF0YVsxMjpdCi0gICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgbWFnaWMgbnVtYmVyIGlzIHZhbGlkLgotICAgICAgICAgICAgICAgIGlmIGltcC5nZXRfbWFnaWMoKSAhPSBtYWdpYzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFkIG1hZ2ljIG51bWJlciBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBieXRlY29kZSBpcyBub3Qgc3RhbGUgKG9ubHkgbWF0dGVycyB3aGVuCi0gICAgICAgICAgICAgICAgIyB0aGVyZSBpcyBzb3VyY2UgdG8gZmFsbCBiYWNrIG9uLgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHB5Y190aW1lc3RhbXAgPCBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImJ5dGVjb2RlIGlzIHN0YWxlIiwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICAjIElmIHNvdXJjZSBpcyBhdmFpbGFibGUgZ2l2ZSBpdCBhIHNob3QuCi0gICAgICAgICAgICAgICAgaWYgc291cmNlX3RpbWVzdGFtcCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgQnl0ZWNvZGUgc2VlbXMgZmluZSwgc28gdHJ5IHRvIHVzZSBpdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gbWFyc2hhbC5sb2FkcyhieXRlY29kZSkKLSAgICAgICAgZWxpZiBzb3VyY2VfdGltZXN0YW1wIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigibm8gc291cmNlIG9yIGJ5dGVjb2RlIGF2YWlsYWJsZSB0byBjcmVhdGUgY29kZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IGZvciB7MCFyfSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgICMgVXNlIHRoZSBzb3VyY2UuCi0gICAgICAgIHNvdXJjZV9wYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgc291cmNlX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiYSBzb3VyY2UgcGF0aCBtdXN0IGV4aXN0IHRvIGxvYWQgezB9Ii5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCBuYW1lPWZ1bGxuYW1lKQotICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9kYXRhKHNvdXJjZV9wYXRoKQotICAgICAgICBjb2RlX29iamVjdCA9IGNvbXBpbGUoc291cmNlLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKLSAgICAgICAgIyBHZW5lcmF0ZSBieXRlY29kZSBhbmQgd3JpdGUgaXQgb3V0LgotICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF9ib290c3RyYXAuX3dfbG9uZyhzb3VyY2VfdGltZXN0YW1wKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF9ib290c3RyYXAuX3dfbG9uZyhsZW4oc291cmNlKSAmIDB4RkZGRkZGRkYpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLndyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhKQotICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCByZXR1cm5zIGFuIGludAotICAgICAgICBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHNvdXJjZSBvZiB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGJ5dGVjb2RlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIHJldHVybnMgdGhlIHN0ciBwYXRobmFtZQotICAgICAgICB0byB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgZnVsbG5hbWUsIGJ5dGVjb2RlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgYnl0ZXMgb2JqZWN0Ci0gICAgICAgIHJlcHJlc2VudGluZyB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuICBSZXR1cm5zIGEgYm9vbGVhbgotICAgICAgICByZXByZXNlbnRpbmcgd2hldGhlciB0aGUgYnl0ZWNvZGUgd2FzIHdyaXR0ZW4gb3Igbm90LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weSBiL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CmluZGV4IGZmODI2ZTQuLjJlMWIyZDcgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CkBAIC01LDYgKzUsNyBAQAogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgKFNPVVJDRV9TVUZGSVhFUywgREVCVUdfQllURUNPREVfU1VGRklYRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywKICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRFTlNJT05fU1VGRklYRVMpCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBNb2R1bGVTcGVjCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBCdWlsdGluSW1wb3J0ZXIKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IEZyb3plbkltcG9ydGVyCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBXaW5kb3dzUmVnaXN0cnlGaW5kZXIKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQppbmRleCAxMzE2NDM3Li4wNGIxOTUxIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3V0aWwucHkKKysrIGIvTGliL2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDEwICsxLDE4IEBACiAiIiJVdGlsaXR5IGNvZGUgZm9yIGNvbnN0cnVjdGluZyBpbXBvcnRlcnMsIGV0Yy4iIiIKIAotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgbW9kdWxlX2Zvcl9sb2FkZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IHNldF9sb2FkZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IHNldF9wYWNrYWdlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBNQUdJQ19OVU1CRVIKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBkZWNvZGVfc291cmNlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc3BlY19mcm9tX2xvYWRlcgorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24KIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IF9yZXNvbHZlX25hbWUKIAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKIAogZGVmIHJlc29sdmVfbmFtZShuYW1lLCBwYWNrYWdlKToKICAgICAiIiJSZXNvbHZlIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUgdG8gYW4gYWJzb2x1dGUgb25lLiIiIgpAQCAtMTksMyArMjcsOTQgQEAKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGxldmVsICs9IDEKICAgICByZXR1cm4gX3Jlc29sdmVfbmFtZShuYW1lW2xldmVsOl0sIHBhY2thZ2UsIGxldmVsKQorCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIF9tb2R1bGVfdG9fbG9hZChuYW1lKToKKyAgICBpc19yZWxvYWQgPSBuYW1lIGluIHN5cy5tb2R1bGVzCisKKyAgICBtb2R1bGUgPSBzeXMubW9kdWxlcy5nZXQobmFtZSkKKyAgICBpZiBub3QgaXNfcmVsb2FkOgorICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgY2FsbGVkIGFzIHRoZSAnaW8nIG1vZHVsZQorICAgICAgICAjIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgYW4KKyAgICAgICAgIyBpbmZpbml0ZSBsb29wLgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykobmFtZSkKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCisgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcyB3cm9uZykKKyAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCisgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBtb2R1bGUKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IEZhbHNlCisKKworIyBYWFggZGVwcmVjYXRlCitkZWYgc2V0X3BhY2thZ2UoZnhuKToKKyAgICAiIiJTZXQgX19wYWNrYWdlX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4iIiIKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgc2V0X3BhY2thZ2Vfd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBtb2R1bGUgPSBmeG4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXworICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICByZXR1cm4gc2V0X3BhY2thZ2Vfd3JhcHBlcgorCisKKyMgWFhYIGRlcHJlY2F0ZQorZGVmIHNldF9sb2FkZXIoZnhuKToKKyAgICAiIiJTZXQgX19sb2FkZXJfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnhuKQorICAgIGRlZiBzZXRfbG9hZGVyX3dyYXBwZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgbW9kdWxlID0gZnhuKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgcmV0dXJuIHNldF9sb2FkZXJfd3JhcHBlcgorCisKK2RlZiBtb2R1bGVfZm9yX2xvYWRlcihmeG4pOgorICAgICIiIkRlY29yYXRvciB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIgbW9kdWxlIGZvciBsb2FkZXJzLgorCisgICAgVGhlIGRlY29yYXRlZCBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIG1vZHVsZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgbW9kdWxlCisgICAgbmFtZS4gVGhlIG1vZHVsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBmcm9tIHN5cy5tb2R1bGVzIGlmCisgICAgaXQgYWxyZWFkeSBleGlzdHMgb3IgaXMgYSBuZXcgbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGlzIG5ldywgdGhlbiBfX25hbWVfXworICAgIGlzIHNldCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIG1ldGhvZCwgX19sb2FkZXJfXyBpcyBzZXQgdG8gc2VsZiwgYW5kCisgICAgX19wYWNrYWdlX18gaXMgc2V0IGFjY29yZGluZ2x5IChpZiBzZWxmLmlzX3BhY2thZ2UoKSBpcyBkZWZpbmVkKSB3aWxsIGJlIHNldAorICAgIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gdGhlIGRlY29yYXRlZCBmdW5jdGlvbiAoaWYgc2VsZi5pc19wYWNrYWdlKCkgZG9lcworICAgIG5vdCB3b3JrIGZvciB0aGUgbW9kdWxlIGl0IHdpbGwgYmUgc2V0IHBvc3QtbG9hZCkuCisKKyAgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCB0aGUgZGVjb3JhdG9yIGNyZWF0ZWQgdGhlIG1vZHVsZSBpdCBpcworICAgIHN1YnNlcXVlbnRseSByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMuCisKKyAgICBUaGUgZGVjb3JhdG9yIGFzc3VtZXMgdGhhdCB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIHRha2VzIHRoZSBtb2R1bGUgbmFtZSBhcworICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuCisKKyAgICAiIiIKKyAgICB3YXJuaW5ncy53YXJuKCdUaGUgaW1wb3J0IHN5c3RlbSBub3cgdGFrZXMgY2FyZSBvZiB0aGlzIGF1dG9tYXRpY2FsbHkuJywKKyAgICAgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcihzZWxmLCBmdWxsbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBfbW9kdWxlX3RvX2xvYWQoZnVsbG5hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyB3YXMgbm90IHNldCBhYm92ZSwgX19pbXBvcnRfXygpIHdpbGwgZG8gaXQgbGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKZGlmZiAtLWdpdCBhL0xpYi9pbnNwZWN0LnB5IGIvTGliL2luc3BlY3QucHkKaW5kZXggOTMzN2JkNS4uZGM5NGU0NCAxMDA2NDQKLS0tIGEvTGliL2luc3BlY3QucHkKKysrIGIvTGliL2luc3BlY3QucHkKQEAgLTMxLDcgKzMxLDcgQEAKIF9fYXV0aG9yX18gPSAoJ0thLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+JywKICAgICAgICAgICAgICAgJ1l1cnkgU2VsaXZhbm92IDx5c2VsaXZhbm92QHNwcnltaXguY29tPicpCiAKLWltcG9ydCBpbXAKK2ltcG9ydCBhc3QKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbGluZWNhY2hlCkBAIC0yNjgsMjEgKzI2OCw0MCBAQAogICAgIGVsc2U6CiAgICAgICAgIG1ybyA9ICgpCiAgICAgcmVzdWx0cyA9IFtdCi0gICAgZm9yIGtleSBpbiBkaXIob2JqZWN0KToKLSAgICAgICAgIyBGaXJzdCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSB2aWEgX19kaWN0X18uIFNvbWUgZGVzY3JpcHRvcnMgZG9uJ3QKLSAgICAgICAgIyBsaWtlIGNhbGxpbmcgdGhlaXIgX19nZXRfXyAoc2VlIGJ1ZyAjMTc4NSkuCi0gICAgICAgIGZvciBiYXNlIGluIG1ybzoKLSAgICAgICAgICAgIGlmIGtleSBpbiBiYXNlLl9fZGljdF9fOgotICAgICAgICAgICAgICAgIHZhbHVlID0gYmFzZS5fX2RpY3RfX1trZXldCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob2JqZWN0LCBrZXkpCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgcHJvY2Vzc2VkID0gc2V0KCkKKyAgICBuYW1lcyA9IGRpcihvYmplY3QpCisgICAgIyA6ZGQgYW55IER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgdG8gdGhlIGxpc3Qgb2YgbmFtZXMgaWYgb2JqZWN0IGlzIGEgY2xhc3M7CisgICAgIyB0aGlzIG1heSByZXN1bHQgaW4gZHVwbGljYXRlIGVudHJpZXMgaWYsIGZvciBleGFtcGxlLCBhIHZpcnR1YWwKKyAgICAjIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZXhpc3RzCisgICAgdHJ5OgorICAgICAgICBmb3IgYmFzZSBpbiBvYmplY3QuX19iYXNlc19fOgorICAgICAgICAgICAgZm9yIGssIHYgaW4gYmFzZS5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGspCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZm9yIGtleSBpbiBuYW1lczoKKyAgICAgICAgIyBGaXJzdCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSB2aWEgZ2V0YXR0ci4gIFNvbWUgZGVzY3JpcHRvcnMgZG9uJ3QKKyAgICAgICAgIyBsaWtlIGNhbGxpbmcgdGhlaXIgX19nZXRfXyAoc2VlIGJ1ZyAjMTc4NSksIHNvIGZhbGwgYmFjayB0bworICAgICAgICAjIGxvb2tpbmcgaW4gdGhlIF9fZGljdF9fLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob2JqZWN0LCBrZXkpCisgICAgICAgICAgICAjIGhhbmRsZSB0aGUgZHVwbGljYXRlIGtleQorICAgICAgICAgICAgaWYga2V5IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgICAgICAgICAgaWYga2V5IGluIGJhc2UuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYmFzZS5fX2RpY3RfX1trZXldCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgY291bGQgYmUgYSAoY3VycmVudGx5KSBtaXNzaW5nIHNsb3QgbWVtYmVyLCBvciBhIGJ1Z2d5CisgICAgICAgICAgICAgICAgIyBfX2Rpcl9fOyBkaXNjYXJkIGFuZCBtb3ZlIG9uCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IHByZWRpY2F0ZSBvciBwcmVkaWNhdGUodmFsdWUpOgogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGtleSwgdmFsdWUpKQotICAgIHJlc3VsdHMuc29ydCgpCisgICAgICAgIHByb2Nlc3NlZC5hZGQoa2V5KQorICAgIHJlc3VsdHMuc29ydChrZXk9bGFtYmRhIHBhaXI6IHBhaXJbMF0pCiAgICAgcmV0dXJuIHJlc3VsdHMKIAogQXR0cmlidXRlID0gbmFtZWR0dXBsZSgnQXR0cmlidXRlJywgJ25hbWUga2luZCBkZWZpbmluZ19jbGFzcyBvYmplY3QnKQpAQCAtMjk5LDYwICszMTgsMTA2IEBACiAgICAgICAgICAgICAgICAnY2xhc3MgbWV0aG9kJyAgICBjcmVhdGVkIHZpYSBjbGFzc21ldGhvZCgpCiAgICAgICAgICAgICAgICAnc3RhdGljIG1ldGhvZCcgICBjcmVhdGVkIHZpYSBzdGF0aWNtZXRob2QoKQogICAgICAgICAgICAgICAgJ3Byb3BlcnR5JyAgICAgICAgY3JlYXRlZCB2aWEgcHJvcGVydHkoKQotICAgICAgICAgICAgICAgJ21ldGhvZCcgICAgICAgICAgYW55IG90aGVyIGZsYXZvciBvZiBtZXRob2QKKyAgICAgICAgICAgICAgICdtZXRob2QnICAgICAgICAgIGFueSBvdGhlciBmbGF2b3Igb2YgbWV0aG9kIG9yIGRlc2NyaXB0b3IKICAgICAgICAgICAgICAgICdkYXRhJyAgICAgICAgICAgIG5vdCBhIG1ldGhvZAogCiAgICAgICAgIDIuIFRoZSBjbGFzcyB3aGljaCBkZWZpbmVkIHRoaXMgYXR0cmlidXRlIChhIGNsYXNzKS4KIAotICAgICAgICAzLiBUaGUgb2JqZWN0IGFzIG9idGFpbmVkIGRpcmVjdGx5IGZyb20gdGhlIGRlZmluaW5nIGNsYXNzJ3MKLSAgICAgICAgICAgX19kaWN0X18sIG5vdCB2aWEgZ2V0YXR0ci4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yCi0gICAgICAgICAgIGRhdGEgYXR0cmlidXRlczogIEMuZGF0YSBpcyBqdXN0IGEgZGF0YSBvYmplY3QsIGJ1dAotICAgICAgICAgICBDLl9fZGljdF9fWydkYXRhJ10gbWF5IGJlIGEgZGF0YSBkZXNjcmlwdG9yIHdpdGggYWRkaXRpb25hbAotICAgICAgICAgICBpbmZvLCBsaWtlIGEgX19kb2NfXyBzdHJpbmcuCisgICAgICAgIDMuIFRoZSBvYmplY3QgYXMgb2J0YWluZWQgYnkgY2FsbGluZyBnZXRhdHRyOyBpZiB0aGlzIGZhaWxzLCBvciBpZiB0aGUKKyAgICAgICAgICAgcmVzdWx0aW5nIG9iamVjdCBkb2VzIG5vdCBsaXZlIGFueXdoZXJlIGluIHRoZSBjbGFzcycgbXJvIChpbmNsdWRpbmcKKyAgICAgICAgICAgbWV0YWNsYXNzZXMpIHRoZW4gdGhlIG9iamVjdCBpcyBsb29rZWQgdXAgaW4gdGhlIGRlZmluaW5nIGNsYXNzJ3MKKyAgICAgICAgICAgZGljdCAoZm91bmQgYnkgd2Fsa2luZyB0aGUgbXJvKS4KKworICAgIElmIG9uZSBvZiB0aGUgaXRlbXMgaW4gZGlyKGNscykgaXMgc3RvcmVkIGluIHRoZSBtZXRhY2xhc3MgaXQgd2lsbCBub3cKKyAgICBiZSBkaXNjb3ZlcmVkIGFuZCBub3QgaGF2ZSBOb25lIGJlIGxpc3RlZCBhcyB0aGUgY2xhc3MgaW4gd2hpY2ggaXQgd2FzCisgICAgZGVmaW5lZC4gIEFueSBpdGVtcyB3aG9zZSBob21lIGNsYXNzIGNhbm5vdCBiZSBkaXNjb3ZlcmVkIGFyZSBza2lwcGVkLgogICAgICIiIgogCiAgICAgbXJvID0gZ2V0bXJvKGNscykKKyAgICBtZXRhbXJvID0gZ2V0bXJvKHR5cGUoY2xzKSkgIyBmb3IgYXR0cmlidXRlcyBzdG9yZWQgaW4gdGhlIG1ldGFjbGFzcworICAgIG1ldGFtcm8gPSB0dXBsZShbY2xzIGZvciBjbHMgaW4gbWV0YW1ybyBpZiBjbHMgbm90IGluICh0eXBlLCBvYmplY3QpXSkKKyAgICBjbGFzc19iYXNlcyA9IChjbHMsKSArIG1ybworICAgIGFsbF9iYXNlcyA9IGNsYXNzX2Jhc2VzICsgbWV0YW1ybwogICAgIG5hbWVzID0gZGlyKGNscykKKyAgICAjIDpkZCBhbnkgRHluYW1pY0NsYXNzQXR0cmlidXRlcyB0byB0aGUgbGlzdCBvZiBuYW1lczsKKyAgICAjIHRoaXMgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZW50cmllcyBpZiwgZm9yIGV4YW1wbGUsIGEgdmlydHVhbAorICAgICMgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBleGlzdHMuCisgICAgZm9yIGJhc2UgaW4gbXJvOgorICAgICAgICBmb3IgaywgdiBpbiBiYXNlLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGspCiAgICAgcmVzdWx0ID0gW10KKyAgICBwcm9jZXNzZWQgPSBzZXQoKQorCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgICMgR2V0IHRoZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lLCBhbmQgd2hlcmUgaXQgd2FzIGRlZmluZWQuCisgICAgICAgICMgTm9ybWFsIG9iamVjdHMgd2lsbCBiZSBsb29rZWQgdXAgd2l0aCBib3RoIGdldGF0dHIgYW5kIGRpcmVjdGx5IGluCisgICAgICAgICMgaXRzIGNsYXNzJyBkaWN0IChpbiBjYXNlIGdldGF0dHIgZmFpbHMgW2J1ZyAjMTc4NV0sIGFuZCBhbHNvIHRvIGxvb2sKKyAgICAgICAgIyBmb3IgYSBkb2NzdHJpbmcpLgorICAgICAgICAjIEZvciBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIG9uIHRoZSBzZWNvbmQgcGFzcyB3ZSBvbmx5IGxvb2sgaW4gdGhlCisgICAgICAgICMgY2xhc3MncyBkaWN0LgorICAgICAgICAjCiAgICAgICAgICMgR2V0dGluZyBhbiBvYmogZnJvbSB0aGUgX19kaWN0X18gc29tZXRpbWVzIHJldmVhbHMgbW9yZSB0aGFuCiAgICAgICAgICMgdXNpbmcgZ2V0YXR0ci4gIFN0YXRpYyBhbmQgY2xhc3MgbWV0aG9kcyBhcmUgZHJhbWF0aWMgZXhhbXBsZXMuCi0gICAgICAgICMgRnVydGhlcm1vcmUsIHNvbWUgb2JqZWN0cyBtYXkgcmFpc2UgYW4gRXhjZXB0aW9uIHdoZW4gZmV0Y2hlZCB3aXRoCi0gICAgICAgICMgZ2V0YXR0cigpLiBUaGlzIGlzIHRoZSBjYXNlIHdpdGggc29tZSBkZXNjcmlwdG9ycyAoYnVnICMxNzg1KS4KLSAgICAgICAgIyBUaHVzLCB3ZSBvbmx5IHVzZSBnZXRhdHRyKCkgYXMgYSBsYXN0IHJlc29ydC4KICAgICAgICAgaG9tZWNscyA9IE5vbmUKLSAgICAgICAgZm9yIGJhc2UgaW4gKGNscywpICsgbXJvOgotICAgICAgICAgICAgaWYgbmFtZSBpbiBiYXNlLl9fZGljdF9fOgotICAgICAgICAgICAgICAgIG9iaiA9IGJhc2UuX19kaWN0X19bbmFtZV0KLSAgICAgICAgICAgICAgICBob21lY2xzID0gYmFzZQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvYmogPSBnZXRhdHRyKGNscywgbmFtZSkKLSAgICAgICAgICAgIGhvbWVjbHMgPSBnZXRhdHRyKG9iaiwgIl9fb2JqY2xhc3NfXyIsIGhvbWVjbHMpCi0KLSAgICAgICAgIyBDbGFzc2lmeSB0aGUgb2JqZWN0LgotICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgc3RhdGljbWV0aG9kKToKLSAgICAgICAgICAgIGtpbmQgPSAic3RhdGljIG1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY2xhc3NtZXRob2QpOgotICAgICAgICAgICAga2luZCA9ICJjbGFzcyBtZXRob2QiCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHByb3BlcnR5KToKLSAgICAgICAgICAgIGtpbmQgPSAicHJvcGVydHkiCi0gICAgICAgIGVsaWYgaXNtZXRob2RkZXNjcmlwdG9yKG9iaik6Ci0gICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2RhdGFkZXNjcmlwdG9yKG9iaik6Ci0gICAgICAgICAgICBraW5kID0gImRhdGEiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvYmpfdmlhX2dldGF0dHIgPSBnZXRhdHRyKGNscywgbmFtZSkKLSAgICAgICAgICAgIGlmIChpc2Z1bmN0aW9uKG9ial92aWFfZ2V0YXR0cikgb3IKLSAgICAgICAgICAgICAgICBpc21ldGhvZGRlc2NyaXB0b3Iob2JqX3ZpYV9nZXRhdHRyKSk6Ci0gICAgICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCisgICAgICAgIGdldF9vYmogPSBOb25lCisgICAgICAgIGRpY3Rfb2JqID0gTm9uZQorICAgICAgICBpZiBuYW1lIG5vdCBpbiBwcm9jZXNzZWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnX19kaWN0X18nOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIl9fZGljdF9fIGlzIHNwZWNpYWwsIGRvbid0IHdhbnQgdGhlIHByb3h5IikKKyAgICAgICAgICAgICAgICBnZXRfb2JqID0gZ2V0YXR0cihjbHMsIG5hbWUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKLSAgICAgICAgICAgIG9iaiA9IG9ial92aWFfZ2V0YXR0cgotCisgICAgICAgICAgICAgICAgaG9tZWNscyA9IGdldGF0dHIoZ2V0X29iaiwgIl9fb2JqY2xhc3NfXyIsIGhvbWVjbHMpCisgICAgICAgICAgICAgICAgaWYgaG9tZWNscyBub3QgaW4gY2xhc3NfYmFzZXM6CisgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIHJlc3VsdGluZyBvYmplY3QgZG9lcyBub3QgbGl2ZSBzb21ld2hlcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICMgbXJvLCBkcm9wIGl0IGFuZCBzZWFyY2ggdGhlIG1ybyBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBsb29rIGluIHRoZSBjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBzcmNoX2NscyBpbiBjbGFzc19iYXNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hfb2JqID0gZ2V0YXR0cihzcmNoX2NscywgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNyY2hfb2JqID09IGdldF9vYmo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBzcmNoX2NscworICAgICAgICAgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhlIG1ldGFjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBzcmNoX2NscyBpbiBtZXRhbXJvOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hfb2JqID0gc3JjaF9jbHMuX19nZXRhdHRyX18oY2xzLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcmNoX29iaiA9PSBnZXRfb2JqOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gc3JjaF9jbHMKKyAgICAgICAgICAgICAgICAgICAgaWYgbGFzdF9jbHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gbGFzdF9jbHMKKyAgICAgICAgZm9yIGJhc2UgaW4gYWxsX2Jhc2VzOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBiYXNlLl9fZGljdF9fOgorICAgICAgICAgICAgICAgIGRpY3Rfb2JqID0gYmFzZS5fX2RpY3RfX1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIGhvbWVjbHMgbm90IGluIG1ldGFtcm86CisgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBiYXNlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgaG9tZWNscyBpcyBOb25lOgorICAgICAgICAgICAgIyB1bmFibGUgdG8gbG9jYXRlIHRoZSBhdHRyaWJ1dGUgYW55d2hlcmUsIG1vc3QgbGlrZWx5IGR1ZSB0bworICAgICAgICAgICAgIyBidWdneSBjdXN0b20gX19kaXJfXzsgZGlzY2FyZCBhbmQgbW92ZSBvbgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgb2JqID0gZ2V0X29iaiBvciBkaWN0X29iagorICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3Qgb3IgaXRzIGRlc2NyaXB0b3IuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIHN0YXRpY21ldGhvZCk6CisgICAgICAgICAgICBraW5kID0gInN0YXRpYyBtZXRob2QiCisgICAgICAgICAgICBvYmogPSBkaWN0X29iagorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIGNsYXNzbWV0aG9kKToKKyAgICAgICAgICAgIGtpbmQgPSAiY2xhc3MgbWV0aG9kIgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBwcm9wZXJ0eSk6CisgICAgICAgICAgICBraW5kID0gInByb3BlcnR5IgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2Z1bmN0aW9uKG9iaikgb3IgaXNtZXRob2RkZXNjcmlwdG9yKG9iaik6CisgICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKICAgICAgICAgcmVzdWx0LmFwcGVuZChBdHRyaWJ1dGUobmFtZSwga2luZCwgaG9tZWNscywgb2JqKSkKLQorICAgICAgICBwcm9jZXNzZWQuYWRkKG5hbWUpCiAgICAgcmV0dXJuIHJlc3VsdAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNsYXNzIGhlbHBlcnMKQEAgLTM2MSw2ICs0MjYsNDAgQEAKICAgICAiUmV0dXJuIHR1cGxlIG9mIGJhc2UgY2xhc3NlcyAoaW5jbHVkaW5nIGNscykgaW4gbWV0aG9kIHJlc29sdXRpb24gb3JkZXIuIgogICAgIHJldHVybiBjbHMuX19tcm9fXwogCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZ1bmN0aW9uIGhlbHBlcnMKKworZGVmIHVud3JhcChmdW5jLCAqLCBzdG9wPU5vbmUpOgorICAgICIiIkdldCB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgKmZ1bmMqLgorCisgICBGb2xsb3dzIHRoZSBjaGFpbiBvZiA6YXR0cjpgX193cmFwcGVkX19gIGF0dHJpYnV0ZXMgcmV0dXJuaW5nIHRoZSBsYXN0CisgICBvYmplY3QgaW4gdGhlIGNoYWluLgorCisgICAqc3RvcCogaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgYWNjZXB0aW5nIGFuIG9iamVjdCBpbiB0aGUgd3JhcHBlciBjaGFpbgorICAgYXMgaXRzIHNvbGUgYXJndW1lbnQgdGhhdCBhbGxvd3MgdGhlIHVud3JhcHBpbmcgdG8gYmUgdGVybWluYXRlZCBlYXJseSBpZgorICAgdGhlIGNhbGxiYWNrIHJldHVybnMgYSB0cnVlIHZhbHVlLiBJZiB0aGUgY2FsbGJhY2sgbmV2ZXIgcmV0dXJucyBhIHRydWUKKyAgIHZhbHVlLCB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluIGlzIHJldHVybmVkIGFzIHVzdWFsLiBGb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBzaWduYXR1cmVgIHVzZXMgdGhpcyB0byBzdG9wIHVud3JhcHBpbmcgaWYgYW55IG9iamVjdCBpbiB0aGUKKyAgIGNoYWluIGhhcyBhIGBgX19zaWduYXR1cmVfX2BgIGF0dHJpYnV0ZSBkZWZpbmVkLgorCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgYSBjeWNsZSBpcyBlbmNvdW50ZXJlZC4KKworICAgICIiIgorICAgIGlmIHN0b3AgaXMgTm9uZToKKyAgICAgICAgZGVmIF9pc193cmFwcGVyKGYpOgorICAgICAgICAgICAgcmV0dXJuIGhhc2F0dHIoZiwgJ19fd3JhcHBlZF9fJykKKyAgICBlbHNlOgorICAgICAgICBkZWYgX2lzX3dyYXBwZXIoZik6CisgICAgICAgICAgICByZXR1cm4gaGFzYXR0cihmLCAnX193cmFwcGVkX18nKSBhbmQgbm90IHN0b3AoZikKKyAgICBmID0gZnVuYyAgIyByZW1lbWJlciB0aGUgb3JpZ2luYWwgZnVuYyBmb3IgZXJyb3IgcmVwb3J0aW5nCisgICAgbWVtbyA9IHtpZChmKX0gIyBNZW1vaXNlIGJ5IGlkIHRvIHRvbGVyYXRlIG5vbi1oYXNoYWJsZSBvYmplY3RzCisgICAgd2hpbGUgX2lzX3dyYXBwZXIoZnVuYyk6CisgICAgICAgIGZ1bmMgPSBmdW5jLl9fd3JhcHBlZF9fCisgICAgICAgIGlkX2Z1bmMgPSBpZChmdW5jKQorICAgICAgICBpZiBpZF9mdW5jIGluIG1lbW86CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd3cmFwcGVyIGxvb3Agd2hlbiB1bndyYXBwaW5nIHshcn0nLmZvcm1hdChmKSkKKyAgICAgICAgbWVtby5hZGQoaWRfZnVuYykKKyAgICByZXR1cm4gZnVuYworCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNvdXJjZSBjb2RlIGV4dHJhY3Rpb24KIGRlZiBpbmRlbnRzaXplKGxpbmUpOgogICAgICIiIlJldHVybiB0aGUgaW5kZW50IHNpemUsIGluIHNwYWNlcywgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBvZiB0ZXh0LiIiIgpAQCAtNDQwLDYgKzUzOSw5IEBACiAgICAgIiIiR2V0IHRoZSBtb2R1bGUgbmFtZSwgc3VmZml4LCBtb2RlLCBhbmQgbW9kdWxlIHR5cGUgZm9yIGEgZ2l2ZW4gZmlsZS4iIiIKICAgICB3YXJuaW5ncy53YXJuKCdpbnNwZWN0LmdldG1vZHVsZWluZm8oKSBpcyBkZXByZWNhdGVkJywgRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgMikKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgaW1wb3J0IGltcAogICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQogICAgIHN1ZmZpeGVzID0gWygtbGVuKHN1ZmZpeCksIHN1ZmZpeCwgbW9kZSwgbXR5cGUpCiAgICAgICAgICAgICAgICAgICAgIGZvciBzdWZmaXgsIG1vZGUsIG10eXBlIGluIGltcC5nZXRfc3VmZml4ZXMoKV0KQEAgLTQ3Niw3ICs1NzgsNyBAQAogICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCiAgICAgIyBvbmx5IHJldHVybiBhIG5vbi1leGlzdGVudCBmaWxlbmFtZSBpZiB0aGUgbW9kdWxlIGhhcyBhIFBFUCAzMDIgbG9hZGVyCi0gICAgaWYgaGFzYXR0cihnZXRtb2R1bGUob2JqZWN0LCBmaWxlbmFtZSksICdfX2xvYWRlcl9fJyk6CisgICAgaWYgZ2V0YXR0cihnZXRtb2R1bGUob2JqZWN0LCBmaWxlbmFtZSksICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgIHJldHVybiBmaWxlbmFtZQogICAgICMgb3IgaXQgaXMgaW4gdGhlIGxpbmVjYWNoZQogICAgIGlmIGZpbGVuYW1lIGluIGxpbmVjYWNoZS5jYWNoZToKQEAgLTU0NSwxMyArNjQ3LDEzIEBACiAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIGxpc3Qgb2YgYWxsIHRoZSBsaW5lcwotICAgIGluIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBudW1iZXIgaW5kZXhlcyBhIGxpbmUgaW4gdGhhdCBsaXN0LiAgQW4gSU9FcnJvcgorICAgIGluIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBudW1iZXIgaW5kZXhlcyBhIGxpbmUgaW4gdGhhdCBsaXN0LiAgQW4gT1NFcnJvcgogICAgIGlzIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKIAogICAgIGZpbGUgPSBnZXRmaWxlKG9iamVjdCkKICAgICBzb3VyY2VmaWxlID0gZ2V0c291cmNlZmlsZShvYmplY3QpCiAgICAgaWYgbm90IHNvdXJjZWZpbGUgYW5kIGZpbGVbOjFdICsgZmlsZVstMTpdICE9ICc8Pic6Ci0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvdXJjZSBjb2RlIG5vdCBhdmFpbGFibGUnKQorICAgICAgICByYWlzZSBPU0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKICAgICBmaWxlID0gc291cmNlZmlsZSBpZiBzb3VyY2VmaWxlIGVsc2UgZmlsZQogCiAgICAgbW9kdWxlID0gZ2V0bW9kdWxlKG9iamVjdCwgZmlsZSkKQEAgLTU2MCw3ICs2NjIsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKGZpbGUpCiAgICAgaWYgbm90IGxpbmVzOgotICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZ2V0IHNvdXJjZSBjb2RlJykKKyAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGdldCBzb3VyY2UgY29kZScpCiAKICAgICBpZiBpc21vZHVsZShvYmplY3QpOgogICAgICAgICByZXR1cm4gbGluZXMsIDAKQEAgLTU4Niw3ICs2ODgsNyBAQAogICAgICAgICAgICAgY2FuZGlkYXRlcy5zb3J0KCkKICAgICAgICAgICAgIHJldHVybiBsaW5lcywgY2FuZGlkYXRlc1swXVsxXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGZpbmQgY2xhc3MgZGVmaW5pdGlvbicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBjbGFzcyBkZWZpbml0aW9uJykKIAogICAgIGlmIGlzbWV0aG9kKG9iamVjdCk6CiAgICAgICAgIG9iamVjdCA9IG9iamVjdC5fX2Z1bmNfXwpAQCAtNTk4LDE0ICs3MDAsMTQgQEAKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LmZfY29kZQogICAgIGlmIGlzY29kZShvYmplY3QpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihvYmplY3QsICdjb19maXJzdGxpbmVubycpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGZpbmQgZnVuY3Rpb24gZGVmaW5pdGlvbicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBmdW5jdGlvbiBkZWZpbml0aW9uJykKICAgICAgICAgbG51bSA9IG9iamVjdC5jb19maXJzdGxpbmVubyAtIDEKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZShyJ14oXHMqZGVmXHMpfCguKig/PCFcdylsYW1iZGEoOnxccykpfF4oXHMqQCknKQogICAgICAgICB3aGlsZSBsbnVtID4gMDoKICAgICAgICAgICAgIGlmIHBhdC5tYXRjaChsaW5lc1tsbnVtXSk6IGJyZWFrCiAgICAgICAgICAgICBsbnVtID0gbG51bSAtIDEKICAgICAgICAgcmV0dXJuIGxpbmVzLCBsbnVtCi0gICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGZpbmQgY29kZSBvYmplY3QnKQorICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNvZGUgb2JqZWN0JykKIAogZGVmIGdldGNvbW1lbnRzKG9iamVjdCk6CiAgICAgIiIiR2V0IGxpbmVzIG9mIGNvbW1lbnRzIGltbWVkaWF0ZWx5IHByZWNlZGluZyBhbiBvYmplY3QncyBzb3VyY2UgY29kZS4KQEAgLTYxNCw3ICs3MTYsNyBAQAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKG9iamVjdCkKLSAgICBleGNlcHQgKElPRXJyb3IsIFR5cGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgaWYgaXNtb2R1bGUob2JqZWN0KToKQEAgLTcxMCw3ICs4MTIsNyBAQAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgbGlzdCBvZiB0aGUgbGluZXMKICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRpY2F0ZXMgd2hlcmUgaW4gdGhlCi0gICAgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhlIGZpcnN0IGxpbmUgb2YgY29kZSB3YXMgZm91bmQuICBBbiBJT0Vycm9yIGlzCisgICAgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhlIGZpcnN0IGxpbmUgb2YgY29kZSB3YXMgZm91bmQuICBBbiBPU0Vycm9yIGlzCiAgICAgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogICAgIGxpbmVzLCBsbnVtID0gZmluZHNvdXJjZShvYmplY3QpCiAKQEAgLTcyMiw3ICs4MjQsNyBAQAogCiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBzaW5nbGUgc3RyaW5nLiAgQW4KLSAgICBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKKyAgICBPU0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKICAgICBsaW5lcywgbG51bSA9IGdldHNvdXJjZWxpbmVzKG9iamVjdCkKICAgICByZXR1cm4gJycuam9pbihsaW5lcykKIApAQCAtMTEyMyw3ICsxMjI1LDcgQEAKICAgICAgICAgc3RhcnQgPSBsaW5lbm8gLSAxIC0gY29udGV4dC8vMgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2UoZnJhbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGxpbmVzID0gaW5kZXggPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdGFydCA9IG1heChzdGFydCwgMSkKQEAgLTEzNDUsNiArMTQ0Nyw5IEBACiAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShvYmouX19mdW5jX18pCiAgICAgICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVsxOl0pCiAKKyAgICAjIFdhcyB0aGlzIGZ1bmN0aW9uIHdyYXBwZWQgYnkgYSBkZWNvcmF0b3I/CisgICAgb2JqID0gdW53cmFwKG9iaiwgc3RvcD0obGFtYmRhIGY6IGhhc2F0dHIoZiwgIl9fc2lnbmF0dXJlX18iKSkpCisKICAgICB0cnk6CiAgICAgICAgIHNpZyA9IG9iai5fX3NpZ25hdHVyZV9fCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgpAQCAtMTM1MywxNyArMTQ1OCwxMyBAQAogICAgICAgICBpZiBzaWcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gc2lnCiAKLSAgICB0cnk6Ci0gICAgICAgICMgV2FzIHRoaXMgZnVuY3Rpb24gd3JhcHBlZCBieSBhIGRlY29yYXRvcj8KLSAgICAgICAgd3JhcHBlZCA9IG9iai5fX3dyYXBwZWRfXwotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzaWduYXR1cmUod3JhcHBlZCkKIAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5GdW5jdGlvblR5cGUpOgogICAgICAgICByZXR1cm4gU2lnbmF0dXJlLmZyb21fZnVuY3Rpb24ob2JqKQogCisgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUpOgorICAgICAgICByZXR1cm4gU2lnbmF0dXJlLmZyb21fYnVpbHRpbihvYmopCisKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgogICAgICAgICBzaWcgPSBzaWduYXR1cmUob2JqLmZ1bmMpCiAKQEAgLTE4NDUsNiArMTk0Niw2NCBAQAogICAgICAgICAgICAgICAgICAgIHJldHVybl9hbm5vdGF0aW9uPWFubm90YXRpb25zLmdldCgncmV0dXJuJywgX2VtcHR5KSwKICAgICAgICAgICAgICAgICAgICBfX3ZhbGlkYXRlX3BhcmFtZXRlcnNfXz1GYWxzZSkKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J1aWx0aW4oY2xzLCBmdW5jKToKKyAgICAgICAgcyA9IGdldGF0dHIoZnVuYywgIl9fdGV4dF9zaWduYXR1cmVfXyIsIE5vbmUpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBzLmVuZHN3aXRoKCIvKSIpOgorICAgICAgICAgICAga2luZCA9IFBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkKKyAgICAgICAgICAgIHMgPSBzWzotMl0gKyAnKScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisKKyAgICAgICAgcyA9ICJkZWYgZm9vIiArIHMgKyAiOiBwYXNzIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShzKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtb2R1bGUsIGFzdC5Nb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGFzdC5GdW5jdGlvbkRlZgorICAgICAgICBmID0gbW9kdWxlLmJvZHlbMF0KKworICAgICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZW1wdHkgPSBQYXJhbWV0ZXIuZW1wdHkKKworICAgICAgICBkZWYgcChuYW1lX25vZGUsIGRlZmF1bHRfbm9kZSwgZGVmYXVsdD1lbXB0eSk6CisgICAgICAgICAgICBuYW1lID0gbmFtZV9ub2RlLmFyZworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlZmF1bHRfbm9kZSwgYXN0Lk51bSk6CisgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGRlZmF1bHQubgorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRlZmF1bHRfbm9kZSwgYXN0Lk5hbWVDb25zdGFudCk6CisgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGRlZmF1bHRfbm9kZS52YWx1ZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoUGFyYW1ldGVyKG5hbWUsIGtpbmQsIGRlZmF1bHQ9ZGVmYXVsdCwgYW5ub3RhdGlvbj1lbXB0eSkpCisKKyAgICAgICAgIyBub24ta2V5d29yZC1vbmx5IHBhcmFtZXRlcnMKKyAgICAgICAgZm9yIG5hbWUsIGRlZmF1bHQgaW4gcmV2ZXJzZWQobGlzdChpdGVydG9vbHMuemlwX2xvbmdlc3QocmV2ZXJzZWQoZi5hcmdzLmFyZ3MpLCByZXZlcnNlZChmLmFyZ3MuZGVmYXVsdHMpLCBmaWxsdmFsdWU9Tm9uZSkpKToKKyAgICAgICAgICAgIHAobmFtZSwgZGVmYXVsdCkKKworICAgICAgICAjICphcmdzCisgICAgICAgIGlmIGYuYXJncy52YXJhcmc6CisgICAgICAgICAgICBraW5kID0gUGFyYW1ldGVyLlZBUl9QT1NJVElPTkFMCisgICAgICAgICAgICBwKGYuYXJncy52YXJhcmcsIGVtcHR5KQorCisgICAgICAgICMga2V5d29yZC1vbmx5IGFyZ3VtZW50cworICAgICAgICBraW5kID0gUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgICAgICBmb3IgbmFtZSwgZGVmYXVsdCBpbiB6aXAoZi5hcmdzLmt3b25seWFyZ3MsIGYuYXJncy5rd19kZWZhdWx0cyk6CisgICAgICAgICAgICBwKG5hbWUsIGRlZmF1bHQpCisKKyAgICAgICAgIyAqKmt3YXJncworICAgICAgICBpZiBmLmFyZ3Mua3dhcmc6CisgICAgICAgICAgICBraW5kID0gUGFyYW1ldGVyLlZBUl9LRVlXT1JECisgICAgICAgICAgICBwKGYuYXJncy5rd2FyZywgZW1wdHkpCisKKyAgICAgICAgcmV0dXJuIGNscyhwYXJhbWV0ZXJzLCByZXR1cm5fYW5ub3RhdGlvbj1jbHMuZW1wdHkpCisKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXJhbWV0ZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcGFyYW1ldGVycwpAQCAtMjA3MiwzICsyMjMxLDY0IEBACiAgICAgICAgICAgICByZW5kZXJlZCArPSAnIC0+IHt9Jy5mb3JtYXQoYW5ubykKIAogICAgICAgICByZXR1cm4gcmVuZGVyZWQKKworZGVmIF9tYWluKCk6CisgICAgIiIiIExvZ2ljIGZvciBpbnNwZWN0aW5nIGFuIG9iamVjdCBnaXZlbiBhdCBjb21tYW5kIGxpbmUgIiIiCisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgaW1wb3J0IGltcG9ydGxpYgorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICdvYmplY3QnLAorICAgICAgICAgaGVscD0iVGhlIG9iamVjdCB0byBiZSBhbmFseXNlZC4gIgorICAgICAgICAgICAgICAiSXQgc3VwcG9ydHMgdGhlICdtb2R1bGU6cXVhbG5hbWUnIHN5bnRheCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy1kJywgJy0tZGV0YWlscycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgIGhlbHA9J0Rpc3BsYXkgaW5mbyBhYm91dCB0aGUgbW9kdWxlIHJhdGhlciB0aGFuIGl0cyBzb3VyY2UgY29kZScpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgdGFyZ2V0ID0gYXJncy5vYmplY3QKKyAgICBtb2RfbmFtZSwgaGFzX2F0dHJzLCBhdHRycyA9IHRhcmdldC5wYXJ0aXRpb24oIjoiKQorICAgIHRyeToKKyAgICAgICAgb2JqID0gbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobW9kX25hbWUpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIG1zZyA9ICJGYWlsZWQgdG8gaW1wb3J0IHt9ICh7fToge30pIi5mb3JtYXQobW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShleGMpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YykKKyAgICAgICAgcHJpbnQobXNnLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGV4aXQoMikKKworICAgIGlmIGhhc19hdHRyczoKKyAgICAgICAgcGFydHMgPSBhdHRycy5zcGxpdCgiLiIpCisgICAgICAgIG9iaiA9IG1vZHVsZQorICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCBwYXJ0KQorCisgICAgaWYgbW9kdWxlLl9fbmFtZV9fIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKKyAgICAgICAgcHJpbnQoIkNhbid0IGdldCBpbmZvIGZvciBidWlsdGluIG1vZHVsZXMuIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBleGl0KDEpCisKKyAgICBpZiBhcmdzLmRldGFpbHM6CisgICAgICAgIHByaW50KCdUYXJnZXQ6IHt9Jy5mb3JtYXQodGFyZ2V0KSkKKyAgICAgICAgcHJpbnQoJ09yaWdpbjoge30nLmZvcm1hdChnZXRzb3VyY2VmaWxlKG1vZHVsZSkpKQorICAgICAgICBwcmludCgnQ2FjaGVkOiB7fScuZm9ybWF0KG1vZHVsZS5fX2NhY2hlZF9fKSkKKyAgICAgICAgaWYgb2JqIGlzIG1vZHVsZToKKyAgICAgICAgICAgIHByaW50KCdMb2FkZXI6IHt9Jy5mb3JtYXQocmVwcihtb2R1bGUuX19sb2FkZXJfXykpKQorICAgICAgICAgICAgaWYgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgICAgIHByaW50KCdTdWJtb2R1bGUgc2VhcmNoIHBhdGg6IHt9Jy5mb3JtYXQobW9kdWxlLl9fcGF0aF9fKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfXywgbGluZW5vID0gZmluZHNvdXJjZShvYmopCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJ0xpbmU6IHt9Jy5mb3JtYXQobGluZW5vKSkKKworICAgICAgICBwcmludCgnXG4nKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KGdldHNvdXJjZShvYmopKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgX21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2lvLnB5IGIvTGliL2lvLnB5CmluZGV4IGJkYTRkZWYuLjM5ODc4YjggMTAwNjQ0Ci0tLSBhL0xpYi9pby5weQorKysgYi9MaWIvaW8ucHkKQEAgLTQsNyArNCw3IEBACiBBdCB0aGUgdG9wIG9mIHRoZSBJL08gaGllcmFyY2h5IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIElPQmFzZS4gSXQKIGRlZmluZXMgdGhlIGJhc2ljIGludGVyZmFjZSB0byBhIHN0cmVhbS4gTm90ZSwgaG93ZXZlciwgdGhhdCB0aGVyZSBpcyBubwogc2VwYXJhdGlvbiBiZXR3ZWVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gc3RyZWFtczsgaW1wbGVtZW50YXRpb25zIGFyZQotYWxsb3dlZCB0byByYWlzZSBhbiBJT0Vycm9yIGlmIHRoZXkgZG8gbm90IHN1cHBvcnQgYSBnaXZlbiBvcGVyYXRpb24uCithbGxvd2VkIHRvIHJhaXNlIGFuIE9TRXJyb3IgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCBhIGdpdmVuIG9wZXJhdGlvbi4KIAogRXh0ZW5kaW5nIElPQmFzZSBpcyBSYXdJT0Jhc2Ugd2hpY2ggZGVhbHMgc2ltcGx5IHdpdGggdGhlIHJlYWRpbmcgYW5kCiB3cml0aW5nIG9mIHJhdyBieXRlcyB0byBhIHN0cmVhbS4gRmlsZUlPIHN1YmNsYXNzZXMgUmF3SU9CYXNlIHRvIHByb3ZpZGUKZGlmZiAtLWdpdCBhL0xpYi9pcGFkZHJlc3MucHkgYi9MaWIvaXBhZGRyZXNzLnB5CmluZGV4IGVhYmZkNmYuLjk3ZmYxM2QgMTAwNjQ0Ci0tLSBhL0xpYi9pcGFkZHJlc3MucHkKKysrIGIvTGliL2lwYWRkcmVzcy5weQpAQCAtOTc1LDEzICs5NzUsMjUgQEAKICAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLgogCiAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyA0MTkzLgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCiAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiAoc2VsZi5uZXR3b3JrX2FkZHJlc3MuaXNfcHJpdmF0ZSBhbmQKICAgICAgICAgICAgICAgICBzZWxmLmJyb2FkY2FzdF9hZGRyZXNzLmlzX3ByaXZhdGUpCiAKICAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5IG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuaXNfcHJpdmF0ZQorCisgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX3Vuc3BlY2lmaWVkKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHVuc3BlY2lmaWVkLgogCkBAIC0xMjIxLDE5ICsxMjMzLDMwIEBACiAgICAgICAgIHJldHVybiBzZWxmIGluIHJlc2VydmVkX25ldHdvcmsKIAogICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKICAgICBkZWYgaXNfcHJpdmF0ZShzZWxmKToKICAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLgogCiAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyAxOTE4LgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHByaXZhdGVfMTAgPSBJUHY0TmV0d29yaygnMTAuMC4wLjAvOCcpCi0gICAgICAgIHByaXZhdGVfMTcyID0gSVB2NE5ldHdvcmsoJzE3Mi4xNi4wLjAvMTInKQotICAgICAgICBwcml2YXRlXzE5MiA9IElQdjROZXR3b3JrKCcxOTIuMTY4LjAuMC8xNicpCi0gICAgICAgIHJldHVybiAoc2VsZiBpbiBwcml2YXRlXzEwIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBwcml2YXRlXzE3MiBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gcHJpdmF0ZV8xOTIpCisgICAgICAgIHJldHVybiAoc2VsZiBpbiBJUHY0TmV0d29yaygnMC4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxMC4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxMjcuMC4wLjAvOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTY5LjI1NC4wLjAvMTYnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE3Mi4xNi4wLjAvMTInKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjAuMC8yOScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMC4xNzAvMzEnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjIuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjE2OC4wLjAvMTYnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5OC4xOC4wLjAvMTUnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5OC41MS4xMDAuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjAzLjAuMTEzLjAvMjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzI0MC4wLjAuMC80Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyNTUuMjU1LjI1NS4yNTUvMzInKSkKKwogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX211bHRpY2FzdChzZWxmKToKQEAgLTE0NjYsNiArMTQ4OSwyMSBAQAogICAgICAgICBpZiBzZWxmLl9wcmVmaXhsZW4gPT0gKHNlbGYuX21heF9wcmVmaXhsZW4gLSAxKToKICAgICAgICAgICAgIHNlbGYuaG9zdHMgPSBzZWxmLl9faXRlcl9fCiAKKyAgICBAcHJvcGVydHkKKyAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCisgICAgZGVmIGlzX2dsb2JhbChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBub3QgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIChub3QgKHNlbGYubmV0d29ya19hZGRyZXNzIGluIElQdjROZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MgaW4gSVB2NE5ldHdvcmsoJzEwMC42NC4wLjAvMTAnKSkgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuaXNfcHJpdmF0ZSkKKworCiAKIGNsYXNzIF9CYXNlVjY6CiAKQEAgLTE4MjIsMTUgKzE4NjAsMzYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2l0ZWxvY2FsX25ldHdvcmsKIAogICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKICAgICBkZWYgaXNfcHJpdmF0ZShzZWxmKToKICAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLgogCiAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyA0MTkzLgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHByaXZhdGVfbmV0d29yayA9IElQdjZOZXR3b3JrKCdmYzAwOjovNycpCi0gICAgICAgIHJldHVybiBzZWxmIGluIHByaXZhdGVfbmV0d29yaworICAgICAgICByZXR1cm4gKHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzo6MS8xMjgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzo6LzEyOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnOjpmZmZmOjA6MC85NicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMTAwOjovNjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6Oi8yMycpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMToyOjovNDgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6ZGI4OjovMzInKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6MTA6Oi8yOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnZmMwMDo6LzcnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJ2ZlODA6Oi8xMCcpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2dsb2JhbChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgdHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBub3QgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzX3ByaXZhdGUKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc191bnNwZWNpZmllZChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL19faW5pdF9fLnB5IGIvTGliL2pzb24vX19pbml0X18ucHkKaW5kZXggNDhhNGY4Zi4uYTQ1OWY3NyAxMDA2NDQKLS0tIGEvTGliL2pzb24vX19pbml0X18ucHkKKysrIGIvTGliL2pzb24vX19pbml0X18ucHkKQEAgLTM5LDggKzM5LDcgQEAKIFByZXR0eSBwcmludGluZzo6CiAKICAgICA+Pj4gaW1wb3J0IGpzb24KLSAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwKLSAgICAuLi4gICAgICAgICAgICAgICAgICBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkpCisgICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KSkKICAgICB7CiAgICAgICAgICI0IjogNSwKICAgICAgICAgIjYiOiA3CkBAIC0xNDYsMTMgKzE0NSwxMiBAQAogICAgIElmIGBgaW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZAogICAgIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50CiAgICAgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgcmVwcmVzZW50YXRpb24uICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZQotICAgIG91dHB1dCBtaWdodCBpbmNsdWRlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiBgYGluZGVudGBgIGlzIHNwZWNpZmllZC4KLSAgICBZb3UgY2FuIHVzZSBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgorICAgIHJlcHJlc2VudGF0aW9uLgogCi0gICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlCi0gICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCi0gICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgIElmIHNwZWNpZmllZCwgYGBzZXBhcmF0b3JzYGAgc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCisgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgIGBgZGVmYXVsdChvYmopYGAgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJpYWxpemFibGUgdmVyc2lvbgogICAgIG9mIG9iaiBvciByYWlzZSBUeXBlRXJyb3IuIFRoZSBkZWZhdWx0IHNpbXBseSByYWlzZXMgVHlwZUVycm9yLgpAQCAtMjA5LDEzICsyMDcsMTIgQEAKICAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKICAgICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudAogICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUKLSAgICBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gYGBpbmRlbnRgYCBpcyBzcGVjaWZpZWQuCi0gICAgWW91IGNhbiB1c2UgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KKyAgICByZXByZXNlbnRhdGlvbi4KIAotICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQotICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgotICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICBJZiBzcGVjaWZpZWQsIGBgc2VwYXJhdG9yc2BgIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICBgYGRlZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24KICAgICBvZiBvYmogb3IgcmFpc2UgVHlwZUVycm9yLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KQEAgLTMxMyw2ICszMTAsMTEgQEAKICAgICBUaGUgYGBlbmNvZGluZ2BgIGFyZ3VtZW50IGlzIGlnbm9yZWQgYW5kIGRlcHJlY2F0ZWQuCiAKICAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3RoZSBKU09OIG9iamVjdCBtdXN0IGJlIHN0ciwgbm90IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgaWYgcy5zdGFydHN3aXRoKHUnXHVmZWZmJyk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgVVRGLTggQk9NIChkZWNvZGUgdXNpbmcgdXRmLTgtc2lnKSIpCiAgICAgaWYgKGNscyBpcyBOb25lIGFuZCBvYmplY3RfaG9vayBpcyBOb25lIGFuZAogICAgICAgICAgICAgcGFyc2VfaW50IGlzIE5vbmUgYW5kIHBhcnNlX2Zsb2F0IGlzIE5vbmUgYW5kCiAgICAgICAgICAgICBwYXJzZV9jb25zdGFudCBpcyBOb25lIGFuZCBvYmplY3RfcGFpcnNfaG9vayBpcyBOb25lIGFuZCBub3Qga3cpOgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vZGVjb2Rlci5weSBiL0xpYi9qc29uL2RlY29kZXIucHkKaW5kZXggODBkMzQyMC4uNTllNWY0MSAxMDA2NDQKLS0tIGEvTGliL2pzb24vZGVjb2Rlci5weQorKysgYi9MaWIvanNvbi9kZWNvZGVyLnB5CkBAIC0xLDkgKzEsNiBAQAogIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkRlY29kZXIKICIiIgotaW1wb3J0IGJpbmFzY2lpCiBpbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCBzdHJ1Y3QKIAogZnJvbSBqc29uIGltcG9ydCBzY2FubmVyCiB0cnk6CkBAIC0xNSwxNCArMTIsOSBAQAogCiBGTEFHUyA9IHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwKIAotZGVmIF9mbG9hdGNvbnN0YW50cygpOgotICAgIF9CWVRFUyA9IGJpbmFzY2lpLnVuaGV4bGlmeShiJzdGRjgwMDAwMDAwMDAwMDA3RkYwMDAwMDAwMDAwMDAwJykKLSAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBfQllURVMgPSBfQllURVNbOjhdWzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQotICAgIG5hbiwgaW5mID0gc3RydWN0LnVucGFjaygnZGQnLCBfQllURVMpCi0gICAgcmV0dXJuIG5hbiwgaW5mLCAtaW5mCi0KLU5hTiwgUG9zSW5mLCBOZWdJbmYgPSBfZmxvYXRjb25zdGFudHMoKQorTmFOID0gZmxvYXQoJ25hbicpCitQb3NJbmYgPSBmbG9hdCgnaW5mJykKK05lZ0luZiA9IGZsb2F0KCctaW5mJykKIAogCiBkZWYgbGluZWNvbChkb2MsIHBvcyk6CkBAIC0xOTUsOCArMTg3LDggQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgcGFpcnNfYXBwZW5kKChrZXksIHZhbHVlKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KQEAgLTIzOSw4ICsyMzEsOCBAQAogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBzY2FuX29uY2UocywgZW5kKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICBfYXBwZW5kKHZhbHVlKQogICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCiAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKQEAgLTI1MCw3ICsyNDIsNyBAQAogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnXSc6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBlbGlmIG5leHRjaGFyICE9ICcsJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKICAgICAgICAgICAgICAgICBlbmQgKz0gMQpAQCAtMzY1LDYgKzM1Nyw2IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvYmosIGVuZCA9IHNlbGYuc2Nhbl9vbmNlKHMsIGlkeCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIikKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICByZXR1cm4gb2JqLCBlbmQKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2VuY29kZXIucHkgYi9MaWIvanNvbi9lbmNvZGVyLnB5CmluZGV4IDFkOGIyMGMuLjA1MTM4MzggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2VuY29kZXIucHkKKysrIGIvTGliL2pzb24vZW5jb2Rlci5weQpAQCAtMTI1LDE0ICsxMjUsMTIgQEAKICAgICAgICAgSWYgaW5kZW50IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheQogICAgICAgICBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQKICAgICAgICAgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50IGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4KLSAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQKLSAgICAgICAgaXRlbSBzZXBhcmF0b3IgaXMgJywgJywgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZwotICAgICAgICB3aGl0ZXNwYWNlIHdoZW4gaW5kZW50IGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICAgIHNlcGFyYXRvcnM9KCcsJywgJzogJykgdG8gYXZvaWQgdGhpcy4KKyAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgogCi0gICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91bGQgYmUgYSAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCi0gICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhbiAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCisgICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgICAgICAoJywnLCAnOiAnKSBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgICAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgICAgICBJZiBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzCiAgICAgICAgIHRoYXQgY2FuJ3Qgb3RoZXJ3aXNlIGJlIHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBlbmNvZGFibGUKQEAgLTE0OCw2ICsxNDYsOCBAQAogICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAogICAgICAgICBpZiBzZXBhcmF0b3JzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5rZXlfc2VwYXJhdG9yID0gc2VwYXJhdG9ycworICAgICAgICBlbGlmIGluZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IgPSAnLCcKICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKIApAQCAtMTc1LDYgKzE3NSw3IEBACiAgICAgZGVmIGVuY29kZShzZWxmLCBvKToKICAgICAgICAgIiIiUmV0dXJuIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gZGF0YSBzdHJ1Y3R1cmUuCiAKKyAgICAgICAgPj4+IGZyb20ganNvbi5lbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgogICAgICAgICA+Pj4gSlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28iOiBbImJhciIsICJiYXoiXX0pCiAgICAgICAgICd7ImZvbyI6IFsiYmFyIiwgImJheiJdfScKIApAQCAtMjk4LDkgKzI5OSwxMyBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgU3ViY2xhc3NlcyBvZiBpbnQvZmxvYXQgbWF5IG92ZXJyaWRlIF9fc3RyX18sIGJ1dCB3ZSBzdGlsbAorICAgICAgICAgICAgICAgICMgd2FudCB0byBlbmNvZGUgdGhlbSBhcyBpbnRlZ2Vycy9mbG9hdHMgaW4gSlNPTi4gT25lIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAjIHdpdGhpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBpcyBJbnRFbnVtLgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cihpbnQodmFsdWUpKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2Zsb2F0c3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIGludAorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cihmbG9hdCh2YWx1ZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgpAQCAtMzA5LDggKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTM0Nyw3ICszNTEsOCBAQAogICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCiAgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIGtleSA9IF9mbG9hdHN0cihrZXkpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICBrZXkgPSBfZmxvYXRzdHIoZmxvYXQoa2V5KSkKICAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCiAgICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKQEAgLTM1NSw3ICszNjAsOCBAQAogICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGludCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIGtleSA9IHN0cihpbnQoa2V5KSkKICAgICAgICAgICAgIGVsaWYgX3NraXBrZXlzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzc1LDkgKzM4MSwxMSBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAgeWllbGQgc3RyKGludCh2YWx1ZSkpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIoZmxvYXQodmFsdWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfbGlzdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQpAQCAtMzg1LDggKzM5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTQwNCwxNSArNDExLDE1IEBACiAgICAgICAgIGVsaWYgbyBpcyBGYWxzZToKICAgICAgICAgICAgIHlpZWxkICdmYWxzZScKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGludCk6Ci0gICAgICAgICAgICB5aWVsZCBzdHIobykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICB5aWVsZCBzdHIoaW50KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZmxvYXQpOgotICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKG8pCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKGZsb2F0KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2xpc3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfZGljdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2RpY3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBtYXJrZXJpZCA9IGlkKG8pCkBAIC00MjAsOCArNDI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKICAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IG8KICAgICAgICAgICAgIG8gPSBfZGVmYXVsdChvKQotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KICAgICByZXR1cm4gX2l0ZXJlbmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3NjYW5uZXIucHkgYi9MaWIvanNvbi9zY2FubmVyLnB5CmluZGV4IDIzZWVmNjEuLjg2NDI2Y2QgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3NjYW5uZXIucHkKKysrIGIvTGliL2pzb24vc2Nhbm5lci5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0Y2hhciA9IHN0cmluZ1tpZHhdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbihpZHgpCiAKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJyInOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmluZyhzdHJpbmcsIGlkeCArIDEsIHN0cmljdCkKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnLScgYW5kIHN0cmluZ1tpZHg6aWR4ICsgOV0gPT0gJy1JbmZpbml0eSc6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJy1JbmZpbml0eScpLCBpZHggKyA5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKGlkeCkKIAogICAgIGRlZiBzY2FuX29uY2Uoc3RyaW5nLCBpZHgpOgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvanNvbi90b29sLnB5IGIvTGliL2pzb24vdG9vbC5weQppbmRleCBlY2Y5YzQ3Li43ZGI0NTI4IDEwMDY0NAotLS0gYS9MaWIvanNvbi90b29sLnB5CisrKyBiL0xpYi9qc29uL3Rvb2wucHkKQEAgLTMxLDggKzMxLDcgQEAKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoZSkKICAgICB3aXRoIG91dGZpbGU6Ci0gICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLAotICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCisgICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkKICAgICAgICAgb3V0ZmlsZS53cml0ZSgnXG4nKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9rZXl3b3JkLnB5IGIvTGliL2tleXdvcmQucHkKaW5kZXggZGFkMzljYy4uNmUxZTg4MiAxMDA3NTUKLS0tIGEvTGliL2tleXdvcmQucHkKKysrIGIvTGliL2tleXdvcmQucHkKQEAgLTYwLDYgKzYwLDEyIEBACiAgICAgaWYgbGVuKGFyZ3MpID4gMTogb3B0ZmlsZSA9IGFyZ3NbMV0KICAgICBlbHNlOiBvcHRmaWxlID0gIkxpYi9rZXl3b3JkLnB5IgogCisgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0LCB0YWtpbmcgY2FyZSB0byBwcmVzZXJ2ZSBpdHMKKyAgICAjIG5ld2xpbmUgY29udmVudGlvbi4KKyAgICB3aXRoIG9wZW4ob3B0ZmlsZSwgbmV3bGluZT0nJykgYXMgZnA6CisgICAgICAgIGZvcm1hdCA9IGZwLnJlYWRsaW5lcygpCisgICAgbmwgPSBmb3JtYXRbMF1bbGVuKGZvcm1hdFswXS5zdHJpcCgpKTpdIGlmIGZvcm1hdCBlbHNlICdcbicKKwogICAgICMgc2NhbiB0aGUgc291cmNlIGZpbGUgZm9yIGtleXdvcmRzCiAgICAgd2l0aCBvcGVuKGlwdGZpbGUpIGFzIGZwOgogICAgICAgICBzdHJwcm9nID0gcmUuY29tcGlsZSgnIihbXiJdKykiJykKQEAgLTY4LDI2ICs3NCwyMSBAQAogICAgICAgICAgICAgaWYgJ3sxLCAiJyBpbiBsaW5lOgogICAgICAgICAgICAgICAgIG1hdGNoID0gc3RycHJvZy5zZWFyY2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgICAgICciICsgbWF0Y2guZ3JvdXAoMSkgKyAiJyxcbiIpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAnIiArIG1hdGNoLmdyb3VwKDEpICsgIicsIiArIG5sKQogICAgIGxpbmVzLnNvcnQoKQogCi0gICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0Ci0gICAgd2l0aCBvcGVuKG9wdGZpbGUpIGFzIGZwOgotICAgICAgICBmb3JtYXQgPSBmcC5yZWFkbGluZXMoKQotCi0gICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzCisgICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzIGludG8gdGhlIHNrZWxldG9uCiAgICAgdHJ5OgotICAgICAgICBzdGFydCA9IGZvcm1hdC5pbmRleCgiIy0tc3RhcnQga2V5d29yZHMtLVxuIikgKyAxCi0gICAgICAgIGVuZCA9IGZvcm1hdC5pbmRleCgiIy0tZW5kIGtleXdvcmRzLS1cbiIpCisgICAgICAgIHN0YXJ0ID0gZm9ybWF0LmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tIiArIG5sKSArIDEKKyAgICAgICAgZW5kID0gZm9ybWF0LmluZGV4KCIjLS1lbmQga2V5d29yZHMtLSIgKyBubCkKICAgICAgICAgZm9ybWF0W3N0YXJ0OmVuZF0gPSBsaW5lcwogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ0YXJnZXQgZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2Vyc1xuIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICMgd3JpdGUgdGhlIG91dHB1dCBmaWxlCi0gICAgZnAgPSBvcGVuKG9wdGZpbGUsICd3JykKLSAgICBmcC53cml0ZSgnJy5qb2luKGZvcm1hdCkpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggb3BlbihvcHRmaWxlLCAndycsIG5ld2xpbmU9JycpIGFzIGZwOgorICAgICAgICBmcC53cml0ZWxpbmVzKGZvcm1hdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2J0bV91dGlscy5weSBiL0xpYi9saWIydG8zL2J0bV91dGlscy5weQppbmRleCAyMjc2ZGM5Li4zMzk3NTBlIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKKysrIGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CkBAIC05Niw4ICs5Niw3IEBACiAgICAgZGVmIGxlYXZlcyhzZWxmKToKICAgICAgICAgIkdlbmVyYXRvciB0aGF0IHJldHVybnMgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSIKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLmxlYXZlcygpCiAgICAgICAgIGlmIG5vdCBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICAgeWllbGQgc2VsZgogCkBAIC0yNzcsNyArMjc2LDYgQEAKICAgICBzdWItaXRlcmFibGVzIiIiCiAgICAgZm9yIHggaW4gc2VxdWVuY2U6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3IgeSBpbiByZWNfdGVzdCh4LCB0ZXN0X2Z1bmMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcmVjX3Rlc3QoeCwgdGVzdF9mdW5jKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgeWllbGQgdGVzdF9mdW5jKHgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQppbmRleCA2MGQyMTlmLi42ZTI1OWM1IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKQEAgLTEyOSw2ICsxMjksMjkgQEAKICAgICBpbXAgPSBOb2RlKHN5bXMuaW1wb3J0X2Zyb20sIGNoaWxkcmVuKQogICAgIHJldHVybiBpbXAKIAorZGVmIEltcG9ydEFuZENhbGwobm9kZSwgcmVzdWx0cywgbmFtZXMpOgorICAgICIiIlJldHVybnMgYW4gaW1wb3J0IHN0YXRlbWVudCBhbmQgY2FsbHMgYSBtZXRob2QKKyAgICBvZiB0aGUgbW9kdWxlOgorCisgICAgaW1wb3J0IG1vZHVsZQorICAgIG1vZHVsZS5uYW1lKCkiIiIKKyAgICBvYmogPSByZXN1bHRzWyJvYmoiXS5jbG9uZSgpCisgICAgaWYgb2JqLnR5cGUgPT0gc3ltcy5hcmdsaXN0OgorICAgICAgICBuZXdhcmdsaXN0ID0gb2JqLmNsb25lKCkKKyAgICBlbHNlOgorICAgICAgICBuZXdhcmdsaXN0ID0gTm9kZShzeW1zLmFyZ2xpc3QsIFtvYmouY2xvbmUoKV0pCisgICAgYWZ0ZXIgPSByZXN1bHRzWyJhZnRlciJdCisgICAgaWYgYWZ0ZXI6CisgICAgICAgIGFmdGVyID0gW24uY2xvbmUoKSBmb3IgbiBpbiBhZnRlcl0KKyAgICBuZXcgPSBOb2RlKHN5bXMucG93ZXIsCisgICAgICAgICAgICAgICBBdHRyKE5hbWUobmFtZXNbMF0pLCBOYW1lKG5hbWVzWzFdKSkgKworICAgICAgICAgICAgICAgW05vZGUoc3ltcy50cmFpbGVyLAorICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdHNbImxwYXIiXS5jbG9uZSgpLAorICAgICAgICAgICAgICAgICAgICAgIG5ld2FyZ2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1sicnBhciJdLmNsb25lKCldKV0gKyBhZnRlcikKKyAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKKyAgICByZXR1cm4gbmV3CisKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBEZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgcmVwcmVzZW50cyBhIGdpdmVuIGxpdGVyYWwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hc3NlcnRzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Fzc2VydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjZWM4OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hc3NlcnRzLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyIiIkZpeGVyIHRoYXQgcmVwbGFjZXMgZGVwcmVjYXRlZCB1bml0dGVzdCBtZXRob2QgbmFtZXMuIiIiCisKKyMgQXV0aG9yOiBFemlvIE1lbG90dGkKKworZnJvbSAuLmZpeGVyX2Jhc2UgaW1wb3J0IEJhc2VGaXgKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lCisKK05BTUVTID0gZGljdCgKKyAgICBhc3NlcnRfPSJhc3NlcnRUcnVlIiwKKyAgICBhc3NlcnRFcXVhbHM9ImFzc2VydEVxdWFsIiwKKyAgICBhc3NlcnROb3RFcXVhbHM9ImFzc2VydE5vdEVxdWFsIiwKKyAgICBhc3NlcnRBbG1vc3RFcXVhbHM9ImFzc2VydEFsbW9zdEVxdWFsIiwKKyAgICBhc3NlcnROb3RBbG1vc3RFcXVhbHM9ImFzc2VydE5vdEFsbW9zdEVxdWFsIiwKKyAgICBhc3NlcnRSZWdleHBNYXRjaGVzPSJhc3NlcnRSZWdleCIsCisgICAgYXNzZXJ0UmFpc2VzUmVnZXhwPSJhc3NlcnRSYWlzZXNSZWdleCIsCisgICAgZmFpbFVubGVzc0VxdWFsPSJhc3NlcnRFcXVhbCIsCisgICAgZmFpbElmRXF1YWw9ImFzc2VydE5vdEVxdWFsIiwKKyAgICBmYWlsVW5sZXNzQWxtb3N0RXF1YWw9ImFzc2VydEFsbW9zdEVxdWFsIiwKKyAgICBmYWlsSWZBbG1vc3RFcXVhbD0iYXNzZXJ0Tm90QWxtb3N0RXF1YWwiLAorICAgIGZhaWxVbmxlc3M9ImFzc2VydFRydWUiLAorICAgIGZhaWxVbmxlc3NSYWlzZXM9ImFzc2VydFJhaXNlcyIsCisgICAgZmFpbElmPSJhc3NlcnRGYWxzZSIsCispCisKKworY2xhc3MgRml4QXNzZXJ0cyhCYXNlRml4KToKKworICAgIFBBVFRFUk4gPSAiIiIKKyAgICAgICAgICAgICAgcG93ZXI8IGFueSsgdHJhaWxlcjwgJy4nIG1ldGg9KCVzKT4gYW55KiA+CisgICAgICAgICAgICAgICIiIiAlICd8Jy5qb2luKG1hcChyZXByLCBOQU1FUykpCisKKyAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgorICAgICAgICBuYW1lID0gcmVzdWx0c1sibWV0aCJdWzBdCisgICAgICAgIG5hbWUucmVwbGFjZShOYW1lKE5BTUVTW3N0cihuYW1lKV0sIHByZWZpeD1uYW1lLnByZWZpeCkpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQppbmRleCA2YmUxMWNkLi5mYjI5NzNjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKQEAgLTYsOSArNiw4IEBACiBpbnRlcm4ocykgLT4gc3lzLmludGVybihzKSIiIgogCiAjIExvY2FsIGltcG9ydHMKLWZyb20gLi4gaW1wb3J0IHB5dHJlZQogZnJvbSAuLiBpbXBvcnQgZml4ZXJfYmFzZQotZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUsIEF0dHIsIHRvdWNoX2ltcG9ydAorZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IEltcG9ydEFuZENhbGwsIHRvdWNoX2ltcG9ydAogCiAKIGNsYXNzIEZpeEludGVybihmaXhlcl9iYXNlLkJhc2VGaXgpOgpAQCAtMjYsMjEgKzI1LDcgQEAKICAgICAiIiIKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6Ci0gICAgICAgIHN5bXMgPSBzZWxmLnN5bXMKLSAgICAgICAgb2JqID0gcmVzdWx0c1sib2JqIl0uY2xvbmUoKQotICAgICAgICBpZiBvYmoudHlwZSA9PSBzeW1zLmFyZ2xpc3Q6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gb2JqLmNsb25lKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ld2FyZ2xpc3QgPSBweXRyZWUuTm9kZShzeW1zLmFyZ2xpc3QsIFtvYmouY2xvbmUoKV0pCi0gICAgICAgIGFmdGVyID0gcmVzdWx0c1siYWZ0ZXIiXQotICAgICAgICBpZiBhZnRlcjoKLSAgICAgICAgICAgIGFmdGVyID0gW24uY2xvbmUoKSBmb3IgbiBpbiBhZnRlcl0KLSAgICAgICAgbmV3ID0gcHl0cmVlLk5vZGUoc3ltcy5wb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cihOYW1lKCJzeXMiKSwgTmFtZSgiaW50ZXJuIikpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgW3B5dHJlZS5Ob2RlKHN5bXMudHJhaWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRzWyJscGFyIl0uY2xvbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcmdsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbInJwYXIiXS5jbG9uZSgpXSldICsgYWZ0ZXIpCi0gICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAorICAgICAgICBuYW1lcyA9ICgnc3lzJywgJ2ludGVybicpCisgICAgICAgIG5ldyA9IEltcG9ydEFuZENhbGwobm9kZSwgcmVzdWx0cywgbmFtZXMpCiAgICAgICAgIHRvdWNoX2ltcG9ydChOb25lLCAnc3lzJywgbm9kZSkKICAgICAgICAgcmV0dXJuIG5ldwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlbG9hZC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1NTM1NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkKQEAgLTAsMCArMSwyOCBAQAorIiIiRml4ZXIgZm9yIHJlbG9hZCgpLgorCityZWxvYWQocykgLT4gaW1wLnJlbG9hZChzKSIiIgorCisjIExvY2FsIGltcG9ydHMKK2Zyb20gLi4gaW1wb3J0IGZpeGVyX2Jhc2UKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBJbXBvcnRBbmRDYWxsLCB0b3VjaF9pbXBvcnQKKworCitjbGFzcyBGaXhSZWxvYWQoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorICAgIG9yZGVyID0gInByZSIKKworICAgIFBBVFRFUk4gPSAiIiIKKyAgICBwb3dlcjwgJ3JlbG9hZCcKKyAgICAgICAgICAgdHJhaWxlcjwgbHBhcj0nKCcKKyAgICAgICAgICAgICAgICAgICAgKCBub3QoYXJnbGlzdCB8IGFyZ3VtZW50PGFueSAnPScgYW55Pikgb2JqPWFueQorICAgICAgICAgICAgICAgICAgICAgIHwgb2JqPWFyZ2xpc3Q8KG5vdCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIGFueSAnLCc+ICkKKyAgICAgICAgICAgICAgICAgICAgcnBhcj0nKScgPgorICAgICAgICAgICBhZnRlcj1hbnkqCisgICAgPgorICAgICIiIgorCisgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgbmFtZXMgPSAoJ2ltcCcsICdyZWxvYWQnKQorICAgICAgICBuZXcgPSBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKQorICAgICAgICB0b3VjaF9pbXBvcnQoTm9uZSwgJ2ltcCcsIG5vZGUpCisgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL21haW4ucHkgYi9MaWIvbGliMnRvMy9tYWluLnB5CmluZGV4IGY5Y2MxOGIuLjkzYmFlOTAgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL21haW4ucHkKKysrIGIvTGliL2xpYjJ0bzMvbWFpbi5weQpAQCAtOTAsMTEgKzkwLDExIEBACiAgICAgICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMoYmFja3VwKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShiYWNrdXApCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNhbid0IHJlbW92ZSBiYWNrdXAgJXMiLCBiYWNrdXApCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNhbid0IHJlbmFtZSAlcyB0byAlcyIsIGZpbGVuYW1lLCBiYWNrdXApCiAgICAgICAgICMgQWN0dWFsbHkgd3JpdGUgdGhlIG5ldyBmaWxlCiAgICAgICAgIHdyaXRlID0gc3VwZXIoU3Rkb3V0UmVmYWN0b3JpbmdUb29sLCBzZWxmKS53cml0ZV9maWxlCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQppbmRleCBiZjQ5NzYyLi5lZDBjYWM1IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgc2VsZi5zeW1ib2wybnVtYmVyID0ge30KQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IG9wZW4gJXM6ICVzIiAlIChmaWxlbmFtZSwgZXJyKSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAjIFRoZSBjb2RlIGJlbG93IGVzc2VudGlhbGx5IHVzZXMgZidzIGl0ZXJhdG9yLW5lc3MhCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKaW5kZXggNGM2MTFjNi4uM2NjYzY5ZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBncmFtbWFyIHRhYmxlcyB0byAlcyIsIGdwKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGcuZHVtcChncCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXcml0aW5nIGZhaWxlZDoiK3N0cihlKSkKICAgICBlbHNlOgogICAgICAgICBnID0gZ3JhbW1hci5HcmFtbWFyKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkgYi9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CmluZGV4IDE0YzVmNzAuLjdmMWM1NjQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKKysrIGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQpAQCAtODYsMTUgKzg2LDEzIEBACiAKICAgICBkZWYgZHVtcChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkR1bXAgdGhlIGdyYW1tYXIgdGFibGVzIHRvIGEgcGlja2xlIGZpbGUuIiIiCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAid2IiKQotICAgICAgICBwaWNrbGUuZHVtcChzZWxmLl9fZGljdF9fLCBmLCAyKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKIAogICAgIGRlZiBsb2FkKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiTG9hZCB0aGUgZ3JhbW1hciB0YWJsZXMgZnJvbSBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBkID0gcGlja2xlLmxvYWQoZikKICAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoZCkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcHl0cmVlLnB5IGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CmluZGV4IDE3Y2JmMGEuLmM0YTFiZTMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3B5dHJlZS5weQorKysgYi9MaWIvbGliMnRvMy9weXRyZWUucHkKQEAgLTE5NCw4ICsxOTQsNyBAQAogCiAgICAgZGVmIGxlYXZlcyhzZWxmKToKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLmxlYXZlcygpCiAKICAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6CkBAIC0yNzQsMTYgKzI3MywxNCBAQAogICAgIGRlZiBwb3N0X29yZGVyKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwb3N0LW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wb3N0X29yZGVyKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbm9kZQorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5wb3N0X29yZGVyKCkKICAgICAgICAgeWllbGQgc2VsZgogCiAgICAgZGVmIHByZV9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcHJlLW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBub2RlIGluIGNoaWxkLnByZV9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucHJlX29yZGVyKCkKIAogICAgIGRlZiBfcHJlZml4X2dldHRlcihzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weSBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CmluZGV4IDIwMWUxOTMuLjgxMDAzMTcgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CisrKyBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CkBAIC0zMjYsNyArMzI2LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAicmIiKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCBvcGVuICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgICAgICB0cnk6CkBAIC01MzQsMTIgKzUzNCwxMiBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9vcGVuX3dpdGhfZW5jb2RpbmcoZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCBjcmVhdGUgJXM6ICVzIiwgZmlsZW5hbWUsIGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLndyaXRlKF90b19zeXN0ZW1fbmV3bGluZXMobmV3X3RleHQpKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgd3JpdGUgJXM6ICVzIiwgZmlsZW5hbWUsIGVycikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CmluZGV4IGEwMmJiZmUuLjczMWM0MDMgMTAwNzU1Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICBmb3IgZGlyIGluIHN5cy5wYXRoOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgcHJpbnQoIlNjYW5uaW5nIiwgZGlyLCAiLi4uIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkKaW5kZXggMmYwOGY5My4uMDZiMDAzMyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkKQEAgLTI4Miw2ICsyODIsNjUgQEAKICAgICAgICAgYiA9ICIiImYoKmFyZ3MsICoqa3dkcykiIiIKICAgICAgICAgc2VsZi5jaGVjayhhLCBiKQogCitjbGFzcyBUZXN0X3JlbG9hZChGaXhlclRlc3RDYXNlKToKKyAgICBmaXhlciA9ICJyZWxvYWQiCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZChhKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZChhKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9jb21tZW50KHNlbGYpOgorICAgICAgICBiID0gIiIicmVsb2FkKCBhICkgIyBjb21tZW50IiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhICkgIyBjb21tZW50IiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICAjIFBFUCA4IGNvbW1lbnRzCisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSAgIyBjb21tZW50IiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhICkgICMgY29tbWVudCIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9zcGFjZShzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhICkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEpIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICIiInJlbG9hZChhICkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoYSApIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKKyAgICAgICAgcyA9ICIiInJlbG9hZChhPTEpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCBnKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKmgpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCAqaCwgKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKmgsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCpoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCiBjbGFzcyBUZXN0X2ludGVybihGaXhlclRlc3RDYXNlKToKICAgICBmaXhlciA9ICJpbnRlcm4iCiAKQEAgLTQ1NzYsMyArNDYzNSw1MyBAQAogICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKICAgICAgICAgcyA9ICIiImYoc3lzLmV4aXRmdW5jKSIiIgogICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisKK2NsYXNzIFRlc3RfYXNzZXJ0cyhGaXhlclRlc3RDYXNlKToKKworICAgIGZpeGVyID0gImFzc2VydHMiCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGVkX25hbWVzKHNlbGYpOgorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnRfKFRydWUpJywgJ3NlbGYuYXNzZXJ0VHJ1ZShUcnVlKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydEVxdWFscygyLCAyKScsICdzZWxmLmFzc2VydEVxdWFsKDIsIDIpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0Tm90RXF1YWxzKDIsIDMpJywgJ3NlbGYuYXNzZXJ0Tm90RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMoMiwgMyknLCAnc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFscygyLCA4KScsICdzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDIsIDgpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzc0VxdWFsKDIsIDIpJywgJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMiknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsSWZFcXVhbCgyLCAzKScsICdzZWxmLmFzc2VydE5vdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKDIsIDMpJywgJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsSWZBbG1vc3RFcXVhbCgyLCA4KScsICdzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDIsIDgpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzcyhUcnVlKScsICdzZWxmLmFzc2VydFRydWUoVHJ1ZSknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzUmFpc2VzKGZvbyknLCAnc2VsZi5hc3NlcnRSYWlzZXMoZm9vKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxJZihGYWxzZSknLCAnc2VsZi5hc3NlcnRGYWxzZShGYWxzZSknKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgYiwgYSBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3ZhcmlhbnRzKHNlbGYpOgorICAgICAgICBiID0gJ2VxID0gc2VsZi5hc3NlcnRFcXVhbHMnCisgICAgICAgIGEgPSAnZXEgPSBzZWxmLmFzc2VydEVxdWFsJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnc2VsZi5hc3NlcnRFcXVhbHMoMiwgMywgbXNnPSJmYWlsIiknCisgICAgICAgIGEgPSAnc2VsZi5hc3NlcnRFcXVhbCgyLCAzLCBtc2c9ImZhaWwiKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3NlbGYuYXNzZXJ0RXF1YWxzKDIsIDMsIG1zZz0iZmFpbCIpICMgZm9vJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMywgbXNnPSJmYWlsIikgIyBmb28nCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICdzZWxmLmFzc2VydEVxdWFscyAoMiwgMyknCisgICAgICAgIGEgPSAnc2VsZi5hc3NlcnRFcXVhbCAoMiwgMyknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICcgIHNlbGYuYXNzZXJ0RXF1YWxzICgyLCAzKScKKyAgICAgICAgYSA9ICcgIHNlbGYuYXNzZXJ0RXF1YWwgKDIsIDMpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnd2l0aCBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoRXhwbG9zaW9uKTogZXhwbG9kZSgpJworICAgICAgICBhID0gJ3dpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhwbG9zaW9uKTogZXhwbG9kZSgpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnd2l0aCBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoRXhwbG9zaW9uKSBhcyBjbTogZXhwbG9kZSgpJworICAgICAgICBhID0gJ3dpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhwbG9zaW9uKSBhcyBjbTogZXhwbG9kZSgpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CisgICAgICAgIHNlbGYudW5jaGFuZ2VkKCdzZWxmLmFzc2VydEVxdWFsc09uU2F0dXJkYXknKQorICAgICAgICBzZWxmLnVuY2hhbmdlZCgnc2VsZi5hc3NlcnRFcXVhbHNPblNhdHVyZGF5KDMsIDUpJykKZGlmZiAtLWdpdCBhL0xpYi9saW5lY2FjaGUucHkgYi9MaWIvbGluZWNhY2hlLnB5CmluZGV4IGMzZjJjM2YuLjAyYTllYjUgMTAwNjQ0Ci0tLSBhL0xpYi9saW5lY2FjaGUucHkKKysrIGIvTGliL2xpbmVjYWNoZS5weQpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgY29udGludWUgICAjIG5vLW9wIGZvciBmaWxlcyBsb2FkZWQgdmlhIGEgX19sb2FkZXJfXwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGF0ID0gb3Muc3RhdChmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGRlbCBjYWNoZVtmaWxlbmFtZV0KICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIHNpemUgIT0gc3RhdC5zdF9zaXplIG9yIG10aW1lICE9IHN0YXQuc3RfbXRpbWU6CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICBpZiBuYW1lIGFuZCBnZXRfc291cmNlOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKQEAgLTExOCwxNCArMTE4LDE0IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBbXQogICAgIHRyeToKICAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZ1bGxuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbGluZXMgYW5kIG5vdCBsaW5lc1stMV0uZW5kc3dpdGgoJ1xuJyk6CiAgICAgICAgIGxpbmVzWy0xXSArPSAnXG4nCmRpZmYgLS1naXQgYS9MaWIvbG9jYWxlLnB5IGIvTGliL2xvY2FsZS5weQppbmRleCBkMmE4ODVkLi4yZTgyYzk1IDEwMDY0NAotLS0gYS9MaWIvbG9jYWxlLnB5CisrKyBiL0xpYi9sb2NhbGUucHkKQEAgLTU1NCw4ICs1NTQsOCBAQAogICAgICMgT24gV2luMzIsIHRoaXMgd2lsbCByZXR1cm4gdGhlIEFOU0kgY29kZSBwYWdlCiAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZSA9IFRydWUpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNoYXJzZXQgdGhhdCB0aGUgdXNlciBpcyBsaWtlbHkgdXNpbmcuIiIiCi0gICAgICAgIGltcG9ydCBfbG9jYWxlCi0gICAgICAgIHJldHVybiBfbG9jYWxlLl9nZXRkZWZhdWx0bG9jYWxlKClbMV0KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCisgICAgICAgIHJldHVybiBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKIGVsc2U6CiAgICAgIyBPbiBVbml4LCBpZiBDT0RFU0VUIGlzIGF2YWlsYWJsZSwgdXNlIHRoYXQuCiAgICAgdHJ5OgpAQCAtNTc0LDI3ICs1NzQsMTYgQEAKICAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZSA9IFRydWUpOgogICAgICAgICAgICAgIiIiUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgdGhlIHVzZXIgaXMgbGlrZWx5IHVzaW5nLAogICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4iIiIKKyAgICAgICAgICAgIGltcG9ydCBfYm9vdGxvY2FsZQogICAgICAgICAgICAgaWYgZG9fc2V0bG9jYWxlOgogICAgICAgICAgICAgICAgIG9sZGxvYyA9IHNldGxvY2FsZShMQ19DVFlQRSkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19DVFlQRSwgIiIpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEVycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCkKLSAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0IGFuZCBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICAgICAgICAgICMgbmxfbGFuZ2luZm8gY2FuIHJldHVybiBhbiBlbXB0eSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgIyB3aGVuIHRoZSBzZXR0aW5nIGhhcyBhbiBpbnZhbGlkIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAjIERlZmF1bHQgdG8gVVRGLTggaW4gdGhhdCBjYXNlIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgIyBVVEYtOCBpcyB0aGUgZGVmYXVsdCBjaGFyc2V0IG9uIE9TWCBhbmQKLSAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcgbm90aGluZyB3aWxsIGNyYXNoIHRoZQotICAgICAgICAgICAgICAgICAgICAjIGludGVycHJldGVyLgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAnVVRGLTgnCisgICAgICAgICAgICByZXN1bHQgPSBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKKyAgICAgICAgICAgIGlmIGRvX3NldGxvY2FsZToKICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfQ1RZUEUsIG9sZGxvYykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCkKLSAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0IGFuZCBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICAgICAgICAgICMgU2VlIGFib3ZlIGZvciBleHBsYW5hdGlvbgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAnVVRGLTgnCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKIApkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQppbmRleCA3Zjk0ZTM5Li45YjQxYjlkIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQorKysgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAiIiJSZXR1cm4gdGhlIGZyYW1lIG9iamVjdCBmb3IgdGhlIGNhbGxlcidzIHN0YWNrIGZyYW1lLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawogCiAjIF9zcmNmaWxlIGlzIG9ubHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHN5cy5fZ2V0ZnJhbWUoKS4KQEAgLTEyMywyMCArMTIzLDIyIEBACiBERUJVRyA9IDEwCiBOT1RTRVQgPSAwCiAKLV9sZXZlbE5hbWVzID0gewotICAgIENSSVRJQ0FMIDogJ0NSSVRJQ0FMJywKLSAgICBFUlJPUiA6ICdFUlJPUicsCi0gICAgV0FSTklORyA6ICdXQVJOSU5HJywKLSAgICBJTkZPIDogJ0lORk8nLAotICAgIERFQlVHIDogJ0RFQlVHJywKLSAgICBOT1RTRVQgOiAnTk9UU0VUJywKLSAgICAnQ1JJVElDQUwnIDogQ1JJVElDQUwsCi0gICAgJ0VSUk9SJyA6IEVSUk9SLAotICAgICdXQVJOJyA6IFdBUk5JTkcsCi0gICAgJ1dBUk5JTkcnIDogV0FSTklORywKLSAgICAnSU5GTycgOiBJTkZPLAotICAgICdERUJVRycgOiBERUJVRywKLSAgICAnTk9UU0VUJyA6IE5PVFNFVCwKK19sZXZlbFRvTmFtZSA9IHsKKyAgICBDUklUSUNBTDogJ0NSSVRJQ0FMJywKKyAgICBFUlJPUjogJ0VSUk9SJywKKyAgICBXQVJOSU5HOiAnV0FSTklORycsCisgICAgSU5GTzogJ0lORk8nLAorICAgIERFQlVHOiAnREVCVUcnLAorICAgIE5PVFNFVDogJ05PVFNFVCcsCit9CitfbmFtZVRvTGV2ZWwgPSB7CisgICAgJ0NSSVRJQ0FMJzogQ1JJVElDQUwsCisgICAgJ0VSUk9SJzogRVJST1IsCisgICAgJ1dBUk4nOiBXQVJOSU5HLAorICAgICdXQVJOSU5HJzogV0FSTklORywKKyAgICAnSU5GTyc6IElORk8sCisgICAgJ0RFQlVHJzogREVCVUcsCisgICAgJ05PVFNFVCc6IE5PVFNFVCwKIH0KIAogZGVmIGdldExldmVsTmFtZShsZXZlbCk6CkBAIC0xNTMsNyArMTU1LDcgQEAKIAogICAgIE90aGVyd2lzZSwgdGhlIHN0cmluZyAiTGV2ZWwgJXMiICUgbGV2ZWwgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgcmV0dXJuIF9sZXZlbE5hbWVzLmdldChsZXZlbCwgKCJMZXZlbCAlcyIgJSBsZXZlbCkpCisgICAgcmV0dXJuIF9sZXZlbFRvTmFtZS5nZXQobGV2ZWwsICgiTGV2ZWwgJXMiICUgbGV2ZWwpKQogCiBkZWYgYWRkTGV2ZWxOYW1lKGxldmVsLCBsZXZlbE5hbWUpOgogICAgICIiIgpAQCAtMTYzLDggKzE2NSw4IEBACiAgICAgIiIiCiAgICAgX2FjcXVpcmVMb2NrKCkKICAgICB0cnk6ICAgICN1bmxpa2VseSB0byBjYXVzZSBhbiBleGNlcHRpb24sIGJ1dCB5b3UgbmV2ZXIga25vdy4uLgotICAgICAgICBfbGV2ZWxOYW1lc1tsZXZlbF0gPSBsZXZlbE5hbWUKLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxOYW1lXSA9IGxldmVsCisgICAgICAgIF9sZXZlbFRvTmFtZVtsZXZlbF0gPSBsZXZlbE5hbWUKKyAgICAgICAgX25hbWVUb0xldmVsW2xldmVsTmFtZV0gPSBsZXZlbAogICAgIGZpbmFsbHk6CiAgICAgICAgIF9yZWxlYXNlTG9jaygpCiAKQEAgLTE3Miw5ICsxNzQsOSBAQAogICAgIGlmIGlzaW5zdGFuY2UobGV2ZWwsIGludCk6CiAgICAgICAgIHJ2ID0gbGV2ZWwKICAgICBlbGlmIHN0cihsZXZlbCkgPT0gbGV2ZWw6Ci0gICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbGV2ZWxOYW1lczoKKyAgICAgICAgaWYgbGV2ZWwgbm90IGluIF9uYW1lVG9MZXZlbDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gbGV2ZWw6ICVyIiAlIGxldmVsKQotICAgICAgICBydiA9IF9sZXZlbE5hbWVzW2xldmVsXQorICAgICAgICBydiA9IF9uYW1lVG9MZXZlbFtsZXZlbF0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkxldmVsIG5vdCBhbiBpbnRlZ2VyIG9yIGEgdmFsaWQgc3RyaW5nOiAlciIgJSBsZXZlbCkKICAgICByZXR1cm4gcnYKQEAgLTg4MCwxNiArODgyLDMwIEBACiAgICAgICAgIFRoZSByZWNvcmQgd2hpY2ggd2FzIGJlaW5nIHByb2Nlc3NlZCBpcyBwYXNzZWQgaW4gdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICIiIgogICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnMgYW5kIHN5cy5zdGRlcnI6ICAjIHNlZSBpc3N1ZSAxMzgwNwotICAgICAgICAgICAgZWkgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgdCwgdiwgdGIgPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oZWlbMF0sIGVpWzFdLCBlaVsyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHN5cy5zdGRlcnIpCi0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTG9nZ2VkIGZyb20gZmlsZSAlcywgbGluZSAlc1xuJyAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5maWxlbmFtZSwgcmVjb3JkLmxpbmVubykpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjogI3ByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gTG9nZ2luZyBlcnJvciAtLS1cbicpCisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbih0LCB2LCB0YiwgTm9uZSwgc3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdDYWxsIHN0YWNrOlxuJykKKyAgICAgICAgICAgICAgICAjIFdhbGsgdGhlIHN0YWNrIGZyYW1lIHVwIHVudGlsIHdlJ3JlIG91dCBvZiBsb2dnaW5nLAorICAgICAgICAgICAgICAgICMgc28gYXMgdG8gcHJpbnQgdGhlIGNhbGxpbmcgY29udGV4dC4KKyAgICAgICAgICAgICAgICBmcmFtZSA9IHRiLnRiX2ZyYW1lCisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lIGFuZCBvcy5wYXRoLmRpcm5hbWUoZnJhbWUuZl9jb2RlLmNvX2ZpbGVuYW1lKSA9PQorICAgICAgICAgICAgICAgICAgICAgICBfX3BhdGhfX1swXSk6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgICAgICAgICAgaWYgZnJhbWU6CisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhmcmFtZSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgY291bGRuJ3QgZmluZCB0aGUgcmlnaHQgc3RhY2sgZnJhbWUsIGZvciBzb21lIHJlYXNvbgorICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdMb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzXG4nICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5maWxlbmFtZSwgcmVjb3JkLmxpbmVubykpCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAxODY3MTogb3V0cHV0IGxvZ2dpbmcgbWVzc2FnZSBhbmQgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTWVzc2FnZTogJXJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmd1bWVudHM6ICVzXG4nICUgKHJlY29yZC5tc2csIHJlY29yZC5hcmdzKSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICAgICAgIHBhc3MgICAgIyBzZWUgaXNzdWUgNTk3MQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBkZWwgZWkKKyAgICAgICAgICAgICAgICBkZWwgdCwgdiwgdGIKIAogY2xhc3MgU3RyZWFtSGFuZGxlcihIYW5kbGVyKToKICAgICAiIiIKQEAgLTkzOSw5ICs5NTUsNyBAQAogICAgICAgICAgICAgc3RyZWFtLndyaXRlKG1zZykKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShzZWxmLnRlcm1pbmF0b3IpCiAgICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgRmlsZUhhbmRsZXIoU3RyZWFtSGFuZGxlcik6CkBAIC0xODMzLDcgKzE4NDcsNyBAQAogICAgICAgICAgICAgICAgICAgICBoLmFjcXVpcmUoKQogICAgICAgICAgICAgICAgICAgICBoLmZsdXNoKCkKICAgICAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBlcnJvcnMgd2hpY2ggbWlnaHQgYmUgY2F1c2VkCiAgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBoYW5kbGVycyBoYXZlIGJlZW4gY2xvc2VkIGJ1dAogICAgICAgICAgICAgICAgICAgICAjIHJlZmVyZW5jZXMgdG8gdGhlbSBhcmUgc3RpbGwgYXJvdW5kIGF0CkBAIC0xODQxLDcgKzE4NTUsNyBAQAogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgaC5yZWxlYXNlKCkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQ6ICMgaWdub3JlIGV2ZXJ5dGhpbmcsIGFzIHdlJ3JlIHNodXR0aW5nIGRvd24KICAgICAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9uczoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgI2Vsc2UsIHN3YWxsb3cKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL2NvbmZpZy5weSBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQppbmRleCAxODgwNjE0Li5iODgyYTYyIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9jb25maWcucHkKKysrIGIvTGliL2xvZ2dpbmcvY29uZmlnLnB5CkBAIC02MSwxMSArNjEsMTQgQEAKICAgICAiIiIKICAgICBpbXBvcnQgY29uZmlncGFyc2VyCiAKLSAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCi0gICAgaWYgaGFzYXR0cihmbmFtZSwgJ3JlYWRsaW5lJyk6Ci0gICAgICAgIGNwLnJlYWRfZmlsZShmbmFtZSkKKyAgICBpZiBpc2luc3RhbmNlKGZuYW1lLCBjb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyKToKKyAgICAgICAgY3AgPSBmbmFtZQogICAgIGVsc2U6Ci0gICAgICAgIGNwLnJlYWQoZm5hbWUpCisgICAgICAgIGNwID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcihkZWZhdWx0cykKKyAgICAgICAgaWYgaGFzYXR0cihmbmFtZSwgJ3JlYWRsaW5lJyk6CisgICAgICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjcC5yZWFkKGZuYW1lKQogCiAgICAgZm9ybWF0dGVycyA9IF9jcmVhdGVfZm9ybWF0dGVycyhjcCkKIApAQCAtMTQxLDcgKzE0NCw3IEBACiAgICAgICAgIGggPSBrbGFzcygqYXJncykKICAgICAgICAgaWYgImxldmVsIiBpbiBzZWN0aW9uOgogICAgICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgICAgICBoLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgaC5zZXRMZXZlbChsZXZlbCkKICAgICAgICAgaWYgbGVuKGZtdCk6CiAgICAgICAgICAgICBoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXJzW2ZtdF0pCiAgICAgICAgIGlmIGlzc3ViY2xhc3Moa2xhc3MsIGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlcik6CkBAIC0xODgsNyArMTkxLDcgQEAKICAgICBsb2cgPSByb290CiAgICAgaWYgImxldmVsIiBpbiBzZWN0aW9uOgogICAgICAgICBsZXZlbCA9IHNlY3Rpb25bImxldmVsIl0KLSAgICAgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICBsb2cuc2V0TGV2ZWwobGV2ZWwpCiAgICAgZm9yIGggaW4gcm9vdC5oYW5kbGVyc1s6XToKICAgICAgICAgcm9vdC5yZW1vdmVIYW5kbGVyKGgpCiAgICAgaGxpc3QgPSBzZWN0aW9uWyJoYW5kbGVycyJdCkBAIC0yMzQsNyArMjM3LDcgQEAKICAgICAgICAgICAgIGV4aXN0aW5nLnJlbW92ZShxbikKICAgICAgICAgaWYgImxldmVsIiBpbiBzZWN0aW9uOgogICAgICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5fbGV2ZWxOYW1lc1tsZXZlbF0pCisgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGZvciBoIGluIGxvZ2dlci5oYW5kbGVyc1s6XToKICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCiAgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBwcm9wYWdhdGUKQEAgLTcyOSw2ICs3MzIsNyBAQAogICAgICAgICAgICAgICAgICdhZGRyZXNzJyBpbiBjb25maWc6CiAgICAgICAgICAgICAgICAgY29uZmlnWydhZGRyZXNzJ10gPSBzZWxmLmFzX3R1cGxlKGNvbmZpZ1snYWRkcmVzcyddKQogICAgICAgICAgICAgZmFjdG9yeSA9IGtsYXNzCisgICAgICAgIHByb3BzID0gY29uZmlnLnBvcCgnLicsIE5vbmUpCiAgICAgICAgIGt3YXJncyA9IGRpY3QoWyhrLCBjb25maWdba10pIGZvciBrIGluIGNvbmZpZyBpZiB2YWxpZF9pZGVudChrKV0pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IGZhY3RvcnkoKiprd2FyZ3MpCkBAIC03NDcsNiArNzUxLDkgQEAKICAgICAgICAgICAgIHJlc3VsdC5zZXRMZXZlbChsb2dnaW5nLl9jaGVja0xldmVsKGxldmVsKSkKICAgICAgICAgaWYgZmlsdGVyczoKICAgICAgICAgICAgIHNlbGYuYWRkX2ZpbHRlcnMocmVzdWx0LCBmaWx0ZXJzKQorICAgICAgICBpZiBwcm9wczoKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBwcm9wcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIocmVzdWx0LCBuYW1lLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIGFkZF9oYW5kbGVycyhzZWxmLCBsb2dnZXIsIGhhbmRsZXJzKToKQEAgLTc5NSw3ICs4MDIsNyBAQAogICAgIGRpY3RDb25maWdDbGFzcyhjb25maWcpLmNvbmZpZ3VyZSgpCiAKIAotZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCk6CitkZWYgbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JULCB2ZXJpZnk9Tm9uZSk6CiAgICAgIiIiCiAgICAgU3RhcnQgdXAgYSBzb2NrZXQgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCwgYW5kIGxpc3RlbiBmb3IgbmV3CiAgICAgY29uZmlndXJhdGlvbnMuCkBAIC04MDQsNiArODExLDE1IEBACiAgICAgUmV0dXJucyBhIFRocmVhZCBvYmplY3Qgb24gd2hpY2ggeW91IGNhbiBjYWxsIHN0YXJ0KCkgdG8gc3RhcnQgdGhlIHNlcnZlciwKICAgICBhbmQgd2hpY2ggeW91IGNhbiBqb2luKCkgd2hlbiBhcHByb3ByaWF0ZS4gVG8gc3RvcCB0aGUgc2VydmVyLCBjYWxsCiAgICAgc3RvcExpc3RlbmluZygpLgorCisgICAgVXNlIHRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50IHRvIHZlcmlmeSBhbnkgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSB3aXJlCisgICAgZnJvbSBhIGNsaWVudC4gSWYgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCByZWNlaXZlcyBhCisgICAgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGJ5dGVzIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSByZWNlaXZlZCBhY3Jvc3MgdGhlCisgICAgbmV0d29yayAtIGFuZCBpdCBzaG91bGQgcmV0dXJuIGVpdGhlciBgYE5vbmVgYCwgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAgICBwYXNzZWQgaW4gYnl0ZXMgY291bGQgbm90IGJlIHZlcmlmaWVkIGFuZCBzaG91bGQgYmUgZGlzY2FyZGVkLCBvciBhCisgICAgYnl0ZSBzdHJpbmcgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gbWFjaGluZXJ5IGFzCisgICAgbm9ybWFsLiBOb3RlIHRoYXQgeW91IGNhbiByZXR1cm4gdHJhbnNmb3JtZWQgYnl0ZXMsIGUuZy4gYnkgZGVjcnlwdGluZworICAgIHRoZSBieXRlcyBwYXNzZWQgaW4uCiAgICAgIiIiCiAgICAgaWYgbm90IHRocmVhZDogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigibGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsiKQpAQCAtODMxLDI1ICs4NDcsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdihzbGVuKQogICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZW4oY2h1bmspIDwgc2xlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsgKyBjb25uLnJlY3Yoc2xlbiAtIGxlbihjaHVuaykpCi0gICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBqc29uCi0gICAgICAgICAgICAgICAgICAgICAgICBkID1qc29uLmxvYWRzKGNodW5rKQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RDb25maWcoZCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgI0FwcGx5IG5ldyBjb25maWd1cmF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gaW8uU3RyaW5nSU8oY2h1bmspCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLnZlcmlmeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5zZXJ2ZXIudmVyaWZ5KGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBjaHVuayBpcyBub3QgTm9uZTogICAjIHZlcmlmaWVkLCBjYW4gcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ29uZmlnKGZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBqc29uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkLCBkaWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RDb25maWcoZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0FwcGx5IG5ldyBjb25maWd1cmF0aW9uLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5yZWFkeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWR5LnNldCgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUuYXJncywgdHVwbGUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC04NjUsMTMgKzg4MiwxNCBAQAogICAgICAgICBhbGxvd19yZXVzZV9hZGRyZXNzID0gMQogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwKLSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSwgcmVhZHk9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPU5vbmUsIHJlYWR5PU5vbmUsIHZlcmlmeT1Ob25lKToKICAgICAgICAgICAgIFRocmVhZGluZ1RDUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoaG9zdCwgcG9ydCksIGhhbmRsZXIpCiAgICAgICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCiAgICAgICAgICAgICBzZWxmLmFib3J0ID0gMAogICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQogICAgICAgICAgICAgc2VsZi50aW1lb3V0ID0gMQogICAgICAgICAgICAgc2VsZi5yZWFkeSA9IHJlYWR5CisgICAgICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQogCiAgICAgICAgIGRlZiBzZXJ2ZV91bnRpbF9zdG9wcGVkKHNlbGYpOgogICAgICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtODg5LDE2ICs5MDcsMTggQEAKIAogICAgIGNsYXNzIFNlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKIAotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmN2ciwgaGRsciwgcG9ydCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByY3ZyLCBoZGxyLCBwb3J0LCB2ZXJpZnkpOgogICAgICAgICAgICAgc3VwZXIoU2VydmVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgICAgICBzZWxmLnJjdnIgPSByY3ZyCiAgICAgICAgICAgICBzZWxmLmhkbHIgPSBoZGxyCiAgICAgICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQogICAgICAgICAgICAgc2VsZi5yZWFkeSA9IHRocmVhZGluZy5FdmVudCgpCiAKICAgICAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgICAgIHNlcnZlciA9IHNlbGYucmN2cihwb3J0PXNlbGYucG9ydCwgaGFuZGxlcj1zZWxmLmhkbHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk9c2VsZi5yZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeT1zZWxmLnJlYWR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeT1zZWxmLnZlcmlmeSkKICAgICAgICAgICAgIGlmIHNlbGYucG9ydCA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlcnZlci5zZXJ2ZXJfYWRkcmVzc1sxXQogICAgICAgICAgICAgc2VsZi5yZWFkeS5zZXQoKQpAQCAtOTA4LDcgKzkyOCw3IEBACiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAgICAgICAgICAgICBzZXJ2ZXIuc2VydmVfdW50aWxfc3RvcHBlZCgpCiAKLSAgICByZXR1cm4gU2VydmVyKENvbmZpZ1NvY2tldFJlY2VpdmVyLCBDb25maWdTdHJlYW1IYW5kbGVyLCBwb3J0KQorICAgIHJldHVybiBTZXJ2ZXIoQ29uZmlnU29ja2V0UmVjZWl2ZXIsIENvbmZpZ1N0cmVhbUhhbmRsZXIsIHBvcnQsIHZlcmlmeSkKIAogZGVmIHN0b3BMaXN0ZW5pbmcoKToKICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5IGIvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKaW5kZXggZGRlYzdkZC4uYjJlN2Q0NCAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKKysrIGIvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKQEAgLTcyLDkgKzcyLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkUm9sbG92ZXIocmVjb3JkKToKICAgICAgICAgICAgICAgICBzZWxmLmRvUm9sbG92ZXIoKQogICAgICAgICAgICAgbG9nZ2luZy5GaWxlSGFuZGxlci5lbWl0KHNlbGYsIHJlY29yZCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiByb3RhdGlvbl9maWxlbmFtZShzZWxmLCBkZWZhdWx0X25hbWUpOgpAQCAtMjAxLDExICsxOTksMTIgQEAKICAgICBJZiBiYWNrdXBDb3VudCBpcyA+IDAsIHdoZW4gcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cENvdW50CiAgICAgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQuCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSwgYXRUaW1lPU5vbmUpOgogICAgICAgICBCYXNlUm90YXRpbmdIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCAnYScsIGVuY29kaW5nLCBkZWxheSkKICAgICAgICAgc2VsZi53aGVuID0gd2hlbi51cHBlcigpCiAgICAgICAgIHNlbGYuYmFja3VwQ291bnQgPSBiYWNrdXBDb3VudAogICAgICAgICBzZWxmLnV0YyA9IHV0YworICAgICAgICBzZWxmLmF0VGltZSA9IGF0VGltZQogICAgICAgICAjIENhbGN1bGF0ZSB0aGUgcmVhbCByb2xsb3ZlciBpbnRlcnZhbCwgd2hpY2ggaXMganVzdCB0aGUgbnVtYmVyIG9mCiAgICAgICAgICMgc2Vjb25kcyBiZXR3ZWVuIHJvbGxvdmVycy4gIEFsc28gc2V0IHRoZSBmaWxlbmFtZSBzdWZmaXggdXNlZCB3aGVuCiAgICAgICAgICMgYSByb2xsb3ZlciBvY2N1cnMuICBDdXJyZW50ICd3aGVuJyBldmVudHMgc3VwcG9ydGVkOgpAQCAtMjc1LDkgKzI3NCwyMiBAQAogICAgICAgICAgICAgY3VycmVudEhvdXIgPSB0WzNdCiAgICAgICAgICAgICBjdXJyZW50TWludXRlID0gdFs0XQogICAgICAgICAgICAgY3VycmVudFNlY29uZCA9IHRbNV0KLSAgICAgICAgICAgICMgciBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgbGVmdCBiZXR3ZWVuIG5vdyBhbmQgbWlkbmlnaHQKLSAgICAgICAgICAgIHIgPSBfTUlETklHSFQgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY29uZCkKKyAgICAgICAgICAgIGN1cnJlbnREYXkgPSB0WzZdCisgICAgICAgICAgICAjIHIgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgYmV0d2VlbiBub3cgYW5kIHRoZSBuZXh0IHJvdGF0aW9uCisgICAgICAgICAgICBpZiBzZWxmLmF0VGltZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJvdGF0ZV90cyA9IF9NSUROSUdIVAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByb3RhdGVfdHMgPSAoKHNlbGYuYXRUaW1lLmhvdXIgKiA2MCArIHNlbGYuYXRUaW1lLm1pbnV0ZSkqNjAgKworICAgICAgICAgICAgICAgICAgICBzZWxmLmF0VGltZS5zZWNvbmQpCisKKyAgICAgICAgICAgIHIgPSByb3RhdGVfdHMgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKKyAgICAgICAgICAgICAgICBjdXJyZW50U2Vjb25kKQorICAgICAgICAgICAgaWYgciA8IDA6CisgICAgICAgICAgICAgICAgIyBSb3RhdGUgdGltZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZSAoZm9yIGV4YW1wbGUgd2hlbgorICAgICAgICAgICAgICAgICMgc2VsZi5yb3RhdGVBdCBpcyAxMzo0NSBhbmQgaXQgbm93IDE0OjE1KSwgcm90YXRpb24gaXMKKyAgICAgICAgICAgICAgICAjIHRvbW9ycm93LgorICAgICAgICAgICAgICAgIHIgKz0gX01JRE5JR0hUCisgICAgICAgICAgICAgICAgY3VycmVudERheSA9IChjdXJyZW50RGF5ICsgMSkgJSA3CiAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50VGltZSArIHIKICAgICAgICAgICAgICMgSWYgd2UgYXJlIHJvbGxpbmcgb3ZlciBvbiBhIGNlcnRhaW4gZGF5LCBhZGQgaW4gdGhlIG51bWJlciBvZiBkYXlzIHVudGlsCiAgICAgICAgICAgICAjIHRoZSBuZXh0IHJvbGxvdmVyLCBidXQgb2Zmc2V0IGJ5IDEgc2luY2Ugd2UganVzdCBjYWxjdWxhdGVkIHRoZSB0aW1lCkBAIC0yOTUsNyArMzA3LDcgQEAKICAgICAgICAgICAgICMgVGhpcyBpcyBiZWNhdXNlIHRoZSBhYm92ZSB0aW1lIGNhbGN1bGF0aW9uIHRha2VzIHVzIHRvIG1pZG5pZ2h0IG9uIHRoaXMKICAgICAgICAgICAgICMgZGF5LCBpLmUuIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBkYXkuCiAgICAgICAgICAgICBpZiBzZWxmLndoZW4uc3RhcnRzd2l0aCgnVycpOgotICAgICAgICAgICAgICAgIGRheSA9IHRbNl0gIyAwIGlzIE1vbmRheQorICAgICAgICAgICAgICAgIGRheSA9IGN1cnJlbnREYXkgIyAwIGlzIE1vbmRheQogICAgICAgICAgICAgICAgIGlmIGRheSAhPSBzZWxmLmRheU9mV2VlazoKICAgICAgICAgICAgICAgICAgICAgaWYgZGF5IDwgc2VsZi5kYXlPZldlZWs6CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXlzVG9XYWl0ID0gc2VsZi5kYXlPZldlZWsgLSBkYXkKQEAgLTQ0NCwxMSArNDU2LDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBzdGF0IHRoZSBmaWxlIGJ5IHBhdGgsIGNoZWNraW5nIGZvciBleGlzdGVuY2UKICAgICAgICAgICAgIHNyZXMgPSBvcy5zdGF0KHNlbGYuYmFzZUZpbGVuYW1lKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIHNyZXMgPSBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIHNyZXMgPSBOb25lCiAgICAgICAgICMgY29tcGFyZSBmaWxlIHN5c3RlbSBzdGF0IHdpdGggdGhhdCBvZiBvdXIgc3RyZWFtIGZpbGUgaGFuZGxlCiAgICAgICAgIGlmIG5vdCBzcmVzIG9yIHNyZXNbU1RfREVWXSAhPSBzZWxmLmRldiBvciBzcmVzW1NUX0lOT10gIT0gc2VsZi5pbm86CiAgICAgICAgICAgICBpZiBzZWxmLnN0cmVhbSBpcyBub3QgTm9uZToKQEAgLTQ4NSw2ICs0OTQsMTAgQEAKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBpZiBwb3J0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBob3N0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSAoaG9zdCwgcG9ydCkKICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQogICAgICAgICBzZWxmLmNsb3NlT25FcnJvciA9IEZhbHNlCiAgICAgICAgIHNlbGYucmV0cnlUaW1lID0gTm9uZQpAQCAtNTAwLDE1ICs1MTMsMTcgQEAKICAgICAgICAgQSBmYWN0b3J5IG1ldGhvZCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NlcyB0byBkZWZpbmUgdGhlIHByZWNpc2UKICAgICAgICAgdHlwZSBvZiBzb2NrZXQgdGhleSB3YW50LgogICAgICAgICAiIiIKLSAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgaWYgaGFzYXR0cihzLCAnc2V0dGltZW91dCcpOgotICAgICAgICAgICAgcy5zZXR0aW1lb3V0KHRpbWVvdXQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMuY29ubmVjdCgoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQotICAgICAgICAgICAgcmV0dXJuIHMKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgIHMuY2xvc2UoKQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgc2VsZi5wb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKHNlbGYuYWRkcmVzcywgdGltZW91dD10aW1lb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgcmVzdWx0LnNldHRpbWVvdXQodGltZW91dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQuY29ubmVjdChzZWxmLmFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByZXN1bHQuY2xvc2UoKSAgIyBJc3N1ZSAxOTE4MgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBjcmVhdGVTb2NrZXQoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNTI4LDcgKzU0Myw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5tYWtlU29ja2V0KCkKICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUgIyBuZXh0IHRpbWUsIG5vIGRlbGF5IGJlZm9yZSB0cnlpbmcKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjQ3JlYXRpb24gZmFpbGVkLCBzbyBzZXQgdGhlIHJldHJ5IHRpbWUgYW5kIHJldHVybi4KICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHJ5VGltZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5UGVyaW9kID0gc2VsZi5yZXRyeVN0YXJ0CkBAIC01NTIsMTYgKzU2Nyw4IEBACiAgICAgICAgICNidXQgYXJlIHN0aWxsIHVuYWJsZSB0byBjb25uZWN0LgogICAgICAgICBpZiBzZWxmLnNvY2s6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLnNvY2ssICJzZW5kYWxsIik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCi0gICAgICAgICAgICAgICAgZWxzZTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gMAotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVuKHMpCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIGxlZnQgPiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VudCA9IHNlbGYuc29jay5zZW5kKHNbc2VudHNvZmFyOl0pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW50c29mYXIgPSBzZW50c29mYXIgKyBzZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCAtIHNlbnQKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6ICNwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwocykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZSAgIyBzbyB3ZSBjYW4gY2FsbCBjcmVhdGVTb2NrZXQgbmV4dCB0aW1lCiAKQEAgLTYxMSw5ICs2MTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzID0gc2VsZi5tYWtlUGlja2xlKHJlY29yZCkKICAgICAgICAgICAgIHNlbGYuc2VuZChzKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtNjUyLDcgKzY1NywxMSBAQAogICAgICAgICBUaGUgZmFjdG9yeSBtZXRob2Qgb2YgU29ja2V0SGFuZGxlciBpcyBoZXJlIG92ZXJyaWRkZW4gdG8gY3JlYXRlCiAgICAgICAgIGEgVURQIHNvY2tldCAoU09DS19ER1JBTSkuCiAgICAgICAgICIiIgotICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBOb25lOgorICAgICAgICAgICAgZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhbWlseSA9IHNvY2tldC5BRl9JTkVUCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgc29ja2V0LlNPQ0tfREdSQU0pCiAgICAgICAgIHJldHVybiBzCiAKICAgICBkZWYgc2VuZChzZWxmLCBzKToKQEAgLTY2NSw3ICs2NzQsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZVNvY2tldCgpCi0gICAgICAgIHNlbGYuc29jay5zZW5kdG8ocywgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0byhzLCBzZWxmLmFkZHJlc3MpCiAKIGNsYXNzIFN5c0xvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICAiIiIKQEAgLTc3Nyw3ICs3ODYsMTEgQEAKIAogICAgICAgICBJZiBhZGRyZXNzIGlzIHNwZWNpZmllZCBhcyBhIHN0cmluZywgYSBVTklYIHNvY2tldCBpcyB1c2VkLiBUbyBsb2cgdG8gYQogICAgICAgICBsb2NhbCBzeXNsb2dkLCAiU3lzTG9nSGFuZGxlcihhZGRyZXNzPSIvZGV2L2xvZyIpIiBjYW4gYmUgdXNlZC4KLSAgICAgICAgSWYgZmFjaWxpdHkgaXMgbm90IHNwZWNpZmllZCwgTE9HX1VTRVIgaXMgdXNlZC4KKyAgICAgICAgSWYgZmFjaWxpdHkgaXMgbm90IHNwZWNpZmllZCwgTE9HX1VTRVIgaXMgdXNlZC4gSWYgc29ja3R5cGUgaXMKKyAgICAgICAgc3BlY2lmaWVkIGFzIHNvY2tldC5TT0NLX0RHUkFNIG9yIHNvY2tldC5TT0NLX1NUUkVBTSwgdGhhdCBzcGVjaWZpYworICAgICAgICBzb2NrZXQgdHlwZSB3aWxsIGJlIHVzZWQuIEZvciBVbml4IHNvY2tldHMsIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEKKyAgICAgICAgc29ja3R5cGUgb2YgTm9uZSwgaW4gd2hpY2ggY2FzZSBzb2NrZXQuU09DS19ER1JBTSB3aWxsIGJlIHVzZWQsIGZhbGxpbmcKKyAgICAgICAgYmFjayB0byBzb2NrZXQuU09DS19TVFJFQU0uCiAgICAgICAgICIiIgogICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKIApAQCAtODA3LDcgKzgyMCw3IEBACiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KGFkZHJlc3MpCiAgICAgICAgICAgICAjIGl0IHdvcmtlZCwgc28gc2V0IHNlbGYuc29ja3R5cGUgdG8gdGhlIHVzZWQgdHlwZQogICAgICAgICAgICAgc2VsZi5zb2NrdHlwZSA9IHVzZV9zb2NrdHlwZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgIGlmIHNlbGYuc29ja3R5cGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB1c2VyIGRpZG4ndCBzcGVjaWZ5IGZhbGxpbmcgYmFjaywgc28gZmFpbApAQCAtODE4LDcgKzgzMSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY29ubmVjdChhZGRyZXNzKQogICAgICAgICAgICAgICAgICMgaXQgd29ya2VkLCBzbyBzZXQgc2VsZi5zb2NrdHlwZSB0byB0aGUgdXNlZCB0eXBlCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrdHlwZSA9IHVzZV9zb2NrdHlwZQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC04NzEsMTAgKzg4NCw5IEBACiAgICAgICAgICAgICBtc2cgPSBzZWxmLmlkZW50ICsgbXNnCiAgICAgICAgIGlmIHNlbGYuYXBwZW5kX251bDoKICAgICAgICAgICAgIG1zZyArPSAnXDAwMCcKLSAgICAgICAgIiIiCi0gICAgICAgIFdlIG5lZWQgdG8gY29udmVydCByZWNvcmQgbGV2ZWwgdG8gbG93ZXJjYXNlLCBtYXliZSB0aGlzIHdpbGwKLSAgICAgICAgY2hhbmdlIGluIHRoZSBmdXR1cmUuCi0gICAgICAgICIiIgorCisgICAgICAgICMgV2UgbmVlZCB0byBjb252ZXJ0IHJlY29yZCBsZXZlbCB0byBsb3dlcmNhc2UsIG1heWJlIHRoaXMgd2lsbAorICAgICAgICAjIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogICAgICAgICBwcmlvID0gJzwlZD4nICUgc2VsZi5lbmNvZGVQcmlvcml0eShzZWxmLmZhY2lsaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcFByaW9yaXR5KHJlY29yZC5sZXZlbG5hbWUpKQogICAgICAgICBwcmlvID0gcHJpby5lbmNvZGUoJ3V0Zi04JykKQEAgLTg4NSw3ICs4OTcsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi51bml4c29ja2V0OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZi5hZGRyZXNzKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKG1zZykKQEAgLTg5Myw5ICs5MDUsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmR0byhtc2csIHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChtc2cpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIFNNVFBIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC05NzMsOSArOTgzLDcgQEAKICAgICAgICAgICAgICAgICBzbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCiAgICAgICAgICAgICBzbXRwLnNlbmRtYWlsKHNlbGYuZnJvbWFkZHIsIHNlbGYudG9hZGRycywgbXNnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgTlRFdmVudExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEwNjAsOSArMTA2OCw3IEBACiAgICAgICAgICAgICAgICAgdHlwZSA9IHNlbGYuZ2V0RXZlbnRUeXBlKHJlY29yZCkKICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCiAgICAgICAgICAgICAgICAgc2VsZi5fd2VsdS5SZXBvcnRFdmVudChzZWxmLmFwcG5hbWUsIGlkLCBjYXQsIHR5cGUsIFttc2ddKQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CkBAIC0xMTQ3LDkgKzExNTMsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5tZXRob2QgPT0gIlBPU1QiOgogICAgICAgICAgICAgICAgIGguc2VuZChkYXRhLmVuY29kZSgndXRmLTgnKSkKICAgICAgICAgICAgIGguZ2V0cmVzcG9uc2UoKSAgICAjY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0Ci0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEJ1ZmZlcmluZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEzMjksOSArMTMzMyw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmVucXVldWUoc2VsZi5wcmVwYXJlKHJlY29yZCkpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGlmIHRocmVhZGluZzoKZGlmZiAtLWdpdCBhL0xpYi9sem1hLnB5IGIvTGliL2x6bWEucHkKaW5kZXggMWExYjA2NS4uMDExYWQyNyAxMDA2NDQKLS0tIGEvTGliL2x6bWEucHkKKysrIGIvTGliL2x6bWEucHkKQEAgLTU0LDkgKzU0LDkgQEAKICAgICAgICAgYnl0ZXMgb2JqZWN0KSwgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZWQgZmlsZSBpcyBvcGVuZWQsIG9yIGl0IGNhbgogICAgICAgICBiZSBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICAgICAgbW9kZSBjYW4gYmUgInIiIGZvciByZWFkaW5nIChkZWZhdWx0KSwgInciIGZvciAob3Zlcil3cml0aW5nLCBvcgotICAgICAgICAiYSIgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyAicmIiLCAid2IiLAotICAgICAgICBhbmQgImFiIiByZXNwZWN0aXZlbHkuCisgICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywKKyAgICAgICAgIngiIGZvciBjcmVhdGluZyBleGNsdXNpdmVseSwgb3IgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbgorICAgICAgICBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwgInhiIiBhbmQgImFiIiByZXNwZWN0aXZlbHkuCiAKICAgICAgICAgZm9ybWF0IHNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCB0byB1c2UgZm9yIHRoZSBmaWxlLgogICAgICAgICBJZiBtb2RlIGlzICJyIiwgdGhpcyBkZWZhdWx0cyB0byBGT1JNQVRfQVVUTy4gT3RoZXJ3aXNlLCB0aGUKQEAgLTExMCw4ICsxMTAsOSBAQAogICAgICAgICAgICAgIyBzdHJlYW0gd2lsbCBuZWVkIGEgc2VwYXJhdGUgZGVjb21wcmVzc29yIG9iamVjdC4KICAgICAgICAgICAgIHNlbGYuX2luaXRfYXJncyA9IHsiZm9ybWF0Ijpmb3JtYXQsICJmaWx0ZXJzIjpmaWx0ZXJzfQogICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKLSAgICAgICAgZWxpZiBtb2RlIGluICgidyIsICJ3YiIsICJhIiwgImFiIik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisgICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIsICJ4IiwgInhiIik6CiAgICAgICAgICAgICBpZiBmb3JtYXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGT1JNQVRfWFoKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCkBAIC0xNDMsNyArMTQ0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fbW9kZSBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgogICAgICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCiAgICAgICAgICAgICBlbGlmIHNlbGYuX21vZGUgPT0gX01PREVfV1JJVEU6CiAgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc2VsZi5fY29tcHJlc3Nvci5mbHVzaCgpKQogICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBOb25lCkBAIC0xODcsMTUgKzE4OCwxOCBAQAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpCiAKICAgICBkZWYgX2NoZWNrX2Nhbl9yZWFkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5yZWFkYWJsZSgpOgorICAgICAgICBpZiBzZWxmLl9tb2RlIG5vdCBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCiAgICAgICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbigiRmlsZSBub3Qgb3BlbiBmb3IgcmVhZGluZyIpCiAKICAgICBkZWYgX2NoZWNrX2Nhbl93cml0ZShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYud3JpdGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSAhPSBfTU9ERV9XUklURToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHdyaXRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fc2VlayhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIlNlZWtpbmcgaXMgb25seSBzdXBwb3J0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIGZpbGVzIG9wZW4gZm9yIHJlYWRpbmciKQogICAgICAgICBpZiBub3Qgc2VsZi5fZnAuc2Vla2FibGUoKToKQEAgLTIwNCwxNiArMjA4LDEzIEBACiAKICAgICAjIEZpbGwgdGhlIHJlYWRhaGVhZCBidWZmZXIgaWYgaXQgaXMgZW1wdHkuIFJldHVybnMgRmFsc2Ugb24gRU9GLgogICAgIGRlZiBfZmlsbF9idWZmZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Y6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBEZXBlbmRpbmcgb24gdGhlIGlucHV0IGRhdGEsIG91ciBjYWxsIHRvIHRoZSBkZWNvbXByZXNzb3IgbWF5IG5vdAogICAgICAgICAjIHJldHVybiBhbnkgZGF0YS4gSW4gdGhpcyBjYXNlLCB0cnkgYWdhaW4gYWZ0ZXIgcmVhZGluZyBhbm90aGVyIGJsb2NrLgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YToKLSAgICAgICAgICAgICAgICByYXdibG9jayA9IHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYXdibG9jayA9IHNlbGYuX2ZwLnJlYWQoX0JVRkZFUl9TSVpFKQorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXJfb2Zmc2V0ID09IGxlbihzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgcmF3YmxvY2sgPSAoc2VsZi5fZGVjb21wcmVzc29yLnVudXNlZF9kYXRhIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkpCiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgpAQCAtMjI5LDMwICsyMzAsNDggQEAKICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBMWk1BRGVjb21wcmVzc29yKCoqc2VsZi5faW5pdF9hcmdzKQogCiAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaykKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAjIFJlYWQgZGF0YSB1bnRpbCBFT0YuCiAgICAgIyBJZiByZXR1cm5fZGF0YSBpcyBmYWxzZSwgY29uc3VtZSB0aGUgZGF0YSB3aXRob3V0IHJldHVybmluZyBpdC4KICAgICBkZWYgX3JlYWRfYWxsKHNlbGYsIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIFRoZSBsb29wIGFzc3VtZXMgdGhhdCBfYnVmZmVyX29mZnNldCBpcyAwLiBFbnN1cmUgdGhhdCB0aGlzIGlzIHRydWUuCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKwogICAgICAgICBibG9ja3MgPSBbXQogICAgICAgICB3aGlsZSBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChzZWxmLl9idWZmZXIpCiAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKHNlbGYuX2J1ZmZlcikKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgIHJldHVybiBiIiIuam9pbihibG9ja3MpCiAKICAgICAjIFJlYWQgYSBibG9jayBvZiB1cCB0byBuIGJ5dGVzLgogICAgICMgSWYgcmV0dXJuX2RhdGEgaXMgZmFsc2UsIGNvbnN1bWUgdGhlIGRhdGEgd2l0aG91dCByZXR1cm5pbmcgaXQuCiAgICAgZGVmIF9yZWFkX2Jsb2NrKHNlbGYsIG4sIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIElmIHdlIGhhdmUgZW5vdWdoIGRhdGEgYnVmZmVyZWQsIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICAgICAgZW5kID0gc2VsZi5fYnVmZmVyX29mZnNldCArIG4KKyAgICAgICAgaWYgZW5kIDw9IGxlbihzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDogZW5kXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IGVuZAorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEgaWYgcmV0dXJuX2RhdGEgZWxzZSBOb25lCisKKyAgICAgICAgIyBUaGUgbG9vcCBhc3N1bWVzIHRoYXQgX2J1ZmZlcl9vZmZzZXQgaXMgMC4gRW5zdXJlIHRoYXQgdGhpcyBpcyB0cnVlLgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisKICAgICAgICAgYmxvY2tzID0gW10KICAgICAgICAgd2hpbGUgbiA+IDAgYW5kIHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICBpZiBuIDwgbGVuKHNlbGYuX2J1ZmZlcik6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcls6bl0KLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbbjpdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IG4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKICAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoZGF0YSkKICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKQEAgLTI2Nyw5ICsyODYsOSBAQAogICAgICAgICBUaGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGlzIHVuc3BlY2lmaWVkLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcgorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQogCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KQEAgLTI3OCw3ICsyOTcsNyBAQAogICAgICAgICBSZXR1cm5zIGIiIiBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGF0IEVPRi4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvciBzaXplID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgZWxpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FsbCgpCkBAIC0yOTUsMTggKzMxNCw0MCBAQAogICAgICAgICAjIHRoaXMgZG9lcyBub3QgZ2l2ZSBlbm91Z2ggZGF0YSBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBtYWtlIHByb2dyZXNzLgogICAgICAgICAjIEluIHRoaXMgY2FzZSB3ZSBtYWtlIG11bHRpcGxlIHJlYWRzLCB0byBhdm9pZCByZXR1cm5pbmcgYiIiLgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIChzaXplID09IDAgb3Igc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvcgotICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpOgorICAgICAgICBpZiAoc2l6ZSA9PSAwIG9yCisgICAgICAgICAgICAjIE9ubHkgY2FsbCBfZmlsbF9idWZmZXIoKSBpZiB0aGUgYnVmZmVyIGlzIGFjdHVhbGx5IGVtcHR5LgorICAgICAgICAgICAgIyBUaGlzIGdpdmVzIGEgc2lnbmlmaWNhbnQgc3BlZWR1cCBpZiAqc2l6ZSogaXMgc21hbGwuCisgICAgICAgICAgICAoc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKSBhbmQgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgaWYgMCA8IHNpemUgPCBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbOnNpemVdCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2l6ZTpdCisgICAgICAgIGlmIHNpemUgPiAwOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCArIHNpemVdCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ICs9IGxlbihkYXRhKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQogICAgICAgICByZXR1cm4gZGF0YQogCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAiIiJSZWFkIGEgbGluZSBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KKworICAgICAgICBUaGUgdGVybWluYXRpbmcgbmV3bGluZSAoaWYgcHJlc2VudCkgaXMgcmV0YWluZWQuIElmIHNpemUgaXMKKyAgICAgICAgbm9uLW5lZ2F0aXZlLCBubyBtb3JlIHRoYW4gc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQgKGluIHdoaWNoCisgICAgICAgIGNhc2UgdGhlIGxpbmUgbWF5IGJlIGluY29tcGxldGUpLiBSZXR1cm5zIGInJyBpZiBhbHJlYWR5IGF0IEVPRi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKKyAgICAgICAgIyBTaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIC0gdGhlIHdob2xlIGxpbmUgaXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXIuZmluZChiIlxuIiwgc2VsZi5fYnVmZmVyX29mZnNldCkgKyAxCisgICAgICAgICAgICBpZiBlbmQgPiAwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIHJldHVybiBpby5CdWZmZXJlZElPQmFzZS5yZWFkbGluZShzZWxmLCBzaXplKQorCiAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJXcml0ZSBhIGJ5dGVzIG9iamVjdCB0byB0aGUgZmlsZS4KIApAQCAtMzI2LDcgKzM2Nyw4IEBACiAgICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFECiAgICAgICAgIHNlbGYuX3BvcyA9IDAKICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKIAogICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPTApOgogICAgICAgICAiIiJDaGFuZ2UgdGhlIGZpbGUgcG9zaXRpb24uCkBAIC0zNjUsOCArNDA3LDcgQEAKICAgICAgICAgICAgIG9mZnNldCAtPSBzZWxmLl9wb3MKIAogICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQgZGF0YSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCBwb3NpdGlvbi4KLSAgICAgICAgaWYgc2VsZi5fbW9kZSAhPSBfTU9ERV9SRUFEX0VPRjoKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmVhZF9ibG9jayhvZmZzZXQsIHJldHVybl9kYXRhPUZhbHNlKQogCiAgICAgICAgIHJldHVybiBzZWxmLl9wb3MKIApAQCAtMzgxLDIzICs0MjIsMjUgQEAKICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgogICAgICIiIk9wZW4gYW4gTFpNQS1jb21wcmVzc2VkIGZpbGUgaW4gYmluYXJ5IG9yIHRleHQgbW9kZS4KIAotICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwKLSAgICBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0Ci0gICAgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgorICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMKKyAgICBvYmplY3QpLCBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuCisgICAgZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiAoZGVmYXVsdCksICJ3IiwgIndiIiwgImEiLCBvciAiYWIiIGZvcgotICAgIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiIChkZWZhdWx0KSwgInciLCAid2IiLCAieCIsICJ4YiIsCisgICAgImEiLCBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0Iiwgb3IgImF0IiBmb3IgdGV4dAorICAgIG1vZGUuCiAKLSAgICBUaGUgZm9ybWF0LCBjaGVjaywgcHJlc2V0IGFuZCBmaWx0ZXJzIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbgotICAgIHNldHRpbmdzLCBhcyBmb3IgTFpNQUNvbXByZXNzb3IsIExaTUFEZWNvbXByZXNzb3IgYW5kIExaTUFGaWxlLgorICAgIFRoZSBmb3JtYXQsIGNoZWNrLCBwcmVzZXQgYW5kIGZpbHRlcnMgYXJndW1lbnRzIHNwZWNpZnkgdGhlCisgICAgY29tcHJlc3Npb24gc2V0dGluZ3MsIGFzIGZvciBMWk1BQ29tcHJlc3NvciwgTFpNQURlY29tcHJlc3NvciBhbmQKKyAgICBMWk1BRmlsZS4KIAotICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBMWk1BRmlsZSBjb25zdHJ1Y3RvcjoKLSAgICBMWk1BRmlsZShmaWxlbmFtZSwgbW9kZSwgLi4uKS4gSW4gdGhpcyBjYXNlLCB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQKLSAgICBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KKyAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgTFpNQUZpbGUKKyAgICBjb25zdHJ1Y3RvcjogTFpNQUZpbGUoZmlsZW5hbWUsIG1vZGUsIC4uLikuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIExaTUFGaWxlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgd3JhcHBlZCBpbiBhbgotICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvciBoYW5kbGluZwotICAgIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCisgICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCisgICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAogICAgICIiIgogICAgIGlmICJ0IiBpbiBtb2RlOgpAQCAtNDI3LDcgKzQ3MCw3IEBACiAgICAgUmVmZXIgdG8gTFpNQUNvbXByZXNzb3IncyBkb2NzdHJpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCiAgICAgb3B0aW9uYWwgYXJndW1lbnRzICpmb3JtYXQqLCAqY2hlY2sqLCAqcHJlc2V0KiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3IgaW5zdGVhZC4KICAgICAiIiIKICAgICBjb21wID0gTFpNQUNvbXByZXNzb3IoZm9ybWF0LCBjaGVjaywgcHJlc2V0LCBmaWx0ZXJzKQogICAgIHJldHVybiBjb21wLmNvbXByZXNzKGRhdGEpICsgY29tcC5mbHVzaCgpCkBAIC00MzksNyArNDgyLDcgQEAKICAgICBSZWZlciB0byBMWk1BRGVjb21wcmVzc29yJ3MgZG9jc3RyaW5nIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgIG9wdGlvbmFsIGFyZ3VtZW50cyAqZm9ybWF0KiwgKmNoZWNrKiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhIExaTUFEZWNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BRGVjb21wcmVzc29yIGluc3RlYWQuCiAgICAgIiIiCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgd2hpbGUgVHJ1ZToKZGlmZiAtLWdpdCBhL0xpYi9tYWNwYXRoLnB5IGIvTGliL21hY3BhdGgucHkKaW5kZXggMTYxNWQ5MS4uZDM0ZjllOTQgMTAwNjQ0Ci0tLSBhL0xpYi9tYWNwYXRoLnB5CisrKyBiL0xpYi9tYWNwYXRoLnB5CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL21haWxib3gucHkgYi9MaWIvbWFpbGJveC5weQppbmRleCBkNTlkYWU4Li41ZjU5MWJjIDEwMDY0NAotLS0gYS9MaWIvbWFpbGJveC5weQorKysgYi9MaWIvbWFpbGJveC5weQpAQCAtMjIsOSArMjIsNiBAQAogaW1wb3J0IGlvCiBpbXBvcnQgY29udGV4dGxpYgogdHJ5OgotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnb3MyZW14JzoKLSAgICAgICAgIyBPUy8yIEVNWCBmY250bCgpIG5vdCBhZGVxdWF0ZQotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgogICAgIGltcG9ydCBmY250bAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGZjbnRsID0gTm9uZQpAQCAtMzQxLDExICszMzgsOCBAQAogICAgICAgICAjIFRoaXMgb3ZlcnJpZGVzIGFuIGluYXBwbGljYWJsZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgc3VwZXJjbGFzcy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5yZW1vdmUoa2V5KQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGV4Y2VwdCAoS2V5RXJyb3IsIEZpbGVOb3RGb3VuZEVycm9yKToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCBtZXNzYWdlKToKICAgICAgICAgIiIiUmVwbGFjZSB0aGUga2V5ZWQgbWVzc2FnZTsgcmFpc2UgS2V5RXJyb3IgaWYgaXQgZG9lc24ndCBleGlzdC4iIiIKQEAgLTM3NywxNCArMzcxLDExIEBACiAgICAgZGVmIGdldF9tZXNzYWdlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIE1lc3NhZ2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKICAgICAgICAgc3VicGF0aCA9IHNlbGYuX2xvb2t1cChrZXkpCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJwYXRoKSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YnBhdGgpLCAncmInKSBhcyBmOgogICAgICAgICAgICAgaWYgc2VsZi5fZmFjdG9yeToKICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KGYpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1zZyA9IE1haWxkaXJNZXNzYWdlKGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc3ViZGlyLCBuYW1lID0gb3MucGF0aC5zcGxpdChzdWJwYXRoKQogICAgICAgICBtc2cuc2V0X3N1YmRpcihzdWJkaXIpCiAgICAgICAgIGlmIHNlbGYuY29sb24gaW4gbmFtZToKQEAgLTM5NCwxMSArMzg1LDggQEAKIAogICAgIGRlZiBnZXRfYnl0ZXMoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgYnl0ZXMgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKLSAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2xvb2t1cChrZXkpKSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2xvb2t1cChrZXkpKSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKS5yZXBsYWNlKGxpbmVzZXAsIGInXG4nKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgZmlsZS1saWtlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCkBAIC01MTAsMTYgKzQ5OCwxMiBAQAogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICd0bXAnLCB1bmlxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zdGF0KHBhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICBNYWlsZGlyLl9jb3VudCArPSAxCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NyZWF0ZV9jYXJlZnVsbHkocGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIE1haWxkaXIuX2NvdW50ICs9IDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gX2NyZWF0ZV9jYXJlZnVsbHkocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICMgRmFsbCB0aHJvdWdoIHRvIGhlcmUgaWYgc3RhdCBzdWNjZWVkZWQgb3Igb3BlbiByYWlzZWQgRUVYSVNULgogICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ05hbWUgY2xhc2ggcHJldmVudGVkIGZpbGUgY3JlYXRpb246ICVzJyAlCkBAIC01OTYsNyArNTgwLDcgQEAKICAgICAgICAgTWFpbGJveC5fX2luaXRfXyhzZWxmLCBwYXRoLCBmYWN0b3J5LCBjcmVhdGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgaWYgY3JlYXRlOgogICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAnd2IrJykKQEAgLTYzOSw4ICs2MjMsNyBAQAogICAgIGRlZiBpdGVya2V5cyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIga2V5cy4iIiIKICAgICAgICAgc2VsZi5fbG9va3VwKCkKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl90b2Mua2V5cygpOgotICAgICAgICAgICAgeWllbGQga2V5CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fdG9jLmtleXMoKQogCiAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUga2V5ZWQgbWVzc2FnZSBleGlzdHMsIEZhbHNlIG90aGVyd2lzZS4iIiIKQEAgLTcxOCwxMyArNzAxLDkgQEAKICAgICAgICAgb3MuY2htb2QobmV3X2ZpbGUubmFtZSwgbW9kZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVFWElTVCBvciBcCi0gICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCi0gICAgICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5fcGF0aCkKKyAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQogICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKICAgICAgICAgc2VsZi5fdG9jID0gbmV3X3RvYwogICAgICAgICBzZWxmLl9wZW5kaW5nID0gRmFsc2UKQEAgLTEwMDEsNyArOTgwLDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwMTUsNyArOTk0LDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwNDEsMTIgKzEwMjAsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwNTQsOCArMTAzMyw2IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZm9yIG5hbWUsIGtleV9saXN0IGluIHNlbGYuZ2V0X3NlcXVlbmNlcygpLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBrZXkgaW4ga2V5X2xpc3Q6CiAgICAgICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShuYW1lKQpAQCAtMTA2OCwxMiArMTA0NSwxMiBAQAogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYisnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGY6CiAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgX2xvY2tfZmlsZShmKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTA4MSwxNCArMTA1OCwxMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgZmlsZS1saWtlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTIwODEsNyArMjA1Niw3IEBACiAgICAgICAgIGlmIGZjbnRsOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFHQUlOLCBlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdsb2NrZjogbG9jayB1bmF2YWlsYWJsZTogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKQEAgLTIwOTEsNyArMjA2Niw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJlX2xvY2sgPSBfY3JlYXRlX3RlbXBvcmFyeShmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgIHByZV9sb2NrLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRVJPRlMpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gICMgV2l0aG91dCB3cml0ZSBhY2Nlc3MsIGp1c3Qgc2tpcCBkb3Rsb2NraW5nLgogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yMTA0LDE0ICsyMDc5LDEwIEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHByZV9sb2NrLm5hbWUsIGYubmFtZSArICcubG9jaycpCiAgICAgICAgICAgICAgICAgICAgIGRvdGxvY2tfZG9uZSA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FRVhJU1Qgb3IgXAotICAgICAgICAgICAgICAgICAgKG9zLm5hbWUgPT0gJ29zMicgYW5kIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTKToKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHByZV9sb2NrLm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignZG90IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHByZV9sb2NrLm5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdkb3QgbG9jayB1bmF2YWlsYWJsZTogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQogICAgIGV4Y2VwdDoKICAgICAgICAgaWYgZmNudGw6CiAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX1VOKQpkaWZmIC0tZ2l0IGEvTGliL21haWxjYXAucHkgYi9MaWIvbWFpbGNhcC5weQppbmRleCA5OWY0OTU4Li5iZDYxYjBiIDEwMDY0NAotLS0gYS9MaWIvbWFpbGNhcC5weQorKysgYi9MaWIvbWFpbGNhcC5weQpAQCAtMjAsNyArMjAsNyBAQAogICAgIGZvciBtYWlsY2FwIGluIGxpc3RtYWlsY2FwZmlsZXMoKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSBvcGVuKG1haWxjYXAsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgbW9yZWNhcHMgPSByZWFkbWFpbGNhcGZpbGUoZnApCiAgICAgICAgIGZwLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9taW1ldHlwZXMucHkgYi9MaWIvbWltZXR5cGVzLnB5CmluZGV4IDNlNzQyYTcuLmQ3MTYxZjggMTAwNjQ0Ci0tLSBhL0xpYi9taW1ldHlwZXMucHkKKysrIGIvTGliL21pbWV0eXBlcy5weQpAQCAtMzYxLDcgKzM2MSw3IEBACiBkZWYgcmVhZF9taW1lX3R5cGVzKGZpbGUpOgogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICBkYiA9IE1pbWVUeXBlcygpCiAgICAgZGIucmVhZGZwKGYsIFRydWUpCmRpZmYgLS1naXQgYS9MaWIvbW9kdWxlZmluZGVyLnB5IGIvTGliL21vZHVsZWZpbmRlci5weQppbmRleCBhMTk3YTBkLi5lYmQwNjhhIDEwMDY0NAotLS0gYS9MaWIvbW9kdWxlZmluZGVyLnB5CisrKyBiL0xpYi9tb2R1bGVmaW5kZXIucHkKQEAgLTEsMTMgKzEsMTYgQEAKICIiIkZpbmQgbW9kdWxlcyB1c2VkIGJ5IGEgc2NyaXB0LCB1c2luZyBpbnRyb3NwZWN0aW9uLiIiIgogCiBpbXBvcnQgZGlzCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IG1hcnNoYWwKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCiBpbXBvcnQgc3RydWN0CitpbXBvcnQgd2FybmluZ3MKK3dpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgaW1wb3J0IGltcAogCiAjIFhYWCBDbGVhbiB1cCBvbmNlIHN0cjgncyBjc3RvciBtYXRjaGVzIGJ5dGVzLgogTE9BRF9DT05TVCA9IGJ5dGVzKFtkaXMub3BuYW1lLmluZGV4KCdMT0FEX0NPTlNUJyldKQpAQCAtMjI5LDcgKzIzMiw3IEBACiAgICAgICAgIGZvciBkaXIgaW4gbS5fX3BhdGhfXzoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5tc2coMiwgImNhbid0IGxpc3QgZGlyZWN0b3J5IiwgZGlyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CmluZGV4IDFmM2U2N2MuLjg2ZGY2MzggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQpAQCAtOCwyNjAgKzgsMzEgQEAKICMgc3VicGFja2FnZSAnbXVsdGlwcm9jZXNzaW5nLmR1bW15JyBoYXMgdGhlIHNhbWUgQVBJIGJ1dCBpcyBhIHNpbXBsZQogIyB3cmFwcGVyIGZvciAndGhyZWFkaW5nJy4KICMKLSMgVHJ5IGNhbGxpbmcgYG11bHRpcHJvY2Vzc2luZy5kb2MubWFpbigpYCB0byByZWFkIHRoZSBodG1sCi0jIGRvY3VtZW50YXRpb24gaW4gYSB3ZWJicm93c2VyLgotIwotIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX192ZXJzaW9uX18gPSAnMC43MGExJwotCi1fX2FsbF9fID0gWwotICAgICdQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nLCAnZnJlZXplX3N1cHBvcnQnLAotICAgICdNYW5hZ2VyJywgJ1BpcGUnLCAnY3B1X2NvdW50JywgJ2xvZ190b19zdGRlcnInLCAnZ2V0X2xvZ2dlcicsCi0gICAgJ2FsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcnLCAnQnVmZmVyVG9vU2hvcnQnLCAnVGltZW91dEVycm9yJywKLSAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLAotICAgICdFdmVudCcsICdCYXJyaWVyJywgJ1F1ZXVlJywgJ1NpbXBsZVF1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLCAnUG9vbCcsCi0gICAgJ1ZhbHVlJywgJ0FycmF5JywgJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAotICAgIF0KLQotX19hdXRob3JfXyA9ICdSLiBPdWRrZXJrIChyLm0ub3Vka2Vya0BnbWFpbC5jb20pJwotCi0jCi0jIEltcG9ydHMKLSMKLQotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBTVUJERUJVRywgU1VCV0FSTklORworZnJvbSAuIGltcG9ydCBjb250ZXh0CiAKICMKLSMgRXhjZXB0aW9ucworIyBDb3B5IHN0dWZmIGZyb20gZGVmYXVsdCBjb250ZXh0CiAjCiAKLWNsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKK2dsb2JhbHMoKS51cGRhdGUoKG5hbWUsIGdldGF0dHIoY29udGV4dC5fZGVmYXVsdF9jb250ZXh0LCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18pCitfX2FsbF9fID0gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18KIAogIwotIyBEZWZpbml0aW9ucyBub3QgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIFhYWCBUaGVzZSBzaG91bGQgbm90IHJlYWxseSBiZSBkb2N1bWVudGVkIG9yIHB1YmxpYy4KICMKIAotZGVmIE1hbmFnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgbWFuYWdlciBhc3NvY2lhdGVkIHdpdGggYSBydW5uaW5nIHNlcnZlciBwcm9jZXNzCi0KLSAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKLSAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCi0gICAgbSA9IFN5bmNNYW5hZ2VyKCkKLSAgICBtLnN0YXJ0KCkKLSAgICByZXR1cm4gbQotCi1kZWYgUGlwZShkdXBsZXg9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKLSAgICByZXR1cm4gUGlwZShkdXBsZXgpCi0KLWRlZiBjcHVfY291bnQoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtCi0gICAgJycnCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IGludChvcy5lbnZpcm9uWydOVU1CRVJfT0ZfUFJPQ0VTU09SUyddKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEtleUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLSAgICBlbGlmICdic2QnIGluIHN5cy5wbGF0Zm9ybSBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgIGNvbW0gPSAnL3NiaW4vc3lzY3RsIC1uIGh3Lm5jcHUnCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIGNvbW0gPSAnL3VzcicgKyBjb21tCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3MucG9wZW4oY29tbSkgYXMgcDoKLSAgICAgICAgICAgICAgICBudW0gPSBpbnQocC5yZWFkKCkpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgbnVtID0gMAotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IG9zLnN5c2NvbmYoJ1NDX05QUk9DRVNTT1JTX09OTE4nKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLQotICAgIGlmIG51bSA+PSAxOgotICAgICAgICByZXR1cm4gbnVtCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCi0KLWRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICcnJwotICAgIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KLSAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KLSAgICAnJycKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGZyZWV6ZV9zdXBwb3J0Ci0gICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLQotZGVmIGdldF9sb2dnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuIGl0IGlzIGNyZWF0ZWQKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCi0gICAgcmV0dXJuIGdldF9sb2dnZXIoKQotCi1kZWYgbG9nX3RvX3N0ZGVycihsZXZlbD1Ob25lKToKLSAgICAnJycKLSAgICBUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycgotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKLSAgICByZXR1cm4gbG9nX3RvX3N0ZGVycihsZXZlbCkKLQotZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoKToKLSAgICAnJycKLSAgICBJbnN0YWxsIHN1cHBvcnQgZm9yIHNlbmRpbmcgY29ubmVjdGlvbnMgYW5kIHNvY2tldHMgYmV0d2VlbiBwcm9jZXNzZXMKLSAgICAnJycKLSAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCi0gICAgIyBpdHMgb25seSBlZmZlY3Qgd2FzIHRvIG1ha2Ugc29ja2V0IG9iamVjdHMgaW5oZXJpdGFibGUgb24gV2luZG93cy4KLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KK1NVQkRFQlVHID0gNQorU1VCV0FSTklORyA9IDI1CiAKICMKLSMgRGVmaW5pdGlvbnMgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIEFsaWFzIGZvciBtYWluIG1vZHVsZSAtLSB3aWxsIGJlIHJlc2V0IGJ5IGJvb3RzdHJhcHBpbmcgY2hpbGQgcHJvY2Vzc2VzCiAjCiAKLWRlZiBMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jawotICAgIHJldHVybiBMb2NrKCkKLQotZGVmIFJMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHJlY3Vyc2l2ZSBsb2NrIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBSTG9jawotICAgIHJldHVybiBSTG9jaygpCi0KLWRlZiBDb25kaXRpb24obG9jaz1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBDb25kaXRpb24KLSAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2spCi0KLWRlZiBTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHNlbWFwaG9yZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCi0gICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSkKLQotZGVmIEJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCi0gICAgcmV0dXJuIEJvdW5kZWRTZW1hcGhvcmUodmFsdWUpCi0KLWRlZiBFdmVudCgpOgotICAgICcnJwotICAgIFJldHVybnMgYW4gZXZlbnQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50Ci0gICAgcmV0dXJuIEV2ZW50KCkKLQotZGVmIEJhcnJpZXIocGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEJhcnJpZXIKLSAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQpCi0KLWRlZiBRdWV1ZShtYXhzaXplPTApOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFF1ZXVlCi0gICAgcmV0dXJuIFF1ZXVlKG1heHNpemUpCi0KLWRlZiBKb2luYWJsZVF1ZXVlKG1heHNpemU9MCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHF1ZXVlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQotICAgIHJldHVybiBKb2luYWJsZVF1ZXVlKG1heHNpemUpCi0KLWRlZiBTaW1wbGVRdWV1ZSgpOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgcmV0dXJuIFNpbXBsZVF1ZXVlKCkKLQotZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgUG9vbAotICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzLCBtYXh0YXNrc3BlcmNoaWxkKQotCi1kZWYgUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQotICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKLQotZGVmIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgYXJyYXkKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5Ci0gICAgcmV0dXJuIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpCi0KLWRlZiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFZhbHVlCi0gICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2spCi0KLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQotICAgIHJldHVybiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCBsb2NrPWxvY2spCi0KLSMKLSMKLSMKLQotaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGUoZXhlY3V0YWJsZSk6Ci0gICAgICAgICcnJwotICAgICAgICBTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KLSAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgaW5zdGVhZCBvZiBzeXMuZXhlY3V0YWJsZS4KLSAgICAgICAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IHNldF9leGVjdXRhYmxlCi0gICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCi0KLSAgICBfX2FsbF9fICs9IFsnc2V0X2V4ZWN1dGFibGUnXQoraWYgJ19fbWFpbl9fJyBpbiBzeXMubW9kdWxlczoKKyAgICBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKaW5kZXggMmEwYmMyZi4uOGFkNmZkNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQpAQCAtMTIsOCArMTIsNiBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBwaWNrbGUKLWltcG9ydCBzZWxlY3QKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBlcnJubwpAQCAtMjIsOSArMjAsMTMgQEAKIGltcG9ydCBpdGVydG9vbHMKIAogaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MsIEF1dGhlbnRpY2F0aW9uRXJyb3IsIEJ1ZmZlclRvb1Nob3J0Ci1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBnZXRfdGVtcF9kaXIsIEZpbmFsaXplLCBzdWJfZGVidWcsIGRlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBGb3JraW5nUGlja2xlcgorCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK2Zyb20gLiBpbXBvcnQgQXV0aGVudGljYXRpb25FcnJvciwgQnVmZmVyVG9vU2hvcnQKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKKwogdHJ5OgogICAgIGltcG9ydCBfd2luYXBpCiAgICAgZnJvbSBfd2luYXBpIGltcG9ydCBXQUlUX09CSkVDVF8wLCBXQUlUX1RJTUVPVVQsIElORklOSVRFCkBAIC03Miw3ICs3NCw3IEBACiAgICAgaWYgZmFtaWx5ID09ICdBRl9JTkVUJzoKICAgICAgICAgcmV0dXJuICgnbG9jYWxob3N0JywgMCkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9Z2V0X3RlbXBfZGlyKCkpCisgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfUElQRSc6CiAgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHljLSVkLSVkLScgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5nZXRwaWQoKSwgbmV4dChfbW1hcF9jb3VudGVyKSkpCkBAIC0xMzIsMjIgKzEzNCwyMiBAQAogCiAgICAgZGVmIF9jaGVja19jbG9zZWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiaGFuZGxlIGlzIGNsb3NlZCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJoYW5kbGUgaXMgY2xvc2VkIikKIAogICAgIGRlZiBfY2hlY2tfcmVhZGFibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNvbm5lY3Rpb24gaXMgd3JpdGUtb25seSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjb25uZWN0aW9uIGlzIHdyaXRlLW9ubHkiKQogCiAgICAgZGVmIF9jaGVja193cml0YWJsZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX3dyaXRhYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQogCiAgICAgZGVmIF9iYWRfbWVzc2FnZV9sZW5ndGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3dyaXRhYmxlOgogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgY2xvc2VkKHNlbGYpOgpAQCAtMjAyLDkgKzIwNCw3IEBACiAgICAgICAgICIiIlNlbmQgYSAocGlja2xhYmxlKSBvYmplY3QiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfd3JpdGFibGUoKQotICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIoYnVmLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkuZHVtcChvYmopCi0gICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLl9zZW5kX2J5dGVzKEZvcmtpbmdQaWNrbGVyLmR1bXBzKG9iaikpCiAKICAgICBkZWYgcmVjdl9ieXRlcyhzZWxmLCBtYXhsZW5ndGg9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMjQ5LDcgKzI0OSw3IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrX3JlYWRhYmxlKCkKICAgICAgICAgYnVmID0gc2VsZi5fcmVjdl9ieXRlcygpCi0gICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICByZXR1cm4gRm9ya2luZ1BpY2tsZXIubG9hZHMoYnVmLmdldGJ1ZmZlcigpKQogCiAgICAgZGVmIHBvbGwoc2VsZiwgdGltZW91dD0wLjApOgogICAgICAgICAiIiJXaGV0aGVyIHRoZXJlIGlzIGFueSBpbnB1dCBhdmFpbGFibGUgdG8gYmUgcmVhZCIiIgpAQCAtMzE3LDcgKzMxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYKICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXJyID09IF93aW5hcGkuRVJST1JfTU9SRV9EQVRBOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfbW9yZV9kYXRhKG92LCBtYXhzaXplKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSBfd2luYXBpLkVSUk9SX0JST0tFTl9QSVBFOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTM4OSw3ICszODksNyBAQAogICAgICAgICAgICAgICAgIGlmIHJlbWFpbmluZyA9PSBzaXplOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImdvdCBlbmQgb2YgZmlsZSBkdXJpbmcgbWVzc2FnZSIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImdvdCBlbmQgb2YgZmlsZSBkdXJpbmcgbWVzc2FnZSIpCiAgICAgICAgICAgICBidWYud3JpdGUoY2h1bmspCiAgICAgICAgICAgICByZW1haW5pbmcgLT0gbgogICAgICAgICByZXR1cm4gYnVmCkBAIC00NDksNyArNDQ5LDcgQEAKICAgICAgICAgUmV0dXJucyBhIGBDb25uZWN0aW9uYCBvYmplY3QuCiAgICAgICAgICcnJwogICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignbGlzdGVuZXIgaXMgY2xvc2VkJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2xpc3RlbmVyIGlzIGNsb3NlZCcpCiAgICAgICAgIGMgPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQogICAgICAgICBpZiBzZWxmLl9hdXRoa2V5OgogICAgICAgICAgICAgZGVsaXZlcl9jaGFsbGVuZ2UoYywgc2VsZi5fYXV0aGtleSkKQEAgLTUzNSw3ICs1MzUsOSBAQAogICAgICAgICAgICAgX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSwKICAgICAgICAgICAgIF93aW5hcGkuUElQRV9UWVBFX01FU1NBR0UgfCBfd2luYXBpLlBJUEVfUkVBRE1PREVfTUVTU0FHRSB8CiAgICAgICAgICAgICBfd2luYXBpLlBJUEVfV0FJVCwKLSAgICAgICAgICAgIDEsIG9ic2l6ZSwgaWJzaXplLCBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwKKyAgICAgICAgICAgIDEsIG9ic2l6ZSwgaWJzaXplLCBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLAorICAgICAgICAgICAgIyBkZWZhdWx0IHNlY3VyaXR5IGRlc2NyaXB0b3I6IHRoZSBoYW5kbGUgY2Fubm90IGJlIGluaGVyaXRlZAorICAgICAgICAgICAgX3dpbmFwaS5OVUxMCiAgICAgICAgICAgICApCiAgICAgICAgIGgyID0gX3dpbmFwaS5DcmVhdGVGaWxlKAogICAgICAgICAgICAgYWRkcmVzcywgYWNjZXNzLCAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKQEAgLTU4MCw3ICs1ODIsNyBAQAogICAgICAgICBzZWxmLl9sYXN0X2FjY2VwdGVkID0gTm9uZQogCiAgICAgICAgIGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgICAgICBzZWxmLl91bmxpbmsgPSBGaW5hbGl6ZSgKKyAgICAgICAgICAgIHNlbGYuX3VubGluayA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICAgICAgc2VsZiwgb3MudW5saW5rLCBhcmdzPShhZGRyZXNzLCksIGV4aXRwcmlvcml0eT0wCiAgICAgICAgICAgICAgICAgKQogICAgICAgICBlbHNlOgpAQCAtNjI4LDggKzYzMCw4IEBACiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcXVldWUgPSBbc2VsZi5fbmV3X2hhbmRsZShmaXJzdD1UcnVlKV0KIAogICAgICAgICAgICAgc2VsZi5fbGFzdF9hY2NlcHRlZCA9IE5vbmUKLSAgICAgICAgICAgIHN1Yl9kZWJ1ZygnbGlzdGVuZXIgY3JlYXRlZCB3aXRoIGFkZHJlc3M9JXInLCBzZWxmLl9hZGRyZXNzKQotICAgICAgICAgICAgc2VsZi5jbG9zZSA9IEZpbmFsaXplKAorICAgICAgICAgICAgdXRpbC5zdWJfZGVidWcoJ2xpc3RlbmVyIGNyZWF0ZWQgd2l0aCBhZGRyZXNzPSVyJywgc2VsZi5fYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgICAgIHNlbGYsIFBpcGVMaXN0ZW5lci5fZmluYWxpemVfcGlwZV9saXN0ZW5lciwKICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLl9oYW5kbGVfcXVldWUsIHNlbGYuX2FkZHJlc3MpLCBleGl0cHJpb3JpdHk9MAogICAgICAgICAgICAgICAgICkKQEAgLTY3MSw3ICs2NzMsNyBAQAogCiAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgZGVmIF9maW5hbGl6ZV9waXBlX2xpc3RlbmVyKHF1ZXVlLCBhZGRyZXNzKToKLSAgICAgICAgICAgIHN1Yl9kZWJ1ZygnY2xvc2luZyBsaXN0ZW5lciB3aXRoIGFkZHJlc3M9JXInLCBhZGRyZXNzKQorICAgICAgICAgICAgdXRpbC5zdWJfZGVidWcoJ2Nsb3NpbmcgbGlzdGVuZXIgd2l0aCBhZGRyZXNzPSVyJywgYWRkcmVzcykKICAgICAgICAgICAgIGZvciBoYW5kbGUgaW4gcXVldWU6CiAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoYW5kbGUpCiAKQEAgLTY4OCw3ICs2OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKICAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgX3dpbmFwaS5OVUxMCiAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciBub3QgaW4gKF93aW5hcGkuRVJST1JfU0VNX1RJTUVPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuRVJST1JfUElQRV9CVVNZKSBvciBfY2hlY2tfdGltZW91dCh0KToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTcxNyw3ICs3MTksNyBAQAogICAgIGFzc2VydCBpc2luc3RhbmNlKGF1dGhrZXksIGJ5dGVzKQogICAgIG1lc3NhZ2UgPSBvcy51cmFuZG9tKE1FU1NBR0VfTEVOR1RIKQogICAgIGNvbm5lY3Rpb24uc2VuZF9ieXRlcyhDSEFMTEVOR0UgKyBtZXNzYWdlKQotICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UpLmRpZ2VzdCgpCisgICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSwgJ21kNScpLmRpZ2VzdCgpCiAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgIyByZWplY3QgbGFyZ2UgbWVzc2FnZQogICAgIGlmIHJlc3BvbnNlID09IGRpZ2VzdDoKICAgICAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKFdFTENPTUUpCkBAIC03MzEsNyArNzMzLDcgQEAKICAgICBtZXNzYWdlID0gY29ubmVjdGlvbi5yZWN2X2J5dGVzKDI1NikgICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgYXNzZXJ0IG1lc3NhZ2VbOmxlbihDSEFMTEVOR0UpXSA9PSBDSEFMTEVOR0UsICdtZXNzYWdlID0gJXInICUgbWVzc2FnZQogICAgIG1lc3NhZ2UgPSBtZXNzYWdlW2xlbihDSEFMTEVOR0UpOl0KLSAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlKS5kaWdlc3QoKQorICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UsICdtZDUnKS5kaWdlc3QoKQogICAgIGNvbm5lY3Rpb24uc2VuZF9ieXRlcyhkaWdlc3QpCiAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgIyByZWplY3QgbGFyZ2UgbWVzc2FnZQogICAgIGlmIHJlc3BvbnNlICE9IFdFTENPTUU6CkBAIC04NzQsMjggKzg3NiwxNSBAQAogCiBlbHNlOgogCi0gICAgaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gaW50KHRpbWVvdXQgKiAxMDAwKSAgIyB0aW1lb3V0IGlzIGluIG1pbGxpc2Vjb25kcwotICAgICAgICAgICAgZmRfbWFwID0ge30KLSAgICAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKLSAgICAgICAgICAgICAgICBwb2xsc3Rlci5yZWdpc3RlcihmZCwgc2VsZWN0LlBPTExJTikKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZkLCAnZmlsZW5vJyk6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZC5maWxlbm8oKV0gPSBmZAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZF0gPSBmZAotICAgICAgICAgICAgbHMgPSBbXQotICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBwb2xsc3Rlci5wb2xsKHRpbWVvdXQpOgotICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgc2VsZWN0LlBPTExOVkFMOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciAlaScgJSBmZCkKLSAgICAgICAgICAgICAgICBscy5hcHBlbmQoZmRfbWFwW2ZkXSkKLSAgICAgICAgICAgIHJldHVybiBscwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGVjdC5zZWxlY3QoZmRzLCBbXSwgW10sIHRpbWVvdXQpWzBdCisgICAgaW1wb3J0IHNlbGVjdG9ycwogCisgICAgIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZQorICAgICMgZGVzY3JpcHRvciwgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZQorICAgICMgc3lzY2FsbCkuCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgX1dhaXRTZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBfV2FpdFNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAKICAgICBkZWYgd2FpdChvYmplY3RfbGlzdCwgdGltZW91dD1Ob25lKToKICAgICAgICAgJycnCkBAIC05MDMsMzQgKzg5Miw1NCBAQAogCiAgICAgICAgIFJldHVybnMgbGlzdCBvZiB0aG9zZSBvYmplY3RzIGluIG9iamVjdF9saXN0IHdoaWNoIGFyZSByZWFkeS9yZWFkYWJsZS4KICAgICAgICAgJycnCi0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9wb2xsKG9iamVjdF9saXN0LCAwKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBfcG9sbChvYmplY3RfbGlzdCwgdGltZW91dCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd2l0aCBfV2FpdFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBmb3Igb2JqIGluIG9iamVjdF9saXN0OgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKG9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LmZpbGVvYmogZm9yIChrZXksIGV2ZW50cykgaW4gcmVhZHldCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKIAogIwogIyBNYWtlIGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIHNoYXJhYmxlIGlmIHBvc3NpYmxlCiAjCiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9jb25uZWN0aW9uKQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKFBpcGVDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGhhbmRsZSA9IGNvbm4uZmlsZW5vKCkKKyAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGhhbmRsZSwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCisgICAgICAgICAgICBkcyA9IHJlc291cmNlX3NoYXJlci5EdXBTb2NrZXQocykKKyAgICAgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkcywgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRzLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y2VfY29ubmVjdGlvbikKKworICAgIGRlZiByZWR1Y2VfcGlwZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBhY2Nlc3MgPSAoKF93aW5hcGkuRklMRV9HRU5FUklDX1JFQUQgaWYgY29ubi5yZWFkYWJsZSBlbHNlIDApIHwKKyAgICAgICAgICAgICAgICAgIChfd2luYXBpLkZJTEVfR0VORVJJQ19XUklURSBpZiBjb25uLndyaXRhYmxlIGVsc2UgMCkpCisgICAgICAgIGRoID0gcmVkdWN0aW9uLkR1cEhhbmRsZShjb25uLmZpbGVubygpLCBhY2Nlc3MpCisgICAgICAgIHJldHVybiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbiwgKGRoLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQorICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihQaXBlQ29ubmVjdGlvbiwgcmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKwogZWxzZToKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGRmID0gcmVkdWN0aW9uLkR1cEZkKGNvbm4uZmlsZW5vKCkpCisgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRmLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBmZCA9IGRmLmRldGFjaCgpCisgICAgICAgIHJldHVybiBDb25uZWN0aW9uKGZkLCByZWFkYWJsZSwgd3JpdGFibGUpCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjZV9jb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODQ5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2NvbnRleHQucHkKQEAgLTAsMCArMSwzNDggQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKKworX19hbGxfXyA9IFtdICAgICAgICAgICAgIyB0aGluZ3MgYXJlIGNvcGllZCBmcm9tIGhlcmUgdG8gX19pbml0X18ucHkKKworIworIyBFeGNlcHRpb25zCisjCisKK2NsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworIworIyBCYXNlIHR5cGUgZm9yIGNvbnRleHRzCisjCisKK2NsYXNzIEJhc2VDb250ZXh0KG9iamVjdCk6CisKKyAgICBQcm9jZXNzRXJyb3IgPSBQcm9jZXNzRXJyb3IKKyAgICBCdWZmZXJUb29TaG9ydCA9IEJ1ZmZlclRvb1Nob3J0CisgICAgVGltZW91dEVycm9yID0gVGltZW91dEVycm9yCisgICAgQXV0aGVudGljYXRpb25FcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3IKKworICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QocHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4pCisKKyAgICBkZWYgY3B1X2NvdW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtJycnCisgICAgICAgIG51bSA9IG9zLmNwdV9jb3VudCgpCisgICAgICAgIGlmIG51bSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbnVtCisKKyAgICBkZWYgTWFuYWdlcihzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIGEgcnVubmluZyBzZXJ2ZXIgcHJvY2VzcworCisgICAgICAgIFRoZSBtYW5hZ2VycyBtZXRob2RzIHN1Y2ggYXMgYExvY2soKWAsIGBDb25kaXRpb24oKWAgYW5kIGBRdWV1ZSgpYAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5tYW5hZ2VycyBpbXBvcnQgU3luY01hbmFnZXIKKyAgICAgICAgbSA9IFN5bmNNYW5hZ2VyKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisgICAgICAgIG0uc3RhcnQoKQorICAgICAgICByZXR1cm4gbQorCisgICAgZGVmIFBpcGUoc2VsZiwgZHVwbGV4PVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIHR3byBjb25uZWN0aW9uIG9iamVjdCBjb25uZWN0ZWQgYnkgYSBwaXBlJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKKyAgICAgICAgcmV0dXJuIFBpcGUoZHVwbGV4KQorCisgICAgZGVmIExvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBub24tcmVjdXJzaXZlIGxvY2sgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBMb2NrCisgICAgICAgIHJldHVybiBMb2NrKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUkxvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSByZWN1cnNpdmUgbG9jayBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IFJMb2NrCisgICAgICAgIHJldHVybiBSTG9jayhjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIENvbmRpdGlvbihzZWxmLCBsb2NrPU5vbmUpOgorICAgICAgICAnJydSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQ29uZGl0aW9uCisgICAgICAgIHJldHVybiBDb25kaXRpb24obG9jaywgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBTZW1hcGhvcmUoc2VsZiwgdmFsdWU9MSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBTZW1hcGhvcmUKKyAgICAgICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBCb3VuZGVkU2VtYXBob3JlKHNlbGYsIHZhbHVlPTEpOgorICAgICAgICAnJydSZXR1cm5zIGEgYm91bmRlZCBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCisgICAgICAgIHJldHVybiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEV2ZW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGFuIGV2ZW50IG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgRXZlbnQKKyAgICAgICAgcmV0dXJuIEV2ZW50KGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQmFycmllcihzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCYXJyaWVyCisgICAgICAgIHJldHVybiBCYXJyaWVyKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgUXVldWUKKyAgICAgICAgcmV0dXJuIFF1ZXVlKG1heHNpemUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgSm9pbmFibGVRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQorICAgICAgICByZXR1cm4gSm9pbmFibGVRdWV1ZShtYXhzaXplLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFNpbXBsZVF1ZXVlKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKKyAgICAgICAgcmV0dXJuIFNpbXBsZVF1ZXVlKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUG9vbChzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksCisgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIHByb2Nlc3MgcG9vbCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAucG9vbCBpbXBvcnQgUG9vbAorICAgICAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUmF3VmFsdWUoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2hhcmVkIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd1ZhbHVlCisgICAgICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKKworICAgIGRlZiBSYXdBcnJheShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNoYXJlZCBhcnJheScnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5CisgICAgICAgIHJldHVybiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKQorCisgICAgZGVmIFZhbHVlKHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZQorICAgICAgICByZXR1cm4gVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9bG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQXJyYXkoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgYXJyYXknJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQorICAgICAgICByZXR1cm4gQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgbG9jaz1sb2NrLAorICAgICAgICAgICAgICAgICAgICAgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBmcmVlemVfc3VwcG9ydChzZWxmKToKKyAgICAgICAgJycnQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgZmFrZSBmb3JrZWQgcHJvY2VzcyBpbiBhIGZyb3plbiBleGVjdXRhYmxlLgorICAgICAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKKyAgICAgICAgICAgIGZyb20gLnNwYXduIGltcG9ydCBmcmVlemVfc3VwcG9ydAorICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorCisgICAgZGVmIGdldF9sb2dnZXIoc2VsZik6CisgICAgICAgICcnJ1JldHVybiBwYWNrYWdlIGxvZ2dlciAtLSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHRoZW4KKyAgICAgICAgaXQgaXMgY3JlYXRlZC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGdldF9sb2dnZXIKKyAgICAgICAgcmV0dXJuIGdldF9sb2dnZXIoKQorCisgICAgZGVmIGxvZ190b19zdGRlcnIoc2VsZiwgbGV2ZWw9Tm9uZSk6CisgICAgICAgICcnJ1R1cm4gb24gbG9nZ2luZyBhbmQgYWRkIGEgaGFuZGxlciB3aGljaCBwcmludHMgdG8gc3RkZXJyJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKKyAgICAgICAgcmV0dXJuIGxvZ190b19zdGRlcnIobGV2ZWwpCisKKyAgICBkZWYgYWxsb3dfY29ubmVjdGlvbl9waWNrbGluZyhzZWxmKToKKyAgICAgICAgJycnSW5zdGFsbCBzdXBwb3J0IGZvciBzZW5kaW5nIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzCisgICAgICAgIGJldHdlZW4gcHJvY2Vzc2VzCisgICAgICAgICcnJworICAgICAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICMgaXRzIG9ubHkgZWZmZWN0IHdhcyB0byBtYWtlIHNvY2tldCBvYmplY3RzIGluaGVyaXRhYmxlIG9uIFdpbmRvd3MuCisgICAgICAgIGZyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorCisgICAgZGVmIHNldF9leGVjdXRhYmxlKHNlbGYsIGV4ZWN1dGFibGUpOgorICAgICAgICAnJydTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KKyAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIGluc3RlYWQgb2Ygc3lzLmV4ZWN1dGFibGUgd2hlbiB1c2luZyB0aGUgJ3NwYXduJworICAgICAgICBzdGFydCBtZXRob2QuICBVc2VmdWwgZm9yIHBlb3BsZSBlbWJlZGRpbmcgUHl0aG9uLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAuc3Bhd24gaW1wb3J0IHNldF9leGVjdXRhYmxlCisgICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCisKKyAgICBkZWYgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChzZWxmLCBtb2R1bGVfbmFtZXMpOgorICAgICAgICAnJydTZXQgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdG8gdHJ5IHRvIGxvYWQgaW4gZm9ya3NlcnZlciBwcm9jZXNzLgorICAgICAgICBUaGlzIGlzIHJlYWxseSBqdXN0IGEgaGludC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLmZvcmtzZXJ2ZXIgaW1wb3J0IHNldF9mb3Jrc2VydmVyX3ByZWxvYWQKKyAgICAgICAgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChtb2R1bGVfbmFtZXMpCisKKyAgICBkZWYgZ2V0X2NvbnRleHQoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN0eCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBmaW5kIGNvbnRleHQgZm9yICVyJyAlIG1ldGhvZCkKKyAgICAgICAgY3R4Ll9jaGVja19hdmFpbGFibGUoKQorICAgICAgICByZXR1cm4gY3R4CisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBzZXRfc3RhcnRfbWV0aG9kKHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IHNldCBzdGFydCBtZXRob2Qgb2YgY29uY3JldGUgY29udGV4dCcpCisKKyAgICBkZWYgX2NoZWNrX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgcGFzcworCisjCisjIFR5cGUgb2YgZGVmYXVsdCBjb250ZXh0IC0tIHVuZGVybHlpbmcgY29udGV4dCBjYW4gYmUgc2V0IGF0IG1vc3Qgb25jZQorIworCitjbGFzcyBQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgIF9zdGFydF9tZXRob2QgPSBOb25lCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICByZXR1cm4gX2RlZmF1bHRfY29udGV4dC5nZXRfY29udGV4dCgpLlByb2Nlc3MuX1BvcGVuKHByb2Nlc3Nfb2JqKQorCitjbGFzcyBEZWZhdWx0Q29udGV4dChCYXNlQ29udGV4dCk6CisgICAgUHJvY2VzcyA9IFByb2Nlc3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0KToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9jb250ZXh0ID0gY29udGV4dAorICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IE5vbmUKKworICAgIGRlZiBnZXRfY29udGV4dChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuX2RlZmF1bHRfY29udGV4dAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FjdHVhbF9jb250ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgc2V0X3N0YXJ0X21ldGhvZChzZWxmLCBtZXRob2QsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgbm90IE5vbmUgYW5kIG5vdCBmb3JjZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuIHNldCcpCisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lIGFuZCBmb3JjZToKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGFsbG93X25vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5fZGVmYXVsdF9jb250ZXh0CisgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfY29udGV4dC5fbmFtZQorCisgICAgZGVmIGdldF9hbGxfc3RhcnRfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICByZXR1cm4gWydzcGF3biddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorICAgICAgICAgICAgaWYgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3biddCisKK0RlZmF1bHRDb250ZXh0Ll9fYWxsX18gPSBsaXN0KHggZm9yIHggaW4gZGlyKERlZmF1bHRDb250ZXh0KSBpZiB4WzBdICE9ICdfJykKKworIworIyBDb250ZXh0IHR5cGVzIGZvciBmaXhlZCBzdGFydCBtZXRob2QKKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisKKyAgICBjbGFzcyBGb3JrUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdmb3JrJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fZm9yayBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdzcGF3bicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX3NwYXduX3Bvc2l4IGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgRm9ya1NlcnZlclByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX2ZvcmtzZXJ2ZXIgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBGb3JrQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ2ZvcmsnCisgICAgICAgIFByb2Nlc3MgPSBGb3JrUHJvY2VzcworCisgICAgY2xhc3MgU3Bhd25Db250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnc3Bhd24nCisgICAgICAgIFByb2Nlc3MgPSBTcGF3blByb2Nlc3MKKworICAgIGNsYXNzIEZvcmtTZXJ2ZXJDb250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgUHJvY2VzcyA9IEZvcmtTZXJ2ZXJQcm9jZXNzCisgICAgICAgIGRlZiBfY2hlY2tfYXZhaWxhYmxlKHNlbGYpOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KKyAgICAgICAgICAgIGlmIG5vdCByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmb3Jrc2VydmVyIHN0YXJ0IG1ldGhvZCBub3QgYXZhaWxhYmxlJykKKworICAgIF9jb25jcmV0ZV9jb250ZXh0cyA9IHsKKyAgICAgICAgJ2ZvcmsnOiBGb3JrQ29udGV4dCgpLAorICAgICAgICAnc3Bhd24nOiBTcGF3bkNvbnRleHQoKSwKKyAgICAgICAgJ2ZvcmtzZXJ2ZXInOiBGb3JrU2VydmVyQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydmb3JrJ10pCisKK2Vsc2U6CisKKyAgICBjbGFzcyBTcGF3blByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9zcGF3bl93aW4zMiBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ3NwYXduJworICAgICAgICBQcm9jZXNzID0gU3Bhd25Qcm9jZXNzCisKKyAgICBfY29uY3JldGVfY29udGV4dHMgPSB7CisgICAgICAgICdzcGF3bic6IFNwYXduQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydzcGF3biddKQorCisjCisjIEZvcmNlIHRoZSBzdGFydCBtZXRob2QKKyMKKworZGVmIF9mb3JjZV9zdGFydF9tZXRob2QobWV0aG9kKToKKyAgICBfZGVmYXVsdF9jb250ZXh0Ll9hY3R1YWxfY29udGV4dCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisKKyMKKyMgQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgaXMgc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCisjCisKK190bHMgPSB0aHJlYWRpbmcubG9jYWwoKQorCitkZWYgZ2V0X3NwYXduaW5nX3BvcGVuKCk6CisgICAgcmV0dXJuIGdldGF0dHIoX3RscywgJ3NwYXduaW5nX3BvcGVuJywgTm9uZSkKKworZGVmIHNldF9zcGF3bmluZ19wb3Blbihwb3Blbik6CisgICAgX3Rscy5zcGF3bmluZ19wb3BlbiA9IHBvcGVuCisKK2RlZiBhc3NlcnRfc3Bhd25pbmcob2JqKToKKyAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAnJXMgb2JqZWN0cyBzaG91bGQgb25seSBiZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMnCisgICAgICAgICAgICAnIHRocm91Z2ggaW5oZXJpdGFuY2UnICUgdHlwZShvYmopLl9fbmFtZV9fCisgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQppbmRleCBlMzFmYzYxLi45N2Y3YWY3IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKICMKICMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCi0jICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0jICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotIyBTVUNIIERBTUFHRS4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCiBfX2FsbF9fID0gWwpAQCAtNDcsNyArMjIsNyBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBhcnJheQogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uIGltcG9ydCBQaXBlCitmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlCiBmcm9tIHRocmVhZGluZyBpbXBvcnQgTG9jaywgUkxvY2ssIFNlbWFwaG9yZSwgQm91bmRlZFNlbWFwaG9yZQogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IEV2ZW50LCBDb25kaXRpb24sIEJhcnJpZXIKIGZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCkBAIC0xMzgsNyArMTEzLDcgQEAKICAgICBwYXNzCiAKIGRlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6Ci0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAorICAgIGZyb20gLi5wb29sIGltcG9ydCBUaHJlYWRQb29sCiAgICAgcmV0dXJuIFRocmVhZFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCiAKIEpvaW5hYmxlUXVldWUgPSBRdWV1ZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CmluZGV4IDg3NGVjOGUuLjY5NGVmOTYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQogIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0jIFNVQ0ggREFNQUdFLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKIF9fYWxsX18gPSBbICdDbGllbnQnLCAnTGlzdGVuZXInLCAnUGlwZScgXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzkzMjM3Li4wMDAwMDAwCi0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NCArMCwwIEBACi0jCi0jIE1vZHVsZSBmb3Igc3RhcnRpbmcgYSBwcm9jZXNzIG9iamVjdCB1c2luZyBvcy5mb3JrKCkgb3IgQ3JlYXRlUHJvY2VzcygpCi0jCi0jIG11bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5Ci0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzaWduYWwKLWltcG9ydCBlcnJubwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgdXRpbCwgcHJvY2VzcwotCi1fX2FsbF9fID0gWydQb3BlbicsICdhc3NlcnRfc3Bhd25pbmcnLCAnZHVwbGljYXRlJywgJ2Nsb3NlJywgJ0ZvcmtpbmdQaWNrbGVyJ10KLQotIwotIyBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHRocmVhZCBpcyBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKLSMKLQotZGVmIGFzc2VydF9zcGF3bmluZyhzZWxmKToKLSAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICclcyBvYmplY3RzIHNob3VsZCBvbmx5IGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcycKLSAgICAgICAgICAgICcgdGhyb3VnaCBpbmhlcml0YW5jZScgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCi0gICAgICAgICAgICApCi0KLSMKLSMgVHJ5IG1ha2luZyBzb21lIGNhbGxhYmxlIHR5cGVzIHBpY2tsYWJsZQotIwotCi1mcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlcgotZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQotCi1jbGFzcyBGb3JraW5nUGlja2xlcihQaWNrbGVyKToKLSAgICBfZXh0cmFfcmVkdWNlcnMgPSB7fQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIFBpY2tsZXIuX19pbml0X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBkaXNwYXRjaF90YWJsZS5jb3B5KCkKLSAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZS51cGRhdGUoc2VsZi5fZXh0cmFfcmVkdWNlcnMpCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHJlZ2lzdGVyKGNscywgdHlwZSwgcmVkdWNlKToKLSAgICAgICAgY2xzLl9leHRyYV9yZWR1Y2Vyc1t0eXBlXSA9IHJlZHVjZQotCi1kZWYgX3JlZHVjZV9tZXRob2QobSk6Ci0gICAgaWYgbS5fX3NlbGZfXyBpcyBOb25lOgotICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19jbGFzc19fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX3NlbGZfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKLWNsYXNzIF9DOgotICAgIGRlZiBmKHNlbGYpOgotICAgICAgICBwYXNzCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKF9DKCkuZiksIF9yZWR1Y2VfbWV0aG9kKQotCi0KLWRlZiBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKG0pOgotICAgIHJldHVybiBnZXRhdHRyLCAobS5fX29iamNsYXNzX18sIG0uX19uYW1lX18pCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKGxpc3QuYXBwZW5kKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUoaW50Ll9fYWRkX18pLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQotCi10cnk6Ci0gICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfcmVkdWNlX3BhcnRpYWwocCk6Ci0gICAgICAgIHJldHVybiBfcmVidWlsZF9wYXJ0aWFsLCAocC5mdW5jLCBwLmFyZ3MsIHAua2V5d29yZHMgb3Ige30pCi0gICAgZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgotICAgICAgICByZXR1cm4gcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihwYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCi0KLSMKLSMgVW5peAotIwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICBkdXBsaWNhdGUgPSBvcy5kdXAKLSAgICBjbG9zZSA9IG9zLmNsb3NlCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0KLSAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKLSAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSByCi0KLSAgICAgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICBpZiBzZWxmLnBpZCA9PSAwOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCi0gICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KLSAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQotICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKLSAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQotCi0gICAgICAgICAgICAjIGB3YCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBjaGlsZCBleGl0cywgYXQgd2hpY2ggcG9pbnQgYHJgCi0gICAgICAgICAgICAjIHdpbGwgYmVjb21lIHJlYWR5IGZvciByZWFkaW5nICh1c2luZyBlLmcuIHNlbGVjdCgpKS4KLSAgICAgICAgICAgIG9zLmNsb3NlKHcpCi0gICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAociwpKQotCi0gICAgICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotIwotIyBXaW5kb3dzCi0jCi0KLWVsc2U6Ci0gICAgaW1wb3J0IF90aHJlYWQKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgaW1wb3J0IF93aW5hcGkKLQotICAgIGZyb20gcGlja2xlIGltcG9ydCBsb2FkLCBISUdIRVNUX1BST1RPQ09MCi0KLSAgICBkZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUpOgotICAgICAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIFRFUk1JTkFURSA9IDB4MTAwMDAKLSAgICBXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQotICAgIFdJTlNFUlZJQ0UgPSBzeXMuZXhlY3V0YWJsZS5sb3dlcigpLmVuZHN3aXRoKCJweXRob25zZXJ2aWNlLmV4ZSIpCi0KLSAgICBjbG9zZSA9IF93aW5hcGkuQ2xvc2VIYW5kbGUKLQotICAgICMKLSAgICAjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgotICAgICMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCi0gICAgIwotCi0gICAgaWYgV0lOU0VSVklDRToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9uLmV4ZScpCi0gICAgZWxzZToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQotCi0gICAgZGVmIHNldF9leGVjdXRhYmxlKGV4ZSk6Ci0gICAgICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQotICAgICAgICBfcHl0aG9uX2V4ZSA9IGV4ZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgZHVwbGljYXRlKGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3M9Tm9uZSwgaW5oZXJpdGFibGU9RmFsc2UpOgotICAgICAgICBpZiB0YXJnZXRfcHJvY2VzcyBpcyBOb25lOgotICAgICAgICAgICAgdGFyZ2V0X3Byb2Nlc3MgPSBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCkKLSAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAotICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCBoYW5kbGUsIHRhcmdldF9wcm9jZXNzLAotICAgICAgICAgICAgMCwgaW5oZXJpdGFibGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTCi0gICAgICAgICAgICApCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0gICAgICAgICcnJwotICAgICAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIF90bHMgPSBfdGhyZWFkLl9sb2NhbCgpCi0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKCciJXMiJyAlIHggZm9yIHggaW4gZ2V0X2NvbW1hbmRfbGluZSgpKQotICAgICAgICAgICAgcHJlcF9kYXRhID0gZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCi0KLSAgICAgICAgICAgICMgY3JlYXRlIHBpcGUgZm9yIGNvbW11bmljYXRpb24gd2l0aCBjaGlsZAotICAgICAgICAgICAgcmZkLCB3ZmQgPSBvcy5waXBlKCkKLQotICAgICAgICAgICAgIyBnZXQgaGFuZGxlIGZvciByZWFkIGVuZCBvZiB0aGUgcGlwZSBhbmQgbWFrZSBpdCBpbmhlcml0YWJsZQotICAgICAgICAgICAgcmhhbmRsZSA9IGR1cGxpY2F0ZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShyZmQpLCBpbmhlcml0YWJsZT1UcnVlKQotICAgICAgICAgICAgb3MuY2xvc2UocmZkKQotCi0gICAgICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgotICAgICAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgICAgICAgICAgICAgICAgIF9weXRob25fZXhlLCBjbWQgKyAoJyAlcycgJSByaGFuZGxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIDEsIDAsIE5vbmUsIE5vbmUsIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBjbG9zZShyaGFuZGxlKQotCi0gICAgICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCi0gICAgICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKLSAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKLSAgICAgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaW50KGhwKQotICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKLQotICAgICAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAotICAgICAgICAgICAgICAgIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUgPSBpbnQoaHApCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQsIEhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgICAgIGR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkLCBISUdIRVNUX1BST1RPQ09MKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihQb3Blbi5fdGxzLCAncHJvY2Vzc19oYW5kbGUnLCBOb25lKSBpcyBub3QgTm9uZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoaGFuZGxlKToKLSAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGUoaGFuZGxlLCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlKQotCi0gICAgICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gX3dpbmFwaS5JTkZJTklURQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCi0KLSAgICAgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3QoaW50KHNlbGYuX2hhbmRsZSksIG1zZWNzKQotICAgICAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gVEVSTUlOQVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCi0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQotCi0gICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF93aW5hcGkuVGVybWluYXRlUHJvY2VzcyhpbnQoc2VsZi5faGFuZGxlKSwgVEVSTUlOQVRFKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgaXNfZm9ya2luZyhhcmd2KToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZwotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3YpID49IDIgYW5kIGFyZ3ZbMV0gPT0gJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnOgotICAgICAgICAgICAgYXNzZXJ0IGxlbihhcmd2KSA9PSAzCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLQotICAgIGRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgotICAgICAgICAgICAgbWFpbigpCi0gICAgICAgICAgICBzeXMuZXhpdCgpCi0KLQotICAgIGRlZiBnZXRfY29tbWFuZF9saW5lKCk6Ci0gICAgICAgICcnJwotICAgICAgICBSZXR1cm5zIHByZWZpeCBvZiBjb21tYW5kIGxpbmUgdXNlZCBmb3Igc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCi0gICAgICAgICcnJwotICAgICAgICBpZiBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJycKLSAgICAgICAgICAgIEF0dGVtcHQgdG8gc3RhcnQgYSBuZXcgcHJvY2VzcyBiZWZvcmUgdGhlIGN1cnJlbnQgcHJvY2VzcwotICAgICAgICAgICAgaGFzIGZpbmlzaGVkIGl0cyBib290c3RyYXBwaW5nIHBoYXNlLgotCi0gICAgICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBvbiBXaW5kb3dzIGFuZCB5b3UgaGF2ZQotICAgICAgICAgICAgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tIGluIHRoZSBtYWluIG1vZHVsZToKLQotICAgICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLSAgICAgICAgICAgICAgICAgICAgLi4uCi0KLSAgICAgICAgICAgIFRoZSAiZnJlZXplX3N1cHBvcnQoKSIgbGluZSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgcHJvZ3JhbQotICAgICAgICAgICAgaXMgbm90IGdvaW5nIHRvIGJlIGZyb3plbiB0byBwcm9kdWNlIGEgV2luZG93cyBleGVjdXRhYmxlLicnJykKLQotICAgICAgICBpZiBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBbc3lzLmV4ZWN1dGFibGUsICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb2cgPSAnZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgbWFpbjsgbWFpbigpJwotICAgICAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgICAgICByZXR1cm4gW19weXRob25fZXhlXSArIG9wdHMgKyBbJy1jJywgcHJvZywgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQotCi0KLSAgICBkZWYgbWFpbigpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgc3BlY2lmaWVkIGJ5IGRhdGEgcmVjZWl2ZWQgb3ZlciBwaXBlCi0gICAgICAgICcnJwotICAgICAgICBhc3NlcnQgaXNfZm9ya2luZyhzeXMuYXJndikKLQotICAgICAgICBoYW5kbGUgPSBpbnQoc3lzLmFyZ3ZbLTFdKQotICAgICAgICBmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShoYW5kbGUsIG9zLk9fUkRPTkxZKQotICAgICAgICBmcm9tX3BhcmVudCA9IG9zLmZkb3BlbihmZCwgJ3JiJykKLQotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQotICAgICAgICBwcmVwYXJhdGlvbl9kYXRhID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQotICAgICAgICBzZWxmID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZnJvbV9wYXJlbnQuY2xvc2UoKQotCi0gICAgICAgIGV4aXRjb2RlID0gc2VsZi5fYm9vdHN0cmFwKCkKLSAgICAgICAgc3lzLmV4aXQoZXhpdGNvZGUpCi0KLQotICAgIGRlZiBnZXRfcHJlcGFyYXRpb25fZGF0YShuYW1lKToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiBpbmZvIGFib3V0IHBhcmVudCBuZWVkZWQgYnkgY2hpbGQgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IF9sb2dnZXIsIF9sb2dfdG9fc3RkZXJyCi0KLSAgICAgICAgZCA9IGRpY3QoCi0gICAgICAgICAgICBuYW1lPW5hbWUsCi0gICAgICAgICAgICBzeXNfcGF0aD1zeXMucGF0aCwKLSAgICAgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAotICAgICAgICAgICAgbG9nX3RvX3N0ZGVycj1fbG9nX3RvX3N0ZGVyciwKLSAgICAgICAgICAgIG9yaWdfZGlyPXByb2Nlc3MuT1JJR0lOQUxfRElSLAotICAgICAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXksCi0gICAgICAgICAgICApCi0KLSAgICAgICAgaWYgX2xvZ2dlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gX2xvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCi0KLSAgICAgICAgaWYgbm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0U6Ci0gICAgICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQotICAgICAgICAgICAgaWYgbm90IG1haW5fcGF0aCBhbmQgc3lzLmFyZ3ZbMF0gbm90IGluICgnJywgJy1jJyk6Ci0gICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gc3lzLmFyZ3ZbMF0KLSAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gb3MucGF0aC5qb2luKHByb2Nlc3MuT1JJR0lOQUxfRElSLCBtYWluX3BhdGgpCi0gICAgICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKLQotICAgICAgICByZXR1cm4gZAotCi0jCi0jIFByZXBhcmUgY3VycmVudCBwcm9jZXNzCi0jCi0KLW9sZF9tYWluX21vZHVsZXMgPSBbXQotCi1kZWYgcHJlcGFyZShkYXRhKToKLSAgICAnJycKLSAgICBUcnkgdG8gZ2V0IGN1cnJlbnQgcHJvY2VzcyByZWFkeSB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAotICAgICcnJwotICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKHN5cy5tb2R1bGVzWydfX21haW5fXyddKQotCi0gICAgaWYgJ25hbWUnIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQotCi0gICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2F1dGhrZXkgPSBkYXRhWydhdXRoa2V5J10KLQotICAgIGlmICdsb2dfdG9fc3RkZXJyJyBpbiBkYXRhIGFuZCBkYXRhWydsb2dfdG9fc3RkZXJyJ106Ci0gICAgICAgIHV0aWwubG9nX3RvX3N0ZGVycigpCi0KLSAgICBpZiAnbG9nX2xldmVsJyBpbiBkYXRhOgotICAgICAgICB1dGlsLmdldF9sb2dnZXIoKS5zZXRMZXZlbChkYXRhWydsb2dfbGV2ZWwnXSkKLQotICAgIGlmICdzeXNfcGF0aCcgaW4gZGF0YToKLSAgICAgICAgc3lzLnBhdGggPSBkYXRhWydzeXNfcGF0aCddCi0KLSAgICBpZiAnc3lzX2FyZ3YnIGluIGRhdGE6Ci0gICAgICAgIHN5cy5hcmd2ID0gZGF0YVsnc3lzX2FyZ3YnXQotCi0gICAgaWYgJ2RpcicgaW4gZGF0YToKLSAgICAgICAgb3MuY2hkaXIoZGF0YVsnZGlyJ10pCi0KLSAgICBpZiAnb3JpZ19kaXInIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSID0gZGF0YVsnb3JpZ19kaXInXQotCi0gICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKLSAgICAgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKLSAgICAgICAgIyBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIF9fZmlsZV9fCi0gICAgICAgICMgYW5kIGEgbW9kdWxlJ3MgcmVhbCBuYW1lLiBTZWUgUEVQIDMwMiBhbmQgaXNzdWUgIzEwODQ1Ci0gICAgICAgIG1haW5fcGF0aCA9IGRhdGFbJ21haW5fcGF0aCddCi0gICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpKVswXQotICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKLSAgICAgICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpCi0KLSAgICAgICAgaWYgbWFpbl9uYW1lID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCi0gICAgICAgICAgICBtYWluX21vZHVsZS5fX2ZpbGVfXyA9IG1haW5fcGF0aAotICAgICAgICBlbGlmIG1haW5fbmFtZSAhPSAnaXB5dGhvbic6Ci0gICAgICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQotICAgICAgICAgICAgIyBjb250YWluIGFkZGl0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBzdGlsbCBiZSBleGVjdXRlZAotICAgICAgICAgICAgaW1wb3J0IGltcAotCi0gICAgICAgICAgICBpZiBtYWluX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkaXJzID0gTm9uZQotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkuc3RhcnRzd2l0aCgnX19pbml0X18ucHknKToKLSAgICAgICAgICAgICAgICBkaXJzID0gW29zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSldCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCldCi0KLSAgICAgICAgICAgIGFzc2VydCBtYWluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzLCBtYWluX25hbWUKLSAgICAgICAgICAgIGZpbGUsIHBhdGhfbmFtZSwgZXRjID0gaW1wLmZpbmRfbW9kdWxlKG1haW5fbmFtZSwgZGlycykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFdlIHdvdWxkIGxpa2UgdG8gZG8gImltcC5sb2FkX21vZHVsZSgnX19tYWluX18nLCAuLi4pIgotICAgICAgICAgICAgICAgICMgaGVyZS4gIEhvd2V2ZXIsIHRoYXQgd291bGQgY2F1c2UgJ2lmIF9fbmFtZV9fID09Ci0gICAgICAgICAgICAgICAgIyAiX19tYWluX18iJyBjbGF1c2VzIHRvIGJlIGV4ZWN1dGVkLgotICAgICAgICAgICAgICAgIG1haW5fbW9kdWxlID0gaW1wLmxvYWRfbW9kdWxlKAotICAgICAgICAgICAgICAgICAgICAnX19wYXJlbnRzX21haW5fXycsIGZpbGUsIHBhdGhfbmFtZSwgZXRjCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gbWFpbl9tb2R1bGUKLSAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fbmFtZV9fID0gJ19fbWFpbl9fJwotCi0gICAgICAgICAgICAjIFRyeSB0byBtYWtlIHRoZSBwb3RlbnRpYWxseSBwaWNrbGFibGUgb2JqZWN0cyBpbgotICAgICAgICAgICAgIyBzeXMubW9kdWxlc1snX19tYWluX18nXSByZWFsaXplIHRoZXkgYXJlIGluIHRoZSBtYWluCi0gICAgICAgICAgICAjIG1vZHVsZSAtLSBzb21ld2hhdCB1Z2x5LgotICAgICAgICAgICAgZm9yIG9iaiBpbiBsaXN0KG1haW5fbW9kdWxlLl9fZGljdF9fLnZhbHVlcygpKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9iai5fX21vZHVsZV9fID09ICdfX3BhcmVudHNfbWFpbl9fJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX21vZHVsZV9fID0gJ19fbWFpbl9fJwotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc1MTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsMjY3IEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydlbnN1cmVfcnVubmluZycsICdnZXRfaW5oZXJpdGVkX2ZkcycsICdjb25uZWN0X3RvX25ld19wcm9jZXNzJywKKyAgICAgICAgICAgJ3NldF9mb3Jrc2VydmVyX3ByZWxvYWQnXQorCisjCisjCisjCisKK01BWEZEU19UT19TRU5EID0gMjU2CitVTlNJR05FRF9TVFJVQ1QgPSBzdHJ1Y3QuU3RydWN0KCdRJykgICAgICMgbGFyZ2UgZW5vdWdoIGZvciBwaWRfdAorCisjCisjIEZvcmtzZXJ2ZXIgY2xhc3MKKyMKKworY2xhc3MgRm9ya1NlcnZlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBOb25lCisgICAgICAgIHNlbGYuX2luaGVyaXRlZF9mZHMgPSBOb25lCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyA9IFsnX19tYWluX18nXQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlc19uYW1lcyk6CisgICAgICAgICcnJ1NldCBsaXN0IG9mIG1vZHVsZSBuYW1lcyB0byB0cnkgdG8gbG9hZCBpbiBmb3Jrc2VydmVyIHByb2Nlc3MuJycnCisgICAgICAgIGlmIG5vdCBhbGwodHlwZShtb2QpIGlzIHN0ciBmb3IgbW9kIGluIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZV9uYW1lcyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzJykKKyAgICAgICAgc2VsZi5fcHJlbG9hZF9tb2R1bGVzID0gbW9kdWxlc19uYW1lcworCisgICAgZGVmIGdldF9pbmhlcml0ZWRfZmRzKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gbGlzdCBvZiBmZHMgaW5oZXJpdGVkIGZyb20gcGFyZW50IHByb2Nlc3MuCisKKyAgICAgICAgVGhpcyByZXR1cm5zIE5vbmUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyB3YXMgbm90IHN0YXJ0ZWQgYnkgZm9yaworICAgICAgICBzZXJ2ZXIuCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gc2VsZi5faW5oZXJpdGVkX2ZkcworCisgICAgZGVmIGNvbm5lY3RfdG9fbmV3X3Byb2Nlc3Moc2VsZiwgZmRzKToKKyAgICAgICAgJycnUmVxdWVzdCBmb3Jrc2VydmVyIHRvIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MuCisKKyAgICAgICAgUmV0dXJucyBhIHBhaXIgb2YgZmRzIChzdGF0dXNfciwgZGF0YV93KS4gIFRoZSBjYWxsaW5nIHByb2Nlc3MgY2FuIHJlYWQKKyAgICAgICAgdGhlIGNoaWxkIHByb2Nlc3MncyBwaWQgYW5kIChldmVudHVhbGx5KSBpdHMgcmV0dXJuY29kZSBmcm9tIHN0YXR1c19yLgorICAgICAgICBUaGUgY2FsbGluZyBwcm9jZXNzIHNob3VsZCB3cml0ZSB0byBkYXRhX3cgdGhlIHBpY2tsZWQgcHJlcGFyYXRpb24gYW5kCisgICAgICAgIHByb2Nlc3MgZGF0YS4KKyAgICAgICAgJycnCisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBpZiBsZW4oZmRzKSArIDQgPj0gTUFYRkRTX1RPX1NFTkQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0b28gbWFueSBmZHMnKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpIGFzIGNsaWVudDoKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgYWxsZmRzID0gW2NoaWxkX3IsIGNoaWxkX3csIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKV0KKyAgICAgICAgICAgIGFsbGZkcyArPSBmZHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZGZkcyhjbGllbnQsIGFsbGZkcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50X3IsIHBhcmVudF93CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3cpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfcikKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF93KQorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBhIGZvcmsgc2VydmVyIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHByb2Nlc3MuICBOb3RlIHRoYXQgdXN1YWxseSBhIGNoaWxkCisgICAgICAgIHByb2Nlc3Mgd2lsbCBqdXN0IHJldXNlIHRoZSBmb3Jrc2VydmVyIHN0YXJ0ZWQgYnkgaXRzIHBhcmVudCwgc28KKyAgICAgICAgZW5zdXJlX3J1bm5pbmcoKSB3aWxsIGRvIG5vdGhpbmcuCisgICAgICAgICcnJworICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5lbnN1cmVfcnVubmluZygpCisgICAgICAgICAgICBpZiBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBjbWQgPSAoJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtzZXJ2ZXIgaW1wb3J0IG1haW47ICcgKworICAgICAgICAgICAgICAgICAgICdtYWluKCVkLCAlZCwgJXIsICoqJXIpJykKKworICAgICAgICAgICAgaWYgc2VsZi5fcHJlbG9hZF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlc2lyZWRfa2V5cyA9IHsnbWFpbl9wYXRoJywgJ3N5c19wYXRoJ30KKyAgICAgICAgICAgICAgICBkYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEoJ2lnbm9yZScpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRpY3QoKHgseSkgZm9yICh4LHkpIGluIGRhdGEuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHggaW4gZGVzaXJlZF9rZXlzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0ge30KKworICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKSBhcyBsaXN0ZW5lcjoKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gY29ubmVjdGlvbi5hcmJpdHJhcnlfYWRkcmVzcygnQUZfVU5JWCcpCisgICAgICAgICAgICAgICAgbGlzdGVuZXIuYmluZChhZGRyZXNzKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGFkZHJlc3MsIDBvNjAwKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbigxMDApCisKKyAgICAgICAgICAgICAgICAjIGFsbCBjbGllbnQgcHJvY2Vzc2VzIG93biB0aGUgd3JpdGUgZW5kIG9mIHRoZSAiYWxpdmUiIHBpcGU7CisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZXkgYWxsIHRlcm1pbmF0ZSB0aGUgcmVhZCBlbmQgYmVjb21lcyByZWFkeS4KKyAgICAgICAgICAgICAgICBhbGl2ZV9yLCBhbGl2ZV93ID0gb3MucGlwZSgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfcl0KKyAgICAgICAgICAgICAgICAgICAgY21kICU9IChsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfciwgc2VsZi5fcHJlbG9hZF9tb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtleGVdICsgdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyArPSBbJy1jJywgY21kXQorICAgICAgICAgICAgICAgICAgICBwaWQgPSB1dGlsLnNwYXdudl9wYXNzZmRzKGV4ZSwgYXJncywgZmRzX3RvX3Bhc3MpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShhbGl2ZV93KQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGFsaXZlX3IpCisgICAgICAgICAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICAgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBhbGl2ZV93CisKKyMKKyMKKyMKKworZGVmIG1haW4obGlzdGVuZXJfZmQsIGFsaXZlX3IsIHByZWxvYWQsIG1haW5fcGF0aD1Ob25lLCBzeXNfcGF0aD1Ob25lKToKKyAgICAnJydSdW4gZm9ya3NlcnZlci4nJycKKyAgICBpZiBwcmVsb2FkOgorICAgICAgICBpZiAnX19tYWluX18nIGluIHByZWxvYWQgYW5kIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Bhd24uaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlbCBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nCisgICAgICAgIGZvciBtb2RuYW1lIGluIHByZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgY2xvc2Ugc3lzLnN0ZGluCisgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBpZ25vcmluZyBTSUdDSExEIG1lYW5zIG5vIG5lZWQgdG8gcmVhcCB6b21iaWUgcHJvY2Vzc2VzCisgICAgaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgZmlsZW5vPWxpc3RlbmVyX2ZkKSBhcyBsaXN0ZW5lciwgXAorICAgICAgICAgc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICBfZm9ya3NlcnZlci5fZm9ya3NlcnZlcl9hZGRyZXNzID0gbGlzdGVuZXIuZ2V0c29ja25hbWUoKQorCisgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKGxpc3RlbmVyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoYWxpdmVfciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZmRzID0gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHNlbGVjdG9yLnNlbGVjdCgpXQorICAgICAgICAgICAgICAgICAgICBpZiByZmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGFsaXZlX3IgaW4gcmZkczoKKyAgICAgICAgICAgICAgICAgICAgIyBFT0YgYmVjYXVzZSBubyBtb3JlIGNsaWVudCBwcm9jZXNzZXMgbGVmdAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucmVhZChhbGl2ZV9yLCAxKSA9PSBiJycKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxpc3RlbmVyIGluIHJmZHMKKyAgICAgICAgICAgICAgICB3aXRoIGxpc3RlbmVyLmFjY2VwdCgpWzBdIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLmZvcmsoKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKworICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpOgorICAgICMgY2xvc2UgdW5uZWNlc3Nhcnkgc3R1ZmYgYW5kIHJlc2V0IFNJR0NITEQgaGFuZGxlcgorICAgIGxpc3RlbmVyLmNsb3NlKCkKKyAgICBvcy5jbG9zZShhbGl2ZV9yKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIGhhbmRsZXIpCisKKyAgICAjIHJlY2VpdmUgZmRzIGZyb20gcGFyZW50IHByb2Nlc3MKKyAgICBmZHMgPSByZWR1Y3Rpb24ucmVjdmZkcyhzLCBNQVhGRFNfVE9fU0VORCArIDEpCisgICAgcy5jbG9zZSgpCisgICAgYXNzZXJ0IGxlbihmZHMpIDw9IE1BWEZEU19UT19TRU5ECisgICAgKGNoaWxkX3IsIGNoaWxkX3csIF9mb3Jrc2VydmVyLl9mb3Jrc2VydmVyX2FsaXZlX2ZkLAorICAgICBzdGZkLCAqX2ZvcmtzZXJ2ZXIuX2luaGVyaXRlZF9mZHMpID0gZmRzCisgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHN0ZmQKKworICAgICMgc2VuZCBwaWQgdG8gY2xpZW50IHByb2Nlc3NlcworICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIG9zLmdldHBpZCgpKQorCisgICAgIyByZXNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICByYW5kb20uc2VlZCgpCisKKyAgICAjIHJ1biBwcm9jZXNzIG9iamVjdCByZWNlaXZlZCBvdmVyIHBpcGUKKyAgICBjb2RlID0gc3Bhd24uX21haW4oY2hpbGRfcikKKworICAgICMgd3JpdGUgdGhlIGV4aXQgY29kZSB0byB0aGUgcGlwZQorICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIGNvZGUpCisKKyMKKyMgUmVhZCBhbmQgd3JpdGUgdW5zaWduZWQgbnVtYmVycworIworCitkZWYgcmVhZF91bnNpZ25lZChmZCk6CisgICAgZGF0YSA9IGInJworICAgIGxlbmd0aCA9IFVOU0lHTkVEX1NUUlVDVC5zaXplCisgICAgd2hpbGUgbGVuKGRhdGEpIDwgbGVuZ3RoOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKGZkLCBsZW5ndGggLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ3VuZXhwZWN0ZWQgRU9GJykKKyAgICAgICAgZGF0YSArPSBzCisgICAgcmV0dXJuIFVOU0lHTkVEX1NUUlVDVC51bnBhY2soZGF0YSlbMF0KKworZGVmIHdyaXRlX3Vuc2lnbmVkKGZkLCBuKToKKyAgICBtc2cgPSBVTlNJR05FRF9TVFJVQ1QucGFjayhuKQorICAgIHdoaWxlIG1zZzoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShmZCwgbXNnKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuYnl0ZXMgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBnZXQgaGVyZScpCisgICAgICAgIG1zZyA9IG1zZ1tuYnl0ZXM6XQorCisjCisjCisjCisKK19mb3Jrc2VydmVyID0gRm9ya1NlcnZlcigpCitlbnN1cmVfcnVubmluZyA9IF9mb3Jrc2VydmVyLmVuc3VyZV9ydW5uaW5nCitnZXRfaW5oZXJpdGVkX2ZkcyA9IF9mb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzCitjb25uZWN0X3RvX25ld19wcm9jZXNzID0gX2ZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2Vzcworc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZCA9IF9mb3Jrc2VydmVyLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQppbmRleCBlNjNmZGI4Li45OGJmZGM4IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CkBAIC04LDE1ICs4LDE3IEBACiAjCiAKIGltcG9ydCBiaXNlY3QKK2ltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBtbWFwCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IGl0ZXJ0b29scwotCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgRmluYWxpemUsIGluZm8KLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKIAogX19hbGxfXyA9IFsnQnVmZmVyV3JhcHBlciddCiAKQEAgLTMwLDE3ICszMiwyNSBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgICAgIF9yYW5kID0gdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSgpCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgogICAgICAgICAgICAgc2VsZi5zaXplID0gc2l6ZQotICAgICAgICAgICAgc2VsZi5uYW1lID0gJ3B5bS0lZC0lZCcgJSAob3MuZ2V0cGlkKCksIG5leHQoQXJlbmEuX2NvdW50ZXIpKQotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoLTEsIHNlbGYuc2l6ZSwgdGFnbmFtZT1zZWxmLm5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgX3dpbmFwaS5HZXRMYXN0RXJyb3IoKSA9PSAwLCAndGFnbmFtZSBhbHJlYWR5IGluIHVzZScKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgbmFtZSA9ICdweW0tJWQtJXMnICUgKG9zLmdldHBpZCgpLCBuZXh0KHNlbGYuX3JhbmQpKQorICAgICAgICAgICAgICAgIGJ1ZiA9IG1tYXAubW1hcCgtMSwgc2l6ZSwgdGFnbmFtZT1uYW1lKQorICAgICAgICAgICAgICAgIGlmIF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgcmVvcGVuZWQgYSBwcmVleGlzdGluZyBtbWFwLgorICAgICAgICAgICAgICAgIGJ1Zi5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcignQ2Fubm90IGZpbmQgbmFtZSBmb3IgbmV3IG1tYXAnKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBidWYKICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gKHNlbGYuc2l6ZSwgc2VsZi5uYW1lKQogCiAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUKIAogICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKQEAgLTUyLDEwICs2MiwyOCBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSk6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcCgtMSwgc2l6ZSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIGZkPS0xKToKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICAgICAgaWYgZmQgPT0gLTE6CisgICAgICAgICAgICAgICAgc2VsZi5mZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoCisgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9J3B5bS0lZC0nJW9zLmdldHBpZCgpLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAoc2VsZi5mZCwpKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZkLCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGInXDAnKnNpemUpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcChzZWxmLmZkLCBzZWxmLnNpemUpCisKKyAgICBkZWYgcmVkdWNlX2FyZW5hKGEpOgorICAgICAgICBpZiBhLmZkID09IC0xOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXJlbmEgaXMgdW5waWNrbGFibGUgYmVjYXVzZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JraW5nIHdhcyBlbmFibGVkIHdoZW4gaXQgd2FzIGNyZWF0ZWQnKQorICAgICAgICByZXR1cm4gcmVidWlsZF9hcmVuYSwgKGEuc2l6ZSwgcmVkdWN0aW9uLkR1cEZkKGEuZmQpKQorCisgICAgZGVmIHJlYnVpbGRfYXJlbmEoc2l6ZSwgZHVwZmQpOgorICAgICAgICByZXR1cm4gQXJlbmEoc2l6ZSwgZHVwZmQuZGV0YWNoKCkpCisKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQXJlbmEsIHJlZHVjZV9hcmVuYSkKIAogIwogIyBDbGFzcyBhbGxvd2luZyBhbGxvY2F0aW9uIG9mIGNodW5rcyBvZiBtZW1vcnkgZnJvbSBhcmVuYXMKQEAgLTkwLDcgKzExOCw3IEBACiAgICAgICAgIGlmIGkgPT0gbGVuKHNlbGYuX2xlbmd0aHMpOgogICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5fcm91bmR1cChtYXgoc2VsZi5fc2l6ZSwgc2l6ZSksIG1tYXAuUEFHRVNJWkUpCiAgICAgICAgICAgICBzZWxmLl9zaXplICo9IDIKLSAgICAgICAgICAgIGluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCisgICAgICAgICAgICB1dGlsLmluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCiAgICAgICAgICAgICBhcmVuYSA9IEFyZW5hKGxlbmd0aCkKICAgICAgICAgICAgIHNlbGYuX2FyZW5hcy5hcHBlbmQoYXJlbmEpCiAgICAgICAgICAgICByZXR1cm4gKGFyZW5hLCAwLCBsZW5ndGgpCkBAIC0yMTYsNyArMjQ0LDcgQEAKICAgICAgICAgYXNzZXJ0IDAgPD0gc2l6ZSA8IHN5cy5tYXhzaXplCiAgICAgICAgIGJsb2NrID0gQnVmZmVyV3JhcHBlci5faGVhcC5tYWxsb2Moc2l6ZSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSAoYmxvY2ssIHNpemUpCi0gICAgICAgIEZpbmFsaXplKHNlbGYsIEJ1ZmZlcldyYXBwZXIuX2hlYXAuZnJlZSwgYXJncz0oYmxvY2ssKSkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBCdWZmZXJXcmFwcGVyLl9oZWFwLmZyZWUsIGFyZ3M9KGJsb2NrLCkpCiAKICAgICBkZWYgY3JlYXRlX21lbW9yeXZpZXcoc2VsZik6CiAgICAgICAgIChhcmVuYSwgc3RhcnQsIHN0b3ApLCBzaXplID0gc2VsZi5fc3RhdGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CmluZGV4IDk2MDU2YjAuLmNjODdkMzYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQpAQCAtMTksMTEgKzE5LDE2IEBACiBpbXBvcnQgYXJyYXkKIGltcG9ydCBxdWV1ZQogCi1mcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YwotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuLCBQb29sLCB1dGlsLCBjb25uZWN0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBBdXRoZW50aWNhdGlvblN0cmluZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgUG9wZW4sIEZvcmtpbmdQaWNrbGVyCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKK2Zyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvb2wKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAogCiAjCiAjIFJlZ2lzdGVyIHNvbWUgdGhpbmdzIGZvciBwaWNrbGluZwpAQCAtMzEsMTYgKzM2LDE0IEBACiAKIGRlZiByZWR1Y2VfYXJyYXkoYSk6CiAgICAgcmV0dXJuIGFycmF5LmFycmF5LCAoYS50eXBlY29kZSwgYS50b2J5dGVzKCkpCi1Gb3JraW5nUGlja2xlci5yZWdpc3RlcihhcnJheS5hcnJheSwgcmVkdWNlX2FycmF5KQorcmVkdWN0aW9uLnJlZ2lzdGVyKGFycmF5LmFycmF5LCByZWR1Y2VfYXJyYXkpCiAKIHZpZXdfdHlwZXMgPSBbdHlwZShnZXRhdHRyKHt9LCBuYW1lKSgpKSBmb3IgbmFtZSBpbiAoJ2l0ZW1zJywna2V5cycsJ3ZhbHVlcycpXQogaWYgdmlld190eXBlc1swXSBpcyBub3QgbGlzdDogICAgICAgIyBvbmx5IG5lZWRlZCBpbiBQeTMuMAogICAgIGRlZiByZWJ1aWxkX2FzX2xpc3Qob2JqKToKICAgICAgICAgcmV0dXJuIGxpc3QsIChsaXN0KG9iaiksKQogICAgIGZvciB2aWV3X3R5cGUgaW4gdmlld190eXBlczoKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCi0gICAgICAgIGltcG9ydCBjb3B5cmVnCi0gICAgICAgIGNvcHlyZWcucGlja2xlKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQorICAgICAgICByZWR1Y3Rpb24ucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCiAKICMKICMgVHlwZSBmb3IgaWRlbnRpZnlpbmcgc2hhcmVkIG9iamVjdHMKQEAgLTEzMCw3ICsxMzMsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWdpc3RyeSwgYWRkcmVzcywgYXV0aGtleSwgc2VyaWFsaXplcik6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGF1dGhrZXksIGJ5dGVzKQogICAgICAgICBzZWxmLnJlZ2lzdHJ5ID0gcmVnaXN0cnkKLSAgICAgICAgc2VsZi5hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5hdXRoa2V5ID0gcHJvY2Vzcy5BdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQogICAgICAgICBMaXN0ZW5lciwgQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCiAKICAgICAgICAgIyBkbyBhdXRoZW50aWNhdGlvbiBsYXRlcgpAQCAtMTQ2LDcgKzE0OSw3IEBACiAgICAgICAgIFJ1biB0aGUgc2VydmVyIGZvcmV2ZXIKICAgICAgICAgJycnCiAgICAgICAgIHNlbGYuc3RvcF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl9tYW5hZ2VyX3NlcnZlciA9IHNlbGYKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fbWFuYWdlcl9zZXJ2ZXIgPSBzZWxmCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGFjY2VwdGVyID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5hY2NlcHRlcikKICAgICAgICAgICAgIGFjY2VwdGVyLmRhZW1vbiA9IFRydWUKQEAgLTE2Nyw3ICsxNzAsNyBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGMgPSBzZWxmLmxpc3RlbmVyLmFjY2VwdCgpCi0gICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLmhhbmRsZV9yZXF1ZXN0LCBhcmdzPShjLCkpCiAgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKQEAgLTQzNiwxNSArNDM5LDE3IEBACiAgICAgX3JlZ2lzdHJ5ID0ge30KICAgICBfU2VydmVyID0gU2VydmVyCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUsIHNlcmlhbGl6ZXI9J3BpY2tsZScpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPU5vbmUsIGF1dGhrZXk9Tm9uZSwgc2VyaWFsaXplcj0ncGlja2xlJywKKyAgICAgICAgICAgICAgICAgY3R4PU5vbmUpOgogICAgICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICBhdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICAgICAgYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcyAgICAgIyBYWFggbm90IGZpbmFsIGFkZHJlc3MgaWYgZWcgKCcnLCAwKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSBTdGF0ZSgpCiAgICAgICAgIHNlbGYuX3N0YXRlLnZhbHVlID0gU3RhdGUuSU5JVElBTAogICAgICAgICBzZWxmLl9zZXJpYWxpemVyID0gc2VyaWFsaXplcgogICAgICAgICBzZWxmLl9MaXN0ZW5lciwgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCisgICAgICAgIHNlbGYuX2N0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCiAKICAgICBkZWYgZ2V0X3NlcnZlcihzZWxmKToKICAgICAgICAgJycnCkBAIC00NzYsNyArNDgxLDcgQEAKICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQogCiAgICAgICAgICMgc3Bhd24gcHJvY2VzcyB3aGljaCBydW5zIGEgc2VydmVyCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBQcm9jZXNzKAorICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fY3R4LlByb2Nlc3MoCiAgICAgICAgICAgICB0YXJnZXQ9dHlwZShzZWxmKS5fcnVuX3NlcnZlciwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3JlZ2lzdHJ5LCBzZWxmLl9hZGRyZXNzLCBzZWxmLl9hdXRoa2V5LAogICAgICAgICAgICAgICAgICAgc2VsZi5fc2VyaWFsaXplciwgd3JpdGVyLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpLApAQCAtNjkxLDExICs2OTYsMTEgQEAKICAgICAgICAgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdWzFdCiAKICAgICAgICAgaWYgYXV0aGtleSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgZWxpZiBzZWxmLl9tYW5hZ2VyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHNlbGYuX21hbmFnZXIuX2F1dGhrZXkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAKICAgICAgICAgaWYgaW5jcmVmOgogICAgICAgICAgICAgc2VsZi5faW5jcmVmKCkKQEAgLTcwNCw3ICs3MDksNyBAQAogCiAgICAgZGVmIF9jb25uZWN0KHNlbGYpOgogICAgICAgICB1dGlsLmRlYnVnKCdtYWtpbmcgY29ubmVjdGlvbiB0byBtYW5hZ2VyJykKLSAgICAgICAgbmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgIG5hbWUgKz0gJ3wnICsgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZQogICAgICAgICBjb25uID0gc2VsZi5fQ2xpZW50KHNlbGYuX3Rva2VuLmFkZHJlc3MsIGF1dGhrZXk9c2VsZi5fYXV0aGtleSkKQEAgLTc5OCw3ICs4MDMsNyBAQAogCiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAgICAgIGt3ZHMgPSB7fQotICAgICAgICBpZiBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKKyAgICAgICAgaWYgY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3ZHNbJ2F1dGhrZXknXSA9IHNlbGYuX2F1dGhrZXkKIAogICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfaXNhdXRvJywgRmFsc2UpOgpAQCAtODM1LDE0ICs4NDAsMTQgQEAKIAogICAgIElmIHBvc3NpYmxlIHRoZSBzaGFyZWQgb2JqZWN0IGlzIHJldHVybmVkLCBvciBvdGhlcndpc2UgYSBwcm94eSBmb3IgaXQuCiAgICAgJycnCi0gICAgc2VydmVyID0gZ2V0YXR0cihjdXJyZW50X3Byb2Nlc3MoKSwgJ19tYW5hZ2VyX3NlcnZlcicsIE5vbmUpCisgICAgc2VydmVyID0gZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX21hbmFnZXJfc2VydmVyJywgTm9uZSkKIAogICAgIGlmIHNlcnZlciBhbmQgc2VydmVyLmFkZHJlc3MgPT0gdG9rZW4uYWRkcmVzczoKICAgICAgICAgcmV0dXJuIHNlcnZlci5pZF90b19vYmpbdG9rZW4uaWRdWzBdCiAgICAgZWxzZToKICAgICAgICAgaW5jcmVmID0gKAogICAgICAgICAgICAga3dkcy5wb3AoJ2luY3JlZicsIFRydWUpIGFuZAotICAgICAgICAgICAgbm90IGdldGF0dHIoY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKQorICAgICAgICAgICAgbm90IGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpCiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBmdW5jKHRva2VuLCBzZXJpYWxpemVyLCBpbmNyZWY9aW5jcmVmLCAqKmt3ZHMpCiAKQEAgLTg4OSw3ICs4OTQsNyBAQAogICAgIGlmIGF1dGhrZXkgaXMgTm9uZSBhbmQgbWFuYWdlciBpcyBub3QgTm9uZToKICAgICAgICAgYXV0aGtleSA9IG1hbmFnZXIuX2F1dGhrZXkKICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgIGF1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgIGF1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKIAogICAgIFByb3h5VHlwZSA9IE1ha2VQcm94eVR5cGUoJ0F1dG9Qcm94eVslc10nICUgdG9rZW4udHlwZWlkLCBleHBvc2VkKQogICAgIHByb3h5ID0gUHJveHlUeXBlKHRva2VuLCBzZXJpYWxpemVyLCBtYW5hZ2VyPW1hbmFnZXIsIGF1dGhrZXk9YXV0aGtleSwKQEAgLTExMDksNyArMTExNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlclByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0NvbmRpdGlvbicsIHRocmVhZGluZy5Db25kaXRpb24sIENvbmRpdGlvblByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0JhcnJpZXInLCB0aHJlYWRpbmcuQmFycmllciwgQmFycmllclByb3h5KQotU3luY01hbmFnZXIucmVnaXN0ZXIoJ1Bvb2wnLCBQb29sLCBQb29sUHJveHkpCitTeW5jTWFuYWdlci5yZWdpc3RlcignUG9vbCcsIHBvb2wuUG9vbCwgUG9vbFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ2xpc3QnLCBsaXN0LCBMaXN0UHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignZGljdCcsIGRpY3QsIERpY3RQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdWYWx1ZScsIFZhbHVlLCBWYWx1ZVByb3h5KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CmluZGV4IDBmMmRhYjQuLjFjYjJkOTUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKQEAgLTcsNyArNyw3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsnUG9vbCddCitfX2FsbF9fID0gWydQb29sJywgJ1RocmVhZFBvb2wnXQogCiAjCiAjIEltcG9ydHMKQEAgLTE3LDEwICsxNywxNCBAQAogaW1wb3J0IHF1ZXVlCiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcwogaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBGaW5hbGl6ZSwgZGVidWcKKyMgSWYgdGhyZWFkaW5nIGlzIGF2YWlsYWJsZSB0aGVuIFRocmVhZFBvb2wgc2hvdWxkIGJlIHByb3ZpZGVkLiAgVGhlcmVmb3JlCisjIHdlIGF2b2lkIHRvcC1sZXZlbCBpbXBvcnRzIHdoaWNoIGFyZSBsaWFibGUgdG8gZmFpbCBvbiBzb21lIHN5c3RlbXMuCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCiAKICMKICMgQ29uc3RhbnRzIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgYSBwb29sCkBAIC00Myw2ICs0NywyOSBAQAogICAgIHJldHVybiBsaXN0KGl0ZXJ0b29scy5zdGFybWFwKGFyZ3NbMF0sIGFyZ3NbMV0pKQogCiAjCisjIEhhY2sgdG8gZW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwgdHJhY2ViYWNrCisjCisKK2NsYXNzIFJlbW90ZVRyYWNlYmFjayhFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0Yik6CisgICAgICAgIHNlbGYudGIgPSB0YgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50YgorCitjbGFzcyBFeGNlcHRpb25XaXRoVHJhY2ViYWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMsIHRiKToKKyAgICAgICAgdGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbih0eXBlKGV4YyksIGV4YywgdGIpCisgICAgICAgIHRiID0gJycuam9pbih0YikKKyAgICAgICAgc2VsZi5leGMgPSBleGMKKyAgICAgICAgc2VsZi50YiA9ICdcbiIiIlxuJXMiIiInICUgdGIKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfZXhjLCAoc2VsZi5leGMsIHNlbGYudGIpCisKK2RlZiByZWJ1aWxkX2V4YyhleGMsIHRiKToKKyAgICBleGMuX19jYXVzZV9fID0gUmVtb3RlVHJhY2ViYWNrKHRiKQorICAgIHJldHVybiBleGMKKworIwogIyBDb2RlIHJ1biBieSB3b3JrZXIgcHJvY2Vzc2VzCiAjCiAKQEAgLTc4LDI4ICsxMDUsMjkgQEAKICAgICB3aGlsZSBtYXh0YXNrcyBpcyBOb25lIG9yIChtYXh0YXNrcyBhbmQgY29tcGxldGVkIDwgbWF4dGFza3MpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgSU9FcnJvcik6Ci0gICAgICAgICAgICBkZWJ1Zygnd29ya2VyIGdvdCBFT0ZFcnJvciBvciBJT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3dvcmtlciBnb3QgRU9GRXJyb3Igb3IgT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgZGVidWcoJ3dvcmtlciBnb3Qgc2VudGluZWwgLS0gZXhpdGluZycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZ290IHNlbnRpbmVsIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBqb2IsIGksIGZ1bmMsIGFyZ3MsIGt3ZHMgPSB0YXNrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IChUcnVlLCBmdW5jKCphcmdzLCAqKmt3ZHMpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlID0gRXhjZXB0aW9uV2l0aFRyYWNlYmFjayhlLCBlLl9fdHJhY2ViYWNrX18pCiAgICAgICAgICAgICByZXN1bHQgPSAoRmFsc2UsIGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCByZXN1bHQpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICB3cmFwcGVkID0gTWF5YmVFbmNvZGluZ0Vycm9yKGUsIHJlc3VsdFsxXSkKLSAgICAgICAgICAgIGRlYnVnKCJQb3NzaWJsZSBlbmNvZGluZyBlcnJvciB3aGlsZSBzZW5kaW5nIHJlc3VsdDogJXMiICUgKAorICAgICAgICAgICAgdXRpbC5kZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKICAgICAgICAgICAgICAgICB3cmFwcGVkKSkKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCAoRmFsc2UsIHdyYXBwZWQpKSkKICAgICAgICAgY29tcGxldGVkICs9IDEKLSAgICBkZWJ1Zygnd29ya2VyIGV4aXRpbmcgYWZ0ZXIgJWQgdGFza3MnICUgY29tcGxldGVkKQorICAgIHV0aWwuZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKIAogIwogIyBDbGFzcyByZXByZXNlbnRpbmcgYSBwcm9jZXNzIHBvb2wKQEAgLTEwOSwxMCArMTM3LDEyIEBACiAgICAgJycnCiAgICAgQ2xhc3Mgd2hpY2ggc3VwcG9ydHMgYW4gYXN5bmMgdmVyc2lvbiBvZiBhcHBseWluZyBmdW5jdGlvbnMgdG8gYXJndW1lbnRzLgogICAgICcnJwotICAgIFByb2Nlc3MgPSBQcm9jZXNzCisgICAgZGVmIFByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jdHguUHJvY2VzcygqYXJncywgKiprd2RzKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwKLSAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBzZWxmLl9jdHggPSBjb250ZXh0IG9yIGdldF9jb250ZXh0KCkKICAgICAgICAgc2VsZi5fc2V0dXBfcXVldWVzKCkKICAgICAgICAgc2VsZi5fdGFza3F1ZXVlID0gcXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CkBAIC0xMjIsMTAgKzE1Miw3IEBACiAgICAgICAgIHNlbGYuX2luaXRhcmdzID0gaW5pdGFyZ3MKIAogICAgICAgICBpZiBwcm9jZXNzZXMgaXMgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwcm9jZXNzZXMgPSBjcHVfY291bnQoKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gMQorICAgICAgICAgICAgcHJvY2Vzc2VzID0gb3MuY3B1X2NvdW50KCkgb3IgMQogICAgICAgICBpZiBwcm9jZXNzZXMgPCAxOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTnVtYmVyIG9mIHByb2Nlc3NlcyBtdXN0IGJlIGF0IGxlYXN0IDEiKQogCkBAIC0xNjIsNyArMTg5LDcgQEAKICAgICAgICAgc2VsZi5fcmVzdWx0X2hhbmRsZXIuX3N0YXRlID0gUlVOCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLnN0YXJ0KCkKIAotICAgICAgICBzZWxmLl90ZXJtaW5hdGUgPSBGaW5hbGl6ZSgKKyAgICAgICAgc2VsZi5fdGVybWluYXRlID0gdXRpbC5GaW5hbGl6ZSgKICAgICAgICAgICAgIHNlbGYsIHNlbGYuX3Rlcm1pbmF0ZV9wb29sLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fdGFza3F1ZXVlLCBzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwgc2VsZi5fcG9vbCwKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLCBzZWxmLl90YXNrX2hhbmRsZXIsCkBAIC0xNzksNyArMjA2LDcgQEAKICAgICAgICAgICAgIHdvcmtlciA9IHNlbGYuX3Bvb2xbaV0KICAgICAgICAgICAgIGlmIHdvcmtlci5leGl0Y29kZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAjIHdvcmtlciBleGl0ZWQKLSAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCiAgICAgICAgICAgICAgICAgd29ya2VyLmpvaW4oKQogICAgICAgICAgICAgICAgIGNsZWFuZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX3Bvb2xbaV0KQEAgLTE5OSw3ICsyMjYsNyBAQAogICAgICAgICAgICAgdy5uYW1lID0gdy5uYW1lLnJlcGxhY2UoJ1Byb2Nlc3MnLCAnUG9vbFdvcmtlcicpCiAgICAgICAgICAgICB3LmRhZW1vbiA9IFRydWUKICAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgZGVidWcoJ2FkZGVkIHdvcmtlcicpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdhZGRlZCB3b3JrZXInKQogCiAgICAgZGVmIF9tYWludGFpbl9wb29sKHNlbGYpOgogICAgICAgICAiIiJDbGVhbiB1cCBhbnkgZXhpdGVkIHdvcmtlcnMgYW5kIHN0YXJ0IHJlcGxhY2VtZW50cyBmb3IgdGhlbS4KQEAgLTIwOCw5ICsyMzUsOCBAQAogICAgICAgICAgICAgc2VsZi5fcmVwb3B1bGF0ZV9wb29sKCkKIAogICAgIGRlZiBfc2V0dXBfcXVldWVzKHNlbGYpOgotICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgICAgIHNlbGYuX2lucXVldWUgPSBTaW1wbGVRdWV1ZSgpCi0gICAgICAgIHNlbGYuX291dHF1ZXVlID0gU2ltcGxlUXVldWUoKQorICAgICAgICBzZWxmLl9pbnF1ZXVlID0gc2VsZi5fY3R4LlNpbXBsZVF1ZXVlKCkKKyAgICAgICAgc2VsZi5fb3V0cXVldWUgPSBzZWxmLl9jdHguU2ltcGxlUXVldWUoKQogICAgICAgICBzZWxmLl9xdWlja19wdXQgPSBzZWxmLl9pbnF1ZXVlLl93cml0ZXIuc2VuZAogICAgICAgICBzZWxmLl9xdWlja19nZXQgPSBzZWxmLl9vdXRxdWV1ZS5fcmVhZGVyLnJlY3YKIApAQCAtMzM2LDcgKzM2Miw3IEBACiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICAgIyBzZW5kIHNlbnRpbmVsIHRvIHN0b3Agd29ya2VycwogICAgICAgICBwb29sLl90YXNrcXVldWUucHV0KE5vbmUpCi0gICAgICAgIGRlYnVnKCd3b3JrZXIgaGFuZGxlciBleGl0aW5nJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sLCBjYWNoZSk6CkBAIC0zNDYsNyArMzcyLDcgQEAKICAgICAgICAgICAgIGkgPSAtMQogICAgICAgICAgICAgZm9yIGksIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzZXEpOgogICAgICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcHV0KHRhc2spCkBAIC0zNTgsMjcgKzM4NCwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBzZXRfbGVuZ3RoOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKICAgICAgICAgICAgICAgICAgICAgc2V0X2xlbmd0aChpKzEpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IHNlbnRpbmVsJykKIAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdGVsbCByZXN1bHQgaGFuZGxlciB0byBmaW5pc2ggd2hlbiBjYWNoZSBpcyBlbXB0eQotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgICAgIG91dHF1ZXVlLnB1dChOb25lKQogCiAgICAgICAgICAgICAjIHRlbGwgd29ya2VycyB0aGVyZSBpcyBubyBtb3JlIHdvcmsKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgc2VuZGluZyBzZW50aW5lbCB0byB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBwdXQoTm9uZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBJT0Vycm9yIHdoZW4gc2VuZGluZyBzZW50aW5lbHMnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3QgT1NFcnJvciB3aGVuIHNlbmRpbmcgc2VudGluZWxzJykKIAotICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGV4aXRpbmcnKQorICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfcmVzdWx0cyhvdXRxdWV1ZSwgZ2V0LCBjYWNoZSk6CkBAIC0zODcsMTcgKzQxMywxNyBAQAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRhc2sgPSBnZXQoKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9JT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL09TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IHRocmVhZC5fc3RhdGUgPT0gVEVSTUlOQVRFCi0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGU9VEVSTUlOQVRFJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlPVRFUk1JTkFURScpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3Qgc2VudGluZWwnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgam9iLCBpLCBvYmogPSB0YXNrCkBAIC00MDksMTIgKzQzNSwxMiBAQAogICAgICAgICB3aGlsZSBjYWNoZSBhbmQgdGhyZWFkLl9zdGF0ZSAhPSBURVJNSU5BVEU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL0lPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBpZ25vcmluZyBleHRyYSBzZW50aW5lbCcpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgaWdub3JpbmcgZXh0cmEgc2VudGluZWwnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBqb2IsIGksIG9iaiA9IHRhc2sKICAgICAgICAgICAgIHRyeToKQEAgLTQyMyw3ICs0NDksNyBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBpZiBoYXNhdHRyKG91dHF1ZXVlLCAnX3JlYWRlcicpOgotICAgICAgICAgICAgZGVidWcoJ2Vuc3VyaW5nIHRoYXQgb3V0cXVldWUgaXMgbm90IGZ1bGwnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZW5zdXJpbmcgdGhhdCBvdXRxdWV1ZSBpcyBub3QgZnVsbCcpCiAgICAgICAgICAgICAjIElmIHdlIGRvbid0IG1ha2Ugcm9vbSBhdmFpbGFibGUgaW4gb3V0cXVldWUgdGhlbgogICAgICAgICAgICAgIyBhdHRlbXB0cyB0byBhZGQgdGhlIHNlbnRpbmVsIChOb25lKSB0byBvdXRxdWV1ZSBtYXkKICAgICAgICAgICAgICMgYmxvY2suICBUaGVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIG5vIG1vcmUgdGhhbiAyIHNlbnRpbmVscy4KQEAgLTQzMiwxMCArNDU4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRxdWV1ZS5fcmVhZGVyLnBvbGwoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZXhpdGluZzogbGVuKGNhY2hlKT0lcywgdGhyZWFkLl9zdGF0ZT0lcycsCisgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGV4aXRpbmc6IGxlbihjYWNoZSk9JXMsIHRocmVhZC5fc3RhdGU9JXMnLAogICAgICAgICAgICAgICBsZW4oY2FjaGUpLCB0aHJlYWQuX3N0YXRlKQogCiAgICAgQHN0YXRpY21ldGhvZApAQCAtNDUzLDE5ICs0NzksMTkgQEAKICAgICAgICAgICAgICAgKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBkZWJ1ZygnY2xvc2luZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnY2xvc2luZyBwb29sJykKICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gUlVOOgogICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBDTE9TRQogICAgICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gQ0xPU0UKIAogICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygndGVybWluYXRpbmcgcG9vbCcpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBzZWxmLl90ZXJtaW5hdGUoKQogCiAgICAgZGVmIGpvaW4oc2VsZik6Ci0gICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHBvb2wnKQogICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgaW4gKENMT1NFLCBURVJNSU5BVEUpCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLmpvaW4oKQogICAgICAgICBzZWxmLl90YXNrX2hhbmRsZXIuam9pbigpCkBAIC00NzYsNyArNTAyLDcgQEAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIHNpemUpOgogICAgICAgICAjIHRhc2tfaGFuZGxlciBtYXkgYmUgYmxvY2tlZCB0cnlpbmcgdG8gcHV0IGl0ZW1zIG9uIGlucXVldWUKLSAgICAgICAgZGVidWcoJ3JlbW92aW5nIHRhc2tzIGZyb20gaW5xdWV1ZSB1bnRpbCB0YXNrIGhhbmRsZXIgZmluaXNoZWQnKQorICAgICAgICB1dGlsLmRlYnVnKCdyZW1vdmluZyB0YXNrcyBmcm9tIGlucXVldWUgdW50aWwgdGFzayBoYW5kbGVyIGZpbmlzaGVkJykKICAgICAgICAgaW5xdWV1ZS5fcmxvY2suYWNxdWlyZSgpCiAgICAgICAgIHdoaWxlIHRhc2tfaGFuZGxlci5pc19hbGl2ZSgpIGFuZCBpbnF1ZXVlLl9yZWFkZXIucG9sbCgpOgogICAgICAgICAgICAgaW5xdWV1ZS5fcmVhZGVyLnJlY3YoKQpAQCAtNDg2LDEyICs1MTIsMTIgQEAKICAgICBkZWYgX3Rlcm1pbmF0ZV9wb29sKGNscywgdGFza3F1ZXVlLCBpbnF1ZXVlLCBvdXRxdWV1ZSwgcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLCB0YXNrX2hhbmRsZXIsIHJlc3VsdF9oYW5kbGVyLCBjYWNoZSk6CiAgICAgICAgICMgdGhpcyBpcyBndWFyYW50ZWVkIHRvIG9ubHkgYmUgY2FsbGVkIG9uY2UKLSAgICAgICAgZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCiAKICAgICAgICAgd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHRhc2tfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKIAotICAgICAgICBkZWJ1ZygnaGVscGluZyB0YXNrIGhhbmRsZXIvd29ya2VycyB0byBmaW5pc2gnKQorICAgICAgICB1dGlsLmRlYnVnKCdoZWxwaW5nIHRhc2sgaGFuZGxlci93b3JrZXJzIHRvIGZpbmlzaCcpCiAgICAgICAgIGNscy5faGVscF9zdHVmZl9maW5pc2goaW5xdWV1ZSwgdGFza19oYW5kbGVyLCBsZW4ocG9vbCkpCiAKICAgICAgICAgYXNzZXJ0IHJlc3VsdF9oYW5kbGVyLmlzX2FsaXZlKCkgb3IgbGVuKGNhY2hlKSA9PSAwCkBAIC01MDEsMzEgKzUyNywzMSBAQAogCiAgICAgICAgICMgV2UgbXVzdCB3YWl0IGZvciB0aGUgd29ya2VyIGhhbmRsZXIgdG8gZXhpdCBiZWZvcmUgdGVybWluYXRpbmcKICAgICAgICAgIyB3b3JrZXJzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB3b3JrZXJzIHRvIGJlIHJlc3RhcnRlZCBiZWhpbmQgb3VyIGJhY2suCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHdvcmtlciBoYW5kbGVyJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyB3b3JrZXIgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB3b3JrZXJfaGFuZGxlcjoKICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLmpvaW4oKQogCiAgICAgICAgICMgVGVybWluYXRlIHdvcmtlcnMgd2hpY2ggaGF2ZW4ndCBhbHJlYWR5IGZpbmlzaGVkLgogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKLSAgICAgICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmV4aXRjb2RlIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHAudGVybWluYXRlKCkKIAotICAgICAgICBkZWJ1Zygnam9pbmluZyB0YXNrIGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB0YXNrX2hhbmRsZXI6CiAgICAgICAgICAgICB0YXNrX2hhbmRsZXIuam9pbigpCiAKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgcmVzdWx0IGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHJlc3VsdF9oYW5kbGVyOgogICAgICAgICAgICAgcmVzdWx0X2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgaWYgcG9vbCBhbmQgaGFzYXR0cihwb29sWzBdLCAndGVybWluYXRlJyk6Ci0gICAgICAgICAgICBkZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmlzX2FsaXZlKCk6CiAgICAgICAgICAgICAgICAgICAgICMgd29ya2VyIGhhcyBub3QgeWV0IGV4aXRlZAotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIHAucGlkKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgcC5waWQpCiAgICAgICAgICAgICAgICAgICAgIHAuam9pbigpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgpAQCAtNzExLDcgKzczNywxMCBAQAogCiBjbGFzcyBUaHJlYWRQb29sKFBvb2wpOgogCi0gICAgZnJvbSAuZHVtbXkgaW1wb3J0IFByb2Nlc3MKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIFByb2Nlc3MoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGZyb20gLmR1bW15IGltcG9ydCBQcm9jZXNzCisgICAgICAgIHJldHVybiBQcm9jZXNzKCphcmdzLCAqKmt3ZHMpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKICAgICAgICAgUG9vbC5fX2luaXRfXyhzZWxmLCBwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncykKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNjYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5CkBAIC0wLDAgKzEsODMgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IGVycm5vCisKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydQb3BlbiddCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBmb3JrCisjCisKK2NsYXNzIFBvcGVuKG9iamVjdCk6CisgICAgbWV0aG9kID0gJ2ZvcmsnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fbGF1bmNoKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RzID0gb3Mud2FpdHBpZChzZWxmLnBpZCwgZmxhZykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3CisgICAgICAgICAgICAgICAgICAgICMgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQgPT0gMTAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgorICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IC1vcy5XVEVSTVNJRyhzdHMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IG9zLldFWElUU1RBVFVTKHN0cykKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKKyAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucG9sbChvcy5XTk9IQU5HIGlmIHRpbWVvdXQgPT0gMC4wIGVsc2UgMCkKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBleGNlcHQgUHJvY2Vzc0xvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgY29kZSA9IDEKKyAgICAgICAgcGFyZW50X3IsIGNoaWxkX3cgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5waWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgc2VsZi5waWQgPT0gMDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShwYXJlbnRfcikKKyAgICAgICAgICAgICAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICAgICAgICAgICAgICByYW5kb20uc2VlZCgpCisgICAgICAgICAgICAgICAgY29kZSA9IHByb2Nlc3Nfb2JqLl9ib290c3RyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfdykKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChwYXJlbnRfciwpKQorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHBhcmVudF9yCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExNWY4MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDY5IEBACitpbXBvcnQgaW8KK2ltcG9ydCBvcworCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgoraWYgbm90IHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFOgorICAgIHJhaXNlIEltcG9ydEVycm9yKCdObyBzdXBwb3J0IGZvciBzZW5kaW5nIGZkcyBiZXR3ZWVuIHByb2Nlc3NlcycpCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgZm9ya3NlcnZlcgorZnJvbSAuIGltcG9ydCBwb3Blbl9mb3JrCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworCitfX2FsbF9fID0gWydQb3BlbiddCisKKyMKKyMgV3JhcHBlciBmb3IgYW4gZmQgdXNlZCB3aGlsZSBsYXVuY2hpbmcgYSBwcm9jZXNzCisjCisKK2NsYXNzIF9EdXBGZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmQpOgorICAgICAgICBzZWxmLmluZCA9IGluZAorICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybiBmb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzKClbc2VsZi5pbmRdCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBhIHNlcnZlciBwcm9jZXNzCisjCisKK2NsYXNzIFBvcGVuKHBvcGVuX2ZvcmsuUG9wZW4pOgorICAgIG1ldGhvZCA9ICdmb3Jrc2VydmVyJworICAgIER1cEZkID0gX0R1cEZkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzZWxmLl9mZHMgPSBbXQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKGZkKQorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2ZkcykgLSAxCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHByZXBfZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQorICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCBidWYpCisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcm9jZXNzX29iaiwgYnVmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgICAgICBzZWxmLnNlbnRpbmVsLCB3ID0gZm9ya3NlcnZlci5jb25uZWN0X3RvX25ld19wcm9jZXNzKHNlbGYuX2ZkcykKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHNlbGYuc2VudGluZWwsKSkKKyAgICAgICAgd2l0aCBvcGVuKHcsICd3YicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLnBpZCA9IGZvcmtzZXJ2ZXIucmVhZF91bnNpZ25lZChzZWxmLnNlbnRpbmVsKQorCisgICAgZGVmIHBvbGwoc2VsZiwgZmxhZz1vcy5XTk9IQU5HKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCB3YWl0CisgICAgICAgICAgICB0aW1lb3V0ID0gMCBpZiBmbGFnID09IG9zLldOT0hBTkcgZWxzZSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gZm9ya3NlcnZlci5yZWFkX3Vuc2lnbmVkKHNlbGYuc2VudGluZWwpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICAjIFRoZSBwcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkgcGVyaGFwcyBiZWNhdXNlIG9mIGEgc2lnbmFsCisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMjU1CisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fcG9zaXgucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWRjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5CkBAIC0wLDAgKzEsNzIgQEAKK2ltcG9ydCBmY250bAoraW1wb3J0IGlvCitpbXBvcnQgb3MKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvcGVuX2ZvcmsKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworZnJvbSAuIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisKKyMKKyMgV3JhcHBlciBmb3IgYW4gZmQgdXNlZCB3aGlsZSBsYXVuY2hpbmcgYSBwcm9jZXNzCisjCisKK2NsYXNzIF9EdXBGZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZkCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBhIGZyZXNoIGludGVycHJldGVyCisjCisKK2NsYXNzIFBvcGVuKHBvcGVuX2ZvcmsuUG9wZW4pOgorICAgIG1ldGhvZCA9ICdzcGF3bicKKyAgICBEdXBGZCA9IF9EdXBGZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc2VsZi5fZmRzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZChmZCkKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgdHJhY2tlcl9mZCA9IHNlbWFwaG9yZV90cmFja2VyLmdldGZkKCkKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZCh0cmFja2VyX2ZkKQorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKyAgICAgICAgZnAgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCBmcCkKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCBmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICAgICAgcGFyZW50X3IgPSBjaGlsZF93ID0gY2hpbGRfciA9IHBhcmVudF93ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJlbnRfciwgY2hpbGRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY2hpbGRfciwgcGFyZW50X3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGNtZCA9IHNwYXduLmdldF9jb21tYW5kX2xpbmUodHJhY2tlcl9mZD10cmFja2VyX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2hhbmRsZT1jaGlsZF9yKQorICAgICAgICAgICAgc2VsZi5fZmRzLmV4dGVuZChbY2hpbGRfciwgY2hpbGRfd10pCisgICAgICAgICAgICBzZWxmLnBpZCA9IHV0aWwuc3Bhd252X3Bhc3NmZHMoc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQsIHNlbGYuX2ZkcykKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBwYXJlbnRfcgorICAgICAgICAgICAgd2l0aCBvcGVuKHBhcmVudF93LCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZnAuZ2V0YnVmZmVyKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBwYXJlbnRfciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAocGFyZW50X3IsKSkKKyAgICAgICAgICAgIGZvciBmZCBpbiAoY2hpbGRfciwgY2hpbGRfdywgcGFyZW50X3cpOgorICAgICAgICAgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTMwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5CkBAIC0wLDAgKzEsOTkgQEAKK2ltcG9ydCBvcworaW1wb3J0IG1zdmNydAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IF93aW5hcGkKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIworIworCitURVJNSU5BVEUgPSAweDEwMDAwCitXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQorV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKKworIworIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKKyMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCisjCisKK2NsYXNzIFBvcGVuKG9iamVjdCk6CisgICAgJycnCisgICAgU3RhcnQgYSBzdWJwcm9jZXNzIHRvIHJ1biB0aGUgY29kZSBvZiBhIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgbWV0aG9kID0gJ3NwYXduJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcHJlcF9kYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCisKKyAgICAgICAgIyByZWFkIGVuZCBvZiBwaXBlIHdpbGwgYmUgInN0b2xlbiIgYnkgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgIyAtLSBzZWUgc3Bhd25fbWFpbigpIGluIHNwYXduLnB5LgorICAgICAgICByaGFuZGxlLCB3aGFuZGxlID0gX3dpbmFwaS5DcmVhdGVQaXBlKE5vbmUsIDApCisgICAgICAgIHdmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZSh3aGFuZGxlLCAwKQorICAgICAgICBjbWQgPSBzcGF3bi5nZXRfY29tbWFuZF9saW5lKHBhcmVudF9waWQ9b3MuZ2V0cGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9oYW5kbGU9cmhhbmRsZSkKKyAgICAgICAgY21kID0gJyAnLmpvaW4oJyIlcyInICUgeCBmb3IgeCBpbiBjbWQpCisKKyAgICAgICAgd2l0aCBvcGVuKHdmZCwgJ3diJywgY2xvc2VmZD1UcnVlKSBhcyB0b19jaGlsZDoKKyAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGhwLCBodCwgcGlkLCB0aWQgPSBfd2luYXBpLkNyZWF0ZVByb2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHNwYXduLmdldF9leGVjdXRhYmxlKCksIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgRmFsc2UsIDAsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHJoYW5kbGUpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCisgICAgICAgICAgICBzZWxmLnBpZCA9IHBpZAorICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBpbnQoaHApCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIF93aW5hcGkuQ2xvc2VIYW5kbGUsIChzZWxmLnNlbnRpbmVsLCkpCisKKyAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIHRvX2NoaWxkKQorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCB0b19jaGlsZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIGFzc2VydCBzZWxmIGlzIGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkKKyAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5kdXBsaWNhdGUoaGFuZGxlLCBzZWxmLnNlbnRpbmVsKQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbXNlY3MgPSBfd2luYXBpLklORklOSVRFCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCisKKyAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChpbnQoc2VsZi5faGFuZGxlKSwgbXNlY3MpCisgICAgICAgICAgICBpZiByZXMgPT0gX3dpbmFwaS5XQUlUX09CSkVDVF8wOgorICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCisgICAgICAgICAgICAgICAgaWYgY29kZSA9PSBURVJNSU5BVEU6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAtc2lnbmFsLlNJR1RFUk0KKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX3dpbmFwaS5UZXJtaW5hdGVQcm9jZXNzKGludChzZWxmLl9oYW5kbGUpLCBURVJNSU5BVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKaW5kZXggM2QzMmFkZC4uNjg5NTliZiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQpAQCAtNyw3ICs3LDcgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nXQorX19hbGxfXyA9IFsnQmFzZVByb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCiAKICMKICMgSW1wb3J0cwpAQCAtNDMsNyArNDMsNyBAQAogICAgIFJldHVybiBsaXN0IG9mIHByb2Nlc3Mgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIGxpdmUgY2hpbGQgcHJvY2Vzc2VzCiAgICAgJycnCiAgICAgX2NsZWFudXAoKQotICAgIHJldHVybiBsaXN0KF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuKQorICAgIHJldHVybiBsaXN0KF9jaGlsZHJlbikKIAogIwogIwpAQCAtNTEsMzMgKzUxLDI5IEBACiAKIGRlZiBfY2xlYW51cCgpOgogICAgICMgY2hlY2sgZm9yIHByb2Nlc3NlcyB3aGljaCBoYXZlIGZpbmlzaGVkCi0gICAgZm9yIHAgaW4gbGlzdChfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbik6CisgICAgZm9yIHAgaW4gbGlzdChfY2hpbGRyZW4pOgogICAgICAgICBpZiBwLl9wb3Blbi5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHApCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChwKQogCiAjCiAjIFRoZSBgUHJvY2Vzc2AgY2xhc3MKICMKIAotY2xhc3MgUHJvY2VzcyhvYmplY3QpOgorY2xhc3MgQmFzZVByb2Nlc3Mob2JqZWN0KToKICAgICAnJycKICAgICBQcm9jZXNzIG9iamVjdHMgcmVwcmVzZW50IGFjdGl2aXR5IHRoYXQgaXMgcnVuIGluIGEgc2VwYXJhdGUgcHJvY2VzcwogCi0gICAgVGhlIGNsYXNzIGlzIGFuYWxhZ291cyB0byBgdGhyZWFkaW5nLlRocmVhZGAKKyAgICBUaGUgY2xhc3MgaXMgYW5hbG9nb3VzIHRvIGB0aHJlYWRpbmcuVGhyZWFkYAogICAgICcnJwotICAgIF9Qb3BlbiA9IE5vbmUKKyAgICBkZWYgX1BvcGVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZ3JvdXA9Tm9uZSwgdGFyZ2V0PU5vbmUsIG5hbWU9Tm9uZSwgYXJncz0oKSwga3dhcmdzPXt9LAogICAgICAgICAgICAgICAgICAqLCBkYWVtb249Tm9uZSk6CiAgICAgICAgIGFzc2VydCBncm91cCBpcyBOb25lLCAnZ3JvdXAgYXJndW1lbnQgbXVzdCBiZSBOb25lIGZvciBub3cnCi0gICAgICAgIGNvdW50ID0gbmV4dChfY3VycmVudF9wcm9jZXNzLl9jb3VudGVyKQorICAgICAgICBjb3VudCA9IG5leHQoX3Byb2Nlc3NfY291bnRlcikKICAgICAgICAgc2VsZi5faWRlbnRpdHkgPSBfY3VycmVudF9wcm9jZXNzLl9pZGVudGl0eSArIChjb3VudCwpCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBfY3VycmVudF9wcm9jZXNzLl9hdXRoa2V5Ci0gICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gZGFlbW9uCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9kYWVtb25pYyA9IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBfY3VycmVudF9wcm9jZXNzLl90ZW1wZGlyCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IF9jdXJyZW50X3Byb2Nlc3MuX2NvbmZpZy5jb3B5KCkKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IG9zLmdldHBpZCgpCiAgICAgICAgIHNlbGYuX3BvcGVuID0gTm9uZQogICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKQEAgLTg1LDYgKzgxLDggQEAKICAgICAgICAgc2VsZi5fa3dhcmdzID0gZGljdChrd2FyZ3MpCiAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lIG9yIHR5cGUoc2VsZikuX19uYW1lX18gKyAnLScgKyBcCiAgICAgICAgICAgICAgICAgICAgICAnOicuam9pbihzdHIoaSkgZm9yIGkgaW4gc2VsZi5faWRlbnRpdHkpCisgICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gZGFlbW9uCiAgICAgICAgIF9kYW5nbGluZy5hZGQoc2VsZikKIAogICAgIGRlZiBydW4oc2VsZik6CkBAIC0xMDEsMTYgKzk5LDEyIEBACiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBOb25lLCAnY2Fubm90IHN0YXJ0IGEgcHJvY2VzcyB0d2ljZScKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BhcmVudF9waWQgPT0gb3MuZ2V0cGlkKCksIFwKICAgICAgICAgICAgICAgICdjYW4gb25seSBzdGFydCBhIHByb2Nlc3Mgb2JqZWN0IGNyZWF0ZWQgYnkgY3VycmVudCBwcm9jZXNzJwotICAgICAgICBhc3NlcnQgbm90IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljLCBcCisgICAgICAgIGFzc2VydCBub3QgX2N1cnJlbnRfcHJvY2Vzcy5fY29uZmlnLmdldCgnZGFlbW9uJyksIFwKICAgICAgICAgICAgICAgICdkYWVtb25pYyBwcm9jZXNzZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgY2hpbGRyZW4nCiAgICAgICAgIF9jbGVhbnVwKCkKLSAgICAgICAgaWYgc2VsZi5fUG9wZW4gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBQb3BlbiA9IHNlbGYuX1BvcGVuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBzZWxmLl9wb3BlbiA9IFBvcGVuKHNlbGYpCisgICAgICAgIHNlbGYuX3BvcGVuID0gc2VsZi5fUG9wZW4oc2VsZikKICAgICAgICAgc2VsZi5fc2VudGluZWwgPSBzZWxmLl9wb3Blbi5zZW50aW5lbAotICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5hZGQoc2VsZikKKyAgICAgICAgX2NoaWxkcmVuLmFkZChzZWxmKQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKICAgICAgICAgJycnCkBAIC0xMjYsNyArMTIwLDcgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIG5vdCBOb25lLCAnY2FuIG9ubHkgam9pbiBhIHN0YXJ0ZWQgcHJvY2VzcycKICAgICAgICAgcmVzID0gc2VsZi5fcG9wZW4ud2FpdCh0aW1lb3V0KQogICAgICAgICBpZiByZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHNlbGYpCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChzZWxmKQogCiAgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgogICAgICAgICAnJycKQEAgLTE1NCw3ICsxNDgsNyBAQAogICAgICAgICAnJycKICAgICAgICAgUmV0dXJuIHdoZXRoZXIgcHJvY2VzcyBpcyBhIGRhZW1vbgogICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RhZW1vbmljCisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcuZ2V0KCdkYWVtb24nLCBGYWxzZSkKIAogICAgIEBkYWVtb24uc2V0dGVyCiAgICAgZGVmIGRhZW1vbihzZWxmLCBkYWVtb25pYyk6CkBAIC0xNjIsMTggKzE1NiwxOCBAQAogICAgICAgICBTZXQgd2hldGhlciBwcm9jZXNzIGlzIGEgZGFlbW9uCiAgICAgICAgICcnJwogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgTm9uZSwgJ3Byb2Nlc3MgaGFzIGFscmVhZHkgc3RhcnRlZCcKLSAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb25pYworICAgICAgICBzZWxmLl9jb25maWdbJ2RhZW1vbiddID0gZGFlbW9uaWMKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBhdXRoa2V5KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYXV0aGtleQorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnWydhdXRoa2V5J10KIAogICAgIEBhdXRoa2V5LnNldHRlcgogICAgIGRlZiBhdXRoa2V5KHNlbGYsIGF1dGhrZXkpOgogICAgICAgICAnJycKICAgICAgICAgU2V0IGF1dGhvcml6YXRpb24ga2V5IG9mIHByb2Nlc3MKICAgICAgICAgJycnCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICBzZWxmLl9jb25maWdbJ2F1dGhrZXknXSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgZXhpdGNvZGUoc2VsZik6CkBAIC0yMjcsMTcgKzIyMSwxOSBAQAogICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdzdG9wcGVkWyVzXScgJSBfZXhpdGNvZGVfdG9fbmFtZS5nZXQoc3RhdHVzLCBzdGF0dXMpCiAKICAgICAgICAgcmV0dXJuICc8JXMoJXMsICVzJXMpPicgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxmLl9kYWVtb25pYyBhbmQgJyBkYWVtb24nIG9yICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlbGYuZGFlbW9uIGFuZCAnIGRhZW1vbicgb3IgJycpCiAKICAgICAjIwogCiAgICAgZGVmIF9ib290c3RyYXAoc2VsZik6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgdXRpbAotICAgICAgICBnbG9iYWwgX2N1cnJlbnRfcHJvY2VzcworICAgICAgICBmcm9tIC4gaW1wb3J0IHV0aWwsIGNvbnRleHQKKyAgICAgICAgZ2xvYmFsIF9jdXJyZW50X3Byb2Nlc3MsIF9wcm9jZXNzX2NvdW50ZXIsIF9jaGlsZHJlbgogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gc2V0KCkKLSAgICAgICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X21ldGhvZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9mb3JjZV9zdGFydF9tZXRob2Qoc2VsZi5fc3RhcnRfbWV0aG9kKQorICAgICAgICAgICAgX3Byb2Nlc3NfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorICAgICAgICAgICAgX2NoaWxkcmVuID0gc2V0KCkKICAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCkBAIC0yODUsOCArMjgxLDggQEAKIAogY2xhc3MgQXV0aGVudGljYXRpb25TdHJpbmcoYnl0ZXMpOgogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgotICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6CisgICAgICAgIGZyb20gLmNvbnRleHQgaW1wb3J0IGdldF9zcGF3bmluZ19wb3BlbgorICAgICAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgICdQaWNrbGluZyBhbiBBdXRoZW50aWNhdGlvblN0cmluZyBvYmplY3QgaXMgJwogICAgICAgICAgICAgICAgICdkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zJwpAQCAtMjk3LDIwICsyOTMsMjkgQEAKICMgQ3JlYXRlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG1haW4gcHJvY2VzcwogIwogCi1jbGFzcyBfTWFpblByb2Nlc3MoUHJvY2Vzcyk6CitjbGFzcyBfTWFpblByb2Nlc3MoQmFzZVByb2Nlc3MpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudGl0eSA9ICgpCi0gICAgICAgIHNlbGYuX2RhZW1vbmljID0gRmFsc2UKICAgICAgICAgc2VsZi5fbmFtZSA9ICdNYWluUHJvY2VzcycKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9wZW4gPSBOb25lCi0gICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBzZXQoKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcob3MudXJhbmRvbSgzMikpCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IHsnYXV0aGtleSc6IEF1dGhlbnRpY2F0aW9uU3RyaW5nKG9zLnVyYW5kb20oMzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZW1wcmVmaXgnOiAnL21wJ30KKyAgICAgICAgIyBOb3RlIHRoYXQgc29tZSB2ZXJzaW9ucyBvZiBGcmVlQlNEIG9ubHkgYWxsb3cgbmFtZWQKKyAgICAgICAgIyBzZW1hcGhvcmVzIHRvIGhhdmUgbmFtZXMgb2YgdXAgdG8gMTQgY2hhcmFjdGVycy4gIFRoZXJlZm9yZQorICAgICAgICAjIHdlIGNob29zZSBhIHNob3J0IHByZWZpeC4KKyAgICAgICAgIworICAgICAgICAjIE9uIE1hY09TWCBpbiBhIHNhbmRib3ggaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB1c2UgYQorICAgICAgICAjIGRpZmZlcmVudCBwcmVmaXggLS0gc2VlICMxOTQ3OC4KKyAgICAgICAgIworICAgICAgICAjIEV2ZXJ5dGhpbmcgaW4gc2VsZi5fY29uZmlnIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IGRlc2NlbmRhbnQKKyAgICAgICAgIyBwcm9jZXNzZXMuCisKIAogX2N1cnJlbnRfcHJvY2VzcyA9IF9NYWluUHJvY2VzcygpCitfcHJvY2Vzc19jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCitfY2hpbGRyZW4gPSBzZXQoKQogZGVsIF9NYWluUHJvY2VzcwogCiAjCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CmluZGV4IDM3MjcxZmIuLmY2NTA3NzEgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CkBAIC0xOCwxMSArMTgsMTQgQEAKIGltcG9ydCBlcnJubwogCiBmcm9tIHF1ZXVlIGltcG9ydCBFbXB0eSwgRnVsbAorCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQotZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IExvY2ssIEJvdW5kZWRTZW1hcGhvcmUsIFNlbWFwaG9yZSwgQ29uZGl0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmsKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgY29udGV4dAorCitmcm9tIC51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGlzX2V4aXRpbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogIwogIyBRdWV1ZSB0eXBlIHVzaW5nIGEgcGlwZSwgYnVmZmVyIGFuZCB0aHJlYWQKQEAgLTMwLDE4ICszMywxOCBAQAogCiBjbGFzcyBRdWV1ZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKICAgICAgICAgaWYgbWF4c2l6ZSA8PSAwOgogICAgICAgICAgICAgbWF4c2l6ZSA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jay5TRU1fVkFMVUVfTUFYCiAgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCi0gICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gUGlwZShkdXBsZXg9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Jsb2NrID0gTG9jaygpCisgICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmxvY2sgPSBjdHguTG9jaygpCiAgICAgICAgIHNlbGYuX29waWQgPSBvcy5nZXRwaWQoKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTm9uZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBMb2NrKCkKLSAgICAgICAgc2VsZi5fc2VtID0gQm91bmRlZFNlbWFwaG9yZShtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCisgICAgICAgIHNlbGYuX3NlbSA9IGN0eC5Cb3VuZGVkU2VtYXBob3JlKG1heHNpemUpCiAgICAgICAgICMgRm9yIHVzZSBieSBjb25jdXJyZW50LmZ1dHVyZXMKICAgICAgICAgc2VsZi5faWdub3JlX2VwaXBlID0gRmFsc2UKIApAQCAtNTEsNyArNTQsNyBAQAogICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBRdWV1ZS5fYWZ0ZXJfZm9yaykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2lnbm9yZV9lcGlwZSwgc2VsZi5fbWF4c2l6ZSwgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrLCBzZWxmLl9zZW0sIHNlbGYuX29waWQpCiAKQEAgLTY5LDggKzcyLDggQEAKICAgICAgICAgc2VsZi5fam9pbmNhbmNlbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlID0gTm9uZQotICAgICAgICBzZWxmLl9zZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgc2VsZi5fcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2CisgICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMgPSBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcworICAgICAgICBzZWxmLl9yZWN2X2J5dGVzID0gc2VsZi5fcmVhZGVyLnJlY3ZfYnl0ZXMKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAKICAgICBkZWYgcHV0KHNlbGYsIG9iaiwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKToKQEAgLTg5LDE0ICs5Miw5IEBACiAKICAgICBkZWYgZ2V0KHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGlmIGJsb2NrIGFuZCB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9ybG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2KCkKLSAgICAgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl9ybG9jay5yZWxlYXNlKCkKLQorICAgICAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CkBAIC0xMDksMTEgKzEwNywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRW1wdHkKICAgICAgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLl9wb2xsKCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVtcHR5Ci0gICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdigpCisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdl9ieXRlcygpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2sucmVsZWFzZSgpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKICAgICBkZWYgcXNpemUoc2VsZik6CiAgICAgICAgICMgUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igb24gTWFjIE9TWCBiZWNhdXNlIG9mIGJyb2tlbiBzZW1fZ2V0dmFsdWUoKQpAQCAtMTU4LDcgKzE1Nyw3IEBACiAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCiAgICAgICAgIHNlbGYuX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCiAgICAgICAgICAgICB0YXJnZXQ9UXVldWUuX2ZlZWQsCi0gICAgICAgICAgICBhcmdzPShzZWxmLl9idWZmZXIsIHNlbGYuX25vdGVtcHR5LCBzZWxmLl9zZW5kLAorICAgICAgICAgICAgYXJncz0oc2VsZi5fYnVmZmVyLCBzZWxmLl9ub3RlbXB0eSwgc2VsZi5fc2VuZF9ieXRlcywKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dsb2NrLCBzZWxmLl93cml0ZXIuY2xvc2UsIHNlbGYuX2lnbm9yZV9lcGlwZSksCiAgICAgICAgICAgICBuYW1lPSdRdWV1ZUZlZWRlclRocmVhZCcKICAgICAgICAgICAgICkKQEAgLTIxMCwxMCArMjA5LDggQEAKICAgICAgICAgICAgIG5vdGVtcHR5LnJlbGVhc2UoKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgorICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kX2J5dGVzLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgogICAgICAgICBkZWJ1Zygnc3RhcnRpbmcgdGhyZWFkIHRvIGZlZWQgZGF0YSB0byBwaXBlJykKLSAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgaXNfZXhpdGluZwotCiAgICAgICAgIG5hY3F1aXJlID0gbm90ZW1wdHkuYWNxdWlyZQogICAgICAgICBucmVsZWFzZSA9IG5vdGVtcHR5LnJlbGVhc2UKICAgICAgICAgbndhaXQgPSBub3RlbXB0eS53YWl0CkBAIC0yNDEsMTIgKzIzOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXJpYWxpemUgdGhlIGRhdGEgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgd2FjcXVpcmUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKG9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2J5dGVzKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FjcXVpcmUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnl0ZXMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKQEAgLTI3OSwxMCArMjc4LDEwIEBACiAKIGNsYXNzIEpvaW5hYmxlUXVldWUoUXVldWUpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6Ci0gICAgICAgIFF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUpCi0gICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSBTZW1hcGhvcmUoMCkKLSAgICAgICAgc2VsZi5fY29uZCA9IENvbmRpdGlvbigpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKKyAgICAgICAgUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSwgY3R4PWN0eCkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IGN0eC5TZW1hcGhvcmUoMCkKKyAgICAgICAgc2VsZi5fY29uZCA9IGN0eC5Db25kaXRpb24oKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIFF1ZXVlLl9fZ2V0c3RhdGVfXyhzZWxmKSArIChzZWxmLl9jb25kLCBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzKQpAQCAtMzMyLDQ4ICszMzEsMzcgQEAKIAogY2xhc3MgU2ltcGxlUXVldWUob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBQaXBlKGR1cGxleD1GYWxzZSkKLSAgICAgICAgc2VsZi5fcmxvY2sgPSBMb2NrKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBzZWxmLl9ybG9jayA9IGN0eC5Mb2NrKCkKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBOb25lCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl93bG9jayA9IExvY2soKQotICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCiAKICAgICBkZWYgZW1wdHkoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5fcG9sbCgpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKQogCiAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CiAgICAgICAgIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKSA9IHN0YXRlCi0gICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKLSAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2Ci0gICAgICAgIHJhY3F1aXJlLCBycmVsZWFzZSA9IHNlbGYuX3Jsb2NrLmFjcXVpcmUsIHNlbGYuX3Jsb2NrLnJlbGVhc2UKLSAgICAgICAgZGVmIGdldCgpOgotICAgICAgICAgICAgcmFjcXVpcmUoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiByZWN2KCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcnJlbGVhc2UoKQotICAgICAgICBzZWxmLmdldCA9IGdldAorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5fcmxvY2s6CisgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWFkZXIucmVjdl9ieXRlcygpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKKyAgICBkZWYgcHV0KHNlbGYsIG9iaik6CisgICAgICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2sKKyAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICBpZiBzZWxmLl93bG9jayBpcyBOb25lOgogICAgICAgICAgICAgIyB3cml0ZXMgdG8gYSBtZXNzYWdlIG9yaWVudGVkIHdpbjMyIHBpcGUgYXJlIGF0b21pYwotICAgICAgICAgICAgc2VsZi5wdXQgPSBzZWxmLl93cml0ZXIuc2VuZAorICAgICAgICAgICAgc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMob2JqKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VuZCA9IHNlbGYuX3dyaXRlci5zZW5kCi0gICAgICAgICAgICB3YWNxdWlyZSwgd3JlbGVhc2UgPSBzZWxmLl93bG9jay5hY3F1aXJlLCBzZWxmLl93bG9jay5yZWxlYXNlCi0gICAgICAgICAgICBkZWYgcHV0KG9iaik6Ci0gICAgICAgICAgICAgICAgd2FjcXVpcmUoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbmQob2JqKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKLSAgICAgICAgICAgIHNlbGYucHV0ID0gcHV0CisgICAgICAgICAgICB3aXRoIHNlbGYuX3dsb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlci5zZW5kX2J5dGVzKG9iaikKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKaW5kZXggNjU2ZmE4Zi4uMDFlNmRlMiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKQEAgLTEsNiArMSw1IEBACiAjCi0jIE1vZHVsZSB0byBhbGxvdyBjb25uZWN0aW9uIGFuZCBzb2NrZXQgb2JqZWN0cyB0byBiZSB0cmFuc2ZlcnJlZAotIyBiZXR3ZWVuIHByb2Nlc3NlcworIyBNb2R1bGUgd2hpY2ggZGVhbHMgd2l0aCBwaWNrbGluZyBvZiBvYmplY3RzLgogIwogIyBtdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CiAjCkBAIC04LDI3ICs3LDU3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsncmVkdWNlX3NvY2tldCcsICdyZWR1Y2VfY29ubmVjdGlvbicsICdzZW5kX2hhbmRsZScsICdyZWN2X2hhbmRsZSddCi0KK2ltcG9ydCBjb3B5cmVnCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KIGltcG9ydCBvcwotaW1wb3J0IHN5cworaW1wb3J0IHBpY2tsZQogaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHN0cnVjdAotaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBkZWJ1Zywgc3ViX2RlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBpc19leGl0aW5nLCBzdWJfd2FybmluZworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHV0aWwKIAorX19hbGxfXyA9IFsnc2VuZF9oYW5kbGUnLCAncmVjdl9oYW5kbGUnLCAnRm9ya2luZ1BpY2tsZXInLCAncmVnaXN0ZXInLCAnZHVtcCddCisKKworSEFWRV9TRU5EX0hBTkRMRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgorICAgICAgICAgICAgICAgICAgICAoaGFzYXR0cihzb2NrZXQsICdDTVNHX0xFTicpIGFuZAorICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQsICdTQ01fUklHSFRTJykgYW5kCisgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdzZW5kbXNnJykpKQogCiAjCi0jCisjIFBpY2tsZXIgc3ViY2xhc3MKICMKIAotaWYgbm90KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIChoYXNhdHRyKHNvY2tldCwgJ0NNU0dfTEVOJykgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LCAnU0NNX1JJR0hUUycpKSk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3BpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKQorY2xhc3MgRm9ya2luZ1BpY2tsZXIocGlja2xlLlBpY2tsZXIpOgorICAgICcnJ1BpY2tsZXIgc3ViY2xhc3MgdXNlZCBieSBtdWx0aXByb2Nlc3NpbmcuJycnCisgICAgX2V4dHJhX3JlZHVjZXJzID0ge30KKyAgICBfY29weXJlZ19kaXNwYXRjaF90YWJsZSA9IGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBzZWxmLl9jb3B5cmVnX2Rpc3BhdGNoX3RhYmxlLmNvcHkoKQorICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShzZWxmLl9leHRyYV9yZWR1Y2VycykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiByZWdpc3RlcihjbHMsIHR5cGUsIHJlZHVjZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBhIHR5cGUuJycnCisgICAgICAgIGNscy5fZXh0cmFfcmVkdWNlcnNbdHlwZV0gPSByZWR1Y2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkdW1wcyhjbHMsIG9iaiwgcHJvdG9jb2w9Tm9uZSk6CisgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjbHMoYnVmLCBwcm90b2NvbCkuZHVtcChvYmopCisgICAgICAgIHJldHVybiBidWYuZ2V0YnVmZmVyKCkKKworICAgIGxvYWRzID0gcGlja2xlLmxvYWRzCisKK3JlZ2lzdGVyID0gRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIKKworZGVmIGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lKToKKyAgICAnJydSZXBsYWNlbWVudCBmb3IgcGlja2xlLmR1bXAoKSB1c2luZyBGb3JraW5nUGlja2xlci4nJycKKyAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCiAKICMKICMgUGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKQEAgLTM2LDIwICs2NSw0NCBAQAogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAjIFdpbmRvd3MKLSAgICBfX2FsbF9fICs9IFsncmVkdWNlX3BpcGVfY29ubmVjdGlvbiddCisgICAgX19hbGxfXyArPSBbJ0R1cEhhbmRsZScsICdkdXBsaWNhdGUnLCAnc3RlYWxfaGFuZGxlJ10KICAgICBpbXBvcnQgX3dpbmFwaQogCisgICAgZGVmIGR1cGxpY2F0ZShoYW5kbGUsIHRhcmdldF9wcm9jZXNzPU5vbmUsIGluaGVyaXRhYmxlPUZhbHNlKToKKyAgICAgICAgJycnRHVwbGljYXRlIGEgaGFuZGxlLiAgKHRhcmdldF9wcm9jZXNzIGlzIGEgaGFuZGxlIG5vdCBhIHBpZCEpJycnCisgICAgICAgIGlmIHRhcmdldF9wcm9jZXNzIGlzIE5vbmU6CisgICAgICAgICAgICB0YXJnZXRfcHJvY2VzcyA9IF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKQorICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCisgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3MsCisgICAgICAgICAgICAwLCBpbmhlcml0YWJsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MpCisKKyAgICBkZWYgc3RlYWxfaGFuZGxlKHNvdXJjZV9waWQsIGhhbmRsZSk6CisgICAgICAgICcnJ1N0ZWFsIGEgaGFuZGxlIGZyb20gcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHNvdXJjZV9waWQuJycnCisgICAgICAgIHNvdXJjZV9wcm9jZXNzX2hhbmRsZSA9IF93aW5hcGkuT3BlblByb2Nlc3MoCisgICAgICAgICAgICBfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsIHNvdXJjZV9waWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSgKKyAgICAgICAgICAgICAgICBzb3VyY2VfcHJvY2Vzc19oYW5kbGUsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIDAsIEZhbHNlLAorICAgICAgICAgICAgICAgIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTIHwgX3dpbmFwaS5EVVBMSUNBVEVfQ0xPU0VfU09VUkNFKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzb3VyY2VfcHJvY2Vzc19oYW5kbGUpCisKICAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgorICAgICAgICAnJydTZW5kIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICBkaCA9IER1cEhhbmRsZShoYW5kbGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTLCBkZXN0aW5hdGlvbl9waWQpCiAgICAgICAgIGNvbm4uc2VuZChkaCkKIAogICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKKyAgICAgICAgJycnUmVjZWl2ZSBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgcmV0dXJuIGNvbm4ucmVjdigpLmRldGFjaCgpCiAKICAgICBjbGFzcyBEdXBIYW5kbGUob2JqZWN0KToKKyAgICAgICAgJycnUGlja2xhYmxlIHdyYXBwZXIgZm9yIGEgaGFuZGxlLicnJwogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlLCBhY2Nlc3MsIHBpZD1Ob25lKToKLSAgICAgICAgICAgICMgZHVwbGljYXRlIGhhbmRsZSBmb3IgcHJvY2VzcyB3aXRoIGdpdmVuIHBpZAogICAgICAgICAgICAgaWYgcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBXZSBqdXN0IGR1cGxpY2F0ZSB0aGUgaGFuZGxlIGluIHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kCisgICAgICAgICAgICAgICAgIyBsZXQgdGhlIHJlY2VpdmluZyBwcm9jZXNzIHN0ZWFsIHRoZSBoYW5kbGUuCiAgICAgICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwgcGlkKQogICAgICAgICAgICAgdHJ5OgpAQCAtNjIsOSArMTE1LDEyIEBACiAgICAgICAgICAgICBzZWxmLl9waWQgPSBwaWQKIAogICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBoYW5kbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJwogICAgICAgICAgICAgIyByZXRyaWV2ZSBoYW5kbGUgZnJvbSBwcm9jZXNzIHdoaWNoIGN1cnJlbnRseSBvd25zIGl0CiAgICAgICAgICAgICBpZiBzZWxmLl9waWQgPT0gb3MuZ2V0cGlkKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgaGFuZGxlIGhhcyBhbHJlYWR5IGJlZW4gZHVwbGljYXRlZCBmb3IgdGhpcyBwcm9jZXNzLgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKyAgICAgICAgICAgICMgV2UgbXVzdCBzdGVhbCB0aGUgaGFuZGxlIGZyb20gdGhlIHByb2Nlc3Mgd2hvc2UgcGlkIGlzIHNlbGYuX3BpZC4KICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BpZCkKICAgICAgICAgICAgIHRyeToKQEAgLTc0LDIwNyArMTMwLDExMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHByb2MpCiAKLSAgICBjbGFzcyBEdXBTb2NrZXQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgotICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQotICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKLSAgICAgICAgICAgIHNlbGYuX2lkID0gcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIG5ld19zb2NrLmNsb3NlKQotCi0gICAgICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgICAgICBjb25uID0gcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCi0KLSAgICBkZWYgcmVkdWNlX3NvY2tldChzKToKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoRHVwU29ja2V0KHMpLCkKLQotICAgIGRlZiByZWJ1aWxkX3NvY2tldChkcyk6Ci0gICAgICAgIHJldHVybiBkcy5kZXRhY2goKQotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCi0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBkcyA9IER1cFNvY2tldChzKQotICAgICAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRzLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQotCi0gICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbgotICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0gICAgZGVmIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24oY29ubik6Ci0gICAgICAgIGFjY2VzcyA9ICgoX3dpbmFwaS5GSUxFX0dFTkVSSUNfUkVBRCBpZiBjb25uLnJlYWRhYmxlIGVsc2UgMCkgfAotICAgICAgICAgICAgICAgICAgKF93aW5hcGkuRklMRV9HRU5FUklDX1dSSVRFIGlmIGNvbm4ud3JpdGFibGUgZWxzZSAwKSkKLSAgICAgICAgZGggPSBEdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQotICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZUNvbm5lY3Rpb24KLSAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCiBlbHNlOgogICAgICMgVW5peAorICAgIF9fYWxsX18gKz0gWydEdXBGZCcsICdzZW5kZmRzJywgJ3JlY3ZmZHMnXQorICAgIGltcG9ydCBhcnJheQogCiAgICAgIyBPbiBNYWNPU1ggd2Ugc2hvdWxkIGFja25vd2xlZGdlIHJlY2VpcHQgb2YgZmRzIC0tIHNlZSBJc3N1ZTE0NjY5CiAgICAgQUNLTk9XTEVER0UgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKIAotICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6Ci0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgcy5zZW5kbXNnKFtiJ3gnXSwgWyhzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNDTV9SSUdIVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCJAaSIsIGhhbmRsZSkpXSkKLSAgICAgICAgaWYgQUNLTk9XTEVER0UgYW5kIGNvbm4ucmVjdl9ieXRlcygpICE9IGInQUNLJzoKKyAgICBkZWYgc2VuZGZkcyhzb2NrLCBmZHMpOgorICAgICAgICAnJydTZW5kIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBmZHMgPSBhcnJheS5hcnJheSgnaScsIGZkcykKKyAgICAgICAgbXNnID0gYnl0ZXMoW2xlbihmZHMpICUgMjU2XSkKKyAgICAgICAgc29jay5zZW5kbXNnKFttc2ddLCBbKHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU0NNX1JJR0hUUywgZmRzKV0pCisgICAgICAgIGlmIEFDS05PV0xFREdFIGFuZCBzb2NrLnJlY3YoMSkgIT0gYidBJzoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZGlkIG5vdCByZWNlaXZlIGFja25vd2xlZGdlbWVudCBvZiBmZCcpCiAKLSAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6Ci0gICAgICAgIHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoIkBpIikKKyAgICBkZWYgcmVjdmZkcyhzb2NrLCBzaXplKToKKyAgICAgICAgJycnUmVjZWl2ZSBhbiBhcnJheSBvZiBmZHMgb3ZlciBhbiBBRl9VTklYIHNvY2tldC4nJycKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdpJykKKyAgICAgICAgYnl0ZXNfc2l6ZSA9IGEuaXRlbXNpemUgKiBzaXplCisgICAgICAgIG1zZywgYW5jZGF0YSwgZmxhZ3MsIGFkZHIgPSBzb2NrLnJlY3Ztc2coMSwgc29ja2V0LkNNU0dfTEVOKGJ5dGVzX3NpemUpKQorICAgICAgICBpZiBub3QgbXNnIGFuZCBub3QgYW5jZGF0YToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIEFDS05PV0xFREdFOgorICAgICAgICAgICAgICAgIHNvY2suc2VuZChiJ0EnKQorICAgICAgICAgICAgaWYgbGVuKGFuY2RhdGEpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyZWNlaXZlZCAlZCBpdGVtcyBvZiBhbmNkYXRhJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhbmNkYXRhKSkKKyAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQorICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCisgICAgICAgICAgICAgICAgY21zZ190eXBlID09IHNvY2tldC5TQ01fUklHSFRTKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oY21zZ19kYXRhKSAlIGEuaXRlbXNpemUgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGNtc2dfZGF0YSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGEpICUgMjU2ID09IG1zZ1swXQorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KGEpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKworICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6CisgICAgICAgICcnJ1NlbmQgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgbXNnLCBhbmNkYXRhLCBmbGFncywgYWRkciA9IHMucmVjdm1zZygxLCBzb2NrZXQuQ01TR19MRU4oc2l6ZSkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgQUNLTk9XTEVER0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhiJ0FDSycpCi0gICAgICAgICAgICAgICAgY21zZ19sZXZlbCwgY21zZ190eXBlLCBjbXNnX2RhdGEgPSBhbmNkYXRhWzBdCi0gICAgICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCi0gICAgICAgICAgICAgICAgICAgIGNtc2dfdHlwZSA9PSBzb2NrZXQuU0NNX1JJR0hUUyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCJAaSIsIGNtc2dfZGF0YVs6c2l6ZV0pWzBdCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnZhbGlkIGRhdGEgcmVjZWl2ZWQnKQorICAgICAgICAgICAgc2VuZGZkcyhzLCBbaGFuZGxlXSkKIAotICAgIGNsYXNzIER1cEZkKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6Ci0gICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNlbmRfaGFuZGxlKGNvbm4sIG5ld19mZCwgcGlkKQotICAgICAgICAgICAgZGVmIGNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UobmV3X2ZkKQotICAgICAgICAgICAgc2VsZi5faWQgPSByZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgY2xvc2UpCisgICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgorICAgICAgICAnJydSZWNlaXZlIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJworICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHJldHVybiByZWN2ZmRzKHMsIDEpWzBdCiAKLSAgICAgICAgZGVmIGRldGFjaChzZWxmKToKLSAgICAgICAgICAgIGNvbm4gPSByZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3ZfaGFuZGxlKGNvbm4pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGRlZiBEdXBGZChmZCk6CisgICAgICAgICcnJ1JldHVybiBhIHdyYXBwZXIgZm9yIGFuIGZkLicnJworICAgICAgICBwb3Blbl9vYmogPSBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpCisgICAgICAgIGlmIHBvcGVuX29iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBwb3Blbl9vYmouRHVwRmQocG9wZW5fb2JqLmR1cGxpY2F0ZV9mb3JfY2hpbGQoZmQpKQorICAgICAgICBlbGlmIEhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlX3NoYXJlci5EdXBGZChmZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NDTV9SSUdIVFMgYXBwZWFycyBub3QgdG8gYmUgYXZhaWxhYmxlJykKIAotICAgIGRlZiByZWR1Y2Vfc29ja2V0KHMpOgorIworIyBUcnkgbWFraW5nIHNvbWUgY2FsbGFibGUgdHlwZXMgcGlja2xhYmxlCisjCisKK2RlZiBfcmVkdWNlX21ldGhvZChtKToKKyAgICBpZiBtLl9fc2VsZl9fIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX2NsYXNzX18sIG0uX19mdW5jX18uX19uYW1lX18pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fc2VsZl9fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQorY2xhc3MgX0M6CisgICAgZGVmIGYoc2VsZik6CisgICAgICAgIHBhc3MKK3JlZ2lzdGVyKHR5cGUoX0MoKS5mKSwgX3JlZHVjZV9tZXRob2QpCisKKworZGVmIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IobSk6CisgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fb2JqY2xhc3NfXywgbS5fX25hbWVfXykKK3JlZ2lzdGVyKHR5cGUobGlzdC5hcHBlbmQpLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQorcmVnaXN0ZXIodHlwZShpbnQuX19hZGRfXyksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCisKKworZGVmIF9yZWR1Y2VfcGFydGlhbChwKToKKyAgICByZXR1cm4gX3JlYnVpbGRfcGFydGlhbCwgKHAuZnVuYywgcC5hcmdzLCBwLmtleXdvcmRzIG9yIHt9KQorZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgorICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKK3JlZ2lzdGVyKGZ1bmN0b29scy5wYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCisKKyMKKyMgTWFrZSBzb2NrZXRzIHBpY2tsYWJsZQorIworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CisgICAgICAgIGZyb20gLnJlc291cmNlX3NoYXJlciBpbXBvcnQgRHVwU29ja2V0CisgICAgICAgIHJldHVybiBfcmVidWlsZF9zb2NrZXQsIChEdXBTb2NrZXQocyksKQorICAgIGRlZiBfcmVidWlsZF9zb2NrZXQoZHMpOgorICAgICAgICByZXR1cm4gZHMuZGV0YWNoKCkKKyAgICByZWdpc3Rlcihzb2NrZXQuc29ja2V0LCBfcmVkdWNlX3NvY2tldCkKKworZWxzZToKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CiAgICAgICAgIGRmID0gRHVwRmQocy5maWxlbm8oKSkKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCi0KLSAgICBkZWYgcmVidWlsZF9zb2NrZXQoZGYsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgorICAgICAgICByZXR1cm4gX3JlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCisgICAgZGVmIF9yZWJ1aWxkX3NvY2tldChkZiwgZmFtaWx5LCB0eXBlLCBwcm90byk6CiAgICAgICAgIGZkID0gZGYuZGV0YWNoKCkKLSAgICAgICAgcyA9IHNvY2tldC5mcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG8pCi0gICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICByZXR1cm4gcwotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBkZiA9IER1cEZkKGNvbm4uZmlsZW5vKCkpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZGYsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KLSAgICAgICAgZmQgPSBkZi5kZXRhY2goKQotICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0jCi0jIFNlcnZlciB3aGljaCBzaGFyZXMgcmVnaXN0ZXJlZCByZXNvdXJjZXMgd2l0aCBjbGllbnRzCi0jCi0KLWNsYXNzIFJlc291cmNlU2hhcmVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9rZXkgPSAwCi0gICAgICAgIHNlbGYuX2NhY2hlID0ge30KLSAgICAgICAgc2VsZi5fb2xkX2xvY2tzID0gW10KLSAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBSZXNvdXJjZVNoYXJlci5fYWZ0ZXJmb3JrKQotCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHNlbmQsIGNsb3NlKToKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKLSAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCi0gICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIGFkZHJlc3MsIGtleSA9IGlkZW50Ci0gICAgICAgIGMgPSBDbGllbnQoYWRkcmVzcywgYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQotICAgICAgICByZXR1cm4gYwotCi0gICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYyA9IENsaWVudChzZWxmLl9hZGRyZXNzLCBhdXRoa2V5PWN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCi0gICAgICAgICAgICAgICAgYy5zZW5kKE5vbmUpCi0gICAgICAgICAgICAgICAgYy5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4odGltZW91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm4oJ1Jlc291cmNlU2hhcmVyIHRocmVhZCBkaWQgbm90IHN0b3Agd2hlbiBhc2tlZCcpCi0gICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICAgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKLSAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLQotICAgIGRlZiBfYWZ0ZXJmb3JrKHNlbGYpOgotICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6Ci0gICAgICAgICAgICBjbG9zZSgpCi0gICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgIyBJZiBzZWxmLl9sb2NrIHdhcyBsb2NrZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmssIGl0IG1heSBiZSBicm9rZW4KLSAgICAgICAgIyAtLSBzZWUgaXNzdWUgNjcyMS4gIFJlcGxhY2UgaXQgd2l0aG91dCBsZXR0aW5nIGl0IGJlIGdjJ2VkLgotICAgICAgICBzZWxmLl9vbGRfbG9ja3MuYXBwZW5kKHNlbGYuX2xvY2spCi0gICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQotCi0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgTGlzdGVuZXIKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2xpc3RlbmVyIGlzIE5vbmUKLSAgICAgICAgZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gc2VsZi5fbGlzdGVuZXIuYWRkcmVzcwotICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc2VydmUpCi0gICAgICAgIHQuZGFlbW9uID0gVHJ1ZQotICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gdAotCi0gICAgZGVmIF9zZXJ2ZShzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKToKLSAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgcmFuZ2UoMSwgc2lnbmFsLk5TSUcpKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdigpCi0gICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAga2V5LCBkZXN0aW5hdGlvbl9waWQgPSBtc2cKLSAgICAgICAgICAgICAgICBzZW5kLCBjbG9zZSA9IHNlbGYuX2NhY2hlLnBvcChrZXkpCi0gICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCi0gICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc19leGl0aW5nKCk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm5pbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAndGhyZWFkIGZvciBzaGFyaW5nIGhhbmRsZXMgcmFpc2VkIGV4Y2VwdGlvbiA6XG4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgICctJyo3OSArICdcbicgKyB0cmFjZWJhY2suZm9ybWF0X2V4YygpICsgJy0nKjc5Ci0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLXJlc291cmNlX3NoYXJlciA9IFJlc291cmNlU2hhcmVyKCkKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywgZmlsZW5vPWZkKQorICAgIHJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIF9yZWR1Y2Vfc29ja2V0KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Jlc291cmNlX3NoYXJlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkKQEAgLTAsMCArMSwxNTggQEAKKyMKKyMgV2UgdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIHNoYXJpbmcgZmRzIG9uIFVuaXgsIGFuZCBmb3Igc2hhcmluZyBzb2NrZXRzIG9uCisjIFdpbmRvd3MuCisjCisjIEEgY2xpZW50IHdoaWNoIHdhbnRzIHRvIHBpY2tsZSBhIHJlc291cmNlIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSByZXNvdXJjZQorIyBzaGFyZXIgYW5kIGdldHMgYW4gaWRlbnRpZmllciBpbiByZXR1cm4uICBUaGUgdW5waWNrbGluZyBwcm9jZXNzIHdpbGwgY29ubmVjdAorIyB0byB0aGUgcmVzb3VyY2Ugc2hhcmVyLCBzZW5kcyB0aGUgaWRlbnRpZmllciBhbmQgaXRzIHBpZCwgYW5kIHRoZW4gcmVjZWl2ZXMKKyMgdGhlIHJlc291cmNlLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ3N0b3AnXQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIF9fYWxsX18gKz0gWydEdXBTb2NrZXQnXQorCisgICAgY2xhc3MgRHVwU29ja2V0KG9iamVjdCk6CisgICAgICAgICcnJ1BpY2tsYWJsZSB3cmFwcGVyIGZvciBhIHNvY2tldC4nJycKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgorICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQorICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBuZXdfc29jay5jbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBzb2NrZXQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJworICAgICAgICAgICAgd2l0aCBfcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKSBhcyBjb25uOgorICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKKworZWxzZToKKyAgICBfX2FsbF9fICs9IFsnRHVwRmQnXQorCisgICAgY2xhc3MgRHVwRmQob2JqZWN0KToKKyAgICAgICAgJycnV3JhcHBlciBmb3IgZmQgd2hpY2ggY2FuIGJlIHVzZWQgYXQgYW55IHRpbWUuJycnCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kX2hhbmRsZShjb25uLCBuZXdfZmQsIHBpZCkKKyAgICAgICAgICAgIGRlZiBjbG9zZSgpOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld19mZCkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBjbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBmZC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuJycnCisgICAgICAgICAgICB3aXRoIF9yZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpIGFzIGNvbm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5yZWN2X2hhbmRsZShjb25uKQorCisKK2NsYXNzIF9SZXNvdXJjZVNoYXJlcihvYmplY3QpOgorICAgICcnJ01hbmFnZXIgZm9yIHJlc291Y2VzIHVzaW5nIGJhY2tncm91bmQgdGhyZWFkLicnJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fa2V5ID0gMAorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX29sZF9sb2NrcyA9IFtdCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfUmVzb3VyY2VTaGFyZXIuX2FmdGVyZm9yaykKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBzZW5kLCBjbG9zZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIHJlc291cmNlLCByZXR1cm5pbmcgYW4gaWRlbnRpZmllci4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCisgICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKKyAgICAgICAgJycnUmV0dXJuIGNvbm5lY3Rpb24gZnJvbSB3aGljaCB0byByZWNlaXZlIGlkZW50aWZpZWQgcmVzb3VyY2UuJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAorICAgICAgICBhZGRyZXNzLCBrZXkgPSBpZGVudAorICAgICAgICBjID0gQ2xpZW50KGFkZHJlc3MsIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQorICAgICAgICByZXR1cm4gYworCisgICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnU3RvcCB0aGUgYmFja2dyb3VuZCB0aHJlYWQgYW5kIGNsZWFyIHJlZ2lzdGVyZWQgcmVzb3VyY2VzLicnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjID0gQ2xpZW50KHNlbGYuX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgICAgICAgICBjLnNlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQuam9pbih0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICB1dGlsLnN1Yl93YXJuaW5nKCdfUmVzb3VyY2VTaGFyZXIgdGhyZWFkIGRpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBzdG9wIHdoZW4gYXNrZWQnKQorICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisKKyAgICBkZWYgX2FmdGVyZm9yayhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgorICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisgICAgICAgICMgSWYgc2VsZi5fbG9jayB3YXMgbG9ja2VkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLCBpdCBtYXkgYmUgYnJva2VuCisgICAgICAgICMgLS0gc2VlIGlzc3VlIDY3MjEuICBSZXBsYWNlIGl0IHdpdGhvdXQgbGV0dGluZyBpdCBiZSBnYydlZC4KKyAgICAgICAgc2VsZi5fb2xkX2xvY2tzLmFwcGVuZChzZWxmLl9sb2NrKQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IExpc3RlbmVyCisgICAgICAgIGFzc2VydCBzZWxmLl9saXN0ZW5lciBpcyBOb25lCisgICAgICAgIHV0aWwuZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBzZWxmLl9saXN0ZW5lci5hZGRyZXNzCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zZXJ2ZSkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzZWxmLl90aHJlYWQgPSB0CisKKyAgICBkZWYgX3NlcnZlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ3B0aHJlYWRfc2lnbWFzaycpOgorICAgICAgICAgICAgc2lnbmFsLnB0aHJlYWRfc2lnbWFzayhzaWduYWwuU0lHX0JMT0NLLCByYW5nZSgxLCBzaWduYWwuTlNJRykpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKSBhcyBjb25uOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YoKQorICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGtleSwgZGVzdGluYXRpb25fcGlkID0gbXNnCisgICAgICAgICAgICAgICAgICAgIHNlbmQsIGNsb3NlID0gc2VsZi5fY2FjaGUucG9wKGtleSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaWYgbm90IHV0aWwuaXNfZXhpdGluZygpOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisKKworX3Jlc291cmNlX3NoYXJlciA9IF9SZXNvdXJjZVNoYXJlcigpCitzdG9wID0gX3Jlc291cmNlX3NoYXJlci5zdG9wCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZV90cmFja2VyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIyYjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpAQCAtMCwwICsxLDE0NSBAQAorIworIyBPbiBVbml4IHdlIHJ1biBhIHNlcnZlciBwcm9jZXNzIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHVubGlua2VkCisjIHNlbWFwaG9yZXMuIFRoZSBzZXJ2ZXIgaWdub3JlcyBTSUdJTlQgYW5kIFNJR1RFUk0gYW5kIHJlYWRzIGZyb20gYQorIyBwaXBlLiAgRXZlcnkgb3RoZXIgcHJvY2VzcyBvZiB0aGUgcHJvZ3JhbSBoYXMgYSBjb3B5IG9mIHRoZSB3cml0YWJsZQorIyBlbmQgb2YgdGhlIHBpcGUsIHNvIHdlIGdldCBFT0Ygd2hlbiBhbGwgb3RoZXIgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkLgorIyBUaGVuIHRoZSBzZXJ2ZXIgcHJvY2VzcyB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3JlIG5hbWVzLgorIworIyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBzeXN0ZW0gb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgbnVtYmVyCisjIG9mIG5hbWVkIHNlbWFwaG9yZXMsIGFuZCB0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0aWxsCisjIHRoZSBuZXh0IHJlYm9vdC4gIFdpdGhvdXQgdGhpcyBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzLCAia2lsbGFsbAorIyBweXRob24iIHdvdWxkIHByb2JhYmx5IGxlYXZlIHVubGlua2VkIHNlbWFwaG9yZXMuCisjCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCisKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKKworX19hbGxfXyA9IFsnZW5zdXJlX3J1bm5pbmcnLCAncmVnaXN0ZXInLCAndW5yZWdpc3RlciddCisKKworY2xhc3MgU2VtYXBob3JlVHJhY2tlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9mZCA9IE5vbmUKKworICAgIGRlZiBnZXRmZChzZWxmKToKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIHJldHVybiBzZWxmLl9mZAorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgcnVuIGZyb20gYW55IHByb2Nlc3MuICBVc3VhbGx5IGEgY2hpbGQgcHJvY2VzcyB3aWxsIHVzZQorICAgICAgICB0aGUgc2VtYXBob3JlIGNyZWF0ZWQgYnkgaXRzIHBhcmVudC4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MuYXBwZW5kKHN5cy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNtZCA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgbWFpbjttYWluKCVkKScKKyAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcy5hcHBlbmQocikKKyAgICAgICAgICAgICAgICAjIHByb2Nlc3Mgd2lsbCBvdXQgbGl2ZSB1cywgc28gbm8gbmVlZCB0byB3YWl0IG9uIHBpZAorICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICBhcmdzID0gW2V4ZV0gKyB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgIGFyZ3MgKz0gWyctYycsIGNtZCAlIHJdCisgICAgICAgICAgICAgICAgdXRpbC5zcGF3bnZfcGFzc2ZkcyhleGUsIGFyZ3MsIGZkc190b19wYXNzKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmQgPSB3CisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgbmFtZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1JFR0lTVEVSJywgbmFtZSkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAnJydVbnJlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1VOUkVHSVNURVInLCBuYW1lKQorCisgICAgZGVmIF9zZW5kKHNlbGYsIGNtZCwgbmFtZSk6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBtc2cgPSAnezB9OnsxfVxuJy5mb3JtYXQoY21kLCBuYW1lKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgaWYgbGVuKG5hbWUpID4gNTEyOgorICAgICAgICAgICAgIyBwb3NpeCBndWFyYW50ZWVzIHRoYXQgd3JpdGVzIHRvIGEgcGlwZSBvZiBsZXNzIHRoYW4gUElQRV9CVUYKKyAgICAgICAgICAgICMgYnl0ZXMgYXJlIGF0b21pYywgYW5kIHRoYXQgUElQRV9CVUYgPj0gNTEyCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYW1lIHRvbyBsb25nJykKKyAgICAgICAgbmJ5dGVzID0gb3Mud3JpdGUoc2VsZi5fZmQsIG1zZykKKyAgICAgICAgYXNzZXJ0IG5ieXRlcyA9PSBsZW4obXNnKQorCisKK19zZW1hcGhvcmVfdHJhY2tlciA9IFNlbWFwaG9yZVRyYWNrZXIoKQorZW5zdXJlX3J1bm5pbmcgPSBfc2VtYXBob3JlX3RyYWNrZXIuZW5zdXJlX3J1bm5pbmcKK3JlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnJlZ2lzdGVyCit1bnJlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnVucmVnaXN0ZXIKK2dldGZkID0gX3NlbWFwaG9yZV90cmFja2VyLmdldGZkCisKKworZGVmIG1haW4oZmQpOgorICAgICcnJ1J1biBzZW1hcGhvcmUgdHJhY2tlci4nJycKKyAgICAjIHByb3RlY3QgdGhlIHByb2Nlc3MgZnJvbSBeQyBhbmQgImtpbGxhbGwgcHl0aG9uIiBldGMKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdfSUdOKQorCisgICAgZm9yIGYgaW4gKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgY2FjaGUgPSBzZXQoKQorICAgIHRyeToKKyAgICAgICAgIyBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIHNlbWFwaG9yZXMKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNtZCwgbmFtZSA9IGxpbmUuc3RyaXAoKS5zcGxpdChiJzonKQorICAgICAgICAgICAgICAgICAgICBpZiBjbWQgPT0gYidSRUdJU1RFUic6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gYidVTlJFR0lTVEVSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd1bnJlY29nbml6ZWQgY29tbWFuZCAlcicgJSBjbWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgIyBhbGwgcHJvY2Vzc2VzIGhhdmUgdGVybWluYXRlZDsgY2xlYW51cCBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZXMKKyAgICAgICAgaWYgY2FjaGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6IFRoZXJlIGFwcGVhciB0byBiZSAlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVha2VkIHNlbWFwaG9yZXMgdG8gY2xlYW4gdXAgYXQgc2h1dGRvd24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjYWNoZSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIG5hbWUgaW4gY2FjaGU6CisgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIHRoaXMKKyAgICAgICAgICAgICMgc2VtYXBob3JlIGhhcyBmYWlsZWQgdG8gdW5yZWdpc3RlciBpdC4gUHJlc3VtYWJseSBpdCBoYXMgZGllZC4KKyAgICAgICAgICAgICMgV2UgdGhlcmVmb3JlIHVubGluayBpdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6ICVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKaW5kZXggYTM1OGVkNC4uMGMxNzgyNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKQEAgLTEwLDggKzEwLDExIEBACiBpbXBvcnQgY3R5cGVzCiBpbXBvcnQgd2Vha3JlZgogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgaGVhcCwgUkxvY2sKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgRm9ya2luZ1BpY2tsZXIKK2Zyb20gLiBpbXBvcnQgaGVhcAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAorCitmcm9tIC5jb250ZXh0IGltcG9ydCBhc3NlcnRfc3Bhd25pbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogX19hbGxfXyA9IFsnUmF3VmFsdWUnLCAnUmF3QXJyYXknLCAnVmFsdWUnLCAnQXJyYXknLCAnY29weScsICdzeW5jaHJvbml6ZWQnXQogCkBAIC02Myw3ICs2Niw3IEBACiAgICAgICAgIHJlc3VsdC5fX2luaXRfXygqc2l6ZV9vcl9pbml0aWFsaXplcikKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi1kZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6CitkZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFZhbHVlCiAgICAgJycnCkBAIC03MSwxMiArNzQsMTMgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgorZGVmIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFJhd0FycmF5CiAgICAgJycnCkBAIC04NCwyNSArODgsMjcgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKIGRlZiBjb3B5KG9iaik6CiAgICAgbmV3X29iaiA9IF9uZXdfdmFsdWUodHlwZShvYmopKQogICAgIGN0eXBlcy5wb2ludGVyKG5ld19vYmopWzBdID0gb2JqCiAgICAgcmV0dXJuIG5ld19vYmoKIAotZGVmIHN5bmNocm9uaXplZChvYmosIGxvY2s9Tm9uZSk6CitkZWYgc3luY2hyb25pemVkKG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKG9iaiwgU3luY2hyb25pemVkQmFzZSksICdvYmplY3QgYWxyZWFkeSBzeW5jaHJvbml6ZWQnCisgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKIAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjdHlwZXMuX1NpbXBsZUNEYXRhKToKLSAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY3R5cGVzLkFycmF5KToKICAgICAgICAgaWYgb2JqLl90eXBlXyBpcyBjdHlwZXMuY19jaGFyOgotICAgICAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZFN0cmluZyhvYmosIGxvY2spCi0gICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRBcnJheShvYmosIGxvY2spCisgICAgICAgICAgICByZXR1cm4gU3luY2hyb25pemVkU3RyaW5nKG9iaiwgbG9jaywgY3R4KQorICAgICAgICByZXR1cm4gU3luY2hyb25pemVkQXJyYXkob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxzZToKICAgICAgICAgY2xzID0gdHlwZShvYmopCiAgICAgICAgIHRyeToKQEAgLTExMiw3ICsxMTgsNyBAQAogICAgICAgICAgICAgZCA9IGRpY3QoKG5hbWUsIG1ha2VfcHJvcGVydHkobmFtZSkpIGZvciBuYW1lIGluIG5hbWVzKQogICAgICAgICAgICAgY2xhc3NuYW1lID0gJ1N5bmNocm9uaXplZCcgKyBjbHMuX19uYW1lX18KICAgICAgICAgICAgIHNjbHMgPSBjbGFzc19jYWNoZVtjbHNdID0gdHlwZShjbGFzc25hbWUsIChTeW5jaHJvbml6ZWRCYXNlLCksIGQpCi0gICAgICAgIHJldHVybiBzY2xzKG9iaiwgbG9jaykKKyAgICAgICAgcmV0dXJuIHNjbHMob2JqLCBsb2NrLCBjdHgpCiAKICMKICMgRnVuY3Rpb25zIGZvciBwaWNrbGluZy91bnBpY2tsaW5nCkBAIC0xNzIsOSArMTc4LDEzIEBACiAKIGNsYXNzIFN5bmNocm9uaXplZEJhc2Uob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGxvY2s9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29iaiA9IG9iagotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCisgICAgICAgIGlmIGxvY2s6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gbG9jaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLl9sb2NrID0gY3R4LlJMb2NrKCkKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fbG9jay5hY3F1aXJlCiAgICAgICAgIHNlbGYucmVsZWFzZSA9IHNlbGYuX2xvY2sucmVsZWFzZQogCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjRiNTNmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpAQCAtMCwwICsxLDI1OCBAQAorIworIyBDb2RlIHVzZWQgdG8gc3RhcnQgcHJvY2Vzc2VzIHdoZW4gdXNpbmcgdGhlIHNwYXduIG9yIGZvcmtzZXJ2ZXIKKyMgc3RhcnQgbWV0aG9kcy4KKyMKKyMgbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5CisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzeXMKKworZnJvbSAuIGltcG9ydCBnZXRfc3RhcnRfbWV0aG9kLCBzZXRfc3RhcnRfbWV0aG9kCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydfbWFpbicsICdmcmVlemVfc3VwcG9ydCcsICdzZXRfZXhlY3V0YWJsZScsICdnZXRfZXhlY3V0YWJsZScsCisgICAgICAgICAgICdnZXRfcHJlcGFyYXRpb25fZGF0YScsICdnZXRfY29tbWFuZF9saW5lJywgJ2ltcG9ydF9tYWluX3BhdGgnXQorCisjCisjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgorIyBQZW9wbGUgZW1iZWRkaW5nIFB5dGhvbiB3YW50IHRvIG1vZGlmeSBpdC4KKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgV0lORVhFID0gRmFsc2UKKyAgICBXSU5TRVJWSUNFID0gRmFsc2UKK2Vsc2U6CisgICAgV0lORVhFID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKSkKKyAgICBXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQorCitpZiBXSU5TRVJWSUNFOgorICAgIF9weXRob25fZXhlID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ3B5dGhvbi5leGUnKQorZWxzZToKKyAgICBfcHl0aG9uX2V4ZSA9IHN5cy5leGVjdXRhYmxlCisKK2RlZiBzZXRfZXhlY3V0YWJsZShleGUpOgorICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQorICAgIF9weXRob25fZXhlID0gZXhlCisKK2RlZiBnZXRfZXhlY3V0YWJsZSgpOgorICAgIHJldHVybiBfcHl0aG9uX2V4ZQorCisjCisjCisjCisKK2RlZiBpc19mb3JraW5nKGFyZ3YpOgorICAgICcnJworICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZworICAgICcnJworICAgIGlmIGxlbihhcmd2KSA+PSAyIGFuZCBhcmd2WzFdID09ICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJzoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZnJlZXplX3N1cHBvcnQoKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBmb3IgcHJvY2VzcyBvYmplY3QgaWYgdGhpcyBpbiBub3QgdGhlIG1haW4gcHJvY2VzcworICAgICcnJworICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgorICAgICAgICBtYWluKCkKKyAgICAgICAgc3lzLmV4aXQoKQorCisKK2RlZiBnZXRfY29tbWFuZF9saW5lKCoqa3dkcyk6CisgICAgJycnCisgICAgUmV0dXJucyBwcmVmaXggb2YgY29tbWFuZCBsaW5lIHVzZWQgZm9yIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworICAgICcnJworICAgIGlmIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gW3N5cy5leGVjdXRhYmxlLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisgICAgZWxzZToKKyAgICAgICAgcHJvZyA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zcGF3biBpbXBvcnQgc3Bhd25fbWFpbjsgc3Bhd25fbWFpbiglcyknCisgICAgICAgIHByb2cgJT0gJywgJy5qb2luKCclcz0lcicgJSBpdGVtIGZvciBpdGVtIGluIGt3ZHMuaXRlbXMoKSkKKyAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgIHJldHVybiBbX3B5dGhvbl9leGVdICsgb3B0cyArIFsnLWMnLCBwcm9nLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisKKworZGVmIHNwYXduX21haW4ocGlwZV9oYW5kbGUsIHBhcmVudF9waWQ9Tm9uZSwgdHJhY2tlcl9mZD1Ob25lKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBzcGVjaWZlZCBieSBkYXRhIHJlY2VpdmVkIG92ZXIgcGlwZQorICAgICcnJworICAgIGFzc2VydCBpc19mb3JraW5nKHN5cy5hcmd2KQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGZyb20gLnJlZHVjdGlvbiBpbXBvcnQgc3RlYWxfaGFuZGxlCisgICAgICAgIG5ld19oYW5kbGUgPSBzdGVhbF9oYW5kbGUocGFyZW50X3BpZCwgcGlwZV9oYW5kbGUpCisgICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKG5ld19oYW5kbGUsIG9zLk9fUkRPTkxZKQorICAgIGVsc2U6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHRyYWNrZXJfZmQKKyAgICAgICAgZmQgPSBwaXBlX2hhbmRsZQorICAgIGV4aXRjb2RlID0gX21haW4oZmQpCisgICAgc3lzLmV4aXQoZXhpdGNvZGUpCisKKworZGVmIF9tYWluKGZkKToKKyAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3JiJywgY2xvc2VmZD1UcnVlKSBhcyBmcm9tX3BhcmVudDoKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJlcGFyYXRpb25fZGF0YSA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQorICAgICAgICAgICAgc2VsZiA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcKKyAgICByZXR1cm4gc2VsZi5fYm9vdHN0cmFwKCkKKworCitkZWYgX2NoZWNrX25vdF9pbXBvcnRpbmdfbWFpbigpOgorICAgIGlmIGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJycnCisgICAgICAgIEFuIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBzdGFydCBhIG5ldyBwcm9jZXNzIGJlZm9yZSB0aGUKKyAgICAgICAgY3VycmVudCBwcm9jZXNzIGhhcyBmaW5pc2hlZCBpdHMgYm9vdHN0cmFwcGluZyBwaGFzZS4KKworICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBub3QgdXNpbmcgZm9yayB0byBzdGFydCB5b3VyCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBhbmQgeW91IGhhdmUgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tCisgICAgICAgIGluIHRoZSBtYWluIG1vZHVsZToKKworICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgICAgICBmcmVlemVfc3VwcG9ydCgpCisgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVGhlICJmcmVlemVfc3VwcG9ydCgpIiBsaW5lIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwcm9ncmFtCisgICAgICAgIGlzIG5vdCBnb2luZyB0byBiZSBmcm96ZW4gdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLicnJykKKworCitkZWYgZ2V0X3ByZXBhcmF0aW9uX2RhdGEobmFtZSk6CisgICAgJycnCisgICAgUmV0dXJuIGluZm8gYWJvdXQgcGFyZW50IG5lZWRlZCBieSBjaGlsZCB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAorICAgICcnJworICAgIF9jaGVja19ub3RfaW1wb3J0aW5nX21haW4oKQorICAgIGQgPSBkaWN0KAorICAgICAgICBsb2dfdG9fc3RkZXJyPXV0aWwuX2xvZ190b19zdGRlcnIsCisgICAgICAgIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5LAorICAgICAgICApCisKKyAgICBpZiB1dGlsLl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gdXRpbC5fbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKworICAgIHN5c19wYXRoPXN5cy5wYXRoLmNvcHkoKQorICAgIHRyeToKKyAgICAgICAgaSA9IHN5c19wYXRoLmluZGV4KCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgc3lzX3BhdGhbaV0gPSBwcm9jZXNzLk9SSUdJTkFMX0RJUgorCisgICAgZC51cGRhdGUoCisgICAgICAgIG5hbWU9bmFtZSwKKyAgICAgICAgc3lzX3BhdGg9c3lzX3BhdGgsCisgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAorICAgICAgICBvcmlnX2Rpcj1wcm9jZXNzLk9SSUdJTkFMX0RJUiwKKyAgICAgICAgZGlyPW9zLmdldGN3ZCgpLAorICAgICAgICBzdGFydF9tZXRob2Q9Z2V0X3N0YXJ0X21ldGhvZCgpLAorICAgICAgICApCisKKyAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJyBvciAobm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0UpOgorICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQorICAgICAgICBpZiBub3QgbWFpbl9wYXRoIGFuZCBzeXMuYXJndlswXSBub3QgaW4gKCcnLCAnLWMnKToKKyAgICAgICAgICAgIG1haW5fcGF0aCA9IHN5cy5hcmd2WzBdCisgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIChub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgIG1haW5fcGF0aCA9IG9zLnBhdGguam9pbihwcm9jZXNzLk9SSUdJTkFMX0RJUiwgbWFpbl9wYXRoKQorICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKKworICAgIHJldHVybiBkCisKKyMKKyMgUHJlcGFyZSBjdXJyZW50IHByb2Nlc3MKKyMKKworb2xkX21haW5fbW9kdWxlcyA9IFtdCisKK2RlZiBwcmVwYXJlKGRhdGEpOgorICAgICcnJworICAgIFRyeSB0byBnZXQgY3VycmVudCBwcm9jZXNzIHJlYWR5IHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgaWYgJ25hbWUnIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQorCisgICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSA9IGRhdGFbJ2F1dGhrZXknXQorCisgICAgaWYgJ2xvZ190b19zdGRlcnInIGluIGRhdGEgYW5kIGRhdGFbJ2xvZ190b19zdGRlcnInXToKKyAgICAgICAgdXRpbC5sb2dfdG9fc3RkZXJyKCkKKworICAgIGlmICdsb2dfbGV2ZWwnIGluIGRhdGE6CisgICAgICAgIHV0aWwuZ2V0X2xvZ2dlcigpLnNldExldmVsKGRhdGFbJ2xvZ19sZXZlbCddKQorCisgICAgaWYgJ3N5c19wYXRoJyBpbiBkYXRhOgorICAgICAgICBzeXMucGF0aCA9IGRhdGFbJ3N5c19wYXRoJ10KKworICAgIGlmICdzeXNfYXJndicgaW4gZGF0YToKKyAgICAgICAgc3lzLmFyZ3YgPSBkYXRhWydzeXNfYXJndiddCisKKyAgICBpZiAnZGlyJyBpbiBkYXRhOgorICAgICAgICBvcy5jaGRpcihkYXRhWydkaXInXSkKKworICAgIGlmICdvcmlnX2RpcicgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCisKKyAgICBpZiAnc3RhcnRfbWV0aG9kJyBpbiBkYXRhOgorICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKGRhdGFbJ3N0YXJ0X21ldGhvZCddKQorCisgICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKKyAgICAgICAgaW1wb3J0X21haW5fcGF0aChkYXRhWydtYWluX3BhdGgnXSkKKworCitkZWYgaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpOgorICAgICcnJworICAgIFNldCBzeXMubW9kdWxlc1snX19tYWluX18nXSB0byBtb2R1bGUgYXQgbWFpbl9wYXRoCisgICAgJycnCisgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKKyAgICAjIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gX19maWxlX18KKyAgICAjIGFuZCBhIG1vZHVsZSdzIHJlYWwgbmFtZS4gU2VlIFBFUCAzMDIgYW5kIGlzc3VlICMxMDg0NQorICAgIGlmIGdldGF0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdfX2ZpbGVfXycsIE5vbmUpID09IG1haW5fcGF0aDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBtYWluX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKSlbMF0KKyAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKKyAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSkKKworICAgIGlmIG1haW5fbmFtZSA9PSAnX19tYWluX18nOgorICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgICAgIG1haW5fbW9kdWxlLl9fZmlsZV9fID0gbWFpbl9wYXRoCisgICAgZWxpZiBtYWluX25hbWUgIT0gJ2lweXRob24nOgorICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQorICAgICAgICAjIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHRoYXQgc2hvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkCisgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKKyAgICAgICAgaW1wb3J0IHR5cGVzCisKKyAgICAgICAgaWYgbWFpbl9wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBkaXJzID0gTm9uZQorICAgICAgICBlbGlmIG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKS5zdGFydHN3aXRoKCdfX2luaXRfXy5weScpOgorICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKV0KKworICAgICAgICBhc3NlcnQgbWFpbl9uYW1lIG5vdCBpbiBzeXMubW9kdWxlcywgbWFpbl9uYW1lCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcCgnX19tcF9tYWluX18nLCBOb25lKQorICAgICAgICAjIFdlIHNob3VsZCBub3QgdHJ5IHRvIGxvYWQgX19tYWluX18KKyAgICAgICAgIyBzaW5jZSB0aGF0IHdvdWxkIGV4ZWN1dGUgJ2lmIF9fbmFtZV9fID09ICJfX21haW5fXyInCisgICAgICAgICMgY2xhdXNlcywgcG90ZW50aWFsbHkgY2F1c2luZyBhIHBzdWVkbyBmb3JrIGJvbWIuCisgICAgICAgIG1haW5fbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtYWluX25hbWUpCisgICAgICAgICMgWFhYIFVzZSBhIHRhcmdldCBvZiBtYWluX21vZHVsZT8KKyAgICAgICAgc3BlYyA9IGltcG9ydGxpYi5maW5kX3NwZWMobWFpbl9uYW1lLCBwYXRoPWRpcnMpCisgICAgICAgIG1ldGhvZHMgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKKyAgICAgICAgbWV0aG9kcy5pbml0X21vZHVsZV9hdHRycyhtYWluX21vZHVsZSkKKyAgICAgICAgbWFpbl9tb2R1bGUuX19uYW1lX18gPSAnX19tcF9tYWluX18nCisgICAgICAgIGNvZGUgPSBzcGVjLmxvYWRlci5nZXRfY29kZShtYWluX25hbWUpCisgICAgICAgIGV4ZWMoY29kZSwgbWFpbl9tb2R1bGUuX19kaWN0X18pCisKKyAgICAgICAgb2xkX21haW5fbW9kdWxlcy5hcHBlbmQoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10pCisgICAgICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBtYWluX21vZHVsZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKaW5kZXggMGZhY2E3OC4uOWQ4ZTI4MiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CkBAIC0xMSwyMCArMTEsMjQgQEAKICAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLCAnRXZlbnQnCiAgICAgXQogCitpbXBvcnQgb3MKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBzeXMKLQoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nLCBQb3BlbgorCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKIAorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgdXRpbAorCiAjIFRyeSB0byBpbXBvcnQgdGhlIG1wLnN5bmNocm9uaXplIG1vZHVsZSBjbGVhbmx5LCBpZiBpdCBmYWlscwogIyByYWlzZSBJbXBvcnRFcnJvciBmb3IgcGxhdGZvcm1zIGxhY2tpbmcgYSB3b3JraW5nIHNlbV9vcGVuIGltcGxlbWVudGF0aW9uLgogIyBTZWUgaXNzdWUgMzc3MAogdHJ5OgotICAgIGZyb20gX211bHRpcHJvY2Vzc2luZyBpbXBvcnQgU2VtTG9jaworICAgIGZyb20gX211bHRpcHJvY2Vzc2luZyBpbXBvcnQgU2VtTG9jaywgc2VtX3VubGluawogZXhjZXB0IChJbXBvcnRFcnJvcik6CiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIlRoaXMgcGxhdGZvcm0gbGFja3MgYSBmdW5jdGlvbmluZyBzZW1fb3BlbiIgKwogICAgICAgICAgICAgICAgICAgICAgICIgaW1wbGVtZW50YXRpb24sIHRoZXJlZm9yZSwgdGhlIHJlcXVpcmVkIiArCkBAIC00NCwxNSArNDgsNDYgQEAKIAogY2xhc3MgU2VtTG9jayhvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSk6Ci0gICAgICAgIHNsID0gc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jayhraW5kLCB2YWx1ZSwgbWF4dmFsdWUpCi0gICAgICAgIGRlYnVnKCdjcmVhdGVkIHNlbWxvY2sgd2l0aCBoYW5kbGUgJXMnICUgc2wuaGFuZGxlKQorICAgIF9yYW5kID0gdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwga2luZCwgdmFsdWUsIG1heHZhbHVlLCAqLCBjdHgpOgorICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQorICAgICAgICBjdHggPSBjdHguZ2V0X2NvbnRleHQoKQorICAgICAgICB1bmxpbmtfbm93ID0gc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IgY3R4Ll9uYW1lID09ICdmb3JrJworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNsID0gc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jaygKKyAgICAgICAgICAgICAgICAgICAga2luZCwgdmFsdWUsIG1heHZhbHVlLCBzZWxmLl9tYWtlX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgdW5saW5rX25vdykKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKCdjYW5ub3QgZmluZCBuYW1lIGZvciBzZW1hcGhvcmUnKQorCisgICAgICAgIHV0aWwuZGVidWcoJ2NyZWF0ZWQgc2VtbG9jayB3aXRoIGhhbmRsZSAlcycgJSBzbC5oYW5kbGUpCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CiAgICAgICAgICAgICBkZWYgX2FmdGVyX2Zvcmsob2JqKToKICAgICAgICAgICAgICAgICBvYmouX3NlbWxvY2suX2FmdGVyX2ZvcmsoKQotICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfYWZ0ZXJfZm9yaykKKyAgICAgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfYWZ0ZXJfZm9yaykKKworICAgICAgICBpZiBzZWxmLl9zZW1sb2NrLm5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFdlIG9ubHkgZ2V0IGhlcmUgaWYgd2UgYXJlIG9uIFVuaXggd2l0aCBmb3JraW5nCisgICAgICAgICAgICAjIGRpc2FibGVkLiAgV2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIG9yIHRoZQorICAgICAgICAgICAgIyBwcm9jZXNzIHNodXRzIGRvd24gd2UgdW5saW5rIHRoZSBzZW1hcGhvcmUgbmFtZQorICAgICAgICAgICAgZnJvbSAuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IHJlZ2lzdGVyCisgICAgICAgICAgICByZWdpc3RlcihzZWxmLl9zZW1sb2NrLm5hbWUpCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIFNlbUxvY2suX2NsZWFudXAsIChzZWxmLl9zZW1sb2NrLm5hbWUsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdHByaW9yaXR5PTApCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jbGVhbnVwKG5hbWUpOgorICAgICAgICBmcm9tIC5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgdW5yZWdpc3RlcgorICAgICAgICBzZW1fdW5saW5rKG5hbWUpCisgICAgICAgIHVucmVnaXN0ZXIobmFtZSkKIAogICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgogICAgICAgICBzZWxmLmFjcXVpcmUgPSBzZWxmLl9zZW1sb2NrLmFjcXVpcmUKQEAgLTY1LDIzICsxMDAsMzIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX19leGl0X18oKmFyZ3MpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrCi0gICAgICAgIHJldHVybiAoUG9wZW4uZHVwbGljYXRlX2Zvcl9jaGlsZChzbC5oYW5kbGUpLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBoID0gY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKS5kdXBsaWNhdGVfZm9yX2NoaWxkKHNsLmhhbmRsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGggPSBzbC5oYW5kbGUKKyAgICAgICAgcmV0dXJuIChoLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSwgc2wubmFtZSkKIAogICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgogICAgICAgICBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLl9yZWJ1aWxkKCpzdGF0ZSkKLSAgICAgICAgZGVidWcoJ3JlY3JlYXRlZCBibG9ja2VyIHdpdGggaGFuZGxlICVyJyAlIHN0YXRlWzBdKQorICAgICAgICB1dGlsLmRlYnVnKCdyZWNyZWF0ZWQgYmxvY2tlciB3aXRoIGhhbmRsZSAlcicgJSBzdGF0ZVswXSkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfbmFtZSgpOgorICAgICAgICByZXR1cm4gJyVzLSVzJyAlIChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3NlbXByZWZpeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KFNlbUxvY2suX3JhbmQpKQorCiAjCiAjIFNlbWFwaG9yZQogIwogCiBjbGFzcyBTZW1hcGhvcmUoU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIHZhbHVlLCBTRU1fVkFMVUVfTUFYLCBjdHg9Y3R4KQogCiAgICAgZGVmIGdldF92YWx1ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpCkBAIC05OSw4ICsxNDMsOCBAQAogCiBjbGFzcyBCb3VuZGVkU2VtYXBob3JlKFNlbWFwaG9yZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTExNiwxMyArMTYwLDEzIEBACiAKIGNsYXNzIExvY2soU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCAxLCAxKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSwgY3R4PWN0eCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5faXNfbWluZSgpOgotICAgICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgICAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUgIT0gJ01haW5UaHJlYWQnOgogICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2VtbG9jay5fZ2V0X3ZhbHVlKCkgPT0gMToKQEAgLTE0MSwxMyArMTg1LDEzIEBACiAKIGNsYXNzIFJMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFJFQ1VSU0lWRV9NVVRFWCwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICAgICAgY291bnQgPSBzZWxmLl9zZW1sb2NrLl9jb3VudCgpCkBAIC0xNjcsMTUgKzIxMSwxNSBAQAogCiBjbGFzcyBDb25kaXRpb24ob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUpOgotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCi0gICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dhaXRfc2VtYXBob3JlID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2s9Tm9uZSwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgY3R4LlJMb2NrKCkKKyAgICAgICAgc2VsZi5fc2xlZXBpbmdfY291bnQgPSBjdHguU2VtYXBob3JlKDApCisgICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IGN0eC5TZW1hcGhvcmUoMCkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2xvY2ssIHNlbGYuX3NsZWVwaW5nX2NvdW50LAogICAgICAgICAgICAgICAgIHNlbGYuX3dva2VuX2NvdW50LCBzZWxmLl93YWl0X3NlbWFwaG9yZSkKIApAQCAtMjg5LDkgKzMzMyw5IEBACiAKIGNsYXNzIEV2ZW50KG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbmQgPSBDb25kaXRpb24oTG9jaygpKQotICAgICAgICBzZWxmLl9mbGFnID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbmQgPSBjdHguQ29uZGl0aW9uKGN0eC5Mb2NrKCkpCisgICAgICAgIHNlbGYuX2ZsYWcgPSBjdHguU2VtYXBob3JlKDApCiAKICAgICBkZWYgaXNfc2V0KHNlbGYpOgogICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQpAQCAtMzQwLDExICszODQsMTEgQEAKIAogY2xhc3MgQmFycmllcih0aHJlYWRpbmcuQmFycmllcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUsICosIGN0eCk6CiAgICAgICAgIGltcG9ydCBzdHJ1Y3QKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgorICAgICAgICBmcm9tIC5oZWFwIGltcG9ydCBCdWZmZXJXcmFwcGVyCiAgICAgICAgIHdyYXBwZXIgPSBCdWZmZXJXcmFwcGVyKHN0cnVjdC5jYWxjc2l6ZSgnaScpICogMikKLSAgICAgICAgY29uZCA9IENvbmRpdGlvbigpCisgICAgICAgIGNvbmQgPSBjdHguQ29uZGl0aW9uKCkKICAgICAgICAgc2VsZi5fX3NldHN0YXRlX18oKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY29uZCwgd3JhcHBlcikpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gMAogICAgICAgICBzZWxmLl9jb3VudCA9IDAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQppbmRleCBmNTg2MmI0Li5lNDc2ZTg1IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CkBAIC0xNywxMyArMTcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYW51cCBmdW5jdGlvbiBiZWZvcmUgbXVsdGlwcm9jZXNzaW5nIGRvZXMKIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbgorZnJvbSAuIGltcG9ydCBwcm9jZXNzCiAKIF9fYWxsX18gPSBbCiAgICAgJ3N1Yl9kZWJ1ZycsICdkZWJ1ZycsICdpbmZvJywgJ3N1Yl93YXJuaW5nJywgJ2dldF9sb2dnZXInLAogICAgICdsb2dfdG9fc3RkZXJyJywgJ2dldF90ZW1wX2RpcicsICdyZWdpc3Rlcl9hZnRlcl9mb3JrJywKICAgICAnaXNfZXhpdGluZycsICdGaW5hbGl6ZScsICdGb3JrQXdhcmVUaHJlYWRMb2NrJywgJ0ZvcmtBd2FyZUxvY2FsJywKLSAgICAnU1VCREVCVUcnLCAnU1VCV0FSTklORycsCisgICAgJ2Nsb3NlX2FsbF9mZHNfZXhjZXB0JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAogICAgIF0KIAogIwpAQCAtNzEsOCArNzEsNiBAQAogCiAgICAgICAgICAgICBfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoTE9HR0VSX05BTUUpCiAgICAgICAgICAgICBfbG9nZ2VyLnByb3BhZ2F0ZSA9IDAKLSAgICAgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKFNVQkRFQlVHLCAnU1VCREVCVUcnKQotICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoU1VCV0FSTklORywgJ1NVQldBUk5JTkcnKQogCiAgICAgICAgICAgICAjIFhYWCBtdWx0aXByb2Nlc3Npbmcgc2hvdWxkIGNsZWFudXAgYmVmb3JlIGxvZ2dpbmcKICAgICAgICAgICAgIGlmIGhhc2F0dHIoYXRleGl0LCAndW5yZWdpc3RlcicpOgpAQCAtMTExLDEzICsxMDksMTQgQEAKIAogZGVmIGdldF90ZW1wX2RpcigpOgogICAgICMgZ2V0IG5hbWUgb2YgYSB0ZW1wIGRpcmVjdG9yeSB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cAotICAgIGlmIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyIGlzIE5vbmU6CisgICAgdGVtcGRpciA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2NvbmZpZy5nZXQoJ3RlbXBkaXInKQorICAgIGlmIHRlbXBkaXIgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IHNodXRpbCwgdGVtcGZpbGUKICAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdweW1wLScpCiAgICAgICAgIGluZm8oJ2NyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgJXMnLCB0ZW1wZGlyKQogICAgICAgICBGaW5hbGl6ZShOb25lLCBzaHV0aWwucm10cmVlLCBhcmdzPVt0ZW1wZGlyXSwgZXhpdHByaW9yaXR5PS0xMDApCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyID0gdGVtcGRpcgotICAgIHJldHVybiBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpcgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3RlbXBkaXInXSA9IHRlbXBkaXIKKyAgICByZXR1cm4gdGVtcGRpcgogCiAjCiAjIFN1cHBvcnQgZm9yIHJlaW5pdGlhbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIGJvb3RzdHJhcHBpbmcgYSBjaGlsZCBwcm9jZXNzCkBAIC0yNzMsOCArMjcyLDggQEAKIF9leGl0aW5nID0gRmFsc2UKIAogZGVmIF9leGl0X2Z1bmN0aW9uKGluZm89aW5mbywgZGVidWc9ZGVidWcsIF9ydW5fZmluYWxpemVycz1fcnVuX2ZpbmFsaXplcnMsCi0gICAgICAgICAgICAgICAgICAgYWN0aXZlX2NoaWxkcmVuPWFjdGl2ZV9jaGlsZHJlbiwKLSAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Byb2Nlc3M9Y3VycmVudF9wcm9jZXNzKToKKyAgICAgICAgICAgICAgICAgICBhY3RpdmVfY2hpbGRyZW49cHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4sCisgICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9jZXNzPXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKToKICAgICAjIFdlIGhvbGQgb24gdG8gcmVmZXJlbmNlcyB0byBmdW5jdGlvbnMgaW4gdGhlIGFyZ2xpc3QgZHVlIHRvIHRoZQogICAgICMgc2l0dWF0aW9uIGRlc2NyaWJlZCBiZWxvdywgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhpcwogICAgICMgbW9kdWxlJ3MgZ2xvYmFscyBhcmUgZGVzdHJveWVkLgpAQCAtMzAzLDcgKzMwMiw3IEBACiAgICAgICAgICAgICAjICM5MjA3LgogCiAgICAgICAgICAgICBmb3IgcCBpbiBhY3RpdmVfY2hpbGRyZW4oKToKLSAgICAgICAgICAgICAgICBpZiBwLl9kYWVtb25pYzoKKyAgICAgICAgICAgICAgICBpZiBwLmRhZW1vbjoKICAgICAgICAgICAgICAgICAgICAgaW5mbygnY2FsbGluZyB0ZXJtaW5hdGUoKSBmb3IgZGFlbW9uICVzJywgcC5uYW1lKQogICAgICAgICAgICAgICAgICAgICBwLl9wb3Blbi50ZXJtaW5hdGUoKQogCkBAIC0zMzUsMyArMzM0LDM2IEBACiAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgbGFtYmRhIG9iaiA6IG9iai5fX2RpY3RfXy5jbGVhcigpKQogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gdHlwZShzZWxmKSwgKCkKKworIworIyBDbG9zZSBmZHMgZXhjZXB0IHRob3NlIHNwZWNpZmllZAorIworCit0cnk6CisgICAgTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCitleGNlcHQgRXhjZXB0aW9uOgorICAgIE1BWEZEID0gMjU2CisKK2RlZiBjbG9zZV9hbGxfZmRzX2V4Y2VwdChmZHMpOgorICAgIGZkcyA9IGxpc3QoZmRzKSArIFstMSwgTUFYRkRdCisgICAgZmRzLnNvcnQoKQorICAgIGFzc2VydCBmZHNbLTFdID09IE1BWEZELCAnZmQgdG9vIGxhcmdlJworICAgIGZvciBpIGluIHJhbmdlKGxlbihmZHMpIC0gMSk6CisgICAgICAgIG9zLmNsb3NlcmFuZ2UoZmRzW2ldKzEsIGZkc1tpKzFdKQorCisjCisjIFN0YXJ0IGEgcHJvZ3JhbSB3aXRoIG9ubHkgc3BlY2lmaWVkIGZkcyBrZXB0IG9wZW4KKyMKKworZGVmIHNwYXdudl9wYXNzZmRzKHBhdGgsIGFyZ3MsIHBhc3NmZHMpOgorICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCisgICAgcGFzc2ZkcyA9IHNvcnRlZChwYXNzZmRzKQorICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IG9zLnBpcGUoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjKAorICAgICAgICAgICAgYXJncywgW29zLmZzZW5jb2RlKHBhdGgpXSwgVHJ1ZSwgcGFzc2ZkcywgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSwKKyAgICAgICAgICAgIEZhbHNlLCBGYWxzZSwgTm9uZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jbG9zZShlcnJwaXBlX3JlYWQpCisgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfd3JpdGUpCmRpZmYgLS1naXQgYS9MaWIvbmV0cmMucHkgYi9MaWIvbmV0cmMucHkKaW5kZXggMmFhNDhmMy4uYmJiM2QyMyAxMDA2NDQKLS0tIGEvTGliL25ldHJjLnB5CisrKyBiL0xpYi9uZXRyYy5weQpAQCAtMyw4ICszLDYgQEAKICMgTW9kdWxlIGFuZCBkb2N1bWVudGF0aW9uIGJ5IEVyaWMgUy4gUmF5bW9uZCwgMjEgRGVjIDE5OTgKIAogaW1wb3J0IG9zLCBzaGxleCwgc3RhdAotaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgIGltcG9ydCBwd2QKIAogX19hbGxfXyA9IFsibmV0cmMiLCAiTmV0cmNQYXJzZUVycm9yIl0KIApAQCAtMjgsNyArMjYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnSE9NRSddLCAiLm5ldHJjIikKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDb3VsZCBub3QgZmluZCAubmV0cmM6ICRIT01FIGlzIG5vdCBzZXQiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNvdWxkIG5vdCBmaW5kIC5uZXRyYzogJEhPTUUgaXMgbm90IHNldCIpCiAgICAgICAgIHNlbGYuaG9zdHMgPSB7fQogICAgICAgICBzZWxmLm1hY3JvcyA9IHt9CiAgICAgICAgIHdpdGggb3BlbihmaWxlKSBhcyBmcDoKQEAgLTkyLDYgKzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnIGFuZCBkZWZhdWx0X25ldHJjOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IG9zLmZzdGF0KGZwLmZpbGVubygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5zdF91aWQgIT0gb3MuZ2V0dWlkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHB3ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm93bmVyID0gcHdkLmdldHB3dWlkKHByb3Auc3RfdWlkKVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9ubnRwbGliLnB5IGIvTGliL25udHBsaWIucHkKaW5kZXggMDJjYzM3Yy4uMDQ2ZjQ4MyAxMDA2NDQKLS0tIGEvTGliL25udHBsaWIucHkKKysrIGIvTGliL25udHBsaWIucHkKQEAgLTI4OCw5ICsyODgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBHZW5lcmF0ZSBhIGRlZmF1bHQgU1NMIGNvbnRleHQgaWYgbm9uZSB3YXMgcGFzc2VkLgogICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgotICAgICAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKICAgICAgICAgcmV0dXJuIGNvbnRleHQud3JhcF9zb2NrZXQoc29jaykKIAogCkBAIC0zNjYsNyArMzY0LDcgQEAKICAgICAgICAgaWYgaXNfY29ubmVjdGVkKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgpAQCAtOTU2LDcgKzk1NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgYXV0aDoKICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBQZXJmb3JtIE5OVFAgYXV0aGVudGljYXRpb24gaWYgbmVlZGVkLgogICAgICAgICBpZiBub3QgdXNlcjoKZGlmZiAtLWdpdCBhL0xpYi9udHBhdGgucHkgYi9MaWIvbnRwYXRoLnB5CmluZGV4IDgyNmJlODcuLjZiNjU2OTcgMTAwNjQ0Ci0tLSBhL0xpYi9udHBhdGgucHkKKysrIGIvTGliL250cGF0aC5weQpAQCAtMTcsNyArMTcsNyBAQAogICAgICAgICAgICAiaXNtb3VudCIsICJleHBhbmR1c2VyIiwiZXhwYW5kdmFycyIsIm5vcm1wYXRoIiwiYWJzcGF0aCIsCiAgICAgICAgICAgICJzcGxpdHVuYyIsImN1cmRpciIsInBhcmRpciIsInNlcCIsInBhdGhzZXAiLCJkZWZwYXRoIiwiYWx0c2VwIiwKICAgICAgICAgICAgImV4dHNlcCIsImRldm51bGwiLCJyZWFscGF0aCIsInN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIiwicmVscGF0aCIsCi0gICAgICAgICAgICJzYW1lZmlsZSIsICJzYW1lb3BlbmZpbGUiLF0KKyAgICAgICAgICAgInNhbWVmaWxlIiwgInNhbWVvcGVuZmlsZSIsICJzYW1lc3RhdCIsXQogCiAjIHN0cmluZ3MgcmVwcmVzZW50aW5nIHZhcmlvdXMgcGF0aC1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcwogIyBUaGVzZSBhcmUgcHJpbWFyaWx5IGZvciBleHBvcnQ7IGludGVybmFsbHksIHRoZXkgYXJlIGhhcmRjb2RlZC4KQEAgLTMwLDkgKzMwLDYgQEAKIGRlZnBhdGggPSAnLjtDOlxcYmluJwogaWYgJ2NlJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CiAgICAgZGVmcGF0aCA9ICdcXFdpbmRvd3MnCi1lbGlmICdvczInIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAjIE9TLzIgdy8gVkFDUFAKLSAgICBhbHRzZXAgPSAnLycKIGRldm51bGwgPSAnbnVsJwogCiBkZWYgX2dldF9lbXB0eShwYXRoKToKQEAgLTMyMCwxMiArMzE3LDExIEBACiAKIGRlZiBpc2xpbmsocGF0aCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsuCi0gICAgVGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFdpbmRvd3MgcHJpb3IgdG8gNi4wCi0gICAgYW5kIGZvciBPUy8yLgorICAgIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBXaW5kb3dzIHByaW9yIHRvIDYuMC4KICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNMTksoc3Quc3RfbW9kZSkKIApAQCAtMzM1LDIwICszMzEsMzkgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IChvcy5lcnJvciwgV2luZG93c0Vycm9yKToKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAotIyBJcyBhIHBhdGggYSBtb3VudCBwb2ludD8gIEVpdGhlciBhIHJvb3QgKHdpdGggb3Igd2l0aG91dCBkcml2ZSBsZXR0ZXIpCi0jIG9yIGFuIFVOQyBwYXRoIHdpdGggYXQgbW9zdCBhIC8gb3IgXCBhZnRlciB0aGUgbW91bnQgcG9pbnQuCi0KKyMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/CisjIEFueSBkcml2ZSBsZXR0ZXIgcm9vdCAoZWcgYzpcKQorIyBBbnkgc2hhcmUgVU5DIChlZyBcXHNlcnZlclxzaGFyZSkKKyMgQW55IHZvbHVtZSBtb3VudGVkIG9uIGEgZmlsZXN5c3RlbSBmb2xkZXIKKyMKKyMgTm8gb25lIG1ldGhvZCBkZXRlY3RzIGFsbCB0aHJlZSBzaXR1YXRpb25zLiBIaXN0b3JpY2FsbHkgd2UndmUgbGV4aWNhbGx5CisjIGRldGVjdGVkIGRyaXZlIGxldHRlciByb290cyBhbmQgc2hhcmUgVU5Dcy4gVGhlIGNhbm9uaWNhbCBhcHByb2FjaCB0bworIyBkZXRlY3RpbmcgbW91bnRlZCB2b2x1bWVzIChxdWVyeWluZyB0aGUgcmVwYXJzZSB0YWcpIGZhaWxzIGZvciB0aGUgbW9zdAorIyBjb21tb24gY2FzZTogZHJpdmUgbGV0dGVyIHJvb3RzLiBUaGUgYWx0ZXJuYXRpdmUgd2hpY2ggdXNlcyBHZXRWb2x1bWVQYXRoTmFtZQorIyBmYWlscyBpZiB0aGUgZHJpdmUgbGV0dGVyIGlzIHRoZSByZXN1bHQgb2YgYSBTVUJTVC4KK3RyeToKKyAgICBmcm9tIG50IGltcG9ydCBfZ2V0dm9sdW1lcGF0aG5hbWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfZ2V0dm9sdW1lcGF0aG5hbWUgPSBOb25lCiBkZWYgaXNtb3VudChwYXRoKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgbW91bnQgcG9pbnQgKGRlZmluZWQgYXMgcm9vdCBvZiBkcml2ZSkiIiIKKyAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgbW91bnQgcG9pbnQgKGEgZHJpdmUgcm9vdCwgdGhlIHJvb3Qgb2YgYQorICAgIHNoYXJlLCBvciBhIG1vdW50ZWQgdm9sdW1lKSIiIgogICAgIHNlcHMgPSBfZ2V0X2JvdGhzZXBzKHBhdGgpCisgICAgcGF0aCA9IGFic3BhdGgocGF0aCkKICAgICByb290LCByZXN0ID0gc3BsaXRkcml2ZShwYXRoKQogICAgIGlmIHJvb3QgYW5kIHJvb3RbMF0gaW4gc2VwczoKICAgICAgICAgcmV0dXJuIChub3QgcmVzdCkgb3IgKHJlc3QgaW4gc2VwcykKLSAgICByZXR1cm4gcmVzdCBpbiBzZXBzCisgICAgaWYgcmVzdCBpbiBzZXBzOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgX2dldHZvbHVtZXBhdGhuYW1lOgorICAgICAgICByZXR1cm4gcGF0aC5yc3RyaXAoc2VwcykgPT0gX2dldHZvbHVtZXBhdGhuYW1lKHBhdGgpLnJzdHJpcChzZXBzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQogCiAKICMgRXhwYW5kIHBhdGhzIGJlZ2lubmluZyB3aXRoICd+JyBvciAnfnVzZXInLgpAQCAtNTg4LDcgKzYwMyw3IEBACiAgICAgICAgIGlmIHBhdGg6ICMgRW1wdHkgcGF0aCBtdXN0IHJldHVybiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBhdGggPSBfZ2V0ZnVsbHBhdGhuYW1lKHBhdGgpCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcyAjIEJhZCBwYXRoIC0gcmV0dXJuIHVuY2hhbmdlZC4KICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKICAgICAgICAgICAgIHBhdGggPSBvcy5nZXRjd2RiKCkKQEAgLTY1NiwyMyArNjcxLDYgQEAKICAgICBkZWYgX2dldGZpbmFscGF0aG5hbWUoZik6CiAgICAgICAgIHJldHVybiBub3JtY2FzZShhYnNwYXRoKGYpKQogCi1kZWYgc2FtZWZpbGUoZjEsIGYyKToKLSAgICAiVGVzdCB3aGV0aGVyIHR3byBwYXRobmFtZXMgcmVmZXJlbmNlIHRoZSBzYW1lIGFjdHVhbCBmaWxlIgotICAgIHJldHVybiBfZ2V0ZmluYWxwYXRobmFtZShmMSkgPT0gX2dldGZpbmFscGF0aG5hbWUoZjIpCi0KLQotdHJ5OgotICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaWxlaW5mb3JtYXRpb24KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIE9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCBqdXN0IHJldHVybiB0aGUgZmQgYW5kIHNlZSB0aGF0Ci0gICAgIyBpdCBjb21wYXJlcyBlcXVhbCBpbiBzYW1lb3BlbmZpbGUuCi0gICAgZGVmIF9nZXRmaWxlaW5mb3JtYXRpb24oZmQpOgotICAgICAgICByZXR1cm4gZmQKLQotZGVmIHNhbWVvcGVuZmlsZShmMSwgZjIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gZmlsZSBvYmplY3RzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgcmV0dXJuIF9nZXRmaWxlaW5mb3JtYXRpb24oZjEpID09IF9nZXRmaWxlaW5mb3JtYXRpb24oZjIpCi0KIAogdHJ5OgogICAgICMgVGhlIGdlbmVyaWNwYXRoLmlzZGlyIGltcGxlbWVudGF0aW9uIHVzZXMgb3Muc3RhdCBhbmQgY2hlY2tzIHRoZSBtb2RlCmRpZmYgLS1naXQgYS9MaWIvbnR1cmwycGF0aC5weSBiL0xpYi9udHVybDJwYXRoLnB5CmluZGV4IDUxMWRjZWMuLjVhNmQ0NGEgMTAwNjQ0Ci0tLSBhL0xpYi9udHVybDJwYXRoLnB5CisrKyBiL0xpYi9udHVybDJwYXRoLnB5CkBAIC0yMyw3ICsyMyw3IEBACiAgICAgY29tcCA9IHVybC5zcGxpdCgnfCcpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgY29tcFswXVstMV0gbm90IGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzOgogICAgICAgICBlcnJvciA9ICdCYWQgVVJMOiAnICsgdXJsCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAgICAgZHJpdmUgPSBjb21wWzBdWy0xXS51cHBlcigpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJy8nKQogICAgIHBhdGggPSBkcml2ZSArICc6JwpAQCAtNTUsNyArNTUsNyBAQAogICAgIGNvbXAgPSBwLnNwbGl0KCc6JykKICAgICBpZiBsZW4oY29tcCkgIT0gMiBvciBsZW4oY29tcFswXSkgPiAxOgogICAgICAgICBlcnJvciA9ICdCYWQgcGF0aDogJyArIHAKLSAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJvcikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJvcikKIAogICAgIGRyaXZlID0gdXJsbGliLnBhcnNlLnF1b3RlKGNvbXBbMF0udXBwZXIoKSkKICAgICBjb21wb25lbnRzID0gY29tcFsxXS5zcGxpdCgnXFwnKQpkaWZmIC0tZ2l0IGEvTGliL29wY29kZS5weSBiL0xpYi9vcGNvZGUucHkKaW5kZXggYTYzOWZlMy4uMGJkMWVlNiAxMDA2NDQKLS0tIGEvTGliL29wY29kZS5weQorKysgYi9MaWIvb3Bjb2RlLnB5CkBAIC04LDYgKzgsMTkgQEAKICAgICAgICAgICAgImhhc2xvY2FsIiwgImhhc2NvbXBhcmUiLCAiaGFzZnJlZSIsICJvcG5hbWUiLCAib3BtYXAiLAogICAgICAgICAgICAiSEFWRV9BUkdVTUVOVCIsICJFWFRFTkRFRF9BUkciLCAiaGFzbmFyZ3MiXQogCisjIEl0J3MgYSBjaGlja2VuLWFuZC1lZ2cgSSdtIGFmcmFpZDoKKyMgV2UncmUgaW1wb3J0ZWQgYmVmb3JlIF9vcGNvZGUncyBtYWRlLgorIyBXaXRoIGV4Y2VwdGlvbiB1bmhlZWRlZAorIyAoc3RhY2tfZWZmZWN0IGlzIG5vdCBuZWVkZWQpCisjIEJvdGggb3VyIGNoaWNrZW5zIGFuZCBlZ2dzIGFyZSBhbGxheWVkLgorIyAgICAgLS1MYXJyeSBIYXN0aW5ncywgMjAxMy8xMS8yMworCit0cnk6CisgICAgZnJvbSBfb3Bjb2RlIGltcG9ydCBzdGFja19lZmZlY3QKKyAgICBfX2FsbF9fLmFwcGVuZCgnc3RhY2tfZWZmZWN0JykKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKIGNtcF9vcCA9ICgnPCcsICc8PScsICc9PScsICchPScsICc+JywgJz49JywgJ2luJywgJ25vdCBpbicsICdpcycsCiAgICAgICAgICdpcyBub3QnLCAnZXhjZXB0aW9uIG1hdGNoJywgJ0JBRCcpCiAKQEAgLTg0LDcgKzk3LDYgQEAKIGRlZl9vcCgnQklOQVJZX09SJywgNjYpCiBkZWZfb3AoJ0lOUExBQ0VfUE9XRVInLCA2NykKIGRlZl9vcCgnR0VUX0lURVInLCA2OCkKLWRlZl9vcCgnU1RPUkVfTE9DQUxTJywgNjkpCiAKIGRlZl9vcCgnUFJJTlRfRVhQUicsIDcwKQogZGVmX29wKCdMT0FEX0JVSUxEX0NMQVNTJywgNzEpCkBAIC0xNzksNiArMTkxLDkgQEAKIGRlZl9vcCgnU0VUX0FERCcsIDE0NikKIGRlZl9vcCgnTUFQX0FERCcsIDE0NykKIAorZGVmX29wKCdMT0FEX0NMQVNTREVSRUYnLCAxNDgpCitoYXNmcmVlLmFwcGVuZCgxNDgpCisKIGRlZl9vcCgnRVhURU5ERURfQVJHJywgMTQ0KQogRVhURU5ERURfQVJHID0gMTQ0CiAKZGlmZiAtLWdpdCBhL0xpYi9vcGVyYXRvci5weSBiL0xpYi9vcGVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzFhOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL29wZXJhdG9yLnB5CkBAIC0wLDAgKzEsNDEyIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisiIiIKK09wZXJhdG9yIEludGVyZmFjZQorCitUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGZ1bmN0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRyaW5zaWMKK29wZXJhdG9ycyBvZiBQeXRob24uICBGb3IgZXhhbXBsZSwgb3BlcmF0b3IuYWRkKHgsIHkpIGlzIGVxdWl2YWxlbnQKK3RvIHRoZSBleHByZXNzaW9uIHgreS4gIFRoZSBmdW5jdGlvbiBuYW1lcyBhcmUgdGhvc2UgdXNlZCBmb3Igc3BlY2lhbAorbWV0aG9kczsgdmFyaWFudHMgd2l0aG91dCBsZWFkaW5nIGFuZCB0cmFpbGluZyAnX18nIGFyZSBhbHNvIHByb3ZpZGVkCitmb3IgY29udmVuaWVuY2UuCisKK1RoaXMgaXMgdGhlIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2R1bGUuCisiIiIKKworX19hbGxfXyA9IFsnYWJzJywgJ2FkZCcsICdhbmRfJywgJ2F0dHJnZXR0ZXInLCAnY29uY2F0JywgJ2NvbnRhaW5zJywgJ2NvdW50T2YnLAorICAgICAgICAgICAnZGVsaXRlbScsICdlcScsICdmbG9vcmRpdicsICdnZScsICdnZXRpdGVtJywgJ2d0JywgJ2lhZGQnLCAnaWFuZCcsCisgICAgICAgICAgICdpY29uY2F0JywgJ2lmbG9vcmRpdicsICdpbHNoaWZ0JywgJ2ltb2QnLCAnaW11bCcsICdpbmRleCcsCisgICAgICAgICAgICdpbmRleE9mJywgJ2ludicsICdpbnZlcnQnLCAnaW9yJywgJ2lwb3cnLCAnaXJzaGlmdCcsICdpc18nLAorICAgICAgICAgICAnaXNfbm90JywgJ2lzdWInLCAnaXRlbWdldHRlcicsICdpdHJ1ZWRpdicsICdpeG9yJywgJ2xlJywKKyAgICAgICAgICAgJ2xlbmd0aF9oaW50JywgJ2xzaGlmdCcsICdsdCcsICdtZXRob2RjYWxsZXInLCAnbW9kJywgJ211bCcsICduZScsCisgICAgICAgICAgICduZWcnLCAnbm90XycsICdvcl8nLCAncG9zJywgJ3BvdycsICdyc2hpZnQnLCAnc2V0aXRlbScsICdzdWInLAorICAgICAgICAgICAndHJ1ZWRpdicsICd0cnV0aCcsICd4b3InXQorCitmcm9tIGJ1aWx0aW5zIGltcG9ydCBhYnMgYXMgX2FicworCisKKyMgQ29tcGFyaXNvbiBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBsdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIDwgYi4iCisgICAgcmV0dXJuIGEgPCBiCisKK2RlZiBsZShhLCBiKToKKyAgICAiU2FtZSBhcyBhIDw9IGIuIgorICAgIHJldHVybiBhIDw9IGIKKworZGVmIGVxKGEsIGIpOgorICAgICJTYW1lIGFzIGEgPT0gYi4iCisgICAgcmV0dXJuIGEgPT0gYgorCitkZWYgbmUoYSwgYik6CisgICAgIlNhbWUgYXMgYSAhPSBiLiIKKyAgICByZXR1cm4gYSAhPSBiCisKK2RlZiBnZShhLCBiKToKKyAgICAiU2FtZSBhcyBhID49IGIuIgorICAgIHJldHVybiBhID49IGIKKworZGVmIGd0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPiBiLiIKKyAgICByZXR1cm4gYSA+IGIKKworIyBMb2dpY2FsIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIG5vdF8oYSk6CisgICAgIlNhbWUgYXMgbm90IGEuIgorICAgIHJldHVybiBub3QgYQorCitkZWYgdHJ1dGgoYSk6CisgICAgIlJldHVybiBUcnVlIGlmIGEgaXMgdHJ1ZSwgRmFsc2Ugb3RoZXJ3aXNlLiIKKyAgICByZXR1cm4gVHJ1ZSBpZiBhIGVsc2UgRmFsc2UKKworZGVmIGlzXyhhLCBiKToKKyAgICAiU2FtZSBhcyBhIGlzIGIuIgorICAgIHJldHVybiBhIGlzIGIKKworZGVmIGlzX25vdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIGlzIG5vdCBiLiIKKyAgICByZXR1cm4gYSBpcyBub3QgYgorCisjIE1hdGhlbWF0aWNhbC9CaXR3aXNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgYWJzKGEpOgorICAgICJTYW1lIGFzIGFicyhhKS4iCisgICAgcmV0dXJuIF9hYnMoYSkKKworZGVmIGFkZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICsgYi4iCisgICAgcmV0dXJuIGEgKyBiCisKK2RlZiBhbmRfKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJiBiLiIKKyAgICByZXR1cm4gYSAmIGIKKworZGVmIGZsb29yZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLy8gYi4iCisgICAgcmV0dXJuIGEgLy8gYgorCitkZWYgaW5kZXgoYSk6CisgICAgIlNhbWUgYXMgYS5fX2luZGV4X18oKS4iCisgICAgcmV0dXJuIGEuX19pbmRleF9fKCkKKworZGVmIGludihhKToKKyAgICAiU2FtZSBhcyB+YS4iCisgICAgcmV0dXJuIH5hCitpbnZlcnQgPSBpbnYKKworZGVmIGxzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIDw8IGIuIgorICAgIHJldHVybiBhIDw8IGIKKworZGVmIG1vZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICUgYi4iCisgICAgcmV0dXJuIGEgJSBiCisKK2RlZiBtdWwoYSwgYik6CisgICAgIlNhbWUgYXMgYSAqIGIuIgorICAgIHJldHVybiBhICogYgorCitkZWYgbmVnKGEpOgorICAgICJTYW1lIGFzIC1hLiIKKyAgICByZXR1cm4gLWEKKworZGVmIG9yXyhhLCBiKToKKyAgICAiU2FtZSBhcyBhIHwgYi4iCisgICAgcmV0dXJuIGEgfCBiCisKK2RlZiBwb3MoYSk6CisgICAgIlNhbWUgYXMgK2EuIgorICAgIHJldHVybiArYQorCitkZWYgcG93KGEsIGIpOgorICAgICJTYW1lIGFzIGEgKiogYi4iCisgICAgcmV0dXJuIGEgKiogYgorCitkZWYgcnNoaWZ0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPj4gYi4iCisgICAgcmV0dXJuIGEgPj4gYgorCitkZWYgc3ViKGEsIGIpOgorICAgICJTYW1lIGFzIGEgLSBiLiIKKyAgICByZXR1cm4gYSAtIGIKKworZGVmIHRydWVkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvIGIuIgorICAgIHJldHVybiBhIC8gYgorCitkZWYgeG9yKGEsIGIpOgorICAgICJTYW1lIGFzIGEgXiBiLiIKKyAgICByZXR1cm4gYSBeIGIKKworIyBTZXF1ZW5jZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGNvbmNhdChhLCBiKToKKyAgICAiU2FtZSBhcyBhICsgYiwgZm9yIGEgYW5kIGIgc2VxdWVuY2VzLiIKKyAgICBpZiBub3QgaGFzYXR0cihhLCAnX19nZXRpdGVtX18nKToKKyAgICAgICAgbXNnID0gIiclcycgb2JqZWN0IGNhbid0IGJlIGNvbmNhdGVuYXRlZCIgJSB0eXBlKGEpLl9fbmFtZV9fCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisgICAgcmV0dXJuIGEgKyBiCisKK2RlZiBjb250YWlucyhhLCBiKToKKyAgICAiU2FtZSBhcyBiIGluIGEgKG5vdGUgcmV2ZXJzZWQgb3BlcmFuZHMpLiIKKyAgICByZXR1cm4gYiBpbiBhCisKK2RlZiBjb3VudE9mKGEsIGIpOgorICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lcyBiIG9jY3VycyBpbiBhLiIKKyAgICBjb3VudCA9IDAKKyAgICBmb3IgaSBpbiBhOgorICAgICAgICBpZiBpID09IGI6CisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgcmV0dXJuIGNvdW50CisKK2RlZiBkZWxpdGVtKGEsIGIpOgorICAgICJTYW1lIGFzIGRlbCBhW2JdLiIKKyAgICBkZWwgYVtiXQorCitkZWYgZ2V0aXRlbShhLCBiKToKKyAgICAiU2FtZSBhcyBhW2JdLiIKKyAgICByZXR1cm4gYVtiXQorCitkZWYgaW5kZXhPZihhLCBiKToKKyAgICAiUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBvZiBiIGluIGEuIgorICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShhKToKKyAgICAgICAgaWYgaiA9PSBiOgorICAgICAgICAgICAgcmV0dXJuIGkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZXF1ZW5jZS5pbmRleCh4KTogeCBub3QgaW4gc2VxdWVuY2UnKQorCitkZWYgc2V0aXRlbShhLCBiLCBjKToKKyAgICAiU2FtZSBhcyBhW2JdID0gYy4iCisgICAgYVtiXSA9IGMKKworZGVmIGxlbmd0aF9oaW50KG9iaiwgZGVmYXVsdD0wKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBvYmouCisgICAgVGhpcyBpcyB1c2VmdWwgZm9yIHByZXNpemluZyBjb250YWluZXJzIHdoZW4gYnVpbGRpbmcgZnJvbSBhbiBpdGVyYWJsZS4KKworICAgIElmIHRoZSBvYmplY3Qgc3VwcG9ydHMgbGVuKCksIHRoZSByZXN1bHQgd2lsbCBiZSBleGFjdC4gT3RoZXJ3aXNlLCBpdCBtYXkKKyAgICBvdmVyLSBvciB1bmRlci1lc3RpbWF0ZSBieSBhbiBhcmJpdHJhcnkgYW1vdW50LiBUaGUgcmVzdWx0IHdpbGwgYmUgYW4KKyAgICBpbnRlZ2VyID49IDAuCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UoZGVmYXVsdCwgaW50KToKKyAgICAgICAgbXNnID0gKCInJXMnIG9iamVjdCBjYW5ub3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciIgJQorICAgICAgICAgICAgICAgdHlwZShkZWZhdWx0KS5fX25hbWVfXykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGxlbihvYmopCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgdHJ5OgorICAgICAgICBoaW50ID0gdHlwZShvYmopLl9fbGVuZ3RoX2hpbnRfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIHRyeToKKyAgICAgICAgdmFsID0gaGludChvYmopCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBpZiB2YWwgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsLCBpbnQpOgorICAgICAgICBtc2cgPSAoJ19fbGVuZ3RoX2hpbnRfXyBtdXN0IGJlIGludGVnZXIsIG5vdCAlcycgJQorICAgICAgICAgICAgICAgdHlwZSh2YWwpLl9fbmFtZV9fKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIGlmIHZhbCA8IDA6CisgICAgICAgIG1zZyA9ICdfX2xlbmd0aF9oaW50X18oKSBzaG91bGQgcmV0dXJuID49IDAnCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQorICAgIHJldHVybiB2YWwKKworIyBHZW5lcmFsaXplZCBMb29rdXAgT2JqZWN0cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworY2xhc3MgYXR0cmdldHRlcjoKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBmZXRjaGVzIHRoZSBnaXZlbiBhdHRyaWJ1dGUocykgZnJvbSBpdHMgb3BlcmFuZC4KKyAgICBBZnRlciBmID0gYXR0cmdldHRlcignbmFtZScpLCB0aGUgY2FsbCBmKHIpIHJldHVybnMgci5uYW1lLgorICAgIEFmdGVyIGcgPSBhdHRyZ2V0dGVyKCduYW1lJywgJ2RhdGUnKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zIChyLm5hbWUsIHIuZGF0ZSkuCisgICAgQWZ0ZXIgaCA9IGF0dHJnZXR0ZXIoJ25hbWUuZmlyc3QnLCAnbmFtZS5sYXN0JyksIHRoZSBjYWxsIGgocikgcmV0dXJucworICAgIChyLm5hbWUuZmlyc3QsIHIubmFtZS5sYXN0KS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXR0ciwgKmF0dHJzKToKKyAgICAgICAgaWYgbm90IGF0dHJzOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0ciwgc3RyKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2F0dHJpYnV0ZSBuYW1lIG11c3QgYmUgYSBzdHJpbmcnKQorICAgICAgICAgICAgbmFtZXMgPSBhdHRyLnNwbGl0KCcuJykKKyAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCBuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBnZXR0ZXJzID0gdHVwbGUobWFwKGF0dHJnZXR0ZXIsIChhdHRyLCkgKyBhdHRycykpCisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiB0dXBsZShnZXR0ZXIob2JqKSBmb3IgZ2V0dGVyIGluIGdldHRlcnMpCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBzZWxmLl9jYWxsKG9iaikKKworY2xhc3MgaXRlbWdldHRlcjoKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBmZXRjaGVzIHRoZSBnaXZlbiBpdGVtKHMpIGZyb20gaXRzIG9wZXJhbmQuCisgICAgQWZ0ZXIgZiA9IGl0ZW1nZXR0ZXIoMiksIHRoZSBjYWxsIGYocikgcmV0dXJucyByWzJdLgorICAgIEFmdGVyIGcgPSBpdGVtZ2V0dGVyKDIsIDUsIDMpLCB0aGUgY2FsbCBnKHIpIHJldHVybnMgKHJbMl0sIHJbNV0sIHJbM10pCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW0sICppdGVtcyk6CisgICAgICAgIGlmIG5vdCBpdGVtczoKKyAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtpdGVtXQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGl0ZW1zID0gKGl0ZW0sKSArIGl0ZW1zCisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiB0dXBsZShvYmpbaV0gZm9yIGkgaW4gaXRlbXMpCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBzZWxmLl9jYWxsKG9iaikKKworY2xhc3MgbWV0aG9kY2FsbGVyOgorICAgICIiIgorICAgIFJldHVybiBhIGNhbGxhYmxlIG9iamVjdCB0aGF0IGNhbGxzIHRoZSBnaXZlbiBtZXRob2Qgb24gaXRzIG9wZXJhbmQuCisgICAgQWZ0ZXIgZiA9IG1ldGhvZGNhbGxlcignbmFtZScpLCB0aGUgY2FsbCBmKHIpIHJldHVybnMgci5uYW1lKCkuCisgICAgQWZ0ZXIgZyA9IG1ldGhvZGNhbGxlcignbmFtZScsICdkYXRlJywgZm9vPTEpLCB0aGUgY2FsbCBnKHIpIHJldHVybnMKKyAgICByLm5hbWUoJ2RhdGUnLCBmb289MSkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpIDwgMjoKKyAgICAgICAgICAgIG1zZyA9ICJtZXRob2RjYWxsZXIgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LCB0aGUgbWV0aG9kIG5hbWUiCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgICAgICBzZWxmID0gYXJnc1swXQorICAgICAgICBzZWxmLl9uYW1lID0gYXJnc1sxXQorICAgICAgICBzZWxmLl9hcmdzID0gYXJnc1syOl0KKyAgICAgICAgc2VsZi5fa3dhcmdzID0ga3dhcmdzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIob2JqLCBzZWxmLl9uYW1lKSgqc2VsZi5fYXJncywgKipzZWxmLl9rd2FyZ3MpCisKKyMgSW4tcGxhY2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBpYWRkKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKz0gYi4iCisgICAgYSArPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlhbmQoYSwgYik6CisgICAgIlNhbWUgYXMgYSAmPSBiLiIKKyAgICBhICY9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWNvbmNhdChhLCBiKToKKyAgICAiU2FtZSBhcyBhICs9IGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iCisgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fZ2V0aXRlbV9fJyk6CisgICAgICAgIG1zZyA9ICInJXMnIG9iamVjdCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQiICUgdHlwZShhKS5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIGEgKz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpZmxvb3JkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvLz0gYi4iCisgICAgYSAvLz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpbHNoaWZ0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPDw9IGIuIgorICAgIGEgPDw9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW1vZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICU9IGIuIgorICAgIGEgJT0gYgorICAgIHJldHVybiBhCisKK2RlZiBpbXVsKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKj0gYi4iCisgICAgYSAqPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIHw9IGIuIgorICAgIGEgfD0gYgorICAgIHJldHVybiBhCisKK2RlZiBpcG93KGEsIGIpOgorICAgICJTYW1lIGFzIGEgKio9IGIuIgorICAgIGEgKio9YgorICAgIHJldHVybiBhCisKK2RlZiBpcnNoaWZ0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPj49IGIuIgorICAgIGEgPj49IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXN1YihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC09IGIuIgorICAgIGEgLT0gYgorICAgIHJldHVybiBhCisKK2RlZiBpdHJ1ZWRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC89IGIuIgorICAgIGEgLz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpeG9yKGEsIGIpOgorICAgICJTYW1lIGFzIGEgXj0gYi4iCisgICAgYSBePSBiCisgICAgcmV0dXJuIGEKKworCit0cnk6CisgICAgZnJvbSBfb3BlcmF0b3IgaW1wb3J0ICoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGZyb20gX29wZXJhdG9yIGltcG9ydCBfX2RvY19fCisKKyMgQWxsIG9mIHRoZXNlICJfX2Z1bmNfXyA9IGZ1bmMiIGFzc2lnbm1lbnRzIGhhdmUgdG8gaGFwcGVuIGFmdGVyIGltcG9ydGluZworIyBmcm9tIF9vcGVyYXRvciB0byBtYWtlIHN1cmUgdGhleSdyZSBzZXQgdG8gdGhlIHJpZ2h0IGZ1bmN0aW9uCitfX2x0X18gPSBsdAorX19sZV9fID0gbGUKK19fZXFfXyA9IGVxCitfX25lX18gPSBuZQorX19nZV9fID0gZ2UKK19fZ3RfXyA9IGd0CitfX25vdF9fID0gbm90XworX19hYnNfXyA9IGFicworX19hZGRfXyA9IGFkZAorX19hbmRfXyA9IGFuZF8KK19fZmxvb3JkaXZfXyA9IGZsb29yZGl2CitfX2luZGV4X18gPSBpbmRleAorX19pbnZfXyA9IGludgorX19pbnZlcnRfXyA9IGludmVydAorX19sc2hpZnRfXyA9IGxzaGlmdAorX19tb2RfXyA9IG1vZAorX19tdWxfXyA9IG11bAorX19uZWdfXyA9IG5lZworX19vcl9fID0gb3JfCitfX3Bvc19fID0gcG9zCitfX3Bvd19fID0gcG93CitfX3JzaGlmdF9fID0gcnNoaWZ0CitfX3N1Yl9fID0gc3ViCitfX3RydWVkaXZfXyA9IHRydWVkaXYKK19feG9yX18gPSB4b3IKK19fY29uY2F0X18gPSBjb25jYXQKK19fY29udGFpbnNfXyA9IGNvbnRhaW5zCitfX2RlbGl0ZW1fXyA9IGRlbGl0ZW0KK19fZ2V0aXRlbV9fID0gZ2V0aXRlbQorX19zZXRpdGVtX18gPSBzZXRpdGVtCitfX2lhZGRfXyA9IGlhZGQKK19faWFuZF9fID0gaWFuZAorX19pY29uY2F0X18gPSBpY29uY2F0CitfX2lmbG9vcmRpdl9fID0gaWZsb29yZGl2CitfX2lsc2hpZnRfXyA9IGlsc2hpZnQKK19faW1vZF9fID0gaW1vZAorX19pbXVsX18gPSBpbXVsCitfX2lvcl9fID0gaW9yCitfX2lwb3dfXyA9IGlwb3cKK19faXJzaGlmdF9fID0gaXJzaGlmdAorX19pc3ViX18gPSBpc3ViCitfX2l0cnVlZGl2X18gPSBpdHJ1ZWRpdgorX19peG9yX18gPSBpeG9yCmRpZmYgLS1naXQgYS9MaWIvb3MucHkgYi9MaWIvb3MucHkKaW5kZXggODc2ODljYy4uZTk4ODBhMSAxMDA2NDQKLS0tIGEvTGliL29zLnB5CisrKyBiL0xpYi9vcy5weQpAQCAtMSw5ICsxLDkgQEAKIHIiIiJPUyByb3V0aW5lcyBmb3IgTWFjLCBOVCwgb3IgUG9zaXggZGVwZW5kaW5nIG9uIHdoYXQgc3lzdGVtIHdlJ3JlIG9uLgogCiBUaGlzIGV4cG9ydHM6Ci0gIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCwgb3MyLCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KKyAgLSBhbGwgZnVuY3Rpb25zIGZyb20gcG9zaXgsIG50IG9yIGNlLCBlLmcuIHVubGluaywgc3RhdCwgZXRjLgogICAtIG9zLnBhdGggaXMgZWl0aGVyIHBvc2l4cGF0aCBvciBudHBhdGgKLSAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnLCAnb3MyJyBvciAnY2UnLgorICAtIG9zLm5hbWUgaXMgZWl0aGVyICdwb3NpeCcsICdudCcgb3IgJ2NlJy4KICAgLSBvcy5jdXJkaXIgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAoJy4nIG9yICc6JykKICAgLSBvcy5wYXJkaXIgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXJlbnQgZGlyZWN0b3J5ICgnLi4nIG9yICc6OicpCiAgIC0gb3Muc2VwIGlzIHRoZSAob3IgYSBtb3N0IGNvbW1vbikgcGF0aG5hbWUgc2VwYXJhdG9yICgnLycgb3IgJzonIG9yICdcXCcpCkBAIC04MSwzMCArODEsNiBAQAogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcGFzcwogCi1lbGlmICdvczInIGluIF9uYW1lczoKLSAgICBuYW1lID0gJ29zMicKLSAgICBsaW5lc2VwID0gJ1xyXG4nCi0gICAgZnJvbSBvczIgaW1wb3J0ICoKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gb3MyIGltcG9ydCBfZXhpdAotICAgICAgICBfX2FsbF9fLmFwcGVuZCgnX2V4aXQnKQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGlmIHN5cy52ZXJzaW9uLmZpbmQoJ0VNWCBHQ0MnKSA9PSAtMToKLSAgICAgICAgaW1wb3J0IG50cGF0aCBhcyBwYXRoCi0gICAgZWxzZToKLSAgICAgICAgaW1wb3J0IG9zMmVteHBhdGggYXMgcGF0aAotICAgICAgICBmcm9tIF9lbXhfbGluayBpbXBvcnQgbGluawotCi0gICAgaW1wb3J0IG9zMgotICAgIF9fYWxsX18uZXh0ZW5kKF9nZXRfZXhwb3J0c19saXN0KG9zMikpCi0gICAgZGVsIG9zMgotCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2hhdmVfZnVuY3Rpb25zCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0KIGVsaWYgJ2NlJyBpbiBfbmFtZXM6CiAgICAgbmFtZSA9ICdjZScKICAgICBsaW5lc2VwID0gJ1xyXG4nCkBAIC0yNTYsMTAgKzIzMiw5IEBACiAgICAgaWYgaGVhZCBhbmQgdGFpbCBhbmQgbm90IHBhdGguZXhpc3RzKGhlYWQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtYWtlZGlycyhoZWFkLCBtb2RlLCBleGlzdF9vaykKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgICMgYmUgaGFwcHkgaWYgc29tZW9uZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIHBhdGgKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGNkaXIgPSBjdXJkaXIKICAgICAgICAgaWYgaXNpbnN0YW5jZSh0YWlsLCBieXRlcyk6CiAgICAgICAgICAgICBjZGlyID0gYnl0ZXMoY3VyZGlyLCAnQVNDSUknKQpAQCAtMzAyLDcgKzI3Nyw3IEBACiAgICAgd2hpbGUgaGVhZCBhbmQgdGFpbDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcm1kaXIoaGVhZCkKLSAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGhlYWQsIHRhaWwgPSBwYXRoLnNwbGl0KGhlYWQpCiAKQEAgLTMyOSw3ICszMDQsNyBAQAogICAgIGlmIGhlYWQgYW5kIHRhaWw6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlbW92ZWRpcnMoaGVhZCkKLSAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogX19hbGxfXy5leHRlbmQoWyJtYWtlZGlycyIsICJyZW1vdmVkaXJzIiwgInJlbmFtZXMiXSkKQEAgLTM2NSw3ICszNDAsNyBAQAogCiAgICAgQnkgZGVmYXVsdCBlcnJvcnMgZnJvbSB0aGUgb3MubGlzdGRpcigpIGNhbGwgYXJlIGlnbm9yZWQuICBJZgogICAgIG9wdGlvbmFsIGFyZyAnb25lcnJvcicgaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBmdW5jdGlvbjsgaXQKLSAgICB3aWxsIGJlIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudCwgYW4gb3MuZXJyb3IgaW5zdGFuY2UuICBJdCBjYW4KKyAgICB3aWxsIGJlIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudCwgYW4gT1NFcnJvciBpbnN0YW5jZS4gIEl0IGNhbgogICAgIHJlcG9ydCB0aGUgZXJyb3IgdG8gY29udGludWUgd2l0aCB0aGUgd2Fsaywgb3IgcmFpc2UgdGhlIGV4Y2VwdGlvbgogICAgIHRvIGFib3J0IHRoZSB3YWxrLiAgTm90ZSB0aGF0IHRoZSBmaWxlbmFtZSBpcyBhdmFpbGFibGUgYXMgdGhlCiAgICAgZmlsZW5hbWUgYXR0cmlidXRlIG9mIHRoZSBleGNlcHRpb24gb2JqZWN0LgpAQCAtMzk5LDEwICszNzQsMTAgQEAKICAgICAjIG1pbm9yIHJlYXNvbiB3aGVuIChzYXkpIGEgdGhvdXNhbmQgcmVhZGFibGUgZGlyZWN0b3JpZXMgYXJlIHN0aWxsCiAgICAgIyBsZWZ0IHRvIHZpc2l0LiAgVGhhdCBsb2dpYyBpcyBjb3BpZWQgaGVyZS4KICAgICB0cnk6Ci0gICAgICAgICMgTm90ZSB0aGF0IGxpc3RkaXIgYW5kIGVycm9yIGFyZSBnbG9iYWxzIGluIHRoaXMgbW9kdWxlIGR1ZQorICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGlzIGdsb2JhbCBpbiB0aGlzIG1vZHVsZSBkdWUKICAgICAgICAgIyB0byBlYXJsaWVyIGltcG9ydC0qLgogICAgICAgICBuYW1lcyA9IGxpc3RkaXIodG9wKQotICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBpZiBvbmVycm9yIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgb25lcnJvcihlcnIpCiAgICAgICAgIHJldHVybgpAQCAtNTA0LDcgKzQ3OSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3JpZ19zdCA9IHN0YXQobmFtZSwgZGlyX2ZkPXRvcGZkLCBmb2xsb3dfc3ltbGlua3M9Zm9sbG93X3N5bWxpbmtzKQogICAgICAgICAgICAgICAgIGRpcmZkID0gb3BlbihuYW1lLCBPX1JET05MWSwgZGlyX2ZkPXRvcGZkKQotICAgICAgICAgICAgZXhjZXB0IGVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBvbmVycm9yIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBvbmVycm9yKGVycikKICAgICAgICAgICAgICAgICByZXR1cm4KQEAgLTU5OSw3ICs1NzQsNyBAQAogICAgICAgICBmdWxsbmFtZSA9IHBhdGguam9pbihkaXIsIGZpbGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGV4ZWNfZnVuYyhmdWxsbmFtZSwgKmFyZ3Jlc3QpCi0gICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgbGFzdF9leGMgPSBlCiAgICAgICAgICAgICB0YiA9IHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgICAgICBpZiAoZS5lcnJubyAhPSBlcnJuby5FTk9FTlQgYW5kIGUuZXJybm8gIT0gZXJybm8uRU5PVERJUgpAQCAtNjU2LDcgKzYzMSw3IEBACiAKIAogIyBDaGFuZ2UgZW52aXJvbiB0byBhdXRvbWF0aWNhbGx5IGNhbGwgcHV0ZW52KCksIHVuc2V0ZW52IGlmIHRoZXkgZXhpc3QuCi1mcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKIAogY2xhc3MgX0Vudmlyb24oTXV0YWJsZU1hcHBpbmcpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCBlbmNvZGVrZXksIGRlY29kZWtleSwgZW5jb2RldmFsdWUsIGRlY29kZXZhbHVlLCBwdXRlbnYsIHVuc2V0ZW52KToKQEAgLTcxNiwxNyArNjkxLDE5IEBACiBleGNlcHQgTmFtZUVycm9yOgogICAgIF9wdXRlbnYgPSBsYW1iZGEga2V5LCB2YWx1ZTogTm9uZQogZWxzZToKLSAgICBfX2FsbF9fLmFwcGVuZCgicHV0ZW52IikKKyAgICBpZiAicHV0ZW52IiBub3QgaW4gX19hbGxfXzoKKyAgICAgICAgX19hbGxfXy5hcHBlbmQoInB1dGVudiIpCiAKIHRyeToKICAgICBfdW5zZXRlbnYgPSB1bnNldGVudgogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBfdW5zZXRlbnYgPSBsYW1iZGEga2V5OiBfcHV0ZW52KGtleSwgIiIpCiBlbHNlOgotICAgIF9fYWxsX18uYXBwZW5kKCJ1bnNldGVudiIpCisgICAgaWYgInVuc2V0ZW52IiBub3QgaW4gX19hbGxfXzoKKyAgICAgICAgX19hbGxfXy5hcHBlbmQoInVuc2V0ZW52IikKIAogZGVmIF9jcmVhdGVlbnZpcm9uKCk6Ci0gICAgaWYgbmFtZSBpbiAoJ29zMicsICdudCcpOgorICAgIGlmIG5hbWUgPT0gJ250JzoKICAgICAgICAgIyBXaGVyZSBFbnYgVmFyIE5hbWVzIE11c3QgQmUgVVBQRVJDQVNFCiAgICAgICAgIGRlZiBjaGVja19zdHIodmFsdWUpOgogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CkBAIC03NjYsNyArNzQzLDcgQEAKICAgICBrZXksIGRlZmF1bHQgYW5kIHRoZSByZXN1bHQgYXJlIHN0ci4iIiIKICAgICByZXR1cm4gZW52aXJvbi5nZXQoa2V5LCBkZWZhdWx0KQogCi1zdXBwb3J0c19ieXRlc19lbnZpcm9uID0gbmFtZSBub3QgaW4gKCdvczInLCAnbnQnKQorc3VwcG9ydHNfYnl0ZXNfZW52aXJvbiA9IChuYW1lICE9ICdudCcpCiBfX2FsbF9fLmV4dGVuZCgoImdldGVudiIsICJzdXBwb3J0c19ieXRlc19lbnZpcm9uIikpCiAKIGlmIHN1cHBvcnRzX2J5dGVzX2Vudmlyb246CkBAIC04NjUsNyArODQyLDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIFdJRkVYSVRFRChzdHMpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gV0VYSVRTVEFUVVMoc3RzKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJOb3Qgc3RvcHBlZCwgc2lnbmFsZWQgb3IgZXhpdGVkPz8/IikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiTm90IHN0b3BwZWQsIHNpZ25hbGVkIG9yIGV4aXRlZD8/PyIpCiAKICAgICBkZWYgc3Bhd252KG1vZGUsIGZpbGUsIGFyZ3MpOgogICAgICAgICAiIiJzcGF3bnYobW9kZSwgZmlsZSwgYXJncykgLT4gaW50ZWdlcgpAQCAtOTA4LDYgKzg4NSwxMCBAQAogb3RoZXJ3aXNlIHJldHVybiAtU0lHLCB3aGVyZSBTSUcgaXMgdGhlIHNpZ25hbCB0aGF0IGtpbGxlZCBpdC4gIiIiCiAgICAgICAgIHJldHVybiBfc3Bhd252ZWYobW9kZSwgZmlsZSwgYXJncywgZW52LCBleGVjdnBlKQogCisKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudiIsICJzcGF3bnZlIiwgInNwYXdudnAiLCAic3Bhd252cGUiXSkKKworCiBpZiBfZXhpc3RzKCJzcGF3bnYiKToKICAgICAjIFRoZXNlIGFyZW4ndCBzdXBwbGllZCBieSB0aGUgYmFzaWMgV2luZG93cyBjb2RlCiAgICAgIyBidXQgY2FuIGJlIGVhc2lseSBpbXBsZW1lbnRlZCBpbiBQeXRob24KQEAgLTkzMyw3ICs5MTQsNyBAQAogICAgICAgICByZXR1cm4gc3Bhd252ZShtb2RlLCBmaWxlLCBhcmdzWzotMV0sIGVudikKIAogCi0gICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnYiLCAic3Bhd252ZSIsICJzcGF3bmwiLCAic3Bhd25sZSIsXSkKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdubCIsICJzcGF3bmxlIl0pCiAKIAogaWYgX2V4aXN0cygic3Bhd252cCIpOgpAQCAtOTYxLDM0ICs5NDIsOCBAQAogICAgICAgICByZXR1cm4gc3Bhd252cGUobW9kZSwgZmlsZSwgYXJnc1s6LTFdLCBlbnYpCiAKIAotICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252cCIsICJzcGF3bnZwZSIsICJzcGF3bmxwIiwgInNwYXdubHBlIixdKQorICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd25scCIsICJzcGF3bmxwZSJdKQogCi1pbXBvcnQgY29weXJlZyBhcyBfY29weXJlZwotCi1kZWYgX21ha2Vfc3RhdF9yZXN1bHQodHVwLCBkaWN0KToKLSAgICByZXR1cm4gc3RhdF9yZXN1bHQodHVwLCBkaWN0KQotCi1kZWYgX3BpY2tsZV9zdGF0X3Jlc3VsdChzcik6Ci0gICAgKHR5cGUsIGFyZ3MpID0gc3IuX19yZWR1Y2VfXygpCi0gICAgcmV0dXJuIChfbWFrZV9zdGF0X3Jlc3VsdCwgYXJncykKLQotdHJ5OgotICAgIF9jb3B5cmVnLnBpY2tsZShzdGF0X3Jlc3VsdCwgX3BpY2tsZV9zdGF0X3Jlc3VsdCwgX21ha2Vfc3RhdF9yZXN1bHQpCi1leGNlcHQgTmFtZUVycm9yOiAjIHN0YXRfcmVzdWx0IG1heSBub3QgZXhpc3QKLSAgICBwYXNzCi0KLWRlZiBfbWFrZV9zdGF0dmZzX3Jlc3VsdCh0dXAsIGRpY3QpOgotICAgIHJldHVybiBzdGF0dmZzX3Jlc3VsdCh0dXAsIGRpY3QpCi0KLWRlZiBfcGlja2xlX3N0YXR2ZnNfcmVzdWx0KHNyKToKLSAgICAodHlwZSwgYXJncykgPSBzci5fX3JlZHVjZV9fKCkKLSAgICByZXR1cm4gKF9tYWtlX3N0YXR2ZnNfcmVzdWx0LCBhcmdzKQotCi10cnk6Ci0gICAgX2NvcHlyZWcucGlja2xlKHN0YXR2ZnNfcmVzdWx0LCBfcGlja2xlX3N0YXR2ZnNfcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgX21ha2Vfc3RhdHZmc19yZXN1bHQpCi1leGNlcHQgTmFtZUVycm9yOiAjIHN0YXR2ZnNfcmVzdWx0IG1heSBub3QgZXhpc3QKLSAgICBwYXNzCiAKICMgU3VwcGx5IG9zLnBvcGVuKCkKIGRlZiBwb3BlbihjbWQsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEpOgpkaWZmIC0tZ2l0IGEvTGliL29zMmVteHBhdGgucHkgYi9MaWIvb3MyZW14cGF0aC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjYmY4YS4uMDAwMDAwMAotLS0gYS9MaWIvb3MyZW14cGF0aC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0jIE1vZHVsZSAnb3MyZW14cGF0aCcgLS0gY29tbW9uIG9wZXJhdGlvbnMgb24gT1MvMiBwYXRobmFtZXMKLSIiIkNvbW1vbiBwYXRobmFtZSBtYW5pcHVsYXRpb25zLCBPUy8yIEVNWCB2ZXJzaW9uLgotCi1JbnN0ZWFkIG9mIGltcG9ydGluZyB0aGlzIG1vZHVsZSBkaXJlY3RseSwgaW1wb3J0IG9zIGFuZCByZWZlciB0byB0aGlzCi1tb2R1bGUgYXMgb3MucGF0aC4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci1mcm9tIGdlbmVyaWNwYXRoIGltcG9ydCAqCi1mcm9tIG50cGF0aCBpbXBvcnQgKGV4cGFuZHVzZXIsIGV4cGFuZHZhcnMsIGlzYWJzLCBpc2xpbmssIHNwbGl0ZHJpdmUsCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ZXh0LCBzcGxpdCkKLQotX19hbGxfXyA9IFsibm9ybWNhc2UiLCJpc2FicyIsImpvaW4iLCJzcGxpdGRyaXZlIiwic3BsaXQiLCJzcGxpdGV4dCIsCi0gICAgICAgICAgICJiYXNlbmFtZSIsImRpcm5hbWUiLCJjb21tb25wcmVmaXgiLCJnZXRzaXplIiwiZ2V0bXRpbWUiLAotICAgICAgICAgICAiZ2V0YXRpbWUiLCJnZXRjdGltZSIsICJpc2xpbmsiLCJleGlzdHMiLCJsZXhpc3RzIiwiaXNkaXIiLCJpc2ZpbGUiLAotICAgICAgICAgICAiaXNtb3VudCIsImV4cGFuZHVzZXIiLCJleHBhbmR2YXJzIiwibm9ybXBhdGgiLCJhYnNwYXRoIiwKLSAgICAgICAgICAgInNwbGl0dW5jIiwiY3VyZGlyIiwicGFyZGlyIiwic2VwIiwicGF0aHNlcCIsImRlZnBhdGgiLCJhbHRzZXAiLAotICAgICAgICAgICAiZXh0c2VwIiwiZGV2bnVsbCIsInJlYWxwYXRoIiwic3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMiXQotCi0jIHN0cmluZ3MgcmVwcmVzZW50aW5nIHZhcmlvdXMgcGF0aC1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcwotY3VyZGlyID0gJy4nCi1wYXJkaXIgPSAnLi4nCi1leHRzZXAgPSAnLicKLXNlcCA9ICcvJwotYWx0c2VwID0gJ1xcJwotcGF0aHNlcCA9ICc7JwotZGVmcGF0aCA9ICcuO0M6XFxiaW4nCi1kZXZudWxsID0gJ251bCcKLQotIyBOb3JtYWxpemUgdGhlIGNhc2Ugb2YgYSBwYXRobmFtZSBhbmQgbWFwIHNsYXNoZXMgdG8gYmFja3NsYXNoZXMuCi0jIE90aGVyIG5vcm1hbGl6YXRpb25zIChzdWNoIGFzIG9wdGltaXppbmcgJy4uLycgYXdheSkgYXJlIG5vdCBkb25lCi0jICh0aGlzIGlzIGRvbmUgYnkgbm9ybXBhdGgpLgotCi1kZWYgbm9ybWNhc2Uocyk6Ci0gICAgIiIiTm9ybWFsaXplIGNhc2Ugb2YgcGF0aG5hbWUuCi0KLSAgICBNYWtlcyBhbGwgY2hhcmFjdGVycyBsb3dlcmNhc2UgYW5kIGFsbCBhbHRzZXBzIGludG8gc2Vwcy4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCAoYnl0ZXMsIHN0cikpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vcm1jYXNlKCkgYXJndW1lbnQgbXVzdCBiZSBzdHIgb3IgYnl0ZXMsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJ3t9JyIuZm9ybWF0KHMuX19jbGFzc19fLl9fbmFtZV9fKSkKLSAgICByZXR1cm4gcy5yZXBsYWNlKCdcXCcsICcvJykubG93ZXIoKQotCi0KLSMgSm9pbiB0d28gKG9yIG1vcmUpIHBhdGhzLgotCi1kZWYgam9pbihhLCAqcCk6Ci0gICAgIiIiSm9pbiB0d28gb3IgbW9yZSBwYXRobmFtZSBjb21wb25lbnRzLCBpbnNlcnRpbmcgc2VwIGFzIG5lZWRlZCIiIgotICAgIHBhdGggPSBhCi0gICAgZm9yIGIgaW4gcDoKLSAgICAgICAgaWYgaXNhYnMoYik6Ci0gICAgICAgICAgICBwYXRoID0gYgotICAgICAgICBlbGlmIHBhdGggPT0gJycgb3IgcGF0aFstMTpdIGluICcvXFw6JzoKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgYgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGF0aCA9IHBhdGggKyAnLycgKyBiCi0gICAgcmV0dXJuIHBhdGgKLQotCi0jIFBhcnNlIFVOQyBwYXRocwotZGVmIHNwbGl0dW5jKHApOgotICAgICIiIlNwbGl0IGEgcGF0aG5hbWUgaW50byBVTkMgbW91bnQgcG9pbnQgYW5kIHJlbGF0aXZlIHBhdGggc3BlY2lmaWVycy4KLQotICAgIFJldHVybiBhIDItdHVwbGUgKHVuYywgcmVzdCk7IGVpdGhlciBwYXJ0IG1heSBiZSBlbXB0eS4KLSAgICBJZiB1bmMgaXMgbm90IGVtcHR5LCBpdCBoYXMgdGhlIGZvcm0gJy8vaG9zdC9tb3VudCcgKG9yIHNpbWlsYXIKLSAgICB1c2luZyBiYWNrc2xhc2hlcykuICB1bmMrcmVzdCBpcyBhbHdheXMgdGhlIGlucHV0IHBhdGguCi0gICAgUGF0aHMgY29udGFpbmluZyBkcml2ZSBsZXR0ZXJzIG5ldmVyIGhhdmUgYW4gVU5DIHBhcnQuCi0gICAgIiIiCi0gICAgaWYgcFsxOjJdID09ICc6JzoKLSAgICAgICAgcmV0dXJuICcnLCBwICMgRHJpdmUgbGV0dGVyIHByZXNlbnQKLSAgICBmaXJzdFR3byA9IHBbMDoyXQotICAgIGlmIGZpcnN0VHdvID09ICcvJyAqIDIgb3IgZmlyc3RUd28gPT0gJ1xcJyAqIDI6Ci0gICAgICAgICMgaXMgYSBVTkMgcGF0aDoKLSAgICAgICAgIyB2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diBlcXVpdmFsZW50IHRvIGRyaXZlIGxldHRlcgotICAgICAgICAjIFxcbWFjaGluZVxtb3VudHBvaW50XGRpcmVjdG9yaWVzLi4uCi0gICAgICAgICMgICAgICAgICAgIGRpcmVjdG9yeSBeXl5eXl5eXl5eXl5eXl4KLSAgICAgICAgbm9ybXAgPSBub3JtY2FzZShwKQotICAgICAgICBpbmRleCA9IG5vcm1wLmZpbmQoJy8nLCAyKQotICAgICAgICBpZiBpbmRleCA9PSAtMToKLSAgICAgICAgICAgICMjcmFpc2UgUnVudGltZUVycm9yLCAnaWxsZWdhbCBVTkMgcGF0aDogIicgKyBwICsgJyInCi0gICAgICAgICAgICByZXR1cm4gKCIiLCBwKQotICAgICAgICBpbmRleCA9IG5vcm1wLmZpbmQoJy8nLCBpbmRleCArIDEpCi0gICAgICAgIGlmIGluZGV4ID09IC0xOgotICAgICAgICAgICAgaW5kZXggPSBsZW4ocCkKLSAgICAgICAgcmV0dXJuIHBbOmluZGV4XSwgcFtpbmRleDpdCi0gICAgcmV0dXJuICcnLCBwCi0KLQotIyBSZXR1cm4gdGhlIHRhaWwgKGJhc2VuYW1lKSBwYXJ0IG9mIGEgcGF0aC4KLQotZGVmIGJhc2VuYW1lKHApOgotICAgICIiIlJldHVybnMgdGhlIGZpbmFsIGNvbXBvbmVudCBvZiBhIHBhdGhuYW1lIiIiCi0gICAgcmV0dXJuIHNwbGl0KHApWzFdCi0KLQotIyBSZXR1cm4gdGhlIGhlYWQgKGRpcm5hbWUpIHBhcnQgb2YgYSBwYXRoLgotCi1kZWYgZGlybmFtZShwKToKLSAgICAiIiJSZXR1cm5zIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IG9mIGEgcGF0aG5hbWUiIiIKLSAgICByZXR1cm4gc3BsaXQocClbMF0KLQotCi0jIGFsaWFzIGV4aXN0cyB0byBsZXhpc3RzCi1sZXhpc3RzID0gZXhpc3RzCi0KLQotIyBJcyBhIHBhdGggYSBkaXJlY3Rvcnk/Ci0KLSMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/ICBFaXRoZXIgYSByb290ICh3aXRoIG9yIHdpdGhvdXQgZHJpdmUgbGV0dGVyKQotIyBvciBhbiBVTkMgcGF0aCB3aXRoIGF0IG1vc3QgYSAvIG9yIFwgYWZ0ZXIgdGhlIG1vdW50IHBvaW50LgotCi1kZWYgaXNtb3VudChwYXRoKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgbW91bnQgcG9pbnQgKGRlZmluZWQgYXMgcm9vdCBvZiBkcml2ZSkiIiIKLSAgICB1bmMsIHJlc3QgPSBzcGxpdHVuYyhwYXRoKQotICAgIGlmIHVuYzoKLSAgICAgICAgcmV0dXJuIHJlc3QgaW4gKCIiLCAiLyIsICJcXCIpCi0gICAgcCA9IHNwbGl0ZHJpdmUocGF0aClbMV0KLSAgICByZXR1cm4gbGVuKHApID09IDEgYW5kIHBbMF0gaW4gJy9cXCcKLQotCi0jIE5vcm1hbGl6ZSBhIHBhdGgsIGUuZy4gQS8vQiwgQS8uL0IgYW5kIEEvZm9vLy4uL0IgYWxsIGJlY29tZSBBL0IuCi0KLWRlZiBub3JtcGF0aChwYXRoKToKLSAgICAiIiJOb3JtYWxpemUgcGF0aCwgZWxpbWluYXRpbmcgZG91YmxlIHNsYXNoZXMsIGV0Yy4iIiIKLSAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKLSAgICBwcmVmaXgsIHBhdGggPSBzcGxpdGRyaXZlKHBhdGgpCi0gICAgd2hpbGUgcGF0aFs6MV0gPT0gJy8nOgotICAgICAgICBwcmVmaXggPSBwcmVmaXggKyAnLycKLSAgICAgICAgcGF0aCA9IHBhdGhbMTpdCi0gICAgY29tcHMgPSBwYXRoLnNwbGl0KCcvJykKLSAgICBpID0gMAotICAgIHdoaWxlIGkgPCBsZW4oY29tcHMpOgotICAgICAgICBpZiBjb21wc1tpXSA9PSAnLic6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaV0KLSAgICAgICAgZWxpZiBjb21wc1tpXSA9PSAnLi4nIGFuZCBpID4gMCBhbmQgY29tcHNbaS0xXSBub3QgaW4gKCcnLCAnLi4nKToKLSAgICAgICAgICAgIGRlbCBjb21wc1tpLTE6aSsxXQotICAgICAgICAgICAgaSA9IGkgLSAxCi0gICAgICAgIGVsaWYgY29tcHNbaV0gPT0gJycgYW5kIGkgPiAwIGFuZCBjb21wc1tpLTFdICE9ICcnOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpID0gaSArIDEKLSAgICAjIElmIHRoZSBwYXRoIGlzIG5vdyBlbXB0eSwgc3Vic3RpdHV0ZSAnLicKLSAgICBpZiBub3QgcHJlZml4IGFuZCBub3QgY29tcHM6Ci0gICAgICAgIGNvbXBzLmFwcGVuZCgnLicpCi0gICAgcmV0dXJuIHByZWZpeCArICcvJy5qb2luKGNvbXBzKQotCi0KLSMgUmV0dXJuIGFuIGFic29sdXRlIHBhdGguCi1kZWYgYWJzcGF0aChwYXRoKToKLSAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHZlcnNpb24gb2YgYSBwYXRoIiIiCi0gICAgaWYgbm90IGlzYWJzKHBhdGgpOgotICAgICAgICBwYXRoID0gam9pbihvcy5nZXRjd2QoKSwgcGF0aCkKLSAgICByZXR1cm4gbm9ybXBhdGgocGF0aCkKLQotIyByZWFscGF0aCBpcyBhIG5vLW9wIG9uIHN5c3RlbXMgd2l0aG91dCBpc2xpbmsgc3VwcG9ydAotcmVhbHBhdGggPSBhYnNwYXRoCi0KLXN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gRmFsc2UKZGlmZiAtLWdpdCBhL0xpYi9wYXRobGliLnB5IGIvTGliL3BhdGhsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczZWNhNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9wYXRobGliLnB5CkBAIC0wLDAgKzEsMTI4NCBAQAoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbworaW1wb3J0IG50cGF0aAoraW1wb3J0IG9zCitpbXBvcnQgcG9zaXhwYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBkdW1teV90aHJlYWRpbmcgYXMgdGhyZWFkaW5nCisKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNlcXVlbmNlLCBkZWZhdWx0ZGljdAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorZnJvbSBlcnJubyBpbXBvcnQgRUlOVkFMLCBFTk9FTlQKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbiwgY291bnQKK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGF0dHJnZXR0ZXIKK2Zyb20gc3RhdCBpbXBvcnQgU19JU0RJUiwgU19JU0xOSywgU19JU1JFRywgU19JU1NPQ0ssIFNfSVNCTEssIFNfSVNDSFIsIFNfSVNGSUZPCitmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGUgYXMgdXJscXVvdGUsIHF1b3RlX2Zyb21fYnl0ZXMgYXMgdXJscXVvdGVfZnJvbV9ieXRlcworCisKK3N1cHBvcnRzX3N5bWxpbmtzID0gVHJ1ZQordHJ5OgorICAgIGltcG9ydCBudAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIG50ID0gTm9uZQorZWxzZToKKyAgICBpZiBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKVs6Ml0gPj0gKDYsIDApOgorICAgICAgICBmcm9tIG50IGltcG9ydCBfZ2V0ZmluYWxwYXRobmFtZQorICAgIGVsc2U6CisgICAgICAgIHN1cHBvcnRzX3N5bWxpbmtzID0gRmFsc2UKKyAgICAgICAgX2dldGZpbmFscGF0aG5hbWUgPSBOb25lCisKKworX19hbGxfXyA9IFsKKyAgICAiUHVyZVBhdGgiLCAiUHVyZVBvc2l4UGF0aCIsICJQdXJlV2luZG93c1BhdGgiLAorICAgICJQYXRoIiwgIlBvc2l4UGF0aCIsICJXaW5kb3dzUGF0aCIsCisgICAgXQorCisjCisjIEludGVybmFscworIworCitkZWYgX2lzX3dpbGRjYXJkX3BhdHRlcm4ocGF0KToKKyAgICAjIFdoZXRoZXIgdGhpcyBwYXR0ZXJuIG5lZWRzIGFjdHVhbCBtYXRjaGluZyB1c2luZyBmbm1hdGNoLCBvciBjYW4KKyAgICAjIGJlIGxvb2tlZCB1cCBkaXJlY3RseSBhcyBhIGZpbGUuCisgICAgcmV0dXJuICIqIiBpbiBwYXQgb3IgIj8iIGluIHBhdCBvciAiWyIgaW4gcGF0CisKKworY2xhc3MgX0ZsYXZvdXIob2JqZWN0KToKKyAgICAiIiJBIGZsYXZvdXIgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgKHBsYXRmb3JtLXNwZWNpZmljKSBzZXQgb2YgcGF0aAorICAgIHNlbWFudGljcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5qb2luID0gc2VsZi5zZXAuam9pbgorCisgICAgZGVmIHBhcnNlX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcGFyc2VkID0gW10KKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgYWx0c2VwID0gc2VsZi5hbHRzZXAKKyAgICAgICAgZHJ2ID0gcm9vdCA9ICcnCisgICAgICAgIGl0ID0gcmV2ZXJzZWQocGFydHMpCisgICAgICAgIGZvciBwYXJ0IGluIGl0OgorICAgICAgICAgICAgaWYgbm90IHBhcnQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGFsdHNlcDoKKyAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKGFsdHNlcCwgc2VwKQorICAgICAgICAgICAgZHJ2LCByb290LCByZWwgPSBzZWxmLnNwbGl0cm9vdChwYXJ0KQorICAgICAgICAgICAgaWYgc2VwIGluIHJlbDoKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiByZXZlcnNlZChyZWwuc3BsaXQoc2VwKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIHggYW5kIHggIT0gJy4nOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmFwcGVuZChzeXMuaW50ZXJuKHgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiByZWwgYW5kIHJlbCAhPSAnLic6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoc3lzLmludGVybihyZWwpKQorICAgICAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICAgICAgaWYgbm90IGRydjoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBubyBkcml2ZSBpcyBwcmVzZW50LCB0cnkgdG8gZmluZCBvbmUgaW4gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgICMgcGFydHMuIFRoaXMgbWFrZXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGUuZy4KKyAgICAgICAgICAgICAgICAgICAgIyAoIkM6IiwgIi8iLCAiYSIpIHJlYXNvbmFibHkgaW50dWl0aXZlLgorICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRydiA9IHNlbGYuc3BsaXRyb290KHBhcnQpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkcnY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoZHJ2ICsgcm9vdCkKKyAgICAgICAgcGFyc2VkLnJldmVyc2UoKQorICAgICAgICByZXR1cm4gZHJ2LCByb290LCBwYXJzZWQKKworICAgIGRlZiBqb2luX3BhcnNlZF9wYXJ0cyhzZWxmLCBkcnYsIHJvb3QsIHBhcnRzLCBkcnYyLCByb290MiwgcGFydHMyKToKKyAgICAgICAgIiIiCisgICAgICAgIEpvaW4gdGhlIHR3byBwYXRocyByZXByZXNlbnRlZCBieSB0aGUgcmVzcGVjdGl2ZQorICAgICAgICAoZHJpdmUsIHJvb3QsIHBhcnRzKSB0dXBsZXMuICBSZXR1cm4gYSBuZXcgKGRyaXZlLCByb290LCBwYXJ0cykgdHVwbGUuCisgICAgICAgICIiIgorICAgICAgICBpZiByb290MjoKKyAgICAgICAgICAgIHBhcnRzID0gcGFydHMyCisgICAgICAgICAgICByb290ID0gcm9vdDIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnRzID0gcGFydHMgKyBwYXJ0czIKKyAgICAgICAgIyBYWFggcmFpc2UgZXJyb3IgaWYgZHJ2IGFuZCBkcnYyIGFyZSBkaWZmZXJlbnQ/CisgICAgICAgIHJldHVybiBkcnYyIG9yIGRydiwgcm9vdCwgcGFydHMKKworCitjbGFzcyBfV2luZG93c0ZsYXZvdXIoX0ZsYXZvdXIpOgorICAgICMgUmVmZXJlbmNlIGZvciBXaW5kb3dzIHBhdGhzIGNhbiBiZSBmb3VuZCBhdAorICAgICMgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzY1MjQ3JTI4dj12cy44NSUyOS5hc3B4CisKKyAgICBzZXAgPSAnXFwnCisgICAgYWx0c2VwID0gJy8nCisgICAgaGFzX2RydiA9IFRydWUKKyAgICBwYXRobW9kID0gbnRwYXRoCisKKyAgICBpc19zdXBwb3J0ZWQgPSAobnQgaXMgbm90IE5vbmUpCisKKyAgICBkcml2ZV9sZXR0ZXJzID0gKAorICAgICAgICBzZXQoY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSArIDEpKSB8CisgICAgICAgIHNldChjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpICsgMSkpCisgICAgKQorICAgIGV4dF9uYW1lc3BhY2VfcHJlZml4ID0gJ1xcXFw/XFwnCisKKyAgICByZXNlcnZlZF9uYW1lcyA9ICgKKyAgICAgICAgeydDT04nLCAnUFJOJywgJ0FVWCcsICdOVUwnfSB8CisgICAgICAgIHsnQ09NJWQnICUgaSBmb3IgaSBpbiByYW5nZSgxLCAxMCl9IHwKKyAgICAgICAgeydMUFQlZCcgJSBpIGZvciBpIGluIHJhbmdlKDEsIDEwKX0KKyAgICAgICAgKQorCisgICAgIyBJbnRlcmVzdGluZyBmaW5kaW5ncyBhYm91dCBleHRlbmRlZCBwYXRoczoKKyAgICAjIC0gJ1xcP1xjOlxhJywgJy8vPy9jOlxhJyBhbmQgJy8vPy9jOi9hJyBhcmUgYWxsIHN1cHBvcnRlZAorICAgICMgICBidXQgJ1xcP1xjOi9hJyBpcyBub3QKKyAgICAjIC0gZXh0ZW5kZWQgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZTsgInJlbGF0aXZlIiBleHRlbmRlZCBwYXRocyB3aWxsCisgICAgIyAgIGZhaWwuCisKKyAgICBkZWYgc3BsaXRyb290KHNlbGYsIHBhcnQsIHNlcD1zZXApOgorICAgICAgICBmaXJzdCA9IHBhcnRbMDoxXQorICAgICAgICBzZWNvbmQgPSBwYXJ0WzE6Ml0KKyAgICAgICAgaWYgKHNlY29uZCA9PSBzZXAgYW5kIGZpcnN0ID09IHNlcCk6CisgICAgICAgICAgICAjIFhYWCBleHRlbmRlZCBwYXRocyBzaG91bGQgYWxzbyBkaXNhYmxlIHRoZSBjb2xsYXBzaW5nIG9mICIuIgorICAgICAgICAgICAgIyBjb21wb25lbnRzIChhY2NvcmRpbmcgdG8gTVNETiBkb2NzKS4KKyAgICAgICAgICAgIHByZWZpeCwgcGFydCA9IHNlbGYuX3NwbGl0X2V4dGVuZGVkX3BhdGgocGFydCkKKyAgICAgICAgICAgIGZpcnN0ID0gcGFydFswOjFdCisgICAgICAgICAgICBzZWNvbmQgPSBwYXJ0WzE6Ml0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIHRoaXJkID0gcGFydFsyOjNdCisgICAgICAgIGlmIChzZWNvbmQgPT0gc2VwIGFuZCBmaXJzdCA9PSBzZXAgYW5kIHRoaXJkICE9IHNlcCk6CisgICAgICAgICAgICAjIGlzIGEgVU5DIHBhdGg6CisgICAgICAgICAgICAjIHZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diByb290CisgICAgICAgICAgICAjIFxcbWFjaGluZVxtb3VudHBvaW50XGRpcmVjdG9yeVxldGNcLi4uCisgICAgICAgICAgICAjICAgICAgICAgICAgZGlyZWN0b3J5IF5eXl5eXl5eXl5eXl5eCisgICAgICAgICAgICBpbmRleCA9IHBhcnQuZmluZChzZXAsIDIpCisgICAgICAgICAgICBpZiBpbmRleCAhPSAtMToKKyAgICAgICAgICAgICAgICBpbmRleDIgPSBwYXJ0LmZpbmQoc2VwLCBpbmRleCArIDEpCisgICAgICAgICAgICAgICAgIyBhIFVOQyBwYXRoIGNhbid0IGhhdmUgdHdvIHNsYXNoZXMgaW4gYSByb3cKKyAgICAgICAgICAgICAgICAjIChhZnRlciB0aGUgaW5pdGlhbCB0d28pCisgICAgICAgICAgICAgICAgaWYgaW5kZXgyICE9IGluZGV4ICsgMToKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXgyID09IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgyID0gbGVuKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBwYXJ0WzE6aW5kZXgyXSwgc2VwLCBwYXJ0W2luZGV4MisxOl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0WzppbmRleDJdLCBzZXAsIHBhcnRbaW5kZXgyKzE6XQorICAgICAgICBkcnYgPSByb290ID0gJycKKyAgICAgICAgaWYgc2Vjb25kID09ICc6JyBhbmQgZmlyc3QgaW4gc2VsZi5kcml2ZV9sZXR0ZXJzOgorICAgICAgICAgICAgZHJ2ID0gcGFydFs6Ml0KKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0WzI6XQorICAgICAgICAgICAgZmlyc3QgPSB0aGlyZAorICAgICAgICBpZiBmaXJzdCA9PSBzZXA6CisgICAgICAgICAgICByb290ID0gZmlyc3QKKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0LmxzdHJpcChzZXApCisgICAgICAgIHJldHVybiBwcmVmaXggKyBkcnYsIHJvb3QsIHBhcnQKKworICAgIGRlZiBjYXNlZm9sZChzZWxmLCBzKToKKyAgICAgICAgcmV0dXJuIHMubG93ZXIoKQorCisgICAgZGVmIGNhc2Vmb2xkX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIFtwLmxvd2VyKCkgZm9yIHAgaW4gcGFydHNdCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBwYXRoKToKKyAgICAgICAgcyA9IHN0cihwYXRoKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRjd2QoKQorICAgICAgICBpZiBfZ2V0ZmluYWxwYXRobmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHRfdG9fbm9ybWFsKF9nZXRmaW5hbHBhdGhuYW1lKHMpKQorICAgICAgICAjIE1lYW5zIGZhbGxiYWNrIG9uIGFic29sdXRlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3NwbGl0X2V4dGVuZGVkX3BhdGgoc2VsZiwgcywgZXh0X3ByZWZpeD1leHRfbmFtZXNwYWNlX3ByZWZpeCk6CisgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIGlmIHMuc3RhcnRzd2l0aChleHRfcHJlZml4KToKKyAgICAgICAgICAgIHByZWZpeCA9IHNbOjRdCisgICAgICAgICAgICBzID0gc1s0Ol0KKyAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgnVU5DXFwnKToKKyAgICAgICAgICAgICAgICBwcmVmaXggKz0gc1s6M10KKyAgICAgICAgICAgICAgICBzID0gJ1xcJyArIHNbMzpdCisgICAgICAgIHJldHVybiBwcmVmaXgsIHMKKworICAgIGRlZiBfZXh0X3RvX25vcm1hbChzZWxmLCBzKToKKyAgICAgICAgIyBUdXJuIGJhY2sgYW4gZXh0ZW5kZWQgcGF0aCBpbnRvIGEgbm9ybWFsIERPUy1saWtlIHBhdGgKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0X2V4dGVuZGVkX3BhdGgocylbMV0KKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmLCBwYXJ0cyk6CisgICAgICAgICMgTk9URTogdGhlIHJ1bGVzIGZvciByZXNlcnZlZCBuYW1lcyBzZWVtIHNvbWV3aGF0IGNvbXBsaWNhdGVkCisgICAgICAgICMgKGUuZy4gciIuLlxOVUwiIGlzIHJlc2VydmVkIGJ1dCBub3QgciJmb29cTlVMIikuCisgICAgICAgICMgV2UgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gYW5kIHJldHVybiBUcnVlIGZvciBwYXRocyB3aGljaCBhcmUKKyAgICAgICAgIyBub3QgY29uc2lkZXJlZCByZXNlcnZlZCBieSBXaW5kb3dzLgorICAgICAgICBpZiBub3QgcGFydHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcGFydHNbMF0uc3RhcnRzd2l0aCgnXFxcXCcpOgorICAgICAgICAgICAgIyBVTkMgcGF0aHMgYXJlIG5ldmVyIHJlc2VydmVkCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHBhcnRzWy0xXS5wYXJ0aXRpb24oJy4nKVswXS51cHBlcigpIGluIHNlbGYucmVzZXJ2ZWRfbmFtZXMKKworICAgIGRlZiBtYWtlX3VyaShzZWxmLCBwYXRoKToKKyAgICAgICAgIyBVbmRlciBXaW5kb3dzLCBmaWxlIFVSSXMgdXNlIHRoZSBVVEYtOCBlbmNvZGluZy4KKyAgICAgICAgZHJpdmUgPSBwYXRoLmRyaXZlCisgICAgICAgIGlmIGxlbihkcml2ZSkgPT0gMiBhbmQgZHJpdmVbMV0gPT0gJzonOgorICAgICAgICAgICAgIyBJdCdzIGEgcGF0aCBvbiBhIGxvY2FsIGRyaXZlID0+ICdmaWxlOi8vL2M6L2EvYicKKyAgICAgICAgICAgIHJlc3QgPSBwYXRoLmFzX3Bvc2l4KClbMjpdLmxzdHJpcCgnLycpCisgICAgICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vJXMvJXMnICUgKAorICAgICAgICAgICAgICAgIGRyaXZlLCB1cmxxdW90ZV9mcm9tX2J5dGVzKHJlc3QuZW5jb2RlKCd1dGYtOCcpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSXQncyBhIHBhdGggb24gYSBuZXR3b3JrIGRyaXZlID0+ICdmaWxlOi8vaG9zdC9zaGFyZS9hL2InCisgICAgICAgICAgICByZXR1cm4gJ2ZpbGU6JyArIHVybHF1b3RlX2Zyb21fYnl0ZXMocGF0aC5hc19wb3NpeCgpLmVuY29kZSgndXRmLTgnKSkKKworCitjbGFzcyBfUG9zaXhGbGF2b3VyKF9GbGF2b3VyKToKKyAgICBzZXAgPSAnLycKKyAgICBhbHRzZXAgPSAnJworICAgIGhhc19kcnYgPSBGYWxzZQorICAgIHBhdGhtb2QgPSBwb3NpeHBhdGgKKworICAgIGlzX3N1cHBvcnRlZCA9IChvcy5uYW1lICE9ICdudCcpCisKKyAgICBkZWYgc3BsaXRyb290KHNlbGYsIHBhcnQsIHNlcD1zZXApOgorICAgICAgICBpZiBwYXJ0IGFuZCBwYXJ0WzBdID09IHNlcDoKKyAgICAgICAgICAgIHN0cmlwcGVkX3BhcnQgPSBwYXJ0LmxzdHJpcChzZXApCisgICAgICAgICAgICAjIEFjY29yZGluZyB0byBQT1NJWCBwYXRoIHJlc29sdXRpb246CisgICAgICAgICAgICAjIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvYmFzZWRlZnMveGJkX2NoYXAwNC5odG1sI3RhZ18wNF8xMQorICAgICAgICAgICAgIyAiQSBwYXRobmFtZSB0aGF0IGJlZ2lucyB3aXRoIHR3byBzdWNjZXNzaXZlIHNsYXNoZXMgbWF5IGJlCisgICAgICAgICAgICAjIGludGVycHJldGVkIGluIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLCBhbHRob3VnaCBtb3JlCisgICAgICAgICAgICAjIHRoYW4gdHdvIGxlYWRpbmcgc2xhc2hlcyBzaGFsbCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIHNsYXNoIi4KKyAgICAgICAgICAgIGlmIGxlbihwYXJ0KSAtIGxlbihzdHJpcHBlZF9wYXJ0KSA9PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiAnJywgc2VwICogMiwgc3RyaXBwZWRfcGFydAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJycsIHNlcCwgc3RyaXBwZWRfcGFydAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcnLCAnJywgcGFydAorCisgICAgZGVmIGNhc2Vmb2xkKHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGNhc2Vmb2xkX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIHBhcnRzCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBwYXRoKToKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgZGVmIHNwbGl0KHApOgorICAgICAgICAgICAgcmV0dXJuIFt4IGZvciB4IGluIHAuc3BsaXQoc2VwKSBpZiB4XQorICAgICAgICBkZWYgYWJzcGFydHMocCk6CisgICAgICAgICAgICAjIE91ciBvd24gYWJzcGF0aCgpLCBzaW5jZSB0aGUgcG9zaXhwYXRoIG9uZSBtYWtlcworICAgICAgICAgICAgIyB0aGUgbWlzdGFrZSBvZiAibm9ybWFsaXppbmciIHRoZSBwYXRoIHdpdGhvdXQgcmVzb2x2aW5nIHRoZQorICAgICAgICAgICAgIyBzeW1saW5rcyBmaXJzdC4KKyAgICAgICAgICAgIGlmIG5vdCBwLnN0YXJ0c3dpdGgoc2VwKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BsaXQob3MuZ2V0Y3dkKCkpICsgc3BsaXQocCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0KHApCisgICAgICAgIHBhcnRzID0gYWJzcGFydHMoc3RyKHBhdGgpKVs6Oi0xXQorICAgICAgICBhY2Nlc3NvciA9IHBhdGguX2FjY2Vzc29yCisgICAgICAgIHJlc29sdmVkID0gY3VyID0gIiIKKyAgICAgICAgc3ltbGlua3MgPSB7fQorICAgICAgICB3aGlsZSBwYXJ0czoKKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0cy5wb3AoKQorICAgICAgICAgICAgY3VyID0gcmVzb2x2ZWQgKyBzZXAgKyBwYXJ0CisgICAgICAgICAgICBpZiBjdXIgaW4gc3ltbGlua3MgYW5kIHN5bWxpbmtzW2N1cl0gPD0gbGVuKHBhcnRzKToKKyAgICAgICAgICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgc2VlbiB0aGUgc3ltbGluayBhbmQgdGhlcmUncyBub3QgbGVzcworICAgICAgICAgICAgICAgICMgd29yayB0byBkbyB0aGFuIHRoZSBsYXN0IHRpbWUuCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTeW1saW5rIGxvb3AgZnJvbSAlciIgJSBjdXIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYWNjZXNzb3IucmVhZGxpbmsoY3VyKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlZBTDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAjIE5vdCBhIHN5bWxpbmsKKyAgICAgICAgICAgICAgICByZXNvbHZlZCA9IGN1cgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRha2Ugbm90ZSBvZiByZW1haW5pbmcgd29yayBmcm9tIHRoaXMgc3ltbGluaworICAgICAgICAgICAgICAgIHN5bWxpbmtzW2N1cl0gPSBsZW4ocGFydHMpCisgICAgICAgICAgICAgICAgaWYgdGFyZ2V0LnN0YXJ0c3dpdGgoc2VwKToKKyAgICAgICAgICAgICAgICAgICAgIyBTeW1saW5rIHBvaW50cyB0byBhYnNvbHV0ZSBwYXRoCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkID0gIiIKKyAgICAgICAgICAgICAgICBwYXJ0cy5leHRlbmQoc3BsaXQodGFyZ2V0KVs6Oi0xXSkKKyAgICAgICAgcmV0dXJuIHJlc29sdmVkIG9yIHNlcAorCisgICAgZGVmIGlzX3Jlc2VydmVkKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbWFrZV91cmkoc2VsZiwgcGF0aCk6CisgICAgICAgICMgV2UgcmVwcmVzZW50IHRoZSBwYXRoIHVzaW5nIHRoZSBsb2NhbCBmaWxlc3lzdGVtIGVuY29kaW5nLAorICAgICAgICAjIGZvciBwb3J0YWJpbGl0eSB0byBvdGhlciBhcHBsaWNhdGlvbnMuCisgICAgICAgIGJwYXRoID0gYnl0ZXMocGF0aCkKKyAgICAgICAgcmV0dXJuICdmaWxlOi8vJyArIHVybHF1b3RlX2Zyb21fYnl0ZXMoYnBhdGgpCisKKworX3dpbmRvd3NfZmxhdm91ciA9IF9XaW5kb3dzRmxhdm91cigpCitfcG9zaXhfZmxhdm91ciA9IF9Qb3NpeEZsYXZvdXIoKQorCisKK2NsYXNzIF9BY2Nlc3NvcjoKKyAgICAiIiJBbiBhY2Nlc3NvciBpbXBsZW1lbnRzIGEgcGFydGljdWxhciAoc3lzdGVtLXNwZWNpZmljIG9yIG5vdCkgd2F5IG9mCisgICAgYWNjZXNzaW5nIHBhdGhzIG9uIHRoZSBmaWxlc3lzdGVtLiIiIgorCisKK2NsYXNzIF9Ob3JtYWxBY2Nlc3NvcihfQWNjZXNzb3IpOgorCisgICAgZGVmIF93cmFwX3N0cmZ1bmMoc3RyZnVuYyk6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoc3RyZnVuYykKKyAgICAgICAgZGVmIHdyYXBwZWQocGF0aG9iaiwgKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHN0cmZ1bmMoc3RyKHBhdGhvYmopLCAqYXJncykKKyAgICAgICAgcmV0dXJuIHN0YXRpY21ldGhvZCh3cmFwcGVkKQorCisgICAgZGVmIF93cmFwX2JpbmFyeV9zdHJmdW5jKHN0cmZ1bmMpOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHN0cmZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkKHBhdGhvYmpBLCBwYXRob2JqQiwgKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHN0cmZ1bmMoc3RyKHBhdGhvYmpBKSwgc3RyKHBhdGhvYmpCKSwgKmFyZ3MpCisgICAgICAgIHJldHVybiBzdGF0aWNtZXRob2Qod3JhcHBlZCkKKworICAgIHN0YXQgPSBfd3JhcF9zdHJmdW5jKG9zLnN0YXQpCisKKyAgICBsc3RhdCA9IF93cmFwX3N0cmZ1bmMob3MubHN0YXQpCisKKyAgICBvcGVuID0gX3dyYXBfc3RyZnVuYyhvcy5vcGVuKQorCisgICAgbGlzdGRpciA9IF93cmFwX3N0cmZ1bmMob3MubGlzdGRpcikKKworICAgIGNobW9kID0gX3dyYXBfc3RyZnVuYyhvcy5jaG1vZCkKKworICAgIGlmIGhhc2F0dHIob3MsICJsY2htb2QiKToKKyAgICAgICAgbGNobW9kID0gX3dyYXBfc3RyZnVuYyhvcy5sY2htb2QpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGxjaG1vZChzZWxmLCBwYXRob2JqLCBtb2RlKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxjaG1vZCgpIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0iKQorCisgICAgbWtkaXIgPSBfd3JhcF9zdHJmdW5jKG9zLm1rZGlyKQorCisgICAgdW5saW5rID0gX3dyYXBfc3RyZnVuYyhvcy51bmxpbmspCisKKyAgICBybWRpciA9IF93cmFwX3N0cmZ1bmMob3Mucm1kaXIpCisKKyAgICByZW5hbWUgPSBfd3JhcF9iaW5hcnlfc3RyZnVuYyhvcy5yZW5hbWUpCisKKyAgICByZXBsYWNlID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3MucmVwbGFjZSkKKworICAgIGlmIG50OgorICAgICAgICBpZiBzdXBwb3J0c19zeW1saW5rczoKKyAgICAgICAgICAgIHN5bWxpbmsgPSBfd3JhcF9iaW5hcnlfc3RyZnVuYyhvcy5zeW1saW5rKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmIHN5bWxpbmsoYSwgYiwgdGFyZ2V0X2lzX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3ltbGluaygpIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0iKQorICAgIGVsc2U6CisgICAgICAgICMgVW5kZXIgUE9TSVgsIG9zLnN5bWxpbmsoKSB0YWtlcyB0d28gYXJncworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBzeW1saW5rKGEsIGIsIHRhcmdldF9pc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgcmV0dXJuIG9zLnN5bWxpbmsoc3RyKGEpLCBzdHIoYikpCisKKyAgICB1dGltZSA9IF93cmFwX3N0cmZ1bmMob3MudXRpbWUpCisKKyAgICAjIEhlbHBlciBmb3IgcmVzb2x2ZSgpCisgICAgZGVmIHJlYWRsaW5rKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gb3MucmVhZGxpbmsocGF0aCkKKworCitfbm9ybWFsX2FjY2Vzc29yID0gX05vcm1hbEFjY2Vzc29yKCkKKworCisjCisjIEdsb2JiaW5nIGhlbHBlcnMKKyMKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgX2NhY2hlZChmdW5jKToKKyAgICB0cnk6CisgICAgICAgIGZ1bmMuX19jYWNoZWRfXworICAgICAgICB5aWVsZCBmdW5jCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBjYWNoZSA9IHt9CisgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVbYXJnc10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhY2hlW2FyZ3NdID0gZnVuYygqYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgd3JhcHBlci5fX2NhY2hlZF9fID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCB3cmFwcGVyCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjYWNoZS5jbGVhcigpCisKK2RlZiBfbWFrZV9zZWxlY3RvcihwYXR0ZXJuX3BhcnRzKToKKyAgICBwYXQgPSBwYXR0ZXJuX3BhcnRzWzBdCisgICAgY2hpbGRfcGFydHMgPSBwYXR0ZXJuX3BhcnRzWzE6XQorICAgIGlmIHBhdCA9PSAnKionOgorICAgICAgICBjbHMgPSBfUmVjdXJzaXZlV2lsZGNhcmRTZWxlY3RvcgorICAgIGVsaWYgJyoqJyBpbiBwYXQ6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcGF0dGVybjogJyoqJyBjYW4gb25seSBiZSBhbiBlbnRpcmUgcGF0aCBjb21wb25lbnQiKQorICAgIGVsaWYgX2lzX3dpbGRjYXJkX3BhdHRlcm4ocGF0KToKKyAgICAgICAgY2xzID0gX1dpbGRjYXJkU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBjbHMgPSBfUHJlY2lzZVNlbGVjdG9yCisgICAgcmV0dXJuIGNscyhwYXQsIGNoaWxkX3BhcnRzKQorCitpZiBoYXNhdHRyKGZ1bmN0b29scywgImxydV9jYWNoZSIpOgorICAgIF9tYWtlX3NlbGVjdG9yID0gZnVuY3Rvb2xzLmxydV9jYWNoZSgpKF9tYWtlX3NlbGVjdG9yKQorCisKK2NsYXNzIF9TZWxlY3RvcjoKKyAgICAiIiJBIHNlbGVjdG9yIG1hdGNoZXMgYSBzcGVjaWZpYyBnbG9iIHBhdHRlcm4gcGFydCBhZ2FpbnN0IHRoZSBjaGlsZHJlbgorICAgIG9mIGEgZ2l2ZW4gcGF0aC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIHNlbGYuY2hpbGRfcGFydHMgPSBjaGlsZF9wYXJ0cworICAgICAgICBpZiBjaGlsZF9wYXJ0czoKKyAgICAgICAgICAgIHNlbGYuc3VjY2Vzc29yID0gX21ha2Vfc2VsZWN0b3IoY2hpbGRfcGFydHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3NvciA9IF9UZXJtaW5hdGluZ1NlbGVjdG9yKCkKKworICAgIGRlZiBzZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCk6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciBhbGwgY2hpbGQgcGF0aHMgb2YgYHBhcmVudF9wYXRoYCBtYXRjaGVkIGJ5IHRoaXMKKyAgICAgICAgc2VsZWN0b3IuICBUaGlzIGNhbiBjb250YWluIHBhcmVudF9wYXRoIGl0c2VsZi4iIiIKKyAgICAgICAgcGF0aF9jbHMgPSB0eXBlKHBhcmVudF9wYXRoKQorICAgICAgICBpc19kaXIgPSBwYXRoX2Nscy5pc19kaXIKKyAgICAgICAgZXhpc3RzID0gcGF0aF9jbHMuZXhpc3RzCisgICAgICAgIGxpc3RkaXIgPSBwYXJlbnRfcGF0aC5fYWNjZXNzb3IubGlzdGRpcgorICAgICAgICByZXR1cm4gc2VsZi5fc2VsZWN0X2Zyb20ocGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKQorCisKK2NsYXNzIF9UZXJtaW5hdGluZ1NlbGVjdG9yOgorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICB5aWVsZCBwYXJlbnRfcGF0aAorCisKK2NsYXNzIF9QcmVjaXNlU2VsZWN0b3IoX1NlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgX1NlbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKQorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICBpZiBub3QgaXNfZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChzZWxmLm5hbWUpCisgICAgICAgIGlmIGV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuc3VjY2Vzc29yLl9zZWxlY3RfZnJvbShwYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgeWllbGQgcAorCisKK2NsYXNzIF9XaWxkY2FyZFNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0LCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIHNlbGYucGF0ID0gcmUuY29tcGlsZShmbm1hdGNoLnRyYW5zbGF0ZShwYXQpKQorICAgICAgICBfU2VsZWN0b3IuX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpCisKKyAgICBkZWYgX3NlbGVjdF9mcm9tKHNlbGYsIHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgIGlmIG5vdCBpc19kaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGNmID0gcGFyZW50X3BhdGguX2ZsYXZvdXIuY2FzZWZvbGQKKyAgICAgICAgZm9yIG5hbWUgaW4gbGlzdGRpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICBjYXNlZm9sZGVkID0gY2YobmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYucGF0Lm1hdGNoKGNhc2Vmb2xkZWQpOgorICAgICAgICAgICAgICAgIHBhdGggPSBwYXJlbnRfcGF0aC5fbWFrZV9jaGlsZF9yZWxwYXRoKG5hbWUpCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tKHBhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorCisKK2NsYXNzIF9SZWN1cnNpdmVXaWxkY2FyZFNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0LCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfaXRlcmF0ZV9kaXJlY3RvcmllcyhzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBsaXN0ZGlyKToKKyAgICAgICAgeWllbGQgcGFyZW50X3BhdGgKKyAgICAgICAgZm9yIG5hbWUgaW4gbGlzdGRpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgaWYgaXNfZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuX2l0ZXJhdGVfZGlyZWN0b3JpZXMocGF0aCwgaXNfZGlyLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICBpZiBub3QgaXNfZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIF9jYWNoZWQobGlzdGRpcikgYXMgbGlzdGRpcjoKKyAgICAgICAgICAgIHlpZWxkZWQgPSBzZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvcl9zZWxlY3QgPSBzZWxmLnN1Y2Nlc3Nvci5fc2VsZWN0X2Zyb20KKyAgICAgICAgICAgICAgICBmb3Igc3RhcnRpbmdfcG9pbnQgaW4gc2VsZi5faXRlcmF0ZV9kaXJlY3RvcmllcyhwYXJlbnRfcGF0aCwgaXNfZGlyLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc3VjY2Vzc29yX3NlbGVjdChzdGFydGluZ19wb2ludCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4geWllbGRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGRlZC5hZGQocCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgeWllbGRlZC5jbGVhcigpCisKKworIworIyBQdWJsaWMgQVBJCisjCisKK2NsYXNzIF9QYXRoUGFyZW50cyhTZXF1ZW5jZSk6CisgICAgIiIiVGhpcyBvYmplY3QgcHJvdmlkZXMgc2VxdWVuY2UtbGlrZSBhY2Nlc3MgdG8gdGhlIGxvZ2ljYWwgYW5jZXN0b3JzCisgICAgb2YgYSBwYXRoLiAgRG9uJ3QgdHJ5IHRvIGNvbnN0cnVjdCBpdCB5b3Vyc2VsZi4iIiIKKyAgICBfX3Nsb3RzX18gPSAoJ19wYXRoY2xzJywgJ19kcnYnLCAnX3Jvb3QnLCAnX3BhcnRzJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgIyBXZSBkb24ndCBzdG9yZSB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgcmVmZXJlbmNlIGN5Y2xlcworICAgICAgICBzZWxmLl9wYXRoY2xzID0gdHlwZShwYXRoKQorICAgICAgICBzZWxmLl9kcnYgPSBwYXRoLl9kcnYKKyAgICAgICAgc2VsZi5fcm9vdCA9IHBhdGguX3Jvb3QKKyAgICAgICAgc2VsZi5fcGFydHMgPSBwYXRoLl9wYXJ0cworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RydiBvciBzZWxmLl9yb290OgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wYXJ0cykgLSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3BhcnRzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGlkeCk6CisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoaWR4KQorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aGNscy5fZnJvbV9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFydHNbOi1pZHggLSAxXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8e30ucGFyZW50cz4iLmZvcm1hdChzZWxmLl9wYXRoY2xzLl9fbmFtZV9fKQorCisKK2NsYXNzIFB1cmVQYXRoKG9iamVjdCk6CisgICAgIiIiUHVyZVBhdGggcmVwcmVzZW50cyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgb2ZmZXJzIG9wZXJhdGlvbnMgd2hpY2gKKyAgICBkb24ndCBpbXBseSBhbnkgYWN0dWFsIGZpbGVzeXN0ZW0gSS9PLiAgRGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLAorICAgIGluc3RhbnRpYXRpbmcgYSBQdXJlUGF0aCB3aWxsIHJldHVybiBlaXRoZXIgYSBQdXJlUG9zaXhQYXRoIG9yIGEKKyAgICBQdXJlV2luZG93c1BhdGggb2JqZWN0LiAgWW91IGNhbiBhbHNvIGluc3RhbnRpYXRlIGVpdGhlciBvZiB0aGVzZSBjbGFzc2VzCisgICAgZGlyZWN0bHksIHJlZ2FyZGxlc3Mgb2YgeW91ciBzeXN0ZW0uCisgICAgIiIiCisgICAgX19zbG90c19fID0gKAorICAgICAgICAnX2RydicsICdfcm9vdCcsICdfcGFydHMnLAorICAgICAgICAnX3N0cicsICdfaGFzaCcsICdfcHBhcnRzJywgJ19jYWNoZWRfY3BhcnRzJywKKyAgICApCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgUHVyZVBhdGggZnJvbSBvbmUgb3Igc2V2ZXJhbCBzdHJpbmdzIGFuZCBvciBleGlzdGluZworICAgICAgICBQdXJlUGF0aCBvYmplY3RzLiAgVGhlIHN0cmluZ3MgYW5kIHBhdGggb2JqZWN0cyBhcmUgY29tYmluZWQgc28gYXMKKyAgICAgICAgdG8geWllbGQgYSBjYW5vbmljYWxpemVkIHBhdGgsIHdoaWNoIGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZQorICAgICAgICBuZXcgUHVyZVBhdGggb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgY2xzIGlzIFB1cmVQYXRoOgorICAgICAgICAgICAgY2xzID0gUHVyZVdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIFB1cmVQb3NpeFBhdGgKKyAgICAgICAgcmV0dXJuIGNscy5fZnJvbV9wYXJ0cyhhcmdzKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICMgVXNpbmcgdGhlIHBhcnRzIHR1cGxlIGhlbHBzIHNoYXJlIGludGVybmVkIHBhdGggcGFydHMKKyAgICAgICAgIyB3aGVuIHBpY2tsaW5nIHJlbGF0ZWQgcGF0aHMuCisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIHR1cGxlKHNlbGYuX3BhcnRzKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2VfYXJncyhjbHMsIGFyZ3MpOgorICAgICAgICAjIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGRvbid0IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlLCBqdXN0CisgICAgICAgICMgY2Fub25pY2FsaXplIHNvbWUgY29uc3RydWN0b3IgYXJndW1lbnRzLgorICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIGZvciBhIGluIGFyZ3M6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGEsIFB1cmVQYXRoKToKKyAgICAgICAgICAgICAgICBwYXJ0cyArPSBhLl9wYXJ0cworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGEsIHN0cik6CisgICAgICAgICAgICAgICAgIyBBc3N1bWluZyBhIHN0cgorICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgYSBwYXRoIG9yIHN0ciBvYmplY3QsIG5vdCAlciIKKyAgICAgICAgICAgICAgICAgICAgJSB0eXBlKGEpKQorICAgICAgICByZXR1cm4gY2xzLl9mbGF2b3VyLnBhcnNlX3BhcnRzKHBhcnRzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnRzKGNscywgYXJncywgaW5pdD1UcnVlKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNhbGwgX3BhcnNlX2FyZ3Mgb24gdGhlIGluc3RhbmNlLCBzbyBhcyB0byBnZXQgdGhlCisgICAgICAgICMgcmlnaHQgZmxhdm91ci4KKyAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5fZHJ2ID0gZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGFydHMKKyAgICAgICAgaWYgaW5pdDoKKyAgICAgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMsIGluaXQ9VHJ1ZSk6CisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuX2RydiA9IGRydgorICAgICAgICBzZWxmLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLl9wYXJ0cyA9IHBhcnRzCisgICAgICAgIGlmIGluaXQ6CisgICAgICAgICAgICBzZWxmLl9pbml0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZm9ybWF0X3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMpOgorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBkcnYgKyByb290ICsgY2xzLl9mbGF2b3VyLmpvaW4ocGFydHNbMTpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGNscy5fZmxhdm91ci5qb2luKHBhcnRzKQorCisgICAgZGVmIF9pbml0KHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlbiBpbiBjb25jcmV0ZSBQYXRoCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbWFrZV9jaGlsZChzZWxmLCBhcmdzKToKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX2ZsYXZvdXIuam9pbl9wYXJzZWRfcGFydHMoCisgICAgICAgICAgICBzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsIHNlbGYuX3BhcnRzLCBkcnYsIHJvb3QsIHBhcnRzKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoZHJ2LCByb290LCBwYXJ0cykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCwgc3VpdGFibGUgZm9yCisgICAgICAgIHBhc3NpbmcgdG8gc3lzdGVtIGNhbGxzLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3N0ciA9IHNlbGYuX2Zvcm1hdF9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0cykgb3IgJy4nCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisKKyAgICBkZWYgYXNfcG9zaXgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoIHdpdGggZm9yd2FyZCAoLykKKyAgICAgICAgc2xhc2hlcy4iIiIKKyAgICAgICAgZiA9IHNlbGYuX2ZsYXZvdXIKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKS5yZXBsYWNlKGYuc2VwLCAnLycpCisKKyAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoLiAgVGhpcyBpcyBvbmx5CisgICAgICAgIHJlY29tbWVuZGVkIHRvIHVzZSB1bmRlciBVbml4LiIiIgorICAgICAgICByZXR1cm4gb3MuZnNlbmNvZGUoc3RyKHNlbGYpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9KHshcn0pIi5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuYXNfcG9zaXgoKSkKKworICAgIGRlZiBhc191cmkoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCBhcyBhICdmaWxlJyBVUkkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWxhdGl2ZSBwYXRoIGNhbid0IGJlIGV4cHJlc3NlZCBhcyBhIGZpbGUgVVJJIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZsYXZvdXIubWFrZV91cmkoc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfY3BhcnRzKHNlbGYpOgorICAgICAgICAjIENhY2hlZCBjYXNlZm9sZGVkIHBhcnRzLCBmb3IgaGFzaGluZyBhbmQgY29tcGFyaXNvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX2NwYXJ0cworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9jYWNoZWRfY3BhcnRzID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZF9wYXJ0cyhzZWxmLl9wYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfY3BhcnRzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID09IG90aGVyLl9jcGFydHMgYW5kIHNlbGYuX2ZsYXZvdXIgaXMgb3RoZXIuX2ZsYXZvdXIKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2gKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5faGFzaCA9IGhhc2godHVwbGUoc2VsZi5fY3BhcnRzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYXNoCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzIDwgb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA8PSBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID4gb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA+PSBvdGhlci5fY3BhcnRzCisKKyAgICBkcml2ZSA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19kcnYnKSwKKyAgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgZHJpdmUgcHJlZml4IChsZXR0ZXIgb3IgVU5DIHBhdGgpLCBpZiBhbnkuIiIiKQorCisgICAgcm9vdCA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19yb290JyksCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgcm9vdCBvZiB0aGUgcGF0aCwgaWYgYW55LiIiIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbmNob3Ioc2VsZik6CisgICAgICAgICIiIlRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkcml2ZSBhbmQgcm9vdCwgb3IgJycuIiIiCisgICAgICAgIGFuY2hvciA9IHNlbGYuX2RydiArIHNlbGYuX3Jvb3QKKyAgICAgICAgcmV0dXJuIGFuY2hvcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgaWYgYW55LiIiIgorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gKDEgaWYgKHNlbGYuX2RydiBvciBzZWxmLl9yb290KSBlbHNlIDApOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIHJldHVybiBwYXJ0c1stMV0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXgoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBjb21wb25lbnQncyBsYXN0IHN1ZmZpeCwgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGkgPSBuYW1lLnJmaW5kKCcuJykKKyAgICAgICAgaWYgMCA8IGkgPCBsZW4obmFtZSkgLSAxOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVbaTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXhlcyhzZWxmKToKKyAgICAgICAgIiIiQSBsaXN0IG9mIHRoZSBmaW5hbCBjb21wb25lbnQncyBzdWZmaXhlcywgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy4nKToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBuYW1lID0gbmFtZS5sc3RyaXAoJy4nKQorICAgICAgICByZXR1cm4gWycuJyArIHN1ZmZpeCBmb3Igc3VmZml4IGluIG5hbWUuc3BsaXQoJy4nKVsxOl1dCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RlbShzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBtaW51cyBpdHMgbGFzdCBzdWZmaXguIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaSA9IG5hbWUucmZpbmQoJy4nKQorICAgICAgICBpZiAwIDwgaSA8IGxlbihuYW1lKSAtIDE6CisgICAgICAgICAgICByZXR1cm4gbmFtZVs6aV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgd2l0aF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSBmaWxlIG5hbWUgY2hhbmdlZC4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGhhcyBhbiBlbXB0eSBuYW1lIiAlIChzZWxmLCkpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LTFdICsgW25hbWVdKQorCisgICAgZGVmIHdpdGhfc3VmZml4KHNlbGYsIHN1ZmZpeCk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHdpdGggdGhlIGZpbGUgc3VmZml4IGNoYW5nZWQgKG9yIGFkZGVkLCBpZiBub25lKS4iIiIKKyAgICAgICAgIyBYWFggaWYgc3VmZml4IGlzIE5vbmUsIHNob3VsZCB0aGUgY3VycmVudCBzdWZmaXggYmUgcmVtb3ZlZD8KKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGhhcyBhbiBlbXB0eSBuYW1lIiAlIChzZWxmLCkpCisgICAgICAgIG9sZF9zdWZmaXggPSBzZWxmLnN1ZmZpeAorICAgICAgICBpZiBub3Qgb2xkX3N1ZmZpeDoKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgc3VmZml4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gbmFtZVs6LWxlbihvbGRfc3VmZml4KV0gKyBzdWZmaXgKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotMV0gKyBbbmFtZV0pCisKKyAgICBkZWYgcmVsYXRpdmVfdG8oc2VsZiwgKm90aGVyKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIHRvIGFub3RoZXIgcGF0aCBpZGVudGlmaWVkIGJ5IHRoZSBwYXNzZWQKKyAgICAgICAgYXJndW1lbnRzLiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgcG9zc2libGUgKGJlY2F1c2UgdGhpcyBpcyBub3QKKyAgICAgICAgYSBzdWJwYXRoIG9mIHRoZSBvdGhlciBwYXRoKSwgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgICMgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kLCBkcml2ZSBhbmQgcm9vdCBhcmUgY29uc2lkZXJlZAorICAgICAgICAjIHNlcGFyYXRlIHBhcnRzLCBpLmUuOgorICAgICAgICAjICAgUGF0aCgnYzovJykucmVsYXRpdmVfdG8oJ2M6JykgIGdpdmVzIFBhdGgoJy8nKQorICAgICAgICAjICAgUGF0aCgnYzovJykucmVsYXRpdmVfdG8oJy8nKSAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgZHJ2ID0gc2VsZi5fZHJ2CisgICAgICAgIHJvb3QgPSBzZWxmLl9yb290CisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgaWYgcm9vdDoKKyAgICAgICAgICAgICAgICBhYnNfcGFydHMgPSBbZHJ2LCByb290XSArIHBhcnRzWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhYnNfcGFydHMgPSBbZHJ2XSArIHBhcnRzWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWJzX3BhcnRzID0gcGFydHMKKyAgICAgICAgdG9fZHJ2LCB0b19yb290LCB0b19wYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3Mob3RoZXIpCisgICAgICAgIGlmIHRvX2RydiBvciB0b19yb290OgorICAgICAgICAgICAgaWYgdG9fcm9vdDoKKyAgICAgICAgICAgICAgICB0b19hYnNfcGFydHMgPSBbdG9fZHJ2LCB0b19yb290XSArIHRvX3BhcnRzWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0b19hYnNfcGFydHMgPSBbdG9fZHJ2XSArIHRvX3BhcnRzWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG9fYWJzX3BhcnRzID0gdG9fcGFydHMKKyAgICAgICAgbiA9IGxlbih0b19hYnNfcGFydHMpCisgICAgICAgIGlmIG4gPT0gMCBhbmQgKGRydiBvciByb290KSBvciBhYnNfcGFydHNbOm5dICE9IHRvX2Fic19wYXJ0czoKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHNlbGYuX2Zvcm1hdF9wYXJzZWRfcGFydHModG9fZHJ2LCB0b19yb290LCB0b19wYXJ0cykKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInshcn0gZG9lcyBub3Qgc3RhcnQgd2l0aCB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHN0cihzZWxmKSwgc3RyKGZvcm1hdHRlZCkpKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoJycsICcnLCBhYnNfcGFydHNbbjpdKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcnRzKHNlbGYpOgorICAgICAgICAiIiJBbiBvYmplY3QgcHJvdmlkaW5nIHNlcXVlbmNlLWxpa2UgYWNjZXNzIHRvIHRoZQorICAgICAgICBjb21wb25lbnRzIGluIHRoZSBmaWxlc3lzdGVtIHBhdGguIiIiCisgICAgICAgICMgV2UgY2FjaGUgdGhlIHR1cGxlIHRvIGF2b2lkIGJ1aWxkaW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUgLnBhcnRzCisgICAgICAgICMgaXMgYWNjZXNzZWQuICBYWFggaXMgdGhpcyBuZWNlc3Nhcnk/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcGFydHMKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fcHBhcnRzID0gdHVwbGUoc2VsZi5fcGFydHMpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHBhcnRzCisKKyAgICBkZWYgam9pbnBhdGgoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJDb21iaW5lIHRoaXMgcGF0aCB3aXRoIG9uZSBvciBzZXZlcmFsIGFyZ3VtZW50cywgYW5kIHJldHVybiBhCisgICAgICAgIG5ldyBwYXRoIHJlcHJlc2VudGluZyBlaXRoZXIgYSBzdWJwYXRoIChpZiBhbGwgYXJndW1lbnRzIGFyZSByZWxhdGl2ZQorICAgICAgICBwYXRocykgb3IgYSB0b3RhbGx5IGRpZmZlcmVudCBwYXRoIChpZiBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcworICAgICAgICBhbmNob3JlZCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV9jaGlsZChhcmdzKQorCisgICAgZGVmIF9fdHJ1ZWRpdl9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9tYWtlX2NoaWxkKChrZXksKSkKKworICAgIGRlZiBfX3J0cnVlZGl2X18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFydHMoW2tleV0gKyBzZWxmLl9wYXJ0cykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnQoc2VsZik6CisgICAgICAgICIiIlRoZSBsb2dpY2FsIHBhcmVudCBvZiB0aGUgcGF0aC4iIiIKKyAgICAgICAgZHJ2ID0gc2VsZi5fZHJ2CisgICAgICAgIHJvb3QgPSBzZWxmLl9yb290CisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAxIGFuZCAoZHJ2IG9yIHJvb3QpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKGRydiwgcm9vdCwgcGFydHNbOi0xXSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnRzKHNlbGYpOgorICAgICAgICAiIiJBIHNlcXVlbmNlIG9mIHRoaXMgcGF0aCdzIGxvZ2ljYWwgcGFyZW50cy4iIiIKKyAgICAgICAgcmV0dXJuIF9QYXRoUGFyZW50cyhzZWxmKQorCisgICAgZGVmIGlzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAiIiJUcnVlIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlIChoYXMgYm90aCBhIHJvb3QgYW5kLCBpZiBhcHBsaWNhYmxlLAorICAgICAgICBhIGRyaXZlKS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9mbGF2b3VyLmhhc19kcnYgb3IgYm9vbChzZWxmLl9kcnYpCisKKyAgICBkZWYgaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGNvbnRhaW5zIG9uZSBvZiB0aGUgc3BlY2lhbCBuYW1lcyByZXNlcnZlZAorICAgICAgICBieSB0aGUgc3lzdGVtLCBpZiBhbnkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mbGF2b3VyLmlzX3Jlc2VydmVkKHNlbGYuX3BhcnRzKQorCisgICAgZGVmIG1hdGNoKHNlbGYsIHBhdGhfcGF0dGVybik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gVHJ1ZSBpZiB0aGlzIHBhdGggbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAgICAgICAgIiIiCisgICAgICAgIGNmID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZAorICAgICAgICBwYXRoX3BhdHRlcm4gPSBjZihwYXRoX3BhdHRlcm4pCisgICAgICAgIGRydiwgcm9vdCwgcGF0X3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0aF9wYXR0ZXJuLCkpCisgICAgICAgIGlmIG5vdCBwYXRfcGFydHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJlbXB0eSBwYXR0ZXJuIikKKyAgICAgICAgaWYgZHJ2IGFuZCBkcnYgIT0gY2Yoc2VsZi5fZHJ2KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiByb290IGFuZCByb290ICE9IGNmKHNlbGYuX3Jvb3QpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHBhcnRzID0gc2VsZi5fY3BhcnRzCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgaWYgbGVuKHBhdF9wYXJ0cykgIT0gbGVuKHBhcnRzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHBhdF9wYXJ0cyA9IHBhdF9wYXJ0c1sxOl0KKyAgICAgICAgZWxpZiBsZW4ocGF0X3BhcnRzKSA+IGxlbihwYXJ0cyk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIHBhcnQsIHBhdCBpbiB6aXAocmV2ZXJzZWQocGFydHMpLCByZXZlcnNlZChwYXRfcGFydHMpKToKKyAgICAgICAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2hjYXNlKHBhcnQsIHBhdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgUHVyZVBvc2l4UGF0aChQdXJlUGF0aCk6CisgICAgX2ZsYXZvdXIgPSBfcG9zaXhfZmxhdm91cgorICAgIF9fc2xvdHNfXyA9ICgpCisKKworY2xhc3MgUHVyZVdpbmRvd3NQYXRoKFB1cmVQYXRoKToKKyAgICBfZmxhdm91ciA9IF93aW5kb3dzX2ZsYXZvdXIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisKKyMgRmlsZXN5c3RlbS1hY2Nlc3NpbmcgY2xhc3NlcworCisKK2NsYXNzIFBhdGgoUHVyZVBhdGgpOgorICAgIF9fc2xvdHNfXyA9ICgKKyAgICAgICAgJ19hY2Nlc3NvcicsCisgICAgICAgICdfY2xvc2VkJywKKyAgICApCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGNscyBpcyBQYXRoOgorICAgICAgICAgICAgY2xzID0gV2luZG93c1BhdGggaWYgb3MubmFtZSA9PSAnbnQnIGVsc2UgUG9zaXhQYXRoCisgICAgICAgIHNlbGYgPSBjbHMuX2Zyb21fcGFydHMoYXJncywgaW5pdD1GYWxzZSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZsYXZvdXIuaXNfc3VwcG9ydGVkOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiY2Fubm90IGluc3RhbnRpYXRlICVyIG9uIHlvdXIgc3lzdGVtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjbHMuX19uYW1lX18sKSkKKyAgICAgICAgc2VsZi5faW5pdCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX2luaXQoc2VsZiwKKyAgICAgICAgICAgICAgIyBQcml2YXRlIG5vbi1jb25zdHJ1Y3RvciBhcmd1bWVudHMKKyAgICAgICAgICAgICAgdGVtcGxhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgKToKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKKyAgICAgICAgaWYgdGVtcGxhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hY2Nlc3NvciA9IHRlbXBsYXRlLl9hY2Nlc3NvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IgPSBfbm9ybWFsX2FjY2Vzc29yCisKKyAgICBkZWYgX21ha2VfY2hpbGRfcmVscGF0aChzZWxmLCBwYXJ0KToKKyAgICAgICAgIyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB1c2VkIGZvciBkaXIgd2Fsa2luZy4gIGBwYXJ0YCBtdXN0IGJlCisgICAgICAgICMgYSBzaW5nbGUgcGFydCByZWxhdGl2ZSB0byB0aGlzIHBhdGguCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMgKyBbcGFydF0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwgcGFydHMpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQorCisgICAgZGVmIF9yYWlzZV9jbG9zZWQoc2VsZik6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIHBhdGgiKQorCisgICAgZGVmIF9vcGVuZXIoc2VsZiwgbmFtZSwgZmxhZ3MsIG1vZGU9MG82NjYpOgorICAgICAgICAjIEEgc3R1YiBmb3IgdGhlIG9wZW5lciBhcmd1bWVudCB0byBidWlsdC1pbiBvcGVuKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLm9wZW4oc2VsZiwgZmxhZ3MsIG1vZGUpCisKKyAgICAjIFB1YmxpYyBBUEkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjd2QoY2xzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IHBhdGggcG9pbnRpbmcgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgKGFzIHJldHVybmVkIGJ5IG9zLmdldGN3ZCgpKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMob3MuZ2V0Y3dkKCkpCisKKyAgICBkZWYgaXRlcmRpcihzZWxmKToKKyAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4gIERvZXMgbm90IHlpZWxkIGFueQorICAgICAgICByZXN1bHQgZm9yIHRoZSBzcGVjaWFsIHBhdGhzICcuJyBhbmQgJy4uJy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuX2FjY2Vzc29yLmxpc3RkaXIoc2VsZik6CisgICAgICAgICAgICBpZiBuYW1lIGluIHsnLicsICcuLid9OgorICAgICAgICAgICAgICAgICMgWWllbGRpbmcgYSBwYXRoIG9iamVjdCBmb3IgdGhlc2UgbWFrZXMgbGl0dGxlIHNlbnNlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisKKyAgICBkZWYgZ2xvYihzZWxmLCBwYXR0ZXJuKToKKyAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIHRoaXMgc3VidHJlZSBhbmQgeWllbGQgYWxsIGV4aXN0aW5nIGZpbGVzIChvZiBhbnkKKyAgICAgICAga2luZCwgaW5jbHVkaW5nIGRpcmVjdG9yaWVzKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdHRlcm4gPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkKHBhdHRlcm4pCisgICAgICAgIGRydiwgcm9vdCwgcGF0dGVybl9wYXJ0cyA9IHNlbGYuX2ZsYXZvdXIucGFyc2VfcGFydHMoKHBhdHRlcm4sKSkKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJOb24tcmVsYXRpdmUgcGF0dGVybnMgYXJlIHVuc3VwcG9ydGVkIikKKyAgICAgICAgc2VsZWN0b3IgPSBfbWFrZV9zZWxlY3Rvcih0dXBsZShwYXR0ZXJuX3BhcnRzKSkKKyAgICAgICAgZm9yIHAgaW4gc2VsZWN0b3Iuc2VsZWN0X2Zyb20oc2VsZik6CisgICAgICAgICAgICB5aWVsZCBwCisKKyAgICBkZWYgcmdsb2Ioc2VsZiwgcGF0dGVybik6CisgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHlpZWxkIGFsbCBleGlzdGluZyBmaWxlcyAob2YgYW55IGtpbmQsIGluY2x1ZGluZworICAgICAgICBkaXJlY3RvcmllcykgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4sIGFueXdoZXJlIGluIHRoaXMgc3VidHJlZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdHRlcm4gPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkKHBhdHRlcm4pCisgICAgICAgIGRydiwgcm9vdCwgcGF0dGVybl9wYXJ0cyA9IHNlbGYuX2ZsYXZvdXIucGFyc2VfcGFydHMoKHBhdHRlcm4sKSkKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJOb24tcmVsYXRpdmUgcGF0dGVybnMgYXJlIHVuc3VwcG9ydGVkIikKKyAgICAgICAgc2VsZWN0b3IgPSBfbWFrZV9zZWxlY3RvcigoIioqIiwpICsgdHVwbGUocGF0dGVybl9wYXJ0cykpCisgICAgICAgIGZvciBwIGluIHNlbGVjdG9yLnNlbGVjdF9mcm9tKHNlbGYpOgorICAgICAgICAgICAgeWllbGQgcAorCisgICAgZGVmIGFic29sdXRlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gYWJzb2x1dGUgdmVyc2lvbiBvZiB0aGlzIHBhdGguICBUaGlzIGZ1bmN0aW9uIHdvcmtzCisgICAgICAgIGV2ZW4gaWYgdGhlIHBhdGggZG9lc24ndCBwb2ludCB0byBhbnl0aGluZy4KKworICAgICAgICBObyBub3JtYWxpemF0aW9uIGlzIGRvbmUsIGkuZS4gYWxsICcuJyBhbmQgJy4uJyB3aWxsIGJlIGtlcHQgYWxvbmcuCisgICAgICAgIFVzZSByZXNvbHZlKCkgdG8gZ2V0IHRoZSBjYW5vbmljYWwgcGF0aCB0byBhIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICAjIFhYWCB1bnRlc3RlZCB5ZXQhCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIHNlbGYuaXNfYWJzb2x1dGUoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICMgRklYTUUgdGhpcyBtdXN0IGRlZmVyIHRvIHRoZSBzcGVjaWZpYyBmbGF2b3VyIChhbmQsIHVuZGVyIFdpbmRvd3MsCisgICAgICAgICMgdXNlIG50Ll9nZXRmdWxscGF0aG5hbWUoKSkKKyAgICAgICAgb2JqID0gc2VsZi5fZnJvbV9wYXJ0cyhbb3MuZ2V0Y3dkKCldICsgc2VsZi5fcGFydHMsIGluaXQ9RmFsc2UpCisgICAgICAgIG9iai5faW5pdCh0ZW1wbGF0ZT1zZWxmKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2UgdGhlIHBhdGggYWJzb2x1dGUsIHJlc29sdmluZyBhbGwgc3ltbGlua3Mgb24gdGhlIHdheSBhbmQgYWxzbworICAgICAgICBub3JtYWxpemluZyBpdCAoZm9yIGV4YW1wbGUgdHVybmluZyBzbGFzaGVzIGludG8gYmFja3NsYXNoZXMgdW5kZXIKKyAgICAgICAgV2luZG93cykuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzID0gc2VsZi5fZmxhdm91ci5yZXNvbHZlKHNlbGYpCisgICAgICAgIGlmIHMgaXMgTm9uZToKKyAgICAgICAgICAgICMgTm8gc3ltbGluayByZXNvbHV0aW9uID0+IGZvciBjb25zaXN0ZW5jeSwgcmFpc2UgYW4gZXJyb3IgaWYKKyAgICAgICAgICAgICMgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBmb3JiaWRkZW4KKyAgICAgICAgICAgIHNlbGYuc3RhdCgpCisgICAgICAgICAgICBzID0gc3RyKHNlbGYuYWJzb2x1dGUoKSkKKyAgICAgICAgIyBOb3cgd2UgaGF2ZSBubyBzeW1saW5rcyBpbiB0aGUgcGF0aCwgaXQncyBzYWZlIHRvIG5vcm1hbGl6ZSBpdC4KKyAgICAgICAgbm9ybWVkID0gc2VsZi5fZmxhdm91ci5wYXRobW9kLm5vcm1wYXRoKHMpCisgICAgICAgIG9iaiA9IHNlbGYuX2Zyb21fcGFydHMoKG5vcm1lZCwpLCBpbml0PUZhbHNlKQorICAgICAgICBvYmouX2luaXQodGVtcGxhdGU9c2VsZikKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHN0YXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgc3RhdCgpIHN5c3RlbSBjYWxsIG9uIHRoaXMgcGF0aCwgbGlrZQorICAgICAgICBvcy5zdGF0KCkgZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5zdGF0KHNlbGYpCisKKyAgICBkZWYgb3duZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxvZ2luIG5hbWUgb2YgdGhlIGZpbGUgb3duZXIuCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgcHdkCisgICAgICAgIHJldHVybiBwd2QuZ2V0cHd1aWQoc2VsZi5zdGF0KCkuc3RfdWlkKS5wd19uYW1lCisKKyAgICBkZWYgZ3JvdXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGdyb3VwIG5hbWUgb2YgdGhlIGZpbGUgZ2lkLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IGdycAorICAgICAgICByZXR1cm4gZ3JwLmdldGdyZ2lkKHNlbGYuc3RhdCgpLnN0X2dpZCkuZ3JfbmFtZQorCisgICAgZGVmIF9yYXdfb3BlbihzZWxmLCBmbGFncywgbW9kZT0wbzc3Nyk6CisgICAgICAgICIiIgorICAgICAgICBPcGVuIHRoZSBmaWxlIHBvaW50ZWQgYnkgdGhpcyBwYXRoIGFuZCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IsCisgICAgICAgIGFzIG9zLm9wZW4oKSBkb2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLm9wZW4oc2VsZiwgZmxhZ3MsIG1vZGUpCisKKyAgICBkZWYgb3BlbihzZWxmLCBtb2RlPSdyJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIGJ5IHRoaXMgcGF0aCBhbmQgcmV0dXJuIGEgZmlsZSBvYmplY3QsIGFzCisgICAgICAgIHRoZSBidWlsdC1pbiBvcGVuKCkgZnVuY3Rpb24gZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBpby5vcGVuKHN0cihzZWxmKSwgbW9kZSwgYnVmZmVyaW5nLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBvcGVuZXI9c2VsZi5fb3BlbmVyKQorCisgICAgZGVmIHRvdWNoKHNlbGYsIG1vZGU9MG82NjYsIGV4aXN0X29rPVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoaXMgZmlsZSB3aXRoIHRoZSBnaXZlbiBhY2Nlc3MgbW9kZSwgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIGV4aXN0X29rOgorICAgICAgICAgICAgIyBGaXJzdCB0cnkgdG8gYnVtcCBtb2RpZmljYXRpb24gdGltZQorICAgICAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBub3RlOiBHTlUgdG91Y2ggdXNlcyB0aGUgVVRJTUVfTk9XIG9wdGlvbiBvZgorICAgICAgICAgICAgIyB0aGUgdXRpbWVuc2F0KCkgLyBmdXRpbWVucygpIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci51dGltZShzZWxmLCBOb25lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBBdm9pZCBleGNlcHRpb24gY2hhaW5pbmcKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBmbGFncyA9IG9zLk9fQ1JFQVQgfCBvcy5PX1dST05MWQorICAgICAgICBpZiBub3QgZXhpc3Rfb2s6CisgICAgICAgICAgICBmbGFncyB8PSBvcy5PX0VYQ0wKKyAgICAgICAgZmQgPSBzZWxmLl9yYXdfb3BlbihmbGFncywgbW9kZSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBkZWYgbWtkaXIoc2VsZiwgbW9kZT0wbzc3NywgcGFyZW50cz1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBwYXJlbnRzOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5ta2Rpcihtb2RlLCBUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLm1rZGlyKHNlbGYsIG1vZGUpCisKKyAgICBkZWYgY2htb2Qoc2VsZiwgbW9kZSk6CisgICAgICAgICIiIgorICAgICAgICBDaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBwYXRoLCBsaWtlIG9zLmNobW9kKCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5jaG1vZChzZWxmLCBtb2RlKQorCisgICAgZGVmIGxjaG1vZChzZWxmLCBtb2RlKToKKyAgICAgICAgIiIiCisgICAgICAgIExpa2UgY2htb2QoKSwgZXhjZXB0IGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWxpbmssIHRoZSBzeW1saW5rJ3MKKyAgICAgICAgcGVybWlzc2lvbnMgYXJlIGNoYW5nZWQsIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLmxjaG1vZChzZWxmLCBtb2RlKQorCisgICAgZGVmIHVubGluayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB0aGlzIGZpbGUgb3IgbGluay4KKyAgICAgICAgSWYgdGhlIHBhdGggaXMgYSBkaXJlY3RvcnksIHVzZSBybWRpcigpIGluc3RlYWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci51bmxpbmsoc2VsZikKKworICAgIGRlZiBybWRpcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB0aGlzIGRpcmVjdG9yeS4gIFRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnJtZGlyKHNlbGYpCisKKyAgICBkZWYgbHN0YXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMaWtlIHN0YXQoKSwgZXhjZXB0IGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWxpbmssIHRoZSBzeW1saW5rJ3MKKyAgICAgICAgc3RhdHVzIGluZm9ybWF0aW9uIGlzIHJldHVybmVkLCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3IubHN0YXQoc2VsZikKKworICAgIGRlZiByZW5hbWUoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbmFtZSB0aGlzIHBhdGggdG8gdGhlIGdpdmVuIHBhdGguCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5yZW5hbWUoc2VsZiwgdGFyZ2V0KQorCisgICAgZGVmIHJlcGxhY2Uoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbmFtZSB0aGlzIHBhdGggdG8gdGhlIGdpdmVuIHBhdGgsIGNsb2JiZXJpbmcgdGhlIGV4aXN0aW5nCisgICAgICAgIGRlc3RpbmF0aW9uIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnJlcGxhY2Uoc2VsZiwgdGFyZ2V0KQorCisgICAgZGVmIHN5bWxpbmtfdG8oc2VsZiwgdGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2UgdGhpcyBwYXRoIGEgc3ltbGluayBwb2ludGluZyB0byB0aGUgZ2l2ZW4gcGF0aC4KKyAgICAgICAgTm90ZSB0aGUgb3JkZXIgb2YgYXJndW1lbnRzIChzZWxmLCB0YXJnZXQpIGlzIHRoZSByZXZlcnNlIG9mIG9zLnN5bWxpbmsncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnN5bWxpbmsodGFyZ2V0LCBzZWxmLCB0YXJnZXRfaXNfZGlyZWN0b3J5KQorCisgICAgIyBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSBzdGF0IHJlc3VsdHMKKworICAgIGRlZiBleGlzdHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBleGlzdHMuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnN0YXQoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzX2RpcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNESVIoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2ZpbGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSAoYWxzbyBUcnVlIGZvciBzeW1saW5rcyBwb2ludGluZworICAgICAgICB0byByZWd1bGFyIGZpbGVzKS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTUkVHKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zeW1saW5rKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNMTksoc2VsZi5sc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2Jsb2NrX2RldmljZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgYmxvY2sgZGV2aWNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNCTEsoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2NoYXJfZGV2aWNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBjaGFyYWN0ZXIgZGV2aWNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNDSFIoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2ZpZm8oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIEZJRk8uCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU0ZJRk8oc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX3NvY2tldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNTT0NLKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBQb3NpeFBhdGgoUGF0aCwgUHVyZVBvc2l4UGF0aCk6CisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgV2luZG93c1BhdGgoUGF0aCwgUHVyZVdpbmRvd3NQYXRoKToKKyAgICBfX3Nsb3RzX18gPSAoKQpkaWZmIC0tZ2l0IGEvTGliL3BkYi5weSBiL0xpYi9wZGIucHkKaW5kZXggODBjYmE5ZC4uZGQ3Y2ViOCAxMDA3NTUKLS0tIGEvTGliL3BkYi5weQorKysgYi9MaWIvcGRiLnB5CkBAIC05MiwyMSArOTIsMTQgQEAKICAgICBjcmUgPSByZS5jb21waWxlKHInZGVmXHMrJXNccypbKF0nICUgcmUuZXNjYXBlKGZ1bmNuYW1lKSkKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAjIGNvbnN1bWVyIG9mIHRoaXMgaW5mbyBleHBlY3RzIHRoZSBmaXJzdCBsaW5lIHRvIGJlIDEKLSAgICBsaW5lbm8gPSAxCi0gICAgYW5zd2VyID0gTm9uZQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgIGlmIGxpbmUgPT0gJyc6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBjcmUubWF0Y2gobGluZSk6Ci0gICAgICAgICAgICBhbnN3ZXIgPSBmdW5jbmFtZSwgZmlsZW5hbWUsIGxpbmVubwotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgbGluZW5vICs9IDEKLSAgICBmcC5jbG9zZSgpCi0gICAgcmV0dXJuIGFuc3dlcgorICAgIHdpdGggZnA6CisgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGZwLCBzdGFydD0xKToKKyAgICAgICAgICAgIGlmIGNyZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY25hbWUsIGZpbGVuYW1lLCBsaW5lbm8KKyAgICByZXR1cm4gTm9uZQogCiBkZWYgZ2V0c291cmNlbGluZXMob2JqKToKICAgICBsaW5lcywgbGluZW5vID0gaW5zcGVjdC5maW5kc291cmNlKG9iaikKQEAgLTE3MCwxMiArMTYzLDEyIEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihlbnZIb21lLCAiLnBkYnJjIikpIGFzIHJjRmlsZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmV4dGVuZChyY0ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBvcGVuKCIucGRicmMiKSBhcyByY0ZpbGU6CiAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmV4dGVuZChyY0ZpbGUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBzZWxmLmNvbW1hbmRzID0ge30gIyBhc3NvY2lhdGVzIGEgY29tbWFuZCBsaXN0IHRvIGJyZWFrcG9pbnQgbnVtYmVycwpAQCAtMzA0LDggKzI5NywxNiBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190cmFjZWJhY2sgPSBleGNfaW5mbwogICAgICAgICBmcmFtZS5mX2xvY2Fsc1snX19leGNlcHRpb25fXyddID0gZXhjX3R5cGUsIGV4Y192YWx1ZQotICAgICAgICBzZWxmLm1lc3NhZ2UodHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGNfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3ZhbHVlKVstMV0uc3RyaXAoKSkKKworICAgICAgICAjIEFuICdJbnRlcm5hbCBTdG9wSXRlcmF0aW9uJyBleGNlcHRpb24gaXMgYW4gZXhjZXB0aW9uIGRlYnVnIGV2ZW50CisgICAgICAgICMgaXNzdWVkIGJ5IHRoZSBpbnRlcnByZXRlciB3aGVuIGhhbmRsaW5nIGEgc3ViZ2VuZXJhdG9yIHJ1biB3aXRoCisgICAgICAgICMgJ3lpZWxkIGZyb20nIG9yIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLiBObyBleGNlcHRpb24gaGFzCisgICAgICAgICMgYWN0dWFsbHkgb2NjdXJlZCBpbiB0aGlzIGNhc2UuIFRoZSBkZWJ1Z2dlciB1c2VzIHRoaXMgZGVidWcgZXZlbnQgdG8KKyAgICAgICAgIyBzdG9wIHdoZW4gdGhlIGRlYnVnZ2VlIGlzIHJldHVybmluZyBmcm9tIHN1Y2ggZ2VuZXJhdG9ycy4KKyAgICAgICAgcHJlZml4ID0gJ0ludGVybmFsICcgaWYgKG5vdCBleGNfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXhjX3R5cGUgaXMgU3RvcEl0ZXJhdGlvbikgZWxzZSAnJworICAgICAgICBzZWxmLm1lc3NhZ2UoJyVzJXMnICUgKHByZWZpeCwKKyAgICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjX3R5cGUsIGV4Y192YWx1ZSlbLTFdLnN0cmlwKCkpKQogICAgICAgICBzZWxmLmludGVyYWN0aW9uKGZyYW1lLCBleGNfdHJhY2ViYWNrKQogCiAgICAgIyBHZW5lcmFsIGludGVyYWN0aW9uIGZ1bmN0aW9uCkBAIC0xMTYzLDE1ICsxMTY0LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gX3JzdHIoJyoqIHJhaXNlZCAlcyAqKicgJSBlcnIpCiAKICAgICBkZWYgZG9fcChzZWxmLCBhcmcpOgotICAgICAgICAiIiJwKHJpbnQpIGV4cHJlc3Npb24KKyAgICAgICAgIiIicCBleHByZXNzaW9uCiAgICAgICAgIFByaW50IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4KICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubWVzc2FnZShyZXByKHNlbGYuX2dldHZhbChhcmcpKSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwotICAgICMgbWFrZSAicHJpbnQiIGFuIGFsaWFzIG9mICJwIiBzaW5jZSBwcmludCBpc24ndCBhIFB5dGhvbiBzdGF0ZW1lbnQgYW55bW9yZQotICAgIGRvX3ByaW50ID0gZG9fcAogCiAgICAgZGVmIGRvX3BwKHNlbGYsIGFyZyk6CiAgICAgICAgICIiInBwIGV4cHJlc3Npb24KQEAgLTEyNDUsNyArMTI0NCw3IEBACiAgICAgICAgIGJyZWFrbGlzdCA9IHNlbGYuZ2V0X2ZpbGVfYnJlYWtzKGZpbGVuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMoc2VsZi5jdXJmcmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9wcmludF9saW5lcyhsaW5lcywgbGluZW5vLCBicmVha2xpc3QsIHNlbGYuY3VyZnJhbWUpCkBAIC0xMjYxLDcgKzEyNjAsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpbmVzLCBsaW5lbm8gPSBnZXRzb3VyY2VsaW5lcyhvYmopCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVHlwZUVycm9yKSBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVHlwZUVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9wcmludF9saW5lcyhsaW5lcywgbGluZW5vKQpAQCAtMTM5Miw3ICsxMzkxLDcgQEAKICAgICAgICAgcGxhY2VkIGluIHRoZSAucGRicmMgZmlsZSk6CiAKICAgICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKQotICAgICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50ICIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdCisgICAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pCiAgICAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGYKICAgICAgICAgYWxpYXMgcHMgcGkgc2VsZgogICAgICAgICAiIiIKQEAgLTE1NTAsNyArMTU0OSw3IEBACiAgICAgICAgICdoZWxwJywgJ3doZXJlJywgJ2Rvd24nLCAndXAnLCAnYnJlYWsnLCAndGJyZWFrJywgJ2NsZWFyJywgJ2Rpc2FibGUnLAogICAgICAgICAnZW5hYmxlJywgJ2lnbm9yZScsICdjb25kaXRpb24nLCAnY29tbWFuZHMnLCAnc3RlcCcsICduZXh0JywgJ3VudGlsJywKICAgICAgICAgJ2p1bXAnLCAncmV0dXJuJywgJ3JldHZhbCcsICdydW4nLCAnY29udGludWUnLCAnbGlzdCcsICdsb25nbGlzdCcsCi0gICAgICAgICdhcmdzJywgJ3ByaW50JywgJ3BwJywgJ3doYXRpcycsICdzb3VyY2UnLCAnZGlzcGxheScsICd1bmRpc3BsYXknLAorICAgICAgICAnYXJncycsICdwJywgJ3BwJywgJ3doYXRpcycsICdzb3VyY2UnLCAnZGlzcGxheScsICd1bmRpc3BsYXknLAogICAgICAgICAnaW50ZXJhY3QnLCAnYWxpYXMnLCAndW5hbGlhcycsICdkZWJ1ZycsICdxdWl0JywKICAgICBdCiAKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGUucHkgYi9MaWIvcGlja2xlLnB5CmluZGV4IGQ2MmYwMTQuLmNmOGUyYzUgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGUucHkKKysrIGIvTGliL3BpY2tsZS5weQpAQCAtMjMsMTIgKzIzLDEzIEBACiAKICIiIgogCi1mcm9tIHR5cGVzIGltcG9ydCBGdW5jdGlvblR5cGUsIEJ1aWx0aW5GdW5jdGlvblR5cGUKK2Zyb20gdHlwZXMgaW1wb3J0IEZ1bmN0aW9uVHlwZSwgTW9kdWxlVHlwZQogZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQogZnJvbSBjb3B5cmVnIGltcG9ydCBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LCBfaW52ZXJ0ZWRfcmVnaXN0cnksIF9leHRlbnNpb25fY2FjaGUKLWltcG9ydCBtYXJzaGFsCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3RydWN0Citmcm9tIHN5cyBpbXBvcnQgbWF4c2l6ZQorZnJvbSBzdHJ1Y3QgaW1wb3J0IHBhY2ssIHVucGFjawogaW1wb3J0IHJlCiBpbXBvcnQgaW8KIGltcG9ydCBjb2RlY3MKQEAgLTQxLDI4ICs0MiwyNCBAQAogYnl0ZXNfdHlwZXMgPSAoYnl0ZXMsIGJ5dGVhcnJheSkKIAogIyBUaGVzZSBhcmUgcHVyZWx5IGluZm9ybWF0aW9uYWw7IG5vIGNvZGUgdXNlcyB0aGVzZS4KLWZvcm1hdF92ZXJzaW9uID0gIjMuMCIgICAgICAgICAgICAgICAgICAjIEZpbGUgZm9ybWF0IHZlcnNpb24gd2Ugd3JpdGUKK2Zvcm1hdF92ZXJzaW9uID0gIjQuMCIgICAgICAgICAgICAgICAgICAjIEZpbGUgZm9ybWF0IHZlcnNpb24gd2Ugd3JpdGUKIGNvbXBhdGlibGVfZm9ybWF0cyA9IFsiMS4wIiwgICAgICAgICAgICAjIE9yaWdpbmFsIHByb3RvY29sIDAKICAgICAgICAgICAgICAgICAgICAgICAiMS4xIiwgICAgICAgICAgICAjIFByb3RvY29sIDAgd2l0aCBJTlNUIGFkZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMiIsICAgICAgICAgICAgIyBPcmlnaW5hbCBwcm90b2NvbCAxCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMyIsICAgICAgICAgICAgIyBQcm90b2NvbCAxIHdpdGggQklORkxPQVQgYWRkZWQKICAgICAgICAgICAgICAgICAgICAgICAiMi4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDIKICAgICAgICAgICAgICAgICAgICAgICAiMy4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDMKKyAgICAgICAgICAgICAgICAgICAgICAiNC4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDQKICAgICAgICAgICAgICAgICAgICAgICBdICAgICAgICAgICAgICAgICAjIE9sZCBmb3JtYXQgdmVyc2lvbnMgd2UgY2FuIHJlYWQKIAogIyBUaGlzIGlzIHRoZSBoaWdoZXN0IHByb3RvY29sIG51bWJlciB3ZSBrbm93IGhvdyB0byByZWFkLgotSElHSEVTVF9QUk9UT0NPTCA9IDMKK0hJR0hFU1RfUFJPVE9DT0wgPSA0CiAKICMgVGhlIHByb3RvY29sIHdlIHdyaXRlIGJ5IGRlZmF1bHQuICBNYXkgYmUgbGVzcyB0aGFuIEhJR0hFU1RfUFJPVE9DT0wuCiAjIFdlIGludGVudGlvbmFsbHkgd3JpdGUgYSBwcm90b2NvbCB0aGF0IFB5dGhvbiAyLnggY2Fubm90IHJlYWQ7CiAjIHRoZXJlIGFyZSB0b28gbWFueSBpc3N1ZXMgd2l0aCB0aGF0LgogREVGQVVMVF9QUk9UT0NPTCA9IDMKIAotIyBXaHkgdXNlIHN0cnVjdC5wYWNrKCkgZm9yIHBpY2tsaW5nIGJ1dCBtYXJzaGFsLmxvYWRzKCkgZm9yCi0jIHVucGlja2xpbmc/ICBzdHJ1Y3QucGFjaygpIGlzIDQwJSBmYXN0ZXIgdGhhbiBtYXJzaGFsLmR1bXBzKCksIGJ1dAotIyBtYXJzaGFsLmxvYWRzKCkgaXMgdHdpY2UgYXMgZmFzdCBhcyBzdHJ1Y3QudW5wYWNrKCkhCi1tbG9hZHMgPSBtYXJzaGFsLmxvYWRzCi0KIGNsYXNzIFBpY2tsZUVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiQSBjb21tb24gYmFzZSBjbGFzcyBmb3IgdGhlIG90aGVyIHBpY2tsaW5nIGV4Y2VwdGlvbnMuIiIiCiAgICAgcGFzcwpAQCAtMTY4LDcgKzE2NSwxODEgQEAKIEJJTkJZVEVTICAgICAgID0gYidCJyAgICMgcHVzaCBieXRlczsgY291bnRlZCBiaW5hcnkgc3RyaW5nIGFyZ3VtZW50CiBTSE9SVF9CSU5CWVRFUyA9IGInQycgICAjICAiICAgICAiICAgOyAgICAiICAgICAgIiAgICAgICAiICAgICAgIiA8IDI1NiBieXRlcwogCi1fX2FsbF9fLmV4dGVuZChbeCBmb3IgeCBpbiBkaXIoKSBpZiByZS5tYXRjaCgiW0EtWl1bQS1aMC05X10rJCIseCldKQorIyBQcm90b2NvbCA0CitTSE9SVF9CSU5VTklDT0RFID0gYidceDhjJyAgIyBwdXNoIHNob3J0IHN0cmluZzsgVVRGLTggbGVuZ3RoIDwgMjU2IGJ5dGVzCitCSU5VTklDT0RFOCAgICAgID0gYidceDhkJyAgIyBwdXNoIHZlcnkgbG9uZyBzdHJpbmcKK0JJTkJZVEVTOCAgICAgICAgPSBiJ1x4OGUnICAjIHB1c2ggdmVyeSBsb25nIGJ5dGVzIHN0cmluZworRU1QVFlfU0VUICAgICAgICA9IGInXHg4ZicgICMgcHVzaCBlbXB0eSBzZXQgb24gdGhlIHN0YWNrCitBRERJVEVNUyAgICAgICAgID0gYidceDkwJyAgIyBtb2RpZnkgc2V0IGJ5IGFkZGluZyB0b3Btb3N0IHN0YWNrIGl0ZW1zCitGUk9aRU5TRVQgICAgICAgID0gYidceDkxJyAgIyBidWlsZCBmcm96ZW5zZXQgZnJvbSB0b3Btb3N0IHN0YWNrIGl0ZW1zCitORVdPQkpfRVggICAgICAgID0gYidceDkyJyAgIyBsaWtlIE5FV09CSiBidXQgd29yayB3aXRoIGtleXdvcmQgb25seSBhcmd1bWVudHMKK1NUQUNLX0dMT0JBTCAgICAgPSBiJ1x4OTMnICAjIHNhbWUgYXMgR0xPQkFMIGJ1dCB1c2luZyBuYW1lcyBvbiB0aGUgc3RhY2tzCitNRU1PSVpFICAgICAgICAgID0gYidceDk0JyAgIyBzdG9yZSB0b3Agb2YgdGhlIHN0YWNrIGluIG1lbW8KK0ZSQU1FICAgICAgICAgICAgPSBiJ1x4OTUnICAjIGluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUKKworX19hbGxfXy5leHRlbmQoW3ggZm9yIHggaW4gZGlyKCkgaWYgcmUubWF0Y2goIltBLVpdW0EtWjAtOV9dKyQiLCB4KV0pCisKKworY2xhc3MgX0ZyYW1lcjoKKworICAgIF9GUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfd3JpdGUpOgorICAgICAgICBzZWxmLmZpbGVfd3JpdGUgPSBmaWxlX3dyaXRlCisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKworICAgIGRlZiBzdGFydF9mcmFtaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBpby5CeXRlc0lPKCkKKworICAgIGRlZiBlbmRfZnJhbWluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lIGFuZCBzZWxmLmN1cnJlbnRfZnJhbWUudGVsbCgpID4gMDoKKyAgICAgICAgICAgIHNlbGYuY29tbWl0X2ZyYW1lKGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisKKyAgICBkZWYgY29tbWl0X2ZyYW1lKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgZiA9IHNlbGYuY3VycmVudF9mcmFtZQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgPj0gc2VsZi5fRlJBTUVfU0laRV9UQVJHRVQgb3IgZm9yY2U6CisgICAgICAgICAgICAgICAgd2l0aCBmLmdldGJ1ZmZlcigpIGFzIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIG4gPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSBzZWxmLmZpbGVfd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRlJBTUUpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKHBhY2soIjxRIiwgbikpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgZi50cnVuY2F0ZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRfZnJhbWUud3JpdGUoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfd3JpdGUoZGF0YSkKKworCitjbGFzcyBfVW5mcmFtZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9yZWFkLCBmaWxlX3JlYWRsaW5lLCBmaWxlX3RlbGw9Tm9uZSk6CisgICAgICAgIHNlbGYuZmlsZV9yZWFkID0gZmlsZV9yZWFkCisgICAgICAgIHNlbGYuZmlsZV9yZWFkbGluZSA9IGZpbGVfcmVhZGxpbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZChuKQorICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG4gIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkKG4pCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIGVuZCBvZiBmcmFtZSIpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkKG4pCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0YVstMV0gIT0gYidcbic6CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgZW5kIG9mIGZyYW1lIikKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWRsaW5lKCkKKworICAgIGRlZiBsb2FkX2ZyYW1lKHNlbGYsIGZyYW1lX3NpemUpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWUgYW5kIHNlbGYuY3VycmVudF9mcmFtZS5yZWFkKCkgIT0gYicnOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICJiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUgYmVmb3JlIGVuZCBvZiBjdXJyZW50IGZyYW1lIikKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gaW8uQnl0ZXNJTyhzZWxmLmZpbGVfcmVhZChmcmFtZV9zaXplKSkKKworCisjIFRvb2xzIHVzZWQgZm9yIHBpY2tsaW5nLgorCitkZWYgX2dldGF0dHJpYnV0ZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPUZhbHNlKToKKyAgICBkb3R0ZWRfcGF0aCA9IG5hbWUuc3BsaXQoIi4iKQorICAgIGlmIG5vdCBhbGxvd19xdWFsbmFtZSBhbmQgbGVuKGRvdHRlZF9wYXRoKSA+IDE6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgcXVhbGlmaWVkIGF0dHJpYnV0ZSB7IXJ9IG9uIHshcn07ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIHByb3RvY29scyA+PSA0IHRvIGVuYWJsZSBzdXBwb3J0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIG9iaikpCisgICAgZm9yIHN1YnBhdGggaW4gZG90dGVkX3BhdGg6CisgICAgICAgIGlmIHN1YnBhdGggPT0gJzxsb2NhbHM+JzoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgbG9jYWwgYXR0cmlidXRlIHshcn0gb24geyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHN1YnBhdGgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgYXR0cmlidXRlIHshcn0gb24geyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICByZXR1cm4gb2JqCisKK2RlZiB3aGljaG1vZHVsZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPUZhbHNlKToKKyAgICAiIiJGaW5kIHRoZSBtb2R1bGUgYW4gb2JqZWN0IGJlbG9uZyB0by4iIiIKKyAgICBtb2R1bGVfbmFtZSA9IGdldGF0dHIob2JqLCAnX19tb2R1bGVfXycsIE5vbmUpCisgICAgaWYgbW9kdWxlX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZQorICAgIGZvciBtb2R1bGVfbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CisgICAgICAgIGlmIG1vZHVsZV9uYW1lID09ICdfX21haW5fXycgb3IgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBfZ2V0YXR0cmlidXRlKG1vZHVsZSwgbmFtZSwgYWxsb3dfcXVhbG5hbWUpIGlzIG9iajoKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiAnX19tYWluX18nCisKK2RlZiBlbmNvZGVfbG9uZyh4KToKKyAgICByIiIiRW5jb2RlIGEgbG9uZyB0byBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgorICAgIE5vdGUgdGhhdCAwIGlzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm5pbmcgYW4gZW1wdHkgc3RyaW5nLCB0byBzYXZlIGEKKyAgICBieXRlIGluIHRoZSBMT05HMSBwaWNrbGluZyBjb250ZXh0LgorCisgICAgPj4+IGVuY29kZV9sb25nKDApCisgICAgYicnCisgICAgPj4+IGVuY29kZV9sb25nKDI1NSkKKyAgICBiJ1x4ZmZceDAwJworICAgID4+PiBlbmNvZGVfbG9uZygzMjc2NykKKyAgICBiJ1x4ZmZceDdmJworICAgID4+PiBlbmNvZGVfbG9uZygtMjU2KQorICAgIGInXHgwMFx4ZmYnCisgICAgPj4+IGVuY29kZV9sb25nKC0zMjc2OCkKKyAgICBiJ1x4MDBceDgwJworICAgID4+PiBlbmNvZGVfbG9uZygtMTI4KQorICAgIGInXHg4MCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMTI3KQorICAgIGInXHg3ZicKKyAgICA+Pj4KKyAgICAiIiIKKyAgICBpZiB4ID09IDA6CisgICAgICAgIHJldHVybiBiJycKKyAgICBuYnl0ZXMgPSAoeC5iaXRfbGVuZ3RoKCkgPj4gMykgKyAxCisgICAgcmVzdWx0ID0geC50b19ieXRlcyhuYnl0ZXMsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCisgICAgaWYgeCA8IDAgYW5kIG5ieXRlcyA+IDE6CisgICAgICAgIGlmIHJlc3VsdFstMV0gPT0gMHhmZiBhbmQgKHJlc3VsdFstMl0gJiAweDgwKSAhPSAwOgorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotMV0KKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBkZWNvZGVfbG9uZyhkYXRhKToKKyAgICByIiIiRGVjb2RlIGEgbG9uZyBmcm9tIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCisKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYicnKQorICAgIDAKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHgwMCIpCisgICAgMjU1CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4N2YiKQorICAgIDMyNzY3CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ZmYiKQorICAgIC0yNTYKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHg4MCIpCisgICAgLTMyNzY4CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHg4MCIpCisgICAgLTEyOAorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4N2YiKQorICAgIDEyNworICAgICIiIgorICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhkYXRhLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQorCiAKICMgUGlja2xpbmcgbWFjaGluZXJ5CiAKQEAgLTE3OCw5ICszNDksOSBAQAogICAgICAgICAiIiJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKICAgICAgICAgVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUKLSAgICAgICAgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdAotICAgICAgICBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IKLSAgICAgICAgUHl0aG9uIDMuMC4KKyAgICAgICAgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUKKyAgICAgICAgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IKKyAgICAgICAgUHl0aG9uIDMuCiAKICAgICAgICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdAogICAgICAgICBwcm90b2NvbCB2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZQpAQCAtMTkzLDggKzM2NCw4IEBACiAgICAgICAgIG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCiAgICAgICAgIElmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgICAgICAgbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbgotICAgICAgICAyLngsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICAgICAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsCisgICAgICAgIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcHJvdG9jb2wgaXMgTm9uZToKICAgICAgICAgICAgIHByb3RvY29sID0gREVGQVVMVF9QUk9UT0NPTApAQCAtMjAzLDkgKzM3NCwxMSBAQAogICAgICAgICBlbGlmIG5vdCAwIDw9IHByb3RvY29sIDw9IEhJR0hFU1RfUFJPVE9DT0w6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIgJSBISUdIRVNUX1BST1RPQ09MKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlID0gZmlsZS53cml0ZQorICAgICAgICAgICAgc2VsZi5fZmlsZV93cml0ZSA9IGZpbGUud3JpdGUKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWxlIG11c3QgaGF2ZSBhICd3cml0ZScgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mcmFtZXIgPSBfRnJhbWVyKHNlbGYuX2ZpbGVfd3JpdGUpCisgICAgICAgIHNlbGYud3JpdGUgPSBzZWxmLmZyYW1lci53cml0ZQogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLnByb3RvID0gaW50KHByb3RvY29sKQogICAgICAgICBzZWxmLmJpbiA9IHByb3RvY29sID49IDEKQEAgLTIyNywxMyArNDAwLDE2IEBACiAgICAgICAgICIiIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4iIiIKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIFBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhpcyBpcwogICAgICAgICAjIG9ubHkgbmVlZGVkIHRvIG1pbWljIHRoZSBiZWhhdmlvciBvZiBfcGlja2xlLlBpY2tsZXIuZHVtcCgpLgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAid3JpdGUiKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9maWxlX3dyaXRlIik6CiAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJQaWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMuX19pbml0X18oKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sKSkKICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgotICAgICAgICAgICAgc2VsZi53cml0ZShQUk9UTyArIGJ5dGVzKFtzZWxmLnByb3RvXSkpCisgICAgICAgICAgICBzZWxmLndyaXRlKFBST1RPICsgcGFjaygiPEIiLCBzZWxmLnByb3RvKSkKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgc2VsZi5mcmFtZXIuc3RhcnRfZnJhbWluZygpCiAgICAgICAgIHNlbGYuc2F2ZShvYmopCiAgICAgICAgIHNlbGYud3JpdGUoU1RPUCkKKyAgICAgICAgc2VsZi5mcmFtZXIuZW5kX2ZyYW1pbmcoKQogCiAgICAgZGVmIG1lbW9pemUoc2VsZiwgb2JqKToKICAgICAgICAgIiIiU3RvcmUgYW4gb2JqZWN0IGluIHRoZSBtZW1vLiIiIgpAQCAtMjUzLDMxICs0MjksMzUgQEAKICAgICAgICAgaWYgc2VsZi5mYXN0OgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGFzc2VydCBpZChvYmopIG5vdCBpbiBzZWxmLm1lbW8KLSAgICAgICAgbWVtb19sZW4gPSBsZW4oc2VsZi5tZW1vKQotICAgICAgICBzZWxmLndyaXRlKHNlbGYucHV0KG1lbW9fbGVuKSkKLSAgICAgICAgc2VsZi5tZW1vW2lkKG9iaildID0gbWVtb19sZW4sIG9iagorICAgICAgICBpZHggPSBsZW4oc2VsZi5tZW1vKQorICAgICAgICBzZWxmLndyaXRlKHNlbGYucHV0KGlkeCkpCisgICAgICAgIHNlbGYubWVtb1tpZChvYmopXSA9IGlkeCwgb2JqCiAKICAgICAjIFJldHVybiBhIFBVVCAoQklOUFVULCBMT05HX0JJTlBVVCkgb3Bjb2RlIHN0cmluZywgd2l0aCBhcmd1bWVudCBpLgotICAgIGRlZiBwdXQoc2VsZiwgaSwgcGFjaz1zdHJ1Y3QucGFjayk6Ci0gICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgaWYgaSA8IDI1NjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQklOUFVUICsgYnl0ZXMoW2ldKQorICAgIGRlZiBwdXQoc2VsZiwgaWR4KToKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgcmV0dXJuIE1FTU9JWkUKKyAgICAgICAgZWxpZiBzZWxmLmJpbjoKKyAgICAgICAgICAgIGlmIGlkeCA8IDI1NjoKKyAgICAgICAgICAgICAgICByZXR1cm4gQklOUFVUICsgcGFjaygiPEIiLCBpZHgpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBMT05HX0JJTlBVVCArIHBhY2soIjxJIiwgaSkKLQotICAgICAgICByZXR1cm4gUFVUICsgcmVwcihpKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJworICAgICAgICAgICAgICAgIHJldHVybiBMT05HX0JJTlBVVCArIHBhY2soIjxJIiwgaWR4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFBVVCArIHJlcHIoaWR4KS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJwogCiAgICAgIyBSZXR1cm4gYSBHRVQgKEJJTkdFVCwgTE9OR19CSU5HRVQpIG9wY29kZSBzdHJpbmcsIHdpdGggYXJndW1lbnQgaS4KLSAgICBkZWYgZ2V0KHNlbGYsIGksIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBnZXQoc2VsZiwgaSk6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgaWYgaSA8IDI1NjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQklOR0VUICsgYnl0ZXMoW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBCSU5HRVQgKyBwYWNrKCI8QiIsIGkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBMT05HX0JJTkdFVCArIHBhY2soIjxJIiwgaSkKIAogICAgICAgICByZXR1cm4gR0VUICsgcmVwcihpKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJwogCiAgICAgZGVmIHNhdmUoc2VsZiwgb2JqLCBzYXZlX3BlcnNpc3RlbnRfaWQ9VHJ1ZSk6CisgICAgICAgIHNlbGYuZnJhbWVyLmNvbW1pdF9mcmFtZSgpCisKICAgICAgICAgIyBDaGVjayBmb3IgcGVyc2lzdGVudCBpZCAoZGVmaW5lZCBieSBhIHN1YmNsYXNzKQogICAgICAgICBwaWQgPSBzZWxmLnBlcnNpc3RlbnRfaWQob2JqKQogICAgICAgICBpZiBwaWQgaXMgbm90IE5vbmUgYW5kIHNhdmVfcGVyc2lzdGVudF9pZDoKQEAgLTI4NiwyMCArNDY2LDIwIEBACiAKICAgICAgICAgIyBDaGVjayB0aGUgbWVtbwogICAgICAgICB4ID0gc2VsZi5tZW1vLmdldChpZChvYmopKQotICAgICAgICBpZiB4OgorICAgICAgICBpZiB4IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi53cml0ZShzZWxmLmdldCh4WzBdKSkKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgQ2hlY2sgdGhlIHR5cGUgZGlzcGF0Y2ggdGFibGUKICAgICAgICAgdCA9IHR5cGUob2JqKQogICAgICAgICBmID0gc2VsZi5kaXNwYXRjaC5nZXQodCkKLSAgICAgICAgaWYgZjoKKyAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGYoc2VsZiwgb2JqKSAjIENhbGwgdW5ib3VuZCBtZXRob2Qgd2l0aCBleHBsaWNpdCBzZWxmCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIENoZWNrIHByaXZhdGUgZGlzcGF0Y2ggdGFibGUgaWYgYW55LCBvciBlbHNlIGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUKICAgICAgICAgcmVkdWNlID0gZ2V0YXR0cihzZWxmLCAnZGlzcGF0Y2hfdGFibGUnLCBkaXNwYXRjaF90YWJsZSkuZ2V0KHQpCi0gICAgICAgIGlmIHJlZHVjZToKKyAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcnYgPSByZWR1Y2Uob2JqKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBjbGFzcyB3aXRoIGEgY3VzdG9tIG1ldGFjbGFzczsgdHJlYXQgYXMgcmVndWxhciBjbGFzcwpAQCAtMzEzLDExICs0OTMsMTEgQEAKIAogICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBfX3JlZHVjZV9leF9fIG1ldGhvZCwgZmFsbCBiYWNrIHRvIF9fcmVkdWNlX18KICAgICAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIob2JqLCAiX19yZWR1Y2VfZXhfXyIsIE5vbmUpCi0gICAgICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgICAgICBpZiByZWR1Y2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y2Uoc2VsZi5wcm90bykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVkdWNlID0gZ2V0YXR0cihvYmosICJfX3JlZHVjZV9fIiwgTm9uZSkKLSAgICAgICAgICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgICAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBydiA9IHJlZHVjZSgpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiQ2FuJ3QgcGlja2xlICVyIG9iamVjdDogJXIiICUKQEAgLTM1MywyNCArNTMzLDMzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLndyaXRlKFBFUlNJRCArIHN0cihwaWQpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nKQogCi0gICAgZGVmIHNhdmVfcmVkdWNlKHNlbGYsIGZ1bmMsIGFyZ3MsIHN0YXRlPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGxpc3RpdGVtcz1Ob25lLCBkaWN0aXRlbXM9Tm9uZSwgb2JqPU5vbmUpOgorICAgIGRlZiBzYXZlX3JlZHVjZShzZWxmLCBmdW5jLCBhcmdzLCBzdGF0ZT1Ob25lLCBsaXN0aXRlbXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZGljdGl0ZW1zPU5vbmUsIG9iaj1Ob25lKToKICAgICAgICAgIyBUaGlzIEFQSSBpcyBjYWxsZWQgYnkgc29tZSBzdWJjbGFzc2VzCiAKLSAgICAgICAgIyBBc3NlcnQgdGhhdCBhcmdzIGlzIGEgdHVwbGUKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJncywgdHVwbGUpOgotICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJncyBmcm9tIHNhdmVfcmVkdWNlKCkgc2hvdWxkIGJlIGEgdHVwbGUiKQotCi0gICAgICAgICMgQXNzZXJ0IHRoYXQgZnVuYyBpcyBjYWxsYWJsZQorICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJncyBmcm9tIHNhdmVfcmVkdWNlKCkgbXVzdCBiZSBhIHR1cGxlIikKICAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZ1bmMpOgotICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiZnVuYyBmcm9tIHNhdmVfcmVkdWNlKCkgc2hvdWxkIGJlIGNhbGxhYmxlIikKKyAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImZ1bmMgZnJvbSBzYXZlX3JlZHVjZSgpIG11c3QgYmUgY2FsbGFibGUiKQogCiAgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKICAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCiAKLSAgICAgICAgIyBQcm90b2NvbCAyIHNwZWNpYWwgY2FzZTogaWYgZnVuYydzIG5hbWUgaXMgX19uZXdvYmpfXywgdXNlIE5FV09CSgotICAgICAgICBpZiBzZWxmLnByb3RvID49IDIgYW5kIGdldGF0dHIoZnVuYywgIl9fbmFtZV9fIiwgIiIpID09ICJfX25ld29ial9fIjoKLSAgICAgICAgICAgICMgQSBfX3JlZHVjZV9fIGltcGxlbWVudGF0aW9uIGNhbiBkaXJlY3QgcHJvdG9jb2wgMiB0bworICAgICAgICBmdW5jX25hbWUgPSBnZXRhdHRyKGZ1bmMsICJfX25hbWVfXyIsICIiKQorICAgICAgICBpZiBzZWxmLnByb3RvID49IDQgYW5kIGZ1bmNfbmFtZSA9PSAiX19uZXdvYmpfZXhfXyI6CisgICAgICAgICAgICBjbHMsIGFyZ3MsIGt3YXJncyA9IGFyZ3MKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgIl9fbmV3X18iKToKKyAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzWzBdIGZyb20ge30gYXJncyBoYXMgbm8gX19uZXdfXyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZnVuY19uYW1lKSkKKyAgICAgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgY2xzIGlzIG5vdCBvYmouX19jbGFzc19fOgorICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3NbMF0gZnJvbSB7fSBhcmdzIGhhcyB0aGUgd3JvbmcgY2xhc3MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZ1bmNfbmFtZSkpCisgICAgICAgICAgICBzYXZlKGNscykKKyAgICAgICAgICAgIHNhdmUoYXJncykKKyAgICAgICAgICAgIHNhdmUoa3dhcmdzKQorICAgICAgICAgICAgd3JpdGUoTkVXT0JKX0VYKQorICAgICAgICBlbGlmIHNlbGYucHJvdG8gPj0gMiBhbmQgZnVuY19uYW1lID09ICJfX25ld29ial9fIjoKKyAgICAgICAgICAgICMgQSBfX3JlZHVjZV9fIGltcGxlbWVudGF0aW9uIGNhbiBkaXJlY3QgcHJvdG9jb2wgMiBvciBuZXdlciB0bwogICAgICAgICAgICAgIyB1c2UgdGhlIG1vcmUgZWZmaWNpZW50IE5FV09CSiBvcGNvZGUsIHdoaWxlIHN0aWxsCiAgICAgICAgICAgICAjIGFsbG93aW5nIHByb3RvY29sIDAgYW5kIDEgdG8gd29yayBub3JtYWxseS4gIEZvciB0aGlzIHRvCiAgICAgICAgICAgICAjIHdvcmssIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBfX3JlZHVjZV9fIHNob3VsZCBiZQpAQCAtNDEzLDcgKzYwMiwxMyBAQAogICAgICAgICAgICAgd3JpdGUoUkVEVUNFKQogCiAgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCisgICAgICAgICAgICAjIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgICAgICAgIyByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICAgICAgICMgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4KKyAgICAgICAgICAgIGlmIGlkKG9iaikgaW4gc2VsZi5tZW1vOgorICAgICAgICAgICAgICAgIHdyaXRlKFBPUCArIHNlbGYuZ2V0KHNlbGYubWVtb1tpZChvYmopXVswXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAKICAgICAgICAgIyBNb3JlIG5ldyBzcGVjaWFsIGNhc2VzICh0aGF0IHdvcmsgd2l0aCBvbGRlciBwcm90b2NvbHMgYXMKICAgICAgICAgIyB3ZWxsKTogd2hlbiBfX3JlZHVjZV9fIHJldHVybnMgYSB0dXBsZSB3aXRoIDQgb3IgNSBpdGVtcywKQEAgLTQzOCwyMiArNjMzLDE0IEBACiAgICAgICAgIHNlbGYud3JpdGUoTk9ORSkKICAgICBkaXNwYXRjaFt0eXBlKE5vbmUpXSA9IHNhdmVfbm9uZQogCi0gICAgZGVmIHNhdmVfZWxsaXBzaXMoc2VsZiwgb2JqKToKLSAgICAgICAgc2VsZi5zYXZlX2dsb2JhbChFbGxpcHNpcywgJ0VsbGlwc2lzJykKLSAgICBkaXNwYXRjaFt0eXBlKEVsbGlwc2lzKV0gPSBzYXZlX2VsbGlwc2lzCi0KLSAgICBkZWYgc2F2ZV9ub3RpbXBsZW1lbnRlZChzZWxmLCBvYmopOgotICAgICAgICBzZWxmLnNhdmVfZ2xvYmFsKE5vdEltcGxlbWVudGVkLCAnTm90SW1wbGVtZW50ZWQnKQotICAgIGRpc3BhdGNoW3R5cGUoTm90SW1wbGVtZW50ZWQpXSA9IHNhdmVfbm90aW1wbGVtZW50ZWQKLQogICAgIGRlZiBzYXZlX2Jvb2woc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgotICAgICAgICAgICAgc2VsZi53cml0ZShvYmogYW5kIE5FV1RSVUUgb3IgTkVXRkFMU0UpCisgICAgICAgICAgICBzZWxmLndyaXRlKE5FV1RSVUUgaWYgb2JqIGVsc2UgTkVXRkFMU0UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKG9iaiBhbmQgVFJVRSBvciBGQUxTRSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoVFJVRSBpZiBvYmogZWxzZSBGQUxTRSkKICAgICBkaXNwYXRjaFtib29sXSA9IHNhdmVfYm9vbAogCi0gICAgZGVmIHNhdmVfbG9uZyhzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX2xvbmcoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICAjIElmIHRoZSBpbnQgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiBhIHNpZ25lZCA0LWJ5dGUgMidzLWNvbXAKICAgICAgICAgICAgICMgZm9ybWF0LCB3ZSBjYW4gc3RvcmUgaXQgbW9yZSBlZmZpY2llbnRseSB0aGFuIHRoZSBnZW5lcmFsCkBAIC00NjEsOTMgKzY0OCw5NSBAQAogICAgICAgICAgICAgIyBGaXJzdCBvbmUtIGFuZCB0d28tYnl0ZSB1bnNpZ25lZCBpbnRzOgogICAgICAgICAgICAgaWYgb2JqID49IDA6CiAgICAgICAgICAgICAgICAgaWYgb2JqIDw9IDB4ZmY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMSArIGJ5dGVzKFtvYmpdKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQxICsgcGFjaygiPEIiLCBvYmopKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpZiBvYmogPD0gMHhmZmZmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDIgKyBieXRlcyhbb2JqJjB4ZmYsIG9iaj4+OF0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDIgKyBwYWNrKCI8SCIsIG9iaikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIyBOZXh0IGNoZWNrIGZvciA0LWJ5dGUgc2lnbmVkIGludHM6Ci0gICAgICAgICAgICBoaWdoX2JpdHMgPSBvYmogPj4gMzEgICMgbm90ZSB0aGF0IFB5dGhvbiBzaGlmdCBzaWduLWV4dGVuZHMKLSAgICAgICAgICAgIGlmIGhpZ2hfYml0cyA9PSAwIG9yIGhpZ2hfYml0cyA9PSAtMToKLSAgICAgICAgICAgICAgICAjIEFsbCBoaWdoIGJpdHMgYXJlIGNvcGllcyBvZiBiaXQgMioqMzEsIHNvIHRoZSB2YWx1ZQotICAgICAgICAgICAgICAgICMgZml0cyBpbiBhIDQtYnl0ZSBzaWduZWQgaW50LgorICAgICAgICAgICAgaWYgLTB4ODAwMDAwMDAgPD0gb2JqIDw9IDB4N2ZmZmZmZmY6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQgKyBwYWNrKCI8aSIsIG9iaikpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKICAgICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVfbG9uZyhvYmopCiAgICAgICAgICAgICBuID0gbGVuKGVuY29kZWQpCiAgICAgICAgICAgICBpZiBuIDwgMjU2OgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTE9ORzEgKyBieXRlcyhbbl0pICsgZW5jb2RlZCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkcxICsgcGFjaygiPEIiLCBuKSArIGVuY29kZWQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTE9ORzQgKyBwYWNrKCI8aSIsIG4pICsgZW5jb2RlZCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLndyaXRlKExPTkcgKyByZXByKG9iaikuZW5jb2RlKCJhc2NpaSIpICsgYidMXG4nKQogICAgIGRpc3BhdGNoW2ludF0gPSBzYXZlX2xvbmcKIAotICAgIGRlZiBzYXZlX2Zsb2F0KHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfZmxvYXQoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkZMT0FUICsgcGFjaygnPmQnLCBvYmopKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi53cml0ZShGTE9BVCArIHJlcHIob2JqKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJykKICAgICBkaXNwYXRjaFtmbG9hdF0gPSBzYXZlX2Zsb2F0CiAKLSAgICBkZWYgc2F2ZV9ieXRlcyhzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX2J5dGVzKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYucHJvdG8gPCAzOgotICAgICAgICAgICAgaWYgbGVuKG9iaikgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCBvYmo6ICMgYnl0ZXMgb2JqZWN0IGlzIGVtcHR5CiAgICAgICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShieXRlcywgKCksIG9iaj1vYmopCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoY29kZWNzLmVuY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHIob2JqLCAnbGF0aW4xJyksICdsYXRpbjEnKSwgb2JqPW9iaikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBuID0gbGVuKG9iaikKLSAgICAgICAgaWYgbiA8IDI1NjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOQllURVMgKyBieXRlcyhbbl0pICsgYnl0ZXMob2JqKSkKKyAgICAgICAgaWYgbiA8PSAweGZmOgorICAgICAgICAgICAgc2VsZi53cml0ZShTSE9SVF9CSU5CWVRFUyArIHBhY2soIjxCIiwgbikgKyBvYmopCisgICAgICAgIGVsaWYgbiA+IDB4ZmZmZmZmZmYgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoQklOQllURVM4ICsgcGFjaygiPFEiLCBuKSArIG9iaikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYud3JpdGUoQklOQllURVMgKyBwYWNrKCI8SSIsIG4pICsgYnl0ZXMob2JqKSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoQklOQllURVMgKyBwYWNrKCI8SSIsIG4pICsgb2JqKQogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgIGRpc3BhdGNoW2J5dGVzXSA9IHNhdmVfYnl0ZXMKIAotICAgIGRlZiBzYXZlX3N0cihzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX3N0cihzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIGVuY29kZWQgPSBvYmouZW5jb2RlKCd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykKICAgICAgICAgICAgIG4gPSBsZW4oZW5jb2RlZCkKLSAgICAgICAgICAgIHNlbGYud3JpdGUoQklOVU5JQ09ERSArIHBhY2soIjxJIiwgbikgKyBlbmNvZGVkKQorICAgICAgICAgICAgaWYgbiA8PSAweGZmIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShTSE9SVF9CSU5VTklDT0RFICsgcGFjaygiPEIiLCBuKSArIGVuY29kZWQpCisgICAgICAgICAgICBlbGlmIG4gPiAweGZmZmZmZmZmIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5VTklDT0RFOCArIHBhY2soIjxRIiwgbikgKyBlbmNvZGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTlVOSUNPREUgKyBwYWNrKCI8SSIsIG4pICsgZW5jb2RlZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlKCJcXCIsICJcXHUwMDVjIikKICAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlKCJcbiIsICJcXHUwMDBhIikKLSAgICAgICAgICAgIHNlbGYud3JpdGUoVU5JQ09ERSArIGJ5dGVzKG9iai5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpKSArCisgICAgICAgICAgICBzZWxmLndyaXRlKFVOSUNPREUgKyBvYmouZW5jb2RlKCdyYXctdW5pY29kZS1lc2NhcGUnKSArCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4nKQogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgIGRpc3BhdGNoW3N0cl0gPSBzYXZlX3N0cgogCiAgICAgZGVmIHNhdmVfdHVwbGUoc2VsZiwgb2JqKToKLSAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCi0gICAgICAgIHByb3RvID0gc2VsZi5wcm90bwotCi0gICAgICAgIG4gPSBsZW4ob2JqKQotICAgICAgICBpZiBuID09IDA6Ci0gICAgICAgICAgICBpZiBwcm90bzoKLSAgICAgICAgICAgICAgICB3cml0ZShFTVBUWV9UVVBMRSkKKyAgICAgICAgaWYgbm90IG9iajogIyB0dXBsZSBpcyBlbXB0eQorICAgICAgICAgICAgaWYgc2VsZi5iaW46CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShFTVBUWV9UVVBMRSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd3JpdGUoTUFSSyArIFRVUExFKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIFRVUExFKQogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbiA9IGxlbihvYmopCiAgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKICAgICAgICAgbWVtbyA9IHNlbGYubWVtbwotICAgICAgICBpZiBuIDw9IDMgYW5kIHByb3RvID49IDI6CisgICAgICAgIGlmIG4gPD0gMyBhbmQgc2VsZi5wcm90byA+PSAyOgogICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gb2JqOgogICAgICAgICAgICAgICAgIHNhdmUoZWxlbWVudCkKICAgICAgICAgICAgICMgU3VidGxlLiAgU2FtZSBhcyBpbiB0aGUgYmlnIGNvbW1lbnQgYmVsb3cuCiAgICAgICAgICAgICBpZiBpZChvYmopIGluIG1lbW86CiAgICAgICAgICAgICAgICAgZ2V0ID0gc2VsZi5nZXQobWVtb1tpZChvYmopXVswXSkKLSAgICAgICAgICAgICAgICB3cml0ZShQT1AgKiBuICsgZ2V0KQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoUE9QICogbiArIGdldCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd3JpdGUoX3R1cGxlc2l6ZTJjb2RlW25dKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoX3R1cGxlc2l6ZTJjb2RlW25dKQogICAgICAgICAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIHByb3RvIDAgb3IgcHJvdG8gMSBhbmQgdHVwbGUgaXNuJ3QgZW1wdHksIG9yIHByb3RvID4gMSBhbmQgdHVwbGUKICAgICAgICAgIyBoYXMgbW9yZSB0aGFuIDMgZWxlbWVudHMuCisgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQogICAgICAgICB3cml0ZShNQVJLKQogICAgICAgICBmb3IgZWxlbWVudCBpbiBvYmo6CiAgICAgICAgICAgICBzYXZlKGVsZW1lbnQpCkBAIC01NjEsMjUgKzc1MCwyMyBAQAogICAgICAgICAgICAgIyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBpbiB0aGUgImZvciBlbGVtZW50IiBsb29wIGluc3RlYWQsIGJ1dAogICAgICAgICAgICAgIyByZWN1cnNpdmUgdHVwbGVzIGFyZSBhIHJhcmUgdGhpbmcuCiAgICAgICAgICAgICBnZXQgPSBzZWxmLmdldChtZW1vW2lkKG9iaildWzBdKQotICAgICAgICAgICAgaWYgcHJvdG86CisgICAgICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgICAgICB3cml0ZShQT1BfTUFSSyArIGdldCkKICAgICAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIFBPUF9NQVJLIG5vdCBhdmFpbGFibGUKICAgICAgICAgICAgICAgICB3cml0ZShQT1AgKiAobisxKSArIGdldCkKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgTm8gcmVjdXJzaW9uLgotICAgICAgICBzZWxmLndyaXRlKFRVUExFKQorICAgICAgICB3cml0ZShUVVBMRSkKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKIAogICAgIGRpc3BhdGNoW3R1cGxlXSA9IHNhdmVfdHVwbGUKIAogICAgIGRlZiBzYXZlX2xpc3Qoc2VsZiwgb2JqKToKLSAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCi0KICAgICAgICAgaWYgc2VsZi5iaW46Ci0gICAgICAgICAgICB3cml0ZShFTVBUWV9MSVNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShFTVBUWV9MSVNUKQogICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBjYW4ndCB1c2UgRU1QVFlfTElTVAotICAgICAgICAgICAgd3JpdGUoTUFSSyArIExJU1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBMSVNUKQogCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgICAgIHNlbGYuX2JhdGNoX2FwcGVuZHMob2JqKQpAQCAtNTk5LDE3ICs3ODYsOSBAQAogICAgICAgICAgICAgICAgIHdyaXRlKEFQUEVORCkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGl0ZW1zID0gaXRlcihpdGVtcykKLSAgICAgICAgciA9IHJhbmdlKHNlbGYuX0JBVENIU0laRSkKLSAgICAgICAgd2hpbGUgaXRlbXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0bXAgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHggPSBuZXh0KGl0ZW1zKQotICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKHgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0bXAgPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKICAgICAgICAgICAgIG4gPSBsZW4odG1wKQogICAgICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKQEAgLTYyMCwxNCArNzk5LDE0IEBACiAgICAgICAgICAgICAgICAgc2F2ZSh0bXBbMF0pCiAgICAgICAgICAgICAgICAgd3JpdGUoQVBQRU5EKQogICAgICAgICAgICAgIyBlbHNlIHRtcCBpcyBlbXB0eSwgYW5kIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGlmIG4gPCBzZWxmLl9CQVRDSFNJWkU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICBkZWYgc2F2ZV9kaWN0KHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotCiAgICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgd3JpdGUoRU1QVFlfRElDVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfRElDVCkKICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gY2FuJ3QgdXNlIEVNUFRZX0RJQ1QKLSAgICAgICAgICAgIHdyaXRlKE1BUksgKyBESUNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgRElDVCkKIAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICBzZWxmLl9iYXRjaF9zZXRpdGVtcyhvYmouaXRlbXMoKSkKQEAgLTY0OCwxNiArODI3LDkgQEAKICAgICAgICAgICAgICAgICB3cml0ZShTRVRJVEVNKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaXRlbXMgPSBpdGVyKGl0ZW1zKQotICAgICAgICByID0gcmFuZ2Uoc2VsZi5fQkFUQ0hTSVpFKQotICAgICAgICB3aGlsZSBpdGVtcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRtcCA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiByOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChuZXh0KGl0ZW1zKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGl0ID0gaXRlcihpdGVtcykKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRtcCA9IGxpc3QoaXNsaWNlKGl0LCBzZWxmLl9CQVRDSFNJWkUpKQogICAgICAgICAgICAgbiA9IGxlbih0bXApCiAgICAgICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgICAgICB3cml0ZShNQVJLKQpAQCAtNjcxLDU1ICs4NDMsMTA5IEBACiAgICAgICAgICAgICAgICAgc2F2ZSh2KQogICAgICAgICAgICAgICAgIHdyaXRlKFNFVElURU0pCiAgICAgICAgICAgICAjIGVsc2UgdG1wIGlzIGVtcHR5LCBhbmQgd2UncmUgZG9uZQorICAgICAgICAgICAgaWYgbiA8IHNlbGYuX0JBVENIU0laRToKKyAgICAgICAgICAgICAgICByZXR1cm4KIAotICAgIGRlZiBzYXZlX2dsb2JhbChzZWxmLCBvYmosIG5hbWU9Tm9uZSwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfc2V0KHNlbGYsIG9iaik6CisgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKKyAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCisKKyAgICAgICAgaWYgc2VsZi5wcm90byA8IDQ6CisgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKHNldCwgKGxpc3Qob2JqKSwpLCBvYmo9b2JqKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoRU1QVFlfU0VUKQorICAgICAgICBzZWxmLm1lbW9pemUob2JqKQorCisgICAgICAgIGl0ID0gaXRlcihvYmopCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBiYXRjaCA9IGxpc3QoaXNsaWNlKGl0LCBzZWxmLl9CQVRDSFNJWkUpKQorICAgICAgICAgICAgbiA9IGxlbihiYXRjaCkKKyAgICAgICAgICAgIGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gYmF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHNhdmUoaXRlbSkKKyAgICAgICAgICAgICAgICB3cml0ZShBRERJVEVNUykKKyAgICAgICAgICAgIGlmIG4gPCBzZWxmLl9CQVRDSFNJWkU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgZGlzcGF0Y2hbc2V0XSA9IHNhdmVfc2V0CisKKyAgICBkZWYgc2F2ZV9mcm96ZW5zZXQoc2VsZiwgb2JqKToKKyAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKKworICAgICAgICBpZiBzZWxmLnByb3RvIDwgNDoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoZnJvemVuc2V0LCAobGlzdChvYmopLCksIG9iaj1vYmopCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShNQVJLKQorICAgICAgICBmb3IgaXRlbSBpbiBvYmo6CisgICAgICAgICAgICBzYXZlKGl0ZW0pCisKKyAgICAgICAgaWYgaWQob2JqKSBpbiBzZWxmLm1lbW86CisgICAgICAgICAgICAjIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgICAgICAgIyByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICAgICAgICMgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4KKyAgICAgICAgICAgIHdyaXRlKFBPUF9NQVJLICsgc2VsZi5nZXQoc2VsZi5tZW1vW2lkKG9iaildWzBdKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKEZST1pFTlNFVCkKKyAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKKyAgICBkaXNwYXRjaFtmcm96ZW5zZXRdID0gc2F2ZV9mcm96ZW5zZXQKKworICAgIGRlZiBzYXZlX2dsb2JhbChzZWxmLCBvYmosIG5hbWU9Tm9uZSk6CiAgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQogICAgICAgICBtZW1vID0gc2VsZi5tZW1vCiAKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBuYW1lID0gZ2V0YXR0cihvYmosICdfX3F1YWxuYW1lX18nLCBOb25lKQogICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBuYW1lID0gb2JqLl9fbmFtZV9fCiAKLSAgICAgICAgbW9kdWxlID0gZ2V0YXR0cihvYmosICJfX21vZHVsZV9fIiwgTm9uZSkKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICBtb2R1bGUgPSB3aGljaG1vZHVsZShvYmosIG5hbWUpCi0KKyAgICAgICAgbW9kdWxlX25hbWUgPSB3aGljaG1vZHVsZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPXNlbGYucHJvdG8gPj0gNCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGUsIGxldmVsPTApCi0gICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2R1bGVdCi0gICAgICAgICAgICBrbGFzcyA9IGdldGF0dHIobW9kLCBuYW1lKQorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgbGV2ZWw9MCkKKyAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQorICAgICAgICAgICAgb2JqMiA9IF9nZXRhdHRyaWJ1dGUobW9kdWxlLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCiAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEtleUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKAogICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJXI6IGl0J3Mgbm90IGZvdW5kIGFzICVzLiVzIiAlCi0gICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGVfbmFtZSwgbmFtZSkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBrbGFzcyBpcyBub3Qgb2JqOgorICAgICAgICAgICAgaWYgb2JqMiBpcyBub3Qgb2JqOgogICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJXI6IGl0J3Mgbm90IHRoZSBzYW1lIG9iamVjdCBhcyAlcy4lcyIgJQotICAgICAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGUsIG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGVfbmFtZSwgbmFtZSkpCiAKICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgotICAgICAgICAgICAgY29kZSA9IF9leHRlbnNpb25fcmVnaXN0cnkuZ2V0KChtb2R1bGUsIG5hbWUpKQorICAgICAgICAgICAgY29kZSA9IF9leHRlbnNpb25fcmVnaXN0cnkuZ2V0KChtb2R1bGVfbmFtZSwgbmFtZSkpCiAgICAgICAgICAgICBpZiBjb2RlOgogICAgICAgICAgICAgICAgIGFzc2VydCBjb2RlID4gMAogICAgICAgICAgICAgICAgIGlmIGNvZGUgPD0gMHhmZjoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMSArIGJ5dGVzKFtjb2RlXSkpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDEgKyBwYWNrKCI8QiIsIGNvZGUpKQogICAgICAgICAgICAgICAgIGVsaWYgY29kZSA8PSAweGZmZmY6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDIgKyBieXRlcyhbY29kZSYweGZmLCBjb2RlPj44XSkpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDIgKyBwYWNrKCI8SCIsIGNvZGUpKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDQgKyBwYWNrKCI8aSIsIGNvZGUpKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIE5vbi1BU0NJSSBpZGVudGlmaWVycyBhcmUgc3VwcG9ydGVkIG9ubHkgd2l0aCBwcm90b2NvbHMgPj0gMy4KLSAgICAgICAgaWYgc2VsZi5wcm90byA+PSAzOgotICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlLCAidXRmLTgiKSArIGInXG4nICsKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgc2VsZi5zYXZlKG1vZHVsZV9uYW1lKQorICAgICAgICAgICAgc2VsZi5zYXZlKG5hbWUpCisgICAgICAgICAgICB3cml0ZShTVEFDS19HTE9CQUwpCisgICAgICAgIGVsaWYgc2VsZi5wcm90byA+PSAzOgorICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlX25hbWUsICJ1dGYtOCIpICsgYidcbicgKwogICAgICAgICAgICAgICAgICAgYnl0ZXMobmFtZSwgInV0Zi04IikgKyBiJ1xuJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNlbGYuZml4X2ltcG9ydHM6Ci0gICAgICAgICAgICAgICAgaWYgKG1vZHVsZSwgbmFtZSkgaW4gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkc6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgbmFtZSA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HWyhtb2R1bGUsIG5hbWUpXQotICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBpbiBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HW21vZHVsZV0KKyAgICAgICAgICAgICAgICByX25hbWVfbWFwcGluZyA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HCisgICAgICAgICAgICAgICAgcl9pbXBvcnRfbWFwcGluZyA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcKKyAgICAgICAgICAgICAgICBpZiAobW9kdWxlX25hbWUsIG5hbWUpIGluIHJfbmFtZV9tYXBwaW5nOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwgbmFtZSA9IHJfbmFtZV9tYXBwaW5nWyhtb2R1bGVfbmFtZSwgbmFtZSldCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlX25hbWUgaW4gcl9pbXBvcnRfbWFwcGluZzoKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSByX2ltcG9ydF9tYXBwaW5nW21vZHVsZV9uYW1lXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZSwgImFzY2lpIikgKyBiJ1xuJyArCisgICAgICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlX25hbWUsICJhc2NpaSIpICsgYidcbicgKwogICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKG5hbWUsICJhc2NpaSIpICsgYidcbicpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoCkBAIC03MjksNTggKzk1NSw4IEBACiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAKICAgICBkaXNwYXRjaFtGdW5jdGlvblR5cGVdID0gc2F2ZV9nbG9iYWwKLSAgICBkaXNwYXRjaFtCdWlsdGluRnVuY3Rpb25UeXBlXSA9IHNhdmVfZ2xvYmFsCiAgICAgZGlzcGF0Y2hbdHlwZV0gPSBzYXZlX2dsb2JhbAogCi0jIFBpY2tsaW5nIGhlbHBlcnMKLQotZGVmIF9rZWVwX2FsaXZlKHgsIG1lbW8pOgotICAgICIiIktlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgeCBpbiB0aGUgbWVtby4KLQotICAgIEJlY2F1c2Ugd2UgcmVtZW1iZXIgb2JqZWN0cyBieSB0aGVpciBpZCwgd2UgaGF2ZQotICAgIHRvIGFzc3VyZSB0aGF0IHBvc3NpYmx5IHRlbXBvcmFyeSBvYmplY3RzIGFyZSBrZXB0Ci0gICAgYWxpdmUgYnkgcmVmZXJlbmNpbmcgdGhlbS4KLSAgICBXZSBzdG9yZSBhIHJlZmVyZW5jZSBhdCB0aGUgaWQgb2YgdGhlIG1lbW8sIHdoaWNoIHNob3VsZAotICAgIG5vcm1hbGx5IG5vdCBiZSB1c2VkIHVubGVzcyBzb21lb25lIHRyaWVzIHRvIGRlZXBjb3B5Ci0gICAgdGhlIG1lbW8gaXRzZWxmLi4uCi0gICAgIiIiCi0gICAgdHJ5OgotICAgICAgICBtZW1vW2lkKG1lbW8pXS5hcHBlbmQoeCkKLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICMgYWhhLCB0aGlzIGlzIHRoZSBmaXJzdCBvbmUgOi0pCi0gICAgICAgIG1lbW9baWQobWVtbyldPVt4XQotCi0KLSMgQSBjYWNoZSBmb3Igd2hpY2htb2R1bGUoKSwgbWFwcGluZyBhIGZ1bmN0aW9uIG9iamVjdCB0byB0aGUgbmFtZSBvZgotIyB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZm91bmQuCi0KLWNsYXNzbWFwID0ge30gIyBjYWxsZWQgY2xhc3NtYXAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0KLWRlZiB3aGljaG1vZHVsZShmdW5jLCBmdW5jbmFtZSk6Ci0gICAgIiIiRmlndXJlIG91dCB0aGUgbW9kdWxlIGluIHdoaWNoIGEgZnVuY3Rpb24gb2NjdXJzLgotCi0gICAgU2VhcmNoIHN5cy5tb2R1bGVzIGZvciB0aGUgbW9kdWxlLgotICAgIENhY2hlIGluIGNsYXNzbWFwLgotICAgIFJldHVybiBhIG1vZHVsZSBuYW1lLgotICAgIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgZm91bmQsIHJldHVybiAiX19tYWluX18iLgotICAgICIiIgotICAgICMgUHl0aG9uIGZ1bmN0aW9ucyBzaG91bGQgYWx3YXlzIGdldCBhbiBfX21vZHVsZV9fIGZyb20gdGhlaXIgZ2xvYmFscy4KLSAgICBtb2QgPSBnZXRhdHRyKGZ1bmMsICJfX21vZHVsZV9fIiwgTm9uZSkKLSAgICBpZiBtb2QgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBtb2QKLSAgICBpZiBmdW5jIGluIGNsYXNzbWFwOgotICAgICAgICByZXR1cm4gY2xhc3NtYXBbZnVuY10KLQotICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gbGlzdChzeXMubW9kdWxlcy5pdGVtcygpKToKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250aW51ZSAjIHNraXAgZHVtbXkgcGFja2FnZSBlbnRyaWVzCi0gICAgICAgIGlmIG5hbWUgIT0gJ19fbWFpbl9fJyBhbmQgZ2V0YXR0cihtb2R1bGUsIGZ1bmNuYW1lLCBOb25lKSBpcyBmdW5jOgotICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICBuYW1lID0gJ19fbWFpbl9fJwotICAgIGNsYXNzbWFwW2Z1bmNdID0gbmFtZQotICAgIHJldHVybiBuYW1lCi0KIAogIyBVbnBpY2tsaW5nIG1hY2hpbmVyeQogCkBAIC04MDgsOCArOTg0LDggQEAKICAgICAgICAgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZAogICAgICAgICAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IGZpbGUucmVhZGxpbmUKLSAgICAgICAgc2VsZi5yZWFkID0gZmlsZS5yZWFkCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZGxpbmUgPSBmaWxlLnJlYWRsaW5lCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZCA9IGZpbGUucmVhZAogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKICAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKQEAgLTgyMywxNiArOTk5LDIwIEBACiAgICAgICAgICIiIgogICAgICAgICAjIENoZWNrIHdoZXRoZXIgVW5waWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoaXMgaXMKICAgICAgICAgIyBvbmx5IG5lZWRlZCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgX3BpY2tsZS5VbnBpY2tsZXIuZHVtcCgpLgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAicmVhZCIpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX2ZpbGVfcmVhZCIpOgogICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJVbnBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLl9faW5pdF9fKCkiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkpCisgICAgICAgIHNlbGYuX3VuZnJhbWVyID0gX1VuZnJhbWVyKHNlbGYuX2ZpbGVfcmVhZCwgc2VsZi5fZmlsZV9yZWFkbGluZSkKKyAgICAgICAgc2VsZi5yZWFkID0gc2VsZi5fdW5mcmFtZXIucmVhZAorICAgICAgICBzZWxmLnJlYWRsaW5lID0gc2VsZi5fdW5mcmFtZXIucmVhZGxpbmUKICAgICAgICAgc2VsZi5tYXJrID0gb2JqZWN0KCkgIyBhbnkgbmV3IHVuaXF1ZSBvYmplY3QKICAgICAgICAgc2VsZi5zdGFjayA9IFtdCiAgICAgICAgIHNlbGYuYXBwZW5kID0gc2VsZi5zdGFjay5hcHBlbmQKKyAgICAgICAgc2VsZi5wcm90byA9IDAKICAgICAgICAgcmVhZCA9IHNlbGYucmVhZAogICAgICAgICBkaXNwYXRjaCA9IHNlbGYuZGlzcGF0Y2gKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gcmVhZCgxKQogICAgICAgICAgICAgICAgIGlmIG5vdCBrZXk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCkBAIC04NjIsMTIgKzEwNDIsMTkgQEAKICAgICBkaXNwYXRjaCA9IHt9CiAKICAgICBkZWYgbG9hZF9wcm90byhzZWxmKToKLSAgICAgICAgcHJvdG8gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBwcm90byA9IHNlbGYucmVhZCgxKVswXQogICAgICAgICBpZiBub3QgMCA8PSBwcm90byA8PSBISUdIRVNUX1BST1RPQ09MOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sOiAlZCIgJSBwcm90bykKICAgICAgICAgc2VsZi5wcm90byA9IHByb3RvCiAgICAgZGlzcGF0Y2hbUFJPVE9bMF1dID0gbG9hZF9wcm90bwogCisgICAgZGVmIGxvYWRfZnJhbWUoc2VsZik6CisgICAgICAgIGZyYW1lX3NpemUsID0gdW5wYWNrKCc8UScsIHNlbGYucmVhZCg4KSkKKyAgICAgICAgaWYgZnJhbWVfc2l6ZSA+IHN5cy5tYXhzaXplOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZnJhbWUgc2l6ZSA+IHN5cy5tYXhzaXplOiAlZCIgJSBmcmFtZV9zaXplKQorICAgICAgICBzZWxmLl91bmZyYW1lci5sb2FkX2ZyYW1lKGZyYW1lX3NpemUpCisgICAgZGlzcGF0Y2hbRlJBTUVbMF1dID0gbG9hZF9mcmFtZQorCiAgICAgZGVmIGxvYWRfcGVyc2lkKHNlbGYpOgogICAgICAgICBwaWQgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5wZXJzaXN0ZW50X2xvYWQocGlkKSkKQEAgLTg5Nyw0MyArMTA4NCw0MCBAQAogICAgICAgICBlbGlmIGRhdGEgPT0gVFJVRVsxOl06CiAgICAgICAgICAgICB2YWwgPSBUcnVlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKKyAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQogICAgICAgICBzZWxmLmFwcGVuZCh2YWwpCiAgICAgZGlzcGF0Y2hbSU5UWzBdXSA9IGxvYWRfaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXBwZW5kKG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UWzBdXSA9IGxvYWRfYmluaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQxKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChvcmQoc2VsZi5yZWFkKDEpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKDEpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDFbMF1dID0gbG9hZF9iaW5pbnQxCiAKICAgICBkZWYgbG9hZF9iaW5pbnQyKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCgyKSArIGInXDAwMFwwMDAnKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8SCcsIHNlbGYucmVhZCgyKSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UMlswXV0gPSBsb2FkX2JpbmludDIKIAogICAgIGRlZiBsb2FkX2xvbmcoc2VsZik6Ci0gICAgICAgIHZhbCA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgiYXNjaWkiKQotICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gJ0wnOgorICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXQorICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gYidMJ1swXToKICAgICAgICAgICAgIHZhbCA9IHZhbFs6LTFdCiAgICAgICAgIHNlbGYuYXBwZW5kKGludCh2YWwsIDApKQogICAgIGRpc3BhdGNoW0xPTkdbMF1dID0gbG9hZF9sb25nCiAKICAgICBkZWYgbG9hZF9sb25nMShzZWxmKToKLSAgICAgICAgbiA9IG9yZChzZWxmLnJlYWQoMSkpCisgICAgICAgIG4gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HMVswXV0gPSBsb2FkX2xvbmcxCiAKICAgICBkZWYgbG9hZF9sb25nNChzZWxmKToKLSAgICAgICAgbiA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBuLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIG4gPCAwOgogICAgICAgICAgICAgIyBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlIC0tIHdlIG5ldmVyIHdyaXRlIG9uZSBsaWtlIHRoaXMKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKQogICAgICAgICBkYXRhID0gc2VsZi5yZWFkKG4pCiAgICAgICAgIHNlbGYuYXBwZW5kKGRlY29kZV9sb25nKGRhdGEpKQogICAgIGRpc3BhdGNoW0xPTkc0WzBdXSA9IGxvYWRfbG9uZzQKQEAgLTk0MiwzOSArMTEyNiwzNiBAQAogICAgICAgICBzZWxmLmFwcGVuZChmbG9hdChzZWxmLnJlYWRsaW5lKClbOi0xXSkpCiAgICAgZGlzcGF0Y2hbRkxPQVRbMF1dID0gbG9hZF9mbG9hdAogCi0gICAgZGVmIGxvYWRfYmluZmxvYXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2spOgorICAgIGRlZiBsb2FkX2JpbmZsb2F0KHNlbGYpOgogICAgICAgICBzZWxmLmFwcGVuZCh1bnBhY2soJz5kJywgc2VsZi5yZWFkKDgpKVswXSkKICAgICBkaXNwYXRjaFtCSU5GTE9BVFswXV0gPSBsb2FkX2JpbmZsb2F0CiAKICAgICBkZWYgbG9hZF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIG9yaWcgPSBzZWxmLnJlYWRsaW5lKCkKLSAgICAgICAgcmVwID0gb3JpZ1s6LTFdCi0gICAgICAgIGZvciBxIGluIChiJyInLCBiIiciKTogIyBkb3VibGUgb3Igc2luZ2xlIHF1b3RlCi0gICAgICAgICAgICBpZiByZXAuc3RhcnRzd2l0aChxKToKLSAgICAgICAgICAgICAgICBpZiBsZW4ocmVwKSA8IDIgb3Igbm90IHJlcC5lbmRzd2l0aChxKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZSIpCi0gICAgICAgICAgICAgICAgcmVwID0gcmVwW2xlbihxKTotbGVuKHEpXQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGRhdGEgPSBzZWxmLnJlYWRsaW5lKClbOi0xXQorICAgICAgICAjIFN0cmlwIG91dGVybW9zdCBxdW90ZXMKKyAgICAgICAgaWYgbGVuKGRhdGEpID49IDIgYW5kIGRhdGFbMF0gPT0gZGF0YVstMV0gYW5kIGRhdGFbMF0gaW4gYiciXCcnOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbMTotMV0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImluc2VjdXJlIHN0cmluZyBwaWNrbGU6ICVyIiAlIG9yaWcpCi0gICAgICAgIHNlbGYuYXBwZW5kKGNvZGVjcy5lc2NhcGVfZGVjb2RlKHJlcClbMF0KKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigidGhlIFNUUklORyBvcGNvZGUgYXJndW1lbnQgbXVzdCBiZSBxdW90ZWQiKQorICAgICAgICBzZWxmLmFwcGVuZChjb2RlY3MuZXNjYXBlX2RlY29kZShkYXRhKVswXQogICAgICAgICAgICAgICAgICAgICAuZGVjb2RlKHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKSkKICAgICBkaXNwYXRjaFtTVFJJTkdbMF1dID0gbG9hZF9zdHJpbmcKIAogICAgIGRlZiBsb2FkX2JpbnN0cmluZyhzZWxmKToKICAgICAgICAgIyBEZXByZWNhdGVkIEJJTlNUUklORyB1c2VzIHNpZ25lZCAzMi1iaXQgbGVuZ3RoCi0gICAgICAgIGxlbiA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBsZW4sID0gdW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50IikKICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChsZW4pCiAgICAgICAgIHZhbHVlID0gc3RyKGRhdGEsIHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKQogICAgICAgICBzZWxmLmFwcGVuZCh2YWx1ZSkKICAgICBkaXNwYXRjaFtCSU5TVFJJTkdbMF1dID0gbG9hZF9iaW5zdHJpbmcKIAotICAgIGRlZiBsb2FkX2JpbmJ5dGVzKHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrLCBtYXhzaXplPXN5cy5tYXhzaXplKToKKyAgICBkZWYgbG9hZF9iaW5ieXRlcyhzZWxmKToKICAgICAgICAgbGVuLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA+IG1heHNpemU6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICVkIGJ5dGVzIiAlIG1heHNpemUpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZChsZW4pKQogICAgIGRpc3BhdGNoW0JJTkJZVEVTWzBdXSA9IGxvYWRfYmluYnl0ZXMKIApAQCAtOTgyLDI1ICsxMTYzLDM5IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWRsaW5lKClbOi0xXSwgJ3Jhdy11bmljb2RlLWVzY2FwZScpKQogICAgIGRpc3BhdGNoW1VOSUNPREVbMF1dID0gbG9hZF91bmljb2RlCiAKLSAgICBkZWYgbG9hZF9iaW51bmljb2RlKHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrLCBtYXhzaXplPXN5cy5tYXhzaXplKToKKyAgICBkZWYgbG9hZF9iaW51bmljb2RlKHNlbGYpOgogICAgICAgICBsZW4sID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlZCBieXRlcyIgJSBtYXhzaXplKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCiAgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKICAgICBkaXNwYXRjaFtCSU5VTklDT0RFWzBdXSA9IGxvYWRfYmludW5pY29kZQogCisgICAgZGVmIGxvYWRfYmludW5pY29kZTgoc2VsZik6CisgICAgICAgIGxlbiwgPSB1bnBhY2soJzxRJywgc2VsZi5yZWFkKDgpKQorICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5VTklDT0RFOCBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCisgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKKyAgICBkaXNwYXRjaFtCSU5VTklDT0RFOFswXV0gPSBsb2FkX2JpbnVuaWNvZGU4CisKICAgICBkZWYgbG9hZF9zaG9ydF9iaW5zdHJpbmcoc2VsZik6Ci0gICAgICAgIGxlbiA9IG9yZChzZWxmLnJlYWQoMSkpCi0gICAgICAgIGRhdGEgPSBieXRlcyhzZWxmLnJlYWQobGVuKSkKKyAgICAgICAgbGVuID0gc2VsZi5yZWFkKDEpWzBdCisgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKQogICAgICAgICB2YWx1ZSA9IHN0cihkYXRhLCBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKICAgICAgICAgc2VsZi5hcHBlbmQodmFsdWUpCiAgICAgZGlzcGF0Y2hbU0hPUlRfQklOU1RSSU5HWzBdXSA9IGxvYWRfc2hvcnRfYmluc3RyaW5nCiAKICAgICBkZWYgbG9hZF9zaG9ydF9iaW5ieXRlcyhzZWxmKToKLSAgICAgICAgbGVuID0gb3JkKHNlbGYucmVhZCgxKSkKLSAgICAgICAgc2VsZi5hcHBlbmQoYnl0ZXMoc2VsZi5yZWFkKGxlbikpKQorICAgICAgICBsZW4gPSBzZWxmLnJlYWQoMSlbMF0KKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKGxlbikpCiAgICAgZGlzcGF0Y2hbU0hPUlRfQklOQllURVNbMF1dID0gbG9hZF9zaG9ydF9iaW5ieXRlcwogCisgICAgZGVmIGxvYWRfc2hvcnRfYmludW5pY29kZShzZWxmKToKKyAgICAgICAgbGVuID0gc2VsZi5yZWFkKDEpWzBdCisgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKKyAgICBkaXNwYXRjaFtTSE9SVF9CSU5VTklDT0RFWzBdXSA9IGxvYWRfc2hvcnRfYmludW5pY29kZQorCiAgICAgZGVmIGxvYWRfdHVwbGUoc2VsZik6CiAgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCiAgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW3R1cGxlKHNlbGYuc3RhY2tbaysxOl0pXQpAQCAtMTAzMCw2ICsxMjI1LDE1IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHt9KQogICAgIGRpc3BhdGNoW0VNUFRZX0RJQ1RbMF1dID0gbG9hZF9lbXB0eV9kaWN0aW9uYXJ5CiAKKyAgICBkZWYgbG9hZF9lbXB0eV9zZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXBwZW5kKHNldCgpKQorICAgIGRpc3BhdGNoW0VNUFRZX1NFVFswXV0gPSBsb2FkX2VtcHR5X3NldAorCisgICAgZGVmIGxvYWRfZnJvemVuc2V0KHNlbGYpOgorICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQorICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFtmcm96ZW5zZXQoc2VsZi5zdGFja1trKzE6XSldCisgICAgZGlzcGF0Y2hbRlJPWkVOU0VUWzBdXSA9IGxvYWRfZnJvemVuc2V0CisKICAgICBkZWYgbG9hZF9saXN0KHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFtzZWxmLnN0YWNrW2srMTpdXQpAQCAtMTAzNywxMiArMTI0MSw5IEBACiAKICAgICBkZWYgbG9hZF9kaWN0KHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQotICAgICAgICBkID0ge30KICAgICAgICAgaXRlbXMgPSBzZWxmLnN0YWNrW2srMTpdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIDIpOgotICAgICAgICAgICAga2V5ID0gaXRlbXNbaV0KLSAgICAgICAgICAgIHZhbHVlID0gaXRlbXNbaSsxXQotICAgICAgICAgICAgZFtrZXldID0gdmFsdWUKKyAgICAgICAgZCA9IHtpdGVtc1tpXTogaXRlbXNbaSsxXQorICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIDIpfQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFtkXQogICAgIGRpc3BhdGNoW0RJQ1RbMF1dID0gbG9hZF9kaWN0CiAKQEAgLTEwODEsMTEgKzEyODIsMTkgQEAKIAogICAgIGRlZiBsb2FkX25ld29iaihzZWxmKToKICAgICAgICAgYXJncyA9IHNlbGYuc3RhY2sucG9wKCkKLSAgICAgICAgY2xzID0gc2VsZi5zdGFja1stMV0KKyAgICAgICAgY2xzID0gc2VsZi5zdGFjay5wb3AoKQogICAgICAgICBvYmogPSBjbHMuX19uZXdfXyhjbHMsICphcmdzKQotICAgICAgICBzZWxmLnN0YWNrWy0xXSA9IG9iagorICAgICAgICBzZWxmLmFwcGVuZChvYmopCiAgICAgZGlzcGF0Y2hbTkVXT0JKWzBdXSA9IGxvYWRfbmV3b2JqCiAKKyAgICBkZWYgbG9hZF9uZXdvYmpfZXgoc2VsZik6CisgICAgICAgIGt3YXJncyA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgYXJncyA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgY2xzID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBvYmogPSBjbHMuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hcHBlbmQob2JqKQorICAgIGRpc3BhdGNoW05FV09CSl9FWFswXV0gPSBsb2FkX25ld29ial9leAorCiAgICAgZGVmIGxvYWRfZ2xvYmFsKHNlbGYpOgogICAgICAgICBtb2R1bGUgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgbmFtZSA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgidXRmLTgiKQpAQCAtMTA5MywxOCArMTMwMiwyNiBAQAogICAgICAgICBzZWxmLmFwcGVuZChrbGFzcykKICAgICBkaXNwYXRjaFtHTE9CQUxbMF1dID0gbG9hZF9nbG9iYWwKIAorICAgIGRlZiBsb2FkX3N0YWNrX2dsb2JhbChzZWxmKToKKyAgICAgICAgbmFtZSA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgbW9kdWxlID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBpZiB0eXBlKG5hbWUpIGlzIG5vdCBzdHIgb3IgdHlwZShtb2R1bGUpIGlzIG5vdCBzdHI6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIlNUQUNLX0dMT0JBTCByZXF1aXJlcyBzdHIiKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLmZpbmRfY2xhc3MobW9kdWxlLCBuYW1lKSkKKyAgICBkaXNwYXRjaFtTVEFDS19HTE9CQUxbMF1dID0gbG9hZF9zdGFja19nbG9iYWwKKwogICAgIGRlZiBsb2FkX2V4dDEoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBjb2RlID0gc2VsZi5yZWFkKDEpWzBdCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDFbMF1dID0gbG9hZF9leHQxCiAKICAgICBkZWYgbG9hZF9leHQyKHNlbGYpOgotICAgICAgICBjb2RlID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoMikgKyBiJ1wwMDBcMDAwJykKKyAgICAgICAgY29kZSwgPSB1bnBhY2soJzxIJywgc2VsZi5yZWFkKDIpKQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQyWzBdXSA9IGxvYWRfZXh0MgogCiAgICAgZGVmIGxvYWRfZXh0NChzZWxmKToKLSAgICAgICAgY29kZSA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBjb2RlLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDRbMF1dID0gbG9hZF9leHQ0CiAKQEAgLTExMTgsNyArMTMzNSw3IEBACiAgICAgICAgIGlmIG5vdCBrZXk6CiAgICAgICAgICAgICBpZiBjb2RlIDw9IDA6ICMgbm90ZSB0aGF0IDAgaXMgZm9yYmlkZGVuCiAgICAgICAgICAgICAgICAgIyBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlLgotICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKTsKKyAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIikKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVucmVnaXN0ZXJlZCBleHRlbnNpb24gY29kZSAlZCIgJSBjb2RlKQogICAgICAgICBvYmogPSBzZWxmLmZpbmRfY2xhc3MoKmtleSkKICAgICAgICAgX2V4dGVuc2lvbl9jYWNoZVtjb2RlXSA9IG9iagpAQCAtMTEzMiw5ICsxMzQ5LDggQEAKICAgICAgICAgICAgIGlmIG1vZHVsZSBpbiBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORzoKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElOR1ttb2R1bGVdCiAgICAgICAgIF9faW1wb3J0X18obW9kdWxlLCBsZXZlbD0wKQotICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2R1bGVdCi0gICAgICAgIGtsYXNzID0gZ2V0YXR0cihtb2QsIG5hbWUpCi0gICAgICAgIHJldHVybiBrbGFzcworICAgICAgICByZXR1cm4gX2dldGF0dHJpYnV0ZShzeXMubW9kdWxlc1ttb2R1bGVdLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCiAKICAgICBkZWYgbG9hZF9yZWR1Y2Uoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawpAQCAtMTE3Miw3ICsxMzg4LDcgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5tZW1vW2ldKQogICAgIGRpc3BhdGNoW0JJTkdFVFswXV0gPSBsb2FkX2JpbmdldAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5nZXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2spOgorICAgIGRlZiBsb2FkX2xvbmdfYmluZ2V0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYubWVtb1tpXSkKICAgICBkaXNwYXRjaFtMT05HX0JJTkdFVFswXV0gPSBsb2FkX2xvbmdfYmluZ2V0CkBAIC0xMTkxLDEzICsxNDA3LDE4IEBACiAgICAgICAgIHNlbGYubWVtb1tpXSA9IHNlbGYuc3RhY2tbLTFdCiAgICAgZGlzcGF0Y2hbQklOUFVUWzBdXSA9IGxvYWRfYmlucHV0CiAKLSAgICBkZWYgbG9hZF9sb25nX2JpbnB1dChzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfbG9uZ19iaW5wdXQoc2VsZik6CiAgICAgICAgIGksID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgaSA+IG1heHNpemU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSBMT05HX0JJTlBVVCBhcmd1bWVudCIpCiAgICAgICAgIHNlbGYubWVtb1tpXSA9IHNlbGYuc3RhY2tbLTFdCiAgICAgZGlzcGF0Y2hbTE9OR19CSU5QVVRbMF1dID0gbG9hZF9sb25nX2JpbnB1dAogCisgICAgZGVmIGxvYWRfbWVtb2l6ZShzZWxmKToKKyAgICAgICAgbWVtbyA9IHNlbGYubWVtbworICAgICAgICBtZW1vW2xlbihtZW1vKV0gPSBzZWxmLnN0YWNrWy0xXQorICAgIGRpc3BhdGNoW01FTU9JWkVbMF1dID0gbG9hZF9tZW1vaXplCisKICAgICBkZWYgbG9hZF9hcHBlbmQoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawogICAgICAgICB2YWx1ZSA9IHN0YWNrLnBvcCgpCkBAIC0xMjM3LDEyICsxNDU4LDI2IEBACiAgICAgICAgIGRlbCBzdGFja1ttYXJrOl0KICAgICBkaXNwYXRjaFtTRVRJVEVNU1swXV0gPSBsb2FkX3NldGl0ZW1zCiAKKyAgICBkZWYgbG9hZF9hZGRpdGVtcyhzZWxmKToKKyAgICAgICAgc3RhY2sgPSBzZWxmLnN0YWNrCisgICAgICAgIG1hcmsgPSBzZWxmLm1hcmtlcigpCisgICAgICAgIHNldF9vYmogPSBzdGFja1ttYXJrIC0gMV0KKyAgICAgICAgaXRlbXMgPSBzdGFja1ttYXJrICsgMTpdCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0X29iaiwgc2V0KToKKyAgICAgICAgICAgIHNldF9vYmoudXBkYXRlKGl0ZW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkID0gc2V0X29iai5hZGQKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGFkZChpdGVtKQorICAgICAgICBkZWwgc3RhY2tbbWFyazpdCisgICAgZGlzcGF0Y2hbQURESVRFTVNbMF1dID0gbG9hZF9hZGRpdGVtcworCiAgICAgZGVmIGxvYWRfYnVpbGQoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawogICAgICAgICBzdGF0ZSA9IHN0YWNrLnBvcCgpCiAgICAgICAgIGluc3QgPSBzdGFja1stMV0KICAgICAgICAgc2V0c3RhdGUgPSBnZXRhdHRyKGluc3QsICJfX3NldHN0YXRlX18iLCBOb25lKQotICAgICAgICBpZiBzZXRzdGF0ZToKKyAgICAgICAgaWYgc2V0c3RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZXRzdGF0ZShzdGF0ZSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzbG90c3RhdGUgPSBOb25lCkBAIC0xMjcwLDg2ICsxNTA1LDQ2IEBACiAgICAgICAgIHJhaXNlIF9TdG9wKHZhbHVlKQogICAgIGRpc3BhdGNoW1NUT1BbMF1dID0gbG9hZF9zdG9wCiAKLSMgRW5jb2RlL2RlY29kZSBpbnRzLgotCi1kZWYgZW5jb2RlX2xvbmcoeCk6Ci0gICAgciIiIkVuY29kZSBhIGxvbmcgdG8gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KLSAgICBOb3RlIHRoYXQgMCBpcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZywgdG8gc2F2ZSBhCi0gICAgYnl0ZSBpbiB0aGUgTE9ORzEgcGlja2xpbmcgY29udGV4dC4KLQotICAgID4+PiBlbmNvZGVfbG9uZygwKQotICAgIGInJwotICAgID4+PiBlbmNvZGVfbG9uZygyNTUpCi0gICAgYidceGZmXHgwMCcKLSAgICA+Pj4gZW5jb2RlX2xvbmcoMzI3NjcpCi0gICAgYidceGZmXHg3ZicKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTI1NikKLSAgICBiJ1x4MDBceGZmJwotICAgID4+PiBlbmNvZGVfbG9uZygtMzI3NjgpCi0gICAgYidceDAwXHg4MCcKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTEyOCkKLSAgICBiJ1x4ODAnCi0gICAgPj4+IGVuY29kZV9sb25nKDEyNykKLSAgICBiJ1x4N2YnCi0gICAgPj4+Ci0gICAgIiIiCi0gICAgaWYgeCA9PSAwOgotICAgICAgICByZXR1cm4gYicnCi0gICAgbmJ5dGVzID0gKHguYml0X2xlbmd0aCgpID4+IDMpICsgMQotICAgIHJlc3VsdCA9IHgudG9fYnl0ZXMobmJ5dGVzLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQotICAgIGlmIHggPCAwIGFuZCBuYnl0ZXMgPiAxOgotICAgICAgICBpZiByZXN1bHRbLTFdID09IDB4ZmYgYW5kIChyZXN1bHRbLTJdICYgMHg4MCkgIT0gMDoKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LTFdCi0gICAgcmV0dXJuIHJlc3VsdAotCi1kZWYgZGVjb2RlX2xvbmcoZGF0YSk6Ci0gICAgciIiIkRlY29kZSBhbiBpbnQgZnJvbSBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgotCi0gICAgPj4+IGRlY29kZV9sb25nKGInJykKLSAgICAwCi0gICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4MDAiKQotICAgIDI1NQotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDdmIikKLSAgICAzMjc2NwotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceGZmIikKLSAgICAtMjU2Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ODAiKQotICAgIC0zMjc2OAotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ODAiKQotICAgIC0xMjgKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDdmIikKLSAgICAxMjcKLSAgICAiIiIKLSAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoZGF0YSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKIAogIyBTaG9ydGhhbmRzCiAKLWRlZiBkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6Ci0gICAgUGlja2xlcihmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQorZGVmIF9kdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CisgICAgX1BpY2tsZXIoZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKIAotZGVmIGR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CitkZWYgX2R1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CiAgICAgZiA9IGlvLkJ5dGVzSU8oKQotICAgIFBpY2tsZXIoZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKKyAgICBfUGlja2xlcihmLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQogICAgIHJlcyA9IGYuZ2V0dmFsdWUoKQogICAgIGFzc2VydCBpc2luc3RhbmNlKHJlcywgYnl0ZXNfdHlwZXMpCiAgICAgcmV0dXJuIHJlcwogCi1kZWYgbG9hZChmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgotICAgIHJldHVybiBVbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCitkZWYgX2xvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICByZXR1cm4gX1VucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKS5sb2FkKCkKIAotZGVmIGxvYWRzKHMsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CitkZWYgX2xvYWRzKHMsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CiAgICAgaWYgaXNpbnN0YW5jZShzLCBzdHIpOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbid0IGxvYWQgcGlja2xlIGZyb20gdW5pY29kZSBzdHJpbmciKQogICAgIGZpbGUgPSBpby5CeXRlc0lPKHMpCi0gICAgcmV0dXJuIFVucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKLSAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKS5sb2FkKCkKKyAgICByZXR1cm4gX1VucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKKyAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCiAKICMgVXNlIHRoZSBmYXN0ZXIgX3BpY2tsZSBpZiBwb3NzaWJsZQogdHJ5OgotICAgIGZyb20gX3BpY2tsZSBpbXBvcnQgKgorICAgIGZyb20gX3BpY2tsZSBpbXBvcnQgKAorICAgICAgICBQaWNrbGVFcnJvciwKKyAgICAgICAgUGlja2xpbmdFcnJvciwKKyAgICAgICAgVW5waWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVyLAorICAgICAgICBVbnBpY2tsZXIsCisgICAgICAgIGR1bXAsCisgICAgICAgIGR1bXBzLAorICAgICAgICBsb2FkLAorICAgICAgICBsb2FkcworICAgICkKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBQaWNrbGVyLCBVbnBpY2tsZXIgPSBfUGlja2xlciwgX1VucGlja2xlcgorICAgIGR1bXAsIGR1bXBzLCBsb2FkLCBsb2FkcyA9IF9kdW1wLCBfZHVtcHMsIF9sb2FkLCBfbG9hZHMKIAogIyBEb2N0ZXN0CiBkZWYgX3Rlc3QoKToKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGV0b29scy5weSBiL0xpYi9waWNrbGV0b29scy5weQppbmRleCA2MTJmYThmLi43NGI2NWNlIDEwMDY0NAotLS0gYS9MaWIvcGlja2xldG9vbHMucHkKKysrIGIvTGliL3BpY2tsZXRvb2xzLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAnJycKIAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGlvCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKQEAgLTM0LDExOSArMzUsMTE4IEBACiAjICAgYnkgYSBsYXRlciBHRVQuCiAKIAotIiIiCi0iQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQotY2FsbGVkIGFuIHVucGlja2xpbmcgbWFjaGluZSkuICBJdCdzIGEgc2VxdWVuY2Ugb2Ygb3Bjb2RlcywgaW50ZXJwcmV0ZWQgYnkgdGhlCi1QTSwgYnVpbGRpbmcgYW4gYXJiaXRyYXJpbHkgY29tcGxleCBQeXRob24gb2JqZWN0LgorIyAiQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQorIyBjYWxsZWQgYW4gdW5waWNrbGluZyBtYWNoaW5lKS4gIEl0J3MgYSBzZXF1ZW5jZSBvZiBvcGNvZGVzLCBpbnRlcnByZXRlZCBieSB0aGUKKyMgUE0sIGJ1aWxkaW5nIGFuIGFyYml0cmFyaWx5IGNvbXBsZXggUHl0aG9uIG9iamVjdC4KKyMKKyMgRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBQTSBpcyB2ZXJ5IHNpbXBsZTogIHRoZXJlIGFyZSBubyBsb29waW5nLCB0ZXN0aW5nLCBvcgorIyBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vIGFyaXRobWV0aWMgYW5kIG5vIGZ1bmN0aW9uIGNhbGxzLiAgT3Bjb2RlcyBhcmUKKyMgZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KKyMKKyMgVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCisjCisjIE1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCisjIGludGVnZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgd2hvc2UgdmFsdWUgaXMgZ290dGVuIGZyb20gYSBkZWNpbWFsIHN0cmluZworIyBsaXRlcmFsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgSU5UIG9wY29kZSBpbiB0aGUgcGlja2xlIGJ5dGVzdHJlYW0uICBPdGhlcgorIyBvcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcworIyB3aGF0ZXZlciBvYmplY3QgaXMgbGVmdCBvbiB0aGUgc3RhY2sgd2hlbiB0aGUgZmluYWwgU1RPUCBvcGNvZGUgaXMgZXhlY3V0ZWQuCisjCisjIFRoZSBtZW1vIGlzIHNpbXBseSBhbiBhcnJheSBvZiBvYmplY3RzLCBvciBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBkaWN0CisjIG1hcHBpbmcgbGl0dGxlIGludGVnZXJzIHRvIG9iamVjdHMuICBUaGUgbWVtbyBzZXJ2ZXMgYXMgdGhlIFBNJ3MgImxvbmcgdGVybQorIyBtZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQorIyBuYW1lcy4gIFNvbWUgb3Bjb2RlcyBwb3AgYSBzdGFjayBvYmplY3QgaW50byB0aGUgbWVtbyBhdCBhIGdpdmVuIGluZGV4LAorIyBhbmQgb3RoZXJzIHB1c2ggYSBtZW1vIG9iamVjdCBhdCBhIGdpdmVuIGluZGV4IG9udG8gdGhlIHN0YWNrIGFnYWluLgorIworIyBBdCBoZWFydCwgdGhhdCdzIGFsbCB0aGUgUE0gaGFzLiAgU3VidGxldGllcyBhcmlzZSBmb3IgdGhlc2UgcmVhc29uczoKKyMKKyMgKyBPYmplY3QgaWRlbnRpdHkuICBPYmplY3RzIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4LCBhbmQgc3Vib2JqZWN0cworIyAgIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCisjICAgdHdpY2UpLiAgSXQgY2FuIGJlIHZpdGFsIHRoYXQgdW5waWNrbGluZyByZWNyZWF0ZSBhbiBpc29tb3JwaGljIG9iamVjdAorIyAgIGdyYXBoLCBmYWl0aGZ1bGx5IHJlcHJvZHVjaW5nIHNoYXJpbmcuCisjCisjICsgUmVjdXJzaXZlIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgIkwgPSBbXTsgTC5hcHBlbmQoTCkiLCBMIGlzIGEKKyMgICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKKyMgICBwb2ludCwgYW5kIHNvbWUgc2VxdWVuY2VzIG9mIHBpY2tsZSBvcGNvZGVzIGFyZSBzdWJ0bGUgaW4gb3JkZXIgdG8KKyMgICBnZXQgdGhlIHJpZ2h0IHJlc3VsdCBpbiBhbGwgY2FzZXMuCisjCisjICsgVGhpbmdzIHBpY2tsZSBkb2Vzbid0IGtub3cgZXZlcnl0aGluZyBhYm91dC4gIEV4YW1wbGVzIG9mIHRoaW5ncyBwaWNrbGUKKyMgICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgorIyAgIHR5cGVzLCBsaWtlIGludHMgYW5kIHR1cGxlcy4gIFRoZXkgZ2VuZXJhbGx5IGhhdmUgb3Bjb2RlcyBkZWRpY2F0ZWQgdG8KKyMgICB0aGVtLiAgRm9yIHRoaW5ncyBsaWtlIG1vZHVsZSByZWZlcmVuY2VzIGFuZCBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkCisjICAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCisjICAgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHBpY2tsZSBwcm90b2NvbCBpbiBvcmRlciB0byBkbyBhIGJldHRlciAoZmFzdGVyLAorIyAgIGFuZC9vciBtb3JlIGNvbXBhY3QpIGpvYiBvbiB0aG9zZS4KKyMKKyMgKyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBtaWNyby1vcHRpbWl6YXRpb24uICBBcyBleHBsYWluZWQgYmVsb3csCisjICAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCisjICAgZ2V0IGludmVudGVkLiAgVGhlIHJlcGVydG9pcmUgb2YgdGhlIFBNIGp1c3Qga2VlcHMgZ3Jvd2luZyBvdmVyIHRpbWUuCisjICAgRm9yIGV4YW1wbGUsIHByb3RvY29sIDAgaGFkIHR3byBvcGNvZGVzIGZvciBidWlsZGluZyBQeXRob24gaW50ZWdlcnMgKElOVAorIyAgIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAorIyAgIGludGVnZXJzLCBhbmQgcHJvdG9jb2wgMiBhZGRlZCB0d28gbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2YKKyMgICBsb25nIGludGVnZXJzIChiZWZvcmUgcHJvdG9jb2wgMiwgdGhlIG9ubHkgd2F5cyB0byBwaWNrbGUgYSBQeXRob24gbG9uZworIyAgIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAorIyAgIHVucGlja2xpbmcpLiAgIk9wY29kZSBibG9hdCIgaXNuJ3Qgc28gbXVjaCBhIHN1YnRsZXR5IGFzIGEgc291cmNlIG9mCisjICAgd2VhcnlpbmcgY29tcGxpY2F0aW9uLgorIworIworIyBQaWNrbGUgcHJvdG9jb2xzOgorIworIyBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIG1lYW5pbmcgb2YgYSBwaWNrbGUgb3Bjb2RlIG5ldmVyIGNoYW5nZXMuICBJbnN0ZWFkIG5ldworIyBwaWNrbGUgb3Bjb2RlcyBnZXQgYWRkZWQsIGFuZCBlYWNoIHZlcnNpb24ncyB1bnBpY2tsZXIgY2FuIGhhbmRsZSBhbGwgdGhlCisjIHBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KKyMgYmUgcmVhZGFibGUgZm9yZXZlci4gIFRoZSBwaWNrbGVyIGNhbiBnZW5lcmFsbHkgYmUgdG9sZCB0byByZXN0cmljdCBpdHNlbGYgdG8KKyMgdGhlIHN1YnNldCBvZiBvcGNvZGVzIGF2YWlsYWJsZSB1bmRlciBwcmV2aW91cyBwcm90b2NvbCB2ZXJzaW9ucyB0b28sIHNvIHRoYXQKKyMgdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKKyMgdmVyc2lvbnMuICBIb3dldmVyLCBhIHBpY2tsZSBkb2VzIG5vdCBjb250YWluIGl0cyB2ZXJzaW9uIG51bWJlciBlbWJlZGRlZAorIyB3aXRoaW4gaXQuICBJZiBhbiBvbGRlciB1bnBpY2tsZXIgdHJpZXMgdG8gcmVhZCBhIHBpY2tsZSB1c2luZyBhIGxhdGVyCisjIHByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCisjIHRoZSBvbGRlciB1bnBpY2tsZXIpIG9wY29kZS4KKyMKKyMgVGhlIG9yaWdpbmFsIHBpY2tsZSB1c2VkIHdoYXQncyBub3cgY2FsbGVkICJwcm90b2NvbCAwIiwgYW5kIHdoYXQgd2FzIGNhbGxlZAorIyAidGV4dCBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoZSBlbnRpcmUgcGlja2xlIGJ5dGVzdHJlYW0gaXMgbWFkZSB1cCBvZgorIyBwcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCisjIFRoYXQncyB3aHkgaXQgd2FzIGNhbGxlZCB0ZXh0IG1vZGUuICBQcm90b2NvbCAwIGlzIHNtYWxsIGFuZCBlbGVnYW50LCBidXQKKyMgc29tZXRpbWVzIHBhaW5mdWxseSBpbmVmZmljaWVudC4KKyMKKyMgVGhlIHNlY29uZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGlzIG5vdyBjYWxsZWQgInByb3RvY29sIDEiLCBhbmQgd2FzIGNhbGxlZAorIyAiYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKKyMgY29uc2lzdGluZyBvZiBhcmJpdHJhcnkgYnl0ZXMsIGluY2x1ZGluZyBOVUwgYnl0ZXMgYW5kIHVucHJpbnRhYmxlICJoaWdoIGJpdCIKKyMgYnl0ZXMuICBCaW5hcnkgbW9kZSBwaWNrbGVzIGNhbiBiZSBzdWJzdGFudGlhbGx5IHNtYWxsZXIgdGhhbiBlcXVpdmFsZW50CisjIHRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCisjIGludCBhcyA0IGJ5dGVzIGZvbGxvd2luZyB0aGUgb3Bjb2RlLCB3aGljaCBpcyBjaGVhcGVyIHRvIHVucGlja2xlIHRoYW4gdGhlCisjIChwZXJoYXBzKSAxMS1jaGFyYWN0ZXIgZGVjaW1hbCBzdHJpbmcgYXR0YWNoZWQgdG8gSU5ULiAgUHJvdG9jb2wgMSBhbHNvIGFkZGVkCisjIGEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCisjIGFuZCBTRVRJVEVNUyksIGFuZCAic2hvcnRjdXQiIG9wY29kZXMgKGxpa2UgRU1QVFlfRElDVCBhbmQgRU1QVFlfVFVQTEUpLgorIworIyBUaGUgdGhpcmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBjYW1lIGluIFB5dGhvbiAyLjMsIGFuZCBpcyBjYWxsZWQgInByb3RvY29sCisjIDIiLiAgVGhpcyBhZGRlZDoKKyMKKyMgLSBBIGJldHRlciB3YXkgdG8gcGlja2xlIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyAoTkVXT0JKKS4KKyMKKyMgLSBBIHdheSBmb3IgYSBwaWNrbGUgdG8gaWRlbnRpZnkgaXRzIHByb3RvY29sIChQUk9UTykuCisjCisjIC0gVGltZS0gYW5kIHNwYWNlLSBlZmZpY2llbnQgcGlja2xpbmcgb2YgbG9uZyBpbnRzIChMT05HezEsNH0pLgorIworIyAtIFNob3J0Y3V0cyBmb3Igc21hbGwgdHVwbGVzIChUVVBMRXsxLDIsM319LgorIworIyAtIERlZGljYXRlZCBvcGNvZGVzIGZvciBib29scyAoTkVXVFJVRSwgTkVXRkFMU0UpLgorIworIyAtIFRoZSAiZXh0ZW5zaW9uIHJlZ2lzdHJ5IiwgYSB2ZWN0b3Igb2YgcG9wdWxhciBvYmplY3RzIHRoYXQgY2FuIGJlIHB1c2hlZAorIyAgIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKKyMgICB0aGUgcmVnaXN0cnkgY29udGVudHMgYXJlIHByZWRlZmluZWQgKHRoZXJlJ3Mgbm90aGluZyBha2luIHRvIHRoZSBtZW1vJ3MKKyMgICBQVVQpLgorIworIyBBbm90aGVyIGluZGVwZW5kZW50IGNoYW5nZSB3aXRoIFB5dGhvbiAyLjMgaXMgdGhlIGFiYW5kb25tZW50IG9mIGFueQorIyBwcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCisjIHBhcnRpZXMgLS0gbm8gc3VmZmljaWVudCBzZWN1cml0eSBhbmFseXNpcyBoYXMgYmVlbiBkb25lIHRvIGd1YXJhbnRlZQorIyB0aGlzIGFuZCB0aGVyZSBpc24ndCBhIHVzZSBjYXNlIHRoYXQgd2FycmFudHMgdGhlIGV4cGVuc2Ugb2Ygc3VjaCBhbgorIyBhbmFseXNpcy4KKyMKKyMgVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCisjIGNvcHlyZWcuc2FmZV9jb25zdHJ1Y3RvcnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdW5waWNrbGluZyBjb2RlLgorIyBSZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFyZSB0byBiZSBzZWVuCisjIGFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCiAKLUZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgUE0gaXMgdmVyeSBzaW1wbGU6ICB0aGVyZSBhcmUgbm8gbG9vcGluZywgdGVzdGluZywgb3IKLWNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm8gYXJpdGhtZXRpYyBhbmQgbm8gZnVuY3Rpb24gY2FsbHMuICBPcGNvZGVzIGFyZQotZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KLQotVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCi0KLU1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCi1pbnRlZ2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIHdob3NlIHZhbHVlIGlzIGdvdHRlbiBmcm9tIGEgZGVjaW1hbCBzdHJpbmcKLWxpdGVyYWwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBJTlQgb3Bjb2RlIGluIHRoZSBwaWNrbGUgYnl0ZXN0cmVhbS4gIE90aGVyCi1vcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcwotd2hhdGV2ZXIgb2JqZWN0IGlzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGZpbmFsIFNUT1Agb3Bjb2RlIGlzIGV4ZWN1dGVkLgotCi1UaGUgbWVtbyBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2JqZWN0cywgb3IgaXQgY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZGljdAotbWFwcGluZyBsaXR0bGUgaW50ZWdlcnMgdG8gb2JqZWN0cy4gIFRoZSBtZW1vIHNlcnZlcyBhcyB0aGUgUE0ncyAibG9uZyB0ZXJtCi1tZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQotbmFtZXMuICBTb21lIG9wY29kZXMgcG9wIGEgc3RhY2sgb2JqZWN0IGludG8gdGhlIG1lbW8gYXQgYSBnaXZlbiBpbmRleCwKLWFuZCBvdGhlcnMgcHVzaCBhIG1lbW8gb2JqZWN0IGF0IGEgZ2l2ZW4gaW5kZXggb250byB0aGUgc3RhY2sgYWdhaW4uCi0KLUF0IGhlYXJ0LCB0aGF0J3MgYWxsIHRoZSBQTSBoYXMuICBTdWJ0bGV0aWVzIGFyaXNlIGZvciB0aGVzZSByZWFzb25zOgotCi0rIE9iamVjdCBpZGVudGl0eS4gIE9iamVjdHMgY2FuIGJlIGFyYml0cmFyaWx5IGNvbXBsZXgsIGFuZCBzdWJvYmplY3RzCi0gIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCi0gIHR3aWNlKS4gIEl0IGNhbiBiZSB2aXRhbCB0aGF0IHVucGlja2xpbmcgcmVjcmVhdGUgYW4gaXNvbW9ycGhpYyBvYmplY3QKLSAgZ3JhcGgsIGZhaXRoZnVsbHkgcmVwcm9kdWNpbmcgc2hhcmluZy4KLQotKyBSZWN1cnNpdmUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBhZnRlciAiTCA9IFtdOyBMLmFwcGVuZChMKSIsIEwgaXMgYQotICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKLSAgcG9pbnQsIGFuZCBzb21lIHNlcXVlbmNlcyBvZiBwaWNrbGUgb3Bjb2RlcyBhcmUgc3VidGxlIGluIG9yZGVyIHRvCi0gIGdldCB0aGUgcmlnaHQgcmVzdWx0IGluIGFsbCBjYXNlcy4KLQotKyBUaGluZ3MgcGlja2xlIGRvZXNuJ3Qga25vdyBldmVyeXRoaW5nIGFib3V0LiAgRXhhbXBsZXMgb2YgdGhpbmdzIHBpY2tsZQotICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgotICB0eXBlcywgbGlrZSBpbnRzIGFuZCB0dXBsZXMuICBUaGV5IGdlbmVyYWxseSBoYXZlIG9wY29kZXMgZGVkaWNhdGVkIHRvCi0gIHRoZW0uICBGb3IgdGhpbmdzIGxpa2UgbW9kdWxlIHJlZmVyZW5jZXMgYW5kIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQKLSAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCi0gIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZG8gYSBiZXR0ZXIgKGZhc3RlciwKLSAgYW5kL29yIG1vcmUgY29tcGFjdCkgam9iIG9uIHRob3NlLgotCi0rIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIG1pY3JvLW9wdGltaXphdGlvbi4gIEFzIGV4cGxhaW5lZCBiZWxvdywKLSAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCi0gIGdldCBpbnZlbnRlZC4gIFRoZSByZXBlcnRvaXJlIG9mIHRoZSBQTSBqdXN0IGtlZXBzIGdyb3dpbmcgb3ZlciB0aW1lLgotICBGb3IgZXhhbXBsZSwgcHJvdG9jb2wgMCBoYWQgdHdvIG9wY29kZXMgZm9yIGJ1aWxkaW5nIFB5dGhvbiBpbnRlZ2VycyAoSU5UCi0gIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAotICBpbnRlZ2VycywgYW5kIHByb3RvY29sIDIgYWRkZWQgdHdvIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mCi0gIGxvbmcgaW50ZWdlcnMgKGJlZm9yZSBwcm90b2NvbCAyLCB0aGUgb25seSB3YXlzIHRvIHBpY2tsZSBhIFB5dGhvbiBsb25nCi0gIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAotICB1bnBpY2tsaW5nKS4gICJPcGNvZGUgYmxvYXQiIGlzbid0IHNvIG11Y2ggYSBzdWJ0bGV0eSBhcyBhIHNvdXJjZSBvZgotICB3ZWFyeWluZyBjb21wbGljYXRpb24uCi0KLQotUGlja2xlIHByb3RvY29sczoKLQotRm9yIGNvbXBhdGliaWxpdHksIHRoZSBtZWFuaW5nIG9mIGEgcGlja2xlIG9wY29kZSBuZXZlciBjaGFuZ2VzLiAgSW5zdGVhZCBuZXcKLXBpY2tsZSBvcGNvZGVzIGdldCBhZGRlZCwgYW5kIGVhY2ggdmVyc2lvbidzIHVucGlja2xlciBjYW4gaGFuZGxlIGFsbCB0aGUKLXBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KLWJlIHJlYWRhYmxlIGZvcmV2ZXIuICBUaGUgcGlja2xlciBjYW4gZ2VuZXJhbGx5IGJlIHRvbGQgdG8gcmVzdHJpY3QgaXRzZWxmIHRvCi10aGUgc3Vic2V0IG9mIG9wY29kZXMgYXZhaWxhYmxlIHVuZGVyIHByZXZpb3VzIHByb3RvY29sIHZlcnNpb25zIHRvbywgc28gdGhhdAotdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKLXZlcnNpb25zLiAgSG93ZXZlciwgYSBwaWNrbGUgZG9lcyBub3QgY29udGFpbiBpdHMgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQKLXdpdGhpbiBpdC4gIElmIGFuIG9sZGVyIHVucGlja2xlciB0cmllcyB0byByZWFkIGEgcGlja2xlIHVzaW5nIGEgbGF0ZXIKLXByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCi10aGUgb2xkZXIgdW5waWNrbGVyKSBvcGNvZGUuCi0KLVRoZSBvcmlnaW5hbCBwaWNrbGUgdXNlZCB3aGF0J3Mgbm93IGNhbGxlZCAicHJvdG9jb2wgMCIsIGFuZCB3aGF0IHdhcyBjYWxsZWQKLSJ0ZXh0IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhlIGVudGlyZSBwaWNrbGUgYnl0ZXN0cmVhbSBpcyBtYWRlIHVwIG9mCi1wcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCi1UaGF0J3Mgd2h5IGl0IHdhcyBjYWxsZWQgdGV4dCBtb2RlLiAgUHJvdG9jb2wgMCBpcyBzbWFsbCBhbmQgZWxlZ2FudCwgYnV0Ci1zb21ldGltZXMgcGFpbmZ1bGx5IGluZWZmaWNpZW50LgotCi1UaGUgc2Vjb25kIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgaXMgbm93IGNhbGxlZCAicHJvdG9jb2wgMSIsIGFuZCB3YXMgY2FsbGVkCi0iYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKLWNvbnNpc3Rpbmcgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBpbmNsdWRpbmcgTlVMIGJ5dGVzIGFuZCB1bnByaW50YWJsZSAiaGlnaCBiaXQiCi1ieXRlcy4gIEJpbmFyeSBtb2RlIHBpY2tsZXMgY2FuIGJlIHN1YnN0YW50aWFsbHkgc21hbGxlciB0aGFuIGVxdWl2YWxlbnQKLXRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCi1pbnQgYXMgNCBieXRlcyBmb2xsb3dpbmcgdGhlIG9wY29kZSwgd2hpY2ggaXMgY2hlYXBlciB0byB1bnBpY2tsZSB0aGFuIHRoZQotKHBlcmhhcHMpIDExLWNoYXJhY3RlciBkZWNpbWFsIHN0cmluZyBhdHRhY2hlZCB0byBJTlQuICBQcm90b2NvbCAxIGFsc28gYWRkZWQKLWEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCi1hbmQgU0VUSVRFTVMpLCBhbmQgInNob3J0Y3V0IiBvcGNvZGVzIChsaWtlIEVNUFRZX0RJQ1QgYW5kIEVNUFRZX1RVUExFKS4KLQotVGhlIHRoaXJkIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgY2FtZSBpbiBQeXRob24gMi4zLCBhbmQgaXMgY2FsbGVkICJwcm90b2NvbAotMiIuICBUaGlzIGFkZGVkOgotCi0tIEEgYmV0dGVyIHdheSB0byBwaWNrbGUgaW5zdGFuY2VzIG9mIG5ldy1zdHlsZSBjbGFzc2VzIChORVdPQkopLgotCi0tIEEgd2F5IGZvciBhIHBpY2tsZSB0byBpZGVudGlmeSBpdHMgcHJvdG9jb2wgKFBST1RPKS4KLQotLSBUaW1lLSBhbmQgc3BhY2UtIGVmZmljaWVudCBwaWNrbGluZyBvZiBsb25nIGludHMgKExPTkd7MSw0fSkuCi0KLS0gU2hvcnRjdXRzIGZvciBzbWFsbCB0dXBsZXMgKFRVUExFezEsMiwzfX0uCi0KLS0gRGVkaWNhdGVkIG9wY29kZXMgZm9yIGJvb2xzIChORVdUUlVFLCBORVdGQUxTRSkuCi0KLS0gVGhlICJleHRlbnNpb24gcmVnaXN0cnkiLCBhIHZlY3RvciBvZiBwb3B1bGFyIG9iamVjdHMgdGhhdCBjYW4gYmUgcHVzaGVkCi0gIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKLSAgdGhlIHJlZ2lzdHJ5IGNvbnRlbnRzIGFyZSBwcmVkZWZpbmVkICh0aGVyZSdzIG5vdGhpbmcgYWtpbiB0byB0aGUgbWVtbydzCi0gIFBVVCkuCi0KLUFub3RoZXIgaW5kZXBlbmRlbnQgY2hhbmdlIHdpdGggUHl0aG9uIDIuMyBpcyB0aGUgYWJhbmRvbm1lbnQgb2YgYW55Ci1wcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCi1wYXJ0aWVzIC0tIG5vIHN1ZmZpY2llbnQgc2VjdXJpdHkgYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSB0byBndWFyYW50ZWUKLXRoaXMgYW5kIHRoZXJlIGlzbid0IGEgdXNlIGNhc2UgdGhhdCB3YXJyYW50cyB0aGUgZXhwZW5zZSBvZiBzdWNoIGFuCi1hbmFseXNpcy4KLQotVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCi1jb3B5cmVnLnNhZmVfY29uc3RydWN0b3JzIGFyZSByZW1vdmVkIGZyb20gdGhlIHVucGlja2xpbmcgY29kZS4KLVJlZmVyZW5jZXMgdG8gdGhlc2UgdmFyaWFibGVzIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cgYXJlIHRvIGJlIHNlZW4KLWFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCi0iIiIKIAogIyBNZXRhLXJ1bGU6ICBEZXNjcmlwdGlvbnMgYXJlIHN0b3JlZCBpbiBpbnN0YW5jZXMgb2YgZGVzY3JpcHRvciBvYmplY3RzLAogIyB3aXRoIHBsYWluIGNvbnN0cnVjdG9ycy4gIE5vIG1ldGEtbGFuZ3VhZ2UgaXMgZGVmaW5lZCBmcm9tIHdoaWNoCkBAIC0xNjksNiArMTY5LDcgQEAKIFRBS0VOX0ZST01fQVJHVU1FTlQxICA9IC0yICAgIyBudW0gYnl0ZXMgaXMgMS1ieXRlIHVuc2lnbmVkIGludAogVEFLRU5fRlJPTV9BUkdVTUVOVDQgID0gLTMgICAjIG51bSBieXRlcyBpcyA0LWJ5dGUgc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50CiBUQUtFTl9GUk9NX0FSR1VNRU5UNFUgPSAtNCAgICMgbnVtIGJ5dGVzIGlzIDQtYnl0ZSB1bnNpZ25lZCBsaXR0bGUtZW5kaWFuIGludAorVEFLRU5fRlJPTV9BUkdVTUVOVDhVID0gLTUgICAjIG51bSBieXRlcyBpcyA4LWJ5dGUgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnQKIAogY2xhc3MgQXJndW1lbnREZXNjcmlwdG9yKG9iamVjdCk6CiAgICAgX19zbG90c19fID0gKApAQCAtMTc2LDcgKzE3Nyw3IEBACiAgICAgICAgICduYW1lJywKIAogICAgICAgICAjIGxlbmd0aCBvZiBhcmd1bWVudCwgaW4gYnl0ZXM7IGFuIGludDsgVVBfVE9fTkVXTElORSBhbmQKLSAgICAgICAgIyBUQUtFTl9GUk9NX0FSR1VNRU5UezEsNH0gYXJlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdmFyaWFibGUtbGVuZ3RoCisgICAgICAgICMgVEFLRU5fRlJPTV9BUkdVTUVOVHsxLDQsOH0gYXJlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdmFyaWFibGUtbGVuZ3RoCiAgICAgICAgICMgY2FzZXMKICAgICAgICAgJ24nLAogCkBAIC0xOTcsNyArMTk4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gaW4gKFVQX1RPX05FV0xJTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDRVKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0VSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ4VSkpCiAgICAgICAgIHNlbGYubiA9IG4KIAogICAgICAgICBzZWxmLnJlYWRlciA9IHJlYWRlcgpAQCAtMjg5LDYgKzI5MSwyNyBAQAogICAgICAgICAgICAgZG9jPSJGb3VyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciwgbGl0dGxlLWVuZGlhbi4iKQogCiAKK2RlZiByZWFkX3VpbnQ4KGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHJlYWRfdWludDgoaW8uQnl0ZXNJTyhiJ1x4ZmZceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJykpCisgICAgMjU1CisgICAgPj4+IHJlYWRfdWludDgoaW8uQnl0ZXNJTyhiJ1x4ZmYnICogOCkpID09IDIqKjY0LTEKKyAgICBUcnVlCisgICAgIiIiCisKKyAgICBkYXRhID0gZi5yZWFkKDgpCisgICAgaWYgbGVuKGRhdGEpID09IDg6CisgICAgICAgIHJldHVybiBfdW5wYWNrKCI8USIsIGRhdGEpWzBdCisgICAgcmFpc2UgVmFsdWVFcnJvcigibm90IGVub3VnaCBkYXRhIGluIHN0cmVhbSB0byByZWFkIHVpbnQ4IikKKwordWludDggPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICBuYW1lPSd1aW50OCcsCisgICAgICAgICAgICBuPTgsCisgICAgICAgICAgICByZWFkZXI9cmVhZF91aW50OCwKKyAgICAgICAgICAgIGRvYz0iRWlnaHQtYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyLCBsaXR0bGUtZW5kaWFuLiIpCisKKwogZGVmIHJlYWRfc3RyaW5nbmwoZiwgZGVjb2RlPVRydWUsIHN0cmlwcXVvdGVzPVRydWUpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC0zODIsNiArNDA1LDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2luZ2xlIGJsYW5rIHNlcGFyYXRpbmcgdGhlIHR3byBzdHJpbmdzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiIpCiAKKworZGVmIHJlYWRfc3RyaW5nMShmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDAiKSkKKyAgICAnJworICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDNhYmNkZWYiKSkKKyAgICAnYWJjJworICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDEoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gZGF0YS5kZWNvZGUoImxhdGluLTEiKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgc3RyaW5nMSwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCisgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKKworc3RyaW5nMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0ic3RyaW5nMSIsCisgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3N0cmluZzEsCisgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgc3RyaW5nLgorCisgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhhdCBtYW55CisgICAgICAgICAgICAgIGJ5dGVzLgorICAgICAgICAgICAgICAiIiIpCisKKwogZGVmIHJlYWRfc3RyaW5nNChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtNDE2LDI4ICs0NjksMjggQEAKICAgICAgICAgICAgICAgIiIiKQogCiAKLWRlZiByZWFkX3N0cmluZzEoZik6CitkZWYgcmVhZF9ieXRlczEoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KLSAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAwIikpCi0gICAgJycKLSAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAzYWJjZGVmIikpCi0gICAgJ2FiYycKKyAgICA+Pj4gcmVhZF9ieXRlczEoaW8uQnl0ZXNJTyhiIlx4MDAiKSkKKyAgICBiJycKKyAgICA+Pj4gcmVhZF9ieXRlczEoaW8uQnl0ZXNJTyhiIlx4MDNhYmNkZWYiKSkKKyAgICBiJ2FiYycKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQxKGYpCiAgICAgYXNzZXJ0IG4gPj0gMAogICAgIGRhdGEgPSBmLnJlYWQobikKICAgICBpZiBsZW4oZGF0YSkgPT0gbjoKLSAgICAgICAgcmV0dXJuIGRhdGEuZGVjb2RlKCJsYXRpbi0xIikKLSAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHN0cmluZzEsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQorICAgICAgICByZXR1cm4gZGF0YQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgYnl0ZXMxLCBidXQgb25seSAlZCByZW1haW4iICUKICAgICAgICAgICAgICAgICAgICAgIChuLCBsZW4oZGF0YSkpKQogCi1zdHJpbmcxID0gQXJndW1lbnREZXNjcmlwdG9yKAotICAgICAgICAgICAgICBuYW1lPSJzdHJpbmcxIiwKK2J5dGVzMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0iYnl0ZXMxIiwKICAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UMSwKLSAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfc3RyaW5nMSwKLSAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBzdHJpbmcuCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX2J5dGVzMSwKKyAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBieXRlcyBzdHJpbmcuCiAKICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcgdGhlIG51bWJlcgogICAgICAgICAgICAgICBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGF0IG1hbnkKQEAgLTQ4Nyw2ICs1NDAsNyBAQAogICAgICIiIgogCiAgICAgbiA9IHJlYWRfdWludDQoZikKKyAgICBhc3NlcnQgbiA+PSAwCiAgICAgaWYgbiA+IHN5cy5tYXhzaXplOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJieXRlczQgYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQogICAgIGRhdGEgPSBmLnJlYWQobikKQEAgLTUwNiw2ICs1NjAsNDAgQEAKICAgICAgICAgICAgICAgIiIiKQogCiAKK2RlZiByZWFkX2J5dGVzOChmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbywgc3RydWN0LCBzeXMKKyAgICA+Pj4gcmVhZF9ieXRlczgoaW8uQnl0ZXNJTyhiIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwYWJjIikpCisgICAgYicnCisgICAgPj4+IHJlYWRfYnl0ZXM4KGlvLkJ5dGVzSU8oYiJceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGFiY2RlZiIpKQorICAgIGInYWJjJworICAgID4+PiBiaWdzaXplOCA9IHN0cnVjdC5wYWNrKCI8USIsIHN5cy5tYXhzaXplLy8zKQorICAgID4+PiByZWFkX2J5dGVzOChpby5CeXRlc0lPKGJpZ3NpemU4ICsgYiJhYmNkZWYiKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgLi4uIGJ5dGVzIGluIGEgYnl0ZXM4LCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDgoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgaWYgbiA+IHN5cy5tYXhzaXplOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJieXRlczggYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIGJ5dGVzOCwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCisgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKKworYnl0ZXM4ID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICBuYW1lPSJieXRlczgiLAorICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQ4VSwKKyAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfYnl0ZXM4LAorICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIGJ5dGVzIHN0cmluZy4KKworICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnQgZ2l2aW5nCisgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMsIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgIiIiKQorCiBkZWYgcmVhZF91bmljb2Rlc3RyaW5nbmwoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTUzMSw2ICs2MTksNDYgQEAKICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUgc2VxdWVuY2VzLgogICAgICAgICAgICAgICAgICAgICAgICIiIikKIAorCitkZWYgcmVhZF91bmljb2Rlc3RyaW5nMShmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiBzID0gJ2FiY2RcdWFiY2QnCisgICAgPj4+IGVuYyA9IHMuZW5jb2RlKCd1dGYtOCcpCisgICAgPj4+IGVuYworICAgIGInYWJjZFx4ZWFceGFmXHg4ZCcKKyAgICA+Pj4gbiA9IGJ5dGVzKFtsZW4oZW5jKV0pICAjIGxpdHRsZS1lbmRpYW4gMS1ieXRlIGxlbmd0aAorICAgID4+PiB0ID0gcmVhZF91bmljb2Rlc3RyaW5nMShpby5CeXRlc0lPKG4gKyBlbmMgKyBiJ2p1bmsnKSkKKyAgICA+Pj4gcyA9PSB0CisgICAgVHJ1ZQorCisgICAgPj4+IHJlYWRfdW5pY29kZXN0cmluZzEoaW8uQnl0ZXNJTyhuICsgZW5jWzotMV0pKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBleHBlY3RlZCA3IGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzEsIGJ1dCBvbmx5IDYgcmVtYWluCisgICAgIiIiCisKKyAgICBuID0gcmVhZF91aW50MShmKQorICAgIGFzc2VydCBuID49IDAKKyAgICBkYXRhID0gZi5yZWFkKG4pCisgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgIHJldHVybiBzdHIoZGF0YSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzEsIGJ1dCBvbmx5ICVkICIKKyAgICAgICAgICAgICAgICAgICAgICJyZW1haW4iICUgKG4sIGxlbihkYXRhKSkpCisKK3VuaWNvZGVzdHJpbmcxID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJ1bmljb2Rlc3RyaW5nMSIsCisgICAgICAgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCisgICAgICAgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3VuaWNvZGVzdHJpbmcxLAorICAgICAgICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIFVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgICAgICAgICAgICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQtLSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nIC0tCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisKIGRlZiByZWFkX3VuaWNvZGVzdHJpbmc0KGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC01NTAsNiArNjc4LDcgQEAKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQ0KGYpCisgICAgYXNzZXJ0IG4gPj0gMAogICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5pY29kZXN0cmluZzQgYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQogICAgIGRhdGEgPSBmLnJlYWQobikKQEAgLTU3MSw2ICs3MDAsNDcgQEAKICAgICAgICAgICAgICAgICAgICAgIiIiKQogCiAKK2RlZiByZWFkX3VuaWNvZGVzdHJpbmc4KGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHMgPSAnYWJjZFx1YWJjZCcKKyAgICA+Pj4gZW5jID0gcy5lbmNvZGUoJ3V0Zi04JykKKyAgICA+Pj4gZW5jCisgICAgYidhYmNkXHhlYVx4YWZceDhkJworICAgID4+PiBuID0gYnl0ZXMoW2xlbihlbmMpXSkgKyBieXRlcyg3KSAgIyBsaXR0bGUtZW5kaWFuIDgtYnl0ZSBsZW5ndGgKKyAgICA+Pj4gdCA9IHJlYWRfdW5pY29kZXN0cmluZzgoaW8uQnl0ZXNJTyhuICsgZW5jICsgYidqdW5rJykpCisgICAgPj4+IHMgPT0gdAorICAgIFRydWUKKworICAgID4+PiByZWFkX3VuaWNvZGVzdHJpbmc4KGlvLkJ5dGVzSU8obiArIGVuY1s6LTFdKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgNyBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmc4LCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDgoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgaWYgbiA+IHN5cy5tYXhzaXplOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmljb2Rlc3RyaW5nOCBieXRlIGNvdW50ID4gc3lzLm1heHNpemU6ICVkIiAlIG4pCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gc3RyKGRhdGEsICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmc4LCBidXQgb25seSAlZCAiCisgICAgICAgICAgICAgICAgICAgICAicmVtYWluIiAlIChuLCBsZW4oZGF0YSkpKQorCit1bmljb2Rlc3RyaW5nOCA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0idW5pY29kZXN0cmluZzgiLAorICAgICAgICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQ4VSwKKyAgICAgICAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfdW5pY29kZXN0cmluZzgsCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgVW5pY29kZSBzdHJpbmcuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgICAgICAgICAgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC0tIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcgLS0KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhhdCBtYW55IGJ5dGVzLgorICAgICAgICAgICAgICAgICAgICAiIiIpCisKKwogZGVmIHJlYWRfZGVjaW1hbG5sX3Nob3J0KGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC04NjAsNiArMTAzMCwxNiBAQAogICAgICAgICAgICAgIG9idHlwZT1kaWN0LAogICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gZGljdCBvYmplY3QuIikKIAorcHlzZXQgPSBTdGFja09iamVjdCgKKyAgICAgICAgICAgIG5hbWU9InNldCIsCisgICAgICAgICAgICBvYnR5cGU9c2V0LAorICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBzZXQgb2JqZWN0LiIpCisKK3B5ZnJvemVuc2V0ID0gU3RhY2tPYmplY3QoCisgICAgICAgICAgICAgICAgICBuYW1lPSJmcm96ZW5zZXQiLAorICAgICAgICAgICAgICAgICAgb2J0eXBlPXNldCwKKyAgICAgICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gZnJvemVuc2V0IG9iamVjdC4iKQorCiBhbnlvYmplY3QgPSBTdGFja09iamVjdCgKICAgICAgICAgICAgICAgICBuYW1lPSdhbnknLAogICAgICAgICAgICAgICAgIG9idHlwZT1vYmplY3QsCkBAIC0xMTQzLDYgKzEzMjMsMTkgQEAKICAgICAgIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdCSU5CWVRFUzgnLAorICAgICAgY29kZT0nXHg4ZScsCisgICAgICBhcmc9Ynl0ZXM4LAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5Ynl0ZXNdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4KKworICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSA4LWJ5dGUgdW5zaWduZWQgaW50IGdpdmluZworICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBpcyB0aGF0IG1hbnkgYnl0ZXMsCisgICAgICB3aGljaCBhcmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcgY29udGVudC4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gc3BlbGwgTm9uZS4KIAogICAgIEkobmFtZT0nTk9ORScsCkBAIC0xMTkxLDYgKzEzODQsMTkgQEAKICAgICAgIHVudGlsIHRoZSBuZXh0IG5ld2xpbmUgY2hhcmFjdGVyLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nU0hPUlRfQklOVU5JQ09ERScsCisgICAgICBjb2RlPSdceDhjJywKKyAgICAgIGFyZz11bmljb2Rlc3RyaW5nMSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXVuaWNvZGVdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nIG9iamVjdC4KKworICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSAxLWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLiAgVGhlIHNlY29uZCBpcyB0aGF0IG1hbnkKKyAgICAgIGJ5dGVzLCBhbmQgaXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZy4KKyAgICAgICIiIiksCisKICAgICBJKG5hbWU9J0JJTlVOSUNPREUnLAogICAgICAgY29kZT0nWCcsCiAgICAgICBhcmc9dW5pY29kZXN0cmluZzQsCkBAIC0xMjA0LDYgKzE0MTAsMTkgQEAKICAgICAgIGJ5dGVzLCBhbmQgaXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZy4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J0JJTlVOSUNPREU4JywKKyAgICAgIGNvZGU9J1x4OGQnLAorICAgICAgYXJnPXVuaWNvZGVzdHJpbmc4LAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5dW5pY29kZV0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gVW5pY29kZSBzdHJpbmcgb2JqZWN0LgorCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDgtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcuICBUaGUgc2Vjb25kIGlzIHRoYXQgbWFueQorICAgICAgYnl0ZXMsIGFuZCBpcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nLgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBzcGVsbCBmbG9hdHMuCiAKICAgICBJKG5hbWU9J0ZMT0FUJywKQEAgLTE0MjksNiArMTY0OCw1NCBAQAogICAgICAgMSwgMiwgLi4uLCBuLCBhbmQgaW4gdGhhdCBvcmRlci4KICAgICAgICIiIiksCiAKKyAgICAjIFdheXMgdG8gYnVpbGQgc2V0cworCisgICAgSShuYW1lPSdFTVBUWV9TRVQnLAorICAgICAgY29kZT0nXHg4ZicsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXNldF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSJQdXNoIGFuIGVtcHR5IHNldC4iKSwKKworICAgIEkobmFtZT0nQURESVRFTVMnLAorICAgICAgY29kZT0nXHg5MCcsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bcHlzZXQsIG1hcmtvYmplY3QsIHN0YWNrc2xpY2VdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5c2V0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiQWRkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgaXRlbXMgdG8gYW4gZXhpc3Rpbmcgc2V0LgorCisgICAgICBUaGUgc2xpY2Ugb2YgdGhlIHN0YWNrIGZvbGxvd2luZyB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IGlzIHRha2VuIGFzCisgICAgICBhIHNlcXVlbmNlIG9mIGl0ZW1zLCBhZGRlZCB0byB0aGUgc2V0IGltbWVkaWF0ZWx5IHVuZGVyIHRoZSB0b3Btb3N0CisgICAgICBtYXJrb2JqZWN0LiAgRXZlcnl0aGluZyBhdCBhbmQgYWZ0ZXIgdGhlIHRvcG1vc3QgbWFya29iamVjdCBpcyBwb3BwZWQsCisgICAgICBsZWF2aW5nIHRoZSBtdXRhdGVkIHNldCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKworICAgICAgU3RhY2sgYmVmb3JlOiAgLi4uIHB5c2V0IG1hcmtvYmplY3QgaXRlbV8xIC4uLiBpdGVtX24KKyAgICAgIFN0YWNrIGFmdGVyOiAgIC4uLiBweXNldAorCisgICAgICB3aGVyZSBweXNldCBoYXMgYmVlbiBtb2RpZmllZCB2aWEgcHlzZXQuYWRkKGl0ZW1faSkgPSBpdGVtX2kgZm9yIGkgaW4KKyAgICAgIDEsIDIsIC4uLiwgbiwgYW5kIGluIHRoYXQgb3JkZXIuCisgICAgICAiIiIpLAorCisgICAgIyBXYXkgdG8gYnVpbGQgZnJvemVuc2V0cworCisgICAgSShuYW1lPSdGUk9aRU5TRVQnLAorICAgICAgY29kZT0nXHg5MScsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bbWFya29iamVjdCwgc3RhY2tzbGljZV0sCisgICAgICBzdGFja19hZnRlcj1bcHlmcm96ZW5zZXRdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJCdWlsZCBhIGZyb3plbnNldCBvdXQgb2YgdGhlIHRvcG1vc3Qgc2xpY2UsIGFmdGVyIG1hcmtvYmplY3QuCisKKyAgICAgIEFsbCB0aGUgc3RhY2sgZW50cmllcyBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdCBhcmUgcGxhY2VkIGludG8KKyAgICAgIGEgc2luZ2xlIFB5dGhvbiBmcm96ZW5zZXQsIHdoaWNoIHNpbmdsZSBmcm96ZW5zZXQgb2JqZWN0IHJlcGxhY2VzIGFsbAorICAgICAgb2YgdGhlIHN0YWNrIGZyb20gdGhlIHRvcG1vc3QgbWFya29iamVjdCBvbndhcmQuICBGb3IgZXhhbXBsZSwKKworICAgICAgU3RhY2sgYmVmb3JlOiAuLi4gbWFya29iamVjdCAxIDIgMworICAgICAgU3RhY2sgYWZ0ZXI6ICAuLi4gZnJvemVuc2V0KHsxLCAyLCAzfSkKKyAgICAgICIiIiksCisKICAgICAjIFN0YWNrIG1hbmlwdWxhdGlvbi4KIAogICAgIEkobmFtZT0nUE9QJywKQEAgLTE1NTAsNiArMTgxNywxOCBAQAogICAgICAgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnRlZ2VyIGZvbGxvd2luZy4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J01FTU9JWkUnLAorICAgICAgY29kZT0nXHg5NCcsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bYW55b2JqZWN0XSwKKyAgICAgIHN0YWNrX2FmdGVyPVthbnlvYmplY3RdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJTdG9yZSB0aGUgc3RhY2sgdG9wIGludG8gdGhlIG1lbW8uICBUaGUgc3RhY2sgaXMgbm90IHBvcHBlZC4KKworICAgICAgVGhlIGluZGV4IG9mIHRoZSBtZW1vIGxvY2F0aW9uIHRvIHdyaXRlIGlzIHRoZSBudW1iZXIgb2YKKyAgICAgIGVsZW1lbnRzIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSBtZW1vLgorICAgICAgIiIiKSwKKwogICAgICMgQWNjZXNzIHRoZSBleHRlbnNpb24gcmVnaXN0cnkgKHByZWRlZmluZWQgb2JqZWN0cykuICBBa2luIHRvIHRoZSBHRVQKICAgICAjIGZhbWlseS4KIApAQCAtMTYxNSw2ICsxODk0LDE1IEBACiAgICAgICBzdGFjaywgc28gdW5waWNrbGluZyBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIGZvcm0gb2YgbG9va3VwLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nU1RBQ0tfR0xPQkFMJywKKyAgICAgIGNvZGU9J1x4OTMnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W3B5dW5pY29kZSwgcHl1bmljb2RlXSwKKyAgICAgIHN0YWNrX2FmdGVyPVthbnlvYmplY3RdLAorICAgICAgcHJvdG89MCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgZ2xvYmFsIG9iamVjdCAobW9kdWxlLmF0dHIpIG9uIHRoZSBzdGFjay4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gYnVpbGQgb2JqZWN0cyBvZiBjbGFzc2VzIHBpY2tsZSBkb2Vzbid0IGtub3cgYWJvdXQgZGlyZWN0bHkKICAgICAjICh1c2VyLWRlZmluZWQgY2xhc3NlcykuICBJIGRlc3BhaXIgb2YgZG9jdW1lbnRpbmcgdGhpcyBhY2N1cmF0ZWx5CiAgICAgIyBhbmQgY29tcHJlaGVuc2libHkgLS0geW91IHJlYWxseSBoYXZlIHRvIHJlYWQgdGhlIHBpY2tsZSBjb2RlIHRvCkBAIC0xNzcxLDYgKzIwNTksMjEgQEAKICAgICAgIG9udG8gdGhlIHN0YWNrLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nTkVXT0JKX0VYJywKKyAgICAgIGNvZGU9J1x4OTInLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdCwgYW55b2JqZWN0LCBhbnlvYmplY3RdLAorICAgICAgc3RhY2tfYWZ0ZXI9W2FueW9iamVjdF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkJ1aWxkIGFuIG9iamVjdCBpbnN0YW5jZS4KKworICAgICAgVGhlIHN0YWNrIGJlZm9yZSBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBjb250YWluaW5nIGEgY2xhc3MKKyAgICAgIG9iamVjdCBmb2xsb3dlZCBieSBhbiBhcmd1bWVudCB0dXBsZSBhbmQgYnkgYSBrZXl3b3JkIGFyZ3VtZW50IGRpY3QKKyAgICAgICh0aGUgZGljdCBiZWluZyB0aGUgc3RhY2sgdG9wKS4gIENhbGwgdGhlc2UgY2xzIGFuZCBhcmdzLiAgVGhleSBhcmUKKyAgICAgIHBvcHBlZCBvZmYgdGhlIHN0YWNrLCBhbmQgdGhlIHZhbHVlIHJldHVybmVkIGJ5CisgICAgICBjbHMuX19uZXdfXyhjbHMsICphcmdzLCAqa3dhcmdzKSBpcyAgcHVzaGVkIGJhY2sgIG9udG8gdGhlIHN0YWNrLgorICAgICAgIiIiKSwKKwogICAgICMgTWFjaGluZSBjb250cm9sLgogCiAgICAgSShuYW1lPSdQUk9UTycsCkBAIC0xNzk4LDYgKzIxMDEsMjAgQEAKICAgICAgIGVtcHR5IHRoZW4uCiAgICAgICAiIiIpLAogCisgICAgIyBGcmFtaW5nIHN1cHBvcnQuCisKKyAgICBJKG5hbWU9J0ZSQU1FJywKKyAgICAgIGNvZGU9J1x4OTUnLAorICAgICAgYXJnPXVpbnQ4LAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W10sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUuCisKKyAgICAgIFRoZSB1bnBpY2tsZXIgbWF5IHVzZSB0aGlzIG9wY29kZSB0byBzYWZlbHkgcHJlZmV0Y2ggZGF0YSBmcm9tIGl0cworICAgICAgdW5kZXJseWluZyBzdHJlYW0uCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIGRlYWwgd2l0aCBwZXJzaXN0ZW50IElEcy4KIAogICAgIEkobmFtZT0nUEVSU0lEJywKQEAgLTE5MDQsNiArMjIyMSwzOCBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgcGlja2xlIG9wY29kZSBnZW5lcmF0b3IuCiAKK2RlZiBfZ2Vub3BzKGRhdGEsIHlpZWxkX2VuZF9wb3M9RmFsc2UpOgorICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXNfdHlwZXMpOgorICAgICAgICBkYXRhID0gaW8uQnl0ZXNJTyhkYXRhKQorCisgICAgaWYgaGFzYXR0cihkYXRhLCAidGVsbCIpOgorICAgICAgICBnZXRwb3MgPSBkYXRhLnRlbGwKKyAgICBlbHNlOgorICAgICAgICBnZXRwb3MgPSBsYW1iZGE6IE5vbmUKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHBvcyA9IGdldHBvcygpCisgICAgICAgIGNvZGUgPSBkYXRhLnJlYWQoMSkKKyAgICAgICAgb3Bjb2RlID0gY29kZTJvcC5nZXQoY29kZS5kZWNvZGUoImxhdGluLTEiKSkKKyAgICAgICAgaWYgb3Bjb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBjb2RlID09IGIiIjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBzZWVpbmcgU1RPUCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImF0IHBvc2l0aW9uICVzLCBvcGNvZGUgJXIgdW5rbm93biIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVua25vd24+IiBpZiBwb3MgaXMgTm9uZSBlbHNlIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUpKQorICAgICAgICBpZiBvcGNvZGUuYXJnIGlzIE5vbmU6CisgICAgICAgICAgICBhcmcgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmcgPSBvcGNvZGUuYXJnLnJlYWRlcihkYXRhKQorICAgICAgICBpZiB5aWVsZF9lbmRfcG9zOgorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBhcmcsIHBvcywgZ2V0cG9zKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MKKyAgICAgICAgaWYgY29kZSA9PSBiJy4nOgorICAgICAgICAgICAgYXNzZXJ0IG9wY29kZS5uYW1lID09ICdTVE9QJworICAgICAgICAgICAgYnJlYWsKKwogZGVmIGdlbm9wcyhwaWNrbGUpOgogICAgICIiIkdlbmVyYXRlIGFsbCB0aGUgb3Bjb2RlcyBpbiBhIHBpY2tsZS4KIApAQCAtMTkyNyw2MiArMjI3Niw0NyBAQAogICAgIHVzZWQuICBFbHNlICh0aGUgcGlja2xlIGRvZXNuJ3QgaGF2ZSBhIHRlbGwoKSwgYW5kIGl0J3Mgbm90IG9idmlvdXMgaG93CiAgICAgdG8gcXVlcnkgaXRzIGN1cnJlbnQgcG9zaXRpb24pIHBvcyBpcyBOb25lLgogICAgICIiIgotCi0gICAgaWYgaXNpbnN0YW5jZShwaWNrbGUsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgaW1wb3J0IGlvCi0gICAgICAgIHBpY2tsZSA9IGlvLkJ5dGVzSU8ocGlja2xlKQotCi0gICAgaWYgaGFzYXR0cihwaWNrbGUsICJ0ZWxsIik6Ci0gICAgICAgIGdldHBvcyA9IHBpY2tsZS50ZWxsCi0gICAgZWxzZToKLSAgICAgICAgZ2V0cG9zID0gbGFtYmRhOiBOb25lCi0KLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBwb3MgPSBnZXRwb3MoKQotICAgICAgICBjb2RlID0gcGlja2xlLnJlYWQoMSkKLSAgICAgICAgb3Bjb2RlID0gY29kZTJvcC5nZXQoY29kZS5kZWNvZGUoImxhdGluLTEiKSkKLSAgICAgICAgaWYgb3Bjb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICBpZiBjb2RlID09IGIiIjoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBzZWVpbmcgU1RPUCIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImF0IHBvc2l0aW9uICVzLCBvcGNvZGUgJXIgdW5rbm93biIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgaXMgTm9uZSBhbmQgIjx1bmtub3duPiIgb3IgcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSkpCi0gICAgICAgIGlmIG9wY29kZS5hcmcgaXMgTm9uZToKLSAgICAgICAgICAgIGFyZyA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFyZyA9IG9wY29kZS5hcmcucmVhZGVyKHBpY2tsZSkKLSAgICAgICAgeWllbGQgb3Bjb2RlLCBhcmcsIHBvcwotICAgICAgICBpZiBjb2RlID09IGInLic6Ci0gICAgICAgICAgICBhc3NlcnQgb3Bjb2RlLm5hbWUgPT0gJ1NUT1AnCi0gICAgICAgICAgICBicmVhaworICAgIHJldHVybiBfZ2Vub3BzKHBpY2tsZSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgcGlja2xlIG9wdGltaXplci4KIAogZGVmIG9wdGltaXplKHApOgogICAgICdPcHRpbWl6ZSBhIHBpY2tsZSBzdHJpbmcgYnkgcmVtb3ZpbmcgdW51c2VkIFBVVCBvcGNvZGVzJwotICAgIGdldHMgPSBzZXQoKSAgICAgICAgICAgICMgc2V0IG9mIGFyZ3MgdXNlZCBieSBhIEdFVCBvcGNvZGUKLSAgICBwdXRzID0gW10gICAgICAgICAgICAgICAjIChhcmcsIHN0YXJ0cG9zLCBzdG9wcG9zKSBmb3IgdGhlIFBVVCBvcGNvZGVzCi0gICAgcHJldnBvcyA9IE5vbmUgICAgICAgICAgIyBzZXQgdG8gcG9zIGlmIHByZXZpb3VzIG9wY29kZSB3YXMgYSBQVVQKLSAgICBmb3Igb3Bjb2RlLCBhcmcsIHBvcyBpbiBnZW5vcHMocCk6Ci0gICAgICAgIGlmIHByZXZwb3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBwdXRzLmFwcGVuZCgocHJldmFyZywgcHJldnBvcywgcG9zKSkKLSAgICAgICAgICAgIHByZXZwb3MgPSBOb25lCisgICAgbm90X2FfcHV0ID0gb2JqZWN0KCkKKyAgICBnZXRzID0geyBub3RfYV9wdXQgfSAgICAjIHNldCBvZiBhcmdzIHVzZWQgYnkgYSBHRVQgb3Bjb2RlCisgICAgb3Bjb2RlcyA9IFtdICAgICAgICAgICAgIyAoc3RhcnRwb3MsIHN0b3Bwb3MsIHB1dGlkKQorICAgIHByb3RvID0gMAorICAgIGZvciBvcGNvZGUsIGFyZywgcG9zLCBlbmRfcG9zIGluIF9nZW5vcHMocCwgeWllbGRfZW5kX3Bvcz1UcnVlKToKICAgICAgICAgaWYgJ1BVVCcgaW4gb3Bjb2RlLm5hbWU6Ci0gICAgICAgICAgICBwcmV2YXJnLCBwcmV2cG9zID0gYXJnLCBwb3MKLSAgICAgICAgZWxpZiAnR0VUJyBpbiBvcGNvZGUubmFtZToKLSAgICAgICAgICAgIGdldHMuYWRkKGFyZykKKyAgICAgICAgICAgIG9wY29kZXMuYXBwZW5kKChwb3MsIGVuZF9wb3MsIGFyZykpCisgICAgICAgIGVsaWYgJ0ZSQU1FJyBpbiBvcGNvZGUubmFtZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmICdHRVQnIGluIG9wY29kZS5uYW1lOgorICAgICAgICAgICAgICAgIGdldHMuYWRkKGFyZykKKyAgICAgICAgICAgIGVsaWYgb3Bjb2RlLm5hbWUgPT0gJ1BST1RPJzoKKyAgICAgICAgICAgICAgICBhc3NlcnQgcG9zID09IDAsIHBvcworICAgICAgICAgICAgICAgIHByb3RvID0gYXJnCisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocG9zLCBlbmRfcG9zLCBub3RfYV9wdXQpKQorICAgICAgICAgICAgcHJldnBvcywgcHJldmFyZyA9IHBvcywgTm9uZQogCi0gICAgIyBDb3B5IHRoZSBwaWNrbGUgc3RyaW5nIGV4Y2VwdCBmb3IgUFVUUyB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBHRVQKLSAgICBzID0gW10KLSAgICBpID0gMAotICAgIGZvciBhcmcsIHN0YXJ0LCBzdG9wIGluIHB1dHM6Ci0gICAgICAgIGogPSBzdG9wIGlmIChhcmcgaW4gZ2V0cykgZWxzZSBzdGFydAotICAgICAgICBzLmFwcGVuZChwW2k6al0pCi0gICAgICAgIGkgPSBzdG9wCi0gICAgcy5hcHBlbmQocFtpOl0pCi0gICAgcmV0dXJuIGInJy5qb2luKHMpCisgICAgIyBDb3B5IHRoZSBvcGNvZGVzIGV4Y2VwdCBmb3IgUFVUUyB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBHRVQKKyAgICBvdXQgPSBpby5CeXRlc0lPKCkKKyAgICBvcGNvZGVzID0gaXRlcihvcGNvZGVzKQorICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICMgV3JpdGUgdGhlIFBST1RPIGhlYWRlciBiZWZvcmUgYW55IGZyYW1pbmcKKyAgICAgICAgc3RhcnQsIHN0b3AsIF8gPSBuZXh0KG9wY29kZXMpCisgICAgICAgIG91dC53cml0ZShwW3N0YXJ0OnN0b3BdKQorICAgIGJ1ZiA9IHBpY2tsZS5fRnJhbWVyKG91dC53cml0ZSkKKyAgICBpZiBwcm90byA+PSA0OgorICAgICAgICBidWYuc3RhcnRfZnJhbWluZygpCisgICAgZm9yIHN0YXJ0LCBzdG9wLCBwdXRpZCBpbiBvcGNvZGVzOgorICAgICAgICBpZiBwdXRpZCBpbiBnZXRzOgorICAgICAgICAgICAgYnVmLndyaXRlKHBbc3RhcnQ6c3RvcF0pCisgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgYnVmLmVuZF9mcmFtaW5nKCkKKyAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgc3ltYm9saWMgcGlja2xlIGRpc2Fzc2VtYmxlci4KQEAgLTIwODIsMTcgKzI0MTYsMjAgQEAKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9IG1hcmttc2cgPSAibm8gTUFSSyBleGlzdHMgb24gc3RhY2siCiAKICAgICAgICAgIyBDaGVjayBmb3IgY29ycmVjdCBtZW1vIHVzYWdlLgotICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiKToKLSAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKLSAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgorICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiLCAiTUVNT0laRSIpOgorICAgICAgICAgICAgaWYgb3Bjb2RlLm5hbWUgPT0gIk1FTU9JWkUiOgorICAgICAgICAgICAgICAgIG1lbW9faWR4ID0gbGVuKG1lbW8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBtZW1vX2lkeCA9IGFyZworICAgICAgICAgICAgaWYgbWVtb19pZHggaW4gbWVtbzoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJtZW1vIGtleSAlciBhbHJlYWR5IGRlZmluZWQiICUgYXJnCiAgICAgICAgICAgICBlbGlmIG5vdCBzdGFjazoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJzdGFjayBpcyBlbXB0eSAtLSBjYW4ndCBzdG9yZSBpbnRvIG1lbW8iCiAgICAgICAgICAgICBlbGlmIHN0YWNrWy0xXSBpcyBtYXJrb2JqZWN0OgogICAgICAgICAgICAgICAgIGVycm9ybXNnID0gImNhbid0IHN0b3JlIG1hcmtvYmplY3QgaW4gdGhlIG1lbW8iCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1lbW9bYXJnXSA9IHN0YWNrWy0xXQotCisgICAgICAgICAgICAgICAgbWVtb1ttZW1vX2lkeF0gPSBzdGFja1stMV0KICAgICAgICAgZWxpZiBvcGNvZGUubmFtZSBpbiAoIkdFVCIsICJCSU5HRVQiLCAiTE9OR19CSU5HRVQiKToKICAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oYWZ0ZXIpID09IDEKZGlmZiAtLWdpdCBhL0xpYi9wa2d1dGlsLnB5IGIvTGliL3BrZ3V0aWwucHkKaW5kZXggMjBlNjQ5OC4uNDY4MmQyMiAxMDA2NDQKLS0tIGEvTGliL3BrZ3V0aWwucHkKKysrIGIvTGliL3BrZ3V0aWwucHkKQEAgLTEsMTIgKzEsMTQgQEAKICIiIlV0aWxpdGllcyB0byBzdXBwb3J0IHBhY2thZ2VzLiIiIgogCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaCBhcyBzaW1wbGVnZW5lcmljCiBpbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCi1mcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCitpbXBvcnQgc3lzCiBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCitpbXBvcnQgd2FybmluZ3MKIAogX19hbGxfXyA9IFsKICAgICAnZ2V0X2ltcG9ydGVyJywgJ2l0ZXJfaW1wb3J0ZXJzJywgJ2dldF9sb2FkZXInLCAnZmluZF9sb2FkZXInLApAQCAtMjAsNTMgKzIyLDEzIEBACiAgICAgaW1wb3J0IG1hcnNoYWwKIAogICAgIG1hZ2ljID0gc3RyZWFtLnJlYWQoNCkKLSAgICBpZiBtYWdpYyAhPSBpbXAuZ2V0X21hZ2ljKCk6CisgICAgaWYgbWFnaWMgIT0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgc3RyZWFtLnJlYWQoOCkgIyBTa2lwIHRpbWVzdGFtcCBhbmQgc2l6ZQogICAgIHJldHVybiBtYXJzaGFsLmxvYWQoc3RyZWFtKQogCiAKLWRlZiBzaW1wbGVnZW5lcmljKGZ1bmMpOgotICAgICIiIk1ha2UgYSB0cml2aWFsIHNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIiIiCi0gICAgcmVnaXN0cnkgPSB7fQotICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3KToKLSAgICAgICAgb2IgPSBhcmdzWzBdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNscyA9IG9iLl9fY2xhc3NfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBjbHMgPSB0eXBlKG9iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtcm8gPSBjbHMuX19tcm9fXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY2xhc3MgY2xzKGNscywgb2JqZWN0KToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIG1ybyA9IGNscy5fX21yb19fWzE6XQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBtcm8gPSBvYmplY3QsICAgIyBtdXN0IGJlIGFuIEV4dGVuc2lvbkNsYXNzIG9yIHNvbWUgc3VjaCAgOigKLSAgICAgICAgZm9yIHQgaW4gbXJvOgotICAgICAgICAgICAgaWYgdCBpbiByZWdpc3RyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cnlbdF0oKmFyZ3MsICoqa3cpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprdykKLSAgICB0cnk6Ci0gICAgICAgIHdyYXBwZXIuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCi0gICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgcGFzcyAgICAjIFB5dGhvbiAyLjMgZG9lc24ndCBhbGxvdyBmdW5jdGlvbnMgdG8gYmUgcmVuYW1lZAotCi0gICAgZGVmIHJlZ2lzdGVyKHR5cCwgZnVuYz1Ob25lKToKLSAgICAgICAgaWYgZnVuYyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3Rlcih0eXAsIGYpCi0gICAgICAgIHJlZ2lzdHJ5W3R5cF0gPSBmdW5jCi0gICAgICAgIHJldHVybiBmdW5jCi0KLSAgICB3cmFwcGVyLl9fZGljdF9fID0gZnVuYy5fX2RpY3RfXwotICAgIHdyYXBwZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXwotICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgotICAgIHJldHVybiB3cmFwcGVyCi0KLQogZGVmIHdhbGtfcGFja2FnZXMocGF0aD1Ob25lLCBwcmVmaXg9JycsIG9uZXJyb3I9Tm9uZSk6CiAgICAgIiIiWWllbGRzIChtb2R1bGVfbG9hZGVyLCBuYW1lLCBpc3BrZykgZm9yIGFsbCBtb2R1bGVzIHJlY3Vyc2l2ZWx5CiAgICAgb24gcGF0aCwgb3IsIGlmIHBhdGggaXMgTm9uZSwgYWxsIGFjY2Vzc2libGUgbW9kdWxlcy4KQEAgLTEyMSw4ICs4Myw3IEBACiAgICAgICAgICAgICAgICAgIyBkb24ndCB0cmF2ZXJzZSBwYXRoIGl0ZW1zIHdlJ3ZlIHNlZW4gYmVmb3JlCiAgICAgICAgICAgICAgICAgcGF0aCA9IFtwIGZvciBwIGluIHBhdGggaWYgbm90IHNlZW4ocCldCiAKLSAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB3YWxrX3BhY2thZ2VzKHBhdGgsIG5hbWUrJy4nLCBvbmVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgaXRlbQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2Fsa19wYWNrYWdlcyhwYXRoLCBuYW1lKycuJywgb25lcnJvcikKIAogCiBkZWYgaXRlcl9tb2R1bGVzKHBhdGg9Tm9uZSwgcHJlZml4PScnKToKQEAgLTE0OSwxMyArMTEwLDEyIEBACiAgICAgICAgICAgICAgICAgeWllbGQgaSwgbmFtZSwgaXNwa2cKIAogCi0jQHNpbXBsZWdlbmVyaWMKK0BzaW1wbGVnZW5lcmljCiBkZWYgaXRlcl9pbXBvcnRlcl9tb2R1bGVzKGltcG9ydGVyLCBwcmVmaXg9JycpOgogICAgIGlmIG5vdCBoYXNhdHRyKGltcG9ydGVyLCAnaXRlcl9tb2R1bGVzJyk6CiAgICAgICAgIHJldHVybiBbXQogICAgIHJldHVybiBpbXBvcnRlci5pdGVyX21vZHVsZXMocHJlZml4KQogCi1pdGVyX2ltcG9ydGVyX21vZHVsZXMgPSBzaW1wbGVnZW5lcmljKGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcykKIAogIyBJbXBsZW1lbnQgYSBmaWxlIHdhbGtlciBmb3IgdGhlIG5vcm1hbCBpbXBvcnRsaWIgcGF0aCBob29rCiBkZWYgX2l0ZXJfZmlsZV9maW5kZXJfbW9kdWxlcyhpbXBvcnRlciwgcHJlZml4PScnKToKQEAgLTIwMSw2ICsxNjEsMTMgQEAKIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcy5yZWdpc3RlcigKICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIsIF9pdGVyX2ZpbGVfZmluZGVyX21vZHVsZXMpCiAKKworZGVmIF9pbXBvcnRfaW1wKCk6CisgICAgZ2xvYmFsIGltcAorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpbXAgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnaW1wJykKKwogY2xhc3MgSW1wSW1wb3J0ZXI6CiAgICAgIiIiUEVQIDMwMiBJbXBvcnRlciB0aGF0IHdyYXBzIFB5dGhvbidzICJjbGFzc2ljIiBpbXBvcnQgYWxnb3JpdGhtCiAKQEAgLTIxMyw4ICsxODAsMTAgQEAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgotICAgICAgICB3YXJuKCJUaGlzIGVtdWxhdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ2ltcG9ydGxpYicgaW5zdGVhZCIsCisgICAgICAgIGdsb2JhbCBpbXAKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAogICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC0yNzksOCArMjQ4LDkgQEAKICAgICBjb2RlID0gc291cmNlID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bGxuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZXRjKToKLSAgICAgICAgd2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAotICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQogICAgICAgICBzZWxmLmZ1bGxuYW1lID0gZnVsbG5hbWUKQEAgLTM1MCw5ICszMjAsOCBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQogICAgICAgICAgICAgZWxpZiBtb2RfdHlwZT09aW1wLlBZX0NPTVBJTEVEOgogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZW5hbWVbOi0xXSk6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWVbOi0xXSwgJ3InKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IGYucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZVs6LTFdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IGYucmVhZCgpCiAgICAgICAgICAgICBlbGlmIG1vZF90eXBlPT1pbXAuUEtHX0RJUkVDVE9SWToKICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IHNlbGYuX2dldF9kZWxlZ2F0ZSgpLmdldF9zb3VyY2UoKQogICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKQEAgLTQ1NiwxMiArNDI1LDEyIEBACiAgICAgICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgIGVsc2U6Ci0gICAgICAgIGZvciBpbXBvcnRlciBpbiBzeXMubWV0YV9wYXRoOgotICAgICAgICAgICAgeWllbGQgaW1wb3J0ZXIKKyAgICAgICAgeWllbGQgZnJvbSBzeXMubWV0YV9wYXRoCiAgICAgICAgIHBhdGggPSBzeXMucGF0aAogICAgIGZvciBpdGVtIGluIHBhdGg6CiAgICAgICAgIHlpZWxkIGdldF9pbXBvcnRlcihpdGVtKQogCisKIGRlZiBnZXRfbG9hZGVyKG1vZHVsZV9vcl9uYW1lKToKICAgICAiIiJHZXQgYSBQRVAgMzAyICJsb2FkZXIiIG9iamVjdCBmb3IgbW9kdWxlX29yX25hbWUKIApAQCAtNTg5LDE5ICs1NTgsMjAgQEAKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGtnZmlsZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ocGtnZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBvcGVuICVzOiAlc1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnZmlsZSwgbXNnKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5hcHBlbmQobGluZSkgIyBEb24ndCBjaGVjayBmb3IgZXhpc3RlbmNlIQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgb3IgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGxpbmUpICMgRG9uJ3QgY2hlY2sgZm9yIGV4aXN0ZW5jZSEKIAogICAgIHJldHVybiBwYXRoCiAKKwogZGVmIGdldF9kYXRhKHBhY2thZ2UsIHJlc291cmNlKToKICAgICAiIiJHZXQgYSByZXNvdXJjZSBmcm9tIGEgcGFja2FnZS4KIApAQCAtNjI0LDEwICs1OTQsMTUgQEAKICAgICB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGdldF9kYXRhKCksIHRoZW4gTm9uZSBpcyByZXR1cm5lZC4KICAgICAiIiIKIAotICAgIGxvYWRlciA9IGdldF9sb2FkZXIocGFja2FnZSkKKyAgICBzcGVjID0gaW1wb3J0bGliLmZpbmRfc3BlYyhwYWNrYWdlKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgogICAgIGlmIGxvYWRlciBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKGxvYWRlciwgJ2dldF9kYXRhJyk6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yIGxvYWRlci5sb2FkX21vZHVsZShwYWNrYWdlKQorICAgICMgWFhYIG5lZWRzIHRlc3QKKyAgICBtb2QgPSAoc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yCisgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkpCiAgICAgaWYgbW9kIGlzIE5vbmUgb3Igbm90IGhhc2F0dHIobW9kLCAnX19maWxlX18nKToKICAgICAgICAgcmV0dXJuIE5vbmUKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L0lOLnB5IGIvTGliL3BsYXQtb3MyZW14L0lOLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNhZTI0Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9JTi5weQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9uZXRpbmV0L2luLmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy9wYXJhbS5oCi1QQUdFX1NJWkUgPSAweDEwMDAKLUhaID0gMTAwCi1NQVhOQU1MRU4gPSAyNjAKLU1BWFBBVEhMRU4gPSAyNjAKLWRlZiBodG9ubChYKTogcmV0dXJuIF9zd2FwbChYKQotCi1kZWYgbnRvaGwoWCk6IHJldHVybiBfc3dhcGwoWCkKLQotZGVmIGh0b25zKFgpOiByZXR1cm4gX3N3YXBzKFgpCi0KLWRlZiBudG9ocyhYKTogcmV0dXJuIF9zd2FwcyhYKQotCi1JUFBST1RPX0lQID0gMAotSVBQUk9UT19JQ01QID0gMQotSVBQUk9UT19JR01QID0gMgotSVBQUk9UT19HR1AgPSAzCi1JUFBST1RPX1RDUCA9IDYKLUlQUFJPVE9fRUdQID0gOAotSVBQUk9UT19QVVAgPSAxMgotSVBQUk9UT19VRFAgPSAxNwotSVBQUk9UT19JRFAgPSAyMgotSVBQUk9UT19UUCA9IDI5Ci1JUFBST1RPX0VPTiA9IDgwCi1JUFBST1RPX1JBVyA9IDI1NQotSVBQUk9UT19NQVggPSAyNTYKLUlQUE9SVF9SRVNFUlZFRCA9IDEwMjQKLUlQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCi1kZWYgSU5fQ0xBU1NBKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ODAwMDAwMDApID09IDApCi0KLUlOX0NMQVNTQV9ORVQgPSAweGZmMDAwMDAwCi1JTl9DTEFTU0FfTlNISUZUID0gMjQKLUlOX0NMQVNTQV9IT1NUID0gMHgwMGZmZmZmZgotSU5fQ0xBU1NBX01BWCA9IDEyOAotZGVmIElOX0NMQVNTQihpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQotCi1JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMAotSU5fQ0xBU1NCX05TSElGVCA9IDE2Ci1JTl9DTEFTU0JfSE9TVCA9IDB4MDAwMGZmZmYKLUlOX0NMQVNTQl9NQVggPSA2NTUzNgotZGVmIElOX0NMQVNTQyhpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGMwMDAwMDAwKQotCi1JTl9DTEFTU0NfTkVUID0gMHhmZmZmZmYwMAotSU5fQ0xBU1NDX05TSElGVCA9IDgKLUlOX0NMQVNTQ19IT1NUID0gMHgwMDAwMDBmZgotZGVmIElOX0NMQVNTRChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1JTl9DTEFTU0RfTkVUID0gMHhmMDAwMDAwMAotSU5fQ0xBU1NEX05TSElGVCA9IDI4Ci1JTl9DTEFTU0RfSE9TVCA9IDB4MGZmZmZmZmYKLWRlZiBJTl9NVUxUSUNBU1QoaSk6IHJldHVybiBJTl9DTEFTU0QoaSkKLQotZGVmIElOX0VYUEVSSU1FTlRBTChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1kZWYgSU5fQkFEQ0xBU1MoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKLQotSU5BRERSX0FOWSA9IDB4MDAwMDAwMDAKLUlOQUREUl9MT09QQkFDSyA9IDB4N2YwMDAwMDEKLUlOQUREUl9CUk9BRENBU1QgPSAweGZmZmZmZmZmCi1JTkFERFJfTk9ORSA9IDB4ZmZmZmZmZmYKLUlOQUREUl9VTlNQRUNfR1JPVVAgPSAweGUwMDAwMDAwCi1JTkFERFJfQUxMSE9TVFNfR1JPVVAgPSAweGUwMDAwMDAxCi1JTkFERFJfTUFYX0xPQ0FMX0dST1VQID0gMHhlMDAwMDBmZgotSU5fTE9PUEJBQ0tORVQgPSAxMjcKLUlQX09QVElPTlMgPSAxCi1JUF9NVUxUSUNBU1RfSUYgPSAyCi1JUF9NVUxUSUNBU1RfVFRMID0gMwotSVBfTVVMVElDQVNUX0xPT1AgPSA0Ci1JUF9BRERfTUVNQkVSU0hJUCA9IDUKLUlQX0RST1BfTUVNQkVSU0hJUCA9IDYKLUlQX0hEUklOQ0wgPSAyCi1JUF9UT1MgPSAzCi1JUF9UVEwgPSA0Ci1JUF9SRUNWT1BUUyA9IDUKLUlQX1JFQ1ZSRVRPUFRTID0gNgotSVBfUkVDVkRTVEFERFIgPSA3Ci1JUF9SRVRPUFRTID0gOAotSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMID0gMQotSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCA9IDEKLUlQX01BWF9NRU1CRVJTSElQUyA9IDIwCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5IGIvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNTk0YS4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9zeXMvc29ja2V0LmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy90eXBlcy5oCi1GRF9TRVRTSVpFID0gMjU2Ci0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvdWlvLmgKLUZSRUFEID0gMQotRldSSVRFID0gMgotU09DS19TVFJFQU0gPSAxCi1TT0NLX0RHUkFNID0gMgotU09DS19SQVcgPSAzCi1TT0NLX1JETSA9IDQKLVNPQ0tfU0VRUEFDS0VUID0gNQotU09fREVCVUcgPSAweDAwMDEKLVNPX0FDQ0VQVENPTk4gPSAweDAwMDIKLVNPX1JFVVNFQUREUiA9IDB4MDAwNAotU09fS0VFUEFMSVZFID0gMHgwMDA4Ci1TT19ET05UUk9VVEUgPSAweDAwMTAKLVNPX0JST0FEQ0FTVCA9IDB4MDAyMAotU09fVVNFTE9PUEJBQ0sgPSAweDAwNDAKLVNPX0xJTkdFUiA9IDB4MDA4MAotU09fT09CSU5MSU5FID0gMHgwMTAwCi1TT19MX0JST0FEQ0FTVCA9IDB4MDIwMAotU09fUkNWX1NIVVRET1dOID0gMHgwNDAwCi1TT19TTkRfU0hVVERPV04gPSAweDA4MDAKLVNPX1NOREJVRiA9IDB4MTAwMQotU09fUkNWQlVGID0gMHgxMDAyCi1TT19TTkRMT1dBVCA9IDB4MTAwMwotU09fUkNWTE9XQVQgPSAweDEwMDQKLVNPX1NORFRJTUVPID0gMHgxMDA1Ci1TT19SQ1ZUSU1FTyA9IDB4MTAwNgotU09fRVJST1IgPSAweDEwMDcKLVNPX1RZUEUgPSAweDEwMDgKLVNPX09QVElPTlMgPSAweDEwMTAKLVNPTF9TT0NLRVQgPSAweGZmZmYKLUFGX1VOU1BFQyA9IDAKLUFGX1VOSVggPSAxCi1BRl9JTkVUID0gMgotQUZfSU1QTElOSyA9IDMKLUFGX1BVUCA9IDQKLUFGX0NIQU9TID0gNQotQUZfTlMgPSA2Ci1BRl9OQlMgPSA3Ci1BRl9JU08gPSA3Ci1BRl9PU0kgPSBBRl9JU08KLUFGX0VDTUEgPSA4Ci1BRl9EQVRBS0lUID0gOQotQUZfQ0NJVFQgPSAxMAotQUZfU05BID0gMTEKLUFGX0RFQ25ldCA9IDEyCi1BRl9ETEkgPSAxMwotQUZfTEFUID0gMTQKLUFGX0hZTElOSyA9IDE1Ci1BRl9BUFBMRVRBTEsgPSAxNgotQUZfTkIgPSAxNwotQUZfTkVUQklPUyA9IEFGX05CCi1BRl9PUzIgPSBBRl9VTklYCi1BRl9NQVggPSAxOAotUEZfVU5TUEVDID0gQUZfVU5TUEVDCi1QRl9VTklYID0gQUZfVU5JWAotUEZfSU5FVCA9IEFGX0lORVQKLVBGX0lNUExJTksgPSBBRl9JTVBMSU5LCi1QRl9QVVAgPSBBRl9QVVAKLVBGX0NIQU9TID0gQUZfQ0hBT1MKLVBGX05TID0gQUZfTlMKLVBGX05CUyA9IEFGX05CUwotUEZfSVNPID0gQUZfSVNPCi1QRl9PU0kgPSBBRl9JU08KLVBGX0VDTUEgPSBBRl9FQ01BCi1QRl9EQVRBS0lUID0gQUZfREFUQUtJVAotUEZfQ0NJVFQgPSBBRl9DQ0lUVAotUEZfU05BID0gQUZfU05BCi1QRl9ERUNuZXQgPSBBRl9ERUNuZXQKLVBGX0RMSSA9IEFGX0RMSQotUEZfTEFUID0gQUZfTEFUCi1QRl9IWUxJTksgPSBBRl9IWUxJTksKLVBGX0FQUExFVEFMSyA9IEFGX0FQUExFVEFMSwotUEZfTkIgPSBBRl9OQgotUEZfTkVUQklPUyA9IEFGX05CCi1QRl9PUzIgPSBBRl9VTklYCi1QRl9NQVggPSBBRl9NQVgKLVNPTUFYQ09OTiA9IDUKLU1TR19PT0IgPSAweDEKLU1TR19QRUVLID0gMHgyCi1NU0dfRE9OVFJPVVRFID0gMHg0Ci1NU0dfRU9SID0gMHg4Ci1NU0dfVFJVTkMgPSAweDEwCi1NU0dfQ1RSVU5DID0gMHgyMAotTVNHX1dBSVRBTEwgPSAweDQwCi1NU0dfTUFYSU9WTEVOID0gMTYKLVNDTV9SSUdIVFMgPSAweDAxCi1NVF9GUkVFID0gMAotTVRfREFUQSA9IDEKLU1UX0hFQURFUiA9IDIKLU1UX1NPQ0tFVCA9IDMKLU1UX1BDQiA9IDQKLU1UX1JUQUJMRSA9IDUKLU1UX0hUQUJMRSA9IDYKLU1UX0FUQUJMRSA9IDcKLU1UX1NPTkFNRSA9IDgKLU1UX1pPTUJJRSA9IDkKLU1UX1NPT1BUUyA9IDEwCi1NVF9GVEFCTEUgPSAxMQotTVRfUklHSFRTID0gMTIKLU1UX0lGQUREUiA9IDEzCi1NQVhTT0NLRVRTID0gMjA0OApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weSBiL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTZiNTQuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMgX2VteF9saW5rLnB5Ci0KLSMgV3JpdHRlbiBieSBBbmRyZXcgSSBNYWNJbnR5cmUsIERlY2VtYmVyIDIwMDIuCi0KLSIiIl9lbXhfbGluay5weSBpcyBhIHNpbXBsaXN0aWMgZW11bGF0aW9uIG9mIHRoZSBVbml4IGxpbmsoMikgbGlicmFyeSByb3V0aW5lCi1mb3IgY3JlYXRpbmcgc28tY2FsbGVkIGhhcmQgbGlua3MuICBJdCBpcyBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBpbnRvCi10aGUgb3MgbW9kdWxlIGluIHBsYWNlIG9mIHRoZSB1bmltcGxlbWVudGVkIChvbiBPUy8yKSBQb3NpeCBsaW5rKCkKLWZ1bmN0aW9uIChvcy5saW5rKCkpLgotCi1XZSBkbyB0aGlzIG9uIE9TLzIgYnkgaW1wbGVtZW50aW5nIGEgZmlsZSBjb3B5LCB3aXRoIGxpbmsoMikgc2VtYW50aWNzOi0KLSAgLSB0aGUgdGFyZ2V0IGNhbm5vdCBhbHJlYWR5IGV4aXN0OwotICAtIHdlIGhvcGUgdGhhdCB0aGUgYWN0dWFsIGZpbGUgb3BlbiAoaWYgc3VjY2Vzc2Z1bCkgaXMgYWN0dWFsbHkKLSAgICBhdG9taWMuLi4KLQotTGltaXRhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC9pbXBsZW1lbnRhdGlvbiBpbmNsdWRlOi0KLSAgLSBubyBzdXBwb3J0IGZvciBjb3JyZWN0IGxpbmsgY291bnRzIChFTVggc3RhdCh0YXJnZXQpLnN0X25saW5rCi0gICAgaXMgYWx3YXlzIDEpOwotICAtIHRocmVhZCBzYWZldHkgdW5kZWZpbmVkOwotICAtIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucyAocit3KSB1c2VkLCBjYW4ndCBiZSBvdmVyLXJpZGRlbjsKLSAgLSBpbXBsZW1lbnRlZCBpbiBQeXRob24gc28gY29tcGFyYXRpdmVseSBzbG93LCBlc3BlY2lhbGx5IGZvciBsYXJnZQotICAgIHNvdXJjZSBmaWxlczsKLSAgLSBuZWVkIHN1ZmZpY2llbnQgZnJlZSBkaXNrIHNwYWNlIHRvIHN0b3JlIHRoZSBjb3B5LgotCi1CZWhhdmlvdXI6LQotICAtIGFueSBleGNlcHRpb24gc2hvdWxkIHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyOwotICAtIHdhbnQgdGFyZ2V0IHRvIGJlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIHNvdXJjZSwgc28gdXNlIGJpbmFyeSBtb2RlOwotICAtIHJldHVybnMgTm9uZSwgc2FtZSBhcyBvcy5saW5rKCkgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gcG9zaXhtb2R1bGUuYzsKLSAgLSB0YXJnZXQgcmVtb3ZlZCBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIHdoZXJlIHBvc3NpYmxlOwotICAtIGdpdmVuIHRoZSBtb3RpdmF0aW9uIHRvIHdyaXRlIHRoaXMgZW11bGF0aW9uIGNhbWUgZnJvbSB0cnlpbmcgdG8KLSAgICBzdXBwb3J0IGEgVW5peCByZXNvdXJjZSBsb2NrIGltcGxlbWVudGF0aW9uLCB3aGVyZSBtaW5pbWFsIG92ZXJoZWFkCi0gICAgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSB0YXJnZXQgaXMgZGVzaXJhYmxlIGFuZCB0aGUgZmlsZXMgYXJlIHNtYWxsLAotICAgIHdlIHJlYWQgYSBzb3VyY2UgYmxvY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSB0YXJnZXQgc28gdGhhdAotICAgIHdlJ3JlIHJlYWR5IHRvIGltbWVkaWF0ZWx5IHdyaXRlIHNvbWUgZGF0YSBpbnRvIGl0LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi0KLV9fYWxsX18gPSBbJ2xpbmsnXQotCi1kZWYgbGluayhzb3VyY2UsIHRhcmdldCk6Ci0gICAgIiIibGluayhzb3VyY2UsIHRhcmdldCkgLT4gTm9uZQotCi0gICAgQXR0ZW1wdCB0byBoYXJkIGxpbmsgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lLgotICAgIE9uIE9TLzIsIHRoaXMgY3JlYXRlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICIiIgotCi0gICAgcyA9IG9zLm9wZW4oc291cmNlLCBvcy5PX1JET05MWSB8IG9zLk9fQklOQVJZKQotICAgIGlmIG9zLmlzYXR0eShzKToKLSAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FWERFViwgJ0Nyb3NzLWRldmljZSBsaW5rJykKLSAgICBkYXRhID0gb3MucmVhZChzLCAxMDI0KQotCi0gICAgdHJ5OgotICAgICAgICB0ID0gb3Mub3Blbih0YXJnZXQsIG9zLk9fV1JPTkxZIHwgb3MuT19CSU5BUlkgfCBvcy5PX0NSRUFUIHwgb3MuT19FWENMKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBvcy5jbG9zZShzKQotICAgICAgICByYWlzZQotCi0gICAgdHJ5OgotICAgICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgICAgb3Mud3JpdGUodCwgZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHMsIDEwMjQpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIG9zLmNsb3NlKHMpCi0gICAgICAgIG9zLmNsb3NlKHQpCi0gICAgICAgIG9zLnVubGluayh0YXJnZXQpCi0gICAgICAgIHJhaXNlCi0KLSAgICBvcy5jbG9zZShzKQotICAgIG9zLmNsb3NlKHQpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRyeToKLSAgICAgICAgbGluayhzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHByaW50KCdVc2FnZTogZW14X2xpbmsgPHNvdXJjZT4gPHRhcmdldD4nKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCgnZW14X2xpbms6ICVzJyAlIHN0cihzeXMuZXhjX2luZm8oKVsxXSkpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5IGIvTGliL3BsYXQtb3MyZW14L2dycC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2M2VmOC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGdycCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCi0iIiJSZXBsYWNlbWVudCBmb3IgZ3JwIHN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUsIGludGVuZGVkIGZvciB1c2Ugb24KLU9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBkb24ndCBub3JtYWxseSBoYXZlIGFuIC9ldGMvZ3JvdXAgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggZ3JvdXAgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNCBmaWVsZHMgcGVyCi1yZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSBncm91cCBuYW1lIChzdHJpbmcpCi0gIC0gZ3JvdXAgcGFzc3dvcmQgKG9wdGlvbmFsIGVuY3J5cHRlZCBzdHJpbmcpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgbWVtYmVycyAoY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgdXNlcmlkcywgd2l0aCBubyBzcGFjZXMpCi0KLU5vdGUgdGhhdCBtZW1iZXJzIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBncm91cCBmaWxlIGZvciBncm91cHMgdGhhdAotYXJlbid0IHRoZWlyIHByaW1hcnkgZ3JvdXBzLgotKHNlZSB0aGUgc2VjdGlvbiA4LjIgb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSkKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIFVuaXggaW1wbGVtZW50YXRpb24gYnkKLWFsbG93aW5nIHVzZSBvZiB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIC0gJzsnIG9uIE9TLzIsCi1ET1MgYW5kIE1TLVdpbmRvd3MgLSBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGluIGFkZGl0aW9uIHRvIHRoZSBVbml4Ci1zdGFuZGFyZCAiOiIuCi0KLVRoZSBtb2R1bGUgbG9va3MgZm9yIHRoZSBncm91cCBkYXRhYmFzZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucwotKGluIG9yZGVyIGZpcnN0IHRvIGxhc3QpOgotICAtICR7RVRDX0dST1VQfSAgICAgICAgICAgICAgKG9yICVFVENfR1JPVVAlKQotICAtICR7RVRDfS9ncm91cCAgICAgICAgICAgICAgKG9yICVFVEMlL2dyb3VwKQotICAtICR7UFlUSE9OSE9NRX0vRXRjL2dyb3VwICAgKG9yICVQWVRIT05IT01FJS9FdGMvZ3JvdXApCi0KLUNsYXNzZXMKLS0tLS0tLS0KLQotTm9uZQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1nZXRncmdpZChnaWQpIC0gIHJldHVybiB0aGUgcmVjb3JkIGZvciBncm91cC1pZCBnaWQgYXMgYSA0LXR1cGxlCi0KLWdldGdybmFtKG5hbWUpIC0gcmV0dXJuIHRoZSByZWNvcmQgZm9yIGdyb3VwICduYW1lJyBhcyBhIDQtdHVwbGUKLQotZ2V0Z3JhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotZ3JvdXBfZmlsZSAtICAgICB0aGUgcGF0aCBvZiB0aGUgZ3JvdXAgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBncm91cCBmaWxlCi1fX2dyb3VwX3BhdGggPSBbXQotaWYgJ0VUQ19HUk9VUCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKG9zLmVudmlyb25bJ0VUQ19HUk9VUCddKQotaWYgJ0VUQycgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKCclcy9ncm91cCcgJSBvcy5lbnZpcm9uWydFVEMnXSkKLWlmICdQWVRIT05IT01FJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQoJyVzL0V0Yy9ncm91cCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLWdyb3VwX2ZpbGUgPSBOb25lCi1mb3IgX19pIGluIF9fZ3JvdXBfcGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIF9fZiA9IG9wZW4oX19pLCAncicpCi0gICAgICAgIF9fZi5jbG9zZSgpCi0gICAgICAgIGdyb3VwX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBkZWNpZGUgd2hhdCBmaWVsZCBzZXBhcmF0b3Igd2UgY2FuIHRyeSB0byB1c2UgLSBVbml4IHN0YW5kYXJkLCB3aXRoCi0jIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGFuIG9wdGlvbi4gIE5vIHNwZWNpYWwgZmllbGQgY29udmVyc2lvbgotIyBoYW5kbGVycyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBncm91cCBmaWxlLgotX19maWVsZF9zZXAgPSBbJzonXQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXAuYXBwZW5kKG9zLnBhdGhzZXApCi0KLSMgaGVscGVyIHJvdXRpbmUgdG8gaWRlbnRpZnkgd2hpY2ggc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBpbiB1c2UKLWRlZiBfX2dldF9maWVsZF9zZXAocmVjb3JkKToKLSAgICBmcyA9IE5vbmUKLSAgICBmb3IgYyBpbiBfX2ZpZWxkX3NlcDoKLSAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgMyBkZWxpbWl0ZXIgY2hhcmFjdGVycyAoZm9yIDQgZmllbGRzKQotICAgICAgICBpZiByZWNvcmQuY291bnQoYykgPT0gMzoKLSAgICAgICAgICAgIGZzID0gYwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBmczoKLSAgICAgICAgcmV0dXJuIGZzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IGdyb3VwIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIEdyb3VwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXNzd2QsIGdpZCwgbWVtKToKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfbmFtZSddID0gbmFtZQotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9wYXNzd2QnXSA9IHBhc3N3ZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9naWQnXSA9IGdpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9tZW0nXSA9IG1lbQotICAgICAgICBzZWxmLl9fZGljdF9fWydfcmVjb3JkJ10gPSAoc2VsZi5ncl9uYW1lLCBzZWxmLmdyX3Bhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JfZ2lkLCBzZWxmLmdyX21lbSkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gNAotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWNvcmRba2V5XQotCi0gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2F0dHJpYnV0ZSByZWFkLW9ubHk6ICVzJyAlIG5hbWUpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5fcmVjb3JkKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICB0aGlzID0gc3RyKHNlbGYuX3JlY29yZCkKLSAgICAgICAgaWYgdGhpcyA9PSBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsaWYgdGhpcyA8IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0KLSMgcmVhZCB0aGUgd2hvbGUgZmlsZSwgcGFyc2luZyBlYWNoIGVudHJ5IGludG8gdHVwbGUgZm9ybQotIyB3aXRoIGRpY3Rpb25hcmllcyB0byBzcGVlZCByZWNhbGwgYnkgR0lEIG9yIGdyb3VwIG5hbWUKLWRlZiBfX3JlYWRfZ3JvdXBfZmlsZSgpOgotICAgIGlmIGdyb3VwX2ZpbGU6Ci0gICAgICAgIGdyb3VwID0gb3Blbihncm91cF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIGdyb3VwIGRhdGFiYXNlIDw8JykKLSAgICBnaWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgMToKLSAgICAgICAgZW50cnkgPSBncm91cC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbGVuKGVudHJ5KSA+IDM6Ci0gICAgICAgICAgICBpZiBzZXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZXAgPSBfX2dldF9maWVsZF9zZXAoZW50cnkpCi0gICAgICAgICAgICBmaWVsZHMgPSBlbnRyeS5zcGxpdChzZXApCi0gICAgICAgICAgICBmaWVsZHNbMl0gPSBpbnQoZmllbGRzWzJdKQotICAgICAgICAgICAgZmllbGRzWzNdID0gW2Yuc3RyaXAoKSBmb3IgZiBpbiBmaWVsZHNbM10uc3BsaXQoJywnKV0KLSAgICAgICAgICAgIHJlY29yZCA9IEdyb3VwKCpmaWVsZHMpCi0gICAgICAgICAgICBpZiBmaWVsZHNbMl0gbm90IGluIGdpZHg6Ci0gICAgICAgICAgICAgICAgZ2lkeFtmaWVsZHNbMl1dID0gcmVjb3JkCi0gICAgICAgICAgICBpZiBmaWVsZHNbMF0gbm90IGluIG5hbXg6Ci0gICAgICAgICAgICAgICAgbmFteFtmaWVsZHNbMF1dID0gcmVjb3JkCi0gICAgICAgIGVsaWYgbGVuKGVudHJ5KSA+IDA6Ci0gICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBvciBtYWxmb3JtZWQgcmVjb3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBncm91cC5jbG9zZSgpCi0gICAgaWYgbGVuKGdpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuIChnaWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgYnkgR0lECi1kZWYgZ2V0Z3JnaWQoZ2lkKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBnW2dpZF0KLQotIyByZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGJ5IGdyb3VwIG5hbWUKLWRlZiBnZXRncm5hbShuYW1lKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBuW25hbWVdCi0KLSMgcmV0dXJuIGFsbCB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldGdyYWxsKCk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gZy52YWx1ZXMoKQotCi0jIHRlc3QgaGFybmVzcwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBnZXRncmFsbCgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5IGIvTGliL3BsYXQtb3MyZW14L3B3ZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNiMDc3Zi4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIHB3ZCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgUGF0aCBjb252ZXJzaW9ucyBhcmUgYXJlIGFwcGxpZWQgd2hlbgotIyB0aGUgZGF0YWJhc2UgdXNlcyAiOiIgYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0KLSIiIlJlcGxhY2VtZW50IGZvciBwd2Qgc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSwgaW50ZW5kZWQgZm9yIHVzZSBvbgotT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIGRvbid0IG5vcm1hbGx5IGhhdmUgYW4gL2V0Yy9wYXNzd2QgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggcGFzc3dvcmQgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNyBmaWVsZHMKLXBlciByZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSB1c2VyIG5hbWUgKHN0cmluZykKLSAgLSBwYXNzd29yZCAoZW5jcnlwdGVkIHN0cmluZywgb3IgIioiIG9yICIiKQotICAtIHVzZXIgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZGVzY3JpcHRpb24gKHVzdWFsbHkgdXNlcidzIG5hbWUpCi0gIC0gaG9tZSBkaXJlY3RvcnkgKHBhdGggdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5KQotICAtIHNoZWxsIChwYXRoIHRvIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwpCi0KLShzZWUgdGhlIHNlY3Rpb24gOC4xIG9mIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UpCi0KLVRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBVbml4IGltcGxlbWVudGF0aW9uIGJ5Ci1hbGxvd2luZyB1c2Ugb2YgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAtICc7JyBvbiBPUy8yLAotRE9TIGFuZCBNUy1XaW5kb3dzIC0gYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBpbiBhZGRpdGlvbiB0byB0aGUgVW5peAotc3RhbmRhcmQgIjoiLiAgQWRkaXRpb25hbGx5LCB3aGVuICI6IiBpcyB0aGUgc2VwYXJhdG9yIHBhdGggY29udmVyc2lvbnMKLWFyZSBhcHBsaWVkIHRvIGRlYWwgd2l0aCBhbnkgbXVuZ2luZyBvZiB0aGUgZHJpdmUgbGV0dGVyIHJlZmVyZW5jZS4KLQotVGhlIG1vZHVsZSBsb29rcyBmb3IgdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zCi0oaW4gb3JkZXIgZmlyc3QgdG8gbGFzdCk6Ci0gIC0gJHtFVENfUEFTU1dEfSAgICAgICAgICAgICAob3IgJUVUQ19QQVNTV0QlKQotICAtICR7RVRDfS9wYXNzd2QgICAgICAgICAgICAgKG9yICVFVEMlL3Bhc3N3ZCkKLSAgLSAke1BZVEhPTkhPTUV9L0V0Yy9wYXNzd2QgIChvciAlUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLQotQ2xhc3NlcwotLS0tLS0tLQotCi1Ob25lCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWdldHB3dWlkKHVpZCkgLSAgcmV0dXJuIHRoZSByZWNvcmQgZm9yIHVzZXItaWQgdWlkIGFzIGEgNy10dXBsZQotCi1nZXRwd25hbShuYW1lKSAtIHJldHVybiB0aGUgcmVjb3JkIGZvciB1c2VyICduYW1lJyBhcyBhIDctdHVwbGUKLQotZ2V0cHdhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDctdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotcGFzc3dkX2ZpbGUgLSAgICB0aGUgcGF0aCBvZiB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBwYXNzd2QgZmlsZQotX19wYXNzd2RfcGF0aCA9IFtdCi1pZiAnRVRDX1BBU1NXRCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydFVENfUEFTU1dEJ10pCi1pZiAnRVRDJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKCclcy9wYXNzd2QnICUgb3MuZW52aXJvblsnRVRDJ10pCi1pZiAnUFlUSE9OSE9NRScgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZCgnJXMvRXRjL3Bhc3N3ZCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLXBhc3N3ZF9maWxlID0gTm9uZQotZm9yIF9faSBpbiBfX3Bhc3N3ZF9wYXRoOgotICAgIHRyeToKLSAgICAgICAgX19mID0gb3BlbihfX2ksICdyJykKLSAgICAgICAgX19mLmNsb3NlKCkKLSAgICAgICAgcGFzc3dkX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBwYXRoIGNvbnZlcnNpb24gaGFuZGxlcnMKLWRlZiBfX251bGxwYXRoY29udihwYXRoKToKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQotCi1kZWYgX191bml4cGF0aGNvbnYocGF0aCk6Ci0gICAgIyB0d28ga25vd24gZHJpdmUgbGV0dGVyIHZhcmlhdGlvbnM6ICJ4OyIgYW5kICIkeCIKLSAgICBpZiBwYXRoWzBdID09ICckJzoKLSAgICAgICAgY29udiA9IHBhdGhbMV0gKyAnOicgKyBwYXRoWzI6XQotICAgIGVsaWYgcGF0aFsxXSA9PSAnOyc6Ci0gICAgICAgIGNvbnYgPSBwYXRoWzBdICsgJzonICsgcGF0aFsyOl0KLSAgICBlbHNlOgotICAgICAgICBjb252ID0gcGF0aAotICAgIHJldHVybiBjb252LnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCi0KLSMgZGVjaWRlIHdoYXQgZmllbGQgc2VwYXJhdG9yIHdlIGNhbiB0cnkgdG8gdXNlIC0gVW5peCBzdGFuZGFyZCwgd2l0aAotIyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBhbiBvcHRpb24uICBObyBzcGVjaWFsIGZpZWxkIGNvbnZlcnNpb24KLSMgaGFuZGxlciBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGZpZWxkCi0jIHNlcGFyYXRvciwgYnV0IGFyZSByZXF1aXJlZCBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCBzaGVsbCBmaWVsZHMgd2hlbgotIyB1c2luZyB0aGUgc3RhbmRhcmQgVW5peCAoIjoiKSBmaWVsZCBzZXBhcmF0b3IuCi1fX2ZpZWxkX3NlcCA9IHsnOic6IF9fdW5peHBhdGhjb252fQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXBbb3MucGF0aHNlcF0gPSBfX251bGxwYXRoY29udgotCi0jIGhlbHBlciByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgaW4gdXNlCi1kZWYgX19nZXRfZmllbGRfc2VwKHJlY29yZCk6Ci0gICAgZnMgPSBOb25lCi0gICAgZm9yIGMgaW4gX19maWVsZF9zZXAua2V5cygpOgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSA2IGRlbGltaXRlciBjaGFyYWN0ZXJzIChmb3IgNyBmaWVsZHMpCi0gICAgICAgIGlmIHJlY29yZC5jb3VudChjKSA9PSA2OgotICAgICAgICAgICAgZnMgPSBjCi0gICAgICAgICAgICBicmVhawotICAgIGlmIGZzOgotICAgICAgICByZXR1cm4gZnMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gcGFzc3dkIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIFBhc3N3ZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFzc3dkLCB1aWQsIGdpZCwgZ2Vjb3MsIGRpciwgc2hlbGwpOgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19uYW1lJ10gPSBuYW1lCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3Bhc3N3ZCddID0gcGFzc3dkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3VpZCddID0gdWlkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dpZCddID0gZ2lkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dlY29zJ10gPSBnZWNvcwotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19kaXInXSA9IGRpcgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19zaGVsbCddID0gc2hlbGwKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snX3JlY29yZCddID0gKHNlbGYucHdfbmFtZSwgc2VsZi5wd19wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X3VpZCwgc2VsZi5wd19naWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X2dlY29zLCBzZWxmLnB3X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfc2hlbGwpCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDcKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVjb3JkW2tleV0KLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdhdHRyaWJ1dGUgcmVhZC1vbmx5OiAlcycgJSBuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuX3JlY29yZCkKLQotICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgdGhpcyA9IHN0cihzZWxmLl9yZWNvcmQpCi0gICAgICAgIGlmIHRoaXMgPT0gb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbGlmIHRoaXMgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0jIHJlYWQgdGhlIHdob2xlIGZpbGUsIHBhcnNpbmcgZWFjaCBlbnRyeSBpbnRvIHR1cGxlIGZvcm0KLSMgd2l0aCBkaWN0aW9uYXJpZXMgdG8gc3BlZWQgcmVjYWxsIGJ5IFVJRCBvciBwYXNzd2QgbmFtZQotZGVmIF9fcmVhZF9wYXNzd2RfZmlsZSgpOgotICAgIGlmIHBhc3N3ZF9maWxlOgotICAgICAgICBwYXNzd2QgPSBvcGVuKHBhc3N3ZF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIHBhc3N3b3JkIGRhdGFiYXNlIDw8JykKLSAgICB1aWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZW50cnkgPSBwYXNzd2QucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgIGlmIGxlbihlbnRyeSkgPiA2OgotICAgICAgICAgICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VwID0gX19nZXRfZmllbGRfc2VwKGVudHJ5KQotICAgICAgICAgICAgZmllbGRzID0gZW50cnkuc3BsaXQoc2VwKQotICAgICAgICAgICAgZm9yIGkgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IGludChmaWVsZHNbaV0pCi0gICAgICAgICAgICBmb3IgaSBpbiAoNSwgNik6Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gX19maWVsZF9zZXBbc2VwXShmaWVsZHNbaV0pCi0gICAgICAgICAgICByZWNvcmQgPSBQYXNzd2QoKmZpZWxkcykKLSAgICAgICAgICAgIGlmIGZpZWxkc1syXSBub3QgaW4gdWlkeDoKLSAgICAgICAgICAgICAgICB1aWR4W2ZpZWxkc1syXV0gPSByZWNvcmQKLSAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gbmFteDoKLSAgICAgICAgICAgICAgICBuYW14W2ZpZWxkc1swXV0gPSByZWNvcmQKLSAgICAgICAgZWxpZiBsZW4oZW50cnkpID4gMDoKLSAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IG9yIG1hbGZvcm1lZCByZWNvcmRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIHBhc3N3ZC5jbG9zZSgpCi0gICAgaWYgbGVuKHVpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuICh1aWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IFVJRAotZGVmIGdldHB3dWlkKHVpZCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIHVbdWlkXQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IHBhc3N3ZCBuYW1lCi1kZWYgZ2V0cHduYW0obmFtZSk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG5bbmFtZV0KLQotIyByZXR1cm4gYWxsIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldHB3YWxsKCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG4udmFsdWVzKCkKLQotIyB0ZXN0IGhhcm5lc3MKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZ2V0cHdhbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuIGIvTGliL3BsYXQtb3MyZW14L3JlZ2VuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZWNkMmE4Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyEgL2Jpbi9zaAotZXhwb3J0IElOQ0xVREU9JENfSU5DTFVERV9QQVRICi1zZXQgLXYKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC9mY250bC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvc3lzL3NvY2tldC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknICRDX0lOQ0xVREVfUEFUSC9uZXRpbmV0L2luLmgKLSNweXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvdGVybWlvcy5oCmRpZmYgLS1naXQgYS9MaWIvcGxhdGZvcm0ucHkgYi9MaWIvcGxhdGZvcm0ucHkKaW5kZXggZWM1ZGY4NS4uYzNjNGIzMiAxMDA3NTUKLS0tIGEvTGliL3BsYXRmb3JtLnB5CisrKyBiL0xpYi9wbGF0Zm9ybS5weQpAQCAtMTIyLDcgKzEyMiw3IEBACiBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIyBvcy5kZXZudWxsIHdhcyBhZGRlZCBpbiBQeXRob24gMi40LCBzbyBlbXVsYXRlIGl0IGZvciBlYXJsaWVyCiAgICAgIyBQeXRob24gdmVyc2lvbnMKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicpOgogICAgICAgICAjIFVzZSB0aGUgb2xkIENQL00gTlVMIGFzIGRldmljZSBuYW1lCiAgICAgICAgIERFVl9OVUxMID0gJ05VTCcKICAgICBlbHNlOgpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBldGMgPSBvcy5saXN0ZGlyKCcvZXRjJykKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgUHJvYmFibHkgbm90IGEgVW5peCBzeXN0ZW0KICAgICAgICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKICAgICBldGMuc29ydCgpCkBAIC00MDMsMTMgKzQwMywxMyBAQAogCiBkZWYgX3N5c2NtZF92ZXIoc3lzdGVtPScnLCByZWxlYXNlPScnLCB2ZXJzaW9uPScnLAogCi0gICAgICAgICAgICAgICBzdXBwb3J0ZWRfcGxhdGZvcm1zPSgnd2luMzInLCd3aW4xNicsJ2RvcycsJ29zMicpKToKKyAgICAgICAgICAgICAgIHN1cHBvcnRlZF9wbGF0Zm9ybXM9KCd3aW4zMicsJ3dpbjE2JywnZG9zJykpOgogCiAgICAgIiIiIFRyaWVzIHRvIGZpZ3VyZSBvdXQgdGhlIE9TIHZlcnNpb24gdXNlZCBhbmQgcmV0dXJucwogICAgICAgICBhIHR1cGxlIChzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKS4KIAogICAgICAgICBJdCB1c2VzIHRoZSAidmVyIiBzaGVsbCBjb21tYW5kIGZvciB0aGlzIHdoaWNoIGlzIGtub3duCi0gICAgICAgIHRvIGV4aXN0cyBvbiBXaW5kb3dzLCBET1MgYW5kIE9TLzIuIFhYWCBPdGhlcnMgdG9vID8KKyAgICAgICAgdG8gZXhpc3RzIG9uIFdpbmRvd3MsIERPUy4gWFhYIE90aGVycyB0b28gPwogCiAgICAgICAgIEluIGNhc2UgdGhpcyBmYWlscywgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYXJlIHVzZWQgYXMKICAgICAgICAgZGVmYXVsdHMuCkBAIC00MjQsMTMgKzQyNCwxMCBAQAogICAgICAgICAgICAgcGlwZSA9IHBvcGVuKGNtZCkKICAgICAgICAgICAgIGluZm8gPSBwaXBlLnJlYWQoKQogICAgICAgICAgICAgaWYgcGlwZS5jbG9zZSgpOgotICAgICAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKCdjb21tYW5kIGZhaWxlZCcpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY29tbWFuZCBmYWlsZWQnKQogICAgICAgICAgICAgIyBYWFggSG93IGNhbiBJIHN1cHByZXNzIHNoZWxsIGVycm9ycyBmcm9tIGJlaW5nIHdyaXR0ZW4KICAgICAgICAgICAgICMgICAgIHRvIHN0ZGVyciA/Ci0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICAjcHJpbnQgJ0NvbW1hbmQgJXMgZmFpbGVkOiAlcycgJSAoY21kLHdoeSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgpAQCAtNTgxLDcgKzU3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICMgRGlzY2FyZCBhbnkgdHlwZSB0aGF0IGlzbid0IFJFR19TWgogICAgICAgICAgICAgICAgICAgICBpZiB0eXBlID09IFJFR19TWiBhbmQgbmFtZS5maW5kKCJTZXJ2ZXIiKSAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfdHlwZSA9IFZFUl9OVF9TRVJWRVIKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAjIFVzZSBkZWZhdWx0IG9mIFZFUl9OVF9XT1JLU1RBVElPTgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKQEAgLTYzNyw2MiArNjM0LDYgQEAKICAgICBSZWdDbG9zZUtleShrZXlDdXJWZXIpCiAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKIAotZGVmIF9tYWNfdmVyX2xvb2t1cChzZWxlY3RvcnMsZGVmYXVsdD1Ob25lKToKLQotICAgIGZyb20gX2dlc3RhbHQgaW1wb3J0IGdlc3RhbHQKLSAgICBsID0gW10KLSAgICBhcHBlbmQgPSBsLmFwcGVuZAotICAgIGZvciBzZWxlY3RvciBpbiBzZWxlY3RvcnM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGFwcGVuZChnZXN0YWx0KHNlbGVjdG9yKSkKLSAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIE9TRXJyb3IpOgotICAgICAgICAgICAgYXBwZW5kKGRlZmF1bHQpCi0gICAgcmV0dXJuIGwKLQotZGVmIF9iY2Qyc3RyKGJjZCk6Ci0KLSAgICByZXR1cm4gaGV4KGJjZClbMjpdCi0KLWRlZiBfbWFjX3Zlcl9nZXN0YWx0KCk6Ci0gICAgIiIiCi0gICAgICAgIFRoYW5rcyB0byBNYXJrIFIuIExldmluc29uIGZvciBtYWlsaW5nIGRvY3VtZW50YXRpb24gbGlua3MgYW5kCi0gICAgICAgIGNvZGUgZXhhbXBsZXMgZm9yIHRoaXMgZnVuY3Rpb24uIERvY3VtZW50YXRpb24gZm9yIHRoZQotICAgICAgICBnZXN0YWx0KCkgQVBJIGlzIGF2YWlsYWJsZSBvbmxpbmUgYXQ6Ci0KLSAgICAgICAgICAgaHR0cDovL3d3dy5yZ2Fyb3MubmwvZ2VzdGFsdC8KLSAgICAiIiIKLSAgICAjIENoZWNrIHdoZXRoZXIgdGhlIHZlcnNpb24gaW5mbyBtb2R1bGUgaXMgYXZhaWxhYmxlCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX2dlc3RhbHQKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgIyBHZXQgdGhlIGluZm9zCi0gICAgc3lzdiwgc3lzYSA9IF9tYWNfdmVyX2xvb2t1cCgoJ3N5c3YnLCdzeXNhJykpCi0gICAgIyBEZWNvZGUgdGhlIGluZm9zCi0gICAgaWYgc3lzdjoKLSAgICAgICAgbWFqb3IgPSAoc3lzdiAmIDB4RkYwMCkgPj4gOAotICAgICAgICBtaW5vciA9IChzeXN2ICYgMHgwMEYwKSA+PiA0Ci0gICAgICAgIHBhdGNoID0gKHN5c3YgJiAweDAwMEYpCi0KLSAgICAgICAgaWYgKG1ham9yLCBtaW5vcikgPj0gKDEwLCA0KToKLSAgICAgICAgICAgICMgdGhlICdzeXN2JyBnZXN0YWxkIGNhbm5vdCByZXR1cm4gcGF0Y2hsZXZlbHMKLSAgICAgICAgICAgICMgaGlnaGVyIHRoYW4gOS4gQXBwbGUgaW50cm9kdWNlZCAzIG5ldwotICAgICAgICAgICAgIyBnZXN0YWx0IGNvZGVzIGluIDEwLjQgdG8gZGVhbCB3aXRoIHRoaXMKLSAgICAgICAgICAgICMgaXNzdWUgKG5lZWRlZCBiZWNhdXNlIHBhdGNoIGxldmVscyBjYW4KLSAgICAgICAgICAgICMgcnVuIGhpZ2hlciB0aGFuIDksIHN1Y2ggYXMgMTAuNC4xMSkKLSAgICAgICAgICAgIG1ham9yLG1pbm9yLHBhdGNoID0gX21hY192ZXJfbG9va3VwKCgnc3lzMScsJ3N5czInLCdzeXMzJykpCi0gICAgICAgICAgICByZWxlYXNlID0gJyVpLiVpLiVpJyAlKG1ham9yLCBtaW5vciwgcGF0Y2gpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWxlYXNlID0gJyVzLiVpLiVpJyAlIChfYmNkMnN0cihtYWpvciksbWlub3IscGF0Y2gpCi0KLSAgICBpZiBzeXNhOgotICAgICAgICBtYWNoaW5lID0gezB4MTogJzY4aycsCi0gICAgICAgICAgICAgICAgICAgMHgyOiAnUG93ZXJQQycsCi0gICAgICAgICAgICAgICAgICAgMHhhOiAnaTM4Nid9LmdldChzeXNhLCcnKQotCi0gICAgdmVyc2lvbmluZm89KCcnLCAnJywgJycpCi0gICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQotCiBkZWYgX21hY192ZXJfeG1sKCk6CiAgICAgZm4gPSAnL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JwogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6CkBAIC03MDgsNyArNjQ5LDcgQEAKICAgICB2ZXJzaW9uaW5mbz0oJycsICcnLCAnJykKICAgICBtYWNoaW5lID0gb3MudW5hbWUoKS5tYWNoaW5lCiAgICAgaWYgbWFjaGluZSBpbiAoJ3BwYycsICdQb3dlciBNYWNpbnRvc2gnKToKLSAgICAgICAgIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBnZXN0YWx0IGJhc2VkIGNvZGUKKyAgICAgICAgIyBDYW5vbmljYWwgbmFtZQogICAgICAgICBtYWNoaW5lID0gJ1Bvd2VyUEMnCiAKICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCkBAIC03MzAsMTIgKzY3MSw2IEBACiAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKICAgICAgICAgcmV0dXJuIGluZm8KIAotICAgICMgSWYgdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgcmVhc29uIGZhbGwgYmFjayB0byByZWFkaW5nIHRoZQotICAgICMgaW5mb3JtYXRpb24gdXNpbmcgZ2VzdGFsdCBjYWxscy4KLSAgICBpbmZvID0gX21hY192ZXJfZ2VzdGFsdCgpCi0gICAgaWYgaW5mbyBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0dXJuIGluZm8KLQogICAgICMgSWYgdGhhdCBhbHNvIGRvZXNuJ3Qgd29yayByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVzCiAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQogCkBAIC04ODIsNyArODE3LDcgQEAKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBzb2NrZXQuZ2V0aG9zdG5hbWUoKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgU3RpbGwgbm90IHdvcmtpbmcuLi4KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKIApAQCAtOTAxLDEyICs4MzYsMTIgQEAKIAogICAgICIiIiBJbnRlcmZhY2UgdG8gdGhlIHN5c3RlbSdzIHVuYW1lIGNvbW1hbmQuCiAgICAgIiIiCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICBmID0gb3MucG9wZW4oJ3VuYW1lICVzIDI+ICVzJyAlIChvcHRpb24sIERFVl9OVUxMKSkKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBmLnJlYWQoKS5zdHJpcCgpCiAgICAgcmMgPSBmLmNsb3NlKCkKQEAgLTkyNCw3ICs4NTksNyBAQAogICAgICAgICBkZWZhdWx0IGluIGNhc2UgdGhlIGNvbW1hbmQgc2hvdWxkIGZhaWwuCiAKICAgICAiIiIKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicpOgogICAgICAgICAjIFhYWCBPdGhlcnMgdG9vID8KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0YXJnZXQgPSBfZm9sbG93X3N5bWxpbmtzKHRhcmdldCkKQEAgLTkzMiw3ICs4NjcsNyBAQAogICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2ZpbGUnLCB0YXJnZXRdLAogICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKIAotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3Isb3MuZXJyb3IpOgorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIG91dHB1dCA9IHByb2MuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoJ2xhdGluLTEnKQogICAgIHJjID0gcHJvYy53YWl0KCkKZGlmZiAtLWdpdCBhL0xpYi9wbGlzdGxpYi5weSBiL0xpYi9wbGlzdGxpYi5weQppbmRleCAyYjBiNjM0Li4yNzdjZTYyIDEwMDY0NAotLS0gYS9MaWIvcGxpc3RsaWIucHkKKysrIGIvTGliL3BsaXN0bGliLnB5CkBAIC00LDI1ICs0LDIwIEBACiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4KIFVzdWFsbHkgdGhlIHRvcCBsZXZlbCBvYmplY3QgaXMgYSBkaWN0aW9uYXJ5LgogCi1UbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgcGF0aE9yRmlsZSkKLWZ1bmN0aW9uLiAncm9vdE9iamVjdCcgaXMgdGhlIHRvcCBsZXZlbCBvYmplY3QsICdwYXRoT3JGaWxlJyBpcyBhCi1maWxlbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCitUbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIGR1bXAodmFsdWUsIGZpbGUpCitmdW5jdGlvbi4gJ3ZhbHVlJyBpcyB0aGUgdG9wIGxldmVsIG9iamVjdCwgJ2ZpbGUnIGlzCithICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCiAKLVRvIHBhcnNlIGEgcGxpc3QgZnJvbSBhIGZpbGUsIHVzZSB0aGUgcmVhZFBsaXN0KHBhdGhPckZpbGUpIGZ1bmN0aW9uLAotd2l0aCBhIGZpbGUgbmFtZSBvciBhIChyZWFkYWJsZSkgZmlsZSBvYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQuIEl0CitUbyBwYXJzZSBhIHBsaXN0IGZyb20gYSBmaWxlLCB1c2UgdGhlIGxvYWQoZmlsZSkgZnVuY3Rpb24sCit3aXRoIGEgKHJlYWRhYmxlKSBmaWxlIG9iamVjdCBhcyB0aGUgb25seSBhcmd1bWVudC4gSXQKIHJldHVybnMgdGhlIHRvcCBsZXZlbCBvYmplY3QgKGFnYWluLCB1c3VhbGx5IGEgZGljdGlvbmFyeSkuCiAKLVRvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIHJlYWRQbGlzdEZyb21CeXRlcygpCi1hbmQgd3JpdGVQbGlzdFRvQnl0ZXMoKS4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIGxvYWRzKCkKK2FuZCBkdW1wcygpLgogCiBWYWx1ZXMgY2FuIGJlIHN0cmluZ3MsIGludGVnZXJzLCBmbG9hdHMsIGJvb2xlYW5zLCB0dXBsZXMsIGxpc3RzLAotZGljdGlvbmFyaWVzIChidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgRGF0YSBvciBkYXRldGltZS5kYXRldGltZSBvYmplY3RzLgotU3RyaW5nIHZhbHVlcyAoaW5jbHVkaW5nIGRpY3Rpb25hcnkga2V5cykgaGF2ZSB0byBiZSB1bmljb2RlIHN0cmluZ3MgLS0gdGhleQotd2lsbCBiZSB3cml0dGVuIG91dCBhcyBVVEYtOC4KLQotVGhlIDxkYXRhPiBwbGlzdCB0eXBlIGlzIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBEYXRhIGNsYXNzLiBUaGlzIGlzIGEKLXRoaW4gd3JhcHBlciBhcm91bmQgYSBQeXRob24gYnl0ZXMgb2JqZWN0LiBVc2UgJ0RhdGEnIGlmIHlvdXIgc3RyaW5ncwotY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMuCitkaWN0aW9uYXJpZXMgKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCBEYXRhLCBieXRlcywgYnl0ZWFycmF5LCBvcgorZGF0ZXRpbWUuZGF0ZXRpbWUgb2JqZWN0cy4KIAogR2VuZXJhdGUgUGxpc3QgZXhhbXBsZToKIApAQCAtMzcsMjI2ICszMiw0OCBAQAogICAgICAgICAgICAgYVRydWVWYWx1ZSA9IFRydWUsCiAgICAgICAgICAgICBhRmFsc2VWYWx1ZSA9IEZhbHNlLAogICAgICAgICApLAotICAgICAgICBzb21lRGF0YSA9IERhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgIHNvbWVNb3JlRGF0YSA9IERhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTApLAorICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwLAogICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS5ta3RpbWUodGltZS5nbXRpbWUoKSkpLAogICAgICkKLSAgICB3cml0ZVBsaXN0KHBsLCBmaWxlTmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHBsLCBmcCkKIAogUGFyc2UgUGxpc3QgZXhhbXBsZToKIAotICAgIHBsID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCi0gICAgcHJpbnQgcGxbImFLZXkiXQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHBsID0gbG9hZChmcCkKKyAgICBwcmludChwbFsiYUtleSJdKQogIiIiCi0KLQogX19hbGxfXyA9IFsKICAgICAicmVhZFBsaXN0IiwgIndyaXRlUGxpc3QiLCAicmVhZFBsaXN0RnJvbUJ5dGVzIiwgIndyaXRlUGxpc3RUb0J5dGVzIiwKLSAgICAiUGxpc3QiLCAiRGF0YSIsICJEaWN0IgorICAgICJQbGlzdCIsICJEYXRhIiwgIkRpY3QiLCAiRk1UX1hNTCIsICJGTVRfQklOQVJZIiwKKyAgICAibG9hZCIsICJkdW1wIiwgImxvYWRzIiwgImR1bXBzIgogXQotIyBOb3RlOiB0aGUgUGxpc3QgYW5kIERpY3QgY2xhc3NlcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KIAogaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29kZWNzCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgZW51bQogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KK2Zyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogCiAKLWRlZiByZWFkUGxpc3QocGF0aE9yRmlsZSk6Ci0gICAgIiIiUmVhZCBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZSBvciBhCi0gICAgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4gUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2gKLSAgICB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCi0gICAgIiIiCi0gICAgZGlkT3BlbiA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6Ci0gICAgICAgICAgICBwYXRoT3JGaWxlID0gb3BlbihwYXRoT3JGaWxlLCAncmInKQotICAgICAgICAgICAgZGlkT3BlbiA9IFRydWUKLSAgICAgICAgcCA9IFBsaXN0UGFyc2VyKCkKLSAgICAgICAgcm9vdE9iamVjdCA9IHAucGFyc2UocGF0aE9yRmlsZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBkaWRPcGVuOgotICAgICAgICAgICAgcGF0aE9yRmlsZS5jbG9zZSgpCi0gICAgcmV0dXJuIHJvb3RPYmplY3QKK1BsaXN0Rm9ybWF0ID0gZW51bS5FbnVtKCdQbGlzdEZvcm1hdCcsICdGTVRfWE1MIEZNVF9CSU5BUlknLCBtb2R1bGU9X19uYW1lX18pCitnbG9iYWxzKCkudXBkYXRlKFBsaXN0Rm9ybWF0Ll9fbWVtYmVyc19fKQogCiAKLWRlZiB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpOgotICAgICIiIldyaXRlICdyb290T2JqZWN0JyB0byBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhCi0gICAgZmlsZSBuYW1lIG9yIGEgKHdyaXRhYmxlKSBmaWxlIG9iamVjdC4KLSAgICAiIiIKLSAgICBkaWRPcGVuID0gRmFsc2UKLSAgICB0cnk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aE9yRmlsZSwgc3RyKToKLSAgICAgICAgICAgIHBhdGhPckZpbGUgPSBvcGVuKHBhdGhPckZpbGUsICd3YicpCi0gICAgICAgICAgICBkaWRPcGVuID0gVHJ1ZQotICAgICAgICB3cml0ZXIgPSBQbGlzdFdyaXRlcihwYXRoT3JGaWxlKQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPHBsaXN0IHZlcnNpb249XCIxLjBcIj4iKQotICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShyb290T2JqZWN0KQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPC9wbGlzdD4iKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGRpZE9wZW46Ci0gICAgICAgICAgICBwYXRoT3JGaWxlLmNsb3NlKCkKLQotCi1kZWYgcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpOgotICAgICIiIlJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCi0gICAgIiIiCi0gICAgcmV0dXJuIHJlYWRQbGlzdChCeXRlc0lPKGRhdGEpKQotCi0KLWRlZiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KToKLSAgICAiIiJSZXR1cm4gJ3Jvb3RPYmplY3QnIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KLSAgICAiIiIKLSAgICBmID0gQnl0ZXNJTygpCi0gICAgd3JpdGVQbGlzdChyb290T2JqZWN0LCBmKQotICAgIHJldHVybiBmLmdldHZhbHVlKCkKLQotCi1jbGFzcyBEdW1iWE1MV3JpdGVyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbD0wLCBpbmRlbnQ9Ilx0Iik6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKLSAgICAgICAgc2VsZi5zdGFjayA9IFtdCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgPSBpbmRlbnRMZXZlbAotICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAotCi0gICAgZGVmIGJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKLSAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotCi0gICAgZGVmIGVuZEVsZW1lbnQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLmluZGVudExldmVsID4gMAotICAgICAgICBhc3NlcnQgc2VsZi5zdGFjay5wb3AoKSA9PSBlbGVtZW50Ci0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgLT0gMQotICAgICAgICBzZWxmLndyaXRlbG4oIjwvJXM+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgc2ltcGxlRWxlbWVudChzZWxmLCBlbGVtZW50LCB2YWx1ZT1Ob25lKToKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2YWx1ZSA9IF9lc2NhcGUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4lczwvJXM+IiAlIChlbGVtZW50LCB2YWx1ZSwgZWxlbWVudCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcy8+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgd3JpdGVsbihzZWxmLCBsaW5lKToKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgICMgcGxpc3QgaGFzIGZpeGVkIGVuY29kaW5nIG9mIHV0Zi04Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHN0cik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc2VsZi5pbmRlbnRMZXZlbCAqIHNlbGYuaW5kZW50KQotICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGxpbmUpCi0gICAgICAgIHNlbGYuZmlsZS53cml0ZShiJ1xuJykKLQotCi0jIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCi0jIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cyBtYXkgYmUgb21pdHRlZCB3aXRoCi0jICBhIGxvc3Mgb2YgcHJlY2lzaW9uKQotX2RhdGVQYXJzZXIgPSByZS5jb21waWxlKHIiKD9QPHllYXI+XGRcZFxkXGQpKD86LSg/UDxtb250aD5cZFxkKSg/Oi0oP1A8ZGF5PlxkXGQpKD86VCg/UDxob3VyPlxkXGQpKD86Oig/UDxtaW51dGU+XGRcZCkoPzo6KD9QPHNlY29uZD5cZFxkKSk/KT8pPyk/KT9aIiwgcmUuQVNDSUkpCi0KLWRlZiBfZGF0ZUZyb21TdHJpbmcocyk6Ci0gICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCi0gICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQotICAgIGxzdCA9IFtdCi0gICAgZm9yIGtleSBpbiBvcmRlcjoKLSAgICAgICAgdmFsID0gZ2Rba2V5XQotICAgICAgICBpZiB2YWwgaXMgTm9uZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCi0gICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCi0KLWRlZiBfZGF0ZVRvU3RyaW5nKGQpOgotICAgIHJldHVybiAnJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmRaJyAlICgKLSAgICAgICAgZC55ZWFyLCBkLm1vbnRoLCBkLmRheSwKLSAgICAgICAgZC5ob3VyLCBkLm1pbnV0ZSwgZC5zZWNvbmQKLSAgICApCi0KLQotIyBSZWdleCB0byBmaW5kIGFueSBjb250cm9sIGNoYXJzLCBleGNlcHQgZm9yIFx0IFxuIGFuZCBccgotX2NvbnRyb2xDaGFyUGF0ID0gcmUuY29tcGlsZSgKLSAgICByIltceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBiXHgwY1x4MGVceDBmIgotICAgIHIiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZl0iKQotCi1kZWYgX2VzY2FwZSh0ZXh0KToKLSAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQotICAgIGlmIG0gaXMgbm90IE5vbmU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBwbGlzdGxpYi5EYXRhIGluc3RlYWQiKQotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKSAgICAgICAjIGNvbnZlcnQgRE9TIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyIiwgIlxuIikgICAgICAgICAjIGNvbnZlcnQgTWFjIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKSAgICAgICAjIGVzY2FwZSAnJicKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI8IiwgIiZsdDsiKSAgICAgICAgIyBlc2NhcGUgJzwnCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikgICAgICAgICMgZXNjYXBlICc+JwotICAgIHJldHVybiB0ZXh0Ci0KLQotUExJU1RIRUFERVIgPSBiIiIiXAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotIiIiCi0KLWNsYXNzIFBsaXN0V3JpdGVyKER1bWJYTUxXcml0ZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudExldmVsPTAsIGluZGVudD1iIlx0Iiwgd3JpdGVIZWFkZXI9MSk6Ci0gICAgICAgIGlmIHdyaXRlSGVhZGVyOgotICAgICAgICAgICAgZmlsZS53cml0ZShQTElTVEhFQURFUikKLSAgICAgICAgRHVtYlhNTFdyaXRlci5fX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbCwgaW5kZW50KQotCi0gICAgZGVmIHdyaXRlVmFsdWUoc2VsZiwgdmFsdWUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJzdHJpbmciLCB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgICAgICAgICAgICMgbXVzdCBzd2l0Y2ggZm9yIGJvb2wgYmVmb3JlIGludCwgYXMgYm9vbCBpcyBhCi0gICAgICAgICAgICAjIHN1YmNsYXNzIG9mIGludC4uLgotICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJ0cnVlIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJmYWxzZSIpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiaW50ZWdlciIsICIlZCIgJSB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoInJlYWwiLCByZXByKHZhbHVlKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSAgICAgICAgICAgIHNlbGYud3JpdGVEaWN0KHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgotICAgICAgICAgICAgc2VsZi53cml0ZURhdGEodmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJkYXRlIiwgX2RhdGVUb1N0cmluZyh2YWx1ZSkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlQXJyYXkodmFsdWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIHR5cGU6ICVzIiAlIHR5cGUodmFsdWUpKQotCi0gICAgZGVmIHdyaXRlRGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImRhdGEiKQotICAgICAgICBzZWxmLmluZGVudExldmVsIC09IDEKLSAgICAgICAgbWF4bGluZWxlbmd0aCA9IG1heCgxNiwgNzYgLSBsZW4oc2VsZi5pbmRlbnQucmVwbGFjZShiIlx0IiwgYiIgIiAqIDgpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50TGV2ZWwpKQotICAgICAgICBmb3IgbGluZSBpbiBkYXRhLmFzQmFzZTY0KG1heGxpbmVsZW5ndGgpLnNwbGl0KGIiXG4iKToKLSAgICAgICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZWxuKGxpbmUpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImRhdGEiKQotCi0gICAgZGVmIHdyaXRlRGljdChzZWxmLCBkKToKLSAgICAgICAgaWYgZDoKLSAgICAgICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJkaWN0IikKLSAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSkKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCi0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJrZXkiLCBrZXkpCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZVZhbHVlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJkaWN0IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZGljdCIpCi0KLSAgICBkZWYgd3JpdGVBcnJheShzZWxmLCBhcnJheSk6Ci0gICAgICAgIGlmIGFycmF5OgotICAgICAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImFycmF5IikKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBhcnJheToKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlVmFsdWUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImFycmF5IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiYXJyYXkiKQorIworIworIyBEZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAogCiBjbGFzcyBfSW50ZXJuYWxEaWN0KGRpY3QpOgpAQCAtMjY0LDE5ICs4MSwxOCBAQAogICAgICMgVGhpcyBjbGFzcyBpcyBuZWVkZWQgd2hpbGUgRGljdCBpcyBzY2hlZHVsZWQgZm9yIGRlcHJlY2F0aW9uOgogICAgICMgd2Ugb25seSBuZWVkIHRvIHdhcm4gd2hlbiBhICp1c2VyKiBpbnN0YW50aWF0ZXMgRGljdCBvciB3aGVuCiAgICAgIyB0aGUgImF0dHJpYnV0ZSBub3RhdGlvbiBmb3IgZGljdCBrZXlzIiBpcyB1c2VkLgorICAgIF9fc2xvdHNfXyA9ICgpCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlID0gc2VsZlthdHRyXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmV0dXJuIHZhbHVlCiAKICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgYXR0ciwgdmFsdWUpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZlthdHRyXSA9IHZhbHVlCkBAIC0yODYsNTYgKzEwMiwxMTEgQEAKICAgICAgICAgICAgIGRlbCBzZWxmW2F0dHJdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKGF0dHIpCi0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KICAgICAgICAgd2FybigiQXR0cmlidXRlIGFjY2VzcyBmcm9tIHBsaXN0IGRpY3RzIGlzIGRlcHJlY2F0ZWQsIHVzZSBkW2tleV0gIgogICAgICAgICAgICAgICJub3RhdGlvbiBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogCisKIGNsYXNzIERpY3QoX0ludGVybmFsRGljdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIlRoZSBwbGlzdGxpYi5EaWN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSBidWlsdGluIGRpY3QgaW5zdGVhZCIsCiAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCoqa3dhcmdzKQogCiAKLWNsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCBtb2RlKToKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6CisgICAgICAgIHdpdGggb3BlbihwYXRoT3JGaWxlLCBtb2RlKSBhcyBmcDoKKyAgICAgICAgICAgIHlpZWxkIGZwCiAKLSAgICAiIiJUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSByZWFkUGxpc3QoKSBhbmQgd3JpdGVQbGlzdCgpCisgICAgZWxzZToKKyAgICAgICAgeWllbGQgcGF0aE9yRmlsZQorCisKK2NsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorICAgICIiIlRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIGR1bXAoKSBhbmQgbG9hZCgpCiAgICAgZnVuY3Rpb25zIGluc3RlYWQsIHRvZ2V0aGVyIHdpdGggcmVndWxhciBkaWN0IG9iamVjdHMuCiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCi0gICAgICAgIHdhcm4oIlRoZSBQbGlzdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIHJlYWRQbGlzdCgpIGFuZCAiCi0gICAgICAgICAgICAgIndyaXRlUGxpc3QoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgd2FybigiVGhlIFBsaXN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbG9hZCgpIGFuZCAiCisgICAgICAgICAgICAgImR1bXAoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKIAorICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tRmlsZShjbHMsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHJlYWRQbGlzdCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCi0gICAgICAgIHJvb3RPYmplY3QgPSByZWFkUGxpc3QocGF0aE9yRmlsZSkKKyAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSBsb2FkKCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKKyAgICAgICAgd2l0aCBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHZhbHVlID0gbG9hZChmcCkKICAgICAgICAgcGxpc3QgPSBjbHMoKQotICAgICAgICBwbGlzdC51cGRhdGUocm9vdE9iamVjdCkKKyAgICAgICAgcGxpc3QudXBkYXRlKHZhbHVlKQogICAgICAgICByZXR1cm4gcGxpc3QKLSAgICBmcm9tRmlsZSA9IGNsYXNzbWV0aG9kKGZyb21GaWxlKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHdyaXRlUGxpc3QoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgotICAgICAgICB3cml0ZVBsaXN0KHNlbGYsIHBhdGhPckZpbGUpCisgICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgZHVtcCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCisgICAgICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBkdW1wKHNlbGYsIGZwKQogCiAKLWRlZiBfZW5jb2RlQmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICMgY29waWVkIGZyb20gYmFzZTY0LmVuY29kZWJ5dGVzKCksIHdpdGggYWRkZWQgbWF4bGluZWxlbmd0aCBhcmd1bWVudAotICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMwotICAgIHBpZWNlcyA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKLSAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KLSAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKLSAgICByZXR1cm4gYicnLmpvaW4ocGllY2VzKQorZGVmIHJlYWRQbGlzdChwYXRoT3JGaWxlKToKKyAgICAiIiIKKyAgICBSZWFkIGEgLnBsaXN0IGZyb20gYSBwYXRoIG9yIGZpbGUuIHBhdGhPckZpbGUgc2hvdWxkIGVpdGhlcgorICAgIGJlIGEgZmlsZSBuYW1lLCBvciBhIHJlYWRhYmxlIGJpbmFyeSBmaWxlIG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWQgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgcmVhZFBsaXN0IGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKworICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHJldHVybiBsb2FkKGZwLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsCisgICAgICAgICAgICBkaWN0X3R5cGU9X0ludGVybmFsRGljdCkKKworZGVmIHdyaXRlUGxpc3QodmFsdWUsIHBhdGhPckZpbGUpOgorICAgICIiIgorICAgIFdyaXRlICd2YWx1ZScgdG8gYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYQorICAgIGZpbGUgbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHdyaXRlUGxpc3QgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXAoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgIGR1bXAodmFsdWUsIGZwLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorCisKK2RlZiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSk6CisgICAgIiIiCisgICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gUmV0dXJuIHRoZSByb290IG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWRzIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHJlYWRQbGlzdEZyb21CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHJldHVybiBsb2FkKEJ5dGVzSU8oZGF0YSksIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSwKKyAgICAgICAgZGljdF90eXBlPV9JbnRlcm5hbERpY3QpCisKKworZGVmIHdyaXRlUGxpc3RUb0J5dGVzKHZhbHVlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gJ3ZhbHVlJyBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wcyBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSB3cml0ZVBsaXN0VG9CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGYgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorICAgIHJldHVybiBmLmdldHZhbHVlKCkKKwogCiBjbGFzcyBEYXRhOgorICAgICIiIgorICAgIFdyYXBwZXIgZm9yIGJpbmFyeSBkYXRhLgogCi0gICAgIiIiV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEuIiIiCisgICAgVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgYSBieXRlcyBvYmplY3QgaW5zdGVhZC4KKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpOgpAQCAtMzQ2LDEwICsyMTcsMTAgQEAKICAgICBkZWYgZnJvbUJhc2U2NChjbHMsIGRhdGEpOgogICAgICAgICAjIGJhc2U2NC5kZWNvZGVieXRlcyBqdXN0IGNhbGxzIGJpbmFzY2lpLmEyYl9iYXNlNjQ7CiAgICAgICAgICMgaXQgc2VlbXMgb3ZlcmtpbGwgdG8gdXNlIGJvdGggYmFzZTY0IGFuZCBiaW5hc2NpaS4KLSAgICAgICAgcmV0dXJuIGNscyhiaW5hc2NpaS5hMmJfYmFzZTY0KGRhdGEpKQorICAgICAgICByZXR1cm4gY2xzKF9kZWNvZGVfYmFzZTY0KGRhdGEpKQogCiAgICAgZGVmIGFzQmFzZTY0KHNlbGYsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICAgICByZXR1cm4gX2VuY29kZUJhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCisgICAgICAgIHJldHVybiBfZW5jb2RlX2Jhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgpAQCAtMzYyLDQzICsyMzMsMTE5IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzKCVzKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHJlcHIoc2VsZi5kYXRhKSkKIAotY2xhc3MgUGxpc3RQYXJzZXI6CisjCisjCisjIEVuZCBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworIworIyBYTUwgc3VwcG9ydAorIworCisKKyMgWE1MICdoZWFkZXInCitQTElTVEhFQURFUiA9IGIiIiJcCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CisiIiIKKworCisjIFJlZ2V4IHRvIGZpbmQgYW55IGNvbnRyb2wgY2hhcnMsIGV4Y2VwdCBmb3IgXHQgXG4gYW5kIFxyCitfY29udHJvbENoYXJQYXQgPSByZS5jb21waWxlKAorICAgIHIiW1x4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MGJceDBjXHgwZVx4MGYiCisgICAgciJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmXSIpCisKK2RlZiBfZW5jb2RlX2Jhc2U2NChzLCBtYXhsaW5lbGVuZ3RoPTc2KToKKyAgICAjIGNvcGllZCBmcm9tIGJhc2U2NC5lbmNvZGVieXRlcygpLCB3aXRoIGFkZGVkIG1heGxpbmVsZW5ndGggYXJndW1lbnQKKyAgICBtYXhiaW5zaXplID0gKG1heGxpbmVsZW5ndGgvLzQpKjMKKyAgICBwaWVjZXMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgbWF4Ymluc2l6ZSk6CisgICAgICAgIGNodW5rID0gc1tpIDogaSArIG1heGJpbnNpemVdCisgICAgICAgIHBpZWNlcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NChjaHVuaykpCisgICAgcmV0dXJuIGInJy5qb2luKHBpZWNlcykKKworZGVmIF9kZWNvZGVfYmFzZTY0KHMpOgorICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmEyYl9iYXNlNjQocy5lbmNvZGUoInV0Zi04IikpCisKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQorCisjIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCisjIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cworIyBtYXkgYmUgb21pdHRlZCB3aXRoICMgIGEgbG9zcyBvZiBwcmVjaXNpb24pCitfZGF0ZVBhcnNlciA9IHJlLmNvbXBpbGUociIoP1A8eWVhcj5cZFxkXGRcZCkoPzotKD9QPG1vbnRoPlxkXGQpKD86LSg/UDxkYXk+XGRcZCkoPzpUKD9QPGhvdXI+XGRcZCkoPzo6KD9QPG1pbnV0ZT5cZFxkKSg/OjooP1A8c2Vjb25kPlxkXGQpKT8pPyk/KT8pP1oiLCByZS5BU0NJSSkKKworCitkZWYgX2RhdGVfZnJvbV9zdHJpbmcocyk6CisgICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCisgICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQorICAgIGxzdCA9IFtdCisgICAgZm9yIGtleSBpbiBvcmRlcjoKKyAgICAgICAgdmFsID0gZ2Rba2V5XQorICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCisgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCisKKworZGVmIF9kYXRlX3RvX3N0cmluZyhkKToKKyAgICByZXR1cm4gJyUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkWicgJSAoCisgICAgICAgIGQueWVhciwgZC5tb250aCwgZC5kYXksCisgICAgICAgIGQuaG91ciwgZC5taW51dGUsIGQuc2Vjb25kCisgICAgKQorCitkZWYgX2VzY2FwZSh0ZXh0KToKKyAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQorICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBieXRlcyBpbnN0ZWFkIikKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikgICAgICAgIyBjb252ZXJ0IERPUyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcciIsICJcbiIpICAgICAgICAgIyBjb252ZXJ0IE1hYyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikgICAgICAgIyBlc2NhcGUgJyYnCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPCIsICImbHQ7IikgICAgICAgICMgZXNjYXBlICc8JworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpICAgICAgICAjIGVzY2FwZSAnPicKKyAgICByZXR1cm4gdGV4dAorCitjbGFzcyBfUGxpc3RQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGUpOgogICAgICAgICBzZWxmLnN0YWNrID0gW10KLSAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gTm9uZQogICAgICAgICBzZWxmLnJvb3QgPSBOb25lCisgICAgICAgIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzID0gdXNlX2J1aWx0aW5fdHlwZXMKKyAgICAgICAgc2VsZi5fZGljdF90eXBlID0gZGljdF90eXBlCiAKICAgICBkZWYgcGFyc2Uoc2VsZiwgZmlsZW9iaik6Ci0gICAgICAgIGZyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogICAgICAgICBzZWxmLnBhcnNlciA9IFBhcnNlckNyZWF0ZSgpCi0gICAgICAgIHNlbGYucGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZUJlZ2luRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlRW5kRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuaGFuZGxlRGF0YQorICAgICAgICBzZWxmLnBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVfYmVnaW5fZWxlbWVudAorICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlX2VuZF9lbGVtZW50CisgICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5oYW5kbGVfZGF0YQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZUZpbGUoZmlsZW9iaikKICAgICAgICAgcmV0dXJuIHNlbGYucm9vdAogCi0gICAgZGVmIGhhbmRsZUJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50LCBhdHRycyk6CisgICAgZGVmIGhhbmRsZV9iZWdpbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIGF0dHJzKToKICAgICAgICAgc2VsZi5kYXRhID0gW10KICAgICAgICAgaGFuZGxlciA9IGdldGF0dHIoc2VsZiwgImJlZ2luXyIgKyBlbGVtZW50LCBOb25lKQogICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaGFuZGxlcihhdHRycykKIAotICAgIGRlZiBoYW5kbGVFbmRFbGVtZW50KHNlbGYsIGVsZW1lbnQpOgorICAgIGRlZiBoYW5kbGVfZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICAgICAgIGhhbmRsZXIgPSBnZXRhdHRyKHNlbGYsICJlbmRfIiArIGVsZW1lbnQsIE5vbmUpCiAgICAgICAgIGlmIGhhbmRsZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBoYW5kbGVyKCkKIAotICAgIGRlZiBoYW5kbGVEYXRhKHNlbGYsIGRhdGEpOgorICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5kYXRhLmFwcGVuZChkYXRhKQogCi0gICAgZGVmIGFkZE9iamVjdChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBpcyBub3QgTm9uZToKKyAgICBkZWYgYWRkX29iamVjdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9rZXkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuZXhwZWN0ZWQgZWxlbWVudCBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKLSAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdW3NlbGYuY3VycmVudEtleV0gPSB2YWx1ZQotICAgICAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zdGFja1stMV1bc2VsZi5jdXJyZW50X2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IE5vbmUKICAgICAgICAgZWxpZiBub3Qgc2VsZi5zdGFjazoKICAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgcm9vdCBvYmplY3QKICAgICAgICAgICAgIHNlbGYucm9vdCA9IHZhbHVlCkBAIC00MDgsNyArMzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQogICAgICAgICAgICAgc2VsZi5zdGFja1stMV0uYXBwZW5kKHZhbHVlKQogCi0gICAgZGVmIGdldERhdGEoc2VsZik6CisgICAgZGVmIGdldF9kYXRhKHNlbGYpOgogICAgICAgICBkYXRhID0gJycuam9pbihzZWxmLmRhdGEpCiAgICAgICAgIHNlbGYuZGF0YSA9IFtdCiAgICAgICAgIHJldHVybiBkYXRhCkBAIC00MTYsMzkgKzM2Myw2NDggQEAKICAgICAjIGVsZW1lbnQgaGFuZGxlcnMKIAogICAgIGRlZiBiZWdpbl9kaWN0KHNlbGYsIGF0dHJzKToKLSAgICAgICAgZCA9IF9JbnRlcm5hbERpY3QoKQotICAgICAgICBzZWxmLmFkZE9iamVjdChkKQorICAgICAgICBkID0gc2VsZi5fZGljdF90eXBlKCkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGQpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGQpCisKICAgICBkZWYgZW5kX2RpY3Qoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2tleToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1pc3NpbmcgdmFsdWUgZm9yIGtleSAnJXMnIGF0IGxpbmUgJWQiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudEtleSxzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRfa2V5LHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKSkKICAgICAgICAgc2VsZi5zdGFjay5wb3AoKQogCiAgICAgZGVmIGVuZF9rZXkoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBvciBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfa2V5IG9yIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhY2tbLTFdLCB0eXBlKHt9KSk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIGtleSBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQotICAgICAgICBzZWxmLmN1cnJlbnRLZXkgPSBzZWxmLmdldERhdGEoKQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gc2VsZi5nZXRfZGF0YSgpCiAKICAgICBkZWYgYmVnaW5fYXJyYXkoc2VsZiwgYXR0cnMpOgogICAgICAgICBhID0gW10KLSAgICAgICAgc2VsZi5hZGRPYmplY3QoYSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGEpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGEpCisKICAgICBkZWYgZW5kX2FycmF5KHNlbGYpOgogICAgICAgICBzZWxmLnN0YWNrLnBvcCgpCiAKICAgICBkZWYgZW5kX3RydWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KFRydWUpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChUcnVlKQorCiAgICAgZGVmIGVuZF9mYWxzZShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoRmFsc2UpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChGYWxzZSkKKwogICAgIGRlZiBlbmRfaW50ZWdlcihzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoaW50KHNlbGYuZ2V0RGF0YSgpKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGludChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9yZWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChmbG9hdChzZWxmLmdldERhdGEoKSkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChmbG9hdChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KHNlbGYuZ2V0RGF0YSgpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3Qoc2VsZi5nZXRfZGF0YSgpKQorCiAgICAgZGVmIGVuZF9kYXRhKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChEYXRhLmZyb21CYXNlNjQoc2VsZi5nZXREYXRhKCkuZW5jb2RlKCJ1dGYtOCIpKSkKKyAgICAgICAgaWYgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXM6CisgICAgICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RlY29kZV9iYXNlNjQoc2VsZi5nZXRfZGF0YSgpKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRfb2JqZWN0KERhdGEuZnJvbUJhc2U2NChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9kYXRlKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChfZGF0ZUZyb21TdHJpbmcoc2VsZi5nZXREYXRhKCkpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RhdGVfZnJvbV9zdHJpbmcoc2VsZi5nZXRfZGF0YSgpKSkKKworCitjbGFzcyBfRHVtYlhNTFdyaXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50X2xldmVsPTAsIGluZGVudD0iXHQiKToKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQorICAgICAgICBzZWxmLnN0YWNrID0gW10KKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsID0gaW5kZW50X2xldmVsCisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisKKyAgICBkZWYgYmVnaW5fZWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCArPSAxCisKKyAgICBkZWYgZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIGFzc2VydCBzZWxmLl9pbmRlbnRfbGV2ZWwgPiAwCisgICAgICAgIGFzc2VydCBzZWxmLnN0YWNrLnBvcCgpID09IGVsZW1lbnQKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8LyVzPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHNpbXBsZV9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHZhbHVlPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlID0gX2VzY2FwZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiVzPC8lcz4iICUgKGVsZW1lbnQsIHZhbHVlLCBlbGVtZW50KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXMvPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHdyaXRlbG4oc2VsZiwgbGluZSk6CisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAjIHBsaXN0IGhhcyBmaXhlZCBlbmNvZGluZyBvZiB1dGYtOAorCisgICAgICAgICAgICAjIFhYWDogaXMgdGhpcyB0ZXN0IG5lZWRlZD8KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgc3RyKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShzZWxmLl9pbmRlbnRfbGV2ZWwgKiBzZWxmLmluZGVudCkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoYidcbicpCisKKworY2xhc3MgX1BsaXN0V3JpdGVyKF9EdW1iWE1MV3JpdGVyKToKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBmaWxlLCBpbmRlbnRfbGV2ZWw9MCwgaW5kZW50PWIiXHQiLCB3cml0ZUhlYWRlcj0xLAorICAgICAgICAgICAgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKworICAgICAgICBpZiB3cml0ZUhlYWRlcjoKKyAgICAgICAgICAgIGZpbGUud3JpdGUoUExJU1RIRUFERVIpCisgICAgICAgIF9EdW1iWE1MV3JpdGVyLl9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudF9sZXZlbCwgaW5kZW50KQorICAgICAgICBzZWxmLl9zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi5fc2tpcGtleXMgPSBza2lwa2V5cworCisgICAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8cGxpc3QgdmVyc2lvbj1cIjEuMFwiPiIpCisgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUpCisgICAgICAgIHNlbGYud3JpdGVsbigiPC9wbGlzdD4iKQorCisgICAgZGVmIHdyaXRlX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInN0cmluZyIsIHZhbHVlKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInRydWUiKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJmYWxzZSIpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiaW50ZWdlciIsICIlZCIgJSB2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInJlYWwiLCByZXByKHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9kaWN0KHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2RhdGEodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9ieXRlcyh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRhdGV0aW1lLmRhdGV0aW1lKToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImRhdGUiLCBfZGF0ZV90b19zdHJpbmcodmFsdWUpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2FycmF5KHZhbHVlKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIHR5cGU6ICVzIiAlIHR5cGUodmFsdWUpKQorCisgICAgZGVmIHdyaXRlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYud3JpdGVfYnl0ZXMoZGF0YS5kYXRhKQorCisgICAgZGVmIHdyaXRlX2J5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImRhdGEiKQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgLT0gMQorICAgICAgICBtYXhsaW5lbGVuZ3RoID0gbWF4KAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICA3NiAtIGxlbihzZWxmLmluZGVudC5yZXBsYWNlKGIiXHQiLCBiIiAiICogOCkgKiBzZWxmLl9pbmRlbnRfbGV2ZWwpKQorCisgICAgICAgIGZvciBsaW5lIGluIF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heGxpbmVsZW5ndGgpLnNwbGl0KGIiXG4iKToKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZWxuKGxpbmUpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCArPSAxCisgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImRhdGEiKQorCisgICAgZGVmIHdyaXRlX2RpY3Qoc2VsZiwgZCk6CisgICAgICAgIGlmIGQ6CisgICAgICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImRpY3QiKQorICAgICAgICAgICAgaWYgc2VsZi5fc29ydF9rZXlzOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKKworICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9za2lwa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImtleSIsIGtleSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICAgICAgc2VsZi5lbmRfZWxlbWVudCgiZGljdCIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImRpY3QiKQorCisgICAgZGVmIHdyaXRlX2FycmF5KHNlbGYsIGFycmF5KToKKyAgICAgICAgaWYgYXJyYXk6CisgICAgICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImFycmF5IikKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBhcnJheToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICAgICAgc2VsZi5lbmRfZWxlbWVudCgiYXJyYXkiKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJhcnJheSIpCisKKworZGVmIF9pc19mbXRfeG1sKGhlYWRlcik6CisgICAgcHJlZml4ZXMgPSAoYic8P3htbCcsIGInPHBsaXN0JykKKworICAgIGZvciBwZnggaW4gcHJlZml4ZXM6CisgICAgICAgIGlmIGhlYWRlci5zdGFydHN3aXRoKHBmeCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBBbHNvIGNoZWNrIGZvciBhbHRlcm5hdGl2ZSBYTUwgZW5jb2RpbmdzLCB0aGlzIGlzIHNsaWdodGx5CisgICAgIyBvdmVya2lsbCBiZWNhdXNlIHRoZSBBcHBsZSB0b29scyAoYW5kIHBsaXN0bGliKSB3aWxsIG5vdAorICAgICMgZ2VuZXJhdGUgZmlsZXMgd2l0aCB0aGVzZSBlbmNvZGluZ3MuCisgICAgZm9yIGJvbSwgZW5jb2RpbmcgaW4gKAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjgsICJ1dGYtOCIpLAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjE2X0JFLCAidXRmLTE2LWJlIiksCisgICAgICAgICAgICAgICAgKGNvZGVjcy5CT01fVVRGMTZfTEUsICJ1dGYtMTYtbGUiKSwKKyAgICAgICAgICAgICAgICAjIGV4cGF0IGRvZXMgbm90IHN1cHBvcnQgdXRmLTMyCisgICAgICAgICAgICAgICAgIyhjb2RlY3MuQk9NX1VURjMyX0JFLCAidXRmLTMyLWJlIiksCisgICAgICAgICAgICAgICAgIyhjb2RlY3MuQk9NX1VURjMyX0xFLCAidXRmLTMyLWxlIiksCisgICAgICAgICAgICApOgorICAgICAgICBpZiBub3QgaGVhZGVyLnN0YXJ0c3dpdGgoYm9tKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZm9yIHN0YXJ0IGluIHByZWZpeGVzOgorICAgICAgICAgICAgcHJlZml4ID0gYm9tICsgc3RhcnQuZGVjb2RlKCdhc2NpaScpLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIGlmIGhlYWRlcls6bGVuKHByZWZpeCldID09IHByZWZpeDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKKyMKKyMgQmluYXJ5IFBsaXN0CisjCisKKworY2xhc3MgSW52YWxpZEZpbGVFeGNlcHRpb24gKFZhbHVlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlPSJJbnZhbGlkIGZpbGUiKToKKyAgICAgICAgVmFsdWVFcnJvci5fX2luaXRfXyhzZWxmLCBtZXNzYWdlKQorCitfQklOQVJZX0ZPUk1BVCA9IHsxOiAnQicsIDI6ICdIJywgNDogJ0wnLCA4OiAnUSd9CisKK2NsYXNzIF9CaW5hcnlQbGlzdFBhcnNlcjoKKyAgICAiIiIKKyAgICBSZWFkIG9yIHdyaXRlIGEgYmluYXJ5IHBsaXN0IGZpbGUsIGZvbGxvd2luZyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJpbmFyeQorICAgIGZvcm1hdC4gIFJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uIGluIGNhc2Ugb2YgZXJyb3IsIG90aGVyd2lzZSByZXR1cm4gdGhlCisgICAgcm9vdCBvYmplY3QuCisKKyAgICBzZWUgYWxzbzogaHR0cDovL29wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9DRi9DRi03NDQuMTgvQ0ZCaW5hcnlQTGlzdC5jCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGUpOgorICAgICAgICBzZWxmLl91c2VfYnVpbHRpbl90eXBlcyA9IHVzZV9idWlsdGluX3R5cGVzCisgICAgICAgIHNlbGYuX2RpY3RfdHlwZSA9IGRpY3RfdHlwZQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGZwKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBUaGUgYmFzaWMgZmlsZSBmb3JtYXQ6CisgICAgICAgICAgICAjIEhFQURFUgorICAgICAgICAgICAgIyBvYmplY3QuLi4KKyAgICAgICAgICAgICMgcmVmaWQtPm9mZnNldC4uLgorICAgICAgICAgICAgIyBUUkFJTEVSCisgICAgICAgICAgICBzZWxmLl9mcCA9IGZwCisgICAgICAgICAgICBzZWxmLl9mcC5zZWVrKC0zMiwgb3MuU0VFS19FTkQpCisgICAgICAgICAgICB0cmFpbGVyID0gc2VsZi5fZnAucmVhZCgzMikKKyAgICAgICAgICAgIGlmIGxlbih0cmFpbGVyKSAhPSAzMjoKKyAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgb2Zmc2V0X3NpemUsIHNlbGYuX3JlZl9zaXplLCBudW1fb2JqZWN0cywgdG9wX29iamVjdCwKKyAgICAgICAgICAgICAgICBvZmZzZXRfdGFibGVfb2Zmc2V0CisgICAgICAgICAgICApID0gc3RydWN0LnVucGFjaygnPjZ4QkJRUVEnLCB0cmFpbGVyKQorICAgICAgICAgICAgc2VsZi5fZnAuc2VlayhvZmZzZXRfdGFibGVfb2Zmc2V0KQorICAgICAgICAgICAgb2Zmc2V0X2Zvcm1hdCA9ICc+JyArIF9CSU5BUllfRk9STUFUW29mZnNldF9zaXplXSAqIG51bV9vYmplY3RzCisgICAgICAgICAgICBzZWxmLl9yZWZfZm9ybWF0ID0gX0JJTkFSWV9GT1JNQVRbc2VsZi5fcmVmX3NpemVdCisgICAgICAgICAgICBzZWxmLl9vYmplY3Rfb2Zmc2V0cyA9IHN0cnVjdC51bnBhY2soCisgICAgICAgICAgICAgICAgb2Zmc2V0X2Zvcm1hdCwgc2VsZi5fZnAucmVhZChvZmZzZXRfc2l6ZSAqIG51bV9vYmplY3RzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1t0b3Bfb2JqZWN0XSkKKworICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKKyAgICBkZWYgX2dldF9zaXplKHNlbGYsIHRva2VuTCk6CisgICAgICAgICIiIiByZXR1cm4gdGhlIHNpemUgb2YgdGhlIG5leHQgb2JqZWN0LiIiIgorICAgICAgICBpZiB0b2tlbkwgPT0gMHhGOgorICAgICAgICAgICAgbSA9IHNlbGYuX2ZwLnJlYWQoMSlbMF0gJiAweDMKKyAgICAgICAgICAgIHMgPSAxIDw8IG0KKyAgICAgICAgICAgIGYgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtzXQorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soZiwgc2VsZi5fZnAucmVhZChzKSlbMF0KKworICAgICAgICByZXR1cm4gdG9rZW5MCisKKyAgICBkZWYgX3JlYWRfcmVmcyhzZWxmLCBuKToKKyAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soCisgICAgICAgICAgICAnPicgKyBzZWxmLl9yZWZfZm9ybWF0ICogbiwgc2VsZi5fZnAucmVhZChuICogc2VsZi5fcmVmX3NpemUpKQorCisgICAgZGVmIF9yZWFkX29iamVjdChzZWxmLCBvZmZzZXQpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZCB0aGUgb2JqZWN0IGF0IG9mZnNldC4KKworICAgICAgICBNYXkgcmVjdXJzaXZlbHkgcmVhZCBzdWItb2JqZWN0cyAoY29udGVudCBvZiBhbiBhcnJheS9kaWN0L3NldCkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2ZwLnNlZWsob2Zmc2V0KQorICAgICAgICB0b2tlbiA9IHNlbGYuX2ZwLnJlYWQoMSlbMF0KKyAgICAgICAgdG9rZW5ILCB0b2tlbkwgPSB0b2tlbiAmIDB4RjAsIHRva2VuICYgMHgwRgorCisgICAgICAgIGlmIHRva2VuID09IDB4MDA6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgwODoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgwOToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBUaGUgcmVmZXJlbmNlZCBzb3VyY2UgY29kZSBhbHNvIG1lbnRpb25zIFVSTCAoMHgwYywgMHgwZCkgYW5kCisgICAgICAgICMgVVVJRCAoMHgwZSksIGJ1dCBuZWl0aGVyIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIENvY29hIGxpYnJhcmllcy4KKworICAgICAgICBlbGlmIHRva2VuID09IDB4MGY6CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHgxMDogICMgaW50CisgICAgICAgICAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoc2VsZi5fZnAucmVhZCgxIDw8IHRva2VuTCksICdiaWcnKQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgyMjogIyByZWFsCisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmYnLCBzZWxmLl9mcC5yZWFkKDQpKVswXQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgyMzogIyByZWFsCisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmQnLCBzZWxmLl9mcC5yZWFkKDgpKVswXQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgzMzogICMgZGF0ZQorICAgICAgICAgICAgZiA9IHN0cnVjdC51bnBhY2soJz5kJywgc2VsZi5fZnAucmVhZCg4KSlbMF0KKyAgICAgICAgICAgICMgdGltZXN0YW1wIDAgb2YgYmluYXJ5IHBsaXN0cyBjb3JyZXNwb25kcyB0byAxLzEvMjAwMQorICAgICAgICAgICAgIyAoeWVhciBvZiBNYWMgT1MgWCAxMC4wKSwgaW5zdGVhZCBvZiAxLzEvMTk3MC4KKyAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGYgKyAoMzEgKiAzNjUgKyA4KSAqIDg2NDAwKQorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NDA6ICAjIGRhdGEKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBpZiBzZWxmLl91c2VfYnVpbHRpbl90eXBlczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZnAucmVhZChzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRGF0YShzZWxmLl9mcC5yZWFkKHMpKQorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NTA6ICAjIGFzY2lpIHN0cmluZworICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIHJlc3VsdCA9ICBzZWxmLl9mcC5yZWFkKHMpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NjA6ICAjIHVuaWNvZGUgc3RyaW5nCisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZwLnJlYWQocyAqIDIpLmRlY29kZSgndXRmLTE2YmUnKQorCisgICAgICAgICMgdG9rZW5IID09IDB4ODAgaXMgZG9jdW1lbnRlZCBhcyAnVUlEJyBhbmQgYXBwZWFycyB0byBiZSB1c2VkIGZvcgorICAgICAgICAjIGtleWVkLWFyY2hpdmluZywgbm90IGluIHBsaXN0cy4KKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweEEwOiAgIyBhcnJheQorICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIG9ial9yZWZzID0gc2VsZi5fcmVhZF9yZWZzKHMpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW3hdKQorICAgICAgICAgICAgICAgIGZvciB4IGluIG9ial9yZWZzXQorCisgICAgICAgICMgdG9rZW5IID09IDB4QjAgaXMgZG9jdW1lbnRlZCBhcyAnb3Jkc2V0JywgYnV0IGlzIG5vdCBhY3R1YWxseQorICAgICAgICAjIGltcGxlbWVudGVkIGluIHRoZSBBcHBsZSByZWZlcmVuY2UgY29kZS4KKworICAgICAgICAjIHRva2VuSCA9PSAweEMwIGlzIGRvY3VtZW50ZWQgYXMgJ3NldCcsIGJ1dCBzZXRzIGNhbm5vdCBiZSB1c2VkIGluCisgICAgICAgICMgcGxpc3RzLgorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4RDA6ICAjIGRpY3QKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBrZXlfcmVmcyA9IHNlbGYuX3JlYWRfcmVmcyhzKQorICAgICAgICAgICAgb2JqX3JlZnMgPSBzZWxmLl9yZWFkX3JlZnMocykKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2RpY3RfdHlwZSgpCisgICAgICAgICAgICBmb3IgaywgbyBpbiB6aXAoa2V5X3JlZnMsIG9ial9yZWZzKToKKyAgICAgICAgICAgICAgICByZXN1bHRbc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNba10pCisgICAgICAgICAgICAgICAgICAgIF0gPSBzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1tvXSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKK2RlZiBfY291bnRfdG9fc2l6ZShjb3VudCk6CisgICAgaWYgY291bnQgPCAxIDw8IDg6CisgICAgICAgIHJldHVybiAxCisKKyAgICBlbGlmIGNvdW50IDwgMSA8PCAxNjoKKyAgICAgICAgcmV0dXJuIDIKKworICAgIGVsaWYgY291bnQgPDwgMSA8PCAzMjoKKyAgICAgICAgcmV0dXJuIDQKKworICAgIGVsc2U6CisgICAgICAgIHJldHVybiA4CisKK2NsYXNzIF9CaW5hcnlQbGlzdFdyaXRlciAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnAsIHNvcnRfa2V5cywgc2tpcGtleXMpOgorICAgICAgICBzZWxmLl9mcCA9IGZwCisgICAgICAgIHNlbGYuX3NvcnRfa2V5cyA9IHNvcnRfa2V5cworICAgICAgICBzZWxmLl9za2lwa2V5cyA9IHNraXBrZXlzCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdmFsdWUpOgorCisgICAgICAgICMgRmxhdHRlbmVkIG9iamVjdCBsaXN0OgorICAgICAgICBzZWxmLl9vYmpsaXN0ID0gW10KKworICAgICAgICAjIE1hcHBpbmdzIGZyb20gb2JqZWN0LT5vYmplY3RpZAorICAgICAgICAjIEZpcnN0IGRpY3QgaGFzICh0eXBlKG9iamVjdCksIG9iamVjdCkgYXMgdGhlIGtleSwKKyAgICAgICAgIyBzZWNvbmQgZGljdCBpcyB1c2VkIHdoZW4gb2JqZWN0IGlzIG5vdCBoYXNoYWJsZSBhbmQKKyAgICAgICAgIyBoYXMgaWQob2JqZWN0KSBhcyB0aGUga2V5LgorICAgICAgICBzZWxmLl9vYmp0YWJsZSA9IHt9CisgICAgICAgIHNlbGYuX29iamlkdGFibGUgPSB7fQorCisgICAgICAgICMgQ3JlYXRlIGxpc3Qgb2YgYWxsIG9iamVjdHMgaW4gdGhlIHBsaXN0CisgICAgICAgIHNlbGYuX2ZsYXR0ZW4odmFsdWUpCisKKyAgICAgICAgIyBTaXplIG9mIG9iamVjdCByZWZlcmVuY2VzIGluIHNlcmlhbGl6ZWQgY29udGFpbmVycworICAgICAgICAjIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBwbGlzdC4KKyAgICAgICAgbnVtX29iamVjdHMgPSBsZW4oc2VsZi5fb2JqbGlzdCkKKyAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHMgPSBbMF0qbnVtX29iamVjdHMKKyAgICAgICAgc2VsZi5fcmVmX3NpemUgPSBfY291bnRfdG9fc2l6ZShudW1fb2JqZWN0cykKKworICAgICAgICBzZWxmLl9yZWZfZm9ybWF0ID0gX0JJTkFSWV9GT1JNQVRbc2VsZi5fcmVmX3NpemVdCisKKyAgICAgICAgIyBXcml0ZSBmaWxlIGhlYWRlcgorICAgICAgICBzZWxmLl9mcC53cml0ZShiJ2JwbGlzdDAwJykKKworICAgICAgICAjIFdyaXRlIG9iamVjdCBsaXN0CisgICAgICAgIGZvciBvYmogaW4gc2VsZi5fb2JqbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX29iamVjdChvYmopCisKKyAgICAgICAgIyBXcml0ZSByZWZudW0tPm9iamVjdCBvZmZzZXQgdGFibGUKKyAgICAgICAgdG9wX29iamVjdCA9IHNlbGYuX2dldHJlZm51bSh2YWx1ZSkKKyAgICAgICAgb2Zmc2V0X3RhYmxlX29mZnNldCA9IHNlbGYuX2ZwLnRlbGwoKQorICAgICAgICBvZmZzZXRfc2l6ZSA9IF9jb3VudF90b19zaXplKG9mZnNldF90YWJsZV9vZmZzZXQpCisgICAgICAgIG9mZnNldF9mb3JtYXQgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtvZmZzZXRfc2l6ZV0gKiBudW1fb2JqZWN0cworICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjayhvZmZzZXRfZm9ybWF0LCAqc2VsZi5fb2JqZWN0X29mZnNldHMpKQorCisgICAgICAgICMgV3JpdGUgdHJhaWxlcgorICAgICAgICBzb3J0X3ZlcnNpb24gPSAwCisgICAgICAgIHRyYWlsZXIgPSAoCisgICAgICAgICAgICBzb3J0X3ZlcnNpb24sIG9mZnNldF9zaXplLCBzZWxmLl9yZWZfc2l6ZSwgbnVtX29iamVjdHMsCisgICAgICAgICAgICB0b3Bfb2JqZWN0LCBvZmZzZXRfdGFibGVfb2Zmc2V0CisgICAgICAgICkKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz41eEJCQlFRUScsICp0cmFpbGVyKSkKKworICAgIGRlZiBfZmxhdHRlbihzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgRmlyc3QgY2hlY2sgaWYgdGhlIG9iamVjdCBpcyBpbiB0aGUgb2JqZWN0IHRhYmxlLCBub3QgdXNlZCBmb3IKKyAgICAgICAgIyBjb250YWluZXJzIHRvIGVuc3VyZSB0aGF0IHR3byBzdWJjb250YWluZXJzIHdpdGggdGhlIHNhbWUgY29udGVudHMKKyAgICAgICAgIyB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgZGlzdGluY3QgdmFsdWVzLgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAoCisgICAgICAgICAgICAgICAgc3RyLCBpbnQsIGZsb2F0LCBkYXRldGltZS5kYXRldGltZSwgYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgaWYgKHR5cGUodmFsdWUpLCB2YWx1ZSkgaW4gc2VsZi5fb2JqdGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgIGlmICh0eXBlKHZhbHVlLmRhdGEpLCB2YWx1ZS5kYXRhKSBpbiBzZWxmLl9vYmp0YWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEFkZCB0byBvYmplY3RyZWZlcmVuY2UgbWFwCisgICAgICAgIHJlZm51bSA9IGxlbihzZWxmLl9vYmpsaXN0KQorICAgICAgICBzZWxmLl9vYmpsaXN0LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUuZGF0YSksIHZhbHVlLmRhdGEpXSA9IHJlZm51bQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZSksIHZhbHVlKV0gPSByZWZudW0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX29iamlkdGFibGVbaWQodmFsdWUpXSA9IHJlZm51bQorCisgICAgICAgICMgQW5kIGZpbmFsbHkgcmVjdXJzZSBpbnRvIGNvbnRhaW5lcnMKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICBrZXlzID0gW10KKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBpdGVtcyA9IHZhbHVlLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvcnRfa2V5czoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChpdGVtcykKKworICAgICAgICAgICAgZm9yIGssIHYgaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoaywgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2tpcGtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodikKKworICAgICAgICAgICAgZm9yIG8gaW4gaXRlcnRvb2xzLmNoYWluKGtleXMsIHZhbHVlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fZmxhdHRlbihvKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBmb3IgbyBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mbGF0dGVuKG8pCisKKyAgICBkZWYgX2dldHJlZm51bShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZS5kYXRhKSwgdmFsdWUuZGF0YSldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZSksIHZhbHVlKV0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmppZHRhYmxlW2lkKHZhbHVlKV0KKworICAgIGRlZiBfd3JpdGVfc2l6ZShzZWxmLCB0b2tlbiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPCAxNToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QicsIHRva2VuIHwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCA4OgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQkInLCB0b2tlbiB8IDB4RiwgMHgxMCwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCAxNjoKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJIJywgdG9rZW4gfCAweEYsIDB4MTEsIHNpemUpKQorCisgICAgICAgIGVsaWYgc2l6ZSA8IDEgPDwgMzI6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCTCcsIHRva2VuIHwgMHhGLCAweDEyLCBzaXplKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQlEnLCB0b2tlbiB8IDB4RiwgMHgxMywgc2l6ZSkpCisKKyAgICBkZWYgX3dyaXRlX29iamVjdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJlZiA9IHNlbGYuX2dldHJlZm51bSh2YWx1ZSkKKyAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHNbcmVmXSA9IHNlbGYuX2ZwLnRlbGwoKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDAwJykKKworICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDA4JykKKworICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MDknKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKyAgICAgICAgICAgIGlmIHZhbHVlIDwgMSA8PCA4OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkInLCAweDEwLCB2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCAxNjoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJIJywgMHgxMSwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgMzI6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CTCcsIDB4MTIsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CUScsIDB4MTMsIHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QmQnLCAweDIzLCB2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6CisgICAgICAgICAgICBmID0gKHZhbHVlIC0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMSwgMSkpLnRvdGFsX3NlY29uZHMoKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CZCcsIDB4MzMsIGYpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NDAsIGxlbih2YWx1ZS5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHZhbHVlLmRhdGEpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDQwLCBsZW4odmFsdWUpKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NTAsIGxlbih2YWx1ZSkpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ3V0Zi0xNmJlJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NjAsIGxlbih2YWx1ZSkpCisKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHQpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHJlZnMgPSBbc2VsZi5fZ2V0cmVmbnVtKG8pIGZvciBvIGluIHZhbHVlXQorICAgICAgICAgICAgcyA9IGxlbihyZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEEwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICpyZWZzKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAga2V5UmVmcywgdmFsUmVmcyA9IFtdLCBbXQorCisgICAgICAgICAgICBpZiBzZWxmLl9zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgcm9vdEl0ZW1zID0gc29ydGVkKHZhbHVlLml0ZW1zKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJvb3RJdGVtcyA9IHZhbHVlLml0ZW1zKCkKKworICAgICAgICAgICAgZm9yIGssIHYgaW4gcm9vdEl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGssIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NraXBrZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAga2V5UmVmcy5hcHBlbmQoc2VsZi5fZ2V0cmVmbnVtKGspKQorICAgICAgICAgICAgICAgIHZhbFJlZnMuYXBwZW5kKHNlbGYuX2dldHJlZm51bSh2KSkKKworICAgICAgICAgICAgcyA9IGxlbihrZXlSZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEQwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICprZXlSZWZzKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqdmFsUmVmcykpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworCitkZWYgX2lzX2ZtdF9iaW5hcnkoaGVhZGVyKToKKyAgICByZXR1cm4gaGVhZGVyWzo4XSA9PSBiJ2JwbGlzdDAwJworCisKKyMKKyMgR2VuZXJpYyBiaXRzCisjCisKK19GT1JNQVRTPXsKKyAgICBGTVRfWE1MOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF94bWwsCisgICAgICAgIHBhcnNlcj1fUGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fUGxpc3RXcml0ZXIsCisgICAgKSwKKyAgICBGTVRfQklOQVJZOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF9iaW5hcnksCisgICAgICAgIHBhcnNlcj1fQmluYXJ5UGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fQmluYXJ5UGxpc3RXcml0ZXIsCisgICAgKQorfQorCisKK2RlZiBsb2FkKGZwLCAqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpOgorICAgICIiIlJlYWQgYSAucGxpc3QgZmlsZS4gJ2ZwJyBzaG91bGQgYmUgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgaWYgZm10IGlzIE5vbmU6CisgICAgICAgIGhlYWRlciA9IGZwLnJlYWQoMzIpCisgICAgICAgIGZwLnNlZWsoMCkKKyAgICAgICAgZm9yIGluZm8gaW4gX0ZPUk1BVFMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBpbmZvWydkZXRlY3QnXShoZWFkZXIpOgorICAgICAgICAgICAgICAgIHAgPSBpbmZvWydwYXJzZXInXSgKKyAgICAgICAgICAgICAgICAgICAgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsCisgICAgICAgICAgICAgICAgICAgIGRpY3RfdHlwZT1kaWN0X3R5cGUsCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworICAgIGVsc2U6CisgICAgICAgIHAgPSBfRk9STUFUU1tmbXRdWydwYXJzZXInXSh1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKworICAgIHJldHVybiBwLnBhcnNlKGZwKQorCisKK2RlZiBsb2Fkcyh2YWx1ZSwgKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICAiIiJSZWFkIGEgLnBsaXN0IGZpbGUgZnJvbSBhIGJ5dGVzIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKHZhbHVlKQorICAgIHJldHVybiBsb2FkKAorICAgICAgICBmcCwgZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsIGRpY3RfdHlwZT1kaWN0X3R5cGUpCisKKworZGVmIGR1bXAodmFsdWUsIGZwLCAqLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKyAgICAiIiJXcml0ZSAndmFsdWUnIHRvIGEgLnBsaXN0IGZpbGUuICdmcCcgc2hvdWxkIGJlIGEgKHdyaXRhYmxlKQorICAgIGZpbGUgb2JqZWN0LgorICAgICIiIgorICAgIGlmIGZtdCBub3QgaW4gX0ZPUk1BVFM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGZvcm1hdDogJXIiJShmbXQsKSkKKworICAgIHdyaXRlciA9IF9GT1JNQVRTW2ZtdF1bIndyaXRlciJdKGZwLCBzb3J0X2tleXM9c29ydF9rZXlzLCBza2lwa2V5cz1za2lwa2V5cykKKyAgICB3cml0ZXIud3JpdGUodmFsdWUpCisKKworZGVmIGR1bXBzKHZhbHVlLCAqLCBmbXQ9Rk1UX1hNTCwgc2tpcGtleXM9RmFsc2UsIHNvcnRfa2V5cz1UcnVlKToKKyAgICAiIiJSZXR1cm4gYSBieXRlcyBvYmplY3Qgd2l0aCB0aGUgY29udGVudHMgZm9yIGEgLnBsaXN0IGZpbGUuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmcCwgZm10PWZtdCwgc2tpcGtleXM9c2tpcGtleXMsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKZGlmZiAtLWdpdCBhL0xpYi9wb3BsaWIucHkgYi9MaWIvcG9wbGliLnB5CmluZGV4IDQzZjgzMDUuLjAwZmZiY2IgMTAwNjQ0Ci0tLSBhL0xpYi9wb3BsaWIucHkKKysrIGIvTGliL3BvcGxpYi5weQpAQCAtMTMsNyArMTMsMTUgQEAKIAogIyBJbXBvcnRzCiAKLWltcG9ydCByZSwgc29ja2V0CitpbXBvcnQgZXJybm8KK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAorCit0cnk6CisgICAgaW1wb3J0IHNzbAorICAgIEhBVkVfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBVkVfU1NMID0gRmFsc2UKIAogX19hbGxfXyA9IFsiUE9QMyIsImVycm9yX3Byb3RvIl0KIApAQCAtNjEsNiArNjksOCBAQAogICAgICAgICAgICAgQVBPUCBuYW1lIGRpZ2VzdCAgICAgICAgYXBvcChuYW1lLCBkaWdlc3QpCiAgICAgICAgICAgICBUT1AgbXNnIG4gICAgICAgICAgICAgICB0b3AobXNnLCBuKQogICAgICAgICAgICAgVUlETCBbbXNnXSAgICAgICAgICAgICAgdWlkbChtc2cgPSBOb25lKQorICAgICAgICAgICAgQ0FQQSAgICAgICAgICAgICAgICAgICAgY2FwYSgpCisgICAgICAgICAgICBTVExTICAgICAgICAgICAgICAgICAgICBzdGxzKCkKIAogICAgIFJhaXNlcyBvbmUgZXhjZXB0aW9uOiAnZXJyb3JfcHJvdG8nLgogCkBAIC04Nyw2ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NyZWF0ZV9zb2NrZXQodGltZW91dCkKICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCiAgICAgICAgIHNlbGYuX2RlYnVnZ2luZyA9IDAKQEAgLTI2OCw3ICsyNzksMTQgQEAKICAgICAgICAgaWYgc2VsZi5maWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2sgPSBOb25lCiAKICAgICAjX19kZWxfXyA9IHF1aXQKQEAgLTMyNCwyMSArMzQyLDcwIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hvcnRjbWQoJ1VJREwgJXMnICUgd2hpY2gpCiAgICAgICAgIHJldHVybiBzZWxmLl9sb25nY21kKCdVSURMJykKIAotdHJ5OgotICAgIGltcG9ydCBzc2wKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgorCisgICAgZGVmIGNhcGEoc2VsZik6CisgICAgICAgICIiIlJldHVybiBzZXJ2ZXIgY2FwYWJpbGl0aWVzIChSRkMgMjQ0OSkgYXMgYSBkaWN0aW9uYXJ5CisgICAgICAgID4+PiBjPXBvcGxpYi5QT1AzKCdsb2NhbGhvc3QnKQorICAgICAgICA+Pj4gYy5jYXBhKCkKKyAgICAgICAgeydJTVBMRU1FTlRBVElPTic6IFsnQ3lydXMnLCAnUE9QMycsICdzZXJ2ZXInLCAndjIuMi4xMiddLAorICAgICAgICAgJ1RPUCc6IFtdLCAnTE9HSU4tREVMQVknOiBbJzAnXSwgJ0FVVEgtUkVTUC1DT0RFJzogW10sCisgICAgICAgICAnRVhQSVJFJzogWydORVZFUiddLCAnVVNFUic6IFtdLCAnU1RMUyc6IFtdLCAnUElQRUxJTklORyc6IFtdLAorICAgICAgICAgJ1VJREwnOiBbXSwgJ1JFU1AtQ09ERVMnOiBbXX0KKyAgICAgICAgPj4+CisKKyAgICAgICAgUmVhbGx5LCBhY2NvcmRpbmcgdG8gUkZDIDI0NDksIHRoZSBjeXJ1cyBmb2xrcyBzaG91bGQgYXZvaWQKKyAgICAgICAgaGF2aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGxpdCBpbnRvIG11bHRpcGxlIGFyZ3VtZW50cy4uLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9wYXJzZWNhcChsaW5lKToKKyAgICAgICAgICAgIGxzdCA9IGxpbmUuZGVjb2RlKCdhc2NpaScpLnNwbGl0KCkKKyAgICAgICAgICAgIHJldHVybiBsc3RbMF0sIGxzdFsxOl0KKworICAgICAgICBjYXBzID0ge30KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuX2xvbmdjbWQoJ0NBUEEnKQorICAgICAgICAgICAgcmF3Y2FwcyA9IHJlc3BbMV0KKyAgICAgICAgICAgIGZvciBjYXBsaW5lIGluIHJhd2NhcHM6CisgICAgICAgICAgICAgICAgY2Fwbm0sIGNhcGFyZ3MgPSBfcGFyc2VjYXAoY2FwbGluZSkKKyAgICAgICAgICAgICAgICBjYXBzW2NhcG5tXSA9IGNhcGFyZ3MKKyAgICAgICAgZXhjZXB0IGVycm9yX3Byb3RvIGFzIF9lcnI6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBDQVBBIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKKyAgICAgICAgcmV0dXJuIGNhcHMKKworCisgICAgZGVmIHN0bHMoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgYSBUTFMgc2Vzc2lvbiBvbiB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gYXMgc3BlY2lmaWVkIGluIFJGQyAyNTk1LgorCisgICAgICAgICAgICAgICAgY29udGV4dCAtIGEgc3NsLlNTTENvbnRleHQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBIQVZFX1NTTDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzdXBwb3J0IG1pc3NpbmcnKQorICAgICAgICBpZiBzZWxmLl90bHNfZXN0YWJsaXNoZWQ6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBUTFMgc2Vzc2lvbiBhbHJlYWR5IGVzdGFibGlzaGVkJykKKyAgICAgICAgY2FwcyA9IHNlbGYuY2FwYSgpCisgICAgICAgIGlmIG5vdCAnU1RMUycgaW4gY2FwczoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFNUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUTFMnKQorICAgICAgICBzZWxmLnNvY2sgPSBjb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCisgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIHJlc3AKKworCitpZiBIQVZFX1NTTDoKIAogICAgIGNsYXNzIFBPUDNfU1NMKFBPUDMpOgogICAgICAgICAiIiJQT1AzIGNsaWVudCBjbGFzcyBvdmVyIFNTTCBjb25uZWN0aW9uCiAKLSAgICAgICAgSW5zdGFudGlhdGUgd2l0aDogUE9QM19TU0woaG9zdG5hbWUsIHBvcnQ9OTk1LCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUpCisgICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PU5vbmUpCiAKICAgICAgICAgICAgICAgIGhvc3RuYW1lIC0gdGhlIGhvc3RuYW1lIG9mIHRoZSBwb3AzIG92ZXIgc3NsIHNlcnZlcgogICAgICAgICAgICAgICAgcG9ydCAtIHBvcnQgbnVtYmVyCiAgICAgICAgICAgICAgICBrZXlmaWxlIC0gUEVNIGZvcm1hdHRlZCBmaWxlIHRoYXQgY29udGFpbnMgeW91ciBwcml2YXRlIGtleQogICAgICAgICAgICAgICAgY2VydGZpbGUgLSBQRU0gZm9ybWF0dGVkIGNlcnRpZmljYXRlIGNoYWluIGZpbGUKKyAgICAgICAgICAgICAgIGNvbnRleHQgLSBhIHNzbC5TU0xDb250ZXh0CiAKICAgICAgICAgU2VlIHRoZSBtZXRob2RzIG9mIHRoZSBwYXJlbnQgY2xhc3MgUE9QMyBmb3IgbW9yZSBkb2N1bWVudGF0aW9uLgogICAgICAgICAiIiIKQEAgLTM1MywxNyArNDIwLDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogICAgICAgICAgICAgUE9QMy5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCB0aW1lb3V0KQogCiAgICAgICAgIGRlZiBfY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KToKICAgICAgICAgICAgIHNvY2sgPSBQT1AzLl9jcmVhdGVfc29ja2V0KHNlbGYsIHRpbWVvdXQpCi0gICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzb2NrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzb2NrID0gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIHNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaykKICAgICAgICAgICAgIHJldHVybiBzb2NrCiAKKyAgICAgICAgZGVmIHN0bHMoc2VsZiwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAgICAgIiIiVGhlIG1ldGhvZCB1bmNvbmRpdGlvbmFsbHkgcmFpc2VzIGFuIGV4Y2VwdGlvbiBzaW5jZSB0aGUKKyAgICAgICAgICAgIFNUTFMgY29tbWFuZCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIG9uIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgIFNTTC9UTFMgc2Vzc2lvbi4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgVExTIHNlc3Npb24gYWxyZWFkeSBlc3RhYmxpc2hlZCcpCisKICAgICBfX2FsbF9fLmFwcGVuZCgiUE9QM19TU0wiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Bvc2l4cGF0aC5weSBiL0xpYi9wb3NpeHBhdGgucHkKaW5kZXggYjFlMWE5Mi4uNDkyYzQxNSAxMDA2NDQKLS0tIGEvTGliL3Bvc2l4cGF0aC5weQorKysgYi9MaWIvcG9zaXhwYXRoLnB5CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0xOSyhzdC5zdF9tb2RlKQogCkBAIC0xNzIsNTYgKzE3MiwzNSBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6CiAgICAgICAgIG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCiAKLSMgQXJlIHR3byBmaWxlbmFtZXMgcmVhbGx5IHBvaW50aW5nIHRvIHRoZSBzYW1lIGZpbGU/Ci0KLWRlZiBzYW1lZmlsZShmMSwgZjIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgotICAgIHMxID0gb3Muc3RhdChmMSkKLSAgICBzMiA9IG9zLnN0YXQoZjIpCi0gICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKLQotCi0jIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KLSMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQotCi1kZWYgc2FtZW9wZW5maWxlKGZwMSwgZnAyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIG9wZW4gZmlsZSBvYmplY3RzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgczEgPSBvcy5mc3RhdChmcDEpCi0gICAgczIgPSBvcy5mc3RhdChmcDIpCi0gICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKLQotCi0jIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQotIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/Ci0KLWRlZiBzYW1lc3RhdChzMSwgczIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gc3RhdCBidWZmZXJzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgcmV0dXJuIHMxLnN0X2lubyA9PSBzMi5zdF9pbm8gYW5kIFwKLSAgICAgICAgICAgczEuc3RfZGV2ID09IHMyLnN0X2RldgotCi0KICMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/CiAjIChEb2VzIHRoaXMgd29yayBmb3IgYWxsIFVOSVhlcz8gIElzIGl0IGV2ZW4gZ3VhcmFudGVlZCB0byB3b3JrIGJ5IFBvc2l4PykKIAogZGVmIGlzbW91bnQocGF0aCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IiIiCi0gICAgaWYgaXNsaW5rKHBhdGgpOgotICAgICAgICAjIEEgc3ltbGluayBjYW4gbmV2ZXIgYmUgYSBtb3VudCBwb2ludAotICAgICAgICByZXR1cm4gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIHMxID0gb3MubHN0YXQocGF0aCkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6Ci0gICAgICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsIGInLi4nKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCAnLi4nKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQuIDotKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICAjIEEgc3ltbGluayBjYW4gbmV2ZXIgYmUgYSBtb3VudCBwb2ludAorICAgICAgICBpZiBzdGF0LlNfSVNMTksoczEuc3RfbW9kZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsIGInLi4nKQorICAgIGVsc2U6CisgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICB0cnk6CiAgICAgICAgIHMyID0gb3MubHN0YXQocGFyZW50KQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlICMgSXQgZG9lc24ndCBleGlzdCAtLSBzbyBub3QgYSBtb3VudCBwb2ludCA6LSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICBkZXYxID0gczEuc3RfZGV2CiAgICAgZGV2MiA9IHMyLnN0X2RldgogICAgIGlmIGRldjEgIT0gZGV2MjoKZGlmZiAtLWdpdCBhL0xpYi9wcHJpbnQucHkgYi9MaWIvcHByaW50LnB5CmluZGV4IDIyYmUwYjRiLi4zYmU5YzM2IDEwMDY0NAotLS0gYS9MaWIvcHByaW50LnB5CisrKyBiL0xpYi9wcHJpbnQucHkKQEAgLTM0LDYgKzM0LDcgQEAKIAogIiIiCiAKK2ltcG9ydCByZQogaW1wb3J0IHN5cyBhcyBfc3lzCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCBhcyBfT3JkZXJlZERpY3QKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPIGFzIF9TdHJpbmdJTwpAQCAtNDEsMjIgKzQyLDE5IEBACiBfX2FsbF9fID0gWyJwcHJpbnQiLCJwZm9ybWF0IiwiaXNyZWFkYWJsZSIsImlzcmVjdXJzaXZlIiwic2FmZXJlcHIiLAogICAgICAgICAgICAiUHJldHR5UHJpbnRlciJdCiAKLSMgY2FjaGUgdGhlc2UgZm9yIGZhc3RlciBhY2Nlc3M6Ci1fY29tbWFqb2luID0gIiwgIi5qb2luCi1faWQgPSBpZAotX2xlbiA9IGxlbgotX3R5cGUgPSB0eXBlCiAKLQotZGVmIHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosCisgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIlByZXR0eS1wcmludCBhIFB5dGhvbiBvYmplY3QgdG8gYSBzdHJlYW0gW2RlZmF1bHQgaXMgc3lzLnN0ZG91dF0uIiIiCiAgICAgcHJpbnRlciA9IFByZXR0eVByaW50ZXIoCi0gICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkKKyAgICAgICAgc3RyZWFtPXN0cmVhbSwgaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICBjb21wYWN0PWNvbXBhY3QpCiAgICAgcHJpbnRlci5wcHJpbnQob2JqZWN0KQogCi1kZWYgcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSk6CitkZWYgcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSk6CiAgICAgIiIiRm9ybWF0IGEgUHl0aG9uIG9iamVjdCBpbnRvIGEgcHJldHR5LXByaW50ZWQgcmVwcmVzZW50YXRpb24uIiIiCi0gICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoKS5wZm9ybWF0KG9iamVjdCkKKyAgICByZXR1cm4gUHJldHR5UHJpbnRlcihpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1jb21wYWN0KS5wZm9ybWF0KG9iamVjdCkKIAogZGVmIHNhZmVyZXByKG9iamVjdCk6CiAgICAgIiIiVmVyc2lvbiBvZiByZXByKCkgd2hpY2ggY2FuIGhhbmRsZSByZWN1cnNpdmUgZGF0YSBzdHJ1Y3R1cmVzLiIiIgpAQCAtMTAxLDcgKzk5LDggQEAKICAgICByZXR1cm4gX3NhZmVfa2V5KHRbMF0pLCBfc2FmZV9rZXkodFsxXSkKIAogY2xhc3MgUHJldHR5UHJpbnRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCBzdHJlYW09Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosCisgICAgICAgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpOgogICAgICAgICAiIiJIYW5kbGUgcHJldHR5IHByaW50aW5nIG9wZXJhdGlvbnMgb250byBhIHN0cmVhbSB1c2luZyBhIHNldCBvZgogICAgICAgICBjb25maWd1cmVkIHBhcmFtZXRlcnMuCiAKQEAgLTExOCw2ICsxMTcsOSBAQAogICAgICAgICAgICAgVGhlIGRlc2lyZWQgb3V0cHV0IHN0cmVhbS4gIElmIG9taXR0ZWQgKG9yIGZhbHNlKSwgdGhlIHN0YW5kYXJkCiAgICAgICAgICAgICBvdXRwdXQgc3RyZWFtIGF2YWlsYWJsZSBhdCBjb25zdHJ1Y3Rpb24gd2lsbCBiZSB1c2VkLgogCisgICAgICAgIGNvbXBhY3QKKyAgICAgICAgICAgIElmIHRydWUsIHNldmVyYWwgaXRlbXMgd2lsbCBiZSBjb21iaW5lZCBpbiBvbmUgbGluZS4KKwogICAgICAgICAiIiIKICAgICAgICAgaW5kZW50ID0gaW50KGluZGVudCkKICAgICAgICAgd2lkdGggPSBpbnQod2lkdGgpCkBAIC0xMzEsNiArMTMzLDcgQEAKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IHN0cmVhbQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fc3RyZWFtID0gX3N5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fY29tcGFjdCA9IGJvb2woY29tcGFjdCkKIAogICAgIGRlZiBwcHJpbnQoc2VsZiwgb2JqZWN0KToKICAgICAgICAgc2VsZi5fZm9ybWF0KG9iamVjdCwgc2VsZi5fc3RyZWFtLCAwLCAwLCB7fSwgMCkKQEAgLTE1MCwyOCArMTUzLDI1IEBACiAKICAgICBkZWYgX2Zvcm1hdChzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKICAgICAgICAgbGV2ZWwgPSBsZXZlbCArIDEKLSAgICAgICAgb2JqaWQgPSBfaWQob2JqZWN0KQorICAgICAgICBvYmppZCA9IGlkKG9iamVjdCkKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShfcmVjdXJzaW9uKG9iamVjdCkpCiAgICAgICAgICAgICBzZWxmLl9yZWN1cnNpdmUgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9yZWFkYWJsZSA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihvYmplY3QsIGNvbnRleHQsIGxldmVsIC0gMSkKLSAgICAgICAgdHlwID0gX3R5cGUob2JqZWN0KQotICAgICAgICBzZXBMaW5lcyA9IF9sZW4ocmVwKSA+IChzZWxmLl93aWR0aCAtIDEgLSBpbmRlbnQgLSBhbGxvd2FuY2UpCisgICAgICAgIHR5cCA9IHR5cGUob2JqZWN0KQorICAgICAgICBtYXhfd2lkdGggPSBzZWxmLl93aWR0aCAtIDEgLSBpbmRlbnQgLSBhbGxvd2FuY2UKKyAgICAgICAgc2VwTGluZXMgPSBsZW4ocmVwKSA+IG1heF93aWR0aAogICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQogCi0gICAgICAgIGlmIHNlbGYuX2RlcHRoIGFuZCBsZXZlbCA+IHNlbGYuX2RlcHRoOgotICAgICAgICAgICAgd3JpdGUocmVwKQotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgaWYgc2VwTGluZXM6CiAgICAgICAgICAgICByID0gZ2V0YXR0cih0eXAsICJfX3JlcHJfXyIsIE5vbmUpCiAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgZGljdCk6CiAgICAgICAgICAgICAgICAgd3JpdGUoJ3snKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgPiAxOgogICAgICAgICAgICAgICAgICAgICB3cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IF9sZW4ob2JqZWN0KQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbihvYmplY3QpCiAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoOgogICAgICAgICAgICAgICAgICAgICBjb250ZXh0W29iamlkXSA9IDEKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbApAQCAtMTgzLDEzICsxODMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihrZXksIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCc6ICcpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgX2xlbihyZXApICsgMiwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBlbnQgaW4gaXRlbXNbMTpdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLFxuJXMlczogJyAlICgnICcqaW5kZW50LCByZXApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgX2xlbihyZXApICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIGxlbihyZXApICsgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgLSBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCiAgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBzZXQpIGFuZCByIGlzIHNldC5fX3JlcHJfXykgb3IKICAgICAgICAgICAgICAgICAoaXNzdWJjbGFzcyh0eXAsIGZyb3plbnNldCkgYW5kIHIgaXMgZnJvemVuc2V0Ll9fcmVwcl9fKQogICAgICAgICAgICAgICAgKToKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBsaXN0KToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ1snKQogICAgICAgICAgICAgICAgICAgICBlbmRjaGFyID0gJ10nCkBAIC0yMjUsMjMgKzIyNSw3MSBAQAogICAgICAgICAgICAgICAgICAgICB3cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KG9iamVjdFswXSwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnQgaW4gb2JqZWN0WzE6XToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLFxuJyArICcgJyppbmRlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXRfaXRlbXMob2JqZWN0LCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIGxlbmd0aCA9PSAxOgogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLCcpCiAgICAgICAgICAgICAgICAgd3JpdGUoZW5kY2hhcikKICAgICAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIHN0cikgYW5kIGxlbihvYmplY3QpID4gMCBhbmQgciBpcyBzdHIuX19yZXByX186CisgICAgICAgICAgICAgICAgZGVmIF9zdHJfcGFydHMocyk6CisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHN0cmluZyBsaXRlcmFscyBjb21wcmlzaW5nIHRoZSByZXByKCkKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGdpdmVuIHN0cmluZyB1c2luZyBsaXRlcmFsIGNvbmNhdGVuYXRpb24uCisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IHMuc3BsaXRsaW5lcyhUcnVlKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwID0gcmVwcihsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHJlcCkgPD0gbWF4X3dpZHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlcAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEEgbGlzdCBvZiBhbHRlcm5hdGluZyAobm9uLXNwYWNlLCBzcGFjZSkgc3RyaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcmUuc3BsaXQocicoXHMrKScsIGxpbmUpICsgWycnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihwYXJ0cyksIDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydHNbaV0gKyBwYXJ0c1tpKzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGN1cnJlbnQgKyBwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXByKGNhbmRpZGF0ZSkpID4gbWF4X3dpZHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXByKGN1cnJlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlcHIoY3VycmVudCkKKyAgICAgICAgICAgICAgICBmb3IgaSwgcmVwIGluIGVudW1lcmF0ZShfc3RyX3BhcnRzKG9iamVjdCkpOgorICAgICAgICAgICAgICAgICAgICBpZiBpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdcbicgKyAnICcqaW5kZW50KQorICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdyaXRlKHJlcCkKIAorICAgIGRlZiBfZm9ybWF0X2l0ZW1zKHNlbGYsIGl0ZW1zLCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CisgICAgICAgIHdyaXRlID0gc3RyZWFtLndyaXRlCisgICAgICAgIGRlbGltbmwgPSAnLFxuJyArICcgJyAqIGluZGVudAorICAgICAgICBkZWxpbSA9ICcnCisgICAgICAgIHdpZHRoID0gbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSBpbmRlbnQgLSBhbGxvd2FuY2UgKyAyCisgICAgICAgIGZvciBlbnQgaW4gaXRlbXM6CisgICAgICAgICAgICBpZiBzZWxmLl9jb21wYWN0OgorICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoZW50LCBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgICAgICAgICB3ID0gbGVuKHJlcCkgKyAyCisgICAgICAgICAgICAgICAgaWYgd2lkdGggPCB3OgorICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1heF93aWR0aAorICAgICAgICAgICAgICAgICAgICBpZiBkZWxpbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGltID0gZGVsaW1ubAorICAgICAgICAgICAgICAgIGlmIHdpZHRoID49IHc6CisgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHcKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICAgICAgICAgIGRlbGltID0gJywgJworICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3cml0ZShkZWxpbSkKKyAgICAgICAgICAgIGRlbGltID0gZGVsaW1ubAorICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpCisKICAgICBkZWYgX3JlcHIoc2VsZiwgb2JqZWN0LCBjb250ZXh0LCBsZXZlbCk6CiAgICAgICAgIHJlcHIsIHJlYWRhYmxlLCByZWN1cnNpdmUgPSBzZWxmLmZvcm1hdChvYmplY3QsIGNvbnRleHQuY29weSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVwdGgsIGxldmVsKQpAQCAtMjYyLDcgKzMxMCw3IEBACiAjIFJldHVybiB0cmlwbGUgKHJlcHJfc3RyaW5nLCBpc3JlYWRhYmxlLCBpc3JlY3Vyc2l2ZSkuCiAKIGRlZiBfc2FmZV9yZXByKG9iamVjdCwgY29udGV4dCwgbWF4bGV2ZWxzLCBsZXZlbCk6Ci0gICAgdHlwID0gX3R5cGUob2JqZWN0KQorICAgIHR5cCA9IHR5cGUob2JqZWN0KQogICAgIGlmIHR5cCBpcyBzdHI6CiAgICAgICAgIGlmICdsb2NhbGUnIG5vdCBpbiBfc3lzLm1vZHVsZXM6CiAgICAgICAgICAgICByZXR1cm4gcmVwcihvYmplY3QpLCBUcnVlLCBGYWxzZQpAQCAtMjg2LDcgKzMzNCw3IEBACiAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpIGFuZCByIGlzIGRpY3QuX19yZXByX186CiAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICByZXR1cm4gInt9IiwgVHJ1ZSwgRmFsc2UKLSAgICAgICAgb2JqaWQgPSBfaWQob2JqZWN0KQorICAgICAgICBvYmppZCA9IGlkKG9iamVjdCkKICAgICAgICAgaWYgbWF4bGV2ZWxzIGFuZCBsZXZlbCA+PSBtYXhsZXZlbHM6CiAgICAgICAgICAgICByZXR1cm4gInsuLi59IiwgRmFsc2UsIG9iamlkIGluIGNvbnRleHQKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKQEAgLTMwNyw3ICszNTUsNyBAQAogICAgICAgICAgICAgaWYga3JlY3VyIG9yIHZyZWN1cjoKICAgICAgICAgICAgICAgICByZWN1cnNpdmUgPSBUcnVlCiAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQotICAgICAgICByZXR1cm4gInslc30iICUgX2NvbW1ham9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQorICAgICAgICByZXR1cm4gInslc30iICUgIiwgIi5qb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCiAKICAgICBpZiAoaXNzdWJjbGFzcyh0eXAsIGxpc3QpIGFuZCByIGlzIGxpc3QuX19yZXByX18pIG9yIFwKICAgICAgICAoaXNzdWJjbGFzcyh0eXAsIHR1cGxlKSBhbmQgciBpcyB0dXBsZS5fX3JlcHJfXyk6CkBAIC0zMTUsMTMgKzM2MywxMyBAQAogICAgICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICByZXR1cm4gIltdIiwgVHJ1ZSwgRmFsc2UKICAgICAgICAgICAgIGZvcm1hdCA9ICJbJXNdIgotICAgICAgICBlbGlmIF9sZW4ob2JqZWN0KSA9PSAxOgorICAgICAgICBlbGlmIGxlbihvYmplY3QpID09IDE6CiAgICAgICAgICAgICBmb3JtYXQgPSAiKCVzLCkiCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgICAgIHJldHVybiAiKCkiLCBUcnVlLCBGYWxzZQogICAgICAgICAgICAgZm9ybWF0ID0gIiglcykiCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG1heGxldmVscyBhbmQgbGV2ZWwgPj0gbWF4bGV2ZWxzOgogICAgICAgICAgICAgcmV0dXJuIGZvcm1hdCAlICIuLi4iLCBGYWxzZSwgb2JqaWQgaW4gY29udGV4dAogICAgICAgICBpZiBvYmppZCBpbiBjb250ZXh0OgpAQCAtMzQwLDcgKzM4OCw3IEBACiAgICAgICAgICAgICBpZiBvcmVjdXI6CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgcmV0dXJuIGZvcm1hdCAlIF9jb21tYWpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKKyAgICAgICAgcmV0dXJuIGZvcm1hdCAlICIsICIuam9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQogCiAgICAgcmVwID0gcmVwcihvYmplY3QpCiAgICAgcmV0dXJuIHJlcCwgKHJlcCBhbmQgbm90IHJlcC5zdGFydHN3aXRoKCc8JykpLCBGYWxzZQpAQCAtMzQ4LDcgKzM5Niw3IEBACiAKIGRlZiBfcmVjdXJzaW9uKG9iamVjdCk6CiAgICAgcmV0dXJuICgiPFJlY3Vyc2lvbiBvbiAlcyB3aXRoIGlkPSVzPiIKLSAgICAgICAgICAgICUgKF90eXBlKG9iamVjdCkuX19uYW1lX18sIF9pZChvYmplY3QpKSkKKyAgICAgICAgICAgICUgKHR5cGUob2JqZWN0KS5fX25hbWVfXywgaWQob2JqZWN0KSkpCiAKIAogZGVmIF9wZXJmY2hlY2sob2JqZWN0PU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL3Byb2ZpbGUucHkgYi9MaWIvcHJvZmlsZS5weQppbmRleCA3NDNlNzdkLi41ZDBlOTY4IDEwMDc1NQotLS0gYS9MaWIvcHJvZmlsZS5weQorKysgYi9MaWIvcHJvZmlsZS5weQpAQCAtNDAsNiArNDAsNDAgQEAKICMgICAgICAgcmV0dXJuIGlfY291bnQKICNpdGltZXMgPSBpbnRlZ2VyX3RpbWVyICMgcmVwbGFjZSB3aXRoIEMgY29kZWQgdGltZXIgcmV0dXJuaW5nIGludGVnZXJzCiAKK2NsYXNzIF9VdGlsczoKKyAgICAiIiJTdXBwb3J0IGNsYXNzIGZvciB1dGlsaXR5IGZ1bmN0aW9ucyB3aGljaCBhcmUgc2hhcmVkIGJ5CisgICAgcHJvZmlsZS5weSBhbmQgY1Byb2ZpbGUucHkgbW9kdWxlcy4KKyAgICBOb3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9maWxlcik6CisgICAgICAgIHNlbGYucHJvZmlsZXIgPSBwcm9maWxlcgorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KToKKyAgICAgICAgcHJvZiA9IHNlbGYucHJvZmlsZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9mLnJ1bihzdGF0ZW1lbnQpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc2hvdyhwcm9mLCBmaWxlbmFtZSwgc29ydCkKKworICAgIGRlZiBydW5jdHgoc2VsZiwgc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lLCBzb3J0KToKKyAgICAgICAgcHJvZiA9IHNlbGYucHJvZmlsZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9mLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscykKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zaG93KHByb2YsIGZpbGVuYW1lLCBzb3J0KQorCisgICAgZGVmIF9zaG93KHNlbGYsIHByb2YsIGZpbGVuYW1lLCBzb3J0KToKKyAgICAgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm9mLnByaW50X3N0YXRzKHNvcnQpCisKKwogIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAjIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyBmb3IgdGhlIHByb2ZpbGVyIGNsYXNzCiAjIE5vdGUgdGhhdCBhbiBpbnN0YW5jZSBvZiBQcm9maWxlKCkgaXMgKm5vdCogbmVlZGVkIHRvIGNhbGwgdGhlbS4KQEAgLTU2LDE1ICs5MCw3IEBACiAgICAgc3RhbmRhcmQgbmFtZSBzdHJpbmcgKGZpbGUvbGluZS9mdW5jdGlvbi1uYW1lKSB0aGF0IGlzIHByZXNlbnRlZCBpbgogICAgIGVhY2ggbGluZS4KICAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgdHJ5OgotICAgICAgICBwcm9mID0gcHJvZi5ydW4oc3RhdGVtZW50KQotICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICBwYXNzCi0gICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcHJvZi5wcmludF9zdGF0cyhzb3J0KQorICAgIHJldHVybiBfVXRpbHMoUHJvZmlsZSkucnVuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvcnQpCiAKIGRlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUsIHNvcnQ9LTEpOgogICAgICIiIlJ1biBzdGF0ZW1lbnQgdW5kZXIgcHJvZmlsZXIsIHN1cHBseWluZyB5b3VyIG93biBnbG9iYWxzIGFuZCBsb2NhbHMsCkBAIC03MiwxNiArOTgsOCBAQAogCiAgICAgc3RhdGVtZW50IGFuZCBmaWxlbmFtZSBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBwcm9maWxlLnJ1bgogICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICB0cnk6Ci0gICAgICAgIHByb2YgPSBwcm9mLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscykKLSAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgcGFzcworICAgIHJldHVybiBfVXRpbHMoUHJvZmlsZSkucnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZSwgc29ydCkKIAotICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKIAogY2xhc3MgUHJvZmlsZToKICAgICAiIiJQcm9maWxlciBjbGFzcy4KQEAgLTM3MywxMCArMzkxLDkgQEAKICAgICAgICAgICAgICAgICAgIHByaW50X3N0YXRzKCkKIAogICAgIGRlZiBkdW1wX3N0YXRzKHNlbGYsIGZpbGUpOgotICAgICAgICBmID0gb3BlbihmaWxlLCAnd2InKQotICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCi0gICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLnN0YXRzLCBmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKIAogICAgIGRlZiBjcmVhdGVfc3RhdHMoc2VsZik6CiAgICAgICAgIHNlbGYuc2ltdWxhdGVfY21kX2NvbXBsZXRlKCkKZGlmZiAtLWdpdCBhL0xpYi9wc3RhdHMucHkgYi9MaWIvcHN0YXRzLnB5CmluZGV4IDZhNzc2MDUuLmUxZWMzNTUgMTAwNjQ0Ci0tLSBhL0xpYi9wc3RhdHMucHkKKysrIGIvTGliL3BzdGF0cy5weQpAQCAtOTMsOSArOTMsOCBAQAogICAgICAgICAgICAgc2VsZi5zdGF0cyA9IHt9CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZywgc3RyKToKLSAgICAgICAgICAgIGYgPSBvcGVuKGFyZywgJ3JiJykKLSAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBtYXJzaGFsLmxvYWQoZikKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFyZywgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmlsZV9zdGF0cyA9IG9zLnN0YXQoYXJnKQogICAgICAgICAgICAgICAgIGFyZyA9IHRpbWUuY3RpbWUoZmlsZV9zdGF0cy5zdF9tdGltZSkgKyAiICAgICIgKyBhcmcKQEAgLTE0OSwxMSArMTQ4LDggQEAKIAogICAgIGRlZiBkdW1wX3N0YXRzKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiV3JpdGUgdGhlIHByb2ZpbGUgZGF0YSB0byBhIGZpbGUgd2Uga25vdyBob3cgdG8gbG9hZCBiYWNrLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3diJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgIyBsaXN0IHRoZSB0dXBsZSBpbmRpY2VzIGFuZCBkaXJlY3Rpb25zIGZvciBzb3J0aW5nLAogICAgICMgYWxvbmcgd2l0aCBzb21lIHByaW50YWJsZSBkZXNjcmlwdGlvbgpAQCAtNjEyLDcgKzYwOCw3IEBACiAgICAgICAgICAgICBpZiBsaW5lOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IFN0YXRzKGxpbmUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZXJyLmFyZ3NbMV0sIGZpbGU9c2VsZi5zdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgpkaWZmIC0tZ2l0IGEvTGliL3B0eS5weSBiL0xpYi9wdHkucHkKaW5kZXggM2NjZjYxOS4uZTg0MWYxMiAxMDA2NDQKLS0tIGEvTGliL3B0eS5weQorKysgYi9MaWIvcHR5LnB5CkBAIC00NywyNyArNDcsMTYgQEAKICAgICByZXR1cm4gX29wZW5fdGVybWluYWwoKQogCiBkZWYgX29wZW5fdGVybWluYWwoKToKLSAgICAiIiJPcGVuIHB0eSBtYXN0ZXIgYW5kIHJldHVybiAobWFzdGVyX2ZkLCB0dHlfbmFtZSkuCi0gICAgU0dJIGFuZCBnZW5lcmljIEJTRCB2ZXJzaW9uLCBmb3Igd2hlbiBvcGVucHR5KCkgZmFpbHMuIiIiCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgc2dpCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdHR5X25hbWUsIG1hc3Rlcl9mZCA9IHNnaS5fZ2V0cHR5KG9zLk9fUkRXUiwgMG82NjYsIDApCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKG1zZykKLSAgICAgICAgcmV0dXJuIG1hc3Rlcl9mZCwgdHR5X25hbWUKKyAgICAiIiJPcGVuIHB0eSBtYXN0ZXIgYW5kIHJldHVybiAobWFzdGVyX2ZkLCB0dHlfbmFtZSkuIiIiCiAgICAgZm9yIHggaW4gJ3BxcnN0dXZ3eHl6UFFSU1QnOgogICAgICAgICBmb3IgeSBpbiAnMDEyMzQ1Njc4OWFiY2RlZic6CiAgICAgICAgICAgICBwdHlfbmFtZSA9ICcvZGV2L3B0eScgKyB4ICsgeQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkID0gb3Mub3BlbihwdHlfbmFtZSwgb3MuT19SRFdSKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJldHVybiAoZmQsICcvZGV2L3R0eScgKyB4ICsgeSkKLSAgICByYWlzZSBvcy5lcnJvcignb3V0IG9mIHB0eSBkZXZpY2VzJykKKyAgICByYWlzZSBPU0Vycm9yKCdvdXQgb2YgcHR5IGRldmljZXMnKQogCiBkZWYgc2xhdmVfb3Blbih0dHlfbmFtZSk6CiAgICAgIiIic2xhdmVfb3Blbih0dHlfbmFtZSkgLT4gc2xhdmVfZmQKQEAgLTgzLDcgKzcyLDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlvY3RsKHJlc3VsdCwgSV9QVVNILCAicHRlbSIpCiAgICAgICAgIGlvY3RsKHJlc3VsdCwgSV9QVVNILCAibGR0ZXJtIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHJldHVybiByZXN1bHQKIApAQCAtMTczLDggKzE2Miw5IEBACiAgICAgICAgIHJlc3RvcmUgPSAwCiAgICAgdHJ5OgogICAgICAgICBfY29weShtYXN0ZXJfZmQsIG1hc3Rlcl9yZWFkLCBzdGRpbl9yZWFkKQotICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIHJlc3RvcmU6CiAgICAgICAgICAgICB0dHkudGNzZXRhdHRyKFNURElOX0ZJTEVOTywgdHR5LlRDU0FGTFVTSCwgbW9kZSkKIAogICAgIG9zLmNsb3NlKG1hc3Rlcl9mZCkKKyAgICByZXR1cm4gb3Mud2FpdHBpZChwaWQsIDApWzFdCmRpZmYgLS1naXQgYS9MaWIvcHlfY29tcGlsZS5weSBiL0xpYi9weV9jb21waWxlLnB5CmluZGV4IDYyZDY5YWQuLjEyNzdiOTMgMTAwNjQ0Ci0tLSBhL0xpYi9weV9jb21waWxlLnB5CisrKyBiL0xpYi9weV9jb21waWxlLnB5CkBAIC0zLDE3ICszLDE0IEBACiBUaGlzIG1vZHVsZSBoYXMgaW50aW1hdGUga25vd2xlZGdlIG9mIHRoZSBmb3JtYXQgb2YgLnB5YyBmaWxlcy4KICIiIgogCi1pbXBvcnQgYnVpbHRpbnMKLWltcG9ydCBlcnJubwotaW1wb3J0IGltcAotaW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAoraW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwotaW1wb3J0IHRva2VuaXplCiBpbXBvcnQgdHJhY2ViYWNrCiAKLU1BR0lDID0gaW1wLmdldF9tYWdpYygpCi0KIF9fYWxsX18gPSBbImNvbXBpbGUiLCAibWFpbiIsICJQeUNvbXBpbGVFcnJvciJdCiAKIApAQCAtNjUsMTMgKzYyLDYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYubXNnCiAKIAotZGVmIHdyX2xvbmcoZiwgeCk6Ci0gICAgIiIiSW50ZXJuYWw7IHdyaXRlIGEgMzItYml0IGludCB0byBhIGZpbGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlci4iIiIKLSAgICBmLndyaXRlKGJ5dGVzKFt4ICAgICAgICAgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDgpICAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gMTYpICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiAyNCkgJiAweGZmXSkpCi0KIGRlZiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKToKICAgICAiIiJCeXRlLWNvbXBpbGUgb25lIFB5dGhvbiBzb3VyY2UgZmlsZSB0byBQeXRob24gYnl0ZWNvZGUuCiAKQEAgLTEwNywxOCArOTcsMzEgQEAKICAgICBTZWUgY29tcGlsZWFsbC5weSBmb3IgYSBzY3JpcHQvbW9kdWxlIHRoYXQgdXNlcyB0aGlzIG1vZHVsZSB0bwogICAgIGJ5dGUtY29tcGlsZSBhbGwgaW5zdGFsbGVkIGZpbGVzIChvciBhbGwgZmlsZXMgaW4gc2VsZWN0ZWQKICAgICBkaXJlY3RvcmllcykuCisKKyAgICBEbyBub3RlIHRoYXQgRmlsZUV4aXN0c0Vycm9yIGlzIHJhaXNlZCBpZiBjZmlsZSBlbmRzIHVwIHBvaW50aW5nIGF0IGEKKyAgICBub24tcmVndWxhciBmaWxlIG9yIHN5bWxpbmsuIEJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHVzZXMgYSBmaWxlIHJlbmFtaW5nLAorICAgIHRoZSByZXN1bHRpbmcgZmlsZSB3b3VsZCBiZSByZWd1bGFyIGFuZCB0aHVzIG5vdCB0aGUgc2FtZSB0eXBlIG9mIGZpbGUgYXMKKyAgICBpdCB3YXMgcHJldmlvdXNseS4KICAgICAiIiIKLSAgICB3aXRoIHRva2VuaXplLm9wZW4oZmlsZSkgYXMgZjoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3QgPSBvcy5mc3RhdChmLmZpbGVubygpKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZSkKLSAgICAgICAgdGltZXN0YW1wID0gaW50KHN0LnN0X210aW1lKQotICAgICAgICBzaXplID0gc3Quc3Rfc2l6ZSAmIDB4RkZGRkZGRkYKLSAgICAgICAgY29kZXN0cmluZyA9IGYucmVhZCgpCisgICAgaWYgY2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKKyAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQorICAgIGlmIG9zLnBhdGguaXNsaW5rKGNmaWxlKToKKyAgICAgICAgbXNnID0gKCd7fSBpcyBhIHN5bWxpbmsgYW5kIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgcmVndWxhciBmaWxlIGlmICcKKyAgICAgICAgICAgICAgICdpbXBvcnQgd3JpdGVzIGEgYnl0ZS1jb21waWxlZCBmaWxlIHRvIGl0JykKKyAgICAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKG1zZy5mb3JtYXQoY2ZpbGUpKQorICAgIGVsaWYgb3MucGF0aC5leGlzdHMoY2ZpbGUpIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoY2ZpbGUpOgorICAgICAgICBtc2cgPSAoJ3t9IGlzIGEgbm9uLXJlZ3VsYXIgZmlsZSBhbmQgd2lsbCBiZSBjaGFuZ2VkIGludG8gYSByZWd1bGFyICcKKyAgICAgICAgICAgICAgICdvbmUgaWYgaW1wb3J0IHdyaXRlcyBhIGJ5dGUtY29tcGlsZWQgZmlsZSB0byBpdCcpCisgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihtc2cuZm9ybWF0KGNmaWxlKSkKKyAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJzxweV9jb21waWxlPicsIGZpbGUpCisgICAgc291cmNlX2J5dGVzID0gbG9hZGVyLmdldF9kYXRhKGZpbGUpCiAgICAgdHJ5OgotICAgICAgICBjb2Rlb2JqZWN0ID0gYnVpbHRpbnMuY29tcGlsZShjb2Rlc3RyaW5nLCBkZmlsZSBvciBmaWxlLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplPW9wdGltaXplKQorICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKHNvdXJjZV9ieXRlcywgZGZpbGUgb3IgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW1pemU9b3B0aW1pemUpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgIHB5X2V4YyA9IFB5Q29tcGlsZUVycm9yKGVyci5fX2NsYXNzX18sIGVyciwgZGZpbGUgb3IgZmlsZSkKICAgICAgICAgaWYgZG9yYWlzZToKQEAgLTEyNiwyOCArMTI5LDIwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHB5X2V4Yy5tc2cgKyAnXG4nKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgaWYgY2ZpbGUgaXMgTm9uZToKLSAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGUpCiAgICAgdHJ5OgogICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGNmaWxlKQogICAgICAgICBpZiBkaXJuYW1lOgogICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgcmFpc2UKLSAgICB3aXRoIG9wZW4oY2ZpbGUsICd3YicpIGFzIGZjOgotICAgICAgICBmYy53cml0ZShiJ1wwXDBcMFwwJykKLSAgICAgICAgd3JfbG9uZyhmYywgdGltZXN0YW1wKQotICAgICAgICB3cl9sb25nKGZjLCBzaXplKQotICAgICAgICBtYXJzaGFsLmR1bXAoY29kZW9iamVjdCwgZmMpCi0gICAgICAgIGZjLmZsdXNoKCkKLSAgICAgICAgZmMuc2VlaygwLCAwKQotICAgICAgICBmYy53cml0ZShNQUdJQykKKyAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICBwYXNzCisgICAgc291cmNlX3N0YXRzID0gbG9hZGVyLnBhdGhfc3RhdHMoZmlsZSkKKyAgICBieXRlY29kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9jb2RlX3RvX2J5dGVjb2RlKAorICAgICAgICAgICAgY29kZSwgc291cmNlX3N0YXRzWydtdGltZSddLCBzb3VyY2Vfc3RhdHNbJ3NpemUnXSkKKyAgICBtb2RlID0gaW1wb3J0bGliLl9ib290c3RyYXAuX2NhbGNfbW9kZShmaWxlKQorICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl93cml0ZV9hdG9taWMoY2ZpbGUsIGJ5dGVjb2RlLCBtb2RlKQogICAgIHJldHVybiBjZmlsZQogCisKIGRlZiBtYWluKGFyZ3M9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KIApAQCAtMTczLDcgKzE2OCw3IEBACiAgICAgICAgICAgICBleGNlcHQgUHlDb21waWxlRXJyb3IgYXMgZXJyb3I6CiAgICAgICAgICAgICAgICAgcnYgPSAxCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXNcbiIgJSBlcnJvci5tc2cpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIHJ2ID0gMQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IpCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9weWRvYy5weSBiL0xpYi9weWRvYy5weQppbmRleCA5ZGNlMDc5Li4yZTYzMjI2IDEwMDc1NQotLS0gYS9MaWIvcHlkb2MucHkKKysrIGIvTGliL3B5ZG9jLnB5CkBAIC00NCwxNiArNDQsMTYgQEAKICIiIgogCiAjIEtub3duIGJ1Z3MgdGhhdCBjYW4ndCBiZSBmaXhlZCBoZXJlOgotIyAgIC0gaW1wLmxvYWRfbW9kdWxlKCkgY2Fubm90IGJlIHByZXZlbnRlZCBmcm9tIGNsb2JiZXJpbmcgZXhpc3RpbmcKLSMgICAgIGxvYWRlZCBtb2R1bGVzLCBzbyBjYWxsaW5nIHN5bm9wc2lzKCkgb24gYSBiaW5hcnkgbW9kdWxlIGZpbGUKLSMgICAgIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGFueSBleGlzdGluZyBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lLgorIyAgIC0gc3lub3BzaXMoKSBjYW5ub3QgYmUgcHJldmVudGVkIGZyb20gY2xvYmJlcmluZyBleGlzdGluZworIyAgICAgbG9hZGVkIG1vZHVsZXMuCiAjICAgLSBJZiB0aGUgX19maWxlX18gYXR0cmlidXRlIG9uIGEgbW9kdWxlIGlzIGEgcmVsYXRpdmUgcGF0aCBhbmQKICMgICAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBjaGFuZ2VkIHdpdGggb3MuY2hkaXIoKSwgYW4gaW5jb3JyZWN0CiAjICAgICBwYXRoIHdpbGwgYmUgZGlzcGxheWVkLgogCiBpbXBvcnQgYnVpbHRpbnMKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBpbwogaW1wb3J0IG9zCkBAIC0xNjcsOCArMTY3LDkgQEAKIGRlZiB2aXNpYmxlbmFtZShuYW1lLCBhbGw9Tm9uZSwgb2JqPU5vbmUpOgogICAgICIiIkRlY2lkZSB3aGV0aGVyIHRvIHNob3cgZG9jdW1lbnRhdGlvbiBvbiBhIHZhcmlhYmxlLiIiIgogICAgICMgQ2VydGFpbiBzcGVjaWFsIG5hbWVzIGFyZSByZWR1bmRhbnQgb3IgaW50ZXJuYWwuCisgICAgIyBYWFggUmVtb3ZlIF9faW5pdGlhbGl6aW5nX18/CiAgICAgaWYgbmFtZSBpbiB7J19fYXV0aG9yX18nLCAnX19idWlsdGluc19fJywgJ19fY2FjaGVkX18nLCAnX19jcmVkaXRzX18nLAotICAgICAgICAgICAgICAgICdfX2RhdGVfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19faW5pdGlhbGl6aW5nX18nLAorICAgICAgICAgICAgICAgICdfX2RhdGVfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fc3BlY19fJywKICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnX19xdWFsbmFtZV9fJywgJ19fc2xvdHNfXycsICdfX3ZlcnNpb25fXyd9OgogICAgICAgICByZXR1cm4gMApAQCAtMjI2LDcgKzIyNyw3IEBACiAgICAgaWYgbGFzdHVwZGF0ZSBpcyBOb25lIG9yIGxhc3R1cGRhdGUgPCBtdGltZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmlsZSA9IHRva2VuaXplLm9wZW4oZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgbW9kdWxlIGNhbid0IGJlIG9wZW5lZCwgc28gc2tpcCBpdAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgYmluYXJ5X3N1ZmZpeGVzID0gaW1wb3J0bGliLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU1s6XQpAQCAtMjY3LDIwICsyNjgsMTkgQEAKIAogZGVmIGltcG9ydGZpbGUocGF0aCk6CiAgICAgIiIiSW1wb3J0IGEgUHl0aG9uIHNvdXJjZSBmaWxlIG9yIGNvbXBpbGVkIGZpbGUgZ2l2ZW4gaXRzIHBhdGguIiIiCi0gICAgbWFnaWMgPSBpbXAuZ2V0X21hZ2ljKCkKKyAgICBtYWdpYyA9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUgogICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmaWxlOgotICAgICAgICBpZiBmaWxlLnJlYWQobGVuKG1hZ2ljKSkgPT0gbWFnaWM6Ci0gICAgICAgICAgICBraW5kID0gaW1wLlBZX0NPTVBJTEVECi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBraW5kID0gaW1wLlBZX1NPVVJDRQotICAgICAgICBmaWxlLnNlZWsoMCkKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCi0gICAgICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5sb2FkX21vZHVsZShuYW1lLCBmaWxlLCBwYXRoLCAoZXh0LCAncicsIGtpbmQpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByYWlzZSBFcnJvckR1cmluZ0ltcG9ydChwYXRoLCBzeXMuZXhjX2luZm8oKSkKLSAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIGlzX2J5dGVjb2RlID0gbWFnaWMgPT0gZmlsZS5yZWFkKGxlbihtYWdpYykpCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCisgICAgbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICBpZiBpc19ieXRlY29kZToKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aCkKKyAgICBlbHNlOgorICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgZXhjZXB0OgorICAgICAgICByYWlzZSBFcnJvckR1cmluZ0ltcG9ydChwYXRoLCBzeXMuZXhjX2luZm8oKSkKIAogZGVmIHNhZmVpbXBvcnQocGF0aCwgZm9yY2Vsb2FkPTAsIGNhY2hlPXt9KToKICAgICAiIiJJbXBvcnQgYSBtb2R1bGU7IGhhbmRsZSBlcnJvcnM7IHJldHVybiBOb25lIGlmIHRoZSBtb2R1bGUgaXNuJ3QgZm91bmQuCkBAIC05MTYsMjAgKzkxNiwxOCBAQAogICAgICAgICAgICAgICAgIHJlYWxsaW5rID0gcmVhbG5hbWUKICAgICAgICAgICAgIHRpdGxlID0gJzxhIG5hbWU9IiVzIj48c3Ryb25nPiVzPC9zdHJvbmc+PC9hPiA9ICVzJyAlICgKICAgICAgICAgICAgICAgICBhbmNob3IsIG5hbWUsIHJlYWxsaW5rKQotICAgICAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KToKLSAgICAgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIHZhcmt3LCBkZWZhdWx0cywgYW5uID0gXAotICAgICAgICAgICAgICAgIGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMob2JqZWN0KQotICAgICAgICAgICAgYXJnc3BlYyA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCB2YXJrdywgZGVmYXVsdHMsIGFubiwKLSAgICAgICAgICAgICAgICBmb3JtYXR2YWx1ZT1zZWxmLmZvcm1hdHZhbHVlLAotICAgICAgICAgICAgICAgIGZvcm1hdGFubm90YXRpb249aW5zcGVjdC5mb3JtYXRhbm5vdGF0aW9ucmVsYXRpdmV0byhvYmplY3QpKQotICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKLSAgICAgICAgICAgICAgICB0aXRsZSA9ICc8c3Ryb25nPiVzPC9zdHJvbmc+IDxlbT5sYW1iZGE8L2VtPiAnICUgbmFtZQotICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQotICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KLSAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcwotICAgICAgICBlbHNlOgorICAgICAgICBhcmdzcGVjID0gTm9uZQorICAgICAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KSBvciBpbnNwZWN0LmlzYnVpbHRpbihvYmplY3QpOgorICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUob2JqZWN0KQorICAgICAgICAgICAgaWYgc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBzdHIoc2lnbmF0dXJlKQorICAgICAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6CisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gJzxzdHJvbmc+JXM8L3N0cm9uZz4gPGVtPmxhbWJkYTwvZW0+ICcgJSBuYW1lCisgICAgICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQorICAgICAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgIyBTbyByZW1vdmluZyBwYXJlbnRoZXNlcyBpc24ndCB0cnVseSBzYWZlLgorICAgICAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcworICAgICAgICBpZiBub3QgYXJnc3BlYzoKICAgICAgICAgICAgIGFyZ3NwZWMgPSAnKC4uLiknCiAKICAgICAgICAgZGVjbCA9IHRpdGxlICsgYXJnc3BlYyArIChub3RlIGFuZCBzZWxmLmdyZXkoCkBAIC0xMjM2LDggKzEyMzQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZ2V0ZG9jKHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBwdXNoKHNlbGYuZG9jb3RoZXIoZ2V0YXR0cihvYmplY3QsIG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbW9kLCBtYXhsZW49NzAsIGRvYz1kb2MpICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgcHVzaChzZWxmLmRvY290aGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihvYmplY3QsIG5hbWUsIE5vbmUpIG9yIGhvbWVjbHMuX19kaWN0X19bbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBtb2QsIG1heGxlbj03MCwgZG9jPWRvYykgKyAnXG4nKQogICAgICAgICAgICAgcmV0dXJuIGF0dHJzCiAKICAgICAgICAgYXR0cnMgPSBbKG5hbWUsIGtpbmQsIGNscywgdmFsdWUpCkBAIC0xMjU5LDcgKzEyNTgsNiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0YWcgPSAiaW5oZXJpdGVkIGZyb20gJXMiICUgY2xhc3NuYW1lKHRoaXNjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX21vZHVsZV9fKQotCiAgICAgICAgICAgICAjIFNvcnQgYXR0cnMgYnkgbmFtZS4KICAgICAgICAgICAgIGF0dHJzLnNvcnQoKQogCkBAIC0xMjc0LDYgKzEyNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB0OiB0WzFdID09ICdkYXRhIGRlc2NyaXB0b3InKQogICAgICAgICAgICAgYXR0cnMgPSBzcGlsbGRhdGEoIkRhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgJXM6XG4iICUgdGFnLCBhdHRycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB0OiB0WzFdID09ICdkYXRhJykKKwogICAgICAgICAgICAgYXNzZXJ0IGF0dHJzID09IFtdCiAgICAgICAgICAgICBhdHRycyA9IGluaGVyaXRlZAogCkBAIC0xMzEyLDIwICsxMzExLDE4IEBACiAgICAgICAgICAgICAgICAgY2wuX19kaWN0X19bcmVhbG5hbWVdIGlzIG9iamVjdCk6CiAgICAgICAgICAgICAgICAgc2tpcGRvY3MgPSAxCiAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgPSAnICsgcmVhbG5hbWUKLSAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6Ci0gICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubiA9IFwKLSAgICAgICAgICAgICAgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhvYmplY3QpCi0gICAgICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5mb3JtYXRhcmdzcGVjKAotICAgICAgICAgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywga3dvbmx5YXJncywga3dkZWZhdWx0cywgYW5uLAotICAgICAgICAgICAgICAgIGZvcm1hdHZhbHVlPXNlbGYuZm9ybWF0dmFsdWUsCi0gICAgICAgICAgICAgICAgZm9ybWF0YW5ub3RhdGlvbj1pbnNwZWN0LmZvcm1hdGFubm90YXRpb25yZWxhdGl2ZXRvKG9iamVjdCkpCi0gICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgotICAgICAgICAgICAgICAgIHRpdGxlID0gc2VsZi5ib2xkKG5hbWUpICsgJyBsYW1iZGEgJwotICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQotICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KLSAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcwotICAgICAgICBlbHNlOgorICAgICAgICBhcmdzcGVjID0gTm9uZQorICAgICAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KSBvciBpbnNwZWN0LmlzYnVpbHRpbihvYmplY3QpOgorICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUob2JqZWN0KQorICAgICAgICAgICAgaWYgc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBzdHIoc2lnbmF0dXJlKQorICAgICAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6CisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gc2VsZi5ib2xkKG5hbWUpICsgJyBsYW1iZGEgJworICAgICAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KKyAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKKyAgICAgICAgaWYgbm90IGFyZ3NwZWM6CiAgICAgICAgICAgICBhcmdzcGVjID0gJyguLi4pJwogICAgICAgICBkZWNsID0gdGl0bGUgKyBhcmdzcGVjICsgbm90ZQogCkBAIC0xMzk2LDcgKzEzOTMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSB0ZXh0OiBwaXBlcGFnZXIodGV4dCwgb3MuZW52aXJvblsnUEFHRVInXSkKICAgICBpZiBvcy5lbnZpcm9uLmdldCgnVEVSTScpIGluICgnZHVtYicsICdlbWFjcycpOgogICAgICAgICByZXR1cm4gcGxhaW5wYWdlcgotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdvczInKToKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgcmV0dXJuIGxhbWJkYSB0ZXh0OiB0ZW1wZmlsZXBhZ2VyKHBsYWluKHRleHQpLCAnbW9yZSA8JykKICAgICBpZiBoYXNhdHRyKG9zLCAnc3lzdGVtJykgYW5kIG9zLnN5c3RlbSgnKGxlc3MpIDI+L2Rldi9udWxsJykgPT0gMDoKICAgICAgICAgcmV0dXJuIGxhbWJkYSB0ZXh0OiBwaXBlcGFnZXIodGV4dCwgJ2xlc3MnKQpAQCAtMTQyMiwxNiArMTQxOSwxNSBAQAogICAgIHRyeToKICAgICAgICAgcGlwZS53cml0ZSh0ZXh0KQogICAgICAgICBwaXBlLmNsb3NlKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcyAjIElnbm9yZSBicm9rZW4gcGlwZXMgY2F1c2VkIGJ5IHF1aXR0aW5nIHRoZSBwYWdlciBwcm9ncmFtLgogCiBkZWYgdGVtcGZpbGVwYWdlcih0ZXh0LCBjbWQpOgogICAgICIiIlBhZ2UgdGhyb3VnaCB0ZXh0IGJ5IGludm9raW5nIGEgcHJvZ3JhbSBvbiBhIHRlbXBvcmFyeSBmaWxlLiIiIgogICAgIGltcG9ydCB0ZW1wZmlsZQogICAgIGZpbGVuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKLSAgICBmaWxlID0gb3BlbihmaWxlbmFtZSwgJ3cnKQotICAgIGZpbGUud3JpdGUodGV4dCkKLSAgICBmaWxlLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZmlsZToKKyAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQogICAgIHRyeToKICAgICAgICAgb3Muc3lzdGVtKGNtZCArICcgIicgKyBmaWxlbmFtZSArICciJykKICAgICBmaW5hbGx5OgpAQCAtMTg1MCwxMCArMTg0NiwxMCBAQAogUHl0aG9uIHByb2dyYW1zIGFuZCB1c2luZyBQeXRob24gbW9kdWxlcy4gIFRvIHF1aXQgdGhpcyBoZWxwIHV0aWxpdHkgYW5kCiByZXR1cm4gdG8gdGhlIGludGVycHJldGVyLCBqdXN0IHR5cGUgInF1aXQiLgogCi1UbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgb3IgdG9waWNzLCB0eXBlICJtb2R1bGVzIiwKLSJrZXl3b3JkcyIsIG9yICJ0b3BpY3MiLiAgRWFjaCBtb2R1bGUgYWxzbyBjb21lcyB3aXRoIGEgb25lLWxpbmUgc3VtbWFyeQotb2Ygd2hhdCBpdCBkb2VzOyB0byBsaXN0IHRoZSBtb2R1bGVzIHdob3NlIHN1bW1hcmllcyBjb250YWluIGEgZ2l2ZW4gd29yZAotc3VjaCBhcyAic3BhbSIsIHR5cGUgIm1vZHVsZXMgc3BhbSIuCitUbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgc3ltYm9scywgb3IgdG9waWNzLCB0eXBlCisibW9kdWxlcyIsICJrZXl3b3JkcyIsICJzeW1ib2xzIiwgb3IgInRvcGljcyIuICBFYWNoIG1vZHVsZSBhbHNvIGNvbWVzCit3aXRoIGEgb25lLWxpbmUgc3VtbWFyeSBvZiB3aGF0IGl0IGRvZXM7IHRvIGxpc3QgdGhlIG1vZHVsZXMgd2hvc2UgbmFtZQorb3Igc3VtbWFyeSBjb250YWluIGEgZ2l2ZW4gc3RyaW5nIHN1Y2ggYXMgInNwYW0iLCB0eXBlICJtb2R1bGVzIHNwYW0iLgogJycnICUgdHVwbGUoW3N5cy52ZXJzaW9uWzozXV0qMikpCiAKICAgICBkZWYgbGlzdChzZWxmLCBpdGVtcywgY29sdW1ucz00LCB3aWR0aD04MCk6CkBAIC0xOTE3LDExICsxOTEzLDEwIEBACiAgICAgICAgIGlmIG1vcmVfeHJlZnM6CiAgICAgICAgICAgICB4cmVmcyA9ICh4cmVmcyBvciAnJykgKyAnICcgKyBtb3JlX3hyZWZzCiAgICAgICAgIGlmIHhyZWZzOgotICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgotICAgICAgICAgICAgYnVmZmVyID0gaW8uU3RyaW5nSU8oKQotICAgICAgICAgICAgZm9ybWF0dGVyLkR1bWJXcml0ZXIoYnVmZmVyKS5zZW5kX2Zsb3dpbmdfZGF0YSgKLSAgICAgICAgICAgICAgICAnUmVsYXRlZCBoZWxwIHRvcGljczogJyArICcsICcuam9pbih4cmVmcy5zcGxpdCgpKSArICdcbicpCi0gICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnXG4lc1xuJyAlIGJ1ZmZlci5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgaW1wb3J0IHRleHR3cmFwCisgICAgICAgICAgICB0ZXh0ID0gJ1JlbGF0ZWQgaGVscCB0b3BpY3M6ICcgKyAnLCAnLmpvaW4oeHJlZnMuc3BsaXQoKSkgKyAnXG4nCisgICAgICAgICAgICB3cmFwcGVkX3RleHQgPSB0ZXh0d3JhcC53cmFwKHRleHQsIDcyKQorICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ1xuJXNcbicgJSAnJy5qb2luKHdyYXBwZWRfdGV4dCkpCiAKICAgICBkZWYgX2dldHRvcGljKHNlbGYsIHRvcGljLCBtb3JlX3hyZWZzPScnKToKICAgICAgICAgIiIiUmV0dXJuIHVuYnVmZmVyZWQgdHVwbGUgb2YgKHRvcGljLCB4cmVmcykuCkBAIC0xOTU4LDkgKzE5NTMsMTAgQEAKICAgICBkZWYgbGlzdG1vZHVsZXMoc2VsZiwga2V5PScnKToKICAgICAgICAgaWYga2V5OgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCi1IZXJlIGlzIGEgbGlzdCBvZiBtYXRjaGluZyBtb2R1bGVzLiAgRW50ZXIgYW55IG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuCitIZXJlIGlzIGEgbGlzdCBvZiBtb2R1bGVzIHdob3NlIG5hbWUgb3Igc3VtbWFyeSBjb250YWlucyAne30nLgorSWYgdGhlcmUgYXJlIGFueSwgZW50ZXIgYSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLgogCi0nJycpCisnJycuZm9ybWF0KGtleSkpCiAgICAgICAgICAgICBhcHJvcG9zKGtleSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwpAQCAtMTk3OSwzNSArMTk3NSwxMSBAQAogICAgICAgICAgICAgc2VsZi5saXN0KG1vZHVsZXMua2V5cygpKQogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCiBFbnRlciBhbnkgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4gIE9yLCB0eXBlICJtb2R1bGVzIHNwYW0iIHRvIHNlYXJjaAotZm9yIG1vZHVsZXMgd2hvc2UgZGVzY3JpcHRpb25zIGNvbnRhaW4gdGhlIHdvcmQgInNwYW0iLgorZm9yIG1vZHVsZXMgd2hvc2UgbmFtZSBvciBzdW1tYXJ5IGNvbnRhaW4gdGhlIHN0cmluZyAic3BhbSIuCiAnJycpCiAKIGhlbHAgPSBIZWxwZXIoKQogCi1jbGFzcyBTY2FubmVyOgotICAgICIiIkEgZ2VuZXJpYyB0cmVlIGl0ZXJhdG9yLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290cywgY2hpbGRyZW4sIGRlc2NlbmRwKToKLSAgICAgICAgc2VsZi5yb290cyA9IHJvb3RzWzpdCi0gICAgICAgIHNlbGYuc3RhdGUgPSBbXQotICAgICAgICBzZWxmLmNoaWxkcmVuID0gY2hpbGRyZW4KLSAgICAgICAgc2VsZi5kZXNjZW5kcCA9IGRlc2NlbmRwCi0KLSAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuc3RhdGU6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5yb290czoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgcm9vdCA9IHNlbGYucm9vdHMucG9wKDApCi0gICAgICAgICAgICBzZWxmLnN0YXRlID0gWyhyb290LCBzZWxmLmNoaWxkcmVuKHJvb3QpKV0KLSAgICAgICAgbm9kZSwgY2hpbGRyZW4gPSBzZWxmLnN0YXRlWy0xXQotICAgICAgICBpZiBub3QgY2hpbGRyZW46Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLnBvcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KCkKLSAgICAgICAgY2hpbGQgPSBjaGlsZHJlbi5wb3AoMCkKLSAgICAgICAgaWYgc2VsZi5kZXNjZW5kcChjaGlsZCk6Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgoY2hpbGQsIHNlbGYuY2hpbGRyZW4oY2hpbGQpKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkCi0KLQogY2xhc3MgTW9kdWxlU2Nhbm5lcjoKICAgICAiIiJBbiBpbnRlcnJ1cHRpYmxlIHNjYW5uZXIgdGhhdCBzZWFyY2hlcyBtb2R1bGUgc3lub3BzZXMuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi9weWRvY19kYXRhL3RvcGljcy5weSBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQppbmRleCBjY2ZjNGVjLi40ZGZhMzIzIDEwMDY0NAotLS0gYS9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKKysrIGIvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CkBAIC0xLDUgKzEsNSBAQAogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KLSMgQXV0b2dlbmVyYXRlZCBieSBTcGhpbnggb24gU3VuIE9jdCAyNyAwOTowNzo1NSAyMDEzCisjIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFN1biBOb3YgMjQgMDY6NTA6MzQgMjAxMwogdG9waWNzID0geydhc3NlcnQnOiAnXG5UaGUgYGBhc3NlcnRgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbmBgLCBpcyBlcXVpdmFsZW50IHRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uOiByYWlzZSBBc3NlcnRpb25FcnJvclxuXG5UaGUgZXh0ZW5kZWQgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yYGAsIGlzIGVxdWl2YWxlbnRcbnRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uMTogcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXhwcmVzc2lvbjIpXG5cblRoZXNlIGVxdWl2YWxlbmNlcyBhc3N1bWUgdGhhdCBgYF9fZGVidWdfX2BgIGFuZCBgYEFzc2VydGlvbkVycm9yYGBcbnJlZmVyIHRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlIGBgX19kZWJ1Z19fYGAgaXMgYGBUcnVlYGAgdW5kZXJcbm5vcm1hbCBjaXJjdW1zdGFuY2VzLCBgYEZhbHNlYGAgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkXG4oY29tbWFuZCBsaW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlXG5mb3IgYW4gYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZVxudGltZS4gIE5vdGUgdGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlXG5leHByZXNzaW9uIHRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhc1xucGFydCBvZiB0aGUgc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvIGBgX19kZWJ1Z19fYGAgYXJlIGlsbGVnYWwuICBUaGUgdmFsdWUgZm9yIHRoZSBidWlsdC1pblxudmFyaWFibGUgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBpbnRlcnByZXRlciBzdGFydHMuXG4nLAogICdhc3NpZ25tZW50JzogJ1xuQXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKipcblxuQXNzaWdubWVudCBzdGF0ZW1lbnRzIGFyZSB1c2VkIHRvIChyZSliaW5kIG5hbWVzIHRvIHZhbHVlcyBhbmQgdG9cbm1vZGlmeSBhdHRyaWJ1dGVzIG9yIGl0ZW1zIG9mIG11dGFibGUgb2JqZWN0czpcblxuICAgYXNzaWdubWVudF9zdG10IDo6PSAodGFyZ2V0X2xpc3QgIj0iKSsgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICB0YXJnZXRfbGlzdCAgICAgOjo9IHRhcmdldCAoIiwiIHRhcmdldCkqIFsiLCJdXG4gICB0YXJnZXQgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgfCAiKCIgdGFyZ2V0X2xpc3QgIikiXG4gICAgICAgICAgICAgIHwgIlsiIHRhcmdldF9saXN0ICJdIlxuICAgICAgICAgICAgICB8IGF0dHJpYnV0ZXJlZlxuICAgICAgICAgICAgICB8IHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICB8IHNsaWNpbmdcbiAgICAgICAgICAgICAgfCAiKiIgdGFyZ2V0XG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhc3NpZ25tZW50IHN0YXRlbWVudCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gbGlzdCAocmVtZW1iZXIgdGhhdFxudGhpcyBjYW4gYmUgYSBzaW5nbGUgZXhwcmVzc2lvbiBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCB0aGUgbGF0dGVyXG55aWVsZGluZyBhIHR1cGxlKSBhbmQgYXNzaWducyB0aGUgc2luZ2xlIHJlc3VsdGluZyBvYmplY3QgdG8gZWFjaCBvZlxudGhlIHRhcmdldCBsaXN0cywgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuXG5Bc3NpZ25tZW50IGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgZGVwZW5kaW5nIG9uIHRoZSBmb3JtIG9mIHRoZSB0YXJnZXRcbihsaXN0KS4gV2hlbiBhIHRhcmdldCBpcyBwYXJ0IG9mIGEgbXV0YWJsZSBvYmplY3QgKGFuIGF0dHJpYnV0ZVxucmVmZXJlbmNlLCBzdWJzY3JpcHRpb24gb3Igc2xpY2luZyksIHRoZSBtdXRhYmxlIG9iamVjdCBtdXN0XG51bHRpbWF0ZWx5IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQgYW5kIGRlY2lkZSBhYm91dCBpdHMgdmFsaWRpdHksIGFuZFxubWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgYXNzaWdubWVudCBpcyB1bmFjY2VwdGFibGUuICBUaGUgcnVsZXNcbm9ic2VydmVkIGJ5IHZhcmlvdXMgdHlwZXMgYW5kIHRoZSBleGNlcHRpb25zIHJhaXNlZCBhcmUgZ2l2ZW4gd2l0aCB0aGVcbmRlZmluaXRpb24gb2YgdGhlIG9iamVjdCB0eXBlcyAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlXG5oaWVyYXJjaHkqKS5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSB0YXJnZXQgbGlzdCwgb3B0aW9uYWxseSBlbmNsb3NlZCBpblxucGFyZW50aGVzZXMgb3Igc3F1YXJlIGJyYWNrZXRzLCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzIGZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgc2luZ2xlIHRhcmdldDogVGhlIG9iamVjdCBpcyBhc3NpZ25lZCB0b1xuICB0aGF0IHRhcmdldC5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YXJnZXRzOiBUaGUgb2JqZWN0XG4gIG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUgYXJlXG4gIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvXG4gIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4gICogSWYgdGhlIHRhcmdldCBsaXN0IGNvbnRhaW5zIG9uZSB0YXJnZXQgcHJlZml4ZWQgd2l0aCBhbiBhc3RlcmlzayxcbiAgICBjYWxsZWQgYSAic3RhcnJlZCIgdGFyZ2V0OiBUaGUgb2JqZWN0IG11c3QgYmUgYSBzZXF1ZW5jZSB3aXRoIGF0XG4gICAgbGVhc3QgYXMgbWFueSBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIG1pbnVzXG4gICAgb25lLiAgVGhlIGZpcnN0IGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQsIGZyb20gbGVmdCB0b1xuICAgIHJpZ2h0LCB0byB0aGUgdGFyZ2V0cyBiZWZvcmUgdGhlIHN0YXJyZWQgdGFyZ2V0LiAgVGhlIGZpbmFsIGl0ZW1zXG4gICAgb2YgdGhlIHNlcXVlbmNlIGFyZSBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0cyBhZnRlciB0aGUgc3RhcnJlZFxuICAgIHRhcmdldC4gIEEgbGlzdCBvZiB0aGUgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBpcyB0aGVuXG4gICAgYXNzaWduZWQgdG8gdGhlIHN0YXJyZWQgdGFyZ2V0ICh0aGUgbGlzdCBjYW4gYmUgZW1wdHkpLlxuXG4gICogRWxzZTogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2Ugd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlXG4gICAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSBzaW5nbGUgdGFyZ2V0IGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXNcbmZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhbiBpZGVudGlmaWVyIChuYW1lKTpcblxuICAqIElmIHRoZSBuYW1lIGRvZXMgbm90IG9jY3VyIGluIGEgYGBnbG9iYWxgYCBvciBgYG5vbmxvY2FsYGBcbiAgICBzdGF0ZW1lbnQgaW4gdGhlIGN1cnJlbnQgY29kZSBibG9jazogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlXG4gICAgb2JqZWN0IGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZS5cblxuICAqIE90aGVyd2lzZTogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZVxuICAgIG9yIHRoZSBvdXRlciBuYW1lc3BhY2UgZGV0ZXJtaW5lZCBieSBgYG5vbmxvY2FsYGAsIHJlc3BlY3RpdmVseS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW4gc3F1YXJlXG4gIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2ZcbiAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBgYFR5cGVFcnJvcmBgIGlzXG4gIHJhaXNlZC4gIFRoYXQgb2JqZWN0IGlzIHRoZW4gYXNrZWQgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG9cbiAgdGhlIGdpdmVuIGF0dHJpYnV0ZTsgaWYgaXQgY2Fubm90IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQsIGl0IHJhaXNlc1xuICBhbiBleGNlcHRpb24gKHVzdWFsbHkgYnV0IG5vdCBuZWNlc3NhcmlseSBgYEF0dHJpYnV0ZUVycm9yYGApLlxuXG4gIE5vdGU6IElmIHRoZSBvYmplY3QgaXMgYSBjbGFzcyBpbnN0YW5jZSBhbmQgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VcbiAgb2NjdXJzIG9uIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSBSSFMgZXhwcmVzc2lvbixcbiAgYGBhLnhgYCBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgYGBhLnhgYCBpc1xuICBhbHdheXMgc2V0IGFzIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICBUaHVzLCB0aGUgdHdvIG9jY3VycmVuY2VzIG9mIGBgYS54YGAgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZVxuICBzYW1lIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSxcbiAgdGhlIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCBgYHByb3BlcnR5KClgYC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc3Vic2NyaXB0aW9uOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZVxuICByZWZlcmVuY2UgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGVpdGhlciBhIG11dGFibGUgc2VxdWVuY2VcbiAgb2JqZWN0IChzdWNoIGFzIGEgbGlzdCkgb3IgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLlxuICBOZXh0LCB0aGUgc3Vic2NyaXB0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbXV0YWJsZSBzZXF1ZW5jZSBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IHlpZWxkIGFuIGludGVnZXIuICBJZiBpdCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzXG4gIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlXG4gIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsIGFuZCB0aGUgc2VxdWVuY2UgaXMgYXNrZWRcbiAgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG8gaXRzIGl0ZW0gd2l0aCB0aGF0IGluZGV4LiAgSWYgdGhlXG4gIGluZGV4IGlzIG91dCBvZiByYW5nZSwgYGBJbmRleEVycm9yYGAgaXMgcmFpc2VkIChhc3NpZ25tZW50IHRvIGFcbiAgc3Vic2NyaXB0ZWQgc2VxdWVuY2UgY2Fubm90IGFkZCBuZXcgaXRlbXMgdG8gYSBsaXN0KS5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmdcJ3Mga2V5IHR5cGUsXG4gIGFuZCB0aGUgbWFwcGluZyBpcyB0aGVuIGFza2VkIHRvIGNyZWF0ZSBhIGtleS9kYXR1bSBwYWlyIHdoaWNoIG1hcHNcbiAgdGhlIHN1YnNjcmlwdCB0byB0aGUgYXNzaWduZWQgb2JqZWN0LiAgVGhpcyBjYW4gZWl0aGVyIHJlcGxhY2UgYW5cbiAgZXhpc3Rpbmcga2V5L3ZhbHVlIHBhaXIgd2l0aCB0aGUgc2FtZSBrZXkgdmFsdWUsIG9yIGluc2VydCBhIG5ld1xuICBrZXkvdmFsdWUgcGFpciAoaWYgbm8ga2V5IHdpdGggdGhlIHNhbWUgdmFsdWUgZXhpc3RlZCkuXG5cbiAgRm9yIHVzZXItZGVmaW5lZCBvYmplY3RzLCB0aGUgYGBfX3NldGl0ZW1fXygpYGAgbWV0aG9kIGlzIGNhbGxlZFxuICB3aXRoIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGUgcmVmZXJlbmNlXG4gIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGFcbiAgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdCBvZiB0aGUgc2FtZVxuICB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkLFxuICBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmIGVpdGhlciBib3VuZCBpc1xuICBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSByZXN1bHRpbmdcbiAgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsXG4gIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZSB0aGVcbiAgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZiB0aGVcbiAgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIG9iamVjdFxuICBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHNcbmJldHdlZW4gdGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NhZmVcJyAoZm9yXG5leGFtcGxlIGBgYSwgYiA9IGIsIGFgYCBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlXG5jb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcyBhcmUgbm90IHNhZmUhICBGb3IgaW5zdGFuY2UsIHRoZVxuZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6XG5cbiAgIHggPSBbMCwgMV1cbiAgIGkgPSAwXG4gICBpLCB4W2ldID0gMSwgMlxuICAgcHJpbnQoeClcblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMzIqKiAtIEV4dGVuZGVkIEl0ZXJhYmxlIFVucGFja2luZ1xuICAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBgYCp0YXJnZXRgYCBmZWF0dXJlLlxuXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIGNvbWJpbmF0aW9uLCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQsIG9mIGFcbmJpbmFyeSBvcGVyYXRpb24gYW5kIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50OlxuXG4gICBhdWdtZW50ZWRfYXNzaWdubWVudF9zdG10IDo6PSBhdWd0YXJnZXQgYXVnb3AgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICBhdWd0YXJnZXQgICAgICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyIHwgYXR0cmlidXRlcmVmIHwgc3Vic2NyaXB0aW9uIHwgc2xpY2luZ1xuICAgYXVnb3AgICAgICAgICAgICAgICAgICAgICA6Oj0gIis9IiB8ICItPSIgfCAiKj0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iXG4gICAgICAgICAgICAgfCAiPj49IiB8ICI8PD0iIHwgIiY9IiB8ICJePSIgfCAifD0iXG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSBgYHggKz0gMWBgIGNhbiBiZSByZXdyaXR0ZW4gYXNcbmBgeCA9IHggKyAxYGAgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluXG50aGUgYXVnbWVudGVkIHZlcnNpb24sIGBgeGBgIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW5cbnBvc3NpYmxlLCB0aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0XG5yYXRoZXIgdGhhbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsXG50aGUgb2xkIG9iamVjdCBpcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5XaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhXG5zaW5nbGUgc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50XG5zdGF0ZW1lbnRzIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LFxud2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwb3NzaWJsZSAqaW4tcGxhY2UqIGJlaGF2aW9yLCB0aGUgYmluYXJ5XG5vcGVyYXRpb24gcGVyZm9ybWVkIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxcbmJpbmFyeSBvcGVyYXRpb25zLlxuXG5Gb3IgdGFyZ2V0cyB3aGljaCBhcmUgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHRoZSBzYW1lICpjYXZlYXQgYWJvdXRcbmNsYXNzIGFuZCBpbnN0YW5jZSBhdHRyaWJ1dGVzKiBhcHBsaWVzIGFzIGZvciByZWd1bGFyIGFzc2lnbm1lbnRzLlxuJywKICAnYXRvbS1pZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIChOYW1lcylcbioqKioqKioqKioqKioqKioqKipcblxuQW4gaWRlbnRpZmllciBvY2N1cnJpbmcgYXMgYW4gYXRvbSBpcyBhIG5hbWUuICBTZWUgc2VjdGlvblxuKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyogZm9yIGxleGljYWwgZGVmaW5pdGlvbiBhbmQgc2VjdGlvbiAqTmFtaW5nXG5hbmQgYmluZGluZyogZm9yIGRvY3VtZW50YXRpb24gb2YgbmFtaW5nIGFuZCBiaW5kaW5nLlxuXG5XaGVuIHRoZSBuYW1lIGlzIGJvdW5kIHRvIGFuIG9iamVjdCwgZXZhbHVhdGlvbiBvZiB0aGUgYXRvbSB5aWVsZHNcbnRoYXQgb2JqZWN0LiBXaGVuIGEgbmFtZSBpcyBub3QgYm91bmQsIGFuIGF0dGVtcHQgdG8gZXZhbHVhdGUgaXRcbnJhaXNlcyBhIGBgTmFtZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4qKlByaXZhdGUgbmFtZSBtYW5nbGluZzoqKiBXaGVuIGFuIGlkZW50aWZpZXIgdGhhdCB0ZXh0dWFsbHkgb2NjdXJzIGluXG5hIGNsYXNzIGRlZmluaXRpb24gYmVnaW5zIHdpdGggdHdvIG9yIG1vcmUgdW5kZXJzY29yZSBjaGFyYWN0ZXJzIGFuZFxuZG9lcyBub3QgZW5kIGluIHR3byBvciBtb3JlIHVuZGVyc2NvcmVzLCBpdCBpcyBjb25zaWRlcmVkIGEgKnByaXZhdGVcbm5hbWUqIG9mIHRoYXQgY2xhc3MuIFByaXZhdGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgbG9uZ2VyIGZvcm1cbmJlZm9yZSBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgdGhlbS4gIFRoZSB0cmFuc2Zvcm1hdGlvbiBpbnNlcnRzIHRoZVxuY2xhc3MgbmFtZSwgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmVzIHJlbW92ZWQgYW5kIGEgc2luZ2xlIHVuZGVyc2NvcmVcbmluc2VydGVkLCBpbiBmcm9udCBvZiB0aGUgbmFtZS4gIEZvciBleGFtcGxlLCB0aGUgaWRlbnRpZmllclxuYGBfX3NwYW1gYCBvY2N1cnJpbmcgaW4gYSBjbGFzcyBuYW1lZCBgYEhhbWBgIHdpbGwgYmUgdHJhbnNmb3JtZWQgdG9cbmBgX0hhbV9fc3BhbWBgLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3ludGFjdGljYWxcbmNvbnRleHQgaW4gd2hpY2ggdGhlIGlkZW50aWZpZXIgaXMgdXNlZC4gIElmIHRoZSB0cmFuc2Zvcm1lZCBuYW1lIGlzXG5leHRyZW1lbHkgbG9uZyAobG9uZ2VyIHRoYW4gMjU1IGNoYXJhY3RlcnMpLCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkXG50cnVuY2F0aW9uIG1heSBoYXBwZW4uIElmIHRoZSBjbGFzcyBuYW1lIGNvbnNpc3RzIG9ubHkgb2YgdW5kZXJzY29yZXMsXG5ubyB0cmFuc2Zvcm1hdGlvbiBpcyBkb25lLlxuJywKQEAgLTE5LDEyICsxOSwxMiBAQAogICdjYWxscyc6ICdcbkNhbGxzXG4qKioqKlxuXG5BIGNhbGwgY2FsbHMgYSBjYWxsYWJsZSBvYmplY3QgKGUuZy4sIGEgKmZ1bmN0aW9uKikgd2l0aCBhIHBvc3NpYmx5XG5lbXB0eSBzZXJpZXMgb2YgKmFyZ3VtZW50cyo6XG5cbiAgIGNhbGwgICAgICAgICAgICAgICAgIDo6PSBwcmltYXJ5ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgYXJndW1lbnRfbGlzdCAgICAgICAgOjo9IHBvc2l0aW9uYWxfYXJndW1lbnRzIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioiIGV4cHJlc3Npb25dIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkX2FyZ3VtZW50cyBbIiwiICIqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioiIGV4cHJlc3Npb24gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqKiIgZXhwcmVzc2lvblxuICAgcG9zaXRpb25hbF9hcmd1bWVudHMgOjo9IGV4cHJlc3Npb24gKCIsIiBleHByZXNzaW9uKSpcbiAgIGtleXdvcmRfYXJndW1lbnRzICAgIDo6PSBrZXl3b3JkX2l0ZW0gKCIsIiBrZXl3b3JkX2l0ZW0pKlxuICAga2V5d29yZF9pdGVtICAgICAgICAgOjo9IGlkZW50aWZpZXIgIj0iIGV4cHJlc3Npb25cblxuQSB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZFxuYXJndW1lbnRzIGJ1dCBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy5cblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhIGNhbGxhYmxlIG9iamVjdCAodXNlci1kZWZpbmVkXG5mdW5jdGlvbnMsIGJ1aWx0LWluIGZ1bmN0aW9ucywgbWV0aG9kcyBvZiBidWlsdC1pbiBvYmplY3RzLCBjbGFzc1xub2JqZWN0cywgbWV0aG9kcyBvZiBjbGFzcyBpbnN0YW5jZXMsIGFuZCBhbGwgb2JqZWN0cyBoYXZpbmcgYVxuYGBfX2NhbGxfXygpYGAgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCAqcGFyYW1ldGVyKiBsaXN0cy5cblxuSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHByZXNlbnQsIHRoZXkgYXJlIGZpcnN0IGNvbnZlcnRlZCB0b1xucG9zaXRpb25hbCBhcmd1bWVudHMsIGFzIGZvbGxvd3MuICBGaXJzdCwgYSBsaXN0IG9mIHVuZmlsbGVkIHNsb3RzIGlzXG5jcmVhdGVkIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlcnMuICBJZiB0aGVyZSBhcmUgTiBwb3NpdGlvbmFsXG5hcmd1bWVudHMsIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgTiBzbG90cy4gIE5leHQsIGZvciBlYWNoXG5rZXl3b3JkIGFyZ3VtZW50LCB0aGUgaWRlbnRpZmllciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdCAoaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGZvcm1hbFxucGFyYW1ldGVyIG5hbWUsIHRoZSBmaXJzdCBzbG90IGlzIHVzZWQsIGFuZCBzbyBvbikuICBJZiB0aGUgc2xvdCBpc1xuYWxyZWFkeSBmaWxsZWQsIGEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiBPdGhlcndpc2UsIHRoZVxudmFsdWUgb2YgdGhlIGFyZ3VtZW50IGlzIHBsYWNlZCBpbiB0aGUgc2xvdCwgZmlsbGluZyBpdCAoZXZlbiBpZiB0aGVcbmV4cHJlc3Npb24gaXMgYGBOb25lYGAsIGl0IGZpbGxzIHRoZSBzbG90KS4gIFdoZW4gYWxsIGFyZ3VtZW50cyBoYXZlXG5iZWVuIHByb2Nlc3NlZCwgdGhlIHNsb3RzIHRoYXQgYXJlIHN0aWxsIHVuZmlsbGVkIGFyZSBmaWxsZWQgd2l0aCB0aGVcbmNvcnJlc3BvbmRpbmcgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgKERlZmF1bHRcbnZhbHVlcyBhcmUgY2FsY3VsYXRlZCwgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZDsgdGh1cywgYVxubXV0YWJsZSBvYmplY3Qgc3VjaCBhcyBhIGxpc3Qgb3IgZGljdGlvbmFyeSB1c2VkIGFzIGRlZmF1bHQgdmFsdWUgd2lsbFxuYmUgc2hhcmVkIGJ5IGFsbCBjYWxscyB0aGF0IGRvblwndCBzcGVjaWZ5IGFuIGFyZ3VtZW50IHZhbHVlIGZvciB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdDsgdGhpcyBzaG91bGQgdXN1YWxseSBiZSBhdm9pZGVkLikgIElmIHRoZXJlIGFyZSBhbnlcbnVuZmlsbGVkIHNsb3RzIGZvciB3aGljaCBubyBkZWZhdWx0IHZhbHVlIGlzIHNwZWNpZmllZCwgYVxuYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiBmaWxsZWRcbnNsb3RzIGlzIHVzZWQgYXMgdGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBjYWxsLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlXG5idWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGRvIG5vdCBoYXZlIG5hbWVzLCBldmVuXG5pZiB0aGV5IGFyZSBcJ25hbWVkXCcgZm9yIHRoZSBwdXJwb3NlIG9mIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaFxudGhlcmVmb3JlIGNhbm5vdCBiZSBzdXBwbGllZCBieSBrZXl3b3JkLiAgSW4gQ1B5dGhvbiwgdGhpcyBpcyB0aGUgY2FzZVxuZm9yIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDIHRoYXQgdXNlIGBgUHlBcmdfUGFyc2VUdXBsZSgpYGAgdG9cbnBhcnNlIHRoZWlyIGFyZ3VtZW50cy5cblxuSWYgdGhlcmUgYXJlIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhbiB0aGVyZSBhcmUgZm9ybWFsIHBhcmFtZXRlclxuc2xvdHMsIGEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLCB1bmxlc3MgYSBmb3JtYWwgcGFyYW1ldGVyXG51c2luZyB0aGUgc3ludGF4IGBgKmlkZW50aWZpZXJgYCBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHNcbihvciBhbiBlbXB0eSB0dXBsZSBpZiB0aGVyZSB3ZXJlIG5vIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cykuXG5cbklmIGFueSBrZXl3b3JkIGFyZ3VtZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmb3JtYWwgcGFyYW1ldGVyXG5uYW1lLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCBgYCoqaWRlbnRpZmllcmBgIGlzIHByZXNlbnQ7IGluIHRoaXMgY2FzZSwgdGhhdFxuZm9ybWFsIHBhcmFtZXRlciByZWNlaXZlcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgZXhjZXNzIGtleXdvcmRcbmFyZ3VtZW50cyAodXNpbmcgdGhlIGtleXdvcmRzIGFzIGtleXMgYW5kIHRoZSBhcmd1bWVudCB2YWx1ZXMgYXNcbmNvcnJlc3BvbmRpbmcgdmFsdWVzKSwgb3IgYSAobmV3KSBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZXJlIHdlcmUgbm9cbmV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cy5cblxuSWYgdGhlIHN5bnRheCBgYCpleHByZXNzaW9uYGAgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCxcbmBgZXhwcmVzc2lvbmBgIG11c3QgZXZhbHVhdGUgdG8gYW4gaXRlcmFibGUuICBFbGVtZW50cyBmcm9tIHRoaXNcbml0ZXJhYmxlIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzO1xuaWYgdGhlcmUgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwgYW5kIGBgZXhwcmVzc2lvbmBgXG5ldmFsdWF0ZXMgdG8gYSBzZXF1ZW5jZSAqeTEqLCAuLi4sICp5TSosIHRoaXMgaXMgZXF1aXZhbGVudCB0byBhIGNhbGxcbndpdGggTStOIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwgKnkxKiwgLi4uLCAqeU0qLlxuXG5BIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCBhbHRob3VnaCB0aGUgYGAqZXhwcmVzc2lvbmBgIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlIGBgKipleHByZXNzaW9uYGAgYXJndW1lbnQsIGlmIGFueSAtLSBzZWVcbmJlbG93KS4gIFNvOlxuXG4gICA+Pj4gZGVmIGYoYSwgYik6XG4gICAuLi4gIHByaW50KGEsIGIpXG4gICAuLi5cbiAgID4+PiBmKGI9MSwgKigyLCkpXG4gICAyIDFcbiAgID4+PiBmKGE9MSwgKigyLCkpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgXCdhXCdcbiAgID4+PiBmKDEsICooMiwpKVxuICAgMSAyXG5cbkl0IGlzIHVudXN1YWwgZm9yIGJvdGgga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZSBgYCpleHByZXNzaW9uYGBcbnN5bnRheCB0byBiZSB1c2VkIGluIHRoZSBzYW1lIGNhbGwsIHNvIGluIHByYWN0aWNlIHRoaXMgY29uZnVzaW9uIGRvZXNcbm5vdCBhcmlzZS5cblxuSWYgdGhlIHN5bnRheCBgYCoqZXhwcmVzc2lvbmBgIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG5gYGV4cHJlc3Npb25gYCBtdXN0IGV2YWx1YXRlIHRvIGEgbWFwcGluZywgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZVxudHJlYXRlZCBhcyBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLiAgSW4gdGhlIGNhc2Ugb2YgYSBrZXl3b3JkXG5hcHBlYXJpbmcgaW4gYm90aCBgYGV4cHJlc3Npb25gYCBhbmQgYXMgYW4gZXhwbGljaXQga2V5d29yZCBhcmd1bWVudCxcbmEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuXG5Gb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4IGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgXG5jYW5ub3QgYmUgdXNlZCBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50IHNsb3RzIG9yIGFzIGtleXdvcmQgYXJndW1lbnRcbm5hbWVzLlxuXG5BIGNhbGwgYWx3YXlzIHJldHVybnMgc29tZSB2YWx1ZSwgcG9zc2libHkgYGBOb25lYGAsIHVubGVzcyBpdCByYWlzZXNcbmFuIGV4Y2VwdGlvbi4gIEhvdyB0aGlzIHZhbHVlIGlzIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlXG5jYWxsYWJsZSBvYmplY3QuXG5cbklmIGl0IGlzLS0tXG5cbmEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uOlxuICAgVGhlIGNvZGUgYmxvY2sgZm9yIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCwgcGFzc2luZyBpdCB0aGVcbiAgIGFyZ3VtZW50IGxpc3QuICBUaGUgZmlyc3QgdGhpbmcgdGhlIGNvZGUgYmxvY2sgd2lsbCBkbyBpcyBiaW5kIHRoZVxuICAgZm9ybWFsIHBhcmFtZXRlcnMgdG8gdGhlIGFyZ3VtZW50czsgdGhpcyBpcyBkZXNjcmliZWQgaW4gc2VjdGlvblxuICAgKkZ1bmN0aW9uIGRlZmluaXRpb25zKi4gIFdoZW4gdGhlIGNvZGUgYmxvY2sgZXhlY3V0ZXMgYSBgYHJldHVybmBgXG4gICBzdGF0ZW1lbnQsIHRoaXMgc3BlY2lmaWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuXG5cbmEgYnVpbHQtaW4gZnVuY3Rpb24gb3IgbWV0aG9kOlxuICAgVGhlIHJlc3VsdCBpcyB1cCB0byB0aGUgaW50ZXJwcmV0ZXI7IHNlZSAqQnVpbHQtaW4gRnVuY3Rpb25zKiBmb3JcbiAgIHRoZSBkZXNjcmlwdGlvbnMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBtZXRob2RzLlxuXG5hIGNsYXNzIG9iamVjdDpcbiAgIEEgbmV3IGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgaXMgcmV0dXJuZWQuXG5cbmEgY2xhc3MgaW5zdGFuY2UgbWV0aG9kOlxuICAgVGhlIGNvcnJlc3BvbmRpbmcgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2l0aCBhbiBhcmd1bWVudFxuICAgbGlzdCB0aGF0IGlzIG9uZSBsb25nZXIgdGhhbiB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY2FsbDogdGhlXG4gICBpbnN0YW5jZSBiZWNvbWVzIHRoZSBmaXJzdCBhcmd1bWVudC5cblxuYSBjbGFzcyBpbnN0YW5jZTpcbiAgIFRoZSBjbGFzcyBtdXN0IGRlZmluZSBhIGBgX19jYWxsX18oKWBgIG1ldGhvZDsgdGhlIGVmZmVjdCBpcyB0aGVuXG4gICB0aGUgc2FtZSBhcyBpZiB0aGF0IG1ldGhvZCB3YXMgY2FsbGVkLlxuJywKICAnY2xhc3MnOiAnXG5DbGFzcyBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgYGBvYmplY3RgYDsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGVcbndpdGggdGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmVcbnVzZWQgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlc1xudGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0b1xuY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC0gQ2xhc3NcbiAgIERlY29yYXRvcnNcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgdW5sZXNzIHRoZXJlXG4gICAgaXMgYSBgYGZpbmFsbHlgYCBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyIGV4Y2VwdGlvbi5cbiAgICBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAogICdjb21wYXJpc29ucyc6ICdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSBgYGEgPCBiIDwgY2BgIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6IGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYC5cblxuQ29tcGFyaXNvbnMgY2FuIGJlIGNoYWluZWQgYXJiaXRyYXJpbHksIGUuZy4sIGBgeCA8IHkgPD0gemBgIGlzXG5lcXVpdmFsZW50IHRvIGBgeCA8IHkgYW5kIHkgPD0gemBgLCBleGNlcHQgdGhhdCBgYHlgYCBpcyBldmFsdWF0ZWRcbm9ubHkgb25jZSAoYnV0IGluIGJvdGggY2FzZXMgYGB6YGAgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiBgYHggPFxueWBgIGlzIGZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiBgYGEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6YGAgaXMgZXF1aXZhbGVudCB0byBgYGEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6YGAsXG5leGNlcHQgdGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0IGBgYSBvcDEgYiBvcDIgY2BgIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb25cbmJldHdlZW4gKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sIGBgeCA8IHkgPiB6YGAgaXMgcGVyZmVjdGx5IGxlZ2FsXG4odGhvdWdoIHBlcmhhcHMgbm90IHByZXR0eSkuXG5cblRoZSBvcGVyYXRvcnMgYGA8YGAsIGBgPmBgLCBgYD09YGAsIGBgPj1gYCwgYGA8PWBgLCBhbmQgYGAhPWBgIGNvbXBhcmVcbnRoZSB2YWx1ZXMgb2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBuZWVkIG5vdCBoYXZlIHRoZSBzYW1lIHR5cGUuXG5JZiBib3RoIGFyZSBudW1iZXJzLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIE90aGVyd2lzZSxcbnRoZSBgYD09YGAgYW5kIGBgIT1gYCBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnRcbnR5cGVzIHRvIGJlIHVuZXF1YWwsIHdoaWxlIHRoZSBgYDxgYCwgYGA+YGAsIGBgPj1gYCBhbmQgYGA8PWBgXG5vcGVyYXRvcnMgcmFpc2UgYSBgYFR5cGVFcnJvcmBgIHdoZW4gY29tcGFyaW5nIG9iamVjdHMgb2YgZGlmZmVyZW50XG50eXBlcyB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0b3JzIGZvciB0aGUgZ2l2ZW4gcGFpciBvZlxudHlwZXMuICBZb3UgY2FuIGNvbnRyb2wgY29tcGFyaXNvbiBiZWhhdmlvciBvZiBvYmplY3RzIG9mIG5vbi1idWlsdC1pblxudHlwZXMgYnkgZGVmaW5pbmcgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbGlrZSBgYF9fZ3RfXygpYGAsIGRlc2NyaWJlZFxuaW4gc2VjdGlvbiAqQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyBgYGZsb2F0KFwnTmFOXCcpYGAgYW5kIGBgRGVjaW1hbChcJ05hTlwnKWBgIGFyZSBzcGVjaWFsLiBUaGVcbiAgYXJlIGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLCBgYHggaXMgeGBgIGJ1dCBhcmUgbm90IGVxdWFsIHRvXG4gIHRoZW1zZWx2ZXMsIGBgeCAhPSB4YGAuICBBZGRpdGlvbmFsbHksIGNvbXBhcmluZyBhbnkgdmFsdWUgdG8gYVxuICBub3QtYS1udW1iZXIgdmFsdWUgd2lsbCByZXR1cm4gYGBGYWxzZWBgLiAgRm9yIGV4YW1wbGUsIGJvdGggYGAzIDxcbiAgZmxvYXQoXCdOYU5cJylgYCBhbmQgYGBmbG9hdChcJ05hTlwnKSA8IDNgYCB3aWxsIHJldHVybiBgYEZhbHNlYGAuXG5cbiogQnl0ZXMgb2JqZWN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIGVxdWl2YWxlbnRzXG4gICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYG9yZCgpYGApIG9mIHRoZWlyIGNoYXJhY3RlcnMuXG4gIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZlxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCBgYFsxLDIseF0gPD0gWzEsMix5XWBgIGhhcyB0aGVcbiAgc2FtZSB2YWx1ZSBhcyBgYHggPD0geWBgLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdFxuICBleGlzdCwgdGhlIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsIGBgWzEsMl0gPFxuICBbMSwyLDNdYGApLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMuIE9yZGVyIGNvbXBhcmlzb25zIGBgKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpYGAgcmFpc2UgYGBUeXBlRXJyb3JgYC5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyBgYHsxLDJ9YGAgYW5kIHsyLDN9IGFyZSBub3QgZXF1YWwsIG5vciBzdWJzZXRzIG9mIG9uZVxuICBhbm90aGVyLCBub3Igc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyKS4gIEFjY29yZGluZ2x5LCBzZXRzIGFyZSBub3RcbiAgYXBwcm9wcmlhdGUgYXJndW1lbnRzIGZvciBmdW5jdGlvbnMgd2hpY2ggZGVwZW5kIG9uIHRvdGFsIG9yZGVyaW5nLlxuICBGb3IgZXhhbXBsZSwgYGBtaW4oKWBgLCBgYG1heCgpYGAsIGFuZCBgYHNvcnRlZCgpYGAgcHJvZHVjZVxuICB1bmRlZmluZWQgcmVzdWx0cyBnaXZlbiBhIGxpc3Qgb2Ygc2V0cyBhcyBpbnB1dHMuXG5cbiogTW9zdCBvdGhlciBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzIGNvbXBhcmUgdW5lcXVhbCB1bmxlc3MgdGhleSBhcmVcbiAgdGhlIHNhbWUgb2JqZWN0OyB0aGUgY2hvaWNlIHdoZXRoZXIgb25lIG9iamVjdCBpcyBjb25zaWRlcmVkIHNtYWxsZXJcbiAgb3IgbGFyZ2VyIHRoYW4gYW5vdGhlciBvbmUgaXMgbWFkZSBhcmJpdHJhcmlseSBidXQgY29uc2lzdGVudGx5XG4gIHdpdGhpbiBvbmUgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS5cblxuQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIHRoZSBkaWZmZXJpbmcgdHlwZXMgZGVwZW5kcyBvbiB3aGV0aGVyIGVpdGhlclxub2YgdGhlIHR5cGVzIHByb3ZpZGUgZXhwbGljaXQgc3VwcG9ydCBmb3IgdGhlIGNvbXBhcmlzb24uICBNb3N0XG5udW1lcmljIHR5cGVzIGNhbiBiZSBjb21wYXJlZCB3aXRoIG9uZSBhbm90aGVyLiAgV2hlbiBjcm9zcy10eXBlXG5jb21wYXJpc29uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBjb21wYXJpc29uIG1ldGhvZCByZXR1cm5zXG5gYE5vdEltcGxlbWVudGVkYGAuXG5cblRoZSBvcGVyYXRvcnMgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIHRlc3QgZm9yIG1lbWJlcnNoaXAuICBgYHggaW4gc2BgXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgYGB4XG5ub3QgaW4gc2BgIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIGBgeCBpbiBzYGAuICBBbGwgYnVpbHQtaW4gc2VxdWVuY2VzXG5hbmQgc2V0IHR5cGVzIHN1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCBgYGluYGBcbnRlc3RzIHdoZXRoZXIgYSB0aGUgZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXNcbnN1Y2ggYXMgbGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlXG5leHByZXNzaW9uIGBgeCBpbiB5YGAgaXMgZXF1aXZhbGVudCB0byBgYGFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluXG55KWBgLlxuXG5Gb3IgdGhlIHN0cmluZyBhbmQgYnl0ZXMgdHlwZXMsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCpcbmlzIGEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyBgYHkuZmluZCh4KSAhPSAtMWBgLlxuRW1wdHkgc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyXG5zdHJpbmcsIHNvIGBgIiIgaW4gImFiYyJgYCB3aWxsIHJldHVybiBgYFRydWVgYC5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCxcbmBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiBgYHkuX19jb250YWluc19fKHgpYGAgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgIGJ1dCBkb1xuZGVmaW5lIGBgX19pdGVyX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgc29tZSB2YWx1ZSBgYHpgYCB3aXRoIGBgeFxuPT0gemBgIGlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGBgeWBgLiAgSWYgYW4gZXhjZXB0aW9uIGlzXG5yYWlzZWQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuYGBfX2dldGl0ZW1fXygpYGAsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCBgYHggPT0geVtpXWBgLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlIGBgSW5kZXhFcnJvcmBgIGV4Y2VwdGlvbi4gIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgYGBub3QgaW5gYCBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuYGBpbmBgLlxuXG5UaGUgb3BlcmF0b3JzIGBgaXNgYCBhbmQgYGBpcyBub3RgYCB0ZXN0IGZvciBvYmplY3QgaWRlbnRpdHk6IGBgeCBpc1xueWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gIGBgeCBpc1xubm90IHlgYCB5aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKLSAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgYGBpZmBgLCBgYHdoaWxlYGAgYW5kIGBgZm9yYGAgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWxcbmNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLiAgYGB0cnlgYCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vclxuY2xlYW51cCBjb2RlIGZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHMsIHdoaWxlIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYVxuYmxvY2sgb2YgY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5XG5jb21wb3VuZCBzdGF0ZW1lbnRzLlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgXCdjbGF1c2VzLlwnICBBIGNsYXVzZVxuY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgXCdzdWl0ZS5cJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGFcbnBhcnRpY3VsYXIgY29tcG91bmQgc3RhdGVtZW50IGFyZSBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuXG5FYWNoIGNsYXVzZSBoZWFkZXIgYmVnaW5zIHdpdGggYSB1bmlxdWVseSBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzXG53aXRoIGEgY29sb24uICBBIHN1aXRlIGlzIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cyBjb250cm9sbGVkIGJ5IGFcbmNsYXVzZS4gIEEgc3VpdGUgY2FuIGJlIG9uZSBvciBtb3JlIHNlbWljb2xvbi1zZXBhcmF0ZWQgc2ltcGxlXG5zdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGhlYWRlciwgZm9sbG93aW5nIHRoZSBoZWFkZXJcJ3NcbmNvbG9uLCBvciBpdCBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50XG5saW5lcy4gIE9ubHkgdGhlIGxhdHRlciBmb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoIGBgaWZgYCBjbGF1c2UgYSBmb2xsb3dpbmcgYGBlbHNlYGAgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCh4KVxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbmBgcHJpbnQoKWBgIGNhbGxzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCh4KTsgcHJpbnQoeSk7IHByaW50KHopXG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSBgYE5FV0xJTkVgYCBwb3NzaWJseSBmb2xsb3dlZCBieVxuYSBgYERFREVOVGBgLiAgQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzXG5iZWdpbiB3aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyBgYGVsc2VgYFwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCBgYGlmYGAgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgYGBpZmBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhXG5zZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbmBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cyAoc2VlICpBc3NpZ25tZW50IHN0YXRlbWVudHMqKSwgYW5kIHRoZW4gdGhlIHN1aXRlIGlzXG5leGVjdXRlZC4gIFdoZW4gdGhlIGl0ZW1zIGFyZSBleGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSBvciBhbiBpdGVyYXRvciByYWlzZXMgYSBgYFN0b3BJdGVyYXRpb25gYFxuZXhjZXB0aW9uKSwgdGhlIHN1aXRlIGluIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIGBgZWxzZWBgIGNsYXVzZSBpZiB0aGVyZSB3YXNcbm5vIG5leHQgaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cbk5hbWVzIGluIHRoZSB0YXJnZXQgbGlzdCBhcmUgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCxcbmJ1dCBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGxcbmJ5IHRoZSBsb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgYGBmb3JcbmkgOj0gYSB0byBiIGRvYGA7IGUuZy4sIGBgbGlzdChyYW5nZSgzKSlgYCByZXR1cm5zIHRoZSBsaXN0IGBgWzAsIDEsXG4yXWBgLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBsb29wXG4gICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuICBBblxuICBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCxcbiAgYW5kIHRoaXMgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXNcbiAgcmVhY2hlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFuc1xuICB0aGF0IGlmIHRoZSBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlXG4gIHNlcXVlbmNlLCB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2ZcbiAgdGhlIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcblxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlIGBgZXhjZXB0YGAgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuXG5ubyBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgc3VpdGUsIGEgc2VhcmNoIGZvclxuYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHRcbmNsYXVzZXMgaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBblxuZXhwcmVzc2lvbi1sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlc1xuYW55IGV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdFxuZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGVcbnJlc3VsdGluZyBvYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpc1xuY29tcGF0aWJsZSB3aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZVxuZXhjZXB0aW9uIG9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlXG5leGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgYGB0cnlgYCBzdGF0ZW1lbnRcbnJhaXNlZCB0aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSBgYGFzYGAga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsXG5pZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nIGBgYXMgdGFyZ2V0YGAsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlIGBgc3lzYGAgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzIHZpYVxuYGBzeXMuZXhjX2luZm8oKWBgLiBgYHN5cy5leGNfaW5mbygpYGAgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZlxudGhlIGV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0XG4oc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpblxudGhlIHByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIGBgc3lzLmV4Y19pbmZvKClgYCB2YWx1ZXNcbmFyZSByZXN0b3JlZCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmdcbmZyb20gYSBmdW5jdGlvbiB0aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgYGBlbHNlYGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSBgYHRyeWBgIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZVxuYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgYGBleGNlcHRgYCBjbGF1c2VzLlxuXG5JZiBgYGZpbmFsbHlgYCBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlXG5gYHRyeWBgIGNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSBgYGV4Y2VwdGBgIGFuZCBgYGVsc2VgYFxuY2xhdXNlcy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3RcbmhhbmRsZWQsIHRoZSBleGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgaXNcbmV4ZWN1dGVkLiAgSWYgdGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24gaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmQgb2ZcbnRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuICBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIHJhaXNlcyBhbm90aGVyXG5leGNlcHRpb24sIHRoZSBzYXZlZCBleGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXdcbmV4Y2VwdGlvbi4gSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSBleGVjdXRlcyBhIGBgcmV0dXJuYGAgb3JcbmBgYnJlYWtgYCBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb24gaXMgZGlzY2FyZGVkOlxuXG4gICBkZWYgZigpOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgMS8wXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgcmV0dXJuIDQyXG5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5XaGVuIGEgYGByZXR1cm5gYCwgYGBicmVha2BgIG9yIGBgY29udGludWVgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW5cbnRoZSBgYHRyeWBgIHN1aXRlIG9mIGEgYGB0cnlgYC4uLmBgZmluYWxseWBgIHN0YXRlbWVudCwgdGhlXG5gYGZpbmFsbHlgYCBjbGF1c2UgaXMgYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgaXMgaWxsZWdhbCBpbiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhXG5wcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlXG5saWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vblxuYGB0cnlgYC4uLmBgZXhjZXB0YGAuLi5gYGZpbmFsbHlgYCB1c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWRcbmZvciBjb252ZW5pZW50IHJldXNlLlxuXG4gICB3aXRoX3N0bXQgOjo9ICJ3aXRoIiB3aXRoX2l0ZW0gKCIsIiB3aXRoX2l0ZW0pKiAiOiIgc3VpdGVcbiAgIHdpdGhfaXRlbSA6Oj0gZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXG5cblRoZSBleGVjdXRpb24gb2YgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBgYHdpdGhfaXRlbWBgKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBpcyBsb2FkZWQgZm9yIGxhdGVyIHVzZS5cblxuMy4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZW50ZXJfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tIGBgX19lbnRlcl9fKClgYCBpcyBhc3NpZ25lZCB0byBpdC5cblxuICAgTm90ZTogVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIGBgX19lbnRlcl9fKClgYFxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuIGBgX19leGl0X18oKWBgIHdpbGwgYWx3YXlzXG4gICAgIGJlIGNhbGxlZC4gVGh1cywgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGVcbiAgICAgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmdcbiAgICAgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNiBiZWxvdy5cblxuNS4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG42LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBgYF9fZXhpdF9fKClgYC4gT3RoZXJ3aXNlLFxuICAgdGhyZWUgYGBOb25lYGAgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlIGBgX19leGl0X18oKWBgIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXNcbiAgIHJlcmFpc2VkLiAgSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgc3VwcHJlc3NlZCwgYW5kIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZ1xuICAgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gYGBfX2V4aXRfXygpYGAgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlIGBgd2l0aGBgIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogYGA9YGBcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICJgYCpgYCIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLVxudGhpcyBpcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgImBgKmBgIiBvciAiYGAqaWRlbnRpZmllcmBgIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiYGA6IGV4cHJlc3Npb25gYCJcbmZvbGxvd2luZyB0aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb25cbmV2ZW4gdGhvc2Ugb2YgdGhlIGZvcm0gYGAqaWRlbnRpZmllcmBgIG9yIGBgKippZGVudGlmaWVyYGAuICBGdW5jdGlvbnNcbm1heSBoYXZlICJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gImBgLT4gZXhwcmVzc2lvbmBgIiBhZnRlciB0aGVcbnBhcmFtZXRlciBsaXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvblxuYW5kIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC5cbkFubm90YXRpb25zIG1heSBiZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpblxudGhlIHNvdXJjZSBjb2RlLiAgVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGVcbnNlbWFudGljcyBvZiBhIGZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXNcbnZhbHVlcyBvZiBhIGRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGVcbmBgX19hbm5vdGF0aW9uc19fYGAgYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiYGBkZWZgYCIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiYGBkZWZgYCJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuICAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyBgYG9iamVjdGBgOyBoZW5jZSxcblxuICAgY2xhc3MgRm9vOlxuICAgICAgIHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb28ob2JqZWN0KTpcbiAgICAgICBwYXNzXG5cblRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvbiBmcmFtZSAoc2VlXG4qTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbCBuYW1lc3BhY2UgYW5kIHRoZVxub3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZSBjb250YWlucyBtb3N0bHlcbmZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzIGV4ZWN1dGlvbiwgaXRzXG5leGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzIHNhdmVkLiBbNF0gQVxuY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdCBmb3IgdGhlIGJhc2VcbmNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeS5cblRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBsb2NhbFxubmFtZXNwYWNlLlxuXG5DbGFzcyBjcmVhdGlvbiBjYW4gYmUgY3VzdG9taXplZCBoZWF2aWx5IHVzaW5nICptZXRhY2xhc3NlcyouXG5cbkNsYXNzZXMgY2FuIGFsc28gYmUgZGVjb3JhdGVkOiBqdXN0IGxpa2Ugd2hlbiBkZWNvcmF0aW5nIGZ1bmN0aW9ucyxcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgY2xhc3MgRm9vOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vOiBwYXNzXG4gICBGb28gPSBmMShhcmcpKGYyKEZvbykpXG5cblRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3JcbmZ1bmN0aW9uIGRlY29yYXRvcnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzcyBvYmplY3QsIHdoaWNoIGlzIHRoZW5cbmJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIGF0dHJpYnV0ZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBpbnN0YW5jZXMuICBJbnN0YW5jZSBhdHRyaWJ1dGVzXG5jYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggYGBzZWxmLm5hbWUgPSB2YWx1ZWBgLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb25cbiJgYHNlbGYubmFtZWBgIiwgYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZVxud2l0aCB0aGUgc2FtZSBuYW1lIHdoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZVxudXNlZCBhcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzXG50aGVyZSBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvXG5jcmVhdGUgaW5zdGFuY2UgdmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLSBDbGFzc1xuICAgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3MgdGhlcmVcbiAgICBpcyBhIGBgZmluYWxseWBgIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXIgZXhjZXB0aW9uLlxuICAgIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhblxuICAgIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgYGByZXR1cm5gYCwgYGBjb250aW51ZWBgLCBvclxuICAgIGBgYnJlYWtgYCBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBmdW5jdGlvblxuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgYGBfX2RvY19fYGAgYXR0cmlidXRlIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgZnVuY3Rpb25cJ3MgKmRvY3N0cmluZyouXG5cbls0XSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBjbGFzc1xuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgbmFtZXNwYWNlXCdzIGBgX19kb2NfX2BgIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NvbXBvdW5kJzogJ1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlIGBgaWZgYCwgYGB3aGlsZWBgIGFuZCBgYGZvcmBgIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsXG5jb250cm9sIGZsb3cgY29uc3RydWN0cy4gIGBgdHJ5YGAgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3JcbmNsZWFudXAgY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgYGB3aXRoYGAgc3RhdGVtZW50XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uIGNvZGUgYXJvdW5kIGFcbmJsb2NrIG9mIGNvZGUuICBGdW5jdGlvbiBhbmQgY2xhc3MgZGVmaW5pdGlvbnMgYXJlIGFsc28gc3ludGFjdGljYWxseVxuY29tcG91bmQgc3RhdGVtZW50cy5cblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIFwnY2xhdXNlcy5cJyAgQSBjbGF1c2VcbmNvbnNpc3RzIG9mIGEgaGVhZGVyIGFuZCBhIFwnc3VpdGUuXCcgIFRoZSBjbGF1c2UgaGVhZGVycyBvZiBhXG5wYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUgYWxsIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsLlxuRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkgaWRlbnRpZnlpbmcga2V5d29yZCBhbmQgZW5kc1xud2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMgY29udHJvbGxlZCBieSBhXG5jbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZVxuc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyXCdzXG5jb2xvbiwgb3IgaXQgY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudFxubGluZXMuICBPbmx5IHRoZSBsYXR0ZXIgZm9ybSBvZiBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCBgYGlmYGAgY2xhdXNlIGEgZm9sbG93aW5nIGBgZWxzZWBgIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG5gYHByaW50KClgYCBjYWxscyBhcmUgZXhlY3V0ZWQ6XG5cbiAgIGlmIHggPCB5IDwgejogcHJpbnQoeCk7IHByaW50KHkpOyBwcmludCh6KVxuXG5TdW1tYXJpemluZzpcblxuICAgY29tcG91bmRfc3RtdCA6Oj0gaWZfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZvcl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHRyeV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmdW5jZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGNsYXNzZGVmXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgYGBORVdMSU5FYGAgcG9zc2libHkgZm9sbG93ZWQgYnlcbmEgYGBERURFTlRgYC4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5c1xuYmVnaW4gd2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgYGBlbHNlYGBcJyBwcm9ibGVtIGlzIHNvbHZlZCBpbiBQeXRob24gYnlcbnJlcXVpcmluZyBuZXN0ZWQgYGBpZmBgIHN0YXRlbWVudHMgdG8gYmUgaW5kZW50ZWQpLlxuXG5UaGUgZm9ybWF0dGluZyBvZiB0aGUgZ3JhbW1hciBydWxlcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHBsYWNlc1xuZWFjaCBjbGF1c2Ugb24gYSBzZXBhcmF0ZSBsaW5lIGZvciBjbGFyaXR5LlxuXG5cblRoZSBgYGlmYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG5cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpc1xuZXhlY3V0ZWQgYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmdvZXMgYmFjayB0byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuXG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYVxuc2VxdWVuY2UgKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG5gYGV4cHJlc3Npb25fbGlzdGBgLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgYGBTdG9wSXRlcmF0aW9uYGBcbmV4Y2VwdGlvbiksIHRoZSBzdWl0ZSBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCxcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHJhbmdlKClgYCByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yXG5pIDo9IGEgdG8gYiBkb2BgOyBlLmcuLCBgYGxpc3QocmFuZ2UoMykpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLFxuMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZVxuZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlIGBgdHJ5YGAgc3RhdGVtZW50XG5yYWlzZWQgdGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgYGBhc2BgIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLFxuaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyBgYGFzIHRhcmdldGBgLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSBgYHN5c2BgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbmBgc3lzLmV4Y19pbmZvKClgYC4gYGBzeXMuZXhjX2luZm8oKWBgIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2ZcbnRoZSBleGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdFxuKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW5cbnRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBgYHN5cy5leGNfaW5mbygpYGAgdmFsdWVzXG5hcmUgcmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsIGBgZWxzZWBgIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgYGB0cnlgYCBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSBgYGVsc2VgYCBjbGF1c2VcbmFyZSBub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nIGBgZXhjZXB0YGAgY2xhdXNlcy5cblxuSWYgYGBmaW5hbGx5YGAgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZVxuYGB0cnlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgYGBleGNlcHRgYCBhbmQgYGBlbHNlYGBcbmNsYXVzZXMuICBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90XG5oYW5kbGVkLCB0aGUgZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgYGBmaW5hbGx5YGAgY2xhdXNlIGlzXG5leGVjdXRlZC4gIElmIHRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mXG50aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAgSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSByYWlzZXMgYW5vdGhlclxuZXhjZXB0aW9uLCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3XG5leGNlcHRpb24uIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yXG5gYGJyZWFrYGAgc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYGB3aXRoX2l0ZW1gYClcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYGBfX2V4aXRfXygpYGAuIE90aGVyd2lzZSxcbiAgIHRocmVlIGBgTm9uZWBgIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSBgYF9fZXhpdF9fKClgYCBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICByZXJhaXNlZC4gIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSBgYHdpdGhgYCBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS1cbnRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB3aGVuIHRoZVxuZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXNcbmV2YWx1YXRlZCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLVxuY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnRcbnRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYVxubGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5XG5hcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuXG5UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2VcbmBgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGVcbmZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICJgYCpgYCIgb3IgImBgKmlkZW50aWZpZXJgYCIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gImBgOiBleHByZXNzaW9uYGAiXG5mb2xsb3dpbmcgdGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uXG5ldmVuIHRob3NlIG9mIHRoZSBmb3JtIGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgLiAgRnVuY3Rpb25zXG5tYXkgaGF2ZSAicmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICJgYC0+IGV4cHJlc3Npb25gYCIgYWZ0ZXIgdGhlXG5wYXJhbWV0ZXIgbGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb25cbmFuZCBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuXG5Bbm5vdGF0aW9ucyBtYXkgYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW5cbnRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlXG5zZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzXG52YWx1ZXMgb2YgYSBkaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlXG5gYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgImBgZGVmYGAiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcbiAgICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgYGBvYmplY3RgYDsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGVcbndpdGggdGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmVcbnVzZWQgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlc1xudGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0b1xuY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC0gQ2xhc3NcbiAgIERlY29yYXRvcnNcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgdW5sZXNzIHRoZXJlXG4gICAgaXMgYSBgYGZpbmFsbHlgYCBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyIGV4Y2VwdGlvbi5cbiAgICBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAogICdjb250ZXh0LW1hbmFnZXJzJzogJ1xuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuJywKICAnY29udGludWUnOiAnXG5UaGUgYGBjb250aW51ZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgY29udGludWVfc3RtdCA6Oj0gImNvbnRpbnVlIlxuXG5gYGNvbnRpbnVlYGAgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSBgYGZvcmBgIG9yXG5gYHdoaWxlYGAgbG9vcCwgYnV0IG5vdCBuZXN0ZWQgaW4gYSBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uIG9yXG5gYGZpbmFsbHlgYCBjbGF1c2Ugd2l0aGluIHRoYXQgbG9vcC4gIEl0IGNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGN5Y2xlXG5vZiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbG9vcC5cblxuV2hlbiBgYGNvbnRpbnVlYGAgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBhXG5gYGZpbmFsbHlgYCBjbGF1c2UsIHRoYXQgYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHlcbnN0YXJ0aW5nIHRoZSBuZXh0IGxvb3AgY3ljbGUuXG4nLAogICdjb252ZXJzaW9ucyc6ICdcbkFyaXRobWV0aWMgY29udmVyc2lvbnNcbioqKioqKioqKioqKioqKioqKioqKipcblxuV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlXG4idGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnNcbnRoYXQgdGhlIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyB0aGF0IHdheTpcblxuKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG90aGVyIGlzIGNvbnZlcnRlZCB0b1xuICBjb21wbGV4O1xuXG4qIG90aGVyd2lzZSwgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB0aGUgb3RoZXJcbiAgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50O1xuXG4qIG90aGVyd2lzZSwgYm90aCBtdXN0IGJlIGludGVnZXJzIGFuZCBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS5cblxuU29tZSBhZGRpdGlvbmFsIHJ1bGVzIGFwcGx5IGZvciBjZXJ0YWluIG9wZXJhdG9ycyAoZS5nLiwgYSBzdHJpbmcgbGVmdFxuYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duXG5jb252ZXJzaW9uIGJlaGF2aW9yLlxuJywKLSAnY3VzdG9taXphdGlvbic6ICdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnlcbiAgICAgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tXG4gICAgIGxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvd1xuICAgICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLFxuICAgICBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYCB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cbicsCi0gJ2RlYnVnZ2VyJzogJ1xuYGBwZGJgYCAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlIGBgcGRiYGAgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuYGBQZGJgYC4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieVxucmVhZGluZyB0aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyBgYGJkYmBgXG5hbmQgYGBjbWRgYC5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyBgYChQZGIpYGAuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbVxudW5kZXIgY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBUYWItY29tcGxldGlvbiB2aWEgdGhlIGBgcmVhZGxpbmVgYCBtb2R1bGUgaXNcbmF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbFxuYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzIGFyZ3VtZW50cyBvZiB0aGUgYGBwcmludGBgIGNvbW1hbmQuXG5cbmBgcGRiLnB5YGAgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLlxuRm9yIGV4YW1wbGU6XG5cbiAgIHB5dGhvbjMgLW0gcGRiIG15c2NyaXB0LnB5XG5cbldoZW4gaW52b2tlZCBhcyBhIHNjcmlwdCwgcGRiIHdpbGwgYXV0b21hdGljYWxseSBlbnRlciBwb3N0LW1vcnRlbVxuZGVidWdnaW5nIGlmIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIGV4aXRzIGFibm9ybWFsbHkuICBBZnRlciBwb3N0LVxubW9ydGVtIGRlYnVnZ2luZyAob3IgYWZ0ZXIgbm9ybWFsIGV4aXQgb2YgdGhlIHByb2dyYW0pLCBwZGIgd2lsbFxucmVzdGFydCB0aGUgcHJvZ3JhbS4gIEF1dG9tYXRpYyByZXN0YXJ0aW5nIHByZXNlcnZlcyBwZGJcJ3Mgc3RhdGUgKHN1Y2hcbmFzIGJyZWFrcG9pbnRzKSBhbmQgaW4gbW9zdCBjYXNlcyBpcyBtb3JlIHVzZWZ1bCB0aGFuIHF1aXR0aW5nIHRoZVxuZGVidWdnZXIgdXBvbiBwcm9ncmFtXCdzIGV4aXQuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMjogYGBwZGIucHlgYCBub3cgYWNjZXB0cyBhIGBgLWNgYCBvcHRpb24gdGhhdFxuZXhlY3V0ZXMgY29tbWFuZHMgYXMgaWYgZ2l2ZW4gaW4gYSBgYC5wZGJyY2BgIGZpbGUsIHNlZSAqRGVidWdnZXJcbkNvbW1hbmRzKi5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgZnJvbSBhIHJ1bm5pbmcgcHJvZ3JhbSBpc1xudG8gaW5zZXJ0XG5cbiAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKVxuXG5hdCB0aGUgbG9jYXRpb24geW91IHdhbnQgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIuICBZb3UgY2FuIHRoZW5cbnN0ZXAgdGhyb3VnaCB0aGUgY29kZSBmb2xsb3dpbmcgdGhpcyBzdGF0ZW1lbnQsIGFuZCBjb250aW51ZSBydW5uaW5nXG53aXRob3V0IHRoZSBkZWJ1Z2dlciB1c2luZyB0aGUgYGBjb250aW51ZWBgIGNvbW1hbmQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGluc3BlY3QgYSBjcmFzaGVkIHByb2dyYW0gaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gbXltb2R1bGUudGVzdCgpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgNCwgaW4gdGVzdFxuICAgICAgIHRlc3QyKClcbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgMywgaW4gdGVzdDJcbiAgICAgICBwcmludChzcGFtKVxuICAgTmFtZUVycm9yOiBzcGFtXG4gICA+Pj4gcGRiLnBtKClcbiAgID4gLi9teW1vZHVsZS5weSgzKXRlc3QyKClcbiAgIC0+IHByaW50KHNwYW0pXG4gICAoUGRiKVxuXG5UaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM7IGVhY2ggZW50ZXJzIHRoZSBkZWJ1Z2dlclxuaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgd2F5OlxuXG5wZGIucnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcblxuICAgRXhlY3V0ZSB0aGUgKnN0YXRlbWVudCogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpIHVuZGVyXG4gICBkZWJ1Z2dlciBjb250cm9sLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzIGJlZm9yZSBhbnkgY29kZSBpc1xuICAgZXhlY3V0ZWQ7IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzIGFuZCB0eXBlIGBgY29udGludWVgYCwgb3IgeW91IGNhblxuICAgc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgYGBzdGVwYGAgb3IgYGBuZXh0YGAgKGFsbCB0aGVzZVxuICAgY29tbWFuZHMgYXJlIGV4cGxhaW5lZCBiZWxvdykuICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIGFuZCAqbG9jYWxzKlxuICAgYXJndW1lbnRzIHNwZWNpZnkgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjb2RlIGlzIGV4ZWN1dGVkOyBieVxuICAgZGVmYXVsdCB0aGUgZGljdGlvbmFyeSBvZiB0aGUgbW9kdWxlIGBgX19tYWluX19gYCBpcyB1c2VkLiAgKFNlZVxuICAgdGhlIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiBgYGV4ZWMoKWBgIG9yIGBgZXZhbCgpYGBcbiAgIGZ1bmN0aW9ucy4pXG5cbnBkYi5ydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpXG4gICB1bmRlciBkZWJ1Z2dlciBjb250cm9sLiAgV2hlbiBgYHJ1bmV2YWwoKWBgIHJldHVybnMsIGl0IHJldHVybnMgdGhlXG4gICB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4gIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG9cbiAgIGBgcnVuKClgYC5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiBgYHJ1bmNhbGwoKWBgIHJldHVybnMsIGl0IHJldHVybnNcbiAgIHdoYXRldmVyIHRoZSBmdW5jdGlvbiBjYWxsIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzXG4gICBhcyBzb29uIGFzIHRoZSBmdW5jdGlvbiBpcyBlbnRlcmVkLlxuXG5wZGIuc2V0X3RyYWNlKClcblxuICAgRW50ZXIgdGhlIGRlYnVnZ2VyIGF0IHRoZSBjYWxsaW5nIHN0YWNrIGZyYW1lLiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgIGhhcmQtY29kZSBhIGJyZWFrcG9pbnQgYXQgYSBnaXZlbiBwb2ludCBpbiBhIHByb2dyYW0sIGV2ZW4gaWYgdGhlXG4gICBjb2RlIGlzIG5vdCBvdGhlcndpc2UgYmVpbmcgZGVidWdnZWQgKGUuZy4gd2hlbiBhbiBhc3NlcnRpb25cbiAgIGZhaWxzKS5cblxucGRiLnBvc3RfbW9ydGVtKHRyYWNlYmFjaz1Ob25lKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIGdpdmVuICp0cmFjZWJhY2sqIG9iamVjdC4gIElmIG5vXG4gICAqdHJhY2ViYWNrKiBpcyBnaXZlbiwgaXQgdXNlcyB0aGUgb25lIG9mIHRoZSBleGNlcHRpb24gdGhhdCBpc1xuICAgY3VycmVudGx5IGJlaW5nIGhhbmRsZWQgKGFuIGV4Y2VwdGlvbiBtdXN0IGJlIGJlaW5nIGhhbmRsZWQgaWYgdGhlXG4gICBkZWZhdWx0IGlzIHRvIGJlIHVzZWQpLlxuXG5wZGIucG0oKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIHRyYWNlYmFjayBmb3VuZCBpblxuICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC5cblxuVGhlIGBgcnVuKmBgIGZ1bmN0aW9ucyBhbmQgYGBzZXRfdHJhY2UoKWBgIGFyZSBhbGlhc2VzIGZvclxuaW5zdGFudGlhdGluZyB0aGUgYGBQZGJgYCBjbGFzcyBhbmQgY2FsbGluZyB0aGUgbWV0aG9kIG9mIHRoZSBzYW1lXG5uYW1lLiAgSWYgeW91IHdhbnQgdG8gYWNjZXNzIGZ1cnRoZXIgZmVhdHVyZXMsIHlvdSBoYXZlIHRvIGRvIHRoaXNcbnlvdXJzZWxmOlxuXG5jbGFzcyBjbGFzcyBwZGIuUGRiKGNvbXBsZXRla2V5PVwndGFiXCcsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUsIG5vc2lnaW50PUZhbHNlKVxuXG4gICBgYFBkYmBgIGlzIHRoZSBkZWJ1Z2dlciBjbGFzcy5cblxuICAgVGhlICpjb21wbGV0ZWtleSosICpzdGRpbiogYW5kICpzdGRvdXQqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZVxuICAgdW5kZXJseWluZyBgYGNtZC5DbWRgYCBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnRcbiAgIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBDdHJsLUMgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYVxuICAgYGBjb250aW51ZWBgIGNvbW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlclxuICAgYWdhaW4gYnkgcHJlc3NpbmcgQ3RybC1DLiAgSWYgeW91IHdhbnQgUGRiIG5vdCB0byB0b3VjaCB0aGUgU0lHSU5UXG4gICBoYW5kbGVyLCBzZXQgKm5vc2lnaW50KiB0b3QgdHJ1ZS5cblxuICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOlxuXG4gICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9W1wnZGphbmdvLipcJ10pLnNldF90cmFjZSgpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMTogVGhlICpza2lwKiBhcmd1bWVudC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgKm5vc2lnaW50KiBhcmd1bWVudC4gIFByZXZpb3VzbHksIGEgU0lHSU5UXG4gICBoYW5kbGVyIHdhcyBuZXZlciBzZXQgYnkgUGRiLlxuXG4gICBydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcbiAgIHNldF90cmFjZSgpXG5cbiAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBleHBsYWluZWQgYWJvdmUuXG5cblxuRGVidWdnZXIgQ29tbWFuZHNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZWJ1Z2dlciBhcmUgbGlzdGVkIGJlbG93LiAgTW9zdFxuY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVycyBhcyBpbmRpY2F0ZWQ7IGUuZy5cbmBgaChlbHApYGAgbWVhbnMgdGhhdCBlaXRoZXIgYGBoYGAgb3IgYGBoZWxwYGAgY2FuIGJlIHVzZWQgdG8gZW50ZXJcbnRoZSBoZWxwIGNvbW1hbmQgKGJ1dCBub3QgYGBoZWBgIG9yIGBgaGVsYGAsIG5vciBgYEhgYCBvciBgYEhlbHBgYCBvclxuYGBIRUxQYGApLiAgQXJndW1lbnRzIHRvIGNvbW1hbmRzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2VcbihzcGFjZXMgb3IgdGFicykuICBPcHRpb25hbCBhcmd1bWVudHMgYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0c1xuKGBgW11gYCkgaW4gdGhlIGNvbW1hbmQgc3ludGF4OyB0aGUgc3F1YXJlIGJyYWNrZXRzIG11c3Qgbm90IGJlIHR5cGVkLlxuQWx0ZXJuYXRpdmVzIGluIHRoZSBjb21tYW5kIHN5bnRheCBhcmUgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgYmFyXG4oYGB8YGApLlxuXG5FbnRlcmluZyBhIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgbGFzdCBjb21tYW5kIGVudGVyZWQuICBFeGNlcHRpb246IGlmXG50aGUgbGFzdCBjb21tYW5kIHdhcyBhIGBgbGlzdGBgIGNvbW1hbmQsIHRoZSBuZXh0IDExIGxpbmVzIGFyZSBsaXN0ZWQuXG5cbkNvbW1hbmRzIHRoYXQgdGhlIGRlYnVnZ2VyIGRvZXNuXCd0IHJlY29nbml6ZSBhcmUgYXNzdW1lZCB0byBiZSBQeXRob25cbnN0YXRlbWVudHMgYW5kIGFyZSBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQuICBQeXRob24gc3RhdGVtZW50cyBjYW4gYWxzbyBiZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uXG5wb2ludCAoYGAhYGApLiAgVGhpcyBpcyBhIHBvd2VyZnVsIHdheSB0byBpbnNwZWN0IHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZDsgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBjaGFuZ2UgYSB2YXJpYWJsZSBvciBjYWxsIGEgZnVuY3Rpb24uXG5XaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gc3VjaCBhIHN0YXRlbWVudCwgdGhlIGV4Y2VwdGlvbiBuYW1lIGlzXG5wcmludGVkIGJ1dCB0aGUgZGVidWdnZXJcJ3Mgc3RhdGUgaXMgbm90IGNoYW5nZWQuXG5cblRoZSBkZWJ1Z2dlciBzdXBwb3J0cyAqYWxpYXNlcyouICBBbGlhc2VzIGNhbiBoYXZlIHBhcmFtZXRlcnMgd2hpY2hcbmFsbG93cyBvbmUgYSBjZXJ0YWluIGxldmVsIG9mIGFkYXB0YWJpbGl0eSB0byB0aGUgY29udGV4dCB1bmRlclxuZXhhbWluYXRpb24uXG5cbk11bHRpcGxlIGNvbW1hbmRzIG1heSBiZSBlbnRlcmVkIG9uIGEgc2luZ2xlIGxpbmUsIHNlcGFyYXRlZCBieVxuYGA7O2BgLiAgKEEgc2luZ2xlIGBgO2BgIGlzIG5vdCB1c2VkIGFzIGl0IGlzIHRoZSBzZXBhcmF0b3IgZm9yXG5tdWx0aXBsZSBjb21tYW5kcyBpbiBhIGxpbmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIFB5dGhvbiBwYXJzZXIuKSAgTm9cbmludGVsbGlnZW5jZSBpcyBhcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUgaW5wdXQgaXMgc3BsaXRcbmF0IHRoZSBmaXJzdCBgYDs7YGAgcGFpciwgZXZlbiBpZiBpdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgcXVvdGVkXG5zdHJpbmcuXG5cbklmIGEgZmlsZSBgYC5wZGJyY2BgIGV4aXN0cyBpbiB0aGUgdXNlclwncyBob21lIGRpcmVjdG9yeSBvciBpbiB0aGVcbmN1cnJlbnQgZGlyZWN0b3J5LCBpdCBpcyByZWFkIGluIGFuZCBleGVjdXRlZCBhcyBpZiBpdCBoYWQgYmVlbiB0eXBlZFxuYXQgdGhlIGRlYnVnZ2VyIHByb21wdC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYWxpYXNlcy4gIElmXG5ib3RoIGZpbGVzIGV4aXN0LCB0aGUgb25lIGluIHRoZSBob21lIGRpcmVjdG9yeSBpcyByZWFkIGZpcnN0IGFuZFxuYWxpYXNlcyBkZWZpbmVkIHRoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBsb2NhbCBmaWxlLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBgYC5wZGJyY2BgIGNhbiBub3cgY29udGFpbiBjb21tYW5kcyB0aGF0XG5jb250aW51ZSBkZWJ1Z2dpbmcsIHN1Y2ggYXMgYGBjb250aW51ZWBgIG9yIGBgbmV4dGBgLiAgUHJldmlvdXNseSxcbnRoZXNlIGNvbW1hbmRzIGhhZCBubyBlZmZlY3QuXG5cbmgoZWxwKSBbY29tbWFuZF1cblxuICAgV2l0aG91dCBhcmd1bWVudCwgcHJpbnQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLiAgV2l0aCBhXG4gICAqY29tbWFuZCogYXMgYXJndW1lbnQsIHByaW50IGhlbHAgYWJvdXQgdGhhdCBjb21tYW5kLiAgYGBoZWxwIHBkYmBgXG4gICBkaXNwbGF5cyB0aGUgZnVsbCBkb2N1bWVudGF0aW9uICh0aGUgZG9jc3RyaW5nIG9mIHRoZSBgYHBkYmBgXG4gICBtb2R1bGUpLiAgU2luY2UgdGhlICpjb21tYW5kKiBhcmd1bWVudCBtdXN0IGJlIGFuIGlkZW50aWZpZXIsXG4gICBgYGhlbHAgZXhlY2BgIG11c3QgYmUgZW50ZXJlZCB0byBnZXQgaGVscCBvbiB0aGUgYGAhYGAgY29tbWFuZC5cblxudyhoZXJlKVxuXG4gICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLiAgQW5cbiAgIGFycm93IGluZGljYXRlcyB0aGUgY3VycmVudCBmcmFtZSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBvZlxuICAgbW9zdCBjb21tYW5kcy5cblxuZChvd24pIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIGRvd24gaW4gdGhlXG4gICBzdGFjayB0cmFjZSAodG8gYSBuZXdlciBmcmFtZSkuXG5cbnUocCkgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgdXAgaW4gdGhlIHN0YWNrXG4gICB0cmFjZSAodG8gYW4gb2xkZXIgZnJhbWUpLlxuXG5iKHJlYWspIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgV2l0aCBhICpsaW5lbm8qIGFyZ3VtZW50LCBzZXQgYSBicmVhayB0aGVyZSBpbiB0aGUgY3VycmVudCBmaWxlLlxuICAgV2l0aCBhICpmdW5jdGlvbiogYXJndW1lbnQsIHNldCBhIGJyZWFrIGF0IHRoZSBmaXJzdCBleGVjdXRhYmxlXG4gICBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkXG4gICB3aXRoIGEgZmlsZW5hbWUgYW5kIGEgY29sb24sIHRvIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXJcbiAgIGZpbGUgKHByb2JhYmx5IG9uZSB0aGF0IGhhc25cJ3QgYmVlbiBsb2FkZWQgeWV0KS4gIFRoZSBmaWxlIGlzXG4gICBzZWFyY2hlZCBvbiBgYHN5cy5wYXRoYGAuICBOb3RlIHRoYXQgZWFjaCBicmVha3BvaW50IGlzIGFzc2lnbmVkIGFcbiAgIG51bWJlciB0byB3aGljaCBhbGwgdGhlIG90aGVyIGJyZWFrcG9pbnQgY29tbWFuZHMgcmVmZXIuXG5cbiAgIElmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC5cblxuICAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLCBpbmNsdWRpbmcgZm9yIGVhY2ggYnJlYWtwb2ludCxcbiAgIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBicmVha3BvaW50IGhhcyBiZWVuIGhpdCwgdGhlIGN1cnJlbnRcbiAgIGlnbm9yZSBjb3VudCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBpZiBhbnkuXG5cbnRicmVhayBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpc1xuICAgZmlyc3QgaGl0LiBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYGBicmVha2BgLlxuXG5jbChlYXIpIFtmaWxlbmFtZTpsaW5lbm8gfCBicG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgV2l0aCBhICpmaWxlbmFtZTpsaW5lbm8qIGFyZ3VtZW50LCBjbGVhciBhbGwgdGhlIGJyZWFrcG9pbnRzIGF0XG4gICB0aGlzIGxpbmUuIFdpdGggYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50IG51bWJlcnMsIGNsZWFyXG4gICB0aG9zZSBicmVha3BvaW50cy4gV2l0aG91dCBhcmd1bWVudCwgY2xlYXIgYWxsIGJyZWFrcyAoYnV0IGZpcnN0XG4gICBhc2sgY29uZmlybWF0aW9uKS5cblxuZGlzYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIERpc2FibGUgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2ZcbiAgIGJyZWFrcG9pbnQgbnVtYmVycy4gIERpc2FibGluZyBhIGJyZWFrcG9pbnQgbWVhbnMgaXQgY2Fubm90IGNhdXNlXG4gICB0aGUgcHJvZ3JhbSB0byBzdG9wIGV4ZWN1dGlvbiwgYnV0IHVubGlrZSBjbGVhcmluZyBhIGJyZWFrcG9pbnQsIGl0XG4gICByZW1haW5zIGluIHRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzIGFuZCBjYW4gYmUgKHJlLSllbmFibGVkLlxuXG5lbmFibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBFbmFibGUgdGhlIGJyZWFrcG9pbnRzIHNwZWNpZmllZC5cblxuaWdub3JlIGJwbnVtYmVyIFtjb3VudF1cblxuICAgU2V0IHRoZSBpZ25vcmUgY291bnQgZm9yIHRoZSBnaXZlbiBicmVha3BvaW50IG51bWJlci4gIElmIGNvdW50IGlzXG4gICBvbWl0dGVkLCB0aGUgaWdub3JlIGNvdW50IGlzIHNldCB0byAwLiAgQSBicmVha3BvaW50IGJlY29tZXMgYWN0aXZlXG4gICB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMgemVyby4gIFdoZW4gbm9uLXplcm8sIHRoZSBjb3VudCBpc1xuICAgZGVjcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQgYW5kIHRoZSBicmVha3BvaW50XG4gICBpcyBub3QgZGlzYWJsZWQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS5cblxuY29uZGl0aW9uIGJwbnVtYmVyIFtjb25kaXRpb25dXG5cbiAgIFNldCBhIG5ldyAqY29uZGl0aW9uKiBmb3IgdGhlIGJyZWFrcG9pbnQsIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC4gIElmICpjb25kaXRpb24qXG4gICBpcyBhYnNlbnQsIGFueSBleGlzdGluZyBjb25kaXRpb24gaXMgcmVtb3ZlZDsgaS5lLiwgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG1hZGUgdW5jb25kaXRpb25hbC5cblxuY29tbWFuZHMgW2JwbnVtYmVyXVxuXG4gICBTcGVjaWZ5IGEgbGlzdCBvZiBjb21tYW5kcyBmb3IgYnJlYWtwb2ludCBudW1iZXIgKmJwbnVtYmVyKi4gIFRoZVxuICAgY29tbWFuZHMgdGhlbXNlbHZlcyBhcHBlYXIgb24gdGhlIGZvbGxvd2luZyBsaW5lcy4gIFR5cGUgYSBsaW5lXG4gICBjb250YWluaW5nIGp1c3QgYGBlbmRgYCB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOlxuXG4gICAgICAoUGRiKSBjb21tYW5kcyAxXG4gICAgICAoY29tKSBwcmludCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCBgYGVuZGBgOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLlxuXG4gICBXaXRoIG5vICpicG51bWJlciogYXJndW1lbnQsIGNvbW1hbmRzIHJlZmVycyB0byB0aGUgbGFzdCBicmVha3BvaW50XG4gICBzZXQuXG5cbiAgIFlvdSBjYW4gdXNlIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gc3RhcnQgeW91ciBwcm9ncmFtIHVwIGFnYWluLlxuICAgU2ltcGx5IHVzZSB0aGUgY29udGludWUgY29tbWFuZCwgb3Igc3RlcCwgb3IgYW55IG90aGVyIGNvbW1hbmQgdGhhdFxuICAgcmVzdW1lcyBleGVjdXRpb24uXG5cbiAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsXG4gICBzdGVwLCBuZXh0LCByZXR1cm4sIGp1bXAsIHF1aXQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMpIHRlcm1pbmF0ZXNcbiAgIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmIHRoYXQgY29tbWFuZCB3YXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnlcbiAgIGVuZCkuIFRoaXMgaXMgYmVjYXVzZSBhbnkgdGltZSB5b3UgcmVzdW1lIGV4ZWN1dGlvbiAoZXZlbiB3aXRoIGFcbiAgIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5IGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQtLXdoaWNoXG4gICBjb3VsZCBoYXZlIGl0cyBvd24gY29tbWFuZCBsaXN0LCBsZWFkaW5nIHRvIGFtYmlndWl0aWVzIGFib3V0IHdoaWNoXG4gICBsaXN0IHRvIGV4ZWN1dGUuXG5cbiAgIElmIHlvdSB1c2UgdGhlIFwnc2lsZW50XCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWxcbiAgIG1lc3NhZ2UgYWJvdXQgc3RvcHBpbmcgYXQgYSBicmVha3BvaW50IGlzIG5vdCBwcmludGVkLiAgVGhpcyBtYXkgYmVcbiAgIGRlc2lyYWJsZSBmb3IgYnJlYWtwb2ludHMgdGhhdCBhcmUgdG8gcHJpbnQgYSBzcGVjaWZpYyBtZXNzYWdlIGFuZFxuICAgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHByaW50IGFueXRoaW5nLCB5b3VcbiAgIHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuXG5cbnModGVwKVxuXG4gICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uXG4gICAoZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGVcbiAgIGN1cnJlbnQgZnVuY3Rpb24pLlxuXG5uKGV4dClcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBgbmV4dGBgIGFuZFxuICAgYGBzdGVwYGAgaXMgdGhhdCBgYHN0ZXBgYCBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlXG4gICBgYG5leHRgYCBleGVjdXRlcyBjYWxsZWQgZnVuY3Rpb25zIGF0IChuZWFybHkpIGZ1bGwgc3BlZWQsIG9ubHlcbiAgIHN0b3BwaW5nIGF0IHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uKVxuXG51bnQoaWwpIFtsaW5lbm9dXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lIGlzIHJlYWNoZWQuXG5cbiAgIFdpdGggYSBsaW5lIG51bWJlciwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGEgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIG9yIGVxdWFsIHRvIHRoYXQgaXMgcmVhY2hlZC4gIEluIGJvdGggY2FzZXMsIGFsc28gc3RvcCB3aGVuXG4gICB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBBbGxvdyBnaXZpbmcgYW4gZXhwbGljaXQgbGluZSBudW1iZXIuXG5cbnIoZXR1cm4pXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgY3VycmVudCBmdW5jdGlvbiByZXR1cm5zLlxuXG5jKG9udChpbnVlKSlcblxuICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuXG5cbmoodW1wKSBsaW5lbm9cblxuICAgU2V0IHRoZSBuZXh0IGxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiAgT25seSBhdmFpbGFibGUgaW4gdGhlXG4gICBib3R0b20tbW9zdCBmcmFtZS4gIFRoaXMgbGV0cyB5b3UganVtcCBiYWNrIGFuZCBleGVjdXRlIGNvZGUgYWdhaW4sXG4gICBvciBqdW1wIGZvcndhcmQgdG8gc2tpcCBjb2RlIHRoYXQgeW91IGRvblwndCB3YW50IHRvIHJ1bi5cblxuICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm90IGFsbCBqdW1wcyBhcmUgYWxsb3dlZCAtLSBmb3IgaW5zdGFuY2VcbiAgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhIGBgZm9yYGAgbG9vcCBvciBvdXRcbiAgIG9mIGEgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5sKGlzdCkgW2ZpcnN0WywgbGFzdF1dXG5cbiAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMVxuICAgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuXG4gICBXaXRoIGBgLmBgIGFzIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lLlxuICAgV2l0aCBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSBgYC0+YGAuICBJZlxuICAgYW4gZXhjZXB0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkLCB0aGUgbGluZSB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhc1xuICAgb3JpZ2luYWxseSByYWlzZWQgb3IgcHJvcGFnYXRlZCBpcyBpbmRpY2F0ZWQgYnkgYGA+PmBgLCBpZiBpdFxuICAgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlIGBgPj5gYCBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgYGBsaXN0YGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYShyZ3MpXG5cbiAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLlxuXG5wKHJpbnQpIGV4cHJlc3Npb25cblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHNcbiAgIHZhbHVlLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlIGBgcHJpbnRgYCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzXG4gICBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGUgYGBwcHJpbnRgYCBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlIGBgY29kZWBgIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5IGBgJTFgYCwgYGAlMmBgLCBhbmQgc28gb24sIHdoaWxlIGBgJSpgYCBpcyByZXBsYWNlZCBieVxuICAgYWxsIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlIGBgLnBkYnJjYGAgZmlsZSk6XG5cbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IilcbiAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmXG4gICAgICBhbGlhcyBwcyBwaSBzZWxmXG5cbnVuYWxpYXMgbmFtZVxuXG4gICBEZWxldGUgdGhlIHNwZWNpZmllZCBhbGlhcy5cblxuISBzdGF0ZW1lbnRcblxuICAgRXhlY3V0ZSB0aGUgKG9uZS1saW5lKSAqc3RhdGVtZW50KiBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudFxuICAgc3RhY2sgZnJhbWUuIFRoZSBleGNsYW1hdGlvbiBwb2ludCBjYW4gYmUgb21pdHRlZCB1bmxlc3MgdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBzdGF0ZW1lbnQgcmVzZW1ibGVzIGEgZGVidWdnZXIgY29tbWFuZC4gIFRvIHNldCBhXG4gICBnbG9iYWwgdmFyaWFibGUsIHlvdSBjYW4gcHJlZml4IHRoZSBhc3NpZ25tZW50IGNvbW1hbmQgd2l0aCBhXG4gICBgYGdsb2JhbGBgIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCBgYHNobGV4YGAgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICBgYHN5cy5hcmd2YGAuIEhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zXG4gICBhcmUgcHJlc2VydmVkLiBgYHJlc3RhcnRgYCBpcyBhbiBhbGlhcyBmb3IgYGBydW5gYC5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlIGlzXG4gICAgZGV0ZXJtaW5lZCBieSB0aGUgYGBfX25hbWVfX2BgIGluIHRoZSBmcmFtZSBnbG9iYWxzLlxuJywKKyAnY3VzdG9taXphdGlvbic6ICdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXNcbiAgICAgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHRvcGljLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlXG4gICAib2ZmaWNpYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsXG4gICB0aGlzIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWRcbiAgIHRvIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICBgYDwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGBcbiAgIGJ1dCBub3QgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhblxuICAgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXNcbiAgIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYHN0cihvYmplY3QpYGAgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBmb3JtYXQoKWBgXG4gICBhbmQgYGBwcmludCgpYGAgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgICpzdHJpbmcqIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBgb2JqZWN0Ll9fcmVwcl9fKClgYCBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0IGBgX19zdHJfXygpYGAgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlIGBgb2JqZWN0YGBcbiAgIGNhbGxzIGBgb2JqZWN0Ll9fcmVwcl9fKClgYC5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBieXRlcygpYGAgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhIGBgYnl0ZXNgYCBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgZm9ybWF0KClgYCBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBvZiBjbGFzcyBgYHN0cmBgKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXNcbiAgIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpcyB1cFxuICAgdG8gdGhlIHR5cGUgaW1wbGVtZW50aW5nIGBgX19mb3JtYXRfXygpYGAsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzXG4gICB3aWxsIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yXG4gICB1c2UgYSBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGNhbGxzXG4gICBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmQgYGB4Pj15YGAgY2FsbHNcbiAgIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSBgYGZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpYGAuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gYGBoYXNoKClgYCBhbmQgZm9yIG9wZXJhdGlvbnMgb25cbiAgIG1lbWJlcnMgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyBgYHNldGBgLCBgYGZyb3plbnNldGBgLCBhbmRcbiAgIGBgZGljdGBgLiAgYGBfX2hhc2hfXygpYGAgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHlcbiAgIHJlcXVpcmVkIHByb3BlcnR5IGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWVcbiAgIGhhc2ggdmFsdWU7IGl0IGlzIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmdcbiAgIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2ggdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXRcbiAgIGFsc28gcGxheSBhIHBhcnQgaW4gY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBOb3RlOiBgYGhhc2goKWBgIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3MgY3VzdG9tXG4gICAgIGBgX19oYXNoX18oKWBgIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhIGBgUHlfc3NpemVfdGBgLiAgVGhpcyBpc1xuICAgICB0eXBpY2FsbHkgOCBieXRlcyBvbiA2NC1iaXQgYnVpbGRzIGFuZCA0IGJ5dGVzIG9uIDMyLWJpdCBidWlsZHMuXG4gICAgIElmIGFuIG9iamVjdFwncyAgIGBgX19oYXNoX18oKWBgIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkcyBvZlxuICAgICBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGwgc3VwcG9ydGVkXG4gICAgIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCBgYHB5dGhvbiAtYyAiaW1wb3J0IHN5cztcbiAgICAgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiYGBcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzXG4gICBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZVxuICAgdXNhYmxlIGFzIGl0ZW1zIGluIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkXG4gICBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGVcbiAgIGNvbGxlY3Rpb25zIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZVxuICAgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19lcV9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgYGB4ID09IHlgYCBpbXBsaWVzIGJvdGggdGhhdCBgYHggaXMgeWBgIGFuZCBgYGhhc2goeCkgPT1cbiAgIGhhc2goeSlgYC5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgYW5kIGRvZXMgbm90IGRlZmluZVxuICAgYGBfX2hhc2hfXygpYGAgd2lsbCBoYXZlIGl0cyBgYF9faGFzaF9fKClgYCBpbXBsaWNpdGx5IHNldCB0b1xuICAgYGBOb25lYGAuICBXaGVuIHRoZSBgYF9faGFzaF9fKClgYCBtZXRob2Qgb2YgYSBjbGFzcyBpcyBgYE5vbmVgYCxcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3Mgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSBgYFR5cGVFcnJvcmBgIHdoZW5cbiAgIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlXG4gICBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaixcbiAgIGNvbGxlY3Rpb25zLkhhc2hhYmxlYGApLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGVcbiAgIGludGVycHJldGVyIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyBgYF9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX19gYC5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlIGBgX19lcV9fKClgYCB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duIGBgX19oYXNoX18oKWBgIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgYGBUeXBlRXJyb3JgYCB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkXG4gICBhcyBoYXNoYWJsZSBieSBhbiBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYCBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgYGBfX2hhc2hfXygpYGAgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kIGRhdGV0aW1lXG4gICAgIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gYGBQWVRIT05IQVNIU0VFRGBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICBgYGJvb2woKWBgOyBzaG91bGQgcmV0dXJuIGBgRmFsc2VgYCBvciBgYFRydWVgYC4gIFdoZW4gdGhpcyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCBgYF9fbGVuX18oKWBgIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZVxuICAgb2JqZWN0IGlzIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzXG4gICBkZWZpbmVzIG5laXRoZXIgYGBfX2xlbl9fKClgYCBub3IgYGBfX2Jvb2xfXygpYGAsIGFsbCBpdHMgaW5zdGFuY2VzXG4gICBhcmUgY29uc2lkZXJlZCB0cnVlLlxuJywKKyAnZGVidWdnZXInOiAnXG5gYHBkYmBgIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBtb2R1bGUgYGBwZGJgYCBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvclxuUHl0aG9uIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZFxuc2luZ2xlIHN0ZXBwaW5nIGF0IHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsXG5zb3VyY2UgY29kZSBsaXN0aW5nLCBhbmQgZXZhbHVhdGlvbiBvZiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgaW4gdGhlXG5jb250ZXh0IG9mIGFueSBzdGFjayBmcmFtZS4gIEl0IGFsc28gc3VwcG9ydHMgcG9zdC1tb3J0ZW0gZGVidWdnaW5nXG5hbmQgY2FuIGJlIGNhbGxlZCB1bmRlciBwcm9ncmFtIGNvbnRyb2wuXG5cblRoZSBkZWJ1Z2dlciBpcyBleHRlbnNpYmxlIC0tIGl0IGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgdGhlIGNsYXNzXG5gYFBkYmBgLiBUaGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYnV0IGVhc2lseSB1bmRlcnN0b29kIGJ5XG5yZWFkaW5nIHRoZSBzb3VyY2UuICBUaGUgZXh0ZW5zaW9uIGludGVyZmFjZSB1c2VzIHRoZSBtb2R1bGVzIGBgYmRiYGBcbmFuZCBgYGNtZGBgLlxuXG5UaGUgZGVidWdnZXJcJ3MgcHJvbXB0IGlzIGBgKFBkYilgYC4gVHlwaWNhbCB1c2FnZSB0byBydW4gYSBwcm9ncmFtXG51bmRlciBjb250cm9sIG9mIHRoZSBkZWJ1Z2dlciBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBwZGIucnVuKFwnbXltb2R1bGUudGVzdCgpXCcpXG4gICA+IDxzdHJpbmc+KDApPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgIE5hbWVFcnJvcjogXCdzcGFtXCdcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgYGByZWFkbGluZWBgIG1vZHVsZSBpc1xuYXZhaWxhYmxlIGZvciBjb21tYW5kcyBhbmQgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsXG5hbmQgbG9jYWwgbmFtZXMgYXJlIG9mZmVyZWQgYXMgYXJndW1lbnRzIG9mIHRoZSBgYHBgYCBjb21tYW5kLlxuXG5gYHBkYi5weWBgIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy5cbkZvciBleGFtcGxlOlxuXG4gICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiAgQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uICBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAzLjI6IGBgcGRiLnB5YGAgbm93IGFjY2VwdHMgYSBgYC1jYGAgb3B0aW9uIHRoYXRcbmV4ZWN1dGVzIGNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgYGAucGRicmNgYCBmaWxlLCBzZWUgKkRlYnVnZ2VyXG5Db21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIGBgY29udGludWVgYCBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQoc3BhbSlcbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludChzcGFtKVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KSB1bmRlclxuICAgZGVidWdnZXIgY29udHJvbC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXNcbiAgIGV4ZWN1dGVkOyB5b3UgY2FuIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSBgYGNvbnRpbnVlYGAsIG9yIHlvdSBjYW5cbiAgIHN0ZXAgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHVzaW5nIGBgc3RlcGBgIG9yIGBgbmV4dGBgIChhbGwgdGhlc2VcbiAgIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscypcbiAgIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnlcbiAgIGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSBgYF9fbWFpbl9fYGAgaXMgdXNlZC4gIChTZWVcbiAgIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUgYnVpbHQtaW4gYGBleGVjKClgYCBvciBgYGV2YWwoKWBgXG4gICBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gYGBydW5ldmFsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZVxuICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvXG4gICBgYHJ1bigpYGAuXG5cbnBkYi5ydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuXG4gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZylcbiAgIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gYGBydW5jYWxsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cblRoZSBgYHJ1bipgYCBmdW5jdGlvbnMgYW5kIGBgc2V0X3RyYWNlKClgYCBhcmUgYWxpYXNlcyBmb3Jcbmluc3RhbnRpYXRpbmcgdGhlIGBgUGRiYGAgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZVxubmFtZS4gIElmIHlvdSB3YW50IHRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzXG55b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgYGBQZGJgYCBpcyB0aGUgZGVidWdnZXIgY2xhc3MuXG5cbiAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGVcbiAgIHVuZGVybHlpbmcgYGBjbWQuQ21kYGAgY2xhc3M7IHNlZSB0aGUgZGVzY3JpcHRpb24gdGhlcmUuXG5cbiAgIFRoZSAqc2tpcCogYXJndW1lbnQsIGlmIGdpdmVuLCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGdsb2Itc3R5bGVcbiAgIG1vZHVsZSBuYW1lIHBhdHRlcm5zLiAgVGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBmcmFtZXMgdGhhdFxuICAgb3JpZ2luYXRlIGluIGEgbW9kdWxlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuIFsxXVxuXG4gICBCeSBkZWZhdWx0LCBQZGIgc2V0cyBhIGhhbmRsZXIgZm9yIHRoZSBTSUdJTlQgc2lnbmFsICh3aGljaCBpcyBzZW50XG4gICB3aGVuIHRoZSB1c2VyIHByZXNzZXMgQ3RybC1DIG9uIHRoZSBjb25zb2xlKSB3aGVuIHlvdSBnaXZlIGFcbiAgIGBgY29udGludWVgYCBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdSB3YW50IFBkYiBub3QgdG8gdG91Y2ggdGhlIFNJR0lOVFxuICAgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICpub3NpZ2ludCogYXJndW1lbnQuICBQcmV2aW91c2x5LCBhIFNJR0lOVFxuICAgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5IFBkYi5cblxuICAgcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBiZWxvdy4gIE1vc3RcbmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnMgYXMgaW5kaWNhdGVkOyBlLmcuXG5gYGgoZWxwKWBgIG1lYW5zIHRoYXQgZWl0aGVyIGBgaGBgIG9yIGBgaGVscGBgIGNhbiBiZSB1c2VkIHRvIGVudGVyXG50aGUgaGVscCBjb21tYW5kIChidXQgbm90IGBgaGVgYCBvciBgYGhlbGBgLCBub3IgYGBIYGAgb3IgYGBIZWxwYGAgb3JcbmBgSEVMUGBgKS4gIEFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlXG4oc3BhY2VzIG9yIHRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHNcbihgYFtdYGApIGluIHRoZSBjb21tYW5kIHN5bnRheDsgdGhlIHNxdWFyZSBicmFja2V0cyBtdXN0IG5vdCBiZSB0eXBlZC5cbkFsdGVybmF0aXZlcyBpbiB0aGUgY29tbWFuZCBzeW50YXggYXJlIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIGJhclxuKGBgfGBgKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSBgYGxpc3RgYCBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKGBgIWBgKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIGEgdmFyaWFibGUgb3IgY2FsbCBhIGZ1bmN0aW9uLlxuV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpc1xucHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyXCdzIHN0YXRlIGlzIG5vdCBjaGFuZ2VkLlxuXG5UaGUgZGVidWdnZXIgc3VwcG9ydHMgKmFsaWFzZXMqLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoXG5hbGxvd3Mgb25lIGEgY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXJcbmV4YW1pbmF0aW9uLlxuXG5NdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnlcbmBgOztgYC4gIChBIHNpbmdsZSBgYDtgYCBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvclxubXVsdGlwbGUgY29tbWFuZHMgaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vXG5pbnRlbGxpZ2VuY2UgaXMgYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0XG5hdCB0aGUgZmlyc3QgYGA7O2BgIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZFxuc3RyaW5nLlxuXG5JZiBhIGZpbGUgYGAucGRicmNgYCBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogYGAucGRicmNgYCBjYW4gbm93IGNvbnRhaW4gY29tbWFuZHMgdGhhdFxuY29udGludWUgZGVidWdnaW5nLCBzdWNoIGFzIGBgY29udGludWVgYCBvciBgYG5leHRgYC4gIFByZXZpb3VzbHksXG50aGVzZSBjb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gIGBgaGVscCBwZGJgYFxuICAgZGlzcGxheXMgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiAodGhlIGRvY3N0cmluZyBvZiB0aGUgYGBwZGJgYFxuICAgbW9kdWxlKS4gIFNpbmNlIHRoZSAqY29tbWFuZCogYXJndW1lbnQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLFxuICAgYGBoZWxwIGV4ZWNgYCBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlIGBgIWBgIGNvbW1hbmQuXG5cbncoaGVyZSlcblxuICAgUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4gIEFuXG4gICBhcnJvdyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWNoIGRldGVybWluZXMgdGhlIGNvbnRleHQgb2ZcbiAgIG1vc3QgY29tbWFuZHMuXG5cbmQob3duKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyBkb3duIGluIHRoZVxuICAgc3RhY2sgdHJhY2UgKHRvIGEgbmV3ZXIgZnJhbWUpLlxuXG51KHApIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIHVwIGluIHRoZSBzdGFja1xuICAgdHJhY2UgKHRvIGFuIG9sZGVyIGZyYW1lKS5cblxuYihyZWFrKSBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFdpdGggYSAqbGluZW5vKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgdGhlcmUgaW4gdGhlIGN1cnJlbnQgZmlsZS5cbiAgIFdpdGggYSAqZnVuY3Rpb24qIGFyZ3VtZW50LCBzZXQgYSBicmVhayBhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZVxuICAgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIG1heSBiZSBwcmVmaXhlZFxuICAgd2l0aCBhIGZpbGVuYW1lIGFuZCBhIGNvbG9uLCB0byBzcGVjaWZ5IGEgYnJlYWtwb2ludCBpbiBhbm90aGVyXG4gICBmaWxlIChwcm9iYWJseSBvbmUgdGhhdCBoYXNuXCd0IGJlZW4gbG9hZGVkIHlldCkuICBUaGUgZmlsZSBpc1xuICAgc2VhcmNoZWQgb24gYGBzeXMucGF0aGBgLiAgTm90ZSB0aGF0IGVhY2ggYnJlYWtwb2ludCBpcyBhc3NpZ25lZCBhXG4gICBudW1iZXIgdG8gd2hpY2ggYWxsIHRoZSBvdGhlciBicmVha3BvaW50IGNvbW1hbmRzIHJlZmVyLlxuXG4gICBJZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsXG4gICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50XG4gICBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LlxuXG50YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBUZW1wb3JhcnkgYnJlYWtwb2ludCwgd2hpY2ggaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXNcbiAgIGZpcnN0IGhpdC4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIGBgYnJlYWtgYC5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0IGBgZW5kYGAgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTpcblxuICAgICAgKFBkYikgY29tbWFuZHMgMVxuICAgICAgKGNvbSkgcCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCBgYGVuZGBgOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLlxuXG4gICBXaXRoIG5vICpicG51bWJlciogYXJndW1lbnQsIGNvbW1hbmRzIHJlZmVycyB0byB0aGUgbGFzdCBicmVha3BvaW50XG4gICBzZXQuXG5cbiAgIFlvdSBjYW4gdXNlIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gc3RhcnQgeW91ciBwcm9ncmFtIHVwIGFnYWluLlxuICAgU2ltcGx5IHVzZSB0aGUgY29udGludWUgY29tbWFuZCwgb3Igc3RlcCwgb3IgYW55IG90aGVyIGNvbW1hbmQgdGhhdFxuICAgcmVzdW1lcyBleGVjdXRpb24uXG5cbiAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsXG4gICBzdGVwLCBuZXh0LCByZXR1cm4sIGp1bXAsIHF1aXQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMpIHRlcm1pbmF0ZXNcbiAgIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmIHRoYXQgY29tbWFuZCB3YXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnlcbiAgIGVuZCkuIFRoaXMgaXMgYmVjYXVzZSBhbnkgdGltZSB5b3UgcmVzdW1lIGV4ZWN1dGlvbiAoZXZlbiB3aXRoIGFcbiAgIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5IGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQtLXdoaWNoXG4gICBjb3VsZCBoYXZlIGl0cyBvd24gY29tbWFuZCBsaXN0LCBsZWFkaW5nIHRvIGFtYmlndWl0aWVzIGFib3V0IHdoaWNoXG4gICBsaXN0IHRvIGV4ZWN1dGUuXG5cbiAgIElmIHlvdSB1c2UgdGhlIFwnc2lsZW50XCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWxcbiAgIG1lc3NhZ2UgYWJvdXQgc3RvcHBpbmcgYXQgYSBicmVha3BvaW50IGlzIG5vdCBwcmludGVkLiAgVGhpcyBtYXkgYmVcbiAgIGRlc2lyYWJsZSBmb3IgYnJlYWtwb2ludHMgdGhhdCBhcmUgdG8gcHJpbnQgYSBzcGVjaWZpYyBtZXNzYWdlIGFuZFxuICAgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHByaW50IGFueXRoaW5nLCB5b3VcbiAgIHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuXG5cbnModGVwKVxuXG4gICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uXG4gICAoZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGVcbiAgIGN1cnJlbnQgZnVuY3Rpb24pLlxuXG5uKGV4dClcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBgbmV4dGBgIGFuZFxuICAgYGBzdGVwYGAgaXMgdGhhdCBgYHN0ZXBgYCBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlXG4gICBgYG5leHRgYCBleGVjdXRlcyBjYWxsZWQgZnVuY3Rpb25zIGF0IChuZWFybHkpIGZ1bGwgc3BlZWQsIG9ubHlcbiAgIHN0b3BwaW5nIGF0IHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uKVxuXG51bnQoaWwpIFtsaW5lbm9dXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lIGlzIHJlYWNoZWQuXG5cbiAgIFdpdGggYSBsaW5lIG51bWJlciwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGEgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIG9yIGVxdWFsIHRvIHRoYXQgaXMgcmVhY2hlZC4gIEluIGJvdGggY2FzZXMsIGFsc28gc3RvcCB3aGVuXG4gICB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBBbGxvdyBnaXZpbmcgYW4gZXhwbGljaXQgbGluZSBudW1iZXIuXG5cbnIoZXR1cm4pXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgY3VycmVudCBmdW5jdGlvbiByZXR1cm5zLlxuXG5jKG9udChpbnVlKSlcblxuICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuXG5cbmoodW1wKSBsaW5lbm9cblxuICAgU2V0IHRoZSBuZXh0IGxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiAgT25seSBhdmFpbGFibGUgaW4gdGhlXG4gICBib3R0b20tbW9zdCBmcmFtZS4gIFRoaXMgbGV0cyB5b3UganVtcCBiYWNrIGFuZCBleGVjdXRlIGNvZGUgYWdhaW4sXG4gICBvciBqdW1wIGZvcndhcmQgdG8gc2tpcCBjb2RlIHRoYXQgeW91IGRvblwndCB3YW50IHRvIHJ1bi5cblxuICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm90IGFsbCBqdW1wcyBhcmUgYWxsb3dlZCAtLSBmb3IgaW5zdGFuY2VcbiAgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhIGBgZm9yYGAgbG9vcCBvciBvdXRcbiAgIG9mIGEgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5sKGlzdCkgW2ZpcnN0WywgbGFzdF1dXG5cbiAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMVxuICAgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuXG4gICBXaXRoIGBgLmBgIGFzIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lLlxuICAgV2l0aCBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSBgYC0+YGAuICBJZlxuICAgYW4gZXhjZXB0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkLCB0aGUgbGluZSB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhc1xuICAgb3JpZ2luYWxseSByYWlzZWQgb3IgcHJvcGFnYXRlZCBpcyBpbmRpY2F0ZWQgYnkgYGA+PmBgLCBpZiBpdFxuICAgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlIGBgPj5gYCBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgYGBsaXN0YGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYShyZ3MpXG5cbiAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLlxuXG5wIGV4cHJlc3Npb25cblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHNcbiAgIHZhbHVlLlxuXG4gICBOb3RlOiBgYHByaW50KClgYCBjYW4gYWxzbyBiZSB1c2VkLCBidXQgaXMgbm90IGEgZGVidWdnZXIgY29tbWFuZCAtLS1cbiAgICAgdGhpcyBleGVjdXRlcyB0aGUgUHl0aG9uIGBgcHJpbnQoKWBgIGZ1bmN0aW9uLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlIGBgcGBgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSBgYHBwcmludGBgIG1vZHVsZS5cblxud2hhdGlzIGV4cHJlc3Npb25cblxuICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi5cblxuc291cmNlIGV4cHJlc3Npb25cblxuICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpZiBpdCBjaGFuZ2VkLCBlYWNoIHRpbWVcbiAgIGV4ZWN1dGlvbiBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS5cblxuICAgV2l0aG91dCBleHByZXNzaW9uLCBsaXN0IGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxudW5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5pbnRlcmFjdFxuXG4gICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgYGBjb2RlYGAgbW9kdWxlKSB3aG9zZVxuICAgZ2xvYmFsIG5hbWVzcGFjZSBjb250YWlucyBhbGwgdGhlIChnbG9iYWwgYW5kIGxvY2FsKSBuYW1lcyBmb3VuZCBpblxuICAgdGhlIGN1cnJlbnQgc2NvcGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYWxpYXMgW25hbWUgW2NvbW1hbmRdXVxuXG4gICBDcmVhdGUgYW4gYWxpYXMgY2FsbGVkICpuYW1lKiB0aGF0IGV4ZWN1dGVzICpjb21tYW5kKi4gIFRoZSBjb21tYW5kXG4gICBtdXN0ICpub3QqIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy4gIFJlcGxhY2VhYmxlIHBhcmFtZXRlcnMgY2FuIGJlXG4gICBpbmRpY2F0ZWQgYnkgYGAlMWBgLCBgYCUyYGAsIGFuZCBzbyBvbiwgd2hpbGUgYGAlKmBgIGlzIHJlcGxhY2VkIGJ5XG4gICBhbGwgdGhlIHBhcmFtZXRlcnMuIElmIG5vIGNvbW1hbmQgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGFsaWFzIGZvclxuICAgKm5hbWUqIGlzIHNob3duLiBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbGwgYWxpYXNlcyBhcmUgbGlzdGVkLlxuXG4gICBBbGlhc2VzIG1heSBiZSBuZXN0ZWQgYW5kIGNhbiBjb250YWluIGFueXRoaW5nIHRoYXQgY2FuIGJlIGxlZ2FsbHlcbiAgIHR5cGVkIGF0IHRoZSBwZGIgcHJvbXB0LiAgTm90ZSB0aGF0IGludGVybmFsIHBkYiBjb21tYW5kcyAqY2FuKiBiZVxuICAgb3ZlcnJpZGRlbiBieSBhbGlhc2VzLiAgU3VjaCBhIGNvbW1hbmQgaXMgdGhlbiBoaWRkZW4gdW50aWwgdGhlXG4gICBhbGlhcyBpcyByZW1vdmVkLiAgQWxpYXNpbmcgaXMgcmVjdXJzaXZlbHkgYXBwbGllZCB0byB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZTsgYWxsIG90aGVyIHdvcmRzIGluIHRoZSBsaW5lIGFyZSBsZWZ0XG4gICBhbG9uZS5cblxuICAgQXMgYW4gZXhhbXBsZSwgaGVyZSBhcmUgdHdvIHVzZWZ1bCBhbGlhc2VzIChlc3BlY2lhbGx5IHdoZW4gcGxhY2VkXG4gICBpbiB0aGUgYGAucGRicmNgYCBmaWxlKTpcblxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKVxuICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSlcbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGZcbiAgICAgIGFsaWFzIHBzIHBpIHNlbGZcblxudW5hbGlhcyBuYW1lXG5cbiAgIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGFsaWFzLlxuXG4hIHN0YXRlbWVudFxuXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGFcbiAgIGdsb2JhbCB2YXJpYWJsZSwgeW91IGNhbiBwcmVmaXggdGhlIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGFcbiAgIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gW2FyZ3MgLi4uXVxucmVzdGFydCBbYXJncyAuLi5dXG5cbiAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIFB5dGhvbiBwcm9ncmFtLiAgSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsXG4gICBpdCBpcyBzcGxpdCB3aXRoIGBgc2hsZXhgYCBhbmQgdGhlIHJlc3VsdCBpcyB1c2VkIGFzIHRoZSBuZXdcbiAgIGBgc3lzLmFyZ3ZgYC4gSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnNcbiAgIGFyZSBwcmVzZXJ2ZWQuIGBgcmVzdGFydGBgIGlzIGFuIGFsaWFzIGZvciBgYHJ1bmBgLlxuXG5xKHVpdClcblxuICAgUXVpdCBmcm9tIHRoZSBkZWJ1Z2dlci4gIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gV2hldGhlciBhIGZyYW1lIGlzIGNvbnNpZGVyZWQgdG8gb3JpZ2luYXRlIGluIGEgY2VydGFpbiBtb2R1bGUgaXNcbiAgICBkZXRlcm1pbmVkIGJ5IHRoZSBgYF9fbmFtZV9fYGAgaW4gdGhlIGZyYW1lIGdsb2JhbHMuXG4nLAogICdkZWwnOiAnXG5UaGUgYGBkZWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBkZWxfc3RtdCA6Oj0gImRlbCIgdGFyZ2V0X2xpc3RcblxuRGVsZXRpb24gaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSBhc3NpZ25tZW50IGlzXG5kZWZpbmVkLiBSYXRoZXIgdGhhbiBzcGVsbGluZyBpdCBvdXQgaW4gZnVsbCBkZXRhaWxzLCBoZXJlIGFyZSBzb21lXG5oaW50cy5cblxuRGVsZXRpb24gb2YgYSB0YXJnZXQgbGlzdCByZWN1cnNpdmVseSBkZWxldGVzIGVhY2ggdGFyZ2V0LCBmcm9tIGxlZnRcbnRvIHJpZ2h0LlxuXG5EZWxldGlvbiBvZiBhIG5hbWUgcmVtb3ZlcyB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgZnJvbSB0aGUgbG9jYWwgb3Jcbmdsb2JhbCBuYW1lc3BhY2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuYW1lIG9jY3VycyBpbiBhIGBgZ2xvYmFsYGBcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuYGBOYW1lRXJyb3JgYCBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuXG5cbkRlbGV0aW9uIG9mIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCBzdWJzY3JpcHRpb25zIGFuZCBzbGljaW5ncyBpcyBwYXNzZWRcbnRvIHRoZSBwcmltYXJ5IG9iamVjdCBpbnZvbHZlZDsgZGVsZXRpb24gb2YgYSBzbGljaW5nIGlzIGluIGdlbmVyYWxcbmVxdWl2YWxlbnQgdG8gYXNzaWdubWVudCBvZiBhbiBlbXB0eSBzbGljZSBvZiB0aGUgcmlnaHQgdHlwZSAoYnV0IGV2ZW5cbnRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2xpY2VkIG9iamVjdCkuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IFByZXZpb3VzbHkgaXQgd2FzIGlsbGVnYWwgdG8gZGVsZXRlIGEgbmFtZVxuZnJvbSB0aGUgbG9jYWwgbmFtZXNwYWNlIGlmIGl0IG9jY3VycyBhcyBhIGZyZWUgdmFyaWFibGUgaW4gYSBuZXN0ZWRcbmJsb2NrLlxuJywKICAnZGljdCc6ICdcbkRpY3Rpb25hcnkgZGlzcGxheXNcbioqKioqKioqKioqKioqKioqKipcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2Yga2V5L2RhdHVtIHBhaXJzXG5lbmNsb3NlZCBpbiBjdXJseSBicmFjZXM6XG5cbiAgIGRpY3RfZGlzcGxheSAgICAgICA6Oj0gInsiIFtrZXlfZGF0dW1fbGlzdCB8IGRpY3RfY29tcHJlaGVuc2lvbl0gIn0iXG4gICBrZXlfZGF0dW1fbGlzdCAgICAgOjo9IGtleV9kYXR1bSAoIiwiIGtleV9kYXR1bSkqIFsiLCJdXG4gICBrZXlfZGF0dW0gICAgICAgICAgOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb25cbiAgIGRpY3RfY29tcHJlaGVuc2lvbiA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvbiBjb21wX2ZvclxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSB5aWVsZHMgYSBuZXcgZGljdGlvbmFyeSBvYmplY3QuXG5cbklmIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIGtleS9kYXR1bSBwYWlycyBpcyBnaXZlbiwgdGhleSBhcmVcbmV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgdG8gZGVmaW5lIHRoZSBlbnRyaWVzIG9mIHRoZSBkaWN0aW9uYXJ5OlxuZWFjaCBrZXkgb2JqZWN0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUgZGljdGlvbmFyeSB0byBzdG9yZSB0aGVcbmNvcnJlc3BvbmRpbmcgZGF0dW0uICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHRoZSBzYW1lIGtleVxubXVsdGlwbGUgdGltZXMgaW4gdGhlIGtleS9kYXR1bSBsaXN0LCBhbmQgdGhlIGZpbmFsIGRpY3Rpb25hcnlcJ3MgdmFsdWVcbmZvciB0aGF0IGtleSB3aWxsIGJlIHRoZSBsYXN0IG9uZSBnaXZlbi5cblxuQSBkaWN0IGNvbXByZWhlbnNpb24sIGluIGNvbnRyYXN0IHRvIGxpc3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucyxcbm5lZWRzIHR3byBleHByZXNzaW9ucyBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSB1c3VhbFxuImZvciIgYW5kICJpZiIgY2xhdXNlcy4gV2hlbiB0aGUgY29tcHJlaGVuc2lvbiBpcyBydW4sIHRoZSByZXN1bHRpbmdcbmtleSBhbmQgdmFsdWUgZWxlbWVudHMgYXJlIGluc2VydGVkIGluIHRoZSBuZXcgZGljdGlvbmFyeSBpbiB0aGUgb3JkZXJcbnRoZXkgYXJlIHByb2R1Y2VkLlxuXG5SZXN0cmljdGlvbnMgb24gdGhlIHR5cGVzIG9mIHRoZSBrZXkgdmFsdWVzIGFyZSBsaXN0ZWQgZWFybGllciBpblxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Ki4gIChUbyBzdW1tYXJpemUsIHRoZSBrZXkgdHlwZVxuc2hvdWxkIGJlICpoYXNoYWJsZSosIHdoaWNoIGV4Y2x1ZGVzIGFsbCBtdXRhYmxlIG9iamVjdHMuKSAgQ2xhc2hlc1xuYmV0d2VlbiBkdXBsaWNhdGUga2V5cyBhcmUgbm90IGRldGVjdGVkOyB0aGUgbGFzdCBkYXR1bSAodGV4dHVhbGx5XG5yaWdodG1vc3QgaW4gdGhlIGRpc3BsYXkpIHN0b3JlZCBmb3IgYSBnaXZlbiBrZXkgdmFsdWUgcHJldmFpbHMuXG4nLAogICdkeW5hbWljLWZlYXR1cmVzJzogJ1xuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuSWYgdGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gYGBpbXBvcnQgKmBgIC0tLSBpcyB1c2VkIGluIGFcbmZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlXG52YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgYGBTeW50YXhFcnJvcmBgLlxuXG5UaGUgYGBldmFsKClgYCBhbmQgYGBleGVjKClgYCBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSBgYGV4ZWMoKWBgIGFuZCBgYGV2YWwoKWBgIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLApAQCAtMzQsOCArMzQsOCBAQAogICdleHBybGlzdHMnOiAnXG5FeHByZXNzaW9uIGxpc3RzXG4qKioqKioqKioqKioqKioqXG5cbiAgIGV4cHJlc3Npb25fbGlzdCA6Oj0gZXhwcmVzc2lvbiAoICIsIiBleHByZXNzaW9uICkqIFsiLCJdXG5cbkFuIGV4cHJlc3Npb24gbGlzdCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBjb21tYSB5aWVsZHMgYSB0dXBsZS4gIFRoZVxubGVuZ3RoIG9mIHRoZSB0dXBsZSBpcyB0aGUgbnVtYmVyIG9mIGV4cHJlc3Npb25zIGluIHRoZSBsaXN0LiAgVGhlXG5leHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodC5cblxuVGhlIHRyYWlsaW5nIGNvbW1hIGlzIHJlcXVpcmVkIG9ubHkgdG8gY3JlYXRlIGEgc2luZ2xlIHR1cGxlIChhLmsuYS4gYVxuKnNpbmdsZXRvbiopOyBpdCBpcyBvcHRpb25hbCBpbiBhbGwgb3RoZXIgY2FzZXMuICBBIHNpbmdsZSBleHByZXNzaW9uXG53aXRob3V0IGEgdHJhaWxpbmcgY29tbWEgZG9lc25cJ3QgY3JlYXRlIGEgdHVwbGUsIGJ1dCByYXRoZXIgeWllbGRzIHRoZVxudmFsdWUgb2YgdGhhdCBleHByZXNzaW9uLiAoVG8gY3JlYXRlIGFuIGVtcHR5IHR1cGxlLCB1c2UgYW4gZW1wdHkgcGFpclxub2YgcGFyZW50aGVzZXM6IGBgKClgYC4pXG4nLAogICdmbG9hdGluZyc6ICdcbkZsb2F0aW5nIHBvaW50IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5GbG9hdGluZyBwb2ludCBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbFxuZGVmaW5pdGlvbnM6XG5cbiAgIGZsb2F0bnVtYmVyICAgOjo9IHBvaW50ZmxvYXQgfCBleHBvbmVudGZsb2F0XG4gICBwb2ludGZsb2F0ICAgIDo6PSBbaW50cGFydF0gZnJhY3Rpb24gfCBpbnRwYXJ0ICIuIlxuICAgZXhwb25lbnRmbG9hdCA6Oj0gKGludHBhcnQgfCBwb2ludGZsb2F0KSBleHBvbmVudFxuICAgaW50cGFydCAgICAgICA6Oj0gZGlnaXQrXG4gICBmcmFjdGlvbiAgICAgIDo6PSAiLiIgZGlnaXQrXG4gICBleHBvbmVudCAgICAgIDo6PSAoImUiIHwgIkUiKSBbIisiIHwgIi0iXSBkaWdpdCtcblxuTm90ZSB0aGF0IHRoZSBpbnRlZ2VyIGFuZCBleHBvbmVudCBwYXJ0cyBhcmUgYWx3YXlzIGludGVycHJldGVkIHVzaW5nXG5yYWRpeCAxMC4gRm9yIGV4YW1wbGUsIGBgMDc3ZTAxMGBgIGlzIGxlZ2FsLCBhbmQgZGVub3RlcyB0aGUgc2FtZVxubnVtYmVyIGFzIGBgNzdlMTBgYC4gVGhlIGFsbG93ZWQgcmFuZ2Ugb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgaXNcbmltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gU29tZSBleGFtcGxlcyBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFsczpcblxuICAgMy4xNCAgICAxMC4gICAgLjAwMSAgICAxZTEwMCAgICAzLjE0ZS0xMCAgICAwZTBcblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlIGBgLTFgYFxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgYGAtYGAgYW5kIHRoZVxubGl0ZXJhbCBgYDFgYC5cbicsCiAgJ2Zvcic6ICdcblRoZSBgYGZvcmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYVxuc2VxdWVuY2UgKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG5gYGV4cHJlc3Npb25fbGlzdGBgLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgYGBTdG9wSXRlcmF0aW9uYGBcbmV4Y2VwdGlvbiksIHRoZSBzdWl0ZSBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCxcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHJhbmdlKClgYCByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yXG5pIDo9IGEgdG8gYiBkb2BgOyBlLmcuLCBgYGxpc3QocmFuZ2UoMykpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLFxuMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG4nLAotICdmb3JtYXRzdHJpbmdzJzogJ1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBhbmQgdGhlIGBgRm9ybWF0dGVyYGAgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mIGBgRm9ybWF0dGVyYGAsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuYGB7fWBgLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG5gYHt7YGAgYW5kIGBgfX1gYC5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIiB8ICJhIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgYGBcJyFcJ2BgLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaFxuaXMgcHJlY2VkZWQgYnkgYSBjb2xvbiBgYFwnOlwnYGAuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0XG5mb3IgdGhlIHJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgYVxubnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsXG5hcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZFxuYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlIDAsIDEsIDIsXG4uLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmQgdGhlXG5udW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cbkJlY2F1c2UgKmFyZ19uYW1lKiBpcyBub3QgcXVvdGUtZGVsaW1pdGVkLCBpdCBpcyBub3QgcG9zc2libGUgdG9cbnNwZWNpZnkgYXJiaXRyYXJ5IGRpY3Rpb25hcnkga2V5cyAoZS5nLiwgdGhlIHN0cmluZ3MgYGBcJzEwXCdgYCBvclxuYGBcJzotXVwnYGApIHdpdGhpbiBhIGZvcm1hdCBzdHJpbmcuIFRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieVxuYW55IG51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlXG5mb3JtIGBgXCcubmFtZVwnYGAgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nIGBgZ2V0YXR0cigpYGAsXG53aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgXCdbaW5kZXhdXCdgYCBkb2VzIGFuIGluZGV4IGxvb2t1cFxudXNpbmcgYGBfX2dldGl0ZW1fXygpYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyBgYFwne30ge31cJ2BgIGlzIGVxdWl2YWxlbnQgdG8gYGBcJ3swfSB7MX1cJ2BgLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGVcbmBgX19mb3JtYXRfXygpYGAgbWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzXG5pdCBpcyBkZXNpcmFibGUgdG8gZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZyxcbm92ZXJyaWRpbmcgaXRzIG93biBkZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZVxudG8gYSBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgYGBfX2Zvcm1hdF9fKClgYCwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nXG5sb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogYGBcJyFzXCdgYCB3aGljaCBjYWxsc1xuYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZSwgYGBcJyFyXCdgYCB3aGljaCBjYWxscyBgYHJlcHIoKWBgIGFuZCBgYFwnIWFcJ2BgXG53aGljaCBjYWxscyBgYGFzY2lpKClgYC5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluIGBgZm9ybWF0KClgYCBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKGBgIiJgYCkgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCBgYHN0cigpYGAgb24gdGhlIHZhbHVlLiBBIG5vbi1cbmVtcHR5IGZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhbnkgY2hhcmFjdGVyPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cbklmIGEgdmFsaWQgKmFsaWduKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IGNhbiBiZSBwcmVjZWVkZWQgYnkgYSAqZmlsbCpcbmNoYXJhY3RlciB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIGFuZCBkZWZhdWx0cyB0byBhIHNwYWNlIGlmXG5vbWl0dGVkLiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBgYHtgYCBhbmQgYGB9YGAgYXMgKmZpbGwqXG5jaGFyIHdoaWxlIHVzaW5nIHRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZDsgdGhpcyBsaW1pdGF0aW9uIGhvd2V2ZXJcbmRvZXNuXCd0IGFmZmVjdCB0aGUgYGBmb3JtYXQoKWBgIGZ1bmN0aW9uLlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCc8XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz5cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG51bWJlcnMpLiAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPVwnYGAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnXlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJytcJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnLVwnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBgYFwnI1wnYGAgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgYGBcJzBiXCdgYCwgYGBcJzBvXCdgYCwgb3JcbmBgXCcweFwnYGAgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yIGBgXCdnXCdgYCBhbmQgYGBcJ0dcJ2BgXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlIGBgXCcsXCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzXG5zZXBhcmF0b3IuIEZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGBcJ25cJ2BgIGludGVnZXJcbnByZXNlbnRhdGlvbiB0eXBlIGluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSBgYFwnLFwnYGAgb3B0aW9uIChzZWUgYWxzbyAqKlBFUFxuMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuUHJlY2VkaW5nIHRoZSAqd2lkdGgqIGZpZWxkIGJ5IGEgemVybyAoYGBcJzBcJ2BgKSBjaGFyYWN0ZXIgZW5hYmxlc1xuc2lnbi1hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYVxuKmZpbGwqIGNoYXJhY3RlciBvZiBgYFwnMFwnYGAgd2l0aCBhbiAqYWxpZ25tZW50KiB0eXBlIG9mIGBgXCc9XCdgYC5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoIGBgXCdmXCdgYCBhbmQgYGBcJ0ZcJ2BgLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsXG5wb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCBgYFwnZ1wnYGAgb3IgYGBcJ0dcJ2BgLlxuRm9yIG5vbi1udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW5cbm90aGVyIHdvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LlxuVGhlICpwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdzXCdgYCAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ3NcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdiXCdgYCAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnY1wnYGAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdkXCdgYCAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnb1wnYGAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ3hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnWFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdkXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdFxuYGBcJ25cJ2BgIGFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgYGBmbG9hdCgpYGAgaXMgdXNlZCB0byBjb252ZXJ0IHRoZVxuaW50ZWdlciB0byBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdlXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG5vdGF0aW9uIHVzaW5nIHRoZSBsZXR0ZXIgXCdlXCcgdG8gaW5kaWNhdGUgdGhlIGV4cG9uZW50LiAgICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyBgYFwnZVwnYGAgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYCwgYnV0IGNvbnZlcnRzIGBgbmFuYGAgdG8gICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgTkFOYGAgYW5kIGBgaW5mYGAgdG8gYGBJTkZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiBgYHAgPj0gMWBgLCB0aGlzICAgIHxcbiAgIHwgICAgICAgICAgIHwgcm91bmRzIHRoZSBudW1iZXIgdG8gYGBwYGAgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHMgdGhlIHJlc3VsdCBpbiBlaXRoZXIgZml4ZWQtcG9pbnQgZm9ybWF0IG9yIGluICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzY2llbnRpZmljIG5vdGF0aW9uLCBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gIFRoZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzZSBydWxlcyBhcmUgYXMgZm9sbG93czogc3VwcG9zZSB0aGF0IHRoZSByZXN1bHQgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAgd291bGQgaGF2ZSBleHBvbmVudCBgYGV4cGBgLiAgVGhlbiBpZiBgYC00IDw9IGV4cCAgfFxuICAgfCAgICAgICAgICAgfCA8IHBgYCwgdGhlIG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBcJ2ZcJ2BgIGFuZCBwcmVjaXNpb24gYGBwLTEtZXhwYGAuIE90aGVyd2lzZSwgdGhlIG51bWJlciAgIHxcbiAgIHwgICAgICAgICAgIHwgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYC4gSW4gYm90aCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSAgICB8XG4gICB8ICAgICAgICAgICB8IHJlbW92ZWQgZnJvbSB0aGUgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyAgICAgfFxuICAgfCAgICAgICAgICAgfCBhbHNvIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBkaWdpdHMgZm9sbG93aW5nICAgIHxcbiAgIHwgICAgICAgICAgIHwgaXQuICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB8XG4gICB8ICAgICAgICAgICB8IHplcm8sIGFuZCBuYW5zLCBhcmUgZm9ybWF0dGVkIGFzIGBgaW5mYGAsIGBgLWluZmBgLCBgYDBgYCwgfFxuICAgfCAgICAgICAgICAgfCBgYC0wYGAgYW5kIGBgbmFuYGAgcmVzcGVjdGl2ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgYGAwYGAgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50ICB8XG4gICB8ICAgICAgICAgICB8IHRvIGEgcHJlY2lzaW9uIG9mIGBgMWBgLiAgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyBgYFwnZ1wnYGAgZXhjZXB0IHN3aXRjaGVzIHRvIGBgXCdFXCdgYCB8XG4gICB8ICAgICAgICAgICB8IGlmIHRoZSBudW1iZXIgZ2V0cyB0b28gbGFyZ2UuIFRoZSByZXByZXNlbnRhdGlvbnMgb2YgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBpbmZpbml0eSBhbmQgTmFOIGFyZSB1cHBlcmNhc2VkLCB0b28uICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdnXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJyVcJ2BgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgIHwgICAgICAgICAgIHwgZml4ZWQgKGBgXCdmXCdgYCkgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gYGBcJ2dcJ2BgLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBkZWNpbWFsIHBvaW50IGFuZCBhIGRlZmF1bHQgcHJlY2lzaW9uIG9mIDEyLiBUaGlzIGlzICAgfFxuICAgfCAgICAgICAgICAgfCBpbnRlbmRlZCB0byBtYXRjaCBgYHN0cigpYGAsIGV4Y2VwdCB5b3UgY2FuIGFkZCB0aGUgb3RoZXIgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCBgYCVgYC1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZFxuYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBge31gYCBhbmQgd2l0aCBgYDpgYCB1c2VkXG5pbnN0ZWFkIG9mIGBgJWBgLiBGb3IgZXhhbXBsZSwgYGBcJyUwMy4yZlwnYGAgY2FuIGJlIHRyYW5zbGF0ZWQgdG9cbmBgXCd7OjAzLjJmfVwnYGAuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwne30sIHt9LCB7fVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKSAgIyAzLjErIG9ubHlcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50OlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyBgYCVzYGAgYW5kIGBgJXJgYDpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyBgYCV4YGAgYW5kIGBgJW9gYCBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50XG5iYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9XCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4Ni4zNiVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOntmaWxsfXthbGlnbn0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTogI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRVxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAotICdmdW5jdGlvbic6ICdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uXG5pcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW5cbnRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpc1xudXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYVxuZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OlxuaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYVxubGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgbm90XG53aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZSBgYE5vbmVgYCBhcyB0aGVcbmRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiYGAqYGAiIG9yICJgYCppZGVudGlmaWVyYGAiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICJgYDogZXhwcmVzc2lvbmBgIlxuZm9sbG93aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvblxuZXZlbiB0aG9zZSBvZiB0aGUgZm9ybSBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYC4gIEZ1bmN0aW9uc1xubWF5IGhhdmUgInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiYGAtPiBleHByZXNzaW9uYGAiIGFmdGVyIHRoZVxucGFyYW1ldGVyIGxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uXG5hbmQgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLlxuQW5ub3RhdGlvbnMgbWF5IGJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluXG50aGUgc291cmNlIGNvZGUuICBUaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZVxuc2VtYW50aWNzIG9mIGEgZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhc1xudmFsdWVzIG9mIGEgZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZVxuYGBfX2Fubm90YXRpb25zX19gYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG4gICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAorICdmb3JtYXRzdHJpbmdzJzogJ1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBhbmQgdGhlIGBgRm9ybWF0dGVyYGAgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mIGBgRm9ybWF0dGVyYGAsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuYGB7fWBgLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG5gYHt7YGAgYW5kIGBgfX1gYC5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIiB8ICJhIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgYGBcJyFcJ2BgLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaFxuaXMgcHJlY2VkZWQgYnkgYSBjb2xvbiBgYFwnOlwnYGAuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0XG5mb3IgdGhlIHJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgYVxubnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsXG5hcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZFxuYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlIDAsIDEsIDIsXG4uLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmQgdGhlXG5udW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cbkJlY2F1c2UgKmFyZ19uYW1lKiBpcyBub3QgcXVvdGUtZGVsaW1pdGVkLCBpdCBpcyBub3QgcG9zc2libGUgdG9cbnNwZWNpZnkgYXJiaXRyYXJ5IGRpY3Rpb25hcnkga2V5cyAoZS5nLiwgdGhlIHN0cmluZ3MgYGBcJzEwXCdgYCBvclxuYGBcJzotXVwnYGApIHdpdGhpbiBhIGZvcm1hdCBzdHJpbmcuIFRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieVxuYW55IG51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlXG5mb3JtIGBgXCcubmFtZVwnYGAgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nIGBgZ2V0YXR0cigpYGAsXG53aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgXCdbaW5kZXhdXCdgYCBkb2VzIGFuIGluZGV4IGxvb2t1cFxudXNpbmcgYGBfX2dldGl0ZW1fXygpYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyBgYFwne30ge31cJ2BgIGlzIGVxdWl2YWxlbnQgdG8gYGBcJ3swfSB7MX1cJ2BgLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGVcbmBgX19mb3JtYXRfXygpYGAgbWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzXG5pdCBpcyBkZXNpcmFibGUgdG8gZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZyxcbm92ZXJyaWRpbmcgaXRzIG93biBkZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZVxudG8gYSBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgYGBfX2Zvcm1hdF9fKClgYCwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nXG5sb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogYGBcJyFzXCdgYCB3aGljaCBjYWxsc1xuYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZSwgYGBcJyFyXCdgYCB3aGljaCBjYWxscyBgYHJlcHIoKWBgIGFuZCBgYFwnIWFcJ2BgXG53aGljaCBjYWxscyBgYGFzY2lpKClgYC5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluIGBgZm9ybWF0KClgYCBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKGBgIiJgYCkgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCBgYHN0cigpYGAgb24gdGhlIHZhbHVlLiBBIG5vbi1cbmVtcHR5IGZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhbnkgY2hhcmFjdGVyPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cbklmIGEgdmFsaWQgKmFsaWduKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IGNhbiBiZSBwcmVjZWRlZCBieSBhICpmaWxsKlxuY2hhcmFjdGVyIHRoYXQgY2FuIGJlIGFueSBjaGFyYWN0ZXIgYW5kIGRlZmF1bHRzIHRvIGEgc3BhY2UgaWZcbm9taXR0ZWQuIE5vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIGBge2BgIGFuZCBgYH1gYCBhcyAqZmlsbCpcbmNoYXIgd2hpbGUgdXNpbmcgdGhlIGBgc3RyLmZvcm1hdCgpYGAgbWV0aG9kOyB0aGlzIGxpbWl0YXRpb24gaG93ZXZlclxuZG9lc25cJ3QgYWZmZWN0IHRoZSBgYGZvcm1hdCgpYGAgZnVuY3Rpb24uXG5cblRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGFsaWdubWVudCBvcHRpb25zIGlzIGFzIGZvbGxvd3M6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJzxcJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGxlZnQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3Qgb2JqZWN0cykuICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgcmlnaHQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbnVtYmVycykuICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCc9XCdgYCAgIHwgRm9yY2VzIHRoZSBwYWRkaW5nIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgc2lnbiAoaWYgYW55KSAgICB8XG4gICB8ICAgICAgICAgICB8IGJ1dCBiZWZvcmUgdGhlIGRpZ2l0cy4gIFRoaXMgaXMgdXNlZCBmb3IgcHJpbnRpbmcgZmllbGRzICAgfFxuICAgfCAgICAgICAgICAgfCBpbiB0aGUgZm9ybSBcJyswMDAwMDAxMjBcJy4gVGhpcyBhbGlnbm1lbnQgb3B0aW9uIGlzIG9ubHkgICAgfFxuICAgfCAgICAgICAgICAgfCB2YWxpZCBmb3IgbnVtZXJpYyB0eXBlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdeXCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZSB0aGF0IHVubGVzcyBhIG1pbmltdW0gZmllbGQgd2lkdGggaXMgZGVmaW5lZCwgdGhlIGZpZWxkIHdpZHRoXG53aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBkYXRhIHRvIGZpbGwgaXQsIHNvIHRoYXQgdGhlXG5hbGlnbm1lbnQgb3B0aW9uIGhhcyBubyBtZWFuaW5nIGluIHRoaXMgY2FzZS5cblxuVGhlICpzaWduKiBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgbnVtYmVyIHR5cGVzLCBhbmQgY2FuIGJlIG9uZSBvZlxudGhlIGZvbGxvd2luZzpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnK1wnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBmb3IgYm90aCBwb3NpdGl2ZSBhcyAgfFxuICAgfCAgICAgICAgICAgfCB3ZWxsIGFzIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCctXCdgYCAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIG5lZ2F0aXZlICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMgKHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLiAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgc3BhY2UgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBsZWFkaW5nIHNwYWNlIHNob3VsZCBiZSB1c2VkIG9uIHBvc2l0aXZlICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMsIGFuZCBhIG1pbnVzIHNpZ24gb24gbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGBgXCcjXCdgYCBvcHRpb24gY2F1c2VzIHRoZSAiYWx0ZXJuYXRlIGZvcm0iIHRvIGJlIHVzZWQgZm9yIHRoZVxuY29udmVyc2lvbi4gIFRoZSBhbHRlcm5hdGUgZm9ybSBpcyBkZWZpbmVkIGRpZmZlcmVudGx5IGZvciBkaWZmZXJlbnRcbnR5cGVzLiAgVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgaW50ZWdlciwgZmxvYXQsIGNvbXBsZXggYW5kXG5EZWNpbWFsIHR5cGVzLiBGb3IgaW50ZWdlcnMsIHdoZW4gYmluYXJ5LCBvY3RhbCwgb3IgaGV4YWRlY2ltYWwgb3V0cHV0XG5pcyB1c2VkLCB0aGlzIG9wdGlvbiBhZGRzIHRoZSBwcmVmaXggcmVzcGVjdGl2ZSBgYFwnMGJcJ2BgLCBgYFwnMG9cJ2BgLCBvclxuYGBcJzB4XCdgYCB0byB0aGUgb3V0cHV0IHZhbHVlLiBGb3IgZmxvYXRzLCBjb21wbGV4IGFuZCBEZWNpbWFsIHRoZVxuYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24gdG8gYWx3YXlzIGNvbnRhaW4gYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIsIGV2ZW4gaWYgbm8gZGlnaXRzIGZvbGxvdyBpdC4gTm9ybWFsbHksIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHJlc3VsdCBvZiB0aGVzZSBjb252ZXJzaW9uc1xub25seSBpZiBhIGRpZ2l0IGZvbGxvd3MgaXQuIEluIGFkZGl0aW9uLCBmb3IgYGBcJ2dcJ2BgIGFuZCBgYFwnR1wnYGBcbmNvbnZlcnNpb25zLCB0cmFpbGluZyB6ZXJvcyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUgcmVzdWx0LlxuXG5UaGUgYGBcJyxcJ2BgIG9wdGlvbiBzaWduYWxzIHRoZSB1c2Ugb2YgYSBjb21tYSBmb3IgYSB0aG91c2FuZHNcbnNlcGFyYXRvci4gRm9yIGEgbG9jYWxlIGF3YXJlIHNlcGFyYXRvciwgdXNlIHRoZSBgYFwnblwnYGAgaW50ZWdlclxucHJlc2VudGF0aW9uIHR5cGUgaW5zdGVhZC5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogQWRkZWQgdGhlIGBgXCcsXCdgYCBvcHRpb24gKHNlZSBhbHNvICoqUEVQXG4zNzgqKikuXG5cbip3aWR0aCogaXMgYSBkZWNpbWFsIGludGVnZXIgZGVmaW5pbmcgdGhlIG1pbmltdW0gZmllbGQgd2lkdGguICBJZiBub3RcbnNwZWNpZmllZCwgdGhlbiB0aGUgZmllbGQgd2lkdGggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50LlxuXG5QcmVjZWRpbmcgdGhlICp3aWR0aCogZmllbGQgYnkgYSB6ZXJvIChgYFwnMFwnYGApIGNoYXJhY3RlciBlbmFibGVzXG5zaWduLWF3YXJlIHplcm8tcGFkZGluZyBmb3IgbnVtZXJpYyB0eXBlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhXG4qZmlsbCogY2hhcmFjdGVyIG9mIGBgXCcwXCdgYCB3aXRoIGFuICphbGlnbm1lbnQqIHR5cGUgb2YgYGBcJz1cJ2BgLlxuXG5UaGUgKnByZWNpc2lvbiogaXMgYSBkZWNpbWFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBtYW55IGRpZ2l0cyBzaG91bGRcbmJlIGRpc3BsYXllZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZVxuZm9ybWF0dGVkIHdpdGggYGBcJ2ZcJ2BgIGFuZCBgYFwnRlwnYGAsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWxcbnBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoIGBgXCdnXCdgYCBvciBgYFwnR1wnYGAuXG5Gb3Igbm9uLW51bWJlciB0eXBlcyB0aGUgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIGZpZWxkIHNpemUgLSBpblxub3RoZXIgd29yZHMsIGhvdyBtYW55IGNoYXJhY3RlcnMgd2lsbCBiZSB1c2VkIGZyb20gdGhlIGZpZWxkIGNvbnRlbnQuXG5UaGUgKnByZWNpc2lvbiogaXMgbm90IGFsbG93ZWQgZm9yIGludGVnZXIgdmFsdWVzLlxuXG5GaW5hbGx5LCB0aGUgKnR5cGUqIGRldGVybWluZXMgaG93IHRoZSBkYXRhIHNob3VsZCBiZSBwcmVzZW50ZWQuXG5cblRoZSBhdmFpbGFibGUgc3RyaW5nIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ3NcJ2BgICAgfCBTdHJpbmcgZm9ybWF0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIHN0cmluZ3MgYW5kICAgIHxcbiAgIHwgICAgICAgICAgIHwgbWF5IGJlIG9taXR0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnc1wnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGF2YWlsYWJsZSBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2JcJ2BgICAgfCBCaW5hcnkgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAyLiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdjXCdgYCAgIHwgQ2hhcmFjdGVyLiBDb252ZXJ0cyB0aGUgaW50ZWdlciB0byB0aGUgY29ycmVzcG9uZGluZyAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHVuaWNvZGUgY2hhcmFjdGVyIGJlZm9yZSBwcmludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2RcJ2BgICAgfCBEZWNpbWFsIEludGVnZXIuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDEwLiAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdvXCdgYCAgIHwgT2N0YWwgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSA4LiAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwneFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyBsb3dlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdYXCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIHVwcGVyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ25cJ2BgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLCBleGNlcHQgdGhhdCBpdCB1c2VzICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnZFwnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHByZXNlbnRhdGlvbiB0eXBlcywgaW50ZWdlcnMgY2FuIGJlIGZvcm1hdHRlZFxud2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgcHJlc2VudGF0aW9uIHR5cGVzIGxpc3RlZCBiZWxvdyAoZXhjZXB0XG5gYFwnblwnYGAgYW5kIE5vbmUpLiBXaGVuIGRvaW5nIHNvLCBgYGZsb2F0KClgYCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlXG5pbnRlZ2VyIHRvIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbm90YXRpb24gdXNpbmcgdGhlIGxldHRlciBcJ2VcJyB0byBpbmRpY2F0ZSB0aGUgZXhwb25lbnQuICAgIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRVwnYGAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBTYW1lIGFzIGBgXCdlXCdgYCBleGNlcHQgaXQgdXNlcyBhbiB1cHBlciB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgXCdFXCcgYXMgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZlwnYGAgICB8IEZpeGVkIHBvaW50LiBEaXNwbGF5cyB0aGUgbnVtYmVyIGFzIGEgZml4ZWQtcG9pbnQgbnVtYmVyLiAgfFxuICAgfCAgICAgICAgICAgfCBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgYGA2YGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdGXCdgYCAgIHwgRml4ZWQgcG9pbnQuIFNhbWUgYXMgYGBcJ2ZcJ2BgLCBidXQgY29udmVydHMgYGBuYW5gYCB0byAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBOQU5gYCBhbmQgYGBpbmZgYCB0byBgYElORmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZ1wnYGAgICB8IEdlbmVyYWwgZm9ybWF0LiAgRm9yIGEgZ2l2ZW4gcHJlY2lzaW9uIGBgcCA+PSAxYGAsIHRoaXMgICAgfFxuICAgfCAgICAgICAgICAgfCByb3VuZHMgdGhlIG51bWJlciB0byBgYHBgYCBzaWduaWZpY2FudCBkaWdpdHMgYW5kIHRoZW4gICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0cyB0aGUgcmVzdWx0IGluIGVpdGhlciBmaXhlZC1wb2ludCBmb3JtYXQgb3IgaW4gICAgICB8XG4gICB8ICAgICAgICAgICB8IHNjaWVudGlmaWMgbm90YXRpb24sIGRlcGVuZGluZyBvbiBpdHMgbWFnbml0dWRlLiAgVGhlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNlIHJ1bGVzIGFyZSBhcyBmb2xsb3dzOiBzdXBwb3NlIHRoYXQgdGhlIHJlc3VsdCAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYCB3b3VsZCBoYXZlIGV4cG9uZW50IGBgZXhwYGAuICBUaGVuIGlmIGBgLTQgPD0gZXhwICB8XG4gICB8ICAgICAgICAgICB8IDwgcGBgLCB0aGUgbnVtYmVyIGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYFwnZlwnYGAgYW5kIHByZWNpc2lvbiBgYHAtMS1leHBgYC4gT3RoZXJ3aXNlLCB0aGUgbnVtYmVyICAgfFxuICAgfCAgICAgICAgICAgfCBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgLiBJbiBib3RoIGNhc2VzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MgYXJlICAgIHxcbiAgIHwgICAgICAgICAgIHwgcmVtb3ZlZCBmcm9tIHRoZSBzaWduaWZpY2FuZCwgYW5kIHRoZSBkZWNpbWFsIHBvaW50IGlzICAgICB8XG4gICB8ICAgICAgICAgICB8IGFsc28gcmVtb3ZlZCBpZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGRpZ2l0cyBmb2xsb3dpbmcgICAgfFxuICAgfCAgICAgICAgICAgfCBpdC4gIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBpbmZpbml0eSwgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHxcbiAgIHwgICAgICAgICAgIHwgemVybywgYW5kIG5hbnMsIGFyZSBmb3JtYXR0ZWQgYXMgYGBpbmZgYCwgYGAtaW5mYGAsIGBgMGBgLCB8XG4gICB8ICAgICAgICAgICB8IGBgLTBgYCBhbmQgYGBuYW5gYCByZXNwZWN0aXZlbHksIHJlZ2FyZGxlc3Mgb2YgdGhlICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNpb24uICBBIHByZWNpc2lvbiBvZiBgYDBgYCBpcyB0cmVhdGVkIGFzIGVxdWl2YWxlbnQgIHxcbiAgIHwgICAgICAgICAgIHwgdG8gYSBwcmVjaXNpb24gb2YgYGAxYGAuICBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgYGA2YGAuICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnR1wnYGAgICB8IEdlbmVyYWwgZm9ybWF0LiBTYW1lIGFzIGBgXCdnXCdgYCBleGNlcHQgc3dpdGNoZXMgdG8gYGBcJ0VcJ2BgIHxcbiAgIHwgICAgICAgICAgIHwgaWYgdGhlIG51bWJlciBnZXRzIHRvbyBsYXJnZS4gVGhlIHJlcHJlc2VudGF0aW9ucyBvZiAgICAgICB8XG4gICB8ICAgICAgICAgICB8IGluZmluaXR5IGFuZCBOYU4gYXJlIHVwcGVyY2FzZWQsIHRvby4gICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ25cJ2BgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBcJ2dcJ2BgLCBleGNlcHQgdGhhdCBpdCB1c2VzICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnJVwnYGAgICB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzIGluICAgfFxuICAgfCAgICAgICAgICAgfCBmaXhlZCAoYGBcJ2ZcJ2BgKSBmb3JtYXQsIGZvbGxvd2VkIGJ5IGEgcGVyY2VudCBzaWduLiAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgU2ltaWxhciB0byBgYFwnZ1wnYGAsIGV4Y2VwdCB3aXRoIGF0IGxlYXN0IG9uZSBkaWdpdCBwYXN0ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGRlY2ltYWwgcG9pbnQgYW5kIGEgZGVmYXVsdCBwcmVjaXNpb24gb2YgMTIuIFRoaXMgaXMgICB8XG4gICB8ICAgICAgICAgICB8IGludGVuZGVkIHRvIG1hdGNoIGBgc3RyKClgYCwgZXhjZXB0IHlvdSBjYW4gYWRkIHRoZSBvdGhlciAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXQgbW9kaWZpZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblxuRm9ybWF0IGV4YW1wbGVzXG49PT09PT09PT09PT09PT1cblxuVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGVzIG9mIHRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbmQgY29tcGFyaXNvblxud2l0aCB0aGUgb2xkIGBgJWBgLWZvcm1hdHRpbmcuXG5cbkluIG1vc3Qgb2YgdGhlIGNhc2VzIHRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGUgb2xkXG5gYCVgYC1mb3JtYXR0aW5nLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYGB7fWBgIGFuZCB3aXRoIGBgOmBgIHVzZWRcbmluc3RlYWQgb2YgYGAlYGAuIEZvciBleGFtcGxlLCBgYFwnJTAzLjJmXCdgYCBjYW4gYmUgdHJhbnNsYXRlZCB0b1xuYGBcJ3s6MDMuMmZ9XCdgYC5cblxuVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd25cbmluIHRoZSBmb2xsb3cgZXhhbXBsZXMuXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgcG9zaXRpb246XG5cbiAgID4+PiBcJ3swfSwgezF9LCB7Mn1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7fSwge30sIHt9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpICAjIDMuMSsgb25seVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KCpcJ2FiY1wnKSAgICAgICMgdW5wYWNraW5nIGFyZ3VtZW50IHNlcXVlbmNlXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezB9ezF9ezB9XCcuZm9ybWF0KFwnYWJyYVwnLCBcJ2NhZFwnKSAgICMgYXJndW1lbnRzXCcgaW5kaWNlcyBjYW4gYmUgcmVwZWF0ZWRcbiAgIFwnYWJyYWNhZGFicmFcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IG5hbWU6XG5cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdChsYXRpdHVkZT1cJzM3LjI0TlwnLCBsb25naXR1ZGU9XCctMTE1LjgxV1wnKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG4gICA+Pj4gY29vcmQgPSB7XCdsYXRpdHVkZVwnOiBcJzM3LjI0TlwnLCBcJ2xvbmdpdHVkZVwnOiBcJy0xMTUuODFXXCd9XG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQoKipjb29yZClcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgYXR0cmlidXRlczpcblxuICAgPj4+IGMgPSAzLTVqXG4gICA+Pj4gKFwnVGhlIGNvbXBsZXggbnVtYmVyIHswfSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IHswLnJlYWx9IFwnXG4gICAuLi4gIFwnYW5kIHRoZSBpbWFnaW5hcnkgcGFydCB7MC5pbWFnfS5cJykuZm9ybWF0KGMpXG4gICBcJ1RoZSBjb21wbGV4IG51bWJlciAoMy01aikgaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCAzLjAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCAtNS4wLlwnXG4gICA+Pj4gY2xhc3MgUG9pbnQ6XG4gICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KTpcbiAgIC4uLiAgICAgICAgIHNlbGYueCwgc2VsZi55ID0geCwgeVxuICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ1BvaW50KHtzZWxmLnh9LCB7c2VsZi55fSlcJy5mb3JtYXQoc2VsZj1zZWxmKVxuICAgLi4uXG4gICA+Pj4gc3RyKFBvaW50KDQsIDIpKVxuICAgXCdQb2ludCg0LCAyKVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBpdGVtczpcblxuICAgPj4+IGNvb3JkID0gKDMsIDUpXG4gICA+Pj4gXCdYOiB7MFswXX07ICBZOiB7MFsxXX1cJy5mb3JtYXQoY29vcmQpXG4gICBcJ1g6IDM7ICBZOiA1XCdcblxuUmVwbGFjaW5nIGBgJXNgYCBhbmQgYGAlcmBgOlxuXG4gICA+Pj4gInJlcHIoKSBzaG93cyBxdW90ZXM6IHshcn07IHN0cigpIGRvZXNuXCd0OiB7IXN9Ii5mb3JtYXQoXCd0ZXN0MVwnLCBcJ3Rlc3QyXCcpXG4gICAicmVwcigpIHNob3dzIHF1b3RlczogXCd0ZXN0MVwnOyBzdHIoKSBkb2VzblwndDogdGVzdDIiXG5cbkFsaWduaW5nIHRoZSB0ZXh0IGFuZCBzcGVjaWZ5aW5nIGEgd2lkdGg6XG5cbiAgID4+PiBcJ3s6PDMwfVwnLmZvcm1hdChcJ2xlZnQgYWxpZ25lZFwnKVxuICAgXCdsZWZ0IGFsaWduZWQgICAgICAgICAgICAgICAgICBcJ1xuICAgPj4+IFwnezo+MzB9XCcuZm9ybWF0KFwncmlnaHQgYWxpZ25lZFwnKVxuICAgXCcgICAgICAgICAgICAgICAgIHJpZ2h0IGFsaWduZWRcJ1xuICAgPj4+IFwnezpeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJylcbiAgIFwnICAgICAgICAgICBjZW50ZXJlZCAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6Kl4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKSAgIyB1c2UgXCcqXCcgYXMgYSBmaWxsIGNoYXJcbiAgIFwnKioqKioqKioqKipjZW50ZXJlZCoqKioqKioqKioqXCdcblxuUmVwbGFjaW5nIGBgJStmYGAsIGBgJS1mYGAsIGFuZCBgYCUgZmBgIGFuZCBzcGVjaWZ5aW5nIGEgc2lnbjpcblxuICAgPj4+IFwnezorZn07IHs6K2Z9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGl0IGFsd2F5c1xuICAgXCcrMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG4gICA+Pj4gXCd7OiBmfTsgezogZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgYSBzcGFjZSBmb3IgcG9zaXRpdmUgbnVtYmVyc1xuICAgXCcgMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG4gICA+Pj4gXCd7Oi1mfTsgezotZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgb25seSB0aGUgbWludXMgLS0gc2FtZSBhcyBcJ3s6Zn07IHs6Zn1cJ1xuICAgXCczLjE0MDAwMDsgLTMuMTQwMDAwXCdcblxuUmVwbGFjaW5nIGBgJXhgYCBhbmQgYGAlb2BgIGFuZCBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBkaWZmZXJlbnRcbmJhc2VzOlxuXG4gICA+Pj4gIyBmb3JtYXQgYWxzbyBzdXBwb3J0cyBiaW5hcnkgbnVtYmVyc1xuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDp4fTsgIG9jdDogezA6b307ICBiaW46IHswOmJ9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDJhOyAgb2N0OiA1MjsgIGJpbjogMTAxMDEwXCdcbiAgID4+PiAjIHdpdGggMHgsIDBvLCBvciAwYiBhcyBwcmVmaXg6XG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOiN4fTsgIG9jdDogezA6I299OyAgYmluOiB7MDojYn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMHgyYTsgIG9jdDogMG81MjsgIGJpbjogMGIxMDEwMTBcJ1xuXG5Vc2luZyB0aGUgY29tbWEgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yOlxuXG4gICA+Pj4gXCd7Oix9XCcuZm9ybWF0KDEyMzQ1Njc4OTApXG4gICBcJzEsMjM0LDU2Nyw4OTBcJ1xuXG5FeHByZXNzaW5nIGEgcGVyY2VudGFnZTpcblxuICAgPj4+IHBvaW50cyA9IDE5XG4gICA+Pj4gdG90YWwgPSAyMlxuICAgPj4+IFwnQ29ycmVjdCBhbnN3ZXJzOiB7Oi4yJX1cJy5mb3JtYXQocG9pbnRzL3RvdGFsKVxuICAgXCdDb3JyZWN0IGFuc3dlcnM6IDg2LjM2JVwnXG5cblVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzpcblxuICAgPj4+IGltcG9ydCBkYXRldGltZVxuICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KVxuICAgPj4+IFwnezolWS0lbS0lZCAlSDolTTolU31cJy5mb3JtYXQoZClcbiAgIFwnMjAxMC0wNy0wNCAxMjoxNTo1OFwnXG5cbk5lc3RpbmcgYXJndW1lbnRzIGFuZCBtb3JlIGNvbXBsZXggZXhhbXBsZXM6XG5cbiAgID4+PiBmb3IgYWxpZ24sIHRleHQgaW4gemlwKFwnPF4+XCcsIFtcJ2xlZnRcJywgXCdjZW50ZXJcJywgXCdyaWdodFwnXSk6XG4gICAuLi4gICAgIFwnezA6e2ZpbGx9e2FsaWdufTE2fVwnLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbilcbiAgIC4uLlxuICAgXCdsZWZ0PDw8PDw8PDw8PDw8XCdcbiAgIFwnXl5eXl5jZW50ZXJeXl5eXlwnXG4gICBcJz4+Pj4+Pj4+Pj4+cmlnaHRcJ1xuICAgPj4+XG4gICA+Pj4gb2N0ZXRzID0gWzE5MiwgMTY4LCAwLCAxXVxuICAgPj4+IFwnezowMlh9ezowMlh9ezowMlh9ezowMlh9XCcuZm9ybWF0KCpvY3RldHMpXG4gICBcJ0MwQTgwMDAxXCdcbiAgID4+PiBpbnQoXywgMTYpXG4gICAzMjMyMjM1NTIxXG4gICA+Pj5cbiAgID4+PiB3aWR0aCA9IDVcbiAgID4+PiBmb3IgbnVtIGluIHJhbmdlKDUsMTIpOiAjZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFXG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQoXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLCBlbmQ9XCcgXCcpXG4gICAuLi4gICAgIHByaW50KClcbiAgIC4uLlxuICAgICAgIDUgICAgIDUgICAgIDUgICAxMDFcbiAgICAgICA2ICAgICA2ICAgICA2ICAgMTEwXG4gICAgICAgNyAgICAgNyAgICAgNyAgIDExMVxuICAgICAgIDggICAgIDggICAgMTAgIDEwMDBcbiAgICAgICA5ICAgICA5ICAgIDExICAxMDAxXG4gICAgICAxMCAgICAgQSAgICAxMiAgMTAxMFxuICAgICAgMTEgICAgIEIgICAgMTMgIDEwMTFcbicsCisgJ2Z1bmN0aW9uJzogJ1xuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS1cbnRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB3aGVuIHRoZVxuZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXNcbmV2YWx1YXRlZCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLVxuY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnRcbnRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYVxubGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5XG5hcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuXG5UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2VcbmBgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGVcbmZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICJgYCpgYCIgb3IgImBgKmlkZW50aWZpZXJgYCIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gImBgOiBleHByZXNzaW9uYGAiXG5mb2xsb3dpbmcgdGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uXG5ldmVuIHRob3NlIG9mIHRoZSBmb3JtIGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgLiAgRnVuY3Rpb25zXG5tYXkgaGF2ZSAicmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICJgYC0+IGV4cHJlc3Npb25gYCIgYWZ0ZXIgdGhlXG5wYXJhbWV0ZXIgbGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb25cbmFuZCBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuXG5Bbm5vdGF0aW9ucyBtYXkgYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW5cbnRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlXG5zZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzXG52YWx1ZXMgb2YgYSBkaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlXG5gYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgImBgZGVmYGAiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcbiAgICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cbicsCiAgJ2dsb2JhbCc6ICdcblRoZSBgYGdsb2JhbGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGdsb2JhbF9zdG10IDo6PSAiZ2xvYmFsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSBgYGdsb2JhbGBgIHN0YXRlbWVudCBpcyBhIGRlY2xhcmF0aW9uIHdoaWNoIGhvbGRzIGZvciB0aGUgZW50aXJlXG5jdXJyZW50IGNvZGUgYmxvY2suICBJdCBtZWFucyB0aGF0IHRoZSBsaXN0ZWQgaWRlbnRpZmllcnMgYXJlIHRvIGJlXG5pbnRlcnByZXRlZCBhcyBnbG9iYWxzLiAgSXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byBhc3NpZ24gdG8gYSBnbG9iYWxcbnZhcmlhYmxlIHdpdGhvdXQgYGBnbG9iYWxgYCwgYWx0aG91Z2ggZnJlZSB2YXJpYWJsZXMgbWF5IHJlZmVyIHRvXG5nbG9iYWxzIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgZ2xvYmFsLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSBgYGdsb2JhbGBgIHN0YXRlbWVudCBtdXN0IG5vdCBiZSB1c2VkIGluIHRoZSBzYW1lXG5jb2RlIGJsb2NrIHRleHR1YWxseSBwcmVjZWRpbmcgdGhhdCBgYGdsb2JhbGBgIHN0YXRlbWVudC5cblxuTmFtZXMgbGlzdGVkIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgZGVmaW5lZCBhcyBmb3JtYWxcbnBhcmFtZXRlcnMgb3IgaW4gYSBgYGZvcmBgIGxvb3AgY29udHJvbCB0YXJnZXQsIGBgY2xhc3NgYCBkZWZpbml0aW9uLFxuZnVuY3Rpb24gZGVmaW5pdGlvbiwgb3IgYGBpbXBvcnRgYCBzdGF0ZW1lbnQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RcbmVuZm9yY2UgdGhlIGxhdHRlciB0d28gcmVzdHJpY3Rpb25zLCBidXQgcHJvZ3JhbXMgc2hvdWxkIG5vdCBhYnVzZVxudGhpcyBmcmVlZG9tLCBhcyBmdXR1cmUgaW1wbGVtZW50YXRpb25zIG1heSBlbmZvcmNlIHRoZW0gb3Igc2lsZW50bHlcbmNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogdGhlIGBgZ2xvYmFsYGAgaXMgYSBkaXJlY3RpdmUgdG8gdGhlIHBhcnNlci5cbkl0IGFwcGxpZXMgb25seSB0byBjb2RlIHBhcnNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBgYGdsb2JhbGBgXG5zdGF0ZW1lbnQuIEluIHBhcnRpY3VsYXIsIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgY29udGFpbmVkIGluIGEgc3RyaW5nXG5vciBjb2RlIG9iamVjdCBzdXBwbGllZCB0byB0aGUgYnVpbHQtaW4gYGBleGVjKClgYCBmdW5jdGlvbiBkb2VzIG5vdFxuYWZmZWN0IHRoZSBjb2RlIGJsb2NrICpjb250YWluaW5nKiB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIGNvZGVcbmNvbnRhaW5lZCBpbiBzdWNoIGEgc3RyaW5nIGlzIHVuYWZmZWN0ZWQgYnkgYGBnbG9iYWxgYCBzdGF0ZW1lbnRzIGluXG50aGUgY29kZSBjb250YWluaW5nIHRoZSBmdW5jdGlvbiBjYWxsLiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGVcbmBgZXZhbCgpYGAgYW5kIGBgY29tcGlsZSgpYGAgZnVuY3Rpb25zLlxuJywKICAnaWQtY2xhc3Nlcyc6ICdcblJlc2VydmVkIGNsYXNzZXMgb2YgaWRlbnRpZmllcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQ2VydGFpbiBjbGFzc2VzIG9mIGlkZW50aWZpZXJzIChiZXNpZGVzIGtleXdvcmRzKSBoYXZlIHNwZWNpYWxcbm1lYW5pbmdzLiAgVGhlc2UgY2xhc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgcGF0dGVybnMgb2YgbGVhZGluZyBhbmRcbnRyYWlsaW5nIHVuZGVyc2NvcmUgY2hhcmFjdGVyczpcblxuYGBfKmBgXG4gICBOb3QgaW1wb3J0ZWQgYnkgYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllclxuICAgYGBfYGAgaXMgdXNlZCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZlxuICAgdGhlIGxhc3QgZXZhbHVhdGlvbjsgaXQgaXMgc3RvcmVkIGluIHRoZSBgYGJ1aWx0aW5zYGAgbW9kdWxlLiAgV2hlblxuICAgbm90IGluIGludGVyYWN0aXZlIG1vZGUsIGBgX2BgIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzIG5vdFxuICAgZGVmaW5lZC4gU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgYGBfYGAgaXMgb2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAgIGludGVybmF0aW9uYWxpemF0aW9uOyByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgIGBgZ2V0dGV4dGBgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbmBgX18qX19gYFxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KS4gIEN1cnJlbnRcbiAgIHN5c3RlbSBuYW1lcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSAqU3BlY2lhbCBtZXRob2QgbmFtZXMqIHNlY3Rpb25cbiAgIGFuZCBlbHNld2hlcmUuICBNb3JlIHdpbGwgbGlrZWx5IGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mXG4gICBQeXRob24uICAqQW55KiB1c2Ugb2YgYGBfXypfX2BgIG5hbWVzLCBpbiBhbnkgY29udGV4dCwgdGhhdCBkb2VzXG4gICBub3QgZm9sbG93IGV4cGxpY2l0bHkgZG9jdW1lbnRlZCB1c2UsIGlzIHN1YmplY3QgdG8gYnJlYWthZ2VcbiAgIHdpdGhvdXQgd2FybmluZy5cblxuYGBfXypgYFxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCiAgJ2lkZW50aWZpZXJzJzogJ1xuSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzXG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuSWRlbnRpZmllcnMgKGFsc28gcmVmZXJyZWQgdG8gYXMgKm5hbWVzKikgYXJlIGRlc2NyaWJlZCBieSB0aGVcbmZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zLlxuXG5UaGUgc3ludGF4IG9mIGlkZW50aWZpZXJzIGluIFB5dGhvbiBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSBzdGFuZGFyZFxuYW5uZXggVUFYLTMxLCB3aXRoIGVsYWJvcmF0aW9uIGFuZCBjaGFuZ2VzIGFzIGRlZmluZWQgYmVsb3c7IHNlZSBhbHNvXG4qKlBFUCAzMTMxKiogZm9yIGZ1cnRoZXIgZGV0YWlscy5cblxuV2l0aGluIHRoZSBBU0NJSSByYW5nZSAoVSswMDAxLi5VKzAwN0YpLCB0aGUgdmFsaWQgY2hhcmFjdGVycyBmb3JcbmlkZW50aWZpZXJzIGFyZSB0aGUgc2FtZSBhcyBpbiBQeXRob24gMi54OiB0aGUgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2VcbmxldHRlcnMgYGBBYGAgdGhyb3VnaCBgYFpgYCwgdGhlIHVuZGVyc2NvcmUgYGBfYGAgYW5kLCBleGNlcHQgZm9yIHRoZVxuZmlyc3QgY2hhcmFjdGVyLCB0aGUgZGlnaXRzIGBgMGBgIHRocm91Z2ggYGA5YGAuXG5cblB5dGhvbiAzLjAgaW50cm9kdWNlcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZnJvbSBvdXRzaWRlIHRoZSBBU0NJSVxucmFuZ2UgKHNlZSAqKlBFUCAzMTMxKiopLiAgRm9yIHRoZXNlIGNoYXJhY3RlcnMsIHRoZSBjbGFzc2lmaWNhdGlvblxudXNlcyB0aGUgdmVyc2lvbiBvZiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgYXMgaW5jbHVkZWQgaW4gdGhlXG5gYHVuaWNvZGVkYXRhYGAgbW9kdWxlLlxuXG5JZGVudGlmaWVycyBhcmUgdW5saW1pdGVkIGluIGxlbmd0aC4gIENhc2UgaXMgc2lnbmlmaWNhbnQuXG5cbiAgIGlkZW50aWZpZXIgICA6Oj0geGlkX3N0YXJ0IHhpZF9jb250aW51ZSpcbiAgIGlkX3N0YXJ0ICAgICA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGdlbmVyYWwgY2F0ZWdvcmllcyBMdSwgTGwsIEx0LCBMbSwgTG8sIE5sLCB0aGUgdW5kZXJzY29yZSwgYW5kIGNoYXJhY3RlcnMgd2l0aCB0aGUgT3RoZXJfSURfU3RhcnQgcHJvcGVydHk+XG4gICBpZF9jb250aW51ZSAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCwgcGx1cyBjaGFyYWN0ZXJzIGluIHRoZSBjYXRlZ29yaWVzIE1uLCBNYywgTmQsIFBjIGFuZCBvdGhlcnMgd2l0aCB0aGUgT3RoZXJfSURfQ29udGludWUgcHJvcGVydHk+XG4gICB4aWRfc3RhcnQgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCB3aG9zZSBORktDIG5vcm1hbGl6YXRpb24gaXMgaW4gImlkX3N0YXJ0IHhpZF9jb250aW51ZSoiPlxuICAgeGlkX2NvbnRpbnVlIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfY29udGludWUgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9jb250aW51ZSoiPlxuXG5UaGUgVW5pY29kZSBjYXRlZ29yeSBjb2RlcyBtZW50aW9uZWQgYWJvdmUgc3RhbmQgZm9yOlxuXG4qICpMdSogLSB1cHBlcmNhc2UgbGV0dGVyc1xuXG4qICpMbCogLSBsb3dlcmNhc2UgbGV0dGVyc1xuXG4qICpMdCogLSB0aXRsZWNhc2UgbGV0dGVyc1xuXG4qICpMbSogLSBtb2RpZmllciBsZXR0ZXJzXG5cbiogKkxvKiAtIG90aGVyIGxldHRlcnNcblxuKiAqTmwqIC0gbGV0dGVyIG51bWJlcnNcblxuKiAqTW4qIC0gbm9uc3BhY2luZyBtYXJrc1xuXG4qICpNYyogLSBzcGFjaW5nIGNvbWJpbmluZyBtYXJrc1xuXG4qICpOZCogLSBkZWNpbWFsIG51bWJlcnNcblxuKiAqUGMqIC0gY29ubmVjdG9yIHB1bmN0dWF0aW9uc1xuXG4qICpPdGhlcl9JRF9TdGFydCogLSBleHBsaWNpdCBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gUHJvcExpc3QudHh0IHRvXG4gIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuKiAqT3RoZXJfSURfQ29udGludWUqIC0gbGlrZXdpc2VcblxuQWxsIGlkZW50aWZpZXJzIGFyZSBjb252ZXJ0ZWQgaW50byB0aGUgbm9ybWFsIGZvcm0gTkZLQyB3aGlsZSBwYXJzaW5nO1xuY29tcGFyaXNvbiBvZiBpZGVudGlmaWVycyBpcyBiYXNlZCBvbiBORktDLlxuXG5BIG5vbi1ub3JtYXRpdmUgSFRNTCBmaWxlIGxpc3RpbmcgYWxsIHZhbGlkIGlkZW50aWZpZXIgY2hhcmFjdGVycyBmb3JcblVuaWNvZGUgNC4xIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmRjbC5ocGkudW5pLVxucG90c2RhbS5kZS9ob21lL2xvZXdpcy90YWJsZS0zMTMxLmh0bWwuXG5cblxuS2V5d29yZHNcbj09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgaWRlbnRpZmllcnMgYXJlIHVzZWQgYXMgcmVzZXJ2ZWQgd29yZHMsIG9yICprZXl3b3Jkcyogb2ZcbnRoZSBsYW5ndWFnZSwgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIG9yZGluYXJ5IGlkZW50aWZpZXJzLiAgVGhleSBtdXN0XG5iZSBzcGVsbGVkIGV4YWN0bHkgYXMgd3JpdHRlbiBoZXJlOlxuXG4gICBGYWxzZSAgICAgIGNsYXNzICAgICAgZmluYWxseSAgICBpcyAgICAgICAgIHJldHVyblxuICAgTm9uZSAgICAgICBjb250aW51ZSAgIGZvciAgICAgICAgbGFtYmRhICAgICB0cnlcbiAgIFRydWUgICAgICAgZGVmICAgICAgICBmcm9tICAgICAgIG5vbmxvY2FsICAgd2hpbGVcbiAgIGFuZCAgICAgICAgZGVsICAgICAgICBnbG9iYWwgICAgIG5vdCAgICAgICAgd2l0aFxuICAgYXMgICAgICAgICBlbGlmICAgICAgIGlmICAgICAgICAgb3IgICAgICAgICB5aWVsZFxuICAgYXNzZXJ0ICAgICBlbHNlICAgICAgIGltcG9ydCAgICAgcGFzc1xuICAgYnJlYWsgICAgICBleGNlcHQgICAgIGluICAgICAgICAgcmFpc2VcblxuXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbmBgXypgYFxuICAgTm90IGltcG9ydGVkIGJ5IGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYC4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXJcbiAgIGBgX2BgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2ZcbiAgIHRoZSBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgYGBidWlsdGluc2BgIG1vZHVsZS4gIFdoZW5cbiAgIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3RcbiAgIGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mIGBgX18qX19gYCBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lc1xuICAgbm90IGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlXG4gICB3aXRob3V0IHdhcm5pbmcuXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLApAQCAtNTYsMjIgKzU2LDIyIEBACiAgJ3Bvd2VyJzogJ1xuVGhlIHBvd2VyIG9wZXJhdG9yXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIHBvd2VyIG9wZXJhdG9yIGJpbmRzIG1vcmUgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHNcbmxlZnQ7IGl0IGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHMgcmlnaHQuICBUaGVcbnN5bnRheCBpczpcblxuICAgcG93ZXIgOjo9IHByaW1hcnkgWyIqKiIgdV9leHByXVxuXG5UaHVzLCBpbiBhbiB1bnBhcmVudGhlc2l6ZWQgc2VxdWVuY2Ugb2YgcG93ZXIgYW5kIHVuYXJ5IG9wZXJhdG9ycywgdGhlXG5vcGVyYXRvcnMgYXJlIGV2YWx1YXRlZCBmcm9tIHJpZ2h0IHRvIGxlZnQgKHRoaXMgZG9lcyBub3QgY29uc3RyYWluXG50aGUgZXZhbHVhdGlvbiBvcmRlciBmb3IgdGhlIG9wZXJhbmRzKTogYGAtMSoqMmBgIHJlc3VsdHMgaW4gYGAtMWBgLlxuXG5UaGUgcG93ZXIgb3BlcmF0b3IgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgYnVpbHQtaW4gYGBwb3coKWBgXG5mdW5jdGlvbiwgd2hlbiBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOiBpdCB5aWVsZHMgaXRzIGxlZnQgYXJndW1lbnRcbnJhaXNlZCB0byB0aGUgcG93ZXIgb2YgaXRzIHJpZ2h0IGFyZ3VtZW50LiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZVxuZmlyc3QgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUsIGFuZCB0aGUgcmVzdWx0IGlzIG9mIHRoYXQgdHlwZS5cblxuRm9yIGludCBvcGVyYW5kcywgdGhlIHJlc3VsdCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3BlcmFuZHMgdW5sZXNzXG50aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5lZ2F0aXZlOyBpbiB0aGF0IGNhc2UsIGFsbCBhcmd1bWVudHMgYXJlXG5jb252ZXJ0ZWQgdG8gZmxvYXQgYW5kIGEgZmxvYXQgcmVzdWx0IGlzIGRlbGl2ZXJlZC4gRm9yIGV4YW1wbGUsXG5gYDEwKioyYGAgcmV0dXJucyBgYDEwMGBgLCBidXQgYGAxMCoqLTJgYCByZXR1cm5zIGBgMC4wMWBgLlxuXG5SYWlzaW5nIGBgMC4wYGAgdG8gYSBuZWdhdGl2ZSBwb3dlciByZXN1bHRzIGluIGFcbmBgWmVyb0RpdmlzaW9uRXJyb3JgYC4gUmFpc2luZyBhIG5lZ2F0aXZlIG51bWJlciB0byBhIGZyYWN0aW9uYWwgcG93ZXJcbnJlc3VsdHMgaW4gYSBgYGNvbXBsZXhgYCBudW1iZXIuIChJbiBlYXJsaWVyIHZlcnNpb25zIGl0IHJhaXNlZCBhXG5gYFZhbHVlRXJyb3JgYC4pXG4nLAogICdyYWlzZSc6ICdcblRoZSBgYHJhaXNlYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICByYWlzZV9zdG10IDo6PSAicmFpc2UiIFtleHByZXNzaW9uIFsiZnJvbSIgZXhwcmVzc2lvbl1dXG5cbklmIG5vIGV4cHJlc3Npb25zIGFyZSBwcmVzZW50LCBgYHJhaXNlYGAgcmUtcmFpc2VzIHRoZSBsYXN0IGV4Y2VwdGlvblxudGhhdCB3YXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHNjb3BlLiAgSWYgbm8gZXhjZXB0aW9uIGlzIGFjdGl2ZSBpblxudGhlIGN1cnJlbnQgc2NvcGUsIGEgYGBSdW50aW1lRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkIGluZGljYXRpbmdcbnRoYXQgdGhpcyBpcyBhbiBlcnJvci5cblxuT3RoZXJ3aXNlLCBgYHJhaXNlYGAgZXZhbHVhdGVzIHRoZSBmaXJzdCBleHByZXNzaW9uIGFzIHRoZSBleGNlcHRpb25cbm9iamVjdC4gIEl0IG11c3QgYmUgZWl0aGVyIGEgc3ViY2xhc3Mgb3IgYW4gaW5zdGFuY2Ugb2ZcbmBgQmFzZUV4Y2VwdGlvbmBgLiBJZiBpdCBpcyBhIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIHdpbGwgYmVcbm9idGFpbmVkIHdoZW4gbmVlZGVkIGJ5IGluc3RhbnRpYXRpbmcgdGhlIGNsYXNzIHdpdGggbm8gYXJndW1lbnRzLlxuXG5UaGUgKnR5cGUqIG9mIHRoZSBleGNlcHRpb24gaXMgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZVwncyBjbGFzcywgdGhlXG4qdmFsdWUqIGlzIHRoZSBpbnN0YW5jZSBpdHNlbGYuXG5cbkEgdHJhY2ViYWNrIG9iamVjdCBpcyBub3JtYWxseSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhbiBleGNlcHRpb25cbmlzIHJhaXNlZCBhbmQgYXR0YWNoZWQgdG8gaXQgYXMgdGhlIGBgX190cmFjZWJhY2tfX2BgIGF0dHJpYnV0ZSwgd2hpY2hcbmlzIHdyaXRhYmxlLiBZb3UgY2FuIGNyZWF0ZSBhbiBleGNlcHRpb24gYW5kIHNldCB5b3VyIG93biB0cmFjZWJhY2sgaW5cbm9uZSBzdGVwIHVzaW5nIHRoZSBgYHdpdGhfdHJhY2ViYWNrKClgYCBleGNlcHRpb24gbWV0aG9kICh3aGljaFxucmV0dXJucyB0aGUgc2FtZSBleGNlcHRpb24gaW5zdGFuY2UsIHdpdGggaXRzIHRyYWNlYmFjayBzZXQgdG8gaXRzXG5hcmd1bWVudCksIGxpa2Ugc286XG5cbiAgIHJhaXNlIEV4Y2VwdGlvbigiZm9vIG9jY3VycmVkIikud2l0aF90cmFjZWJhY2sodHJhY2ViYWNrb2JqKVxuXG5UaGUgYGBmcm9tYGAgY2xhdXNlIGlzIHVzZWQgZm9yIGV4Y2VwdGlvbiBjaGFpbmluZzogaWYgZ2l2ZW4sIHRoZVxuc2Vjb25kICpleHByZXNzaW9uKiBtdXN0IGJlIGFub3RoZXIgZXhjZXB0aW9uIGNsYXNzIG9yIGluc3RhbmNlLCB3aGljaFxud2lsbCB0aGVuIGJlIGF0dGFjaGVkIHRvIHRoZSByYWlzZWQgZXhjZXB0aW9uIGFzIHRoZSBgYF9fY2F1c2VfX2BgXG5hdHRyaWJ1dGUgKHdoaWNoIGlzIHdyaXRhYmxlKS4gIElmIHRoZSByYWlzZWQgZXhjZXB0aW9uIGlzIG5vdFxuaGFuZGxlZCwgYm90aCBleGNlcHRpb25zIHdpbGwgYmUgcHJpbnRlZDpcblxuICAgPj4+IHRyeTpcbiAgIC4uLiAgICAgcHJpbnQoMSAvIDApXG4gICAuLi4gZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpIGZyb20gZXhjXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcblxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSA0LCBpbiA8bW9kdWxlPlxuICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkXG5cbkEgc2ltaWxhciBtZWNoYW5pc20gd29ya3MgaW1wbGljaXRseSBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluc2lkZVxuYW4gZXhjZXB0aW9uIGhhbmRsZXI6IHRoZSBwcmV2aW91cyBleGNlcHRpb24gaXMgdGhlbiBhdHRhY2hlZCBhcyB0aGVcbm5ldyBleGNlcHRpb25cJ3MgYGBfX2NvbnRleHRfX2BgIGF0dHJpYnV0ZTpcblxuICAgPj4+IHRyeTpcbiAgIC4uLiAgICAgcHJpbnQoMSAvIDApXG4gICAuLi4gZXhjZXB0OlxuICAgLi4uICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvbWV0aGluZyBiYWQgaGFwcGVuZWQiKVxuICAgLi4uXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIDxtb2R1bGU+XG4gICBaZXJvRGl2aXNpb25FcnJvcjogaW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvXG5cbiAgIER1cmluZyBoYW5kbGluZyBvZiB0aGUgYWJvdmUgZXhjZXB0aW9uLCBhbm90aGVyIGV4Y2VwdGlvbiBvY2N1cnJlZDpcblxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSA0LCBpbiA8bW9kdWxlPlxuICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgaGFuZGxpbmcgZXhjZXB0aW9ucyBpcyBpbiBzZWN0aW9uXG4qVGhlIHRyeSBzdGF0ZW1lbnQqLlxuJywKICAncmV0dXJuJzogJ1xuVGhlIGBgcmV0dXJuYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmV0dXJuX3N0bXQgOjo9ICJyZXR1cm4iIFtleHByZXNzaW9uX2xpc3RdXG5cbmBgcmV0dXJuYGAgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSBmdW5jdGlvblxuZGVmaW5pdGlvbiwgbm90IHdpdGhpbiBhIG5lc3RlZCBjbGFzcyBkZWZpbml0aW9uLlxuXG5JZiBhbiBleHByZXNzaW9uIGxpc3QgaXMgcHJlc2VudCwgaXQgaXMgZXZhbHVhdGVkLCBlbHNlIGBgTm9uZWBgIGlzXG5zdWJzdGl0dXRlZC5cblxuYGByZXR1cm5gYCBsZWF2ZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbCB3aXRoIHRoZSBleHByZXNzaW9uIGxpc3RcbihvciBgYE5vbmVgYCkgYXMgcmV0dXJuIHZhbHVlLlxuXG5XaGVuIGBgcmV0dXJuYGAgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBhXG5gYGZpbmFsbHlgYCBjbGF1c2UsIHRoYXQgYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHlcbmxlYXZpbmcgdGhlIGZ1bmN0aW9uLlxuXG5JbiBhIGdlbmVyYXRvciBmdW5jdGlvbiwgdGhlIGBgcmV0dXJuYGAgc3RhdGVtZW50IGluZGljYXRlcyB0aGF0IHRoZVxuZ2VuZXJhdG9yIGlzIGRvbmUgYW5kIHdpbGwgY2F1c2UgYGBTdG9wSXRlcmF0aW9uYGAgdG8gYmUgcmFpc2VkLiBUaGVcbnJldHVybmVkIHZhbHVlIChpZiBhbnkpIGlzIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gY29uc3RydWN0XG5gYFN0b3BJdGVyYXRpb25gYCBhbmQgYmVjb21lcyB0aGUgYGBTdG9wSXRlcmF0aW9uLnZhbHVlYGAgYXR0cmlidXRlLlxuJywKLSAnc2VxdWVuY2UtdHlwZXMnOiAiXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoIGBgMCA8PSBrIDwgTmBgXG53aGVyZSAqTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoXG5kZWZpbmUgYSByYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGdldCgpYGAsXG5gYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBwb3AoKWBgLCBgYHBvcGl0ZW0oKWBgLCBgYGNvcHkoKWBgLFxuYW5kIGBgdXBkYXRlKClgYCBiZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob24ncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuJ3QgZGVmaW5lIGEgYGBfX2Jvb2xfXygpYGAgbWV0aG9kIGFuZCB3aG9zZSBgYF9fbGVuX18oKWBgXG4gICBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy4gIEFcbiAgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGhcbiAgYGBOb25lYGAuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiBgYHNlbGZba2V5XWBgLiBGb3Igc2VxdWVuY2VcbiAgIHR5cGVzLCB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuXG4gICBOb3RlIHRoYXQgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlXG4gICBjbGFzcyB3aXNoZXMgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZVxuICAgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLiBJZiAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsXG4gICBgYFR5cGVFcnJvcmBgIG1heSBiZSByYWlzZWQ7IGlmIG9mIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mXG4gICBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mXG4gICBuZWdhdGl2ZSB2YWx1ZXMpLCBgYEluZGV4RXJyb3JgYCBzaG91bGQgYmUgcmFpc2VkLiBGb3IgbWFwcGluZ1xuICAgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGUgY29udGFpbmVyKSwgYGBLZXlFcnJvcmBgXG4gICBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiBgYGZvcmBgIGxvb3BzIGV4cGVjdCB0aGF0IGFuIGBgSW5kZXhFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgYGBfX2dldGl0ZW1fXygpYGBcbiAgIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCBgYGtleXMoKWBgLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgYGBfX3JldmVyc2VkX18oKWBgIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZVxuICAgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlXG4gICBwcm90b2NvbCAoYGBfX2xlbl9fKClgYCBhbmQgYGBfX2dldGl0ZW1fXygpYGApLiAgT2JqZWN0cyB0aGF0XG4gICBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbCBzaG91bGQgb25seSBwcm92aWRlXG4gICBgYF9fcmV2ZXJzZWRfXygpYGAgaWYgdGhleSBjYW4gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzXG4gICBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnkgYGByZXZlcnNlZCgpYGAuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzIChgYGluYGAgYW5kIGBgbm90IGluYGApIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG4iLAorICdzZXF1ZW5jZS10eXBlcyc6ICJcbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggYGAwIDw9IGsgPCBOYGBcbndoZXJlICpOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2hcbmRlZmluZSBhIHJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGVcbnRoZSBtZXRob2RzIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVtcygpYGAsIGBgZ2V0KClgYCxcbmBgY2xlYXIoKWBgLCBgYHNldGRlZmF1bHQoKWBgLCBgYHBvcCgpYGAsIGBgcG9waXRlbSgpYGAsIGBgY29weSgpYGAsXG5hbmQgYGB1cGRhdGUoKWBgIGJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvbidzIHN0YW5kYXJkXG5kaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZSBwcm92aWRlcyBhXG5gYE11dGFibGVNYXBwaW5nYGAgYWJzdHJhY3QgYmFzZSBjbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzXG5mcm9tIGEgYmFzZSBzZXQgb2YgYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgLFxuYGBfX2RlbGl0ZW1fXygpYGAsIGFuZCBgYGtleXMoKWBgLiBNdXRhYmxlIHNlcXVlbmNlcyBzaG91bGQgcHJvdmlkZVxubWV0aG9kcyBgYGFwcGVuZCgpYGAsIGBgY291bnQoKWBgLCBgYGluZGV4KClgYCwgYGBleHRlbmQoKWBgLFxuYGBpbnNlcnQoKWBgLCBgYHBvcCgpYGAsIGBgcmVtb3ZlKClgYCwgYGByZXZlcnNlKClgYCBhbmQgYGBzb3J0KClgYCxcbmxpa2UgUHl0aG9uIHN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZFxuaW1wbGVtZW50IGFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgYGBfX2FkZF9fKClgYCwgYGBfX3JhZGRfXygpYGAsXG5gYF9faWFkZF9fKClgYCwgYGBfX211bF9fKClgYCwgYGBfX3JtdWxfXygpYGAgYW5kIGBgX19pbXVsX18oKWBgXG5kZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0XG5pcyByZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9fY29udGFpbnNfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlIGBgaW5gYFxub3BlcmF0b3I7IGZvciBtYXBwaW5ncywgYGBpbmBgIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmcncyBrZXlzOyBmb3JcbnNlcXVlbmNlcywgaXQgc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9faXRlcl9fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZVxuY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsIGBgX19pdGVyX18oKWBgIHNob3VsZCBiZSB0aGUgc2FtZSBhc1xuYGBrZXlzKClgYDsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgYGA+PWBgIDAuICBBbHNvLCBhbiBvYmplY3RcbiAgIHRoYXQgZG9lc24ndCBkZWZpbmUgYSBgYF9fYm9vbF9fKClgYCBtZXRob2QgYW5kIHdob3NlIGBgX19sZW5fXygpYGBcbiAgIG1ldGhvZCByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IubGVuZ3RoX2hpbnQoKWBgLiBTaG91bGQgcmV0dXJuIGFuXG4gICBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW5cbiAgIHRoZSBhY3R1YWwgbGVuZ3RoKS4gVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgYGA+PWBgIDAuIFRoaXNcbiAgIG1ldGhvZCBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3JcbiAgIGNvcnJlY3RuZXNzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy4gIEFcbiAgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGhcbiAgYGBOb25lYGAuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiBgYHNlbGZba2V5XWBgLiBGb3Igc2VxdWVuY2VcbiAgIHR5cGVzLCB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuXG4gICBOb3RlIHRoYXQgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlXG4gICBjbGFzcyB3aXNoZXMgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZVxuICAgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLiBJZiAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsXG4gICBgYFR5cGVFcnJvcmBgIG1heSBiZSByYWlzZWQ7IGlmIG9mIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mXG4gICBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mXG4gICBuZWdhdGl2ZSB2YWx1ZXMpLCBgYEluZGV4RXJyb3JgYCBzaG91bGQgYmUgcmFpc2VkLiBGb3IgbWFwcGluZ1xuICAgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGUgY29udGFpbmVyKSwgYGBLZXlFcnJvcmBgXG4gICBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiBgYGZvcmBgIGxvb3BzIGV4cGVjdCB0aGF0IGFuIGBgSW5kZXhFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgYGBfX2dldGl0ZW1fXygpYGBcbiAgIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCBgYGtleXMoKWBgLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgYGBfX3JldmVyc2VkX18oKWBgIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZVxuICAgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlXG4gICBwcm90b2NvbCAoYGBfX2xlbl9fKClgYCBhbmQgYGBfX2dldGl0ZW1fXygpYGApLiAgT2JqZWN0cyB0aGF0XG4gICBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbCBzaG91bGQgb25seSBwcm92aWRlXG4gICBgYF9fcmV2ZXJzZWRfXygpYGAgaWYgdGhleSBjYW4gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzXG4gICBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnkgYGByZXZlcnNlZCgpYGAuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzIChgYGluYGAgYW5kIGBgbm90IGluYGApIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG4iLAogICdzaGlmdGluZyc6ICdcblNoaWZ0aW5nIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIHNoaWZ0aW5nIG9wZXJhdGlvbnMgaGF2ZSBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSBhcml0aG1ldGljXG5vcGVyYXRpb25zOlxuXG4gICBzaGlmdF9leHByIDo6PSBhX2V4cHIgfCBzaGlmdF9leHByICggIjw8IiB8ICI+PiIgKSBhX2V4cHJcblxuVGhlc2Ugb3BlcmF0b3JzIGFjY2VwdCBpbnRlZ2VycyBhcyBhcmd1bWVudHMuICBUaGV5IHNoaWZ0IHRoZSBmaXJzdFxuYXJndW1lbnQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGJ5IHRoZVxuc2Vjb25kIGFyZ3VtZW50LlxuXG5BIHJpZ2h0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgZmxvb3IgZGl2aXNpb24gYnlcbmBgcG93KDIsbilgYC4gIEEgbGVmdCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIG11bHRpcGxpY2F0aW9uXG53aXRoIGBgcG93KDIsbilgYC5cblxuTm90ZTogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXMgcmVxdWlyZWQgdG9cbiAgYmUgYXQgbW9zdCBgYHN5cy5tYXhzaXplYGAuICBJZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIGxhcmdlclxuICB0aGFuIGBgc3lzLm1heHNpemVgYCBhbiBgYE92ZXJmbG93RXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKICAnc2xpY2luZ3MnOiAnXG5TbGljaW5nc1xuKioqKioqKipcblxuQSBzbGljaW5nIHNlbGVjdHMgYSByYW5nZSBvZiBpdGVtcyBpbiBhIHNlcXVlbmNlIG9iamVjdCAoZS5nLiwgYVxuc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFNsaWNpbmdzIG1heSBiZSB1c2VkIGFzIGV4cHJlc3Npb25zIG9yIGFzXG50YXJnZXRzIGluIGFzc2lnbm1lbnQgb3IgYGBkZWxgYCBzdGF0ZW1lbnRzLiAgVGhlIHN5bnRheCBmb3IgYVxuc2xpY2luZzpcblxuICAgc2xpY2luZyAgICAgIDo6PSBwcmltYXJ5ICJbIiBzbGljZV9saXN0ICJdIlxuICAgc2xpY2VfbGlzdCAgIDo6PSBzbGljZV9pdGVtICgiLCIgc2xpY2VfaXRlbSkqIFsiLCJdXG4gICBzbGljZV9pdGVtICAgOjo9IGV4cHJlc3Npb24gfCBwcm9wZXJfc2xpY2VcbiAgIHByb3Blcl9zbGljZSA6Oj0gW2xvd2VyX2JvdW5kXSAiOiIgW3VwcGVyX2JvdW5kXSBbICI6IiBbc3RyaWRlXSBdXG4gICBsb3dlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHVwcGVyX2JvdW5kICA6Oj0gZXhwcmVzc2lvblxuICAgc3RyaWRlICAgICAgIDo6PSBleHByZXNzaW9uXG5cblRoZXJlIGlzIGFtYmlndWl0eSBpbiB0aGUgZm9ybWFsIHN5bnRheCBoZXJlOiBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2VcbmFuIGV4cHJlc3Npb24gbGlzdCBhbHNvIGxvb2tzIGxpa2UgYSBzbGljZSBsaXN0LCBzbyBhbnkgc3Vic2NyaXB0aW9uXG5jYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzbGljaW5nLiAgUmF0aGVyIHRoYW4gZnVydGhlciBjb21wbGljYXRpbmcgdGhlXG5zeW50YXgsIHRoaXMgaXMgZGlzYW1iaWd1YXRlZCBieSBkZWZpbmluZyB0aGF0IGluIHRoaXMgY2FzZSB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc3Vic2NyaXB0aW9uIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHNsaWNpbmcgKHRoaXMgaXMgdGhlIGNhc2UgaWYgdGhlIHNsaWNlIGxpc3RcbmNvbnRhaW5zIG5vIHByb3BlciBzbGljZSkuXG5cblRoZSBzZW1hbnRpY3MgZm9yIGEgc2xpY2luZyBhcmUgYXMgZm9sbG93cy4gIFRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGVcbnRvIGEgbWFwcGluZyBvYmplY3QsIGFuZCBpdCBpcyBpbmRleGVkICh1c2luZyB0aGUgc2FtZVxuYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kIGFzIG5vcm1hbCBzdWJzY3JpcHRpb24pIHdpdGggYSBrZXkgdGhhdCBpc1xuY29uc3RydWN0ZWQgZnJvbSB0aGUgc2xpY2UgbGlzdCwgYXMgZm9sbG93cy4gIElmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBhdCBsZWFzdCBvbmUgY29tbWEsIHRoZSBrZXkgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZVxuY29udmVyc2lvbiBvZiB0aGUgc2xpY2UgaXRlbXM7IG90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGxvbmVcbnNsaWNlIGl0ZW0gaXMgdGhlIGtleS4gIFRoZSBjb252ZXJzaW9uIG9mIGEgc2xpY2UgaXRlbSB0aGF0IGlzIGFuXG5leHByZXNzaW9uIGlzIHRoYXQgZXhwcmVzc2lvbi4gIFRoZSBjb252ZXJzaW9uIG9mIGEgcHJvcGVyIHNsaWNlIGlzIGFcbnNsaWNlIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIHdob3NlXG5gYHN0YXJ0YGAsIGBgc3RvcGBgIGFuZCBgYHN0ZXBgYCBhdHRyaWJ1dGVzIGFyZSB0aGUgdmFsdWVzIG9mIHRoZVxuZXhwcmVzc2lvbnMgZ2l2ZW4gYXMgbG93ZXIgYm91bmQsIHVwcGVyIGJvdW5kIGFuZCBzdHJpZGUsXG5yZXNwZWN0aXZlbHksIHN1YnN0aXR1dGluZyBgYE5vbmVgYCBmb3IgbWlzc2luZyBleHByZXNzaW9ucy5cbicsCiAgJ3NwZWNpYWxhdHRycyc6ICdcblNwZWNpYWwgQXR0cmlidXRlc1xuKioqKioqKioqKioqKioqKioqXG5cblRoZSBpbXBsZW1lbnRhdGlvbiBhZGRzIGEgZmV3IHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgdG8gc2V2ZXJhbFxub2JqZWN0IHR5cGVzLCB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gIFNvbWUgb2YgdGhlc2UgYXJlIG5vdCByZXBvcnRlZFxuYnkgdGhlIGBgZGlyKClgYCBidWlsdC1pbiBmdW5jdGlvbi5cblxub2JqZWN0Ll9fZGljdF9fXG5cbiAgIEEgZGljdGlvbmFyeSBvciBvdGhlciBtYXBwaW5nIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIG9iamVjdFwnc1xuICAgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5jbGFzcy5fX3F1YWxuYW1lX19cblxuICAgVGhlICpxdWFsaWZpZWQgbmFtZSogb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuY2xhc3MuX19tcm9fX1xuXG4gICBUaGlzIGF0dHJpYnV0ZSBpcyBhIHR1cGxlIG9mIGNsYXNzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCB3aGVuXG4gICBsb29raW5nIGZvciBiYXNlIGNsYXNzZXMgZHVyaW5nIG1ldGhvZCByZXNvbHV0aW9uLlxuXG5jbGFzcy5tcm8oKVxuXG4gICBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIG1ldGFjbGFzcyB0byBjdXN0b21pemUgdGhlXG4gICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgaXRzIGluc3RhbmNlcy4gIEl0IGlzIGNhbGxlZCBhdCBjbGFzc1xuICAgaW5zdGFudGlhdGlvbiwgYW5kIGl0cyByZXN1bHQgaXMgc3RvcmVkIGluIGBgX19tcm9fX2BgLlxuXG5jbGFzcy5fX3N1YmNsYXNzZXNfXygpXG5cbiAgIEVhY2ggY2xhc3Mga2VlcHMgYSBsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW1tZWRpYXRlXG4gICBzdWJjbGFzc2VzLiAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRob3NlIHJlZmVyZW5jZXNcbiAgIHN0aWxsIGFsaXZlLiBFeGFtcGxlOlxuXG4gICAgICA+Pj4gaW50Ll9fc3ViY2xhc3Nlc19fKClcbiAgICAgIFs8Y2xhc3MgXCdib29sXCc+XVxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlc2Ugc3BlY2lhbCBtZXRob2RzIG1heSBiZSBmb3VuZCBpblxuICAgIHRoZSBQeXRob24gUmVmZXJlbmNlIE1hbnVhbCAoKkJhc2ljIGN1c3RvbWl6YXRpb24qKS5cblxuWzJdIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBsaXN0IGBgWzEsIDJdYGAgaXMgY29uc2lkZXJlZCBlcXVhbCB0b1xuICAgIGBgWzEuMCwgMi4wXWBgLCBhbmQgc2ltaWxhcmx5IGZvciB0dXBsZXMuXG5cblszXSBUaGV5IG11c3QgaGF2ZSBzaW5jZSB0aGUgcGFyc2VyIGNhblwndCB0ZWxsIHRoZSB0eXBlIG9mIHRoZVxuICAgIG9wZXJhbmRzLlxuXG5bNF0gQ2FzZWQgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5IGJlaW5nXG4gICAgb25lIG9mICJMdSIgKExldHRlciwgdXBwZXJjYXNlKSwgIkxsIiAoTGV0dGVyLCBsb3dlcmNhc2UpLCBvciAiTHQiXG4gICAgKExldHRlciwgdGl0bGVjYXNlKS5cblxuWzVdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhIHNpbmdsZXRvblxuICAgIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuJywKLSAnc3BlY2lhbG5hbWVzJzogJ1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkIGBgX19nZXRpdGVtX18oKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpc1xuY2xhc3MsIHRoZW4gYGB4W2ldYGAgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGBgdHlwZSh4KS5fX2dldGl0ZW1fXyh4LFxuaSlgYC4gIEV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlXG5hbiBleGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG5gYEF0dHJpYnV0ZUVycm9yYGAgb3IgYGBUeXBlRXJyb3JgYCkuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuYGBOb2RlTGlzdGBgIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y19pbmZvKClbMl1gYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZSBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieVxuICAgICBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1cbiAgICAgbGV2ZWwgYGBfX2RlbF9fKClgYCBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvblxuICAgICBmb3IgdGhlIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93XG4gICAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGUgY3ljbGUgZGV0ZWN0b3IsXG4gICAgIHBhcnRpY3VsYXJseSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlXG4gICAib2ZmaWNpYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsXG4gICB0aGlzIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWRcbiAgIHRvIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICBgYDwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGBcbiAgIGJ1dCBub3QgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhblxuICAgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXNcbiAgIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYHN0cihvYmplY3QpYGAgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBmb3JtYXQoKWBgXG4gICBhbmQgYGBwcmludCgpYGAgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgICpzdHJpbmcqIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBgb2JqZWN0Ll9fcmVwcl9fKClgYCBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0IGBgX19zdHJfXygpYGAgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlIGBgb2JqZWN0YGBcbiAgIGNhbGxzIGBgb2JqZWN0Ll9fcmVwcl9fKClgYC5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBieXRlcygpYGAgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhIGBgYnl0ZXNgYCBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgZm9ybWF0KClgYCBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBvZiBjbGFzcyBgYHN0cmBgKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXNcbiAgIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpcyB1cFxuICAgdG8gdGhlIHR5cGUgaW1wbGVtZW50aW5nIGBgX19mb3JtYXRfXygpYGAsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzXG4gICB3aWxsIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yXG4gICB1c2UgYSBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGNhbGxzXG4gICBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmQgYGB4Pj15YGAgY2FsbHNcbiAgIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSBgYGZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpYGAuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gYGBoYXNoKClgYCBhbmQgZm9yIG9wZXJhdGlvbnMgb25cbiAgIG1lbWJlcnMgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyBgYHNldGBgLCBgYGZyb3plbnNldGBgLCBhbmRcbiAgIGBgZGljdGBgLiAgYGBfX2hhc2hfXygpYGAgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHlcbiAgIHJlcXVpcmVkIHByb3BlcnR5IGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWVcbiAgIGhhc2ggdmFsdWU7IGl0IGlzIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmdcbiAgIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2ggdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXRcbiAgIGFsc28gcGxheSBhIHBhcnQgaW4gY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBOb3RlOiBgYGhhc2goKWBgIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3MgY3VzdG9tXG4gICAgIGBgX19oYXNoX18oKWBgIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhIGBgUHlfc3NpemVfdGBgLiAgVGhpcyBpc1xuICAgICB0eXBpY2FsbHkgOCBieXRlcyBvbiA2NC1iaXQgYnVpbGRzIGFuZCA0IGJ5dGVzIG9uIDMyLWJpdCBidWlsZHMuXG4gICAgIElmIGFuIG9iamVjdFwncyAgIGBgX19oYXNoX18oKWBgIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkcyBvZlxuICAgICBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGwgc3VwcG9ydGVkXG4gICAgIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCBgYHB5dGhvbiAtYyAiaW1wb3J0IHN5cztcbiAgICAgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiYGBcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzXG4gICBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZVxuICAgdXNhYmxlIGFzIGl0ZW1zIGluIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkXG4gICBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGVcbiAgIGNvbGxlY3Rpb25zIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZVxuICAgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19lcV9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgYGB4ID09IHlgYCBpbXBsaWVzIGJvdGggdGhhdCBgYHggaXMgeWBgIGFuZCBgYGhhc2goeCkgPT1cbiAgIGhhc2goeSlgYC5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgYW5kIGRvZXMgbm90IGRlZmluZVxuICAgYGBfX2hhc2hfXygpYGAgd2lsbCBoYXZlIGl0cyBgYF9faGFzaF9fKClgYCBpbXBsaWNpdGx5IHNldCB0b1xuICAgYGBOb25lYGAuICBXaGVuIHRoZSBgYF9faGFzaF9fKClgYCBtZXRob2Qgb2YgYSBjbGFzcyBpcyBgYE5vbmVgYCxcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3Mgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSBgYFR5cGVFcnJvcmBgIHdoZW5cbiAgIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlXG4gICBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaixcbiAgIGNvbGxlY3Rpb25zLkhhc2hhYmxlYGApLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGVcbiAgIGludGVycHJldGVyIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyBgYF9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX19gYC5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlIGBgX19lcV9fKClgYCB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duIGBgX19oYXNoX18oKWBgIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgYGBUeXBlRXJyb3JgYCB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkXG4gICBhcyBoYXNoYWJsZSBieSBhbiBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYCBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgYGBfX2hhc2hfXygpYGAgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kIGRhdGV0aW1lXG4gICAgIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gYGBQWVRIT05IQVNIU0VFRGBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICBgYGJvb2woKWBgOyBzaG91bGQgcmV0dXJuIGBgRmFsc2VgYCBvciBgYFRydWVgYC4gIFdoZW4gdGhpcyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCBgYF9fbGVuX18oKWBgIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZVxuICAgb2JqZWN0IGlzIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzXG4gICBkZWZpbmVzIG5laXRoZXIgYGBfX2xlbl9fKClgYCBub3IgYGBfX2Jvb2xfXygpYGAsIGFsbCBpdHMgaW5zdGFuY2VzXG4gICBhcmUgY29uc2lkZXJlZCB0cnVlLlxuXG5cbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiBgYHgubmFtZWBgKVxuZm9yIGNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgYGBzZWxmYGApLiAgYGBuYW1lYGAgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2VcbiAgIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICBgYF9fZ2V0YXR0cl9fKClgYCBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuIGBgX19nZXRhdHRyX18oKWBgIGFuZCBgYF9fc2V0YXR0cl9fKClgYC4pIFRoaXMgaXMgZG9uZSBib3RoXG4gICBmb3IgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSBgYF9fZ2V0YXR0cl9fKClgYFxuICAgd291bGQgaGF2ZSBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZVxuICAgdGhhdCBhdCBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieVxuICAgbm90IGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgb3ZlciBhdHRyaWJ1dGUgYWNjZXNzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzXG4gICBgYF9fZ2V0YXR0cl9fKClgYCwgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIGVpdGhlciBjYWxscyBpdCBleHBsaWNpdGx5IG9yIHJhaXNlcyBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgLiBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpXG4gICBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi4gSW4gb3JkZXJcbiAgIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpbiB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uXG4gICBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0b1xuICAgYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlgYC5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHNcbiAgICAgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXggb3JcbiAgICAgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgYGBfX3NldGF0dHJfXygpYGAgd2FudHMgdG8gYXNzaWduIHRvIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgaXRcbiAgIHNob3VsZCBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpYGAuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlIGBgX19zZXRhdHRyX18oKWBgIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmIGBgZGVsIG9iai5uYW1lYGAgaXNcbiAgIG1lYW5pbmdmdWwgZm9yIHRoZSBvYmplY3QuXG5cbm9iamVjdC5fX2Rpcl9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIGBgZGlyKClgYCBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gQSBzZXF1ZW5jZSBtdXN0IGJlXG4gICByZXR1cm5lZC4gYGBkaXIoKWBgIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyBgYF9fZGljdF9fYGAuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciBgYE5vbmVgYCB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAsIGFuZFxuYGBfX2RlbGV0ZV9fKClgYC4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCxcbml0IGlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgYGBhLnhgYCBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggYGBhLl9fZGljdF9fW1wneFwnXWBgLCB0aGVuXG5gYHR5cGUoYSkuX19kaWN0X19bXCd4XCddYGAsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuYGB0eXBlKGEpYGAgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCBgYGEueGBgLlxuSG93IHRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uIGBgYWBgOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICBgYHguX19nZXRfXyhhKWBgLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgYGBhLnhgYCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpYGAuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBjbGFzcywgYGBBLnhgYCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgYGBBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpYGAuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmIGBgYWBgIGlzIGFuIGluc3RhbmNlIG9mIGBgc3VwZXJgYCwgdGhlbiB0aGUgYmluZGluZyBgYHN1cGVyKEIsXG4gICBvYmopLm0oKWBgIHNlYXJjaGVzIGBgb2JqLl9fY2xhc3NfXy5fX21yb19fYGAgZm9yIHRoZSBiYXNlIGNsYXNzXG4gICBgYEFgYCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYGBCYGAgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvclxuICAgd2l0aCB0aGUgY2FsbDogYGBBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXylgYC5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgYGBfX2dldF9fKClgYCwgYGBfX3NldF9fKClgYCBhbmQgYGBfX2RlbGV0ZV9fKClgYC5cbklmIGl0IGRvZXMgbm90IGRlZmluZSBgYF9fZ2V0X18oKWBgLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGxcbnJldHVybiB0aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZVxub2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzIGBgX19zZXRfXygpYGBcbmFuZC9vciBgYF9fZGVsZXRlX18oKWBgLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lc1xubmVpdGhlciwgaXQgaXMgYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnNcbmRlZmluZSBib3RoIGBgX19nZXRfXygpYGAgYW5kIGBgX19zZXRfXygpYGAsIHdoaWxlIG5vbi1kYXRhXG5kZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlIGBgX19nZXRfXygpYGAgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoXG5gYF9fc2V0X18oKWBgIGFuZCBgYF9fZ2V0X18oKWBgIGRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uXG5pbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW4gY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZVxub3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgYGBzdGF0aWNtZXRob2QoKWBgIGFuZCBgYGNsYXNzbWV0aG9kKClgYClcbmFyZSBpbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlIGBgcHJvcGVydHkoKWBgIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG4tLS0tLS0tLS1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgaGF2ZSBhIGRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZVxuc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzIGhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZVxudmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWUgYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZVxubnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgY2xhc3NcbmRlZmluaXRpb24uIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mIGluc3RhbmNlXG52YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG8gaG9sZCBhXG52YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpcyBub3RcbmNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbm9iamVjdC5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgSWYgZGVmaW5lZCBpbiBhXG4gICBjbGFzcywgKl9fc2xvdHNfXyogcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kXG4gICBwcmV2ZW50cyB0aGUgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kICpfX3dlYWtyZWZfXyogZm9yXG4gICBlYWNoIGluc3RhbmNlLlxuXG5cbk5vdGVzIG9uIHVzaW5nICpfX3Nsb3RzX18qXG5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuXG4qIFdoZW4gaW5oZXJpdGluZyBmcm9tIGEgY2xhc3Mgd2l0aG91dCAqX19zbG90c19fKiwgdGhlICpfX2RpY3RfXypcbiAgYXR0cmlidXRlIG9mIHRoYXQgY2xhc3Mgd2lsbCBhbHdheXMgYmUgYWNjZXNzaWJsZSwgc28gYSAqX19zbG90c19fKlxuICBkZWZpbml0aW9uIGluIHRoZSBzdWJjbGFzcyBpcyBtZWFuaW5nbGVzcy5cblxuKiBXaXRob3V0IGEgKl9fZGljdF9fKiB2YXJpYWJsZSwgaW5zdGFuY2VzIGNhbm5vdCBiZSBhc3NpZ25lZCBuZXdcbiAgdmFyaWFibGVzIG5vdCBsaXN0ZWQgaW4gdGhlICpfX3Nsb3RzX18qIGRlZmluaXRpb24uICBBdHRlbXB0cyB0b1xuICBhc3NpZ24gdG8gYW4gdW5saXN0ZWQgdmFyaWFibGUgbmFtZSByYWlzZXMgYGBBdHRyaWJ1dGVFcnJvcmBgLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICBgYFwnX19kaWN0X19cJ2BgIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3NlcyBkZWZpbmluZ1xuICAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGluc3RhbmNlcy4gSWYgd2Vha1xuICByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkIGBgXCdfX3dlYWtyZWZfX1wnYGAgdG8gdGhlXG4gIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uLlxuXG4qICpfX3Nsb3RzX18qIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwgYnkgY3JlYXRpbmdcbiAgZGVzY3JpcHRvcnMgKCpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqKSBmb3IgZWFjaCB2YXJpYWJsZSBuYW1lLiAgQXNcbiAgYSByZXN1bHQsIGNsYXNzIGF0dHJpYnV0ZXMgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvclxuICBpbnN0YW5jZSB2YXJpYWJsZXMgZGVmaW5lZCBieSAqX19zbG90c19fKjsgb3RoZXJ3aXNlLCB0aGUgY2xhc3NcbiAgYXR0cmlidXRlIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZGVzY3JpcHRvciBhc3NpZ25tZW50LlxuXG4qIFRoZSBhY3Rpb24gb2YgYSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzc1xuICB3aGVyZSBpdCBpcyBkZWZpbmVkLiAgQXMgYSByZXN1bHQsIHN1YmNsYXNzZXMgd2lsbCBoYXZlIGEgKl9fZGljdF9fKlxuICB1bmxlc3MgdGhleSBhbHNvIGRlZmluZSAqX19zbG90c19fKiAod2hpY2ggbXVzdCBvbmx5IGNvbnRhaW4gbmFtZXNcbiAgb2YgYW55ICphZGRpdGlvbmFsKiBzbG90cykuXG5cbiogSWYgYSBjbGFzcyBkZWZpbmVzIGEgc2xvdCBhbHNvIGRlZmluZWQgaW4gYSBiYXNlIGNsYXNzLCB0aGUgaW5zdGFuY2VcbiAgdmFyaWFibGUgZGVmaW5lZCBieSB0aGUgYmFzZSBjbGFzcyBzbG90IGlzIGluYWNjZXNzaWJsZSAoZXhjZXB0IGJ5XG4gIHJldHJpZXZpbmcgaXRzIGRlc2NyaXB0b3IgZGlyZWN0bHkgZnJvbSB0aGUgYmFzZSBjbGFzcykuIFRoaXNcbiAgcmVuZGVycyB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbSB1bmRlZmluZWQuICBJbiB0aGUgZnV0dXJlLCBhXG4gIGNoZWNrIG1heSBiZSBhZGRlZCB0byBwcmV2ZW50IHRoaXMuXG5cbiogTm9uZW1wdHkgKl9fc2xvdHNfXyogZG9lcyBub3Qgd29yayBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb21cbiAgInZhcmlhYmxlLWxlbmd0aCIgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyBgYGludGBgLCBgYHN0cmBgIGFuZFxuICBgYHR1cGxlYGAuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5ncyBtYXlcbiAgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG5cblxuQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGNsYXNzZXMgYXJlIGNvbnN0cnVjdGVkIHVzaW5nIGBgdHlwZSgpYGAuIFRoZSBjbGFzcyBib2R5XG5pcyBleGVjdXRlZCBpbiBhIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIGxvY2FsbHkgdG9cbnRoZSByZXN1bHQgb2YgYGB0eXBlKG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpYGAuXG5cblRoZSBjbGFzcyBjcmVhdGlvbiBwcm9jZXNzIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHBhc3NpbmcgdGhlXG5gYG1ldGFjbGFzc2BgIGtleXdvcmQgYXJndW1lbnQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gbGluZSwgb3IgYnlcbmluaGVyaXRpbmcgZnJvbSBhbiBleGlzdGluZyBjbGFzcyB0aGF0IGluY2x1ZGVkIHN1Y2ggYW4gYXJndW1lbnQuIEluXG50aGUgZm9sbG93aW5nIGV4YW1wbGUsIGJvdGggYGBNeUNsYXNzYGAgYW5kIGBgTXlTdWJjbGFzc2BgIGFyZVxuaW5zdGFuY2VzIG9mIGBgTWV0YWBgOlxuXG4gICBjbGFzcyBNZXRhKHR5cGUpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlDbGFzcyhtZXRhY2xhc3M9TWV0YSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeVN1YmNsYXNzKE15Q2xhc3MpOlxuICAgICAgIHBhc3NcblxuQW55IG90aGVyIGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxuYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGFsbCBtZXRhY2xhc3Mgb3BlcmF0aW9ucyBkZXNjcmliZWQgYmVsb3cuXG5cbldoZW4gYSBjbGFzcyBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9jY3VyOlxuXG4qIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaXMgZGV0ZXJtaW5lZFxuXG4qIHRoZSBjbGFzcyBuYW1lc3BhY2UgaXMgcHJlcGFyZWRcblxuKiB0aGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZFxuXG4qIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZFxuXG5cbkRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3Ncbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBmb3IgYSBjbGFzcyBkZWZpbml0aW9uIGlzIGRldGVybWluZWQgYXNcbmZvbGxvd3M6XG5cbiogaWYgbm8gYmFzZXMgYW5kIG5vIGV4cGxpY2l0IG1ldGFjbGFzcyBhcmUgZ2l2ZW4sIHRoZW4gYGB0eXBlKClgYCBpc1xuICB1c2VkXG5cbiogaWYgYW4gZXhwbGljaXQgbWV0YWNsYXNzIGlzIGdpdmVuIGFuZCBpdCBpcyAqbm90KiBhbiBpbnN0YW5jZSBvZlxuICBgYHR5cGUoKWBgLCB0aGVuIGl0IGlzIHVzZWQgZGlyZWN0bHkgYXMgdGhlIG1ldGFjbGFzc1xuXG4qIGlmIGFuIGluc3RhbmNlIG9mIGBgdHlwZSgpYGAgaXMgZ2l2ZW4gYXMgdGhlIGV4cGxpY2l0IG1ldGFjbGFzcywgb3JcbiAgYmFzZXMgYXJlIGRlZmluZWQsIHRoZW4gdGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgdXNlZFxuXG5UaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBzZWxlY3RlZCBmcm9tIHRoZSBleHBsaWNpdGx5IHNwZWNpZmllZFxubWV0YWNsYXNzIChpZiBhbnkpIGFuZCB0aGUgbWV0YWNsYXNzZXMgKGkuZS4gYGB0eXBlKGNscylgYCkgb2YgYWxsXG5zcGVjaWZpZWQgYmFzZSBjbGFzc2VzLiBUaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBvbmUgd2hpY2ggaXMgYVxuc3VidHlwZSBvZiAqYWxsKiBvZiB0aGVzZSBjYW5kaWRhdGUgbWV0YWNsYXNzZXMuIElmIG5vbmUgb2YgdGhlXG5jYW5kaWRhdGUgbWV0YWNsYXNzZXMgbWVldHMgdGhhdCBjcml0ZXJpb24sIHRoZW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbndpbGwgZmFpbCB3aXRoIGBgVHlwZUVycm9yYGAuXG5cblxuUHJlcGFyaW5nIHRoZSBjbGFzcyBuYW1lc3BhY2Vcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBoYXMgYmVlbiBpZGVudGlmaWVkLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIHByZXBhcmVkLiBJZiB0aGUgbWV0YWNsYXNzIGhhcyBhIGBgX19wcmVwYXJlX19gYFxuYXR0cmlidXRlLCBpdCBpcyBjYWxsZWQgYXMgYGBuYW1lc3BhY2UgPSBtZXRhY2xhc3MuX19wcmVwYXJlX18obmFtZSxcbmJhc2VzLCAqKmt3ZHMpYGAgKHdoZXJlIHRoZSBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBpZiBhbnksIGNvbWVcbmZyb20gdGhlIGNsYXNzIGRlZmluaXRpb24pLlxuXG5JZiB0aGUgbWV0YWNsYXNzIGhhcyBubyBgYF9fcHJlcGFyZV9fYGAgYXR0cmlidXRlLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIGluaXRpYWxpc2VkIGFzIGFuIGVtcHR5IGBgZGljdCgpYGAgaW5zdGFuY2UuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMzAwMFxuICAgICAgSW50cm9kdWNlZCB0aGUgYGBfX3ByZXBhcmVfX2BgIG5hbWVzcGFjZSBob29rXG5cblxuRXhlY3V0aW5nIHRoZSBjbGFzcyBib2R5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWQgKGFwcHJveGltYXRlbHkpIGFzIGBgZXhlYyhib2R5LCBnbG9iYWxzKCksXG5uYW1lc3BhY2UpYGAuIFRoZSBrZXkgZGlmZmVyZW5jZSBmcm9tIGEgbm9ybWFsIGNhbGwgdG8gYGBleGVjKClgYCBpc1xudGhhdCBsZXhpY2FsIHNjb3BpbmcgYWxsb3dzIHRoZSBjbGFzcyBib2R5IChpbmNsdWRpbmcgYW55IG1ldGhvZHMpIHRvXG5yZWZlcmVuY2UgbmFtZXMgZnJvbSB0aGUgY3VycmVudCBhbmQgb3V0ZXIgc2NvcGVzIHdoZW4gdGhlIGNsYXNzXG5kZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgYSBmdW5jdGlvbi5cblxuSG93ZXZlciwgZXZlbiB3aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgdGhlIGZ1bmN0aW9uLFxubWV0aG9kcyBkZWZpbmVkIGluc2lkZSB0aGUgY2xhc3Mgc3RpbGwgY2Fubm90IHNlZSBuYW1lcyBkZWZpbmVkIGF0IHRoZVxuY2xhc3Mgc2NvcGUuIENsYXNzIHZhcmlhYmxlcyBtdXN0IGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGZpcnN0XG5wYXJhbWV0ZXIgb2YgaW5zdGFuY2Ugb3IgY2xhc3MgbWV0aG9kcywgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBhdCBhbGxcbmZyb20gc3RhdGljIG1ldGhvZHMuXG5cblxuQ3JlYXRpbmcgdGhlIGNsYXNzIG9iamVjdFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBjbGFzcyBuYW1lc3BhY2UgaGFzIGJlZW4gcG9wdWxhdGVkIGJ5IGV4ZWN1dGluZyB0aGUgY2xhc3NcbmJvZHksIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGBgbWV0YWNsYXNzKG5hbWUsIGJhc2VzLFxubmFtZXNwYWNlLCAqKmt3ZHMpYGAgKHRoZSBhZGRpdGlvbmFsIGtleXdvcmRzIHBhc3NlZCBoZXJlIGFyZSB0aGUgc2FtZVxuYXMgdGhvc2UgcGFzc2VkIHRvIGBgX19wcmVwYXJlX19gYCkuXG5cblRoaXMgY2xhc3Mgb2JqZWN0IGlzIHRoZSBvbmUgdGhhdCB3aWxsIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHplcm8tXG5hcmd1bWVudCBmb3JtIG9mIGBgc3VwZXIoKWBgLiBgYF9fY2xhc3NfX2BgIGlzIGFuIGltcGxpY2l0IGNsb3N1cmVcbnJlZmVyZW5jZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpZiBhbnkgbWV0aG9kcyBpbiBhIGNsYXNzIGJvZHkgcmVmZXJcbnRvIGVpdGhlciBgYF9fY2xhc3NfX2BgIG9yIGBgc3VwZXJgYC4gVGhpcyBhbGxvd3MgdGhlIHplcm8gYXJndW1lbnRcbmZvcm0gb2YgYGBzdXBlcigpYGAgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBjbGFzcyBiZWluZyBkZWZpbmVkXG5iYXNlZCBvbiBsZXhpY2FsIHNjb3BpbmcsIHdoaWxlIHRoZSBjbGFzcyBvciBpbnN0YW5jZSB0aGF0IHdhcyB1c2VkIHRvXG5tYWtlIHRoZSBjdXJyZW50IGNhbGwgaXMgaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkXG50byB0aGUgbWV0aG9kLlxuXG5BZnRlciB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3NcbmRlY29yYXRvcnMgaW5jbHVkZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gKGlmIGFueSkgYW5kIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbmVkIGNsYXNzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEzNSoqIC0gTmV3IHN1cGVyXG4gICAgICBEZXNjcmliZXMgdGhlIGltcGxpY2l0IGBgX19jbGFzc19fYGAgY2xvc3VyZSByZWZlcmVuY2VcblxuXG5NZXRhY2xhc3MgZXhhbXBsZVxuLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIHBvdGVudGlhbCB1c2VzIGZvciBtZXRhY2xhc3NlcyBhcmUgYm91bmRsZXNzLiBTb21lIGlkZWFzIHRoYXQgaGF2ZVxuYmVlbiBleHBsb3JlZCBpbmNsdWRlIGxvZ2dpbmcsIGludGVyZmFjZSBjaGVja2luZywgYXV0b21hdGljXG5kZWxlZ2F0aW9uLCBhdXRvbWF0aWMgcHJvcGVydHkgY3JlYXRpb24sIHByb3hpZXMsIGZyYW1ld29ya3MsIGFuZFxuYXV0b21hdGljIHJlc291cmNlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLlxuXG5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRhY2xhc3MgdGhhdCB1c2VzIGFuXG5gYGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YGAgdG8gcmVtZW1iZXIgdGhlIG9yZGVyIHRoYXQgY2xhc3MgbWVtYmVyc1xud2VyZSBkZWZpbmVkOlxuXG4gICBjbGFzcyBPcmRlcmVkQ2xhc3ModHlwZSk6XG5cbiAgICAgICAgQGNsYXNzbWV0aG9kXG4gICAgICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBuYW1lLCBiYXNlcywgKiprd2RzKTpcbiAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KClcblxuICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsICoqa3dkcyk6XG4gICAgICAgICAgIHJlc3VsdCA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KG5hbWVzcGFjZSkpXG4gICAgICAgICAgIHJlc3VsdC5tZW1iZXJzID0gdHVwbGUobmFtZXNwYWNlKVxuICAgICAgICAgICByZXR1cm4gcmVzdWx0XG5cbiAgIGNsYXNzIEEobWV0YWNsYXNzPU9yZGVyZWRDbGFzcyk6XG4gICAgICAgZGVmIG9uZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0d28oc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdGhyZWUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgZm91cihzZWxmKTogcGFzc1xuXG4gICA+Pj4gQS5tZW1iZXJzXG4gICAoXCdfX21vZHVsZV9fXCcsIFwnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJywgXCdmb3VyXCcpXG5cbldoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gZm9yICpBKiBnZXRzIGV4ZWN1dGVkLCB0aGUgcHJvY2VzcyBiZWdpbnNcbndpdGggY2FsbGluZyB0aGUgbWV0YWNsYXNzXCdzIGBgX19wcmVwYXJlX18oKWBgIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSBgYGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YGAuICBUaGF0IG1hcHBpbmcgcmVjb3JkcyB0aGUgbWV0aG9kc1xuYW5kIGF0dHJpYnV0ZXMgb2YgKkEqIGFzIHRoZXkgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjbGFzc1xuc3RhdGVtZW50LiBPbmNlIHRob3NlIGRlZmluaXRpb25zIGFyZSBleGVjdXRlZCwgdGhlIG9yZGVyZWQgZGljdGlvbmFyeVxuaXMgZnVsbHkgcG9wdWxhdGVkIGFuZCB0aGUgbWV0YWNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIGdldHNcbmludm9rZWQuICBUaGF0IG1ldGhvZCBidWlsZHMgdGhlIG5ldyB0eXBlIGFuZCBpdCBzYXZlcyB0aGUgb3JkZXJlZFxuZGljdGlvbmFyeSBrZXlzIGluIGFuIGF0dHJpYnV0ZSBjYWxsZWQgYGBtZW1iZXJzYGAuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG5gYGlzaW5zdGFuY2UoKWBgIGFuZCBgYGlzc3ViY2xhc3MoKWBgIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyBgYGFiYy5BQkNNZXRhYGAgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzXG5pbiBvcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKWBgLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcylgYC5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuICAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nIGBgaXNpbnN0YW5jZSgpYGAgYW5kXG4gICAgICBgYGlzc3ViY2xhc3MoKWBgIGJlaGF2aW9yIHRocm91Z2ggYGBfX2luc3RhbmNlY2hlY2tfXygpYGAgYW5kXG4gICAgICBgYF9fc3ViY2xhc3NjaGVja19fKClgYCwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGluIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgYGBhYmNgYFxuICAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgYGB4KGFyZzEsIGFyZzIsIC4uLilgYCBpcyBhIHNob3J0aGFuZCBmb3JcbiAgIGBgeC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pYGAuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkXG5kaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZSBwcm92aWRlcyBhXG5gYE11dGFibGVNYXBwaW5nYGAgYWJzdHJhY3QgYmFzZSBjbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzXG5mcm9tIGEgYmFzZSBzZXQgb2YgYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgLFxuYGBfX2RlbGl0ZW1fXygpYGAsIGFuZCBgYGtleXMoKWBgLiBNdXRhYmxlIHNlcXVlbmNlcyBzaG91bGQgcHJvdmlkZVxubWV0aG9kcyBgYGFwcGVuZCgpYGAsIGBgY291bnQoKWBgLCBgYGluZGV4KClgYCwgYGBleHRlbmQoKWBgLFxuYGBpbnNlcnQoKWBgLCBgYHBvcCgpYGAsIGBgcmVtb3ZlKClgYCwgYGByZXZlcnNlKClgYCBhbmQgYGBzb3J0KClgYCxcbmxpa2UgUHl0aG9uIHN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZFxuaW1wbGVtZW50IGFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgYGBfX2FkZF9fKClgYCwgYGBfX3JhZGRfXygpYGAsXG5gYF9faWFkZF9fKClgYCwgYGBfX211bF9fKClgYCwgYGBfX3JtdWxfXygpYGAgYW5kIGBgX19pbXVsX18oKWBgXG5kZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0XG5pcyByZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9fY29udGFpbnNfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlIGBgaW5gYFxub3BlcmF0b3I7IGZvciBtYXBwaW5ncywgYGBpbmBgIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuXCd0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgLCB0aGUgbWVtYmVyc2hpcFxuICAgdGVzdCBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhIGBgX19pdGVyX18oKWBgLCB0aGVuIHRoZSBvbGRcbiAgIHNlcXVlbmNlIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgYGBfX2dldGl0ZW1fXygpYGAsIHNlZSAqdGhpc1xuICAgc2VjdGlvbiBpbiB0aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggKyB5YGAsIHdoZXJlXG4gICAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fYWRkX18oKWBgIG1ldGhvZCxcbiAgIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlIGBgX19kaXZtb2RfXygpYGAgbWV0aG9kIHNob3VsZCBiZVxuICAgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBfX2Zsb29yZGl2X18oKWBgIGFuZCBgYF9fbW9kX18oKWBgOyBpdFxuICAgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvIGBgX190cnVlZGl2X18oKWBgLiAgTm90ZSB0aGF0XG4gICBgYF9fcG93X18oKWBgIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gYGBwb3coKWBgIGZ1bmN0aW9uXG4gICBpcyB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCxcbiAgIGBgZGl2bW9kKClgYCwgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsXG4gICBgYHxgYCkgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHlcbiAgIGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yXG4gICBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4IC0geWBgLCB3aGVyZSAqeSogaXMgYW5cbiAgIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX3JzdWJfXygpYGAgbWV0aG9kLFxuICAgYGB5Ll9fcnN1Yl9fKHgpYGAgaXMgY2FsbGVkIGlmIGBgeC5fX3N1Yl9fKHkpYGAgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgYGBwb3coKWBgIHdpbGwgbm90IHRyeSBjYWxsaW5nIGBgX19ycG93X18oKWBgXG4gICAodGhlIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgLz1gYCwgYGAvLz1gYCwgYGAlPWBgLFxuICAgYGAqKj1gYCwgYGA8PD1gYCwgYGA+Pj1gYCwgYGAmPWBgLCBgYF49YGAsIGBgfD1gYCkuICBUaGVzZSBtZXRob2RzXG4gICBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGUgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmRcbiAgIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaCBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsXG4gICAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWRcbiAgIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvXG4gICBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgYGB4ICs9IHlgYCwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGFcbiAgIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9faWFkZF9fKHkpYGAgaXNcbiAgIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZG9lcyBub3QgZGVmaW5lIGFcbiAgIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9fYWRkX18oeSlgYCBhbmQgYGB5Ll9fcmFkZF9fKHgpYGAgYXJlXG4gICBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGBgeCArIHlgYC5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChgYC1gYCwgYGArYGAsXG4gICBgYGFicygpYGAgYW5kIGBgfmBgKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNvbXBsZXgoKWBgLFxuICAgYGBpbnQoKWBgLCBgYGZsb2F0KClgYCBhbmQgYGByb3VuZCgpYGAuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2ZcbiAgIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5pbmRleCgpYGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gYGBiaW4oKWBgLCBgYGhleCgpYGAgYW5kIGBgb2N0KClgYCBmdW5jdGlvbnMpLiBNdXN0IHJldHVyblxuICAgYW4gaW50ZWdlci5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwXG49PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIGN1c3RvbSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlIG9ubHlcbmd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90IGluXG50aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb246XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzIGBgX19oYXNoX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCB0aGF0IGFyZSBpbXBsZW1lbnRlZFxuYnkgYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2ZcbnRoZXNlIG1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWxcbndoZW4gaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50KCJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb25cbnByb3ZpZGVzIHNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGVcbmludGVycHJldGVyLCBhdCB0aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZlxuc3BlY2lhbCBtZXRob2RzICh0aGUgc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0XG5pdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgYGBfX2FkZF9fKClgYCkgZmFpbHMgdGhlIG9wZXJhdGlvbiBpc1xuICAgIG5vdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKLSAnc3RyaW5nLW1ldGhvZHMnOiAnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5ncyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLCBhbG9uZyB3aXRoXG50aGUgYWRkaXRpb25hbCBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdy5cblxuU3RyaW5ncyBhbHNvIHN1cHBvcnQgdHdvIHN0eWxlcyBvZiBzdHJpbmcgZm9ybWF0dGluZywgb25lIHByb3ZpZGluZyBhXG5sYXJnZSBkZWdyZWUgb2YgZmxleGliaWxpdHkgYW5kIGN1c3RvbWl6YXRpb24gKHNlZSBgYHN0ci5mb3JtYXQoKWBgLFxuKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBhbmQgKlN0cmluZyBGb3JtYXR0aW5nKikgYW5kIHRoZSBvdGhlciBiYXNlZCBvblxuQyBgYHByaW50ZmBgIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2YgdHlwZXNcbmFuZCBpcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3IgdGhlXG5jYXNlcyBpdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSBgYHJlYGAgbW9kdWxlKS5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuc3RyLmNhc2Vmb2xkKClcblxuICAgUmV0dXJuIGEgY2FzZWZvbGRlZCBjb3B5IG9mIHRoZSBzdHJpbmcuIENhc2Vmb2xkZWQgc3RyaW5ncyBtYXkgYmVcbiAgIHVzZWQgZm9yIGNhc2VsZXNzIG1hdGNoaW5nLlxuXG4gICBDYXNlZm9sZGluZyBpcyBzaW1pbGFyIHRvIGxvd2VyY2FzaW5nIGJ1dCBtb3JlIGFnZ3Jlc3NpdmUgYmVjYXVzZVxuICAgaXQgaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIGFsbCBjYXNlIGRpc3RpbmN0aW9ucyBpbiBhIHN0cmluZy4gRm9yXG4gICBleGFtcGxlLCB0aGUgR2VybWFuIGxvd2VyY2FzZSBsZXR0ZXIgYGBcJ1x4YzNceDlmXCdgYCBpcyBlcXVpdmFsZW50IHRvXG4gICBgYCJzcyJgYC4gU2luY2UgaXQgaXMgYWxyZWFkeSBsb3dlcmNhc2UsIGBgbG93ZXIoKWBgIHdvdWxkIGRvXG4gICBub3RoaW5nIHRvIGBgXCdceGMzXHg5ZlwnYGA7IGBgY2FzZWZvbGQoKWBgIGNvbnZlcnRzIGl0IHRvIGBgInNzImBgLlxuXG4gICBUaGUgY2FzZWZvbGRpbmcgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0XG4gICBlbmNvZGluZyBpcyBgYFwndXRmLThcJ2BgLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50XG4gICBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyBgYFwnc3RyaWN0XCdgYCxcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSBgYFVuaWNvZGVFcnJvcmBgLiBPdGhlclxuICAgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCwgYGBcJ3JlcGxhY2VcJ2BgLFxuICAgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCwgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZCBhbnkgb3RoZXIgbmFtZVxuICAgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZVxuICAgQ2xhc3NlcyouIEZvciBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmRcbiAgIEVuY29kaW5ncyouXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLlxuXG5zdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2ZcbiAgIHN1ZmZpeGVzIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdFxuICAgdGhhdCBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyhbdGFic2l6ZV0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKGBgXFx0YGApLCBvbmUgb3IgbW9yZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiB0aGVcbiAgIHJlc3VsdCB1bnRpbCB0aGUgY3VycmVudCBjb2x1bW4gaXMgZXF1YWwgdG8gdGhlIG5leHQgdGFiIHBvc2l0aW9uLlxuICAgKFRoZSB0YWIgY2hhcmFjdGVyIGl0c2VsZiBpcyBub3QgY29waWVkLikgIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgbmV3bGluZSAoYGBcXG5gYCkgb3IgcmV0dXJuIChgYFxccmBgKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudFxuICAgY29sdW1uIGlzIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWRcbiAgIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbiAgIE5vdGU6IFRoZSBgYGZpbmQoKWBgIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBvbmx5IGlmIHlvdSBuZWVkIHRvIGtub3cgdGhlXG4gICAgIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LCB1c2VcbiAgICAgdGhlIGBgaW5gYCBvcGVyYXRvcjpcblxuICAgICAgICA+Pj4gXCdQeVwnIGluIFwnUHl0aG9uXCdcbiAgICAgICAgVHJ1ZVxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG5zdHIuZm9ybWF0X21hcChtYXBwaW5nKVxuXG4gICBTaW1pbGFyIHRvIGBgc3RyLmZvcm1hdCgqKm1hcHBpbmcpYGAsIGV4Y2VwdCB0aGF0IGBgbWFwcGluZ2BgIGlzXG4gICB1c2VkIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgYGBkaWN0YGAgLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yXG4gICBleGFtcGxlIGBgbWFwcGluZ2BgIGlzIGEgZGljdCBzdWJjbGFzczpcblxuICAgPj4+IGNsYXNzIERlZmF1bHQoZGljdCk6XG4gICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIGtleVxuICAgLi4uXG4gICA+Pj4gXCd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9XCcuZm9ybWF0X21hcChEZWZhdWx0KG5hbWU9XCdHdWlkb1wnKSlcbiAgIFwnR3VpZG8gd2FzIGJvcm4gaW4gY291bnRyeVwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGBmaW5kKClgYCwgYnV0IHJhaXNlIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyXG4gICBgYGNgYCBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyBgYFRydWVgYDpcbiAgIGBgYy5pc2FscGhhKClgYCwgYGBjLmlzZGVjaW1hbCgpYGAsIGBgYy5pc2RpZ2l0KClgYCwgb3JcbiAgIGBgYy5pc251bWVyaWMoKWBgLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgIGZvcm0gZGVjaW1hbC1yYWRpeCBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG4gICBVc2UgYGBrZXl3b3JkLmlza2V5d29yZCgpYGAgdG8gdGVzdCBmb3IgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgc3VjaFxuICAgYXMgYGBkZWZgYCBhbmQgYGBjbGFzc2BgLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBudW1lcmljIGNoYXJhY3RlcnMsXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBOdW1lcmljXG4gICBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZVxuICAgdGhlIFVuaWNvZGUgbnVtZXJpYyB2YWx1ZSBwcm9wZXJ0eSwgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTlxuICAgT05FIEZJRlRILiAgRm9ybWFsbHksIG51bWVyaWMgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCB0aGVcbiAgIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCwgTnVtZXJpY19UeXBlPURlY2ltYWwgb3JcbiAgIE51bWVyaWNfVHlwZT1OdW1lcmljLlxuXG5zdHIuaXNwcmludGFibGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBwcmludGFibGUgb3IgdGhlXG4gICBzdHJpbmcgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIE5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZVxuICAgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZSBhc1xuICAgIk90aGVyIiBvciAiU2VwYXJhdG9yIiwgZXhjZXB0aW5nIHRoZSBBU0NJSSBzcGFjZSAoMHgyMCkgd2hpY2ggaXNcbiAgIGNvbnNpZGVyZWQgcHJpbnRhYmxlLiAgKE5vdGUgdGhhdCBwcmludGFibGUgY2hhcmFjdGVycyBpbiB0aGlzXG4gICBjb250ZXh0IGFyZSB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIGVzY2FwZWQgd2hlbiBgYHJlcHIoKWBgIGlzXG4gICBpbnZva2VkIG9uIGEgc3RyaW5nLiAgSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGhhbmRsaW5nIG9mIHN0cmluZ3NcbiAgIHdyaXR0ZW4gdG8gYGBzeXMuc3Rkb3V0YGAgb3IgYGBzeXMuc3RkZXJyYGAuKVxuXG5zdHIuaXNzcGFjZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgV2hpdGVzcGFjZVxuICAgY2hhcmFjdGVycyAgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJPdGhlciIgb3IgIlNlcGFyYXRvciIgYW5kIHRob3NlIHdpdGggYmlkaXJlY3Rpb25hbFxuICAgcHJvcGVydHkgYmVpbmcgb25lIG9mICJXUyIsICJCIiwgb3IgIlMiLlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBBIGBgVHlwZUVycm9yYGAgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlXG4gICBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gKml0ZXJhYmxlKiwgaW5jbHVkaW5nIGBgYnl0ZXNgYCBvYmplY3RzLlxuICAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byBgYGxlbihzKWBgLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBUaGUgbG93ZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgXCdzcGFjaW91cyAgIFwnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICBgYHN0ci50cmFuc2xhdGUoKWBgLlxuXG4gICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZ1xuICAgVW5pY29kZSBvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgKHN0cmluZ3Mgb2YgbGVuZ3RoIDEpIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIChvZiBhcmJpdHJhcnkgbGVuZ3Rocykgb3IgTm9uZS5cbiAgIENoYXJhY3RlciBrZXlzIHdpbGwgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cbiAgIElmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsXG4gICBhbmQgaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkXG4gICB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuICBJZiB0aGVyZSBpcyBhIHRoaXJkXG4gICBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0b1xuICAgTm9uZSBpbiB0aGUgcmVzdWx0LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGByZmluZCgpYGAgYnV0IHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YipcbiAgIGlzIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gYGBsZW4ocylgYC5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgYGBOb25lYGAsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3JcbiAgIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgYGByc3BsaXQoKWBgIGJlaGF2ZXMgbGlrZSBgYHNwbGl0KClgYFxuICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5yc3RyaXAoKVxuICAgXCcgICBzcGFjaW91c1wnXG4gICA+Pj4gXCdtaXNzaXNzaXBwaVwnLnJzdHJpcChcJ2lwelwnKVxuICAgXCdtaXNzaXNzXCdcblxuc3RyLnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgYGAtMWBgLCB0aGVuIHRoZXJlIGlzXG4gICBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlICp1bml2ZXJzYWwgbmV3bGluZXMqIGFwcHJvYWNoIHRvXG4gICBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCdhYiBjXFxuXFxuZGUgZmdcXHJrbFxcclxcblwnLnNwbGl0bGluZXMoKWBgIHJldHVybnNcbiAgIGBgW1wnYWIgY1wnLCBcJ1wnLCBcJ2RlIGZnXCcsIFwna2xcJ11gYCwgd2hpbGUgdGhlIHNhbWUgY2FsbCB3aXRoXG4gICBgYHNwbGl0bGluZXMoVHJ1ZSlgYCByZXR1cm5zIGBgW1wnYWIgY1xcblwnLCBcJ1xcblwnLCBcJ2RlIGZnXFxyXCcsXG4gICBcJ2tsXFxyXFxuXCddYGAuXG5cbiAgIFVubGlrZSBgYHNwbGl0KClgYCB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpc1xuICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWxcbiAgIGxpbmUgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS4gTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlIHRoYXRcbiAgIGBgcy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gc2BgLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAuLi4gICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpXG4gICAgICAuLi5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUobWFwKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgKm1hcCogd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgVW5pY29kZSBvcmRpbmFsc1xuICAgKGludGVnZXJzKSB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIGBgTm9uZWBgLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byBgYE5vbmVgYCBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlIGBgc3RyLm1ha2V0cmFucygpYGAgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIE5vdGU6IEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyXG4gICAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWVcbiAgICAgYGBlbmNvZGluZ3MuY3AxMjUxYGAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLiAgTm90ZSB0aGF0IGBgc3RyLnVwcGVyKCkuaXN1cHBlcigpYGAgbWlnaHRcbiAgIGJlIGBgRmFsc2VgYCBpZiBgYHNgYCBjb250YWlucyB1bmNhc2VkIGNoYXJhY3RlcnMgb3IgaWYgdGhlIFVuaWNvZGVcbiAgIGNhdGVnb3J5IG9mIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyKHMpIGlzIG5vdCAiTHUiIChMZXR0ZXIsXG4gICB1cHBlcmNhc2UpLCBidXQgZS5nLiAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbiAgIFRoZSB1cHBlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuXG4nLAorICdzcGVjaWFsbmFtZXMnOiAnXG5TcGVjaWFsIG1ldGhvZCBuYW1lc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBjYW4gaW1wbGVtZW50IGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGJ5IHNwZWNpYWxcbnN5bnRheCAoc3VjaCBhcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3Igc3Vic2NyaXB0aW5nIGFuZCBzbGljaW5nKSBieVxuZGVmaW5pbmcgbWV0aG9kcyB3aXRoIHNwZWNpYWwgbmFtZXMuIFRoaXMgaXMgUHl0aG9uXCdzIGFwcHJvYWNoIHRvXG4qb3BlcmF0b3Igb3ZlcmxvYWRpbmcqLCBhbGxvd2luZyBjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gYmVoYXZpb3JcbndpdGggcmVzcGVjdCB0byBsYW5ndWFnZSBvcGVyYXRvcnMuICBGb3IgaW5zdGFuY2UsIGlmIGEgY2xhc3MgZGVmaW5lc1xuYSBtZXRob2QgbmFtZWQgYGBfX2dldGl0ZW1fXygpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzXG5jbGFzcywgdGhlbiBgYHhbaV1gYCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYGB0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsXG5pKWBgLiAgRXhjZXB0IHdoZXJlIG1lbnRpb25lZCwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBhbiBvcGVyYXRpb24gcmFpc2VcbmFuIGV4Y2VwdGlvbiB3aGVuIG5vIGFwcHJvcHJpYXRlIG1ldGhvZCBpcyBkZWZpbmVkICh0eXBpY2FsbHlcbmBgQXR0cmlidXRlRXJyb3JgYCBvciBgYFR5cGVFcnJvcmBgKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG5gYE5vZGVMaXN0YGAgaW50ZXJmYWNlIGluIHRoZSBXM0NcJ3MgRG9jdW1lbnQgT2JqZWN0IE1vZGVsLilcblxuXG5CYXNpYyBjdXN0b21pemF0aW9uXG49PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX2luZm8oKVsyXWBgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzXG4gICAgIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgYGB4Lm5hbWVgYClcbmZvciBjbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yIGBgc2VsZmBgKS4gIGBgbmFtZWBgIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlXG4gICBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgYGBfX2dldGF0dHJfXygpYGAgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiBgYF9fZ2V0YXR0cl9fKClgYCBhbmQgYGBfX3NldGF0dHJfXygpYGAuKSBUaGlzIGlzIGRvbmUgYm90aFxuICAgZm9yIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgYGBfX2dldGF0dHJfXygpYGBcbiAgIHdvdWxkIGhhdmUgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGVcbiAgIHRoYXQgYXQgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnlcbiAgIG5vdCBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lc1xuICAgYGBfX2dldGF0dHJfXygpYGAsIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzc1xuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBlaXRoZXIgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYC4gVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKVxuICAgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uIEluIG9yZGVyXG4gICB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvblxuICAgc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG9cbiAgIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpYGAuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzXG4gICAgIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4IG9yXG4gICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmIGBgX19zZXRhdHRyX18oKWBgIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKWBgLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSBgYF9fc2V0YXR0cl9fKClgYCBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiBgYGRlbCBvYmoubmFtZWBgIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiBgYGRpcigpYGAgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuIGBgZGlyKClgYCBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgYGBfX2RpY3RfX2BgLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgYGBOb25lYGAgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgLCBhbmRcbmBgX19kZWxldGVfXygpYGAuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsXG5pdCBpcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsIGBgYS54YGAgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoIGBgYS5fX2RpY3RfX1tcJ3hcJ11gYCwgdGhlblxuYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXWBgLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbmBgdHlwZShhKWBgIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgYGBhLnhgYC5cbkhvdyB0aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiBgYGFgYDpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgYGB4Ll9fZ2V0X18oYSlgYC5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsIGBgYS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6IGBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKWBgLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsIGBgQS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgIGBgQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKWBgLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiBgYGFgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYHN1cGVyYGAsIHRoZW4gdGhlIGJpbmRpbmcgYGBzdXBlcihCLFxuICAgb2JqKS5tKClgYCBzZWFyY2hlcyBgYG9iai5fX2NsYXNzX18uX19tcm9fX2BgIGZvciB0aGUgYmFzZSBjbGFzc1xuICAgYGBBYGAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGBgQmBgIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3JcbiAgIHdpdGggdGhlIGNhbGw6IGBgQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pYGAuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAgYW5kIGBgX19kZWxldGVfXygpYGAuXG5JZiBpdCBkb2VzIG5vdCBkZWZpbmUgYGBfX2dldF9fKClgYCwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsXG5yZXR1cm4gdGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGVcbm9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyBgYF9fc2V0X18oKWBgXG5hbmQvb3IgYGBfX2RlbGV0ZV9fKClgYCwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXNcbm5laXRoZXIsIGl0IGlzIGEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzXG5kZWZpbmUgYm90aCBgYF9fZ2V0X18oKWBgIGFuZCBgYF9fc2V0X18oKWBgLCB3aGlsZSBub24tZGF0YVxuZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZSBgYF9fZ2V0X18oKWBgIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aFxuYGBfX3NldF9fKClgYCBhbmQgYGBfX2dldF9fKClgYCBkZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvblxuaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluIGNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmVcbm92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nIGBgc3RhdGljbWV0aG9kKClgYCBhbmQgYGBjbGFzc21ldGhvZCgpYGApXG5hcmUgaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSBgYHByb3BlcnR5KClgYCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzIGBgQXR0cmlidXRlRXJyb3JgYC4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgYGBcJ19fZGljdF9fXCdgYCB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXMgZGVmaW5pbmdcbiAgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbnN0YW5jZXMuIElmIHdlYWtcbiAgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZCBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgYGBpbnRgYCwgYGBzdHJgYCBhbmRcbiAgYGB0dXBsZWBgLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3MgbWF5XG4gIGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyBgYHR5cGUoKWBgLiBUaGUgY2xhc3MgYm9keVxuaXMgZXhlY3V0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgY2xhc3MgbmFtZSBpcyBib3VuZCBsb2NhbGx5IHRvXG50aGUgcmVzdWx0IG9mIGBgdHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKWBgLlxuXG5UaGUgY2xhc3MgY3JlYXRpb24gcHJvY2VzcyBjYW4gYmUgY3VzdG9taXNlZCBieSBwYXNzaW5nIHRoZVxuYGBtZXRhY2xhc3NgYCBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoIGBgTXlDbGFzc2BgIGFuZCBgYE15U3ViY2xhc3NgYCBhcmVcbmluc3RhbmNlcyBvZiBgYE1ldGFgYDpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuIGBgdHlwZSgpYGAgaXNcbiAgdXNlZFxuXG4qIGlmIGFuIGV4cGxpY2l0IG1ldGFjbGFzcyBpcyBnaXZlbiBhbmQgaXQgaXMgKm5vdCogYW4gaW5zdGFuY2Ugb2ZcbiAgYGB0eXBlKClgYCwgdGhlbiBpdCBpcyB1c2VkIGRpcmVjdGx5IGFzIHRoZSBtZXRhY2xhc3NcblxuKiBpZiBhbiBpbnN0YW5jZSBvZiBgYHR5cGUoKWBgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuIGBgdHlwZShjbHMpYGApIG9mIGFsbFxuc3BlY2lmaWVkIGJhc2UgY2xhc3Nlcy4gVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgb25lIHdoaWNoIGlzIGFcbnN1YnR5cGUgb2YgKmFsbCogb2YgdGhlc2UgY2FuZGlkYXRlIG1ldGFjbGFzc2VzLiBJZiBub25lIG9mIHRoZVxuY2FuZGlkYXRlIG1ldGFjbGFzc2VzIG1lZXRzIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uXG53aWxsIGZhaWwgd2l0aCBgYFR5cGVFcnJvcmBgLlxuXG5cblByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaGFzIGJlZW4gaWRlbnRpZmllZCwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBwcmVwYXJlZC4gSWYgdGhlIG1ldGFjbGFzcyBoYXMgYSBgYF9fcHJlcGFyZV9fYGBcbmF0dHJpYnV0ZSwgaXQgaXMgY2FsbGVkIGFzIGBgbmFtZXNwYWNlID0gbWV0YWNsYXNzLl9fcHJlcGFyZV9fKG5hbWUsXG5iYXNlcywgKiprd2RzKWBgICh3aGVyZSB0aGUgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaWYgYW55LCBjb21lXG5mcm9tIHRoZSBjbGFzcyBkZWZpbml0aW9uKS5cblxuSWYgdGhlIG1ldGFjbGFzcyBoYXMgbm8gYGBfX3ByZXBhcmVfX2BgIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBpbml0aWFsaXNlZCBhcyBhbiBlbXB0eSBgYGRpY3QoKWBgIGluc3RhbmNlLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcbiAgICAgIEludHJvZHVjZWQgdGhlIGBgX19wcmVwYXJlX19gYCBuYW1lc3BhY2UgaG9va1xuXG5cbkV4ZWN1dGluZyB0aGUgY2xhc3MgYm9keVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkIChhcHByb3hpbWF0ZWx5KSBhcyBgYGV4ZWMoYm9keSwgZ2xvYmFscygpLFxubmFtZXNwYWNlKWBgLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvIGBgZXhlYygpYGAgaXNcbnRoYXQgbGV4aWNhbCBzY29waW5nIGFsbG93cyB0aGUgY2xhc3MgYm9keSAoaW5jbHVkaW5nIGFueSBtZXRob2RzKSB0b1xucmVmZXJlbmNlIG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYW5kIG91dGVyIHNjb3BlcyB3aGVuIHRoZSBjbGFzc1xuZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIGEgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIGV2ZW4gd2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIHRoZSBmdW5jdGlvbixcbm1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHN0aWxsIGNhbm5vdCBzZWUgbmFtZXMgZGVmaW5lZCBhdCB0aGVcbmNsYXNzIHNjb3BlLiBDbGFzcyB2YXJpYWJsZXMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBmaXJzdFxucGFyYW1ldGVyIG9mIGluc3RhbmNlIG9yIGNsYXNzIG1ldGhvZHMsIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgYWxsXG5mcm9tIHN0YXRpYyBtZXRob2RzLlxuXG5cbkNyZWF0aW5nIHRoZSBjbGFzcyBvYmplY3Rcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgY2xhc3MgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBieSBleGVjdXRpbmcgdGhlIGNsYXNzXG5ib2R5LCB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBgYG1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKWBgICh0aGUgYWRkaXRpb25hbCBrZXl3b3JkcyBwYXNzZWQgaGVyZSBhcmUgdGhlIHNhbWVcbmFzIHRob3NlIHBhc3NlZCB0byBgYF9fcHJlcGFyZV9fYGApLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiBgYHN1cGVyKClgYC4gYGBfX2NsYXNzX19gYCBpcyBhbiBpbXBsaWNpdCBjbG9zdXJlXG5yZWZlcmVuY2UgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaWYgYW55IG1ldGhvZHMgaW4gYSBjbGFzcyBib2R5IHJlZmVyXG50byBlaXRoZXIgYGBfX2NsYXNzX19gYCBvciBgYHN1cGVyYGAuIFRoaXMgYWxsb3dzIHRoZSB6ZXJvIGFyZ3VtZW50XG5mb3JtIG9mIGBgc3VwZXIoKWBgIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgY2xhc3MgYmVpbmcgZGVmaW5lZFxuYmFzZWQgb24gbGV4aWNhbCBzY29waW5nLCB3aGlsZSB0aGUgY2xhc3Mgb3IgaW5zdGFuY2UgdGhhdCB3YXMgdXNlZCB0b1xubWFrZSB0aGUgY3VycmVudCBjYWxsIGlzIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIG1ldGhvZC5cblxuQWZ0ZXIgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNsYXNzXG5kZWNvcmF0b3JzIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIChpZiBhbnkpIGFuZCB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyB0aGUgZGVmaW5lZCBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMzUqKiAtIE5ldyBzdXBlclxuICAgICAgRGVzY3JpYmVzIHRoZSBpbXBsaWNpdCBgYF9fY2xhc3NfX2BgIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIG1lbWJlcnNcbndlcmUgZGVmaW5lZDpcblxuICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOlxuXG4gICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6XG4gICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpXG5cbiAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXN1bHQgPSB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdChuYW1lc3BhY2UpKVxuICAgICAgICAgICByZXN1bHQubWVtYmVycyA9IHR1cGxlKG5hbWVzcGFjZSlcbiAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuXG4gICBjbGFzcyBBKG1ldGFjbGFzcz1PcmRlcmVkQ2xhc3MpOlxuICAgICAgIGRlZiBvbmUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdHdvKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHRocmVlKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIGZvdXIoc2VsZik6IHBhc3NcblxuICAgPj4+IEEubWVtYmVyc1xuICAgKFwnX19tb2R1bGVfX1wnLCBcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCcsIFwnZm91clwnKVxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciAqQSogZ2V0cyBleGVjdXRlZCwgdGhlIHByb2Nlc3MgYmVnaW5zXG53aXRoIGNhbGxpbmcgdGhlIG1ldGFjbGFzc1wncyBgYF9fcHJlcGFyZV9fKClgYCBtZXRob2Qgd2hpY2ggcmV0dXJucyBhblxuZW1wdHkgYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHNcbmFuZCBhdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCBnZXRzXG5pbnZva2VkLiAgVGhhdCBtZXRob2QgYnVpbGRzIHRoZSBuZXcgdHlwZSBhbmQgaXQgc2F2ZXMgdGhlIG9yZGVyZWRcbmRpY3Rpb25hcnkga2V5cyBpbiBhbiBhdHRyaWJ1dGUgY2FsbGVkIGBgbWVtYmVyc2BgLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuYGBpc2luc3RhbmNlKClgYCBhbmQgYGBpc3N1YmNsYXNzKClgYCBidWlsdC1pbiBmdW5jdGlvbnMuXG5cbkluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgYGBhYmMuQUJDTWV0YWBgIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kc1xuaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcylgYC5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpYGAuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMgY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE5KiogLSBJbnRyb2R1Y2luZyBBYnN0cmFjdCBCYXNlIENsYXNzZXNcbiAgICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyBgYGlzaW5zdGFuY2UoKWBgIGFuZFxuICAgICAgYGBpc3N1YmNsYXNzKClgYCBiZWhhdmlvciB0aHJvdWdoIGBgX19pbnN0YW5jZWNoZWNrX18oKWBgIGFuZFxuICAgICAgYGBfX3N1YmNsYXNzY2hlY2tfXygpYGAsIHdpdGggbW90aXZhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5XG4gICAgICBpbiB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlIGBgYWJjYGBcbiAgICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsIGBgeChhcmcxLCBhcmcyLCAuLi4pYGAgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICBgYHguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKWBgLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggYGAwIDw9IGsgPCBOYGBcbndoZXJlICpOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2hcbmRlZmluZSBhIHJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGVcbnRoZSBtZXRob2RzIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVtcygpYGAsIGBgZ2V0KClgYCxcbmBgY2xlYXIoKWBgLCBgYHNldGRlZmF1bHQoKWBgLCBgYHBvcCgpYGAsIGBgcG9waXRlbSgpYGAsIGBgY29weSgpYGAsXG5hbmQgYGB1cGRhdGUoKWBgIGJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2VzblwndCBkZWZpbmUgYSBgYF9fYm9vbF9fKClgYCBtZXRob2QgYW5kIHdob3NlIGBgX19sZW5fXygpYGBcbiAgIG1ldGhvZCByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IubGVuZ3RoX2hpbnQoKWBgLiBTaG91bGQgcmV0dXJuIGFuXG4gICBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW5cbiAgIHRoZSBhY3R1YWwgbGVuZ3RoKS4gVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgYGA+PWBgIDAuIFRoaXNcbiAgIG1ldGhvZCBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3JcbiAgIGNvcnJlY3RuZXNzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy4gIEFcbiAgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGhcbiAgYGBOb25lYGAuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiBgYHNlbGZba2V5XWBgLiBGb3Igc2VxdWVuY2VcbiAgIHR5cGVzLCB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuXG4gICBOb3RlIHRoYXQgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlXG4gICBjbGFzcyB3aXNoZXMgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZVxuICAgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLiBJZiAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsXG4gICBgYFR5cGVFcnJvcmBgIG1heSBiZSByYWlzZWQ7IGlmIG9mIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mXG4gICBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mXG4gICBuZWdhdGl2ZSB2YWx1ZXMpLCBgYEluZGV4RXJyb3JgYCBzaG91bGQgYmUgcmFpc2VkLiBGb3IgbWFwcGluZ1xuICAgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGUgY29udGFpbmVyKSwgYGBLZXlFcnJvcmBgXG4gICBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiBgYGZvcmBgIGxvb3BzIGV4cGVjdCB0aGF0IGFuIGBgSW5kZXhFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgYGBfX2dldGl0ZW1fXygpYGBcbiAgIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCBgYGtleXMoKWBgLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgYGBfX3JldmVyc2VkX18oKWBgIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZVxuICAgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlXG4gICBwcm90b2NvbCAoYGBfX2xlbl9fKClgYCBhbmQgYGBfX2dldGl0ZW1fXygpYGApLiAgT2JqZWN0cyB0aGF0XG4gICBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbCBzaG91bGQgb25seSBwcm92aWRlXG4gICBgYF9fcmV2ZXJzZWRfXygpYGAgaWYgdGhleSBjYW4gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzXG4gICBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnkgYGByZXZlcnNlZCgpYGAuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzIChgYGluYGAgYW5kIGBgbm90IGluYGApIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuXG5cbkVtdWxhdGluZyBudW1lcmljIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZW11bGF0ZSBudW1lcmljIG9iamVjdHMuXG5NZXRob2RzIGNvcnJlc3BvbmRpbmcgdG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZVxucGFydGljdWxhciBraW5kIG9mIG51bWJlciBpbXBsZW1lbnRlZCAoZS5nLiwgYml0d2lzZSBvcGVyYXRpb25zIGZvclxubm9uLWludGVncmFsIG51bWJlcnMpIHNob3VsZCBiZSBsZWZ0IHVuZGVmaW5lZC5cblxub2JqZWN0Ll9fYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19zdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX211bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCxcbiAgIGBgZGl2bW9kKClgYCwgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsXG4gICBgYHxgYCkuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCArIHlgYCwgd2hlcmVcbiAgICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19hZGRfXygpYGAgbWV0aG9kLFxuICAgYGB4Ll9fYWRkX18oeSlgYCBpcyBjYWxsZWQuICBUaGUgYGBfX2Rpdm1vZF9fKClgYCBtZXRob2Qgc2hvdWxkIGJlXG4gICB0aGUgZXF1aXZhbGVudCB0byB1c2luZyBgYF9fZmxvb3JkaXZfXygpYGAgYW5kIGBgX19tb2RfXygpYGA7IGl0XG4gICBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gYGBfX3RydWVkaXZfXygpYGAuICBOb3RlIHRoYXRcbiAgIGBgX19wb3dfXygpYGAgc2hvdWxkIGJlIGRlZmluZWQgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkXG4gICBhcmd1bWVudCBpZiB0aGUgdGVybmFyeSB2ZXJzaW9uIG9mIHRoZSBidWlsdC1pbiBgYHBvdygpYGAgZnVuY3Rpb25cbiAgIGlzIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gYGBOb3RJbXBsZW1lbnRlZGBgLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgLFxuICAgYGBkaXZtb2QoKWBgLCBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCxcbiAgIGBgfGBgKSB3aXRoIHJlZmxlY3RlZCAoc3dhcHBlZCkgb3BlcmFuZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seVxuICAgY2FsbGVkIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZ1xuICAgb3BlcmF0aW9uIGFuZCB0aGUgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcy4gWzJdICBGb3JcbiAgIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggLSB5YGAsIHdoZXJlICp5KiBpcyBhblxuICAgaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fcnN1Yl9fKClgYCBtZXRob2QsXG4gICBgYHkuX19yc3ViX18oeClgYCBpcyBjYWxsZWQgaWYgYGB4Ll9fc3ViX18oeSlgYCByZXR1cm5zXG4gICAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSBgYHBvdygpYGAgd2lsbCBub3QgdHJ5IGNhbGxpbmcgYGBfX3Jwb3dfXygpYGBcbiAgICh0aGUgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdCBvcGVyYW5kXCdzXG4gICAgIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2QgZm9yIHRoZVxuICAgICBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdCBvcGVyYW5kXCdzXG4gICAgIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3NlcyB0b1xuICAgICBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoYGArPWBgLCBgYC09YGAsIGBgKj1gYCwgYGAvPWBgLCBgYC8vPWBgLCBgYCU9YGAsXG4gICBgYCoqPWBgLCBgYDw8PWBgLCBgYD4+PWBgLCBgYCY9YGAsIGBgXj1gYCwgYGB8PWBgKS4gIFRoZXNlIG1ldGhvZHNcbiAgIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZSBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZFxuICAgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSxcbiAgICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZCBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZFxuICAgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWwgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgdG9cbiAgIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCBgYHggKz0geWBgLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYVxuICAgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2lhZGRfXygpYGAgbWV0aG9kLCBgYHguX19pYWRkX18oeSlgYCBpc1xuICAgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBkZWZpbmUgYVxuICAgYGBfX2lhZGRfXygpYGAgbWV0aG9kLCBgYHguX19hZGRfXyh5KWBgIGFuZCBgYHkuX19yYWRkX18oeClgYCBhcmVcbiAgIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgYGB4ICsgeWBgLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGBgLWBgLCBgYCtgYCxcbiAgIGBgYWJzKClgYCBhbmQgYGB+YGApLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgY29tcGxleCgpYGAsXG4gICBgYGludCgpYGAsIGBgZmxvYXQoKWBgIGFuZCBgYHJvdW5kKClgYC4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZlxuICAgdGhlIGFwcHJvcHJpYXRlIHR5cGUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYG9wZXJhdG9yLmluZGV4KClgYC4gIEFsc28gY2FsbGVkIHdoZW5ldmVyXG4gICBQeXRob24gbmVlZHMgYW4gaW50ZWdlciBvYmplY3QgKHN1Y2ggYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlXG4gICBidWlsdC1pbiBgYGJpbigpYGAsIGBgaGV4KClgYCBhbmQgYGBvY3QoKWBgIGZ1bmN0aW9ucykuIE11c3QgcmV0dXJuXG4gICBhbiBpbnRlZ2VyLlxuXG5cbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgYGB3aXRoYGAgc3RhdGVtZW50LiBUaGUgY29udGV4dFxubWFuYWdlciBoYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZVxuY29udGV4dCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlXG5ub3JtYWxseSBpbnZva2VkIHVzaW5nIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qVGhlIHdpdGggc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyXG5tZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBgYHdpdGhgYFxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSBgYGFzYGAgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgYGBOb25lYGAuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0IGBgX19leGl0X18oKWBgIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuXG5TcGVjaWFsIG1ldGhvZCBsb29rdXBcbj09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3IgY3VzdG9tIGNsYXNzZXMsIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHNwZWNpYWwgbWV0aG9kcyBhcmUgb25seVxuZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpZiBkZWZpbmVkIG9uIGFuIG9iamVjdFwncyB0eXBlLCBub3QgaW5cbnRoZSBvYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIFRoYXQgYmVoYXZpb3VyIGlzIHRoZSByZWFzb24gd2h5XG50aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuIGV4Y2VwdGlvbjpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18gPSBsYW1iZGE6IDVcbiAgID4+PiBsZW4oYylcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogb2JqZWN0IG9mIHR5cGUgXCdDXCcgaGFzIG5vIGxlbigpXG5cblRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYmVoYXZpb3VyIGxpZXMgd2l0aCBhIG51bWJlciBvZiBzcGVjaWFsXG5tZXRob2RzIHN1Y2ggYXMgYGBfX2hhc2hfXygpYGAgYW5kIGBgX19yZXByX18oKWBgIHRoYXQgYXJlIGltcGxlbWVudGVkXG5ieSBhbGwgb2JqZWN0cywgaW5jbHVkaW5nIHR5cGUgb2JqZWN0cy4gSWYgdGhlIGltcGxpY2l0IGxvb2t1cCBvZlxudGhlc2UgbWV0aG9kcyB1c2VkIHRoZSBjb252ZW50aW9uYWwgbG9va3VwIHByb2Nlc3MsIHRoZXkgd291bGQgZmFpbFxud2hlbiBpbnZva2VkIG9uIHRoZSB0eXBlIG9iamVjdCBpdHNlbGY6XG5cbiAgID4+PiAxIC5fX2hhc2hfXygpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiBpbnQuX19oYXNoX18oKSA9PSBoYXNoKGludClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogZGVzY3JpcHRvciBcJ19faGFzaF9fXCcgb2YgXCdpbnRcJyBvYmplY3QgbmVlZHMgYW4gYXJndW1lbnRcblxuSW5jb3JyZWN0bHkgYXR0ZW1wdGluZyB0byBpbnZva2UgYW4gdW5ib3VuZCBtZXRob2Qgb2YgYSBjbGFzcyBpbiB0aGlzXG53YXkgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIFwnbWV0YWNsYXNzIGNvbmZ1c2lvblwnLCBhbmQgaXMgYXZvaWRlZFxuYnkgYnlwYXNzaW5nIHRoZSBpbnN0YW5jZSB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzOlxuXG4gICA+Pj4gdHlwZSgxKS5fX2hhc2hfXygxKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gdHlwZShpbnQpLl9faGFzaF9fKGludCkgPT0gaGFzaChpbnQpXG4gICBUcnVlXG5cbkluIGFkZGl0aW9uIHRvIGJ5cGFzc2luZyBhbnkgaW5zdGFuY2UgYXR0cmlidXRlcyBpbiB0aGUgaW50ZXJlc3Qgb2ZcbmNvcnJlY3RuZXNzLCBpbXBsaWNpdCBzcGVjaWFsIG1ldGhvZCBsb29rdXAgZ2VuZXJhbGx5IGFsc28gYnlwYXNzZXNcbnRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBldmVuIG9mIHRoZSBvYmplY3RcJ3MgbWV0YWNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgTWV0YSh0eXBlKTpcbiAgIC4uLiAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgcHJpbnQoIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGNsYXNzIEMob2JqZWN0LCBtZXRhY2xhc3M9TWV0YSk6XG4gICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIDEwXG4gICAuLi4gICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICAgIHByaW50KCJDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fKCkgICAgICAgICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSBpbnN0YW5jZVxuICAgQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gdHlwZShjKS5fX2xlbl9fKGMpICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSB0eXBlXG4gICBNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gbGVuKGMpICAgICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXQgbG9va3VwXG4gICAxMFxuXG5CeXBhc3NpbmcgdGhlIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWFjaGluZXJ5IGluIHRoaXMgZmFzaGlvblxucHJvdmlkZXMgc2lnbmlmaWNhbnQgc2NvcGUgZm9yIHNwZWVkIG9wdGltaXNhdGlvbnMgd2l0aGluIHRoZVxuaW50ZXJwcmV0ZXIsIGF0IHRoZSBjb3N0IG9mIHNvbWUgZmxleGliaWxpdHkgaW4gdGhlIGhhbmRsaW5nIG9mXG5zcGVjaWFsIG1ldGhvZHMgKHRoZSBzcGVjaWFsIG1ldGhvZCAqbXVzdCogYmUgc2V0IG9uIHRoZSBjbGFzcyBvYmplY3Rcbml0c2VsZiBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50bHkgaW52b2tlZCBieSB0aGUgaW50ZXJwcmV0ZXIpLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEl0ICppcyogcG9zc2libGUgaW4gc29tZSBjYXNlcyB0byBjaGFuZ2UgYW4gb2JqZWN0XCdzIHR5cGUsIHVuZGVyXG4gICAgY2VydGFpbiBjb250cm9sbGVkIGNvbmRpdGlvbnMuIEl0IGdlbmVyYWxseSBpc25cJ3QgYSBnb29kIGlkZWFcbiAgICB0aG91Z2gsIHNpbmNlIGl0IGNhbiBsZWFkIHRvIHNvbWUgdmVyeSBzdHJhbmdlIGJlaGF2aW91ciBpZiBpdCBpc1xuICAgIGhhbmRsZWQgaW5jb3JyZWN0bHkuXG5cblsyXSBGb3Igb3BlcmFuZHMgb2YgdGhlIHNhbWUgdHlwZSwgaXQgaXMgYXNzdW1lZCB0aGF0IGlmIHRoZSBub24tXG4gICAgcmVmbGVjdGVkIG1ldGhvZCAoc3VjaCBhcyBgYF9fYWRkX18oKWBgKSBmYWlscyB0aGUgb3BlcmF0aW9uIGlzXG4gICAgbm90IHN1cHBvcnRlZCwgd2hpY2ggaXMgd2h5IHRoZSByZWZsZWN0ZWQgbWV0aG9kIGlzIG5vdCBjYWxsZWQuXG4nLAorICdzdHJpbmctbWV0aG9kcyc6ICdcblN0cmluZyBNZXRob2RzXG4qKioqKioqKioqKioqKlxuXG5TdHJpbmdzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMsIGFsb25nIHdpdGhcbnRoZSBhZGRpdGlvbmFsIG1ldGhvZHMgZGVzY3JpYmVkIGJlbG93LlxuXG5TdHJpbmdzIGFsc28gc3VwcG9ydCB0d28gc3R5bGVzIG9mIHN0cmluZyBmb3JtYXR0aW5nLCBvbmUgcHJvdmlkaW5nIGFcbmxhcmdlIGRlZ3JlZSBvZiBmbGV4aWJpbGl0eSBhbmQgY3VzdG9taXphdGlvbiAoc2VlIGBgc3RyLmZvcm1hdCgpYGAsXG4qRm9ybWF0IFN0cmluZyBTeW50YXgqIGFuZCAqU3RyaW5nIEZvcm1hdHRpbmcqKSBhbmQgdGhlIG90aGVyIGJhc2VkIG9uXG5DIGBgcHJpbnRmYGAgc3R5bGUgZm9ybWF0dGluZyB0aGF0IGhhbmRsZXMgYSBuYXJyb3dlciByYW5nZSBvZiB0eXBlc1xuYW5kIGlzIHNsaWdodGx5IGhhcmRlciB0byB1c2UgY29ycmVjdGx5LCBidXQgaXMgb2Z0ZW4gZmFzdGVyIGZvciB0aGVcbmNhc2VzIGl0IGNhbiBoYW5kbGUgKCpwcmludGYtc3R5bGUgU3RyaW5nIEZvcm1hdHRpbmcqKS5cblxuVGhlICpUZXh0IFByb2Nlc3NpbmcgU2VydmljZXMqIHNlY3Rpb24gb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgY292ZXJzXG5hIG51bWJlciBvZiBvdGhlciBtb2R1bGVzIHRoYXQgcHJvdmlkZSB2YXJpb3VzIHRleHQgcmVsYXRlZCB1dGlsaXRpZXNcbihpbmNsdWRpbmcgcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQgaW4gdGhlIGBgcmVgYCBtb2R1bGUpLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWRcbiAgIGFuZCB0aGUgcmVzdCBsb3dlcmNhc2VkLlxuXG5zdHIuY2FzZWZvbGQoKVxuXG4gICBSZXR1cm4gYSBjYXNlZm9sZGVkIGNvcHkgb2YgdGhlIHN0cmluZy4gQ2FzZWZvbGRlZCBzdHJpbmdzIG1heSBiZVxuICAgdXNlZCBmb3IgY2FzZWxlc3MgbWF0Y2hpbmcuXG5cbiAgIENhc2Vmb2xkaW5nIGlzIHNpbWlsYXIgdG8gbG93ZXJjYXNpbmcgYnV0IG1vcmUgYWdncmVzc2l2ZSBiZWNhdXNlXG4gICBpdCBpcyBpbnRlbmRlZCB0byByZW1vdmUgYWxsIGNhc2UgZGlzdGluY3Rpb25zIGluIGEgc3RyaW5nLiBGb3JcbiAgIGV4YW1wbGUsIHRoZSBHZXJtYW4gbG93ZXJjYXNlIGxldHRlciBgYFwnXHhjM1x4OWZcJ2BgIGlzIGVxdWl2YWxlbnQgdG9cbiAgIGBgInNzImBgLiBTaW5jZSBpdCBpcyBhbHJlYWR5IGxvd2VyY2FzZSwgYGBsb3dlcigpYGAgd291bGQgZG9cbiAgIG5vdGhpbmcgdG8gYGBcJ1x4YzNceDlmXCdgYDsgYGBjYXNlZm9sZCgpYGAgY29udmVydHMgaXQgdG8gYGAic3MiYGAuXG5cbiAgIFRoZSBjYXNlZm9sZGluZyBhbGdvcml0aG0gaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuc3RyLmNlbnRlcih3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIGNlbnRlcmVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmVcbiAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5lbmNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKVxuXG4gICBSZXR1cm4gYW4gZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgYXMgYSBieXRlcyBvYmplY3QuIERlZmF1bHRcbiAgIGVuY29kaW5nIGlzIGBgXCd1dGYtOFwnYGAuICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnRcbiAgIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzIGBgXCdzdHJpY3RcJ2BgLFxuICAgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhIGBgVW5pY29kZUVycm9yYGAuIE90aGVyXG4gICBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLCBgYFwncmVwbGFjZVwnYGAsXG4gICBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgLCBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kIGFueSBvdGhlciBuYW1lXG4gICByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZSBzZWN0aW9uICpDb2RlYyBCYXNlXG4gICBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZSBzZWN0aW9uICpTdGFuZGFyZFxuICAgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5leHBhbmR0YWJzKHRhYnNpemU9OClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRhYiBwb3NpdGlvbnMgb2NjdXIgZXZlcnkgKnRhYnNpemUqIGNoYXJhY3RlcnNcbiAgIChkZWZhdWx0IGlzIDgsIGdpdmluZyB0YWIgcG9zaXRpb25zIGF0IGNvbHVtbnMgMCwgOCwgMTYgYW5kIHNvIG9uKS5cbiAgIFRvIGV4cGFuZCB0aGUgc3RyaW5nLCB0aGUgY3VycmVudCBjb2x1bW4gaXMgc2V0IHRvIHplcm8gYW5kIHRoZVxuICAgc3RyaW5nIGlzIGV4YW1pbmVkIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuICBJZiB0aGUgY2hhcmFjdGVyIGlzIGFcbiAgIHRhYiAoYGBcXHRgYCksIG9uZSBvciBtb3JlIHNwYWNlIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGluIHRoZVxuICAgcmVzdWx0IHVudGlsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBlcXVhbCB0byB0aGUgbmV4dCB0YWIgcG9zaXRpb24uXG4gICAoVGhlIHRhYiBjaGFyYWN0ZXIgaXRzZWxmIGlzIG5vdCBjb3BpZWQuKSAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICBuZXdsaW5lIChgYFxcbmBgKSBvciByZXR1cm4gKGBgXFxyYGApLCBpdCBpcyBjb3BpZWQgYW5kIHRoZSBjdXJyZW50XG4gICBjb2x1bW4gaXMgcmVzZXQgdG8gemVyby4gIEFueSBvdGhlciBjaGFyYWN0ZXIgaXMgY29waWVkIHVuY2hhbmdlZFxuICAgYW5kIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSBvbmUgcmVnYXJkbGVzcyBvZiBob3cgdGhlXG4gICBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgd2hlbiBwcmludGVkLlxuXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoKVxuICAgXCcwMSAgICAgIDAxMiAgICAgMDEyMyAgICAwMTIzNFwnXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoNClcbiAgIFwnMDEgIDAxMiAwMTIzICAgIDAxMjM0XCdcblxuc3RyLmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIGluIHRoZSBzbGljZSBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIGlmICpzdWIqIGlzIG5vdCBmb3VuZC5cblxuICAgTm90ZTogVGhlIGBgZmluZCgpYGAgbWV0aG9kIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgeW91IG5lZWQgdG8ga25vdyB0aGVcbiAgICAgcG9zaXRpb24gb2YgKnN1YiouICBUbyBjaGVjayBpZiAqc3ViKiBpcyBhIHN1YnN0cmluZyBvciBub3QsIHVzZVxuICAgICB0aGUgYGBpbmBgIG9wZXJhdG9yOlxuXG4gICAgICAgID4+PiBcJ1B5XCcgaW4gXCdQeXRob25cJ1xuICAgICAgICBUcnVlXG5cbnN0ci5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKVxuXG4gICBQZXJmb3JtIGEgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uLiAgVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzXG4gICBtZXRob2QgaXMgY2FsbGVkIGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHNcbiAgIGRlbGltaXRlZCBieSBicmFjZXMgYGB7fWBgLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXJcbiAgIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYVxuICAga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgZWFjaFxuICAgcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZVxuICAgY29ycmVzcG9uZGluZyBhcmd1bWVudC5cblxuICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMilcbiAgIFwnVGhlIHN1bSBvZiAxICsgMiBpcyAzXCdcblxuICAgU2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXNcbiAgIGZvcm1hdHRpbmcgb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybWF0IHN0cmluZ3MuXG5cbnN0ci5mb3JtYXRfbWFwKG1hcHBpbmcpXG5cbiAgIFNpbWlsYXIgdG8gYGBzdHIuZm9ybWF0KCoqbWFwcGluZylgYCwgZXhjZXB0IHRoYXQgYGBtYXBwaW5nYGAgaXNcbiAgIHVzZWQgZGlyZWN0bHkgYW5kIG5vdCBjb3BpZWQgdG8gYSBgYGRpY3RgYCAuICBUaGlzIGlzIHVzZWZ1bCBpZiBmb3JcbiAgIGV4YW1wbGUgYGBtYXBwaW5nYGAgaXMgYSBkaWN0IHN1YmNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgRGVmYXVsdChkaWN0KTpcbiAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6XG4gICAuLi4gICAgICAgICByZXR1cm4ga2V5XG4gICAuLi5cbiAgID4+PiBcJ3tuYW1lfSB3YXMgYm9ybiBpbiB7Y291bnRyeX1cJy5mb3JtYXRfbWFwKERlZmF1bHQobmFtZT1cJ0d1aWRvXCcpKVxuICAgXCdHdWlkbyB3YXMgYm9ybiBpbiBjb3VudHJ5XCdcblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYGZpbmQoKWBgLCBidXQgcmFpc2UgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQSBjaGFyYWN0ZXJcbiAgIGBgY2BgIGlzIGFscGhhbnVtZXJpYyBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zIGBgVHJ1ZWBgOlxuICAgYGBjLmlzYWxwaGEoKWBgLCBgYGMuaXNkZWNpbWFsKClgYCwgYGBjLmlzZGlnaXQoKWBgLCBvclxuICAgYGBjLmlzbnVtZXJpYygpYGAuXG5cbnN0ci5pc2FscGhhKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFiZXRpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEFscGhhYmV0aWNcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJMZXR0ZXIiLCBpLmUuLCB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHlcbiAgIGJlaW5nIG9uZSBvZiAiTG0iLCAiTHQiLCAiTHUiLCAiTGwiLCBvciAiTG8iLiAgTm90ZSB0aGF0IHRoaXMgaXNcbiAgIGRpZmZlcmVudCBmcm9tIHRoZSAiQWxwaGFiZXRpYyIgcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgVW5pY29kZVxuICAgU3RhbmRhcmQuXG5cbnN0ci5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkZWNpbWFsIGNoYXJhY3RlcnNcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIERlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGZyb20gZ2VuZXJhbCBjYXRlZ29yeSAiTmQiLiBUaGlzIGNhdGVnb3J5XG4gICBpbmNsdWRlcyBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBEaWdpdHMgaW5jbHVkZSBkZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFuZCBkaWdpdHMgdGhhdCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcsIHN1Y2ggYXMgdGhlXG4gICBjb21wYXRpYmlsaXR5IHN1cGVyc2NyaXB0IGRpZ2l0cy4gIEZvcm1hbGx5LCBhIGRpZ2l0IGlzIGEgY2hhcmFjdGVyXG4gICB0aGF0IGhhcyB0aGUgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0IG9yXG4gICBOdW1lcmljX1R5cGU9RGVjaW1hbC5cblxuc3RyLmlzaWRlbnRpZmllcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFjY29yZGluZyB0byB0aGVcbiAgIGxhbmd1YWdlIGRlZmluaXRpb24sIHNlY3Rpb24gKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyouXG5cbiAgIFVzZSBgYGtleXdvcmQuaXNrZXl3b3JkKClgYCB0byB0ZXN0IGZvciByZXNlcnZlZCBpZGVudGlmaWVycyBzdWNoXG4gICBhcyBgYGRlZmBgIGFuZCBgYGNsYXNzYGAuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIG51bWVyaWMgY2hhcmFjdGVycyxcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIE51bWVyaWNcbiAgIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlXG4gICB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LCBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OXG4gICBPTkUgRklGVEguICBGb3JtYWxseSwgbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIHRoZVxuICAgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0LCBOdW1lcmljX1R5cGU9RGVjaW1hbCBvclxuICAgTnVtZXJpY19UeXBlPU51bWVyaWMuXG5cbnN0ci5pc3ByaW50YWJsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHByaW50YWJsZSBvciB0aGVcbiAgIHN0cmluZyBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgTm9ucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlXG4gICB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlIGFzXG4gICAiT3RoZXIiIG9yICJTZXBhcmF0b3IiLCBleGNlcHRpbmcgdGhlIEFTQ0lJIHNwYWNlICgweDIwKSB3aGljaCBpc1xuICAgY29uc2lkZXJlZCBwcmludGFibGUuICAoTm90ZSB0aGF0IHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHRoaXNcbiAgIGNvbnRleHQgYXJlIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgZXNjYXBlZCB3aGVuIGBgcmVwcigpYGAgaXNcbiAgIGludm9rZWQgb24gYSBzdHJpbmcuICBJdCBoYXMgbm8gYmVhcmluZyBvbiB0aGUgaGFuZGxpbmcgb2Ygc3RyaW5nc1xuICAgd3JpdHRlbiB0byBgYHN5cy5zdGRvdXRgYCBvciBgYHN5cy5zdGRlcnJgYC4pXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBXaGl0ZXNwYWNlXG4gICBjaGFyYWN0ZXJzICBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIk90aGVyIiBvciAiU2VwYXJhdG9yIiBhbmQgdGhvc2Ugd2l0aCBiaWRpcmVjdGlvbmFsXG4gICBwcm9wZXJ0eSBiZWluZyBvbmUgb2YgIldTIiwgIkIiLCBvciAiUyIuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc3VwcGVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmpvaW4oaXRlcmFibGUpXG5cbiAgIFJldHVybiBhIHN0cmluZyB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBpbiB0aGVcbiAgICppdGVyYWJsZSogKml0ZXJhYmxlKi4gIEEgYGBUeXBlRXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGVyZSBhcmVcbiAgIGFueSBub24tc3RyaW5nIHZhbHVlcyBpbiAqaXRlcmFibGUqLCBpbmNsdWRpbmcgYGBieXRlc2BgIG9iamVjdHMuXG4gICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlIHN0cmluZyBwcm92aWRpbmcgdGhpcyBtZXRob2QuXG5cbnN0ci5sanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgbGVmdCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvIGBgbGVuKHMpYGAuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIFRoZSBsb3dlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbnN0YXRpYyBzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKVxuXG4gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3JcbiAgIGBgc3RyLnRyYW5zbGF0ZSgpYGAuXG5cbiAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nXG4gICBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyAoc3RyaW5ncyBvZiBsZW5ndGggMSkgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MgKG9mIGFyYml0cmFyeSBsZW5ndGhzKSBvciBOb25lLlxuICAgQ2hhcmFjdGVyIGtleXMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblxuICAgSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCxcbiAgIGFuZCBpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWRcbiAgIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gIElmIHRoZXJlIGlzIGEgdGhpcmRcbiAgIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvXG4gICBOb25lIGluIHRoZSByZXN1bHQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYHJmaW5kKClgYCBidXQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKlxuICAgaXMgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byBgYGxlbihzKWBgLlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG5zdHIucnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCogc3BsaXRzXG4gICBhcmUgZG9uZSwgdGhlICpyaWdodG1vc3QqIG9uZXMuICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yXG4gICBgYE5vbmVgYCwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvclxuICAgc3BsaXR0aW5nIGZyb20gdGhlIHJpZ2h0LCBgYHJzcGxpdCgpYGAgYmVoYXZlcyBsaWtlIGBgc3BsaXQoKWBgXG4gICB3aGljaCBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LlxuXG5zdHIucnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG5zdHIuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuICBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCpcbiAgIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgYGBtYXhzcGxpdCsxYGBcbiAgIGVsZW1lbnRzKS4gIElmICptYXhzcGxpdCogaXMgbm90IHNwZWNpZmllZCBvciBgYC0xYGAsIHRoZW4gdGhlcmUgaXNcbiAgIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgYGBcJzEsLDJcJy5zcGxpdChcJyxcJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJ1wnLCBcJzJcJ11gYCkuICBUaGUgKnNlcCpcbiAgIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgYGBcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgKS4gU3BsaXR0aW5nXG4gICBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtcJ1wnXWBgLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IgcmV0dXJuc1xuICAgYGBbXWBgLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJyAxICAyICAgMyAgXCcuc3BsaXQoKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCxcbiAgIGFuZCBgYFwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzIgICAzICBcJ11gYC5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gVGhpcyBtZXRob2QgdXNlcyB0aGUgKnVuaXZlcnNhbCBuZXdsaW5lcyogYXBwcm9hY2ggdG9cbiAgIHNwbGl0dGluZyBsaW5lcy4gTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3RcbiAgIHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZCB0cnVlLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJ2FiIGNcXG5cXG5kZSBmZ1xccmtsXFxyXFxuXCcuc3BsaXRsaW5lcygpYGAgcmV0dXJuc1xuICAgYGBbXCdhYiBjXCcsIFwnXCcsIFwnZGUgZmdcJywgXCdrbFwnXWBgLCB3aGlsZSB0aGUgc2FtZSBjYWxsIHdpdGhcbiAgIGBgc3BsaXRsaW5lcyhUcnVlKWBgIHJldHVybnMgYGBbXCdhYiBjXFxuXCcsIFwnXFxuXCcsIFwnZGUgZmdcXHJcJyxcbiAgIFwna2xcXHJcXG5cJ11gYC5cblxuICAgVW5saWtlIGBgc3BsaXQoKWBgIHdoZW4gYSBkZWxpbWl0ZXIgc3RyaW5nICpzZXAqIGlzIGdpdmVuLCB0aGlzXG4gICBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBsaXN0IGZvciB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgYSB0ZXJtaW5hbFxuICAgbGluZSBicmVhayBkb2VzIG5vdCByZXN1bHQgaW4gYW4gZXh0cmEgbGluZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZVxuICAgcmV0dXJuIGBgRmFsc2VgYC4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rXG4gICBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzXG4gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLiBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgdGhhdFxuICAgYGBzLnN3YXBjYXNlKCkuc3dhcGNhc2UoKSA9PSBzYGAuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgIC4uLiAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgcylcbiAgICAgIC4uLlxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuc3RyLnRyYW5zbGF0ZShtYXApXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkXG4gICB0aHJvdWdoIHRoZSAqbWFwKiB3aGljaCBtdXN0IGJlIGEgZGljdGlvbmFyeSBvZiBVbmljb2RlIG9yZGluYWxzXG4gICAoaW50ZWdlcnMpIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgYGBOb25lYGAuICBVbm1hcHBlZFxuICAgY2hhcmFjdGVycyBhcmUgbGVmdCB1bnRvdWNoZWQuIENoYXJhY3RlcnMgbWFwcGVkIHRvIGBgTm9uZWBgIGFyZVxuICAgZGVsZXRlZC5cblxuICAgWW91IGNhbiB1c2UgYGBzdHIubWFrZXRyYW5zKClgYCB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiBtYXAgZnJvbVxuICAgY2hhcmFjdGVyLXRvLWNoYXJhY3RlciBtYXBwaW5ncyBpbiBkaWZmZXJlbnQgZm9ybWF0cy5cblxuICAgTm90ZTogQW4gZXZlbiBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBjaGFyYWN0ZXJcbiAgICAgbWFwcGluZyBjb2RlYyB1c2luZyB0aGUgYGBjb2RlY3NgYCBtb2R1bGUgKHNlZVxuICAgICBgYGVuY29kaW5ncy5jcDEyNTFgYCBmb3IgYW4gZXhhbXBsZSkuXG5cbnN0ci51cHBlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuICBOb3RlIHRoYXQgYGBzdHIudXBwZXIoKS5pc3VwcGVyKClgYCBtaWdodFxuICAgYmUgYGBGYWxzZWBgIGlmIGBgc2BgIGNvbnRhaW5zIHVuY2FzZWQgY2hhcmFjdGVycyBvciBpZiB0aGUgVW5pY29kZVxuICAgY2F0ZWdvcnkgb2YgdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXIocykgaXMgbm90ICJMdSIgKExldHRlcixcbiAgIHVwcGVyY2FzZSksIGJ1dCBlLmcuICJMdCIgKExldHRlciwgdGl0bGVjYXNlKS5cblxuICAgVGhlIHVwcGVyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIuemZpbGwod2lkdGgpXG5cbiAgIFJldHVybiB0aGUgbnVtZXJpYyBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCB6ZXJvcyBpbiBhIHN0cmluZyBvZlxuICAgbGVuZ3RoICp3aWR0aCouICBBIHNpZ24gcHJlZml4IGlzIGhhbmRsZWQgY29ycmVjdGx5LiAgVGhlIG9yaWdpbmFsXG4gICBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC5cbicsCiAgJ3N0cmluZ3MnOiAnXG5TdHJpbmcgYW5kIEJ5dGVzIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblN0cmluZyBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgc3RyaW5nbGl0ZXJhbCAgIDo6PSBbc3RyaW5ncHJlZml4XShzaG9ydHN0cmluZyB8IGxvbmdzdHJpbmcpXG4gICBzdHJpbmdwcmVmaXggICAgOjo9ICJyIiB8ICJ1IiB8ICJSIiB8ICJVIlxuICAgc2hvcnRzdHJpbmcgICAgIDo6PSAiXCciIHNob3J0c3RyaW5naXRlbSogIlwnIiB8IFwnIlwnIHNob3J0c3RyaW5naXRlbSogXCciXCdcbiAgIGxvbmdzdHJpbmcgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ3N0cmluZ2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nc3RyaW5naXRlbSogXCciIiJcJ1xuICAgc2hvcnRzdHJpbmdpdGVtIDo6PSBzaG9ydHN0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIGxvbmdzdHJpbmdpdGVtICA6Oj0gbG9uZ3N0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIHNob3J0c3RyaW5nY2hhciA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ3N0cmluZ2NoYXIgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBzdHJpbmdlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBzb3VyY2UgY2hhcmFjdGVyPlxuXG4gICBieXRlc2xpdGVyYWwgICA6Oj0gYnl0ZXNwcmVmaXgoc2hvcnRieXRlcyB8IGxvbmdieXRlcylcbiAgIGJ5dGVzcHJlZml4ICAgIDo6PSAiYiIgfCAiQiIgfCAiYnIiIHwgIkJyIiB8ICJiUiIgfCAiQlIiIHwgInJiIiB8ICJyQiIgfCAiUmIiIHwgIlJCIlxuICAgc2hvcnRieXRlcyAgICAgOjo9ICJcJyIgc2hvcnRieXRlc2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydGJ5dGVzaXRlbSogXCciXCdcbiAgIGxvbmdieXRlcyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nYnl0ZXNpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ2J5dGVzaXRlbSogXCciIiJcJ1xuICAgc2hvcnRieXRlc2l0ZW0gOjo9IHNob3J0Ynl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIGxvbmdieXRlc2l0ZW0gIDo6PSBsb25nYnl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIHNob3J0Ynl0ZXNjaGFyIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdieXRlc2NoYXIgIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGJ5dGVzZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSBgYHN0cmluZ3ByZWZpeGBgIG9yXG5gYGJ5dGVzcHJlZml4YGAgYW5kIHRoZSByZXN0IG9mIHRoZSBsaXRlcmFsLiBUaGUgc291cmNlIGNoYXJhY3RlciBzZXRcbmlzIGRlZmluZWQgYnkgdGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uOyBpdCBpcyBVVEYtOCBpZiBubyBlbmNvZGluZ1xuZGVjbGFyYXRpb24gaXMgZ2l2ZW4gaW4gdGhlIHNvdXJjZSBmaWxlOyBzZWUgc2VjdGlvbiAqRW5jb2RpbmdcbmRlY2xhcmF0aW9ucyouXG5cbkluIHBsYWluIEVuZ2xpc2g6IEJvdGggdHlwZXMgb2YgbGl0ZXJhbHMgY2FuIGJlIGVuY2xvc2VkIGluIG1hdGNoaW5nXG5zaW5nbGUgcXVvdGVzIChgYFwnYGApIG9yIGRvdWJsZSBxdW90ZXMgKGBgImBgKS4gIFRoZXkgY2FuIGFsc28gYmVcbmVuY2xvc2VkIGluIG1hdGNoaW5nIGdyb3VwcyBvZiB0aHJlZSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhlc2VcbmFyZSBnZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgKnRyaXBsZS1xdW90ZWQgc3RyaW5ncyopLiAgVGhlIGJhY2tzbGFzaFxuKGBgXFxgYCkgY2hhcmFjdGVyIGlzIHVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBvdGhlcndpc2UgaGF2ZSBhXG5zcGVjaWFsIG1lYW5pbmcsIHN1Y2ggYXMgbmV3bGluZSwgYmFja3NsYXNoIGl0c2VsZiwgb3IgdGhlIHF1b3RlXG5jaGFyYWN0ZXIuXG5cbkJ5dGVzIGxpdGVyYWxzIGFyZSBhbHdheXMgcHJlZml4ZWQgd2l0aCBgYFwnYlwnYGAgb3IgYGBcJ0JcJ2BgOyB0aGV5XG5wcm9kdWNlIGFuIGluc3RhbmNlIG9mIHRoZSBgYGJ5dGVzYGAgdHlwZSBpbnN0ZWFkIG9mIHRoZSBgYHN0cmBgIHR5cGUuXG5UaGV5IG1heSBvbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVyczsgYnl0ZXMgd2l0aCBhIG51bWVyaWMgdmFsdWUgb2ZcbjEyOCBvciBncmVhdGVyIG11c3QgYmUgZXhwcmVzc2VkIHdpdGggZXNjYXBlcy5cblxuQXMgb2YgUHl0aG9uIDMuMyBpdCBpcyBwb3NzaWJsZSBhZ2FpbiB0byBwcmVmaXggdW5pY29kZSBzdHJpbmdzIHdpdGggYVxuYGB1YGAgcHJlZml4IHRvIHNpbXBsaWZ5IG1haW50ZW5hbmNlIG9mIGR1YWwgMi54IGFuZCAzLnggY29kZWJhc2VzLlxuXG5Cb3RoIHN0cmluZyBhbmQgYnl0ZXMgbGl0ZXJhbHMgbWF5IG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCBhXG5sZXR0ZXIgYGBcJ3JcJ2BgIG9yIGBgXCdSXCdgYDsgc3VjaCBzdHJpbmdzIGFyZSBjYWxsZWQgKnJhdyBzdHJpbmdzKiBhbmRcbnRyZWF0IGJhY2tzbGFzaGVzIGFzIGxpdGVyYWwgY2hhcmFjdGVycy4gIEFzIGEgcmVzdWx0LCBpbiBzdHJpbmdcbmxpdGVyYWxzLCBgYFwnXFxVXCdgYCBhbmQgYGBcJ1xcdVwnYGAgZXNjYXBlcyBpbiByYXcgc3RyaW5ncyBhcmUgbm90IHRyZWF0ZWRcbnNwZWNpYWxseS4gR2l2ZW4gdGhhdCBQeXRob24gMi54XCdzIHJhdyB1bmljb2RlIGxpdGVyYWxzIGJlaGF2ZVxuZGlmZmVyZW50bHkgdGhhbiBQeXRob24gMy54XCdzIHRoZSBgYFwndXJcJ2BgIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSBgYFwncmJcJ2BgIHByZWZpeCBvZiByYXcgYnl0ZXMgbGl0ZXJhbHMgaGFzXG4gICBiZWVuIGFkZGVkIGFzIGEgc3lub255bSBvZiBgYFwnYnJcJ2BgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IFN1cHBvcnQgZm9yIHRoZSB1bmljb2RlIGxlZ2FjeSBsaXRlcmFsXG4gICAoYGB1XCd2YWx1ZVwnYGApIHdhcyByZWludHJvZHVjZWQgdG8gc2ltcGxpZnkgdGhlIG1haW50ZW5hbmNlIG9mIGR1YWxcbiAgIFB5dGhvbiAyLnggYW5kIDMueCBjb2RlYmFzZXMuIFNlZSAqKlBFUCA0MTQqKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSW4gdHJpcGxlLXF1b3RlZCBzdHJpbmdzLCB1bmVzY2FwZWQgbmV3bGluZXMgYW5kIHF1b3RlcyBhcmUgYWxsb3dlZFxuKGFuZCBhcmUgcmV0YWluZWQpLCBleGNlcHQgdGhhdCB0aHJlZSB1bmVzY2FwZWQgcXVvdGVzIGluIGEgcm93XG50ZXJtaW5hdGUgdGhlIHN0cmluZy4gIChBICJxdW90ZSIgaXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIG9wZW4gdGhlXG5zdHJpbmcsIGkuZS4gZWl0aGVyIGBgXCdgYCBvciBgYCJgYC4pXG5cblVubGVzcyBhbiBgYFwnclwnYGAgb3IgYGBcJ1JcJ2BgIHByZWZpeCBpcyBwcmVzZW50LCBlc2NhcGUgc2VxdWVuY2VzIGluXG5zdHJpbmdzIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gcnVsZXMgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5XG5TdGFuZGFyZCBDLiAgVGhlIHJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgRXNjYXBlIFNlcXVlbmNlICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbnwgYGBcXG5ld2xpbmVgYCAgICAgIHwgQmFja3NsYXNoIGFuZCBuZXdsaW5lIGlnbm9yZWQgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxcXGBgICAgICAgICAgICAgfCBCYWNrc2xhc2ggKGBgXFxgYCkgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxcJ2BgICAgICAgICAgICAgfCBTaW5nbGUgcXVvdGUgKGBgXCdgYCkgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFwiYGAgICAgICAgICAgICB8IERvdWJsZSBxdW90ZSAoYGAiYGApICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcYWBgICAgICAgICAgICAgfCBBU0NJSSBCZWxsIChCRUwpICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGJgYCAgICAgICAgICAgIHwgQVNDSUkgQmFja3NwYWNlIChCUykgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxmYGAgICAgICAgICAgICB8IEFTQ0lJIEZvcm1mZWVkIChGRikgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcbmBgICAgICAgICAgICAgfCBBU0NJSSBMaW5lZmVlZCAoTEYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHJgYCAgICAgICAgICAgIHwgQVNDSUkgQ2FycmlhZ2UgUmV0dXJuIChDUikgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx0YGAgICAgICAgICAgICB8IEFTQ0lJIEhvcml6b250YWwgVGFiIChUQUIpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcdmBgICAgICAgICAgICAgfCBBU0NJSSBWZXJ0aWNhbCBUYWIgKFZUKSAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXG9vb2BgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggb2N0YWwgdmFsdWUgKm9vbyogIHwgKDEsMykgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx4aGhgYCAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIGhleCB2YWx1ZSAqaGgqICAgICB8ICgyLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Fc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmcgbGl0ZXJhbHMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58IGBgXFxOe25hbWV9YGAgICAgICB8IENoYXJhY3RlciBuYW1lZCAqbmFtZSogaW4gdGhlICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8IFVuaWNvZGUgZGF0YWJhc2UgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcdXh4eHhgYCAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCAxNi1iaXQgaGV4IHZhbHVlICAgfCAoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCAqeHh4eCogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFV4eHh4eHh4eGBgICAgIHwgQ2hhcmFjdGVyIHdpdGggMzItYml0IGhleCB2YWx1ZSAgIHwgKDYpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHh4eHh4KiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiBBcyBpbiBTdGFuZGFyZCBDLCB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgYXJlIGFjY2VwdGVkLlxuXG4yLiBVbmxpa2UgaW4gU3RhbmRhcmQgQywgZXhhY3RseSB0d28gaGV4IGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cbjMuIEluIGEgYnl0ZXMgbGl0ZXJhbCwgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIGVzY2FwZXMgZGVub3RlIHRoZSBieXRlXG4gICB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4gSW4gYSBzdHJpbmcgbGl0ZXJhbCwgdGhlc2UgZXNjYXBlcyBkZW5vdGUgYVxuICAgVW5pY29kZSBjaGFyYWN0ZXIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuXG5cbjQuIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFN1cHBvcnQgZm9yIG5hbWUgYWxpYXNlcyBbMV0gaGFzIGJlZW5cbiAgIGFkZGVkLlxuXG41LiBJbmRpdmlkdWFsIGNvZGUgdW5pdHMgd2hpY2ggZm9ybSBwYXJ0cyBvZiBhIHN1cnJvZ2F0ZSBwYWlyIGNhbiBiZVxuICAgZW5jb2RlZCB1c2luZyB0aGlzIGVzY2FwZSBzZXF1ZW5jZS4gIEV4YWN0bHkgZm91ciBoZXggZGlnaXRzIGFyZVxuICAgcmVxdWlyZWQuXG5cbjYuIEFueSBVbmljb2RlIGNoYXJhY3RlciBjYW4gYmUgZW5jb2RlZCB0aGlzIHdheS4gIEV4YWN0bHkgZWlnaHQgaGV4XG4gICBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG5Vbmxpa2UgU3RhbmRhcmQgQywgYWxsIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBsZWZ0IGluIHRoZVxuc3RyaW5nIHVuY2hhbmdlZCwgaS5lLiwgKnRoZSBiYWNrc2xhc2ggaXMgbGVmdCBpbiB0aGUgc3RyaW5nKi4gIChUaGlzXG5iZWhhdmlvciBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmc6IGlmIGFuIGVzY2FwZSBzZXF1ZW5jZSBpcyBtaXN0eXBlZCxcbnRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIG1vcmUgZWFzaWx5IHJlY29nbml6ZWQgYXMgYnJva2VuLikgIEl0IGlzIGFsc29cbmltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZ1xubGl0ZXJhbHMgZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiB1bnJlY29nbml6ZWQgZXNjYXBlcyBmb3IgYnl0ZXNcbmxpdGVyYWxzLlxuXG5FdmVuIGluIGEgcmF3IHN0cmluZywgc3RyaW5nIHF1b3RlcyBjYW4gYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLFxuYnV0IHRoZSBiYWNrc2xhc2ggcmVtYWlucyBpbiB0aGUgc3RyaW5nOyBmb3IgZXhhbXBsZSwgYGByIlxcIiJgYCBpcyBhXG52YWxpZCBzdHJpbmcgbGl0ZXJhbCBjb25zaXN0aW5nIG9mIHR3byBjaGFyYWN0ZXJzOiBhIGJhY2tzbGFzaCBhbmQgYVxuZG91YmxlIHF1b3RlOyBgYHIiXFwiYGAgaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXdcbnN0cmluZyBjYW5ub3QgZW5kIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYVxucmF3IHN0cmluZyBjYW5ub3QgZW5kIGluIGEgc2luZ2xlIGJhY2tzbGFzaCogKHNpbmNlIHRoZSBiYWNrc2xhc2hcbndvdWxkIGVzY2FwZSB0aGUgZm9sbG93aW5nIHF1b3RlIGNoYXJhY3RlcikuICBOb3RlIGFsc28gdGhhdCBhIHNpbmdsZVxuYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aG9zZSB0d28gY2hhcmFjdGVyc1xuYXMgcGFydCBvZiB0aGUgc3RyaW5nLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLlxuJywKICAnc3Vic2NyaXB0aW9ucyc6ICdcblN1YnNjcmlwdGlvbnNcbioqKioqKioqKioqKipcblxuQSBzdWJzY3JpcHRpb24gc2VsZWN0cyBhbiBpdGVtIG9mIGEgc2VxdWVuY2UgKHN0cmluZywgdHVwbGUgb3IgbGlzdClcbm9yIG1hcHBpbmcgKGRpY3Rpb25hcnkpIG9iamVjdDpcblxuICAgc3Vic2NyaXB0aW9uIDo6PSBwcmltYXJ5ICJbIiBleHByZXNzaW9uX2xpc3QgIl0iXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgc3Vic2NyaXB0aW9uLFxuZS5nLiBhIGxpc3Qgb3IgZGljdGlvbmFyeS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBzdXBwb3J0XG5zdWJzY3JpcHRpb24gYnkgZGVmaW5pbmcgYSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbkZvciBidWlsdC1pbiBvYmplY3RzLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9iamVjdHMgdGhhdCBzdXBwb3J0XG5zdWJzY3JpcHRpb246XG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZywgdGhlIGV4cHJlc3Npb24gbGlzdCBtdXN0IGV2YWx1YXRlIHRvIGFuXG5vYmplY3Qgd2hvc2UgdmFsdWUgaXMgb25lIG9mIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nLCBhbmQgdGhlXG5zdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgdmFsdWUgaW4gdGhlIG1hcHBpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0XG5rZXkuICAoVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBhIHR1cGxlIGV4Y2VwdCBpZiBpdCBoYXMgZXhhY3RseSBvbmVcbml0ZW0uKVxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIHNlcXVlbmNlLCB0aGUgZXhwcmVzc2lvbiAobGlzdCkgbXVzdCBldmFsdWF0ZSB0b1xuYW4gaW50ZWdlciBvciBhIHNsaWNlIChhcyBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uKS5cblxuVGhlIGZvcm1hbCBzeW50YXggbWFrZXMgbm8gc3BlY2lhbCBwcm92aXNpb24gZm9yIG5lZ2F0aXZlIGluZGljZXMgaW5cbnNlcXVlbmNlczsgaG93ZXZlciwgYnVpbHQtaW4gc2VxdWVuY2VzIGFsbCBwcm92aWRlIGEgYGBfX2dldGl0ZW1fXygpYGBcbm1ldGhvZCB0aGF0IGludGVycHJldHMgbmVnYXRpdmUgaW5kaWNlcyBieSBhZGRpbmcgdGhlIGxlbmd0aCBvZiB0aGVcbnNlcXVlbmNlIHRvIHRoZSBpbmRleCAoc28gdGhhdCBgYHhbLTFdYGAgc2VsZWN0cyB0aGUgbGFzdCBpdGVtIG9mXG5gYHhgYCkuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhblxudGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2VxdWVuY2UsIGFuZCB0aGUgc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlXG5pdGVtIHdob3NlIGluZGV4IGlzIHRoYXQgdmFsdWUgKGNvdW50aW5nIGZyb20gemVybykuIFNpbmNlIHRoZSBzdXBwb3J0XG5mb3IgbmVnYXRpdmUgaW5kaWNlcyBhbmQgc2xpY2luZyBvY2N1cnMgaW4gdGhlIG9iamVjdFwnc1xuYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLCBzdWJjbGFzc2VzIG92ZXJyaWRpbmcgdGhpcyBtZXRob2Qgd2lsbCBuZWVkXG50byBleHBsaWNpdGx5IGFkZCB0aGF0IHN1cHBvcnQuXG5cbkEgc3RyaW5nXCdzIGl0ZW1zIGFyZSBjaGFyYWN0ZXJzLiAgQSBjaGFyYWN0ZXIgaXMgbm90IGEgc2VwYXJhdGUgZGF0YVxudHlwZSBidXQgYSBzdHJpbmcgb2YgZXhhY3RseSBvbmUgY2hhcmFjdGVyLlxuJywKICAndHJ1dGgnOiAiXG5UcnV0aCBWYWx1ZSBUZXN0aW5nXG4qKioqKioqKioqKioqKioqKioqXG5cbkFueSBvYmplY3QgY2FuIGJlIHRlc3RlZCBmb3IgdHJ1dGggdmFsdWUsIGZvciB1c2UgaW4gYW4gYGBpZmBgIG9yXG5gYHdoaWxlYGAgY29uZGl0aW9uIG9yIGFzIG9wZXJhbmQgb2YgdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyBiZWxvdy4gVGhlXG5mb2xsb3dpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGZhbHNlOlxuXG4qIGBgTm9uZWBgXG5cbiogYGBGYWxzZWBgXG5cbiogemVybyBvZiBhbnkgbnVtZXJpYyB0eXBlLCBmb3IgZXhhbXBsZSwgYGAwYGAsIGBgMC4wYGAsIGBgMGpgYC5cblxuKiBhbnkgZW1wdHkgc2VxdWVuY2UsIGZvciBleGFtcGxlLCBgYCcnYGAsIGBgKClgYCwgYGBbXWBgLlxuXG4qIGFueSBlbXB0eSBtYXBwaW5nLCBmb3IgZXhhbXBsZSwgYGB7fWBgLlxuXG4qIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcywgaWYgdGhlIGNsYXNzIGRlZmluZXMgYVxuICBgYF9fYm9vbF9fKClgYCBvciBgYF9fbGVuX18oKWBgIG1ldGhvZCwgd2hlbiB0aGF0IG1ldGhvZCByZXR1cm5zIHRoZVxuICBpbnRlZ2VyIHplcm8gb3IgYGBib29sYGAgdmFsdWUgYGBGYWxzZWBgLiBbMV1cblxuQWxsIG90aGVyIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0cnVlIC0tLSBzbyBvYmplY3RzIG9mIG1hbnkgdHlwZXMgYXJlXG5hbHdheXMgdHJ1ZS5cblxuT3BlcmF0aW9ucyBhbmQgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIEJvb2xlYW4gcmVzdWx0IGFsd2F5c1xucmV0dXJuIGBgMGBgIG9yIGBgRmFsc2VgYCBmb3IgZmFsc2UgYW5kIGBgMWBgIG9yIGBgVHJ1ZWBgIGZvciB0cnVlLFxudW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuIChJbXBvcnRhbnQgZXhjZXB0aW9uOiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zXG5gYG9yYGAgYW5kIGBgYW5kYGAgYWx3YXlzIHJldHVybiBvbmUgb2YgdGhlaXIgb3BlcmFuZHMuKVxuIiwKICAndHJ5JzogJ1xuVGhlIGBgdHJ5YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZVxuZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlIGBgdHJ5YGAgc3RhdGVtZW50XG5yYWlzZWQgdGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgYGBhc2BgIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLFxuaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyBgYGFzIHRhcmdldGBgLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSBgYHN5c2BgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbmBgc3lzLmV4Y19pbmZvKClgYC4gYGBzeXMuZXhjX2luZm8oKWBgIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2ZcbnRoZSBleGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdFxuKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW5cbnRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBgYHN5cy5leGNfaW5mbygpYGAgdmFsdWVzXG5hcmUgcmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsIGBgZWxzZWBgIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgYGB0cnlgYCBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSBgYGVsc2VgYCBjbGF1c2VcbmFyZSBub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nIGBgZXhjZXB0YGAgY2xhdXNlcy5cblxuSWYgYGBmaW5hbGx5YGAgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZVxuYGB0cnlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgYGBleGNlcHRgYCBhbmQgYGBlbHNlYGBcbmNsYXVzZXMuICBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90XG5oYW5kbGVkLCB0aGUgZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgYGBmaW5hbGx5YGAgY2xhdXNlIGlzXG5leGVjdXRlZC4gIElmIHRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mXG50aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAgSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSByYWlzZXMgYW5vdGhlclxuZXhjZXB0aW9uLCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3XG5leGNlcHRpb24uIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yXG5gYGJyZWFrYGAgc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cbicsCi0gJ3R5cGVzJzogJ1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLCBhbHRob3VnaCBzdWNoIGFkZGl0aW9uc1xud2lsbCBvZnRlbiBiZSBwcm92aWRlZCB2aWEgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5zdGVhZC5cblxuU29tZSBvZiB0aGUgdHlwZSBkZXNjcmlwdGlvbnMgYmVsb3cgY29udGFpbiBhIHBhcmFncmFwaCBsaXN0aW5nXG5cJ3NwZWNpYWwgYXR0cmlidXRlcy5cJyAgVGhlc2UgYXJlIGF0dHJpYnV0ZXMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGVcbmltcGxlbWVudGF0aW9uIGFuZCBhcmUgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZS4gIFRoZWlyIGRlZmluaXRpb25cbm1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuTm9uZVxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lIGBgTm9uZWBgLlxuICAgSXQgaXMgdXNlZCB0byBzaWduaWZ5IHRoZSBhYnNlbmNlIG9mIGEgdmFsdWUgaW4gbWFueSBzaXR1YXRpb25zLFxuICAgZS5nLiwgaXQgaXMgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnMgdGhhdCBkb25cJ3QgZXhwbGljaXRseSByZXR1cm5cbiAgIGFueXRoaW5nLiBJdHMgdHJ1dGggdmFsdWUgaXMgZmFsc2UuXG5cbk5vdEltcGxlbWVudGVkXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWVcbiAgIGBgTm90SW1wbGVtZW50ZWRgYC4gTnVtZXJpYyBtZXRob2RzIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBtYXlcbiAgIHJldHVybiB0aGlzIHZhbHVlIGlmIHRoZXkgZG8gbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciB0aGVcbiAgIG9wZXJhbmRzIHByb3ZpZGVkLiAgKFRoZSBpbnRlcnByZXRlciB3aWxsIHRoZW4gdHJ5IHRoZSByZWZsZWN0ZWRcbiAgIG9wZXJhdGlvbiwgb3Igc29tZSBvdGhlciBmYWxsYmFjaywgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRvci4pICBJdHNcbiAgIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbkVsbGlwc2lzXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGxpdGVyYWwgYGAuLi5gYCBvciB0aGVcbiAgIGJ1aWx0LWluIG5hbWUgYGBFbGxpcHNpc2BgLiAgSXRzIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbmBgbnVtYmVycy5OdW1iZXJgYFxuICAgVGhlc2UgYXJlIGNyZWF0ZWQgYnkgbnVtZXJpYyBsaXRlcmFscyBhbmQgcmV0dXJuZWQgYXMgcmVzdWx0cyBieVxuICAgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGFyaXRobWV0aWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgTnVtZXJpY1xuICAgb2JqZWN0cyBhcmUgaW1tdXRhYmxlOyBvbmNlIGNyZWF0ZWQgdGhlaXIgdmFsdWUgbmV2ZXIgY2hhbmdlcy5cbiAgIFB5dGhvbiBudW1iZXJzIGFyZSBvZiBjb3Vyc2Ugc3Ryb25nbHkgcmVsYXRlZCB0byBtYXRoZW1hdGljYWxcbiAgIG51bWJlcnMsIGJ1dCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBudW1lcmljYWwgcmVwcmVzZW50YXRpb25cbiAgIGluIGNvbXB1dGVycy5cblxuICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYW5kXG4gICBjb21wbGV4IG51bWJlcnM6XG5cbiAgIGBgbnVtYmVycy5JbnRlZ3JhbGBgXG4gICAgICBUaGVzZSByZXByZXNlbnQgZWxlbWVudHMgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHNldCBvZiBpbnRlZ2Vyc1xuICAgICAgKHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSkuXG5cbiAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIEludGVnZXJzIChgYGludGBgKVxuXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgbnVtYmVycyBpbiBhbiB1bmxpbWl0ZWQgcmFuZ2UsIHN1YmplY3QgdG9cbiAgICAgICAgIGF2YWlsYWJsZSAodmlydHVhbCkgbWVtb3J5IG9ubHkuICBGb3IgdGhlIHB1cnBvc2Ugb2Ygc2hpZnRcbiAgICAgICAgIGFuZCBtYXNrIG9wZXJhdGlvbnMsIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uIGlzIGFzc3VtZWQsIGFuZFxuICAgICAgICAgbmVnYXRpdmUgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB2YXJpYW50IG9mIDJcJ3NcbiAgICAgICAgIGNvbXBsZW1lbnQgd2hpY2ggZ2l2ZXMgdGhlIGlsbHVzaW9uIG9mIGFuIGluZmluaXRlIHN0cmluZyBvZlxuICAgICAgICAgc2lnbiBiaXRzIGV4dGVuZGluZyB0byB0aGUgbGVmdC5cblxuICAgICAgQm9vbGVhbnMgKGBgYm9vbGBgKVxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IHRoZSB0cnV0aCB2YWx1ZXMgRmFsc2UgYW5kIFRydWUuICBUaGUgdHdvXG4gICAgICAgICBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzIEZhbHNlIGFuZCBUcnVlIGFyZSB0aGUgb25seVxuICAgICAgICAgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGUgaW50ZWdlclxuICAgICAgICAgdHlwZSwgYW5kIEJvb2xlYW4gdmFsdWVzIGJlaGF2ZSBsaWtlIHRoZSB2YWx1ZXMgMCBhbmQgMSxcbiAgICAgICAgIHJlc3BlY3RpdmVseSwgaW4gYWxtb3N0IGFsbCBjb250ZXh0cywgdGhlIGV4Y2VwdGlvbiBiZWluZ1xuICAgICAgICAgdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZywgdGhlIHN0cmluZ3MgYGAiRmFsc2UiYGAgb3JcbiAgICAgICAgIGBgIlRydWUiYGAgYXJlIHJldHVybmVkLCByZXNwZWN0aXZlbHkuXG5cbiAgICAgIFRoZSBydWxlcyBmb3IgaW50ZWdlciByZXByZXNlbnRhdGlvbiBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB0aGVcbiAgICAgIG1vc3QgbWVhbmluZ2Z1bCBpbnRlcnByZXRhdGlvbiBvZiBzaGlmdCBhbmQgbWFzayBvcGVyYXRpb25zXG4gICAgICBpbnZvbHZpbmcgbmVnYXRpdmUgaW50ZWdlcnMuXG5cbiAgIGBgbnVtYmVycy5SZWFsYGAgKGBgZmxvYXRgYClcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBtYWNoaW5lLWxldmVsIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnRcbiAgICAgIG51bWJlcnMuIFlvdSBhcmUgYXQgdGhlIG1lcmN5IG9mIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmVcbiAgICAgIGFyY2hpdGVjdHVyZSAoYW5kIEMgb3IgSmF2YSBpbXBsZW1lbnRhdGlvbikgZm9yIHRoZSBhY2NlcHRlZFxuICAgICAgcmFuZ2UgYW5kIGhhbmRsaW5nIG9mIG92ZXJmbG93LiBQeXRob24gZG9lcyBub3Qgc3VwcG9ydCBzaW5nbGUtXG4gICAgICBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyczsgdGhlIHNhdmluZ3MgaW4gcHJvY2Vzc29yIGFuZFxuICAgICAgbWVtb3J5IHVzYWdlIHRoYXQgYXJlIHVzdWFsbHkgdGhlIHJlYXNvbiBmb3IgdXNpbmcgdGhlc2UgaXNcbiAgICAgIGR3YXJmZWQgYnkgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIG9iamVjdHMgaW4gUHl0aG9uLCBzbyB0aGVyZSBpc1xuICAgICAgbm8gcmVhc29uIHRvIGNvbXBsaWNhdGUgdGhlIGxhbmd1YWdlIHdpdGggdHdvIGtpbmRzIG9mIGZsb2F0aW5nXG4gICAgICBwb2ludCBudW1iZXJzLlxuXG4gICBgYG51bWJlcnMuQ29tcGxleGBgIChgYGNvbXBsZXhgYClcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMgYXMgYSBwYWlyIG9mIG1hY2hpbmUtbGV2ZWxcbiAgICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gIFRoZSBzYW1lIGNhdmVhdHMgYXBwbHlcbiAgICAgIGFzIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGFcbiAgICAgIGNvbXBsZXggbnVtYmVyIGBgemBgIGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgcmVhZC1vbmx5XG4gICAgICBhdHRyaWJ1dGVzIGBgei5yZWFsYGAgYW5kIGBgei5pbWFnYGAuXG5cblNlcXVlbmNlc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBvcmRlcmVkIHNldHMgaW5kZXhlZCBieSBub24tbmVnYXRpdmVcbiAgIG51bWJlcnMuIFRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4gICBpdGVtcyBvZiBhIHNlcXVlbmNlLiBXaGVuIHRoZSBsZW5ndGggb2YgYSBzZXF1ZW5jZSBpcyAqbiosIHRoZVxuICAgaW5kZXggc2V0IGNvbnRhaW5zIHRoZSBudW1iZXJzIDAsIDEsIC4uLiwgKm4qLTEuICBJdGVtICppKiBvZlxuICAgc2VxdWVuY2UgKmEqIGlzIHNlbGVjdGVkIGJ5IGBgYVtpXWBgLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6IGBgYVtpOmpdYGAgc2VsZWN0cyBhbGwgaXRlbXMgd2l0aFxuICAgaW5kZXggKmsqIHN1Y2ggdGhhdCAqaSogYGA8PWBgICprKiBgYDxgYCAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogYGBhW2k6ajprXWBgIHNlbGVjdHMgYWxsIGl0ZW1zIG9mICphKiB3aXRoIGluZGV4ICp4KlxuICAgd2hlcmUgYGB4ID0gaSArIG4qa2BgLCAqbiogYGA+PWBgIGBgMGBgIGFuZCAqaSogYGA8PWBgICp4KiBgYDxgYFxuICAgKmoqLlxuXG4gICBTZXF1ZW5jZXMgYXJlIGRpc3Rpbmd1aXNoZWQgYWNjb3JkaW5nIHRvIHRoZWlyIG11dGFiaWxpdHk6XG5cbiAgIEltbXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIEFuIG9iamVjdCBvZiBhbiBpbW11dGFibGUgc2VxdWVuY2UgdHlwZSBjYW5ub3QgY2hhbmdlIG9uY2UgaXQgaXNcbiAgICAgIGNyZWF0ZWQuICAoSWYgdGhlIG9iamVjdCBjb250YWlucyByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMsXG4gICAgICB0aGVzZSBvdGhlciBvYmplY3RzIG1heSBiZSBtdXRhYmxlIGFuZCBtYXkgYmUgY2hhbmdlZDsgaG93ZXZlcixcbiAgICAgIHRoZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbiBpbW11dGFibGVcbiAgICAgIG9iamVjdCBjYW5ub3QgY2hhbmdlLilcblxuICAgICAgVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlczpcblxuICAgICAgU3RyaW5nc1xuICAgICAgICAgQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgVW5pY29kZVxuICAgICAgICAgY29kZXBvaW50cy4gQWxsIHRoZSBjb2RlcG9pbnRzIGluIHJhbmdlIGBgVSswMDAwIC0gVSsxMEZGRkZgYFxuICAgICAgICAgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuXCd0IGhhdmUgYVxuICAgICAgICAgYGBjaHJgYCB0eXBlLCBhbmQgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXNcbiAgICAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9iamVjdCB3aXRoIGxlbmd0aCBgYDFgYC4gIFRoZSBidWlsdC1cbiAgICAgICAgIGluIGZ1bmN0aW9uIGBgb3JkKClgYCBjb252ZXJ0cyBhIGNoYXJhY3RlciB0byBpdHMgY29kZXBvaW50XG4gICAgICAgICAoYXMgYW4gaW50ZWdlcik7IGBgY2hyKClgYCBjb252ZXJ0cyBhbiBpbnRlZ2VyIGluIHJhbmdlIGBgMCAtXG4gICAgICAgICAxMEZGRkZgYCB0byB0aGUgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuIGBgc3RyLmVuY29kZSgpYGAgY2FuXG4gICAgICAgICBiZSB1c2VkIHRvIGNvbnZlcnQgYSBgYHN0cmBgIHRvIGBgYnl0ZXNgYCB1c2luZyB0aGUgZ2l2ZW5cbiAgICAgICAgIGVuY29kaW5nLCBhbmQgYGBieXRlcy5kZWNvZGUoKWBgIGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgdGhlXG4gICAgICAgICBvcHBvc2l0ZS5cblxuICAgICAgVHVwbGVzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSB0dXBsZSBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiBUdXBsZXMgb2ZcbiAgICAgICAgIHR3byBvciBtb3JlIGl0ZW1zIGFyZSBmb3JtZWQgYnkgY29tbWEtc2VwYXJhdGVkIGxpc3RzIG9mXG4gICAgICAgICBleHByZXNzaW9ucy4gIEEgdHVwbGUgb2Ygb25lIGl0ZW0gKGEgXCdzaW5nbGV0b25cJykgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYWZmaXhpbmcgYSBjb21tYSB0byBhbiBleHByZXNzaW9uIChhbiBleHByZXNzaW9uIGJ5XG4gICAgICAgICBpdHNlbGYgZG9lcyBub3QgY3JlYXRlIGEgdHVwbGUsIHNpbmNlIHBhcmVudGhlc2VzIG11c3QgYmVcbiAgICAgICAgIHVzYWJsZSBmb3IgZ3JvdXBpbmcgb2YgZXhwcmVzc2lvbnMpLiAgQW4gZW1wdHkgdHVwbGUgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYW4gZW1wdHkgcGFpciBvZiBwYXJlbnRoZXNlcy5cblxuICAgICAgQnl0ZXNcbiAgICAgICAgIEEgYnl0ZXMgb2JqZWN0IGlzIGFuIGltbXV0YWJsZSBhcnJheS4gIFRoZSBpdGVtcyBhcmUgOC1iaXRcbiAgICAgICAgIGJ5dGVzLCByZXByZXNlbnRlZCBieSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LlxuICAgICAgICAgQnl0ZXMgbGl0ZXJhbHMgKGxpa2UgYGBiXCdhYmNcJ2BgKSBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAgICAgICBgYGJ5dGVzKClgYCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYnl0ZXMgb2JqZWN0cy4gIEFsc28sXG4gICAgICAgICBieXRlcyBvYmplY3RzIGNhbiBiZSBkZWNvZGVkIHRvIHN0cmluZ3MgdmlhIHRoZSBgYGRlY29kZSgpYGBcbiAgICAgICAgIG1ldGhvZC5cblxuICAgTXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIE11dGFibGUgc2VxdWVuY2VzIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICBUaGVcbiAgICAgIHN1YnNjcmlwdGlvbiBhbmQgc2xpY2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBvZlxuICAgICAgYXNzaWdubWVudCBhbmQgYGBkZWxgYCAoZGVsZXRlKSBzdGF0ZW1lbnRzLlxuXG4gICAgICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczpcblxuICAgICAgTGlzdHNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIGxpc3QgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gIExpc3RzIGFyZVxuICAgICAgICAgZm9ybWVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucyBpblxuICAgICAgICAgc3F1YXJlIGJyYWNrZXRzLiAoTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBzcGVjaWFsIGNhc2VzIG5lZWRlZFxuICAgICAgICAgdG8gZm9ybSBsaXN0cyBvZiBsZW5ndGggMCBvciAxLilcblxuICAgICAgQnl0ZSBBcnJheXNcbiAgICAgICAgIEEgYnl0ZWFycmF5IG9iamVjdCBpcyBhIG11dGFibGUgYXJyYXkuIFRoZXkgYXJlIGNyZWF0ZWQgYnlcbiAgICAgICAgIHRoZSBidWlsdC1pbiBgYGJ5dGVhcnJheSgpYGAgY29uc3RydWN0b3IuICBBc2lkZSBmcm9tIGJlaW5nXG4gICAgICAgICBtdXRhYmxlIChhbmQgaGVuY2UgdW5oYXNoYWJsZSksIGJ5dGUgYXJyYXlzIG90aGVyd2lzZSBwcm92aWRlXG4gICAgICAgICB0aGUgc2FtZSBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWxpdHkgYXMgaW1tdXRhYmxlIGJ5dGVzXG4gICAgICAgICBvYmplY3RzLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZSBgYGFycmF5YGAgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBleGFtcGxlIG9mXG4gICAgICBhIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgYXMgZG9lcyB0aGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZS5cblxuU2V0IHR5cGVzXG4gICBUaGVzZSByZXByZXNlbnQgdW5vcmRlcmVkLCBmaW5pdGUgc2V0cyBvZiB1bmlxdWUsIGltbXV0YWJsZVxuICAgb2JqZWN0cy4gQXMgc3VjaCwgdGhleSBjYW5ub3QgYmUgaW5kZXhlZCBieSBhbnkgc3Vic2NyaXB0LiBIb3dldmVyLFxuICAgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb3ZlciwgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGBcbiAgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNldC4gQ29tbW9uIHVzZXMgZm9yIHNldHMgYXJlIGZhc3RcbiAgIG1lbWJlcnNoaXAgdGVzdGluZywgcmVtb3ZpbmcgZHVwbGljYXRlcyBmcm9tIGEgc2VxdWVuY2UsIGFuZFxuICAgY29tcHV0aW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIHN1Y2ggYXMgaW50ZXJzZWN0aW9uLCB1bmlvbixcbiAgIGRpZmZlcmVuY2UsIGFuZCBzeW1tZXRyaWMgZGlmZmVyZW5jZS5cblxuICAgRm9yIHNldCBlbGVtZW50cywgdGhlIHNhbWUgaW1tdXRhYmlsaXR5IHJ1bGVzIGFwcGx5IGFzIGZvclxuICAgZGljdGlvbmFyeSBrZXlzLiBOb3RlIHRoYXQgbnVtZXJpYyB0eXBlcyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yXG4gICBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sIGBgMWBgIGFuZFxuICAgYGAxLjBgYCksIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIGNvbnRhaW5lZCBpbiBhIHNldC5cblxuICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIHNldCB0eXBlczpcblxuICAgU2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGEgbXV0YWJsZSBzZXQuIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICBgYHNldCgpYGAgY29uc3RydWN0b3IgYW5kIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIGJ5IHNldmVyYWxcbiAgICAgIG1ldGhvZHMsIHN1Y2ggYXMgYGBhZGQoKWBgLlxuXG4gICBGcm96ZW4gc2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGFuIGltbXV0YWJsZSBzZXQuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZVxuICAgICAgYnVpbHQtaW4gYGBmcm96ZW5zZXQoKWBgIGNvbnN0cnVjdG9yLiAgQXMgYSBmcm96ZW5zZXQgaXNcbiAgICAgIGltbXV0YWJsZSBhbmQgKmhhc2hhYmxlKiwgaXQgY2FuIGJlIHVzZWQgYWdhaW4gYXMgYW4gZWxlbWVudCBvZlxuICAgICAgYW5vdGhlciBzZXQsIG9yIGFzIGEgZGljdGlvbmFyeSBrZXkuXG5cbk1hcHBpbmdzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IGFyYml0cmFyeSBpbmRleFxuICAgc2V0cy4gVGhlIHN1YnNjcmlwdCBub3RhdGlvbiBgYGFba11gYCBzZWxlY3RzIHRoZSBpdGVtIGluZGV4ZWQgYnlcbiAgIGBga2BgIGZyb20gdGhlIG1hcHBpbmcgYGBhYGA7IHRoaXMgY2FuIGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgYW5kXG4gICBhcyB0aGUgdGFyZ2V0IG9mIGFzc2lnbm1lbnRzIG9yIGBgZGVsYGAgc3RhdGVtZW50cy4gVGhlIGJ1aWx0LWluXG4gICBmdW5jdGlvbiBgYGxlbigpYGAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWFwcGluZy5cblxuICAgVGhlcmUgaXMgY3VycmVudGx5IGEgc2luZ2xlIGludHJpbnNpYyBtYXBwaW5nIHR5cGU6XG5cbiAgIERpY3Rpb25hcmllc1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBuZWFybHlcbiAgICAgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGUgb25seSB0eXBlcyBvZiB2YWx1ZXMgbm90IGFjY2VwdGFibGUgYXNcbiAgICAgIGtleXMgYXJlIHZhbHVlcyBjb250YWluaW5nIGxpc3RzIG9yIGRpY3Rpb25hcmllcyBvciBvdGhlclxuICAgICAgbXV0YWJsZSB0eXBlcyB0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbiAgICAgIGlkZW50aXR5LCB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZlxuICAgICAgZGljdGlvbmFyaWVzIHJlcXVpcmVzIGEga2V5XCdzIGhhc2ggdmFsdWUgdG8gcmVtYWluIGNvbnN0YW50LlxuICAgICAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpY1xuICAgICAgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgYGAxYGAgYW5kXG4gICAgICBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4IHRoZSBzYW1lXG4gICAgICBkaWN0aW9uYXJ5IGVudHJ5LlxuXG4gICAgICBEaWN0aW9uYXJpZXMgYXJlIG11dGFibGU7IHRoZXkgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlIGBgey4uLn1gYFxuICAgICAgbm90YXRpb24gKHNlZSBzZWN0aW9uICpEaWN0aW9uYXJ5IGRpc3BsYXlzKikuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlcyBgYGRibS5uZGJtYGAgYW5kIGBgZGJtLmdudWBgIHByb3ZpZGVcbiAgICAgIGFkZGl0aW9uYWwgZXhhbXBsZXMgb2YgbWFwcGluZyB0eXBlcywgYXMgZG9lcyB0aGVcbiAgICAgIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cbkNhbGxhYmxlIHR5cGVzXG4gICBUaGVzZSBhcmUgdGhlIHR5cGVzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdGlvbiAoc2VlXG4gICBzZWN0aW9uICpDYWxscyopIGNhbiBiZSBhcHBsaWVkOlxuXG4gICBVc2VyLWRlZmluZWQgZnVuY3Rpb25zXG4gICAgICBBIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgaXMgY3JlYXRlZCBieSBhIGZ1bmN0aW9uXG4gICAgICBkZWZpbml0aW9uIChzZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqKS4gIEl0IHNob3VsZCBiZVxuICAgICAgY2FsbGVkIHdpdGggYW4gYXJndW1lbnQgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtc1xuICAgICAgYXMgdGhlIGZ1bmN0aW9uXCdzIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdC5cblxuICAgICAgU3BlY2lhbCBhdHRyaWJ1dGVzOlxuXG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBBdHRyaWJ1dGUgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT0rXG4gICAgICB8IGBgX19kb2NfX2BgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvbiAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0cmluZywgb3IgYGBOb25lYGAgaWYgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX25hbWVfX2BgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX3F1YWxuYW1lX19gYCAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyAqcXVhbGlmaWVkIG5hbWUqIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmV3IGluIHZlcnNpb24gMy4zLiAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19tb2R1bGVfX2BgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4sIG9yICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZGVmYXVsdHNfX2BgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50IHZhbHVlcyBmb3IgdGhvc2UgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudHMgdGhhdCBoYXZlIGRlZmF1bHRzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgYGBOb25lYGAgaWYgbm8gYXJndW1lbnRzICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhhdmUgYSBkZWZhdWx0IHZhbHVlICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fY29kZV9fYGAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb21waWxlZCBmdW5jdGlvbiBib2R5LiAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZ2xvYmFsc19fYGAgICAgICAgICAgIHwgQSByZWZlcmVuY2UgdG8gdGhlIGRpY3Rpb25hcnkgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uXCdzICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2xvYmFsIHZhcmlhYmxlcyAtLS0gdGhlIGdsb2JhbCB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlIGluICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQuIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2RpY3RfX2BgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmJpdHJhcnkgZnVuY3Rpb24gYXR0cmlidXRlcy4gIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2Nsb3N1cmVfX2BgICAgICAgICAgICB8IGBgTm9uZWBgIG9yIGEgdHVwbGUgb2YgY2VsbHMgICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGNvbnRhaW4gYmluZGluZ3MgZm9yIHRoZSAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb25cJ3MgZnJlZSB2YXJpYWJsZXMuICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fYW5ub3RhdGlvbnNfX2BgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgYW5ub3RhdGlvbnMgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9mIHBhcmFtZXRlcnMuICBUaGUga2V5cyBvZiB0aGUgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaWN0IGFyZSB0aGUgcGFyYW1ldGVyIG5hbWVzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgYGBcJ3JldHVyblwnYGAgZm9yIHRoZSByZXR1cm4gIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5ub3RhdGlvbiwgaWYgcHJvdmlkZWQuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19rd2RlZmF1bHRzX19gYCAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBkZWZhdWx0cyBmb3IgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYF9fc2VsZl9fYGAgaXMgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICBvYmplY3QsIGBgX19mdW5jX19gYCBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyBgYF9fZG9jX19gYCBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzIGBgX19mdW5jX18uX19kb2NfX2BgKTtcbiAgICAgIGBgX19uYW1lX19gYCBpcyB0aGUgbWV0aG9kIG5hbWUgKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX25hbWVfX2BgKTtcbiAgICAgIGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIG1ldGhvZCB3YXMgZGVmaW5lZFxuICAgICAgaW4sIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBvciBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0LlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgdXNlci1cbiAgICAgIGRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsXG4gICAgICBpdHMgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kXG4gICAgICBvYmplY3QgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzIGBgX19mdW5jX19gYFxuICAgICAgYXR0cmlidXRlIGlzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFdoZW4gYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmdcbiAgICAgIGFub3RoZXIgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIHRoZSBiZWhhdmlvdXIgaXNcbiAgICAgIHRoZSBzYW1lIGFzIGZvciBhIGZ1bmN0aW9uIG9iamVjdCwgZXhjZXB0IHRoYXQgdGhlIGBgX19mdW5jX19gYFxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzIGBgX19mdW5jX19gYCBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyBgYF9fc2VsZl9fYGBcbiAgICAgIGF0dHJpYnV0ZSBpcyB0aGUgY2xhc3MgaXRzZWxmLCBhbmQgaXRzIGBgX19mdW5jX19gYCBhdHRyaWJ1dGUgaXNcbiAgICAgIHRoZSBmdW5jdGlvbiBvYmplY3QgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24gKGBgX19mdW5jX19gYCkgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoYGBfX3NlbGZfX2BgKSBpbiBmcm9udCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gIEZvciBpbnN0YW5jZSxcbiAgICAgIHdoZW4gYGBDYGAgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb25cbiAgICAgIGBgZigpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYENgYCwgY2FsbGluZyBgYHguZigxKWBgXG4gICAgICBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBDLmYoeCwgMSlgYC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGRlcml2ZWQgZnJvbSBhIGNsYXNzIG1ldGhvZFxuICAgICAgb2JqZWN0LCB0aGUgImNsYXNzIGluc3RhbmNlIiBzdG9yZWQgaW4gYGBfX3NlbGZfX2BgIHdpbGxcbiAgICAgIGFjdHVhbGx5IGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgYGB4LmYoMSlgYFxuICAgICAgb3IgYGBDLmYoMSlgYCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBmKEMsMSlgYCB3aGVyZSBgYGZgYCBpc1xuICAgICAgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudCAoc2VlXG4gICAgICBzZWN0aW9uICpUaGUgeWllbGQgc3RhdGVtZW50KikgaXMgY2FsbGVkIGEgKmdlbmVyYXRvciBmdW5jdGlvbiouXG4gICAgICBTdWNoIGEgZnVuY3Rpb24sIHdoZW4gY2FsbGVkLCBhbHdheXMgcmV0dXJucyBhbiBpdGVyYXRvciBvYmplY3RcbiAgICAgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uOiAgY2FsbGluZ1xuICAgICAgdGhlIGl0ZXJhdG9yXCdzIGBgaXRlcmF0b3IuX19uZXh0X18oKWBgIG1ldGhvZCB3aWxsIGNhdXNlIHRoZVxuICAgICAgZnVuY3Rpb24gdG8gZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZVxuICAgICAgYGB5aWVsZGBgIHN0YXRlbWVudC4gIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgYGByZXR1cm5gYFxuICAgICAgc3RhdGVtZW50IG9yIGZhbGxzIG9mZiB0aGUgZW5kLCBhIGBgU3RvcEl0ZXJhdGlvbmBgIGV4Y2VwdGlvbiBpc1xuICAgICAgcmFpc2VkIGFuZCB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2V0IG9mXG4gICAgICB2YWx1ZXMgdG8gYmUgcmV0dXJuZWQuXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGBgbGVuKClgYCBhbmQgYGBtYXRoLnNpbigpYGBcbiAgICAgIChgYG1hdGhgYCBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogYGBfX2RvY19fYGAgaXMgdGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb25cbiAgICAgIHN0cmluZywgb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGU7IGBgX19uYW1lX19gYCBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uXCdzIG5hbWU7IGBgX19zZWxmX19gYCBpcyBzZXQgdG8gYGBOb25lYGAgKGJ1dCBzZWUgdGhlXG4gICAgICBuZXh0IGl0ZW0pOyBgYF9fbW9kdWxlX19gYCBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZVxuICAgICAgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4gb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuXG5cbiAgIEJ1aWx0LWluIG1ldGhvZHNcbiAgICAgIFRoaXMgaXMgcmVhbGx5IGEgZGlmZmVyZW50IGRpc2d1aXNlIG9mIGEgYnVpbHQtaW4gZnVuY3Rpb24sIHRoaXNcbiAgICAgIHRpbWUgY29udGFpbmluZyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuXG4gICAgICBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YgYSBidWlsdC1pbiBtZXRob2QgaXNcbiAgICAgIGBgYWxpc3QuYXBwZW5kKClgYCwgYXNzdW1pbmcgKmFsaXN0KiBpcyBhIGxpc3Qgb2JqZWN0LiBJbiB0aGlzXG4gICAgICBjYXNlLCB0aGUgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlIGBgX19zZWxmX19gYCBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqYWxpc3QqLlxuXG4gICBDbGFzc2VzXG4gICAgICBDbGFzc2VzIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3Rvcmllc1xuICAgICAgZm9yIG5ldyBpbnN0YW5jZXMgb2YgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvclxuICAgICAgY2xhc3MgdHlwZXMgdGhhdCBvdmVycmlkZSBgYF9fbmV3X18oKWBgLiAgVGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgIGNhbGwgYXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgIGFuZCwgaW4gdGhlIHR5cGljYWwgY2FzZSwgdG9cbiAgICAgIGBgX19pbml0X18oKWBgIHRvIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3MgSW5zdGFuY2VzXG4gICAgICBJbnN0YW5jZXMgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgY2FuIGJlIG1hZGUgY2FsbGFibGUgYnkgZGVmaW5pbmdcbiAgICAgIGEgYGBfX2NhbGxfXygpYGAgbWV0aG9kIGluIHRoZWlyIGNsYXNzLlxuXG5Nb2R1bGVzXG4gICBNb2R1bGVzIGFyZSBhIGJhc2ljIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgUHl0aG9uIGNvZGUsIGFuZCBhcmVcbiAgIGNyZWF0ZWQgYnkgdGhlICppbXBvcnQgc3lzdGVtKiBhcyBpbnZva2VkIGVpdGhlciBieSB0aGUgYGBpbXBvcnRgYFxuICAgc3RhdGVtZW50IChzZWUgYGBpbXBvcnRgYCksIG9yIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXNcbiAgIGBgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKWBgIGFuZCBidWlsdC1pbiBgYF9faW1wb3J0X18oKWBgLiAgQVxuICAgbW9kdWxlIG9iamVjdCBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdFxuICAgKHRoaXMgaXMgdGhlIGRpY3Rpb25hcnkgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2dsb2JhbHNfX2BgIGF0dHJpYnV0ZVxuICAgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmVcbiAgIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sIGBgbS54YGAgaXNcbiAgIGVxdWl2YWxlbnQgdG8gYGBtLl9fZGljdF9fWyJ4Il1gYC4gQSBtb2R1bGUgb2JqZWN0IGRvZXMgbm90IGNvbnRhaW5cbiAgIHRoZSBjb2RlIG9iamVjdCB1c2VkIHRvIGluaXRpYWxpemUgdGhlIG1vZHVsZSAoc2luY2UgaXQgaXNuXCd0XG4gICBuZWVkZWQgb25jZSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSkuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50IHVwZGF0ZXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2UgZGljdGlvbmFyeSxcbiAgIGUuZy4sIGBgbS54ID0gMWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLl9fZGljdF9fWyJ4Il0gPSAxYGAuXG5cbiAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogYGBfX2RpY3RfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlXG4gICBhcyBhIGRpY3Rpb25hcnkgb2JqZWN0LlxuXG4gICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEJlY2F1c2Ugb2YgdGhlIHdheSBDUHl0aG9uXG4gICBjbGVhcnMgbW9kdWxlIGRpY3Rpb25hcmllcywgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgY2xlYXJlZFxuICAgd2hlbiB0aGUgbW9kdWxlIGZhbGxzIG91dCBvZiBzY29wZSBldmVuIGlmIHRoZSBkaWN0aW9uYXJ5IHN0aWxsIGhhc1xuICAgbGl2ZSByZWZlcmVuY2VzLiAgVG8gYXZvaWQgdGhpcywgY29weSB0aGUgZGljdGlvbmFyeSBvciBrZWVwIHRoZVxuICAgbW9kdWxlIGFyb3VuZCB3aGlsZSB1c2luZyBpdHMgZGljdGlvbmFyeSBkaXJlY3RseS5cblxuICAgUHJlZGVmaW5lZCAod3JpdGFibGUpIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgbW9kdWxlXCdzXG4gICBuYW1lOyBgYF9fZG9jX19gYCBpcyB0aGUgbW9kdWxlXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBgYE5vbmVgYFxuICAgaWYgdW5hdmFpbGFibGU7IGBgX19maWxlX19gYCBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaFxuICAgdGhlIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGVcbiAgIGBgX19maWxlX19gYCBhdHRyaWJ1dGUgbWF5IGJlIG1pc3NpbmcgZm9yIGNlcnRhaW4gdHlwZXMgb2YgbW9kdWxlcyxcbiAgIHN1Y2ggYXMgQyBtb2R1bGVzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGludGVycHJldGVyO1xuICAgZm9yIGV4dGVuc2lvbiBtb2R1bGVzIGxvYWRlZCBkeW5hbWljYWxseSBmcm9tIGEgc2hhcmVkIGxpYnJhcnksIGl0XG4gICBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuXG5cbkN1c3RvbSBjbGFzc2VzXG4gICBDdXN0b20gY2xhc3MgdHlwZXMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGJ5IGNsYXNzIGRlZmluaXRpb25zIChzZWVcbiAgIHNlY3Rpb24gKkNsYXNzIGRlZmluaXRpb25zKikuICBBIGNsYXNzIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZFxuICAgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdC4gQ2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHRyYW5zbGF0ZWRcbiAgIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCBgYEMueGBgIGlzIHRyYW5zbGF0ZWQgdG9cbiAgIGBgQy5fX2RpY3RfX1sieCJdYGAgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIG51bWJlciBvZiBob29rcyB3aGljaFxuICAgYWxsb3cgZm9yIG90aGVyIG1lYW5zIG9mIGxvY2F0aW5nIGF0dHJpYnV0ZXMpLiBXaGVuIHRoZSBhdHRyaWJ1dGVcbiAgIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250aW51ZXMgaW4gdGhlIGJhc2VcbiAgIGNsYXNzZXMuIFRoaXMgc2VhcmNoIG9mIHRoZSBiYXNlIGNsYXNzZXMgdXNlcyB0aGUgQzMgbWV0aG9kXG4gICByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mXG4gICBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLiBBZGRpdGlvbmFsXG4gICBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0XG4gICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uXG5cbiAgIFdoZW4gYSBjbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlIChmb3IgY2xhc3MgYGBDYGAsIHNheSkgd291bGQgeWllbGRcbiAgIGEgY2xhc3MgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2RcbiAgIG9iamVjdCB3aG9zZSBgYF9fc2VsZl9fYGAgYXR0cmlidXRlcyBpcyBgYENgYC4gIFdoZW4gaXQgd291bGQgeWllbGRcbiAgIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG9iamVjdCB3cmFwcGVkXG4gICBieSB0aGUgc3RhdGljIG1ldGhvZCBvYmplY3QuIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqXG4gICBmb3IgYW5vdGhlciB3YXkgaW4gd2hpY2ggYXR0cmlidXRlcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heVxuICAgZGlmZmVyIGZyb20gdGhvc2UgYWN0dWFsbHkgY29udGFpbmVkIGluIGl0cyBgYF9fZGljdF9fYGAuXG5cbiAgIENsYXNzIGF0dHJpYnV0ZSBhc3NpZ25tZW50cyB1cGRhdGUgdGhlIGNsYXNzXCdzIGRpY3Rpb25hcnksIG5ldmVyXG4gICB0aGUgZGljdGlvbmFyeSBvZiBhIGJhc2UgY2xhc3MuXG5cbiAgIEEgY2xhc3Mgb2JqZWN0IGNhbiBiZSBjYWxsZWQgKHNlZSBhYm92ZSkgdG8geWllbGQgYSBjbGFzcyBpbnN0YW5jZVxuICAgKHNlZSBiZWxvdykuXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogYGBfX25hbWVfX2BgIGlzIHRoZSBjbGFzcyBuYW1lOyBgYF9fbW9kdWxlX19gYFxuICAgaXMgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgYGBfX2RpY3RfX2BgIGlzXG4gICB0aGUgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzc1wncyBuYW1lc3BhY2U7IGBgX19iYXNlc19fYGAgaXMgYVxuICAgdHVwbGUgKHBvc3NpYmx5IGVtcHR5IG9yIGEgc2luZ2xldG9uKSBjb250YWluaW5nIHRoZSBiYXNlIGNsYXNzZXMsXG4gICBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgb2NjdXJyZW5jZSBpbiB0aGUgYmFzZSBjbGFzcyBsaXN0O1xuICAgYGBfX2RvY19fYGAgaXMgdGhlIGNsYXNzXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBOb25lIGlmXG4gICB1bmRlZmluZWQuXG5cbkNsYXNzIGluc3RhbmNlc1xuICAgQSBjbGFzcyBpbnN0YW5jZSBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgYSBjbGFzcyBvYmplY3QgKHNlZSBhYm92ZSkuXG4gICBBIGNsYXNzIGluc3RhbmNlIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3Rpb25hcnkgd2hpY2hcbiAgIGlzIHRoZSBmaXJzdCBwbGFjZSBpbiB3aGljaCBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgc2VhcmNoZWQuXG4gICBXaGVuIGFuIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgdGhlcmUsIGFuZCB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MgaGFzXG4gICBhbiBhdHRyaWJ1dGUgYnkgdGhhdCBuYW1lLCB0aGUgc2VhcmNoIGNvbnRpbnVlcyB3aXRoIHRoZSBjbGFzc1xuICAgYXR0cmlidXRlcy4gIElmIGEgY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kIHRoYXQgaXMgYSB1c2VyLWRlZmluZWRcbiAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0XG4gICB3aG9zZSBgYF9fc2VsZl9fYGAgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZS4gIFN0YXRpYyBtZXRob2QgYW5kXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyXG4gICAiQ2xhc3NlcyIuICBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKiBmb3IgYW5vdGhlciB3YXlcbiAgIGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyByZXRyaWV2ZWQgdmlhIGl0cyBpbnN0YW5jZXMgbWF5XG4gICBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIGNsYXNzXCdzXG4gICBgYF9fZGljdF9fYGAuICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUgb2JqZWN0XCdzXG4gICBjbGFzcyBoYXMgYSBgYF9fZ2V0YXR0cl9fKClgYCBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkgdGhlXG4gICBsb29rdXAuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50cyBhbmQgZGVsZXRpb25zIHVwZGF0ZSB0aGUgaW5zdGFuY2VcJ3NcbiAgIGRpY3Rpb25hcnksIG5ldmVyIGEgY2xhc3NcJ3MgZGljdGlvbmFyeS4gIElmIHRoZSBjbGFzcyBoYXMgYVxuICAgYGBfX3NldGF0dHJfXygpYGAgb3IgYGBfX2RlbGF0dHJfXygpYGAgbWV0aG9kLCB0aGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB1cGRhdGluZyB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeSBkaXJlY3RseS5cblxuICAgQ2xhc3MgaW5zdGFuY2VzIGNhbiBwcmV0ZW5kIHRvIGJlIG51bWJlcnMsIHNlcXVlbmNlcywgb3IgbWFwcGluZ3NcbiAgIGlmIHRoZXkgaGF2ZSBtZXRob2RzIHdpdGggY2VydGFpbiBzcGVjaWFsIG5hbWVzLiAgU2VlIHNlY3Rpb25cbiAgICpTcGVjaWFsIG1ldGhvZCBuYW1lcyouXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogYGBfX2RpY3RfX2BgIGlzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeTtcbiAgIGBgX19jbGFzc19fYGAgaXMgdGhlIGluc3RhbmNlXCdzIGNsYXNzLlxuXG5JL08gb2JqZWN0cyAoYWxzbyBrbm93biBhcyBmaWxlIG9iamVjdHMpXG4gICBBICpmaWxlIG9iamVjdCogcmVwcmVzZW50cyBhbiBvcGVuIGZpbGUuICBWYXJpb3VzIHNob3J0Y3V0cyBhcmVcbiAgIGF2YWlsYWJsZSB0byBjcmVhdGUgZmlsZSBvYmplY3RzOiB0aGUgYGBvcGVuKClgYCBidWlsdC1pbiBmdW5jdGlvbixcbiAgIGFuZCBhbHNvIGBgb3MucG9wZW4oKWBgLCBgYG9zLmZkb3BlbigpYGAsIGFuZCB0aGUgYGBtYWtlZmlsZSgpYGBcbiAgIG1ldGhvZCBvZiBzb2NrZXQgb2JqZWN0cyAoYW5kIHBlcmhhcHMgYnkgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHNcbiAgIHByb3ZpZGVkIGJ5IGV4dGVuc2lvbiBtb2R1bGVzKS5cblxuICAgVGhlIG9iamVjdHMgYGBzeXMuc3RkaW5gYCwgYGBzeXMuc3Rkb3V0YGAgYW5kIGBgc3lzLnN0ZGVycmBgIGFyZVxuICAgaW5pdGlhbGl6ZWQgdG8gZmlsZSBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludGVycHJldGVyXCdzXG4gICBzdGFuZGFyZCBpbnB1dCwgb3V0cHV0IGFuZCBlcnJvciBzdHJlYW1zOyB0aGV5IGFyZSBhbGwgb3BlbiBpbiB0ZXh0XG4gICBtb2RlIGFuZCB0aGVyZWZvcmUgZm9sbG93IHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGVcbiAgIGBgaW8uVGV4dElPQmFzZWBgIGFic3RyYWN0IGNsYXNzLlxuXG5JbnRlcm5hbCB0eXBlc1xuICAgQSBmZXcgdHlwZXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBpbnRlcnByZXRlciBhcmUgZXhwb3NlZCB0byB0aGVcbiAgIHVzZXIuIFRoZWlyIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlXG4gICBpbnRlcnByZXRlciwgYnV0IHRoZXkgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuXG5cbiAgIENvZGUgb2JqZWN0c1xuICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSxcbiAgICAgIG9yICpieXRlY29kZSouIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdFxuICAgICAgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvblwncyBnbG9iYWxzICh0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhc1xuICAgICAgZGVmaW5lZCksIHdoaWxlIGEgY29kZSBvYmplY3QgY29udGFpbnMgbm8gY29udGV4dDsgYWxzbyB0aGVcbiAgICAgIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdCwgbm90XG4gICAgICBpbiB0aGUgY29kZSBvYmplY3QgKGJlY2F1c2UgdGhleSByZXByZXNlbnQgdmFsdWVzIGNhbGN1bGF0ZWQgYXRcbiAgICAgIHJ1bi10aW1lKS4gIFVubGlrZSBmdW5jdGlvbiBvYmplY3RzLCBjb2RlIG9iamVjdHMgYXJlIGltbXV0YWJsZVxuICAgICAgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gbXV0YWJsZVxuICAgICAgb2JqZWN0cy5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBjb19uYW1lYGAgZ2l2ZXMgdGhlIGZ1bmN0aW9uXG4gICAgICBuYW1lOyBgYGNvX2FyZ2NvdW50YGAgaXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAgKGluY2x1ZGluZyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcyk7IGBgY29fbmxvY2Fsc2BgIGlzIHRoZVxuICAgICAgbnVtYmVyIG9mIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiAoaW5jbHVkaW5nXG4gICAgICBhcmd1bWVudHMpOyBgYGNvX3Zhcm5hbWVzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZlxuICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlcyAoc3RhcnRpbmcgd2l0aCB0aGUgYXJndW1lbnQgbmFtZXMpO1xuICAgICAgYGBjb19jZWxsdmFyc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgbG9jYWxcbiAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IG5lc3RlZCBmdW5jdGlvbnM7XG4gICAgICBgYGNvX2ZyZWV2YXJzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBmcmVlXG4gICAgICB2YXJpYWJsZXM7IGBgY29fY29kZWBgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2ZcbiAgICAgIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgYGBjb19jb25zdHNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlXG4gICAgICBsaXRlcmFscyB1c2VkIGJ5IHRoZSBieXRlY29kZTsgYGBjb19uYW1lc2BgIGlzIGEgdHVwbGVcbiAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWVzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlOyBgYGNvX2ZpbGVuYW1lYGAgaXNcbiAgICAgIHRoZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZDtcbiAgICAgIGBgY29fZmlyc3RsaW5lbm9gYCBpcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uO1xuICAgICAgYGBjb19sbm90YWJgYCBpcyBhIHN0cmluZyBlbmNvZGluZyB0aGUgbWFwcGluZyBmcm9tIGJ5dGVjb2RlXG4gICAgICBvZmZzZXRzIHRvIGxpbmUgbnVtYmVycyAoZm9yIGRldGFpbHMgc2VlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGVcbiAgICAgIGludGVycHJldGVyKTsgYGBjb19zdGFja3NpemVgYCBpcyB0aGUgcmVxdWlyZWQgc3RhY2sgc2l6ZVxuICAgICAgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOyBgYGNvX2ZsYWdzYGAgaXMgYW4gaW50ZWdlciBlbmNvZGluZ1xuICAgICAgYSBudW1iZXIgb2YgZmxhZ3MgZm9yIHRoZSBpbnRlcnByZXRlci5cblxuICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yIGBgY29fZmxhZ3NgYDogYml0XG4gICAgICBgYDB4MDRgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBgKmFyZ3VtZW50c2BgIHN5bnRheFxuICAgICAgdG8gYWNjZXB0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHM7IGJpdFxuICAgICAgYGAweDA4YGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgYCoqa2V5d29yZHNgYCBzeW50YXhcbiAgICAgIHRvIGFjY2VwdCBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHM7IGJpdCBgYDB4MjBgYCBpcyBzZXQgaWZcbiAgICAgIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvci5cblxuICAgICAgRnV0dXJlIGZlYXR1cmUgZGVjbGFyYXRpb25zIChgYGZyb20gX19mdXR1cmVfXyBpbXBvcnRcbiAgICAgIGRpdmlzaW9uYGApIGFsc28gdXNlIGJpdHMgaW4gYGBjb19mbGFnc2BgIHRvIGluZGljYXRlIHdoZXRoZXIgYVxuICAgICAgY29kZSBvYmplY3Qgd2FzIGNvbXBpbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgZW5hYmxlZDogYml0XG4gICAgICBgYDB4MjAwMGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gd2FzIGNvbXBpbGVkIHdpdGggZnV0dXJlXG4gICAgICBkaXZpc2lvbiBlbmFibGVkOyBiaXRzIGBgMHgxMGBgIGFuZCBgYDB4MTAwMGBgIHdlcmUgdXNlZCBpblxuICAgICAgZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24uXG5cbiAgICAgIE90aGVyIGJpdHMgaW4gYGBjb19mbGFnc2BgIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLlxuXG4gICAgICBJZiBhIGNvZGUgb2JqZWN0IHJlcHJlc2VudHMgYSBmdW5jdGlvbiwgdGhlIGZpcnN0IGl0ZW0gaW5cbiAgICAgIGBgY29fY29uc3RzYGAgaXMgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIG9mIHRoZSBmdW5jdGlvbiwgb3JcbiAgICAgIGBgTm9uZWBgIGlmIHVuZGVmaW5lZC5cblxuICAgRnJhbWUgb2JqZWN0c1xuICAgICAgRnJhbWUgb2JqZWN0cyByZXByZXNlbnQgZXhlY3V0aW9uIGZyYW1lcy4gIFRoZXkgbWF5IG9jY3VyIGluXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0cyAoc2VlIGJlbG93KS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBmX2JhY2tgYCBpcyB0byB0aGUgcHJldmlvdXNcbiAgICAgIHN0YWNrIGZyYW1lICh0b3dhcmRzIHRoZSBjYWxsZXIpLCBvciBgYE5vbmVgYCBpZiB0aGlzIGlzIHRoZVxuICAgICAgYm90dG9tIHN0YWNrIGZyYW1lOyBgYGZfY29kZWBgIGlzIHRoZSBjb2RlIG9iamVjdCBiZWluZyBleGVjdXRlZFxuICAgICAgaW4gdGhpcyBmcmFtZTsgYGBmX2xvY2Fsc2BgIGlzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gbG9vayB1cFxuICAgICAgbG9jYWwgdmFyaWFibGVzOyBgYGZfZ2xvYmFsc2BgIGlzIHVzZWQgZm9yIGdsb2JhbCB2YXJpYWJsZXM7XG4gICAgICBgYGZfYnVpbHRpbnNgYCBpcyB1c2VkIGZvciBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lcztcbiAgICAgIGBgZl9sYXN0aWBgIGdpdmVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uICh0aGlzIGlzIGFuIGluZGV4IGludG9cbiAgICAgIHRoZSBieXRlY29kZSBzdHJpbmcgb2YgdGhlIGNvZGUgb2JqZWN0KS5cblxuICAgICAgU3BlY2lhbCB3cml0YWJsZSBhdHRyaWJ1dGVzOiBgYGZfdHJhY2VgYCwgaWYgbm90IGBgTm9uZWBgLCBpcyBhXG4gICAgICBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGNvZGUgbGluZSAodGhpcyBpc1xuICAgICAgdXNlZCBieSB0aGUgZGVidWdnZXIpOyBgYGZfbGluZW5vYGAgaXMgdGhlIGN1cnJlbnQgbGluZSBudW1iZXJcbiAgICAgIG9mIHRoZSBmcmFtZSAtLS0gd3JpdGluZyB0byB0aGlzIGZyb20gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb25cbiAgICAgIGp1bXBzIHRvIHRoZSBnaXZlbiBsaW5lIChvbmx5IGZvciB0aGUgYm90dG9tLW1vc3QgZnJhbWUpLiAgQVxuICAgICAgZGVidWdnZXIgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZCAoYWthIFNldCBOZXh0IFN0YXRlbWVudClcbiAgICAgIGJ5IHdyaXRpbmcgdG8gZl9saW5lbm8uXG5cbiAgIFRyYWNlYmFjayBvYmplY3RzXG4gICAgICBUcmFjZWJhY2sgb2JqZWN0cyByZXByZXNlbnQgYSBzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24uICBBXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiAgV2hlbiB0aGVcbiAgICAgIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdW53aW5kcyB0aGUgZXhlY3V0aW9uIHN0YWNrLCBhdFxuICAgICAgZWFjaCB1bndvdW5kIGxldmVsIGEgdHJhY2ViYWNrIG9iamVjdCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZlxuICAgICAgdGhlIGN1cnJlbnQgdHJhY2ViYWNrLiAgV2hlbiBhbiBleGNlcHRpb24gaGFuZGxlciBpcyBlbnRlcmVkLFxuICAgICAgdGhlIHN0YWNrIHRyYWNlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAoU2VlIHNlY3Rpb25cbiAgICAgICpUaGUgdHJ5IHN0YXRlbWVudCouKSBJdCBpcyBhY2Nlc3NpYmxlIGFzIHRoZSB0aGlyZCBpdGVtIG9mIHRoZVxuICAgICAgdHVwbGUgcmV0dXJuZWQgYnkgYGBzeXMuZXhjX2luZm8oKWBgLiBXaGVuIHRoZSBwcm9ncmFtIGNvbnRhaW5zXG4gICAgICBubyBzdWl0YWJsZSBoYW5kbGVyLCB0aGUgc3RhY2sgdHJhY2UgaXMgd3JpdHRlbiAobmljZWx5XG4gICAgICBmb3JtYXR0ZWQpIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW07IGlmIHRoZSBpbnRlcnByZXRlciBpc1xuICAgICAgaW50ZXJhY3RpdmUsIGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgdG8gdGhlIHVzZXIgYXNcbiAgICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgdGJfbmV4dGBgIGlzIHRoZSBuZXh0IGxldmVsIGluXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgKHRvd2FyZHMgdGhlIGZyYW1lIHdoZXJlIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkKSwgb3IgYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gbmV4dCBsZXZlbDsgYGB0Yl9mcmFtZWBgXG4gICAgICBwb2ludHMgdG8gdGhlIGV4ZWN1dGlvbiBmcmFtZSBvZiB0aGUgY3VycmVudCBsZXZlbDtcbiAgICAgIGBgdGJfbGluZW5vYGAgZ2l2ZXMgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkOyBgYHRiX2xhc3RpYGAgaW5kaWNhdGVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uLiAgVGhlXG4gICAgICBsaW5lIG51bWJlciBhbmQgbGFzdCBpbnN0cnVjdGlvbiBpbiB0aGUgdHJhY2ViYWNrIG1heSBkaWZmZXJcbiAgICAgIGZyb20gdGhlIGxpbmUgbnVtYmVyIG9mIGl0cyBmcmFtZSBvYmplY3QgaWYgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQgaW4gYSBgYHRyeWBgIHN0YXRlbWVudCB3aXRoIG5vIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2VcbiAgICAgIG9yIHdpdGggYSBmaW5hbGx5IGNsYXVzZS5cblxuICAgU2xpY2Ugb2JqZWN0c1xuICAgICAgU2xpY2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgc2xpY2VzIGZvciBgYF9fZ2V0aXRlbV9fKClgYFxuICAgICAgbWV0aG9kcy4gIFRoZXkgYXJlIGFsc28gY3JlYXRlZCBieSB0aGUgYnVpbHQtaW4gYGBzbGljZSgpYGBcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYHN0YXJ0YGAgaXMgdGhlIGxvd2VyIGJvdW5kO1xuICAgICAgYGBzdG9wYGAgaXMgdGhlIHVwcGVyIGJvdW5kOyBgYHN0ZXBgYCBpcyB0aGUgc3RlcCB2YWx1ZTsgZWFjaCBpc1xuICAgICAgYGBOb25lYGAgaWYgb21pdHRlZC4gIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGljZSB0aGF0IHRoZSBzbGljZSBvYmplY3RcbiAgICAgICAgIHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKiBpdGVtcy5cbiAgICAgICAgIEl0IHJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSBpbnRlZ2VyczsgcmVzcGVjdGl2ZWx5IHRoZXNlIGFyZVxuICAgICAgICAgdGhlICpzdGFydCogYW5kICpzdG9wKiBpbmRpY2VzIGFuZCB0aGUgKnN0ZXAqIG9yIHN0cmlkZVxuICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzbGljZS4gTWlzc2luZyBvciBvdXQtb2YtYm91bmRzIGluZGljZXMgYXJlXG4gICAgICAgICBoYW5kbGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCByZWd1bGFyIHNsaWNlcy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICBgYHN0YXRpY21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG5cbiAgIENsYXNzIG1ldGhvZCBvYmplY3RzXG4gICAgICBBIGNsYXNzIG1ldGhvZCBvYmplY3QsIGxpa2UgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXMgYSB3cmFwcGVyXG4gICAgICBhcm91bmQgYW5vdGhlciBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIHdheSBpbiB3aGljaCB0aGF0IG9iamVjdFxuICAgICAgaXMgcmV0cmlldmVkIGZyb20gY2xhc3NlcyBhbmQgY2xhc3MgaW5zdGFuY2VzLiBUaGUgYmVoYXZpb3VyIG9mXG4gICAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyB1cG9uIHN1Y2ggcmV0cmlldmFsIGlzIGRlc2NyaWJlZCBhYm92ZSxcbiAgICAgIHVuZGVyICJVc2VyLWRlZmluZWQgbWV0aG9kcyIuIENsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkXG4gICAgICBieSB0aGUgYnVpbHQtaW4gYGBjbGFzc21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG4nLAorICd0eXBlcyc6ICdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSBgYE5vbmVgYC5cbiAgIEl0IGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucyxcbiAgIGUuZy4sIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICBgYE5vdEltcGxlbWVudGVkYGAuIE51bWVyaWMgbWV0aG9kcyBhbmQgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbWF5XG4gICByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgdGhlXG4gICBvcGVyYW5kcyBwcm92aWRlZC4gIChUaGUgaW50ZXJwcmV0ZXIgd2lsbCB0aGVuIHRyeSB0aGUgcmVmbGVjdGVkXG4gICBvcGVyYXRpb24sIG9yIHNvbWUgb3RoZXIgZmFsbGJhY2ssIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0b3IuKSAgSXRzXG4gICB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5FbGxpcHNpc1xuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsaXRlcmFsIGBgLi4uYGAgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lIGBgRWxsaXBzaXNgYC4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5gYG51bWJlcnMuTnVtYmVyYGBcbiAgIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IG51bWVyaWMgbGl0ZXJhbHMgYW5kIHJldHVybmVkIGFzIHJlc3VsdHMgYnlcbiAgIGFyaXRobWV0aWMgb3BlcmF0b3JzIGFuZCBhcml0aG1ldGljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIE51bWVyaWNcbiAgIG9iamVjdHMgYXJlIGltbXV0YWJsZTsgb25jZSBjcmVhdGVkIHRoZWlyIHZhbHVlIG5ldmVyIGNoYW5nZXMuXG4gICBQeXRob24gbnVtYmVycyBhcmUgb2YgY291cnNlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gbWF0aGVtYXRpY2FsXG4gICBudW1iZXJzLCBidXQgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgb2YgbnVtZXJpY2FsIHJlcHJlc2VudGF0aW9uXG4gICBpbiBjb21wdXRlcnMuXG5cbiAgIFB5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZFxuICAgY29tcGxleCBudW1iZXJzOlxuXG4gICBgYG51bWJlcnMuSW50ZWdyYWxgYFxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoYGBpbnRgYClcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zIChgYGJvb2xgYClcbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCB0aGUgdHJ1dGggdmFsdWVzIEZhbHNlIGFuZCBUcnVlLiAgVGhlIHR3b1xuICAgICAgICAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZSBhcmUgdGhlIG9ubHlcbiAgICAgICAgIEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlIGludGVnZXJcbiAgICAgICAgIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kIDEsXG4gICAgICAgICByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzIGBgIkZhbHNlImBgIG9yXG4gICAgICAgICBgYCJUcnVlImBgIGFyZSByZXR1cm5lZCwgcmVzcGVjdGl2ZWx5LlxuXG4gICAgICBUaGUgcnVsZXMgZm9yIGludGVnZXIgcmVwcmVzZW50YXRpb24gYXJlIGludGVuZGVkIHRvIGdpdmUgdGhlXG4gICAgICBtb3N0IG1lYW5pbmdmdWwgaW50ZXJwcmV0YXRpb24gb2Ygc2hpZnQgYW5kIG1hc2sgb3BlcmF0aW9uc1xuICAgICAgaW52b2x2aW5nIG5lZ2F0aXZlIGludGVnZXJzLlxuXG4gICBgYG51bWJlcnMuUmVhbGBgIChgYGZsb2F0YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgYGBudW1iZXJzLkNvbXBsZXhgYCAoYGBjb21wbGV4YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciBgYHpgYCBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyBgYHoucmVhbGBgIGFuZCBgYHouaW1hZ2BgLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZlxuICAgaXRlbXMgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGVcbiAgIGluZGV4IHNldCBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2ZcbiAgIHNlcXVlbmNlICphKiBpcyBzZWxlY3RlZCBieSBgYGFbaV1gYC5cblxuICAgU2VxdWVuY2VzIGFsc28gc3VwcG9ydCBzbGljaW5nOiBgYGFbaTpqXWBgIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqIGBgPD1gYCAqayogYGA8YGAgKmoqLiAgV2hlbiB1c2VkIGFzIGFuXG4gICBleHByZXNzaW9uLCBhIHNsaWNlIGlzIGEgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZS4gIFRoaXMgaW1wbGllc1xuICAgdGhhdCB0aGUgaW5kZXggc2V0IGlzIHJlbnVtYmVyZWQgc28gdGhhdCBpdCBzdGFydHMgYXQgMC5cblxuICAgU29tZSBzZXF1ZW5jZXMgYWxzbyBzdXBwb3J0ICJleHRlbmRlZCBzbGljaW5nIiB3aXRoIGEgdGhpcmQgInN0ZXAiXG4gICBwYXJhbWV0ZXI6IGBgYVtpOmo6a11gYCBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCpcbiAgIHdoZXJlIGBgeCA9IGkgKyBuKmtgYCwgKm4qIGBgPj1gYCBgYDBgYCBhbmQgKmkqIGBgPD1gYCAqeCogYGA8YGBcbiAgICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIEEgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoYXQgcmVwcmVzZW50IFVuaWNvZGVcbiAgICAgICAgIGNvZGVwb2ludHMuIEFsbCB0aGUgY29kZXBvaW50cyBpbiByYW5nZSBgYFUrMDAwMCAtIFUrMTBGRkZGYGBcbiAgICAgICAgIGNhbiBiZSByZXByZXNlbnRlZCBpbiBhIHN0cmluZy4gIFB5dGhvbiBkb2VzblwndCBoYXZlIGFcbiAgICAgICAgIGBgY2hyYGAgdHlwZSwgYW5kIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzXG4gICAgICAgICByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvYmplY3Qgd2l0aCBsZW5ndGggYGAxYGAuICBUaGUgYnVpbHQtXG4gICAgICAgICBpbiBmdW5jdGlvbiBgYG9yZCgpYGAgY29udmVydHMgYSBjaGFyYWN0ZXIgdG8gaXRzIGNvZGVwb2ludFxuICAgICAgICAgKGFzIGFuIGludGVnZXIpOyBgYGNocigpYGAgY29udmVydHMgYW4gaW50ZWdlciBpbiByYW5nZSBgYDAgLVxuICAgICAgICAgMTBGRkZGYGAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiBgYHN0ci5lbmNvZGUoKWBgIGNhblxuICAgICAgICAgYmUgdXNlZCB0byBjb252ZXJ0IGEgYGBzdHJgYCB0byBgYGJ5dGVzYGAgdXNpbmcgdGhlIGdpdmVuXG4gICAgICAgICBlbmNvZGluZywgYW5kIGBgYnl0ZXMuZGVjb2RlKClgYCBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIHRoZVxuICAgICAgICAgb3Bwb3NpdGUuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgICAgIEJ5dGVzXG4gICAgICAgICBBIGJ5dGVzIG9iamVjdCBpcyBhbiBpbW11dGFibGUgYXJyYXkuICBUaGUgaXRlbXMgYXJlIDgtYml0XG4gICAgICAgICBieXRlcywgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cbiAgICAgICAgIEJ5dGVzIGxpdGVyYWxzIChsaWtlIGBgYlwnYWJjXCdgYCkgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgYGBieXRlcygpYGAgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGJ5dGVzIG9iamVjdHMuICBBbHNvLFxuICAgICAgICAgYnl0ZXMgb2JqZWN0cyBjYW4gYmUgZGVjb2RlZCB0byBzdHJpbmdzIHZpYSB0aGUgYGBkZWNvZGUoKWBgXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kIGBgZGVsYGAgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gYGBieXRlYXJyYXkoKWBgIGNvbnN0cnVjdG9yLiAgQXNpZGUgZnJvbSBiZWluZ1xuICAgICAgICAgbXV0YWJsZSAoYW5kIGhlbmNlIHVuaGFzaGFibGUpLCBieXRlIGFycmF5cyBvdGhlcndpc2UgcHJvdmlkZVxuICAgICAgICAgdGhlIHNhbWUgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsaXR5IGFzIGltbXV0YWJsZSBieXRlc1xuICAgICAgICAgb2JqZWN0cy5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGUgYGBhcnJheWBgIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZlxuICAgICAgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgXG4gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQuIENvbW1vbiB1c2VzIGZvciBzZXRzIGFyZSBmYXN0XG4gICBtZW1iZXJzaGlwIHRlc3RpbmcsIHJlbW92aW5nIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlLCBhbmRcbiAgIGNvbXB1dGluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGludGVyc2VjdGlvbiwgdW5pb24sXG4gICBkaWZmZXJlbmNlLCBhbmQgc3ltbWV0cmljIGRpZmZlcmVuY2UuXG5cbiAgIEZvciBzZXQgZWxlbWVudHMsIHRoZSBzYW1lIGltbXV0YWJpbGl0eSBydWxlcyBhcHBseSBhcyBmb3JcbiAgIGRpY3Rpb25hcnkga2V5cy4gTm90ZSB0aGF0IG51bWVyaWMgdHlwZXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvclxuICAgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgIGBgMS4wYGApLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzZXQoKWBgIGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyBieSBzZXZlcmFsXG4gICAgICBtZXRob2RzLCBzdWNoIGFzIGBgYWRkKClgYC5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluIGBgZnJvemVuc2V0KClgYCBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzXG4gICAgICBpbW11dGFibGUgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2ZcbiAgICAgIGFub3RoZXIgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gYGBhW2tdYGAgc2VsZWN0cyB0aGUgaXRlbSBpbmRleGVkIGJ5XG4gICBgYGtgYCBmcm9tIHRoZSBtYXBwaW5nIGBgYWBgOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZFxuICAgYXMgdGhlIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciBgYGRlbGBgIHN0YXRlbWVudHMuIFRoZSBidWlsdC1pblxuICAgZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sIGBgMWBgIGFuZFxuICAgICAgYGAxLjBgYCkgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleCB0aGUgc2FtZVxuICAgICAgZGljdGlvbmFyeSBlbnRyeS5cblxuICAgICAgRGljdGlvbmFyaWVzIGFyZSBtdXRhYmxlOyB0aGV5IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBgYHsuLi59YGBcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgYGBkYm0ubmRibWBgIGFuZCBgYGRibS5nbnVgYCBwcm92aWRlXG4gICAgICBhZGRpdGlvbmFsIGV4YW1wbGVzIG9mIG1hcHBpbmcgdHlwZXMsIGFzIGRvZXMgdGhlXG4gICAgICBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgQXR0cmlidXRlICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09K1xuICAgICAgfCBgYF9fZG9jX19gYCAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb24gICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5hdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19uYW1lX19gYCAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19xdWFsbmFtZV9fYGAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgKnF1YWxpZmllZCBuYW1lKiB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ldyBpbiB2ZXJzaW9uIDMuMy4gICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbW9kdWxlX19gYCAgICAgICAgICAgIHwgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uIHdhcyBkZWZpbmVkIGluLCBvciAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2RlZmF1bHRzX19gYCAgICAgICAgICB8IEEgdHVwbGUgY29udGFpbmluZyBkZWZhdWx0ICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudCB2YWx1ZXMgZm9yIHRob3NlICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnRzIHRoYXQgaGF2ZSBkZWZhdWx0cywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yIGBgTm9uZWBgIGlmIG5vIGFyZ3VtZW50cyAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2NvZGVfX2BgICAgICAgICAgICAgICB8IFRoZSBjb2RlIG9iamVjdCByZXByZXNlbnRpbmcgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgY29tcGlsZWQgZnVuY3Rpb24gYm9keS4gICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2dsb2JhbHNfX2BgICAgICAgICAgICB8IEEgcmVmZXJlbmNlIHRvIHRoZSBkaWN0aW9uYXJ5ICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGhvbGRzIHRoZSBmdW5jdGlvblwncyAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGdsb2JhbCB2YXJpYWJsZXMgLS0tIHRoZSBnbG9iYWwgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSBpbiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLiB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19kaWN0X19gYCAgICAgICAgICAgICAgfCBUaGUgbmFtZXNwYWNlIHN1cHBvcnRpbmcgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0dHJpYnV0ZXMuICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19jbG9zdXJlX19gYCAgICAgICAgICAgfCBgYE5vbmVgYCBvciBhIHR1cGxlIG9mIGNlbGxzICAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBjb250YWluIGJpbmRpbmdzIGZvciB0aGUgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uXCdzIGZyZWUgdmFyaWFibGVzLiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2Fubm90YXRpb25zX19gYCAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGFubm90YXRpb25zICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvZiBwYXJhbWV0ZXJzLiAgVGhlIGtleXMgb2YgdGhlIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGljdCBhcmUgdGhlIHBhcmFtZXRlciBuYW1lcywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yIGBgXCdyZXR1cm5cJ2BgIGZvciB0aGUgcmV0dXJuICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFubm90YXRpb24sIGlmIHByb3ZpZGVkLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fa3dkZWZhdWx0c19fYGAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIEluc3RhbmNlIG1ldGhvZHNcbiAgICAgIEFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgY29tYmluZXMgYSBjbGFzcywgYSBjbGFzcyBpbnN0YW5jZSBhbmRcbiAgICAgIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uKS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBfX3NlbGZfX2BgIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCBgYF9fZnVuY19fYGAgaXMgdGhlIGZ1bmN0aW9uIG9iamVjdDsgYGBfX2RvY19fYGAgaXMgdGhlXG4gICAgICBtZXRob2RcJ3MgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyBgYF9fZnVuY19fLl9fZG9jX19gYCk7XG4gICAgICBgYF9fbmFtZV9fYGAgaXMgdGhlIG1ldGhvZCBuYW1lIChzYW1lIGFzIGBgX19mdW5jX18uX19uYW1lX19gYCk7XG4gICAgICBgYF9fbW9kdWxlX19gYCBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWRcbiAgICAgIGluLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgICAgTWV0aG9kcyBhbHNvIHN1cHBvcnQgYWNjZXNzaW5nIChidXQgbm90IHNldHRpbmcpIHRoZSBhcmJpdHJhcnlcbiAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBVc2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdHMgbWF5IGJlIGNyZWF0ZWQgd2hlbiBnZXR0aW5nIGFuXG4gICAgICBhdHRyaWJ1dGUgb2YgYSBjbGFzcyAocGVyaGFwcyB2aWEgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyksIGlmXG4gICAgICB0aGF0IGF0dHJpYnV0ZSBpcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3Qgb3IgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIHVzZXItXG4gICAgICBkZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBmcm9tIGEgY2xhc3MgdmlhIG9uZSBvZiBpdHMgaW5zdGFuY2VzLFxuICAgICAgaXRzIGBgX19zZWxmX19gYCBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLCBhbmQgdGhlIG1ldGhvZFxuICAgICAgb2JqZWN0IGlzIHNhaWQgdG8gYmUgYm91bmQuICBUaGUgbmV3IG1ldGhvZFwncyBgYF9fZnVuY19fYGBcbiAgICAgIGF0dHJpYnV0ZSBpcyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSBgYF9fZnVuY19fYGBcbiAgICAgIGF0dHJpYnV0ZSBvZiB0aGUgbmV3IGluc3RhbmNlIGlzIG5vdCB0aGUgb3JpZ2luYWwgbWV0aG9kIG9iamVjdFxuICAgICAgYnV0IGl0cyBgYF9fZnVuY19fYGAgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgYGBfX3NlbGZfX2BgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyBgYF9fZnVuY19fYGAgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgZnVuY3Rpb24gb2JqZWN0IHVuZGVybHlpbmcgdGhlIGNsYXNzIG1ldGhvZC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNhbGxlZCwgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uIChgYF9fZnVuY19fYGApIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgKGBgX19zZWxmX19gYCkgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsXG4gICAgICB3aGVuIGBgQ2BgIGlzIGEgY2xhc3Mgd2hpY2ggY29udGFpbnMgYSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uXG4gICAgICBgYGYoKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBDYGAsIGNhbGxpbmcgYGB4LmYoMSlgYFxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgQy5mKHgsIDEpYGAuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluIGBgX19zZWxmX19gYCB3aWxsXG4gICAgICBhY3R1YWxseSBiZSB0aGUgY2xhc3MgaXRzZWxmLCBzbyB0aGF0IGNhbGxpbmcgZWl0aGVyIGBgeC5mKDEpYGBcbiAgICAgIG9yIGBgQy5mKDEpYGAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgZihDLDEpYGAgd2hlcmUgYGBmYGAgaXNcbiAgICAgIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLlxuXG4gICAgICBOb3RlIHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gb2JqZWN0IHRvIGluc3RhbmNlXG4gICAgICBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVkIGZyb21cbiAgICAgIHRoZSBpbnN0YW5jZS4gIEluIHNvbWUgY2FzZXMsIGEgZnJ1aXRmdWwgb3B0aW1pemF0aW9uIGlzIHRvXG4gICAgICBhc3NpZ24gdGhlIGF0dHJpYnV0ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBjYWxsIHRoYXQgbG9jYWxcbiAgICAgIHZhcmlhYmxlLiBBbHNvIG5vdGljZSB0aGF0IHRoaXMgdHJhbnNmb3JtYXRpb24gb25seSBoYXBwZW5zIGZvclxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczsgb3RoZXIgY2FsbGFibGUgb2JqZWN0cyAoYW5kIGFsbCBub24tXG4gICAgICBjYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uICBJdCBpc1xuICAgICAgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgd2hpY2ggYXJlXG4gICAgICBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYm91bmRcbiAgICAgIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYW4gYXR0cmlidXRlXG4gICAgICBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyBgYGl0ZXJhdG9yLl9fbmV4dF9fKClgYCBtZXRob2Qgd2lsbCBjYXVzZSB0aGVcbiAgICAgIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdW50aWwgaXQgcHJvdmlkZXMgYSB2YWx1ZSB1c2luZyB0aGVcbiAgICAgIGBgeWllbGRgYCBzdGF0ZW1lbnQuICBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBhIGBgcmV0dXJuYGBcbiAgICAgIHN0YXRlbWVudCBvciBmYWxscyBvZmYgdGhlIGVuZCwgYSBgYFN0b3BJdGVyYXRpb25gYCBleGNlcHRpb24gaXNcbiAgICAgIHJhaXNlZCBhbmQgdGhlIGl0ZXJhdG9yIHdpbGwgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNldCBvZlxuICAgICAgdmFsdWVzIHRvIGJlIHJldHVybmVkLlxuXG4gICBCdWlsdC1pbiBmdW5jdGlvbnNcbiAgICAgIEEgYnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYSBDIGZ1bmN0aW9uLlxuICAgICAgRXhhbXBsZXMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBgYGxlbigpYGAgYW5kIGBgbWF0aC5zaW4oKWBgXG4gICAgICAoYGBtYXRoYGAgaXMgYSBzdGFuZGFyZCBidWlsdC1pbiBtb2R1bGUpLiBUaGUgbnVtYmVyIGFuZCB0eXBlIG9mXG4gICAgICB0aGUgYXJndW1lbnRzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBDIGZ1bmN0aW9uLiBTcGVjaWFsIHJlYWQtXG4gICAgICBvbmx5IGF0dHJpYnV0ZXM6IGBgX19kb2NfX2BgIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlOyBgYF9fbmFtZV9fYGAgaXMgdGhlXG4gICAgICBmdW5jdGlvblwncyBuYW1lOyBgYF9fc2VsZl9fYGAgaXMgc2V0IHRvIGBgTm9uZWBgIChidXQgc2VlIHRoZVxuICAgICAgbmV4dCBpdGVtKTsgYGBfX21vZHVsZV9fYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGVcbiAgICAgIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIGluIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICBgYGFsaXN0LmFwcGVuZCgpYGAsIGFzc3VtaW5nICphbGlzdCogaXMgYSBsaXN0IG9iamVjdC4gSW4gdGhpc1xuICAgICAgY2FzZSwgdGhlIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZSBgYF9fc2VsZl9fYGAgaXMgc2V0IHRvIHRoZVxuICAgICAgb2JqZWN0IGRlbm90ZWQgYnkgKmFsaXN0Ki5cblxuICAgQ2xhc3Nlc1xuICAgICAgQ2xhc3NlcyBhcmUgY2FsbGFibGUuICBUaGVzZSBvYmplY3RzIG5vcm1hbGx5IGFjdCBhcyBmYWN0b3JpZXNcbiAgICAgIGZvciBuZXcgaW5zdGFuY2VzIG9mIHRoZW1zZWx2ZXMsIGJ1dCB2YXJpYXRpb25zIGFyZSBwb3NzaWJsZSBmb3JcbiAgICAgIGNsYXNzIHR5cGVzIHRoYXQgb3ZlcnJpZGUgYGBfX25ld19fKClgYC4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYCBhbmQsIGluIHRoZSB0eXBpY2FsIGNhc2UsIHRvXG4gICAgICBgYF9faW5pdF9fKClgYCB0byBpbml0aWFsaXplIHRoZSBuZXcgaW5zdGFuY2UuXG5cbiAgIENsYXNzIEluc3RhbmNlc1xuICAgICAgSW5zdGFuY2VzIG9mIGFyYml0cmFyeSBjbGFzc2VzIGNhbiBiZSBtYWRlIGNhbGxhYmxlIGJ5IGRlZmluaW5nXG4gICAgICBhIGBgX19jYWxsX18oKWBgIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlIGBgaW1wb3J0YGBcbiAgIHN0YXRlbWVudCAoc2VlIGBgaW1wb3J0YGApLCBvciBieSBjYWxsaW5nIGZ1bmN0aW9ucyBzdWNoIGFzXG4gICBgYGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKClgYCBhbmQgYnVpbHQtaW4gYGBfX2ltcG9ydF9fKClgYC4gIEFcbiAgIG1vZHVsZSBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3RcbiAgICh0aGlzIGlzIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlIGBgX19nbG9iYWxzX19gYCBhdHRyaWJ1dGVcbiAgIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUpLiAgQXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlXG4gICB0cmFuc2xhdGVkIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCBgYG0ueGBgIGlzXG4gICBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdYGAuIEEgbW9kdWxlIG9iamVjdCBkb2VzIG5vdCBjb250YWluXG4gICB0aGUgY29kZSBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGUgKHNpbmNlIGl0IGlzblwndFxuICAgbmVlZGVkIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCBgYG0ueCA9IDFgYCBpcyBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdID0gMWBgLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6IGBgX19kaWN0X19gYCBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvblxuICAgY2xlYXJzIG1vZHVsZSBkaWN0aW9uYXJpZXMsIHRoZSBtb2R1bGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWRcbiAgIHdoZW4gdGhlIG1vZHVsZSBmYWxscyBvdXQgb2Ygc2NvcGUgZXZlbiBpZiB0aGUgZGljdGlvbmFyeSBzdGlsbCBoYXNcbiAgIGxpdmUgcmVmZXJlbmNlcy4gIFRvIGF2b2lkIHRoaXMsIGNvcHkgdGhlIGRpY3Rpb25hcnkgb3Iga2VlcCB0aGVcbiAgIG1vZHVsZSBhcm91bmQgd2hpbGUgdXNpbmcgaXRzIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIFByZWRlZmluZWQgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzOiBgYF9fbmFtZV9fYGAgaXMgdGhlIG1vZHVsZVwnc1xuICAgbmFtZTsgYGBfX2RvY19fYGAgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgYGBOb25lYGBcbiAgIGlmIHVuYXZhaWxhYmxlOyBgYF9fZmlsZV9fYGAgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIGZyb20gd2hpY2hcbiAgIHRoZSBtb2R1bGUgd2FzIGxvYWRlZCwgaWYgaXQgd2FzIGxvYWRlZCBmcm9tIGEgZmlsZS4gVGhlXG4gICBgYF9fZmlsZV9fYGAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsXG4gICBzdWNoIGFzIEMgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjtcbiAgIGZvciBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdFxuICAgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBDLnhgYCBpcyB0cmFuc2xhdGVkIHRvXG4gICBgYEMuX19kaWN0X19bIngiXWBgIChhbHRob3VnaCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaG9va3Mgd2hpY2hcbiAgIGFsbG93IGZvciBvdGhlciBtZWFucyBvZiBsb2NhdGluZyBhdHRyaWJ1dGVzKS4gV2hlbiB0aGUgYXR0cmlidXRlXG4gICBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGF0dHJpYnV0ZSBzZWFyY2ggY29udGludWVzIGluIHRoZSBiYXNlXG4gICBjbGFzc2VzLiBUaGlzIHNlYXJjaCBvZiB0aGUgYmFzZSBjbGFzc2VzIHVzZXMgdGhlIEMzIG1ldGhvZFxuICAgcmVzb2x1dGlvbiBvcmRlciB3aGljaCBiZWhhdmVzIGNvcnJlY3RseSBldmVuIGluIHRoZSBwcmVzZW5jZSBvZlxuICAgXCdkaWFtb25kXCcgaW5oZXJpdGFuY2Ugc3RydWN0dXJlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAgIGluaGVyaXRhbmNlIHBhdGhzIGxlYWRpbmcgYmFjayB0byBhIGNvbW1vbiBhbmNlc3Rvci4gQWRkaXRpb25hbFxuICAgZGV0YWlscyBvbiB0aGUgQzMgTVJPIHVzZWQgYnkgUHl0aG9uIGNhbiBiZSBmb3VuZCBpbiB0aGVcbiAgIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSAyLjMgcmVsZWFzZSBhdFxuICAgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLlxuXG4gICBXaGVuIGEgY2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZSAoZm9yIGNsYXNzIGBgQ2BgLCBzYXkpIHdvdWxkIHlpZWxkXG4gICBhIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZXMgaXMgYGBDYGAuICBXaGVuIGl0IHdvdWxkIHlpZWxkXG4gICBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBvYmplY3Qgd3JhcHBlZFxuICAgYnkgdGhlIHN0YXRpYyBtZXRob2Qgb2JqZWN0LiBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKlxuICAgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRob3NlIGFjdHVhbGx5IGNvbnRhaW5lZCBpbiBpdHMgYGBfX2RpY3RfX2BgLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgY2xhc3MgbmFtZTsgYGBfX21vZHVsZV9fYGBcbiAgIGlzIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7IGBgX19kaWN0X19gYCBpc1xuICAgdGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyBgYF9fYmFzZXNfX2BgIGlzIGFcbiAgIHR1cGxlIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLFxuICAgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDtcbiAgIGBgX19kb2NfX2BgIGlzIHRoZSBjbGFzc1wncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgTm9uZSBpZlxuICAgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UuICBTdGF0aWMgbWV0aG9kIGFuZFxuICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGFsc28gdHJhbnNmb3JtZWQ7IHNlZSBhYm92ZSB1bmRlclxuICAgIkNsYXNzZXMiLiAgU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyogZm9yIGFub3RoZXIgd2F5XG4gICBpbiB3aGljaCBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heVxuICAgZGlmZmVyIGZyb20gdGhlIG9iamVjdHMgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSBjbGFzc1wnc1xuICAgYGBfX2RpY3RfX2BgLiAgSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kLCBhbmQgdGhlIG9iamVjdFwnc1xuICAgY2xhc3MgaGFzIGEgYGBfX2dldGF0dHJfXygpYGAgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZVxuICAgbG9va3VwLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudHMgYW5kIGRlbGV0aW9ucyB1cGRhdGUgdGhlIGluc3RhbmNlXCdzXG4gICBkaWN0aW9uYXJ5LCBuZXZlciBhIGNsYXNzXCdzIGRpY3Rpb25hcnkuICBJZiB0aGUgY2xhc3MgaGFzIGFcbiAgIGBgX19zZXRhdHRyX18oKWBgIG9yIGBgX19kZWxhdHRyX18oKWBgIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19kaWN0X19gYCBpcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnk7XG4gICBgYF9fY2xhc3NfX2BgIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlIGBgb3BlbigpYGAgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyBgYG9zLnBvcGVuKClgYCwgYGBvcy5mZG9wZW4oKWBgLCBhbmQgdGhlIGBgbWFrZWZpbGUoKWBgXG4gICBtZXRob2Qgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzIGBgc3lzLnN0ZGluYGAsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICBgYGlvLlRleHRJT0Jhc2VgYCBhYnN0cmFjdCBjbGFzcy5cblxuSW50ZXJuYWwgdHlwZXNcbiAgIEEgZmV3IHR5cGVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgaW50ZXJwcmV0ZXIgYXJlIGV4cG9zZWQgdG8gdGhlXG4gICB1c2VyLiBUaGVpciBkZWZpbml0aW9ucyBtYXkgY2hhbmdlIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIHRoZVxuICAgaW50ZXJwcmV0ZXIsIGJ1dCB0aGV5IGFyZSBtZW50aW9uZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLlxuXG4gICBDb2RlIG9iamVjdHNcbiAgICAgIENvZGUgb2JqZWN0cyByZXByZXNlbnQgKmJ5dGUtY29tcGlsZWQqIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGUsXG4gICAgICBvciAqYnl0ZWNvZGUqLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29kZSBvYmplY3QgYW5kIGFcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYW4gZXhwbGljaXRcbiAgICAgIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb25cJ3MgZ2xvYmFscyAodGhlIG1vZHVsZSBpbiB3aGljaCBpdCB3YXNcbiAgICAgIGRlZmluZWQpLCB3aGlsZSBhIGNvZGUgb2JqZWN0IGNvbnRhaW5zIG5vIGNvbnRleHQ7IGFsc28gdGhlXG4gICAgICBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBmdW5jdGlvbiBvYmplY3QsIG5vdFxuICAgICAgaW4gdGhlIGNvZGUgb2JqZWN0IChiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHZhbHVlcyBjYWxjdWxhdGVkIGF0XG4gICAgICBydW4tdGltZSkuICBVbmxpa2UgZnVuY3Rpb24gb2JqZWN0cywgY29kZSBvYmplY3RzIGFyZSBpbW11dGFibGVcbiAgICAgIGFuZCBjb250YWluIG5vIHJlZmVyZW5jZXMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHRvIG11dGFibGVcbiAgICAgIG9iamVjdHMuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgY29fbmFtZWBgIGdpdmVzIHRoZSBmdW5jdGlvblxuICAgICAgbmFtZTsgYGBjb19hcmdjb3VudGBgIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHNcbiAgICAgIChpbmNsdWRpbmcgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyBgYGNvX25sb2NhbHNgYCBpcyB0aGVcbiAgICAgIG51bWJlciBvZiBsb2NhbCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzKTsgYGBjb192YXJuYW1lc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2ZcbiAgICAgIHRoZSBsb2NhbCB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTtcbiAgICAgIGBgY29fY2VsbHZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zO1xuICAgICAgYGBjb19mcmVldmFyc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgZnJlZVxuICAgICAgdmFyaWFibGVzOyBgYGNvX2NvZGVgYCBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mXG4gICAgICBieXRlY29kZSBpbnN0cnVjdGlvbnM7IGBgY29fY29uc3RzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZVxuICAgICAgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fbmFtZXNgYCBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTsgYGBjb19maWxlbmFtZWBgIGlzXG4gICAgICB0aGUgZmlsZW5hbWUgZnJvbSB3aGljaCB0aGUgY29kZSB3YXMgY29tcGlsZWQ7XG4gICAgICBgYGNvX2ZpcnN0bGluZW5vYGAgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgIGBgY29fbG5vdGFiYGAgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7IGBgY29fc3RhY2tzaXplYGAgaXMgdGhlIHJlcXVpcmVkIHN0YWNrIHNpemVcbiAgICAgIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzKTsgYGBjb19mbGFnc2BgIGlzIGFuIGludGVnZXIgZW5jb2RpbmdcbiAgICAgIGEgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciBgYGNvX2ZsYWdzYGA6IGJpdFxuICAgICAgYGAweDA0YGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgYCphcmd1bWVudHNgYCBzeW50YXhcbiAgICAgIHRvIGFjY2VwdCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXRcbiAgICAgIGBgMHgwOGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqKmtleXdvcmRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzOyBiaXQgYGAweDIwYGAgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0XG4gICAgICBkaXZpc2lvbmBgKSBhbHNvIHVzZSBiaXRzIGluIGBgY29fZmxhZ3NgYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGFcbiAgICAgIGNvZGUgb2JqZWN0IHdhcyBjb21waWxlZCB3aXRoIGEgcGFydGljdWxhciBmZWF0dXJlIGVuYWJsZWQ6IGJpdFxuICAgICAgYGAweDIwMDBgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZVxuICAgICAgZGl2aXNpb24gZW5hYmxlZDsgYml0cyBgYDB4MTBgYCBhbmQgYGAweDEwMDBgYCB3ZXJlIHVzZWQgaW5cbiAgICAgIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLlxuXG4gICAgICBPdGhlciBiaXRzIGluIGBgY29fZmxhZ3NgYCBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICBgYGNvX2NvbnN0c2BgIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICBgYE5vbmVgYCBpZiB1bmRlZmluZWQuXG5cbiAgIEZyYW1lIG9iamVjdHNcbiAgICAgIEZyYW1lIG9iamVjdHMgcmVwcmVzZW50IGV4ZWN1dGlvbiBmcmFtZXMuICBUaGV5IG1heSBvY2N1ciBpblxuICAgICAgdHJhY2ViYWNrIG9iamVjdHMgKHNlZSBiZWxvdykuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgZl9iYWNrYGAgaXMgdG8gdGhlIHByZXZpb3VzXG4gICAgICBzdGFjayBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgYGBOb25lYGAgaWYgdGhpcyBpcyB0aGVcbiAgICAgIGJvdHRvbSBzdGFjayBmcmFtZTsgYGBmX2NvZGVgYCBpcyB0aGUgY29kZSBvYmplY3QgYmVpbmcgZXhlY3V0ZWRcbiAgICAgIGluIHRoaXMgZnJhbWU7IGBgZl9sb2NhbHNgYCBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXBcbiAgICAgIGxvY2FsIHZhcmlhYmxlczsgYGBmX2dsb2JhbHNgYCBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgYGBmX2J1aWx0aW5zYGAgaXMgdXNlZCBmb3IgYnVpbHQtaW4gKGludHJpbnNpYykgbmFtZXM7XG4gICAgICBgYGZfbGFzdGlgYCBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvXG4gICAgICB0aGUgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogYGBmX3RyYWNlYGAsIGlmIG5vdCBgYE5vbmVgYCwgaXMgYVxuICAgICAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBjb2RlIGxpbmUgKHRoaXMgaXNcbiAgICAgIHVzZWQgYnkgdGhlIGRlYnVnZ2VyKTsgYGBmX2xpbmVub2BgIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyXG4gICAgICBvZiB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uXG4gICAgICBqdW1wcyB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEFcbiAgICAgIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpXG4gICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLlxuXG4gICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgZnJhbWUuY2xlYXIoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnlcbiAgICAgICAgIHRoZSBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlXG4gICAgICAgICBnZW5lcmF0b3IgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzXG4gICAgICAgICBpbnZvbHZpbmcgZnJhbWUgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhblxuICAgICAgICAgZXhjZXB0aW9uIGFuZCBzdG9yaW5nIGl0cyB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuXG5cbiAgICAgICAgIGBgUnVudGltZUVycm9yYGAgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHlcbiAgICAgICAgIGV4ZWN1dGluZy5cblxuICAgICAgICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5IGBgc3lzLmV4Y19pbmZvKClgYC4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWluc1xuICAgICAgbm8gc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseVxuICAgICAgZm9ybWF0dGVkKSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXNcbiAgICAgIGludGVyYWN0aXZlLCBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzXG4gICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYHRiX25leHRgYCBpcyB0aGUgbmV4dCBsZXZlbCBpblxuICAgICAgdGhlIHN0YWNrIHRyYWNlICh0b3dhcmRzIHRoZSBmcmFtZSB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCksIG9yIGBgTm9uZWBgIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7IGBgdGJfZnJhbWVgYFxuICAgICAgcG9pbnRzIHRvIHRoZSBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7XG4gICAgICBgYHRiX2xpbmVub2BgIGdpdmVzIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZDsgYGB0Yl9sYXN0aWBgIGluZGljYXRlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZVxuICAgICAgbGluZSBudW1iZXIgYW5kIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyXG4gICAgICBmcm9tIHRoZSBsaW5lIG51bWJlciBvZiBpdHMgZnJhbWUgb2JqZWN0IGlmIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkIGluIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBubyBtYXRjaGluZyBleGNlcHQgY2xhdXNlXG4gICAgICBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgYGBfX2dldGl0ZW1fXygpYGBcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluIGBgc2xpY2UoKWBgXG4gICAgICBmdW5jdGlvbi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBzdGFydGBgIGlzIHRoZSBsb3dlciBib3VuZDtcbiAgICAgIGBgc3RvcGBgIGlzIHRoZSB1cHBlciBib3VuZDsgYGBzdGVwYGAgaXMgdGhlIHN0ZXAgdmFsdWU7IGVhY2ggaXNcbiAgICAgIGBgTm9uZWBgIGlmIG9taXR0ZWQuICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xpY2UgdGhhdCB0aGUgc2xpY2Ugb2JqZWN0XG4gICAgICAgICB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCogaXRlbXMuXG4gICAgICAgICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseSB0aGVzZSBhcmVcbiAgICAgICAgIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvciBzdHJpZGVcbiAgICAgICAgIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzIGFyZVxuICAgICAgICAgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzdGF0aWNtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluIGBgY2xhc3NtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuJywKICAndHlwZXNmdW5jdGlvbnMnOiAnXG5GdW5jdGlvbnNcbioqKioqKioqKlxuXG5GdW5jdGlvbiBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IGZ1bmN0aW9uIGRlZmluaXRpb25zLiAgVGhlIG9ubHlcbm9wZXJhdGlvbiBvbiBhIGZ1bmN0aW9uIG9iamVjdCBpcyB0byBjYWxsIGl0OiBgYGZ1bmMoYXJndW1lbnQtbGlzdClgYC5cblxuVGhlcmUgYXJlIHJlYWxseSB0d28gZmxhdm9ycyBvZiBmdW5jdGlvbiBvYmplY3RzOiBidWlsdC1pbiBmdW5jdGlvbnNcbmFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiAgQm90aCBzdXBwb3J0IHRoZSBzYW1lIG9wZXJhdGlvbiAodG8gY2FsbFxudGhlIGZ1bmN0aW9uKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQsIGhlbmNlIHRoZVxuZGlmZmVyZW50IG9iamVjdCB0eXBlcy5cblxuU2VlICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAogICd0eXBlc21hcHBpbmcnOiAnXG5NYXBwaW5nIFR5cGVzIC0tLSBgYGRpY3RgYFxuKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqbWFwcGluZyogb2JqZWN0IG1hcHMgKmhhc2hhYmxlKiB2YWx1ZXMgdG8gYXJiaXRyYXJ5IG9iamVjdHMuXG5NYXBwaW5ncyBhcmUgbXV0YWJsZSBvYmplY3RzLiAgVGhlcmUgaXMgY3VycmVudGx5IG9ubHkgb25lIHN0YW5kYXJkXG5tYXBwaW5nIHR5cGUsIHRoZSAqZGljdGlvbmFyeSouICAoRm9yIG90aGVyIGNvbnRhaW5lcnMgc2VlIHRoZSBidWlsdC1cbmluIGBgbGlzdGBgLCBgYHNldGBgLCBhbmQgYGB0dXBsZWBgIGNsYXNzZXMsIGFuZCB0aGUgYGBjb2xsZWN0aW9uc2BgXG5tb2R1bGUuKVxuXG5BIGRpY3Rpb25hcnlcJ3Mga2V5cyBhcmUgKmFsbW9zdCogYXJiaXRyYXJ5IHZhbHVlcy4gIFZhbHVlcyB0aGF0IGFyZVxubm90ICpoYXNoYWJsZSosIHRoYXQgaXMsIHZhbHVlcyBjb250YWluaW5nIGxpc3RzLCBkaWN0aW9uYXJpZXMgb3Jcbm90aGVyIG11dGFibGUgdHlwZXMgKHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuaWRlbnRpdHkpIG1heSBub3QgYmUgdXNlZCBhcyBrZXlzLiAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXlcbnRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbFxuKHN1Y2ggYXMgYGAxYGAgYW5kIGBgMS4wYGApIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG9cbmluZGV4IHRoZSBzYW1lIGRpY3Rpb25hcnkgZW50cnkuICAoTm90ZSBob3dldmVyLCB0aGF0IHNpbmNlIGNvbXB1dGVyc1xuc3RvcmUgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcyBhcHByb3hpbWF0aW9ucyBpdCBpcyB1c3VhbGx5IHVud2lzZSB0b1xudXNlIHRoZW0gYXMgZGljdGlvbmFyeSBrZXlzLilcblxuRGljdGlvbmFyaWVzIGNhbiBiZSBjcmVhdGVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZlxuYGBrZXk6IHZhbHVlYGAgcGFpcnMgd2l0aGluIGJyYWNlcywgZm9yIGV4YW1wbGU6IGBge1wnamFja1wnOiA0MDk4LFxuXCdzam9lcmRcJzogNDEyN31gYCBvciBgYHs0MDk4OiBcJ2phY2tcJywgNDEyNzogXCdzam9lcmRcJ31gYCwgb3IgYnkgdGhlXG5gYGRpY3RgYCBjb25zdHJ1Y3Rvci5cblxuY2xhc3MgY2xhc3MgZGljdCgqKmt3YXJnKVxuY2xhc3MgY2xhc3MgZGljdChtYXBwaW5nLCAqKmt3YXJnKVxuY2xhc3MgY2xhc3MgZGljdChpdGVyYWJsZSwgKiprd2FyZylcblxuICAgUmV0dXJuIGEgbmV3IGRpY3Rpb25hcnkgaW5pdGlhbGl6ZWQgZnJvbSBhbiBvcHRpb25hbCBwb3NpdGlvbmFsXG4gICBhcmd1bWVudCBhbmQgYSBwb3NzaWJseSBlbXB0eSBzZXQgb2Yga2V5d29yZCBhcmd1bWVudHMuXG5cbiAgIElmIG5vIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4sIGFuIGVtcHR5IGRpY3Rpb25hcnkgaXMgY3JlYXRlZC5cbiAgIElmIGEgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiBhbmQgaXQgaXMgYSBtYXBwaW5nIG9iamVjdCwgYVxuICAgZGljdGlvbmFyeSBpcyBjcmVhdGVkIHdpdGggdGhlIHNhbWUga2V5LXZhbHVlIHBhaXJzIGFzIHRoZSBtYXBwaW5nXG4gICBvYmplY3QuICBPdGhlcndpc2UsIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gKml0ZXJhdG9yKlxuICAgb2JqZWN0LiAgRWFjaCBpdGVtIGluIHRoZSBpdGVyYWJsZSBtdXN0IGl0c2VsZiBiZSBhbiBpdGVyYXRvciB3aXRoXG4gICBleGFjdGx5IHR3byBvYmplY3RzLiAgVGhlIGZpcnN0IG9iamVjdCBvZiBlYWNoIGl0ZW0gYmVjb21lcyBhIGtleVxuICAgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5LCBhbmQgdGhlIHNlY29uZCBvYmplY3QgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIHZhbHVlLiAgSWYgYSBrZXkgb2NjdXJzIG1vcmUgdGhhbiBvbmNlLCB0aGUgbGFzdCB2YWx1ZSBmb3IgdGhhdCBrZXlcbiAgIGJlY29tZXMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5LlxuXG4gICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBhbmQgdGhlaXJcbiAgIHZhbHVlcyBhcmUgYWRkZWQgdG8gdGhlIGRpY3Rpb25hcnkgY3JlYXRlZCBmcm9tIHRoZSBwb3NpdGlvbmFsXG4gICBhcmd1bWVudC4gIElmIGEga2V5IGJlaW5nIGFkZGVkIGlzIGFscmVhZHkgcHJlc2VudCwgdGhlIHZhbHVlIGZyb21cbiAgIHRoZSBrZXl3b3JkIGFyZ3VtZW50IHJlcGxhY2VzIHRoZSB2YWx1ZSBmcm9tIHRoZSBwb3NpdGlvbmFsXG4gICBhcmd1bWVudC5cblxuICAgVG8gaWxsdXN0cmF0ZSwgdGhlIGZvbGxvd2luZyBleGFtcGxlcyBhbGwgcmV0dXJuIGEgZGljdGlvbmFyeSBlcXVhbFxuICAgdG8gYGB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfWBgOlxuXG4gICAgICA+Pj4gYSA9IGRpY3Qob25lPTEsIHR3bz0yLCB0aHJlZT0zKVxuICAgICAgPj4+IGIgPSB7XCdvbmVcJzogMSwgXCd0d29cJzogMiwgXCd0aHJlZVwnOiAzfVxuICAgICAgPj4+IGMgPSBkaWN0KHppcChbXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnXSwgWzEsIDIsIDNdKSlcbiAgICAgID4+PiBkID0gZGljdChbKFwndHdvXCcsIDIpLCAoXCdvbmVcJywgMSksIChcJ3RocmVlXCcsIDMpXSlcbiAgICAgID4+PiBlID0gZGljdCh7XCd0aHJlZVwnOiAzLCBcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyfSlcbiAgICAgID4+PiBhID09IGIgPT0gYyA9PSBkID09IGVcbiAgICAgIFRydWVcblxuICAgUHJvdmlkaW5nIGtleXdvcmQgYXJndW1lbnRzIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlIG9ubHkgd29ya3MgZm9yXG4gICBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycy4gIE90aGVyd2lzZSwgYW55IHZhbGlkIGtleXNcbiAgIGNhbiBiZSB1c2VkLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmXG4gICAgICAqa2V5KiBpcyBub3QgaW4gdGhlIG1hcC5cblxuICAgICAgSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2QgYGBfX21pc3NpbmdfXygpYGAsIGlmIHRoZVxuICAgICAga2V5ICprZXkqIGlzIG5vdCBwcmVzZW50LCB0aGUgYGBkW2tleV1gYCBvcGVyYXRpb24gY2FsbHMgdGhhdFxuICAgICAgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhcyBhcmd1bWVudC4gIFRoZSBgYGRba2V5XWBgIG9wZXJhdGlvblxuICAgICAgdGhlbiByZXR1cm5zIG9yIHJhaXNlcyB3aGF0ZXZlciBpcyByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlXG4gICAgICBgYF9fbWlzc2luZ19fKGtleSlgYCBjYWxsIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuIE5vIG90aGVyXG4gICAgICBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlIGBgX19taXNzaW5nX18oKWBgLiBJZlxuICAgICAgYGBfX21pc3NpbmdfXygpYGAgaXMgbm90IGRlZmluZWQsIGBgS2V5RXJyb3JgYCBpcyByYWlzZWQuXG4gICAgICBgYF9fbWlzc2luZ19fKClgYCBtdXN0IGJlIGEgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW4gaW5zdGFuY2VcbiAgICAgIHZhcmlhYmxlOlxuXG4gICAgICAgICA+Pj4gY2xhc3MgQ291bnRlcihkaWN0KTpcbiAgICAgICAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6XG4gICAgICAgICAuLi4gICAgICAgICByZXR1cm4gMFxuICAgICAgICAgPj4+IGMgPSBDb3VudGVyKClcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAwXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXSArPSAxXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMVxuXG4gICAgICBTZWUgYGBjb2xsZWN0aW9ucy5Db3VudGVyYGAgZm9yIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb25cbiAgICAgIGluY2x1ZGluZyBvdGhlciBtZXRob2RzIGhlbHBmdWwgZm9yIGFjY3VtdWxhdGluZyBhbmQgbWFuYWdpbmdcbiAgICAgIHRhbGxpZXMuXG5cbiAgIGRba2V5XSA9IHZhbHVlXG5cbiAgICAgIFNldCBgYGRba2V5XWBgIHRvICp2YWx1ZSouXG5cbiAgIGRlbCBkW2tleV1cblxuICAgICAgUmVtb3ZlIGBgZFtrZXldYGAgZnJvbSAqZCouICBSYWlzZXMgYSBgYEtleUVycm9yYGAgaWYgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgbWFwLlxuXG4gICBrZXkgaW4gZFxuXG4gICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgKmQqIGhhcyBhIGtleSAqa2V5KiwgZWxzZSBgYEZhbHNlYGAuXG5cbiAgIGtleSBub3QgaW4gZFxuXG4gICAgICBFcXVpdmFsZW50IHRvIGBgbm90IGtleSBpbiBkYGAuXG5cbiAgIGl0ZXIoZClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkuICBUaGlzIGlzIGFcbiAgICAgIHNob3J0Y3V0IGZvciBgYGl0ZXIoZC5rZXlzKCkpYGAuXG5cbiAgIGNsZWFyKClcblxuICAgICAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjb3B5KClcblxuICAgICAgUmV0dXJuIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjbGFzc21ldGhvZCBmcm9ta2V5cyhzZXFbLCB2YWx1ZV0pXG5cbiAgICAgIENyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tICpzZXEqIGFuZCB2YWx1ZXMgc2V0IHRvXG4gICAgICAqdmFsdWUqLlxuXG4gICAgICBgYGZyb21rZXlzKClgYCBpcyBhIGNsYXNzIG1ldGhvZCB0aGF0IHJldHVybnMgYSBuZXcgZGljdGlvbmFyeS5cbiAgICAgICp2YWx1ZSogZGVmYXVsdHMgdG8gYGBOb25lYGAuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gYGBOb25lYGAsXG4gICAgICBzbyB0aGF0IHRoaXMgbWV0aG9kIG5ldmVyIHJhaXNlcyBhIGBgS2V5RXJyb3JgYC5cblxuICAgaXRlbXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBpdGVtcyAoYGAoa2V5LCB2YWx1ZSlgYFxuICAgICAgcGFpcnMpLiBTZWUgdGhlICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIGtleXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBrZXlzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSBgYEtleUVycm9yYGAgaXMgcmFpc2VkLlxuXG4gICBwb3BpdGVtKClcblxuICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gYXJiaXRyYXJ5IGBgKGtleSwgdmFsdWUpYGAgcGFpciBmcm9tIHRoZVxuICAgICAgZGljdGlvbmFyeS5cblxuICAgICAgYGBwb3BpdGVtKClgYCBpcyB1c2VmdWwgdG8gZGVzdHJ1Y3RpdmVseSBpdGVyYXRlIG92ZXIgYVxuICAgICAgZGljdGlvbmFyeSwgYXMgb2Z0ZW4gdXNlZCBpbiBzZXQgYWxnb3JpdGhtcy4gIElmIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyBlbXB0eSwgY2FsbGluZyBgYHBvcGl0ZW0oKWBgIHJhaXNlcyBhIGBgS2V5RXJyb3JgYC5cblxuICAgc2V0ZGVmYXVsdChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJldHVybiBpdHMgdmFsdWUuICBJZiBub3QsIGluc2VydFxuICAgICAgKmtleSogd2l0aCBhIHZhbHVlIG9mICpkZWZhdWx0KiBhbmQgcmV0dXJuICpkZWZhdWx0Ki4gICpkZWZhdWx0KlxuICAgICAgZGVmYXVsdHMgdG8gYGBOb25lYGAuXG5cbiAgIHVwZGF0ZShbb3RoZXJdKVxuXG4gICAgICBVcGRhdGUgdGhlIGRpY3Rpb25hcnkgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gKm90aGVyKixcbiAgICAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gYGBOb25lYGAuXG5cbiAgICAgIGBgdXBkYXRlKClgYCBhY2NlcHRzIGVpdGhlciBhbm90aGVyIGRpY3Rpb25hcnkgb2JqZWN0IG9yIGFuXG4gICAgICBpdGVyYWJsZSBvZiBrZXkvdmFsdWUgcGFpcnMgKGFzIHR1cGxlcyBvciBvdGhlciBpdGVyYWJsZXMgb2ZcbiAgICAgIGxlbmd0aCB0d28pLiAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCwgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIHRoZW4gdXBkYXRlZCB3aXRoIHRob3NlIGtleS92YWx1ZSBwYWlyczogYGBkLnVwZGF0ZShyZWQ9MSxcbiAgICAgIGJsdWU9MilgYC5cblxuICAgdmFsdWVzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuU2VlIGFsc286XG5cbiAgIGBgdHlwZXMuTWFwcGluZ1Byb3h5VHlwZWBgIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHJlYWQtb25seSB2aWV3XG4gICBvZiBhIGBgZGljdGBgLlxuXG5cbkRpY3Rpb25hcnkgdmlldyBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb2JqZWN0cyByZXR1cm5lZCBieSBgYGRpY3Qua2V5cygpYGAsIGBgZGljdC52YWx1ZXMoKWBgIGFuZFxuYGBkaWN0Lml0ZW1zKClgYCBhcmUgKnZpZXcgb2JqZWN0cyouICBUaGV5IHByb3ZpZGUgYSBkeW5hbWljIHZpZXcgb25cbnRoZSBkaWN0aW9uYXJ5XCdzIGVudHJpZXMsIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiB0aGUgZGljdGlvbmFyeVxuY2hhbmdlcywgdGhlIHZpZXcgcmVmbGVjdHMgdGhlc2UgY2hhbmdlcy5cblxuRGljdGlvbmFyeSB2aWV3cyBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB0byB5aWVsZCB0aGVpciByZXNwZWN0aXZlIGRhdGEsXG5hbmQgc3VwcG9ydCBtZW1iZXJzaGlwIHRlc3RzOlxuXG5sZW4oZGljdHZpZXcpXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbml0ZXIoZGljdHZpZXcpXG5cbiAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzLCB2YWx1ZXMgb3IgaXRlbXMgKHJlcHJlc2VudGVkIGFzXG4gICB0dXBsZXMgb2YgYGAoa2V5LCB2YWx1ZSlgYCkgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIEtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiBhbiBhcmJpdHJhcnkgb3JkZXIgd2hpY2ggaXNcbiAgIG5vbi1yYW5kb20sIHZhcmllcyBhY3Jvc3MgUHl0aG9uIGltcGxlbWVudGF0aW9ucywgYW5kIGRlcGVuZHMgb25cbiAgIHRoZSBkaWN0aW9uYXJ5XCdzIGhpc3Rvcnkgb2YgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zLiBJZiBrZXlzLFxuICAgdmFsdWVzIGFuZCBpdGVtcyB2aWV3cyBhcmUgaXRlcmF0ZWQgb3ZlciB3aXRoIG5vIGludGVydmVuaW5nXG4gICBtb2RpZmljYXRpb25zIHRvIHRoZSBkaWN0aW9uYXJ5LCB0aGUgb3JkZXIgb2YgaXRlbXMgd2lsbCBkaXJlY3RseVxuICAgY29ycmVzcG9uZC4gIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBgYCh2YWx1ZSwga2V5KWBgIHBhaXJzXG4gICB1c2luZyBgYHppcCgpYGA6IGBgcGFpcnMgPSB6aXAoZC52YWx1ZXMoKSwgZC5rZXlzKCkpYGAuICBBbm90aGVyXG4gICB3YXkgdG8gY3JlYXRlIHRoZSBzYW1lIGxpc3QgaXMgYGBwYWlycyA9IFsodiwgaykgZm9yIChrLCB2KSBpblxuICAgZC5pdGVtcygpXWBgLlxuXG4gICBJdGVyYXRpbmcgdmlld3Mgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnlcbiAgIG1heSByYWlzZSBhIGBgUnVudGltZUVycm9yYGAgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMuXG5cbnggaW4gZGljdHZpZXdcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICp4KiBpcyBpbiB0aGUgdW5kZXJseWluZyBkaWN0aW9uYXJ5XCdzIGtleXMsXG4gICB2YWx1ZXMgb3IgaXRlbXMgKGluIHRoZSBsYXR0ZXIgY2FzZSwgKngqIHNob3VsZCBiZSBhIGBgKGtleSxcbiAgIHZhbHVlKWBgIHR1cGxlKS5cblxuS2V5cyB2aWV3cyBhcmUgc2V0LWxpa2Ugc2luY2UgdGhlaXIgZW50cmllcyBhcmUgdW5pcXVlIGFuZCBoYXNoYWJsZS5cbklmIGFsbCB2YWx1ZXMgYXJlIGhhc2hhYmxlLCBzbyB0aGF0IGBgKGtleSwgdmFsdWUpYGAgcGFpcnMgYXJlIHVuaXF1ZVxuYW5kIGhhc2hhYmxlLCB0aGVuIHRoZSBpdGVtcyB2aWV3IGlzIGFsc28gc2V0LWxpa2UuICAoVmFsdWVzIHZpZXdzIGFyZVxubm90IHRyZWF0ZWQgYXMgc2V0LWxpa2Ugc2luY2UgdGhlIGVudHJpZXMgYXJlIGdlbmVyYWxseSBub3QgdW5pcXVlLilcbkZvciBzZXQtbGlrZSB2aWV3cywgYWxsIG9mIHRoZSBvcGVyYXRpb25zIGRlZmluZWQgZm9yIHRoZSBhYnN0cmFjdFxuYmFzZSBjbGFzcyBgYGNvbGxlY3Rpb25zLmFiYy5TZXRgYCBhcmUgYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgYGA9PWBgLFxuYGA8YGAsIG9yIGBgXmBgKS5cblxuQW4gZXhhbXBsZSBvZiBkaWN0aW9uYXJ5IHZpZXcgdXNhZ2U6XG5cbiAgID4+PiBkaXNoZXMgPSB7XCdlZ2dzXCc6IDIsIFwnc2F1c2FnZVwnOiAxLCBcJ2JhY29uXCc6IDEsIFwnc3BhbVwnOiA1MDB9XG4gICA+Pj4ga2V5cyA9IGRpc2hlcy5rZXlzKClcbiAgID4+PiB2YWx1ZXMgPSBkaXNoZXMudmFsdWVzKClcblxuICAgPj4+ICMgaXRlcmF0aW9uXG4gICA+Pj4gbiA9IDBcbiAgID4+PiBmb3IgdmFsIGluIHZhbHVlczpcbiAgIC4uLiAgICAgbiArPSB2YWxcbiAgID4+PiBwcmludChuKVxuICAgNTA0XG5cbiAgID4+PiAjIGtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiB0aGUgc2FtZSBvcmRlclxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhdXNhZ2VcJywgXCdzcGFtXCddXG4gICA+Pj4gbGlzdCh2YWx1ZXMpXG4gICBbMiwgMSwgMSwgNTAwXVxuXG4gICA+Pj4gIyB2aWV3IG9iamVjdHMgYXJlIGR5bmFtaWMgYW5kIHJlZmxlY3QgZGljdCBjaGFuZ2VzXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ2VnZ3NcJ11cbiAgID4+PiBkZWwgZGlzaGVzW1wnc2F1c2FnZVwnXVxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ3NwYW1cJywgXCdiYWNvblwnXVxuXG4gICA+Pj4gIyBzZXQgb3BlcmF0aW9uc1xuICAgPj4+IGtleXMgJiB7XCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYWxhZFwnfVxuICAge1wnYmFjb25cJ31cbiAgID4+PiBrZXlzIF4ge1wnc2F1c2FnZVwnLCBcJ2p1aWNlXCd9XG4gICB7XCdqdWljZVwnLCBcJ3NhdXNhZ2VcJywgXCdiYWNvblwnLCBcJ3NwYW1cJ31cbicsCiAgJ3R5cGVzbWV0aG9kcyc6ICdcbk1ldGhvZHNcbioqKioqKipcblxuTWV0aG9kcyBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB1c2luZyB0aGUgYXR0cmlidXRlIG5vdGF0aW9uLlxuVGhlcmUgYXJlIHR3byBmbGF2b3JzOiBidWlsdC1pbiBtZXRob2RzIChzdWNoIGFzIGBgYXBwZW5kKClgYCBvblxubGlzdHMpIGFuZCBjbGFzcyBpbnN0YW5jZSBtZXRob2RzLiAgQnVpbHQtaW4gbWV0aG9kcyBhcmUgZGVzY3JpYmVkXG53aXRoIHRoZSB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlbS5cblxuSWYgeW91IGFjY2VzcyBhIG1ldGhvZCAoYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgY2xhc3MgbmFtZXNwYWNlKVxudGhyb3VnaCBhbiBpbnN0YW5jZSwgeW91IGdldCBhIHNwZWNpYWwgb2JqZWN0OiBhICpib3VuZCBtZXRob2QqIChhbHNvXG5jYWxsZWQgKmluc3RhbmNlIG1ldGhvZCopIG9iamVjdC4gV2hlbiBjYWxsZWQsIGl0IHdpbGwgYWRkIHRoZVxuYGBzZWxmYGAgYXJndW1lbnQgdG8gdGhlIGFyZ3VtZW50IGxpc3QuICBCb3VuZCBtZXRob2RzIGhhdmUgdHdvXG5zcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYG0uX19zZWxmX19gYCBpcyB0aGUgb2JqZWN0IG9uIHdoaWNoXG50aGUgbWV0aG9kIG9wZXJhdGVzLCBhbmQgYGBtLl9fZnVuY19fYGAgaXMgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGluZ1xudGhlIG1ldGhvZC4gIENhbGxpbmcgYGBtKGFyZy0xLCBhcmctMiwgLi4uLCBhcmctbilgYCBpcyBjb21wbGV0ZWx5XG5lcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBtLl9fZnVuY19fKG0uX19zZWxmX18sIGFyZy0xLCBhcmctMiwgLi4uLFxuYXJnLW4pYGAuXG5cbkxpa2UgZnVuY3Rpb24gb2JqZWN0cywgYm91bmQgbWV0aG9kIG9iamVjdHMgc3VwcG9ydCBnZXR0aW5nIGFyYml0cmFyeVxuYXR0cmlidXRlcy4gIEhvd2V2ZXIsIHNpbmNlIG1ldGhvZCBhdHRyaWJ1dGVzIGFyZSBhY3R1YWxseSBzdG9yZWQgb25cbnRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdCAoYGBtZXRoLl9fZnVuY19fYGApLCBzZXR0aW5nIG1ldGhvZFxuYXR0cmlidXRlcyBvbiBib3VuZCBtZXRob2RzIGlzIGRpc2FsbG93ZWQuICBBdHRlbXB0aW5nIHRvIHNldCBhblxuYXR0cmlidXRlIG9uIGEgbWV0aG9kIHJlc3VsdHMgaW4gYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGJlaW5nIHJhaXNlZC5cbkluIG9yZGVyIHRvIHNldCBhIG1ldGhvZCBhdHRyaWJ1dGUsIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGl0IG9uXG50aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3Q6XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBkZWYgbWV0aG9kKHNlbGYpOlxuICAgLi4uICAgICAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMubWV0aG9kLndob2FtaSA9IFwnbXkgbmFtZSBpcyBtZXRob2RcJyAgIyBjYW5cJ3Qgc2V0IG9uIHRoZSBtZXRob2RcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIEF0dHJpYnV0ZUVycm9yOiBcJ21ldGhvZFwnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlIFwnd2hvYW1pXCdcbiAgID4+PiBjLm1ldGhvZC5fX2Z1bmNfXy53aG9hbWkgPSBcJ215IG5hbWUgaXMgbWV0aG9kXCdcbiAgID4+PiBjLm1ldGhvZC53aG9hbWlcbiAgIFwnbXkgbmFtZSBpcyBtZXRob2RcJ1xuXG5TZWUgKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAogICd0eXBlc21vZHVsZXMnOiAiXG5Nb2R1bGVzXG4qKioqKioqXG5cblRoZSBvbmx5IHNwZWNpYWwgb3BlcmF0aW9uIG9uIGEgbW9kdWxlIGlzIGF0dHJpYnV0ZSBhY2Nlc3M6XG5gYG0ubmFtZWBgLCB3aGVyZSAqbSogaXMgYSBtb2R1bGUgYW5kICpuYW1lKiBhY2Nlc3NlcyBhIG5hbWUgZGVmaW5lZFxuaW4gKm0qJ3Mgc3ltYm9sIHRhYmxlLiBNb2R1bGUgYXR0cmlidXRlcyBjYW4gYmUgYXNzaWduZWQgdG8uICAoTm90ZVxudGhhdCB0aGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnQgaXMgbm90LCBzdHJpY3RseSBzcGVha2luZywgYW4gb3BlcmF0aW9uXG5vbiBhIG1vZHVsZSBvYmplY3Q7IGBgaW1wb3J0IGZvb2BgIGRvZXMgbm90IHJlcXVpcmUgYSBtb2R1bGUgb2JqZWN0XG5uYW1lZCAqZm9vKiB0byBleGlzdCwgcmF0aGVyIGl0IHJlcXVpcmVzIGFuIChleHRlcm5hbCkgKmRlZmluaXRpb24qXG5mb3IgYSBtb2R1bGUgbmFtZWQgKmZvbyogc29tZXdoZXJlLilcblxuQSBzcGVjaWFsIGF0dHJpYnV0ZSBvZiBldmVyeSBtb2R1bGUgaXMgYGBfX2RpY3RfX2BgLiBUaGlzIGlzIHRoZVxuZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUuIE1vZGlmeWluZyB0aGlzXG5kaWN0aW9uYXJ5IHdpbGwgYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUsIGJ1dCBkaXJlY3RcbmFzc2lnbm1lbnQgdG8gdGhlIGBgX19kaWN0X19gYCBhdHRyaWJ1dGUgaXMgbm90IHBvc3NpYmxlICh5b3UgY2FuXG53cml0ZSBgYG0uX19kaWN0X19bJ2EnXSA9IDFgYCwgd2hpY2ggZGVmaW5lcyBgYG0uYWBgIHRvIGJlIGBgMWBgLCBidXRcbnlvdSBjYW4ndCB3cml0ZSBgYG0uX19kaWN0X18gPSB7fWBgKS4gIE1vZGlmeWluZyBgYF9fZGljdF9fYGAgZGlyZWN0bHlcbmlzIG5vdCByZWNvbW1lbmRlZC5cblxuTW9kdWxlcyBidWlsdCBpbnRvIHRoZSBpbnRlcnByZXRlciBhcmUgd3JpdHRlbiBsaWtlIHRoaXM6IGBgPG1vZHVsZVxuJ3N5cycgKGJ1aWx0LWluKT5gYC4gIElmIGxvYWRlZCBmcm9tIGEgZmlsZSwgdGhleSBhcmUgd3JpdHRlbiBhc1xuYGA8bW9kdWxlICdvcycgZnJvbSAnL3Vzci9sb2NhbC9saWIvcHl0aG9uWC5ZL29zLnB5Yyc+YGAuXG4iLAotICd0eXBlc3NlcSc6ICdcblNlcXVlbmNlIFR5cGVzIC0tLSBgYGxpc3RgYCwgYGB0dXBsZWBgLCBgYHJhbmdlYGBcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIGJhc2ljIHNlcXVlbmNlIHR5cGVzOiBsaXN0cywgdHVwbGVzLCBhbmQgcmFuZ2Vcbm9iamVjdHMuIEFkZGl0aW9uYWwgc2VxdWVuY2UgdHlwZXMgdGFpbG9yZWQgZm9yIHByb2Nlc3Npbmcgb2YgKmJpbmFyeVxuZGF0YSogYW5kICp0ZXh0IHN0cmluZ3MqIGFyZSBkZXNjcmliZWQgaW4gZGVkaWNhdGVkIHNlY3Rpb25zLlxuXG5cbkNvbW1vbiBTZXF1ZW5jZSBPcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBzdXBwb3J0ZWQgYnkgbW9zdCBzZXF1ZW5jZVxudHlwZXMsIGJvdGggbXV0YWJsZSBhbmQgaW1tdXRhYmxlLiBUaGUgYGBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgYFxuQUJDIGlzIHByb3ZpZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Vcbm9wZXJhdGlvbnMgb24gY3VzdG9tIHNlcXVlbmNlIHR5cGVzLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHlcbihvcGVyYXRpb25zIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5KS4gIEluIHRoZSB0YWJsZSxcbipzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSwgKm4qLCAqaSosICpqKiBhbmQgKmsqIGFyZVxuaW50ZWdlcnMgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kIHZhbHVlXG5yZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyouXG5cblRoZSBgYGluYGAgYW5kIGBgbm90IGluYGAgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXRpZXMgYXMgdGhlXG5jb21wYXJpc29uIG9wZXJhdGlvbnMuIFRoZSBgYCtgYCAoY29uY2F0ZW5hdGlvbikgYW5kIGBgKmBgXG4ocmVwZXRpdGlvbikgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoZSBjb3JyZXNwb25kaW5nXG5udW1lcmljIG9wZXJhdGlvbnMuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PStcbnwgYGB4IGluIHNgYCAgICAgICAgICAgICAgICAgfCBgYFRydWVgYCBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYEZhbHNlYGAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGB4IG5vdCBpbiBzYGAgICAgICAgICAgICAgfCBgYEZhbHNlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYFRydWVgYCAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzICsgdGBgICAgICAgICAgICAgICAgICAgfCB0aGUgY29uY2F0ZW5hdGlvbiBvZiAqcyogYW5kICp0KiB8ICg2KSg3KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyAqIG5gYCBvciBgYG4gKiBzYGAgICAgIHwgKm4qIHNoYWxsb3cgY29waWVzIG9mICpzKiAgICAgICAgfCAoMikoNykgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb25jYXRlbmF0ZWQgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpXWBgICAgICAgICAgICAgICAgICAgIHwgKmkqdGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICAgfCAoMykgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDQpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpdGggc3RlcCAqayogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBsZW4ocylgYCAgICAgICAgICAgICAgICAgfCBsZW5ndGggb2YgKnMqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbWluKHMpYGAgICAgICAgICAgICAgICAgIHwgc21hbGxlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1heChzKWBgICAgICAgICAgICAgICAgICB8IGxhcmdlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzLmluZGV4KHhbLCBpWywgal1dKWBgICAgfCBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB8ICg4KSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogKGF0IG9yIGFmdGVyIGluZGV4ICAgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKmkqIGFuZCBiZWZvcmUgaW5kZXggKmoqKSAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMuY291bnQoeClgYCAgICAgICAgICAgICB8IHRvdGFsIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiAgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqIGluICpzKiAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuXG5TZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuICBJbiBwYXJ0aWN1bGFyLFxudHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgYnkgY29tcGFyaW5nXG5jb3JyZXNwb25kaW5nIGVsZW1lbnRzLiBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZXZlcnlcbmVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG50eXBlIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gIChGb3IgZnVsbCBkZXRhaWxzIHNlZSAqQ29tcGFyaXNvbnMqIGluXG50aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlLilcblxuTm90ZXM6XG5cbjEuIFdoaWxlIHRoZSBgYGluYGAgYW5kIGBgbm90IGluYGAgb3BlcmF0aW9ucyBhcmUgdXNlZCBvbmx5IGZvciBzaW1wbGVcbiAgIGNvbnRhaW5tZW50IHRlc3RpbmcgaW4gdGhlIGdlbmVyYWwgY2FzZSwgc29tZSBzcGVjaWFsaXNlZCBzZXF1ZW5jZXNcbiAgIChzdWNoIGFzIGBgc3RyYGAsIGBgYnl0ZXNgYCBhbmQgYGBieXRlYXJyYXlgYCkgYWxzbyB1c2UgdGhlbSBmb3JcbiAgIHN1YnNlcXVlbmNlIHRlc3Rpbmc6XG5cbiAgICAgID4+PiAiZ2ciIGluICJlZ2dzIlxuICAgICAgVHJ1ZVxuXG4yLiBWYWx1ZXMgb2YgKm4qIGxlc3MgdGhhbiBgYDBgYCBhcmUgdHJlYXRlZCBhcyBgYDBgYCAod2hpY2ggeWllbGRzIGFuXG4gICBlbXB0eSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzKikuICBOb3RlIGFsc28gdGhhdCB0aGUgY29waWVzXG4gICBhcmUgc2hhbGxvdzsgbmVzdGVkIHN0cnVjdHVyZXMgYXJlIG5vdCBjb3BpZWQuICBUaGlzIG9mdGVuIGhhdW50c1xuICAgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsgY29uc2lkZXI6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXV0gKiAzXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbXSwgW10sIFtdXVxuICAgICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgICAgPj4+IGxpc3RzXG4gICAgICBbWzNdLCBbM10sIFszXV1cblxuICAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCBgYFtbXV1gYCBpcyBhIG9uZS1lbGVtZW50IGxpc3QgY29udGFpbmluZ1xuICAgYW4gZW1wdHkgbGlzdCwgc28gYWxsIHRocmVlIGVsZW1lbnRzIG9mIGBgW1tdXSAqIDNgYCBhcmUgKHBvaW50ZXJzXG4gICB0bykgdGhpcyBzaW5nbGUgZW1wdHkgbGlzdC4gIE1vZGlmeWluZyBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mXG4gICBgYGxpc3RzYGAgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4gWW91IGNhbiBjcmVhdGUgYSBsaXN0IG9mXG4gICBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXSBmb3IgaSBpbiByYW5nZSgzKV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1sxXS5hcHBlbmQoNSlcbiAgICAgID4+PiBsaXN0c1syXS5hcHBlbmQoNylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzVdLCBbN11dXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZVxuICAgc3RyaW5nOiBgYGxlbihzKSArIGlgYCBvciBgYGxlbihzKSArIGpgYCBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlXG4gICB0aGF0IGBgLTBgYCBpcyBzdGlsbCBgYDBgYC5cblxuNC4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgZGVmaW5lZCBhcyB0aGUgc2VxdWVuY2Ugb2ZcbiAgIGl0ZW1zIHdpdGggaW5kZXggKmsqIHN1Y2ggdGhhdCBgYGkgPD0gayA8IGpgYC4gIElmICppKiBvciAqaiogaXNcbiAgIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLCB1c2UgYGBsZW4ocylgYC4gIElmICppKiBpcyBvbWl0dGVkIG9yXG4gICBgYE5vbmVgYCwgdXNlIGBgMGBgLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgYGBOb25lYGAsIHVzZVxuICAgYGBsZW4ocylgYC4gIElmICppKiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gKmoqLCB0aGUgc2xpY2UgaXNcbiAgIGVtcHR5LlxuXG41LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiB3aXRoIHN0ZXAgKmsqIGlzIGRlZmluZWQgYXMgdGhlXG4gICBzZXF1ZW5jZSBvZiBpdGVtcyB3aXRoIGluZGV4ICBgYHggPSBpICsgbiprYGAgc3VjaCB0aGF0IGBgMCA8PSBuIDxcbiAgIChqLWkpL2tgYC4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgYGBpYGAsIGBgaStrYGAsXG4gICBgYGkrMiprYGAsIGBgaSszKmtgYCBhbmQgc28gb24sIHN0b3BwaW5nIHdoZW4gKmoqIGlzIHJlYWNoZWQgKGJ1dFxuICAgbmV2ZXIgaW5jbHVkaW5nICpqKikuICBJZiAqaSogb3IgKmoqIGlzIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLFxuICAgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGV5IGJlY29tZVxuICAgImVuZCIgdmFsdWVzICh3aGljaCBlbmQgZGVwZW5kcyBvbiB0aGUgc2lnbiBvZiAqayopLiAgTm90ZSwgKmsqXG4gICBjYW5ub3QgYmUgemVyby4gSWYgKmsqIGlzIGBgTm9uZWBgLCBpdCBpcyB0cmVhdGVkIGxpa2UgYGAxYGAuXG5cbjYuIENvbmNhdGVuYXRpbmcgaW1tdXRhYmxlIHNlcXVlbmNlcyBhbHdheXMgcmVzdWx0cyBpbiBhIG5ldyBvYmplY3QuXG4gICBUaGlzIG1lYW5zIHRoYXQgYnVpbGRpbmcgdXAgYSBzZXF1ZW5jZSBieSByZXBlYXRlZCBjb25jYXRlbmF0aW9uXG4gICB3aWxsIGhhdmUgYSBxdWFkcmF0aWMgcnVudGltZSBjb3N0IGluIHRoZSB0b3RhbCBzZXF1ZW5jZSBsZW5ndGguXG4gICBUbyBnZXQgYSBsaW5lYXIgcnVudGltZSBjb3N0LCB5b3UgbXVzdCBzd2l0Y2ggdG8gb25lIG9mIHRoZVxuICAgYWx0ZXJuYXRpdmVzIGJlbG93OlxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgYGBzdHJgYCBvYmplY3RzLCB5b3UgY2FuIGJ1aWxkIGEgbGlzdCBhbmQgdXNlXG4gICAgIGBgc3RyLmpvaW4oKWBgIGF0IHRoZSBlbmQgb3IgZWxzZSB3cml0ZSB0byBhIGBgaW8uU3RyaW5nSU9gYFxuICAgICBpbnN0YW5jZSBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIHdoZW4gY29tcGxldGVcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nIGBgYnl0ZXNgYCBvYmplY3RzLCB5b3UgY2FuIHNpbWlsYXJseSB1c2VcbiAgICAgYGBieXRlcy5qb2luKClgYCBvciBgYGlvLkJ5dGVzSU9gYCwgb3IgeW91IGNhbiBkbyBpbi1wbGFjZVxuICAgICBjb25jYXRlbmF0aW9uIHdpdGggYSBgYGJ5dGVhcnJheWBgIG9iamVjdC4gIGBgYnl0ZWFycmF5YGAgb2JqZWN0c1xuICAgICBhcmUgbXV0YWJsZSBhbmQgaGF2ZSBhbiBlZmZpY2llbnQgb3ZlcmFsbG9jYXRpb24gbWVjaGFuaXNtXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyBgYHR1cGxlYGAgb2JqZWN0cywgZXh0ZW5kIGEgYGBsaXN0YGAgaW5zdGVhZFxuXG4gICAqIGZvciBvdGhlciB0eXBlcywgaW52ZXN0aWdhdGUgdGhlIHJlbGV2YW50IGNsYXNzIGRvY3VtZW50YXRpb25cblxuNy4gU29tZSBzZXF1ZW5jZSB0eXBlcyAoc3VjaCBhcyBgYHJhbmdlYGApIG9ubHkgc3VwcG9ydCBpdGVtIHNlcXVlbmNlc1xuICAgdGhhdCBmb2xsb3cgc3BlY2lmaWMgcGF0dGVybnMsIGFuZCBoZW5jZSBkb25cJ3Qgc3VwcG9ydCBzZXF1ZW5jZVxuICAgY29uY2F0ZW5hdGlvbiBvciByZXBldGl0aW9uLlxuXG44LiBgYGluZGV4YGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW5cbiAgIHN1cHBvcnRlZCwgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBpbmRleCBtZXRob2QgYWxsb3dcbiAgIGVmZmljaWVudCBzZWFyY2hpbmcgb2Ygc3Vic2VjdGlvbnMgb2YgdGhlIHNlcXVlbmNlLiBQYXNzaW5nIHRoZVxuICAgZXh0cmEgYXJndW1lbnRzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB1c2luZyBgYHNbaTpqXS5pbmRleCh4KWBgLFxuICAgb25seSB3aXRob3V0IGNvcHlpbmcgYW55IGRhdGEgYW5kIHdpdGggdGhlIHJldHVybmVkIGluZGV4IGJlaW5nXG4gICByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlcXVlbmNlIHJhdGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGVcbiAgIHNsaWNlLlxuXG5cbkltbXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvbmx5IG9wZXJhdGlvbiB0aGF0IGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBnZW5lcmFsbHkgaW1wbGVtZW50XG50aGF0IGlzIG5vdCBhbHNvIGltcGxlbWVudGVkIGJ5IG11dGFibGUgc2VxdWVuY2UgdHlwZXMgaXMgc3VwcG9ydCBmb3JcbnRoZSBgYGhhc2goKWBgIGJ1aWx0LWluLlxuXG5UaGlzIHN1cHBvcnQgYWxsb3dzIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHN1Y2ggYXMgYGB0dXBsZWBgIGluc3RhbmNlcyxcbnRvIGJlIHVzZWQgYXMgYGBkaWN0YGAga2V5cyBhbmQgc3RvcmVkIGluIGBgc2V0YGAgYW5kIGBgZnJvemVuc2V0YGBcbmluc3RhbmNlcy5cblxuQXR0ZW1wdGluZyB0byBoYXNoIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0aGF0IGNvbnRhaW5zIHVuaGFzaGFibGVcbnZhbHVlcyB3aWxsIHJlc3VsdCBpbiBgYFR5cGVFcnJvcmBgLlxuXG5cbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlIGBgY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZWBgIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsIGBgYnl0ZWFycmF5YGAgb25seVxuYWNjZXB0cyBpbnRlZ2VycyB0aGF0IG1lZXQgdGhlIHZhbHVlIHJlc3RyaWN0aW9uIGBgMCA8PSB4IDw9IDI1NWBgKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBhcHBlbmRzICp4KiB0byB0aGUgZW5kIG9mIHRoZSAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcXVlbmNlIChzYW1lIGFzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2xlbihzKTpsZW4ocyldID0gW3hdYGApICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jbGVhcigpYGAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gYGBzYGAgICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBkZWwgc1s6XWBgKSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jb3B5KClgYCAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgYGBzYGAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBzWzpdYGApICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5leHRlbmQodClgYCAgICAgICAgICAgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlIGNvbnRlbnRzIG9mIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKnQqIChzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA9IHRgYCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluc2VydChpLCB4KWBgICAgICAgICAgICAgIHwgaW5zZXJ0cyAqeCogaW50byAqcyogYXQgdGhlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCBnaXZlbiBieSAqaSogKHNhbWUgYXMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmldID0gW3hdYGApICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucG9wKFtpXSlgYCAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsc28gcmVtb3ZlcyBpdCBmcm9tICpzKiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmVtb3ZlKHgpYGAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoZXJlIGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmV2ZXJzZSgpYGAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gYGByZW1vdmVgYCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlIGBgcmV2ZXJzZSgpYGAgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3IgZWNvbm9teVxuICAgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0XG4gICBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZCBzZXF1ZW5jZS5cblxuNS4gYGBjbGVhcigpYGAgYW5kIGBgY29weSgpYGAgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzIGBgZGljdGBgIGFuZCBgYHNldGBgKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIG1ldGhvZHMuXG5cblxuTGlzdHNcbj09PT09XG5cbkxpc3RzIGFyZSBtdXRhYmxlIHNlcXVlbmNlcywgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgY29sbGVjdGlvbnMgb2ZcbmhvbW9nZW5lb3VzIGl0ZW1zICh3aGVyZSB0aGUgcHJlY2lzZSBkZWdyZWUgb2Ygc2ltaWxhcml0eSB3aWxsIHZhcnkgYnlcbmFwcGxpY2F0aW9uKS5cblxuY2xhc3MgY2xhc3MgbGlzdChbaXRlcmFibGVdKVxuXG4gICBMaXN0cyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gc2V2ZXJhbCB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBzcXVhcmUgYnJhY2tldHMgdG8gZGVub3RlIHRoZSBlbXB0eSBsaXN0OiBgYFtdYGBcblxuICAgKiBVc2luZyBzcXVhcmUgYnJhY2tldHMsIHNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6IGBgW2FdYGAsXG4gICAgIGBgW2EsIGIsIGNdYGBcblxuICAgKiBVc2luZyBhIGxpc3QgY29tcHJlaGVuc2lvbjogYGBbeCBmb3IgeCBpbiBpdGVyYWJsZV1gYFxuXG4gICAqIFVzaW5nIHRoZSB0eXBlIGNvbnN0cnVjdG9yOiBgYGxpc3QoKWBgIG9yIGBgbGlzdChpdGVyYWJsZSlgYFxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgbGlzdCB3aG9zZSBpdGVtcyBhcmUgdGhlIHNhbWUgYW5kIGluIHRoZVxuICAgc2FtZSBvcmRlciBhcyAqaXRlcmFibGUqXCdzIGl0ZW1zLiAgKml0ZXJhYmxlKiBtYXkgYmUgZWl0aGVyIGFcbiAgIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3JcbiAgIG9iamVjdC4gIElmICppdGVyYWJsZSogaXMgYWxyZWFkeSBhIGxpc3QsIGEgY29weSBpcyBtYWRlIGFuZFxuICAgcmV0dXJuZWQsIHNpbWlsYXIgdG8gYGBpdGVyYWJsZVs6XWBgLiBGb3IgZXhhbXBsZSwgYGBsaXN0KFwnYWJjXCcpYGBcbiAgIHJldHVybnMgYGBbXCdhXCcsIFwnYlwnLCBcJ2NcJ11gYCBhbmQgYGBsaXN0KCAoMSwgMiwgMykgKWBgIHJldHVybnMgYGBbMSxcbiAgIDIsIDNdYGAuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ld1xuICAgZW1wdHkgbGlzdCwgYGBbXWBgLlxuXG4gICBNYW55IG90aGVyIG9wZXJhdGlvbnMgYWxzbyBwcm9kdWNlIGxpc3RzLCBpbmNsdWRpbmcgdGhlXG4gICBgYHNvcnRlZCgpYGAgYnVpbHQtaW4uXG5cbiAgIExpc3RzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIGFuZCAqbXV0YWJsZSogc2VxdWVuY2VcbiAgIG9wZXJhdGlvbnMuIExpc3RzIGFsc28gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kOlxuXG4gICBzb3J0KCosIGtleT1Ob25lLCByZXZlcnNlPU5vbmUpXG5cbiAgICAgIFRoaXMgbWV0aG9kIHNvcnRzIHRoZSBsaXN0IGluIHBsYWNlLCB1c2luZyBvbmx5IGBgPGBgXG4gICAgICBjb21wYXJpc29ucyBiZXR3ZWVuIGl0ZW1zLiBFeGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCAtIGlmXG4gICAgICBhbnkgY29tcGFyaXNvbiBvcGVyYXRpb25zIGZhaWwsIHRoZSBlbnRpcmUgc29ydCBvcGVyYXRpb24gd2lsbFxuICAgICAgZmFpbCAoYW5kIHRoZSBsaXN0IHdpbGwgbGlrZWx5IGJlIGxlZnQgaW4gYSBwYXJ0aWFsbHkgbW9kaWZpZWRcbiAgICAgIHN0YXRlKS5cblxuICAgICAgKmtleSogc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0b1xuICAgICAgZXh0cmFjdCBhIGNvbXBhcmlzb24ga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQgKGZvciBleGFtcGxlLFxuICAgICAgYGBrZXk9c3RyLmxvd2VyYGApLiBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBpdGVtIGluIHRoZVxuICAgICAgbGlzdCBpcyBjYWxjdWxhdGVkIG9uY2UgYW5kIHRoZW4gdXNlZCBmb3IgdGhlIGVudGlyZSBzb3J0aW5nXG4gICAgICBwcm9jZXNzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBgYE5vbmVgYCBtZWFucyB0aGF0IGxpc3QgaXRlbXMgYXJlXG4gICAgICBzb3J0ZWQgZGlyZWN0bHkgd2l0aG91dCBjYWxjdWxhdGluZyBhIHNlcGFyYXRlIGtleSB2YWx1ZS5cblxuICAgICAgVGhlIGBgZnVuY3Rvb2xzLmNtcF90b19rZXkoKWBgIHV0aWxpdHkgaXMgYXZhaWxhYmxlIHRvIGNvbnZlcnQgYVxuICAgICAgMi54IHN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEgKmtleSogZnVuY3Rpb24uXG5cbiAgICAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gYGBUcnVlYGAsIHRoZW4gdGhlIGxpc3RcbiAgICAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgICAgIFRoaXMgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3IgZWNvbm9teSBvZiBzcGFjZVxuICAgICAgd2hlbiBzb3J0aW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdCBvcGVyYXRlc1xuICAgICAgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgc29ydGVkIHNlcXVlbmNlICh1c2VcbiAgICAgIGBgc29ydGVkKClgYCB0byBleHBsaWNpdGx5IHJlcXVlc3QgYSBuZXcgc29ydGVkIGxpc3QgaW5zdGFuY2UpLlxuXG4gICAgICBUaGUgYGBzb3J0KClgYCBtZXRob2QgaXMgZ3VhcmFudGVlZCB0byBiZSBzdGFibGUuICBBIHNvcnQgaXNcbiAgICAgIHN0YWJsZSBpZiBpdCBndWFyYW50ZWVzIG5vdCB0byBjaGFuZ2UgdGhlIHJlbGF0aXZlIG9yZGVyIG9mXG4gICAgICBlbGVtZW50cyB0aGF0IGNvbXBhcmUgZXF1YWwgLS0tIHRoaXMgaXMgaGVscGZ1bCBmb3Igc29ydGluZyBpblxuICAgICAgbXVsdGlwbGUgcGFzc2VzIChmb3IgZXhhbXBsZSwgc29ydCBieSBkZXBhcnRtZW50LCB0aGVuIGJ5IHNhbGFyeVxuICAgICAgZ3JhZGUpLlxuXG4gICAgICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICAgICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICAgICB1bmRlZmluZWQuICBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gbWFrZXMgdGhlIGxpc3QgYXBwZWFyXG4gICAgICBlbXB0eSBmb3IgdGhlIGR1cmF0aW9uLCBhbmQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIGlmIGl0IGNhblxuICAgICAgZGV0ZWN0IHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuXG5cblR1cGxlc1xuPT09PT09XG5cblR1cGxlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlcywgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgY29sbGVjdGlvbnMgb2ZcbmhldGVyb2dlbmVvdXMgZGF0YSAoc3VjaCBhcyB0aGUgMi10dXBsZXMgcHJvZHVjZWQgYnkgdGhlXG5gYGVudW1lcmF0ZSgpYGAgYnVpbHQtaW4pLiBUdXBsZXMgYXJlIGFsc28gdXNlZCBmb3IgY2FzZXMgd2hlcmUgYW5cbmltbXV0YWJsZSBzZXF1ZW5jZSBvZiBob21vZ2VuZW91cyBkYXRhIGlzIG5lZWRlZCAoc3VjaCBhcyBhbGxvd2luZ1xuc3RvcmFnZSBpbiBhIGBgc2V0YGAgb3IgYGBkaWN0YGAgaW5zdGFuY2UpLlxuXG5jbGFzcyBjbGFzcyB0dXBsZShbaXRlcmFibGVdKVxuXG4gICBUdXBsZXMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIGEgbnVtYmVyIG9mIHdheXM6XG5cbiAgICogVXNpbmcgYSBwYWlyIG9mIHBhcmVudGhlc2VzIHRvIGRlbm90ZSB0aGUgZW1wdHkgdHVwbGU6IGBgKClgYFxuXG4gICAqIFVzaW5nIGEgdHJhaWxpbmcgY29tbWEgZm9yIGEgc2luZ2xldG9uIHR1cGxlOiBgYGEsYGAgb3IgYGAoYSwpYGBcblxuICAgKiBTZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYGEsIGIsIGNgYCBvciBgYChhLCBiLCBjKWBgXG5cbiAgICogVXNpbmcgdGhlIGBgdHVwbGUoKWBgIGJ1aWx0LWluOiBgYHR1cGxlKClgYCBvclxuICAgICBgYHR1cGxlKGl0ZXJhYmxlKWBgXG5cbiAgIFRoZSBjb25zdHJ1Y3RvciBidWlsZHMgYSB0dXBsZSB3aG9zZSBpdGVtcyBhcmUgdGhlIHNhbWUgYW5kIGluIHRoZVxuICAgc2FtZSBvcmRlciBhcyAqaXRlcmFibGUqXCdzIGl0ZW1zLiAgKml0ZXJhYmxlKiBtYXkgYmUgZWl0aGVyIGFcbiAgIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3JcbiAgIG9iamVjdC4gIElmICppdGVyYWJsZSogaXMgYWxyZWFkeSBhIHR1cGxlLCBpdCBpcyByZXR1cm5lZFxuICAgdW5jaGFuZ2VkLiBGb3IgZXhhbXBsZSwgYGB0dXBsZShcJ2FiY1wnKWBgIHJldHVybnMgYGAoXCdhXCcsIFwnYlwnLFxuICAgXCdjXCcpYGAgYW5kIGBgdHVwbGUoIFsxLCAyLCAzXSApYGAgcmV0dXJucyBgYCgxLCAyLCAzKWBgLiBJZiBub1xuICAgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgbmV3IGVtcHR5IHR1cGxlLFxuICAgYGAoKWBgLlxuXG4gICBOb3RlIHRoYXQgaXQgaXMgYWN0dWFsbHkgdGhlIGNvbW1hIHdoaWNoIG1ha2VzIGEgdHVwbGUsIG5vdCB0aGVcbiAgIHBhcmVudGhlc2VzLiBUaGUgcGFyZW50aGVzZXMgYXJlIG9wdGlvbmFsLCBleGNlcHQgaW4gdGhlIGVtcHR5XG4gICB0dXBsZSBjYXNlLCBvciB3aGVuIHRoZXkgYXJlIG5lZWRlZCB0byBhdm9pZCBzeW50YWN0aWMgYW1iaWd1aXR5LlxuICAgRm9yIGV4YW1wbGUsIGBgZihhLCBiLCBjKWBgIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIHRocmVlXG4gICBhcmd1bWVudHMsIHdoaWxlIGBgZigoYSwgYiwgYykpYGAgaXMgYSBmdW5jdGlvbiBjYWxsIHdpdGggYSAzLXR1cGxlXG4gICBhcyB0aGUgc29sZSBhcmd1bWVudC5cblxuICAgVHVwbGVzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMuXG5cbkZvciBoZXRlcm9nZW5lb3VzIGNvbGxlY3Rpb25zIG9mIGRhdGEgd2hlcmUgYWNjZXNzIGJ5IG5hbWUgaXMgY2xlYXJlclxudGhhbiBhY2Nlc3MgYnkgaW5kZXgsIGBgY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpYGAgbWF5IGJlIGEgbW9yZVxuYXBwcm9wcmlhdGUgY2hvaWNlIHRoYW4gYSBzaW1wbGUgdHVwbGUgb2JqZWN0LlxuXG5cblJhbmdlc1xuPT09PT09XG5cblRoZSBgYHJhbmdlYGAgdHlwZSByZXByZXNlbnRzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSBvZiBudW1iZXJzIGFuZCBpc1xuY29tbW9ubHkgdXNlZCBmb3IgbG9vcGluZyBhIHNwZWNpZmljIG51bWJlciBvZiB0aW1lcyBpbiBgYGZvcmBgIGxvb3BzLlxuXG5jbGFzcyBjbGFzcyByYW5nZShzdG9wKVxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RhcnQsIHN0b3BbLCBzdGVwXSlcblxuICAgVGhlIGFyZ3VtZW50cyB0byB0aGUgcmFuZ2UgY29uc3RydWN0b3IgbXVzdCBiZSBpbnRlZ2VycyAoZWl0aGVyXG4gICBidWlsdC1pbiBgYGludGBgIG9yIGFueSBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBgYF9faW5kZXhfX2BgXG4gICBzcGVjaWFsIG1ldGhvZCkuICBJZiB0aGUgKnN0ZXAqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvXG4gICBgYDFgYC4gSWYgdGhlICpzdGFydCogYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGAwYGAuIElmXG4gICAqc3RlcCogaXMgemVybywgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkLlxuXG4gICBGb3IgYSBwb3NpdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiBhIHJhbmdlIGBgcmBgIGFyZSBkZXRlcm1pbmVkXG4gICBieSB0aGUgZm9ybXVsYSBgYHJbaV0gPSBzdGFydCArIHN0ZXAqaWBgIHdoZXJlIGBgaSA+PSAwYGAgYW5kXG4gICBgYHJbaV0gPCBzdG9wYGAuXG5cbiAgIEZvciBhIG5lZ2F0aXZlICpzdGVwKiwgdGhlIGNvbnRlbnRzIG9mIHRoZSByYW5nZSBhcmUgc3RpbGxcbiAgIGRldGVybWluZWQgYnkgdGhlIGZvcm11bGEgYGByW2ldID0gc3RhcnQgKyBzdGVwKmlgYCwgYnV0IHRoZVxuICAgY29uc3RyYWludHMgYXJlIGBgaSA+PSAwYGAgYW5kIGBgcltpXSA+IHN0b3BgYC5cblxuICAgQSByYW5nZSBvYmplY3Qgd2lsbCBiZSBlbXB0eSBpZiBgYHJbMF1gYCBkb2VzIG5vdCBtZWV0IHRoZSB2YWx1ZVxuICAgY29uc3RyYWludC4gUmFuZ2VzIGRvIHN1cHBvcnQgbmVnYXRpdmUgaW5kaWNlcywgYnV0IHRoZXNlIGFyZVxuICAgaW50ZXJwcmV0ZWQgYXMgaW5kZXhpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSBkZXRlcm1pbmVkIGJ5XG4gICB0aGUgcG9zaXRpdmUgaW5kaWNlcy5cblxuICAgUmFuZ2VzIGNvbnRhaW5pbmcgYWJzb2x1dGUgdmFsdWVzIGxhcmdlciB0aGFuIGBgc3lzLm1heHNpemVgYCBhcmVcbiAgIHBlcm1pdHRlZCBidXQgc29tZSBmZWF0dXJlcyAoc3VjaCBhcyBgYGxlbigpYGApIG1heSByYWlzZVxuICAgYGBPdmVyZmxvd0Vycm9yYGAuXG5cbiAgIFJhbmdlIGV4YW1wbGVzOlxuXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxMCkpXG4gICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEsIDExKSlcbiAgICAgIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIDMwLCA1KSlcbiAgICAgIFswLCA1LCAxMCwgMTUsIDIwLCAyNV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIDEwLCAzKSlcbiAgICAgIFswLCAzLCA2LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgLTEwLCAtMSkpXG4gICAgICBbMCwgLTEsIC0yLCAtMywgLTQsIC01LCAtNiwgLTcsIC04LCAtOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDApKVxuICAgICAgW11cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEsIDApKVxuICAgICAgW11cblxuICAgUmFuZ2VzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMgZXhjZXB0XG4gICBjb25jYXRlbmF0aW9uIGFuZCByZXBldGl0aW9uIChkdWUgdG8gdGhlIGZhY3QgdGhhdCByYW5nZSBvYmplY3RzXG4gICBjYW4gb25seSByZXByZXNlbnQgc2VxdWVuY2VzIHRoYXQgZm9sbG93IGEgc3RyaWN0IHBhdHRlcm4gYW5kXG4gICByZXBldGl0aW9uIGFuZCBjb25jYXRlbmF0aW9uIHdpbGwgdXN1YWxseSB2aW9sYXRlIHRoYXQgcGF0dGVybikuXG5cblRoZSBhZHZhbnRhZ2Ugb2YgdGhlIGBgcmFuZ2VgYCB0eXBlIG92ZXIgYSByZWd1bGFyIGBgbGlzdGBgIG9yXG5gYHR1cGxlYGAgaXMgdGhhdCBhIGBgcmFuZ2VgYCBvYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSAoc21hbGwpXG5hbW91bnQgb2YgbWVtb3J5LCBubyBtYXR0ZXIgdGhlIHNpemUgb2YgdGhlIHJhbmdlIGl0IHJlcHJlc2VudHMgKGFzIGl0XG5vbmx5IHN0b3JlcyB0aGUgYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgdmFsdWVzLCBjYWxjdWxhdGluZ1xuaW5kaXZpZHVhbCBpdGVtcyBhbmQgc3VicmFuZ2VzIGFzIG5lZWRlZCkuXG5cblJhbmdlIG9iamVjdHMgaW1wbGVtZW50IHRoZSBgYGNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZWBgIEFCQywgYW5kXG5wcm92aWRlIGZlYXR1cmVzIHN1Y2ggYXMgY29udGFpbm1lbnQgdGVzdHMsIGVsZW1lbnQgaW5kZXggbG9va3VwLFxuc2xpY2luZyBhbmQgc3VwcG9ydCBmb3IgbmVnYXRpdmUgaW5kaWNlcyAoc2VlICpTZXF1ZW5jZSBUeXBlcyAtLS1cbmxpc3QsIHR1cGxlLCByYW5nZSopOlxuXG4+Pj4gciA9IHJhbmdlKDAsIDIwLCAyKVxuPj4+IHJcbnJhbmdlKDAsIDIwLCAyKVxuPj4+IDExIGluIHJcbkZhbHNlXG4+Pj4gMTAgaW4gclxuVHJ1ZVxuPj4+IHIuaW5kZXgoMTApXG41XG4+Pj4gcls1XVxuMTBcbj4+PiByWzo1XVxucmFuZ2UoMCwgMTAsIDIpXG4+Pj4gclstMV1cbjE4XG5cblRlc3RpbmcgcmFuZ2Ugb2JqZWN0cyBmb3IgZXF1YWxpdHkgd2l0aCBgYD09YGAgYW5kIGBgIT1gYCBjb21wYXJlc1xudGhlbSBhcyBzZXF1ZW5jZXMuICBUaGF0IGlzLCB0d28gcmFuZ2Ugb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZlxudGhleSByZXByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgdmFsdWVzLiAgKE5vdGUgdGhhdCB0d28gcmFuZ2Vcbm9iamVjdHMgdGhhdCBjb21wYXJlIGVxdWFsIG1pZ2h0IGhhdmUgZGlmZmVyZW50IGBgc3RhcnRgYCwgYGBzdG9wYGBcbmFuZCBgYHN0ZXBgYCBhdHRyaWJ1dGVzLCBmb3IgZXhhbXBsZSBgYHJhbmdlKDApID09IHJhbmdlKDIsIDEsIDMpYGAgb3JcbmBgcmFuZ2UoMCwgMywgMikgPT0gcmFuZ2UoMCwgNCwgMilgYC4pXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEltcGxlbWVudCB0aGUgU2VxdWVuY2UgQUJDLiBTdXBwb3J0IHNsaWNpbmdcbmFuZCBuZWdhdGl2ZSBpbmRpY2VzLiBUZXN0IGBgaW50YGAgb2JqZWN0cyBmb3IgbWVtYmVyc2hpcCBpbiBjb25zdGFudFxudGltZSBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBpdGVtcy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogRGVmaW5lIFwnPT1cJyBhbmQgXCchPVwnIHRvIGNvbXBhcmUgcmFuZ2Ugb2JqZWN0c1xuYmFzZWQgb24gdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmdcbmJhc2VkIG9uIG9iamVjdCBpZGVudGl0eSkuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlIGBgc3RhcnRgYCwgYGBzdG9wYGAgYW5kIGBgc3RlcGBgIGF0dHJpYnV0ZXMuXG4nLAorICd0eXBlc3NlcSc6ICdcblNlcXVlbmNlIFR5cGVzIC0tLSBgYGxpc3RgYCwgYGB0dXBsZWBgLCBgYHJhbmdlYGBcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIGJhc2ljIHNlcXVlbmNlIHR5cGVzOiBsaXN0cywgdHVwbGVzLCBhbmQgcmFuZ2Vcbm9iamVjdHMuIEFkZGl0aW9uYWwgc2VxdWVuY2UgdHlwZXMgdGFpbG9yZWQgZm9yIHByb2Nlc3Npbmcgb2YgKmJpbmFyeVxuZGF0YSogYW5kICp0ZXh0IHN0cmluZ3MqIGFyZSBkZXNjcmliZWQgaW4gZGVkaWNhdGVkIHNlY3Rpb25zLlxuXG5cbkNvbW1vbiBTZXF1ZW5jZSBPcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBzdXBwb3J0ZWQgYnkgbW9zdCBzZXF1ZW5jZVxudHlwZXMsIGJvdGggbXV0YWJsZSBhbmQgaW1tdXRhYmxlLiBUaGUgYGBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgYFxuQUJDIGlzIHByb3ZpZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Vcbm9wZXJhdGlvbnMgb24gY3VzdG9tIHNlcXVlbmNlIHR5cGVzLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHlcbihvcGVyYXRpb25zIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5KS4gIEluIHRoZSB0YWJsZSxcbipzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSwgKm4qLCAqaSosICpqKiBhbmQgKmsqIGFyZVxuaW50ZWdlcnMgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kIHZhbHVlXG5yZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyouXG5cblRoZSBgYGluYGAgYW5kIGBgbm90IGluYGAgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXRpZXMgYXMgdGhlXG5jb21wYXJpc29uIG9wZXJhdGlvbnMuIFRoZSBgYCtgYCAoY29uY2F0ZW5hdGlvbikgYW5kIGBgKmBgXG4ocmVwZXRpdGlvbikgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoZSBjb3JyZXNwb25kaW5nXG5udW1lcmljIG9wZXJhdGlvbnMuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PStcbnwgYGB4IGluIHNgYCAgICAgICAgICAgICAgICAgfCBgYFRydWVgYCBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYEZhbHNlYGAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGB4IG5vdCBpbiBzYGAgICAgICAgICAgICAgfCBgYEZhbHNlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYFRydWVgYCAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzICsgdGBgICAgICAgICAgICAgICAgICAgfCB0aGUgY29uY2F0ZW5hdGlvbiBvZiAqcyogYW5kICp0KiB8ICg2KSg3KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyAqIG5gYCBvciBgYG4gKiBzYGAgICAgIHwgKm4qIHNoYWxsb3cgY29waWVzIG9mICpzKiAgICAgICAgfCAoMikoNykgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb25jYXRlbmF0ZWQgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpXWBgICAgICAgICAgICAgICAgICAgIHwgKmkqdGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICAgfCAoMykgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDQpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpdGggc3RlcCAqayogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBsZW4ocylgYCAgICAgICAgICAgICAgICAgfCBsZW5ndGggb2YgKnMqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbWluKHMpYGAgICAgICAgICAgICAgICAgIHwgc21hbGxlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1heChzKWBgICAgICAgICAgICAgICAgICB8IGxhcmdlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzLmluZGV4KHhbLCBpWywgal1dKWBgICAgfCBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB8ICg4KSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogKGF0IG9yIGFmdGVyIGluZGV4ICAgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKmkqIGFuZCBiZWZvcmUgaW5kZXggKmoqKSAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMuY291bnQoeClgYCAgICAgICAgICAgICB8IHRvdGFsIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiAgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqIGluICpzKiAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuXG5TZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuICBJbiBwYXJ0aWN1bGFyLFxudHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgYnkgY29tcGFyaW5nXG5jb3JyZXNwb25kaW5nIGVsZW1lbnRzLiBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZXZlcnlcbmVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG50eXBlIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gIChGb3IgZnVsbCBkZXRhaWxzIHNlZSAqQ29tcGFyaXNvbnMqIGluXG50aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlLilcblxuTm90ZXM6XG5cbjEuIFdoaWxlIHRoZSBgYGluYGAgYW5kIGBgbm90IGluYGAgb3BlcmF0aW9ucyBhcmUgdXNlZCBvbmx5IGZvciBzaW1wbGVcbiAgIGNvbnRhaW5tZW50IHRlc3RpbmcgaW4gdGhlIGdlbmVyYWwgY2FzZSwgc29tZSBzcGVjaWFsaXNlZCBzZXF1ZW5jZXNcbiAgIChzdWNoIGFzIGBgc3RyYGAsIGBgYnl0ZXNgYCBhbmQgYGBieXRlYXJyYXlgYCkgYWxzbyB1c2UgdGhlbSBmb3JcbiAgIHN1YnNlcXVlbmNlIHRlc3Rpbmc6XG5cbiAgICAgID4+PiAiZ2ciIGluICJlZ2dzIlxuICAgICAgVHJ1ZVxuXG4yLiBWYWx1ZXMgb2YgKm4qIGxlc3MgdGhhbiBgYDBgYCBhcmUgdHJlYXRlZCBhcyBgYDBgYCAod2hpY2ggeWllbGRzIGFuXG4gICBlbXB0eSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzKikuICBOb3RlIGFsc28gdGhhdCB0aGUgY29waWVzXG4gICBhcmUgc2hhbGxvdzsgbmVzdGVkIHN0cnVjdHVyZXMgYXJlIG5vdCBjb3BpZWQuICBUaGlzIG9mdGVuIGhhdW50c1xuICAgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsgY29uc2lkZXI6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXV0gKiAzXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbXSwgW10sIFtdXVxuICAgICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgICAgPj4+IGxpc3RzXG4gICAgICBbWzNdLCBbM10sIFszXV1cblxuICAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCBgYFtbXV1gYCBpcyBhIG9uZS1lbGVtZW50IGxpc3QgY29udGFpbmluZ1xuICAgYW4gZW1wdHkgbGlzdCwgc28gYWxsIHRocmVlIGVsZW1lbnRzIG9mIGBgW1tdXSAqIDNgYCBhcmUgKHBvaW50ZXJzXG4gICB0bykgdGhpcyBzaW5nbGUgZW1wdHkgbGlzdC4gIE1vZGlmeWluZyBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mXG4gICBgYGxpc3RzYGAgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4gWW91IGNhbiBjcmVhdGUgYSBsaXN0IG9mXG4gICBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXSBmb3IgaSBpbiByYW5nZSgzKV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1sxXS5hcHBlbmQoNSlcbiAgICAgID4+PiBsaXN0c1syXS5hcHBlbmQoNylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzVdLCBbN11dXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZVxuICAgc3RyaW5nOiBgYGxlbihzKSArIGlgYCBvciBgYGxlbihzKSArIGpgYCBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlXG4gICB0aGF0IGBgLTBgYCBpcyBzdGlsbCBgYDBgYC5cblxuNC4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgZGVmaW5lZCBhcyB0aGUgc2VxdWVuY2Ugb2ZcbiAgIGl0ZW1zIHdpdGggaW5kZXggKmsqIHN1Y2ggdGhhdCBgYGkgPD0gayA8IGpgYC4gIElmICppKiBvciAqaiogaXNcbiAgIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLCB1c2UgYGBsZW4ocylgYC4gIElmICppKiBpcyBvbWl0dGVkIG9yXG4gICBgYE5vbmVgYCwgdXNlIGBgMGBgLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgYGBOb25lYGAsIHVzZVxuICAgYGBsZW4ocylgYC4gIElmICppKiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gKmoqLCB0aGUgc2xpY2UgaXNcbiAgIGVtcHR5LlxuXG41LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiB3aXRoIHN0ZXAgKmsqIGlzIGRlZmluZWQgYXMgdGhlXG4gICBzZXF1ZW5jZSBvZiBpdGVtcyB3aXRoIGluZGV4ICBgYHggPSBpICsgbiprYGAgc3VjaCB0aGF0IGBgMCA8PSBuIDxcbiAgIChqLWkpL2tgYC4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgYGBpYGAsIGBgaStrYGAsXG4gICBgYGkrMiprYGAsIGBgaSszKmtgYCBhbmQgc28gb24sIHN0b3BwaW5nIHdoZW4gKmoqIGlzIHJlYWNoZWQgKGJ1dFxuICAgbmV2ZXIgaW5jbHVkaW5nICpqKikuICBJZiAqaSogb3IgKmoqIGlzIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLFxuICAgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGV5IGJlY29tZVxuICAgImVuZCIgdmFsdWVzICh3aGljaCBlbmQgZGVwZW5kcyBvbiB0aGUgc2lnbiBvZiAqayopLiAgTm90ZSwgKmsqXG4gICBjYW5ub3QgYmUgemVyby4gSWYgKmsqIGlzIGBgTm9uZWBgLCBpdCBpcyB0cmVhdGVkIGxpa2UgYGAxYGAuXG5cbjYuIENvbmNhdGVuYXRpbmcgaW1tdXRhYmxlIHNlcXVlbmNlcyBhbHdheXMgcmVzdWx0cyBpbiBhIG5ldyBvYmplY3QuXG4gICBUaGlzIG1lYW5zIHRoYXQgYnVpbGRpbmcgdXAgYSBzZXF1ZW5jZSBieSByZXBlYXRlZCBjb25jYXRlbmF0aW9uXG4gICB3aWxsIGhhdmUgYSBxdWFkcmF0aWMgcnVudGltZSBjb3N0IGluIHRoZSB0b3RhbCBzZXF1ZW5jZSBsZW5ndGguXG4gICBUbyBnZXQgYSBsaW5lYXIgcnVudGltZSBjb3N0LCB5b3UgbXVzdCBzd2l0Y2ggdG8gb25lIG9mIHRoZVxuICAgYWx0ZXJuYXRpdmVzIGJlbG93OlxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgYGBzdHJgYCBvYmplY3RzLCB5b3UgY2FuIGJ1aWxkIGEgbGlzdCBhbmQgdXNlXG4gICAgIGBgc3RyLmpvaW4oKWBgIGF0IHRoZSBlbmQgb3IgZWxzZSB3cml0ZSB0byBhIGBgaW8uU3RyaW5nSU9gYFxuICAgICBpbnN0YW5jZSBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIHdoZW4gY29tcGxldGVcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nIGBgYnl0ZXNgYCBvYmplY3RzLCB5b3UgY2FuIHNpbWlsYXJseSB1c2VcbiAgICAgYGBieXRlcy5qb2luKClgYCBvciBgYGlvLkJ5dGVzSU9gYCwgb3IgeW91IGNhbiBkbyBpbi1wbGFjZVxuICAgICBjb25jYXRlbmF0aW9uIHdpdGggYSBgYGJ5dGVhcnJheWBgIG9iamVjdC4gIGBgYnl0ZWFycmF5YGAgb2JqZWN0c1xuICAgICBhcmUgbXV0YWJsZSBhbmQgaGF2ZSBhbiBlZmZpY2llbnQgb3ZlcmFsbG9jYXRpb24gbWVjaGFuaXNtXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyBgYHR1cGxlYGAgb2JqZWN0cywgZXh0ZW5kIGEgYGBsaXN0YGAgaW5zdGVhZFxuXG4gICAqIGZvciBvdGhlciB0eXBlcywgaW52ZXN0aWdhdGUgdGhlIHJlbGV2YW50IGNsYXNzIGRvY3VtZW50YXRpb25cblxuNy4gU29tZSBzZXF1ZW5jZSB0eXBlcyAoc3VjaCBhcyBgYHJhbmdlYGApIG9ubHkgc3VwcG9ydCBpdGVtIHNlcXVlbmNlc1xuICAgdGhhdCBmb2xsb3cgc3BlY2lmaWMgcGF0dGVybnMsIGFuZCBoZW5jZSBkb25cJ3Qgc3VwcG9ydCBzZXF1ZW5jZVxuICAgY29uY2F0ZW5hdGlvbiBvciByZXBldGl0aW9uLlxuXG44LiBgYGluZGV4YGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW5cbiAgIHN1cHBvcnRlZCwgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBpbmRleCBtZXRob2QgYWxsb3dcbiAgIGVmZmljaWVudCBzZWFyY2hpbmcgb2Ygc3Vic2VjdGlvbnMgb2YgdGhlIHNlcXVlbmNlLiBQYXNzaW5nIHRoZVxuICAgZXh0cmEgYXJndW1lbnRzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB1c2luZyBgYHNbaTpqXS5pbmRleCh4KWBgLFxuICAgb25seSB3aXRob3V0IGNvcHlpbmcgYW55IGRhdGEgYW5kIHdpdGggdGhlIHJldHVybmVkIGluZGV4IGJlaW5nXG4gICByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlcXVlbmNlIHJhdGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGVcbiAgIHNsaWNlLlxuXG5cbkltbXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvbmx5IG9wZXJhdGlvbiB0aGF0IGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBnZW5lcmFsbHkgaW1wbGVtZW50XG50aGF0IGlzIG5vdCBhbHNvIGltcGxlbWVudGVkIGJ5IG11dGFibGUgc2VxdWVuY2UgdHlwZXMgaXMgc3VwcG9ydCBmb3JcbnRoZSBgYGhhc2goKWBgIGJ1aWx0LWluLlxuXG5UaGlzIHN1cHBvcnQgYWxsb3dzIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHN1Y2ggYXMgYGB0dXBsZWBgIGluc3RhbmNlcyxcbnRvIGJlIHVzZWQgYXMgYGBkaWN0YGAga2V5cyBhbmQgc3RvcmVkIGluIGBgc2V0YGAgYW5kIGBgZnJvemVuc2V0YGBcbmluc3RhbmNlcy5cblxuQXR0ZW1wdGluZyB0byBoYXNoIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0aGF0IGNvbnRhaW5zIHVuaGFzaGFibGVcbnZhbHVlcyB3aWxsIHJlc3VsdCBpbiBgYFR5cGVFcnJvcmBgLlxuXG5cbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlIGBgY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZWBgIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsIGBgYnl0ZWFycmF5YGAgb25seVxuYWNjZXB0cyBpbnRlZ2VycyB0aGF0IG1lZXQgdGhlIHZhbHVlIHJlc3RyaWN0aW9uIGBgMCA8PSB4IDw9IDI1NWBgKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBhcHBlbmRzICp4KiB0byB0aGUgZW5kIG9mIHRoZSAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcXVlbmNlIChzYW1lIGFzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2xlbihzKTpsZW4ocyldID0gW3hdYGApICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jbGVhcigpYGAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gYGBzYGAgICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBkZWwgc1s6XWBgKSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jb3B5KClgYCAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgYGBzYGAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBzWzpdYGApICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5leHRlbmQodClgYCAgICAgICAgICAgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlIGNvbnRlbnRzIG9mIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKnQqIChzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA9IHRgYCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluc2VydChpLCB4KWBgICAgICAgICAgICAgIHwgaW5zZXJ0cyAqeCogaW50byAqcyogYXQgdGhlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCBnaXZlbiBieSAqaSogKHNhbWUgYXMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmldID0gW3hdYGApICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucG9wKFtpXSlgYCAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsc28gcmVtb3ZlcyBpdCBmcm9tICpzKiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmVtb3ZlKHgpYGAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoZXJlIGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmV2ZXJzZSgpYGAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gYGByZW1vdmVgYCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlIGBgcmV2ZXJzZSgpYGAgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3IgZWNvbm9teVxuICAgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0XG4gICBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZCBzZXF1ZW5jZS5cblxuNS4gYGBjbGVhcigpYGAgYW5kIGBgY29weSgpYGAgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzIGBgZGljdGBgIGFuZCBgYHNldGBgKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIG1ldGhvZHMuXG5cblxuTGlzdHNcbj09PT09XG5cbkxpc3RzIGFyZSBtdXRhYmxlIHNlcXVlbmNlcywgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgY29sbGVjdGlvbnMgb2ZcbmhvbW9nZW5lb3VzIGl0ZW1zICh3aGVyZSB0aGUgcHJlY2lzZSBkZWdyZWUgb2Ygc2ltaWxhcml0eSB3aWxsIHZhcnkgYnlcbmFwcGxpY2F0aW9uKS5cblxuY2xhc3MgY2xhc3MgbGlzdChbaXRlcmFibGVdKVxuXG4gICBMaXN0cyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gc2V2ZXJhbCB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBzcXVhcmUgYnJhY2tldHMgdG8gZGVub3RlIHRoZSBlbXB0eSBsaXN0OiBgYFtdYGBcblxuICAgKiBVc2luZyBzcXVhcmUgYnJhY2tldHMsIHNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6IGBgW2FdYGAsXG4gICAgIGBgW2EsIGIsIGNdYGBcblxuICAgKiBVc2luZyBhIGxpc3QgY29tcHJlaGVuc2lvbjogYGBbeCBmb3IgeCBpbiBpdGVyYWJsZV1gYFxuXG4gICAqIFVzaW5nIHRoZSB0eXBlIGNvbnN0cnVjdG9yOiBgYGxpc3QoKWBgIG9yIGBgbGlzdChpdGVyYWJsZSlgYFxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgbGlzdCB3aG9zZSBpdGVtcyBhcmUgdGhlIHNhbWUgYW5kIGluIHRoZVxuICAgc2FtZSBvcmRlciBhcyAqaXRlcmFibGUqXCdzIGl0ZW1zLiAgKml0ZXJhYmxlKiBtYXkgYmUgZWl0aGVyIGFcbiAgIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3JcbiAgIG9iamVjdC4gIElmICppdGVyYWJsZSogaXMgYWxyZWFkeSBhIGxpc3QsIGEgY29weSBpcyBtYWRlIGFuZFxuICAgcmV0dXJuZWQsIHNpbWlsYXIgdG8gYGBpdGVyYWJsZVs6XWBgLiBGb3IgZXhhbXBsZSwgYGBsaXN0KFwnYWJjXCcpYGBcbiAgIHJldHVybnMgYGBbXCdhXCcsIFwnYlwnLCBcJ2NcJ11gYCBhbmQgYGBsaXN0KCAoMSwgMiwgMykgKWBgIHJldHVybnMgYGBbMSxcbiAgIDIsIDNdYGAuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ld1xuICAgZW1wdHkgbGlzdCwgYGBbXWBgLlxuXG4gICBNYW55IG90aGVyIG9wZXJhdGlvbnMgYWxzbyBwcm9kdWNlIGxpc3RzLCBpbmNsdWRpbmcgdGhlXG4gICBgYHNvcnRlZCgpYGAgYnVpbHQtaW4uXG5cbiAgIExpc3RzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIGFuZCAqbXV0YWJsZSogc2VxdWVuY2VcbiAgIG9wZXJhdGlvbnMuIExpc3RzIGFsc28gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kOlxuXG4gICBzb3J0KCosIGtleT1Ob25lLCByZXZlcnNlPU5vbmUpXG5cbiAgICAgIFRoaXMgbWV0aG9kIHNvcnRzIHRoZSBsaXN0IGluIHBsYWNlLCB1c2luZyBvbmx5IGBgPGBgXG4gICAgICBjb21wYXJpc29ucyBiZXR3ZWVuIGl0ZW1zLiBFeGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCAtIGlmXG4gICAgICBhbnkgY29tcGFyaXNvbiBvcGVyYXRpb25zIGZhaWwsIHRoZSBlbnRpcmUgc29ydCBvcGVyYXRpb24gd2lsbFxuICAgICAgZmFpbCAoYW5kIHRoZSBsaXN0IHdpbGwgbGlrZWx5IGJlIGxlZnQgaW4gYSBwYXJ0aWFsbHkgbW9kaWZpZWRcbiAgICAgIHN0YXRlKS5cblxuICAgICAgYGBzb3J0KClgYCBhY2NlcHRzIHR3byBhcmd1bWVudHMgdGhhdCBjYW4gb25seSBiZSBwYXNzZWQgYnlcbiAgICAgIGtleXdvcmQgKCprZXl3b3JkLW9ubHkgYXJndW1lbnRzKik6XG5cbiAgICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG9cbiAgICAgIGV4dHJhY3QgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50IChmb3IgZXhhbXBsZSxcbiAgICAgIGBga2V5PXN0ci5sb3dlcmBgKS4gVGhlIGtleSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgIGxpc3QgaXMgY2FsY3VsYXRlZCBvbmNlIGFuZCB0aGVuIHVzZWQgZm9yIHRoZSBlbnRpcmUgc29ydGluZ1xuICAgICAgcHJvY2Vzcy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBOb25lYGAgbWVhbnMgdGhhdCBsaXN0IGl0ZW1zIGFyZVxuICAgICAgc29ydGVkIGRpcmVjdGx5IHdpdGhvdXQgY2FsY3VsYXRpbmcgYSBzZXBhcmF0ZSBrZXkgdmFsdWUuXG5cbiAgICAgIFRoZSBgYGZ1bmN0b29scy5jbXBfdG9fa2V5KClgYCB1dGlsaXR5IGlzIGF2YWlsYWJsZSB0byBjb252ZXJ0IGFcbiAgICAgIDIueCBzdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGVuIHRoZSBsaXN0XG4gICAgICBlbGVtZW50cyBhcmUgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLlxuXG4gICAgICBUaGlzIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXkgb2Ygc3BhY2VcbiAgICAgIHdoZW4gc29ydGluZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzIHRoYXQgaXQgb3BlcmF0ZXNcbiAgICAgIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNvcnRlZCBzZXF1ZW5jZSAodXNlXG4gICAgICBgYHNvcnRlZCgpYGAgdG8gZXhwbGljaXRseSByZXF1ZXN0IGEgbmV3IHNvcnRlZCBsaXN0IGluc3RhbmNlKS5cblxuICAgICAgVGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzXG4gICAgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZlxuICAgICAgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW5cbiAgICAgIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnlcbiAgICAgIGdyYWRlKS5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZiBpdCBjYW5cbiAgICAgIGRldGVjdCB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cblxuXG5UdXBsZXNcbj09PT09PVxuXG5UdXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5oZXRlcm9nZW5lb3VzIGRhdGEgKHN1Y2ggYXMgdGhlIDItdHVwbGVzIHByb2R1Y2VkIGJ5IHRoZVxuYGBlbnVtZXJhdGUoKWBgIGJ1aWx0LWluKS4gVHVwbGVzIGFyZSBhbHNvIHVzZWQgZm9yIGNhc2VzIHdoZXJlIGFuXG5pbW11dGFibGUgc2VxdWVuY2Ugb2YgaG9tb2dlbmVvdXMgZGF0YSBpcyBuZWVkZWQgKHN1Y2ggYXMgYWxsb3dpbmdcbnN0b3JhZ2UgaW4gYSBgYHNldGBgIG9yIGBgZGljdGBgIGluc3RhbmNlKS5cblxuY2xhc3MgY2xhc3MgdHVwbGUoW2l0ZXJhYmxlXSlcblxuICAgVHVwbGVzIG1heSBiZSBjb25zdHJ1Y3RlZCBpbiBhIG51bWJlciBvZiB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBwYXJlbnRoZXNlcyB0byBkZW5vdGUgdGhlIGVtcHR5IHR1cGxlOiBgYCgpYGBcblxuICAgKiBVc2luZyBhIHRyYWlsaW5nIGNvbW1hIGZvciBhIHNpbmdsZXRvbiB0dXBsZTogYGBhLGBgIG9yIGBgKGEsKWBgXG5cbiAgICogU2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogYGBhLCBiLCBjYGAgb3IgYGAoYSwgYiwgYylgYFxuXG4gICAqIFVzaW5nIHRoZSBgYHR1cGxlKClgYCBidWlsdC1pbjogYGB0dXBsZSgpYGAgb3JcbiAgICAgYGB0dXBsZShpdGVyYWJsZSlgYFxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgdHVwbGUgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSB0dXBsZSwgaXQgaXMgcmV0dXJuZWRcbiAgIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsIGBgdHVwbGUoXCdhYmNcJylgYCByZXR1cm5zIGBgKFwnYVwnLCBcJ2JcJyxcbiAgIFwnY1wnKWBgIGFuZCBgYHR1cGxlKCBbMSwgMiwgM10gKWBgIHJldHVybnMgYGAoMSwgMiwgMylgYC4gSWYgbm9cbiAgIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eSB0dXBsZSxcbiAgIGBgKClgYC5cblxuICAgTm90ZSB0aGF0IGl0IGlzIGFjdHVhbGx5IHRoZSBjb21tYSB3aGljaCBtYWtlcyBhIHR1cGxlLCBub3QgdGhlXG4gICBwYXJlbnRoZXNlcy4gVGhlIHBhcmVudGhlc2VzIGFyZSBvcHRpb25hbCwgZXhjZXB0IGluIHRoZSBlbXB0eVxuICAgdHVwbGUgY2FzZSwgb3Igd2hlbiB0aGV5IGFyZSBuZWVkZWQgdG8gYXZvaWQgc3ludGFjdGljIGFtYmlndWl0eS5cbiAgIEZvciBleGFtcGxlLCBgYGYoYSwgYiwgYylgYCBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCB0aHJlZVxuICAgYXJndW1lbnRzLCB3aGlsZSBgYGYoKGEsIGIsIGMpKWBgIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGEgMy10dXBsZVxuICAgYXMgdGhlIHNvbGUgYXJndW1lbnQuXG5cbiAgIFR1cGxlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuXG5Gb3IgaGV0ZXJvZ2VuZW91cyBjb2xsZWN0aW9ucyBvZiBkYXRhIHdoZXJlIGFjY2VzcyBieSBuYW1lIGlzIGNsZWFyZXJcbnRoYW4gYWNjZXNzIGJ5IGluZGV4LCBgYGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKWBgIG1heSBiZSBhIG1vcmVcbmFwcHJvcHJpYXRlIGNob2ljZSB0aGFuIGEgc2ltcGxlIHR1cGxlIG9iamVjdC5cblxuXG5SYW5nZXNcbj09PT09PVxuXG5UaGUgYGByYW5nZWBgIHR5cGUgcmVwcmVzZW50cyBhbiBpbW11dGFibGUgc2VxdWVuY2Ugb2YgbnVtYmVycyBhbmQgaXNcbmNvbW1vbmx5IHVzZWQgZm9yIGxvb3BpbmcgYSBzcGVjaWZpYyBudW1iZXIgb2YgdGltZXMgaW4gYGBmb3JgYCBsb29wcy5cblxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RvcClcbmNsYXNzIGNsYXNzIHJhbmdlKHN0YXJ0LCBzdG9wWywgc3RlcF0pXG5cbiAgIFRoZSBhcmd1bWVudHMgdG8gdGhlIHJhbmdlIGNvbnN0cnVjdG9yIG11c3QgYmUgaW50ZWdlcnMgKGVpdGhlclxuICAgYnVpbHQtaW4gYGBpbnRgYCBvciBhbnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgYGBfX2luZGV4X19gYFxuICAgc3BlY2lhbCBtZXRob2QpLiAgSWYgdGhlICpzdGVwKiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0b1xuICAgYGAxYGAuIElmIHRoZSAqc3RhcnQqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBgMGBgLiBJZlxuICAgKnN0ZXAqIGlzIHplcm8sIGBgVmFsdWVFcnJvcmBgIGlzIHJhaXNlZC5cblxuICAgRm9yIGEgcG9zaXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgYSByYW5nZSBgYHJgYCBhcmUgZGV0ZXJtaW5lZFxuICAgYnkgdGhlIGZvcm11bGEgYGByW2ldID0gc3RhcnQgKyBzdGVwKmlgYCB3aGVyZSBgYGkgPj0gMGBgIGFuZFxuICAgYGByW2ldIDwgc3RvcGBgLlxuXG4gICBGb3IgYSBuZWdhdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgYXJlIHN0aWxsXG4gICBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtdWxhIGBgcltpXSA9IHN0YXJ0ICsgc3RlcCppYGAsIGJ1dCB0aGVcbiAgIGNvbnN0cmFpbnRzIGFyZSBgYGkgPj0gMGBgIGFuZCBgYHJbaV0gPiBzdG9wYGAuXG5cbiAgIEEgcmFuZ2Ugb2JqZWN0IHdpbGwgYmUgZW1wdHkgaWYgYGByWzBdYGAgZG9lcyBub3QgbWVldCB0aGUgdmFsdWVcbiAgIGNvbnN0cmFpbnQuIFJhbmdlcyBkbyBzdXBwb3J0IG5lZ2F0aXZlIGluZGljZXMsIGJ1dCB0aGVzZSBhcmVcbiAgIGludGVycHJldGVkIGFzIGluZGV4aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UgZGV0ZXJtaW5lZCBieVxuICAgdGhlIHBvc2l0aXZlIGluZGljZXMuXG5cbiAgIFJhbmdlcyBjb250YWluaW5nIGFic29sdXRlIHZhbHVlcyBsYXJnZXIgdGhhbiBgYHN5cy5tYXhzaXplYGAgYXJlXG4gICBwZXJtaXR0ZWQgYnV0IHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgYGBsZW4oKWBgKSBtYXkgcmFpc2VcbiAgIGBgT3ZlcmZsb3dFcnJvcmBgLlxuXG4gICBSYW5nZSBleGFtcGxlczpcblxuICAgICAgPj4+IGxpc3QocmFuZ2UoMTApKVxuICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAxMSkpXG4gICAgICBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAzMCwgNSkpXG4gICAgICBbMCwgNSwgMTAsIDE1LCAyMCwgMjVdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAxMCwgMykpXG4gICAgICBbMCwgMywgNiwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIC0xMCwgLTEpKVxuICAgICAgWzAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtOCwgLTldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwKSlcbiAgICAgIFtdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAwKSlcbiAgICAgIFtdXG5cbiAgIFJhbmdlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zIGV4Y2VwdFxuICAgY29uY2F0ZW5hdGlvbiBhbmQgcmVwZXRpdGlvbiAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgcmFuZ2Ugb2JqZWN0c1xuICAgY2FuIG9ubHkgcmVwcmVzZW50IHNlcXVlbmNlcyB0aGF0IGZvbGxvdyBhIHN0cmljdCBwYXR0ZXJuIGFuZFxuICAgcmVwZXRpdGlvbiBhbmQgY29uY2F0ZW5hdGlvbiB3aWxsIHVzdWFsbHkgdmlvbGF0ZSB0aGF0IHBhdHRlcm4pLlxuXG5UaGUgYWR2YW50YWdlIG9mIHRoZSBgYHJhbmdlYGAgdHlwZSBvdmVyIGEgcmVndWxhciBgYGxpc3RgYCBvclxuYGB0dXBsZWBgIGlzIHRoYXQgYSBgYHJhbmdlYGAgb2JqZWN0IHdpbGwgYWx3YXlzIHRha2UgdGhlIHNhbWUgKHNtYWxsKVxuYW1vdW50IG9mIG1lbW9yeSwgbm8gbWF0dGVyIHRoZSBzaXplIG9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzIChhcyBpdFxub25seSBzdG9yZXMgdGhlIGBgc3RhcnRgYCwgYGBzdG9wYGAgYW5kIGBgc3RlcGBgIHZhbHVlcywgY2FsY3VsYXRpbmdcbmluZGl2aWR1YWwgaXRlbXMgYW5kIHN1YnJhbmdlcyBhcyBuZWVkZWQpLlxuXG5SYW5nZSBvYmplY3RzIGltcGxlbWVudCB0aGUgYGBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgYCBBQkMsIGFuZFxucHJvdmlkZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCxcbnNsaWNpbmcgYW5kIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXMgKHNlZSAqU2VxdWVuY2UgVHlwZXMgLS0tXG5saXN0LCB0dXBsZSwgcmFuZ2UqKTpcblxuPj4+IHIgPSByYW5nZSgwLCAyMCwgMilcbj4+PiByXG5yYW5nZSgwLCAyMCwgMilcbj4+PiAxMSBpbiByXG5GYWxzZVxuPj4+IDEwIGluIHJcblRydWVcbj4+PiByLmluZGV4KDEwKVxuNVxuPj4+IHJbNV1cbjEwXG4+Pj4gcls6NV1cbnJhbmdlKDAsIDEwLCAyKVxuPj4+IHJbLTFdXG4xOFxuXG5UZXN0aW5nIHJhbmdlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggYGA9PWBgIGFuZCBgYCE9YGAgY29tcGFyZXNcbnRoZW0gYXMgc2VxdWVuY2VzLiAgVGhhdCBpcywgdHdvIHJhbmdlIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWZcbnRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcy4gIChOb3RlIHRoYXQgdHdvIHJhbmdlXG5vYmplY3RzIHRoYXQgY29tcGFyZSBlcXVhbCBtaWdodCBoYXZlIGRpZmZlcmVudCBgYHN0YXJ0YGAsIGBgc3RvcGBgXG5hbmQgYGBzdGVwYGAgYXR0cmlidXRlcywgZm9yIGV4YW1wbGUgYGByYW5nZSgwKSA9PSByYW5nZSgyLCAxLCAzKWBgIG9yXG5gYHJhbmdlKDAsIDMsIDIpID09IHJhbmdlKDAsIDQsIDIpYGAuKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBJbXBsZW1lbnQgdGhlIFNlcXVlbmNlIEFCQy4gU3VwcG9ydCBzbGljaW5nXG5hbmQgbmVnYXRpdmUgaW5kaWNlcy4gVGVzdCBgYGludGBgIG9iamVjdHMgZm9yIG1lbWJlcnNoaXAgaW4gY29uc3RhbnRcbnRpbWUgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgaXRlbXMuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IERlZmluZSBcJz09XCcgYW5kIFwnIT1cJyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHNcbmJhc2VkIG9uIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nXG5iYXNlZCBvbiBvYmplY3QgaWRlbnRpdHkpLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSBgYHN0YXJ0YGAsIGBgc3RvcGBgIGFuZCBgYHN0ZXBgYCBhdHRyaWJ1dGVzLlxuJywKICAndHlwZXNzZXEtbXV0YWJsZSc6ICJcbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlIGBgY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZWBgIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsIGBgYnl0ZWFycmF5YGAgb25seVxuYWNjZXB0cyBpbnRlZ2VycyB0aGF0IG1lZXQgdGhlIHZhbHVlIHJlc3RyaWN0aW9uIGBgMCA8PSB4IDw9IDI1NWBgKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBhcHBlbmRzICp4KiB0byB0aGUgZW5kIG9mIHRoZSAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcXVlbmNlIChzYW1lIGFzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2xlbihzKTpsZW4ocyldID0gW3hdYGApICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jbGVhcigpYGAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gYGBzYGAgICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBkZWwgc1s6XWBgKSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jb3B5KClgYCAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgYGBzYGAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBzWzpdYGApICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5leHRlbmQodClgYCAgICAgICAgICAgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlIGNvbnRlbnRzIG9mIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKnQqIChzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA9IHRgYCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluc2VydChpLCB4KWBgICAgICAgICAgICAgIHwgaW5zZXJ0cyAqeCogaW50byAqcyogYXQgdGhlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCBnaXZlbiBieSAqaSogKHNhbWUgYXMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmldID0gW3hdYGApICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucG9wKFtpXSlgYCAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsc28gcmVtb3ZlcyBpdCBmcm9tICpzKiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmVtb3ZlKHgpYGAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoZXJlIGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmV2ZXJzZSgpYGAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gYGByZW1vdmVgYCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlIGBgcmV2ZXJzZSgpYGAgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3IgZWNvbm9teVxuICAgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0XG4gICBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZCBzZXF1ZW5jZS5cblxuNS4gYGBjbGVhcigpYGAgYW5kIGBgY29weSgpYGAgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb24ndCBzdXBwb3J0IHNsaWNpbmdcbiAgIG9wZXJhdGlvbnMgKHN1Y2ggYXMgYGBkaWN0YGAgYW5kIGBgc2V0YGApXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogYGBjbGVhcigpYGAgYW5kIGBgY29weSgpYGAgbWV0aG9kcy5cbiIsCiAgJ3VuYXJ5JzogJ1xuVW5hcnkgYXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQWxsIHVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5OlxuXG4gICB1X2V4cHIgOjo9IHBvd2VyIHwgIi0iIHVfZXhwciB8ICIrIiB1X2V4cHIgfCAifiIgdV9leHByXG5cblRoZSB1bmFyeSBgYC1gYCAobWludXMpIG9wZXJhdG9yIHlpZWxkcyB0aGUgbmVnYXRpb24gb2YgaXRzIG51bWVyaWNcbmFyZ3VtZW50LlxuXG5UaGUgdW5hcnkgYGArYGAgKHBsdXMpIG9wZXJhdG9yIHlpZWxkcyBpdHMgbnVtZXJpYyBhcmd1bWVudCB1bmNoYW5nZWQuXG5cblRoZSB1bmFyeSBgYH5gYCAoaW52ZXJ0KSBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgaW52ZXJzaW9uIG9mIGl0c1xuaW50ZWdlciBhcmd1bWVudC4gIFRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBgYHhgYCBpcyBkZWZpbmVkIGFzXG5gYC0oeCsxKWBgLiAgSXQgb25seSBhcHBsaWVzIHRvIGludGVncmFsIG51bWJlcnMuXG5cbkluIGFsbCB0aHJlZSBjYXNlcywgaWYgdGhlIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgdGhlIHByb3BlciB0eXBlLCBhXG5gYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAogICd3aGlsZSc6ICdcblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXNcbmV4ZWN1dGVkIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5nb2VzIGJhY2sgdG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cbicsCmRpZmYgLS1naXQgYS9MaWIvcXVvcHJpLnB5IGIvTGliL3F1b3ByaS5weQppbmRleCAzZDBmMGFjLi5lNWJkMDEwIDEwMDc1NQotLS0gYS9MaWIvcXVvcHJpLnB5CisrKyBiL0xpYi9xdW9wcmkucHkKQEAgLTIyMyw3ICsyMjMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlLCAicmIiKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzOiBjYW4ndCBvcGVuICglcylcbiIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgICAgICAgICBzdHMgPSAxCiAgICAgICAgICAgICAgICAgY29udGludWUKZGlmZiAtLWdpdCBhL0xpYi9yYW5kb20ucHkgYi9MaWIvcmFuZG9tLnB5CmluZGV4IDE0YWM1ZTUuLjgwODE3NWEgMTAwNjQ0Ci0tLSBhL0xpYi9yYW5kb20ucHkKKysrIGIvTGliL3JhbmRvbS5weQpAQCAtNDEsNyArNDEsNyBAQAogZnJvbSBtYXRoIGltcG9ydCBsb2cgYXMgX2xvZywgZXhwIGFzIF9leHAsIHBpIGFzIF9waSwgZSBhcyBfZSwgY2VpbCBhcyBfY2VpbAogZnJvbSBtYXRoIGltcG9ydCBzcXJ0IGFzIF9zcXJ0LCBhY29zIGFzIF9hY29zLCBjb3MgYXMgX2Nvcywgc2luIGFzIF9zaW4KIGZyb20gb3MgaW1wb3J0IHVyYW5kb20gYXMgX3VyYW5kb20KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBTZXQgYXMgX1NldCwgU2VxdWVuY2UgYXMgX1NlcXVlbmNlCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IFNldCBhcyBfU2V0LCBTZXF1ZW5jZSBhcyBfU2VxdWVuY2UKIGZyb20gaGFzaGxpYiBpbXBvcnQgc2hhNTEyIGFzIF9zaGE1MTIKIAogX19hbGxfXyA9IFsiUmFuZG9tIiwic2VlZCIsInJhbmRvbSIsInVuaWZvcm0iLCJyYW5kaW50IiwiY2hvaWNlIiwic2FtcGxlIiwKQEAgLTE1MSw2ICsxNTEsOSBAQAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSBwaWNrbGUgc3VwcG9ydCAgLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgIyBJc3N1ZSAxNzQ4OTogU2luY2UgX19yZWR1Y2VfXyB3YXMgZGVmaW5lZCB0byBmaXggIzc1OTg4OSB0aGlzIGlzIG5vCisgICAgIyBsb25nZXIgY2FsbGVkOyB3ZSBsZWF2ZSBpdCBoZXJlIGJlY2F1c2UgaXQgaGFzIGJlZW4gaGVyZSBzaW5jZSByYW5kb20gd2FzCisgICAgIyByZXdyaXR0ZW4gYmFjayBpbiAyMDAxIGFuZCB3aHkgcmlzayBicmVha2luZyBzb21ldGhpbmcuCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKTogIyBmb3IgcGlja2xlCiAgICAgICAgIHJldHVybiBzZWxmLmdldHN0YXRlKCkKIApAQCAtMjE2LDEwICsyMTksMTEgQEAKICAgICAgICAgICAgICAgICAgICBNZXRob2Q9X01ldGhvZFR5cGUsIEJ1aWx0aW5NZXRob2Q9X0J1aWx0aW5NZXRob2RUeXBlKToKICAgICAgICAgIlJldHVybiBhIHJhbmRvbSBpbnQgaW4gdGhlIHJhbmdlIFswLG4pLiAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgbj09MC4iCiAKKyAgICAgICAgcmFuZG9tID0gc2VsZi5yYW5kb20KICAgICAgICAgZ2V0cmFuZGJpdHMgPSBzZWxmLmdldHJhbmRiaXRzCiAgICAgICAgICMgT25seSBjYWxsIHNlbGYuZ2V0cmFuZGJpdHMgaWYgdGhlIG9yaWdpbmFsIHJhbmRvbSgpIGJ1aWx0aW4gbWV0aG9kCiAgICAgICAgICMgaGFzIG5vdCBiZWVuIG92ZXJyaWRkZW4gb3IgaWYgYSBuZXcgZ2V0cmFuZGJpdHMoKSB3YXMgc3VwcGxpZWQuCi0gICAgICAgIGlmIHR5cGUoc2VsZi5yYW5kb20pIGlzIEJ1aWx0aW5NZXRob2Qgb3IgdHlwZShnZXRyYW5kYml0cykgaXMgTWV0aG9kOgorICAgICAgICBpZiB0eXBlKHJhbmRvbSkgaXMgQnVpbHRpbk1ldGhvZCBvciB0eXBlKGdldHJhbmRiaXRzKSBpcyBNZXRob2Q6CiAgICAgICAgICAgICBrID0gbi5iaXRfbGVuZ3RoKCkgICMgZG9uJ3QgdXNlIChuLTEpIGhlcmUgYmVjYXVzZSBuIGNhbiBiZSAxCiAgICAgICAgICAgICByID0gZ2V0cmFuZGJpdHMoaykgICAgICAgICAgIyAwIDw9IHIgPCAyKiprCiAgICAgICAgICAgICB3aGlsZSByID49IG46CkBAIC0yMjcsNyArMjMxLDYgQEAKICAgICAgICAgICAgIHJldHVybiByCiAgICAgICAgICMgVGhlcmUncyBhbiBvdmVycmlkZW4gcmFuZG9tKCkgbWV0aG9kIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2QsCiAgICAgICAgICMgc28gd2UgY2FuIG9ubHkgdXNlIHJhbmRvbSgpIGZyb20gaGVyZS4KLSAgICAgICAgcmFuZG9tID0gc2VsZi5yYW5kb20KICAgICAgICAgaWYgbiA+PSBtYXhzaXplOgogICAgICAgICAgICAgX3dhcm4oIlVuZGVybHlpbmcgcmFuZG9tKCkgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBseSBcbiIKICAgICAgICAgICAgICAgICAiZW5vdWdoIGJpdHMgdG8gY2hvb3NlIGZyb20gYSBwb3B1bGF0aW9uIHJhbmdlIHRoaXMgbGFyZ2UuXG4iCkBAIC0yNTEsMTAgKzI1NCwxMSBAQAogICAgICAgICByZXR1cm4gc2VxW2ldCiAKICAgICBkZWYgc2h1ZmZsZShzZWxmLCB4LCByYW5kb209Tm9uZSk6Ci0gICAgICAgICIiIngsIHJhbmRvbT1yYW5kb20ucmFuZG9tIC0+IHNodWZmbGUgbGlzdCB4IGluIHBsYWNlOyByZXR1cm4gTm9uZS4KKyAgICAgICAgIiIiU2h1ZmZsZSBsaXN0IHggaW4gcGxhY2UsIGFuZCByZXR1cm4gTm9uZS4KIAotICAgICAgICBPcHRpb25hbCBhcmcgcmFuZG9tIGlzIGEgMC1hcmd1bWVudCBmdW5jdGlvbiByZXR1cm5pbmcgYSByYW5kb20KLSAgICAgICAgZmxvYXQgaW4gWzAuMCwgMS4wKTsgYnkgZGVmYXVsdCwgdGhlIHN0YW5kYXJkIHJhbmRvbS5yYW5kb20uCisgICAgICAgIE9wdGlvbmFsIGFyZ3VtZW50IHJhbmRvbSBpcyBhIDAtYXJndW1lbnQgZnVuY3Rpb24gcmV0dXJuaW5nIGEKKyAgICAgICAgcmFuZG9tIGZsb2F0IGluIFswLjAsIDEuMCk7IGlmIGl0IGlzIHRoZSBkZWZhdWx0IE5vbmUsIHRoZQorICAgICAgICBzdGFuZGFyZCByYW5kb20ucmFuZG9tIHdpbGwgYmUgdXNlZC4KIAogICAgICAgICAiIiIKIApkaWZmIC0tZ2l0IGEvTGliL3JlLnB5IGIvTGliL3JlLnB5CmluZGV4IGZjZWExOTAuLjc3ZjVlM2YgMTAwNjQ0Ci0tLSBhL0xpYi9yZS5weQorKysgYi9MaWIvcmUucHkKQEAgLTg1LDE2ICs4NSwxNyBAQAogICAgIFxcICAgICAgIE1hdGNoZXMgYSBsaXRlcmFsIGJhY2tzbGFzaC4KIAogVGhpcyBtb2R1bGUgZXhwb3J0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSAgICBtYXRjaCAgICBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuCi0gICAgc2VhcmNoICAgU2VhcmNoIGEgc3RyaW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBwYXR0ZXJuLgotICAgIHN1YiAgICAgIFN1YnN0aXR1dGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGZvdW5kIGluIGEgc3RyaW5nLgotICAgIHN1Ym4gICAgIFNhbWUgYXMgc3ViLCBidXQgYWxzbyByZXR1cm4gdGhlIG51bWJlciBvZiBzdWJzdGl0dXRpb25zIG1hZGUuCi0gICAgc3BsaXQgICAgU3BsaXQgYSBzdHJpbmcgYnkgdGhlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybi4KLSAgICBmaW5kYWxsICBGaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gaW4gYSBzdHJpbmcuCi0gICAgZmluZGl0ZXIgUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIGEgbWF0Y2ggb2JqZWN0IGZvciBlYWNoIG1hdGNoLgotICAgIGNvbXBpbGUgIENvbXBpbGUgYSBwYXR0ZXJuIGludG8gYSBSZWdleE9iamVjdC4KLSAgICBwdXJnZSAgICBDbGVhciB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLgotICAgIGVzY2FwZSAgIEJhY2tzbGFzaCBhbGwgbm9uLWFscGhhbnVtZXJpY3MgaW4gYSBzdHJpbmcuCisgICAgbWF0Y2ggICAgIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy4KKyAgICBmdWxsbWF0Y2ggTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byBhbGwgb2YgYSBzdHJpbmcuCisgICAgc2VhcmNoICAgIFNlYXJjaCBhIHN0cmluZyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgcGF0dGVybi4KKyAgICBzdWIgICAgICAgU3Vic3RpdHV0ZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gZm91bmQgaW4gYSBzdHJpbmcuCisgICAgc3VibiAgICAgIFNhbWUgYXMgc3ViLCBidXQgYWxzbyByZXR1cm4gdGhlIG51bWJlciBvZiBzdWJzdGl0dXRpb25zIG1hZGUuCisgICAgc3BsaXQgICAgIFNwbGl0IGEgc3RyaW5nIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4uCisgICAgZmluZGFsbCAgIEZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBpbiBhIHN0cmluZy4KKyAgICBmaW5kaXRlciAgUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIGEgbWF0Y2ggb2JqZWN0IGZvciBlYWNoIG1hdGNoLgorICAgIGNvbXBpbGUgICBDb21waWxlIGEgcGF0dGVybiBpbnRvIGEgUmVnZXhPYmplY3QuCisgICAgcHVyZ2UgICAgIENsZWFyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FjaGUuCisgICAgZXNjYXBlICAgIEJhY2tzbGFzaCBhbGwgbm9uLWFscGhhbnVtZXJpY3MgaW4gYSBzdHJpbmcuCiAKIFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0YWtlcyBmbGFncyBhcyBvcHRpb25hbCBwYXJhbWV0ZXJzOgogICAgIEEgIEFTQ0lJICAgICAgIEZvciBzdHJpbmcgcGF0dGVybnMsIG1ha2UgXHcsIFxXLCBcYiwgXEIsIFxkLCBcRApAQCAtMTIxLDEwICsxMjIsOSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX3BhcnNlCi1pbXBvcnQgZnVuY3Rvb2xzCiAKICMgcHVibGljIHN5bWJvbHMKLV9fYWxsX18gPSBbICJtYXRjaCIsICJzZWFyY2giLCAic3ViIiwgInN1Ym4iLCAic3BsaXQiLCAiZmluZGFsbCIsCitfX2FsbF9fID0gWyAibWF0Y2giLCAiZnVsbG1hdGNoIiwgInNlYXJjaCIsICJzdWIiLCAic3VibiIsICJzcGxpdCIsICJmaW5kYWxsIiwKICAgICAiY29tcGlsZSIsICJwdXJnZSIsICJ0ZW1wbGF0ZSIsICJlc2NhcGUiLCAiQSIsICJJIiwgIkwiLCAiTSIsICJTIiwgIlgiLAogICAgICJVIiwgIkFTQ0lJIiwgIklHTk9SRUNBU0UiLCAiTE9DQUxFIiwgIk1VTFRJTElORSIsICJET1RBTEwiLCAiVkVSQk9TRSIsCiAgICAgIlVOSUNPREUiLCAiZXJyb3IiIF0KQEAgLTE1NSw2ICsxNTUsMTEgQEAKICAgICBhIG1hdGNoIG9iamVjdCwgb3IgTm9uZSBpZiBubyBtYXRjaCB3YXMgZm91bmQuIiIiCiAgICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKS5tYXRjaChzdHJpbmcpCiAKK2RlZiBmdWxsbWF0Y2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAiIiJUcnkgdG8gYXBwbHkgdGhlIHBhdHRlcm4gdG8gYWxsIG9mIHRoZSBzdHJpbmcsIHJldHVybmluZworICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKKyAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLmZ1bGxtYXRjaChzdHJpbmcpCisKIGRlZiBzZWFyY2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKToKICAgICAiIiJTY2FuIHRocm91Z2ggc3RyaW5nIGxvb2tpbmcgZm9yIGEgbWF0Y2ggdG8gdGhlIHBhdHRlcm4sIHJldHVybmluZwogICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKZGlmZiAtLWdpdCBhL0xpYi9ybGNvbXBsZXRlci5weSBiL0xpYi9ybGNvbXBsZXRlci5weQppbmRleCAzZjk3MDUzLi45NGY5MzQxIDEwMDY0NAotLS0gYS9MaWIvcmxjb21wbGV0ZXIucHkKKysrIGIvTGliL3JsY29tcGxldGVyLnB5CkBAIC0yOSw2ICsyOSw3IEBACiAKICIiIgogCitpbXBvcnQgYXRleGl0CiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBfX21haW5fXwogCkBAIC0xNTgsMyArMTU5LDcgQEAKICAgICBwYXNzCiBlbHNlOgogICAgIHJlYWRsaW5lLnNldF9jb21wbGV0ZXIoQ29tcGxldGVyKCkuY29tcGxldGUpCisgICAgIyBSZWxlYXNlIHJlZmVyZW5jZXMgZWFybHkgYXQgc2h1dGRvd24gKHRoZSByZWFkbGluZSBtb2R1bGUncworICAgICMgY29udGVudHMgYXJlIHF1YXNpLWltbW9ydGFsLCBhbmQgdGhlIGNvbXBsZXRlciBmdW5jdGlvbiBob2xkcyBhCisgICAgIyByZWZlcmVuY2UgdG8gZ2xvYmFscykuCisgICAgYXRleGl0LnJlZ2lzdGVyKGxhbWJkYTogcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihOb25lKSkKZGlmZiAtLWdpdCBhL0xpYi9ydW5weS5weSBiL0xpYi9ydW5weS5weQppbmRleCAzOWMwZTlmLi4xZTBhMmJlIDEwMDY0NAotLS0gYS9MaWIvcnVucHkucHkKKysrIGIvTGliL3J1bnB5LnB5CkBAIC0xMyw3ICsxMyw3IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5ICMgaW1wb3J0bGliIGZpcnN0IHNvIHdlIGNhbiB0ZXN0ICMxNTM4NiB2aWEgLW0KLWltcG9ydCBpbXAKK2ltcG9ydCB0eXBlcwogZnJvbSBwa2d1dGlsIGltcG9ydCByZWFkX2NvZGUsIGdldF9sb2FkZXIsIGdldF9pbXBvcnRlcgogCiBfX2FsbF9fID0gWwpAQCAtMjQsNyArMjQsNyBAQAogICAgICIiIlRlbXBvcmFyaWx5IHJlcGxhY2UgYSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMgd2l0aCBhbiBlbXB0eSBuYW1lc3BhY2UiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kX25hbWUpOgogICAgICAgICBzZWxmLm1vZF9uYW1lID0gbW9kX25hbWUKLSAgICAgICAgc2VsZi5tb2R1bGUgPSBpbXAubmV3X21vZHVsZShtb2RfbmFtZSkKKyAgICAgICAgc2VsZi5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG1vZF9uYW1lKQogICAgICAgICBzZWxmLl9zYXZlZF9tb2R1bGUgPSBbXQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKQEAgLTIyMyw3ICsyMjMsMTIgQEAKICAgICAgICAgcnVuX25hbWUgPSAiPHJ1bl9wYXRoPiIKICAgICBwa2dfbmFtZSA9IHJ1bl9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXQogICAgIGltcG9ydGVyID0gZ2V0X2ltcG9ydGVyKHBhdGhfbmFtZSkKLSAgICBpZiBpc2luc3RhbmNlKGltcG9ydGVyLCAodHlwZShOb25lKSwgaW1wLk51bGxJbXBvcnRlcikpOgorICAgICMgVHJ5aW5nIHRvIGF2b2lkIGltcG9ydGluZyBpbXAgc28gYXMgdG8gbm90IGNvbnN1bWUgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisgICAgaXNfTnVsbEltcG9ydGVyID0gRmFsc2UKKyAgICBpZiB0eXBlKGltcG9ydGVyKS5fX21vZHVsZV9fID09ICdpbXAnOgorICAgICAgICBpZiB0eXBlKGltcG9ydGVyKS5fX25hbWVfXyA9PSAnTnVsbEltcG9ydGVyJzoKKyAgICAgICAgICAgIGlzX051bGxJbXBvcnRlciA9IFRydWUKKyAgICBpZiBpc2luc3RhbmNlKGltcG9ydGVyLCB0eXBlKE5vbmUpKSBvciBpc19OdWxsSW1wb3J0ZXI6CiAgICAgICAgICMgTm90IGEgdmFsaWQgc3lzLnBhdGggZW50cnksIHNvIHJ1biB0aGUgY29kZSBkaXJlY3RseQogICAgICAgICAjIGV4ZWNmaWxlKCkgZG9lc24ndCBoZWxwIGFzIHdlIHdhbnQgdG8gYWxsb3cgY29tcGlsZWQgZmlsZXMKICAgICAgICAgY29kZSwgbW9kX2xvYWRlciA9IF9nZXRfY29kZV9mcm9tX2ZpbGUocnVuX25hbWUsIHBhdGhfbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9zY2hlZC5weSBiL0xpYi9zY2hlZC5weQppbmRleCBiOWE3YWQxLi4yZTZiMDBhIDEwMDY0NAotLS0gYS9MaWIvc2NoZWQucHkKKysrIGIvTGliL3NjaGVkLnB5CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIGt3YXJncyBpcyBfc2VudGluZWw6CiAgICAgICAgICAgICBrd2FyZ3MgPSB7fQorICAgICAgICBldmVudCA9IEV2ZW50KHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQodGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKICAgICAgICAgICAgIGhlYXBxLmhlYXBwdXNoKHNlbGYuX3F1ZXVlLCBldmVudCkKLSAgICAgICAgICAgIHJldHVybiBldmVudCAjIFRoZSBJRAorICAgICAgICByZXR1cm4gZXZlbnQgIyBUaGUgSUQKIAogICAgIGRlZiBlbnRlcihzZWxmLCBkZWxheSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQ9KCksIGt3YXJncz1fc2VudGluZWwpOgogICAgICAgICAiIiJBIHZhcmlhbnQgdGhhdCBzcGVjaWZpZXMgdGhlIHRpbWUgYXMgYSByZWxhdGl2ZSB0aW1lLgpAQCAtODIsOSArODIsOCBAQAogICAgICAgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBtb3JlIGNvbW1vbmx5IHVzZWQgaW50ZXJmYWNlLgogCiAgICAgICAgICIiIgotICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICB0aW1lID0gc2VsZi50aW1lZnVuYygpICsgZGVsYXkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmVudGVyYWJzKHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCisgICAgICAgIHRpbWUgPSBzZWxmLnRpbWVmdW5jKCkgKyBkZWxheQorICAgICAgICByZXR1cm4gc2VsZi5lbnRlcmFicyh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogCiAgICAgZGVmIGNhbmNlbChzZWxmLCBldmVudCk6CiAgICAgICAgICIiIlJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSBxdWV1ZS4KQEAgLTE2NSw0ICsxNjQsNCBAQAogICAgICAgICAjIHRoZSBhY3R1YWwgb3JkZXIgdGhleSB3b3VsZCBiZSByZXRyaWV2ZWQuCiAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgICAgICAgIGV2ZW50cyA9IHNlbGYuX3F1ZXVlWzpdCi0gICAgICAgICAgICByZXR1cm4gbGlzdChtYXAoaGVhcHEuaGVhcHBvcCwgW2V2ZW50c10qbGVuKGV2ZW50cykpKQorICAgICAgICByZXR1cm4gbGlzdChtYXAoaGVhcHEuaGVhcHBvcCwgW2V2ZW50c10qbGVuKGV2ZW50cykpKQpkaWZmIC0tZ2l0IGEvTGliL3NlbGVjdG9ycy5weSBiL0xpYi9zZWxlY3RvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxZmFjNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zZWxlY3RvcnMucHkKQEAgLTAsMCArMSw0MzEgQEAKKyIiIlNlbGVjdG9ycyBtb2R1bGUuCisKK1RoaXMgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKK2BzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLgorIiIiCisKKworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBNYXBwaW5nCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCisKKworIyBnZW5lcmljIGV2ZW50cywgdGhhdCBtdXN0IGJlIG1hcHBlZCB0byBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvbmVzCitFVkVOVF9SRUFEID0gKDEgPDwgMCkKK0VWRU5UX1dSSVRFID0gKDEgPDwgMSkKKworCitkZWYgX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaik6CisgICAgIiIiUmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBmaWxlIG9iamVjdC4KKworICAgIFBhcmFtZXRlcnM6CisgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgIFJldHVybnM6CisgICAgY29ycmVzcG9uZGluZyBmaWxlIGRlc2NyaXB0b3IKKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZpbGVvYmosIGludCk6CisgICAgICAgIGZkID0gZmlsZW9iagorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkID0gaW50KGZpbGVvYmouZmlsZW5vKCkpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGZpbGUgb2JqZWN0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7IXJ9Ii5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorICAgIGlmIGZkIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6IHt9Ii5mb3JtYXQoZmQpKQorICAgIHJldHVybiBmZAorCisKK1NlbGVjdG9yS2V5ID0gbmFtZWR0dXBsZSgnU2VsZWN0b3JLZXknLCBbJ2ZpbGVvYmonLCAnZmQnLCAnZXZlbnRzJywgJ2RhdGEnXSkKKyIiIk9iamVjdCB1c2VkIHRvIGFzc29jaWF0ZSBhIGZpbGUgb2JqZWN0IHRvIGl0cyBiYWNraW5nIGZpbGUgZGVzY3JpcHRvciwKK3NlbGVjdGVkIGV2ZW50IG1hc2sgYW5kIGF0dGFjaGVkIGRhdGEuIiIiCisKKworY2xhc3MgX1NlbGVjdG9yTWFwcGluZyhNYXBwaW5nKToKKyAgICAiIiJNYXBwaW5nIG9mIGZpbGUgb2JqZWN0cyB0byBzZWxlY3RvciBrZXlzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbGVjdG9yKToKKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBzZWxlY3RvcgorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fc2VsZWN0b3IuX2ZkX3RvX2tleSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXlbX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaildCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5KQorCisKK2NsYXNzIEJhc2VTZWxlY3RvcihtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgIiIiQmFzZSBzZWxlY3RvciBjbGFzcy4KKworICAgIEEgc2VsZWN0b3Igc3VwcG9ydHMgcmVnaXN0ZXJpbmcgZmlsZSBvYmplY3RzIHRvIGJlIG1vbml0b3JlZCBmb3Igc3BlY2lmaWMKKyAgICBJL08gZXZlbnRzLgorCisgICAgQSBmaWxlIG9iamVjdCBpcyBhIGZpbGUgZGVzY3JpcHRvciBvciBhbnkgb2JqZWN0IHdpdGggYSBgZmlsZW5vKClgIG1ldGhvZC4KKyAgICBBbiBhcmJpdHJhcnkgb2JqZWN0IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgZmlsZSBvYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkCisgICAgZm9yIGV4YW1wbGUgdG8gc3RvcmUgY29udGV4dCBpbmZvcm1hdGlvbiwgYSBjYWxsYmFjaywgZXRjLgorCisgICAgQSBzZWxlY3RvciBjYW4gdXNlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zIChzZWxlY3QoKSwgcG9sbCgpLCBlcG9sbCgpLi4uKQorICAgIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uIFRoZSBkZWZhdWx0IGBTZWxlY3RvcmAgY2xhc3MgdXNlcyB0aGUgbW9zdAorICAgIHBlcmZvcm1hbnQgaW1wbGVtZW50YXRpb24gb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgdGhpcyBtYXBzIGZpbGUgZGVzY3JpcHRvcnMgdG8ga2V5cworICAgICAgICBzZWxmLl9mZF90b19rZXkgPSB7fQorICAgICAgICAjIHJlYWQtb25seSBtYXBwaW5nIHJldHVybmVkIGJ5IGdldF9tYXAoKQorICAgICAgICBzZWxmLl9tYXAgPSBfU2VsZWN0b3JNYXBwaW5nKHNlbGYpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAiIiJSZWdpc3RlciBhIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIGV2ZW50cyAgLS0gZXZlbnRzIHRvIG1vbml0b3IgKGJpdHdpc2UgbWFzayBvZiBFVkVOVF9SRUFEfEVWRU5UX1dSSVRFKQorICAgICAgICBkYXRhICAgIC0tIGF0dGFjaGVkIGRhdGEKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgKG5vdCBldmVudHMpIG9yIChldmVudHMgJiB+KEVWRU5UX1JFQUQgfCBFVkVOVF9XUklURSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBldmVudHM6IHshcn0iLmZvcm1hdChldmVudHMpKQorCisgICAgICAgIGtleSA9IFNlbGVjdG9yS2V5KGZpbGVvYmosIF9maWxlb2JqX3RvX2ZkKGZpbGVvYmopLCBldmVudHMsIGRhdGEpCisKKyAgICAgICAgaWYga2V5LmZkIGluIHNlbGYuX2ZkX3RvX2tleToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IChGRCB7fSkgaXMgYWxyZWFkeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmosIGtleS5mZCkpCisKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5W2tleS5mZF0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICIiIlVucmVnaXN0ZXIgYSBmaWxlIG9iamVjdC4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIFNlbGVjdG9yS2V5IGluc3RhbmNlCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9mZF90b19rZXkucG9wKF9maWxlb2JqX3RvX2ZkKGZpbGVvYmopKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIG1vZGlmeShzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICIiIkNoYW5nZSBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QgbW9uaXRvcmVkIGV2ZW50cyBvciBhdHRhY2hlZCBkYXRhLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIGV2ZW50cyAgLS0gZXZlbnRzIHRvIG1vbml0b3IgKGJpdHdpc2UgbWFzayBvZiBFVkVOVF9SRUFEfEVWRU5UX1dSSVRFKQorICAgICAgICBkYXRhICAgIC0tIGF0dGFjaGVkIGRhdGEKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgIyBUT0RPOiBTdWJjbGFzc2VzIGNhbiBwcm9iYWJseSBvcHRpbWl6ZSB0aGlzIGV2ZW4gZnVydGhlci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5W19maWxlb2JqX3RvX2ZkKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICAgICAgaWYgZXZlbnRzICE9IGtleS5ldmVudHM6CisgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGtleSA9IHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICBlbGlmIGRhdGEgIT0ga2V5LmRhdGE6CisgICAgICAgICAgICAjIFVzZSBhIHNob3J0Y3V0IHRvIHVwZGF0ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgIGtleSA9IGtleS5fcmVwbGFjZShkYXRhPWRhdGEpCisgICAgICAgICAgICBzZWxmLl9mZF90b19rZXlba2V5LmZkXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIlBlcmZvcm0gdGhlIGFjdHVhbCBzZWxlY3Rpb24sIHVudGlsIHNvbWUgbW9uaXRvcmVkIGZpbGUgb2JqZWN0cyBhcmUKKyAgICAgICAgcmVhZHkgb3IgYSB0aW1lb3V0IGV4cGlyZXMuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgdGltZW91dCAtLSBpZiB0aW1lb3V0ID4gMCwgdGhpcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gd2FpdCB0aW1lLCBpbgorICAgICAgICAgICAgICAgICAgIHNlY29uZHMKKyAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDAsIHRoZSBzZWxlY3QoKSBjYWxsIHdvbid0IGJsb2NrLCBhbmQgd2lsbAorICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUgY3VycmVudGx5IHJlYWR5IGZpbGUgb2JqZWN0cworICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZSwgc2VsZWN0KCkgd2lsbCBibG9jayB1bnRpbCBhIG1vbml0b3JlZAorICAgICAgICAgICAgICAgICAgIGZpbGUgb2JqZWN0IGJlY29tZXMgcmVhZHkKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBsaXN0IG9mIChrZXksIGV2ZW50cykgZm9yIHJlYWR5IGZpbGUgb2JqZWN0cworICAgICAgICBgZXZlbnRzYCBpcyBhIGJpdHdpc2UgbWFzayBvZiBFVkVOVF9SRUFEfEVWRU5UX1dSSVRFCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHNlbGVjdG9yLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2UgaXMgZnJlZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9mZF90b19rZXkuY2xlYXIoKQorCisgICAgZGVmIGdldF9rZXkoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICIiIlJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgdG8gYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIFNlbGVjdG9yS2V5IGZvciB0aGlzIGZpbGUgb2JqZWN0CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmRfdG9fa2V5W19maWxlb2JqX3RvX2ZkKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKworICAgIGRlZiBnZXRfbWFwKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBtYXBwaW5nIG9mIGZpbGUgb2JqZWN0cyB0byBzZWxlY3RvciBrZXlzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWFwCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX2tleV9mcm9tX2ZkKHNlbGYsIGZkKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBrZXkgYXNzb2NpYXRlZCB0byBhIGdpdmVuIGZpbGUgZGVzY3JpcHRvci4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmZCAtLSBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBjb3JyZXNwb25kaW5nIGtleSwgb3IgTm9uZSBpZiBub3QgZm91bmQKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9mZF90b19rZXlbZmRdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgU2VsZWN0U2VsZWN0b3IoQmFzZVNlbGVjdG9yKToKKyAgICAiIiJTZWxlY3QtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9yZWFkZXJzID0gc2V0KCkKKyAgICAgICAgc2VsZi5fd3JpdGVycyA9IHNldCgpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRlcnMuYWRkKGtleS5mZCkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl93cml0ZXJzLmFkZChrZXkuZmQpCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgc2VsZi5fcmVhZGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgc2VsZi5fd3JpdGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGRlZiBfc2VsZWN0KHNlbGYsIHIsIHcsIF8sIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdChyLCB3LCB3LCB0aW1lb3V0KQorICAgICAgICAgICAgcmV0dXJuIHIsIHcgKyB4LCBbXQorICAgIGVsc2U6CisgICAgICAgIF9zZWxlY3QgPSBzZWxlY3Quc2VsZWN0CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICByZWFkeSA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHIsIHcsIF8gPSBzZWxmLl9zZWxlY3Qoc2VsZi5fcmVhZGVycywgc2VsZi5fd3JpdGVycywgW10sIHRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgIHIgPSBzZXQocikKKyAgICAgICAgdyA9IHNldCh3KQorICAgICAgICBmb3IgZmQgaW4gciB8IHc6CisgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICBpZiBmZCBpbiByOgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICBpZiBmZCBpbiB3OgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorCisgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgIHJldHVybiByZWFkeQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgorCisgICAgY2xhc3MgUG9sbFNlbGVjdG9yKEJhc2VTZWxlY3Rvcik6CisgICAgICAgICIiIlBvbGwtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9wb2xsID0gc2VsZWN0LnBvbGwoKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIHBvbGxfZXZlbnRzID0gMAorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBwb2xsX2V2ZW50cyB8PSBzZWxlY3QuUE9MTElOCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBwb2xsX2V2ZW50cyB8PSBzZWxlY3QuUE9MTE9VVAorICAgICAgICAgICAgc2VsZi5fcG9sbC5yZWdpc3RlcihrZXkuZmQsIHBvbGxfZXZlbnRzKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICBzZWxmLl9wb2xsLnVucmVnaXN0ZXIoa2V5LmZkKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heChpbnQoMTAwMCAqIHRpbWVvdXQpLCAwKQorICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkX2V2ZW50X2xpc3QgPSBzZWxmLl9wb2xsLnBvbGwodGltZW91dCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBmZF9ldmVudF9saXN0OgorICAgICAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuUE9MTElOOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuUE9MTE9VVDoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1JFQUQKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKworaWYgaGFzYXR0cihzZWxlY3QsICdlcG9sbCcpOgorCisgICAgY2xhc3MgRXBvbGxTZWxlY3RvcihCYXNlU2VsZWN0b3IpOgorICAgICAgICAiIiJFcG9sbC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsID0gc2VsZWN0LmVwb2xsKCkKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Vwb2xsLmZpbGVubygpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgZXBvbGxfZXZlbnRzID0gMAorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBlcG9sbF9ldmVudHMgfD0gc2VsZWN0LkVQT0xMSU4KKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGVwb2xsX2V2ZW50cyB8PSBzZWxlY3QuRVBPTExPVVQKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsLnJlZ2lzdGVyKGtleS5mZCwgZXBvbGxfZXZlbnRzKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICBzZWxmLl9lcG9sbC51bnJlZ2lzdGVyKGtleS5mZCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICB0aW1lb3V0ID0gLTEgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KHRpbWVvdXQsIDApCisgICAgICAgICAgICBtYXhfZXYgPSBsZW4oc2VsZi5fZmRfdG9fa2V5KQorICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkX2V2ZW50X2xpc3QgPSBzZWxmLl9lcG9sbC5wb2xsKHRpbWVvdXQsIG1heF9ldikKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBmZF9ldmVudF9saXN0OgorICAgICAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuRVBPTExJTjoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LkVQT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9lcG9sbC5jbG9zZSgpCisgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ2txdWV1ZScpOgorCisgICAgY2xhc3MgS3F1ZXVlU2VsZWN0b3IoQmFzZVNlbGVjdG9yKToKKyAgICAgICAgIiIiS3F1ZXVlLWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5fa3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisKKyAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9rcXVldWUuZmlsZW5vKCkKKworICAgICAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREKQorICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREKQorICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICBpZiBrZXkuZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIGlmIGtleS5ldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KHRpbWVvdXQsIDApCisgICAgICAgICAgICBtYXhfZXYgPSBsZW4oc2VsZi5fZmRfdG9fa2V5KQorICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtldl9saXN0ID0gc2VsZi5fa3F1ZXVlLmNvbnRyb2woTm9uZSwgbWF4X2V2LCB0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3Iga2V2IGluIGtldl9saXN0OgorICAgICAgICAgICAgICAgIGZkID0ga2V2LmlkZW50CisgICAgICAgICAgICAgICAgZmxhZyA9IGtldi5maWx0ZXIKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisKKyMgQ2hvb3NlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uOiByb3VnaGx5LCBlcG9sbHxrcXVldWUgPiBwb2xsID4gc2VsZWN0LgorIyBzZWxlY3QoKSBhbHNvIGNhbid0IGFjY2VwdCBhIEZEID4gRkRfU0VUU0laRSAodXN1YWxseSBhcm91bmQgMTAyNCkKK2lmICdLcXVldWVTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IEtxdWV1ZVNlbGVjdG9yCitlbGlmICdFcG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gRXBvbGxTZWxlY3RvcgorZWxpZiAnUG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gUG9sbFNlbGVjdG9yCitlbHNlOgorICAgIERlZmF1bHRTZWxlY3RvciA9IFNlbGVjdFNlbGVjdG9yCmRpZmYgLS1naXQgYS9MaWIvc2hlbHZlLnB5IGIvTGliL3NoZWx2ZS5weQppbmRleCBjYzE4MTVlLi5jZWY1ODBlIDEwMDY0NAotLS0gYS9MaWIvc2hlbHZlLnB5CisrKyBiL0xpYi9zaGVsdmUucHkKQEAgLTYxLDcgKzYxLDcgQEAKIAogaW1wb3J0IGNvbGxlY3Rpb25zCiAKLV9fYWxsX18gPSBbIlNoZWxmIiwiQnNkRGJTaGVsZiIsIkRiZmlsZW5hbWVTaGVsZiIsIm9wZW4iXQorX19hbGxfXyA9IFsiU2hlbGYiLCAiQnNkRGJTaGVsZiIsICJEYmZpbGVuYW1lU2hlbGYiLCAib3BlbiJdCiAKIGNsYXNzIF9DbG9zZWREaWN0KGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nKToKICAgICAnTWFya2VyIGZvciBhIGNsb3NlZCBkaWN0LiAgQWNjZXNzIGF0dGVtcHRzIHJhaXNlIGEgVmFsdWVFcnJvci4nCkBAIC0xMzEsNiArMTMxLDEyIEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLnN5bmMoKQogICAgICAgICB0cnk6CkBAIC0xNDcsNiArMTUzLDcgQEAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3dyaXRlYmFjaycpOgogICAgICAgICAgICAgIyBfX2luaXRfXyBkaWRuJ3Qgc3VjY2VlZCwgc28gZG9uJ3QgYm90aGVyIGNsb3NpbmcKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzM5MDA3IGZvciBkZXRhaWxzCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IGE1YjJkMjQuLjUwMmJiNjcgMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtMzksMTcgKzM5LDIwIEBACiAgICAgICAgICAgICJpZ25vcmVfcGF0dGVybnMiLCAiY2hvd24iLCAid2hpY2giXQogICAgICAgICAgICAjIGRpc2tfdXNhZ2UgaXMgYWRkZWQgbGF0ZXIsIGlmIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0KIAotY2xhc3MgRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBFcnJvcihPU0Vycm9yKToKICAgICBwYXNzCiAKLWNsYXNzIFNwZWNpYWxGaWxlRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBTYW1lRmlsZUVycm9yKEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiIiIgorCitjbGFzcyBTcGVjaWFsRmlsZUVycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIHRyeWluZyB0byBkbyBhIGtpbmQgb2Ygb3BlcmF0aW9uIChlLmcuIGNvcHlpbmcpIHdoaWNoIGlzCiAgICAgbm90IHN1cHBvcnRlZCBvbiBhIHNwZWNpYWwgZmlsZSAoZS5nLiBhIG5hbWVkIHBpcGUpIiIiCiAKLWNsYXNzIEV4ZWNFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIEV4ZWNFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIiIiCiAKLWNsYXNzIFJlYWRFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIFJlYWRFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIiIiCiAKIGNsYXNzIFJlZ2lzdHJ5RXJyb3IoRXhjZXB0aW9uKToKQEAgLTU3LDExICs2MCw2IEBACiAgICAgYW5kIHVucGFja2luZyByZWdpc3RlcmllcyBmYWlscyIiIgogCiAKLXRyeToKLSAgICBXaW5kb3dzRXJyb3IKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgV2luZG93c0Vycm9yID0gTm9uZQotCiBkZWYgY29weWZpbGVvYmooZnNyYywgZmRzdCwgbGVuZ3RoPTE2KjEwMjQpOgogICAgICIiImNvcHkgZGF0YSBmcm9tIGZpbGUtbGlrZSBvYmplY3QgZnNyYyB0byBmaWxlLWxpa2Ugb2JqZWN0IGZkc3QiIiIKICAgICB3aGlsZSAxOgpAQCAtOTAsNyArODgsNyBAQAogCiAgICAgIiIiCiAgICAgaWYgX3NhbWVmaWxlKHNyYywgZHN0KToKLSAgICAgICAgcmFpc2UgRXJyb3IoImAlc2AgYW5kIGAlc2AgYXJlIHRoZSBzYW1lIGZpbGUiICUgKHNyYywgZHN0KSkKKyAgICAgICAgcmFpc2UgU2FtZUZpbGVFcnJvcigieyFyfSBhbmQgeyFyfSBhcmUgdGhlIHNhbWUgZmlsZSIuZm9ybWF0KHNyYywgZHN0KSkKIAogICAgIGZvciBmbiBpbiBbc3JjLCBkc3RdOgogICAgICAgICB0cnk6CkBAIC0yMjEsNiArMjE5LDkgQEAKICAgICBJZiBmb2xsb3dfc3ltbGlua3MgaXMgZmFsc2UsIHN5bWxpbmtzIHdvbid0IGJlIGZvbGxvd2VkLiBUaGlzCiAgICAgcmVzZW1ibGVzIEdOVSdzICJjcCAtUCBzcmMgZHN0Ii4KIAorICAgIElmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUsIGEgU2FtZUZpbGVFcnJvciB3aWxsIGJlCisgICAgcmFpc2VkLgorCiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3QpOgogICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZHN0LCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCkBAIC0zMjksMTUgKzMzMCwxMyBAQAogICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKICAgICAgICAgZXhjZXB0IEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXJyLmFyZ3NbMF0pCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQogICAgIHRyeToKICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCiAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgotICAgICAgICBpZiBXaW5kb3dzRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uod2h5LCBXaW5kb3dzRXJyb3IpOgotICAgICAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKKyAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKKyAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CiAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgIGlmIGVycm9yczoKICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQpAQCAtMzU2LDI0ICszNTUsMjQgQEAKICAgICBuYW1lcyA9IFtdCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIG9uZXJyb3Iob3MubGlzdGRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmdWxsbmFtZSkuc3RfbW9kZQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbW9kZSA9IDAKICAgICAgICAgaWYgc3RhdC5TX0lTRElSKG1vZGUpOgogICAgICAgICAgICAgX3JtdHJlZV91bnNhZmUoZnVsbG5hbWUsIG9uZXJyb3IpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgb25lcnJvcihvcy51bmxpbmssIGZ1bGxuYW1lLCBzeXMuZXhjX2luZm8oKSkKICAgICB0cnk6CiAgICAgICAgIG9zLnJtZGlyKHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBvbmVycm9yKG9zLnJtZGlyLCBwYXRoLCBzeXMuZXhjX2luZm8oKSkKIAogIyBWZXJzaW9uIHVzaW5nIGZkLWJhc2VkIEFQSXMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJhY2VzCkBAIC00NjQsNyArNDYzLDcgQEAKICAgICAgICAgICAgICAgICBfcm10cmVlX3NhZmVfZmQoZmQsIHBhdGgsIG9uZXJyb3IpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihvcy5ybWRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9zaXRlLnB5IGIvTGliL3NpdGUucHkKaW5kZXggN2UwOTcwMS4uYjBkODI2OCAxMDA2NDQKLS0tIGEvTGliL3NpdGUucHkKKysrIGIvTGliL3NpdGUucHkKQEAgLTU4LDE3ICs1OCwyMCBAQAogYmVjYXVzZSBiYXIucHRoIGNvbWVzIGFscGhhYmV0aWNhbGx5IGJlZm9yZSBmb28ucHRoOyBhbmQgc3BhbSBpcwogb21pdHRlZCBiZWNhdXNlIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gZWl0aGVyIHBhdGggY29uZmlndXJhdGlvbiBmaWxlLgogCi1BZnRlciB0aGVzZSBwYXRoIG1hbmlwdWxhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKK1RoZSByZWFkbGluZSBtb2R1bGUgaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgdG8gZW5hYmxlCitjb21wbGV0aW9uIGZvciBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBpbgorc2l0ZWN1c3RvbWl6ZSwgdXNlcmN1c3RvbWl6ZSBvciBQWVRIT05TVEFSVFVQLgorCitBZnRlciB0aGVzZSBvcGVyYXRpb25zLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gaW1wb3J0IGEgbW9kdWxlCiBuYW1lZCBzaXRlY3VzdG9taXplLCB3aGljaCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgYWRkaXRpb25hbAogc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9ucy4gIElmIHRoaXMgaW1wb3J0IGZhaWxzIHdpdGggYW4KIEltcG9ydEVycm9yIGV4Y2VwdGlvbiwgaXQgaXMgc2lsZW50bHkgaWdub3JlZC4KLQogIiIiCiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBfc2l0ZWJ1aWx0aW5zCiAKICMgUHJlZml4ZXMgZm9yIHNpdGUtcGFja2FnZXM7IGFkZCBhZGRpdGlvbmFsIHByZWZpeGVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCiBQUkVGSVhFUyA9IFtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXhdCkBAIC0xNDYsMTQgKzE0OSwxNCBAQAogICAgICAgIGFuZCBhZGQgdGhhdCB0byBrbm93bl9wYXRocywgb3IgZXhlY3V0ZSBpdCBpZiBpdCBzdGFydHMgd2l0aCAnaW1wb3J0ICcuCiAgICAgIiIiCiAgICAgaWYga25vd25fcGF0aHMgaXMgTm9uZToKLSAgICAgICAgX2luaXRfcGF0aGluZm8oKQorICAgICAgICBrbm93bl9wYXRocyA9IF9pbml0X3BhdGhpbmZvKCkKICAgICAgICAgcmVzZXQgPSAxCiAgICAgZWxzZToKICAgICAgICAgcmVzZXQgPSAwCiAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oc2l0ZWRpciwgbmFtZSkKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZ1bGxuYW1lLCAiciIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybgogICAgIHdpdGggZjoKICAgICAgICAgZm9yIG4sIGxpbmUgaW4gZW51bWVyYXRlKGYpOgpAQCAtMTk2LDcgKzE5OSw3IEBACiAgICAgICAgIGtub3duX3BhdGhzLmFkZChzaXRlZGlyY2FzZSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzaXRlZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBuYW1lcyBpZiBuYW1lLmVuZHN3aXRoKCIucHRoIildCiAgICAgZm9yIG5hbWUgaW4gc29ydGVkKG5hbWVzKToKQEAgLTMwMCw5ICszMDMsNyBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgc2Vlbi5hZGQocHJlZml4KQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCi0gICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKyAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKQEAgLTMyNSwyNyArMzI2LDE1IEBACiAgICAgIiIiQWRkIHNpdGUtcGFja2FnZXMgKGFuZCBwb3NzaWJseSBzaXRlLXB5dGhvbikgdG8gc3lzLnBhdGgiIiIKICAgICBmb3Igc2l0ZWRpciBpbiBnZXRzaXRlcGFja2FnZXMocHJlZml4ZXMpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNpdGVkaXIpOgorICAgICAgICAgICAgaWYgInNpdGUtcHl0aG9uIiBpbiBzaXRlZGlyOgorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJyJzaXRlLXB5dGhvbiIgZGlyZWN0b3JpZXMgd2lsbCBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1cHBvcnRlZCBpbiAzLjUgYW55bW9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBhZGRzaXRlZGlyKHNpdGVkaXIsIGtub3duX3BhdGhzKQogCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKLWRlZiBzZXRCRUdJTkxJQlBBVEgoKToKLSAgICAiIiJUaGUgT1MvMiBFTVggcG9ydCBoYXMgb3B0aW9uYWwgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBkbyBkb3VibGUgZHV0eQotICAgIGFzIERMTHMgKGFuZCBtdXN0IHVzZSB0aGUgLkRMTCBmaWxlIGV4dGVuc2lvbikgZm9yIG90aGVyIGV4dGVuc2lvbnMuCi0gICAgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggbmVlZHMgdG8gYmUgYW1lbmRlZCBzbyB0aGVzZSB3aWxsIGJlIGZvdW5kCi0gICAgZHVyaW5nIG1vZHVsZSBpbXBvcnQuICBVc2UgQkVHSU5MSUJQQVRIIHNvIHRoYXQgdGhlc2UgYXJlIGF0IHRoZSBzdGFydAotICAgIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLgotCi0gICAgIiIiCi0gICAgZGxscGF0aCA9IG9zLnBhdGguam9pbihzeXMucHJlZml4LCAiTGliIiwgImxpYi1keW5sb2FkIikKLSAgICBsaWJwYXRoID0gb3MuZW52aXJvblsnQkVHSU5MSUJQQVRIJ10uc3BsaXQoJzsnKQotICAgIGlmIGxpYnBhdGhbLTFdOgotICAgICAgICBsaWJwYXRoLmFwcGVuZChkbGxwYXRoKQotICAgIGVsc2U6Ci0gICAgICAgIGxpYnBhdGhbLTFdID0gZGxscGF0aAotICAgIG9zLmVudmlyb25bJ0JFR0lOTElCUEFUSCddID0gJzsnLmpvaW4obGlicGF0aCkKLQotCiBkZWYgc2V0cXVpdCgpOgogICAgICIiIkRlZmluZSBuZXcgYnVpbHRpbnMgJ3F1aXQnIGFuZCAnZXhpdCcuCiAKQEAgLTM2MCwxMjYgKzM0OSw4OSBAQAogICAgIGVsc2U6CiAgICAgICAgIGVvZiA9ICdDdHJsLUQgKGkuZS4gRU9GKScKIAotICAgIGNsYXNzIFF1aXR0ZXIob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gJ1VzZSAlcygpIG9yICVzIHRvIGV4aXQnICUgKHNlbGYubmFtZSwgZW9mKQotICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKLSAgICAgICAgICAgICMgU2hlbGxzIGxpa2UgSURMRSBjYXRjaCB0aGUgU3lzdGVtRXhpdCwgYnV0IGxpc3RlbiB3aGVuIHRoZWlyCi0gICAgICAgICAgICAjIHN0ZGluIHdyYXBwZXIgaXMgY2xvc2VkLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChjb2RlKQotICAgIGJ1aWx0aW5zLnF1aXQgPSBRdWl0dGVyKCdxdWl0JykKLSAgICBidWlsdGlucy5leGl0ID0gUXVpdHRlcignZXhpdCcpCisgICAgYnVpbHRpbnMucXVpdCA9IF9zaXRlYnVpbHRpbnMuUXVpdHRlcigncXVpdCcsIGVvZikKKyAgICBidWlsdGlucy5leGl0ID0gX3NpdGVidWlsdGlucy5RdWl0dGVyKCdleGl0JywgZW9mKQogCiAKLWNsYXNzIF9QcmludGVyKG9iamVjdCk6Ci0gICAgIiIiaW50ZXJhY3RpdmUgcHJvbXB0IG9iamVjdHMgZm9yIHByaW50aW5nIHRoZSBsaWNlbnNlIHRleHQsIGEgbGlzdCBvZgotICAgIGNvbnRyaWJ1dG9ycyBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2UuIiIiCi0KLSAgICBNQVhMSU5FUyA9IDIzCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGF0YSwgZmlsZXM9KCksIGRpcnM9KCkpOgotICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCi0gICAgICAgIHNlbGYuX19maWxlcyA9IGZpbGVzCi0gICAgICAgIHNlbGYuX19kaXJzID0gZGlycwotICAgICAgICBzZWxmLl9fbGluZXMgPSBOb25lCi0KLSAgICBkZWYgX19zZXR1cChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGRhdGEgPSBOb25lCi0gICAgICAgIGZvciBkaXIgaW4gc2VsZi5fX2RpcnM6Ci0gICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fX2ZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpciwgZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICJyIikKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fX2RhdGEKLSAgICAgICAgc2VsZi5fX2xpbmVzID0gZGF0YS5zcGxpdCgnXG4nKQotICAgICAgICBzZWxmLl9fbGluZWNudCA9IGxlbihzZWxmLl9fbGluZXMpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19zZXR1cCgpCi0gICAgICAgIGlmIGxlbihzZWxmLl9fbGluZXMpIDw9IHNlbGYuTUFYTElORVM6Ci0gICAgICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYuX19saW5lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiVHlwZSAlcygpIHRvIHNlZSB0aGUgZnVsbCAlcyB0ZXh0IiAlICgoc2VsZi5fX25hbWUsKSoyKQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9fc2V0dXAoKQotICAgICAgICBwcm9tcHQgPSAnSGl0IFJldHVybiBmb3IgbW9yZSwgb3IgcSAoYW5kIFJldHVybikgdG8gcXVpdDogJwotICAgICAgICBsaW5lbm8gPSAwCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGluZW5vLCBsaW5lbm8gKyBzZWxmLk1BWExJTkVTKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5fX2xpbmVzW2ldKQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGluZW5vICs9IHNlbGYuTUFYTElORVMKLSAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgd2hpbGUga2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGlucHV0KHByb21wdCkKLSAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiAoJycsICdxJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYga2V5ID09ICdxJzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLQogZGVmIHNldGNvcHlyaWdodCgpOgogICAgICIiIlNldCAnY29weXJpZ2h0JyBhbmQgJ2NyZWRpdHMnIGluIGJ1aWx0aW5zIiIiCi0gICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX1ByaW50ZXIoImNvcHlyaWdodCIsIHN5cy5jb3B5cmlnaHQpCisgICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigiY29weXJpZ2h0Iiwgc3lzLmNvcHlyaWdodCkKICAgICBpZiBzeXMucGxhdGZvcm1bOjRdID09ICdqYXZhJzoKLSAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9QcmludGVyKAorICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigKICAgICAgICAgICAgICJjcmVkaXRzIiwKICAgICAgICAgICAgICJKeXRob24gaXMgbWFpbnRhaW5lZCBieSB0aGUgSnl0aG9uIGRldmVsb3BlcnMgKHd3dy5qeXRob24ub3JnKS4iKQogICAgIGVsc2U6Ci0gICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfUHJpbnRlcigiY3JlZGl0cyIsICIiIlwKKyAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoImNyZWRpdHMiLCAiIiJcCiAgICAgVGhhbmtzIHRvIENXSSwgQ05SSSwgQmVPcGVuLmNvbSwgWm9wZSBDb3Jwb3JhdGlvbiBhbmQgYSBjYXN0IG9mIHRob3VzYW5kcwogICAgIGZvciBzdXBwb3J0aW5nIFB5dGhvbiBkZXZlbG9wbWVudC4gIFNlZSB3d3cucHl0aG9uLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIiIpCiAgICAgaGVyZSA9IG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykKLSAgICBidWlsdGlucy5saWNlbnNlID0gX1ByaW50ZXIoCisgICAgYnVpbHRpbnMubGljZW5zZSA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoCiAgICAgICAgICJsaWNlbnNlIiwKLSAgICAgICAgIlNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvJS41cy9saWNlbnNlLyIgJSBzeXMudmVyc2lvbiwKKyAgICAgICAgIlNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvJS41cy9saWNlbnNlIiAlIHN5cy52ZXJzaW9uLAogICAgICAgICBbIkxJQ0VOU0UudHh0IiwgIkxJQ0VOU0UiXSwKICAgICAgICAgW29zLnBhdGguam9pbihoZXJlLCBvcy5wYXJkaXIpLCBoZXJlLCBvcy5jdXJkaXJdKQogCiAKLWNsYXNzIF9IZWxwZXIob2JqZWN0KToKLSAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0aW4gJ2hlbHAnLgotICAgIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBweWRvYy5oZWxwICh3aXRoIGEgdHdpc3QpLgotCi0gICAgIiIiCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiVHlwZSBoZWxwKCkgZm9yIGludGVyYWN0aXZlIGhlbHAsICIgXAotICAgICAgICAgICAgICAgIm9yIGhlbHAob2JqZWN0KSBmb3IgaGVscCBhYm91dCBvYmplY3QuIgotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgaW1wb3J0IHB5ZG9jCi0gICAgICAgIHJldHVybiBweWRvYy5oZWxwKCphcmdzLCAqKmt3ZHMpCi0KIGRlZiBzZXRoZWxwZXIoKToKLSAgICBidWlsdGlucy5oZWxwID0gX0hlbHBlcigpCisgICAgYnVpbHRpbnMuaGVscCA9IF9zaXRlYnVpbHRpbnMuX0hlbHBlcigpCisKK2RlZiBlbmFibGVybGNvbXBsZXRlcigpOgorICAgICIiIkVuYWJsZSBkZWZhdWx0IHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gb24gaW50ZXJhY3RpdmUgcHJvbXB0cywgYnkKKyAgICByZWdpc3RlcmluZyBhIHN5cy5fX2ludGVyYWN0aXZlaG9va19fLgorCisgICAgSWYgdGhlIHJlYWRsaW5lIG1vZHVsZSBjYW4gYmUgaW1wb3J0ZWQsIHRoZSBob29rIHdpbGwgc2V0IHRoZSBUYWIga2V5CisgICAgYXMgY29tcGxldGlvbiBrZXkgYW5kIHJlZ2lzdGVyIH4vLnB5dGhvbl9oaXN0b3J5IGFzIGhpc3RvcnkgZmlsZS4KKyAgICBUaGlzIGNhbiBiZSBvdmVycmlkZW4gaW4gdGhlIHNpdGVjdXN0b21pemUgb3IgdXNlcmN1c3RvbWl6ZSBtb2R1bGUsCisgICAgb3IgaW4gYSBQWVRIT05TVEFSVFVQIGZpbGUuCisgICAgIiIiCisgICAgZGVmIHJlZ2lzdGVyX3JlYWRsaW5lKCk6CisgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHJlYWRsaW5lCisgICAgICAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBSZWFkaW5nIHRoZSBpbml0aWFsaXphdGlvbiAoY29uZmlnKSBmaWxlIG1heSBub3QgYmUgZW5vdWdoIHRvIHNldCBhCisgICAgICAgICMgY29tcGxldGlvbiBrZXksIHNvIHdlIHNldCBvbmUgZmlyc3QgYW5kIHRoZW4gcmVhZCB0aGUgZmlsZS4KKyAgICAgICAgcmVhZGxpbmVfZG9jID0gZ2V0YXR0cihyZWFkbGluZSwgJ19fZG9jX18nLCAnJykKKyAgICAgICAgaWYgcmVhZGxpbmVfZG9jIGlzIG5vdCBOb25lIGFuZCAnbGliZWRpdCcgaW4gcmVhZGxpbmVfZG9jOgorICAgICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ2JpbmQgXkkgcmxfY29tcGxldGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29tcGxldGUnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaW5pdF9maWxlKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjIEFuIE9TRXJyb3IgaGVyZSBjb3VsZCBoYXZlIG1hbnkgY2F1c2VzLCBidXQgdGhlIG1vc3QgbGlrZWx5IG9uZQorICAgICAgICAgICAgIyBpcyB0aGF0IHRoZXJlJ3Mgbm8gLmlucHV0cmMgZmlsZSAob3IgLmVkaXRyYyBmaWxlIGluIHRoZSBjYXNlIG9mCisgICAgICAgICAgICAjIE1hYyBPUyBYICsgbGliZWRpdCkgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAgSW4gdGhhdCBjYXNlLCB3ZQorICAgICAgICAgICAgIyB3YW50IHRvIGlnbm9yZSB0aGUgZXhjZXB0aW9uLgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSkgaXMgTm9uZToKKyAgICAgICAgICAgICMgSWYgbm8gaGlzdG9yeSB3YXMgbG9hZGVkLCBkZWZhdWx0IHRvIC5weXRob25faGlzdG9yeS4KKyAgICAgICAgICAgICMgVGhlIGd1YXJkIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBkb3VibGluZyBoaXN0b3J5IHNpemUgYXQKKyAgICAgICAgICAgICMgZWFjaCBpbnRlcnByZXRlciBleGl0IHdoZW4gcmVhZGxpbmUgd2FzIGFscmVhZHkgY29uZmlndXJlZAorICAgICAgICAgICAgIyB0aHJvdWdoIGEgUFlUSE9OU1RBUlRVUCBob29rLCBzZWU6CisgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1ODQ1I21zZzE5ODYzNgorICAgICAgICAgICAgaGlzdG9yeSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5weXRob25faGlzdG9yeScpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdG9yeSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUsIGhpc3RvcnkpCisKKyAgICBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXyA9IHJlZ2lzdGVyX3JlYWRsaW5lCiAKIGRlZiBhbGlhc21iY3MoKToKICAgICAiIiJPbiBXaW5kb3dzLCBzb21lIGRlZmF1bHQgZW5jb2RpbmdzIGFyZSBub3QgcHJvdmlkZWQgYnkgUHl0aG9uLAogICAgIHdoaWxlIHRoZXkgYXJlIGFsd2F5cyBhdmFpbGFibGUgYXMgIm1iY3MiIGluIGVhY2ggbG9jYWxlLiBNYWtlCiAgICAgdGhlbSB1c2FibGUgYnkgYWxpYXNpbmcgdG8gIm1iY3MiIGluIHN1Y2ggYSBjYXNlLiIiIgogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICBpbXBvcnQgbG9jYWxlLCBjb2RlY3MKLSAgICAgICAgZW5jID0gbG9jYWxlLmdldGRlZmF1bHRsb2NhbGUoKVsxXQorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUsIGNvZGVjcworICAgICAgICBlbmMgPSBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgaWYgZW5jLnN0YXJ0c3dpdGgoJ2NwJyk6ICAgICAgICAgICAgIyAiY3AqKioiID8KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjb2RlY3MubG9va3VwKGVuYykKQEAgLTQ4OCw4ICs0NDAsNyBAQAogICAgICAgICAgICAgICAgIGVuY29kaW5ncy5fY2FjaGVbZW5jXSA9IGVuY29kaW5ncy5fdW5rbm93bgogICAgICAgICAgICAgICAgIGVuY29kaW5ncy5hbGlhc2VzLmFsaWFzZXNbZW5jXSA9ICdtYmNzJwogCi0KLUNPTkZJR19MSU5FID0gcmUuY29tcGlsZShyJ14oP1A8a2V5Pihcd3xbLV9dKSspXHMqPVxzKig/UDx2YWx1ZT4uKilccyokJykKK0NPTkZJR19MSU5FID0gcideKD9QPGtleT4oXHd8Wy1fXSkrKVxzKj1ccyooP1A8dmFsdWU+LiopXHMqJCcKIAogZGVmIHZlbnYoa25vd25fcGF0aHMpOgogICAgIGdsb2JhbCBQUkVGSVhFUywgRU5BQkxFX1VTRVJfU0lURQpAQCAtNTEyLDEyICs0NjMsMTQgQEAKICAgICAgICAgXQogCiAgICAgaWYgY2FuZGlkYXRlX2NvbmZzOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgY29uZmlnX2xpbmUgPSByZS5jb21waWxlKENPTkZJR19MSU5FKQogICAgICAgICB2aXJ0dWFsX2NvbmYgPSBjYW5kaWRhdGVfY29uZnNbMF0KICAgICAgICAgc3lzdGVtX3NpdGUgPSAidHJ1ZSIKICAgICAgICAgd2l0aCBvcGVuKHZpcnR1YWxfY29uZikgYXMgZjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIG0gPSBDT05GSUdfTElORS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIG0gPSBjb25maWdfbGluZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgICAgIGQgPSBtLmdyb3VwZGljdCgpCiAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBkWydrZXknXS5sb3dlcigpLCBkWyd2YWx1ZSddCkBAIC01ODksMTEgKzU0MiwxMCBAQAogICAgICAgICBFTkFCTEVfVVNFUl9TSVRFID0gY2hlY2tfZW5hYmxldXNlcnNpdGUoKQogICAgIGtub3duX3BhdGhzID0gYWRkdXNlcnNpdGVwYWNrYWdlcyhrbm93bl9wYXRocykKICAgICBrbm93bl9wYXRocyA9IGFkZHNpdGVwYWNrYWdlcyhrbm93bl9wYXRocykKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ29zMmVteCc6Ci0gICAgICAgIHNldEJFR0lOTElCUEFUSCgpCiAgICAgc2V0cXVpdCgpCiAgICAgc2V0Y29weXJpZ2h0KCkKICAgICBzZXRoZWxwZXIoKQorICAgIGVuYWJsZXJsY29tcGxldGVyKCkKICAgICBhbGlhc21iY3MoKQogICAgIGV4ZWNzaXRlY3VzdG9taXplKCkKICAgICBpZiBFTkFCTEVfVVNFUl9TSVRFOgpkaWZmIC0tZ2l0IGEvTGliL3NtdHBkLnB5IGIvTGliL3NtdHBkLnB5CmluZGV4IDc3OGQ2ZDYuLjFmYTE1N2EgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwZC5weQorKysgYi9MaWIvc210cGQucHkKQEAgLTEyMSw4ICsxMjEsOSBAQAogICAgICAgICB9KQogICAgIG1heF9jb21tYW5kX3NpemVfbGltaXQgPSBtYXgoY29tbWFuZF9zaXplX2xpbWl0cy52YWx1ZXMoKSkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCk6Ci0gICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgIG1hcD1Ob25lKToKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBtYXA9bWFwKQogICAgICAgICBzZWxmLnNtdHBfc2VydmVyID0gc2VydmVyCiAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgpAQCAtMTM3LDcgKzEzOCw3IEBACiAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwogICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQpAQCAtNTc2LDExICs1NzcsMTEgQEAKICAgICBjaGFubmVsX2NsYXNzID0gU01UUENoYW5uZWwKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIsCi0gICAgICAgICAgICAgICAgIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCk6CisgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCwgbWFwPU5vbmUpOgogICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBsb2NhbGFkZHIKICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IHJlbW90ZWFkZHIKICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBkYXRhX3NpemVfbGltaXQKLSAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIG1hcD1tYXApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgIyB0cnkgdG8gcmUtdXNlIGEgc2VydmVyIHBvcnQgaWYgcG9zc2libGUKQEAgLTU5Nyw3ICs1OTgsOCBAQAogCiAgICAgZGVmIGhhbmRsZV9hY2NlcHRlZChzZWxmLCBjb25uLCBhZGRyKToKICAgICAgICAgcHJpbnQoJ0luY29taW5nIGNvbm5lY3Rpb24gZnJvbSAlcycgJSByZXByKGFkZHIpLCBmaWxlPURFQlVHU1RSRUFNKQotICAgICAgICBjaGFubmVsID0gc2VsZi5jaGFubmVsX2NsYXNzKHNlbGYsIGNvbm4sIGFkZHIsIHNlbGYuZGF0YV9zaXplX2xpbWl0KQorICAgICAgICBjaGFubmVsID0gc2VsZi5jaGFubmVsX2NsYXNzKHNlbGYsIGNvbm4sIGFkZHIsIHNlbGYuZGF0YV9zaXplX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21hcCkKIAogICAgICMgQVBJIGZvciAiZG9pbmcgc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBtZXNzYWdlIgogICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgpAQCAtNjY4LDcgKzY3MCw3IEBACiAgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZCBhcyBlOgogICAgICAgICAgICAgcHJpbnQoJ2dvdCBTTVRQUmVjaXBpZW50c1JlZnVzZWQnLCBmaWxlPURFQlVHU1RSRUFNKQogICAgICAgICAgICAgcmVmdXNlZCA9IGUucmVjaXBpZW50cwotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc210cGxpYi5TTVRQRXhjZXB0aW9uKSBhcyBlOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKICAgICAgICAgICAgIHByaW50KCdnb3QnLCBlLl9fY2xhc3NfXywgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgICAgICMgQWxsIHJlY2lwaWVudHMgd2VyZSByZWZ1c2VkLiAgSWYgdGhlIGV4Y2VwdGlvbiBoYWQgYW4gYXNzb2NpYXRlZAogICAgICAgICAgICAgIyBlcnJvciBjb2RlLCB1c2UgaXQuICBPdGhlcndpc2UsZmFrZSBpdCB3aXRoIGEgbm9uLXRyaWdnZXJpbmcKQEAgLTc3OCw3ICs3ODAsNyBAQAogICAgICAgICBpZiBvcHQgaW4gKCctaCcsICctLWhlbHAnKToKICAgICAgICAgICAgIHVzYWdlKDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLVYnLCAnLS12ZXJzaW9uJyk6Ci0gICAgICAgICAgICBwcmludChfX3ZlcnNpb25fXywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgcHJpbnQoX192ZXJzaW9uX18pCiAgICAgICAgICAgICBzeXMuZXhpdCgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1uJywgJy0tbm9zZXR1aWQnKToKICAgICAgICAgICAgIG9wdGlvbnMuc2V0dWlkID0gMApAQCAtODUwLDggKzg1Miw3IEBACiAgICAgICAgIG5vYm9keSA9IHB3ZC5nZXRwd25hbSgnbm9ib2R5JylbMl0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBFUk06IHJhaXNlCisgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CiAgICAgICAgICAgICBwcmludCgnQ2Fubm90IHNldHVpZCAibm9ib2R5IjsgdHJ5IHJ1bm5pbmcgd2l0aCAtbiBvcHRpb24uJywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvc210cGxpYi5weSBiL0xpYi9zbXRwbGliLnB5CmluZGV4IDA3MmI5NzMuLjZmYzY1ZjYgMTAwNjQ0Ci0tLSBhL0xpYi9zbXRwbGliLnB5CisrKyBiL0xpYi9zbXRwbGliLnB5CkBAIC02Niw3ICs2Niw3IEBACiBPTERTVFlMRV9BVVRIID0gcmUuY29tcGlsZShyImF1dGg9KC4qKSIsIHJlLkkpCiAKICMgRXhjZXB0aW9uIGNsYXNzZXMgdXNlZCBieSB0aGlzIG1vZHVsZS4KLWNsYXNzIFNNVFBFeGNlcHRpb24oRXhjZXB0aW9uKToKK2NsYXNzIFNNVFBFeGNlcHRpb24oT1NFcnJvcik6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoaXMgbW9kdWxlLiIiIgogCiBjbGFzcyBTTVRQU2VydmVyRGlzY29ubmVjdGVkKFNNVFBFeGNlcHRpb24pOgpAQCAtMzExLDcgKzMxMSw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigibm9ubnVtZXJpYyBwb3J0IikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigibm9ubnVtZXJpYyBwb3J0IikKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICBwb3J0ID0gc2VsZi5kZWZhdWx0X3BvcnQKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKQEAgLTMzMiw3ICszMzIsNyBAQAogICAgICAgICAgICAgICAgIHMgPSBzLmVuY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgnU2VydmVyIG5vdCBjb25uZWN0ZWQnKQogICAgICAgICBlbHNlOgpAQCAtMzY1LDcgKzM2NSw3IEBACiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuZmlsZS5yZWFkbGluZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoIkNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IGNsb3NlZDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIoZSkpCkBAIC01NzksNyArNTc5LDcgQEAKICAgICAgICAgZGVmIGVuY29kZV9jcmFtX21kNShjaGFsbGVuZ2UsIHVzZXIsIHBhc3N3b3JkKToKICAgICAgICAgICAgIGNoYWxsZW5nZSA9IGJhc2U2NC5kZWNvZGVieXRlcyhjaGFsbGVuZ2UpCiAgICAgICAgICAgICByZXNwb25zZSA9IHVzZXIgKyAiICIgKyBobWFjLkhNQUMocGFzc3dvcmQuZW5jb2RlKCdhc2NpaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2UsICdtZDUnKS5oZXhkaWdlc3QoKQogICAgICAgICAgICAgcmV0dXJuIGVuY29kZV9iYXNlNjQocmVzcG9uc2UuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpCiAKICAgICAgICAgZGVmIGVuY29kZV9wbGFpbih1c2VyLCBwYXNzd29yZCk6CkBAIC02NjQsMTAgKzY2NCwxMCBAQAogICAgICAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZSBhbmQgY2VydGZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY29udGV4dCBhbmQgY2VydGZpbGUgYXJndW1lbnRzIGFyZSBtdXR1YWxseSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKLSAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIGtleWZpbGUsIGNlcnRmaWxlKQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQorICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICAjIFJGQyAzMjA3OgogICAgICAgICAgICAgIyBUaGUgY2xpZW50IE1VU1QgZGlzY2FyZCBhbnkga25vd2xlZGdlIG9idGFpbmVkIGZyb20KQEAgLTg4MCw2ICs4ODAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFNNVFAuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgbG9jYWxfaG9zdG5hbWUsIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQpAQCAtODg5LDEwICs4OTIsNyBAQAogICAgICAgICAgICAgICAgIHByaW50KCdjb25uZWN0OicsIChob3N0LCBwb3J0KSwgZmlsZT1zdGRlcnIpCiAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcykKLSAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KG5ld19zb2NrZXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQobmV3X3NvY2tldCwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChuZXdfc29ja2V0KQogICAgICAgICAgICAgcmV0dXJuIG5ld19zb2NrZXQKIAogICAgIF9fYWxsX18uYXBwZW5kKCJTTVRQX1NTTCIpCkBAIC05MzQsNyArOTM0LDcgQEAKICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKICAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KGhvc3QpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKICAgICAgICAgICAgICAgICBwcmludCgnY29ubmVjdCBmYWlsOicsIGhvc3QsIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgaWYgc2VsZi5zb2NrOgpkaWZmIC0tZ2l0IGEvTGliL3NuZGhkci5weSBiL0xpYi9zbmRoZHIucHkKaW5kZXggOWY1ZGNjOS4uMjQwZTUwNyAxMDA2NDQKLS0tIGEvTGliL3NuZGhkci5weQorKysgYi9MaWIvc25kaGRyLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAtIG51bWJlciBvZiBiaXRzL3NhbXBsZSwgb3IgJ1UnIGZvciBVLUxBVywgb3IgJ0EnIGZvciBBLUxBVwogCiBJZiB0aGUgZmlsZSBkb2Vzbid0IGhhdmUgYSByZWNvZ25pemFibGUgdHlwZSwgaXQgcmV0dXJucyBOb25lLgotSWYgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkLCBJT0Vycm9yIGlzIHJhaXNlZC4KK0lmIHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgT1NFcnJvciBpcyByYWlzZWQuCiAKIFRvIGNvbXB1dGUgdGhlIHRvdGFsIHRpbWUsIGRpdmlkZSB0aGUgbnVtYmVyIG9mIGZyYW1lcyBieSB0aGUKIHNhbXBsaW5nIHJhdGUgKGEgZnJhbWUgY29udGFpbnMgYSBzYW1wbGUgZm9yIGVhY2ggY2hhbm5lbCkuCkBAIC0xMzcsMTQgKzEzNywxNyBAQAogCiAKIGRlZiB0ZXN0X3dhdihoLCBmKToKKyAgICBpbXBvcnQgd2F2ZQogICAgICMgJ1JJRkYnIDxsZW4+ICdXQVZFJyAnZm10ICcgPGxlbj4KICAgICBpZiBub3QgaC5zdGFydHN3aXRoKGInUklGRicpIG9yIGhbODoxMl0gIT0gYidXQVZFJyBvciBoWzEyOjE2XSAhPSBiJ2ZtdCAnOgogICAgICAgICByZXR1cm4gTm9uZQotICAgIHN0eWxlID0gZ2V0X3Nob3J0X2xlKGhbMjA6MjJdKQotICAgIG5jaGFubmVscyA9IGdldF9zaG9ydF9sZShoWzIyOjI0XSkKLSAgICByYXRlID0gZ2V0X2xvbmdfbGUoaFsyNDoyOF0pCi0gICAgc2FtcGxlX2JpdHMgPSBnZXRfc2hvcnRfbGUoaFszNDozNl0pCi0gICAgcmV0dXJuICd3YXYnLCByYXRlLCBuY2hhbm5lbHMsIC0xLCBzYW1wbGVfYml0cworICAgIGYuc2VlaygwKQorICAgIHRyeToKKyAgICAgICAgdyA9IHdhdmUub3BlbmZwKGYsICdyJykKKyAgICBleGNlcHQgKEVPRkVycm9yLCB3YXZlLkVycm9yKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gKCd3YXYnLCB3LmdldGZyYW1lcmF0ZSgpLCB3LmdldG5jaGFubmVscygpLAorICAgICAgICAgICAgICAgICAgIHcuZ2V0bmZyYW1lcygpLCA4KncuZ2V0c2FtcHdpZHRoKCkpCiAKIHRlc3RzLmFwcGVuZCh0ZXN0X3dhdikKIApAQCAtMjMwLDcgKzIzMyw3IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwcmludCh3aGF0KGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBub3QgZm91bmQgKioqJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9zb2NrZXQucHkgYi9MaWIvc29ja2V0LnB5CmluZGV4IGQ0ZjFiNjUuLjZkNjdiM2QgMTAwNjQ0Ci0tLSBhL0xpYi9zb2NrZXQucHkKKysrIGIvTGliL3NvY2tldC5weQpAQCAtNDgsNiArNDgsNyBAQAogZnJvbSBfc29ja2V0IGltcG9ydCAqCiAKIGltcG9ydCBvcywgc3lzLCBpbworZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCiAKIHRyeToKICAgICBpbXBvcnQgZXJybm8KQEAgLTYwLDYgKzYxLDMwIEBACiBfX2FsbF9fID0gWyJnZXRmcWRuIiwgImNyZWF0ZV9jb25uZWN0aW9uIl0KIF9fYWxsX18uZXh0ZW5kKG9zLl9nZXRfZXhwb3J0c19saXN0KF9zb2NrZXQpKQogCisjIFNldCB1cCB0aGUgc29ja2V0LkFGXyogc29ja2V0LlNPQ0tfKiBjb25zdGFudHMgYXMgbWVtYmVycyBvZiBJbnRFbnVtcyBmb3IKKyMgbmljZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KKyMgTm90ZSB0aGF0IF9zb2NrZXQgb25seSBrbm93cyBhYm91dCB0aGUgaW50ZWdlciB2YWx1ZXMuIFRoZSBwdWJsaWMgaW50ZXJmYWNlCisjIGluIHRoaXMgbW9kdWxlIHVuZGVyc3RhbmRzIHRoZSBlbnVtcyBhbmQgdHJhbnNsYXRlcyB0aGVtIGJhY2sgZnJvbSBpbnRlZ2VycworIyB3aGVyZSBuZWVkZWQgKGUuZy4gLmZhbWlseSBwcm9wZXJ0eSBvZiBhIHNvY2tldCBvYmplY3QpLgorQWRkcmVzc0ZhbWlseSA9IEludEVudW0oJ0FkZHJlc3NGYW1pbHknLAorICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6IHZhbHVlIGZvciBuYW1lLCB2YWx1ZSBpbiBnbG9iYWxzKCkuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUuaXN1cHBlcigpIGFuZCBuYW1lLnN0YXJ0c3dpdGgoJ0FGXycpfSkKK2dsb2JhbHMoKS51cGRhdGUoQWRkcmVzc0ZhbWlseS5fX21lbWJlcnNfXykKKworU29ja2V0VHlwZSA9IEludEVudW0oJ1NvY2tldFR5cGUnLAorICAgICAgICAgICAgICAgICAgICAge25hbWU6IHZhbHVlIGZvciBuYW1lLCB2YWx1ZSBpbiBnbG9iYWxzKCkuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUuaXN1cHBlcigpIGFuZCBuYW1lLnN0YXJ0c3dpdGgoJ1NPQ0tfJyl9KQorZ2xvYmFscygpLnVwZGF0ZShTb2NrZXRUeXBlLl9fbWVtYmVyc19fKQorCitkZWYgX2ludGVudW1fY29udmVydGVyKHZhbHVlLCBlbnVtX2tsYXNzKToKKyAgICAiIiJDb252ZXJ0IGEgbnVtZXJpYyBmYW1pbHkgdmFsdWUgdG8gYW4gSW50RW51bSBtZW1iZXIuCisKKyAgICBJZiBpdCdzIG5vdCBhIGtub3duIG1lbWJlciwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGl0c2VsZi4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBlbnVtX2tsYXNzKHZhbHVlKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByZXR1cm4gdmFsdWUKIAogX3JlYWxzb2NrZXQgPSBzb2NrZXQKIApAQCAtOTEsNiArMTE2LDEwIEBACiAgICAgX19zbG90c19fID0gWyJfX3dlYWtyZWZfXyIsICJfaW9fcmVmcyIsICJfY2xvc2VkIl0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmYW1pbHk9QUZfSU5FVCwgdHlwZT1TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmlsZW5vPU5vbmUpOgorICAgICAgICAjIEZvciB1c2VyIGNvZGUgYWRkcmVzcyBmYW1pbHkgYW5kIHR5cGUgdmFsdWVzIGFyZSBJbnRFbnVtIG1lbWJlcnMsIGJ1dAorICAgICAgICAjIGZvciB0aGUgdW5kZXJseWluZyBfc29ja2V0LnNvY2tldCB0aGV5J3JlIGp1c3QgaW50ZWdlcnMuIFRoZQorICAgICAgICAjIGNvbnN0cnVjdG9yIG9mIF9zb2NrZXQuc29ja2V0IGNvbnZlcnRzIHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbgorICAgICAgICAjIGludGVnZXIgYXV0b21hdGljYWxseS4KICAgICAgICAgX3NvY2tldC5zb2NrZXQuX19pbml0X18oc2VsZiwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmlsZW5vKQogICAgICAgICBzZWxmLl9pb19yZWZzID0gMAogICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQpAQCAtMTAzLDEzICsxMzIsMzIgQEAKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAiIiJXcmFwIF9fcmVwcl9fKCkgdG8gcmV2ZWFsIHRoZSByZWFsIGNsYXNzIG5hbWUuIiIiCi0gICAgICAgIHMgPSBfc29ja2V0LnNvY2tldC5fX3JlcHJfXyhzZWxmKQotICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoIjxzb2NrZXQgb2JqZWN0Iik6Ci0gICAgICAgICAgICBzID0gIjwlcy4lcyVzJXMiICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpIGFuZCAiIFtjbG9zZWRdICIgb3IgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbNzpdKQorICAgICAgICAiIiJXcmFwIF9fcmVwcl9fKCkgdG8gcmV2ZWFsIHRoZSByZWFsIGNsYXNzIG5hbWUgYW5kIHNvY2tldAorICAgICAgICBhZGRyZXNzKGVzKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNsb3NlZCA9IGdldGF0dHIoc2VsZiwgJ19jbG9zZWQnLCBGYWxzZSkKKyAgICAgICAgcyA9ICI8JXMuJXMlcyBmZD0laSwgZmFtaWx5PSVzLCB0eXBlPSVzLCBwcm90bz0laSIgXAorICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgIiBbY2xvc2VkXSIgaWYgY2xvc2VkIGVsc2UgIiIsCisgICAgICAgICAgICAgICBzZWxmLmZpbGVubygpLAorICAgICAgICAgICAgICAgc2VsZi5mYW1pbHksCisgICAgICAgICAgICAgICBzZWxmLnR5cGUsCisgICAgICAgICAgICAgICBzZWxmLnByb3RvKQorICAgICAgICBpZiBub3QgY2xvc2VkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxhZGRyID0gc2VsZi5nZXRzb2NrbmFtZSgpCisgICAgICAgICAgICAgICAgaWYgbGFkZHI6CisgICAgICAgICAgICAgICAgICAgIHMgKz0gIiwgbGFkZHI9JXMiICUgc3RyKGxhZGRyKQorICAgICAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWRkciA9IHNlbGYuZ2V0cGVlcm5hbWUoKQorICAgICAgICAgICAgICAgIGlmIHJhZGRyOgorICAgICAgICAgICAgICAgICAgICBzICs9ICIsIHJhZGRyPSVzIiAlIHN0cihyYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHMgKz0gJz4nCiAgICAgICAgIHJldHVybiBzCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgpAQCAtMTE4LDcgKzE2Niw4IEBACiAgICAgZGVmIGR1cChzZWxmKToKICAgICAgICAgIiIiZHVwKCkgLT4gc29ja2V0IG9iamVjdAogCi0gICAgICAgIFJldHVybiBhIG5ldyBzb2NrZXQgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc2FtZSBzeXN0ZW0gcmVzb3VyY2UuCisgICAgICAgIER1cGxpY2F0ZSB0aGUgc29ja2V0LiBSZXR1cm4gYSBuZXcgc29ja2V0IG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNhbWUKKyAgICAgICAgc3lzdGVtIHJlc291cmNlLiBUaGUgbmV3IHNvY2tldCBpcyBub24taW5oZXJpdGFibGUuCiAgICAgICAgICIiIgogICAgICAgICBmZCA9IGR1cChzZWxmLmZpbGVubygpKQogICAgICAgICBzb2NrID0gc2VsZi5fX2NsYXNzX18oc2VsZi5mYW1pbHksIHNlbGYudHlwZSwgc2VsZi5wcm90bywgZmlsZW5vPWZkKQpAQCAtMjEwLDYgKzI1OSwzMSBAQAogICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCiAgICAgICAgIHJldHVybiBzdXBlcigpLmRldGFjaCgpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZmFtaWx5KHNlbGYpOgorICAgICAgICAiIiJSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBhZGRyZXNzIGZhbWlseSBmb3IgdGhpcyBzb2NrZXQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2ludGVudW1fY29udmVydGVyKHN1cGVyKCkuZmFtaWx5LCBBZGRyZXNzRmFtaWx5KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgICIiIlJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIHNvY2tldCB0eXBlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9pbnRlbnVtX2NvbnZlcnRlcihzdXBlcigpLnR5cGUsIFNvY2tldFR5cGUpCisKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgIGRlZiBnZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gb3MuZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShzZWxmLmZpbGVubygpKQorICAgICAgICBkZWYgc2V0X2luaGVyaXRhYmxlKHNlbGYsIGluaGVyaXRhYmxlKToKKyAgICAgICAgICAgIG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSwgaW5oZXJpdGFibGUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGdldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSkKKyAgICAgICAgZGVmIHNldF9pbmhlcml0YWJsZShzZWxmLCBpbmhlcml0YWJsZSk6CisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSwgaW5oZXJpdGFibGUpCisgICAgZ2V0X2luaGVyaXRhYmxlLl9fZG9jX18gPSAiR2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzb2NrZXQiCisgICAgc2V0X2luaGVyaXRhYmxlLl9fZG9jX18gPSAiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzb2NrZXQiCisKIGRlZiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG89MCk6CiAgICAgIiIiIGZyb21mZChmZCwgZmFtaWx5LCB0eXBlWywgcHJvdG9dKSAtPiBzb2NrZXQgb2JqZWN0CiAKQEAgLTI5MSw3ICszNjUsNyBAQAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrUmVhZGFibGUoKQogICAgICAgICBpZiBzZWxmLl90aW1lb3V0X29jY3VycmVkOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2Fubm90IHJlYWQgZnJvbSB0aW1lZCBvdXQgb2JqZWN0IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIpCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2sucmVjdl9pbnRvKGIpCkBAIC00MzUsMyArNTA5LDI3IEBACiAgICAgICAgIHJhaXNlIGVycgogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIGVycm9yKCJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiKQorCitkZWYgZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgIiIiUmVzb2x2ZSBob3N0IGFuZCBwb3J0IGludG8gbGlzdCBvZiBhZGRyZXNzIGluZm8gZW50cmllcy4KKworICAgIFRyYW5zbGF0ZSB0aGUgaG9zdC9wb3J0IGFyZ3VtZW50IGludG8gYSBzZXF1ZW5jZSBvZiA1LXR1cGxlcyB0aGF0IGNvbnRhaW4KKyAgICBhbGwgdGhlIG5lY2Vzc2FyeSBhcmd1bWVudHMgZm9yIGNyZWF0aW5nIGEgc29ja2V0IGNvbm5lY3RlZCB0byB0aGF0IHNlcnZpY2UuCisgICAgaG9zdCBpcyBhIGRvbWFpbiBuYW1lLCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBJUHY0L3Y2IGFkZHJlc3Mgb3IKKyAgICBOb25lLiBwb3J0IGlzIGEgc3RyaW5nIHNlcnZpY2UgbmFtZSBzdWNoIGFzICdodHRwJywgYSBudW1lcmljIHBvcnQgbnVtYmVyIG9yCisgICAgTm9uZS4gQnkgcGFzc2luZyBOb25lIGFzIHRoZSB2YWx1ZSBvZiBob3N0IGFuZCBwb3J0LCB5b3UgY2FuIHBhc3MgTlVMTCB0bworICAgIHRoZSB1bmRlcmx5aW5nIEMgQVBJLgorCisgICAgVGhlIGZhbWlseSwgdHlwZSBhbmQgcHJvdG8gYXJndW1lbnRzIGNhbiBiZSBvcHRpb25hbGx5IHNwZWNpZmllZCBpbiBvcmRlciB0bworICAgIG5hcnJvdyB0aGUgbGlzdCBvZiBhZGRyZXNzZXMgcmV0dXJuZWQuIFBhc3NpbmcgemVybyBhcyBhIHZhbHVlIGZvciBlYWNoIG9mCisgICAgdGhlc2UgYXJndW1lbnRzIHNlbGVjdHMgdGhlIGZ1bGwgcmFuZ2Ugb2YgcmVzdWx0cy4KKyAgICAiIiIKKyAgICAjIFdlIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gc2luY2Ugd2Ugd2FudCB0byB0cmFuc2xhdGUgdGhlIG51bWVyaWMgZmFtaWx5CisgICAgIyBhbmQgc29ja2V0IHR5cGUgdmFsdWVzIHRvIGVudW0gY29uc3RhbnRzLgorICAgIGFkZHJsaXN0ID0gW10KKyAgICBmb3IgcmVzIGluIF9zb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpOgorICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCisgICAgICAgIGFkZHJsaXN0LmFwcGVuZCgoX2ludGVudW1fY29udmVydGVyKGFmLCBBZGRyZXNzRmFtaWx5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfaW50ZW51bV9jb252ZXJ0ZXIoc29ja3R5cGUsIFNvY2tldFR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLCBjYW5vbm5hbWUsIHNhKSkKKyAgICByZXR1cm4gYWRkcmxpc3QKZGlmZiAtLWdpdCBhL0xpYi9zb2NrZXRzZXJ2ZXIucHkgYi9MaWIvc29ja2V0c2VydmVyLnB5CmluZGV4IDgzMzJmZGYuLmU5ZTRlNGUgMTAwNjQ0Ci0tLSBhL0xpYi9zb2NrZXRzZXJ2ZXIucHkKKysrIGIvTGliL3NvY2tldHNlcnZlci5weQpAQCAtMjk5LDcgKzI5OSw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyA9IHNlbGYuZ2V0X3JlcXVlc3QoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnZlcmlmeV9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKICAgICAgICAgICAgIHRyeToKQEAgLTQ3OSw3ICs0NzksNyBAQAogICAgICAgICAgICAgI2V4cGxpY2l0bHkgc2h1dGRvd24uICBzb2NrZXQuY2xvc2UoKSBtZXJlbHkgcmVsZWFzZXMKICAgICAgICAgICAgICN0aGUgc29ja2V0IGFuZCB3YWl0cyBmb3IgR0MgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGNsb3NlLgogICAgICAgICAgICAgcmVxdWVzdC5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzICNzb21lIHBsYXRmb3JtcyBtYXkgcmFpc2UgRU5PVENPTk4gaGVyZQogICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKIApAQCAtNTMyLDcgKzUzMiw3IEBACiAgICAgICAgICAgICAjIGNoaWxkcmVuLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZCgwLCAwKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGlkID0gTm9uZQogICAgICAgICAgICAgaWYgcGlkIG5vdCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbjogY29udGludWUKICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLnJlbW92ZShwaWQpCkBAIC01NDUsNyArNTQ1LDcgQEAKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChjaGlsZCwgb3MuV05PSEFORykKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBpZCA9IE5vbmUKICAgICAgICAgICAgIGlmIG5vdCBwaWQ6IGNvbnRpbnVlCiAgICAgICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQppbmRleCBiN2VjMWFkLi4wNDY0OWZjIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKQEAgLTI4LDYgKzI4LDkgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHVubGluaworCisKIGNsYXNzIE1vZHVsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgQ2hlY2tBUElMZXZlbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcWxpdGUuYXBpbGV2ZWwsICIyLjAiLApAQCAtMTYzLDYgKzE2NiwyMSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHNlbGYuY3guaW5fdHJhbnNhY3Rpb24gPSBUcnVlCiAKKyAgICBkZWYgQ2hlY2tPcGVuVXJpKHNlbGYpOgorICAgICAgICBpZiBzcWxpdGUuc3FsaXRlX3ZlcnNpb25faW5mbyA8ICgzLCA3LCA3KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk5vdFN1cHBvcnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzcWxpdGUuY29ubmVjdCgnOm1lbW9yeTonLCB1cmk9VHJ1ZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoVEVTVEZOKSBhcyBjeDoKKyAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2NyZWF0ZSB0YWJsZSB0ZXN0KGlkIGludGVnZXIpJykKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdCgnZmlsZTonICsgVEVTVEZOLCB1cmk9VHJ1ZSkgYXMgY3g6CisgICAgICAgICAgICBjeC5leGVjdXRlKCdpbnNlcnQgaW50byB0ZXN0KGlkKSB2YWx1ZXMoMCknKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KCdmaWxlOicgKyBURVNURk4gKyAnP21vZGU9cm8nLCB1cmk9VHJ1ZSkgYXMgY3g6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKToKKyAgICAgICAgICAgICAgICBjeC5leGVjdXRlKCdpbnNlcnQgaW50byB0ZXN0KGlkKSB2YWx1ZXMoMSknKQorCisKIGNsYXNzIEN1cnNvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuY3ggPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb21waWxlLnB5IGIvTGliL3NyZV9jb21waWxlLnB5CmluZGV4IGI5ODRhNTQuLjNhNTA4M2YgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfY29tcGlsZS5weQorKysgYi9MaWIvc3JlX2NvbXBpbGUucHkKQEAgLTEzLDYgKzEzLDcgQEAKIGltcG9ydCBfc3JlLCBzeXMKIGltcG9ydCBzcmVfcGFyc2UKIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgorZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKIAogYXNzZXJ0IF9zcmUuTUFHSUMgPT0gTUFHSUMsICJTUkUgbW9kdWxlIG1pc21hdGNoIgogCkBAIC02NCwxMyArNjUsNiBAQAogICAgICAgICBlbGlmIG9wIGluIFJFUEVBVElOR19DT0RFUzoKICAgICAgICAgICAgIGlmIGZsYWdzICYgU1JFX0ZMQUdfVEVNUExBVEU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoImludGVybmFsOiB1bnN1cHBvcnRlZCB0ZW1wbGF0ZSBvcGVyYXRvciIpCi0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW1JFUEVBVF0pCi0gICAgICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKLSAgICAgICAgICAgICAgICBlbWl0KGF2WzBdKQotICAgICAgICAgICAgICAgIGVtaXQoYXZbMV0pCi0gICAgICAgICAgICAgICAgX2NvbXBpbGUoY29kZSwgYXZbMl0sIGZsYWdzKQotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tTVUNDRVNTXSkKLSAgICAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKICAgICAgICAgICAgIGVsaWYgX3NpbXBsZShhdikgYW5kIG9wIGlzIG5vdCBSRVBFQVQ6CiAgICAgICAgICAgICAgICAgaWYgb3AgaXMgTUFYX1JFUEVBVDoKICAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW1JFUEVBVF9PTkVdKQpAQCAtMjA3LDE1OCArMjAxLDE0MyBAQAogZGVmIF9vcHRpbWl6ZV9jaGFyc2V0KGNoYXJzZXQsIGZpeHVwKToKICAgICAjIGludGVybmFsOiBvcHRpbWl6ZSBjaGFyYWN0ZXIgc2V0CiAgICAgb3V0ID0gW10KLSAgICBvdXRhcHBlbmQgPSBvdXQuYXBwZW5kCi0gICAgY2hhcm1hcCA9IFswXSoyNTYKLSAgICB0cnk6Ci0gICAgICAgIGZvciBvcCwgYXYgaW4gY2hhcnNldDoKLSAgICAgICAgICAgIGlmIG9wIGlzIE5FR0FURToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKG9wLCBhdikpCi0gICAgICAgICAgICBlbGlmIG9wIGlzIExJVEVSQUw6Ci0gICAgICAgICAgICAgICAgY2hhcm1hcFtmaXh1cChhdildID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBSQU5HRToKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShmaXh1cChhdlswXSksIGZpeHVwKGF2WzFdKSsxKToKLSAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgQ0FURUdPUlk6Ci0gICAgICAgICAgICAgICAgIyBYWFg6IGNvdWxkIGFwcGVuZCB0byBjaGFybWFwIHRhaWwKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnNldCAjIGNhbm5vdCBjb21wcmVzcwotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgdW5pY29kZSBjaGFyYWN0ZXJzCi0gICAgICAgIHJldHVybiBfb3B0aW1pemVfdW5pY29kZShjaGFyc2V0LCBmaXh1cCkKKyAgICB0YWlsID0gW10KKyAgICBjaGFybWFwID0gYnl0ZWFycmF5KDI1NikKKyAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgb3AgaXMgTElURVJBTDoKKyAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtmaXh1cChhdildID0gMQorICAgICAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGZpeHVwKGF2WzBdKSwgZml4dXAoYXZbMV0pKzEpOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIE5FR0FURToKKyAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGlmIGxlbihjaGFybWFwKSA9PSAyNTY6CisgICAgICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHNldCBjb250YWlucyBub24tVUNTMSBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgICAgICAgICAgICAgY2hhcm1hcCArPSBiJ1wwJyAqIDB4ZmYwMAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHNldCBjb250YWlucyBub24tQk1QIGNoYXJhY3RlciBjb2RlcworICAgICAgICAgICAgICAgIHRhaWwuYXBwZW5kKChvcCwgYXYpKQorICAgICAgICAgICAgYnJlYWsKKwogICAgICMgY29tcHJlc3MgY2hhcmFjdGVyIG1hcAotICAgIGkgPSBwID0gbiA9IDAKICAgICBydW5zID0gW10KLSAgICBydW5zYXBwZW5kID0gcnVucy5hcHBlbmQKLSAgICBmb3IgYyBpbiBjaGFybWFwOgotICAgICAgICBpZiBjOgotICAgICAgICAgICAgaWYgbiA9PSAwOgotICAgICAgICAgICAgICAgIHAgPSBpCi0gICAgICAgICAgICBuID0gbiArIDEKLSAgICAgICAgZWxpZiBuOgotICAgICAgICAgICAgcnVuc2FwcGVuZCgocCwgbikpCi0gICAgICAgICAgICBuID0gMAotICAgICAgICBpID0gaSArIDEKLSAgICBpZiBuOgotICAgICAgICBydW5zYXBwZW5kKChwLCBuKSkKLSAgICBpZiBsZW4ocnVucykgPD0gMjoKKyAgICBxID0gMAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHAgPSBjaGFybWFwLmZpbmQoMSwgcSkKKyAgICAgICAgaWYgcCA8IDA6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBsZW4ocnVucykgPj0gMjoKKyAgICAgICAgICAgIHJ1bnMgPSBOb25lCisgICAgICAgICAgICBicmVhaworICAgICAgICBxID0gY2hhcm1hcC5maW5kKDAsIHApCisgICAgICAgIGlmIHEgPCAwOgorICAgICAgICAgICAgcnVucy5hcHBlbmQoKHAsIGxlbihjaGFybWFwKSkpCisgICAgICAgICAgICBicmVhaworICAgICAgICBydW5zLmFwcGVuZCgocCwgcSkpCisgICAgaWYgcnVucyBpcyBub3QgTm9uZToKICAgICAgICAgIyB1c2UgbGl0ZXJhbC9yYW5nZQotICAgICAgICBmb3IgcCwgbiBpbiBydW5zOgotICAgICAgICAgICAgaWYgbiA9PSAxOgotICAgICAgICAgICAgICAgIG91dGFwcGVuZCgoTElURVJBTCwgcCkpCisgICAgICAgIGZvciBwLCBxIGluIHJ1bnM6CisgICAgICAgICAgICBpZiBxIC0gcCA9PSAxOgorICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKExJVEVSQUwsIHApKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKFJBTkdFLCAocCwgcCtuLTEpKSkKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChSQU5HRSwgKHAsIHEgLSAxKSkpCisgICAgICAgIG91dCArPSB0YWlsCiAgICAgICAgIGlmIGxlbihvdXQpIDwgbGVuKGNoYXJzZXQpOgogICAgICAgICAgICAgcmV0dXJuIG91dAotICAgIGVsc2U6Ci0gICAgICAgICMgdXNlIGJpdG1hcAorICAgICAgICByZXR1cm4gY2hhcnNldAorCisgICAgIyB1c2UgYml0bWFwCisgICAgaWYgbGVuKGNoYXJtYXApID09IDI1NjoKICAgICAgICAgZGF0YSA9IF9ta19iaXRtYXAoY2hhcm1hcCkKLSAgICAgICAgb3V0YXBwZW5kKChDSEFSU0VULCBkYXRhKSkKKyAgICAgICAgb3V0LmFwcGVuZCgoQ0hBUlNFVCwgZGF0YSkpCisgICAgICAgIG91dCArPSB0YWlsCiAgICAgICAgIHJldHVybiBvdXQKLSAgICByZXR1cm4gY2hhcnNldAogCi1kZWYgX21rX2JpdG1hcChiaXRzKToKLSAgICBkYXRhID0gW10KLSAgICBkYXRhYXBwZW5kID0gZGF0YS5hcHBlbmQKLSAgICBpZiBfc3JlLkNPREVTSVpFID09IDI6Ci0gICAgICAgIHN0YXJ0ID0gKDEsIDApCi0gICAgZWxzZToKLSAgICAgICAgc3RhcnQgPSAoMSwgMCkKLSAgICBtLCB2ID0gc3RhcnQKLSAgICBmb3IgYyBpbiBiaXRzOgotICAgICAgICBpZiBjOgotICAgICAgICAgICAgdiA9IHYgKyBtCi0gICAgICAgIG0gPSBtICsgbQotICAgICAgICBpZiBtID4gTUFYQ09ERToKLSAgICAgICAgICAgIGRhdGFhcHBlbmQodikKLSAgICAgICAgICAgIG0sIHYgPSBzdGFydAotICAgIHJldHVybiBkYXRhCisgICAgIyBUbyByZXByZXNlbnQgYSBiaWcgY2hhcnNldCwgZmlyc3QgYSBiaXRtYXAgb2YgYWxsIGNoYXJhY3RlcnMgaW4gdGhlCisgICAgIyBzZXQgaXMgY29uc3RydWN0ZWQuIFRoZW4sIHRoaXMgYml0bWFwIGlzIHNsaWNlZCBpbnRvIGNodW5rcyBvZiAyNTYKKyAgICAjIGNoYXJhY3RlcnMsIGR1cGxpY2F0ZSBjaHVua3MgYXJlIGVsaW1pbmF0ZWQsIGFuZCBlYWNoIGNodW5rIGlzCisgICAgIyBnaXZlbiBhIG51bWJlci4gSW4gdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24sIHRoZSBjaGFyc2V0IGlzCisgICAgIyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCB3b3JkIHNlcXVlbmNlLCBjb25zaXN0aW5nIG9mIG9uZSB3b3JkIGZvcgorICAgICMgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2h1bmtzLCBhIHNlcXVlbmNlIG9mIDI1NiBieXRlcyAoNjQgd29yZHMpCisgICAgIyBvZiBjaHVuayBudW1iZXJzIGluZGV4ZWQgYnkgdGhlaXIgb3JpZ2luYWwgY2h1bmsgcG9zaXRpb24sIGFuZCBhCisgICAgIyBzZXF1ZW5jZSBvZiAyNTYtYml0IGNodW5rcyAoOCB3b3JkcyBlYWNoKS4KIAotIyBUbyByZXByZXNlbnQgYSBiaWcgY2hhcnNldCwgZmlyc3QgYSBiaXRtYXAgb2YgYWxsIGNoYXJhY3RlcnMgaW4gdGhlCi0jIHNldCBpcyBjb25zdHJ1Y3RlZC4gVGhlbiwgdGhpcyBiaXRtYXAgaXMgc2xpY2VkIGludG8gY2h1bmtzIG9mIDI1NgotIyBjaGFyYWN0ZXJzLCBkdXBsaWNhdGUgY2h1bmtzIGFyZSBlbGltaW5hdGVkLCBhbmQgZWFjaCBjaHVuayBpcwotIyBnaXZlbiBhIG51bWJlci4gSW4gdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24sIHRoZSBjaGFyc2V0IGlzCi0jIHJlcHJlc2VudGVkIGJ5IGEgMzItYml0IHdvcmQgc2VxdWVuY2UsIGNvbnNpc3Rpbmcgb2Ygb25lIHdvcmQgZm9yCi0jIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNodW5rcywgYSBzZXF1ZW5jZSBvZiAyNTYgYnl0ZXMgKDY0IHdvcmRzKQotIyBvZiBjaHVuayBudW1iZXJzIGluZGV4ZWQgYnkgdGhlaXIgb3JpZ2luYWwgY2h1bmsgcG9zaXRpb24sIGFuZCBhCi0jIHNlcXVlbmNlIG9mIDI1Ni1iaXQgY2h1bmtzICg4IHdvcmRzIGVhY2gpLgorICAgICMgQ29tcHJlc3Npb24gaXMgbm9ybWFsbHkgZ29vZDogaW4gYSB0eXBpY2FsIGNoYXJzZXQsIGxhcmdlIHJhbmdlcyBvZgorICAgICMgVW5pY29kZSB3aWxsIGJlIGVpdGhlciBjb21wbGV0ZWx5IGV4Y2x1ZGVkIChlLmcuIGlmIG9ubHkgY3lyaWxsaWMKKyAgICAjIGxldHRlcnMgYXJlIHRvIGJlIG1hdGNoZWQpLCBvciBjb21wbGV0ZWx5IGluY2x1ZGVkIChlLmcuIGlmIGxhcmdlCisgICAgIyBzdWJyYW5nZXMgb2YgS2FuamkgbWF0Y2gpLiBUaGVzZSByYW5nZXMgd2lsbCBiZSByZXByZXNlbnRlZCBieQorICAgICMgY2h1bmtzIG9mIGFsbCBvbmUtYml0cyBvciBhbGwgemVyby1iaXRzLgogCi0jIENvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGdvb2Q6IGluIGEgdHlwaWNhbCBjaGFyc2V0LCBsYXJnZSByYW5nZXMgb2YKLSMgVW5pY29kZSB3aWxsIGJlIGVpdGhlciBjb21wbGV0ZWx5IGV4Y2x1ZGVkIChlLmcuIGlmIG9ubHkgY3lyaWxsaWMKLSMgbGV0dGVycyBhcmUgdG8gYmUgbWF0Y2hlZCksIG9yIGNvbXBsZXRlbHkgaW5jbHVkZWQgKGUuZy4gaWYgbGFyZ2UKLSMgc3VicmFuZ2VzIG9mIEthbmppIG1hdGNoKS4gVGhlc2UgcmFuZ2VzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkKLSMgY2h1bmtzIG9mIGFsbCBvbmUtYml0cyBvciBhbGwgemVyby1iaXRzLgorICAgICMgTWF0Y2hpbmcgY2FuIGJlIGFsc28gZG9uZSBlZmZpY2llbnRseTogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBvZgorICAgICMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGlzIGFuIGluZGV4IGludG8gdGhlIGNodW5rIG51bWJlciwgYW5kIHRoZQorICAgICMgbGVzcyBzaWduaWZpY2FudCBieXRlIGlzIGEgYml0IGluZGV4IGluIHRoZSBjaHVuayAoanVzdCBsaWtlIHRoZQorICAgICMgQ0hBUlNFVCBtYXRjaGluZykuCiAKLSMgTWF0Y2hpbmcgY2FuIGJlIGFsc28gZG9uZSBlZmZpY2llbnRseTogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBvZgotIyB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgaXMgYW4gaW5kZXggaW50byB0aGUgY2h1bmsgbnVtYmVyLCBhbmQgdGhlCi0jIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSBpcyBhIGJpdCBpbmRleCBpbiB0aGUgY2h1bmsgKGp1c3QgbGlrZSB0aGUKLSMgQ0hBUlNFVCBtYXRjaGluZykuCi0KLSMgVGhlIEJJR0NIQVJTRVQgb3Bjb2RlIHN0aWxsIHN1cHBvcnRzIG9ubHkgc3Vic2V0cwotIyBvZiB0aGUgYmFzaWMgbXVsdGlsaW5ndWFsIHBsYW5lOyBhbiBlZmZpY2llbnQgcmVwcmVzZW50YXRpb24KLSMgZm9yIGFsbCBvZiBVbmljb2RlIGhhcyBub3QgeWV0IGJlZW4gZGV2ZWxvcGVkLiBUaGlzIG1lYW5zLAotIyBpbiBwYXJ0aWN1bGFyLCB0aGF0IG5lZ2F0ZWQgY2hhcnNldHMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzCi0jIGJpZ2NoYXJzZXRzLgotCi1kZWYgX29wdGltaXplX3VuaWNvZGUoY2hhcnNldCwgZml4dXApOgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4gY2hhcnNldAotICAgIGNoYXJtYXAgPSBbMF0qNjU1MzYKLSAgICBuZWdhdGUgPSAwCi0gICAgdHJ5OgotICAgICAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6Ci0gICAgICAgICAgICBpZiBvcCBpcyBORUdBVEU6Ci0gICAgICAgICAgICAgICAgbmVnYXRlID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIENBVEVHT1JZOgotICAgICAgICAgICAgICAgICMgWFhYOiBjb3VsZCBleHBhbmQgY2F0ZWdvcnkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnNldCAjIGNhbm5vdCBjb21wcmVzcwotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAjIG5vbi1CTVAgY2hhcmFjdGVyczsgWFhYIG5vdyB0aGV5IHNob3VsZCB3b3JrCi0gICAgICAgIHJldHVybiBjaGFyc2V0Ci0gICAgaWYgbmVnYXRlOgotICAgICAgICBpZiBzeXMubWF4dW5pY29kZSAhPSA2NTUzNToKLSAgICAgICAgICAgICMgWFhYOiBuZWdhdGlvbiBkb2VzIG5vdCB3b3JrIHdpdGggYmlnIGNoYXJzZXRzCi0gICAgICAgICAgICAjIFhYWDI6IG5vdyB0aGV5IHNob3VsZCB3b3JrLCBidXQgcmVtb3ZpbmcgdGhpcyB3aWxsIG1ha2UgdGhlCi0gICAgICAgICAgICAjIGNoYXJtYXAgMTcgdGltZXMgYmlnZ2VyCi0gICAgICAgICAgICByZXR1cm4gY2hhcnNldAotICAgICAgICBmb3IgaSBpbiByYW5nZSg2NTUzNik6Ci0gICAgICAgICAgICBjaGFybWFwW2ldID0gbm90IGNoYXJtYXBbaV0KKyAgICBjaGFybWFwID0gYnl0ZXMoY2hhcm1hcCkgIyBzaG91bGQgYmUgaGFzaGFibGUKICAgICBjb21wcyA9IHt9Ci0gICAgbWFwcGluZyA9IFswXSoyNTYKKyAgICBtYXBwaW5nID0gYnl0ZWFycmF5KDI1NikKICAgICBibG9jayA9IDAKLSAgICBkYXRhID0gW10KLSAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgotICAgICAgICBjaHVuayA9IHR1cGxlKGNoYXJtYXBbaSoyNTY6KGkrMSkqMjU2XSkKLSAgICAgICAgbmV3ID0gY29tcHMuc2V0ZGVmYXVsdChjaHVuaywgYmxvY2spCi0gICAgICAgIG1hcHBpbmdbaV0gPSBuZXcKLSAgICAgICAgaWYgbmV3ID09IGJsb2NrOgotICAgICAgICAgICAgYmxvY2sgPSBibG9jayArIDEKLSAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgX21rX2JpdG1hcChjaHVuaykKLSAgICBoZWFkZXIgPSBbYmxvY2tdCi0gICAgaWYgX3NyZS5DT0RFU0laRSA9PSAyOgotICAgICAgICBjb2RlID0gJ0gnCi0gICAgZWxzZToKLSAgICAgICAgY29kZSA9ICdJJwotICAgICMgQ29udmVydCBibG9jayBpbmRpY2VzIHRvIGJ5dGUgYXJyYXkgb2YgMjU2IGJ5dGVzCi0gICAgbWFwcGluZyA9IGFycmF5LmFycmF5KCdCJywgbWFwcGluZykudG9ieXRlcygpCi0gICAgIyBDb252ZXJ0IGJ5dGUgYXJyYXkgdG8gd29yZCBhcnJheQotICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheShjb2RlLCBtYXBwaW5nKQotICAgIGFzc2VydCBtYXBwaW5nLml0ZW1zaXplID09IF9zcmUuQ09ERVNJWkUKLSAgICBhc3NlcnQgbGVuKG1hcHBpbmcpICogbWFwcGluZy5pdGVtc2l6ZSA9PSAyNTYKLSAgICBoZWFkZXIgPSBoZWFkZXIgKyBtYXBwaW5nLnRvbGlzdCgpCi0gICAgZGF0YVswOjBdID0gaGVhZGVyCi0gICAgcmV0dXJuIFsoQklHQ0hBUlNFVCwgZGF0YSldCisgICAgZGF0YSA9IGJ5dGVhcnJheSgpCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgNjU1MzYsIDI1Nik6CisgICAgICAgIGNodW5rID0gY2hhcm1hcFtpOiBpICsgMjU2XQorICAgICAgICBpZiBjaHVuayBpbiBjb21wczoKKyAgICAgICAgICAgIG1hcHBpbmdbaSAvLyAyNTZdID0gY29tcHNbY2h1bmtdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXBwaW5nW2kgLy8gMjU2XSA9IGNvbXBzW2NodW5rXSA9IGJsb2NrCisgICAgICAgICAgICBibG9jayArPSAxCisgICAgICAgICAgICBkYXRhICs9IGNodW5rCisgICAgZGF0YSA9IF9ta19iaXRtYXAoZGF0YSkKKyAgICBkYXRhWzA6MF0gPSBbYmxvY2tdICsgX2J5dGVzX3RvX2NvZGVzKG1hcHBpbmcpCisgICAgb3V0LmFwcGVuZCgoQklHQ0hBUlNFVCwgZGF0YSkpCisgICAgb3V0ICs9IHRhaWwKKyAgICByZXR1cm4gb3V0CisKK19DT0RFQklUUyA9IF9zcmUuQ09ERVNJWkUgKiA4CitfQklUU19UUkFOUyA9IGInMCcgKyBiJzEnICogMjU1CitkZWYgX21rX2JpdG1hcChiaXRzLCBfQ09ERUJJVFM9X0NPREVCSVRTLCBfaW50PWludCk6CisgICAgcyA9IGJpdHMudHJhbnNsYXRlKF9CSVRTX1RSQU5TKVs6Oi0xXQorICAgIHJldHVybiBbX2ludChzW2kgLSBfQ09ERUJJVFM6IGldLCAyKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHMpLCAwLCAtX0NPREVCSVRTKV0KKworZGVmIF9ieXRlc190b19jb2RlcyhiKToKKyAgICAjIENvbnZlcnQgYmxvY2sgaW5kaWNlcyB0byB3b3JkIGFycmF5CisgICAgaW1wb3J0IGFycmF5CisgICAgYSA9IGFycmF5LmFycmF5KCdJJywgYikKKyAgICBhc3NlcnQgYS5pdGVtc2l6ZSA9PSBfc3JlLkNPREVTSVpFCisgICAgYXNzZXJ0IGxlbihhKSAqIGEuaXRlbXNpemUgPT0gbGVuKGIpCisgICAgcmV0dXJuIGEudG9saXN0KCkKIAogZGVmIF9zaW1wbGUoYXYpOgogICAgICMgY2hlY2sgaWYgYXYgaXMgYSAic2ltcGxlIiBvcGVyYXRvcgogICAgIGxvLCBoaSA9IGF2WzJdLmdldHdpZHRoKCkKICAgICByZXR1cm4gbG8gPT0gaGkgPT0gMSBhbmQgYXZbMl1bMF1bMF0gIT0gU1VCUEFUVEVSTgogCitkZWYgX2dlbmVyYXRlX292ZXJsYXBfdGFibGUocHJlZml4KToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSBhbiBvdmVybGFwIHRhYmxlIGZvciB0aGUgZm9sbG93aW5nIHByZWZpeC4KKyAgICBBbiBvdmVybGFwIHRhYmxlIGlzIGEgdGFibGUgb2YgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgcHJlZml4IHdoaWNoCisgICAgaW5mb3JtcyBhYm91dCB0aGUgcG90ZW50aWFsIHNlbGYtb3ZlcmxhcCBmb3IgZWFjaCBpbmRleCBpbiB0aGUgcHJlZml4OgorICAgIC0gaWYgb3ZlcmxhcFtpXSA9PSAwLCBwcmVmaXhbaTpdIGNhbid0IG92ZXJsYXAgcHJlZml4WzA6Li4uXQorICAgIC0gaWYgb3ZlcmxhcFtpXSA9PSBrIHdpdGggMCA8IGsgPD0gaSwgcHJlZml4W2ktaysxOmkrMV0gb3ZlcmxhcHMgd2l0aAorICAgICAgcHJlZml4WzA6a10KKyAgICAiIiIKKyAgICB0YWJsZSA9IFswXSAqIGxlbihwcmVmaXgpCisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHByZWZpeCkpOgorICAgICAgICBpZHggPSB0YWJsZVtpIC0gMV0KKyAgICAgICAgd2hpbGUgcHJlZml4W2ldICE9IHByZWZpeFtpZHhdOgorICAgICAgICAgICAgaWYgaWR4ID09IDA6CisgICAgICAgICAgICAgICAgdGFibGVbaV0gPSAwCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlkeCA9IHRhYmxlW2lkeCAtIDFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YWJsZVtpXSA9IGlkeCArIDEKKyAgICByZXR1cm4gdGFibGUKKwogZGVmIF9jb21waWxlX2luZm8oY29kZSwgcGF0dGVybiwgZmxhZ3MpOgogICAgICMgaW50ZXJuYWw6IGNvbXBpbGUgYW4gaW5mbyBibG9jay4gIGluIHRoZSBjdXJyZW50IHZlcnNpb24sCiAgICAgIyB0aGlzIGNvbnRhaW5zIG1pbi9tYXggcGF0dGVybiB3aWR0aCwgYW5kIGFuIG9wdGlvbmFsIGxpdGVyYWwKQEAgLTQ1NSwxMiArNDM0LDcgQEAKICAgICAgICAgZW1pdChwcmVmaXhfc2tpcCkgIyBza2lwCiAgICAgICAgIGNvZGUuZXh0ZW5kKHByZWZpeCkKICAgICAgICAgIyBnZW5lcmF0ZSBvdmVybGFwIHRhYmxlCi0gICAgICAgIHRhYmxlID0gWy0xXSArIChbMF0qbGVuKHByZWZpeCkpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwcmVmaXgpKToKLSAgICAgICAgICAgIHRhYmxlW2krMV0gPSB0YWJsZVtpXSsxCi0gICAgICAgICAgICB3aGlsZSB0YWJsZVtpKzFdID4gMCBhbmQgcHJlZml4W2ldICE9IHByZWZpeFt0YWJsZVtpKzFdLTFdOgotICAgICAgICAgICAgICAgIHRhYmxlW2krMV0gPSB0YWJsZVt0YWJsZVtpKzFdLTFdKzEKLSAgICAgICAgY29kZS5leHRlbmQodGFibGVbMTpdKSAjIGRvbid0IHN0b3JlIGZpcnN0IGVudHJ5CisgICAgICAgIGNvZGUuZXh0ZW5kKF9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlKHByZWZpeCkpCiAgICAgZWxpZiBjaGFyc2V0OgogICAgICAgICBfY29tcGlsZV9jaGFyc2V0KGNoYXJzZXQsIGZsYWdzLCBjb2RlKQogICAgIGNvZGVbc2tpcF0gPSBsZW4oY29kZSkgLSBza2lwCmRpZmYgLS1naXQgYS9MaWIvc3JlX2NvbnN0YW50cy5weSBiL0xpYi9zcmVfY29uc3RhbnRzLnB5CmluZGV4IDNmYjVlYWMuLjIzZTM1MTYgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfY29uc3RhbnRzLnB5CisrKyBiL0xpYi9zcmVfY29uc3RhbnRzLnB5CkBAIC0xNSwxMSArMTUsNyBAQAogCiBNQUdJQyA9IDIwMDMxMDE3CiAKLXRyeToKLSAgICBmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBfc3JlCi0gICAgTUFYUkVQRUFUID0gX3NyZS5NQVhSRVBFQVQgPSA2NTUzNQorZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKIAogIyBTUkUgc3RhbmRhcmQgZXhjZXB0aW9uIChhY2Nlc3MgYXMgc3JlLmVycm9yKQogIyBzaG91bGQgdGhpcyByZWFsbHkgYmUgaGVyZT8KQEAgLTI1NCw2ICsyNTAsOCBAQAogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfRE9UQUxMICVkXG4iICUgU1JFX0ZMQUdfRE9UQUxMKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVU5JQ09ERSAlZFxuIiAlIFNSRV9GTEFHX1VOSUNPREUpCiAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19WRVJCT1NFICVkXG4iICUgU1JFX0ZMQUdfVkVSQk9TRSkKKyAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0RFQlVHICVkXG4iICUgU1JFX0ZMQUdfREVCVUcpCisgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19BU0NJSSAlZFxuIiAlIFNSRV9GTEFHX0FTQ0lJKQogCiAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfSU5GT19QUkVGSVggJWRcbiIgJSBTUkVfSU5GT19QUkVGSVgpCiAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfSU5GT19MSVRFUkFMICVkXG4iICUgU1JFX0lORk9fTElURVJBTCkKZGlmZiAtLWdpdCBhL0xpYi9zcmVfcGFyc2UucHkgYi9MaWIvc3JlX3BhcnNlLnB5CmluZGV4IDhhNzc3OTAuLjY1ODNlZjYgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfcGFyc2UucHkKKysrIGIvTGliL3NyZV9wYXJzZS5weQpAQCAtMTUsNiArMTUsNyBAQAogaW1wb3J0IHN5cwogCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKIFNQRUNJQUxfQ0hBUlMgPSAiLlxcW3soKSorP14kfCIKIFJFUEVBVF9DSEFSUyA9ICIqKz97IgpAQCAtNzY4LDM1ICs3NjksMzMgQEAKICAgICAjIGdyb3VwIHJlZmVyZW5jZXMKICAgICBzID0gVG9rZW5pemVyKHNvdXJjZSkKICAgICBzZ2V0ID0gcy5nZXQKLSAgICBwID0gW10KLSAgICBhID0gcC5hcHBlbmQKLSAgICBkZWYgbGl0ZXJhbChsaXRlcmFsLCBwPXAsIHBhcHBlbmQ9YSk6Ci0gICAgICAgIGlmIHAgYW5kIHBbLTFdWzBdIGlzIExJVEVSQUw6Ci0gICAgICAgICAgICBwWy0xXSA9IExJVEVSQUwsIHBbLTFdWzFdICsgbGl0ZXJhbAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFwcGVuZCgoTElURVJBTCwgbGl0ZXJhbCkpCi0gICAgc2VwID0gc291cmNlWzowXQotICAgIGlmIGlzaW5zdGFuY2Uoc2VwLCBzdHIpOgotICAgICAgICBtYWtlY2hhciA9IGNocgotICAgIGVsc2U6Ci0gICAgICAgIG1ha2VjaGFyID0gY2hyCi0gICAgd2hpbGUgMToKKyAgICBncm91cHMgPSBbXQorICAgIGxpdGVyYWxzID0gW10KKyAgICBsaXRlcmFsID0gW10KKyAgICBsYXBwZW5kID0gbGl0ZXJhbC5hcHBlbmQKKyAgICBkZWYgYWRkZ3JvdXAoaW5kZXgpOgorICAgICAgICBpZiBsaXRlcmFsOgorICAgICAgICAgICAgbGl0ZXJhbHMuYXBwZW5kKCcnLmpvaW4obGl0ZXJhbCkpCisgICAgICAgICAgICBkZWwgbGl0ZXJhbFs6XQorICAgICAgICBncm91cHMuYXBwZW5kKChsZW4obGl0ZXJhbHMpLCBpbmRleCkpCisgICAgICAgIGxpdGVyYWxzLmFwcGVuZChOb25lKQorICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRoaXMgPSBzZ2V0KCkKICAgICAgICAgaWYgdGhpcyBpcyBOb25lOgogICAgICAgICAgICAgYnJlYWsgIyBlbmQgb2YgcmVwbGFjZW1lbnQgc3RyaW5nCi0gICAgICAgIGlmIHRoaXMgYW5kIHRoaXNbMF0gPT0gIlxcIjoKKyAgICAgICAgaWYgdGhpc1swXSA9PSAiXFwiOgogICAgICAgICAgICAgIyBncm91cAotICAgICAgICAgICAgYyA9IHRoaXNbMToyXQorICAgICAgICAgICAgYyA9IHRoaXNbMV0KICAgICAgICAgICAgIGlmIGMgPT0gImciOgogICAgICAgICAgICAgICAgIG5hbWUgPSAiIgogICAgICAgICAgICAgICAgIGlmIHMubWF0Y2goIjwiKToKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW50ZXJtaW5hdGVkIGdyb3VwIG5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciA9PSAiPiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBjaGFyCiAgICAgICAgICAgICAgICAgaWYgbm90IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJtaXNzaW5nIGdyb3VwIG5hbWUiKQogICAgICAgICAgICAgICAgIHRyeToKQEAgLTgxMCw1MCArODA5LDM4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHBhdHRlcm4uZ3JvdXBpbmRleFtuYW1lXQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKCJ1bmtub3duIGdyb3VwIG5hbWUiKQotICAgICAgICAgICAgICAgIGEoKE1BUkssIGluZGV4KSkKKyAgICAgICAgICAgICAgICBhZGRncm91cChpbmRleCkKICAgICAgICAgICAgIGVsaWYgYyA9PSAiMCI6CiAgICAgICAgICAgICAgICAgaWYgcy5uZXh0IGluIE9DVERJR0lUUzoKLSAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHRoaXMgKyBzZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgaWYgcy5uZXh0IGluIE9DVERJR0lUUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCi0gICAgICAgICAgICAgICAgbGl0ZXJhbChtYWtlY2hhcihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQorICAgICAgICAgICAgICAgIGxhcHBlbmQoY2hyKGludCh0aGlzWzE6XSwgOCkgJiAweGZmKSkKICAgICAgICAgICAgIGVsaWYgYyBpbiBESUdJVFM6CiAgICAgICAgICAgICAgICAgaXNvY3RhbCA9IEZhbHNlCiAgICAgICAgICAgICAgICAgaWYgcy5uZXh0IGluIERJR0lUUzoKLSAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHRoaXMgKyBzZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgaW4gT0NURElHSVRTIGFuZCB0aGlzWzJdIGluIE9DVERJR0lUUyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgIHMubmV4dCBpbiBPQ1RESUdJVFMpOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHRoaXMgKyBzZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpc29jdGFsID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbChtYWtlY2hhcihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCisgICAgICAgICAgICAgICAgICAgICAgICBsYXBwZW5kKGNocihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCiAgICAgICAgICAgICAgICAgaWYgbm90IGlzb2N0YWw6Ci0gICAgICAgICAgICAgICAgICAgIGEoKE1BUkssIGludCh0aGlzWzE6XSkpKQorICAgICAgICAgICAgICAgICAgICBhZGRncm91cChpbnQodGhpc1sxOl0pKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSBtYWtlY2hhcihFU0NBUEVTW3RoaXNdWzFdKQorICAgICAgICAgICAgICAgICAgICB0aGlzID0gY2hyKEVTQ0FQRVNbdGhpc11bMV0pCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgbGl0ZXJhbCh0aGlzKQorICAgICAgICAgICAgICAgIGxhcHBlbmQodGhpcykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpdGVyYWwodGhpcykKLSAgICAjIGNvbnZlcnQgdGVtcGxhdGUgdG8gZ3JvdXBzIGFuZCBsaXRlcmFscyBsaXN0cwotICAgIGkgPSAwCi0gICAgZ3JvdXBzID0gW10KLSAgICBncm91cHNhcHBlbmQgPSBncm91cHMuYXBwZW5kCi0gICAgbGl0ZXJhbHMgPSBbTm9uZV0gKiBsZW4ocCkKLSAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgc3RyKToKLSAgICAgICAgZW5jb2RlID0gbGFtYmRhIHg6IHgKLSAgICBlbHNlOgorICAgICAgICAgICAgbGFwcGVuZCh0aGlzKQorICAgIGlmIGxpdGVyYWw6CisgICAgICAgIGxpdGVyYWxzLmFwcGVuZCgnJy5qb2luKGxpdGVyYWwpKQorICAgIGlmIG5vdCBpc2luc3RhbmNlKHNvdXJjZSwgc3RyKToKICAgICAgICAgIyBUaGUgdG9rZW5pemVyIGltcGxpY2l0bHkgZGVjb2RlcyBieXRlcyBvYmplY3RzIGFzIGxhdGluLTEsIHdlIG11c3QKICAgICAgICAgIyB0aGVyZWZvcmUgcmUtZW5jb2RlIHRoZSBmaW5hbCByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgZW5jb2RlID0gbGFtYmRhIHg6IHguZW5jb2RlKCdsYXRpbi0xJykKLSAgICBmb3IgYywgcyBpbiBwOgotICAgICAgICBpZiBjIGlzIE1BUks6Ci0gICAgICAgICAgICBncm91cHNhcHBlbmQoKGksIHMpKQotICAgICAgICAgICAgIyBsaXRlcmFsW2ldIGlzIGFscmVhZHkgTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGl0ZXJhbHNbaV0gPSBlbmNvZGUocykKLSAgICAgICAgaSA9IGkgKyAxCisgICAgICAgIGxpdGVyYWxzID0gW05vbmUgaWYgcyBpcyBOb25lIGVsc2Ugcy5lbmNvZGUoJ2xhdGluLTEnKSBmb3IgcyBpbiBsaXRlcmFsc10KICAgICByZXR1cm4gZ3JvdXBzLCBsaXRlcmFscwogCiBkZWYgZXhwYW5kX3RlbXBsYXRlKHRlbXBsYXRlLCBtYXRjaCk6CmRpZmYgLS1naXQgYS9MaWIvc3NsLnB5IGIvTGliL3NzbC5weQppbmRleCAwNjQzN2IzLi43MmU2YTZlIDEwMDY0NAotLS0gYS9MaWIvc3NsLnB5CisrKyBiL0xpYi9zc2wucHkKQEAgLTUyLDEwICs1Miw0NyBAQAogUFJPVE9DT0xfU1NMdjMKIFBST1RPQ09MX1NTTHYyMwogUFJPVE9DT0xfVExTdjEKK1BST1RPQ09MX1RMU3YxXzEKK1BST1RPQ09MX1RMU3YxXzIKKworVGhlIGZvbGxvd2luZyBjb25zdGFudHMgaWRlbnRpZnkgdmFyaW91cyBTU0wgYWxlcnQgbWVzc2FnZSBkZXNjcmlwdGlvbnMgYXMgcGVyCitodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzL3Rscy1wYXJhbWV0ZXJzLnhtbCN0bHMtcGFyYW1ldGVycy02CisKK0FMRVJUX0RFU0NSSVBUSU9OX0NMT1NFX05PVElGWQorQUxFUlRfREVTQ1JJUFRJT05fVU5FWFBFQ1RFRF9NRVNTQUdFCitBTEVSVF9ERVNDUklQVElPTl9CQURfUkVDT1JEX01BQworQUxFUlRfREVTQ1JJUFRJT05fUkVDT1JEX09WRVJGTE9XCitBTEVSVF9ERVNDUklQVElPTl9ERUNPTVBSRVNTSU9OX0ZBSUxVUkUKK0FMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFCitBTEVSVF9ERVNDUklQVElPTl9CQURfQ0VSVElGSUNBVEUKK0FMRVJUX0RFU0NSSVBUSU9OX1VOU1VQUE9SVEVEX0NFUlRJRklDQVRFCitBTEVSVF9ERVNDUklQVElPTl9DRVJUSUZJQ0FURV9SRVZPS0VECitBTEVSVF9ERVNDUklQVElPTl9DRVJUSUZJQ0FURV9FWFBJUkVECitBTEVSVF9ERVNDUklQVElPTl9DRVJUSUZJQ0FURV9VTktOT1dOCitBTEVSVF9ERVNDUklQVElPTl9JTExFR0FMX1BBUkFNRVRFUgorQUxFUlRfREVTQ1JJUFRJT05fVU5LTk9XTl9DQQorQUxFUlRfREVTQ1JJUFRJT05fQUNDRVNTX0RFTklFRAorQUxFUlRfREVTQ1JJUFRJT05fREVDT0RFX0VSUk9SCitBTEVSVF9ERVNDUklQVElPTl9ERUNSWVBUX0VSUk9SCitBTEVSVF9ERVNDUklQVElPTl9QUk9UT0NPTF9WRVJTSU9OCitBTEVSVF9ERVNDUklQVElPTl9JTlNVRkZJQ0lFTlRfU0VDVVJJVFkKK0FMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SCitBTEVSVF9ERVNDUklQVElPTl9VU0VSX0NBTkNFTExFRAorQUxFUlRfREVTQ1JJUFRJT05fTk9fUkVORUdPVElBVElPTgorQUxFUlRfREVTQ1JJUFRJT05fVU5TVVBQT1JURURfRVhURU5TSU9OCitBTEVSVF9ERVNDUklQVElPTl9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUKK0FMRVJUX0RFU0NSSVBUSU9OX1VOUkVDT0dOSVpFRF9OQU1FCitBTEVSVF9ERVNDUklQVElPTl9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFCitBTEVSVF9ERVNDUklQVElPTl9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQorQUxFUlRfREVTQ1JJUFRJT05fVU5LTk9XTl9QU0tfSURFTlRJVFkKICIiIgogCiBpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IG9zCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIGVudW0gaW1wb3J0IEVudW0gYXMgX0VudW0KIAogaW1wb3J0IF9zc2wgICAgICAgICAgICAgIyBpZiB3ZSBjYW4ndCBpbXBvcnQgaXQsIGxldCB0aGUgZXJyb3IgcHJvcGFnYXRlCiAKQEAgLTY2LDM1ICsxMDMsMjYgQEAKICAgICBTU0xTeXNjYWxsRXJyb3IsIFNTTEVPRkVycm9yLAogICAgICkKIGZyb20gX3NzbCBpbXBvcnQgQ0VSVF9OT05FLCBDRVJUX09QVElPTkFMLCBDRVJUX1JFUVVJUkVECi1mcm9tIF9zc2wgaW1wb3J0ICgKLSAgICBPUF9BTEwsIE9QX05PX1NTTHYyLCBPUF9OT19TU0x2MywgT1BfTk9fVExTdjEsCi0gICAgT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFLCBPUF9TSU5HTEVfREhfVVNFCi0gICAgKQotdHJ5OgotICAgIGZyb20gX3NzbCBpbXBvcnQgT1BfTk9fQ09NUFJFU1NJT04KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi10cnk6Ci0gICAgZnJvbSBfc3NsIGltcG9ydCBPUF9TSU5HTEVfRUNESF9VU0UKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCitmcm9tIF9zc2wgaW1wb3J0IChWRVJJRllfREVGQVVMVCwgVkVSSUZZX0NSTF9DSEVDS19MRUFGLCBWRVJJRllfQ1JMX0NIRUNLX0NIQUlOLAorICAgIFZFUklGWV9YNTA5X1NUUklDVCkKK2Zyb20gX3NzbCBpbXBvcnQgdHh0Mm9iaiBhcyBfdHh0Mm9iaiwgbmlkMm9iaiBhcyBfbmlkMm9iagogZnJvbSBfc3NsIGltcG9ydCBSQU5EX3N0YXR1cywgUkFORF9lZ2QsIFJBTkRfYWRkLCBSQU5EX2J5dGVzLCBSQU5EX3BzZXVkb19ieXRlcwotZnJvbSBfc3NsIGltcG9ydCAoCi0gICAgU1NMX0VSUk9SX1pFUk9fUkVUVVJOLAotICAgIFNTTF9FUlJPUl9XQU5UX1JFQUQsCi0gICAgU1NMX0VSUk9SX1dBTlRfV1JJVEUsCi0gICAgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVAsCi0gICAgU1NMX0VSUk9SX1NZU0NBTEwsCi0gICAgU1NMX0VSUk9SX1NTTCwKLSAgICBTU0xfRVJST1JfV0FOVF9DT05ORUNULAotICAgIFNTTF9FUlJPUl9FT0YsCi0gICAgU1NMX0VSUk9SX0lOVkFMSURfRVJST1JfQ09ERSwKLSAgICApCisKK2RlZiBfaW1wb3J0X3N5bWJvbHMocHJlZml4KToKKyAgICBmb3IgbiBpbiBkaXIoX3NzbCk6CisgICAgICAgIGlmIG4uc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgZ2xvYmFscygpW25dID0gZ2V0YXR0cihfc3NsLCBuKQorCitfaW1wb3J0X3N5bWJvbHMoJ09QXycpCitfaW1wb3J0X3N5bWJvbHMoJ0FMRVJUX0RFU0NSSVBUSU9OXycpCitfaW1wb3J0X3N5bWJvbHMoJ1NTTF9FUlJPUl8nKQorCiBmcm9tIF9zc2wgaW1wb3J0IEhBU19TTkksIEhBU19FQ0RILCBIQVNfTlBOCi1mcm9tIF9zc2wgaW1wb3J0IChQUk9UT0NPTF9TU0x2MywgUFJPVE9DT0xfU1NMdjIzLAotICAgICAgICAgICAgICAgICAgUFJPVE9DT0xfVExTdjEpCisKK2Zyb20gX3NzbCBpbXBvcnQgUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywgUFJPVE9DT0xfVExTdjEKIGZyb20gX3NzbCBpbXBvcnQgX09QRU5TU0xfQVBJX1ZFUlNJT04KIAorCiBfUFJPVE9DT0xfTkFNRVMgPSB7CiAgICAgUFJPVE9DT0xfVExTdjE6ICJUTFN2MSIsCiAgICAgUFJPVE9DT0xfU1NMdjIzOiAiU1NMdjIzIiwKQEAgLTEwOCwxMyArMTM2LDI2IEBACiBlbHNlOgogICAgIF9QUk9UT0NPTF9OQU1FU1tQUk9UT0NPTF9TU0x2Ml0gPSAiU1NMdjIiCiAKK3RyeToKKyAgICBmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1RMU3YxXzEsIFBST1RPQ09MX1RMU3YxXzIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIF9QUk9UT0NPTF9OQU1FU1tQUk9UT0NPTF9UTFN2MV8xXSA9ICJUTFN2MS4xIgorICAgIF9QUk9UT0NPTF9OQU1FU1tQUk9UT0NPTF9UTFN2MV8yXSA9ICJUTFN2MS4yIgorCitpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICBmcm9tIF9zc2wgaW1wb3J0IGVudW1fY2VydGlmaWNhdGVzLCBlbnVtX2NybHMKKwogZnJvbSBzb2NrZXQgaW1wb3J0IGdldG5hbWVpbmZvIGFzIF9nZXRuYW1laW5mbwotZnJvbSBzb2NrZXQgaW1wb3J0IGVycm9yIGFzIHNvY2tldF9lcnJvcgogZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldCwgQUZfSU5FVCwgU09DS19TVFJFQU0sIGNyZWF0ZV9jb25uZWN0aW9uCiBpbXBvcnQgYmFzZTY0ICAgICAgICAjIGZvciBERVItdG8tUEVNIHRyYW5zbGF0aW9uCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgZXJybm8KIAorCitzb2NrZXRfZXJyb3IgPSBPU0Vycm9yICAjIGtlZXAgdGhhdCBwdWJsaWMgbmFtZSBpbiBtb2R1bGUgbmFtZXNwYWNlCisKIGlmIF9zc2wuSEFTX1RMU19VTklRVUU6CiAgICAgQ0hBTk5FTF9CSU5ESU5HX1RZUEVTID0gWyd0bHMtdW5pcXVlJ10KIGVsc2U6CkBAIC0xMjQsNiArMTY1LDEzIEBACiAjIChPcGVuU1NMJ3MgZGVmYXVsdCBzZXR0aW5nIGlzICdERUZBVUxUOiFhTlVMTDohZU5VTEwnKQogX0RFRkFVTFRfQ0lQSEVSUyA9ICdERUZBVUxUOiFhTlVMTDohZU5VTEw6IUxPVzohRVhQT1JUOiFTU0x2MicKIAorIyByZXN0cmljdGVkIGFuZCBtb3JlIHNlY3VyZSBjaXBoZXJzCisjIEhJR0g6IGhpZ2ggZW5jcnlwdGlvbiBjaXBoZXIgc3VpdGVzIHdpdGgga2V5IGxlbmd0aCA+PSAxMjggYml0cyAobm8gTUQ1KQorIyAhYU5VTEw6IG9ubHkgYXV0aGVudGljYXRlZCBjaXBoZXIgc3VpdGVzIChubyBhbm9ueW1vdXMgREgpCisjICFSQzQ6IG5vIFJDNCBzdHJlYW1pbmcgY2lwaGVyLCBSQzQgaXMgYnJva2VuCisjICFEU1M6IFJTQSBpcyBwcmVmZXJyZWQgb3ZlciBEU0EKK19SRVNUUklDVEVEX0NJUEhFUlMgPSAnSElHSDohYU5VTEw6IVJDNDohRFNTJworCiAKIGNsYXNzIENlcnRpZmljYXRlRXJyb3IoVmFsdWVFcnJvcik6CiAgICAgcGFzcwpAQCAtMjE5LDExICsyNjcsNTggQEAKICAgICAgICAgICAgICJzdWJqZWN0QWx0TmFtZSBmaWVsZHMgd2VyZSBmb3VuZCIpCiAKIAorRGVmYXVsdFZlcmlmeVBhdGhzID0gbmFtZWR0dXBsZSgiRGVmYXVsdFZlcmlmeVBhdGhzIiwKKyAgICAiY2FmaWxlIGNhcGF0aCBvcGVuc3NsX2NhZmlsZV9lbnYgb3BlbnNzbF9jYWZpbGUgb3BlbnNzbF9jYXBhdGhfZW52ICIKKyAgICAib3BlbnNzbF9jYXBhdGgiKQorCitkZWYgZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCk6CisgICAgIiIiUmV0dXJuIHBhdGhzIHRvIGRlZmF1bHQgY2FmaWxlIGFuZCBjYXBhdGguCisgICAgIiIiCisgICAgcGFydHMgPSBfc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKyAgICAjIGVudmlyb25tZW50IHZhcnMgc2hhZG93IHBhdGhzCisgICAgY2FmaWxlID0gb3MuZW52aXJvbi5nZXQocGFydHNbMF0sIHBhcnRzWzFdKQorICAgIGNhcGF0aCA9IG9zLmVudmlyb24uZ2V0KHBhcnRzWzJdLCBwYXJ0c1szXSkKKworICAgIHJldHVybiBEZWZhdWx0VmVyaWZ5UGF0aHMoY2FmaWxlIGlmIG9zLnBhdGguaXNmaWxlKGNhZmlsZSkgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoIGlmIG9zLnBhdGguaXNkaXIoY2FwYXRoKSBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFydHMpCisKKworY2xhc3MgX0FTTjFPYmplY3QobmFtZWR0dXBsZSgiX0FTTjFPYmplY3QiLCAibmlkIHNob3J0bmFtZSBsb25nbmFtZSBvaWQiKSk6CisgICAgIiIiQVNOLjEgb2JqZWN0IGlkZW50aWZpZXIgbG9va3VwCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCkKKworICAgIGRlZiBfX25ld19fKGNscywgb2lkKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsICpfdHh0Mm9iaihvaWQsIG5hbWU9RmFsc2UpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21uaWQoY2xzLCBuaWQpOgorICAgICAgICAiIiJDcmVhdGUgX0FTTjFPYmplY3QgZnJvbSBPcGVuU1NMIG51bWVyaWMgSUQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCAqX25pZDJvYmoobmlkKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tbmFtZShjbHMsIG5hbWUpOgorICAgICAgICAiIiJDcmVhdGUgX0FTTjFPYmplY3QgZnJvbSBzaG9ydCBuYW1lLCBsb25nIG5hbWUgb3IgT0lECisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKl90eHQyb2JqKG5hbWUsIG5hbWU9VHJ1ZSkpCisKKworY2xhc3MgUHVycG9zZShfQVNOMU9iamVjdCwgX0VudW0pOgorICAgICIiIlNTTENvbnRleHQgcHVycG9zZSBmbGFncyB3aXRoIFg1MDl2MyBFeHRlbmRlZCBLZXkgVXNhZ2Ugb2JqZWN0cworICAgICIiIgorICAgIFNFUlZFUl9BVVRIID0gJzEuMy42LjEuNS41LjcuMy4xJworICAgIENMSUVOVF9BVVRIID0gJzEuMy42LjEuNS41LjcuMy4yJworCisKIGNsYXNzIFNTTENvbnRleHQoX1NTTENvbnRleHQpOgogICAgICIiIkFuIFNTTENvbnRleHQgaG9sZHMgdmFyaW91cyBTU0wtcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kCiAgICAgZGF0YSwgc3VjaCBhcyBjZXJ0aWZpY2F0ZXMgYW5kIHBvc3NpYmx5IGEgcHJpdmF0ZSBrZXkuIiIiCiAKLSAgICBfX3Nsb3RzX18gPSAoJ3Byb3RvY29sJywpCisgICAgX19zbG90c19fID0gKCdwcm90b2NvbCcsICdfX3dlYWtyZWZfXycpCisgICAgX3dpbmRvd3NfY2VydF9zdG9yZXMgPSAoIkNBIiwgIlJPT1QiKQogCiAgICAgZGVmIF9fbmV3X18oY2xzLCBwcm90b2NvbCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgc2VsZiA9IF9TU0xDb250ZXh0Ll9fbmV3X18oY2xzLCBwcm90b2NvbCkKQEAgLTI1NSw2ICszNTAsOTAgQEAKIAogICAgICAgICBzZWxmLl9zZXRfbnBuX3Byb3RvY29scyhwcm90b3MpCiAKKyAgICBkZWYgX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyhzZWxmLCBzdG9yZW5hbWUsIHB1cnBvc2UpOgorICAgICAgICBjZXJ0cyA9IGJ5dGVhcnJheSgpCisgICAgICAgIGZvciBjZXJ0LCBlbmNvZGluZywgdHJ1c3QgaW4gZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVuYW1lKToKKyAgICAgICAgICAgICMgQ0EgY2VydHMgYXJlIG5ldmVyIFBLQ1MjNyBlbmNvZGVkCisgICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAieDUwOV9hc24iOgorICAgICAgICAgICAgICAgIGlmIHRydXN0IGlzIFRydWUgb3IgcHVycG9zZS5vaWQgaW4gdHJ1c3Q6CisgICAgICAgICAgICAgICAgICAgIGNlcnRzLmV4dGVuZChjZXJ0KQorICAgICAgICBzZWxmLmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2VydHMpCisgICAgICAgIHJldHVybiBjZXJ0cworCisgICAgZGVmIGxvYWRfZGVmYXVsdF9jZXJ0cyhzZWxmLCBwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IocHVycG9zZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBmb3Igc3RvcmVuYW1lIGluIHNlbGYuX3dpbmRvd3NfY2VydF9zdG9yZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9hZF93aW5kb3dzX3N0b3JlX2NlcnRzKHN0b3JlbmFtZSwgcHVycG9zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfY29udGV4dChwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgsICosIGNhZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSBTU0xDb250ZXh0IG9iamVjdCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuCisKKyAgICBOT1RFOiBUaGUgcHJvdG9jb2wgYW5kIHNldHRpbmdzIG1heSBjaGFuZ2UgYW55dGltZSB3aXRob3V0IHByaW9yCisgICAgICAgICAgZGVwcmVjYXRpb24uIFRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgZmFpciBiYWxhbmNlIGJldHdlZW4gbWF4aW11bQorICAgICAgICAgIGNvbXBhdGliaWxpdHkgYW5kIHNlY3VyaXR5LgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHB1cnBvc2UsIF9BU04xT2JqZWN0KToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisgICAgY29udGV4dCA9IFNTTENvbnRleHQoUFJPVE9DT0xfVExTdjEpCisgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCisgICAgY29udGV4dC5vcHRpb25zIHw9IE9QX05PX1NTTHYyCisgICAgIyBkaXNhbGxvdyBjaXBoZXJzIHdpdGgga25vd24gdnVsbmVyYWJpbGl0aWVzCisgICAgY29udGV4dC5zZXRfY2lwaGVycyhfUkVTVFJJQ1RFRF9DSVBIRVJTKQorICAgICMgdmVyaWZ5IGNlcnRzIGluIGNsaWVudCBtb2RlCisgICAgaWYgcHVycG9zZSA9PSBQdXJwb3NlLlNFUlZFUl9BVVRIOgorICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gQ0VSVF9SRVFVSVJFRAorICAgIGlmIGNhZmlsZSBvciBjYXBhdGggb3IgY2FkYXRhOgorICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCwgY2FkYXRhKQorICAgIGVsaWYgY29udGV4dC52ZXJpZnlfbW9kZSAhPSBDRVJUX05PTkU6CisgICAgICAgICMgbm8gZXhwbGljaXQgY2FmaWxlLCBjYXBhdGggb3IgY2FkYXRhIGJ1dCB0aGUgdmVyaWZ5IG1vZGUgaXMKKyAgICAgICAgIyBDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQuIExldCdzIHRyeSB0byBsb2FkIGRlZmF1bHQgc3lzdGVtCisgICAgICAgICMgcm9vdCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSBnaXZlbiBwdXJwb3NlLiBUaGlzIG1heSBmYWlsIHNpbGVudGx5LgorICAgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cyhwdXJwb3NlKQorICAgIHJldHVybiBjb250ZXh0CisKKworZGVmIF9jcmVhdGVfc3RkbGliX2NvbnRleHQocHJvdG9jb2w9UFJPVE9DT0xfU1NMdjIzLCAqLCBjZXJ0X3JlcXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPU5vbmUsIGtleWZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSwgY2FkYXRhPU5vbmUpOgorICAgICIiIkNyZWF0ZSBhIFNTTENvbnRleHQgb2JqZWN0IGZvciBQeXRob24gc3RkbGliIG1vZHVsZXMKKworICAgIEFsbCBQeXRob24gc3RkbGliIG1vZHVsZXMgc2hhbGwgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIFNTTENvbnRleHQKKyAgICBvYmplY3RzIGluIG9yZGVyIHRvIGtlZXAgY29tbW9uIHNldHRpbmdzIGluIG9uZSBwbGFjZS4gVGhlIGNvbmZpZ3VyYXRpb24KKyAgICBpcyBsZXNzIHJlc3RyaWN0IHRoYW4gY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpJ3MgdG8gaW5jcmVhc2UgYmFja3dhcmQKKyAgICBjb21wYXRpYmlsaXR5LgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHB1cnBvc2UsIF9BU04xT2JqZWN0KToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisKKyAgICBjb250ZXh0ID0gU1NMQ29udGV4dChwcm90b2NvbCkKKyAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjIKKworICAgIGlmIGNlcnRfcmVxcyBpcyBub3QgTm9uZToKKyAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcworCisgICAgaWYga2V5ZmlsZSBhbmQgbm90IGNlcnRmaWxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgaWYgY2VydGZpbGUgb3Iga2V5ZmlsZToKKyAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCisKKyAgICAjIGxvYWQgQ0Egcm9vdCBjZXJ0cworICAgIGlmIGNhZmlsZSBvciBjYXBhdGggb3IgY2FkYXRhOgorICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCwgY2FkYXRhKQorICAgIGVsaWYgY29udGV4dC52ZXJpZnlfbW9kZSAhPSBDRVJUX05PTkU6CisgICAgICAgICMgbm8gZXhwbGljaXQgY2FmaWxlLCBjYXBhdGggb3IgY2FkYXRhIGJ1dCB0aGUgdmVyaWZ5IG1vZGUgaXMKKyAgICAgICAgIyBDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQuIExldCdzIHRyeSB0byBsb2FkIGRlZmF1bHQgc3lzdGVtCisgICAgICAgICMgcm9vdCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSBnaXZlbiBwdXJwb3NlLiBUaGlzIG1heSBmYWlsIHNpbGVudGx5LgorICAgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cyhwdXJwb3NlKQorCisgICAgcmV0dXJuIGNvbnRleHQKIAogY2xhc3MgU1NMU29ja2V0KHNvY2tldCk6CiAgICAgIiIiVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgc3VidHlwZSBvZiBzb2NrZXQuc29ja2V0IHRoYXQgd3JhcHMKQEAgLTI3MSw3ICs0NTAsNyBAQAogICAgICAgICAgICAgICAgICBfY29udGV4dD1Ob25lKToKIAogICAgICAgICBpZiBfY29udGV4dDoKLSAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IF9jb250ZXh0CisgICAgICAgICAgICBzZWxmLl9jb250ZXh0ID0gX2NvbnRleHQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNlcnZlcl9zaWRlIGFuZCBub3QgY2VydGZpbGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHNlcnZlci1zaWRlICIKQEAgLTI4MCwxNiArNDU5LDE2IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKQogICAgICAgICAgICAgaWYgY2VydGZpbGUgYW5kIG5vdCBrZXlmaWxlOgogICAgICAgICAgICAgICAgIGtleWZpbGUgPSBjZXJ0ZmlsZQotICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gU1NMQ29udGV4dChzc2xfdmVyc2lvbikKLSAgICAgICAgICAgIHNlbGYuY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcworICAgICAgICAgICAgc2VsZi5fY29udGV4dCA9IFNTTENvbnRleHQoc3NsX3ZlcnNpb24pCisgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCiAgICAgICAgICAgICBpZiBjYV9jZXJ0czoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhX2NlcnRzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhX2NlcnRzKQogICAgICAgICAgICAgaWYgY2VydGZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKICAgICAgICAgICAgIGlmIG5wbl9wcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9ucG5fcHJvdG9jb2xzKG5wbl9wcm90b2NvbHMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5zZXRfbnBuX3Byb3RvY29scyhucG5fcHJvdG9jb2xzKQogICAgICAgICAgICAgaWYgY2lwaGVyczoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X2NpcGhlcnMoY2lwaGVycykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnNldF9jaXBoZXJzKGNpcGhlcnMpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9yZXFzID0gY2VydF9yZXFzCkBAIC0zMDMsNyArNDgyLDYgQEAKICAgICAgICAgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUgPSBzZXJ2ZXJfaG9zdG5hbWUKICAgICAgICAgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdCA9IGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0CiAgICAgICAgIHNlbGYuc3VwcHJlc3NfcmFnZ2VkX2VvZnMgPSBzdXBwcmVzc19yYWdnZWRfZW9mcwotICAgICAgICBjb25uZWN0ZWQgPSBGYWxzZQogICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PXNvY2suZmFtaWx5LApAQCAtMzExLDI3ICs0ODksMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1zb2NrLnByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVubz1zb2NrLmZpbGVubygpKQogICAgICAgICAgICAgc2VsZi5zZXR0aW1lb3V0KHNvY2suZ2V0dGltZW91dCgpKQotICAgICAgICAgICAgIyBzZWUgaWYgaXQncyBjb25uZWN0ZWQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb2NrLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICBzb2NrLmRldGFjaCgpCiAgICAgICAgIGVsaWYgZmlsZW5vIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZpbGVubz1maWxlbm8pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwgZmFtaWx5PWZhbWlseSwgdHlwZT10eXBlLCBwcm90bz1wcm90bykKIAorICAgICAgICAjIFNlZSBpZiB3ZSBhcmUgY29ubmVjdGVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZ2V0cGVlcm5hbWUoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm5lY3RlZCA9IFRydWUKKwogICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCiAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IGNvbm5lY3RlZAogICAgICAgICBpZiBjb25uZWN0ZWQ6CiAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgU1NMIG9iamVjdAogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuY29udGV4dC5fd3JhcF9zb2NrZXQoc2VsZiwgc2VydmVyX3NpZGUsCisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5fY29udGV4dC5fd3JhcF9zb2NrZXQoc2VsZiwgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICAgICAgaWYgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q6CiAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLmdldHRpbWVvdXQoKQpAQCAtMzQwLDEwICs1MjAsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImRvX2hhbmRzaGFrZV9vbl9jb25uZWN0IHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGZvciBub24tYmxvY2tpbmcgc29ja2V0cyIpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlKCkKIAotICAgICAgICAgICAgZXhjZXB0IHNvY2tldF9lcnJvciBhcyB4OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSB4CiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRleHQKKworICAgIEBjb250ZXh0LnNldHRlcgorICAgIGRlZiBjb250ZXh0KHNlbGYsIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbnRleHQgPSBjdHgKKyAgICAgICAgc2VsZi5fc3Nsb2JqLmNvbnRleHQgPSBjdHgKKwogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkKCJDYW4ndCBkdXAoKSAlcyBpbnN0YW5jZXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCkBAIC0zNTIsMTEgKzU0MSwyMSBAQAogICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbiBoZXJlIGlmIHlvdSB3aXNoIHRvIGNoZWNrIGZvciBzcHVyaW91cyBjbG9zZXMKICAgICAgICAgcGFzcwogCisgICAgZGVmIF9jaGVja19jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICAjIGdldHBlZXJuYW1lKCkgd2lsbCByYWlzZSBFTk9UQ09OTiBpZiB0aGUgc29ja2V0IGlzIHJlYWxseQorICAgICAgICAgICAgIyBub3QgY29ubmVjdGVkOyBub3RlIHRoYXQgd2UgY2FuIGJlIGNvbm5lY3RlZCBldmVuIHdpdGhvdXQKKyAgICAgICAgICAgICMgX2Nvbm5lY3RlZCBiZWluZyBzZXQsIGUuZy4gaWYgY29ubmVjdCgpIGZpcnN0IHJldHVybmVkCisgICAgICAgICAgICAjIEVBR0FJTi4KKyAgICAgICAgICAgIHNlbGYuZ2V0cGVlcm5hbWUoKQorCiAgICAgZGVmIHJlYWQoc2VsZiwgbGVuPTAsIGJ1ZmZlcj1Ob25lKToKICAgICAgICAgIiIiUmVhZCB1cCB0byBMRU4gYnl0ZXMgYW5kIHJldHVybiB0aGVtLgogICAgICAgICBSZXR1cm4gemVyby1sZW5ndGggc3RyaW5nIG9uIEVPRi4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZWFkIG9uIGNsb3NlZCBvciB1bndyYXBwZWQgU1NMIHNvY2tldC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBidWZmZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NzbG9iai5yZWFkKGxlbiwgYnVmZmVyKQpAQCAtMzc3LDYgKzU3Niw4IEBACiAgICAgICAgIG51bWJlciBvZiBieXRlcyBvZiBEQVRBIGFjdHVhbGx5IHRyYW5zbWl0dGVkLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3NzbG9iajoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIldyaXRlIG9uIGNsb3NlZCBvciB1bndyYXBwZWQgU1NMIHNvY2tldC4iKQogICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCiAKICAgICBkZWYgZ2V0cGVlcmNlcnQoc2VsZiwgYmluYXJ5X2Zvcm09RmFsc2UpOgpAQCAtMzg2LDYgKzU4Nyw3IEBACiAgICAgICAgIGNlcnRpZmljYXRlIHdhcyBwcm92aWRlZCwgYnV0IG5vdCB2YWxpZGF0ZWQuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBzZWxmLl9jaGVja19jb25uZWN0ZWQoKQogICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnBlZXJfY2VydGlmaWNhdGUoYmluYXJ5X2Zvcm0pCiAKICAgICBkZWYgc2VsZWN0ZWRfbnBuX3Byb3RvY29sKHNlbGYpOgpAQCAtNDE2LDE4ICs2MTgsMTcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gZmxhZ3Mgbm90IGFsbG93ZWQgaW4gY2FsbHMgdG8gc2VuZCgpIG9uICVzIiAlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU1NMRXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICAgICAgaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgICAgICAgICBlbGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBTU0xFcnJvciBhcyB4OgorICAgICAgICAgICAgICAgIGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgICAgIGVsaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB2CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoc2VsZiwgZGF0YSwgZmxhZ3MpCiAKQEAgLTUzNSwxMiArNzM2LDExIEBACiAKICAgICBkZWYgX3JlYWxfY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKLSAgICAgICAgIyBzZWxmLl9jbG9zZWQgPSBUcnVlCiAgICAgICAgIHNvY2tldC5fcmVhbF9jbG9zZShzZWxmKQogCiAgICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmLCBibG9jaz1GYWxzZSk6CiAgICAgICAgICIiIlBlcmZvcm0gYSBUTFMvU1NMIGhhbmRzaGFrZS4iIiIKLQorICAgICAgICBzZWxmLl9jaGVja19jb25uZWN0ZWQoKQogICAgICAgICB0aW1lb3V0ID0gc2VsZi5nZXR0aW1lb3V0KCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgdGltZW91dCA9PSAwLjAgYW5kIGJsb2NrOgpAQCAtNTY0LDExICs3NjQsMTEgQEAKICAgICAgICAgICAgICAgICByYyA9IE5vbmUKICAgICAgICAgICAgICAgICBzb2NrZXQuY29ubmVjdChzZWxmLCBhZGRyKQogICAgICAgICAgICAgaWYgbm90IHJjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgICAgICBpZiBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuIHJjCi0gICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICAgICAgcmFpc2UKIApAQCAtNjY2LDE1ICs4NjYsMTYgQEAKICAgICBJZiAnc3NsX3ZlcnNpb24nIGlzIHNwZWNpZmllZCwgdXNlIGl0IGluIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQuIiIiCiAKICAgICBob3N0LCBwb3J0ID0gYWRkcgotICAgIGlmIChjYV9jZXJ0cyBpcyBub3QgTm9uZSk6CisgICAgaWYgY2FfY2VydHMgaXMgbm90IE5vbmU6CiAgICAgICAgIGNlcnRfcmVxcyA9IENFUlRfUkVRVUlSRUQKICAgICBlbHNlOgogICAgICAgICBjZXJ0X3JlcXMgPSBDRVJUX05PTkUKLSAgICBzID0gY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcikKLSAgICBzID0gd3JhcF9zb2NrZXQocywgc3NsX3ZlcnNpb249c3NsX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0X3JlcXMsIGNhX2NlcnRzPWNhX2NlcnRzKQotICAgIGRlcmNlcnQgPSBzLmdldHBlZXJjZXJ0KFRydWUpCi0gICAgcy5jbG9zZSgpCisgICAgY29udGV4dCA9IF9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPWNlcnRfcmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Y2FfY2VydHMpCisgICAgd2l0aCAgY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcikgYXMgc29jazoKKyAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2spIGFzIHNzbHNvY2s6CisgICAgICAgICAgICBkZXJjZXJ0ID0gc3Nsc29jay5nZXRwZWVyY2VydChUcnVlKQogICAgIHJldHVybiBERVJfY2VydF90b19QRU1fY2VydChkZXJjZXJ0KQogCiBkZWYgZ2V0X3Byb3RvY29sX25hbWUocHJvdG9jb2xfY29kZSk6CmRpZmYgLS1naXQgYS9MaWIvc3RhdC5weSBiL0xpYi9zdGF0LnB5CmluZGV4IDcwNGFkZmUuLjNlZWNjM2UgMTAwNjQ0Ci0tLSBhL0xpYi9zdGF0LnB5CisrKyBiL0xpYi9zdGF0LnB5CkBAIC0xNDcsMyArMTQ3LDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBlcm0uYXBwZW5kKCItIikKICAgICByZXR1cm4gIiIuam9pbihwZXJtKQorCisjIElmIGF2YWlsYWJsZSwgdXNlIEMgaW1wbGVtZW50YXRpb24KK3RyeToKKyAgICBmcm9tIF9zdGF0IGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3N0YXRpc3RpY3MucHkgYi9MaWIvc3RhdGlzdGljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjdhNmQxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3N0YXRpc3RpY3MucHkKQEAgLTAsMCArMSw2MTAgQEAKKyMjICBNb2R1bGUgc3RhdGlzdGljcy5weQorIyMKKyMjICBDb3B5cmlnaHQgKGMpIDIwMTMgU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4uCisjIworIyMgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyMgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMjICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMjCisjIyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIworIyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiIKK0Jhc2ljIHN0YXRpc3RpY3MgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGNhbGN1bGF0aW5nIHN0YXRpc3RpY3Mgb2YgZGF0YSwgaW5jbHVkaW5nCithdmVyYWdlcywgdmFyaWFuY2UsIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24uCisKK0NhbGN1bGF0aW5nIGF2ZXJhZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRnVuY3Rpb24gICAgICAgICAgICBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21lYW4gICAgICAgICAgICAgICAgQXJpdGhtZXRpYyBtZWFuIChhdmVyYWdlKSBvZiBkYXRhLgorbWVkaWFuICAgICAgICAgICAgICBNZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgZGF0YS4KK21lZGlhbl9sb3cgICAgICAgICAgTG93IG1lZGlhbiBvZiBkYXRhLgorbWVkaWFuX2hpZ2ggICAgICAgICBIaWdoIG1lZGlhbiBvZiBkYXRhLgorbWVkaWFuX2dyb3VwZWQgICAgICBNZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZ3JvdXBlZCBkYXRhLgorbW9kZSAgICAgICAgICAgICAgICBNb2RlIChtb3N0IGNvbW1vbiB2YWx1ZSkgb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NhbGN1bGF0ZSB0aGUgYXJpdGhtZXRpYyBtZWFuICgidGhlIGF2ZXJhZ2UiKSBvZiBkYXRhOgorCis+Pj4gbWVhbihbLTEuMCwgMi41LCAzLjI1LCA1Ljc1XSkKKzIuNjI1CisKKworQ2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBtZWRpYW4gb2YgZGlzY3JldGUgZGF0YToKKworPj4+IG1lZGlhbihbMiwgMywgNCwgNV0pCiszLjUKKworCitDYWxjdWxhdGUgdGhlIG1lZGlhbiwgb3IgNTB0aCBwZXJjZW50aWxlLCBvZiBkYXRhIGdyb3VwZWQgaW50byBjbGFzcyBpbnRlcnZhbHMKK2NlbnRyZWQgb24gdGhlIGRhdGEgdmFsdWVzIHByb3ZpZGVkLiBFLmcuIGlmIHlvdXIgZGF0YSBwb2ludHMgYXJlIHJvdW5kZWQgdG8KK3RoZSBuZWFyZXN0IHdob2xlIG51bWJlcjoKKworPj4+IG1lZGlhbl9ncm91cGVkKFsyLCAyLCAzLCAzLCAzLCA0XSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKzIuODMzMzMzMzMzMy4uLgorCitUaGlzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBpbiB0aGlzIHdheTogeW91IGhhdmUgdHdvIGRhdGEgcG9pbnRzIGluIHRoZSBjbGFzcworaW50ZXJ2YWwgMS41LTIuNSwgdGhyZWUgZGF0YSBwb2ludHMgaW4gdGhlIGNsYXNzIGludGVydmFsIDIuNS0zLjUsIGFuZCBvbmUgaW4KK3RoZSBjbGFzcyBpbnRlcnZhbCAzLjUtNC41LiBUaGUgbWVkaWFuIG9mIHRoZXNlIGRhdGEgcG9pbnRzIGlzIDIuODMzMy4uLgorCisKK0NhbGN1bGF0aW5nIHZhcmlhYmlsaXR5IG9yIHNwcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGdW5jdGlvbiAgICAgICAgICAgIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorcHZhcmlhbmNlICAgICAgICAgICBQb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGRhdGEuCit2YXJpYW5jZSAgICAgICAgICAgIFNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorcHN0ZGV2ICAgICAgICAgICAgICBQb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorc3RkZXYgICAgICAgICAgICAgICBTYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBzYW1wbGUgZGF0YToKKworPj4+IHN0ZGV2KFsyLjUsIDMuMjUsIDUuNSwgMTEuMjUsIDExLjc1XSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKzQuMzg5NjE4NDM0NDQuLi4KKworSWYgeW91IGhhdmUgcHJldmlvdXNseSBjYWxjdWxhdGVkIHRoZSBtZWFuLCB5b3UgY2FuIHBhc3MgaXQgYXMgdGhlIG9wdGlvbmFsCitzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGZvdXIgInNwcmVhZCIgZnVuY3Rpb25zIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKz4+PiBkYXRhID0gWzEsIDIsIDIsIDQsIDQsIDQsIDUsIDZdCis+Pj4gbXUgPSBtZWFuKGRhdGEpCis+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorMi41CisKKworRXhjZXB0aW9ucworLS0tLS0tLS0tLQorCitBIHNpbmdsZSBleGNlcHRpb24gaXMgZGVmaW5lZDogU3RhdGlzdGljc0Vycm9yIGlzIGEgc3ViY2xhc3Mgb2YgVmFsdWVFcnJvci4KKworIiIiCisKK19fYWxsX18gPSBbICdTdGF0aXN0aWNzRXJyb3InLAorICAgICAgICAgICAgJ3BzdGRldicsICdwdmFyaWFuY2UnLCAnc3RkZXYnLCAndmFyaWFuY2UnLAorICAgICAgICAgICAgJ21lZGlhbicsICAnbWVkaWFuX2xvdycsICdtZWRpYW5faGlnaCcsICdtZWRpYW5fZ3JvdXBlZCcsCisgICAgICAgICAgICAnbWVhbicsICdtb2RlJywKKyAgICAgICAgICBdCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgbWF0aAorCitmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorCisKKyMgPT09IEV4Y2VwdGlvbnMgPT09CisKK2NsYXNzIFN0YXRpc3RpY3NFcnJvcihWYWx1ZUVycm9yKToKKyAgICBwYXNzCisKKworIyA9PT0gUHJpdmF0ZSB1dGlsaXRpZXMgPT09CisKK2RlZiBfc3VtKGRhdGEsIHN0YXJ0PTApOgorICAgICIiIl9zdW0oZGF0YSBbLCBzdGFydF0pIC0+IHZhbHVlCisKKyAgICBSZXR1cm4gYSBoaWdoLXByZWNpc2lvbiBzdW0gb2YgdGhlIGdpdmVuIG51bWVyaWMgZGF0YS4gSWYgb3B0aW9uYWwKKyAgICBhcmd1bWVudCBgYHN0YXJ0YGAgaXMgZ2l2ZW4sIGl0IGlzIGFkZGVkIHRvIHRoZSB0b3RhbC4gSWYgYGBkYXRhYGAgaXMKKyAgICBlbXB0eSwgYGBzdGFydGBgIChkZWZhdWx0aW5nIHRvIDApIGlzIHJldHVybmVkLgorCisKKyAgICBFeGFtcGxlcworICAgIC0tLS0tLS0tCisKKyAgICA+Pj4gX3N1bShbMywgMi4yNSwgNC41LCAtMC41LCAxLjBdLCAwLjc1KQorICAgIDExLjAKKworICAgIFNvbWUgc291cmNlcyBvZiByb3VuZC1vZmYgZXJyb3Igd2lsbCBiZSBhdm9pZGVkOgorCisgICAgPj4+IF9zdW0oWzFlNTAsIDEsIC0xZTUwXSAqIDEwMDApICAjIEJ1aWx0LWluIHN1bSByZXR1cm5zIHplcm8uCisgICAgMTAwMC4wCisKKyAgICBGcmFjdGlvbnMgYW5kIERlY2ltYWxzIGFyZSBhbHNvIHN1cHBvcnRlZDoKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiBfc3VtKFtGKDIsIDMpLCBGKDcsIDUpLCBGKDEsIDQpLCBGKDUsIDYpXSkKKyAgICBGcmFjdGlvbig2MywgMjApCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gZGF0YSA9IFtEKCIwLjEzNzUiKSwgRCgiMC4yMTA4IiksIEQoIjAuMzA2MSIpLCBEKCIwLjA0MTkiKV0KKyAgICA+Pj4gX3N1bShkYXRhKQorICAgIERlY2ltYWwoJzAuNjk2MycpCisKKyAgICAiIiIKKyAgICBuLCBkID0gX2V4YWN0X3JhdGlvKHN0YXJ0KQorICAgIFQgPSB0eXBlKHN0YXJ0KQorICAgIHBhcnRpYWxzID0ge2Q6IG59ICAjIG1hcCB7ZGVub21pbmF0b3I6IHN1bSBvZiBudW1lcmF0b3JzfQorICAgICMgTWljcm8tb3B0aW1pemF0aW9ucy4KKyAgICBjb2VyY2VfdHlwZXMgPSBfY29lcmNlX3R5cGVzCisgICAgZXhhY3RfcmF0aW8gPSBfZXhhY3RfcmF0aW8KKyAgICBwYXJ0aWFsc19nZXQgPSBwYXJ0aWFscy5nZXQKKyAgICAjIEFkZCBudW1lcmF0b3JzIGZvciBlYWNoIGRlbm9taW5hdG9yLCBhbmQgdHJhY2sgdGhlICJjdXJyZW50IiB0eXBlLgorICAgIGZvciB4IGluIGRhdGE6CisgICAgICAgIFQgPSBfY29lcmNlX3R5cGVzKFQsIHR5cGUoeCkpCisgICAgICAgIG4sIGQgPSBleGFjdF9yYXRpbyh4KQorICAgICAgICBwYXJ0aWFsc1tkXSA9IHBhcnRpYWxzX2dldChkLCAwKSArIG4KKyAgICBpZiBOb25lIGluIHBhcnRpYWxzOgorICAgICAgICBhc3NlcnQgaXNzdWJjbGFzcyhULCAoZmxvYXQsIERlY2ltYWwpKQorICAgICAgICBhc3NlcnQgbm90IG1hdGguaXNmaW5pdGUocGFydGlhbHNbTm9uZV0pCisgICAgICAgIHJldHVybiBUKHBhcnRpYWxzW05vbmVdKQorICAgIHRvdGFsID0gRnJhY3Rpb24oKQorICAgIGZvciBkLCBuIGluIHNvcnRlZChwYXJ0aWFscy5pdGVtcygpKToKKyAgICAgICAgdG90YWwgKz0gRnJhY3Rpb24obiwgZCkKKyAgICBpZiBpc3N1YmNsYXNzKFQsIGludCk6CisgICAgICAgIGFzc2VydCB0b3RhbC5kZW5vbWluYXRvciA9PSAxCisgICAgICAgIHJldHVybiBUKHRvdGFsLm51bWVyYXRvcikKKyAgICBpZiBpc3N1YmNsYXNzKFQsIERlY2ltYWwpOgorICAgICAgICByZXR1cm4gVCh0b3RhbC5udW1lcmF0b3IpL3RvdGFsLmRlbm9taW5hdG9yCisgICAgcmV0dXJuIFQodG90YWwpCisKKworZGVmIF9leGFjdF9yYXRpbyh4KToKKyAgICAiIiJDb252ZXJ0IFJlYWwgbnVtYmVyIHggZXhhY3RseSB0byAobnVtZXJhdG9yLCBkZW5vbWluYXRvcikgcGFpci4KKworICAgID4+PiBfZXhhY3RfcmF0aW8oMC4yNSkKKyAgICAoMSwgNCkKKworICAgIHggaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50LCBGcmFjdGlvbiwgRGVjaW1hbCBvciBmbG9hdC4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaW50LCBGcmFjdGlvbgorICAgICAgICAgICAgcmV0dXJuICh4Lm51bWVyYXRvciwgeC5kZW5vbWluYXRvcikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBmbG9hdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiB4LmFzX2ludGVnZXJfcmF0aW8oKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICMgRGVjaW1hbAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9kZWNpbWFsX3RvX3JhdGlvKHgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiY2FuJ3QgY29udmVydCB0eXBlICd7fScgdG8gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnLmZvcm1hdCh0eXBlKHgpLl9fbmFtZV9fKSkgZnJvbSBOb25lCisgICAgZXhjZXB0IChPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgIyBJTkYgb3IgTkFOCisgICAgICAgIGlmIF9fZGVidWdfXzoKKyAgICAgICAgICAgICMgRGVjaW1hbCBzaWduYWxsaW5nIE5BTnMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBmbG9hdCA6LSgKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgRGVjaW1hbCk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCB4LmlzX2Zpbml0ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgbWF0aC5pc2Zpbml0ZSh4KQorICAgICAgICByZXR1cm4gKHgsIE5vbmUpCisKKworIyBGSVhNRSBUaGlzIGlzIGZhc3RlciB0aGFuIEZyYWN0aW9uLmZyb21fZGVjaW1hbCwgYnV0IHN0aWxsIHRvbyBzbG93LgorZGVmIF9kZWNpbWFsX3RvX3JhdGlvKGQpOgorICAgICIiIkNvbnZlcnQgRGVjaW1hbCBkIHRvIGV4YWN0IGludGVnZXIgcmF0aW8gKG51bWVyYXRvciwgZGVub21pbmF0b3IpLgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorICAgID4+PiBfZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIyLjYiKSkKKyAgICAoMjYsIDEwKQorCisgICAgIiIiCisgICAgc2lnbiwgZGlnaXRzLCBleHAgPSBkLmFzX3R1cGxlKCkKKyAgICBpZiBleHAgaW4gKCdGJywgJ24nLCAnTicpOiAgIyBJTkYsIE5BTiwgc05BTgorICAgICAgICBhc3NlcnQgbm90IGQuaXNfZmluaXRlKCkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgIG51bSA9IDAKKyAgICBmb3IgZGlnaXQgaW4gZGlnaXRzOgorICAgICAgICBudW0gPSBudW0qMTAgKyBkaWdpdAorICAgIGlmIHNpZ246CisgICAgICAgIG51bSA9IC1udW0KKyAgICBkZW4gPSAxMCoqLWV4cAorICAgIHJldHVybiAobnVtLCBkZW4pCisKKworZGVmIF9jb2VyY2VfdHlwZXMoVDEsIFQyKToKKyAgICAiIiJDb2VyY2UgdHlwZXMgVDEgYW5kIFQyIHRvIGEgY29tbW9uIHR5cGUuCisKKyAgICA+Pj4gX2NvZXJjZV90eXBlcyhpbnQsIGZsb2F0KQorICAgIDxjbGFzcyAnZmxvYXQnPgorCisgICAgQ29lcmNpb24gaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGlzIHRhYmxlLCB3aGVyZSAiTi9BIiBtZWFucworICAgIHRoYXQgYSBUeXBlRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgfCAgICAgICAgICB8IGludCAgICAgICB8IEZyYWN0aW9uICB8IERlY2ltYWwgICB8IGZsb2F0ICAgIHwKKyAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgIHwgaW50ICAgICAgfCBpbnQgICAgICAgfCBGcmFjdGlvbiAgfCBEZWNpbWFsICAgfCBmbG9hdCAgICB8CisgICAgfCBGcmFjdGlvbiB8IEZyYWN0aW9uICB8IEZyYWN0aW9uICB8IE4vQSAgICAgICB8IGZsb2F0ICAgIHwKKyAgICB8IERlY2ltYWwgIHwgRGVjaW1hbCAgIHwgTi9BICAgICAgIHwgRGVjaW1hbCAgIHwgZmxvYXQgICAgfAorICAgIHwgZmxvYXQgICAgfCBmbG9hdCAgICAgfCBmbG9hdCAgICAgfCBmbG9hdCAgICAgfCBmbG9hdCAgICB8CisgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKworICAgIFN1YmNsYXNzZXMgdHJ1bXAgdGhlaXIgcGFyZW50IGNsYXNzOyB0d28gc3ViY2xhc3NlcyBvZiB0aGUgc2FtZQorICAgIGJhc2UgY2xhc3Mgd2lsbCBiZSBjb2VyY2VkIHRvIHRoZSBzZWNvbmQgb2YgdGhlIHR3by4KKworICAgICIiIgorICAgICMgR2V0IHRoZSBjb21tb24vZmFzdCBjYXNlcyBvdXQgb2YgdGhlIHdheSBmaXJzdC4KKyAgICBpZiBUMSBpcyBUMjogcmV0dXJuIFQxCisgICAgaWYgVDEgaXMgaW50OiByZXR1cm4gVDIKKyAgICBpZiBUMiBpcyBpbnQ6IHJldHVybiBUMQorICAgICMgU3ViY2xhc3NlcyB0cnVtcCB0aGVpciBwYXJlbnQgY2xhc3MuCisgICAgaWYgaXNzdWJjbGFzcyhUMiwgVDEpOiByZXR1cm4gVDIKKyAgICBpZiBpc3N1YmNsYXNzKFQxLCBUMik6IHJldHVybiBUMQorICAgICMgRmxvYXRzIHRydW1wIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICBpZiBpc3N1YmNsYXNzKFQyLCBmbG9hdCk6IHJldHVybiBUMgorICAgIGlmIGlzc3ViY2xhc3MoVDEsIGZsb2F0KTogcmV0dXJuIFQxCisgICAgIyBTdWJjbGFzc2VzIG9mIHRoZSBzYW1lIGJhc2UgY2xhc3MgZ2l2ZSBwcmlvcml0eSB0byB0aGUgc2Vjb25kLgorICAgIGlmIFQxLl9fYmFzZV9fIGlzIFQyLl9fYmFzZV9fOiByZXR1cm4gVDIKKyAgICAjIE90aGVyd2lzZSwganVzdCBnaXZlIHVwLgorICAgIHJhaXNlIFR5cGVFcnJvcignY2Fubm90IGNvZXJjZSB0eXBlcyAlciBhbmQgJXInICUgKFQxLCBUMikpCisKKworZGVmIF9jb3VudHMoZGF0YSk6CisgICAgIyBHZW5lcmF0ZSBhIHRhYmxlIG9mIHNvcnRlZCAodmFsdWUsIGZyZXF1ZW5jeSkgcGFpcnMuCisgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ05vbmUgaXMgbm90IGl0ZXJhYmxlJykKKyAgICB0YWJsZSA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoZGF0YSkubW9zdF9jb21tb24oKQorICAgIGlmIG5vdCB0YWJsZToKKyAgICAgICAgcmV0dXJuIHRhYmxlCisgICAgIyBFeHRyYWN0IHRoZSB2YWx1ZXMgd2l0aCB0aGUgaGlnaGVzdCBmcmVxdWVuY3kuCisgICAgbWF4ZnJlcSA9IHRhYmxlWzBdWzFdCisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHRhYmxlKSk6CisgICAgICAgIGlmIHRhYmxlW2ldWzFdICE9IG1heGZyZXE6CisgICAgICAgICAgICB0YWJsZSA9IHRhYmxlWzppXQorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdGFibGUKKworCisjID09PSBNZWFzdXJlcyBvZiBjZW50cmFsIHRlbmRlbmN5IChhdmVyYWdlcykgPT09CisKK2RlZiBtZWFuKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgc2FtcGxlIGFyaXRobWV0aWMgbWVhbiBvZiBkYXRhLgorCisgICAgPj4+IG1lYW4oWzEsIDIsIDMsIDQsIDRdKQorICAgIDIuOAorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IG1lYW4oW0YoMywgNyksIEYoMSwgMjEpLCBGKDUsIDMpLCBGKDEsIDMpXSkKKyAgICBGcmFjdGlvbigxMywgMjEpCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gbWVhbihbRCgiMC41IiksIEQoIjAuNzUiKSwgRCgiMC42MjUiKSwgRCgiMC4zNzUiKV0pCisgICAgRGVjaW1hbCgnMC41NjI1JykKKworICAgIElmIGBgZGF0YWBgIGlzIGVtcHR5LCBTdGF0aXN0aWNzRXJyb3Igd2lsbCBiZSByYWlzZWQuCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdtZWFuIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBkYXRhIHBvaW50JykKKyAgICByZXR1cm4gX3N1bShkYXRhKS9uCisKKworIyBGSVhNRTogaW52ZXN0aWdhdGUgd2F5cyB0byBjYWxjdWxhdGUgbWVkaWFucyB3aXRob3V0IHNvcnRpbmc/IFF1aWNrc2VsZWN0PworZGVmIG1lZGlhbihkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIG1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBudW1lcmljIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCByZXR1cm4gdGhlIG1pZGRsZSBkYXRhIHBvaW50LgorICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBldmVuLCB0aGUgbWVkaWFuIGlzIGludGVycG9sYXRlZCBieQorICAgIHRha2luZyB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXM6CisKKyAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbihbMSwgMywgNSwgN10pCisgICAgNC4wCisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGlmIG4lMiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yXQorICAgIGVsc2U6CisgICAgICAgIGkgPSBuLy8yCisgICAgICAgIHJldHVybiAoZGF0YVtpIC0gMV0gKyBkYXRhW2ldKS8yCisKKworZGVmIG1lZGlhbl9sb3coZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBsb3cgbWVkaWFuIG9mIG51bWVyaWMgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgV2hlbiBpdCBpcyBldmVuLCB0aGUgc21hbGxlciBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1LCA3XSkKKyAgICAzCisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGlmIG4lMiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkYXRhW24vLzIgLSAxXQorCisKK2RlZiBtZWRpYW5faGlnaChkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIGhpZ2ggbWVkaWFuIG9mIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLgorICAgIFdoZW4gaXQgaXMgZXZlbiwgdGhlIGxhcmdlciBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDUsIDddKQorICAgIDUKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgcmV0dXJuIGRhdGFbbi8vMl0KKworCitkZWYgbWVkaWFuX2dyb3VwZWQoZGF0YSwgaW50ZXJ2YWw9MSk6CisgICAgIiIiIlJldHVybiB0aGUgNTB0aCBwZXJjZW50aWxlIChtZWRpYW4pIG9mIGdyb3VwZWQgY29udGludW91cyBkYXRhLgorCisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCA0LCA1XSkKKyAgICAzLjcKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzUyLCA1MiwgNTMsIDU0XSkKKyAgICA1Mi41CisKKyAgICBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1lZGlhbiBhcyB0aGUgNTB0aCBwZXJjZW50aWxlLCBhbmQgc2hvdWxkIGJlCisgICAgdXNlZCB3aGVuIHlvdXIgZGF0YSBpcyBjb250aW51b3VzIGFuZCBncm91cGVkLiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwKKyAgICB0aGUgdmFsdWVzIDEsIDIsIDMsIGV0Yy4gYWN0dWFsbHkgcmVwcmVzZW50IHRoZSBtaWRwb2ludCBvZiBjbGFzc2VzCisgICAgMC41LTEuNSwgMS41LTIuNSwgMi41LTMuNSwgZXRjLiBUaGUgbWlkZGxlIHZhbHVlIGZhbGxzIHNvbWV3aGVyZSBpbgorICAgIGNsYXNzIDMuNS00LjUsIGFuZCBpbnRlcnBvbGF0aW9uIGlzIHVzZWQgdG8gZXN0aW1hdGUgaXQuCisKKyAgICBPcHRpb25hbCBhcmd1bWVudCBgYGludGVydmFsYGAgcmVwcmVzZW50cyB0aGUgY2xhc3MgaW50ZXJ2YWwsIGFuZAorICAgIGRlZmF1bHRzIHRvIDEuIENoYW5naW5nIHRoZSBjbGFzcyBpbnRlcnZhbCBuYXR1cmFsbHkgd2lsbCBjaGFuZ2UgdGhlCisgICAgaW50ZXJwb2xhdGVkIDUwdGggcGVyY2VudGlsZSB2YWx1ZToKKworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTEpCisgICAgMy4yNQorICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTIpCisgICAgMy41CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlIGRhdGEgcG9pbnRzIGFyZSBhdCBsZWFzdAorICAgIGBgaW50ZXJ2YWxgYCBhcGFydC4KKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGVsaWYgbiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVswXQorICAgICMgRmluZCB0aGUgdmFsdWUgYXQgdGhlIG1pZHBvaW50LiBSZW1lbWJlciB0aGlzIGNvcnJlc3BvbmRzIHRvIHRoZQorICAgICMgY2VudHJlIG9mIHRoZSBjbGFzcyBpbnRlcnZhbC4KKyAgICB4ID0gZGF0YVtuLy8yXQorICAgIGZvciBvYmogaW4gKHgsIGludGVydmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIChzdHIsIGJ5dGVzKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIG51bWJlciBidXQgZ290ICVyJyAlIG9iaikKKyAgICB0cnk6CisgICAgICAgIEwgPSB4IC0gaW50ZXJ2YWwvMiAgIyBUaGUgbG93ZXIgbGltaXQgb2YgdGhlIG1lZGlhbiBpbnRlcnZhbC4KKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAjIE1peGVkIHR5cGUuIEZvciBub3cgd2UganVzdCBjb2VyY2UgdG8gZmxvYXQuCisgICAgICAgIEwgPSBmbG9hdCh4KSAtIGZsb2F0KGludGVydmFsKS8yCisgICAgY2YgPSBkYXRhLmluZGV4KHgpICAjIE51bWJlciBvZiB2YWx1ZXMgYmVsb3cgdGhlIG1lZGlhbiBpbnRlcnZhbC4KKyAgICAjIEZJWE1FIFRoZSBmb2xsb3dpbmcgbGluZSBjb3VsZCBiZSBtb3JlIGVmZmljaWVudCBmb3IgYmlnIGxpc3RzLgorICAgIGYgPSBkYXRhLmNvdW50KHgpICAjIE51bWJlciBvZiBkYXRhIHBvaW50cyBpbiB0aGUgbWVkaWFuIGludGVydmFsLgorICAgIHJldHVybiBMICsgaW50ZXJ2YWwqKG4vMiAtIGNmKS9mCisKKworZGVmIG1vZGUoZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBtb3N0IGNvbW1vbiBkYXRhIHBvaW50IGZyb20gZGlzY3JldGUgb3Igbm9taW5hbCBkYXRhLgorCisgICAgYGBtb2RlYGAgYXNzdW1lcyBkaXNjcmV0ZSBkYXRhLCBhbmQgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZS4gVGhpcyBpcyB0aGUKKyAgICBzdGFuZGFyZCB0cmVhdG1lbnQgb2YgdGhlIG1vZGUgYXMgY29tbW9ubHkgdGF1Z2h0IGluIHNjaG9vbHM6CisKKyAgICA+Pj4gbW9kZShbMSwgMSwgMiwgMywgMywgMywgMywgNF0pCisgICAgMworCisgICAgVGhpcyBhbHNvIHdvcmtzIHdpdGggbm9taW5hbCAobm9uLW51bWVyaWMpIGRhdGE6CisKKyAgICA+Pj4gbW9kZShbInJlZCIsICJibHVlIiwgImJsdWUiLCAicmVkIiwgImdyZWVuIiwgInJlZCIsICJyZWQiXSkKKyAgICAncmVkJworCisgICAgSWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIG1vc3QgY29tbW9uIHZhbHVlLCBgYG1vZGVgYCB3aWxsIHJhaXNlCisgICAgU3RhdGlzdGljc0Vycm9yLgorICAgICIiIgorICAgICMgR2VuZXJhdGUgYSB0YWJsZSBvZiBzb3J0ZWQgKHZhbHVlLCBmcmVxdWVuY3kpIHBhaXJzLgorICAgIHRhYmxlID0gX2NvdW50cyhkYXRhKQorICAgIGlmIGxlbih0YWJsZSkgPT0gMToKKyAgICAgICAgcmV0dXJuIHRhYmxlWzBdWzBdCisgICAgZWxpZiB0YWJsZToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKAorICAgICAgICAgICAgICAgICdubyB1bmlxdWUgbW9kZTsgZm91bmQgJWQgZXF1YWxseSBjb21tb24gdmFsdWVzJyAlIGxlbih0YWJsZSkKKyAgICAgICAgICAgICAgICApCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdubyBtb2RlIGZvciBlbXB0eSBkYXRhJykKKworCisjID09PSBNZWFzdXJlcyBvZiBzcHJlYWQgPT09CisKKyMgU2VlIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vVmFyaWFuY2UuaHRtbAorIyAgICAgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9TYW1wbGVWYXJpYW5jZS5odG1sCisjICAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FsZ29yaXRobXNfZm9yX2NhbGN1bGF0aW5nX3ZhcmlhbmNlCisjCisjIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgdXNlIHRoZSBzby1jYWxsZWQgImNvbXB1dGF0aW9uYWwgZm9ybXVsYSBmb3IKKyMgdmFyaWFuY2UiLCBhcyB0aGF0IGlzIG9ubHkgc3VpdGFibGUgZm9yIGhhbmQgY2FsY3VsYXRpb25zIHdpdGggYSBzbWFsbAorIyBhbW91bnQgb2YgbG93LXByZWNpc2lvbiBkYXRhLiBJdCBoYXMgdGVycmlibGUgbnVtZXJpYyBwcm9wZXJ0aWVzLgorIworIyBTZWUgYSBjb21wYXJpc29uIG9mIHRocmVlIGNvbXB1dGF0aW9uYWwgbWV0aG9kcyBoZXJlOgorIyBodHRwOi8vd3d3LmpvaG5kY29vay5jb20vYmxvZy8yMDA4LzA5LzI2L2NvbXBhcmluZy10aHJlZS1tZXRob2RzLW9mLWNvbXB1dGluZy1zdGFuZGFyZC1kZXZpYXRpb24vCisKK2RlZiBfc3MoZGF0YSwgYz1Ob25lKToKKyAgICAiIiJSZXR1cm4gc3VtIG9mIHNxdWFyZSBkZXZpYXRpb25zIG9mIHNlcXVlbmNlIGRhdGEuCisKKyAgICBJZiBgYGNgYCBpcyBOb25lLCB0aGUgbWVhbiBpcyBjYWxjdWxhdGVkIGluIG9uZSBwYXNzLCBhbmQgdGhlIGRldmlhdGlvbnMKKyAgICBmcm9tIHRoZSBtZWFuIGFyZSBjYWxjdWxhdGVkIGluIGEgc2Vjb25kIHBhc3MuIE90aGVyd2lzZSwgZGV2aWF0aW9ucyBhcmUKKyAgICBjYWxjdWxhdGVkIGZyb20gYGBjYGAgYXMgZ2l2ZW4uIFVzZSB0aGUgc2Vjb25kIGNhc2Ugd2l0aCBjYXJlLCBhcyBpdCBjYW4KKyAgICBsZWFkIHRvIGdhcmJhZ2UgcmVzdWx0cy4KKyAgICAiIiIKKyAgICBpZiBjIGlzIE5vbmU6CisgICAgICAgIGMgPSBtZWFuKGRhdGEpCisgICAgc3MgPSBfc3VtKCh4LWMpKioyIGZvciB4IGluIGRhdGEpCisgICAgIyBUaGUgZm9sbG93aW5nIHN1bSBzaG91bGQgbWF0aGVtYXRpY2FsbHkgZXF1YWwgemVybywgYnV0IGR1ZSB0byByb3VuZGluZworICAgICMgZXJyb3IgbWF5IG5vdC4KKyAgICBzcyAtPSBfc3VtKCh4LWMpIGZvciB4IGluIGRhdGEpKioyL2xlbihkYXRhKQorICAgIGFzc2VydCBub3Qgc3MgPCAwLCAnbmVnYXRpdmUgc3VtIG9mIHNxdWFyZSBkZXZpYXRpb25zOiAlZicgJSBzcworICAgIHJldHVybiBzcworCisKK2RlZiB2YXJpYW5jZShkYXRhLCB4YmFyPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc2FtcGxlIHZhcmlhbmNlIG9mIGRhdGEuCisKKyAgICBkYXRhIHNob3VsZCBiZSBhbiBpdGVyYWJsZSBvZiBSZWFsLXZhbHVlZCBudW1iZXJzLCB3aXRoIGF0IGxlYXN0IHR3bworICAgIHZhbHVlcy4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHhiYXIsIGlmIGdpdmVuLCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICB0aGUgZGF0YS4gSWYgaXQgaXMgbWlzc2luZyBvciBOb25lLCB0aGUgbWVhbiBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgICBVc2UgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdXIgZGF0YSBpcyBhIHNhbXBsZSBmcm9tIGEgcG9wdWxhdGlvbi4gVG8KKyAgICBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLCBzZWUgYGBwdmFyaWFuY2VgYC4KKworICAgIEV4YW1wbGVzOgorCisgICAgPj4+IGRhdGEgPSBbMi43NSwgMS43NSwgMS4yNSwgMC4yNSwgMC41LCAxLjI1LCAzLjVdCisgICAgPj4+IHZhcmlhbmNlKGRhdGEpCisgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgICBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIG1lYW4gb2YgeW91ciBkYXRhLCB5b3UgY2FuIHBhc3MgaXQgYXMKKyAgICB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGBgeGJhcmBgIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKyAgICA+Pj4gbSA9IG1lYW4oZGF0YSkKKyAgICA+Pj4gdmFyaWFuY2UoZGF0YSwgbSkKKyAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgdGhhdCBgYHhiYXJgYCBpcyBhY3R1YWxseSB0aGUgbWVhbiBvZgorICAgIGBgZGF0YWBgLiBHaXZpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGB4YmFyYGAgbWF5IGxlYWQgdG8gaW52YWxpZCBvcgorICAgIGltcG9zc2libGUgcmVzdWx0cy4KKworICAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgIERlY2ltYWwoJzMxLjAxODc1JykKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiB2YXJpYW5jZShbRigxLCA2KSwgRigxLCAyKSwgRig1LCAzKV0pCisgICAgRnJhY3Rpb24oNjcsIDEwOCkKKworICAgICIiIgorICAgIGlmIGl0ZXIoZGF0YSkgaXMgZGF0YToKKyAgICAgICAgZGF0YSA9IGxpc3QoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA8IDI6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigndmFyaWFuY2UgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGRhdGEgcG9pbnRzJykKKyAgICBzcyA9IF9zcyhkYXRhLCB4YmFyKQorICAgIHJldHVybiBzcy8obi0xKQorCisKK2RlZiBwdmFyaWFuY2UoZGF0YSwgbXU9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGBgZGF0YWBgLgorCisgICAgZGF0YSBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgUmVhbC12YWx1ZWQgbnVtYmVycywgd2l0aCBhdCBsZWFzdCBvbmUKKyAgICB2YWx1ZS4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50IG11LCBpZiBnaXZlbiwgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAgdGhlIGRhdGEuIElmIGl0IGlzIG1pc3Npbmcgb3IgTm9uZSwgdGhlIG1lYW4gaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbi4KKyAgICBUbyBlc3RpbWF0ZSB0aGUgdmFyaWFuY2UgZnJvbSBhIHNhbXBsZSwgdGhlIGBgdmFyaWFuY2VgYCBmdW5jdGlvbiBpcworICAgIHVzdWFsbHkgYSBiZXR0ZXIgY2hvaWNlLgorCisgICAgRXhhbXBsZXM6CisKKyAgICA+Pj4gZGF0YSA9IFswLjAsIDAuMjUsIDAuMjUsIDEuMjUsIDEuNSwgMS43NSwgMi43NSwgMy4yNV0KKyAgICA+Pj4gcHZhcmlhbmNlKGRhdGEpCisgICAgMS4yNQorCisgICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHRoZSBkYXRhLCB5b3UgY2FuIHBhc3MgaXQgYXMKKyAgICB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKyAgICA+Pj4gbXUgPSBtZWFuKGRhdGEpCisgICAgPj4+IHB2YXJpYW5jZShkYXRhLCBtdSkKKyAgICAxLjI1CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgYGBtdWBgIGlzIGFjdHVhbGx5IHRoZSBtZWFuIG9mIGBgZGF0YWBgLgorICAgIEdpdmluZyBhcmJpdHJhcnkgdmFsdWVzIGZvciBgYG11YGAgbWF5IGxlYWQgdG8gaW52YWxpZCBvciBpbXBvc3NpYmxlCisgICAgcmVzdWx0cy4KKworICAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiBwdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICBEZWNpbWFsKCcyNC44MTUnKQorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IHB2YXJpYW5jZShbRigxLCA0KSwgRig1LCA0KSwgRigxLCAyKV0pCisgICAgRnJhY3Rpb24oMTMsIDcyKQorCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdwdmFyaWFuY2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGRhdGEgcG9pbnQnKQorICAgIHNzID0gX3NzKGRhdGEsIG11KQorICAgIHJldHVybiBzcy9uCisKKworZGVmIHN0ZGV2KGRhdGEsIHhiYXI9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc2FtcGxlIHZhcmlhbmNlLgorCisgICAgU2VlIGBgdmFyaWFuY2VgYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAgPj4+IHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAxLjA4MTA4NzQxNTUyMTk4MjcKKworICAgICIiIgorICAgIHZhciA9IHZhcmlhbmNlKGRhdGEsIHhiYXIpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmFyLnNxcnQoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1hdGguc3FydCh2YXIpCisKKworZGVmIHBzdGRldihkYXRhLCBtdT1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgorCisgICAgU2VlIGBgcHZhcmlhbmNlYGAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgID4+PiBwc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgIDAuOTg2ODkzMjczNTI3MjUxCisKKyAgICAiIiIKKyAgICB2YXIgPSBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmFyLnNxcnQoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1hdGguc3FydCh2YXIpCmRpZmYgLS1naXQgYS9MaWIvc3RydWN0LnB5IGIvTGliL3N0cnVjdC5weQppbmRleCA5YmZjMjNmLi5kNmJiYTU4IDEwMDY0NAotLS0gYS9MaWIvc3RydWN0LnB5CisrKyBiL0xpYi9zdHJ1Y3QucHkKQEAgLTEsNiArMSw3IEBACiBfX2FsbF9fID0gWwogICAgICMgRnVuY3Rpb25zCiAgICAgJ2NhbGNzaXplJywgJ3BhY2snLCAncGFja19pbnRvJywgJ3VucGFjaycsICd1bnBhY2tfZnJvbScsCisgICAgJ2l0ZXJfdW5wYWNrJywKIAogICAgICMgQ2xhc3NlcwogICAgICdTdHJ1Y3QnLApkaWZmIC0tZ2l0IGEvTGliL3N1YnByb2Nlc3MucHkgYi9MaWIvc3VicHJvY2Vzcy5weQppbmRleCBjM2EyNzg4Li44ODM1NWFkIDEwMDY0NAotLS0gYS9MaWIvc3VicHJvY2Vzcy5weQorKysgYi9MaWIvc3VicHJvY2Vzcy5weQpAQCAtMTQ1LDExICsxNDUsMTMgQEAKIGdldHN0YXR1c291dHB1dChjbWQpOgogICAgIFJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KIAotICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggb3MucG9wZW4oKSBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgIChzdGF0dXMsIG91dHB1dCkuICBjbWQgaXMgYWN0dWFsbHkgcnVuIGFzICd7IGNtZCA7IH0gMj4mMScsIHNvIHRoYXQgdGhlCi0gICAgcmV0dXJuZWQgb3V0cHV0IHdpbGwgY29udGFpbiBvdXRwdXQgb3IgZXJyb3IgbWVzc2FnZXMuIEEgdHJhaWxpbmcgbmV3bGluZQotICAgIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4gVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUKLSAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgQyBmdW5jdGlvbiB3YWl0KCkuICBFeGFtcGxlOgorICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggJ2NoZWNrX291dHB1dCcgYW5kCisgICAgcmV0dXJuIGEgMi10dXBsZSAoc3RhdHVzLCBvdXRwdXQpLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkLAorICAgIG1lYW5pbmcgdGhhdCB0aGUgcmVzdWx0IHdpdGggYmUgZGVjb2RlZCB0byBhIHN0cmluZy4KKworICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCisgICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgZnVuY3Rpb24gJ3dhaXQnLiAgRXhhbXBsZToKIAogICAgID4+PiBzdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dCgnbHMgL2Jpbi9scycpCiAgICAgKDAsICcvYmluL2xzJykKQEAgLTE3OCw2ICsxODAsOSBAQAogCiAgICAgPj4+IG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCiAKKyAgICBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50LCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LgogCiBFeGNlcHRpb25zCiAtLS0tLS0tLS0tCkBAIC0zOTgsMTkgKzQwMywyNCBAQAogICAgICAgICBoU3RkT3V0cHV0ID0gTm9uZQogICAgICAgICBoU3RkRXJyb3IgPSBOb25lCiAgICAgICAgIHdTaG93V2luZG93ID0gMAotICAgIGNsYXNzIHB5d2ludHlwZXM6Ci0gICAgICAgIGVycm9yID0gSU9FcnJvcgogZWxzZToKLSAgICBpbXBvcnQgc2VsZWN0Ci0gICAgX2hhc19wb2xsID0gaGFzYXR0cihzZWxlY3QsICdwb2xsJykKICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcwotICAgIF9jcmVhdGVfcGlwZSA9IF9wb3NpeHN1YnByb2Nlc3MuY2xvZXhlY19waXBlCisgICAgaW1wb3J0IHNlbGVjdAorICAgIGltcG9ydCBzZWxlY3RvcnMKIAogICAgICMgV2hlbiBzZWxlY3Qgb3IgcG9sbCBoYXMgaW5kaWNhdGVkIHRoYXQgdGhlIGZpbGUgaXMgd3JpdGFibGUsCiAgICAgIyB3ZSBjYW4gd3JpdGUgdXAgdG8gX1BJUEVfQlVGIGJ5dGVzIHdpdGhvdXQgcmlzayBvZiBibG9ja2luZy4KICAgICAjIFBPU0lYIGRlZmluZXMgUElQRV9CVUYgYXMgPj0gNTEyLgogICAgIF9QSVBFX0JVRiA9IGdldGF0dHIoc2VsZWN0LCAnUElQRV9CVUYnLCA1MTIpCiAKKyAgICAjIHBvbGwvc2VsZWN0IGhhdmUgdGhlIGFkdmFudGFnZSBvZiBub3QgcmVxdWlyaW5nIGFueSBleHRyYSBmaWxlCisgICAgIyBkZXNjcmlwdG9yLCBjb250cmFyaWx5IHRvIGVwb2xsL2txdWV1ZSAoYWxzbywgdGhleSByZXF1aXJlIGEgc2luZ2xlCisgICAgIyBzeXNjYWxsKS4KKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgICAgICBfUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBfUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCiAKIF9fYWxsX18gPSBbIlBvcGVuIiwgIlBJUEUiLCAiU1RET1VUIiwgImNhbGwiLCAiY2hlY2tfY2FsbCIsICJnZXRzdGF0dXNvdXRwdXQiLAogICAgICAgICAgICAiZ2V0b3V0cHV0IiwgImNoZWNrX291dHB1dCIsICJDYWxsZWRQcm9jZXNzRXJyb3IiLCAiREVWTlVMTCJdCkBAIC01MDYsNiArNTE2LDggQEAKICAgICBmb3IgZmxhZywgb3B0IGluIGZsYWdfb3B0X21hcC5pdGVtcygpOgogICAgICAgICB2ID0gZ2V0YXR0cihzeXMuZmxhZ3MsIGZsYWcpCiAgICAgICAgIGlmIHYgPiAwOgorICAgICAgICAgICAgaWYgZmxhZyA9PSAnaGFzaF9yYW5kb21pemF0aW9uJzoKKyAgICAgICAgICAgICAgICB2ID0gMSAjIEhhbmRsZSBzcGVjaWZpY2F0aW9uIG9mIGFuIGV4YWN0IHNlZWQKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctJyArIG9wdCAqIHYpCiAgICAgZm9yIG9wdCBpbiBzeXMud2Fybm9wdGlvbnM6CiAgICAgICAgIGFyZ3MuYXBwZW5kKCctVycgKyBvcHQpCkBAIC01NjgsMTQgKzU4MCwzMSBAQAogICAgIC4uLiAgICAgICAgICAgICAgc3RkZXJyPVNURE9VVCkKICAgICBiJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJwogCisgICAgVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb25hbCBhcmd1bWVudCwgImlucHV0IiwgYWxsb3dpbmcgeW91IHRvCisgICAgcGFzcyBhIHN0cmluZyB0byB0aGUgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgeW91IHVzZSB0aGlzIGFyZ3VtZW50CisgICAgeW91IG1heSBub3QgYWxzbyB1c2UgdGhlIFBvcGVuIGNvbnN0cnVjdG9yJ3MgInN0ZGluIiBhcmd1bWVudCwgYXMKKyAgICBpdCB0b28gd2lsbCBiZSB1c2VkIGludGVybmFsbHkuICBFeGFtcGxlOgorCisgICAgPj4+IGNoZWNrX291dHB1dChbInNlZCIsICItZSIsICJzL2Zvby9iYXIvIl0sCisgICAgLi4uICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQorICAgIGInd2hlbiBpbiB0aGUgY291cnNlIG9mIGJhcm1hbiBldmVudHNcbicKKwogICAgIElmIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlIGlzIHBhc3NlZCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKICAgICBzdHJpbmcgcmF0aGVyIHRoYW4gYnl0ZXMuCiAgICAgIiIiCiAgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQorICAgIGlmICdpbnB1dCcgaW4ga3dhcmdzOgorICAgICAgICBpZiAnc3RkaW4nIGluIGt3YXJnczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZGluIGFuZCBpbnB1dCBhcmd1bWVudHMgbWF5IG5vdCBib3RoIGJlIHVzZWQuJykKKyAgICAgICAgaW5wdXRkYXRhID0ga3dhcmdzWydpbnB1dCddCisgICAgICAgIGRlbCBrd2FyZ3NbJ2lucHV0J10KKyAgICAgICAga3dhcmdzWydzdGRpbiddID0gUElQRQorICAgIGVsc2U6CisgICAgICAgIGlucHV0ZGF0YSA9IE5vbmUKICAgICB3aXRoIFBvcGVuKCpwb3BlbmFyZ3MsIHN0ZG91dD1QSVBFLCAqKmt3YXJncykgYXMgcHJvY2VzczoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSh0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKGlucHV0ZGF0YSwgdGltZW91dD10aW1lb3V0KQogICAgICAgICBleGNlcHQgVGltZW91dEV4cGlyZWQ6CiAgICAgICAgICAgICBwcm9jZXNzLmtpbGwoKQogICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCkBAIC02NjQsMTMgKzY5MywxNSBAQAogIwogCiBkZWYgZ2V0c3RhdHVzb3V0cHV0KGNtZCk6Ci0gICAgIiIiUmV0dXJuIChzdGF0dXMsIG91dHB1dCkgb2YgZXhlY3V0aW5nIGNtZCBpbiBhIHNoZWxsLgorICAgICIiIiAgICBSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCiAKLSAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoIG9zLnBvcGVuKCkgYW5kIHJldHVybiBhIDItdHVwbGUKLSAgICAoc3RhdHVzLCBvdXRwdXQpLiAgY21kIGlzIGFjdHVhbGx5IHJ1biBhcyAneyBjbWQgOyB9IDI+JjEnLCBzbyB0aGF0IHRoZQotICAgIHJldHVybmVkIG91dHB1dCB3aWxsIGNvbnRhaW4gb3V0cHV0IG9yIGVycm9yIG1lc3NhZ2VzLiAgQSB0cmFpbGluZyBuZXdsaW5lCi0gICAgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LiAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUKLSAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgQyBmdW5jdGlvbiB3YWl0KCkuICBFeGFtcGxlOgorICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggJ2NoZWNrX291dHB1dCcgYW5kCisgICAgcmV0dXJuIGEgMi10dXBsZSAoc3RhdHVzLCBvdXRwdXQpLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkLAorICAgIG1lYW5pbmcgdGhhdCB0aGUgcmVzdWx0IHdpdGggYmUgZGVjb2RlZCB0byBhIHN0cmluZy4KKworICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCisgICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgZnVuY3Rpb24gJ3dhaXQnLiBFeGFtcGxlOgogCiAgICAgPj4+IGltcG9ydCBzdWJwcm9jZXNzCiAgICAgPj4+IHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCdscyAvYmluL2xzJykKQEAgLTgyMCw3ICs4NTEsNyBAQAogICAgICAgICAgICAgZm9yIGYgaW4gZmlsdGVyKE5vbmUsIChzZWxmLnN0ZGluLCBzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzICAjIElnbm9yZSBFQkFERiBvciBvdGhlciBlcnJvcnMuCiAKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zZWRfY2hpbGRfcGlwZV9mZHM6CkBAIC04MzYsNyArODY3LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gdG9fY2xvc2U6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHJhaXNlCkBAIC05MDAsNyArOTMxLDcgQEAKICAgICAgICAgICAgICAgICBpZiBpbnB1dDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBJUEUgYW5kIGUuZXJybm8gIT0gZXJybm8uRUlOVkFMOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCkBAIC0xMDMyLDIzICsxMDYzLDYgQEAKICAgICAgICAgICAgIHJldHVybiBIYW5kbGUoaCkKIAogCi0gICAgICAgIGRlZiBfZmluZF93OXhwb3BlbihzZWxmKToKLSAgICAgICAgICAgICIiIkZpbmQgYW5kIHJldHVybiBhYnNvbHV0IHBhdGggdG8gdzl4cG9wZW4uZXhlIiIiCi0gICAgICAgICAgICB3OXhwb3BlbiA9IG9zLnBhdGguam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX3dpbmFwaS5HZXRNb2R1bGVGaWxlTmFtZSgwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidzl4cG9wZW4uZXhlIikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3OXhwb3Blbik6Ci0gICAgICAgICAgICAgICAgIyBFZWVrIC0gZmlsZS1ub3QtZm91bmQgLSBwb3NzaWJseSBhbiBlbWJlZGRpbmcKLSAgICAgICAgICAgICAgICAjIHNpdHVhdGlvbiAtIHNlZSBpZiB3ZSBjYW4gbG9jYXRlIGl0IGluIHN5cy5leGVjX3ByZWZpeAotICAgICAgICAgICAgICAgIHc5eHBvcGVuID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYmFzZV9leGVjX3ByZWZpeCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInc5eHBvcGVuLmV4ZSIpCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHc5eHBvcGVuKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgbG9jYXRlIHc5eHBvcGVuLmV4ZSwgd2hpY2ggaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRlZCBmb3IgUG9wZW4gdG8gd29yayB3aXRoIHlvdXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoZWxsIG9yIHBsYXRmb3JtLiIpCi0gICAgICAgICAgICByZXR1cm4gdzl4cG9wZW4KLQotCiAgICAgICAgIGRlZiBfZXhlY3V0ZV9jaGlsZChzZWxmLCBhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2ZkcywgY3dkLCBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbywgY3JlYXRpb25mbGFncywgc2hlbGwsCkBAIC0xMDc3LDIxICsxMDkxLDYgQEAKICAgICAgICAgICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IF93aW5hcGkuU1dfSElERQogICAgICAgICAgICAgICAgIGNvbXNwZWMgPSBvcy5lbnZpcm9uLmdldCgiQ09NU1BFQyIsICJjbWQuZXhlIikKICAgICAgICAgICAgICAgICBhcmdzID0gJ3t9IC9jICJ7fSInLmZvcm1hdCAoY29tc3BlYywgYXJncykKLSAgICAgICAgICAgICAgICBpZiAoX3dpbmFwaS5HZXRWZXJzaW9uKCkgPj0gMHg4MDAwMDAwMCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShjb21zcGVjKS5sb3dlcigpID09ICJjb21tYW5kLmNvbSIpOgotICAgICAgICAgICAgICAgICAgICAjIFdpbjl4LCBvciB1c2luZyBjb21tYW5kLmNvbSBvbiBOVC4gV2UgbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAjIHVzZSB0aGUgdzl4cG9wZW4gaW50ZXJtZWRpYXRlIHByb2dyYW0uIEZvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgICMgaW5mb3JtYXRpb24sIHNlZSBLQiBRMTUwOTU2Ci0gICAgICAgICAgICAgICAgICAgICMgKGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDExMTA1MDg0MDAyL2h0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vc3VwcG9ydC9rYi9hcnRpY2xlcy9RMTUwLzkvNTYuYXNwKQotICAgICAgICAgICAgICAgICAgICB3OXhwb3BlbiA9IHNlbGYuX2ZpbmRfdzl4cG9wZW4oKQotICAgICAgICAgICAgICAgICAgICBhcmdzID0gJyIlcyIgJXMnICUgKHc5eHBvcGVuLCBhcmdzKQotICAgICAgICAgICAgICAgICAgICAjIE5vdCBwYXNzaW5nIENSRUFURV9ORVdfQ09OU09MRSBoYXMgYmVlbiBrbm93biB0bwotICAgICAgICAgICAgICAgICAgICAjIGNhdXNlIHJhbmRvbSBmYWlsdXJlcyBvbiB3aW45eC4gIFNwZWNpZmljYWxseSBhCi0gICAgICAgICAgICAgICAgICAgICMgZGlhbG9nOiAiWW91ciBwcm9ncmFtIGFjY2Vzc2VkIG1lbSBjdXJyZW50bHkgaW4KLSAgICAgICAgICAgICAgICAgICAgIyB1c2UgYXQgeHh4IiBhbmQgYSBob3BlZnVsIHdhcm5pbmcgYWJvdXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgc3RhYmlsaXR5IG9mIHlvdXIgc3lzdGVtLiAgQ29zdCBpcyBDdHJsK0Mgd29uJ3QKLSAgICAgICAgICAgICAgICAgICAgIyBraWxsIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzIHw9IF93aW5hcGkuQ1JFQVRFX05FV19DT05TT0xFCiAKICAgICAgICAgICAgICMgU3RhcnQgdGhlIHByb2Nlc3MKICAgICAgICAgICAgIHRyeToKQEAgLTExMDMsMTIgKzExMDIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8pCi0gICAgICAgICAgICBleGNlcHQgcHl3aW50eXBlcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICMgVHJhbnNsYXRlIHB5d2ludHlwZXMuZXJyb3IgdG8gV2luZG93c0Vycm9yLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICMgYSBzdWJjbGFzcyBvZiBPU0Vycm9yLiAgRklYTUU6IFdlIHNob3VsZCByZWFsbHkKLSAgICAgICAgICAgICAgICAjIHRyYW5zbGF0ZSBlcnJubyB1c2luZyBfc3lzX2Vycmxpc3QgKG9yIHNpbWlsYXIpLCBidXQKLSAgICAgICAgICAgICAgICAjIGhvdyBjYW4gdGhpcyBiZSBkb25lIGZyb20gUHl0aG9uPwotICAgICAgICAgICAgICAgIHJhaXNlIFdpbmRvd3NFcnJvcigqZS5hcmdzKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAjIENoaWxkIGlzIGxhdW5jaGVkLiBDbG9zZSB0aGUgcGFyZW50J3MgY29weSBvZiB0aG9zZSBwaXBlCiAgICAgICAgICAgICAgICAgIyBoYW5kbGVzIHRoYXQgb25seSB0aGUgY2hpbGQgc2hvdWxkIGhhdmUgb3Blbi4gIFlvdSBuZWVkCkBAIC0xMTkzLDcgKzExODYsNyBAQAogICAgICAgICAgICAgICAgIGlmIGlucHV0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLndyaXRlKGlucHV0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FUElQRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQpAQCAtMTI3MSw3ICsxMjY0LDcgQEAKICAgICAgICAgICAgIGlmIHN0ZGluIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRpbiA9PSBQSVBFOgotICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRpbiA9PSBERVZOVUxMOgogICAgICAgICAgICAgICAgIHAyY3JlYWQgPSBzZWxmLl9nZXRfZGV2bnVsbCgpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RkaW4sIGludCk6CkBAIC0xMjgzLDcgKzEyNzYsNyBAQAogICAgICAgICAgICAgaWYgc3Rkb3V0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRvdXQgPT0gUElQRToKLSAgICAgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3Rkb3V0ID09IERFVk5VTEw6CiAgICAgICAgICAgICAgICAgYzJwd3JpdGUgPSBzZWxmLl9nZXRfZGV2bnVsbCgpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3Rkb3V0LCBpbnQpOgpAQCAtMTI5NSw3ICsxMjg4LDcgQEAKICAgICAgICAgICAgIGlmIHN0ZGVyciBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBTVERPVVQ6CiAgICAgICAgICAgICAgICAgZXJyd3JpdGUgPSBjMnB3cml0ZQogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gREVWTlVMTDoKQEAgLTEzNDcsNyArMTM0MCw3IEBACiAgICAgICAgICAgICAjIEZvciB0cmFuc2ZlcnJpbmcgcG9zc2libGUgZXhlYyBmYWlsdXJlIGZyb20gY2hpbGQgdG8gcGFyZW50LgogICAgICAgICAgICAgIyBEYXRhIGZvcm1hdDogImV4Y2VwdGlvbiBuYW1lOmhleCBlcnJubzpkZXNjcmlwdGlvbiIKICAgICAgICAgICAgICMgUGlja2xlIGlzIG5vdCB1c2VkOyBpdCBpcyBjb21wbGV4IGFuZCBpbnZvbHZlcyBtZW1vcnkgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICMgV2UgbXVzdCBhdm9pZCBjb21wbGV4IHdvcmsgdGhhdCBjb3VsZCBpbnZvbHZlCkBAIC0xNDE3LDEzICsxNDEwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lLCBoZXhfZXJybm8sIGVycl9tc2cgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycGlwZV9kYXRhLnNwbGl0KGInOicsIDIpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSA9IGInUnVudGltZUVycm9yJworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSA9IGInU3VicHJvY2Vzc0Vycm9yJwogICAgICAgICAgICAgICAgICAgICBoZXhfZXJybm8gPSBiJzAnCiAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAoYidCYWQgZXhjZXB0aW9uIGRhdGEgZnJvbSBjaGlsZDogJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihlcnJwaXBlX2RhdGEpKQogICAgICAgICAgICAgICAgIGNoaWxkX2V4Y2VwdGlvbl90eXBlID0gZ2V0YXR0cigKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW5zLCBleGNlcHRpb25fbmFtZS5kZWNvZGUoJ2FzY2lpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzRXJyb3IpCiAgICAgICAgICAgICAgICAgZXJyX21zZyA9IGVycl9tc2cuZGVjb2RlKGVycm9ycz0ic3Vycm9nYXRlcGFzcyIpCiAgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhjaGlsZF9leGNlcHRpb25fdHlwZSwgT1NFcnJvcikgYW5kIGhleF9lcnJubzoKICAgICAgICAgICAgICAgICAgICAgZXJybm9fbnVtID0gaW50KGhleF9lcnJubywgMTYpCkBAIC0xNDUzLDExICsxNDQ2LDExIEBACiAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX1dFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBTaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCisgICAgICAgICAgICAgICAgcmFpc2UgU3VicHJvY2Vzc0Vycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCiAKIAogICAgICAgICBkZWYgX2ludGVybmFsX3BvbGwoc2VsZiwgX2RlYWRzdGF0ZT1Ob25lLCBfd2FpdHBpZD1vcy53YWl0cGlkLAotICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9vc19lcnJvcj1vcy5lcnJvciwgX0VDSElMRD1lcnJuby5FQ0hJTEQpOgorICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9FQ0hJTEQ9ZXJybm8uRUNISUxEKToKICAgICAgICAgICAgICIiIkNoZWNrIGlmIGNoaWxkIHByb2Nlc3MgaGFzIHRlcm1pbmF0ZWQuICBSZXR1cm5zIHJldHVybmNvZGUKICAgICAgICAgICAgIGF0dHJpYnV0ZS4KIApAQCAtMTQ3MCw3ICsxNDYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBfd2FpdHBpZChzZWxmLnBpZCwgX1dOT0hBTkcpCiAgICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKLSAgICAgICAgICAgICAgICBleGNlcHQgX29zX2Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgX2RlYWRzdGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IF9kZWFkc3RhdGUKICAgICAgICAgICAgICAgICAgICAgZWxpZiBlLmVycm5vID09IF9FQ0hJTEQ6CkBAIC0xNTQ0LDEyICsxNTM3LDY1IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IGlucHV0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKIAotICAgICAgICAgICAgaWYgX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fY29tbXVuaWNhdGVfd2l0aF9wb2xsKGlucHV0LCBlbmR0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9jb21tdW5pY2F0ZV93aXRoX3NlbGVjdChpbnB1dCwgZW5kdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKKyAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUKKworICAgICAgICAgICAgIyBPbmx5IGNyZWF0ZSB0aGlzIG1hcHBpbmcgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dCA9IHt9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XSA9IFtdCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3RkZXJyXSA9IFtdCisKKyAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XQorICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fZmlsZW9iajJvdXRwdXRbc2VsZi5zdGRlcnJdCisKKyAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCisKKyAgICAgICAgICAgIHdpdGggX1BvcGVuU2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGFuZCBpbnB1dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZi5zdGRpbiwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLnN0ZG91dCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYuc3RkZXJyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAgICAgICAgIHdoaWxlIHNlbGVjdG9yLmdldF9tYXAoKToKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgYW5kIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCisKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBzZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGltZW91dChlbmR0aW1lLCBvcmlnX3RpbWVvdXQpCisKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggUmV3cml0ZSB0aGVzZSB0byB1c2Ugbm9uLWJsb2NraW5nIEkvTyBvbiB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAjIG9iamVjdHM7IHRoZXkgYXJlIG5vIGxvbmdlciB1c2luZyBDIHN0ZGlvIQorCisgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIGV2ZW50cyBpbiByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleS5maWxlb2JqIGlzIHNlbGYuc3RkaW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9pbnB1dFtzZWxmLl9pbnB1dF9vZmZzZXQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IG9zLndyaXRlKGtleS5mZCwgY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnVucmVnaXN0ZXIoa2V5LmZpbGVvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5LmZpbGVvYmogaW4gKHNlbGYuc3Rkb3V0LCBzZWxmLnN0ZGVycik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoa2V5LmZkLCA0MDk2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXRba2V5LmZpbGVvYmpdLmFwcGVuZChkYXRhKQogCiAgICAgICAgICAgICBzZWxmLndhaXQodGltZW91dD1zZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKSkKIApAQCAtMTU4MywxNjcgKzE2MjksNiBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuX2lucHV0LmVuY29kZShzZWxmLnN0ZGluLmVuY29kaW5nKQogCiAKLSAgICAgICAgZGVmIF9jb21tdW5pY2F0ZV93aXRoX3BvbGwoc2VsZiwgaW5wdXQsIGVuZHRpbWUsIG9yaWdfdGltZW91dCk6Ci0gICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCi0gICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCi0KLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZSA9IHt9Ci0KLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIGRlZiByZWdpc3Rlcl9hbmRfYXBwZW5kKGZpbGVfb2JqLCBldmVudG1hc2spOgotICAgICAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihmaWxlX29iai5maWxlbm8oKSwgZXZlbnRtYXNrKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGVbZmlsZV9vYmouZmlsZW5vKCldID0gZmlsZV9vYmoKLQotICAgICAgICAgICAgZGVmIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCk6Ci0gICAgICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoZmQpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZVtmZF0uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGUucG9wKGZkKQotCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGFuZCBpbnB1dDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3RkaW4sIHNlbGVjdC5QT0xMT1VUKQotCi0gICAgICAgICAgICAjIE9ubHkgY3JlYXRlIHRoaXMgbWFwcGluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHkuCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dCA9IHt9Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZG91dC5maWxlbm8oKV0gPSBbXQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRlcnIuZmlsZW5vKCldID0gW10KLQotICAgICAgICAgICAgc2VsZWN0X1BPTExJTl9QT0xMUFJJID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3Rkb3V0LCBzZWxlY3RfUE9MTElOX1BPTExQUkkpCi0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3Rkb3V0LmZpbGVubygpXQotICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZGVyciwgc2VsZWN0X1BPTExJTl9QT0xMUFJJKQotICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZGVyci5maWxlbm8oKV0KLQotICAgICAgICAgICAgc2VsZi5fc2F2ZV9pbnB1dChpbnB1dCkKLQotICAgICAgICAgICAgd2hpbGUgc2VsZi5fZmQyZmlsZToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHBvbGxlci5wb2xsKHRpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQotCi0gICAgICAgICAgICAgICAgIyBYWFggUmV3cml0ZSB0aGVzZSB0byB1c2Ugbm9uLWJsb2NraW5nIEkvTyBvbiB0aGUKLSAgICAgICAgICAgICAgICAjIGZpbGUgb2JqZWN0czsgdGhleSBhcmUgbm8gbG9uZ2VyIHVzaW5nIEMgc3RkaW8hCi0KLSAgICAgICAgICAgICAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgJiBzZWxlY3QuUE9MTE9VVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5faW5wdXRbc2VsZi5faW5wdXRfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArPSBvcy53cml0ZShmZCwgY2h1bmspCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dF9vZmZzZXQgPj0gbGVuKHNlbGYuX2lucHV0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotICAgICAgICAgICAgICAgICAgICBlbGlmIG1vZGUgJiBzZWxlY3RfUE9MTElOX1BPTExQUkk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChmZCwgNDA5NikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtmZF0uYXBwZW5kKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBoYW5nIHVwIG9yIGVycm9ycy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLQotICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKLQotCi0gICAgICAgIGRlZiBfY29tbXVuaWNhdGVfd2l0aF9zZWxlY3Qoc2VsZiwgaW5wdXQsIGVuZHRpbWUsIG9yaWdfdGltZW91dCk6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0ID0gW10KLSAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQgPSBbXQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQuYXBwZW5kKHNlbGYuc3RkaW4pCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LmFwcGVuZChzZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQuYXBwZW5kKHNlbGYuc3RkZXJyKQotCi0gICAgICAgICAgICBzZWxmLl9zYXZlX2lucHV0KGlucHV0KQotCi0gICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCi0gICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCi0KLSAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmID0gW10KLSAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9zdGRvdXRfYnVmZgotICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmYgPSBbXQotICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX3N0ZGVycl9idWZmCi0KLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3JlYWRfc2V0IG9yIHNlbGYuX3dyaXRlX3NldDoKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAocmxpc3QsIHdsaXN0LCB4bGlzdCkgPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KHNlbGYuX3JlYWRfc2V0LCBzZWxmLl93cml0ZV9zZXQsIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCByZXR1cm5pbmcgdGhyZWUgZW1wdHkgbGlzdHMgaW5kaWNhdGVzCi0gICAgICAgICAgICAgICAgIyB0aGF0IHRoZSB0aW1lb3V0IGV4cGlyZWQuCi0gICAgICAgICAgICAgICAgaWYgbm90IChybGlzdCBvciB3bGlzdCBvciB4bGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgICMgV2UgYWxzbyBjaGVjayB3aGF0IHRpbWUgaXQgaXMgb3Vyc2VsdmVzIGZvciBnb29kIG1lYXN1cmUuCi0gICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGltZW91dChlbmR0aW1lLCBvcmlnX3RpbWVvdXQpCi0KLSAgICAgICAgICAgICAgICAjIFhYWCBSZXdyaXRlIHRoZXNlIHRvIHVzZSBub24tYmxvY2tpbmcgSS9PIG9uIHRoZQotICAgICAgICAgICAgICAgICMgZmlsZSBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gaW4gd2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5faW5wdXRbc2VsZi5faW5wdXRfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gPSBvcy53cml0ZShzZWxmLnN0ZGluLmZpbGVubygpLCBjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0LnJlbW92ZShzZWxmLnN0ZGluKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IGJ5dGVzX3dyaXR0ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldC5yZW1vdmUoc2VsZi5zdGRpbikKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0IGluIHJsaXN0OgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnN0ZG91dC5maWxlbm8oKSwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5yZW1vdmUoc2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dC5hcHBlbmQoZGF0YSkKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyIGluIHJsaXN0OgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnN0ZGVyci5maWxlbm8oKSwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5yZW1vdmUoc2VsZi5zdGRlcnIpCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVyci5hcHBlbmQoZGF0YSkKLQotICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKLQotCiAgICAgICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWcpOgogICAgICAgICAgICAgIiIiU2VuZCBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcwogICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvc3VuYXUucHkgYi9MaWIvc3VuYXUucHkKaW5kZXggMTVmN2IwMy4uM2MyNDQ5MiAxMDA2NDQKLS0tIGEvTGliL3N1bmF1LnB5CisrKyBiL0xpYi9zdW5hdS5weQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBnZXRjb21wdHlwZSgpICAgLS0gcmV0dXJucyBjb21wcmVzc2lvbiB0eXBlICgnTk9ORScgb3IgJ1VMQVcnKQogICAgICAgICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIG1hdGNoZXMgJ05PTkUnKQotICAgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICAgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIG5hbWVkdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgICAgICAgZ2V0bWFya2VycygpICAgIC0tIHJldHVybnMgTm9uZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZmMgbW9kdWxlKQpAQCAtMTAzLDYgKzEwMywxMSBAQAogaXMgZGVzdHJveWVkLgogIiIiCiAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX3N1bmF1X3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19zdW5hdV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAjIGZyb20gPG11bHRpbWVkaWEvYXVkaW9fZmlsZWhkci5oPgogQVVESU9fRklMRV9NQUdJQyA9IDB4MmU3MzZlNjQKIEFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOCA9IDEKQEAgLTE2Myw2ICsxNjgsMTIgQEAKICAgICAgICAgaWYgc2VsZi5fZmlsZToKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGluaXRmcChzZWxmLCBmaWxlKToKICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSAwCkBAIC0yNDYsOSArMjU3LDkgQEAKICAgICAgICAgICAgIHJldHVybiAnbm90IGNvbXByZXNzZWQnCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfc3VuYXVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIGdldG1hcmtlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCkBAIC0zMDcsNiArMzE4LDEyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBpbml0ZnAoc2VsZiwgZmlsZSk6CiAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuX2ZyYW1lcmF0ZSA9IDAKQEAgLTMzNSw3ICszNTIsNyBAQAogICAgIGRlZiBzZXRzYW1wd2lkdGgoc2VsZiwgc2FtcHdpZHRoKToKICAgICAgICAgaWYgc2VsZi5fbmZyYW1lc3dyaXR0ZW46CiAgICAgICAgICAgICByYWlzZSBFcnJvcignY2Fubm90IGNoYW5nZSBwYXJhbWV0ZXJzIGFmdGVyIHN0YXJ0aW5nIHRvIHdyaXRlJykKLSAgICAgICAgaWYgc2FtcHdpZHRoIG5vdCBpbiAoMSwgMiwgNCk6CisgICAgICAgIGlmIHNhbXB3aWR0aCBub3QgaW4gKDEsIDIsIDMsIDQpOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ2JhZCBzYW1wbGUgd2lkdGgnKQogICAgICAgICBzZWxmLl9zYW1wd2lkdGggPSBzYW1wd2lkdGgKIApAQCAtMzkwLDE0ICs0MDcsMTYgQEAKICAgICAgICAgc2VsZi5zZXRjb21wdHlwZShjb21wdHlwZSwgY29tcG5hbWUpCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfc3VuYXVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbigpCiAgICAgICAgIGlmIHNlbGYuX2NvbXB0eXBlID09ICdVTEFXJzoKICAgICAgICAgICAgIGltcG9ydCBhdWRpb29wCkBAIC00MjEsOSArNDQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RhdGFsZW5ndGggIT0gc2VsZi5fZGF0YXdyaXR0ZW46CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGNoaGVhZGVyKCkKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3BlbmVkIGFuZCBzZWxmLl9maWxlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAogICAgICMKQEAgLTQ0OCw2ICs0NjcsOSBAQAogICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gMjoKICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzE2CiAgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gMgorICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gMzoKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzI0CisgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gMwogICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gNDoKICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzMyCiAgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gNApkaWZmIC0tZ2l0IGEvTGliL3N5bWJvbC5weSBiL0xpYi9zeW1ib2wucHkKaW5kZXggMzQxNDNiNS4uNWNmNGE2NSAxMDA3NTUKLS0tIGEvTGliL3N5bWJvbC5weQorKysgYi9MaWIvc3ltYm9sLnB5CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgc3ltX25hbWVbX3ZhbHVlXSA9IF9uYW1lCiAKIAotZGVmIG1haW4oKToKK2RlZiBfbWFpbigpOgogICAgIGltcG9ydCBzeXMKICAgICBpbXBvcnQgdG9rZW4KICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CkBAIC0xMDgsNCArMTA4LDQgQEAKICAgICB0b2tlbi5fbWFpbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgX21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3N5bXRhYmxlLnB5IGIvTGliL3N5bXRhYmxlLnB5CmluZGV4IGJiMjcxOTYuLmUyMzMxM2IgMTAwNjQ0Ci0tLSBhL0xpYi9zeW10YWJsZS5weQorKysgYi9MaWIvc3ltdGFibGUucHkKQEAgLTIzMiw3ICsyMzIsOCBAQAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGltcG9ydCBvcywgc3lzCi0gICAgc3JjID0gb3BlbihzeXMuYXJndlswXSkucmVhZCgpCisgICAgd2l0aCBvcGVuKHN5cy5hcmd2WzBdKSBhcyBmOgorICAgICAgICBzcmMgPSBmLnJlYWQoKQogICAgIG1vZCA9IHN5bXRhYmxlKHNyYywgb3MucGF0aC5zcGxpdChzeXMuYXJndlswXSlbMV0sICJleGVjIikKICAgICBmb3IgaWRlbnQgaW4gbW9kLmdldF9pZGVudGlmaWVycygpOgogICAgICAgICBpbmZvID0gbW9kLmxvb2t1cChpZGVudCkKZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5CmluZGV4IDJhMjE2MGMuLmRiZjc3NjcgMTAwNjQ0Ci0tLSBhL0xpYi9zeXNjb25maWcucHkKKysrIGIvTGliL3N5c2NvbmZpZy5weQpAQCAtMSw3ICsxLDYgQEAKICIiIkFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCByZQogaW1wb3J0IHN5cwogZnJvbSBvcy5wYXRoIGltcG9ydCBwYXJkaXIsIHJlYWxwYXRoCiAKQEAgLTUyLDI1ICs1MSw2IEBACiAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9TY3JpcHRzJywKICAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKICAgICAgICAgfSwKLSAgICAnb3MyJzogewotICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vTGliJywKLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L0xpYicsCi0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vSW5jbHVkZScsCi0gICAgICAgICdwbGF0aW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L0luY2x1ZGUnLAotICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCi0gICAgICAgICdkYXRhJzogJ3tiYXNlfScsCi0gICAgICAgIH0sCi0gICAgJ29zMl9ob21lJzogewotICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAotICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKLSAgICAgICAgfSwKICAgICAnbnRfdXNlcic6IHsKICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCiAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9JywKQEAgLTIxMCw3ICsxOTAsNiBAQAogICAgIGRlZiBqb2ludXNlcigqYXJncyk6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCphcmdzKSkKIAotICAgICMgd2hhdCBhYm91dCAnb3MyZW14JywgJ3Jpc2NvcycgPwogICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJBUFBEQVRBIikgb3IgIn4iCiAgICAgICAgIGlmIGVudl9iYXNlOgpAQCAtMjQyLDYgKzIyMSw3IEBACiAgICAgIiIiCiAgICAgIyBSZWdleGVzIG5lZWRlZCBmb3IgcGFyc2luZyBNYWtlZmlsZSAoYW5kIHNpbWlsYXIgc3ludGF4ZXMsCiAgICAgIyBsaWtlIG9sZC1zdHlsZSBTZXR1cCBmaWxlcykuCisgICAgaW1wb3J0IHJlCiAgICAgX3ZhcmlhYmxlX3J4ID0gcmUuY29tcGlsZSgiKFthLXpBLVpdW2EtekEtWjAtOV9dKylccyo9XHMqKC4qKSIpCiAgICAgX2ZpbmR2YXIxX3J4ID0gcmUuY29tcGlsZShyIlwkXCgoW0EtWmEtel1bQS1aYS16MC05X10qKVwpIikKICAgICBfZmluZHZhcjJfcnggPSByZS5jb21waWxlKHIiXCR7KFtBLVphLXpdW0EtWmEtejAtOV9dKil9IikKQEAgLTM2OSwyMSArMzQ5LDIxIEBACiAgICAgbWFrZWZpbGUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQogICAgIHRyeToKICAgICAgICAgX3BhcnNlX21ha2VmaWxlKG1ha2VmaWxlLCB2YXJzKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgbWFrZWZpbGUKICAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCi0gICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorICAgICAgICByYWlzZSBPU0Vycm9yKG1zZykKICAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBweWNvbmZpZy5oOgogICAgIGNvbmZpZ19oID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICB0cnk6CiAgICAgICAgIHdpdGggb3Blbihjb25maWdfaCkgYXMgZjoKICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGYsIHZhcnMpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBtc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBjb25maWdfaAogICAgICAgICBpZiBoYXNhdHRyKGUsICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXNnID0gbXNnICsgIiAoJXMpIiAlIGUuc3RyZXJyb3IKLSAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICMgT24gQUlYLCB0aGVyZSBhcmUgd3JvbmcgcGF0aHMgdG8gdGhlIGxpbmtlciBzY3JpcHRzIGluIHRoZSBNYWtlZmlsZQogICAgICMgLS0gdGhlc2UgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBQeXRob24gc291cmNlLCBidXQgd2hlbiBpbnN0YWxsZWQKICAgICAjIHRoZSBzY3JpcHRzIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeS4KQEAgLTQwMyw4ICszODMsOCBAQAogICAgICMgZ2V0X3BsYXRmb3JtKCkgc3VjY2VlZHMuCiAgICAgbmFtZSA9ICdfc3lzY29uZmlnZGF0YScKICAgICBpZiAnZGFyd2luJyBpbiBzeXMucGxhdGZvcm06Ci0gICAgICAgIGltcG9ydCBpbXAKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgbW9kdWxlLmJ1aWxkX3RpbWVfdmFycyA9IHZhcnMKICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKIApAQCAtNDM2LDcgKzQxNiw2IEBACiAgICAgdmFyc1snTElCREVTVCddID0gZ2V0X3BhdGgoJ3N0ZGxpYicpCiAgICAgdmFyc1snQklOTElCREVTVCddID0gZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKQogICAgIHZhcnNbJ0lOQ0xVREVQWSddID0gZ2V0X3BhdGgoJ2luY2x1ZGUnKQotICAgIHZhcnNbJ1NPJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWFRfU1VGRklYJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWEUnXSA9ICcuZXhlJwogICAgIHZhcnNbJ1ZFUlNJT04nXSA9IF9QWV9WRVJTSU9OX1NIT1JUX05PX0RPVApAQCAtNDU2LDYgKzQzNSw3IEBACiAgICAgIiIiCiAgICAgaWYgdmFycyBpcyBOb25lOgogICAgICAgICB2YXJzID0ge30KKyAgICBpbXBvcnQgcmUKICAgICBkZWZpbmVfcnggPSByZS5jb21waWxlKCIjZGVmaW5lIChbQS1aXVtBLVphLXowLTlfXSspICguKilcbiIpCiAgICAgdW5kZWZfcnggPSByZS5jb21waWxlKCIvWypdICN1bmRlZiAoW0EtWl1bQS1aYS16MC05X10rKSBbKl0vXG4iKQogCkBAIC01NTIsMTAgKzUzMiwxNCBAQAogICAgICAgICAgICAgIyBzeXMuYWJpZmxhZ3MgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIGFsbCBwbGF0Zm9ybXMuCiAgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ2FiaWZsYWdzJ10gPSAnJwogCi0gICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgogICAgICAgICAgICAgX2luaXRfbm9uX3Bvc2l4KF9DT05GSUdfVkFSUykKICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgogICAgICAgICAgICAgX2luaXRfcG9zaXgoX0NPTkZJR19WQVJTKQorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBzZWUgaXNzdWUxOTU1NQorICAgICAgICBTTyA9IF9DT05GSUdfVkFSUy5nZXQoJ0VYVF9TVUZGSVgnKQorICAgICAgICBpZiBTTyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9DT05GSUdfVkFSU1snU08nXSA9IFNPCiAgICAgICAgICMgU2V0dGluZyAndXNlcmJhc2UnIGlzIGRvbmUgYmVsb3cgdGhlIGNhbGwgdG8gdGhlCiAgICAgICAgICMgaW5pdCBmdW5jdGlvbiB0byBlbmFibGUgdXNpbmcgJ2dldF9jb25maWdfdmFyJyBpbgogICAgICAgICAjIHRoZSBpbml0LWZ1bmN0aW9uLgpAQCAtNTk5LDYgKzU4Myw5IEBACiAKICAgICBFcXVpdmFsZW50IHRvIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQogICAgICIiIgorICAgIGlmIG5hbWUgPT0gJ1NPJzoKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1NPIGlzIGRlcHJlY2F0ZWQsIHVzZSBFWFRfU1VGRklYJywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgIHJldHVybiBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKIAogCkBAIC02NzksNiArNjY2LDcgQEAKICAgICAgICAgcmV0dXJuICIlcy0lcy4lcyIgJSAob3NuYW1lLCB2ZXJzaW9uLCByZWxlYXNlKQogICAgIGVsaWYgb3NuYW1lWzo2XSA9PSAiY3lnd2luIjoKICAgICAgICAgb3NuYW1lID0gImN5Z3dpbiIKKyAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIHJlbF9yZSA9IHJlLmNvbXBpbGUocidbXGQuXSsnKQogICAgICAgICBtID0gcmVsX3JlLm1hdGNoKHJlbGVhc2UpCiAgICAgICAgIGlmIG06CmRpZmYgLS1naXQgYS9MaWIvdGFibmFubnkucHkgYi9MaWIvdGFibmFubnkucHkKaW5kZXggNWI5YjQ0NC4uNDZlMGY1NiAxMDA3NTUKLS0tIGEvTGliL3RhYm5hbm55LnB5CisrKyBiL0xpYi90YWJuYW5ueS5weQpAQCAtOTUsNyArOTUsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBmID0gdG9rZW5pemUub3BlbihmaWxlKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KCIlcjogSS9PIEVycm9yOiAlcyIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL0xpYi90YXJmaWxlLnB5IGIvTGliL3RhcmZpbGUucHkKaW5kZXggMTZkMzM4Yy4uZjRkZjZjNyAxMDA2NDQKLS0tIGEvTGliL3RhcmZpbGUucHkKKysrIGIvTGliL3RhcmZpbGUucHkKQEAgLTU2LDkgKzU2LDkgQEAKICMgb3Muc3ltbGluayBvbiBXaW5kb3dzIHByaW9yIHRvIDYuMCByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvcgogc3ltbGlua19leGNlcHRpb24gPSAoQXR0cmlidXRlRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpCiB0cnk6Ci0gICAgIyBXaW5kb3dzRXJyb3IgKDEzMTQpIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCB0aGUKKyAgICAjIE9TRXJyb3IgKHdpbmVycm9yPTEzMTQpIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCB0aGUKICAgICAjIFNlQ3JlYXRlU3ltYm9saWNMaW5rUHJpdmlsZWdlIHByaXZpbGVnZQotICAgIHN5bWxpbmtfZXhjZXB0aW9uICs9IChXaW5kb3dzRXJyb3IsKQorICAgIHN5bWxpbmtfZXhjZXB0aW9uICs9IChPU0Vycm9yLCkKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgcGFzcwogCkBAIC0xNDAsMzAgKzE0MCw2IEBACiB9CiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQml0cyB1c2VkIGluIHRoZSBtb2RlIGZpZWxkLCB2YWx1ZXMgaW4gb2N0YWwuCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TX0lGTE5LID0gMG8xMjAwMDAgICAgICAgICMgc3ltYm9saWMgbGluawotU19JRlJFRyA9IDBvMTAwMDAwICAgICAgICAjIHJlZ3VsYXIgZmlsZQotU19JRkJMSyA9IDBvMDYwMDAwICAgICAgICAjIGJsb2NrIGRldmljZQotU19JRkRJUiA9IDBvMDQwMDAwICAgICAgICAjIGRpcmVjdG9yeQotU19JRkNIUiA9IDBvMDIwMDAwICAgICAgICAjIGNoYXJhY3RlciBkZXZpY2UKLVNfSUZJRk8gPSAwbzAxMDAwMCAgICAgICAgIyBmaWZvCi0KLVRTVUlEICAgPSAwbzQwMDAgICAgICAgICAgIyBzZXQgVUlEIG9uIGV4ZWN1dGlvbgotVFNHSUQgICA9IDBvMjAwMCAgICAgICAgICAjIHNldCBHSUQgb24gZXhlY3V0aW9uCi1UU1ZUWCAgID0gMG8xMDAwICAgICAgICAgICMgcmVzZXJ2ZWQKLQotVFVSRUFEICA9IDBvNDAwICAgICAgICAgICAjIHJlYWQgYnkgb3duZXIKLVRVV1JJVEUgPSAwbzIwMCAgICAgICAgICAgIyB3cml0ZSBieSBvd25lcgotVFVFWEVDICA9IDBvMTAwICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IG93bmVyCi1UR1JFQUQgID0gMG8wNDAgICAgICAgICAgICMgcmVhZCBieSBncm91cAotVEdXUklURSA9IDBvMDIwICAgICAgICAgICAjIHdyaXRlIGJ5IGdyb3VwCi1UR0VYRUMgID0gMG8wMTAgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgZ3JvdXAKLVRPUkVBRCAgPSAwbzAwNCAgICAgICAgICAgIyByZWFkIGJ5IG90aGVyCi1UT1dSSVRFID0gMG8wMDIgICAgICAgICAgICMgd3JpdGUgYnkgb3RoZXIKLVRPRVhFQyAgPSAwbzAwMSAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBvdGhlcgotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGluaXRpYWxpemF0aW9uCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKQEAgLTI2NCwxMyArMjQwLDEzIEBACiAgICAgZm9yIGIgaW4gcmFuZ2UoYmxvY2tzKToKICAgICAgICAgYnVmID0gc3JjLnJlYWQoQlVGU0laRSkKICAgICAgICAgaWYgbGVuKGJ1ZikgPCBCVUZTSVpFOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKICAgICAgICAgZHN0LndyaXRlKGJ1ZikKIAogICAgIGlmIHJlbWFpbmRlciAhPSAwOgogICAgICAgICBidWYgPSBzcmMucmVhZChyZW1haW5kZXIpCiAgICAgICAgIGlmIGxlbihidWYpIDwgcmVtYWluZGVyOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKICAgICAgICAgZHN0LndyaXRlKGJ1ZikKICAgICByZXR1cm4KIApAQCAtMzk5LDcgKzM3NSw3IEBACiAgICAgICAgICAgICAgICAgaWYgbW9kZSA9PSAiciI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGJ1ZiA9IGIiIgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNtcCA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IElPRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNlcHRpb24gPSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbXAgPSBiejIuQloyQ29tcHJlc3NvcigpCiAKQEAgLTE2MzEsNyArMTYwNyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbGVvYmogPSBnemlwLkd6aXBGaWxlKG5hbWUsIG1vZGUgKyAiYiIsIGNvbXByZXNzbGV2ZWwsIGZpbGVvYmopCiAgICAgICAgICAgICB0ID0gY2xzLnRhcm9wZW4obmFtZSwgbW9kZSwgZmlsZW9iaiwgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGlmIG5vdCBleHRmaWxlb2JqIGFuZCBmaWxlb2JqIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQogICAgICAgICAgICAgaWYgZmlsZW9iaiBpcyBOb25lOgpAQCAtMTY2Miw3ICsxNjM4LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ID0gY2xzLnRhcm9wZW4obmFtZSwgbW9kZSwgZmlsZW9iaiwgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKCJub3QgYSBiemlwMiBmaWxlIikKICAgICAgICAgdC5fZXh0ZmlsZW9iaiA9IEZhbHNlCkBAIC0yMDIyLDcgKzE5OTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9leHRyYWN0X21lbWJlcih0YXJpbmZvLCBvcy5wYXRoLmpvaW4ocGF0aCwgdGFyaW5mby5uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9hdHRycz1zZXRfYXR0cnMpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBzZWxmLmVycm9ybGV2ZWwgPiAwOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBlbHNlOgpAQCAtMjIxMSw5ICsyMTg3LDggQEAKICAgICAgICAgICAgICAgICBpZiB0YXJpbmZvLmlzc3ltKCkgYW5kIGhhc2F0dHIob3MsICJsY2hvd24iKToKICAgICAgICAgICAgICAgICAgICAgb3MubGNob3duKHRhcmdldHBhdGgsIHUsIGcpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJvczJlbXgiOgotICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2hvd24odGFyZ2V0cGF0aCwgdSwgZykKLSAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIG9zLmNob3duKHRhcmdldHBhdGgsIHUsIGcpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigiY291bGQgbm90IGNoYW5nZSBvd25lciIpCiAKICAgICBkZWYgY2htb2Qoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CkBAIC0yMjIyLDcgKzIxOTcsNyBAQAogICAgICAgICBpZiBoYXNhdHRyKG9zLCAnY2htb2QnKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5jaG1vZCh0YXJnZXRwYXRoLCB0YXJpbmZvLm1vZGUpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2UgbW9kZSIpCiAKICAgICBkZWYgdXRpbWUoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CkBAIC0yMjMyLDcgKzIyMDcsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnV0aW1lKHRhcmdldHBhdGgsICh0YXJpbmZvLm10aW1lLCB0YXJpbmZvLm10aW1lKSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigiY291bGQgbm90IGNoYW5nZSBtb2RpZmljYXRpb24gdGltZSIpCiAKICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzMjMsOSArMjI5OCw5IEBACiAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIFRhckZpbGUncyBtb2RlLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCIlcyBpcyBjbG9zZWQiICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCIlcyBpcyBjbG9zZWQiICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgIGlmIG1vZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYubW9kZSBub3QgaW4gbW9kZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBvcGVyYXRpb24gZm9yIG1vZGUgJXIiICUgc2VsZi5tb2RlKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiYmFkIG9wZXJhdGlvbiBmb3IgbW9kZSAlciIgJSBzZWxmLm1vZGUpCiAKICAgICBkZWYgX2ZpbmRfbGlua190YXJnZXQoc2VsZiwgdGFyaW5mbyk6CiAgICAgICAgICIiIkZpbmQgdGhlIHRhcmdldCBtZW1iZXIgb2YgYSBzeW1saW5rIG9yIGhhcmRsaW5rIG1lbWJlciBpbiB0aGUKQEAgLTI0MjksMyArMjQwNCw5NyBAQAogCiBibHRuX29wZW4gPSBvcGVuCiBvcGVuID0gVGFyRmlsZS5vcGVuCisKKworZGVmIG1haW4oKToKKyAgICBpbXBvcnQgYXJncGFyc2UKKworICAgIGRlc2NyaXB0aW9uID0gJ0Egc2ltcGxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgZm9yIHRhcmZpbGUgbW9kdWxlLicKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnKQorICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWwnLCAnLS1saXN0JywgbWV0YXZhcj0nPHRhcmZpbGU+JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2hvdyBsaXN0aW5nIG9mIGEgdGFyZmlsZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctZScsICctLWV4dHJhY3QnLCBuYXJncz0nKycsCisgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9KCc8dGFyZmlsZT4nLCAnPG91dHB1dF9kaXI+JyksCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0V4dHJhY3QgdGFyZmlsZSBpbnRvIHRhcmdldCBkaXInKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWMnLCAnLS1jcmVhdGUnLCBuYXJncz0nKycsCisgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9KCc8bmFtZT4nLCAnPGZpbGU+JyksCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZSB0YXJmaWxlIGZyb20gc291cmNlcycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdCcsICctLXRlc3QnLCBtZXRhdmFyPSc8dGFyZmlsZT4nLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUZXN0IGlmIGEgdGFyZmlsZSBpcyB2YWxpZCcpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIGFyZ3MudGVzdDoKKyAgICAgICAgc3JjID0gYXJncy50ZXN0CisgICAgICAgIGlmIGlzX3RhcmZpbGUoc3JjKToKKyAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgdGFyOgorICAgICAgICAgICAgICAgIHRhci5nZXRtZW1iZXJzKCkKKyAgICAgICAgICAgICAgICBwcmludCh0YXIuZ2V0bWVtYmVycygpLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBpZiBhcmdzLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJ3shcn0gaXMgYSB0YXIgYXJjaGl2ZS4nLmZvcm1hdChzcmMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyLmV4aXQoMSwgJ3shcn0gaXMgbm90IGEgdGFyIGFyY2hpdmUuXG4nLmZvcm1hdChzcmMpKQorCisgICAgZWxpZiBhcmdzLmxpc3Q6CisgICAgICAgIHNyYyA9IGFyZ3MubGlzdAorICAgICAgICBpZiBpc190YXJmaWxlKHNyYyk6CisgICAgICAgICAgICB3aXRoIFRhckZpbGUub3BlbihzcmMsICdyOionKSBhcyB0ZjoKKyAgICAgICAgICAgICAgICB0Zi5saXN0KHZlcmJvc2U9YXJncy52ZXJib3NlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyLmV4aXQoMSwgJ3shcn0gaXMgbm90IGEgdGFyIGFyY2hpdmUuXG4nLmZvcm1hdChzcmMpKQorCisgICAgZWxpZiBhcmdzLmV4dHJhY3Q6CisgICAgICAgIGlmIGxlbihhcmdzLmV4dHJhY3QpID09IDE6CisgICAgICAgICAgICBzcmMgPSBhcmdzLmV4dHJhY3RbMF0KKyAgICAgICAgICAgIGN1cmRpciA9IG9zLmN1cmRpcgorICAgICAgICBlbGlmIGxlbihhcmdzLmV4dHJhY3QpID09IDI6CisgICAgICAgICAgICBzcmMsIGN1cmRpciA9IGFyZ3MuZXh0cmFjdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyLmV4aXQoMSwgcGFyc2VyLmZvcm1hdF9oZWxwKCkpCisKKyAgICAgICAgaWYgaXNfdGFyZmlsZShzcmMpOgorICAgICAgICAgICAgd2l0aCBUYXJGaWxlLm9wZW4oc3JjLCAncjoqJykgYXMgdGY6CisgICAgICAgICAgICAgICAgdGYuZXh0cmFjdGFsbChwYXRoPWN1cmRpcikKKyAgICAgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgICAgICAgICBpZiBjdXJkaXIgPT0gJy4nOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAneyFyfSBmaWxlIGlzIGV4dHJhY3RlZC4nLmZvcm1hdChzcmMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gKCd7IXJ9IGZpbGUgaXMgZXh0cmFjdGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnRvIHshcn0gZGlyZWN0b3J5LicpLmZvcm1hdChzcmMsIGN1cmRpcikKKyAgICAgICAgICAgICAgICBwcmludChtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXhpdCgxLCAneyFyfSBpcyBub3QgYSB0YXIgYXJjaGl2ZS5cbicuZm9ybWF0KHNyYykpCisKKyAgICBlbGlmIGFyZ3MuY3JlYXRlOgorICAgICAgICB0YXJfbmFtZSA9IGFyZ3MuY3JlYXRlLnBvcCgwKQorICAgICAgICBfLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHRhcl9uYW1lKQorICAgICAgICBjb21wcmVzc2lvbnMgPSB7CisgICAgICAgICAgICAjIGd6CisgICAgICAgICAgICAnZ3onOiAnZ3onLAorICAgICAgICAgICAgJ3Rneic6ICdneicsCisgICAgICAgICAgICAjIHh6CisgICAgICAgICAgICAneHonOiAneHonLAorICAgICAgICAgICAgJ3R4eic6ICd4eicsCisgICAgICAgICAgICAjIGJ6MgorICAgICAgICAgICAgJ2J6Mic6ICdiejInLAorICAgICAgICAgICAgJ3Rieic6ICdiejInLAorICAgICAgICAgICAgJ3RiejInOiAnYnoyJywKKyAgICAgICAgICAgICd0YjInOiAnYnoyJywKKyAgICAgICAgfQorICAgICAgICB0YXJfbW9kZSA9ICd3OicgKyBjb21wcmVzc2lvbnNbZXh0XSBpZiBleHQgaW4gY29tcHJlc3Npb25zIGVsc2UgJ3cnCisgICAgICAgIHRhcl9maWxlcyA9IGFyZ3MuY3JlYXRlCisKKyAgICAgICAgd2l0aCBUYXJGaWxlLm9wZW4odGFyX25hbWUsIHRhcl9tb2RlKSBhcyB0ZjoKKyAgICAgICAgICAgIGZvciBmaWxlX25hbWUgaW4gdGFyX2ZpbGVzOgorICAgICAgICAgICAgICAgIHRmLmFkZChmaWxlX25hbWUpCisKKyAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ3shcn0gZmlsZSBjcmVhdGVkLicuZm9ybWF0KHRhcl9uYW1lKSkKKworICAgIGVsc2U6CisgICAgICAgIHBhcnNlci5leGl0KDEsIHBhcnNlci5mb3JtYXRfaGVscCgpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3RlbG5ldGxpYi5weSBiL0xpYi90ZWxuZXRsaWIucHkKaW5kZXggMTRjYTFiMS4uMGNhY2FjOCAxMDA2NDQKLS0tIGEvTGliL3RlbG5ldGxpYi5weQorKysgYi9MaWIvdGVsbmV0bGliLnB5CkBAIC0xNywxMyArMTcsMTIgQEAKIE5vdGUgdGhhdCByZWFkX2FsbCgpIHdvbid0IHJlYWQgdW50aWwgZW9mIC0tIGl0IGp1c3QgcmVhZHMgc29tZSBkYXRhCiAtLSBidXQgaXQgZ3VhcmFudGVlcyB0byByZWFkIGF0IGxlYXN0IG9uZSBieXRlIHVubGVzcyBFT0YgaXMgaGl0LgogCi1JdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgVGVsbmV0IG9iamVjdCB0byBzZWxlY3Quc2VsZWN0KCkgaW4gb3JkZXIgdG8KLXdhaXQgdW50aWwgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsCi1yZWFkX2VhZ2VyKCkgbWF5IHJldHVybiBiJycgZXZlbiBpZiB0aGVyZSB3YXMgZGF0YSBvbiB0aGUgc29ja2V0LAotYmVjYXVzZSB0aGUgcHJvdG9jb2wgbmVnb3RpYXRpb24gbWF5IGhhdmUgZWF0ZW4gdGhlIGRhdGEuICBUaGlzIGlzIHdoeQotRU9GRXJyb3IgaXMgbmVlZGVkIGluIHNvbWUgY2FzZXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAibm8gZGF0YSIgYW5kCi0iY29ubmVjdGlvbiBjbG9zZWQiIChzaW5jZSB0aGUgc29ja2V0IGFsc28gYXBwZWFycyByZWFkeSBmb3IgcmVhZGluZwotd2hlbiBpdCBpcyBjbG9zZWQpLgorSXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIFRlbG5ldCBvYmplY3QgdG8gYSBzZWxlY3RvciBpbiBvcmRlciB0byB3YWl0IHVudGlsCittb3JlIGRhdGEgaXMgYXZhaWxhYmxlLiAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgcmVhZF9lYWdlcigpIG1heSByZXR1cm4gYicnCitldmVuIGlmIHRoZXJlIHdhcyBkYXRhIG9uIHRoZSBzb2NrZXQsIGJlY2F1c2UgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIG1heSBoYXZlCitlYXRlbiB0aGUgZGF0YS4gIFRoaXMgaXMgd2h5IEVPRkVycm9yIGlzIG5lZWRlZCBpbiBzb21lIGNhc2VzIHRvIGRpc3Rpbmd1aXNoCitiZXR3ZWVuICJubyBkYXRhIiBhbmQgImNvbm5lY3Rpb24gY2xvc2VkIiAoc2luY2UgdGhlIHNvY2tldCBhbHNvIGFwcGVhcnMgcmVhZHkKK2ZvciByZWFkaW5nIHdoZW4gaXQgaXMgY2xvc2VkKS4KIAogVG8gZG86CiAtIG9wdGlvbiBuZWdvdGlhdGlvbgpAQCAtMzQsMTAgKzMzLDkgQEAKIAogCiAjIEltcG9ydGVkIG1vZHVsZXMKLWltcG9ydCBlcnJubwogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAotaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNlbGVjdG9ycwogdHJ5OgogICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIF90aW1lCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xMzQsNiArMTMyLDE1IEBACiBFWE9QTCA9IGJ5dGVzKFsyNTVdKSAjIEV4dGVuZGVkLU9wdGlvbnMtTGlzdAogTk9PUFQgPSBieXRlcyhbMF0pCiAKKworIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZSBkZXNjcmlwdG9yLAorIyBjb250cmFyaWx5IHRvIGVwb2xsL2txdWV1ZSAoYWxzbywgdGhleSByZXF1aXJlIGEgc2luZ2xlIHN5c2NhbGwpLgoraWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICBfVGVsbmV0U2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yCitlbHNlOgorICAgIF9UZWxuZXRTZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCisKIGNsYXNzIFRlbG5ldDoKIAogICAgICIiIlRlbG5ldCBpbnRlcmZhY2UgY2xhc3MuCkBAIC0yMTAsNyArMjE3LDYgQEAKICAgICAgICAgc2VsZi5zYiA9IDAgIyBmbGFnIGZvciBTQiBhbmQgU0Ugc2VxdWVuY2UuCiAgICAgICAgIHNlbGYuc2JkYXRhcSA9IGInJwogICAgICAgICBzZWxmLm9wdGlvbl9jYWxsYmFjayA9IE5vbmUKLSAgICAgICAgc2VsZi5faGFzX3BvbGwgPSBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKQogICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5vcGVuKGhvc3QsIHBvcnQsIHRpbWVvdXQpCiAKQEAgLTI3Nyw3ICsyODMsNyBAQAogICAgICAgICAiIiJXcml0ZSBhIHN0cmluZyB0byB0aGUgc29ja2V0LCBkb3VibGluZyBhbnkgSUFDIGNoYXJhY3RlcnMuCiAKICAgICAgICAgQ2FuIGJsb2NrIGlmIHRoZSBjb25uZWN0aW9uIGlzIGJsb2NrZWQuICBNYXkgcmFpc2UKLSAgICAgICAgc29ja2V0LmVycm9yIGlmIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAgICAgICAgT1NFcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIElBQyBpbiBidWZmZXI6CkBAIC0yOTMsNjAgKzI5OSw2IEBACiAgICAgICAgIGlzIGNsb3NlZCBhbmQgbm8gY29va2VkIGRhdGEgaXMgYXZhaWxhYmxlLgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9oYXNfcG9sbDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VudGlsX3dpdGhfcG9sbChtYXRjaCwgdGltZW91dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KG1hdGNoLCB0aW1lb3V0KQotCi0gICAgZGVmIF9yZWFkX3VudGlsX3dpdGhfcG9sbChzZWxmLCBtYXRjaCwgdGltZW91dCk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgYSBnaXZlbiBzdHJpbmcgaXMgZW5jb3VudGVyZWQgb3IgdW50aWwgdGltZW91dC4KLQotICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRoZSB0aW1lb3V0LgotICAgICAgICAiIiIKLSAgICAgICAgbiA9IGxlbihtYXRjaCkKLSAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dAotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gpCi0gICAgICAgIGlmIGkgPCAwOgotICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncyA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQotICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKHNlbGYsIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MpCi0gICAgICAgICAgICB3aGlsZSBpIDwgMCBhbmQgbm90IHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbChjYWxsX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBpID49IDA6Ci0gICAgICAgICAgICBpID0gaSArIG4KLSAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KLSAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZF92ZXJ5X2xhenkoKQotCi0gICAgZGVmIF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYsIG1hdGNoLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIGEgZ2l2ZW4gc3RyaW5nIGlzIGVuY291bnRlcmVkIG9yIHVudGlsIHRpbWVvdXQuCi0KLSAgICAgICAgVGhlIHRpbWVvdXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2VsZWN0LnNlbGVjdCgpLgotICAgICAgICAiIiIKICAgICAgICAgbiA9IGxlbihtYXRjaCkKICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQogICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gpCkBAIC0zNTUsMjYgKzMwNywyNSBAQAogICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQogICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQogICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICBzX3JlcGx5ID0gKFtzZWxmXSwgW10sIFtdKQotICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5CiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzX2FyZ3MgPSBzX2FyZ3MgKyAodGltZW91dCwpCi0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2YgYW5kIHNlbGVjdC5zZWxlY3QoKnNfYXJncykgPT0gc19yZXBseToKLSAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgIGlmIGkgPj0gMDoKLSAgICAgICAgICAgICAgICBpID0gaStuCi0gICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5ICsgKHRpbWVvdXQtZWxhcHNlZCwpCisgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0CisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBpZiBzZWxlY3Rvci5zZWxlY3QodGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkrbgorICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICByZXR1cm4gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCiAKICAgICBkZWYgcmVhZF9hbGwoc2VsZik6CkBAIC01NzksMjkgKzUzMCwzNSBAQAogCiAgICAgZGVmIHNvY2tfYXZhaWwoc2VsZik6CiAgICAgICAgICIiIlRlc3Qgd2hldGhlciBkYXRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0LiIiIgotICAgICAgICByZXR1cm4gc2VsZWN0LnNlbGVjdChbc2VsZl0sIFtdLCBbXSwgMCkgPT0gKFtzZWxmXSwgW10sIFtdKQorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICByZXR1cm4gYm9vbChzZWxlY3Rvci5zZWxlY3QoMCkpCiAKICAgICBkZWYgaW50ZXJhY3Qoc2VsZik6CiAgICAgICAgICIiIkludGVyYWN0aW9uIGZ1bmN0aW9uLCBlbXVsYXRlcyBhIHZlcnkgZHVtYiB0ZWxuZXQgY2xpZW50LiIiIgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICAgICAgIHNlbGYubXRfaW50ZXJhY3QoKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZmQsIHdmZCwgeGZkID0gc2VsZWN0LnNlbGVjdChbc2VsZiwgc3lzLnN0ZGluXSwgW10sIFtdKQotICAgICAgICAgICAgaWYgc2VsZiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX2VhZ2VyKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogQ29ubmVjdGlvbiBjbG9zZWQgYnkgcmVtb3RlIGhvc3QgKioqJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiB0ZXh0OgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLmVuY29kZSgnYXNjaWknKQotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc3lzLnN0ZGluLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gc2VsZWN0b3Iuc2VsZWN0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleS5maWxlb2JqIGlzIHNlbGY6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF9lYWdlcigpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBDb25uZWN0aW9uIGNsb3NlZCBieSByZW1vdGUgaG9zdCAqKionKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGtleS5maWxlb2JqIGlzIHN5cy5zdGRpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQogCiAgICAgZGVmIG10X2ludGVyYWN0KHNlbGYpOgogICAgICAgICAiIiJNdWx0aXRocmVhZGVkIHZlcnNpb24gb2YgaW50ZXJhY3QoKS4iIiIKQEAgLTY0OCw3OCArNjA1LDYgQEAKICAgICAgICAgcmVzdWx0cyBhcmUgdW5kZXRlcm1pbmlzdGljLCBhbmQgbWF5IGRlcGVuZCBvbiB0aGUgSS9PIHRpbWluZy4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faGFzX3BvbGw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0X3dpdGhfcG9sbChsaXN0LCB0aW1lb3V0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdF93aXRoX3NlbGVjdChsaXN0LCB0aW1lb3V0KQotCi0gICAgZGVmIF9leHBlY3Rfd2l0aF9wb2xsKHNlbGYsIGV4cGVjdF9saXN0LCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG9uZSBmcm9tIGEgbGlzdCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hlcy4KLQotICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRoZSB0aW1lb3V0LgotICAgICAgICAiIiIKLSAgICAgICAgcmUgPSBOb25lCi0gICAgICAgIGV4cGVjdF9saXN0ID0gZXhwZWN0X2xpc3RbOl0KLSAgICAgICAgaW5kaWNlcyA9IHJhbmdlKGxlbihleHBlY3RfbGlzdCkpCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihleHBlY3RfbGlzdFtpXSwgInNlYXJjaCIpOgotICAgICAgICAgICAgICAgIGlmIG5vdCByZTogaW1wb3J0IHJlCi0gICAgICAgICAgICAgICAgZXhwZWN0X2xpc3RbaV0gPSByZS5jb21waWxlKGV4cGVjdF9saXN0W2ldKQotICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgIG0gPSBOb25lCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBtID0gZXhwZWN0X2xpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihzZWxmLCBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzKQotICAgICAgICAgICAgd2hpbGUgbm90IG0gYW5kIG5vdCBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoY2FsbF90aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBleHBlY3RfbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQotICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCi0gICAgICAgIGlmIG5vdCB0ZXh0IGFuZCBzZWxmLmVvZjoKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCi0gICAgICAgIHJldHVybiAoLTEsIE5vbmUsIHRleHQpCi0KLSAgICBkZWYgX2V4cGVjdF93aXRoX3NlbGVjdChzZWxmLCBsaXN0LCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG9uZSBmcm9tIGEgbGlzdCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hlcy4KLQotICAgICAgICBUaGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZWxlY3Quc2VsZWN0KCkuCi0gICAgICAgICIiIgogICAgICAgICByZSA9IE5vbmUKICAgICAgICAgbGlzdCA9IGxpc3RbOl0KICAgICAgICAgaW5kaWNlcyA9IHJhbmdlKGxlbihsaXN0KSkKQEAgLTcyOCwyNyArNjEzLDI3IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHJlOiBpbXBvcnQgcmUKICAgICAgICAgICAgICAgICBsaXN0W2ldID0gcmUuY29tcGlsZShsaXN0W2ldKQogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICAgICAgbSA9IGxpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKLSAgICAgICAgICAgIGlmIHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzX2FyZ3MgPSAoW3NlbGYuZmlsZW5vKCldLCBbXSwgW10sIHRpbWVvdXQtZWxhcHNlZCkKLSAgICAgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdCgqc19hcmdzKQotICAgICAgICAgICAgICAgIGlmIG5vdCByOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQorICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgICAgIG0gPSBsaXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCisgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfdGltZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQogICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCiAgICAgICAgIGlmIG5vdCB0ZXh0IGFuZCBzZWxmLmVvZjoKICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCmRpZmYgLS1naXQgYS9MaWIvdGVtcGZpbGUucHkgYi9MaWIvdGVtcGZpbGUucHkKaW5kZXggOTEzMzJiNi4uNWQzNDYyMSAxMDA2NDQKLS0tIGEvTGliL3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZW1wZmlsZS5weQpAQCAtMzUsMzEgKzM1LDEyIEBACiBmcm9tIHJhbmRvbSBpbXBvcnQgUmFuZG9tIGFzIF9SYW5kb20KIAogdHJ5OgotICAgIGltcG9ydCBmY250bCBhcyBfZmNudGwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBkZWYgX3NldF9jbG9leGVjKGZkKToKLSAgICAgICAgcGFzcwotZWxzZToKLSAgICBkZWYgX3NldF9jbG9leGVjKGZkKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmxhZ3MgPSBfZmNudGwuZmNudGwoZmQsIF9mY250bC5GX0dFVEZELCAwKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgZmxhZ3MgcmVhZCBzdWNjZXNzZnVsbHksIG1vZGlmeQotICAgICAgICAgICAgZmxhZ3MgfD0gX2ZjbnRsLkZEX0NMT0VYRUMKLSAgICAgICAgICAgIF9mY250bC5mY250bChmZCwgX2ZjbnRsLkZfU0VURkQsIGZsYWdzKQotCi0KLXRyeToKICAgICBpbXBvcnQgX3RocmVhZAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGltcG9ydCBfZHVtbXlfdGhyZWFkIGFzIF90aHJlYWQKIF9hbGxvY2F0ZV9sb2NrID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrCiAKIF90ZXh0X29wZW5mbGFncyA9IF9vcy5PX1JEV1IgfCBfb3MuT19DUkVBVCB8IF9vcy5PX0VYQ0wKLWlmIGhhc2F0dHIoX29zLCAnT19OT0lOSEVSSVQnKToKLSAgICBfdGV4dF9vcGVuZmxhZ3MgfD0gX29zLk9fTk9JTkhFUklUCiBpZiBoYXNhdHRyKF9vcywgJ09fTk9GT0xMT1cnKToKICAgICBfdGV4dF9vcGVuZmxhZ3MgfD0gX29zLk9fTk9GT0xMT1cKIApAQCAtODgsOCArNjksOCBAQAogICAgICMgRmFsbGJhY2suICBBbGwgd2UgbmVlZCBpcyBzb21ldGhpbmcgdGhhdCByYWlzZXMgT1NFcnJvciBpZiB0aGUKICAgICAjIGZpbGUgZG9lc24ndCBleGlzdC4KICAgICBkZWYgX3N0YXQoZm4pOgotICAgICAgICBmID0gb3BlbihmbikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZkID0gX29zLm9wZW4oZm4sIF9vcy5PX1JET05MWSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCiAKIGRlZiBfZXhpc3RzKGZuKToKICAgICB0cnk6CkBAIC0xMjMsNyArMTA0LDcgQEAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIGMgPSBzZWxmLmNoYXJhY3RlcnMKICAgICAgICAgY2hvb3NlID0gc2VsZi5ybmcuY2hvaWNlCi0gICAgICAgIGxldHRlcnMgPSBbY2hvb3NlKGMpIGZvciBkdW1teSBpbiAiMTIzNDU2Il0KKyAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykgZm9yIGR1bW15IGluIHJhbmdlKDgpXQogICAgICAgICByZXR1cm4gJycuam9pbihsZXR0ZXJzKQogCiBkZWYgX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKToKQEAgLTE2NSw3ICsxNDYsNyBAQAogCiAgICAgZm9yIGRpciBpbiBkaXJsaXN0OgogICAgICAgICBpZiBkaXIgIT0gX29zLmN1cmRpcjoKLSAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLm5vcm1jYXNlKF9vcy5wYXRoLmFic3BhdGgoZGlyKSkKKyAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLmFic3BhdGgoZGlyKQogICAgICAgICAjIFRyeSBvbmx5IGEgZmV3IG5hbWVzIHBlciBkaXJlY3RvcnkuCiAgICAgICAgIGZvciBzZXEgaW4gcmFuZ2UoMTAwKToKICAgICAgICAgICAgIG5hbWUgPSBuZXh0KG5hbWVyKQpAQCAtMjE1LDcgKzE5Niw2IEBACiAgICAgICAgIGZpbGUgPSBfb3MucGF0aC5qb2luKGRpciwgcHJlICsgbmFtZSArIHN1ZikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmQgPSBfb3Mub3BlbihmaWxlLCBmbGFncywgMG82MDApCi0gICAgICAgICAgICBfc2V0X2Nsb2V4ZWMoZmQpCiAgICAgICAgICAgICByZXR1cm4gKGZkLCBfb3MucGF0aC5hYnNwYXRoKGZpbGUpKQogICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgogICAgICAgICAgICAgY29udGludWUgICAgIyB0cnkgYWdhaW4KQEAgLTY5MSw3ICs2NzEsNiBAQAogICAgIF9pc2xpbmsgPSBzdGF0aWNtZXRob2QoX29zLnBhdGguaXNsaW5rKQogICAgIF9yZW1vdmUgPSBzdGF0aWNtZXRob2QoX29zLnJlbW92ZSkKICAgICBfcm1kaXIgPSBzdGF0aWNtZXRob2QoX29zLnJtZGlyKQotICAgIF9vc19lcnJvciA9IE9TRXJyb3IKICAgICBfd2FybiA9IF93YXJuaW5ncy53YXJuCiAKICAgICBkZWYgX3JtdHJlZShzZWxmLCBwYXRoKToKQEAgLTcwMSwxNiArNjgwLDE2IEBACiAgICAgICAgICAgICBmdWxsbmFtZSA9IHNlbGYuX3BhdGhfam9pbihwYXRoLCBuYW1lKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlzZGlyID0gc2VsZi5faXNkaXIoZnVsbG5hbWUpIGFuZCBub3Qgc2VsZi5faXNsaW5rKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IHNlbGYuX29zX2Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgaXNkaXIgPSBGYWxzZQogICAgICAgICAgICAgaWYgaXNkaXI6CiAgICAgICAgICAgICAgICAgc2VsZi5fcm10cmVlKGZ1bGxuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZi5fb3NfZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fcm1kaXIocGF0aCkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zX2Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvX19tYWluX18ucHkKaW5kZXggY2U1NjE1Yi4uZDVmYmUxNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvX19tYWluX18ucHkKQEAgLTEsMTMgKzEsMyBAQAotZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdAogCi0KLVRFTVBESVIsIFRFU1RDV0QgPSByZWdydGVzdC5fbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQocmVncnRlc3QuVEVNUERJUikKLXJlZ3J0ZXN0LlRFTVBESVIgPSBURU1QRElSCi1yZWdydGVzdC5URVNUQ1dEID0gVEVTVENXRAotCi0jIFJ1biB0aGUgdGVzdHMgaW4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB0ZW1wb3JhcnkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKLSMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KLXdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICByZWdydGVzdC5tYWluKCkKK3JlZ3J0ZXN0Lm1haW5faW5fdGVtcF9jd2QoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKcmVuYW1lIHRvIExpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQppbmRleCAyN2RiMDI5Li5iZDI2ZTNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weQorKysgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTQzLDcgKzQzLDcgQEAKIAogdHJ5OgogICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZWR1Y3Rpb24KLSAgICBIQVNfUkVEVUNUSU9OID0gVHJ1ZQorICAgIEhBU19SRURVQ1RJT04gPSByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIEhBU19SRURVQ1RJT04gPSBGYWxzZQogCkBAIC05OSw2ICs5OSw5IEBACiBleGNlcHQ6CiAgICAgTUFYRkQgPSAyNTYKIAorIyBUbyBzcGVlZCB1cCB0ZXN0cyB3aGVuIHVzaW5nIHRoZSBmb3Jrc2VydmVyLCB3ZSBjYW4gcHJlbG9hZCB0aGVzZToKK1BSRUxPQUQgPSBbJ19fbWFpbl9fJywgJ3Rlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlciddCisKICMKICMgU29tZSB0ZXN0cyByZXF1aXJlIGN0eXBlcwogIwpAQCAtMjk0LDE3ICsyOTcsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChqb2luLmVsYXBzZWQsIDAuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCiAKKyAgICAgICAgIyBYWFggbWF5YmUgdGVybWluYXRpbmcgdG9vIHNvb24gY2F1c2VzIHRoZSBwcm9ibGVtcyBvbiBHZW50b28uLi4KKyAgICAgICAgdGltZS5zbGVlcCgxKQorCiAgICAgICAgIHAudGVybWluYXRlKCkKIAogICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJyk6CisgICAgICAgICAgICAjIE9uIHRoZSBHZW50b28gYnVpbGRib3Qgd2FpdHBpZCgpIG9mdGVuIHNlZW1zIHRvIGJsb2NrIGZvcmV2ZXIuCisgICAgICAgICAgICAjIFdlIHVzZSBhbGFybSgpIHRvIGludGVycnVwdCBpdCBpZiBpdCBibG9ja3MgZm9yIHRvbyBsb25nLgogICAgICAgICAgICAgZGVmIGhhbmRsZXIoKmFyZ3MpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignam9pbiB0b29rIHRvbyBsb25nOiAlcycgJSBwKQogICAgICAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKLSAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb2xkX2hhbmRsZXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKQEAgLTM0Miw3ICszNTAsNiBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmb3JraW5nCiAgICAgICAgIHdjb25uLnNlbmQoaWQpCiAgICAgICAgIGlmIGxlbihpZCkgPCAyOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CkBAIC0zOTAsNyArMzk3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MC4wKSkKICAgICAgICAgZXZlbnQuc2V0KCkKICAgICAgICAgcC5qb2luKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRfZm9yX2hhbmRsZShzZW50aW5lbCwgdGltZW91dD1ERUxUQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MSkpCiAKICMKICMKQEAgLTE3NzksNiArMTc4NiwzNSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXQoKSwgZXhwZWN0ZWQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLm1hcF9hc3luYywgc3FyLCBMKQogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3RyYWNlYmFjayhjbHMpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudAorCisgICAgZGVmIHRlc3RfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIFdlIHdhbnQgZW5zdXJlIHRoYXQgdGhlIHRyYWNlYmFjayBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIGlzCisgICAgICAgICMgY29udGFpbmVkIGluIHRoZSB0cmFjZWJhY2sgcmFpc2VkIGluIHRoZSBtYWluIHByb2Nlc3MuCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5Qb29sKDEpIGFzIHA6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwLmFwcGx5KHNlbGYuX3Rlc3RfdHJhY2ViYWNrKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBSdW50aW1lRXJyb3InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGV4YyksIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmFyZ3MsICgxMjMsKSkKKyAgICAgICAgICAgIGNhdXNlID0gZXhjLl9fY2F1c2VfXworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGNhdXNlKSwgbXVsdGlwcm9jZXNzaW5nLnBvb2wuUmVtb3RlVHJhY2ViYWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQnLCBjYXVzZS50YikKKworICAgICAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZjE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdyYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGYxLmdldHZhbHVlKCkpCisKIGRlZiByYWlzaW5nKCk6CiAgICAgcmFpc2UgS2V5RXJyb3IoImtleSIpCiAKQEAgLTI0ODYsNyArMjUyMiw3IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCiAgICAgICAgIHJlc291cmNlX3NoYXJlci5zdG9wKHRpbWVvdXQ9NSkKIAogICAgIEBjbGFzc21ldGhvZApAQCAtMjgwMCwzMCArMjgzNiw0MCBAQAogIyBUZXN0IHRoYXQgZnJvbSAuLi4gaW1wb3J0ICogd29ya3MgZm9yIGVhY2ggbW9kdWxlCiAjCiAKLWNsYXNzIF9UZXN0SW1wb3J0U3RhcihCYXNlVGVzdENhc2UpOgorY2xhc3MgX1Rlc3RJbXBvcnRTdGFyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorICAgIGRlZiBnZXRfbW9kdWxlX25hbWVzKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2xvYgorICAgICAgICBmb2xkZXIgPSBvcy5wYXRoLmRpcm5hbWUobXVsdGlwcm9jZXNzaW5nLl9fZmlsZV9fKQorICAgICAgICBwYXR0ZXJuID0gb3MucGF0aC5qb2luKGZvbGRlciwgJyoucHknKQorICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYihwYXR0ZXJuKQorICAgICAgICBtb2R1bGVzID0gW29zLnBhdGguc3BsaXRleHQob3MucGF0aC5zcGxpdChmKVsxXSlbMF0gZm9yIGYgaW4gZmlsZXNdCisgICAgICAgIG1vZHVsZXMgPSBbJ211bHRpcHJvY2Vzc2luZy4nICsgbSBmb3IgbSBpbiBtb2R1bGVzXQorICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLl9faW5pdF9fJykKKyAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZycpCisgICAgICAgIHJldHVybiBtb2R1bGVzCiAKICAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6Ci0gICAgICAgIG1vZHVsZXMgPSBbCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nJywgJ211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcuaGVhcCcsICdtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMnLAotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wb29sJywgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnLCAnbXVsdGlwcm9jZXNzaW5nLnV0aWwnCi0gICAgICAgICAgICBdCisgICAgICAgIG1vZHVsZXMgPSBzZWxmLmdldF9tb2R1bGVfbmFtZXMoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9yaycpCisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmtzZXJ2ZXInKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9zcGF3bl9wb3NpeCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX3NwYXduX3dpbjMyJykKKyAgICAgICAgICAgIGlmIG5vdCBIQVNfUkVEVUNUSU9OOgorICAgICAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9ya3NlcnZlcicpCiAKLSAgICAgICAgaWYgSEFTX1JFRFVDVElPTjoKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uJykKLQotICAgICAgICBpZiBjX2ludCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgY19pbnQgaXMgTm9uZToKICAgICAgICAgICAgICMgVGhpcyBtb2R1bGUgcmVxdWlyZXMgX2N0eXBlcwotICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQogCiAgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZXM6CiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kLCAnX19hbGxfXycpLCBuYW1lKQogCi0gICAgICAgICAgICBmb3IgYXR0ciBpbiBnZXRhdHRyKG1vZCwgJ19fYWxsX18nLCAoKSk6CisgICAgICAgICAgICBmb3IgYXR0ciBpbiBtb2QuX19hbGxfXzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIobW9kLCBhdHRyKSwKICAgICAgICAgICAgICAgICAgICAgJyVyIGRvZXMgbm90IGhhdmUgYXR0cmlidXRlICVyJyAlIChtb2QsIGF0dHIpCkBAIC0yOTA2LDcgKzI5NTIsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9raWxsZXIoY2xzLCBwaWQpOgotICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHVVNSMSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHVVNSMScpLCAncmVxdWlyZXMgU0lHVVNSMScpCkBAIC0yOTE5LDEyICsyOTY1LDE0IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtpbGxlciA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fa2lsbGVyLCBhcmdzPShwaWQsKSkKICAgICAgICAgICAgIGtpbGxlci5zdGFydCgpCi0gICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPSgxLCkpCi0gICAgICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oMiwpKQorICAgICAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGtpbGxlci5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnb3Rfc2lnbmFsWzBdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAwKQotICAgICAgICAgICAga2lsbGVyLmpvaW4oKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgb2xkaGFuZGxlcikKIApAQCAtMjkzNyw4ICsyOTg1LDExIEBACiAgICAgQHVuaXR0ZXN0LnNraXBJZihXSU4zMiwgInNraXBwZWQgb24gV2luZG93cyIpCiAgICAgZGVmIHRlc3RfaW52YWxpZF9oYW5kbGVzKHNlbGYpOgogICAgICAgICBjb25uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbig0NDk3NzYwOCkKKyAgICAgICAgIyBjaGVjayB0aGF0IHBvbGwoKSBkb2Vzbid0IGNyYXNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPU0Vycm9yKSwgY29ubi5wb2xsKQorICAgICAgICAgICAgY29ubi5wb2xsKCkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICMgSGFjayBwcml2YXRlIGF0dHJpYnV0ZSBfaGFuZGxlIHRvIGF2b2lkIHByaW50aW5nIGFuIGVycm9yCiAgICAgICAgICAgICAjIGluIGNvbm4uX19kZWxfXwpAQCAtMjk0NiwxMzEgKzI5OTcsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24sIC0xKQogCi0jCi0jIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZyb20gdGhlIGJhc2Ugb25lcyBpbiB0aGlzIG1vZHVsZQotIwotCi1kZWYgY3JlYXRlX3Rlc3RfY2FzZXMoTWl4aW4sIHR5cGUpOgotICAgIHJlc3VsdCA9IHt9Ci0gICAgZ2xvYiA9IGdsb2JhbHMoKQotICAgIFR5cGUgPSB0eXBlLmNhcGl0YWxpemUoKQotICAgIEFMTF9UWVBFUyA9IHsncHJvY2Vzc2VzJywgJ3RocmVhZHMnLCAnbWFuYWdlcid9Ci0KLSAgICBmb3IgbmFtZSBpbiBsaXN0KGdsb2Iua2V5cygpKToKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfVGVzdCcpOgotICAgICAgICAgICAgYmFzZSA9IGdsb2JbbmFtZV0KLSAgICAgICAgICAgIGFzc2VydCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKSA8PSBBTExfVFlQRVMsIHNldChiYXNlLkFMTE9XRURfVFlQRVMpCi0gICAgICAgICAgICBpZiB0eXBlIGluIGJhc2UuQUxMT1dFRF9UWVBFUzoKLSAgICAgICAgICAgICAgICBuZXduYW1lID0gJ1dpdGgnICsgVHlwZSArIG5hbWVbMTpdCi0gICAgICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgcmVzdWx0W25ld25hbWVdID0gVGVtcAotICAgICAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5ld25hbWUKLSAgICAgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBNaXhpbi5fX21vZHVsZV9fCi0gICAgcmV0dXJuIHJlc3VsdAotCi0jCi0jIENyZWF0ZSB0ZXN0IGNhc2VzCi0jCi0KLWNsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdwcm9jZXNzZXMnCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCi0gICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCi0gICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCi0gICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKLSAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQotICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKLSAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQotICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCi0gICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQotICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCi0gICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCi0gICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQotICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCi0gICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQotICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKLSAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCi0gICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQotCi10ZXN0Y2FzZXNfcHJvY2Vzc2VzID0gY3JlYXRlX3Rlc3RfY2FzZXMoUHJvY2Vzc2VzTWl4aW4sIHR5cGU9J3Byb2Nlc3NlcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19wcm9jZXNzZXMpCi0KLQotY2xhc3MgTWFuYWdlck1peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdtYW5hZ2VyJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgIFF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5RdWV1ZScpKQotICAgIEpvaW5hYmxlUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkpvaW5hYmxlUXVldWUnKSkKLSAgICBMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Mb2NrJykpCi0gICAgUkxvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlJMb2NrJykpCi0gICAgU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5TZW1hcGhvcmUnKSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlJykpCi0gICAgQ29uZGl0aW9uID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Db25kaXRpb24nKSkKLSAgICBFdmVudCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuRXZlbnQnKSkKLSAgICBCYXJyaWVyID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5CYXJyaWVyJykpCi0gICAgVmFsdWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlZhbHVlJykpCi0gICAgQXJyYXkgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkFycmF5JykpCi0gICAgbGlzdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIubGlzdCcpKQotICAgIGRpY3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmRpY3QnKSkKLSAgICBOYW1lc3BhY2UgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLk5hbWVzcGFjZScpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIFBvb2woY2xzLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIGNscy5tYW5hZ2VyLlBvb2woKmFyZ3MsICoqa3dkcykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGNscy5tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgIyBvbmx5IHRoZSBtYW5hZ2VyIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGFjdGl2ZV9jaGlsZHJlbigpCi0gICAgICAgICMgYnV0IHRoaXMgY2FuIHRha2UgYSBiaXQgb24gc2xvdyBtYWNoaW5lcywgc28gd2FpdCBhIGZldyBzZWNvbmRzCi0gICAgICAgICMgaWYgdGhlcmUgYXJlIG90aGVyIGNoaWxkcmVuIHRvbyAoc2VlICMxNzM5NSkKLSAgICAgICAgdCA9IDAuMDEKLSAgICAgICAgd2hpbGUgbGVuKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSkgPiAxIGFuZCB0IDwgNToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAodCkKLSAgICAgICAgICAgIHQgKj0gMgotICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgICAgIGlmIGNscy5tYW5hZ2VyLl9udW1iZXJfb2Zfb2JqZWN0cygpICE9IDA6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBzaW5jZSBzb21lIHRlc3RzIGRvIG5vdAotICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCBhbGwgcHJvY2Vzc2VzIHdoaWNoIGhvbGQgYSByZWZlcmVuY2UgdG8gYQotICAgICAgICAgICAgIyBtYW5hZ2VkIG9iamVjdCBoYXZlIGJlZW4gam9pbmVkLgotICAgICAgICAgICAgcHJpbnQoJ1NoYXJlZCBvYmplY3RzIHdoaWNoIHN0aWxsIGV4aXN0IGF0IG1hbmFnZXIgc2h1dGRvd246JykKLSAgICAgICAgICAgIHByaW50KGNscy5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkpCi0gICAgICAgIGNscy5tYW5hZ2VyLnNodXRkb3duKCkKLSAgICAgICAgY2xzLm1hbmFnZXIuam9pbigpCi0gICAgICAgIGNscy5tYW5hZ2VyID0gTm9uZQotCi10ZXN0Y2FzZXNfbWFuYWdlciA9IGNyZWF0ZV90ZXN0X2Nhc2VzKE1hbmFnZXJNaXhpbiwgdHlwZT0nbWFuYWdlcicpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19tYW5hZ2VyKQotCi0KLWNsYXNzIFRocmVhZHNNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAndGhyZWFkcycKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LlByb2Nlc3MKLSAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24KLSAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmN1cnJlbnRfcHJvY2VzcykKLSAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmFjdGl2ZV9jaGlsZHJlbikKLSAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQotICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBpcGUpCi0gICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlF1ZXVlKQotICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkpvaW5hYmxlUXVldWUpCi0gICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuTG9jaykKLSAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUkxvY2spCi0gICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5TZW1hcGhvcmUpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQm91bmRlZFNlbWFwaG9yZSkKLSAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkNvbmRpdGlvbikKLSAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuRXZlbnQpCi0gICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQmFycmllcikKLSAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuVmFsdWUpCi0gICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkFycmF5KQotCi10ZXN0Y2FzZXNfdGhyZWFkcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFRocmVhZHNNaXhpbiwgdHlwZT0ndGhyZWFkcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc190aHJlYWRzKQogCiAKIGNsYXNzIE90aGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNDIwLDcgKzMzNDYsNyBAQAogICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgogICAgICAgICBpbXBvcnQganNvbiwgc3VicHJvY2VzcwogICAgICAgICAjIHN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgdW51c3VhbCBmbGFncwotICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCiAgICAgICAgICAgICAgICAgJ1Rlc3RGbGFncy5ydW5faW5fY2hpbGQoKScpCiAgICAgICAgIGRhdGEgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1FJywgJy1TJywgJy1PJywgJy1jJywgcHJvZ10pCkBAIC0zNDY3LDEzICszMzkzLDE0IEBACiAKIGNsYXNzIFRlc3ROb0ZvcmtCb21iKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9ub2Zvcmtib21iKHNlbGYpOgorICAgICAgICBzbSA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbXBfZm9ya19ib21iLnB5JykKLSAgICAgICAgaWYgV0lOMzI6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUpCisgICAgICAgIGlmIHNtICE9ICdmb3JrJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUobmFtZSwgc20pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBvdXQuZGVjb2RlKCdhc2NpaScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVudGltZUVycm9yJywgZXJyLmRlY29kZSgnYXNjaWknKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKG5hbWUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayhuYW1lLCBzbSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyMycsIG91dC5kZWNvZGUoJ2FzY2lpJykucnN0cmlwKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBlcnIuZGVjb2RlKCdhc2NpaScpKQogCkBAIC0zNDkxLDcgKzM0MTgsOCBAQAogICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Y2xzLmNoaWxkLCBhcmdzPShuLTEsIGNvbm4pKQogICAgICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBwLmpvaW4odGltZW91dD01KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29ubi5zZW5kKGxlbih1dGlsLl9hZnRlcmZvcmtfcmVnaXN0cnkpKQogICAgICAgICBjb25uLmNsb3NlKCkKQEAgLTM1MDIsMTEgKzM0MzAsNzggQEAKICAgICAgICAgb2xkX3NpemUgPSBsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KQogICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuY2hpbGQsIGFyZ3M9KDUsIHcpKQogICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCiAgICAgICAgIG5ld19zaXplID0gci5yZWN2KCkKLSAgICAgICAgcC5qb2luKCkKKyAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobmV3X3NpemUsIG9sZF9zaXplKQogCiAjCisjIENoZWNrIHRoYXQgbm9uLWZvcmtlZCBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdW5uZWVkZWQgZmRzL2hhbmRsZXMKKyMKKworY2xhc3MgVGVzdENsb3NlRmRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfaGlnaF9zb2NrZXRfZmQoc2VsZik6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBzb2NrZXQgaGFuZGxlcywgc28KKyAgICAgICAgICAgICMgY2FsbGluZyBzb2NrZXQuZnJvbWZkKCkgc2hvdWxkIHByb2R1Y2UgV1NBRU5PVFNPQ0sgZXZlbgorICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBhIGhhbmRsZSBvZiB0aGUgc2FtZSBudW1iZXIuCisgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdlIHdhbnQgdG8gcHJvZHVjZSBhIHNvY2tldCB3aXRoIGFuIGZkIGhpZ2ggZW5vdWdoIHRoYXQgYQorICAgICAgICAgICAgIyBmcmVzaGx5IGNyZWF0ZWQgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBmZHMgYXMgaGlnaC4KKyAgICAgICAgICAgIGZkID0gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgICAgICB0b19jbG9zZSA9IFtdCisgICAgICAgICAgICB3aGlsZSBmZCA8IDUwOgorICAgICAgICAgICAgICAgIHRvX2Nsb3NlLmFwcGVuZChmZCkKKyAgICAgICAgICAgICAgICBmZCA9IG9zLmR1cChmZCkKKyAgICAgICAgICAgIGZvciB4IGluIHRvX2Nsb3NlOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHgpCisgICAgICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBjbG9zZShzZWxmLCBmZCk6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgc29ja2V0LnNvY2tldChmaWxlbm89ZmQpLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2Nsb3NlZmRzKGNscywgY29ubiwgZmQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LmZyb21mZChmZCwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgY29ubi5zZW5kKGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIGNvbm4uc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2VmZChzZWxmKToKKyAgICAgICAgaWYgbm90IEhBU19SRURVQ1RJT046CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncmVxdWlyZXMgZmQgcGlja2xpbmcnKQorCisgICAgICAgIHJlYWRlciwgd3JpdGVyID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQorICAgICAgICBmZCA9IHNlbGYuZ2V0X2hpZ2hfc29ja2V0X2ZkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2Nsb3NlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHdyaXRlciwgZmQpKQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgZSA9IHJlYWRlci5yZWN2KCkKKyAgICAgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlKGZkKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpCisKKyAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSA9PSAnZm9yayc6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGUsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBXU0FFTk9UU09DSyA9IDEwMDM4CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vID09IGVycm5vLkVCQURGIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS53aW5lcnJvciA9PSBXU0FFTk9UU09DSywgZSkKKworIwogIyBJc3N1ZSAjMTcwOTc6IEVJTlRSIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHJlY3YoKSwgc2VuZCgpLCBhY2NlcHQoKSBldGMKICMKIApAQCAtMzU1MCwxMCArMzU0NSwxMCBAQAogICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgaGFuZGxlcikKLSAgICAgICAgbCA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyKCkKLSAgICAgICAgY29ubi5zZW5kKGwuYWRkcmVzcykKLSAgICAgICAgYSA9IGwuYWNjZXB0KCkKLSAgICAgICAgYS5zZW5kKCd3ZWxjb21lJykKKyAgICAgICAgd2l0aCBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcigpIGFzIGw6CisgICAgICAgICAgICBjb25uLnNlbmQobC5hZGRyZXNzKQorICAgICAgICAgICAgYSA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIGEuc2VuZCgnd2VsY29tZScpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQogICAgIGRlZiB0ZXN0X2lnbm9yZV9saXN0ZW5lcihzZWxmKToKQEAgLTM1NzQsMjYgKzM1NjksMjY3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjb25uLmNsb3NlKCkKIAotIwotIwotIworY2xhc3MgVGVzdFN0YXJ0TWV0aG9kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NoZWNrX2NvbnRleHQoY2xzLCBjb25uKToKKyAgICAgICAgY29ubi5zZW5kKG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkpCiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgIGRlZiBjaGVja19jb250ZXh0KHNlbGYsIGN0eCk6CisgICAgICAgIHIsIHcgPSBjdHguUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fY2hlY2tfY29udGV4dCwgYXJncz0odywpKQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIGNoaWxkX21ldGhvZCA9IHIucmVjdigpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkX21ldGhvZCwgY3R4LmdldF9zdGFydF9tZXRob2QoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdHggPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2NvbnRleHQobWV0aG9kKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjdHguZ2V0X2NvbnRleHQoKSwgY3R4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9zdGFydF9tZXRob2QsICdzcGF3bicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X3N0YXJ0X21ldGhvZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChjdHgpCisKKyAgICBkZWYgdGVzdF9zZXRfZ2V0KHNlbGYpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgb2xkX21ldGhvZCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKLSAgICBjaGVja19lbm91Z2hfc2VtYXBob3JlcygpCi0gICAgdXRpbC5nZXRfdGVtcF9kaXIoKSAgICAgIyBjcmVhdGVzIHRlbXAgZGlyZWN0b3J5IGZvciB1c2UgYnkgYWxsIHByb2Nlc3NlcwotICAgIG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoTE9HX0xFVkVMKQorICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlcicpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QobWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgICAgIGN0eCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoY3R4KS5fX25hbWVfXy5sb3dlcigpLnN0YXJ0c3dpdGgobWV0aG9kKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIGN0eC5Qcm9jZXNzLl9fbmFtZV9fLmxvd2VyKCkuc3RhcnRzd2l0aChtZXRob2QpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChtdWx0aXByb2Nlc3NpbmcpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoY291bnQsIDEpCisKKyAgICBkZWYgdGVzdF9nZXRfYWxsKHNlbGYpOgorICAgICAgICBtZXRob2RzID0gbXVsdGlwcm9jZXNzaW5nLmdldF9hbGxfc3RhcnRfbWV0aG9kcygpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2RzLCBbJ3NwYXduJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kcyA9PSBbJ2ZvcmsnLCAnc3Bhd24nXSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgPT0gWydmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInXSkKKworIworIyBDaGVjayB0aGF0IGtpbGxpbmcgcHJvY2VzcyBkb2VzIG5vdCBsZWFrIG5hbWVkIHNlbWFwaG9yZXMKKyMKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgInRlc3Qgc2VtYW50aWNzIGRvbid0IG1ha2Ugc2Vuc2Ugb24gV2luZG93cyIpCitjbGFzcyBUZXN0U2VtYXBob3JlVHJhY2tlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3RyYWNrZXIoc2VsZik6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGNtZCA9ICcnJ2lmIDE6CisgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wLCB0aW1lLCBvcworICAgICAgICAgICAgbXAuc2V0X3N0YXJ0X21ldGhvZCgic3Bhd24iKQorICAgICAgICAgICAgbG9jazEgPSBtcC5Mb2NrKCkKKyAgICAgICAgICAgIGxvY2syID0gbXAuTG9jaygpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazEuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazIuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAnJycKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsIGNtZCAlICh3LCB3KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPVt3XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgd2l0aCBvcGVuKHIsICdyYicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZjoKKyAgICAgICAgICAgIG5hbWUxID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgbmFtZTIgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lMSkKKyAgICAgICAgcC50ZXJtaW5hdGUoKQorICAgICAgICBwLndhaXQoKQorICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjdHg6CisgICAgICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZTIpCisgICAgICAgICMgZG9jcyBzYXkgaXQgc2hvdWxkIGJlIEVOT0VOVCwgYnV0IE9TWCBzZWVtcyB0byBnaXZlIEVJTlZBTAorICAgICAgICBzZWxmLmFzc2VydEluKGN0eC5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9FTlQsIGVycm5vLkVJTlZBTCkpCisgICAgICAgIGVyciA9IHAuc3RkZXJyLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICBleHBlY3RlZCA9ICdzZW1hcGhvcmVfdHJhY2tlcjogVGhlcmUgYXBwZWFyIHRvIGJlIDIgbGVha2VkIHNlbWFwaG9yZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsICdzZW1hcGhvcmVfdHJhY2tlcjogJXI6IFxbRXJybm8nICUgbmFtZTEpCisKKyMKKyMgTWl4aW5zCisjCisKK2NsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICdwcm9jZXNzZXMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCisgICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCisgICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKKyAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQorICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKKyAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQorICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCisgICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQorICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCisgICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCisgICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQorICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCisgICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQorICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKKyAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCisgICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQogCiAKLWRlZiB0ZWFyRG93bk1vZHVsZSgpOgotICAgICMgcGF1c2UgYSBiaXQgc28gd2UgZG9uJ3QgZ2V0IHdhcm5pbmcgYWJvdXQgZGFuZ2xpbmcgdGhyZWFkcy9wcm9jZXNzZXMKLSAgICB0aW1lLnNsZWVwKDAuNSkKK2NsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAnbWFuYWdlcicKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKKyAgICBRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUXVldWUnKSkKKyAgICBKb2luYWJsZVF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Kb2luYWJsZVF1ZXVlJykpCisgICAgTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTG9jaycpKQorICAgIFJMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5STG9jaycpKQorICAgIFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuU2VtYXBob3JlJykpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQm91bmRlZFNlbWFwaG9yZScpKQorICAgIENvbmRpdGlvbiA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQ29uZGl0aW9uJykpCisgICAgRXZlbnQgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkV2ZW50JykpCisgICAgQmFycmllciA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQmFycmllcicpKQorICAgIFZhbHVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5WYWx1ZScpKQorICAgIEFycmF5ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5BcnJheScpKQorICAgIGxpc3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmxpc3QnKSkKKyAgICBkaWN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5kaWN0JykpCisgICAgTmFtZXNwYWNlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5OYW1lc3BhY2UnKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBQb29sKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBjbHMubWFuYWdlci5Qb29sKCphcmdzLCAqKmt3ZHMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICMgb25seSB0aGUgbWFuYWdlciBwcm9jZXNzIHNob3VsZCBiZSByZXR1cm5lZCBieSBhY3RpdmVfY2hpbGRyZW4oKQorICAgICAgICAjIGJ1dCB0aGlzIGNhbiB0YWtlIGEgYml0IG9uIHNsb3cgbWFjaGluZXMsIHNvIHdhaXQgYSBmZXcgc2Vjb25kcworICAgICAgICAjIGlmIHRoZXJlIGFyZSBvdGhlciBjaGlsZHJlbiB0b28gKHNlZSAjMTczOTUpCisgICAgICAgIHQgPSAwLjAxCisgICAgICAgIHdoaWxlIGxlbihtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkpID4gMSBhbmQgdCA8IDU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHQpCisgICAgICAgICAgICB0ICo9IDIKKyAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICBpZiBjbHMubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKSAhPSAwOgorICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3Igc2luY2Ugc29tZSB0ZXN0cyBkbyBub3QKKyAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgYWxsIHByb2Nlc3NlcyB3aGljaCBob2xkIGEgcmVmZXJlbmNlIHRvIGEKKyAgICAgICAgICAgICMgbWFuYWdlZCBvYmplY3QgaGF2ZSBiZWVuIGpvaW5lZC4KKyAgICAgICAgICAgIHByaW50KCdTaGFyZWQgb2JqZWN0cyB3aGljaCBzdGlsbCBleGlzdCBhdCBtYW5hZ2VyIHNodXRkb3duOicpCisgICAgICAgICAgICBwcmludChjbHMubWFuYWdlci5fZGVidWdfaW5mbygpKQorICAgICAgICBjbHMubWFuYWdlci5zaHV0ZG93bigpCisgICAgICAgIGNscy5tYW5hZ2VyLmpvaW4oKQorICAgICAgICBjbHMubWFuYWdlciA9IE5vbmUKIAogCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQorY2xhc3MgVGhyZWFkc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICd0aHJlYWRzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUHJvY2VzcworICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbgorICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY3VycmVudF9wcm9jZXNzKQorICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuYWN0aXZlX2NoaWxkcmVuKQorICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCisgICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUGlwZSkKKyAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUXVldWUpCisgICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuSm9pbmFibGVRdWV1ZSkKKyAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Mb2NrKQorICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5STG9jaykKKyAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlNlbWFwaG9yZSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Cb3VuZGVkU2VtYXBob3JlKQorICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQ29uZGl0aW9uKQorICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5FdmVudCkKKyAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5CYXJyaWVyKQorICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5WYWx1ZSkKKyAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQXJyYXkpCisKKyMKKyMgRnVuY3Rpb25zIHVzZWQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgZnJvbSB0aGUgYmFzZSBvbmVzIGluIHRoaXMgbW9kdWxlCisjCisKK2RlZiBpbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KHJlbW90ZV9nbG9icywgc3RhcnRfbWV0aG9kKToKKyAgICBfX21vZHVsZV9fID0gcmVtb3RlX2dsb2JzWydfX25hbWVfXyddCisgICAgbG9jYWxfZ2xvYnMgPSBnbG9iYWxzKCkKKyAgICBBTExfVFlQRVMgPSB7J3Byb2Nlc3NlcycsICd0aHJlYWRzJywgJ21hbmFnZXInfQorCisgICAgZm9yIG5hbWUsIGJhc2UgaW4gbG9jYWxfZ2xvYnMuaXRlbXMoKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYmFzZSwgdHlwZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEJhc2VUZXN0Q2FzZSk6CisgICAgICAgICAgICBpZiBiYXNlIGlzIEJhc2VUZXN0Q2FzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYXNzZXJ0IHNldChiYXNlLkFMTE9XRURfVFlQRVMpIDw9IEFMTF9UWVBFUywgYmFzZS5BTExPV0VEX1RZUEVTCisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gYmFzZS5BTExPV0VEX1RZUEVTOgorICAgICAgICAgICAgICAgIG5ld25hbWUgPSAnV2l0aCcgKyB0eXBlXy5jYXBpdGFsaXplKCkgKyBuYW1lWzE6XQorICAgICAgICAgICAgICAgIE1peGluID0gbG9jYWxfZ2xvYnNbdHlwZV8uY2FwaXRhbGl6ZSgpICsgJ01peGluJ10KKyAgICAgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuZXduYW1lCisgICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gX19tb2R1bGVfXworICAgICAgICAgICAgICAgIHJlbW90ZV9nbG9ic1tuZXduYW1lXSA9IFRlbXAKKyAgICAgICAgZWxpZiBpc3N1YmNsYXNzKGJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgb2JqZWN0KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuYW1lCisgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBfX21vZHVsZV9fCisgICAgICAgICAgICByZW1vdGVfZ2xvYnNbbmFtZV0gPSBUZW1wCisKKyAgICBkYW5nbGluZyA9IFtOb25lLCBOb25lXQorICAgIG9sZF9zdGFydF9tZXRob2QgPSBbTm9uZV0KKworICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIGRhbmdsaW5nWzBdID0gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nLmNvcHkoKQorICAgICAgICBkYW5nbGluZ1sxXSA9IHRocmVhZGluZy5fZGFuZ2xpbmcuY29weSgpCisgICAgICAgIG9sZF9zdGFydF9tZXRob2RbMF0gPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZChhbGxvd19ub25lPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKHN0YXJ0X21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdGFydF9tZXRob2QgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBzdGFydCBtZXRob2Qgbm90IHN1cHBvcnRlZCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZXMgb24gUkxvY2sgY3JlYXRpb24sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKKyAgICAgICAgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKQorICAgICAgICB1dGlsLmdldF90ZW1wX2RpcigpICAgICAjIGNyZWF0ZXMgdGVtcCBkaXJlY3RvcnkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKS5zZXRMZXZlbChMT0dfTEVWRUwpCisKKyAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX3N0YXJ0X21ldGhvZFswXSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgIyBwYXVzZSBhIGJpdCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZyBhYm91dCBkYW5nbGluZyB0aHJlYWRzL3Byb2Nlc3NlcworICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgdG1wID0gc2V0KG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZykgLSBzZXQoZGFuZ2xpbmdbMF0pCisgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgIHByaW50KCdEYW5nbGluZyBwcm9jZXNzZXM6JywgdG1wLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGRlbCB0bXAKKyAgICAgICAgdG1wID0gc2V0KHRocmVhZGluZy5fZGFuZ2xpbmcpIC0gc2V0KGRhbmdsaW5nWzFdKQorICAgICAgICBpZiB0bXA6CisgICAgICAgICAgICBwcmludCgnRGFuZ2xpbmcgdGhyZWFkczonLCB0bXAsIGZpbGU9c3lzLnN0ZGVycikKKworICAgIHJlbW90ZV9nbG9ic1snc2V0VXBNb2R1bGUnXSA9IHNldFVwTW9kdWxlCisgICAgcmVtb3RlX2dsb2JzWyd0ZWFyRG93bk1vZHVsZSddID0gdGVhckRvd25Nb2R1bGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdSBiL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmIyMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYXVkaW9kYXRhL3BsdWNrLXBjbTI0LmF1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkgYi9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CmluZGV4IDAwODI4MWYuLmI3NDk3Y2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvYXVkaW90ZXN0cy5weQpAQCAtNSwyMyArNSwxMiBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN5cwogCi1kZWYgYnl0ZXN3YXAyKGRhdGEpOgotICAgIGEgPSBhcnJheS5hcnJheSgnaCcpCi0gICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICBhLmJ5dGVzd2FwKCkKLSAgICByZXR1cm4gYS50b2J5dGVzKCkKK2NsYXNzIFVuc2Vla2FibGVJTyhpby5GaWxlSU8pOgorICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogCi1kZWYgYnl0ZXN3YXAzKGRhdGEpOgotICAgIGJhID0gYnl0ZWFycmF5KGRhdGEpCi0gICAgYmFbOjozXSA9IGRhdGFbMjo6M10KLSAgICBiYVsyOjozXSA9IGRhdGFbOjozXQotICAgIHJldHVybiBieXRlcyhiYSkKLQotZGVmIGJ5dGVzd2FwNChkYXRhKToKLSAgICBhID0gYXJyYXkuYXJyYXkoJ2knKQotICAgIGEuZnJvbWJ5dGVzKGRhdGEpCi0gICAgYS5ieXRlc3dhcCgpCi0gICAgcmV0dXJuIGEudG9ieXRlcygpCisgICAgZGVmIHNlZWsoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIAogCiBjbGFzcyBBdWRpb1Rlc3RzOgpAQCAtNDksNiArMzgsMTIgQEAKICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcywKICAgICAgICAgICAgICAgICAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsIGNvbXBuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBuY2hhbm5lbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2FtcHdpZHRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIGZyYW1lcmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmZyYW1lcywgbmZyYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcHR5cGUsIGNvbXB0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wbmFtZSwgY29tcG5hbWUpCiAKICAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcyhwYXJhbXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLmxvYWRzKGR1bXApLCBwYXJhbXMpCkBAIC02NSwxNSArNjAsMTIgQEAKICAgICAgICAgcmV0dXJuIGYKIAogICAgIGRlZiBjaGVja19maWxlKHNlbGYsIHRlc3RmaWxlLCBuZnJhbWVzLCBmcmFtZXMpOgotICAgICAgICBmID0gc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYubmNoYW5uZWxzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCBzZWxmLnNhbXB3aWR0aCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5mcmFtZXJhdGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCBuZnJhbWVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMobmZyYW1lcyksIGZyYW1lcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfcGFyYW1zKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCkBAIC04Myw2ICs3NSw1MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5mcmFtZXMsIHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCiAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfY29udGV4dF9tYW5hZ2VyX2NhbGxzX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIENsb3NlIGNoZWNrcyBmb3IgYSBtaW5pbXVtIGhlYWRlciBhbmQgd2lsbCByYWlzZSBhbiBlcnJvcgorICAgICAgICAjIGlmIGl0IGlzIG5vdCBzZXQsIHNvIHRoaXMgcHJvdmVzIHRoYXQgY2xvc2UgaXMgY2FsbGVkLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYubW9kdWxlLkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4sICd3YicpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5FcnJvcik6CisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfd2l0aF9vcGVuX2ZpbGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2V0bmNoYW5uZWxzKHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgICAgIGYuc2V0c2FtcHdpZHRoKHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgICAgIGYuc2V0ZnJhbWVyYXRlKHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgICAgIGYuc2V0Y29tcHR5cGUoc2VsZi5jb21wdHlwZSwgc2VsZi5jb21wbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUuY2xvc2VkLCBzZWxmLmNsb3NlX2ZkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZ2V0ZnAoKS5jbG9zZWQpCisgICAgICAgICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VfZmQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5nZXRmcCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5jbG9zZWQsIHNlbGYuY2xvc2VfZmQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfd2l0aF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIyBJZiB0aGUgZmlsZSBkb2Vzbid0IGdldCBjbG9zZWQsIHRoaXMgdGVzdCB3b24ndCBmYWlsLCBidXQgaXQgd2lsbAorICAgICAgICAjIHByb2R1Y2UgYSByZXNvdXJjZSBsZWFrIHdhcm5pbmcuCisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLnNldG5jaGFubmVscyhzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgIGYuc2V0c2FtcHdpZHRoKHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgZi5zZXRmcmFtZXJhdGUoc2VsZi5mcmFtZXJhdGUpCisgICAgICAgICAgICBmLnNldGNvbXB0eXBlKHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4pIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZ2V0ZnAoKS5jbG9zZWQpCisgICAgICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgc2VsZi5mcmFtZXJhdGUpCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlX2ZkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5nZXRmcCgpKQorCiAgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKQEAgLTkxLDYgKzEzMCwzMCBAQAogCiAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhieXRlYXJyYXkoc2VsZi5mcmFtZXMpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYXJyYXkoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhhcnJheS5hcnJheSgnaCcsIHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3dyaXRlX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhtZW1vcnl2aWV3KHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKwogICAgIGRlZiB0ZXN0X2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHRlc3RmaWxlLndyaXRlKGInYWJhYmFnYWxhbWFnYScpCkBAIC0xMjksNiArMTkyLDU5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLnJlYWQoMTMpLCBiJ2FiYWJhZ2FsYW1hZ2EnKQogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHRlc3RmaWxlLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQogCisgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV9yZWFkKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCisKKyAgICAgICAgd2l0aCBVbnNlZWthYmxlSU8oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZSh0ZXN0ZmlsZSwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfd3JpdGUoc2VsZik6CisgICAgICAgIHdpdGggVW5zZWVrYWJsZUlPKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX2ZpbGUodGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQorCisgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKKyAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgorICAgICAgICB3aXRoIFVuc2Vla2FibGVJTyhURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgdGVzdGZpbGUud3JpdGUoYidhYmFiYWdhbGFtYWdhJykKKyAgICAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKHRlc3RmaWxlKQorICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcyArIDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUucmVhZCgxMyksIGInYWJhYmFnYWxhbWFnYScpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUodGVzdGZpbGUsIHNlbGYubmZyYW1lcyArIDEsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV9vdmVyZmxvd2VkX3dyaXRlKHNlbGYpOgorICAgICAgICB3aXRoIFVuc2Vla2FibGVJTyhURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgdGVzdGZpbGUud3JpdGUoYidhYmFiYWdhbGFtYWdhJykKKyAgICAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKHRlc3RmaWxlKQorICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcyAtIDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUucmVhZCgxMyksIGInYWJhYmFnYWxhbWFnYScpCisgICAgICAgICAgICBmcmFtZXNpemUgPSBzZWxmLm5jaGFubmVscyAqIHNlbGYuc2FtcHdpZHRoCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUodGVzdGZpbGUsIHNlbGYubmZyYW1lcyAtIDEsIHNlbGYuZnJhbWVzWzotZnJhbWVzaXplXSkKKwogCiBjbGFzcyBBdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUoQXVkaW9UZXN0cyk6CiAKQEAgLTIwNSwxMiArMzIxLDkgQEAKIAogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUucmVhZCgxMyksIGInYWJhYmFnYWxhbWFnYScpCi0gICAgICAgICAgICBmID0gc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYubmNoYW5uZWxzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRzYW1wd2lkdGgoKSwgc2VsZi5zYW1wd2lkdGgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmZyYW1lcmF0ZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCBzZWxmLnNuZGZpbGVuZnJhbWVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKHNlbGYubmZyYW1lcyksIHNlbGYuZnJhbWVzKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weSBiL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVhYjY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTEwLnB5CkBAIC0wLDAgKzEsMyBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKyJzcGFtLCBiYXIsIGJsYWgiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkgYi9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKaW5kZXggY2Y1NGMyOC4uMGE2Mjk0MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQpAQCAtMTYwLDE0ICsxNjAsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICBkZWZcbmcgICBoaScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLAotICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgICMgY2hlY2sga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyh0YWJzaXplPTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgZGVmXG5nICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKHRhYnNpemU9NCkpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgYVxuIGInLCBzZWxmLm1hcnNoYWwoYicgXHRhXG5cdGInKS5leHBhbmR0YWJzKDEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5leHBhbmR0YWJzLCA0MiwgNDIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkgYi9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiNDIwOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weQpAQCAtMCwwICsxLDQxIEBACisiIiJieXRlY29kZV9oZWxwZXIgLSBzdXBwb3J0IHRvb2xzIGZvciB0ZXN0aW5nIGNvcnJlY3QgYnl0ZWNvZGUgZ2VuZXJhdGlvbiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBkaXMKK2ltcG9ydCBpbworCitfVU5TUEVDSUZJRUQgPSBvYmplY3QoKQorCitjbGFzcyBCeXRlY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJDdXN0b20gYXNzZXJ0aW9uIG1ldGhvZHMgZm9yIGluc3BlY3RpbmcgYnl0ZWNvZGUuIiIiCisKKyAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyhzZWxmLCBjbyk6CisgICAgICAgIHMgPSBpby5TdHJpbmdJTygpCisgICAgICAgIGRpcy5kaXMoY28sIGZpbGU9cykKKyAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUoKQorCisgICAgZGVmIGFzc2VydEluQnl0ZWNvZGUoc2VsZiwgeCwgb3BuYW1lLCBhcmd2YWw9X1VOU1BFQ0lGSUVEKToKKyAgICAgICAgIiIiUmV0dXJucyBpbnN0ciBpZiBvcCBpcyBmb3VuZCwgb3RoZXJ3aXNlIHRocm93cyBBc3NlcnRpb25FcnJvciIiIgorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoeCk6CisgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gb3BuYW1lOgorICAgICAgICAgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQgb3IgaW5zdHIuYXJndmFsID09IGFyZ3ZhbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RyCisgICAgICAgIGRpc2Fzc2VtYmx5ID0gc2VsZi5nZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKHgpCisgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICBtc2cgPSAnJXMgbm90IGZvdW5kIGluIGJ5dGVjb2RlOlxuJXMnICUgKG9wbmFtZSwgZGlzYXNzZW1ibHkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAnKCVzLCVyKSBub3QgZm91bmQgaW4gYnl0ZWNvZGU6XG4lcycKKyAgICAgICAgICAgIG1zZyA9IG1zZyAlIChvcG5hbWUsIGFyZ3ZhbCwgZGlzYXNzZW1ibHkpCisgICAgICAgIHNlbGYuZmFpbChtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90SW5CeXRlY29kZShzZWxmLCB4LCBvcG5hbWUsIGFyZ3ZhbD1fVU5TUEVDSUZJRUQpOgorICAgICAgICAiIiJUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgaWYgb3AgaXMgZm91bmQiIiIKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHgpOgorICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09IG9wbmFtZToKKyAgICAgICAgICAgICAgICBkaXNhc3NlbWJseSA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyhjbykKKyAgICAgICAgICAgICAgICBpZiBvcGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICclcyBvY2N1cnMgaW4gYnl0ZWNvZGU6XG4lcycgJSAob3BuYW1lLCBkaXNhc3NlbWJseSkKKyAgICAgICAgICAgICAgICBlbGlmIGluc3RyLmFyZ3ZhbCA9PSBhcmd2YWw6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICcoJXMsJXIpIG9jY3VycyBpbiBieXRlY29kZTpcbiVzJworICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cgJSAob3BuYW1lLCBhcmd2YWwsIGRpc2Fzc2VtYmx5KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weSBiL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CmluZGV4IDEzNDNmMzQuLmI2N2QyOGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CisrKyBiL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CkBAIC02MTksNiArNjE5LDEwIEBACiAgICAgICAgIGVxKHRkKGhvdXJzPS0uMi91c19wZXJfaG91ciksIHRkKDApKQogICAgICAgICBlcSh0ZChkYXlzPS0uNC91c19wZXJfZGF5LCBob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZChtaWNyb3NlY29uZHM9LTEpKQogCisgICAgICAgICMgVGVzdCBmb3IgYSBwYXRjaCBpbiBJc3N1ZSA4ODYwCisgICAgICAgIGVxKHRkKG1pY3Jvc2Vjb25kcz0wLjUpLCAwLjUqdGQobWljcm9zZWNvbmRzPTEuMCkpCisgICAgICAgIGVxKHRkKG1pY3Jvc2Vjb25kcz0wLjUpLy90ZC5yZXNvbHV0aW9uLCAwLjUqdGQucmVzb2x1dGlvbi8vdGQucmVzb2x1dGlvbikKKwogICAgIGRlZiB0ZXN0X21hc3NpdmVfbm9ybWFsaXphdGlvbihzZWxmKToKICAgICAgICAgdGQgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPS0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZmluYWxfYS5weSBiL0xpYi90ZXN0L2ZpbmFsX2EucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwZWU4OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2ZpbmFsX2EucHkKQEAgLTAsMCArMSwxOSBAQAorIiIiCitGb2RkZXIgZm9yIG1vZHVsZSBmaW5hbGl6YXRpb24gdGVzdHMgaW4gdGVzdF9tb2R1bGUuCisiIiIKKworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlc3QuZmluYWxfYgorCit4ID0gJ2EnCisKK2NsYXNzIEM6CisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICMgSW5zcGVjdCBtb2R1bGUgZ2xvYmFscyBhbmQgYnVpbHRpbnMKKyAgICAgICAgcHJpbnQoInggPSIsIHgpCisgICAgICAgIHByaW50KCJmaW5hbF9iLnggPSIsIHRlc3QuZmluYWxfYi54KQorICAgICAgICBwcmludCgic2h1dGlsLnJtdHJlZSA9IiwgZ2V0YXR0cihzaHV0aWwucm10cmVlLCAnX19uYW1lX18nLCBOb25lKSkKKyAgICAgICAgcHJpbnQoImxlbiA9IiwgZ2V0YXR0cihsZW4sICdfX25hbWVfXycsIE5vbmUpKQorCitjID0gQygpCitfdW5kZXJzY29yZWQgPSBDKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ZpbmFsX2IucHkgYi9MaWIvdGVzdC9maW5hbF9iLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9maW5hbF9iLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIgorRm9kZGVyIGZvciBtb2R1bGUgZmluYWxpemF0aW9uIHRlc3RzIGluIHRlc3RfbW9kdWxlLgorIiIiCisKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZXN0LmZpbmFsX2EKKworeCA9ICdiJworCitjbGFzcyBDOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAjIEluc3BlY3QgbW9kdWxlIGdsb2JhbHMgYW5kIGJ1aWx0aW5zCisgICAgICAgIHByaW50KCJ4ID0iLCB4KQorICAgICAgICBwcmludCgiZmluYWxfYS54ID0iLCB0ZXN0LmZpbmFsX2EueCkKKyAgICAgICAgcHJpbnQoInNodXRpbC5ybXRyZWUgPSIsIGdldGF0dHIoc2h1dGlsLnJtdHJlZSwgJ19fbmFtZV9fJywgTm9uZSkpCisgICAgICAgIHByaW50KCJsZW4gPSIsIGdldGF0dHIobGVuLCAnX19uYW1lX18nLCBOb25lKSkKKworYyA9IEMoKQorX3VuZGVyc2NvcmVkID0gQygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9mb3JrX3dhaXQucHkgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKaW5kZXggODg1MjdkZi4uMTliNTRlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZm9ya193YWl0LnB5CisrKyBiL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgICAgc2VsZi5hbGl2ZVtpZF0gPSBvcy5nZXRwaWQoKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoU0hPUlRTTEVFUCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHdhaXRfaW1wbChzZWxmLCBjcGlkKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2tleWNlcnQzLnBlbSBiL0xpYi90ZXN0L2tleWNlcnQzLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZhNjJjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qva2V5Y2VydDMucGVtCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UAoramJ3TmZSNUN0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTQorOXoyajFPbGFOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWgorYWdnRWRrajFUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUVDZ1lBMGFIK1QyVmYzV09QdjhLZGtjSmc2Z0NSZQoreUpLWE9XZ1dSY2ljeC9DVXpPRXNUeG1GSURQTHhxQVdBM2s3djBCKzN2akd3NVk5bHljVi81WHFYTm9RSTE0agoreTA5aU5zdW1kczEzdTVBS2tHZFRKblpoUTdVS2RvVkhmdVA0NFpkT3Yvcko1L1ZENkY0eld5d3BlOTBwY2JLKworQVdEVnR1c2dHUUJTaWVFbDFRSkJBT3lWclVHNWwyeW9VQnRkMnpyL2tpR20vRFl5WGxJdGhRTy9BMy9MbmdEVworNS95ZEd4VnNUN2xBVk9nQ3NvVCswTDRlZlRoOTBQanpXOExQUXJQQldWTUNRUURTM2gvRnRZWWQ1bGZ6K0ZOTAorOUNFZTFGMXc5bDhQNzQ5dU5VRDBnMzE3enYxdGF0SXFWQ3NRV0hmVkhOZFZ2ZlErdlNGdzM4T09STzAwWHFzOQorMUdKckFrQmtvWFhFa3hDWm95NFB0ZWhlTy84SVdXTEdHcjZMN2RpNk16RmwxbElxd1Q2RDhMOW9hVjJ2eW5GVAorRG5Lb3AwcGEwOVVuaGp5dzU3S01ObVNFMlNVSkFrRUFybG9URXpwZ1JtQ3E0SUsyL05wQ2VHZEhTNXVxUmxiaAorMVZJYS94R3BzN0VXUWw1TW44c3dRRGVsL1lQM1dHSFRqZng3cGdTZWdRZmt5YVJ0R3BaOU9RSkFhOVZ1bWo4bQorSkFBdEkwQm5nYThoZ1F4N0JoVFFZNENhZER4eWlSR09HWWh3VXpZVkNxa2Iyc2JWUkg5SG53VWFKVDdjV0JZMworUm5KZEhPTVhXZW03L3c9PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMSAoMHgwKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MSAoMHhiMDkyNjRiMWYyZGEyMWQxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTm92IDEzIDE5OjQ3OjA3IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIEw9Q2FzdGxlIEFudGhyYXgsIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIENOPWxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmMyOmUwOjBmOjQ5OjAwOjI4OjM2OmY5OjcwOjVjOjhmOjhkOmJjOjBkOgorICAgICAgICAgICAgICAgICAgICA3ZDoxZTo0MjpiNTplYzoxZDo1YzoyZjphNDozMTo3MDoxNjowZjpjMDpjYjoKKyAgICAgICAgICAgICAgICAgICAgYzY6MjQ6ZDM6YmU6MTM6MTY6ZWU6YTU6Njc6OTc6MDM6YTY6ZGY6YTk6OTk6CisgICAgICAgICAgICAgICAgICAgIDk2OmNjOmM3OjJhOmZiOjExOjdmOjRlOjY1OjRmOjhhOjVlOjgyOjIxOjRjOgorICAgICAgICAgICAgICAgICAgICBmNzozZDphMzpkNDplOTo1YTozNzplNzoyMjpmZDo3ZTpjZDo1Mzo2ZDo5MzoKKyAgICAgICAgICAgICAgICAgICAgMzQ6ZGU6OWM6YWQ6ODQ6YTI6Mzc6YmU6YzU6OGQ6ODI6NGY6ZTM6YWU6MjM6CisgICAgICAgICAgICAgICAgICAgIGYzOmJlOmE3Ojc1OjJjOjcyOjBmOmVhOmYzOmNhOmNkOmZjOmU5OjNmOmI1OgorICAgICAgICAgICAgICAgICAgICBhZjo1Njo5OTo2YTowODowNDo3Njo0ODpmNTo0ZTpjNDphYzpiZjo1YzpkNjoKKyAgICAgICAgICAgICAgICAgICAgMjE6ODI6YTU6M2M6ODg6ZTU6YmU6MWI6YjEKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICAyZjo0Mjo1ZjphMzowOToyYzpmYTo1MTo4ODpjNzozNzo3ZjplYTowZTo2MzpmMDphMjo5YToKKyAgICAgICAgIGU1OjVhOmUyOmM4OjIwOmYwOjNmOjYwOmJjOmM4OjBmOmI2OmM2Ojc2OmNlOmRiOjgzOjkzOgorICAgICAgICAgZjU6YTM6MzM6Njc6MDE6OGU6MDQ6Y2Q6MDA6OWE6NzM6ZmQ6ZjM6MzU6ODY6ZmE6ZDc6MTM6CisgICAgICAgICBlMjo0NjpjNjo5ZDpjMDoyOTo1MzpkNDphOTo5MDpiODo3Nzo0YjplNjo4Mzo3NjplNDo5MjoKKyAgICAgICAgIGQ2OjljOjUwOmNmOjQzOmQwOmM2OjAxOjc3OjYxOjlhOmRlOjliOjcwOmY3OjcyOmNkOjU5OgorICAgICAgICAgMDA6MzE6Njk6ZDk6YjQ6Y2E6MDY6OWM6NmQ6YzM6Yzc6ODA6OGM6Njg6ZTY6YjU6YTI6Zjg6CisgICAgICAgICBlZjoxZDpiYjoxNjo5Zjo3Nzo3NzplZjo4Nzo2MjoyMjo5Yjo0ZDo2OTphNDozYToxYTpmMToKKyAgICAgICAgIDIxOjVlOjhjOjMyOmFjOjkyOmZkOjE1OjZiOjE4OmMyOjdmOjE1OjBkOjk4OjMwOmNhOjc1OgorICAgICAgICAgOGY6MWE6NzE6ZGY6ZGE6MWQ6YjI6ZWY6OWE6ZTg6MmQ6MmU6MDI6ZmQ6NGE6M2M6YWE6OTY6CisgICAgICAgICAwYjowNjo1ZDozNTpiMzozZDoyNDo4Nzo0YjplMDpiMDo1ODo2MDoyZjo0NTphYzoyZTo0ODoKKyAgICAgICAgIDhhOmIwOjk5OjEwOjY1OjI3OmZmOmNjOmIxOmQ4OmZkOmJkOjI2OjZiOmI5OjBjOjA1OjJhOgorICAgICAgICAgZjQ6NDU6NjM6MzU6NTE6MDc6ZWQ6ODM6ODU6ZmU6NmY6Njk6Y2I6YmI6NDA6YTg6YWU6YjY6CisgICAgICAgICAzYjo1Njo0YToyZDphNDplZDo2ZDoxMToyYzo0ZDplZDoxNzoyNDpmZDo0NzpiYzpkMzo0MToKKyAgICAgICAgIGEyOmQzOjA2OmZlOjBjOjkwOmQ4OmQ4Ojk0OjI2OmM0OmZmOmNjOmExOmQ4OjQyOjc3OmViOgorICAgICAgICAgZmM6YTk6OTQ6NzEKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3BEQ0NBWXdDQ1FDd2ttU3g4dG9oMFRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWQorV1RFbU1DUUdBMVVFQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVgorQkFNTURXOTFjaTFqWVMxelpYSjJaWEl3SGhjTk1UTXdNVEEwTVRrME56QTNXaGNOTWpJeE1URXpNVGswTnpBMworV2pCZk1Rc3dDUVlEVlFRR0V3SllXVEVYTUJVR0ExVUVCeE1PUTJGemRHeGxJRUZ1ZEdoeVlYZ3hJekFoQmdOVgorQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodgorYzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTGdEMGtBS0RiNWNGeVBqYndOZlI1QwordGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk05ejJqMU9sYQorTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVphZ2dFZGtqMQorVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFDOUNYNk1KTFBwUgoraU1jM2Yrb09ZL0NpbXVWYTRzZ2c4RDlndk1nUHRzWjJ6dHVEay9Xak0yY0JqZ1ROQUpwei9mTTFodnJYRStKRworeHAzQUtWUFVxWkM0ZDB2bWczYmtrdGFjVU05RDBNWUJkMkdhM3B0dzkzTE5XUUF4YWRtMHlnYWNiY1BIZ0l4bworNXJXaStPOGR1eGFmZDNmdmgySWltMDFwcERvYThTRmVqREtza3YwVmF4akNmeFVObURES2RZOGFjZC9hSGJMdgorbXVndExnTDlTanlxbGdzR1hUV3pQU1NIUytDd1dHQXZSYXd1U0lxd21SQmxKLy9Nc2RqOXZTWnJ1UXdGS3ZSRgorWXpWUkIrMkRoZjV2YWN1N1FLaXV0anRXU2kyazdXMFJMRTN0RnlUOVI3elRRYUxUQnY0TWtOallsQ2JFLzh5aAorMkVKMzYveXBsSEU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9rZXljZXJ0NC5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0NC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzNTVjOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2tleWNlcnQ0LnBlbQpAQCAtMCwwICsxLDczIEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQkFLNVVRaU1JNVZrTnMyUXYKK0w3Z1VhaURkRmV2TlVYUmpVNERIQWUzWnp6WUxaTkU2OWg5Z085VkNTUzE2dEo1ZlQ1VkV1MEVaeUdyMGUzVjIKK05rWDBab1UwSGMvVWFZNHF4N0xIbW41U1lacEl4aEpua2Y3U3lISksxelVhR2xVMC9MeFlxSXVHQ3RGNWRxeDEKK0wyT1FoRXgxR002UnlkSGRnWDY5RzY0TFhjWTVBZ01CQUFFQ2dZQWhzUk1mSmtiOUVSTE1sL29HLzVzTFF1OUwKK3BXREt0Nitad2R4emxaYmdnUTg1Q01Zc2hqTEtJb2QyRExML3NMZjJ4MVBSWHlSRzEzMU0xRTNrOHpra3o2ZGUKK1IxdURySU4veDkxaXVZemZMUVpHaDhiTVk3WWpkMmVvcm9hNlIvN0RqcEVsR2VqTHhPQWFEV08wU1QySUZReTkKK215VEdTMmpTTTk3d2NYZnNTUUpCQU5QM2plbEpvUzVYNkJSalRTbmVZMjF3Y29jeFZ1UWg4cFhwRXJBTFZOc1QKK2RyckZUZWFCdVpwN0t2YnRuSU01ZzJXUk52YXhMWmxBWS9oWFBKdmk2bmNDUVFEU2l4MWNlYm1sNkVtUGxFWlMKK01tOGd3STJGOXVmVXVud0ptQkpjejgyNkRvMFpOR0J5V0RBTS9KUVpINEZYNEdmQUZOdWo4UFViK0dRZmFka3gKK2kxRFBBa0VBMGxWc05Ib2p2dURzSW84SEd1emFyTlpRVDJiZVdqSjFqZHhoOXQ3SHJUeDdMSXBzNnJiL2ZoT0sKK1pzMFI2Z1ZBSmFFYmNXQVBaMnRGeUVDSW5BZG5zUUpBVWphZVhYanV4RmtqT0Z5bTVQdnFwdmhwaXZFeDc4QnUKK0pQVHIzckFLWG1mR014eGZ1T2EweEsxd1N5c2hQNlpSL1JCbi8rbGNYUEt1YmhIUURPZWd3d0pBSkYxREJRbk4KKysvdExtT1BVTHREd2ZQNFppeG4rLzhHbUdPYWhGb1JjdTZWSUdIbVJpbEpUbjZNT0J1dHc3R2x2MllkZUM2bC8KK2U4M0dxNmZmTFZmS05RPT0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDEgKDB4MCkKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODIgKDB4YjA5MjY0YjFmMmRhMjFkMikKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IE5vdiAxMyAxOTo0NzowNyAyMDIyIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBMPUNhc3RsZSBBbnRocmF4LCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBDTj1mYWtlaG9zdG5hbWUKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDphZTo1NDo0MjoyMzowODplNTo1OTowZDpiMzo2NDoyZjoyZjpiODoxNDoKKyAgICAgICAgICAgICAgICAgICAgNmE6MjA6ZGQ6MTU6ZWI6Y2Q6NTE6NzQ6NjM6NTM6ODA6Yzc6MDE6ZWQ6ZDk6CisgICAgICAgICAgICAgICAgICAgIGNmOjM2OjBiOjY0OmQxOjNhOmY2OjFmOjYwOjNiOmQ1OjQyOjQ5OjJkOjdhOgorICAgICAgICAgICAgICAgICAgICBiNDo5ZTo1Zjo0Zjo5NTo0NDpiYjo0MToxOTpjODo2YTpmNDo3Yjo3NTo3NjoKKyAgICAgICAgICAgICAgICAgICAgMzY6NDU6ZjQ6NjY6ODU6MzQ6MWQ6Y2Y6ZDQ6Njk6OGU6MmE6Yzc6YjI6Yzc6CisgICAgICAgICAgICAgICAgICAgIDlhOjdlOjUyOjYxOjlhOjQ4OmM2OjEyOjY3OjkxOmZlOmQyOmM4OjcyOjRhOgorICAgICAgICAgICAgICAgICAgICBkNzozNToxYToxYTo1NTozNDpmYzpiYzo1ODphODo4Yjo4NjowYTpkMTo3OToKKyAgICAgICAgICAgICAgICAgICAgNzY6YWM6NzU6MmY6NjM6OTA6ODQ6NGM6NzU6MTg6Y2U6OTE6Yzk6ZDE6ZGQ6CisgICAgICAgICAgICAgICAgICAgIDgxOjdlOmJkOjFiOmFlOjBiOjVkOmM2OjM5CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgYWQ6NDU6OGE6OGU6ZWY6YzY6ZWY6MDQ6NDE6NWM6MmM6NGE6ODQ6ZGM6MDI6NzY6MGM6ZDA6CisgICAgICAgICA2NjowZjpmMDoxNjowNDo1ODo0ZDpmZDo2ODpiNzpiODpkMzphODo0MTphNTo1YzozYzo2ZjoKKyAgICAgICAgIDY1OjNjOmQxOmY4OmNlOjQzOjM1OmU3OjQxOjVmOjUzOjNkOmM5OjJjOmMzOjdkOmZjOjU2OgorICAgICAgICAgNGE6ZmE6NDc6Nzc6Mzg6OWQ6YmI6OTc6Mjg6MGE6M2I6OTE6MTk6N2Y6YmM6NzQ6YWU6MTU6CisgICAgICAgICA2YjpiZDoyMDozNjo2Nzo0NTphNToxZTo3OTpkNzo3NTplNjo4OTo1Yzo2ZDo1NDo4NDpkMToKKyAgICAgICAgIDk1OmQ3OmE3OmI0OjMzOjNjOmFmOjM3OmM0Ojc5OjhmOjVlOjc1OmRjOjc1OmMyOjE4OmZiOgorICAgICAgICAgNjE6NmY6MmQ6ZGM6Mzg6NjU6NWI6YmE6Njc6Mjg6ZDA6ODg6ZDc6OGQ6Yjk6MjM6NWE6OGU6CisgICAgICAgICBlODpjNjpiYjpkYjpjZTpkNTpiODo0MToyYTpjZTo5MzowODpiNjo5NTphZDozNDoyMDoxODoKKyAgICAgICAgIGQ1OjNiOjM3OjUyOjc0OjUwOjBiOjA3OjJjOmIwOjZkOmE0OjRjOjdiOmY0OmUwOmZkOmQxOgorICAgICAgICAgYWY6MTc6YWE6MjA6Y2Q6NjI6ZTM6ZjA6OWQ6Mzc6Njk6ZGI6NDE6YmQ6ZDQ6MWM6ZmI6NTM6CisgICAgICAgICAyMDpkYTo4ODo5ZDo3NjoyNjo2NzpjZTowMTo5MDphNzo4MDoxZDphOTo1YjozOTo3Mzo2ODoKKyAgICAgICAgIDU0OjBhOmQxOjJhOjAzOjFiOjhmOjNjOjQzOjVkOjVkOmM0OjUxOmYxOmE3OmU3OjExOmRhOgorICAgICAgICAgMzE6MmM6NDk6MDY6YWY6MDQ6ZjQ6Yjg6M2M6OTk6YzQ6MjA6Yjk6MDY6MzY6YTI6MDA6OTI6CisgICAgICAgICA2MToxZDowYzo2ZDoyNDowNTplMjo4MjplMTo0NzpkYjphMDo1ZjpiYTpiOTpmYjpiYTpmYToKKyAgICAgICAgIDQ5OjEyOjFlOmNlCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwekNDQVk4Q0NRQ3drbVN4OHRvaDBqQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SlkKK1dURW1NQ1FHQTFVRUNnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlYKK0JBTU1EVzkxY2kxallTMXpaWEoyWlhJd0hoY05NVE13TVRBME1UazBOekEzV2hjTk1qSXhNVEV6TVRrME56QTMKK1dqQmlNUXN3Q1FZRFZRUUdFd0pZV1RFWE1CVUdBMVVFQnhNT1EyRnpkR3hsSUVGdWRHaHlZWGd4SXpBaEJnTlYKK0JBb1RHbEI1ZEdodmJpQlRiMlowZDJGeVpTQkdiM1Z1WkdGMGFXOXVNUlV3RXdZRFZRUURFd3htWVd0bGFHOXoKK2RHNWhiV1V3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQUs1VVFpTUk1VmtOczJRdkw3Z1UKK2FpRGRGZXZOVVhSalU0REhBZTNaenpZTFpORTY5aDlnTzlWQ1NTMTZ0SjVmVDVWRXUwRVp5R3IwZTNWMk5rWDAKK1pvVTBIYy9VYVk0cXg3TEhtbjVTWVpwSXhoSm5rZjdTeUhKSzF6VWFHbFUwL0x4WXFJdUdDdEY1ZHF4MUwyT1EKK2hFeDFHTTZSeWRIZGdYNjlHNjRMWGNZNUFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUsxRmlvN3YKK3h1OEVRVndzU29UY0FuWU0wR1lQOEJZRVdFMzlhTGU0MDZoQnBWdzhiMlU4MGZqT1F6WG5RVjlUUGNrc3czMzgKK1ZrcjZSM2M0bmJ1WEtBbzdrUmwvdkhTdUZXdTlJRFpuUmFVZWVkZDE1b2xjYlZTRTBaWFhwN1F6UEs4M3hIbVAKK1huWGNkY0lZKzJGdkxkdzRaVnU2WnlqUWlOZU51U05hanVqR3U5dk8xYmhCS3M2VENMYVZyVFFnR05VN04xSjAKK1VBc0hMTEJ0cEV4NzlPRDkwYThYcWlETll1UHduVGRwMjBHOTFCejdVeURhaUoxMkptZk9BWkNuZ0IycFd6bHoKK2FGUUswU29ERzQ4OFExMWR4Rkh4cCtjUjJqRXNTUWF2QlBTNFBKbkVJTGtHTnFJQWttRWRERzBrQmVLQzRVZmIKK29GKzZ1ZnU2K2trU0hzND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5IGIvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2dlc3RhbHQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMDgxYzEuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2dlc3RhbHQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1pbXBvcnQgc3lzCi0KLWlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKLSAgICByYWlzZSBWYWx1ZUVycm9yKCJUaGlzIHRlc3Qgb25seSBsZWFrcyBvbiBNYWMgT1MgWCIpCi0KLWRlZiBsZWFrKCk6Ci0gICAgIyB0YWtlbiBmcm9tIHBsYXRmb3JtLl9tYWNfdmVyX2xvb2t1cCgpCi0gICAgZnJvbSBnZXN0YWx0IGltcG9ydCBnZXN0YWx0Ci0gICAgaW1wb3J0IE1hY09TCi0KLSAgICB0cnk6Ci0gICAgICAgIGdlc3RhbHQoJ3N5c3UnKQotICAgIGV4Y2VwdCBNYWNPUy5FcnJvcjoKLSAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbG9ja190ZXN0cy5weSBiL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKaW5kZXggYmZiZjQ0ZS4uMWNiY2VhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbG9ja190ZXN0cy5weQorKysgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CkBAIC04MCw2ICs4MCwxMSBAQAogICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCiAgICAgICAgIGRlbCBsb2NrCiAKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIHJlcHIobG9jaykKKyAgICAgICAgZGVsIGxvY2sKKwogICAgIGRlZiB0ZXN0X2FjcXVpcmVfZGVzdHJveShzZWxmKToKICAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQogICAgICAgICBsb2NrLmFjcXVpcmUoKQpAQCAtNDEzLDYgKzQxOCwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5KQogCiAgICAgZGVmIF9jaGVja19ub3RpZnkoc2VsZiwgY29uZCk6CisgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgdGVzdCBpcyBzZW5zaXRpdmUgdG8gdGltaW5nLiAgSWYgdGhlIHdvcmtlciB0aHJlYWRzCisgICAgICAgICMgZG9uJ3QgZXhlY3V0ZSBpbiBhIHRpbWVseSBmYXNoaW9uLCB0aGUgbWFpbiB0aHJlYWQgbWF5IHRoaW5rIHRoZXkKKyAgICAgICAgIyBhcmUgZnVydGhlciBhbG9uZyB0aGVuIHRoZXkgYXJlLiAgVGhlIG1haW4gdGhyZWFkIHRoZXJlZm9yZSBpc3N1ZXMKKyAgICAgICAgIyBfd2FpdCgpIHN0YXRlbWVudHMgdG8gdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGRvZXNuJ3QgcmFjZSBhaGVhZAorICAgICAgICAjIG9mIHRoZSB3b3JrZXJzLgorICAgICAgICAjIFNlY29uZGx5LCB0aGlzIHRlc3QgYXNzdW1lcyB0aGF0IGNvbmRpdGlvbiB2YXJpYWJsZXMgYXJlIG5vdCBzdWJqZWN0CisgICAgICAgICMgdG8gc3B1cmlvdXMgd2FrZXVwcy4gIFRoZSBhYnNlbmNlIG9mIHNwdXJpb3VzIHdha2V1cHMgaXMgYW4gaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBkZXRhaWwgb2YgQ29uZGl0aW9uIENhcmlhYmxlcyBpbiBjdXJyZW50IENQeXRob24sIGJ1dCBpbiBnZW5lcmFsLCBub3QKKyAgICAgICAgIyBhIGd1YXJhbnRlZWQgcHJvcGVydHkgb2YgY29uZGl0aW9uIHZhcmlhYmxlcyBhcyBhIHByb2dyYW1taW5nCisgICAgICAgICMgY29uc3RydWN0LiAgSW4gcGFydGljdWxhciwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGNhbiBubyBsb25nZXIKKyAgICAgICAgIyBiZSBjb252ZW5pZW50bHkgZ3VhcmFudGVlZCBzaG91bGQgdGhlaXIgaW1wbGVtZW50YXRpb24gZXZlciBjaGFuZ2UuCiAgICAgICAgIE4gPSA1CiAgICAgICAgIHJlc3VsdHMxID0gW10KICAgICAgICAgcmVzdWx0czIgPSBbXQpAQCAtNDQwLDYgKzQ1Niw5IEBACiAgICAgICAgICAgICBfd2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsoVHJ1ZSwgMSldICogMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMiwgW10pCisgICAgICAgICMgZmlyc3Qgd2FpdCwgdG8gZW5zdXJlIGFsbCB3b3JrZXJzIHNldHRsZSBpbnRvIGNvbmQud2FpdCgpIGJlZm9yZQorICAgICAgICAjIHdlIGNvbnRpbnVlLiBTZWUgaXNzdWUgIzg3OTkKKyAgICAgICAgX3dhaXQoKQogICAgICAgICAjIE5vdGlmeSA1IHRocmVhZHM6IHRoZXkgbWlnaHQgYmUgaW4gdGhlaXIgZmlyc3Qgb3Igc2Vjb25kIHdhaXQKICAgICAgICAgY29uZC5hY3F1aXJlKCkKICAgICAgICAgY29uZC5ub3RpZnkoNSkKQEAgLTQ1MCw2ICs0NjksNyBAQAogICAgICAgICAgICAgX3dhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbKFRydWUsIDEpXSAqIDMgKyBbKFRydWUsIDIpXSAqIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFsoVHJ1ZSwgMildICogMykKKyAgICAgICAgX3dhaXQoKSAjIG1ha2Ugc3VyZSBhbGwgd29ya2VycyBzZXR0bGUgaW50byBjb25kLndhaXQoKQogICAgICAgICAjIE5vdGlmeSBhbGwgdGhyZWFkczogdGhleSBhcmUgYWxsIGluIHRoZWlyIHNlY29uZCB3YWl0CiAgICAgICAgIGNvbmQuYWNxdWlyZSgpCiAgICAgICAgIGNvbmQubm90aWZ5X2FsbCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weSBiL0xpYi90ZXN0L21ha2Vfc3NsX2NlcnRzLnB5CmluZGV4IDQ4ZDJlNTcuLjQyNTFkNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21ha2Vfc3NsX2NlcnRzLnB5CisrKyBiL0xpYi90ZXN0L21ha2Vfc3NsX2NlcnRzLnB5CkBAIC0yLDYgKzIsNyBAQAogYW5kIGZyaWVuZHMuIiIiCiAKIGltcG9ydCBvcworaW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0ICoKQEAgLTIwLDExICsyMSw1NCBAQAogCiAgICAgW3JlcV94NTA5X2V4dGVuc2lvbnNdCiAgICAgc3ViamVjdEFsdE5hbWUgICAgICAgICA9IEROUzp7aG9zdG5hbWV9CisKKyAgICBbIGNhIF0KKyAgICBkZWZhdWx0X2NhICAgICAgPSBDQV9kZWZhdWx0CisKKyAgICBbIENBX2RlZmF1bHQgXQorICAgIGRpciA9IGNhZGlyCisgICAgZGF0YWJhc2UgID0gJGRpci9pbmRleC50eHQKKyAgICBjcmxudW1iZXIgPSAkZGlyL2NybC50eHQKKyAgICBkZWZhdWx0X21kID0gc2hhMQorICAgIGRlZmF1bHRfZGF5cyA9IDM2MDAKKyAgICBkZWZhdWx0X2NybF9kYXlzID0gMzYwMAorICAgIGNlcnRpZmljYXRlID0gcHljYWNlcnQucGVtCisgICAgcHJpdmF0ZV9rZXkgPSBweWNha2V5LnBlbQorICAgIHNlcmlhbCAgICA9ICRkaXIvc2VyaWFsCisgICAgUkFOREZJTEUgID0gJGRpci8ucmFuZAorCisgICAgcG9saWN5ICAgICAgICAgID0gcG9saWN5X21hdGNoCisKKyAgICBbIHBvbGljeV9tYXRjaCBdCisgICAgY291bnRyeU5hbWUgICAgICAgICAgICAgPSBtYXRjaAorICAgIHN0YXRlT3JQcm92aW5jZU5hbWUgICAgID0gb3B0aW9uYWwKKyAgICBvcmdhbml6YXRpb25OYW1lICAgICAgICA9IG1hdGNoCisgICAgb3JnYW5pemF0aW9uYWxVbml0TmFtZSAgPSBvcHRpb25hbAorICAgIGNvbW1vbk5hbWUgICAgICAgICAgICAgID0gc3VwcGxpZWQKKyAgICBlbWFpbEFkZHJlc3MgICAgICAgICAgICA9IG9wdGlvbmFsCisKKyAgICBbIHBvbGljeV9hbnl0aGluZyBdCisgICAgY291bnRyeU5hbWUgICA9IG9wdGlvbmFsCisgICAgc3RhdGVPclByb3ZpbmNlTmFtZSA9IG9wdGlvbmFsCisgICAgbG9jYWxpdHlOYW1lICAgID0gb3B0aW9uYWwKKyAgICBvcmdhbml6YXRpb25OYW1lICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uYWxVbml0TmFtZSAgPSBvcHRpb25hbAorICAgIGNvbW1vbk5hbWUgICAgPSBzdXBwbGllZAorICAgIGVtYWlsQWRkcmVzcyAgICA9IG9wdGlvbmFsCisKKworICAgIFsgdjNfY2EgXQorCisgICAgc3ViamVjdEtleUlkZW50aWZpZXI9aGFzaAorICAgIGF1dGhvcml0eUtleUlkZW50aWZpZXI9a2V5aWQ6YWx3YXlzLGlzc3VlcgorICAgIGJhc2ljQ29uc3RyYWludHMgPSBDQTp0cnVlCisKICAgICAiIiIKIAogaGVyZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQogCi1kZWYgbWFrZV9jZXJ0X2tleShob3N0bmFtZSk6CitkZWYgbWFrZV9jZXJ0X2tleShob3N0bmFtZSwgc2lnbj1GYWxzZSk6CisgICAgcHJpbnQoImNyZWF0aW5nIGNlcnQgZm9yICIgKyBob3N0bmFtZSkKICAgICB0ZW1wbmFtZXMgPSBbXQogICAgIGZvciBpIGluIHJhbmdlKDMpOgogICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpIGFzIGY6CkBAIC0zMywxMCArNzcsMjUgQEAKICAgICB0cnk6CiAgICAgICAgIHdpdGggb3BlbihyZXFfZmlsZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShyZXFfdGVtcGxhdGUuZm9ybWF0KGhvc3RuYW1lPWhvc3RuYW1lKSkKLSAgICAgICAgYXJncyA9IFsncmVxJywgJy1uZXcnLCAnLWRheXMnLCAnMzY1MCcsICctbm9kZXMnLCAnLXg1MDknLAorICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1ub2RlcycsCiAgICAgICAgICAgICAgICAgJy1uZXdrZXknLCAncnNhOjEwMjQnLCAnLWtleW91dCcsIGtleV9maWxlLAotICAgICAgICAgICAgICAgICctb3V0JywgY2VydF9maWxlLCAnLWNvbmZpZycsIHJlcV9maWxlXQorICAgICAgICAgICAgICAgICctY29uZmlnJywgcmVxX2ZpbGVdCisgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICAgICAgdGVtcG5hbWVzLmFwcGVuZChmLm5hbWUpCisgICAgICAgICAgICAgICAgcmVxZmlsZSA9IGYubmFtZQorICAgICAgICAgICAgYXJncyArPSBbJy1vdXQnLCByZXFmaWxlIF0KKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncyArPSBbJy14NTA5JywgJy1vdXQnLCBjZXJ0X2ZpbGUgXQogICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKKworICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHJlcV9maWxlLCAnLW91dCcsIGNlcnRfZmlsZSwgJy1vdXRkaXInLCAnY2FkaXInLAorICAgICAgICAgICAgICAgICAgICAnLXBvbGljeScsICdwb2xpY3lfYW55dGhpbmcnLCAnLWJhdGNoJywgJy1pbmZpbGVzJywgcmVxZmlsZSBdCisgICAgICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKKworCiAgICAgICAgIHdpdGggb3BlbihjZXJ0X2ZpbGUsICdyJykgYXMgZjoKICAgICAgICAgICAgIGNlcnQgPSBmLnJlYWQoKQogICAgICAgICB3aXRoIG9wZW4oa2V5X2ZpbGUsICdyJykgYXMgZjoKQEAgLTQ2LDYgKzEwNSwzNiBAQAogICAgICAgICBmb3IgbmFtZSBpbiB0ZW1wbmFtZXM6CiAgICAgICAgICAgICBvcy5yZW1vdmUobmFtZSkKIAorVE1QX0NBRElSID0gJ2NhZGlyJworCitkZWYgdW5tYWtlX2NhKCk6CisgICAgc2h1dGlsLnJtdHJlZShUTVBfQ0FESVIpCisKK2RlZiBtYWtlX2NhKCk6CisgICAgb3MubWtkaXIoVE1QX0NBRElSKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnaW5kZXgudHh0JyksJ2ErJykgYXMgZjoKKyAgICAgICAgcGFzcyAjIGVtcHR5IGZpbGUKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdjYWRpcicsJ2NybC50eHQnKSwnYSsnKSBhcyBmOgorICAgICAgICByLndyaXRlKCIwMCIpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdpbmRleC50eHQuYXR0cicpLCd3KycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ3VuaXF1ZV9zdWJqZWN0ID0gbm8nKQorCisgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoInciKSBhcyB0OgorICAgICAgICB0LndyaXRlKHJlcV90ZW1wbGF0ZS5mb3JtYXQoaG9zdG5hbWU9J291ci1jYS1zZXJ2ZXInKSkKKyAgICAgICAgdC5mbHVzaCgpCisgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZjoKKyAgICAgICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLWV4dGVuc2lvbnMnLCAndjNfY2EnLCAnLW5vZGVzJywKKyAgICAgICAgICAgICAgICAgICAgJy1uZXdrZXknLCAncnNhOjIwNDgnLCAnLWtleW91dCcsICdweWNha2V5LnBlbScsCisgICAgICAgICAgICAgICAgICAgICctb3V0JywgZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAnLXN1YmonLCAnL0M9WFkvTD1DYXN0bGUgQW50aHJheC9PPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBL0NOPW91ci1jYS1zZXJ2ZXInXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgdC5uYW1lLCAnLWNyZWF0ZV9zZXJpYWwnLAorICAgICAgICAgICAgICAgICAgICAnLW91dCcsICdweWNhY2VydC5wZW0nLCAnLWJhdGNoJywgJy1vdXRkaXInLCBUTVBfQ0FESVIsCisgICAgICAgICAgICAgICAgICAgICcta2V5ZmlsZScsICdweWNha2V5LnBlbScsICctZGF5cycsICczNjUwJywKKyAgICAgICAgICAgICAgICAgICAgJy1zZWxmc2lnbicsICctZXh0ZW5zaW9ucycsICd2M19jYScsICctaW5maWxlcycsIGYubmFtZSBdCisgICAgICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKKyAgICAgICAgICAgIGFyZ3MgPSBbJ2NhJywgJy1jb25maWcnLCB0Lm5hbWUsICctZ2VuY3JsJywgJy1vdXQnLCAncmV2b2NhdGlvbi5jcmwnXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgb3MuY2hkaXIoaGVyZSkKQEAgLTU0LDExICsxNDMsMzQgQEAKICAgICAgICAgZi53cml0ZShjZXJ0KQogICAgIHdpdGggb3Blbignc3NsX2tleS5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQorICAgIHByaW50KCJwYXNzd29yZCBwcm90ZWN0aW5nIHNzbF9rZXkucGVtIGluIHNzbF9rZXkucGFzc3dkLnBlbSIpCisgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnLCdyc2EnLCctaW4nLCdzc2xfa2V5LnBlbScsJy1vdXQnLCdzc2xfa2V5LnBhc3N3ZC5wZW0nLCctZGVzMycsJy1wYXNzb3V0JywncGFzczpzb21lcGFzcyddKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywncnNhJywnLWluJywnc3NsX2tleS5wZW0nLCctb3V0Jywna2V5Y2VydC5wYXNzd2QucGVtJywnLWRlczMnLCctcGFzc291dCcsJ3Bhc3M6c29tZXBhc3MnXSkKKwogICAgIHdpdGggb3Blbigna2V5Y2VydC5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQogICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQucGFzc3dkLnBlbScsICdhKycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoY2VydCkKKwogICAgICMgRm9yIGNlcnRpZmljYXRlIG1hdGNoaW5nIHRlc3RzCisgICAgbWFrZV9jYSgpCiAgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnZmFrZWhvc3RuYW1lJykKICAgICB3aXRoIG9wZW4oJ2tleWNlcnQyLnBlbScsICd3JykgYXMgZjoKICAgICAgICAgZi53cml0ZShrZXkpCiAgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2xvY2FsaG9zdCcsIFRydWUpCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0My5wZW0nLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoa2V5KQorICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdmYWtlaG9zdG5hbWUnLCBUcnVlKQorICAgIHdpdGggb3Blbigna2V5Y2VydDQucGVtJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGtleSkKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgdW5tYWtlX2NhKCkKKyAgICBwcmludCgiXG5cblBsZWFzZSBjaGFuZ2UgdGhlIHZhbHVlcyBpbiB0ZXN0X3NzbC5weSwgdGVzdF9wYXJzZV9jZXJ0IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbm90QWZ0ZXIsbm90QmVmb3JlIGFuZCBzZXJpYWxOdW1iZXIiKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywneDUwOScsJy1pbicsJ2tleWNlcnQucGVtJywnLWRhdGVzJywnLXNlcmlhbCcsJy1ub291dCddKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkgYi9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQppbmRleCBkMDllNzhjLi44ZWYwZWM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQorKysgYi9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQpAQCAtMTQwLDEyICsxNDAsOCBAQAogICAgIHJldHVybiAiIgogCiAKLWNsYXNzIGdhaWVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIGVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcworZ2FpZXJyb3IgPSBzb2NrZXRfbW9kdWxlLmdhaWVycm9yCitlcnJvciA9IHNvY2tldF9tb2R1bGUuZXJyb3IKIAogCiAjIENvbnN0YW50cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5IGIvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CmluZGV4IDkwOGFmZTMuLjAxN2UwMTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQorKysgYi9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKQEAgLTcsNiArNywxMSBAQAogIyBjb3JyZWN0bHkgb24gV2luZG93cy4gIEhvd2V2ZXIsIHdlIHNob3VsZCBnZXQgYSBSdW50aW1lRXJyb3IgcmF0aGVyCiAjIHRoYW4gdGhlIFdpbmRvd3MgZXF1aXZhbGVudCBvZiBhIGZvcmsgYm9tYi4KIAoraWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qoc3lzLmFyZ3ZbMV0pCitlbHNlOgorICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisKIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogcC5zdGFydCgpCiBwLmpvaW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weSBiL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKaW5kZXggMjZiYWM3Yi4uZGNhYWU3YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYub3Blbl9tYXBwaW5nX2ZpbGUoKS5jbG9zZSgpICMgdGVzdCBpdCB0byByZXBvcnQgdGhlIGVycm9yIGVhcmx5Ci0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIitzZWxmLm1hcGZpbGV1cmwpCiAKICAgICBkZWYgb3Blbl9tYXBwaW5nX2ZpbGUoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKaW5kZXggMDUyMjkwZC4uMTU0MmQ0MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CisrKyBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQpAQCAtMSw5ICsxLDEwIEBACitpbXBvcnQgY29weXJlZwogaW1wb3J0IGlvCi1pbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBwaWNrbGV0b29scworaW1wb3J0IHJhbmRvbQogaW1wb3J0IHN5cwotaW1wb3J0IGNvcHlyZWcKK2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdlYWtyZWYKIGZyb20gaHR0cC5jb29raWVzIGltcG9ydCBTaW1wbGVDb29raWUKIApAQCAtOTUsNiArOTYsOSBAQAogICAgIGRlZiBfX2dldGluaXRhcmdzX18oc2VsZik6CiAgICAgICAgIHJldHVybiAoKQogCitjbGFzcyBIKG9iamVjdCk6CisgICAgcGFzcworCiBpbXBvcnQgX19tYWluX18KIF9fbWFpbl9fLkMgPSBDCiBDLl9fbW9kdWxlX18gPSAiX19tYWluX18iCkBAIC0xMDIsNiArMTA2LDggQEAKIEQuX19tb2R1bGVfXyA9ICJfX21haW5fXyIKIF9fbWFpbl9fLkUgPSBFCiBFLl9fbW9kdWxlX18gPSAiX19tYWluX18iCitfX21haW5fXy5IID0gSAorSC5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgogCiBjbGFzcyBteWludChpbnQpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKQEAgLTQyOCwzMSArNDM0LDUyIEBACiAgICAgeC5hcHBlbmQoNSkKICAgICByZXR1cm4geAogCisKIGNsYXNzIEFic3RyYWN0UGlja2xlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgU3ViY2xhc3MgbXVzdCBkZWZpbmUgc2VsZi5kdW1wcywgc2VsZi5sb2Fkcy4KIAorICAgIG9wdGltaXplZCA9IEZhbHNlCisKICAgICBfdGVzdGRhdGEgPSBjcmVhdGVfZGF0YSgpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHBhc3MKIAorICAgIGRlZiBhc3NlcnRfaXNfY29weShzZWxmLCBvYmosIG9iamNvcHksIG1zZz1Ob25lKToKKyAgICAgICAgIiIiVXRpbGl0eSBtZXRob2QgdG8gdmVyaWZ5IGlmIHR3byBvYmplY3RzIGFyZSBjb3BpZXMgb2YgZWFjaCBvdGhlcnMuCisgICAgICAgICIiIgorICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICJ7IXJ9IGlzIG5vdCBhIGNvcHkgb2YgeyFyfSIuZm9ybWF0KG9iaiwgb2JqY29weSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIG9iamNvcHksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShvYmopLCB0eXBlKG9iamNvcHkpLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fZGljdF9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX3Nsb3RzX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG9iai5fX3Nsb3RzX18sIG9iamNvcHkuX19zbG90c19fLCBtc2c9bXNnKQorICAgICAgICAgICAgZm9yIHNsb3QgaW4gb2JqLl9fc2xvdHNfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG9iaiwgc2xvdCksIGhhc2F0dHIob2JqY29weSwgc2xvdCksIG1zZz1tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG9iaiwgc2xvdCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKG9iamNvcHksIHNsb3QsIE5vbmUpLCBtc2c9bXNnKQorCiAgICAgZGVmIHRlc3RfbWlzYyhzZWxmKToKICAgICAgICAgIyB0ZXN0IHZhcmlvdXMgZGF0YXR5cGVzIG5vdCB0ZXN0ZWQgYnkgdGVzdGRhdGEKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHggPSBteWludCg0KQogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgICAgICAgICB4ID0gKDEsICgpKQogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgICAgICAgICB4ID0gaW5pdGFyZygxLCB4KQogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgICAgICMgWFhYIHRlc3QgX19yZWR1Y2VfXyBwcm90b2NvbD8KIApAQCAtNDYxLDE2ICs0ODgsMTYgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGV4cGVjdGVkLCBwcm90bykKICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoZXhwZWN0ZWQsIGdvdCkKIAogICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTApKQogCiAgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGExKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEExKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMSkpCiAKICAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTIpKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEyKSkKIAogICAgIGRlZiB0ZXN0X2xvYWRfY2xhc3NpY19pbnN0YW5jZShzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWU1MTgwLiAgVGVzdCBsb2FkaW5nIDIueCBwaWNrbGVzIHRoYXQKQEAgLTQ5Miw3ICs1MTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBiIlhcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwMFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiIihkcDFcbmIuIikucmVwbGFjZShiJ1gnLCB4bmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTApKQogCiAgICAgICAgICAgICAjIFByb3RvY29sIDEgKGJpbmFyeSBtb2RlIHBpY2tsZSkKICAgICAgICAgICAgICIiIgpAQCAtNTA5LDcgKzUzNiw3IEBACiAgICAgICAgICAgICBwaWNrbGUxID0gKGInKGNfX21haW5fX1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1hcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidxXHgwMG9xXHgwMX1xXHgwMmIuJykucmVwbGFjZShiJ1gnLCB4bmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTEpKQogCiAgICAgICAgICAgICAjIFByb3RvY29sIDIgKHBpY2tsZTIgPSBiJ1x4ODBceDAyJyArIHBpY2tsZTEpCiAgICAgICAgICAgICAiIiIKQEAgLTUyNyw3ICs1NTQsNyBAQAogICAgICAgICAgICAgcGlja2xlMiA9IChiJ1x4ODBceDAyKGNfX21haW5fX1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1hcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidxXHgwMG9xXHgwMX1xXHgwMmIuJykucmVwbGFjZShiJ1gnLCB4bmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTIpKQogCiAgICAgIyBUaGVyZSBhcmUgZ3JhdHVpdG91cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBpY2tsZXMgcHJvZHVjZWQgYnkKICAgICAjIHBpY2tsZSBhbmQgY1BpY2tsZSwgbGFyZ2VseSBiZWNhdXNlIGNQaWNrbGUgc3RhcnRzIFBVVCBpbmRpY2VzIGF0CkBAIC01NTIsNiArNTc5LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGwsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsaXN0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB4WzBdKQogCkBAIC01NjEsNiArNTg5LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCB0dXBsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeFswXSksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB4WzBdWzBdKQpAQCAtNTcxLDE1ICs2MDAsMzkgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGQsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBkaWN0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgua2V5cygpKSwgWzFdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMV0gaXMgeCkKIAorICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9zZXQoc2VsZik6CisgICAgICAgIGggPSBIKCkKKyAgICAgICAgeSA9IHNldCh7aH0pCisgICAgICAgIGguYXR0ciA9IHkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHksIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxpc3QoeClbMF0uYXR0ciwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2Zyb3plbnNldChzZWxmKToKKyAgICAgICAgaCA9IEgoKQorICAgICAgICB5ID0gZnJvemVuc2V0KHtofSkKKyAgICAgICAgaC5hdHRyID0geQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeSwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGZyb3plbnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobGlzdCh4KVswXS5hdHRyLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCisKICAgICBkZWYgdGVzdF9yZWN1cnNpdmVfaW5zdChzZWxmKToKICAgICAgICAgaSA9IEMoKQogICAgICAgICBpLmF0dHIgPSBpCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhpLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgQykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHgpLCBkaXIoaSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHguYXR0ciwgeCkKIApAQCAtNTkyLDYgKzY0NSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhsLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbGlzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeFswXSksIGRpcihpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4WzBdLmF0dHIua2V5cygpKSwgWzFdKQpAQCAtNTk5LDMxICs2NTMsOCBAQAogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5sb2FkcywgYidnMFxucDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYicoKEtkdHAwXG5oXHgwMGwuKSknKSwgWygxMDAsKSwgKDEwMCwpXSkKLQotICAgIGRlZiB0ZXN0X2luc2VjdXJlX3N0cmluZ3Moc2VsZik6Ci0gICAgICAgICMgWFhYIFNvbWUgb2YgdGhlc2UgdGVzdHMgYXJlIHRlbXBvcmFyaWx5IGRpc2FibGVkCi0gICAgICAgIGluc2VjdXJlID0gW2IiYWJjIiwgYiIyICsgMiIsICMgbm90IHF1b3RlZAotICAgICAgICAgICAgICAgICAgICAjIyBiIidhYmMnICsgJ2RlZiciLCAjIG5vdCBhIHNpbmdsZSBxdW90ZWQgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiYyIsICMgcXVvdGUgaXMgbm90IGNsb3NlZAotICAgICAgICAgICAgICAgICAgICBiIidhYmNcIiIsICMgb3BlbiBxdW90ZSBhbmQgY2xvc2UgcXVvdGUgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjJyAgID8iLCAjIGp1bmsgYWZ0ZXIgY2xvc2UgcXVvdGUKLSAgICAgICAgICAgICAgICAgICAgYiInXFwnIiwgIyB0cmFpbGluZyBiYWNrc2xhc2gKLSAgICAgICAgICAgICAgICAgICAgIyBWYXJpYXRpb25zIG9uIGlzc3VlICMxNzcxMAotICAgICAgICAgICAgICAgICAgICBiIiciLAotICAgICAgICAgICAgICAgICAgICBiJyInLAotICAgICAgICAgICAgICAgICAgICBiIicgIiwKLSAgICAgICAgICAgICAgICAgICAgYiInICAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICAgIiwKLSAgICAgICAgICAgICAgICAgICAgYiciICAgICcsCi0gICAgICAgICAgICAgICAgICAgICMgc29tZSB0ZXN0cyBvZiB0aGUgcXVvdGluZyBydWxlcwotICAgICAgICAgICAgICAgICAgICAjIyBiIidhYmNcIlwnJyIsCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ1xcXFxhXCdcJ1wnXFxcJ1xcXFxcJyciLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgIGZvciBiIGluIGluc2VjdXJlOgotICAgICAgICAgICAgYnVmID0gYiJTIiArIGIgKyBiIlwwMTJwMFwwMTIuIgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgYnVmKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KFsoMTAwLCksICgxMDAsKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkcyhiJygoS2R0cDBcbmhceDAwbC4pKScpKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKICAgICAgICAgZW5kY2FzZXMgPSBbJycsICc8XFx1PicsICc8XFxcdTEyMzQ+JywgJzxcbj4nLApAQCAtNjM0LDI2ICs2NjUsMjYgQEAKICAgICAgICAgICAgIGZvciB1IGluIGVuZGNhc2VzOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHUsIHByb3RvKQogICAgICAgICAgICAgICAgIHUyID0gc2VsZi5sb2FkcyhwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIHUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh1LCB1MikKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfaGlnaF9wbGFuZShzZWxmKToKICAgICAgICAgdCA9ICdcVTAwMDEyMzQ1JwogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICB0MiA9IHNlbGYubG9hZHMocCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHQyKQogCiAgICAgZGVmIHRlc3RfYnl0ZXMoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBmb3IgcyBpbiBiJycsIGIneHl6JywgYid4eXonKjEwMDoKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhzLCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzLCBzZWxmLmxvYWRzKHApKQogICAgICAgICAgICAgZm9yIHMgaW4gW2J5dGVzKFtpXSkgZm9yIGkgaW4gcmFuZ2UoMjU2KV06CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMocywgcHJvdG8pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkocywgc2VsZi5sb2FkcyhwKSkKICAgICAgICAgICAgIGZvciBzIGluIFtieXRlcyhbaSwgaV0pIGZvciBpIGluIHJhbmdlKDI1NildOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHMsIHByb3RvKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHMsIHNlbGYubG9hZHMocCkpCiAKICAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgogICAgICAgICBpbXBvcnQgc3lzCkBAIC02NjMsMTQgKzY5NCwxNCBAQAogICAgICAgICAgICAgICAgIGZvciBleHBlY3RlZCBpbiAoLW4sIG4pOgogICAgICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhleHBlY3RlZCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgICAgIG4yID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBuMikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShleHBlY3RlZCwgbjIpCiAgICAgICAgICAgICAgICAgbiA9IG4gPj4gMQogCiAgICAgZGVmIHRlc3RfbWF4aW50NjQoc2VsZik6CiAgICAgICAgIG1heGludDY0ID0gKDEgPDwgNjMpIC0gMQogICAgICAgICBkYXRhID0gYidJJyArIHN0cihtYXhpbnQ2NCkuZW5jb2RlKCJhc2NpaSIpICsgYidcbi4nCiAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMoZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIG1heGludDY0KQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KG1heGludDY0LCBnb3QpCiAKICAgICAgICAgIyBUcnkgdG9vIHdpdGggYSBib2d1cyBsaXRlcmFsLgogICAgICAgICBkYXRhID0gYidJJyArIHN0cihtYXhpbnQ2NCkuZW5jb2RlKCJhc2NpaSIpICsgYidKVU5LXG4uJwpAQCAtNjg1LDcgKzcxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIG5wb3MsIC1ucG9zOgogICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlID0gc2VsZi5kdW1wcyhuLCBwcm90bykKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBnb3QpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KG4sIGdvdCkKICAgICAgICAgIyBUcnkgYSBtb25zdGVyLiAgVGhpcyBpcyBxdWFkcmF0aWMtdGltZSBpbiBwcm90b3MgMCAmIDEsIHNvIGRvbid0CiAgICAgICAgICMgYm90aGVyIHdpdGggdGhvc2UuCiAgICAgICAgIG5iYXNlID0gaW50KCJkZWFkYmVlZmZlZWRmYWNlIiwgMTYpCkBAIC02OTMsNiArNzI0LDEwIEBACiAgICAgICAgIGZvciBuIGluIG5iYXNlLCAtbmJhc2U6CiAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhuLCAyKQogICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwKQorICAgICAgICAgICAgIyBhc3NlcnRfaXNfY29weSBpcyB2ZXJ5IGV4cGVuc2l2ZSBoZXJlIGFzIGl0IHByZWNvbXB1dGVzCisgICAgICAgICAgICAjIGEgZmFpbHVyZSBtZXNzYWdlIGJ5IGNvbXB1dGluZyB0aGUgcmVwcigpIG9mIG4gYW5kIGdvdCwKKyAgICAgICAgICAgICMgd2UganVzdCBkbyB0aGUgY2hlY2sgb3Vyc2VsdmVzLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGdvdCksIGludCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgZ290KQogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CkBAIC03MDMsNyArNzM4LDcgQEAKICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3ZhbHVlczoKICAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKHZhbHVlLCBwcm90bykKICAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBnb3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh2YWx1ZSwgZ290KQogCiAgICAgQHJ1bl93aXRoX2xvY2FsZSgnTENfQUxMJywgJ2RlX0RFJywgJ2ZyX0ZSJykKICAgICBkZWYgdGVzdF9mbG9hdF9mb3JtYXQoc2VsZik6CkBAIC03MzUsNiArNzcwLDcgQEAKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGEsIHByb3RvKQogICAgICAgICAgICAgYiA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShhKSwgdHlwZShiKSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdHNlcShzZWxmKToKICAgICAgICAgaW1wb3J0IHRpbWUKQEAgLTc0NCw0OCArNzgwLDQ4IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdCIpOgogICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0KG9zLmN1cmRpcikKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdHZmcyIpOgogICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0dmZzKG9zLmN1cmRpcikKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAKICAgICBkZWYgdGVzdF9lbGxpcHNpcyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKC4uLiwgcHJvdG8pCiAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCguLi4sIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKC4uLiwgdSkKIAogICAgIGRlZiB0ZXN0X25vdGltcGxlbWVudGVkKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoTm90SW1wbGVtZW50ZWQsIHByb3RvKQogICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm90SW1wbGVtZW50ZWQsIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCB1KQogCiAgICAgIyBUZXN0cyBmb3IgcHJvdG9jb2wgMgogCiAgICAgZGVmIHRlc3RfcHJvdG8oc2VsZik6Ci0gICAgICAgIGJ1aWxkX25vbmUgPSBwaWNrbGUuTk9ORSArIHBpY2tsZS5TVE9QCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IGJ1aWxkX25vbmUKKyAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKE5vbmUsIHByb3RvKQogICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHBpY2tsZS5QUk9UTyArIGJ5dGVzKFtwcm90b10pICsgZXhwZWN0ZWQKLSAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKE5vbmUsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBwcm90b19oZWFkZXIgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbcHJvdG9dKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaWNrbGVkLnN0YXJ0c3dpdGgocHJvdG9faGVhZGVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudF9vcGNvZGUocGlja2xlLlBST1RPLCBwaWNrbGVkKSwgMCkKIAogICAgICAgICBvb2IgPSBwcm90b2NvbHNbLTFdICsgMSAgICAgIyBhIGZ1dHVyZSBwcm90b2NvbAorICAgICAgICBidWlsZF9ub25lID0gcGlja2xlLk5PTkUgKyBwaWNrbGUuU1RPUAogICAgICAgICBiYWRwaWNrbGUgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbb29iXSkgKyBidWlsZF9ub25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubG9hZHMoYmFkcGlja2xlKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBkZXRhaWw6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGRldGFpbCkuc3RhcnRzd2l0aCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ1bnN1cHBvcnRlZCBwaWNrbGUgcHJvdG9jb2wiLCBzdHIoZXJyKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgYmFkIHByb3RvY29sIG51bWJlciB0byByYWlzZSBWYWx1ZUVycm9yIikKIApAQCAtNzk0LDcgKzgzMCw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkcxLCBzKSwgcHJvdG8gPj0gMikKIAogICAgIGRlZiB0ZXN0X2xvbmc0KHNlbGYpOgpAQCAtODAyLDcgKzgzOCw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkc0LCBzKSwgcHJvdG8gPj0gMikKIAogICAgIGRlZiB0ZXN0X3Nob3J0X3R1cGxlcyhzZWxmKToKQEAgLTg0MCw5ICs4NzYsOSBAQAogICAgICAgICAgICAgZm9yIHggaW4gYSwgYiwgYywgZCwgZToKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSwgKHByb3RvLCB4LCBzLCB5KSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVtwcm90bywgbGVuKHgpXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcyksIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW21pbihwcm90bywgMyksIGxlbih4KV0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcykpCiAKICAgICBkZWYgdGVzdF9zaW5nbGV0b25zKHNlbGYpOgogICAgICAgICAjIE1hcCAocHJvdG8sIHNpbmdsZXRvbikgdG8gZXhwZWN0ZWQgb3Bjb2RlLgpAQCAtODY2LDggKzkwMiw4IEBACiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB5LCAocHJvdG8sIHgsIHMsIHkpKQotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW3Byb3RvLCB4XQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcyksIFRydWUpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbbWluKHByb3RvLCAzKSwgeF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcykpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfdHVwbGUoc2VsZik6CiAgICAgICAgIHggPSBNeVR1cGxlKFsxLCAyLCAzXSkKQEAgLTg3Niw4ICs5MTIsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh4KSwgdHVwbGUoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdChzZWxmKToKICAgICAgICAgeCA9IE15TGlzdChbMSwgMiwgM10pCkBAIC04ODYsOCArOTIxLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9nZW5lcmljKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgpAQCAtODk4LDYgKzkzMiw3IEBACiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgICAgICBkZXRhaWwgPSAocHJvdG8sIEMsIEIsIHgsIHksIHR5cGUoeSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KSAjIFhYWCByZXZpc2l0CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCKHgpLCBCKHkpLCBkZXRhaWwpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fLCBkZXRhaWwpCiAKQEAgLTkzNiwxMSArOTcxLDEwIEBACiAgICAgICAgICAgICBzMSA9IHNlbGYuZHVtcHMoeCwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oX19uYW1lX18uZW5jb2RlKCJ1dGYtOCIpLCBzMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJNeUxpc3QiLCBzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMxKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMSkpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMiBmb3IgdGVzdC4KICAgICAgICAgICAgIHMyID0gc2VsZi5kdW1wcyh4LCAyKQpAQCAtOTQ5LDkgKzk4Myw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMiksIFRydWUsIHJlcHIoczIpKQogCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKLQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZS5yZXN0b3JlKCkKIApAQCAtOTc1LDcgKzEwMDcsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX2FwcGVuZHMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFQUEVORFMsIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCBwcm90byA+IDApCiAKQEAgLTk4NCw3ICsxMDE2LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9hcHBlbmRzID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BUFBFTkRTLCBzKQogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCAwKQpAQCAtOTk4LDcgKzEwMzAsNyBAQAogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX3NldGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5TRVRJVEVNUywgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX3NldGl0ZW1zLCBwcm90byA+IDApCiAKQEAgLTEwMDcsMjIgKzEwMzksNDkgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9zZXRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuU0VUSVRFTVMsIHMpCiAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX3NldGl0ZW1zLCAwKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX3NldGl0ZW1zID49IDIpCiAKKyAgICBkZWYgdGVzdF9zZXRfY2h1bmtpbmcoc2VsZik6CisgICAgICAgIG4gPSAxMCAgIyB0b28gc21hbGwgdG8gY2h1bmsKKyAgICAgICAgeCA9IHNldChyYW5nZShuKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgIG51bV9hZGRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuQURESVRFTVMsIHMpCisgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYWRkaXRlbXMsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FkZGl0ZW1zLCAxKQorCisgICAgICAgIG4gPSAyNTAwICAjIGV4cGVjdCBhdCBsZWFzdCB0d28gY2h1bmtzIHdoZW4gcHJvdG8gPj0gNAorICAgICAgICB4ID0gc2V0KHJhbmdlKG4pKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorICAgICAgICAgICAgbnVtX2FkZGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BRERJVEVNUywgcykKKyAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hZGRpdGVtcywgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobnVtX2FkZGl0ZW1zLCAyKQorCiAgICAgZGVmIHRlc3Rfc2ltcGxlX25ld29iaihzZWxmKToKICAgICAgICAgeCA9IG9iamVjdC5fX25ld19fKFNpbXBsZU5ld09iaikgICMgYXZvaWQgX19pbml0X18KICAgICAgICAgeC5hYmMgPSA2NjYKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkosIHMpLCBwcm90byA+PSAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkosIHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDw9IHByb3RvIDwgNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKX0VYLCBzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8gPj0gNCkKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpICAgIyB3aWxsIHJhaXNlIFR5cGVFcnJvciBpZiBfX2luaXRfXyBjYWxsZWQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hYmMsIDY2NikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9saXN0X3Nsb3RzKHNlbGYpOgogICAgICAgICB4ID0gU2xvdExpc3QoWzEsIDIsIDNdKQpAQCAtMTAzMCwxMCArMTA4OSw3IEBACiAgICAgICAgIHguYmFyID0gImhlbGxvIgogICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCAyKQogICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZvbywgeS5mb28pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5iYXIsIHkuYmFyKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9yZWR1Y2Vfb3ZlcnJpZGVzX2RlZmF1bHRfcmVkdWNlX2V4KHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgpAQCAtMTA4MiwxMSArMTEzOCwxMCBAQAogCiAgICAgQG5vX3RyYWNpbmcKICAgICBkZWYgdGVzdF9iYWRfZ2V0YXR0cihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMzUxNDogY3Jhc2ggd2hlbiB0aGVyZSBpcyBhbiBpbmZpbml0ZSBsb29wIGluIF9fZ2V0YXR0cl9fCiAgICAgICAgIHggPSBCYWRHZXRhdHRyKCkKLSAgICAgICAgZm9yIHByb3RvIGluIDAsIDE6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYuZHVtcHMsIHgsIHByb3RvKQotICAgICAgICAjIHByb3RvY29sIDIgZG9uJ3QgcmFpc2UgYSBSdW50aW1lRXJyb3IuCi0gICAgICAgIGQgPSBzZWxmLmR1bXBzKHgsIDIpCiAKICAgICBkZWYgdGVzdF9yZWR1Y2VfYmFkX2l0ZXJhdG9yKHNlbGYpOgogICAgICAgICAjIElzc3VlNDE3NjogY3Jhc2ggd2hlbiA0dGggYW5kIDV0aCBpdGVtcyBvZiBfX3JlZHVjZV9fKCkKQEAgLTExMTksMTEgKzExNzQsMTAgQEAKICAgICAgICAgb2JqID0gW2RpY3QobGFyZ2VfZGljdCksIGRpY3QobGFyZ2VfZGljdCksIGRpY3QobGFyZ2VfZGljdCldCiAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKLSAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoZHVtcGVkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQsIG9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBwcm90b2NvbCAlZDogJXIgIT0gJXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHByb3RvLCBvYmosIGxvYWRlZCkpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkob2JqLCBsb2FkZWQpCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfbmFtZV9pbnRlcm5pbmcoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGF0dHJpYnV0ZSBuYW1lcyBvZiBwaWNrbGVkIG9iamVjdHMgYXJlIGludGVybmVkIHdoZW4KQEAgLTExNzksMTEgKzEyMzMsMTQgQEAKICAgICBkZWYgdGVzdF9pbnRfcGlja2xpbmdfZWZmaWNpZW5jeShzZWxmKToKICAgICAgICAgIyBUZXN0IGNvbXBhY2l0eSBvZiBpbnQgcmVwcmVzZW50YXRpb24gKHNlZSBpc3N1ZSAjMTI3NDQpCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBzaXplcyA9IFtsZW4oc2VsZi5kdW1wcygyKipuLCBwcm90bykpIGZvciBuIGluIHJhbmdlKDcwKV0KLSAgICAgICAgICAgICMgdGhlIHNpemUgZnVuY3Rpb24gaXMgbW9ub3RvbmljCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzaXplcyksIHNpemVzKQotICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplc1stMV0sIDE0KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZXMgPSBbc2VsZi5kdW1wcygyKipuLCBwcm90bykgZm9yIG4gaW4gcmFuZ2UoNzApXQorICAgICAgICAgICAgICAgIHNpemVzID0gbGlzdChtYXAobGVuLCBwaWNrbGVzKSkKKyAgICAgICAgICAgICAgICAjIHRoZSBzaXplIGZ1bmN0aW9uIGlzIG1vbm90b25pYworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNpemVzKSwgc2l6ZXMpCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGlja2xlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORywgcCkpCiAKICAgICBkZWYgY2hlY2tfbmVnYXRpdmVfMzJiX2JpblhYWChzZWxmLCBkdW1wZWQpOgogICAgICAgICBpZiBzeXMubWF4c2l6ZSA+IDIqKjMyOgpAQCAtMTIxNCw2ICsxMjcxLDM1IEBACiAgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDNYXHgwMVx4MDBceDAwXHgwMGFyXHhmZlx4ZmZceGZmXHhmZi4nCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGR1bXBlZCkKIAorICAgIGRlZiB0ZXN0X2JhZGx5X2VzY2FwZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBiIlMnXFwnXG4uIikKKworICAgIGRlZiB0ZXN0X2JhZGx5X3F1b3RlZF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3NzEwCisgICAgICAgIGJhZHBpY2tsZXMgPSBbYiJTJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTIlxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXCcgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXCciXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiXCdcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGIiUycgJyBcbi4iLAorICAgICAgICAgICAgICAgICAgICAgIGInUyIgIiBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGIiUyAnJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTICIiXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1Ncbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUy4nXQorICAgICAgICBmb3IgcCBpbiBiYWRwaWNrbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocGlja2xlLlVucGlja2xpbmdFcnJvciwgc2VsZi5sb2FkcywgcCkKKworICAgIGRlZiB0ZXN0X2NvcnJlY3RseV9xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBnb29kcGlja2xlcyA9IFsoYiJTJydcbi4iLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiJ1MiIlxuLicsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGInUyJcXG4iXG4uJywgJ1xuJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiIlMnXFxuJ1xuLiIsICdcbicpXQorICAgICAgICBmb3IgcCwgZXhwZWN0ZWQgaW4gZ29vZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIGV4cGVjdGVkKQorCiAgICAgZGVmIF9jaGVja19waWNrbGluZ193aXRoX29wY29kZShzZWxmLCBvYmosIG9wY29kZSwgcHJvdG8pOgogICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHBpY2tsZWQpKQpAQCAtMTIzNyw2ICsxMzIzLDE4NCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19waWNrbGluZ193aXRoX29wY29kZShvYmosIHBpY2tsZS5TRVRJVEVNUywgcHJvdG8pCiAKKyAgICAjIEV4ZXJjaXNlIGZyYW1pbmcgKHByb3RvID49IDQpIGZvciBzaWduaWZpY2FudCB3b3JrbG9hZHMKKworICAgIEZSQU1FX1NJWkVfVEFSR0VUID0gNjQgKiAxMDI0CisKKyAgICBkZWYgdGVzdF9mcmFtaW5nX21hbnlfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgb2JqID0gbGlzdChyYW5nZSgxMCoqNSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB1bnBpY2tsZWQpCisgICAgICAgICAgICAgICAgIyBUZXN0IHRoZSBmcmFtaW5nIGhldXJpc3RpYyBpcyBzYW5lLAorICAgICAgICAgICAgICAgICMgYXNzdW1pbmcgYSBnaXZlbiBmcmFtZSBzaXplIHRhcmdldC4KKyAgICAgICAgICAgICAgICBpZiBzZWxmLm9wdGltaXplZDoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBhc3N1bXB0aW9ucyBhcmUgY3VycmVudGx5IGludmFsaWQgZm9yIG9wdGltaXplZAorICAgICAgICAgICAgICAgICAgICAjIHBpY2tsZXMgKHNlZSBlLmcuIGlzc3VlMTk3NTQpLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGJ5dGVzX3Blcl9mcmFtZSA9IChsZW4ocGlja2xlZCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYnl0ZXNfcGVyX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZSQU1FX1NJWkVfVEFSR0VUIC8gMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChieXRlc19wZXJfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GUkFNRV9TSVpFX1RBUkdFVCAqIDEpCisKKyAgICBkZWYgdGVzdF9mcmFtaW5nX2xhcmdlX29iamVjdHMoc2VsZik6CisgICAgICAgIE4gPSAxMDI0ICogMTAyNAorICAgICAgICBvYmogPSBbYid4JyAqIE4sIGIneScgKiBOLCBiJ3onICogTl0KKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHVucGlja2xlZCkKKyAgICAgICAgICAgICAgICBuX2ZyYW1lcyA9IGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHBpY2tsZWQpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZWQ6CisgICAgICAgICAgICAgICAgICAgICMgQXQgbGVhc3Qgb25lIGZyYW1lIHdhcyBlbWl0dGVkIChzZWUgaXNzdWUxOTc1NCkuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG5fZnJhbWVzLCAxKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgQXQgbGVhc3Qgb25lIGZyYW1lIHdhcyBlbWl0dGVkIHBlciBsYXJnZSBieXRlcyBvYmplY3QuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG5fZnJhbWVzLCBsZW4ob2JqKSkKKworICAgIGRlZiB0ZXN0X29wdGlvbmFsX2ZyYW1lcyhzZWxmKToKKyAgICAgICAgaWYgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgPCA0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVmIHJlbW92ZV9mcmFtZXMocGlja2xlZCwga2VlcF9mcmFtZT1Ob25lKToKKyAgICAgICAgICAgICIiIlJlbW92ZSBmcmFtZSBvcGNvZGVzIGZyb20gdGhlIGdpdmVuIHBpY2tsZS4iIiIKKyAgICAgICAgICAgIGZyYW1lX3N0YXJ0cyA9IFtdCisgICAgICAgICAgICAjIDEgYnl0ZSBmb3IgdGhlIG9wY29kZSBhbmQgOCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBmcmFtZV9vcGNvZGVfc2l6ZSA9IDkKKyAgICAgICAgICAgIGZvciBvcGNvZGUsIF8sIHBvcyBpbiBwaWNrbGV0b29scy5nZW5vcHMocGlja2xlZCk6CisgICAgICAgICAgICAgICAgaWYgb3Bjb2RlLm5hbWUgPT0gJ0ZSQU1FJzoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVfc3RhcnRzLmFwcGVuZChwb3MpCisKKyAgICAgICAgICAgIG5ld3BpY2tsZSA9IGJ5dGVhcnJheSgpCisgICAgICAgICAgICBsYXN0X2ZyYW1lX2VuZCA9IDAKKyAgICAgICAgICAgIGZvciBpLCBwb3MgaW4gZW51bWVyYXRlKGZyYW1lX3N0YXJ0cyk6CisgICAgICAgICAgICAgICAgaWYga2VlcF9mcmFtZSBhbmQga2VlcF9mcmFtZShpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXdwaWNrbGUgKz0gcGlja2xlZFtsYXN0X2ZyYW1lX2VuZDpwb3NdCisgICAgICAgICAgICAgICAgbGFzdF9mcmFtZV9lbmQgPSBwb3MgKyBmcmFtZV9vcGNvZGVfc2l6ZQorICAgICAgICAgICAgbmV3cGlja2xlICs9IHBpY2tsZWRbbGFzdF9mcmFtZV9lbmQ6XQorICAgICAgICAgICAgcmV0dXJuIG5ld3BpY2tsZQorCisgICAgICAgIGZyYW1lX3NpemUgPSBzZWxmLkZSQU1FX1NJWkVfVEFSR0VUCisgICAgICAgIG51bV9mcmFtZXMgPSAyMAorICAgICAgICBvYmogPSBbYnl0ZXMoW2ldKSAqIGZyYW1lX3NpemUgZm9yIGkgaW4gcmFuZ2UobnVtX2ZyYW1lcyldCisKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorCisgICAgICAgICAgICBmcmFtZWxlc3NfcGlja2xlID0gcmVtb3ZlX2ZyYW1lcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBmcmFtZWxlc3NfcGlja2xlKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBzZWxmLmxvYWRzKGZyYW1lbGVzc19waWNrbGUpKQorCisgICAgICAgICAgICBzb21lX2ZyYW1lc19waWNrbGUgPSByZW1vdmVfZnJhbWVzKHBpY2tsZWQsIGxhbWJkYSBpOiBpICUgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBzb21lX2ZyYW1lc19waWNrbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHBpY2tsZWQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHNlbGYubG9hZHMoc29tZV9mcmFtZXNfcGlja2xlKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9uYW1lcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIE5lc3RlZAorICAgICAgICBjbGFzcyBOZXN0ZWQ6CisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3Igb2JqIGluIFtOZXN0ZWQuQSwgTmVzdGVkLkEuQiwgTmVzdGVkLkEuQi5DXToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgb2JqPW9iaik6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmosIHVucGlja2xlZCkKKworICAgIGRlZiB0ZXN0X3B5X21ldGhvZHMoc2VsZik6CisgICAgICAgIGdsb2JhbCBQeU1ldGhvZHNUZXN0CisgICAgICAgIGNsYXNzIFB5TWV0aG9kc1Rlc3Q6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgY2hlZXNlKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJjaGVlc2UiCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB3aW5lKGNscyk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGNscyBpcyBQeU1ldGhvZHNUZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuICJ3aW5lIgorICAgICAgICAgICAgZGVmIGJpc2N1aXRzKHNlbGYpOgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYsIFB5TWV0aG9kc1Rlc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuICJiaXNjdWl0cyIKKyAgICAgICAgICAgIGNsYXNzIE5lc3RlZDoKKyAgICAgICAgICAgICAgICAiTmVzdGVkIGNsYXNzIgorICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYga2V0Y2h1cCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtldGNodXAiCisgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIG1hcGxlKGNscyk6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBjbHMgaXMgUHlNZXRob2RzVGVzdC5OZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtYXBsZSIKKyAgICAgICAgICAgICAgICBkZWYgcGllKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBQeU1ldGhvZHNUZXN0Lk5lc3RlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwaWUiCisKKyAgICAgICAgcHlfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuY2hlZXNlLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC53aW5lLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdCgpLmJpc2N1aXRzLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQua2V0Y2h1cCwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuTmVzdGVkLm1hcGxlLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQoKS5waWUKKyAgICAgICAgKQorICAgICAgICBweV91bmJvdW5kX21ldGhvZHMgPSAoCisgICAgICAgICAgICAoUHlNZXRob2RzVGVzdC5iaXNjdWl0cywgUHlNZXRob2RzVGVzdCksCisgICAgICAgICAgICAoUHlNZXRob2RzVGVzdC5OZXN0ZWQucGllLCBQeU1ldGhvZHNUZXN0Lk5lc3RlZCkKKyAgICAgICAgKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBtZXRob2QgaW4gcHlfbWV0aG9kczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2QoKSwgdW5waWNrbGVkKCkpCisgICAgICAgICAgICBmb3IgbWV0aG9kLCBjbHMgaW4gcHlfdW5ib3VuZF9tZXRob2RzOgorICAgICAgICAgICAgICAgIG9iaiA9IGNscygpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG1ldGhvZD1tZXRob2QpOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kKG9iaiksIHVucGlja2xlZChvYmopKQorCisKKyAgICBkZWYgdGVzdF9jX21ldGhvZHMoc2VsZik6CisgICAgICAgIGdsb2JhbCBTdWJjbGFzcworICAgICAgICBjbGFzcyBTdWJjbGFzcyh0dXBsZSk6CisgICAgICAgICAgICBjbGFzcyBOZXN0ZWQoc3RyKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY19tZXRob2RzID0gKAorICAgICAgICAgICAgIyBib3VuZCBidWlsdC1pbiBtZXRob2QKKyAgICAgICAgICAgICgiYWJjZCIuaW5kZXgsICgiYyIsKSksCisgICAgICAgICAgICAjIHVuYm91bmQgYnVpbHQtaW4gbWV0aG9kCisgICAgICAgICAgICAoc3RyLmluZGV4LCAoImFiY2QiLCAiYyIpKSwKKyAgICAgICAgICAgICMgYm91bmQgInNsb3QiIG1ldGhvZAorICAgICAgICAgICAgKFsxLCAyLCAzXS5fX2xlbl9fLCAoKSksCisgICAgICAgICAgICAjIHVuYm91bmQgInNsb3QiIG1ldGhvZAorICAgICAgICAgICAgKGxpc3QuX19sZW5fXywgKFsxLCAyLCAzXSwpKSwKKyAgICAgICAgICAgICMgYm91bmQgImNvZXhpc3QiIG1ldGhvZAorICAgICAgICAgICAgKHsxLCAyfS5fX2NvbnRhaW5zX18sICgyLCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kICJjb2V4aXN0IiBtZXRob2QKKyAgICAgICAgICAgIChzZXQuX19jb250YWluc19fLCAoezEsIDJ9LCAyKSksCisgICAgICAgICAgICAjIGJ1aWx0LWluIGNsYXNzIG1ldGhvZAorICAgICAgICAgICAgKGRpY3QuZnJvbWtleXMsICgoImEiLCAxKSwgKCJiIiwgMikpKSwKKyAgICAgICAgICAgICMgYnVpbHQtaW4gc3RhdGljIG1ldGhvZAorICAgICAgICAgICAgKGJ5dGVhcnJheS5tYWtldHJhbnMsIChiImFiYyIsIGIieHl6IikpLAorICAgICAgICAgICAgIyBzdWJjbGFzcyBtZXRob2RzCisgICAgICAgICAgICAoU3ViY2xhc3MoWzEsMiwyXSkuY291bnQsICgyLCkpLAorICAgICAgICAgICAgKFN1YmNsYXNzLmNvdW50LCAoU3ViY2xhc3MoWzEsMiwyXSksIDIpKSwKKyAgICAgICAgICAgIChTdWJjbGFzcy5OZXN0ZWQoInN3ZWV0IikuY291bnQsICgiZSIsKSksCisgICAgICAgICAgICAoU3ViY2xhc3MuTmVzdGVkLmNvdW50LCAoU3ViY2xhc3MuTmVzdGVkKCJzd2VldCIpLCAiZSIpKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBtZXRob2QsIGFyZ3MgaW4gY19tZXRob2RzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBtZXRob2Q9bWV0aG9kKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG1ldGhvZCwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZCgqYXJncyksIHVucGlja2xlZCgqYXJncykpCisKIAogY2xhc3MgQmlnbWVtUGlja2xlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMjQ3LDEwICsxNTExLDExIEBACiAgICAgICAgIGRhdGEgPSAxIDw8ICg4ICogc2l6ZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgICAgICBpZiBwcm90byA8IDI6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAyOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTEyNjMsMTQgKzE1MjgsMTUgQEAKICAgICAgICAgZGF0YSA9IGIiYWJjZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWzoxNV0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE1Ol0pCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTldKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFstMTg6XSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xMjc5LDEwICsxNTQ1LDExIEBACiAgICAgICAgIGRhdGEgPSBiImEiICogc2l6ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIApAQCAtMTI5NCwyNyArMTU2MSwzOCBAQAogICAgICAgICBkYXRhID0gImFiY2QiICogKHNpemUgLy8gNCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWzoxNV0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE1Ol0pCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTldKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFstMTg6XSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCi0gICAgIyBCSU5VTklDT0RFIChwcm90b2NvbHMgMSwgMiBhbmQgMykgY2Fubm90IGNhcnJ5IG1vcmUgdGhhbgotICAgICMgMioqMzIgLSAxIGJ5dGVzIG9mIHV0Zi04IGVuY29kZWQgdW5pY29kZS4KKyAgICAjIEJJTlVOSUNPREUgKHByb3RvY29scyAxLCAyIGFuZCAzKSBjYW5ub3QgY2FycnkgbW9yZSB0aGFuIDIqKjMyIC0gMSBieXRlcworICAgICMgb2YgdXRmLTggZW5jb2RlZCB1bmljb2RlLiBCSU5VTklDT0RFOCAocHJvdG9jb2wgNCkgc3VwcG9ydHMgdGhlc2UgaHVnZQorICAgICMgdW5pY29kZSBzdHJpbmdzIGhvd2V2ZXIuCiAKLSAgICBAYmlnbWVtdGVzdChzaXplPV80RywgbWVtdXNlPTEgKyBhc2NpaV9jaGFyX3NpemUsIGRyeV9ydW49RmFsc2UpCisgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcsIG1lbXVzZT0yICsgYXNjaWlfY2hhcl9zaXplLCBkcnlfcnVuPUZhbHNlKQogICAgIGRlZiB0ZXN0X2h1Z2Vfc3RyXzY0YihzZWxmLCBzaXplKToKLSAgICAgICAgZGF0YSA9ICJhIiAqIHNpemUKKyAgICAgICAgZGF0YSA9ICJhYmNkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE4Ol0pCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xMzU4LDggKzE2MzYsOCBAQAogICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcmVkdWNlX18oc2VsZikKIAogY2xhc3MgUkVYX3NpeChvYmplY3QpOgotICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNHRoIGFyZ3VtZW50IChsaXN0IGl0ZXJhdG9yKSBvZiB0aGUgcmVkdWNlCi0gICAgcHJvdG9jb2wuCisgICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA0dGggYXJndW1lbnQgKGxpc3QgaXRlcmF0b3IpIG9mCisgICAgdGhlIHJlZHVjZSBwcm90b2NvbC4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbXM9Tm9uZSk6CiAgICAgICAgIHNlbGYuaXRlbXMgPSBpdGVtcyBpZiBpdGVtcyBpcyBub3QgTm9uZSBlbHNlIFtdCkBAIC0xMzcxLDggKzE2NDksOCBAQAogICAgICAgICByZXR1cm4gdHlwZShzZWxmKSwgKCksIE5vbmUsIGl0ZXIoc2VsZi5pdGVtcyksIE5vbmUKIAogY2xhc3MgUkVYX3NldmVuKG9iamVjdCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA1dGggYXJndW1lbnQgKGRpY3QgaXRlcmF0b3IpIG9mIHRoZSByZWR1Y2UKLSAgICBwcm90b2NvbC4KKyAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDV0aCBhcmd1bWVudCAoZGljdCBpdGVyYXRvcikgb2YKKyAgICB0aGUgcmVkdWNlIHByb3RvY29sLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZT1Ob25lKToKICAgICAgICAgc2VsZi50YWJsZSA9IHRhYmxlIGlmIHRhYmxlIGlzIG5vdCBOb25lIGVsc2Uge30KQEAgLTE0MTAsMTAgKzE2ODgsMTYgQEAKIGNsYXNzIE15RGljdChkaWN0KToKICAgICBzYW1wbGUgPSB7ImEiOiAxLCAiYiI6IDJ9CiAKK2NsYXNzIE15U2V0KHNldCk6CisgICAgc2FtcGxlID0geyJhIiwgImIifQorCitjbGFzcyBNeUZyb3plblNldChmcm96ZW5zZXQpOgorICAgIHNhbXBsZSA9IGZyb3plbnNldCh7ImEiLCAiYiJ9KQorCiBteWNsYXNzZXMgPSBbTXlJbnQsIE15RmxvYXQsCiAgICAgICAgICAgICAgTXlDb21wbGV4LAogICAgICAgICAgICAgIE15U3RyLCBNeVVuaWNvZGUsCi0gICAgICAgICAgICAgTXlUdXBsZSwgTXlMaXN0LCBNeURpY3RdCisgICAgICAgICAgICAgTXlUdXBsZSwgTXlMaXN0LCBNeURpY3QsIE15U2V0LCBNeUZyb3plblNldF0KIAogCiBjbGFzcyBTbG90TGlzdChNeUxpc3QpOgpAQCAtMTQyMyw2ICsxNzA3LDggQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYiwgYyk6CiAgICAgICAgICMgcmFpc2UgYW4gZXJyb3IsIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGNhbGxlZAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlNpbXBsZU5ld09iai5fX2luaXRfXygpIGRpZG4ndCBleHBlY3QgdG8gZ2V0IGNhbGxlZCIpCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fZGljdF9fCiAKIGNsYXNzIEJhZEdldGF0dHI6CiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGtleSk6CkBAIC0xNDU5LDcgKzE3NDUsNyBAQAogCiAgICAgZGVmIHRlc3RfaGlnaGVzdF9wcm90b2NvbChzZWxmKToKICAgICAgICAgIyBPZiBjb3Vyc2UgdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHdoZW4gSElHSEVTVF9QUk9UT0NPTCBjaGFuZ2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MLCA0KQogCiAgICAgZGVmIHRlc3RfY2FsbGFwaShzZWxmKToKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQpAQCAtMTY0MCwyMiArMTkyNiwyMyBAQAogCiAgICAgZGVmIF9jaGVja19tdWx0aXBsZV91bnBpY2tsaW5ncyhzZWxmLCBpb2NsYXNzKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIGRhdGExID0gWyh4LCBzdHIoeCkpIGZvciB4IGluIHJhbmdlKDIwMDApXSArIFtiImFiY2RlIiwgbGVuXQotICAgICAgICAgICAgZiA9IGlvY2xhc3MoKQotICAgICAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKLSAgICAgICAgICAgIHBpY2tsZWQgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBkYXRhMSA9IFsoeCwgc3RyKHgpKSBmb3IgeCBpbiByYW5nZSgyMDAwKV0gKyBbYiJhYmNkZSIsIGxlbl0KKyAgICAgICAgICAgICAgICBmID0gaW9jbGFzcygpCisgICAgICAgICAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YTEpCisgICAgICAgICAgICAgICAgcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQogCi0gICAgICAgICAgICBOID0gNQotICAgICAgICAgICAgZiA9IGlvY2xhc3MocGlja2xlZCAqIE4pCi0gICAgICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhmKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgotICAgICAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVyLmxvYWQoKSwgZGF0YTEpCi0gICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwb3MgKyBsZW4ocGlja2xlZCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgdW5waWNrbGVyLmxvYWQpCisgICAgICAgICAgICAgICAgTiA9IDUKKyAgICAgICAgICAgICAgICBmID0gaW9jbGFzcyhwaWNrbGVkICogTikKKyAgICAgICAgICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhmKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGExKQorICAgICAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwb3MgKyBsZW4ocGlja2xlZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHVucGlja2xlci5sb2FkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfdW5waWNrbGluZ3Nfc2Vla2FibGUoc2VsZik6CiAgICAgICAgIHNlbGYuX2NoZWNrX211bHRpcGxlX3VucGlja2xpbmdzKGlvLkJ5dGVzSU8pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWNhY2VydC5wZW0gYi9MaWIvdGVzdC9weWNhY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliMWYzZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5Y2FrZXkucGVtIGIvTGliL3Rlc3QvcHljYWtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2ZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FrZXkucGVtCkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJRXZnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2d3Z2dTa0FnRUFBb0lCQVFEbjN1bmpESjhBdHFIOQorSzF1VzBtL000TDZHdVNCZTdBTjZWYXZxcE9uNVNZWFNadFh0eDNycVZvNHRqK2RDNG1Jb3FaL1dHNDdydGJTYworbnhTcjMrYVVpM1lkUG0wa1llME12d0NLWVF6ZlhNZzJjeFlBelVlNmJhU2tkSWlESXdvWi9BbW5QRXBMMCtjZAorTGVUcVRGUWg4eWJiaVRjWTFBSzdRREpmcFA4dEhQZlV1K3lPejF5Q3JPWjhDR3hJaFdFSGZ5WGdYT0M4TkYvZwordVFSSGRjaEhDNDI4MXNob1h6T0RZdElnUkRXeHJZRWFpczI4TmJCY2kwZldHT21jR0pmTUFUd3B6T2dlNU9UQgordU43bndoRVloMXFUTk5pbUpmY1VjZXZrSWFMU0R5NHUxR0lBTmRQVzcxeGdTMHlwRk9MZEZWaEdOek1tdCtjdQorWGUxQzVNVk5BZ01CQUFFQ2dnRUJBSlBNN1F1VXJQbjRjTE4vWXNkMTVsd1RXbjlvSERGRmdrWUZ2Q3M2NmdYRQoranUvNkt4MkJqV0U0d1RKYnkwOUFITS9NcUIwRHZndVQ3TWYxUTJqM3RQUTFIWm93ZzhPd1JEbGV1d3A2S0lscworakJiaEwwSmRsLzVIQzY3a3RXdlo5d052Ty93RkcxclFmVDZGVmFqZjlMVWJXRWFTWmJPRzJTTGhIZnNIb3J6dQoreGpUSmFJM2JRLzArNzlCMWV4d2s1cnV3aHpGUmQvWHBZOGhsczdEL1JmUEl1SERsQmdoa1czTjU5S0ZXcmY1aAorNmJORWgyVEhtMCtJeUdjR3FzMEZEK1FDT1h5dnNqd1NVc3dxcnIyY3RMUkVPZURjZDVSZVVqU3hZZ2pjSlJybQorSjdjZUlZLyt1d0RKeHcvT2xubUJ2RjZwUU1rS3dZVzJnRnp0dStnMnQ0VUNnWUVBLzl5bzAxRXh6NGNyeFhzeQordEFsbkRKTSsrblpjbTA3cnRGalRLSFVmS1kvY0NnTlRhOHVkTTBzdm5md2xpZC9kcGdMc0kzOGd4MDRISEMxaQorRVo0YWN6K1RvSVdlZEx4TTBucTczLy94ZVJXRWF6T3ZDejFtTVRaYU1sZGFoVFdBeXpOOHFWSzJCLzYyNVl5NAord05ZV3l3ZUJCd0VCOE16YUNzNzNzcGtzWE9zQ2dZRUE1Lzd3dmhpb2ZZR0ZBZk11QU5lSkl3REwyT3RCbm9PdgorbVZOZkNtaTNHQzM4Znp3eWk1WnBza1dEaVMyd29KK0xRZnM5UXU0RWNaYlVGTGQ3Z2JlT3ZiNWdtRlV0WW9wZQorTGl0VVVLdW5JUjE4TWtRK21RREJwUVBRUGhrNFFKUDVyZUNiV2tyZlR1N2I1by9pUzQxczZmQlRGbXV6aExjVAorQzcxdkZkQ3llS2NDZ1lBaUNDcVllT3RFTERtQk9lTERtYUNRUnFHUTFOOTZkT1BiQ0JtRi94WVhCQ0NEWUcvZgorSGFVYUpuejk2WVRnc3RzYmNyWVAvcC9RZ3F0bGJ3L2xRZjlJcHdNdXpiY0cxZWp0OGc4OU95RFdOeXQyeXRnVQoraWFVbkZKQ29zMy9CeWgwSWFoL0JzZE91ZW8yL09KbDJaTU9CVzgwb3JsU2d2ODZjczJ5MDM3VEw0d0tCZ1FEbQorT095VytNbGJvd2huSXZmb0Jmd2xMRWtlZm5lajRuS0Q2V1JMWkJjdWU1UXlmMzU1WDA2TWhzYzlmb1hsSCs2RworRDloL2Jzd2lITmRocDZOODJyZGdQR2lIUXgvQ3hpVW9FLytiL252Z05PNW13NnFMRTJFWGJHMWU4cEFNSmN5RQorYkh3K1lrYXdnZ0RmRUxJMDM2ZlJqNWdraThTZVV6OG5TMW5OZ0VsYnlRS0JnQ1JEWDlKaCtNd1NMdTRRQldkdAorL2ZpK2x2M0s2a3VuL2ZJN0VPVjF2Q1Yvajg3MXRJQ3U3cHU1QnJPTHhBSHFvVmZVOUFVWDI5OS8yS2pDYjVwdgora2pvZ2lVSzZxV0NXQmxmdXFETldHQ29VR3Qxcmh6blV2YTBuTmpTTXk1cmluQmhoanBST1pDMnB3NDhsT2x1UAorVXV2WHNhUHBoN0dUcVB1eTRLYWIxMllDCistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CmluZGV4IGFlNjJjNmUuLmMxYzgzMWYgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0xLDExICsxLDE4IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKLVVzYWdlOgorU2NyaXB0IHRvIHJ1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAorUnVuIHRoaXMgc2NyaXB0IHdpdGggLWggb3IgLS1oZWxwIGZvciBkb2N1bWVudGF0aW9uLgorIiIiCisKK1VTQUdFID0gIiIiXAogcHl0aG9uIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCiBweXRob24gcGF0aC90by9MaWIvdGVzdC9yZWdydGVzdC5weSBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KKyIiIgogCitERVNDUklQVElPTiA9ICIiIlwKK1J1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAogSWYgbm8gYXJndW1lbnRzIG9yIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBmaW5kcyBhbGwgZmlsZXMgbWF0Y2hpbmcKIHRoZSBwYXR0ZXJuICJ0ZXN0XyoiIGluIHRoZSBMaWIvdGVzdCBzdWJkaXJlY3RvcnkgYW5kIHJ1bnMKQEAgLTE1LDYzICsyMiwxMCBAQAogY29tbWFuZCBsaW5lOgogCiBweXRob24gLUUgLVdkIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIC4uLl0KKyIiIgogCi0KLU9wdGlvbnM6Ci0KLS1oLy0taGVscCAgICAgICAtLSBwcmludCB0aGlzIHRleHQgYW5kIGV4aXQKLS0tdGltZW91dCBUSU1FT1VUCi0gICAgICAgICAgICAgICAgLS0gZHVtcCB0aGUgdHJhY2ViYWNrIGFuZCBleGl0IGlmIGEgdGVzdCB0YWtlcyBtb3JlCi0gICAgICAgICAgICAgICAgICAgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgaXMgbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAgICBvciBlcXVhbHMgdG8gemVybwotLS13YWl0ICAgICAgICAgIC0tIHdhaXQgZm9yIHVzZXIgaW5wdXQsIGUuZy4sIGFsbG93IGEgZGVidWdnZXIgdG8gYmUgYXR0YWNoZWQKLQotVmVyYm9zaXR5Ci0KLS12Ly0tdmVyYm9zZSAgICAtLSBydW4gdGVzdHMgaW4gdmVyYm9zZSBtb2RlIHdpdGggb3V0cHV0IHRvIHN0ZG91dAotLXcvLS12ZXJib3NlMiAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlCi0tVy8tLXZlcmJvc2UzICAgLS0gZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlCi0tZC8tLWRlYnVnICAgICAgLS0gcHJpbnQgdHJhY2ViYWNrIGZvciBmYWlsZWQgdGVzdHMKLS1xLy0tcXVpZXQgICAgICAtLSBubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwKLS1vLy0tc2xvdyAgICAgICAtLSBwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cwotICAgLS1oZWFkZXIgICAgIC0tIHByaW50IGhlYWRlciB3aXRoIGludGVycHJldGVyIGluZm8KLQotU2VsZWN0aW5nIHRlc3RzCi0KLS1yLy0tcmFuZG9taXplICAtLSByYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIgKHNlZSBiZWxvdykKLSAgIC0tcmFuZHNlZWQgICAtLSBwYXNzIGEgcmFuZG9tIHNlZWQgdG8gcmVwcm9kdWNlIGEgcHJldmlvdXMgcmFuZG9tIHJ1bgotLWYvLS1mcm9tZmlsZSAgIC0tIHJlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlIChzZWUgYmVsb3cpCi0teC8tLWV4Y2x1ZGUgICAgLS0gYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSoKLS1zLy0tc2luZ2xlICAgICAtLSBzaW5nbGUgc3RlcCB0aHJvdWdoIGEgc2V0IG9mIHRlc3RzIChzZWUgYmVsb3cpCi0tbS8tLW1hdGNoIFBBVCAgLS0gbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQKLS1HLy0tZmFpbGZhc3QgICAtLSBmYWlsIGFzIHNvb24gYXMgYSB0ZXN0IGZhaWxzIChvbmx5IHdpdGggLXYgb3IgLVcpCi0tdS8tLXVzZSBSRVMxLFJFUzIsLi4uCi0gICAgICAgICAgICAgICAgLS0gc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyB0byBydW4KLS1NLy0tbWVtbGltaXQgTElNSVQKLSAgICAgICAgICAgICAgICAtLSBydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzCi0gICAtLXRlc3RkaXIgRElSCi0gICAgICAgICAgICAgICAgLS0gZXhlY3V0ZSB0ZXN0IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IChpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgb2YgdGhlIFB5dGhvbiBzdGRsaWIgdGVzdCBzdWl0ZSkKLQotU3BlY2lhbCBydW5zCi0KLS1sLy0tZmluZGxlYWtzICAtLSBpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnkKLS1MLy0tcnVubGVha3MgICAtLSBydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdAotLVIvLS1odW50cmxlYWtzIFJVTkNPVU5UUwotICAgICAgICAgICAgICAgIC0tIHNlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgdi4gc2xvdykKLS1qLy0tbXVsdGlwcm9jZXNzIFBST0NFU1NFUwotICAgICAgICAgICAgICAgIC0tIHJ1biBQUk9DRVNTRVMgcHJvY2Vzc2VzIGF0IG9uY2UKLS1ULy0tY292ZXJhZ2UgICAtLSB0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB1c2luZyB0aGUgdHJhY2UgbW9kdWxlCi0tRC8tLWNvdmVyZGlyIERJUkVDVE9SWQotICAgICAgICAgICAgICAgIC0tIERpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0Ci0tTi8tLW5vY292ZXJkaXIgLS0gUHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzCi0tdC8tLXRocmVzaG9sZCBUSFJFU0hPTEQKLSAgICAgICAgICAgICAgICAtLSBjYWxsIGdjLnNldF90aHJlc2hvbGQoVEhSRVNIT0xEKQotLW4vLS1ub3dpbmRvd3MgIC0tIHN1cHByZXNzIGVycm9yIG1lc3NhZ2UgYm94ZXMgb24gV2luZG93cwotLUYvLS1mb3JldmVyICAgIC0tIHJ1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gZXJyb3IgaGFwcGVucwotCi0KLUFkZGl0aW9uYWwgT3B0aW9uIERldGFpbHM6CitFUElMT0cgPSAiIiJcCitBZGRpdGlvbmFsIG9wdGlvbiBkZXRhaWxzOgogCiAtciByYW5kb21pemVzIHRlc3QgZXhlY3V0aW9uIG9yZGVyLiBZb3UgY2FuIHVzZSAtLXJhbmRzZWVkPWludCB0byBwcm92aWRlIGEKIGludCBzZWVkIHZhbHVlIGZvciB0aGUgcmFuZG9taXplcjsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlcHJvZHVjaW5nIHRyb3VibGVzb21lCkBAIC0xNjgsMTEgKzEyMiwxMiBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgogCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IGdldG9wdAogaW1wb3J0IGlvCiBpbXBvcnQganNvbgoraW1wb3J0IGxvY2FsZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCkBAIC0xOTQsNyArMTQ5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiB0cnk6Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCisgICAgaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcsIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQogCkBAIC0yNDYsMjAgKzIwMSwyNjIgQEAKIFJFU09VUkNFX05BTUVTID0gKCdhdWRpbycsICdjdXJzZXMnLCAnbGFyZ2VmaWxlJywgJ25ldHdvcmsnLAogICAgICAgICAgICAgICAgICAgJ2RlY2ltYWwnLCAnY3B1JywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnLCAnZ3VpJykKIAotVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCisjIFdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBpdCBpcyBiZXN0IHByYWN0aWNlCisjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBUaGlzIGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCisjIGZpbGVzIHVzaW5nIHRoZSAibWFrZSBkaXN0Y2xlYW4iIGNvbW1hbmQuCitpZiBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCk6CisgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQorZWxzZToKKyAgICBURU1QRElSID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCitURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAKLWRlZiB1c2FnZShtc2cpOgotICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgIHByaW50KCJVc2UgLS1oZWxwIGZvciB1c2FnZSIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICBzeXMuZXhpdCgyKQorY2xhc3MgX0FyZ1BhcnNlcihhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6CiAKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHN1cGVyKCkuZXJyb3IobWVzc2FnZSArICJcblBhc3MgLWggb3IgLS1oZWxwIGZvciBjb21wbGV0ZSBoZWxwLiIpCiAKLWRlZiBtYWluKHRlc3RzPU5vbmUsIHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKK2RlZiBfY3JlYXRlX3BhcnNlcigpOgorICAgICMgU2V0IHByb2cgdG8gcHJldmVudCB0aGUgdW5pbmZvcm1hdGl2ZSAiX19tYWluX18ucHkiIGZyb20gZGlzcGxheWluZyBpbgorICAgICMgZXJyb3IgbWVzc2FnZXMgd2hlbiB1c2luZyAicHl0aG9uIC1tIHRlc3QgLi4uIi4KKyAgICBwYXJzZXIgPSBfQXJnUGFyc2VyKHByb2c9J3JlZ3J0ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPVVTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249REVTQ1JJUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9RVBJTE9HLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyKQorCisgICAgIyBBcmd1bWVudHMgd2l0aCB0aGlzIGNsYXVzZSBhZGRlZCB0byBpdHMgaGVscCBhcmUgZGVzY3JpYmVkIGZ1cnRoZXIgaW4KKyAgICAjIHRoZSBlcGlsb2cncyAiQWRkaXRpb25hbCBvcHRpb24gZGV0YWlscyIgc2VjdGlvbi4KKyAgICBtb3JlX2RldGFpbHMgPSAnICBTZWUgdGhlIHNlY3Rpb24gYXQgYm90dG9tIGZvciBtb3JlIGRldGFpbHMuJworCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdHZW5lcmFsIG9wdGlvbnMnKQorICAgICMgV2UgYWRkIGhlbHAgZXhwbGljaXRseSB0byBjb250cm9sIHdoYXQgYXJndW1lbnQgZ3JvdXAgaXQgcmVuZGVycyB1bmRlci4KKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS10aW1lb3V0JywgbWV0YXZhcj0nVElNRU9VVCcsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vcmUgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMgbmVnYXRpdmUgb3IgZXF1YWxzIHRvIHplcm8nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS13YWl0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nd2FpdCBmb3IgdXNlciBpbnB1dCwgZS5nLiwgYWxsb3cgYSBkZWJ1Z2dlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJlIGF0dGFjaGVkJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc2xhdmVhcmdzJywgbWV0YXZhcj0nQVJHUycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUycsICctLXN0YXJ0JywgbWV0YXZhcj0nU1RBUlQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0aGUgbmFtZSBvZiB0aGUgdGVzdCBhdCB3aGljaCB0byBzdGFydC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1ZlcmJvc2l0eScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXcnLCAnLS12ZXJib3NlMicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1XJywgJy0tdmVyYm9zZTMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J25vIG91dHB1dCB1bmxlc3Mgb25lIG9yIG1vcmUgdGVzdHMgZmFpbCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbycsICctLXNsb3cnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdwcmludF9zbG93JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1oZWFkZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU2VsZWN0aW5nIHRlc3RzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmFuZG9taXplJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJhbmRzZWVkJywgbWV0YXZhcj0nU0VFRCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3JhbmRvbV9zZWVkJywgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Bhc3MgYSByYW5kb20gc2VlZCB0byByZXByb2R1Y2UgYSBwcmV2aW91cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhbmRvbSBydW4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mcm9tZmlsZScsIG1ldGF2YXI9J0ZJTEUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZS4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsICctLWV4Y2x1ZGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcycsICctLXNpbmdsZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NpbmdsZSBzdGVwIHRocm91Z2ggYSBzZXQgb2YgdGVzdHMuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tYXRjaCcsIG1ldGF2YXI9J1BBVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J21hdGNoX3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUcnLCAnLS1mYWlsZmFzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZhaWwgYXMgc29vbiBhcyBhIHRlc3QgZmFpbHMgKG9ubHkgd2l0aCAtdiBvciAtVyknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11c2UnLCBtZXRhdmFyPSdSRVMxLFJFUzIsLi4uJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCB0eXBlPXJlc291cmNlc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gcnVuLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTScsICctLW1lbWxpbWl0JywgbWV0YXZhcj0nTElNSVQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tdGVzdGRpcicsIG1ldGF2YXI9J0RJUicsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4ZWN1dGUgdGVzdCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhpbnN0ZWFkIG9mIHRoZSBQeXRob24gc3RkbGliIHRlc3Qgc3VpdGUpJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU3BlY2lhbCBydW5zJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tZmluZGxlYWtzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0naWYgR0MgaXMgYXZhaWxhYmxlIGRldGVjdCB0ZXN0cyB0aGF0IGxlYWsgbWVtb3J5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1MJywgJy0tcnVubGVha3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUicsICctLWh1bnRybGVha3MnLCBtZXRhdmFyPSdSVU5DT1VOVFMnLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJ5IHNsb3cpLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctaicsICctLW11bHRpcHJvY2VzcycsIG1ldGF2YXI9J1BST0NFU1NFUycsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9tcCcsIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gUFJPQ0VTU0VTIHByb2Nlc3NlcyBhdCBvbmNlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1UJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd0cmFjZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3R1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZHVsZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRCcsICctLWNvdmVyZGlyJywgbWV0YXZhcj0nRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1yZWxhdGl2ZV9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLU4nLCAnLS1ub2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PU5vbmUsIGRlc3Q9J2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy10JywgJy0tdGhyZXNob2xkJywgbWV0YXZhcj0nVEhSRVNIT0xEJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1uJywgJy0tbm93aW5kb3dzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBib3hlcyBvbiBXaW5kb3dzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1GJywgJy0tZm9yZXZlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBoYXBwZW5zJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2FyZ3MnLCBuYXJncz1hcmdwYXJzZS5SRU1BSU5ERVIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgcmV0dXJuIHBhcnNlcgorCitkZWYgcmVsYXRpdmVfZmlsZW5hbWUoc3RyaW5nKToKKyAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCisgICAgIyBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBlbmRzIHVwIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBzdHJpbmcpCisKK2RlZiBodW50cmxlYWtzKHN0cmluZyk6CisgICAgYXJncyA9IHN0cmluZy5zcGxpdCgnOicpCisgICAgaWYgbGVuKGFyZ3MpIG5vdCBpbiAoMiwgMyk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKAorICAgICAgICAgICAgJ25lZWRzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKKyAgICBud2FybXVwID0gaW50KGFyZ3NbMF0pIGlmIGFyZ3NbMF0gZWxzZSA1CisgICAgbnRyYWNrZWQgPSBpbnQoYXJnc1sxXSkgaWYgYXJnc1sxXSBlbHNlIDQKKyAgICBmbmFtZSA9IGFyZ3NbMl0gaWYgbGVuKGFyZ3MpID4gMiBhbmQgYXJnc1syXSBlbHNlICdyZWZsb2cudHh0JworICAgIHJldHVybiBud2FybXVwLCBudHJhY2tlZCwgZm5hbWUKKworZGVmIHJlc291cmNlc19saXN0KHN0cmluZyk6CisgICAgdSA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gc3RyaW5nLnNwbGl0KCcsJyldCisgICAgZm9yIHIgaW4gdToKKyAgICAgICAgaWYgciA9PSAnYWxsJyBvciByID09ICdub25lJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgciA9IHJbMTpdCisgICAgICAgIGlmIHIgbm90IGluIFJFU09VUkNFX05BTUVTOgorICAgICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ2ludmFsaWQgcmVzb3VyY2U6ICcgKyByKQorICAgIHJldHVybiB1CisKK2RlZiBfcGFyc2VfYXJncyhhcmdzLCAqKmt3YXJncyk6CisgICAgIyBEZWZhdWx0cworICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKICAgICAgICAgIGV4Y2x1ZGU9RmFsc2UsIHNpbmdsZT1GYWxzZSwgcmFuZG9taXplPUZhbHNlLCBmcm9tZmlsZT1Ob25lLAogICAgICAgICAgZmluZGxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsIHRyYWNlPUZhbHNlLCBjb3ZlcmRpcj0nY292ZXJhZ2UnLAogICAgICAgICAgcnVubGVha3M9RmFsc2UsIGh1bnRybGVha3M9RmFsc2UsIHZlcmJvc2UyPUZhbHNlLCBwcmludF9zbG93PUZhbHNlLAogICAgICAgICAgcmFuZG9tX3NlZWQ9Tm9uZSwgdXNlX21wPU5vbmUsIHZlcmJvc2UzPUZhbHNlLCBmb3JldmVyPUZhbHNlLAotICAgICAgICAgaGVhZGVyPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSk6CisgICAgICAgICBoZWFkZXI9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lKQorICAgIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihucywgayk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVyIGlzIGFuIGludmFsaWQga2V5d29yZCBhcmd1bWVudCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB0aGlzIGZ1bmN0aW9uJyAlIGspCisgICAgICAgIHNldGF0dHIobnMsIGssIHYpCisgICAgaWYgbnMudXNlX3Jlc291cmNlcyBpcyBOb25lOgorICAgICAgICBucy51c2VfcmVzb3VyY2VzID0gW10KKworICAgIHBhcnNlciA9IF9jcmVhdGVfcGFyc2VyKCkKKyAgICBwYXJzZXIucGFyc2VfYXJncyhhcmdzPWFyZ3MsIG5hbWVzcGFjZT1ucykKKworICAgIGlmIG5zLnNpbmdsZSBhbmQgbnMuZnJvbWZpbGU6CisgICAgICAgIHBhcnNlci5lcnJvcigiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy50cmFjZToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItVCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLmZpbmRsZWFrczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLm1lbWxpbWl0OgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLmZhaWxmYXN0IGFuZCBub3QgKG5zLnZlcmJvc2Ugb3IgbnMudmVyYm9zZTMpOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1HLy0tZmFpbGZhc3QgbmVlZHMgZWl0aGVyIC12IG9yIC1XIikKKworICAgIGlmIG5zLnF1aWV0OgorICAgICAgICBucy52ZXJib3NlID0gMAorICAgIGlmIG5zLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKKyAgICAgICAgICAgIGlmIG5zLnRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICBucy50aW1lb3V0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IFRoZSB0aW1lb3V0IG9wdGlvbiByZXF1aXJlcyAiCisgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKKyAgICAgICAgICAgIG5zLnRpbWVvdXQgPSBOb25lCisgICAgaWYgbnMudXNlX21wIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBucy51c2VfbXAgPD0gMDoKKyAgICAgICAgICAgICMgVXNlIGFsbCBjb3JlcyArIGV4dHJhcyBmb3IgdGVzdHMgdGhhdCBsaWtlIHRvIHNsZWVwCisgICAgICAgICAgICBucy51c2VfbXAgPSAyICsgKG9zLmNwdV9jb3VudCgpIG9yIDEpCisgICAgICAgIGlmIG5zLnVzZV9tcCA9PSAxOgorICAgICAgICAgICAgbnMudXNlX21wID0gTm9uZQorICAgIGlmIG5zLnVzZToKKyAgICAgICAgZm9yIGEgaW4gbnMudXNlOgorICAgICAgICAgICAgZm9yIHIgaW4gYToKKyAgICAgICAgICAgICAgICBpZiByID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzWzpdID0gUkVTT1VSQ0VfTkFNRVMKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiByID09ICdub25lJzoKKyAgICAgICAgICAgICAgICAgICAgZGVsIG5zLnVzZV9yZXNvdXJjZXNbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZW1vdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHIgPSByWzE6XQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgciBpbiBucy51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlcy5yZW1vdmUocikKKyAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIG5zLnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCisgICAgaWYgbnMucmFuZG9tX3NlZWQgaXMgbm90IE5vbmU6CisgICAgICAgIG5zLnJhbmRvbWl6ZSA9IFRydWUKKworICAgIHJldHVybiBucworCisKK2RlZiBydW5fdGVzdF9pbl9zdWJwcm9jZXNzKHRlc3RuYW1lLCBucyk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiB0ZXN0IGluIGEgc3VicHJvY2VzcyB3aXRoIC0tc2xhdmVhcmdzLgorCisgICAgbnMgaXMgdGhlIG9wdGlvbiBOYW1lc3BhY2UgcGFyc2VkIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50cy4gcmVncnRlc3QKKyAgICBpcyBpbnZva2VkIGluIGEgc3VicHJvY2VzcyB3aXRoIHRoZSAtLXNsYXZlYXJncyBhcmd1bWVudDsgd2hlbiB0aGUKKyAgICBzdWJwcm9jZXNzIGV4aXRzLCBpdHMgcmV0dXJuIGNvZGUsIHN0ZG91dCBhbmQgc3RkZXJyIGFyZSByZXR1cm5lZCBhcyBhCisgICAgMy10dXBsZS4KKyAgICAiIiIKKyAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCisgICAgYmFzZV9jbWQgPSAoW3N5cy5leGVjdXRhYmxlXSArIHN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkgKworICAgICAgICAgICAgICAgIFsnLVgnLCAnZmF1bHRoYW5kbGVyJywgJy1tJywgJ3Rlc3QucmVncnRlc3QnXSkKKworICAgIHNsYXZlYXJncyA9ICgKKyAgICAgICAgICAgICh0ZXN0bmFtZSwgbnMudmVyYm9zZSwgbnMucXVpZXQpLAorICAgICAgICAgICAgZGljdChodW50cmxlYWtzPW5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXM9bnMudXNlX3Jlc291cmNlcywKKyAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCisgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKSkKKyAgICAjIFJ1bm5pbmcgdGhlIGNoaWxkIGZyb20gdGhlIHNhbWUgd29ya2luZyBkaXJlY3RvcnkgYXMgcmVncnRlc3QncyBvcmlnaW5hbAorICAgICMgaW52b2NhdGlvbiBlbnN1cmVzIHRoYXQgVEVNUERJUiBmb3IgdGhlIGNoaWxkIGlzIHRoZSBzYW1lIHdoZW4KKyAgICAjIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSBpcyB0cnVlLiBTZWUgaXNzdWUgMTUzMDAuCisgICAgcG9wZW4gPSBQb3BlbihiYXNlX2NtZCArIFsnLS1zbGF2ZWFyZ3MnLCBqc29uLmR1bXBzKHNsYXZlYXJncyldLAorICAgICAgICAgICAgICAgICAgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFLAorICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCisgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JyksCisgICAgICAgICAgICAgICAgICBjd2Q9c3VwcG9ydC5TQVZFRENXRCkKKyAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICByZXRjb2RlID0gcG9wZW4ud2FpdCgpCisgICAgcmV0dXJuIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyCisKKworZGVmIG1haW4odGVzdHM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICIiIkV4ZWN1dGUgYSB0ZXN0IHN1aXRlLgogCiAgICAgVGhpcyBhbHNvIHBhcnNlcyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgbW9kaWZpZXMgaXRzIGJlaGF2aW9yCkBAIC0yODIsNyArNDc5LDYgQEAKICAgICBkaXJlY3RseSB0byBzZXQgdGhlIHZhbHVlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHNldCBieSBmbGFncwogICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgIiIiCi0KICAgICAjIERpc3BsYXkgdGhlIFB5dGhvbiB0cmFjZWJhY2sgb24gZmF0YWwgZXJyb3JzIChlLmcuIHNlZ2ZhdWx0KQogICAgIGZhdWx0aGFuZGxlci5lbmFibGUoYWxsX3RocmVhZHM9VHJ1ZSkKIApAQCAtMjk4LDE4NyArNDk0LDUxIEBACiAgICAgcmVwbGFjZV9zdGRvdXQoKQogCiAgICAgc3VwcG9ydC5yZWNvcmRfb3JpZ2luYWxfc3Rkb3V0KHN5cy5zdGRvdXQpCi0gICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdodnF4c29TOnJmOmx1OnQ6VEQ6TkxSOkZkd1dNOm5qOkdtOicsCi0gICAgICAgICAgICBbJ2hlbHAnLCAndmVyYm9zZScsICd2ZXJib3NlMicsICd2ZXJib3NlMycsICdxdWlldCcsCi0gICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9taXplJywgJ2Zyb21maWxlPScsICdmaW5kbGVha3MnLAotICAgICAgICAgICAgICd1c2U9JywgJ3RocmVzaG9sZD0nLCAnY292ZXJkaXI9JywgJ25vY292ZXJkaXInLAotICAgICAgICAgICAgICdydW5sZWFrcycsICdodW50cmxlYWtzPScsICdtZW1saW1pdD0nLCAncmFuZHNlZWQ9JywKLSAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzPScsICdjb3ZlcmFnZScsICdzbGF2ZWFyZ3M9JywgJ2ZvcmV2ZXInLCAnZGVidWcnLAotICAgICAgICAgICAgICdzdGFydD0nLCAnbm93aW5kb3dzJywgJ2hlYWRlcicsICd0ZXN0ZGlyPScsICd0aW1lb3V0PScsICd3YWl0JywKLSAgICAgICAgICAgICAnZmFpbGZhc3QnLCAnbWF0Y2g9J10pCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHVzYWdlKG1zZykKIAotICAgICMgRGVmYXVsdHMKLSAgICBpZiByYW5kb21fc2VlZCBpcyBOb25lOgotICAgICAgICByYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCi0gICAgaWYgdXNlX3Jlc291cmNlcyBpcyBOb25lOgotICAgICAgICB1c2VfcmVzb3VyY2VzID0gW10KLSAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgc3RhcnQgPSBOb25lCi0gICAgdGltZW91dCA9IE5vbmUKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6Ci0gICAgICAgICAgICBwcmludChfX2RvY19fKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgbyBpbiAoJy12JywgJy0tdmVyYm9zZScpOgotICAgICAgICAgICAgdmVyYm9zZSArPSAxCi0gICAgICAgIGVsaWYgbyBpbiAoJy13JywgJy0tdmVyYm9zZTInKToKLSAgICAgICAgICAgIHZlcmJvc2UyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctZCcsICctLWRlYnVnJyk6Ci0gICAgICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLVcnLCAnLS12ZXJib3NlMycpOgotICAgICAgICAgICAgdmVyYm9zZTMgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1HJywgJy0tZmFpbGZhc3QnKToKLSAgICAgICAgICAgIGZhaWxmYXN0ID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctcScsICctLXF1aWV0Jyk6Ci0gICAgICAgICAgICBxdWlldCA9IFRydWU7Ci0gICAgICAgICAgICB2ZXJib3NlID0gMAotICAgICAgICBlbGlmIG8gaW4gKCcteCcsICctLWV4Y2x1ZGUnKToKLSAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1TJywgJy0tc3RhcnQnKToKLSAgICAgICAgICAgIHN0YXJ0ID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctcycsICctLXNpbmdsZScpOgotICAgICAgICAgICAgc2luZ2xlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctbycsICctLXNsb3cnKToKLSAgICAgICAgICAgIHByaW50X3Nsb3cgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1yJywgJy0tcmFuZG9taXplJyk6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyA9PSAnLS1yYW5kc2VlZCc6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgICAgICByYW5kb21fc2VlZCA9IGludChhKQotICAgICAgICBlbGlmIG8gaW4gKCctZicsICctLWZyb21maWxlJyk6Ci0gICAgICAgICAgICBmcm9tZmlsZSA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLW0nLCAnLS1tYXRjaCcpOgotICAgICAgICAgICAgbWF0Y2hfdGVzdHMgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1sJywgJy0tZmluZGxlYWtzJyk6Ci0gICAgICAgICAgICBmaW5kbGVha3MgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1MJywgJy0tcnVubGVha3MnKToKLSAgICAgICAgICAgIHJ1bmxlYWtzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctdCcsICctLXRocmVzaG9sZCcpOgotICAgICAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgICAgICBnYy5zZXRfdGhyZXNob2xkKGludChhKSkKLSAgICAgICAgZWxpZiBvIGluICgnLVQnLCAnLS1jb3ZlcmFnZScpOgotICAgICAgICAgICAgdHJhY2UgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1EJywgJy0tY292ZXJkaXInKToKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgbmVlZCAgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZ29lcyB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgY292ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgYSkKLSAgICAgICAgZWxpZiBvIGluICgnLU4nLCAnLS1ub2NvdmVyZGlyJyk6Ci0gICAgICAgICAgICBjb3ZlcmRpciA9IE5vbmUKLSAgICAgICAgZWxpZiBvIGluICgnLVInLCAnLS1odW50cmxlYWtzJyk6Ci0gICAgICAgICAgICBodW50cmxlYWtzID0gYS5zcGxpdCgnOicpCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgbm90IGluICgyLCAzKToKLSAgICAgICAgICAgICAgICBwcmludChhLCBodW50cmxlYWtzKQotICAgICAgICAgICAgICAgIHVzYWdlKCctUiB0YWtlcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1swXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gNQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gaW50KGh1bnRybGVha3NbMF0pCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1sxXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gNAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gaW50KGh1bnRybGVha3NbMV0pCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgPT0gMiBvciBub3QgaHVudHJsZWFrc1syXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzI6XSA9IFsicmVmbG9nLnR4dCJdCi0gICAgICAgICAgICAjIEF2b2lkIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gdmFyaW91cyBjYWNoZXMKLSAgICAgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKLSAgICAgICAgICAgIHdhcm1fY2FjaGVzKCkKLSAgICAgICAgZWxpZiBvIGluICgnLU0nLCAnLS1tZW1saW1pdCcpOgotICAgICAgICAgICAgc3VwcG9ydC5zZXRfbWVtbGltaXQoYSkKLSAgICAgICAgZWxpZiBvIGluICgnLXUnLCAnLS11c2UnKToKLSAgICAgICAgICAgIHUgPSBbeC5sb3dlcigpIGZvciB4IGluIGEuc3BsaXQoJywnKV0KLSAgICAgICAgICAgIGZvciByIGluIHU6Ci0gICAgICAgICAgICAgICAgaWYgciA9PSAnYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlc1s6XSA9IFJFU09VUkNFX05BTUVTCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgciA9PSAnbm9uZSc6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCB1c2VfcmVzb3VyY2VzWzpdCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcmVtb3ZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBpZiByWzBdID09ICctJzoKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICByID0gclsxOl0KLSAgICAgICAgICAgICAgICBpZiByIG5vdCBpbiBSRVNPVVJDRV9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgdXNhZ2UoJ0ludmFsaWQgLXUvLS11c2Ugb3B0aW9uOiAnICsgYSkKLSAgICAgICAgICAgICAgICBpZiByZW1vdmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHIgaW4gdXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMucmVtb3ZlKHIpCi0gICAgICAgICAgICAgICAgZWxpZiByIG5vdCBpbiB1c2VfcmVzb3VyY2VzOgotICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmFwcGVuZChyKQotICAgICAgICBlbGlmIG8gaW4gKCctbicsICctLW5vd2luZG93cycpOgotICAgICAgICAgICAgaW1wb3J0IG1zdmNydAotICAgICAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0FMSUdOTUVOVEZBVUxURVhDRVBUfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PR1BGQVVMVEVSUk9SQk9YfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICMgcmVsZWFzZSBidWlsZAotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCBtc3ZjcnQuQ1JUREJHX01PREVfRklMRSkKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUobSwgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKLSAgICAgICAgZWxpZiBvIGluICgnLUYnLCAnLS1mb3JldmVyJyk6Ci0gICAgICAgICAgICBmb3JldmVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctaicsICctLW11bHRpcHJvY2VzcycpOgotICAgICAgICAgICAgdXNlX21wID0gaW50KGEpCi0gICAgICAgICAgICBpZiB1c2VfbXAgPD0gMDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgIyBVc2UgYWxsIGNvcmVzICsgZXh0cmFzIGZvciB0ZXN0cyB0aGF0IGxpa2UgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICAgdXNlX21wID0gMiArIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICB1c2VfbXAgPSAzCi0gICAgICAgICAgICBpZiB1c2VfbXAgPT0gMToKLSAgICAgICAgICAgICAgICB1c2VfbXAgPSBOb25lCi0gICAgICAgIGVsaWYgbyA9PSAnLS1oZWFkZXInOgotICAgICAgICAgICAgaGVhZGVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gPT0gJy0tc2xhdmVhcmdzJzoKLSAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IGpzb24ubG9hZHMoYSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKLSAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBwcmludCgpICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKLSAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKLSAgICAgICAgICAgIHN5cy5leGl0KDApCi0gICAgICAgIGVsaWYgbyA9PSAnLS10ZXN0ZGlyJzoKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZW5kcyB1cCB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgdGVzdGRpciA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBhKQotICAgICAgICBlbGlmIG8gPT0gJy0tdGltZW91dCc6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyk6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGZsb2F0KGEpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgotICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogVGhlIHRpbWVvdXQgb3B0aW9uIHJlcXVpcmVzICIKLSAgICAgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICBlbGlmIG8gPT0gJy0td2FpdCc6Ci0gICAgICAgICAgICBpbnB1dCgiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpCisgICAgbnMgPSBfcGFyc2VfYXJncyhzeXMuYXJndlsxOl0sICoqa3dhcmdzKQorCisgICAgaWYgbnMuaHVudHJsZWFrczoKKyAgICAgICAgIyBBdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIHZhcmlvdXMgY2FjaGVzCisgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKKyAgICAgICAgd2FybV9jYWNoZXMoKQorICAgIGlmIG5zLm1lbWxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICBzdXBwb3J0LnNldF9tZW1saW1pdChucy5tZW1saW1pdCkKKyAgICBpZiBucy50aHJlc2hvbGQgaXMgbm90IE5vbmU6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBnYy5zZXRfdGhyZXNob2xkKG5zLnRocmVzaG9sZCkKKyAgICBpZiBucy5ub3dpbmRvd3M6CisgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PQUxJR05NRU5URkFVTFRFWENFUFR8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0dQRkFVTFRFUlJPUkJPWHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyByZWxlYXNlIGJ1aWxkCisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgoIk5vIGhhbmRsZXIgZm9yIG9wdGlvbiB7fS4gIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyAiCi0gICAgICAgICAgICAgICAgICAgImF0IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuIikuZm9ybWF0KG8pLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgIGlmIHNpbmdsZSBhbmQgZnJvbWZpbGU6Ci0gICAgICAgIHVzYWdlKCItcyBhbmQgLWYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHRyYWNlOgotICAgICAgICB1c2FnZSgiLVQgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCBmaW5kbGVha3M6Ci0gICAgICAgIHVzYWdlKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHN1cHBvcnQubWF4X21lbXVzZToKLSAgICAgICAgdXNhZ2UoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIGZhaWxmYXN0IGFuZCBub3QgKHZlcmJvc2Ugb3IgdmVyYm9zZTMpOgotICAgICAgICB1c2FnZSgiLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVciKQorICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKG0sIG1zdmNydC5DUlREQkdfTU9ERV9GSUxFKQorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCisgICAgaWYgbnMud2FpdDoKKyAgICAgICAgaW5wdXQoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKQorCisgICAgaWYgbnMuc2xhdmVhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKG5zLnNsYXZlYXJncykKKyAgICAgICAgaWYga3dhcmdzLmdldCgnaHVudHJsZWFrcycpOgorICAgICAgICAgICAgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgcHJpbnQoKSAgICMgRm9yY2UgYSBuZXdsaW5lIChqdXN0IGluIGNhc2UpCisgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKKyAgICAgICAgc3lzLmV4aXQoMCkKIAogICAgIGdvb2QgPSBbXQogICAgIGJhZCA9IFtdCkBAIC00ODcsMTIgKzU0NywxMiBAQAogICAgIGVudmlyb25tZW50X2NoYW5nZWQgPSBbXQogICAgIGludGVycnVwdGVkID0gRmFsc2UKIAotICAgIGlmIGZpbmRsZWFrczoKKyAgICBpZiBucy5maW5kbGVha3M6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwcmludCgnTm8gR0MgYXZhaWxhYmxlLCBkaXNhYmxpbmcgZmluZGxlYWtzLicpCi0gICAgICAgICAgICBmaW5kbGVha3MgPSBGYWxzZQorICAgICAgICAgICAgbnMuZmluZGxlYWtzID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IHRvIHJlcG9ydCBnYXJiYWdlIHRoYXQgaXMgbm90CiAgICAgICAgICAgICAjIGZyZWVhYmxlIGJ5IHJlZmVyZW5jZSBjb3VudGluZyBhbG9uZS4gIEJ5IGRlZmF1bHQgb25seQpAQCAtNTAwLDgyICs1NjAsODcgQEAKICAgICAgICAgICAgICNnYy5zZXRfZGVidWcoZ2MuREVCVUdfU0FWRUFMTCkKICAgICAgICAgICAgIGZvdW5kX2dhcmJhZ2UgPSBbXQogCi0gICAgaWYgc2luZ2xlOgorICAgIGlmIG5zLmh1bnRybGVha3M6CisgICAgICAgIHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXAgPSBGYWxzZQorCisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAncHluZXh0dGVzdCcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgaWYgZnJvbWZpbGU6CisgICAgaWYgbnMuZnJvbWZpbGU6CiAgICAgICAgIHRlc3RzID0gW10KLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmcm9tZmlsZSkpCi0gICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCi0gICAgICAgIGZvciBsaW5lIGluIGZwOgotICAgICAgICAgICAgbGluZSA9IGNvdW50X3BhdC5zdWIoJycsIGxpbmUpCi0gICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQotICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgotICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgbnMuZnJvbWZpbGUpKSBhcyBmcDoKKyAgICAgICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICBsaW5lID0gY291bnRfcGF0LnN1YignJywgbGluZSkKKyAgICAgICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQorICAgICAgICAgICAgICAgIGlmIGd1dHMgYW5kIG5vdCBndXRzWzBdLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKGd1dHMpCiAKICAgICAjIFN0cmlwIC5weSBleHRlbnNpb25zLgotICAgIHJlbW92ZXB5KGFyZ3MpCisgICAgcmVtb3ZlcHkobnMuYXJncykKICAgICByZW1vdmVweSh0ZXN0cykKIAogICAgIHN0ZHRlc3RzID0gU1REVEVTVFNbOl0KICAgICBub3R0ZXN0cyA9IE5PVFRFU1RTLmNvcHkoKQotICAgIGlmIGV4Y2x1ZGU6Ci0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICBpZiBucy5leGNsdWRlOgorICAgICAgICBmb3IgYXJnIGluIG5zLmFyZ3M6CiAgICAgICAgICAgICBpZiBhcmcgaW4gc3RkdGVzdHM6CiAgICAgICAgICAgICAgICAgc3RkdGVzdHMucmVtb3ZlKGFyZykKICAgICAgICAgICAgIG5vdHRlc3RzLmFkZChhcmcpCi0gICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBucy5hcmdzID0gW10KIAogICAgICMgRm9yIGEgcGFydGlhbCBydW4sIHdlIGRvIG5vdCBuZWVkIHRvIGNsdXR0ZXIgdGhlIG91dHB1dC4KLSAgICBpZiB2ZXJib3NlIG9yIGhlYWRlciBvciBub3QgKHF1aWV0IG9yIHNpbmdsZSBvciB0ZXN0cyBvciBhcmdzKToKKyAgICBpZiBucy52ZXJib3NlIG9yIG5zLmhlYWRlciBvciBub3QgKG5zLnF1aWV0IG9yIG5zLnNpbmdsZSBvciB0ZXN0cyBvciBucy5hcmdzKToKICAgICAgICAgIyBQcmludCBiYXNpYyBwbGF0Zm9ybSBpbmZvcm1hdGlvbgogICAgICAgICBwcmludCgiPT0iLCBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwgKnN5cy52ZXJzaW9uLnNwbGl0KCkpCiAgICAgICAgIHByaW50KCI9PSAgIiwgcGxhdGZvcm0ucGxhdGZvcm0oYWxpYXNlZD1UcnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAiJXMtZW5kaWFuIiAlIHN5cy5ieXRlb3JkZXIpCisgICAgICAgIHByaW50KCI9PSAgIiwgImhhc2ggYWxnb3JpdGhtOiIsIHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLAorICAgICAgICAgICAgICAiNjRiaXQiIGlmIHN5cy5tYXhzaXplID4gMioqMzIgZWxzZSAiMzJiaXQiKQogICAgICAgICBwcmludCgiPT0gICIsIG9zLmdldGN3ZCgpKQogICAgICAgICBwcmludCgiVGVzdGluZyB3aXRoIGZsYWdzOiIsIHN5cy5mbGFncykKIAogICAgICMgaWYgdGVzdGRpciBpcyBzZXQsIHRoZW4gd2UgYXJlIG5vdCBydW5uaW5nIHRoZSBweXRob24gdGVzdHMgc3VpdGUsIHNvCiAgICAgIyBkb24ndCBhZGQgZGVmYXVsdCB0ZXN0cyB0byBiZSBleGVjdXRlZCBvciBza2lwcGVkIChwYXNzIGVtcHR5IHZhbHVlcykKLSAgICBpZiB0ZXN0ZGlyOgotICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBsaXN0KCksIHNldCgpKQorICAgIGlmIG5zLnRlc3RkaXI6CisgICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKG5zLnRlc3RkaXIsIGxpc3QoKSwgc2V0KCkpCiAgICAgZWxzZToKLSAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQorICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyhucy50ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCiAKLSAgICBzZWxlY3RlZCA9IHRlc3RzIG9yIGFyZ3Mgb3IgYWxsdGVzdHMKLSAgICBpZiBzaW5nbGU6CisgICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBucy5hcmdzIG9yIGFsbHRlc3RzCisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkWzoxXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gYWxsdGVzdHNbYWxsdGVzdHMuaW5kZXgoc2VsZWN0ZWRbMF0pKzFdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IE5vbmUKICAgICAjIFJlbW92ZSBhbGwgdGhlIHNlbGVjdGVkIHRlc3RzIHRoYXQgcHJlY2VkZSBzdGFydCBpZiBpdCdzIHNldC4KLSAgICBpZiBzdGFydDoKKyAgICBpZiBucy5zdGFydDoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVsIHNlbGVjdGVkWzpzZWxlY3RlZC5pbmRleChzdGFydCldCisgICAgICAgICAgICBkZWwgc2VsZWN0ZWRbOnNlbGVjdGVkLmluZGV4KG5zLnN0YXJ0KV0KICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBzdGFydGluZyB0ZXN0ICglcyksIHVzaW5nIGFsbCB0ZXN0cyIgJSBzdGFydCkKLSAgICBpZiByYW5kb21pemU6Ci0gICAgICAgIHJhbmRvbS5zZWVkKHJhbmRvbV9zZWVkKQotICAgICAgICBwcmludCgiVXNpbmcgcmFuZG9tIHNlZWQiLCByYW5kb21fc2VlZCkKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIHN0YXJ0aW5nIHRlc3QgKCVzKSwgdXNpbmcgYWxsIHRlc3RzIiAlIG5zLnN0YXJ0KQorICAgIGlmIG5zLnJhbmRvbWl6ZToKKyAgICAgICAgaWYgbnMucmFuZG9tX3NlZWQgaXMgTm9uZToKKyAgICAgICAgICAgIG5zLnJhbmRvbV9zZWVkID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwMDAwMCkKKyAgICAgICAgcmFuZG9tLnNlZWQobnMucmFuZG9tX3NlZWQpCisgICAgICAgIHByaW50KCJVc2luZyByYW5kb20gc2VlZCIsIG5zLnJhbmRvbV9zZWVkKQogICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxlY3RlZCkKLSAgICBpZiB0cmFjZToKKyAgICBpZiBucy50cmFjZToKICAgICAgICAgaW1wb3J0IHRyYWNlLCB0ZW1wZmlsZQogICAgICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMuYmFzZV9wcmVmaXgsIHN5cy5iYXNlX2V4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT1GYWxzZSwgY291bnQ9VHJ1ZSkKIAogICAgIHRlc3RfdGltZXMgPSBbXQotICAgIHN1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICAgICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAotICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IHVzZV9yZXNvdXJjZXMKKyAgICBzdXBwb3J0LnZlcmJvc2UgPSBucy52ZXJib3NlICAgICAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKKyAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBucy51c2VfcmVzb3VyY2VzCiAgICAgc2F2ZV9tb2R1bGVzID0gc3lzLm1vZHVsZXMua2V5cygpCiAKICAgICBkZWYgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KToKQEAgLTU5Myw3ICs2NTgsNyBAQAogICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKICAgICAgICAgICAgIHJlc291cmNlX2RlbmllZHMuYXBwZW5kKHRlc3QpCiAKLSAgICBpZiBmb3JldmVyOgorICAgIGlmIG5zLmZvcmV2ZXI6CiAgICAgICAgIGRlZiB0ZXN0X2ZvcmV2ZXIodGVzdHM9bGlzdChzZWxlY3RlZCkpOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKQEAgLTYwOCwxOSArNjczLDE2IEBACiAgICAgICAgIHRlc3RfY291bnQgPSAnL3t9Jy5mb3JtYXQobGVuKHNlbGVjdGVkKSkKICAgICAgICAgdGVzdF9jb3VudF93aWR0aCA9IGxlbih0ZXN0X2NvdW50KSAtIDEKIAotICAgIGlmIHVzZV9tcDoKKyAgICBpZiBucy51c2VfbXA6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoIk11bHRpcHJvY2VzcyBvcHRpb24gcmVxdWlyZXMgdGhyZWFkIHN1cHBvcnQiKQogICAgICAgICAgICAgc3lzLmV4aXQoMikKICAgICAgICAgZnJvbSBxdWV1ZSBpbXBvcnQgUXVldWUKLSAgICAgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQotICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnNcXSQiKQorICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnMsIFxkKyBibG9ja3NcXSQiKQogICAgICAgICBvdXRwdXQgPSBRdWV1ZSgpCiAgICAgICAgIHBlbmRpbmcgPSBNdWx0aXByb2Nlc3NUZXN0cyh0ZXN0cykKLSAgICAgICAgb3B0X2FyZ3MgPSBzdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgIGJhc2VfY21kID0gW3N5cy5leGVjdXRhYmxlXSArIG9wdF9hcmdzICsgWyctbScsICd0ZXN0LnJlZ3J0ZXN0J10KICAgICAgICAgZGVmIHdvcmsoKToKICAgICAgICAgICAgICMgQSB3b3JrZXIgdGhyZWFkLgogICAgICAgICAgICAgdHJ5OgpAQCAtNjMwLDI0ICs2OTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgIGFyZ3NfdHVwbGUgPSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAodGVzdCwgdmVyYm9zZSwgcXVpZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgZGljdChodW50cmxlYWtzPWh1bnRybGVha3MsIHVzZV9yZXNvdXJjZXM9dXNlX3Jlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9ZGVidWcsIG91dHB1dF9vbl9mYWlsdXJlPXZlcmJvc2UzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGZhaWxmYXN0PWZhaWxmYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1tYXRjaF90ZXN0cykKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAjIC1FIGlzIG5lZWRlZCBieSBzb21lIHRlc3RzLCBlLmcuIHRlc3RfaW1wb3J0Ci0gICAgICAgICAgICAgICAgICAgICMgUnVubmluZyB0aGUgY2hpbGQgZnJvbSB0aGUgc2FtZSB3b3JraW5nIGRpcmVjdG9yeSBlbnN1cmVzCi0gICAgICAgICAgICAgICAgICAgICMgdGhhdCBURU1QRElSIGZvciB0aGUgY2hpbGQgaXMgdGhlIHNhbWUgd2hlbgotICAgICAgICAgICAgICAgICAgICAjIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSBpcyB0cnVlLiBTZWUgaXNzdWUgMTUzMDAuCi0gICAgICAgICAgICAgICAgICAgIHBvcGVuID0gUG9wZW4oYmFzZV9jbWQgKyBbJy0tc2xhdmVhcmdzJywganNvbi5kdW1wcyhhcmdzX3R1cGxlKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz0ob3MubmFtZSAhPSAnbnQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXN1cHBvcnQuU0FWRURDV0QpCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgICAgICAgICByZXRjb2RlID0gcG9wZW4ud2FpdCgpCisgICAgICAgICAgICAgICAgICAgIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyID0gcnVuX3Rlc3RfaW5fc3VicHJvY2Vzcyh0ZXN0LCBucykKICAgICAgICAgICAgICAgICAgICAgIyBTdHJpcCBsYXN0IHJlZmNvdW50IG91dHB1dCBsaW5lIGlmIGl0IGV4aXN0cywgc2luY2UgaXQKICAgICAgICAgICAgICAgICAgICAgIyBjb21lcyBmcm9tIHRoZSBzaHV0ZG93biBvZiB0aGUgaW50ZXJwcmV0ZXIgaW4gdGhlIHN1YmNvbW1hbmQuCiAgICAgICAgICAgICAgICAgICAgIHN0ZGVyciA9IGRlYnVnX291dHB1dF9wYXQuc3ViKCIiLCBzdGRlcnIpCkBAIC02NjQsMTkgKzcwOSwxOSBAQAogICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgd29ya2VycyA9IFtUaHJlYWQodGFyZ2V0PXdvcmspIGZvciBpIGluIHJhbmdlKHVzZV9tcCldCisgICAgICAgIHdvcmtlcnMgPSBbVGhyZWFkKHRhcmdldD13b3JrKSBmb3IgaSBpbiByYW5nZShucy51c2VfbXApXQogICAgICAgICBmb3Igd29ya2VyIGluIHdvcmtlcnM6CiAgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQogICAgICAgICBmaW5pc2hlZCA9IDAKICAgICAgICAgdGVzdF9pbmRleCA9IDEKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgZmluaXNoZWQgPCB1c2VfbXA6CisgICAgICAgICAgICB3aGlsZSBmaW5pc2hlZCA8IG5zLnVzZV9tcDoKICAgICAgICAgICAgICAgICB0ZXN0LCBzdGRvdXQsIHN0ZGVyciwgcmVzdWx0ID0gb3V0cHV0LmdldCgpCiAgICAgICAgICAgICAgICAgaWYgdGVzdCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCArPSAxCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQotICAgICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICBpZiBub3QgbnMucXVpZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICJbezE6ezB9fXsyfS97M31dIHs0fSIgaWYgYmFkIGVsc2UgIlt7MTp7MH19ezJ9XSB7NH0iCiAgICAgICAgICAgICAgICAgICAgIHByaW50KGZtdC5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LApAQCAtNjk5LDI5ICs3NDQsMzAgQEAKICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKICAgICBlbHNlOgogICAgICAgICBmb3IgdGVzdF9pbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUodGVzdHMsIDEpOgotICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgaWYgbm90IG5zLnF1aWV0OgogICAgICAgICAgICAgICAgIGZtdCA9ICJbezE6ezB9fXsyfS97M31dIHs0fSIgaWYgYmFkIGVsc2UgIlt7MTp7MH19ezJ9XSB7NH0iCiAgICAgICAgICAgICAgICAgcHJpbnQoZm10LmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgdGVzdF9jb3VudF93aWR0aCwgdGVzdF9pbmRleCwgdGVzdF9jb3VudCwgbGVuKGJhZCksIHRlc3QpKQogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgaWYgdHJhY2U6CisgICAgICAgICAgICBpZiBucy50cmFjZToKICAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIHRyYWNpbmcgY29kZSBjb3ZlcmFnZSwgdGhlbiB3ZSBkb24ndCBleGl0IHdpdGggc3RhdHVzCiAgICAgICAgICAgICAgICAgIyBpZiBvbiBhIGZhbHNlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4uCi0gICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgdGltZW91dD10aW1lb3V0KScsCisgICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCBucy52ZXJib3NlLCBucy5xdWlldCwgdGltZW91dD1ucy50aW1lb3V0KScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPWdsb2JhbHMoKSwgbG9jYWxzPXZhcnMoKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT12ZXJib3NlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGZhaWxmYXN0PWZhaWxmYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW1hdGNoX3Rlc3RzKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIG5zLnZlcmJvc2UsIG5zLnF1aWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0LCBmYWlsZmFzdD1ucy5mYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykKICAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgaWYgZmluZGxlYWtzOgorICAgICAgICAgICAgaWYgbnMuZmluZGxlYWtzOgogICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICAgICAgICAgIGlmIGdjLmdhcmJhZ2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiB0ZXN0IGNyZWF0ZWQiLCBsZW4oZ2MuZ2FyYmFnZSksIGVuZD0nICcpCkBAIC03NDIsMTEgKzc4OCwxMSBAQAogICAgICAgICBvbWl0dGVkID0gc2V0KHNlbGVjdGVkKSAtIHNldChnb29kKSAtIHNldChiYWQpIC0gc2V0KHNraXBwZWQpCiAgICAgICAgIHByaW50KGNvdW50KGxlbihvbWl0dGVkKSwgInRlc3QiKSwgIm9taXR0ZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KG9taXR0ZWQpCi0gICAgaWYgZ29vZCBhbmQgbm90IHF1aWV0OgorICAgIGlmIGdvb2QgYW5kIG5vdCBucy5xdWlldDoKICAgICAgICAgaWYgbm90IGJhZCBhbmQgbm90IHNraXBwZWQgYW5kIG5vdCBpbnRlcnJ1cHRlZCBhbmQgbGVuKGdvb2QpID4gMToKICAgICAgICAgICAgIHByaW50KCJBbGwiLCBlbmQ9JyAnKQogICAgICAgICBwcmludChjb3VudChsZW4oZ29vZCksICJ0ZXN0IiksICJPSy4iKQotICAgIGlmIHByaW50X3Nsb3c6CisgICAgaWYgbnMucHJpbnRfc2xvdzoKICAgICAgICAgdGVzdF90aW1lcy5zb3J0KHJldmVyc2U9VHJ1ZSkKICAgICAgICAgcHJpbnQoIjEwIHNsb3dlc3QgdGVzdHM6IikKICAgICAgICAgZm9yIHRpbWUsIHRlc3QgaW4gdGVzdF90aW1lc1s6MTBdOgpAQCAtNzYwLDMyICs4MDYsMTkgQEAKICAgICAgICAgcHJpbnQoInt9IGFsdGVyZWQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudDoiLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgY291bnQobGVuKGVudmlyb25tZW50X2NoYW5nZWQpLCAidGVzdCIpKSkKICAgICAgICAgcHJpbnRsaXN0KGVudmlyb25tZW50X2NoYW5nZWQpCi0gICAgaWYgc2tpcHBlZCBhbmQgbm90IHF1aWV0OgorICAgIGlmIHNraXBwZWQgYW5kIG5vdCBucy5xdWlldDoKICAgICAgICAgcHJpbnQoY291bnQobGVuKHNraXBwZWQpLCAidGVzdCIpLCAic2tpcHBlZDoiKQogICAgICAgICBwcmludGxpc3Qoc2tpcHBlZCkKIAotICAgICAgICBlID0gX0V4cGVjdGVkU2tpcHMoKQotICAgICAgICBwbGF0ID0gc3lzLnBsYXRmb3JtCi0gICAgICAgIGlmIGUuaXN2YWxpZCgpOgotICAgICAgICAgICAgc3VycHJpc2UgPSBzZXQoc2tpcHBlZCkgLSBlLmdldGV4cGVjdGVkKCkgLSBzZXQocmVzb3VyY2VfZGVuaWVkcykKLSAgICAgICAgICAgIGlmIHN1cnByaXNlOgotICAgICAgICAgICAgICAgIHByaW50KGNvdW50KGxlbihzdXJwcmlzZSksICJza2lwIiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBvbiIsIHBsYXQgKyAiOiIpCi0gICAgICAgICAgICAgICAgcHJpbnRsaXN0KHN1cnByaXNlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiVGhvc2Ugc2tpcHMgYXJlIGFsbCBleHBlY3RlZCBvbiIsIHBsYXQgKyAiLiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgiQXNrIHNvbWVvbmUgdG8gdGVhY2ggcmVncnRlc3QucHkgYWJvdXQgd2hpY2ggdGVzdHMgYXJlIikKLSAgICAgICAgICAgIHByaW50KCJleHBlY3RlZCB0byBnZXQgc2tpcHBlZCBvbiIsIHBsYXQgKyAiLiIpCi0KLSAgICBpZiB2ZXJib3NlMiBhbmQgYmFkOgorICAgIGlmIG5zLnZlcmJvc2UyIGFuZCBiYWQ6CiAgICAgICAgIHByaW50KCJSZS1ydW5uaW5nIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUiKQogICAgICAgICBmb3IgdGVzdCBpbiBiYWQ6CiAgICAgICAgICAgICBwcmludCgiUmUtcnVubmluZyB0ZXN0ICVyIGluIHZlcmJvc2UgbW9kZSIgJSB0ZXN0KQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmVyYm9zZSA9IFRydWUKLSAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgVHJ1ZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLCB0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICAgICAgbnMudmVyYm9zZSA9IFRydWUKKyAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgVHJ1ZSwgbnMucXVpZXQsIG5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCkKICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwogICAgICAgICAgICAgICAgIHByaW50KCkKQEAgLTc5MywxOCArODI2LDE4IEBACiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcmFpc2UKIAotICAgIGlmIHNpbmdsZToKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIGlmIG5leHRfc2luZ2xlX3Rlc3Q6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZnA6CiAgICAgICAgICAgICAgICAgZnAud3JpdGUobmV4dF9zaW5nbGVfdGVzdCArICdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCiAKLSAgICBpZiB0cmFjZToKKyAgICBpZiBucy50cmFjZToKICAgICAgICAgciA9IHRyYWNlci5yZXN1bHRzKCkKLSAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPWNvdmVyZGlyKQorICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9bnMuY292ZXJkaXIpCiAKLSAgICBpZiBydW5sZWFrczoKKyAgICBpZiBucy5ydW5sZWFrczoKICAgICAgICAgb3Muc3lzdGVtKCJsZWFrcyAlZCIgJSBvcy5nZXRwaWQoKSkKIAogICAgIHN5cy5leGl0KGxlbihiYWQpID4gMCBvciBpbnRlcnJ1cHRlZCkKQEAgLTg3Nyw3ICs5MTAsNyBAQAogICAgIGF0ZXhpdC5yZWdpc3RlcihyZXN0b3JlX3N0ZG91dCkKIAogZGVmIHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsCi0gICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkZWJ1Zz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAorICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAogICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lLAogICAgICAgICAgICAgdGltZW91dD1Ob25lKToKICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdC4KQEAgLTg4NSwxNCArOTE4LDE1IEBACiAgICAgdGVzdCAtLSB0aGUgbmFtZSBvZiB0aGUgdGVzdAogICAgIHZlcmJvc2UgLS0gaWYgdHJ1ZSwgcHJpbnQgbW9yZSBtZXNzYWdlcwogICAgIHF1aWV0IC0tIGlmIHRydWUsIGRvbid0IHByaW50ICdza2lwcGVkJyBtZXNzYWdlcyAocHJvYmFibHkgcmVkdW5kYW50KQotICAgIHRlc3RfdGltZXMgLS0gYSBsaXN0IG9mICh0aW1lLCB0ZXN0X25hbWUpIHBhaXJzCiAgICAgaHVudHJsZWFrcyAtLSBydW4gbXVsdGlwbGUgdGltZXMgdG8gdGVzdCBmb3IgbGVha3M7IHJlcXVpcmVzIGEgZGVidWcKICAgICAgICAgICAgICAgICAgIGJ1aWxkOyBhIHRyaXBsZSBjb3JyZXNwb25kaW5nIHRvIC1SJ3MgdGhyZWUgYXJndW1lbnRzCisgICAgdXNlX3Jlc291cmNlcyAtLSBsaXN0IG9mIGV4dHJhIHJlc291cmNlcyB0byB1c2UKICAgICBvdXRwdXRfb25fZmFpbHVyZSAtLSBpZiB0cnVlLCBkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUKICAgICB0aW1lb3V0IC0tIGR1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgbW9yZSB0aGFuCiAgICAgICAgICAgICAgICB0aW1lb3V0IHNlY29uZHMKKyAgICBmYWlsZmFzdCwgbWF0Y2hfdGVzdHMgLS0gU2VlIHJlZ3J0ZXN0IGNvbW1hbmQtbGluZSBmbGFncyBmb3IgdGhlc2UuCiAKLSAgICBSZXR1cm5zIG9uZSBvZiB0aGUgdGVzdCByZXN1bHQgY29uc3RhbnRzOgorICAgIFJldHVybnMgdGhlIHR1cGxlIHJlc3VsdCwgdGVzdF90aW1lLCB3aGVyZSByZXN1bHQgaXMgb25lIG9mIHRoZSBjb25zdGFudHM6CiAgICAgICAgIElOVEVSUlVQVEVEICAgICAgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiBydW4gdW5kZXIgLWoKICAgICAgICAgUkVTT1VSQ0VfREVOSUVEICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKICAgICAgICAgU0tJUFBFRCAgICAgICAgICB0ZXN0IHNraXBwZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uCkBAIC05MzAsNyArOTY0LDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3RyZWFtCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHJlc3VsdFswXSA9PSBGQUlMRUQ6CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cmVhbS5nZXR2YWx1ZSgpCiAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3RkZXJyLndyaXRlKG91dHB1dCkKQEAgLTk0MCw3ICs5NzQsNyBAQAogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBvcmlnX3N0ZGVycgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLAorICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPW5vdCB2ZXJib3NlKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgZmluYWxseToKQEAgLTk5MiwxMCArMTAyNiwxMiBAQAogICAgICAgICAgICAgICAgICAnb3MuZW52aXJvbicsICdzeXMucGF0aCcsICdzeXMucGF0aF9ob29rcycsICdfX2ltcG9ydF9fJywKICAgICAgICAgICAgICAgICAgJ3dhcm5pbmdzLmZpbHRlcnMnLCAnYXN5bmNvcmUuc29ja2V0X21hcCcsCiAgICAgICAgICAgICAgICAgICdsb2dnaW5nLl9oYW5kbGVycycsICdsb2dnaW5nLl9oYW5kbGVyTGlzdCcsICdzeXMuZ2V0dHJhY2UnLAotICAgICAgICAgICAgICAgICAnc3lzLndhcm5vcHRpb25zJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAotICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywKKyAgICAgICAgICAgICAgICAgJ3N5cy53YXJub3B0aW9ucycsCisgICAgICAgICAgICAgICAgICMgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKSBtYXkgcmVsZWFzZSByZWYKKyAgICAgICAgICAgICAgICAgIyB0byBhIHRocmVhZCwgc28gY2hlY2sgcHJvY2Vzc2VzIGZpcnN0LgorICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAogICAgICAgICAgICAgICAgICAnc3lzY29uZmlnLl9DT05GSUdfVkFSUycsICdzeXNjb25maWcuX0lOU1RBTExfU0NIRU1FUycsCi0gICAgICAgICAgICAgICAgICdzdXBwb3J0LlRFU1RGTicsCisgICAgICAgICAgICAgICAgICdzdXBwb3J0LlRFU1RGTicsICdsb2NhbGUnLCAnd2FybmluZ3Muc2hvd3dhcm5pbmcnLAogICAgICAgICAgICAgICAgICkKIAogICAgIGRlZiBnZXRfc3lzX2FyZ3Yoc2VsZik6CkBAIC0xMTIzLDYgKzExNTksOCBAQAogICAgIGRlZiBnZXRfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYpOgogICAgICAgICBpZiBub3QgbXVsdGlwcm9jZXNzaW5nOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBVbmpvaW5lZCBwcm9jZXNzIG9iamVjdHMgY2FuIHN1cnZpdmUgYWZ0ZXIgcHJvY2VzcyBleGl0cworICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCiAgICAgICAgICMgVGhpcyBjb3BpZXMgdGhlIHdlYWtyZWZzIHdpdGhvdXQgbWFraW5nIGFueSBzdHJvbmcgcmVmZXJlbmNlCiAgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcuY29weSgpCiAgICAgZGVmIHJlc3RvcmVfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYsIHNhdmVkKToKQEAgLTExNjQsNiArMTIwMiwyNSBAQAogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN1cHBvcnQuVEVTVEZOKQogCisgICAgX2xjID0gW2dldGF0dHIobG9jYWxlLCBsYykgZm9yIGxjIGluIGRpcihsb2NhbGUpCisgICAgICAgICAgIGlmIGxjLnN0YXJ0c3dpdGgoJ0xDXycpXQorICAgIGRlZiBnZXRfbG9jYWxlKHNlbGYpOgorICAgICAgICBwYWlyaW5ncyA9IFtdCisgICAgICAgIGZvciBsYyBpbiBzZWxmLl9sYzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYWlyaW5ncy5hcHBlbmQoKGxjLCBsb2NhbGUuc2V0bG9jYWxlKGxjLCBOb25lKSkpCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmV0dXJuIHBhaXJpbmdzCisgICAgZGVmIHJlc3RvcmVfbG9jYWxlKHNlbGYsIHNhdmVkKToKKyAgICAgICAgZm9yIGxjLCBzZXR0aW5nIGluIHNhdmVkOgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsYywgc2V0dGluZykKKworICAgIGRlZiBnZXRfd2FybmluZ3Nfc2hvd3dhcm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiB3YXJuaW5ncy5zaG93d2FybmluZworICAgIGRlZiByZXN0b3JlX3dhcm5pbmdzX3Nob3d3YXJuaW5nKHNlbGYsIGZ4bik6CisgICAgICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nID0gZnhuCisKICAgICBkZWYgcmVzb3VyY2VfaW5mbyhzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5yZXNvdXJjZXM6CiAgICAgICAgICAgICBtZXRob2Rfc3VmZml4ID0gbmFtZS5yZXBsYWNlKCcuJywgJ18nKQpAQCAtMTE5OCw3ICsxMjU1LDcgQEAKIAogCiBkZWYgcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwKLSAgICAgICAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIGRlYnVnPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CiAgICAgc3VwcG9ydC51bmxvYWQodGVzdCkKIAogICAgIHRlc3RfdGltZSA9IDAuMApAQCAtMTIxMSw4ICsxMjY4LDcgQEAKICAgICAgICAgICAgIGFic3Rlc3QgPSAndGVzdC4nICsgdGVzdAogICAgICAgICB3aXRoIHNhdmVkX3Rlc3RfZW52aXJvbm1lbnQodGVzdCwgdmVyYm9zZSwgcXVpZXQpIGFzIGVudmlyb25tZW50OgogICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICB0aGVfcGFja2FnZSA9IF9faW1wb3J0X18oYWJzdGVzdCwgZ2xvYmFscygpLCBsb2NhbHMoKSwgW10pCi0gICAgICAgICAgICB0aGVfbW9kdWxlID0gZ2V0YXR0cih0aGVfcGFja2FnZSwgdGVzdCkKKyAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShhYnN0ZXN0KQogICAgICAgICAgICAgIyBJZiB0aGUgdGVzdCBoYXMgYSB0ZXN0X21haW4sIHRoYXQgd2lsbCBydW4gdGhlIGFwcHJvcHJpYXRlCiAgICAgICAgICAgICAjIHRlc3RzLiAgSWYgbm90LCB1c2Ugbm9ybWFsIHVuaXR0ZXN0IHRlc3QgbG9hZGluZy4KICAgICAgICAgICAgIHRlc3RfcnVubmVyID0gZ2V0YXR0cih0aGVfbW9kdWxlLCAidGVzdF9tYWluIiwgTm9uZSkKQEAgLTEyMjEsOCArMTI3Nyw3IEBACiAgICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBsYW1iZGE6IHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RzKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIoKQogICAgICAgICAgICAgaWYgaHVudHJsZWFrczoKLSAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIHRlc3RfcnVubmVyLAotICAgICAgICAgICAgICAgICAgICBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgIHJlZmxlYWsgPSBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgdGVzdF9ydW5uZXIsIGh1bnRybGVha3MpCiAgICAgICAgICAgICB0ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKICAgICBleGNlcHQgc3VwcG9ydC5SZXNvdXJjZURlbmllZCBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBxdWlldDoKQEAgLTEzMjgsNDEgKzEzODMsNTAgQEAKICAgICAgICAgZm9yIG9iaiBpbiBhYmMuX19zdWJjbGFzc2VzX18oKSArIFthYmNdOgogICAgICAgICAgICAgYWJjc1tvYmpdID0gb2JqLl9hYmNfcmVnaXN0cnkuY29weSgpCiAKLSAgICBpZiBpbmRpcmVjdF90ZXN0OgotICAgICAgICBkZWYgcnVuX3RoZV90ZXN0KCk6Ci0gICAgICAgICAgICBpbmRpcmVjdF90ZXN0KCkKLSAgICBlbHNlOgotICAgICAgICBkZWYgcnVuX3RoZV90ZXN0KCk6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbdGhlX21vZHVsZS5fX25hbWVfX10KLSAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgdGhlX21vZHVsZS5fX25hbWVfXykKLQotICAgIGRlbHRhcyA9IFtdCiAgICAgbndhcm11cCwgbnRyYWNrZWQsIGZuYW1lID0gaHVudHJsZWFrcwogICAgIGZuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGZuYW1lKQogICAgIHJlcGNvdW50ID0gbndhcm11cCArIG50cmFja2VkCisgICAgcmNfZGVsdGFzID0gWzBdICogcmVwY291bnQKKyAgICBhbGxvY19kZWx0YXMgPSBbMF0gKiByZXBjb3VudAorCiAgICAgcHJpbnQoImJlZ2lubmluZyIsIHJlcGNvdW50LCAicmVwZXRpdGlvbnMiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgcHJpbnQoKCIxMjM0NTY3ODkwIioocmVwY291bnQvLzEwICsgMSkpWzpyZXBjb3VudF0sIGZpbGU9c3lzLnN0ZGVycikKICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQogICAgIGZvciBpIGluIHJhbmdlKHJlcGNvdW50KToKLSAgICAgICAgcmNfYmVmb3JlID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBydW5fdGhlX3Rlc3QoKQorICAgICAgICBpbmRpcmVjdF90ZXN0KCkKKyAgICAgICAgYWxsb2NfYWZ0ZXIsIHJjX2FmdGVyID0gZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQotICAgICAgICByY19hZnRlciA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKICAgICAgICAgaWYgaSA+PSBud2FybXVwOgotICAgICAgICAgICAgZGVsdGFzLmFwcGVuZChyY19hZnRlciAtIHJjX2JlZm9yZSkKKyAgICAgICAgICAgIHJjX2RlbHRhc1tpXSA9IHJjX2FmdGVyIC0gcmNfYmVmb3JlCisgICAgICAgICAgICBhbGxvY19kZWx0YXNbaV0gPSBhbGxvY19hZnRlciAtIGFsbG9jX2JlZm9yZQorICAgICAgICBhbGxvY19iZWZvcmUsIHJjX2JlZm9yZSA9IGFsbG9jX2FmdGVyLCByY19hZnRlcgogICAgIHByaW50KGZpbGU9c3lzLnN0ZGVycikKLSAgICBpZiBhbnkoZGVsdGFzKToKLSAgICAgICAgbXNnID0gJyVzIGxlYWtlZCAlcyByZWZlcmVuY2VzLCBzdW09JXMnICUgKHRlc3QsIGRlbHRhcywgc3VtKGRlbHRhcykpCi0gICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKLSAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1yZWZyZXApCi0gICAgICAgICAgICByZWZyZXAuZmx1c2goKQotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQorICAgICMgVGhlc2UgY2hlY2tlcnMgcmV0dXJuIEZhbHNlIG9uIHN1Y2Nlc3MsIFRydWUgb24gZmFpbHVyZQorICAgIGRlZiBjaGVja19yY19kZWx0YXMoZGVsdGFzKToKKyAgICAgICAgcmV0dXJuIGFueShkZWx0YXMpCisgICAgZGVmIGNoZWNrX2FsbG9jX2RlbHRhcyhkZWx0YXMpOgorICAgICAgICAjIEF0IGxlYXN0IDEvM3JkIG9mIDBzCisgICAgICAgIGlmIDMgKiBkZWx0YXMuY291bnQoMCkgPCBsZW4oZGVsdGFzKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgTm90aGluZyBlbHNlIHRoYW4gMXMsIDBzIGFuZCAtMXMKKyAgICAgICAgaWYgbm90IHNldChkZWx0YXMpIDw9IHsxLDAsLTF9OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZmFpbGVkID0gRmFsc2UKKyAgICBmb3IgZGVsdGFzLCBpdGVtX25hbWUsIGNoZWNrZXIgaW4gWworICAgICAgICAocmNfZGVsdGFzLCAncmVmZXJlbmNlcycsIGNoZWNrX3JjX2RlbHRhcyksCisgICAgICAgIChhbGxvY19kZWx0YXMsICdtZW1vcnkgYmxvY2tzJywgY2hlY2tfYWxsb2NfZGVsdGFzKV06CisgICAgICAgIGlmIGNoZWNrZXIoZGVsdGFzKToKKyAgICAgICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgJXMsIHN1bT0lcycgJSAoCisgICAgICAgICAgICAgICAgdGVzdCwgZGVsdGFzW253YXJtdXA6XSwgaXRlbV9uYW1lLCBzdW0oZGVsdGFzKSkKKyAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJhIikgYXMgcmVmcmVwOgorICAgICAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1yZWZyZXApCisgICAgICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKKyAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICByZXR1cm4gZmFpbGVkCiAKIGRlZiBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKToKICAgICBpbXBvcnQgZ2MsIGNvcHlyZWcKQEAgLTE0MjgsOCArMTQ5MiwxMSBAQAogICAgIGVsc2U6CiAgICAgICAgIGN0eXBlcy5fcmVzZXRfY2FjaGUoKQogCi0gICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaC4KKyAgICAjIENvbGxlY3QgY3ljbGljIHRyYXNoIGFuZCByZWFkIG1lbW9yeSBzdGF0aXN0aWNzIGltbWVkaWF0ZWx5IGFmdGVyLgorICAgIGZ1bmMxID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcworICAgIGZ1bmMyID0gc3lzLmdldHRvdGFscmVmY291bnQKICAgICBnYy5jb2xsZWN0KCkKKyAgICByZXR1cm4gZnVuYzEoKSwgZnVuYzIoKQogCiBkZWYgd2FybV9jYWNoZXMoKToKICAgICAjIGNoYXIgY2FjaGUKQEAgLTE0NzIsMzA3ICsxNTM5LDEwIEBACiAgICAgcHJpbnQoZmlsbCgnICcuam9pbihzdHIoZWx0KSBmb3IgZWx0IGluIHNvcnRlZCh4KSksIHdpZHRoLAogICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9YmxhbmtzLCBzdWJzZXF1ZW50X2luZGVudD1ibGFua3MpKQogCi0jIE1hcCBzeXMucGxhdGZvcm0gdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYmFzZW5hbWVzIG9mIHRlc3RzCi0jIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gdGhhdCBwbGF0Zm9ybS4KLSMKLSMgU3BlY2lhbCBjYXNlczoKLSMgICAgIHRlc3RfcGVwMjc3Ci0jICAgICAgICAgVGhlIF9FeHBlY3RlZFNraXBzIGNvbnN0cnVjdG9yIGFkZHMgdGhpcyB0byB0aGUgc2V0IG9mIGV4cGVjdGVkCi0jICAgICAgICAgc2tpcHMgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMuCi0jICAgICB0ZXN0X3RpbWVvdXQKLSMgICAgICAgICBDb250cm9sbGVkIGJ5IHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkLiAgUmVxdWlyZXMgdGhlIG5ldHdvcmsKLSMgICAgICAgICByZXNvdXJjZSBhbmQgYSBzb2NrZXQgbW9kdWxlLgotIwotIyBUZXN0cyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBza2lwcGVkIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIG9uZSBwbGF0Zm9ybQotIyBhcmUgYWxzbyBoYW5kbGVkIHNlcGFyYXRlbHkuCiAKLV9leHBlY3RhdGlvbnMgPSAoCi0gICAgKCd3aW4zMicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X19sb2NhbGUKLSAgICAgICAgdGVzdF9jcnlwdAotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9mY250bAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZGJtX25kYm0KLSAgICAgICAgdGVzdF9ncnAKLSAgICAgICAgdGVzdF9pb2N0bAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BpcGVzCi0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICB0ZXN0X3Bvc2l4Ci0gICAgICAgIHRlc3RfcHR5Ci0gICAgICAgIHRlc3RfcHdkCi0gICAgICAgIHRlc3RfcmVzb3VyY2UKLSAgICAgICAgdGVzdF9zaWduYWwKLSAgICAgICAgdGVzdF9zeXNsb2cKLSAgICAgICAgdGVzdF90aHJlYWRzaWduYWxzCi0gICAgICAgIHRlc3Rfd2FpdDMKLSAgICAgICAgdGVzdF93YWl0NAotICAgICAgICAiIiIpLAotICAgICgnbGludXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgIiIiKSwKLSAgICAoJ3VuaXh3YXJlJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgIiIiKSwKLSAgICAoJ29wZW51bml4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgIiIiKSwKLSAgICAoJ3Njb19zdicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2FzeW5jaGF0Ci0gICAgICAgIHRlc3RfZm9yazEKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2dldHRleHQKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9xdWV1ZQotICAgICAgICB0ZXN0X3NheAotICAgICAgICB0ZXN0X3N1bmRyeQotICAgICAgICB0ZXN0X3RocmVhZAotICAgICAgICB0ZXN0X3RocmVhZGVkX2ltcG9ydAotICAgICAgICB0ZXN0X3RocmVhZGVkdGVtcGZpbGUKLSAgICAgICAgdGVzdF90aHJlYWRpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ2RhcndpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X19sb2NhbGUKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ2RiCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICAiIiIpLAotICAgICgnc3Vub3MnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3ppcGZpbGUKLSAgICAgICAgdGVzdF96bGliCi0gICAgICAgICIiIiksCi0gICAgKCdocC11eCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2d6aXAKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnY3lnd2luJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICAiIiIpLAotICAgICgnb3MyZW14JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfYXVkaW9vcAotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbW1hcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgICIiIiksCi0gICAgKCdmcmVlYnNkJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcGVwMjc3Ci0gICAgICAgIHRlc3RfcHR5Ci0gICAgICAgIHRlc3Rfc29ja2V0c2VydmVyCi0gICAgICAgIHRlc3RfdGNsCi0gICAgICAgIHRlc3RfdGsKLSAgICAgICAgdGVzdF90dGtfZ3Vpb25seQotICAgICAgICB0ZXN0X3R0a190ZXh0b25seQotICAgICAgICB0ZXN0X3RpbWVvdXQKLSAgICAgICAgdGVzdF91cmxsaWJuZXQKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ2FpeCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2J6MgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2d6aXAKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF96aXBpbXBvcnQKLSAgICAgICAgdGVzdF96bGliCi0gICAgICAgICIiIiksCi0gICAgKCdvcGVuYnNkJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3R5cGVzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X25vcm1hbGl6YXRpb24KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ25ldGJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSkKLQotY2xhc3MgX0V4cGVjdGVkU2tpcHM6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3MucGF0aAotICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdGltZW91dAotCi0gICAgICAgIHNlbGYudmFsaWQgPSBGYWxzZQotICAgICAgICBleHBlY3RlZCA9IE5vbmUKLSAgICAgICAgZm9yIGl0ZW0gaW4gX2V4cGVjdGF0aW9uczoKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKGl0ZW1bMF0pOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gaXRlbVsxXQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGV4cGVjdGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5leHBlY3RlZCA9IHNldChleHBlY3RlZC5zcGxpdCgpKQotCi0gICAgICAgICAgICAjIFRoZXNlIGFyZSBicm9rZW4gdGVzdHMsIGZvciBub3cgc2tpcHBlZCBvbiBldmVyeSBwbGF0Zm9ybS4KLSAgICAgICAgICAgICMgWFhYIEZpeCB0aGVzZSEKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X25pcycpCi0KLSAgICAgICAgICAgICMgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBvbiBldmVyeSBwbGF0Zm9ybSwgZXZlbiBMaW51eAotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcGVwMjc3JykKLQotICAgICAgICAgICAgIyBkb2N0ZXN0LCBwcm9maWxlIGFuZCBjUHJvZmlsZSB0ZXN0cyBmYWlsIHdoZW4gdGhlIGNvZGVjIGZvciB0aGUKLSAgICAgICAgICAgICMgZnMgZW5jb2RpbmcgaXNuJ3QgYnVpbHQgaW4gYmVjYXVzZSBQeVVuaWNvZGVfRGVjb2RlKCkgYWRkcyB0d28KLSAgICAgICAgICAgICMgY2FsbHMgaW50byBQeXRob24uCi0gICAgICAgICAgICBlbmNzID0gKCJ1dGYtOCIsICJsYXRpbi0xIiwgImFzY2lpIiwgIm1iY3MiLCAidXRmLTE2IiwgInV0Zi0zMiIpCi0gICAgICAgICAgICBpZiBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkubG93ZXIoKSBub3QgaW4gZW5jczoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9wcm9maWxlJykKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9jUHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfZG9jdGVzdCcpCi0KLSAgICAgICAgICAgIGlmIHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3RpbWVvdXQnKQotCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKLSAgICAgICAgICAgICAgICAjIHRlc3Rfc3FsaXRlIGlzIG9ubHkgcmVsaWFibGUgb24gV2luZG93cyB3aGVyZSB0aGUgbGlicmFyeQotICAgICAgICAgICAgICAgICMgaXMgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24KLSAgICAgICAgICAgICAgICBXSU5fT05MWSA9IHsidGVzdF91bmljb2RlX2ZpbGUiLCAidGVzdF93aW5yZWciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dpbnNvdW5kIiwgInRlc3Rfc3RhcnRmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zcWxpdGUiLCAidGVzdF9tc2lsaWIifQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgfD0gV0lOX09OTFkKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdzdW5vczUnOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X25pcycpCi0KLSAgICAgICAgICAgIGlmIHN1cHBvcnQucHl0aG9uX2lzX29wdGltaXplZCgpOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCJ0ZXN0X2dkYiIpCi0KLSAgICAgICAgICAgIHNlbGYudmFsaWQgPSBUcnVlCi0KLSAgICBkZWYgaXN2YWxpZChzZWxmKToKLSAgICAgICAgIlJldHVybiB0cnVlIGlmZiBfRXhwZWN0ZWRTa2lwcyBrbm93cyBhYm91dCB0aGUgY3VycmVudCBwbGF0Zm9ybS4iCi0gICAgICAgIHJldHVybiBzZWxmLnZhbGlkCi0KLSAgICBkZWYgZ2V0ZXhwZWN0ZWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBzZXQgb2YgdGVzdCBuYW1lcyB3ZSBleHBlY3QgdG8gc2tpcCBvbiBjdXJyZW50IHBsYXRmb3JtLgotCi0gICAgICAgIHNlbGYuaXN2YWxpZCgpIG11c3QgYmUgdHJ1ZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgYXNzZXJ0IHNlbGYuaXN2YWxpZCgpCi0gICAgICAgIHJldHVybiBzZWxmLmV4cGVjdGVkCi0KLWRlZiBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUik6Ci0gICAgIyBXaGVuIHRlc3RzIGFyZSBydW4gZnJvbSB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSwgaXQgaXMgYmVzdCBwcmFjdGljZQotICAgICMgdG8ga2VlcCB0aGUgdGVzdCBmaWxlcyBpbiBhIHN1YmZvbGRlci4gIEl0IGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCi0gICAgIyBmaWxlcyB1c2luZyBjb21tYW5kICJtYWtlIGRpc3RjbGVhbiIuCitkZWYgbWFpbl9pbl90ZW1wX2N3ZCgpOgorICAgICIiIlJ1biBtYWluKCkgaW4gYSB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkuIiIiCiAgICAgaWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgotICAgICAgICBURU1QRElSID0gb3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJyksICdidWlsZCcpCi0gICAgICAgIFRFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoVEVNUERJUikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIoVEVNUERJUikKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKQEAgLTE3ODEsMTAgKzE1NTEsMTYgQEAKICAgICAjIERlZmluZSBhIHdyaXRhYmxlIHRlbXAgZGlyIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGN3ZCB3aGlsZSBydW5uaW5nCiAgICAgIyB0aGUgdGVzdHMuIFRoZSBuYW1lIG9mIHRoZSBkaXIgaW5jbHVkZXMgdGhlIHBpZCB0byBhbGxvdyBwYXJhbGxlbAogICAgICMgdGVzdGluZyAoc2VlIHRoZSAtaiBvcHRpb24pLgotICAgIFRFU1RDV0QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9ICd0ZXN0X3B5dGhvbl97fScuZm9ybWF0KG9zLmdldHBpZCgpKQorICAgIHRlc3RfY3dkID0gb3MucGF0aC5qb2luKFRFTVBESVIsIHRlc3RfY3dkKQogCi0gICAgVEVTVENXRCA9IG9zLnBhdGguam9pbihURU1QRElSLCBURVNUQ1dEKQotICAgIHJldHVybiBURU1QRElSLCBURVNUQ1dECisgICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJpbHkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKKyAgICAjIHRlbXBvcmFyeSBhbmQgd3JpdGFibGUgZGlyZWN0b3J5LiAgSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCisgICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuICBUaGUgb3JpZ2luYWwgQ1dEIGlzCisgICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgorICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0ZXN0X2N3ZCwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgIG1haW4oKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgIyBSZW1vdmUgcmVncnRlc3QucHkncyBvd24gZGlyZWN0b3J5IGZyb20gdGhlIG1vZHVsZSBzZWFyY2ggcGF0aC4gRGVzcGl0ZQpAQCAtMTgwOCwxMSArMTU4NCw0IEBACiAgICAgIyBzYW5pdHkgY2hlY2sKICAgICBhc3NlcnQgX19maWxlX18gPT0gb3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKQogCi0gICAgVEVNUERJUiwgVEVTVENXRCA9IF9tYWtlX3RlbXBfZGlyX2Zvcl9idWlsZChURU1QRElSKQotCi0gICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCi0gICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCi0gICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSAgICAjIGF2YWlsYWJsZSBmcm9tIHN1cHBvcnQuU0FWRURDV0QuCi0gICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKFRFU1RDV0QsIHF1aWV0PVRydWUpOgotICAgICAgICBtYWluKCkKKyAgICBtYWluX2luX3RlbXBfY3dkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsIGIvTGliL3Rlc3QvcmV2b2NhdGlvbi5jcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4OWIwOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnBqQ0Jqd0lCQVRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWVdURW1NQ1FHQTFVRQorQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVkJBTU1EVzkxY2kxagorWVMxelpYSjJaWElYRFRFek1URXlNVEUzTURnME4xb1hEVEl6TURrek1ERTNNRGcwTjFxZ0RqQU1NQW9HQTFVZAorRkFRREFnRUFNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUNOSlhDMm1WS2F1RWVOM0xsUTNadE01Z2tIM0V4SAorK2k0Ym1KanRKbjQ5N1d3dnZvSWVVZHJtVlhnSlFSOTNSdFYzN2had04wU1hNTGxObVVaUEg0ckhoaWhheXc0bQordW5DelZqL09oQ0NZNy9UUGpLdUoxTy8wWGhhTEJwQlZqUU43Ui8xdWpvUktiU2lhL0NEM3ZjbjdGcXh6dzdMSworZlNSQ0tSR1RqMUNaaXV4cnBodEZjaHdBTFhTaUZEeTltcjJaS2hJbWN5cTFQeWRmZ0V6VTc4QVBwT2tNUXNJQworVU5KL2NmM2M5ZW16ZitkVXRjTUVjZWpRM215bkJvNGVJR2cxRVc0MmJ6NHE0aFNqelFsS2NCVjBtdXc1cVhoYworSE94SDJpVEZoUTdTcnZWdUsvZE0xNHJZTTRCNW1TWDNuUkMxa05tWHBTOWozd0pEaHV3bWpIZWQKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CmluZGV4IGFiMjAxNjQuLjRkNWMxZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpAQCAtMTIsMTMgKzEyLDIyIEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQogCi1mcm9tIGltcCBpbXBvcnQgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljLCBzdHJpcF9weXRob25fc3RkZXJyLCB0ZW1wX2RpcgogCiAjIEV4ZWN1dGluZyB0aGUgaW50ZXJwcmV0ZXIgaW4gYSBzdWJwcm9jZXNzCiBkZWYgX2Fzc2VydF9weXRob24oZXhwZWN0ZWRfc3VjY2VzcywgKmFyZ3MsICoqZW52X3ZhcnMpOgotICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlXQotICAgIGlmIG5vdCBlbnZfdmFyczoKKyAgICBpZiAnX19pc29sYXRlZCcgaW4gZW52X3ZhcnM6CisgICAgICAgIGlzb2xhdGVkID0gZW52X3ZhcnMucG9wKCdfX2lzb2xhdGVkJykKKyAgICBlbHNlOgorICAgICAgICBpc29sYXRlZCA9IG5vdCBlbnZfdmFycworICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLVgnLCAnZmF1bHRoYW5kbGVyJ10KKyAgICBpZiBpc29sYXRlZDoKKyAgICAgICAgIyBpc29sYXRlZCBtb2RlOiBpZ25vcmUgUHl0aG9uIGVudmlyb25tZW50IHZhcmlhYmxlcywgaWdub3JlIHVzZXIKKyAgICAgICAgIyBzaXRlLXBhY2thZ2VzLCBhbmQgZG9uJ3QgYWRkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBzeXMucGF0aAorICAgICAgICBjbWRfbGluZS5hcHBlbmQoJy1JJykKKyAgICBlbGlmIG5vdCBlbnZfdmFyczoKKyAgICAgICAgIyBpZ25vcmUgUHl0aG9uIGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgICAgICBjbWRfbGluZS5hcHBlbmQoJy1FJykKICAgICAjIE5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50LCBmb3IgaW4tcGxhY2UgdGVzdGluZyBvZgogICAgICMgc2hhcmVkIGxpYnJhcnkgYnVpbGRzLgpAQCAtMzksNyArNDgsNyBAQAogICAgICAgICBwLnN0ZG91dC5jbG9zZSgpCiAgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKICAgICByYyA9IHAucmV0dXJuY29kZQotICAgIGVyciA9ICBzdHJpcF9weXRob25fc3RkZXJyKGVycikKKyAgICBlcnIgPSBzdHJpcF9weXRob25fc3RkZXJyKGVycikKICAgICBpZiAocmMgYW5kIGV4cGVjdGVkX3N1Y2Nlc3MpIG9yIChub3QgcmMgYW5kIG5vdCBleHBlY3RlZF9zdWNjZXNzKToKICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAiUHJvY2VzcyByZXR1cm4gY29kZSBpcyAlZCwgIgpAQCAtNDksMTggKzU4LDMyIEBACiBkZWYgYXNzZXJ0X3B5dGhvbl9vaygqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiCiAgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgaXMgb2sgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIHN1Y2NlZWRzIChyYyA9PSAwKSBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsCisgICAgc3RkZXJyKSB0dXBsZS4KKworICAgIElmIHRoZSBfX2NsZWFuZW52IGtleXdvcmQgaXMgc2V0LCBlbnZfdmFycyBpcyB1c2VkIGEgZnJlc2ggZW52aXJvbm1lbnQuCisKKyAgICBQeXRob24gaXMgc3RhcnRlZCBpbiBpc29sYXRlZCBtb2RlIChjb21tYW5kIGxpbmUgb3B0aW9uIC1JKSwKKyAgICBleGNlcHQgaWYgdGhlIF9faXNvbGF0ZWQga2V5d29yZCBpcyBzZXQgdG8gRmFsc2UuCiAgICAgIiIiCiAgICAgcmV0dXJuIF9hc3NlcnRfcHl0aG9uKFRydWUsICphcmdzLCAqKmVudl92YXJzKQogCiBkZWYgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiIKICAgICBBc3NlcnQgdGhhdCBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIGBhcmdzYCBhbmQgb3B0aW9uYWwgZW52aXJvbm1lbnQKLSAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBmYWlscyBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsIHN0ZGVycikgdHVwbGUuCisgICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgKHJjICE9IDApIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwKKyAgICBzdGRlcnIpIHR1cGxlLgorCisgICAgU2VlIGFzc2VydF9weXRob25fb2soKSBmb3IgbW9yZSBvcHRpb25zLgogICAgICIiIgogICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihGYWxzZSwgKmFyZ3MsICoqZW52X3ZhcnMpCiAKIGRlZiBzcGF3bl9weXRob24oKmFyZ3MsICoqa3cpOgorICAgICIiIlJ1biBhIFB5dGhvbiBzdWJwcm9jZXNzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKworICAgIGt3IGlzIGV4dHJhIGtleXdvcmQgYXJncyB0byBwYXNzIHRvIHN1YnByb2Nlc3MuUG9wZW4uIFJldHVybnMgYSBQb3BlbgorICAgIG9iamVjdC4KKyAgICAiIiIKICAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJ10KICAgICBjbWRfbGluZS5leHRlbmQoYXJncykKICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLApAQCAtNjgsNiArOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3cpCiAKIGRlZiBraWxsX3B5dGhvbihwKToKKyAgICAiIiJSdW4gdGhlIGdpdmVuIFBvcGVuIHByb2Nlc3MgdW50aWwgY29tcGxldGlvbiBhbmQgcmV0dXJuIHN0ZG91dC4iIiIKICAgICBwLnN0ZGluLmNsb3NlKCkKICAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpCiAgICAgcC5zdGRvdXQuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc29ydHBlcmYucHkgYi9MaWIvdGVzdC9zb3J0cGVyZi5weQppbmRleCBhZjdjMGI0Li45MDcyMmY3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zb3J0cGVyZi5weQorKysgYi9MaWIvdGVzdC9zb3J0cGVyZi5weQpAQCAtMjIsNyArMjIsNyBAQAogICAgIGZuID0gb3MucGF0aC5qb2luKHRkLCAicnIlMDZkIiAlIG4pCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oZm4sICJyYiIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHIgPSByYW5kb20ucmFuZG9tCiAgICAgICAgIHJlc3VsdCA9IFtyKCkgZm9yIGkgaW4gcmFuZ2UobildCiAgICAgICAgIHRyeToKQEAgLTM1LDkgKzM1LDkgQEAKICAgICAgICAgICAgICAgICBpZiBmcDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJjYW4ndCB3cml0ZSIsIGZuLCAiOiIsIG1zZykKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBtYXJzaGFsLmxvYWQoZnApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zc2xfc2VydmVycy5weSBiL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CmluZGV4IDg2ODYxNTMuLjc1OWIzZjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CisrKyBiL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICAgICAgc3NsY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIHNvY2tldCBlcnJvcnMgYXJlIHNpbGVuY2VkIGJ5IHRoZSBjYWxsZXIsIHByaW50IHRoZW0gaGVyZQogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkdvdCBhbiBlcnJvcjpcbiVzXG4iICUgZSkKQEAgLTE0Nyw5ICsxNDcsMTEgQEAKICAgICAgICAgc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKQogCiAKLWRlZiBtYWtlX2h0dHBzX3NlcnZlcihjYXNlLCBjZXJ0ZmlsZT1DRVJURklMRSwgaG9zdD1IT1NULCBoYW5kbGVyX2NsYXNzPU5vbmUpOgotICAgICMgd2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQotICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorZGVmIG1ha2VfaHR0cHNfc2VydmVyKGNhc2UsICosIGNvbnRleHQ9Tm9uZSwgY2VydGZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgaG9zdD1IT1NULCBoYW5kbGVyX2NsYXNzPU5vbmUpOgorICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgIyBXZSBhc3N1bWUgdGhlIGNlcnRmaWxlIGNvbnRhaW5zIGJvdGggcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlCiAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUpCiAgICAgc2VydmVyID0gSFRUUFNTZXJ2ZXJUaHJlYWQoY29udGV4dCwgaG9zdCwgaGFuZGxlcl9jbGFzcykKICAgICBmbGFnID0gdGhyZWFkaW5nLkV2ZW50KCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weSBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQppbmRleCAxZDcwMzg1Li4zMDc4NGQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CkBAIC0zMjgsMTMgKzMyOCwyNiBAQAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3VwcGVyJywgNDIpCiAKICAgICBkZWYgdGVzdF9leHBhbmR0YWJzKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJykKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDgpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgNCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgNCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA4KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICBkZWZcbmcgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgICMgY2hlY2sga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgdGFic2l6ZT04KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCB0YWJzaXplPTQpCisKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgIGFcbiBiJywgJyBcdGFcblx0YicsICdleHBhbmR0YWJzJywgMSkKIAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2V4cGFuZHRhYnMnLCA0MiwgNDIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKaW5kZXggMWY2MWUxMy4uZDEyYmQ5NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CisrKyBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQpAQCAtMSwxNyArMSwyNyBAQAogIiIiV2hlbiBjYWxsZWQgYXMgYSBzY3JpcHQsIHByaW50IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIG9wZW4KLWZpbGUgZGVzY3JpcHRvcnMgb24gc3Rkb3V0LiIiIgorZmlsZSBkZXNjcmlwdG9ycyBvbiBzdGRvdXQuCisKK1VzYWdlOgorZmRfc3RhdHMucHk6IGNoZWNrIGFsbCBmaWxlIGRlc2NyaXB0b3JzCitmZF9zdGF0dXMucHkgZmQxIGZkMiAuLi46IGNoZWNrIG9ubHkgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvcnMKKyIiIgogCiBpbXBvcnQgZXJybm8KIGltcG9ydCBvcwotCi10cnk6Ci0gICAgX01BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQotZXhjZXB0OgotICAgIF9NQVhGRCA9IDI1NgoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBmZHMgPSBbXQotICAgIGZvciBmZCBpbiByYW5nZSgwLCBfTUFYRkQpOgorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX01BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBfTUFYRkQgPSAyNTYKKyAgICAgICAgdGVzdF9mZHMgPSByYW5nZSgwLCBfTUFYRkQpCisgICAgZWxzZToKKyAgICAgICAgdGVzdF9mZHMgPSBtYXAoaW50LCBzeXMuYXJndlsxOl0pCisgICAgZm9yIGZkIGluIHRlc3RfZmRzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdCA9IG9zLmZzdGF0KGZkKQogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgpAQCAtMTksNiArMjksNiBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByYWlzZQogICAgICAgICAjIElnbm9yZSBTb2xhcmlzIGRvb3IgZmlsZXMKLSAgICAgICAgaWYgc3Quc3RfbW9kZSAmIDB4RjAwMCAhPSAweGQwMDA6CisgICAgICAgIGlmIG5vdCBzdGF0LlNfSVNET09SKHN0LnN0X21vZGUpOgogICAgICAgICAgICAgZmRzLmFwcGVuZChmZCkKICAgICBwcmludCgnLCcuam9pbihtYXAoc3RyLCBmZHMpKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CmluZGV4IDIzM2IxM2EuLmEyNDJhNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQpAQCAtMTUsMTAgKzE1LDEwIEBACiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgY29sbGVjdGlvbnMuYWJjCiBpbXBvcnQgcmUKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgaW1wCiBpbXBvcnQgdGltZQogaW1wb3J0IHN5c2NvbmZpZwogaW1wb3J0IGZubWF0Y2gKQEAgLTU3LDI2ICs1Nyw0OSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGx6bWEgPSBOb25lCiAKK3RyeToKKyAgICBpbXBvcnQgcmVzb3VyY2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICByZXNvdXJjZSA9IE5vbmUKKwogX19hbGxfXyA9IFsKLSAgICAiRXJyb3IiLCAiVGVzdEZhaWxlZCIsICJSZXNvdXJjZURlbmllZCIsICJpbXBvcnRfbW9kdWxlIiwgInZlcmJvc2UiLAotICAgICJ1c2VfcmVzb3VyY2VzIiwgIm1heF9tZW11c2UiLCAicmVjb3JkX29yaWdpbmFsX3N0ZG91dCIsCi0gICAgImdldF9vcmlnaW5hbF9zdGRvdXQiLCAidW5sb2FkIiwgInVubGluayIsICJybXRyZWUiLCAiZm9yZ2V0IiwKKyAgICAjIGdsb2JhbHMKKyAgICAiUElQRV9NQVhfU0laRSIsICJ2ZXJib3NlIiwgIm1heF9tZW11c2UiLCAidXNlX3Jlc291cmNlcyIsICJmYWlsZmFzdCIsCisgICAgIyBleGNlcHRpb25zCisgICAgIkVycm9yIiwgIlRlc3RGYWlsZWQiLCAiUmVzb3VyY2VEZW5pZWQiLAorICAgICMgaW1wb3J0cworICAgICJpbXBvcnRfbW9kdWxlIiwgImltcG9ydF9mcmVzaF9tb2R1bGUiLCAiQ2xlYW5JbXBvcnQiLAorICAgICMgbW9kdWxlcworICAgICJ1bmxvYWQiLCAiZm9yZ2V0IiwKKyAgICAjIGlvCisgICAgInJlY29yZF9vcmlnaW5hbF9zdGRvdXQiLCAiZ2V0X29yaWdpbmFsX3N0ZG91dCIsICJjYXB0dXJlZF9zdGRvdXQiLAorICAgICJjYXB0dXJlZF9zdGRpbiIsICJjYXB0dXJlZF9zdGRlcnIiLAorICAgICMgZmlsZXN5c3RlbQorICAgICJURVNURk4iLCAiU0FWRURDV0QiLCAidW5saW5rIiwgInJtdHJlZSIsICJ0ZW1wX2N3ZCIsICJmaW5kZmlsZSIsCisgICAgImNyZWF0ZV9lbXB0eV9maWxlIiwgImNhbl9zeW1saW5rIiwgImZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUiLAorICAgICMgdW5pdHRlc3QKICAgICAiaXNfcmVzb3VyY2VfZW5hYmxlZCIsICJyZXF1aXJlcyIsICJyZXF1aXJlc19mcmVlYnNkX3ZlcnNpb24iLAotICAgICJyZXF1aXJlc19saW51eF92ZXJzaW9uIiwgInJlcXVpcmVzX21hY192ZXIiLCAiZmluZF91bnVzZWRfcG9ydCIsCi0gICAgImJpbmRfcG9ydCIsICJJUFY2X0VOQUJMRUQiLCAiaXNfanl0aG9uIiwgIlRFU1RGTiIsICJIT1NUIiwgIlNBVkVEQ1dEIiwKLSAgICAidGVtcF9jd2QiLCAiZmluZGZpbGUiLCAiY3JlYXRlX2VtcHR5X2ZpbGUiLCAic29ydGRpY3QiLAotICAgICJjaGVja19zeW50YXhfZXJyb3IiLCAib3Blbl91cmxyZXNvdXJjZSIsICJjaGVja193YXJuaW5ncyIsICJDbGVhbkltcG9ydCIsCi0gICAgIkVudmlyb25tZW50VmFyR3VhcmQiLCAiVHJhbnNpZW50UmVzb3VyY2UiLCAiY2FwdHVyZWRfc3Rkb3V0IiwKLSAgICAiY2FwdHVyZWRfc3RkaW4iLCAiY2FwdHVyZWRfc3RkZXJyIiwgInRpbWVfb3V0IiwgInNvY2tldF9wZWVyX3Jlc2V0IiwKLSAgICAiaW9lcnJvcl9wZWVyX3Jlc2V0IiwgInJ1bl93aXRoX2xvY2FsZSIsICd0ZW1wX3VtYXNrJywKLSAgICAidHJhbnNpZW50X2ludGVybmV0IiwgInNldF9tZW1saW1pdCIsICJiaWdtZW10ZXN0IiwgImJpZ2FkZHJzcGFjZXRlc3QiLAotICAgICJCYXNpY1Rlc3RSdW5uZXIiLCAicnVuX3VuaXR0ZXN0IiwgInJ1bl9kb2N0ZXN0IiwgInRocmVhZGluZ19zZXR1cCIsCi0gICAgInRocmVhZGluZ19jbGVhbnVwIiwgInJlYXBfY2hpbGRyZW4iLCAiY3B5dGhvbl9vbmx5IiwgImNoZWNrX2ltcGxfZGV0YWlsIiwKLSAgICAiZ2V0X2F0dHJpYnV0ZSIsICJzd2FwX2l0ZW0iLCAic3dhcF9hdHRyIiwgInJlcXVpcmVzX0lFRUVfNzU0IiwKLSAgICAiVGVzdEhhbmRsZXIiLCAiTWF0Y2hlciIsICJjYW5fc3ltbGluayIsICJza2lwX3VubGVzc19zeW1saW5rIiwKLSAgICAic2tpcF91bmxlc3NfeGF0dHIiLCAiaW1wb3J0X2ZyZXNoX21vZHVsZSIsICJyZXF1aXJlc196bGliIiwKLSAgICAiUElQRV9NQVhfU0laRSIsICJmYWlsZmFzdCIsICJhbnRpY2lwYXRlX2ZhaWx1cmUiLCAicnVuX3dpdGhfdHoiLAotICAgICJyZXF1aXJlc19nemlwIiwgInJlcXVpcmVzX2J6MiIsICJyZXF1aXJlc19sem1hIiwgInN1cHByZXNzX2NyYXNoX3BvcHVwIiwKKyAgICAicmVxdWlyZXNfbGludXhfdmVyc2lvbiIsICJyZXF1aXJlc19tYWNfdmVyIiwgImNoZWNrX3N5bnRheF9lcnJvciIsCisgICAgIlRyYW5zaWVudFJlc291cmNlIiwgInRpbWVfb3V0IiwgInNvY2tldF9wZWVyX3Jlc2V0IiwgImlvZXJyb3JfcGVlcl9yZXNldCIsCisgICAgInRyYW5zaWVudF9pbnRlcm5ldCIsICJCYXNpY1Rlc3RSdW5uZXIiLCAicnVuX3VuaXR0ZXN0IiwgInJ1bl9kb2N0ZXN0IiwKKyAgICAic2tpcF91bmxlc3Nfc3ltbGluayIsICJyZXF1aXJlc19nemlwIiwgInJlcXVpcmVzX2J6MiIsICJyZXF1aXJlc19sem1hIiwKKyAgICAiYmlnbWVtdGVzdCIsICJiaWdhZGRyc3BhY2V0ZXN0IiwgImNweXRob25fb25seSIsICJnZXRfYXR0cmlidXRlIiwKKyAgICAicmVxdWlyZXNfSUVFRV83NTQiLCAic2tpcF91bmxlc3NfeGF0dHIiLCAicmVxdWlyZXNfemxpYiIsCisgICAgImFudGljaXBhdGVfZmFpbHVyZSIsCisgICAgIyBzeXMKKyAgICAiaXNfanl0aG9uIiwgImNoZWNrX2ltcGxfZGV0YWlsIiwKKyAgICAjIG5ldHdvcmsKKyAgICAiSE9TVCIsICJJUFY2X0VOQUJMRUQiLCAiZmluZF91bnVzZWRfcG9ydCIsICJiaW5kX3BvcnQiLCAib3Blbl91cmxyZXNvdXJjZSIsCisgICAgIyBwcm9jZXNzZXMKKyAgICAndGVtcF91bWFzaycsICJyZWFwX2NoaWxkcmVuIiwKKyAgICAjIGxvZ2dpbmcKKyAgICAiVGVzdEhhbmRsZXIiLAorICAgICMgdGhyZWFkcworICAgICJ0aHJlYWRpbmdfc2V0dXAiLCAidGhyZWFkaW5nX2NsZWFudXAiLAorICAgICMgbWlzY2VsbGFuZW91cworICAgICJjaGVja193YXJuaW5ncyIsICJFbnZpcm9ubWVudFZhckd1YXJkIiwgInJ1bl93aXRoX2xvY2FsZSIsICJzd2FwX2l0ZW0iLAorICAgICJzd2FwX2F0dHIiLCAiTWF0Y2hlciIsICJzZXRfbWVtbGltaXQiLCAiU3VwcHJlc3NDcmFzaFJlcG9ydCIsICJzb3J0ZGljdCIsCisgICAgInJ1bl93aXRoX3R6IiwKICAgICBdCiAKIGNsYXNzIEVycm9yKEV4Y2VwdGlvbik6CkBAIC05OCw3ICsxMjEsOCBAQAogICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBzdXBwcmVzcyBwYWNrYWdlIGFuZCBtb2R1bGUgZGVwcmVjYXRpb24KICAgICB3YXJuaW5ncyB3aGVuIGltcG9ydGluZyB0aGVtLgogCi0gICAgSWYgaWdub3JlIGlzIEZhbHNlLCB0aGlzIGNvbnRleHQgbWFuYWdlciBoYXMgbm8gZWZmZWN0LiIiIgorICAgIElmIGlnbm9yZSBpcyBGYWxzZSwgdGhpcyBjb250ZXh0IG1hbmFnZXIgaGFzIG5vIGVmZmVjdC4KKyAgICAiIiIKICAgICBpZiBpZ25vcmU6CiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiLisgKG1vZHVsZXxwYWNrYWdlKSIsCkBAIC0xMDgsMTYgKzEzMiwyMSBAQAogICAgICAgICB5aWVsZAogCiAKLWRlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UpOgorZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSwgKiwgcmVxdWlyZWRfb249KCkpOgogICAgICIiIkltcG9ydCBhbmQgcmV0dXJuIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLCByYWlzaW5nIFNraXBUZXN0IGlmCiAgICAgaXQgaXMgbm90IGF2YWlsYWJsZS4KIAogICAgIElmIGRlcHJlY2F0ZWQgaXMgVHJ1ZSwgYW55IG1vZHVsZSBvciBwYWNrYWdlIGRlcHJlY2F0aW9uIG1lc3NhZ2VzCi0gICAgd2lsbCBiZSBzdXBwcmVzc2VkLiIiIgorICAgIHdpbGwgYmUgc3VwcHJlc3NlZC4gSWYgYSBtb2R1bGUgaXMgcmVxdWlyZWQgb24gYSBwbGF0Zm9ybSBidXQgb3B0aW9uYWwgZm9yCisgICAgb3RoZXJzLCBzZXQgcmVxdWlyZWRfb24gdG8gYW4gaXRlcmFibGUgb2YgcGxhdGZvcm0gcHJlZml4ZXMgd2hpY2ggd2lsbCBiZQorICAgIGNvbXBhcmVkIGFnYWluc3Qgc3lzLnBsYXRmb3JtLgorICAgICIiIgogICAgIHdpdGggX2lnbm9yZV9kZXByZWNhdGVkX2ltcG9ydHMoZGVwcmVjYXRlZCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgodHVwbGUocmVxdWlyZWRfb24pKToKKyAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3Qoc3RyKG1zZykpCiAKIApAQCAtMzAzLDI1ICszMzIsMjAgQEAKIGRlZiB1bmxpbmsoZmlsZW5hbWUpOgogICAgIHRyeToKICAgICAgICAgX3VubGluayhmaWxlbmFtZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAgICAgIyBUaGUgZmlsZW5hbWUgbmVlZCBub3QgZXhpc3QuCi0gICAgICAgIGlmIGVycm9yLmVycm5vIG5vdCBpbiAoZXJybm8uRU5PRU5ULCBlcnJuby5FTk9URElSKToKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IChGaWxlTm90Rm91bmRFcnJvciwgTm90QURpcmVjdG9yeUVycm9yKToKKyAgICAgICAgcGFzcwogCiBkZWYgcm1kaXIoZGlybmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBfcm1kaXIoZGlybmFtZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAgICAgIyBUaGUgZGlyZWN0b3J5IG5lZWQgbm90IGV4aXN0LgotICAgICAgICBpZiBlcnJvci5lcnJubyAhPSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgcGFzcwogCiBkZWYgcm10cmVlKHBhdGgpOgogICAgIHRyeToKICAgICAgICAgX3JtdHJlZShwYXRoKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICBpZiBlcnJvci5lcnJubyAhPSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgcGFzcwogCiBkZWYgbWFrZV9sZWdhY3lfcHljKHNvdXJjZSk6CiAgICAgIiIiTW92ZSBhIFBFUCAzMTQ3IHB5Yy9weW8gZmlsZSB0byBpdHMgbGVnYWN5IHB5Yy9weW8gbG9jYXRpb24uCkBAIC0zMzMsNyArMzU3LDcgQEAKICAgICAgICAgZG9lcyBub3QgbmVlZCB0byBleGlzdCwgaG93ZXZlciB0aGUgUEVQIDMxNDcgcHljIGZpbGUgbXVzdCBleGlzdC4KICAgICA6cmV0dXJuOiBUaGUgZmlsZSBzeXN0ZW0gcGF0aCB0byB0aGUgbGVnYWN5IHB5YyBmaWxlLgogICAgICIiIgotICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICB1cF9vbmUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHNvdXJjZSkpCiAgICAgbGVnYWN5X3B5YyA9IG9zLnBhdGguam9pbih1cF9vbmUsIHNvdXJjZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKSkKICAgICBvcy5yZW5hbWUocHljX2ZpbGUsIGxlZ2FjeV9weWMpCkBAIC0zNTIsOCArMzc2LDggQEAKICAgICAgICAgIyBjb21iaW5hdGlvbnMgb2YgUEVQIDMxNDcgYW5kIGxlZ2FjeSBweWMgYW5kIHB5byBmaWxlcy4KICAgICAgICAgdW5saW5rKHNvdXJjZSArICdjJykKICAgICAgICAgdW5saW5rKHNvdXJjZSArICdvJykKLSAgICAgICAgdW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPVRydWUpKQotICAgICAgICB1bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQorICAgICAgICB1bmxpbmsoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKKyAgICAgICAgdW5saW5rKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQogCiAjIE9uIHNvbWUgcGxhdGZvcm1zLCBzaG91bGQgbm90IHJ1biBndWkgdGVzdCBldmVuIGlmIGl0IGlzIGFsbG93ZWQKICMgaW4gYHVzZV9yZXNvdXJjZXMnLgpAQCAtNTE0LDcgKzUzOCw3IEBACiAgICAgdGhlIFNPX1JFVVNFQUREUiBzb2NrZXQgb3B0aW9uIGhhdmluZyBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIFdpbmRvd3MgdmVyc3VzCiAgICAgVW5peC9MaW51eC4gIE9uIFVuaXgsIHlvdSBjYW4ndCBoYXZlIHR3byBBRl9JTkVUIFNPQ0tfU1RSRUFNIHNvY2tldHMgYmluZCwKICAgICBsaXN0ZW4gYW5kIHRoZW4gYWNjZXB0IGNvbm5lY3Rpb25zIG9uIGlkZW50aWNhbCBob3N0L3BvcnRzLiAgQW4gRUFERFJJTlVTRQotICAgIHNvY2tldC5lcnJvciB3aWxsIGJlIHJhaXNlZCBhdCBzb21lIHBvaW50IChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZAorICAgIE9TRXJyb3Igd2lsbCBiZSByYWlzZWQgYXQgc29tZSBwb2ludCAoZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQKICAgICB0aGUgb3JkZXIgYmluZCBhbmQgbGlzdGVuIHdlcmUgY2FsbGVkIG9uIGVhY2ggc29ja2V0KS4KIAogICAgIEhvd2V2ZXIsIG9uIFdpbmRvd3MsIGlmIFNPX1JFVVNFQUREUiBpcyBzZXQgb24gdGhlIHNvY2tldHMsIG5vIEVBRERSSU5VU0UKQEAgLTU5Miw5ICs2MTYsOSBAQAogICAgICAgICBzb2NrID0gTm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgICAgIHNvY2suYmluZCgoJzo6MScsIDApKQorICAgICAgICAgICAgc29jay5iaW5kKChIT1NUdjYsIDApKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNvY2tldC5nYWllcnJvcik6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgc29jazoKQEAgLTExODEsOSArMTIwNSw5IEBACiAjIENvbnRleHQgbWFuYWdlcnMgdGhhdCByYWlzZSBSZXNvdXJjZURlbmllZCB3aGVuIHZhcmlvdXMgaXNzdWVzCiAjIHdpdGggdGhlIEludGVybmV0IGNvbm5lY3Rpb24gbWFuaWZlc3QgdGhlbXNlbHZlcyBhcyBleGNlcHRpb25zLgogIyBYWFggZGVwcmVjYXRlIHRoZXNlIGFuZCB1c2UgdHJhbnNpZW50X2ludGVybmV0KCkgaW5zdGVhZAotdGltZV9vdXQgPSBUcmFuc2llbnRSZXNvdXJjZShJT0Vycm9yLCBlcnJubz1lcnJuby5FVElNRURPVVQpCi1zb2NrZXRfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKHNvY2tldC5lcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKLWlvZXJyb3JfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVDT05OUkVTRVQpCit0aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKE9TRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKK3NvY2tldF9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKK2lvZXJyb3JfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKE9TRXJyb3IsIGVycm5vPWVycm5vLkVDT05OUkVTRVQpCiAKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKQEAgLTEyMjksMTcgKzEyNTMsMTcgQEAKICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCh0aW1lb3V0KQogICAgICAgICB5aWVsZAotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICMgdXJsbGliIGNhbiB3cmFwIG9yaWdpbmFsIHNvY2tldCBlcnJvcnMgbXVsdGlwbGUgdGltZXMgKCEpLCB3ZSBtdXN0CiAgICAgICAgICMgdW53cmFwIHRvIGdldCBhdCB0aGUgb3JpZ2luYWwgZXJyb3IuCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBhID0gZXJyLmFyZ3MKLSAgICAgICAgICAgIGlmIGxlbihhKSA+PSAxIGFuZCBpc2luc3RhbmNlKGFbMF0sIElPRXJyb3IpOgorICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgZXJyID0gYVswXQogICAgICAgICAgICAgIyBUaGUgZXJyb3IgY2FuIGFsc28gYmUgd3JhcHBlZCBhcyBhcmdzWzFdOgogICAgICAgICAgICAgIyAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICMgICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCi0gICAgICAgICAgICBlbGlmIGxlbihhKSA+PSAyIGFuZCBpc2luc3RhbmNlKGFbMV0sIElPRXJyb3IpOgorICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgT1NFcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgZXJyID0gYVsxXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBicmVhawpAQCAtMTY5Nyw5ICsxNzIxLDE4IEBACiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBkb2NzdHJpbmdzLgogCi1IQVZFX0RPQ1NUUklOR1MgPSAoY2hlY2tfaW1wbF9kZXRhaWwoY3B5dGhvbj1GYWxzZSkgb3IKLSAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgotICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9ET0NfU1RSSU5HUycpKQorIyBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gZW51bWVyYXRlIGFsbCB0aGUgY2FzZXMgd2hlcmUgZG9jc3RyaW5ncyBtYXkgYmUKKyMgZGlzYWJsZWQsIHdlIGp1c3QgY2hlY2sgZm9yIHRoYXQgZGlyZWN0bHkKKworZGVmIF9jaGVja19kb2NzdHJpbmdzKCk6CisgICAgIiIiSnVzdCB1c2VkIHRvIGNoZWNrIGlmIGRvY3N0cmluZ3MgYXJlIGVuYWJsZWQiIiIKKworTUlTU0lOR19DX0RPQ1NUUklOR1MgPSAoY2hlY2tfaW1wbF9kZXRhaWwoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9ET0NfU1RSSU5HUycpKQorCitIQVZFX0RPQ1NUUklOR1MgPSAoX2NoZWNrX2RvY3N0cmluZ3MuX19kb2NfXyBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICBub3QgTUlTU0lOR19DX0RPQ1NUUklOR1MpCiAKIHJlcXVpcmVzX2RvY3N0cmluZ3MgPSB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfRE9DU1RSSU5HUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIGRvY3N0cmluZ3MiKQpAQCAtMTc3NCwxMiArMTgwNywxMiBAQAogZGVmIHRocmVhZGluZ19jbGVhbnVwKCpvcmlnaW5hbF92YWx1ZXMpOgogICAgIGlmIG5vdCBfdGhyZWFkOgogICAgICAgICByZXR1cm4KLSAgICBfTUFYX0NPVU5UID0gMTAKKyAgICBfTUFYX0NPVU5UID0gMTAwCiAgICAgZm9yIGNvdW50IGluIHJhbmdlKF9NQVhfQ09VTlQpOgogICAgICAgICB2YWx1ZXMgPSBfdGhyZWFkLl9jb3VudCgpLCB0aHJlYWRpbmcuX2RhbmdsaW5nCiAgICAgICAgIGlmIHZhbHVlcyA9PSBvcmlnaW5hbF92YWx1ZXM6CiAgICAgICAgICAgICBicmVhawotICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgdGltZS5zbGVlcCgwLjAxKQogICAgICAgICBnY19jb2xsZWN0KCkKICAgICAjIFhYWCBwcmludCBhIHdhcm5pbmcgaW4gY2FzZSBvZiBmYWlsdXJlPwogCkBAIC0xODgxLDcgKzE5MTQsNyBAQAogICAgIFRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgcnVuIG9uIHRoZSByZXN1bHQgb2YgdGhlIGNvbW11bmljYXRlKCkgbWV0aG9kCiAgICAgb2YgYSBzdWJwcm9jZXNzLlBvcGVuIG9iamVjdC4KICAgICAiIiIKLSAgICBzdGRlcnIgPSByZS5zdWIoYnIiXFtcZCsgcmVmc1xdXHI/XG4/IiwgYiIiLCBzdGRlcnIpLnN0cmlwKCkKKyAgICBzdGRlcnIgPSByZS5zdWIoYnIiXFtcZCsgcmVmcywgXGQrIGJsb2Nrc1xdXHI/XG4/IiwgYiIiLCBzdGRlcnIpLnN0cmlwKCkKICAgICByZXR1cm4gc3RkZXJyCiAKIGRlZiBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKToKQEAgLTIwMTIsMjcgKzIwNDUsODEgQEAKICAgICByZXR1cm4gdGVzdCBpZiBvayBlbHNlIHVuaXR0ZXN0LnNraXAobXNnKSh0ZXN0KQogCiAKLWlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICAgIGRlZiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAiIiJEaXNhYmxlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcgU2V0RXJyb3JNb2RlLiIiIgotICAgICAgICAjIHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxJTI4dj12cy44NSUyOS5hc3B4Ci0gICAgICAgICMgR2V0RXJyb3JNb2RlIGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cyBYUCBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwMywKLSAgICAgICAgIyBidXQgU2V0RXJyb3JNb2RlIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB3ZSBjYW4gdXNlIHRoYXQKLSAgICAgICAgaW1wb3J0IGN0eXBlcwotICAgICAgICBrMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyCi0gICAgICAgIFNFTV9OT0dQRkFVTFRFUlJPUkJPWCA9IDB4MDIKLSAgICAgICAgb2xkX2Vycm9yX21vZGUgPSBrMzIuU2V0RXJyb3JNb2RlKFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKLSAgICAgICAgazMyLlNldEVycm9yTW9kZShvbGRfZXJyb3JfbW9kZSB8IFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgeWllbGQKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGszMi5TZXRFcnJvck1vZGUob2xkX2Vycm9yX21vZGUpCi1lbHNlOgotICAgICMgdGhpcyBpcyBhIG5vLW9wIGZvciBvdGhlciBwbGF0Zm9ybXMKLSAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICAgIGRlZiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICB5aWVsZAorZGVmIGZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoZGlyZWN0b3J5KToKKyAgICAiIiJEZXRlY3RzIGlmIHRoZSBmaWxlIHN5c3RlbSBmb3IgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iIiIKKyAgICBiYXNlX2ZwLCBiYXNlX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1kaXJlY3RvcnkpCisgICAgY2FzZV9wYXRoID0gYmFzZV9wYXRoLnVwcGVyKCkKKyAgICBpZiBjYXNlX3BhdGggPT0gYmFzZV9wYXRoOgorICAgICAgICBjYXNlX3BhdGggPSBiYXNlX3BhdGgubG93ZXIoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguc2FtZWZpbGUoYmFzZV9wYXRoLCBjYXNlX3BhdGgpCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy51bmxpbmsoYmFzZV9wYXRoKQorCisKK2NsYXNzIFN1cHByZXNzQ3Jhc2hSZXBvcnQ6CisgICAgIiIiVHJ5IHRvIHByZXZlbnQgYSBjcmFzaCByZXBvcnQgZnJvbSBwb3BwaW5nIHVwLgorCisgICAgT24gV2luZG93cywgZG9uJ3QgZGlzcGxheSB0aGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9nLiAgT24gVU5JWCwKKyAgICBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBjb3JlZHVtcCBmaWxlLgorICAgICIiIgorICAgIG9sZF92YWx1ZSA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIk9uIFdpbmRvd3MsIGRpc2FibGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZworICAgICAgICBTZXRFcnJvck1vZGUuCisKKyAgICAgICAgT24gVU5JWCwgdHJ5IHRvIHNhdmUgdGhlIHByZXZpb3VzIGNvcmUgZmlsZSBzaXplIGxpbWl0LCB0aGVuIHNldAorICAgICAgICBzb2Z0IGxpbWl0IHRvIDAuCisgICAgICAgICIiIgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAjIHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxLmFzcHgKKyAgICAgICAgICAgICMgR2V0RXJyb3JNb2RlIGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cyBYUCBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwMywKKyAgICAgICAgICAgICMgYnV0IFNldEVycm9yTW9kZSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSwgc28gd2UgY2FuIHVzZSB0aGF0CisgICAgICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgICAgICBzZWxmLl9rMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyCisgICAgICAgICAgICBTRU1fTk9HUEZBVUxURVJST1JCT1ggPSAweDAyCisgICAgICAgICAgICBzZWxmLm9sZF92YWx1ZSA9IHNlbGYuX2szMi5TZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKQorICAgICAgICAgICAgc2VsZi5fazMyLlNldEVycm9yTW9kZShzZWxmLm9sZF92YWx1ZSB8IFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vbGRfdmFsdWUgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBzZWxmLm9sZF92YWx1ZVsxXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlICdDcmFzaCBSZXBvcnRlcicgb24gT1NYIHdhcyBjb25maWd1cmVkCisgICAgICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCisgICAgICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKKyAgICAgICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIHZhbHVlID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL2RlZmF1bHRzJywgJ3JlYWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbS5hcHBsZS5DcmFzaFJlcG9ydGVyJywgJ0RpYWxvZ1R5cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgICAgICBpZiB2YWx1ZS5zdHJpcCgpID09IGInZGV2ZWxvcGVyJzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoInRoaXMgdGVzdCB0cmlnZ2VycyB0aGUgQ3Jhc2ggUmVwb3J0ZXIsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYXQgaXMgaW50ZW50aW9uYWwiLCBlbmQ9JycsIGZsdXNoPVRydWUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqaWdub3JlX2V4Yyk6CisgICAgICAgICIiIlJlc3RvcmUgV2luZG93cyBFcnJvck1vZGUgb3IgY29yZSBmaWxlIGJlaGF2aW9yIHRvIGluaXRpYWwgdmFsdWUuIiIiCisgICAgICAgIGlmIHNlbGYub2xkX3ZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKHNlbGYub2xkX3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIHNlbGYub2xkX3ZhbHVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogCiBkZWYgcGF0Y2godGVzdF9pbnN0YW5jZSwgb2JqZWN0X3RvX3BhdGNoLCBhdHRyX25hbWUsIG5ld192YWx1ZSk6CkBAIC0yMDY3LDMgKzIxNTQsMjIgQEAKIAogICAgICMgYWN0dWFsbHkgb3ZlcnJpZGUgdGhlIGF0dHJpYnV0ZQogICAgIHNldGF0dHIob2JqZWN0X3RvX3BhdGNoLCBhdHRyX25hbWUsIG5ld192YWx1ZSkKKworCitkZWYgcnVuX2luX3N1YmludGVycChjb2RlKToKKyAgICAiIiIKKyAgICBSdW4gY29kZSBpbiBhIHN1YmludGVycHJldGVyLiBSYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiB0aGUgdHJhY2VtYWxsb2MKKyAgICBtb2R1bGUgaXMgZW5hYmxlZC4KKyAgICAiIiIKKyAgICAjIElzc3VlICMxMDkxNSwgIzE1NzUxOiBQeUdJTFN0YXRlXyooKSBmdW5jdGlvbnMgZG9uJ3Qgd29yayB3aXRoCisgICAgIyBzdWItaW50ZXJwcmV0ZXJzLCB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIHVzZXMgdGhlc2UgZnVuY3Rpb25zIGludGVybmFsbHkKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB0cmFjZW1hbGxvYworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJydW5faW5fc3ViaW50ZXJwKCkgY2Fubm90IGJlIHVzZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZiB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgdHJhY2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9ucyIpCisgICAgcmV0dXJuIF90ZXN0Y2FwaS5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKaW5kZXggNjA4ZWMwMS4uOGNjMjg1ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQpAQCAtMjksMTcgKzI5LDIwIEBACiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHN5cy5tb2R1bGVzW21vZG5hbWVdLCAiX19hbGxfXyIpOgogICAgICAgICAgICAgcmFpc2UgTm9BbGwobW9kbmFtZSkKICAgICAgICAgbmFtZXMgPSB7fQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGVjKCJmcm9tICVzIGltcG9ydCAqIiAlIG1vZG5hbWUsIG5hbWVzKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAjIEluY2x1ZGUgdGhlIG1vZHVsZSBuYW1lIGluIHRoZSBleGNlcHRpb24gc3RyaW5nCi0gICAgICAgICAgICBzZWxmLmZhaWwoIl9fYWxsX18gZmFpbHVyZSBpbiB7fToge306IHt9Ii5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgZS5fX2NsYXNzX18uX19uYW1lX18sIGUpKQotICAgICAgICBpZiAiX19idWlsdGluc19fIiBpbiBuYW1lczoKLSAgICAgICAgICAgIGRlbCBuYW1lc1siX19idWlsdGluc19fIl0KLSAgICAgICAga2V5cyA9IHNldChuYW1lcykKLSAgICAgICAgYWxsID0gc2V0KHN5cy5tb2R1bGVzW21vZG5hbWVdLl9fYWxsX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgYWxsKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2R1bGU9bW9kbmFtZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlYygiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lLCBuYW1lcykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdGhlIG1vZHVsZSBuYW1lIGluIHRoZSBleGNlcHRpb24gc3RyaW5nCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2FsbF9fIGZhaWx1cmUgaW4ge306IHt9OiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBlLl9fY2xhc3NfXy5fX25hbWVfXywgZSkpCisgICAgICAgICAgICBpZiAiX19idWlsdGluc19fIiBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICBkZWwgbmFtZXNbIl9fYnVpbHRpbnNfXyJdCisgICAgICAgICAgICBrZXlzID0gc2V0KG5hbWVzKQorICAgICAgICAgICAgYWxsX2xpc3QgPSBzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2FsbF9fCisgICAgICAgICAgICBhbGxfc2V0ID0gc2V0KGFsbF9saXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKGFsbF9zZXQsIGFsbF9saXN0LCAiaW4gbW9kdWxlIHt9Ii5mb3JtYXQobW9kbmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGFsbF9zZXQsICJpbiBtb2R1bGUge30iLmZvcm1hdChtb2RuYW1lKSkKIAogICAgIGRlZiB3YWxrX21vZHVsZXMoc2VsZiwgYmFzZWRpciwgbW9kcGF0aCk6CiAgICAgICAgIGZvciBmbiBpbiBzb3J0ZWQob3MubGlzdGRpcihiYXNlZGlyKSk6CkBAIC0xMTAsOCArMTEzLDUgQEAKICAgICAgICAgICAgIHByaW50KCdGb2xsb3dpbmcgbW9kdWxlcyBmYWlsZWQgdG8gYmUgaW1wb3J0ZWQ6JywgZmFpbGVkX2ltcG9ydHMpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFsbFRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUyZTlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5CkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBkaXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB1bml0dGVzdAorCitfb3Bjb2RlID0gaW1wb3J0X21vZHVsZSgiX29wY29kZSIpCisKK2NsYXNzIE9wY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YWNrX2VmZmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ1BPUF9UT1AnXSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnRFVQX1RPUF9UV08nXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAwKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAxKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAzKSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCAzMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIGRpcy5vcG1hcFsnUE9QX1RPUCddLCAwKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE9wY29kZVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CmluZGV4IGQ0ZDc1NTYuLjkzZjlkYWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CkBAIC02OCw2ICs2OCwxOSBAQAogCiBjbGFzcyBUZXN0QUJDKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X0FCQ19oZWxwZXIoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGFuIEFCQyB1c2luZyB0aGUgaGVscGVyIGNsYXNzIGFuZCBwZXJmb3JtIGJhc2ljIGNoZWNrcworICAgICAgICBjbGFzcyBDKGFiYy5BQkMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBjbHMuX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKEMpLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBzdXBlcigpLmZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5mb28oKSwgJ0QnKQorCiAgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RfYmFzaWNzKHNlbGYpOgogICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgICAgIGRlZiBmb28oc2VsZik6IHBhc3MKQEAgLTI4OCw3ICszMDEsMTAgQEAKICAgICAgICAgYiA9IEIoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgQSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCAoQSwpKSkKKyAgICAgICAgdG9rZW5fb2xkID0gYWJjLmdldF9jYWNoZV90b2tlbigpCiAgICAgICAgIEEucmVnaXN0ZXIoQikKKyAgICAgICAgdG9rZW5fbmV3ID0gYWJjLmdldF9jYWNoZV90b2tlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodG9rZW5fb2xkLCB0b2tlbl9uZXcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCAoQSwpKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9haWZjLnB5IGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CmluZGV4IGI3NzM1NGIuLjA0MWIyMzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FpZmMucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIFRFU1RGTiwgdW5saW5rCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgYXVkaW90ZXN0cworZnJvbSBhdWRpb29wIGltcG9ydCBieXRlc3dhcAogaW1wb3J0IG9zCiBpbXBvcnQgaW8KIGltcG9ydCBzeXMKQEAgLTgsMTAgKzksMTcgQEAKIGltcG9ydCBhaWZjCiAKIAotY2xhc3MgQWlmY1BDTThUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAotICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQWlmY1Rlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCisgICAgICAgICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSk6CiAgICAgbW9kdWxlID0gYWlmYworICAgIGNsb3NlX2ZkID0gVHJ1ZQorICAgIHRlc3RfdW5zZWVrYWJsZV9yZWFkID0gTm9uZQorICAgIHRlc3RfdW5zZWVrYWJsZV93cml0ZSA9IE5vbmUKKyAgICB0ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUgPSBOb25lCisgICAgdGVzdF91bnNlZWthYmxlX292ZXJmbG93ZWRfd3JpdGUgPSBOb25lCisKKworY2xhc3MgQWlmY1BDTThUZXN0KEFpZmNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtOC5haWZmJwogICAgIHNuZGZpbGVuZnJhbWVzID0gMzMwNwogICAgIG5jaGFubmVscyA9IDIKQEAgLTI2LDEzICszNCw5IEBACiAgICAgICAxMUZBIDNFRkIgQkNGQyA2NkZGIENGMDQgNDMwOSBDMTBFIDUxMTIgRUUxNyA4MjE2IDdGMTQgODAxMiBcCiAgICAgICA0OTBFIDUyMEQgRUYwRiBDRTBGIEU0MEMgNjMwQSAwODBBIDJCMEIgNTEwRSA4QjExIEI2MEUgNDQwQSBcCiAgICAgICAiIiIpCi0gICAgY2xvc2VfZmQgPSBUcnVlCiAKIAotY2xhc3MgQWlmY1BDTTE2VGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKLSAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUsCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtb2R1bGUgPSBhaWZjCitjbGFzcyBBaWZjUENNMTZUZXN0KEFpZmNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtMTYuYWlmZicKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKICAgICBuY2hhbm5lbHMgPSAyCkBAIC00OSwxMyArNTMsOSBAQAogICAgICAgRUVFMjE3NTMgODIwNzE2NjUgN0ZGRjE0NDMgODAwNDEyOEYgNDlBMjBFQUYgNTJCQjBEQkEgRUZCNDBGNjAgQ0UzQzBGQkYgXAogICAgICAgRTRCMzBDRUMgNjM0MzBBNUMgMDhDODBBMjAgMkJCQjBCMDggNTE0QTBFNDMgOEJDRjExMzkgQjZGNjBFRUIgNDQxMjBBNUUgXAogICAgICAgIiIiKQotICAgIGNsb3NlX2ZkID0gVHJ1ZQogCiAKLWNsYXNzIEFpZmNQQ00yNFRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCi0gICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbW9kdWxlID0gYWlmYworY2xhc3MgQWlmY1BDTTI0VGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNuZGZpbGVuYW1lID0gJ3BsdWNrLXBjbTI0LmFpZmYnCiAgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CiAgICAgbmNoYW5uZWxzID0gMgpAQCAtNzgsMTMgKzc4LDkgQEAKICAgICAgIEU0QjQ5QzBDRUEyRCA2MzQ0QTgwQTVBN0MgMDhDOEZFMEExRkZFIDJCQjk4NjBCMEEwRSBcCiAgICAgICA1MTQ4NkYwRTQ0RTEgOEJDQzY0MTEzQjA1IEI2RjRFQzBFRUIzNiA0NDEzMTcwQTVCNDggXAogICAgICAgIiIiKQotICAgIGNsb3NlX2ZkID0gVHJ1ZQogCiAKLWNsYXNzIEFpZmNQQ00zMlRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCi0gICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbW9kdWxlID0gYWlmYworY2xhc3MgQWlmY1BDTTMyVGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNuZGZpbGVuYW1lID0gJ3BsdWNrLXBjbTMyLmFpZmYnCiAgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CiAgICAgbmNoYW5uZWxzID0gMgpAQCAtMTA3LDEzICsxMDMsOSBAQAogICAgICAgRTRCNDlDQzAwQ0VBMkQ5MCA2MzQ0QTg4MDBBNUE3Q0EwIDA4QzhGRTgwMEExRkZFRTAgMkJCOTg2QzAwQjBBMEUwMCBcCiAgICAgICA1MTQ4NkY4MDBFNDRFMTkwIDhCQ0M2NDgwMTEzQjA1ODAgQjZGNEVDMDAwRUVCMzYzMCA0NDEzMTc4MDBBNUI0OEEwIFwKICAgICAgICIiIikKLSAgICBjbG9zZV9mZCA9IFRydWUKIAogCi1jbGFzcyBBaWZjVUxBV1Rlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCi0gICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbW9kdWxlID0gYWlmYworY2xhc3MgQWlmY1VMQVdUZXN0KEFpZmNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stdWxhdy5haWZjJwogICAgIHNuZGZpbGVuZnJhbWVzID0gMzMwNwogICAgIG5jaGFubmVscyA9IDIKQEAgLTEzMSwxNCArMTIzLDEwIEBACiAgICAgICBFNTA0MENCQyA2MTdDMEEzQyAwOEJDMEEzQyAyQzdDMEIzQyA1MTdDMEUzQyA4QTg0MTBGQyBCNjg0MEVCQyA0NTdDMEEzQyBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQotICAgIGNsb3NlX2ZkID0gVHJ1ZQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAotY2xhc3MgQWlmY0FMQVdUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAotICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1vZHVsZSA9IGFpZmMKK2NsYXNzIEFpZmNBTEFXVGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNuZGZpbGVuYW1lID0gJ3BsdWNrLWFsYXcuYWlmYycKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKICAgICBuY2hhbm5lbHMgPSAyCkBAIC0xNTYsOCArMTQ0LDcgQEAKICAgICAgIEU0ODAwQ0MwIDYyMDAwQTQwIDA4QzAwQTQwIDJCMDAwQjQwIDUyMDAwRTQwIDhBMDAxMTgwIEI2MDAwRUMwIDQ2MDAwQTQwIFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMihmcmFtZXMpCi0gICAgY2xvc2VfZmQgPSBUcnVlCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCiBjbGFzcyBBaWZjTWlzY1Rlc3QoYXVkaW90ZXN0cy5BdWRpb1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNjYsNiArMTUzLDIxIEBACiAgICAgICAgICNUaGlzIGZpbGUgY29udGFpbnMgY2h1bmsgdHlwZXMgYWlmYyBkb2Vzbid0IHJlY29nbml6ZS4KICAgICAgICAgc2VsZi5mID0gYWlmYy5vcGVuKGZpbmRmaWxlKCdTaW5lLTEwMDBIei0zMDBtcy5haWYnKSkKIAorICAgIGRlZiB0ZXN0X3BhcmFtc19hZGRlZChzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihURVNURk4sICd3YicpCisgICAgICAgIGYuYWlmZigpCisgICAgICAgIGYuc2V0cGFyYW1zKCgxLCAxLCAxLCAxLCBiJ05PTkUnLCBiJycpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIGYuZ2V0bmNoYW5uZWxzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgZi5nZXRzYW1wd2lkdGgoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBmLmdldGZyYW1lcmF0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uZnJhbWVzLCBmLmdldG5mcmFtZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcHR5cGUsIGYuZ2V0Y29tcHR5cGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcG5hbWUsIGYuZ2V0Y29tcG5hbWUoKSkKKwogICAgIGRlZiB0ZXN0X3dyaXRlX2hlYWRlcl9jb21wdHlwZV9zYW1wd2lkdGgoc2VsZik6CiAgICAgICAgIGZvciBjb21wdHlwZSBpbiAoYidVTEFXJywgYid1bGF3JywgYidBTEFXJywgYidhbGF3JywgYidHNzIyJyk6CiAgICAgICAgICAgICBmb3V0ID0gYWlmYy5vcGVuKGlvLkJ5dGVzSU8oKSwgJ3diJykKQEAgLTM2OSwxMiArMzcxLDE0IEBACiAKICAgICBkZWYgdGVzdF93cml0ZV9haWZmX2J5X2V4dGVuc2lvbihzZWxmKToKICAgICAgICAgc2FtcHdpZHRoID0gMgotICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiArICcuYWlmZicsICd3YicpCisgICAgICAgIGZpbGVuYW1lID0gVEVTVEZOICsgJy5haWZmJworICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKGZpbGVuYW1lLCAnd2InKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBmaWxlbmFtZSkKICAgICAgICAgZm91dC5zZXRwYXJhbXMoKDEsIHNhbXB3aWR0aCwgMSwgMSwgYidVTEFXJywgYicnKSkKICAgICAgICAgZnJhbWVzID0gYidceDAwJyAqIGZvdXQuZ2V0bmNoYW5uZWxzKCkgKiBzYW1wd2lkdGgKICAgICAgICAgZm91dC53cml0ZWZyYW1lcyhmcmFtZXMpCiAgICAgICAgIGZvdXQuY2xvc2UoKQotICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKFRFU1RGTiArICcuYWlmZicsICdyYicpCisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oZmlsZW5hbWUsICdyYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRjb21wdHlwZSgpLCBiJ05PTkUnKQogICAgICAgICBmLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKaW5kZXggYzA2Yzk0MC4uYzEwYzU5MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CkBAIC0xNCw2ICsxNCw3IEBACiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIGNsYXNzIFN0ZElPQnVmZmVyKFN0cmluZ0lPKToKICAgICBwYXNzCiAKQEAgLTE0MjEsNiArMTQyMiwxOSBAQAogICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3diJywgMSkiLCByZXByKHR5cGUpKQogCisgICAgZGVmIHRlc3Rfcl9sYXRpbihzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCdyJywgZW5jb2Rpbmc9J2xhdGluXzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicsIGVuY29kaW5nPSdsYXRpbl8xJykiLCByZXByKHR5cGUpKQorCisgICAgZGVmIHRlc3Rfd19iaWc1X2lnbm9yZShzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCd3JywgZW5jb2Rpbmc9J2JpZzUnLCBlcnJvcnM9J2lnbm9yZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCd3JywgZW5jb2Rpbmc9J2JpZzUnLCBlcnJvcnM9J2lnbm9yZScpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHR5cGUpKQorCisgICAgZGVmIHRlc3Rfcl8xX3JlcGxhY2Uoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgncicsIDEsIGVycm9ycz0ncmVwbGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCdyJywgMSwgZXJyb3JzPSdyZXBsYWNlJykiLCByZXByKHR5cGUpKQorCiAKIGNsYXNzIFJGaWxlKG9iamVjdCk6CiAgICAgc2VlbiA9IHt9CkBAIC0xNTU3LDYgKzE1NzEsMjQgQEAKICAgICBdCiAKIAorY2xhc3MgVGVzdEZpbGVUeXBlT3BlbkFyZ3MoVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcGVuICh0aGUgYnVpbHRpbikgaXMgY29ycmVjdGx5IGNhbGxlZCIiIgorCisgICAgZGVmIHRlc3Rfb3Blbl9hcmdzKHNlbGYpOgorICAgICAgICBGVCA9IGFyZ3BhcnNlLkZpbGVUeXBlCisgICAgICAgIGNhc2VzID0gWworICAgICAgICAgICAgKEZUKCdyYicpLCAoJ3JiJywgLTEsIE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgIChGVCgndycsIDEpLCAoJ3cnLCAxLCBOb25lLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCBlcnJvcnM9J3JlcGxhY2UnKSwgKCd3JywgLTEsIE5vbmUsICdyZXBsYWNlJykpLAorICAgICAgICAgICAgKEZUKCd3YicsIGVuY29kaW5nPSdiaWc1JyksICgnd2InLCAtMSwgJ2JpZzUnLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCAwLCAnbDEnLCAnc3RyaWN0JyksICgndycsIDAsICdsMScsICdzdHJpY3QnKSksCisgICAgICAgIF0KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdidWlsdGlucy5vcGVuJykgYXMgbToKKyAgICAgICAgICAgIGZvciB0eXBlLCBhcmdzIGluIGNhc2VzOgorICAgICAgICAgICAgICAgIHR5cGUoJ2ZvbycpCisgICAgICAgICAgICAgICAgbS5hc3NlcnRfY2FsbGVkX3dpdGgoJ2ZvbycsICphcmdzKQorCisKIGNsYXNzIFRlc3RUeXBlQ2FsbGFibGUoUGFyc2VyVGVzdENhc2UpOgogICAgICIiIlRlc3Qgc29tZSBjYWxsYWJsZXMgYXMgb3B0aW9uL2FyZ3VtZW50IHR5cGVzIiIiCiAKQEAgLTQzMjcsNyArNDM1OSw3IEBACiAgICAgZGVmIHRlc3RfdmVyc2lvbl9mb3JtYXQoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BQUCcpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JyUocHJvZylzIDMuNScpCi0gICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRlcnIKKyAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy12J10pLnN0ZG91dAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdQUFAgMy41XG4nLCBtc2cpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX25vX2hlbHAoc2VsZik6CkBAIC00MzQwLDcgKzQzNzIsNyBAQAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fYWN0aW9uKHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdYWFgnKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctVicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JyUocHJvZylzIDMuNycpCi0gICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctViddKS5zdGRlcnIKKyAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZG91dAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYWFggMy43XG4nLCBtc2cpCiAKICAgICBkZWYgdGVzdF9ub19oZWxwKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weSBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKaW5kZXggY2NjYjcwNS4uNDk3OGM0NCAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CkBAIC0zNTQsMTIgKzM1NCwxMiBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9mcm9tZmlsZV9pb2Vycm9yKHNlbGYpOgotICAgICAgICAjIElzc3VlICM1Mzk1OiBDaGVjayBpZiBmcm9tZmlsZSByYWlzZXMgYSBwcm9wZXIgSU9FcnJvcgorICAgICAgICAjIElzc3VlICM1Mzk1OiBDaGVjayBpZiBmcm9tZmlsZSByYWlzZXMgYSBwcm9wZXIgT1NFcnJvcgogICAgICAgICAjIGluc3RlYWQgb2YgRU9GRXJyb3IuCiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQogICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYS5mcm9tZmlsZSwgZiwgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBhLmZyb21maWxlLCBmLCBsZW4oc2VsZi5leGFtcGxlKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CmluZGV4IDYzNTI4ODguLmU2OTQyMmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CkBAIC0xODAsMjAgKzE4MCwzNiBAQAogCiBjbGFzcyBBU1RfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIF9hc3NlcnRUcnVlb3JkZXIoc2VsZiwgYXN0X25vZGUsIHBhcmVudF9wb3MpOgorICAgIGRlZiBfYXNzZXJ0VHJ1ZW9yZGVyKHNlbGYsIGFzdF9ub2RlLCBwYXJlbnRfcG9zLCByZXZlcnNlX2NoZWNrID0gRmFsc2UpOgorICAgICAgICBkZWYgc2hvdWxkX3JldmVyc2VfY2hlY2socGFyZW50LCBjaGlsZCk6CisgICAgICAgICAgICAjIEluIHNvbWUgc2l0dWF0aW9ucywgdGhlIGNoaWxkcmVuIG9mIG5vZGVzIG9jY3VyIGJlZm9yZQorICAgICAgICAgICAgIyB0aGVpciBwYXJlbnRzLCBmb3IgZXhhbXBsZSBpbiBhLmIuYywgYSBvY2N1cnMgYmVmb3JlIGIKKyAgICAgICAgICAgICMgYnV0IGEgaXMgYSBjaGlsZCBvZiBiLgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJlbnQsIGFzdC5DYWxsKToKKyAgICAgICAgICAgICAgICBpZiBwYXJlbnQuZnVuYyA9PSBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyZW50LCAoYXN0LkF0dHJpYnV0ZSwgYXN0LlN1YnNjcmlwdCkpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhc3Rfbm9kZSwgYXN0LkFTVCkgb3IgYXN0X25vZGUuX2ZpZWxkcyBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXN0X25vZGUsIChhc3QuZXhwciwgYXN0LnN0bXQsIGFzdC5leGNlcHRoYW5kbGVyKSk6CiAgICAgICAgICAgICBub2RlX3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZV9wb3MgPj0gcGFyZW50X3BvcykKKyAgICAgICAgICAgIGlmIHJldmVyc2VfY2hlY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGVfcG9zIDw9IHBhcmVudF9wb3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA+PSBwYXJlbnRfcG9zKQogICAgICAgICAgICAgcGFyZW50X3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCiAgICAgICAgIGZvciBuYW1lIGluIGFzdF9ub2RlLl9maWVsZHM6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoYXN0X25vZGUsIG5hbWUpCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcihjaGlsZCwgcGFyZW50X3BvcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGNoaWxkLCBwYXJlbnRfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRfcmV2ZXJzZV9jaGVjayhhc3Rfbm9kZSwgY2hpbGQpKQogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIodmFsdWUsIHBhcmVudF9wb3MpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKHZhbHVlLCBwYXJlbnRfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRfcmV2ZXJzZV9jaGVjayhhc3Rfbm9kZSwgdmFsdWUpKQogCiAgICAgZGVmIHRlc3RfQVNUX29iamVjdHMoc2VsZik6CiAgICAgICAgIHggPSBhc3QuQVNUKCkKQEAgLTI2MiwxNCArMjc4LDE0IEBACiAKICAgICBkZWYgdGVzdF9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnYXJncycsICd2YXJhcmcnLCAndmFyYXJnYW5ub3RhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd29ubHlhcmdzJywgJ2t3YXJnJywgJ2t3YXJnYW5ub3RhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0cycsICdrd19kZWZhdWx0cycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCdhcmdzJywgJ3ZhcmFyZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd29ubHlhcmdzJywgJ2t3X2RlZmF1bHRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3YXJnJywgJ2RlZmF1bHRzJykpCiAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICB4LnZhcmFyZwogCi0gICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCpyYW5nZSgxLCA5KSkKKyAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoKnJhbmdlKDEsIDcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFyYXJnLCAyKQogCiAgICAgZGVmIHRlc3RfZmllbGRfYXR0cl93cml0YWJsZShzZWxmKToKQEAgLTQzOSw3ICs0NTUsNyBAQAogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBhcmdzPVtOYW1lKGlkPSdlZ2dzJywgY3R4PUxvYWQoKSwgIgogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTUpLCBTdHIocz0nYW5kIGNoZWVzZScsIGxpbmVubz0xLCAiCiAgICAgICAgICAgICAiY29sX29mZnNldD0xMSldLCBrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsICIKLSAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldKSIKKyAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD00KSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldKSIKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfY29weV9sb2NhdGlvbihzZWxmKToKQEAgLTQ2MCw3ICs0NzYsNyBAQAogICAgICAgICAgICAgIk1vZHVsZShib2R5PVtFeHByKHZhbHVlPUNhbGwoZnVuYz1OYW1lKGlkPSd3cml0ZScsIGN0eD1Mb2FkKCksICIKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgYXJncz1bU3RyKHM9J3NwYW0nLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9NildLCBrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsICIKLSAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksICIKKyAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD01KSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksICIKICAgICAgICAgICAgICJFeHByKHZhbHVlPUNhbGwoZnVuYz1OYW1lKGlkPSdzcGFtJywgY3R4PUxvYWQoKSwgbGluZW5vPTEsICIKICAgICAgICAgICAgICJjb2xfb2Zmc2V0PTApLCBhcmdzPVtTdHIocz0nZWdncycsIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSwgIgogICAgICAgICAgICAgImtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgbGluZW5vPTEsICIKQEAgLTU2MCw4ICs1NzYsOCBAQAogICAgICAgICBzZWxmLm1vZChtLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIsICJldmFsIikKIAogICAgIGRlZiBfY2hlY2tfYXJndW1lbnRzKHNlbGYsIGZhYywgY2hlY2spOgotICAgICAgICBkZWYgYXJndW1lbnRzKGFyZ3M9Tm9uZSwgdmFyYXJnPU5vbmUsIHZhcmFyZ2Fubm90YXRpb249Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBrd29ubHlhcmdzPU5vbmUsIGt3YXJnPU5vbmUsIGt3YXJnYW5ub3RhdGlvbj1Ob25lLAorICAgICAgICBkZWYgYXJndW1lbnRzKGFyZ3M9Tm9uZSwgdmFyYXJnPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncz1Ob25lLCBrd2FyZz1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzPU5vbmUsIGt3X2RlZmF1bHRzPU5vbmUpOgogICAgICAgICAgICAgaWYgYXJncyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGFyZ3MgPSBbXQpAQCAtNTcxLDIwICs1ODcsMTIgQEAKICAgICAgICAgICAgICAgICBkZWZhdWx0cyA9IFtdCiAgICAgICAgICAgICBpZiBrd19kZWZhdWx0cyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGt3X2RlZmF1bHRzID0gW10KLSAgICAgICAgICAgIGFyZ3MgPSBhc3QuYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnLCBrd2FyZ2Fubm90YXRpb24sIGRlZmF1bHRzLCBrd19kZWZhdWx0cykKKyAgICAgICAgICAgIGFyZ3MgPSBhc3QuYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywga3dvbmx5YXJncywga3dfZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZGVmYXVsdHMpCiAgICAgICAgICAgICByZXR1cm4gZmFjKGFyZ3MpCiAgICAgICAgIGFyZ3MgPSBbYXN0LmFyZygieCIsIGFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpKV0KICAgICAgICAgY2hlY2soYXJndW1lbnRzKGFyZ3M9YXJncyksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKHZhcmFyZ2Fubm90YXRpb249YXN0Lk51bSgzKSksCi0gICAgICAgICAgICAgICJ2YXJhcmdhbm5vdGF0aW9uIGJ1dCBubyB2YXJhcmciKQotICAgICAgICBjaGVjayhhcmd1bWVudHModmFyYXJnYW5ub3RhdGlvbj1hc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSwgdmFyYXJnPSJ4IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dvbmx5YXJncz1hcmdzKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQotICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dhcmdhbm5vdGF0aW9uPWFzdC5OdW0oNDIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgImt3YXJnYW5ub3RhdGlvbiBidXQgbm8ga3dhcmciKQotICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dhcmdhbm5vdGF0aW9uPWFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZz0ieCIpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhkZWZhdWx0cz1bYXN0Lk51bSgzKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAibW9yZSBwb3NpdGlvbmFsIGRlZmF1bHRzIHRoYW4gYXJncyIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd19kZWZhdWx0cz1bYXN0Lk51bSg0KV0pLApAQCAtNTk5LDcgKzYwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKIAogICAgIGRlZiB0ZXN0X2Z1bmNkZWYoc2VsZik6Ci0gICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKQorICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSkKICAgICAgICAgZiA9IGFzdC5GdW5jdGlvbkRlZigieCIsIGEsIFtdLCBbXSwgTm9uZSkKICAgICAgICAgc2VsZi5zdG10KGYsICJlbXB0eSBib2R5IG9uIEZ1bmN0aW9uRGVmIikKICAgICAgICAgZiA9IGFzdC5GdW5jdGlvbkRlZigieCIsIGEsIFthc3QuUGFzcygpXSwgW2FzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpXSwKQEAgLTc3MCw3ICs3NzgsNyBAQAogICAgICAgICBzZWxmLmV4cHIodSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogCiAgICAgZGVmIHRlc3RfbGFtYmRhKHNlbGYpOgotICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSkKKyAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pCiAgICAgICAgIHNlbGYuZXhwcihhc3QuTGFtYmRhKGEsIGFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpKSwKICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgZGVmIGZhYyhhcmdzKToKQEAgLTkyOCw2ICs5MzYsOSBAQAogICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgogICAgICAgICBzZWxmLl9zZXF1ZW5jZShhc3QuVHVwbGUpCiAKKyAgICBkZWYgdGVzdF9uYW1lY29uc3RhbnQoc2VsZik6CisgICAgICAgIHNlbGYuZXhwcihhc3QuTmFtZUNvbnN0YW50KDQpLCAic2luZ2xldG9uIG11c3QgYmUgVHJ1ZSwgRmFsc2UsIG9yIE5vbmUiKQorCiAgICAgZGVmIHRlc3Rfc3RkbGliX3ZhbGlkYXRlcyhzZWxmKToKICAgICAgICAgc3RkbGliID0gb3MucGF0aC5kaXJuYW1lKGFzdC5fX2ZpbGVfXykKICAgICAgICAgdGVzdHMgPSBbZm4gZm9yIGZuIGluIG9zLmxpc3RkaXIoc3RkbGliKSBpZiBmbi5lbmRzd2l0aCgiLnB5IildCkBAIC05MzYsMTMgKzk0NywxMCBAQAogICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc3RkbGliLCBtb2R1bGUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZnA6CiAgICAgICAgICAgICAgICAgc291cmNlID0gZnAucmVhZCgpCi0gICAgICAgICAgICBtb2QgPSBhc3QucGFyc2Uoc291cmNlKQorICAgICAgICAgICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSwgZm4pCiAgICAgICAgICAgICBjb21waWxlKG1vZCwgZm4sICJleGVjIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQVNUX1Rlc3RzLCBBU1RIZWxwZXJzX1Rlc3QsIEFTVFZhbGlkYXRvclRlc3RzKQotCiBkZWYgbWFpbigpOgogICAgIGlmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CiAgICAgICAgIHJldHVybgpAQCAtOTU1LDIwICs5NjMsMjAgQEAKICAgICAgICAgICAgIHByaW50KCJdIikKICAgICAgICAgcHJpbnQoIm1haW4oKSIpCiAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQogCiAjIyMjIEVWRVJZVEhJTkcgQkVMT1cgSVMgR0VORVJBVEVEICMjIyMjCiBleGVjX3Jlc3VsdHMgPSBbCi0oJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ05vbmUnLCAoJ0xvYWQnLCkpKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCA5KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTApKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSldLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgWygnTnVtJywgKDEsIDgpLCAwKV0sIFtdKSwgWygnUGFzcycsICgxLCAxMikpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sICdhcmdzJywgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTQpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgJ2t3YXJncycsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSksICgnYXJnJywgJ2InLCBOb25lKSwgKCdhcmcnLCAnYycsIE5vbmUpLCAoJ2FyZycsICdkJywgTm9uZSksICgnYXJnJywgJ2UnLCBOb25lKV0sICdhcmdzJywgTm9uZSwgW10sICdrd2FyZ3MnLCBOb25lLCBbKCdOdW0nLCAoMSwgMTEpLCAxKSwgKCdOYW1lJywgKDEsIDE2KSwgJ05vbmUnLCAoJ0xvYWQnLCkpLCAoJ0xpc3QnLCAoMSwgMjQpLCBbXSwgKCdMb2FkJywpKSwgKCdEaWN0JywgKDEsIDMwKSwgW10sIFtdKV0sIFtdKSwgWygnUGFzcycsICgxLCA1MikpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTmFtZUNvbnN0YW50JywgKDEsIDApLCBOb25lKSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgOSkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgKDEsIDYpLCAnYScsIE5vbmUpXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTApKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKV0sIE5vbmUsIFtdLCBbXSwgTm9uZSwgWygnTnVtJywgKDEsIDgpLCAwKV0pLCBbKCdQYXNzJywgKDEsIDEyKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgKCdhcmcnLCAoMSwgNyksICdhcmdzJywgTm9uZSksIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCAoJ2FyZycsICgxLCA4KSwgJ2t3YXJncycsIE5vbmUpLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKSwgKCdhcmcnLCAoMSwgOSksICdiJywgTm9uZSksICgnYXJnJywgKDEsIDE0KSwgJ2MnLCBOb25lKSwgKCdhcmcnLCAoMSwgMjIpLCAnZCcsIE5vbmUpLCAoJ2FyZycsICgxLCAyOCksICdlJywgTm9uZSldLCAoJ2FyZycsICgxLCAzNSksICdhcmdzJywgTm9uZSksIFtdLCBbXSwgKCdhcmcnLCAoMSwgNDMpLCAna3dhcmdzJywgTm9uZSksIFsoJ051bScsICgxLCAxMSksIDEpLCAoJ05hbWVDb25zdGFudCcsICgxLCAxNiksIE5vbmUpLCAoJ0xpc3QnLCAoMSwgMjQpLCBbXSwgKCdMb2FkJywpKSwgKCdEaWN0JywgKDEsIDMwKSwgW10sIFtdKV0pLCBbKCdQYXNzJywgKDEsIDUyKSldLCBbXSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnQ2xhc3NEZWYnLCAoMSwgMCksICdDJywgW10sIFtdLCBOb25lLCBOb25lLCBbKCdQYXNzJywgKDEsIDgpKV0sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbKCdOYW1lJywgKDEsIDgpLCAnb2JqZWN0JywgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1JldHVybicsICgxLCA4KSwgKCdOdW0nLCAoMSwgMTUpLCAxKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1JldHVybicsICgxLCA4KSwgKCdOdW0nLCAoMSwgMTUpLCAxKSldLCBbXSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnRGVsZXRlJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDQpLCAndicsICgnRGVsJywpKV0pXSksCiAoJ01vZHVsZScsIFsoJ0Fzc2lnbicsICgxLCAwKSwgWygnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ1N0b3JlJywpKV0sICgnTnVtJywgKDEsIDQpLCAxKSldKSwKICgnTW9kdWxlJywgWygnQXVnQXNzaWduJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICd2JywgKCdTdG9yZScsKSksICgnQWRkJywpLCAoJ051bScsICgxLCA1KSwgMSkpXSksCkBAIC05NzcsNyArOTg1LDcgQEAKICgnTW9kdWxlJywgWygnSWYnLCAoMSwgMCksICgnTmFtZScsICgxLCAzKSwgJ3YnLCAoJ0xvYWQnLCkpLCBbKCdQYXNzJywgKDEsIDUpKV0sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdXaXRoJywgKDEsIDApLCBbKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCA1KSwgJ3gnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTApLCAneScsICgnU3RvcmUnLCkpKV0sIFsoJ1Bhc3MnLCAoMSwgMTMpKV0pXSksCiAoJ01vZHVsZScsIFsoJ1dpdGgnLCAoMSwgMCksIFsoJ3dpdGhpdGVtJywgKCdOYW1lJywgKDEsIDUpLCAneCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxMCksICd5JywgKCdTdG9yZScsKSkpLCAoJ3dpdGhpdGVtJywgKCdOYW1lJywgKDEsIDEzKSwgJ3onLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTgpLCAncScsICgnU3RvcmUnLCkpKV0sIFsoJ1Bhc3MnLCAoMSwgMjEpKV0pXSksCi0oJ01vZHVsZScsIFsoJ1JhaXNlJywgKDEsIDApLCAoJ0NhbGwnLCAoMSwgNiksICgnTmFtZScsICgxLCA2KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIFsoJ1N0cicsICgxLCAxNiksICdzdHJpbmcnKV0sIFtdLCBOb25lLCBOb25lKSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnUmFpc2UnLCAoMSwgMCksICgnQ2FsbCcsICgxLCAxNSksICgnTmFtZScsICgxLCA2KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIFsoJ1N0cicsICgxLCAxNiksICdzdHJpbmcnKV0sIFtdLCBOb25lLCBOb25lKSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnVHJ5JywgKDEsIDApLCBbKCdQYXNzJywgKDIsIDIpKV0sIFsoJ0V4Y2VwdEhhbmRsZXInLCAoMywgMCksICgnTmFtZScsICgzLCA3KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIE5vbmUsIFsoJ1Bhc3MnLCAoNCwgMikpXSldLCBbXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ1RyeScsICgxLCAwKSwgWygnUGFzcycsICgyLCAyKSldLCBbXSwgW10sIFsoJ1Bhc3MnLCAoNCwgMikpXSldKSwKICgnTW9kdWxlJywgWygnQXNzZXJ0JywgKDEsIDApLCAoJ05hbWUnLCAoMSwgNyksICd2JywgKCdMb2FkJywpKSwgTm9uZSldKSwKQEAgLTEwMDIsMjkgKzEwMTAsMjkgQEAKICgnSW50ZXJhY3RpdmUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0Jpbk9wJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSksICgnQWRkJywpLCAoJ051bScsICgxLCAyKSwgMikpKV0pLAogXQogZXZhbF9yZXN1bHRzID0gWwotKCdFeHByZXNzaW9uJywgKCdOYW1lJywgKDEsIDApLCAnTm9uZScsICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdOYW1lQ29uc3RhbnQnLCAoMSwgMCksIE5vbmUpKSwKICgnRXhwcmVzc2lvbicsICgnQm9vbE9wJywgKDEsIDApLCAoJ0FuZCcsKSwgWygnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNiksICdiJywgKCdMb2FkJywpKV0pKSwKICgnRXhwcmVzc2lvbicsICgnQmluT3AnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ0FkZCcsKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSkpKSwKICgnRXhwcmVzc2lvbicsICgnVW5hcnlPcCcsICgxLCAwKSwgKCdOb3QnLCksICgnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ0xvYWQnLCkpKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0xhbWJkYScsICgxLCAwKSwgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksICgnTmFtZScsICgxLCA3KSwgJ05vbmUnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0xhbWJkYScsICgxLCAwKSwgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksICgnTmFtZUNvbnN0YW50JywgKDEsIDcpLCBOb25lKSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMiksIDEpXSwgWygnTnVtJywgKDEsIDQpLCAyKV0pKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgW10sIFtdKSksCi0oJ0V4cHJlc3Npb24nLCAoJ1NldCcsICgxLCAwKSwgWygnTmFtZScsICgxLCAxKSwgJ05vbmUnLCAoJ0xvYWQnLCkpXSkpLAorKCdFeHByZXNzaW9uJywgKCdTZXQnLCAoMSwgMCksIFsoJ05hbWVDb25zdGFudCcsICgxLCAxKSwgTm9uZSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFsoJ051bScsICgyLCA2KSwgMSldLCBbKCdOdW0nLCAoNCwgMTApLCAyKV0pKSwKICgnRXhwcmVzc2lvbicsICgnTGlzdENvbXAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKICgnRXhwcmVzc2lvbicsICgnR2VuZXJhdG9yRXhwJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCA3KSwgJ2InLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEyKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDE3KSwgJ2QnLCAoJ0xvYWQnLCkpXSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0NvbXBhcmUnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgWygnTHQnLCksICgnTHQnLCldLCBbKCdOdW0nLCAoMSwgNCksIDIpLCAoJ051bScsICgxLCA4KSwgMyldKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2YnLCAoJ0xvYWQnLCkpLCBbKCdOdW0nLCAoMSwgMiksIDEpLCAoJ051bScsICgxLCA0KSwgMildLCBbKCdrZXl3b3JkJywgJ2MnLCAoJ051bScsICgxLCA4KSwgMykpXSwgKCdOYW1lJywgKDEsIDExKSwgJ2QnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTUpLCAnZScsICgnTG9hZCcsKSkpKSwKKygnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDApLCAnZicsICgnTG9hZCcsKSksIFsoJ051bScsICgxLCAyKSwgMSksICgnTnVtJywgKDEsIDQpLCAyKV0sIFsoJ2tleXdvcmQnLCAnYycsICgnTnVtJywgKDEsIDgpLCAzKSldLCAoJ05hbWUnLCAoMSwgMTEpLCAnZCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxNSksICdlJywgKCdMb2FkJywpKSkpLAogKCdFeHByZXNzaW9uJywgKCdOdW0nLCAoMSwgMCksIDEwKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1N0cicsICgxLCAwKSwgJ3N0cmluZycpKSwKLSgnRXhwcmVzc2lvbicsICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpKSwKLSgnRXhwcmVzc2lvbicsICgnU3Vic2NyaXB0JywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTmFtZScsICgxLCAyKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdjJywgKCdMb2FkJywpKSwgTm9uZSksICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdBdHRyaWJ1dGUnLCAoMSwgMiksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdTdWJzY3JpcHQnLCAoMSwgMiksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOYW1lJywgKDEsIDIpLCAnYicsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2MnLCAoJ0xvYWQnLCkpLCBOb25lKSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ05hbWUnLCAoMSwgMCksICd2JywgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0xpc3QnLCAoMSwgMCksIFsoJ051bScsICgxLCAxKSwgMSksICgnTnVtJywgKDEsIDMpLCAyKSwgKCdOdW0nLCAoMSwgNSksIDMpXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0xpc3QnLCAoMSwgMCksIFtdLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMCksIFsoJ051bScsICgxLCAwKSwgMSksICgnTnVtJywgKDEsIDIpLCAyKSwgKCdOdW0nLCAoMSwgNCksIDMpXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDEpLCBbKCdOdW0nLCAoMSwgMSksIDEpLCAoJ051bScsICgxLCAzKSwgMiksICgnTnVtJywgKDEsIDUpLCAzKV0sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAwKSwgW10sICgnTG9hZCcsKSkpLAotKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAnYycsICgnTG9hZCcsKSksICdkJywgKCdMb2FkJywpKSwgWygnU3Vic2NyaXB0JywgKDEsIDgpLCAoJ0F0dHJpYnV0ZScsICgxLCA4KSwgKCdOYW1lJywgKDEsIDgpLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTnVtJywgKDEsIDEyKSwgMSksICgnTnVtJywgKDEsIDE0KSwgMiksIE5vbmUpLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUpKSwKKygnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCA3KSwgKCdBdHRyaWJ1dGUnLCAoMSwgNiksICgnQXR0cmlidXRlJywgKDEsIDQpLCAoJ0F0dHJpYnV0ZScsICgxLCAyKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgJ2MnLCAoJ0xvYWQnLCkpLCAnZCcsICgnTG9hZCcsKSksIFsoJ1N1YnNjcmlwdCcsICgxLCAxMiksICgnQXR0cmlidXRlJywgKDEsIDEwKSwgKCdOYW1lJywgKDEsIDgpLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTnVtJywgKDEsIDEyKSwgMSksICgnTnVtJywgKDEsIDE0KSwgMiksIE5vbmUpLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUpKSwKIF0KIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKaW5kZXggYzc5ZmU2Zi4uZjkzYTUyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CkBAIC0xNSw2ICsxNSw3IEBACiAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIFNFUlZFUl9RVUlUID0gYidRVUlUXG4nCitUSU1FT1VUID0gMy4wCiAKIGlmIHRocmVhZGluZzoKICAgICBjbGFzcyBlY2hvX3NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKQEAgLTEyMyw3ICsxMjQsOSBAQAogICAgICAgICBjLnB1c2goYiJJJ20gbm90IGRlYWQgeWV0ISIgKyB0ZXJtKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2IiaGVsbG8gd29ybGQiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCiAKQEAgLTE1NCw3ICsxNTcsOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtkYXRhWzp0ZXJtbGVuXV0pCiAKQEAgLTE3NCw3ICsxNzksOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVmZmVyLCBkYXRhKQpAQCAtMTg2LDcgKzE5Myw5IEBACiAgICAgICAgIHAgPSBhc3luY2hhdC5zaW1wbGVfcHJvZHVjZXIoZGF0YStTRVJWRVJfUVVJVCwgYnVmZmVyX3NpemU9OCkKICAgICAgICAgYy5wdXNoX3dpdGhfcHJvZHVjZXIocCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMTk2LDcgKzIwNSw5IEBACiAgICAgICAgIGRhdGEgPSBiImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIgogICAgICAgICBjLnB1c2hfd2l0aF9wcm9kdWNlcihkYXRhK1NFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0yMDcsNyArMjE4LDkgQEAKICAgICAgICAgYy5wdXNoKGIiaGVsbG8gd29ybGRcblxuSSdtIG5vdCBkZWFkIHlldCFcbiIpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIFtiImhlbGxvIHdvcmxkIiwgYiIiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCkBAIC0yMjYsNyArMjM5LDkgQEAKICAgICAgICAgIyB3aGVyZSB0aGUgc2VydmVyIGVjaG9lcyBhbGwgb2YgaXRzIGRhdGEgYmVmb3JlIHdlIGNhbiBjaGVjayB0aGF0IGl0CiAgICAgICAgICMgZ290IGFueSBkb3duIGJlbG93LgogICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudC5zZXQoKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCiAgICAgICAgICMgdGhlIHNlcnZlciBtaWdodCBoYXZlIGJlZW4gYWJsZSB0byBzZW5kIGEgYnl0ZSBvciB0d28gYmFjaywgYnV0IHRoaXMKQEAgLTI2OCw5ICsyODMsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgwLCBOb25lKSkKIAogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFzeW5jaGF0LCBUZXN0QXN5bmNoYXRfV2l0aFBvbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyRnVuY3Rpb25zLCBUZXN0RmlmbykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzY2U1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3RzIGlmIHdlIGRvbid0IGhhdmUgdGhyZWFkaW5nLgoraW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKyMgU2tpcCB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIGNvbmN1cnJlbnQuZnV0dXJlcy4KK2ltcG9ydF9tb2R1bGUoJ2NvbmN1cnJlbnQuZnV0dXJlcycpCisKKworZGVmIHN1aXRlKCk6CisgICAgdGVzdHNfZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAndGVzdHMudHh0JykKKyAgICB3aXRoIG9wZW4odGVzdHNfZmlsZSkgYXMgZnA6CisgICAgICAgIHRlc3RfbmFtZXMgPSBmcC5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdF9uYW1lczoKKyAgICAgICAgbW9kX25hbWUgPSAndGVzdC4nICsgdGVzdF9uYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZF9uYW1lXQorICAgICAgICAgICAgdGVzdHMuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KHN1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0OTQ5MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX21haW5fXy5weQpAQCAtMCwwICsxLDUgQEAKK2Zyb20gLiBpbXBvcnQgdGVzdF9tYWluCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNoby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDYzNjRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBicmVhaworICAgICAgICBvcy53cml0ZSgxLCBidWYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzY2EwOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMi5weQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBvcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGJ1ZiA9IG9zLnJlYWQoMCwgMTAyNCkKKyAgICBvcy53cml0ZSgxLCBiJ09VVDonK2J1ZikKKyAgICBvcy53cml0ZSgyLCBiJ0VSUjonK2J1ZikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ0OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8zLnB5CkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBvcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJ1ZiA9IG9zLnJlYWQoMCwgMTAyNCkKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLndyaXRlKDEsIGInT1VUOicrYnVmKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgIG9zLndyaXRlKDIsIGInRVJSOicgKyBleC5fX2NsYXNzX18uX19uYW1lX18uZW5jb2RlKCdhc2NpaScpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NhbXBsZS5jcnQgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc2FtcGxlLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTFlM2YzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NhbXBsZS5jcnQKQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDTXpDQ0Fad0NDUURGbDR5czBmVTdpVEFOQmdrcWhraUc5dzBCQVFVRkFEQmVNUXN3Q1FZRFZRUUdFd0pWCitVekVUTUJFR0ExVUVDQXdLUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnd3TlUyRnVMVVp5WVc1amFYTmpiekVpCitNQ0FHQTFVRUNnd1pVSGwwYUc5dUlGTnZablIzWVhKbElFWnZibVJoZEdsdmJqQWVGdzB4TXpBek1UZ3lNREEzCitNamhhRncweU16QXpNVFl5TURBM01qaGFNRjR4Q3pBSkJnTlZCQVlUQWxWVE1STXdFUVlEVlFRSURBcERZV3hwCitabTl5Ym1saE1SWXdGQVlEVlFRSERBMVRZVzR0Um5KaGJtTnBjMk52TVNJd0lBWURWUVFLREJsUWVYUm9iMjRnCitVMjltZEhkaGNtVWdSbTl1WkdGMGFXOXVNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUNuCit0M3MrSjdMMHhQL1lkQVFPYWNwUGk5cGhscnpLWmhjWEwzWE11MkxDVWcyZk5KcHgvNDdWYzVUWlNhTzExdU83CitnZHdWejNaN1EyZXBBZ3dvNTlKTGZmTHQ1ZmlhOCthL1NsUHdlSS9qNCt3Y0lJSWlxdXNuTGZwcVI4Y0lBYXZnCitaMDZjTFlDRHZiOXdNbGhlSXZTSlkxMnNrYzFubnBoV1MyWUowWG02dVFJREFRQUJNQTBHQ1NxR1NJYjNEUUVCCitCUVVBQTRHQkFFOVBrbkc2cHY3Mis1ei9nc0RHWXk4c0s1VU5rYldTTnI0aTRlNWx4VnNGMDMrL003MUgrM0FCCitNeFZYNCtBK1ZsazJmbVUrQnJkSElJVUUwcjFkRGNPM2pvc1E5aGM5T0pwcDVWTFNRRlA4VmV1SkNtellQcDlJCitJOFdiVzkzY25YbkNoVHJZUVZkZ1ZvRmR2N0dFOVlnVTdOWWtyR0lNMG5abDEvZi9iSFBCCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc2FtcGxlLmtleSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zYW1wbGUua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZmVhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc2FtcGxlLmtleQpAQCAtMCwwICsxLDE1IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWFFJQkFBS0JnUUNudDNzK0o3TDB4UC9ZZEFRT2FjcFBpOXBobHJ6S1poY1hMM1hNdTJMQ1VnMmZOSnB4CisvNDdWYzVUWlNhTzExdU83Z2R3VnozWjdRMmVwQWd3bzU5SkxmZkx0NWZpYTgrYS9TbFB3ZUkvajQrd2NJSUlpCitxdXNuTGZwcVI4Y0lBYXZnWjA2Y0xZQ0R2Yjl3TWxoZUl2U0pZMTJza2Mxbm5waFdTMllKMFhtNnVRSURBUUFCCitBb0dBQmZtOGsxOVl1ZTNXNjhCZWNLRUdTMFZCVjU3R1JUUFQrTWlCR3ZWR05JUTE1Z2s2dzNzR2ZNWnNkRDF5Citic1VrUWdjRGIyZC80aTVwb0JUcGwvK0NkNDFWK2MyMElDL3NTbDVYMUlFcmVITUtTTGh5L3V5anlpeWZYbFAxCitpWGhUb0ZDZ0xXd0VOV2M4THpmVVY4dnVBVjVXRzZvTDlibnVkV3paeGVxeDhWMENRUURSN3h3Vmo2TE43MEViCitEVWhTS0xrdXNtRnc1R2s5TkovN3daNGVIZzRCOGM5S05WdlNsTENMaGNzVlRRWHVxWWVGcE9xeXRJNDVTbmVQCitscjB2cnZzREFrRUF6SVRZaVh1Nm94NWh1RENHN2ltWDJXOUNBWXVYNjM4dXJMeEJxQlhNUzdHcUJ6b2pENlJMCisyMVE4b1B3SldKcXVFUmEzSERTY3ExZGVpUWJNOXVLSWt3SkJBSWExUExzbEdOMjE2WHYzVVBIUFNjeUtEL2FGCit5blhJditPbkFOUG9peXA2Ukg0a3NRLzE4emNFR2lWSDhFZU5wdlY5dGxBSGhiK0RaaWJRSGdOcjc0c0NRUUMwCit6aFRvcGx1L2JWS1NsVVFVTk8wcnFySTl6MzBGRXJEZXdLZUN3NUtTc0lSU1UxRS91TTNmSHI5aXlxNHdpTDZ1CitHTmpVdEtaMHk0NmxzVDl1VzZMRkFrQjVlcWVFUW5zaEFkcjNYNUd5a1dISjhEREdCWFBQbjZSY2UxTlg0UlNxCitWOWtoRzJ6MWJGeWZvK2hNcXBZbkYyazMyaFZxM0U1NFJTOFlZbndCc1ZvZgorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Jhc2VfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmMjk3NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Jhc2VfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNjg0IEBACisiIiJUZXN0cyBmb3IgYmFzZV9ldmVudHMucHkiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNvY2tldAoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmaW5kX3VudXNlZF9wb3J0LCBJUFY2X0VOQUJMRUQKKworZnJvbSBhc3luY2lvIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBjb25zdGFudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRhc2tzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitjbGFzcyBCYXNlRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LCBtLCBtLCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3JlYWRfZnJvbV9zZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBnZW4gPSBzZWxmLmxvb3AuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQobSwgbSwgbSwgbSwgbSwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbmV4dCwgaXRlcihnZW4pKQorCisgICAgZGVmIHRlc3RfX2FkZF9jYWxsYmFja19oYW5kbGUoc2VsZik6CisgICAgICAgIGggPSBldmVudHMuSGFuZGxlKGxhbWJkYTogRmFsc2UsICgpKQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfdGltZXIoc2VsZik6CisgICAgICAgIGggPSBldmVudHMuVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSsxMCwgbGFtYmRhOiBGYWxzZSwgKCkpCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2soaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihoLCBzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfY2FuY2VsbGVkX2hhbmRsZShzZWxmKToKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUobGFtYmRhOiBGYWxzZSwgKCkpCisgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdF9leGVjdXRvcihzZWxmKToKKyAgICAgICAgZXhlY3V0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhlY3V0b3IsIHNlbGYubG9vcC5fZGVmYXVsdF9leGVjdXRvcikKKworICAgIGRlZiB0ZXN0X2dldG5hbWVpbmZvKHNlbGYpOgorICAgICAgICBzb2NrYWRkciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuZ2V0bmFtZWluZm8oc29ja2FkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoTm9uZSwgc29ja2V0LmdldG5hbWVpbmZvLCBzb2NrYWRkciwgMCksCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaCA9IHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgZXZlbnRzLkhhbmRsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihoLCBzZWxmLmxvb3AuX3JlYWR5KQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaCA9IHNlbGYubG9vcC5jYWxsX2xhdGVyKDEwLjAsIGNiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgZXZlbnRzLlRpbWVySGFuZGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9jYWxsX2xhdGVyX25lZ2F0aXZlX2RlbGF5cyhzZWxmKToKKyAgICAgICAgY2FsbHMgPSBbXQorCisgICAgICAgIGRlZiBjYihhcmcpOgorICAgICAgICAgICAgY2FsbHMuYXBwZW5kKGFyZykKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoLTEsIGNiLCAnYScpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKC0yLCBjYiwgJ2InKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWydiJywgJ2EnXSkKKworICAgIGRlZiB0ZXN0X3RpbWVfYW5kX2NhbGxfYXQoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3aGVuID0gc2VsZi5sb29wLnRpbWUoKSArIDAuMQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9hdCh3aGVuLCBjYikKKyAgICAgICAgdDAgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHQxID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMC4wOSA8PSB0MS10MCA8PSAwLjksIHQxLXQwKQorCisgICAgZGVmIHRlc3RfcnVuX29uY2VfaW5fZXhlY3V0b3JfaGFuZGxlKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLAorICAgICAgICAgICAgTm9uZSwgZXZlbnRzLkhhbmRsZShjYiwgKCkpLCAoJycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvciwKKyAgICAgICAgICAgIE5vbmUsIGV2ZW50cy5UaW1lckhhbmRsZSgxMCwgY2IsICgpKSkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGggPSBldmVudHMuSGFuZGxlKGNiLCAoKSkKKyAgICAgICAgaC5jYW5jZWwoKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcnVuX29uY2VfaW5fZXhlY3V0b3JfcGxhaW4oc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYiwgKCkpCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhlY3V0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBleGVjdXRvci5zdWJtaXQucmV0dXJuX3ZhbHVlID0gZgorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVmYXVsdF9leGVjdXRvcihleGVjdXRvcikKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgcmVzKQorCisgICAgICAgIGV4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZXhlY3V0b3Iuc3VibWl0LnJldHVybl92YWx1ZSA9IGYKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihleGVjdXRvciwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleGVjdXRvci5zdWJtaXQuY2FsbGVkKQorCisgICAgICAgIGYuY2FuY2VsKCkgICMgRG9uJ3QgY29tcGxhaW4gYWJvdXQgYWJhbmRvbmVkIEZ1dHVyZS4KKworICAgIGRlZiB0ZXN0X19ydW5fb25jZShzZWxmKToKKyAgICAgICAgaDEgPSBldmVudHMuVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSArIDUuMCwgbGFtYmRhOiBUcnVlLCAoKSkKKyAgICAgICAgaDIgPSBldmVudHMuVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSArIDEwLjAsIGxhbWJkYTogVHJ1ZSwgKCkpCisKKyAgICAgICAgaDEuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgxKQorICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoaDIpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIHQgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdC5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDkuNSA8IHQgPCAxMC41LCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtoMl0sIHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cy5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy50aW1lJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X19ydW5fb25jZV9sb2dnaW5nKHNlbGYsIG1fbG9nZ2luZywgbV90aW1lKToKKyAgICAgICAgIyBMb2cgdG8gSU5GTyBsZXZlbCBpZiB0aW1lb3V0ID4gMS4wIHNlYy4KKyAgICAgICAgaWR4ID0gLTEKKyAgICAgICAgZGF0YSA9IFsxMC4wLCAxMC4wLCAxMi4wLCAxMy4wXQorCisgICAgICAgIGRlZiBtb25vdG9uaWMoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGRhdGEsIGlkeAorICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJldHVybiBkYXRhW2lkeF0KKworICAgICAgICBtX3RpbWUubW9ub3RvbmljID0gbW9ub3RvbmljCisgICAgICAgIG1fbG9nZ2luZy5JTkZPID0gbG9nZ2luZy5JTkZPCisgICAgICAgIG1fbG9nZ2luZy5ERUJVRyA9IGxvZ2dpbmcuREVCVUcKKworICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoCisgICAgICAgICAgICBldmVudHMuVGltZXJIYW5kbGUoMTEuMCwgbGFtYmRhOiBUcnVlLCAoKSkpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLklORk8sIG1fbG9nZ2luZy5sb2cuY2FsbF9hcmdzWzBdWzBdKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGRhdGEgPSBbMTAuMCwgMTAuMCwgMTAuMywgMTMuMF0KKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQgPSBbZXZlbnRzLlRpbWVySGFuZGxlKDExLjAsIGxhbWJkYTpUcnVlLCAoKSldCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuREVCVUcsIG1fbG9nZ2luZy5sb2cuY2FsbF9hcmdzWzBdWzBdKQorCisgICAgZGVmIHRlc3RfX3J1bl9vbmNlX3NjaGVkdWxlX2hhbmRsZShzZWxmKToKKyAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICBwcm9jZXNzZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBjYihsb29wKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb2Nlc3NlZCwgaGFuZGxlCisgICAgICAgICAgICBwcm9jZXNzZWQgPSBUcnVlCisgICAgICAgICAgICBoYW5kbGUgPSBsb29wLmNhbGxfc29vbihsYW1iZGE6IFRydWUpCisKKyAgICAgICAgaCA9IGV2ZW50cy5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpIC0gMSwgY2IsIChzZWxmLmxvb3AsKSkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9jZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2hhbmRsZV0sIGxpc3Qoc2VsZi5sb29wLl9yZWFkeSkpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfdHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsICdibGFoJykKKworCitjbGFzcyBNeVByb3RvKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjcmVhdGVfZnV0dXJlPUZhbHNlKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgY3JlYXRlX2Z1dHVyZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG5cclxuJykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnRU9GJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSBpbiAoJ0NPTk5FQ1RFRCcsICdFT0YnKSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeURhdGFncmFtUHJvdG8ocHJvdG9jb2xzLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlX2Z1dHVyZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGNyZWF0ZV9mdXR1cmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZSgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUxJWkVEJworCisgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVycm9yX3JlY2VpdmVkKHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBCYXNlRXZlbnRMb29wV2l0aFNlbGVjdG9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGVfZXJyb3JzKHNlbGYsIG1fc29ja2V0KToKKworICAgICAgICBjbGFzcyBNeVByb3RvKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgaWR4ID0gLTEKKyAgICAgICAgZXJyb3JzID0gWydlcnIxJywgJ2VycjInXQorCisgICAgICAgIGRlZiBfc29ja2V0KCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGlkeCwgZXJyb3JzCisgICAgICAgICAgICBpZHggKz0gMQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJvcnNbaWR4XSkKKworICAgICAgICBtX3NvY2tldC5zb2NrZXQgPSBfc29ja2V0CisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ011bHRpcGxlIGV4Y2VwdGlvbnM6IGVycjEsIGVycjInKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19nZXRhZGRyaW5mbyhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fY29ubmVjdF9lcnIoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZShzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMC4wLjAuMScsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcwLjAuMC4yJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiB0YXNrcy5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZV9lcnJvcnNfbG9jYWxfYWRkcihzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgZGVmIGJpbmQoYWRkcik6CisgICAgICAgICAgICBpZiBhZGRyWzBdID09ICcwLjAuMC4xJzoKKyAgICAgICAgICAgICAgICBlcnIgPSBPU0Vycm9yKCdFcnInKQorICAgICAgICAgICAgICAgIGVyci5zdHJlcnJvciA9ICdFcnInCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5iaW5kID0gYmluZAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzAuMC4wLjEnLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMC4wLjAuMicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ0VycjInKQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oTm9uZSwgODA4MCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihjbS5leGNlcHRpb24pLnN0YXJ0c3dpdGgoJ011bHRpcGxlIGV4Y2VwdGlvbnM6ICcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19sb2NhbF9hZGRyKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbyhob3N0LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBpZiBob3N0ID09ICdleGFtcGxlLmNvbSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiB0YXNrcy5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oTm9uZSwgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBkZWYgbW9ja19nZXRhZGRyaW5mbygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChbKHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1RDUCwgJycsICgnMS4yLjMuNCcsIDgwKSldKQorICAgICAgICAgICAgcmV0dXJuIGYKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8uc2lkZV9lZmZlY3QgPSBtb2NrX2dldGFkZHJpbmZvCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnJldHVybl92YWx1ZSA9ICgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBfU2VsZWN0b3JUcmFuc3BvcnRNb2NrOgorICAgICAgICAgICAgX3NvY2sgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKworICAgICAgICBkZWYgbW9ja19tYWtlX3NzbF90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dkcyk6CisgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yVHJhbnNwb3J0TW9jaygpCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2sgPSBzb2NrCisgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuc2lkZV9lZmZlY3QgPSBtb2NrX21ha2Vfc3NsX3RyYW5zcG9ydAorICAgICAgICBBTlkgPSB1bml0dGVzdC5tb2NrLkFOWQorICAgICAgICAjIEZpcnN0IHRyeSB0aGUgZGVmYXVsdCBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdweXRob24ub3JnJykKKyAgICAgICAgIyBOZXh0IHRyeSBhbiBleHBsaWNpdCBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncGVybC5jb20nKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdwZXJsLmNvbScpCisgICAgICAgICMgRmluYWxseSB0cnkgYW4gZXhwbGljaXQgZW1wdHkgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycpCisgICAgICAgIHRyYW5zcG9ydCwgXyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuYXNzZXJ0X2NhbGxlZF93aXRoKEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fc3NsX3NlcnZlcl9ob3N0bmFtZV9lcnJvcnMoc2VsZik6CisgICAgICAgICMgV2hlbiBub3QgdXNpbmcgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUgbXVzdCBiZSBOb25lLgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdweXRob24ub3JnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIFdoZW4gdXNpbmcgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUgbWF5IGJlIE5vbmUgaWYgaG9zdCBpcyBub24tZW1wdHkuCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJycsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBOb25lLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1UcnVlLCBzb2NrPXNvY2spCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9lbXB0eV9ob3N0KHNlbGYpOgorICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgc3RyaW5nIHVzZSBOb25lIGluc3RlYWQKKyAgICAgICAgaG9zdCA9IG9iamVjdCgpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgbm9ubG9jYWwgaG9zdAorICAgICAgICAgICAgaG9zdCA9IGFyZ3NbMF0KKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiB0YXNrcy5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGhvc3QpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcigKKyAgICAgICAgICAgIE15UHJvdG8sICcwLjAuMC4wJywgMCwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ub19ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ub19nZXRhZGRyaW5mbyhzZWxmKToKKyAgICAgICAgZ2V0YWRkcmluZm8gPSBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBnZXRhZGRyaW5mby5yZXR1cm5fdmFsdWUgPSBbXQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfY2FudF9iaW5kKHNlbGYsIG1fc29ja2V0KToKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBzdHJlcnJvciA9ICdlcnJvcicKKworICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mby5yZXR1cm5fdmFsdWUgPSBbCisgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTI3LjAuMC4xJywgMTAxMDApKV0KKyAgICAgICAgbV9zb2NrID0gbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIG1fc29jay5iaW5kLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NvY2suY2xvc2UuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfbm9fYWRkcmluZm8oc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mby5yZXR1cm5fdmFsdWUgPSBbXQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnbG9jYWxob3N0JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9hZGRyX2Vycm9yKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0nbG9jYWxob3N0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCdsb2NhbGhvc3QnLCAxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9jb25uZWN0X2VycihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgcmVtb3RlX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29ja2V0X2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sLCBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKElQVjZfRU5BQkxFRCwgJ0lQdjYgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfbm9fbWF0Y2hpbmdfZmFtaWx5KHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sLAorICAgICAgICAgICAgcmVtb3RlX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSwgbG9jYWxfYWRkcj0oJzo6MScsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9zZXRibGtfZXJyKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5zZXRibG9ja2luZy5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfbm9hZGRyX25vZmFtaWx5KHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfY2FudF9iaW5kKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1fc29ja2V0LkFGX0lORVQ2ID0gc29ja2V0LkFGX0lORVQ2CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvCisgICAgICAgIG1fc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBtX3NvY2suYmluZC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sCisgICAgICAgICAgICBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCksIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfYWNjZXB0X2Nvbm5lY3Rpb25fcmV0cnkoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9hY2NlcHRfY29ubmVjdGlvbihNeVByb3RvLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYWNjZXB0X2Nvbm5lY3Rpb25fZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcihlcnJuby5FTUZJTEUsICdUb28gbWFueSBvcGVuIGZpbGVzJykKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9hY2NlcHRfY29ubmVjdGlvbihNeVByb3RvLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2cuZXhjZXB0aW9uLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoY29uc3RhbnRzLkFDQ0VQVF9SRVRSWV9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15UHJvdG8sIHNvY2ssIE5vbmUsIE5vbmUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWJjNzI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTY1NiBAQAorIiIiVGVzdHMgZm9yIGV2ZW50cy5weS4iIiIKKworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGdjCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCBlcnJubworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRfdW51c2VkX3BvcnQsIElQVjZfRU5BQkxFRAorCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSBhc3luY2lvIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRhc2tzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgbG9ja3MKKworCitjbGFzcyBNeVByb3RvKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcbkhvc3Q6IGV4YW1wbGUuY29tXHJcblxyXG4nKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdFT0YnCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlIGluICgnQ09OTkVDVEVEJywgJ0VPRicpLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15RGF0YWdyYW1Qcm90byhwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMSVpFRCcKKworICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlcnJvcl9yZWNlaXZlZChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlSZWFkUGlwZVByb3RvKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gWydJTklUSUFMJ10KKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSBbJ0lOSVRJQUwnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnQ09OTkVDVEVEJykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoJ0VPRicpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoJ0NMT1NFRCcpCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlXcml0ZVBpcGVQcm90byhwcm90b2NvbHMuQmFzZVByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlTdWJwcm9jZXNzUHJvdG9jb2wocHJvdG9jb2xzLlN1YnByb2Nlc3NQcm90b2NvbCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuY29ubmVjdGVkID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmNvbXBsZXRlZCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0cyA9IHtmZDogZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKSBmb3IgZmQgaW4gcmFuZ2UoMyl9CisgICAgICAgIHNlbGYuZGF0YSA9IHsxOiBiJycsIDI6IGInJ30KKyAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICBzZWxmLmdvdF9kYXRhID0gezE6IGxvY2tzLkV2ZW50KGxvb3A9bG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgMjogbG9ja3MuRXZlbnQobG9vcD1sb29wKX0KKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICBzZWxmLmNvbm5lY3RlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBzZWxmLmNvbXBsZXRlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5kYXRhW2ZkXSArPSBkYXRhCisgICAgICAgIHNlbGYuZ290X2RhdGFbZmRdLnNldCgpCisKKyAgICBkZWYgcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZmQsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIGlmIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdHNbZmRdLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0c1tmZF0uc2V0X3Jlc3VsdChleGMpCisKKyAgICBkZWYgcHJvY2Vzc19leGl0ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IHNlbGYudHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKCkKKworCitjbGFzcyBFdmVudExvb3BUZXN0c01peGluOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIGp1c3QgaW4gY2FzZSBpZiB3ZSBoYXZlIHRyYW5zcG9ydCBjbG9zZSBjYWxsYmFja3MKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX25lc3Rpbmcoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8yKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmlzX3J1bm5pbmcoKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybzEoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybzIoKSkKKworICAgICMgTm90ZTogYmVjYXVzZSBvZiB0aGUgZGVmYXVsdCBXaW5kb3dzIHRpbWluZyBncmFudWxhcml0eSBvZgorICAgICMgMTUuNiBtc2VjLCB3ZSB1c2UgZmFpcmx5IGxvbmcgc2xlZXAgdGltZXMgaGVyZSAofjEwMCBtc2VjKS4KKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZShzZWxmKToKKyAgICAgICAgdDAgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Muc2xlZXAoMC4xLCBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHQxID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMC4wOCA8PSB0MS10MCA8PSAwLjgsIHQxLXQwKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX3N0b3BwZWQoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSBjYigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdGFzaykKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXIoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGRlZiBjYWxsYmFjayhhcmcpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoYXJnKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDAuMSwgY2FsbGJhY2ssICdoZWxsbyB3b3JsZCcpCisgICAgICAgIHQwID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0MSA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLCBbJ2hlbGxvIHdvcmxkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjA4IDw9IHQxLXQwIDw9IDAuOCwgdDEtdDApCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb24oc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGRlZiBjYWxsYmFjayhhcmcxLCBhcmcyKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKChhcmcxLCBhcmcyKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAnaGVsbG8nLCAnd29ybGQnKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsoJ2hlbGxvJywgJ3dvcmxkJyldKQorCisgICAgZGVmIHRlc3RfY2FsbF9zb29uX3RocmVhZHNhZmUoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBsb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgICAgIGRlZiBjYWxsYmFjayhhcmcpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoYXJnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdHMpID49IDI6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIGRlZiBydW5faW5fdGhyZWFkKCk6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICdoZWxsbycpCisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW5faW5fdGhyZWFkKQorICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAnd29ybGQnKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgdC5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLCBbJ2hlbGxvJywgJ3dvcmxkJ10pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb25fdGhyZWFkc2FmZV9zYW1lX3RocmVhZChzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0cykgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGNhbGxiYWNrLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAnd29ybGQnKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8nLCAnd29ybGQnXSkKKworICAgIGRlZiB0ZXN0X3J1bl9pbl9leGVjdXRvcihzZWxmKToKKyAgICAgICAgZGVmIHJ1bihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIChhcmcsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgZjIgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHJ1biwgJ3lvJykKKyAgICAgICAgcmVzLCB0aHJlYWRfaWQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ3lvJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aHJlYWRfaWQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIGJ5dGVzX3JlYWQgPSBbXQorCisgICAgICAgIGRlZiByZWFkZXIoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gci5yZWN2KDEwMjQpCisgICAgICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgU3B1cmlvdXMgcmVhZGluZXNzIG5vdGlmaWNhdGlvbnMgYXJlIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgIyBhdCBsZWFzdCBvbiBMaW51eCAtLSBzZWUgbWFuIHNlbGVjdC4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZC5hcHBlbmQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKHIuZmlsZW5vKCkpKQorICAgICAgICAgICAgICAgIHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKHIuZmlsZW5vKCksIHJlYWRlcikKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LnNlbmQsIGInYWJjJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5zZW5kLCBiJ2RlZicpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuY2xvc2UpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oc2VsZi5sb29wLnN0b3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLmpvaW4oYnl0ZXNfcmVhZCksIGInYWJjZGVmJykKKworICAgIGRlZiB0ZXN0X3dyaXRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHcuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKHcuZmlsZW5vKCksIHcuc2VuZCwgYid4JyooMjU2KjEwMjQpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBkZWYgcmVtb3ZlX3dyaXRlcigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKHcuZmlsZW5vKCkpKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ocmVtb3ZlX3dyaXRlcikKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIGRhdGEgPSByLnJlY3YoMjU2KjEwMjQpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oZGF0YSksIDIwMCkKKworICAgIGRlZiB0ZXN0X3NvY2tfY2xpZW50X29wcyhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBodHRwZC5hZGRyZXNzKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKSkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICAgICAjIGNvbnN1bWUgZGF0YQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpKQorICAgICAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuc3RhcnRzd2l0aChiJ0hUVFAvMS4wIDIwMCBPSycpKQorCisgICAgZGVmIHRlc3Rfc29ja19jbGllbnRfZmFpbChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSB3aWxsIGdldCBhbiB1bnVzZWQgcG9ydAorICAgICAgICBhZGRyZXNzID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIGFkZHJlc3MgPSBzLmdldHNvY2tuYW1lKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhDb25uZWN0aW9uUmVmdXNlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKSkKKyAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgbGlzdGVuZXIgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgbGlzdGVuZXIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGxpc3RlbmVyLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgbGlzdGVuZXIubGlzdGVuKDEpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdChsaXN0ZW5lci5nZXRzb2NrbmFtZSgpKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19hY2NlcHQobGlzdGVuZXIpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5nZXR0aW1lb3V0KCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkciwgY2xpZW50LmdldHNvY2tuYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50LmdldHBlZXJuYW1lKCksIGxpc3RlbmVyLmdldHNvY2tuYW1lKCkpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBsaXN0ZW5lci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0tJTEwnKSwgJ05vIFNJR0tJTEwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcihzZWxmKToKKyAgICAgICAgY2F1Z2h0ID0gMAorCisgICAgICAgIGRlZiBteV9oYW5kbGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBjYXVnaHQKKyAgICAgICAgICAgIGNhdWdodCArPSAxCisKKyAgICAgICAgIyBDaGVjayBlcnJvciBiZWhhdmlvciBmaXJzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsICdib29tJywgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsICdib29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuTlNJRysxLAorICAgICAgICAgICAgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuTlNJRysxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIDAsIG15X2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCAtMSwgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5TSUdLSUxMLAorICAgICAgICAgICAgbXlfaGFuZGxlcikKKyAgICAgICAgIyBSZW1vdmluZyBTSUdLSUxMIGRvZXNuJ3QgcmFpc2UsIHNpbmNlIHdlIGRvbid0IGNhbGwgc2lnbmFsKCkuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHS0lMTCkpCisgICAgICAgICMgTm93IHNldCBhIGhhbmRsZXIgYW5kIGhhbmRsZSBpdC4KKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5ULCBteV9oYW5kbGVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2F1Z2h0LCAxKQorICAgICAgICAjIFJlbW92aW5nIGl0IHNob3VsZCByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLmRlZmF1bHRfaW50X2hhbmRsZXIpCisgICAgICAgICMgUmVtb3ZpbmcgYWdhaW4gcmV0dXJucyBGYWxzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdBTFJNJyksICdObyBTSUdBTFJNJykKKyAgICBkZWYgdGVzdF9zaWduYWxfaGFuZGxpbmdfd2hpbGVfc2VsZWN0aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBhIHNpZ25hbCBhY3R1YWxseSBhcnJpdmluZyBkdXJpbmcgYSBzZWxlY3QoKSBjYWxsLgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdBTFJNLCBteV9oYW5kbGVyKQorCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9SRUFMLCAwLjAxLCAwKSAgIyBTZW5kIFNJR0FMUk0gb25jZS4KKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0FMUk0nKSwgJ05vIFNJR0FMUk0nKQorICAgIGRlZiB0ZXN0X3NpZ25hbF9oYW5kbGluZ19hcmdzKHNlbGYpOgorICAgICAgICBzb21lX2FyZ3MgPSAoNDIsKQorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKmFyZ3MpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2F1Z2h0CisgICAgICAgICAgICBjYXVnaHQgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBzb21lX2FyZ3MpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQUxSTSwgbXlfaGFuZGxlciwgKnNvbWVfYXJncykKKworICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNpZ25hbC5JVElNRVJfUkVBTCwgMC4xLCAwKSAgIyBTZW5kIFNJR0FMUk0gb25jZS4KKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC41LCBzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCAqaHR0cGQuYWRkcmVzcykKKyAgICAgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgdHJhbnNwb3J0cy5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIHByb3RvY29scy5Qcm90b2NvbCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHIuZG9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zb2NrKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgaW5mb3MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKSkKKyAgICAgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIHByb3RvLCBjbmFtZSwgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgJ0NhbiBub3QgY3JlYXRlIHNvY2tldC4nCisKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwgc29jaz1zb2NrKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCB0cmFuc3BvcnRzLlRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwciwgcHJvdG9jb2xzLlByb3RvY29sKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwci5kb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHByLm5ieXRlcywgMCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIodXNlX3NzbD1UcnVlKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwgKmh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSkKKyAgICAgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgdHJhbnNwb3J0cy5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIHByb3RvY29scy5Qcm90b2NvbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnc3NsJyBpbiB0ci5fX2NsYXNzX18uX19uYW1lX18ubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwci5kb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHByLm5ieXRlcywgMCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2xvY2FsX2FkZHIoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIHBvcnQgPSBmaW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywgbG9jYWxfYWRkcj0oaHR0cGQuYWRkcmVzc1swXSwgcG9ydCkpCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleHBlY3RlZCA9IHByLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKVsxXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2xvY2FsX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIGxvY2FsX2FkZHI9aHR0cGQuYWRkcmVzcykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN0cihodHRwZC5hZGRyZXNzKSwgY20uZXhjZXB0aW9uLnN0cmVycm9yKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15UHJvdG8oKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKGZhY3RvcnksICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXJ2ZXIuc29ja2V0cyksIDEpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdCwgJzAuMC4wLjAnKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmRhbGwoYid4eHgnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHByb3RvIGlzIG5vdCBOb25lLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdJTklUSUFMJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHByb3RvLm5ieXRlcyA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMjcuMC4wLjEnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGVlcm5hbWUnKVswXSkKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIHdpbmRvd3MgaW9jcAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgICMgdGhlIGNsaWVudCBzb2NrZXQgbXVzdCBiZSBjbG9zZWQgYWZ0ZXIgdG8gYXZvaWQgRUNPTk5SRVNFVCB1cG9uCisgICAgICAgICMgcmVjdigpL3NlbmQoKSBvbiB0aGUgc2VydmluZyBzb2NrZXQKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICAjIGNsb3NlIHNlcnZlcgorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKworICAgICAgICBjbGFzcyBDbGllbnRNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oCisgICAgICAgICAgICBjZXJ0ZmlsZT1vcy5wYXRoLmpvaW4oaGVyZSwgJ3NhbXBsZS5jcnQnKSwKKyAgICAgICAgICAgIGtleWZpbGU9b3MucGF0aC5qb2luKGhlcmUsICdzYW1wbGUua2V5JykpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKAorICAgICAgICAgICAgZmFjdG9yeSwgJzEyNy4wLjAuMScsIDAsIHNzbD1zc2xjb250ZXh0KQorCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMTI3LjAuMC4xJykKKworICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oQ2xpZW50TXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICBjbGllbnQud3JpdGUoYid4eHgnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVByb3RvKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgc3RvcCBzZXJ2aW5nCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NvY2soc2VsZik6CisgICAgICAgIHByb3RvID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgY2xhc3MgVGVzdE15UHJvdG8oTXlQcm90byk6CisgICAgICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5jb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQorICAgICAgICAgICAgICAgIHByb3RvLnNldF9yZXN1bHQoc2VsZikKKworICAgICAgICBzb2NrX29iID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29ja19vYi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzb2NrX29iLmJpbmQoKCcwLjAuMC4wJywgMCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKFRlc3RNeVByb3RvLCBzb2NrPXNvY2tfb2IpCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc29jaywgc29ja19vYikKKworICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdCwgJzAuMC4wLjAnKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9hZGRyX2luX3VzZShzZWxmKToKKyAgICAgICAgc29ja19vYiA9IHNvY2tldC5zb2NrZXQodHlwZT1zb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNvY2tfb2Iuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgc29ja19vYi5iaW5kKCgnMC4wLjAuMCcsIDApKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCBzb2NrPXNvY2tfb2IpCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgaG9zdD1ob3N0LCBwb3J0PXBvcnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQUREUklOVVNFKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJUFY2X0VOQUJMRUQsICdJUHY2IG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9kdWFsX3N0YWNrKHNlbGYpOgorICAgICAgICBmX3Byb3RvID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgY2xhc3MgVGVzdE15UHJvdG8oTXlQcm90byk6CisgICAgICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5jb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQorICAgICAgICAgICAgICAgIGZfcHJvdG8uc2V0X3Jlc3VsdChzZWxmKQorCisgICAgICAgIHRyeV9jb3VudCA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3J0ID0gZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKFRlc3RNeVByb3RvLCBob3N0PU5vbmUsIHBvcnQ9cG9ydCkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBpZiBleC5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgorICAgICAgICAgICAgICAgICAgICB0cnlfY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCg1LCB0cnlfY291bnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfcHJvdG8pCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgZl9wcm90byA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCc6OjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9wcm90bykKKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2VydmVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IsIGNsaWVudC5jb25uZWN0LCAoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0TXlEYXRhZ3JhbVByb3RvKE15RGF0YWdyYW1Qcm90byk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oaW5uZXJfc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPXNlbGYubG9vcCkKKworICAgICAgICAgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZW5kdG8oYidyZXNwOicrZGF0YSwgYWRkcikKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIFRlc3RNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc190cmFuc3BvcnQsIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNfdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICByZW1vdGVfYWRkcj0oaG9zdCwgcG9ydCkpCisgICAgICAgIHRyYW5zcG9ydCwgY2xpZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0lOSVRJQUxJWkVEJywgY2xpZW50LnN0YXRlKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGIneHh4JykKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBpZiBzZXJ2ZXIubmJ5dGVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZXJ2ZXIubmJ5dGVzKQorICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIGlmIGNsaWVudC5uYnl0ZXM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgICMgcmVjZWl2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBjbGllbnQubmJ5dGVzKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNsaWVudC5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBjbGllbnQuc3RhdGUpCisgICAgICAgIHNlcnZlci50cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfaW50ZXJuYWxfZmRzKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxvb3AsIHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsb29wLl9pbnRlcm5hbF9mZHMpCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxvb3AuX2ludGVybmFsX2ZkcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9vcC5fY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvb3AuX3Nzb2NrKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X3JlYWRfcGlwZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15UmVhZFBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHJwaXBlLCB3cGlwZSA9IG9zLnBpcGUoKQorICAgICAgICBwaXBlb2JqID0gaW8ub3BlbihycGlwZSwgJ3JiJywgMTAyNCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF9yZWFkX3BpcGUoZmFjdG9yeSwgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3Mud3JpdGUod3BpcGUsIGInMjM0NScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLmNsb3NlKHdwaXBlKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRicsICdDTE9TRUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHJwaXBlLCB3cGlwZSA9IG9zLnBpcGUoKQorICAgICAgICBwaXBlb2JqID0gaW8ub3Blbih3cGlwZSwgJ3diJywgMTAyNCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCB0cmFuc3BvcnQKKyAgICAgICAgICAgIHQsIHAgPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jb25uZWN0X3dyaXRlX3BpcGUoZmFjdG9yeSwgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gdAorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZGF0YSA9IG9zLnJlYWQocnBpcGUsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxJywgZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicyMzQ1JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGRhdGEgPSBvcy5yZWFkKHJwaXBlLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMjM0NScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIG9zLmNsb3NlKHJwaXBlKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGlwZV9kaXNjb25uZWN0X29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwb3J0ID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgcnNvY2ssIHdzb2NrID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4od3NvY2suZGV0YWNoKCksICd3YicsIDEwMjQpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgdHJhbnNwb3J0CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF93cml0ZV9waXBlKGZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHQKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMScpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYubG9vcC5zb2NrX3JlY3YocnNvY2ssIDEwMjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMScsIGRhdGEpCisKKyAgICAgICAgcnNvY2suY2xvc2UoKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICBkZWYgdGVzdF9wcm9tcHRfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX3JlY3YociwgMSkKKyAgICAgICAgb3YgPSBnZXRhdHRyKGYsICdvdicsIE5vbmUpCisgICAgICAgIGlmIG92IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG92LnBlbmRpbmcpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbWFpbigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oZi5jYW5jZWwpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXMgPSAnY2FuY2VsbGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBzdGFydCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sobWFpbigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZWxhcHNlZCA9IHRpbWUubW9ub3RvbmljKCkgLSBzdGFydAorCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlbGFwc2VkLCAwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ2NhbmNlbGxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIGYucmVzdWx0KQorICAgICAgICBpZiBvdiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YucGVuZGluZykKKyAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcocikKKworICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgdy5jbG9zZSgpCisKKworY2xhc3MgU3VicHJvY2Vzc1Rlc3RzTWl4aW46CisKKyAgICBkZWYgY2hlY2tfdGVybWluYXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmV0dXJuY29kZSwgaW50KQorICAgICAgICAgICAgIyBleHBlY3QgMSBidXQgc29tZXRpbWVzIGdldCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHVEVSTSwgcmV0dXJuY29kZSkKKworICAgIGRlZiBjaGVja19raWxsZWQoc2VsZiwgcmV0dXJuY29kZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgICMgZXhwZWN0IDEgYnV0IHNvbWV0aW1lcyBnZXQgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR0tJTEwsIHJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4ZWMoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3RkaW4ud3JpdGUoYidQeXRob24gVGhlIFdpbm5lcicpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2ludGVyYWN0aXZlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgICAgICBzdGRpbi53cml0ZShiJ1B5dGhvbiAnKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgICAgICBwcm90by5nb3RfZGF0YVsxXS5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uICcsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgICAgIHN0ZGluLndyaXRlKGInVGhlIFdpbm5lcicpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX3Rlcm1pbmF0ZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2hlbGwoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgJ2VjaG8gUHl0aG9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKGYuZG9uZSgpIGZvciBmIGluIHByb3RvLmRpc2Nvbm5lY3RzLnZhbHVlcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5kYXRhWzFdLnJzdHJpcChiJ1xyXG4nKSwgYidQeXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvLmRhdGFbMl0sIGInJykKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfZXhpdGNvZGUoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfY2xvc2VfYWZ0ZXJfZmluaXNoKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICdleGl0IDcnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDIpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfa2lsbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLmtpbGwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3AudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywgIkRvbid0IGhhdmUgU0lHSFVQIikKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NlbmRfc2lnbmFsKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3Auc2VuZF9zaWduYWwoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdIVVAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3N0ZGVycihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvMi5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidPVVQ6dGVzdCcsIHByb3RvLmRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5kYXRhWzJdLnN0YXJ0c3dpdGgoYidFUlI6dGVzdCcpLCBwcm90by5kYXRhWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3N0ZGVycl9yZWRpcmVjdF90b19zdGRvdXQoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNobzIucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2csIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDIpKQorCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uZGF0YVsxXS5zdGFydHN3aXRoKGInT1VUOnRlc3RFUlI6dGVzdCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8uZGF0YVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHByb3RvLmRhdGFbMl0pCisKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19jbG9zZV9jbGllbnRfc3RyZWFtKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8zLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZG91dCA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMSkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidPVVQ6dGVzdCcsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kaXNjb25uZWN0c1sxXSkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid4eHgnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzJdLndhaXQoKSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInRVJSOkJyb2tlblBpcGVFcnJvcicsIHByb3RvLmRhdGFbMl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFmdGVyIGNsb3NpbmcgdGhlIHJlYWQtZW5kIG9mIGEgcGlwZSwgd3JpdGluZyB0byB0aGUKKyAgICAgICAgICAgICMgd3JpdGUtZW5kIHVzaW5nIG9zLndyaXRlKCkgZmFpbHMgd2l0aCBlcnJubz09RUlOVkFMIGFuZAorICAgICAgICAgICAgIyBHZXRMYXN0RXJyb3IoKT09RVJST1JfSU5WQUxJRF9OQU1FIG9uIFdpbmRvd3MhPyEgIChVc2luZworICAgICAgICAgICAgIyBXcml0ZUZpbGUoKSB3ZSBnZXQgRVJST1JfQlJPS0VOX1BJUEUgYXMgZXhwZWN0ZWQuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0VSUjpPU0Vycm9yJywgcHJvdG8uZGF0YVsyXSkKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc193YWl0X25vX3NhbWVfZ3JvdXAoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgICMgc3RhcnQgdGhlIG5ldyBwcm9jZXNzIGluIGEgbmV3IHNlc3Npb24KKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICdleGl0IDcnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsCisgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHByb3RvLnJldHVybmNvZGUpCisKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB3aW5kb3dzX2V2ZW50cworCisgICAgY2xhc3MgU2VsZWN0RXZlbnRMb29wVGVzdHMoRXZlbnRMb29wVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3dzX2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcCgpCisKKyAgICBjbGFzcyBQcm9hY3RvckV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gd2luZG93c19ldmVudHMuUHJvYWN0b3JFdmVudExvb3AoKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGltY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbWNvbXBhdGlibGUgd2l0aCBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3JlYWRlcigpIikKKworICAgICAgICBkZWYgdGVzdF9yZWFkZXJfY2FsbGJhY2tfY2FuY2VsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfcmVhZGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X3dyaXRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3dyaXRlcigpIikKKworICAgICAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2tfY2FuY2VsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfd3JpdGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KAorICAgICAgICAgICAgICAgICJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KCkiKQorZWxzZToKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9ycworICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdW5peF9ldmVudHMKKworICAgIGNsYXNzIFVuaXhFdmVudExvb3BUZXN0c01peGluKEV2ZW50TG9vcFRlc3RzTWl4aW4pOgorICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgICAgIHdhdGNoZXIgPSB1bml4X2V2ZW50cy5TYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgICAgIHdhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgZXZlbnRzLnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgZXZlbnRzLnNldF9jaGlsZF93YXRjaGVyKE5vbmUpCisgICAgICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgS3F1ZXVlRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3AoCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcigpKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIEVQb2xsRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLlNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9ycy5FcG9sbFNlbGVjdG9yKCkpCisKKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgICAgICBjbGFzcyBQb2xsRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuUG9sbFNlbGVjdG9yKCkpCisKKyAgICAjIFNob3VsZCBhbHdheXMgZXhpc3QuCisgICAgY2xhc3MgU2VsZWN0RXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKSkKKworCitjbGFzcyBIYW5kbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworCisgICAgICAgIGFyZ3MgPSAoKQorICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICdIYW5kbGUoJworICAgICAgICAgICAgJzxmdW5jdGlvbiBIYW5kbGVUZXN0cy50ZXN0X2hhbmRsZS48bG9jYWxzPi5jYWxsYmFjaycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKCkpJykpCisKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5fY2FuY2VsbGVkKQorCisgICAgICAgIHIgPSByZXByKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAnSGFuZGxlKCcKKyAgICAgICAgICAgICc8ZnVuY3Rpb24gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGUuPGxvY2Fscz4uY2FsbGJhY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKTxjYW5jZWxsZWQ+JyksIHIpCisKKyAgICBkZWYgdGVzdF9tYWtlX2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIGgxID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGV2ZW50cy5tYWtlX2hhbmRsZSwgaDEsICgpKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfd2l0aF9leGNlcHRpb24oc2VsZiwgbG9nKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKworICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIGguX3J1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2cuZXhjZXB0aW9uLmNhbGxlZCkKKworCitjbGFzcyBUaW1lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIGggPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgbGFtYmRhOiBGYWxzZSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChoKSwgaGFzaCh3aGVuKSkKKworICAgIGRlZiB0ZXN0X3RpbWVyKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICBhcmdzID0gKCkKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgaCA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKScpKQorCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguX2NhbmNlbGxlZCkKKworICAgICAgICByID0gcmVwcihoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKCkpPGNhbmNlbGxlZD4nKSwgcikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLlRpbWVySGFuZGxlLCBOb25lLCBjYWxsYmFjaywgYXJncykKKworICAgIGRlZiB0ZXN0X3RpbWVyX2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworCisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisKKyAgICAgICAgaDEgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICBoMiA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCkpCisgICAgICAgICMgVE9ETzogVXNlIGFzc2VydExlc3MgZXRjLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxIDwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPCBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDw9IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPD0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPiBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMiA+IGgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPj0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+PSBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID09IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxICE9IGgyKQorCisgICAgICAgIGgyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaDIpCisKKyAgICAgICAgaDEgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICBoMiA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuICsgMTAuMCwgY2FsbGJhY2ssICgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPCBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMiA8IGgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPD0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPD0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPiBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyID4gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPj0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+PSBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxICE9IGgyKQorCisgICAgICAgIGgzID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIGgxLl9fZXFfXyhoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIGgxLl9fbmVfXyhoMykpCisKKworY2xhc3MgQWJzdHJhY3RFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBsb29wID0gZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl9mb3JldmVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmlzX3J1bm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfbGF0ZXIsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX2F0LCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9zb29uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AudGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX2luX2V4ZWN1dG9yLCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5nZXRhZGRyaW5mbywgJ2xvY2FsaG9zdCcsIDgwODApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5nZXRuYW1laW5mbywgKCdsb2NhbGhvc3QnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9jb25uZWN0aW9uLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX3NlcnZlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF9yZWFkZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfcmVhZGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuYWRkX3dyaXRlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV93cml0ZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX3JlY3YsIGYsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19zZW5kYWxsLCBmLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfY29ubmVjdCwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfYWNjZXB0LCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUsIGYsCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLnNlbnRpbmVsLnBpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jb25uZWN0X3dyaXRlX3BpcGUsIGYsCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLnNlbnRpbmVsLnBpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdWJwcm9jZXNzX3NoZWxsLCBmLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5zZW50aW5lbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnN1YnByb2Nlc3NfZXhlYywgZikKKworCitjbGFzcyBQcm90b2NvbHNBYnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHAgPSBwcm90b2NvbHMuUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmNvbm5lY3Rpb25fbWFkZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZGF0YV9yZWNlaXZlZChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5lb2ZfcmVjZWl2ZWQoKSkKKworICAgICAgICBkcCA9IHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuY29ubmVjdGlvbl9tYWRlKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmVycm9yX3JlY2VpdmVkKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5kYXRhZ3JhbV9yZWNlaXZlZChmLCBmKSkKKworICAgICAgICBzcCA9IHByb3RvY29scy5TdWJwcm9jZXNzUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucGlwZV9kYXRhX3JlY2VpdmVkKDEsIGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5waXBlX2Nvbm5lY3Rpb25fbG9zdCgxLCBmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucHJvY2Vzc19leGl0ZWQoKSkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY3JlYXRlX3BvbGljeShzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfZXZlbnRzCisgICAgICAgICAgICByZXR1cm4gd2luZG93c19ldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHVuaXhfZXZlbnRzCisgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKyAgICBkZWYgdGVzdF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kuc2V0X2V2ZW50X2xvb3AsIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kubmV3X2V2ZW50X2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9jaGlsZF93YXRjaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QoKSkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb2xpY3kuX2xvY2FsLl9sb29wKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5Ll9sb2NhbC5fbG9vcCwgbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF9hZnRlcl9zZXRfbm9uZShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3ApCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5ldmVudHMudGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkJykKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF90aHJlYWQoc2VsZiwgbV9jdXJyZW50X3RocmVhZCk6CisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIGRlZiB0ZXN0X25ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBvbGRfbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvbGljeS5zZXRfZXZlbnRfbG9vcCwgb2JqZWN0KCkpCisKKyAgICAgICAgbG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9sZF9sb29wLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIG9sZF9sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gZXZlbnRzLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb2xpY3ksIGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3ksIGV2ZW50cy5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKSkKKworICAgIGRlZiB0ZXN0X3NldF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgZXZlbnRzLnNldF9ldmVudF9sb29wX3BvbGljeSwgb2JqZWN0KCkpCisKKyAgICAgICAgb2xkX3BvbGljeSA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorCisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeSwgZXZlbnRzLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHBvbGljeSwgb2xkX3BvbGljeSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1ZmNmMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKQEAgLTAsMCArMSwzNDcgQEAKKyIiIlRlc3RzIGZvciBmdXR1cmVzLnB5LiIiIgorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2RlZiBfZmFrZWZ1bmMoZik6CisgICAgcmV0dXJuIGYKKworCitjbGFzcyBGdXR1cmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxfc3RhdGUoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfaW5pdF9jb25zdHJ1Y3Rvcl9kZWZhdWx0X2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIEZ1dHVyZSBkb2VzJ3QgYWNjZXB0IGEgcG9zaXRpb25hbCBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZ1dHVyZXMuRnV0dXJlLCA0MikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIGYuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYucmVzdWx0KQorCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLmV4Y2VwdGlvbikKKworICAgICAgICBmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmLnJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmV4Y2VwdGlvbigpLCBleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX3R3aWNlKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGZpeHR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkICdBJworICAgICAgICAgICAgeCA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgeWllbGQgJ0InLCB4CisgICAgICAgICAgICB5ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICB5aWVsZCAnQycsIHkKKworICAgICAgICBnID0gZml4dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgJ0EnKSAgIyB5aWVsZCAnQScuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgZikgICMgRmlyc3QgeWllbGQgZnJvbSBmLgorICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgKCdCJywgNDIpKSAgIyB5aWVsZCAnQicsIHguCisgICAgICAgICMgVGhlIHNlY29uZCAieWllbGQgZnJvbSBmIiBkb2VzIG5vdCB5aWVsZCBmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICgnQycsIDQyKSkgICMgeWllbGQgJ0MnLCB5LgorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZl9wZW5kaW5nID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3BlbmRpbmcpLCAnRnV0dXJlPFBFTkRJTkc+JykKKyAgICAgICAgZl9wZW5kaW5nLmNhbmNlbCgpCisKKyAgICAgICAgZl9jYW5jZWxsZWQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9jYW5jZWxsZWQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfY2FuY2VsbGVkKSwgJ0Z1dHVyZTxDQU5DRUxMRUQ+JykKKworICAgICAgICBmX3Jlc3VsdCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX3Jlc3VsdC5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3Jlc3VsdCksICdGdXR1cmU8cmVzdWx0PTQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmX3Jlc3VsdC5yZXN1bHQoKSwgNCkKKworICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmX2V4Y2VwdGlvbiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfZXhjZXB0aW9uKSwgJ0Z1dHVyZTxleGNlcHRpb249UnVudGltZUVycm9yKCk+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmX2V4Y2VwdGlvbi5leGNlcHRpb24oKSwgZXhjKQorCisgICAgICAgIGZfZmV3X2NhbGxiYWNrcyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2Zld19jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2soX2Zha2VmdW5jKQorICAgICAgICBzZWxmLmFzc2VydEluKCdGdXR1cmU8UEVORElORywgWzxmdW5jdGlvbiBfZmFrZWZ1bmMnLAorICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZl9mZXdfY2FsbGJhY2tzKSkKKyAgICAgICAgZl9mZXdfY2FsbGJhY2tzLmNhbmNlbCgpCisKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgciA9IHJlcHIoZl9tYW55X2NhbGxiYWNrcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignRnV0dXJlPFBFTkRJTkcsIFs8ZnVuY3Rpb24gX2Zha2VmdW5jJywgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignPDE4IG1vcmU+JywgcikKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcy5jYW5jZWwoKQorCisgICAgZGVmIHRlc3RfY29weV9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBpbnRlcm5hbCBfY29weV9zdGF0ZSBtZXRob2Qgc2luY2UgaXQncyBiZWluZyBkaXJlY3RseQorICAgICAgICAjIGludm9rZWQgaW4gb3RoZXIgbW9kdWxlcy4KKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLnNldF9yZXN1bHQoMTApCisKKyAgICAgICAgbmV3ZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmLl9jb3B5X3N0YXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdmLnJlc3VsdCgpLCAxMCkKKworICAgICAgICBmX2V4Y2VwdGlvbiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uLl9jb3B5X3N0YXRlKGZfZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9leGNlcHRpb24uZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5ld2ZfZXhjZXB0aW9uLnJlc3VsdCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkLl9jb3B5X3N0YXRlKGZfY2FuY2VsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9jYW5jZWxsZWQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgYXJnMSwgYXJnMiA9IGNvcm8oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0ZXN0KQorICAgICAgICBmdXQuY2FuY2VsKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfYWJhbmRvbmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX3Jlc3VsdF91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfcmVzdWx0X3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZnV0LnJlc3VsdCgpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZnV0LmV4Y2VwdGlvbigpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl9yZXN1bHRfcmV0cmlldmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignYm9vbScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZ1dC5yZXN1bHQpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZShzZWxmKToKKworICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGZ1dHVyZXMud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMsIGlkZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYyLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdvaScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWRlbnQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZjEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxKQorICAgICAgICBzZWxmLmFzc2VydElzKGYxLCBmMikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV91c2VfZ2xvYmFsX2xvb3Aoc2VsZiwgbV9ldmVudHMpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGZ1dHVyZXMud3JhcF9mdXR1cmUoZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlLCBmMi5fbG9vcCkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgZjEgPSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKCkKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfY2FuY2VsMihzZWxmKToKKyAgICAgICAgZjEgPSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKCkKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjEuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZjIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjEucmVzdWx0KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuY2FuY2VsbGVkKCkpCisKKworY2xhc3MgRnV0dXJlRG9uZUNhbGxiYWNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgcnVuX2JyaWVmbHkoc2VsZik6CisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIF9tYWtlX2NhbGxiYWNrKHNlbGYsIGJhZywgdGhpbmcpOgorICAgICAgICAjIENyZWF0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgYXBwZW5kcyB0aGluZyB0byBiYWcuCisgICAgICAgIGRlZiBiYWdfYXBwZW5kZXIoZnV0dXJlKToKKyAgICAgICAgICAgIGJhZy5hcHBlbmQodGhpbmcpCisgICAgICAgIHJldHVybiBiYWdfYXBwZW5kZXIKKworICAgIGRlZiBfbmV3X2Z1dHVyZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2ludm9rZWRfb25fc2V0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgYmFnID0gW10KKyAgICAgICAgZiA9IHNlbGYuX25ld19mdXR1cmUoKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCA0MikpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDE3KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGYuc2V0X3Jlc3VsdCgnZm9vJykKKworICAgICAgICBzZWxmLnJ1bl9icmllZmx5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgWzQyLCAxN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfaW52b2tlZF9vbl9zZXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDEwMCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbMTAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZG9uZV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgYmFnID0gW10KKyAgICAgICAgZiA9IHNlbGYuX25ld19mdXR1cmUoKQorICAgICAgICBjYjEgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMSkKKyAgICAgICAgY2IyID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDIpCisgICAgICAgIGNiMyA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAzKQorCisgICAgICAgICMgQWRkIG9uZSBjYjEgYW5kIG9uZSBjYjIuCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IxKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMikKKworICAgICAgICAjIE9uZSBpbnN0YW5jZSBvZiBjYjIgcmVtb3ZlZC4gTm93IHRoZXJlJ3Mgb25seSBvbmUgY2IxLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IyKSwgMSkKKworICAgICAgICAjIE5ldmVyIGhhZCBhbnkgY2IzIGluIHRoZXJlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IzKSwgMCkKKworICAgICAgICAjIEFmdGVyIHRoaXMgdGhlcmUgd2lsbCBiZSA2IGluc3RhbmNlcyBvZiBjYjEgYW5kIG9uZSBvZiBjYjIuCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IyKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IxKQorCisgICAgICAgICMgUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgY2IxLiBPbmUgY2IyIHJlbWFpbnMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjEpLCA2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZi5zZXRfcmVzdWx0KCdmb28nKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgJ2ZvbycpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxMDZlMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5CkBAIC0wLDAgKzEsODM4IEBACisiIiJUZXN0cyBmb3IgbG9jay5weSIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitpbXBvcnQgcmUKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBsb2NrcworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworU1RSX1JHWF9SRVBSID0gKAorICAgIHInXjwoP1A8Y2xhc3M+Lio/KSBvYmplY3QgYXQgKD9QPGFkZHJlc3M+Lio/KScKKyAgICByJ1xbKD9QPGV4dHJhcz4nCisgICAgcicoc2V0fHVuc2V0fGxvY2tlZHx1bmxvY2tlZCkoLHZhbHVlOlxkKT8oLHdhaXRlcnM6XGQrKT8nCisgICAgcicpXF0+XFonCispCitSR1hfUkVQUiA9IHJlLmNvbXBpbGUoU1RSX1JHWF9SRVBSKQorCisKK2NsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBsb29wKQorCisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgbG9jayA9IGxvY2tzLkxvY2soKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihsb2NrKS5lbmRzd2l0aCgnW3VubG9ja2VkXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIobG9jaykpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihsb2NrKSkpCisKKyAgICBkZWYgdGVzdF9sb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb2NrKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZShzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICB0YXNrID0gdGFza3MuVGFzayhsb2NrLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24odGFzay5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5fd2FpdGVycykKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9yYWNlKHNlbGYpOgorICAgICAgICAjIFNldmVyYWwgdGFza3M6CisgICAgICAgICMgLSBBIGFjcXVpcmVzIHRoZSBsb2NrCisgICAgICAgICMgLSBCIGlzIGJsb2NrZWQgaW4gYXFjdWlyZSgpCisgICAgICAgICMgLSBDIGlzIGJsb2NrZWQgaW4gYXFjdWlyZSgpCisgICAgICAgICMKKyAgICAgICAgIyBOb3csIGNvbmN1cnJlbnRseToKKyAgICAgICAgIyAtIEIgaXMgY2FuY2VsbGVkCisgICAgICAgICMgLSBBIHJlbGVhc2VzIHRoZSBsb2NrCisgICAgICAgICMKKyAgICAgICAgIyBJZiBCJ3Mgd2FpdGVyIGlzIG1hcmtlZCBjYW5jZWxsZWQgYnV0IG5vdCB5ZXQgcmVtb3ZlZCBmcm9tCisgICAgICAgICMgX3dhaXRlcnMsIEEncyByZWxlYXNlKCkgY2FsbCB3aWxsIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIHNldAorICAgICAgICAjIEIncyB3YWl0ZXI7IGluc3RlYWQsIGl0IHNob3VsZCBtb3ZlIG9uIHRvIEMncyB3YWl0ZXIuCisKKyAgICAgICAgIyBTZXR1cDogQSBoYXMgdGhlIGxvY2ssIGIgYW5kIGMgYXJlIHdhaXRpbmcuCisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGxvY2tpdChuYW1lLCBibG9ja2VyKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBibG9ja2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGJsb2NrZXIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgICAgICBmYSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YSA9IHRhc2tzLlRhc2sobG9ja2l0KCdBJywgZmEpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorICAgICAgICB0YiA9IHRhc2tzLlRhc2sobG9ja2l0KCdCJywgTm9uZSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9jay5fd2FpdGVycyksIDEpCisgICAgICAgIHRjID0gdGFza3MuVGFzayhsb2NraXQoJ0MnLCBOb25lKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2NrLl93YWl0ZXJzKSwgMikKKworICAgICAgICAjIENyZWF0ZSB0aGUgcmFjZSBhbmQgY2hlY2suCisgICAgICAgICMgV2l0aG91dCB0aGUgZml4IHRoaXMgZmFpbGVkIGF0IHRoZSBsYXN0IGFzc2VydC4KKyAgICAgICAgZmEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0Yi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5fd2FpdGVyc1swXS5jYW5jZWxsZWQoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRiLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGMuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbG9jay5yZWxlYXNlKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub193YWl0ZXJzKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsb2NrLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb2NrKQorCisgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBpcyBub3QgcmFpc2VkIGluIHdpdGggZXhwcmVzc2lvbicpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworCitjbGFzcyBFdmVudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhldi5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBldiA9IGxvY2tzLkV2ZW50KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZXYpLmVuZHN3aXRoKCdbdW5zZXRdPicpKQorICAgICAgICBtYXRjaCA9IFJHWF9SRVBSLm1hdGNoKHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLmdyb3VwKCdleHRyYXMnKSwgJ3Vuc2V0JykKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihldikuZW5kc3dpdGgoJ1tzZXRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgICAgIGV2Ll93YWl0ZXJzLmFwcGVuZCh1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGV2LndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFszLCAxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X29uX3NldChzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXYuc2V0KCkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGV2LndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBldiA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHdhaXQgPSB0YXNrcy5UYXNrKGV2LndhaXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24od2FpdC5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfd2l0aF93YWl0ZXJzKHNlbGYpOgorICAgICAgICBldiA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oZXYuX3dhaXRlcnMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKworY2xhc3MgQ29uZGl0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBsb29wKQorCisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IHRhc2tzLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5ub3RpZnkoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorCisgICAgICAgIHdhaXQgPSB0YXNrcy5UYXNrKGNvbmQud2FpdCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLl93YWl0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb25kLndhaXQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcmVzdWx0ID0gRmFsc2UKKworICAgICAgICBkZWYgcHJlZGljYXRlKCk6CisgICAgICAgICAgICByZXR1cm4gcHJlc3VsdAorCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdF9mb3IocHJlZGljYXRlKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHByZXN1bHQgPSBUcnVlCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgIyBwcmVkaWNhdGUgY2FuIHJldHVybiB0cnVlIGltbWVkaWF0ZWx5CisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC53YWl0X2ZvcihsYW1iZGE6IFsxLCAyLCAzXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgY29uZC53YWl0X2ZvcihsYW1iZGE6IEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeShzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5ub3RpZnkoMjA0OCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV9hbGwoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5X2FsbCgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfbm90aWZ5X3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnlfYWxsKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd1bmxvY2tlZCcgaW4gcmVwcihjb25kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoY29uZCkpKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbG9ja2VkJyBpbiByZXByKGNvbmQpKQorCisgICAgICAgIGNvbmQuX3dhaXRlcnMuYXBwZW5kKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MScgaW4gcmVwcihjb25kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoY29uZCkpKQorCisgICAgICAgIGNvbmQuX3dhaXRlcnMuYXBwZW5kKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MicgaW4gcmVwcihjb25kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoY29uZCkpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfY29uZCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGNvbmQpCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfY29uZCgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9ub195aWVsZChzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNvbmQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSdW50aW1lRXJyb3IgaXMgbm90IHJhaXNlZCBpbiB3aXRoIGV4cHJlc3Npb24nKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc3RyKGVyciksCisgICAgICAgICAgICAgICAgJyJ5aWVsZCBmcm9tIiBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbicpCisKKworY2xhc3MgU2VtYXBob3JlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgbG9vcCkKKworICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VtLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsX3ZhbHVlX3plcm8oc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZSgwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VtKS5lbmRzd2l0aCgnW3VubG9ja2VkLHZhbHVlOjFdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNlbSkuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnMnIG5vdCBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbS5fd2FpdGVycy5hcHBlbmQodW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoxJyBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbS5fd2FpdGVycy5hcHBlbmQodW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoyJyBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VtLl92YWx1ZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZW0pCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2Nrcy5TZW1hcGhvcmUsIC0xKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZShzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKDMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzQocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCg0KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzZW0uX3dhaXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgdDQgPSB0YXNrcy5UYXNrKGM0KHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oc2VtLl93YWl0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDQuZG9uZSgpKQorCisgICAgICAgICMgY2xlYW51cCBsb2NrZWQgc2VtYXBob3JlCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmVfY2FuY2VsKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKworICAgICAgICBhY3F1aXJlID0gdGFza3MuVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihhY3F1aXJlLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgYWNxdWlyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0uX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vdF9hY3F1aXJlZChzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuQm91bmRlZFNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKDIsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHNlbSkKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJhNTFjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNDg0IEBACisiIiJUZXN0cyBmb3IgcHJvYWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IEJhc2VQcm9hY3RvckV2ZW50TG9vcAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0Citmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIFByb2FjdG9yU29ja2V0VHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm9hY3RvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IgPSBzZWxmLnByb2FjdG9yCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19kYXRhKHNlbGYpOgorICAgICAgICByZXMgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzLnNldF9yZXN1bHQoYidkYXRhJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfbm9fZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdHIuX2xvb3BfcmVhZGluZywgcmVzKQorCisgICAgICAgIHRyLmNsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfZnV0ID0gcmVzCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcocmVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvbkFib3J0ZWRFcnJvcigpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19hYm9ydGVkX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IoKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19hYm9ydGVkX2lzX2ZhdGFsKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Nvbm5fcmVzZXRfbG9zdChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlc2V0RXJyb3IoKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IEZhbHNlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gKE9TRXJyb3IoKSkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBbYidkYXRhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fbG9vcF93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX21vcmUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgW2InZGF0YSddKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9sb29wX3dyaXRpbmcuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZS5hZGRfZG9uZV9jYWxsYmFjay5cCisgICAgICAgICAgICBhc3NlcnRfY2FsbGVkX3dpdGgodHIuX2xvb3Bfd3JpdGluZykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnByb2FjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19lcnIoc2VsZiwgbV9sb2cpOgorICAgICAgICBlcnIgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHRyLl9jb25uX2xvc3QgPSAxCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBbXSkKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX3N0b3Aoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChiJ2RhdGEnKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gZnV0CisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fd3JpdGVfZnV0KQorCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCgxKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gZnV0CisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl93cml0ZV9mdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5yZXNldF9tb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV93cml0ZV9mdXQoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ucHJvYWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZiwgbV9sb2dnaW5nKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvcihOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2ZvcmNlX2Nsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nZ2luZy5leGNlcHRpb24uY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHJlYWRfZnV0ID0gdHIuX3JlYWRfZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVfZnV0ID0gdHIuX3dyaXRlX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgICAgIHJlYWRfZnV0LmNhbmNlbC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB3cml0ZV9mdXQuY2FuY2VsLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2VfaWRlbXBvdGVudChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3JfMihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bi5hc3NlcnRfY2FsbGVkX3dpdGgoc29ja2V0LlNIVVRfV1IpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxfY291bnQsIDEpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZSA9IGYKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9lb2Zfd3JpdHRlbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2h1dGRvd24uY2FsbGVkKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorICAgICAgICBmLnNldF9yZXN1bHQoNCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bi5hc3NlcnRfY2FsbGVkX3dpdGgoc29ja2V0LlNIVVRfV1IpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcl93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2h1dGRvd24uY2FsbGVkKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorICAgICAgICBmLnNldF9yZXN1bHQoNCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2R1cGxleF9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9wYXVzZV9yZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZnV0dXJlcyA9IFtdCisgICAgICAgIGZvciBtc2cgaW4gW2InZGF0YTEnLCBiJ2RhdGEyJywgYidkYXRhMycsIGInZGF0YTQnLCBiJyddOgorICAgICAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZi5zZXRfcmVzdWx0KG1zZykKKyAgICAgICAgICAgIGZ1dHVyZXMuYXBwZW5kKGYpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IGZ1dHVyZXMKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMScpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTQnKQorICAgICAgICB0ci5jbG9zZSgpCisKKworY2xhc3MgQmFzZVByb2FjdG9yRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5wcm9hY3RvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5zc29jaywgc2VsZi5jc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpLCB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGNsYXNzIEV2ZW50TG9vcChCYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgZGVmIF9zb2NrZXRwYWlyKHMpOgorICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5zc29jaywgc2VsZi5jc29jaykKKworICAgICAgICBzZWxmLmxvb3AgPSBFdmVudExvb3Aoc2VsZi5wcm9hY3RvcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdChCYXNlUHJvYWN0b3JFdmVudExvb3AsICdjYWxsX3Nvb24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdChCYXNlUHJvYWN0b3JFdmVudExvb3AsICdfc29ja2V0cGFpcicpCisgICAgZGVmIHRlc3RfY3RvcihzZWxmLCBzb2NrZXRwYWlyLCBjYWxsX3Nvb24pOgorICAgICAgICBzc29jaywgY3NvY2sgPSBzb2NrZXRwYWlyLnJldHVybl92YWx1ZSA9ICgKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suTW9jaygpLCB1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgbG9vcCA9IEJhc2VQcm9hY3RvckV2ZW50TG9vcChzZWxmLnByb2FjdG9yKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AuX3Nzb2NrLCBzc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLl9jc29jaywgY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vcC5faW50ZXJuYWxfZmRzLCAxKQorICAgICAgICBjYWxsX3Nvb24uYXNzZXJ0X2NhbGxlZF93aXRoKGxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLl9pbnRlcm5hbF9mZHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX2Nzb2NrKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvYWN0b3IuY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Byb2FjdG9yKQorCisgICAgICAgIHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NvY2tfcmVjdihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzZWxmLnNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCAxMDI0KQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc2VsZi5zb2NrLCAxMjMpCisgICAgICAgIHNlbGYucHJvYWN0b3IuY29ubmVjdC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCAxMjMpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5hY2NlcHQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaykKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgQmFzZVByb2FjdG9yRXZlbnRMb29wLCBzZWxmLnByb2FjdG9yKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYuc29jaywgdW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc3NvY2ssIDQwOTYpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nX2Z1dChzZWxmKToKKyAgICAgICAgZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZigpCisgICAgICAgIHNlbGYuY3NvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoYid4JykKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKFtdKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ucHJvYWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcihzZWxmLCBtX2xvZyk6CisgICAgICAgIHBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbF9zb29uID0gc2VsZi5sb29wLmNhbGxfc29vbiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nKHBmLCBzZWxmLnNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsX3Nvb24uY2FsbGVkKQorCisgICAgICAgICMgY2FsbGJhY2sKKyAgICAgICAgbG9vcCA9IGNhbGxfc29vbi5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgbG9vcCgpCisgICAgICAgIHNlbGYucHJvYWN0b3IuYWNjZXB0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2spCisKKyAgICAgICAgIyBjb25uCisgICAgICAgIGZ1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZ1dC5yZXN1bHQucmV0dXJuX3ZhbHVlID0gKHVuaXR0ZXN0Lm1vY2suTW9jaygpLCB1bml0dGVzdC5tb2NrLk1vY2soKSkKKworICAgICAgICBtYWtlX3RyID0gc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5yZXN1bHQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV90ci5jYWxsZWQpCisKKyAgICAgICAgIyBleGNlcHRpb24KKyAgICAgICAgZnV0LnJlc3VsdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZy5leGNlcHRpb24uY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9jYW5jZWwoc2VsZik6CisgICAgICAgIHBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbF9zb29uID0gc2VsZi5sb29wLmNhbGxfc29vbiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nKHBmLCBzZWxmLnNvY2spCisgICAgICAgIGxvb3AgPSBjYWxsX3Nvb24uY2FsbF9hcmdzWzBdWzBdCisKKyAgICAgICAgIyBjYW5jZWxsZWQKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zdG9wX3NlcnZpbmcoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvYWN0b3IuX3N0b3Bfc2VydmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoc29jaykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjRlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9xdWV1ZXMucHkKQEAgLTAsMCArMSw0NzAgQEAKKyIiIlRlc3RzIGZvciBxdWV1ZXMucHkiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitmcm9tIGFzeW5jaW8gaW1wb3J0IGV2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGxvY2tzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHF1ZXVlcworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgX1F1ZXVlVGVzdEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKworY2xhc3MgUXVldWVCYXNpY1Rlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiBfdGVzdF9yZXByX29yX3N0cihzZWxmLCBmbiwgZXhwZWN0X2lkKToKKyAgICAgICAgIiIiVGVzdCBRdWV1ZSdzIHJlcHIgb3Igc3RyLgorCisgICAgICAgIGZuIGlzIHJlcHIgb3Igc3RyLiBleHBlY3RfaWQgaXMgVHJ1ZSBpZiB3ZSBleHBlY3QgdGhlIFF1ZXVlJ3MgaWQgdG8KKyAgICAgICAgYXBwZWFyIGluIGZuKFF1ZXVlKCkpLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZuKHEpLnN0YXJ0c3dpdGgoJzxRdWV1ZScpLCBmbihxKSkKKyAgICAgICAgaWRfaXNfcHJlc2VudCA9IGhleChpZChxKSkgaW4gZm4ocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfaWQsIGlkX2lzX3ByZXNlbnQpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWRkX2dldHRlcigpOgorICAgICAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgICAgICAjIFN0YXJ0IGEgdGFzayB0aGF0IHdhaXRzIHRvIGdldC4KKyAgICAgICAgICAgIHRhc2tzLlRhc2socS5nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgIyBMZXQgaXQgc3RhcnQgd2FpdGluZy4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19nZXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEuZ2V0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhZGRfZ2V0dGVyKCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWRkX3B1dHRlcigpOgorICAgICAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBwdXQuCisgICAgICAgICAgICB0YXNrcy5UYXNrKHEucHV0KDIpLCBsb29wPWxvb3ApCisgICAgICAgICAgICAjIExldCBpdCBzdGFydCB3YWl0aW5nLgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3B1dHRlcnNbMV0nIGluIGZuKHEpKQorICAgICAgICAgICAgIyByZXN1bWUgcS5wdXQgY29yb3V0aW5lIHRvIGZpbmlzaCBnZW5lcmF0b3IKKyAgICAgICAgICAgIHEuZ2V0X25vd2FpdCgpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWRkX3B1dHRlcigpKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfcXVldWU9WzFdJyBpbiBmbihxKSkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHEuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVwcl9vcl9zdHIocmVwciwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZXByX29yX3N0cihzdHIsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCkpCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X2Z1bGwoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocS5mdWxsKCkpCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShtYXhzaXplPTEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpKQorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAzLCAyXSwgaXRlbXMpCisKKyAgICBkZWYgdGVzdF9tYXhzaXplKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0yLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcS5tYXhzaXplKQorICAgICAgICBoYXZlX2JlZW5fcHV0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBwdXR0ZXIoKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoaSkKKyAgICAgICAgICAgICAgICBoYXZlX2JlZW5fcHV0LmFwcGVuZChpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICB0ID0gdGFza3MuVGFzayhwdXR0ZXIoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjAxLCBsb29wPWxvb3ApCisKKyAgICAgICAgICAgICMgVGhlIHB1dHRlciBpcyBibG9ja2VkIGFmdGVyIHB1dHRpbmcgdHdvIGl0ZW1zLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMCwgMV0sIGhhdmVfYmVlbl9wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgICAgICAgICAjIExldCB0aGUgcHV0dGVyIHJlc3VtZSBhbmQgcHV0IGxhc3QgaXRlbS4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMCwgMSwgMl0sIGhhdmVfYmVlbl9wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDIsIGxvb3AudGltZSgpKQorCisKK2NsYXNzIFF1ZXVlR2V0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorCisgICAgZGVmIHRlc3RfZ2V0X3dpdGhfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZSgxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEuX3B1dHRlcnMuYXBwZW5kKCgyLCB3YWl0ZXIpKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YWl0ZXIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19nZXRfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICBzdGFydGVkID0gbG9ja3MuRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5pc2hlZAorICAgICAgICAgICAgc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBxLmdldCgpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjAxLCBxLnB1dF9ub3dhaXQsIDEpCisgICAgICAgICAgICBxdWV1ZV9nZXRfdGFzayA9IHRhc2tzLlRhc2socXVldWVfZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RhcnRlZC53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluaXNoZWQpCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHF1ZXVlX2dldF90YXNrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluaXNoZWQpCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX2dldF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHF1ZXVlcy5FbXB0eSwgcS5nZXRfbm93YWl0KQorCisgICAgZGVmIHRlc3RfZ2V0X2NhbmNlbGxlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDYxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gdGFza3Mud2FpdF9mb3IocS5nZXQoKSwgMC4wNTEsIGxvb3A9bG9vcCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZ2V0X3Rhc2sgPSB0YXNrcy5UYXNrKHF1ZXVlX2dldCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkgICMgbGV0IHRoZSB0YXNrIHN0YXJ0CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBnZXRfdGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNiwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsbGVkX3JhY2Uoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2socS5nZXQoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHQxLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBxLnB1dF9ub3dhaXQoJ2EnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5yZXN1bHQoKSwgJ2EnKQorCisgICAgZGVmIHRlc3RfZ2V0X3dpdGhfd2FpdGluZ19wdXR0ZXJzKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wLCBtYXhzaXplPTEpCisgICAgICAgIHRhc2tzLlRhc2socS5wdXQoJ2EnKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2tzLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5nZXQoKSksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYicpCisKKworY2xhc3MgUXVldWVQdXRUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICAjIE5vIG1heHNpemUsIHdvbid0IGJsb2NrLgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXRfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPWxvb3ApCisgICAgICAgIHN0YXJ0ZWQgPSBsb2Nrcy5FdmVudChsb29wPWxvb3ApCisgICAgICAgIGZpbmlzaGVkID0gRmFsc2UKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZpbmlzaGVkCisgICAgICAgICAgICBzdGFydGVkLnNldCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDIpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjAxLCBxLmdldF9ub3dhaXQpCisgICAgICAgICAgICBxdWV1ZV9wdXRfdGFzayA9IHRhc2tzLlRhc2socXVldWVfcHV0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RhcnRlZC53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluaXNoZWQpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHF1ZXVlX3B1dF90YXNrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluaXNoZWQpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19wdXQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShtYXhzaXplPTEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocXVldWVzLkZ1bGwsIHEucHV0X25vd2FpdCwgMikKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHF1ZXVlX3B1dCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9wdXRfY2FuY2VsbGVkX3JhY2Uoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3AsIG1heHNpemU9MSkKKworICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdhJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdjJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gdGFza3MuVGFzayhxLnB1dCgnYicpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0X25vd2FpdCgpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXRfbm93YWl0KCksICdjJykKKworICAgIGRlZiB0ZXN0X3B1dF93aXRoX3dhaXRpbmdfZ2V0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IHRhc2tzLlRhc2socS5nZXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEucHV0KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KSwgJ2EnKQorCisKK2NsYXNzIExpZm9RdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLkxpZm9RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzIsIDMsIDFdLCBpdGVtcykKKworCitjbGFzcyBQcmlvcml0eVF1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUHJpb3JpdHlRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCBpdGVtcykKKworCitjbGFzcyBKb2luYWJsZVF1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfdGFza19kb25lX3VuZGVyZmxvdyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBxLnRhc2tfZG9uZSkKKworICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZShzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgYWNjdW11bGF0b3IgPSAwCisKKyAgICAgICAgIyBUd28gd29ya2VycyBnZXQgaXRlbXMgZnJvbSB0aGUgcXVldWUgYW5kIGNhbGwgdGFza19kb25lIGFmdGVyIGVhY2guCisgICAgICAgICMgSm9pbiB0aGUgcXVldWUgYW5kIGFzc2VydCBhbGwgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KKyAgICAgICAgcnVubmluZyA9IFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB3b3JrZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGFjY3VtdWxhdG9yCisKKyAgICAgICAgICAgIHdoaWxlIHJ1bm5pbmc6CisgICAgICAgICAgICAgICAgaXRlbSA9IHlpZWxkIGZyb20gcS5nZXQoKQorICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGl0ZW0KKyAgICAgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMik6CisgICAgICAgICAgICAgICAgdGFza3MuVGFzayh3b3JrZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ocmFuZ2UoMTAwKSksIGFjY3VtdWxhdG9yKQorCisgICAgICAgICMgY2xvc2UgcnVubmluZyBnZW5lcmF0b3JzCisgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgwKQorCisgICAgZGVmIHRlc3Rfam9pbl9lbXB0eV9xdWV1ZShzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgVGVzdCB0aGF0IGEgcXVldWUgam9pbigpcyBzdWNjZXNzZnVsbHksIGFuZCBiZWZvcmUgYW55dGhpbmcgZWxzZQorICAgICAgICAjIChkb25lIHR3aWNlIGZvciBpbnN1cmFuY2UpLgorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGpvaW4oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGpvaW4oKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuX2Zvcm1hdCgpLCAnbWF4c2l6ZT0wJykKKworICAgICAgICBxLl91bmZpbmlzaGVkX3Rhc2tzID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuX2Zvcm1hdCgpLCAnbWF4c2l6ZT0wIHRhc2tzPTInKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlZjJmZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDE1NTQgQEAKKyIiIlRlc3RzIGZvciBzZWxlY3Rvcl9ldmVudHMucHkiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBnYworaW1wb3J0IHBwcmludAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvLnByb3RvY29scyBpbXBvcnQgRGF0YWdyYW1Qcm90b2NvbCwgUHJvdG9jb2wKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IEJhc2VTZWxlY3RvckV2ZW50TG9vcAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JTc2xUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQKKworCitjbGFzcyBUZXN0QmFzZVNlbGVjdG9yRXZlbnRMb29wKEJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLl9zc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzICs9IDEKKworCitjbGFzcyBCYXNlU2VsZWN0b3JFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IFRlc3RCYXNlU2VsZWN0b3JFdmVudExvb3AodW5pdHRlc3QubW9jay5Nb2NrKCkpCisKKyAgICBkZWYgdGVzdF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIG0gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KG0sIG0pLCBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfbWFrZV9zc2xfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydChtLCBtLCBtLCBtKSwgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLnNzbCcsIE5vbmUpCisgICAgZGVmIHRlc3RfbWFrZV9zc2xfdHJhbnNwb3J0X3dpdGhvdXRfc3NsX2Vycm9yKHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydChtLCBtLCBtLCBtKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNzb2NrID0gc2VsZi5sb29wLl9zc29jaworICAgICAgICBzc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworICAgICAgICBjc29jayA9IHNlbGYubG9vcC5fY3NvY2sKKyAgICAgICAgY3NvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEKKyAgICAgICAgcmVtb3ZlX3JlYWRlciA9IHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IHNlbGVjdG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9jc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zc29jaykKKyAgICAgICAgc2VsZWN0b3IuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc3NvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgY3NvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgcmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoNykKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfbm9fc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNzb2NrID0gc2VsZi5sb29wLl9zc29jaworICAgICAgICBjc29jayA9IHNlbGYubG9vcC5fY3NvY2sKKyAgICAgICAgcmVtb3ZlX3JlYWRlciA9IHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbW92ZV9yZWFkZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl9zb2NrZXRwYWlyKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX3NlbGZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc3NvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3JlYWRfZnJvbV9zZWxmKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX2Zyb21fc2VsZl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc3NvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fY3NvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl93cml0ZV90b19zZWxmKQorCisgICAgZGVmIHRlc3Rfc29ja19yZWN2KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2sucmVjdi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgVHJ1ZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIHNlbGYubG9vcC5fc29ja19yZWN2LCBmLCBUcnVlLCBzb2NrLCAxMDI0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGxfbm9kYXRhKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGZ1dHVyZXMuRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suc2VuZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgVHJ1ZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9pbnRlcnJ1cHRlZChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLmV4Y2VwdGlvbigpLCBlcnIpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfcGFydGlhbChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ3RhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX25vbmUoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGZ1dHVyZXMuRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKGYsIEZhbHNlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jb25uZWN0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNvbm5lY3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIFRydWUsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suZ2V0c29ja29wdC5yZXR1cm5fdmFsdWUgPSBlcnJuby5FQUdBSU4KKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdCwgZiwKKyAgICAgICAgICAgICBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRU5PVENPTk4KKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIFRydWUsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBPU0Vycm9yKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jayksIHNlbGYubG9vcC5fc29ja19hY2NlcHQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgY29ubiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnJldHVybl92YWx1ZSA9IGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkpLCBmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChGYWxzZSwpLCBjb25uLnNldGJsb2NraW5nLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5hY2NlcHQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBUcnVlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LCBmLCBUcnVlLCBzb2NrKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIGVyciA9IHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhlcnIsIGYuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkuc2lkZV9lZmZlY3QgPSBLZXlFcnJvcgorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodykKKworICAgIGRlZiB0ZXN0X2FkZF9yZWFkZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFkZXIuY2FuY2VsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9XUklURSB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXIsIHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nX3dyaXRlcihzZWxmKToKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAoTm9uZSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3JlYWRfd3JpdGUoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcl9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLl9jYW5jZWxsZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aChyZWFkZXIpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2V2ZW50c19yZWFkX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLmNhbmNlbGxlZCA9IFRydWUKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGUoc2VsZik6CisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgod3JpdGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGVfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuY2FuY2VsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisKK2NsYXNzIFNlbGVjdG9yVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKFByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9zb2NrLCBzZWxmLnNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX3NvY2tfZmQsIDcpCisKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbN10pCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3dyaXRlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9idWZmZXIuYXBwZW5kKGInZGF0YScpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9idWZmZXIuYXBwZW5kKGInMScpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDcsIHVuaXR0ZXN0Lm1vY2suc2VudGluZWwpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHVuaXR0ZXN0Lm1vY2suc2VudGluZWwpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBjb2xsZWN0aW9ucy5kZXF1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgICAgICMgc2Vjb25kIGNsb3NlIHNob3VsZCBub3QgcmVtb3ZlIHJlYWRlcgorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcihzZWxmLCBtX2V4Yyk6CisgICAgICAgIGV4YyA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yKGV4YykKKworICAgICAgICBtX2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGV4YykKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgZXhjID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXhjKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChleGMpCisgICAgICAgIHNlbGYuc29jay5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fc29jaykKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisKK2NsYXNzIFNlbGVjdG9yU29ja2V0VHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKFByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrX2ZkID0gc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig3LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmFzc2VydF9jYWxsZWRfd2l0aCh0cikKKworICAgIGRlZiB0ZXN0X2N0b3Jfd2l0aF93YWl0ZXIoc2VsZik6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9wYXVzZV9yZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig3LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDcgaW4gc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig3LCB0ci5fcmVhZF9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZl9rZWVwX29wZW4oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInJworICAgICAgICBzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5yZXR1cm5fdmFsdWUgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuY2xvc2UuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2xvZ2dpbmcuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3RyeWFnYWluKHNlbGYsIG1fZXhjKToKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2Fpbl9pbnRlcnJ1cHRlZChzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2xvZ2dpbmcuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2Nvbm5fcmVzZXQoc2VsZiwgbV9leGMpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZiwgbV9leGMpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9idWZmZXIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoYidkYXRhMScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEyJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YTEnLCBiJ2RhdGEyJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWxfbm9uZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHRyYW5zcG9ydC5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHNlbGYuc29jay5yZXNldF9tb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfc3RyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ3N0cicpCisKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zaW5nKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suc2VuZC5jYWxsX2FyZ3NbMF0sIChkYXRhLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9jbG9zaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9wYXJ0aWFsX25vbmUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YTFkYXRhMiddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X2V4Y2VwdGlvbl9hbmRfY2xvc2Uoc2VsZiwgbV9sb2cpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICByZW1vdmVfd3JpdGVyID0gc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHJlbW92ZV93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29ja19mZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suc2h1dGRvd24uY2FsbF9jb3VudCwgMSkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2h1dGRvd24uY2FsbGVkKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IGxhbWJkYSBfOiA0CisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci5jbG9zZSgpCisKKworQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorY2xhc3MgU2VsZWN0b3JTc2xUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgc2VsZi5zc2xzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHNlbGYuc3NsY29udGV4dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC53cmFwX3NvY2tldC5yZXR1cm5fdmFsdWUgPSBzZWxmLnNzbHNvY2sKKworICAgIGRlZiBfbWFrZV9vbmUoc2VsZiwgY3JlYXRlX3dhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlc2V0X2NvdW50ZXJzKCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0LAorICAgICAgICAgICAgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2UuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9yZWFkZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX3dyaXRlcl9yZXRyeShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50V3JpdGVFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDEsIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX2V4YyhzZWxmKToKKyAgICAgICAgZXhjID0gVmFsdWVFcnJvcigpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBleGMKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fd2FpdGVyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhleGMsIHRyYW5zcG9ydC5fd2FpdGVyLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX2Jhc2VfZXhjKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBleGMgPSBCYXNlRXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB0cmFuc3BvcnQuX3dhaXRlci5leGNlcHRpb24oKSkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDEgaW4gc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ3N0cicpCisKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zaW5nKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9idWZmZXIsIGNvbGxlY3Rpb25zLmRlcXVlKCkpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnJlY3YuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ2RhdGEnLCksIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3dyaXRlX3dhbnRzX3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fd3JpdGVfd2FudHNfcmVhZCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2tfZmQsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl9jb25uX3Jlc2V0KHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZSgpLCB0cmFuc3BvcnQuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2IndGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNzbHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZ19lbXB0eV9idWZmZXIoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9yZXRyeShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSkKKworICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50V3JpdGVFcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9yZWFkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgodHJhbnNwb3J0Ll9zb2NrX2ZkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9leGMoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9yZWFkX3dhbnRzX3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fcmVhZF93YW50c193cml0ZSkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5LmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fc29ja19mZCwgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyLndyaXRlX2VvZikKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzFdKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSBvciBub3Qgc3NsLkhBU19TTkksICdObyBTTkkgc3VwcG9ydCcpCisgICAgZGVmIHRlc3Rfc2VydmVyX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0LAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQud3JhcF9zb2NrZXQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5zb2NrLCBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSwgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisKKworY2xhc3MgU2VsZWN0b3JTc2xXaXRob3V0U3NsVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLnNzbCcsIE5vbmUpCisgICAgZGVmIHRlc3Rfc3NsX3RyYW5zcG9ydF9yZXF1aXJlc19zc2xfbW9kdWxlKHNlbGYpOgorICAgICAgICBNb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNzbFRyYW5zcG9ydChNb2NrKCksIE1vY2soKSwgTW9jaygpLCBNb2NrKCkpCisKKworY2xhc3MgU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChEYXRhZ3JhbVByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc3BlY19zZXQ9c29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2ZnJvbS5yZXR1cm5fdmFsdWUgPSAoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNCkpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0KSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Zmcm9tLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VycihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdmZyb20uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X29zZXJyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG8oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8uY2FsbF9hcmdzWzBdLCAoZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJycsICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpLAorICAgICAgICAgICAgIChiJ2RhdGEyJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b190cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSldLCBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3NlbmR0b19leGNlcHRpb24oc2VsZiwgbV9sb2cpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisKKyAgICAgICAgdHJhbnNwb3J0Ll9hZGRyZXNzID0gKCcxMjMnLCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19lcnJvcl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWRfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCAnc3RyJywgKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fY29ubmVjdGVkX2FkZHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCBiJ3N0cicsICgnMC4wLjAuMCcsIDIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIGFkZHJlc3M9KDEsKSkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJ2RhdGEnLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoZGF0YSwgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChkYXRhLCAoKSkpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEsICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChbKGInZGF0YTEnLCAoKSksIChiJ2RhdGEyJywgKCkpXSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgpKSwgKGInZGF0YTInLCAoKSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9lcnJvcl9yZWNlaXZlZF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yX2Nvbm5lY3RlZChzZWxmLCBtX2V4Yyk6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICBlcnIgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvcihlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5lcnJvcl9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIG1fZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgnRmF0YWwgZXJyb3IgZm9yICVzJywgdHJhbnNwb3J0KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTE2YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpAQCAtMCwwICsxLDQzMCBAQAorIiIiVGVzdHMgZm9yIHN0cmVhbXMucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHN0cmVhbXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIFN0cmVhbVJlYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIERBVEEgPSBiJ2xpbmUxXG5saW5lMlxubGluZTNcbicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMganVzdCBpbiBjYXNlIGlmIHdlIGhhdmUgdHJhbnNwb3J0IGNsb3NlIGNhbGxiYWNrcworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnN0cmVhbXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF9jdG9yX2dsb2JhbF9sb29wKHNlbGYsIG1fZXZlbnRzKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0cmVhbS5fbG9vcCwgbV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc3RyZWFtcy5vcGVuX2Nvbm5lY3Rpb24oKmh0dHBkLmFkZHJlc3MsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICB3cml0ZXIud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgICAgIGYgPSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidIVFRQLzEuMCAyMDAgT0tcclxuJykKKyAgICAgICAgICAgIGYgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuZW5kc3dpdGgoYidcclxuXHJcblRlc3QgbWVzc2FnZScpKQorCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgZiA9IHN0cmVhbXMub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQorICAgICAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aChiJ1xyXG5cclxuVGVzdCBtZXNzYWdlJykpCisKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBzdHJlYW1zLm9wZW5fY29ubmVjdGlvbigqaHR0cGQuYWRkcmVzcywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHdyaXRlci5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KFplcm9EaXZpc2lvbkVycm9yKCkpCisgICAgICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9mZWVkX2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X2ZlZWRfZGF0YV9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5EQVRBKSwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZF96ZXJvKHNlbGYpOgorICAgICAgICAjIFJlYWQgemVybyBieXRlcy4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5EQVRBKSwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZCgzMCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2xpbmVfYnJlYWtzKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMgd2l0aG91dCBsaW5lIGJyZWFrcy4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lMScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lMicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoNSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzLCBzdG9wIGF0IGVvZi4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWQoMTAyNCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfZW9mKHNlbGYpOgorICAgICAgICAjIFJlYWQgYWxsIGJ5dGVzIHVudGlsIGVvZi4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWQoLTEpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazFcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidjaHVuazFcbmNodW5rMicsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZVxuJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWQoMikpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIyBSZWFkIG9uZSBsaW5lLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMSAnKQorICAgICAgICByZWFkX3Rhc2sgPSB0YXNrcy5UYXNrKHN0cmVhbS5yZWFkbGluZSgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazIgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazMgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidcbiBjaHVuazQnKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rMSBjaHVuazIgY2h1bmszIFxuJywgbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYidcbiBjaHVuazQnKS0xLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9saW1pdF93aXRoX2V4aXN0aW5nX2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKDMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbmUxXG5saW5lMlxuJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2xpbmUyXG4nXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InbGknXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGltaXQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKDcsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMScpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazNcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InY2h1bmszXG4nXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGluZV9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEFbOjZdKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs2Ol0pCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpIC0gbGVuKGInbGluZTFcbicpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInc29tZSBkYXRhJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKworICAgICAgICBsaW5lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ3NvbWUgZGF0YScsIGxpbmUpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9lbXB0eV9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfYnl0ZV9jb3VudChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoNykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUyXG5sJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxlbihzZWxmLkRBVEEpIC0gbGVuKGInbGluZTFcbicpIC0gbGVuKGInbGluZTJcbmwnKSwKKyAgICAgICAgICAgIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZVxuJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV96ZXJvX29yX2xlc3Moc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKHplcm8gb3IgbGVzcykuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRleGFjdGx5KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuREFUQSksIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5KHNlbGYpOgorICAgICAgICAjIFJlYWQgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBICsgc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKGVvZikuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3RyZWFtLmV4Y2VwdGlvbigpKQorCisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2FpdGVyKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzZXRfZXJyKCk6CisgICAgICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcmVhZGxpbmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RyZWFtLnJlYWRsaW5lKCkKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soc2V0X2VycigpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW3QxLCB0Ml0sIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MS5yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fY2FuY2VsKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiByZWFkX2FfbGluZSgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzdHJlYW0ucmVhZGxpbmUoKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHJlYWRfYV9saW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGxpbmUgZmFpbHMgaWYgc2V0X2V4Y2VwdGlvbigpIGlzbid0IGNhcmVmdWwuCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignbWVzc2FnZScpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHJlYW0uX3dhaXRlciwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X3NlcnZlcihzZWxmKToKKworICAgICAgICBjbGFzcyBNeVNlcnZlcjoKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3ApOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKworICAgICAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9jbGllbnQoc2VsZiwgY2xpZW50X3JlYWRlciwgY2xpZW50X3dyaXRlcik6CisgICAgICAgICAgICAgICAgZGF0YSA9IHlpZWxkIGZyb20gY2xpZW50X3JlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci53cml0ZShkYXRhKQorCisgICAgICAgICAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLnN0YXJ0X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLCAxMjM0NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudF9jYWxsYmFjayhzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICB0YXNrID0gdGFza3MuVGFzayhjbGllbnRfcmVhZGVyLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICAgICAgZGVmIGRvbmUodGFzayk6CisgICAgICAgICAgICAgICAgICAgIGNsaWVudF93cml0ZXIud3JpdGUodGFzay5yZXN1bHQoKSkKKworICAgICAgICAgICAgICAgIHRhc2suYWRkX2RvbmVfY2FsbGJhY2soZG9uZSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy5zdGFydF9zZXJ2ZXIoc2VsZi5oYW5kbGVfY2xpZW50X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJywgMTIzNDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICAgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLnNlcnZlci53YWl0X2Nsb3NlZCgpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjbGllbnQoKToKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0geWllbGQgZnJvbSBzdHJlYW1zLm9wZW5fY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJywgMTIzNDUsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgIyBzZW5kIGEgbGluZQorICAgICAgICAgICAgd3JpdGVyLndyaXRlKGIiaGVsbG8gd29ybGQhXG4iKQorICAgICAgICAgICAgIyByZWFkIGl0IGJhY2sKKyAgICAgICAgICAgIG1zZ2JhY2sgPSB5aWVsZCBmcm9tIHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIG1zZ2JhY2sKKworICAgICAgICAjIHRlc3QgdGhlIHNlcnZlciB2YXJpYW50IHdpdGggYSBjb3JvdXRpbmUgYXMgY2xpZW50IGhhbmRsZXIKKyAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoc2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIuc3RhcnQoKQorICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soY2xpZW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGIiaGVsbG8gd29ybGQhXG4iKQorCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNhbGxiYWNrIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLnN0YXJ0X2NhbGxiYWNrKCkKKyAgICAgICAgbXNnID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGNsaWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBiImhlbGxvIHdvcmxkIVxuIikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjBkMDgxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkKQEAgLTAsMCArMSwxNTE4IEBACisiIiJUZXN0cyBmb3IgdGFza3MucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBNb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIER1bW15OgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0R1bW15KCknCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgVGFza1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2xhc3Moc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHJldHVybiAnb2snCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICB0ID0gdGFza3MuVGFzayhub3RtdWNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBsb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IHRhc2tzLmFzeW5jKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICB0ID0gdGFza3MuYXN5bmMobm90bXVjaCgpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgbG9vcCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9hc3luY19mdXR1cmUoc2VsZik6CisgICAgICAgIGZfb3JpZyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX29yaWcuc2V0X3Jlc3VsdCgna28nKQorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhmX29yaWcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksICdrbycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmID0gdGFza3MuYXN5bmMoZl9vcmlnLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKGZfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgZGVmIHRlc3RfYXN5bmNfdGFzayhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdF9vcmlnID0gdGFza3MuVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gdGFza3MuYXN5bmModF9vcmlnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgICAgICBsb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdCA9IHRhc2tzLmFzeW5jKHRfb3JpZywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgIHQgPSB0YXNrcy5hc3luYyh0X29yaWcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgIGRlZiB0ZXN0X2FzeW5jX25laXRoZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRhc2tzLmFzeW5jKCdvaycpCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHIoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiAnYWJjJworCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQuYWRkX2RvbmVfY2FsbGJhY2soRHVtbXkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVGFzayg8bm90bXVjaD4pPFBFTkRJTkcsIFtEdW1teSgpXT4nKQorICAgICAgICB0LmNhbmNlbCgpICAjIERvZXMgbm90IHRha2UgaW1tZWRpYXRlIGVmZmVjdCEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVGFzayg8bm90bXVjaD4pPENBTkNFTExJTkcsIFtEdW1teSgpXT4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUYXNrKDxub3RtdWNoPik8Q0FOQ0VMTEVEPicpCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAiVGFzayg8bm90bXVjaD4pPHJlc3VsdD0nYWJjJz4iKQorCisgICAgZGVmIHRlc3RfdGFza19yZXByX2N1c3RvbShzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFQoZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVFtdJworCisgICAgICAgIGNsYXNzIE15VGFzayh0YXNrcy5UYXNrLCBUKToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX3JlcHJfXygpCisKKyAgICAgICAgZ2VuID0gY29ybygpCisgICAgICAgIHQgPSBNeVRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVFtdKDxjb3JvPiknKQorICAgICAgICBnZW4uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdGFza19iYXNpY3Moc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBhID0geWllbGQgZnJvbSBpbm5lcjEoKQorICAgICAgICAgICAgYiA9IHlpZWxkIGZyb20gaW5uZXIyKCkKKyAgICAgICAgICAgIHJldHVybiBhK2IKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcjEoKToKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyMigpOgorICAgICAgICAgICAgcmV0dXJuIDEwMDAKKworICAgICAgICB0ID0gb3V0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksIDEwNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1sb29wKQorICAgICAgICBsb29wLmNhbGxfc29vbih0LmNhbmNlbCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF95aWVsZChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgc3RhcnQgY29ybworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2lubmVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIHN0YXJ0IHRhc2sKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfYm90aF90YXNrX2FuZF9pbm5lcl9mdXR1cmUoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgdC5jYW5jZWwoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfdGFza19jYXRjaGluZyhzZWxmKToKKyAgICAgICAgZnV0MSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Rhc2tfaWdub3Jpbmcoc2VsZik6CisgICAgICAgIGZ1dDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQzID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIGZ1dDMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQzKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0My5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQzLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfY3VycmVudF90YXNrKHNlbGYpOgorICAgICAgICBsb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX211c3RfY2FuY2VsKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgICAgICMgVGhlIHNsZWVwIHNob3VsZCBiZSBjYW5jZWxsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwMCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0Ll9tdXN0X2NhbmNlbCkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3N0b3Bfd2hpbGVfcnVuX2luX2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4zLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICB4ID0gMAorICAgICAgICB3YWl0ZXJzID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICBub25sb2NhbCB4CisgICAgICAgICAgICB3aGlsZSB4IDwgMTA6CisgICAgICAgICAgICAgICAgd2FpdGVycy5hcHBlbmQodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyc1stMV0KKyAgICAgICAgICAgICAgICB4ICs9IDEKKyAgICAgICAgICAgICAgICBpZiB4ID09IDI6CisgICAgICAgICAgICAgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMywgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBjbG9zZSBnZW5lcmF0b3JzCisgICAgICAgIGZvciB3IGluIHdhaXRlcnM6CisgICAgICAgICAgICB3LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuNCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIGZ1dCA9IHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuVGltZW91dEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXRfZm9yKGZ1dCwgMC4xLCBsb29wPWxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgd2FpdCBmb3IgcmVzdWx0CisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgdGFza3Mud2FpdF9mb3IoZnV0LCAwLjMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnZG9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3dpdGhfZ2xvYmFsX2xvb3Aoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXRfZm9yKGZ1dCwgMC4wMSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2IsIGFdLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYSwgYl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIERvaW5nIGl0IGFnYWluIHNob3VsZCB0YWtlIG5vIHRpbWUgYW5kIGV4ZXJjaXNlIGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMTUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4wMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2IsIGFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2EsIGJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgdGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICB0YXNrcy53YWl0KHNldCgpLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgdGFza3Mud2FpdChbdGFza3Muc2xlZXAoMTAuMCwgbG9vcD1zZWxmLmxvb3ApXSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49LTEsIGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfY29tcGxldGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICB0YXNrID0gdGFza3MuVGFzaygKKyAgICAgICAgICAgIHRhc2tzLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj10YXNrcy5GSVJTVF9DT01QTEVURUQsCisgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCksCisgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfcmVhbGx5X2RvbmUoc2VsZik6CisgICAgICAgICMgdGhlcmUgaXMgcG9zc2liaWxpdHkgdGhhdCBzb21lIHRhc2tzIGluIHRoZSBwZW5kaW5nIGxpc3QKKyAgICAgICAgIyBiZWNhbWUgZG9uZSBidXQgdGhlaXIgY2FsbGJhY2tzIGhhdmVuJ3QgYWxsIGJlZW4gY2FsbGVkIHlldAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8yKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBhID0gdGFza3MuVGFzayhjb3JvMSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soY29ybzIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKAorICAgICAgICAgICAgdGFza3Mud2FpdChbYiwgYV0sIHJldHVybl93aGVuPXRhc2tzLkZJUlNUX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YSwgYn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9leGNlcHRpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICAjIGZpcnN0X2V4Y2VwdGlvbiwgdGFzayBhbHJlYWR5IGhhcyBleGNlcHRpb24KKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMTAuMCwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGV4YygpOgorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ2VycicpCisKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2soCisgICAgICAgICAgICB0YXNrcy53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49dGFza3MuRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApLAorICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YX0sIHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMCwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfZXhjZXB0aW9uX2luX3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgIyBmaXJzdF9leGNlcHRpb24sIGV4Y2VwdGlvbiBkdXJpbmcgd2FpdGluZworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZXhjKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdlcnInKQorCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKGV4YygpLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSB0YXNrcy53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49dGFza3MuRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX2V4Y2VwdGlvbihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMTUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ3JlYWxseScpCisKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soc2xlZXBlcigpLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSB0YXNrcy53YWl0KFtiLCBhXSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZG9uZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgZXJyb3JzID0gc2V0KGYgZm9yIGYgaW4gZG9uZSBpZiBmLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjExCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbYiwgYV0sIHRpbWVvdXQ9MC4xMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2FdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjExLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9jb25jdXJyZW50X2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHRhc2tzLndhaXQoW2IsIGFdLCB0aW1lb3V0PTAuMSwgbG9vcD1sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldChbYl0pKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKyAgICAgICAgY29tcGxldGVkID0gc2V0KCkKKyAgICAgICAgdGltZV9zaGlmdGVkID0gRmFsc2UKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCB4KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRpbWVfc2hpZnRlZAorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcChkdCwgbG9vcD1sb29wKQorICAgICAgICAgICAgY29tcGxldGVkLmFkZCh4KQorICAgICAgICAgICAgaWYgbm90IHRpbWVfc2hpZnRlZCBhbmQgJ2EnIGluIGNvbXBsZXRlZCBhbmQgJ2InIGluIGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICB0aW1lX3NoaWZ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4xNCkKKyAgICAgICAgICAgIHJldHVybiB4CisKKyAgICAgICAgYSA9IHNsZWVwZXIoMC4wMSwgJ2EnKQorICAgICAgICBiID0gc2xlZXBlcigwLjAxLCAnYicpCisgICAgICAgIGMgPSBzbGVlcGVyKDAuMTUsICdjJykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiB0YXNrcy5hc19jb21wbGV0ZWQoW2IsIGMsIGFdLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKHlpZWxkIGZyb20gZikpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiByZXNbOjJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2InIGluIHJlc1s6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzJdLCAnYycpCisKKyAgICAgICAgIyBEb2luZyBpdCBhZ2FpbiBzaG91bGQgdGFrZSBubyB0aW1lIGFuZCBleGVyY2lzZSBhIGRpZmZlcmVudCBwYXRoLgorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAyCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3Muc2xlZXAoMC4xLCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLnNsZWVwKDAuMTUsICdiJywgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIHRhc2tzLmFzX2NvbXBsZXRlZChbYSwgYl0sIHRpbWVvdXQ9MC4xMiwgbG9vcD1sb29wKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMSwgdikpCisgICAgICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuVGltZW91dEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMiwgZXhjKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCAoMSwgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMV1bMF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbMV1bMV0sIGZ1dHVyZXMuVGltZW91dEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfcmV2ZXJzZV93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5zbGVlcCgwLjA1LCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLnNsZWVwKDAuMTAsICdiJywgbG9vcD1sb29wKQorICAgICAgICBmcyA9IHthLCBifQorICAgICAgICBmdXRzID0gbGlzdCh0YXNrcy5hc19jb21wbGV0ZWQoZnMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dHMpLCAyKQorCisgICAgICAgIHggPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXRzWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4wNSkKKyAgICAgICAgeSA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTAsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX2NvbmN1cnJlbnQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLnNsZWVwKDAuMDUsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3Muc2xlZXAoMC4wNSwgJ2InLCBsb29wPWxvb3ApCisgICAgICAgIGZzID0ge2EsIGJ9CisgICAgICAgIGZ1dHMgPSBsaXN0KHRhc2tzLmFzX2NvbXBsZXRlZChmcywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0cyksIDIpCisgICAgICAgIHdhaXRlciA9IHRhc2tzLndhaXQoZnV0cywgbG9vcD1sb29wKQorICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmLnJlc3VsdCgpIGZvciBmIGluIGRvbmUpLCB7J2EnLCAnYid9KQorCisgICAgZGVmIHRlc3Rfc2xlZXAoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wNQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCBhcmcpOgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcChkdC8yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKGR0LzIsIGFyZywgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHNsZWVwZXIoMC4xLCAneWVhaCcpLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAneWVhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3NsZWVwX2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDEwLjAsICd5ZWFoJywgbG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgb3JpZ19jYWxsX2xhdGVyID0gbG9vcC5jYWxsX2xhdGVyCisKKyAgICAgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICAgICBub25sb2NhbCBoYW5kbGUKKyAgICAgICAgICAgIGhhbmRsZSA9IG9yaWdfY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgICAgIGxvb3AuY2FsbF9sYXRlciA9IGNhbGxfbGF0ZXIKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFuZGxlLl9jYW5jZWxsZWQpCisKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYW5kbGUuX2NhbmNlbGxlZCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2FuY2VsX3NsZWVwaW5nX3Rhc2soc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDUwMDAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHNsZWVwZnV0ID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwKGR0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHNsZWVwZnV0CisgICAgICAgICAgICBzbGVlcGZ1dCA9IHRhc2tzLnNsZWVwKGR0LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZnV0CisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZG9pdCgpOgorICAgICAgICAgICAgc2xlZXBlciA9IHRhc2tzLlRhc2soc2xlZXAoNTAwMCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjEsIHNsZWVwZXIuY2FuY2VsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcgorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjYW5jZWxsZWQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2xlcHQgaW4nCisKKyAgICAgICAgZG9lciA9IGRvaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGRvZXIpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfdGFza19jYW5jZWxfd2FpdGVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICB0YXNrID0gdGFza3MuVGFzayhjb3JvKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0YXNrLl9mdXRfd2FpdGVyLCBmdXQpCisKKyAgICAgICAgdGFzay5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0YXNrLl9mdXRfd2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9pbl9jb21wbGV0ZWRfdGFzayhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBnZW4gPSBub3RtdWNoKCkKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzay5zZXRfcmVzdWx0KCdvaycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRhc2suX3N0ZXApCisgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgeWllbGQgTm9uZQorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgbm90bXVjaCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9yZXN1bHRfZnV0dXJlKHNlbGYpOgorICAgICAgICAjIElmIGNvcm91dGluZSByZXR1cm5zIGZ1dHVyZSwgdGFzayB3YWl0cyBvbiB0aGlzIGZ1dHVyZS4KKworICAgICAgICBjbGFzcyBGdXQoZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHNlbGYuY2JfYWRkZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dkcykKKworICAgICAgICAgICAgZGVmIGFkZF9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgICAgICAgICBzZWxmLmNiX2FkZGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuYWRkX2RvbmVfY2FsbGJhY2soZm4pCisKKyAgICAgICAgZnV0ID0gRnV0KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBub25sb2NhbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sod2FpdF9mb3JfZnV0dXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYl9hZGRlZCkKKworICAgICAgICByZXMgPSBvYmplY3QoKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChyZXMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlcywgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3dpdGhfYmFzZWV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXV0Y2goKToKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oKQorCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKG5vdG11dGNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0YXNrLl9zdGVwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRhc2suZXhjZXB0aW9uKCksIEJhc2VFeGNlcHRpb24pCisKKyAgICBkZWYgdGVzdF9iYXNlZXhjZXB0aW9uX2R1cmluZ19jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwLCBsb29wPWxvb3ApCisKKyAgICAgICAgYmFzZV9leGMgPSBCYXNlRXhjZXB0aW9uKCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdXRjaCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcigpCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBiYXNlX2V4YworCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKG5vdG11dGNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHRhc2suY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmRvbmUoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5LCBsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suZXhjZXB0aW9uKCksIGJhc2VfZXhjKQorCisgICAgZGVmIHRlc3RfaXNjb3JvdXRpbmVmdW5jdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuKSkKKworICAgICAgICBkZWYgZm4xKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2tzLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4xKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmbjIoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuMikpCisKKyAgICBkZWYgdGVzdF95aWVsZF92c195aWVsZF9mcm9tKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZ1dAorCisgICAgICAgIHRhc2sgPSB3YWl0X2Zvcl9mdXR1cmUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfeWllbGRfdnNfeWllbGRfZnJvbV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBnZW4gPSBjb3JvKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBnZW4KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZ2VuLmNsb3NlKCkKKworICAgICAgICB0YXNrID0gd2FpdF9mb3JfZnV0dXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY29yb3V0aW5lX25vbl9nZW5fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiAndGVzdCcKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodGFza3MuaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKSkKKworICAgICAgICBjb3JvID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5pc2Nvcm91dGluZShjb3JvKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9jb3JvdXRpbmVfbm9uX2dlbl9mdW5jdGlvbl9yZXR1cm5fZnV0dXJlKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmdW5jKCk6CisgICAgICAgICAgICByZXR1cm4gZnV0CisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoJ3Rlc3QnKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhmdW5jKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soY29ybygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDIucmVzdWx0KCkpCisKKyAgICAjIFNvbWUgdGhvcm91Z2ggdGVzdHMgZm9yIGNhbmNlbGxhdGlvbiBwcm9wYWdhdGlvbiB0aHJvdWdoCisgICAgIyBjb3JvdXRpbmVzLCB0YXNrcyBhbmQgd2FpdCgpLgorCisgICAgZGVmIHRlc3RfeWllbGRfZnV0dXJlX3Bhc3Nlc19jYW5jZWwoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgaW5uZXIoKSBjYW5jZWxzIHdhaXRlci4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdnb3QgcGFzdCBzbGVlcCgpIGluIGlubmVyKCknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gaW5uZXIoKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMTAwICAjIEV4cGVjdCB0aGlzIHBhdGguCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb29mICs9IDEwCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3dhaXRfZG9lc19ub3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgbWFrZXMgd2FpdCgpIHJldHVybiBlYXJseSwgbGVhdmVzIGlubmVyKCkKKyAgICAgICAgIyBydW5uaW5nLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgZCwgcCA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbaW5uZXIoKV0sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Jlc3VsdChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSB0YXNrcy5zaGllbGQoaW5uZXIpCisgICAgICAgIGlubmVyLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGlubmVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gdGFza3Muc2hpZWxkKGlubmVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCdleHBlY3RlZCcpCisgICAgICAgIGlubmVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvdXRlci5leGNlcHRpb24oKSwgZXhjKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSB0YXNrcy5zaGllbGQoaW5uZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBpbm5lci5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGVyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Nob3J0Y3V0KHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Muc2hpZWxkKGZ1dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9lZmZlY3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGRvZXMgbm90IGFmZmVjdCBpbm5lcigpLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zaGllbGQoaW5uZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBwcm9vZiArPSAxMDAKKworICAgICAgICBmID0gdGFza3MuYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2dhdGhlcihzZWxmKToKKyAgICAgICAgY2hpbGQxID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNoaWxkMiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwYXJlbnQgPSB0YXNrcy5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IHRhc2tzLnNoaWVsZChwYXJlbnQsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRlci5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LnJlc3VsdCgpLCBbMSwgMl0pCisKKyAgICBkZWYgdGVzdF9nYXRoZXJfc2hpZWxkKHNlbGYpOgorICAgICAgICBjaGlsZDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY2hpbGQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlubmVyMSA9IHRhc2tzLnNoaWVsZChjaGlsZDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBpbm5lcjIgPSB0YXNrcy5zaGllbGQoY2hpbGQyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gdGFza3MuZ2F0aGVyKGlubmVyMSwgaW5uZXIyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHBhcmVudC5jYW5jZWwoKQorICAgICAgICAjIFRoaXMgc2hvdWxkIGNhbmNlbCBpbm5lcjEgYW5kIGlubmVyMiBidXQgYm90IGNoaWxkMSBhbmQgY2hpbGQyLgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhcmVudC5leGNlcHRpb24oKSwgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMi5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKworY2xhc3MgR2F0aGVyVGVzdHNCYXNlOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYub3RoZXJfbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5vdGhlcl9sb29wLmNsb3NlKCkKKworICAgIGRlZiBfcnVuX2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgIHdoaWxlIGxvb3AuX3JlYWR5OgorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgZGVmIF9jaGVja19zdWNjZXNzKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgYSwgYiwgYyA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMpLCAqKmt3YXJncykKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYS5zZXRfcmVzdWx0KDIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IuY2FsbGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgWzIsIDEsIDNdKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcygpCisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MocmV0dXJuX2V4Y2VwdGlvbnM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MocmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X29uZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg1KV0KKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjLCBkLCBlKSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5leGNlcHRpb24oKSwgZXhjKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDQpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGV4YzIgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYy5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgYS5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfZXhjZXB0aW9uKGV4YzIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMywgMSwgZXhjLCBleGMyXSkKKworCitjbGFzcyBGdXR1cmVHYXRoZXJUZXN0cyhHYXRoZXJUZXN0c0Jhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB3cmFwX2Z1dHVyZXMoc2VsZiwgKmZ1dHVyZXMpOgorICAgICAgICByZXR1cm4gZnV0dXJlcworCisgICAgZGVmIF9jaGVja19lbXB0eV9zZXF1ZW5jZShzZWxmLCBzZXFfb3JfaXRlcik6CisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZXZlbnRzLnNldF9ldmVudF9sb29wLCBOb25lKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlcV9vcl9pdGVyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgW10pCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcigqc2VxX29yX2l0ZXIsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfZW1wdHlfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKFtdKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZSgoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2Uoc2V0KCkpCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKGl0ZXIoIiIpKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaGV0ZXJvZ2Vub3VzX2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGZ1dDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGZ1dDIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRhc2tzLmdhdGhlcihmdXQxLCBmdXQyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdGFza3MuZ2F0aGVyKGZ1dDEsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaG9tb2dlbm91c19mdXR1cmVzKHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcigqY2hpbGRyZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKmNoaWxkcmVuLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9vbmVfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlID0gW2Z1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcihhLCBiLCBjLCBkLCBlKQorICAgICAgICBjYiA9IE1vY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LmV4Y2VwdGlvbigpLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uX29uZV9jYW5jZWxsYXRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUsIGYgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDYpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoYSwgYiwgYywgZCwgZSwgZiwgcmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgemRlID0gWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBiLnNldF9leGNlcHRpb24oemRlKQorICAgICAgICBjLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfcmVzdWx0KDMpCisgICAgICAgIGUuY2FuY2VsKCkKKyAgICAgICAgcnRlID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKHJ0ZSkKKyAgICAgICAgcmVzID0gc2VsZi5vbmVfbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzJdLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzRdLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICByZXNbMl0gPSByZXNbNF0gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMSwgemRlLCBOb25lLCAzLCBOb25lLCBydGVdKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisKKworY2xhc3MgQ29yb3V0aW5lR2F0aGVyVGVzdHMoR2F0aGVyVGVzdHNCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5vbmVfbG9vcCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHdyYXBfZnV0dXJlcyhzZWxmLCAqZnV0dXJlcyk6CisgICAgICAgIGNvcm9zID0gW10KKyAgICAgICAgZm9yIGZ1dCBpbiBmdXR1cmVzOgorICAgICAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGNvcm8oZnV0PWZ1dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKKyAgICAgICAgICAgIGNvcm9zLmFwcGVuZChjb3JvKCkpCisgICAgICAgIHJldHVybiBjb3JvcworCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfbG9vcF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHJldHVybiAnYWJjJworICAgICAgICBnZW4xID0gY29ybygpCisgICAgICAgIGdlbjIgPSBjb3JvKCkKKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKGdlbjEsIGdlbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBnZW4xLmNsb3NlKCkKKyAgICAgICAgZ2VuMi5jbG9zZSgpCisgICAgICAgIGdlbjMgPSBjb3JvKCkKKyAgICAgICAgZ2VuNCA9IGNvcm8oKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoZ2VuMywgZ2VuNCwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIGdlbjMuY2xvc2UoKQorICAgICAgICBnZW40LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NhbmNlbGxhdGlvbl9icm9hZGNhc3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgYWxsIGNoaWxkcmVuLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgICAgIHByb29mICs9IDEKKworICAgICAgICBjaGlsZDEgPSB0YXNrcy5hc3luYyhpbm5lcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGNoaWxkMiA9IHRhc2tzLmFzeW5jKGlubmVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgZ2F0aGVyZXIgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mLCBnYXRoZXJlcgorICAgICAgICAgICAgZ2F0aGVyZXIgPSB0YXNrcy5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2F0aGVyZXIKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdhdGhlcmVyLmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdGVyLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDApCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fbWFya2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgZmlyc3QgbGluZSBtYXJrZWQgIk1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4iCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoZik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBiZSBpZ25vcmVkJykKKworICAgICAgICBhID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBiID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLmdhdGhlcihpbm5lcihhKSwgaW5uZXIoYiksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBmID0gdGFza3MuYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBSdW50aW1lRXJyb3IpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3RyYW5zcG9ydHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5CkBAIC0wLDAgKzEsNTkgQEAKKyIiIlRlc3RzIGZvciB0cmFuc3BvcnRzLnB5LiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdHJhbnNwb3J0cworCisKK2NsYXNzIFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2N0b3JfZXh0cmFfaXNfbm9uZShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0cy5UcmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fZXh0cmEsIHt9KQorCisgICAgZGVmIHRlc3RfZ2V0X2V4dHJhX2luZm8oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KHsnZXh0cmEnOiAnaW5mbyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpbmZvJywgdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdleHRyYScpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3Vua25vd24nKSkKKworICAgICAgICBkZWZhdWx0ID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkZWZhdWx0LCB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3Vua25vd24nLCBkZWZhdWx0KSkKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGVsaW5lcyhbJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgdHJhbnNwb3J0LndyaXRlLmNhbGxfY291bnQpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LndyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNhbl93cml0ZV9lb2YpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3RfZGdyYW1fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnRzLkRhdGFncmFtVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCAnZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5hYm9ydCkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdHJhbnNwb3J0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0cy5TdWJwcm9jZXNzVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0LCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZF9zaWduYWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC50ZXJtaW5hdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5raWxsKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Y2Y0MDcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weQpAQCAtMCwwICsxLDE0ODggQEAKKyIiIlRlc3RzIGZvciB1bml4X2V2ZW50cy5weS4iIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZ2MKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdVTklYIG9ubHknKQorCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdW5peF9ldmVudHMKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzaWduYWwsICdTaWduYWxzIGFyZSBub3Qgc3VwcG9ydGVkJykKK2NsYXNzIFNlbGVjdG9yRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2hlY2tfc2lnbmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLl9jaGVja19zaWduYWwsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuX2NoZWNrX3NpZ25hbCwgc2lnbmFsLk5TSUcgKyAxKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NpZ25hbF9ub19oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2hhbmRsZV9zaWduYWwoc2lnbmFsLk5TSUcgKyAxLCAoKSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9zaWduYWxfY2FuY2VsbGVkX2hhbmRsZXIoc2VsZik6CisgICAgICAgIGggPSBldmVudHMuSGFuZGxlKHVuaXR0ZXN0Lm1vY2suTW9jaygpLCAoKSkKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVyc1tzaWduYWwuTlNJRyArIDFdID0gaAorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9oYW5kbGVfc2lnbmFsKHNpZ25hbC5OU0lHICsgMSwgKCkpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHNpZ25hbC5OU0lHICsgMSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX3NldHVwX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQuc2lkZV9lZmZlY3QgPSBWYWx1ZUVycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGNiKQorICAgICAgICBoID0gc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMuZ2V0KHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLCBldmVudHMuSGFuZGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguX2NhbGxiYWNrLCBjYikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX2luc3RhbGxfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBkZWYgc2V0X3dha2V1cF9mZChmZCk6CisgICAgICAgICAgICBpZiBmZCA9PSAtMToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZCA9IHNldF93YWtldXBfZmQKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVGQVVMVAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEVyciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX2luc3RhbGxfZXJyb3IyKHNlbGYsIG1fbG9nZ2luZywgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVyc1tzaWduYWwuU0lHSFVQXSA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2dnaW5nLmluZm8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbF9jb3VudCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcjMoc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2dnaW5nLmluZm8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbF9jb3VudCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2lnbmFsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChzaWduYWwuU0lHSFVQLCBtX3NpZ25hbC5TSUdfREZMKSwgbV9zaWduYWwuc2lnbmFsLmNhbGxfYXJnc1swXSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyXzIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgbV9zaWduYWwuU0lHSU5UID0gc2lnbmFsLlNJR0lOVAorCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorICAgICAgICBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVyc1tzaWduYWwuU0lHSFVQXSA9IG9iamVjdCgpCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQucmVzZXRfbW9jaygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5UKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc2lnbmFsLnNpZ25hbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoc2lnbmFsLlNJR0lOVCwgbV9zaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlciksCisgICAgICAgICAgICBtX3NpZ25hbC5zaWduYWwuY2FsbF9hcmdzWzBdKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl9jbGVhbnVwX2Vycm9yKHNlbGYsIG1fbG9nZ2luZywgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZ2dpbmcuaW5mbykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5TSUdIVVApCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl9lcnJvcjIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5TSUdIVVApCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0NITEQsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVycyksIDIpCisKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5yZXNldF9tb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzKSwgMCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgtMSkKKworCitjbGFzcyBVbml4UmVhZFBpcGVUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2wocHJvdG9jb2xzLlByb3RvY29sKQorICAgICAgICBzZWxmLnBpcGUgPSB1bml0dGVzdC5tb2NrLk1vY2soc3BlY19zZXQ9aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLnBpcGUuZmlsZW5vLnJldHVybl92YWx1ZSA9IDUKKworICAgICAgICBmY250bF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnZmNudGwuZmNudGwnKQorICAgICAgICBmY250bF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZjbnRsX3BhdGNoZXIuc3RvcCkKKworICAgICAgICBmc3RhdF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuZnN0YXQnKQorICAgICAgICBtX2ZzdGF0ID0gZnN0YXRfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc3Quc3RfbW9kZSA9IHN0YXQuU19JRklGTworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIG1fcmVhZC5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfZW9mKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBtX3JlYWQucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfYmxvY2tlZChzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgbV9yZWFkLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9lcnJvcihzZWxmLCBtX3JlYWQsIG1fbG9nZXhjKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3BhdXNlX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDUsIG0pCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3Jlc3VtZV9yZWFkaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2VfYWxyZWFkeV9jbG9zaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2Nsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gb2JqZWN0KCkKKyAgICAgICAgdHIuX2Nsb3NlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworCitjbGFzcyBVbml4V3JpdGVQaXBlVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKHByb3RvY29scy5CYXNlUHJvdG9jb2wpCisgICAgICAgIHNlbGYucGlwZSA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzcGVjX3NldD1pby5SYXdJT0Jhc2UpCisgICAgICAgIHNlbGYucGlwZS5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNQorCisgICAgICAgIGZjbnRsX3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdmY250bC5mY250bCcpCisgICAgICAgIGZjbnRsX3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZmNudGxfcGF0Y2hlci5zdG9wKQorCisgICAgICAgIGZzdGF0X3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5mc3RhdCcpCisgICAgICAgIG1fZnN0YXQgPSBmc3RhdF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzdC5zdF9tb2RlID0gc3RhdC5TX0lGU09DSworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX21hZGUuYXNzZXJ0X2NhbGxlZF93aXRoKHRyKQorCisgICAgZGVmIHRlc3RfY3Rvcl93aXRoX3dhaXRlcihzZWxmKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnV0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fd3JpdGUuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYid0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9idWZmZXIoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidwcmV2aW91cyddCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidwcmV2aW91cycsIGInZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2VycihzZWxmLCBtX3dyaXRlLCBtX2xvZyk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IGVycgorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0ci5fY29ubl9sb3N0KQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgdHIuX2Nvbm5fbG9zdCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgIyBUaGlzIGlzIGEgYml0IG92ZXJzcGVjaWZpZWQuIDotKAorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICdwaXBlIGNsb3NlZCBieSBwZWVyIG9yIG9zLndyaXRlKHBpcGUsIGRhdGEpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2Uoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKSAgIyBwaXBlIHdhcyBjbG9zZWQgYnkgcGVlcgorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnBpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfcGFydGlhbChzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gMworICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InYSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfYWdhaW4oc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2VtcHR5KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmV4Y2VwdGlvbicpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfZXJyKHNlbGYsIG1fd3JpdGUsIG1fbG9nZXhjKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRyLl9jb25uX2xvc3QpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfY2xvc2luZyhzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICB0ci5hYm9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLnByb3RvY29sKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5sb29wKSkpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLndyaXRlX2VvZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdHIud3JpdGVfZW9mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9jbG9zaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGVfZW9mID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci53cml0ZV9lb2YuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfcGVuZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKworY2xhc3MgQWJzdHJhY3RDaGlsZFdhdGNoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3YXRjaGVyID0gdW5peF9ldmVudHMuQWJzdHJhY3RDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLmF0dGFjaF9sb29wLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2VudGVyX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2V4aXRfXywgZiwgZiwgZikKKworCitjbGFzcyBCYXNlQ2hpbGRXYXRjaGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2F0Y2hlciA9IHVuaXhfZXZlbnRzLkJhc2VDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuX2RvX3dhaXRwaWQsIGYpCisKKworV2FpdFBpZE1vY2tzID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiV2FpdFBpZE1vY2tzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3YWl0cGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSUZFWElURUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJRlNJR05BTEVEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRVhJVFNUQVRVUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1RFUk1TSUciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKworCitjbGFzcyBDaGlsZFdhdGNoZXJUZXN0c01peGluOgorCisgICAgaWdub3JlX3dhcm5pbmdzID0gdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QodW5peF9ldmVudHMubG9nZ2VyLCAid2FybmluZyIpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLnpvbWJpZXMgPSB7fQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLCAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgc2VsZi5tX2FkZF9zaWduYWxfaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlciA9IHNlbGYuY3JlYXRlX3dhdGNoZXIoKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB3YWl0cGlkKHNlbGYsIHBpZCwgZmxhZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgdW5peF9ldmVudHMuU2FmZUNoaWxkV2F0Y2hlcikgb3IgcGlkICE9IC0xOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHBpZCwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcGlkIDwgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi56b21iaWVzLnBvcGl0ZW0oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlkLCBzZWxmLnpvbWJpZXMucG9wKHBpZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgICByZXR1cm4gMCwgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ2hpbGRQcm9jZXNzRXJyb3IoKQorCisgICAgZGVmIGFkZF96b21iaWUoc2VsZiwgcGlkLCByZXR1cm5jb2RlKToKKyAgICAgICAgc2VsZi56b21iaWVzW3BpZF0gPSByZXR1cm5jb2RlICsgMzI3NjgKKworICAgIGRlZiBXSUZFWElURUQoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgcmV0dXJuIHN0YXR1cyA+PSAzMjc2OAorCisgICAgZGVmIFdJRlNJR05BTEVEKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHJldHVybiAzMjcwMCA8IHN0YXR1cyA8IDMyNzY4CisKKyAgICBkZWYgV0VYSVRTVEFUVVMoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXMgLSAzMjc2OAorCisgICAgZGVmIFdURVJNU0lHKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLldJRlNJR05BTEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiAzMjc2OCAtIHN0YXR1cworCisgICAgZGVmIHRlc3RfY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHNlbGYubV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKworICAgIGRlZiB3YWl0cGlkX21vY2tzKGZ1bmMpOgorICAgICAgICBkZWYgd3JhcHBlZF9mdW5jKHNlbGYpOgorICAgICAgICAgICAgZGVmIHBhdGNoKHRhcmdldCwgd3JhcHBlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1vY2sucGF0Y2godGFyZ2V0LCB3cmFwcz13cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYWxsYWJsZT11bml0dGVzdC5tb2NrLk1vY2spCisKKyAgICAgICAgICAgIHdpdGggcGF0Y2goJ29zLldURVJNU0lHJywgc2VsZi5XVEVSTVNJRykgYXMgbV9XVEVSTVNJRywgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3MuV0VYSVRTVEFUVVMnLCBzZWxmLldFWElUU1RBVFVTKSBhcyBtX1dFWElUU1RBVFVTLCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy5XSUZTSUdOQUxFRCcsIHNlbGYuV0lGU0lHTkFMRUQpIGFzIG1fV0lGU0lHTkFMRUQsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLldJRkVYSVRFRCcsIHNlbGYuV0lGRVhJVEVEKSBhcyBtX1dJRkVYSVRFRCwgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3Mud2FpdHBpZCcsIHNlbGYud2FpdHBpZCkgYXMgbV93YWl0cGlkOgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgV2FpdFBpZE1vY2tzKG1fd2FpdHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dJRkVYSVRFRCwgbV9XSUZTSUdOQUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dFWElUU1RBVFVTLCBtX1dURVJNU0lHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgIHJldHVybiB3cmFwcGVkX2Z1bmMKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZChzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MiwgY2FsbGJhY2ssIDksIDEwLCAxNCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCBpcyBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgKHJldHVybmNvZGUgMTIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MiwgMTIpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDIsIDEyLCA5LCAxMCwgMTQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDIsIDEzKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MywgY2FsbGJhY2sxLCA3LCA4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDIKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDQsIGNhbGxiYWNrMiwgMTQ3LCAxOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZGVuIGFyZSBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcyAoc2lnbmFsIDMpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MywgLTMpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MywgLTMsIDcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGNoaWxkIDIgc3RpbGwgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCAyIHRlcm1pbmF0ZXMgKGNvZGUgMTA4KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDEwOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQ0LCAxMDgsIDE0NywgMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDMsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuX3Rlcm1pbmF0aW5nX3RvZ2V0aGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0NSwgY2FsbGJhY2sxLCAxNywgOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAyCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQ2LCBjYWxsYmFjazIsIDExNDcsIDE4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkZW4gYXJlIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzIChjb2RlIDc4KQorICAgICAgICAjIGNoaWxkIDIgdGVybWluYXRlcyAoc2lnbmFsIDUpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NSwgNzgpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NiwgLTUpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0NSwgNzgsIDE3LCA4KQorICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDYsIC01LCAxMTQ3LCAxOCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDUsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDYsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmFjZV9jb25kaXRpb24oc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgYmVmb3JlIGJlaW5nIHJlZ2lzdGVyZWQKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MCwgNCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTAsIGNhbGxiYWNrLCAxLCAxMikKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1MCwgNCwgMSwgMTIpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTAsIC0xKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmVwbGFjZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2sxLCAxOSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciB0aGUgc2FtZSBjaGlsZCBhZ2FpbgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2syLCAyMSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIChzaWduYWwgOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAtOCkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUxLCAtOCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAxMykKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3JlbW92ZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUyLCBjYWxsYmFjaywgMTk4NCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIHRoZSBjaGlsZAorICAgICAgICBzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyAoY29kZSA5OSkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUyLCA5OSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3Vua25vd25fc3RhdHVzKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUzLCBjYWxsYmFjaywgLTE5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHRlcm1pbmF0ZSB3aXRoIHVua25vd24gc3RhdHVzCisgICAgICAgIHNlbGYuem9tYmllc1s1M10gPSAxMTc4CisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUzLCAxMTc4LCAtMTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBjYWxsYmFjay5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MywgMTAxKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3JlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGRyZW4KKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTQsIGNhbGxiYWNrMSwgMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NSwgY2FsbGJhY2syLCAyKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU2LCBjYWxsYmFjazMsIDMpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQgaGFuZGxlciAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTQpKQorCisgICAgICAgICMgcmVtb3ZlIGNoaWxkIGhhbmRsZXIgMiBtdWx0aXBsZSB0aW1lcworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NSkpCisKKyAgICAgICAgIyBhbGwgY2hpbGRyZW4gdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1NCwgMCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU1LCAxKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTYsIDIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU2LCAyLCAzKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3VuaGFuZGxlZF9leGNlcHRpb24oc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTcsIGNhbGxiYWNrKQorCisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgIG0ud2FpdHBpZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KHVuaXhfZXZlbnRzLmxvZ2dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIikgYXMgbV9leGNlcHRpb246CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fZXhjZXB0aW9uLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9jaGlsZF9yZWFwZWRfZWxzZXdoZXJlKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU4LCBjYWxsYmFjaykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1OCwgNCkKKworICAgICAgICAjIHdhaXRwaWQgaXMgY2FsbGVkIGVsc2V3aGVyZQorICAgICAgICBvcy53YWl0cGlkKDU4LCBvcy5XTk9IQU5HKQorCisgICAgICAgIG0ud2FpdHBpZC5yZXNldF9tb2NrKCkKKworICAgICAgICAjIHNpZ2NobGQKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWQobS53YWl0cGlkKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAjIGhlcmUgdGhlIEZhc3RDaGlsZFdhdGNoZSBlbnRlcnMgYSBkZWFkbG9jaworICAgICAgICAgICAgIyAodGhlcmUgaXMgbm8gd2F5IHRvIHByZXZlbnQgaXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU4LCAyNTUpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5rbm93bl9waWRfZHVyaW5nX3JlZ2lzdHJhdGlvbihzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciB0d28gY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzLCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDU5MSwgNykKKyAgICAgICAgICAgICMgYW4gdW5rbm93biBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNTkzLCAxNykKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTEsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTIsIGNhbGxiYWNrMikKKworICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTkxLCA3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYwLCBjYWxsYmFjaykKKworICAgICAgICAjIGF0dGFjaCBhIG5ldyBsb29wCisgICAgICAgIG9sZF9sb29wID0gc2VsZi5sb29wCisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgb2xkX2xvb3AsCisgICAgICAgICAgICAgICAgInJlbW92ZV9zaWduYWxfaGFuZGxlciIpIGFzIG1fb2xkX3JlbW92ZV9zaWduYWxfaGFuZGxlciwgXAorICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwKKyAgICAgICAgICAgICAgICAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9uZXdfYWRkX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICAgICBtX29sZF9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisgICAgICAgICAgICBtX25ld19hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MCwgOSkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjAsIDkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wX3JhY2VfY29uZGl0aW9uKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIDMgY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2szID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MSwgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYyLCBjYWxsYmFjazIpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjIyLCBjYWxsYmFjazMpCisKKyAgICAgICAgIyBkZXRhY2ggdGhlIGxvb3AKKyAgICAgICAgb2xkX2xvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgb2xkX2xvb3AsICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX3JlbW92ZV9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKE5vbmUpCisKKyAgICAgICAgICAgIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorCisgICAgICAgICMgY2hpbGQgMSAmIDIgdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MSwgMTEpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MiwgLTUpCisKKyAgICAgICAgIyBTSUdDSExEIHdhcyBub3QgY2F0Y2hlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgICMgYXR0YWNoIGEgbmV3IGxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AsICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX2FkZF9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICAgICAgbV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisgICAgICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjEsIDExKSAgIyByYWNlIGNvbmRpdGlvbiEKKyAgICAgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MiwgLTUpICAjIHJhY2UgY29uZGl0aW9uIQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgY2hpbGQgMyB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MjIsIDE5KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYyMiwgMTkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIHR3byBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MywgOSkKKyAgICAgICAgICAgICMgb3RoZXIgY2hpbGQgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDY1LCAxOCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjMsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2NCwgY2FsbGJhY2sxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLndhdGNoZXIuX2NhbGxiYWNrcyksIDEpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi53YXRjaGVyLl96b21iaWVzKSwgMSkKKworICAgICAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLAorICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXI6CisKKyAgICAgICAgICAgICAgICBzZWxmLndhdGNoZXIuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLl9jYWxsYmFja3MpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIHVuaXhfZXZlbnRzLkZhc3RDaGlsZFdhdGNoZXIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5fem9tYmllcykKKworCitjbGFzcyBTYWZlQ2hpbGRXYXRjaGVyVGVzdHMgKENoaWxkV2F0Y2hlclRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TYWZlQ2hpbGRXYXRjaGVyKCkKKworCitjbGFzcyBGYXN0Q2hpbGRXYXRjaGVyVGVzdHMgKENoaWxkV2F0Y2hlclRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5GYXN0Q2hpbGRXYXRjaGVyKCkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY3JlYXRlX3BvbGljeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvbGljeS5fd2F0Y2hlcikKKworICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX3dhdGNoZXIsIHdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2F0Y2hlci5fbG9vcCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX2FmdGVyX3NldChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgd2F0Y2hlciA9IHVuaXhfZXZlbnRzLkZhc3RDaGlsZFdhdGNoZXIoKQorCisgICAgICAgIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeS5fd2F0Y2hlciwgd2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKSkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX3dpdGhfbWFpbmxvb3BfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvbGljeS5fd2F0Y2hlcikKKyAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgbG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX3RocmVhZChzZWxmKToKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9saWN5LmdldF9ldmVudF9sb29wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YXRjaGVyLCB1bml4X2V2ZW50cy5TYWZlQ2hpbGRXYXRjaGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2F0Y2hlci5fbG9vcCkKKworICAgICAgICAgICAgcG9saWN5LmdldF9ldmVudF9sb29wKCkuY2xvc2UoKQorCisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisKKyAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0aC5zdGFydCgpCisgICAgICAgIHRoLmpvaW4oKQorCisgICAgZGVmIHRlc3RfY2hpbGRfd2F0Y2hlcl9yZXBsYWNlX21haW5sb29wX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbmV3X2xvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AobmV3X2xvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBuZXdfbG9vcCkKKworICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIE5vbmUpCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIG5ld19sb29wLmNsb3NlKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmEzM2RhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSwxMzkgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdXaW5kb3dzIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQorCitpbXBvcnQgYXN5bmNpbworCitmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHN0cmVhbXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IF9vdmVybGFwcGVkCisKKworY2xhc3MgVXBwZXJQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5idWYgPSBbXQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFucyk6CisgICAgICAgIHNlbGYudHJhbnMgPSB0cmFucworCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYnVmLmFwcGVuZChkYXRhKQorICAgICAgICBpZiBiJ1xuJyBpbiBkYXRhOgorICAgICAgICAgICAgc2VsZi50cmFucy53cml0ZShiJycuam9pbihzZWxmLmJ1ZikudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnMuY2xvc2UoKQorCisKK2NsYXNzIFByb2FjdG9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB3aW5kb3dzX2V2ZW50cy5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGEsIGIgPSBzZWxmLmxvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICB0cmFucyA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KGEsIHByb3RvY29scy5Qcm90b2NvbCgpKQorICAgICAgICBmID0gYXN5bmNpby5hc3luYyhzZWxmLmxvb3Auc29ja19yZWN2KGIsIDEwMCkpCisgICAgICAgIHRyYW5zLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksIGInJykKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9iaW5kKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVx0ZXN0X2RvdWJsZV9iaW5kLSVzJyAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlcnZlcjEgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKToKKyAgICAgICAgICAgIHNlcnZlcjIgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHNlcnZlcjEuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLl90ZXN0X3BpcGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdkb25lJykKKworICAgIGRlZiBfdGVzdF9waXBlKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVxfdGVzdF9waXBlLSVzJyAlIG9zLmdldHBpZCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICBbc2VydmVyXSA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN0YXJ0X3NlcnZpbmdfcGlwZSgKKyAgICAgICAgICAgIFVwcGVyUHJvdG8sIEFERFJFU1MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXJ2ZXIsIHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIpCisKKyAgICAgICAgY2xpZW50cyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgc3RyZWFtX3JlYWRlciA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvdG9jb2wgPSBzdHJlYW1zLlN0cmVhbVJlYWRlclByb3RvY29sKHN0cmVhbV9yZWFkZXIpCisgICAgICAgICAgICB0cmFucywgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogcHJvdG9jb2wsIEFERFJFU1MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnMsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90b2NvbCwgcHJvdG8pCisgICAgICAgICAgICBjbGllbnRzLmFwcGVuZCgoc3RyZWFtX3JlYWRlciwgdHJhbnMpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgdy53cml0ZSgnbG93ZXIte31cbicuZm9ybWF0KGkpLmVuY29kZSgpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBmcm9tIHIucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZSwgJ0xPV0VSLXt9XG4nLmZvcm1hdChpKS5lbmNvZGUoKSkKKyAgICAgICAgICAgIHcuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGV2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfd2luYXBpLkNsb3NlSGFuZGxlLCBldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHVuc2V0IGV2ZW50IHdpdGggMC4ycyB0aW1lb3V0OworICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUgRmFsc2UgYXQgdGltZW91dAorICAgICAgICBmID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDAuMikKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgZWxhcHNlZCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjE4IDwgZWxhcHNlZCA8IDAuNSwgZWxhcHNlZCkKKworICAgICAgICBfb3ZlcmxhcHBlZC5TZXRFdmVudChldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIGZvciBzZXQgZXZlbnQ7CisgICAgICAgICMgcmVzdWx0IHNob3VsZCBiZSBUcnVlIGltbWVkaWF0ZWx5CisgICAgICAgIGYgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMTApCisgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IGVsYXBzZWQgPCAwLjAyLCBlbGFwc2VkKQorCisgICAgICAgIF9vdmVybGFwcGVkLlJlc2V0RXZlbnQoZXZlbnQpCisKKyAgICAgICAgIyBXYWl0IGZvciB1bnNldCBldmVudCB3aXRoIGEgY2FuY2VsbGVkIGZ1dHVyZTsKKyAgICAgICAgIyBDYW5jZWxsZWRFcnJvciBzaG91bGQgYmUgcmFpc2VkIGltbWVkaWF0ZWx5CisgICAgICAgIGYgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMTApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gZWxhcHNlZCA8IDAuMDIsIGVsYXBzZWQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOWQ2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMTQxIEBACisiIiJUZXN0cyBmb3Igd2luZG93X3V0aWxzIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1dpbmRvd3Mgb25seScpCisKK2ltcG9ydCBfd2luYXBpCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c191dGlscworZnJvbSBhc3luY2lvIGltcG9ydCBfb3ZlcmxhcHBlZAorCisKK2NsYXNzIFdpbnNvY2tldHBhaXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzc29jaywgY3NvY2sgPSB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisgICAgICAgIGNzb2NrLnNlbmQoYid4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIneHh4Jywgc3NvY2sucmVjdigxMDI0KSkKKworICAgICAgICBjc29jay5jbG9zZSgpCisgICAgICAgIHNzb2NrLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLndpbmRvd3NfdXRpbHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyX2V4YyhzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuZ2V0c29ja25hbWUucmV0dXJuX3ZhbHVlID0gKCcnLCAxMjM0NSkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5hY2NlcHQucmV0dXJuX3ZhbHVlID0gb2JqZWN0KCksIG9iamVjdCgpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcikKKworCitjbGFzcyBQaXBlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGlwZV9vdmVybGFwcGVkKHNlbGYpOgorICAgICAgICBoMSwgaDIgPSB3aW5kb3dzX3V0aWxzLnBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgVHJ1ZSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG92MSA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCAwKQorCisgICAgICAgICAgICBvdjEuUmVhZEZpbGUoaDEsIDEwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkcpCisgICAgICAgICAgICBFUlJPUl9JT19JTkNPTVBMRVRFID0gOTk2CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3YxLmdldHJlc3VsdCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS53aW5lcnJvciwgRVJST1JfSU9fSU5DT01QTEVURSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdleHBlY3RlZCBFUlJPUl9JT19JTkNPTVBMRVRFJykKKworICAgICAgICAgICAgb3YyID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92Mi5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjIuZXJyb3IsIDApCisKKyAgICAgICAgICAgIG92Mi5Xcml0ZUZpbGUoaDIsIGIiaGVsbG8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvdjIuZXJyb3IsIHswLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkd9KQorCisgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMoW292Mi5ldmVudF0sIEZhbHNlLCAxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgX3dpbmFwaS5XQUlUX09CSkVDVF8wKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92MS5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZXJyb3IsIEVSUk9SX0lPX0lOQ09NUExFVEUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92Mi5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvdjIuZXJyb3IsIHswLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkd9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZ2V0cmVzdWx0KCksIGIiaGVsbG8iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMSkKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDIpCisKKyAgICBkZWYgdGVzdF9waXBlX2hhbmRsZShzZWxmKToKKyAgICAgICAgaCwgXyA9IHdpbmRvd3NfdXRpbHMucGlwZShvdmVybGFwcGVkPShUcnVlLCBUcnVlKSkKKyAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShfKQorICAgICAgICBwID0gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5maWxlbm8oKSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhhbmRsZSwgaCkKKworICAgICAgICAjIGNoZWNrIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBwIGNsb3NlcyBoYW5kbGUKKyAgICAgICAgZGVsIHAKKyAgICAgICAgdGVzdC5zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIDYpICAgICAjIEVSUk9SX0lOVkFMSURfSEFORExFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2V4cGVjdGVkIEVSUk9SX0lOVkFMSURfSEFORExFJykKKworCitjbGFzcyBQb3BlblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BvcGVuKHNlbGYpOgorICAgICAgICBjb21tYW5kID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBzID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocy51cHBlcigpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RkZXJyJykKKyAgICAgICAgICAgICIiIgorICAgICAgICBtc2cgPSBiImJsYWhcbiIKKworICAgICAgICBwID0gd2luZG93c191dGlscy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvbW1hbmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj13aW5kb3dzX3V0aWxzLlBJUEUpCisKKyAgICAgICAgZm9yIGYgaW4gW3Auc3RkaW4sIHAuc3Rkb3V0LCBwLnN0ZGVycl06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgd2luZG93c191dGlscy5QaXBlSGFuZGxlKQorCisgICAgICAgIG92aW4gPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZvdXQgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZlcnIgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKworICAgICAgICBvdmluLldyaXRlRmlsZShwLnN0ZGluLmhhbmRsZSwgbXNnKQorICAgICAgICBvdm91dC5SZWFkRmlsZShwLnN0ZG91dC5oYW5kbGUsIDEwMCkKKyAgICAgICAgb3ZlcnIuUmVhZEZpbGUocC5zdGRlcnIuaGFuZGxlLCAxMDApCisKKyAgICAgICAgZXZlbnRzID0gW292aW4uZXZlbnQsIG92b3V0LmV2ZW50LCBvdmVyci5ldmVudF0KKyAgICAgICAgIyBTdXBlci1sb25nIHRpbWVvdXQgZm9yIHNsb3cgYnVpbGRib3RzLgorICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMoZXZlbnRzLCBUcnVlLCAxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdm91dC5wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92ZXJyLnBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Zpbi5wZW5kaW5nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Zpbi5nZXRyZXN1bHQoKSwgbGVuKG1zZykpCisgICAgICAgIG91dCA9IG92b3V0LmdldHJlc3VsdCgpLnJzdHJpcCgpCisgICAgICAgIGVyciA9IG92ZXJyLmdldHJlc3VsdCgpLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihvdXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGVyciksIDApCisgICAgICAgICMgYWxsb3cgZm9yIHBhcnRpYWwgcmVhZHMuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy51cHBlcigpLnJzdHJpcCgpLnN0YXJ0c3dpdGgob3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIic3RkZXJyIi5zdGFydHN3aXRoKGVycikpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0cy50eHQgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjA5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdHMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK3Rlc3RfYXN5bmNpby50ZXN0X2Jhc2VfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X2Z1dHVyZXMKK3Rlc3RfYXN5bmNpby50ZXN0X2xvY2tzCit0ZXN0X2FzeW5jaW8udGVzdF9wcm9hY3Rvcl9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3F1ZXVlcwordGVzdF9hc3luY2lvLnRlc3Rfc2VsZWN0b3JfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9zdHJlYW1zCit0ZXN0X2FzeW5jaW8udGVzdF90YXNrcwordGVzdF9hc3luY2lvLnRlc3RfdHJhbnNwb3J0cwordGVzdF9hc3luY2lvLnRlc3RfdW5peF9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3dpbmRvd3NfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF93aW5kb3dzX3V0aWxzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQppbmRleCA1ZDA2MzJlLi4wODRkMjQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKQEAgLTE5LDYgKzE5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKK1RJTUVPVVQgPSAzCiBIQVNfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykKIAogY2xhc3MgZHVtbXlzb2NrZXQ6CkBAIC0zOTUsNyArMzk2LDEwIEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCisKIAogCiBjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsKERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzKToKQEAgLTc0MCw3ICs3NDQsMTIgQEAKICAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc2VsZi5mYW1pbHkpCiAgICAgICAgIFNPQ0tfTk9OQkxPQ0sgPSBnZXRhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0spCisgICAgICAgIHNvY2tfdHlwZSA9IHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0sKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocy5zb2NrZXQudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tfdHlwZSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsIHNvY2tfdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tfdHlwZSkKIAogICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzU0LDcgKzc2Myw3IEBACiAgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCiAgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKHNlbGYuYWRkclswXSwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMyLmJpbmQsIChzZWxmLmFkZHJbMF0sIHBvcnQpKQogCiAgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzYyLDcgKzc3MSw3IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCkBAIC03ODcsNyArNzk2LDExIEBACiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD01MDApKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodC5qb2luKQorICAgICAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgICAgIGlmIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzZWxmLmZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgcy5zZXR0aW1lb3V0KC4yKQpAQCAtNzk1LDcgKzgwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soJ2lpJywgMSwgMCkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KHNlcnZlci5hZGRyZXNzKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CmluZGV4IDMwYzNiNGEuLjg0NjQ0ZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW8KIGltcG9ydCBhdGV4aXQKK2ltcG9ydCBfdGVzdGNhcGkKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAjIyMgaGVscGVycwpAQCAtMjMsNyArMjQsOSBAQAogZGVmIHJhaXNlMigpOgogICAgIHJhaXNlIFN5c3RlbUVycm9yCiAKLWNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgR2VuZXJhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLnNhdmVfc3RkZXJyID0gc3lzLnN0ZGVycgpAQCAtMTQxLDggKzE0NCw0MyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFs1XSkKIAogCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWsoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHNob3dzIGEgbGVhayBpbiByZWZsZWFrIG1vZGUgaWYgYXRleGl0IGRvZXNuJ3QKKyAgICAgICAgIyB0YWtlIGNhcmUgdG8gZnJlZSBjYWxsYmFja3MgaW4gaXRzIHBlci1zdWJpbnRlcnByZXRlciBtb2R1bGUKKyAgICAgICAgIyBzdGF0ZS4KKyAgICAgICAgbiA9IGF0ZXhpdC5fbmNhbGxiYWNrcygpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGYpCisgICAgICAgICAgICBkZWwgYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0ZXhpdC5fbmNhbGxiYWNrcygpLCBuKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWtfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgU2ltaWxhciB0byB0aGUgYWJvdmUsIGJ1dCB3aXRoIGEgcmVmY3ljbGUgdGhyb3VnaCB0aGUgYXRleGl0CisgICAgICAgICMgbW9kdWxlLgorICAgICAgICBuID0gYXRleGl0Ll9uY2FsbGJhY2tzKCkKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoZikKKyAgICAgICAgICAgIGF0ZXhpdC5fX2F0ZXhpdCA9IGF0ZXhpdAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGV4aXQuX25jYWxsYmFja3MoKSwgbikKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5IGIvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CmluZGV4IGE5MmNmODcuLmQ1MDc1NDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKQEAgLTUsMTMgKzUsMTggQEAKIGRlZiBwYWNrKHdpZHRoLCBkYXRhKToKICAgICByZXR1cm4gYicnLmpvaW4odi50b19ieXRlcyh3aWR0aCwgc3lzLmJ5dGVvcmRlciwgc2lnbmVkPVRydWUpIGZvciB2IGluIGRhdGEpCiAKLXBhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1tYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1taW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDQpfQorZGVmIHVucGFjayh3aWR0aCwgZGF0YSk6CisgICAgcmV0dXJuIFtpbnQuZnJvbV9ieXRlcyhkYXRhW2k6IGkgKyB3aWR0aF0sIHN5cy5ieXRlb3JkZXIsIHNpZ25lZD1UcnVlKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB3aWR0aCldCisKK3BhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittaW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQogCiBkYXRhcyA9IHsKICAgICAxOiBiJ1x4MDBceDEyXHg0NVx4YmJceDdmXHg4MFx4ZmYnLAogICAgIDI6IHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY3LCAweDdmZmYsIC0weDgwMDAsIC0xKSwKKyAgICAzOiBwYWNrc1szXSgwLCAweDEyMzQ1NiwgMHg0NTY3ODksIC0weDQ1Njc4OSwgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpLAogICAgIDQ6IHBhY2tzWzRdKDAsIDB4MTIzNDU2NzgsIDB4NDU2Nzg5YWIsIC0weDQ1Njc4OWFiLAogICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMSksCiB9CkBAIC0xOSw2ICsyNCw3IEBACiBJTlZBTElEX0RBVEEgPSBbCiAgICAgKGInYWJjJywgMCksCiAgICAgKGInYWJjJywgMiksCisgICAgKGInYWInLCAzKSwKICAgICAoYidhYmMnLCA0KSwKIF0KIApAQCAtMjYsOCArMzIsMTAgQEAKIGNsYXNzIFRlc3RBdWRpb29wKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X21heChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAoNSksIHcpLCA1KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKDUsIC04LCAtMSksIHcpLCA4KQpAQCAtMzYsOSArNDQsMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoZGF0YXNbd10sIHcpLCAtbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfbWlubWF4KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChiJycsIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChieXRlYXJyYXkoKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KG1lbW9yeXZpZXcoYicnKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1KSwgdyksICg1LCA1KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1LCAtOCwgLTEpLCB3KSwgKC04LCA1KSkKQEAgLTUwLDE2ICs2MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pKQogCiAgICAgZGVmIHRlc3RfbWF4cHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGRhdGFzW3ddLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWVzW3ddIC0gbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfYXZnKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocCg1KSwgdyksIDUpCiAgICAgICAgICAgICBzZWxmIC5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUsIDgpLCB3KSwgNikKQEAgLTc0LDE3ICs5MCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDYwMDAwMDAwKQogCiAgICAgZGVmIHRlc3RfYXZncHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbMV0sIDEpLCAxOTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1syXSwgMiksIDUwNTM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbM10sIDMpLCAxMjkzNzA5NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzRdLCA0KSwgMzMxMTg5NzAwMikKIAogICAgIGRlZiB0ZXN0X3JtcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKHAoKnJhbmdlKDEwMCkpLCB3KSwgNTcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGF1ZGlvb3Aucm1zKHAobWF4dmFsdWVzW3ddKSAqIDUsIHcpLApAQCAtOTMsMTEgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWludmFsdWVzW3ddLCBkZWx0YT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzFdLCAxKSwgNzcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMl0sIDIpLCAyMDAwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1szXSwgMyksIDUxMjA1MjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbNF0sIDQpLCAxMzEwODU0MTUyKQogCiAgICAgZGVmIHRlc3RfY3Jvc3Moc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYicnLCB3KSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYnl0ZWFycmF5KCksIHcpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhtZW1vcnl2aWV3KGInJyksIHcpLCAtMSkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMCwgMSwgMiksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMSwgMiwgLTMsIC00KSwgdyksIDEpCkBAIC0xMDYsMjIgKzEzMCwyOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pLCB3KSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoYicnLCBiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGJ5dGVhcnJheSgpLCBieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQobWVtb3J5dmlldyhiJycpLCBtZW1vcnl2aWV3KGInJyksIHcpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzW3ddLCBiJ1wwJyAqIGxlbihkYXRhc1t3XSksIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1sxXSwgZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMFx4MjRceDdmXHg4MFx4N2ZceDgwXHhmZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbMl0sIGRhdGFzWzJdLCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbM10sIGRhdGFzWzNdLCAzKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgwLCAweDI0NjhhYywgMHg3ZmZmZmYsIC0weDgwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzRdLCBkYXRhc1s0XSwgNCksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCiAKICAgICBkZWYgdGVzdF9iaWFzKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZm9yIGJpYXMgaW4gMCwgMSwgLTEsIDEyNywgLTEyOCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoYicnLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGJ5dGVhcnJheSgpLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKG1lbW9yeXZpZXcoYicnKSwgdywgYmlhcyksIGInJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMVx4MTNceDQ2XHhiY1x4ODBceDgxXHgwMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAtMSksCkBAIC0xMzgsNiArMTY5LDE3IEBACiAgICAgICAgICAgICAgICAgcGFja3NbMl0oLTEsIDB4MTIzMywgMHg0NTY2LCAtMHg0NTY4LCAweDdmZmUsIDB4N2ZmZiwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1syXSwgMiwgLTB4ODAwMDAwMDApLAogICAgICAgICAgICAgICAgIGRhdGFzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgMSksCisgICAgICAgICAgICAgICAgcGFja3NbM10oMSwgMHgxMjM0NTcsIDB4NDU2NzhhLCAtMHg0NTY3ODgsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwLCAtMHg3ZmZmZmYsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgLTEpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIDB4N2ZmZmZmZmYpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIC0weDgwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICBkYXRhc1szXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbNF0sIDQsIDEpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDEsIDB4MTIzNDU2NzksIDB4NDU2Nzg5YWMsIC0weDQ1Njc4OWFhLAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDgwMDAwMDAwLCAtMHg3ZmZmZmZmZiwgMCkpCkBAIC0xNTIsOTkgKzE5NCwxNDEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMHg3ZmZmZmZmZikpCiAKICAgICBkZWYgdGVzdF9saW4ybGluKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbd10sIHcsIHcpLCBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGJ5dGVhcnJheShkYXRhc1t3XSksIHcsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKG1lbW9yeXZpZXcoZGF0YXNbd10pLCB3LCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDIpLAogICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjAwLCAweDQ1MDAsIC0weDQ1MDAsIDB4N2YwMCwgLTB4ODAwMCwgLTB4MTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjAwMDAsIDB4NDUwMDAwLCAtMHg0NTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMCwgLTB4ODAwMDAwLCAtMHgxMDAwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIwMDAwMDAsIDB4NDUwMDAwMDAsIC0weDQ1MDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMzQwMCwgMHg0NTY3MDAsIC0weDQ1NjcwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZjAwLCAtMHg4MDAwMDAsIC0weDEwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIzNDAwMDAsIDB4NDU2NzAwMDAsIC0weDQ1NjcwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDEpLAorICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDIpLAorICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjgsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgNCksCisgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMzQ1NjAwLCAweDQ1Njc4OTAwLCAtMHg0NTY3ODkwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmMDAsIC0weDgwMDAwMDAwLCAtMHgxMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMiksCiAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2OCwgMHg3ZmZmLCAtMHg4MDAwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIzNDU2LCAweDQ1Njc4OSwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpKQogCiAgICAgZGVmIHRlc3RfYWRwY20ybGluKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYnl0ZWFycmF5KGInXHgwN1x4N2ZceDdmJyksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKG1lbW9yeXZpZXcoYidceDA3XHg3Zlx4N2YnKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAyLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbMl0oMCwgMHhiLCAweDI5LCAtMHgxNiwgMHg3MiwgLTB4YjMpLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDMsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1szXSgwLCAweGIwMCwgMHgyOTAwLCAtMHgxNjAwLCAweDcyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weGIzMDApLCAoLTE3OSwgNDApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDQsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1s0XSgwLCAweGIwMDAwLCAweDI5MDAwMCwgLTB4MTYwMDAwLCAweDcyMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4YjMwMDAwKSwgKC0xNzksIDQwKSkpCiAKICAgICAgICAgIyBWZXJ5IGN1cnNvcnkgdGVzdAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1wwJyAqIDUsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiB3ICogMTAsICgwLCAwKSkpCiAKICAgICBkZWYgdGVzdF9saW4yYWRwY20oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbMV0sIDEsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgtMjIxLCAzOSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzJdLCAyLCBOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbNF0sIDQsIE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShieXRlYXJyYXkoZGF0YXNbMV0pLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzW3ddLCB3LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQogCiAgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oYidcMCcgKiB3ICogMTAsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiA1LCAoMCwgMCkpKQogCiAgICAgZGVmIHRlc3RfbGluMmFsYXcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzJdLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbNF0sIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhieXRlYXJyYXkoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcobWVtb3J5dmlldyhkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1YScpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbd10sIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQogCiAgICAgZGVmIHRlc3RfYWxhdzJsaW4oc2VsZik6CiAgICAgICAgIGVuY29kZWQgPSBiJ1x4MDBceDAzXHgyNFx4MmFceDUxXHg1NFx4NTVceDU4XHg2Ylx4NzFceDdmJ1wKICAgICAgICAgICAgICAgICAgIGInXHg4MFx4ODNceGE0XHhhYVx4ZDFceGQ0XHhkNVx4ZDhceGViXHhmMVx4ZmYnCiAgICAgICAgIHNyYyA9IFstNjg4LCAtNzIwLCAtMjI0MCwgLTQwMzIsIC05LCAtMywgLTEsIC0yNywgLTI0NCwgLTgyLCAtMTA2LAogICAgICAgICAgICAgICAgNjg4LCA3MjAsIDIyNDAsIDQwMzIsIDksIDMsIDEsIDI3LCAyNDQsIDgyLCAxMDZdCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDEzIGZvciB4IGluIHNyYykpKQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgZGVjb2RlZCA9IHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDEzIGZvciB4IGluIHNyYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oYnl0ZWFycmF5KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihtZW1vcnl2aWV3KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKIAogICAgICAgICBlbmNvZGVkID0gYnl0ZXMocmFuZ2UoMjU2KSkKLSAgICAgICAgZm9yIHcgaW4gMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKICAgICAgICAgICAgIGRlY29kZWQgPSBhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGVjb2RlZCwgdyksIGVuY29kZWQpCiAKICAgICBkZWYgdGVzdF9saW4ydWxhdyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzFdLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4NjcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbMl0sIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1s0XSwgNCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGJ5dGVhcnJheShkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1t3XSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCiAKICAgICBkZWYgdGVzdF91bGF3MmxpbihzZWxmKToKICAgICAgICAgZW5jb2RlZCA9IGInXHgwMFx4MGVceDI4XHgzZlx4NTdceDZhXHg3Nlx4N2NceDdlXHg3ZidcCiAgICAgICAgICAgICAgICAgICBiJ1x4ODBceDhlXHhhOFx4YmZceGQ3XHhlYVx4ZjZceGZjXHhmZVx4ZmYnCiAgICAgICAgIHNyYyA9IFstODAzMSwgLTQ0NDcsIC0xNDcxLCAtNDk1LCAtMTYzLCAtNTMsIC0xOCwgLTYsIC0yLCAwLAogICAgICAgICAgICAgICAgODAzMSwgNDQ0NywgMTQ3MSwgNDk1LCAxNjMsIDUzLCAxOCwgNiwgMiwgMF0KLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTQgZm9yIHggaW4gc3JjKSkpCisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBkZWNvZGVkID0gcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTQgZm9yIHggaW4gc3JjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihieXRlYXJyYXkoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKG1lbW9yeXZpZXcoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQogCiAgICAgICAgICMgQ3VycmVudCB1LWxhdyBpbXBsZW1lbnRhdGlvbiBoYXMgdHdvIGNvZGVzIGZvIDA6IDB4N2YgYW5kIDB4ZmYuCiAgICAgICAgIGVuY29kZWQgPSBieXRlcyhyYW5nZSgxMjcpKSArIGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKLSAgICAgICAgZm9yIHcgaW4gMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKICAgICAgICAgICAgIGRlY29kZWQgPSBhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGVjb2RlZCwgdyksIGVuY29kZWQpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGInJywgdywgMiksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoYnl0ZWFycmF5KCksIHcsIDIpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKG1lbW9yeXZpZXcoYicnKSwgdywgMiksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbd10sIHcsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1wwJyAqIGxlbihkYXRhc1t3XSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzW3ddLCB3LCAxKSwKQEAgLTI1MywxNCArMzM3LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1syXSwgMiwgMiksCiAgICAgICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgyNDY4LCAweDdmZmYsIC0weDgwMDAsIDB4N2ZmZiwgLTB4ODAwMCwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzNdLCAzLCAyKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgwLCAweDI0NjhhYywgMHg3ZmZmZmYsIC0weDgwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbNF0sIDQsIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MjQ2OGFjZjAsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCiAKICAgICBkZWYgdGVzdF9yYXRlY3Yoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGJ5dGVhcnJheSgpLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YobWVtb3J5dmlldyhiJycpLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCA1LCA4MDAwLCA4MDAwLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkgKiA1KSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgMSwgODAwMCwgMTYwMDAsIE5vbmUpLApAQCAtMjcyLDcgKzM2Myw3IEBACiAgICAgICAgIGQyLCBzdGF0ZSA9IGF1ZGlvb3AucmF0ZWN2KGInXHgwMFx4MDFceDAyJywgMSwgMSwgODAwMCwgMTYwMDAsIHN0YXRlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxICsgZDIsIGInXDAwMFwwMDBcMDAxXDAwMVwwMDJcMDAxXDAwMFwwMDBcMDAxXDAwMVwwMDInKQogCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkMCwgc3RhdGUwID0gYXVkaW9vcC5yYXRlY3YoZGF0YXNbd10sIHcsIDEsIDgwMDAsIDE2MDAwLCBOb25lKQogICAgICAgICAgICAgZCwgc3RhdGUgPSBiJycsIE5vbmUKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhc1t3XSksIHcpOgpAQCAtMjgzLDEzICszNzQsMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIHN0YXRlMCkKIAogICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKG1lbW9yeXZpZXcoYicnKSwgdyksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKHBhY2tzW3ddKDAsIDEsIDIpLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oMiwgMSwgMCkpCiAKICAgICBkZWYgdGVzdF90b21vbm8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMjk5LDkgKzM5MiwxMyBAQAogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CiAgICAgICAgICAgICAgICAgZGF0YTJbayt3OjoyKnddID0gZGF0YTFbazo6d10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oZGF0YTIsIHcsIDAuNSwgMC41KSwgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKGJ5dGVhcnJheShkYXRhMiksIHcsIDAuNSwgMC41KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKG1lbW9yeXZpZXcoZGF0YTIpLCB3LCAwLjUsIDAuNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGExKQogCiAgICAgZGVmIHRlc3RfdG9zdGVyZW8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMzExLDE0ICs0MDgsMjUgQEAKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgogICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oZGF0YTEsIHcsIDEsIDEpLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhieXRlYXJyYXkoZGF0YTEpLCB3LCAxLCAxKSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8obWVtb3J5dmlldyhkYXRhMSksIHcsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMikKIAogICAgIGRlZiB0ZXN0X2ZpbmRmYWN0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGRhdGFzWzJdLCBkYXRhc1syXSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IobWVtb3J5dmlldyhkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoZGF0YXNbMl0pKSwgMS4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihiJ1wwJyAqIGxlbihkYXRhc1syXSksIGRhdGFzWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAwLjApCiAKICAgICBkZWYgdGVzdF9maW5kZml0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChkYXRhc1syXSwgZGF0YXNbMl0pLCAoMCwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksICgwLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChtZW1vcnl2aWV3KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhkYXRhc1syXSkpLCAoMCwgMS4wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIHBhY2tzWzJdKDEsIDIsIDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgODAzOC44KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl1bOi0yXSAqIDUgKyBkYXRhc1syXSwgZGF0YXNbMl0pLApAQCAtMzI2LDE2ICs0MzQsMzcgQEAKIAogICAgIGRlZiB0ZXN0X2ZpbmRtYXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KGRhdGFzWzJdLCAxKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRtYXgoYnl0ZWFycmF5KGRhdGFzWzJdKSwgMSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KG1lbW9yeXZpZXcoZGF0YXNbMl0pLCAxKSwgNSkKIAogICAgIGRlZiB0ZXN0X2dldHNhbXBsZShzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGEgPSBwYWNrc1t3XSgwLCAxLCAtMSwgbWF4dmFsdWVzW3ddLCBtaW52YWx1ZXNbd10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShieXRlYXJyYXkoZGF0YSksIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShtZW1vcnl2aWV3KGRhdGEpLCB3LCAwKSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMSksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDIpLCAtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMyksIG1heHZhbHVlc1t3XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgNCksIG1pbnZhbHVlc1t3XSkKIAorICAgIGRlZiB0ZXN0X2J5dGVzd2FwKHNlbGYpOgorICAgICAgICBzd2FwcGVkX2RhdGFzID0geworICAgICAgICAgICAgMTogZGF0YXNbMV0sCisgICAgICAgICAgICAyOiBwYWNrc1syXSgwLCAweDM0MTIsIDB4Njc0NSwgLTB4NjY0NiwgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgICAgIDM6IHBhY2tzWzNdKDAsIDB4NTYzNDEyLCAtMHg3Njk4YmIsIDB4Nzc5OGJhLCAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICAgICAgNDogcGFja3NbNF0oMCwgMHg3ODU2MzQxMiwgLTB4NTQ3Njk4YmIsIDB4NTU3Njk4YmEsCisgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICB9CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGRhdGFzW3ddLCB3KSwgc3dhcHBlZF9kYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChzd2FwcGVkX2RhdGFzW3ddLCB3KSwgZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYnl0ZWFycmF5KGRhdGFzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBwZWRfZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAobWVtb3J5dmlldyhkYXRhc1t3XSksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVkX2RhdGFzW3ddKQorCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVsZW4oc2VsZik6CiAgICAgICAgICMgZnJvbSBpc3N1ZSAzMzA2LCBwcmV2aW91c2x5IGl0IHNlZ2ZhdWx0ZWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwKQEAgLTM2NSwxMCArNDk0LDMzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGRhdGEsIHNpemUsIHN0YXRlKQogCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gJ2FiY2QnCisgICAgICAgIHNpemUgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5nZXRzYW1wbGUsIGRhdGEsIHNpemUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5taW5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmcsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5ybXMsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmdwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLm1heHBwLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuY3Jvc3MsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tdWwsIGRhdGEsIHNpemUsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnRvbW9ubywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC50b3N0ZXJlbywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hZGQsIGRhdGEsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5iaWFzLCBkYXRhLCBzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AucmV2ZXJzZSwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJsaW4sIGRhdGEsIHNpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5yYXRlY3YsIGRhdGEsIHNpemUsIDEsIDEsIDEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4ydWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBkYXRhLCBzaXplLCBOb25lKQorCiAgICAgZGVmIHRlc3Rfd3JvbmdzaXplKHNlbGYpOgogICAgICAgICBkYXRhID0gYidhYmNkZWZnaCcKICAgICAgICAgc3RhdGUgPSBOb25lCi0gICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgMywgNSwgMTAyNCk6CisgICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgNSwgMTAyNCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLnVsYXcybGluLCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hbGF3MmxpbiwgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBkYXRhLCBzaXplLCBzdGF0ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKaW5kZXggMTM2OTVkZS4uYjk3MzhkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKQEAgLTUsMTAgKzUsMjEgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKLQoraW1wb3J0IHN0cnVjdAorZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKIAogCiBjbGFzcyBMZWdhY3lCYXNlNjRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIExlZ2FjeSBBUEkgaXMgbm90IGFzIHBlcm1pc3NpdmUgYXMgdGhlIG1vZGVybiBBUEkKKyAgICBkZWYgY2hlY2tfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisgICAgICAgIG11bHRpZGltZW5zaW9uYWwgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0InLCAoMiwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgbXVsdGlkaW1lbnNpb25hbCkKKyAgICAgICAgaW50X2RhdGEgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGludF9kYXRhKQorCiAgICAgZGVmIHRlc3RfZW5jb2RlYnl0ZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYiJ3d3cucHl0aG9uLm9yZyIpLCBiImQzZDNMbkI1ZEdodmJpNXZjbWM9XG4iKQpAQCAtMjQsNyArMzUsOSBAQAogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT1cbiIpCiAgICAgICAgICMgTm9uLWJ5dGVzCiAgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhieXRlYXJyYXkoYidhYmMnKSksIGInWVdKalxuJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuZW5jb2RlYnl0ZXMsICIiKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMobWVtb3J5dmlldyhiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYXJyYXkoJ0InLCBiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfZXJyb3JzKGJhc2U2NC5lbmNvZGVieXRlcykKIAogICAgIGRlZiB0ZXN0X2RlY29kZWJ5dGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTQxLDcgKzU0LDkgQEAKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGInJyksIGInJykKICAgICAgICAgIyBOb24tYnl0ZXMKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGJ5dGVhcnJheShiJ1lXSmpcbicpKSwgYidhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5kZWNvZGVieXRlcywgIiIpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhtZW1vcnl2aWV3KGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhhcnJheSgnQicsIGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9lcnJvcnMoYmFzZTY0LmRlY29kZWJ5dGVzKQogCiAgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTczLDYgKzg4LDQyIEBACiAKIAogY2xhc3MgQmFzZVhZVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBNb2Rlcm4gQVBJIGNvbXBsZXRlbHkgaWdub3JlcyBleHBvcnRlZCBkaW1lbnNpb24gYW5kIGZvcm1hdCBkYXRhIGFuZAorICAgICMgdHJlYXRzIGFueSBidWZmZXIgYXMgYSBzdHJlYW0gb2YgYnl0ZXMKKyAgICBkZWYgY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorCisgICAgZGVmIGNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKworICAgIGRlZiBjaGVja19vdGhlcl90eXBlcyhzZWxmLCBmLCBieXRlc19kYXRhLCBleHBlY3RlZCk6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBiID0gYnl0ZWFycmF5KGJ5dGVzX2RhdGEpCisgICAgICAgIGVxKGYoYiksIGV4cGVjdGVkKQorICAgICAgICAjIFRoZSBieXRlYXJyYXkgd2Fzbid0IG11dGF0ZWQKKyAgICAgICAgZXEoYiwgYnl0ZXNfZGF0YSkKKyAgICAgICAgZXEoZihtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpKSwgZXhwZWN0ZWQpCisgICAgICAgIGVxKGYoYXJyYXkoJ0InLCBieXRlc19kYXRhKSksIGV4cGVjdGVkKQorICAgICAgICAjIFhYWCB3aHkgaXMgYjY0ZW5jb2RlIGhhcmRjb2RlZCBoZXJlPworICAgICAgICBzZWxmLmNoZWNrX25vbmJ5dGVfZWxlbWVudF9mb3JtYXQoYmFzZTY0LmI2NGVuY29kZSwgYnl0ZXNfZGF0YSkKKyAgICAgICAgc2VsZi5jaGVja19tdWx0aWRpbWVuc2lvbmFsKGJhc2U2NC5iNjRlbmNvZGUsIGJ5dGVzX2RhdGEpCisKKyAgICBkZWYgY2hlY2tfbXVsdGlkaW1lbnNpb25hbChzZWxmLCBmLCBkYXRhKToKKyAgICAgICAgcGFkZGluZyA9IGIiXHgwMCIgaWYgbGVuKGRhdGEpICUgMiBlbHNlIGIiIgorICAgICAgICBieXRlc19kYXRhID0gZGF0YSArIHBhZGRpbmcgIyBNYWtlIHN1cmUgY2FzdCB3b3JrcworICAgICAgICBzaGFwZSA9IChsZW4oYnl0ZXNfZGF0YSkgLy8gMiwgMikKKyAgICAgICAgbXVsdGlkaW1lbnNpb25hbCA9IG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkuY2FzdCgnQicsIHNoYXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYobXVsdGlkaW1lbnNpb25hbCksIGYoYnl0ZXNfZGF0YSkpCisKKyAgICBkZWYgY2hlY2tfbm9uYnl0ZV9lbGVtZW50X2Zvcm1hdChzZWxmLCBmLCBkYXRhKToKKyAgICAgICAgcGFkZGluZyA9IGIiXHgwMCIgKiAoKDQgLSBsZW4oZGF0YSkpICUgNCkKKyAgICAgICAgYnl0ZXNfZGF0YSA9IGRhdGEgKyBwYWRkaW5nICMgTWFrZSBzdXJlIGNhc3Qgd29ya3MKKyAgICAgICAgaW50X2RhdGEgPSBtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoaW50X2RhdGEpLCBmKGJ5dGVzX2RhdGEpKQorCisKICAgICBkZWYgdGVzdF9iNjRlbmNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICAjIFRlc3QgZGVmYXVsdCBhbHBoYWJldApAQCAtOTAsMTMgKzE0MSwxNiBAQAogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQogICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9YicqJCcpLCBiJzAxYSpiJGNkJykKLSAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ1lXSmpaQT09JykKICAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWJ5dGVhcnJheShiJyokJykpLAogICAgICAgICAgICBiJzAxYSpiJGNkJykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCBiIiIsIGFsdGNoYXJzPSIiKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9bWVtb3J5dmlldyhiJyokJykpLAorICAgICAgICAgICBiJzAxYSpiJGNkJykKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWFycmF5KCdCJywgYicqJCcpKSwKKyAgICAgICAgICAgYicwMWEqYiRjZCcpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI2NGVuY29kZSwgYidhYmNkJywgYidZV0pqWkE9PScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iNjRlbmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwgYiIiLCBhbHRjaGFycz0iKiQiKQogICAgICAgICAjIFRlc3Qgc3RhbmRhcmQgYWxwaGFiZXQKICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShiInd3dy5weXRob24ub3JnIiksIGIiZDNkM0xuQjVkR2h2Ymk1dmNtYz0iKQogICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGIiYSIpLCBiIllRPT0iKQpAQCAtMTEwLDE1ICsxNjQsMTUgQEAKICAgICAgICAgICAgYiJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBOVCIKICAgICAgICAgICAgYiJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IikKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ1lXSmpaQT09JykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWJjZCcsIGInWVdKalpBPT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKQogICAgICAgICAjIFRlc3Qgd2l0aCAnVVJMIHNhZmUnIGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJyksIGInMDFhLWJfY2QnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoYnl0ZWFycmF5KGInXHhkM1ZceGJlb1x4ZjdceDFkJykpLCBiJzAxYS1iX2NkJykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGInMDFhLWJfY2QnKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUpCiAKICAgICBkZWYgdGVzdF9iNjRkZWNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMTQxLDcgKzE5NSw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGJ5dGVhcnJheShiIllXSmoiKSksIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjY0ZGVjb2RlLCBiIllXSmoiLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iNjRkZWNvZGUpCiAKICAgICAgICAgIyBUZXN0IHdpdGggYXJiaXRyYXJ5IGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgdGVzdHNfYWx0Y2hhcnMgPSB7KGInMDFhKmIkY2QnLCBiJyokJyk6IGInXHhkM1ZceGJlb1x4ZjdceDFkJywKQEAgLTE2MCw3ICsyMTUsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShieXRlYXJyYXkoYiJZV0pqIikpLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSwgYiJZV0pqIiwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKQogCiAgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICB0ZXN0c191cmxzYWZlID0ge2InMDFhLWJfY2QnOiBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsCkBAIC0xNzAsNyArMjI2LDkgQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoYnl0ZWFycmF5KGInMDFhLWJfY2QnKSksIGInXHhkM1ZceGJlb1x4ZjdceDFkJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUsIGInMDFhLWJfY2QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkM1ZceGJlb1x4ZjdceDFkJykKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKQogCiAgICAgZGVmIHRlc3RfYjY0ZGVjb2RlX3BhZGRpbmdfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiYXNlNjQuYjY0ZGVjb2RlLCBiJ2FiYycpCkBAIC0yMDUsOCArMjYzLDggQEAKICAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShiJ2FiY2QnKSwgYidNRlJHR1pBPScpCiAgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYidhYmNkZScpLCBiJ01GUkdHWkRGJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ01GUkdHWkE9JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjMyZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjMyZW5jb2RlLCBiJ2FiY2QnLCBiJ01GUkdHWkE9JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIzMmVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2IzMmRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yMjIsNyArMjgwLDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoYnl0ZWFycmF5KGInTUZSR0c9PT0nKSksIGInYWJjJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjMyZGVjb2RlLCBiJ01GUkdHPT09JywgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjMyZGVjb2RlKQogCiAgICAgZGVmIHRlc3RfYjMyZGVjb2RlX2Nhc2Vmb2xkKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI3Nyw4ICszMzYsOSBAQAogICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKSwgYicwMTAyQUJDREVGJykKICAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShiJ1x4MDAnKSwgYicwMCcpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYnl0ZWFycmF5KGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKSksIGInMDEwMkFCQ0RFRicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIxNmVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIxNmVuY29kZSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwMTAyQUJDREVGJykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIxNmVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2IxNmRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yOTMsMTQgKzM1MywyNjggQEAKICAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShiJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYnl0ZWFycmF5KGIiMDEwMkFCQ0RFRiIpKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIxNmRlY29kZSwgYiIwMTAyQUJDREVGIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIxNmRlY29kZSkKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShieXRlYXJyYXkoYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShtZW1vcnl2aWV3KGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYXJyYXkoJ0InLCBiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorCisgICAgZGVmIHRlc3RfYTg1ZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYiJ3d3cucHl0aG9uLm9yZyI6IGInR0JcXDZgRS1aUD1EZi4xR0ViPicsCisgICAgICAgICAgICBieXRlcyhyYW5nZSgyNTUpKTogYiIiIiEhKi0nIjlldTcjUkxoRyRrM1tXJi5vTmcnR1ZCIihgPTUyKiQkIiIiCisgICAgICAgICAgICAgICBiIiIiKEIrPF9wUixVRmNiLW4tVnIvMWlKLTBKUD09MWM3ME0zJnMjXTQ/WWttNVhAXyg2cSdSODg0Y0UiIiIKKyAgICAgICAgICAgICAgIGIiIiJIOU1KOFg6ZjEraDwpbHQjPUJTZzM+WzpaQz90IU1TQTddQGNCUEQzc0NpKycuRSxmbz5GRU1iTiIiIgorICAgICAgICAgICAgICAgYiIiIkdeNFVeSSFwSG5KOlc8KUtTPi85TGwlIklOL2BqWU9IR11pUGEuUSRSJGpENFM9UTdEVFY4KlRVIiIiCisgICAgICAgICAgICAgICBiIiIibnNyZFcyWmV0WEtBWS9ZZChMP1snZD9PXFxASzJfXVkyJW9ecW1uKmA1VGE6YU47VEpiZyJHWmQiIiIKKyAgICAgICAgICAgICAgIGIiIiIqXjpqZUNFLiVmXFwsITVndGdpRWk4TlxcVWpRNU9la2lxQnVtLVg2MG5GPylAb18lcVBxImFkYCIiIgorICAgICAgICAgICAgICAgYiIiInI7SFQiIiIsCisgICAgICAgICAgICBiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICAgICAgICAgYiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iOgorICAgICAgICAgICAgICAgIGInQDpFX1dBUyxSZ0JraEYiRC9POTJFSDYsQkZgcXRSSCRWYkM2VVhANDduPzNEOTImJlQnCisgICAgICAgICAgICAgICAgYiI6SmFuZDtjSGF0PScvVS8wSlA9PTFjNzBNMyZyLUksOzxGTi5PWmAtM11vU1cvZytBKEhbUCIsCisgICAgICAgICAgICBiIm5vIHBhZGRpbmcuLiI6IGInREpwWTpAOlduX0RKKFJTJywKKyAgICAgICAgICAgIGIiemVybyBjb21wcmVzc2lvblwwXDBcMFwwIjogYidIPV8sOCtDZj4sRSxvTjJGKG9RMXonLAorICAgICAgICAgICAgYiJ6ZXJvIGNvbXByZXNzaW9uXDBcMFwwIjogYidIPV8sOCtDZj4sRSxvTjJGKG9RMSEhISEnLAorICAgICAgICAgICAgYiJCb3VuZGFyeTpcMFwwXDBcMCI6IGInNj5xIWFBNzlNKDNXSy1bISEnLAorICAgICAgICAgICAgYiJTcGFjZSBjb21wcjogICAgIjogYic7ZkgvVEFLWUskRC9hTVYrPFZkTCcsCisgICAgICAgICAgICBiJ1x4ZmYnOiBiJ3JyJywKKyAgICAgICAgICAgIGInXHhmZicqMjogYidzOE4nLAorICAgICAgICAgICAgYidceGZmJyozOiBiJ3M4VyonLAorICAgICAgICAgICAgYidceGZmJyo0OiBiJ3M4Vy0hJywKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEsIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShkYXRhLCBhZG9iZT1UcnVlKSwgYic8ficgKyByZXMgKyBiJ34+JywgZGF0YSkKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5hODVlbmNvZGUsIGIid3d3LnB5dGhvbi5vcmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0JcXDZgRS1aUD1EZi4xR0ViPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYTg1ZW5jb2RlLCAiIikKKworICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciLCB3cmFwY29sPTcsIGFkb2JlPUZhbHNlKSwKKyAgICAgICAgICAgYidHQlxcNmBFLVxuWlA9RGYuMVxuR0ViPicpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJcMFwwXDBcMHd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1GYWxzZSksCisgICAgICAgICAgIGInekdCXFw2YEVcbi1aUD1EZi5cbjFHRWI+JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1UcnVlKSwKKyAgICAgICAgICAgYic8fkdCXFw2YFxuRS1aUD1EZlxuLjFHRWI+XG5+PicpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjgsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3l5JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjcsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krPFZkJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjYsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krPFUnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqNSwgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneSs5JykKKworICAgIGRlZiB0ZXN0X2I4NWVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGInd3d3LnB5dGhvbi5vcmcnOiBiJ2NYeEwjYUN2bFNaKkRHY2ElVCcsCisgICAgICAgICAgICBieXRlcyhyYW5nZSgyNTUpKTogYiIiIjAwOUM2MU8pfk0ybmgtYzM9SXdzNUReais2Y3JYMTcjU0tIOTMzN1giIiIKKyAgICAgICAgICAgICAgICBiIiIiQVIhX25CcWImJUNAQ3J7RUc7ZkNGZmxTU0cmTUZpSTV8MnlKVXU9P0t0ViE3TGA2bk5OSiZhZCIiIgorICAgICAgICAgICAgICAgIGIiIiJPaWZOdFAqR0EtUjg+fTJTWG8rSVR3UHZZVX0waW9XTXlWJlhsWkl8WTtBNkRhQipeVGJhaSVqIiIiCisgICAgICAgICAgICAgICAgYiIiImN6SnF6ZTBfZEBmUHNSOGdvVEVPaD40MWVqRSM8dWtkY3k7bCREbTNuMzxaSm9TbU1acHJOOXAiIiIKKyAgICAgICAgICAgICAgICBiIiIicUB8eyhzSHYpfXRnV3VFdSg3aFV3NihVa3hWZ0gheXVINF56YD9AOSNLcCRQJGpRcGYlKzFjdiIiIgorICAgICAgICAgICAgICAgIGIiIiIoOXpQPClZYUQ0KnhCMEsrfSs7YTtOanhxPG1Layk9O2BYfj9DdExGQGJVOFZeITRgbGAxJCgjIiIiCisgICAgICAgICAgICAgICAgYiIiIntRZHAiIiIsCisgICAgICAgICAgICBiIiIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIiIgorICAgICAgICAgICAgICAgIGIiIiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iIiI6CisgICAgICAgICAgICAgICAgYiIiIlZQYSFzV29CbitYPS1iMVpFa09IYWRMQlhiI2B9bmQzciVZTHF0VkpNQFVJWk9INTVwUGYkQCgiIiIKKyAgICAgICAgICAgICAgICBiIiIiUSZkJH1TNkVxRUZmbFNTRyZNRmlJNXtDZUJRUmJqRGt2I0NJeV5vc0UrQVc3ZHdsIiIiLAorICAgICAgICAgICAgYidubyBwYWRkaW5nLi4nOiBiJ1pmX3VQVlBzQCFaZjdubycsCisgICAgICAgICAgICBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDBceDAwJzogYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAwJywKKyAgICAgICAgICAgIGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMCc6IGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwJywKKyAgICAgICAgICAgIGIiIiJCb3VuZGFyeTpceDAwXHgwMFx4MDBceDAwIiIiOiBiIiIiTFRgMCRXTU9pN0lzZ0N3MDAiIiIsCisgICAgICAgICAgICBiJ1NwYWNlIGNvbXByOiAgICAnOiBiJ1EqZEVwV2d1ZzNaRSRpckFScihoJywKKyAgICAgICAgICAgIGInXHhmZic6IGIne3snLAorICAgICAgICAgICAgYidceGZmJyoyOiBiJ3xOaicsCisgICAgICAgICAgICBiJ1x4ZmYnKjM6IGInfE5zOScsCisgICAgICAgICAgICBiJ1x4ZmYnKjQ6IGInfE5zQzAnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShkYXRhKSwgcmVzKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI4NWVuY29kZSwgYiJ3d3cucHl0aG9uLm9yZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjWHhMI2FDdmxTWipER2NhJVQnKQorCisgICAgZGVmIHRlc3RfYTg1ZGVjb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYidHQlxcNmBFLVpQPURmLjFHRWI+JzogYid3d3cucHl0aG9uLm9yZycsCisgICAgICAgICAgICBiIiIiISAhICogLSciXG5cdFx0OWV1XHJcbjcjICBSTFx2aEckazNbVyYub05nJ0dWQiIoYD01MiokJCIiIgorICAgICAgICAgICAgICAgYiIiIihCKzxfcFIsVUZjYi1uLVZyLzFpSi0wSlA9PTFjNzBNMyZzI100P1lrbTVYQF8oNnEnUjg4NGNFIiIiCisgICAgICAgICAgICAgICBiIiIiSDlNSjhYOmYxK2g8KWx0Iz1CU2czPls6WkM/dCFNU0E3XUBjQlBEM3NDaSsnLkUsZm8+RkVNYk4iIiIKKyAgICAgICAgICAgICAgIGIiIiJHXjRVXkkhcEhuSjpXPClLUz4vOUxsJSJJTi9gallPSEddaVBhLlEkUiRqRDRTPVE3RFRWOCpUVSIiIgorICAgICAgICAgICAgICAgYiIiIm5zcmRXMlpldFhLQVkvWWQoTD9bJ2Q/T1xcQEsyX11ZMiVvXnFtbipgNVRhOmFOO1RKYmciR1pkIiIiCisgICAgICAgICAgICAgICBiIiIiKl46amVDRS4lZlxcLCE1Z3RnaUVpOE5cXFVqUTVPZWtpcUJ1bS1YNjBuRj8pQG9fJXFQcSJhZGAiIiIKKyAgICAgICAgICAgICAgIGIiIiJyO0hUIiIiOiBieXRlcyhyYW5nZSgyNTUpKSwKKyAgICAgICAgICAgIGIiIiJAOkVfV0FTLFJnQmtoRiJEL085MkVINixCRmBxdFJIJFZiQzZVWEA0N24/M0Q5MiYmVDpKYW5kO2MiIiIKKyAgICAgICAgICAgICAgICBiIiIiSGF0PScvVS8wSlA9PTFjNzBNMyZyLUksOzxGTi5PWmAtM11vU1cvZytBKEhbUCIiIjoKKyAgICAgICAgICAgICAgICBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNCcKKyAgICAgICAgICAgICAgICBiJzU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30nLAorICAgICAgICAgICAgYidESnBZOkA6V25fREooUlMnOiBiJ25vIHBhZGRpbmcuLicsCisgICAgICAgICAgICBiJ0g9Xyw4K0NmPixFLG9OMkYob1Exeic6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidIPV8sOCtDZj4sRSxvTjJGKG9RMSEhISEnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYic2PnEhYUE3OU0oM1dLLVshISc6IGIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICBiJztmSC9UQUtZSyREL2FNVis8VmRMJzogYidTcGFjZSBjb21wcjogICAgJywKKyAgICAgICAgICAgIGIncnInOiBiJ1x4ZmYnLAorICAgICAgICAgICAgYidzOE4nOiBiJ1x4ZmYnKjIsCisgICAgICAgICAgICBiJ3M4VyonOiBiJ1x4ZmYnKjMsCisgICAgICAgICAgICBiJ3M4Vy0hJzogYidceGZmJyo0LAorICAgICAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YSwgYWRvYmU9RmFsc2UpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGRhdGEuZGVjb2RlKCJhc2NpaSIpLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYic8ficgKyBkYXRhICsgYid+PicsIGFkb2JlPVRydWUpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKCc8fiVzfj4nICUgZGF0YS5kZWNvZGUoImFzY2lpIiksIGFkb2JlPVRydWUpLAorICAgICAgICAgICAgICAgcmVzLCBkYXRhKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5eScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjgpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzxWZCcsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjcpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzxVJywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqNikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3krOScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjUpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYTg1ZGVjb2RlLCBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciKQorCisgICAgZGVmIHRlc3RfYjg1ZGVjb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYidjWHhMI2FDdmxTWipER2NhJVQnOiBiJ3d3dy5weXRob24ub3JnJywKKyAgICAgICAgICAgIGIiIiIwMDlDNjFPKX5NMm5oLWMzPUl3czVEXmorNmNyWDE3I1NLSDkzMzdYIiIiCisgICAgICAgICAgICAgICAgYiIiIkFSIV9uQnFiJiVDQENye0VHO2ZDRmZsU1NHJk1GaUk1fDJ5SlV1PT9LdFYhN0xgNm5OTkomYWQiIiIKKyAgICAgICAgICAgICAgICBiIiIiT2lmTnRQKkdBLVI4Pn0yU1hvK0lUd1B2WVV9MGlvV015ViZYbFpJfFk7QTZEYUIqXlRiYWklaiIiIgorICAgICAgICAgICAgICAgIGIiIiJjekpxemUwX2RAZlBzUjhnb1RFT2g+NDFlakUjPHVrZGN5O2wkRG0zbjM8WkpvU21NWnByTjlwIiIiCisgICAgICAgICAgICAgICAgYiIiInFAfHsoc0h2KX10Z1d1RXUoN2hVdzYoVWt4VmdIIXl1SDReemA/QDkjS3AkUCRqUXBmJSsxY3YiIiIKKyAgICAgICAgICAgICAgICBiIiIiKDl6UDwpWWFENCp4QjBLK30rO2E7Tmp4cTxtS2spPTtgWH4/Q3RMRkBiVThWXiE0YGxgMSQoIyIiIgorICAgICAgICAgICAgICAgIGIiIiJ7UWRwIiIiOiBieXRlcyhyYW5nZSgyNTUpKSwKKyAgICAgICAgICAgIGIiIiJWUGEhc1dvQm4rWD0tYjFaRWtPSGFkTEJYYiNgfW5kM3IlWUxxdFZKTUBVSVpPSDU1cFBmJEAoIiIiCisgICAgICAgICAgICAgICAgYiIiIlEmZCR9UzZFcUVGZmxTU0cmTUZpSTV7Q2VCUVJiakRrdiNDSXleb3NFK0FXN2R3bCIiIjoKKyAgICAgICAgICAgICAgICBiIiIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIiIgorICAgICAgICAgICAgICAgIGIiIiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iIiIsCisgICAgICAgICAgICBiJ1pmX3VQVlBzQCFaZjdubyc6IGInbm8gcGFkZGluZy4uJywKKyAgICAgICAgICAgIGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwMCc6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYiIiIkxUYDAkV01PaTdJc2dDdzAwIiIiOiBiIiIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIiIiwKKyAgICAgICAgICAgIGInUSpkRXBXZ3VnM1pFJGlyQVJyKGgnOiBiJ1NwYWNlIGNvbXByOiAgICAnLAorICAgICAgICAgICAgYid7eyc6IGInXHhmZicsCisgICAgICAgICAgICBiJ3xOaic6IGInXHhmZicqMiwKKyAgICAgICAgICAgIGInfE5zOSc6IGInXHhmZicqMywKKyAgICAgICAgICAgIGInfE5zQzAnOiBiJ1x4ZmYnKjQsCisgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGRhdGEpLCByZXMpCisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGRhdGEuZGVjb2RlKCJhc2NpaSIpKSwgcmVzKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI4NWRlY29kZSwgYidjWHhMI2FDdmxTWipER2NhJVQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciKQorCisgICAgZGVmIHRlc3RfYTg1X3BhZGRpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4IiwgcGFkPVRydWUpLCBiJ0dRN15EJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4IiwgcGFkPVRydWUpLCBiIkdeJzJnIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eCIsIHBhZD1UcnVlKSwgYidHXitINScpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eHh4IiwgcGFkPVRydWUpLCBiJ0deK0lYJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eHh4IiwgcGFkPVRydWUpLCBiJ0deK0lYR1E3XkQnKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHUTdeRCcpLCBiInhceDAwXHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIiR14nMmciKSwgYiJ4eFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0deK0g1JyksIGIieHh4XHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHXitJWCcpLCBiInh4eHgiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR14rSVhHUTdeRCcpLCBiInh4eHh4XHgwMFx4MDBceDAwIikKKworICAgIGRlZiB0ZXN0X2I4NV9wYWRkaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieCIsIHBhZD1UcnVlKSwgYidjbU16WicpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eCIsIHBhZD1UcnVlKSwgYidjejZIKycpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHgiLCBwYWQ9VHJ1ZSksIGInY3pBZEsnKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHh4eCIsIHBhZD1UcnVlKSwgYidjekFldCcpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHh4eCIsIHBhZD1UcnVlKSwgYidjekFldGNtTXpaJykKKworICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY21NelonKSwgYiJ4XHgwMFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6NkgrJyksIGIieHhceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjekFkSycpLCBiInh4eFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3pBZXQnKSwgYiJ4eHh4IikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6QWV0Y21NelonKSwgYiJ4eHh4eFx4MDBceDAwXHgwMCIpCisKKyAgICBkZWYgdGVzdF9hODVkZWNvZGVfZXJyb3JzKHNlbGYpOgorICAgICAgICBpbGxlZ2FsID0gKHNldChyYW5nZSgzMikpIHwgc2V0KHJhbmdlKDExOCwgMjU2KSkpIC0gc2V0KGInIFx0XG5cclx2JykKKyAgICAgICAgZm9yIGMgaW4gaWxsZWdhbDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYichISEhJyArIGJ5dGVzKFtjXSkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGInISEhIScgKyBieXRlcyhbY10pLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYic8fiEhISEnICsgYnl0ZXMoW2NdKSArIGInfj4nLCBhZG9iZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibWFsZm9ybWVkIiwgYWRvYmU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fnN0aWxsIG1hbGZvcm1lZCIsIGFkb2JlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWxzbyBtYWxmb3JtZWR+PiIsIGFkb2JlPVRydWUpCisKKyAgICAgICAgIyBXaXRoIGFkb2JlPUZhbHNlICh0aGUgZGVmYXVsdCksIEFkb2JlIGZyYW1pbmcgbWFya2VycyBhcmUgZGlzYWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+fj4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+fj4iLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiIjx+fj4iLCBhZG9iZT1UcnVlKSAgIyBzYW5pdHkgY2hlY2sKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY3giLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhYmNkZXkiLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhIGJcbmMiLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YiIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGIncycsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4JywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXJywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXLScsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4Vy0iJywgYWRvYmU9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9iODVkZWNvZGVfZXJyb3JzKHNlbGYpOgorICAgICAgICBpbGxlZ2FsID0gbGlzdChyYW5nZSgzMykpICsgXAorICAgICAgICAgICAgICAgICAgbGlzdChiJyJcJywuLzpbXFxdJykgKyBcCisgICAgICAgICAgICAgICAgICBsaXN0KHJhbmdlKDEyOCwgMjU2KSkKKyAgICAgICAgZm9yIGMgaW4gaWxsZWdhbDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5iODVkZWNvZGUoYicwMDAwJyArIGJ5dGVzKFtjXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE5zJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnNDJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnNDMScpCiAKICAgICBkZWYgdGVzdF9kZWNvZGVfbm9uYXNjaWlfc3RyKHNlbGYpOgogICAgICAgICBkZWNvZGVfZnVuY3MgPSAoYmFzZTY0LmI2NGRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjMyZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmIxNmRlY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iMTZkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZSkKICAgICAgICAgZm9yIGYgaW4gZGVjb2RlX2Z1bmNzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZiwgJ3dpdGggbm9uLWFzY2lpIFx4Y2InKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weSBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CmluZGV4IDdiOWJkMTkuLjU4MGE5NjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CkBAIC03LDcgKzcsNyBAQAogY19iaXNlY3QgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Jpc2VjdCcsIGZyZXNoPVsnX2Jpc2VjdCddKQogCiBjbGFzcyBSYW5nZShvYmplY3QpOgotICAgICIiIkEgdHJpdmlhbCByYW5nZSgpLWxpa2Ugb2JqZWN0IHdpdGhvdXQgYW55IGludGVnZXIgd2lkdGggbGltaXRhdGlvbnMuIiIiCisgICAgIiIiQSB0cml2aWFsIHJhbmdlKCktbGlrZSBvYmplY3QgdGhhdCBoYXMgYW4gaW5zZXJ0KCkgbWV0aG9kLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CiAgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgICAgICBzZWxmLnN0b3AgPSBzdG9wCkBAIC0xMjAsMTAgKzEyMCwxMCBAQAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xvKHNlbGYpOgogICAgICAgICAjIElzc3VlIDMzMDEKICAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKIAogICAgIGRlZiB0ZXN0X2xhcmdlX3JhbmdlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDEzNDk2CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weSBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CmluZGV4IDA0ZTNmNjEuLjE2Njc4NDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CkBAIC00MjkwLDkgKzQyOTAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgbWVtb3J5dmlldywgeCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEJ1ZmZlclByb3RvY29sKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCBjMzQyYTQzLi42ODQzMDY2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC00NjQsNiArNDY0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBib21bOjJdICsgYidhJykKIAorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBldmFsLCAiZm9vIiwge30sIFgoKSkKKwogICAgIGRlZiB0ZXN0X2dlbmVyYWxfZXZhbChzZWxmKToKICAgICAgICAgIyBUZXN0cyB0aGF0IGdlbmVyYWwgbWFwcGluZ3MgY2FuIGJlIHVzZWQgZm9yIHRoZSBsb2NhbHMgYXJndW1lbnQKIApAQCAtNTc5LDcgKzU4NCwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIGZyb3plbmRpY3RfZXJyb3IoImZyb3plbmRpY3QgaXMgcmVhZG9ubHkiKQogCiAgICAgICAgICMgcmVhZC1vbmx5IGJ1aWx0aW5zCi0gICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQorICAgICAgICBpZiBpc2luc3RhbmNlKF9fYnVpbHRpbnNfXywgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBmcm96ZW5fYnVpbHRpbnMgPSBmcm96ZW5kaWN0KF9fYnVpbHRpbnNfXy5fX2RpY3RfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQogICAgICAgICBjb2RlID0gY29tcGlsZSgiX19idWlsdGluc19fWydzdXBlcmdsb2JhbCddPTI7IHByaW50KHN1cGVyZ2xvYmFsKSIsICJ0ZXN0IiwgImV4ZWMiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmcm96ZW5kaWN0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLCBjb2RlLCB7J19fYnVpbHRpbnNfXyc6IGZyb3plbl9idWlsdGluc30pCkBAIC04MzksOCArODQ3LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIuMCwgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEuMCwgMiwgMyksIDMpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF4LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCAoKSkKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1heCwgQmFkU2VxKCkpCisKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1heChrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWF4KDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWF4KDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWF4KDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg1Nyw2ICs4NzYsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGtleT1uZWcpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIsIGtleT1uZWcpLCAxKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDIpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsIDIpLCBkZWZhdWx0PTMsIGtleT1uZWcpLCAxKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTg4Myw2ICs5MDksOSBAQAogCiAgICAgICAgIGZvciBzdG10IGluICgKICAgICAgICAgICAgICJtaW4oa2V5PWludCkiLCAgICAgICAgICAgICAgICAgIyBubyBhcmdzCisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSkiLAorICAgICAgICAgICAgIm1pbigxLCAyLCBkZWZhdWx0PU5vbmUpIiwgICAgICAjIHJlcXVpcmUgY29udGFpbmVyIGZvciBkZWZhdWx0CisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSwga2V5PWludCkiLAogICAgICAgICAgICAgIm1pbigxLCBrZXk9aW50KSIsICAgICAgICAgICAgICAjIHNpbmdsZSBhcmcgbm90IGl0ZXJhYmxlCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleXN0b25lPWludCkiLCAgICAgICMgd3Jvbmcga2V5d29yZAogICAgICAgICAgICAgIm1pbigxLCAyLCBrZXk9aW50LCBhYmM9aW50KSIsICAjIHR3byBtYW55IGtleXdvcmRzCkBAIC04OTksNiArOTI4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBrZXk9bmVnKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLCAyLCBrZXk9bmVnKSwgMikgICAgICMgdHdvIGVsZW1zCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9Tm9uZSksIE5vbmUpICAgICMgemVybyBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICAjIG9uZSBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9MSwga2V5PW5lZyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCAyKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMikKKwogICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwKSBmb3IgaSBpbiByYW5nZSgxMDApXQogICAgICAgICBrZXlzID0gZGljdCgoZWxlbSwgcmFuZG9tLnJhbmRyYW5nZSg1MCkpIGZvciBlbGVtIGluIGRhdGEpCiAgICAgICAgIGYgPSBrZXlzLl9fZ2V0aXRlbV9fCkBAIC05NDAsMjkgKzk3NiwyNSBAQAogICAgIGRlZiB3cml0ZV90ZXN0ZmlsZShzZWxmKToKICAgICAgICAgIyBOQiB0aGUgZmlyc3QgNCBsaW5lcyBhcmUgYWxzbyB1c2VkIHRvIHRlc3QgaW5wdXQsIGJlbG93CiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgdHJ5OgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKQogICAgICAgICAgICAgZnAud3JpdGUoJy5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnRGVhciBKb2huXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1hYWCcqMTAwKQogICAgICAgICAgICAgZnAud3JpdGUoJ1lZWScqMTAwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJzErMVxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJ0RlYXInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgxMDApLCAnIEpvaG5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMzAwKSwgJ1hYWCcqMTAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkKDEwMDApLCAnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3Rfb3Blbl9kZWZhdWx0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICBvbGRfZW52aXJvbiA9IGRpY3Qob3MuZW52aXJvbikKQEAgLTk3NywxNSArMTAwOSwxNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgICAgICBjdXJyZW50X2xvY2FsZV9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5lbmNvZGluZywgY3VycmVudF9sb2NhbGVfZW5jb2RpbmcpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCiAgICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShvbGRfZW52aXJvbikKIAorICAgIGRlZiB0ZXN0X29wZW5fbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBmaWxlb2JqID0gb3BlbihfX2ZpbGVfXykKKyAgICAgICAgd2l0aCBmaWxlb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUoZmlsZW9iai5maWxlbm8oKSkpCisKICAgICBkZWYgdGVzdF9vcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCcgJyksIDMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCgnQScpLCA2NSkKQEAgLTEwOTYsNyArMTEzMCw2IEBACiAgICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlc3RkaW4KICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CiAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocHR5LCAidGhlIHB0eSBhbmQgc2lnbmFsIG1vZHVsZXMgbXVzdCBiZSBhdmFpbGFibGUiKQogICAgIGRlZiBjaGVja19pbnB1dF90dHkoc2VsZiwgcHJvbXB0LCB0ZXJtaW5hbF9pbnB1dCwgc3RkaW9fZW5jb2Rpbmc9Tm9uZSk6CkBAIC0xNDc2LDE3ICsxNTA5LDExIEBACiAgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgIyBJc3N1ZSAjNzk5NDogb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzCiAgICAgICAgICMgIGRlcHJlY2F0ZWQKLSAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlX3dhcm5pbmcpOgotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQotICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlX3dhcm5pbmc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdbMF0ubWVzc2FnZSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlKToKKyAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgb2JqLCBmbXRfc3RyKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQogCiAgICAgICAgIGZtdF9zdHJzID0gWycnLCAncyddCiAKQEAgLTE1NjUsMjEgKzE1OTIsMTAgQEAKICAgICAgICAgZGF0YSA9ICdUaGUgcXVpY2sgQnJvd24gZm94IEp1bXBlZCBvdmVyIFRoZSBsYXp5IERvZycuc3BsaXQoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvcnRlZCwgZGF0YSwgTm9uZSwgbGFtYmRhIHgseTogMCkKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRlc3RfY2xhc3NlcyA9IChCdWlsdGluVGVzdCwgVGVzdFNvcnRlZCkKLQotICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotCi0gICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKLQorZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NUZXN0U3VpdGUKKyAgICB0ZXN0cy5hZGRUZXN0KERvY1Rlc3RTdWl0ZShidWlsdGlucykpCisgICAgcmV0dXJuIHRlc3RzCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CmluZGV4IDM1MjBlODMuLjg0N2M3YTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtMjg4LDggKzI4OCwyMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4obHN0KSwgYiJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4odHVwbGUobHN0KSksIGIiYWJjIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKGl0ZXIobHN0KSksIGIiYWJjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIi4iKS5qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi5jZCIpCi0gICAgICAgICMgWFhYIG1vcmUuLi4KKyAgICAgICAgZG90X2pvaW4gPSBzZWxmLnR5cGUydGVzdChiIi46Iikuam9pbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgbWVtb3J5dmlldyhiImNkIildKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBieXRlYXJyYXkoYiJjZCIpXSksIGIiYWIuOmNkIikKKyAgICAgICAgIyBTdHJlc3MgaXQgd2l0aCBtYW55IGl0ZW1zCisgICAgICAgIHNlcSA9IFtiImFiYyJdICogMTAwMAorICAgICAgICBleHBlY3RlZCA9IGIiYWJjIiArIGIiLjphYmMiICogOTk5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oc2VxKSwgZXhwZWN0ZWQpCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgd2hlbiBzb21lIGl0ZW0gaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgIyBzZXF1ZW5jZSBoYXMgdGhlIHdyb25nIHR5cGUuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCAiY2QiLCBiImVmIl0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgImNkIiwgYiJlZiJdKQogCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKQEAgLTc1OSw3ICs3NzMsNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgpAQCAtODk1LDYgKzkwOSwxNSBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBiWzM6NF0gPSBlbGVtCiAKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9leHRlbmQoc2VsZik6CisgICAgICAgICMgRXhlcmNpc2UgdGhlIHJlc2l6aW5nIGxvZ2ljIChzZWUgaXNzdWUgIzE5MDg3KQorICAgICAgICBiID0gYnl0ZWFycmF5KHJhbmdlKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMDApKSkKKyAgICAgICAgZGVsIGJbOjEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAsIDEwMCkpKQorICAgICAgICBiLmV4dGVuZChyYW5nZSgxMDAsIDExMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMCwgMTEwKSkpCisKICAgICBkZWYgdGVzdF9leHRlbmRlZF9zZXRfZGVsX3NsaWNlKHNlbGYpOgogICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAzMDAsIDE8PDMzMywgLTEsIC0yLCAtMzEsIC0zMDApCiAgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgpAQCAtMTI3NCw2ICsxMjk3LDExIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpcyBub3QgbmV3dmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIrJyByZXR1cm5lZCB2YWwgb24gYSBtdXRhYmxlIG9iamVjdCcpCisgICAgICAgIHNlcCA9IHNlbGYubWFyc2hhbChiJycpCisgICAgICAgIG5ld3ZhbCA9IHNlcC5qb2luKFt2YWxdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHZhbCwgbmV3dmFsKQorCiAKIGNsYXNzIEZpeGVkU3RyaW5nVGVzdCh0ZXN0LnN0cmluZ190ZXN0cy5CYXNlVGVzdCk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5IGIvTGliL3Rlc3QvdGVzdF9iejIucHkKaW5kZXggNjc2NGU1OS4uOGQ5M2UyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iejIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iejIucHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24zCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGJpZ21lbXRlc3QsIF80RworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGJpZ21lbXRlc3QsIF80RwogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KQEAgLTksNiArOSw3IEBACiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluawogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwpAQCAtMTksMTAgKzIwLDEwIEBACiBiejIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2J6MicpCiBmcm9tIGJ6MiBpbXBvcnQgQloyRmlsZSwgQloyQ29tcHJlc3NvciwgQloyRGVjb21wcmVzc29yCiAKLWhhc19jbWRsaW5lX2J1bnppcDIgPSBzeXMucGxhdGZvcm0gbm90IGluICgid2luMzIiLCAib3MyZW14IikKIAogY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICJCYXNlIGZvciBvdGhlciB0ZXN0Y2FzZXMuIgorCiAgICAgVEVYVF9MSU5FUyA9IFsKICAgICAgICAgYidyb290Ong6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoXG4nLAogICAgICAgICBiJ2Jpbjp4OjE6MTpiaW46L2JpbjpcbicsCkBAIC01MSwxMyArNTIsMTcgQEAKICAgICBFTVBUWV9EQVRBID0gYidCWmg5XHgxN3JFOFBceDkwXHgwMFx4MDBceDAwXHgwMCcKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IFRFU1RGTgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5maWxlbmFtZSk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5maWxlbmFtZSkKIAotICAgIGlmIGhhc19jbWRsaW5lX2J1bnppcDI6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCisgICAgZWxzZToKICAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6CiAgICAgICAgICAgICBwb3AgPSBzdWJwcm9jZXNzLlBvcGVuKCJidW56aXAyIiwgc2hlbGw9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLApAQCAtNzEsMzEgKzc2LDIxIEBACiAgICAgICAgICAgICAgICAgcmV0ID0gYnoyLmRlY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXQKIAotICAgIGVsc2U6Ci0gICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCi0gICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCiAKIGNsYXNzIEJaMkZpbGVUZXN0KEJhc2VUZXN0KToKLSAgICAiVGVzdCBCWjJGaWxlIHR5cGUgbWlzY2VsbGFuZW91cyBtZXRob2RzLiIKKyAgICAiVGVzdCB0aGUgQloyRmlsZSBjbGFzcy4iCiAKICAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgc3RyZWFtcz0xKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuREFUQSAqIHN0cmVhbXMpCiAKICAgICBkZWYgdGVzdEJhZEFyZ3Moc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoMTIzLjQ1NikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJ6IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJyeCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicmJ0IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQloyRmlsZSwgMTIzLjQ1NikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJ6IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJyeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAicmJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCiAKICAgICBkZWYgdGVzdFJlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQpAQCAtMjE2LDkgKzIxMSw4IEBACiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQogICAgICAgICBiejJmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5fX25leHRfXykKLSAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgLl9fbmV4dF9fIGNhbGwgZmFpbGVkIHRvCi0gICAgICAgICMgcmVsZWFzZSB0aGUgbG9jay4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgYnoyZikKKyAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgY2FsbCBmYWlsZWQgdG8gcmVsZWFzZSB0aGUgbG9jay4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5yZWFkbGluZXMpCiAKICAgICBkZWYgdGVzdFdyaXRlKHNlbGYpOgpAQCAtMjYyLDggKzI1Niw4IEBACiAgICAgICAgICAgICBiejJmLndyaXRlKGIiYWJjIikKIAogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInIiKSBhcyBiejJmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnoyZi53cml0ZSwgYiJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnoyZi53cml0ZSwgYiJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQogCiAgICAgZGVmIHRlc3RBcHBlbmQoc2VsZik6CiAgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CkBAIC0zODEsNyArMzc1LDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnNlZWthYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6MmYuc2Vla2FibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQwNyw3ICs0MDEsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGFibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYnoyZi5yZWFkYWJsZSgpKQogICAgICAgICBmaW5hbGx5OgpAQCAtNDI0LDcgKzQxOCw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi53cml0YWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ6MmYud3JpdGFibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQzOCw3ICs0MzIsNyBAQAogICAgICAgICAgICAgZGVsIG8KIAogICAgIGRlZiB0ZXN0T3Blbk5vbmV4aXN0ZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIEJaMkZpbGUsICIvbm9uL2V4aXN0ZW50IikKIAogICAgIGRlZiB0ZXN0UmVhZGxpbmVzTm9OZXdsaW5lKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMTkxMDQzOiByZWFkbGluZXMoKSBmYWlscyBvbiBhIGZpbGUgY29udGFpbmluZyBubyBuZXdsaW5lLgpAQCAtNDc4LDcgKzQ3Miw3IEBACiAgICAgICAgICMgSXNzdWUgIzcyMDU6IFVzaW5nIGEgQloyRmlsZSBmcm9tIHNldmVyYWwgdGhyZWFkcyBzaG91bGRuJ3QgZGVhZGxvY2suCiAgICAgICAgIGRhdGEgPSBiIjEiICogMioqMjAKICAgICAgICAgbnRocmVhZHMgPSAxMAotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgZGVmIGNvbXAoKToKICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQpAQCAtNDg5LDI4ICs0ODMsMjcgQEAKICAgICAgICAgICAgICAgICB0LmpvaW4oKQogCiAgICAgZGVmIHRlc3RXaXRob3V0VGhyZWFkaW5nKHNlbGYpOgotICAgICAgICBiejIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoImJ6MiIsIGJsb2NrZWQ9KCJ0aHJlYWRpbmciLCkpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiYWJjIikKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCiAKICAgICBkZWYgdGVzdE1peGVkSXRlcmF0aW9uQW5kUmVhZHMoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBsaW5lbGVuID0gbGVuKHNlbGYuVEVYVF9MSU5FU1swXSkKICAgICAgICAgaGFsZmxlbiA9IGxpbmVsZW4gLy8gMgotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkKGhhbGZsZW4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1swXVtoYWxmbGVuOl0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbbGluZWxlbjpdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1sxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZSgpLCBzZWxmLlRFWFRfTElORVNbMl0pCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CiAgICAgICAgICAgICBiejJmLnJlYWRsaW5lcygpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgotICAgICAgICAgICAgICAgIG5leHQoYnoyZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGJ6MmYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmVzKCksIFtdKQogCiAgICAgZGVmIHRlc3RNdWx0aVN0cmVhbU9yZGVyaW5nKHNlbGYpOgpAQCAtNTc4LDYgKzU3MSwyMCBAQAogICAgICAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFs1MDAtMTUwOl0pCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHRoZSBlb3NfbWFnaWMgZmllbGQgKDYgYnl0ZXMpIGFuZCBDUkMgKDQgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBzZWxmLkRBVEFbOi0xMF0KKyAgICAgICAgd2l0aCBCWjJGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oc2VsZi5URVhUKSksIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSA0LWJ5dGUgZmlsZSBoZWFkZXIsIGFuZCBibG9jayBoZWFkZXIgb2YgYXQgbGVhc3QgMTQ2IGJpdHMuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIyKToKKyAgICAgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKKwogY2xhc3MgQloyQ29tcHJlc3NvclRlc3QoQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0Q29tcHJlc3Moc2VsZik6CiAgICAgICAgIGJ6MmMgPSBCWjJDb21wcmVzc29yKCkKQEAgLTcxMyw5NyArNzIwLDEyMiBAQAogCiAKIGNsYXNzIE9wZW5UZXN0KEJhc2VUZXN0KToKKyAgICAiVGVzdCB0aGUgb3BlbiBmdW5jdGlvbi4iCisKKyAgICBkZWYgb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gYnoyLm9wZW4oKmFyZ3MsICoqa3dhcmdzKQorCiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3YiIsICJ4YiIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieGIiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgidyIsICJ4Iik6CisgICAgICAgICAgICBpZiBtb2RlID09ICJ4IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCiAKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3dCIsICJ4dCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieHQiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYXQiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJ0IikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyYW1zKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW52YWxpZCBwYXJhbWV0ZXIgY29tYmluYXRpb25zLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgIndidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgbmV3bGluZT0iXG4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ3YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3Blbiwgc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3Qgbm9uLWRlZmF1bHQgZW5jb2RpbmcuCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHRleHRfbmF0aXZlX2VvbCA9IHRleHQucmVwbGFjZSgiXG4iLCBvcy5saW5lc2VwKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQorICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoInV0Zi0xNi1sZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcl9oYW5kbGVyKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBub24tZGVmYXVsdCBlbmNvZGluZyBlcnJvciBoYW5kbGVyLgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiZm9vXHhmZmJhciIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKSBcCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAogICAgICAgICAgICAgICAgIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiZm9vYmFyIikKIAogICAgIGRlZiB0ZXN0X25ld2xpbmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB3aXRoIGV4cGxpY2l0IG5ld2xpbmUgKHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgZGlzYWJsZWQpLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgbmV3bGluZT0iXG4iKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CmluZGV4IDkwMTNhN2IuLjIyYzhlYjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBNSVNTSU5HX0NfRE9DU1RSSU5HUwogdHJ5OgogICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC00Myw3ICs0NCw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0X25vX0ZhdGFsRXJyb3JfaW5maW5pdGVfbG9vcChzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBfdGVzdGNhcGk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfdGVzdGNhcGkuY3Jhc2hfbm9fY3VycmVudF90aHJlYWQoKSddLApAQCAtMTA5LDYgKzExMCwzNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBaKCksW2InMSddLDMsWzEsIDJdLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9kb2NzdHJpbmdfc2lnbmF0dXJlX3BhcnNpbmcoc2VsZik6CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkubm9fZG9jc3RyaW5nLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLm5vX2RvY3N0cmluZy5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fZG9jX18sICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfZW1wdHkuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUuX19kb2NfXywKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgbm8gc2lnbmF0dXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUgKGJvbylcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUuIgorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sICIoc2lnKSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcy5fX2RvY19fLAorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSBhbmQgc29tZSBleHRyYSBuZXdsaW5lcy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzLl9fdGV4dF9zaWduYXR1cmVfXywKKyAgICAgICAgICAgICIocGFyYW1ldGVyKSIpCisKKwogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFRlc3RQZW5kaW5nQ2FsbHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xOTIsNiArMjI0LDkgQEAKICAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGwsIG4pCiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKIAorCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCiAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKQEAgLTIwMiw0NyArMjM3LDEwOSBAQAogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKGlkKGJ1aWx0aW5zKSwgZikKICAgICAgICAgICAgICIiIi5mb3JtYXQodykKICAgICAgICAgd2l0aCBvcGVuKHIsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICByZXQgPSBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKHN5cy5tb2R1bGVzKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKGJ1aWx0aW5zKSkKIAorCiAjIEJ1ZyAjNjAxMgogY2xhc3MgVGVzdDYwMTIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5hcmdwYXJzaW5nKCJIZWxsbyIsICJXb3JsZCIpLCAxKQogCiAKLWNsYXNzIEVtYmVkZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAidGVzdCBkb2Vzbid0IHdvcmsgdW5kZXIgV2luZG93cyIpCi0gICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKLSAgICAgICAgIyBYWFggb25seSB0ZXN0ZWQgdW5kZXIgVW5peCBjaGVja291dHMKK2NsYXNzIEVtYmVkZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSkKLSAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgZXhlbmFtZSA9ICJfdGVzdGVtYmVkIgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICAgICBleHQgPSAoIl9kIiBpZiAiX2QiIGluIHN5cy5leGVjdXRhYmxlIGVsc2UgIiIpICsgIi5leGUiCisgICAgICAgICAgICBleGVuYW1lICs9IGV4dAorICAgICAgICAgICAgZXhlcGF0aCA9IG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIikKKyAgICAgICAgc2VsZi50ZXN0X2V4ZSA9IGV4ZSA9IG9zLnBhdGguam9pbihleGVwYXRoLCBleGVuYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXhlKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIGRvZXNuJ3QgZXhpc3QiICUgZXhlKQogICAgICAgICAjIFRoaXMgaXMgbmVlZGVkIG90aGVyd2lzZSB3ZSBnZXQgYSBmYXRhbCBlcnJvcjoKICAgICAgICAgIyAiUHlfSW5pdGlhbGl6ZTogVW5hYmxlIHRvIGdldCB0aGUgbG9jYWxlIGVuY29kaW5nCiAgICAgICAgICMgTG9va3VwRXJyb3I6IG5vIGNvZGVjIHNlYXJjaCBmdW5jdGlvbnMgcmVnaXN0ZXJlZDogY2FuJ3QgZmluZCBlbmNvZGluZyIKKyAgICAgICAgc2VsZi5vbGRjd2QgPSBvcy5nZXRjd2QoKQogICAgICAgICBvcy5jaGRpcihiYXNlcGF0aCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRjd2QpCisKKyAgICBkZWYgcnVuX2VtYmVkZGVkX2ludGVycHJldGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUnVucyBhIHRlc3QgaW4gdGhlIGVtYmVkZGVkIGludGVycHJldGVyIiIiCisgICAgICAgIGNtZCA9IFtzZWxmLnRlc3RfZXhlXQorICAgICAgICBjbWQuZXh0ZW5kKGFyZ3MpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJldHVybmNvZGUgJWQsIHN0ZGVyciBpcyAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCisgICAgICAgIHJldHVybiBvdXQuZGVjb2RlKCJsYXRpbjEiKSwgZXJyLmRlY29kZSgibGF0aW4xIikKKworICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBqdXN0IGEgImRvbid0IGNyYXNoIiB0ZXN0CisgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoKQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBwcmludChlcnIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZGVmYXVsdF9waXBlX2VuY29kaW5nKCk6CisgICAgICAgIHJwLCB3cCA9IG9zLnBpcGUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIiwgIl90ZXN0ZW1iZWQiKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgZG9lc24ndCBleGlzdCIgJSBleGUpCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbZXhlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmV0dXJuY29kZSAlZCwgc3RkZXJyIGlzICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgICAgIHByaW50KG91dC5kZWNvZGUoJ2xhdGluMScpKQotICAgICAgICAgICAgICAgIHByaW50KGVyci5kZWNvZGUoJ2xhdGluMScpKQorICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4od3AsICd3JykgYXMgdzoKKyAgICAgICAgICAgICAgICBkZWZhdWx0X3BpcGVfZW5jb2RpbmcgPSB3LmVuY29kaW5nCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRjd2QpCisgICAgICAgICAgICBvcy5jbG9zZShycCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRfcGlwZV9lbmNvZGluZworCisgICAgZGVmIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrcyBmb3JjZWQgY29uZmlndXJhdGlvbiBvZiBlbWJlZGRlZCBpbnRlcnByZXRlciBJTyBzdHJlYW1zCisgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoImZvcmNlZF9pb19lbmNvZGluZyIpCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgIHByaW50KGVycikKKyAgICAgICAgZXhwZWN0ZWRfc3RkaW5fZW5jb2RpbmcgPSBzeXMuX19zdGRpbl9fLmVuY29kaW5nCisgICAgICAgIGV4cGVjdGVkX3BpcGVfZW5jb2RpbmcgPSBzZWxmLl9nZXRfZGVmYXVsdF9waXBlX2VuY29kaW5nKCkKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gb3MubGluZXNlcC5qb2luKFsKKyAgICAgICAgIi0tLSBVc2UgZGVmYXVsdHMgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0IiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdCIsCisgICAgICAgICJzdGRpbjogezB9OnN0cmljdCIsCisgICAgICAgICJzdGRvdXQ6IHsxfTpzdHJpY3QiLAorICAgICAgICAic3RkZXJyOiB7MX06YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVycm9ycyBvbmx5IC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdCIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRpbjogezB9OnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRvdXQ6IHsxfTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkZXJyOiB7MX06YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVuY29kaW5nIG9ubHkgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBsYXRpbi0xIiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdCIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTpzdHJpY3QiLAorICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN0cmljdCIsCisgICAgICAgICJzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVuY29kaW5nIGFuZCBlcnJvcnMgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBsYXRpbi0xIiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogc3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGluOiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRvdXQ6IGxhdGluLTE6c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGVycjogbGF0aW4tMTpiYWNrc2xhc2hyZXBsYWNlIl0pLmZvcm1hdChleHBlY3RlZF9zdGRpbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9waXBlX2VuY29kaW5nKQorICAgICAgICAjIFRoaXMgaXMgdXNlZnVsIGlmIHdlIGV2ZXIgdHJpcCBvdmVyIG9kZCBwbGF0Zm9ybSBiZWhhdmlvdXIKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBleHBlY3RlZF9vdXRwdXQpCiAKIGNsYXNzIFNraXBpdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTM1NCw4ICs0NTEsOSBAQAogICAgIGRlZiB0ZXN0X190ZXN0Y2FwaShzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gZGlyKF90ZXN0Y2FwaSk6CiAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3RfJyk6Ci0gICAgICAgICAgICAgICAgdGVzdCA9IGdldGF0dHIoX3Rlc3RjYXBpLCBuYW1lKQotICAgICAgICAgICAgICAgIHRlc3QoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJpbnRlcm5hbCIsIG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3QgPSBnZXRhdHRyKF90ZXN0Y2FwaSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdGVzdCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQppbmRleCBhODlkN2U0Li4zMjdjMTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKQEAgLTQsNiArNCw3IEBACiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQsIHVuaXR0ZXN0CiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKQEAgLTQxLDggKzQyLDEwIEBACiAKICAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgogICAgICAgICB2ZXJzaW9uID0gKCdQeXRob24gJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0pLmVuY29kZSgiYXNjaWkiKQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctVicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgZm9yIHN3aXRjaCBpbiAnLVYnLCAnLS12ZXJzaW9uJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc3dpdGNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKIAogICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CiAgICAgICAgICMgLXYgY2F1c2VzIGltcG9ydHMgdG8gd3JpdGUgdG8gc3RkZXJyLiAgSWYgdGhlIHdyaXRlIHRvCkBAIC01NCwxNCArNTcsNDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ3N0YWNrIG92ZXJmbG93JywgZXJyKQogCiAgICAgZGVmIHRlc3RfeG9wdGlvbnMoc2VsZik6Ci0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgZGVmIGdldF94b3B0aW9ucygqYXJncyk6CisgICAgICAgICAgICAjIHVzZSBzdWJwcm9jZXNzIG1vZHVsZSBkaXJlY3RseSBiZWNhdXNlIHRlc3Quc2NyaXB0X2hlbHBlciBhZGRzCisgICAgICAgICAgICAjICItWCBmYXVsdGhhbmRsZXIiIHRvIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctRScpICsgYXJncworICAgICAgICAgICAgYXJncyArPSAoJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKKyAgICAgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorICAgICAgICAgICAgcmV0dXJuIG9wdHMKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7fSkKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygKLSAgICAgICAgICAgICctWGEnLCAnLVhiPWMsZD1lJywgJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCctWGEnLCAnLVhiPWMsZD1lJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7J2EnOiBUcnVlLCAnYic6ICdjLGQ9ZSd9KQogCisgICAgZGVmIHRlc3Rfc2hvd3JlZmNvdW50KHNlbGYpOgorICAgICAgICBkZWYgcnVuX3B5dGhvbigqYXJncyk6CisgICAgICAgICAgICAjIHRoaXMgaXMgc2ltaWxhciB0byBhc3NlcnRfcHl0aG9uX29rIGJ1dCBkb2Vzbid0IHN0cmlwCisgICAgICAgICAgICAjIHRoZSByZWZjb3VudCBmcm9tIHN0ZGVyci4gIEl0IGNhbiBiZSByZXBsYWNlZCBvbmNlCisgICAgICAgICAgICAjIGFzc2VydF9weXRob25fb2sgc3RvcHMgZG9pbmcgdGhhdC4KKyAgICAgICAgICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZV0KKyAgICAgICAgICAgIGNtZC5leHRlbmQoYXJncykKKyAgICAgICAgICAgIFBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAgIHJjID0gcC5yZXR1cm5jb2RlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICAgICAgcmV0dXJuIHJjLCBvdXQsIGVycgorICAgICAgICBjb2RlID0gJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJworICAgICAgICAjIG5vcm1hbGx5IHRoZSByZWZjb3VudCBpcyBoaWRkZW4KKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYid7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisgICAgICAgICMgIi1YIHNob3dyZWZjb3VudCIgc2hvd3MgdGhlIHJlZmNvdW50LCBidXQgb25seSBpbiBkZWJ1ZyBidWlsZHMKKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLVgnLCAnc2hvd3JlZmNvdW50JywgJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGIieydzaG93cmVmY291bnQnOiBUcnVlfSIpCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOiAgIyBkZWJ1ZyBidWlsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGJyJ15cW1xkKyByZWZzLCBcZCsgYmxvY2tzXF0nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKwogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBleHBlY3RlZCBvcGVyYXRpb24gb2YgdGhlICctbScgc3dpdGNoCiAgICAgICAgICMgU3dpdGNoIG5lZWRzIGFuIGFyZ3VtZW50CkBAIC03MCw5ICsxMDgsOSBAQAogICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ2Zub3JkNDM1MjB4eXonKQogICAgICAgICAjIENoZWNrIHRoZSBydW5weSBtb2R1bGUgYWxzbyBnaXZlcyBhbiBlcnJvciBmb3IKICAgICAgICAgIyBhIG5vbmV4aXN0ZW50IG1vZHVsZQotICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3J1bnB5JywgJ2Zub3JkNDM1MjB4eXonKSwKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JykKICAgICAgICAgIyBBbGwgZ29vZCBpZiBtb2R1bGUgaXMgbG9jYXRlZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseQotICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpLAorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCiAKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2J1ZzE3NjQ0MDcoc2VsZik6CiAgICAgICAgICMgLW0gYW5kIC1pIG5lZWQgdG8gcGxheSB3ZWxsIHRvZ2V0aGVyCkBAIC0yMTMsNiArMjUxLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDEuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDIuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAKKyAgICBkZWYgdGVzdF9lbXB0eV9QWVRIT05QQVRIX2lzc3VlMTYzMDkoc2VsZik6CisgICAgICAgICMgT24gUG9zaXgsIGl0IGlzIGRvY3VtZW50ZWQgdGhhdCBzZXR0aW5nIFBBVEggdG8gdGhlCisgICAgICAgICMgZW1wdHkgc3RyaW5nIGlzIGVxdWl2YWxlbnQgdG8gbm90IHNldHRpbmcgUEFUSCBhdCBhbGwsCisgICAgICAgICMgd2hpY2ggaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIHRoYXQgaW4gYSBzdHJpbmcgbGlrZQorICAgICAgICAjICIvYmluOjovdXNyL2JpbiIgdGhlIGVtcHR5IHN0cmluZyBpbiB0aGUgbWlkZGxlIGdldHMKKyAgICAgICAgIyBpbnRlcnByZXRlZCBhcyAnLicKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBwYXRoID0gIjoiLmpvaW4oc3lzLnBhdGgpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5lbmNvZGUoImFzY2lpIiwgImJhY2tzbGFzaHJlcGxhY2UiKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUocGF0aCkiIiIKKyAgICAgICAgcmMxLCBvdXQxLCBlcnIxID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05QQVRIPSIiKQorICAgICAgICByYzIsIG91dDIsIGVycjIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIF9faXNvbGF0ZWQ9RmFsc2UpCisgICAgICAgICMgcmVnYXJkaW5nIHRvIFBvc2l4IHNwZWNpZmljYXRpb24sIG91dHB1dHMgc2hvdWxkIGJlIGVxdWFsCisgICAgICAgICMgZm9yIGVtcHR5IGFuZCB1bnNldCBQWVRIT05QQVRICisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0MSwgb3V0MikKKwogICAgIGRlZiB0ZXN0X2Rpc3BsYXlob29rX3VuZW5jb2RhYmxlKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCdhc2NpaScsICdsYXRpbi0xJywgJ3V0Zi04Jyk6CiAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQpAQCAtMjkwLDcgKzM0NSw3IEBACiAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIuZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIE9TRXJyb3I6IC4qIGlnbm9yZWQnKQorICAgICAgICAgICAgICAgICAgICAgICAgICdFeGNlcHRpb24gaWdub3JlZCBpbi4qXG5PU0Vycm9yOiAuKicpCiAKICAgICBkZWYgdGVzdF9jbG9zZWRfc3Rkb3V0KHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMzQ0NDogaWYgc3Rkb3V0IGhhcyBiZWVuIGV4cGxpY2l0bHkgY2xvc2VkLCB3ZSBzaG91bGQKQEAgLTM4NSw2ICs0NDAsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKIAogCisgICAgZGVmIHRlc3RfaXNvbGF0ZWRtb2RlKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctSScpCisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1JRXMnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctSScsICctYycsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IGZsYWdzIGFzIGY7ICcKKyAgICAgICAgICAgICdwcmludChmLm5vX3VzZXJfc2l0ZSwgZi5pZ25vcmVfZW52aXJvbm1lbnQsIGYuaXNvbGF0ZWQpJywKKyAgICAgICAgICAgICMgZHVtbXl2YXIgdG8gcHJldmVudCBleHRyYW5vdXMgLUUKKyAgICAgICAgICAgIGR1bW15dmFyPSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJzEgMSAxJykKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICBmYWtlID0gb3MucGF0aC5qb2luKHRtcGRpciwgInV1aWQucHkiKQorICAgICAgICAgICAgbWFpbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICJtYWluLnB5IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmYWtlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgicmFpc2UgUnVudGltZUVycm9yKCdpc29sYXRlZCBtb2RlIHRlc3QnKVxuIikKKyAgICAgICAgICAgIHdpdGggb3BlbihtYWluLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiaW1wb3J0IHV1aWRcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgicHJpbnQoJ29rJylcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCBtYWluXSwgY3dkPXRtcGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwpCisgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc3lzLmV4ZWN1dGFibGUsICItSSIsIG1haW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXRtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGIib2siKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKICAgICB0ZXN0LnN1cHBvcnQucmVhcF9jaGlsZHJlbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CmluZGV4IGI0MjY5YjkuLmY4MDRkODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgaWYgbm90IF9fZGVidWdfXzoKICAgICAgICAgICAgIGNtZF9saW5lX3N3aXRjaGVzICs9ICgnLScgKyAnTycgKiBzeXMuZmxhZ3Mub3B0aW1pemUsKQogICAgICAgICBydW5fYXJncyA9IGNtZF9saW5lX3N3aXRjaGVzICsgKHNjcmlwdF9uYW1lLCkgKyB0dXBsZShleGFtcGxlX2FyZ3MpCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCpydW5fYXJncywgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgc2VsZi5fY2hlY2tfb3V0cHV0KHNjcmlwdF9uYW1lLCByYywgb3V0ICsgZXJyLCBleHBlY3RlZF9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJndjAsIGV4cGVjdGVkX3BhdGgwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGFja2FnZSwgZXhwZWN0ZWRfbG9hZGVyKQpAQCAtMjk0LDcgKzI5NCw3IEBACiAgICAgICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQogICAgICAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIsICJpbXBvcnQgc3lzOyBwcmludCgnaW5pdF9hcmd2MD09JXInICUgc3lzLmFyZ3ZbMF0pIikKICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdzY3JpcHQnKQotICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ3Rlc3RfcGtnLnNjcmlwdCcsICpleGFtcGxlX2FyZ3MpCisgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGVzdF9wa2cuc2NyaXB0JywgKmV4YW1wbGVfYXJncywgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQob3V0KQogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gImluaXRfYXJndjA9PSVyIiAlICctbScKQEAgLTMxMSw3ICszMTEsOCBAQAogICAgICAgICAgICAgICAgIHdpdGggb3BlbigiLWMiLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoImRhdGEiKQogICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoInN5cy5wYXRoWzBdPT0lciIgJSBzeXMucGF0aFswXSknKQorICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHByaW50KCJzeXMucGF0aFswXT09JXIiICUgc3lzLnBhdGhbMF0pJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQob3V0KQogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJzeXMucGF0aFswXT09JXIiICUgJycKQEAgLTMyNSw3ICszMjYsOCBAQAogICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QocGF0aD1zY3JpcHRfZGlyKToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oIi1tIiwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKLSAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnb3RoZXInLCAqZXhhbXBsZV9hcmdzKQorICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdvdGhlcicsICpleGFtcGxlX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfb3V0cHV0KHNjcmlwdF9uYW1lLCByYywgb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsICcnLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKaW5kZXggYWRlZjE3MC4uNWZkMjFkYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CkBAIC02NCw2ICs2NCwyMCBAQAogICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaG9vay5jYWxsZWQpCiAKKyAgICBkZWYgdGVzdF9iYW5uZXIoc2VsZik6CisgICAgICAgICMgd2l0aCBiYW5uZXIKKyAgICAgICAgc2VsZi5pbmZ1bmMuc2lkZV9lZmZlY3QgPSBFT0ZFcnJvcignRmluaXNoZWQnKQorICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoYmFubmVyPSdGb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHMpLCAyKQorICAgICAgICBiYW5uZXJfY2FsbCA9IHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxsc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhbm5lcl9jYWxsLCBbJ3dyaXRlJywgKCdGb29cbicsKSwge31dKQorCisgICAgICAgICMgbm8gYmFubmVyCisgICAgICAgIHNlbGYuc3RkZXJyLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IEVPRkVycm9yKCdGaW5pc2hlZCcpCisgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdChiYW5uZXI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxscyksIDEpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RJbnRlcmFjdGl2ZUNvbnNvbGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQppbmRleCBmZDg4NTA1Li44NDgwNGJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKQEAgLTg3NSw4ICs4NzUsNiBAQAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgZGF0YS5kZWNvZGUoZW5jb2RpbmcsICJ0ZXN0LnJlcGxhY2luZyIpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KENvZGVjQ2FsbGJhY2tUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CmluZGV4IDM1MTcwNTcuLmY2ODIzODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CkBAIC0xLDEwICsxLDEyIEBACiBpbXBvcnQgX3Rlc3RjYXBpCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGlvCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IGVuY29kaW5ncwogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIApAQCAtMjk5LDggKzMwMSw0NiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgIiIpCiAKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlX3JlcGxhY2UgPSAiXHVmZmZkIgorCisgICAgZGVmIHRlc3RfbG9uZV9zdXJyb2dhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJcdWQ4MDAiLmVuY29kZSwgc2VsZi5lbmNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiYmFja3NsYXNocmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbXFx1ZGM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWyYjNTY0NDg7XSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbP10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKworICAgICAgICBib20gPSAiIi5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgZm9yIGJlZm9yZSwgYWZ0ZXIgaW4gWygiXFUwMDAxMGZmZiIsICJBIiksICgiWyIsICJdIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkEiLCAiXFUwMDAxMGZmZiIpXToKKyAgICAgICAgICAgIGJlZm9yZV9zZXF1ZW5jZSA9IGJlZm9yZS5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgYWZ0ZXJfc2VxdWVuY2UgPSBhZnRlci5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgdGVzdF9zdHJpbmcgPSBiZWZvcmUgKyAiXHVEQzgwIiArIGFmdGVyCisgICAgICAgICAgICB0ZXN0X3NlcXVlbmNlID0gKGJvbSArIGJlZm9yZV9zZXF1ZW5jZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZSArIGFmdGVyX3NlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCB0ZXN0X3NlcXVlbmNlLmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc3RyaW5nLmVuY29kZShzZWxmLmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zZXF1ZW5jZS5kZWNvZGUoc2VsZi5lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICsgYWZ0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSArIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZV9yZXBsYWNlICsgYWZ0ZXIpCisKIGNsYXNzIFVURjMyVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMiIKKyAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkY1x4MDBceDAwIgorICAgIGVsc2U6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4MDBceDAwXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSAoYidceGZmXHhmZVx4MDBceDAwJwogICAgICAgICAgICAgICBiJ3NceDAwXHgwMFx4MDBwXHgwMFx4MDBceDAwYVx4MDBceDAwXHgwMG1ceDAwXHgwMFx4MDAnCkBAIC0zOTIsNiArNDMyLDcgQEAKIAogY2xhc3MgVVRGMzJMRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGNceDAwXHgwMCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTQzNiw2ICs0NzcsNyBAQAogCiBjbGFzcyBVVEYzMkJFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMi1iZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDAwXHgwMFx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNDgxLDYgKzUyMywxMCBAQAogCiBjbGFzcyBVVEYxNlRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMTYiCisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGMiCisgICAgZWxzZToKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSBiJ1x4ZmZceGZlc1x4MDBwXHgwMGFceDAwbVx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMCcKICAgICBzcGFtYmUgPSBiJ1x4ZmVceGZmXHgwMHNceDAwcFx4MDBhXHgwMG1ceDAwc1x4MDBwXHgwMGFceDAwbScKQEAgLTU1NiwxMSArNjAyLDE0IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CiAgICAgICAgICAgICBmcC53cml0ZShzKQotICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCAnVScsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpIGFzIHJlYWRlcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgJ1UnLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQorICAgICAgICB3aXRoIHJlYWRlcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWQoKSwgczEpCiAKIGNsYXNzIFVURjE2TEVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWxlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjA0LDYgKzY1Myw3IEBACiAKIGNsYXNzIFVURjE2QkVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjQ3LDYgKzY5Nyw4IEBACiAKIGNsYXNzIFVURjhUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhlZFx4YjJceDgwIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSA9ICJcdWZmZmQiICogMwogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjc2LDE4ICs3MjgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSwgdS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICBkZWYgdGVzdF9sb25lX3N1cnJvZ2F0ZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgIlx1ZDgwMCIuZW5jb2RlLCAidXRmLTgiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIiXHhlZFx4YTBceDgwIi5kZWNvZGUsICJ1dGYtOCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgImJhY2tzbGFzaHJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tcXHVkYzgwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInhtbGNoYXJyZWZyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbJiM1NjQ0ODtdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlZXNjYXBlIiksCisgICAgICAgIHN1cGVyKCkudGVzdF9sb25lX3N1cnJvZ2F0ZXMoKQorICAgICAgICAjIG5vdCBzdXJlIGlmIHRoaXMgaXMgbWFraW5nIHNlbnNlIGZvcgorICAgICAgICAjIFVURi0xNiBhbmQgVVRGLTMyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoJ3V0Zi04JywgInN1cnJvZ2F0ZWVzY2FwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInW1x4ODBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAiaWdub3JlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1s/XScpCiAKICAgICBkZWYgdGVzdF9zdXJyb2dhdGVwYXNzX2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFiY1x1ZDgwMGRlZiIuZW5jb2RlKCJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIiksCkBAIC04NDAsMTUgKzg4NSwxOSBAQAogICAgICAgICAgICAgKGInYSsvLy8vLCtJS3ctYicsICdhXHVmZmZmXHVmZmZkXHUyMGFjYicpLAogICAgICAgICBdCiAgICAgICAgIGZvciByYXcsIGV4cGVjdGVkIGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzdfZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmRlY29kZSgndXRmLTcnLCAncmVwbGFjZScpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHJhdz1yYXcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9ub25ibXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1xVMDAwMTA0QTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYicrMkFIY29BLScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x1ZDgwMVx1ZGNhMCcuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBiJysyQUhjb0EtJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJysyQUhjb0EtJy5kZWNvZGUoc2VsZi5lbmNvZGluZyksICdcVTAwMDEwNEEwJykKIAorICAgIHRlc3RfbG9uZV9zdXJyb2dhdGVzID0gTm9uZQorCisKIGNsYXNzIFVURjE2RXhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKQEAgLTg3Myw3ICs5MjIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUsIDQyKQogCi1jbGFzcyBVVEY4U2lnVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVVRGOFNpZ1Rlc3QoVVRGOFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtOC1zaWciCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgpAQCAtMTU1NSw2ICsxNjA0LDcgQEAKICAgICAiY3AwMzciLAogICAgICJjcDEwMDYiLAogICAgICJjcDEwMjYiLAorICAgICJjcDExMjUiLAogICAgICJjcDExNDAiLAogICAgICJjcDEyNTAiLAogICAgICJjcDEyNTEiLApAQCAtMjI3Myw0NiArMjMyMywzMTkgQEAKICAgICAicXVvcHJpX2NvZGVjIiwKICAgICAiaGV4X2NvZGVjIiwKIF0KKwordHJhbnNmb3JtX2FsaWFzZXMgPSB7CisgICAgImJhc2U2NF9jb2RlYyI6IFsiYmFzZTY0IiwgImJhc2VfNjQiXSwKKyAgICAidXVfY29kZWMiOiBbInV1Il0sCisgICAgInF1b3ByaV9jb2RlYyI6IFsicXVvcHJpIiwgInF1b3RlZF9wcmludGFibGUiLCAicXVvdGVkcHJpbnRhYmxlIl0sCisgICAgImhleF9jb2RlYyI6IFsiaGV4Il0sCisgICAgInJvdF8xMyI6IFsicm90MTMiXSwKK30KKwogdHJ5OgogICAgIGltcG9ydCB6bGliCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogZWxzZToKICAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiemxpYl9jb2RlYyIpCisgICAgdHJhbnNmb3JtX2FsaWFzZXNbInpsaWJfY29kZWMiXSA9IFsiemlwIiwgInpsaWIiXQogdHJ5OgogICAgIGltcG9ydCBiejIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCiBlbHNlOgogICAgIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3MuYXBwZW5kKCJiejJfY29kZWMiKQorICAgIHRyYW5zZm9ybV9hbGlhc2VzWyJiejJfY29kZWMiXSA9IFsiYnoyIl0KIAogY2xhc3MgVHJhbnNmb3JtQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKICAgICAgICAgYmlucHV0ID0gYnl0ZXMocmFuZ2UoMjU2KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICAjIGdlbmVyaWMgY29kZWNzIGludGVyZmFjZQotICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCi0gICAgICAgICAgICAoaSwgc2l6ZSkgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykobykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgIyBnZW5lcmljIGNvZGVjcyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAobywgc2l6ZSkgPSBjb2RlY3MuZ2V0ZW5jb2RlcihlbmNvZGluZykoYmlucHV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCisgICAgICAgICAgICAgICAgKGksIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKG8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBsZW4obykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQorICAgICAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgogICAgICAgICAgICAgaWYgZW5jb2RpbmcgaW4gWyd1dV9jb2RlYycsICd6bGliX2NvZGVjJ106CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKKyAgICAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsIGIiXHg4MCIpCisKKyAgICBkZWYgdGVzdF9idWZmZXJfYXBpX3VzYWdlKHNlbGYpOgorICAgICAgICAjIFdlIGNoZWNrIGFsbCB0aGUgdHJhbnNmb3JtIGNvZGVjcyBhY2NlcHQgbWVtb3J5dmlldyBpbnB1dAorICAgICAgICAjIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKyAgICAgICAgIyBhbmQgYWxzbyB0aGF0IHRoZXkgcm91bmR0cmlwIGNvcnJlY3RseQorICAgICAgICBvcmlnaW5hbCA9IGIiMTIzNDVceDgwIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBkYXRhID0gb3JpZ2luYWwKKyAgICAgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBjb2RlY3MuZW5jb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHZpZXdfZW5jb2RlZCA9IGNvZGVjcy5lbmNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2VuY29kZWQsIGRhdGEpCisgICAgICAgICAgICAgICAgdmlldyA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29kZWNzLmRlY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIG9yaWdpbmFsKQorICAgICAgICAgICAgICAgIHZpZXdfZGVjb2RlZCA9IGNvZGVjcy5kZWNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2RlY29kZWQsIGRhdGEpCisKKyAgICBkZWYgdGVzdF90ZXh0X3RvX2JpbmFyeV9ibGFja2xpc3RzX2JpbmFyeV90cmFuc2Zvcm1zKHNlbGYpOgorICAgICAgICAjIENoZWNrIGJpbmFyeSAtPiBiaW5hcnkgY29kZWNzIGdpdmUgYSBnb29kIGVycm9yIGZvciBzdHIgaW5wdXQKKyAgICAgICAgYmFkX2lucHV0ID0gImJhZCBpbnB1dCB0eXBlIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBmbXQgPSAoICJ7IXJ9IGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorCisgICAgZGVmIHRlc3RfdGV4dF90b19iaW5hcnlfYmxhY2tsaXN0c190ZXh0X3RyYW5zZm9ybXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc3RyLmVuY29kZSBnaXZlcyBhIGdvb2QgZXJyb3IgbWVzc2FnZSBmb3Igc3RyIC0+IHN0ciBjb2RlY3MKKyAgICAgICAgbXNnID0gKHIiXidyb3RfMTMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgImp1c3QgYW4gZXhhbXBsZSBtZXNzYWdlIi5lbmNvZGUoInJvdF8xMyIpCisKKyAgICBkZWYgdGVzdF9iaW5hcnlfdG9fdGV4dF9ibGFja2xpc3RzX2JpbmFyeV90cmFuc2Zvcm1zKHNlbGYpOgorICAgICAgICAjIENoZWNrIGJ5dGVzLmRlY29kZSBhbmQgYnl0ZWFycmF5LmRlY29kZSBnaXZlIGEgZ29vZCBlcnJvcgorICAgICAgICAjIG1lc3NhZ2UgZm9yIGJpbmFyeSAtPiBiaW5hcnkgY29kZWNzCisgICAgICAgIGRhdGEgPSBiImVuY29kZSBmaXJzdCB0byBlbnN1cmUgd2UgbWVldCBhbnkgZm9ybWF0IHJlc3RyaWN0aW9ucyIKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZW5jb2RlZF9kYXRhID0gY29kZWNzLmVuY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBmbXQgPSAociJ7IXJ9IGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2RhdGEuZGVjb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGVuY29kZWRfZGF0YSkuZGVjb2RlKGVuY29kaW5nKQorCisgICAgZGVmIHRlc3RfYmluYXJ5X3RvX3RleHRfYmxhY2tsaXN0c190ZXh0X3RyYW5zZm9ybXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc3RyIC0+IHN0ciBjb2RlYyBnaXZlcyBhIGdvb2QgZXJyb3IgZm9yIGJpbmFyeSBpbnB1dAorICAgICAgICBmb3IgYmFkX2lucHV0IGluIChiImltbXV0YWJsZSIsIGJ5dGVhcnJheShiIm11dGFibGUiKSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChiYWRfaW5wdXQ9YmFkX2lucHV0KToKKyAgICAgICAgICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5kZWNvZGUoInJvdF8xMyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX3psaWJfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayB6bGliIGNvZGVjIGdpdmVzIGEgZ29vZCBlcnJvciBmb3IgbWFsZm9ybWVkIGlucHV0CisgICAgICAgIG1zZyA9ICJeZGVjb2Rpbmcgd2l0aCAnemxpYl9jb2RlYycgY29kZWMgZmFpbGVkIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiaGVsbG8iLCAiemxpYl9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9oZXhfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBoZXggY29kZWMgZ2l2ZXMgYSBnb29kIGVycm9yIGZvciBtYWxmb3JtZWQgaW5wdXQKKyAgICAgICAgbXNnID0gIl5kZWNvZGluZyB3aXRoICdoZXhfY29kZWMnIGNvZGVjIGZhaWxlZCIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImhlbGxvIiwgImhleF9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgICMgVW5mb3J0dW5hdGVseSwgdGhlIGJ6MiBtb2R1bGUgdGhyb3dzIE9TRXJyb3IsIHdoaWNoIHRoZSBjb2RlYworICAgICMgbWFjaGluZXJ5IGN1cnJlbnRseSBjYW4ndCB3cmFwIDooCisKKyAgICAjIEVuc3VyZSBjb2RlYyBhbGlhc2VzIGZyb20gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc0NzUgd29yaworICAgIGRlZiB0ZXN0X2FsaWFzZXMoc2VsZik6CisgICAgICAgIGZvciBjb2RlY19uYW1lLCBhbGlhc2VzIGluIHRyYW5zZm9ybV9hbGlhc2VzLml0ZW1zKCk6CisgICAgICAgICAgICBleHBlY3RlZF9uYW1lID0gY29kZWNzLmxvb2t1cChjb2RlY19uYW1lKS5uYW1lCisgICAgICAgICAgICBmb3IgYWxpYXMgaW4gYWxpYXNlczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhbGlhcz1hbGlhcyk6CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBjb2RlY3MubG9va3VwKGFsaWFzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ubmFtZSwgZXhwZWN0ZWRfbmFtZSkKKworCisjIFRoZSBjb2RlYyBzeXN0ZW0gdHJpZXMgdG8gd3JhcCBleGNlcHRpb25zIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgZXJyb3IKKyMgbWVudGlvbnMgdGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgYW5kIHRoZSBjb2RlYyBpbnZvbHZlZC4gV2UKKyMgY3VycmVudGx5ICpvbmx5KiB3YW50IHRoaXMgdG8gaGFwcGVuIGZvciByZWxhdGl2ZWx5IHN0YXRlbGVzcworIyBleGNlcHRpb25zLCB3aGVyZSB0aGUgb25seSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbiB0aGV5IGNvbnRhaW4gaXMgdGhlaXIKKyMgdHlwZSBhbmQgYSBzaW5nbGUgc3RyIGFyZ3VtZW50LgorCisjIFVzZSBhIGxvY2FsIGNvZGVjIHJlZ2lzdHJ5IHRvIGF2b2lkIGFwcGVhcmluZyB0byBsZWFrIG9iamVjdHMgd2hlbgorIyByZWdpc3RlcmluZyBtdWx0aXBsZSBzZWFjaCBmdW5jdGlvbnMKK19URVNUX0NPREVDUyA9IHt9CisKK2RlZiBfZ2V0X3Rlc3RfY29kZWMoY29kZWNfbmFtZSk6CisgICAgcmV0dXJuIF9URVNUX0NPREVDUy5nZXQoY29kZWNfbmFtZSkKK2NvZGVjcy5yZWdpc3RlcihfZ2V0X3Rlc3RfY29kZWMpICMgUmV0dXJucyBOb25lLCBub3QgdXNhYmxlIGFzIGEgZGVjb3JhdG9yCisKK2NsYXNzIEV4Y2VwdGlvbkNoYWluaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgVGhlcmUncyBubyB3YXkgdG8gdW5yZWdpc3RlciBhIGNvZGVjIHNlYXJjaCBmdW5jdGlvbiwgc28gd2UganVzdAorICAgICAgICAjIGVuc3VyZSB3ZSByZW5kZXIgdGhpcyBvbmUgZmFpcmx5IGhhcm1sZXNzIGFmdGVyIHRoZSB0ZXN0CisgICAgICAgICMgY2FzZSBmaW5pc2hlcyBieSB1c2luZyB0aGUgdGVzdCBjYXNlIHJlcHIgYXMgdGhlIGNvZGVjIG5hbWUKKyAgICAgICAgIyBUaGUgY29kZWNzIG1vZHVsZSBub3JtYWxpemVzIGNvZGVjIG5hbWVzLCBhbHRob3VnaCB0aGlzIGRvZXNuJ3QKKyAgICAgICAgIyBhcHBlYXIgdG8gYmUgZm9ybWFsbHkgZG9jdW1lbnRlZC4uLgorICAgICAgICAjIFdlIGFsc28gbWFrZSBzdXJlIHdlIHVzZSBhIHRydWx5IHVuaXF1ZSBpZCBmb3IgdGhlIGN1c3RvbSBjb2RlYworICAgICAgICAjIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHRoZSBjb2RlYyBjYWNoZSB3aGVuIHJ1bm5pbmcgdGhlc2UgdGVzdHMKKyAgICAgICAgIyBtdWx0aXBsZSB0aW1lcyAoZS5nLiB3aGVuIGh1bnRpbmcgZm9yIHJlZmxlYWtzKQorICAgICAgICB1bmlxdWVfaWQgPSByZXByKHNlbGYpICsgc3RyKGlkKHNlbGYpKQorICAgICAgICBzZWxmLmNvZGVjX25hbWUgPSBlbmNvZGluZ3Mubm9ybWFsaXplX2VuY29kaW5nKHVuaXF1ZV9pZCkubG93ZXIoKQorCisgICAgICAgICMgV2Ugc3RvcmUgdGhlIG9iamVjdCB0byByYWlzZSBvbiB0aGUgaW5zdGFuY2UgYmVjYXVzZSBvZiBhIGJhZAorICAgICAgICAjIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvZGVjIGNhY2hpbmcgKHdoaWNoIG1lYW5zIHdlIGNhbid0CisgICAgICAgICMgcmVjcmVhdGUgdGhlIGNvZGVjIGVudHJ5KSBhbmQgcmVncnRlc3QgcmVmbGVhayBodW50aW5nICh3aGljaAorICAgICAgICAjIHJ1bnMgdGhlIHNhbWUgdGVzdCBpbnN0YW5jZSBtdWx0aXBsZSB0aW1lcykuIFRoaXMgbWVhbnMgd2UKKyAgICAgICAgIyBuZWVkIHRvIGVuc3VyZSB0aGUgY29kZWNzIGNhbGwgYmFjayBpbiB0byB0aGUgaW5zdGFuY2UgdG8gZmluZAorICAgICAgICAjIG91dCB3aGljaCBleGNlcHRpb24gdG8gcmFpc2UgcmF0aGVyIHRoYW4gYmluZGluZyB0aGVtIGluIGEKKyAgICAgICAgIyBjbG9zdXJlIHRvIGFuIG9iamVjdCB0aGF0IG1heSBjaGFuZ2Ugb24gdGhlIG5leHQgcnVuCisgICAgICAgIHNlbGYub2JqX3RvX3JhaXNlID0gUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIF9URVNUX0NPREVDUy5wb3Aoc2VsZi5jb2RlY19uYW1lLCBOb25lKQorCisgICAgZGVmIHNldF9jb2RlYyhzZWxmLCBlbmNvZGUsIGRlY29kZSk6CisgICAgICAgIGNvZGVjX2luZm8gPSBjb2RlY3MuQ29kZWNJbmZvKGVuY29kZSwgZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgX1RFU1RfQ09ERUNTW3NlbGYuY29kZWNfbmFtZV0gPSBjb2RlY19pbmZvCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBhc3NlcnRXcmFwcGVkKHNlbGYsIG9wZXJhdGlvbiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgIGZ1bGxfbXNnID0gciJ7fSB3aXRoIHshcn0gY29kZWMgZmFpbGVkIFwoe306IHt9XCkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgc2VsZi5jb2RlY19uYW1lLCBleGNfdHlwZS5fX25hbWVfXywgbXNnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoZXhjX3R5cGUsIGZ1bGxfbXNnKSBhcyBjYXVnaHQ6CisgICAgICAgICAgICB5aWVsZCBjYXVnaHQKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNhdWdodC5leGNlcHRpb24uX19jYXVzZV9fLCBleGNfdHlwZSkKKworICAgIGRlZiByYWlzZV9vYmooc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICMgSGVscGVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSB0aGUgb2JqZWN0IHJhaXNlZCBieSBhIHRlc3QgY29kZWMKKyAgICAgICAgcmFpc2Ugc2VsZi5vYmpfdG9fcmFpc2UKKworICAgIGRlZiBjaGVja193cmFwcGVkKHNlbGYsIG9ial90b19yYWlzZSwgbXNnLCBleGNfdHlwZT1SdW50aW1lRXJyb3IpOgorICAgICAgICBzZWxmLm9ial90b19yYWlzZSA9IG9ial90b19yYWlzZQorICAgICAgICBzZWxmLnNldF9jb2RlYyhzZWxmLnJhaXNlX29iaiwgc2VsZi5yYWlzZV9vYmopCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJlbmNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgInN0cl9pbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImVuY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHJfaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJkZWNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImRlY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ieV90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoUnVudGltZUVycm9yLCAiIikKKworICAgIGRlZiB0ZXN0X3JhaXNlX2J5X3ZhbHVlKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgYmUgd3JhcHBlZCIKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKFJ1bnRpbWVFcnJvcihtc2cpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ncmFuZGNoaWxkX3N1YmNsYXNzX2V4YWN0X3NpemUoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBiZSB3cmFwcGVkIgorICAgICAgICBjbGFzcyBNeVJ1bnRpbWVFcnJvcihSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKE15UnVudGltZUVycm9yKG1zZyksIG1zZywgTXlSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9zdWJjbGFzc193aXRoX3dlYWtyZWZfc3VwcG9ydChzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIGJlIHdyYXBwZWQiCisgICAgICAgIGNsYXNzIE15UnVudGltZUVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChNeVJ1bnRpbWVFcnJvcihtc2cpLCBtc2csIE15UnVudGltZUVycm9yKQorCisgICAgZGVmIGNoZWNrX25vdF93cmFwcGVkKHNlbGYsIG9ial90b19yYWlzZSwgbXNnKToKKyAgICAgICAgZGVmIHJhaXNlX29iaigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJhaXNlIG9ial90b19yYWlzZQorICAgICAgICBzZWxmLnNldF9jb2RlYyhyYWlzZV9vYmosIHJhaXNlX29iaikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHIgaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHIgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImJ5dGVzIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorCisgICAgZGVmIHRlc3RfaW5pdF9vdmVycmlkZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3VzdG9tSW5pdChSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChDdXN0b21Jbml0LCAiIikKKworICAgIGRlZiB0ZXN0X25ld19vdmVycmlkZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3VzdG9tTmV3KFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzKQorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKEN1c3RvbU5ldywgIiIpCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9hdHRyaWJ1dGVfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBOT1QgYmUgd3JhcHBlZCIKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKG1zZykKKyAgICAgICAgZXhjLmF0dHIgPSAxCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoZXhjLCAiXnt9JCIuZm9ybWF0KG1zZykpCisKKyAgICBkZWYgdGVzdF9ub25fc3RyX2FyZ19pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChSdW50aW1lRXJyb3IoMSksICIxIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2FyZ3NfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZ19yZSA9IHIiXlwoJ2EnLCAnYicsICdjJ1wpJCIKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChSdW50aW1lRXJyb3IoJ2EnLCAnYicsICdjJyksIG1zZ19yZSkKKworICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NjA5CisgICAgZGVmIHRlc3RfY29kZWNfbG9va3VwX2ZhaWx1cmVfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZyA9ICJedW5rbm93biBlbmNvZGluZzoge30kIi5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICAjIFRoZSBpbml0aWFsIGNvZGVjIGxvb2t1cCBzaG91bGQgbm90IGJlIHdyYXBwZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgInN0ciBpbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmVuY29kZSgic3RyIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF91bmZsYWdnZWRfbm9uX3RleHRfY29kZWNfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICMgVGhlIHN0ZGxpYiBub24tdGV4dCBjb2RlY3MgYXJlIG5vdyBtYXJrZWQgc28gdGhleSdyZQorICAgICAgICAjIHByZS1lbXB0aXZlbHkgc2tpcHBlZCBieSB0aGUgdGV4dCBtb2RlbCByZWxhdGVkIG1ldGhvZHMKKyAgICAgICAgIyBIb3dldmVyLCB0aGlyZCBwYXJ0eSBjb2RlY3Mgd29uJ3QgYmUgZmxhZ2dlZCwgc28gd2Ugc3RpbGwgbWFrZQorICAgICAgICAjIHN1cmUgdGhlIGNhc2Ugd2hlcmUgYW4gaW5hcHByb3ByaWF0ZSBvdXRwdXQgdHlwZSBpcyBwcm9kdWNlZCBpcworICAgICAgICAjIGhhbmRsZWQgYXBwcm9wcmlhdGVseQorICAgICAgICBkZWYgZW5jb2RlX3RvX3N0cigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiAibm90IGJ5dGVzISIsIDAKKyAgICAgICAgZGVmIGRlY29kZV90b19ieXRlcygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBiIm5vdCBzdHIhIiwgMAorICAgICAgICBzZWxmLnNldF9jb2RlYyhlbmNvZGVfdG9fc3RyLCBkZWNvZGVfdG9fYnl0ZXMpCisgICAgICAgICMgTm8gaW5wdXQgb3Igb3V0cHV0IHR5cGUgY2hlY2tzIG9uIHRoZSBjb2RlY3MgbW9kdWxlIGZ1bmN0aW9ucworICAgICAgICBlbmNvZGVkID0gY29kZWNzLmVuY29kZShOb25lLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlZCwgIm5vdCBieXRlcyEiKQorICAgICAgICBkZWNvZGVkID0gY29kZWNzLmRlY29kZShOb25lLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZCwgYiJub3Qgc3RyISIpCisgICAgICAgICMgVGV4dCBtb2RlbCBtZXRob2RzIHNob3VsZCBjb21wbGFpbgorICAgICAgICBmbXQgPSAociJeeyFyfSBlbmNvZGVyIHJldHVybmVkICdzdHInIGluc3RlYWQgb2YgJ2J5dGVzJzsgIgorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyQiKQorICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHJfaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIGZtdCA9IChyIl57IXJ9IGRlY29kZXIgcmV0dXJuZWQgJ2J5dGVzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBkZWNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzJCIpCisgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKwogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLApAQCAtMjMyNCw4ICsyNjQ3LDggQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX2NvZGVfcGFnZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIC0xLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAtMSwgYidhJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgMTIzLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIDEyMywgYidhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIDEyMywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgMTIzLCBiJ2EnKQogCiAgICAgZGVmIHRlc3RfY29kZV9wYWdlX25hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVW5pY29kZUVuY29kZUVycm9yLCAnY3A5MzInLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg5YzdhOC4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQKLWltcG9ydCBpbXBvcnRsaWIsIG9zLCBzeXMKLQotY2xhc3MgQ29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfYmFkX2NvZGluZyhzZWxmKToKLSAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZycKLSAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKLQotICAgIGRlZiB0ZXN0X2JhZF9jb2RpbmcyKHNlbGYpOgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nMicKLSAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKLQotICAgIGRlZiB2ZXJpZnlfYmFkX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBfX2ltcG9ydF9fLCAndGVzdC4nICsgbW9kdWxlX25hbWUpCi0KLSAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbW9kdWxlX25hbWUgKyAnLnB5JykKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKLSAgICAgICAgICAgIGJ5dGVzID0gZnAucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBieXRlcywgZmlsZW5hbWUsICdleGVjJykKLQotICAgIGRlZiB0ZXN0X2V4ZWNfdmFsaWRfY29kaW5nKHNlbGYpOgotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhiJyMgY29kaW5nOiBjcDk0OVxuYSA9ICJceGFhXHhhNyJcbicsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCAnXHUzMDQ3JykKLQotICAgIGRlZiB0ZXN0X2ZpbGVfcGFyc2Uoc2VsZik6Ci0gICAgICAgICMgaXNzdWUxMTM0OiBhbGwgZW5jb2RpbmdzIG91dHNpZGUgbGF0aW4tMSBhbmQgdXRmLTggZmFpbCBvbgotICAgICAgICAjIG11bHRpbGluZSBzdHJpbmdzIGFuZCBsb25nIGxpbmVzICg+NTEyIGNvbHVtbnMpCi0gICAgICAgIHVubG9hZChURVNURk4pCi0gICAgICAgIGZpbGVuYW1lID0gVEVTVEZOICsgIi5weSIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ImNwMTI1MiIpCi0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggZjoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCIjIC0qLSBjb2Rpbmc6IGNwMTI1MiAtKi1cbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJycnQSBzaG9ydCBzdHJpbmdcbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJycnXG4iKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIidBIHZlcnkgbG9uZyBzdHJpbmcgJXMnXG4iICUgKCJYIiAqIDEwMDApKQotCi0gICAgICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQotICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSkKLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJjIikKLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJvIikKLSAgICAgICAgICAgIHVubG9hZChURVNURk4pCi0KLSAgICBkZWYgdGVzdF9lcnJvcl9mcm9tX3N0cmluZyhzZWxmKToKLSAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTYyODkKLSAgICAgICAgaW5wdXQgPSAiIyBjb2Rpbmc6IGFzY2lpXG5cTntTTk9XTUFOfSIuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpIGFzIGM6Ci0gICAgICAgICAgICBjb21waWxlKGlucHV0LCAiPHN0cmluZz4iLCAiZXhlYyIpCi0gICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCi0gICAgICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4Y2VwdGlvbi5hcmdzWzBdLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWMuZXhjZXB0aW9uLmFyZ3NbMF0pCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CmluZGV4IGZmNTI3NTUuLjU2ZTgxMjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQpAQCAtMTEyLDYgKzExMiwzOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoZCksIGRpY3QoYT0xLCBiPTIsIGM9MzApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoZC5pdGVtcygpKSwgZGljdChhPTEsIGI9MiwgYz0zMCkpCiAKKyAgICBkZWYgdGVzdF9uZXdfY2hpbGQoc2VsZik6CisgICAgICAgICdUZXN0cyBmb3IgY2hhbmdlcyBmb3IgaXNzdWUgIzE2NjEzLicKKyAgICAgICAgYyA9IENoYWluTWFwKCkKKyAgICAgICAgY1snYSddID0gMQorICAgICAgICBjWydiJ10gPSAyCisgICAgICAgIG0gPSB7J2InOjIwLCAnYyc6IDMwfQorICAgICAgICBkID0gYy5uZXdfY2hpbGQobSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1hcHMsIFt7J2InOjIwLCAnYyc6MzB9LCB7J2EnOjEsICdiJzoyfV0pICAjIGNoZWNrIGludGVybmFsIHN0YXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobSwgZC5tYXBzWzBdKQorCisgICAgICAgICMgVXNlIGEgZGlmZmVyZW50IG1hcCB0aGFuIGEgZGljdAorICAgICAgICBjbGFzcyBsb3dlcmRpY3QoZGljdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5sb3dlcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19jb250YWluc19fKHNlbGYsIGtleSkKKworICAgICAgICBjID0gQ2hhaW5NYXAoKQorICAgICAgICBjWydhJ10gPSAxCisgICAgICAgIGNbJ2InXSA9IDIKKyAgICAgICAgbSA9IGxvd2VyZGljdChiPTIwLCBjPTMwKQorICAgICAgICBkID0gYy5uZXdfY2hpbGQobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtLCBkLm1hcHNbMF0pCisgICAgICAgIGZvciBrZXkgaW4gJ2FiYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjb250YWlucworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGQpCisgICAgICAgIGZvciBrLCB2IGluIGRpY3QoYT0xLCBCPTIwLCBDPTMwLCB6PTEwMCkuaXRlbXMoKTogICAgICAgICAgICAgIyBjaGVjayBnZXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoaywgMTAwKSwgdikKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIE5hbWVkIFR1cGxlcwpAQCAtNzUwLDYgKzc4Miw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJhbmdlKDEwKSwgU2VxdWVuY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHJhbmdlLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtZW1vcnl2aWV3KGIiIiksIFNlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhtZW1vcnl2aWV3LCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2VxdWVuY2UsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCiAgICAgICAgICAgICAnX19nZXRpdGVtX18nKQpAQCAtOTA0LDIzICs5MzgsMjYgQEAKICAgICAgICAgd29yZHMgPSBDb3VudGVyKCd3aGljaCB3aXRjaCBoYWQgd2hpY2ggd2l0Y2hlcyB3cmlzdCB3YXRjaCcuc3BsaXQoKSkKICAgICAgICAgdXBkYXRlX3Rlc3QgPSBDb3VudGVyKCkKICAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKHdvcmRzKQotICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCi0gICAgICAgICAgICAgICAgICAgIHdvcmRzLmNvcHkoKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weSh3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSksCi0gICAgICAgICAgICAgICAgICAgIGV2YWwocmVwcih3b3JkcykpLAotICAgICAgICAgICAgICAgICAgICB1cGRhdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgQ291bnRlcih3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIF0pOgotICAgICAgICAgICAgbXNnID0gKGksIGR1cCwgd29yZHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbih3b3JkcykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZSh3b3JkcykpCisgICAgICAgIGZvciBsYWJlbCwgZHVwIGluIFsKKyAgICAgICAgICAgICAgICAgICAgKCd3b3Jkcy5jb3B5KCknLCB3b3Jkcy5jb3B5KCkpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuY29weSh3b3JkcyknLCBjb3B5LmNvcHkod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmRlZXBjb3B5KHdvcmRzKScsIGNvcHkuZGVlcGNvcHkod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAwKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMikpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ2V2YWwocmVwcih3b3JkcykpJywgZXZhbChyZXByKHdvcmRzKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3VwZGF0ZV90ZXN0JywgdXBkYXRlX3Rlc3QpLAorICAgICAgICAgICAgICAgICAgICAoJ0NvdW50ZXIod29yZHMpJywgQ291bnRlcih3b3JkcykpLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobGFiZWw9bGFiZWwpOgorICAgICAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG53b3JkczogJXMiICUgKGR1cCwgd29yZHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIHdvcmRzLCBtc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQogCiAgICAgZGVmIHRlc3RfY29weV9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgTXlDb3VudGVyKENvdW50ZXIpOgpAQCAtMTA0Myw4ICsxMDgwLDEwIEBACiAgICAgICAgICMgdGVzdCBmaWRlbGl0eSB0byB0aGUgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICBjID0gQ291bnRlclN1YmNsYXNzV2l0aFNldEl0ZW0oJ2FicmFjYWRhYnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIHsnYSc6IDUsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDEsICdyJzoyIH0pCiAgICAgICAgIGMgPSBDb3VudGVyU3ViY2xhc3NXaXRoR2V0KCdhYnJhY2FkYWJyYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGMpLCB7J2EnOiA1LCAnYic6IDIsICdjJzogMSwgJ2QnOiAxLCAncic6MiB9KQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMjA1LDI0ICsxMjQ0LDI4IEBACiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCiAgICAgICAgIHVwZGF0ZV90ZXN0ID0gT3JkZXJlZERpY3QoKQogICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUob2QpCi0gICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKLSAgICAgICAgICAgICAgICAgICAgb2QuY29weSgpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkob2QpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAxKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpLAotICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIob2QpKSwKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgXSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCBvZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCBvZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAuaXRlbXMoKSksIGxpc3Qob2QuaXRlbXMoKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4ob2QpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUob2QpKQorICAgICAgICBmb3IgbGFiZWwsIGR1cCBpbiBbCisgICAgICAgICAgICAgICAgICAgICgnb2QuY29weSgpJywgb2QuY29weSgpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmNvcHkob2QpJywgY29weS5jb3B5KG9kKSksCisgICAgICAgICAgICAgICAgICAgICgnY29weS5kZWVwY29weShvZCknLCBjb3B5LmRlZXBjb3B5KG9kKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDApKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDMpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgLTEpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdldmFsKHJlcHIob2QpKScsIGV2YWwocmVwcihvZCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCd1cGRhdGVfdGVzdCcsIHVwZGF0ZV90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgKCdPcmRlcmVkRGljdChvZCknLCBPcmRlcmVkRGljdChvZCkpLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobGFiZWw9bGFiZWwpOgorICAgICAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG5vZDogJXMiICUgKGR1cCwgb2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIG9kLCBtc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQogCiAgICAgZGVmIHRlc3RfeWFtbF9saW5rYWdlKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IF9fcmVkdWNlX18gaXMgc2V0dXAgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBQeVlBTUwncyBkdW1wKCkgZmVhdHVyZS4KQEAgLTEyMzcsOSArMTI4MCwxOCBAQAogICAgICAgICAjIGRvIG5vdCBzYXZlIGluc3RhbmNlIGRpY3Rpb25hcnkgaWYgbm90IG5lZWRlZAogICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvZC5fX3JlZHVjZV9fKClbMl0pCiAgICAgICAgIG9kLnggPSAxMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShvZC5fX3JlZHVjZV9fKClbMl0pCisKKyAgICBkZWYgdGVzdF9waWNrbGVfcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2RbMV0gPSBvZAorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoLTEsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHVwLmtleXMoKSksIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVwWzFdLCBkdXApCiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CmluZGV4IGU0MDViOGEuLmEyNGUzYWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQpAQCAtMSw0ICsxLDQgQEAKLWltcG9ydCB1bml0dGVzdCwgdGVzdC5zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBjb2xvcnN5cwogCiBkZWYgZnJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKQEAgLTY5LDggKzY5LDMyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKGhscywgY29sb3JzeXMucmdiX3RvX2hscygqcmdiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy5obHNfdG9fcmdiKCpobHMpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDb2xvcnN5c1Rlc3QpCisgICAgZGVmIHRlc3RfeWlxX3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZm9yIHIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgZm9yIGcgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgIGZvciBiIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICAgICAgcmdiID0gKHIsIGcsIGIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnN5cy55aXFfdG9fcmdiKCpjb2xvcnN5cy5yZ2JfdG9feWlxKCpyZ2IpKQorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF95aXFfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAjIHJnYiwgeWlxCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAwLjApLCAoMC4wLCAwLjAsIDAuMCkpLCAjIGJsYWNrCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAxLjApLCAoMC4xMSwgLTAuMzIxNywgMC4zMTIxKSksICMgYmx1ZQorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMC4wKSwgKDAuNTksIC0wLjI3NzMsIC0wLjUyNTEpKSwgIyBncmVlbgorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMS4wKSwgKDAuNywgLTAuNTk5LCAtMC4yMTMpKSwgIyBjeWFuCisgICAgICAgICAgICAoKDEuMCwgMC4wLCAwLjApLCAoMC4zLCAwLjU5OSwgMC4yMTMpKSwgIyByZWQKKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDEuMCksICgwLjQxLCAwLjI3NzMsIDAuNTI1MSkpLCAjIHB1cnBsZQorICAgICAgICAgICAgKCgxLjAsIDEuMCwgMC4wKSwgKDAuODksIDAuMzIxNywgLTAuMzEyMSkpLCAjIHllbGxvdworICAgICAgICAgICAgKCgxLjAsIDEuMCwgMS4wKSwgKDEuMCwgMC4wLCAwLjApKSwgIyB3aGl0ZQorICAgICAgICAgICAgKCgwLjUsIDAuNSwgMC41KSwgKDAuNSwgMC4wLCAwLjApKSwgIyBncmV5CisgICAgICAgIF0KKyAgICAgICAgZm9yIChyZ2IsIHlpcSkgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCh5aXEsIGNvbG9yc3lzLnJnYl90b195aXEoKnJnYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHJnYiwgY29sb3JzeXMueWlxX3RvX3JnYigqeWlxKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CmluZGV4IGZkZGI1MzguLmZmMjUxNWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTEsMTEgKzEsMTIgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBjb21waWxlYWxsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTE4LDExICsxOSwxMSBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKLSAgICAgICAgc2VsZi5iY19wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuYmNfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCd4ID0gMTIzXG4nKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoMiA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0Mi5weScpCi0gICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIpCisgICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMikKICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYuc291cmNlX3BhdGgyKQogICAgICAgICBzZWxmLnN1YmRpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ19zdWJkaXInKQogICAgICAgICBvcy5ta2RpcihzZWxmLnN1YmRpcmVjdG9yeSkKQEAgLTM2LDcgKzM3LDcgQEAKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoOCkKICAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChzZWxmLnNvdXJjZV9wYXRoKS5zdF9tdGltZSkKLSAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCBtdGltZSkKKyAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLCBtdGltZSkKICAgICAgICAgcmV0dXJuIGRhdGEsIGNvbXBhcmUKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0JyksICd0ZXN0IG5lZWRzIG9zLnN0YXQoKScpCkBAIC01Niw3ICs1Nyw4IEBACiAKICAgICBkZWYgdGVzdF9tdGltZShzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCi0gICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgMSkpCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKQogCiAgICAgZGVmIHRlc3RfbWFnaWNfbnVtYmVyKHNlbGYpOgogICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KQEAgLTk2LDE0ICs5OCwxNCBAQAogICAgICAgICAjIGludGVycHJldGVyJ3MgY3JlYXRlcyB0aGUgY29ycmVjdCBmaWxlIG5hbWVzCiAgICAgICAgIG9wdGltaXplID0gMSBpZiBfX2RlYnVnX18gZWxzZSAwCiAgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUsIG9wdGltaXplPW9wdGltaXplKQotICAgICAgICBjYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkKSkKLSAgICAgICAgY2FjaGVkMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkMiA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkMikpCi0gICAgICAgIGNhY2hlZDMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDMpKQogCiAKQEAgLTE1MSwxMCArMTUzLDEyIEBACiAgICAgICAgIHJldHVybiByYywgb3V0LCBlcnIKIAogICAgIGRlZiBhc3NlcnRDb21waWxlZChzZWxmLCBmbik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZm4pKSkKKyAgICAgICAgcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZiwgZm4pOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbikpKQorICAgICAgICBwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9jbGVhbnVwKQpAQCAtMTg5LDggKzE5Myw4IEBACiAgICAgICAgICAgICAgICAgWyctbScsICdjb21waWxlYWxsJywgJy1xJywgc2VsZi5wa2dkaXJdKSkKICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgY29udGVudHMuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoYmFzZS5mb3JtYXQoaW1wLmdldF90YWcoKSwgZXh0KSBmb3IgYmFzZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX2luaXRfXy57fS57fScsICdiYXIue30ue30nKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsIGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlIGluICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvcy5saXN0ZGlyKHNlbGYucGtnZGlyX2NhY2hlZGlyKSksIGV4cGVjdGVkKQogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIC5weWMgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzZWxmLnBrZ2RpcikKQEAgLTIyMyw3ICsyMjcsNyBAQAogCiAgICAgZGVmIHRlc3RfZm9yY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIpCi0gICAgICAgIHB5Y3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5iYXJmbikKKyAgICAgICAgcHljcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCiAgICAgICAgICMgc2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCiAgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCiAgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQpAQCAtMjg3LDEwICsyOTEsMTAgQEAKICAgICAgICAgYmF6Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmF6JywgJ3JhaXNlIEV4Y2VwdGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgJy1kJywgJ2RpbnNkYWxlJywgc2VsZi5wa2dkaXIpCiAgICAgICAgIGZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JpbmcnLCAnaW1wb3J0IGJheicpCi0gICAgICAgIHB5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKKyAgICAgICAgcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCiAgICAgICAgIG9zLnJlbmFtZShweWMsIG9zLnBhdGguam9pbihzZWxmLnBrZ2RpciwgJ2Jhei5weWMnKSkKICAgICAgICAgb3MucmVtb3ZlKGJhemZuKQotICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShmbikKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4sIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJ0ZpbGUgImRpbnNkYWxlJykKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfYmFkX2ZpbGUoc2VsZik6CkBAIC0yOTgsNyArMzAyLDcgQEAKICAgICAgICAgICAgICctaScsIG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ25vc3VjaGZpbGUnKSwgc2VsZi5wa2dkaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiJ3Jyb3IuKm5vc3VjaGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KGVyciwgYidUcmFjZWJhY2snKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dkaXJfY2FjaGVkaXIpKSkKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfZmlsZV93aXRoX2FyZyhzZWxmKToKQEAgLTM1NSwxMyArMzU5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGIiQ2FuJ3QgbGlzdCAnYmFkZmlsZW5hbWUnIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIENvbW1hbmRMaW5lVGVzdHMsCi0gICAgICAgIENvbXBpbGVhbGxUZXN0cywKLSAgICAgICAgRW5jb2RpbmdUZXN0LAotICAgICAgICApCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CmluZGV4IDFiZjQwOTcuLmNkNTUzNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKQEAgLTIyMCw2ICsyMjAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE9TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKDEuNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxKzEwaiIpLCAxKzEwaikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwKSwgMTArMGopCkBAIC0zMDEsNiArMzAzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwgNSszaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3QgJ05vbmVUeXBlJyIsIGNvbXBsZXgsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICJcMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIzXDA5IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAiMSIsICIyIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKaW5kZXggMzkyMzBlMS4uYTdlOTQ1YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiAKIGZyb20gY29uY3VycmVudCBpbXBvcnQgZnV0dXJlcwogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UgaW1wb3J0ICgKQEAgLTUyLDYgKzUzLDExIEBACiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKIAorY2xhc3MgTXlPYmplY3Qob2JqZWN0KToKKyAgICBkZWYgbXlfbWV0aG9kKHNlbGYpOgorICAgICAgICBwYXNzCisKKwogY2xhc3MgRXhlY3V0b3JNaXhpbjoKICAgICB3b3JrZXJfY291bnQgPSA1CiAKQEAgLTM5Niw2ICs0MDIsMjIgQEAKICAgICAgICAgc2VsZi5leGVjdXRvci5tYXAoc3RyLCBbMl0gKiAoc2VsZi53b3JrZXJfY291bnQgKyAxKSkKICAgICAgICAgc2VsZi5leGVjdXRvci5zaHV0ZG93bigpCiAKKyAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX3N0YWxlX3JlZmVyZW5jZXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2Mjg0OiBjaGVjayB0aGF0IHRoZSBleGVjdXRvcnMgZG9uJ3QgdW5uZWNlc3NhcmlseSBoYW5nIG9udG8KKyAgICAgICAgIyByZWZlcmVuY2VzLgorICAgICAgICBteV9vYmplY3QgPSBNeU9iamVjdCgpCisgICAgICAgIG15X29iamVjdF9jb2xsZWN0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBteV9vYmplY3RfY2FsbGJhY2sgPSB3ZWFrcmVmLnJlZigKKyAgICAgICAgICAgIG15X29iamVjdCwgbGFtYmRhIG9iajogbXlfb2JqZWN0X2NvbGxlY3RlZC5zZXQoKSkKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZGlzY2FyZGluZyB0aGUgZnV0dXJlLgorICAgICAgICBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChteV9vYmplY3QubXlfbWV0aG9kKQorICAgICAgICBkZWwgbXlfb2JqZWN0CisKKyAgICAgICAgY29sbGVjdGVkID0gbXlfb2JqZWN0X2NvbGxlY3RlZC53YWl0KHRpbWVvdXQ9NS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0YWxlIHJlZmVyZW5jZSBub3QgY29sbGVjdGVkIHdpdGhpbiB0aW1lb3V0LiIpCisKIAogY2xhc3MgVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdChUaHJlYWRQb29sTWl4aW4sIEV4ZWN1dG9yVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X21hcF9zdWJtaXRzX3dpdGhvdXRfaXRlcmF0aW9uKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IDllNDVmNzAuLmI4NzcwYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTEsNSArMSw2IEBACiAiIiJVbml0IHRlc3RzIGZvciBjb250ZXh0bGliLnB5LCBhbmQgb3RoZXIgY29udGV4dCBtYW5hZ2Vycy4iIiIKIAoraW1wb3J0IGlvCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtMTAwLDE1ICsxMDEsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19uYW1lX18sJ2JheicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6LmZvbywgJ2JhcicpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAotICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKICAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3N0cmluZ19naXZlbl9jbV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19kb2NfXywgIldoZWUhIikKKworCiBjbGFzcyBDbG9zaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyBYWFggVGhpcyBuZWVkcyBtb3JlIHdvcmsKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gY2xvc2luZy5fX2RvY19fCisgICAgICAgIG9iaiA9IGNsb3NpbmcoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfY2xvc2luZyhzZWxmKToKICAgICAgICAgc3RhdGUgPSBbXQpAQCAtMjA0LDYgKzIxNSw3IEBACiAKIAogY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgICIiIkV4YW1wbGUgZGVjb3JhdGlvbi1jb21wYXRpYmxlIGNvbnRleHQgbWFuYWdlciBmb3IgdGVzdGluZyIiIgogICAgIHN0YXJ0ZWQgPSBGYWxzZQogICAgIGV4YyA9IE5vbmUKICAgICBjYXRjaCA9IEZhbHNlCkBAIC0yMTksNiArMjMxLDEzIEBACiAKIGNsYXNzIFRlc3RDb250ZXh0RGVjb3JhdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBteWNvbnRleHQuX19kb2NfXworICAgICAgICBvYmogPSBteWNvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKICAgICBkZWYgdGVzdF9jb250ZXh0ZGVjb3JhdG9yKHNlbGYpOgogICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIHJlc3VsdDoKQEAgLTM3Miw2ICszOTEsMTMgQEAKIAogY2xhc3MgVGVzdEV4aXRTdGFjayh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gRXhpdFN0YWNrLl9fZG9jX18KKyAgICAgICAgb2JqID0gRXhpdFN0YWNrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCiAgICAgZGVmIHRlc3Rfbm9fcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICB3aXRoIEV4aXRTdGFjaygpOgogICAgICAgICAgICAgcGFzcwpAQCAtNjMxLDEwICs2NTcsMTExIEBACiAgICAgICAgIHN0YWNrLnB1c2goY20pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhY2suX2V4aXRfY2FsbGJhY2tzWy0xXSwgY20pCiAKK2NsYXNzIFRlc3RSZWRpcmVjdFN0ZG91dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSMgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgdGVzdCBhY3R1YWxseSBydW4gdW5kZXIgcmVncnRlc3QucHkhCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHJlZGlyZWN0X3N0ZG91dC5fX2RvY19fCisgICAgICAgIG9iaiA9IHJlZGlyZWN0X3N0ZG91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZWRpcmVjdF9pbl9pbml0KHNlbGYpOgorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF90b19zdHJpbmdfaW8oc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIG1zZyA9ICJDb25zaWRlciBhbiBBUEkgbGlrZSBoZWxwKCksIHdoaWNoIHByaW50cyBkaXJlY3RseSB0byBzdGRvdXQiCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbXNnKQorCisgICAgZGVmIHRlc3RfZW50ZXJfcmVzdWx0X2lzX3RhcmdldChzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZikgYXMgZW50ZXJfcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlbnRlcl9yZXN1bHQsIGYpCisKKyAgICBkZWYgdGVzdF9jbV9pc19yZXVzYWJsZShzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVfdG9fZiA9IHJlZGlyZWN0X3N0ZG91dChmKQorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIikKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3cml0ZV90b19mID0gcmVkaXJlY3Rfc3Rkb3V0KGYpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiKQorICAgICAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgICAgIHByaW50KCJXb3JsZCEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkhlbGxvIFdvcmxkIVxuIikKKworCitjbGFzcyBUZXN0U3VwcHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHN1cHByZXNzLl9fZG9jX18KKyAgICAgICAgb2JqID0gc3VwcHJlc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZXN1bHRfZnJvbV9lbnRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhWYWx1ZUVycm9yKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlbnRlcl9yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCA1KSwgMzIpCisKKyAgICBkZWYgdGVzdF9leGFjdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2hpZXJhcmNoeShzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhMb29rdXBFcnJvcik6CisgICAgICAgICAgICAnSGVsbG8nWzUwXQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwcmVzcygpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZXhjZXB0aW9uX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoWmVyb0RpdmlzaW9uRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBpZ25vcmVfZXhjZXB0aW9ucyA9IHN1cHByZXNzKEV4Y2VwdGlvbikKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIGxlbig1KQorICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOiAjIENoZWNrIG5lc3RlZCB1c2FnZQorICAgICAgICAgICAgICAgIGxlbig1KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQppbmRleCA1Njc2NjY4Li5jM2ViN2ZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTYsOSArNiwxMSBAQAogIyByaXAgb2ZmIGFsbCBpbnRlcmVzdGluZyBzdHVmZiBmcm9tIHRlc3RfcHJvZmlsZQogaW1wb3J0IGNQcm9maWxlCiBmcm9tIHRlc3QudGVzdF9wcm9maWxlIGltcG9ydCBQcm9maWxlVGVzdCwgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQKK2Zyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMKIAogY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKICAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gY1Byb2ZpbGUKICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgbWF4fSIKIAogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKaW5kZXggY2ZiNzM0MS4uNjI0ZDcwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CkBAIC0xLDExICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgICMgdGhpcyBpbXBvcnQgd2lsbCByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiBfY3J5cHQgZG9lc24ndCBleGlzdCwKLSAgICAjIHNvIGl0IGhhcyB0byBiZSBkb25lIGluIHNldFVwTW9kdWxlIGZvciB0ZXN0IGRpc2NvdmVyeSB0byB3b3JrCi0gICAgZ2xvYmFsIGNyeXB0Ci0gICAgY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKK2NyeXB0ID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjcnlwdCcpCiAKIGNsYXNzIENyeXB0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nzdi5weSBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CmluZGV4IDQ3OWViZDkuLjAxZmJhMjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAxMDsKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKICAgICAgICAgICAgICAgICBpZiBpID4gMjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLl93cml0ZV90ZXN0LCBCYWRMaXN0KCksICcnKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIEJhZExpc3QoKSwgJycpCiAgICAgICAgIGNsYXNzIEJhZEl0ZW06CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2JpZ2ZpZWxkKHNlbGYpOgogICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBidWZmZXIgcmVhbGxvYyBmdW5jdGlvbmFsaXR5CkBAIC0xODYsOSArMTg2LDkgQEAKICAgICBkZWYgdGVzdF93cml0ZXJvd3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEJyb2tlbkZpbGU6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYnVmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKEJyb2tlbkZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaikKQEAgLTMwOCw2ICszMDgsMTUgQEAKICAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaikpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCByb3dzW2ldKQogCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2VzY2FwZWRfdW5xdW90ZWRfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgidysiLCBuZXdsaW5lPScnKSBhcyBmaWxlb2JqOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsZXNjYXBlY2hhcj0iXFwiKQorICAgICAgICAgICAgcm93cyA9IFtbJ2FcbmInLCdiJ10sWydjJywneFxyXG5kJ11dCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3dzKHJvd3MpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaixxdW90aW5nPWNzdi5RVU9URV9OT05FLGVzY2FwZWNoYXI9IlxcIikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LHJvd3NbaV0pCisKIGNsYXNzIFRlc3REaWFsZWN0UmVnaXN0cnkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X2JhZGFyZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2Lmxpc3RfZGlhbGVjdHMsIE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CmluZGV4IDI0M2EwYWYuLjFjNTc3NzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHJldHVybiBrZXlzCiAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5tb2R1bGUuZXJyb3IsIElPRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgT1NFcnJvcikpCiAKICAgICBkZWYgdGVzdF9hbnlkYm1fbm90X2V4aXN0aW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYm0uZXJyb3IsIGRibS5vcGVuLCBfZm5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQppbmRleCAyMDhiYzRjLi45ZmQ4Y2RlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKQEAgLTE4NCw2ICsxODQsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsiZHVtYmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImR1bWJkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgIyBUaGlzIGN1cnJlbnRseSBqdXN0IHJhaXNlcyBBdHRyaWJ1dGVFcnJvciByYXRoZXIgdGhhbiBhIHNwZWNpZmljCisgICAgICAgICMgZXhjZXB0aW9uIGxpa2UgdGhlIEdOVSBvciBOREJNIGJhc2VkIGltcGxlbWVudGF0aW9ucy4gU2VlCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5Mzg1IGZvciBkZXRhaWxzLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBkYi5rZXlzKCkKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgX2RlbGV0ZV9maWxlcygpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQppbmRleCA0ZmI2NmM1Li5hNzgwOGY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CkBAIC04MSw2ICs4MSwxNyBAQAogICAgICAgICBzaXplMiA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUxID4gc2l6ZTIgPj0gc2l6ZTApCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAnYycpIGFzIGRiOgorICAgICAgICAgICAgZGJbImdkYm0gY29udGV4dCBtYW5hZ2VyIl0gPSAiY29udGV4dCBtYW5hZ2VyIgorCisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImdkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhnZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJHREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQppbmRleCBiNTdlMWYwLi4yMjkxNTYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKQEAgLTM3LDUgKzM3LDE4IEBACiAgICAgICAgICAgICBleGNlcHQgZXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsibmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IibmRibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRibS5uZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkIikKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CmluZGV4IDU0YTM2MTUuLjYzNzhlZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKQEAgLTI5MCw3ICsyOTAsNiBAQAogICAgICAgICBnbG9iYWwgc2tpcF9leHBlY3RlZAogICAgICAgICBpZiBza2lwX2V4cGVjdGVkOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgnXHJcbicsICcnKS5yZXBsYWNlKCdcbicsICcnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKaW5kZXggYTg0ODdkMi4uN2JmZjFkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC01NDMsOCArNTQzLDggQEAKICAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgogICAgICAgICBjaGVjayhkZXF1ZSgpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCi0gICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQotICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLy8gMiArIDEpKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLSAxKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiBCTE9DS0xFTiksIGJhc2VzaXplICsgMiAqIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKDQyICogQkxPQ0tMRU4pKSwgYmFzZXNpemUgKyA0MyAqIGJsb2Nrc2l6ZSkKIAogY2xhc3MgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3ModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weSBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKaW5kZXggODk0MGFlOS4uZjA4YTNkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CkBAIC0xLDggKzEsMTEgQEAKIGltcG9ydCBidWlsdGlucworaW1wb3J0IGNvcHlyZWcKIGltcG9ydCBnYworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1hdGgKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwotaW1wb3J0IG1hdGgKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdlYWtyZWYKIApAQCAtMTc5Nyw2ICsxODAwLDcgQEAKICAgICAgICAgICAgICgiX190cnVuY19fIiwgaW50LCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgKCJfX2NlaWxfXyIsIG1hdGguY2VpbCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgICgiX19kaXJfXyIsIGRpciwgZW1wdHlfc2VxLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX3JvdW5kX18iLCByb3VuZCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgIF0KIAogICAgICAgICBjbGFzcyBDaGVja2VyKG9iamVjdCk6CkBAIC0yMjU3LDcgKzIyNjEsOSBAQAogICAgICAgICBtaW5zdGFuY2UgPSBNKCJtIikKICAgICAgICAgbWluc3RhbmNlLmIgPSAyCiAgICAgICAgIG1pbnN0YW5jZS5hID0gMQotICAgICAgICBuYW1lcyA9IFt4IGZvciB4IGluIGRpcihtaW5zdGFuY2UpIGlmIHggbm90IGluIFsiX19uYW1lX18iLCAiX19kb2NfXyJdXQorICAgICAgICBkZWZhdWx0X2F0dHJpYnV0ZXMgPSBbJ19fbmFtZV9fJywgJ19fZG9jX18nLCAnX19wYWNrYWdlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19zcGVjX18nXQorICAgICAgICBuYW1lcyA9IFt4IGZvciB4IGluIGRpcihtaW5zdGFuY2UpIGlmIHggbm90IGluIGRlZmF1bHRfYXR0cmlidXRlc10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcywgWydhJywgJ2InXSkKIAogICAgICAgICBjbGFzcyBNMihNKToKQEAgLTMxNTAsMTc2ICszMTU2LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYW5fZGVsZXRlX2RpY3QoZSksIGNhbl9kZWxldGVfZGljdChWYWx1ZUVycm9yKCkpKQogCi0gICAgZGVmIHRlc3RfcGlja2xlcyhzZWxmKToKLSAgICAgICAgIyBUZXN0aW5nIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLi4uCi0gICAgICAgIGltcG9ydCBwaWNrbGUKLQotICAgICAgICBkZWYgc29ydGVkaXRlbXMoZCk6Ci0gICAgICAgICAgICBMID0gbGlzdChkLml0ZW1zKCkpCi0gICAgICAgICAgICBMLnNvcnQoKQotICAgICAgICAgICAgcmV0dXJuIEwKLQotICAgICAgICBnbG9iYWwgQwotICAgICAgICBjbGFzcyBDKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoQywgc2VsZikuX19pbml0X18oKQotICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKLSAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCi0gICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDKCVyLCAlcikiICUgKHNlbGYuYSwgc2VsZi5iKQotCi0gICAgICAgIGdsb2JhbCBDMQotICAgICAgICBjbGFzcyBDMShsaXN0KToKLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMxLCBjbHMpLl9fbmV3X18oY2xzKQotICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5hLCBzZWxmLmIpCi0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMxKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgbGlzdChzZWxmKSkKLQotICAgICAgICBnbG9iYWwgQzIKLSAgICAgICAgY2xhc3MgQzIoaW50KToKLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYiwgdmFsPTApOgotICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihDMiwgY2xzKS5fX25ld19fKGNscywgdmFsKQotICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiLCB2YWw9MCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMyKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQotCi0gICAgICAgIGdsb2JhbCBDMwotICAgICAgICBjbGFzcyBDMyhvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KLSAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9vCi0gICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KLQotICAgICAgICBnbG9iYWwgQzRjbGFzc2ljLCBDNAotICAgICAgICBjbGFzcyBDNGNsYXNzaWM6ICMgY2xhc3NpYwotICAgICAgICAgICAgcGFzcwotICAgICAgICBjbGFzcyBDNChDNGNsYXNzaWMsIG9iamVjdCk6ICMgbWl4ZWQgaW5oZXJpdGFuY2UKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBmb3IgYmluIGluIDAsIDE6Ci0gICAgICAgICAgICBmb3IgY2xzIGluIEMsIEMxLCBDMjoKLSAgICAgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGNscywgYmluKQotICAgICAgICAgICAgICAgIGNsczIgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNsczIsIGNscykKLQotICAgICAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQotICAgICAgICAgICAgYiA9IEMyKCJoZWxsbyIsICJ3b3JsZCIsIDQyKQotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcygoYSwgYiksIGJpbikKLSAgICAgICAgICAgIHgsIHkgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2NsYXNzX18sIGEuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh4Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYS5fX2RpY3RfXykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeS5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGIuX19kaWN0X18pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHgpLCByZXByKGEpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQotICAgICAgICAgICAgIyBUZXN0IGZvciBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXyBvbiBuZXcgc3R5bGUgY2xhc3MKLSAgICAgICAgICAgIHUgPSBDMyg0MikKLSAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHModSwgYmluKQotICAgICAgICAgICAgdiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZm9vLCB2LmZvbykKLSAgICAgICAgICAgICMgVGVzdCBmb3IgcGlja2xhYmlsaXR5IG9mIGh5YnJpZCBjbGFzcwotICAgICAgICAgICAgdSA9IEM0KCkKLSAgICAgICAgICAgIHUuZm9vID0gNDIKLSAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHModSwgYmluKQotICAgICAgICAgICAgdiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZm9vLCB2LmZvbykKLQotICAgICAgICAjIFRlc3RpbmcgY29weS5kZWVwY29weSgpCi0gICAgICAgIGltcG9ydCBjb3B5Ci0gICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgotICAgICAgICAgICAgY2xzMiA9IGNvcHkuZGVlcGNvcHkoY2xzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjbHMyLCBjbHMpCi0KLSAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQotICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCi0gICAgICAgIHgsIHkgPSBjb3B5LmRlZXBjb3B5KChhLCBiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgYS5fX2NsYXNzX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeC5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGEuX19kaWN0X18pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh5Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYi5fX2RpY3RfXykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih4KSwgcmVwcihhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQotCi0gICAgZGVmIHRlc3RfcGlja2xlX3Nsb3RzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyAuLi4KLSAgICAgICAgaW1wb3J0IHBpY2tsZQotICAgICAgICAjIFBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18gYnV0IHdpdGhvdXQgX19nZXRzdGF0ZV9fIHNob3VsZCBmYWlsCi0gICAgICAgICMgKGlmIHVzaW5nIHByb3RvY29sIDAgb3IgMSkKLSAgICAgICAgZ2xvYmFsIEIsIEMsIEQsIEUKLSAgICAgICAgY2xhc3MgQihvYmplY3QpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBmb3IgYmFzZSBpbiBbb2JqZWN0LCBCXToKLSAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6Ci0gICAgICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KLSAgICAgICAgICAgIGNsYXNzIEQoQyk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCksIDApCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEMgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCksIDApCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEQgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQotICAgICAgICAgICAgIyBHaXZlIEMgYSBuaWNlIGdlbmVyaWMgX19nZXRzdGF0ZV9fIGFuZCBfX3NldHN0YXRlX18KLSAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6Ci0gICAgICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KLSAgICAgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0gc2VsZi5fX2RpY3RfXy5jb3B5KCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHt9Ci0gICAgICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fX2NsYXNzX18uX19tcm9fXzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzbiBpbiBjbHMuX19kaWN0X18uZ2V0KCdfX3Nsb3RzX18nLCAoKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW3NuXSA9IGdldGF0dHIoc2VsZiwgc24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkCi0gICAgICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBkKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gbGlzdChkLml0ZW1zKCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrLCB2KQotICAgICAgICAgICAgY2xhc3MgRChDKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAjIE5vdyBpdCBzaG91bGQgd29yawotICAgICAgICAgICAgeCA9IEMoKQotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEhhc0F0dHIoeSwgJ2EnKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIDQyKQotICAgICAgICAgICAgeCA9IEQoKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHguYiA9IDEwMAotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSArIHkuYiwgMTQyKQotICAgICAgICAgICAgIyBBIHN1YmNsYXNzIHRoYXQgYWRkcyBhIHNsb3Qgc2hvdWxkIGFsc28gd29yawotICAgICAgICAgICAgY2xhc3MgRShDKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2InXQotICAgICAgICAgICAgeCA9IEUoKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHguYiA9ICJmb28iCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hLCB4LmEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYiwgeC5iKQotCiAgICAgZGVmIHRlc3RfYmluYXJ5X29wZXJhdG9yX292ZXJyaWRlKHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgb3ZlcnJpZGVzIG9mIGJpbmFyeSBvcGVyYXRpb25zLi4uCiAgICAgICAgIGNsYXNzIEkoaW50KToKQEAgLTM3NDQsMTggKzM1ODAsOCBAQAogICAgICAgICAjIGJ1ZykuCiAgICAgICAgIGRlbCBjCiAKLSAgICAgICAgIyBJZiB0aGF0IGRpZG4ndCBibG93IHVwLCBpdCdzIGFsc28gaW50ZXJlc3RpbmcgdG8gc2VlIHdoZXRoZXIgY2xlYXJpbmcKLSAgICAgICAgIyB0aGUgbGFzdCBjb250YWluZXIgc2xvdCB3b3JrczogdGhhdCB3aWxsIGF0dGVtcHQgdG8gZGVsZXRlIGMgYWdhaW4sCi0gICAgICAgICMgd2hpY2ggd2lsbCBjYXVzZSBjIHRvIGdldCBhcHBlbmRlZCBiYWNrIHRvIHRoZSBjb250YWluZXIgYWdhaW4KLSAgICAgICAgIyAiZHVyaW5nIiB0aGUgZGVsLiAgKE9uIG5vbi1DUHl0aG9uIGltcGxlbWVudGF0aW9ucywgaG93ZXZlciwgX19kZWxfXwotICAgICAgICAjIGlzIHR5cGljYWxseSBub3QgY2FsbGVkIGFnYWluLikKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQotICAgICAgICBkZWwgQy5jb250YWluZXJbLTFdCi0gICAgICAgIGlmIHN1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKLSAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuY29udGFpbmVyWy0xXS5hdHRyLCA0MikKIAogICAgICAgICAjIE1ha2UgYyBtb3J0YWwgYWdhaW4sIHNvIHRoYXQgdGhlIHRlc3QgZnJhbWV3b3JrIHdpdGggLWwgZG9lc24ndCByZXBvcnQKICAgICAgICAgIyBpdCBhcyBhIGxlYWsuCkBAIC00NTM1LDYgKzQzNjEsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlLl9fZGljdF9fWydfX3F1YWxuYW1lX18nXS5fX3NldF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsICdPaW5rJykKIAorICAgICAgICBnbG9iYWwgWQorICAgICAgICBjbGFzcyBZOgorICAgICAgICAgICAgY2xhc3MgSW5zaWRlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLl9fcXVhbG5hbWVfXywgJ1knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuSW5zaWRlLl9fcXVhbG5hbWVfXywgJ1kuSW5zaWRlJykKKwogICAgIGRlZiB0ZXN0X3F1YWxuYW1lX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0geydfX3F1YWxuYW1lX18nOiAnc29tZS5uYW1lJ30KICAgICAgICAgdHAgPSB0eXBlKCdGb28nLCAoKSwgbnMpCkBAIC00NjkwLDExICs0NTIzLDQzOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgubXlrZXkyLCAnZnJvbSBCYXNlMicpCiAKIAorY2xhc3MgUGlja2xpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NoZWNrX3JlZHVjZShzZWxmLCBwcm90bywgb2JqLCBhcmdzPSgpLCBrd2FyZ3M9e30sIHN0YXRlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgbGlzdGl0ZW1zPU5vbmUsIGRpY3RpdGVtcz1Ob25lKToKKyAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9leF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwgYXJncywga3dhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwpICsgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlX3R5cGUgPSB0eXBlKG9iaikuX19iYXNlX18KKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IChjb3B5cmVnLl9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG9iaiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSBpZiBiYXNlX3R5cGUgaXMgb2JqZWN0IGVsc2UgYmFzZV90eXBlKG9iaikpKQorICAgICAgICAgICAgaWYgc3RhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlICs9IChzdGF0ZSwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX3JlZHVjZV9leF9fKHByb3RvKSwgcmVkdWNlX3ZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19yZWR1Y2VfXygpLCByZWR1Y2VfdmFsdWUpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHByb3RvY29scyA9IHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSkKKyAgICAgICAgYXJncyA9ICgtMTAxLCAic3BhbSIpCisgICAgICAgIGt3YXJncyA9IHsnYmFjb24nOiAtMjAxLCAnZmlzaCc6IC0zMDF9CisgICAgICAgIHN0YXRlID0geydjaGVlc2UnOiAtNDAxfQorCisgICAgICAgIGNsYXNzIEMxOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIG9iaiA9IEMxKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MsIHN0YXRlPXN0YXRlKQorCisgICAgICAgIGNsYXNzIEMyOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiYmFkIGFyZ3MiCisgICAgICAgIG9iaiA9IEMyKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKworICAgICAgICBjbGFzcyBDMzoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZ3MsIGt3YXJncykKKyAgICAgICAgb2JqID0gQzMoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncywga3dhcmdzKQorICAgICAgICAgICAgZWxpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM0OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywgImJhZCBkaWN0IikKKyAgICAgICAgY2xhc3MgQzU6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiYmFkIHR1cGxlIiwga3dhcmdzKQorICAgICAgICBjbGFzcyBDNjoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgY2xhc3MgQzc6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiYWQgYXJncyIKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGZvciBjbHMgaW4gQzQsIEM1LCBDNiwgQzc6CisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCkKKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM4OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywga3dhcmdzKQorICAgICAgICBvYmogPSBDOCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKyAgICAgICAgY2xhc3MgQzk6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCB7fSkKKyAgICAgICAgb2JqID0gQzkoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MpCisKKyAgICAgICAgY2xhc3MgQzEwOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEwKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzExOgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUKKyAgICAgICAgb2JqID0gQzExKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT1zdGF0ZSkKKworICAgICAgICBjbGFzcyBDMTI6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IGRpY3QiCisgICAgICAgIG9iaiA9IEMxMigpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgc3RhdGU9Im5vdCBkaWN0IikKKworICAgICAgICBjbGFzcyBDMTM6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEzKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBpZiBwcm90byA8IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNDoKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IHR1cGxlKHN0YXRlKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKQorCisgICAgICAgIG9iaiA9IEMxNCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT0oTm9uZSwgc3RhdGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNShkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQzE1KHsicXVlYmVjIjogLTYwMX0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgZGljdGl0ZW1zPWRpY3Qob2JqKSkKKworICAgICAgICBjbGFzcyBDMTYobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9iaiA9IEMxNihbInl1a29uIl0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgbGlzdGl0ZW1zPWxpc3Qob2JqKSkKKworICAgIGRlZiBfYXNzZXJ0X2lzX2NvcHkoc2VsZiwgb2JqLCBvYmpjb3B5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIHZlcmlmeSBpZiB0d28gb2JqZWN0cyBhcmUgY29waWVzIG9mIGVhY2ggb3RoZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAieyFyfSBpcyBub3QgYSBjb3B5IG9mIHshcn0iLmZvcm1hdChvYmosIG9iamNvcHkpCisgICAgICAgIGlmIHR5cGUob2JqKS5fX3JlcHJfXyBpcyBvYmplY3QuX19yZXByX186CisgICAgICAgICAgICAjIFdlIGhhdmUgdGhpcyBsaW1pdGF0aW9uIGZvciBub3cgYmVjYXVzZSB3ZSB1c2UgdGhlIG9iamVjdCdzIHJlcHIKKyAgICAgICAgICAgICMgdG8gaGVscCB1cyB2ZXJpZnkgdGhhdCB0aGUgdHdvIG9iamVjdHMgYXJlIGNvcGllcy4gVGhpcyBhbGxvd3MKKyAgICAgICAgICAgICMgdXMgdG8gZGVsZWdhdGUgdGhlIG5vbi1nZW5lcmljIHZlcmlmaWNhdGlvbiBsb2dpYyB0byB0aGUgb2JqZWN0cworICAgICAgICAgICAgIyB0aGVtc2VsdmVzLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigib2JqZWN0IHBhc3NlZCB0byBfYXNzZXJ0X2lzX2NvcHkgbXVzdCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSBfX3JlcHJfXyBtZXRob2QuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmosIG9iamNvcHksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShvYmopLCB0eXBlKG9iamNvcHkpLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fZGljdF9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX3Nsb3RzX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG9iai5fX3Nsb3RzX18sIG9iamNvcHkuX19zbG90c19fLCBtc2c9bXNnKQorICAgICAgICAgICAgZm9yIHNsb3QgaW4gb2JqLl9fc2xvdHNfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG9iaiwgc2xvdCksIGhhc2F0dHIob2JqY29weSwgc2xvdCksIG1zZz1tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG9iaiwgc2xvdCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKG9iamNvcHksIHNsb3QsIE5vbmUpLCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2JqKSwgcmVwcihvYmpjb3B5KSwgbXNnPW1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBtYW55IHBvc3NpYmxlIHBpY2tsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIFBpY2tsZUNvcGllcjoKKyAgICAgICAgICAgICJUaGlzIGNsYXNzIGNvcGllcyBvYmplY3QgdXNpbmcgcGlja2xlLiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90bywgZHVtcHMsIGxvYWRzKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb3RvID0gcHJvdG8KKyAgICAgICAgICAgICAgICBzZWxmLmR1bXBzID0gZHVtcHMKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzID0gbG9hZHMKKyAgICAgICAgICAgIGRlZiBjb3B5KHNlbGYsIG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHNlbGYucHJvdG8pKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgV2UgdHJ5IHRvIGJlIGFzIGRlc2NyaXB0aXZlIGFzIHBvc3NpYmxlIGhlcmUgc2luY2UgdGhpcyBpcworICAgICAgICAgICAgICAgICMgdGhlIHN0cmluZyB3aGljaCB3ZSB3aWxsIGFsbG93IHVzIHRvIHRlbGwgdGhlIHBpY2tsZQorICAgICAgICAgICAgICAgICMgY29uZmlndXJhdGlvbiB3ZSBhcmUgdXNpbmcgZHVyaW5nIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICByZXR1cm4gKCJQaWNrbGVDb3BpZXIocHJvdG89e30sIGR1bXBzPXt9Lnt9LCBsb2Fkcz17fS57fSkiCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYucHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMuX19tb2R1bGVfXywgc2VsZi5kdW1wcy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZHMuX19tb2R1bGVfXywgc2VsZi5sb2Fkcy5fX3F1YWxuYW1lX18pKQorICAgICAgICByZXR1cm4gKFBpY2tsZUNvcGllcigqYXJncykgZm9yIGFyZ3MgaW4KKyAgICAgICAgICAgICAgICAgICBpdGVydG9vbHMucHJvZHVjdChyYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUuZHVtcHMsIHBpY2tsZS5fZHVtcHN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUubG9hZHMsIHBpY2tsZS5fbG9hZHN9KSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9zbG90cyhzZWxmKToKKyAgICAgICAgIyBUZXN0cyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fLgorCisgICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkCisgICAgICAgICMgZmFpbCAoaWYgdXNpbmcgcHJvdG9jb2wgMCBvciAxKQorICAgICAgICBnbG9iYWwgQworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKKworICAgICAgICBnbG9iYWwgRAorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwaWNrbGUuZHVtcHMoRCgpLCAwKQorCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAiQSBjbGFzcyB3aXRoIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fIGltcGxlbWVudGVkLiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCB7fSkuY29weSgpCisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiB0eXBlKHNlbGYpLl9fbXJvX186CisgICAgICAgICAgICAgICAgICAgIGZvciBzbG90IGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtzbG90XSA9IGdldGF0dHIoc2VsZiwgc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlcygpPCVyPiIgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fX2dldHN0YXRlX18oKSkKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgb2YgYSBjbGFzcyB3aXRoIHNsb3RzLiIKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBnbG9iYWwgRQorICAgICAgICBjbGFzcyBFKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgd2l0aCBhbiBleHRyYSBzbG90LiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCisKKyAgICAgICAgIyBOb3cgaXQgc2hvdWxkIHdvcmsKKyAgICAgICAgZm9yIHBpY2tsZV9jb3BpZXIgaW4gc2VsZi5fZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAgeCA9IEMoKQorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgICAgIHggPSBEKCkKKyAgICAgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgICAgIHguYiA9IDEwMAorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeCA9IEUoKQorICAgICAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICAgICAgeC5iID0gImZvbyIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLgorICAgICAgICBnbG9iYWwgQzEKKyAgICAgICAgY2xhc3MgQzE6CisgICAgICAgICAgICAiVGhlIHN0YXRlIG9mIHRoaXMgY2xhc3MgaXMgY29weWFibGUgdmlhIGl0cyBpbnN0YW5jZSBkaWN0LiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gVHJ1ZQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMSglciwgJXIpIiAlIChzZWxmLmEsIHNlbGYuYikKKworICAgICAgICBnbG9iYWwgQzIKKyAgICAgICAgY2xhc3MgQzIobGlzdCk6CisgICAgICAgICAgICAiQSBsaXN0IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIpOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgIyBUaGlzIGhlbHBzIHRlc3RpbmcgdGhhdCBfX2luaXRfXyBpcyBub3QgY2FsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIHVucGlja2xpbmcgcHJvY2Vzcywgd2hpY2ggd291bGQgY2F1c2UgZXh0cmEgYXBwZW5kcy4KKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCgiY2hlZXNlIikKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5BUkdTCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMiglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEMzCisgICAgICAgIGNsYXNzIEMzKGxpc3QpOgorICAgICAgICAgICAgIkEgbGlzdCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRzdGF0ZV9fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgICMgVGhpcyBoZWxwcyB0ZXN0aW5nIHRoYXQgX19pbml0X18gaXMgbm90IGNhbGxlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgIyB1bnBpY2tsaW5nIHByb2Nlc3MsIHdoaWNoIHdvdWxkIGNhdXNlIGV4dHJhIGFwcGVuZHMuCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoImNoZWVzZSIpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIGEsIGIgPSBzdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMyglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEM0CisgICAgICAgIGNsYXNzIEM0KGludCk6CisgICAgICAgICAgICAiQW4gaW50IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKCJoZWxsbyIsICJ3b3JsZCIsIDEpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkM0KCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQorCisgICAgICAgIGdsb2JhbCBDNQorICAgICAgICBjbGFzcyBDNShpbnQpOgorICAgICAgICAgICAgIkFuIGludCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRuZXdhcmdzX2V4X18uIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgS1dBUkdTID0geyd2YWx1ZSc6IDN9CisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsICosIHZhbHVlPTApOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiAoY2xzLkFSR1MsIGNscy5LV0FSR1MpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDNSglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKKworICAgICAgICB0ZXN0X2NsYXNzZXMgPSAoQzEsIEMyLCBDMywgQzQsIEM1KQorICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIHBpY2tsZQorICAgICAgICBwaWNrbGVfY29waWVycyA9IHNlbGYuX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCkKKyAgICAgICAgZm9yIGNscywgcGlja2xlX2NvcGllciBpbiBpdGVydG9vbHMucHJvZHVjdCh0ZXN0X2NsYXNzZXMsIHBpY2tsZV9jb3BpZXJzKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMsIHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAga3dhcmdzID0gZ2V0YXR0cihjbHMsICdLV0FSR1MnLCB7fSkKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKmNscy5BUkdTLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICBwcm90byA9IHBpY2tsZV9jb3BpZXIucHJvdG8KKyAgICAgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNCBhbmQgaGFzYXR0cihjbHMsICdfX2dldG5ld2FyZ3NfZXhfXycpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlX2NvcGllci5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9iamNvcHkgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyIGFuZCBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqY29weSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5MikKKworICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIGNvcHkuZGVlcGNvcHkoKQorICAgICAgICBmb3IgY2xzIGluIHRlc3RfY2xhc3NlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMpOgorICAgICAgICAgICAgICAgIGt3YXJncyA9IGdldGF0dHIoY2xzLCAnS1dBUkdTJywge30pCisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCpjbHMuQVJHUywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgIyBYWFg6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBjb3B5IG1vZHVsZSB0byBzdXBwb3J0IFBFUCAzMTU0J3MKKyAgICAgICAgICAgICAgICAjIHJlZHVjZSBwcm90b2NvbCA0LgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAnX19nZXRuZXdhcmdzX2V4X18nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBvYmpjb3B5ID0gZGVlcGNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBkZWVwY29weShvYmpjb3B5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkyKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIFJ1biBhbGwgbG9jYWwgdGVzdCBjYXNlcywgd2l0aCBQVHlwZXNMb25nSW5pdFRlc3QgZmlyc3QuCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUFR5cGVzTG9uZ0luaXRUZXN0LCBPcGVyYXRvcnNUZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzUHJvcGVydGllc0FuZE1ldGhvZHMsIERpY3RQcm94eVRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NUZXN0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjVGVzdHMsIFBpY2tsaW5nVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQppbmRleCBiZWY0ZTE4Li40MGViZWVlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CkBAIC0yLDEzICsyLDE3IEBACiAKICMgSW5pdGlhbCB0ZXN0cyBhcmUgY29waWVkIGFzIGlzIGZyb20gInRlc3RfcG9sbC5weSIKIAotaW1wb3J0IG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QsIHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAogCiB0cnk6CiAgICAgc2VsZWN0LmRldnBvbGwKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LmRldnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9kZXZwb2xsIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LmRldnBvbGwgbm90IGRlZmluZWQiKQogCiAKIGRlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKQEAgLTg3LDYgKzkxLDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIDEgPDwgNjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIDEgPDwgNjQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgZGV2cG9sbCA9IHNlbGVjdC5kZXZwb2xsKCkKKworICAgICAgICAjIHRlc3QgZmlsZW5vKCkgbWV0aG9kIGFuZCBjbG9zZWQgYXR0cmlidXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXZwb2xsLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGV2cG9sbC5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAgZGV2cG9sbC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXZwb2xsLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgZGV2cG9sbC5jbG9zZSgpCisKKyAgICAgICAgIyBvcGVyYXRpb25zIG11c3QgZmFpbCB3aXRoIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIC4uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwubW9kaWZ5LCBmZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5wb2xsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnJlZ2lzdGVyLCBmZCwgZmQsIHNlbGVjdC5QT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwudW5yZWdpc3RlciwgZmQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGRldnBvbGwgPSBzZWxlY3QuZGV2cG9sbCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChkZXZwb2xsLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShkZXZwb2xsLmZpbGVubygpKSwgRmFsc2UpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChEZXZQb2xsVGVzdHMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKaW5kZXggZDEzNTViYi4uOTRkNmJlNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKQEAgLTEsMTEgKzEsMjkgQEAKICMgTWluaW1hbCB0ZXN0cyBmb3IgZGlzIG1vZHVsZQogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjYXB0dXJlZF9zdGRvdXQKK2Zyb20gdGVzdC5ieXRlY29kZV9oZWxwZXIgaW1wb3J0IEJ5dGVjb2RlVGVzdENhc2UKIGltcG9ydCBkaWZmbGliCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKIGltcG9ydCBkaXMKIGltcG9ydCBpbworaW1wb3J0IHR5cGVzCitpbXBvcnQgY29udGV4dGxpYgorCitkZWYgZ2V0X3RiKCk6CisgICAgZGVmIF9lcnJvcigpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICByZXR1cm4gdGIKKworICAgIHRiID0gX2Vycm9yKCkKKyAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICByZXR1cm4gdGIKKworVFJBQ0VCQUNLX0NPREUgPSBnZXRfdGIoKS50Yl9mcmFtZS5mX2NvZGUKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjIsMTIgKzQwLDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OCwxMSArNjYsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC0xNzEsMzMgKzE4OSw2MyBAQAogICAgICAgICAgICAgIDI1IFJFVFVSTl9WQUxVRQogIiIiCiAKK2Rpc190cmFjZWJhY2sgPSAiIiJcCisgJS00ZCAgICAgICAgIDAgU0VUVVBfRVhDRVBUICAgICAgICAgICAgMTIgKHRvIDE1KQorCisgJS00ZCAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgICAgIDYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDApCisgICAgLS0+ICAgICAgIDkgQklOQVJZX1RSVUVfRElWSURFCisgICAgICAgICAgICAgMTAgUE9QX1RPUAorICAgICAgICAgICAgIDExIFBPUF9CTE9DSworICAgICAgICAgICAgIDEyIEpVTVBfRk9SV0FSRCAgICAgICAgICAgIDQ2ICh0byA2MSkKKworICUtNGQgICA+PiAgIDE1IERVUF9UT1AKKyAgICAgICAgICAgICAxNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoRXhjZXB0aW9uKQorICAgICAgICAgICAgIDE5IENPTVBBUkVfT1AgICAgICAgICAgICAgIDEwIChleGNlcHRpb24gbWF0Y2gpCisgICAgICAgICAgICAgMjIgUE9QX0pVTVBfSUZfRkFMU0UgICAgICAgNjAKKyAgICAgICAgICAgICAyNSBQT1BfVE9QCisgICAgICAgICAgICAgMjYgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgMjkgUE9QX1RPUAorICAgICAgICAgICAgIDMwIFNFVFVQX0ZJTkFMTFkgICAgICAgICAgIDE0ICh0byA0NykKKworICUtNGQgICAgICAgIDMzIExPQURfRkFTVCAgICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDM2IExPQURfQVRUUiAgICAgICAgICAgICAgICAxIChfX3RyYWNlYmFja19fKQorICAgICAgICAgICAgIDM5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAxICh0YikKKyAgICAgICAgICAgICA0MiBQT1BfQkxPQ0sKKyAgICAgICAgICAgICA0MyBQT1BfRVhDRVBUCisgICAgICAgICAgICAgNDQgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgID4+ICAgNDcgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgICAgICAgNTAgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgNTMgREVMRVRFX0ZBU1QgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgNTYgRU5EX0ZJTkFMTFkKKyAgICAgICAgICAgICA1NyBKVU1QX0ZPUldBUkQgICAgICAgICAgICAgMSAodG8gNjEpCisgICAgICAgID4+ICAgNjAgRU5EX0ZJTkFMTFkKKworICUtNGQgICA+PiAgIDYxIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICh0YikKKyAgICAgICAgICAgICA2NCBSRVRVUk5fVkFMVUUKKyIiIiAlIChUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDEsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAyLAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgMywKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDQsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyA1KQorCiBjbGFzcyBEaXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmx5KHNlbGYsIGZ1bmMsIGxhc3RpPS0xLCB3cmFwcGVyPVRydWUpOgotICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQotICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgc3lzLnN0ZG91dCA9IHMKLSAgICAgICAgdHJ5OgorICAgICAgICAjIFdlIHdhbnQgdG8gdGVzdCB0aGUgZGVmYXVsdCBwcmludGluZyBiZWhhdmlvdXIsIG5vdCB0aGUgZmlsZSBhcmcKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KG91dHB1dCk6CiAgICAgICAgICAgICBpZiB3cmFwcGVyOgogICAgICAgICAgICAgICAgIGRpcy5kaXMoZnVuYykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGlzLmRpc2Fzc2VtYmxlKGZ1bmMsIGxhc3RpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0Ci0gICAgICAgICMgVHJpbSB0cmFpbGluZyBibGFua3MgKGlmIGFueSkuCi0gICAgICAgIHJldHVybiBbbGluZS5yc3RyaXAoKSBmb3IgbGluZSBpbiBzLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpXQorICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKIAogICAgIGRlZiBnZXRfZGlzYXNzZW1ibGVfYXNfc3RyaW5nKHNlbGYsIGZ1bmMsIGxhc3RpPS0xKToKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jLCBsYXN0aSwgRmFsc2UpKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYywgbGFzdGksIEZhbHNlKQogCiAgICAgZGVmIGRvX2Rpc2Fzc2VtYmx5X3Rlc3Qoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgotICAgICAgICBsaW5lcyA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMpCi0gICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuc3BsaXRsaW5lcygpCi0gICAgICAgIGlmIGV4cGVjdGVkICE9IGxpbmVzOgotICAgICAgICAgICAgc2VsZi5mYWlsKAotICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKwotICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfb3BtYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJOT1AiXSwgOSkKQEAgLTI4OCwzNSArMzM2LDM1IEBACiAgICAgZGVmIHRlc3RfZGlzX29iamVjdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuZGlzLCBvYmplY3QoKSkKIAorY2xhc3MgRGlzV2l0aEZpbGVUZXN0cyhEaXNUZXN0cyk6CisKKyAgICAjIFJ1biB0aGUgdGVzdHMgYWdhaW4sIHVzaW5nIHRoZSBmaWxlIGFyZyBpbnN0ZWFkIG9mIHByaW50CisgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBpZiB3cmFwcGVyOgorICAgICAgICAgICAgZGlzLmRpcyhmdW5jLCBmaWxlPW91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcy5kaXNhc3NlbWJsZShmdW5jLCBsYXN0aSwgZmlsZT1vdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKKwogY29kZV9pbmZvX2NvZGVfaW5mbyA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICBjb2RlX2luZm8KIEZpbGVuYW1lOiAgICAgICAgICAoLiopCiBBcmd1bWVudCBjb3VudDogICAgMQogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAxCi1TdGFjayBzaXplOiAgICAgICAgNAorU3RhY2sgc2l6ZTogICAgICAgIDMKIEZsYWdzOiAgICAgICAgICAgICBPUFRJTUlaRUQsIE5FV0xPQ0FMUywgTk9GUkVFCiBDb25zdGFudHM6CiAgICAwOiAlcgotICAgMTogJ19fZnVuY19fJwotICAgMjogJ19fY29kZV9fJwotICAgMzogJzxjb2RlX2luZm8+JwotICAgNDogJ2NvX2NvZGUnCi0gICA1OiAiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJSVzIG9iamVjdHMiCi0lc05hbWVzOgotICAgMDogaGFzYXR0cgotICAgMTogX19mdW5jX18KLSAgIDI6IF9fY29kZV9fCi0gICAzOiBpc2luc3RhbmNlCi0gICA0OiBzdHIKLSAgIDU6IF90cnlfY29tcGlsZQotICAgNjogX2Zvcm1hdF9jb2RlX2luZm8KLSAgIDc6IFR5cGVFcnJvcgotICAgODogdHlwZQotICAgOTogX19uYW1lX18KK05hbWVzOgorICAgMDogX2Zvcm1hdF9jb2RlX2luZm8KKyAgIDE6IF9nZXRfY29kZV9vYmplY3QKIFZhcmlhYmxlIG5hbWVzOgotICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCAnICAgNjogTm9uZVxuJykKLSAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCAnJykpCisgICAwOiB4IiIiICUgKCgnRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLicsKQorICAgICAgICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAyIGVsc2UgKE5vbmUsKSkKIAogQHN0YXRpY21ldGhvZAogZGVmIHRyaWNreSh4LCB5LCB6PVRydWUsICphcmdzLCBjLCBkLCBlPVtdLCAqKmt3ZHMpOgpAQCAtMzgwLDcgKzQyOCw3IEBACiAKIGNvZGVfaW5mb19leHByX3N0ciA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICA8bW9kdWxlPgotRmlsZW5hbWU6ICAgICAgICAgIDxjb2RlX2luZm8+CitGaWxlbmFtZTogICAgICAgICAgPGRpc2Fzc2VtYmx5PgogQXJndW1lbnQgY291bnQ6ICAgIDAKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMApAQCAtMzkzLDcgKzQ0MSw3IEBACiAKIGNvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQwNyw3ICs0NTUsNyBAQAogCiBjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQ0MSw2ICs0ODksOSBAQAogICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgZGlzLnNob3dfY29kZSh4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQrIlxuIikKKyAgICAgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCwgZmlsZT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dC5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2NvZGVfaW5mb19vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLmNvZGVfaW5mbywgb2JqZWN0KCkpCkBAIC00NDksOCArNTAwLDMzNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5wcmV0dHlfZmxhZ3MoMCksICcweDAnKQogCiAKKyMgRm9kZGVyIGZvciBpbnN0cnVjdGlvbiBpbnRyb3NwZWN0aW9uIHRlc3RzCisjICAgRWRpdGluZyBhbnkgb2YgdGhlc2UgbWF5IHJlcXVpcmUgcmVjYWxjdWxhdGluZyB0aGUgZXhwZWN0ZWQgb3V0cHV0CitkZWYgb3V0ZXIoYT0xLCBiPTIpOgorICAgIGRlZiBmKGM9MywgZD00KToKKyAgICAgICAgZGVmIGlubmVyKGU9NSwgZj02KToKKyAgICAgICAgICAgIHByaW50KGEsIGIsIGMsIGQsIGUsIGYpCisgICAgICAgIHByaW50KGEsIGIsIGMsIGQpCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHByaW50KGEsIGIsICcnLCAxLCBbXSwge30sICJIZWxsbyB3b3JsZCEiKQorICAgIHJldHVybiBmCisKK2RlZiBqdW1weSgpOgorICAgICMgVGhpcyB3b24ndCBhY3R1YWxseSBydW4gKGJ1dCB0aGF0J3MgT0ssIHdlIG9ubHkgZGlzYXNzZW1ibGUgaXQpCisgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICBwcmludChpKQorICAgICAgICBpZiBpIDwgNDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiSSBjYW4gaGF6IGVsc2UgY2xhdXNlPyIpCisgICAgd2hpbGUgaToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaSAtPSAxCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHByaW50KCJXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/IikKKyAgICB0cnk6CisgICAgICAgIDEgLyAwCisgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICBwcmludCgiSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLiIpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBpIGFzIGRvZGd5OgorICAgICAgICAgICAgcHJpbnQoIk5ldmVyIHJlYWNoIHRoaXMiKQorICAgIGZpbmFsbHk6CisgICAgICAgIHByaW50KCJPSywgbm93IHdlJ3JlIGRvbmUiKQorCisjIEVuZCBmb2RkZXIgZm9yIG9waW5mbyBnZW5lcmF0aW9uIHRlc3RzCitleHBlY3RlZF9vdXRlcl9saW5lID0gMQorX2xpbmVfb2Zmc2V0ID0gb3V0ZXIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gLSAxCitjb2RlX29iamVjdF9mID0gb3V0ZXIuX19jb2RlX18uY29fY29uc3RzWzNdCitleHBlY3RlZF9mX2xpbmUgPSBjb2RlX29iamVjdF9mLmNvX2ZpcnN0bGluZW5vIC0gX2xpbmVfb2Zmc2V0Citjb2RlX29iamVjdF9pbm5lciA9IGNvZGVfb2JqZWN0X2YuY29fY29uc3RzWzNdCitleHBlY3RlZF9pbm5lcl9saW5lID0gY29kZV9vYmplY3RfaW5uZXIuY29fZmlyc3RsaW5lbm8gLSBfbGluZV9vZmZzZXQKK2V4cGVjdGVkX2p1bXB5X2xpbmUgPSAxCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdXNlZnVsIHRvIHJlZ2VuZXJhdGUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgYWZ0ZXIKKyMgZWl0aGVyIHRoZSBmb2RkZXIgaXMgbW9kaWZpZWQgb3IgdGhlIGJ5dGVjb2RlIGdlbmVyYXRpb24gY2hhbmdlcworIyBBZnRlciByZWdlbmVyYXRpb24sIHVwZGF0ZSB0aGUgcmVmZXJlbmNlcyB0byBjb2RlX29iamVjdF9mIGFuZAorIyBjb2RlX29iamVjdF9pbm5lciBiZWZvcmUgcmVydW5uaW5nIHRoZSB0ZXN0cworCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19vdXRlciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fZiA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSgpLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19pbm5lciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2p1bXB5ID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorCisKK0luc3RydWN0aW9uID0gZGlzLkluc3RydWN0aW9uCitleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9MywgYXJncmVwcj0nMycsIG9mZnNldD0wLCBzdGFydHNfbGluZT0yLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9UVVBMRScsIG9wY29kZT0xMDIsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9Y29kZV9vYmplY3RfZiwgYXJncmVwcj1yZXByKGNvZGVfb2JqZWN0X2YpLCBvZmZzZXQ9MTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mJyIsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9JycsIGFyZ3JlcHI9IicnIiwgb2Zmc2V0PTM2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0zOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX0xJU1QnLCBvcGNvZGU9MTAzLCBhcmc9MCwgYXJndmFsPTAsIGFyZ3JlcHI9JycsIG9mZnNldD00Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX01BUCcsIG9wY29kZT0xMDUsIGFyZz0wLCBhcmd2YWw9MCwgYXJncmVwcj0nJywgb2Zmc2V0PTQ1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9J0hlbGxvIHdvcmxkIScsIGFyZ3JlcHI9IidIZWxsbyB3b3JsZCEnIiwgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz03LCBhcmd2YWw9NywgYXJncmVwcj0nNyBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MiwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD01NSwgc3RhcnRzX2xpbmU9OCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworZXhwZWN0ZWRfb3BpbmZvX2YgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9NSwgYXJncmVwcj0nNScsIG9mZnNldD0wLCBzdGFydHNfbGluZT0zLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0zLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MCwgYXJndmFsPSdjJywgYXJncmVwcj0nYycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfVFVQTEUnLCBvcGNvZGU9MTAyLCBhcmc9NCwgYXJndmFsPTQsIGFyZ3JlcHI9JycsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPWNvZGVfb2JqZWN0X2lubmVyLCBhcmdyZXByPXJlcHIoY29kZV9vYmplY3RfaW5uZXIpLCBvZmZzZXQ9MjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZi48bG9jYWxzPi5pbm5lcicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mLjxsb2NhbHM+LmlubmVyJyIsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9MzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MzMsIHN0YXJ0c19saW5lPTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9MzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTMsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9MzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9NDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTEsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9NDUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTQsIGFyZ3ZhbD00LCBhcmdyZXByPSc0IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9NTIsIHN0YXJ0c19saW5lPTYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19pbm5lciA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9NCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MywgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2UnLCBhcmdyZXByPSdlJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTEsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTYsIGFyZ3ZhbD02LCBhcmdyZXByPSc2IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19qdW1weSA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9NzcsIGFyZ3JlcHI9J3RvIDc3Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3JhbmdlJywgYXJncmVwcj0ncmFuZ2UnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTEwLCBhcmdyZXByPScxMCcsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nR0VUX0lURVInLCBvcGNvZGU9NjgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRk9SX0lURVInLCBvcGNvZGU9OTMsIGFyZz01MCwgYXJndmFsPTY2LCBhcmdyZXByPSd0byA2NicsIG9mZnNldD0xMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTE2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE5LCBzdGFydHNfbGluZT00LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTI5LCBzdGFydHNfbGluZT01LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0zNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTQ3LCBhcmd2YWw9NDcsIGFyZ3JlcHI9JycsIG9mZnNldD0zOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTQxLCBzdGFydHNfbGluZT02LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD00NywgYXJncmVwcj0ndG8gNDcnLCBvZmZzZXQ9NDQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD00Nywgc3RhcnRzX2xpbmU9NywgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD01MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD01Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD01Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JSRUFLX0xPT1AnLCBvcGNvZGU9ODAsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU5LCBzdGFydHNfbGluZT04LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD02Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD02Nywgc3RhcnRzX2xpbmU9MTAsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nSSBjYW4gaGF6IGVsc2UgY2xhdXNlPycsIGFyZ3JlcHI9IidJIGNhbiBoYXogZWxzZSBjbGF1c2U/JyIsIG9mZnNldD03MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz03NCwgYXJndmFsPTE1NCwgYXJncmVwcj0ndG8gMTU0Jywgb2Zmc2V0PTc3LCBzdGFydHNfbGluZT0xMSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9ODAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE0MywgYXJndmFsPTE0MywgYXJncmVwcj0nJywgb2Zmc2V0PTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTg2LCBzdGFydHNfbGluZT0xMiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTg5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9OTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD05Niwgc3RhcnRzX2xpbmU9MTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSU5QTEFDRV9TVUJUUkFDVCcsIG9wY29kZT01NiwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTAyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwNiwgc3RhcnRzX2xpbmU9MTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTEwOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD0xMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xMjQsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTgsIHN0YXJ0c19saW5lPTE1LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9J3RvIDEyNCcsIG9mZnNldD0xMjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMjQsIHN0YXJ0c19saW5lPTE2LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTEyNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0xMzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTM2LCBzdGFydHNfbGluZT0xNywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTEzNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTE0MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTQzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTQ0LCBzdGFydHNfbGluZT0xOSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NiwgYXJndmFsPSdXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/JywgYXJncmVwcj0iJ1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nIiwgb2Zmc2V0PTE0Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9GSU5BTExZJywgb3Bjb2RlPTEyMiwgYXJnPTcyLCBhcmd2YWw9MjI5LCBhcmdyZXByPSd0byAyMjknLCBvZmZzZXQ9MTU0LCBzdGFydHNfbGluZT0yMCwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfRVhDRVBUJywgb3Bjb2RlPTEyMSwgYXJnPTEyLCBhcmd2YWw9MTcyLCBhcmdyZXByPSd0byAxNzInLCBvZmZzZXQ9MTU3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0xNjAsIHN0YXJ0c19saW5lPTIxLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9MCwgYXJncmVwcj0nMCcsIG9mZnNldD0xNjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCSU5BUllfVFJVRV9ESVZJREUnLCBvcGNvZGU9MjcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjgsIGFyZ3ZhbD0yMDAsIGFyZ3JlcHI9J3RvIDIwMCcsIG9mZnNldD0xNjksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdEVVBfVE9QJywgb3Bjb2RlPTQsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3Miwgc3RhcnRzX2xpbmU9MjIsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTIsIGFyZ3ZhbD0nWmVyb0RpdmlzaW9uRXJyb3InLCBhcmdyZXByPSdaZXJvRGl2aXNpb25FcnJvcicsIG9mZnNldD0xNzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTEwLCBhcmd2YWw9J2V4Y2VwdGlvbiBtYXRjaCcsIGFyZ3JlcHI9J2V4Y2VwdGlvbiBtYXRjaCcsIG9mZnNldD0xNzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xOTksIGFyZ3ZhbD0xOTksIGFyZ3JlcHI9JycsIG9mZnNldD0xNzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTg1LCBzdGFydHNfbGluZT0yMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OCwgYXJndmFsPSdIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJywgYXJncmVwcj0iJ0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nIiwgb2Zmc2V0PTE4OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTkxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfRVhDRVBUJywgb3Bjb2RlPTg5LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjYsIGFyZ3ZhbD0yMjUsIGFyZ3JlcHI9J3RvIDIyNScsIG9mZnNldD0xOTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yMDAsIHN0YXJ0c19saW5lPTI1LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9XSVRIJywgb3Bjb2RlPTE0MywgYXJnPTE3LCBhcmd2YWw9MjIzLCBhcmdyZXByPSd0byAyMjMnLCBvZmZzZXQ9MjAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0xLCBhcmd2YWw9J2RvZGd5JywgYXJncmVwcj0nZG9kZ3knLCBvZmZzZXQ9MjA2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIwOSwgc3RhcnRzX2xpbmU9MjYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTksIGFyZ3ZhbD0nTmV2ZXIgcmVhY2ggdGhpcycsIGFyZ3JlcHI9IidOZXZlciByZWFjaCB0aGlzJyIsIG9mZnNldD0yMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1dJVEhfQ0xFQU5VUCcsIG9wY29kZT04MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjIzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjI2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIyOSwgc3RhcnRzX2xpbmU9MjgsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MTAsIGFyZ3ZhbD0iT0ssIG5vdyB3ZSdyZSBkb25lIiwgYXJncmVwcj0nIk9LLCBub3cgd2VcJ3JlIGRvbmUiJywgb2Zmc2V0PTIzMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCisjIE9uZSBsYXN0IHBpZWNlIG9mIGluc3BlY3QgZm9kZGVyIHRvIGNoZWNrIHRoZSBkZWZhdWx0IGxpbmUgbnVtYmVyIGhhbmRsaW5nCitkZWYgc2ltcGxlKCk6IHBhc3MKK2V4cGVjdGVkX29waW5mb19zaW1wbGUgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0wLCBzdGFydHNfbGluZT1zaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8sIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKQorXQorCisKK2NsYXNzIEluc3RydWN0aW9uVGVzdHMoQnl0ZWNvZGVUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHNpbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9maXJzdF9saW5lX3NldF90b19Ob25lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhzaW1wbGUsIGZpcnN0X2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9vdXRlcihzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19vdXRlcikKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGYgPSBvdXRlcigpCisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfZl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2YpCisKKyAgICBkZWYgdGVzdF9kb3VibHlfbmVzdGVkKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICAgICAgICAgaW5uZXIgPSBvdXRlcigpKCkKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoaW5uZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfaW5uZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19pbm5lcikKKworICAgIGRlZiB0ZXN0X2p1bXB5KHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhqdW1weSwgZmlyc3RfbGluZT1leHBlY3RlZF9qdW1weV9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2p1bXB5KQorCisjIGdldF9pbnN0cnVjdGlvbnMgaGFzIGl0cyBvd24gdGVzdHMgYWJvdmUsIHNvIGNhbiByZWx5IG9uIGl0IHRvIHZhbGlkYXRlCisjIHRoZSBvYmplY3Qgb3JpZW50ZWQgQVBJCitjbGFzcyBCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnN0YW50aWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBmdW5jdGlvbiwgbWV0aG9kLCBjb2RlIHN0cmluZyBhbmQgY29kZSBvYmplY3QKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIuY29kZW9iaiwgdHlwZXMuQ29kZVR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuQnl0ZWNvZGUsIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtfZiwgX0MoMSkuX19pbml0X18sICJhPTEiLCBfZi5fX2NvZGVfX106CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICB2aWFfb2JqZWN0ID0gbGlzdChkaXMuQnl0ZWNvZGUob2JqKSkKKyAgICAgICAgICAgICAgICB2aWFfZ2VuZXJhdG9yID0gbGlzdChkaXMuZ2V0X2luc3RydWN0aW9ucyhvYmopKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlhX29iamVjdCwgdmlhX2dlbmVyYXRvcikKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX291dGVyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2xpbmVfaW5fZGlzYXNzZW1ibHkoc2VsZik6CisgICAgICAgICMgVXNlIHRoZSBsaW5lIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICBhY3R1YWwgPSBkaXMuQnl0ZWNvZGUoc2ltcGxlKS5kaXMoKVs6M10KKyAgICAgICAgZXhwZWN0ZWQgPSAiezo+M30iLmZvcm1hdChzaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgIyBVc2UgYW4gZXhwbGljaXQgZmlyc3QgbGluZSBudW1iZXIKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKHNpbXBsZSwgZmlyc3RfbGluZT0zNTApLmRpcygpWzozXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgIjM1MCIpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSAxMDAwCisgICAgICAgIGZvciB4LCBleHBlY3RlZCBpbiBDb2RlSW5mb1Rlc3RzLnRlc3RfcGFpcnM6CisgICAgICAgICAgICBiID0gZGlzLkJ5dGVjb2RlKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGIuaW5mbygpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlZChzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKF9mKS5kaXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZGlzX2YpCisKKyAgICBkZWYgdGVzdF9mcm9tX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdGIgPSBnZXRfdGIoKQorICAgICAgICBiID0gZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKQorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY3VycmVudF9vZmZzZXQsIHRiLnRiX2xhc3RpKQorCisgICAgZGVmIHRlc3RfZnJvbV90cmFjZWJhY2tfZGlzKHNlbGYpOgorICAgICAgICB0YiA9IGdldF90YigpCisgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2sodGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kaXMoKSwgZGlzX3RyYWNlYmFjaykKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChEaXNUZXN0cywgQ29kZUluZm9UZXN0cykKKyAgICBydW5fdW5pdHRlc3QoRGlzVGVzdHMsIERpc1dpdGhGaWxlVGVzdHMsIENvZGVJbmZvVGVzdHMsCisgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uVGVzdHMsIEJ5dGVjb2RlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCA4ZjhjN2M3Li41YjUzY2E4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00MDksNyArNDA5LDggQEAKIAogIiIiCiAKLWRlZiB0ZXN0X0RvY1Rlc3RGaW5kZXIoKTogciIiIgorY2xhc3MgdGVzdF9Eb2NUZXN0RmluZGVyOgorICAgIGRlZiBiYXNpY3MoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0RmluZGVyYCBjbGFzcy4KIAogRG9jVGVzdEZpbmRlciBpcyB1c2VkIHRvIGV4dHJhY3QgRG9jVGVzdHMgZnJvbSBhbiBvYmplY3QncyBkb2NzdHJpbmcKQEAgLTY0Niw2ICs2NDcsMzkgQEAKICAgICBbMSwgOSwgMTJdCiAiIiIKIAorICAgIGlmIGludC5fX2RvY19fOiAjIHNpbXBsZSBjaGVjayBmb3IgLS13aXRob3V0LWRvYy1zdHJpbmdzLCBza2lwIGlmIGxhY2tpbmcKKyAgICAgICAgZGVmIG5vbl9QeXRob25fbW9kdWxlcygpOiByIiIiCisKK0ZpbmRpbmcgRG9jdGVzdHMgaW4gTW9kdWxlcyBOb3QgV3JpdHRlbiBpbiBQeXRob24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0RvY1Rlc3RGaW5kZXIgY2FuIGFsc28gZmluZCBkb2N0ZXN0cyBpbiBtb3N0IG1vZHVsZXMgbm90IHdyaXR0ZW4gaW4gUHl0aG9uLgorV2UnbGwgdXNlIGJ1aWx0aW5zIGFzIGFuIGV4YW1wbGUsIHNpbmNlIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXNuJ3Qgd3JpdHRlbiBpbgorcGxhaW4gb2wnIFB5dGhvbiBhbmQgaXMgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUuCisKKyAgICA+Pj4gaW1wb3J0IGJ1aWx0aW5zCisgICAgPj4+IHRlc3RzID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChidWlsdGlucykKKyAgICA+Pj4gNzkwIDwgbGVuKHRlc3RzKSA8IDgwMCAjIGFwcHJveGltYXRlIG51bWJlciBvZiBvYmplY3RzIHdpdGggZG9jc3RyaW5ncworICAgIFRydWUKKyAgICA+Pj4gcmVhbF90ZXN0cyA9IFt0IGZvciB0IGluIHRlc3RzIGlmIGxlbih0LmV4YW1wbGVzKSA+IDBdCisgICAgPj4+IGxlbihyZWFsX3Rlc3RzKSAjIG9iamVjdHMgdGhhdCBhY3R1YWxseSBoYXZlIGRvY3Rlc3RzCisgICAgOAorICAgID4+PiBmb3IgdCBpbiByZWFsX3Rlc3RzOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICB7fScuZm9ybWF0KGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKSkKKyAgICAuLi4KKyAgICAxICBidWlsdGlucy5iaW4KKyAgICAzICBidWlsdGlucy5mbG9hdC5hc19pbnRlZ2VyX3JhdGlvCisgICAgMiAgYnVpbHRpbnMuZmxvYXQuZnJvbWhleAorICAgIDIgIGJ1aWx0aW5zLmZsb2F0LmhleAorICAgIDEgIGJ1aWx0aW5zLmhleAorICAgIDEgIGJ1aWx0aW5zLmludAorICAgIDIgIGJ1aWx0aW5zLmludC5iaXRfbGVuZ3RoCisgICAgMSAgYnVpbHRpbnMub2N0CisKK05vdGUgaGVyZSB0aGF0ICdiaW4nLCAnb2N0JywgYW5kICdoZXgnIGFyZSBmdW5jdGlvbnM7ICdmbG9hdC5hc19pbnRlZ2VyX3JhdGlvJywKKydmbG9hdC5oZXgnLCBhbmQgJ2ludC5iaXRfbGVuZ3RoJyBhcmUgbWV0aG9kczsgJ2Zsb2F0LmZyb21oZXgnIGlzIGEgY2xhc3NtZXRob2QsCithbmQgJ2ludCcgaXMgYSB0eXBlLgorIiIiCisKIGRlZiB0ZXN0X0RvY1Rlc3RQYXJzZXIoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0UGFyc2VyYCBjbGFzcy4KIApAQCAtMTQwOSw4ICsxNDQzLDQwIEBACiAgICAgICAgIDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCiAKLUZvciB0aGUgcHVycG9zZXMgb2YgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSwgdW5leHBlY3RlZCBleGNlcHRpb25zCi1jb3VudCBhcyBmYWlsdXJlczoKK1RoZSBGQUlMX0ZBU1QgZmxhZyBjYXVzZXMgdGhlIHJ1bm5lciB0byBleGl0IGFmdGVyIHRoZSBmaXJzdCBmYWlsaW5nIGV4YW1wbGUsCitzbyBzdWJzZXF1ZW50IGV4YW1wbGVzIGFyZSBub3QgZXZlbiBhdHRlbXB0ZWQ6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVAorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK1NwZWNpZnlpbmcgYm90aCBGQUlMX0ZBU1QgYW5kIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgaXMgZXF1aXZhbGVudCB0bworRkFJTF9GQVNUIG9ubHk6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVCB8IGRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgYm90aCBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIGFuZCBGQUlMX0ZBU1QsIHVuZXhwZWN0ZWQKK2V4Y2VwdGlvbnMgY291bnQgYXMgZmFpbHVyZXM6CiAKICAgICA+Pj4gZGVmIGYoeCk6CiAgICAgLi4uICAgICByJycnCkBAIC0xNDM3LDYgKzE1MDMsMTcgQEAKICAgICAgICAgLi4uCiAgICAgICAgIFZhbHVlRXJyb3I6IDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQogCiBOZXcgb3B0aW9uIGZsYWdzIGNhbiBhbHNvIGJlIHJlZ2lzdGVyZWQsIHZpYSByZWdpc3Rlcl9vcHRpb25mbGFnKCkuICBIZXJlCiB3ZSByZWFjaCBpbnRvIGRvY3Rlc3QncyBpbnRlcm5hbHMgYSBiaXQuCkBAIC0yNTUzLDYgKzI2MzAsMjQwIEBACiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQogICAgICIiIgogCitkZWYgdGVzdF9DTEkoKTogciIiIgorVGhlIGRvY3Rlc3QgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIHJ1biBkb2N0ZXN0cyBhZ2FpbnN0IGFuIGFyYml0cmFyeSBmaWxlLgorVGhlc2UgdGVzdHMgdGVzdCB0aGlzIENMSSBmdW5jdGlvbmFsaXR5LgorCitXZSdsbCB1c2UgdGhlIHN1cHBvcnQgbW9kdWxlJ3Mgc2NyaXB0X2hlbHBlcnMgZm9yIHRoaXMsIGFuZCB3cml0ZSBhIHRlc3QgZmlsZXMKK3RvIGEgdGVtcCBkaXIgdG8gcnVuIHRoZSBjb21tYW5kIGFnYWluc3QuICBEdWUgdG8gYSBjdXJyZW50IGxpbWl0YXRpb24gaW4KK3NjcmlwdF9oZWxwZXJzLCB0aG91Z2gsIHdlIG5lZWQgYSBsaXR0bGUgdXRpbGl0eSBmdW5jdGlvbiB0byB0dXJuIHRoZSByZXR1cm5lZAorb3V0cHV0IGludG8gc29tZXRoaW5nIHdlIGNhbiBkb2N0ZXN0IGFnYWluc3Q6CisKKyAgICA+Pj4gZGVmIG5vcm1hbGl6ZShzKToKKyAgICAuLi4gICAgIHJldHVybiAnXG4nLmpvaW4ocy5kZWNvZGUoKS5zcGxpdGxpbmVzKCkpCisKK05vdGU6IHdlIGFsc28gcGFzcyBURVJNPScnIHRvIGFsbCB0aGUgYXNzZXJ0X3B5dGhvbiBjYWxscyB0byBhdm9pZCBhIGJ1ZworaW4gdGhlIHJlYWRsaW5lIGxpYnJhcnkgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gdGhlc2UgdGVzdHMgYmVjYXVzZSB3ZSBhcmUKK3J1bm5pbmcgdGhlbSBpbiBhIG5ldyBweXRob24gcHJvY2Vzcy4gIFNlZToKKworICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMTMtMDYvbXNnMDAwMDAuaHRtbAorCitXaXRoIHRob3NlIHByZWxpbWluYXJpZXMgb3V0IG9mIHRoZSB3YXksIHdlJ2xsIHN0YXJ0IHdpdGggYSBmaWxlIHdpdGggdHdvCitzaW1wbGUgdGVzdHMgYW5kIG5vIGVycm9ycy4gIFdlJ2xsIHJ1biBib3RoIHRoZSB1bmFkb3JuZWQgZG9jdGVzdCBjb21tYW5kLCBhbmQKK3RoZSB2ZXJib3NlIHZlcnNpb24sIGFuZCB0aGVuIGNoZWNrIHRoZSBvdXRwdXQ6CisKKyAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCisgICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICAuLi4gICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZS5kb2MnKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1RoaXMgaXMgYSB2ZXJ5IHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYSJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdBbmQgdGhhdCBpcyBpdC5cbicpCisgICAgLi4uICAgICByYzEsIG91dDEsIGVycjEgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgZm4sIFRFUk09JycpCisKK1dpdGggbm8gYXJndW1lbnRzIGFuZCBwYXNzaW5nIHRlc3RzLCB3ZSBzaG91bGQgZ2V0IG5vIG91dHB1dDoKKworICAgID4+PiByYzEsIG91dDEsIGVycjEKKyAgICAoMCwgYicnLCBiJycpCisKK1dpdGggdGhlIHZlcmJvc2UgZmxhZywgd2Ugc2hvdWxkIHNlZSB0aGUgdGVzdCBvdXRwdXQsIGJ1dCBubyBlcnJvciBvdXRwdXQ6CisKKyAgICA+Pj4gcmMyLCBlcnIyCisgICAgKDAsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDIpKQorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImEiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYScKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAyIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAyIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMiBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorCitOb3cgd2UnbGwgd3JpdGUgYSBjb3VwbGUgZmlsZXMsIG9uZSB3aXRoIHRocmVlIHRlc3RzLCB0aGUgb3RoZXIgYSBweXRob24gbW9kdWxlCit3aXRoIHR3byB0ZXN0cywgYm90aCBvZiB0aGUgZmlsZXMgaGF2aW5nICJlcnJvcnMiIGluIHRoZSB0ZXN0cyB0aGF0IGNhbiBiZSBtYWRlCitub24tZXJyb3JzIGJ5IGFwcGx5aW5nIHRoZSBhcHByb3ByaWF0ZSBkb2N0ZXN0IG9wdGlvbnMgdG8gdGhlIHJ1biAoRUxMSVBTSVMgaW4KK3RoZSBmaXJzdCBmaWxlLCBOT1JNQUxJWkVfV0hJVEVTUEFDRSBpbiB0aGUgc2Vjb25kKS4gIFRoaXMgY29tYmluYXRpb24gd2lsbAorYWxsb3cgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSAtZiBhbmQgLW8gZmxhZ3MsIGFzIHdlbGwgYXMgdGhlIGRvY3Rlc3QgY29tbWFuZCdzCithYmlsaXR5IHRvIHByb2Nlc3MgbW9yZSB0aGFuIG9uZSBmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kLCBzaW5jZSB0aGUgc2Vjb25kCitmaWxlIGVuZHMgaW4gJy5weScsIGl0cyBoYW5kbGluZyBvZiBweXRob24gbW9kdWxlIGZpbGVzIChhcyBvcHBvc2VkIHRvIHN0cmFpZ2h0Cit0ZXh0IGZpbGVzKS4KKworICAgID4+PiBmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKKyAgICA+Pj4gd2l0aCBzY3JpcHRfaGVscGVyLnRlbXBfZGlyKCkgYXMgdG1wZGlyOgorICAgIC4uLiAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnbXlmaWxlLmRvYycpCisgICAgLi4uICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgZjoKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnVGhpcyBpcyBhbm90aGVyIHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYWJjZGVmIlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgiICAgJ2EuLi5mJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+ICJhamttbCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhLi4ubCdcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1xuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnQW5kIHRoYXQgaXMgaXQuXG4nKQorICAgIC4uLiAgICAgZm4yID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZTIucHknKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuMiwgJ3cnKSBhcyBmOgorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdkZWYgdGVzdF9mdW5jKCk6XG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICBcIlwiXCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIFRoaXMgaXMgc2ltcGxlIHB5dGhvbiB0ZXN0IGZ1bmN0aW9uLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgID4+PiAxICsgMVxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICA+Pj4gImFiYyAgIGRlZiJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICAgICAnYWJjIGRlZidcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIlxuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgXCJcIlwiXG4nKQorICAgIC4uLiAgICAgaW1wb3J0IHNodXRpbAorICAgIC4uLiAgICAgcmMxLCBvdXQxLCBlcnIxID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMiwgb3V0MiwgZXJyMiA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLCBmbiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMywgb3V0MywgZXJyMyA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorICAgIC4uLiAgICAgcmM0LCBvdXQ0LCBlcnI0ID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1mJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjNSwgb3V0NSwgZXJyNSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLXYnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorCitPdXIgZmlyc3QgdGVzdCBydW4gd2lsbCBzaG93IHRoZSBlcnJvcnMgZnJvbSB0aGUgZmlyc3QgZmlsZSAoZG9jdGVzdCBzdG9wcyBpZiBhCitmaWxlIGhhcyBlcnJvcnMpLiAgTm90ZSB0aGF0IGRvY3Rlc3QgdGVzdC1ydW4gZXJyb3Igb3V0cHV0IGFwcGVhcnMgb24gc3Rkb3V0LAorbm90IHN0ZGVycjoKKworICAgID4+PiByYzEsIGVycjEKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUob3V0MSkpICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLm15ZmlsZS5kb2MiLCBsaW5lIDQsIGluIG15ZmlsZS5kb2MKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgImFiY2RlZiIKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgJ2EuLi5mJworICAgIEdvdDoKKyAgICAgICAgJ2FiY2RlZicKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4ubXlmaWxlLmRvYyIsIGxpbmUgNiwgaW4gbXlmaWxlLmRvYworICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAiYWprbWwiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4ubCcKKyAgICBHb3Q6CisgICAgICAgICdhamttbCcKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgMSBpdGVtcyBoYWQgZmFpbHVyZXM6CisgICAgICAgMiBvZiAgIDMgaW4gbXlmaWxlLmRvYworICAgICoqKlRlc3QgRmFpbGVkKioqIDIgZmFpbHVyZXMuCisKK1dpdGggLW8gRUxMSVBTSVMgc3BlY2lmaWVkLCB0aGUgc2Vjb25kIHJ1biwgYWdhaW5zdCBqdXN0IHRoZSBmaXJzdCBmaWxlLCBzaG91bGQKK3Byb2R1Y2Ugbm8gZXJyb3JzLCBhbmQgd2l0aCAtbyBOT1JNQUxJWkVfV0hJVEVTUEFDRSBhbHNvIHNwZWNpZmllZCwgbmVpdGhlcgorc2hvdWxkIHRoZSB0aGlyZCwgd2hpY2ggcmFuIGFnYWluc3QgYm90aCBmaWxlczoKKworICAgID4+PiByYzIsIG91dDIsIGVycjIKKyAgICAoMCwgYicnLCBiJycpCisgICAgPj4+IHJjMywgb3V0MywgZXJyMworICAgICgwLCBiJycsIGInJykKKworVGhlIGZvdXJ0aCBydW4gdXNlcyBGQUlMX0ZBU1QsIHNvIHdlIHNob3VsZCBzZWUgb25seSBvbmUgZXJyb3I6CisKKyAgICA+Pj4gcmM0LCBlcnI0CisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDQpKSAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi5teWZpbGUuZG9jIiwgbGluZSA0LCBpbiBteWZpbGUuZG9jCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4uZicKKyAgICBHb3Q6CisgICAgICAgICdhYmNkZWYnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDEgb2YgICAyIGluIG15ZmlsZS5kb2MKKyAgICAqKipUZXN0IEZhaWxlZCoqKiAxIGZhaWx1cmVzLgorCitUaGUgZmlmdGggdGVzdCB1c2VzIHZlcmJvc2Ugd2l0aCB0aGUgdHdvIG9wdGlvbnMsIHNvIHdlIHNob3VsZCBnZXQgdmVyYm9zZQorc3VjY2VzcyBvdXRwdXQgZm9yIHRoZSB0ZXN0cyBpbiBib3RoIGZpbGVzOgorCisgICAgPj4+IHJjNSwgZXJyNQorICAgICgwLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQ1KSkKKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYS4uLmYnCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhamttbCIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhLi4ubCcKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAzIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAzIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMyBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImFiYyAgIGRlZiIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhYmMgZGVmJworICAgIG9rCisgICAgMSBpdGVtcyBoYWQgbm8gdGVzdHM6CisgICAgICAgIG15ZmlsZTIKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMiB0ZXN0cyBpbiBteWZpbGUyLnRlc3RfZnVuYworICAgIDIgdGVzdHMgaW4gMiBpdGVtcy4KKyAgICAyIHBhc3NlZCBhbmQgMCBmYWlsZWQuCisgICAgVGVzdCBwYXNzZWQuCisKK1dlIHNob3VsZCBhbHNvIGNoZWNrIHNvbWUgdHlwaWNhbCBlcnJvciBjYXNlcy4KKworSW52YWxpZCBmaWxlIG5hbWU6CisKKyAgICA+Pj4gcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnbm9zdWNoZmlsZScsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgRmlsZU5vdEZvdW5kRXJyb3I6IFtFcnJubyAuLi5dIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICdub3N1Y2hmaWxlJworCitJbnZhbGlkIGRvY3Rlc3Qgb3B0aW9uOgorCisgICAgPj4+IHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ25vc3VjaG9wdGlvbicsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMiwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgdXNhZ2UuLi5pbnZhbGlkLi4ubm9zdWNob3B0aW9uLi4uCisKKyIiIgorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNYWluCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZHluYW1pY2NsYXNzYXR0cmlidXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQpAQCAtMCwwICsxLDMwNCBAQAorIyBUZXN0IGNhc2UgZm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0eXBlcyBpbXBvcnQgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK2NsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlHZXQoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5U2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eURlbChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zcGFtID0gNQorCisgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJCYXNlQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NwYW0gPSB2YWx1ZQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fc3BhbQorCitjbGFzcyBTdWJDbGFzcyhCYXNlQ2xhc3MpOgorCisgICAgc3BhbSA9IEJhc2VDbGFzcy5fX2RpY3RfX1snc3BhbSddCisKKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIiU3ViQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJhaXNlIFByb3BlcnR5R2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIFByb3BlcnR5U2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5kZWxldGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgIHJhaXNlIFByb3BlcnR5RGVsKHNlbGYuX3NwYW0pCisKK2NsYXNzIFByb3BlcnR5RG9jQmFzZShvYmplY3QpOgorICAgIF9zcGFtID0gMQorICAgIGRlZiBfZ2V0X3NwYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisgICAgc3BhbSA9IER5bmFtaWNDbGFzc0F0dHJpYnV0ZShfZ2V0X3NwYW0sIGRvYz0ic3BhbSBzcGFtIHNwYW0iKQorCitjbGFzcyBQcm9wZXJ0eURvY1N1YihQcm9wZXJ0eURvY0Jhc2UpOgorICAgIHNwYW0gPSBQcm9wZXJ0eURvY0Jhc2UuX19kaWN0X19bJ3NwYW0nXQorICAgIEBzcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZGVjb3JhdG9yIGRvZXMgbm90IHVzZSB0aGlzIGRvYyBzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKworY2xhc3MgUHJvcGVydHlTdWJOZXdHZXR0ZXIoQmFzZUNsYXNzKToKKyAgICBzcGFtID0gQmFzZUNsYXNzLl9fZGljdF9fWydzcGFtJ10KKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gNQorCitjbGFzcyBQcm9wZXJ0eU5ld0dldHRlcihvYmplY3QpOgorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIib3JpZ2luYWwgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiAxCisgICAgQHNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIm5ldyBkb2NzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjb2xvcigpOgorICAgICAgICBwYXNzCisKK2NsYXNzIENsYXNzV2l0aFByb3BlcnR5QWJzdHJhY3RWaXJ0dWFsKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgY29sb3IoKToKKyAgICAgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBiYXNlID0gQmFzZUNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgNSkKKyAgICAgICAgYmFzZS5zcGFtID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQorICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgYmFzZS5zcGFtID0gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCisgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgbmV3Z2V0dGVyID0gUHJvcGVydHlOZXdHZXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5zcGFtLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5fX2NsYXNzX18uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAibmV3IGRvY3N0cmluZyIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9fX2lzYWJzdHJhY3RtZXRob2RfX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gKFRydWUsIEZhbHNlLCBbXSwgWzFdLCAnJywgJzEnKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gdmFsCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQy5fX2RpY3RfX1snZm9vJ10uX19pc2Fic3RyYWN0bWV0aG9kX18sIGJvb2wodmFsKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKKyAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgorICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgICAgICBfX2xlbl9fID0gX19ub256ZXJvX18KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gTm90Qm9vbCgpCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0X3ZpcnR1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoUHJvcGVydHlBYnN0cmFjdFZpcnR1YWwpCisgICAgICAgIGNsYXNzIEFQVihDbGFzc1dpdGhQcm9wZXJ0eUFic3RyYWN0VmlydHVhbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQVBWKQorICAgICAgICBjbGFzcyBBVlAoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEFWUCkKKyAgICAgICAgY2xhc3MgT2theTEoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGNvbG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvcgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbG9yID0gJ2N5YW4nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgT2theTEuY29sb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPa2F5MSgpLmNvbG9yLCAnY3lhbicpCisgICAgICAgIGNsYXNzIE9rYXkyKENsYXNzV2l0aEFic3RyYWN0VmlydHVhbFByb3BlcnR5KToKKyAgICAgICAgICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBjb2xvcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29sb3IKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb2xvciA9ICdtYWdlbnRhJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIE9rYXkyLmNvbG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT2theTIoKS5jb2xvciwgJ21hZ2VudGEnKQorCisKKyMgSXNzdWUgNTg5MDogc3ViY2xhc3NlcyBvZiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKK2NsYXNzIFByb3BlcnR5U3ViKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSIiIgorCitjbGFzcyBQcm9wZXJ0eVN1YlNsb3RzKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSB0aGF0IGRlZmluZXMgX19zbG90c19fIiIiCisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihQcm9wZXJ0eVN1YlNsb3RzLCAnX19kb2NfXycpLAorICAgICAgICAgICAgIl9fZG9jX18gaXMgYWxyZWFkeSBwcmVzZW50LCBfX3Nsb3RzX18gd2lsbCBoYXZlIG5vIGVmZmVjdCIpCisgICAgZGVmIHRlc3Rfc2xvdHNfZG9jc3RyaW5nX2NvcHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgICAgICBAUHJvcGVydHlTdWJTbG90cworICAgICAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJUcnlpbmcgdG8gY29weSB0aGlzIGRvY3N0cmluZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHByaW50KCdcbicsc3BhbS5fX2RvY19fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9zZXR0ZXJfY29waWVzX2dldHRlcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLl9zcGFtID0gMQorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICAgICAgICAgIEBzcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiInRoaXMgZG9jc3RyaW5nIGlzIGlnbm9yZWQiIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gdmFsdWUKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uc3BhbSwgMSkKKyAgICAgICAgZm9vLnNwYW0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgc3ViY2xhc3MiKQorICAgICAgICBjbGFzcyBGb29TdWIoRm9vKToKKyAgICAgICAgICAgIHNwYW0gPSBGb28uX19kaWN0X19bJ3NwYW0nXQorICAgICAgICAgICAgQHNwYW0uc2V0dGVyCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgIiIiYW5vdGhlciBpZ25vcmVkIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHNlbGYuX3NwYW0gPSAnZWdncycKKyAgICAgICAgZm9vc3ViID0gRm9vU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29zdWIuc3BhbSwgMSkKKyAgICAgICAgZm9vc3ViLnNwYW0gPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vc3ViLnNwYW0sICdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvb1N1Yi5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uZDg4OTZlZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBlbWFpbAogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgpAQCAtNDIsNiArNDMsOCBAQAogICAgICMgaGVyZSB3ZSBtYWtlIG1pbmltYWwgY2hhbmdlcyBpbiB0aGUgdGVzdF9lbWFpbCB0ZXN0cyBjb21wYXJlZCB0byB0aGVpcgogICAgICMgcHJlLTMuMyBzdGF0ZS4KICAgICBwb2xpY3kgPSBjb21wYXQzMgorICAgICMgTGlrZXdpc2UsIHRoZSBkZWZhdWx0IG1lc3NhZ2Ugb2JqZWN0IGlzIE1lc3NhZ2UuCisgICAgbWVzc2FnZSA9IE1lc3NhZ2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3cpCkBAIC01NCwxMSArNTcsMjMgQEAKICAgICAgICAgd2l0aCBvcGVuZmlsZShmaWxlbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnAsIHBvbGljeT1zZWxmLnBvbGljeSkKIAotICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9TWVzc2FnZSwgcG9saWN5PU5vbmUpOgorICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9Tm9uZSwgcG9saWN5PU5vbmUpOgogICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZToKICAgICAgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5CisgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLm1lc3NhZ2UKICAgICAgICAgcmV0dXJuIGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoc3RyaW5nLCBtZXNzYWdlLCBwb2xpY3k9cG9saWN5KQogCisgICAgZGVmIF9ieXRlc19tc2coc2VsZiwgYnl0ZXN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgorICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQorICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKGJ5dGVzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCisKKyAgICBkZWYgX21ha2VfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kpCisKICAgICBkZWYgX2J5dGVzX3JlcHIoc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBbcmVwcih4KSBmb3IgeCBpbiBiLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSldCiAKQEAgLTEyMyw2ICsxMzgsNyBAQAogCiAgICAgIiIiCiAgICAgcGFyYW1kaWN0cyA9IHt9CisgICAgdGVzdGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ19wYXJhbXMnKToKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdrZXlzJyk6CkBAIC0xMzQsNyArMTUwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGRbbl0gPSB4CiAgICAgICAgICAgICAgICAgYXR0ciA9IGQKICAgICAgICAgICAgIHBhcmFtZGljdHNbbmFtZVs6LTddICsgJ19hc18nXSA9IGF0dHIKKyAgICAgICAgaWYgJ19hc18nIGluIG5hbWU6CisgICAgICAgICAgICB0ZXN0ZXJzW25hbWUuc3BsaXQoJ19hc18nKVswXSArICdfYXNfJ10uYXBwZW5kKG5hbWUpCiAgICAgdGVzdGZ1bmNzID0ge30KKyAgICBmb3IgbmFtZSBpbiBwYXJhbWRpY3RzOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiB0ZXN0ZXJzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdGVzdGVyIGZvdW5kIGZvciB7fSIuZm9ybWF0KG5hbWUpKQorICAgIGZvciBuYW1lIGluIHRlc3RlcnM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHBhcmFtZGljdHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBwYXJhbXMgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGZvciBwYXJhbXNuYW1lLCBwYXJhbXNkaWN0IGluIHBhcmFtZGljdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwYXJhbXNuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI5ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNzk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlLCBwYXJhbWV0ZXJpemUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgQ29udGVudE1hbmFnZXIsIHJhd19kYXRhX21hbmFnZXIKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0Q29udGVudE1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGdldF9rZXlfcGFyYW1zID0geworICAgICAgICAnZnVsbF90eXBlJzogICAgICAgICgxLCAndGV4dC9wbGFpbicsKSwKKyAgICAgICAgJ21haW50eXBlX29ubHknOiAgICAoMiwgJ3RleHQnLCksCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDMsICcnLCksCisgICAgICAgIH0KKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19nZXR0ZXIobXNnLCBmb289Tm9uZSk6CisgICAgICAgICAgICBiYXIgPSBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgICAgICByZXR1cm4gZm9vLCBiYXIKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSwgZm9vPSdiYXInKSwgKCdiYXInLCAnZm9vJykpCisKKyAgICBkZWYgZ2V0X2tleV9hc19nZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBiYXJfZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUJhci1IZWFkZXInXQorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZ1snWC1Gb28tSGVhZGVyJ10KKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfZ2V0X2hhbmRsZXIoa2V5LCBiYXJfZ2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgbVsnWC1CYXItSGVhZGVyJ10gPSAnYmFyJworICAgICAgICBtWydYLUZvby1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSksICgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl9taW1ldHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoS2V5RXJyb3IsICd0ZXh0L3BsYWluJyk6CisgICAgICAgICAgICBjbS5nZXRfY29udGVudChtKQorCisgICAgY2xhc3MgQmFzZVRoaW5nKHN0cik6CisgICAgICAgIHBhc3MKKyAgICBiYXNlb2JqZWN0X2Z1bGxfcGF0aCA9IF9fbmFtZV9fICsgJy4nICsgJ1Rlc3RDb250ZW50TWFuYWdlci5CYXNlVGhpbmcnCisgICAgY2xhc3MgVGhpbmcoQmFzZVRoaW5nKToKKyAgICAgICAgcGFzcworICAgIHRlc3RvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLlRoaW5nJworCisgICAgc2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICd0eXBlJzogICAgICAgICAgICAgKDAsICBUaGluZywpLAorICAgICAgICAnZnVsbF9wYXRoJzogICAgICAgICgxLCAgdGVzdG9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ3F1YWxuYW1lJzogICAgICAgICAoMiwgICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnLCksCisgICAgICAgICduYW1lJzogICAgICAgICAgICAgKDMsICAnVGhpbmcnLCksCisgICAgICAgICdiYXNlX3R5cGUnOiAgICAgICAgKDQsICBCYXNlVGhpbmcsKSwKKyAgICAgICAgJ2Jhc2VfZnVsbF9wYXRoJzogICAoNSwgIGJhc2VvYmplY3RfZnVsbF9wYXRoLCksCisgICAgICAgICdiYXNlX3F1YWxuYW1lJzogICAgKDYsICAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfbmFtZSc6ICAgICAgICAoNywgICdCYXNlVGhpbmcnLCksCisgICAgICAgICdzdHJfdHlwZSc6ICAgICAgICAgKDgsICBzdHIsKSwKKyAgICAgICAgJ3N0cl9mdWxsX3BhdGgnOiAgICAoOSwgICdidWlsdGlucy5zdHInLCksCisgICAgICAgICdzdHJfbmFtZSc6ICAgICAgICAgKDEwLCAnc3RyJywpLCAgICMgc3RyIG5hbWUgYW5kIHF1YWxuYW1lIGFyZSB0aGUgc2FtZQorICAgICAgICAnbnVsbF9rZXknOiAgICAgICAgICgxMSwgTm9uZSwpLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXkoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqLCBmb289Tm9uZSk6CisgICAgICAgICAgICBtc2dbJ1gtRm9vLUhlYWRlciddID0gZm9vCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgZm9vX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaiwgZm9vPSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vLUhlYWRlciddLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb29CYXItSGVhZGVyJ10gPSAnZm9vJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKG9iaikKKyAgICAgICAgZGVmIGJhcl9zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBmb3IgcHJlY2VkZW5jZSwga2V5IGluIHNlbGYuZ2V0X2tleV9wYXJhbXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcmVjZWRlbmNlID4gb3JkZXI6CisgICAgICAgICAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgYmFyX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydYLUZvb0Jhci1IZWFkZXInXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgpLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX3Vua25vd25fdHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtc2dfb2JqID0gc2VsZi5UaGluZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgc2VsZi50ZXN0b2JqZWN0X2Z1bGxfcGF0aCk6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX2NhbGxlZF9vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2ZvbycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfY2FsbHNfY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtRm9vJ10gPSAnYmFyJworICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L2h0bWwnCisgICAgICAgIG1bJ1RvJ10gPSAndGVzdCcKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnYWJjJykKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihzdHIsIGxhbWJkYSAqYXJncywgKiprdzogTm9uZSkKKyAgICAgICAgbS5zZXRfY29udGVudCgneHl6JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LUZvbyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LVR5cGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydUbyddLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0UmF3RGF0YU1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBpbiB3aGljaCBoZWFkZXJzIGFyZSBhZGRlZAorICAgICMgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0cyBieSB0aGUgY29kZS4gIFRoZXJlJ3Mgbm8gZGVmaW5lZCBvcmRlcmluZyBpbgorICAgICMgUkZDNTMyMi9NSU1FLCBzbyB0aGlzIG1ha2VzIHRoZSB0ZXN0cyBtb3JlIGZyYWdpbGUgdGhhbiB0aGUgc3RhbmRhcmRzCisgICAgIyByZXF1aXJlLiAgSG93ZXZlciwgaWYgdGhlIGhlYWRlciBvcmRlciBjaGFuZ2VzIGl0IGlzIGJlc3QgdG8gdW5kZXJzdGFuZAorICAgICMgKndoeSosIGFuZCBtYWtlIHN1cmUgaXQgaXNuJ3QgYSBzdWJ0bGUgYnVnIGluIHdoYXRldmVyIGNoYW5nZSB3YXMKKyAgICAjIGFwcGxpZWQuCisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShtYXhfbGluZV9sZW5ndGg9NjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyPXJhd19kYXRhX21hbmFnZXIpCisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW4oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc2ljIHRleHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgIDxwPkJhc2ljIHRleHQuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8cD5CYXNpYyB0ZXh0LjwvcD5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9ieXRlc19tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1sYXRpbjEKKworICAgICAgICAgICAgQmFzw6xjIHTDq3h0LgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fbGF0aW4xX3F1b3RlZF9wcmludGFibGUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImxhdGluLTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1FQ2MgdD1FQnh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX3V0ZjhfYmFzZTY0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPWMzPWFjYyB0PWMzPWFieHQ9ZmQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHTvv70uXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZV9pZ25vcmVfZXJyb3JzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjRfcmVjb3ZlcmFibGVfYmFkX0NURV9kYXRhKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ29ceEZGPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZm9vPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHt9CisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobWFpbnR5cGU9bWFpbnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChtYWludHlwZSsnL2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgYiJib2d1cyBkYXRhIikKKworICAgIGRlZiB0ZXN0X2dldF9ub25fdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFltOW5kWE1nWkdGMFlRPT0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X3JhaXNlc19vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorCisgICAgZGVmIHRlc3RfZ2V0X21lc3NhZ2VfcmZjODIyX2FuZF9leHRlcm5hbF9ib2R5KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2Uve30KKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIGFuIGV4YW1wbGUgbWVzc2FnZQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChzdWJ0eXBlKSkKKyAgICAgICAgICAgICAgICBzdWJfbXNnID0gcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJfbXNnLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KHN1Yl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4YW1wbGUgbWVzc2FnZVxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl9tc2dbJ3RvJ10sICdmb29AZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1snZnJvbSddLmFkZHJlc3Nlc1swXS51c2VybmFtZSwgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9ub25fcmZjODIyX29yX2V4dGVybmFsX2JvZHlfeWllbGRzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3BhcnRpYWwKKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIFRoZSByZWFsIGJvZHkgaXMgaW4gYW5vdGhlciBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pWzoxMF0sIGInVG86IGZvb0BleCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2h0bWwoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIjxwPlNpbXBsZSBtZXNzYWdlLjwvcD5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBzdWJ0eXBlPSdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIDxwPlNpbXBsZSBtZXNzYWdlLjwvcD4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2NoYXJzZXRfbGF0aW5fMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgY2hhcnNldD0nbGF0aW4tMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3Nob3J0X2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2Ugw6AgbSfDqXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgICIgw6AgbSfDqXRvLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgKAorICAgICAgICAgICAgICAgICAgImonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiIKKyAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gJ1xuJyoxMCArICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgw6HDoMOkw6nDqMSZw7bFkS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIHc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09veEpuRAorICAgICAgICAgICAgdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09vCisgICAgICAgICAgICB4Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VEQKKyAgICAgICAgICAgIHFjT294Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZworICAgICAgICAgICAgdzZURHFjT294Sm5EdHNXUkxnbz0KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgIyBZZXMsIGl0IGNob29zZXMgIndyb25nIiBoZXJlLiAgSXQncyBhIGhldXJpc3RpYy4gIFNvIHRoaXMgcmVzdWx0CisgICAgICAgICMgY291bGQgY2hhbmdlIGlmIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBoZXVyaXN0aWMuCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCdcbicqMTAgKworICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCAiXG4iKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPQorICAgICAgICAgICAgPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PQorICAgICAgICAgICAgPUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPQorICAgICAgICAgICAgPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PQorICAgICAgICAgICAgPUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PQorICAgICAgICAgICAgPTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPQorICAgICAgICAgICAgPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPQorICAgICAgICAgICAgPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PQorICAgICAgICAgICAgPUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PQorICAgICAgICAgICAgPTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PQorICAgICAgICAgICAgPUM1PTkxLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9ub25fYXNjaWlfd2l0aF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X2FuZF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkZvcndhcmRlZCBtZXNzYWdlIgorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudFsnVG8nXSA9ICdweXRob25Adml2YXJpdW0ub3JnJworICAgICAgICBjb250ZW50WydGcm9tJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnU3ViamVjdCddID0gImdldCBiYWNrIGluIHlvdXIgYm94IgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJPciBmYWNlIHRoZSBjb21meSBjaGFpci4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRm9yd2FyZGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgVG86IHB5dGhvbkB2aXZhcml1bS5vcmcKKyAgICAgICAgICAgIEZyb206IHBvbGljZUBtb250eS5vcmcKKyAgICAgICAgICAgIFN1YmplY3Q6IGdldCBiYWNrIGluIHlvdXIgYm94CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgT3IgZmFjZSB0aGUgY29tZnkgY2hhaXIuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBwYXlsb2FkID0gbS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF5bG9hZCwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwYXlsb2FkKSwgc3RyKGNvbnRlbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX3dpdGhfbm9uX2FzY2lpX2FuZF9jb2VyY2lvbl90b183Yml0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkVzY2FwZSByZXBvcnQiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3BvbGljZUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICd2aWN0aW1AbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiSGVscCIKKyAgICAgICAgY29udGVudC5zZXRfY29udGVudCgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcml1bS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAjIFRoZSBjaG9pY2Ugb2YgYmFzZTY0IGZvciB0aGUgYm9keSBlbmNvZGluZyBpcyBiZWNhdXNlIGdlbmVyYXRvcgorICAgICAgICAjIGRvZXNuJ3QgYm90aGVyIHdpdGggaGV1cmlzdGljcyBhbmQgdXNlcyBpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIHV0Zi04CisgICAgICAgICMgdGV4dC4KKyAgICAgICAgIyBYWFg6IHRoZSBmaXJzdCBjdGUgc2hvdWxkIGJlIDdiaXQsIHRvby4uLnRoYXQncyBhIGdlbmVyYXRvciBidWcuCisgICAgICAgICMgWFhYOiB0aGUgbGluZSBsZW5ndGggaW4gdGhlIGJvZHkgYWxzbyBsb29rcyBsaWtlIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFzX3N0cmluZyhtYXhoZWFkZXJsZW49c2VsZi5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgYWlkaGFTQjFiaUJ3Y205aWJNT29iV1VnWkdVZ2NIbDBhRzl1TGlCcGJDQmxjM1FnYzI5eWRHa2daR1VnYzI5dUlIWnBkbUZ5YVhWdAorICAgICAgICAgICAgTGdvPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZ2V0X2NvbnRlbnQoKSwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtLmdldF9jb250ZW50KCkpLCBzdHIoY29udGVudCkpCisKKyAgICBkZWYgdGVzdF9zZXRfbWVzc2FnZV9pbnZhbGlkX2N0ZV9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgZm9yIGN0ZSBpbiAncXVvdGVkLXByaW50YWJsZSBiYXNlNjQnLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY3RlPWN0ZSwgc3VidHlwZT1zdWJ0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisgICAgICAgIHN1YnR5cGUgPSAnZXh0ZXJuYWwtYm9keScKKyAgICAgICAgZm9yIGN0ZSBpbiAnOGJpdCBiaW5hcnknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3RlLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisKKyAgICBkZWYgdGVzdF9zZXRfaW1hZ2VfanBnKHNlbGYpOgorICAgICAgICBmb3IgY29udGVudCBpbiAoYiJib2d1cyBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiImJvZ3VzIGNvbnRlbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJib2d1cyBjb250ZW50IikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29udGVudD1jb250ZW50KToKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsICdpbWFnZScsICdqcGVnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnCisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICAgICAgICAgIFltOW5kWE1nWTI5dWRHVnVkQT09CisgICAgICAgICAgICAgICAgICAgICIiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hdWRpb19haWZfd2l0aF9xdW90ZWRfcHJpbnRhYmxlX2N0ZShzZWxmKToKKyAgICAgICAgIyBXaHkgeW91IHdvdWxkIHVzZSBxcCwgSSBkb24ndCBrbm93LCBidXQgaXQgaXMgdGVjaG5pY2FsbHkgc3VwcG9ydGVkLgorICAgICAgICAjIFhYWDogdGhlIGluY29ycmVjdCBsaW5lIGxlbmd0aCBpcyBiZWNhdXNlIGJpbmFzY2lpLmIyYV9xcCBkb2Vzbid0CisgICAgICAgICMgc3VwcG9ydCBhIGxpbmUgbGVuZ3RoIHBhcmFtZXRlciwgYnV0IHdlIG11c3QgdXNlIGl0IHRvIGdldCBuZXdsaW5lCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgICMgWFhYOiB3aGF0IGFib3V0IHRoYXQgbGFjayBvZiB0YWlsaW5nIG5ld2xpbmU/ICBEbyB3ZSBhY3R1YWxseSBoYW5kbGUKKyAgICAgICAgIyB0aGF0IGNvcnJlY3RseSBpbiBhbGwgY2FzZXM/ICBUaGF0IGlzLCBpZiB0aGUgKnNvdXJjZSogaGFzIGFuCisgICAgICAgICMgdW5lbmNvZGVkIG5ld2xpbmUsIGRvIHdlIGFkZCBhbiBleHRyYSBuZXdsaW5lIHRvIHRoZSByZXR1cm5lZCBwYXlsb2FkCisgICAgICAgICMgb3Igbm90PyAgQW5kIGNhbiB0aGF0IGFjdHVhbGx5IGJlIGRpc2FtYmlndWF0ZWQgYmFzZWQgb24gdGhlIFJGQz8KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXVkaW8nLCAnYWlmJywgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXVkaW8vYWlmCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBiPUZGZ3VzPTA5Y29uPTBBdD0wRGVudD0yMHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9CisgICAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiIiIpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF92aWRlb19tcGVnX3dpdGhfYmluYXJ5X2N0ZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAndmlkZW8nLCAnbXBlZycsIGN0ZT0nYmluYXJ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdmlkZW8vbXBlZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICAjIFhYWDogdGhlIHNlY29uZCBcbiBvdWdodCB0byBiZSBhIFxyLCBidXQgZ2VuZXJhdG9yIGdldHMgaXQgd3JvbmcuCisgICAgICAgICAgICAjIFRISVMgTUVBTlMgV0UgRE9OJ1QgQUNUVUFMTFkgU1VQUE9SVCBUSEUgJ2JpbmFyeScgQ1RFLgorICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnQgenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hcHBsaWNhdGlvbl9vY3RldF9zdHJlYW1fd2l0aF84Yml0X2N0ZShzZWxmKToKKyAgICAgICAgIyBJbiA4Yml0IG1vZGUsIHVuaXZlcmFsIGxpbmUgZW5kIGxvZ2ljIGFwcGxpZXMuICBJdCBpcyB1cCB0byB0aGUKKyAgICAgICAgIyBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpbmVzIGFyZSBzaG9ydCBlbm91Z2g7IHdlIGRvbid0IGNoZWNrLgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50XG4nICsgYid6Jyo2MCArIGInXG4nCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgJ2FwcGxpY2F0aW9uJywgJ29jdGV0LXN0cmVhbScsIGN0ZT0nOGJpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2FzY2lpJykgKworICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnRcbicgKworICAgICAgICAgICAgYid6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enpcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9oZWFkZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIGhlYWRlcl9mYWN0b3J5ID0gc2VsZi5wb2xpY3kuaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJUbyIsICJmb29AZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJGcm9tIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlN1YmplY3QiLCAiSSdtIHRhbGtpbmcgdG8gbXlzZWxmLiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBJJ20gdGFsa2luZyB0byBteXNlbGYuCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX2Zyb21fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAiWC1Gb28tSGVhZGVyOiBmb28iLAorICAgICAgICAgICAgIlgtQmFyLUhlYWRlcjogYmFyIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBYLUZvby1IZWFkZXI6IGZvbworICAgICAgICAgICAgWC1CYXItSGVhZGVyOiBiYXIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9pbnZhbGlkX2R1cGxpY2F0ZV9zdHJpbmdfaGVhZGVyX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvby9iYXIiLCkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiQ29udGVudC1UeXBlIiwgIiBmb28vYmFyIiksKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICdUbzogYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHByaW50KG1bJ1RvJ10uZGVmZWN0cykKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoJ1RvJywgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKSwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2lubGluZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25fYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9mb28oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdmb28nKQorCisgICAgIyBYWFg6IHdlIHNob3VsZCBoYXZlIGEgJ3N0cmljdCcgcG9saWN5IG1vZGUgKGJleW9uZCByYWlzZV9vbl9kZWZlY3QpIHRoYXQKKyAgICAjIHdvdWxkIGNhdXNlICdmb28nIGFib3ZlIHRvIHJhaXNlLgorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9maWxlbmFtZV9hbmRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiYXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiYXIudHh0IicpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J8OhYsOhcsOuLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsKKyAgICAgICAgICAgICBmaWxlbmFtZSo9dXRmLTgnJyVDMyVBMWIlQzMlQTFyJUMzJUFFLnR4dAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGNvbnRlbnRfb2JqZWN0X3BhcmFtcyA9IHsKKyAgICAgICAgJ3RleHRfcGxhaW4nOiAoJ2NvbnRlbnQnLCAoKSksCisgICAgICAgICd0ZXh0X2h0bWwnOiAoJ2NvbnRlbnQnLCAoJ2h0bWwnLCkpLAorICAgICAgICAnYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtJzogKGInY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcHBsaWNhdGlvbicsICdvY3RldF9zdHJlYW0nKSksCisgICAgICAgICdpbWFnZV9qcGVnJzogKGInY29udGVudCcsICgnaW1hZ2UnLCAnanBlZycpKSwKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKG1lc3NhZ2UoKSwgKCkpLAorICAgICAgICAnbWVzc2FnZV9leHRlcm5hbF9ib2R5JzogKG1lc3NhZ2UoKSwgKCdleHRlcm5hbC1ib2R5JywpKSwKKyAgICAgICAgfQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2hlYWRlcl9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGhlYWRlcnM9KAorICAgICAgICAgICAgJ1RvOiBmb29AZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Zyb206IGJhckBzaW1wbGUubmV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnZnJvbSddLCAnYmFyQHNpbXBsZS5uZXQnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2Rpc3Bvc2l0aW9uX2lubGluZV9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfbm9uX2FzY2lpX2ZpbGVuYW1lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiw6FyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lOyBmaWxlbmFtZT0iYsOhci50eHQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9maWxlbmFtZSgpLCAiYsOhci50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXS5wYXJhbXNbJ2ZpbGVuYW1lJ10sICJiw6FyLnR4dCIpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfY2lkX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgY2lkPSdzb21lX3JhbmRvbV9zdHVmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1JRCddLCAnc29tZV9yYW5kb21fc3R1ZmYnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX3BhcmFtc19yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHBhcmFtcyA9IHsnZm9vJzogJ2LDoXInLCAnYWJjJzogJ3h5eid9CisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIHBhcmFtcz1wYXJhbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcGFyYW1zWydjaGFyc2V0J10gPSAndXRmLTgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1UeXBlJ10ucGFyYW1zLCBwYXJhbXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCBjZDRmNzU3Li41N2YxMmFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0yNDksMTUgKzI0OSw0MiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCdUTycsIG1zZykKIAogICAgIGRlZiB0ZXN0X2FzX3N0cmluZyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgogICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQotICAgICAgICBlcSh0ZXh0LCBzdHIobXNnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzdHIobXNnKSkKICAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpCiAgICAgICAgIGxpbmVzID0gZnVsbHJlcHIuc3BsaXQoJ1xuJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCi0gICAgICAgIGVxKHRleHQsIE5MLmpvaW4obGluZXNbMTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisKKyAgICBkZWYgdGVzdF9hc19zdHJpbmdfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19zdHJpbmcocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9hc19ieXRlcyhzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlcyhtc2cpKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyh1bml4ZnJvbT1UcnVlKQorICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KGInXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aChiJ0Zyb20gJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidcbicuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyhwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBzID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihzLHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVsbHJlcHIsIHMuZ2V0dmFsdWUoKSkKIAogICAgICMgdGVzdF9oZWFkZXJyZWdpc3RyeS5UZXN0Q29udGVudFR5cGVIZWFkZXIuYmFkX3BhcmFtcwogICAgIGRlZiB0ZXN0X2JhZF9wYXJhbShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQppbmRleCBmODI5ZjgzLi5mMmRmMzcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CkBAIC02NjEsNyArNjYxLDcgQEAKICAgICAgICAgICAgICd0ZXh0L3BsYWluOyBuYW1lPSJhc2NpaV9pc190aGVfZGVmYXVsdCInKSwKIAogICAgICAgICAncmZjMjIzMV9iYWRfY2hhcmFjdGVyX2luX2NoYXJzZXRfcGFyYW1ldGVyX3ZhbHVlJzogKAotICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RCIsCisgICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUYxJUYyJUYzIiwKICAgICAgICAgICAgICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICdwbGFpbicsCkBAIC02NjksNiArNjY5LDE4IEBACiAgICAgICAgICAgICBbZXJyb3JzLlVuZGVjb2RhYmxlQnl0ZXNEZWZlY3RdLAogICAgICAgICAgICAgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04XHVGRkZEXHVGRkZEXHVGRkZEIicpLAogCisgICAgICAgICdyZmMyMjMxX3V0Zl84X2luX3N1cHBvc2VkbHlfYXNjaWlfY2hhcnNldF9wYXJhbWV0ZXJfdmFsdWUnOiAoCisgICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUUyJTgwJTlEIiwKKyAgICAgICAgICAgICd0ZXh0L3BsYWluJywKKyAgICAgICAgICAgICd0ZXh0JywKKyAgICAgICAgICAgICdwbGFpbicsCisgICAgICAgICAgICB7J2NoYXJzZXQnOiAndXRmLTjigJ0nfSwKKyAgICAgICAgICAgIFtlcnJvcnMuVW5kZWNvZGFibGVCeXRlc0RlZmVjdF0sCisgICAgICAgICAgICAndGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTjigJ0iJywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAjIFhYWDogaWYgdGhlIGFib3ZlIHdlcmUgKnJlKmZvbGRlZCwgaXQgd291bGQgZ2V0IHRhZ2dlZCBhcyB1dGYtOAorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGFzY2lpIGluIHRoZSBwYXJhbSwgc2luY2UgaXQgbm93IGNvbnRhaW5zIG5vbi1BU0NJSS4KKwogICAgICAgICAncmZjMjIzMV9lbmNvZGVkX3RoZW5fdW5lbmNvZGVkX3NlZ21lbnRzJzogKAogICAgICAgICAgICAgKCdhcHBsaWNhdGlvbi94LWZvbzsnCiAgICAgICAgICAgICAgICAgJ1x0bmFtZSowKj0idXMtYXNjaWlcJ2VuLXVzXCdNeSI7JwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQppbmRleCA4Y2MzZjgwLi5lMGViYjhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQpAQCAtMSw2ICsxLDEzIEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXh0d3JhcAogZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Ci1mcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQorZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UsIE1JTUVQYXJ0Citmcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZSwgcGFyYW1ldGVyaXplCisKKworIyBIZWxwZXIuCitkZWYgZmlyc3QoaXRlcmFibGUpOgorICAgIHJldHVybiBuZXh0KGZpbHRlcihsYW1iZGEgeDogeCBpcyBub3QgTm9uZSwgaXRlcmFibGUpLCBOb25lKQogCiAKIGNsYXNzIFRlc3QoVGVzdEVtYWlsQmFzZSk6CkBAIC0xNCw1ICsyMSw3MzggQEAKICAgICAgICAgICAgIG1bJ1RvJ10gPSAneHl6QGFiYycKIAogCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0RW1haWxNZXNzYWdlQmFzZToKKworICAgIHBvbGljeSA9IHBvbGljeS5kZWZhdWx0CisKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHRyaXBsZSAocmVsYXRlZCwgaHRtbCwgcGxhaW4pIG9mIGluZGljZXMgaW50byB0aGUKKyAgICAjIGxpc3QgcmV0dXJuZWQgYnkgJ3dhbGsnIGNhbGxlZCBvbiBhIE1lc3NhZ2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdGhpcmQuCisgICAgIyBUaGUgaW5kaWNlcyBpbmRpY2F0ZSB3aGljaCBwYXJ0IHNob3VsZCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBwYXJ0LXR5cGUKKyAgICAjIHdoZW4gcGFzc2VkIHRvIGdldF9ib2R5IChpZTogdGhlICJmaXJzdCIgcGFydCBvZiB0aGF0IHR5cGUgaW4gdGhlCisgICAgIyBtZXNzYWdlKS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGluZGljZXMgaW50byB0aGUgJ3dhbGsnIGxpc3QKKyAgICAjIG9mIHRoZSBhdHRhY2htZW50cyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBieSBhIGNhbGwgdG8KKyAgICAjICdpdGVyX2F0dGFjaG1lbnRzJy4gIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvICd3YWxrJworICAgICMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYSBjYWxsIHRvICdpdGVyX3BhcnRzJy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QKKyAgICAjIGl0ZW0gcmV0dXJuZWQgYnkgJ3dhbGsnIGlzIHRoZSBNZXNzYWdlIGl0c2VsZi4KKworICAgIG1lc3NhZ2VfcGFyYW1zID0geworCisgICAgICAgICdlbXB0eV9tZXNzYWdlJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDApLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICIiKSwKKworICAgICAgICAnbm9uX21pbWVfcGxhaW4nOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgdGV4dCBib2R5CisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21pbWVfbm9uX3RleHQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworCisgICAgICAgICAgICAgICAgYm9ndXMgYm9keS4KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9hbHRlcm5hdGl2ZSc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX2F0dGFjaG1lbnRfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdodG1sX3RleHRfYXR0YWNobWVudF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCBOb25lKSwKKyAgICAgICAgICAgICgxLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdFRhQ2htZW50CisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ2h0bWxfdGV4dF9hdHRhY2htZW50X2lubGluZV9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogSW5MaW5lCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBSRkMgMjM4NworICAgICAgICAncmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgwLCAxLCBOb25lKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT0iOyB0eXBlPXRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMT4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGRhdGEKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFRoaXMgbWVzc2FnZSBzdHJ1Y3R1cmUgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBzZWVuIGluIHRoZSB3aWxkLCBidXQKKyAgICAgICAgIyBpdCBwcm92ZXMgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0ZXh0IHBhcnRzIGJhc2VkIG9uICdzdGFydCcuICBUaGUKKyAgICAgICAgIyBjb250ZW50IHdvdWxkIG5vdCwgb2YgY291cnNlLCBhY3R1YWxseSB3b3JrIDopCisgICAgICAgICdyZWxhdGVkX3dpdGhfc3RhcnQnOiAoCisgICAgICAgICAgICAoMCwgMiwgTm9uZSksCisgICAgICAgICAgICAoMSwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iPT09IjsgdHlwZT10ZXh0L2h0bWw7CisgICAgICAgICAgICAgICAgIHN0YXJ0PSI8Ym9keT4iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGluY2x1ZGU+CisKKyAgICAgICAgICAgICAgICB1c2VsZXNzIHRleHQKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8Ym9keT4KKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIDwhLS0jaW5jbHVkZSBmaWxlPSI8aW5jbHVkZT4iLS0+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKworICAgICAgICAnbWl4ZWRfYWx0ZXJuYXRpdmVfcGxhaW5fcmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgzLCA0LCAyKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdHRhY0htZW5UCisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBUaGlzIHN0cnVjdHVyZSBzdWdnZXN0ZWQgYnkgU3RlcGhlbiBKLiBUdXJuYnVsbC4uLm1heSBub3QgZXhpc3QvYmUKKyAgICAgICAgIyBzdXBwb3J0ZWQgaW4gdGhlIHdpbGQsIGJ1dCB3ZSB3YW50IHRvIHN1cHBvcnQgaXQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWwnOiAoCisgICAgICAgICAgICAoMSwgNCwgMyksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgU2FtZSB0aGluZywgYnV0IHByb3Zpbmcgd2Ugb25seSBsb29rIGF0IHRoZSByb290IHBhcnQsIHdoaWNoIGlzIHRoZQorICAgICAgICAjIGZpcnN0IG9uZSBpZiB0aGVyZSBpc24ndCBhbnkgc3RhcnQgcGFyYW1ldGVyLiAgVGhhdCBpcywgdGhpcyBpcyBhCisgICAgICAgICMgYnJva2VuIHJlbGF0ZWQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWxfd3Jvbmdfb3JkZXInOiAoCisgICAgICAgICAgICAoMSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18tLQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdtZXNzYWdlX3JmYzgyMic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworICAgICAgICAgICAgICAgIFRvOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBGcm9tOiByb2JvdEBleGFtcC5jb20KKworICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBtZXNzYWdlIGJvZHkuCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21peGVkX3RleHRfbWVzc2FnZV9yZmM4MjInOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBZb3VyIG1lc3NhZ2UgaGFzIGJvdW5jZWQsIHNlci4KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorCisgICAgICAgICAgICAgICAgVG86IGJhckBleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIEZyb206IHJvYm90QGV4YW1wLmNvbQorCisgICAgICAgICAgICAgICAgdGhpcyBpcyBhIG1lc3NhZ2UgYm9keS4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAgfQorCisgICAgZGVmIG1lc3NhZ2VfYXNfZ2V0X2JvZHkoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbTm9uZSBpZiBuIGlzIE5vbmUgZWxzZSBhbGxwYXJ0c1tuXSBmb3IgbiBpbiBib2R5X3BhcnRzXQorICAgICAgICByZWxhdGVkID0gMDsgaHRtbCA9IDE7IHBsYWluID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkoKSwgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbcmVsYXRlZDpodG1sKzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcmVsYXRlZF0sIGV4cGVjdGVkW3BsYWluXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW2h0bWw6cGxhaW4rMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydyZWxhdGVkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3JlbGF0ZWRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydodG1sJ10pLCBleHBlY3RlZFtodG1sXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PVsncGxhaW4nXSksIGV4cGVjdGVkW3BsYWluXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtwbGFpbjpodG1sLTE6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcGxhaW5dLCBleHBlY3RlZFtyZWxhdGVkXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbaHRtbDo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkWzo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcsICdwbGFpbicsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtodG1sXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcGxhaW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtyZWxhdGVkXV0pKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfaXRlcl9hdHRhY2htZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBhbGxwYXJ0cyA9IGxpc3QobS53YWxrKCkpCisgICAgICAgIGF0dGFjaG1lbnRzID0gW2FsbHBhcnRzW25dIGZvciBuIGluIGF0dGFjaG1lbnRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX2F0dGFjaG1lbnRzKCkpLCBhdHRhY2htZW50cykKKworICAgIGRlZiBtZXNzYWdlX2FzX2l0ZXJfcGFydHMoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgcGFydHMgPSBbYWxscGFydHNbbl0gZm9yIG4gaW4gcGFydHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfcGFydHMoKSksIHBhcnRzKQorCisgICAgY2xhc3MgX1Rlc3RDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZywgYXJncywga3cKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua3cgPSBrdworCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfd2l0aF9jbShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgY29udGVudF9tYW5hZ2VyPWNtLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X2RlZmF1bHRfY21fY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIHAgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShjb250ZW50X21hbmFnZXI9c2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkpCisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnLCBwb2xpY3k9cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF93aXRoX2NtKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIHt9KQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBjb250ZW50X21hbmFnZXI9Y20sIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZGVmYXVsdF9jbV9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBwID0gcG9saWN5LmRlZmF1bHQuY2xvbmUoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJywgcG9saWN5PXApCisgICAgICAgIG0uc2V0X2NvbnRlbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywge30pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgIyBvdXRjb21lIGlzIHdoZXRoZXIgeHh4X21ldGhvZCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBlcnJvciB3aGVuIGNhbGxlZAorICAgICMgb24gbXVsdGlwYXJ0L3N1YnR5cGUuICBCbGFuayBvdXRjb21lIG1lYW5zIGl0IGRlcGVuZHMgb24geHh4IChhZGQKKyAgICAjIHN1Y2NlZWRzLCBtYWtlIHJhaXNlcykuICBOb3RlOiAnbm9uZScgbWVhbnMgdGhlcmUgYXJlIGNvbnRlbnQtdHlwZQorICAgICMgaGVhZGVycyBidXQgcGF5bG9hZCBpcyBOb25lLi4udGhpcyBoYXBwZW5pbmcgaW4gcHJhY3RpY2Ugd291bGQgYmUgdmVyeQorICAgICMgdW51c3VhbCwgc28gdHJlYXRpbmcgaXQgYXMgaWYgdGhlcmUgd2VyZSBjb250ZW50IHNlZW1zIHJlYXNvbmFibGUuCisgICAgIyAgICBtZXRob2QgICAgICAgICAgc3VidHlwZSAgICAgICAgICAgb3V0Y29tZQorICAgIHN1YnR5cGVfcGFyYW1zID0gKAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdyZWxhdGVkJywgICAgICAgICcnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnYWx0ZXJuYXRpdmUnLCAgICAncmFpc2VzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ21peGVkJywgICAgICAgICAgJ3JhaXNlcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdyZWxhdGVkJywgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdhbHRlcm5hdGl2ZScsICAgICcnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnbWl4ZWQnLCAgICAgICAgICAncmFpc2VzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3JlbGF0ZWQnLCAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ2FsdGVybmF0aXZlJywgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ21peGVkJywgICAgICAgICAgJycpLAorICAgICAgICApCisKKyAgICBkZWYgX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc2VsZiwgc3VidHlwZSk6CisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UoKQorICAgICAgICBwYXlsb2FkID0gTm9uZQorICAgICAgICBtc2dfaGVhZGVycyA9ICBbCisgICAgICAgICAgICAoJ1RvJywgJ2Zvb0BiYXIuY29tJyksCisgICAgICAgICAgICAoJ0Zyb20nLCAnYmFyQGZvby5jb20nKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaWYgc3VidHlwZSAhPSAnbm9fY29udGVudCc6CisgICAgICAgICAgICAoJ2NvbnRlbnQtc2hhZG93JywgJ0xvZ3J1cycpLAorICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdYLVJhbmRvbS1IZWFkZXInLCAnQ29yd2luJykpCisgICAgICAgIGlmIHN1YnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgcGF5bG9hZCA9ICcnCisgICAgICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpKQorICAgICAgICAgICAgbS5zZXRfcGF5bG9hZCgnJykKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHBheWxvYWQgPSBbXQorICAgICAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnQ29udGVudC1UeXBlJywgJ211bHRpcGFydC8nICsgc3VidHlwZSkpCisgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ1gtVHJ1bXAnLCAnUmFuZG9tJykpCisgICAgICAgIG0uc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgbVtuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBtLCBtc2dfaGVhZGVycywgcGF5bG9hZAorCisgICAgZGVmIF9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKHNlbGYsIG0sIG1ldGhvZF9uYW1lLCBzdWJ0eXBlLCBtZXRob2QpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGFyOgorICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCkKKyAgICAgICAgZXhjX3RleHQgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEluKHN1YnR5cGUsIGV4Y190ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZF9uYW1lLCBleGNfdGV4dCkKKworICAgIGRlZiBfY2hlY2tfbWFrZV9tdWx0aXBhcnQoc2VsZiwgbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgY291bnQrMSkgIyArMSBmb3IgbmV3IENvbnRlbnQtVHlwZQorICAgICAgICBwYXJ0ID0gbmV4dChtLml0ZXJfcGFydHMoKSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXJ0KSwgY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCBwYXlsb2FkKQorCisgICAgZGVmIHN1YnR5cGVfYXNfbWFrZShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgbWFrZV9tZXRob2QgPSAnbWFrZV8nICsgbWV0aG9kCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKG0sIG1ldGhvZCwgc3VidHlwZSwgbWFrZV9tZXRob2QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZ2V0YXR0cihtLCBtYWtlX21ldGhvZCkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ211bHRpcGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9zdWJ0eXBlKCksIG1ldGhvZCkKKyAgICAgICAgaWYgc3VidHlwZSA9PSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19oZWFkZXJzICsgWygnQ29udGVudC1UeXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXBhcnQvJyttZXRob2QpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX21ha2Vfd2l0aF9ib3VuZGFyeShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICAjIERvaW5nIGFsbCB2YXJpYXRpb24gaXMgYSBiaXQgb2Ygb3ZlcmtpbGwuLi4KKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZSgpCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgZ2V0YXR0cihtLCAnbWFrZV8nICsgbWV0aG9kKSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc3VidHlwZSA9PSAncGxhaW4nOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICBnZXRhdHRyKG0sICdtYWtlXycgKyBtZXRob2QpKGJvdW5kYXJ5PSJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib3VuZGFyeSgpLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X3BvbGljeV9vbl9wYXJ0X21hZGVfYnlfbWFrZV9jb21lc19mcm9tX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdtYWtlX3JlbGF0ZWQnLCAnbWFrZV9hbHRlcm5hdGl2ZScsICdtYWtlX21peGVkJyk6CisgICAgICAgICAgICBtID0gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeS5jbG9uZShjb250ZW50X21hbmFnZXI9J2ZvbycpKQorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoMCkucG9saWN5LmNvbnRlbnRfbWFuYWdlciwgJ2ZvbycpCisKKyAgICBjbGFzcyBfVGVzdFNldENvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBjb250ZW50LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoY29udGVudCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX2FkZChzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0U2V0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBhZGRfbWV0aG9kID0gJ2FkZF9hdHRhY2htZW50JyBpZiBtZXRob2Q9PSdtaXhlZCcgZWxzZSAnYWRkXycgKyBtZXRob2QKKyAgICAgICAgaWYgb3V0Y29tZSA9PSAncmFpc2VzJzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMobSwgbWV0aG9kLCBzdWJ0eXBlLCBhZGRfbWV0aG9kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGdldGF0dHIobSwgYWRkX21ldGhvZCkoJ3Rlc3QnLCBjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbXVsdGlwYXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X3N1YnR5cGUoKSwgbWV0aG9kKQorICAgICAgICBpZiBtZXRob2QgPT0gc3VidHlwZSBvciBzdWJ0eXBlID09ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X3BheWxvYWQoKSwgJ3Rlc3QnKQorICAgICAgICBpZiBtZXRob2Q9PSdtaXhlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2F0dGFjaG1lbnQnKQorICAgICAgICBlbGlmIG1ldGhvZD09J3JlbGF0ZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPdGhlcndpc2Ugd2UgZG9uJ3QgZ3Vlc3MuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10pCisKKyAgICBjbGFzcyBfVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgY29udGVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29udGVudF9tYW5hZ2VyX2Zvcl9hZGRfY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIGNtID0gc2VsZi5fVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UocG9saWN5PXNlbGYucG9saWN5LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1jbSkpCisgICAgICAgIGZvciBtZXRob2QgaW4gKCdhZGRfcmVsYXRlZCcsICdhZGRfYWx0ZXJuYXRpdmUnLCAnYWRkX2F0dGFjaG1lbnQnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBhcjoKKyAgICAgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhci5leGNlcHRpb24pLCAndGVzdCcpCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcihzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgbS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVtcygpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcl9jb250ZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBleHBlY3RlZF9oZWFkZXJzID0gW2ggZm9yIGggaW4gbS5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIG0uY2xlYXJfY29udGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLmtleXMoKSksIGV4cGVjdGVkX2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgdGVzdF9pc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLmlzX2F0dGFjaG1lbnQpCisgICAgICAgIG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdpbmxpbmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ0F0VGFjaE1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorCisKKworY2xhc3MgVGVzdEVtYWlsTWVzc2FnZShUZXN0RW1haWxNZXNzYWdlQmFzZSwgVGVzdEVtYWlsQmFzZSk6CisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfYWRkc19NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ01JTUUtVmVyc2lvbiddLCAnMS4wJykKKworICAgIGNsYXNzIF9NSU1FX1ZlcnNpb25fYWRkaW5nX0NNOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2R1cGxpY2F0ZV9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX01JTUVfVmVyc2lvbl9hZGRpbmdfQ00oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydNSU1FLVZlcnNpb24nXSwgJzEuMCcpCisKKworY2xhc3MgVGVzdE1JTUVQYXJ0KFRlc3RFbWFpbE1lc3NhZ2VCYXNlLCBUZXN0RW1haWxCYXNlKToKKyAgICAjIERvaW5nIHRoZSBmdWxsIHRlc3QgcnVuIGhlcmUgbWF5IHNlZW0gYSBiaXQgcmVkdW5kYW50LCBzaW5jZSB0aGUgdHdvCisgICAgIyBjbGFzc2VzIGFyZSBhbG1vc3QgaWRlbnRpY2FsLiAgQnV0IHdoYXQgaWYgdGhleSBkcmlmdCBhcGFydD8gIFNvIHdlIGRvCisgICAgIyB0aGUgZnVsbCB0ZXN0cyBzbyB0aGF0IGFueSBmdXR1cmUgZHJpZnQgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4KKyAgICBtZXNzYWdlID0gTUlNRVBhcnQKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2FkZF9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQppbmRleCA5ODNiZDQ5Li4wNmFkNWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgJ3JhaXNlX29uX2RlZmVjdCc6ICAgICAgICAgIEZhbHNlLAogICAgICAgICAnaGVhZGVyX2ZhY3RvcnknOiAgICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9mYWN0b3J5LAogICAgICAgICAncmVmb2xkX3NvdXJjZSc6ICAgICAgICAgICAgJ2xvbmcnLAorICAgICAgICAnY29udGVudF9tYW5hZ2VyJzogICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlciwKICAgICAgICAgfSkKIAogICAgICMgRm9yIGVhY2ggcG9saWN5IHVuZGVyIHRlc3QsIHdlIGdpdmUgaGVyZSB3aGF0IHdlIGV4cGVjdCB0aGUgZGVmYXVsdHMgdG8KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKaW5kZXggNTQ0YjFiYi4uMTljZjY0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKQEAgLTI3LDcgKzI3LDcgQEAKICMgUHJldmVudCB0aGlzIHRlc3QgZnJvbSBydW5uaW5nIGluIHRoZSBQeXRob24gZGlzdHJvCiB0cnk6CiAgICAgb3BlbmZpbGUoJ2NyaXNwaW4tdG9ydHVyZS50eHQnKQotZXhjZXB0IElPRXJyb3I6CitleGNlcHQgT1NFcnJvcjoKICAgICByYWlzZSBUZXN0U2tpcHBlZAogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnN1cmVwaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmMDBmZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5CkBAIC0wLDAgKzEsMTI4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitpbXBvcnQgZW5zdXJlcGlwCitpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCisKKworY2xhc3MgVGVzdEVuc3VyZVBpcFZlcnNpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmV0dXJuc192ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZXBpcC5fUElQX1ZFUlNJT04sIGVuc3VyZXBpcC52ZXJzaW9uKCkpCisKKworY2xhc3MgVGVzdEJvb3RzdHJhcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJ1bl9waXBfcGF0Y2ggPSB1bml0dGVzdC5tb2NrLnBhdGNoKCJlbnN1cmVwaXAuX3J1bl9waXAiKQorICAgICAgICBzZWxmLnJ1bl9waXAgPSBydW5fcGlwX3BhdGNoLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJ1bl9waXBfcGF0Y2guc3RvcCkKKworICAgICAgICAjIEF2b2lkIHNpZGUgZWZmZWN0cyBvbiB0aGUgYWN0dWFsIG9zIG1vZHVsZQorICAgICAgICBvc19wYXRjaCA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goImVuc3VyZXBpcC5vcyIpCisgICAgICAgIHBhdGNoZWRfb3MgPSBvc19wYXRjaC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvc19wYXRjaC5zdG9wKQorICAgICAgICBwYXRjaGVkX29zLnBhdGggPSBvcy5wYXRoCisgICAgICAgIHNlbGYub3NfZW52aXJvbiA9IHBhdGNoZWRfb3MuZW52aXJvbiA9IG9zLmVudmlyb24uY29weSgpCisKKyAgICBkZWYgdGVzdF9iYXNpY19ib290c3RyYXBwaW5nKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICAgICAgYWRkaXRpb25hbF9wYXRocyA9IHNlbGYucnVuX3BpcC5jYWxsX2FyZ3NbMF1bMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWRkaXRpb25hbF9wYXRocyksIDIpCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfcm9vdChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChyb290PSIvZm9vL2Jhci8iKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXByZSIsICItLXJvb3QiLCAiL2Zvby9iYXIvIiwKKyAgICAgICAgICAgICAgICAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdXNlcihzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh1c2VyPVRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tcHJlIiwgIi0tdXNlciIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF91cGdyYWRlKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHVwZ3JhZGU9VHJ1ZSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAiLS11cGdyYWRlIiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8xKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0xKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXByZSIsICItdiIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMihzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MikKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAiLXZ2IiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8zKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0zKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXByZSIsICItdnZ2IiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3JlZ3VsYXJfaW5zdGFsbChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJFTlNVUkVQSVBfT1BUSU9OUyJdLCAiaW5zdGFsbCIpCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfYWx0X2luc3RhbGwoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoYWx0aW5zdGFsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3NfZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSwgImFsdGluc3RhbGwiKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX2RlZmF1bHRfcGlwKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGRlZmF1bHRfcGlwPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkVOU1VSRVBJUF9PUFRJT05TIiwgc2VsZi5vc19lbnZpcm9uKQorCisgICAgZGVmIHRlc3RfYWx0aW5zdGFsbF9kZWZhdWx0X3BpcF9jb25mbGljdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoYWx0aW5zdGFsbD1UcnVlLCBkZWZhdWx0X3BpcD1UcnVlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2YwZTVkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTMyNSBAQAoraW1wb3J0IGVudW0KK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgcHlkb2MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gZW51bSBpbXBvcnQgRW51bSwgSW50RW51bSwgRW51bU1ldGEsIHVuaXF1ZQorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gcGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMsIFBpY2tsaW5nRXJyb3IKKworIyBmb3IgcGlja2xlIHRlc3RzCit0cnk6CisgICAgY2xhc3MgU3Rvb2dlcyhFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxCisgICAgICAgIENVUkxZID0gMgorICAgICAgICBNT0UgPSAzCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBTdG9vZ2VzID0gZXhjCisKK3RyeToKKyAgICBjbGFzcyBJbnRTdG9vZ2VzKGludCwgRW51bSk6CisgICAgICAgIExBUlJZID0gMQorICAgICAgICBDVVJMWSA9IDIKKyAgICAgICAgTU9FID0gMworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgSW50U3Rvb2dlcyA9IGV4YworCit0cnk6CisgICAgY2xhc3MgRmxvYXRTdG9vZ2VzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxLjM5CisgICAgICAgIENVUkxZID0gMi43MgorICAgICAgICBNT0UgPSAzLjE0MjU5NgorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgRmxvYXRTdG9vZ2VzID0gZXhjCisKKyMgZm9yIHBpY2tsZSB0ZXN0IGFuZCBzdWJjbGFzcyB0ZXN0cwordHJ5OgorICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgJ2FjY2VwdHMgb25seSBzdHJpbmcgdmFsdWVzJworICAgIGNsYXNzIE5hbWUoU3RyRW51bSk6CisgICAgICAgIEJERkwgPSAnR3VpZG8gdmFuIFJvc3N1bScKKyAgICAgICAgRkxVRkwgPSAnQmFycnkgV2Fyc2F3JworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgTmFtZSA9IGV4YworCit0cnk6CisgICAgUXVlc3Rpb24gPSBFbnVtKCdRdWVzdGlvbicsICd3aG8gd2hhdCB3aGVuIHdoZXJlIHdoeScsIG1vZHVsZT1fX25hbWVfXykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIFF1ZXN0aW9uID0gZXhjCisKK3RyeToKKyAgICBBbnN3ZXIgPSBFbnVtKCdBbnN3ZXInLCAnaGltIHRoaXMgdGhlbiB0aGVyZSBiZWNhdXNlJykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEFuc3dlciA9IGV4YworCisjIGZvciBkb2N0ZXN0cwordHJ5OgorICAgIGNsYXNzIEZydWl0KEVudW0pOgorICAgICAgICB0b21hdG8gPSAxCisgICAgICAgIGJhbmFuYSA9IDIKKyAgICAgICAgY2hlcnJ5ID0gMworZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdEhlbHBlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgX2lzX2Rlc2NyaXB0b3IsIF9pc19zdW5kZXIsIF9pc19kdW5kZXIKKworICAgIGRlZiB0ZXN0X2lzX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGNsYXNzIGZvbzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGF0dHIgaW4gKCdfX2dldF9fJywnX19zZXRfXycsJ19fZGVsZXRlX18nKToKKyAgICAgICAgICAgIG9iaiA9IGZvbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKyAgICAgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKworICAgIGRlZiB0ZXN0X2lzX3N1bmRlcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCdfYV8nLCAnX2FhXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX3N1bmRlcihzKSkKKworICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfX2FfXycsICdfYV9fJywgJ19fYV8nLCAnXycsCisgICAgICAgICAgICAgICAgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19zdW5kZXIocykpCisKKyAgICBkZWYgdGVzdF9pc19kdW5kZXIoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnX19hX18nLCAnX19hYV9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfZHVuZGVyKHMpKQorICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfYV8nLCAnX2FfXycsICdfX2FfJywgJ18nLAorICAgICAgICAgICAgICAgICdfXycsICdfX18nLCAnX19fXycsICdfX19fXycsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfZHVuZGVyKHMpKQorCisKK2NsYXNzIFRlc3RFbnVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgc2VsZi5TZWFzb24gPSBTZWFzb24KKworICAgICAgICBjbGFzcyBLb25zdGFudHMoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgRSA9IDIuNzE4MjgxOAorICAgICAgICAgICAgUEkgPSAzLjE0MTU5MjYKKyAgICAgICAgICAgIFRBVSA9IDIgKiBQSQorICAgICAgICBzZWxmLktvbnN0YW50cyA9IEtvbnN0YW50cworCisgICAgICAgIGNsYXNzIEdyYWRlcyhJbnRFbnVtKToKKyAgICAgICAgICAgIEEgPSA1CisgICAgICAgICAgICBCID0gNAorICAgICAgICAgICAgQyA9IDMKKyAgICAgICAgICAgIEQgPSAyCisgICAgICAgICAgICBGID0gMAorICAgICAgICBzZWxmLkdyYWRlcyA9IEdyYWRlcworCisgICAgICAgIGNsYXNzIERpcmVjdGlvbmFsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBFQVNUID0gJ2Vhc3QnCisgICAgICAgICAgICBXRVNUID0gJ3dlc3QnCisgICAgICAgICAgICBOT1JUSCA9ICdub3J0aCcKKyAgICAgICAgICAgIFNPVVRIID0gJ3NvdXRoJworICAgICAgICBzZWxmLkRpcmVjdGlvbmFsID0gRGlyZWN0aW9uYWwKKworICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCisgICAgICAgIGNsYXNzIEhvbGlkYXkoZGF0ZSwgRW51bSk6CisgICAgICAgICAgICBORVdfWUVBUiA9IDIwMTMsIDEsIDEKKyAgICAgICAgICAgIElERVNfT0ZfTUFSQ0ggPSAyMDEzLCAzLCAxNQorICAgICAgICBzZWxmLkhvbGlkYXkgPSBIb2xpZGF5CisKKyAgICBkZWYgdGVzdF9kaXJfb25fY2xhc3Moc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZXQoZGlyKFNlYXNvbikpLAorICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXycsCisgICAgICAgICAgICAgICAgJ1NQUklORycsICdTVU1NRVInLCAnQVVUVU1OJywgJ1dJTlRFUiddKSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rpcl9vbl9pdGVtKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihTZWFzb24uV0lOVEVSKSksCisgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSksCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfd2l0aF9hZGRlZF9iZWhhdmlvcihzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdChFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAndGhhdCcKKyAgICAgICAgICAgIHRoZXNlID0gJ3Rob3NlJworICAgICAgICAgICAgZGVmIHdvd3NlcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJXb3dzZXIhIEknbSAlcyEiICUgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoVGVzdCkpLAorICAgICAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nLCAndGhpcycsICd0aGVzZSddKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2V0KGRpcihUZXN0LnRoaXMpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnLCAnd293c2VyJ10pLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2VudW1faW5fZW51bV9vdXQoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKFNlYXNvbi5XSU5URVIpLCBTZWFzb24uV0lOVEVSKQorCisgICAgZGVmIHRlc3RfZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRTdG9vZ2VzLkNVUkxZLnZhbHVlLCAyKQorCisgICAgZGVmIHRlc3RfZW51bShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgbHN0ID0gbGlzdChTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTZWFzb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTZWFzb24pLCA0LCBTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbU2Vhc29uLlNQUklORywgU2Vhc29uLlNVTU1FUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLldJTlRFUl0sIGxzdCkKKworICAgICAgICBmb3IgaSwgc2Vhc29uIGluIGVudW1lcmF0ZSgnU1BSSU5HIFNVTU1FUiBBVVRVTU4gV0lOVEVSJy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTZWFzb24oaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgZ2V0YXR0cihTZWFzb24sIHNlYXNvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudmFsdWUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ1NlYXNvbi4nICsgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVwcihlKSwKKyAgICAgICAgICAgICAgICAgICAgJzxTZWFzb24uezB9OiB7MX0+Jy5mb3JtYXQoc2Vhc29uLCBpKSwKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLm5hbWUsICdTUFJJTkcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcudmFsdWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORy5uYW1lID0gJ2ludmllcm5vJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcudmFsdWUgPSAyCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ19tZW1iZXIoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLldJTlRFUiA9ICdyZWFsbHkgY29sZCcKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorCisgICAgICAgICAgICBkZWYgc3BhbShjbHMpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihTZWFzb24sICdzcGFtJykpCisgICAgICAgIGRlbCBTZWFzb24uc3BhbQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoU2Vhc29uLCAnc3BhbScpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5TUFJJTkcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLkRSWQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uU1BSSU5HLm5hbWUKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBtcm8gPSA5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfY3JlYXRlXz0gMTEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9nZXRfbWl4aW5zXyA9IDkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9maW5kX25ld18gPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfYW55X25hbWVfID0gOQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oU2Vhc29uLkFVVFVNTiwgU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDMsIFNlYXNvbikKKworICAgICAgICB2YWwgPSBTZWFzb24oMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIFNlYXNvbikKKworICAgICAgICBjbGFzcyBPdGhlckVudW0oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxOyB0d28gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oT3RoZXJFbnVtLnR3bywgU2Vhc29uKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBTZWFzb24uV0lOVEVSCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPiA0CisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChTZWFzb24uU1BSSU5HLCAxKQorCisgICAgICAgIGNsYXNzIFBhcnQoRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBDTElQID0gMgorICAgICAgICAgICAgQkFSUkVMID0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoU2Vhc29uLlNQUklORywgUGFydC5TUFJJTkcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBQYXJ0LkNMSVAKKworICAgIGRlZiB0ZXN0X2VudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gRkFMTCA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFOT1RIRVJfU1BSSU5HID0gMQorICAgICAgICBsc3QgPSBsaXN0KFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgIFtTZWFzb24uU1BSSU5HLCBTZWFzb24uU1VNTUVSLAorICAgICAgICAgICAgIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5XSU5URVIsCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbi5GQUxMLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5GQUxMLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5BVVRVTU4udmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKDMpLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbigxKSwgU2Vhc29uLlNQUklORykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uRkFMTC5uYW1lLCAnQVVUVU1OJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbayBmb3Igayx2IGluIFNlYXNvbi5fX21lbWJlcnNfXy5pdGVtcygpIGlmIHYubmFtZSAhPSBrXSwKKyAgICAgICAgICAgICAgICBbJ0ZBTEwnLCAnQU5PVEhFUl9TUFJJTkcnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICAgICAgcmVkID0gNAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkJworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkZGVyJworICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworCisKKyAgICBkZWYgdGVzdF9lbnVtX3dpdGhfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgSHVoKEVudW0pOgorICAgICAgICAgICAgbmFtZSA9IDEKKyAgICAgICAgICAgIHZhbHVlID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChIdWgpLAorICAgICAgICAgICAgW0h1aC5uYW1lLCBIdWgudmFsdWVdLAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoSHVoLm5hbWUpLCBIdWgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHVoLm5hbWUubmFtZSwgJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh1aC5uYW1lLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggJ3s6fScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnezp9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezoyMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezoyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Ol4yMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezpeMjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo+MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6PjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6PDIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OjwyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fY3VzdG9tKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0RmxvYXQoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgb25lID0gMS4wCisgICAgICAgICAgICB0d28gPSAyLjAKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGVzdEZsb2F0IHN1Y2Nlc3MhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KFRlc3RGbG9hdC5vbmUpLCAnVGVzdEZsb2F0IHN1Y2Nlc3MhJykKKworICAgIGRlZiBhc3NlcnRGb3JtYXRJc1ZhbHVlKHNlbGYsIHNwZWMsIG1lbWJlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5mb3JtYXQobWVtYmVyKSwgc3BlYy5mb3JtYXQobWVtYmVyLnZhbHVlKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2RhdGUoc2VsZik6CisgICAgICAgIEhvbGlkYXkgPSBzZWxmLkhvbGlkYXkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbX0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbSAlTTowMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9mbG9hdChzZWxmKToKKyAgICAgICAgS29uc3RhbnRzID0gc2VsZi5Lb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpufScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo1LjJ9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OmZ9JywgS29uc3RhbnRzLlRBVSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2ludChzZWxmKToKKyAgICAgICAgR3JhZGVzID0gc2VsZi5HcmFkZXMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezorfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MDhYfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6Yn0nLCBHcmFkZXMuQykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX3N0cihzZWxmKToKKyAgICAgICAgRGlyZWN0aW9uYWwgPSBzZWxmLkRpcmVjdGlvbmFsCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgZGF0ZXMgPSB7fQorICAgICAgICBkYXRlc1tTZWFzb24uV0lOVEVSXSA9ICcxMjI1JworICAgICAgICBkYXRlc1tTZWFzb24uU1BSSU5HXSA9ICcwMzE1JworICAgICAgICBkYXRlc1tTZWFzb24uU1VNTUVSXSA9ICcwNzA0JworICAgICAgICBkYXRlc1tTZWFzb24uQVVUVU1OXSA9ICcxMDMxJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGVzW1NlYXNvbi5BVVRVTU5dLCAnMTAzMScpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGludCwgRW51bSk6CisgICAgICAgICAgICBwaSA9IDMKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShJbnRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMworICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfZmxvYXRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9mbG9hdGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGbG9hdEVudW0oZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoRmxvYXRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9zdHJlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KHN0ciwgRW51bSk6CisgICAgICAgICAgICBwaSA9ICdQaScKKyAgICAgICAgICAgIHRhdSA9ICdUYXUnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3Rfc3RyZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KFN0ckVudW0pOgorICAgICAgICAgICAgcGkgPSAnUGknCisgICAgICAgICAgICB0YXUgPSAnVGF1JworICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworCisgICAgZGVmIHRlc3RfaW50ZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSAzCisgICAgICAgICAgICBXRURORVNEQVkgPSA0CisgICAgICAgICAgICBUSFVSU0RBWSA9IDUKKyAgICAgICAgICAgIEZSSURBWSA9IDYKKyAgICAgICAgICAgIFNBVFVSREFZID0gNworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhJywgJ2InLCAnYyddW1dlZWtEYXkuTU9OREFZXSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpIGZvciBpIGluIHJhbmdlKFdlZWtEYXkuVFVFU0RBWSldLCBbMCwgMSwgMl0pCisKKyAgICAgICAgbHN0ID0gbGlzdChXZWVrRGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oV2Vla0RheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFdlZWtEYXkpLCA3KQorICAgICAgICB0YXJnZXQgPSAnU1VOREFZIE1PTkRBWSBUVUVTREFZIFdFRE5FU0RBWSBUSFVSU0RBWSBGUklEQVkgU0FUVVJEQVknCisgICAgICAgIHRhcmdldCA9IHRhcmdldC5zcGxpdCgpCisgICAgICAgIGZvciBpLCB3ZWVrZGF5IGluIGVudW1lcmF0ZSh0YXJnZXQsIDEpOgorICAgICAgICAgICAgZSA9IFdlZWtEYXkoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIHdlZWtkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFdlZWtEYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdC5pbmRleChlKSsxLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBlIDwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgV2Vla0RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRW51bSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSBURVVTREFZID0gMworICAgICAgICAgICAgV0VETkVTREFZID0gNAorICAgICAgICAgICAgVEhVUlNEQVkgPSA1CisgICAgICAgICAgICBGUklEQVkgPSA2CisgICAgICAgICAgICBTQVRVUkRBWSA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhXZWVrRGF5LlRFVVNEQVksIFdlZWtEYXkuVFVFU0RBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXZWVrRGF5KDMpLm5hbWUsICdUVUVTREFZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3Igayx2IGluIFdlZWtEYXkuX19tZW1iZXJzX18uaXRlbXMoKQorICAgICAgICAgICAgICAgIGlmIHYubmFtZSAhPSBrXSwgWydURVVTREFZJywgXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBTdG9vZ2VzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3Rvb2dlcy5DVVJMWSwgbG9hZHMoZHVtcHMoU3Rvb2dlcy5DVVJMWSkpKQorICAgICAgICBzZWxmLmFzc2VydElzKFN0b29nZXMsIGxvYWRzKGR1bXBzKFN0b29nZXMpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9pbnQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoSW50U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEludFN0b29nZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhJbnRTdG9vZ2VzLkNVUkxZLCBsb2FkcyhkdW1wcyhJbnRTdG9vZ2VzLkNVUkxZKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoSW50U3Rvb2dlcywgbG9hZHMoZHVtcHMoSW50U3Rvb2dlcykpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2Zsb2F0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEZsb2F0U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEZsb2F0U3Rvb2dlcworICAgICAgICBzZWxmLmFzc2VydElzKEZsb2F0U3Rvb2dlcy5DVVJMWSwgbG9hZHMoZHVtcHMoRmxvYXRTdG9vZ2VzLkNVUkxZKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmxvYXRTdG9vZ2VzLCBsb2FkcyhkdW1wcyhGbG9hdFN0b29nZXMpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEFuc3dlciwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEFuc3dlcgorICAgICAgICBzZWxmLmFzc2VydElzKEFuc3dlci5oaW0sIGxvYWRzKGR1bXBzKEFuc3dlci5oaW0pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBbnN3ZXIsIGxvYWRzKGR1bXBzKEFuc3dlcikpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb25fd2l0aF9tb2R1bGUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoUXVlc3Rpb24sIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBRdWVzdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzKFF1ZXN0aW9uLndobywgbG9hZHMoZHVtcHMoUXVlc3Rpb24ud2hvKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUXVlc3Rpb24sIGxvYWRzKGR1bXBzKFF1ZXN0aW9uKSkpCisKKyAgICBkZWYgdGVzdF9leHBsb2RpbmdfcGlja2xlKHNlbGYpOgorICAgICAgICBCYWRQaWNrbGUgPSBFbnVtKCdCYWRQaWNrbGUnLCAnZGlsbCBzd2VldCBicmVhZC1uLWJ1dHRlcicpCisgICAgICAgIGVudW0uX21ha2VfY2xhc3NfdW5waWNrbGFibGUoQmFkUGlja2xlKQorICAgICAgICBnbG9iYWxzKClbJ0JhZFBpY2tsZSddID0gQmFkUGlja2xlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGR1bXBzKEJhZFBpY2tsZS5kaWxsKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBpY2tsaW5nRXJyb3IpOgorICAgICAgICAgICAgZHVtcHMoQmFkUGlja2xlKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIFNraWxsTGV2ZWwoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIG1hc3RlciA9ICd3aGF0IGlzIHRoZSBzb3VuZCBvZiBvbmUgaGFuZCBjbGFwcGluZz8nCisgICAgICAgICAgICBqb3VybmV5bWFuID0gJ3doeSBkaWQgdGhlIGNoaWNrZW4gY3Jvc3MgdGhlIHJvYWQ/JworICAgICAgICAgICAgYXBwcmVudGljZSA9ICdrbm9jaywga25vY2shJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNraWxsTGV2ZWwuYXBwcmVudGljZSwgJ2tub2NrLCBrbm9jayEnKQorCisgICAgZGVmIHRlc3RfZ2V0YXR0cl9nZXRpdGVtKHNlbGYpOgorICAgICAgICBjbGFzcyBQZXJpb2QoRW51bSk6CisgICAgICAgICAgICBtb3JuaW5nID0gMQorICAgICAgICAgICAgbm9vbiA9IDIKKyAgICAgICAgICAgIGV2ZW5pbmcgPSAzCisgICAgICAgICAgICBuaWdodCA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2QoMiksIFBlcmlvZC5ub29uKQorICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIoUGVyaW9kLCAnbmlnaHQnKSwgUGVyaW9kLm5pZ2h0KQorICAgICAgICBzZWxmLmFzc2VydElzKFBlcmlvZFsnbW9ybmluZyddLCBQZXJpb2QubW9ybmluZykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZHVuZGVyKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihTZWFzb24sICdfX2VxX18nKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgV0lOVEVSID0gNAorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QoU2Vhc29uKSwKKyAgICAgICAgICAgICAgICBbU2Vhc29uLlNVTU1FUiwgU2Vhc29uLldJTlRFUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLlNQUklOR10sCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZWRfaXRlcmF0aW9uX29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QocmV2ZXJzZWQoc2VsZi5TZWFzb24pKSwKKyAgICAgICAgICAgICAgICBbc2VsZi5TZWFzb24uV0lOVEVSLCBzZWxmLlNlYXNvbi5BVVRVTU4sIHNlbGYuU2Vhc29uLlNVTU1FUiwKKyAgICAgICAgICAgICAgICAgc2VsZi5TZWFzb24uU1BSSU5HXQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZ19saXN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgWydqdW5lJywgJ2p1bHknLCAnYXVndXN0J10pCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKAorICAgICAgICAgICAgICAgICdTdW1tZXJNb250aCcsCisgICAgICAgICAgICAgICAgKCgnanVuZScsIDEpLCAoJ2p1bHknLCAyKSwgKCdhdWd1c3QnLCAzKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9mcm9tX2RpY3Qoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KCgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcsIHR5cGU9aW50KQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGVfZnJvbV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBJbnRFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShOYW1lLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgTmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5hbWUuQkRGTCwgJ0d1aWRvIHZhbiBSb3NzdW0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTmFtZS5CREZMLCBOYW1lKCdHdWlkbyB2YW4gUm9zc3VtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTmFtZS5CREZMLCBnZXRhdHRyKE5hbWUsICdCREZMJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTmFtZS5CREZMLCBsb2FkcyhkdW1wcyhOYW1lLkJERkwpKSkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIE1vcmVDb2xvcihDb2xvcik6CisgICAgICAgICAgICAgICAgY3lhbiA9IDQKKyAgICAgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgICAgIHllbGxvdyA9IDYKKworICAgIGRlZiB0ZXN0X2V4Y2x1ZGVfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgY2xhc3Mgd2hhdGV2ZXIoRW51bSk6CisgICAgICAgICAgICB0aGlzID0gJ3RoYXQnCisgICAgICAgICAgICB0aGVzZSA9ICd0aG9zZScKKyAgICAgICAgICAgIGRlZiByZWFsbHkoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdubywgbm90ICVzJyAlIHNlbGYudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh0eXBlKHdoYXRldmVyLnJlYWxseSksIHdoYXRldmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdoYXRldmVyLnRoaXMucmVhbGx5KCksICdubywgbm90IHRoYXQnKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfaW5oZXJpdGFuY2Vfb3JkZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0sIHN0cik6CisgICAgICAgICAgICAgICAgTm90SGVyZSA9ICdlcnJvciBiZWZvcmUgdGhpcyBwb2ludCcKKworICAgIGRlZiB0ZXN0X2ludGVudW1fdHJhbnNpdGl2aXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBudW1iZXIoSW50RW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAyCisgICAgICAgICAgICB0aHJlZSA9IDMKKyAgICAgICAgY2xhc3MgbnVtZXJvKEludEVudW0pOgorICAgICAgICAgICAgdW5vID0gMQorICAgICAgICAgICAgZG9zID0gMgorICAgICAgICAgICAgdHJlcyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIub25lLCBudW1lcm8udW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci50d28sIG51bWVyby5kb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLnRocmVlLCBudW1lcm8udHJlcykKKworICAgIGRlZiB0ZXN0X3dyb25nX2VudW1faW5fY2FsbChzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIE1vbm9jaHJvbWUsIEdlbmRlci5tYWxlKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfZW51bV9pbl9taXhlZF9jYWxsKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEludEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTW9ub2Nocm9tZSwgR2VuZGVyLm1hbGUpCisKKyAgICBkZWYgdGVzdF9taXhlZF9lbnVtX2luX2NhbGxfMShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShJbnRFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTW9ub2Nocm9tZShHZW5kZXIuZmVtYWxlKSwgTW9ub2Nocm9tZS53aGl0ZSkKKworICAgIGRlZiB0ZXN0X21peGVkX2VudW1faW5fY2FsbF8yKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEludEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhNb25vY2hyb21lKEdlbmRlci5tYWxlKSwgTW9ub2Nocm9tZS5ibGFjaykKKworICAgIGRlZiB0ZXN0X2ZsdWZsX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEZsdWZsbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLnZhbHVlKQorICAgICAgICBjbGFzcyBNYWlsTWFuT3B0aW9ucyhGbHVmbG51bSk6CisgICAgICAgICAgICBvcHRpb24xID0gMQorICAgICAgICAgICAgb3B0aW9uMiA9IDIKKyAgICAgICAgICAgIG9wdGlvbjMgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KE1haWxNYW5PcHRpb25zLm9wdGlvbjEpLCAxKQorCisgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgb25lID0gMTAwCisgICAgICAgICAgICB0d28gPSAyMDAKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOdW1iZXIub25lLl9tZW1iZXJfdHlwZV8sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOdW1iZXIuX21lbWJlcl90eXBlXywgaW50KQorICAgICAgICBjbGFzcyBTdHJpbmcoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHlhcm4gPSAnc29mdCcKKyAgICAgICAgICAgIHJvcGUgPSAncm91Z2gnCisgICAgICAgICAgICB3aXJlID0gJ2hhcmQnCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3RyaW5nLnlhcm4uX21lbWJlcl90eXBlXywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzKFN0cmluZy5fbWVtYmVyX3R5cGVfLCBzdHIpCisgICAgICAgIGNsYXNzIFBsYWluKEVudW0pOgorICAgICAgICAgICAgdmFuaWxsYSA9ICd3aGl0ZScKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQbGFpbi52YW5pbGxhLl9tZW1iZXJfdHlwZV8sIG9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQbGFpbi5fbWVtYmVyX3R5cGVfLCBvYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19zdWNoX2VudW1fbWVtYmVyKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbG9yKDQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgQ29sb3JbJ2NoYXJ0cmV1c2UnXQorCisgICAgZGVmIHRlc3RfbmV3X3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZG9uJ3QgeW91IGp1c3QgbG92ZSBzaGFkZXMgb2YgJXM/IiAlIHNlbGYubmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlcHIoQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgImRvbid0IHlvdSBqdXN0IGxvdmUgc2hhZGVzIG9mIGJsdWU/IiwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgTXlFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTXkgbmFtZSBpcyAlcy4iICUgc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIE15SW50RW51bShpbnQsIE15RW51bSk6CisgICAgICAgICAgICB0aGlzID0gMQorICAgICAgICAgICAgdGhhdCA9IDIKKyAgICAgICAgICAgIHRoZW90aGVyID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTXlJbnRFbnVtLnRoYXQpLCAiTXkgbmFtZSBpcyB0aGF0LiIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9taXhpbl9tcm8oc2VsZik6CisgICAgICAgIGNsYXNzIGF1dG9fZW51bSh0eXBlKEVudW0pKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKG1ldGFjbHMsIGNscywgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgICAgICAgICAgdGVtcCA9IHR5cGUoY2xhc3NkaWN0KSgpCisgICAgICAgICAgICAgICAgbmFtZXMgPSBzZXQoY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXMpCisgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICBmb3IgayBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdiA9IGNsYXNzZGljdFtrXQorICAgICAgICAgICAgICAgICAgICBpZiB2IGlzIEVsbGlwc2lzOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB2CisgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgICAgICB0ZW1wW2tdID0gdgorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIGNsYXNzZGljdC5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBba10gPSB2CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKGF1dG9fZW51bSwgbWV0YWNscykuX19uZXdfXygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFjbHMsIGNscywgYmFzZXMsIHRlbXApCisKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcmVkRW51bShFbnVtLCBtZXRhY2xhc3M9YXV0b19lbnVtKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBBdXRvSW50RW51bShJbnRFbnVtLCBtZXRhY2xhc3M9YXV0b19lbnVtKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0QXV0b051bWJlcihBdXRvTnVtYmVyZWRFbnVtKToKKyAgICAgICAgICAgIGEgPSAuLi4KKyAgICAgICAgICAgIGIgPSAzCisgICAgICAgICAgICBjID0gLi4uCisKKyAgICAgICAgY2xhc3MgVGVzdEF1dG9JbnQoQXV0b0ludEVudW0pOgorICAgICAgICAgICAgYSA9IC4uLgorICAgICAgICAgICAgYiA9IDMKKyAgICAgICAgICAgIGMgPSAuLi4KKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXNfd2l0aF9nZXRuZXdhcmdzKHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJncworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZHMoZHVtcHMoTkk1KSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZHMoZHVtcHMoTkVJLnkpKSwgTkVJLnkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhvdXRfZ2V0bmV3YXJncyhzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGR1bXBzKE5FSS54KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBpY2tsaW5nRXJyb3IpOgorICAgICAgICAgICAgZHVtcHMoTkVJKQorCisgICAgZGVmIHRlc3RfdHVwbGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFNvbWVUdXBsZSh0dXBsZSwgRW51bSk6CisgICAgICAgICAgICBmaXJzdCA9ICgxLCAnZm9yIHRoZSBtb25leScpCisgICAgICAgICAgICBzZWNvbmQgPSAoMiwgJ2ZvciB0aGUgc2hvdycpCisgICAgICAgICAgICB0aGlyZCA9ICgzLCAnZm9yIHRoZSBtdXNpYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShTb21lVHVwbGUuZmlyc3QpLCBTb21lVHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShTb21lVHVwbGUuc2Vjb25kLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lVHVwbGUudGhpcmQsICgzLCAnZm9yIHRoZSBtdXNpYycpKQorICAgICAgICBnbG9iYWxzKClbJ1NvbWVUdXBsZSddID0gU29tZVR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZHMoZHVtcHMoU29tZVR1cGxlLmZpcnN0KSksIFNvbWVUdXBsZS5maXJzdCkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV92YWx1ZXNfZ2l2ZV91bmlxdWVfZW51bV9pdGVtcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAgICAgICAgIGZpcnN0ID0gKCkKKyAgICAgICAgICAgIHNlY29uZCA9ICgpCisgICAgICAgICAgICB0aGlyZCA9ICgpCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KEF1dG9OdW1iZXIpLAorICAgICAgICAgICAgICAgIFtBdXRvTnVtYmVyLmZpcnN0LCBBdXRvTnVtYmVyLnNlY29uZCwgQXV0b051bWJlci50aGlyZF0sCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChBdXRvTnVtYmVyLnNlY29uZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXV0b051bWJlci50aGlyZC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBdXRvTnVtYmVyKDEpLCBBdXRvTnVtYmVyLmZpcnN0KQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX25ld19mcm9tX2VuaGFuY2VkX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9uZXdfZnJvbV9taXhlZF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IGludC5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBBbHdheXNFcXVhbDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNsYXNzIE9yZGluYXJ5RW51bShFbnVtKToKKyAgICAgICAgICAgIGEgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQWx3YXlzRXF1YWwoKSwgT3JkaW5hcnlFbnVtLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT3JkaW5hcnlFbnVtLmEsIEFsd2F5c0VxdWFsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX21peGluKHNlbGYpOgorICAgICAgICBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPiBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPD0gb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfIDwgb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKEdyYWRlLkEsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKEdyYWRlLkYsIEdyYWRlLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhHcmFkZS5ELCBHcmFkZS5BKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChHcmFkZS5CLCBHcmFkZS5CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdyYWRlLkIsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoR3JhZGUuQywgR3JhZGUuRCkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzIoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHByaW50KHNlbGYubmFtZSkKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmczKHNlbGYpOgorICAgICAgICBjbGFzcyBTaGFkZShFbnVtKToKKyAgICAgICAgICAgIGRlZiBzaGFkZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIENvbG9yKFNoYWRlKToKKyAgICAgICAgICAgIGRlZiBoZXgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyBoZXhsaWZpZWQhJyAlIHNlbGYudmFsdWUKKyAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgeWVsbG93ID0gNgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vcmVDb2xvci5tYWdlbnRhLmhleCgpLCAnNSBoZXhsaWZpZWQhJykKKworCisgICAgZGVmIHRlc3Rfbm9fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVW5pcXVlRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgICAgICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gVW5pcXVlRW51bTogICVyIC0tPiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhLCBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgY2xhc3MgQ29sb3IoVW5pcXVlRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICBncmVuZSA9IDIKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAgICAgICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAgICAgICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAgICAgICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgICAgICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgICAgICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgICAgICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgICAgICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgICAgICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgICAgICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgICAgICAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAgICAgICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAgICAgICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHksIDIpLCA5LjgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBsYW5ldC5FQVJUSC52YWx1ZSwgKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KSkKKworICAgIGRlZiB0ZXN0X25vbmhhc2hfdmFsdWUoc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJJbkFMaXN0KEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFtsZW4oY2xzLl9fbWVtYmVyc19fKSArIDFdCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGNsYXNzIENvbG9ySW5BTGlzdChBdXRvTnVtYmVySW5BTGlzdCk6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvckluQUxpc3QpLCBbQ29sb3JJbkFMaXN0LnJlZCwgQ29sb3JJbkFMaXN0LmdyZWVuLCBDb2xvckluQUxpc3QuYmx1ZV0pCisgICAgICAgIGZvciBlbnVtLCB2YWx1ZSBpbiB6aXAoQ29sb3JJbkFMaXN0LCByYW5nZSgzKSk6CisgICAgICAgICAgICB2YWx1ZSArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudW0udmFsdWUsIFt2YWx1ZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKENvbG9ySW5BTGlzdChbdmFsdWVdKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3R5cGVzX3Jlc29sdmVkX2luX25ldyhzZWxmKToKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSwgbGFiZWwgPSBhcmdzCisgICAgICAgICAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBvYmoubGFiZWwgPSBsYWJlbAorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRMaXN0KExhYmVsbGVkSW50RW51bSk6CisgICAgICAgICAgICB1bnByb2Nlc3NlZCA9ICgxLCAiVW5wcm9jZXNzZWQiKQorICAgICAgICAgICAgcGF5bWVudF9jb21wbGV0ZSA9ICgyLCAiUGF5bWVudCBDb21wbGV0ZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KExhYmVsbGVkTGlzdCksIFtMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIExhYmVsbGVkTGlzdC5wYXltZW50X2NvbXBsZXRlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGFiZWxsZWRMaXN0KDEpLCBMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQpCisKKworY2xhc3MgVGVzdFVuaXF1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmlxdWVfY2xlYW4oc2VsZik6CisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW4oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgdHJlcyA9IDQuMAorICAgICAgICBAdW5pcXVlCisgICAgICAgIGNsYXNzIENsZWFuZXIoSW50RW51bSk6CisgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICBkb3VibGUgPSAyCisgICAgICAgICAgICB0cmlwbGUgPSAzCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGlydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndHJlcy4qb25lJyk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0eShFbnVtKToKKyAgICAgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICAgICAgdHdvID0gJ2RvcycKKyAgICAgICAgICAgICAgICB0cmVzID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAnZG91YmxlLipzaW5nbGUuKnR1cmtleS4qdHJpcGxlJywKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgQHVuaXF1ZQorICAgICAgICAgICAgY2xhc3MgRGlydGllcihJbnRFbnVtKToKKyAgICAgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICAgICAgZG91YmxlID0gMQorICAgICAgICAgICAgICAgIHRyaXBsZSA9IDMKKyAgICAgICAgICAgICAgICB0dXJrZXkgPSAzCisKKworZXhwZWN0ZWRfaGVscF9vdXRwdXQgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ29sb3IgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDb2xvcihlbnVtLkVudW0pCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENvbG9yCisgfCAgICAgIGVudW0uRW51bQorIHwgICAgICBidWlsdGlucy5vYmplY3QKKyB8XHgyMFx4MjAKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBibHVlID0gPENvbG9yLmJsdWU6IDM+CisgfFx4MjBceDIwCisgfCAgZ3JlZW4gPSA8Q29sb3IuZ3JlZW46IDI+CisgfFx4MjBceDIwCisgfCAgcmVkID0gPENvbG9yLnJlZDogMT4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW06CisgfFx4MjBceDIwCisgfCAgbmFtZQorIHwgICAgICBUaGUgbmFtZSBvZiB0aGUgRW51bSBtZW1iZXIuCisgfFx4MjBceDIwCisgfCAgdmFsdWUKKyB8ICAgICAgVGhlIHZhbHVlIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW1NZXRhOgorIHxceDIwXHgyMAorIHwgIF9fbWVtYmVyc19fCisgfCAgICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKyB8XHgyMFx4MjBceDIwXHgyMFx4MjBceDIwCisgfCAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyB8ICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKyIiIi5zdHJpcCgpCisKK2NsYXNzIFRlc3RTdGRMaWIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgIHJlZCA9IDEKKyAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgIGJsdWUgPSAzCisKKyAgICBkZWYgdGVzdF9weWRvYyhzZWxmKToKKyAgICAgICAgIyBpbmRpcmVjdGx5IHRlc3QgX19vYmpjbGFzc19fCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9oZWxwX291dHB1dCAlIF9fbmFtZV9fCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihzZWxmLkNvbG9yKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfZ2V0bWVtYmVycyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gZGljdCgoCisgICAgICAgICAgICAgICAgKCdfX2NsYXNzX18nLCBFbnVtTWV0YSksCisgICAgICAgICAgICAgICAgKCdfX2RvY19fJywgTm9uZSksCisgICAgICAgICAgICAgICAgKCdfX21lbWJlcnNfXycsIHNlbGYuQ29sb3IuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgICgnX19tb2R1bGVfXycsIF9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAoJ2JsdWUnLCBzZWxmLkNvbG9yLmJsdWUpLAorICAgICAgICAgICAgICAgICgnZ3JlZW4nLCBzZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAoJ25hbWUnLCBFbnVtLl9fZGljdF9fWyduYW1lJ10pLAorICAgICAgICAgICAgICAgICgncmVkJywgc2VsZi5Db2xvci5yZWQpLAorICAgICAgICAgICAgICAgICgndmFsdWUnLCBFbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICApKQorICAgICAgICByZXN1bHQgPSBkaWN0KGluc3BlY3QuZ2V0bWVtYmVycyhzZWxmLkNvbG9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMua2V5cygpLCByZXN1bHQua2V5cygpKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICAgICAgaWYgcmVzdWx0W2tdICE9IHZhbHVlc1trXToKKyAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJXNcbiAgICAga2V5OiAlc1xuICByZXN1bHQ6ICVzXG5leHBlY3RlZDogJXNcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICgnPScgKiA3NSwgaywgcmVzdWx0W2tdLCB2YWx1ZXNba10sICc9JyAqIDc1KSwgc2VwPScnKQorICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgZG9lcyBub3QgZXF1YWwgZXhwZWN0ZWQsIHNlZSBwcmludCBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9pbnNwZWN0X2NsYXNzaWZ5X2NsYXNzX2F0dHJzKHNlbGYpOgorICAgICAgICAjIGluZGlyZWN0bHkgdGVzdCBfX29iamNsYXNzX18KKyAgICAgICAgZnJvbSBpbnNwZWN0IGltcG9ydCBBdHRyaWJ1dGUKKyAgICAgICAgdmFsdWVzID0gWworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2NsYXNzX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9b2JqZWN0LCBvYmplY3Q9RW51bU1ldGEpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2RvY19fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1Ob25lKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19tZW1iZXJzX18nLCBraW5kPSdwcm9wZXJ0eScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW1NZXRhLCBvYmplY3Q9RW51bU1ldGEuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX21vZHVsZV9fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1fX25hbWVfXyksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2JsdWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2dyZWVuJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0ncmVkJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLnJlZCksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J25hbWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bSwgb2JqZWN0PUVudW0uX19kaWN0X19bJ25hbWUnXSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J3ZhbHVlJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW0sIG9iamVjdD1FbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHZhbHVlcy5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICByZXN1bHQgPSBsaXN0KGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoc2VsZi5Db2xvcikpCisgICAgICAgIHJlc3VsdC5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiwgciBpbiB6aXAodmFsdWVzLCByZXN1bHQpOgorICAgICAgICAgICAgaWYgciAhPSB2OgorICAgICAgICAgICAgICAgIHByaW50KCdcbiVzXG4lc1xuJXNcbiVzXG4nICUgKCc9JyAqIDc1LCByLCB2LCAnPScgKiA3NSksIHNlcD0nJykKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgICAgIGlmIGZhaWxlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVzdWx0IGRvZXMgbm90IGVxdWFsIGV4cGVjdGVkLCBzZWUgcHJpbnQgYWJvdmUiKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQppbmRleCA0YWYyMTdiLi44NzQyYWZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiBpbXBvcnQgcGlja2xlCiAKQEAgLTE2OCwxNSArMTY5LDEyIEBACiAgICAgICAgIHggPSByYW5nZSgxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmV2ZXJzZWQoeCkpLCB0eXBlKGl0ZXIoeCkpKQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgotICAgICAgICAjIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBub3QgYW4gaW50ZXJmYWNlIHJlcXVpcmVtZW50Ci0gICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgogICAgICAgICBmb3IgcyBpbiAoJ2hlbGxvJywgdHVwbGUoJ2hlbGxvJyksIGxpc3QoJ2hlbGxvJyksIHJhbmdlKDUpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldmVyc2VkKHMpKSwgbGVuKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXZlcnNlZChzKSksIGxlbihzKSkKICAgICAgICAgICAgIHIgPSByZXZlcnNlZChzKQogICAgICAgICAgICAgbGlzdChyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHIpLCAwKQogICAgICAgICBjbGFzcyBTZXFXaXRoV2VpcmRMZW46CiAgICAgICAgICAgICBjYWxsZWQgPSBGYWxzZQogICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CkBAIC0xODcsNyArMTg1LDcgQEAKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4CiAgICAgICAgIHIgPSByZXZlcnNlZChTZXFXaXRoV2VpcmRMZW4oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxlbiwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIG9wZXJhdG9yLmxlbmd0aF9oaW50LCByKQogCiAKICAgICBkZWYgdGVzdF9nYyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CmluZGV4IDdmOTU0N2YuLjY0NTlmYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQpAQCAtMjEsMTAgKzIxLDExIEBACiAiIiIKIFRlc3RzIGZvciBlcG9sbCB3cmFwcGVyLgogIiIiCi1pbXBvcnQgc29ja2V0CiBpbXBvcnQgZXJybm8KLWltcG9ydCB0aW1lCitpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0zMyw3ICszNCw3IEBACiAKIHRyeToKICAgICBzZWxlY3QuZXBvbGwoKQotZXhjZXB0IElPRXJyb3IgYXMgZToKK2V4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CiAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJrZXJuZWwgZG9lc24ndCBzdXBwb3J0IGVwb2xsKCkiKQogICAgIHJhaXNlCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZWxmLnNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKQEAgLTg3LDYgKzg4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCBbJ2ZvbyddKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwge30pCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZWN0LmVwb2xsKDE2KSBhcyBlcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihlcC5maWxlbm8oKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5maWxlbm8pCisKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6CiAgICAgICAgIHNlcnZlciwgY2xpZW50ID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQogCkBAIC0xMTUsMTIgKzEyMywxMiBAQAogICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBmaWxlIGRlc2NyaXB0b3IgY2Fubm90IGJlIGEgbmVnYXRpdmUgaW50ZWdlciAoLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5yZWdpc3RlciwgLTEsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgICAgICAjIElPRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCisgICAgICAgICAgICAjIE9TRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCiAgICAgICAgICAgICAjIHJlZ2lzdGVyaW5nIHR3aWNlIGFsc28gcmFpc2VzIGFuIGV4Y2VwdGlvbgogICAgICAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGVwLnJlZ2lzdGVyLCBzZXJ2ZXIsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3Rlciwgc2VydmVyLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZXAuY2xvc2UoKQpAQCAtMTQyLDcgKzE1MCw3IEBACiAgICAgICAgIGVwLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXAyLnBvbGwoMSwgNCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FQkFERiwgZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXBvbGwgb24gY2xvc2VkIGZkIGRpZG4ndCByYWlzZSBFQkFERiIpCkBAIC0yMTgsNiArMjI2LDM2IEBACiAgICAgICAgIHNlcnZlci5jbG9zZSgpCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoZmQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVwb2xsLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXBvbGwuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwb2xsLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwubW9kaWZ5LCBmZCwgc2VsZWN0LkVQT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwb2xsLnBvbGwsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucmVnaXN0ZXIsIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwudW5yZWdpc3RlciwgZmQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGVwb2xsID0gc2VsZWN0LmVwb2xsKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGVwb2xsLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShlcG9sbC5maWxlbm8oKSksIEZhbHNlKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RVBvbGwpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCAxYWQ3Zjk3Li5mMDg1MWJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC04LDggKzgsOCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBjYXB0dXJlZF9vdXRwdXQsIGNoZWNrX2ltcGxfZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjcHl0aG9uX29ubHksIGdjX2NvbGxlY3QsIHJ1bl91bml0dGVzdCwgbm9fdHJhY2luZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgY3B5dGhvbl9vbmx5LCBnY19jb2xsZWN0LCBydW5fdW5pdHRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3RyYWNpbmcsIHVubGluaykKIAogY2xhc3MgTmFpdmVFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC0yNDQsMjIgKzI0NCwyMiBAQAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsIDEpfSksCiAgICAgICAgICAgICAoU3lzdGVtRXhpdCwgKCdmb28nLCksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywpLCAnY29kZScgOiAnZm9vJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiBOb25lLCAnc3RyZXJyb3InIDogTm9uZX0pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiAnYmF6JywKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4Jyl9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJyksCiAgICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZXJybm8nIDogJ2Vycm5vU3RyJywKICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoMSwgJ3N0ckVycm9yU3RyJyksICdlcnJubycgOiAxLAogICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKICAgICAgICAgICAgIChTeW50YXhFcnJvciwgKCksIHsnbXNnJyA6IE5vbmUsICd0ZXh0JyA6IE5vbmUsCkBAIC00MDksNyArNDA5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NvbnRleHRfXykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NhdXNlX18pCiAKLSAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRW52aXJvbm1lbnRFcnJvcik6CisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGUgPSBNeUV4Y2VwdGlvbigpCkBAIC05NDcsMTMgKzk0NywxMSBAQAogCiAgICAgZGVmIHRlc3Rfbm9uX3N0cl9hcmd1bWVudChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTU3NzgKLSAgICAgICAgYXJnID0gYidhYmMnCi0gICAgICAgIGV4YyA9IEltcG9ydEVycm9yKGFyZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXJnKSwgc3RyKGV4YykpCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBCeXRlc1dhcm5pbmcpLCBxdWlldD1UcnVlKToKKyAgICAgICAgICAgIGFyZyA9IGInYWJjJworICAgICAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXJnKSwgc3RyKGV4YykpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0cywgSW1wb3J0RXJyb3JUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmF1bHRoYW5kbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKaW5kZXggNzcwZTcwYy4uZWJkOTllZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKQEAgLTE5LDE4ICsxOSw2IEBACiAKIFRJTUVPVVQgPSAwLjUKIAotdHJ5OgotICAgIGZyb20gcmVzb3VyY2UgaW1wb3J0IHNldHJsaW1pdCwgUkxJTUlUX0NPUkUsIGVycm9yIGFzIHJlc291cmNlX2Vycm9yCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcHJlcGFyZV9zdWJwcm9jZXNzID0gTm9uZQotZWxzZToKLSAgICBkZWYgcHJlcGFyZV9zdWJwcm9jZXNzKCk6Ci0gICAgICAgICMgZG9uJ3QgY3JlYXRlIGNvcmUgZmlsZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZXRybGltaXQoUkxJTUlUX0NPUkUsICgwLCAwKSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZV9lcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0KIGRlZiBleHBlY3RlZF90cmFjZWJhY2sobGluZW5vMSwgbGluZW5vMiwgaGVhZGVyLCBtaW5fY291bnQ9MSk6CiAgICAgcmVnZXggPSBoZWFkZXIKICAgICByZWdleCArPSAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY1xuJyAlIGxpbmVubzEKQEAgLTU5LDEwICs0Nyw4IEBACiAgICAgICAgIGJ1aWxkLCBhbmQgcmVwbGFjZSAiQ3VycmVudCB0aHJlYWQgMHgwMDAwN2Y4ZDhmYmQ5NzAwIiBieSAiQ3VycmVudAogICAgICAgICB0aHJlYWQgWFhYIi4KICAgICAgICAgIiIiCi0gICAgICAgIG9wdGlvbnMgPSB7fQotICAgICAgICBpZiBwcmVwYXJlX3N1YnByb2Nlc3M6Ci0gICAgICAgICAgICBvcHRpb25zWydwcmVleGVjX2ZuJ10gPSBwcmVwYXJlX3N1YnByb2Nlc3MKLSAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUsICoqb3B0aW9ucykKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgIHByb2Nlc3MgPSBzY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbignLWMnLCBjb2RlKQogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQogICAgICAgICBleGl0Y29kZSA9IHByb2Nlc3Mud2FpdCgpCiAgICAgICAgIG91dHB1dCA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihzdGRvdXQpCkBAIC04Niw5ICs3Miw5IEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnQ3VycmVudCB0aHJlYWQgWFhYJworICAgICAgICAgICAgaGVhZGVyID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKKyAgICAgICAgICAgIGhlYWRlciA9ICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIHJlZ2V4ID0gIiIiCiBeRmF0YWwgUHl0aG9uIGVycm9yOiB7bmFtZX0KIApAQCAtMTAxLDggKzg3LDcgQEAKICAgICAgICAgICAgIGhlYWRlcj1yZS5lc2NhcGUoaGVhZGVyKSkKICAgICAgICAgaWYgb3RoZXJfcmVnZXg6CiAgICAgICAgICAgICByZWdleCArPSAnfCcgKyBvdGhlcl9yZWdleAotICAgICAgICB3aXRoIHN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCisgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCiAgICAgICAgIG91dHB1dCA9ICdcbicuam9pbihvdXRwdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0cHV0LCByZWdleCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChleGl0Y29kZSwgMCkKQEAgLTIzMiw4ICsyMTcsNyBAQAogZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKICIiIi5zdHJpcCgpCiAgICAgICAgIG5vdF9leHBlY3RlZCA9ICdGYXRhbCBQeXRob24gZXJyb3InCi0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAgICAgc3RkZXJyLCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlKQorICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCiAgICAgICAgIHN0ZGVyID0gJ1xuJy5qb2luKHN0ZGVycikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdF9leHBlY3RlZCBub3QgaW4gc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgIiVyIGlzIHByZXNlbnQgaW4gJXIiICUgKG5vdF9leHBlY3RlZCwgc3RkZXJyKSkKQEAgLTI2NCwxNiArMjQ4LDM0IEBACiAgICAgZGVmIHRlc3RfZGlzYWJsZWRfYnlfZGVmYXVsdChzZWxmKToKICAgICAgICAgIyBCeSBkZWZhdWx0LCB0aGUgbW9kdWxlIHNob3VsZCBiZSBkaXNhYmxlZAogICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgotICAgICAgICByYywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCi0gICAgICAgIHN0ZG91dCA9IChzdGRvdXQgKyBzdGRlcnIpLnN0cmlwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIiRmFsc2UiKQorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAnLUUnLCAnLWMnLCBjb2RlKQorICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJGYWxzZSIpCiAKICAgICBkZWYgdGVzdF9zeXNfeG9wdGlvbnMoc2VsZik6CiAgICAgICAgICMgVGVzdCBweXRob24gLVggZmF1bHRoYW5kbGVyCiAgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCi0gICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soIi1YIiwgImZhdWx0aGFuZGxlciIsICItYyIsIGNvZGUpCi0gICAgICAgIHN0ZG91dCA9IChzdGRvdXQgKyBzdGRlcnIpLnN0cmlwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIiVHJ1ZSIpCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICItRSIsICItWCIsICJmYXVsdGhhbmRsZXIiLCAiLWMiLCBjb2RlKQorICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKKworICAgIGRlZiB0ZXN0X2Vudl92YXIoc2VsZik6CisgICAgICAgICMgZW1wdHkgZW52IHZhcgorICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlKQorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJycKKyAgICAgICAgIyBkb24ndCB1c2UgYXNzZXJ0X3B5dGhvbl9vaygpIGJlY2F1c2UgaXQgYWx3YXlzIGVuYWJsZSBmYXVsdGhhbmRsZXIKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJncywgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGIiRmFsc2UiKQorCisgICAgICAgICMgbm9uLWVtcHR5IGVudiB2YXIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WydQWVRIT05GQVVMVEhBTkRMRVInXSA9ICcxJworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKIAogICAgIGRlZiBjaGVja19kdW1wX3RyYWNlYmFjayhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIgpAQCAtMzA0LDcgKzMwNiw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsaW5lbm8gPSA4CiAgICAgICAgIGV4cGVjdGVkID0gWwotICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKKyAgICAgICAgICAgICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAlcyBpbiBmdW5jQicgJSBsaW5lbm8sCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMTEgaW4gZnVuY0EnLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDEzIGluIDxtb2R1bGU+JwpAQCAtMzM2LDcgKzMzOCw3IEBACiAgICAgICAgICAgICBmdW5jX25hbWU9ZnVuY19uYW1lLAogICAgICAgICApCiAgICAgICAgIGV4cGVjdGVkID0gWwotICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKKyAgICAgICAgICAgICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSA0IGluICVzJyAlIHRydW5jYXRlZCwKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSA2IGluIDxtb2R1bGU+JwogICAgICAgICBdCkBAIC0zOTAsMTMgKzM5MiwxMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZW5vID0gMTAKICAgICAgICAgcmVnZXggPSAiIiIKLV5UaHJlYWQgMHhbMC05YS1mXSs6CiteVGhyZWFkIDB4WzAtOWEtZl0rIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogKD86ICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIFtfYS16XSsKICl7ezEsM319ICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMjMgaW4gcnVuCiAgIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcF9pbm5lcgogICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIF9ib290c3RyYXAKIAotQ3VycmVudCB0aHJlYWQgWFhYOgorQ3VycmVudCB0aHJlYWQgWFhYIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICBGaWxlICI8c3RyaW5nPiIsIGxpbmUge2xpbmVub30gaW4gZHVtcAogICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMjggaW4gPG1vZHVsZT4kCiAiIiIuc3RyaXAoKQpAQCAtNDU5LDcgKzQ2MSw3IEBACiAgICAgICAgICAgICBjb3VudCA9IGxvb3BzCiAgICAgICAgICAgICBpZiByZXBlYXQ6CiAgICAgICAgICAgICAgICAgY291bnQgKj0gMgotICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKzpcbicgJSB0aW1lb3V0X3N0cgorICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicgJSB0aW1lb3V0X3N0cgogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soOSwgMjAsIGhlYWRlciwgbWluX2NvdW50PWNvdW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01NjEsOSArNTYzLDkgQEAKICAgICAgICAgdHJhY2UgPSAnXG4nLmpvaW4odHJhY2UpCiAgICAgICAgIGlmIG5vdCB1bnJlZ2lzdGVyOgogICAgICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICAgICAgcmVnZXggPSAnQ3VycmVudCB0aHJlYWQgWFhYOlxuJworICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVnZXggPSAnVHJhY2ViYWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJworICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ1N0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJwogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soNywgMjgsIHJlZ2V4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01OTAsOCArNTkyLDUgQEAKICAgICAgICAgc2VsZi5jaGVja19yZWdpc3RlcihjaGFpbj1UcnVlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGYXVsdEhhbmRsZXJUZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mY250bC5weSBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKaW5kZXggYjhjZGEyZi4uYzgxNmQ5NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0xLDcgKzEsNCBAQAogIiIiVGVzdCBwcm9ncmFtIGZvciB0aGUgZmNudGwgQyBtb2R1bGUuCi0KLU9TLzIrRU1YIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmlsZSBsb2NraW5nIG9wZXJhdGlvbnMuCi0KICIiIgogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgb3MKQEAgLTM5LDggKzM2LDYgQEAKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygncXFpaGhpJywgMCwgMCwgMCwgZmNudGwuRl9XUkxDSywgMCwgMCkKICAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ2FpeDMnLCAnYWl4NCcsICdocC11eEInLCAndW5peHdhcmU3J106CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hobGxsaWknLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwLCAwKQotICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnb3MyZW14J106Ci0gICAgICAgIGxvY2tkYXRhID0gTm9uZQogICAgIGVsc2U6CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hoJytzdGFydF9sZW4rJ2hoJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCkKICAgICBpZiBsb2NrZGF0YToKQEAgLTY2LDE4ICs2MSwyMCBAQAogICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2KQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106Ci0gICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCisgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9mY250bF9maWxlX2Rlc2NyaXB0b3Ioc2VsZik6CiAgICAgICAgICMgYWdhaW4sIGJ1dCBwYXNzIHRoZSBmaWxlIHJhdGhlciB0aGFuIG51bWVyaWMgZGVzY3JpcHRvcgogICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diJykKICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKLSAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RhdHVzIGZyb20gZmNudGwgd2l0aCBPX05PTkJMT0NLOiAnLCBydikKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZjbnRsX2JhZF9maWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CmluZGV4IDc2YjE2OTQuLmQ1NGU5NzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmNsb3NlZCkKIAogICAgICAgICBpZiBoYXNhdHRyKGYsICJyZWFkaW50byIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKElPRXJyb3IsIFR5cGVFcnJvciksIGYucmVhZGludG8sICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE9TRXJyb3IsIFR5cGVFcnJvciksIGYucmVhZGludG8sICIiKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9fZXhpdF9fKCpzeXMuZXhjX2luZm8oKSksIE5vbmUpCiAKICAgICBkZWYgdGVzdFJlYWRXaGVuV3JpdGluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuZi5yZWFkKQogCiBjbGFzcyBDQXV0b0ZpbGVUZXN0cyhBdXRvRmlsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgb3BlbiA9IGlvLm9wZW4KQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICAgICAgICAgIGQgPSBpbnQoZi5yZWFkKCkuZGVjb2RlKCJhc2NpaSIpKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3Igc2V0dGluZyBidWZmZXIgc2l6ZSAlZDogJXMnICUgKHMsIHN0cihtc2cpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CmluZGV4IDA5NTk5NzkuLmM3Y2IzZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKQEAgLTEsNCArMSwzIEBACi0KIGltcG9ydCBvcywgZmlsZWNtcCwgc2h1dGlsLCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKQEAgLTQwLDE1ICszOSwyNyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5kaXIpLAogICAgICAgICAgICAgICAgICAgICAiRmlsZSBhbmQgZGlyZWN0b3J5IGNvbXBhcmUgYXMgZXF1YWwiKQogCisgICAgZGVmIHRlc3RfY2FjaGVfY2xlYXIoc2VsZik6CisgICAgICAgIGZpcnN0X2NvbXBhcmUgPSBmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzaGFsbG93PUZhbHNlKQorICAgICAgICBzZWNvbmRfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX2RpZmYsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIGZpbGVjbXAuY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVjbXAuX2NhY2hlKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhY2hlIG5vdCBjbGVhcmVkIGFmdGVyIGNhbGxpbmcgY2xlYXJfY2FjaGUiKQorCiBjbGFzcyBEaXJDb21wYXJlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCiAgICAgICAgIHNlbGYuZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2RpcicpCiAgICAgICAgIHNlbGYuZGlyX3NhbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLXNhbWUnKQogICAgICAgICBzZWxmLmRpcl9kaWZmID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpci1kaWZmJykKKworICAgICAgICAjIEFub3RoZXIgZGlyIGlzIGNyZWF0ZWQgdW5kZXIgZGlyX3NhbWUsIGJ1dCBpdCBoYXMgYSBuYW1lIGZyb20gdGhlCisgICAgICAgICMgaWdub3JlZCBsaXN0IHNvIGl0IHNob3VsZCBub3QgYWZmZWN0IHRlc3RpbmcgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5kaXJfaWdub3JlZCA9IG9zLnBhdGguam9pbihzZWxmLmRpcl9zYW1lLCAnLmhnJykKKwogICAgICAgICBzZWxmLmNhc2VpbnNlbnNpdGl2ZSA9IG9zLnBhdGgubm9ybWNhc2UoJ0EnKSA9PSBvcy5wYXRoLm5vcm1jYXNlKCdhJykKICAgICAgICAgZGF0YSA9ICdDb250ZW50cyBvZiBmaWxlIGdvIGhlcmUuXG4nCi0gICAgICAgIGZvciBkaXIgaW4gW3NlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBzZWxmLmRpcl9kaWZmXToKKyAgICAgICAgZm9yIGRpciBpbiAoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmYsIHNlbGYuZGlyX2lnbm9yZWQpOgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIsIFRydWUpCiAgICAgICAgICAgICBvcy5ta2RpcihkaXIpCiAgICAgICAgICAgICBpZiBzZWxmLmNhc2VpbnNlbnNpdGl2ZSBhbmQgZGlyIGlzIHNlbGYuZGlyX3NhbWU6CkBAIC02NCw5ICs3NSwxMSBAQAogICAgICAgICBvdXRwdXQuY2xvc2UoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyKQotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX3NhbWUpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfZGlmZikKKyAgICAgICAgZm9yIGRpciBpbiAoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmYpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lnbm9yZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy5oZycsIGZpbGVjbXAuREVGQVVMVF9JR05PUkVTKQogCiAgICAgZGVmIHRlc3RfY21wZmlsZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10pID09CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CmluZGV4IDFlNzA2NDEuLmRiNjA4MmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CkBAIC0yMiw3ICsyMiw3IEBACiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogZnJvbSBmaWxlaW5wdXQgaW1wb3J0IEZpbGVJbnB1dCwgaG9va19lbmNvZGVkCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluayBhcyBzYWZlX3VubGluawogCiAKQEAgLTIyNCw4ICsyMjQsMTAgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB0cnkgb3BlbmluZyBpbiB1bml2ZXJzYWwgbmV3bGluZSBtb2RlCiAgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFtiIkFcbkJcclxuQ1xyRCJdLCBtb2RlPSJ3YiIpCi0gICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz10MSwgbW9kZT0iVSIpCi0gICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9dDEsIG1vZGU9IlUiKQorICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsiQVxuIiwgIkJcbiIsICJDXG4iLCAiRCJdKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSkKQEAgLTI3NSw4ICsyNzcsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiIl0pCiAgICAgICAgICAgICB3aXRoIEZpbGVJbnB1dChmaWxlcz10MSkgYXMgZmk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5fZmlsZXMsICgpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSkKQEAgLTgzNSwyMiArODM3LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyhrd2FyZ3MucG9wKCdlbmNvZGluZycpLCBlbmNvZGluZykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrd2FyZ3MpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoCi0gICAgICAgIEJ1ZmZlclNpemVzVGVzdHMsCi0gICAgICAgIEZpbGVJbnB1dFRlc3RzLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pbnB1dCwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfY2xvc2UsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X25leHRmaWxlLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbmFtZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lzZmlyc3RsaW5lLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pc3N0ZGluLAotICAgICAgICBUZXN0X2hvb2tfY29tcHJlc3NlZCwKLSAgICAgICAgVGVzdF9ob29rX2VuY29kZWQsCi0gICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CmluZGV4IGY5MWNjYWEuLmU2Nzg3NjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CkBAIC0xNDUsMTYgKzE0NSwxNiBAQAogICAgICAgICAjIFVuaXggY2FsbHMgZGlyY2hlY2soKSBhbmQgcmV0dXJucyAiW0Vycm5vIDIxXTogSXMgYSBkaXJlY3RvcnkiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9GaWxlSU8oJy4nLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUuZXJybm8sIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmlsZW5hbWUsICIuIikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgT1NFcnJvciIpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgInRlc3Qgb25seSB3b3JrcyBvbiBhIFBPU0lYLWxpa2Ugc3lzdGVtIikKICAgICBkZWYgdGVzdE9wZW5EaXJGRChzZWxmKToKICAgICAgICAgZmQgPSBvcy5vcGVuKCcuJywgb3MuT19SRE9OTFkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBfRmlsZUlPKGZkLCAncicpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlTRElSKQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC0xODQsMTQgKzE4NCwxNCBAQAogICAgICAgICAgICAgb3MuY2xvc2UoZi5maWxlbm8oKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmdW5jKHNlbGYsIGYpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBJT0Vycm9yIikKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBPU0Vycm9yIikKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgIGRlZiBSZW9wZW5Gb3JSZWFkKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCiAgICAgICAgIG9zLmNsb3NlKHNlbGYuZi5maWxlbm8oKSkKQEAgLTI4Niw3ICsyODYsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBmID0gX0ZpbGVJTygiL2Rldi90dHkiLCAiYSIpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgV2hlbiBydW4gaW4gYSBjcm9uIGpvYiB0aGVyZSBqdXN0IGFyZW4ndCBhbnkKICAgICAgICAgICAgICAgICAgICAgIyB0dHlzLCBzbyBza2lwIHRoZSB0ZXN0LiAgVGhpcyBhbHNvIGhhbmRsZXMgb3RoZXIKICAgICAgICAgICAgICAgICAgICAgIyBPUydlcyB0aGF0IGRvbid0IHN1cHBvcnQgL2Rldi90dHkuCkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgX0ZpbGVJTywgbWFrZV9iYWRfZmQoKSkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtc3ZjcnQuZ2V0X29zZmhhbmRsZSwgbWFrZV9iYWRfZmQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQogICAgICAgICAjIElzc3VlIDE1OTg5CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgX3Rlc3RjYXBpLklOVF9NQVggKyAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sIF90ZXN0Y2FwaS5JTlRfTUlOIC0gMSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9maW5hbGl6YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjOWI4NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5CkBAIC0wLDAgKzEsNTEzIEBACisiIiIKK1Rlc3RzIGZvciBvYmplY3QgZmluYWxpemF0aW9uIHNlbWFudGljcywgYXMgb3V0bGluZWQgaW4gUEVQIDQ0Mi4KKyIiIgorCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGdjCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2ltcG9ydCBfdGVzdGNhcGkKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIE5vbkdDU2ltcGxlQmFzZToKKyAgICAiIiIKKyAgICBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHRoZSBvYmplY3RzIHVuZGVyIHRlc3QsIGVxdWlwcGVkIHdpdGggdmFyaW91cworICAgIHRlc3RpbmcgZmVhdHVyZXMuCisgICAgIiIiCisKKyAgICBzdXJ2aXZvcnMgPSBbXQorICAgIGRlbF9jYWxscyA9IFtdCisgICAgdHBfZGVsX2NhbGxzID0gW10KKyAgICBlcnJvcnMgPSBbXQorCisgICAgX2NsZWFuaW5nID0gRmFsc2UKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NsZWFudXAoY2xzKToKKyAgICAgICAgY2xzLnN1cnZpdm9ycy5jbGVhcigpCisgICAgICAgIGNscy5lcnJvcnMuY2xlYXIoKQorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICBjbHMudHBfZGVsX2NhbGxzLmNsZWFyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3QoY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHVzZSBhcm91bmQgYWxsIGZpbmFsaXphdGlvbiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbHMuZGVsX2NhbGxzLmNsZWFyKCkKKyAgICAgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpZiBjbHMuZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBjbHMuZXJyb3JzWzBdCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIE5vbkdDU2ltcGxlQmFzZS5fY2xlYW5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xzLl9jbGVhbnVwKCkKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgb2JqZWN0IGlzIHNhbmUgKG5vbi1icm9rZW4pLgorICAgICAgICAiIiIKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUEVQIDQ0MiBmaW5hbGl6ZXIuICBSZWNvcmQgdGhhdCB0aGlzIHdhcyBjYWxsZWQsIGNoZWNrIHRoZQorICAgICAgICBvYmplY3QgaXMgaW4gYSBzYW5lIHN0YXRlLCBhbmQgaW52b2tlIGEgc2lkZSBlZmZlY3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNpZGUgZWZmZWN0IGNhbGxlZCBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICAgIiIiCisKKworY2xhc3MgU2ltcGxlQmFzZShOb25HQ1NpbXBsZUJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmlkXyA9IGlkKHNlbGYpCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5pZF8gPT0gaWQoc2VsZikKKworCitjbGFzcyBOb25HQyhOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIE5vbkdDUmVzdXJyZWN0b3IoTm9uR0NTaW1wbGVCYXNlKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzdXJyZWN0IHNlbGYgYnkgc3RvcmluZyBzZWxmIGluIGEgY2xhc3Mtd2lkZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdXJ2aXZvcnMuYXBwZW5kKHNlbGYpCisKK2NsYXNzIFNpbXBsZShTaW1wbGVCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFNpbXBsZVJlc3VycmVjdG9yKE5vbkdDUmVzdXJyZWN0b3IsIFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0QmFzZToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZ2MuZ2FyYmFnZVs6XSA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgdGVzdHMgaGVyZSBzaG91bGQgcHV0IGFueXRoaW5nIGluIGdjLmdhcmJhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzZWxmLm9sZF9nYXJiYWdlCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiBhc3NlcnRfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UuZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3RwX2RlbF9jYWxscyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChTaW1wbGVCYXNlLnRwX2RlbF9jYWxscyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9zdXJ2aXZvcnMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaWQoeCkgZm9yIHggaW4gU2ltcGxlQmFzZS5zdXJ2aXZvcnMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfZ2FyYmFnZShzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBnYy5nYXJiYWdlKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgY2xlYXJfc3Vydml2b3JzKHNlbGYpOgorICAgICAgICBTaW1wbGVCYXNlLnN1cnZpdm9ycy5jbGVhcigpCisKKworY2xhc3MgU2ltcGxlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIHdpdGhvdXQgcmVmY3ljbGVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uX2djKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChzKSkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9ub25fZ2NfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKworCitjbGFzcyBTZWxmQ3ljbGVCYXNlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWYgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGFzc2VydCBzZWxmLnJlZiBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgU2VsZkN5Y2xlUmVzdXJyZWN0b3IoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlUmVzdXJyZWN0b3IpOgorICAgIHBhc3MKKworY2xhc3MgU3VpY2lkYWxTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVmID0gTm9uZQorCisKK2NsYXNzIFNlbGZDeWNsZUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhbiBvYmplY3QgaGF2aW5nIGEgc2luZ2xlIGN5Y2xpYyByZWZlcmVuY2UgdG8KKyAgICBpdHNlbGYuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2RlbF9fIGNhbiByZXN1cnJlY3QgdGhlIG9iamVjdCBiZWluZyBmaW5hbGl6ZWQuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2VsZkN5Y2xlUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIFhYWCBpcyB0aGlzIGRlc2lyYWJsZT8KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgV2hlbiB0cnlpbmcgdG8gZGVzdHJveSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUsIF9fZGVsX18KKyAgICAgICAgICAgICMgaXNuJ3QgY2FsbGVkIGFueW1vcmUgKGFuZCB0aGUgb2JqZWN0IGlzbid0IHJlc3VycmVjdGVkKS4KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9zdWljaWRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIEdDIGlzIGFibGUgdG8gZGVhbCB3aXRoIGFuIG9iamVjdCB0aGF0IGtpbGxzIGl0cyBsYXN0CisgICAgICAgICMgcmVmZXJlbmNlIGR1cmluZyBfX2RlbF9fLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFN1aWNpZGFsU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworY2xhc3MgQ2hhaW5lZEJhc2U6CisKKyAgICBkZWYgY2hhaW4oc2VsZiwgbGVmdCk6CisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIGxlZnQucmlnaHQgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGlmIHNlbGYuc3VpY2lkZWQ6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLnJpZ2h0IGlzIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLmxlZnQKKyAgICAgICAgICAgIGlmIGxlZnQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlZnQucmlnaHQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBzZWxmCisgICAgICAgICAgICByaWdodCA9IHNlbGYucmlnaHQKKyAgICAgICAgICAgIGlmIHJpZ2h0LnN1aWNpZGVkOgorICAgICAgICAgICAgICAgIGFzc2VydCByaWdodC5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgc2VsZgorCitjbGFzcyBTaW1wbGVDaGFpbmVkKENoYWluZWRCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgQ2hhaW5lZFJlc3VycmVjdG9yKENoYWluZWRCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbENoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBsaWNpdGx5IGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1aWNpZGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxlZnQgPSBOb25lCisgICAgICAgIHNlbGYucmlnaHQgPSBOb25lCisKKworY2xhc3MgQ3ljbGVDaGFpbkZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhIGN5Y2xpYyBjaGFpbi4gIFRoZXNlIHRlc3RzIGFyZSBzaW1pbGFyIGluCisgICAgc3Bpcml0IHRvIHRoZSBzZWxmLWN5Y2xlIHRlc3RzIGFib3ZlLCBidXQgdGhlIGNvbGxlY3RhYmxlIG9iamVjdAorICAgIGdyYXBoIGlzbid0IHRyaXZpYWwgYW55bW9yZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZF9jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgbm9kZXMgPSBbY2xzKCkgZm9yIGNscyBpbiBjbGFzc2VzXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZXMpKToKKyAgICAgICAgICAgIG5vZGVzW2ldLmNoYWluKG5vZGVzW2ktMV0pCisgICAgICAgIHJldHVybiBub2RlcworCisgICAgZGVmIGNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oc2VsZiwgY2xhc3Nlcyk6CisgICAgICAgIE4gPSBsZW4oY2xhc3NlcykKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIG5vZGVzID0gc2VsZi5idWlsZF9jaGFpbihjbGFzc2VzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIGNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBOID0gbGVuKG5vZGVzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgc3Vydml2b3JfaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzIGlmIGlzaW5zdGFuY2UocywgU2ltcGxlUmVzdXJyZWN0b3IpXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoc3Vydml2b3JfaWRzKQorICAgICAgICAgICAgIyBYWFggZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbd3IoKSBmb3Igd3IgaW4gd3JzXSwgW05vbmVdICogTikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU2ltcGxlQ2hhaW5lZF0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3JdICogMykKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXNfc3VpY2lkYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oW1N1aWNpZGFsQ2hhaW5lZCwgU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3N1aWNpZGFsX3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3Rfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfcmVzdXJyZWN0X3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkLCBTdWljaWRhbENoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdGhyZWUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMiArIFtTdWljaWRhbENoYWluZWRdICogMikKKworCisjIE5PVEU6IHRoZSB0cF9kZWwgc2xvdCBpc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCwgc28gd2UgaGF2ZSB0byBjYWxsCisjIHdpdGhfdHBfZGVsKCkgZm9yIGVhY2ggaW5zdGFudGlhdGVkIGNsYXNzLgorCitjbGFzcyBMZWdhY3lCYXNlKFNpbXBsZUJhc2UpOgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRG8gbm90IGludm9rZSBzaWRlX2VmZmVjdCBoZXJlLCBzaW5jZSB3ZSBhcmUgbm93IGV4ZXJjaXNpbmcKKyAgICAgICAgICAgICMgdGhlIHRwX2RlbCBzbG90LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCisgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMZWdhY3kgKHByZS1QRVAgNDQyKSBmaW5hbGl6ZXIsIG1hcHBlZCB0byBhIHRwX2RlbCBzbG90LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudHBfZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgICAgICAgICAgc2VsZi5zaWRlX2VmZmVjdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3koTGVnYWN5QmFzZSk6CisgICAgcGFzcworCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lSZXN1cnJlY3RvcihMZWdhY3lCYXNlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc3VycmVjdCBzZWxmIGJ5IHN0b3Jpbmcgc2VsZiBpbiBhIGNsYXNzLXdpZGUgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3Vydml2b3JzLmFwcGVuZChzZWxmKQorCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgTGVnYWN5QmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIExlZ2FjeUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBvYmplY3RzIHdpdGggYSB0cF9kZWwuCisgICAgIiIiCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhlc2UgdGVzdHMgbmVlZCB0byBjbGVhbiB1cCBhIGJpdCBtb3JlLCBzaW5jZSB0aGV5IGNyZWF0ZQorICAgICAgICAjIHVuY29sbGVjdGFibGUgb2JqZWN0cy4KKyAgICAgICAgZ2MuZ2FyYmFnZS5jbGVhcigpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeShzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBMZWdhY3koKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBMZWdhY3lSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIHdlYWtyZWZzIGFyZSBjbGVhcmVkIGJlZm9yZSB0cF9kZWwgaXMgY2FsbGVkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcyAqIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfc2VsZl9jeWNsZShzZWxmKToKKyAgICAgICAgIyBTZWxmLWN5Y2xlcyB3aXRoIGxlZ2FjeSBmaW5hbGl6ZXJzIGVuZCB1cCBpbiBnYy5nYXJiYWdlLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeVNlbGZDeWNsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgQnJlYWsgdGhlIGN5Y2xlIHRvIGFsbG93IGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGdjLmdhcmJhZ2VbMF0ucmVmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlKFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5IGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQppbmRleCA1MDIyOTJmLi41YzJkYzNmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKQEAgLTQxLDYgKzQxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCBiIi0iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3QgJ2RpY3QnIiwgZmxvYXQsIHt9KQogICAgICAgICAjIExvbmUgc3Vycm9nYXRlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZmxvYXQsICdcdUQ4RjAnKQogICAgICAgICAjIGNoZWNrIHRoYXQgd2UgZG9uJ3QgYWNjZXB0IGFsdGVybmF0ZSBleHBvbmVudCBtYXJrZXJzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQppbmRleCA4MTkyYzM4Li5lMDYyNmRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKQEAgLTEsNyArMSw3IEBACiAiIiJUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IGZvcmsoKSBiZWhhdmlvci4KICIiIgogCi1pbXBvcnQgaW1wCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQppbmRleCBiZDE1OWY1Li4yOTMzMGY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQpAQCAtMzA3LDI3ICszMDcsNDEgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgb2xkbG9jKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfb3B0aW1pc2F0aW9ucyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICJhYmNkZSIgIyA1IGNoYXJhY3RlcnMKIAorICAgICAgICBzZWxmLmFzc2VydElzKCIlcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlLjVzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUuMTBzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUxcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlNXMiICUgdGV4dCwgdGV4dCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZvcm1hdFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDpzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDouNXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOi4xMHN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOjFzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDo1c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKIAorICAgICAgICBzZWxmLmFzc2VydElzKHRleHQgJSAoKSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXh0LmZvcm1hdCgpLCB0ZXh0KQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcHJlY2lzaW9uKHNlbGYpOgotICAgICAgICBJTlRfTUFYID0gMjE0NzQ4MzY0NworICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgSU5UX01BWAogCiAgICAgICAgIGYgPSAxLjIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4wZiIpLCAiMSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGYsICIuM2YiKSwgIjEuMjAwIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGZvcm1hdChmLCAiLiVzZiIgJSAoSU5UX01BWCArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgICAgIGMgPSBjb21wbGV4KGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGYsICIuMGYiKSwgIjEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChmLCAiLjNmIiksICIxLjIwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuMGYiKSwgIjErMGoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChjLCAiLjNmIiksICIxLjIwMCswLjAwMGoiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgZm9ybWF0KGYsICIuJXNmIiAlIChJTlRfTUFYICsgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJwcmVjaXNpb24gdG9vIGJpZyIpCisgICAgICAgICAgICBmb3JtYXQoYywgIi4lc2YiICUgKElOVF9NQVggKyAxKSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQppbmRleCAxZmFkOTIxLi4zMzM2NTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQpAQCAtMTQ2LDkgKzE0NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgIyBidWcgMTY0Njk6IGVycm9yIHR5cGVzIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggZmxvYXQgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKQEAgLTI0OCwxNCArMjUwLDE1IEBACiAKICAgICAgICAgaW5mID0gMWUxMDAwCiAgICAgICAgIG5hbiA9IGluZiAtIGluZgorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIGluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1pbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgLWluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIG5hbikKIAogICAgIGRlZiB0ZXN0RnJvbURlY2ltYWwoc2VsZik6CkBAIC0yNjgsMTcgKzI3MSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBGKDEsIDEwKiozMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKIAorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBJbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiaW5mIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIi1pbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgibmFuIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBzTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgic25hbiIpKQogCiAgICAgZGVmIHRlc3RMaW1pdERlbm9taW5hdG9yKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFtZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkNTc4MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKQEAgLTAsMCArMSwxMTYgQEAKK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKworCitjbGFzcyBDbGVhclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBmcmFtZS5jbGVhcigpLgorICAgICIiIgorCisgICAgZGVmIGlubmVyKHNlbGYsIHg9NSwgKiprd2FyZ3MpOgorICAgICAgICAxLzAKKworICAgIGRlZiBvdXRlcihzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaW5uZXIoKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjID0gZQorICAgICAgICByZXR1cm4gZXhjCisKKyAgICBkZWYgY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhzZWxmLCB0Yik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhciBhbGwgZnJhbWVzIGluIGEgdHJhY2ViYWNrLgorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0Yi50Yl9mcmFtZS5jbGVhcigpCisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKworICAgIGRlZiB0ZXN0X2NsZWFyX2xvY2FscyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgIGV4YyA9IHNlbGYub3V0ZXIoYz1jKQorICAgICAgICBkZWwgYworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAjIEEgcmVmZXJlbmNlIHRvIGMgaXMgaGVsZCB0aHJvdWdoIHRoZSBmcmFtZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChOb25lLCB3cigpKQorICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICMgVGhlIHJlZmVyZW5jZSB3YXMgcmVsZWFzZWQgYnkgLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOb25lLCB3cigpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBlbmRseSA9IEZhbHNlCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBub25sb2NhbCBlbmRseQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICAgICAgaW5uZXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBlbmRseSA9IFRydWUKKyAgICAgICAgZ2VuID0gZygpCisgICAgICAgIG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBnZW4uZ2lfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5kbHkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmcoc2VsZik6CisgICAgICAgICMgQXR0ZW1wdGluZyB0byBjbGVhciBhbiBleGVjdXRpbmcgZnJhbWUgaXMgZm9yYmlkZGVuLgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGYuY2xlYXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmLmZfYmFjay5jbGVhcigpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmdfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICAjIEF0dGVtcHRpbmcgdG8gY2xlYXIgYW4gZXhlY3V0aW5nIGdlbmVyYXRvciBmcmFtZSBpcyBmb3JiaWRkZW4uCisgICAgICAgIGVuZGx5ID0gRmFsc2UKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGVuZGx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGYuZl9iYWNrLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGVuZGx5ID0gVHJ1ZQorICAgICAgICBnZW4gPSBnKCkKKyAgICAgICAgZiA9IG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVuZGx5KQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfY2xlYXJfcmVmY3ljbGVzKHNlbGYpOgorICAgICAgICAjIC5jbGVhcigpIGRvZXNuJ3QgbGVhdmUgYW55IHJlZmN5Y2xlIGJlaGluZAorICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgICAgICBleGMgPSBzZWxmLm91dGVyKGM9YykKKyAgICAgICAgICAgIGRlbCBjCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KE5vbmUsIHdyKCkpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKE5vbmUsIHdyKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weSBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY3NjFjLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyBUZXN0IHRoZSBmcm96ZW4gbW9kdWxlIGRlZmluZWQgaW4gZnJvemVuLmMuCi0KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi0KLWNsYXNzIEZyb3plblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIG1vZHVsZV9hdHRycyA9IGZyb3plbnNldChbJ19fYnVpbHRpbnNfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJ10pCi0gICAgcGFja2FnZV9hdHRycyA9IGZyb3plbnNldChsaXN0KG1vZHVsZV9hdHRycykgKyBbJ19fcGF0aF9fJ10pCi0KLSAgICBkZWYgdGVzdF9mcm96ZW4oc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX2hlbGxvX18KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19oZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9faGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYucGFja2FnZV9hdHRycykKLSAgICAgICAgICAgIGV4cGVjdC5hZGQoJ2luaXRpYWxpemVkJykKLSAgICAgICAgICAgIGlmIG5vdCAiX19waGVsbG9fXy5zcGFtIiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5fX3BhdGhfXywgW19fcGhlbGxvX18uX19uYW1lX19dKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKLQotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5zcGFtCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uc3BhbS5pbml0aWFsaXplZCwgVHJ1ZSkKLSAgICAgICAgICAgIHNwYW1fZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgc3BhbV9leHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXy5zcGFtKSksIHNwYW1fZXhwZWN0KQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdCA9IHNldChzZWxmLnBhY2thZ2VfYXR0cnMpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9fcGhlbGxvX18pKSwgcGhlbGxvX2V4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uZm9vCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX2hlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18uc3BhbSddCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoRnJvemVuVGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKaW5kZXggNjRjZDgwYmMuLjQxNDYzZTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5CkBAIC0yMSw2ICsyMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgSE9TVCwgSE9TVHY2CiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKK1RJTUVPVVQgPSAzCiAjIHRoZSBkdW1teSBkYXRhIHJldHVybmVkIGJ5IHNlcnZlciBvdmVyIHRoZSBkYXRhIGNoYW5uZWwgd2hlbgogIyBSRVRSLCBMSVNULCBOTFNULCBNTFNEIGNvbW1hbmRzIGFyZSBpc3N1ZWQKIFJFVFJfREFUQSA9ICdhYmNkZTEyMzQ1XHJcbicgKiAxMDAwCkBAIC0xMjYsNyArMTI3LDcgQEAKICAgICAgICAgYWRkciA9IGxpc3QobWFwKGludCwgYXJnLnNwbGl0KCcsJykpKQogICAgICAgICBpcCA9ICclZC4lZC4lZC4lZCcgJXR1cGxlKGFkZHJbOjRdKQogICAgICAgICBwb3J0ID0gKGFkZHJbNF0gKiAyNTYpICsgYWRkcls1XQotICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MikKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKQEAgLTEzNCw3ICsxMzUsNyBAQAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKICAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIGlwLCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzoyXQogICAgICAgICAgICAgaXAgPSBpcC5yZXBsYWNlKCcuJywgJywnKTsgcDEgPSBwb3J0IC8gMjU2OyBwMiA9IHBvcnQgJSAyNTYKICAgICAgICAgICAgIHNlbGYucHVzaCgnMjI3IGVudGVyaW5nIHBhc3NpdmUgbW9kZSAoJXMsJWQsJWQpJyAlKGlwLCBwMSwgcDIpKQpAQCAtMTQ0LDcgKzE0NSw3IEBACiAgICAgZGVmIGNtZF9lcHJ0KHNlbGYsIGFyZyk6CiAgICAgICAgIGFmLCBpcCwgcG9ydCA9IGFyZy5zcGxpdChhcmdbMF0pWzE6LTFdCiAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKLSAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTIpCisgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCiAgICAgICAgIHNlbGYucHVzaCgnMjAwIGFjdGl2ZSBkYXRhIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKQogCkBAIC0xNTIsNyArMTUzLDcgQEAKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikgYXMgc29jazoKICAgICAgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCiAgICAgICAgICAgICBzb2NrLmxpc3Rlbig1KQotICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KFRJTUVPVVQpCiAgICAgICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgICAgICBzZWxmLnB1c2goJzIyOSBlbnRlcmluZyBleHRlbmRlZCBwYXNzaXZlIG1vZGUgKHx8fCVkfCknICVwb3J0KQogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkKQEAgLTMyNyw3ICszMjgsNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNDEsNyArMzQyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgIyBBbnkgInNvY2tldCBlcnJvciIgY29ycmVzcG9uZHMgdG8gYSBTU0xfRVJST1JfU1lTQ0FMTCByZXR1cm4KICAgICAgICAgICAgICAgICAjIGZyb20gT3BlblNTTCdzIFNTTF9zaHV0ZG93bigpLCBjb3JyZXNwb25kaW5nIHRvIGEKICAgICAgICAgICAgICAgICAjIGNsb3NlZCBzb2NrZXQgY29uZGl0aW9uLiBTZWUgYWxzbzoKQEAgLTQ2MCw3ICs0NjEsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtNDg4LDcgKzQ4OSw3IEBACiAKICAgICBkZWYgdGVzdF9hbGxfZXJyb3JzKHNlbGYpOgogICAgICAgICBleGNlcHRpb25zID0gKGZ0cGxpYi5lcnJvcl9yZXBseSwgZnRwbGliLmVycm9yX3RlbXAsIGZ0cGxpYi5lcnJvcl9wZXJtLAotICAgICAgICAgICAgICAgICAgICAgIGZ0cGxpYi5lcnJvcl9wcm90bywgZnRwbGliLkVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgT1NFcnJvciwgRU9GRXJyb3IpCiAgICAgICAgIGZvciB4IGluIGV4Y2VwdGlvbnM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmFpc2UgeCgnZXhjZXB0aW9uIG5vdCBpbmNsdWRlZCBpbiBhbGxfZXJyb3JzIHNldCcpCkBAIC02NzgsNyArNjc5LDcgQEAKIAogICAgIGRlZiB0ZXN0X21ha2VwYXN2KHNlbGYpOgogICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5jbGllbnQubWFrZXBhc3YoKQotICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgMTApCisgICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICAjIElQdjQgaXMgaW4gdXNlLCBqdXN0IG1ha2Ugc3VyZSBzZW5kX2Vwc3YgaGFzIG5vdCBiZWVuIHVzZWQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAncGFzdicpCkBAIC02OTEsMTIgKzY5MiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICAjIGJhc2UgdGVzdAotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc19jbGllbnRfY29ubmVjdGVkKCkpCkBAIC03MDQsNyArNzA1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc19jbGllbnRfY29ubmVjdGVkKCkpCiAKICAgICAgICAgIyBRVUlUIHNlbnQgaW5zaWRlIHRoZSB3aXRoIGJsb2NrCi0gICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PTIpIGFzIHNlbGYuY2xpZW50OgorICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCkBAIC03MTQsNyArNzE1LDcgQEAKICAgICAgICAgIyBmb3JjZSBhIHdyb25nIHJlc3BvbnNlIGNvZGUgdG8gYmUgc2VudCBvbiBRVUlUOiBlcnJvcl9wZXJtCiAgICAgICAgICMgaXMgZXhwZWN0ZWQgYW5kIHRoZSBjb25uZWN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNsb3NlZAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLm5leHRfcmVzcG9uc2UgPSAnNTUwIGVycm9yIG9uIHF1aXQnCkBAIC03MzYsNyArNzM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9KEhPU1QsIHBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5zb2NrLmdldHNvY2tuYW1lKClbMV0sIHBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFERFJJTlVTRToKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBiaW5kIHRvIHBvcnQgJWQiICUgcG9ydCkKICAgICAgICAgICAgIHJhaXNlCkBAIC03NDcsNyArNzQ4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldHNvY2tuYW1lKClbMV0sIHBvcnQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzg1LDcgKzc4Niw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15RlRQU2VydmVyKChIT1NUdjYsIDApLCBhZj1zb2NrZXQuQUZfSU5FVDYpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtODAyLDcgKzgwMyw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAnZXBzdicpCiAKQEAgLTgyOSw3ICs4MzAsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVRMU19GVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD0yKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAjIGVuYWJsZSBUTFMKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC04NDMsNyArODQ0LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTkwMyw3ICs5MDQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdHBsaWIuRlRQX1RMUywgY2VydGZpbGU9Q0VSVEZJTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyhjb250ZXh0PWN0eCwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQogICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKQEAgLTEwMTcsOCArMTAxOCwxOSBAQAogICAgICAgICBmdHAuY2xvc2UoKQogCiAKK2NsYXNzIFRlc3ROZXRyY0RlcHJlY2F0aW9uKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKSwgc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WydIT01FJ10gPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgb3BlbignLm5ldHJjJywgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBmdHBsaWIuTmV0cmMoKQorCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gW1Rlc3RGVFBDbGFzcywgVGVzdFRpbWVvdXRzLAorICAgIHRlc3RzID0gW1Rlc3RGVFBDbGFzcywgVGVzdFRpbWVvdXRzLCBUZXN0TmV0cmNEZXByZWNhdGlvbiwKICAgICAgICAgICAgICBUZXN0SVB2NkVudmlyb25tZW50LAogICAgICAgICAgICAgIFRlc3RUTFNfRlRQQ2xhc3NNaXhpbiwgVGVzdFRMU19GVFBDbGFzc10KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQppbmRleCBjOGVkODMwLi41MDk0ZjdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQpAQCAtNyw2ICs3LDExIEBACiAgICAgZGVmIGlubmVyX2Z1bmN0aW9uKCk6CiAgICAgICAgIGNsYXNzIExvY2FsQ2xhc3M6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIGdsb2JhbCBpbm5lcl9nbG9iYWxfZnVuY3Rpb24KKyAgICAgICAgZGVmIGlubmVyX2dsb2JhbF9mdW5jdGlvbigpOgorICAgICAgICAgICAgZGVmIGlubmVyX2Z1bmN0aW9uMigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBpbm5lcl9mdW5jdGlvbjIKICAgICAgICAgcmV0dXJuIExvY2FsQ2xhc3MKICAgICByZXR1cm4gbGFtYmRhOiBpbm5lcl9mdW5jdGlvbgogCkBAIC0xMTYsNiArMTIxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsX2Z1bmN0aW9uLjxsb2NhbHM+LmlubmVyX2Z1bmN0aW9uJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfZnVuY3Rpb24oKSgpKCkuX19xdWFsbmFtZV9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24uPGxvY2Fscz4uTG9jYWxDbGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uLl9fcXVhbG5hbWVfXywgJ2lubmVyX2dsb2JhbF9mdW5jdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCkuX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uLjxsb2NhbHM+LmlubmVyX2Z1bmN0aW9uMicpCiAgICAgICAgIHNlbGYuYi5fX3F1YWxuYW1lX18gPSAnYycKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19xdWFsbmFtZV9fLCAnYycpCiAgICAgICAgIHNlbGYuYi5fX3F1YWxuYW1lX18gPSAnZCcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggZGIxZTkzNC4uMzhjOTcxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTEsNTcgKzEsNTUgQEAKLWltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBhYmMKIGltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBwZXJtdXRhdGlvbnMKIGltcG9ydCBwaWNrbGUKIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKLUBzdGF0aWNtZXRob2QKLWRlZiBQeXRob25QYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKLSAgICAnUHVyZSBQeXRob24gYXBwcm94aW1hdGlvbiBvZiBwYXJ0aWFsKCknCi0gICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6Ci0gICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCi0gICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCi0gICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKLSAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCi0gICAgbmV3ZnVuYy5hcmdzID0gYXJncwotICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcwotICAgIHJldHVybiBuZXdmdW5jCitpbXBvcnQgZnVuY3Rvb2xzCisKK3B5X2Z1bmN0b29scyA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZnVuY3Rvb2xzJywgYmxvY2tlZD1bJ19mdW5jdG9vbHMnXSkKK2NfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBmcmVzaD1bJ19mdW5jdG9vbHMnXSkKKworZGVjaW1hbCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZGVjaW1hbCcsIGZyZXNoPVsnX2RlY2ltYWwnXSkKKwogCiBkZWYgY2FwdHVyZSgqYXJncywgKiprdyk6CiAgICAgIiIiY2FwdHVyZSBhbGwgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMiIiIKICAgICByZXR1cm4gYXJncywga3cKIAorCiBkZWYgc2lnbmF0dXJlKHBhcnQpOgogICAgICIiIiByZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiBhIHBhcnRpYWwgb2JqZWN0ICIiIgogICAgIHJldHVybiAocGFydC5mdW5jLCBwYXJ0LmFyZ3MsIHBhcnQua2V5d29yZHMsIHBhcnQuX19kaWN0X18pCiAKLWNsYXNzIFRlc3RQYXJ0aWFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHRoZXR5cGUgPSBmdW5jdG9vbHMucGFydGlhbAorY2xhc3MgVGVzdFBhcnRpYWw6CiAKICAgICBkZWYgdGVzdF9iYXNpY19leGFtcGxlcyhzZWxmKToKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsIDQsIGI9MzAsIGM9NDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoMSwgMiwgMywgNCksIGRpY3QoYT0xMCwgYj0zMCwgYz00MCkpKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKG1hcCwgbGFtYmRhIHg6IHgqMTApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwobWFwLCBsYW1iZGEgeDogeCoxMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHAoWzEsMiwzLDRdKSksIFsxMCwgMjAsIDMwLCA0MF0pCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKICAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZWFkYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZnVuYywgY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFyZ3MsICgxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtleXdvcmRzLCBkaWN0KGE9MTAsIGI9MjApKQogICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIG5vdCBiZSB3cml0YWJsZQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnRoZXR5cGUsIHR5cGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnBhcnRpYWwsIHR5cGUpOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnZnVuYycsIG1hcCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdhcmdzJywgKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2tleXdvcmRzJywgZGljdChhPTEsIGI9MikpCiAKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShoZXgpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoaGV4KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkZWwgcC5fX2RpY3RfXwogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgpAQCAtNjAsOSArNTgsOSBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRfY2hlY2tpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlKSAgICAgIyBuZWVkIGF0IGxlYXN0IGEgZnVuYyBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhcnRpYWwpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnRoZXR5cGUoMikoKQorICAgICAgICAgICAgc2VsZi5wYXJ0aWFsKDIpKCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKQEAgLTczLDcgKzcxLDcgQEAKICAgICAgICAgZGVmIGZ1bmMoYT0xMCwgYj0yMCk6CiAgICAgICAgICAgICByZXR1cm4gYQogICAgICAgICBkID0geydhJzozfQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGZ1bmMsIGE9NSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChmdW5jLCBhPTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgqKmQpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6M30pCiAgICAgICAgIHAoYj03KQpAQCAtODIsMjAgKzgwLDIwIEBACiAgICAgZGVmIHRlc3RfYXJnX2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIHplcm8gYXJncyBpbiBlaXRoZXIgcGFydGlhbAogICAgICAgICAjIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgxLDIpLCAoKDEsMiksIHt9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKDEsMiksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsNCksICgoMSwyLDMsNCksIHt9KSkKIAogICAgIGRlZiB0ZXN0X2t3X2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIG5vIGtleXdvcmQgYXJncyBpbgogICAgICAgICAjIGVpdGhlciB0aGUgcGFydGlhbCBvYmplY3Qgb3IgdGhlIGNhbGxlcgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYT0xKSwgKCgpLCB7J2EnOjF9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPTEpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgYT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7J2EnOjF9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKGI9MiksICgoKSwgeydhJzoxLCAnYic6Mn0pKQogICAgICAgICAjIGtleXdvcmQgYXJncyBpbiB0aGUgY2FsbCBvdmVycmlkZSB0aG9zZSBpbiB0aGUgcGFydGlhbCBvYmplY3QKQEAgLTEwNCw3ICsxMDIsNyBAQAogICAgIGRlZiB0ZXN0X3Bvc2l0aW9uYWwoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSBjYXB0dXJlZCBjb3JyZWN0bHkKICAgICAgICAgZm9yIGFyZ3MgaW4gWygpLCAoMCwpLCAoMCwxKSwgKDAsMSwyKSwgKDAsMSwyLDMpXToKLSAgICAgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKmFyZ3MpCisgICAgICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICphcmdzKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBhcmdzICsgKCd4JywpCiAgICAgICAgICAgICBnb3QsIGVtcHR5ID0gcCgneCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSB7fSkKQEAgLTExMiwxNCArMTEwLDE0IEBACiAgICAgZGVmIHRlc3Rfa2V5d29yZChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUga2V5d29yZCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYSBpbiBbJ2EnLCAwLCBOb25lLCAzLjVdOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPWEpCisgICAgICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIGE9YSkKICAgICAgICAgICAgIGV4cGVjdGVkID0geydhJzphLCd4JzpOb25lfQogICAgICAgICAgICAgZW1wdHksIGdvdCA9IHAoeD1Ob25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0gKCkpCiAKICAgICBkZWYgdGVzdF9ub19zaWRlX2VmZmVjdHMoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgdGhhdCBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscwotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDAsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAwLCBhPTEpCiAgICAgICAgIGFyZ3MxLCBrdzEgPSBwKDEsIGI9MikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MxID09ICgwLDEpIGFuZCBrdzEgPT0geydhJzoxLCdiJzoyfSkKICAgICAgICAgYXJnczIsIGt3MiA9IHAoKQpAQCAtMTI4LDEzICsxMjYsMTMgQEAKICAgICBkZWYgdGVzdF9lcnJvcl9wcm9wYWdhdGlvbihzZWxmKToKICAgICAgICAgZGVmIGYoeCwgeSk6CiAgICAgICAgICAgICB4IC8geQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEsIDApKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEpLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYpLCAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIHk9MCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiksIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgeT0wKSwgMSkKIAogICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoaW50LCBiYXNlPTE2KQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGludCwgYmFzZT0xNikKICAgICAgICAgcCA9IHByb3h5KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mdW5jLCBwLmZ1bmMpCiAgICAgICAgIGYgPSBOb25lCkBAIC0xNDIsMzkgKzE0MCw0NiBAQAogCiAgICAgZGVmIHRlc3Rfd2l0aF9ib3VuZF9hbmRfdW5ib3VuZF9tZXRob2RzKHNlbGYpOgogICAgICAgICBkYXRhID0gbGlzdChtYXAoc3RyLCByYW5nZSgxMCkpKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKHN0ci5qb2luLCAnJykKKyAgICAgICAgam9pbiA9IHNlbGYucGFydGlhbChzdHIuam9pbiwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKCcnLmpvaW4pCisgICAgICAgIGpvaW4gPSBzZWxmLnBhcnRpYWwoJycuam9pbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCiAKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbEMoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IGNfZnVuY3Rvb2xzLnBhcnRpYWwKKwogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGFyZ3MgPSAob2JqZWN0KCksIG9iamVjdCgpKQogICAgICAgICBhcmdzX3JlcHIgPSAnLCAnLmpvaW4ocmVwcihhKSBmb3IgYSBpbiBhcmdzKQotICAgICAgICBrd2FyZ3MgPSB7J2EnOiBvYmplY3QoKSwgJ2InOiBvYmplY3QoKX0KKyAgICAgICAgI2t3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQorICAgICAgICBrd2FyZ3MgPSB7J2EnOiBvYmplY3QoKX0KICAgICAgICAga3dhcmdzX3JlcHIgPSAnLCAnLmpvaW4oIiVzPSVyIiAlIChrLCB2KSBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKSkKLSAgICAgICAgaWYgc2VsZi50aGV0eXBlIGlzIGZ1bmN0b29scy5wYXJ0aWFsOgorICAgICAgICBpZiBzZWxmLnBhcnRpYWwgaXMgY19mdW5jdG9vbHMucGFydGlhbDoKICAgICAgICAgICAgIG5hbWUgPSAnZnVuY3Rvb2xzLnBhcnRpYWwnCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuYW1lID0gc2VsZi50aGV0eXBlLl9fbmFtZV9fCisgICAgICAgICAgICBuYW1lID0gc2VsZi5wYXJ0aWFsLl9fbmFtZV9fCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICphcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqKmt3YXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwga3dhcmdzX3JlcHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwgYXJnc19yZXByLCBrd2FyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoc2lnbmF0dXJlLCAnYXNkZicsIGJhcj1UcnVlKQogICAgICAgICBmLmFkZF9zb21ldGhpbmdfdG9fX2RpY3RfXyA9IFRydWUKICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZiksIHNpZ25hdHVyZShmX2NvcHkpKQpAQCAtMTkzLDI4ICsxOTgsMTQwIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fQogICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKG9iamVjdCkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChvYmplY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgIm5ldyBzdHlsZSBnZXRhcmdzIGZvcm1hdCBidXQgYXJndW1lbnQgaXMgbm90IGEgdHVwbGUiLAogICAgICAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fLCBCYWRTZXF1ZW5jZSgpKQogCi1jbGFzcyBQYXJ0aWFsU3ViY2xhc3MoZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgIHBhc3MKIAotY2xhc3MgVGVzdFBhcnRpYWxTdWJjbGFzcyhUZXN0UGFydGlhbCk6CitjbGFzcyBUZXN0UGFydGlhbFB5KFRlc3RQYXJ0aWFsLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGFydGlhbCA9IHN0YXRpY21ldGhvZChweV9mdW5jdG9vbHMucGFydGlhbCkKIAotICAgIHRoZXR5cGUgPSBQYXJ0aWFsU3ViY2xhc3MKIAotY2xhc3MgVGVzdFB5dGhvblBhcnRpYWwoVGVzdFBhcnRpYWwpOgoraWYgY19mdW5jdG9vbHM6CisgICAgY2xhc3MgUGFydGlhbFN1YmNsYXNzKGNfZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgICAgICBwYXNzCiAKLSAgICB0aGV0eXBlID0gUHl0aG9uUGFydGlhbAogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaGFzbid0IGEgbmljZSByZXByCi0gICAgZGVmIHRlc3RfcmVwcihzZWxmKTogcGFzcworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbENTdWJjbGFzcyhUZXN0UGFydGlhbEMpOgorICAgIGlmIGNfZnVuY3Rvb2xzOgorICAgICAgICBwYXJ0aWFsID0gUGFydGlhbFN1YmNsYXNzCiAKLSAgICAjIHRoZSBweXRob24gdmVyc2lvbiBpc24ndCBwaWNrbGFibGUKLSAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6IHBhc3MKLSAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKTogcGFzcworCitjbGFzcyBUZXN0UGFydGlhbE1ldGhvZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgIG5vdGhpbmcgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlKQorICAgICAgICBwb3NpdGlvbmFsID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSwgMSkKKyAgICAgICAga2V5d29yZHMgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCBhPTIpCisgICAgICAgIGJvdGggPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCAzLCBiPTQpCisKKyAgICAgICAgbmVzdGVkID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QocG9zaXRpb25hbCwgNSkKKworICAgICAgICBvdmVyX3BhcnRpYWwgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChmdW5jdG9vbHMucGFydGlhbChjYXB0dXJlLCBjPTYpLCA3KQorCisgICAgICAgIHN0YXRpYyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKHN0YXRpY21ldGhvZChjYXB0dXJlKSwgOCkKKyAgICAgICAgY2xzID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2xhc3NtZXRob2QoY2FwdHVyZSksIGQ9OSkKKworICAgIGEgPSBBKCkKKworICAgIGRlZiB0ZXN0X2FyZ19jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoKSwgKChzZWxmLmEsKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKDUpLCAoKHNlbGYuYSwgNSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZyhjPTYpLCAoKHNlbGYuYSwpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoNSwgYz02KSwgKChzZWxmLmEsIDUpLCB7J2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCgpLCAoKHNlbGYuYSwgMSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCg1KSwgKChzZWxmLmEsIDEsIDUpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoYz02KSwgKChzZWxmLmEsIDEpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoNSwgYz02KSwgKChzZWxmLmEsIDEsIDUpLCB7J2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoKSwgKChzZWxmLmEsKSwgeydhJzogMn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3Jkcyg1KSwgKChzZWxmLmEsIDUpLCB7J2EnOiAyfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKGM9NiksICgoc2VsZi5hLCksIHsnYSc6IDIsICdjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3Jkcyg1LCBjPTYpLCAoKHNlbGYuYSwgNSksIHsnYSc6IDIsICdjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoKSwgKChzZWxmLmEsIDMpLCB7J2InOiA0fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoNSksICgoc2VsZi5hLCAzLCA1KSwgeydiJzogNH0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKGM9NiksICgoc2VsZi5hLCAzKSwgeydiJzogNCwgJ2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoNSwgYz02KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5ib3RoKHNlbGYuYSwgNSwgYz02KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKCksICgoc2VsZi5hLCAxLCA1KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoNiksICgoc2VsZi5hLCAxLCA1LCA2KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoZD03KSwgKChzZWxmLmEsIDEsIDUpLCB7J2QnOiA3fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZCg2LCBkPTcpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHsnZCc6IDd9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5uZXN0ZWQoc2VsZi5hLCA2LCBkPTcpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHsnZCc6IDd9KSkKKworICAgIGRlZiB0ZXN0X292ZXJfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKCksICgoc2VsZi5hLCA3KSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoNSksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoZD04KSwgKChzZWxmLmEsIDcpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKDUsIGQ9OCksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNiwgJ2QnOiA4fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEub3Zlcl9wYXJ0aWFsKHNlbGYuYSwgNSwgZD04KSwgKChzZWxmLmEsIDcsIDUpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKworICAgIGRlZiB0ZXN0X2JvdW5kX21ldGhvZF9pbnRyb3NwZWN0aW9uKHNlbGYpOgorICAgICAgICBvYmogPSBzZWxmLmEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmouYm90aC5fX3NlbGZfXywgb2JqKQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5uZXN0ZWQuX19zZWxmX18sIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmoub3Zlcl9wYXJ0aWFsLl9fc2VsZl9fLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLmNscy5fX3NlbGZfXywgc2VsZi5BKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuQS5jbHMuX19zZWxmX18sIHNlbGYuQSkKKworICAgIGRlZiB0ZXN0X3VuYm91bmRfbWV0aG9kX3JldHJpZXZhbChzZWxmKToKKyAgICAgICAgb2JqID0gc2VsZi5BCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmouYm90aCwgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmoubmVzdGVkLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5vdmVyX3BhcnRpYWwsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLnN0YXRpYywgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzZWxmLmEuc3RhdGljLCAiX19zZWxmX18iKSkKKworICAgIGRlZiB0ZXN0X2Rlc2NyaXB0b3JzKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtzZWxmLkEsIHNlbGYuYV06CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoKSwgKCg4LCksIHt9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoNSksICgoOCwgNSksIHt9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoZD04KSwgKCg4LCksIHsnZCc6IDh9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoNSwgZD04KSwgKCg4LCA1KSwgeydkJzogOH0pKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKCksICgoc2VsZi5BLCksIHsnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoNSksICgoc2VsZi5BLCA1KSwgeydkJzogOX0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscyhjPTgpLCAoKHNlbGYuQSwpLCB7J2MnOiA4LCAnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoNSwgYz04KSwgKChzZWxmLkEsIDUpLCB7J2MnOiA4LCAnZCc6IDl9KSkKKworICAgIGRlZiB0ZXN0X292ZXJyaWRpbmdfa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKGE9MyksICgoc2VsZi5hLCksIHsnYSc6IDN9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEua2V5d29yZHMoc2VsZi5hLCBhPTMpLCAoKHNlbGYuYSwpLCB7J2EnOiAzfSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChOb25lLCAxKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHZhcnMoc2VsZi5BKVsnYm90aCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2Qoe30sIDMsIGI9NCknLmZvcm1hdChjYXB0dXJlKSkKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBBYnN0cmFjdChhYmMuQUJDTWV0YSk6CisKKyAgICAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgICAgIGRlZiBhZGQoc2VsZiwgeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBhZGQ1ID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoYWRkLCA1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBYnN0cmFjdC5hZGQuX19pc2Fic3RyYWN0bWV0aG9kX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBYnN0cmFjdC5hZGQ1Ll9faXNhYnN0cmFjdG1ldGhvZF9fKQorCisgICAgICAgIGZvciBmdW5jIGluIFtzZWxmLkEuc3RhdGljLCBzZWxmLkEuY2xzLCBzZWxmLkEub3Zlcl9wYXJ0aWFsLCBzZWxmLkEubmVzdGVkLCBzZWxmLkEuYm90aF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdldGF0dHIoZnVuYywgJ19faXNhYnN0cmFjdG1ldGhvZF9fJywgRmFsc2UpKQorCiAKIGNsYXNzIFRlc3RVcGRhdGVXcmFwcGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjIzLDE5ICszNDAsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkPWZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpOgogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSBhc3NpZ25lZAogICAgICAgICBmb3IgbmFtZSBpbiBhc3NpZ25lZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHdyYXBwZXIsIG5hbWUpIGlzIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIod3JhcHBlciwgbmFtZSksIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCiAgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIHVwZGF0ZWQKICAgICAgICAgZm9yIG5hbWUgaW4gdXBkYXRlZDoKICAgICAgICAgICAgIHdyYXBwZXJfYXR0ciA9IGdldGF0dHIod3JhcHBlciwgbmFtZSkKICAgICAgICAgICAgIHdyYXBwZWRfYXR0ciA9IGdldGF0dHIod3JhcHBlZCwgbmFtZSkKICAgICAgICAgICAgIGZvciBrZXkgaW4gd3JhcHBlZF9hdHRyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cmFwcGVkX2F0dHJba2V5XSBpcyB3cmFwcGVyX2F0dHJba2V5XSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJfX2RpY3RfXyIgYW5kIGtleSA9PSAiX193cmFwcGVkX18iOgorICAgICAgICAgICAgICAgICAgICAjIF9fd3JhcHBlZF9fIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSB1cGRhdGUgY29kZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlZF9hdHRyW2tleV0sIHdyYXBwZXJfYXR0cltrZXldKQorICAgICAgICAjIENoZWNrIF9fd3JhcHBlZF9fCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlZCkKKwogCiAgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKICAgICAgICAgZGVmIGYoYTonVGhpcyBpcyBhIG5ldyBhbm5vdGF0aW9uJyk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgZi5fX3dyYXBwZWRfXyA9ICJUaGlzIGlzIGEgYmFsZCBmYWNlZCBsaWUiCiAgICAgICAgIGRlZiB3cmFwcGVyKGI6J1RoaXMgaXMgdGhlIHByaW9yIGFubm90YXRpb24nKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIGYpCkBAIC0zMjIsNiArNDQ2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZXIuX19kb2NfXy5zdGFydHN3aXRoKCdtYXgoJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2Fubm90YXRpb25zX18sIHt9KQogCisKIGNsYXNzIFRlc3RXcmFwcyhUZXN0VXBkYXRlV3JhcHBlcik6CiAKICAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgpAQCAtMzI5LDE0ICs0NTQsMTUgQEAKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBmLl9fd3JhcHBlZF9fID0gIlRoaXMgaXMgc3RpbGwgYSBiYWxkIGZhY2VkIGxpZSIKICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmKQogICAgICAgICBkZWYgd3JhcHBlcigpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKICAgICAgICAgcmV0dXJuIHdyYXBwZXIsIGYKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnZicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX3F1YWxuYW1lX18sIGYuX19xdWFsbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYWxzbyBhIHRlc3QnKQpAQCAtMzgyLDYgKzUwOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhIGRpZmZlcmVudCB0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmRpY3RfYXR0ciwgZi5kaWN0X2F0dHIpCiAKKwogY2xhc3MgVGVzdFJlZHVjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZnVuYyA9IGZ1bmN0b29scy5yZWR1Y2UKIApAQCAtNDYyLDI0ICs1ODksMjkgQEAKICAgICAgICAgZCA9IHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDN9CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGFkZCwgZCksICIiLmpvaW4oZC5rZXlzKCkpKQogCi1jbGFzcyBUZXN0Q21wVG9LZXkodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBUZXN0Q21wVG9LZXk6CiAKICAgICBkZWYgdGVzdF9jbXBfdG9fa2V5KHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoMyksIGtleSgzKSkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGtleSgzKSwga2V5KDEpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChrZXkoMyksIGtleSgzKSkKKwogICAgICAgICBkZWYgY21wMih4LCB5KToKICAgICAgICAgICAgIHJldHVybiBpbnQoeCkgLSBpbnQoeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMikKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDQuMCksIGtleSgnNCcpKQogICAgICAgICBzZWxmLmFzc2VydExlc3Moa2V5KDIpLCBrZXkoJzM1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGtleSgyKSwga2V5KCczNScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleSgyKSwga2V5KCczNScpKQogCiAgICAgZGVmIHRlc3RfY21wX3RvX2tleV9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcD1jbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleShvYmo9MyksIGtleShvYmo9MykpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihrZXkob2JqPTMpLCBrZXkob2JqPTEpKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSk6CkBAIC00ODcsMTAgKzYxOSwxMCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSk6CiAgICAgICAgICAgICAxIDwga2V5KDMpICAgICMgbGhzIGlzIG5vdCBhIEsgb2JqZWN0CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKKyAgICAgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleSgpICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEsIE5vbmUpICAgIyB0b28gbWFueSBhcmdzCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSwgTm9uZSkgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGtleSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgpAQCAtNDk5LDcgKzYzMSw3IEBACiAgICAgZGVmIHRlc3RfYmFkX2NtcChzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcgotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICBrZXkoMykgPiBrZXkoMSkKIApAQCAtNTE0LDEzICs2NDYsMTMgQEAKICAgICBkZWYgdGVzdF9vYmpfZmllbGQoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcD1jbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSg1MCkub2JqLCA1MCkKIAogICAgIGRlZiB0ZXN0X3NvcnRfaW50KHNlbGYpOgogICAgICAgICBkZWYgbXljbXAoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4geSAtIHgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmFuZ2UoNSksIGtleT1mdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PXNlbGYuY21wX3RvX2tleShteWNtcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFs0LCAzLCAyLCAxLCAwXSkKIAogICAgIGRlZiB0ZXN0X3NvcnRfaW50X3N0cihzZWxmKToKQEAgLTUyOCwxOCArNjYwLDI5IEBACiAgICAgICAgICAgICB4LCB5ID0gaW50KHgpLCBpbnQoeSkKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQogICAgICAgICB2YWx1ZXMgPSBbNSwgJzMnLCA3LCAyLCAnMCcsICcxJywgNCwgJzEwJywgMV0KLSAgICAgICAgdmFsdWVzID0gc29ydGVkKHZhbHVlcywga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSkKKyAgICAgICAgdmFsdWVzID0gc29ydGVkKHZhbHVlcywga2V5PXNlbGYuY21wX3RvX2tleShteWNtcCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ludCh2YWx1ZSkgZm9yIHZhbHVlIGluIHZhbHVlc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDQsIDUsIDcsIDEwXSkKIAogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgIGRlZiBteWNtcCh4LCB5KToKICAgICAgICAgICAgIHJldHVybiB5IC0geAotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wKQogICAgICAgICBrID0ga2V5KDEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGspCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShrLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkKIAorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2Z1bmN0b29scywgJ3JlcXVpcmVzIHRoZSBDIF9mdW5jdG9vbHMgbW9kdWxlJykKK2NsYXNzIFRlc3RDbXBUb0tleUMoVGVzdENtcFRvS2V5LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgY19mdW5jdG9vbHM6CisgICAgICAgIGNtcF90b19rZXkgPSBjX2Z1bmN0b29scy5jbXBfdG9fa2V5CisKKworY2xhc3MgVGVzdENtcFRvS2V5UHkoVGVzdENtcFRvS2V5LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY21wX3RvX2tleSA9IHN0YXRpY21ldGhvZChweV9mdW5jdG9vbHMuY21wX3RvX2tleSkKKworCiBjbGFzcyBUZXN0VG90YWxPcmRlcmluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sdChzZWxmKToKQEAgLTU1Nyw2ICs3MDAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMSkgPiBBKDIpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbGUoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTU3Myw2ICs3MTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMSkgPj0gQSgyKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2d0KHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC01ODksNiArNzM0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDIpIDwgQSgxKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2dlKHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC02MDUsNiArNzUxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDIpIDw9IEEoMSkpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19ub19vdmVyd3JpdGUoc2VsZik6CiAgICAgICAgICMgbmV3IG1ldGhvZHMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcKQEAgLTYyNCwyNyArNzcxLDExOCBAQAogICAgICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgdGVzdF9idWdfMTAwNDIoc2VsZik6CisgICAgZGVmIHRlc3RfdHlwZV9lcnJvcl93aGVuX25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgIyBidWcgMTAwNDI7IGVuc3VyZSBzdGFjayBvdmVyZmxvdyBkb2VzIG5vdCBvY2N1cgorICAgICAgICAjIHdoZW4gZGVjb3JhdGVkIHR5cGVzIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCi0gICAgICAgIGNsYXNzIFRlc3RUTzoKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0xlc3NUaGFuOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRlc3RUTyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRlc3RUTyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBUZXN0VE8oOCkgPD0gKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEltcGxlbWVudHNHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPiBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQ29tcGFyYXRvck5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCAxIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oLTEpIDwgMQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IExFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oMCkgPCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDApCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgR1QiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigxKSA8IEltcGxlbWVudHNHcmVhdGVyVGhhbigxKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSA8PSBMVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygyKSA8PSBJbXBsZW1lbnRzTGVzc1RoYW4oMikKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgPD0gR0UiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMykgPD0gSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbygzKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHVCA+IEdFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNCkgPiBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDQpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdUID4gTFQiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbig1KSA+IEltcGxlbWVudHNMZXNzVGhhbig1KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSA+PSBHVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg2KSA+PSBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNikKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR0UgPj0gTEUiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNykgPj0gSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyg3KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSB3aGVuIGVxdWFsIik6CisgICAgICAgICAgICBhID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDgpCisgICAgICAgICAgICBiID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgYSA+PSBiCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIHdoZW4gZXF1YWwiKToKKyAgICAgICAgICAgIGEgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOSkKKyAgICAgICAgICAgIGIgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBhIDw9IGIKIAogY2xhc3MgVGVzdExSVSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9scnUoc2VsZik6CiAgICAgICAgIGRlZiBvcmlnKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIDMqeCt5CisgICAgICAgICAgICByZXR1cm4gMyAqIHggKyB5CiAgICAgICAgIGYgPSBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MjApKG9yaWcpCiAgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heHNpemUsIDIwKQpAQCAtNzQ5LDcgKzk4Nyw3IEBACiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdXNlcl9mdW5jdGlvbiBleGNlcHRpb25zIGdldCBwYXNzZWQgdGhyb3VnaCB3aXRob3V0CiAgICAgICAgICMgY3JlYXRpbmcgYSBoYXJkLXRvLXJlYWQgY2hhaW5lZCBleGNlcHRpb24uCiAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMTc3Ci0gICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMDApOgorICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKICAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemUpCiAgICAgICAgICAgICBkZWYgZnVuYyhpKToKICAgICAgICAgICAgICAgICByZXR1cm4gJ2FiYydbaV0KQEAgLTc2Miw3ICsxMDAwLDcgQEAKICAgICAgICAgICAgICAgICBmdW5jKDE1KQogCiAgICAgZGVmIHRlc3RfbHJ1X3dpdGhfdHlwZXMoc2VsZik6Ci0gICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMDApOgorICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKICAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9bWF4c2l6ZSwgdHlwZWQ9VHJ1ZSkKICAgICAgICAgICAgIGRlZiBzcXVhcmUoeCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHggKiB4CkBAIC03NzcsNiArMTAxNSwzNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXVhcmUuY2FjaGVfaW5mbygpLmhpdHMsIDQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxdWFyZS5jYWNoZV9pbmZvKCkubWlzc2VzLCA0KQogCisgICAgZGVmIHRlc3RfbHJ1X3dpdGhfa2V5d29yZF9hcmdzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbZmliKG49bnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDE2KV0sCisgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTBdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPTEyOCwgY3VycnNpemU9MTYpKQorICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPTEyOCwgY3VycnNpemU9MCkpCisKKyAgICBkZWYgdGVzdF9scnVfd2l0aF9rZXl3b3JkX2FyZ3NfbWF4c2l6ZV9ub25lKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPU5vbmUpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ZpYihuPW51bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSgxNildLAorICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0wKSkKKwogICAgIGRlZiB0ZXN0X25lZWRfZm9yX3Jsb2NrKHNlbGYpOgogICAgICAgICAjIFRoaXMgd2lsbCBkZWFkbG9jayBvbiBhbiBMUlUgY2FjaGUgdGhhdCB1c2VzIGEgcmVndWxhciBsb2NrCiAKQEAgLTgwMiwxNyArMTA3MCw0OTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVFcSgyKSkgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGUgY29ycmVjdCByZXR1cm4gdmFsdWUKIAogCitjbGFzcyBUZXN0U2luZ2xlRGlzcGF0Y2godW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NpbXBsZV9vdmVybG9hZHMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZGVmIGdfaW50KGkpOgorICAgICAgICAgICAgcmV0dXJuICJpbnRlZ2VyIgorICAgICAgICBnLnJlZ2lzdGVyKGludCwgZ19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygic3RyIiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKDEpLCAiaW50ZWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhbMSwyLDNdKSwgImJhc2UiKQorCisgICAgZGVmIHRlc3RfbXJvKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEQoQywgQik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBnX0EoYSk6CisgICAgICAgICAgICByZXR1cm4gIkEiCisgICAgICAgIGRlZiBnX0IoYik6CisgICAgICAgICAgICByZXR1cm4gIkIiCisgICAgICAgIGcucmVnaXN0ZXIoQSwgZ19BKQorICAgICAgICBnLnJlZ2lzdGVyKEIsIGdfQikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEEoKSksICJBIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEIoKSksICJCIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEMoKSksICJBIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEQoKSksICJCIikKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2RlY29yYXRvcihzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAZy5yZWdpc3RlcihpbnQpCisgICAgICAgIGRlZiBnX2ludChpKToKKyAgICAgICAgICAgIHJldHVybiAiaW50ICVzIiAlIChpLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKCIiKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoMTIpLCAiaW50IDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnLmRpc3BhdGNoKGludCksIGdfaW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGcuZGlzcGF0Y2gob2JqZWN0KSwgZy5kaXNwYXRjaChzdHIpKQorICAgICAgICAjIE5vdGU6IGluIHRoZSBhc3NlcnQgYWJvdmUgdGhpcyBpcyBub3QgZy4KKyAgICAgICAgIyBAc2luZ2xlZGlzcGF0Y2ggcmV0dXJucyB0aGUgd3JhcHBlci4KKworICAgIGRlZiB0ZXN0X3dyYXBwaW5nX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgICJTaW1wbGUgdGVzdCIKKyAgICAgICAgICAgIHJldHVybiAiVGVzdCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLl9fbmFtZV9fLCAiZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5fX2RvY19fLCAiU2ltcGxlIHRlc3QiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZGVjaW1hbCwgJ3JlcXVpcmVzIF9kZWNpbWFsJykKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jX2NsYXNzZXMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGcucmVnaXN0ZXIoZGVjaW1hbC5EZWNpbWFsRXhjZXB0aW9uKQorICAgICAgICBkZWYgXyhvYmopOgorICAgICAgICAgICAgcmV0dXJuIG9iai5hcmdzCisgICAgICAgIHN1Ym4gPSBkZWNpbWFsLlN1Ym5vcm1hbCgiRXhwb25lbnQgPCBFbWluIikKKyAgICAgICAgcm5kID0gZGVjaW1hbC5Sb3VuZGVkKCJOdW1iZXIgZ290IHJvdW5kZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoc3VibiksICgiRXhwb25lbnQgPCBFbWluIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocm5kKSwgKCJOdW1iZXIgZ290IHJvdW5kZWQiLCkpCisgICAgICAgIEBnLnJlZ2lzdGVyKGRlY2ltYWwuU3Vibm9ybWFsKQorICAgICAgICBkZWYgXyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJUb28gc21hbGwgdG8gY2FyZS4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzdWJuKSwgIlRvbyBzbWFsbCB0byBjYXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhybmQpLCAoIk51bWJlciBnb3Qgcm91bmRlZCIsKSkKKworICAgIGRlZiB0ZXN0X2NvbXBvc2VfbXJvKHNlbGYpOgorICAgICAgICAjIE5vbmUgb2YgdGhlIGV4YW1wbGVzIGluIHRoaXMgdGVzdCBkZXBlbmQgb24gaGF5c3RhY2sgb3JkZXJpbmcuCisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBtcm8gPSBmdW5jdG9vbHMuX2NvbXBvc2VfbXJvCisgICAgICAgIGJhc2VzID0gW2MuU2VxdWVuY2UsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywgYy5TZXRdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhkaWN0LCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2RpY3QsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywgYy5TaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorICAgICAgICBiYXNlcyA9IFtjLkNvbnRhaW5lciwgYy5NYXBwaW5nLCBjLk11dGFibGVNYXBwaW5nLCBjLk9yZGVyZWREaWN0XQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oYy5DaGFpbk1hcCwgaGF5c3RhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtjLkNoYWluTWFwLCBjLk11dGFibGVNYXBwaW5nLCBjLk1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLlNpemVkLCBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwgb2JqZWN0XSkKKworICAgICAgICAjIElmIHRoZXJlJ3MgYSBnZW5lcmljIGZ1bmN0aW9uIHdpdGggaW1wbGVtZW50YXRpb25zIHJlZ2lzdGVyZWQgZm9yCisgICAgICAgICMgYm90aCBTaXplZCBhbmQgQ29udGFpbmVyLCBwYXNzaW5nIGEgZGVmYXVsdGRpY3QgdG8gaXQgcmVzdWx0cyBpbiBhbgorICAgICAgICAjIGFtYmlndW91cyBkaXNwYXRjaCB3aGljaCB3aWxsIGNhdXNlIGEgUnVudGltZUVycm9yIChzZWUKKyAgICAgICAgIyB0ZXN0X21yb19jb25mbGljdHMpLgorICAgICAgICBiYXNlcyA9IFtjLkNvbnRhaW5lciwgYy5TaXplZCwgc3RyXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oYy5kZWZhdWx0ZGljdCwgW2MuU2l6ZWQsIGMuQ29udGFpbmVyLCBzdHJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5TaXplZCwgYy5Db250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RdKQorCisgICAgICAgICMgTXV0YWJsZVNlcXVlbmNlIGJlbG93IGlzIHJlZ2lzdGVyZWQgZGlyZWN0bHkgb24gRC4gSW4gb3RoZXIgd29yZHMsIGl0CisgICAgICAgICMgcHJlY2VlZHMgTXV0YWJsZU1hcHBpbmcgd2hpY2ggbWVhbnMgc2luZ2xlIGRpc3BhdGNoIHdpbGwgYWx3YXlzCisgICAgICAgICMgY2hvb3NlIE11dGFibGVTZXF1ZW5jZSBoZXJlLgorICAgICAgICBjbGFzcyBEKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjLk11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihEKQorICAgICAgICBiYXNlcyA9IFtjLk11dGFibGVTZXF1ZW5jZSwgYy5NdXRhYmxlTWFwcGluZ10KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKEQsIGJhc2VzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbRCwgYy5NdXRhYmxlU2VxdWVuY2UsIGMuU2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLk11dGFibGVNYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5NYXBwaW5nLCBjLlNpemVkLCBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCisKKyAgICAgICAgIyBDb250YWluZXIgYW5kIENhbGxhYmxlIGFyZSByZWdpc3RlcmVkIG9uIGRpZmZlcmVudCBiYXNlIGNsYXNzZXMgYW5kCisgICAgICAgICMgYSBnZW5lcmljIGZ1bmN0aW9uIHN1cHBvcnRpbmcgYm90aCBzaG91bGQgYWx3YXlzIHBpY2sgdGhlIENhbGxhYmxlCisgICAgICAgICMgaW1wbGVtZW50YXRpb24gaWYgYSBDIGluc3RhbmNlIGlzIHBhc3NlZC4KKyAgICAgICAgY2xhc3MgQyhjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGJhc2VzID0gW2MuU2l6ZWQsIGMuQ2FsbGFibGUsIGMuQ29udGFpbmVyLCBjLk1hcHBpbmddCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhDLCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW0MsIGMuQ2FsbGFibGUsIGMuZGVmYXVsdGRpY3QsIGRpY3QsIGMuTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfYWJjKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgZCA9IHsiYSI6ICJiIn0KKyAgICAgICAgbCA9IFsxLCAyLCAzXQorICAgICAgICBzID0ge29iamVjdCgpLCBOb25lfQorICAgICAgICBmID0gZnJvemVuc2V0KHMpCisgICAgICAgIHQgPSAoMSwgMiwgMykKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAiYmFzZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIG9iajogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIG9iajogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5DaGFpbk1hcCwgbGFtYmRhIG9iajogImNoYWlubWFwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKSAgIyBpcnJlbGV2YW50IEFCQ3MgcmVnaXN0ZXJlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlU2VxdWVuY2UsIGxhbWJkYSBvYmo6ICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlU2V0LCBsYW1iZGEgb2JqOiAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuTWFwcGluZywgbGFtYmRhIG9iajogIm1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpICAjIG5vdCBzcGVjaWZpYyBlbm91Z2gKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2VxdWVuY2UsIGxhbWJkYSBvYmo6ICJzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgb2JqOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGRpY3QsIGxhbWJkYSBvYmo6ICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIobGlzdCwgbGFtYmRhIG9iajogImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoc2V0LCBsYW1iZGEgb2JqOiAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoZnJvemVuc2V0LCBsYW1iZGEgb2JqOiAiZnJvemVuLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAiZnJvemVuLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3Rlcih0dXBsZSwgbGFtYmRhIG9iajogInR1cGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAidHVwbGUiKQorCisgICAgZGVmIHRlc3RfYzNfYWJjKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgbXJvID0gZnVuY3Rvb2xzLl9jM19tcm8KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAgICAjIGltcGxpZXMgU2l6ZWQKKyAgICAgICAgQGMuQ29udGFpbmVyLnJlZ2lzdGVyCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgcGFzcyAgICMgdW5yZWxhdGVkCisgICAgICAgIGNsYXNzIFgoRCwgQywgQik6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcyAgICMgaW1wbGllcyBDYWxsYWJsZQorICAgICAgICBleHBlY3RlZCA9IFtYLCBjLkNhbGxhYmxlLCBELCBDLCBjLkNvbnRhaW5lciwgQiwgYy5TaXplZCwgQSwgb2JqZWN0XQorICAgICAgICBmb3IgYWJjcyBpbiBwZXJtdXRhdGlvbnMoW2MuU2l6ZWQsIGMuQ2FsbGFibGUsIGMuQ29udGFpbmVyXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ybyhYLCBhYmNzPWFiY3MpLCBleHBlY3RlZCkKKyAgICAgICAgIyB1bnJlbGF0ZWQgQUJDcyBkb24ndCBhcHBlYXIgaW4gdGhlIHJlc3VsdGluZyBNUk8KKyAgICAgICAgbWFueV9hYmNzID0gW2MuTWFwcGluZywgYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXIsIGMuSXRlcmFibGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXJvKFgsIGFiY3M9bWFueV9hYmNzKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9tcm9fY29uZmxpY3RzKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBjbGFzcyBPKGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgbyA9IE8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkl0ZXJhYmxlLCBsYW1iZGEgYXJnOiAiaXRlcmFibGUiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuQ29udGFpbmVyLCBsYW1iZGEgYXJnOiAiY29udGFpbmVyIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgYXJnOiAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgYXJnOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIF9fbXJvX18KKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKSAgICMgc2VlIGFib3ZlOiBTaXplZCBpcyBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkNvbnRhaW5lcgorICAgICAgICBjbGFzcyBQOgorICAgICAgICAgICAgcGFzcworICAgICAgICBwID0gUCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgImJhc2UiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgIml0ZXJhYmxlIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoUCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX29uZToKKyAgICAgICAgICAgIGcocCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV9vbmUuZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICgoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGUnPiIpLAorICAgICAgICAgICAgICgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZSc+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+IikpLAorICAgICAgICApCisgICAgICAgIGNsYXNzIFEoYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBxID0gUSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNpemVkIikKKyAgICAgICAgYy5JdGVyYWJsZS5yZWdpc3RlcihRKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocSksICJzaXplZCIpICAgIyBiZWNhdXNlIGl0J3MgZXhwbGljaXRseSBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKFEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkl0ZXJhYmxlCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGgoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGgucmVnaXN0ZXIoYy5TaXplZCkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2l6ZWQiCisgICAgICAgIEBoLnJlZ2lzdGVyKGMuQ29udGFpbmVyKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJjb250YWluZXIiCisgICAgICAgICMgRXZlbiB0aG91Z2ggU2l6ZWQgYW5kIENvbnRhaW5lciBhcmUgZXhwbGljaXQgYmFzZXMgb2YgTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICMgdGhpcyBBQkMgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIG9uIGRlZmF1bHRkaWN0IHdoaWNoIG1ha2VzIGFsbCBvZgorICAgICAgICAjIE11dGFibGVNYXBwaW5nJ3MgYmFzZXMgaW1wbGljaXQgYXMgd2VsbCBmcm9tIGRlZmF1bHRkaWN0J3MKKyAgICAgICAgIyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX3R3bzoKKyAgICAgICAgICAgIGgoYy5kZWZhdWx0ZGljdChsYW1iZGE6IDApKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX3R3by5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgUihjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoUikKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaShhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJtYXBwaW5nIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2VxdWVuY2UiCisgICAgICAgIHIgPSBSKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpKHIpLCAic2VxdWVuY2UiKQorICAgICAgICBjbGFzcyBTOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBUKFMsIGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgdCA9IFQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodCksICJzaXplZCIpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh0KSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIHRoZSBNUk8KKyAgICAgICAgY2xhc3MgVToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHUgPSBVKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHUpLCAic2l6ZWQiKSAgICMgaW1wbGljaXQgU2l6ZWQgc3ViY2xhc3MgaW5mZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgZXhpc3RlbmNlIG9mIF9fbGVuX18oKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihVKQorICAgICAgICAjIFRoZXJlIGlzIG5vIHByZWZlcmVuY2UgZm9yIHJlZ2lzdGVyZWQgdmVyc3VzIGluZmVycmVkIEFCQ3MuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyByZV90aHJlZToKKyAgICAgICAgICAgIGgodSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV90aHJlZS5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgVihjLlNpemVkLCBTKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGooYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGoucmVnaXN0ZXIoUykKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAicyIKKyAgICAgICAgQGoucmVnaXN0ZXIoYy5Db250YWluZXIpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImNvbnRhaW5lciIKKyAgICAgICAgdiA9IFYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGoodiksICJzIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqKHYpLCAiY29udGFpbmVyIikgICAjIGJlY2F1c2UgaXQgZW5kcyB1cCByaWdodCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2l6ZWQgaW4gdGhlIE1STworCisgICAgZGVmIHRlc3RfY2FjaGVfaW52YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2VyRGljdAorICAgICAgICBjbGFzcyBUcmFjaW5nRGljdChVc2VyRGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBzdXBlcihUcmFjaW5nRGljdCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcyA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YVtrZXldCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBfb3JpZ193a2QgPSBmdW5jdG9vbHMuV2Vha0tleURpY3Rpb25hcnkKKyAgICAgICAgdGQgPSBUcmFjaW5nRGljdCgpCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IGxhbWJkYTogdGQKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGwgPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbbGlzdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCB0ZC5kYXRhW2xpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgYXJnOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5fZmluZF9pbXBsKGRpY3QsIGcucmVnaXN0cnkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMuX2ZpbmRfaW1wbChsaXN0LCBnLnJlZ2lzdHJ5KSkKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlTWFwcGluZy5yZWdpc3RlcihYKSAgICMgV2lsbCBub3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCB1c2luZyBBQkNzIHlldC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIGFyZzogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5kaXNwYXRjaChsaXN0KQorICAgICAgICBnLmRpc3BhdGNoKGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgYy5NdXRhYmxlU2V0LnJlZ2lzdGVyKFgpICAgICAgICMgV2lsbCBpbnZhbGlkYXRlIHRoZSBjYWNoZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKSAgICMgU3RhbGUgY2FjaGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIGFyZzogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgZy5yZWdpc3RlcihkaWN0LCBsYW1iZGEgYXJnOiAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgZy5fY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IF9vcmlnX3drZAorCisKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoCi0gICAgICAgIFRlc3RQYXJ0aWFsLAotICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAotICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKKyAgICAgICAgVGVzdFBhcnRpYWxDLAorICAgICAgICBUZXN0UGFydGlhbFB5LAorICAgICAgICBUZXN0UGFydGlhbENTdWJjbGFzcywKKyAgICAgICAgVGVzdFBhcnRpYWxNZXRob2QsCiAgICAgICAgIFRlc3RVcGRhdGVXcmFwcGVyLAogICAgICAgICBUZXN0VG90YWxPcmRlcmluZywKLSAgICAgICAgVGVzdENtcFRvS2V5LAorICAgICAgICBUZXN0Q21wVG9LZXlDLAorICAgICAgICBUZXN0Q21wVG9LZXlQeSwKICAgICAgICAgVGVzdFdyYXBzLAogICAgICAgICBUZXN0UmVkdWNlLAogICAgICAgICBUZXN0TFJVLAorICAgICAgICBUZXN0U2luZ2xlRGlzcGF0Y2gsCiAgICAgKQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKaW5kZXggYTBjMTU2Zi4uYmVhYzk5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKQEAgLTgyLDYgKzgyLDE0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQogCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlMTAoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTEwCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmUxMCIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCiAgICAgZGVmIHRlc3RfcGFyc2VyaGFjayhzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIHBhcnNlci5jOjpmdXR1cmVfaGFjayBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZAogICAgICAgICAjIE5vdGU6IGFsdGhvdWdoIHRoaXMgdGVzdCBtdXN0IHBhc3MsIGl0J3Mgbm90IHRlc3RpbmcgdGhlIG9yaWdpbmFsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvTGliL3Rlc3QvdGVzdF9nYy5weQppbmRleCBjNTliNzJlLi5lOGY1MmE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2djLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKQEAgLTEsNiArMSw5IEBACitpbXBvcnQgX3Rlc3RjYXBpCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAodmVyYm9zZSwgcmVmY291bnRfdGVzdCwgcnVuX3VuaXR0ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX3B5dGhvbl9zdGRlcnIpCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgbWFrZV9zY3JpcHQsIHRlbXBfZGlyCisKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgZ2MKQEAgLTM4LDYgKzQxLDcgQEAKICAgICAgICAgIyBnYyBjb2xsZWN0cyBpdC4KICAgICAgICAgc2VsZi53ciA9IHdlYWtyZWYucmVmKEMxMDU1ODIwKDY2NiksIGl0X2hhcHBlbmVkKQogCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCiBjbGFzcyBVbmNvbGxlY3RhYmxlKG9iamVjdCk6CiAgICAgIiIiQ3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHdpdGggbXVsdGlwbGUgX19kZWxfXyBtZXRob2RzLgogCkBAIC01MCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzZWxmLnBhcnRuZXIgPSBVbmNvbGxlY3RhYmxlKHBhcnRuZXI9c2VsZikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucGFydG5lciA9IHBhcnRuZXIKLSAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICBkZWYgX190cF9kZWxfXyhzZWxmKToKICAgICAgICAgcGFzcwogCiAjIyMgVGVzdHMKQEAgLTEzOSwxMSArMTQzLDEyIEBACiAgICAgICAgIGRlbCBhCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQogCi0gICAgZGVmIHRlc3RfZmluYWxpemVyKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xlZ2FjeV9maW5hbGl6ZXIoc2VsZik6CiAgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKICAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCiAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6IHBhc3MKICAgICAgICAgY2xhc3MgQjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtMTYzLDExICsxNjgsMTIgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IGZpbmQgb2JqIGluIGdhcmJhZ2UgKGZpbmFsaXplcikiKQogICAgICAgICBnYy5nYXJiYWdlLnJlbW92ZShvYmopCiAKLSAgICBkZWYgdGVzdF9maW5hbGl6ZXJfbmV3Y2xhc3Moc2VsZik6CisgICAgZGVmIHRlc3RfbGVnYWN5X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKICAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAogICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIEBfdGVzdGNhcGkud2l0aF90cF9kZWwKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOiBwYXNzCiAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtNTY4LDEyICs1NzQsMTQgQEAKICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgY29kZSA9ICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgICAgIEBfdGVzdGNhcGkud2l0aF90cF9kZWwKICAgICAgICAgICAgIGNsYXNzIFg6CiAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjxYICUlcj4iICUlIHNlbGYubmFtZQotICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHggPSBYKCdmaXJzdCcpCkBAIC02MTAsNiArNjE4LDY2IEBACiAgICAgICAgIHN0ZGVyciA9IHJ1bl9jb21tYW5kKGNvZGUgJSAiZ2MuREVCVUdfU0FWRUFMTCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJ1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgc2h1dGRvd24iLCBzdGRlcnIpCiAKKyAgICBkZWYgdGVzdF9nY19tYWluX21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgdGhyb3VnaCB0aGUgX19tYWluX18gbW9kdWxlIGFuZCBjaGVjaworICAgICAgICAjIGl0IGdldHMgY29sbGVjdGVkIGF0IGludGVycHJldGVyIHNodXRkb3duLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB3ZWFrcmVmCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnX19kZWxfXyBjYWxsZWQnKQorICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYidfX2RlbF9fIGNhbGxlZCcpCisKKyAgICBkZWYgdGVzdF9nY19vcmRpbmFyeV9tb2R1bGVfYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgYnV0IHdpdGggYSBub24tX19tYWluX18gbW9kdWxlLgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZHVsZSA9ICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdfX2RlbF9fIGNhbGxlZCcpCisgICAgICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgJXIpCisgICAgICAgICAgICAgICAgaW1wb3J0IGdjdGVzdAorICAgICAgICAgICAgICAgICIiIiAlIChzY3JpcHRfZGlyLCkKKyAgICAgICAgICAgIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsICdnY3Rlc3QnLCBtb2R1bGUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJ19fZGVsX18gY2FsbGVkJykKKworICAgIGRlZiB0ZXN0X2dldF9zdGF0cyhzZWxmKToKKyAgICAgICAgc3RhdHMgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0cyksIDMpCisgICAgICAgIGZvciBzdCBpbiBzdGF0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdCwgZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJjb2xsZWN0ZWQiLCAiY29sbGVjdGlvbnMiLCAidW5jb2xsZWN0YWJsZSJ9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3RlZCJdLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3Rpb25zIl0sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsidW5jb2xsZWN0YWJsZSJdLCAwKQorICAgICAgICAjIENoZWNrIHRoYXQgY29sbGVjdGlvbiBjb3VudHMgYXJlIGluY3JlbWVudGVkIGNvcnJlY3RseQorICAgICAgICBpZiBnYy5pc2VuYWJsZWQoKToKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5lbmFibGUpCisgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgb2xkID0gZ2MuZ2V0X3N0YXRzKCkKKyAgICAgICAgZ2MuY29sbGVjdCgwKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgZ2MuY29sbGVjdCgyKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSArIDEpCisKIAogY2xhc3MgR0NDYWxsYmFja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CmluZGV4IDg0NjQyMmIuLjBlMjU0YTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CkBAIC01LDYgKzUsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IHBwcmludAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBzeXNjb25maWcKQEAgLTE3LDYgKzE4LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBfdGhyZWFkID0gTm9uZQogCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlLCBweXRob25faXNfb3B0aW1pemVkCiAKIHRyeToKQEAgLTQwLDYgKzQyLDggQEAKIGNoZWNrb3V0X2hvb2tfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24tZ2RiLnB5JykKIAorUFlUSE9OSEFTSFNFRUQgPSAnMTIzJworCiBkZWYgcnVuX2dkYigqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiUnVucyBnZGIgaW4gLS1iYXRjaCBtb2RlIHdpdGggdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGdpdmVuIGJ5ICphcmdzLgogCkBAIC0xNDQsNyArMTQ4LDcgQEAKICAgICAgICAgIyBwcmludCAoJyAnLmpvaW4oYXJncykpCiAKICAgICAgICAgIyBVc2UgImFyZ3MiIHRvIGludm9rZSBnZGIsIGNhcHR1cmluZyBzdGRvdXQsIHN0ZGVycjoKLSAgICAgICAgb3V0LCBlcnIgPSBydW5fZ2RiKCphcmdzLCBQWVRIT05IQVNIU0VFRD0nMCcpCisgICAgICAgIG91dCwgZXJyID0gcnVuX2dkYigqYXJncywgUFlUSE9OSEFTSFNFRUQ9UFlUSE9OSEFTSFNFRUQpCiAKICAgICAgICAgZXJybGluZXMgPSBlcnIuc3BsaXRsaW5lcygpCiAgICAgICAgIHVuZXhwZWN0ZWRfZXJybGluZXMgPSBbXQpAQCAtMTY1LDYgKzE2OSwxMCBAQAogICAgICAgICAgICAgJ2xpbnV4LWdhdGUuc28nLAogICAgICAgICAgICAgJ0RvIHlvdSBuZWVkICJzZXQgc29saWItc2VhcmNoLXBhdGgiIG9yICcKICAgICAgICAgICAgICcic2V0IHN5c3Jvb3QiPycsCisgICAgICAgICAgICAnd2FybmluZzogU291cmNlIGZpbGUgaXMgbW9yZSByZWNlbnQgdGhhbiBleGVjdXRhYmxlLicsCisgICAgICAgICAgICAjIElzc3VlICMxOTc1MzogbWlzc2luZyBzeW1ib2xzIG9uIFN5c3RlbSBaCisgICAgICAgICAgICAnTWlzc2luZyBzZXBhcmF0ZSBkZWJ1Z2luZm8gZm9yICcsCisgICAgICAgICAgICAnVHJ5OiB6eXBwZXIgaW5zdGFsbCAtQyAnLAogICAgICAgICAgICAgKQogICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoaWdub3JlX3BhdHRlcm5zKToKQEAgLTI0OCw5ICsyNTYsOCBAQAogICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZGljdGlvbmFyaWVzJwogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoe30pCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInfSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9LCAieydmb28nOiAnYmFyJ30iKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0sICJ7J2RvdWdsYXMnOiA0MiwgJ2Zvbyc6ICdiYXInfSIpCiAKICAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGxpc3RzJwpAQCAtMzA1LDI2ICszMTIsMzAgQEAKIAogICAgIGRlZiB0ZXN0X3R1cGxlcyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHR1cGxlcycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHR1cGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih0dXBsZSgpLCAnKCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKDEsKSwgJygxLCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKCdmb28nLCAnYmFyJywgJ2JheicpKQogCiAgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKKyAgICAgICAgaWYgKGdkYl9tYWpvcl92ZXJzaW9uLCBnZGJfbWlub3JfdmVyc2lvbikgPCAoNywgMyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJwcmV0dHktcHJpbnRpbmcgb2Ygc2V0cyBuZWVkcyBnZGIgNy4zIG9yIGxhdGVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldCgpLCAnc2V0KCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KFsnYScsICdiJ10pLCAieydhJywgJ2InfSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWzQsIDUsIDZdKSwgIns0LCA1LCA2fSIpCiAKICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYW5kbGUgc2V0cyBjb250YWluaW5nIHRoZSAiZHVtbXkiIGtleSB2YWx1ZSwKICAgICAgICAgIyB3aGljaCBoYXBwZW5zIG9uIGRlbGV0aW9uOgogICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJ3MgPSBzZXQoWydhJywnYiddKQotcy5wb3AoKQorcy5yZW1vdmUoJ2EnKQogaWQocyknJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJ7J2InfSIpCiAKICAgICBkZWYgdGVzdF9mcm96ZW5zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldCgpKQorICAgICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA8ICg3LCAzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzIG5lZWRzIGdkYiA3LjMgb3IgbGF0ZXIiKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCksICdmcm96ZW5zZXQoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWydhJywgJ2InXSksICJmcm96ZW5zZXQoeydhJywgJ2InfSkiKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFs0LCA1LCA2XSksICJmcm96ZW5zZXQoezQsIDUsIDZ9KSIpCiAKQEAgLTg0MSw2ICs4NTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmEgPSAxXG5iID0gMlxuYyA9IDNcbi4qIikKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcHJpbnQoIkdEQiB2ZXJzaW9uOiIpCisgICAgICAgIGZvciBsaW5lIGluIG9zLmZzZGVjb2RlKGdkYl92ZXJzaW9uKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBwcmludCgiICIgKiA0ICsgbGluZSkKICAgICBydW5fdW5pdHRlc3QoUHJldHR5UHJpbnRUZXN0cywKICAgICAgICAgICAgICAgICAgUHlMaXN0VGVzdHMsCiAgICAgICAgICAgICAgICAgIFN0YWNrTmF2aWdhdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CmluZGV4IDk1ODA1NGEuLjRlOTIxMTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKQEAgLTEsMyArMSw1NSBAQAoraW1wb3J0IGdjCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZnJhbWVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIEEgZ2VuZXJhdG9yIGZyYW1lIGNhbiBiZSByZXN1cnJlY3RlZCBieSBhIGdlbmVyYXRvcidzIGZpbmFsaXphdGlvbi4KKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZnJhbWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorCisgICAgICAgIGcgPSBnZW4oKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGcpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZGVsIGcKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnJhbWUpCisgICAgICAgIGRlbCBmcmFtZQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgY2F1Z2h0IGluIGEgcmVmY3ljbGUgZ2V0cyBmaW5hbGl6ZWQgYW55d2F5LgorICAgICAgICBvbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZmluYWxpemVkID0gRmFsc2UKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluYWxpemVkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZyA9IHlpZWxkCisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZWQgPSBUcnVlCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZy5zZW5kKGcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzeXMuZ2V0cmVmY291bnQoZyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluYWxpemVkKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIG9sZF9nYXJiYWdlKQorCisKIHR1dG9yaWFsX3Rlc3RzID0gIiIiCiBMZXQncyB0cnkgYSBzaW1wbGUgZ2VuZXJhdG9yOgogCkBAIC0xNzI5LDkgKzE3ODEsNyBAQAogPj4+IGcgPSBmKCkKID4+PiBuZXh0KGcpCiA+Pj4gZGVsIGcKLT4+PiBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RhcnRzd2l0aCgKLS4uLiAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6ICdnZW5lcmF0b3IgaWdub3JlZCBHZW5lcmF0b3JFeGl0JyBpbiAiCi0uLi4gKQorPj4+ICJSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQiIGluIHN5cy5zdGRlcnIuZ2V0dmFsdWUoKQogVHJ1ZQogPj4+IHN5cy5zdGRlcnIgPSBvbGQKIApAQCAtMTg0MSwyMiArMTg5MSwyMyBAQAogLi4uICAgICBzeXMuc3RkZXJyID0gaW8uU3RyaW5nSU8oKQogLi4uICAgICBjbGFzcyBMZWFrZXI6CiAuLi4gICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKLS4uLiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKy4uLiAgICAgICAgICAgICBkZWYgaW52b2tlKG1lc3NhZ2UpOgorLi4uICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IobWVzc2FnZSkKKy4uLiAgICAgICAgICAgICBpbnZva2UoInRlc3QiKQogLi4uCiAuLi4gICAgIGwgPSBMZWFrZXIoKQogLi4uICAgICBkZWwgbAogLi4uICAgICBlcnIgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RyaXAoKQotLi4uICAgICBlcnIuc3RhcnRzd2l0aCgKLS4uLiAgICAgICAgICJFeGNlcHRpb24gUnVudGltZUVycm9yOiBSdW50aW1lRXJyb3IoKSBpbiA8IgotLi4uICAgICApCi0uLi4gICAgIGVyci5lbmRzd2l0aCgiPiBpZ25vcmVkIikKLS4uLiAgICAgbGVuKGVyci5zcGxpdGxpbmVzKCkpCisuLi4gICAgICJFeGNlcHRpb24gaWdub3JlZCBpbiIgaW4gZXJyCisuLi4gICAgICJSdW50aW1lRXJyb3I6IHRlc3QiIGluIGVycgorLi4uICAgICAiVHJhY2ViYWNrIiBpbiBlcnIKKy4uLiAgICAgImluIGludm9rZSIgaW4gZXJyCiAuLi4gZmluYWxseToKIC4uLiAgICAgc3lzLnN0ZGVyciA9IG9sZAogVHJ1ZQogVHJ1ZQotMQotCitUcnVlCitUcnVlCiAKIAogVGhlc2UgcmVmbGVhayB0ZXN0cyBzaG91bGQgcGVyaGFwcyBiZSBpbiBhIHRlc3RmaWxlIG9mIHRoZWlyIG93biwKQEAgLTE4ODEsNiArMTkzMiw3IEBACiAjIHNvIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQgaW4gYm90aCB3YXlzIG9mIHJ1bm5pbmcgcmVncnRlc3QuCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCB0ZXN0X2dlbmVyYXRvcnMKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZ2VuZXJhdG9ycywgdmVyYm9zZSkKIAogIyBUaGlzIHBhcnQgaXNuJ3QgbmVlZGVkIGZvciByZWdydGVzdCwgYnV0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGRpcmVjdGx5LgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKaW5kZXggZmQ4YmM1Ny4uZTk2Nzg5NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CkBAIC0xODgsMTIgKzE4OCw5MyBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAgICAgICAgICAgICBzYWZlX3JtZGlyKHN1cHBvcnQuVEVTVEZOKQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY3JlYXRlX2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInZm9vJykKKworICAgIGRlZiB0ZXN0X3NhbWVmaWxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4sIHRlc3RfZm4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGVfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lZmlsZV9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lZmlsZV9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorCisgICAgICAgICAgICBmdW5jKHRlc3RfZm4xLCB0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHRlc3RfZm5zID0gW3Rlc3RfZm5dKjIKKyAgICAgICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCgqc3RhdHMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4pCisKKyAgICBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fc3ltbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3Muc3ltbGluaykKKworICAgIGRlZiB0ZXN0X3NhbWVzdGF0X29uX2xpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZXN0YXRfb25fbGlua19mdW5jKG9zLmxpbmspCisKKyAgICBkZWYgX3Rlc3Rfc2FtZXN0YXRfb25fbGlua19mdW5jKHNlbGYsIGZ1bmMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKKyAgICAgICAgICAgIHRlc3RfZm5zID0gKHRlc3RfZm4xLCB0ZXN0X2ZuMikKKyAgICAgICAgICAgIGZ1bmMoKnRlc3RfZm5zKQorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCgqc3RhdHMpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgIGRlZiB0ZXN0X3NhbWVvcGVuZmlsZShzZWxmKToKKyAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGEsIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVvcGVuZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5maWxlbm8oKSwgYi5maWxlbm8oKSkpCisKIGNsYXNzIFRlc3RHZW5lcmljVGVzdChHZW5lcmljVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgSXNzdWUgMTY4NTI6IEdlbmVyaWNUZXN0IGNhbid0IGluaGVyaXQgZnJvbSB1bml0dGVzdC5UZXN0Q2FzZQogICAgICMgZm9yIHRlc3QgZGlzY292ZXJ5IHB1cnBvc2VzOyBDb21tb25UZXN0IGluaGVyaXRzIGZyb20gR2VuZXJpY1Rlc3QKICAgICAjIGFuZCBpcyBvbmx5IG1lYW50IHRvIGJlIGluaGVyaXRlZCBieSBvdGhlcnMuCiAgICAgcGF0aG1vZHVsZSA9IGdlbmVyaWNwYXRoCiAKKwogIyBGb2xsb3dpbmcgVGVzdENhc2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1biBmcm9tIHRlc3RfZ2VuZXJpY3BhdGguCiAjIEl0IGlzIGluaGVyaXRlZCBieSBvdGhlciB0ZXN0IG1vZHVsZXMgKG1hY3BhdGgsIG50cGF0aCwgcG9zaXhwYXRoKS4KIApAQCAtMzIyLDcgKzQwMyw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZWVkIHN1cHBvcnQuVEVTVEZOX05PTkFTQ0lJIikKIAotICAgICAgICAjIFRlc3Qgbm9uLUFTQ0lJLCBub24tVVRGOCBieXRlcyBpbiB0aGUgcGF0aC4KICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QobmFtZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQppbmRleCA0OGNhOTRlLi5iZWVhNzZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKQEAgLTEsMzggKzEsNDAgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rZXl3b3JkcywgZ2V0YXJnc19rZXl3b3JkX29ubHkKK3RyeToKKyAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRhcmdzX0wgPSBOb25lICMgUFlfTE9OR19MT05HIG5vdCBhdmFpbGFibGUKIAotIiIiCi0+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgotPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KLT4KLT4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKLT4KLT4gYiB1bnNpZ25lZCBjaGFyIDAuLlVDSEFSX01BWAotPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKLT4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKLT4gSCB1bnNpZ25lZCBzaG9ydCBub25lICoqCi0+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKLT4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAotCi0KLT4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAotPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCi0KLT4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCi0+IEwgbG9uZyBsb25nIExMT05HX01JTi4uTExPTkdfTUFYCi0KLT4gTm90ZXM6Ci0+Ci0+ICogTmV3IGZvcm1hdCBjb2Rlcy4KLT4KLT4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQotPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgotCi1QbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgotdW5zaWduZWQgbG9uZyBhbmQgUHlJbnRfQXNMb25nTG9uZ01hc2soKSAtPiB1bnNpZ25lZAotbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCi0iIiIKKyMgPiBIb3cgYWJvdXQgdGhlIGZvbGxvd2luZyBjb3VudGVycHJvcG9zYWwuIFRoaXMgYWxzbyBjaGFuZ2VzIHNvbWUgb2YKKyMgPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KKyMgPgorIyA+IENvZGUgQyB0eXBlIFJhbmdlIGNoZWNrCisjID4KKyMgPiBiIHVuc2lnbmVkIGNoYXIgMC4uVUNIQVJfTUFYCisjID4gaCBzaWduZWQgc2hvcnQgU0hSVF9NSU4uLlNIUlRfTUFYCisjID4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKKyMgPiBIIHVuc2lnbmVkIHNob3J0IG5vbmUgKioKKyMgPiBrICogdW5zaWduZWQgbG9uZyBub25lCisjID4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAorIworIworIyA+IGkgaW50IElOVF9NSU4uLklOVF9NQVgKKyMgPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCisjCisjID4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCisjID4gTCBsb25nIGxvbmcgTExPTkdfTUlOLi5MTE9OR19NQVgKKyMKKyMgPiBOb3RlczoKKyMgPgorIyA+ICogTmV3IGZvcm1hdCBjb2Rlcy4KKyMgPgorIyA+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKKyMgPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgorIworIyBQbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgorIyB1bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCisjIGxvbmcgbG9uZyAoaWYgdGhhdCBleGlzdHMpLgogCiBMQVJHRSA9IDB4N0ZGRkZGRkYKIFZFUllfTEFSR0UgPSAweEZGMDAwMDEyMTIxMjEyMTIxMjEyMTI0MgpAQCAtMTg0LDYgKzE4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgVkVSWV9MQVJHRSkKIAogCitAdW5pdHRlc3Quc2tpcElmKGdldGFyZ3NfTCBpcyBOb25lLCAnUFlfTE9OR19MT05HIGlzIG5vdCBhdmFpbGFibGUnKQogY2xhc3MgTG9uZ0xvbmdfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X0woc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wKQEAgLTUzNiwyNCArNTM5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc19aX2hhc2goTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gWwotICAgICAgICBTaWduZWRfVGVzdENhc2UsCi0gICAgICAgIFVuc2lnbmVkX1Rlc3RDYXNlLAotICAgICAgICBCb29sZWFuX1Rlc3RDYXNlLAotICAgICAgICBUdXBsZV9UZXN0Q2FzZSwKLSAgICAgICAgS2V5d29yZHNfVGVzdENhc2UsCi0gICAgICAgIEtleXdvcmRPbmx5X1Rlc3RDYXNlLAotICAgICAgICBCeXRlc19UZXN0Q2FzZSwKLSAgICAgICAgVW5pY29kZV9UZXN0Q2FzZSwKLSAgICBdCi0gICAgdHJ5OgotICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgIyBQWV9MT05HX0xPTkcgbm90IGF2YWlsYWJsZQotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb25nTG9uZ19UZXN0Q2FzZSkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzMxYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5CkBAIC0wLDAgKzEsMTU1IEBACitpbXBvcnQgZ2V0cGFzcworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8sIFN0cmluZ0lPCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKwordHJ5OgorICAgIGltcG9ydCB0ZXJtaW9zCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGVybWlvcyA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgcHdkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcHdkID0gTm9uZQorCitAbW9jay5wYXRjaCgnb3MuZW52aXJvbicpCitjbGFzcyBHZXRwYXNzR2V0dXNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdXNlcm5hbWVfdGFrZXNfdXNlcm5hbWVfZnJvbV9lbnYoc2VsZiwgZW52aXJvbik6CisgICAgICAgIGV4cGVjdGVkX25hbWUgPSAnc29tZV9uYW1lJworICAgICAgICBlbnZpcm9uLmdldC5yZXR1cm5fdmFsdWUgPSBleHBlY3RlZF9uYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbmFtZSwgZ2V0cGFzcy5nZXR1c2VyKCkpCisKKyAgICBkZWYgdGVzdF91c2VybmFtZV9wcmlvcml0aWVzX29mX2Vudl92YWx1ZXMoc2VsZiwgZW52aXJvbik6CisgICAgICAgIGVudmlyb24uZ2V0LnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2V0cGFzcy5nZXR1c2VyKCkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOiAjIGluIGNhc2UgdGhlcmUncyBubyBwd2QgbW9kdWxlCisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBlbnZpcm9uLmdldC5jYWxsX2FyZ3NfbGlzdCwKKyAgICAgICAgICAgIFttb2NrLmNhbGwoeCkgZm9yIHggaW4gKCdMT0dOQU1FJywgJ1VTRVInLCAnTE5BTUUnLCAnVVNFUk5BTUUnKV0pCisKKyAgICBkZWYgdGVzdF91c2VybmFtZV9mYWxsc19iYWNrX3RvX3B3ZChzZWxmLCBlbnZpcm9uKToKKyAgICAgICAgZXhwZWN0ZWRfbmFtZSA9ICdzb21lX25hbWUnCisgICAgICAgIGVudmlyb24uZ2V0LnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgaWYgcHdkOgorICAgICAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5nZXR1aWQnKSBhcyB1aWQsIFwKKyAgICAgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgncHdkLmdldHB3dWlkJykgYXMgZ2V0cHc6CisgICAgICAgICAgICAgICAgdWlkLnJldHVybl92YWx1ZSA9IDQyCisgICAgICAgICAgICAgICAgZ2V0cHcucmV0dXJuX3ZhbHVlID0gW2V4cGVjdGVkX25hbWVdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFzcy5nZXR1c2VyKCkpCisgICAgICAgICAgICAgICAgZ2V0cHcuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgZ2V0cGFzcy5nZXR1c2VyKQorCisKK2NsYXNzIEdldHBhc3NSYXdpbnB1dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZmx1c2hlc19zdHJlYW1fYWZ0ZXJfcHJvbXB0KHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSAxNzAzCisgICAgICAgIHN0cmVhbSA9IG1vY2suTW9jayhzcGVjPVN0cmluZ0lPKQorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCdpbnB1dF9zdHJpbmcnKQorICAgICAgICBnZXRwYXNzLl9yYXdfaW5wdXQoJ3NvbWVfcHJvbXB0Jywgc3RyZWFtLCBpbnB1dD1pbnB1dCkKKyAgICAgICAgc3RyZWFtLmZsdXNoLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworICAgIGRlZiB0ZXN0X3VzZXNfc3RkZXJyX2FzX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oJ2lucHV0X3N0cmluZycpCisgICAgICAgIHByb21wdCA9ICdzb21lX3Byb21wdCcKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdzeXMuc3RkZXJyJykgYXMgc3RkZXJyOgorICAgICAgICAgICAgZ2V0cGFzcy5fcmF3X2lucHV0KHByb21wdCwgaW5wdXQ9aW5wdXQpCisgICAgICAgICAgICBzdGRlcnIud3JpdGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgocHJvbXB0KQorCisgICAgQG1vY2sucGF0Y2goJ3N5cy5zdGRpbicpCisgICAgZGVmIHRlc3RfdXNlc19zdGRpbl9hc19kZWZhdWx0X2lucHV0KHNlbGYsIG1vY2tfaW5wdXQpOgorICAgICAgICBtb2NrX2lucHV0LnJlYWRsaW5lLnJldHVybl92YWx1ZSA9ICdpbnB1dF9zdHJpbmcnCisgICAgICAgIGdldHBhc3MuX3Jhd19pbnB1dChzdHJlYW09U3RyaW5nSU8oKSkKKyAgICAgICAgbW9ja19pbnB1dC5yZWFkbGluZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yYWlzZXNfb25fZW1wdHlfaW5wdXQoc2VsZik6CisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBnZXRwYXNzLl9yYXdfaW5wdXQsIGlucHV0PWlucHV0KQorCisgICAgZGVmIHRlc3RfdHJpbXNfdHJhaWxpbmdfbmV3bGluZShzZWxmKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygndGVzdFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndGVzdCcsIGdldHBhc3MuX3Jhd19pbnB1dChpbnB1dD1pbnB1dCkpCisKKworIyBTb21lIG9mIHRoZXNlIHRlc3RzIGFyZSBhIGJpdCB3aGl0ZS1ib3guICBUaGUgZnVuY3Rpb25hbCByZXF1aXJlbWVudCBpcyB0aGF0CisjIHRoZSBwYXNzd29yZCBpbnB1dCBiZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSB0dHksIGFuZCB0aGF0IGl0IG5vdCBiZSBlY2hvZWQKKyMgb24gdGhlIHNjcmVlbiwgdW5sZXNzIHdlIGFyZSBmYWxsaW5nIGJhY2sgdG8gc3RkZXJyL3N0ZGluLgorCisjIFNvbWUgb2YgdGhlc2UgbWlnaHQgcnVuIG9uIHBsYXRmb3JtcyB3aXRob3V0IHRlcm1pb3MsIGJ1dCBwbGF5IGl0IHNhZmUuCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0ZXJtaW9zLCAndGVzdHMgcmVxdWlyZSBzeXN0ZW0gd2l0aCB0ZXJtaW9zJykKK2NsYXNzIFVuaXhHZXRwYXNzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91c2VzX3R0eV9kaXJlY3RseShzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpIGFzIGZpbGVpbywgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSBhcyB0ZXh0aW86CisgICAgICAgICAgICAjIEJ5IHNldHRpbmcgb3BlbidzIHJldHVybiB2YWx1ZSB0byBOb25lIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsCisgICAgICAgICAgICAjIHNraXAgY29kZSB3ZSBkb24ndCBjYXJlIGFib3V0IGluIHRoaXMgdGVzdC4gIFdlIGNhbiBtb2NrIHRoaXMgb3V0CisgICAgICAgICAgICAjIGZ1bGx5IGlmIGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiB3b3JrcyBkaWZmZXJlbnRseS4KKyAgICAgICAgICAgIG9wZW4ucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgb3Blbi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnL2Rldi90dHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5PX1JEV1IgfCBvcy5PX05PQ1RUWSkKKyAgICAgICAgICAgIGZpbGVpby5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChvcGVuLnJldHVybl92YWx1ZSwgJ3crJykKKyAgICAgICAgICAgIHRleHRpby5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmaWxlaW8ucmV0dXJuX3ZhbHVlKQorCisgICAgZGVmIHRlc3RfcmVzZXRzX3Rlcm1pb3Moc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5GaWxlSU8nKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNnZXRhdHRyJykgYXMgdGNnZXRhdHRyLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y3NldGF0dHInKSBhcyB0Y3NldGF0dHI6CisgICAgICAgICAgICBvcGVuLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgICAgIGZha2VfYXR0cnMgPSBbMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTVdCisgICAgICAgICAgICB0Y2dldGF0dHIucmV0dXJuX3ZhbHVlID0gbGlzdChmYWtlX2F0dHJzKQorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgdGNzZXRhdHRyLmFzc2VydF9jYWxsZWRfd2l0aCgzLCBtb2NrLkFOWSwgZmFrZV9hdHRycykKKworICAgIGRlZiB0ZXN0X2ZhbGxzX2JhY2tfdG9fZmFsbGJhY2tfaWZfdGVybWlvc19yYWlzZXMoc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5GaWxlSU8nKSBhcyBmaWxlaW8sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5UZXh0SU9XcmFwcGVyJykgYXMgdGV4dGlvLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y2dldGF0dHInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNzZXRhdHRyJykgYXMgdGNzZXRhdHRyLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnZ2V0cGFzcy5mYWxsYmFja19nZXRwYXNzJykgYXMgZmFsbGJhY2s6CisgICAgICAgICAgICBvcGVuLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgICAgIGZpbGVpby5yZXR1cm5fdmFsdWUgPSBCeXRlc0lPKCkKKyAgICAgICAgICAgIHRjc2V0YXR0ci5zaWRlX2VmZmVjdCA9IHRlcm1pb3MuZXJyb3IKKyAgICAgICAgICAgIGdldHBhc3MudW5peF9nZXRwYXNzKCkKKyAgICAgICAgICAgIGZhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdQYXNzd29yZDogJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRpby5yZXR1cm5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9mbHVzaGVzX3N0cmVhbV9hZnRlcl9pbnB1dChzZWxmKToKKyAgICAgICAgIyBpc3N1ZSA3MjA4CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5GaWxlSU8nKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNnZXRhdHRyJyksIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCd0ZXJtaW9zLnRjc2V0YXR0cicpOgorICAgICAgICAgICAgb3Blbi5yZXR1cm5fdmFsdWUgPSAzCisgICAgICAgICAgICBtb2NrX3N0cmVhbSA9IG1vY2suTW9jayhzcGVjPVN0cmluZ0lPKQorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3Moc3RyZWFtPW1vY2tfc3RyZWFtKQorICAgICAgICAgICAgbW9ja19zdHJlYW0uZmx1c2guYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X2ZhbGxzX2JhY2tfdG9fc3RkaW4oc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9zX29wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdzeXMuc3RkaW4nLCBzcGVjPVN0cmluZ0lPKSBhcyBzdGRpbjoKKyAgICAgICAgICAgIG9zX29wZW4uc2lkZV9lZmZlY3QgPSBJT0Vycm9yCisgICAgICAgICAgICBzdGRpbi5maWxlbm8uc2lkZV9lZmZlY3QgPSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoZ2V0cGFzcy5HZXRQYXNzV2FybmluZyk6CisgICAgICAgICAgICAgICAgICAgIGdldHBhc3MudW5peF9nZXRwYXNzKCkKKyAgICAgICAgICAgIHN0ZGluLnJlYWRsaW5lLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dhcm5pbmcnLCBzdGRlcnIuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1Bhc3N3b3JkOicsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkgYi9MaWIvdGVzdC90ZXN0X2dsb2IucHkKaW5kZXggZWI5YWViNS4uYTVhYjhkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQpAQCAtMTY5LDYgKzE2OSwyOCBAQAogICAgICAgICBlcShnbG9iLmdsb2IoJ1xcXFwqXFwqXFwnKSwgW10pCiAgICAgICAgIGVxKGdsb2IuZ2xvYihiJ1xcXFwqXFwqXFwnKSwgW10pCiAKKyAgICBkZWYgY2hlY2tfZXNjYXBlKHNlbGYsIGFyZywgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2IuZXNjYXBlKGFyZyksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2IuZXNjYXBlKG9zLmZzZW5jb2RlKGFyZykpLCBvcy5mc2VuY29kZShleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF9lc2NhcGUoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19lc2NhcGUKKyAgICAgICAgY2hlY2soJ2FiYycsICdhYmMnKQorICAgICAgICBjaGVjaygnWycsICdbW10nKQorICAgICAgICBjaGVjaygnPycsICdbP10nKQorICAgICAgICBjaGVjaygnKicsICdbKl0nKQorICAgICAgICBjaGVjaygnW1tfLyo/Ki9fXV0nLCAnW1tdW1tdXy9bKl1bP11bKl0vX11dJykKKyAgICAgICAgY2hlY2soJy9bW18vKj8qL19dXS8nLCAnL1tbXVtbXV8vWypdWz9dWypdL19dXS8nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0IikKKyAgICBkZWYgdGVzdF9lc2NhcGVfd2luZG93cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX2VzY2FwZQorICAgICAgICBjaGVjaygnPzo/JywgJz86Wz9dJykKKyAgICAgICAgY2hlY2soJyo6KicsICcqOlsqXScpCisgICAgICAgIGNoZWNrKHInXFw/XGM6XD8nLCByJ1xcP1xjOlxbP10nKQorICAgICAgICBjaGVjayhyJ1xcKlwqXConLCByJ1xcKlwqXFsqXScpCisgICAgICAgIGNoZWNrKCcvLz8vYzovPycsICcvLz8vYzovWz9dJykKKyAgICAgICAgY2hlY2soJy8vKi8qLyonLCAnLy8qLyovWypdJykKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChHbG9iVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA1ZWFjOTIxLi5hZWFmYzY1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKQEAgLTEzMSw2ICsxMzEsMTQgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgenR4dDogYnJlYWsKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgYidhJyoyMDEpCiAKKyAgICBkZWYgdGVzdF9leGNsdXNpdmVfd3JpdGUoc2VsZik6CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneGInKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMSAqIDUwKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGExICogNTApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3hiJykKKwogICAgIGRlZiB0ZXN0X2J1ZmZlcmVkX3JlYWRlcihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzQ3MTogYSBHemlwRmlsZSBjYW4gYmUgd3JhcHBlZCBpbiBhIEJ1ZmZlcmVkUmVhZGVyIGZvcgogICAgICAgICAjIHBlcmZvcm1hbmNlLgpAQCAtMjA2LDYgKzIxNCw5IEBACiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICdyYicpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneCcpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICd4YicpCiAKICAgICBkZWYgdGVzdF8xNjQ3NDg0KHNlbGYpOgogICAgICAgICBmb3IgbW9kZSBpbiAoJ3diJywgJ3JiJyk6CkBAIC0zODksNiArNDAwLDIwIEBACiAgICAgICAgICAgICBkYXRhYyA9IGd6aXAuY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3ppcC5kZWNvbXByZXNzKGRhdGFjKSwgZGF0YSkKIAorICAgIGRlZiB0ZXN0X3JlYWRfdHJ1bmNhdGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gZGF0YTEqNTAKKyAgICAgICAgIyBEcm9wIHRoZSBDUkMgKDQgYnl0ZXMpIGFuZCBmaWxlIHNpemUgKDQgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBnemlwLmNvbXByZXNzKGRhdGEpWzotOF0KKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSAxMC1ieXRlIGhlYWRlci4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwgMTApOgorICAgICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyh0cnVuY2F0ZWRbOmldKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorCiAgICAgZGVmIHRlc3RfcmVhZF93aXRoX2V4dHJhKHNlbGYpOgogICAgICAgICAjIEd6aXAgZGF0YSB3aXRoIGFuIGV4dHJhIGZpZWxkCiAgICAgICAgIGd6ZGF0YSA9IChiJ1x4MWZceDhiXHgwOFx4MDRceGIyXHgxN2NRXHgwMlx4ZmYnCkBAIC00MDAsMzUgKzQyNSw1OSBAQAogY2xhc3MgVGVzdE9wZW4oQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0X2JpbmFyeV9tb2RlcyhzZWxmKToKICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEgKiA1MAorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQgKiAyKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieGIiKQorICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieGIiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCkKKwogICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2JpbmFyeV9tb2RlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGltcGxpY2l0IGJpbmFyeSBtb2RlcyAobm8gImIiIG9yICJ0IiBpbiBtb2RlIHN0cmluZykuCiAgICAgICAgIHVuY29tcHJlc3NlZCA9IGRhdGExICogNTAKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkICogMikKIAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIngiKQorICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieCIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgZGVmIHRlc3RfdGV4dF9tb2RlcyhzZWxmKToKICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEuZGVjb2RlKCJhc2NpaSIpICogNTAKICAgICAgICAgdW5jb21wcmVzc2VkX3JhdyA9IHVuY29tcHJlc3NlZC5yZXBsYWNlKCJcbiIsIG9zLmxpbmVzZXApCkBAIC00NjMsNiArNTEyLDggQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAid2J0IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieGJ0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weSBiL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQppbmRleCBlM2FiNmU0Li5mNjY1N2JkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hhc2gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CkBAIC0xMiw2ICsxMiw0MCBAQAogCiBJU182NEJJVCA9IHN5cy5tYXhzaXplID4gMioqMzIKIAorZGVmIGxjZyh4LCBsZW5ndGg9MTYpOgorICAgICIiIkxpbmVhciBjb25ncnVlbnRpYWwgZ2VuZXJhdG9yIiIiCisgICAgaWYgeCA9PSAwOgorICAgICAgICByZXR1cm4gYnl0ZXMobGVuZ3RoKQorICAgIG91dCA9IGJ5dGVhcnJheShsZW5ndGgpCisgICAgZm9yIGkgaW4gcmFuZ2UobGVuZ3RoKToKKyAgICAgICAgeCA9ICgyMTQwMTMgKiB4ICsgMjUzMTAxMSkgJiAweDdmZmZmZmZmCisgICAgICAgIG91dFtpXSA9ICh4ID4+IDE2KSAmIDB4ZmYKKyAgICByZXR1cm4gYnl0ZXMob3V0KQorCitkZWYgcHlzaXBoYXNoKHVpbnQ2NCk6CisgICAgIiIiQ29udmVydCBTaXBIYXNoMjQgb3V0cHV0IHRvIFB5X2hhc2hfdAorICAgICIiIgorICAgIGFzc2VydCAwIDw9IHVpbnQ2NCA8ICgxIDw8IDY0KQorICAgICMgc2ltcGxlIHVuc2lnbmVkIHRvIHNpZ25lZCBpbnQ2NAorICAgIGlmIHVpbnQ2NCA+ICgxIDw8IDYzKSAtIDE6CisgICAgICAgIGludDY0ID0gdWludDY0IC0gKDEgPDwgNjQpCisgICAgZWxzZToKKyAgICAgICAgaW50NjQgPSB1aW50NjQKKyAgICAjIG1hbmdsZSB1aW50NjQgdG8gdWludDMyCisgICAgdWludDMyID0gKHVpbnQ2NCBeIHVpbnQ2NCA+PiAzMikgJiAweGZmZmZmZmZmCisgICAgIyBzaW1wbGUgdW5zaWduZWQgdG8gc2lnbmVkIGludDMyCisgICAgaWYgdWludDMyID4gKDEgPDwgMzEpIC0gMToKKyAgICAgICAgaW50MzIgPSB1aW50MzIgLSAoMSA8PCAzMikKKyAgICBlbHNlOgorICAgICAgICBpbnQzMiA9IHVpbnQzMgorICAgIHJldHVybiBpbnQzMiwgaW50NjQKKworZGVmIHNraXBfdW5sZXNzX2ludGVybmFsaGFzaCh0ZXN0KToKKyAgICAiIiJTa2lwIGRlY29yYXRvciBmb3IgdGVzdHMgdGhhdCBkZXBlbmQgb24gU2lwSGFzaDI0IG9yIEZOViIiIgorICAgIG9rID0gc3lzLmhhc2hfaW5mby5hbGdvcml0aG0gaW4geyJmbnYiLCAic2lwaGFzaDI0In0KKyAgICBtc2cgPSAiUmVxdWlyZXMgU2lwSGFzaDI0IG9yIEZOViIKKyAgICByZXR1cm4gdGVzdCBpZiBvayBlbHNlIHVuaXR0ZXN0LnNraXAobXNnKSh0ZXN0KQorCiAKIGNsYXNzIEhhc2hFcXVhbGl0eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTM4LDcgKzE3Miw3IEBACiAgICAgIyBhbiBvYmplY3QgdG8gYmUgdGVzdGVkCiAKICAgICBkZWYgZ2V0X2hhc2hfY29tbWFuZChzZWxmLCByZXByXyk6Ci0gICAgICAgIHJldHVybiAncHJpbnQoaGFzaCglcykpJyAlIHJlcHJfCisgICAgICAgIHJldHVybiAncHJpbnQoaGFzaChldmFsKCVzLmRlY29kZSgidXRmLTgiKSkpKScgJSByZXByXy5lbmNvZGUoInV0Zi04IikKIAogICAgIGRlZiBnZXRfaGFzaChzZWxmLCByZXByXywgc2VlZD1Ob25lKToKICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKQEAgLTE2MSwxMiArMTk1LDYzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocnVuMSwgcnVuMikKIAogY2xhc3MgU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMoSGFzaFJhbmRvbWl6YXRpb25UZXN0cyk6CisgICAgcmVwcl8gPSBOb25lCisgICAgcmVwcl9sb25nID0gTm9uZQorCisgICAgIyAzMmJpdCBsaXR0bGUsIDY0Yml0IGxpdHRsZSwgMzJiaXQgYmlnLCA2NGJpdCBiaWcKKyAgICBrbm93bl9oYXNoZXMgPSB7CisgICAgICAgICdkamJhMzN4JzogWyAjIG9ubHkgdXNlZCBmb3Igc21hbGwgc3RyaW5ncworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbMTkzNDg1OTYwLCAxOTM0ODU5NjAsICAxOTM0ODU5NjAsIDE5MzQ4NTk2MF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbLTY3ODk2NjE5NiwgNTczNzYzNDI2MjYzMjIzMzcyLCAtODIwNDg5Mzg4LCAtNDI4MjkwNTgwNDgyNjAzOTY2NV0sCisgICAgICAgICAgICBdLAorICAgICAgICAnc2lwaGFzaDI0JzogWworICAgICAgICAgICAgIyBOT1RFOiBQeVVDUzIgbGF5b3V0IGRlcGVuZHMgb24gZW5kaWFuZXNzCisgICAgICAgICAgICAjIHNlZWQgMCwgJ2FiYycKKyAgICAgICAgICAgIFsxMTk4NTgzNTE4LCA0NTk2MDY5MjAwNzEwMTM1NTE4LCAxMTk4NTgzNTE4LCA0NTk2MDY5MjAwNzEwMTM1NTE4XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiYycKKyAgICAgICAgICAgIFsyNzM4NzY4ODYsIC00NTAxNjE4MTUyNTI0NTQ0MTA2LCAyNzM4NzY4ODYsIC00NTAxNjE4MTUyNTI0NTQ0MTA2XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiY2RlZmdoaWprJworICAgICAgICAgICAgWy0xNzQ1MjE1MzEzLCA0NDM2NzE5NTg4ODkyODc2OTc1LCAtMTc0NTIxNTMxMywgNDQzNjcxOTU4ODg5Mjg3Njk3NV0sCisgICAgICAgICAgICAjIHNlZWQgMCwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbNDkzNTcwODA2LCA1NzQ5OTg2NDg0MTg5NjEyNzkwLCAtMTAwNjM4MTU2NCwgLTU5MTUxMTE0NTAxOTk0Njg1NDBdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFstMTY3NzExMDgxNiwgLTI5NDc5ODEzNDIyMjc3MzgxNDQsIC0xODYwMjA3NzkzLCAtNDI5NjY5OTIxNzY1MjUxNjAxN10sCisgICAgICAgIF0sCisgICAgICAgICdmbnYnOiBbCisgICAgICAgICAgICAjIHNlZWQgMCwgJ2FiYycKKyAgICAgICAgICAgIFstMTYwMDkyNTUzMywgMTQ1MzA3OTcyOTE4ODA5ODIxMSwgLTE2MDA5MjU1MzMsCisgICAgICAgICAgICAgMTQ1MzA3OTcyOTE4ODA5ODIxMV0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbLTIwNjA3Njc5OSwgLTQ0MTA5MTE1MDIzMDM4Nzg1MDksIC0xMDI0MDE0NDU3LAorICAgICAgICAgICAgIC0zNTcwMTUwOTY5NDc5OTk0MTMwXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiY2RlZmdoaWprJworICAgICAgICAgICAgWzgxMTEzNjc1MSwgLTUwNDYyMzAwNDkzNzYxMTg3NDYsIC03NzIwODA1MyAsCisgICAgICAgICAgICAgLTQ3NzkwMjk2MTUyODEwMTk2NjZdLAorICAgICAgICAgICAgIyBzZWVkIDAsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWzQ0NDAyODE3LCA4OTk4Mjk3NTc5ODQ1OTg3NDMxLCAtMTk1NjI0MDMzMSwKKyAgICAgICAgICAgICAtNzgyNjk3ODg4NjE0MDQ3ODg3XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbLTI4MzA2NjM2NSwgLTQ1NzY3Mjk4ODM4MjQ2MDE1NDMsIC0yNzE4NzE0MDcsIE5vbmVdLAorICAgICAgICBdCisgICAgfQorCisgICAgZGVmIGdldF9leHBlY3RlZF9oYXNoKHNlbGYsIHBvc2l0aW9uLCBsZW5ndGgpOgorICAgICAgICBpZiBsZW5ndGggPCBzeXMuaGFzaF9pbmZvLmN1dG9mZjoKKyAgICAgICAgICAgIGFsZ29yaXRobSA9ICJkamJhMzN4IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWxnb3JpdGhtID0gc3lzLmhhc2hfaW5mby5hbGdvcml0aG0KKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgICAgIHBsYXRmb3JtID0gMSBpZiBJU182NEJJVCBlbHNlIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydChzeXMuYnl0ZW9yZGVyID09ICdiaWcnKQorICAgICAgICAgICAgcGxhdGZvcm0gPSAzIGlmIElTXzY0QklUIGVsc2UgMgorICAgICAgICByZXR1cm4gc2VsZi5rbm93bl9oYXNoZXNbYWxnb3JpdGhtXVtwb3NpdGlvbl1bcGxhdGZvcm1dCisKICAgICBkZWYgdGVzdF9udWxsX2hhc2goc2VsZik6CiAgICAgICAgICMgUFlUSE9OSEFTSFNFRUQ9MCBkaXNhYmxlcyB0aGUgcmFuZG9taXplZCBoYXNoCi0gICAgICAgIGlmIElTXzY0QklUOgotICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAxNDUzMDc5NzI5MTg4MDk4MjExCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IC0xNjAwOTI1NTMzCisgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgwLCAzKQogCiAgICAgICAgICMgUmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQ6CiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfKSwga25vd25faGFzaF9vZl9vYmopCkBAIC0xNzQsMzkgKzI1OSw1MyBAQAogICAgICAgICAjIEl0IGNhbiBhbHNvIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIHNlZWQgdG8gMDoKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl8sIHNlZWQ9MCksIGtub3duX2hhc2hfb2Zfb2JqKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2ZpeGVkX2hhc2goc2VsZik6CiAgICAgICAgICMgdGVzdCBhIGZpeGVkIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGhhc2gKICAgICAgICAgIyBOb3RlIHRoYXQgYWxsIHR5cGVzIHNoYXJlIHRoZSBzYW1lIHZhbHVlczoKLSAgICAgICAgaWYgSVNfNjRCSVQ6Ci0gICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgotICAgICAgICAgICAgICAgIGggPSAtNDQxMDkxMTUwMjMwMzg3ODUwOQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBoID0gLTM1NzAxNTA5Njk0Nzk5OTQxMzAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6Ci0gICAgICAgICAgICAgICAgaCA9IC0yMDYwNzY3OTkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaCA9IC0xMDI0MDE0NDU3CisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDEsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTQyKSwgaCkKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKKyAgICBkZWYgdGVzdF9sb25nX2ZpeGVkX2hhc2goc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVwcl9sb25nIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMiwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfbG9uZywgc2VlZD00MiksIGgpCisKKwogY2xhc3MgU3RySGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gcmVwcignYWJjJykKKyAgICByZXByX2xvbmcgPSByZXByKCdhYmNkZWZnaGlqaycpCisgICAgcmVwcl91Y3MyID0gcmVwcignw6TDuuKIkeKEhycpCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goIiIpLCAwKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAorICAgIGRlZiB0ZXN0X3VjczJfc3RyaW5nKHNlbGYpOgorICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgzLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX3VjczIsIHNlZWQ9MCksIGgpCisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDQsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfdWNzMiwgc2VlZD00MiksIGgpCisKIGNsYXNzIEJ5dGVzSGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcmVwcl8gPSByZXByKGInYWJjJykKKyAgICByZXByX2xvbmcgPSByZXByKGInYWJjZGVmZ2hpamsnKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGIiIiksIDApCiAKIGNsYXNzIE1lbW9yeXZpZXdIYXNoUmFuZG9taXphdGlvblRlc3RzKFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gIm1lbW9yeXZpZXcoYidhYmMnKSIKKyAgICByZXByX2xvbmcgPSAibWVtb3J5dmlldyhiJ2FiY2RlZmdoaWprJykiCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gobWVtb3J5dmlldyhiIiIpKSwgMCkKIApAQCAtMjI0LDUgKzMyMywyMiBAQAogICAgIHJlcHJfID0gcmVwcihkYXRldGltZS50aW1lKDApKQogCiAKK2NsYXNzIEhhc2hEaXN0cmlidXRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYXNoX2Rpc3RyaWJ1dGlvbihzZWxmKToKKyAgICAgICAgIyBjaGVjayBmb3IgaGFzaCBjb2xsaXNpb24KKyAgICAgICAgYmFzZSA9ICJhYmNkZWZnaGFiY2RlZmciCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihiYXNlKSk6CisgICAgICAgICAgICBwcmVmaXggPSBiYXNlWzppXQorICAgICAgICAgICAgczE1ID0gc2V0KCkKKyAgICAgICAgICAgIHMyNTUgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGMgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgICAgICBoID0gaGFzaChwcmVmaXggKyBjaHIoYykpCisgICAgICAgICAgICAgICAgczE1LmFkZChoICYgMHhmKQorICAgICAgICAgICAgICAgIHMyNTUuYWRkKGggJiAweGZmKQorICAgICAgICAgICAgIyBTaXBIYXNoMjQgZGlzdHJpYnV0aW9uIGRlcGVuZHMgb24ga2V5LCB1c3VhbGx5ID4gNjAlCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHMxNSksIDgsIHByZWZpeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczI1NSksIDEyOCwgcHJlZml4KQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CmluZGV4IGYzMzg1ZjYuLjRhNWVhN2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTE4LDExICsxOCwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiAjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPwogQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKIAorY19oYXNobGliID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGFzaGxpYicsIGZyZXNoPVsnX2hhc2hsaWInXSkKK3B5X2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgYmxvY2tlZD1bJ19oYXNobGliJ10pCiAKIGRlZiBoZXhzdHIocyk6CiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgYnl0ZXMpLCByZXByKHMpCkBAIC0zNiw3ICszOCwxMCBAQAogY2xhc3MgSGFzaExpYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzdXBwb3J0ZWRfaGFzaF9uYW1lcyA9ICggJ21kNScsICdNRDUnLCAnc2hhMScsICdTSEExJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTIyNCcsICdTSEEyMjQnLCAnc2hhMjU2JywgJ1NIQTI1NicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzODQnLCAnU0hBMzg0JywgJ3NoYTUxMicsICdTSEE1MTInICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzXzIyNCcsICdzaGEzXzI1NicsICdzaGEzXzM4NCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzXzUxMicsICdTSEEzXzIyNCcsICdTSEEzXzI1NicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTSEEzXzM4NCcsICdTSEEzXzUxMicgKQogCiAgICAgIyBJc3N1ZSAjMTQ2OTM6IGZhbGxiYWNrIG1vZHVsZXMgYXJlIGFsd2F5cyBjb21waWxlZCB1bmRlciBQT1NJWAogICAgIF93YXJuX29uX2V4dGVuc2lvbl9pbXBvcnQgPSBvcy5uYW1lID09ICdwb3NpeCcgb3IgQ09NUElMRURfV0lUSF9QWURFQlVHCkBAIC03MiwyNyArNzcsMzcgQEAKICAgICAgICAgaWYgX2hhc2hsaWI6CiAgICAgICAgICAgICAjIFRoZXNlIHR3byBhbGdvcml0aG1zIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCB3aGVuIHRoaXMgbW9kdWxlCiAgICAgICAgICAgICAjIGlzIGNvbXBpbGVkLiAgSWYgbm90LCBzb21ldGhpbmcgd2FzIGNvbXBpbGVkIHdyb25nLgotICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpCi0gICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpKQogICAgICAgICAgICAgZm9yIGFsZ29yaXRobSwgY29uc3RydWN0b3JzIGluIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QuaXRlbXMoKToKICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoX2hhc2hsaWIsICdvcGVuc3NsXycrYWxnb3JpdGhtLCBOb25lKQogICAgICAgICAgICAgICAgIGlmIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnMuYWRkKGNvbnN0cnVjdG9yKQogCisgICAgICAgIGRlZiBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0YXR0cihoYXNobGliLCAiX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciIpKG5hbWUpCisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdLmFkZChjb25zdHJ1Y3RvcikKKwogICAgICAgICBfbWQ1ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX21kNScpCiAgICAgICAgIGlmIF9tZDU6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydtZDUnXS5hZGQoX21kNS5tZDUpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKICAgICAgICAgX3NoYTEgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhMScpCiAgICAgICAgIGlmIF9zaGExOgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMSddLmFkZChfc2hhMS5zaGExKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTEnKQogICAgICAgICBfc2hhMjU2ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTI1NicpCiAgICAgICAgIGlmIF9zaGEyNTY6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyMjQnXS5hZGQoX3NoYTI1Ni5zaGEyMjQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyNTYnXS5hZGQoX3NoYTI1Ni5zaGEyNTYpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjI0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEyNTYnKQogICAgICAgICBfc2hhNTEyID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTUxMicpCiAgICAgICAgIGlmIF9zaGE1MTI6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEzODQnXS5hZGQoX3NoYTUxMi5zaGEzODQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGE1MTInXS5hZGQoX3NoYTUxMi5zaGE1MTIpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMzg0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGE1MTInKQorICAgICAgICBfc2hhMyA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEzJykKKyAgICAgICAgaWYgX3NoYTM6CisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhM18yMjQnKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTNfMjU2JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEzXzM4NCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhM181MTInKQogCiAgICAgICAgIHN1cGVyKEhhc2hMaWJUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xMjEsOCArMTM2LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaGxpYi5uZXcsIDEpCiAKICAgICBkZWYgdGVzdF9nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBoYXNobGliLl9fZGljdF9fWwotICAgICAgICAgICAgICAgICdfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yJ10KKyAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcicpCisgICAgICAgIGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgJ3Rlc3QnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgX21kNQpAQCAtMTMwLDYgKzE0Nyw4IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgVGhpcyBmb3JjZXMgYW4gSW1wb3J0RXJyb3IgZm9yICJpbXBvcnQgX21kNSIgc3RhdGVtZW50cwogICAgICAgICBzeXMubW9kdWxlc1snX21kNSddID0gTm9uZQorICAgICAgICAjIGNsZWFyIHRoZSBjYWNoZQorICAgICAgICBidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlLmNsZWFyKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsICdtZDUnKQogICAgICAgICBmaW5hbGx5OgpAQCAtMTM4LDEzICsxNTcsMjMgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfbWQ1J10KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgMykKKyAgICAgICAgY29uc3RydWN0b3IgPSBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25zdHJ1Y3RvciwgX21kNS5tZDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUpLCBbJ01ENScsICdtZDUnXSkKIAogICAgIGRlZiB0ZXN0X2hleGRpZ2VzdChzZWxmKToKICAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKICAgICAgICAgICAgIGggPSBjb25zKCkKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKSwgbmFtZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXhzdHIoaC5kaWdlc3QoKSksIGguaGV4ZGlnZXN0KCkpCiAKKyAgICBkZWYgdGVzdF9uYW1lX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIGggPSBjb25zKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLm5hbWUsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaC5uYW1lLCBzZWxmLnN1cHBvcnRlZF9oYXNoX25hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhhc2hsaWIubmV3KGgubmFtZSkubmFtZSkKKwogICAgIGRlZiB0ZXN0X2xhcmdlX3VwZGF0ZShzZWxmKToKICAgICAgICAgYWFzID0gYidhJyAqIDEyOAogICAgICAgICBiZWVzID0gYidiJyAqIDEyNwpAQCAtMjA1LDYgKzIzNCwxMCBAQAogICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTI1NicpCiAgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhMzg0JykKICAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGE1MTInKQorICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTNfMjI0JykKKyAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGEzXzI1NicpCisgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhM18zODQnKQorICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTNfNTEyJykKIAogICAgIGRlZiBjaGVja19ibG9ja3NpemVfbmFtZShzZWxmLCBuYW1lLCBibG9ja19zaXplPTAsIGRpZ2VzdF9zaXplPTApOgogICAgICAgICBjb25zdHJ1Y3RvcnMgPSBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdCkBAIC0yMTMsOCArMjQ2LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ibG9ja19zaXplLCBibG9ja19zaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmRpZ2VzdF9zaXplLCBkaWdlc3Rfc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZGlnZXN0KCkpLCBkaWdlc3Rfc2l6ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5uYW1lLmxvd2VyKCksIG5hbWUubG93ZXIoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZS5zcGxpdCgiXyIpWzBdLCByZXByKG0pLmxvd2VyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICMgc3BsaXQgZm9yIHNoYTNfNTEyIC8gX3NoYTMuc2hhMyBvYmplY3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZS5zcGxpdCgiXyIpWzBdLCByZXByKG0pKQogCiAgICAgZGVmIHRlc3RfYmxvY2tzaXplX25hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ21kNScsIDY0LCAxNikKQEAgLTIyMyw2ICsyNTcsMTAgQEAKICAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnc2hhMjU2JywgNjQsIDMyKQogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzODQnLCAxMjgsIDQ4KQogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGE1MTInLCAxMjgsIDY0KQorICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzXzIyNCcsIE5vdEltcGxlbWVudGVkLCAyOCkKKyAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnc2hhM18yNTYnLCBOb3RJbXBsZW1lbnRlZCwgMzIpCisgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ3NoYTNfMzg0JywgTm90SW1wbGVtZW50ZWQsIDQ4KQorICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzXzUxMicsIE5vdEltcGxlbWVudGVkLCA2NCkKIAogICAgIGRlZiB0ZXN0X2Nhc2VfbWQ1XzAoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ21kNScsIGInJywgJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlJykKQEAgLTM1OCw2ICszOTYsMTA4IEBACiAgICAgICAgICAgImU3MTg0ODNkMGNlNzY5NjQ0ZTJlNDJjN2JjMTViNDYzOGUxZjk4YjEzYjIwNDQyODU2MzJhODAzYWZhOTczZWIiKwogICAgICAgICAgICJkZTBmZjI0NDg3N2VhNjBhNGNiMDQzMmNlNTc3YzMxYmViMDA5YzVjMmM0OWFhMmU0ZWFkYjIxN2FkOGNjMDliIikKIAorICAgICMgU0hBLTMgZmFtaWx5CisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGIiIiwKKyAgICAgICAgICAiRjcxODM3NTAyQkE4RTEwODM3QkREOEQzNjVBREI4NTU5MTg5NTYwMkZDNTUyQjQ4QjczOTBBQkQiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIkE5Q0FCNTlFQjQwQTEwQjI0NjI5MEYyRDYwODZFMzJFMzY4OUZBRjFEMjZCNDcwQzg5OUYyODAyIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yMjRfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBieXRlcy5mcm9taGV4KCI0MUZCIiksCisgICAgICAgICAgIjYxNUJBMzY3QUZEQzM1QUFDMzk3QkM3RUI1RDU4RDEwNkE3MzRCMjQ5ODZENUQ5NzhGRUZENjJDIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yMjRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIjYyQjEwRjFCNjIzNkVCQzJEQTcyOTU3NzQyQThENEU0OEUyMTNCNUY4OTM0NjA0QkZENEQyQzNBIikKKworICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHICsgNSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF9odWdlKHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzaXplID09IF80RyArIDU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBiJ0EnKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnNThlZjYwMDU3YzlkZGRiNmE4NzQ3N2U5YWNlNWEyNmYwZDlkYjAxODgxY2Y5YjEwYTlmOGMyMjQnKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAjIDMyLWJpdCBhcmNoCisKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yNTZfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yNTYnLCBiIiIsCisgICAgICAgICAgIkM1RDI0NjAxODZGNzIzM0M5MjdFN0RCMkRDQzcwM0MwRTUwMEI2NTNDQTgyMjczQjdCRkFEODA0NUQ4NUE0NzAiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzI1Nl8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzI1NicsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIkVFQUQ2REJGQzczNDBBNTZDQUVEQzA0NDY5NkExNjg4NzA1NDlBNkE3RjZGNTY5NjFFODRBNTRCRDk5NzBCOEEiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzI1Nl8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzI1NicsIGJ5dGVzLmZyb21oZXgoIjQxRkIiKSwKKyAgICAgICAgICAiQThFQUNFREE0RDQ3QjMyODFBNzk1QUQ5RTFFQTIxMjJCNDA3QkFGOUFBQkNCOUUxOEI1NzE3Qjc4NzM1MzdEMiIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjU2XzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjU2JywgYnl0ZXMuZnJvbWhleCgKKyAgICAgICAgICAgICI0MzNDNTMwMzEzMTYyNEMwMDIxRDg2OEEzMDgyNTQ3NUU4RDBCRDMwNTJBMDIyMTgwMzk4RjRDQTQ0MjNCOSIrCisgICAgICAgICAgICAiODIxNEI2QkVBQUMyMUM4ODA3QTJDMzNGOEM5M0JENDJCMDkyQ0MxQjA2Q0VERjMyMjRENUVEMUVDMjk3ODQiKworICAgICAgICAgICAgIjQ0NEYyMkUwOEE1NUFBNTg1NDJCNTI0QjAyQ0QzRDVENUY2OTA3QUZFNzFDNUQ3NDYyMjI0QTNGOUQ5RTUzIisKKyAgICAgICAgICAgICJFN0UwODQ2RENCQjRDRSIpLAorICAgICAgICAgICJDRTg3QTUxNzNCRkZEOTIzOTkyMjE2NThGODAxRDQ1QzI5NEQ5MDA2RUU5RjNGOUQ0MTlDOEQ0Mjc3NDhEQzQxIikKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGIiIiwKKyAgICAgICAgICAiMkMyMzE0NkE2M0EyOUFDRjk5RTczQjg4RjhDMjRFQUE3REM2MEFBNzcxNzgwQ0NDMDA2QUZCRkE4RkUyNDc5QiIrCisgICAgICAgICAgIjJERDJCMjEzNjIzMzc0NDFBQzEyQjUxNTkxMTk1N0ZGIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18zODRfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18zODQnLCBieXRlcy5mcm9taGV4KCJDQyIpLAorICAgICAgICAgICIxQjg0RTYyQTQ2RTVBMjAxODYxNzU0QUY1REM5NUM0QTFBNjlDQUY0QTc5NkFFNDA1NjgwMTYxRTI5NTcyNjQxIisKKyAgICAgICAgICAiRjVGQTFFODY0MUQ3OTU4MzM2RUU3QjExQzU4RjczRTkiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGJ5dGVzLmZyb21oZXgoIjQxRkIiKSwKKyAgICAgICAgICAiNDk1Q0NFMjcxNENENzJDOEM1M0MzMzYzRDIyQzU4QjU1OTYwRkUyNkJFMEJGM0JCQzdBMzMxNkRENTYzQUQxRCIrCisgICAgICAgICAgIkI4NDEwRTc1RUVGRUE2NTVFMzlENDY3MEVDMEIxNzkyIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18zODRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18zODQnLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIjEzNTExNDUwOERENjNFMjc5RTcwOUMyNkY3ODE3QzA0ODI3NjZDREU0OTEzMkUzRURGMkVFREQ4OTk2RjRFMzUiKworICAgICAgICAgICI5NkQxODQxMDBCMzg0ODY4MjQ5RjFEOEI4RkRBQTJDOSIpCisKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBiIiIsCisgICAgICAgICAgIjBFQUI0MkRFNEMzQ0VCOTIzNUZDOTFBQ0ZGRTc0NkIyOUMyOUE4QzM2NkI3QzYwRTRFNjdDNDY2RjM2QTQzMDQiKworICAgICAgICAgICJDMDBGQTlDQUY5RDg3OTc2QkE0NjlCQ0JFMDY3MTNCNDM1RjA5MUVGMjc2OUZCMTYwQ0RBQjMzRDM2NzA2ODBFIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBieXRlcy5mcm9taGV4KCJDQyIpLAorICAgICAgICAgICI4NjMwQzEzQ0JEMDY2RUE3NEJCRTdGRTQ2OEZFQzFERUUxMEVEQzEyNTRGQjRDMUI3QzVGRDY5QjY0NkU0NDE2IisKKyAgICAgICAgICAiMEI4Q0UwMUQwNUEwOTA4Q0E3OTBERkIwODBGNEI1MTNCQzNCNjIyNUVDRTdBODEwMzcxNDQxQTVBQzY2NkVCOSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfNTEyXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfNTEyJywgYnl0ZXMuZnJvbWhleCgiNDFGQiIpLAorICAgICAgICAgICI1NTFEQTYyMzZGOEI5NkZDRTlGOTdGMTE5MEU5MDEzMjRGMEI0NUUwNkRCQkI1Q0RCODM1NUQ2RUQxREMzNEIzIisKKyAgICAgICAgICAiRjBFQUU3RENCNjg2MjJGRjIzMkZBM0NFQ0UwRDQ2MTZDREVCMzkzMUY5MzgwMzY2MkEyOERGMUNENTM1QjczMSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfNTEyXzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfNTEyJywgYnl0ZXMuZnJvbWhleCgKKyAgICAgICAgICAgICI0MzNDNTMwMzEzMTYyNEMwMDIxRDg2OEEzMDgyNTQ3NUU4RDBCRDMwNTJBMDIyMTgwMzk4RjRDQTQ0MjNCOSIrCisgICAgICAgICAgICAiODIxNEI2QkVBQUMyMUM4ODA3QTJDMzNGOEM5M0JENDJCMDkyQ0MxQjA2Q0VERjMyMjRENUVEMUVDMjk3ODQiKworICAgICAgICAgICAgIjQ0NEYyMkUwOEE1NUFBNTg1NDJCNTI0QjAyQ0QzRDVENUY2OTA3QUZFNzFDNUQ3NDYyMjI0QTNGOUQ5RTUzIisKKyAgICAgICAgICAgICJFN0UwODQ2RENCQjRDRSIpLAorICAgICAgICAgICI1MjdEMjhFMzQxRTZCMTRGNDY4NEFEQjRCODI0QzQ5NkM2NDgyRTUxMTQ5NTY1RDNEMTcyMjY4Mjg4ODQzMDZCIisKKyAgICAgICAgICAiNTFENjE0OEE3MjYyMkMyQjc1RjVEMzUxMEI3OTlEOEJEQzAzRUFFREU0NTM2NzZBNkVDOEZFMDNBMUFEMEVBQiIpCisKKwogICAgIGRlZiB0ZXN0X2dpbChzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGluZ3Mgd29yayBmaW5lIHdpdGggYW4gaW5wdXQgbGFyZ2VyIHRoYW4gdGhlIHNpemUgcmVxdWlyZWQKICAgICAgICAgIyBmb3IgbXVsdGl0aHJlYWRlZCBvcGVyYXRpb24gKHdoaWNoIGlzIGhhcmR3aXJlZCB0byAyMDQ4KS4KQEAgLTQwNiw4ICs1NDYsOCBAQAogICAgICAgICBldmVudHMgPSBbXQogICAgICAgICBmb3IgdGhyZWFkbnVtIGluIHJhbmdlKG51bV90aHJlYWRzKToKICAgICAgICAgICAgIGNodW5rX3NpemUgPSBsZW4oZGF0YSkgLy8gKDEwKip0aHJlYWRudW0pCi0gICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSA+IDAKLSAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplICUgbGVuKHNtYWxsZXN0X2RhdGEpID09IDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjaHVua19zaXplLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaHVua19zaXplICUgbGVuKHNtYWxsZXN0X2RhdGEpLCAwKQogICAgICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChldmVudCkKICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWhhc2hfaW5fY2h1bmtzLApAQCAtNDE4LDggKzU1OCw5NSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaGFzaCwgaGFzaGVyLmhleGRpZ2VzdCgpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSGFzaExpYlRlc3RDYXNlKQorCitjbGFzcyBLREZUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBwYmtkZjJfdGVzdF92ZWN0b3JzID0gWworICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDEsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDIsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDQwOTYsIE5vbmUpLAorICAgICAgICAjIHRvbyBzbG93LCBpdCB0YWtlcyBvdmVyIGEgbWludXRlIG9uIGEgZmFzdCBDUFUuCisgICAgICAgICMoYidwYXNzd29yZCcsIGInc2FsdCcsIDE2Nzc3MjE2LCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmRQQVNTV09SRHBhc3N3b3JkJywgYidzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0U0FMVHNhbHQnLAorICAgICAgICAgNDA5NiwgLTEpLAorICAgICAgICAoYidwYXNzXDB3b3JkJywgYidzYVwwbHQnLCA0MDk2LCAxNiksCisgICAgXQorCisgICAgcGJrZGYyX3Jlc3VsdHMgPSB7CisgICAgICAgICJzaGExIjogWworICAgICAgICAgICAgIyBvZmZpY2FsIHRlc3QgdmVjdG9ycyBmcm9tIFJGQyA2MDcwCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMGM2MGM4MGY5NjFmMGU3MWYzYTliNTI0YWY2MDEyMDYyZmUwMzdhNicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdlYTZjMDE0ZGM3MmQ2ZjhjY2QxZWQ5MmFjZTFkNDFmMGQ4ZGU4OTU3JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzRiMDA3OTAxYjc2NTQ4OWFiZWFkNDlkOTI2ZjcyMWQwNjVhNDI5YzEnKSwgTm9uZSksCisgICAgICAgICAgICAjKGJ5dGVzLmZyb21oZXgoJ2VlZmUzZDYxY2Q0ZGE0ZTRlOTk0NWIzZDZiYTIxNThjMjYzNGU5ODQnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnM2QyZWVjNGZlNDFjODQ5YjgwYzhkODM2NjJjMGU0NGE4YjI5MWE5NjRjJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2YyZjA3MDM4JyksIDI1KSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc1NmZhNmFhNzU1NDgwOTlkY2MzN2Q3ZjAzNDI1ZTBjMycpLCBOb25lKSxdLAorICAgICAgICAic2hhMjU2IjogWworICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzEyMGZiNmNmZmNmOGIzMmM0M2U3MjI1MjU2YzRmODM3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E4NjU0OGM5MmNjYzM1NDgwODA1OTg3Y2I3MGJlMTdiJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2FlNGQwYzk1YWY2YjQ2ZDMyZDBhZGZmOTI4ZjA2ZGQwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzJhMzAzZjhlZjNjMjUxZGZkNmUyZDg1YTk1NDc0YzQzJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2M1ZTQ3OGQ1OTI4OGM4NDFhYTUzMGRiNjg0NWM0YzhkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk2Mjg5M2EwMDFjZTRlMTFhNDk2Mzg3M2FhOTgxMzRhJyksIE5vbmUpLAorICAgICAgICAgICAgIyhieXRlcy5mcm9taGV4KCdjZjgxYzY2ZmU4Y2ZjMDRkMWYzMWVjYjY1ZGFiNDA4OScKKyAgICAgICAgICAgICMgICAgICAgICAgICAgICAnZjdmMTc5ZTg5YjNiMGJjYjE3YWQxMGUzYWM2ZWJhNDYnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMzQ4Yzg5ZGJjYmQzMmIyZjMyZDgxNGI4MTE2ZTg0Y2YyYjE3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM0N2ViYzE4MDAxODFjNGUyYTFmYjhkZDUzZTFjNjM1NTE4YzdkYWM0N2U5JyksIDQwKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4OWI2OWQwNTE2ZjgyOTg5M2M2OTYyMjY2NTBhODY4NycpLCBOb25lKSxdLAorICAgICAgICAic2hhNTEyIjogWworICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzg2N2Y3MGNmMWFkZTAyY2ZmMzc1MjU5OWEzYTUzZGM0YWYzNGM3YTY2OTgxNWFlNScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkNTEzNTU0ZTFjOGNmMjUyYzAyZDQ3MGEyODVhMDUwMWJhZDk5OWJmZTk0M2MwOGYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDUwMjM1ZDdkNjhiMWRhNTVlNjNmNzNiNjBhNTdmY2UnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZTFkOWMxNmFhNjgxNzA4YTQ1ZjVjN2M0ZTIxNWNlYjY2ZTAxMWEyZTlmMDA0MDcxJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNmMThhZWZkYjg2NmQ1M2NmNzZjYWIyODY4YTM5YjlmNzg0MGVkY2U0ZmVmNWE4MicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZTY3MzM1Yzc3YTYwNjhlMDQxMTI3NTRmMjdjY2Y0ZScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdkMTk3YjFiMzNkYjAxNDNlMDE4YjEyZjNkMWQxNDc5ZTZjZGViZGNjOTdjNWMwZjgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnN2Y2OTAyZTA3MmY0NTdiNTE0M2YzMDYwMjY0MWIzZDU1Y2QzMzU5ODhjYjM2Yjg0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM3NjA2MGVjZDUzMmUwMzliNzQyYTIzOTQzNGFmMmQ1JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzhjMDUxMWY0YzZlNTk3YzZhYzYzMTVkOGYwMzYyZTIyNWYzYzUwMTQ5NWJhMjNiOCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc2OGMwMDUxNzRkYzRlZTcxMTE1YjU5ZjllNjBjZDk1MzJmYTMzZTBmNzVhZWZlMzAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMjI1YzU4M2ExODZjZDgyYmQ0ZGFlYTk3MjRhM2QzYjgnKSwgNjQpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzlkOWU5YzRjZDIxZmU0YmUyNGQ1YjgyNDRjNzU5NjY1JyksIE5vbmUpLF0sCisgICAgfQorCisgICAgZGVmIF90ZXN0X3Bia2RmMl9obWFjKHNlbGYsIHBia2RmMik6CisgICAgICAgIGZvciBkaWdlc3RfbmFtZSwgcmVzdWx0cyBpbiBzZWxmLnBia2RmMl9yZXN1bHRzLml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgaSwgdmVjdG9yIGluIGVudW1lcmF0ZShzZWxmLnBia2RmMl90ZXN0X3ZlY3RvcnMpOgorICAgICAgICAgICAgICAgIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuID0gdmVjdG9yCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG92ZXJ3cml0ZV9ka2xlbiA9IHJlc3VsdHNbaV0KKyAgICAgICAgICAgICAgICBpZiBvdmVyd3JpdGVfZGtsZW46CisgICAgICAgICAgICAgICAgICAgIGRrbGVuID0gb3ZlcndyaXRlX2RrbGVuCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuKSkKKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIG1lbW9yeXZpZXcocGFzc3dvcmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KHNhbHQpLCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgYnl0ZWFycmF5KHBhc3N3b3JkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KHNhbHQpLCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiBka2xlbiBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGJrZGYyLCBiJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCAncGFzcycsICdzYWx0JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd1bnN1cHBvcnRlZCBoYXNoIHR5cGUnKToKKyAgICAgICAgICAgIHBia2RmMigndW5rbm93bicsIGIncGFzcycsIGInc2FsdCcsIDEpCisKKyAgICBkZWYgdGVzdF9wYmtkZjJfaG1hY19weShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYmtkZjJfaG1hYyhweV9oYXNobGliLnBia2RmMl9obWFjKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjX2hhc2hsaWIsICdwYmtkZjJfaG1hYycpLAorICAgICAgICAgICAgICAgICAgICAgJyAgIHRlc3QgcmVxdWlyZXMgT3BlblNTTCA+IDEuMCcpCisgICAgZGVmIHRlc3RfcGJrZGYyX2htYWNfYyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYmtkZjJfaG1hYyhjX2hhc2hsaWIucGJrZGYyX2htYWMpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9obWFjLnB5IGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CmluZGV4IDRjYTdjZWMuLmNkZTU2ZmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2htYWMucHkKQEAgLTEsMTcgKzEsMzkgQEAKK2ltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBobWFjCiBpbXBvcnQgaGFzaGxpYgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCisKK2RlZiBpZ25vcmVfd2FybmluZyhmdW5jKToKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgIHJldHVybiB3cmFwcGVyCisKKwogY2xhc3MgVGVzdFZlY3RvcnNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9tZDVfdmVjdG9ycyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoZSBITUFDIG1vZHVsZSBhZ2FpbnN0IHRlc3QgdmVjdG9ycyBmcm9tIHRoZSBSRkMuCiAKICAgICAgICAgZGVmIG1kNXRlc3Qoa2V5LCBkYXRhLCBkaWdlc3QpOgotICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEpCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hsaWIubWQ1KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLW1kNSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDE2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPSdtZDUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLW1kNSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDE2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCiAKICAgICAgICAgbWQ1dGVzdChiIlx4MGIiICogMTYsCiAgICAgICAgICAgICAgICAgYiJIaSBUaGVyZSIsCkBAIC00Niw2ICs2OCwxNiBAQAogICAgICAgICBkZWYgc2hhdGVzdChrZXksIGRhdGEsIGRpZ2VzdCk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hsaWIuc2hhMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1zaGExIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9J3NoYTEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLXNoYTEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAyMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKwogCiAgICAgICAgIHNoYXRlc3QoYiJceDBiIiAqIDIwLAogICAgICAgICAgICAgICAgIGIiSGkgVGhlcmUiLApAQCAtNzYsMTAgKzEwOCwyMSBAQAogICAgICAgICAgICAgICAgICBiImFuZCBMYXJnZXIgVGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIiksCiAgICAgICAgICAgICAgICAgImU4ZTk5ZDBmNDUyMzdkNzg2ZDZiYmFhNzk2NWM3ODA4YmJmZjFhOTEiKQogCi0gICAgZGVmIF9yZmM0MjMxX3Rlc3RfY2FzZXMoc2VsZiwgaGFzaGZ1bmMpOgorICAgIGRlZiBfcmZjNDIzMV90ZXN0X2Nhc2VzKHNlbGYsIGhhc2hmdW5jLCBoYXNoX25hbWUsIGRpZ2VzdF9zaXplLCBibG9ja19zaXplKToKICAgICAgICAgZGVmIGhtYWN0ZXN0KGtleSwgZGF0YSwgaGV4ZGlnZXN0cyk6CisgICAgICAgICAgICBobWFjX25hbWUgPSAiaG1hYy0iICsgaGFzaF9uYW1lCiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hmdW5jKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLmxvd2VyKCksIGhleGRpZ2VzdHNbaGFzaGZ1bmNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhtYWNfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgZGlnZXN0X3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgYmxvY2tfc2l6ZSkKKworICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNoX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkubG93ZXIoKSwgaGV4ZGlnZXN0c1toYXNoZnVuY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgaG1hY19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCBkaWdlc3Rfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCBibG9ja19zaXplKQorCiAKICAgICAgICAgIyA0LjIuICBUZXN0IENhc2UgMQogICAgICAgICBobWFjdGVzdChrZXkgPSBiJ1x4MGInKjIwLApAQCAtMTg5LDE2ICsyMzIsMTYgQEAKICAgICAgICAgICAgICAgICAgfSkKIAogICAgIGRlZiB0ZXN0X3NoYTIyNF9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyMjQpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTIyNCwgJ3NoYTIyNCcsIDI4LCA2NCkKIAogICAgIGRlZiB0ZXN0X3NoYTI1Nl9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyNTYpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTI1NiwgJ3NoYTI1NicsIDMyLCA2NCkKIAogICAgIGRlZiB0ZXN0X3NoYTM4NF9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEzODQpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTM4NCwgJ3NoYTM4NCcsIDQ4LCAxMjgpCiAKICAgICBkZWYgdGVzdF9zaGE1MTJfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhNTEyKQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGE1MTIsICdzaGE1MTInLCA2NCwgMTI4KQogCiAgICAgZGVmIHRlc3RfbGVnYWN5X2Jsb2NrX3NpemVfd2FybmluZ3Moc2VsZik6CiAgICAgICAgIGNsYXNzIE1vY2tDcmF6eUhhc2gob2JqZWN0KToKQEAgLTIyMiw0NiArMjY1LDc0IEBACiAgICAgICAgICAgICAgICAgaG1hYy5ITUFDKGInYScsIGInYicsIGRpZ2VzdG1vZD1Nb2NrQ3JhenlIYXNoKQogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgd2FybmluZyBhYm91dCBzbWFsbCBibG9ja19zaXplJykKIAorICAgIGRlZiB0ZXN0X3dpdGhfZGlnZXN0bW9kX3dhcm5pbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGtleSA9IGIiXHgwYiIgKiAxNgorICAgICAgICAgICAgZGF0YSA9IGIiSGkgVGhlcmUiCisgICAgICAgICAgICBkaWdlc3QgPSAiOTI5NDcyN0EzNjM4QkIxQzEzRjQ4RUY4MTU4QkZDOUQiCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QpCiAKIAogY2xhc3MgQ29uc3RydWN0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF9ub3JtYWwoc2VsZik6CiAgICAgICAgICMgU3RhbmRhcmQgY29uc3RydWN0b3IgY2FsbC4KICAgICAgICAgZmFpbGVkID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IikKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJTdGFuZGFyZCBjb25zdHJ1Y3RvciBjYWxsIHJhaXNlZCBleGNlcHRpb24uIikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X3dpdGhfc3RyX2tleShzZWxmKToKICAgICAgICAgIyBQYXNzIGEga2V5IG9mIHR5cGUgc3RyLCB3aGljaCBpcyBhbiBlcnJvciwgYmVjYXVzZSBpdCBleHBlY3RzIGEga2V5CiAgICAgICAgICMgb2YgdHlwZSBieXRlcwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKCJrZXkiKQogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3RfZG90X25ld193aXRoX3N0cl9rZXkoc2VsZik6CiAgICAgICAgICMgUGFzcyBhIGtleSBvZiB0eXBlIHN0ciwgd2hpY2ggaXMgYW4gZXJyb3IsIGJlY2F1c2UgaXQgZXhwZWN0cyBhIGtleQogICAgICAgICAjIG9mIHR5cGUgYnl0ZXMKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgaCA9IGhtYWMubmV3KCJrZXkiKQogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3Rfd2l0aHRleHQoc2VsZik6CiAgICAgICAgICMgQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiLCBiImhhc2ggdGhpcyEiKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0IGFyZ3VtZW50IHJhaXNlZCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYnl0ZWFycmF5KGIia2V5IiksIGJ5dGVhcnJheShiImhhc2ggdGhpcyEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0bW9kPSJtZDUiKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggYnl0ZWFycmF5IGFyZ3VtZW50cyByYWlzZWQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKSwgJzM0MzI1YjYzOWRhNGNmZDk1NzM1YjM4MWUyOGNiODY0JykKKworICAgIGRlZiB0ZXN0X3dpdGhfbWVtb3J5dmlld19tc2coc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiLCBtZW1vcnl2aWV3KGIiaGFzaCB0aGlzISIpLCBkaWdlc3Rtb2Q9Im1kNSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBtZW1vcnl2aWV3IG1zZyByYWlzZWQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKSwgJzM0MzI1YjYzOWRhNGNmZDk1NzM1YjM4MWUyOGNiODY0JykKIAogICAgIGRlZiB0ZXN0X3dpdGhtb2R1bGUoc2VsZik6CiAgICAgICAgICMgQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQgYW5kIGRpZ2VzdCBtb2R1bGUuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiLCBiIiIsIGhhc2hsaWIuc2hhMSkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggaGFzaGxpYi5zaGExIHJhaXNlZCBleGNlcHRpb24uIikKIAogY2xhc3MgU2FuaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9pc19tZDUoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiBITUFDIGRlZmF1bHRzIHRvIE1ENSBhbGdvcml0aG0uCiAgICAgICAgICMgTk9URTogdGhpcyB3aGl0ZWJveCB0ZXN0IGRlcGVuZHMgb24gdGhlIGhtYWMgY2xhc3MgaW50ZXJuYWxzCkBAIC0yNzIsMTkgKzM0MywxOSBAQAogICAgICAgICAjIEV4ZXJjaXNpbmcgYWxsIG1ldGhvZHMgb25jZS4KICAgICAgICAgIyBUaGlzIG11c3Qgbm90IHJhaXNlIGFueSBleGNlcHRpb25zCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJteSBzZWNyZXQga2V5IikKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJteSBzZWNyZXQga2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICAgICAgaC51cGRhdGUoYiJjb21wdXRlIHRoZSBoYXNoIG9mIHRoaXMgdGV4dCEiKQogICAgICAgICAgICAgZGlnID0gaC5kaWdlc3QoKQogICAgICAgICAgICAgZGlnID0gaC5oZXhkaWdlc3QoKQogICAgICAgICAgICAgaDIgPSBoLmNvcHkoKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIG5vcm1hbCB1c2FnZSBvZiBITUFDIGNsYXNzLiIpCiAKIGNsYXNzIENvcHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgYXR0cmlidXRlcyBhcmUgb2Ygc2FtZSB0eXBlLgotICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIpCisgICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICBoMiA9IGgxLmNvcHkoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEuZGlnZXN0X2NvbnMgPT0gaDIuZGlnZXN0X2NvbnMsCiAgICAgICAgICAgICAiZGlnZXN0IGNvbnN0cnVjdG9ycyBkb24ndCBtYXRjaC4iKQpAQCAtMjk1LDcgKzM2Niw3IEBACiAKICAgICBkZWYgdGVzdF9yZWFsY29weShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIHRoZSBjb3B5IG1ldGhvZCBjcmVhdGVkIGEgcmVhbCBjb3B5LgotICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIpCisgICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICBoMiA9IGgxLmNvcHkoKQogICAgICAgICAjIFVzaW5nIGlkKCkgaW4gY2FzZSBzb21lYm9keSBoYXMgb3ZlcnJpZGRlbiBfX2VxX18vX19uZV9fLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaWQoaDEpICE9IGlkKGgyKSwgIk5vIHJlYWwgY29weSBvZiB0aGUgSE1BQyBpbnN0YW5jZS4iKQpAQCAtMzA2LDcgKzM3Nyw3IEBACiAKICAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIHRoZSBjb3B5IGhhcyB0aGUgc2FtZSBkaWdlc3RzLgotICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIpCisgICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICBoMS51cGRhdGUoYiJzb21lIHJhbmRvbSB0ZXh0IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMS5kaWdlc3QoKSwgaDIuZGlnZXN0KCksCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0bWwucHkgYi9MaWIvdGVzdC90ZXN0X2h0bWwucHkKaW5kZXggMzBkYWM1OC4uNWU5ZjM4MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1sLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQpAQCAtMTYsOSArMTYsODkgQEAKICAgICAgICAgICAgIGh0bWwuZXNjYXBlKCdcJzxzY3JpcHQ+IiZmb287Ijwvc2NyaXB0PlwnJywgRmFsc2UpLAogICAgICAgICAgICAgJ1wnJmx0O3NjcmlwdCZndDsiJmFtcDtmb287IiZsdDsvc2NyaXB0Jmd0O1wnJykKIAorICAgIGRlZiB0ZXN0X3VuZXNjYXBlKHNlbGYpOgorICAgICAgICBudW1lcmljX2Zvcm1hdHMgPSBbJyYjJWQnLCAnJiMlZDsnLCAnJiN4JXgnLCAnJiN4JXg7J10KKyAgICAgICAgZXJybXNnID0gJ3VuZXNjYXBlKCVyKSBzaG91bGQgaGF2ZSByZXR1cm5lZCAlcicKKyAgICAgICAgZGVmIGNoZWNrKHRleHQsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbC51bmVzY2FwZSh0ZXh0KSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJtc2cgJSAodGV4dCwgZXhwZWN0ZWQpKQorICAgICAgICBkZWYgY2hlY2tfbnVtKG51bSwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgZm9yIGZvcm1hdCBpbiBudW1lcmljX2Zvcm1hdHM6CisgICAgICAgICAgICAgICAgdGV4dCA9IGZvcm1hdCAlIG51bQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbC51bmVzY2FwZSh0ZXh0KSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJybXNnICUgKHRleHQsIGV4cGVjdGVkKSkKKyAgICAgICAgIyBjaGVjayB0ZXh0IHdpdGggbm8gY2hhcmFjdGVyIHJlZmVyZW5jZXMKKyAgICAgICAgY2hlY2soJ25vIGNoYXJhY3RlciByZWZlcmVuY2VzJywgJ25vIGNoYXJhY3RlciByZWZlcmVuY2VzJykKKyAgICAgICAgIyBjaGVjayAmIGZvbGxvd2VkIGJ5IGludmFsaWQgY2hhcnMKKyAgICAgICAgY2hlY2soJyZcbiZcdCYgJiYnLCAnJlxuJlx0JiAmJicpCisgICAgICAgICMgY2hlY2sgJiBmb2xsb3dlZCBieSBudW1iZXJzIGFuZCBsZXR0ZXJzCisgICAgICAgIGNoZWNrKCcmMCAmOSAmYSAmMDsgJjk7ICZhOycsICcmMCAmOSAmYSAmMDsgJjk7ICZhOycpCisgICAgICAgICMgY2hlY2sgaW5jb21wbGV0ZSBlbnRpdGllcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgZm9yIHggaW4gWycmJywgJyYjJywgJyYjeCcsICcmI1gnLCAnJiN5JywgJyYjeHknLCAnJiNYeSddOgorICAgICAgICAgICAgY2hlY2soeCwgeCkKKyAgICAgICAgICAgIGNoZWNrKHgrJzsnLCB4Kyc7JykKKyAgICAgICAgIyBjaGVjayBzZXZlcmFsIGNvbWJpbmF0aW9ucyBvZiBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzLAorICAgICAgICAjIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGRpZmZlcmVudCBjaGFyYWN0ZXJzCisgICAgICAgIGZvcm1hdHMgPSBbJyYjJWQnLCAnJiMlMDdkJywgJyYjJWQ7JywgJyYjJTA3ZDsnLAorICAgICAgICAgICAgICAgICAgICcmI3gleCcsICcmI3glMDZ4JywgJyYjeCV4OycsICcmI3glMDZ4OycsCisgICAgICAgICAgICAgICAgICAgJyYjeCVYJywgJyYjeCUwNlgnLCAnJiNYJXg7JywgJyYjWCUwNng7J10KKyAgICAgICAgZm9yIG51bSwgY2hhciBpbiB6aXAoWzY1LCA5NywgMzQsIDM4LCAweDI2MDMsIDB4MTAxMjM0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydBJywgJ2EnLCAnIicsICcmJywgJ1x1MjYwMycsICdcVTAwMTAxMjM0J10pOgorICAgICAgICAgICAgZm9yIHMgaW4gZm9ybWF0czoKKyAgICAgICAgICAgICAgICBjaGVjayhzICUgbnVtLCBjaGFyKQorICAgICAgICAgICAgICAgIGZvciBlbmQgaW4gWycgJywgJ1gnXToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soKHMrZW5kKSAlIG51bSwgY2hhcitlbmQpCisgICAgICAgICMgY2hlY2sgaW52YWxpZCBjb2RlcG9pbnRzCisgICAgICAgIGZvciBjcCBpbiBbMHhEODAwLCAweERCMDAsIDB4REMwMCwgMHhERkZGLCAweDExMDAwMF06CisgICAgICAgICAgICBjaGVja19udW0oY3AsICdcdUZGRkQnKQorICAgICAgICAjIGNoZWNrIG1vcmUgaW52YWxpZCBjb2RlcG9pbnRzCisgICAgICAgIGZvciBjcCBpbiBbMHgxLCAweGIsIDB4ZSwgMHg3ZiwgMHhmZmZlLCAweGZmZmYsIDB4MTBmZmZlLCAweDEwZmZmZl06CisgICAgICAgICAgICBjaGVja19udW0oY3AsICcnKQorICAgICAgICAjIGNoZWNrIGludmFsaWQgbnVtYmVycworICAgICAgICBmb3IgbnVtLCBjaCBpbiB6aXAoWzB4MGQsIDB4ODAsIDB4OTUsIDB4OWRdLCAnXHJcdTIwYWNcdTIwMjJceDlkJyk6CisgICAgICAgICAgICBjaGVja19udW0obnVtLCBjaCkKKyAgICAgICAgIyBjaGVjayBzbWFsbCBudW1iZXJzCisgICAgICAgIGNoZWNrX251bSgwLCAnXHVGRkZEJykKKyAgICAgICAgY2hlY2tfbnVtKDksICdcdCcpCisgICAgICAgICMgY2hlY2sgYSBiaWcgbnVtYmVyCisgICAgICAgIGNoZWNrX251bSgxMDAwMDAwMDAwMDAwMDAwMDAwLCAnXHVGRkZEJykKKyAgICAgICAgIyBjaGVjayB0aGF0IG11bHRpcGxlIHRyYWlsaW5nIHNlbWljb2xvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5CisgICAgICAgIGZvciBlIGluIFsnJnF1b3Q7OycsICcmIzM0OzsnLCAnJiN4MjI7OycsICcmI1gyMjs7J106CisgICAgICAgICAgICBjaGVjayhlLCAnIjsnKQorICAgICAgICAjIGNoZWNrIHRoYXQgc2VtaWNvbG9ucyBpbiB0aGUgbWlkZGxlIGRvbid0IGNyZWF0ZSBwcm9ibGVtcworICAgICAgICBmb3IgZSBpbiBbJyZxdW90O3F1b3Q7JywgJyYjMzQ7cXVvdDsnLCAnJiN4MjI7cXVvdDsnLCAnJiNYMjI7cXVvdDsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsICcicXVvdDsnKQorICAgICAgICAjIGNoZWNrIHRyaXBsZSBhZGphY2VudCBjaGFycmVmcworICAgICAgICBmb3IgZSBpbiBbJyZxdW90JywgJyYjMzQnLCAnJiN4MjInLCAnJiNYMjInXToKKyAgICAgICAgICAgIGNoZWNrKGUqMywgJyIiIicpCisgICAgICAgICAgICBjaGVjaygoZSsnOycpKjMsICciIiInKQorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGNhc2UgaXMgcmVzcGVjdGVkCisgICAgICAgIGZvciBlIGluIFsnJmFtcCcsICcmYW1wOycsICcmQU1QJywgJyZBTVA7J106CisgICAgICAgICAgICBjaGVjayhlLCAnJicpCisgICAgICAgIGZvciBlIGluIFsnJkFtcCcsICcmQW1wOyddOgorICAgICAgICAgICAgY2hlY2soZSwgZSkKKyAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1leGlzdGVudCBuYW1lZCBlbnRpdGllcyBhcmUgcmV0dXJuZWQgdW5jaGFuZ2VkCisgICAgICAgIGNoZWNrKCcmc3ZhZGlsZmFyaTsnLCAnJnN2YWRpbGZhcmk7JykKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFyZSBpbiB0aGUgaHRtbDUgc3BlY3MKKyAgICAgICAgY2hlY2soJyZub3RpdCcsICfCrGl0JykKKyAgICAgICAgY2hlY2soJyZub3RpdDsnLCAnwqxpdDsnKQorICAgICAgICBjaGVjaygnJm5vdGluJywgJ8KsaW4nKQorICAgICAgICBjaGVjaygnJm5vdGluOycsICfiiIknKQorICAgICAgICAjIGEgc2ltaWxhciBleGFtcGxlIHdpdGggYSBsb25nIG5hbWUKKyAgICAgICAgY2hlY2soJyZub3RSZWFsbHlBbkV4aXN0aW5nTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2U7JywKKyAgICAgICAgICAgICAgJ8KsUmVhbGx5QW5FeGlzdGluZ05hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlOycpCisgICAgICAgICMgbG9uZ2VzdCB2YWxpZCBuYW1lCisgICAgICAgIGNoZWNrKCcmQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsnLCAn4oizJykKKyAgICAgICAgIyBjaGVjayBhIGNoYXJyZWYgdGhhdCBtYXBzIHRvIHR3byB1bmljb2RlIGNoYXJzCisgICAgICAgIGNoZWNrKCcmYWNFOycsICdcdTIyM0VcdTAzMzMnKQorICAgICAgICBjaGVjaygnJmFjRScsICcmYWNFJykKKyAgICAgICAgIyBzZWUgIzEyODg4CisgICAgICAgIGNoZWNrKCcmIzEyMzsgJyAqIDEwNTAsICd7ICcgKiAxMDUwKQorICAgICAgICAjIHNlZSAjMTUxNTYKKyAgICAgICAgY2hlY2soJyZFYWN1dGVyaWMmRWFjdXRlO3JpYyZhbHBoYWNlbnRhdXJpJmFscGhhO2NlbnRhdXJpJywKKyAgICAgICAgICAgICAgJ8OJcmljw4lyaWMmYWxwaGFjZW50YXVyac6xY2VudGF1cmknKQorICAgICAgICBjaGVjaygnJmNvOycsICcmY287JykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChIdG1sVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQppbmRleCBjOTc3YTlkLi4xYTQ4MGM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CkBAIC03MCw2ICs3MCwxOCBAQAogICAgICAgICBzZWxmLmFwcGVuZCgoInN0YXJ0dGFnX3RleHQiLCBzZWxmLmdldF9zdGFydHRhZ190ZXh0KCkpKQogCiAKK2NsYXNzIEV2ZW50Q29sbGVjdG9yQ2hhcnJlZnMoRXZlbnRDb2xsZWN0b3IpOgorCisgICAgZGVmIGdldF9ldmVudHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50cworCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmZhaWwoJ1RoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZScpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5mYWlsKCdUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aCBjb252ZXJ0X2NoYXJyZWZzPVRydWUnKQorCisKIGNsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKQEAgLTg0LDI2ICs5NiwzMCBAQAogICAgICAgICBwYXJzZXIuY2xvc2UoKQogICAgICAgICBldmVudHMgPSBwYXJzZXIuZ2V0X2V2ZW50cygpCiAgICAgICAgIGlmIGV2ZW50cyAhPSBleHBlY3RlZF9ldmVudHM6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50c1xuIgotICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChleHBlY3RlZF9ldmVudHMpICsKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjZWl2ZWQgZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgZXZlbnRzIiArCisgICAgICAgICAgICAgICAgICAgICAgIlxuU291cmNlOlxuIiArIHJlcHIoc291cmNlKSArCisgICAgICAgICAgICAgICAgICAgICAgIlxuRXhwZWN0ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWRfZXZlbnRzKSArCiAgICAgICAgICAgICAgICAgICAgICAgIlxuUmVjZWl2ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXZlbnRzKSkKIAogICAgIGRlZiBfcnVuX2NoZWNrX2V4dHJhKHNlbGYsIHNvdXJjZSwgZXZlbnRzKToKLSAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHNvdXJjZSwgZXZlbnRzLCBFdmVudENvbGxlY3RvckV4dHJhKCkpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhzb3VyY2UsIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yRXh0cmEoY29udmVydF9jaGFycmVmcz1GYWxzZSkpCiAKICAgICBkZWYgX3BhcnNlX2Vycm9yKHNlbGYsIHNvdXJjZSk6CiAgICAgICAgIGRlZiBwYXJzZShzb3VyY2U9c291cmNlKToKICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuZ2V0X2NvbGxlY3RvcigpCiAgICAgICAgICAgICBwYXJzZXIuZmVlZChzb3VyY2UpCiAgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvciwgcGFyc2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgcGFyc2UoKQogCiAKIGNsYXNzIEhUTUxQYXJzZXJTdHJpY3RUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aXRlPUZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fb25seShzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8P3Byb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24+IiwgWwpAQCAtMzMzLDcgKzM0OSw3IEBACiAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2socywgWygic3RhcnR0YWciLCBlbGVtZW50X2xvd2VyLCBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF0YSIsIGNvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImVuZHRhZyIsIGVsZW1lbnRfbG93ZXIpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3I9Q29sbGVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPUNvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKSkKIAogICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgogICAgICAgICBodG1sID0gKCI8IS0tIEknbSBhIHZhbGlkIGNvbW1lbnQgLS0+IgpAQCAtMzYxLDExICszNzcsNjAgQEAKICAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJ1tpZiBsdGUgSUUgN10+cHJldHR5PzwhW2VuZGlmXScpXQogICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKKyAgICBkZWYgdGVzdF9jb252ZXJ0X2NoYXJyZWZzKHNlbGYpOgorICAgICAgICBjb2xsZWN0b3IgPSBsYW1iZGE6IEV2ZW50Q29sbGVjdG9yQ2hhcnJlZnMoY29udmVydF9jaGFycmVmcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdG9yKCkuY29udmVydF9jaGFycmVmcykKKyAgICAgICAgY2hhcnJlZnMgPSBbJyZxdW90OycsICcmIzM0OycsICcmI3gyMjsnLCAnJnF1b3QnLCAnJiMzNCcsICcmI3gyMiddCisgICAgICAgICMgY2hlY2sgY2hhcnJlZnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dC9hdHRyaWJ1dGVzCisgICAgICAgIGV4cGVjdGVkID0gWygnc3RhcnR0YWcnLCAnYScsIFsoJ2hyZWYnLCAnZm9vInphcicpXSksCisgICAgICAgICAgICAgICAgICAgICgnZGF0YScsICdhInonKSwgKCdlbmR0YWcnLCAnYScpXQorICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGEgaHJlZj0iZm9vezB9emFyIj5hezB9ejwvYT4nLmZvcm1hdChjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGF0IHRoZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSB0ZXh0L2F0dHJpYnV0ZXMKKyAgICAgICAgZXhwZWN0ZWQgPSBbKCdkYXRhJywgJyInKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdhJywgWygneCcsICciJyksICgneScsICciWCcpLCAoJ3onLCAnWCInKV0pLAorICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnIicpLCAoJ2VuZHRhZycsICdhJyksICgnZGF0YScsICciJyldCisgICAgICAgIGZvciBjaGFycmVmIGluIGNoYXJyZWZzOgorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCd7MH08YSB4PSJ7MH0iIHk9InswfVgiIHo9Ilh7MH0iPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnezB9PC9hPnswfScuZm9ybWF0KGNoYXJyZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgY2hhcnJlZnMgaW4gPHNjcmlwdD4vPHN0eWxlPiBlbGVtZW50cworICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHRleHQgPSAnWCcuam9pbihbY2hhcnJlZl0qMykKKyAgICAgICAgICAgIGV4cGVjdGVkID0gWygnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ3NjcmlwdCcsIFtdKSwgKCdkYXRhJywgdGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ2VuZHRhZycsICdzY3JpcHQnKSwgKCdkYXRhJywgJyInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnc3R5bGUnLCBbXSksICgnZGF0YScsIHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnc3R5bGUnKSwgKCdkYXRhJywgJyInKV0KKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnezF9PHNjcmlwdD57MH08L3NjcmlwdD57MX0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZT57MH08L3N0eWxlPnsxfScuZm9ybWF0KHRleHQsIGNoYXJyZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgdHJ1bmNhdGVkIGNoYXJyZWZzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgICAgaHRtbCA9ICcmcXVvICYjICYjeCcKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMSwgbGVuKGh0bWwpKToKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sWzp4XSwgWygnZGF0YScsIGh0bWxbOnhdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGEgc3RyaW5nIHdpdGggbm8gY2hhcnJlZnMKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCdubyBjaGFycmVmcyBoZXJlJywgWygnZGF0YScsICdubyBjaGFycmVmcyBoZXJlJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorCiAKIGNsYXNzIEhUTUxQYXJzZXJUb2xlcmFudFRlc3RDYXNlKEhUTUxQYXJzZXJTdHJpY3RUZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGlvbl93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBFdmVudENvbGxlY3RvcigpICAjIGNvbnZlcnRfY2hhcnJlZnMgbm90IHBhc3NlZCBleHBsaWNpdGx5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PUZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKCkuZXJyb3IoJ3Rlc3QnKQogCiAgICAgZGVmIHRlc3RfdG9sZXJhbnRfcGFyc2luZyhzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8aHRtbCA8aHRtbD50ZT4+eHQmYTw8YmM8L2E+PC9odG1sPlxuJwpAQCAtNTU4LDE3ICs2MjMsMTIgQEAKICAgICAgICAgZm9yIGh0bWwsIGV4cGVjdGVkIGluIGRhdGE6CiAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKLSAgICBkZWYgdGVzdF91bmVzY2FwZV9mdW5jdGlvbihzZWxmKToKKyAgICBkZWYgdGVzdF91bmVzY2FwZV9tZXRob2Qoc2VsZik6CisgICAgICAgIGZyb20gaHRtbCBpbXBvcnQgdW5lc2NhcGUKICAgICAgICAgcCA9IHNlbGYuZ2V0X2NvbGxlY3RvcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiNiYWQ7JyksJyYjYmFkOycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiMwMDM4OycpLCcmJykKLSAgICAgICAgIyBzZWUgIzEyODg4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiMxMjM7ICcgKiAxMDUwKSwgJ3sgJyAqIDEwNTApCi0gICAgICAgICMgc2VlICMxNTE1NgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyZFYWN1dGVyaWMmRWFjdXRlO3JpYycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcmYWxwaGFjZW50YXVyaSZhbHBoYTtjZW50YXVyaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ8OJcmljw4lyaWMmYWxwaGFjZW50YXVyac6xY2VudGF1cmknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyZjbzsnKSwgJyZjbzsnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHMgPSAnJnF1b3Q7JiMzNDsmI3gyMjsmcXVvdCYjMzQmI3gyMiYjYmFkOycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZShzKSwgdW5lc2NhcGUocykpCiAKICAgICBkZWYgdGVzdF9icm9rZW5fY29tbWVudHMoc2VsZik6CiAgICAgICAgIGh0bWwgPSAoJzwhIG5vdCByZWFsbHkgYSBjb21tZW50ID4nCkBAIC02MjQsNyArNjg0LDcgQEAKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWl0ZT1GYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUsIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9hdHRyX3N5bnRheChzZWxmKToKICAgICAgICAgb3V0cHV0ID0gWwpAQCAtNjg1LDcgKzc0NSw3IEBACiBjbGFzcyBBdHRyaWJ1dGVzVG9sZXJhbnRUZXN0Q2FzZShBdHRyaWJ1dGVzU3RyaWN0VGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCisgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfYXR0cl9mdW5reV9uYW1lczIoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQppbmRleCBmM2MyN2MyLi4zMWMwYjZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CkBAIC0yNyw4ICsyNywxMCBAQAogICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CiAgICAgICAgIHNlbGYuZmlsZWNsYXNzID0gZmlsZWNsYXNzCiAgICAgICAgIHNlbGYuZGF0YSA9IGInJworICAgICAgICBzZWxmLnNlbmRhbGxfY2FsbHMgPSAwCiAKICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zZW5kYWxsX2NhbGxzICs9IDEKICAgICAgICAgc2VsZi5kYXRhICs9IGRhdGEKIAogICAgIGRlZiBtYWtlZmlsZShzZWxmLCBtb2RlLCBidWZzaXplPU5vbmUpOgpAQCAtNDUsNyArNDcsNyBAQAogCiAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CiAgICAgICAgIGlmIHNlbGYucGlwZV90cmlnZ2VyIGluIGRhdGE6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FUElQRSwgImdvdGNoYSIpCiAgICAgICAgIHNlbGYuZGF0YSArPSBkYXRhCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CkBAIC01OTcsNyArNTk5LDcgQEAKICAgICAgICAgICAgIGIiQ29udGVudC1MZW5ndGgiKQogICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCJleGFtcGxlLmNvbSIpCiAgICAgICAgIGNvbm4uc29jayA9IHNvY2sKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGNvbm4ucmVxdWVzdCgiUFVUIiwgIi91cmwiLCAiYm9keSIpKQogICAgICAgICByZXNwID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDAxLCByZXNwLnN0YXR1cykKQEAgLTY0Myw2ICs2NDUsMjggQEAKICAgICAgICAgcmVzcC5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmNsb3NlZCkKIAorICAgIGRlZiB0ZXN0X2RlbGF5ZWRfYWNrX29wdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgTmFnbGUvZGVsYXllZF9hY2sgb3B0aW1pc3RhaW9uIHdvcmtzIGNvcnJlY3RseS4KKworICAgICAgICAjIEZvciBzbWFsbCBwYXlsb2FkcywgaXQgc2hvdWxkIGNvYWxlc2NlIHRoZSBib2R5IHdpdGgKKyAgICAgICAgIyBoZWFkZXJzLCByZXN1bHRpbmcgaW4gYSBzaW5nbGUgc2VuZGFsbCgpIGNhbGwKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGJvZHkgPSBiJ3gnICogKGNvbm4ubXNzIC0gMSkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suc2VuZGFsbF9jYWxscywgMSkKKworICAgICAgICAjIEZvciBsYXJnZSBwYXlsb2FkcywgaXQgc2hvdWxkIHNlbmQgdGhlIGhlYWRlcnMgYW5kCisgICAgICAgICMgdGhlbiB0aGUgYm9keSwgcmVzdWx0aW5nIGluIG1vcmUgdGhhbiBvbmUgc2VuZGFsbCgpCisgICAgICAgICMgY2FsbAorICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgYm9keSA9IGIneCcgKiBjb25uLm1zcworICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnLycsIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCisKIGNsYXNzIE9mZmxpbmVUZXN0KFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZXNwb25zZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50LnJlc3BvbnNlc1tjbGllbnQuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCkBAIC03MzMsNyArNzU3LDcgQEAKIAogICAgIGRlZiBtYWtlX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZSk6CiAgICAgICAgIGZyb20gdGVzdC5zc2xfc2VydmVycyBpbXBvcnQgbWFrZV9odHRwc19zZXJ2ZXIKLSAgICAgICAgcmV0dXJuIG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlKQorICAgICAgICByZXR1cm4gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGU9Y2VydGZpbGUpCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHNpbXBsZSB0ZXN0IHRvIGNoZWNrIGl0J3Mgc3RvcmluZyB0aGUgdGltZW91dApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKaW5kZXggOWRkMjc3OC4uYjJiY2UxYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CkBAIC05Miw2ICs5MiwxMyBAQAogICAgICAgICBkZWYgZG9fS0VZRVJST1Ioc2VsZik6CiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoOTk5KQogCisgICAgICAgIGRlZiBkb19OT1RGT1VORChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQpCisKKyAgICAgICAgZGVmIGRvX0VYUExBSU5FUlJPUihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig5OTksICJTaG9ydCBNZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIGxvbmcgXG4gZXhwbGFpbmF0aW9uIikKKwogICAgICAgICBkZWYgZG9fQ1VTVE9NKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDk5OSkKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQpAQCAtMjAzLDYgKzIxMCwxMiBAQAogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQogCisgICAgZGVmIHRlc3RfcmV0dXJuX2V4cGxhaW5fZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0VYUExBSU5FUlJPUicsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDk5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChyZXMuZ2V0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSkKKwogICAgIGRlZiB0ZXN0X2xhdGluMV9oZWFkZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0xBVElOT05FSEVBREVSJywgJy8nLCBoZWFkZXJzPXsKICAgICAgICAgICAgICdYLVNwZWNpYWwtSW5jb21pbmcnOiAgICAgICAnw4RyZ2VyIG1pdCBVbmljb2RlJwpAQCAtMjExLDYgKzIyNCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXRoZWFkZXIoJ1gtU3BlY2lhbCcpLCAnRMOkbmdlcm91cyBNaW5kJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMucmVhZCgpLCAnw4RyZ2VyIG1pdCBVbmljb2RlJy5lbmNvZGUoJ3V0Zi04JykpCiAKKyAgICBkZWYgdGVzdF9lcnJvcl9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTYwODg6IHN0YW5kYXJkIGVycm9yIHJlc3BvbnNlcyBzaG91bGQgaGF2ZSBhIGNvbnRlbnQtbGVuZ3RoCisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ05PVEZPVU5EJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDA0KQorICAgICAgICBkYXRhID0gcmVzLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChyZXMuZ2V0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSwgbGVuKGRhdGEpKQorCiAKIGNsYXNzIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogICAgIGNsYXNzIHJlcXVlc3RfaGFuZGxlcihOb0xvZ1JlcXVlc3RIYW5kbGVyLCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CmluZGV4IGRhYThhZmUuLjgxYmZkMWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBOYWtlZCBzb2NrZXRzIHJldHVybiBlbXB0eSBzdHJpbmdzLi4KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICAgICBsaW5lICs9IHBhcnQKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyAuLmJ1dCBTU0xTb2NrZXRzIHJhaXNlIGV4Y2VwdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoYidcclxuJyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CmluZGV4IGI1NmVmZTMuLjc4ZjU3MzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CkBAIC0xLDE0ICsxLDI5IEBACi1pbXBvcnQgaW1wCit0cnk6CisgICAgaW1wb3J0IF90aHJlYWQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdGhyZWFkID0gTm9uZQogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAorCitkZWYgcmVxdWlyZXNfbG9hZF9keW5hbWljKG1ldGgpOgorICAgICIiIkRlY29yYXRvciB0byBza2lwIGEgdGVzdCBpZiBub3QgcnVubmluZyB1bmRlciBDUHl0aG9uIG9yIGxhY2tpbmcKKyAgICBpbXAubG9hZF9keW5hbWljKCkuIiIiCisgICAgbWV0aCA9IHN1cHBvcnQuY3B5dGhvbl9vbmx5KG1ldGgpCisgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKShtZXRoKQorCisKK0B1bml0dGVzdC5za2lwSWYoX3RocmVhZCBpcyBOb25lLCAnX3RocmVhZCBtb2R1bGUgaXMgcmVxdWlyZWQnKQogY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIlZlcnkgYmFzaWMgdGVzdCBvZiBpbXBvcnQgbG9jayBmdW5jdGlvbnMuIiIiCkBAIC0xNTAsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmaWxlKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlbmFtZVs6LTNdLmVuZHN3aXRoKHRlbXBfbW9kX25hbWUpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1swXSwgJy5weScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAnVScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAncicpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzJdLCBpbXAuUFlfU09VUkNFKQogCiAgICAgICAgICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKHRlbXBfbW9kX25hbWUsIGZpbGUsIGZpbGVuYW1lLCBpbmZvKQpAQCAtMjA4LDkgKzIyMyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfcGF0aCwgbmV3X29zLnBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfZ2V0ZW52LCBuZXdfb3MuZ2V0ZW52KQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKLSAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKQorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9pc3N1ZTE1ODI4X2xvYWRfZXh0ZW5zaW9ucyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNTgyOCBwaWNrZWQgdXAgdGhhdCB0aGUgYWRhcHRlciBiZXR3ZWVuIHRoZSBvbGQgaW1wIEFQSQogICAgICAgICAjIGFuZCBpbXBvcnRsaWIgY291bGRuJ3QgaGFuZGxlIEMgZXh0ZW5zaW9ucwpAQCAtMjIyLDYgKzIzNSwyMiBAQAogICAgICAgICBtb2QgPSBpbXAubG9hZF9tb2R1bGUoZXhhbXBsZSwgKngpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fbmFtZV9fLCBleGFtcGxlKQogCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYworICAgIGRlZiB0ZXN0X2lzc3VlMTY0MjFfbXVsdGlwbGVfbW9kdWxlc19pbl9vbmVfZGxsKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE2NDIxOiBsb2FkaW5nIHNldmVyYWwgbW9kdWxlcyBmcm9tIHRoZSBzYW1lIGNvbXBpbGVkIGZpbGUgZmFpbHMKKyAgICAgICAgbSA9ICdfdGVzdGltcG9ydG11bHRpcGxlJworICAgICAgICBmaWxlb2JqLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobSkKKyAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgIG1vZDAgPSBpbXAubG9hZF9keW5hbWljKG0sIHBhdGhuYW1lKQorICAgICAgICBtb2QxID0gaW1wLmxvYWRfZHluYW1pYygnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nLCBwYXRobmFtZSkKKyAgICAgICAgbW9kMiA9IGltcC5sb2FkX2R5bmFtaWMoJ190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyJywgcGF0aG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMC5fX25hbWVfXywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QxLl9fbmFtZV9fLCAnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDIuX19uYW1lX18sICdfdGVzdGltcG9ydG11bHRpcGxlX2JhcicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYygnbm9uZXhpc3RlbnQnLCBwYXRobmFtZSkKKworICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9sb2FkX2R5bmFtaWNfSW1wb3J0RXJyb3JfcGF0aChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTU1OTU0OSBhZGRlZCBgbmFtZWAgYW5kIGBwYXRoYCBhdHRyaWJ1dGVzIHRvIEltcG9ydEVycm9yCiAgICAgICAgICMgaW4gb3JkZXIgdG8gcHJvdmlkZSBiZXR0ZXIgZGV0YWlsLiBJc3N1ZSAjMTA4NTQgaW1wbGVtZW50ZWQgdGhvc2UKQEAgLTIzMywxNCArMjYyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aCwgZXJyLmV4Y2VwdGlvbi5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGVyci5leGNlcHRpb24ubmFtZSkKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCi0gICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfZXh0ZW5zaW9uX2ZpbGVfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBXaGVuIGxvYWRpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgdGhlIGZpbGUgaXMgTm9uZSwgb3BlbiBvbmUKICAgICAgICAgIyBvbiB0aGUgYmVoYWxmIG9mIGltcC5sb2FkX2R5bmFtaWMoKS4KICAgICAgICAgIyBJc3N1ZSAjMTU5MDIKLSAgICAgICAgbmFtZSA9ICdfaGVhcHEnCisgICAgICAgIG5hbWUgPSAnX3Rlc3RpbXBvcnRtdWx0aXBsZScKICAgICAgICAgZm91bmQgPSBpbXAuZmluZF9tb2R1bGUobmFtZSkKICAgICAgICAgaWYgZm91bmRbMF0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmb3VuZFswXS5jbG9zZSgpCkBAIC0yNDgsNiArMjc1LDE1IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaW1wLmxvYWRfbW9kdWxlKG5hbWUsIE5vbmUsICpmb3VuZFsxOl0pCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLAorICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlbiB3cml0aW5nIGJ5dGVjb2RlIikKKyAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKToKKyAgICAgICAgICAgIHNvdXJjZSA9IHN1cHBvcnQuVEVTVEZOICsgJy5weScKKyAgICAgICAgICAgIG9zLm1rZGlyKHNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdeTm8gbW9kdWxlJywKKyAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIHN1cHBvcnQuVEVTVEZOLCBbIi4iXSkKKwogICAgIGRlZiB0ZXN0X211bHRpcGxlX2NhbGxzX3RvX2dldF9kYXRhKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxODc1NTogbWFrZSBzdXJlIG11bHRpcGxlIGNhbGxzIHRvIGdldF9kYXRhKCkgY2FuIHN1Y2NlZWQuCiAgICAgICAgIGxvYWRlciA9IGltcC5fTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoJ2ltcCcsIGltcC5fX2ZpbGVfXywKQEAgLTI5MywyMiArMzI5LDYgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnaHRtbCcpOgogICAgICAgICAgICAgaW1wLnJlbG9hZChwYXJzZXIpCiAKLSAgICBkZWYgdGVzdF9tb2R1bGVfcmVwbGFjZWQoc2VsZik6Ci0gICAgICAgICMgc2VlICMxODY5OAotICAgICAgICBkZWYgY29kZSgpOgotICAgICAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCd0b3BfbGV2ZWwnKQotICAgICAgICAgICAgbW9kdWxlLnNwYW0gPSAzCi0gICAgICAgICAgICBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10gPSBtb2R1bGUKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eyd0b3BfbGV2ZWwnOiBjb2RlfSkKLSAgICAgICAgd2l0aCBtb2NrOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKLSAgICAgICAgICAgICAgICByZWxvYWRlZCA9IGltcC5yZWxvYWQobW9kdWxlKQotICAgICAgICAgICAgICAgIGFjdHVhbCA9IHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLnNwYW0sIDMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5zcGFtLCAzKQotCiAKIGNsYXNzIFBFUDMxNDdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDcuIiIiCkBAIC00NjEsMjAgKzQ4MSw1IEBACiAgICAgICAgICAgICBvcy5ybWRpcihuYW1lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFsKLSAgICAgICAgSW1wb3J0VGVzdHMsCi0gICAgICAgIFBFUDMxNDdUZXN0cywKLSAgICAgICAgUmVsb2FkVGVzdHMsCi0gICAgICAgIE51bGxJbXBvcnRlclRlc3RzLAotICAgICAgICBdCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX3RocmVhZAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb2NrVGVzdHMpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CmluZGV4IGRmMDhlNmEuLmJkYTE1NDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CkBAIC0xLDkgKzEsOCBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBmcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBfZ2V0X3NvdXJjZWZpbGUKIGltcG9ydCBidWlsdGlucwotaW1wb3J0IGltcAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliLmltcG9ydF8gaW1wb3J0IHV0aWwgYXMgaW1wb3J0bGliX3V0aWwKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQpAQCAtMjIsNyArMjEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKICAgICBFbnZpcm9ubWVudFZhckd1YXJkLCBURVNURk4sIGNoZWNrX3dhcm5pbmdzLCBmb3JnZXQsIGlzX2p5dGhvbiwKICAgICBtYWtlX2xlZ2FjeV9weWMsIHJtdHJlZSwgcnVuX3VuaXR0ZXN0LCBzd2FwX2F0dHIsIHN3YXBfaXRlbSwgdGVtcF91bWFzaywKLSAgICB1bmxpbmssIHVubG9hZCwgY3JlYXRlX2VtcHR5X2ZpbGUsIGNweXRob25fb25seSkKKyAgICB1bmxpbmssIHVubG9hZCwgY3JlYXRlX2VtcHR5X2ZpbGUsIGNweXRob25fb25seSwgVEVTVEZOX1VORU5DT0RBQkxFKQogZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCiAKIApAQCAtNzAsOCArNjksNiBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdW5sb2FkKFRFU1RGTikKIAotICAgIHNldFVwID0gdGVhckRvd24KLQogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkoc2VsZik6CiAgICAgICAgICMgQnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoYXQgaW1wb3J0IGlzIGNhc2Utc2Vuc2l0aXZlOiAgaWYgd2UgZ290CiAgICAgICAgICMgdGhpcyBmYXIsIHdlIGtub3cgZm9yIHN1cmUgdGhhdCAicmFuZG9tIiBleGlzdHMuCkBAIC0xMjksMTYgKzEyNiw2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KIAotICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKLSAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgotICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAnLnB5JwotICAgICAgICBvcy5ta2Rpcihzb3VyY2UpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdeTm8gbW9kdWxlJywKLSAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIFRFU1RGTiwgWyIuIl0pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5ybWRpcihzb3VyY2UpCi0KICAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9sYXJnZV9zdGFjayhzZWxmLCBtb2R1bGU9J2xvbmdsaXN0Jyk6CiAgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTYxODU4LgogICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZSArICcucHknCkBAIC0xNjEsMTYgKzE0OCwyNCBAQAogICAgICAgICBzeXMucGF0aC5hcHBlbmQoJycpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAKKyAgICAgICAgbmFtZXNwYWNlID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZV9sZWdhY3lfcHljKGZpbGVuYW1lKQogICAgICAgICAgICAgIyBUaGlzIHVzZWQgdG8gY3Jhc2guCi0gICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSkKKyAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgbW9kdWxlLCBOb25lLCBuYW1lc3BhY2UpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIENsZWFudXAuCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbLTFdCiAgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnYycpCiAgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnbycpCiAKKyAgICAgICAgICAgICMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIG1vZHVsZSAodW5sb2FkIHRoZSBtb2R1bGUpCisgICAgICAgICAgICBuYW1lc3BhY2UuY2xlYXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RfZmFpbGluZ19pbXBvcnRfc3RpY2tzKHNlbGYpOgogICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAiLnB5IgogICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CkBAIC0yMjUsNyArMjIwLDcgQEAKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCJhID0gMTBcbmI9MjAvLzBcbiIpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBpbXAucmVsb2FkLCBtb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wb3J0bGliLnJlbG9hZCwgbW9kKQogICAgICAgICAgICAgIyBCdXQgd2Ugc3RpbGwgZXhwZWN0IHRoZSBtb2R1bGUgdG8gYmUgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5nZXQoVEVTVEZOKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2QsIE5vbmUsICJleHBlY3RlZCBtb2R1bGUgdG8gYmUgaW4gc3lzLm1vZHVsZXMiKQpAQCAtMjgwLDcgKzI3NSw3IEBACiAgICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCiAgICAgICAgICAgICBzeXMuYXJndi5pbnNlcnQoMCwgQygpKQogICAgICAgICAgICAgIiIiKSkKICAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKHRlc3RmbikKQEAgLTI5MSw3ICsyODYsNyBAQAogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAiLnB5IgotICAgICAgICAgICAgY29tcGlsZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAgY29tcGlsZWQgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAndycpIGFzIGY6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgdHJ5OgpAQCAtMzIyLDYgKzMxNywxNCBAQAogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiIkltcG9ydEVycm9yIiwgc3Rkb3V0KQogCisgICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfbWVzc2FnZV9mb3Jfbm9uZXhpc3RlbnRfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICJeTm8gbW9kdWxlIG5hbWVkICdib2d1cyciKToKKyAgICAgICAgICAgIGZyb20gYm9ndXMgaW1wb3J0IGZvbworCisgICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfbWVzc2FnZV9mb3JfZXhpc3RpbmdfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICJeY2Fubm90IGltcG9ydCBuYW1lICdib2d1cyciKToKKyAgICAgICAgICAgIGZyb20gcmUgaW1wb3J0IGJvZ3VzCisKIAogQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQogY2xhc3MgRmlsZVBlcm1pc3Npb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zMzIsNyArMzM1LDcgQEAKICAgICBkZWYgdGVzdF9jcmVhdGlvbl9tb2RlKHNlbGYpOgogICAgICAgICBtYXNrID0gMG8wMjIKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKG1hc2spLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2ltcG9ydF9fIGRpZCBub3QgcmVzdWx0IGluIGNyZWF0aW9uIG9mICIKQEAgLTM1MCw3ICszNTMsNyBAQAogICAgICAgICAjIHBlcm1pc3Npb25zIG9mIC5weWMgc2hvdWxkIG1hdGNoIHRob3NlIG9mIC5weSwgcmVnYXJkbGVzcyBvZiBtYXNrCiAgICAgICAgIG1vZGUgPSAwbzYwMAogICAgICAgICB3aXRoIHRlbXBfdW1hc2soMG8wMjIpLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIG1vZGUpCiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgpAQCAtMzY1LDcgKzM2OCw3IEBACiAgICAgZGVmIHRlc3RfY2FjaGVkX3JlYWRvbmx5KHNlbGYpOgogICAgICAgICBtb2RlID0gMG80MDAKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKDBvMDIyKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKQEAgLTQwNSw3ICs0MDgsNyBAQAogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX29ubHkgPSBwYXRoICsgImMiCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX29ubHkgPSBwYXRoICsgIm8iCi0gICAgICAgICAgICBvcy5yZW5hbWUoaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpLCBieXRlY29kZV9vbmx5KQorICAgICAgICAgICAgb3MucmVuYW1lKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpLCBieXRlY29kZV9vbmx5KQogICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS54LCAncmV3cml0dGVuJykKIApAQCAtNDI3LDcgKzQzMCw3IEBACiAiIiIKICAgICBkaXJfbmFtZSA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCiAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKGRpcl9uYW1lLCBtb2R1bGVfbmFtZSkgKyBvcy5leHRzZXAgKyAicHkiCi0gICAgY29tcGlsZWRfbmFtZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX25hbWUpCisgICAgY29tcGlsZWRfbmFtZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfbmFtZSkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCkBAIC00ODgsNyArNDkxLDcgQEAKICAgICAgICAgICAgIGhlYWRlciA9IGYucmVhZCgxMikKICAgICAgICAgICAgIGNvZGUgPSBtYXJzaGFsLmxvYWQoZikKICAgICAgICAgY29uc3RhbnRzID0gbGlzdChjb2RlLmNvX2NvbnN0cykKLSAgICAgICAgZm9yZWlnbl9jb2RlID0gdGVzdF9tYWluLl9fY29kZV9fCisgICAgICAgIGZvcmVpZ25fY29kZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlLl9fY29kZV9fCiAgICAgICAgIHBvcyA9IGNvbnN0YW50cy5pbmRleCgxKQogICAgICAgICBjb25zdGFudHNbcG9zXSA9IGZvcmVpZ25fY29kZQogICAgICAgICBjb2RlID0gdHlwZShjb2RlKShjb2RlLmNvX2FyZ2NvdW50LCBjb2RlLmNvX2t3b25seWFyZ2NvdW50LApAQCAtNjMwLDcgKzYzMyw3IEBACiBjbGFzcyBQeWNhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGUgdmFyaW91cyBQRVAgMzE0NyByZWxhdGVkIGJlaGF2aW9ycy4KIAotICAgIHRhZyA9IGltcC5nZXRfdGFnKCkKKyAgICB0YWcgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKICAgICBkZWYgX2NsZWFuKHNlbGYpOgogICAgICAgICBmb3JnZXQoVEVTVEZOKQpAQCAtNjc4LDEwICs2ODEsMTEgQEAKICAgICAgICAgIyBXaXRoIFBFUCAzMTQ3IGNhY2hlIGxheW91dCwgcmVtb3ZpbmcgdGhlIHNvdXJjZSBidXQgbGVhdmluZyB0aGUgcHljCiAgICAgICAgICMgZmlsZSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSBpbXBvcnQuCiAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZSkKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5Y19maWxlKSkKICAgICAgICAgb3MucmVtb3ZlKHNlbGYuc291cmNlKQogICAgICAgICBmb3JnZXQoVEVTVEZOKQorICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgVEVTVEZOKQogCiAgICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQpAQCAtNzAzLDcgKzcwNyw3IEBACiAgICAgZGVmIHRlc3RfX19jYWNoZWRfXyhzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdyBhbHNvIGhhdmUgYW4gX19jYWNoZWRfXyB0aGF0IHBvaW50cyB0byB0aGUgcHljIGZpbGUuCiAgICAgICAgIG0gPSBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVEZOICsgJy5weScpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVEZOICsgJy5weScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBweWNfZmlsZSkpCiAKICAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCkBAIC03MzgsMTAgKzc0MiwxMCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBtID0gX19pbXBvcnRfXygncGVwMzE0Ny5mb28nKQotICAgICAgICBpbml0X3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgaW5pdF9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgIG9zLnBhdGguam9pbigncGVwMzE0NycsICdfX2luaXRfXy5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgaW5pdF9weWMpKQotICAgICAgICBmb29fcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKKyAgICAgICAgZm9vX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubW9kdWxlc1sncGVwMzE0Ny5mb28nXS5fX2NhY2hlZF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGZvb19weWMpKQogCkBAIC03NjUsMTAgKzc2OSwxMCBAQAogICAgICAgICB1bmxvYWQoJ3BlcDMxNDcnKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBtID0gX19pbXBvcnRfXygncGVwMzE0Ny5mb28nKQotICAgICAgICBpbml0X3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgaW5pdF9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgIG9zLnBhdGguam9pbigncGVwMzE0NycsICdfX2luaXRfXy5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgaW5pdF9weWMpKQotICAgICAgICBmb29fcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKKyAgICAgICAgZm9vX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubW9kdWxlc1sncGVwMzE0Ny5mb28nXS5fX2NhY2hlZF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGZvb19weWMpKQogCkBAIC04NTIsNyArODU2LDYgQEAKICAgICAgICAgZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1snX2Zyb3plbl9pbXBvcnRsaWInXQogICAgICAgICBzZWxmLmFzc2VydElzKG1hY2hpbmVyeS5GaWxlRmluZGVyLCBtb2QuRmlsZUZpbmRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhpbXAubmV3X21vZHVsZSwgbW9kLm5ld19tb2R1bGUpCiAKIAogQGNweXRob25fb25seQpAQCAtMTAzMywxMSArMTAzNiwxNCBAQAogICAgICAgICAjIGF3YXkgZnJvbSB0aGUgdHJhY2ViYWNrLgogICAgICAgICBzZWxmLmNyZWF0ZV9tb2R1bGUoImZvbyIsICIiKQogICAgICAgICBpbXBvcnRsaWIgPSBzeXMubW9kdWxlc1snX2Zyb3plbl9pbXBvcnRsaWInXQotICAgICAgICBvbGRfbG9hZF9tb2R1bGUgPSBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlCisgICAgICAgIGlmICdsb2FkX21vZHVsZScgaW4gdmFycyhpbXBvcnRsaWIuU291cmNlTG9hZGVyKToKKyAgICAgICAgICAgIG9sZF9leGVjX21vZHVsZSA9IGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9sZF9leGVjX21vZHVsZSA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKCphcmdzKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZSgqYXJncyk6CiAgICAgICAgICAgICAgICAgMS8wCi0gICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlID0gbG9hZF9tb2R1bGUKKyAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUgPSBleGVjX21vZHVsZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGltcG9ydCBmb28KICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgpAQCAtMTA0NiwxOSArMTA1MiwyMSBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiWmVyb0RpdmlzaW9uRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHJhY2ViYWNrKHRiLCBbX19maWxlX18sICc8ZnJvemVuIGltcG9ydGxpYicsIF9fZmlsZV9fXSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUgPSBvbGRfbG9hZF9tb2R1bGUKKyAgICAgICAgICAgIGlmIG9sZF9leGVjX21vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUgPSBvbGRfZXhlY19tb2R1bGUKIAotCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydFRlc3RzLCBQeWNhY2hlVGVzdHMsIEZpbGVQZXJtaXNzaW9uVGVzdHMsCi0gICAgICAgICAgICAgICAgIFB5Y1Jld3JpdGluZ1Rlc3RzLCBQYXRoc1Rlc3RzLCBSZWxhdGl2ZUltcG9ydFRlc3RzLAotICAgICAgICAgICAgICAgICBPdmVycmlkaW5nSW1wb3J0QnVpbHRpblRlc3RzLAotICAgICAgICAgICAgICAgICBJbXBvcnRsaWJCb290c3RyYXBUZXN0cywgR2V0U291cmNlZmlsZVRlc3RzLAotICAgICAgICAgICAgICAgICBUZXN0U3ltYm9saWNhbGx5TGlua2VkUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgSW1wb3J0VHJhY2ViYWNrVGVzdHMpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVEVTVEZOX1VORU5DT0RBQkxFLCAnbmVlZCBURVNURk5fVU5FTkNPREFCTEUnKQorICAgIGRlZiB0ZXN0X3VuZW5jb2RhYmxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTYxOTogVGhlIFB5dGhvbiBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IG11c3Qgbm90CisgICAgICAgICMgZW5jb2RlIGZpbGVuYW1lcywgZXNwZWNpYWxseSBvbiBXaW5kb3dzCisgICAgICAgIHB5bmFtZSA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoJycsIFRFU1RGTl9VTkVOQ09EQUJMRSwgJ3Bhc3MnKQorICAgICAgICBuYW1lID0gcHluYW1lWzotM10KKyAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCItYyIsICJtb2QgPSBfX2ltcG9ydF9fKCVhKSIgJSBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgVGVzdCBuZWVkcyB0byBiZSBhIHBhY2thZ2UsIHNvIHdlIGNhbiBkbyByZWxhdGl2ZSBpbXBvcnRzLgotICAgIGZyb20gdGVzdC50ZXN0X2ltcG9ydCBpbXBvcnQgdGVzdF9tYWluCi0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTIyZDFhLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotaW1wb3J0IHN5cwotaW1wb3J0IGltcAotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCi0KLXRlc3Rfc3JjID0gIiIiXAotZGVmIGdldF9uYW1lKCk6Ci0gICAgcmV0dXJuIF9fbmFtZV9fCi1kZWYgZ2V0X2ZpbGUoKToKLSAgICByZXR1cm4gX19maWxlX18KLSIiIgotCi1hYnNpbXAgPSAiaW1wb3J0IHN1YlxuIgotcmVsaW1wID0gImZyb20gLiBpbXBvcnQgc3ViXG4iCi1kZWVwcmVsaW1wID0gImZyb20gLi4uLiBpbXBvcnQgc3ViXG4iCi1mdXRpbXAgPSAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnRcbiIKLQotcmVsb2FkX3NyYyA9IHRlc3Rfc3JjKyIiIlwKLXJlbG9hZGVkID0gVHJ1ZQotIiIiCi0KLXRlc3RfY28gPSBjb21waWxlKHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi1yZWxvYWRfY28gPSBjb21waWxlKHJlbG9hZF9zcmMsICI8Pz8/PiIsICJleGVjIikKLQotdGVzdDJfb2xkYWJzX2NvID0gY29tcGlsZShhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfbmV3YWJzX2NvID0gY29tcGlsZShmdXRpbXAgKyBhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfbmV3cmVsX2NvID0gY29tcGlsZShyZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfZGVlcHJlbF9jbyA9IGNvbXBpbGUoZGVlcHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9mdXRyZWxfY28gPSBjb21waWxlKGZ1dGltcCArIHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi0KLXRlc3RfcGF0aCA9ICIhISFfdGVzdF8hISEiCi0KLQotY2xhc3MgVGVzdEltcG9ydGVyOgotCi0gICAgbW9kdWxlcyA9IHsKLSAgICAgICAgImhvb2t0ZXN0bW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZSI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlciI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5vbGRhYnMiOiAoRmFsc2UsIHRlc3QyX29sZGFic19jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3YWJzIjogKEZhbHNlLCB0ZXN0Ml9uZXdhYnNfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld3JlbCI6IChGYWxzZSwgdGVzdDJfbmV3cmVsX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCI6IChUcnVlLCB0ZXN0Ml9kZWVwcmVsX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiOiAoRmFsc2UsIHRlc3QyX2Z1dHJlbF9jbyksCi0gICAgICAgICJzdWIiOiAoRmFsc2UsIHRlc3RfY28pLAotICAgICAgICAicmVsb2FkbW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICB9Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD10ZXN0X3BhdGgpOgotICAgICAgICBpZiBwYXRoICE9IHRlc3RfcGF0aDoKLSAgICAgICAgICAgICMgaWYgb3VyIGNsYXNzIGlzIG9uIHN5cy5wYXRoX2hvb2tzLCB3ZSBtdXN0IHJhaXNlCi0gICAgICAgICAgICAjIEltcG9ydEVycm9yIGZvciBhbnkgcGF0aCBpdGVtIHRoYXQgd2UgY2FuJ3QgaGFuZGxlLgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aAotCi0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm1vZHVsZXM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGlzcGtnLCBjb2RlID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLGltcC5uZXdfbW9kdWxlKGZ1bGxuYW1lKSkKLSAgICAgICAgbW9kLl9fZmlsZV9fID0gIjwlcz4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLSAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIGlmIGlzcGtnOgotICAgICAgICAgICAgbW9kLl9fcGF0aF9fID0gc2VsZi5fZ2V0X19wYXRoX18oKQotICAgICAgICBleGVjKGNvZGUsIG1vZC5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZAotCi0KLWNsYXNzIE1ldGFJbXBvcnRlcihUZXN0SW1wb3J0ZXIpOgotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBbXQotCi1jbGFzcyBQYXRoSW1wb3J0ZXIoVGVzdEltcG9ydGVyKToKLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gW3NlbGYucGF0aF0KLQotCi1jbGFzcyBJbXBvcnRCbG9ja2VyOgotICAgICIiIlBsYWNlIGFuIEltcG9ydEJsb2NrZXIgaW5zdGFuY2Ugb24gc3lzLm1ldGFfcGF0aCBhbmQgeW91Ci0gICAgY2FuIGJlIHN1cmUgdGhlIG1vZHVsZXMgeW91IHNwZWNpZmllZCBjYW4ndCBiZSBpbXBvcnRlZCwgZXZlbgotICAgIGlmIGl0J3MgYSBidWlsdGluLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbmFtZXN0b2Jsb2NrKToKLSAgICAgICAgc2VsZi5uYW1lc3RvYmxvY2sgPSBkaWN0LmZyb21rZXlzKG5hbWVzdG9ibG9jaykKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lIGluIHNlbGYubmFtZXN0b2Jsb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiSSBkYXJlIHlvdSIpCi0KLQotY2xhc3MgSW1wV3JhcHBlcjoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lIGFuZCBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgc3VibmFtZSA9IGZ1bGxuYW1lLnNwbGl0KCIuIilbLTFdCi0gICAgICAgIGlmIHN1Ym5hbWUgIT0gZnVsbG5hbWUgYW5kIHNlbGYucGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgaWYgc2VsZi5wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXRoID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGF0aCA9IFtzZWxmLnBhdGhdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpbGUsIGZpbGVuYW1lLCBzdHVmZiA9IGltcC5maW5kX21vZHVsZShzdWJuYW1lLCBwYXRoKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gSW1wTG9hZGVyKGZpbGUsIGZpbGVuYW1lLCBzdHVmZikKLQotCi1jbGFzcyBJbXBMb2FkZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgZmlsZW5hbWUsIHN0dWZmKToKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi5zdHVmZiA9IHN0dWZmCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBtb2QgPSBpbXAubG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNlbGYuZmlsZSwgc2VsZi5maWxlbmFtZSwgc2VsZi5zdHVmZikKLSAgICAgICAgaWYgc2VsZi5maWxlOgotICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmICAjIGZvciBpbnRyb3NwZWN0aW9uCi0gICAgICAgIHJldHVybiBtb2QKLQotCi1jbGFzcyBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucGF0aCA9IHN5cy5wYXRoWzpdCi0gICAgICAgIHNlbGYubWV0YV9wYXRoID0gc3lzLm1ldGFfcGF0aFs6XQotICAgICAgICBzZWxmLnBhdGhfaG9va3MgPSBzeXMucGF0aF9ob29rc1s6XQotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCi0gICAgICAgIHNlbGYubW9kdWxlc19iZWZvcmUgPSBzdXBwb3J0Lm1vZHVsZXNfc2V0dXAoKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYucGF0aAotICAgICAgICBzeXMubWV0YV9wYXRoWzpdID0gc2VsZi5tZXRhX3BhdGgKLSAgICAgICAgc3lzLnBhdGhfaG9va3NbOl0gPSBzZWxmLnBhdGhfaG9va3MKLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQotICAgICAgICBzdXBwb3J0Lm1vZHVsZXNfY2xlYW51cCgqc2VsZi5tb2R1bGVzX2JlZm9yZSkKLQotCi1jbGFzcyBJbXBvcnRIb29rc1Rlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKLQotICAgIGRlZiBkb1Rlc3RJbXBvcnRzKHNlbGYsIGltcG9ydGVyPU5vbmUpOgotICAgICAgICBpbXBvcnQgaG9va3Rlc3Rtb2R1bGUKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1YgotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdG1vZHVsZS5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdG1vZHVsZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlciIpCi0gICAgICAgIGlmIGltcG9ydGVyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdG1vZHVsZS5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLQotICAgICAgICBUZXN0SW1wb3J0ZXIubW9kdWxlc1sncmVsb2FkbW9kdWxlJ10gPSAoRmFsc2UsIHRlc3RfY28pCi0gICAgICAgIGltcG9ydCByZWxvYWRtb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHJlbG9hZG1vZHVsZSwncmVsb2FkZWQnKSkKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm5ld3JlbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld3JlbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld3JlbC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IGFzIHN1YmVzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YmVzdC5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YmVzdC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgc3ViCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLmdldF9uYW1lKCksICJzdWIiKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uub2xkYWJzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm9sZGFicy5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLnN1Yiwgc3ViKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UubmV3YWJzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld2Ficy5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3YWJzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3YWJzLnN1Yiwgc3ViKQotCi0gICAgZGVmIHRlc3RNZXRhUGF0aChzZWxmKToKLSAgICAgICAgaSA9IE1ldGFJbXBvcnRlcigpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGkpCi0gICAgICAgIHNlbGYuZG9UZXN0SW1wb3J0cyhpKQotCi0gICAgZGVmIHRlc3RQYXRoSG9vayhzZWxmKToKLSAgICAgICAgc3lzLnBhdGhfaG9va3MuaW5zZXJ0KDAsIFBhdGhJbXBvcnRlcikKLSAgICAgICAgc3lzLnBhdGguYXBwZW5kKHRlc3RfcGF0aCkKLSAgICAgICAgc2VsZi5kb1Rlc3RJbXBvcnRzKCkKLQotICAgIGRlZiB0ZXN0QmxvY2tlcihzZWxmKToKLSAgICAgICAgbW5hbWUgPSAiZXhjZXB0aW9ucyIgICMgYW4gYXJiaXRyYXJ5IGhhcm1sZXNzIGJ1aWx0aW4gbW9kdWxlCi0gICAgICAgIHN1cHBvcnQudW5sb2FkKG1uYW1lKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChJbXBvcnRCbG9ja2VyKG1uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIG1uYW1lKQotCi0gICAgZGVmIHRlc3RJbXBXcmFwcGVyKHNlbGYpOgotICAgICAgICBpID0gSW1wV3JhcHBlcigpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGkpCi0gICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBJbXBXcmFwcGVyKQotICAgICAgICBtbmFtZXMgPSAoCi0gICAgICAgICAgICAiY29sb3JzeXMiLCAidXJsbGliLnBhcnNlIiwgImRpc3R1dGlscy5jb3JlIiwgInN5cyIsCi0gICAgICAgICkKLSAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKLSAgICAgICAgICAgIHBhcmVudCA9IG1uYW1lLnNwbGl0KCIuIilbMF0KLSAgICAgICAgICAgIGZvciBuIGluIGxpc3Qoc3lzLm1vZHVsZXMpOgotICAgICAgICAgICAgICAgIGlmIG4uc3RhcnRzd2l0aChwYXJlbnQpOgotICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbl0KLSAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKLSAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG1uYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbIl9fZHVtbXlfXyJdKQotICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGFuZGxlZCB0aGUgaW1wb3J0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtLCAiX19sb2FkZXJfXyIpKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChJbXBvcnRIb29rc1Rlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5CmluZGV4IGMzOTcxMjguLjE0YmQ1YmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5CkBAIC00LDE3ICs0LDYgQEAKIGJ1aWx0aW5zLl9faW1wb3J0X18gaW5zdGVhZCBvZiBpbXBvcnRsaWIuX19pbXBvcnRfXy4KIAogIiIiCi1mcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IGFyZ3BhcnNlCi0KLSAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nRXhlY3V0ZSB0aGUgaW1wb3J0bGliIHRlc3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VpdGUnKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnVpbHRpbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd1c2UgYnVpbHRpbnMuX19pbXBvcnRfXygpIGluc3RlYWQgb2YgaW1wb3J0bGliJykKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgIGlmIGFyZ3MuYnVpbHRpbjoKLSAgICAgICAgdXRpbC51c2luZ19fX2ltcG9ydF9fID0gVHJ1ZQorICAgIGZyb20gLiBpbXBvcnQgdGVzdF9tYWluCiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQppbmRleCAyYzE3YWMzLi4yMDcwZGFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgRmluZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CitjbGFzcyBGaW5kZXJUZXN0cyhtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogCiAgICAgIiIiQmFzaWMgdGVzdHMgZm9yIGEgZmluZGVyIHRvIHBhc3MuIiIiCiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcGFzcwogCiAKLWNsYXNzIExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorY2xhc3MgTG9hZGVyVGVzdHMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC04MSwxMSArODEsNiBAQAogICAgICAgICBwYXNzCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICAiIiJJZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLCBpdCBzaG91bGQgYmUgcmV1c2VkLiIiIgotICAgICAgICBwYXNzCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKICAgICAgICAgIiIiSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcyBhbmQgYSByZWxvYWQgZmFpbHMKICAgICAgICAgKGUuZy4gYSBTeW50YXhFcnJvciksIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGluIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQppbmRleCBkYTBlZjI4Li45MzQ1NjJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKQEAgLTEsMTEgKzEsNTMgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGJ1aWx0aW5fdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKKworY2xhc3MgRmluZFNwZWNUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgorCisgICAgIiIiVGVzdCBmaW5kX3NwZWMoKSBmb3IgYnVpbHQtaW4gbW9kdWxlcy4iIiIKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgIyBDb21tb24gY2FzZS4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgorICAgICAgICAgICAgZm91bmQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZC5vcmlnaW4sICdidWlsdC1pbicpCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KKyAgICB0ZXN0X3BhY2thZ2UgPSBOb25lCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm9idCBiZSBpbiBhIHBhY2thZ2UuCisgICAgdGVzdF9tb2R1bGVfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgorICAgIHRlc3RfcGFja2FnZV9pbl9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlID0gTm9uZQorCisgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdpbXBvcnRsaWInCisgICAgICAgIGFzc2VydCBuYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9wYXRoKHNlbGYpOgorICAgICAgICAjIFRoZSB2YWx1ZSBmb3IgJ3BhdGgnIHNob3VsZCBhbHdheXMgdHJpZ2dlciBhIGZhaWxlZCBpbXBvcnQuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKGJ1aWx0aW5fdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydwa2cnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCisKK0Zyb3plbl9GaW5kU3BlY1Rlc3RzLCBTb3VyY2VfRmluZFNwZWNUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRTcGVjVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKwogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgZmluZF9tb2R1bGUoKSBmb3IgYnVpbHQtaW4gbW9kdWxlcy4iIiIKQEAgLTEzLDggKzU1LDkgQEAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgQ29tbW9uIGNhc2UuCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKLSAgICAgICAgICAgIGZvdW5kID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZm91bmQsICdsb2FkX21vZHVsZScpKQogCiAgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCiAgICAgdGVzdF9wYWNrYWdlID0gdGVzdF9wYWNrYWdlX2luX3BhY2thZ2UgPSB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCkBAIC0yNCwyMiArNjcsMTkgQEAKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIGFzc2VydCAnaW1wb3J0bGliJyBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCi0gICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ2ltcG9ydGxpYicpCisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZSgnaW1wb3J0bGliJykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCiAgICAgZGVmIHRlc3RfaWdub3JlX3BhdGgoc2VsZik6CiAgICAgICAgICMgVGhlIHZhbHVlIGZvciAncGF0aCcgc2hvdWxkIGFsd2F5cyB0cmlnZ2VyIGEgZmFpbGVkIGltcG9ydC4KICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSwKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK0Zyb3plbl9GaW5kZXJUZXN0cywgU291cmNlX0ZpbmRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKaW5kZXggMTJhNzljNi4uOGUxMjgxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDIwICsxLDkzIEBACi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIAorY2xhc3MgRXhlY01vZFRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGV4ZWNfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMudmVyaWZpY2F0aW9uID0geydfX25hbWVfXyc6ICdlcnJubycsICdfX3BhY2thZ2VfXyc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IGNscy5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQorCisgICAgZGVmIHZlcmlmeShzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgbW9kdWxlIG1hdGNoZXMgYWdhaW5zdCB3aGF0IGl0IHNob3VsZCBoYXZlLiIiIgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKQorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gc2VsZi52ZXJpZmljYXRpb24uaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19uYW1lX18sIHN5cy5tb2R1bGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3NwZWNfXy5vcmlnaW4sICdidWlsdC1pbicpCisKKyAgICBkZWYgbG9hZF9zcGVjKHNlbGYsIG5hbWUpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhuYW1lLCBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj0nYnVpbHQtaW4nKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgIyBTdHJpY3RseSBub3Qgd2hhdCBleGVjX21vZHVsZSgpIGlzIHN1cHBvc2VkIHRvIGRvLCBidXQgc2luY2UKKyAgICAgICAgIyBfaW1wLmluaXRfYnVpbHRpbigpIGRvZXMgdGhpcyB3ZSBjYW4ndCBnZXQgYXJvdW5kIGl0LgorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgIyBDb21tb24gY2FzZS4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkX3NwZWMoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdidWlsdC1pbicsIHN0cihtb2R1bGUpKQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9sYWNraW5nX3BhcmVudCA9IE5vbmUKKworICAgICMgTm90IHdheSB0byBmb3JjZSBhbiBpbXBvcnQgZmFpbHVyZS4KKyAgICB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUgPSBOb25lCisKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2Rzc2RzZGZmZicKKyAgICAgICAgYXNzZXJ0IG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZF9zcGVjKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCisKKyAgICBkZWYgdGVzdF9hbHJlYWR5X2ltcG9ydGVkKHNlbGYpOgorICAgICAgICAjIFVzaW5nIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGFscmVhZHkgaW1wb3J0ZWQgYnV0IG5vdCBhIGJ1aWx0LWluIHNob3VsZAorICAgICAgICAjIHN0aWxsIGZhaWwuCisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2J1aWx0aW5fcmVsb2FkX3Rlc3QnCisgICAgICAgIGFzc2VydCBtb2R1bGVfbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kdWxlX25hbWUpCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj0nYnVpbHQtaW4nKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdID0gbW9kdWxlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbW9kdWxlX25hbWUpCisKKworRnJvemVuX0V4ZWNNb2RUZXN0cywgU291cmNlX0V4ZWNNb2RUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEV4ZWNNb2RUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKKworCiBjbGFzcyBMb2FkZXJUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCBsb2FkX21vZHVsZSgpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgogCi0gICAgdmVyaWZpY2F0aW9uID0geydfX25hbWVfXyc6ICdlcnJubycsICdfX3BhY2thZ2VfXyc6ICcnLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXJ9CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmaWNhdGlvbiA9IHsnX19uYW1lX18nOiAnZXJybm8nLCAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXJ9CiAKICAgICBkZWYgdmVyaWZ5KHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICIiIlZlcmlmeSB0aGF0IHRoZSBtb2R1bGUgbWF0Y2hlcyBhZ2FpbnN0IHdoYXQgaXQgc2hvdWxkIGhhdmUuIiIiCkBAIC0yMyw4ICs5Niw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fbmFtZV9fLCBzeXMubW9kdWxlcykKIAotICAgIGxvYWRfbW9kdWxlID0gc3RhdGljbWV0aG9kKGxhbWJkYSBuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKG5hbWUpKQorICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgpAQCAtNTUsNDUgKzEyOCw1MSBAQAogICAgIGRlZiB0ZXN0X2FscmVhZHlfaW1wb3J0ZWQoc2VsZik6CiAgICAgICAgICMgVXNpbmcgdGhlIG5hbWUgb2YgYSBtb2R1bGUgYWxyZWFkeSBpbXBvcnRlZCBidXQgbm90IGEgYnVpbHQtaW4gc2hvdWxkCiAgICAgICAgICMgc3RpbGwgZmFpbC4KLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoaW1wb3J0bGliLCAnX19maWxlX18nKSAgIyBOb3QgYSBidWlsdC1pbi4KKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYnVpbHRpbl9yZWxvYWRfdGVzdCcKKyAgICAgICAgYXNzZXJ0IG1vZHVsZV9uYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobW9kdWxlX25hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSA9IG1vZHVsZQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUoJ2ltcG9ydGxpYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdpbXBvcnRsaWInKQorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbW9kdWxlX25hbWUpCiAKIAotY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKworY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgQnVpbHRpbkltcG9ydGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfY29kZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBUaGVyZSBpcyBubyBzb3VyY2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X3NvdXJjZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgQ2Fubm90IGJlIGEgcGFja2FnZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuaXNfcGFja2FnZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9ub3RfYnVpbHRpbihzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdCBidWlsdC1pbiBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1ldGhfbmFtZSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICBtZXRob2QoYnVpbHRpbl91dGlsLkJBRF9OQU1FKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhidWlsdGluX3V0aWwuQkFEX05BTUUpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0luc3BlY3RMb2FkZXJUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBJbnNwZWN0TG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKaW5kZXggNzZjNTNlNC4uYmIyNTI4ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xLDIyICsxLDI3IEBACi1pbXBvcnQgaW1wCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCisKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBleHRfdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAorCisjIFhYWCBmaW5kX3NwZWMgdGVzdHMKKworQHVuaXR0ZXN0LnNraXBJZihleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lLCAnX3Rlc3RjYXBpIG5vdCBhdmFpbGFibGUnKQogQHV0aWwuY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cwotY2xhc3MgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0OgogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYpOgogICAgICAgICBnb29kX25hbWUgPSBleHRfdXRpbC5OQU1FCiAgICAgICAgIGJhZF9uYW1lID0gZ29vZF9uYW1lLnVwcGVyKCkKICAgICAgICAgYXNzZXJ0IGdvb2RfbmFtZSAhPSBiYWRfbmFtZQotICAgICAgICBmaW5kZXIgPSBfYm9vdHN0cmFwLkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2Jvb3RzdHJhcC5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCiAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoYmFkX25hbWUpCiAKICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2ZShzZWxmKToKQEAgLTM3LDE0ICs0MiwxMCBAQAogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5maW5kX21vZHVsZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihsb2FkZXIsICdsb2FkX21vZHVsZScpKQogCi0KLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgaWYgZXh0X3V0aWwuRklMRU5BTUUgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCkKK0Zyb3plbl9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHksIFNvdXJjZV9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHkgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCwKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKaW5kZXggMzdmNjc3Mi4uZDBjOGJiMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwxNyArMSwyMSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCitmcm9tIC4uIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHVuaXR0ZXN0CiAKKyMgWFhYIGZpbmRfc3BlYyB0ZXN0cworCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCB0aGUgZmluZGVyIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGltcG9ydGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGltcG9ydGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcih1dGlsLlBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGltcG9ydGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtMjksMTEgKzMzLDkgQEAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmZpbmRfbW9kdWxlKCdhc2RmamtsOycpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKaW5kZXggZTc5MDY3NS4uNThiZDA5ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQpAQCAtMSwyMCArMSw4NyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGV4dF91dGlsCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIAorY2xhc3MgRXhlY01vZHVsZVRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGxvYWRfbW9kdWxlKCkgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShmdWxsbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhmdWxsbmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorCisgICAgZGVmIHRlc3RfZXhlY19tb2R1bGVfQVBJKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuZXhlY19tb2R1bGUoJ1hYWCcpCisKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoZXh0X3V0aWwuTkFNRSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmV4ZWNfbW9kdWxlKGV4dF91dGlsLk5BTUUpCisgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gWygnX19uYW1lX18nLCBleHRfdXRpbC5OQU1FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX2ZpbGVfXycsIGV4dF91dGlsLkZJTEVQQVRIKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX3BhY2thZ2VfXycsICcnKV06CisgICAgICAgICAgICAgICAgZ2l2ZW4gPSBnZXRhdHRyKG1vZHVsZSwgYXR0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7fTogeyFyfSAhPSB7IXJ9Jy5mb3JtYXQoYXR0ciwgZ2l2ZW4sIHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0X3V0aWwuTkFNRSwgc3lzLm1vZHVsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKworICAgICMgTm8gZXh0ZW5zaW9uIG1vZHVsZSBhcyBfX2luaXRfXyBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBObyBleHRlbnNpb24gbW9kdWxlIGluIGEgcGFja2FnZSBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCisgICAgdGVzdF9sYWNraW5nX3BhcmVudCA9IE5vbmUKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoZXh0X3V0aWwuTkFNRSk6CisgICAgICAgICAgICBtb2R1bGUxID0gc2VsZi5leGVjX21vZHVsZShleHRfdXRpbC5OQU1FKQorICAgICAgICAgICAgbW9kdWxlMiA9IHNlbGYuZXhlY19tb2R1bGUoZXh0X3V0aWwuTkFNRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlMSwgbW9kdWxlMikKKworICAgIGRlZiB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgTm8gZWFzeSB3YXkgdG8gdHJpZ2dlciBhIGZhaWx1cmUgYWZ0ZXIgYSBzdWNjZXNzZnVsIGltcG9ydC4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdhc2RmamtsOycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2UoZXh0X3V0aWwuTkFNRSkpCisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignc29tZScsICdwYXRoJywgJ3BrZycsICdfX2luaXRfXycgKyBzdWZmaXgpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdwa2cnLCBwYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5pc19wYWNrYWdlKCdwa2cnKSkKKworRnJvemVuX0V4ZWNNb2R1bGVUZXN0cywgU291cmNlX0V4ZWNNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFeGVjTW9kdWxlVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKwogY2xhc3MgTG9hZGVyVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKIAogICAgICIiIlRlc3QgbG9hZF9tb2R1bGUoKSBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYubG9hZGVyID0gbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHRfdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCiAKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICByZXR1cm4gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoZnVsbG5hbWUpCkBAIC0zNiw3ICsxMDMsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0X3V0aWwuTkFNRSwgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogICAgICMgTm8gZXh0ZW5zaW9uIG1vZHVsZSBhcyBfX2luaXRfXyBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCiAgICAgdGVzdF9wYWNrYWdlID0gTm9uZQpAQCAtNjEsMTYgKzEyOCwxNSBAQAogCiAgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKGV4dF91dGlsLk5BTUUpKQotICAgICAgICBmb3Igc3VmZml4IGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVM6CisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgogICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignc29tZScsICdwYXRoJywgJ3BrZycsICdfX2luaXRfXycgKyBzdWZmaXgpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcigncGtnJywgcGF0aCkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLmlzX3BhY2thZ2UoJ3BrZycpKQogCitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMb2FkZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDFkOTY5YTEuLjQ5ZDY3MzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsMzIgKzEsMzIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gLi4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFBhdGhIb29rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGF0aEhvb2tUZXN0czoKIAogICAgICIiIlRlc3QgdGhlIHBhdGggaG9vayBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAgICAgIyBYWFggU2hvdWxkIGl0IG9ubHkgc3VjY2VlZCBmb3IgcHJlLWV4aXN0aW5nIGRpcmVjdG9yaWVzPwogICAgICMgWFhYIFNob3VsZCBpdCBvbmx5IHdvcmsgZm9yIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZT8KIAogICAgIGRlZiBob29rKHNlbGYsIGVudHJ5KToKLSAgICAgICAgcmV0dXJuIG1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygobWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCiAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICAjIFBhdGggaG9vayBzaG91bGQgaGFuZGxlIGEgZGlyZWN0b3J5IHdoZXJlIGEga25vd24gZXh0ZW5zaW9uIG1vZHVsZQogICAgICAgICAjIGV4aXN0cy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5ob29rKHV0aWwuUEFUSCksICdmaW5kX21vZHVsZScpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhdGhIb29rVGVzdHMpCitGcm96ZW5fUGF0aEhvb2tzVGVzdHMsIFNvdXJjZV9QYXRoSG9va3NUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhdGhIb29rVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQppbmRleCBhMjY2ZGQ5Li44ZDA4OWYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQpAQCAtMSw0ICsxLDMgQEAKLWltcG9ydCBpbXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CmluZGV4IGYwYWJlMGUuLmY5Zjk3ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKQEAgLTEsMTUgKzEsNTIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAorCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgdW5pdHRlc3QKIAogCitjbGFzcyBGaW5kU3BlY1Rlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGZpbmRpbmcgZnJvemVuIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgZmluZChzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfc3BlYyhuYW1lLCBwYXRoKQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnZnJvemVuJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18nKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18uc3BhbScsIFsnX19waGVsbG9fXyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgIyBObyBmcm96ZW4gcGFja2FnZSB3aXRoaW4gYW5vdGhlciBwYWNrYWdlIHRvIHRlc3Qgd2l0aC4KKyAgICB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgTm8gZWFzeSB3YXkgdG8gdGVzdC4KKyAgICB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCc8bm90IHJlYWw+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworRnJvemVuX0ZpbmRTcGVjVGVzdHMsIFNvdXJjZV9GaW5kU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKwogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgZmluZGluZyBmcm96ZW4gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgogICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC0zNSwxMSArNzIsOSBAQAogICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmQoJzxub3QgcmVhbD4nKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQppbmRleCBmM2E4YmY2Li4yYWJiZTkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDE4ICsxLDkzIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAorCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCisKK2ltcG9ydCBzeXMKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgRXhlY01vZHVsZVRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG9yaWdpbj0nZnJvemVuJywKKyAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1zZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5pc19wYWNrYWdlKG5hbWUpKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKG1vZHVsZSwgJ2luaXRpYWxpemVkJykKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19zcGVjX18ub3JpZ2luLCAnZnJvemVuJykKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUsIHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJfdmFsdWUsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB7bmFtZX0ue2F0dHJ9LCB7Z2l2ZW4hcn0gIT0ge2V4cGVjdGVkIXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIGF0dHI9YXR0ciwgZ2l2ZW49YXR0cl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPXZhbHVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKyAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fLnNwYW0nCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJyk6CisgICAgICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKKyAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyX3ZhbHVlLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmb3Ige25hbWV9LnthdHRyfSwge2dpdmVufSAhPSB7ZXhwZWN0ZWQhcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgYXR0cj1hdHRyLCBnaXZlbj1hdHRyX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9dmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtb2R1bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8bW9kdWxlICdfX2hlbGxvX18nIChmcm96ZW4pPiIpCisKKyAgICAjIE5vIHdheSB0byB0cmlnZ2VyIGFuIGVycm9yIGluIGEgZnJvemVuIG1vZHVsZS4KKyAgICB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUgPSBOb25lCisKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmV4ZWNfbW9kdWxlKCdfbm90X3JlYWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnX25vdF9yZWFsJykKKworRnJvemVuX0V4ZWNNb2R1bGVUZXN0cywgU291cmNlX0V4ZWNNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEV4ZWNNb2R1bGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKwogCiBjbGFzcyBMb2FkZXJUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQogICAgICAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogJ19faGVsbG9fXycsCiAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICcnLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQpAQCAtMjEsMTEgKzk2LDExIEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycpLCAgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX3BoZWxsb19fJywKICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICdfX3BoZWxsb19fJywKLSAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFsnX19waGVsbG9fXyddLAotICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKICAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCkBAIC0zOCwxMCArMTEzLDEwIEBACiAgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJywgJ19fcGhlbGxvX18uc3BhbScpLCBcCiAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fLnNwYW0nKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19fcGhlbGxvX18uc3BhbScpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19waGVsbG9fXy5zcGFtJywKICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJ19fcGhlbGxvX18nLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQpAQCAtNTMsMTUgKzEyOCwxNSBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZTEgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCi0gICAgICAgICAgICBtb2R1bGUyID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgbW9kdWxlMSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgbW9kdWxlMiA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUxLCBtb2R1bGUyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hlbGxvIHdvcmxkIVxuSGVsbG8gd29ybGQhXG4nKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHIoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtb2R1bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQogCkBAIC02OSwxMyArMTQ0LDE2IEBACiAgICAgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlID0gTm9uZQogCiAgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgYXNzZXJ0IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZSgnX25vdF9yZWFsJykgaXMgTm9uZQorICAgICAgICBhc3NlcnQgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19ub3RfcmVhbCcpCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX25vdF9yZWFsJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ19ub3RfcmVhbCcpCiAKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWNsYXNzIEluc3BlY3RMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIEluc3BlY3RMb2FkZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciB0aGUgSW5zcGVjdExvYWRlciBtZXRob2RzIGZvciBGcm96ZW5JbXBvcnRlci4iIiIKIApAQCAtODMsMTUgKzE2MSwxNSBAQAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb2RlIG9iamVjdCBpcyBnb29kLgogICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBjb2RlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgY29kZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9jb2RlKG5hbWUpCisgICAgICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBleGVjKGNvZGUsIG1vZC5fX2RpY3RfXykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZCwgJ2luaXRpYWxpemVkJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBTaG91bGQgYWx3YXlzIHJldHVybiBOb25lLgotICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X3NvdXJjZSgnX19oZWxsb19fJykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X3NvdXJjZSgnX19oZWxsb19fJykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKQEAgLTk5LDIyICsxNzcsMjAgQEAKICAgICAgICAgdGVzdF9mb3IgPSAoKCdfX2hlbGxvX18nLCBGYWxzZSksICgnX19waGVsbG9fXycsIFRydWUpLAogICAgICAgICAgICAgICAgICAgICAoJ19fcGhlbGxvX18uc3BhbScsIEZhbHNlKSkKICAgICAgICAgZm9yIG5hbWUsIGlzX3BhY2thZ2UgaW4gdGVzdF9mb3I6Ci0gICAgICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKHJlc3VsdCksIGlzX3BhY2thZ2UpCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFJhaXNlIEltcG9ydEVycm9yIGZvciBtb2R1bGVzIHRoYXQgYXJlIG5vdCBmcm96ZW4uCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtZXRoX25hbWUpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtZXRoX25hbWUpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICBtZXRob2QoJ2ltcG9ydGxpYicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnaW1wb3J0bGliJykKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0lMVGVzdHMsIFNvdXJjZV9JTFRlc3RzID0gdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMThkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weQpAQCAtMCwwICsxLDQ4IEBACitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC4uIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKKworCitjbGFzcyBMb2FkZXJNb2NrOgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gc2VsZi5tb2R1bGUKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgTG9hZGVyQXR0cmlidXRlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fX21pc3Npbmcoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBsb2FkZXIgPSBMb2FkZXJNb2NrKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfX19sb2FkZXJfX19pc19Ob25lKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgIGxvYWRlciA9IExvYWRlck1vY2soKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdibGFoJyksIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbG9hZGVyXSk6CisgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCisKKworRnJvemVuX1Rlc3RzLCBTb3VyY2VfVGVzdHMgPSB1dGlsLnRlc3RfYm90aChMb2FkZXJBdHRyaWJ1dGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKaW5kZXggNzgzY2RlMS4uNWZhNDMyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQpAQCAtOSw3ICs5LDcgQEAKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAogCiAKLWNsYXNzIFVzaW5nX19wYWNrYWdlX18odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVXNpbmdfX3BhY2thZ2VfXzoKIAogICAgICIiIlVzZSBvZiBfX3BhY2thZ2VfXyBzdXBlcmNlZGVzIHRoZSB1c2Ugb2YgX19uYW1lX18vX19wYXRoX18gdG8gY2FsY3VsYXRlCiAgICAgd2hhdCBwYWNrYWdlIGEgbW9kdWxlIGJlbG9uZ3MgdG8uIFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgW19fcGFja2FnZV9fXTo6CkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgICMgW19fcGFja2FnZV9fXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5mYWtlJykKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLmZha2UnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz17J19fcGFja2FnZV9fJzogJ3BrZy5mYWtlJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgICAgICBnbG9iYWxzX1snX19wYWNrYWdlX18nXSA9IE5vbmUKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuZmFrZScpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscz0gZ2xvYmFsc18sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuZmFrZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxzPSBnbG9iYWxzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogCkBAIC02MywxNSArNjMsMTcgQEAKICAgICBkZWYgdGVzdF9iYWRfX3BhY2thZ2VfXyhzZWxmKToKICAgICAgICAgZ2xvYmFscyA9IHsnX19wYWNrYWdlX18nOiAnPG5vdCByZWFsPid9CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQogCiAgICAgZGVmIHRlc3RfYnVua19fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICBnbG9iYWxzID0geydfX3BhY2thZ2VfXyc6IDQyfQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisKK0Zyb3plbl9Vc2luZ1BhY2thZ2UsIFNvdXJjZV9Vc2luZ1BhY2thZ2UgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNpbmdfX3BhY2thZ2VfXywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKLUBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIkJlY2F1c2UgX19wYWNrYWdlX18gaXMgYSBuZXcgZmVhdHVyZSwgaXQgaXMgbm90IGFsd2F5cyBzZXQgYnkgYSBsb2FkZXIuCkBAIC04NCwxMiArODYsMTQgQEAKIAogICAgICIiIgogCisgICAgX19pbXBvcnRfXyA9IGltcG9ydF91dGlsLl9faW1wb3J0X19bMV0KKwogICAgICMgW3RvcC1sZXZlbF0KICAgICBkZWYgdGVzdF90b3BfbGV2ZWwoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWyd0b3BfbGV2ZWwnXS5fX3BhY2thZ2VfXwotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAnJykKIAogICAgICMgW3BhY2thZ2VdCkBAIC05Nyw3ICsxMDEsNyBAQAogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sncGtnJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJ3BrZycpCiAKICAgICAjIFtzdWJtb2R1bGVdCkBAIC0xMDUsMTUgKzEwOSwxMCBAQAogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWydwa2cubW9kJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBwa2cgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kJykKKyAgICAgICAgICAgICAgICBwa2cgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2QnKQogICAgICAgICAgICAgICAgIG1vZHVsZSA9IGdldGF0dHIocGtnLCAnbW9kJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJ3BrZycpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoVXNpbmdfX3BhY2thZ2VfXywgU2V0dGluZ19fcGFja2FnZV9fKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CmluZGV4IDNkNGNkOTQuLmRjOGI4YTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQpAQCAtMSw3ICsxLDcgQEAKLWZyb20gLi4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0bGliX3Rlc3RfdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsCi1pbXBvcnQgaW1wCitmcm9tIC4uIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIApAQCAtMTcsNyArMTcsNyBAQAogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ0kgY2Fubm90IGJlIGxvYWRlZCEnKQogCiAKLWNsYXNzIEFQSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQVBJVGVzdDoKIAogICAgICIiIlRlc3QgQVBJLXNwZWNpZmljIGRldGFpbHMgZm9yIF9faW1wb3J0X18gKGUuZy4gcmFpc2luZyB0aGUgcmlnaHQKICAgICBleGNlcHRpb24gd2hlbiBwYXNzaW5nIGluIGFuIGludCBmb3IgdGhlIG1vZHVsZSBuYW1lKS4iIiIKQEAgLTI1LDQzICsyNSw0MCBAQAogICAgIGRlZiB0ZXN0X25hbWVfcmVxdWlyZXNfcnBhcml0aW9uKHNlbGYpOgogICAgICAgICAjIFJhaXNlIFR5cGVFcnJvciBpZiBhIG5vbi1zdHJpbmcgaXMgcGFzc2VkIGluIGZvciB0aGUgbW9kdWxlIG5hbWUuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwuaW1wb3J0Xyg0MikKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyg0MikKIAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xldmVsKHNlbGYpOgogICAgICAgICAjIFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBhIG5lZ2F0aXZlIGxldmVsIGlzIHNwZWNpZmllZC4KICAgICAgICAgIyBQRVAgMzI4IGRpZCBhd2F5IHdpdGggc3lzLm1vZHVsZSBOb25lIGVudHJpZXMgYW5kIHRoZSBhbWJpZ3VpdHkgb2YKICAgICAgICAgIyBhYnNvbHV0ZS9yZWxhdGl2ZSBpbXBvcnRzLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdvcycsIGdsb2JhbHMoKSwgbGV2ZWw9LTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ29zJywgZ2xvYmFscygpLCBsZXZlbD0tMSkKIAogICAgIGRlZiB0ZXN0X25vbmV4aXN0ZW50X2Zyb21saXN0X2VudHJ5KHNlbGYpOgogICAgICAgICAjIElmIHNvbWV0aGluZyBpbiBmcm9tbGlzdCBkb2Vzbid0IGV4aXN0LCB0aGF0J3Mgb2theS4KICAgICAgICAgIyBpc3N1ZTE1NzE1Ci0gICAgICAgIG1vZCA9IGltcC5uZXdfbW9kdWxlKCdmaW5lJykKKyAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZSgnZmluZScpCiAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFsnWFhYJ10KLSAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgotICAgICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLnVuY2FjaGUoJ2ZpbmUnKToKKyAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ2ZpbmUnKToKICAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZmluZSddID0gbW9kCi0gICAgICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdmaW5lJywgZnJvbWxpc3Q9Wydub3QgaGVyZSddKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnZmluZScsIGZyb21saXN0PVsnbm90IGhlcmUnXSkKIAogICAgIGRlZiB0ZXN0X2Zyb21saXN0X2xvYWRfZXJyb3JfcHJvcGFnYXRlcyhzZWxmKToKICAgICAgICAgIyBJZiBzb21ldGhpbmcgaW4gZnJvbWxpc3QgdHJpZ2dlcnMgYW4gZXhjZXB0aW9uIG5vdCByZWxhdGVkIHRvIG5vdAogICAgICAgICAjIGV4aXN0aW5nLCBsZXQgdGhhdCBleGNlcHRpb24gcHJvcGFnYXRlLgogICAgICAgICAjIGlzc3VlMTUzMTYKLSAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUoJ2ZpbmUnKQorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdmaW5lJykKICAgICAgICAgbW9kLl9fcGF0aF9fID0gWydYWFgnXQotICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bQmFkTG9hZGVyRmluZGVyXSk6Ci0gICAgICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwudW5jYWNoZSgnZmluZScpOgorICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bQmFkTG9hZGVyRmluZGVyXSk6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnZmluZScpOgogICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydmaW5lJ10gPSBtb2QKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdmaW5lJywgZnJvbWxpc3Q9Wydib2d1cyddKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ2ZpbmUnLCBmcm9tbGlzdD1bJ2JvZ3VzJ10pCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChBUElUZXN0KQorRnJvemVuX0FQSVRlc3RzLCBTb3VyY2VfQVBJVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQVBJVGVzdCwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKaW5kZXggMjA3Mzc4YS4uNGQwODJiOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBVc2VDYWNoZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBVc2VDYWNoZToKIAogICAgICIiIldoZW4gaXQgY29tZXMgdG8gc3lzLm1vZHVsZXMsIGltcG9ydCBwcmVmZXJzIGl0IG92ZXIgYW55dGhpbmcgZWxzZS4KIApAQCAtMjEsMTIgKzIxLDEzIEBACiAgICAgSW1wb3J0RXJyb3IgaXMgcmFpc2VkIFtOb25lIGluIGNhY2hlXS4KIAogICAgICIiIgorCiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGUoc2VsZik6CiAgICAgICAgICMgW3VzZSBjYWNoZV0KICAgICAgICAgbW9kdWxlX3RvX3VzZSA9ICJzb21lIG1vZHVsZSBmb3VuZCEiCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdzb21lX21vZHVsZScpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3NvbWVfbW9kdWxlJ10gPSBtb2R1bGVfdG9fdXNlCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdzb21lX21vZHVsZScpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3NvbWVfbW9kdWxlJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlX3RvX3VzZSksIGlkKG1vZHVsZSkpCiAKICAgICBkZWYgdGVzdF9Ob25lX2luX2NhY2hlKHNlbGYpOgpAQCAtMzUsNyArMzYsNyBAQAogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gTm9uZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XyhuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKIAogICAgIGRlZiBjcmVhdGVfbW9jayhzZWxmLCAqbmFtZXMsIHJldHVybl89Tm9uZSk6CkBAIC00Nyw0MiArNDgsNDMgQEAKICAgICAgICAgbW9jay5sb2FkX21vZHVsZSA9IE1ldGhvZFR5cGUobG9hZF9tb2R1bGUsIG1vY2spCiAgICAgICAgIHJldHVybiBtb2NrCiAKK0Zyb3plbl9Vc2VDYWNoZSwgU291cmNlX1VzZUNhY2hlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFVzZUNhY2hlLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKworY2xhc3MgSW1wb3J0bGliVXNlQ2FjaGUoVXNlQ2FjaGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9faW1wb3J0X18gPSBpbXBvcnRfdXRpbC5fX2ltcG9ydF9fWzFdCisKICAgICAjIF9faW1wb3J0X18gaW5jb25zaXN0ZW50IGJldHdlZW4gbG9hZGVycyBhbmQgYnVpbHQtaW4gaW1wb3J0IHdoZW4gaXQgY29tZXMKICAgICAjICAgdG8gd2hlbiB0byB1c2UgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcyBhbmQgd2hlbiBub3QgdG8uCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKHNlbGYpOgogICAgICAgICAjIFtmcm9tIGNhY2hlIG9uIHJldHVybl0KICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9tb2NrKCdtb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZSksIGlkKHN5cy5tb2R1bGVzWydtb2R1bGUnXSkpCiAKICAgICAjIFNlZSB0ZXN0X3VzaW5nX2NhY2hlX2FmdGVyX2xvYWRlcigpIGZvciByZWFzb25pbmcuCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfZm9yX2Fzc2lnbmluZ190b19hdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgdG8gYXR0cmlidXRlXQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlLm1vZHVsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZChzeXMubW9kdWxlc1sncGtnLm1vZHVsZSddKSkKIAogICAgICMgU2VlIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKCkgZm9yIHJlYXNvbmluZy4KLSAgICBAaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZV9mb3JfZnJvbWxpc3Qoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgZm9yIGZyb21saXN0XQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZS5tb2R1bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc3lzLm1vZHVsZXNbJ3BrZy5tb2R1bGUnXSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoVXNlQ2FjaGUpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQppbmRleCBjMTZjMzM3Li5mYzI5Y2U2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CkBAIC0xLDEwICsxLDEwIEBACiAiIiJUZXN0IHRoYXQgdGhlIHNlbWFudGljcyByZWxhdGluZyB0byB0aGUgJ2Zyb21saXN0JyBhcmd1bWVudCBhcmUgY29ycmVjdC4iIiIKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAotaW1wb3J0IGltcAogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFJldHVyblZhbHVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgUmV0dXJuVmFsdWU6CiAKICAgICAiIiJUaGUgdXNlIG9mIGZyb21saXN0IGluZmx1ZW5jZXMgd2hhdCBpbXBvcnQgcmV0dXJucy4KIApAQCAtMTksMTggKzE5LDIxIEBACiAgICAgICAgICMgW2ltcG9ydCByZXR1cm5dCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3JldHVybl9mcm9tX2Zyb21faW1wb3J0KHNlbGYpOgogICAgICAgICAjIFtmcm9tIHJldHVybl0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKWFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZHVsZScpCiAKK0Zyb3plbl9SZXR1cm5WYWx1ZSwgU291cmNlX1JldHVyblZhbHVlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFJldHVyblZhbHVlLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWNsYXNzIEhhbmRsaW5nRnJvbWxpc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBIYW5kbGluZ0Zyb21saXN0OgogCiAgICAgIiIiVXNpbmcgZnJvbWxpc3QgdHJpZ2dlcnMgZGlmZmVyZW50IGFjdGlvbnMgYmFzZWQgb24gd2hhdCBpcyBiZWluZyBhc2tlZAogICAgIG9mIGl0LgpAQCAtNDksMTQgKzUyLDE0IEBACiAgICAgICAgICMgW29iamVjdCBjYXNlXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdtb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdtb2R1bGUnKQogCiAgICAgZGVmIHRlc3Rfbm9uZXhpc3RlbnRfb2JqZWN0KHNlbGYpOgogICAgICAgICAjIFtiYWQgb2JqZWN0XQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdtb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScsIGZyb21saXN0PVsnbm9uX2V4aXN0ZW50J10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ25vbl9leGlzdGVudCddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnbW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnbm9uX2V4aXN0ZW50JykpCiAKQEAgLTY0LDcgKzY3LDcgQEAKICAgICAgICAgIyBbbW9kdWxlXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQpAQCAtNzksMTMgKzgyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cubW9kJzogbW9kdWxlX2NvZGV9KSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2QnXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZCddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lfZG9fbm90X2V4aXN0JywgZXhjLmV4Y2VwdGlvbi5uYW1lKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZCcsIGZyb21saXN0PVsnJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kJywgZnJvbWxpc3Q9WycnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2QnKQogCiAgICAgZGVmIGJhc2ljX3N0YXJfdGVzdChzZWxmLCBmcm9tbGlzdD1bJyonXSk6CkBAIC05Myw3ICs5Niw3IEBACiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgbW9ja1sncGtnJ10uX19hbGxfXyA9IFsnbW9kdWxlJ10KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1mcm9tbGlzdCkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PWZyb21saXN0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKQEAgLTExMSwxNyArMTE0LDE2IEBACiAgICAgICAgIHdpdGggY29udGV4dCBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBtb2NrWydwa2cnXS5fX2FsbF9fID0gWydtb2R1bGUxJ10KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZTInLCAnKiddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUyJywgJyonXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlMScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZTInKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUxLl9fbmFtZV9fLCAncGtnLm1vZHVsZTEnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZTIuX19uYW1lX18sICdwa2cubW9kdWxlMicpCiAKK0Zyb3plbl9Gcm9tTGlzdCwgU291cmNlX0Zyb21MaXN0ID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEhhbmRsaW5nRnJvbWxpc3QsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUmV0dXJuVmFsdWUsIEhhbmRsaW5nRnJvbWxpc3QpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CmluZGV4IDRkODVmODAuLmE1NjI1M2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCB3YXJuaW5ncwogCiAKLWNsYXNzIENhbGxpbmdPcmRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDYWxsaW5nT3JkZXI6CiAKICAgICAiIiJDYWxscyB0byB0aGUgaW1wb3J0ZXJzIG9uIHN5cy5tZXRhX3BhdGggaGFwcGVuIGluIG9yZGVyIHRoYXQgdGhleSBhcmUKICAgICBzcGVjaWZpZWQgaW4gdGhlIHNlcXVlbmNlLCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBpbXBvcnRlcgpAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICAgICAgZmlyc3QubW9kdWxlc1ttb2RdID0gNDIKICAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF0gPSAtMTMKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtmaXJzdCwgc2Vjb25kXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZCksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fX2ltcG9ydF9fKG1vZCksIDQyKQogCiAgICAgZGVmIHRlc3RfY29udGludWluZyhzZWxmKToKICAgICAgICAgIyBbY29udGludWluZ10KQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgIGZpcnN0LmZpbmRfbW9kdWxlID0gbGFtYmRhIHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmU6IE5vbmUKICAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF9uYW1lXSA9IDQyCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bZmlyc3QsIHNlY29uZF0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKSwgNDIpCiAKICAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKICAgICAgICAgIyBSYWlzZSBhbiBJbXBvcnRXYXJuaW5nIGlmIHN5cy5tZXRhX3BhdGggaXMgZW1wdHkuCkBAIC00NiwxMyArNDYsMTYgQEAKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W10pOgogICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW1wb3J0bGliLl9ib290c3RyYXAuX2ZpbmRfbW9kdWxlKCdub3RoaW5nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW1wb3J0bGliLl9ib290c3RyYXAuX2ZpbmRfc3BlYygnbm90aGluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3Wy0xXS5jYXRlZ29yeSwgSW1wb3J0V2FybmluZykpCiAKK0Zyb3plbl9DYWxsaW5nT3JkZXIsIFNvdXJjZV9DYWxsaW5nT3JkZXIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbGluZ09yZGVyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWNsYXNzIENhbGxTaWduYXR1cmUodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBDYWxsU2lnbmF0dXJlOgogCiAgICAgIiIiSWYgdGhlcmUgaXMgbm8gX19wYXRoX18gZW50cnkgb24gdGhlIHBhcmVudCBtb2R1bGUsIHRoZW4gJ3BhdGgnIGlzIE5vbmUKICAgICBbbm8gcGF0aF0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGZvciBfX3BhdGhfXyBpcyBwYXNzZWQgaW4gZm9yIHRoZSAncGF0aCcKQEAgLTc0LDcgKzc3LDcgQEAKICAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2coaW1wb3J0ZXIuZmluZF9tb2R1bGUpCiAgICAgICAgICAgICBpbXBvcnRlci5maW5kX21vZHVsZSA9IE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8obW9kX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obG9nKSA9PSAxCiAgICAgICAgICAgICAgICAgYXJncyA9IGxvZ1swXVswXQogICAgICAgICAgICAgICAgIGt3YXJncyA9IGxvZ1swXVsxXQpAQCAtOTUsNyArOTgsNyBAQAogICAgICAgICAgICAgbG9nLCB3cmFwcGVkX2NhbGwgPSBzZWxmLmxvZyhpbXBvcnRlci5maW5kX21vZHVsZSkKICAgICAgICAgICAgIGltcG9ydGVyLmZpbmRfbW9kdWxlID0gTWV0aG9kVHlwZSh3cmFwcGVkX2NhbGwsIGltcG9ydGVyKQogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihsb2cpID09IDIKICAgICAgICAgICAgICAgICBhcmdzID0gbG9nWzFdWzBdCiAgICAgICAgICAgICAgICAga3dhcmdzID0gbG9nWzFdWzFdCkBAIC0xMDQsMTIgKzEwNyw5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzWzBdLCBtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGFyZ3NbMV0sIHBhdGgpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChDYWxsaW5nT3JkZXIsIENhbGxTaWduYXR1cmUpCitGcm96ZW5fQ2FsbFNpZ25hdHVyZSwgU291cmNlX0NhbGxTaWduYXR1cmUgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbFNpZ25hdHVyZSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQppbmRleCBiZmExOGRjLi4yZGY0MjFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CkBAIC02LDIxICs2LDIxIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogCi1jbGFzcyBQYXJlbnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXJlbnRNb2R1bGVUZXN0czoKIAogICAgICIiIkltcG9ydGluZyBhIHN1Ym1vZHVsZSBzaG91bGQgaW1wb3J0IHRoZSBwYXJlbnQgbW9kdWxlcy4iIiIKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwa2cnLCBzeXMubW9kdWxlcykKIAogICAgIGRlZiB0ZXN0X2JhZF9wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9yYWlzaW5nX3BhcmVudF9hZnRlcl9pbXBvcnRpbmdfY2hpbGQoc2VsZik6CkBAIC0zMiwxMSArMzIsMTEgQEAKICAgICAgICAgd2l0aCBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncGtnLm1vZHVsZScsIHN5cy5tb2R1bGVzKQogCkBAIC01MSwxMCArNTEsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLiBpbXBvcnQgbW9kdWxlIgogICAgICAgICAgICAgICAgICAgICAjIGxpbmUsIG5vdCBzdXJlIHdoeS4KLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICAjIFhYWCBGYWxzZQogICAgICAgICAgICAgICAgICNzZWxmLmFzc2VydEluKCdwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLi5zdWJwa2cgaW1wb3J0IG1vZHVsZSIKICAgICAgICAgICAgICAgICAgICAgIyBsaW5lLCBub3Qgc3VyZSB3aHkuCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5zdWJwa2cnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZy5zdWJwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLnN1YnBrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cuc3VicGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgIyBYWFggRmFsc2UKICAgICAgICAgICAgICAgICAjc2VsZi5hc3NlcnRJbigncGtnLnN1YnBrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgIyBUcnkgdG8gaW1wb3J0IGEgc3VibW9kdWxlIGZyb20gYSBub24tcGFja2FnZSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzeXMsICdfX3BhdGhfXycpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xygnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfbm90X3BhY2thZ2VfYnV0X3NpZGVfZWZmZWN0cyhzZWxmKToKQEAgLTk4LDE1ICs5OCwxMyBAQAogICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcyBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oc3VibmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKHN1Ym5hbWUpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxvYWQoc3VibmFtZSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQYXJlbnRNb2R1bGVUZXN0cykKK0Zyb3plbl9QYXJlbnRUZXN0cywgU291cmNlX1BhcmVudFRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhcmVudE1vZHVsZVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQppbmRleCBkODJiN2Y2Li4xNGZkYWEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQpAQCAtMSw4ICsxLDkgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1mcm9tIGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCisKK2ltcG9ydGxpYiA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQpAQCAtMTEsNyArMTIsNyBAQAogaW1wb3J0IHppcGltcG9ydAogCiAKLWNsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEZpbmRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIFBhdGhGaW5kZXIuIiIiCiAKQEAgLTE5LDcgKzIwLDcgQEAKICAgICAgICAgIyBUZXN0IE5vbmUgcmV0dXJuZWQgdXBvbiBub3QgZmluZGluZyBhIHN1aXRhYmxlIGZpbmRlci4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCiAKICAgICBkZWYgdGVzdF9zeXNfcGF0aChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGggaXMgdXNlZCB3aGVuICdwYXRoJyBpcyBOb25lLgpAQCAtMjksNyArMzAsNyBAQAogICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1bcGF0aF0pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCiAKICAgICBkZWYgdGVzdF9wYXRoKHNlbGYpOgpAQCAtMzksNyArNDAsNyBAQAogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwogICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfbGlzdChzZWxmKToKQEAgLTQ5LDcgKzUwLDcgQEAKICAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogaW1wb3J0ZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCiAKICAgICBkZWYgdGVzdF9wYXRoX2hvb2tzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aF9ob29rcyBpcyB1c2VkLgpAQCAtNTksNyArNjAsNyBAQAogICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKICAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKHBhdGgsIGltcG9ydGVyPWltcG9ydGVyKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaG9va3M9W2hvb2tdKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aCwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdLCBpbXBvcnRlcikKQEAgLTcyLDcgKzczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtwYXRoX2VudHJ5XSk6CiAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgogICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignYWx3YXlzJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnb3MnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdvcycpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhfZW50cnldKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbLTFdLmNhdGVnb3J5LCBJbXBvcnRXYXJuaW5nKSkKQEAgLTgyLDExICs4MywxMSBAQAogICAgICAgICBwYXRoID0gJycKICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQotICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2sob3MuY3VyZGlyLCBpbXBvcnRlcj1pbXBvcnRlcikKKyAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKG9zLmdldGN3ZCgpLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoPVtwYXRoXSwgcGF0aF9ob29rcz1baG9va10pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmN1cmRpciwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmdldGN3ZCgpLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKIAogICAgIGRlZiB0ZXN0X05vbmVfb25fc3lzX3BhdGgoc2VsZik6CiAgICAgICAgICMgUHV0dGluZyBOb25lIGluIHN5cy5wYXRoWzBdIGNhdXNlZCBhbiBpbXBvcnQgcmVncmVzc2lvbiBmcm9tIFB5dGhvbgpAQCAtOTYsOCArOTcsOCBAQAogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZSA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNvcHkoKQogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZS5wb3AoTm9uZSwgTm9uZSkKICAgICAgICAgbmV3X3BhdGhfaG9va3MgPSBbemlwaW1wb3J0LnppcGltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkZpbGVGaW5kZXIucGF0aF9ob29rKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKl9ib290c3RyYXAuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpKV0KICAgICAgICAgbWlzc2luZyA9IG9iamVjdCgpCiAgICAgICAgIGVtYWlsID0gc3lzLm1vZHVsZXMucG9wKCdlbWFpbCcsIG1pc3NpbmcpCiAgICAgICAgIHRyeToKQEAgLTEwNSwxNiArMTA2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9bmV3X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaW1wb3J0ZXJfY2FjaGU9bmV3X3BhdGhfaW1wb3J0ZXJfY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3M9bmV3X3BhdGhfaG9va3MpOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF9tb2R1bGUoJ2VtYWlsJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdlbWFpbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZSwgTW9kdWxlVHlwZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIGVtYWlsIGlzIG5vdCBtaXNzaW5nOgogICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydlbWFpbCddID0gZW1haWwKIAorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHMsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CmluZGV4IDQ1NjljMjYuLmZjNmQyNWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFJlbGF0aXZlSW1wb3J0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSZWxhdGl2ZUltcG9ydHM6CiAKICAgICAiIiJQRVAgMzI4IGludHJvZHVjZWQgcmVsYXRpdmUgaW1wb3J0cy4gVGhpcyBhbGxvd3MgZm9yIGltcG9ydHMgdG8gb2NjdXIKICAgICBmcm9tIHdpdGhpbiBhIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgYWN0dWFsIHBhY2thZ2UgbmFtZS4KQEAgLTc2LDggKzc2LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kMicKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2QxJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kMiddLCBsZXZlbD0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZDInXSwgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZDInKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZDIuYXR0ciwgJ3BrZy5tb2QyJykKQEAgLTg4LDggKzg4LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kMicKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2QxJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZDInLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kMicsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kMicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCAncGtnLm1vZDInKQpAQCAtMTAxLDggKzEwMSw4IEBACiAgICAgICAgIGdsb2JhbHNfID0gKHsnX19wYWNrYWdlX18nOiAncGtnJ30sCiAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnJywgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2R1bGUnXSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2R1bGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQpAQCAtMTE0LDggKzExNCw4IEBACiAgICAgICAgIGNyZWF0ZSA9ICdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2R1bGUnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgZ2xvYmFsc18gPSAgKHsnX19wYWNrYWdlX18nOiAncGtnLnN1YnBrZzEnfSwKICAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnLnN1YnBrZzEnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnc3VicGtnMiddLAorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3N1YnBrZzInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ3N1YnBrZzInKSkKQEAgLTE0Miw4ICsxNDIsOCBAQAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZy5wa2cxLnBrZzIucGtnMy5wa2c0LnBrZzUnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKGdsb2JhbHNfWzBdWydfX3BhY2thZ2VfXyddKQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTYpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oZ2xvYmFsc19bMF1bJ19fcGFja2FnZV9fJ10pCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD02KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xNTMsOSArMTUzLDkgQEAKICAgICAgICAgZ2xvYmFsc18gPSAoeydfX3BhY2thZ2VfXyc6ICdwa2cnfSwKICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIApAQCAtMTY0LDE2ICsxNjQsMTYgQEAKICAgICAgICAgY3JlYXRlID0gWyd0b3BfbGV2ZWwnLCAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnXQogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZHVsZSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIAogICAgIGRlZiB0ZXN0X2VtcHR5X25hbWVfd19sZXZlbF8wKHNlbGYpOgogICAgICAgICAjIFtlbXB0eSBuYW1lXQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJykKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tX2RpZmZlcmVudF9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZSB0aGFuIHRoZSBjYWxsZXIuCkBAIC0xODYsOCArMTg2LDggQEAKICAgICAgICAgICAgICAgICAgICAgJ19fcnVucHlfcGtnX18udW5jbGUuY291c2luLm5lcGhldyddCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nKQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygndW5jbGUuY291c2luJywgZ2xvYmFsc18sIHt9LAorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCd1bmNsZS5jb3VzaW4nLCBnbG9iYWxzXywge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ25lcGhldyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdfX3J1bnB5X3BrZ19fLnVuY2xlLmNvdXNpbicpCkBAIC0xOTgsMjAgKzE5OCwxOSBAQAogICAgICAgICBjcmVhdGUgPSBbJ2NyYXNoLl9faW5pdF9fJywgJ2NyYXNoLm1vZCddCiAgICAgICAgIGdsb2JhbHNfID0gW3snX19wYWNrYWdlX18nOiAnY3Jhc2gnLCAnX19uYW1lX18nOiAnY3Jhc2gnfV0KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnY3Jhc2gnKQotICAgICAgICAgICAgbW9kID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kJywgZ2xvYmFsXywge30sIFtdLCAxKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdjcmFzaCcpCisgICAgICAgICAgICBtb2QgPSBzZWxmLl9faW1wb3J0X18oJ21vZCcsIGdsb2JhbF8sIHt9LCBbXSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fbmFtZV9fLCAnY3Jhc2gubW9kJykKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydF9ub19nbG9iYWxzKHNlbGYpOgogICAgICAgICAjIE5vIGdsb2JhbHMgZm9yIGEgcmVsYXRpdmUgaW1wb3J0IGlzIGFuIGVycm9yLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3N5cycsIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3N5cycsIGxldmVsPTEpCiAKK0Zyb3plbl9SZWxhdGl2ZUltcG9ydHMsIFNvdXJjZV9SZWxhdGl2ZUltcG9ydHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmVsYXRpdmVJbXBvcnRzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFJlbGF0aXZlSW1wb3J0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CmluZGV4IDg2YWMwNjUuLmRjYjQ5MGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKQEAgLTEsMjIgKzEsMTQgQEAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKKworZnJvemVuX2ltcG9ydGxpYiwgc291cmNlX2ltcG9ydGxpYiA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKKworaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgdW5pdHRlc3QKIAogCi11c2luZ19fX2ltcG9ydF9fID0gRmFsc2UKLQotCi1kZWYgaW1wb3J0XygqYXJncywgKiprd2FyZ3MpOgotICAgICIiIkRlbGVnYXRlIHRvIGFsbG93IGZvciBpbmplY3RpbmcgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZiBpbXBvcnQuIiIiCi0gICAgaWYgdXNpbmdfX19pbXBvcnRfXzoKLSAgICAgICAgcmV0dXJuIF9faW1wb3J0X18oKmFyZ3MsICoqa3dhcmdzKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBpbXBvcnRsaWIuX19pbXBvcnRfXygqYXJncywgKiprd2FyZ3MpCi0KLQotZGVmIGltcG9ydGxpYl9vbmx5KGZ4bik6Ci0gICAgIiIiRGVjb3JhdG9yIHRvIHNraXAgYSB0ZXN0IGlmIHVzaW5nIF9fYnVpbHRpbnNfXy5fX2ltcG9ydF9fLiIiIgotICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYodXNpbmdfX19pbXBvcnRfXywgImltcG9ydGxpYi1zcGVjaWZpYyB0ZXN0IikoZnhuKQorX19pbXBvcnRfXyA9IHN0YXRpY21ldGhvZChidWlsdGlucy5fX2ltcG9ydF9fKSwgc3RhdGljbWV0aG9kKHNvdXJjZV9pbXBvcnRsaWIuX19pbXBvcnRfXykKIAogCiBkZWYgbW9ja19wYXRoX2hvb2soKmVudHJpZXMsIGltcG9ydGVyKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDkxMmI2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MDYgKzAsMCBAQAotaW1wb3J0IGltcG9ydGxpYgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotCi1mcm9tIC4uIGltcG9ydCBhYmMgYXMgdGVzdGluZ19hYmMKLWZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW5zcGVjdAotaW1wb3J0IGlvCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdHlwZXMKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHdhcm5pbmdzCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlck1vY2soYWJjLlNvdXJjZUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6Ci0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHNlbGYucGF0aCA9PSBwYXRoCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gJzxtb2R1bGU+JwotCi0KLWNsYXNzIFNvdXJjZUxvYWRlck1vY2soU291cmNlT25seUxvYWRlck1vY2spOgotCi0gICAgc291cmNlX210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPWltcC5nZXRfbWFnaWMoKSk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKLSAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKLSAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQotICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgc2VsZi53cml0dGVuID0ge30KLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQotICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgcGF0aCA9PSBzZWxmLnBhdGgKLSAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQotCi0gICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgotICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQotICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKLQotCi1jbGFzcyBQeUxvYWRlck1vY2soYWJjLlB5TG9hZGVyKToKLQotICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KLSAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fcGFja2FnZV9fLCAiCi0gICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiVGFrZSBhIGRpY3Qgb2YgJ21vZHVsZV9uYW1lOiBwYXRoJyBwYWlyaW5ncy4KLQotICAgICAgICBQYXRocyBzaG91bGQgaGF2ZSBubyBmaWxlIGV4dGVuc2lvbiwgYWxsb3dpbmcgcGFja2FnZXMgdG8gYmUgZGVub3RlZCBieQotICAgICAgICBlbmRpbmcgaW4gJ19faW5pdF9fJy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5tb2R1bGVfcGF0aHMgPSBkYXRhCi0gICAgICAgIHNlbGYucGF0aF90b19tb2R1bGUgPSB7dmFsOmtleSBmb3Iga2V5LHZhbCBpbiBkYXRhLml0ZW1zKCl9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYucGF0aF90b19tb2R1bGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF9maWxlbmFtZShuYW1lKSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdID09ICdfX2luaXRfXycKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJTaWxlbmNlIGRlcHJlY2F0aW9uIHdhcm5pbmcuIiIiCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICBwYXRoID0gc3VwZXIoKS5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgICAgIGFzc2VydCBsZW4odykgPT0gMQotICAgICAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdE1vY2soUHlMb2FkZXJNb2NrKToKLQotICAgICIiIk1vY2sgdGhhdCBtYXRjaGVzIHdoYXQgaXMgc3VnZ2VzdGVkIHRvIGhhdmUgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlCi0gICAgZnJvbSBQeXRob24gMy4xIG9ud2FyZHMuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW2Z1bGxuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFB5UHljTG9hZGVyTW9jayhhYmMuUHlQeWNMb2FkZXIsIFB5TG9hZGVyTW9jayk6Ci0KLSAgICBkZWZhdWx0X210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgYmM9e30pOgotICAgICAgICAiIiJJbml0aWFsaXplIG1vY2suCi0KLSAgICAgICAgJ2JjJyBpcyBhIGRpY3Qga2V5ZWQgb24gYSBtb2R1bGUncyBuYW1lLiBUaGUgdmFsdWUgaXMgZGljdCB3aXRoCi0gICAgICAgIHBvc3NpYmxlIGtleXMgb2YgJ3BhdGgnLCAnbXRpbWUnLCAnbWFnaWMnLCBhbmQgJ2JjJy4gRXhjZXB0IGZvciAncGF0aCcsCi0gICAgICAgIGVhY2ggb2YgdGhvc2Uga2V5cyBjb250cm9sIGlmIGFueSBwYXJ0IG9mIGNyZWF0ZWQgYnl0ZWNvZGUgaXMgdG8KLSAgICAgICAgZGV2aWF0ZSBmcm9tIGRlZmF1bHQgdmFsdWVzLgotCi0gICAgICAgICIiIgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNvdXJjZSkKLSAgICAgICAgc2VsZi5tb2R1bGVfYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLnBhdGhfdG9fYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGggPSB7fQotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBiYy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlW2RhdGFbJ3BhdGgnXV0gPSBuYW1lCi0gICAgICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0gPSBkYXRhWydwYXRoJ10KLSAgICAgICAgICAgIG1hZ2ljID0gZGF0YS5nZXQoJ21hZ2ljJywgaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3dfbG9uZyhkYXRhLmdldCgnbXRpbWUnLCBzZWxmLmRlZmF1bHRfbXRpbWUpKQotICAgICAgICAgICAgc291cmNlX3NpemUgPSBpbXBvcnRsaWIuX3dfbG9uZyhsZW4oc2VsZi5zb3VyY2UpICYgMHhGRkZGRkZGRikKLSAgICAgICAgICAgIGlmICdiYycgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBiYyA9IGRhdGFbJ2JjJ10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYmMgPSBzZWxmLmNvbXBpbGVfYmMobmFtZSkKLSAgICAgICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gbWFnaWMgKyBtdGltZSArIHNvdXJjZV9zaXplICsgYmMKLQotICAgIGRlZiBjb21waWxlX2JjKHNlbGYsIG5hbWUpOgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYubW9kdWxlX3BhdGhzLmdldChuYW1lLCAnPHRlc3Q+Jykgb3IgJzx0ZXN0PicKLSAgICAgICAgY29kZSA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNvdXJjZV9wYXRoLCAnZXhlYycpCi0gICAgICAgIHJldHVybiBtYXJzaGFsLmR1bXBzKGNvZGUpCi0KLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9tdGltZQotICAgICAgICBlbGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfcGF0aHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gYnl0ZWNvZGUKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoIGluIHNlbGYucGF0aF90b19ieXRlY29kZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhdGhfdG9fYnl0ZWNvZGVbcGF0aF0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UobmFtZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAnX19pbml0X18nIGluIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIG5hbWUpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzdXBlcigpLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAotCi1jbGFzcyBQeUxvYWRlclRlc3RzKHRlc3RpbmdfYWJjLkxvYWRlclRlc3RzKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJNb2NrCi0KLSAgICBkZWYgZXFfYXR0cnMoc2VsZiwgb2IsICoqa3dhcmdzKToKLSAgICAgICAgZm9yIGF0dHIsIHZhbCBpbiBrd2FyZ3MuaXRlbXMoKToKLSAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihvYiwgYXR0cikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgInt9IGF0dHJpYnV0ZToge30gIT0ge30iLmZvcm1hdChhdHRyLCBmb3VuZCwgdmFsKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8bW9kdWxlPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignJywgJ3BhdGgnLCAndG8nLCAnbW9kdWxlJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189JycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8cGtnPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsIG5hbWUsICdfX2luaXRfXycpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsCi0gICAgICAgICAgICAgICAgX19wYXRoX189W29zLnBhdGguZGlybmFtZShwYXRoKV0sIF9fcGFja2FnZV9fPW5hbWUsCi0gICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAncGtnLm1vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdwa2cnLCAnbW9kJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189J3BrZycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKQotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBsb2FkZWRfbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWRfbW9kdWxlLCBtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCi0gICAgICAgIHJldHVybiBtb2NrLCBuYW1lCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBuYW1lID0gIm1vZCIKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9kdWxlLmJsYWggPSBOb25lCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYmxhaCcpKQotICAgICAgICByZXR1cm4gbW9jawotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICByZXR1cm4gbW9jawotCi0KLWNsYXNzIFB5TG9hZGVyQ29tcGF0VGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgdGhlIHN1Z2dlc3RlZCBjb2RlIHRvIG1ha2UgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlIGZyb20KLSAgICBQeXRob24gMy4xIGZvcndhcmQgd29ya3MuIiIiCi0KLSAgICBtb2NrZXIgPSBQeUxvYWRlckNvbXBhdE1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckludGVyZmFjZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gc291cmNlX3BhdGgoKQotICAgIGRvZXNuJ3QgcmV0dXJuIGEgcGF0aCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgZGVmIHRlc3Rfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgTm8gc291cmNlIHBhdGggc2hvdWxkIGxlYWQgdG8gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHt9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfaXNfTm9uZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJldHVybiB3aGF0IHNvdXJjZV9wYXRoKCkgcmV0dXJucy4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnc291cmNlJykKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9maWxlbmFtZShuYW1lKSwgcGF0aCkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV9ub19zb3VyY2VfcGF0aChzZWxmKToKLSAgICAgICAgIyBnZXRfZmlsZW5hbWUoKSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IgaWYgc291cmNlX3BhdGggcmV0dXJucyBOb25lLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFB5UHljTG9hZGVyVGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5UHljTG9hZGVyTW9jawotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB2ZXJpZnlfYnl0ZWNvZGUoc2VsZiwgbW9jaywgbmFtZSk6Ci0gICAgICAgIGFzc2VydCBuYW1lIGluIG1vY2subW9kdWxlX3BhdGhzCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCAxKQotICAgICAgICBzb3VyY2Vfc2l6ZSA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzg6MTJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vY2suc291cmNlKSAmIDB4RkZGRkZGRkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLl9yX2xvbmcoc291cmNlX3NpemUpKQotICAgICAgICBiYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzEyOl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYywgbW9jay5jb21waWxlX2JjKG5hbWUpKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X3BhY2thZ2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG1vY2ssIG5hbWUgPSBzdXBlcigpLnRlc3RfbGFja2luZ19wYXJlbnQoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZV9yZXVzZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSgpCi0KLSAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3RfdW5sb2FkYWJsZSgpCi0KLQotY2xhc3MgUHlQeWNMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGZvciB0aGUgaW50ZXJmYWNlIG9mIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lX2NoZWNrKHNlbGYsIHNyY19wYXRoLCBiY19wYXRoLCBleHBlY3QpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogc3JjX3BhdGh9LCB7bmFtZTogeydwYXRoJzogYmNfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIGFzc2VydCBtb2NrLnNvdXJjZV9wYXRoKG5hbWUpID09IHNyY19wYXRoCi0gICAgICAgICAgICBhc3NlcnQgbW9jay5ieXRlY29kZV9wYXRoKG5hbWUpID09IGJjX3BhdGgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIGV4cGVjdCkKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdoZW4gc291cmNlIGFuZCBieXRlY29kZSBwYXRocyBwcmVzZW50LCByZXR1cm4gdGhlIHNvdXJjZSBwYXRoLgotICAgICAgICBzZWxmLmdldF9maWxlbmFtZV9jaGVjaygnc291cmNlX3BhdGgnLCAnYmNfcGF0aCcsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9ub19iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIHNvdXJjZSBidXQgbm8gYmMsIHJldHVybiBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgTm9uZSwgJ3NvdXJjZV9wYXRoJykKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfbm9fc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdpdGggbm90IHNvdXJjZSBidXQgYmMsIHJldHVybiB0aGUgYmMgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soTm9uZSwgJ2JjX3BhdGgnLCAnYmNfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9vcl9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vIHNvdXJjZSBvciBiYywgcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IE5vbmV9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpCi0KLQotY2xhc3MgU2tpcFdyaXRpbmdCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgdGhhdCBieXRlY29kZSBpcyBwcm9wZXJseSBoYW5kbGVkIGJhc2VkIG9uCi0gICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBkb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydElzTm90KG5hbWUgaW4gbW9jay5tb2R1bGVfYnl0ZWNvZGUsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KFRydWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KEZhbHNlKQotCi0KLWNsYXNzIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcmVnZW5lcmF0ZWQgYXMgZXhwZWN0ZWQuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3RfZGlmZmVyZW50X21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgZGlmZmVyZW50IG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBuZXcgYnl0ZWNvZGUuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYWRfbWFnaWMgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGFzc2VydCBiYWRfbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QuYnl0ZWNvZGUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFnaWMnOiBiYWRfbWFnaWN9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdGVzdF9vbGRfbXRpbWUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgd2l0aCBhbiBvbGRlciBtdGltZSBzaG91bGQgYmUgcmVnZW5lcmF0ZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBvbGRfbXRpbWUgPSBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSAtIDEKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSwKLSAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogJ3BhdGgvdG8vbW9kLmJ5dGVjb2RlJywgJ210aW1lJzogb2xkX210aW1lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtdGltZSA9IGltcG9ydGxpYi5fcl9sb25nKG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzQ6OF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIFB5UHljTG9hZGVyTW9jay5kZWZhdWx0X210aW1lKQotCi0KLWNsYXNzIEJhZEJ5dGVjb2RlRmFpbHVyZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgaW1wb3J0IGZhaWx1cmVzIHdoZW4gdGhlcmUgaXMgbm8gc291cmNlIGFuZCBwYXJ0cyBvZiB0aGUgYnl0ZWNvZGUKLSAgICBpcyBiYWQuIiIiCi0KLSAgICBkZWYgdGVzdF9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgQSBiYWQgbWFnaWMgbnVtYmVyIHNob3VsZCBsZWFkIHRvIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiYyA9IHtuYW1lOgotICAgICAgICAgICAgICAgIHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwKLSAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgTWlzc2luZyBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhbiBFT0ZFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJjID0ge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwgJ2JjJzogYicnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1hbGZvcm1lZCBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhIFZhbHVlRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInMTIzNCd9fQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwgYmMpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1kZWYgcmFpc2VfSW1wb3J0RXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKLSAgICByYWlzZSBJbXBvcnRFcnJvcgotCi1jbGFzcyBNaXNzaW5nUGF0aHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGEgc291cmNlIG9yIGJ5dGVjb2RlIHBhdGggZG9lcyBub3QgZXhpc3QgKGVpdGhlcgotICAgIGZyb20gKl9wYXRoIHJldHVybmluZyBOb25lIG9yIHJhaXNpbmcgSW1wb3J0RXJyb3IpLiIiIgotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfTm9uZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBzaG91bGQgYmUgdXNlZCB3aGVuIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZSwgYWxvbmcgd2l0aAotICAgICAgICAjIF9fZmlsZV9fIGJlaW5nIHNldCB0byB0aGUgYnl0ZWNvZGUgcGF0aC4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSAncGF0aC90by9tb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCB7bmFtZTogeydwYXRoJzogYnl0ZWNvZGVfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIGJ5dGVjb2RlX3BhdGgpCi0KLSAgICAjIFRlc3RpbmcgZm9yIGJ5dGVjb2RlX3BhdGggcmV0dXJuaW5nIE5vbmUgaGFuZGxlZCBieSBhbGwgdGVzdHMgd2hlcmUgbm8KLSAgICAjIGJ5dGVjb2RlIGluaXRpYWxseSBleGlzdHMuCi0KLSAgICBkZWYgdGVzdF9hbGxfcGF0aHNfTm9uZShzZWxmKToKLSAgICAgICAgIyBJZiBhbGwgKl9wYXRoIG1ldGhvZHMgcmV0dXJuIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIHNvdXJjZV9wYXRoIHNob3VsZCB0cmlnZ2VyIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7fSwge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZCcpfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV9wYXRoX0ltcG9ydEVycm9yKHNlbGYpOgotICAgICAgICAjIEFuIEltcG9ydEVycm9yIGZyb20gYnl0ZWNvZGVfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIGJhZF9tZXRoID0gdHlwZXMuTWV0aG9kVHlwZShyYWlzZV9JbXBvcnRFcnJvciwgbW9jaykKLSAgICAgICAgbW9jay5ieXRlY29kZV9wYXRoID0gYmFkX21ldGgKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6Ci0gICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCi0gICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQotICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCi0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKLSAgICAgICAgc2VsZi5jYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKLQotICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKLSAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAotICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCi0gICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCi0gICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCi0gICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLQotCi1jbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgotCi0gICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KLQotICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKLSAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jawotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgotICAgICAgICAjIElmIGFuIElPRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKLSAgICAgICAgZGVmIHJhaXNlX0lPRXJyb3IocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfSU9FcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCi0KLSAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgotICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKLQotICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgotICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKLSAgICAgICAgIyBMb2FkaW5nIGEgbW9kdWxlIHNob3VsZCBzZXQgX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLAotICAgICAgICAjIF9fcGF0aF9fIChmb3IgcGFja2FnZXMpLCBfX2ZpbGVfXywgYW5kIF9fY2FjaGVkX18uCi0gICAgICAgICMgVGhlIG1vZHVsZSBzaG91bGQgYWxzbyBiZSBwdXQgaW50byBzeXMubW9kdWxlcy4KLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgW29zLnBhdGguZGlybmFtZShzZWxmLnBhdGgpXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzeXMubW9kdWxlcykKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Vfc2V0dGluZ3Moc2VsZik6Ci0gICAgICAgICMgX19wYWNrYWdlX18gbmVlZHMgdG8gYmUgc2V0LCB3aGlsZSBfX3BhdGhfXyBpcyBzZXQgb24gaWYgdGhlIG1vZHVsZQotICAgICAgICAjIGlzIGEgcGFja2FnZS4KLSAgICAgICAgIyBUZXN0aW5nIHRoZSB2YWx1ZXMgZm9yIGEgcGFja2FnZSBhcmUgY292ZXJlZCBieSB0ZXN0X2xvYWRfbW9kdWxlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgotICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCi0gICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCi0gICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKLSAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAic3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgaXMgdHJ1ZSIpCi1jbGFzcyBTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIncyB1c2Ugb2YgYnl0ZWNvZGUuCi0KLSAgICBTb3VyY2Utb25seSB0ZXN0aW5nIGhhbmRsZWQgYnkgU291cmNlT25seUxvYWRlclRlc3RzLgotCi0gICAgIiIiCi0KLSAgICBsb2FkZXJfbW9jayA9IFNvdXJjZUxvYWRlck1vY2sKLQotICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6Ci0gICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgotICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKLSAgICAgICAgIyBTYW5pdHkgY2hlY2sKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgotICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKLSAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCi0gICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCi0gICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCi0gICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKLSAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCi0KLSAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKLSAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgSU9FcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KLSAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgotICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgICAgICByYWlzZSBleGMKLSAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCi0KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJwotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLSAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jaygibW9kLmZpbGUiKQotICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IExhdGluLTFcbng9J8O8JyIKLSAgICAgICAgYXNzZXJ0IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKSAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgotICAgICAgICAjIFBFUCAzMDIgc2F5cyB1bml2ZXJzYWwgbmV3bGluZXMgc2hvdWxkIGJlIHVzZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKLQotCi1jbGFzcyBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoZSBjb25jcmV0ZSBhYnN0cmFjdG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuIiIiCi0KLSAgICBjbGFzcyBNZXRhUGF0aEZpbmRlcihhYmMuTWV0YVBhdGhGaW5kZXIpOgotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKLQotICAgIGNsYXNzIFBhdGhFbnRyeUZpbmRlcihhYmMuUGF0aEVudHJ5RmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShfKQotCi0gICAgICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9sb2FkZXIoXykKLQotICAgIGNsYXNzIEZpbmRlcihhYmMuRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBMb2FkZXIoYWJjLkxvYWRlcik6Ci0gICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgICAgIHN1cGVyKCkubW9kdWxlX3JlcHIobW9kdWxlKQotCi0gICAgY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9kYXRhKF8pCi0KLSAgICBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlciwgYWJjLkluc3BlY3RMb2FkZXIpOgotICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuaXNfcGFja2FnZShfKQotCi0gICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2NvZGUoXykKLQotICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X3NvdXJjZShfKQotCi0gICAgY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZmlsZW5hbWUoXykKLQotICAgIGNsYXNzIFNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyLCBhYmMuU291cmNlTG9hZGVyKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgUHlMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEluc3BlY3RMb2FkZXIsIGFiYy5QeUxvYWRlcik6Ci0gICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuc291cmNlX3BhdGgoXykKLQotICAgIGNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyLCBhYmMuUHlQeWNMb2FkZXIpOgotICAgICAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuYnl0ZWNvZGVfcGF0aChfKQotCi0gICAgICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9tdGltZShfKQotCi0gICAgICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBfLCBfMik6Ci0gICAgICAgICAgICBzdXBlcigpLndyaXRlX2J5dGVjb2RlKF8sIF8yKQotCi0gICAgZGVmIHJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYsIGlucywgKmFyZ3MpOgotICAgICAgICBmb3IgbWV0aG9kX25hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoaW5zLCBtZXRob2RfbmFtZSkKLSAgICAgICAgICAgIGFyZ19jb3VudCA9IGxlbihpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG1ldGhvZClbMF0pIC0gMQotICAgICAgICAgICAgYXJncyA9IFsnJ10gKiBhcmdfY291bnQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtZXRob2QoKmFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1zZyA9ICJ7fS57fSBkaWQgbm90IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IiCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZy5mb3JtYXQoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgbWV0aG9kX25hbWUpKQotCi0gICAgZGVmIHRlc3RfTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuTG9hZGVyKCksICdsb2FkX21vZHVsZScpCi0KLSAgICAjIFhYWCBtaXNwbGFjZWQ7IHNob3VsZCBiZSBzb21ld2hlcmUgZWxzZQotICAgIGRlZiB0ZXN0X0ZpbmRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkZpbmRlcigpLCAnZmluZF9tb2R1bGUnKQotCi0gICAgZGVmIHRlc3RfUmVzb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5SZXNvdXJjZUxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9JbnNwZWN0TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuSW5zcGVjdExvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnKQotCi0gICAgZGVmIHRlc3RfRXhlY3V0aW9uTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuRXhlY3V0aW9uTG9hZGVyKCksICdsb2FkX21vZHVsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3BhY2thZ2UnLCAnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCi0KLSAgICBkZWYgdGVzdF9Tb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIGlucyA9IHNlbGYuU291cmNlTG9hZGVyKCkKLSAgICAgICAgIyBSZXF1aXJlZCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCAnZ2V0X2ZpbGVuYW1lJywgJ2dldF9kYXRhJykKLSAgICAgICAgIyBPcHRpb25hbCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCdwYXRoX3N0YXRzJywgJ3NldF9kYXRhJykKLQotICAgIGRlZiB0ZXN0X1B5TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUHlMb2FkZXIoKSwgJ3NvdXJjZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnLCAnaXNfcGFja2FnZScpCi0KLSAgICBkZWYgdGVzdF9QeVB5Y0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5UHljTG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9tdGltZScsICdieXRlY29kZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGVfYnl0ZWNvZGUnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFB5TG9hZGVyVGVzdHMsIFB5TG9hZGVyQ29tcGF0VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5TG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5UHljTG9hZGVyVGVzdHMsIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cywgUmVnZW5lcmF0ZWRCeXRlY29kZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cywgTWlzc2luZ1BhdGhzVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZU9ubHlMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0TWV0aG9kSW1wbFRlc3RzKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDI0MTE3M2YuLmIzZTlkMjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQpAQCAtMSw5ICsxLDEwIEBACiAiIiJUZXN0IGNhc2Utc2Vuc2l0aXZpdHkgKFBFUCAyMzUpLiIiIgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotaW1wb3J0IGltcAorCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKQEAgLTExLDcgKzEyLDcgQEAKIAogCiBAdXRpbC5jYXNlX2luc2Vuc2l0aXZlX3Rlc3RzCi1jbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENhc2VTZW5zaXRpdml0eVRlc3Q6CiAKICAgICAiIiJQRVAgMjM1IGRpY3RhdGVzIHRoYXQgb24gY2FzZS1wcmVzZXJ2aW5nLCBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcwogICAgIHRoYXQgaW1wb3J0cyBhcmUgY2FzZS1zZW5zaXRpdmUgdW5sZXNzIHRoZSBQWVRIT05DQVNFT0sgZW52aXJvbm1lbnQKQEAgLTIxLDExICsyMiwxMSBAQAogICAgIGFzc2VydCBuYW1lICE9IG5hbWUubG93ZXIoKQogCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShzZWxmLm5hbWUpCiAKICAgICBkZWYgc2Vuc2l0aXZpdHlfdGVzdChzZWxmKToKQEAgLTQxLDcgKzQyLDcgQEAKICAgICBkZWYgdGVzdF9zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CiAgICAgICAgICAgICBlbnYudW5zZXQoJ1BZVEhPTkNBU0VPSycpCi0gICAgICAgICAgICBpZiBiJ1BZVEhPTkNBU0VPSycgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBpbiBzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLmVudmlyb24gY2hhbmdlcyBub3QgcmVmbGVjdGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfb3MuZW52aXJvbicpCiAgICAgICAgICAgICBzZW5zaXRpdmUsIGluc2Vuc2l0aXZlID0gc2VsZi5zZW5zaXRpdml0eV90ZXN0KCkKQEAgLTUyLDcgKzUzLDcgQEAKICAgICBkZWYgdGVzdF9pbnNlbnNpdGl2ZShzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi5zZXQoJ1BZVEhPTkNBU0VPSycsICcxJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gc2VsZi5pbXBvcnRsaWIuX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5lbnZpcm9uIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX29zLmVudmlyb24nKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCkBAIC02MSwxMCArNjIsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoaW5zZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIGluc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENhc2VTZW5zaXRpdml0eVRlc3QpCitGcm96ZW5fQ2FzZVNlbnNpdGl2aXR5VGVzdCwgU291cmNlX0Nhc2VTZW5zaXRpdml0eVRlc3QgPSB1dGlsLnRlc3RfYm90aCgKKyAgICBDYXNlU2Vuc2l0aXZpdHlUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKaW5kZXggZDU5OTY5YS4uZjFlMjcxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKQEAgLTEsMjQgKzEsMjYgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCBpbXBvcnRsaWIuYWJjCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitpbXBvcnRsaWJfYWJjID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIuYWJjJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitpbXBvcnRsaWJfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCiBpbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YywgdW5sb2FkCiAKIAotY2xhc3MgU2ltcGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTaW1wbGVUZXN0KGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICAiIiJTaG91bGQgaGF2ZSBubyBpc3N1ZSBpbXBvcnRpbmcgYSBzb3VyY2UgbW9kdWxlIFtiYXNpY10uIEFuZCBpZiB0aGVyZSBpcwogICAgIGEgc3ludGF4IGVycm9yLCBpdCBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBbc3ludGF4IGVycm9yXS4KQEAgLTI2LDI3ICsyOCwxNyBAQAogICAgICIiIgogCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfQVBJKHNlbGYpOgotICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzcGVjaWZpZWQgdGhhdCBhc3N1bWUgc2VsZi5uYW1lIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3Rlck1peGluKGltcG9ydGxpYi5hYmMuTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6IHJldHVybiBmdWxsbmFtZQotICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6IHJldHVybiAnPG1vZHVsZT4nCisgICAgICAgIGNsYXNzIFRlc3RlcihzZWxmLmFiYy5GaWxlTG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiByZXR1cm4gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIF8pOiByZXR1cm4gRmFsc2UKIAotICAgICAgICBjbGFzcyBUZXN0ZXIoaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLCBUZXN0ZXJNaXhpbik6Ci0gICAgICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiBwYXNzCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcGFzcwotCi0gICAgICAgIG5hbWUgPSAnbW9kX25hbWUnCi0gICAgICAgIGxvYWRlciA9IFRlc3RlcihuYW1lLCAnc29tZV9wYXRoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUoTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShsb2FkZXIubmFtZSArICdYWFgnKQorICAgICAgICBsb2FkZXIgPSBUZXN0ZXIoJ2JsYWgnLCAnYmxhaC5weScpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxvYWQsICdibGFoJykKKyAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkgICMgU2hvdWxkIG5vdCByYWlzZSBhbiBleGNlcHRpb24uCiAKICAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfQVBJKHNlbGYpOgogICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzZXQgdGhlbiBhc3N1bWUgc2VsZi5wYXRoIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICBjbGFzcyBUZXN0ZXIoc2VsZi5hYmMuRmlsZUxvYWRlcik6CiAgICAgICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6IHBhc3MKICAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiBwYXNzCiAgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcGFzcwpAQCAtNjQsNyArNTYsNyBAQAogICAgICMgW2Jhc2ljXQogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3RlbXAnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfdGVtcCcsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ190ZW1wJ10sCkBAIC03NCw3ICs2Niw3IEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfcGtnLl9faW5pdF9fJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnJywKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ19wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdfcGtnJywgc3lzLm1vZHVsZXMpCkBAIC04Nyw3ICs3OSw3IEBACiAKICAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycsICdfcGtnLm1vZCcpYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1snX3BrZy5tb2QnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZy5tb2QnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3BrZy5tb2QnLCBzeXMubW9kdWxlcykKQEAgLTEwMiw3ICs5NCw3IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmV1c2Uoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIG1vZHVsZV9pZCA9IGlkKG1vZHVsZSkKICAgICAgICAgICAgIG1vZHVsZV9kaWN0X2lkID0gaWQobW9kdWxlLl9fZGljdF9fKQpAQCAtMTIyLDEyICsxMTQsMTIgQEAKICAgICAgICAgdmFsdWUgPSAnPHRlc3Q+JwogICAgICAgICBuYW1lID0gJ190ZW1wJwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG5hbWUpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBvcmlnX21vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBvcmlnX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciwgdmFsdWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJysrKyBiYWQgc3ludGF4ICsrKycpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CiAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRyaWJ1dGVzOgpAQCAtMTM4LDcgKzEzMCw3IEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nWydfdGVtcCddLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnPScpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CiAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfdGVtcCcsIHN5cy5tb2R1bGVzKQpAQCAtMTUxLDE0ICsxNDMsMTQgQEAKICAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX3RlbXAnKToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCiAgICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX3BhdGgsIG1vZC5fX2ZpbGVfXykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuX19jYWNoZWRfXykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlX3BhdGgpCi0gICAgICAgICAgICBweWNhY2hlID0gb3MucGF0aC5kaXJuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpKQorICAgICAgICAgICAgcHljYWNoZSA9IG9zLnBhdGguZGlybmFtZShzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHB5Y2FjaGUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocHljYWNoZSkKIApAQCAtMTY3LDcgKzE1OSw3IEBACiAgICAgICAgICMgdHJ1bmNhdGVkIHJhdGhlciB0aGFuIHJhaXNlIGFuIE92ZXJmbG93RXJyb3IuCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNvdXJjZSA9IG1hcHBpbmdbJ190ZW1wJ10KLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCJ4ID0gNSIpCiAgICAgICAgICAgICB0cnk6CkBAIC0xNzgsNyArMTcwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGdldGF0dHIoZXJybm8sICdFT1ZFUkZMT1cnLCBOb25lKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lIHRvIGxhcmdlIGludGVnZXIgKHt9KSIuZm9ybWF0KGUpKQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2tzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19jYWNoZWRfXywgY29tcGlsZWQpCkBAIC0xODYsOCArMTc4LDE3IEBACiAgICAgICAgICAgICAjIFRoZSBweWMgZmlsZSB3YXMgY3JlYXRlZC4KICAgICAgICAgICAgIG9zLnN0YXQoY29tcGlsZWQpCiAKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdnb29kIG5hbWUnLCB7fSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoJ2JhZCBuYW1lJykKIAotY2xhc3MgQmFkQnl0ZWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9TaW1wbGVUZXN0LCBTb3VyY2VfU2ltcGxlVGVzdCA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTaW1wbGVUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LCBhYmM9aW1wb3J0bGliX2FiYywKKyAgICAgICAgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworCitjbGFzcyBCYWRCeXRlY29kZVRlc3Q6CiAKICAgICBkZWYgaW1wb3J0XyhzZWxmLCBmaWxlLCBtb2R1bGVfbmFtZSk6CiAgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKG1vZHVsZV9uYW1lLCBmaWxlKQpAQCAtMjA0LDcgKzIwNSw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nW25hbWVdKQogICAgICAgICBpZiBub3QgZGVsX3NvdXJjZToKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1tuYW1lXSkKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1tuYW1lXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9zLnVubGluayhtYXBwaW5nW25hbWVdKQogICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IG1ha2VfbGVnYWN5X3B5YyhtYXBwaW5nW25hbWVdKQpAQCAtMjkzLDcgKzI5NCw5IEBACiAKIGNsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdChCYWRCeXRlY29kZVRlc3QpOgogCi0gICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubG9hZGVyID0gY2xzLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCiAKICAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZShzZWxmKToKQEAgLTMzMiw3ICszMzUsOCBAQAogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCiAKICAgICAgICAgc2VsZi5fdGVzdF9iYWRfbWFnaWModGVzdCkKIApAQCAtMzgyLDEzICszODYsMTMgQEAKICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyK2InKSBhcyBieXRlY29kZV9maWxlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUud3JpdGUoemVyb3MpCiAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBpbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCisgICAgICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5pbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoNCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwgc291cmNlX3RpbWVzdGFtcCkKQEAgLTQwMCw3ICs0MDQsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDApCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZShiJ1x4MDBceDAwXHgwMFx4MDAnKQpAQCAtNDA4LDE2ICs0MTIsMjIgQEAKICAgICAgICAgICAgIG9zLmNobW9kKGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIElPRXJyb3IhCisgICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIE9TRXJyb3IhCiAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCitGcm96ZW5fU291cmNlQmFkQnl0ZWNvZGUsIFNvdXJjZV9Tb3VyY2VCYWRCeXRlY29kZSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnksCisgICAgICAgIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCiAKIGNsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKIAotICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5sb2FkZXIgPSBjbHMubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyCiAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlKHNlbGYpOgogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKQEAgLTQ3MiwxNCArNDgyLDEwIEBACiAgICAgZGVmIHRlc3Rfbm9uX2NvZGVfbWFyc2hhbChzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9ub25fY29kZV9tYXJzaGFsKGRlbF9zb3VyY2U9VHJ1ZSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChTaW1wbGVUZXN0LAotICAgICAgICAgICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsCi0gICAgICAgICAgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QKLSAgICAgICAgICAgICAgICApCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA4ZTQ5ODY4Li44YmY4Y2I3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDkgKzEsMTAgQEAKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBlcnJubwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN0YXQKQEAgLTM5LDExICs0MCwxMSBAQAogICAgICIiIgogCiAgICAgZGVmIGdldF9maW5kZXIoc2VsZiwgcm9vdCk6Ci0gICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIocm9vdCwgKmxvYWRlcl9kZXRhaWxzKQorICAgICAgICBsb2FkZXJfZGV0YWlscyA9IFsoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihyb290LCAqbG9hZGVyX2RldGFpbHMpCiAKICAgICBkZWYgaW1wb3J0XyhzZWxmLCByb290LCBtb2R1bGUpOgogICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmluZGVyKHJvb3QpLmZpbmRfbW9kdWxlKG1vZHVsZSkKQEAgLTEyNCw4ICsxMjUsOCBAQAogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nX2Zvcl9kaXIoc2VsZik6CiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyBmcm9tIHN5cy5wYXRoIG1lYW5zIHRvIHNlYXJjaCBpbiB0aGUgY3dkLgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKICAgICAgICAgd2l0aCBvcGVuKCdtb2QucHknLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCIjIHRlc3QgZmlsZSBmb3IgaW1wb3J0bGliIikKICAgICAgICAgdHJ5OgpAQCAtMTM2LDggKzEzNyw4IEBACiAKICAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKICAgICAgICAgIyBpbnZhbGlkYXRlX2NhY2hlcygpIHNob3VsZCByZXNldCB0aGUgbXRpbWUuCi0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQogICAgICAgICBmaW5kZXIuX3BhdGhfbXRpbWUgPSA0MgogICAgICAgICBmaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRlci5fcGF0aF9tdGltZSwgLTEpCkBAIC0xODEsMTEgKzE4Miw5IEBACiAgICAgICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIoZmlsZV9vYmoubmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIFtdKSwgZmluZGVyLmZpbmRfbG9hZGVyKCdkb2Vzbm90ZXhpc3QnKSkKIAorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDZhNzg3OTIuLjkyZGE3NzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsMTcgKzEsMTggQEAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBQYXRoSG9va1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGF0aEhvb2tUZXN0OgogCiAgICAgIiIiVGVzdCB0aGUgcGF0aCBob29rIGZvciBzb3VyY2UuIiIiCiAKICAgICBkZWYgcGF0aF9ob29rKHNlbGYpOgotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnZHVtbXknKSBhcyBtYXBwaW5nOgpAQCAtMjIsMTEgKzIzLDggQEAKICAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIHJlcHJlc2VudHMgdGhlIGN3ZC4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5wYXRoX2hvb2soKSgnJyksICdmaW5kX21vZHVsZScpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhdGhIb29rVGVzdCkKK0Zyb3plbl9QYXRoSG9va1Rlc3QsIFNvdXJjZV9QYXRoSG9va3Rlc3QgPSB1dGlsLnRlc3RfYm90aChQYXRoSG9va1Rlc3QsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CmluZGV4IGJhMDJiNDQuLjY1NGY0YzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKQEAgLTEsNiArMSw4IEBACitmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBjb2RlY3MKIGltcG9ydCByZQogaW1wb3J0IHN5cwpAQCAtMTMsNyArMTUsNyBAQAogQ09ESU5HX1JFID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKiMuKmNvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknLCByZS5BU0NJSSkKIAogCi1jbGFzcyBFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRW5jb2RpbmdUZXN0OgogCiAgICAgIiIiUEVQIDMxMjAgbWFrZXMgVVRGLTggdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHNvdXJjZSBjb2RlCiAgICAgW2RlZmF1bHQgZW5jb2RpbmddLgpAQCAtMzUsNyArMzcsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKHNlbGYubW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSwgJ3diJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHNvdXJjZSkKLSAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW3NlbGYubW9kdWxlX25hbWVdKQogICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQogCkBAIC04NCw4ICs4NiwxMCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKICAgICAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc291cmNlKQogCitGcm96ZW5fRW5jb2RpbmdUZXN0LCBTb3VyY2VfRW5jb2RpbmdUZXN0ID0gdXRpbC50ZXN0X2JvdGgoRW5jb2RpbmdUZXN0LCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCi1jbGFzcyBMaW5lRW5kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIExpbmVFbmRpbmdUZXN0OgogCiAgICAgciIiIlNvdXJjZSB3cml0dGVuIHdpdGggdGhlIHRocmVlIHR5cGVzIG9mIGxpbmUgZW5kaW5ncyAoXG4sIFxyXG4sIFxyKQogICAgIG5lZWQgdG8gYmUgcmVhZGFibGUgW2NyXVtjcmxmXVtsZl0uIiIiCkBAIC05Nyw3ICsxMDEsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgd2l0aCBvcGVuKG1hcHBpbmdbbW9kdWxlX25hbWVdLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlKQotICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihtb2R1bGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW21vZHVsZV9uYW1lXSkKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCiAKQEAgLTExMywxMSArMTE3LDkgQEAKICAgICBkZWYgdGVzdF9sZihzZWxmKToKICAgICAgICAgc2VsZi5ydW5fdGVzdChiJ1xuJykKIAorRnJvemVuX0xpbmVFbmRpbmdzLCBTb3VyY2VfTGluZUVuZGluZ3MgPSB1dGlsLnRlc3RfYm90aChMaW5lRW5kaW5nVGVzdCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRW5jb2RpbmdUZXN0LCBMaW5lRW5kaW5nVGVzdCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CmluZGV4IGFlNjU2NjMuLjYzY2QyNWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CkBAIC0yLDcgKzIsNiBAQAogaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBlcnJubwogaW1wb3J0IGZ1bmN0b29scwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQppbmRleCBjNjIwYzM3Li5iYThkNjA1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQpAQCAtMSw5ICsxLDIxIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgYWJjCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBpbworaW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCitmcm9tIC4gaW1wb3J0IHV0aWwKIAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2FiYywgc291cmNlX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworIyMjIyMgSW5oZXJpdGFuY2UgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGNsYXNzIEluaGVyaXRhbmNlVGVzdHM6CiAKICAgICAiIiJUZXN0IHRoYXQgdGhlIHNwZWNpZmllZCBjbGFzcyBpcyBhIHN1YmNsYXNzL3N1cGVyY2xhc3Mgb2YgdGhlIGV4cGVjdGVkCkBAIC0xNCw4ICsyNiwxOSBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnN1cGVyY2xhc3NlcyA9IFtnZXRhdHRyKHNlbGYuYWJjLCBjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2xhc3NfbmFtZSBpbiBzZWxmLnN1cGVyY2xhc3NfbmFtZXNdCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3N1YmNsYXNzX25hbWVzJyk6CisgICAgICAgICAgICAjIEJlY2F1c2UgdGVzdC5zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoKSBjcmVhdGVzIGEgbmV3CisgICAgICAgICAgICAjIGltcG9ydGxpYi5fYm9vdHN0cmFwIHBlciBtb2R1bGUsIGluaGVyaXRhbmNlIGNoZWNrcyBmYWlsIHdoZW4KKyAgICAgICAgICAgICMgY2hlY2tpbmcgYWNyb3NzIG1vZHVsZSBib3VuZGFyaWVzIChpLmUuIHRoZSBfYm9vdHN0cmFwIGluIGFiYyBpcworICAgICAgICAgICAgIyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbiBtYWNoaW5lcnkpLiBUaGF0IG1lYW5zIHN0ZWFsaW5nIG9uZSBvZgorICAgICAgICAgICAgIyB0aGUgbW9kdWxlcyBmcm9tIHRoZSBvdGhlciB0byBtYWtlIHN1cmUgdGhlIHNhbWUgaW5zdGFuY2UgaXMgdXNlZC4KKyAgICAgICAgICAgIHNlbGYuc3ViY2xhc3NlcyA9IFtnZXRhdHRyKHNlbGYuYWJjLm1hY2hpbmVyeSwgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdWJjbGFzc19uYW1lc10KICAgICAgICAgYXNzZXJ0IHNlbGYuc3ViY2xhc3NlcyBvciBzZWxmLnN1cGVyY2xhc3Nlcywgc2VsZi5fX2NsYXNzX18KLSAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKGFiYywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHRlc3RpbmcgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXy5wYXJ0aXRpb24oJ18nKVsyXQorICAgICAgICBzZWxmLl9fdGVzdCA9IGdldGF0dHIoc2VsZi5hYmMsIHRlc3RpbmcpCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZXhwZWN0ZWQgc3ViY2xhc3NlcyBpbmhlcml0LgpAQCAtMjksNzUgKzUyLDc2MSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5fX3Rlc3QsIHN1cGVyY2xhc3MpLAogICAgICAgICAgICAgICAgInswfSBpcyBub3QgYSBzdXBlcmNsYXNzIG9mIHsxfSIuZm9ybWF0KHN1cGVyY2xhc3MsIHNlbGYuX190ZXN0KSkKIAorZGVmIGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhiYXNlX2NsYXNzKToKKyAgICBkZWYgc2V0X2Zyb3plbihucyk6CisgICAgICAgIG5zWydhYmMnXSA9IGZyb3plbl9hYmMKKyAgICBkZWYgc2V0X3NvdXJjZShucyk6CisgICAgICAgIG5zWydhYmMnXSA9IHNvdXJjZV9hYmMKIAotY2xhc3MgTWV0YVBhdGhGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5GaW5kZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5QYXRoRmluZGVyLCBtYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyXQotCi0KLWNsYXNzIFBhdGhFbnRyeUZpbmRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkZpbmRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5GaWxlRmluZGVyXQotCi0KLWNsYXNzIExvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlcl0KLQotCi1jbGFzcyBSZXNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlcl0KLQotCi1jbGFzcyBJbnNwZWN0TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyXQotCi0KLWNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkluc3BlY3RMb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotY2xhc3MgRmlsZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsIG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBTb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyXQotCi0KLWNsYXNzIFB5TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0KLQotY2xhc3MgUHlQeWNMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5QeUxvYWRlcl0KLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogICAgIGNsYXNzZXMgPSBbXQotICAgIGZvciBjbGFzc18gaW4gZ2xvYmFscygpLnZhbHVlcygpOgotICAgICAgICBpZiAoaW5zcGVjdC5pc2NsYXNzKGNsYXNzXykgYW5kCi0gICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhjbGFzc18sIHVuaXR0ZXN0LlRlc3RDYXNlKSBhbmQKLSAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGNsYXNzXywgSW5oZXJpdGFuY2VUZXN0cykpOgotICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoY2xhc3NfKQotICAgIHJ1bl91bml0dGVzdCgqY2xhc3NlcykKKyAgICBmb3IgcHJlZml4LCBuc19zZXQgaW4gWygnRnJvemVuJywgc2V0X2Zyb3plbiksICgnU291cmNlJywgc2V0X3NvdXJjZSldOgorICAgICAgICBjbGFzc2VzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MoJ18nLmpvaW4oW3ByZWZpeCwgYmFzZV9jbGFzcy5fX25hbWVfX10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2VfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfYm9keT1uc19zZXQpKQorICAgIHJldHVybiBjbGFzc2VzCisKKworY2xhc3MgTWV0YVBhdGhGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnQnVpbHRpbkltcG9ydGVyJywgJ0Zyb3plbkltcG9ydGVyJywgJ1BhdGhGaW5kZXInLAorICAgICAgICAgICAgICAgICAgICAgICdXaW5kb3dzUmVnaXN0cnlGaW5kZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhNZXRhUGF0aEZpbmRlcikKK0Zyb3plbl9NZXRhUGF0aEZpbmRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9NZXRhUGF0aEZpbmRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydGaW5kZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydGaWxlRmluZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoUGF0aEVudHJ5RmluZGVyKQorRnJvemVuX1BhdGhFbnRyeUZpbmRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBSZXNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhSZXNvdXJjZUxvYWRlcikKK0Zyb3plbl9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEluc3BlY3RMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnQnVpbHRpbkltcG9ydGVyJywgJ0Zyb3plbkltcG9ydGVyJywgJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhJbnNwZWN0TG9hZGVyKQorRnJvemVuX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfSW5zcGVjdExvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydJbnNwZWN0TG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnRXh0ZW5zaW9uRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEV4ZWN1dGlvbkxvYWRlcikKK0Zyb3plbl9FeGVjdXRpb25Mb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgRmlsZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydSZXNvdXJjZUxvYWRlcicsICdFeGVjdXRpb25Mb2FkZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydTb3VyY2VGaWxlTG9hZGVyJywgJ1NvdXJjZWxlc3NGaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoRmlsZUxvYWRlcikKK0Zyb3plbl9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0ZpbGVMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBTb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnUmVzb3VyY2VMb2FkZXInLCAnRXhlY3V0aW9uTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnU291cmNlRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFNvdXJjZUxvYWRlcikKK0Zyb3plbl9Tb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfU291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKyMjIyMjIERlZmF1bHQgcmV0dXJuIHZhbHVlcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitkZWYgbWFrZV9hYmNfc3ViY2xhc3NlcyhiYXNlX2NsYXNzKToKKyAgICBjbGFzc2VzID0gW10KKyAgICBmb3Iga2luZCwgYWJjIGluIFsoJ0Zyb3plbicsIGZyb3plbl9hYmMpLCAoJ1NvdXJjZScsIHNvdXJjZV9hYmMpXToKKyAgICAgICAgbmFtZSA9ICdfJy5qb2luKFtraW5kLCBiYXNlX2NsYXNzLl9fbmFtZV9fXSkKKyAgICAgICAgYmFzZV9jbGFzc2VzID0gYmFzZV9jbGFzcywgZ2V0YXR0cihhYmMsIGJhc2VfY2xhc3MuX19uYW1lX18pCisgICAgICAgIGNsYXNzZXMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcyhuYW1lLCBiYXNlX2NsYXNzZXMpKQorICAgIHJldHVybiBjbGFzc2VzCisKK2RlZiBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhiYXNlX2NsYXNzLCB0ZXN0X2NsYXNzKToKKyAgICBmcm96ZW5fY2xhc3MsIHNvdXJjZV9jbGFzcyA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcykKKyAgICB0ZXN0cyA9IFtdCisgICAgZm9yIHByZWZpeCwgY2xhc3NfaW5fdGVzdCBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fY2xhc3MpLCAoJ1NvdXJjZScsIHNvdXJjZV9jbGFzcyldOgorICAgICAgICBkZWYgc2V0X25zKG5zKToKKyAgICAgICAgICAgIG5zWydpbnMnXSA9IGNsYXNzX2luX3Rlc3QoKQorICAgICAgICB0ZXN0cy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIHRlc3RfY2xhc3MuX19uYW1lX19dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfYm9keT1zZXRfbnMpKQorICAgIHJldHVybiB0ZXN0cworCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyOgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCisKK0Zyb3plbl9NUEYsIFNvdXJjZV9NUEYgPSBtYWtlX2FiY19zdWJjbGFzc2VzKE1ldGFQYXRoRmluZGVyKQorCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgc2hvdWxkIHJldHVybiBOb25lLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmlucy5maW5kX21vZHVsZSgnc29tZXRoaW5nJywgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKKyAgICAgICAgIyBDYWxsaW5nIHRoZSBtZXRob2QgaXMgYSBuby1vcC4KKyAgICAgICAgc2VsZi5pbnMuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTWV0YVBhdGhGaW5kZXIsIE1ldGFQYXRoRmluZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9NUEZEZWZhdWx0VGVzdHMsIFNvdXJjZV9NUEZEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlcjoKKworICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorCitGcm96ZW5fUEVGLCBTb3VyY2VfUEVGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhQYXRoRW50cnlGaW5kZXIpCisKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRfbG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCBbXSksIHNlbGYuaW5zLmZpbmRfbG9hZGVyKCdzb21ldGhpbmcnKSkKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLmlucy5maW5kX21vZHVsZSgnc29tZXRoaW5nJykpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgYmUgYSBuby1vcC4KKyAgICAgICAgc2VsZi5pbnMuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUGF0aEVudHJ5RmluZGVyLCBQYXRoRW50cnlGaW5kZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX1BFRkRlZmF1bHRUZXN0cywgU291cmNlX1BFRkRlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgTG9hZGVyOgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkubG9hZF9tb2R1bGUoZnVsbG5hbWUpCisKKworRnJvemVuX0wsIFNvdXJjZV9MID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhMb2FkZXIpCisKKworY2xhc3MgTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmxvYWRfbW9kdWxlKCdzb21ldGhpbmcnKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMubW9kdWxlX3JlcHIobW9kKQorICAgICAgICBvcmlnaW5hbF9yZXByID0gcmVwcihtb2QpCisgICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZi5pbnMKKyAgICAgICAgIyBTaG91bGQgc3RpbGwgcmV0dXJuIGEgcHJvcGVyIHJlcHIuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1vZCkpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhMb2FkZXIsIExvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fTERlZmF1bHRUZXN0cywgU291cmNlTERlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyKToKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKKworCitGcm96ZW5fUkwsIFNvdXJjZV9STCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUmVzb3VyY2VMb2FkZXIpCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2RhdGEoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfZGF0YSgnL3NvbWUvcGF0aCcpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhSZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX1JMRGVmYXVsdFRlc3RzLCBTb3VyY2VfUkxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEluc3BlY3RMb2FkZXIoTG9hZGVyKToKKworICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuaXNfcGFja2FnZShmdWxsbmFtZSkKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X3NvdXJjZShmdWxsbmFtZSkKKworCitGcm96ZW5fSUwsIFNvdXJjZV9JTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoSW5zcGVjdExvYWRlcikKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuaXNfcGFja2FnZSgnYmxhaCcpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9zb3VyY2UoJ2JsYWgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoSW5zcGVjdExvYWRlciwgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fSUxEZWZhdWx0VGVzdHMsIFNvdXJjZV9JTERlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIpOgorCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKworRnJvemVuX0VMLCBTb3VyY2VfRUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEV4ZWN1dGlvbkxvYWRlcikKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9maWxlbmFtZSgnYmxhaCcpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0VMRGVmYXVsdFRlc3RzLCBTb3VyY2VfRUxEZWZhdWx0c1Rlc3RzID0gdGVzdHMKKworCisjIyMjIyBJbnNwZWN0TG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzOgorCisgICAgZGVmIHNvdXJjZV90b19tb2R1bGUoc2VsZiwgZGF0YSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiSGVscCB3aXRoIHNvdXJjZV90b19jb2RlKCkgdGVzdHMuIiIiCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoZGF0YSwgcGF0aCkKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHJldHVybiBtb2R1bGUKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBTaW5jZSBjb21waWxlKCkgY2FuIGhhbmRsZSBzdHJpbmdzLCBzbyBzaG91bGQgc291cmNlX3RvX2NvZGUoKS4KKyAgICAgICAgc291cmNlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgbW9kdWxlID0gc2VsZi5zb3VyY2VfdG9fbW9kdWxlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX2J5dGVzKHNlbGYpOgorICAgICAgICAjIFNpbmNlIGNvbXBpbGUoKSBjYW4gaGFuZGxlIGJ5dGVzLCBzbyBzaG91bGQgc291cmNlX3RvX2NvZGUoKS4KKyAgICAgICAgc291cmNlID0gYidhdHRyID0gNDInCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc291cmNlX3RvX21vZHVsZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9wYXRoKHNlbGYpOgorICAgICAgICAjIFNwZWNpZnlpbmcgYSBwYXRoIHNob3VsZCBzZXQgaXQgZm9yIHRoZSBjb2RlIG9iamVjdC4KKyAgICAgICAgcGF0aCA9ICdwYXRoL3RvL3NvbWV3aGVyZScKKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKCcnLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsIHBhdGgpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9ub19wYXRoKHNlbGYpOgorICAgICAgICAjIE5vdCBzZXR0aW5nIGEgcGF0aCBzaG91bGQgc3RpbGwgd29yayBhbmQgYmUgc2V0IHRvIDxzdHJpbmc+IHNpbmNlIHRoYXQKKyAgICAgICAgIyBpcyBhIHByZS1leGlzdGluZyBwcmFjdGljZSBhcyBhIGRlZmF1bHQgdG8gY29tcGlsZSgpLgorICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJzxzdHJpbmc+JykKKworCitjbGFzcyBGcm96ZW5fSUxTb3VyY2VUb0NvZGVUZXN0cyhJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMU291cmNlVG9Db2RlVGVzdHMoSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gU291cmNlX0lMCisKKworY2xhc3MgSW5zcGVjdExvYWRlckdldENvZGVUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc3VjY2Vzcy4KKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MsICdnZXRfc291cmNlJykgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnJldHVybl92YWx1ZSA9ICdhdHRyID0gNDInCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX2lzX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X3NvdXJjZSgpIGlzIE5vbmUgdGhlbiB0aGlzIHNob3VsZCBiZSBOb25lLgorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X3NvdXJjZScpIGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29kZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9ub3RfZm91bmQoc2VsZik6CisgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gc291cmNlIHRoZW4gdGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorCisKK2NsYXNzIEZyb3plbl9JTEdldENvZGVUZXN0cyhJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCisKK2NsYXNzIFNvdXJjZV9JTEdldENvZGVUZXN0cyhJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gU291cmNlX0lMCisKKworY2xhc3MgSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0czoKKworICAgICIiIlRlc3QgSW5zcGVjdExvYWRlci5sb2FkX21vZHVsZSgpLiIiIgorCisgICAgbW9kdWxlX25hbWUgPSAnYmxhaCcKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxvYWQoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5sb2FkLCBzZWxmLm1vZHVsZV9uYW1lKQorCisgICAgZGVmIG1vY2tfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9jb2RlJykKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX0ltcG9ydEVycm9yKHNlbGYpOgorICAgICAgICAjIElmIGdldF9jb2RlKCkgcmFpc2VzIEltcG9ydEVycm9yLCBpdCBzaG91bGQgcHJvcGFnYXRlLgorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5zaWRlX2VmZmVjdCA9IEltcG9ydEVycm9yCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9jb2RlKCkgcmV0dXJucyBOb25lLCByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfZ2V0X2NvZGUoKSBhcyBtb2NrZWRfZ2V0X2NvZGU6CisgICAgICAgICAgICBtb2NrZWRfZ2V0X2NvZGUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JldHVybmVkKHNlbGYpOgorICAgICAgICAjIFRoZSBsb2FkZWQgbW9kdWxlIHNob3VsZCBiZSByZXR1cm5lZC4KKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJ2F0dHIgPSA0MicsICc8c3RyaW5nPicsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfZ2V0X2NvZGUoKSBhcyBtb2NrZWRfZ2V0X2NvZGU6CisgICAgICAgICAgICBtb2NrZWRfZ2V0X2NvZGUucmV0dXJuX3ZhbHVlID0gY29kZQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZSwgc3lzLm1vZHVsZXNbc2VsZi5tb2R1bGVfbmFtZV0pCisKKworY2xhc3MgRnJvemVuX0lMTG9hZE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMTG9hZE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCisjIyMjIyBFeGVjdXRpb25Mb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzOgorCisgICAgZGVmIG1vY2tfbWV0aG9kcyhzZWxmLCAqLCBnZXRfc291cmNlPUZhbHNlLCBnZXRfZmlsZW5hbWU9RmFsc2UpOgorICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBOb25lLCBOb25lCisgICAgICAgIGlmIGdldF9zb3VyY2U6CisgICAgICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0ID0gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3NvdXJjZScpCisgICAgICAgIGlmIGdldF9maWxlbmFtZToKKyAgICAgICAgICAgIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2ZpbGVuYW1lJykKKyAgICAgICAgcmV0dXJuIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dAorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgIHBhdGggPSAnYmxhaC5weScKKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gc2VsZi5tb2NrX21ldGhvZHMoCisgICAgICAgICAgICAgICAgZ2V0X3NvdXJjZT1UcnVlLCBnZXRfZmlsZW5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIHNvdXJjZV9tb2NrLCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgYXMgbmFtZV9tb2NrOgorICAgICAgICAgICAgc291cmNlX21vY2sucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIG5hbWVfbW9jay5yZXR1cm5fdmFsdWUgPSBwYXRoCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsIHBhdGgpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2VfaXNfTm9uZShzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfc291cmNlKCkgaXMgTm9uZSB0aGVuIHRoaXMgc2hvdWxkIGJlIE5vbmUuCisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIF8gPSBzZWxmLm1vY2tfbWV0aG9kcyhnZXRfc291cmNlPVRydWUpCisgICAgICAgIHdpdGggc291cmNlX21vY2tfY29udGV4dCBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29kZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9ub3RfZm91bmQoc2VsZik6CisgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gc291cmNlIHRoZW4gdGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCisgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9ub19wYXRoKHNlbGYpOgorICAgICAgICAjIElmIGdldF9maWxlbmFtZSgpIHJhaXNlcyBJbXBvcnRFcnJvciB0aGVuIHNpbXBseSBza2lwIHNldHRpbmcgdGhlIHBhdGgKKyAgICAgICAgIyBvbiB0aGUgY29kZSBvYmplY3QuCisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IHNlbGYubW9ja19tZXRob2RzKAorICAgICAgICAgICAgICAgIGdldF9zb3VyY2U9VHJ1ZSwgZ2V0X2ZpbGVuYW1lPVRydWUpCisgICAgICAgIHdpdGggc291cmNlX21vY2tfY29udGV4dCBhcyBzb3VyY2VfbW9jaywgZmlsZW5hbWVfbW9ja19jb250ZXh0IGFzIG5hbWVfbW9jazoKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrLnJldHVybl92YWx1ZSA9ICdhdHRyID0gNDInCisgICAgICAgICAgICBuYW1lX21vY2suc2lkZV9lZmZlY3QgPSBJbXBvcnRFcnJvcgorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCAnPHN0cmluZz4nKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisKK2NsYXNzIEZyb3plbl9FTEdldENvZGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9FTAorCitjbGFzcyBTb3VyY2VfRUxHZXRDb2RlVGVzdHMoRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfRUwKKworCisjIyMjIyBTb3VyY2VMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgU291cmNlTG9hZGVyOgorCisgICAgIyBHbG9iYWxzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgZm9yIGFsbCBtb2R1bGVzLgorICAgIHNvdXJjZSA9IChiIl8gPSAnOjonLmpvaW4oW19fbmFtZV9fLCBfX2ZpbGVfXywgX19jYWNoZWRfXywgX19wYWNrYWdlX18sICIKKyAgICAgICAgICAgICAgYiJyZXByKF9fbG9hZGVyX18pXSkiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKKworCitGcm96ZW5fU291cmNlT25seUwsIFNvdXJjZV9Tb3VyY2VPbmx5TCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoU291cmNlTG9hZGVyKQorCisKK2NsYXNzIFNvdXJjZUxvYWRlcihTb3VyY2VMb2FkZXIpOgorCisgICAgc291cmNlX210aW1lID0gMQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhdGgpCisgICAgICAgIHNlbGYuYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuc291cmNlX3NpemUgPSBsZW4oc2VsZi5zb3VyY2UpCisgICAgICAgIGlmIG1hZ2ljIGlzIE5vbmU6CisgICAgICAgICAgICBtYWdpYyA9IHNlbGYudXRpbC5NQUdJQ19OVU1CRVIKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKKyAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQorICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKKyAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCisgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKKyAgICAgICAgc2VsZi53cml0dGVuID0ge30KKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQorICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKworICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoICE9IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQorCisgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgorICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQorICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKKworCitGcm96ZW5fU0wsIFNvdXJjZV9TTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoU291cmNlTG9hZGVyKQorRnJvemVuX1NMLnV0aWwgPSBmcm96ZW5fdXRpbAorU291cmNlX1NMLnV0aWwgPSBzb3VyY2VfdXRpbAorRnJvemVuX1NMLmluaXQgPSBmcm96ZW5faW5pdAorU291cmNlX1NMLmluaXQgPSBzb3VyY2VfaW5pdAorCisKK2NsYXNzIFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzOgorCisgICAgZGVmIHNldFVwKHNlbGYsICosIGlzX3BhY2thZ2U9VHJ1ZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnBhY2thZ2UgPSAncGtnJworICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHNlbGYucGFja2FnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnbW9kJworICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJy4nLmpvaW4oWydtb2QnLCAncHknXSkpCisgICAgICAgICAgICBzZWxmLm5hbWUgPSAnLicuam9pbihbc2VsZi5wYWNrYWdlLCBtb2R1bGVfbmFtZV0pCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLmxvYWRlcl9tb2NrKHNlbGYucGF0aCwgKiprd2FyZ3MpCisKKyAgICBkZWYgdmVyaWZ5X21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNlbGYucGFja2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgc2VsZi5sb2FkZXIpCisgICAgICAgIHZhbHVlcyA9IG1vZHVsZS5fLnNwbGl0KCc6OicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzFdLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzJdLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbM10sIHNlbGYucGFja2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbNF0sIHJlcHIoc2VsZi5sb2FkZXIpKQorCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0KToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShzZWxmLm5hbWUpCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAorICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCisgICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKworCitjbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KKworICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKKyAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKworICAgICIiIgorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgorICAgICAgICAjIElmIGFuIE9TRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCisgICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKKyAgICAgICAgZGVmIHJhaXNlX09TRXJyb3IocGF0aCk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfT1NFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgorICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQorICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIGNvbXBpbGVkIGNvZGUgb2JqZWN0LgorICAgICAgICBjb2RlID0gc2VsZi5sb2FkZXIuc291cmNlX3RvX2NvZGUoc2VsZi5sb2FkZXIuc291cmNlLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZSkKKworICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIExvYWRpbmcgYSBtb2R1bGUgc2hvdWxkIHNldCBfX25hbWVfXywgX19sb2FkZXJfXywgX19wYWNrYWdlX18sCisgICAgICAgICMgX19wYXRoX18gKGZvciBwYWNrYWdlcyksIF9fZmlsZV9fLCBhbmQgX19jYWNoZWRfXy4KKyAgICAgICAgIyBUaGUgbW9kdWxlIHNob3VsZCBhbHNvIGJlIHB1dCBpbnRvIHN5cy5tb2R1bGVzLgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGF0aF9fLCBbb3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyBfX3BhY2thZ2VfXyBuZWVkcyB0byBiZSBzZXQsIHdoaWxlIF9fcGF0aF9fIGlzIHNldCBvbiBpZiB0aGUgbW9kdWxlCisgICAgICAgICMgaXMgYSBwYWNrYWdlLgorICAgICAgICAjIFRlc3RpbmcgdGhlIHZhbHVlcyBmb3IgYSBwYWNrYWdlIGFyZSBjb3ZlcmVkIGJ5IHRlc3RfbG9hZF9tb2R1bGUuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2VfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU291cmNlIGlzIGNvbnNpZGVyZWQgZW5jb2RlZCBpbiBVVEYtOCBieSBkZWZhdWx0IHVubGVzcyBvdGhlcndpc2UKKyAgICAgICAgIyBzcGVjaWZpZWQgYnkgYW4gZW5jb2RpbmcgbGluZS4KKyAgICAgICAgc291cmNlID0gIl8gPSAnw7wnIgorICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IGxhdGluLTFcbl8gPSDDvCIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorCisKK2NsYXNzIEZyb3plbl9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgInN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUiKQorY2xhc3MgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyJ3MgdXNlIG9mIGJ5dGVjb2RlLgorCisgICAgU291cmNlLW9ubHkgdGVzdGluZyBoYW5kbGVkIGJ5IFNvdXJjZU9ubHlMb2FkZXJUZXN0cy4KKworICAgICIiIgorCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0LCAqLCBieXRlY29kZV93cml0dGVuPUZhbHNlKToKKyAgICAgICAgc3VwZXIoKS52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgaWYgYnl0ZWNvZGVfd3JpdHRlbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCisgICAgICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKKworICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgorICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKKyAgICAgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgorICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKKyAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCisgICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCisgICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKKyAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgorICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCisgICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCisKKyAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKKyAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEKKyAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCisKKyAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgT1NFcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgorICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCisKKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworCitjbGFzcyBGcm96ZW5fU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9TTAorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VTTEJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NMCisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHM6CisKKyAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCisgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICBtb2NrID0gc2VsZi5Tb3VyY2VPbmx5TG9hZGVyTW9jaygnbW9kLmZpbGUnKQorICAgICAgICBzb3VyY2UgPSAneCA9ICLDvCInCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X2RlY29kZWRfc291cmNlKHNlbGYpOgorICAgICAgICAjIERlY29kaW5nIHNob3VsZCB3b3JrLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soIm1vZC5maWxlIikKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCisgICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgIyBQRVAgMzAyIHNheXMgdW5pdmVyc2FsIG5ld2xpbmVzIHNob3VsZCBiZSB1c2VkLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TEdldFNvdXJjZVRlc3RzKFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgU291cmNlT25seUxvYWRlck1vY2sgPSBTb3VyY2VfU291cmNlT25seUwKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CmluZGV4IGIxYTU4OTQuLmM2YzJkNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CkBAIC0xLDE0ICsxLDE3IEBACiBmcm9tIC4gaW1wb3J0IHV0aWwKLWltcG9ydCBpbXAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKKworZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0czoKIAogICAgICIiIlRlc3QgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuIiIiCiAKQEAgLTE2LDcgKzE5LDcgQEAKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMjYsNyArMjksNyBAQAogICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMzgsMTcgKzQxLDE3IEBACiAgICAgICAgIHJlbGF0aXZlX25hbWUgPSAnLnswfScuZm9ybWF0KG1vZHVsZV9uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIGFic29sdXRlX25hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBhYnNvbHV0ZV9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGVlcF9yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EnKQotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYScpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5jJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX2ltcG9ydF93aXRoX3BhY2thZ2Uoc2VsZik6CkBAIC01OSwxNSArNjIsMTUgQEAKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocGtnX25hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfd29fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBSZWxhdGl2ZSBpbXBvcnRzIGNhbm5vdCBoYXBwZW4gd2l0aG91dCB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGJlaW5nCiAgICAgICAgICMgc2V0LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLnN1cHBvcnQnKQorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy5zdXBwb3J0JykKIAogCiAgICAgZGVmIHRlc3RfbG9hZGVkX29uY2Uoc2VsZik6CkBAIC03Niw3ICs3OSw3IEBACiAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSBiZWluZyBpbXBvcnRlZC4KICAgICAgICAgYl9sb2FkX2NvdW50ID0gMAogICAgICAgICBkZWYgbG9hZF9hKCk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBkZWYgbG9hZF9iKCk6CiAgICAgICAgICAgICBub25sb2NhbCBiX2xvYWRfY291bnQKICAgICAgICAgICAgIGJfbG9hZF9jb3VudCArPSAxCkBAIC04NCwxMSArODcsMTcgQEAKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmInXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX2xvYWRfY291bnQsIDEpCiAKK2NsYXNzIEZyb3plbl9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAogCi1jbGFzcyBGaW5kTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU291cmNlX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgRmluZExvYWRlclRlc3RzOgogCiAgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKQEAgLTk4LDI5ICsxMDcsNDMgQEAKICAgICAgICAgIyBJZiBhIG1vZHVsZSB3aXRoIF9fbG9hZGVyX18gaXMgaW4gc3lzLm1vZHVsZXMsIHRoZW4gcmV0dXJuIGl0LgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBmb3VuZCA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBmb3VuZCkKIAogICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19Ob25lKHNlbGYpOgogICAgICAgICAjIElmIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18gaXMgTm9uZSwgcmFpc2UgVmFsdWVFcnJvci4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19ub3Rfc2V0KHNlbGYpOgorICAgICAgICAjIFNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICMgSXNzdWUgIzE3MDk5CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBSZXR1cm4gdGhlIGxvYWRlciBmb3VuZCBvbiBzeXMubWV0YV9wYXRoLgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBOb25lKSwgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpKQogCiAgICAgZGVmIHRlc3Rfc3VjY2Vzc19wYXRoKHNlbGYpOgogICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCkBAIC0xMjksMTQgKzE1MiwyNzUgQEAKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIHBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQogCiAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKICAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuaW5pdC5maW5kX2xvYWRlcignbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKKworY2xhc3MgRnJvemVuX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKworY2xhc3MgU291cmNlX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKIAogCi1jbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBGaW5kU3BlY1Rlc3RzOgorCisgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGZpbmRfc3BlYyhuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKTogcmV0dXJuIG5hbWUsIHBhdGgsIHRhcmdldAorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXMoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIGxvYWRlcikKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfd2l0aG91dF9fX2xvYWRlcl9fKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIGxvYWRlcikKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuaW5pdC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX05vbmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gTm9uZQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfc3BlYyhuYW1lKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfbG9hZGVyX2lzX05vbmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgTm9uZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuaW5pdC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX25vdF9zZXQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc19wYXRoKHNlbGYpOgorICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHBhdGggPSAncGF0aCB0byBzb21lIHBsYWNlJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUsIHBhdGgpKQorCisgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKKyAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmluaXQuZmluZF9zcGVjKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorCitjbGFzcyBGcm96ZW5fRmluZFNwZWNUZXN0cyhGaW5kU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCitjbGFzcyBTb3VyY2VfRmluZFNwZWNUZXN0cyhGaW5kU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorCisKK2NsYXNzIFJlbG9hZFRlc3RzOgorCisgICAgIiIiVGVzdCBtb2R1bGUgcmVsb2FkaW5nIGZvciBidWlsdGluIGFuZCBleHRlbnNpb24gbW9kdWxlcy4iIiIKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICBmb3IgbW9kIGluICgndG9rZW5pemUnLCAndGltZScsICdtYXJzaGFsJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2R1bGU9bW9kKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuQ2xlYW5JbXBvcnQobW9kKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobW9kKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgZGVmIGNvZGUoKToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgndG9wX2xldmVsJykKKyAgICAgICAgICAgIG1vZHVsZS5zcGFtID0gMworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddID0gbW9kdWxlCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsndG9wX2xldmVsJzogY29kZX0pCisgICAgICAgIHdpdGggbW9jazoKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5zcGFtLCAzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuc3BhbSwgMykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9taXNzaW5nX2xvYWRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICBsb2FkZXIgPSB0eXBlcy5fX2xvYWRlcl9fCisgICAgICAgICAgICBkZWwgdHlwZXMuX19sb2FkZXJfXworICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKHR5cGVzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbJ3R5cGVzJ10sIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5fX2xvYWRlcl9fLnBhdGgsIGxvYWRlci5wYXRoKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xvYWRlcl9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICB0eXBlcy5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZCh0eXBlcykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyZWxvYWRlZC5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzWyd0eXBlcyddLCB0eXBlcykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sb2NhdGlvbl9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBwbGFpbiBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lICsgJy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fYnVpbHRpbnNfXyc6IF9fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmNyZWF0ZV9lbXB0eV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICAgICAgICAgIyBDaGFuZ2UgdG8gYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19maWxlX18nOiBpbml0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbb3MucGF0aC5kaXJuYW1lKGluaXRfcGF0aCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5zX18nOiBfX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKHJlbG9hZGVkKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX25hbWVzcGFjZV9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBuYW1lc3BhY2UgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0LnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGJhZF9wYXRoLCAndycpIGFzIGluaXRfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZS53cml0ZSgnZWdncyA9IE5vbmUnKQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gbnMucG9wKCdfX3BhdGhfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9hZGVyLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoW29zLnBhdGguZGlybmFtZShiYWRfcGF0aCldKSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgTmFtZXNwYWNlTG9hZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIucGF0aAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSB0byBhIHJlZ3VsYXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluc19fJzogX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWdncyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGJhZF9wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IG5zLnBvcCgnX19zcGVjX18nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKworY2xhc3MgRnJvemVuX1JlbG9hZFRlc3RzKFJlbG9hZFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9SZWxvYWRUZXN0cyhSZWxvYWRUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIEludmFsaWRhdGVDYWNoZVRlc3RzOgogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2NhbGxlZChzZWxmKToKICAgICAgICAgIyBJZiBkZWZpbmVkIHRoZSBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZC4KQEAgLTE1NSw0OCArNDM5LDY1IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCiAgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBwYXRoX2lucwogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMubWV0YV9wYXRoLnJlbW92ZShtZXRhX2lucykpCi0gICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRhX2lucy5jYWxsZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXRoX2lucy5jYWxsZWQpCiAKICAgICBkZWYgdGVzdF9tZXRob2RfbGFja2luZyhzZWxmKToKICAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgbm8gaXNzdWVzIGlmIHRoZSBtZXRob2QgaXMgbm90IGRlZmluZWQuCiAgICAgICAgIGtleSA9ICdnb2JibGVkZWVnb29rJwotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gaW1wLk51bGxJbXBvcnRlcignYWJjJykKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IE5vbmUKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuX19kZWxpdGVtX18oa2V5KSkKLSAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgICMgU2hvdWxkbid0IHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKSAgIyBTaG91bGRuJ3QgdHJpZ2dlciBhbiBleGNlcHRpb24uCisKK2NsYXNzIEZyb3plbl9JbnZhbGlkYXRlQ2FjaGVUZXN0cyhJbnZhbGlkYXRlQ2FjaGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorCitjbGFzcyBTb3VyY2VfSW52YWxpZGF0ZUNhY2hlVGVzdHMoSW52YWxpZGF0ZUNhY2hlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKIAogCiBjbGFzcyBGcm96ZW5JbXBvcnRsaWJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9ub19mcm96ZW5faW1wb3J0bGliKHNlbGYpOgogICAgICAgICAjIFNob3VsZCBiZSBhYmxlIHRvIGltcG9ydCB3L28gX2Zyb3plbl9pbXBvcnRsaWIgYmVpbmcgZGVmaW5lZC4KLSAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdpbXBvcnRsaWInLCBibG9ja2VkPVsnX2Zyb3plbl9pbXBvcnRsaWInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKG1vZHVsZS5fX2xvYWRlcl9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyKSkKKyAgICAgICAgIyBDYW4ndCBkbyBhbiBpc2luc3RhbmNlKCkgY2hlY2sgc2luY2Ugc2VwYXJhdGUgY29waWVzIG9mIGltcG9ydGxpYgorICAgICAgICAjIG1heSBoYXZlIGJlZW4gdXNlZCBmb3IgaW1wb3J0LCBzbyBqdXN0IGNoZWNrIHRoZSBuYW1lIGlzIG5vdCBmb3IgdGhlCisgICAgICAgICMgZnJvemVuIGxvYWRlci4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb3VyY2VfaW5pdC5fX2xvYWRlcl9fLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJvemVuSW1wb3J0ZXInKQogCiAKLWNsYXNzIFN0YXJ0dXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTdGFydHVwVGVzdHM6CiAKICAgICBkZWYgdGVzdF9ldmVyeW9uZV9oYXNfX19sb2FkZXJfXyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTcwOTg6IGFsbCBtb2R1bGVzIHNob3VsZCBoYXZlIF9fbG9hZGVyX18gZGVmaW5lZC4KICAgICAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgotICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydGxpYi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fKQotICAgICAgICAgICAgICAgIGVsaWYgaW1wLmlzX2Zyb3plbihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGxhY2tzIGEgX19sb2FkZXJfXyBhdHRyaWJ1dGUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19sb2FkZXJfXywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fbG9hZGVyX18sIE5vbmUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydE1vZHVsZVRlc3RzLAotICAgICAgICAgICAgICAgICBGaW5kTG9hZGVyVGVzdHMsCi0gICAgICAgICAgICAgICAgIEludmFsaWRhdGVDYWNoZVRlc3RzLAotICAgICAgICAgICAgICAgICBGcm96ZW5JbXBvcnRsaWJUZXN0cywKLSAgICAgICAgICAgICAgICAgU3RhcnR1cFRlc3RzKQorICAgIGRlZiB0ZXN0X2V2ZXJ5b25lX2hhc19fX3NwZWNfXyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fc3BlY19fLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19zcGVjX18sIE5vbmUpCisKK2NsYXNzIEZyb3plbl9TdGFydHVwVGVzdHMoU3RhcnR1cFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCitjbGFzcyBTb3VyY2VfU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQppbmRleCBjMzczYjExLi5kYzk3YmExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKQEAgLTEsNCArMSw4IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAorZnJvbSAuIGltcG9ydCB1dGlsCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYm9vdHN0cmFwID0gZnJvemVuX2luaXQuX2Jvb3RzdHJhcAorc291cmNlX2Jvb3RzdHJhcCA9IHNvdXJjZV9pbml0Ll9ib290c3RyYXAKKwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdApAQCAtMTMsMTQgKzE3LDkgQEAKIGVsc2U6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKLQotTG9ja1R5cGUgPSBfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCi1EZWFkbG9ja0Vycm9yID0gX2Jvb3RzdHJhcC5fRGVhZGxvY2tFcnJvcgotCi0KIGlmIHRocmVhZGluZyBpcyBub3QgTm9uZToKLSAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKGxvY2tfdGVzdHMuUkxvY2tUZXN0cyk6Ci0gICAgICAgIGxvY2t0eXBlID0gc3RhdGljbWV0aG9kKGxhbWJkYTogTG9ja1R5cGUoInNvbWVfbG9jayIpKQorICAgIGNsYXNzIE1vZHVsZUxvY2tBc1JMb2NrVGVzdHM6CisgICAgICAgIGxvY2t0eXBlID0gY2xhc3NtZXRob2QobGFtYmRhIGNsczogY2xzLkxvY2tUeXBlKCJzb21lX2xvY2siKSkKIAogICAgICAgICAjIF9pc19vd25lZCgpIHVuc3VwcG9ydGVkCiAgICAgICAgIHRlc3RfX2lzX293bmVkID0gTm9uZQpAQCAtMzQsMTMgKzMzLDIxIEBACiAgICAgICAgICMgX3JlbGVhc2Vfc2F2ZSgpIHVuc3VwcG9ydGVkCiAgICAgICAgIHRlc3RfcmVsZWFzZV9zYXZlX3VuYWNxdWlyZWQgPSBOb25lCiAKKyAgICBjbGFzcyBGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICAgICBMb2NrVHlwZSA9IGZyb3plbl9ib290c3RyYXAuX01vZHVsZUxvY2sKKworICAgIGNsYXNzIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMsIGxvY2tfdGVzdHMuUkxvY2tUZXN0cyk6CisgICAgICAgIExvY2tUeXBlID0gc291cmNlX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworCiBlbHNlOgotICAgIGNsYXNzIE1vZHVsZUxvY2tBc1JMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgU291cmNlX01vZHVsZUxvY2tBc1JMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwYXNzCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCi1jbGFzcyBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERlYWRsb2NrQXZvaWRhbmNlVGVzdHM6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTU1LDcgKzYyLDcgQEAKIAogICAgIGRlZiBydW5fZGVhZGxvY2tfYXZvaWRhbmNlX3Rlc3Qoc2VsZiwgY3JlYXRlX2RlYWRsb2NrKToKICAgICAgICAgTkxPQ0tTID0gMTAKLSAgICAgICAgbG9ja3MgPSBbTG9ja1R5cGUoc3RyKGkpKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQorICAgICAgICBsb2NrcyA9IFtzZWxmLkxvY2tUeXBlKHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KICAgICAgICAgcGFpcnMgPSBbKGxvY2tzW2ldLCBsb2Nrc1soaSsxKSVOTE9DS1NdKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQogICAgICAgICBpZiBjcmVhdGVfZGVhZGxvY2s6CiAgICAgICAgICAgICBOVEhSRUFEUyA9IE5MT0NLUwpAQCAtNjcsNyArNzQsNyBAQAogICAgICAgICAgICAgIiIiVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2suIFJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIEZhbHNlIG9uIGRlYWRsb2NrLiIiIgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGxvY2suYWNxdWlyZSgpCi0gICAgICAgICAgICBleGNlcHQgRGVhZGxvY2tFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLkRlYWRsb2NrRXJyb3I6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC05OSwzMCArMTA2LDUwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgRmFsc2UpKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBUcnVlKSksIGxlbihyZXN1bHRzKSkKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCitjbGFzcyBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgRGVhZGxvY2tFcnJvciA9IGZyb3plbl9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKIAotY2xhc3MgTGlmZXRpbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJ0aHJlYWRzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKK2NsYXNzIFNvdXJjZV9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzKERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKKyAgICBEZWFkbG9ja0Vycm9yID0gc291cmNlX2Jvb3RzdHJhcC5fRGVhZGxvY2tFcnJvcgorCisKK2NsYXNzIExpZmV0aW1lVGVzdHM6CiAKICAgICBkZWYgdGVzdF9sb2NrX2xpZmV0aW1lKHNlbGYpOgogICAgICAgICBuYW1lID0gInh5enp5IgotICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKLSAgICAgICAgbG9jayA9IF9ib290c3RyYXAuX2dldF9tb2R1bGVfbG9jayhuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBsb2NrID0gc2VsZi5ib290c3RyYXAuX2dldF9tb2R1bGVfbG9jayhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCiAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobG9jaykKICAgICAgICAgZGVsIGxvY2sKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKIAogICAgIGRlZiB0ZXN0X2FsbF9sb2NrcyhzZWxmKToKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorCitjbGFzcyBGcm96ZW5fTGlmZXRpbWVUZXN0cyhMaWZldGltZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorCitjbGFzcyBTb3VyY2VfTGlmZXRpbWVUZXN0cyhMaWZldGltZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAogCiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBMaWZldGltZVRlc3RzKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plbl9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plbl9MaWZldGltZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9MaWZldGltZVRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlZjM5ZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfc3BlYy5weQpAQCAtMCwwICsxLDk2OCBAQAorZnJvbSAuIGltcG9ydCB1dGlsCisKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl9ib290c3RyYXAgPSBmcm96ZW5faW5pdC5fYm9vdHN0cmFwCitzb3VyY2VfYm9vdHN0cmFwID0gc291cmNlX2luaXQuX2Jvb3RzdHJhcAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworaW1wb3J0IG9zLnBhdGgKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBDbGVhbkltcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKKworCitjbGFzcyBUZXN0TG9hZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKKyMgICAgICAgIGlmIHBhdGg6CisjICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyMgICAgICAgICAgICAgICAgaWYgbm90IHBhdGguZW5kc3dpdGgoJy5weScpOgorIyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKQorIyAgICAgICAgICAgIGVsaWYgaXNfcGFja2FnZSBpcyBOb25lOgorIyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gcGF0aC5lbmRzd2l0aCgnX19pbml0X18ucHknKQorCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5wYWNrYWdlID0gaXNfcGFja2FnZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxUZXN0TG9hZGVyIG9iamVjdD4nCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgPT0gJ2dldF9maWxlbmFtZScgYW5kIHNlbGYucGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZmlsZW5hbWUKKyAgICAgICAgaWYgbmFtZSA9PSAnaXNfcGFja2FnZSc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faXNfcGFja2FnZQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorCisgICAgZGVmIF9nZXRfZmlsZW5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBfaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFja2FnZQorCisKK2NsYXNzIE5ld0xvYWRlcihUZXN0TG9hZGVyKToKKworICAgIEVHR1MgPSAxCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgbW9kdWxlLmVnZ3MgPSBzZWxmLkVHR1MKKworCitjbGFzcyBMZWdhY3lMb2FkZXIoVGVzdExvYWRlcik6CisKKyAgICBIQU0gPSAtMQorCisgICAgQGZyb3plbl91dGlsLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIG1vZHVsZS5oYW0gPSBzZWxmLkhBTQorICAgICAgICByZXR1cm4gbW9kdWxlCisKKworY2xhc3MgTW9kdWxlU3BlY1Rlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5wYXRoID0gJ3NwYW0ucHknCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmxvY19zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvY19zcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X25vX2xvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfcGFja2FnZV9mYWxzZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pc19wYWNrYWdlX3RydWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwZWMgPT0gb3RoZXIpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eV9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZD1zZWxmLmNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Nfc3BlYywgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbmVxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPSdoYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfbG9jYXRpb249RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnNwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eV9pbmNvbXBsZXRlKHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnNwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0uZWdncycsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5wYXJlbnQsICdzcGFtJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0uZWdncycsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnBhcmVudCwgJ3NwYW0uZWdncycpCisKKyAgICAjIGNhY2hlZAorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NldChzZWxmKToKKyAgICAgICAgYmVmb3JlID0gc2VsZi5zcGVjLmNhY2hlZAorICAgICAgICBzZWxmLnNwZWMuY2FjaGVkID0gJ3RoZXJlJworICAgICAgICBhZnRlciA9IHNlbGYuc3BlYy5jYWNoZWQKKworICAgICAgICBzZWxmLmFzc2VydElzKGJlZm9yZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZnRlciwgJ3RoZXJlJykKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9ub19vcmlnaW4oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF93aXRoX29yaWdpbl9ub3RfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2Uoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMuY2FjaGVkLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2VfdW5rbm93bl9zdWZmaXgoc2VsZik6CisgICAgICAgIHNlbGYubG9jX3NwZWMub3JpZ2luID0gJ3NwYW0uc3BhbXNwYW1zcGFtJworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2Nfc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlX21pc3NpbmdfY2FjaGVfdGFnKHNlbGYpOgorICAgICAgICBvcmlnaW5hbCA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKyAgICAgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FjaGVkID0gc2VsZi5sb2Nfc3BlYy5jYWNoZWQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgPSBvcmlnaW5hbAorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZWxlc3Moc2VsZik6CisgICAgICAgIHNlbGYubG9jX3NwZWMub3JpZ2luID0gJ3NwYW0ucHljJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Nfc3BlYy5jYWNoZWQsICdzcGFtLnB5YycpCisKKworY2xhc3MgRnJvemVuX01vZHVsZVNwZWNUZXN0cyhNb2R1bGVTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisKKworY2xhc3MgU291cmNlX01vZHVsZVNwZWNUZXN0cyhNb2R1bGVTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisKKworY2xhc3MgTW9kdWxlU3BlY01ldGhvZHNUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5sb2Nfc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgIyBpbml0X21vZHVsZV9hdHRycworCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJ3NwYW0nLCAnaGFtJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19wYXRoX18sIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfbG9jYXRpb24oc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc3BlYy5vcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNwZWMub3JpZ2luKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2RpZmZlcmVudF9uYW1lKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ2VnZ3MnKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19kaWZmZXJlbnRfc3BlYyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKHNlbGYubmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnZWdncycsIG9iamVjdCgpKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfYWxyZWFkeV9zZXQoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgnaGFtLmVnZ3MnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IG9iamVjdCgpCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICdoYW0nCisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFsnZWdncyddCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICdoYW0vZWdncy9fX2luaXRfXy5weScKKyAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobW9kdWxlLl9fZmlsZV9fKQorICAgICAgICBvcmlnaW5hbCA9IHZhcnMobW9kdWxlKS5jb3B5KCkKKyAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBvcmlnaW5hbFsnX19sb2FkZXJfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgb3JpZ2luYWxbJ19fcGFja2FnZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fcGF0aF9fLCBvcmlnaW5hbFsnX19wYXRoX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIG9yaWdpbmFsWydfX2ZpbGVfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBvcmlnaW5hbFsnX19jYWNoZWRfXyddKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfaW1tdXRhYmxlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBvYmplY3QoKQorICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYworICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWycnXQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX25hbWVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgICMgY3JlYXRlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZShzZWxmKToKKyAgICAgICAgY3JlYXRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xvYWRlcihzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKCkKKyAgICAgICAgY2xhc3MgQ3JlYXRpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBDcmVhdGluZ0xvYWRlcigpCisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZCwgbW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fbG9hZGVyX25vdF9oYW5kbGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBDcmVhdGluZ0xvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBDcmVhdGluZ0xvYWRlcigpCisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICAjIGV4ZWMoKQorCisgICAgZGVmIHRlc3RfZXhlYyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIG1vZHVsZSA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ2VnZ3MnKSkKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuZWdncywgMSkKKworICAgICMgbG9hZCgpCisKKyAgICBkZWYgdGVzdF9sb2FkKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLCBpbnN0YWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb2FkX3JlcGxhY2VkKHNlbGYpOgorICAgICAgICByZXBsYWNlbWVudCA9IG9iamVjdCgpCisgICAgICAgIGNsYXNzIFJlcGxhY2luZ0xvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZS5fX25hbWVfX10gPSByZXBsYWNlbWVudAorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gUmVwbGFjaW5nTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLCByZXBsYWNlbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIHJlcGxhY2VtZW50KQorCisgICAgZGVmIHRlc3RfbG9hZF9mYWlsZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZhaWxlZExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gRmFpbGVkTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuc3BlYy5uYW1lLCBzeXMubW9kdWxlcykKKworICAgIGRlZiB0ZXN0X2xvYWRfZmFpbGVkX3JlbW92ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZhaWxlZExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBGYWlsZWRMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5zcGVjLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfbG9hZF9leGlzdGluZyhzZWxmKToKKyAgICAgICAgZXhpc3RpbmcgPSB0eXBlKHN5cykoJ2hhbScpCisgICAgICAgIGV4aXN0aW5nLmNvdW50ID0gNQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLm5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbc2VsZi5uYW1lXSA9IGV4aXN0aW5nCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5zcGVjLm5hbWUgPT0gc2VsZi5uYW1lCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnaGFtJykpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeShzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IExlZ2FjeUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuaGFtLCAtMSkKKworICAgIGRlZiB0ZXN0X2xvYWRfbGVnYWN5X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorCisgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3lfYXR0cmlidXRlc19pbW11dGFibGUoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IG9iamVjdCgpCisgICAgICAgIGNsYXNzIEltbXV0YWJsZUxvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEltbXV0YWJsZUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdLCBtb2R1bGUpCisKKyAgICAjIHJlbG9hZCgpCisKKyAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIGxvYWRlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2RpZmllZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQuZWdncyA9IDIKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2V4dHJhX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkLmF2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9hZGVkLmF2YWlsYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZC5fX25hbWVfXyA9ICdoYW0nCisgICAgICAgICAgICBkZWwgbG9hZGVkLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19wYWNrYWdlX18KKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19zcGVjX18KKyAgICAgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihsb2FkZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sZWdhY3koc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmhhbSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIGxvYWRlZCkKKworCitjbGFzcyBGcm96ZW5fTW9kdWxlU3BlY01ldGhvZHNUZXN0cyhNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworCitjbGFzcyBTb3VyY2VfTW9kdWxlU3BlY01ldGhvZHNUZXN0cyhNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBNb2R1bGVSZXByVGVzdHM6CisKKyAgICAjIFhYWCBBZGQgbW9yZSB0ZXN0cyBmb3IgcmVwcihtb2R1bGUpIG9uY2UgTW9kdWxlU3BlYy5fbW9kdWxlX3JlcHIoKQorICAgICMgaXMgaW4gcGxhY2U/CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubW9kdWxlID0gdHlwZShvcykoJ3NwYW0nKQorICAgICAgICBzZWxmLnNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtJywgVGVzdExvYWRlcigpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fbG9hZGVyX19fbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiAnPGRlbGljaW91cyB7fT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgICAgIHNlbGYubW9kdWxlLl9fbG9hZGVyX18gPSBMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxkZWxpY2lvdXMgc3BhbT4nKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fbG9hZGVyX19fbW9kdWxlX3JlcHJfYmFkKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IExvYWRlcigpCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gKDxUZXN0TG9hZGVyIG9iamVjdD4pPicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX18oc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICdpbiBhIGhvbGUsIGluIHRoZSBncm91bmQnCisgICAgICAgIHNlbGYuc3BlYy5vcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdCgnc3BhbScsIG9yaWdpbikpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX19fbG9jYXRpb24oc2VsZik6CisgICAgICAgIGxvY2F0aW9uID0gJ2luX2FfZ2FsYXh5X2Zhcl9mYXJfYXdheS5weScKKyAgICAgICAgc2VsZi5zcGVjLm9yaWdpbiA9IGxvY2F0aW9uCisgICAgICAgIHNlbGYuc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdCgnc3BhbScsIGxvY2F0aW9uKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19ub19vcmlnaW4oc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSAoPFRlc3RMb2FkZXIgb2JqZWN0Pik+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19ub19vcmlnaW5fbm9fbG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTm9uZQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX25hbWUoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLm1vZHVsZS5fX25hbWVfXworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnPycpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfZmlsZShzZWxmKToKKyAgICAgICAgZmlsZW5hbWUgPSAnZS9pL2UvaS9vL3NwYW0ucHknCisgICAgICAgIHNlbGYubW9kdWxlLl9fZmlsZV9fID0gZmlsZW5hbWUKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQoJ3NwYW0nLCBmaWxlbmFtZSkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm9fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IFRlc3RMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9ICg8VGVzdExvYWRlciBvYmplY3Q+KT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX2ZpbGVfbm9fbG9hZGVyKHNlbGYpOgorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnc3BhbScpKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVSZXByVGVzdHMoTW9kdWxlUmVwclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworCitjbGFzcyBTb3VyY2VfTW9kdWxlUmVwclRlc3RzKE1vZHVsZVJlcHJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgRmFjdG9yeVRlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5wYXRoID0gJ3NwYW0ucHknCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5maWxlbG9hZGVyID0gVGVzdExvYWRlcihzZWxmLnBhdGgpCisgICAgICAgIHNlbGYucGtnbG9hZGVyID0gVGVzdExvYWRlcihzZWxmLnBhdGgsIFRydWUpCisKKyAgICAjIHNwZWNfZnJvbV9sb2FkZXIoKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0X3dpdGhfYmFkX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIGxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfb3JpZ2luKHNlbGYpOgorICAgICAgICBvcmlnaW4gPSAnc29tZXdoZXJlIG92ZXIgdGhlIHJhaW5ib3cnCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPW9yaWdpbikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgb3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfZmFsc2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3RydWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9vcmlnaW5fYW5kX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICd3aGVyZSB0aGUgc3RyZWV0cyBoYXZlIG5vIG5hbWUnCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPW9yaWdpbiwgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBvcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2Vfd2l0aF9sb2FkZXJfZmFsc2Uoc2VsZik6CisgICAgICAgIGxvYWRlciA9IFRlc3RMb2FkZXIoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3dpdGhfbG9hZGVyX3RydWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IFRlc3RMb2FkZXIoaXNfcGFja2FnZT1UcnVlKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0X3dpdGhfZmlsZV9sb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX2ZhbHNlX3dpdGhfZmlsZWxvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3RydWVfd2l0aF9maWxlbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgICMgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5tYWNoaW5lcnkgaXMgc291cmNlX21hY2hpbmVyeToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdub3Qgc3VyZSB3aHkgdGhpcyBpcyBicmVha2luZy4uLicpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNwZWMubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlci5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIucGF0aCwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2RlZmF1bHRfd2l0aG91dF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdF9iYWRfc3VmZml4KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgJ3NwYW0uZWdncycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fbG9hZGVyX25vX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9sb2FkZXJfbm9fbG9jYXRpb25fbm9fZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sICc8dW5rbm93bj4nKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2xvYWRlcl9ub19sb2NhdGlvbl9iYWRfZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBsb2FkZXI9bG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgJzx1bmtub3duPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9ub25lKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZW1wdHkoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfbm90X2VtcHR5KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVsnZWdncyddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnZWdncyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYucGtnbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYucGtnbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdF9ub3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0X25vX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHRfYmFkX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisKK2NsYXNzIEZyb3plbl9GYWN0b3J5VGVzdHMoRmFjdG9yeVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9GYWN0b3J5VGVzdHMoRmFjdG9yeVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CmluZGV4IGVmYzg5NzcuLjYwNGU0NGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKQEAgLTEsMjMgKzEsNjQgQEAKIGZyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCi1pbXBvcnQgaW1wCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCitpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogCiAKLWNsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERlY29kZVNvdXJjZUJ5dGVzVGVzdHM6CisKKyAgICBzb3VyY2UgPSAic3RyaW5nID0nw7wnIgorCisgICAgZGVmIHRlc3RfdXQ4X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksIHNlbGYuc291cmNlKQorCisgICAgZGVmIHRlc3Rfc3BlY2lmaWVkX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSAnIyBjb2Rpbmc9bGF0aW4tMVxuJyArIHNlbGYuc291cmNlCisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICBhc3NlcnQgc291cmNlX2J5dGVzICE9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHNvdXJjZSA9ICdcclxuJy5qb2luKFtzZWxmLnNvdXJjZSwgc2VsZi5zb3VyY2VdKQorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oW3NlbGYuc291cmNlLCBzZWxmLnNvdXJjZV0pKQorCitGcm96ZW5fRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgU291cmNlX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBEZWNvZGVTb3VyY2VCeXRlc1Rlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisKK2NsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLiIiIgogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGNscywgZnVuYyk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBjbHMudXRpbC5tb2R1bGVfZm9yX2xvYWRlcihmdW5jKQorCisgICAgZGVmIHRlc3Rfd2FybmluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgYSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gdXNlZC4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ1bmMgPSBzZWxmLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHg6IHgpCisKICAgICBkZWYgcmV0dXJuX21vZHVsZShzZWxmLCBuYW1lKToKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgc2VsZiwgbW9kdWxlOiBtb2R1bGUpCisgICAgICAgIGZ4biA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHNlbGYsIG1vZHVsZTogbW9kdWxlKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG5hbWUpCiAKICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNlbGYsIG5hbWUpOgogICAgICAgICBkZWYgdG9fd3JhcChzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcih0b193cmFwKQorICAgICAgICBmeG4gPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKHRvX3dyYXApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ4bihzZWxmLCBuYW1lKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zNSwxMiArNzYsMjMgQEAKIAogICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSBtb2R1bGUgaXMgcmV1c2VkIGlmIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMuCisgICAgICAgIGNsYXNzIEZha2VMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgQHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIKKyAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKICAgICAgICAgbmFtZSA9ICdhLmIuYycKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ2EuYi5jJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYS5iLmMnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IDQyCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IDQyCiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gc2VsZi5yZXR1cm5fbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBsb2FkZXIgPSBGYWtlTG9hZGVyKCkKKyAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZXR1cm5lZF9tb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9uZXdfbW9kdWxlX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgbW9kdWxlIGlzIHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcyBpZiBhZGRlZCBidXQgYW4KQEAgLTUzLDcgKzEwNSw3IEBACiAgICAgZGVmIHRlc3RfcmVsb2FkX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgZmFpbHVyZSBvbiByZWxvYWQgbGVhdmVzIHRoZSBtb2R1bGUgaW4tcGxhY2UuCiAgICAgICAgIG5hbWUgPSAnYS5iLmMnCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCiAgICAgICAgICAgICBzZWxmLnJhaXNlX2V4Y2VwdGlvbihuYW1lKQpAQCAtNjEsNyArMTEzLDcgQEAKIAogICAgIGRlZiB0ZXN0X2RlY29yYXRvcl9hdHRycyhzZWxmKToKICAgICAgICAgZGVmIGZ4bihzZWxmLCBtb2R1bGUpOiBwYXNzCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGZ4bikKKyAgICAgICAgd3JhcHBlZCA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIoZnhuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19uYW1lX18sIGZ4bi5fX25hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fcXVhbG5hbWVfXywgZnhuLl9fcXVhbG5hbWVfXykKIApAQCAtODcsNyArMTM5LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9wa2cgPSBpc19wYWNrYWdlCiAgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGtnCi0gICAgICAgICAgICBAdXRpbC5tb2R1bGVfZm9yX2xvYWRlcgorICAgICAgICAgICAgQHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIKICAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKIApAQCAtMTA3LDggKzE1OSwxMSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG5hbWUpCiAKK0Zyb3plbl9Nb2R1bGVGb3JMb2FkZXJUZXN0cywgU291cmNlX01vZHVsZUZvckxvYWRlclRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTW9kdWxlRm9yTG9hZGVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKLWNsYXNzIFNldFBhY2thZ2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFNldFBhY2thZ2VUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIudXRpbC5zZXRfcGFja2FnZS4iIiIKIApAQCAtMTE2LDcgKzE3MSw3IEBACiAgICAgICAgICIiIlZlcmlmeSB0aGUgbW9kdWxlIGhhcyB0aGUgZXhwZWN0ZWQgdmFsdWUgZm9yIF9fcGFja2FnZV9fIGFmdGVyCiAgICAgICAgIHBhc3NpbmcgdGhyb3VnaCBzZXRfcGFja2FnZS4iIiIKICAgICAgICAgZnhuID0gbGFtYmRhOiBtb2R1bGUKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwuc2V0X3BhY2thZ2UoZnhuKQorICAgICAgICB3cmFwcGVkID0gc2VsZi51dGlsLnNldF9wYWNrYWdlKGZ4bikKICAgICAgICAgd3JhcHBlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBtb2R1bGUuX19wYWNrYWdlX18pCkBAIC0xMjQsMjYgKzE3OSwyNiBAQAogICAgIGRlZiB0ZXN0X3RvcF9sZXZlbChzZWxmKToKICAgICAgICAgIyBfX3BhY2thZ2VfXyBzaG91bGQgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgYSB0b3AtbGV2ZWwgbW9kdWxlLgogICAgICAgICAjIEltcGxpY2l0bHkgdGVzdHMgd2hlbiBwYWNrYWdlIGlzIHNldCB0byBOb25lLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnbW9kdWxlJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kdWxlJykKICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICcnKQogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgIyBUZXN0IHNldHRpbmcgX19wYWNrYWdlX18gZm9yIGEgcGFja2FnZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ3BrZycpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BrZycpCiAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFsnPHBhdGg+J10KICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICdwa2cnKQogCiAgICAgZGVmIHRlc3Rfc3VibW9kdWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgX19wYWNrYWdlX18gZm9yIGEgbW9kdWxlIGluIGEgcGFja2FnZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ3BrZy5tb2QnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwa2cubW9kJykKICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICdwa2cnKQogCiAgICAgZGVmIHRlc3Rfc2V0dGluZ19pZl9taXNzaW5nKHNlbGYpOgogICAgICAgICAjIF9fcGFja2FnZV9fIHNob3VsZCBiZSBzZXQgaWYgaXQgaXMgbWlzc2luZy4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZCcpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZCcpCiAgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKToKICAgICAgICAgICAgIGRlbGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICcnKQpAQCAtMTUxLDU4ICsyMDYsMjMwIEBACiAgICAgZGVmIHRlc3RfbGVhdmluZ19hbG9uZShzZWxmKToKICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyBpcyBzZXQgYW5kIG5vdCBOb25lIHRoZW4gbGVhdmUgaXQgYWxvbmUuCiAgICAgICAgIGZvciB2YWx1ZSBpbiAoVHJ1ZSwgRmFsc2UpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZCcpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2QnKQogICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gdmFsdWUKICAgICAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JfYXR0cnMoc2VsZik6CiAgICAgICAgIGRlZiBmeG4obW9kdWxlKTogcGFzcwotICAgICAgICB3cmFwcGVkID0gdXRpbC5zZXRfcGFja2FnZShmeG4pCisgICAgICAgIHdyYXBwZWQgPSBzZWxmLnV0aWwuc2V0X3BhY2thZ2UoZnhuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19uYW1lX18sIGZ4bi5fX25hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fcXVhbG5hbWVfXywgZnhuLl9fcXVhbG5hbWVfXykKIAorRnJvemVuX1NldFBhY2thZ2VUZXN0cywgU291cmNlX1NldFBhY2thZ2VUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNldFBhY2thZ2VUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAotY2xhc3MgUmVzb2x2ZU5hbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFNldExvYWRlclRlc3RzOgorCisgICAgIiIiVGVzdHMgaW1wb3J0bGliLnV0aWwuc2V0X2xvYWRlcigpLiIiIgorCisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEB1dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworICAgIGRlZiB0ZXN0X25vX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5EdW1teUxvYWRlcigpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2lzX05vbmUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCisKKyAgICBkZWYgdGVzdF9ub3RfcmVzZXQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXyA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCisKK2NsYXNzIEZyb3plbl9TZXRMb2FkZXJUZXN0cyhTZXRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAZnJvemVuX3V0aWwuc2V0X2xvYWRlcgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorCitjbGFzcyBTb3VyY2VfU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQHNvdXJjZV91dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworCitjbGFzcyBSZXNvbHZlTmFtZVRlc3RzOgogCiAgICAgIiIiVGVzdHMgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuIiIiCiAKICAgICBkZWYgdGVzdF9hYnNvbHV0ZShzZWxmKToKICAgICAgICAgIyBiYWNvbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgTm9uZSkpCiAKICAgICBkZWYgdGVzdF9hYm9zbHV0ZV93aXRoaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBiYWNvbiBpbiBzcGFtCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgdXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgJ3NwYW0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsICdzcGFtJykpCiAKICAgICBkZWYgdGVzdF9ub19wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC5iYWNvbiBpbiAnJwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICcnKQorICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJycpCiAKICAgICBkZWYgdGVzdF9pbl9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC5iYWNvbiBpbiBzcGFtCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NwYW0uZWdncy5iYWNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICdzcGFtLmVnZ3MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnc3BhbS5lZ2dzJykpCiAKICAgICBkZWYgdGVzdF9vdGhlcl9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC4uYmFjb24gaW4gc3BhbS5iYWNvbgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtLmJhY29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtLmVnZ3MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0uZWdncycpKQogCiAgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgogICAgICAgICAjIC4uYmFjb24gaW4gc3BhbQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbScpCisgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQorCitGcm96ZW5fUmVzb2x2ZU5hbWVUZXN0cywgU291cmNlX1Jlc29sdmVOYW1lVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBSZXNvbHZlTmFtZVRlc3RzLAorICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgIE1vZHVsZUZvckxvYWRlclRlc3RzLAotICAgICAgICAgICAgU2V0UGFja2FnZVRlc3RzLAotICAgICAgICAgICAgUmVzb2x2ZU5hbWVUZXN0cwotICAgICAgICApCitjbGFzcyBNYWdpY051bWJlclRlc3RzOgorCisgICAgZGVmIHRlc3RfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIFNob3VsZCBiZSA0IGJ5dGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKSwgNCkKKworICAgIGRlZiB0ZXN0X2luY29ycG9yYXRlc19ybihzZWxmKToKKyAgICAgICAgIyBUaGUgbWFnaWMgbnVtYmVyIHVzZXMgXHJcbiB0byBjb21lIG91dCB3cm9uZyB3aGVuIHNwbGl0dGluZyBvbiBsaW5lcy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudXRpbC5NQUdJQ19OVU1CRVIuZW5kc3dpdGgoYidcclxuJykpCisKK0Zyb3plbl9NYWdpY051bWJlclRlc3RzLCBTb3VyY2VfTWFnaWNOdW1iZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1hZ2ljTnVtYmVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisKKworY2xhc3MgUEVQMzE0N1Rlc3RzOgorCisgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDctcmVsYXRlZCBmdW5jdGlvbnM6IGNhY2hlX2Zyb21fc291cmNlIGFuZCBzb3VyY2VfZnJvbV9jYWNoZS4iIiIKKworICAgIHRhZyA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgbm90IGJlIE5vbmUnKQorICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weWMgZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9ub19jYWNoZV90YWcoc2VsZik6CisgICAgICAgICMgTm8gY2FjaGUgdGFnIG1lYW5zIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnd2hhdGV2ZXIucHknKQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fZG90KHNlbGYpOgorICAgICAgICAjIERpcmVjdG9yeSB3aXRoIGEgZG90LCBmaWxlbmFtZSB3aXRob3V0IGRvdC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdmaWxlJykKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28uYmFyJywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxle30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3B0aW1pemVkKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weW8gZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weW8nLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIEZhbHNlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2VfY3dkKHNlbGYpOgorICAgICAgICBwYXRoID0gJ2Zvby5weScKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdfX3B5Y2FjaGVfXycsICdmb28ue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgV2hlbiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgaXQgY2FuIGJlIGFueSB0cnVlLWlzaCBvciBmYWxzZS1pc2gKKyAgICAgICAgIyB2YWx1ZS4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXoucHknKQorICAgICAgICBwYXJ0aWFsX2V4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXoue30ucHknLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFtdKSwgcGFydGlhbF9leHBlY3QgKyAnbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFsxN10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxfZXhwZWN0ICsgJ2MnKQorICAgICAgICAjIEhvd2V2ZXIgaWYgdGhlIGJvb2wtaXNobmVzcyBjYW4ndCBiZSBkZXRlcm1pbmVkLCB0aGUgZXhjZXB0aW9uCisgICAgICAgICMgcHJvcGFnYXRlcy4KKyAgICAgICAgY2xhc3MgQmVhcmlzaDoKKyAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6LnB5JywgQmVhcmlzaCgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3Muc2VwID09ICdcXCcgYW5kIG9zLmFsdHNlcCA9PSAnLycsCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlcmUgb3MuYWx0c2VwIGlzIGRlZmluZWQnKQorICAgIGRlZiB0ZXN0X3NlcF9hbHRzZXBfYW5kX3NlcF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBXaW5kb3dzIHBhdGggYW5kIFBFUCAzMTQ3IHdoZXJlIHNlcCBpcyByaWdodCBvZiBhbHRzZXAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ1xcZm9vXFxiYXJcXGJhei9xdXgucHknLCBUcnVlKSwKKyAgICAgICAgICAgICdcXGZvb1xcYmFyXFxiYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBub3QgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyB0byBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdOb25lJykKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIFBFUCAzMTQ3IGRlZmluZWQgLnB5YyBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8KKyAgICAgICAgIyBpdHMgc291cmNlLiAgVGhpcyB0ZXN0cyB0aGUgZ29vZCBwYXRoLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAncXV4LnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUocGF0aCksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgIyBJZiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUsIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2JsYWgnLCAnX19weWNhY2hlX18nLCAnd2hhdGV2ZXIucHljJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihzeXMuaW1wbGVtZW50YXRpb24sICdjYWNoZV90YWcnLCBOb25lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9iYWRfcGF0aChzZWxmKToKKyAgICAgICAgIyBXaGVuIHRoZSBwYXRoIHRvIGEgcHljIGZpbGUgaXMgbm90IGluIFBFUCAzMTQ3IGZvcm1hdCwgYSBWYWx1ZUVycm9yCisgICAgICAgICMgaXMgcmFpc2VkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJy9mb28vYmFyL2JhenF1eC5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fc2xhc2goc2VsZik6CisgICAgICAgICMgTm8gc2xhc2hlcyBhdCBhbGwgaW4gcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLCAnZm9vLmNweXRob24tMzIucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19mZXdfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gZmV3IGRvdHMgaW4gZmluYWwgcGF0aCBjb21wb25lbnQgLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ19fcHljYWNoZV9fL2Zvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfdG9vX21hbnlfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gbWFueSBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnX19weWNhY2hlX18vZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19fcHljYWNoZV9fKHNlbGYpOgorICAgICAgICAjIEFub3RoZXIgcHJvYmxlbSB3aXRoIHRoZSBwYXRoIC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnL2Zvby9iYXIvZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKK0Zyb3plbl9QRVAzMTQ3VGVzdHMsIFNvdXJjZV9QRVAzMTQ3VGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBQRVAzMTQ3VGVzdHMsCisgICAgICAgIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKaW5kZXggZWYzMmY3ZC4uODBkNDNiNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDkgKzEsMzAgQEAKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKLWltcG9ydCBpbXAKIGltcG9ydCBvcy5wYXRoCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCisKKworZGVmIGltcG9ydF9pbXBvcnRsaWIobW9kdWxlX25hbWUpOgorICAgICIiIkltcG9ydCBhIG1vZHVsZSBmcm9tIGltcG9ydGxpYiBib3RoIHcvIGFuZCB3L28gX2Zyb3plbl9pbXBvcnRsaWIuIiIiCisgICAgZnJlc2ggPSAoJ2ltcG9ydGxpYicsKSBpZiAnLicgaW4gbW9kdWxlX25hbWUgZWxzZSAoKQorICAgIGZyb3plbiA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICBzb3VyY2UgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUobW9kdWxlX25hbWUsIGZyZXNoPWZyZXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja2VkPSgnX2Zyb3plbl9pbXBvcnRsaWInLCkpCisgICAgcmV0dXJuIGZyb3plbiwgc291cmNlCisKKworZGVmIHRlc3RfYm90aCh0ZXN0X2NsYXNzLCAqKmt3YXJncyk6CisgICAgZnJvemVuX3Rlc3RzID0gdHlwZXMubmV3X2NsYXNzKCdGcm96ZW5fJyt0ZXN0X2NsYXNzLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpKQorICAgIHNvdXJjZV90ZXN0cyA9IHR5cGVzLm5ld19jbGFzcygnU291cmNlXycrdGVzdF9jbGFzcy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKyAgICBmcm96ZW5fdGVzdHMuX19tb2R1bGVfXyA9IHNvdXJjZV90ZXN0cy5fX21vZHVsZV9fID0gdGVzdF9jbGFzcy5fX21vZHVsZV9fCisgICAgZm9yIGF0dHIsIChmcm96ZW5fdmFsdWUsIHNvdXJjZV92YWx1ZSkgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgIHNldGF0dHIoZnJvemVuX3Rlc3RzLCBhdHRyLCBmcm96ZW5fdmFsdWUpCisgICAgICAgIHNldGF0dHIoc291cmNlX3Rlc3RzLCBhdHRyLCBzb3VyY2VfdmFsdWUpCisgICAgcmV0dXJuIGZyb3plbl90ZXN0cywgc291cmNlX3Rlc3RzCiAKIAogQ0FTRV9JTlNFTlNJVElWRV9GUyA9IFRydWUKQEAgLTk4LDcgKzExOSw3IEBACiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IG5hbWUucnNwbGl0KCcuJywgMSlbMF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IGltcG9ydF9uYW1lCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShpbXBvcnRfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoaW1wb3J0X25hbWUpCiAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICc8bW9jayBfX2ZpbGVfXz4nCiAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBwYWNrYWdlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKaW5kZXggNWNiZWM5Yi4uMzY1ZjU5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtOCwxMCArOCwxNyBAQAogaW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbXBvcnRsaWIKIGZyb20gb3MucGF0aCBpbXBvcnQgbm9ybWNhc2UKK3RyeToKKyAgICBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgVGhyZWFkUG9vbEV4ZWN1dG9yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVGhyZWFkUG9vbEV4ZWN1dG9yID0gTm9uZQogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIERpcnNPblN5c1BhdGgKLQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IE1JU1NJTkdfQ19ET0NTVFJJTkdTCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyIGFzIG1vZAogZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlcjIgYXMgbW9kMgogCkBAIC0xMjAsNyArMTI3LDYgQEAKICAgICBkZWYgdGVzdF9nZXRfc2xvdF9tZW1iZXJzKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSAoImEiLCAiYiIpCi0KICAgICAgICAgeCA9IEMoKQogICAgICAgICB4LmEgPSA0MgogICAgICAgICBtZW1iZXJzID0gZGljdChpbnNwZWN0LmdldG1lbWJlcnMoeCkpCkBAIC00MTgsMTQgKzQyNCwxNCBAQAogICAgICAgICAgICAgdW5pY29kZWRhdGEuX19maWxlX19bLTQ6XSBpbiAoIi5weWMiLCAiLnB5byIpLAogICAgICAgICAidW5pY29kZWRhdGEgaXMgbm90IGFuIGV4dGVybmFsIGJpbmFyeSBtb2R1bGUiKQogICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfYmluYXJ5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgdW5pY29kZWRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgdW5pY29kZWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCB1bmljb2RlZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCB1bmljb2RlZGF0YSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfY29kZV9pbl9saW5lY2FjaGUoc2VsZik6CiAgICAgICAgIGxpbmVzID0gWyJ4PTEiXQogICAgICAgICBjbyA9IGNvbXBpbGUobGluZXNbMF0sICJfZHluYW1pY2FsbHlfY3JlYXRlZF9maWxlIiwgImV4ZWMiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIGNvKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKICAgICAgICAgbGluZWNhY2hlLmNhY2hlW2NvLmNvX2ZpbGVuYW1lXSA9ICgxLCBOb25lLCBsaW5lcywgY28uY29fZmlsZW5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5maW5kc291cmNlKGNvKSwgKGxpbmVzLDApKQpAQCAtNDYzLDEzICs0NjksMTMgQEAKICAgICBBIGJyb2tlbiBkYXRhIGRlc2NyaXB0b3IuIFNlZSBidWcgIzE3ODUuCiAgICAgIiIiCiAgICAgZGVmIF9fZ2V0X18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldF9fIGRhdGEgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIGRhdGEgZGVzY3JpcHRvciIpCiAKICAgICBkZWYgX19zZXRfXygqYXJncyk6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRhdHRyX18gZGF0YSBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gZGF0YSBkZXNjcmlwdG9yIikKIAogCiBjbGFzcyBfQnJva2VuTWV0aG9kRGVzY3JpcHRvcihvYmplY3QpOgpAQCAtNDc3LDEwICs0ODMsMTAgQEAKICAgICBBIGJyb2tlbiBtZXRob2QgZGVzY3JpcHRvci4gU2VlIGJ1ZyAjMTc4NS4KICAgICAiIiIKICAgICBkZWYgX19nZXRfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0X18gbWV0aG9kIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBtZXRob2QgZGVzY3JpcHRvciIpCiAKICAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yIikKIAogCiAjIEhlbHBlciBmb3IgdGVzdGluZyBjbGFzc2lmeV9jbGFzc19hdHRycy4KQEAgLTY1MCw2ICs2NTYsODggQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYnVpbHRpbiwgdHlwZSk6CiAgICAgICAgICAgICAgICAgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhidWlsdGluKQogCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfRHluYW1pY0NsYXNzQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2hhbSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc3BhbScKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBWQShtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgaGFtKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZWdncycKKyAgICAgICAgc2hvdWxkX2ZpbmRfZGNhID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2hhbScsICdkYXRhJywgVkEsIFZBLl9fZGljdF9fWydoYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9kY2EsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoVkEpKQorICAgICAgICBzaG91bGRfZmluZF9nYSA9IGluc3BlY3QuQXR0cmlidXRlKCdoYW0nLCAnZGF0YScsIE1ldGEsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9nYSwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhWQSkpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9tZXRhY2xhc3NfY2xhc3NfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZmlzaCA9ICdzbGFwJworICAgICAgICAgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlc19fJywgJ19fbmFtZV9fJywgJ2Zpc2gnXQorICAgICAgICBjbGFzcyBDbGFzcyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNob3VsZF9maW5kID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2Zpc2gnLCAnZGF0YScsIE1ldGEsICdzbGFwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdCT09NJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0JPT00nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzaG91bGRfZmluZCA9IGluc3BlY3QuQXR0cmlidXRlKCdCT09NJywgJ2RhdGEnLCBNZXRhLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlX211bHRpX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldChbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3RocmVlJ10gKworICAgICAgICAgICAgICAgICAgICBNZXRhMS5fX2Rpcl9fKGNscykgKyBNZXRhMi5fX2Rpcl9fKGNscykpKSkKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3RocmVlJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBDbGFzczEobWV0YWNsYXNzPU1ldGExKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQ2xhc3MyKENsYXNzMSwgbWV0YWNsYXNzPU1ldGEzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzaG91bGRfZmluZDEgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnb25lJywgJ2RhdGEnLCBNZXRhMSwgMSkKKyAgICAgICAgc2hvdWxkX2ZpbmQyID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ3R3bycsICdkYXRhJywgTWV0YTIsIDIpCisgICAgICAgIHNob3VsZF9maW5kMyA9IGluc3BlY3QuQXR0cmlidXRlKCd0aHJlZScsICdkYXRhJywgTWV0YTMsIDMpCisgICAgICAgIGNjYSA9IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MyKQorICAgICAgICBmb3Igc2YgaW4gKHNob3VsZF9maW5kMSwgc2hvdWxkX2ZpbmQyLCBzaG91bGRfZmluZDMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZiwgY2NhKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfY2xhc3NfYXR0cnNfd2l0aF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGF0dHJzID0gW2FbMF0gZm9yIGEgaW4gaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc19kZXNjcmlwdG9ycyhzZWxmKToKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgogICAgICAgICAgICAgZGQgPSBfQnJva2VuRGF0YURlc2NyaXB0b3IoKQpAQCAtNjkzLDYgKzc4MSwyOCBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYiwgaW5zcGVjdC5pc21ldGhvZCkpCiAKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdlZ2dzJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzY3JhbWJsZWQnCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgZWdncyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NjcmFtYmxlZCcpLCBpbnNwZWN0LmdldG1lbWJlcnMoQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NwYW0nKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEEoKSkpCisKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX3dpdGhfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZyddCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhdHRycyA9IFthWzBdIGZvciBhIGluIGluc3BlY3QuZ2V0bWVtYmVycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAKIF9nbG9iYWxfcmVmID0gb2JqZWN0KCkKIGNsYXNzIFRlc3RHZXRDbG9zdXJlVmFycyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMDgwLDYgKzExOTAsMTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoVGhpbmcsICd4JyksIFRoaW5nLngpCiAKKyAgICBkZWYgdGVzdF9jbGFzc1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5feAorICAgICAgICAgICAgX3ggPSBvYmplY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhUaGluZywgJ3gnKSwgVGhpbmcuX19kaWN0X19bJ3gnXSkKKwogICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9jbGFzc2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKICAgICAgICAgICAgIHggPSBvYmplY3QoKQpAQCAtMTQ2MSw3ICsxNTgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCBpbnQsICJ2YXJfa2V5d29yZCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAotICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9idWlsdGluX2Z1bmN0aW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl91bnN1cHBvcnRlZF9idWlsdGlucyhzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgogICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUodHlwZSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgpAQCAtMTQ3MCwxMCArMTU4OSwxMyBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBzdXBwb3J0ZWQgYnkgc2lnbmF0dXJlJyk6CiAgICAgICAgICAgICAjIHN1cHBvcnQgZm9yICdtZXRob2Qtd3JhcHBlcicKICAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKG1pbi5fX2NhbGxfXykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbiBmdW5jdGlvbicpOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciAnbWV0aG9kLXdyYXBwZXInCi0gICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShtaW4pCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKG1pbiksIE5vbmUpCisgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9zLnN0YXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNpZ25hdHVyZSwgaW5zcGVjdC5TaWduYXR1cmUpKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX25vbl9mdW5jdGlvbihzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ2lzIG5vdCBhIGNhbGxhYmxlIG9iamVjdCcpOgpAQCAtMTczNiw2ICsxODU4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKKyAgICAgICAgIyBUZXN0IHdlIGhhbmRsZSBfX3NpZ25hdHVyZV9fIHBhcnR3YXkgZG93biB0aGUgd3JhcHBlciBzdGFjaworICAgICAgICBkZWYgd3JhcHBlZF9mb29fY2FsbCgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3cmFwcGVkX2Zvb19jYWxsLl9fd3JhcHBlZF9fID0gRm9vLl9fY2FsbF9fCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZSh3cmFwcGVkX2Zvb19jYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEpOgpAQCAtMTg1MCw2ICsxOTgzLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoV3JhcHBlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisgICAgICAgICMgd3JhcHBlciBsb29wOgorICAgICAgICBXcmFwcGVkLl9fd3JhcHBlZF9fID0gV3JhcHBlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoV3JhcHBlZCkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9sYW1iZGFzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKChsYW1iZGEgYT0xMDogYSkpLApAQCAtMjMwMSw2ICsyNDM4LDEwMyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGJhLCBiYTQpCiAKIAorY2xhc3MgVGVzdFVud3JhcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bndyYXBfb25lKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICB3cmFwcGVyID0gZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTIwKShmdW5jKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3BlY3QudW53cmFwKHdyYXBwZXIpLCBmdW5jKQorCisgICAgZGVmIHRlc3RfdW53cmFwX3NldmVyYWwoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIHdyYXBwZXIgPSBmdW5jCisgICAgICAgIGZvciBfXyBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHdyYXBwZXIpCisgICAgICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cmFwcGVyLl9fd3JhcHBlZF9fLCBmdW5jKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3BlY3QudW53cmFwKHdyYXBwZXIpLCBmdW5jKQorCisgICAgZGVmIHRlc3Rfc3RvcChzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMxKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYzEpCisgICAgICAgIGRlZiBmdW5jMigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMyKQorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jMi5zdG9wX2hlcmUgPSAxCisgICAgICAgIHVud3JhcHBlZCA9IGluc3BlY3QudW53cmFwKHdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A9KGxhbWJkYSBmOiBoYXNhdHRyKGYsICJzdG9wX2hlcmUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW53cmFwcGVkLCBmdW5jMikKKworICAgIGRlZiB0ZXN0X2N5Y2xlKHNlbGYpOgorICAgICAgICBkZWYgZnVuYzEoKTogcGFzcworICAgICAgICBmdW5jMS5fX3dyYXBwZWRfXyA9IGZ1bmMxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMSkKKworICAgICAgICBkZWYgZnVuYzIoKTogcGFzcworICAgICAgICBmdW5jMi5fX3dyYXBwZWRfXyA9IGZ1bmMxCisgICAgICAgIGZ1bmMxLl9fd3JhcHBlZF9fID0gZnVuYzIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzIpCisKKyAgICBkZWYgdGVzdF91bmhhc2hhYmxlKHNlbGYpOgorICAgICAgICBkZWYgZnVuYygpOiBwYXNzCisgICAgICAgIGZ1bmMuX193cmFwcGVkX18gPSBOb25lCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgICAgIF9fd3JhcHBlZF9fID0gZnVuYworICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbnNwZWN0LnVud3JhcChDKCkpKQorCitjbGFzcyBUZXN0TWFpbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfb25seV9zb3VyY2Uoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bml0dGVzdCcpCisgICAgICAgIGxpbmVzID0gb3V0LmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICAjIGlnbm9yZSB0aGUgZmluYWwgbmV3bGluZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzotMV0sIGluc3BlY3QuZ2V0c291cmNlKG1vZHVsZSkuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihUaHJlYWRQb29sRXhlY3V0b3IgaXMgTm9uZSwKKyAgICAgICAgICAgICd0aHJlYWRzIHJlcXVpcmVkIHRvIHRlc3QgX19xdWFsbmFtZV9fIGZvciBzb3VyY2UgZmlsZXMnKQorICAgIGRlZiB0ZXN0X3F1YWxuYW1lX3NvdXJjZShzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmN1cnJlbnQuZnV0dXJlczpUaHJlYWRQb29sRXhlY3V0b3InKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuZ2V0c291cmNlKFRocmVhZFBvb2xFeGVjdXRvcikuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cycpCisgICAgICAgIGxpbmVzID0gZXJyLmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkNhbid0IGdldCBpbmZvIGZvciBidWlsdGluIG1vZHVsZXMuIl0pCisKKyAgICBkZWYgdGVzdF9kZXRhaWxzKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnLCAnLS1kZXRhaWxzJykKKyAgICAgICAgb3V0cHV0ID0gb3V0LmRlY29kZSgpCisgICAgICAgICMgSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fbmFtZV9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fZmlsZV9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fY2FjaGVkX18sIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdCgKICAgICAgICAgVGVzdERlY29yYXRvcnMsIFRlc3RSZXRyaWV2aW5nU291cmNlQ29kZSwgVGVzdE9uZWxpbmVycywgVGVzdEJ1Z2d5Q2FzZXMsCkBAIC0yMzA4LDcgKzI1NDIsNyBAQAogICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NGdW5jdGlvbnMsIFRlc3RHZXRjYWxsYXJnc01ldGhvZHMsCiAgICAgICAgIFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBUZXN0R2V0YXR0clN0YXRpYywgVGVzdEdldEdlbmVyYXRvclN0YXRlLAogICAgICAgICBUZXN0Tm9FT0wsIFRlc3RTaWduYXR1cmVPYmplY3QsIFRlc3RTaWduYXR1cmVCaW5kLCBUZXN0UGFyYW1ldGVyT2JqZWN0LAotICAgICAgICBUZXN0Qm91bmRBcmd1bWVudHMsIFRlc3RHZXRDbG9zdXJlVmFycworICAgICAgICBUZXN0Qm91bmRBcmd1bWVudHMsIFRlc3RHZXRDbG9zdXJlVmFycywgVGVzdFVud3JhcCwgVGVzdE1haW4KICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ludC5weSBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CmluZGV4IGMxOThiY2MuLjRlMDA2MjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CkBAIC0yMjgsNiArMjI4LDQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBiYXNlPTEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgYmFzZT0wKQogCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfbGltaXRzKHNlbGYpOgorICAgICAgICAiIiJUZXN0aW5nIHRoZSBzdXBwb3J0ZWQgbGltaXRzIG9mIHRoZSBpbnQoKSBiYXNlIHBhcmFtZXRlci4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAnLCA1KSwgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAzNykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIC05MDkpICAjIEFuIG9sZCBtYWdpYyB2YWx1ZSBiYXNlIGZyb20gUHl0aG9uIDIuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTAtKDIqKjIzNCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTIqKjIzNCkKKyAgICAgICAgIyBCYXNlcyAyIHRocm91Z2ggMzYgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgZm9yIGJhc2UgaW4gcmFuZ2UoMiwzNyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMCcsIGJhc2U9YmFzZSksIDApCisKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9iYWRfdHlwZXMoc2VsZik6CisgICAgICAgICIiIk5vdCBpbnRlZ2VyIHR5cGVzIGFyZSBub3QgdmFsaWQgYmFzZXM7IGlzc3VlMTY3NzIuIiIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDUuNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgNS4wKQorCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUluZGV4YWJsZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworICAgICAgICAjIENoZWNrIG91dCBvZiByYW5nZSBiYXNlcy4KKyAgICAgICAgZm9yIGJhc2UgaW4gMioqMTAwLCAtMioqMTAwLCAxLCAzNzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgaW50KCc0MycsIGJhc2UpCisKKyAgICAgICAgIyBDaGVjayBpbi1yYW5nZSBiYXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMikpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgxMCkpLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDM2KSksIDEgKyAzNioqMikKKwogICAgIGRlZiB0ZXN0X25vbl9udW1lcmljX2lucHV0X3R5cGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgcG9zc2libGUgbm9uLW51bWVyaWMgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB4LCBpbmNsdWRpbmcKICAgICAgICAgIyBzdWJjbGFzc2VzIG9mIHRoZSBleHBsaWNpdGx5IGRvY3VtZW50ZWQgYWNjZXB0ZWQgdHlwZXMuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvLnB5IGIvTGliL3Rlc3QvdGVzdF9pby5weQppbmRleCA5Yjg5MjAyLi41N2YzNjU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSAxCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAKIGNsYXNzIENDbG9zZUZhaWx1cmVJTyhDbG9zZUZhaWx1cmVJTywgaW8uUmF3SU9CYXNlKToKICAgICBwYXNzCkBAIC02MDEsOSArNjAxLDkgQEAKICAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIGYuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgpAQCAtNzYyLDcgKzc2Miw3IEBACiAgICAgICAgIGlmIHM6CiAgICAgICAgICAgICAjIFRoZSBkZXN0cnVjdG9yICptYXkqIGhhdmUgcHJpbnRlZCBhbiB1bnJhaXNhYmxlIGVycm9yLCBjaGVjayBpdAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zcGxpdGxpbmVzKCkpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIElPRXJyb3I6ICIpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIE9TRXJyb3I6ICIpLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIiBpZ25vcmVkIiksIHMpCiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgpAQCAtNzc4LDIyICs3NzgsMjIgQEAKICAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICByYXcuZmx1c2ggPSBiYWRfZmx1c2gKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY2xvc2VfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZmx1c2gnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZmx1c2gnKQogICAgICAgICBkZWYgYmFkX2Nsb3NlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjbG9zZScpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjbG9zZScpCiAgICAgICAgIHJhdy5jbG9zZSA9IGJhZF9jbG9zZQogICAgICAgICBiID0gc2VsZi50cChyYXcpCiAgICAgICAgIGIuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgICAgIGIuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5leGNlcHRpb24uYXJncywgKCdjbG9zZScsKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLl9fY29udGV4dF9fLmFyZ3MsICgnZmx1c2gnLCkpCkBAIC04MzMsNiArODMzLDE0IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUgKyBidWZzaXplMikKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2J1ZmZlcl9mcmVlaW5nKHNlbGYpIDoKKyAgICAgICAgYnVmc2l6ZSA9IDQwOTYKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZSkKKyAgICAgICAgc2l6ZSA9IHN5cy5nZXRzaXplb2YoYnVmaW8pIC0gYnVmc2l6ZQorICAgICAgICBidWZpby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUpCiAKIGNsYXNzIEJ1ZmZlcmVkUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CiAgICAgcmVhZF9tb2RlID0gInJiIgpAQCAtMTAwNyw4ICsxMDE1LDggQEAKICAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgogICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8udGVsbCkKIAogICAgIGRlZiB0ZXN0X25vX2V4dHJhbmVvdXNfcmVhZChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjOTU1MDsgd2hlbiB0aGUgcmF3IElPIG9iamVjdCBoYXMgc2F0aXNmaWVkIHRoZSByZWFkIHJlcXVlc3QsCkBAIC0xMDU5LDE3ICsxMDY3LDE4IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKICAgICAgICAgIyBfcHlpby5CdWZmZXJlZFJlYWRlciBzZWVtcyB0byBpbXBsZW1lbnQgcmVhZGluZyBkaWZmZXJlbnQsIHNvIHRoYXQKICAgICAgICAgIyBjaGVja2luZyB0aGlzIGlzIG5vdCBzbyBlYXN5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5yZWFkLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8ucmVhZCwgMTApCiAKICAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CiAgICAgICAgICMgQyBCdWZmZXJlZFJlYWRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQuCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCi0gICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQotICAgICAgICBmID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgZi5mID0gZgotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCi0gICAgICAgIGRlbCBmCi0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIGYuZiA9IGYKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgICAgIGRlbCBmCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKIAogICAgIGRlZiB0ZXN0X2FyZ3NfZXJyb3Ioc2VsZik6CkBAIC0xMzEyLDkgKzEzMjEsOSBAQAogICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CiAgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKQogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCiAKICAgICBkZWYgdGVzdF9tYXhfYnVmZmVyX3NpemVfcmVtb3ZhbChzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgpAQCAtMTMyMywxMSArMTMzMiwxMSBAQAogICAgIGRlZiB0ZXN0X3dyaXRlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGRlZiBiYWRfd3JpdGUoYik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICByYXcud3JpdGUgPSBiYWRfd3JpdGUKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQogICAgICAgICBiLndyaXRlKGInc3BhbScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCiAKIApAQCAtMTM1OCwxMyArMTM2NywxNCBAQAogICAgICAgICAjIEMgQnVmZmVyZWRXcml0ZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKICAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbnRvIGdjLmdhcmJhZ2UgaW5zdGVhZAotICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKLSAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIGYud3JpdGUoYiIxMjN4eHgiKQotICAgICAgICBmLnggPSBmCi0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKLSAgICAgICAgZGVsIGYKLSAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKKyAgICAgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCisgICAgICAgICAgICBmLnggPSBmCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgICAgICBkZWwgZgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiIxMjN4eHgiKQpAQCAtMTM5NywxNCArMTQwNywxNCBAQAogICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX25vdF93cml0ZWFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIE5vdFdyaXRlYWJsZShNb2NrUmF3SU8pOgogICAgICAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIHNlbGYuTW9ja1Jhd0lPKCksIE5vdFdyaXRlYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnRwLCBzZWxmLk1vY2tSYXdJTygpLCBOb3RXcml0ZWFibGUoKSkKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQpAQCAtMjE2NSw3ICsyMTc1LDcgQEAKICAgICAgICAgaWYgczoKICAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gT1NFcnJvcjogIiksIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKIAogICAgICMgU3lzdGVtYXRpYyB0ZXN0cyBvZiB0aGUgdGV4dCBJL08gQVBJCkBAIC0yMjM3LDcgKzIyNDcsNyBAQAogICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgIlx4ZmZcbiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLnRlbGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLnRlbGwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAyKQogICAgICAgICBmLmNsb3NlKCkKIApAQCAtMjM0MSw3ICsyMzUxLDcgQEAKICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKFVuUmVhZGFibGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHR4dC5yZWFkKQogCiAgICAgZGVmIHRlc3RfcmVhZF9vbmVfYnlfb25lKHNlbGYpOgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGIiQUFcclxuQkIiKSkKQEAgLTI1MTYsOSArMjUyNiw5IEBACiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHR4dC5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdHh0LmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eHQuY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CkBAIC0yNTk5LDE0ICsyNjA5LDE1IEBACiAgICAgICAgICMgQyBUZXh0SU9XcmFwcGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZCwgYW5kIGNvbGxlY3RpbmcgdGhlbSBmbHVzaGVzCiAgICAgICAgICMgYWxsIGRhdGEgdG8gZGlzay4KICAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW4gZ2MuZ2FyYmFnZSBpbnN0ZWFkLgotICAgICAgICByYXdpbyA9IGlvLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocmF3aW8pCi0gICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKLSAgICAgICAgdC53cml0ZSgiNDU2ZGVmIikKLSAgICAgICAgdC54ID0gdAotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHQpCi0gICAgICAgIGRlbCB0Ci0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBpby5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKKyAgICAgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgICAgIHQud3JpdGUoIjQ1NmRlZiIpCisgICAgICAgICAgICB0LnggPSB0CisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHQpCisgICAgICAgICAgICBkZWwgdAorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiI0NTZkZWYiKQpAQCAtMjc2Niw3ICsyNzc3LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICJ3YiIpCiAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJVIikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiVSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLm5hbWUsICAgICBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5yYXcubmFtZSwgc3VwcG9ydC5URVNURk4pCkBAIC0yODk2LDcgKzI5MDgsNyBAQAogICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwX2ZkcykKQEAgLTMwNjIsMTUgKzMwNzQsMTggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCiAgICAgICAgICAgICAjIEZpbGwgdGhlIHBpcGUgZW5vdWdoIHRoYXQgdGhlIHdyaXRlIHdpbGwgYmUgYmxvY2tpbmcuCiAgICAgICAgICAgICAjIEl0IHdpbGwgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIHRpbWVyIGFybWVkIGFib3ZlLiAgU2luY2UgdGhlCiAgICAgICAgICAgICAjIG90aGVyIHRocmVhZCBoYXMgcmVhZCBvbmUgYnl0ZSwgdGhlIGxvdy1sZXZlbCB3cml0ZSB3aWxsCiAgICAgICAgICAgICAjIHJldHVybiB3aXRoIGEgc3VjY2Vzc2Z1bCAocGFydGlhbCkgcmVzdWx0IHJhdGhlciB0aGFuIGFuIEVJTlRSLgogICAgICAgICAgICAgIyBUaGUgYnVmZmVyZWQgSU8gbGF5ZXIgbXVzdCBjaGVjayBmb3IgcGVuZGluZyBzaWduYWwKICAgICAgICAgICAgICMgaGFuZGxlcnMsIHdoaWNoIGluIHRoaXMgY2FzZSB3aWxsIGludm9rZSBhbGFybV9pbnRlcnJ1cHQoKS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZSwgaXRlbSAqIChzdXBwb3J0LlBJUEVfTUFYX1NJWkUgLy8gbGVuKGl0ZW0pICsgMSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQogICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgICMgV2UgZ290IG9uZSBieXRlLCBnZXQgYW5vdGhlciBvbmUgYW5kIGNoZWNrIHRoYXQgaXQgaXNuJ3QgYQogICAgICAgICAgICAgIyByZXBlYXQgb2YgdGhlIGZpcnN0IG9uZS4KQEAgLTMwODQsNyArMzA5OSw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGJsb2NrIGFnYWluLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0zMjEyLDcgKzMyMjcsNyBAQAogICAgICAgICAgICAgIyBidWZmZXIsIGFuZCBjb3VsZCBibG9jayAoaW4gY2FzZSBvZiBmYWlsdXJlKS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aW8uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pb2N0bC5weSBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKaW5kZXggNTMxYzlhZi4uZWZlOWY1MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CkBAIC04LDcgKzgsNyBAQAogCiB0cnk6CiAgICAgdHR5ID0gb3BlbigiL2Rldi90dHkiLCAicmIiKQotZXhjZXB0IElPRXJyb3I6CitleGNlcHQgT1NFcnJvcjoKICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVW5hYmxlIHRvIG9wZW4gL2Rldi90dHkiKQogZWxzZToKICAgICAjIFNraXAgaWYgYW5vdGhlciBwcm9jZXNzIGlzIGluIGZvcmVncm91bmQKQEAgLTg2LDggKzg2LDYgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKG1mZCkKICAgICAgICAgICAgIG9zLmNsb3NlKHNmZCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChJb2N0bFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weSBiL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5CmluZGV4IDk5YzU0ZjEuLmYzYjE1NjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5CkBAIC0xMzE5LDYgKzEzMTksMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygKICAgICAgICAgICAgICAgICAnMTI3LjQyLjAuMC8xNicpLmlzX2xvb3BiYWNrKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTI4LjAuMC4wJykuaXNfbG9vcGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEwMC42NC4wLjAvMTAnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAwLjY0LjAuMC8xMCcpLmlzX2dsb2JhbCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzE5Mi4wLjIuMTI4LzI1JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxOTIuMC4zLjAvMjQnKS5pc19nbG9iYWwpCiAKICAgICAgICAgIyB0ZXN0IGFkZHJlc3NlcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcwLjAuMC4wJykuaXNfdW5zcGVjaWZpZWQpCkBAIC0xMzg0LDYgKzEzOTIsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzo6MScpLmlzX3Vuc3BlY2lmaWVkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnOjovMTI3JykuaXNfdW5zcGVjaWZpZWQpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcyMDAxOjoxLzEyOCcpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMjAwOjoxLzEyOCcpLmlzX2dsb2JhbCkKICAgICAgICAgIyB0ZXN0IGFkZHJlc3NlcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9hZGRyZXNzKCdmZmZmOjonKS5pc19tdWx0aWNhc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoMioqMTI4IC0gMSkuaXNfbXVsdGljYXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CmluZGV4IDkxMDFmNmMuLjE1MmY1ZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKQEAgLTQ1LDMxICs0NSwyMSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0CiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQotZnJvbSBidWlsdGlucyBpbXBvcnQgbGVuIGFzIF9sZW4KK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGxlbmd0aF9oaW50CiAKIG4gPSAxMAogCi1kZWYgbGVuKG9iaik6Ci0gICAgdHJ5OgotICAgICAgICByZXR1cm4gX2xlbihvYmopCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiB0aGlzIGlzIGFuIGludGVybmFsIHVuZG9jdW1lbnRlZCBBUEksCi0gICAgICAgICAgICAjIGRvbid0IHJlbHkgb24gaXQgaW4geW91ciBvd24gcHJvZ3JhbXMKLSAgICAgICAgICAgIHJldHVybiBvYmouX19sZW5ndGhfaGludF9fKCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCiAKIGNsYXNzIFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zOgogCiAgICAgZGVmIHRlc3RfaW52YXJpYW50KHNlbGYpOgogICAgICAgICBpdCA9IHNlbGYuaXQKICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UoMSwgbisxKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgaSkKICAgICAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogCiBjbGFzcyBUZXN0VGVtcG9yYXJpbHlJbW11dGFibGUoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMpOgogCkBAIC03OCwxMiArNjgsMTIgQEAKICAgICAgICAgIyBsZW5ndGggaW1tdXRhYmlsaXR5ICBkdXJpbmcgaXRlcmF0aW9uCiAKICAgICAgICAgaXQgPSBzZWxmLml0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4pCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbi0xKQogICAgICAgICBzZWxmLm11dGF0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKICMjIC0tLS0tLS0gQ29uY3JldGUgVHlwZSBUZXN0cyAtLS0tLS0tCiAKQEAgLTkyLDEwICs4Miw2IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLml0ID0gcmVwZWF0KE5vbmUsIG4pCiAKLSAgICBkZWYgdGVzdF9ub19sZW5fZm9yX2luZmluaXRlX3JlcGVhdChzZWxmKToKLSAgICAgICAgIyBUaGUgcmVwZWF0KCkgb2JqZWN0IGNhbiBhbHNvIGJlIGluZmluaXRlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXBlYXQoTm9uZSkpCi0KIGNsYXNzIFRlc3RYcmFuZ2UoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE2NywxNCArMTUzLDE1IEBACiAgICAgICAgIGl0ID0gaXRlcihkKQogICAgICAgICBuZXh0KGl0KQogICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAyKQogICAgICAgICBkLmFwcGVuZChuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDEpICAjIGdyb3cgd2l0aCBhcHBlbmQKICAgICAgICAgZFsxOl0gPSBbXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKICAgICAgICAgZC5leHRlbmQocmFuZ2UoMjApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQorCiAKIGNsYXNzIFRlc3RMaXN0UmV2ZXJzZWQoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTg2LDMyICsxNzMsNDEgQEAKICAgICAgICAgaXQgPSByZXZlcnNlZChkKQogICAgICAgICBuZXh0KGl0KQogICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAyKQogICAgICAgICBkLmFwcGVuZChuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikgICMgaWdub3JlIGFwcGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpICAjIGlnbm9yZSBhcHBlbmQKICAgICAgICAgZFsxOl0gPSBbXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkgICMgY29uZmlybSBpbnZhcmlhbnQKICAgICAgICAgZC5leHRlbmQocmFuZ2UoMjApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogCiAjIyAtLSBDaGVjayB0byBtYWtlIHN1cmUgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgYnkgX19sZW5ndGhfaGludF9fKCkKIAogCiBjbGFzcyBCYWRMZW4ob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hlbGxvJykKIAorCiBjbGFzcyBCYWRMZW5ndGhIaW50KG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hlbGxvJykKIAorCiBjbGFzcyBOb25lTGVuZ3RoSGludChvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuZ3RoX2hpbnRfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKIAogY2xhc3MgVGVzdExlbmd0aEhpbnRFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQppbmRleCA1MTRhNmI3Li4yNjcyYjAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQpAQCAtMTcyOSw5ICsxNzI5LDggQEAKIGNsYXNzIExlbmd0aFRyYW5zcGFyZW5jeSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6Ci0gICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXBlYXQoTm9uZSwgNTApKSwgNTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXBlYXQoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmVwZWF0KE5vbmUsIDUwKSksIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lKSwgMTIpLCAxMikKIAogY2xhc3MgUmVncmVzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CmluZGV4IGQyM2UyODUuLjM1YzAyZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKQEAgLTEsNSArMSw1IEBACiBpbXBvcnQgZGVjaW1hbAotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAogZnJvbSB0ZXN0LnRlc3RfanNvbiBpbXBvcnQgUHlUZXN0LCBDVGVzdAogCkBAIC03MCw1ICs3MCwyNiBAQAogICAgICAgICBtc2cgPSAnZXNjYXBlJwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsIG1zZywgc2VsZi5sb2FkcywgcykKIAorICAgIGRlZiB0ZXN0X2ludmFsaWRfaW5wdXRfdHlwZShzZWxmKToKKyAgICAgICAgbXNnID0gJ3RoZSBKU09OIG9iamVjdCBtdXN0IGJlIHN0cicKKyAgICAgICAgZm9yIHZhbHVlIGluIFsxLCAzLjE0LCBiJ2J5dGVzJywgYidceGZmXHgwMCcsIFtdLCB7fSwgTm9uZV06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCB2YWx1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIHNlbGYuanNvbi5sb2FkKEJ5dGVzSU8oYidbMSwyLDNdJykpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfd2l0aF91dGY4X2JvbShzZWxmKToKKyAgICAgICAgIyBzZWUgIzE4OTU4CisgICAgICAgIGJvbV9qc29uID0gIlsxLDIsM10iLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvYWRzKGJvbV9qc29uKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9qc29uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQk9NJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIEJPTSBpcyBub3QgZGV0ZWN0ZWQgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmluZworICAgICAgICBib21faW5fc3RyID0gJyJ7fSInLmZvcm1hdCgnJy5lbmNvZGUoJ3V0Zi04LXNpZycpLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGJvbV9pbl9zdHIpLCAnXHVmZWZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24ubG9hZChTdHJpbmdJTyhib21faW5fc3RyKSksICdcdWZlZmYnKQorCiBjbGFzcyBUZXN0UHlEZWNvZGUoVGVzdERlY29kZSwgUHlUZXN0KTogcGFzcwogY2xhc3MgVGVzdENEZWNvZGUoVGVzdERlY29kZSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY0MTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpAQCAtMCwwICsxLDEyMCBAQAorZnJvbSBlbnVtIGltcG9ydCBFbnVtLCBJbnRFbnVtCitmcm9tIG1hdGggaW1wb3J0IGlzbmFuCitmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CisKK1NNQUxMID0gMQorQklHID0gMTw8MzIKK0hVR0UgPSAxPDw2NAorUkVBTExZX0hVR0UgPSAxPDw5NgorCitjbGFzcyBCaWdOdW0oSW50RW51bSk6CisgICAgc21hbGwgPSBTTUFMTAorICAgIGJpZyA9IEJJRworICAgIGh1Z2UgPSBIVUdFCisgICAgcmVhbGx5X2h1Z2UgPSBSRUFMTFlfSFVHRQorCitFID0gMi43MTgyODEKK1BJID0gMy4xNDE1OTMKK1RBVSA9IDIgKiBQSQorCitjbGFzcyBGbG9hdE51bShmbG9hdCwgRW51bSk6CisgICAgZSA9IEUKKyAgICBwaSA9IFBJCisgICAgdGF1ID0gVEFVCisKK0lORiA9IGZsb2F0KCdpbmYnKQorTkVHX0lORiA9IGZsb2F0KCctaW5mJykKK05BTiA9IGZsb2F0KCduYW4nKQorCitjbGFzcyBXaWVyZE51bShmbG9hdCwgRW51bSk6CisgICAgaW5mID0gSU5GCisgICAgbmVnX2luZiA9IE5FR19JTkYKKyAgICBuYW4gPSBOQU4KKworY2xhc3MgVGVzdEVudW06CisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtIGluIEZsb2F0TnVtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCByZXByKGVudW0udmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X3dlaXJkX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0sIGV4cGVjdGVkIGluIHppcChXaWVyZE51bSwgKCdJbmZpbml0eScsICctSW5maW5pdHknLCAnTmFOJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGlmIG5vdCBpc25hbihlbnVtKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSkpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSBpbiBCaWdOdW06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIHN0cihlbnVtLnZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorCisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoQmlnTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtTTUFMTCwgQklHLCBIVUdFLCBSRUFMTFlfSFVHRV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KEJpZ051bSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KEJpZ051bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KEZsb2F0TnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtFLCBQSSwgVEFVXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoRmxvYXROdW0pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChGbG9hdE51bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAnW0luZmluaXR5LCAtSW5maW5pdHksIE5hTl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSkpWzoyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KFdpZXJkTnVtKVs6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChXaWVyZE51bSkpKVsyXSkpCisKKyAgICBkZWYgdGVzdF9kaWN0X2tleXMoc2VsZik6CisgICAgICAgIHMsIGIsIGgsIHIgPSBCaWdOdW0KKyAgICAgICAgZSwgcCwgdCA9IEZsb2F0TnVtCisgICAgICAgIGksIGosIG4gPSBXaWVyZE51bQorICAgICAgICBkID0geworICAgICAgICAgICAgczondGlueScsIGI6J2xhcmdlJywgaDonbGFyZ2VyJywgcjonbGFyZ2VzdCcsCisgICAgICAgICAgICBlOiJFdWxlcidzIG51bWJlciIsIHA6J3BpJywgdDondGF1JywKKyAgICAgICAgICAgIGk6J0luZmluaXR5JywgajonLUluZmluaXR5JywgbjonTmFOJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgbmQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFNNQUxMKV0sICd0aW55JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoQklHKV0sICdsYXJnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKEhVR0UpXSwgJ2xhcmdlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFJFQUxMWV9IVUdFKV0sICdsYXJnZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKEUpXSwgIkV1bGVyJ3MgbnVtYmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKFBJKV0sICdwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbcmVwcihUQVUpXSwgJ3RhdScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ0luZmluaXR5J10sICdJbmZpbml0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJy1JbmZpbml0eSddLCAnLUluZmluaXR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnTmFOJ10sICdOYU4nKQorCisgICAgZGVmIHRlc3RfZGljdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGQgPSBkaWN0KAorICAgICAgICAgICAgICAgIHRpbnk9QmlnTnVtLnNtYWxsLAorICAgICAgICAgICAgICAgIGxhcmdlPUJpZ051bS5iaWcsCisgICAgICAgICAgICAgICAgbGFyZ2VyPUJpZ051bS5odWdlLAorICAgICAgICAgICAgICAgIGxhcmdlc3Q9QmlnTnVtLnJlYWxseV9odWdlLAorICAgICAgICAgICAgICAgIGU9RmxvYXROdW0uZSwKKyAgICAgICAgICAgICAgICBwaT1GbG9hdE51bS5waSwKKyAgICAgICAgICAgICAgICB0YXU9RmxvYXROdW0udGF1LAorICAgICAgICAgICAgICAgIGk9V2llcmROdW0uaW5mLAorICAgICAgICAgICAgICAgIGo9V2llcmROdW0ubmVnX2luZiwKKyAgICAgICAgICAgICAgICBuPVdpZXJkTnVtLm5hbiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIG5kID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0aW55J10sIFNNQUxMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZSddLCBCSUcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlciddLCBIVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZXN0J10sIFJFQUxMWV9IVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydlJ10sIEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3BpJ10sIFBJKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0YXUnXSwgVEFVKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydpJ10sIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnaiddLCBORUdfSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4obmRbJ24nXSkpCisKK2NsYXNzIFRlc3RQeUVudW0oVGVzdEVudW0sIFB5VGVzdCk6IHBhc3MKK2NsYXNzIFRlc3RDRW51bShUZXN0RW51bSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQppbmRleCAzZGQ4NzdhLi43Y2FhZmRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKQEAgLTEsNCArMSw1IEBACiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CitpbXBvcnQgcmUKIAogIyAyMDA3LTEwLTA1CiBKU09ORE9DUyA9IFsKQEAgLTEwMCw2ICsxMDEsOTQgQEAKICAgICAgICAgI1RoaXMgaXMgZm9yIHB5dGhvbiBlbmNvZGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kdW1wcywgZGF0YSwgaW5kZW50PVRydWUpCiAKKyAgICBkZWYgdGVzdF90cnVuY2F0ZWRfaW5wdXQoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJycsICdFeHBlY3RpbmcgdmFsdWUnLCAwKSwKKyAgICAgICAgICAgICgnWycsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgnWzQyJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMyksCisgICAgICAgICAgICAoJ1s0MiwnLCAnRXhwZWN0aW5nIHZhbHVlJywgNCksCisgICAgICAgICAgICAoJ1siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCdbInNwYW0iLCcsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneycsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIicsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCd7InNwYW0iOicsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDEwKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MiwnLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDExKSwKKyAgICAgICAgXQorICAgICAgICB0ZXN0X2Nhc2VzICs9IFsKKyAgICAgICAgICAgICgnIicsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMCksCisgICAgICAgICAgICAoJyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IFwoY2hhciB7Mn1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9kYXRhKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCdbLCcsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIjpbfScsICdFeHBlY3RpbmcgdmFsdWUnLCA5KSwKKyAgICAgICAgICAgICgnWzQyOicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDMpLAorICAgICAgICAgICAgKCdbNDIgInNwYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNCksCisgICAgICAgICAgICAoJ1s0MixdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDQpLAorICAgICAgICAgICAgKCd7InNwYW0iOls0Mn0nLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1siXScsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ1sic3BhbSI6JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1sic3BhbSIsXScsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgnezonLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDEpLAorICAgICAgICAgICAgKCd7LCcsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3s0MicsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ1t7XScsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMiksCisgICAgICAgICAgICAoJ3sic3BhbSIsJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ3sic3BhbSJ9JywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1t7InNwYW0iXScsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDgpLAorICAgICAgICAgICAgKCd7InNwYW0iOn0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOCksCisgICAgICAgICAgICAoJ1t7InNwYW0iOl0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOSksCisgICAgICAgICAgICAoJ3sic3BhbSI6NDIgImhhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1t7InNwYW0iOjQyXScsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0Mix9JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxMSksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSBcKGNoYXIgezJ9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2V4dHJhX2RhdGEoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ1tdXScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ3t9fScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ1tdLFtdJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgne30se30nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICBdCisgICAgICAgIHRlc3RfY2FzZXMgKz0gWworICAgICAgICAgICAgKCc0Miwic3BhbSInLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCcic3BhbSIsNDInLCAnRXh0cmEgZGF0YScsIDYpLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gLSBsaW5lIDEgY29sdW1uIHsyfScKKyAgICAgICAgICAgICAgICByJyBcKGNoYXIgezN9IC0gezR9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGxlbihkYXRhKSArIDEsIGlkeCwgbGVuKGRhdGEpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfbGluZWNvbChzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnIScsIDEsIDEsIDApLAorICAgICAgICAgICAgKCcgIScsIDEsIDIsIDEpLAorICAgICAgICAgICAgKCdcbiEnLCAyLCAxLCAxKSwKKyAgICAgICAgICAgICgnXG4gIFxuXG4gICAgICEnLCA0LCA2LCAxMCksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIGxpbmUsIGNvbCwgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideRXhwZWN0aW5nIHZhbHVlOiBsaW5lIHswfSBjb2x1bW4gezF9JworICAgICAgICAgICAgICAgIHInIFwoY2hhciB7Mn1cKSQnLmZvcm1hdChsaW5lLCBjb2wsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKIAogY2xhc3MgVGVzdFB5RmFpbChUZXN0RmFpbCwgUHlUZXN0KTogcGFzcwogY2xhc3MgVGVzdENGYWlsKFRlc3RGYWlsLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQppbmRleCBhNGQ0ZDIwLi5lMDc4NTZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CkBAIC0zMiw2ICszMiw4IEBACiAgICAgICAgIGQxID0gc2VsZi5kdW1wcyhoKQogICAgICAgICBkMiA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQogICAgICAgICBkMyA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQorICAgICAgICBkNCA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKQorICAgICAgICBkNSA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlKQogCiAgICAgICAgIGgxID0gc2VsZi5sb2FkcyhkMSkKICAgICAgICAgaDIgPSBzZWxmLmxvYWRzKGQyKQpAQCAtNDIsNiArNDQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgzLCBoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QuZXhwYW5kdGFicygyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ0LCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkNSwgZDMpCiAKICAgICBkZWYgdGVzdF9pbmRlbnQwKHNlbGYpOgogICAgICAgICBoID0gezM6IDF9CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2tleXdvcmQucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5OWY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weQpAQCAtMCwwICsxLDEzOCBAQAoraW1wb3J0IGtleXdvcmQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgZmlsZWNtcAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRleHR3cmFwCisKK0tFWVdPUkRfRklMRSAgICAgICAgICAgICA9IHN1cHBvcnQuZmluZGZpbGUoJ2tleXdvcmQucHknKQorR1JBTU1BUl9GSUxFICAgICAgICAgICAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicsICdQeXRob24nLCAnZ3JhbWluaXQuYycpCitURVNUX1BZX0ZJTEUgICAgICAgICAgICAgPSAna2V5d29yZF90ZXN0LnB5JworR1JBTU1BUl9URVNUX0ZJTEUgICAgICAgID0gJ2dyYW1pbml0X3Rlc3QuYycKK1BZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUyA9ICdtaW5pbWFsX2tleXdvcmQucHknCitOT05FWElTVEVOVF9GSUxFICAgICAgICAgPSAnbm90X2hlcmUudHh0JworCisKK2NsYXNzIFRlc3RfaXNrZXl3b3JkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90cnVlX2lzX2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtleXdvcmQuaXNrZXl3b3JkKCdUcnVlJykpCisKKyAgICBkZWYgdGVzdF91cHBlcmNhc2VfdHJ1ZV9pc19ub3RfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXdvcmQuaXNrZXl3b3JkKCdUUlVFJykpCisKKyAgICBkZWYgdGVzdF9ub25lX3ZhbHVlX2lzX25vdF9hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoTm9uZSkpCisKKyAgICAjIFRoaXMgaXMgcHJvYmFibHkgYW4gYWNjaWRlbnQgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGJ1dCBzaG91bGQgYmUKKyAgICAjIHByZXNlcnZlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICBkZWYgdGVzdF9jaGFuZ2luZ190aGVfa3dsaXN0X2RvZXNfbm90X2FmZmVjdF9pc2tleXdvcmQoc2VsZik6CisgICAgICAgIG9sZGxpc3QgPSBrZXl3b3JkLmt3bGlzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0YXR0ciwga2V5d29yZCwgJ2t3bGlzdCcsIG9sZGxpc3QpCisgICAgICAgIGtleXdvcmQua3dsaXN0ID0gWydpdHMnLCAnYWxsJywgJ2VnZ3MnLCAnYmVhbnMnLCAnYW5kJywgJ2EnLCAnc2xpY2UnXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXdvcmQuaXNrZXl3b3JkKCdlZ2dzJykpCisKKworY2xhc3MgVGVzdEtleXdvcmRHZW5lcmF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKHNlbGYsIHNvdXJjZV9maWxlLCBkZXN0X2ZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oc291cmNlX2ZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICBubCA9IGxpbmVzWzBdW2xlbihsaW5lc1swXS5zdHJpcCgpKTpdCisgICAgICAgIHdpdGggb3BlbihkZXN0X2ZpbGUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyhsaW5lc1s6bGluZXMuaW5kZXgoYiIjLS1zdGFydCBrZXl3b3Jkcy0tIiArIG5sKSArIDFdKQorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyhsaW5lc1tsaW5lcy5pbmRleChiIiMtLWVuZCBrZXl3b3Jkcy0tIiArIG5sKTpdKQorCisgICAgZGVmIF9nZW5lcmF0ZV9rZXl3b3JkcyhzZWxmLCBncmFtbWFyX2ZpbGUsIHRhcmdldF9rZXl3b3JkX3B5X2ZpbGUpOgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlXT1JEX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfa2V5d29yZF9weV9maWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpWzFdCisgICAgICAgIHJldHVybiBwcm9jLnJldHVybmNvZGUsIHN0ZGVycgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMoR1JBTU1BUl9GSUxFKSwKKyAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG9ubHkgd29ya3MgZnJvbSBzb3VyY2UgYnVpbGQgZGlyZWN0b3J5JykKKyAgICBkZWYgdGVzdF9yZWFsX2dyYW1tYXJfYW5kX2tleXdvcmRfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcChLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIGInJyksIHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKEdSQU1NQVJfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKSkKKworICAgIGRlZiB0ZXN0X2dyYW1tYXIoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHdpdGggb3BlbihHUkFNTUFSX1RFU1RfRklMRSwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgICMgU29tZSBvZiB0aGVzZSBhcmUgcHJvYmFibHkgaW1wbGVtZW50YXRpb24gYWNjaWRlbnRzLgorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIHsyLCAxfSwKKyAgICAgICAgICAgICAgICAgICAgezExLCAiZW5jb2RpbmdfZGVjbCIsIDAsIDIsIHN0YXRlc183OSwKKyAgICAgICAgICAgICAgICAgICAgICJcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAiCisgICAgICAgICAgICAgICAgICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAiamVsbG8ifSwKKyAgICAgICAgICAgICAgICAgICAgezMyNiwgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAidHVybmlwIn0sCisgICAgICAgICAgICAgICAgXHR7MSwgIlRoaXMgb25lIGlzIHRhYiBpbmRlbnRlZCIKKyAgICAgICAgICAgICAgICAgICAgezI3OCwgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAiY3JhenkgYnV0IGxlZ2FsIgorICAgICAgICAgICAgICAgICJhbHNvIGxlZ2FsIiB7MSwgIgorICAgICAgICAgICAgICAgICAgICB7MSwgImNvbnRpbnVlIn0sCisgICAgICAgICAgICAgICAgICAgezEsICJsZW1vbiJ9LAorICAgICAgICAgICAgICAgICAgICAgezEsICJ0b21hdG8ifSwKKyAgICAgICAgICAgICAgICB7MSwgIndpZ2lpIn0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAnbm8gZ29vZCd9CisgICAgICAgICAgICAgICAgICAgIHsyODMsIDB9LAorICAgICAgICAgICAgICAgICAgICB7MSwgICJ0b28gbWFueSBzcGFjZXMifSIiIikpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgR1JBTU1BUl9URVNUX0ZJTEUpCisgICAgICAgIHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKEdSQU1NQVJfVEVTVF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgIiAgICAgICAgJ1RoaXMgb25lIGlzIHRhYiBpbmRlbnRlZCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICdhbHNvIGxlZ2FsJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2NvbnRpbnVlJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2NyYXp5IGJ1dCBsZWdhbCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICdqZWxsbycsIiwKKyAgICAgICAgICAgICIgICAgICAgICdsZW1vbicsIiwKKyAgICAgICAgICAgICIgICAgICAgICd0b21hdG8nLCIsCisgICAgICAgICAgICAiICAgICAgICAndHVybmlwJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3dpZ2lpJywiLAorICAgICAgICAgICAgXQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9QWV9GSUxFKSBhcyBmcDoKKyAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICBzdGFydCA9IGxpbmVzLmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tIikgKyAxCisgICAgICAgIGVuZCA9IGxpbmVzLmluZGV4KCIjLS1lbmQga2V5d29yZHMtLSIpCisgICAgICAgIGFjdHVhbCA9IGxpbmVzW3N0YXJ0OmVuZF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZ3JhbW1hcl9yZXN1bHRzX2luX25vX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFBZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUykKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgYicnKSwgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKFRFU1RfUFlfRklMRSwgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKSkKKworICAgIGRlZiB0ZXN0X2tleXdvcmRzX3B5X3dpdGhvdXRfbWFya2Vyc19wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsIG9zLmRldm51bGwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJ2RvZXMgbm90IGNvbnRhaW4gZm9ybWF0IG1hcmtlcnMnKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19ncmFtbWFyX2ZpbGVfcHJvZHVjZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHJjLCBzdGRlcnIgPSBzZWxmLl9nZW5lcmF0ZV9rZXl3b3JkcyhOT05FWElTVEVOVF9GSUxFLCBLRVlXT1JEX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJyg/bXMpJyArIE5PTkVYSVNURU5UX0ZJTEUuZW5jb2RlKCkpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2tleXdvcmRzX3B5X2ZpbGVfcHJvZHVjZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHJjLCBzdGRlcnIgPSBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLCBOT05FWElTVEVOVF9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0ZGVyciwgYicoP21zKScgKyBOT05FWElTVEVOVF9GSUxFLmVuY29kZSgpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5IGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQppbmRleCAwNTAzYTdmLi5lNGE0NGMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKQEAgLTE3Niw2ICsxNzYsMTggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gX19hCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpLmYoKSwgNDIpCiAKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2V2YWx1YXRpb25fb3JkZXIoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDE2OTY3CisgICAgICAgIGEgPSA0MgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZGVmIGYodj1hLCB4PWIsICosIHk9Yywgej1kKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyci5leGNlcHRpb24pLCAibmFtZSAnYicgaXMgbm90IGRlZmluZWQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZiA9IGxhbWJkYSB2PWEsIHg9YiwgKiwgeT1jLCB6PWQ6IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChLZXl3b3JkT25seUFyZ1Rlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CmluZGV4IGU1ZTYwNTguLmJhZmRlYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FSU5QUk9HUkVTUykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICNyYWlzZSBBc3NlcnRpb25FcnJvcigiQ29ubmVjdCBzaG91bGQgaGF2ZSByYWlzZWQgRUlOUFJPR1JFU1MiKQpAQCAtMTg1LDYgKzE4NSwzMyBAQAogICAgICAgICBiLmNsb3NlKCkKICAgICAgICAga3EuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIG9wZW5fZmlsZSA9IG9wZW4oX19maWxlX18sICJyYiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcGVuX2ZpbGUuY2xvc2UpCisgICAgICAgIGZkID0gb3Blbl9maWxlLmZpbGVubygpCisgICAgICAgIGtxdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtxdWV1ZS5maWxlbm8oKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtxdWV1ZS5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAga3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtxdWV1ZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGtxdWV1ZS5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAga3F1ZXVlLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3F1ZXVlLmNvbnRyb2wsIE5vbmUsIDQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGtxdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoa3F1ZXVlLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShrcXVldWUuZmlsZW5vKCkpLCBGYWxzZSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEtRdWV1ZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQppbmRleCA2M2VlNjk3Li41YjI3NmU3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgICAgICAjIFNlZWtpbmcgaXMgbm90IGVub3VnaCBvZiBhIHRlc3Q6IHlvdSBtdXN0IHdyaXRlIGFuZCBmbHVzaCwgdG9vIQogICAgICAgICAgICAgZi53cml0ZShiJ3gnKQogICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXJnZWZpbGUgc3VwcG9ydCIpCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKaW5kZXggYWU0Y2ExOC4uZmZkMGM4YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQpAQCAtMjYsNiArMjYsNyBAQAogaW1wb3J0IGxvZ2dpbmcuY29uZmlnCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBjb25maWdwYXJzZXIKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IGlvCkBAIC01OCw3ICs1OSw5IEBACiAgICAgaW1wb3J0IHNtdHBkCiAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCBwYXJzZV9xcwogICAgIGZyb20gc29ja2V0c2VydmVyIGltcG9ydCAoVGhyZWFkaW5nVURQU2VydmVyLCBEYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1RDUFNlcnZlciwgU3RyZWFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdVbml4U3RyZWFtU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVW5peERhdGFncmFtU2VydmVyKQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIHRyeToKQEAgLTc1LDEzICs3OCwxMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKIAotCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJCYXNlIGNsYXNzIGZvciBsb2dnaW5nIHRlc3RzLiIiIgogCiAgICAgbG9nX2Zvcm1hdCA9ICIlKG5hbWUpcyAtPiAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHcuXSspIC0+IChcdyspOiAoXGQrKSQiCiAgICAgbWVzc2FnZV9udW0gPSAwCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05Myw3ICs5NSw4IEBACiAgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJzID0gbG9nZ2luZy5faGFuZGxlcnMuY29weSgpCiAgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdCA9IGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdCiAgICAgICAgICAgICBzZWxmLnNhdmVkX2xvZ2dlcnMgPSBzYXZlZF9sb2dnZXJzID0gbG9nZ2VyX2RpY3QuY29weSgpCi0gICAgICAgICAgICBzZWxmLnNhdmVkX2xldmVsX25hbWVzID0gbG9nZ2luZy5fbGV2ZWxOYW1lcy5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfbmFtZV90b19sZXZlbCA9IGxvZ2dpbmcuX25hbWVUb0xldmVsLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9sZXZlbF90b19uYW1lID0gbG9nZ2luZy5fbGV2ZWxUb05hbWUuY29weSgpCiAgICAgICAgICAgICBzZWxmLmxvZ2dlcl9zdGF0ZXMgPSBsb2dnZXJfc3RhdGVzID0ge30KICAgICAgICAgICAgIGZvciBuYW1lIGluIHNhdmVkX2xvZ2dlcnM6CiAgICAgICAgICAgICAgICAgbG9nZ2VyX3N0YXRlc1tuYW1lXSA9IGdldGF0dHIoc2F2ZWRfbG9nZ2Vyc1tuYW1lXSwKQEAgLTEzNSw4ICsxMzgsMTAgQEAKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwpCiAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxOYW1lcy5jbGVhcigpCi0gICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLnVwZGF0ZShzZWxmLnNhdmVkX2xldmVsX25hbWVzKQorICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxUb05hbWUuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxUb05hbWUudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfdG9fbmFtZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuX25hbWVUb0xldmVsLmNsZWFyKCkKKyAgICAgICAgICAgIGxvZ2dpbmcuX25hbWVUb0xldmVsLnVwZGF0ZShzZWxmLnNhdmVkX25hbWVfdG9fbGV2ZWwpCiAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy5jbGVhcigpCiAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy51cGRhdGUoc2VsZi5zYXZlZF9oYW5kbGVycykKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdID0gc2VsZi5zYXZlZF9oYW5kbGVyX2xpc3QKQEAgLTE1MCwxMiArMTU1LDEyIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAKLSAgICBkZWYgYXNzZXJ0X2xvZ19saW5lcyhzZWxmLCBleHBlY3RlZF92YWx1ZXMsIHN0cmVhbT1Ob25lKToKKyAgICBkZWYgYXNzZXJ0X2xvZ19saW5lcyhzZWxmLCBleHBlY3RlZF92YWx1ZXMsIHN0cmVhbT1Ob25lLCBwYXQ9Tm9uZSk6CiAgICAgICAgICIiIk1hdGNoIHRoZSBjb2xsZWN0ZWQgbG9nIGxpbmVzIGFnYWluc3QgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgICAgICBzZWxmLmV4cGVjdGVkX2xvZ19wYXQsIGFuZCBjb21wYXJlIHRoZSBleHRyYWN0ZWQgZ3JvdXAgdmFsdWVzIHRvCiAgICAgICAgIHRoZSBleHBlY3RlZF92YWx1ZXMgbGlzdCBvZiB0dXBsZXMuIiIiCiAgICAgICAgIHN0cmVhbSA9IHN0cmVhbSBvciBzZWxmLnN0cmVhbQotICAgICAgICBwYXQgPSByZS5jb21waWxlKHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCkKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShwYXQgb3Igc2VsZi5leHBlY3RlZF9sb2dfcGF0KQogICAgICAgICBhY3R1YWxfbGluZXMgPSBzdHJlYW0uZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWN0dWFsX2xpbmVzKSwgbGVuKGV4cGVjdGVkX3ZhbHVlcykpCiAgICAgICAgIGZvciBhY3R1YWwsIGV4cGVjdGVkIGluIHppcChhY3R1YWxfbGluZXMsIGV4cGVjdGVkX3ZhbHVlcyk6CkBAIC00MzAsNyArNDM1LDcgQEAKICAgICAiIiJUZXN0IHZhcmlvdXMgZmlsdGVyaW5nIHBvc3NpYmlsaXRpZXMgd2l0aCBjdXN0b20gbG9nZ2luZyBsZXZlbHMuIiIiCiAKICAgICAjIFNraXAgdGhlIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtNTYwLDcgKzU2NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZhY2lsaXR5LCBoLkxPR19VU0VSKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLnVuaXhzb2NrZXQpCiAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOiAjIHN5c2xvZ2QgbWlnaHQgbm90IGJlIGF2YWlsYWJsZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICMgc3lzbG9nZCBtaWdodCBub3QgYmUgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmb3IgbWV0aG9kIGluICgnR0VUJywgJ1BPU1QnLCAnUFVUJyk6CiAgICAgICAgICAgICBpZiBtZXRob2QgPT0gJ1BVVCc6CkBAIC02NDcsNDEgKzY1Miw2IEBACiAjIC0tIGlmIGl0IHByb3ZlcyB0byBiZSBvZiB3aWRlciB1dGlsaXR5IHRoYW4ganVzdCB0ZXN0X2xvZ2dpbmcKIAogaWYgdGhyZWFkaW5nOgotICAgIGNsYXNzIFRlc3RTTVRQQ2hhbm5lbChzbXRwZC5TTVRQQ2hhbm5lbCk6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGRlcml2ZWQgY2xhc3MgaGFzIGhhZCB0byBiZSBjcmVhdGVkIGJlY2F1c2Ugc210cGQgZG9lcyBub3QKLSAgICAgICAgc3VwcG9ydCB1c2Ugb2YgY3VzdG9tIGNoYW5uZWwgbWFwcywgYWx0aG91Z2ggdGhleSBhcmUgYWxsb3dlZCBieQotICAgICAgICBhc3luY29yZSdzIGRlc2lnbi4gSXNzdWUgIzExOTU5IGhhcyBiZWVuIHJhaXNlZCB0byBhZGRyZXNzIHRoaXMsCi0gICAgICAgIGFuZCBpZiByZXNvbHZlZCBzYXRpc2ZhY3RvcmlseSwgc29tZSBvZiB0aGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQuCi0gICAgICAgICIiIgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBzb2NrbWFwKToKLSAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgc29ja21hcCkKLSAgICAgICAgICAgIHNlbGYuc210cF9zZXJ2ZXIgPSBzZXJ2ZXIKLSAgICAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KLSAgICAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9saW5lcyA9IFtdCi0gICAgICAgICAgICBzZWxmLnNtdHBfc3RhdGUgPSBzZWxmLkNPTU1BTkQKLSAgICAgICAgICAgIHNlbGYuc2Vlbl9ncmVldGluZyA9ICcnCi0gICAgICAgICAgICBzZWxmLm1haWxmcm9tID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yY3B0dG9zID0gW10KLSAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9ICcnCi0gICAgICAgICAgICBzZWxmLmZxZG4gPSBzb2NrZXQuZ2V0ZnFkbigpCi0gICAgICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwotICAgICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCi0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gIT0gZXJybm8uRU5PVENPTk46Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLnB1c2goJzIyMCAlcyAlcycgJSAoc2VsZi5mcWRuLCBzbXRwZC5fX3ZlcnNpb25fXykpCi0gICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKGInXHJcbicpCi0gICAgICAgICAgICBzZWxmLmV4dGVuZGVkX3NtdHAgPSBGYWxzZQotCi0KICAgICBjbGFzcyBUZXN0U01UUFNlcnZlcihzbXRwZC5TTVRQU2VydmVyKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHRlc3QgU01UUCBzZXJ2ZXIuCkBAIC03MDIsMzcgKzY3MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLiBUaGlzIGF2b2lkcyBjaGFuZ2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDptb2Q6YGFzeW5jb3JlYCBtb2R1bGUncyBnbG9iYWwgc3RhdGUuCiAgICAgICAgICIiIgotICAgICAgICBjaGFubmVsX2NsYXNzID0gVGVzdFNNVFBDaGFubmVsCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHIsIGhhbmRsZXIsIHBvbGxfaW50ZXJ2YWwsIHNvY2ttYXApOgotICAgICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5zb2NrbWFwID0gc29ja21hcAotICAgICAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoMCkKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc29jaywgbWFwPXNvY2ttYXApCi0gICAgICAgICAgICAgICAgIyB0cnkgdG8gcmUtdXNlIGEgc2VydmVyIHBvcnQgaWYgcG9zc2libGUKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXVzZV9hZGRyKCkKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmQoYWRkcikKLSAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KLSAgICAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIE5vbmUsIG1hcD1zb2NrbWFwKQorICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogICAgICAgICAgICAgc2VsZi5faGFuZGxlciA9IGhhbmRsZXIKICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYucG9sbF9pbnRlcnZhbCA9IHBvbGxfaW50ZXJ2YWwKIAotICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICBSZWRlZmluZWQgb25seSBiZWNhdXNlIHRoZSBiYXNlIGNsYXNzIGRvZXMgbm90IHBhc3MgaW4gYQotICAgICAgICAgICAgbWFwLCBmb3JjaW5nIHVzZSBvZiBhIGdsb2JhbCBpbiA6bW9kOmBhc3luY29yZWAuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3Moc2VsZiwgY29ubiwgYWRkciwgc2VsZi5zb2NrbWFwKQotCiAgICAgICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBEZWxlZ2F0ZXMgdG8gdGhlIGhhbmRsZXIgcGFzc2VkIGluIHRvIHRoZSBzZXJ2ZXIncyBjb25zdHJ1Y3Rvci4KQEAgLTc2Myw4ICs3MTAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmdW5jOmBhc3luY29yZS5sb29wYC4KICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AocG9sbF9pbnRlcnZhbCwgbWFwPXNlbGYuc29ja21hcCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3I6CisgICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5fbWFwKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBPbiBGcmVlQlNEIDgsIGNsb3NpbmcgdGhlIHNlcnZlciByZXBlYXRhYmx5CiAgICAgICAgICAgICAgICAgIyByYWlzZXMgdGhpcyBlcnJvci4gV2Ugc3dhbGxvdyBpdCBpZiB0aGUKICAgICAgICAgICAgICAgICAjIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuCkBAIC04NzEsNyArODE4LDcgQEAKICAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNzbGN0eDoKICAgICAgICAgICAgICAgICAgICAgc29jayA9IHNlbGYuc3NsY3R4LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICMgc29ja2V0IGVycm9ycyBhcmUgc2lsZW5jZWQgYnkgdGhlIGNhbGxlciwgcHJpbnQgdGhlbSBoZXJlCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiR290IGFuIGVycm9yOlxuJXNcbiIgJSBlKQogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC05MDgsNiArODU1LDkgQEAKICAgICAgICAgICAgIHN1cGVyKFRlc3RUQ1BTZXJ2ZXIsIHNlbGYpLnNlcnZlcl9iaW5kKCkKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KIAorICAgIGNsYXNzIFRlc3RVbml4U3RyZWFtU2VydmVyKFRlc3RUQ1BTZXJ2ZXIpOgorICAgICAgICBhZGRyZXNzX2ZhbWlseSA9IHNvY2tldC5BRl9VTklYCisKICAgICBjbGFzcyBUZXN0VURQU2VydmVyKENvbnRyb2xNaXhpbiwgVGhyZWFkaW5nVURQU2VydmVyKToKICAgICAgICAgIiIiCiAgICAgICAgIEEgVURQIHNlcnZlciB3aGljaCBpcyBjb250cm9sbGFibGUgdXNpbmcgOmNsYXNzOmBDb250cm9sTWl4aW5gLgpAQCAtOTM3LDcgKzg4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoRGVsZWdhdGluZ1VEUFJlcXVlc3RIYW5kbGVyLCBzZWxmKS5maW5pc2goKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlci5fY2xvc2VkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC05NTUsNiArOTA1LDkgQEAKICAgICAgICAgICAgIHN1cGVyKFRlc3RVRFBTZXJ2ZXIsIHNlbGYpLnNlcnZlcl9jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCiAKKyAgICBjbGFzcyBUZXN0VW5peERhdGFncmFtU2VydmVyKFRlc3RVRFBTZXJ2ZXIpOgorICAgICAgICBhZGRyZXNzX2ZhbWlseSA9IHNvY2tldC5BRl9VTklYCisKICMgLSBlbmQgb2Ygc2VydmVyX2hlbHBlciBzZWN0aW9uCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCkBAIC05OTEsNyArOTQ0LDcgQEAKICAgICAiIiJUZXN0cyBmb3IgdGhlIE1lbW9yeUhhbmRsZXIuIiIiCiAKICAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtMTA0NCw3ICs5OTcsNyBAQAogCiAgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgLmluaS1zdHlsZSBjb25maWcgZmlsZS4iIiIKIAotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihcdyspIFwrXCsgKFx3KykkIgogCiAgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KICAgICBjb25maWcwID0gIiIiCkBAIC0xMjkyLDYgKzEyNDUsMjQgQEAKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKIAorICAgIGRlZiB0ZXN0X2NvbmZpZzBfdXNpbmdfY3Bfb2soc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyh0ZXh0d3JhcC5kZWRlbnQoc2VsZi5jb25maWcwKSkKKyAgICAgICAgICAgIGNwID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgICAgICBjcC5yZWFkX2ZpbGUoZmlsZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWcoY3ApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKICAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKICAgICAgICAgIyBBIGNvbmZpZyBmaWxlIGRlZmluaW5nIGEgc3ViLXBhcnNlciBhcyB3ZWxsLgogICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKQEAgLTEzODEsNyArMTM1Miw3IEBACiAKICAgICBkZWYgdGVzdF9sb2dnZXJfZGlzYWJsaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKLSAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzb21lX3ByaXN0aW5lX2xvZ2dlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlci5kaXNhYmxlZCkKQEAgLTEzOTQsMTcgKzEzNjUsMjMgQEAKIAogICAgICIiIlRlc3QgZm9yIFNvY2tldEhhbmRsZXIgb2JqZWN0cy4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFRDUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBUQ1Agc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTb2NrZXRIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VENQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX3NvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3NvY2tldCwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcignbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscygnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBOb25lKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc29ja19oZGxyKQpAQCAtMTQ0NCwzNSArMTQyMSw2OSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9nX291dHB1dCwgInNwYW1cbmVnZ3NcbiIpCiAKICAgICBkZWYgdGVzdF9ub3NlcnZlcihzZWxmKToKKyAgICAgICAgIyBBdm9pZCB0aW1pbmctcmVsYXRlZCBmYWlsdXJlcyBkdWUgdG8gU29ja2V0SGFuZGxlcidzIG93biBoYXJkLXdpcmVkCisgICAgICAgICMgb25lLXNlY29uZCB0aW1lb3V0IG9uIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigpIChpc3N1ZSAjMTYyNjQpLgorICAgICAgICBzZWxmLnNvY2tfaGRsci5yZXRyeVN0YXJ0ID0gMi41CiAgICAgICAgICMgS2lsbCB0aGUgc2VydmVyCiAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoMi4wKQotICAgICAgICAjVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCisgICAgICAgICMgVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGVsaWJlcmF0ZSBtaXN0YWtlJykKICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXhjZXB0aW9uKCdOZXZlciBzZW50JykKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5lcnJvcignTmV2ZXIgc2VudCwgZWl0aGVyJykKICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSA+IG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSwgbm93KQogICAgICAgICB0aW1lLnNsZWVwKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSAtIG5vdyArIDAuMDAxKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmVycm9yKCdOb3IgdGhpcycpCiAKK2RlZiBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpOgorICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAocHJlZml4PSd0ZXN0X2xvZ2dpbmdfJywgc3VmZml4PScuc29jaycpCisgICAgb3MuY2xvc2UoZmQpCisgICAgIyBqdXN0IG5lZWQgYSBuYW1lIC0gZmlsZSBjYW4ndCBiZSBwcmVzZW50LCBvciB3ZSdsbCBnZXQgYW4KKyAgICAjICdhZGRyZXNzIGFscmVhZHkgaW4gdXNlJyBlcnJvci4KKyAgICBvcy5yZW1vdmUoZm4pCisgICAgcmV0dXJuIGZuCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4U29ja2V0SGFuZGxlclRlc3QoU29ja2V0SGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciB3aXRoIHVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhTdHJlYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBEYXRhZ3JhbUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKIAogICAgICIiIlRlc3QgZm9yIERhdGFncmFtSGFuZGxlci4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBEYXRhZ3JhbUhhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RVRFBTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc29ja19oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIE5vbmUpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zb2NrX2hkbHIpCkBAIC0xNTA3LDIxICsxNTE4LDQ0IEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0KERhdGFncmFtSGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgRGF0YWdyYW1IYW5kbGVyIHVzaW5nIFVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhEYXRhZ3JhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgRGF0YWdyYW1IYW5kbGVyVGVzdC5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBEYXRhZ3JhbUhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBTeXNMb2dIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBTeXNMb2dIYW5kbGVyIHVzaW5nIFVEUC4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTeXNMb2dIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VURQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX2RhdGFncmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zbF9oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyKCgnbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc2xfaGRsciA9IGhjbHMoKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNsX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNsX2hkbHIpCkBAIC0xNTU5LDYgKzE1OTMsMjMgQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVW5peFN5c0xvZ0hhbmRsZXJUZXN0KFN5c0xvZ0hhbmRsZXJUZXN0KToKKworICAgICIiIlRlc3QgZm9yIFN5c0xvZ0hhbmRsZXIgd2l0aCBVbml4IHNvY2tldHMuIiIiCisKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBIVFRQSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogICAgICIiIlRlc3QgZm9yIEhUVFBIYW5kbGVyLiIiIgogCkBAIC0xNzc5LDcgKzE4MzAsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKICAgICAgICAgICAgIHMgPSBzdHJlYW0uZ2V0dmFsdWUoKQogICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5maW5kKCJVc2VyV2FybmluZzogSSdtIHdhcm5pbmcgeW91Li4uXG4iKSA+IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocy5maW5kKCJVc2VyV2FybmluZzogSSdtIHdhcm5pbmcgeW91Li4uXG4iKSwgMCkKIAogICAgICAgICAgICAgI1NlZSBpZiBhbiBleHBsaWNpdCBmaWxlIHVzZXMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBhX2ZpbGUgPSBpby5TdHJpbmdJTygpCkBAIC0xODE3LDcgKzE4NjgsNyBAQAogCiAgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgZGljdGlvbmFyeS4iIiIKIAotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihcdyspIFwrXCsgKFx3KykkIgogCiAgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KICAgICBjb25maWcwID0gewpAQCAtMjM4OSw2ICsyNDQwLDMyIEBACiAgICAgICAgIH0sCiAgICAgfQogCisgICAgIyBBcyBjb25maWcwLCBidXQgd2l0aCBwcm9wZXJ0aWVzCisgICAgY29uZmlnMTQgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgICAgICcuJzogeworICAgICAgICAgICAgICAgICAgICAnZm9vJzogJ2JhcicsCisgICAgICAgICAgICAgICAgICAgICd0ZXJtaW5hdG9yJzogJyFcbicsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCiAgICAgb3V0X29mX29yZGVyID0gewogICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgICJmb3JtYXR0ZXJzIjogewpAQCAtMjY1NiwxMSArMjczMywyMCBAQAogICAgIGRlZiB0ZXN0X2NvbmZpZzEzX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMTMpCiAKKyAgICBkZWYgdGVzdF9jb25maWcxNF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzE0KQorICAgICAgICAgICAgaCA9IGxvZ2dpbmcuX2hhbmRsZXJzWydoYW5kMSddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZm9vLCAnYmFyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC50ZXJtaW5hdG9yLCAnIVxuJykKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnRXhjbGFtYXRpb24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dHB1dC5nZXR2YWx1ZSgpLmVuZHN3aXRoKCdFeGNsYW1hdGlvbiFcbicpKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnbGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsnKQotICAgIGRlZiBzZXR1cF92aWFfbGlzdGVuZXIoc2VsZiwgdGV4dCk6CisgICAgZGVmIHNldHVwX3ZpYV9saXN0ZW5lcihzZWxmLCB0ZXh0LCB2ZXJpZnk9Tm9uZSk6CiAgICAgICAgIHRleHQgPSB0ZXh0LmVuY29kZSgidXRmLTgiKQogICAgICAgICAjIEFzayBmb3IgYSByYW5kb21seSBhc3NpZ25lZCBwb3J0IChieSB1c2luZyBwb3J0IDApCi0gICAgICAgIHQgPSBsb2dnaW5nLmNvbmZpZy5saXN0ZW4oMCkKKyAgICAgICAgdCA9IGxvZ2dpbmcuY29uZmlnLmxpc3RlbigwLCB2ZXJpZnkpCiAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICB0LnJlYWR5LndhaXQoKQogICAgICAgICAjIE5vdyBnZXQgdGhlIHBvcnQgYWxsb2NhdGVkCkBAIC0yNzIwLDYgKzI4MDYsNjkgQEAKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RfbGlzdGVuX3ZlcmlmeShzZWxmKToKKworICAgICAgICBkZWYgdmVyaWZ5X2ZhaWwoc3R1ZmYpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBkZWYgdmVyaWZ5X3JldmVyc2Uoc3R1ZmYpOgorICAgICAgICAgICAgcmV0dXJuIHN0dWZmWzo6LTFdCisKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgIHRvX3NlbmQgPSB0ZXh0d3JhcC5kZWRlbnQoQ29uZmlnRmlsZVRlc3QuY29uZmlnMSkKKyAgICAgICAgIyBGaXJzdCwgc3BlY2lmeSBhIHZlcmlmaWNhdGlvbiBmdW5jdGlvbiB0aGF0IHdpbGwgZmFpbC4KKyAgICAgICAgIyBXZSBleHBlY3QgdG8gc2VlIG5vIG91dHB1dCwgc2luY2Ugb3VyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgIyBuZXZlciB0b29rIGVmZmVjdC4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kLCB2ZXJpZnlfZmFpbCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKKyAgICAgICAgIyBOb3csIHBlcmZvcm0gbm8gdmVyaWZpY2F0aW9uLiBPdXIgY29uZmlndXJhdGlvbgorICAgICAgICAjIHNob3VsZCB0YWtlIGVmZmVjdC4KKworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmQpICAgICMgbm8gdmVyaWZ5IGNhbGxhYmxlIHNwZWNpZmllZAorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBzdGlsbCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZCBiZWZvcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKKyAgICAgICAgIyBOb3csIHBlcmZvcm0gdmVyaWZpY2F0aW9uIHdoaWNoIHRyYW5zZm9ybXMgdGhlIGJ5dGVzLgorCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZFs6Oi0xXSwgdmVyaWZ5X3JldmVyc2UpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICc1JyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzYnKSwKKyAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IHN0aWxsIGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkIGJlZm9yZS4KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSwgcGF0PXIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIikKKwogICAgIGRlZiB0ZXN0X291dF9vZl9vcmRlcihzZWxmKToKICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5vdXRfb2Zfb3JkZXIpCiAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLmdldExvZ2dlcignbXltb2R1bGUnKS5oYW5kbGVyc1swXQpAQCAtMjc3OSwxNCArMjkyOCwxNCBAQAogICAgICAgICBsMiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZWYuZ2hpJykKICAgICAgICAgYzEgPSByLmdldENoaWxkKCd4eXonKQogICAgICAgICBjMiA9IHIuZ2V0Q2hpbGQoJ3V2dy54eXonKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMSwgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBsb2dnaW5nLmdldExvZ2dlcigndXZ3Lnh5eicpKQogICAgICAgICBjMSA9IGwxLmdldENoaWxkKCdkZWYnKQogICAgICAgICBjMiA9IGMxLmdldENoaWxkKCdnaGknKQogICAgICAgICBjMyA9IGwxLmdldENoaWxkKCdkZWYuZ2hpJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGMzKQorICAgICAgICBzZWxmLmFzc2VydElzKGMxLCBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgYzMpCiAKIAogY2xhc3MgRGVyaXZlZExvZ1JlY29yZChsb2dnaW5nLkxvZ1JlY29yZCk6CkBAIC0yODI5LDcgKzI5NzgsNyBAQAogCiBjbGFzcyBRdWV1ZUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKICAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtMzEyMywxMyArMzI3MiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcwIC0gcmVsZWFzZScsIHNlbGYuY2FsbGVkWy0xXSkKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9hY3F1aXJlKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2ZsdXNoKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2ZsdXNoJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdmbHVzaCcsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnY2xvc2UnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2Nsb3NlJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfdmFsdWVlcnJvcl9pbl9hY3F1aXJlKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBWYWx1ZUVycm9yKQpAQCAtMzMzNiw2ICszNDg1LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5yb290LmxldmVsLCBzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwpCiAKICAgICBkZWYgdGVzdF9maWxlbmFtZShzZWxmKToKKworICAgICAgICBkZWYgY2xlYW51cChoMSwgaDIsIGZuKToKKyAgICAgICAgICAgIGgxLmNsb3NlKCkKKyAgICAgICAgICAgIGgyLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKwogICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPSd0ZXN0LmxvZycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2luZy5yb290LmhhbmRsZXJzKSwgMSkKQEAgLTMzNDMsMTcgKzM0OTgsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGhhbmRsZXIsIGxvZ2dpbmcuRmlsZUhhbmRsZXIpCiAKICAgICAgICAgZXhwZWN0ZWQgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCd0ZXN0LmxvZycsICdhJykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGV4cGVjdGVkLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm1vZGUsIGV4cGVjdGVkLnN0cmVhbS5tb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm5hbWUsIGV4cGVjdGVkLnN0cmVhbS5uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCwgaGFuZGxlciwgZXhwZWN0ZWQsICd0ZXN0LmxvZycpCiAKICAgICBkZWYgdGVzdF9maWxlbW9kZShzZWxmKToKKworICAgICAgICBkZWYgY2xlYW51cChoMSwgaDIsIGZuKToKKyAgICAgICAgICAgIGgxLmNsb3NlKCkKKyAgICAgICAgICAgIGgyLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKwogICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPSd0ZXN0LmxvZycsIGZpbGVtb2RlPSd3YicpCiAKICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcucm9vdC5oYW5kbGVyc1swXQogICAgICAgICBleHBlY3RlZCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoJ3Rlc3QubG9nJywgJ3diJykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGV4cGVjdGVkLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm1vZGUsIGV4cGVjdGVkLnN0cmVhbS5tb2RlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCwgaGFuZGxlciwgZXhwZWN0ZWQsICd0ZXN0LmxvZycpCiAKICAgICBkZWYgdGVzdF9zdHJlYW0oc2VsZik6CiAgICAgICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkKQEAgLTM4MDksNiArMzk3MCw2MyBAQAogICAgICAgICBhc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZuLCAnVzcnLCBkZWxheT1UcnVlKQogCisgICAgZGVmIHRlc3RfY29tcHV0ZV9yb2xsb3Zlcl9kYWlseV9hdHRpbWUoc2VsZik6CisgICAgICAgIGN1cnJlbnRUaW1lID0gMAorICAgICAgICBhdFRpbWUgPSBkYXRldGltZS50aW1lKDEyLCAwLCAwKQorICAgICAgICByaCA9IGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgc2VsZi5mbiwgd2hlbj0nTUlETklHSFQnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCB1dGM9VHJ1ZSwKKyAgICAgICAgICAgIGF0VGltZT1hdFRpbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3ZlcihjdXJyZW50VGltZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBjdXJyZW50VGltZSArIDEyICogNjAgKiA2MCkKKworICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKGN1cnJlbnRUaW1lICsgMTMgKiA2MCAqIDYwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGN1cnJlbnRUaW1lICsgMzYgKiA2MCAqIDYwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmguY2xvc2UoKQorCisgICAgI0B1bml0dGVzdC5za2lwSWYoVHJ1ZSwgJ1RlbXBvcmFyaWx5IHNraXBwZWQgd2hpbGUgZmFpbHVyZXMgaW52ZXN0aWdhdGVkLicpCisgICAgZGVmIHRlc3RfY29tcHV0ZV9yb2xsb3Zlcl93ZWVrbHlfYXR0aW1lKHNlbGYpOgorICAgICAgICBjdXJyZW50VGltZSA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgdG9kYXkgPSBjdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lICUgODY0MDAKKworICAgICAgICBhdFRpbWUgPSBkYXRldGltZS50aW1lKDEyLCAwLCAwKQorCisgICAgICAgIHdkYXkgPSB0aW1lLmdtdGltZSh0b2RheSkudG1fd2RheQorICAgICAgICBmb3IgZGF5IGluIHJhbmdlKDcpOgorICAgICAgICAgICAgcmggPSBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcigKKyAgICAgICAgICAgICAgICBzZWxmLmZuLCB3aGVuPSdXJWQnICUgZGF5LCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCB1dGM9VHJ1ZSwKKyAgICAgICAgICAgICAgICBhdFRpbWU9YXRUaW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHdkYXkgPiBkYXk6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIHJvbGxvdmVyIGRheSBoYXMgYWxyZWFkeSBwYXNzZWQgdGhpcyB3ZWVrLCBzbyB3ZQorICAgICAgICAgICAgICAgICAgICAjIGdvIG92ZXIgaW50byBuZXh0IHdlZWsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoNyAtIHdkYXkgKyBkYXkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoZGF5IC0gd2RheSkKKyAgICAgICAgICAgICAgICAjIEF0IHRoaXMgcG9pbnQgZXhwZWN0ZWQgaXMgaW4gZGF5cyBmcm9tIG5vdywgY29udmVydCB0byBzZWNvbmRzCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKj0gMjQgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgIyBBZGQgaW4gdGhlIHJvbGxvdmVyIHRpbWUKKyAgICAgICAgICAgICAgICBleHBlY3RlZCArPSAxMiAqIDYwICogNjAKKyAgICAgICAgICAgICAgICAjIEFkZCBpbiBhZGp1c3RtZW50IGZvciB0b2RheQorICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IHRvZGF5CisgICAgICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKHRvZGF5KQorICAgICAgICAgICAgICAgIGlmIGFjdHVhbCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZhaWxlZCBpbiB0aW1lem9uZTogJWQnICUgdGltZS50aW1lem9uZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2xvY2FsIHZhcnM6ICVzJyAlIGxvY2FscygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiBkYXkgPT0gd2RheToKKyAgICAgICAgICAgICAgICAgICAgIyBnb2VzIGludG8gZm9sbG93aW5nIHdlZWsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gNyAqIDI0ICogNjAgKiA2MAorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3Zlcih0b2RheSArIDEzICogNjAgKiA2MCkKKyAgICAgICAgICAgICAgICBpZiBhY3R1YWwgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdmYWlsZWQgaW4gdGltZXpvbmU6ICVkJyAlIHRpbWUudGltZXpvbmUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdsb2NhbCB2YXJzOiAlcycgJSBsb2NhbHMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJoLmNsb3NlKCkKKworCiBkZWYgc2VjcygqKmt3KToKICAgICByZXR1cm4gZGF0ZXRpbWUudGltZWRlbHRhKCoqa3cpIC8vIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTEpCiAKQEAgLTM4NjcsNyArNDA4NSw3IEBACiAgICAgICAgIGguaGFuZGxlKHIpCiAgICAgICAgIGguY2xvc2UoKQogICAgICAgICAjIE5vdyBzZWUgaWYgdGhlIGV2ZW50IGlzIHJlY29yZGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fcmVjcyA8IHdpbjMyZXZ0bG9nLkdldE51bWJlck9mRXZlbnRMb2dSZWNvcmRzKGVsaCkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhudW1fcmVjcywgd2luMzJldnRsb2cuR2V0TnVtYmVyT2ZFdmVudExvZ1JlY29yZHMoZWxoKSkKICAgICAgICAgZmxhZ3MgPSB3aW4zMmV2dGxvZy5FVkVOVExPR19CQUNLV0FSRFNfUkVBRCB8IFwKICAgICAgICAgICAgICAgICB3aW4zMmV2dGxvZy5FVkVOVExPR19TRVFVRU5USUFMX1JFQUQKICAgICAgICAgZm91bmQgPSBGYWxzZQpAQCAtMzkwMCw3ICs0MTE4LDggQEAKICAgICAgICAgICAgICAgICAgU01UUEhhbmRsZXJUZXN0LCBGaWxlSGFuZGxlclRlc3QsIFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0LAogICAgICAgICAgICAgICAgICBMYXN0UmVzb3J0VGVzdCwgTG9nUmVjb3JkVGVzdCwgRXhjZXB0aW9uVGVzdCwKICAgICAgICAgICAgICAgICAgU3lzTG9nSGFuZGxlclRlc3QsIEhUVFBIYW5kbGVyVGVzdCwgTlRFdmVudExvZ0hhbmRsZXJUZXN0LAotICAgICAgICAgICAgICAgICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0CisgICAgICAgICAgICAgICAgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsIFVuaXhTb2NrZXRIYW5kbGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgVW5peERhdGFncmFtSGFuZGxlclRlc3QsIFVuaXhTeXNMb2dIYW5kbGVyVGVzdAogICAgICAgICAgICAgICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQppbmRleCBiYWYxZDZhLi42YzMwZmVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CkBAIC0xMDc5LDcgKzEwNzksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2JpZycsIHNpZ25lZD1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2JpZycsIHNpZ25lZD1GYWxzZSksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdiaWcnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdsaXR0bGUnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDApLnRvX2J5dGVzKDAsICdiaWcnKSwgYicnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxKS50b19ieXRlcyg1LCAnYmlnJyksIGInXHgwMFx4MDBceDAwXHgwMFx4MDEnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sem1hLnB5IGIvTGliL3Rlc3QvdGVzdF9sem1hLnB5CmluZGV4IGFkOTA0NTYuLjI2ZDE5ZGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbHptYS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2x6bWEucHkKQEAgLTM3MSw2ICszNzEsOCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgInciKSBhcyBmOgogICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgIngiKSBhcyBmOgorICAgICAgICAgICAgcGFzcwogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgImEiKSBhcyBmOgogICAgICAgICAgICAgcGFzcwogCkBAIC0zOTgsMTMgKzQwMCwyOSBAQAogICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sICJhYiIpOgogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiB0ZXN0X2luaXRfd2l0aF94X21vZGUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ4IiwgInhiIik6CisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIExaTUFGaWxlKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X2luaXRfYmFkX21vZGUoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAoMywgIngiKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICIiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgIngiKQorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInh0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4KyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAicngiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInd4IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJydCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CkBAIC02NzgsNiArNjk2LDIwIEBACiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haWzoxMjhdKSkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHN0cmVhbSBmb290ZXI6IENSQyAoNCBieXRlcyksIGluZGV4IHNpemUgKDQgYnl0ZXMpLAorICAgICAgICAjIGZsYWdzICgyIGJ5dGVzKSBhbmQgbWFnaWMgbnVtYmVyICgyIGJ5dGVzKS4KKyAgICAgICAgdHJ1bmNhdGVkID0gQ09NUFJFU1NFRF9YWls6LTEyXQorICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKElOUFVUKSksIElOUFVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEyLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMik6CisgICAgICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkWzppXSkpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKwogICAgIGRlZiB0ZXN0X3JlYWRfYmFkX2FyZ3Moc2VsZik6CiAgICAgICAgIGYgPSBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTEwMTcsOCArMTA0OSw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAiIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJ4IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJyYnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgInJiIiwgZW5jb2Rpbmc9InV0Zi04IikKQEAgLTEwNjcsNiArMTA5NywxNiBAQAogICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oYmlvLCAicnQiLCBuZXdsaW5lPSJcciIpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ4IiwgInhiIiwgInh0Iik6CisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCiAKIGNsYXNzIE1pc2NlbGxhbmVvdXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQppbmRleCBmMmU0YzYzLi43OGUyYTMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CkBAIC01OTYsNyArNTk2LDcgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgVGVzdE1haWxib3guc2V0VXAoc2VsZikKLSAgICAgICAgaWYgb3MubmFtZSBpbiAoJ250JywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgaWYgKG9zLm5hbWUgPT0gJ250Jykgb3IgKHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJyk6CiAgICAgICAgICAgICBzZWxmLl9ib3guY29sb24gPSAnIScKIAogICAgIGRlZiBhc3NlcnRNYWlsYm94RW1wdHkoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKaW5kZXggN2UzN2YzOS4uMjU1ZWI4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQpAQCAtMjQsMzcgKzI0LDEzIEBACiAKIGNsYXNzIEludFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CiAgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoZSBmdWxsIHJhbmdlIG9mIFB5dGhvbiBpbnRzLgotICAgICAgICBuID0gc3lzLm1heHNpemUKKyAgICAgICAgIyBUZXN0IGEgcmFuZ2Ugb2YgUHl0aG9uIGludHMgbGFyZ2VyIHRoYW4gdGhlIG1hY2hpbmUgd29yZCBzaXplLgorICAgICAgICBuID0gc3lzLm1heHNpemUgKiogMgogICAgICAgICB3aGlsZSBuOgogICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CiAgICAgICAgICAgICAgICAgc2VsZi5oZWxwZXIoZXhwZWN0ZWQpCiAgICAgICAgICAgICBuID0gbiA+PiAxCiAKLSAgICBkZWYgdGVzdF9pbnQ2NChzZWxmKToKLSAgICAgICAgIyBTaW11bGF0ZSBpbnQgbWFyc2hhbGluZyBvbiBhIDY0LWJpdCBib3guICBUaGlzIGlzIG1vc3QgaW50ZXJlc3RpbmcgaWYKLSAgICAgICAgIyB3ZSdyZSBydW5uaW5nIHRoZSB0ZXN0IG9uIGEgMzItYml0IGJveCwgb2YgY291cnNlLgotCi0gICAgICAgIGRlZiB0b19saXR0bGVfZW5kaWFuX3N0cmluZyh2YWx1ZSwgbmJ5dGVzKToKLSAgICAgICAgICAgIGIgPSBieXRlYXJyYXkoKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmJ5dGVzKToKLSAgICAgICAgICAgICAgICBiLmFwcGVuZCh2YWx1ZSAmIDB4ZmYpCi0gICAgICAgICAgICAgICAgdmFsdWUgPj49IDgKLSAgICAgICAgICAgIHJldHVybiBiCi0KLSAgICAgICAgbWF4aW50NjQgPSAoMSA8PCA2MykgLSAxCi0gICAgICAgIG1pbmludDY0ID0gLW1heGludDY0LTEKLQotICAgICAgICBmb3IgYmFzZSBpbiBtYXhpbnQ2NCwgbWluaW50NjQsIC1tYXhpbnQ2NCwgLShtaW5pbnQ2NCA+PiAxKToKLSAgICAgICAgICAgIHdoaWxlIGJhc2U6Ci0gICAgICAgICAgICAgICAgcyA9IGInSScgKyB0b19saXR0bGVfZW5kaWFuX3N0cmluZyhiYXNlLCA4KQotICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGdvdCkKLSAgICAgICAgICAgICAgICBpZiBiYXNlID09IC0xOiAgIyBhIGZpeGVkLXBvaW50IGZvciBzaGlmdGluZyByaWdodCAxCi0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA+Pj0gMQotCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgZm9yIGIgaW4gKFRydWUsIEZhbHNlKToKICAgICAgICAgICAgIHNlbGYuaGVscGVyKGIpCkBAIC0yMDEsMTAgKzE3NywxNCBAQAogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgdGVzdF9sb2Fkc19yZWN1cnNpb24oc2VsZik6CisgICAgZGVmIHRlc3RfbG9hZHNfMnhfY29kZShzZWxmKToKICAgICAgICAgcyA9IGInYycgKyAoYidYJyAqIDQqNCkgKyBiJ3snICogMioqMjAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgcykKIAorICAgIGRlZiB0ZXN0X2xvYWRzX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgcyA9IGInYycgKyAoYidYJyAqIDQqNSkgKyBiJ3snICogMioqMjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgcykKKwogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9saW1pdChzZWxmKToKICAgICAgICAgIyBDcmVhdGUgYSBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZS4KICAgICAgICAgaGVhZCA9IGxhc3QgPSBbXQpAQCAtMjgyLDE1ICsyNjIsMjAgQEAKIAogICAgIGRlZiB0ZXN0X2JhZF9yZWFkZXIoc2VsZik6CiAgICAgICAgIGNsYXNzIEJhZFJlYWRlcihpby5CeXRlc0lPKToKLSAgICAgICAgICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAgICAgICAgIGIgPSBzdXBlcigpLnJlYWQobikKKyAgICAgICAgICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgorICAgICAgICAgICAgICAgIG4gPSBzdXBlcigpLnJlYWRpbnRvKGJ1ZikKICAgICAgICAgICAgICAgICBpZiBuIGlzIG5vdCBOb25lIGFuZCBuID4gNDoKLSAgICAgICAgICAgICAgICAgICAgYiArPSBiJyAnICogMTAqKjYKLSAgICAgICAgICAgICAgICByZXR1cm4gYgorICAgICAgICAgICAgICAgICAgICBuICs9IDEwKio2CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgZm9yIHZhbHVlIGluICgxLjAsIDFqLCBiJzAxMjM0NTY3ODknLCAnMDEyMzQ1Njc4OScpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkUmVhZGVyKG1hcnNoYWwuZHVtcHModmFsdWUpKSkKIAorICAgIGRlZiBfdGVzdF9lb2Yoc2VsZik6CisgICAgICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKCgiaGVsbG8iLCAiZG9sbHkiLCBOb25lKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGEpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBtYXJzaGFsLmxvYWRzLCBkYXRhWzA6IGldKQorCiBMQVJHRV9TSVpFID0gMioqMzEKIHBvaW50ZXJfc2l6ZSA9IDggaWYgc3lzLm1heHNpemUgPiAweEZGRkZGRkZGIGVsc2UgNAogCkBAIC0zMzUsNiArMzIwLDEyMiBAQAogICAgIGRlZiB0ZXN0X2J5dGVhcnJheShzZWxmLCBzaXplKToKICAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZShieXRlYXJyYXkoc2l6ZSkpCiAKK2RlZiBDb2xsZWN0T2JqZWN0SURzKGlkcywgb2JqKToKKyAgICAiIiJDb2xsZWN0IG9iamVjdCBpZHMgc2VlbiBpbiBhIHN0cnVjdHVyZSIiIgorICAgIGlmIGlkKG9iaikgaW4gaWRzOgorICAgICAgICByZXR1cm4KKyAgICBpZHMuYWRkKGlkKG9iaikpCisgICAgaWYgaXNpbnN0YW5jZShvYmosIChsaXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQpKToKKyAgICAgICAgZm9yIGUgaW4gb2JqOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGUpCisgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CisgICAgICAgIGZvciBrLCB2IGluIG9iai5pdGVtcygpOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGspCisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgdikKKyAgICByZXR1cm4gbGVuKGlkcykKKworY2xhc3MgSW5zdGFuY2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgaW50b2JqID0gMTIzMzIxCisgICAgZmxvYXRvYmogPSAxLjIzNDUKKyAgICBzdHJvYmogPSAiYWJjZGUiKjMKKyAgICBkaWN0b2JqID0geyJoZWxsbyI6ZmxvYXRvYmosICJnb29kYnllIjpmbG9hdG9iaiwgZmxvYXRvYmo6ImhlbGxvIn0KKworICAgIGRlZiBoZWxwZXIzKHNlbGYsIHJzYW1wbGUsIHJlY3Vyc2l2ZT1GYWxzZSwgc2ltcGxlPUZhbHNlKToKKyAgICAgICAgI3dlIGhhdmUgdHdvIGluc3RhbmNlcworICAgICAgICBzYW1wbGUgPSAocnNhbXBsZSwgcnNhbXBsZSkKKworICAgICAgICBuMCA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIHNhbXBsZSkKKworICAgICAgICBzMyA9IG1hcnNoYWwuZHVtcHMoc2FtcGxlLCAzKQorICAgICAgICBuMyA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczMpKQorCisgICAgICAgICNzYW1lIG51bWJlciBvZiBpbnN0YW5jZXMgZ2VuZXJhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjMsIG4wKQorCisgICAgICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgICAgICAjY2FuIGNvbXBhcmUgd2l0aCB2ZXJzaW9uIDIKKyAgICAgICAgICAgIHMyID0gbWFyc2hhbC5kdW1wcyhzYW1wbGUsIDIpCisgICAgICAgICAgICBuMiA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczIpKQorICAgICAgICAgICAgI29sZCBmb3JtYXQgZ2VuZXJhdGVkIG1vcmUgaW5zdGFuY2VzCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobjIsIG4wKQorCisgICAgICAgICAgICAjaWYgY29tcGxleCBvYmplY3RzIGFyZSBpbiB0aGVyZSwgb2xkIGZvcm1hdCBpcyBsYXJnZXIKKyAgICAgICAgICAgIGlmIG5vdCBzaW1wbGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzMiksIGxlbihzMykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzMiksIGxlbihzMykpCisKKyAgICBkZWYgdGVzdEludChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5pbnRvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmludG9iaiwgc2ltcGxlPVRydWUpCisKKyAgICBkZWYgdGVzdEZsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmZsb2F0b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5mbG9hdG9iaikKKworICAgIGRlZiB0ZXN0U3RyKHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuc3Ryb2JqKQorCisgICAgZGVmIHRlc3REaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmRpY3RvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmRpY3RvYmopCisKKyAgICBkZWYgdGVzdE1vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGYucmVhZCgpCisgICAgICAgIGlmIF9fZmlsZV9fLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAiZXhlYyIpCisgICAgICAgIHNlbGYuaGVscGVyKGNvZGUpCisgICAgICAgIHNlbGYuaGVscGVyMyhjb2RlKQorCisgICAgZGVmIHRlc3RSZWN1cnNpb24oc2VsZik6CisgICAgICAgIGQgPSBkaWN0KHNlbGYuZGljdG9iaikKKyAgICAgICAgZFsic2VsZiJdID0gZAorICAgICAgICBzZWxmLmhlbHBlcjMoZCwgcmVjdXJzaXZlPVRydWUpCisgICAgICAgIGwgPSBbc2VsZi5kaWN0b2JqXQorICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICBzZWxmLmhlbHBlcjMobCwgcmVjdXJzaXZlPVRydWUpCisKK2NsYXNzIENvbXBhdGliaWxpdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIHZlcnNpb24pOgorICAgICAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb2RlID0gZi5yZWFkKCkKKyAgICAgICAgaWYgX19maWxlX18uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZSwgX19maWxlX18sICJleGVjIikKKyAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMoY29kZSwgdmVyc2lvbikKKyAgICAgICAgbWFyc2hhbC5sb2FkcyhkYXRhKQorCisgICAgZGVmIHRlc3QwVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDApCisKKyAgICBkZWYgdGVzdDFUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMSkKKworICAgIGRlZiB0ZXN0MlRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgyKQorCisgICAgZGVmIHRlc3QzVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDMpCisKK2NsYXNzIEludGVybmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgc3Ryb2JqID0gInRoaXMgaXMgYW4gaW50ZXJuZWQgc3RyaW5nIgorICAgIHN0cm9iaiA9IHN5cy5pbnRlcm4oc3Ryb2JqKQorCisgICAgZGVmIHRlc3RJbnRlcm4oc2VsZik6CisgICAgICAgIHMgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoc2VsZi5zdHJvYmopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMpLCBpZChzZWxmLnN0cm9iaikpCisgICAgICAgIHMyID0gc3lzLmludGVybihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMyKSwgaWQocykpCisKKyAgICBkZWYgdGVzdE5vSW50ZXJuKHNlbGYpOgorICAgICAgICBzID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNlbGYuc3Ryb2JqLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQoc2VsZi5zdHJvYmopKQorICAgICAgICBzMiA9IHN5cy5pbnRlcm4ocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzMiksIGlkKHMpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChJbnRUZXN0Q2FzZSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CmluZGV4IGQ2MTFhMzEuLjRkZTRmNjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQpAQCAtNTIwLDEyICs1MjAsMTIgQEAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zZWVrKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMikKIAogICAgIGRlZiB0ZXN0X3RleHRpb19wcm9wZXJ0aWVzKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKaW5kZXggZWU2YjE1YS4uZmZkNGY1OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpAQCAtMzUyLDYgKzM1MiwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhMWzBdLCBiKQogCisgICAgZGVmIHRlc3RfcmV2ZXJzZWQoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgYXNsaXN0ID0gbGlzdChyZXZlcnNlZChtLnRvbGlzdCgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGFzbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGxpc3QobVs6Oi0xXSkpCisKKwogIyBWYXJpYXRpb25zIG9uIHNvdXJjZSBvYmplY3RzIGZvciB0aGUgYnVmZmVyOiBieXRlcy1saWtlIG9iamVjdHMsIHRoZW4gYXJyYXlzCiAjIHdpdGggaXRlbXNpemUgPiAxLgogIyBOT1RFOiBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBvYmplY3RzIGlzIHVuaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21tYXAucHkgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKaW5kZXggODk5ZGY4ZC4uNmNhNWUxYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQpAQCAtMSwxMSArMSwxMiBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBfMkcsIF80RywgZ2NfY29sbGVjdCkKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiAKICMgU2tpcCB0ZXN0IGlmIHdlIGNhbid0IGltcG9ydCBtbWFwLgogbW1hcCA9IGltcG9ydF9tb2R1bGUoJ21tYXAnKQpAQCAtMjQ1LDcgKzI0Niw3IEBACiAKICAgICBkZWYgdGVzdF9iYWRfZmlsZV9kZXNjKHNlbGYpOgogICAgICAgICAjIFRyeSBvcGVuaW5nIGEgYmFkIGZpbGUgZGVzY3JpcHRvci4uLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQogCiAgICAgZGVmIHRlc3RfdG91Z2hlcl9maW5kKHNlbGYpOgogICAgICAgICAjIERvIGEgdG91Z2hlciAuZmluZCgpIHRlc3QuICBTRiBidWcgNTE1OTQzIHBvaW50ZWQgb3V0IHRoYXQsIGluIDIuMiwKQEAgLTY1NSw3ICs2NTYsNyBAQAogICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDApCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgV2luZG93c0Vycm9yCisgICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgT1NFcnJvcgogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKQEAgLTY3MSw3ICs2NzIsNyBAQAogICAgICAgICAjIHBhcmFtZXRlcnMgdG8gX2dldF9vc2ZoYW5kbGUuCiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcChzLmZpbGVubygpLCAxMCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtNjgyLDE0ICs2ODMsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgdGhlIElPRXJyb3IgZ2V0cyBwYXNzZWQgdGhyb3VnaAorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgT1NFcnJvciBnZXRzIHBhc3NlZCB0aHJvdWdoCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBleGM6CiAgICAgICAgICAgICB3aXRoIG1tYXAubW1hcCgtMSwgMTApIGFzIG06Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgSU9FcnJvciwKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIGV4Y2VwdGlvbiByYWlzZWQgaW4gY29udGV4dCBtYW5hZ2VyIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICAjIENoZWNrIG1tYXAgb2JqZWN0cyBhcmUgd2Vha3JlZmFibGUKKyAgICAgICAgbW0gPSBtbWFwLm1tYXAoLTEsIDE2KQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG1tKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIG1tKQorICAgICAgICBkZWwgbW0KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKwogY2xhc3MgTGFyZ2VNbWFwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNzA3LDcgKzcxNyw3IEBACiAgICAgICAgICAgICBmLnNlZWsobnVtX3plcm9lcykKICAgICAgICAgICAgIGYud3JpdGUodGFpbCkKICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIE92ZXJmbG93RXJyb3IpOgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgcmV0dXJuIGYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKaW5kZXggZTVhMjUyNS4uMTIzMDI5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKQEAgLTEsNiArMSw4IEBACiAjIFRlc3QgdGhlIG1vZHVsZSB0eXBlCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBnY19jb2xsZWN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiBpbXBvcnQgc3lzCiBNb2R1bGVUeXBlID0gdHlwZShzeXMpCkBAIC0zMyw3ICszNSwxMiBAQAogICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLCB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fcGFja2FnZV9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX3NwZWNfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X2FzY2lpX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBBU0NJSSBkb2NzdHJpbmcKQEAgLTQxLDcgKzQ4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBVbmljb2RlIGRvY3N0cmluZwpAQCAtNDksNyArNTgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2NcdTEyMzQiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvY1x1MTIzNCJ9KQorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jXHUxMjM0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X3JlaW5pdChzZWxmKToKICAgICAgICAgIyBSZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgcmVwbGFjZSB0aGUgX19kaWN0X18KQEAgLTYxLDEwICs3MiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uYmFyLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwgImJhciI6IDQyfSkKKyAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDIsCisgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsICJfX3NwZWNfXyI6IE5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9fZGljdF9fIGlzIGQpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCiAgICAgZGVmIHRlc3RfZG9udF9jbGVhcl9kaWN0KHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MTQwLgogICAgICAgICBkZWYgZigpOgpAQCAtODksNiArMTAwLDE0IEBACiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc3Ryb3llZCwgWzFdKQogCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgbSA9IE1vZHVsZVR5cGUoImZvbyIpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBtKQorICAgICAgICBkZWwgbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfbWluaW1hbChzZWxmKToKICAgICAgICAgIyByZXBycyB3aGVuIG1vZHVsZXMgaGF2ZSBubyBfX2ZpbGVfXywgX19uYW1lX18sIG9yIF9fbG9hZGVyX18KICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xMTAsMTMgKzEyOSwxOSBAQAogICAgICAgICBtLl9fZmlsZV9fID0gJy90bXAvZm9vLnB5JwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8bW9kdWxlICc/JyBmcm9tICcvdG1wL2Zvby5weSc+IikKIAorICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfbG9hZGVyX2FzX05vbmUoc2VsZik6CisgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQorICAgICAgICBhc3NlcnQgbS5fX2xvYWRlcl9fIGlzIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPG1vZHVsZSAnZm9vJz4iKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9iYXJlX2xvYWRlcl9idXRfbm9fbmFtZShzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gQmFyZUxvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoQmFyZUxvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfZnVsbF9sb2FkZXJfYnV0X25vX25hbWUoc2VsZik6CiAgICAgICAgICMgbS5fX2xvYWRlcl9fLm1vZHVsZV9yZXByKCkgd2lsbCBmYWlsIGJlY2F1c2UgdGhlIG1vZHVsZSBoYXMgbm8KQEAgLTEyNiwxNSArMTUxLDE3IEBACiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gRnVsbExvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoRnVsbExvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkZ1bGxMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfYmFyZV9sb2FkZXIoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEJhcmVMb2FkZXIKKyAgICAgICAgbW9kdWxlX3JlcHIgPSByZXByKEJhcmVMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnZm9vJyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICdmb28nICh7fSk+Ii5mb3JtYXQobW9kdWxlX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9mdWxsX2xvYWRlcihzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xNjQsOCArMTkxLDI1IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9zb3VyY2Uoc2VsZik6CiAgICAgICAgIHIgPSByZXByKHVuaXR0ZXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjI1XSwgIjxtb2R1bGUgJ3VuaXR0ZXN0JyBmcm9tICciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTEzOl0sICJfX2luaXRfXy5weSc+IikKKyAgICAgICAgc3RhcnRzX3dpdGggPSAiPG1vZHVsZSAndW5pdHRlc3QnIGZyb20gJyIKKyAgICAgICAgZW5kc193aXRoID0gIl9faW5pdF9fLnB5Jz4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6bGVuKHN0YXJ0c193aXRoKV0sIHN0YXJ0c193aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGRvZXMgbm90IHN0YXJ0IHdpdGggeyFyfScuZm9ybWF0KHIsIHN0YXJ0c193aXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy1sZW4oZW5kc193aXRoKTpdLCBlbmRzX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gZG9lcyBub3QgZW5kIHdpdGggeyFyfScuZm9ybWF0KHIsIGVuZHNfd2l0aCkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfZmluYWxpemF0aW9uX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIE1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucyBzaG91bGQgc3RpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyBzaHV0ZG93bgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsICJmcm9tIHRlc3QgaW1wb3J0IGZpbmFsX2EiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycikKKyAgICAgICAgbGluZXMgPSBvdXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGxpbmVzKSwgeworICAgICAgICAgICAgYiJ4ID0gYSIsCisgICAgICAgICAgICBiInggPSBiIiwKKyAgICAgICAgICAgIGIiZmluYWxfYS54ID0gYSIsCisgICAgICAgICAgICBiImZpbmFsX2IueCA9IGIiLAorICAgICAgICAgICAgYiJsZW4gPSBsZW4iLAorICAgICAgICAgICAgYiJzaHV0aWwucm10cmVlID0gcm10cmVlIn0pCiAKICAgICAjIGZyb3plbiBhbmQgbmFtZXNwYWNlIG1vZHVsZSByZXBycyBhcmUgdGVzdGVkIGluIGltcG9ydGxpYi4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKaW5kZXggZmViN2JkNS4uOTExNDhhNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC0xNzYsNTcgKzE3NiwyOCBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQogCiBjbGFzcyBUZXN0X1N0cmVhbVdyaXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgbGVuKCdcVTAwMDEyMzQ1JykgPT0gMjogIyBVQ1MyCi0gICAgICAgIGRlZiB0ZXN0X2diMTgwMzAoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKLSAgICAgICAgICAgIGMud3JpdGUoJzEyMycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGMucmVzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCisgICAgZGVmIHRlc3RfZ2IxODAzMChzZWxmKToKKyAgICAgICAgcz0gaW8uQnl0ZXNJTygpCisgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCiAKLSAgICAgICAgZGVmIHRlc3RfdXRmXzgoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHMpCi0gICAgICAgICAgICBjLndyaXRlKCcxMjMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCi0KLSAgICAgICAgICAgICMgUHl0aG9uIHV0Zi04IGNvZGVjIGNhbid0IGJ1ZmZlciBzdXJyb2dhdGUgcGFpcnMgeWV0LgotICAgICAgICAgICAgaWYgMDoKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKLSAgICAgICAgICAgICAgICBjLnJlc2V0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWNceGVkXHhhMFx4ODgnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OFx4ZWRceGJkXHg4NScpCi0KLSAgICBlbHNlOiAjIFVDUzQKLSAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X3V0Zl84KHNlbGYpOgorICAgICAgICBzPSBpby5CeXRlc0lPKCkKKyAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04JykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NScKKyAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQogCiAgICAgZGVmIHRlc3Rfc3RyZWFtd3JpdGVyX3N0cndyaXRlKHNlbGYpOgogICAgICAgICBzID0gaW8uQnl0ZXNJTygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY0ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9yaycpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNhMDRhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9ya3NlcnZlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNGFlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnc3Bhd24nKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weSBiL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKaW5kZXggNzA2N2IxMi4uNjYzOTYxMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CkBAIC0xLDcgKzEsMTAgQEAKLWltcG9ydCBzeXMKIGltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbXBvcnRsaWIuYWJjCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKQEAgLTI4Niw5ICsyODksNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFfdGVzdC5hdHRyLCAnaW4gbW9kdWxlJykKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KCpOYW1lc3BhY2VQYWNrYWdlVGVzdC5fX3N1YmNsYXNzZXNfXygpKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQppbmRleCAxZDUyNzEzLi43MWE0ZWMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CkBAIC0yNjYsNyArMjY2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZXJ2ZXIuaGVscCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKaW5kZXggMjhlZGUzNC4uYWIyZWViNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXN0ZGF0YSA9IG9wZW5fdXJscmVzb3VyY2UoVEVTVERBVEFVUkwsIGVuY29kaW5nPSJ1dGYtOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2s9Y2hlY2tfdmVyc2lvbikKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiICsgVEVTVERBVEFVUkwpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0ZGF0YS5jbG9zZSkKICAgICAgICAgZm9yIGxpbmUgaW4gdGVzdGRhdGE6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CmluZGV4IGY4MDk4NzYuLjI4NWVmNjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CkBAIC0yNTYsNiArMjU2LDQwIEBACiAgICAgICAgICAgICAgICAgICAgICMgZGlhbG9ncyAoIzQ4MDQpCiAgICAgICAgICAgICAgICAgICAgIG50cGF0aC5zYW1lb3BlbmZpbGUoLTEsIC0xKQogCisgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiQzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzovIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcQzpcXCIpKQorCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIGQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGQpKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgZm9sZGVyIGlzbid0IHRoZSByb290IGZvbGRlcgorICAgICAgICAgICAgIyAob3IgYW55IG90aGVyIHZvbHVtZSByb290KS4gVGhlIGRyaXZlLXJlbGF0aXZlCisgICAgICAgICAgICAjIGxvY2F0aW9ucyBiZWxvdyBjYW5ub3QgdGhlbiByZWZlciB0byBtb3VudCBwb2ludHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGRyaXZlLCBwYXRoID0gbnRwYXRoLnNwbGl0ZHJpdmUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobnRwYXRoLmlzbW91bnQoZHJpdmUudXBwZXIoKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcbG9jYWxob3N0XFxjJCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQogCiBjbGFzcyBOdENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IG50cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CmluZGV4IDYzODQzNzAuLjQ3ODUxMDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKQEAgLTQsNyArNCw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGlmIG5vdCBoYXNhdHRyKG9zLCAib3BlbnB0eSIpOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBvcGVucHR5KCkgYXZhaWxhYmxlLiIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLm9wZW5wdHkoKSBub3QgYXZhaWxhYmxlLiIpCiAKIAogY2xhc3MgT3BlbnB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKaW5kZXggZmE2MDhiOS4uYWI1OGE5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CkBAIC0xLDggKzEsMTAgQEAKLWltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCitweV9vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBibG9ja2VkPVsnX29wZXJhdG9yJ10pCitjX29wZXJhdG9yID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdvcGVyYXRvcicsIGZyZXNoPVsnX29wZXJhdG9yJ10pCisKIGNsYXNzIFNlcTE6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CkBAIC0zMiw4ICszNCw5IEBACiAgICAgICAgIHJldHVybiBvdGhlciAqIHNlbGYubHN0CiAKIAotY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBPcGVyYXRvclRlc3RDYXNlOgogICAgIGRlZiB0ZXN0X2x0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwKSkKQEAgLTQ0LDYgKzQ3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmx0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9sZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubGUoMSwgMCkpCkBAIC01NCw2ICs1OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTY3LDYgKzcyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbmUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTgwLDYgKzg2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9nZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAwKSkKQEAgLTkwLDYgKzk3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5nZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ3QoMSwgMCkpCkBAIC0xMDAsMjIgKzEwOCwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9hYnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygtMSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuYWJzKDEpLCAxKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFkZCgzLCA0KSA9PSA3KQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9hbmQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hbmRfKDB4ZiwgMHhhKSA9PSAweGEpCiAKICAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KCdweScsICd0aG9uJykgPT0gJ3B5dGhvbicpCkBAIC0xMjUsMTIgKzEzNywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgMTMsIDI5KQogCiAgICAgZGVmIHRlc3RfY291bnRPZihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCAzKSA9PSAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDUpID09IDApCiAKICAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBbNCwgMywgMiwgMV0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbGl0ZW0sIGEsIE5vbmUpCkBAIC0xMzgsMzMgKzE1MiwzOSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbNCwgMiwgMV0pCiAKICAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZmxvb3JkaXYoNSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X3RydWVkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydWVkaXYsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci50cnVlZGl2KDUsIDIpID09IDIuNSkKIAogICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IHJhbmdlKDEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgYSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldGl0ZW0oYSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X2luZGV4T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pbmRleE9mKFs0LCAzLCAyLCAxXSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgWzQsIDMsIDIsIDFdLCAwKQogCiAgICAgZGVmIHRlc3RfaW52ZXJ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbnYoNCksIC01KQogCiAgICAgZGVmIHRlc3RfbHNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sc2hpZnQoNSwgMSkgPT0gMTApCkBAIC0xNzIsMTYgKzE5MiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubW9kKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tb2QoNSwgMikgPT0gMSkKIAogICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tdWwoNSwgMikgPT0gMTApCiAKICAgICBkZWYgdGVzdF9uZWcoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZyg1KSwgLTUpCkBAIC0xOTAsMTEgKzIxMywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZygtMCksIDApCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX29yKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm9yXygweGEsIDB4NSkgPT0gMHhmKQogCiAgICAgZGVmIHRlc3RfcG9zKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG9zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoNSksIDUpCkBAIC0yMDMsMTQgKzIyOCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvcygtMCksIDApCiAKICAgICBkZWYgdGVzdF9wb3coc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3cpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvdygzLDUpLCAzKio1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9fcG93X18oMyw1KSwgMyoqNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxLCAyLCAzKQogCiAgICAgZGVmIHRlc3RfcnNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucnNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yc2hpZnQoNSwgMSkgPT0gMikKQEAgLTIxOCwxMiArMjQ0LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgMiwgLTEpCiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29udGFpbnMocmFuZ2UoNCksIDIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCA1KSkKIAogICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGxpc3QocmFuZ2UoMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCBOb25lLCBOb25lKQpAQCAtMjMyLDExICsyNjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgNCwgMikKIAogICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zdWIoNSwgMikgPT0gMykKIAogICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgpAQCAtMjQ4LDExICsyNzgsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aChbXSkpCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX3hvcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnhvcikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci54b3IoMHhiLCAweGMpID09IDB4NykKIAogICAgIGRlZiB0ZXN0X2lzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBiID0gJ3h5enBkcScKICAgICAgICAgYyA9IGFbOjNdICsgYlszOl0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc18pCkBAIC0yNjAsNiArMjkyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc18oYSxjKSkKIAogICAgIGRlZiB0ZXN0X2lzX25vdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfbm90KQpAQCAtMjY3LDYgKzMwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc19ub3QoYSxjKSkKIAogICAgIGRlZiB0ZXN0X2F0dHJnZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtMzE2LDYgKzM1MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdhcnRodXInLCAndGhvbWFzJywgJ2pvaG5zb24nKSkKIAogICAgIGRlZiB0ZXN0X2l0ZW1nZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9ICdBQkNERScKICAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnQycpCkBAIC0zNTAsMTIgKzM4NSwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLml0ZW1nZXR0ZXIoMiwgJ3gnLCA1KSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X21ldGhvZGNhbGxlcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1ldGhvZGNhbGxlcikKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF0gKyBhcmdzWzFdCiAgICAgICAgICAgICBkZWYgYmFyKHNlbGYsIGY9NDIpOgogICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBkZWYgYmF6KCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBrd2RzWyduYW1lJ10sIGt3ZHNbJ3NlbGYnXQogICAgICAgICBhID0gQSgpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGYsIGEpCkBAIC0zNjYsOCArNDA0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSwgYSkKICAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJywgZj01KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDUpCisgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JheicsIG5hbWU9J3NwYW0nLCBzZWxmPSdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAoJ3NwYW0nLCAnZWdncycpKQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pYWRkX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFkZCIKICAgICAgICAgICAgIGRlZiBfX2lhbmRfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpYW5kIgpAQCAtMzk2LDM3ICs0MzcsNDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pdHJ1ZWRpdiAoYywgNSksICJpdHJ1ZWRpdiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXhvciAgICAgKGMsIDUpLCAiaXhvciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWNvbmNhdCAgKGMsIGMpLCAiaWFkZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pYWRkX18gICAgIChjLCA1KSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFuZF9fICAgICAoYywgNSksICJpYW5kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lmbG9vcmRpdl9fKGMsIDUpLCAiaWZsb29yZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lsc2hpZnRfXyAgKGMsIDUpLCAiaWxzaGlmdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbW9kX18gICAgIChjLCA1KSwgImltb2QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW11bF9fICAgICAoYywgNSksICJpbXVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lvcl9fICAgICAgKGMsIDUpLCAiaW9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lwb3dfXyAgICAgKGMsIDUpLCAiaXBvdyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcnNoaWZ0X18gIChjLCA1KSwgImlyc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXN1Yl9fICAgICAoYywgNSksICJpc3ViIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l0cnVlZGl2X18gKGMsIDUpLCAiaXRydWVkaXYiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXhvcl9fICAgICAoYywgNSksICJpeG9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ljb25jYXRfXyAgKGMsIGMpLCAiaWFkZCIpCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBpbXBvcnQgc3lzCi0gICAgdGVzdF9jbGFzc2VzID0gKAotICAgICAgICBPcGVyYXRvclRlc3RDYXNlLAotICAgICkKKyAgICBkZWYgdGVzdF9sZW5ndGhfaGludChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgdHlwZShzZWxmLnZhbHVlKSBpcyB0eXBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLnZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKIAotICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgotICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgY291bnRzID0gW05vbmVdICogNQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6Ci0gICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChbXSwgMiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoaXRlcihbMSwgMiwgM10pKSwgMykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoMikpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTm90SW1wbGVtZW50ZWQpLCA0KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKFR5cGVFcnJvciksIDEyKSwgMTIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoImFiYyIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWCgtMikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWChMb29rdXBFcnJvcikpCisKKyAgICBkZWYgdGVzdF9kdW5kZXJfaXNfb3JpZ2luYWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKworICAgICAgICBuYW1lcyA9IFtuYW1lIGZvciBuYW1lIGluIGRpcihvcGVyYXRvcikgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpXQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIG9yaWcgPSBnZXRhdHRyKG9wZXJhdG9yLCBuYW1lKQorICAgICAgICAgICAgZHVuZGVyID0gZ2V0YXR0cihvcGVyYXRvciwgJ19fJyArIG5hbWUuc3RyaXAoJ18nKSArICdfXycsIE5vbmUpCisgICAgICAgICAgICBpZiBkdW5kZXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkdW5kZXIsIG9yaWcpCisKK2NsYXNzIFB5T3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gcHlfb3BlcmF0b3IKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19vcGVyYXRvciwgJ3JlcXVpcmVzIF9vcGVyYXRvcicpCitjbGFzcyBDT3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gY19vcGVyYXRvcgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQppbmRleCA3OGRlMjc4Li45NDczMDExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKQEAgLTczMCw3ICs3MzAsNyBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X2FuZF9sb25nX29wdGlvbl9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAieHl6IiwgIi0tZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ3h5eicsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9sb25nX29wdGlvbl9hcHBlbmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vPWJhciIsICItYiIsICIxMjMiLCAiLS1mb28iLCAiYmF6Il0sCkBAIC03NDAsMTUgKzc0MCwxNSBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9vbmVfcG9zaXRpb25hbF9hcmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICJmb28iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImJhciJdKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfb3B0aW9uX2NvbnN1bWVzX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIi0tIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKQogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICItLSIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9qb2luZWRfYW5kX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWFiIiwgIi0tIiwgIi0tZm9vIiwgImJhciJdLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcy5weSBiL0xpYi90ZXN0L3Rlc3Rfb3MucHkKaW5kZXggNjAxYzZiMi4uMWZmYTdkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X29zLnB5CkBAIC0yNCw2ICsyNCw5IEBACiBpbXBvcnQgc3RhdAogaW1wb3J0IGxvY2FsZQogaW1wb3J0IGNvZGVjcworaW1wb3J0IGRlY2ltYWwKK2ltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBwaWNrbGUKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zMiw2ICszNSwxMCBAQAogICAgIGltcG9ydCByZXNvdXJjZQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHJlc291cmNlID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBmY250bAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZjbnRsID0gTm9uZQogCiBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCkBAIC0yNTYsNiArMjYzLDEzIEBACiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdF9hdHRyaWJ1dGVzKGZuYW1lKQogCisgICAgZGVmIHRlc3Rfc3RhdF9yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCisgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInXHgwM2Nvc1xuc3RhdF9yZXN1bHRcbicsIHApCisgICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdW5waWNrbGVkKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N0YXR2ZnMnKSwgJ3Rlc3QgbmVlZHMgb3Muc3RhdHZmcygpJykKICAgICBkZWYgdGVzdF9zdGF0dmZzX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTI2Myw3ICsyNzcsNyBAQAogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBPbiBBdGhlT1MsIGdsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUwogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3Muc3RhdHZmcygpIGZhaWxlZCB3aXRoIEVOT1NZUycpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mX2JmcmVlLCByZXN1bHRbM10pCkBAIC0zMDAsNiArMzE0LDIxIEBACiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdHZmcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIG9zLnN0YXR2ZnMoKSIpCisgICAgZGVmIHRlc3Rfc3RhdHZmc19yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBvcy5zdGF0dmZzKHNlbGYuZm5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5zdGF0dmZzKCkgZmFpbGVkIHdpdGggRU5PU1lTJykKKworICAgICAgICBwID0gcGlja2xlLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4MDNjb3NcbnN0YXR2ZnNfcmVzdWx0XG4nLCBwKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIGRlZiB0ZXN0X3V0aW1lX2RpcihzZWxmKToKICAgICAgICAgZGVsdGEgPSAxMDAwMDAwCiAgICAgICAgIHN0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKQEAgLTQ3OCw5ICs1MDcsOSBAQAogICAgICAgICAjIFZlcmlmeSB0aGF0IGFuIG9wZW4gZmlsZSBjYW4gYmUgc3RhdCdlZAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zdGF0KHIiYzpccGFnZWZpbGUuc3lzIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAyOiAjIGZpbGUgZG9lcyBub3QgZXhpc3Q7IGNhbm5vdCBydW4gdGVzdAotICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBwYXNzICMgZmlsZSBkb2VzIG5vdCBleGlzdDsgY2Fubm90IHJ1biB0ZXN0CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG5vdCBzdGF0IHBhZ2VmaWxlLnN5cyIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKQEAgLTg3Niw2ICs5MDUsMTcgQEAKICAgICAgICAgb3MubWFrZWRpcnMocGF0aCwgbW9kZT1tb2RlLCBleGlzdF9vaz1UcnVlKQogICAgICAgICBvcy51bWFzayhvbGRfbWFzaykKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaG93bicpLCAndGVzdCBuZWVkcyBvcy5jaG93bicpCisgICAgZGVmIHRlc3RfY2hvd25fdWlkX2dpZF9hcmd1bWVudHNfbXVzdF9iZV9pbmRleChzZWxmKToKKyAgICAgICAgc3RhdCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHVpZCA9IHN0YXQuc3RfdWlkCisgICAgICAgIGdpZCA9IHN0YXQuc3RfZ2lkCisgICAgICAgIGZvciB2YWx1ZSBpbiAoLTEuMCwgLTFqLCBkZWNpbWFsLkRlY2ltYWwoLTEpLCBmcmFjdGlvbnMuRnJhY3Rpb24oLTIsIDIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MuY2hvd24sIHN1cHBvcnQuVEVTVEZOLCB2YWx1ZSwgZ2lkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHVpZCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCB1aWQsIGdpZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCAtMSwgLTEpKQorCiAgICAgZGVmIHRlc3RfZXhpc3Rfb2tfc19pc2dpZF9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdkaXIxJykKICAgICAgICAgU19JU0dJRCA9IHN0YXQuU19JU0dJRApAQCAtMTEzMywyNyArMTE3MywyNyBAQAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBXaW4zMkVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW5hbWUsIHN1cHBvcnQuVEVTVEZOLCBzdXBwb3J0LlRFU1RGTisiLmJhayIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnJlbmFtZSwgc3VwcG9ydC5URVNURk4sIHN1cHBvcnQuVEVTVEZOKyIuYmFrIikKIAogICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfY2hkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaGRpciwgc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3V0aW1lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnV0aW1lLCBzdXBwb3J0LlRFU1RGTiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MudXRpbWUsIHN1cHBvcnQuVEVTVEZOLCBOb25lKQogCiAgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2htb2QsIHN1cHBvcnQuVEVTVEZOLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaG1vZCwgc3VwcG9ydC5URVNURk4sIDApCiAKIGNsYXNzIFRlc3RJbnZhbGlkRkQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNpbmdsZXMgPSBbImZjaGRpciIsICJkdXAiLCAiZmRvcGVuIiwgImZkYXRhc3luYyIsICJmc3RhdCIsCkBAIC0xMjc4LDQxICsxMzE4LDU3IEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXR1aWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0dWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHVpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHVpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0dWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0Z2lkKCknKQogICAgIGRlZiB0ZXN0X3NldGdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0Z2lkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0Z2lkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldGV1aWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0ZXVpZCgpJykKICAgICBkZWYgdGVzdF9zZXRldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGV1aWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRldWlkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRldWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRlZ2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldGVnaWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0ZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0ZWdpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGVnaWQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGVnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQogICAgIGRlZiB0ZXN0X3NldHJldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAxPDwzMiwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDE8PDMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQorICAgIGRlZiB0ZXN0X3NldHJldWlkX25lZzEoc2VsZik6CisgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZXVpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZWdpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZWdpZCgpJykKICAgICBkZWYgdGVzdF9zZXRyZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDE8PDMyLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMTw8MzIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0cmVnaWQoKScpCisgICAgZGVmIHRlc3Rfc2V0cmVnaWRfbmVnMShzZWxmKToKKyAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKKyAgICAgICAgIyBhbHRlcmluZyB0aGUgdGVzdCBydW5uZXIncyBwcm9jZXNzIHN0YXRlIChpc3N1ZTgwNDUpLgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgb3Msc3lzO29zLnNldHJlZ2lkKC0xLC0xKTtzeXMuZXhpdCgwKSddKQorCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiUG9zaXggc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgUGVwMzgzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE1MDIsNiArMTU1OCw1MiBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgV2luMzJMaXN0ZGlyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgbGlzdGRpciBvbiBXaW5kb3dzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIGRpcl9uYW1lID0gJ1NVQiVkJyAlIGkKKyAgICAgICAgICAgIGRpcl9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBkaXJfbmFtZSkKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9ICdGSUxFJWQnICUgaQorICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBmaWxlX25hbWUpCisgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJfcGF0aCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJJJ20gJXMgYW5kIHByb3VkIG9mIGl0LiBCbGFtZSB0ZXN0X29zLlxuIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocy5leHRlbmQoW2Rpcl9uYW1lLCBmaWxlX25hbWVdKQorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMuc29ydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9saXN0ZGlyX25vX2V4dGVuZGVkX3BhdGgoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2hlbiB0aGUgcGF0aCBpcyBub3QgYW4gImV4dGVuZGVkIiBwYXRoLiIiIgorICAgICAgICAjIHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihzdXBwb3J0LlRFU1RGTikpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKG9zLmZzZW5jb2RlKHN1cHBvcnQuVEVTVEZOKSkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisgICAgZGVmIHRlc3RfbGlzdGRpcl9leHRlbmRlZF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdoZW4gdGhlIHBhdGggc3RhcnRzIHdpdGggJ1xcXFw/XFwnLiIiIgorICAgICAgICAjIFNlZTogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTI0Nyh2PXZzLjg1KS5hc3B4I21heHBhdGgKKyAgICAgICAgIyB1bmljb2RlCisgICAgICAgIHBhdGggPSAnXFxcXD9cXCcgKyBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBwYXRoID0gYidcXFxcP1xcJyArIG9zLmZzZW5jb2RlKG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluawogY2xhc3MgV2luMzJTeW1saW5rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGZpbGVsaW5rID0gJ2ZpbGVsaW5rdGVzdCcKQEAgLTIxNjYsNiArMjI2OCwxOTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKK2NsYXNzIE9TRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBTdHIoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcyA9IFtdCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMgPSBbXQorICAgICAgICBpZiBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlY29kZWQgPSBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVjb2RlZCA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKGRlY29kZWQpCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKFN0cihkZWNvZGVkKSkKKyAgICAgICAgaWYgc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVkID0gc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kZWQgPSBvcy5mc2VuY29kZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMuYXBwZW5kKGVuY29kZWQpCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzLmFwcGVuZChtZW1vcnl2aWV3KGVuY29kZWQpKQorCisgICAgICAgIHNlbGYuZmlsZW5hbWVzID0gc2VsZi5ieXRlc19maWxlbmFtZXMgKyBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzCisKKyAgICBkZWYgdGVzdF9vc2Vycm9yX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmdW5jcyA9IFsKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2hkaXIsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2htb2QsIDBvNzc3KSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubHN0YXQsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Mub3Blbiwgb3MuT19SRE9OTFkpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5ybWRpciwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5zdGF0LCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnVubGluaywpLAorICAgICAgICBdCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlbmFtZSwgYiJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlcGxhY2UsIGIiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlbmFtZSwgImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTY0MTQ6IERvbid0IHRlc3QgdW5kZWNvZGFibGUgbmFtZXMgd2l0aCBsaXN0ZGlyKCkKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugb2YgYSBXaW5kb3dzIGJ1Zy4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBXaXRoIHRoZSBBTlNJIGNvZGUgcGFnZSA5MzIsIG9zLmxpc3RkaXIoYidceGU3JykgcmV0dXJuIGFuCisgICAgICAgICAgICAgICAgIyBlbXB0eSBsaXN0IChpbnN0ZWFkIG9mIGZhaWxpbmcpLCB3aGVyZWFzIG9zLmxpc3RkaXIoYidceGZmJykKKyAgICAgICAgICAgICAgICAjIHJhaXNlcyBhIEZpbGVOb3RGb3VuZEVycm9yLiBJdCBsb29rcyBsaWtlIGEgV2luZG93cyBidWc6CisgICAgICAgICAgICAgICAgIyBiJ1x4ZTcnIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgRmluZEZpcnN0RmlsZUEoYidceGU3JykKKyAgICAgICAgICAgICAgICAjIGZhaWxzIHdpdGggRVJST1JfRklMRV9OT1RfRk9VTkQgKDIpLCBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgIyBFUlJPUl9QQVRIX05PVF9GT1VORCAoMykuCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpc3RkaXIsKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdGRpciwpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVuYW1lLCAiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hvd24iKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaG93biIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInRydW5jYXRlIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy50cnVuY2F0ZSwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaGZsYWdzLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2hmbGFncywgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaHJvb3QiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNocm9vdCwpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGluayIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmJ5dGVzX2ZpbGVuYW1lcywgb3MubGluaywgYiJkc3QiKSkKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpbmssICJkc3QiKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGluaywgImRzdCIpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGlzdHhhdHRyIik6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdHhhdHRyLCksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5nZXR4YXR0ciwgInVzZXIudGVzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Muc2V0eGF0dHIsICJ1c2VyLnRlc3QiLCBiJ3VzZXInKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlbW92ZXhhdHRyLCAidXNlci50ZXN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2htb2QsIDBvNzc3KSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInJlYWRsaW5rIik6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lcywgZnVuYywgKmZ1bmNfYXJncyBpbiBmdW5jczoKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1bmMobmFtZSwgKmZ1bmNfYXJncykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLmZpbGVuYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHRocm93biBieSB7fSIuZm9ybWF0KGZ1bmMpKQorCitjbGFzcyBDUFVDb3VudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jcHVfY291bnQoc2VsZik6CisgICAgICAgIGNwdXMgPSBvcy5jcHVfY291bnQoKQorICAgICAgICBpZiBjcHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNwdXMsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjcHVzLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIENQVXMiKQorCisKK2NsYXNzIEZESW5oZXJpdGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X2dldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpCisgICAgICAgIGZsYWdzICY9IH5mY250bC5GRF9DTE9FWEVDCisgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCkKKworICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAncGlwZScpLCAibmVlZCBvcy5waXBlKCkiKQorICAgIGRlZiB0ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIHJmZCwgd2ZkID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcmZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHdmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUocmZkKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHdmZCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZHVwKHNlbGYpOgorICAgICAgICBmZDEgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDEpCisKKyAgICAgICAgZmQyID0gb3MuZHVwKGZkMSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMiksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2R1cDInKSwgIm5lZWQgb3MuZHVwMigpIikKKyAgICBkZWYgdGVzdF9kdXAyKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorCisgICAgICAgICMgaW5oZXJpdGFibGUgYnkgZGVmYXVsdAorICAgICAgICBmZDIgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQyKSwgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMikKKworICAgICAgICAjIGZvcmNlIG5vbi1pbmhlcml0YWJsZQorICAgICAgICBmZDMgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQzLCBpbmhlcml0YWJsZT1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMyksIEZhbHNlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ29wZW5wdHknKSwgIm5lZWQgb3Mub3BlbnB0eSgpIikKKyAgICBkZWYgdGVzdF9vcGVucHR5KHNlbGYpOgorICAgICAgICBtYXN0ZXJfZmQsIHNsYXZlX2ZkID0gb3Mub3BlbnB0eSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbWFzdGVyX2ZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHNsYXZlX2ZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoc2xhdmVfZmQpLCBGYWxzZSkKKworCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKQEAgLTIxODMsNiArMjQ3Niw3IEBACiAgICAgICAgIFBvc2l4VWlkR2lkVGVzdHMsCiAgICAgICAgIFBlcDM4M1Rlc3RzLAogICAgICAgICBXaW4zMktpbGxUZXN0cywKKyAgICAgICAgV2luMzJMaXN0ZGlyVGVzdHMsCiAgICAgICAgIFdpbjMyU3ltbGlua1Rlc3RzLAogICAgICAgICBOb25Mb2NhbFN5bWxpbmtUZXN0cywKICAgICAgICAgRlNFbmNvZGluZ1Rlc3RzLApAQCAtMjE5NSw3ICsyNDg5LDEwIEBACiAgICAgICAgIEV4dGVuZGVkQXR0cmlidXRlVGVzdHMsCiAgICAgICAgIFdpbjMyRGVwcmVjYXRlZEJ5dGVzQVBJLAogICAgICAgICBUZXJtc2l6ZVRlc3RzLAorICAgICAgICBPU0Vycm9yVGVzdHMsCiAgICAgICAgIFJlbW92ZURpcnNUZXN0cywKKyAgICAgICAgQ1BVQ291bnRUZXN0cywKKyAgICAgICAgRkRJbmhlcml0YW5jZVRlc3RzLAogICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkgYi9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CmluZGV4IDM5MDhhMDUuLmM5ZTJhMjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgIGRlZiBwbGF5X3NvdW5kX2ZpbGUoc2VsZiwgZGF0YSwgcmF0ZSwgc3NpemUsIG5jaGFubmVscyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCkBAIC0xOTAsNyArMTkwLDcgQEAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CiAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgIGV4Y2VwdCAob3NzYXVkaW9kZXYuZXJyb3IsIElPRXJyb3IpIGFzIG1zZzoKKyAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBPU0Vycm9yKSBhcyBtc2c6CiAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmMDg1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3BhdGhsaWIucHkKQEAgLTAsMCArMSwxNjc2IEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBwYXRobGliCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitURVNURk4gPSBzdXBwb3J0LlRFU1RGTgorCit0cnk6CisgICAgaW1wb3J0IGdycCwgcHdkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3JwID0gcHdkID0gTm9uZQorCisKK2NsYXNzIF9CYXNlRmxhdm91clRlc3Qob2JqZWN0KToKKworICAgIGRlZiBfY2hlY2tfcGFyc2VfcGFydHMoc2VsZiwgYXJnLCBleHBlY3RlZCk6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIucGFyc2VfcGFydHMKKyAgICAgICAgc2VwID0gc2VsZi5mbGF2b3VyLnNlcAorICAgICAgICBhbHRzZXAgPSBzZWxmLmZsYXZvdXIuYWx0c2VwCisgICAgICAgIGFjdHVhbCA9IGYoW3gucmVwbGFjZSgnLycsIHNlcCkgZm9yIHggaW4gYXJnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBpZiBhbHRzZXA6CisgICAgICAgICAgICBhY3R1YWwgPSBmKFt4LnJlcGxhY2UoJy8nLCBhbHRzZXApIGZvciB4IGluIGFyZ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0c19jb21tb24oc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgc2VwID0gc2VsZi5mbGF2b3VyLnNlcAorICAgICAgICAjIFVuYW5jaG9yZWQgcGFydHMKKyAgICAgICAgY2hlY2soW10sICAgICAgICAgICAgICAgICAgICgnJywgJycsIFtdKSkKKyAgICAgICAgY2hlY2soWydhJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgY2hlY2soWydhLyddLCAgICAgICAgICAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2InXSwgICAgICAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICAjIEV4cGFuc2lvbgorICAgICAgICBjaGVjayhbJ2EvYiddLCAgICAgICAgICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYS9iLyddLCAgICAgICAgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2IvYycsICdkJ10sICAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBDb2xsYXBzaW5nIGFuZCBzdHJpcHBpbmcgZXhjZXNzIHNsYXNoZXMKKyAgICAgICAgY2hlY2soWydhJywgJ2IvL2MnLCAnZCddLCAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2IvYy8nLCAnZCddLCAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBFbGltaW5hdGluZyBzdGFuZGFsb25lIGRvdHMKKyAgICAgICAgY2hlY2soWycuJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFtdKSkKKyAgICAgICAgY2hlY2soWycuJywgJy4nLCAnYiddLCAgICAgICgnJywgJycsIFsnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy4nLCAnYiddLCAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnLicsICcuJ10sICAgICAgKCcnLCAnJywgWydhJ10pKQorICAgICAgICAjIFRoZSBmaXJzdCBwYXJ0IGlzIGFuY2hvcmVkCisgICAgICAgIGNoZWNrKFsnL2EvYiddLCAgICAgICAgICAgICAoJycsIHNlcCwgW3NlcCwgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvYScsICdiJ10sICAgICAgICAgICgnJywgc2VwLCBbc2VwLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy9hLycsICdiJ10sICAgICAgICAgKCcnLCBzZXAsIFtzZXAsICdhJywgJ2InXSkpCisgICAgICAgICMgSWdub3JpbmcgcGFydHMgYmVmb3JlIGFuIGFuY2hvcmVkIHBhcnQKKyAgICAgICAgY2hlY2soWydhJywgJy9iJywgJ2MnXSwgICAgICgnJywgc2VwLCBbc2VwLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnL2InLCAnL2MnXSwgICAgKCcnLCBzZXAsIFtzZXAsICdjJ10pKQorCisKK2NsYXNzIFBvc2l4Rmxhdm91clRlc3QoX0Jhc2VGbGF2b3VyVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGZsYXZvdXIgPSBwYXRobGliLl9wb3NpeF9mbGF2b3VyCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19wYXJzZV9wYXJ0cworICAgICAgICAjIENvbGxhcHNpbmcgb2YgZXhjZXNzIGxlYWRpbmcgc2xhc2hlcywgZXhjZXB0IGZvciB0aGUgZG91YmxlLXNsYXNoCisgICAgICAgICMgc3BlY2lhbCBjYXNlLgorICAgICAgICBjaGVjayhbJy8vYScsICdiJ10sICAgICAgICAgICAgICgnJywgJy8vJywgWycvLycsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnLy8vYScsICdiJ10sICAgICAgICAgICAgKCcnLCAnLycsIFsnLycsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnLy8vL2EnLCAnYiddLCAgICAgICAgICAgKCcnLCAnLycsIFsnLycsICdhJywgJ2InXSkpCisgICAgICAgICMgUGF0aHMgd2hpY2ggbG9vayBsaWtlIE5UIHBhdGhzIGFyZW4ndCB0cmVhdGVkIHNwZWNpYWxseQorICAgICAgICBjaGVjayhbJ2M6YSddLCAgICAgICAgICAgICAgICAgICgnJywgJycsIFsnYzphJ10pKQorICAgICAgICBjaGVjayhbJ2M6XFxhJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFsnYzpcXGEnXSkpCisgICAgICAgIGNoZWNrKFsnXFxhJ10sICAgICAgICAgICAgICAgICAgKCcnLCAnJywgWydcXGEnXSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHJvb3Qoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIuc3BsaXRyb290CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignJyksICgnJywgJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhJyksICgnJywgJycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYS9iJyksICgnJywgJycsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhL2IvJyksICgnJywgJycsICdhL2IvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignL2EnKSwgKCcnLCAnLycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignL2EvYicpLCAoJycsICcvJywgJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hL2IvJyksICgnJywgJy8nLCAnYS9iLycpKQorICAgICAgICAjIFRoZSByb290IGlzIGNvbGxhcHNlZCB3aGVuIHRoZXJlIGFyZSByZWR1bmRhbnQgc2xhc2hlcworICAgICAgICAjIGV4Y2VwdCB3aGVuIHRoZXJlIGFyZSBleGFjdGx5IHR3byBsZWFkaW5nIHNsYXNoZXMsIHdoaWNoCisgICAgICAgICMgaXMgYSBzcGVjaWFsIGNhc2UgaW4gUE9TSVguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignLy9hJyksICgnJywgJy8vJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvLy9hJyksICgnJywgJy8nLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy8vL2EvYicpLCAoJycsICcvJywgJ2EvYicpKQorICAgICAgICAjIFBhdGhzIHdoaWNoIGxvb2sgbGlrZSBOVCBwYXRocyBhcmVuJ3QgdHJlYXRlZCBzcGVjaWFsbHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOi9hL2InKSwgKCcnLCAnJywgJ2M6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcL2EvYicpLCAoJycsICcnLCAnXFwvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxhXFxiJyksICgnJywgJycsICdcXGFcXGInKSkKKworCitjbGFzcyBOVEZsYXZvdXJUZXN0KF9CYXNlRmxhdm91clRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmbGF2b3VyID0gcGF0aGxpYi5fd2luZG93c19mbGF2b3VyCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19wYXJzZV9wYXJ0cworICAgICAgICAjIEZpcnN0IHBhcnQgaXMgYW5jaG9yZWQKKyAgICAgICAgY2hlY2soWydjOiddLCAgICAgICAgICAgICAgICAgICAoJ2M6JywgJycsIFsnYzonXSkpCisgICAgICAgIGNoZWNrKFsnYzpcXCddLCAgICAgICAgICAgICAgICAgKCdjOicsICdcXCcsIFsnYzpcXCddKSkKKyAgICAgICAgY2hlY2soWydcXCddLCAgICAgICAgICAgICAgICAgICAoJycsICdcXCcsIFsnXFwnXSkpCisgICAgICAgIGNoZWNrKFsnYzphJ10sICAgICAgICAgICAgICAgICAgKCdjOicsICcnLCBbJ2M6JywgJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYzpcXGEnXSwgICAgICAgICAgICAgICAgKCdjOicsICdcXCcsIFsnYzpcXCcsICdhJ10pKQorICAgICAgICBjaGVjayhbJ1xcYSddLCAgICAgICAgICAgICAgICAgICgnJywgJ1xcJywgWydcXCcsICdhJ10pKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBjaGVjayhbJ1xcXFxhXFxiJ10sICAgICAgICAgICAgICgnXFxcXGFcXGInLCAnXFwnLCBbJ1xcXFxhXFxiXFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFxcXGFcXGJcXCddLCAgICAgICAgICAgKCdcXFxcYVxcYicsICdcXCcsIFsnXFxcXGFcXGJcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcYVxcYlxcYyddLCAgICAgICAgICAoJ1xcXFxhXFxiJywgJ1xcJywgWydcXFxcYVxcYlxcJywgJ2MnXSkpCisgICAgICAgICMgU2Vjb25kIHBhcnQgaXMgYW5jaG9yZWQsIHNvIHRoYXQgdGhlIGZpcnN0IHBhcnQgaXMgaWdub3JlZAorICAgICAgICBjaGVjayhbJ2EnLCAnWjpiJywgJ2MnXSwgICAgICAgICgnWjonLCAnJywgWydaOicsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdaOlxcYicsICdjJ10sICAgICAgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdcXGInLCAnYyddLCAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJywgJ2InLCAnYyddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJ1xcXFxiXFxjJywgJ2QnXSwgICAoJ1xcXFxiXFxjJywgJ1xcJywgWydcXFxcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgQ29sbGFwc2luZyBhbmQgc3RyaXBwaW5nIGV4Y2VzcyBzbGFzaGVzCisgICAgICAgIGNoZWNrKFsnYScsICdaOlxcXFxiXFxcXGNcXCcsICdkXFwnXSwgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJ1xcXFxiXFxjXFxcXCcsICdkJ10sICgnXFxcXGJcXGMnLCAnXFwnLCBbJ1xcXFxiXFxjXFwnLCAnZCddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBwYXRocworICAgICAgICBjaGVjayhbJ1xcXFw/XFxjOlxcJ10sICAgICAgICAgICgnXFxcXD9cXGM6JywgJ1xcJywgWydcXFxcP1xcYzpcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcP1xcYzpcXGEnXSwgICAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnLCAnYSddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBVTkMgcGF0aHMgKGZvcm1hdCBpcyAiXFw/XFVOQ1xzZXJ2ZXJcc2hhcmUiKQorICAgICAgICBjaGVjayhbJ1xcXFw/XFxVTkNcXGJcXGMnXSwgICAgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJ10pKQorICAgICAgICBjaGVjayhbJ1xcXFw/XFxVTkNcXGJcXGNcXGQnXSwgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJywgJ2QnXSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHJvb3Qoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIuc3BsaXRyb290CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignJyksICgnJywgJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhJyksICgnJywgJycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYVxcYicpLCAoJycsICcnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYScpLCAoJycsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxhXFxiJyksICgnJywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOmFcXGInKSwgKCdjOicsICcnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxhXFxiJyksICgnYzonLCAnXFwnLCAnYVxcYicpKQorICAgICAgICAjIFJlZHVuZGFudCBzbGFzaGVzIGluIHRoZSByb290IGFyZSBjb2xsYXBzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYScpLCAoJycsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXFxcYS9iJyksICgnJywgJ1xcJywgJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxcXGEnKSwgKCdjOicsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzpcXFxcXFxhL2InKSwgKCdjOicsICdcXCcsICdhL2InKSkKKyAgICAgICAgIyBWYWxpZCBVTkMgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYicpLCAoJ1xcXFxhXFxiJywgJ1xcJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhXFxiXFwnKSwgKCdcXFxcYVxcYicsICdcXCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYlxcY1xcZCcpLCAoJ1xcXFxhXFxiJywgJ1xcJywgJ2NcXGQnKSkKKyAgICAgICAgIyBUaGVzZSBhcmUgbm9uLVVOQyBwYXRocyAoYWNjb3JkaW5nIHRvIG50cGF0aC5weSBhbmQgdGVzdF9udHBhdGgpCisgICAgICAgICMgSG93ZXZlciwgY29tbWFuZC5jb20gc2F5cyBzdWNoIHBhdGhzIGFyZSBpbnZhbGlkLCBzbyBpdCdzCisgICAgICAgICMgZGlmZmljdWx0IHRvIGtub3cgd2hhdCB0aGUgcmlnaHQgc2VtYW50aWNzIGFyZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxcXGFcXGInKSwgKCcnLCAnXFwnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhJyksICgnJywgJ1xcJywgJ2EnKSkKKworCisjCisjIFRlc3RzIGZvciB0aGUgcHVyZSBjbGFzc2VzCisjCisKK2NsYXNzIF9CYXNlUHVyZVBhdGhUZXN0KG9iamVjdCk6CisKKyAgICAjIGtleXMgYXJlIGNhbm9uaWNhbCBwYXRocywgdmFsdWVzIGFyZSBsaXN0IG9mIHR1cGxlcyBvZiBhcmd1bWVudHMKKyAgICAjIHN1cHBvc2VkIHRvIHByb2R1Y2UgZXF1YWwgcGF0aHMKKyAgICBlcXVpdmFsZW5jZXMgPSB7CisgICAgICAgICdhL2InOiBbCisgICAgICAgICAgICAoJ2EnLCAnYicpLCAoJ2EvJywgJ2InKSwgKCdhJywgJ2IvJyksICgnYS8nLCAnYi8nKSwKKyAgICAgICAgICAgICgnYS9iLycsKSwgKCdhLy9iJywpLCAoJ2EvL2IvLycsKSwKKyAgICAgICAgICAgICMgZW1wdHkgY29tcG9uZW50cyBnZXQgcmVtb3ZlZAorICAgICAgICAgICAgKCcnLCAnYScsICdiJyksICgnYScsICcnLCAnYicpLCAoJ2EnLCAnYicsICcnKSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICcvYi9jL2QnOiBbCisgICAgICAgICAgICAoJ2EnLCAnL2IvYycsICdkJyksICgnYScsICcvLy9iLy9jJywgJ2QvJyksCisgICAgICAgICAgICAoJy9hJywgJy9iL2MnLCAnZCcpLAorICAgICAgICAgICAgIyBlbXB0eSBjb21wb25lbnRzIGdldCByZW1vdmVkCisgICAgICAgICAgICAoJy8nLCAnYicsICcnLCAnYy9kJyksICgnLycsICcnLCAnYi9jL2QnKSwgKCcnLCAnL2IvYy9kJyksCisgICAgICAgICAgICBdLAorICAgIH0KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhJykKKyAgICAgICAgc2VsZi5mbGF2b3VyID0gcC5fZmxhdm91cgorICAgICAgICBzZWxmLnNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgc2VsZi5hbHRzZXAgPSBzZWxmLmZsYXZvdXIuYWx0c2VwCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLCBQKQorICAgICAgICBQKCdhJywgJ2InLCAnYycpCisgICAgICAgIFAoJy9hJywgJ2InLCAnYycpCisgICAgICAgIFAoJ2EvYi9jJykKKyAgICAgICAgUCgnL2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKFAoJ2EnKSksIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKFAoJ2EnKSwgJ2InKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJyksIFAoJ2InKSksIFAoJ2EvYicpKQorCisgICAgZGVmIHRlc3Rfam9pbl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHBwKSwgdHlwZShwKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJywgJ2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aChQKCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIHRlc3RfZGl2X2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHBwID0gcCAvICdjJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocHApLCB0eXBlKHApKQorICAgICAgICBwcCA9IHAgLyAnYy9kJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcCAvICdjJyAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gJ2MnIC8gcCAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdjL2EvYi9kJykpCisgICAgICAgIHBwID0gcCAvIFAoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBwcCA9IHAvICcvYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworICAgIGRlZiBfY2hlY2tfc3RyKHNlbGYsIGV4cGVjdGVkLCBhcmdzKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgZXhwZWN0ZWQucmVwbGFjZSgnLycsIHNlbGYuc2VwKSkKKworICAgIGRlZiB0ZXN0X3N0cl9jb21tb24oc2VsZik6CisgICAgICAgICMgQ2Fub25pY2FsaXplZCBwYXRocyByb3VuZHRyaXAKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19zdHIocGF0aHN0ciwgKHBhdGhzdHIsKSkKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBlbXB0eSBwYXRoCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cignLicsICgnJywpKQorICAgICAgICAjIE90aGVyIHRlc3RzIGZvciBzdHIoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfcG9zaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAocGF0aHN0cikuYXNfcG9zaXgoKSwgcGF0aHN0cikKKyAgICAgICAgIyBPdGhlciB0ZXN0cyBmb3IgYXNfcG9zaXgoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfY29tbW9uKHNlbGYpOgorICAgICAgICBzZXAgPSBvcy5mc2VuY29kZShzZWxmLnNlcCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoUCgnYS9iJykpLCBiJ2EnICsgc2VwICsgYidiJykKKworICAgIGRlZiB0ZXN0X2FzX3VyaV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgnYScpLmFzX3VyaSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCkuYXNfdXJpKCkKKworICAgIGRlZiB0ZXN0X3JlcHJfY29tbW9uKHNlbGYpOgorICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscyhwYXRoc3RyKQorICAgICAgICAgICAgY2xzbmFtZSA9IHAuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICByID0gcmVwcihwKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIGlzIGluIHRoZSBmb3JtIENsYXNzTmFtZSgiZm9yd2FyZC1zbGFzaGVzIHBhdGgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aChjbHNuYW1lICsgJygnKSwgcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKCcpJyksIHIpCisgICAgICAgICAgICBpbm5lciA9IHJbbGVuKGNsc25hbWUpICsgMSA6IC0xXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGlubmVyKSwgcC5hc19wb3NpeCgpKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIHJvdW5kdHJpcHMKKyAgICAgICAgICAgIHEgPSBldmFsKHIsIHBhdGhsaWIuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHEuX19jbGFzc19fLCBwLl9fY2xhc3NfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihxKSwgcikKKworICAgIGRlZiB0ZXN0X2VxX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLCBQKCdhJywgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCcvYS9iJyksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksICIiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcuJykKKyAgICAgICAgIyBTaW1wbGUgcmVsYXRpdmUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhL2IucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi9weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCdiLnB5JykpCisgICAgICAgICMgV2lsY2FyZCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdiLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2EvYi5weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5YycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi4vcHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhYi9jLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9kL2FiL2MucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9kYWIvYy5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYWIvYy5weS9kJykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCBhYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJy9hLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYWIucHknKS5tYXRjaCgnL2EvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hL2IvYy5weScpLm1hdGNoKCcvYS8qLnB5JykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgT3JkZXJpbmcgaXMgdHVwbGUtYWxpa2UKKyAgICAgICAgZGVmIGFzc2VydExlc3MoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihiLCBhKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgYSA9IFAoJ2EnKQorICAgICAgICBiID0gUCgnYS9iJykKKyAgICAgICAgYyA9IFAoJ2FiYycpCisgICAgICAgIGQgPSBQKCdiJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBhID0gUCgnL2EnKQorICAgICAgICBiID0gUCgnL2EvYicpCisgICAgICAgIGMgPSBQKCcvYWJjJykKKyAgICAgICAgZCA9IFAoJy9iJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFAoKSA8IHt9CisKKyAgICBkZWYgdGVzdF9wYXJ0c19jb21tb24oc2VsZik6CisgICAgICAgICMgYHBhcnRzYCByZXR1cm5zIGEgdHVwbGUKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdhJywgJ2InKSkKKyAgICAgICAgIyBUaGUgb2JqZWN0IGdldHMgcmV1c2VkCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGFydHMsIHAucGFydHMpCisgICAgICAgICMgV2hlbiB0aGUgcGF0aCBpcyBhYnNvbHV0ZSwgdGhlIGFuY2hvciBpcyBhIHNlcGFyYXRlIHBhcnQKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKHNlcCwgJ2EnLCAnYicpKQorCisgICAgZGVmIHRlc3RfZXF1aXZhbGVuY2VzKHNlbGYpOgorICAgICAgICBmb3IgaywgdHVwbGVzIGluIHNlbGYuZXF1aXZhbGVuY2VzLml0ZW1zKCk6CisgICAgICAgICAgICBjYW5vbiA9IGsucmVwbGFjZSgnLycsIHNlbGYuc2VwKQorICAgICAgICAgICAgcG9zaXggPSBrLnJlcGxhY2Uoc2VsZi5zZXAsICcvJykKKyAgICAgICAgICAgIGlmIGNhbm9uICE9IHBvc2l4OgorICAgICAgICAgICAgICAgIHR1cGxlcyA9IHR1cGxlcyArIFsKKyAgICAgICAgICAgICAgICAgICAgdHVwbGUocGFydC5yZXBsYWNlKCcvJywgc2VsZi5zZXApIGZvciBwYXJ0IGluIHQpCisgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHR1cGxlcworICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgdHVwbGVzLmFwcGVuZCgocG9zaXgsICkpCisgICAgICAgICAgICBwY2Fub24gPSBzZWxmLmNscyhjYW5vbikKKyAgICAgICAgICAgIGZvciB0IGluIHR1cGxlczoKKyAgICAgICAgICAgICAgICBwID0gc2VsZi5jbHMoKnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBwY2Fub24sICJmYWlsZWQgd2l0aCBhcmdzIHt9Ii5mb3JtYXQodCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHApLCBoYXNoKHBjYW5vbikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIGNhbm9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hc19wb3NpeCgpLCBwb3NpeCkKKworICAgIGRlZiB0ZXN0X3BhcmVudF9jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgpKQorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIHAgPSBQKCcvYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLycpKQorCisgICAgZGVmIHRlc3RfcGFyZW50c19jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzJdLCBQKCcuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnYS9iJyksIFAoJ2EnKSwgUCgnLicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclstMV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclszXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwYXJbMF0gPSBwCisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgcCA9IFAoJy9hL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMl0sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCcvYS9iJyksIFAoJy9hJyksIFAoJy8nKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbM10KKworICAgIGRlZiB0ZXN0X2RyaXZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuZHJpdmUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5kcml2ZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuZHJpdmUsICcnKQorCisgICAgZGVmIHRlc3Rfcm9vdF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5yb290LCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnJvb3QsIHNlcCkKKworICAgIGRlZiB0ZXN0X2FuY2hvcl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLmFuY2hvciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuYW5jaG9yLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuYW5jaG9yLCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLmFuY2hvciwgc2VwKQorCisgICAgZGVmIHRlc3RfbmFtZV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLm5hbWUsICdiLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5JykubmFtZSwgJ2IucHknKQorCisgICAgZGVmIHRlc3Rfc3VmZml4X2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuLicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGdyYycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlc19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisKKyAgICBkZWYgdGVzdF9zdGVtX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLnN0ZW0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3RlbSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3RlbSwgJy5oZ3JjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZy5yYycpLnN0ZW0sICcuaGcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpCisKKyAgICBkZWYgdGVzdF93aXRoX25hbWVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL0RvdCBlbmRpbmcuJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX25hbWUsICdkLnhtbCcpCisKKyAgICBkZWYgdGVzdF93aXRoX3N1ZmZpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX3N1ZmZpeCwgJy5neicpCisKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZV90b19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnJlbGF0aXZlX3RvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgpKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdhJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdhL2InKSksIFAoKSkKKyAgICAgICAgIyBXaXRoIHNldmVyYWwgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2EnLCAnYicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYS9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hJykpCisgICAgICAgIHAgPSBQKCcvYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8nKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnL2EnKSksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy9hL2InKSksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhJykpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL2EvYicpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVtcGVkID0gcGlja2xlLmR1bXBzKHAsIHByb3RvKQorICAgICAgICAgICAgcHAgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwcC5fX2NsYXNzX18sIHAuX19jbGFzc19fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChwcCksIGhhc2gocCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwcCksIHN0cihwKSkKKworCitjbGFzcyBQdXJlUG9zaXhQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aAorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnJvb3QsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvLy9hL2InKS5yb290LCAnLycpCisgICAgICAgICMgUE9TSVggc3BlY2lhbCBjYXNlIGZvciB0d28gbGVhZGluZyBzbGFzaGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5yb290LCAnLy8nKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCdBL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYScpLCBQKCcvLy9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EnKSwgUCgnLy9hJykpCisKKyAgICBkZWYgdGVzdF9hc191cmkoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5hc191cmkoKSwgJ2ZpbGU6Ly8vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLmMnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IlI2MnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYS9iJTI1JTIzYycpCisKKyAgICBkZWYgdGVzdF9hc191cmlfbm9uX2FzY2lpKHNlbGYpOgorICAgICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGVfZnJvbV9ieXRlcworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZnNlbmNvZGUoJ1x4ZTknKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiXFx4ZTkgY2Fubm90IGJlIGVuY29kZWQgdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2JceGU5JykuYXNfdXJpKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly8vYS9iJyArIHF1b3RlX2Zyb21fYnl0ZXMob3MuZnNlbmNvZGUoJ1x4ZTknKSkpCisKKyAgICBkZWYgdGVzdF9tYXRjaChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnQS5weScpLm1hdGNoKCdhLlBZJykpCisKKyAgICBkZWYgdGVzdF9pc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYicpLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9pc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZm9vL2JhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy9kZXYvY29uL1BSTi9OVUwnKS5pc19yZXNlcnZlZCgpKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvL2EnKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2EvYicpKQorICAgICAgICBwcCA9IFAoJy9hJykuam9pbnBhdGgoJy8vYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYycpKQorICAgICAgICBwcCA9IFAoJy8vYScpLmpvaW5wYXRoKCcvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgICMgQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGpvaW5wYXRoKCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvL2EnKQorICAgICAgICBwcCA9IHAgLyAnYicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9hL2InKSkKKyAgICAgICAgcHAgPSBQKCcvYScpIC8gJy8vYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9jJykpCisgICAgICAgIHBwID0gUCgnLy9hJykgLyAnL2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKworY2xhc3MgUHVyZVdpbmRvd3NQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoCisKKyAgICBlcXVpdmFsZW5jZXMgPSBfQmFzZVB1cmVQYXRoVGVzdC5lcXVpdmFsZW5jZXMuY29weSgpCisgICAgZXF1aXZhbGVuY2VzLnVwZGF0ZSh7CisgICAgICAgICdjOmEnOiBbICgnYzonLCAnYScpLCAoJ2M6JywgJ2EvJyksICgnLycsICdjOicsICdhJykgXSwKKyAgICAgICAgJ2M6L2EnOiBbCisgICAgICAgICAgICAoJ2M6LycsICdhJyksICgnYzonLCAnLycsICdhJyksICgnYzonLCAnL2EnKSwKKyAgICAgICAgICAgICgnL3onLCAnYzovJywgJ2EnKSwgKCcvL3gveScsICdjOi8nLCAnYScpLAorICAgICAgICAgICAgXSwKKyAgICAgICAgJy8vYS9iLyc6IFsgKCcvL2EvYicsKSBdLAorICAgICAgICAnLy9hL2IvYyc6IFsKKyAgICAgICAgICAgICgnLy9hL2InLCAnYycpLCAoJy8vYS9iLycsICdjJyksCisgICAgICAgICAgICBdLAorICAgIH0pCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ2FcXGJcXGMnKQorICAgICAgICBwID0gc2VsZi5jbHMoJ2M6L2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdjOlxcYVxcYlxcYycpCisgICAgICAgIHAgPSBzZWxmLmNscygnLy9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBwID0gc2VsZi5jbHMoJy8vYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFxjJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcvL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFxjXFxkJykKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLCBQKCdjOmEvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2Q6YS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYzphL2InKSwgUCgnYzovYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EvYicpLCBQKCdjOi9hL2InKSkKKyAgICAgICAgIyBDYXNlLWluc2Vuc2l0aXZpdHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL0InKSwgUCgnQS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnQzphL0InKSwgUCgnYzpBL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL1NvbWUvU0hBUkUvYS9CJyksIFAoJy8vc29tRS9zaGFyZS9BL2InKSkKKworICAgIGRlZiB0ZXN0X2FzX3VyaShzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCcvYS9iJykuYXNfdXJpKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIFAoJ2M6YS9iJykuYXNfdXJpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IuYycpLmFzX3VyaSgpLCAnZmlsZTovLy9jOi9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJSNjJykuYXNfdXJpKCksICdmaWxlOi8vL2M6L2EvYiUyNSUyM2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYlx4ZTknKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovYS9iJUMzJUE5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL3NvbWUvc2hhcmUvJykuYXNfdXJpKCksICdmaWxlOi8vc29tZS9zaGFyZS8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vc29tZS9zaGFyZS9hL2IuYycpLmFzX3VyaSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vc29tZS9zaGFyZS9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9zb21lL3NoYXJlL2EvYiUjY1x4ZTknKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL3NvbWUvc2hhcmUvYS9iJTI1JTIzYyVDMyVBOScpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIEFic29sdXRlIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJ2M6Ki5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnZDovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpICAjIHdyb25nIGRyaXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnYzoqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJ2M6LyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOioucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgICMgVU5DIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL3NvbWUvc2hhcmUvYS5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9zb21lL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL290aGVyL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL3NvbWUvc2hhcmUvYS9iLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdCLnB5JykubWF0Y2goJ2IuUFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2EvQi5QeScpLm1hdGNoKCdDOi9BLyoucFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vU29tZS9TaGFyZS9CLlB5JykubWF0Y2goJy8vc29tRS9zaGFyRS8qLnBZJykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIGRlZiBhc3NlcnRPcmRlcmVkRXF1YWwoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYiwgYSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOkEvYicpCisgICAgICAgIHEgPSBQKCdDOmEvQicpCisgICAgICAgIGFzc2VydE9yZGVyZWRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPiBxKQorICAgICAgICBwID0gUCgnLy9zb21lL1NoYXJlL0EvYicpCisgICAgICAgIHEgPSBQKCcvL1NvbWUvU0hBUkUvYS9CJykKKyAgICAgICAgYXNzZXJ0T3JkZXJlZEVxdWFsKHAsIHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA8IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA+IHEpCisKKyAgICBkZWYgdGVzdF9wYXJ0cyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOmEvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBwID0gUCgnYzovYS9iJykKKyAgICAgICAgcGFydHMgPSBwLnBhcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydHMsICgnYzpcXCcsICdhJywgJ2InKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ1xcXFxhXFxiXFwnLCAnYycsICdkJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnQoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudCwgUCgnejphL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHAgPSBQKCd6Oi9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ3o6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnejovYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6Oi8nKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLy9hL2InKSkKKworICAgIGRlZiB0ZXN0X3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnejonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCd6OmEnKSwgUCgnejonKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbMl0KKyAgICAgICAgcCA9IFAoJ3o6L2EvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6L2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJ3o6L2EnKSwgUCgnejovJyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzJdCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnLy9hL2IvYycpLCBQKCcvL2EvYicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclsyXQorCisgICAgZGVmIHRlc3RfZHJpdmUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5kcml2ZSwgJ1xcXFxhXFxiJykKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5yb290LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLnJvb3QsICdcXCcpCisKKyAgICBkZWYgdGVzdF9hbmNob3Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLmFuY2hvciwgJ2M6XFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5hbmNob3IsICdjOlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iLycpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorCisgICAgZGVmIHRlc3RfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5uYW1lLCAnYi5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykubmFtZSwgJ2InKQorCisgICAgZGVmIHRlc3Rfc3VmZml4KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlcyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZy5yYycpLnN1ZmZpeGVzLCBbJy5yYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4ZXMsIFtdKQorCisgICAgZGVmIHRlc3Rfc3RlbShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdGVtLCAnLmhncmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdGVtLCAnLmhnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykKKworICAgIGRlZiB0ZXN0X3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6YS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzphL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOicpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzovJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvL015L1NoYXJlJykud2l0aF9uYW1lLCAnZC54bWwnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9zdWZmaXgoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOmEvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzovYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2M6YS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOi9hL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcuJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvL015L1NoYXJlJykud2l0aF9zdWZmaXgsICcuZ3onKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfdG8oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzphL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzonKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzphJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOmEvYicpKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzphL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOmEvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9hJykpCisgICAgICAgIHAgPSBQKCdjOi9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzonKSksIFAoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6LycpKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi9hJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi9hL2InKSksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9hL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9hL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzphJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6LycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL2MvYScpKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBwID0gUCgnLy9hL2IvYy9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vYS9iJykpLCBQKCdjL2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vYS9iL2MnKSksIFAoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vYS9iL2MvZCcpKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy96L2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL2Evei9jJykpCisKKyAgICBkZWYgdGVzdF9pc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgICMgVW5kZXIgTlQsIG9ubHkgcGF0aHMgd2l0aCBib3RoIGEgZHJpdmUgYW5kIGEgcm9vdCBhcmUgYWJzb2x1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCkuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6JykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdjOmEnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6YS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgIyBVTkMgcGF0aHMgYXJlIGFic29sdXRlIGJ5IGRlZmluaXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYi9jJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iL2MvZCcpLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9pc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZm9vL2JhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnY29uJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdOVUwnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ05VTC50eHQnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbTEnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbTkuYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYmFyLmNvbTknKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2xwdDEnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2xwdDkuYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYmFyLmxwdDknKS5pc19yZXNlcnZlZCgpKQorICAgICAgICAjIE9ubHkgdGhlIGxhc3QgY29tcG9uZW50IG1hdHRlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYzovTlVML2Nvbi9iYXonKS5pc19yZXNlcnZlZCgpKQorICAgICAgICAjIFVOQyBwYXRocyBhcmUgbmV2ZXIgcmVzZXJ2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnLy9teS9zaGFyZS9udWwvY29uL2F1eCcpLmlzX3Jlc2VydmVkKCkpCisKKworY2xhc3MgUHVyZVBhdGhUZXN0KF9CYXNlUHVyZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QdXJlUGF0aAorCisgICAgZGVmIHRlc3RfY29uY3JldGVfY2xhc3Moc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwKSwKKyAgICAgICAgICAgIHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIHBhdGhsaWIuUHVyZVBvc2l4UGF0aCkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9mbGF2b3Vyc191bmVxdWFsKHNlbGYpOgorICAgICAgICBwID0gcGF0aGxpYi5QdXJlUG9zaXhQYXRoKCdhJykKKyAgICAgICAgcSA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLCBxKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZsYXZvdXJzX3Vub3JkZXJlZChzZWxmKToKKyAgICAgICAgcCA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aCgnYScpCisgICAgICAgIHEgPSBwYXRobGliLlB1cmVXaW5kb3dzUGF0aCgnYScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPCBxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPD0gcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwID4gcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwID49IHEKKworCisjCisjIFRlc3RzIGZvciB0aGUgY29uY3JldGUgY2xhc3NlcworIworCisjIE1ha2Ugc3VyZSBhbnkgc3ltYm9saWMgbGlua3MgaW4gdGhlIGJhc2UgdGVzdCBwYXRoIGFyZSByZXNvbHZlZAorQkFTRSA9IG9zLnBhdGgucmVhbHBhdGgoVEVTVEZOKQoram9pbiA9IGxhbWJkYSAqeDogb3MucGF0aC5qb2luKEJBU0UsICp4KQorcmVsX2pvaW4gPSBsYW1iZGEgKng6IG9zLnBhdGguam9pbihURVNURk4sICp4KQorCitkZWYgc3ltbGlua19za2lwX3JlYXNvbigpOgorICAgIGlmIG5vdCBwYXRobGliLnN1cHBvcnRzX3N5bWxpbmtzOgorICAgICAgICByZXR1cm4gIm5vIHN5c3RlbSBzdXBwb3J0IGZvciBzeW1saW5rcyIKKyAgICB0cnk6CisgICAgICAgIG9zLnN5bWxpbmsoX19maWxlX18sIEJBU0UpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuIHN0cihlKQorICAgIGVsc2U6CisgICAgICAgIHN1cHBvcnQudW5saW5rKEJBU0UpCisgICAgcmV0dXJuIE5vbmUKKworc3ltbGlua19za2lwX3JlYXNvbiA9IHN5bWxpbmtfc2tpcF9yZWFzb24oKQorCitvbmx5X250ID0gdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgIT0gJ250JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgYSBXaW5kb3dzLWNvbXBhdGlibGUgc3lzdGVtJykKK29ubHlfcG9zaXggPSB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyBhIFBPU0lYLWNvbXBhdGlibGUgc3lzdGVtJykKK3dpdGhfc3ltbGlua3MgPSB1bml0dGVzdC5za2lwSWYoc3ltbGlua19za2lwX3JlYXNvbiwgc3ltbGlua19za2lwX3JlYXNvbikKKworCitAb25seV9wb3NpeAorY2xhc3MgUG9zaXhQYXRoQXNQdXJlVGVzdChQdXJlUG9zaXhQYXRoVGVzdCk6CisgICAgY2xzID0gcGF0aGxpYi5Qb3NpeFBhdGgKKworQG9ubHlfbnQKK2NsYXNzIFdpbmRvd3NQYXRoQXNQdXJlVGVzdChQdXJlV2luZG93c1BhdGhUZXN0KToKKyAgICBjbHMgPSBwYXRobGliLldpbmRvd3NQYXRoCisKKworY2xhc3MgX0Jhc2VQYXRoVGVzdChvYmplY3QpOgorICAgICIiIlRlc3RzIGZvciB0aGUgRlMtYWNjZXNzaW5nIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgUGF0aCBjbGFzc2VzLiIiIgorCisgICAgIyAoQkFTRSkKKyAgICAjICB8CisgICAgIyAgfC0tIGRpckEvCisgICAgIyAgICAgICB8LS0gbGlua0MgLT4gIi4uL2RpckIiCisgICAgIyAgfC0tIGRpckIvCisgICAgIyAgfCAgICB8LS0gZmlsZUIKKyAgICAjICAgICAgIHwtLSBsaW5rRCAtPiAiLi4vZGlyQiIKKyAgICAjICB8LS0gZGlyQy8KKyAgICAjICB8ICAgIHwtLSBmaWxlQworICAgICMgIHwgICAgfC0tIGZpbGVECisgICAgIyAgfC0tIGZpbGVBCisgICAgIyAgfC0tIGxpbmtBIC0+ICJmaWxlQSIKKyAgICAjICB8LS0gbGlua0IgLT4gImRpckIiCisgICAgIworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihCQVNFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2h1dGlsLnJtdHJlZSwgQkFTRSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQScpKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJCJykpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oJ2RpckMnKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQycsICdkaXJEJykpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdmaWxlQScpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBBXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQicsICdmaWxlQicpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBCXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdmaWxlQycpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBDXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdkaXJEJywgJ2ZpbGVEJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIERcbiIpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzNzcyCisgICAgICAgICAgICAgICAgZGVmIGRpcmxpbmsoc3JjLCBkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QsIHRhcmdldF9pc19kaXJlY3Rvcnk9VHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVmIGRpcmxpbmsoc3JjLCBkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCisgICAgICAgICAgICAjIFJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgICAgICBvcy5zeW1saW5rKCdmaWxlQScsIGpvaW4oJ2xpbmtBJykpCisgICAgICAgICAgICBvcy5zeW1saW5rKCdub24tZXhpc3RpbmcnLCBqb2luKCdicm9rZW5MaW5rJykpCisgICAgICAgICAgICBkaXJsaW5rKCdkaXJCJywgam9pbignbGlua0InKSkKKyAgICAgICAgICAgIGRpcmxpbmsob3MucGF0aC5qb2luKCcuLicsICdkaXJCJyksIGpvaW4oJ2RpckEnLCAnbGlua0MnKSkKKyAgICAgICAgICAgICMgVGhpcyBvbmUgZ29lcyB1cHdhcmRzIGJ1dCBkb2Vzbid0IGNyZWF0ZSBhIGxvb3AKKyAgICAgICAgICAgIGRpcmxpbmsob3MucGF0aC5qb2luKCcuLicsICdkaXJCJyksIGpvaW4oJ2RpckInLCAnbGlua0QnKSkKKworICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIHBhdGhfYSwgcGF0aF9iKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguc2FtZWZpbGUoc3RyKHBhdGhfYSksIHN0cihwYXRoX2IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlciBhbmQgJXIgZG9uJ3QgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGhfYSwgcGF0aF9iKSkKKworICAgIGRlZiBhc3NlcnRGaWxlTm90Rm91bmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcikgYXMgY206CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKworICAgIGRlZiBfdGVzdF9jd2Qoc2VsZiwgcCk6CisgICAgICAgIHEgPSBzZWxmLmNscyhvcy5nZXRjd2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgc3RyKHEpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksIHR5cGUocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscy5jd2QoKQorICAgICAgICBzZWxmLl90ZXN0X2N3ZChwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgZW1wdHkgcGF0aCBwb2ludHMgdG8gJy4nCisgICAgICAgIHAgPSBzZWxmLmNscygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgb3Muc3RhdCgnLicpKQorCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIChwIC8gJ2RpckEnKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdmaWxlQScpLmV4aXN0cygpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnbGlua0EnKS5leGlzdHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnbGlua0InKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgKHAgLyAnZm9vJykuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy94eXp6eScpLmV4aXN0cygpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb21tb24oc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ2ZpbGVBJykub3BlbigncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uVGV4dElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJ0aGlzIGlzIGZpbGUgQVxuIikKKyAgICAgICAgd2l0aCAocCAvICdmaWxlQScpLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisgICAgICAgIHdpdGggKHAgLyAnZmlsZUEnKS5vcGVuKCdyYicsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBwYXRocyA9IHNldChpdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2RpckEnLCAnZGlyQicsICdkaXJDJywgJ2ZpbGVBJ10KKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBleHBlY3RlZCArPSBbJ2xpbmtBJywgJ2xpbmtCJywgJ2Jyb2tlbkxpbmsnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfaXRlcmRpcl9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIF9faXRlcl9fIG9uIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2xpbmtCJykKKyAgICAgICAgcGF0aHMgPSBzZXQocC5pdGVyZGlyKCkpCisgICAgICAgIGV4cGVjdGVkID0geyBQKEJBU0UsICdsaW5rQicsIHEpIGZvciBxIGluIFsnZmlsZUInLCAnbGlua0QnXSB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaXRlcmRpcl9ub2RpcihzZWxmKToKKyAgICAgICAgIyBfX2l0ZXJfXyBvbiBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICdmaWxlQScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBuZXh0KHAuaXRlcmRpcigpKQorICAgICAgICAjIEVOT0VOVCBvciBFSU5WQUwgdW5kZXIgV2luZG93cywgRU5PVERJUiBvdGhlcndpc2UKKyAgICAgICAgIyAoc2VlIGlzc3VlICMxMjgwMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9URElSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0VOVCwgZXJybm8uRUlOVkFMKSkKKworICAgIGRlZiB0ZXN0X2dsb2JfY29tbW9uKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrKGdsb2IsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGdsb2IpLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UpCisgICAgICAgIGl0ID0gcC5nbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgIF9jaGVjayhpdCwgWyJmaWxlQSJdKQorICAgICAgICBfY2hlY2socC5nbG9iKCJmaWxlQiIpLCBbXSkKKyAgICAgICAgX2NoZWNrKHAuZ2xvYigiZGlyKi9maWxlKiIpLCBbImRpckIvZmlsZUIiLCAiZGlyQy9maWxlQyJdKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKkEiKSwgWydkaXJBJywgJ2ZpbGVBJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQSIpLCBbJ2RpckEnLCAnZmlsZUEnLCAnbGlua0EnXSkKKyAgICAgICAgaWYgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipCLyoiKSwgWydkaXJCL2ZpbGVCJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQi8qIiksIFsnZGlyQi9maWxlQicsICdkaXJCL2xpbmtEJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rQi9maWxlQicsICdsaW5rQi9saW5rRCddKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKi9maWxlQiIpLCBbJ2RpckIvZmlsZUInXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIiovZmlsZUIiKSwgWydkaXJCL2ZpbGVCJywgJ2xpbmtCL2ZpbGVCJ10pCisKKyAgICBkZWYgdGVzdF9yZ2xvYl9jb21tb24oc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2soZ2xvYiwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZ2xvYiksIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLnJnbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgICMgWFhYIGNhbm5vdCB0ZXN0IGJlY2F1c2Ugb2Ygc3ltbGluayBsb29wcyBpbiB0aGUgdGVzdCBzZXR1cAorICAgICAgICAjX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiKi9maWxlQSIpLCBbIiJdKQorICAgICAgICAjX2NoZWNrKHAucmdsb2IoIiovZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJmaWxlQSIsICJkaXJCL2ZpbGVCIl0pCisgICAgICAgICMgTm8gc3ltbGluayBsb29wcyBoZXJlCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoImZpbGUqIiksIFsiZGlyQy9maWxlQyIsICJkaXJDL2RpckQvZmlsZUQiXSkKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoIiovKiIpLCBbImRpckMvZGlyRC9maWxlRCJdKQorCisgICAgZGVmIHRlc3RfZ2xvYl9kb3Rkb3Qoc2VsZik6CisgICAgICAgICMgIi4uIiBpcyBub3Qgc3BlY2lhbCBpbiBnbG9icworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLiIpKSwgeyBQKEJBU0UsICIuLiIpIH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiZGlyQS8uLi9maWxlKiIpKSwgeyBQKEJBU0UsICJkaXJBLy4uL2ZpbGVBIikgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLi94eXp6eSIpKSwgc2V0KCkpCisKKyAgICBkZWYgX2NoZWNrX3Jlc29sdmVfcmVsYXRpdmUoc2VsZiwgcCwgZXhwZWN0ZWQpOgorICAgICAgICBxID0gcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShzZWxmLCBwLCBleHBlY3RlZCk6CisgICAgICAgIHEgPSBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIGV4cGVjdGVkKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKyAgICAgICAgIyBUaGVzZSBhcmUgYWxsIHJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBwKQorICAgICAgICBwID0gUChCQVNFLCAnbGlua0EnKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2ZpbGVBJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtDJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2xpbmtEJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgICMgTm93IGNyZWF0ZSBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9Jy1kaXJEJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNodXRpbC5ybXRyZWUsIGQpCisgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKGQpLCBqb2luKCdkaXJBJywgJ2xpbmtYJykpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignZGlyQicpLCBvcy5wYXRoLmpvaW4oZCwgJ2xpbmtZJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtYJywgJ2xpbmtZJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBpdDIgPSBwLml0ZXJkaXIoKQorICAgICAgICBuZXh0KGl0MikKKyAgICAgICAgd2l0aCBwOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIEkvTyBvcGVyYXRpb24gb24gY2xvc2VkIHBhdGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGl0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5vcGVuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlc29sdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuYWJzb2x1dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuX19lbnRlcl9fKQorCisgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgbW9kZSA9IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgICAgIyBDbGVhciB3cml0YWJsZSBiaXQKKyAgICAgICAgbmV3X21vZGUgPSBtb2RlICYgfjBvMjIyCisgICAgICAgIHAuY2htb2QobmV3X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCkuc3RfbW9kZSwgbmV3X21vZGUpCisgICAgICAgICMgU2V0IHdyaXRhYmxlIGJpdAorICAgICAgICBuZXdfbW9kZSA9IG1vZGUgfCAwbzIyMgorICAgICAgICBwLmNobW9kKG5ld19tb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLnN0X21vZGUsIG5ld19tb2RlKQorCisgICAgIyBYWFggYWxzbyBuZWVkIGEgdGVzdCBmb3IgbGNobW9kCisKKyAgICBkZWYgdGVzdF9zdGF0KHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgc3QpCisgICAgICAgICMgQ2hhbmdlIGZpbGUgbW9kZSBieSBmbGlwcGluZyB3cml0ZSBiaXQKKyAgICAgICAgcC5jaG1vZChzdC5zdF9tb2RlIF4gMG8yMjIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLmNobW9kLCBzdC5zdF9tb2RlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAuc3RhdCgpLCBzdCkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfbHN0YXQoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKS8gJ2xpbmtBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIGRlZiB0ZXN0X2xzdGF0X25vc3ltbGluayhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHB3ZCwgInRoZSBwd2QgbW9kdWxlIGlzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9vd25lcihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICB1aWQgPSBwLnN0YXQoKS5zdF91aWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZCh1aWQpLnB3X25hbWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAidXNlciAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSB1aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5vd25lcigpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ3JwLCAidGhlIGdycCBtb2R1bGUgaXMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIGdpZCA9IHAuc3RhdCgpLnN0X2dpZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gZ3JwLmdldGdyZ2lkKGdpZCkuZ3JfbmFtZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KAorICAgICAgICAgICAgICAgICJncm91cCAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSBnaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5ncm91cCgpKQorCisgICAgZGVmIHRlc3RfdW5saW5rKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHAudW5saW5rKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnVubGluaykKKworICAgIGRlZiB0ZXN0X3JtZGlyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZGlyQScKKyAgICAgICAgZm9yIHEgaW4gcC5pdGVyZGlyKCk6CisgICAgICAgICAgICBxLnVubGluaygpCisgICAgICAgIHAucm1kaXIoKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAudW5saW5rKQorCisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVuYW1pbmcgdG8gYW5vdGhlciBwYXRoCisgICAgICAgIHEgPSBQIC8gJ2RpckEnIC8gJ2ZpbGVBQScKKyAgICAgICAgcC5yZW5hbWUocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVuYW1pbmcgdG8gYSBzdHIgb2YgYSByZWxhdGl2ZSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZmlsZUFBQScpCisgICAgICAgIHEucmVuYW1lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChyKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChxLnN0YXQpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVwbGFjaW5nIGEgbm9uLWV4aXN0aW5nIHBhdGgKKyAgICAgICAgcSA9IFAgLyAnZGlyQScgLyAnZmlsZUFBJworICAgICAgICBwLnJlcGxhY2UocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVwbGFjaW5nIGFub3RoZXIgKGV4aXN0aW5nKSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZGlyQicsICdmaWxlQicpCisgICAgICAgIHEucmVwbGFjZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocikuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocS5zdGF0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnbmV3ZmlsZUEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIG9sZF9tdGltZSA9IHN0LnN0X210aW1lCisgICAgICAgIG9sZF9tdGltZV9ucyA9IHN0LnN0X210aW1lX25zCisgICAgICAgICMgUmV3aW5kIHRoZSBtdGltZSBzdWZmaWNpZW50bHkgZmFyIGluIHRoZSBwYXN0IHRvIHdvcmsgYXJvdW5kCisgICAgICAgICMgZmlsZXN5c3RlbS1zcGVjaWZpYyB0aW1lc3RhbXAgZ3JhbnVsYXJpdHkuCisgICAgICAgIG9zLnV0aW1lKHN0cihwKSwgKG9sZF9tdGltZSAtIDEwLCBvbGRfbXRpbWUgLSAxMCkpCisgICAgICAgICMgVGhlIGZpbGUgbXRpbWUgc2hvdWxkIGJlIHJlZnJlc2hlZCBieSBjYWxsaW5nIHRvdWNoKCkgYWdhaW4KKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWVfbnMsIG9sZF9tdGltZV9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWUsIG9sZF9tdGltZSkKKyAgICAgICAgIyBOb3cgd2l0aCBleGlzdF9vaz1GYWxzZQorICAgICAgICBwID0gUCAvICduZXdmaWxlQicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmV4aXN0cygpKQorICAgICAgICBwLnRvdWNoKG1vZGU9MG83MDAsIGV4aXN0X29rPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcC50b3VjaCwgZXhpc3Rfb2s9RmFsc2UpCisKKyAgICBkZWYgdGVzdF90b3VjaF9ub2NoYW5nZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBwLnRvdWNoKCkKKyAgICAgICAgd2l0aCBwLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ25ld2RpckEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC5ta2RpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorICAgICAgICAjIFhYWCB0ZXN0IGBtb2RlYCBhcmcKKworICAgIGRlZiB0ZXN0X21rZGlyX3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQ3JlYXRpbmcgYSBjaGFpbiBvZiBkaXJlY3RvcmllcworICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ25ld2RpckInLCAnbmV3ZGlyQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICBwLm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2RpcigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisgICAgICAgICMgWFhYIHRlc3QgYG1vZGVgIGFyZworCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9zeW1saW5rX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgdGFyZ2V0ID0gUCAvICdmaWxlQScKKyAgICAgICAgIyBTeW1saW5raW5nIGEgcGF0aCB0YXJnZXQKKyAgICAgICAgbGluayA9IFAgLyAnZGlyQScgLyAnbGlua0FBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmsuc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpbmsubHN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgIyBTeW1saW5raW5nIGEgc3RyIHRhcmdldAorICAgICAgICBsaW5rID0gUCAvICdkaXJBJyAvICdsaW5rQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8oc3RyKHRhcmdldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmsuaXNfZGlyKCkpCisgICAgICAgICMgU3ltbGlua2luZyB0byBhIGRpcmVjdG9yeQorICAgICAgICB0YXJnZXQgPSBQIC8gJ2RpckInCisgICAgICAgIGxpbmsgPSBQIC8gJ2RpckEnIC8gJ2xpbmtBQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluay5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3QobGluay5pdGVyZGlyKCkpKQorCisgICAgZGVmIHRlc3RfaXNfZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2RpckEnKS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2RpcigpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbGlua0EnKS5pc19kaXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdsaW5rQicpLmlzX2RpcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUC8gJ2Jyb2tlbkxpbmsnKS5pc19kaXIoKSkKKworICAgIGRlZiB0ZXN0X2lzX2ZpbGUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnZmlsZUEnKS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2ZpbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19maWxlKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfZmlsZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdsaW5rQicpLmlzX2ZpbGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19zeW1saW5rKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfc3ltbGluaygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtCJykuaXNfc3ltbGluaygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQLyAnYnJva2VuTGluaycpLmlzX3N5bWxpbmsoKSkKKworICAgIGRlZiB0ZXN0X2lzX2ZpZm9fZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfZmlmbygpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgIm1rZmlmbyIpLCAib3MubWtmaWZvKCkgcmVxdWlyZWQiKQorICAgIGRlZiB0ZXN0X2lzX2ZpZm9fdHJ1ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UsICdteWZpZm8nKQorICAgICAgICBvcy5ta2ZpZm8oc3RyKFApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUC5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X2lzX3NvY2tldF9mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfc29ja2V0KCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKSwgIlVuaXggc29ja2V0cyByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfaXNfc29ja2V0X3RydWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFLCAnbXlzb2NrJykKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2suYmluZChzdHIoUCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiAiQUZfVU5JWCBwYXRoIHRvbyBsb25nIiBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY2Fubm90IGJpbmQgVW5peCBzb2NrZXQ6ICIgKyBzdHIoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfYmxvY2tfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19ibG9ja19kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19ibG9ja19kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfY2hhcl9kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX3RydWUoc2VsZik6CisgICAgICAgICMgVW5kZXIgVW5peCwgL2Rldi9udWxsIHNob3VsZCBnZW5lcmFsbHkgYmUgYSBjaGFyIGRldmljZQorICAgICAgICBQID0gc2VsZi5jbHMoJy9kZXYvbnVsbCcpCisgICAgICAgIGlmIG5vdCBQLmV4aXN0cygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiL2Rldi9udWxsIHJlcXVpcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMocCwgcHJvdG8pCisgICAgICAgICAgICBwcCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLnN0YXQoKSwgcC5zdGF0KCkpCisKKyAgICBkZWYgdGVzdF9wYXJ0c19pbnRlcm5pbmcoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL3Vzci9iaW4vZm9vJykKKyAgICAgICAgcSA9IFAoJy91c3IvbG9jYWwvYmluJykKKyAgICAgICAgIyAndXNyJworICAgICAgICBzZWxmLmFzc2VydElzKHAucGFydHNbMV0sIHEucGFydHNbMV0pCisgICAgICAgICMgJ2JpbicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLnBhcnRzWzJdLCBxLnBhcnRzWzNdKQorCisKK2NsYXNzIFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBhdGgKKworICAgIGRlZiB0ZXN0X2NvbmNyZXRlX2NsYXNzKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksCisgICAgICAgICAgICBwYXRobGliLldpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIHBhdGhsaWIuUG9zaXhQYXRoKQorCisgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfZmxhdm91cihzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGF0aGxpYi5Qb3NpeFBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwYXRobGliLldpbmRvd3NQYXRoKQorCisKK0Bvbmx5X3Bvc2l4CitjbGFzcyBQb3NpeFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBvc2l4UGF0aAorCisgICAgZGVmIF9jaGVja19zeW1saW5rX2xvb3Aoc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXRoID0gc2VsZi5jbHMoKmFyZ3MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHByaW50KHBhdGgucmVzb2x2ZSgpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9tb2RlKHNlbGYpOgorICAgICAgICBvbGRfbWFzayA9IG9zLnVtYXNrKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy51bWFzaywgb2xkX21hc2spCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ25ld19maWxlJykub3Blbignd2InKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY2NikKKyAgICAgICAgb3MudW1hc2soMG8wMjIpCisgICAgICAgIHdpdGggKHAgLyAnb3RoZXJfbmV3X2ZpbGUnKS5vcGVuKCd3YicpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignb3RoZXJfbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjQ0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfbW9kZShzZWxmKToKKyAgICAgICAgb2xkX21hc2sgPSBvcy51bWFzaygwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW1hc2ssIG9sZF9tYXNrKQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgKHAgLyAnbmV3X2ZpbGUnKS50b3VjaCgpCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCduZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NjYpCisgICAgICAgIG9zLnVtYXNrKDBvMDIyKQorICAgICAgICAocCAvICdvdGhlcl9uZXdfZmlsZScpLnRvdWNoKCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ290aGVyX25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY0NCkKKyAgICAgICAgKHAgLyAnbWFza2VkX25ld19maWxlJykudG91Y2gobW9kZT0wbzc1MCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ21hc2tlZF9uZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG83NTApCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfbG9vcChzZWxmKToKKyAgICAgICAgIyBMb29wIGRldGVjdGlvbiBmb3IgYnJva2VuIHN5bWxpbmtzIHVuZGVyIFBPU0lYCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIExvb3BzIHdpdGggcmVsYXRpdmUgc3ltbGlua3MKKyAgICAgICAgb3Muc3ltbGluaygnbGlua1gvaW5zaWRlJywgam9pbignbGlua1gnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWCcpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtZJywgam9pbignbGlua1knKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWScpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtaLy4uL2xpbmtaJywgam9pbignbGlua1onKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWicpCisgICAgICAgICMgTG9vcHMgd2l0aCBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2xpbmtVL2luc2lkZScpLCBqb2luKCdsaW5rVScpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtVJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVicpLCBqb2luKCdsaW5rVicpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtWJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVy8uLi9saW5rVycpLCBqb2luKCdsaW5rVycpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtXJykKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBnaXZlbiA9IHNldChwLmdsb2IoIkZJTEVhIikpCisgICAgICAgIGV4cGVjdCA9IHNldCgpIGlmIG5vdCBzdXBwb3J0LmZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoQkFTRSkgZWxzZSBnaXZlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiRklMRWEqIikpLCBzZXQoKSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBnaXZlbiA9IHNldChwLnJnbG9iKCJGSUxFZCIpKQorICAgICAgICBleHBlY3QgPSBzZXQoKSBpZiBub3Qgc3VwcG9ydC5mc19pc19jYXNlX2luc2Vuc2l0aXZlKEJBU0UpIGVsc2UgZ2l2ZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCoiKSksIHNldCgpKQorCisKK0Bvbmx5X250CitjbGFzcyBXaW5kb3dzUGF0aFRlc3QoX0Jhc2VQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuV2luZG93c1BhdGgKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIkZJTEVhIikpLCB7IFAoQkFTRSwgImZpbGVBIikgfSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCIpKSwgeyBQKEJBU0UsICJkaXJDL2RpckQvZmlsZUQiKSB9KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BkYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CmluZGV4IDAzMDg0ZTQuLjc0MjUzYjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CkBAIC0xLDkgKzEsOSBAQAogIyBBIHRlc3Qgc3VpdGUgZm9yIHBkYjsgbm90IHZlcnkgY29tcHJlaGVuc2l2ZSBhdCB0aGUgbW9tZW50LgogCiBpbXBvcnQgZG9jdGVzdAotaW1wb3J0IGltcAogaW1wb3J0IHBkYgogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTIwNSw3ICsyMDUsOCBAQAogICAgIC4uLiAgICAgJ2VuYWJsZSAxJywKICAgICAuLi4gICAgICdjbGVhciAxJywKICAgICAuLi4gICAgICdjb21tYW5kcyAyJywKLSAgICAuLi4gICAgICdwcmludCA0MicsCisgICAgLi4uICAgICAncCAiNDIiJywKKyAgICAuLi4gICAgICdwcmludCgiNDIiLCA3KjYpJywgICAgICMgSXNzdWUgMTg3NjQgKG5vdCBhYm91dCBicmVha3BvaW50cykKICAgICAuLi4gICAgICdlbmQnLAogICAgIC4uLiAgICAgJ2NvbnRpbnVlJywgICMgd2lsbCBzdG9wIGF0IGJyZWFrcG9pbnQgMiAobGluZSA0KQogICAgIC4uLiAgICAgJ2NsZWFyJywgICAgICMgY2xlYXIgYWxsIQpAQCAtMjUyLDExICsyNTMsMTMgQEAKICAgICAoUGRiKSBjbGVhciAxCiAgICAgRGVsZXRlZCBicmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCiAgICAgKFBkYikgY29tbWFuZHMgMgotICAgIChjb20pIHByaW50IDQyCisgICAgKGNvbSkgcCAiNDIiCisgICAgKGNvbSkgcHJpbnQoIjQyIiwgNyo2KQogICAgIChjb20pIGVuZAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgMQotICAgIDQyCisgICAgJzQyJworICAgIDQyIDQyCiAgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDQpdGVzdF9mdW5jdGlvbigpCiAgICAgLT4gcHJpbnQoMikKICAgICAoUGRiKSBjbGVhcgpAQCAtNDY0LDcgKzQ2Nyw3IEBACiAKIAogIyBNb2R1bGUgZm9yIHRlc3Rpbmcgc2tpcHBpbmcgb2YgbW9kdWxlIHRoYXQgbWFrZXMgYSBjYWxsYmFjawotbW9kID0gaW1wLm5ld19tb2R1bGUoJ21vZHVsZV90b19za2lwJykKK21vZCA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZHVsZV90b19za2lwJykKIGV4ZWMoJ2RlZiBmb29fcG9ueShjYWxsYmFjayk6IHggPSAxOyBjYWxsYmFjaygpOyByZXR1cm4gTm9uZScsIG1vZC5fX2RpY3RfXykKIAogCkBAIC01OTcsNiArNjAwLDMxMSBAQAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgIiIiCiAKK2RlZiB0ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudCgpOgorICAgICIiIlRlc3QgdGhhdCBwZGIgc3RvcHMgYWZ0ZXIgYSBuZXh0L3VudGlsL3JldHVybiBpc3N1ZWQgYXQgYSByZXR1cm4gZGVidWcgZXZlbnQuCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb25fMigpOgorICAgIC4uLiAgICAgeCA9IDEKKyAgICAuLi4gICAgIHggPSAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgIGVuZCA9IDEKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ2JyZWFrIHRlc3RfZnVuY3Rpb25fMicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBicmVhayB0ZXN0X2Z1bmN0aW9uXzIKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT46MQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigyKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4geCA9IDEKKyAgICAoUGRiKSByZXR1cm4KKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigzKXRlc3RfZnVuY3Rpb25fMigpLT5Ob25lCisgICAgLT4geCA9IDIKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHVudGlsCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHJldHVybgorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBlbmQgPSAxCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yKCk6CisgICAgIiIiVGVzdGluZyBza2lwIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzIGZvciAibmV4dCIgY29tbWFuZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKyAgICAuLi4gICAgIHlpZWxkIDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgaXQgPSB0ZXN0X2dlbigpCisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAuLi4gICAgICAgICBuZXh0KGl0KQorICAgIC4uLiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXg6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBpdCA9IHRlc3RfZ2VuKCkKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRyeToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigxKXRlc3RfZ2VuKCkKKyAgICAtPiBkZWYgdGVzdF9nZW4oKToKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAwCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpLT4xCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJyZXR1cm4iIGNvbW1hbmQKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHlpZWxkIDAKKyAgICAuLi4gICAgIHJldHVybiAxCisgICAgLi4uICAgICB5aWVsZCAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGl0ID0gdGVzdF9nZW4oKQorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgLi4uICAgICAgICAgbmV4dChpdCkKKyAgICAuLi4gICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgIC4uLiAgICAgICAgIGFzc2VydCBleC52YWx1ZSA9PSAxCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGl0ID0gdGVzdF9nZW4oKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB0cnk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHJldHVybgorICAgIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDgpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAoUGRiKSBjb250aW51ZQorICAgIGZpbmlzaGVkCisgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJ1bnRpbCIgY29tbWFuZCBpZiB0YXJnZXQgYnJlYWtwb2luZyBpcyBub3QgcmVhY2hlZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgeWllbGQgMQorICAgIC4uLiAgICAgeWllbGQgMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgICAgIHByaW50KGkpCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwgNCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgdW50aWwgNAorICAgIDAKKyAgICAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpLT4yCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KGkpCisgICAgKFBkYikgY29udGludWUKKyAgICAyCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3AoKToKKyAgICAiIiJUaGUgbmV4dCBjb21tYW5kIG9uIHJldHVybmluZyBmcm9tIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLgorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAuLi4gICAgICAgICBwcmludCgndmFsdWUnLCBpKQorICAgIC4uLiAgICAgeCA9IDEyMworCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnYnJlYWsgdGVzdF9nZW4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgYnJlYWsgdGVzdF9nZW4KKyAgICBCcmVha3BvaW50IDYgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzBdPjoxCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFswXT4oMil0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMAorICAgIChQZGIpIG5leHQKKyAgICB2YWx1ZSAwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMF0+KDMpdGVzdF9nZW4oKQorICAgIC0+IHJldHVybiAxCisgICAgKFBkYikgbmV4dAorICAgIEludGVybmFsIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB4ID0gMTIzCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvcigpOgorICAgICIiIlRoZSBuZXh0IGNvbW1hbmQgaW4gYSBnZW5lcmF0b3Igd2l0aCBhIHN1Yml0ZXJhdG9yLgorCisgICAgPj4+IGRlZiB0ZXN0X3N1YmdlbmVyYXRvcigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHggPSB5aWVsZCBmcm9tIHRlc3Rfc3ViZ2VuZXJhdG9yKCkKKyAgICAuLi4gICAgIHJldHVybiB4CisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICAgICAgcHJpbnQoJ3ZhbHVlJywgaSkKKyAgICAuLi4gICAgIHggPSAxMjMKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB4ID0geWllbGQgZnJvbSB0ZXN0X3N1YmdlbmVyYXRvcigpCisgICAgKFBkYikgbmV4dAorICAgIHZhbHVlIDAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigzKXRlc3RfZ2VuKCkKKyAgICAtPiByZXR1cm4geAorICAgIChQZGIpIG5leHQKKyAgICBJbnRlcm5hbCBTdG9wSXRlcmF0aW9uOiAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHggPSAxMjMKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCiAKIGNsYXNzIFBkYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjE3LDYgKzkyNSwzNiBAQAogICAgICAgICBzdGRlcnIgPSBzdGRlcnIgYW5kIGJ5dGVzLmRlY29kZShzdGRlcnIpCiAgICAgICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgogCisgICAgZGVmIF9hc3NlcnRfZmluZF9mdW5jdGlvbihzZWxmLCBmaWxlX2NvbnRlbnQsIGZ1bmNfbmFtZSwgZXhwZWN0ZWQpOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSB0ZXh0d3JhcC5kZWRlbnQoZmlsZV9jb250ZW50KQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBOb25lIGlmIG5vdCBleHBlY3RlZCBlbHNlICgKKyAgICAgICAgICAgIGV4cGVjdGVkWzBdLCBzdXBwb3J0LlRFU1RGTiwgZXhwZWN0ZWRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleHBlY3RlZCwgcGRiLmZpbmRfZnVuY3Rpb24oZnVuY19uYW1lLCBzdXBwb3J0LlRFU1RGTikpCisKKyAgICBkZWYgdGVzdF9maW5kX2Z1bmN0aW9uX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKCcnLCAnZm9vJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKAorICAgICAgICAgICAgIiIiXAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIHF1dXgoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAnYmFyJywKKyAgICAgICAgICAgICgnYmFyJywgNCksCisgICAgICAgICkKKwogICAgIGRlZiB0ZXN0X2lzc3VlNzk2NChzZWxmKToKICAgICAgICAgIyBvcGVuIHRoZSBmaWxlIGFzIGJpbmFyeSBzbyB3ZSBjYW4gZm9yY2UgXHJcbiBuZXdsaW5lCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKaW5kZXggMWNhY2RlYS4uNTAyNTc5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKQEAgLTUsNDQgKzUsMjggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBtYXRoIGltcG9ydCBjb3B5c2lnbgogCi1kZWYgZGlzYXNzZW1ibGUoZnVuYyk6Ci0gICAgZiA9IFN0cmluZ0lPKCkKLSAgICB0bXAgPSBzeXMuc3Rkb3V0Ci0gICAgc3lzLnN0ZG91dCA9IGYKLSAgICB0cnk6Ci0gICAgICAgIGRpcy5kaXMoZnVuYykKLSAgICBmaW5hbGx5OgotICAgICAgICBzeXMuc3Rkb3V0ID0gdG1wCi0gICAgcmVzdWx0ID0gZi5nZXR2YWx1ZSgpCi0gICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIHJlc3VsdAorZnJvbSB0ZXN0LmJ5dGVjb2RlX2hlbHBlciBpbXBvcnQgQnl0ZWNvZGVUZXN0Q2FzZQogCi1kZWYgZGlzX3NpbmdsZShsaW5lKToKLSAgICByZXR1cm4gZGlzYXNzZW1ibGUoY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpKQotCi0KLWNsYXNzIFRlc3RUcmFuZm9ybXModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGVzdFRyYW5mb3JtcyhCeXRlY29kZVRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3Vub3Qoc2VsZik6CiAgICAgICAgICMgVU5BUllfTk9UIFBPUF9KVU1QX0lGX0ZBTFNFICAtLT4gIFBPUF9KVU1QX0lGX1RSVUUnCiAgICAgICAgIGRlZiB1bm90KHgpOgogICAgICAgICAgICAgaWYgbm90IHggPT0gMjoKICAgICAgICAgICAgICAgICBkZWwgeAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZSh1bm90KQotICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCi0gICAgICAgIGZvciBlbGVtIGluICgnUE9QX0pVTVBfSUZfVFJVRScsKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUodW5vdCwgJ1VOQVJZX05PVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZSh1bm90LCAnUE9QX0pVTVBfSUZfRkFMU0UnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUodW5vdCwgJ1BPUF9KVU1QX0lGX1RSVUUnKQogCiAgICAgZGVmIHRlc3RfZWxpbV9pbnZlcnNpb25fb2ZfaXNfb3JfaW4oc2VsZik6Ci0gICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnbm90IGEgaXMgYicsICcoaXMgbm90KScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaW4gYicsICcobm90IGluKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnKGlzKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgbm90IGluIGInLCAnKGluKScsKSwKKyAgICAgICAgZm9yIGxpbmUsIGNtcF9vcCBpbiAoCisgICAgICAgICAgICAoJ25vdCBhIGlzIGInLCAnaXMgbm90JywpLAorICAgICAgICAgICAgKCdub3QgYSBpbiBiJywgJ25vdCBpbicsKSwKKyAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnaXMnLCksCisgICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJ2luJywpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdDT01QQVJFX09QJywgY21wX29wKQogCiAgICAgZGVmIHRlc3RfZ2xvYmFsX2FzX2NvbnN0YW50KHNlbGYpOgogICAgICAgICAjIExPQURfR0xPQkFMIE5vbmUvVHJ1ZS9GYWxzZSAgLS0+ICBMT0FEX0NPTlNUIE5vbmUvVHJ1ZS9GYWxzZQpAQCAtNTYsMTcgKzQwLDE0IEBACiAgICAgICAgIGRlZiBoKHgpOgogICAgICAgICAgICAgRmFsc2UKICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgIGZvciBmdW5jLCBuYW1lIGluICgoZiwgJ05vbmUnKSwgKGcsICdUcnVlJyksIChoLCAnRmFsc2UnKSk6Ci0gICAgICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmdW5jKQotICAgICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0dMT0JBTCcsKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICcoJytuYW1lKycpJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgIGZvciBmdW5jLCBlbGVtIGluICgoZiwgTm9uZSksIChnLCBUcnVlKSwgKGgsIEZhbHNlKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZnVuYywgJ0xPQURfR0xPQkFMJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmdW5jLCAnTE9BRF9DT05TVCcsIGVsZW0pCiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAnQWRkaW5nIGEgZG9jc3RyaW5nIG1hZGUgdGhpcyB0ZXN0IGZhaWwgaW4gUHkyLjUuMCcKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0xPQURfQ09OU1QnLCBkaXNhc3NlbWJsZShmKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9HTE9CQUwnLCBkaXNhc3NlbWJsZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0dMT0JBTCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCAnTE9BRF9DT05TVCcsIE5vbmUpCiAKICAgICBkZWYgdGVzdF93aGlsZV9vbmUoc2VsZik6CiAgICAgICAgICMgU2tpcCBvdmVyOiAgTE9BRF9DT05TVCB0cnVlY29uc3QgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4CkBAIC03NCwxMSArNTUsMTAgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGxpc3QKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCBlbGVtKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0pVTVBfQUJTT0xVVEUnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCBlbGVtKQogCiAgICAgZGVmIHRlc3RfcGFja191bnBhY2soc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTg2LDI4ICs2NiwzMCBAQAogICAgICAgICAgICAgKCdhLCBiID0gYSwgYicsICdST1RfVFdPJywpLAogICAgICAgICAgICAgKCdhLCBiLCBjID0gYSwgYiwgYycsICdST1RfVEhSRUUnLCksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOUEFDS19UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsJycsJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdVTlBBQ0tfVFVQTEUnKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl90dXBsZXNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ2EgPSAxLDIsMycsICcoKDEsIDIsIDMpKScpLAotICAgICAgICAgICAgKCcoImEiLCJiIiwiYyIpJywgIigoJ2EnLCAnYicsICdjJykpIiksCi0gICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKLSAgICAgICAgICAgICgnKE5vbmUsIDEsIE5vbmUpJywgJygoTm9uZSwgMSwgTm9uZSkpJyksCi0gICAgICAgICAgICAoJygoMSwgMiksIDMsIDQpJywgJygoKDEsIDIpLCAzLCA0KSknKSwKKyAgICAgICAgICAgICgnYSA9IDEsMiwzJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnKCJhIiwiYiIsImMiKScsICgnYScsICdiJywgJ2MnKSksCisgICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCcoTm9uZSwgMSwgTm9uZSknLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwnJywnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKIAogICAgICAgICAjIExvbmcgdHVwbGVzIHNob3VsZCBiZSBmb2xkZWQgdG9vLgotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSkpCisgICAgICAgIGNvZGUgPSBjb21waWxlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSksJycsJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQogICAgICAgICAjIE9uZSBMT0FEX0NPTlNUIGZvciB0aGUgdHVwbGUsIG9uZSBmb3IgdGhlIE5vbmUgcmV0dXJuIHZhbHVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLmNvdW50KCdMT0FEX0NPTlNUJyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICBsb2FkX2NvbnN0cyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnTE9BRF9DT05TVCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvYWRfY29uc3RzKSwgMikKIAogICAgICAgICAjIEJ1ZyAxMDUzODE5OiAgVHVwbGUgb2YgY29uc3RhbnRzIG1pc2lkZW50aWZpZWQgd2hlbiBwcmVzZW50ZWQgd2l0aDoKICAgICAgICAgIyAuIC4gLiBvcGNvZGVfd2l0aF9hcmcgMTAwICAgdW5hcnlfb3Bjb2RlICAgQlVJTERfVFVQTEUgMSAgLiAuIC4KQEAgLTEyOSwxNCArMTExLDE0IEBACiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9saXN0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKICAgICAgICAgICAgICMgaW4vbm90IGluIGNvbnN0YW50cyB3aXRoIEJVSUxEX0xJU1Qgc2hvdWxkIGJlIGZvbGRlZCB0byBhIHR1cGxlOgotICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAnKDEsIDIsIDMpJyksCi0gICAgICAgICAgICAoJ2Egbm90IGluIFsiYSIsImIiLCJjIl0nLCAiKCgnYScsICdiJywgJ2MnKSkiKSwKLSAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAnKChOb25lLCAxLCBOb25lKSknKSwKLSAgICAgICAgICAgICgnYSBub3QgaW4gWygxLCAyKSwgMywgNF0nLCAnKCgoMSwgMiksIDMsIDQpKScpLAorICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbImEiLCJiIiwiYyJdJywgKCdhJywgJ2InLCAnYycpKSwKKyAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbKDEsIDIpLCAzLCA0XScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX0xJU1QnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9MSVNUJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2Zfc2V0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTE0NywxOCArMTI5LDkgQEAKICAgICAgICAgICAgICgnYSBub3QgaW4geygxLCAyKSwgMywgNH0nLCBmcm96ZW5zZXQoeygxLCAyKSwgMywgNH0pKSwKICAgICAgICAgICAgICgnYSBpbiB7MSwgMiwgMywgMywgMiwgMX0nLCBmcm96ZW5zZXQoezEsIDIsIDN9KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfU0VUJywgYXNtKQotCi0gICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBmcm96ZW5zZXQgJ2VsZW0nIGlzIGluIHRoZSBkaXNhc3NlbWJseQotICAgICAgICAgICAgIyBUaGUgb3JkZXJpbmcgb2YgdGhlIGVsZW1lbnRzIGluIHJlcHIoIGZyb3plbnNldCApIGlzbid0Ci0gICAgICAgICAgICAjIGd1YXJhbnRlZWQsIHNvIHdlIGp1bXAgdGhyb3VnaCBzb21lIGhvb3BzIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUKLSAgICAgICAgICAgICMgdGhlIGZyb3plbnNldCB3ZSBleHBlY3Q6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmcm96ZW5zZXQnLCBhc20pCi0gICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZyb3plbnNldCBsaXRlcmFsIGZyb20gdGhlIGRpc2Fzc2VtYmx5OgotICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInLiooZnJvemVuc2V0XCh7Lip9XCkpLionLCBhc20sIHJlLkRPVEFMTCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKG0uZ3JvdXAoMSkpLCBlbGVtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9TRVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSByZXN1bHRpbmcgY29kZSBhY3R1YWxseSB3b3JrczoKICAgICAgICAgZGVmIGYoYSk6CkBAIC0xNzYsOTggKzE0OSwxMDMgQEAKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfYmlub3BzX29uX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdhID0gMiszKzQnLCAnKDkpJyksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCi0gICAgICAgICAgICAoJyJAIio0JywgIignQEBAQCcpIiksICAgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2E9ImFiYyIgKyAiZGVmIicsICIoJ2FiY2RlZicpIiksICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2EgPSAzKio0JywgJyg4MSknKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKLSAgICAgICAgICAgICgnYSA9IDMqNCcsICcoMTIpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtdWx0aXBseQotICAgICAgICAgICAgKCdhID0gMTMvLzQnLCAnKDMpJyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGZsb29yIGRpdmlkZQotICAgICAgICAgICAgKCdhID0gMTQlNCcsICcoMiknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbwotICAgICAgICAgICAgKCdhID0gMiszJywgJyg1KScpLCAgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFkZAotICAgICAgICAgICAgKCdhID0gMTMtNCcsICcoOSknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHN1YnRyYWN0Ci0gICAgICAgICAgICAoJ2EgPSAoMTIsMTMpWzFdJywgJygxMyknKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCi0gICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgJyg1MiknKSwgICAgICAgICAgICAgICAgIyBiaW5hcnkgbHNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyA+PiAyJywgJygzKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcnNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyAmIDcnLCAnKDUpJyksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCi0gICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAnKDEwKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgeG9yCi0gICAgICAgICAgICAoJ2EgPSAxMyB8IDcnLCAnKDE1KScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgb3IKKyAgICAgICAgICAgICgnYSA9IDIrMys0JywgOSksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCisgICAgICAgICAgICAoJyJAIio0JywgJ0BAQEAnKSwgICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYT0iYWJjIiArICJkZWYiJywgJ2FiY2RlZicpLCAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhID0gMyoqNCcsIDgxKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKKyAgICAgICAgICAgICgnYSA9IDMqNCcsIDEyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG11bHRpcGx5CisgICAgICAgICAgICAoJ2EgPSAxMy8vNCcsIDMpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBmbG9vciBkaXZpZGUKKyAgICAgICAgICAgICgnYSA9IDE0JTQnLCAyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbworICAgICAgICAgICAgKCdhID0gMiszJywgNSksICAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYWRkCisgICAgICAgICAgICAoJ2EgPSAxMy00JywgOSksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBzdWJ0cmFjdAorICAgICAgICAgICAgKCdhID0gKDEyLDEzKVsxXScsIDEzKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCisgICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgNTIpLCAgICAgICAgICAgICAgICAjIGJpbmFyeSBsc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzID4+IDInLCAzKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHJzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgJiA3JywgNSksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCisgICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAxMCksICAgICAgICAgICAgICAgICAjIGJpbmFyeSB4b3IKKyAgICAgICAgICAgICgnYSA9IDEzIHwgNycsIDE1KSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JJTkFSWV8nKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9MisiYiInKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMiknLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYicpIiwgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnYT0yKyJiIicsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ2InKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgbGFyZ2Ugc2VxdWVuY2VzIGRvIG5vdCByZXN1bHQgZnJvbSBmb2xkaW5nCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9IngiKjEwMDAnKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMTAwMCknLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhPSJ4IioxMDAwJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAxMDAwKQogCiAgICAgZGVmIHRlc3RfYmluYXJ5X3N1YnNjcl9vbl91bmljb2RlKHNlbGYpOgogICAgICAgICAjIHZhbGlkIGNvZGUgZ2V0IG9wdGltaXplZAotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZm9vIlswXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXHUwMDYxXHVmZmZmIlsxXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignXFx1ZmZmZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXFUwMDAxMjM0NWFiY2RlZiJbM10nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2MnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJmb28iWzBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciXHUwMDYxXHVmZmZmIlsxXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1x1ZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCdCSU5BUllfU1VCU0NSJykKKworICAgICAgICAjIFdpdGggUEVQIDM5Mywgbm9uLUJNUCBjaGFyIGdldCBvcHRpbWl6ZWQKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJcVTAwMDEyMzQ1IlswXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgICAgICMgaW52YWxpZCBjb2RlIGRvZXNuJ3QgZ2V0IG9wdGltaXplZAogICAgICAgICAjIG91dCBvZiByYW5nZQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZnV1IlsxMF0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnImZ1dSJbMTBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl91bmFyeW9wc19vbl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnLTAuNScsICcoLTAuNSknKSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCi0gICAgICAgICAgICAoJy0wLjAnLCAnKC0wLjApJyksICAgICAgICAgICAgICAgICAgICAgIyAtMC4wCi0gICAgICAgICAgICAoJy0oMS4wLTEuMCknLCcoLTAuMCknKSwgICAgICAgICAgICAgICAgIyAtMC4wIGFmdGVyIGZvbGRpbmcKLSAgICAgICAgICAgICgnLTAnLCAnKDApJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCi0gICAgICAgICAgICAoJ34tMicsICcoMSknKSwgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKLSAgICAgICAgICAgICgnKzEnLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IHBvc2l0aXZlCisgICAgICAgICAgICAoJy0wLjUnLCAtMC41KSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCisgICAgICAgICAgICAoJy0wLjAnLCAtMC4wKSwgICAgICAgICAgICAgICAgICAgICAjIC0wLjAKKyAgICAgICAgICAgICgnLSgxLjAtMS4wKScsIC0wLjApLCAgICAgICAgICAgICAgICMgLTAuMCBhZnRlciBmb2xkaW5nCisgICAgICAgICAgICAoJy0wJywgMCksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCisgICAgICAgICAgICAoJ34tMicsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICAgICAgKCcrMScsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBwb3NpdGl2ZQogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IC0wLjAgd29ya3MgYWZ0ZXIgbWFyc2hhbGluZwogICAgICAgICBkZWYgbmVnemVybygpOgogICAgICAgICAgICAgcmV0dXJuIC0oMS4wLTEuMCkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBkaXNhc3NlbWJsZShuZWd6ZXJvKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlzaWduKDEuMCwgbmVnemVybygpKSA8IDApCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKLSAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCctImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKLSAgICAgICAgICAgICgnfiJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICBmb3IgbGluZSwgZWxlbSwgb3BuYW1lIGluICgKKyAgICAgICAgICAgICgnLSJhYmMiJywgJ2FiYycsICdVTkFSWV9ORUdBVElWRScpLAorICAgICAgICAgICAgKCd+ImFiYyInLCAnYWJjJywgJ1VOQVJZX0lOVkVSVCcpLAogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgb3BuYW1lKQogCiAgICAgZGVmIHRlc3RfZWxpbV9leHRyYV9yZXR1cm4oc2VsZik6CiAgICAgICAgICMgUkVUVVJOIExPQURfQ09OU1QgTm9uZSBSRVRVUk4gIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9DT05TVCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignKE5vbmUpJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0NPTlNUJywgTm9uZSkKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF90b19yZXR1cm4oc2VsZik6CiAgICAgICAgICMgSlVNUF9GT1JXQVJEIHRvIFJFVFVSTiAtLT4gIFJFVFVSTgogICAgICAgICBkZWYgZihjb25kLCB0cnVlX3ZhbHVlLCBmYWxzZV92YWx1ZSk6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZV92YWx1ZSBpZiBjb25kIGVsc2UgZmFsc2VfdmFsdWUKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfQUJTT0xVVEUnKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjEoc2VsZik6CiAgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCkBAIC0yODAsNDggKzI1OCw1MyBAQAogICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAogICAgICAgICAgICAgICAgIHJldHVybiA1CiAgICAgICAgICAgICByZXR1cm4gNgotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9BQlNPTFVURScpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDYpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMihzZWxmKToKICAgICAgICAgIyBFbGltaW5hdGUgZGVhZCBjb2RlOiBqdW1wcyBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5zIGNhbid0IGJlIHJlYWNoZWQKICAgICAgICAgZGVmIGYoY29uZDEsIGNvbmQyKToKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQogICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBvbmUganVtcCBmb3IgdGhlIHdoaWxlIGxvb3AuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ0pVTVBfQUJTT0xVVEUnKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnSlVNUF9BQlNPTFVURSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAxKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfbWFrZV9mdW5jdGlvbl9kb2VzbnRfYmFpbChzZWxmKToKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgIGRlZiBnKCktPjErMToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gZwotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfQUREJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0JJTkFSWV9BREQnKQogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRfZm9sZGluZyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTEyNDQ6IGFnZ3Jlc3NpdmUgY29uc3RhbnQgZm9sZGluZy4KICAgICAgICAgZXhwcnMgPSBbCi0gICAgICAgICAgICAiMyAqIC01IiwKLSAgICAgICAgICAgICItMyAqIDUiLAotICAgICAgICAgICAgIjIgKiAoMyAqIDQpIiwKLSAgICAgICAgICAgICIoMiAqIDMpICogNCIsCi0gICAgICAgICAgICAiKC0xLCAyLCAzKSIsCi0gICAgICAgICAgICAiKDEsIC0yLCAzKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSAqIDYiLAotICAgICAgICAgICAgImxhbWJkYSB4OiB4IGluIHsoMyAqIC01KSArICgtMSAtIDYpLCAoMSwgLTIsIDMpICogMiwgTm9uZX0iLAorICAgICAgICAgICAgJzMgKiAtNScsCisgICAgICAgICAgICAnLTMgKiA1JywKKyAgICAgICAgICAgICcyICogKDMgKiA0KScsCisgICAgICAgICAgICAnKDIgKiAzKSAqIDQnLAorICAgICAgICAgICAgJygtMSwgMiwgMyknLAorICAgICAgICAgICAgJygxLCAtMiwgMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMykgKiA2JywKKyAgICAgICAgICAgICdsYW1iZGEgeDogeCBpbiB7KDMgKiAtNSkgKyAoLTEgLSA2KSwgKDEsIC0yLCAzKSAqIDIsIE5vbmV9JywKICAgICAgICAgXQogICAgICAgICBmb3IgZSBpbiBleHByczoKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSwgZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20sIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF8nLCBhc20sIGUpCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShlLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQklOQVJZXycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JVSUxEXycpKQorCiAKIGNsYXNzIFRlc3RCdWdsZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzQzLDcgKzMyNiw3IEBACiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIAogICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgogICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgY291bnRzID0gW05vbmVdICogNQogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CmluZGV4IDdmMTA0NzIuLmI4NWEyNmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CkBAIC0xNSwxMiArMTUsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZHVsZS5kaWdlc3Rfc2l6ZSBpcyBOb25lIG9yIG1vZHVsZS5kaWdlc3Rfc2l6ZSA+IDApCiAgICAgICAgIHNlbGYuY2hlY2tfb2JqZWN0KG1vZHVsZS5uZXcsIG1vZHVsZS5kaWdlc3Rfc2l6ZSwga2V5KQogCi0gICAgZGVmIGNoZWNrX29iamVjdChzZWxmLCBjbHMsIGRpZ2VzdF9zaXplLCBrZXkpOgorICAgIGRlZiBjaGVja19vYmplY3Qoc2VsZiwgY2xzLCBkaWdlc3Rfc2l6ZSwga2V5LCBkaWdlc3Rtb2Q9Tm9uZSk6CiAgICAgICAgIGlmIGtleSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG9iajEgPSBjbHMoa2V5KQotICAgICAgICAgICAgb2JqMiA9IGNscyhrZXksIGInc3RyaW5nJykKLSAgICAgICAgICAgIGgxID0gY2xzKGtleSwgYidzdHJpbmcnKS5kaWdlc3QoKQotICAgICAgICAgICAgb2JqMyA9IGNscyhrZXkpCisgICAgICAgICAgICBpZiBkaWdlc3Rtb2QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkaWdlc3Rtb2QgPSBtZDUKKyAgICAgICAgICAgIG9iajEgPSBjbHMoa2V5LCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKQorICAgICAgICAgICAgb2JqMiA9IGNscyhrZXksIGInc3RyaW5nJywgZGlnZXN0bW9kPWRpZ2VzdG1vZCkKKyAgICAgICAgICAgIGgxID0gY2xzKGtleSwgYidzdHJpbmcnLCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKS5kaWdlc3QoKQorICAgICAgICAgICAgb2JqMyA9IGNscyhrZXksIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpCiAgICAgICAgICAgICBvYmozLnVwZGF0ZShiJ3N0cmluZycpCiAgICAgICAgICAgICBoMiA9IG9iajMuZGlnZXN0KCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGFlMzg2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCi0KLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KLWNsYXNzIFBFUDI2M1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCi0gICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAotICAgICAgICAgICAgYidcXFx4ZDBceDlmJwotICAgICAgICApCi0KLSAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgotICAgICAgICAjIHNlZSAjMTg4MgotICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQotCi0gICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoKQotCi0gICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgotICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGMsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6Ci0gICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQotCi0gICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgotICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKLSAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAotICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKLQotICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKLQotICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCi0KLSAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgotICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgotICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKLSAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKLSAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFBFUDI2M1Rlc3QpCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CmluZGV4IDRiMTZjYmIuLjliYWU2ZGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CkBAIC05OSwxMCArOTksNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbikgYXMgYzoKICAgICAgICAgICAgIGZuKGZpbGVuYW1lKQogICAgICAgICBleGNfZmlsZW5hbWUgPSBjLmV4Y2VwdGlvbi5maWxlbmFtZQotICAgICAgICAjIGxpc3RkaXIgbWF5IGFwcGVuZCBhIHdpbGRjYXJkIHRvIHRoZSBmaWxlbmFtZQotICAgICAgICBpZiBmbiBpcyBvcy5saXN0ZGlyIGFuZCBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIGV4Y19maWxlbmFtZSwgXywgd2lsZGNhcmQgPSBleGNfZmlsZW5hbWUucnBhcnRpdGlvbihvcy5zZXApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbGRjYXJkLCAnKi4qJykKICAgICAgICAgaWYgY2hlY2tfZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19maWxlbmFtZSwgZmlsZW5hbWUsICJGdW5jdGlvbiAnJXMoJWEpIGZhaWxlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGJhZCBmaWxlbmFtZSBpbiB0aGUgZXhjZXB0aW9uOiAlYSIgJQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCA1NThjZGI1Li43Yzk4YzQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQogCkBAIC0xODAsOCArMTc5LDYgQEAKICAgICAgICAgIyBDYXRjaGluZyBhIHN0cmluZyBpcyBiYWQuCiAgICAgICAgIHNlbGYuY2F0Y2hfZmFpbHMoInNwYW0iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvbkNsYXNzVGVzdHMsIFVzYWdlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5CmluZGV4IGQzN2FjMjYuLjAyOWI1YjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGV0b29scy5weQpAQCAtNiw2ICs2LDggQEAKIAogY2xhc3MgT3B0aW1pemVkUGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cyk6CiAKKyAgICBvcHRpbWl6ZWQgPSBUcnVlCisKICAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz1Ob25lKToKICAgICAgICAgcmV0dXJuIHBpY2tsZXRvb2xzLm9wdGltaXplKHBpY2tsZS5kdW1wcyhhcmcsIHByb3RvKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2cucHkgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQppbmRleCAzNTVlZmU3Li45ODgzMDAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQpAQCAtMTk5LDE0ICsxOTksMTQgQEAKICAgICAgICAgaW1wb3J0IHQ1CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnZm9vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsICd0NSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJywgJ3N0cmluZycsICd0NSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuZm9vKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzdHJpbmcnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fc3BlY19fJywgJ3N0cmluZyddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuc3RyaW5nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3NwZWNfXycsICdzcGFtJ10pCiAKICAgICBkZWYgdGVzdF82KHNlbGYpOgogICAgICAgICBoaWVyID0gWwpAQCAtMjIyLDE0ICsyMjIsMTUgQEAKICAgICAgICAgaW1wb3J0IHQ2CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3NwZWNfXyddKQogICAgICAgICBzID0gIiIiCiAgICAgICAgICAgICBpbXBvcnQgdDYKICAgICAgICAgICAgIGZyb20gdDYgaW1wb3J0ICoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fYWxsX18nLCAnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnX19zcGVjX18nLCAnZWdncycsICdoYW0nLCAnc3BhbSddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoKSwgWydlZ2dzJywgJ2hhbScsICdzZWxmJywgJ3NwYW0nLCAndDYnXSkKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCkBAIC0yNTYsMTggKzI1NywxOSBAQAogICAgICAgICBpbXBvcnQgdDcgYXMgdGFzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0YXMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBmcm9tIHQ3IGltcG9ydCBzdWIgYXMgc3VicGFyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJwYXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgZnJvbSB0Ny5zdWIgaW1wb3J0IHN1YnN1YiBhcyBzdWJzdWJzdWIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnN1YnN1YikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnc3BhbSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbSddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJzdWIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CmluZGV4IGE4NDI2YjUuLjM3MGIyYWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBpbXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUKIAogY2xhc3MgVGVzdEltcG9ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKaW5kZXggZmQwNjYxNC4uZDczYjIxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQpAQCAtMSwxMiArMSwxMiBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgdW5sb2FkLCBjaGVja193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB6aXBmaWxlCiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIGNsYXNzIE15VGVzdExvYWRlcihvYmplY3QpOgogICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAgICAgIyBDcmVhdGUgYW4gZW1wdHkgbW9kdWxlCi0gICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCBpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCB0eXBlcy5Nb2R1bGVUeXBlKGZ1bGxuYW1lKSkKICAgICAgICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgICMgTWFrZSBpdCBhIHBhY2thZ2UKQEAgLTIwMCw2ICsyMDAsOCBAQAogICAgICAgICBkaXJuYW1lID0gc2VsZi5jcmVhdGVfaW5pdChwa2duYW1lKQogICAgICAgICBwYXRoaXRlbSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBwa2duYW1lKQogICAgICAgICBmdWxsbmFtZSA9ICd7fS57fScuZm9ybWF0KHBrZ25hbWUsIG1vZG5hbWUpCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKHBrZ25hbWUsIE5vbmUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3N1Ym1vZHVsZShkaXJuYW1lLCBwa2duYW1lLCBtb2RuYW1lLCAwKQogCkBAIC0yMDgsOSArMjEwLDE2IEBACiAgICAgICAgICAgICBpbXBvcnRlcnMgPSBsaXN0KGl0ZXJfaW1wb3J0ZXJzKGZ1bGxuYW1lKSkKICAgICAgICAgICAgIGV4cGVjdGVkX2ltcG9ydGVyID0gZ2V0X2ltcG9ydGVyKHBhdGhpdGVtKQogICAgICAgICAgICAgZm9yIGZpbmRlciBpbiBpbXBvcnRlcnM6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyLmxvYWRlcgorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBGb3Igbm93IHdlIHN0aWxsIGFsbG93IHJhdyBsb2FkZXJzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyBmaW5kX21vZHVsZSgpLgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbmRlciwgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLCBleHBlY3RlZF9pbXBvcnRlcikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmluZGVyLmZpbmRfbW9kdWxlKHBrZ25hbWUpKQogCkBAIC0yMjIsOCArMjMxLDExIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcm5hbWUpCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbSddCi0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtJ10KKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAKICAgICBkZWYgdGVzdF9taXhlZF9uYW1lc3BhY2Uoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQppbmRleCA5ZTg2YjNkLi5hYmIxZDE5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKQEAgLTEsOTQgKzEsODcgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBsaXN0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGNvZGVjcworaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29sbGVjdGlvbnMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwogCitBTExfRk9STUFUUz0ocGxpc3RsaWIuRk1UX1hNTCwgcGxpc3RsaWIuRk1UX0JJTkFSWSkKIAotIyBUaGlzIHRlc3QgZGF0YSB3YXMgZ2VuZXJhdGVkIHRocm91Z2ggQ29jb2EncyBOU0RpY3Rpb25hcnkgY2xhc3MKLVRFU1REQVRBID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iIFwKLSJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0gICAgICAgIDxrZXk+YURhdGU8L2tleT4KLSAgICAgICAgPGRhdGU+MjAwNC0xMC0yNlQxMDozMzozM1o8L2RhdGU+Ci0gICAgICAgIDxrZXk+YURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICAgICAgPGtleT5hRmFsc2VWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxmYWxzZS8+Ci0gICAgICAgICAgICAgICAgPGtleT5hVHJ1ZVZhbHVlPC9rZXk+Ci0gICAgICAgICAgICAgICAgPHRydWUvPgotICAgICAgICAgICAgICAgIDxrZXk+YVVuaWNvZGVWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+TVx4YzNceGE0c3NpZywgTWFceGMzXHg5Zjwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+YW5vdGhlclN0cmluZzwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+Jmx0O2hlbGxvICZhbXA7ICdoaScgdGhlcmUhJmd0Ozwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+ZGVlcGVyRGljdDwva2V5PgotICAgICAgICAgICAgICAgIDxkaWN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGtleT5hPC9rZXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xNzwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yjwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yzwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPnRleHQ8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJyYXk+Ci0gICAgICAgICAgICAgICAgPC9kaWN0PgotICAgICAgICA8L2RpY3Q+Ci0gICAgICAgIDxrZXk+YUZsb2F0PC9rZXk+Ci0gICAgICAgIDxyZWFsPjAuNTwvcmVhbD4KLSAgICAgICAgPGtleT5hTGlzdDwva2V5PgotICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5BPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5CPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPGludGVnZXI+MTI8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjM8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5hU3RyaW5nPC9rZXk+Ci0gICAgICAgIDxzdHJpbmc+RG9vZGFoPC9zdHJpbmc+Ci0gICAgICAgIDxrZXk+YW5FbXB0eURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3QvPgotICAgICAgICA8a2V5PmFuRW1wdHlMaXN0PC9rZXk+Ci0gICAgICAgIDxhcnJheS8+Ci0gICAgICAgIDxrZXk+YW5JbnQ8L2tleT4KLSAgICAgICAgPGludGVnZXI+NzI4PC9pbnRlZ2VyPgotICAgICAgICA8a2V5Pm5lc3RlZERhdGE8L2tleT4KLSAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgIDxkYXRhPgotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1cgotICAgICAgICAgICAgICAgIFBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNQotICAgICAgICAgICAgICAgIElHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTBjeUJ2WmlCaQotICAgICAgICAgICAgICAgIGFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSegotICAgICAgICAgICAgICAgIElHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRAotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICAgICAgICAgIDwvZGF0YT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5zb21lRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEdKcGJtRnllU0JuZFc1clBnPT0KLSAgICAgICAgPC9kYXRhPgotICAgICAgICA8a2V5PnNvbWVNb3JlRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTTgKLSAgICAgICAgYkc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKLSAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHYKLSAgICAgICAgZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTAKLSAgICAgICAgY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICA8L2RhdGE+Ci0gICAgICAgIDxrZXk+XHhjM1x4ODViZW5yYWE8L2tleT4KLSAgICAgICAgPHN0cmluZz5UaGF0IHdhcyBhIHVuaWNvZGUga2V5Ljwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KLSIiIi5yZXBsYWNlKGIiICIgKiA4LCBiIlx0IikgICMgQXBwbGUgYXMgd2VsbCBhcyBwbGlzdGxpYi5weSBvdXRwdXQgaGFyZCB0YWJzCisjIFRoZSB0ZXN0ZGF0YSBpcyBnZW5lcmF0ZWQgdXNpbmcgTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5CisjICh3aGljaCB1c2luZyBQeU9iakMgdG8gY29udHJvbCB0aGUgQ29jb2EgY2xhc3NlcyBmb3IgZ2VuZXJhdGluZyBwbGlzdHMpCitURVNUREFUQT17CisgICAgcGxpc3RsaWIuRk1UX1hNTDogYmluYXNjaWkuYTJiX2Jhc2U2NChiJycnCisgICAgICAgIFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQQ0ZFVDBOVQorICAgICAgICBXVkJGSUhCc2FYTjBJRkJWUWt4SlF5QWlMUzh2UVhCd2JHVXZMMFJVUkNCUVRFbFRWQ0F4TGpBdkwwVk8KKyAgICAgICAgSWlBaWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZSRlJFY3k5UWNtOXdaWEowZVV4cGMzUXRNUzR3CisgICAgICAgIExtUjBaQ0krQ2p4d2JHbHpkQ0IyWlhKemFXOXVQU0l4TGpBaVBnbzhaR2xqZEQ0S0NUeHJaWGsrWVVSaAorICAgICAgICBkR1U4TDJ0bGVUNEtDVHhrWVhSbFBqSXdNRFF0TVRBdE1qWlVNVEE2TXpNNk16TmFQQzlrWVhSbFBnb0oKKyAgICAgICAgUEd0bGVUNWhSR2xqZER3dmEyVjVQZ29KUEdScFkzUStDZ2tKUEd0bGVUNWhSbUZzYzJWV1lXeDFaVHd2CisgICAgICAgIGEyVjVQZ29KQ1R4bVlXeHpaUzgrQ2drSlBHdGxlVDVoVkhKMVpWWmhiSFZsUEM5clpYaytDZ2tKUEhSeQorICAgICAgICBkV1V2UGdvSkNUeHJaWGsrWVZWdWFXTnZaR1ZXWVd4MVpUd3ZhMlY1UGdvSkNUeHpkSEpwYm1jK1RjT2sKKyAgICAgICAgYzNOcFp5d2dUV0hEbnp3dmMzUnlhVzVuUGdvSkNUeHJaWGsrWVc1dmRHaGxjbE4wY21sdVp6d3ZhMlY1CisgICAgICAgIFBnb0pDVHh6ZEhKcGJtYytKbXgwTzJobGJHeHZJQ1poYlhBN0lDZG9hU2NnZEdobGNtVWhKbWQwT3p3dgorICAgICAgICBjM1J5YVc1blBnb0pDVHhyWlhrK1pHVmxjR1Z5UkdsamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazgKKyAgICAgICAgYTJWNVBtRThMMnRsZVQ0S0NRa0pQR2x1ZEdWblpYSStNVGM4TDJsdWRHVm5aWEkrQ2drSkNUeHJaWGsrCisgICAgICAgIFlqd3ZhMlY1UGdvSkNRazhjbVZoYkQ0ek1pNDFQQzl5WldGc1Bnb0pDUWs4YTJWNVBtTThMMnRsZVQ0SworICAgICAgICBDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHbHVkR1ZuWlhJK01Ud3ZhVzUwWldkbGNqNEtDUWtKQ1R4cGJuUmwKKyAgICAgICAgWjJWeVBqSThMMmx1ZEdWblpYSStDZ2tKQ1FrOGMzUnlhVzVuUG5SbGVIUThMM04wY21sdVp6NEtDUWtKCisgICAgICAgIFBDOWhjbkpoZVQ0S0NRazhMMlJwWTNRK0NnazhMMlJwWTNRK0NnazhhMlY1UG1GR2JHOWhkRHd2YTJWNQorICAgICAgICBQZ29KUEhKbFlXdytNQzQxUEM5eVpXRnNQZ29KUEd0bGVUNWhUR2x6ZER3dmEyVjVQZ29KUEdGeWNtRjUKKyAgICAgICAgUGdvSkNUeHpkSEpwYm1jK1FUd3ZjM1J5YVc1blBnb0pDVHh6ZEhKcGJtYytRand2YzNSeWFXNW5QZ29KCisgICAgICAgIENUeHBiblJsWjJWeVBqRXlQQzlwYm5SbFoyVnlQZ29KQ1R4eVpXRnNQak15TGpVOEwzSmxZV3crQ2drSgorICAgICAgICBQR0Z5Y21GNVBnb0pDUWs4YVc1MFpXZGxjajR4UEM5cGJuUmxaMlZ5UGdvSkNRazhhVzUwWldkbGNqNHkKKyAgICAgICAgUEM5cGJuUmxaMlZ5UGdvSkNRazhhVzUwWldkbGNqNHpQQzlwYm5SbFoyVnlQZ29KQ1R3dllYSnlZWGsrCisgICAgICAgIENnazhMMkZ5Y21GNVBnb0pQR3RsZVQ1aFUzUnlhVzVuUEM5clpYaytDZ2s4YzNSeWFXNW5Qa1J2YjJSaAorICAgICAgICBhRHd2YzNSeWFXNW5QZ29KUEd0bGVUNWhia1Z0Y0hSNVJHbGpkRHd2YTJWNVBnb0pQR1JwWTNRdlBnb0oKKyAgICAgICAgUEd0bGVUNWhia1Z0Y0hSNVRHbHpkRHd2YTJWNVBnb0pQR0Z5Y21GNUx6NEtDVHhyWlhrK1lXNUpiblE4CisgICAgICAgIEwydGxlVDRLQ1R4cGJuUmxaMlZ5UGpjeU9Ed3ZhVzUwWldkbGNqNEtDVHhyWlhrK2JtVnpkR1ZrUkdGMAorICAgICAgICBZVHd2YTJWNVBnb0pQR0Z5Y21GNVBnb0pDVHhrWVhSaFBnb0pDVkJIZUhaa1NFMW5ZakpaWjFsdGJIVloKKyAgICAgICAgV0VvMVNVZGtNV0p0Y3l0QlFVVkRRWHA0YzJJelVucEpSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjZ29KCisgICAgICAgIENWQm5RVUpCWjAwNFlrYzVNR041UW5aYWFVSnBZVmMxYUdOdWEyZGFNMVoxWVhvMFFVRlJTVVJRUjNoMgorICAgICAgICBaRWhOWjJJeVdXZFpiV3gxV1ZoS05Rb0pDVWxIWkRGaWJYTXJRVUZGUTBGNmVITmlNMUo2U1VjNWJVbEgKKyAgICAgICAgU25CaWJVWjVaVk5DYm1SWE5YSlFaMEZDUVdkTk9HSkhPVEJqZVVKMldtbENhUW9KQ1dGWE5XaGpibXRuCisgICAgICAgIFdqTldkV0Y2TkVGQlVVbEVVRWQ0ZG1SSVRXZGlNbGxuV1cxc2RWbFlTalZKUjJReFltMXpLMEZCUlVOQgorICAgICAgICBlbmh6WWpOU2Vnb0pDVWxIT1cxSlIwcHdZbTFHZVdWVFFtNWtWelZ5VUdkQlFrRm5UVGhpUnprd1kzbEMKKyAgICAgICAgZGxwcFFtbGhWelZvWTI1cloxb3pWblZoZWpSQlFWRkpSQW9KQ1ZCSGVIWmtTRTFuWWpKWloxbHRiSFZaCisgICAgICAgIFdFbzFTVWRrTVdKdGN5dEJRVVZEUVhjOVBRb0pDVHd2WkdGMFlUNEtDVHd2WVhKeVlYaytDZ2s4YTJWNQorICAgICAgICBQbk52YldWRVlYUmhQQzlyWlhrK0NnazhaR0YwWVQ0S0NWQkhTbkJpYlVaNVpWTkNibVJYTlhKUVp6MDkKKyAgICAgICAgQ2drOEwyUmhkR0UrQ2drOGEyVjVQbk52YldWTmIzSmxSR0YwWVR3dmEyVjVQZ29KUEdSaGRHRStDZ2xRCisgICAgICAgIFIzaDJaRWhOWjJJeVdXZFpiV3gxV1ZoS05VbEhaREZpYlhNclFVRkZRMEY2ZUhOaU0xSjZTVWM1YlVsSAorICAgICAgICBTbkJpYlVaNVpWTkNibVJYTlhKUVowRkNRV2ROT0FvSllrYzVNR041UW5aYWFVSnBZVmMxYUdOdWEyZGEKKyAgICAgICAgTTFaMVlYbzBRVUZSU1VSUVIzaDJaRWhOWjJJeVdXZFpiV3gxV1ZoS05VbEhaREZpYlhNclFVRkZRMEY2CisgICAgICAgIGVITUtDV0l6VW5wSlJ6bHRTVWRLY0dKdFJubGxVMEp1WkZjMWNsQm5RVUpCWjAwNFlrYzVNR041UW5aYQorICAgICAgICBhVUpwWVZjMWFHTnVhMmRhTTFaMVlYbzBRVUZSU1VSUVIzaDJDZ2xrU0UxbllqSlpaMWx0YkhWWldFbzEKKyAgICAgICAgU1Vka01XSnRjeXRCUVVWRFFYcDRjMkl6VW5wSlJ6bHRTVWRLY0dKdFJubGxVMEp1WkZjMWNsQm5RVUpCCisgICAgICAgIFowMDRZa2M1TUFvSlkzbENkbHBwUW1saFZ6Vm9ZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFprU0UxbgorICAgICAgICBZakpaWjFsdGJIVlpXRW8xU1Vka01XSnRjeXRCUVVWRFFYYzlQUW9KUEM5a1lYUmhQZ29KUEd0bGVUN0QKKyAgICAgICAgaFdKbGJuSmhZVHd2YTJWNVBnb0pQSE4wY21sdVp6NVVhR0YwSUhkaGN5QmhJSFZ1YVdOdlpHVWdhMlY1CisgICAgICAgIExqd3ZjM1J5YVc1blBnbzhMMlJwWTNRK0Nqd3ZjR3hwYzNRK0NnPT0nJycpLAorICAgIHBsaXN0bGliLkZNVF9CSU5BUlk6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJworICAgICAgICBZbkJzYVhOME1ERGNBUUlEQkFVR0J3Z0pDZ3NNRFE0aUl5a3FLeXd0THk0d1ZXRkVZWFJsVldGRWFXTjAKKyAgICAgICAgVm1GR2JHOWhkRlZoVEdsemRGZGhVM1J5YVc1blcyRnVSVzF3ZEhsRWFXTjBXMkZ1Ulcxd2RIbE1hWE4wCisgICAgICAgIFZXRnVTVzUwV201bGMzUmxaRVJoZEdGWWMyOXRaVVJoZEdGY2MyOXRaVTF2Y21WRVlYUmhad0RGQUdJQQorICAgICAgICBaUUJ1QUhJQVlRQmhNMEdjdVgzMEFBQUExUThRRVJJVEZCVVdGeGhiWVVaaGJITmxWbUZzZFdWYVlWUnkKKyAgICAgICAgZFdWV1lXeDFaVjFoVlc1cFkyOWtaVlpoYkhWbFhXRnViM1JvWlhKVGRISnBibWRhWkdWbGNHVnlSR2xqCisgICAgICAgIGRBZ0phd0JOQU9RQWN3QnpBR2tBWndBc0FDQUFUUUJoQU45ZkVCVThhR1ZzYkc4Z0ppQW5hR2tuSUhSbworICAgICAgICBaWEpsSVQ3VEdSb2JIQjBlVVdGUllsRmpFQkVqUUVCQUFBQUFBQUNqSHlBaEVBRVFBbFIwWlhoMEl6L2cKKyAgICAgICAgQUFBQUFBQUFwU1FsSmgwblVVRlJRaEFNb3g4Z0tCQURWa1J2YjJSaGFOQ2dFUUxZb1M1UEVQbzhiRzkwCisgICAgICAgIGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQworICAgICAgICBBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnUKKyAgICAgICAgYXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5CisgICAgICAgIGVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZworICAgICAgICBZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTAKKyAgICAgICAgY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFRUeGlhVzVoY25rZ1ozVnVhejVmRUJkVWFHRjBJSGRoCisgICAgICAgIGN5QmhJSFZ1YVdOdlpHVWdhMlY1TGdBSUFDRUFKd0F0QURRQU9nQkNBRTRBV2dCZ0FHc0FkQUNCQUpBQQorICAgICAgICBtUUNrQUxBQXV3REpBTmNBNGdEakFPUUErd0VUQVJvQkhBRWVBU0FCSWdFckFTOEJNUUV6QVRnQlFRRkgKKyAgICAgICAgQVVrQlN3Rk5BVkVCVXdGYUFWc0JYQUZmQVdFQ1hnSnNBQUFBQUFBQUFnRUFBQUFBQUFBQU1RQUFBQUFBCisgICAgICAgIEFBQUFBQUFBQUFBQUFvWT0nJycpLAorfQogCiAKIGNsYXNzIFRlc3RQbGlzdGxpYih1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC05OSw3ICs5Miw3IEBACiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgIGRlZiBfY3JlYXRlKHNlbGYsIGZtdD1Ob25lKToKICAgICAgICAgcGwgPSBkaWN0KAogICAgICAgICAgICAgYVN0cmluZz0iRG9vZGFoIiwKICAgICAgICAgICAgIGFMaXN0PVsiQSIsICJCIiwgMTIsIDMyLjUsIFsxLCAyLCAzXV0sCkBAIC0xMTIsOSArMTA1LDkgQEAKICAgICAgICAgICAgICAgICBhRmFsc2VWYWx1ZT1GYWxzZSwKICAgICAgICAgICAgICAgICBkZWVwZXJEaWN0PWRpY3QoYT0xNywgYj0zMi41LCBjPVsxLCAyLCAidGV4dCJdKSwKICAgICAgICAgICAgICksCi0gICAgICAgICAgICBzb21lRGF0YSA9IHBsaXN0bGliLkRhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgICAgICBzb21lTW9yZURhdGEgPSBwbGlzdGxpYi5EYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTApLAotICAgICAgICAgICAgbmVzdGVkRGF0YSA9IFtwbGlzdGxpYi5EYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTApXSwKKyAgICAgICAgICAgIHNvbWVEYXRhID0gYiI8YmluYXJ5IGd1bms+IiwKKyAgICAgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTAsCisgICAgICAgICAgICBuZXN0ZWREYXRhID0gW2IiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTBdLAogICAgICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZSgyMDA0LCAxMCwgMjYsIDEwLCAzMywgMzMpLAogICAgICAgICAgICAgYW5FbXB0eURpY3QgPSBkaWN0KCksCiAgICAgICAgICAgICBhbkVtcHR5TGlzdCA9IGxpc3QoKQpAQCAtMTI5LDQ5ICsxMjIsMTkxIEBACiAKICAgICBkZWYgdGVzdF9pbyhzZWxmKToKICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsLCBzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KHN1cHBvcnQuVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGZwOgorICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgZnApCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoZnApCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBwbGlzdGxpYi5kdW1wLCBwbCwgJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHBsaXN0bGliLmxvYWQsICdmaWxlbmFtZScpCisKKwogICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgogICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCi0gICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpCisgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCkKKyAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHBsLCBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCi0gICAgICAgIGRhdGEyID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwyKQorICAgICAgICBkYXRhMiA9IHBsaXN0bGliLmR1bXBzKHBsMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkYXRhMikKIAogICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX2FycmF5KHNlbGYpOgotICAgICAgICBkYXRhID0gW1tbW1tbW1t7J3Rlc3QnOiBwbGlzdGxpYi5EYXRhKGInYWFhYWFhJyl9XV1dXV1dXV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMoZGF0YSkpLCBkYXRhKQorICAgICAgICBkYXRhID0gW1tbW1tbW1t7J3Rlc3QnOiBiJ2FhYWFhYSd9XV1dXV1dXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyhkYXRhKSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9kaWN0KHNlbGYpOgotICAgICAgICBkYXRhID0geycxJzogeycyJzogeyczJzogeyc0Jzogeyc1Jzogeyc2Jzogeyc3Jzogeyc4Jzogeyc5JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfX19fX19fX19Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IHsnMyc6IHsnNCc6IHsnNSc6IHsnNic6IHsnNyc6IHsnOCc6IHsnOSc6IGInYWFhYWFhJ319fX19fX19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKGRhdGEpKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX2RpY3RfbWl4KHNlbGYpOgotICAgICAgICBkYXRhID0geycxJzogeycyJzogW3snMyc6IFtbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dfV19fQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhkYXRhKSksIGRhdGEpCisgICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiBbeyczJzogW1tbW1t7J3Rlc3QnOiBiJ2FhYWFhYSd9XV1dXV19XX19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHMoZGF0YSkpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfYXBwbGVmb3JtYXR0aW5nKHNlbGYpOgotICAgICAgICBwbCA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhURVNUREFUQSkKLSAgICAgICAgZGF0YSA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFRFU1REQVRBLAotICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCisgICAgICAgIGZvciB1c2VfYnVpbHRpbl90eXBlcyBpbiAoVHJ1ZSwgRmFsc2UpOgorICAgICAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10LCB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcyk6CisgICAgICAgICAgICAgICAgICAgIHBsID0gcGxpc3RsaWIubG9hZHMoVEVTVERBVEFbZm10XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzKQorICAgICAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgVEVTVERBVEFbZm10XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCisKIAogICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZ2Zyb21saXRlcmFsKHNlbGYpOgotICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhURVNUREFUQSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoVEVTVERBVEFbZm10XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMiksCisgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCiAKICAgICBkZWYgdGVzdF9ieXRlc2lvKHNlbGYpOgotICAgICAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCi0gICAgICAgIGIgPSBCeXRlc0lPKCkKLSAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsLCBiKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3QoQnl0ZXNJTyhiLmdldHZhbHVlKCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBiID0gQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wKHBsLCBiLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoQnl0ZXNJTyhiLmdldHZhbHVlKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworICAgIGRlZiB0ZXN0X2tleXNvcnRfYnl0ZXNpbyhzZWxmKToKKyAgICAgICAgcGwgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHBsWydiJ10gPSAxCisgICAgICAgIHBsWydhJ10gPSAyCisgICAgICAgIHBsWydjJ10gPSAzCisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIGZvciBzb3J0X2tleXMgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKToKKyAgICAgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorCisgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGIsIGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoQnl0ZXNJTyhiLmdldHZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29ydF9rZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYicsICdhJywgJ2MnXSkKKworICAgIGRlZiB0ZXN0X2tleXNvcnQoc2VsZik6CisgICAgICAgIHBsID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBwbFsnYiddID0gMQorICAgICAgICBwbFsnYSddID0gMgorICAgICAgICBwbFsnYyddID0gMworCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3Igc29ydF9rZXlzIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cyk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSwgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29ydF9rZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYicsICdhJywgJ2MnXSkKKworICAgIGRlZiB0ZXN0X2tleXNfbm9fc3RyaW5nKHNlbGYpOgorICAgICAgICBwbCA9IHsgNDI6ICdhTnVtYmVyJyB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGxpc3RsaWIuZHVtcHMsIHBsLCBmbXQ9Zm10KQorCisgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGxpc3RsaWIuZHVtcCwgcGwsIGIsIGZtdD1mbXQpCisKKyAgICBkZWYgdGVzdF9za2lwa2V5cyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICA0MjogJ2FOdW1iZXInLAorICAgICAgICAgICAgJ3NuYWtlJzogJ2FXb3JkJywKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMoCisgICAgICAgICAgICAgICAgICAgIHBsLCBmbXQ9Zm10LCBza2lwa2V5cz1UcnVlLCBzb3J0X2tleXM9RmFsc2UpCisKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7J3NuYWtlJzogJ2FXb3JkJ30pCisKKyAgICAgICAgICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXAoCisgICAgICAgICAgICAgICAgICAgIHBsLCBmcCwgZm10PWZtdCwgc2tpcGtleXM9VHJ1ZSwgc29ydF9rZXlzPUZhbHNlKQorICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZnAuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeydzbmFrZSc6ICdhV29yZCd9KQorCisgICAgZGVmIHRlc3RfdHVwbGVfbWVtYmVycyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAnZmlyc3QnOiAoMSwgMiksCisgICAgICAgICAgICAnc2Vjb25kJzogKDEsIDIpLAorICAgICAgICAgICAgJ3RoaXJkJzogKDMsIDQpLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogWzMsIDRdLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwbDJbJ2ZpcnN0J10sIHBsMlsnc2Vjb25kJ10pCisKKyAgICBkZWYgdGVzdF9saXN0X21lbWJlcnMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2ZpcnN0JzogWzEsIDJdLAorICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeworICAgICAgICAgICAgICAgICAgICAnZmlyc3QnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICdzZWNvbmQnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQorCisgICAgZGVmIHRlc3RfZGljdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdmaXJzdCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgJ3NlY29uZCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgJ3RoaXJkJzogeydiJzogMiB9LAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAnc2Vjb25kJzogeydhJzogMX0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IHsnYic6IDIgfSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQogCiAgICAgZGVmIHRlc3RfY29udHJvbGNoYXJhY3RlcnMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEyOCk6CkBAIC0xNzksMjUgKzMxNCwyNyBAQAogICAgICAgICAgICAgdGVzdFN0cmluZyA9ICJzdHJpbmcgY29udGFpbmluZyAlcyIgJSBjCiAgICAgICAgICAgICBpZiBpID49IDMyIG9yIGMgaW4gIlxyXG5cdCI6CiAgICAgICAgICAgICAgICAgIyBcciwgXG4gYW5kIFx0IGFyZSB0aGUgb25seSBsZWdhbCBjb250cm9sIGNoYXJzIGluIFhNTAotICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3RTdHJpbmcpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcHModGVzdFN0cmluZywgZm10PXBsaXN0bGliLkZNVF9YTUwpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFN0cmluZykKIAogICAgIGRlZiB0ZXN0X25vbmRpY3Ryb290KHNlbGYpOgotICAgICAgICB0ZXN0MSA9ICJhYmMiCi0gICAgICAgIHRlc3QyID0gWzEsIDIsIDMsICJhYmMiXQotICAgICAgICByZXN1bHQxID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3QxKSkKLSAgICAgICAgcmVzdWx0MiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyh0ZXN0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEsIHJlc3VsdDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIsIHJlc3VsdDIpCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICB0ZXN0MSA9ICJhYmMiCisgICAgICAgICAgICAgICAgdGVzdDIgPSBbMSwgMiwgMywgImFiYyJdCisgICAgICAgICAgICAgICAgcmVzdWx0MSA9IHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKHRlc3QxLCBmbXQ9Zm10KSkKKyAgICAgICAgICAgICAgICByZXN1bHQyID0gcGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHModGVzdDIsIGZtdD1mbXQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEsIHJlc3VsdDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MiwgcmVzdWx0MikKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRhcnJheShzZWxmKToKICAgICAgICAgZm9yIGkgaW4gWyI8a2V5PmtleSBpbnNpZGUgYW4gYXJyYXk8L2tleT4iLAogICAgICAgICAgICAgICAgICAgIjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTI8L2tleT48cmVhbD4zPC9yZWFsPiIsCiAgICAgICAgICAgICAgICAgICAiPHRydWUvPjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTM8L2tleT4iXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI8cGxpc3Q+PGFycmF5PiVzPC9hcnJheT48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkZGljdChzZWxmKToKQEAgLTIwNiwyMiArMzQzLDEzMCBAQAogICAgICAgICAgICAgICAgICAgIjxzdHJpbmc+bWlzc2luZyBrZXk8L3N0cmluZz4iLAogICAgICAgICAgICAgICAgICAgIjxrZXk+azE8L2tleT48c3RyaW5nPnYxPC9zdHJpbmc+PHJlYWw+NS4zPC9yZWFsPiIKICAgICAgICAgICAgICAgICAgICI8a2V5PmsxPC9rZXk+PGtleT5rMjwva2V5PjxzdHJpbmc+ZG91YmxlIGtleTwvc3RyaW5nPiJdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjxwbGlzdD48ZGljdD4lczwvZGljdD48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiPHBsaXN0PjxhcnJheT48ZGljdD4lczwvZGljdD48L2FycmF5PjwvcGxpc3Q+IiVpKS5lbmNvZGUoKSkKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRpbnRlZ2VyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjxwbGlzdD48aW50ZWdlcj5ub3QgaW50ZWdlcjwvaW50ZWdlcj48L3BsaXN0PiIpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkcmVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8cGxpc3Q+PGludGVnZXI+bm90IHJlYWw8L2ludGVnZXI+PC9wbGlzdD4iKQogCisgICAgZGVmIHRlc3RfeG1sX2VuY29kaW5ncyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFRFU1REQVRBW3BsaXN0bGliLkZNVF9YTUxdCisKKyAgICAgICAgZm9yIHhtbF9lbmNvZGluZywgZW5jb2RpbmcsIGJvbSBpbiBbCisgICAgICAgICAgICAgICAgICAgIChiJ3V0Zi04JywgJ3V0Zi04JywgY29kZWNzLkJPTV9VVEY4KSwKKyAgICAgICAgICAgICAgICAgICAgKGIndXRmLTE2JywgJ3V0Zi0xNi1sZScsIGNvZGVjcy5CT01fVVRGMTZfTEUpLAorICAgICAgICAgICAgICAgICAgICAoYid1dGYtMTYnLCAndXRmLTE2LWJlJywgY29kZWNzLkJPTV9VVEYxNl9CRSksCisgICAgICAgICAgICAgICAgICAgICMgRXhwYXQgZG9lcyBub3Qgc3VwcG9ydCBVVEYtMzIKKyAgICAgICAgICAgICAgICAgICAgIyhiJ3V0Zi0zMicsICd1dGYtMzItbGUnLCBjb2RlY3MuQk9NX1VURjMyX0xFKSwKKyAgICAgICAgICAgICAgICAgICAgIyhiJ3V0Zi0zMicsICd1dGYtMzItYmUnLCBjb2RlY3MuQk9NX1VURjMyX0JFKSwKKyAgICAgICAgICAgICAgICBdOgorCisgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9cGxpc3RsaWIuRk1UX1hNTCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBkYXRhID0gYmFzZS5yZXBsYWNlKGInVVRGLTgnLCB4bWxfZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgZGF0YSA9IGJvbSArIGRhdGEuZGVjb2RlKCd1dGYtOCcpLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworCitjbGFzcyBUZXN0UGxpc3RsaWJEZXByZWNhdGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pb19kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICBwbF9pbiA9IHsKKyAgICAgICAgICAgICdrZXknOiA0MiwKKyAgICAgICAgICAgICdzdWInOiB7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBiJ2J1ZmZlcicsCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGxfb3V0ID0gcGxpc3RsaWIuX0ludGVybmFsRGljdCh7CisgICAgICAgICAgICAna2V5JzogNDIsCisgICAgICAgICAgICAnc3ViJzogcGxpc3RsaWIuX0ludGVybmFsRGljdCh7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBwbGlzdGxpYi5EYXRhKGInYnVmZmVyJyksCisgICAgICAgICAgICB9KQorICAgICAgICB9KQorCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbF9pbiwgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3Qoc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbF9vdXQsIHBsMikKKworICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGxfaW4sIGZwKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3QoZnApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbF9vdXQsIHBsMikKKworICAgIGRlZiB0ZXN0X2J5dGVzX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2tleSc6IDQyLAorICAgICAgICAgICAgJ3N1Yic6IHsKKyAgICAgICAgICAgICAgICAna2V5JzogOSwKKyAgICAgICAgICAgICAgICAnYWx0JzogJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAnZGF0YSc6IGInYnVmZmVyJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwbDIsIHBsaXN0bGliLl9JbnRlcm5hbERpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KAorICAgICAgICAgICAga2V5PTQyLAorICAgICAgICAgICAgc3ViPXBsaXN0bGliLl9JbnRlcm5hbERpY3QoCisgICAgICAgICAgICAgICAga2V5PTksCisgICAgICAgICAgICAgICAgYWx0PSd2YWx1ZScsCisgICAgICAgICAgICAgICAgZGF0YT1wbGlzdGxpYi5EYXRhKGInYnVmZmVyJyksCisgICAgICAgICAgICApCisgICAgICAgICkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkYXRhMikKKworICAgIGRlZiB0ZXN0X2RhdGFvYmplY3RfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgaW5fZGF0YSA9IHsgJ2tleSc6IHBsaXN0bGliLkRhdGEoYidoZWxsbycpIH0KKyAgICAgICAgb3V0X2RhdGEgPSB7ICdrZXknOiBiJ2hlbGxvJyB9CisKKyAgICAgICAgYnVmID0gcGxpc3RsaWIuZHVtcHMoaW5fZGF0YSkKKworICAgICAgICBjdXIgPSBwbGlzdGxpYi5sb2FkcyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIGluX2RhdGEpCisKKyAgICAgICAgY3VyID0gcGxpc3RsaWIubG9hZHMoYnVmLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIG91dF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgaW5fZGF0YSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGN1ciA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIGluX2RhdGEpCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQbGlzdGxpYikKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGxpc3RsaWIsIFRlc3RQbGlzdGxpYkRlcHJlY2F0ZWQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQppbmRleCBmOThhMjgwLi5hMWU1YzNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CkBAIC0xLDYgKzEsNyBAQAogIyBUZXN0IGNhc2UgZm9yIHRoZSBvcy5wb2xsKCkgZnVuY3Rpb24KIAogaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNlbGVjdAogaW1wb3J0IF90ZXN0Y2FwaQpAQCAtMTUsNyArMTYsNyBAQAogdHJ5OgogICAgIHNlbGVjdC5wb2xsCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3RfcG9sbCIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIikKIAogCiBkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CkBAIC03NiwxMyArNzcsMTEgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZnMsIFtNU0ddICogTlVNX1BJUEVTKQogCi0gICAgZGVmIHBvbGxfdW5pdF90ZXN0cyhzZWxmKToKKyAgICBkZWYgdGVzdF9wb2xsX3VuaXRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgcmV0dXJucyBOVkFMIGZvciBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICBGRCA9IDQyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmNsb3NlKEZEKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgRkQsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgb3MuY2xvc2UoRkQpCisgICAgICAgIG9zLmNsb3NlKHcpCiAgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCiAgICAgICAgIHAucmVnaXN0ZXIoRkQpCiAgICAgICAgIHIgPSBwLnBvbGwoKQpAQCAtMTI1LDcgKzEyNCw5IEBACiAKICAgICBkZWYgdGVzdF9wb2xsMihzZWxmKToKICAgICAgICAgY21kID0gJ2ZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIGVjaG8gdGVzdGluZy4uLjsgc2xlZXAgMTsgZG9uZScKLSAgICAgICAgcCA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnNpemU9MCkKKyAgICAgICAgcCA9IHByb2Muc3Rkb3V0CiAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQogICAgICAgICBwb2xsc3Rlci5yZWdpc3RlciggcCwgc2VsZWN0LlBPTExJTiApCiAgICAgICAgIGZvciB0b3V0IGluICgwLCAxMDAwLCAyMDAwLCA0MDAwLCA4MDAwLCAxNjAwMCkgKyAoLTEsKSoxMDoKQEAgLTEzNSw3ICsxMzYsNyBAQAogICAgICAgICAgICAgZmQsIGZsYWdzID0gZmRsaXN0WzBdCiAgICAgICAgICAgICBpZiBmbGFncyAmIHNlbGVjdC5QT0xMSFVQOgogICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICIiOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gYiIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Vycm9yOiBwaXBlIHNlZW1zIHRvIGJlIGNsb3NlZCwgYnV0IHN0aWxsIHJldHVybnMgZGF0YScpCiAgICAgICAgICAgICAgICAgY29udGludWUKIApAQCAtMTQzLDYgKzE0NCw3IEBACiAgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgYid0ZXN0aW5nLi4uXG4nKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBzZWxlY3QucG9sbDogJXMnICUgZmRsaXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQppbmRleCBjYmNlODUyLi43MGZlNDI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQpAQCAtMTgsNiArMTgsMTQgQEAKIEhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAogUE9SVCA9IDAKIAorU1VQUE9SVFNfU1NMID0gRmFsc2UKK2lmIGhhc2F0dHIocG9wbGliLCAnUE9QM19TU0wnKToKKyAgICBpbXBvcnQgc3NsCisKKyAgICBTVVBQT1JUU19TU0wgPSBUcnVlCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJrZXljZXJ0LnBlbSIpCityZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKKwogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgd2hlbiBMSVNUIGFuZCBSRVRSIGNvbW1hbmRzIGFyZSBpc3N1ZWQKIExJU1RfUkVTUCA9IGInMSAxXHJcbjIgMlxyXG4zIDNcclxuNCA0XHJcbjUgNVxyXG4uXHJcbicKIFJFVFJfUkVTUCA9IGIiIiJGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmdcCkBAIC0zMywxMSArNDEsMTUgQEAKIAogY2xhc3MgRHVtbXlQT1AzSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKIAorICAgIENBUEFTID0geydVSURMJzogW10sICdJTVBMRU1FTlRBVElPTic6IFsncHl0aG9uLXRlc3RsaWItcG9wLXNlcnZlciddfQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICBzZWxmLnB1c2goJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4gPHRpbWVzdGFtcD4nKQorICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCiAKICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmluX2J1ZmZlci5hcHBlbmQoZGF0YSkKQEAgLTExMiw2ICsxMjQsNjUgQEAKICAgICAgICAgc2VsZi5wdXNoKCcrT0sgY2xvc2luZy4nKQogICAgICAgICBzZWxmLmNsb3NlX3doZW5fZG9uZSgpCiAKKyAgICBkZWYgX2dldF9jYXBhcyhzZWxmKToKKyAgICAgICAgX2NhcGFzID0gZGljdChzZWxmLkNBUEFTKQorICAgICAgICBpZiBub3Qgc2VsZi50bHNfYWN0aXZlIGFuZCBTVVBQT1JUU19TU0w6CisgICAgICAgICAgICBfY2FwYXNbJ1NUTFMnXSA9IFtdCisgICAgICAgIHJldHVybiBfY2FwYXMKKworICAgIGRlZiBjbWRfY2FwYShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBDYXBhYmlsaXR5IGxpc3QgZm9sbG93cycpCisgICAgICAgIGlmIHNlbGYuX2dldF9jYXBhcygpOgorICAgICAgICAgICAgZm9yIGNhcCwgcGFyYW1zIGluIHNlbGYuX2dldF9jYXBhcygpLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgX2xuID0gW2NhcF0KKyAgICAgICAgICAgICAgICBpZiBwYXJhbXM6CisgICAgICAgICAgICAgICAgICAgIF9sbi5leHRlbmQocGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnICcuam9pbihfbG4pKQorICAgICAgICBzZWxmLnB1c2goJy4nKQorCisgICAgaWYgU1VQUE9SVFNfU1NMOgorCisgICAgICAgIGRlZiBjbWRfc3RscyhzZWxmLCBhcmcpOgorICAgICAgICAgICAgaWYgc2VsZi50bHNfYWN0aXZlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicpCisgICAgICAgICAgICAgICAgdGxzX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9RmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc29ja2V0KHRsc19zb2NrKQorICAgICAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnLUVSUiBDb21tYW5kIG5vdCBwZXJtaXR0ZWQgd2hlbiBUTFMgYWN0aXZlJykKKworICAgICAgICBkZWYgX2RvX3Rsc19oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnRsc19zdGFydGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LmhhbmRsZV9yZWFkKHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogCiBjbGFzcyBEdW1teVBPUDNTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CiAKQEAgLTIzNiwxOSArMzA3LDM2IEBACiAgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoKQogICAgICAgICBzZWxmLmNsaWVudC51aWRsKCdmb28nKQogCisgICAgZGVmIHRlc3RfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0lNUExFTUVOVEFUSU9OJyBpbiBjYXBhLmtleXMoKSkKKwogICAgIGRlZiB0ZXN0X3F1aXQoc2VsZik6CiAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3ApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LnNvY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LmZpbGUpCiAKKyAgICBAcmVxdWlyZXNfc3NsCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCiAKLVNVUFBPUlRTX1NTTCA9IEZhbHNlCi1pZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6Ci0gICAgaW1wb3J0IHNzbAorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQogCi0gICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydC5wZW0iKQorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzX2NvbnRleHQoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gYicrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKGNvbnRleHQ9Y3R4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQorCisKK2lmIFNVUFBPUlRTX1NTTDoKIAogICAgIGNsYXNzIER1bW15UE9QM19TU0xIYW5kbGVyKER1bW15UE9QM0hhbmRsZXIpOgogCkBAIC0yNjAsMzUgKzM0OCwxMyBAQAogICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCiAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc3NsX3NvY2tldCkKICAgICAgICAgICAgICMgTXVzdCB0cnkgaGFuZHNoYWtlIGJlZm9yZSBjYWxsaW5nIHB1c2goKQotICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LiA8dGltZXN0YW1wPicpCiAKLSAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5fc3NsX2FjY2VwdGluZzoKLSAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgRHVtbXlQT1AzSGFuZGxlci5oYW5kbGVfcmVhZChzZWxmKQotCi1yZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKIAogQHJlcXVpcmVzX3NzbAogY2xhc3MgVGVzdFBPUDNfU1NMQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CkBAIC0zMDYsMjAgKzM3Miw2MCBAQAogICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9ydCwgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAogICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5jbGllbnQgPSBwb3BsaWIuUE9QM19TU0woc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQogICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuY2xpZW50LnNvY2suY29udGV4dCwgY3R4KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGllbnQubm9vcCgpLnN0YXJ0c3dpdGgoYicrT0snKSkKIAorICAgIGRlZiB0ZXN0X3N0bHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQuc3RscykKKworICAgIHRlc3Rfc3Rsc19jb250ZXh0ID0gdGVzdF9zdGxzCisKKyAgICBkZWYgdGVzdF9zdGxzX2NhcGEoc2VsZik6CisgICAgICAgIGNhcGEgPSBzZWxmLmNsaWVudC5jYXBhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKKworQHJlcXVpcmVzX3NzbAorY2xhc3MgVGVzdFBPUDNfVExTQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CisgICAgIyByZXBlYXQgcHJldmlvdXMgdGVzdHMgYnkgdXNpbmcgcG9wbGliLlBPUDMuc3RscygpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlQT1AzU2VydmVyKChIT1NULCBQT1JUKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQsIHRpbWVvdXQ9MykKKyAgICAgICAgc2VsZi5jbGllbnQuc3RscygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xpZW50LmZpbGUgaXMgbm90IE5vbmUgYW5kIHNlbGYuY2xpZW50LnNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisgICAgICAgICAgICBleGNlcHQgcG9wbGliLmVycm9yX3Byb3RvOgorICAgICAgICAgICAgICAgICMgaGFwcGVucyBpbiB0aGUgdGVzdF90b29fbG9uZ19saW5lcyBjYXNlOyB0aGUgb3ZlcmxvbmcKKyAgICAgICAgICAgICAgICAjIHJlc3BvbnNlIHdpbGwgYmUgdHJlYXRlZCBhcyByZXNwb25zZSB0byBRVUlUIGFuZCByYWlzZQorICAgICAgICAgICAgICAgICMgdGhpcyBleGNlcHRpb24KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGInU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMzc3LDcgKzQ4Myw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtUZXN0UE9QM0NsYXNzLCBUZXN0VGltZW91dHMsCi0gICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3NdCisgICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3MsIFRlc3RQT1AzX1RMU0NsYXNzXQogICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgdHJ5OgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CmluZGV4IDAyYmI2YWMuLjFlY2VlYmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQpAQCAtNTgyLDggKzU4MiwxMCBAQAogICAgICAgICByLCB3ID0gb3MucGlwZTIob3MuT19DTE9FWEVDfG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwodywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgICMgdHJ5IHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBwaXBlOiB0aGlzIHNob3VsZCBmYWlsLCBub3QgYmxvY2sKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVhZCwgciwgMSkKICAgICAgICAgIyB0cnkgYSB3cml0ZSBiaWcgZW5vdWdoIHRvIGZpbGwtdXAgdGhlIHBpcGU6IHRoaXMgc2hvdWxkIGVpdGhlcgpAQCAtNjI2LDcgKzYyOCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCkBAIC02ODQsNDEgKzY4NiwzOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpLCAndGVzdCBuZWVkcyBwb3NpeC5nZXRjd2QoKScpCiAgICAgZGVmIHRlc3RfZ2V0Y3dkX2xvbmdfcGF0aG5hbWVzKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyk6Ci0gICAgICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJwotICAgICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAnLmdldGN3ZCcKKyAgICAgICAgZGlybmFtZSA9ICdnZXRjd2QtdGVzdC1kaXJlY3RvcnktMDEyMzQ1Njc4OWFiY2RlZi0wMTIzNDU2Nzg5MGFiY2RlZicKKyAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJwogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSMgICAgICAgICAgICAgICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwKLSMgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLgotIyAgICAgICAgICAgICAgIElzIHRoYXQgb2s/Ci0jICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sIGJlY2F1c2UKKyAgICAgICAgICAgICMgIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLiAgSXMgdGhhdCBvaz8KKyAgICAgICAgICAgICMgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCisgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IikKKyAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQogCi0gICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQotICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudF9wYXRoX2xlbmd0aCA8IDEwMjc6CisgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAotICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lKQorICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCiAKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQotICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdnZXRncm91cGxpc3QnKSwgInRlc3QgbmVlZHMgcG9zaXguZ2V0Z3JvdXBsaXN0KCkiKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocHdkLCAnZ2V0cHd1aWQnKSwgInRlc3QgbmVlZHMgcHdkLmdldHB3dWlkKCkiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQppbmRleCAwZTdkODY2Li40MTI4NDljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQpAQCAtMTg2LDYzICsxODYsNiBAQAogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2NyZWF0ZV9maWxlKGZpbGVuYW1lKToKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShiJ2ZvbycpCi0KLSAgICBkZWYgdGVzdF9zYW1lZmlsZShzZWxmKToKLSAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVmaWxlKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAicG9zaXhwYXRoLnNhbWVmaWxlIGRvZXMgbm90IHdvcmsgb24gbGlua3MgaW4gV2luZG93cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKLSAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rcyhzZWxmKToKLSAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQotCi0gICAgICAgIG9zLnN5bWxpbmsodGVzdF9mbjEsIHRlc3RfZm4yKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCi0gICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKLQotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKLQotCi0gICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6Ci0gICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQotICAgICAgICB0ZXN0X2ZucyA9IFt0ZXN0X2ZuXSoyCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKAotICAgICAgICBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICJwb3NpeHBhdGguc2FtZXN0YXQgZG9lcyBub3Qgd29yayBvbiBsaW5rcyBpbiBXaW5kb3dzIikKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAic3ltbGluayIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iKQotICAgIGRlZiB0ZXN0X3NhbWVzdGF0X29uX2xpbmtzKHNlbGYpOgotICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCi0gICAgICAgIHRlc3RfZm5zID0gKHRlc3RfZm4xLCB0ZXN0X2ZuMikKLSAgICAgICAgb3Muc3ltbGluaygqdGVzdF9mbnMpCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0gICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKLQotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKLSAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc2FtZXN0YXQpCi0KICAgICBkZWYgdGVzdF9pc21vdW50KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc21vdW50KCIvIiksIFRydWUpCiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKQEAgLTU5NSwxMSArNTM4LDYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLmdldGN3ZGIgPSByZWFsX2dldGN3ZGIKIAotICAgIGRlZiB0ZXN0X3NhbWVvcGVuZmlsZShzZWxmKToKLSAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGEsIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVvcGVuZmlsZShhLmZpbGVubygpLCBiLmZpbGVubygpKSkKLQogCiBjbGFzcyBQb3NpeENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IHBvc2l4cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQppbmRleCBhODUyOThlLi4zZDM2NGM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQpAQCAtMSwzICsxLDUgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisKIGltcG9ydCBwcHJpbnQKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCB1bml0dGVzdApAQCAtNTMwLDYgKzUzMiw1NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGRpY3QuZnJvbWtleXMoa2V5cywgMCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICd7JXI6IDAsICVyOiAwfScgJSB0dXBsZShzb3J0ZWQoa2V5cywga2V5PWlkKSkpCiAKKyAgICBkZWYgdGVzdF9zdHJfd3JhcChzZWxmKToKKyAgICAgICAgIyBwcHJpbnQgdHJpZXMgdG8gd3JhcCBzdHJpbmdzIGludGVsbGlnZW50bHkKKyAgICAgICAgZm94ID0gJ3RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgYSBsYXp5IGRvZycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChmb3gsIHdpZHRoPTIwKSwgIiIiXAorJ3RoZSBxdWljayBicm93biAnCisnZm94IGp1bXBlZCBvdmVyICcKKydhIGxhenkgZG9nJyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh7J2EnOiAxLCAnYic6IGZveCwgJ2MnOiAyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0yNiksICIiIlwKK3snYSc6IDEsCisgJ2InOiAndGhlIHF1aWNrIGJyb3duICcKKyAgICAgICdmb3gganVtcGVkIG92ZXIgJworICAgICAgJ2EgbGF6eSBkb2cnLAorICdjJzogMn0iIiIpCisgICAgICAgICMgV2l0aCBzb21lIHNwZWNpYWwgY2hhcmFjdGVycworICAgICAgICAjIC0gXG4gYWx3YXlzIHRyaWdnZXJzIGEgbmV3IGxpbmUgaW4gdGhlIHBwcmludAorICAgICAgICAjIC0gXHQgYW5kIFxuIGFyZSBlc2NhcGVkCisgICAgICAgICMgLSBub24tQVNDSUkgaXMgYWxsb3dlZAorICAgICAgICAjIC0gYW4gYXBvc3Ryb3BoZSBkb2Vzbid0IGRpc3J1cHQgdGhlIHBwcmludAorICAgICAgICBzcGVjaWFsID0gIlBvcnRvbnMgZGl4IGJvbnMgXCJ3aGlza3lzXCJcbsOgIGwnYXZvY2F0IGdvdWphdFx0IHF1aSBmdW1haXQgYXUgem9vIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPTIwKSwgIiIiXAorJ1BvcnRvbnMgZGl4IGJvbnMgJworJyJ3aGlza3lzIlxcbicKKyLDoCBsJ2F2b2NhdCAiCisnZ291amF0XFx0IHF1aSAnCisnZnVtYWl0IGF1IHpvbyciIiIpCisgICAgICAgICMgQW4gdW53cmFwcGFibGUgc3RyaW5nIGlzIGZvcm1hdHRlZCBhcyBpdHMgcmVwcgorICAgICAgICB1bndyYXBwYWJsZSA9ICJ4IiAqIDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHVud3JhcHBhYmxlLCB3aWR0aD04MCksIHJlcHIodW53cmFwcGFibGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KCcnKSwgIicnIikKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBwcHJpbnQgaXMgYSB1c2FibGUgcmVwcgorICAgICAgICBzcGVjaWFsICo9IDEwCisgICAgICAgIGZvciB3aWR0aCBpbiByYW5nZSgzLCA0MCk6CisgICAgICAgICAgICBmb3JtYXR0ZWQgPSBwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD13aWR0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiKCIgKyBmb3JtYXR0ZWQgKyAiKSIpLCBzcGVjaWFsKQorCisgICAgZGVmIHRlc3RfY29tcGFjdChzZWxmKToKKyAgICAgICAgbyA9IChbbGlzdChyYW5nZShpICogaSkpIGZvciBpIGluIHJhbmdlKDUpXSArCisgICAgICAgICAgICAgW2xpc3QocmFuZ2UoaSkpIGZvciBpIGluIHJhbmdlKDYpXSkKKyAgICAgICAgZXhwZWN0ZWQgPSAiIiJcCitbW10sIFswXSwgWzAsIDEsIDIsIDNdLAorIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSwKKyBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsCisgIDE0LCAxNV0sCisgW10sIFswXSwgWzAsIDFdLCBbMCwgMSwgMl0sIFswLCAxLCAyLCAzXSwKKyBbMCwgMSwgMiwgMywgNF1dIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobywgd2lkdGg9NDgsIGNvbXBhY3Q9VHJ1ZSksIGV4cGVjdGVkKQorCiAKIGNsYXNzIERvdHRlZFByZXR0eVByaW50ZXIocHByaW50LlByZXR0eVByaW50ZXIpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQppbmRleCA5ZDZkYmVhLi43ZWVhMzQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKQEAgLTEsNjIgKzEsNTUgQEAKLSIiIlRlc3QgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHByaW50IGZ1bmN0aW9uLgotIiIiCi0KLSMgSW4gMi42LCB0aGlzIGdpdmVzIHVzIHRoZSBiZWhhdmlvciB3ZSB3YW50LiAgSW4gMy4wLCBpdCBoYXMKLSMgIG5vIGZ1bmN0aW9uLCBidXQgaXQgc3RpbGwgbXVzdCBwYXJzZSBjb3JyZWN0bHkuCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCi0KIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogCi10cnk6Ci0gICAgIyAzLngKLSAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgMi54Ci0gICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBOb3REZWZpbmVkID0gb2JqZWN0KCkKIAogIyBBIGRpc3BhdGNoIHRhYmxlIGFsbCA4IGNvbWJpbmF0aW9ucyBvZiBwcm92aWRpbmcKLSMgIHNlcCwgZW5kLCBhbmQgZmlsZQorIyBzZXAsIGVuZCwgYW5kIGZpbGUuCiAjIEkgdXNlIHRoaXMgbWFjaGluZXJ5IHNvIHRoYXQgSSdtIG5vdCBqdXN0IHBhc3NpbmcgZGVmYXVsdAotIyAgdmFsdWVzIHRvIHByaW50LCBJJ20gZWl0aGVyIHBhc3Npbmcgb3Igbm90IHBhc3NpbmcgaW4gdGhlCi0jICBhcmd1bWVudHMKKyMgdmFsdWVzIHRvIHByaW50LCBJJ20gZWl0aGVyIHBhc3Npbmcgb3Igbm90IHBhc3NpbmcgaW4gdGhlCisjIGFyZ3VtZW50cy4KIGRpc3BhdGNoID0gewogICAgIChGYWxzZSwgRmFsc2UsIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludCgqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoKmFyZ3MpLAogICAgIChGYWxzZSwgRmFsc2UsIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChGYWxzZSwgVHJ1ZSwgIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgKmFyZ3MpLAogICAgIChGYWxzZSwgVHJ1ZSwgIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChUcnVlLCAgRmFsc2UsIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgKmFyZ3MpLAogICAgIChUcnVlLCAgRmFsc2UsIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChUcnVlLCAgVHJ1ZSwgIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgKmFyZ3MpLAogICAgIChUcnVlLCAgVHJ1ZSwgIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAotICAgIH0KKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCBmaWxlPWZpbGUsICphcmdzKSwKK30KKwogCiAjIENsYXNzIHVzZWQgdG8gdGVzdCBfX3N0cl9fIGFuZCBwcmludAogY2xhc3MgQ2xhc3NXaXRoX19zdHJfXzoKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CiAgICAgICAgIHNlbGYueCA9IHgKKwogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi54CiAKLWNsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBhcmdzLAotICAgICAgICAgICAgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkLCBmaWxlPU5vdERlZmluZWQpOgotICAgICAgICAjIENhcHR1cmUgc3lzLnN0ZG91dCBpbiBhIFN0cmluZ0lPLiAgQ2FsbCBwcmludCB3aXRoIGFyZ3MsCi0gICAgICAgICMgIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0Ci0gICAgICAgICMgIG11c3QgbWF0Y2ggZXhwZWN0ZWQuCiAKLSAgICAgICAgIyBMb29rIHVwIHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gaWYgc2VwLCBlbmQsIGFuZCBmaWxlCi0gICAgICAgICMgIGFyZSBkZWZpbmVkCitjbGFzcyBUZXN0UHJpbnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHByaW50IGZ1bmN0aW9uLiIiIgorCisgICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBhcmdzLAorICAgICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6CisgICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKKyAgICAgICAgIyBhbmQgd2l0aCBzZXAsIGVuZCwgYW5kIGZpbGUsIGlmIHRoZXkncmUgZGVmaW5lZC4gIFJlc3VsdAorICAgICAgICAjIG11c3QgbWF0Y2ggZXhwZWN0ZWQuCisKKyAgICAgICAgIyBMb29rIHVwIHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gaWYgc2VwLCBlbmQsCisgICAgICAgICMgYW5kIGZpbGUgYXJlIGRlZmluZWQuCiAgICAgICAgIGZuID0gZGlzcGF0Y2hbKHNlcCBpcyBub3QgTm90RGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlzIG5vdCBOb3REZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIG5vdCBOb3REZWZpbmVkKV0KQEAgLTY5LDcgKzYyLDcgQEAKICAgICBkZWYgdGVzdF9wcmludChzZWxmKToKICAgICAgICAgZGVmIHgoZXhwZWN0ZWQsIGFyZ3MsIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCk6CiAgICAgICAgICAgICAjIFJ1biB0aGUgdGVzdCAyIHdheXM6IG5vdCB1c2luZyBmaWxlLCBhbmQgdXNpbmcKLSAgICAgICAgICAgICMgIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTworICAgICAgICAgICAgIyBmaWxlIGRpcmVjdGVkIHRvIGEgU3RyaW5nSU8uCiAKICAgICAgICAgICAgIHNlbGYuY2hlY2soZXhwZWN0ZWQsIGFyZ3MsIHNlcD1zZXAsIGVuZD1lbmQpCiAKQEAgLTEwMSwxMSArOTQsNiBAQAogICAgICAgICB4KCcqXG4nLCAoQ2xhc3NXaXRoX19zdHJfXygnKicpLCkpCiAgICAgICAgIHgoJ2FiYyAxXG4nLCAoQ2xhc3NXaXRoX19zdHJfXygnYWJjJyksIDEpKQogCi0jICAgICAgICAjIDIueCB1bmljb2RlIHRlc3RzCi0jICAgICAgICB4KHUnMSAyXG4nLCAoJzEnLCB1JzInKSkKLSMgICAgICAgIHgodSd1XDEyMzRcbicsICh1J3VcMTIzNCcsKSkKLSMgICAgICAgIHgodScgIGFiYyAxXG4nLCAoJyAnLCBDbGFzc1dpdGhfX3N0cl9fKHUnYWJjJyksIDEpKQotCiAgICAgICAgICMgZXJyb3JzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJpbnQsICcnLCBzZXA9MykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIGVuZD0zKQpAQCAtMTEzLDEyICsxMDEsMTQgQEAKIAogICAgIGRlZiB0ZXN0X3ByaW50X2ZsdXNoKHNlbGYpOgogICAgICAgICAjIG9wZXJhdGlvbiBvZiB0aGUgZmx1c2ggZmxhZwotICAgICAgICBjbGFzcyBmaWxlbGlrZSgpOgorICAgICAgICBjbGFzcyBmaWxlbGlrZToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLndyaXR0ZW4gPSAnJwogICAgICAgICAgICAgICAgIHNlbGYuZmx1c2hlZCA9IDAKKwogICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHN0cik6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0dGVuICs9IHN0cgorCiAgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVkICs9IDEKIApAQCAtMTMwLDE1ICsxMjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZsdXNoZWQsIDIpCiAKICAgICAgICAgIyBlbnN1cmUgZXhjZXB0aW9ucyBmcm9tIGZsdXNoIGFyZSBwYXNzZWQgdGhyb3VnaAotICAgICAgICBjbGFzcyBub2ZsdXNoKCk6CisgICAgICAgIGNsYXNzIG5vZmx1c2g6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgICAgICBwYXNzCisKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBwcmludCwgMSwgZmlsZT1ub2ZsdXNoKCksIGZsdXNoPVRydWUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UHJpbnQpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQppbmRleCBjZDdlYzU4Li4xZmMzYzQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CkBAIC0zLDkgKzMsMTEgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBwc3RhdHMKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCiBmcm9tIGRpZmZsaWIgaW1wb3J0IHVuaWZpZWRfZGlmZgogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiAKIGltcG9ydCBwcm9maWxlCiBmcm9tIHRlc3QucHJvZmlsZWUgaW1wb3J0IHRlc3RmdW5jLCB0aW1lcgpAQCAtMTQsOSArMTYsMTMgQEAKIGNsYXNzIFByb2ZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHByb2ZpbGVyY2xhc3MgPSBwcm9maWxlLlByb2ZpbGUKKyAgICBwcm9maWxlcm1vZHVsZSA9IHByb2ZpbGUKICAgICBtZXRob2RuYW1lcyA9IFsncHJpbnRfc3RhdHMnLCAncHJpbnRfY2FsbGVycycsICdwcmludF9jYWxsZWVzJ10KICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gJzowKG1heCknCiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisKICAgICBkZWYgZ2V0X2V4cGVjdGVkX291dHB1dChzZWxmKToKICAgICAgICAgcmV0dXJuIF9Qcm9maWxlT3V0cHV0CiAKQEAgLTc0LDYgKzgwLDE5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuZXhwZWN0ZWRfbWF4X291dHB1dCwgcmVzLAogICAgICAgICAgICAgICAgICJQcm9maWxpbmcgezAhcn0gZGlkbid0IHJlcG9ydCBtYXg6XG57MX0iLmZvcm1hdChzdG10LCByZXMpKQogCisgICAgZGVmIHRlc3RfcnVuKHNlbGYpOgorICAgICAgICB3aXRoIHNpbGVudCgpOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW4oImludCgnMScpIikKKyAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW4oImludCgnMScpIiwgZmlsZW5hbWU9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKworICAgIGRlZiB0ZXN0X3J1bmN0eChzZWxmKToKKyAgICAgICAgd2l0aCBzaWxlbnQoKToKKyAgICAgICAgICAgIHNlbGYucHJvZmlsZXJtb2R1bGUucnVuY3R4KCJ0ZXN0ZnVuYygpIiwgZ2xvYmFscygpLCBsb2NhbHMoKSkKKyAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPVRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFRFU1RGTikpCisKIAogZGVmIHJlZ2VuZXJhdGVfZXhwZWN0ZWRfb3V0cHV0KGZpbGVuYW1lLCBjbHMpOgogICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucnN0cmlwKCdjbycpCkBAIC05NSw2ICsxMTQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLCByZXN1bHRzW2krMV0pKQogICAgICAgICBmLndyaXRlKCdcbmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6XG4gICAgbWFpbigpXG4nKQogCitAY29udGV4dG1hbmFnZXIKK2RlZiBzaWxlbnQoKToKKyAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgdHJ5OgorICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChQcm9maWxlVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKaW5kZXggMjkyOTdmOC4uODkxNjg2MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICAgICAgIyNkZWJ1ZygiUmVhZGluZyBmcm9tIG1hc3Rlcl9mZCBub3cgdGhhdCB0aGUgY2hpbGQgaGFzIGV4aXRlZCIpCiAgICAgICAgICAgICAjI3RyeToKICAgICAgICAgICAgICMjICAgIHMxID0gb3MucmVhZChtYXN0ZXJfZmQsIDEwMjQpCi0gICAgICAgICAgICAjI2V4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICMjZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIyAgICBwYXNzCiAgICAgICAgICAgICAjI2Vsc2U6CiAgICAgICAgICAgICAjIyAgICByYWlzZSBUZXN0RmFpbGVkKCJSZWFkIGZyb20gbWFzdGVyX2ZkIGRpZCBub3QgcmFpc2UgZXhjZXB0aW9uIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQppbmRleCBmM2MxYTZhLi4xNTRjMDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CkBAIC0xLDcgKzEsOSBAQAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtMTMsNyArMTUsNyBAQAogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QucHknKQogICAgICAgICBzZWxmLnB5Y19wYXRoID0gc2VsZi5zb3VyY2VfcGF0aCArICdjJwotICAgICAgICBzZWxmLmNhY2hlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKKyAgICAgICAgc2VsZi5jYWNoZV9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgc2VsZi5jd2RfZHJpdmUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUob3MuZ2V0Y3dkKCkpWzBdCiAgICAgICAgICMgSW4gdGhlc2UgdGVzdHMgd2UgY29tcHV0ZSByZWxhdGl2ZSBwYXRocy4gIFdoZW4gdXNpbmcgV2luZG93cywgdGhlCiAgICAgICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBwYXRoIGFuZCB0aGUgJ3NlbGYuc291cmNlX3BhdGgnIG1pZ2h0IGJlCkBAIC0zNSw2ICszNywyNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAorICAgIGRlZiB0ZXN0X2RvX25vdF9vdmVyd3JpdGVfc3ltbGlua3Moc2VsZik6CisgICAgICAgICMgSW4gdGhlIGZhY2Ugb2YgYSBjZmlsZSBhcmd1bWVudCBiZWluZyBhIHN5bWxpbmssIGJhaWwgb3V0LgorICAgICAgICAjIElzc3VlICMxNzIyMgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNlbGYucHljX3BhdGggKyAnLmFjdHVhbCcsIHNlbGYucHljX3BhdGgpCisgICAgICAgIGV4Y2VwdCAoTm90SW1wbGVtZW50ZWRFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduZWVkIHRvIGJlIGFibGUgdG8gY3JlYXRlIGEgc3ltbGluayBmb3IgYSBmaWxlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzbGluayhzZWxmLnB5Y19wYXRoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMob3MuZGV2bnVsbCkgb3Igb3MucGF0aC5pc2ZpbGUob3MuZGV2bnVsbCksCisgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgb3MuZGV2bnVsbCBhbmQgZm9yIGl0IHRvIGJlIGEgbm9uLXJlZ3VsYXIgZmlsZScpCisgICAgZGVmIHRlc3RfZG9fbm90X292ZXJ3cml0ZV9ub25yZWd1bGFyX2ZpbGVzKHNlbGYpOgorICAgICAgICAjIEluIHRoZSBmYWNlIG9mIGEgY2ZpbGUgYXJndW1lbnQgYmVpbmcgYSBub24tcmVndWxhciBmaWxlLCBiYWlsIG91dC4KKyAgICAgICAgIyBJc3N1ZSAjMTcyMjIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIG9zLmRldm51bGwpCisKICAgICBkZWYgdGVzdF9jYWNoZV9wYXRoKHNlbGYpOgogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCkBAIC01NCw4ICs3NiwyMiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5Q29tcGlsZVRlc3RzKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihvcywgJ2dldGV1aWQnKSBhbmQgb3MuZ2V0ZXVpZCgpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAnbm9uLXJvb3QgdXNlciByZXF1aXJlZCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsCisgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IGNvbnRyb2wgZGlyZWN0b3J5IHBlcm1pc3Npb25zIG9uIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnNfcHJvcGFnYXRlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGV4Y2VwdGlvbnMgcmFpc2VkIHRoYW5rcyB0byBpc3N1ZXMgd2l0aCB3cml0aW5nCisgICAgICAgICMgYnl0ZWNvZGUuCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MjQ0CisgICAgICAgIG1vZGUgPSBvcy5zdGF0KHNlbGYuZGlyZWN0b3J5KQorICAgICAgICBvcy5jaG1vZChzZWxmLmRpcmVjdG9yeSwgc3RhdC5TX0lSRUFEKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2htb2Qoc2VsZi5kaXJlY3RvcnksIG1vZGUuc3RfbW9kZSkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weSBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CmluZGV4IGU4Mzk4OWUuLjg4YWZmODkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgncHljbGJyJykKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnYXN0JykKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZG9jdGVzdCcsIGlnbm9yZT0oIlRlc3RSZXN1bHRzIiwgIl9TcG9vZk91dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEb2NUZXN0Q2FzZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9jVGVzdENhc2UiLCAnX0RvY1Rlc3RTdWl0ZScpKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkaWZmbGliJywgaWdub3JlPSgiTWF0Y2giLCkpCiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JzKHNlbGYpOgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIGNtKCdyYW5kb20nLCBpZ25vcmU9KCdSYW5kb20nLCkpICAjIGZyb20gX3JhbmRvbSBpbXBvcnQgUmFuZG9tIGFzIENvcmVHZW5lcmF0b3IKICAgICAgICAgY20oJ2NnaScsIGlnbm9yZT0oJ2xvZycsKSkgICAgICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCiAgICAgICAgIGNtKCdwaWNrbGUnKQotICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKKyAgICAgICAgY20oJ2FpZmMnLCBpZ25vcmU9KCdvcGVuZnAnLCAnX2FpZmNfcGFyYW1zJykpICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCiAgICAgICAgIGNtKCdzcmVfcGFyc2UnLCBpZ25vcmU9KCdkdW1wJywpKSAjIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgogICAgICAgICBjbSgncGRiJykKICAgICAgICAgY20oJ3B5ZG9jJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CmluZGV4IDQzZjQxNjMuLmNkZjI4YTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWRvYy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgeG1sLmV0cmVlCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTI5LDEwICszMCw2IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCi0jIEp1c3QgaW4gY2FzZSBzeXMubW9kdWxlc1sidGVzdCJdIGhhcyB0aGUgb3B0aW9uYWwgYXR0cmlidXRlIF9fbG9hZGVyX18uCi1pZiBoYXNhdHRyKHB5ZG9jX21vZCwgIl9fbG9hZGVyX18iKToKLSAgICBkZWwgcHlkb2NfbW9kLl9fbG9hZGVyX18KLQogaWYgdGVzdC5zdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKICAgICBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MgPSAoCiAgICAgICAgICdkaWN0aW9uYXJ5IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMgKGlmIGRlZmluZWQpJywKQEAgLTIxMiw2ICsyMDksNzUgQEAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCiBiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCAlciIKIAorZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIERBIGluIG1vZHVsZSAlczoKKworY2xhc3MgREEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIF9fZGljdF9fJXMKKyB8XHgyMFx4MjAKKyB8ICBfX3dlYWtyZWZfXyVzCisgfFx4MjBceDIwCisgfCAgaGFtCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YToKKyB8XHgyMFx4MjAKKyB8ICBoYW0gPSAnc3BhbScKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ2xhc3MgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzcyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIExJRkUgPSA0MgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMiA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczIgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczIoQ2xhc3MxKQorIHwgIE1ldGhvZCByZXNvbHV0aW9uIG9yZGVyOgorIHwgICAgICBDbGFzczIKKyB8ICAgICAgQ2xhc3MxCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEzOgorIHxceDIwXHgyMAorIHwgIHRocmVlID0gMworIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEyOgorIHxceDIwXHgyMAorIHwgIHR3byA9IDIKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiA9ICIiIgorSGVscCBvbiBjbGFzcyBDIGluIG1vZHVsZSAlczoKKworY2xhc3MgQyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgaGVyZSA9ICdwcmVzZW50IScKKyIiIi5zdHJpcCgpCisKIGRlZiBydW5fcHlkb2MobW9kdWxlX25hbWUsICphcmdzLCAqKmVudik6CiAgICAgIiIiCiAgICAgUnVucyBweWRvYyBvbiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gUmV0dXJucyB0aGUgc3RyaXBwZWQKQEAgLTQyMSw2ICs0ODcsMzEgQEAKICAgICAgICAgICAgIHN5bm9wc2lzID0gcHlkb2Muc3lub3BzaXMoVEVTVEZOLCB7fSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lub3BzaXMsICdsaW5lIDE6IGhceGU5JykKIAorICAgIGRlZiB0ZXN0X3NwbGl0ZG9jX3dpdGhfZGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIGV4YW1wbGVfc3RyaW5nID0gIkkgQW0gQSBEb2NcblxuXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLnNwbGl0ZG9jKGV4YW1wbGVfc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ0kgQW0gQSBEb2MnLCAnXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uJykpCisKKyAgICBkZWYgdGVzdF9pc19vYmplY3Rfb3JfbWV0aG9kKHNlbGYpOgorICAgICAgICBkb2MgPSBweWRvYy5Eb2MoKQorICAgICAgICAjIEJvdW5kIE1ldGhvZAorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGRvYy5mYWlsKSkKKyAgICAgICAgIyBNZXRob2QgRGVzY3JpcHRvcgorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGludC5fX2FkZF9fKSkKKyAgICAgICAgIyBTdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShweWRvYy5faXNfc29tZV9tZXRob2QoIkkgYW0gbm90IGEgbWV0aG9kIikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5fbm90X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdGVzdF9kaXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB5ZG9jLmlzcGFja2FnZSh0ZXN0X2RpcikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5faXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0ZXN0X2RpcjoKKyAgICAgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIG9wZW4oaW5pdF9wYXRoLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShweWRvYy5pc3BhY2thZ2UodGVzdF9kaXIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKGluaXRfcGF0aCkKKwogICAgIGRlZiB0ZXN0X2FsbG1ldGhvZHMoc2VsZik6CiAgICAgICAgICMgaXNzdWUgMTc0NzY6IGFsbG1ldGhvZHMgd2FzIG5vIGxvbmdlciByZXR1cm5pbmcgdW5ib3VuZCBtZXRob2RzLgogICAgICAgICAjIFRoaXMgdGVzdCBpcyBhIGJpdCBmcmFnaWxlIGluIHRoZSBmYWNlIG9mIGNoYW5nZXMgdG8gb2JqZWN0IGFuZCB0eXBlLApAQCAtNjE1LDYgKzcwNiwxMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocHlkb2MuSGVscGVyLmtleXdvcmRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoa2V5d29yZC5rd2xpc3QpKQogCitjbGFzcyBQeWRvY1dpdGhNZXRhQ2xhc3Nlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgREEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzID0gdHVwbGUoJ1xuIHwgICAgICAnICsgcyBpZiBzIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoREEpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gJSAoCisgICAgICAgICAgICAgICAgKF9fbmFtZV9fLCkgKyBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5nc1s6Ml0pCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X3ZpcnR1YWxDbGFzc0F0dHJpYnV0ZVdpdGhPbmVNZXRhKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdMSUZFJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0xJRkUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4xICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfdmlydHVhbENsYXNzQXR0cmlidXRlV2l0aFR3b01ldGEoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldCgKKyAgICAgICAgICAgICAgICAgICAgWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0aHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgTWV0YTEuX19kaXJfXyhjbHMpICsgTWV0YTIuX19kaXJfXyhjbHMpKSkpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0aHJlZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MxKG1ldGFjbGFzcz1NZXRhMSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIENsYXNzMihDbGFzczEsIG1ldGFjbGFzcz1NZXRhMyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZhaWwxID0gZmFpbDIgPSBGYWxzZQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MxKQorICAgICAgICBleHBlY3RlZF90ZXh0MSA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjIgJSBfX25hbWVfXworICAgICAgICByZXN1bHQxID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQxICE9IGV4cGVjdGVkX3RleHQxOgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dDEsIHJlc3VsdDEpCisgICAgICAgICAgICBmYWlsMSA9IFRydWUKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzMikKKyAgICAgICAgZXhwZWN0ZWRfdGV4dDIgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4zICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0MiA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0MiAhPSBleHBlY3RlZF90ZXh0MjoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQyLCByZXN1bHQyKQorICAgICAgICAgICAgZmFpbDIgPSBUcnVlCisgICAgICAgIGlmIGZhaWwxIG9yIGZhaWwyOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJywgJ2hlcmUnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIGhlcmUgPSAncHJlc2VudCEnCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKIEByZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CkBAIC02MjQsNiArODM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NVcmxIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jV2l0aE1ldGFDbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKaW5kZXggZDM2M2E2YS4uN2QxYTUzYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKQEAgLTEsMTAgKzEsMTIgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHRpbWUKIGltcG9ydCBwaWNrbGUKIGltcG9ydCB3YXJuaW5ncworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIGZyb20gbWF0aCBpbXBvcnQgbG9nLCBleHAsIHBpLCBmc3VtLCBzaW4KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC00Niw2ICs0OCw0OCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNlZWQsIDEsIDIsIDMsIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZShzZWxmLmdlbiksIFtdKQogCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5fdXJhbmRvbScpICMgb3MudXJhbmRvbQorICAgIGRlZiB0ZXN0X3NlZWRfd2hlbl9yYW5kb21uZXNzX3NvdXJjZV9ub3RfZm91bmQoc2VsZiwgdXJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uc2VlZCgpIHVzZXMgdGltZS50aW1lKCkgd2hlbiBhbiBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGZvdW5kLiBUbyB0ZXN0IHRoaXMgb24gbWFjaGluZXMgd2VyZSBpdAorICAgICAgICAjIGV4aXN0cywgcnVuIHRoZSBhYm92ZSB0ZXN0LCB0ZXN0X3NlZWRhcmdzKCksIGFnYWluIGFmdGVyIG1vY2tpbmcKKyAgICAgICAgIyBvcy51cmFuZG9tKCkgc28gdGhhdCBpdCByYWlzZXMgdGhlIGV4Y2VwdGlvbiBleHBlY3RlZCB3aGVuIHRoZQorICAgICAgICAjIHJhbmRvbW5lc3Mgc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgIHVyYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2VsZi50ZXN0X3NlZWRhcmdzKCkKKworICAgIGRlZiB0ZXN0X3NodWZmbGUoc2VsZik6CisgICAgICAgIHNodWZmbGUgPSBzZWxmLmdlbi5zaHVmZmxlCisgICAgICAgIGxzdCA9IFtdCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgW10pCisgICAgICAgIGxzdCA9IFszN10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbMzddKQorICAgICAgICBzZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgc2h1ZmZsZWRfc2VxcyA9IFtsaXN0KHJhbmdlKG4pKSBmb3IgbiBpbiByYW5nZSgxMCldCisgICAgICAgIGZvciBzaHVmZmxlZF9zZXEgaW4gc2h1ZmZsZWRfc2VxczoKKyAgICAgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfc2VxKQorICAgICAgICBmb3IgKHNlcSwgc2h1ZmZsZWRfc2VxKSBpbiB6aXAoc2Vxcywgc2h1ZmZsZWRfc2Vxcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCBsZW4oc2h1ZmZsZWRfc2VxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlcSksIHNldChzaHVmZmxlZF9zZXEpKQorICAgICAgICAjIFRoZSBhYm92ZSB0ZXN0cyBhbGwgd291bGQgcGFzcyBpZiB0aGUgc2h1ZmZsZSB3YXMgYQorICAgICAgICAjIG5vLW9wLiBUaGUgZm9sbG93aW5nIG5vbi1kZXRlcm1pbmlzdGljIHRlc3QgY292ZXJzIHRoYXQuICBJdAorICAgICAgICAjIGFzc2VydHMgdGhhdCB0aGUgc2h1ZmZsZWQgc2VxdWVuY2Ugb2YgMTAwMCBkaXN0aW5jdCBlbGVtZW50cworICAgICAgICAjIG11c3QgYmUgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9uZS4gQWx0aG91Z2ggdGhlcmUgaXMKKyAgICAgICAgIyBtYXRoZW1hdGljYWxseSBhIG5vbi16ZXJvIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBjb3VsZAorICAgICAgICAjIGFjdHVhbGx5IGhhcHBlbiBpbiBhIGdlbnVpbmVseSByYW5kb20gc2h1ZmZsZSwgaXQgaXMKKyAgICAgICAgIyBjb21wbGV0ZWx5IG5lZ2xpZ2libGUsIGdpdmVuIHRoYXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZQorICAgICAgICAjIHBlcm11dGF0aW9ucyBvZiAxMDAwIG9iamVjdHMgaXMgMTAwMCEgKGZhY3RvcmlhbCBvZiAxMDAwKSwKKyAgICAgICAgIyB3aGljaCBpcyBjb25zaWRlcmFibHkgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBhdG9tcyBpbiB0aGUKKyAgICAgICAgIyB1bml2ZXJzZS4uLgorICAgICAgICBsc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlZF9sc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlKHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzdCAhPSBzaHVmZmxlZF9sc3QpCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKwogICAgIGRlZiB0ZXN0X2Nob2ljZShzZWxmKToKICAgICAgICAgY2hvaWNlID0gc2VsZi5nZW4uY2hvaWNlCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CkBAIC02NSw2ICsxMDksOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odW5pcSksIGspCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pcSA8PSBzZXQocG9wdWxhdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZW4uc2FtcGxlKFtdLCAwKSwgW10pICAjIHRlc3QgZWRnZSBjYXNlIE49PWs9PTAKKyAgICAgICAgIyBFeGNlcHRpb24gcmFpc2VkIGlmIHNpemUgb2Ygc2FtcGxlIGV4Y2VlZHMgdGhhdCBvZiBwb3B1bGF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLnNhbXBsZSwgcG9wdWxhdGlvbiwgTisxKQogCiAgICAgZGVmIHRlc3Rfc2FtcGxlX2Rpc3RyaWJ1dGlvbihzZWxmKToKICAgICAgICAgIyBGb3IgdGhlIGVudGlyZSBhbGxvd2FibGUgcmFuZ2Ugb2YgMCA8PSBrIDw9IE4sIHZhbGlkYXRlIHRoYXQKQEAgLTIwNSw2ICsyNTEsMjUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJhbmdlKHN0YXJ0LHN0b3ApKSwKICAgICAgICAgICAgICAgICBzZXQoW3NlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCxzdG9wKSBmb3IgaSBpbiByYW5nZSgxMDApXSkpCiAKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2Vfbm9udW5pdF9zdGVwKHNlbGYpOgorICAgICAgICByaW50ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDAsIDEwLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJpbnQsICgwLCAyLCA0LCA2LCA4KSkKKyAgICAgICAgcmludCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgwLCAyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJpbnQsIDApCisKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfZXJyb3JzKHNlbGYpOgorICAgICAgICByYWlzZXMgPSBwYXJ0aWFsKHNlbGYuYXNzZXJ0UmFpc2VzLCBWYWx1ZUVycm9yLCBzZWxmLmdlbi5yYW5kcmFuZ2UpCisgICAgICAgICMgRW1wdHkgcmFuZ2UKKyAgICAgICAgcmFpc2VzKDMsIDMpCisgICAgICAgIHJhaXNlcygtNzIxKQorICAgICAgICByYWlzZXMoMCwgMTAwLCAtMTIpCisgICAgICAgICMgTm9uLWludGVnZXIgc3RhcnQvc3RvcAorICAgICAgICByYWlzZXMoMy4xNDE1OSkKKyAgICAgICAgcmFpc2VzKDAsIDIuNzE4MjgpCisgICAgICAgICMgWmVybyBhbmQgbm9uLWludGVnZXIgc3RlcAorICAgICAgICByYWlzZXMoMCwgNDIsIDApCisgICAgICAgIHJhaXNlcygwLCA0MiwgMy4xNDE1OSkKKwogICAgIGRlZiB0ZXN0X2dlbnJhbmRiaXRzKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSByYW5nZXMKICAgICAgICAgZm9yIGsgaW4gcmFuZ2UoMSwgMTAwMCk6CkBAIC0yNzQsNiArMzM5LDE2IEBACiAgICAgICAgICMgTGFzdCBlbGVtZW50IHMvYiBhbiBpbnQgYWxzbwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKDAsKSo2MjQrKCdhJywpLCBOb25lKSkKIAorICAgICAgICAjIExpdHRsZSB0cmljayB0byBtYWtlICJ0dXBsZSh4ICUgKDIqKjMyKSBmb3IgeCBpbiBpbnRlcm5hbHN0YXRlKSIKKyAgICAgICAgIyByYWlzZSBWYWx1ZUVycm9yLiBJIGNhbm5vdCB0aGluayBvZiBhIHNpbXBsZSB3YXkgdG8gYWNoaWV2ZSB0aGlzLCBzbworICAgICAgICAjIEkgYW0gb3B0aW5nIGZvciB1c2luZyBhIGdlbmVyYXRvciBhcyB0aGUgbWlkZGxlIGFyZ3VtZW50IG9mIHNldHN0YXRlCisgICAgICAgICMgd2hpY2ggYXR0ZW1wdHMgdG8gY2FzdCBhIE5hTiB0byBpbnRlZ2VyLgorICAgICAgICBzdGF0ZV92YWx1ZXMgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpWzFdCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IGxpc3Qoc3RhdGVfdmFsdWVzKQorICAgICAgICBzdGF0ZV92YWx1ZXNbLTFdID0gZmxvYXQoJ25hbicpCisgICAgICAgIHN0YXRlID0gKGludCh4KSBmb3IgeCBpbiBzdGF0ZV92YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCBzdGF0ZSwgTm9uZSkpCisKICAgICBkZWYgdGVzdF9yZWZlcmVuY2VJbXBsZW1lbnRhdGlvbihzZWxmKToKICAgICAgICAgIyBDb21wYXJlIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gd2l0aCByZXN1bHRzIGZyb20gdGhlIG9yaWdpbmFsCiAgICAgICAgICMgY29kZS4gIENyZWF0ZSAyMDAwIDUzLWJpdCBwcmVjaXNpb24gcmFuZG9tIGZsb2F0cy4gIENvbXBhcmUgb25seQpAQCAtNDEzLDYgKzQ4OCwzOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKSAgICAgICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLlJhbmRvbS5yYW5kb20nKQorICAgIGRlZiB0ZXN0X3JhbmRiZWxvd19vdmVycmlkZW5fcmFuZG9tKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uX3JhbmRiZWxvdygpIGNhbiBvbmx5IHVzZSByYW5kb20oKSB3aGVuIHRoZSBidWlsdC1pbiBvbmUKKyAgICAgICAgIyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2Qgd2FzIHN1cHBsaWVkLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IHJhbmRvbS5TeXN0ZW1SYW5kb20oKS5yYW5kb20KKyAgICAgICAgbWF4c2l6ZSA9IDE8PHJhbmRvbS5CUEYKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgICMgUG9wdWxhdGlvbiByYW5nZSB0b28gbGFyZ2UgKG4gPj0gbWF4c2l6ZSkKKyAgICAgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobWF4c2l6ZSsxLCBtYXhzaXplID0gbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyg1NjQwLCBtYXhzaXplID0gbWF4c2l6ZSkKKworICAgICAgICAjIFRoaXMgbWlnaHQgYmUgZ29pbmcgdG9vIGZhciB0byB0ZXN0IGEgc2luZ2xlIGxpbmUsIGJ1dCBiZWNhdXNlIG9mIG91cgorICAgICAgICAjIG5vYmxlIGFpbSBvZiBhY2hpZXZpbmcgMTAwJSB0ZXN0IGNvdmVyYWdlIHdlIG5lZWQgdG8gd3JpdGUgYSBjYXNlIGluCisgICAgICAgICMgd2hpY2ggdGhlIGZvbGxvd2luZyBsaW5lIGluIFJhbmRvbS5fcmFuZGJlbG93KCkgZ2V0cyBleGVjdXRlZDoKKyAgICAgICAgIworICAgICAgICAjIHJlbSA9IG1heHNpemUgJSBuCisgICAgICAgICMgbGltaXQgPSAobWF4c2l6ZSAtIHJlbSkgLyBtYXhzaXplCisgICAgICAgICMgciA9IHJhbmRvbSgpCisgICAgICAgICMgd2hpbGUgciA+PSBsaW1pdDoKKyAgICAgICAgIyAgICAgciA9IHJhbmRvbSgpICMgPD09ICpUaGlzIGxpbmUqIDw9PTwKKyAgICAgICAgIworICAgICAgICAjIFRoZXJlZm9yZSwgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHdoaWxlIGxvb3AgaXMgZXhlY3V0ZWQgYXQgbGVhc3QKKyAgICAgICAgIyBvbmNlLCB3ZSBuZWVkIHRvIG1vY2sgcmFuZG9tKCkgc28gdGhhdCBpdCByZXR1cm5zIGEgbnVtYmVyIGdyZWF0ZXIKKyAgICAgICAgIyB0aGFuICdsaW1pdCcgdGhlIGZpcnN0IHRpbWUgaXQgZ2V0cyBjYWxsZWQuCisKKyAgICAgICAgbiA9IDQyCisgICAgICAgIGVwc2lsb24gPSAwLjAxCisgICAgICAgIGxpbWl0ID0gKG1heHNpemUgLSAobWF4c2l6ZSAlIG4pKSAvIG1heHNpemUKKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbbGltaXQgKyBlcHNpbG9uLCBsaW1pdCAtIGVwc2lsb25dCisgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobiwgbWF4c2l6ZSA9IG1heHNpemUpCisKICAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfYnVnXzE1OTA4OTEoc2VsZik6CiAgICAgICAgIHN0YXJ0ID0gMTAwMDAwMDAwMDAwMAogICAgICAgICBzdG9wID0gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMApAQCAtNTMwLDYgKzYzNywxMDYgQEAKICAgICAgICAgcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgwLCAxZTE1KQogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTAwKQogCisgICAgZGVmIHRlc3RfZ2FtbWF2YXJpYXRlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBCb3RoIGFscGhhIGFuZCBiZXRhIG11c3QgYmUgPiAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDEsIC0zKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20ucmFuZG9tJykKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZnVsbF9jb2RlX2NvdmVyYWdlKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBvZiByYW5kb20uZ2FtbWF2YXJpYXRlKCksIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJ2FscGhhJy4gV2hhdCB3ZQorICAgICAgICAjIGFyZSBnb2luZyB0byBkbyBoZXJlIGlzIHRvIGZpeCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHJhbmRvbSgpIHRvCisgICAgICAgICMgZ2VuZXJhdGUgdGVzdCBjYXNlcyB0aGF0IHByb3ZpZGUgMTAwJSBsaW5lIGNvdmVyYWdlIG9mIHRoZSBtZXRob2QuCisKKyAgICAgICAgIyAjMTogYWxwaGEgPiAxLjA6IHdlIHdhbnQgdGhlIGZpcnN0IHJhbmRvbSBudW1iZXIgdG8gYmUgb3V0c2lkZSB0aGUKKyAgICAgICAgIyBbMWUtNywgLjk5OTk5OTldIHJhbmdlLCBzbyB0aGF0IHRoZSBjb250aW51ZSBzdGF0ZW1lbnQgZXhlY3V0ZXMKKyAgICAgICAgIyBvbmNlLiBUaGUgdmFsdWVzIG9mIHUxIGFuZCB1MiB3aWxsIGJlIDAuNSBhbmQgMC4zLCByZXNwZWN0aXZlbHkuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNSwgMC4zXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4xLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTMpCisKKyAgICAgICAgIyAjMjogYWxwaGEgPT0gMTogZmlyc3QgcmFuZG9tIG51bWJlciBsZXNzIHRoYW4gMWUtNyB0byB0aGF0IHRoZSBib2R5CisgICAgICAgICMgb2YgdGhlIHdoaWxlIGxvb3AgZXhlY3V0ZXMgb25jZS4gVGhlbiByYW5kb20ucmFuZG9tKCkgcmV0dXJucyAwLjQ1LAorICAgICAgICAjIHdoaWNoIGNhdXNlcyB3aGlsZSB0byBzdG9wIGxvb3BpbmcgYW5kIHRoZSBhbGdvcml0aG0gdG8gdGVybWluYXRlLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFsxZS04LCAwLjQ1XQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4wLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJldHVybmVkX3ZhbHVlLCAyLjUwNzMxNDE2NjEyMzgwMykKKworICAgICAgICAjICMzOiAwIDwgYWxwaGEgPCAxLiBUaGlzIGlzIHRoZSBtb3N0IGNvbXBsZXggcmVnaW9uIG9mIGNvZGUgdG8gY292ZXIsCisgICAgICAgICMgYXMgdGhlcmUgYXJlIG11bHRpcGxlIGlmLWVsc2Ugc3RhdGVtZW50cy4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlCisgICAgICAgICMgc291cmNlIGNvZGUsIGFuZCBkZXRlcm1pbmUgdGhlIHZhbHVlcyB0aGF0IHdlIG5lZWQgYWNjb3JkaW5nbHk6CisgICAgICAgICMKKyAgICAgICAgIyB3aGlsZSAxOgorICAgICAgICAjICAgICB1ID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICAjICAgICBwID0gYip1CisgICAgICAgICMgICAgIGlmIHAgPD0gMS4wOiAjIDw9PT0gKEEpCisgICAgICAgICMgICAgICAgICB4ID0gcCAqKiAoMS4wL2FscGhhKQorICAgICAgICAjICAgICBlbHNlOiAjIDw9PT0gKEIpCisgICAgICAgICMgICAgICAgICB4ID0gLV9sb2coKGItcCkvYWxwaGEpCisgICAgICAgICMgICAgIHUxID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgaWYgcCA+IDEuMDogIyA8PT09IChDKQorICAgICAgICAjICAgICAgICAgaWYgdTEgPD0geCAqKiAoYWxwaGEgLSAxLjApOiAjIDw9PT0gKEQpCisgICAgICAgICMgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyAgICAgZWxpZiB1MSA8PSBfZXhwKC14KTogIyA8PT09IChFKQorICAgICAgICAjICAgICAgICAgYnJlYWsKKyAgICAgICAgIyByZXR1cm4geCAqIGJldGEKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0LCB3ZSB3YW50IChBKSB0byBiZSBUcnVlLiBGb3IgdGhhdCB3ZSBuZWVkIHRoYXQ6CisgICAgICAgICMgYipyYW5kb20oKSA8PSAxLjAKKyAgICAgICAgIyByMSA9IHJhbmRvbSgpIDw9IDEuMCAvIGIKKyAgICAgICAgIworICAgICAgICAjIFdlIG5vdyBnZXQgdG8gdGhlIHNlY29uZCBpZi1lbHNlIGJyYW5jaCwgYW5kIGhlcmUsIHNpbmNlIHAgPD0gMS4wLAorICAgICAgICAjIChDKSBpcyBGYWxzZSBhbmQgd2UgdGFrZSB0aGUgZWxpZiBicmFuY2gsIChFKS4gRm9yIGl0IHRvIGJlIFRydWUsCisgICAgICAgICMgc28gdGhhdCB0aGUgYnJlYWsgaXMgZXhlY3V0ZWQsIHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyByMiA9IHJhbmRvbSgpIDw9IF9leHAoLXgpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKHAgKiogKDEuMC9hbHBoYSkpKQorICAgICAgICAjIHIyIDw9IF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgIF9lID0gcmFuZG9tLl9lCisgICAgICAgIF9leHAgPSByYW5kb20uX2V4cAorICAgICAgICBfbG9nID0gcmFuZG9tLl9sb2cKKyAgICAgICAgYWxwaGEgPSAwLjM1CisgICAgICAgIGJldGEgPSAxLjQ1CisgICAgICAgIGIgPSAoX2UgKyBhbHBoYSkvX2UKKyAgICAgICAgZXBzaWxvbiA9IDAuMDEKKworICAgICAgICByMSA9IDAuODg1OTI5NjQ0MTU2NiAjIDEuMCAvIGIKKyAgICAgICAgcjIgPSAwLjM2Nzg3OTQ0MTE3MTQgIyBfZXhwKC0oKGIqcjEpICoqICgxLjAvYWxwaGEpKSkKKworICAgICAgICAjIFRoZXNlIGZvdXIgInJhbmRvbSIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChBKSBUcnVlLCAoRSkgRmFsc2UgLS0+IFtuZXh0IGl0ZXJhdGlvbiBvZiB3aGlsZV0KKyAgICAgICAgIyAoQSkgVHJ1ZSwgKEUpIFRydWUgLS0+IFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNDQ5OTk5OTk5OTk5NzU0NCkKKworICAgICAgICAjIExldCdzIG5vdyBtYWtlIChBKSBiZSBGYWxzZS4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2hlbiB3ZSBnZXQgdG8gdGhlCisgICAgICAgICMgc2Vjb25kIGlmLWVsc2UgJ3AnIGlzIGdyZWF0ZXIgdGhhbiAxLCBzbyAoQykgZXZhbHVhdGVzIHRvIFRydWUuIFdlCisgICAgICAgICMgbm93IGVuY291bnRlciBhIHNlY29uZCBpZiBzdGF0ZW1lbnQsIChEKSwgd2hpY2ggaW4gb3JkZXIgdG8gZXhlY3V0ZQorICAgICAgICAjIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjoKKyAgICAgICAgIyByMiA8PSB4ICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItcCkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgICMgcjIgPD0gKC1fbG9nKChiLShiKnIxKSkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgIHIxID0gMC44OTU5Mjk2NDQxNTY2ICMgKDEuMCAvIGIpICsgZXBzaWxvbiAtLSBzbyB0aGF0IChBKSBpcyBGYWxzZQorICAgICAgICByMiA9IDAuOTQ0NTQwMDQwODg5ODE0MQorCisgICAgICAgICMgQW5kIHRoZXNlIGZvdXIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBUcnVlIFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNTgzMDM0OTU2MTc2MDc4MSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLmdhbW1hdmFyaWF0ZScpCisgICAgZGVmIHRlc3RfYmV0YXZhcmlhdGVfcmV0dXJuX3plcm8oc2VsZiwgZ2FtbWF2YXJpYXRlX21vY2spOgorICAgICAgICAjIGJldGF2YXJpYXRlKCkgcmV0dXJucyB6ZXJvIHdoZW4gdGhlIEdhbW1hIGRpc3RyaWJ1dGlvbgorICAgICAgICAjIHRoYXQgaXQgdXNlcyBpbnRlcm5hbGx5IHJldHVybnMgdGhpcyBzYW1lIHZhbHVlLgorICAgICAgICBnYW1tYXZhcmlhdGVfbW9jay5yZXR1cm5fdmFsdWUgPSAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjAsIHJhbmRvbS5iZXRhdmFyaWF0ZSgyLjcxODI4LCAzLjE0MTU5KSkKIAogY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RNYWdpY0NvbnN0YW50cyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CmluZGV4IDJhMTNiZmUuLmQ5ZDRjZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIElOKCkpCiAKICAgICAgICAgIyBUZXN0IHVzZSBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBpbiBzbGljZSBpbmRpY2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTApWzpJKDUpXSksIGxpc3QocmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKVs6SSg1KV0sIHJhbmdlKDUpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKICAgICAgICAgICAgIHJhbmdlKDAsIDEwKVs6SVgoKV0KQEAgLTM1Myw5ICszNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICgxMywgMjEsIDMpLCAoLTIsIDIsIDIpLCAoMioqNjUsIDIqKjY1KzIpXQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHIpKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCB0ZXN0PXQpOgorICAgICAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHIsIHByb3RvKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKICAgICAgICAgdGVzdGNhc2VzID0gWygxMywpLCAoMCwgMTEpLCAoLTIyLCAxMCksICgyMCwgMywgLTEpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggZjA5MzgxMi4uYTRlMTFjNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0zLDEwICszLDEyIEBACiBpbXBvcnQgaW8KIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE3LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC01Myw2ICs3MSwxNSBAQAogICAgICAgICByZXR1cm4gc3RyKGludF92YWx1ZSArIDEpCiAKICAgICBkZWYgdGVzdF9iYXNpY19yZV9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCAnYScsICd4eXonKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCBTKCdhJyksIFMoJ3h5eicpKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYidhJywgYid4eXonKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIEIoYidhJyksIEIoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBieXRlYXJyYXkoYidhJyksIGJ5dGVhcnJheShiJ3h5eicpKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIG1lbW9yeXZpZXcoYidhJyksIG1lbW9yeXZpZXcoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgZm9yIHkgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Yih5LCAnYScsICd4JXN6JyAlIHkpLCAneGF6JykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIiksICd4IHgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJ1xkKycsIHNlbGYuYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICc5LjMgLTMgMjR4MTAweScpCkBAIC0yMTAsMTAgKzIzNywyOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiwgMiksICgneHh4eXonLCAyKSkKIAogICAgIGRlZiB0ZXN0X3JlX3NwbGl0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6IiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJycsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoqIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gIjphOmI6OmMiLCBTKCI6YTpiOjpjIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIjoiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiOmE6Yjo6YyIsIEIoYiI6YTpiOjpjIiksIGJ5dGVhcnJheShiIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiIjphOmI6OmMiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoYiI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJycsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInYScsIGInYicsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYic6JywgYidhJywgYic6JywgYidiJywgYic6OicsIGInYyddKQorICAgICAgICBmb3IgYSwgYiwgYyBpbiAoIlx4ZTBceGRmXHhlNyIsICJcdTA0MzBcdTA0MzFcdTA0MzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlxVMDAwMWQ0OWNcVTAwMDFkNDllXFUwMDAxZDRiNSIpOgorICAgICAgICAgICAgc3RyaW5nID0gIjolczolczo6JXMiICUgKGEsIGIsIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwgWycnLCBhLCBiLCAnJywgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksIFsnJywgYSwgYiwgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsIGEsICc6JywgYiwgJzo6JywgY10pCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKD86OiopIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDopKiIsICI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6JywgJ2MnXSkKQEAgLTIzNSwyMiArMjgxLDUzIEBACiAKICAgICBkZWYgdGVzdF9yZV9maW5kYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIjorIiwgImFiYyIpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgImE6Yjo6Yzo6OmQiKSwgWyI6IiwgIjo6IiwgIjo6OiJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpLCBbKCI6IiwgIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI6IiwgIjoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6OiIpXSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAiYTpiOjpjOjo6ZCIsIFMoImE6Yjo6Yzo6OmQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyI6IiwgIjo6IiwgIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCI6IiwgIiIpLCAoIjoiLCAiOiIpLCAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiYTpiOjpjOjo6ZCIsIEIoYiJhOmI6OmM6OjpkIiksIGJ5dGVhcnJheShiImE6Yjo6Yzo6OmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiImE6Yjo6Yzo6OmQiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIjorIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiIjoiLCBiIjo6IiwgYiI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKGIiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhiIjoiLCBiIiIpLCAoYiI6IiwgYiI6IiksIChiIjoiLCBiIjo6IildKQorICAgICAgICBmb3IgeCBpbiAoIlx4ZTAiLCAiXHUwNDMwIiwgIlxVMDAwMWQ0OWMiKToKKyAgICAgICAgICAgIHh4ID0geCAqIDIKKyAgICAgICAgICAgIHh4eCA9IHggKiAzCisgICAgICAgICAgICBzdHJpbmcgPSAiYSVzYiVzYyVzZCIgJSAoeCwgeHgsIHh4eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiJXMrIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKykiICUgeCwgc3RyaW5nKSwgW3gsIHh4LCB4eHhdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoJXMpKCVzKikiICUgKHgsIHgpLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHgsICIiKSwgKHgsIHgpLCAoeCwgeHgpXSkKIAogICAgIGRlZiB0ZXN0X2J1Z18xMTc2MTIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyIihhfChiKSkiLCAiYWJhIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWygiYSIsICIiKSwoImIiLCAiYiIpLCgiYSIsICIiKV0pCiAKICAgICBkZWYgdGVzdF9yZV9tYXRjaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsICdhJykuZ3JvdXBzKCksICgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoYSknLCAnYScpLmdyb3VwcygpLCAoJ2EnLCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDApLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEpLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEsIDEpLCAoJ2EnLCAnYScpKQorICAgICAgICBmb3Igc3RyaW5nIGluICdhJywgUygnYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cHMoKSwgKCdhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiBiJ2EnLCBCKGInYScpLCBieXRlYXJyYXkoYidhJyksIG1lbW9yeXZpZXcoYidhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXBzKCksIChiJ2EnLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEpLCBiJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksIChiJ2EnLCBiJ2EnKSkKKyAgICAgICAgZm9yIGEgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGEsIGEpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXBzKCksIChhLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDApLCBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgxKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSwgMSksIChhLCBhKSkKIAogICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoKGEpfChiKSkoYyk/JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2EnKS5ncm91cHMoKSwgKCdhJywgJ2EnLCBOb25lLCBOb25lKSkKQEAgLTI3Miw2ICszNDksMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2InLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2FjJykuZ3JvdXAoMSwgJ2IyJywgMyksICgnYScsIE5vbmUsICdjJykpCiAKKyAgICBkZWYgdGVzdF9yZV9mdWxsbWF0Y2goc2VsZik6CisgICAgICAgICMgSXNzdWUgMTYyMDM6IFByb3Bvc2FsOiBhZGQgcmUuZnVsbG1hdGNoKCkgbWV0aG9kLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEiLCAiYSIpLnNwYW4oKSwgKDAsIDEpKQorICAgICAgICBmb3Igc3RyaW5nIGluICJhYiIsIFMoImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImF8YWIiLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBmb3Igc3RyaW5nIGluIGIiYWIiLCBCKGIiYWIiKSwgYnl0ZWFycmF5KGIiYWIiKSwgbWVtb3J5dmlldyhiImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChiciJhfGFiIiwgc3RyaW5nKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgZm9yIGEsIGIgaW4gIlx4ZTBceGRmIiwgIlx1MDQzMFx1MDQzMSIsICJcVTAwMDFkNDljXFUwMDAxZDQ5ZSI6CisgICAgICAgICAgICByID0gciIlc3wlcyIgJSAoYSwgYSArIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyLCBhICsgYikuc3BhbigpLCAoMCwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiLio/JCIsICJhYmMiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociIuKj8iLCAiYWJjIikuc3BhbigpLCAoMCwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYS4qP2IiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJhYmIiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJheHhiIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImErIiwgImFiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYWJjXFoiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiKD9tKWFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhYig/PWMpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImFiKD88PWIpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyIig/PWF8YWIpYWIiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyImJjIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8kIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8iKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorCiAgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWZfZXhpc3RzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYSknKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoJygnLCAnYScpKQpAQCAtMTA1Myw2ICsxMTYwLDI4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKHBhdHRlcm4sIHJlLlMpLmZpbmRhbGwoYid4eXonKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJ3h5eiddLCBtc2c9cGF0dGVybikKIAorICAgIGRlZiB0ZXN0X21hdGNoX3JlcHIoc2VsZik6CisgICAgICAgIGZvciBzdHJpbmcgaW4gJ1thYnJhY2FkYWJyYV0nLCBTKCdbYWJyYWNhZGFicmFdJyk6CisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKHInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPSdhYnJhY2FkYWJyYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG0pLl9fbW9kdWxlX18sIHR5cGUobSkuX19xdWFsbmFtZV9fKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAoYidbYWJyYWNhZGFicmFdJywgQihiJ1thYnJhY2FkYWJyYV0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInW2FicmFjYWRhYnJhXScpLAorICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGInW2FicmFjYWRhYnJhXScpKToKKyAgICAgICAgICAgIG0gPSByZS5zZWFyY2gocmInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPWInYWJyYWNhZGFicmEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShtKS5fX21vZHVsZV9fLCB0eXBlKG0pLl9fcXVhbG5hbWVfXykpCisKKyAgICAgICAgZmlyc3QsIHNlY29uZCA9IGxpc3QocmUuZmluZGl0ZXIoIihhYSl8KGJiKSIsICJhYSBiYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmlyc3QpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgwLCAyKSwgbWF0Y2g9J2FhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoZmlyc3QpLl9fcXVhbG5hbWVfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWNvbmQpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgzLCA1KSwgbWF0Y2g9J2JiJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoc2Vjb25kKS5fX3F1YWxuYW1lX18pKQorCiAKICAgICBkZWYgdGVzdF9idWdfMjUzNyhzZWxmKToKICAgICAgICAgIyBpc3N1ZSAyNTM3OiBlbXB0eSBzdWJtYXRjaGVzCkBAIC0xMDY0LDYgKzExOTMsODQgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMSksICIiKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ncm91cCgyKSwgInkiKQogCisKK2NsYXNzIFBhdHRlcm5SZXByVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVjayhzZWxmLCBwYXR0ZXJuLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZS5jb21waWxlKHBhdHRlcm4pKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgY2hlY2tfZmxhZ3Moc2VsZiwgcGF0dGVybiwgZmxhZ3MsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF93aXRob3V0X2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdyYW5kb20gcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJykiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0UpIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLkl8cmUuU3xyZS5YLAorICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgIgorICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMfHJlLlZFUkJPU0UpIikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5VLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicpIikKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5JfHJlLlN8cmUuVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMKSIpCisKKyAgICBkZWYgdGVzdF9pbmxpbmVfZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJyg/aSlwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgnKD9pKXBhdHRlcm4nLCByZS5JR05PUkVDQVNFKSIpCisKKyAgICBkZWYgdGVzdF91bmtub3duX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgMHgxMjMwMDB8cmUuSSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0V8MHgxMjMwMDApIikKKworICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKGInYnl0ZXMgcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJykiKQorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKGInYnl0ZXMgcGF0dGVybicsIHJlLkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJywgcmUuQVNDSUkpIikKKworICAgIGRlZiB0ZXN0X3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygncmFuZG9tICJkb3VibGUgcXVvdGVkIiBwYXR0ZXJuJywKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoJ3JhbmRvbSAiZG91YmxlIHF1b3RlZCIgcGF0dGVybicpJycnKQorICAgICAgICBzZWxmLmNoZWNrKCJyYW5kb20gJ3NpbmdsZSBxdW90ZWQnIHBhdHRlcm4iLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgicmFuZG9tICdzaW5nbGUgcXVvdGVkJyBwYXR0ZXJuIiknJycpCisgICAgICAgIHNlbGYuY2hlY2soJycnYm90aCAnc2luZ2xlJyBhbmQgImRvdWJsZSIgcXVvdGVzJycnLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgnYm90aCBcXCdzaW5nbGVcXCcgYW5kICJkb3VibGUiIHF1b3RlcycpJycnKQorCisgICAgZGVmIHRlc3RfbG9uZ19wYXR0ZXJuKHNlbGYpOgorICAgICAgICBwYXR0ZXJuID0gJ1ZlcnkgJXNwYXR0ZXJuJyAlICgnbG9uZyAnICogMTAwMCkKKyAgICAgICAgciA9IHJlcHIocmUuY29tcGlsZShwYXR0ZXJuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxlbihyKSwgMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjMwXSwgInJlLmNvbXBpbGUoJ1ZlcnkgbG9uZyBsb25nIGxvbiIpCisgICAgICAgIHIgPSByZXByKHJlLmNvbXBpbGUocGF0dGVybiwgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhsZW4ociksIDMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzozMF0sICJyZS5jb21waWxlKCdWZXJ5IGxvbmcgbG9uZyBsb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTE2Ol0sICIsIHJlLklHTk9SRUNBU0UpIikKKworCitjbGFzcyBJbXBsZW1lbnRhdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgcmUgbW9kdWxlLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfb3ZlcmxhcF90YWJsZShzZWxmKToKKyAgICAgICAgZiA9IHNyZV9jb21waWxlLl9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiIiksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImEiKSwgWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiY2QiKSwgWzAsIDAsIDAsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFhYWEiKSwgWzAsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiYWJiYSIpLCBbMCwgMCwgMSwgMiwgMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWJjYWJkYWMiKSwgWzAsIDAsIDAsIDEsIDIsIDAsIDEsIDBdKQorCisKIGRlZiBydW5fcmVfdGVzdHMoKToKICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKICAgICBpZiB2ZXJib3NlOgpAQCAtMTE5Myw3ICsxNDAwLDcgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCisgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHJ1bl9yZV90ZXN0cygpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzk4YTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpAQCAtMCwwICsxLDI3NSBAQAorIiIiCitUZXN0cyBvZiByZWdydGVzdC5weS4KKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBmYXVsdGhhbmRsZXIKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QsIHN1cHBvcnQKKworY2xhc3MgUGFyc2VBcmdzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuIiIiCisKKyAgICBkZWYgY2hlY2tFcnJvcihzZWxmLCBhcmdzLCBtc2cpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyLCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgIHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obXNnLCBlcnIuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1oJywgJy0taGVscCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0LCBcCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVuIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLicsIG91dC5nZXR2YWx1ZSgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIoKSByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdGltZW91dCcsICc0LjInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy50aW1lb3V0LCA0LjIpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGltZW91dCddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0JywgJ2ZvbyddLCAnaW52YWxpZCBmbG9hdCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS13YWl0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy53YWl0KQorCisgICAgZGVmIHRlc3Rfc2xhdmVhcmdzKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zbGF2ZWFyZ3MnLCAnW1tdLCB7fV0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zbGF2ZWFyZ3MsICdbW10sIHt9XScpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tc2xhdmVhcmdzJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfc3RhcnQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1TJywgJy0tc3RhcnQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdnZ2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXZlcmJvc2UnXSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZTIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy13JywgJy0tdmVyYm9zZTInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudmVyYm9zZTIpCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVcnLCAnLS12ZXJib3NlMyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMykKKworICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcScsICctLXF1aWV0JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3Nsb3coc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1vJywgJy0tc2xvdyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5wcmludF9zbG93KQorCisgICAgZGVmIHRlc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1oZWFkZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmhlYWRlcikKKworICAgIGRlZiB0ZXN0X3JhbmRvbWl6ZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXInLCAnLS1yYW5kb21pemUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorCisgICAgZGVmIHRlc3RfcmFuZHNlZWQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXJhbmRzZWVkJywgJzEyMzQ1J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMucmFuZG9tX3NlZWQsIDEyMzQ1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJywgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfZnJvbWZpbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1mJywgJy0tZnJvbWZpbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5mcm9tZmlsZSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbycsICctcyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfZXhjbHVkZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXgnLCAnLS1leGNsdWRlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9zaW5nbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1zJywgJy0tc2luZ2xlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnNpbmdsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJy1mJywgJ2ZvbyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfbWF0Y2goc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1tJywgJy0tbWF0Y2gnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAncGF0dGVybiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWF0Y2hfdGVzdHMsICdwYXR0ZXJuJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfZmFpbGZhc3Qoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1HJywgJy0tZmFpbGZhc3QnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLXYnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLVcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVcnKQorCisgICAgZGVmIHRlc3RfdXNlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctdScsICctLXVzZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdndWksbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWydndWknLCAnbmV0d29yayddKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxub25lLG5ldHdvcmsnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIFsnbmV0d29yayddKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbGlzdChyZWdydGVzdC5SRVNPVVJDRV9OQU1FUykKKyAgICAgICAgICAgICAgICBleHBlY3RlZC5yZW1vdmUoJ2d1aScpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnYWxsLC1ndWknXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgcmVzb3VyY2UnKQorCisgICAgZGVmIHRlc3RfbWVtbGltaXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1NJywgJy0tbWVtbGltaXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNEcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLm1lbWxpbWl0LCAnNEcnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF90ZXN0ZGlyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10ZXN0ZGlyJywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRlc3RkaXIsIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCAnZm9vJykpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGVzdGRpciddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3J1bmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTCcsICctLXJ1bmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnJ1bmxlYWtzKQorCisgICAgZGVmIHRlc3RfaHVudHJsZWFrcyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVInLCAnLS1odW50cmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg1LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzY6J10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgNCwgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc6MyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDMsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjozOmxlYWtzLmxvZyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDYsIDMsICdsZWFrcy5sb2cnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZHMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vOiddLCAnaW52YWxpZCBodW50cmxlYWtzIHZhbHVlJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJzY6Zm9vJ10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwcm9jZXNzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctaicsICctLW11bHRpcHJvY2Vzcyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICcyJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfbXAsIDIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctVCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctbCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctTScsICc0RyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1UJywgJy0tY292ZXJhZ2UnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudHJhY2UpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUQnLCAnLS1jb3ZlcmRpcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmNvdmVyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfbm9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU4nLCAnLS1ub2NvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobnMuY292ZXJkaXIpCisKKyAgICBkZWYgdGVzdF90aHJlc2hvbGQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy10JywgJy0tdGhyZXNob2xkJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzEwMDAnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRocmVzaG9sZCwgMTAwMCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9ub3dpbmRvd3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1uJywgJy0tbm93aW5kb3dzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLm5vd2luZG93cykKKworICAgIGRlZiB0ZXN0X2ZvcmV2ZXIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1GJywgJy0tZm9yZXZlcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mb3JldmVyKQorCisKKyAgICBkZWYgdGVzdF91bnJlY29nbml6ZWRfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0teHh4J10sICd1c2FnZTonKQorCisgICAgZGVmIHRlc3RfbG9uZ19vcHRpb25fX3BhcnRpYWwoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3R3b19vcHRpb25zKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1xdWlldCcsICctLWV4Y2x1ZGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5leGNsdWRlKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX3dpdGhfZW1wdHlfc3RyaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zdGFydCcsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJycpCisKKyAgICBkZWYgdGVzdF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWydmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX2FuZF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKaW5kZXggNTg5ZWNkZC4uYTUwNGJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQpAQCAtMywxMSArMywxMSBAQAogICBOaWNrIE1hdGhld3NvbgogIiIiCiAKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUsIHZlcmJvc2UKQEAgLTI0MSw3ICsyNDEsOCBAQAogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gMiAqIChsZW4oc2VsZi5sb25nbmFtZSkgKyAxKQogICAgICAgICAjIGEgcGF0aCBzZXBhcmF0b3IgKyBgbW9kdWxlX25hbWVgICsgIi5weSIKICAgICAgICAgc291cmNlX3BhdGhfbGVuICs9IGxlbihtb2R1bGVfbmFtZSkgKyAxICsgbGVuKCIucHkiKQotICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSBzb3VyY2VfcGF0aF9sZW4gKyBsZW4oaW1wLmNhY2hlX2Zyb21fc291cmNlKCJ4LnB5IikpIC0gbGVuKCJ4LnB5IikKKyAgICAgICAgY2FjaGVkX3BhdGhfbGVuID0gKHNvdXJjZV9wYXRoX2xlbiArCisgICAgICAgICAgICBsZW4oaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBjYWNoZWRfcGF0aF9sZW4gPj0gMjU4OgogICAgICAgICAgICAgIyBVbmRlciBXaW5kb3dzLCB0aGUgbWF4IHBhdGggbGVuIGlzIDI2MCBpbmNsdWRpbmcgQydzIHRlcm1pbmF0aW5nCiAgICAgICAgICAgICAjIE5VTCBjaGFyYWN0ZXIuCkBAIC0yNTIsNiArMjUzLDcgQEAKICAgICAgICAgICAgIHByaW50KCJjYWNoZWRfcGF0aF9sZW4gPSIsIGNhY2hlZF9wYXRoX2xlbikKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQogICAgICAgICBzZWxmLl9jaGVja19wYXRoX2xpbWl0YXRpb25zKHNlbGYucGtnbmFtZSkKICAgICAgICAgY3JlYXRlX2VtcHR5X2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgc2VsZi5wa2duYW1lICsgJy5weScpKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKaW5kZXggMGNmNjFjYi4uMDA2MTk4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CkBAIC0xLDMgKzEsNiBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0aW1lCkBAIC02MSw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKC4xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGltaXRfc2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0X3NldDoKQEAgLTEyOSw2ICsxMzIsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhZ2VzaXplLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBhZ2VzaXplLCAwKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdsaW51eCcsICd0ZXN0IHJlcXVpcmVzIExpbnV4JykKKyAgICBkZWYgdGVzdF9saW51eF9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIFsnTVNHUVVFVUUnLCAnTklDRScsICdSVFBSSU8nLCAnUlRUSU1FJywgJ1NJR1BFTkRJTkcnXToKKyAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5zdXBwcmVzcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGdldGF0dHIocmVzb3VyY2UsICdSTElNSVRfJyArIGF0dHIpLCBpbnQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlc291cmNlLCAncHJsaW1pdCcpLCAnbm8gcHJsaW1pdCcpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbigyLCA2LCAzNikKKyAgICBkZWYgdGVzdF9wcmxpbWl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlc291cmNlLnBybGltaXQpCisgICAgICAgIGlmIG9zLmdldGV1aWQoKSAhPSAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yLCByZXNvdXJjZS5wcmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgcmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9jZXNzTG9va3VwRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIGxpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNvdXJjZS5wcmxpbWl0KDAsIHJlc291cmNlLlJMSU1JVF9BUyksIGxpbWl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTLCBsaW1pdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQpCisKKwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFJlc291cmNlVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weSBiL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKaW5kZXggMmRkYmEzNC4uZjE5YzRhYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgIl9fY2FjaGVkX18iOiBOb25lLAogICAgICJfX3BhY2thZ2VfXyI6IE5vbmUsCiAgICAgIl9fZG9jX18iOiBOb25lLAorIyAgICAiX19zcGVjX18iOiBOb25lLCAgIyBYWFggVW5jb21tZW50LgogfQogZXhhbXBsZV9uYW1lc3BhY2UgPSAgewogICAgICJzeXMiOiBzeXMsCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIjogRmFsc2UsCiAgICAgIm1vZHVsZV9pbl9zeXNfbW9kdWxlcyI6IEZhbHNlLAogICAgICJuZXN0ZWQiOiBkaWN0KGltcGxpY2l0X25hbWVzcGFjZSwKLSAgICAgICAgICAgICAgICAgICB4PTEsIF9fbmFtZV9fPSI8cnVuPiIsIF9fbG9hZGVyX189Tm9uZSksCisgICAgICAgICAgICAgICAgICAgeD0xLCBfX25hbWVfXz0iPHJ1bj4iLCBfX2xvYWRlcl9fPU5vbmUsIF9fc3BlY19fPU5vbmUpLAogfQogZXhhbXBsZV9uYW1lc3BhY2UudXBkYXRlKGltcGxpY2l0X25hbWVzcGFjZSkKIApAQCAtMjQzLDYgKzI0NCw3IEBACiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXSwKKyMgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lLCAgIyBYWFggTmVlZHMgdG8gYmUgc2V0LgogICAgICAgICB9KQogICAgICAgICBpZiBhbHRlcl9zeXM6CiAgICAgICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewpAQCAtMjc5LDYgKzI4MSw3IEBACiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IHBrZ19uYW1lLAorIyAgICAgICAgICAgICJfX3NwZWNfXyI6IE5vbmUsICAjIFhYWCBOZWVkcyB0byBiZSBzZXQuCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC01NzUsMTIgKzU3OCw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsncyddLCAibm9uLUFTQ0lJOiBoXHhlOSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgICAgICAgRXhlY3V0aW9uTGF5ZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgUnVuTW9kdWxlVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIFJ1blBhdGhUZXN0Q2FzZQotICAgICAgICAgICAgICAgICApCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkgYi9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CmluZGV4IDA3MDg4NmQuLmM2YWJmM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQpAQCAtMTk3LDggKzE5Nyw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW10pCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5IGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQppbmRleCAyNmNlMDQyLi5iMzI1NTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKQEAgLTcxNSw2ICs3MTUsMTkgQEAKICAgICAgICAgZGVmIGIoKToKICAgICAgICAgICAgIGdsb2JhbCBhCiAKKyAgICBkZWYgdGVzdENsYXNzTmFtZXNwYWNlT3ZlcnJpZGVzQ2xvc3VyZShzZWxmKToKKyAgICAgICAgIyBTZWUgIzE3ODUzLgorICAgICAgICB4ID0gNDIKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGxvY2FscygpWyJ4Il0gPSA0MworICAgICAgICAgICAgeSA9IHgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnksIDQzKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgbG9jYWxzKClbIngiXSA9IDQzCisgICAgICAgICAgICBkZWwgeAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoWCwgIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCA0MikKKwogICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdENlbGxMZWFrKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3OTI3LgpAQCAtNzQzLDEwICs3NTYsNiBAQAogICAgICAgICBkZWwgdGVzdGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZigpKQogCi0gICAgZGVmIHRlc3RfX0NsYXNzX19HbG9iYWwoc2VsZik6Ci0gICAgICAgIHMgPSAiY2xhc3MgWDpcbiAgICBnbG9iYWwgX19jbGFzc19fXG4gICAgZGVmIGYoc2VsZik6IHN1cGVyKCkiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBleGVjLCBzKQotCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoU2NvcGVUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKaW5kZXggZGRiOWEwZi4uOGY5YTFjOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJywgJ3Jpc2NvcycpLAorQHVuaXR0ZXN0LnNraXBJZigoc3lzLnBsYXRmb3JtWzozXT09J3dpbicpLAogICAgICAgICAgICAgICAgICAiY2FuJ3QgZWFzaWx5IHRlc3Qgb24gdGhpcyBzeXN0ZW0iKQogY2xhc3MgU2VsZWN0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbZmRdLCBbXSwgW10sIDApCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCByYWlzZWQiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkgYi9MaWIvdGVzdC90ZXN0X3NlbGVjdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWU2N2IxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKQEAgLTAsMCArMSw0MzAgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCit0cnk6CisgICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyB0aW1lCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKKworaWYgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CisgICAgc29ja2V0cGFpciA9IHNvY2tldC5zb2NrZXRwYWlyCitlbHNlOgorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykgYXMgbDoKKyAgICAgICAgICAgIGwuYmluZCgoc3VwcG9ydC5IT1NULCAwKSkKKyAgICAgICAgICAgIGwubGlzdGVuKDMpCisgICAgICAgICAgICBjID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGMuY29ubmVjdChsLmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICAgICAgY2FkZHIgPSBjLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBhLCBhZGRyID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgd2UndmUgZ290IHRoZSBjb3JyZWN0IGNsaWVudAorICAgICAgICAgICAgICAgICAgICBpZiBhZGRyID09IGNhZGRyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMsIGEKKyAgICAgICAgICAgICAgICAgICAgYS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2RlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKKyAgICBtYXRjaCA9IFtdCisgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlYWR5OgorICAgICAgICBpZiBldmVudHMgJiBmbGFnOgorICAgICAgICAgICAgbWF0Y2guYXBwZW5kKGtleS5maWxlb2JqKQorICAgIHJldHVybiBtYXRjaAorCisKK2NsYXNzIEJhc2VTZWxlY3RvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa2V5LCBzZWxlY3RvcnMuU2VsZWN0b3JLZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmZpbGVvYmosIHJkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5mZCwgcmQuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmV2ZW50cywgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmRhdGEsICJkYXRhIikKKworICAgICAgICAjIHJlZ2lzdGVyIGFuIHVua25vd24gZXZlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWdpc3RlciwgMCwgOTk5OTk5KQorCisgICAgICAgICMgcmVnaXN0ZXIgYW4gaW52YWxpZCBGRAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlZ2lzdGVyLCAtMTAsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgcmVnaXN0ZXIgdHdpY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVnaXN0ZXIsIHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIHJlZ2lzdGVyIHRoZSBzYW1lIEZELCBidXQgd2l0aCBhIGRpZmZlcmVudCBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVnaXN0ZXIsIHJkLmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIGFuIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMudW5yZWdpc3RlciwgOTk5OTk5KQorCisgICAgICAgICMgdW5yZWdpc3RlciB0d2ljZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy51bnJlZ2lzdGVyLCByZCkKKworICAgIGRlZiB0ZXN0X21vZGlmeShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyBtb2RpZnkgZXZlbnRzCisgICAgICAgIGtleTIgPSBzLm1vZGlmeShyZCwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5ldmVudHMsIGtleTIuZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIsIHMuZ2V0X2tleShyZCkpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorCisgICAgICAgICMgbW9kaWZ5IGRhdGEKKyAgICAgICAgZDEgPSBvYmplY3QoKQorICAgICAgICBkMiA9IG9iamVjdCgpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQxKQorICAgICAgICBrZXkyID0gcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZXZlbnRzLCBrZXkyLmV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuZGF0YSwga2V5Mi5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIsIHMuZ2V0X2tleShyZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5Mi5kYXRhLCBkMikKKworICAgICAgICAjIG1vZGlmeSB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLm1vZGlmeSwgOTk5OTk5LCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIG1vZGlmeSB1c2UgYSBzaG9ydGN1dAorICAgICAgICBkMyA9IG9iamVjdCgpCisgICAgICAgIHMucmVnaXN0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzLnVucmVnaXN0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy51bnJlZ2lzdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisKKyAgICBkZWYgdGVzdF9nZXRfa2V5KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwgcy5nZXRfa2V5KHJkKSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgOTk5OTk5KQorCisgICAgZGVmIHRlc3RfZ2V0X21hcChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5cyA9IHMuZ2V0X21hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW10pCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAiZGF0YSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmQsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LCBrZXlzW3JkXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW3JkLmZpbGVubygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGtleXMudmFsdWVzKCkpLCBba2V5XSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBrZXlzWzk5OTk5OV0KKworICAgICAgICAjIFJlYWQtb25seSBtYXBwaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBrZXlzW3JkXQorCisgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgd3Jfa2V5ID0gcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHJlc3VsdCA9IHMuc2VsZWN0KCkKKyAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGtleSwgc2VsZWN0b3JzLlNlbGVjdG9yS2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2ZW50cyAmIH4oc2VsZWN0b3JzLkVWRU5UX1JFQUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKHdyX2tleSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0sIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgd2l0aCBzIGFzIHNlbDoKKyAgICAgICAgICAgIHNlbC5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzZWwucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgaWYgaGFzYXR0cihzLCAnZmlsZW5vJyk6CisgICAgICAgICAgICBmZCA9IHMuZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZkLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZmQsIDApCisKKyAgICBkZWYgdGVzdF9zZWxlY3RvcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBOVU1fU09DS0VUUyA9IDEyCisgICAgICAgIE1TRyA9IGIiIFRoaXMgaXMgYSB0ZXN0LiIKKyAgICAgICAgTVNHX0xFTiA9IGxlbihNU0cpCisgICAgICAgIHJlYWRlcnMgPSBbXQorICAgICAgICB3cml0ZXJzID0gW10KKyAgICAgICAgcjJ3ID0ge30KKyAgICAgICAgdzJyID0ge30KKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fU09DS0VUUyk6CisgICAgICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKyAgICAgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgcmVhZGVycy5hcHBlbmQocmQpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3cikKKyAgICAgICAgICAgIHIyd1tyZF0gPSB3cgorICAgICAgICAgICAgdzJyW3dyXSA9IHJkCisKKyAgICAgICAgYnVmcyA9IFtdCisKKyAgICAgICAgd2hpbGUgd3JpdGVyczoKKyAgICAgICAgICAgIHJlYWR5ID0gcy5zZWxlY3QoKQorICAgICAgICAgICAgcmVhZHlfd3JpdGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkeV93cml0ZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gc29ja2V0cyByZWFkeSBmb3Igd3JpdGluZyIpCisgICAgICAgICAgICB3ciA9IHJhbmRvbS5jaG9pY2UocmVhZHlfd3JpdGVycykKKyAgICAgICAgICAgIHdyLnNlbmQoTVNHKQorCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgcmVhZHkgPSBzLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgcmVhZHlfcmVhZGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHlfcmVhZGVyczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIHRoZXJlIG1pZ2h0IGJlIGEgZGVsYXkgYmV0d2VlbiB0aGUgd3JpdGUgdG8gdGhlIHdyaXRlIGVuZCBhbmQKKyAgICAgICAgICAgICAgICAjIHRoZSByZWFkIGVuZCBpcyByZXBvcnRlZCByZWFkeQorICAgICAgICAgICAgICAgIHNsZWVwKDAuMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBzb2NrZXRzIHJlYWR5IGZvciByZWFkaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3cyclt3cl1dLCByZWFkeV9yZWFkZXJzKQorICAgICAgICAgICAgcmQgPSByZWFkeV9yZWFkZXJzWzBdCisgICAgICAgICAgICBidWYgPSByZC5yZWN2KE1TR19MRU4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCBNU0dfTEVOKQorICAgICAgICAgICAgYnVmcy5hcHBlbmQoYnVmKQorICAgICAgICAgICAgcy51bnJlZ2lzdGVyKHIyd1tyZF0pCisgICAgICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisgICAgICAgICAgICB3cml0ZXJzLnJlbW92ZShyMndbcmRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmcywgW01TR10gKiBOVU1fU09DS0VUUykKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzLnNlbGVjdCgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHMuc2VsZWN0KC0xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAwLjUpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHdyKQorICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDAuNSkKKworICAgICAgICB0MCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDEpKQorICAgICAgICB0MSA9IHRpbWUoKQorICAgICAgICBkdCA9IHQxIC0gdDAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuOCA8PSBkdCA8PSAxLjYsIGR0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJhbGFybSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwuYWxhcm0oKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9zZWxlY3RfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBvcmlnX2Fscm1faGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGxhbWJkYSAqYXJnczogTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5zaWduYWwsIHNpZ25hbC5TSUdBTFJNLCBvcmlnX2Fscm1faGFuZGxlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5hbGFybSwgMCkKKworICAgICAgICBzaWduYWwuYWxhcm0oMSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDIpKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMi41KQorCisKK2NsYXNzIFNjYWxhYmxlU2VsZWN0b3JNaXhJbjoKKworICAgICMgc2VlIGlzc3VlICMxODk2MyBmb3Igd2h5IGl0J3Mgc2tpcHBlZCBvbiBvbGRlciBPUyBYIHZlcnNpb25zCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhyZXNvdXJjZSwgIlRlc3QgbmVlZHMgcmVzb3VyY2UgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9hYm92ZV9mZF9zZXRzaXplKHNlbGYpOgorICAgICAgICAjIEEgc2NhbGFibGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgbm8gcHJvYmxlbSB3aXRoIG1vcmUgdGhhbgorICAgICAgICAjIEZEX1NFVFNJWkUgZmlsZSBkZXNjcmlwdG9ycy4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgdmFsdWUsIHdlIGp1c3QKKyAgICAgICAgIyB0cnkgdG8gc2V0IHRoZSBzb2Z0IFJMSU1JVF9OT0ZJTEUgdG8gdGhlIGhhcmQgUkxJTUlUX05PRklMRSBjZWlsaW5nLgorICAgICAgICBzb2Z0LCBoYXJkID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFLCAoaGFyZCwgaGFyZCkpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzb3VyY2Uuc2V0cmxpbWl0LCByZXNvdXJjZS5STElNSVRfTk9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2Z0LCBoYXJkKSkKKyAgICAgICAgICAgIE5VTV9GRFMgPSBoYXJkCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBOVU1fRkRTID0gc29mdAorCisgICAgICAgICMgZ3VhcmQgZm9yIGFscmVhZHkgYWxsb2NhdGVkIEZEcyAoc3RkaW4sIHN0ZG91dC4uLikKKyAgICAgICAgTlVNX0ZEUyAtPSAzMgorCisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX0ZEUyAvLyAyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgRkRzLCBza2lwIC0gbm90ZSB0aGF0IHdlIHNob3VsZCBvbmx5IGNhdGNoIEVNRklMRQorICAgICAgICAgICAgICAgICMgaGVyZSwgYnV0IGFwcGFyZW50bHkgKkJTRCBhbmQgU29sYXJpcyBjYW4gZmFpbCB1cG9uIGNvbm5lY3QoKQorICAgICAgICAgICAgICAgICMgb3IgYmluZCgpIHdpdGggRUFERFJOT1RBVkFJTCwgc28gbGV0J3MgYmUgc2FmZQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZEIGxpbWl0IHJlYWNoZWQiKQorCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1BDOgorICAgICAgICAgICAgICAgICAgICAjIHRoaXMgY2FuIGJlIHJhaXNlZCBieSBlcG9sbCBpZiB3ZSBnbyBvdmVyCisgICAgICAgICAgICAgICAgICAgICMgZnMuZXBvbGwubWF4X3VzZXJfd2F0Y2hlcyBzeXNjdGwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRkQgbGltaXQgcmVhY2hlZCIpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5VTV9GRFMgLy8gMiwgbGVuKHMuc2VsZWN0KCkpKQorCisKK2NsYXNzIERlZmF1bHRTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlKToKKworICAgIFNFTEVDVE9SID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcgorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UpOgorCisgICAgU0VMRUNUT1IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCitjbGFzcyBQb2xsU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InLCBOb25lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IiKQorY2xhc3MgRXBvbGxTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ0Vwb2xsU2VsZWN0b3InLCBOb25lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcikiKQorY2xhc3MgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicsIE5vbmUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gW0RlZmF1bHRTZWxlY3RvclRlc3RDYXNlLCBTZWxlY3RTZWxlY3RvclRlc3RDYXNlLAorICAgICAgICAgICAgIFBvbGxTZWxlY3RvclRlc3RDYXNlLCBFcG9sbFNlbGVjdG9yVGVzdENhc2UsCisgICAgICAgICAgICAgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZV0KKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CmluZGV4IGMwYmNhMmYuLmJmZWY2MjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CkBAIC04NDgsOCArODQ4LDYgQEAKICAgICAgICAgZm9yIHYgaW4gc2VsZi5zZXQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYudmFsdWVzKQogICAgICAgICBzZXRpdGVyID0gaXRlcihzZWxmLnNldCkKLSAgICAgICAgIyBub3RlOiBfX2xlbmd0aF9oaW50X18gaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgIyBkb24ndCByZWx5IG9uIGl0IGluIHlvdXIgb3duIHByb2dyYW1zCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0aXRlci5fX2xlbmd0aF9oaW50X18oKSwgbGVuKHNlbGYuc2V0KSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQppbmRleCAxM2MxMjY1Li5iZDUxZDg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQpAQCAtMTQ4LDYgKzE0OCwxOSBAQAogICAgICAgICBwMiA9IGRbZW5jb2RlZGtleV0KICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMSwgcDIpICAjIFdyaXRlIGNyZWF0ZXMgbmV3IG9iamVjdCBpbiBzdG9yZQogCisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgZDEgPSB7fQorICAgICAgICB3aXRoIHNoZWx2ZS5TaGVsZihkMSwgcHJvdG9jb2w9Miwgd3JpdGViYWNrPUZhbHNlKSBhcyBzOgorICAgICAgICAgICAgc1sna2V5MSddID0gWzEsMiwzLDRdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2tleTEnXSwgWzEsMiwzLDRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxlbiwgcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc1sna2V5MSddCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdDbG9zZWQgc2hlbGYgc2hvdWxkIG5vdCBmaW5kIGEga2V5JykKIAogZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKaW5kZXggZGY5NWJkOS4uZGViMTU3NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKQEAgLTE4LDcgKzE4LDggQEAKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIGdldF9hcmNoaXZlX2Zvcm1hdHMsIEVycm9yLCB1bnBhY2tfYXJjaGl2ZSwKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgUmVnaXN0cnlFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBnZXRfdW5wYWNrX2Zvcm1hdHMpCisgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgZ2V0X3VucGFja19mb3JtYXRzLAorICAgICAgICAgICAgICAgICAgICBTYW1lRmlsZUVycm9yKQogaW1wb3J0IHRhcmZpbGUKIGltcG9ydCB3YXJuaW5ncwogCkBAIC03NDIsMTQgKzc0MywxNCBAQAogICAgICAgICBvcy5jaG1vZChyZXN0cmljdGl2ZV9zdWJkaXIsIDBvNjAwKQogCiAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KHNyY19kaXIpLnN0X21vZGUsIG9zLnN0YXQoZHN0X2Rpcikuc3RfbW9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzcmNfZGlyKS5zdF9tb2RlLCBvcy5zdGF0KGRzdF9kaXIpLnN0X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdwZXJtaXNzaXZlLnR4dCcpKS5zdF9tb2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Jlc3RyaWN0aXZlLnR4dCcpKS5zdF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUpCiAgICAgICAgIHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QgPSBvcy5wYXRoLmpvaW4oZHN0X2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0KHJlc3RyaWN0aXZlX3N1YmRpcilbMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyKS5zdF9tb2RlLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyKS5zdF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QpLnN0X21vZGUpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnbGluaycpLCAncmVxdWlyZXMgb3MubGluaycpCkBAIC03NjUsNyArNzY2LDcgQEAKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCiAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQpAQCAtNzg1LDcgKzc4Niw3IEBACiAgICAgICAgICAgICAjIHRvIFRFU1RGTi9URVNURk4vY2hlZXNlLCB3aGlsZSBpdCBzaG91bGQgcG9pbnQgYXQKICAgICAgICAgICAgICMgVEVTVEZOL2NoZWVzZS4KICAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2NoZWVzZScsIGRzdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TYW1lRmlsZUVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCkBAIC0xMjkzLDYgKzEyOTQsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJ2KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX2ZpbGUoc3JjX2ZpbGUpLCByZWFkX2ZpbGUoZHN0X2ZpbGUpKQogCisgICAgZGVmIHRlc3RfY29weWZpbGVfc2FtZV9maWxlKHNlbGYpOgorICAgICAgICAjIGNvcHlmaWxlKCkgc2hvdWxkIHJhaXNlIFNhbWVGaWxlRXJyb3IgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KKyAgICAgICAgIyBhcmUgdGhlIHNhbWUuCisgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzcmNfZmlsZSA9IG9zLnBhdGguam9pbihzcmNfZGlyLCAnZm9vJykKKyAgICAgICAgd3JpdGVfZmlsZShzcmNfZmlsZSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorICAgICAgICAjIEJ1dCBFcnJvciBzaG91bGQgd29yayB0b28sIHRvIHN0YXkgYmFja3dhcmQgY29tcGF0aWJsZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorCiAgICAgZGVmIHRlc3RfY29weXRyZWVfcmV0dXJuX3ZhbHVlKHNlbGYpOgogICAgICAgICAjIGNvcHl0cmVlIHJldHVybnMgaXRzIGRlc3RpbmF0aW9uIHBhdGguCiAgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQpAQCAtMTU4OCw3ICsxNTk5LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2V4aXRlZF93aXRoID0gZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190YgogICAgICAgICAgICAgaWYgc2VsZi5fcmFpc2VfaW5fZXhpdDoKICAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2Fubm90IGNsb3NlIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW5ub3QgY2xvc2UiKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHByZXNzX2F0X2V4aXQKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTE2MDIsMTIgKzE2MTMsMTIgQEAKICAgICBkZWYgdGVzdF93X3NvdXJjZV9vcGVuX2ZhaWxzKHNlbGYpOgogICAgICAgICBkZWYgX29wZW4oZmlsZW5hbWUsIG1vZGU9J3InKToKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAic3JjZmlsZSInKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCiAgICAgICAgICAgICBhc3NlcnQgMCAgIyBzaG91bGRuJ3QgcmVhY2ggaGVyZS4KIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogCiAgICAgZGVmIHRlc3Rfd19kZXN0X29wZW5fZmFpbHMoc2VsZik6CiAKQEAgLTE2MTcsMTQgKzE2MjgsMTQgQEAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3JjZmlsZQogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2Rlc3RmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKICAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAogICAgICAgICBzaHV0aWwuY29weWZpbGUoJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJywpKQogCkBAIC0xNjQ2LDcgKzE2NTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX3JhaXNlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3QgY2xvc2UnLCkpCiAKQEAgLTE2NjQsNyArMTY3NSw3IEBACiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQpAQCAtMTczNSw5ICsxNzQ2LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U2h1dGlsLCBUZXN0TW92ZSwgVGVzdENvcHlGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zaXplVGVzdHMsIFRlc3RXaGljaCkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQppbmRleCA5YjRiYTUwLi4zNTMwZDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQpAQCAtMTUsOSArMTUsNiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAotaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyJywgJ3Jpc2NvcycpOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCi0KIAogY2xhc3MgSGFuZGxlckJDYWxsZWQoRXhjZXB0aW9uKToKICAgICBwYXNzCkBAIC0zNiw3ICszMyw3IEBACiBkZWYgaWdub3JpbmdfZWludHIoX19mdW5jLCAqYXJncywgKiprd2FyZ3MpOgogICAgIHRyeToKICAgICAgICAgcmV0dXJuIF9fZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVJTlRSOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTI3OCw2ICsyNzUsNTcgQEAKIAogICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAKKyAgICBkZWYgdGVzdF93YWtldXBfd3JpdGVfZXJyb3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MTA1OiB3cml0ZSgpIGVycm9ycyBpbiB0aGUgQyBzaWduYWwgaGFuZGxlciBzaG91bGQgbm90CisgICAgICAgICMgcGFzcyBzaWxlbnRseS4KKyAgICAgICAgIyBVc2UgYSBzdWJwcm9jZXNzIHRvIGhhdmUgb25seSBvbmUgdGhyZWFkLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGltcG9ydCBmY250bAorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgaW1wb3J0IHNpZ25hbAorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKKworICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMLCAwKQorICAgICAgICBmY250bC5mY250bChyLCBmY250bC5GX1NFVEZMLCBmbGFncyB8IG9zLk9fTk9OQkxPQ0spCisKKyAgICAgICAgIyBTZXQgd2FrZXVwX2ZkIGEgcmVhZC1vbmx5IGZpbGUgZGVzY3JpcHRvciB0byB0cmlnZ2VyIHRoZSBlcnJvcgorICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZChyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGVycjoKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUuMCkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgIyBBbiBpZ25vcmVkIGV4Y2VwdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHByaW50ZWQgb3V0IG9uIHN0ZGVycgorICAgICAgICAgICAgZXJyID0gZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGlmICgnRXhjZXB0aW9uIGlnbm9yZWQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgdG8gdGhlIHNpZ25hbCB3YWtldXAgZmQnCisgICAgICAgICAgICAgICAgbm90IGluIGVycik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXJyKQorICAgICAgICAgICAgaWYgKCdPU0Vycm9yOiBbRXJybm8gJWRdJyAlIGVycm5vLkVCQURGKSBub3QgaW4gZXJyOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJaZXJvRGl2aXNpb25FcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgIiIiCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mud3JpdGUociwgYid4JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJPUyBkb2Vzbid0IHJlcG9ydCB3cml0ZSgpIGVycm9yIG9uIHRoZSByZWFkIGVuZCBvZiBhIHBpcGUiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorCiAgICAgZGVmIHRlc3Rfd2FrZXVwX2ZkX2Vhcmx5KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3dha2V1cCgiIiJkZWYgdGVzdCgpOgogICAgICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtMzE1LDEwICszNjMsMTAgQEAKICAgICAgICAgICAgICMgV2UgYXR0ZW1wdCB0byBnZXQgYSBzaWduYWwgZHVyaW5nIHRoZSBzZWxlY3QgY2FsbAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW3JlYWRdLCBbXSwgW10sIFRJTUVPVVRfRlVMTCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2VsZWN0LmVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT1NFcnJvciBub3QgcmFpc2VkIikKICAgICAgICAgICAgIGFmdGVyX3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgZHQgPSBhZnRlcl90aW1lIC0gYmVmb3JlX3RpbWUKICAgICAgICAgICAgIGlmIGR0ID49IFRJTUVPVVRfSEFMRjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQppbmRleCBjMjk0YzY1Li5jYjdjMzkzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CkBAIC0yMzEsMTEgKzIzMSw3IEBACiAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ3hveG8nXQogICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAxKQotICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ0xpYicsICdzaXRlLXBhY2thZ2VzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQotICAgICAgICBlbGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCiAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpKToKICAgICAgICAgICAgICMgT1MgWCBmcmFtZXdvcmsgYnVpbGRzCiAgICAgICAgICAgICBzaXRlLlBSRUZJWEVTID0gWydQeXRob24uZnJhbWV3b3JrJ10KQEAgLTQzMiw1ICs0MjgsMzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCAyMDAsIG1zZz0iQ2FuJ3QgZmluZCAiICsgdXJsKQogCiAKK2NsYXNzIFN0YXJ0dXBJbXBvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFydHVwX2ltcG9ydHMoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyBjaGVja3Mgd2hpY2ggbW9kdWxlcyBhcmUgbG9hZGVkIGJ5IFB5dGhvbiB3aGVuIGl0CisgICAgICAgICMgaW5pdGlhbGx5IHN0YXJ0cyB1cG9uIHN0YXJ0dXAuCisgICAgICAgIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctSScsICctdicsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHByaW50KHNldChzeXMubW9kdWxlcykpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RkZXJyID0gc3RkZXJyLmRlY29kZSgndXRmLTgnKQorICAgICAgICBtb2R1bGVzID0gZXZhbChzdGRvdXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc2l0ZScsIG1vZHVsZXMpCisKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMDUKKyAgICAgICAgcmVfbW9kcyA9IHsncmUnLCAnX3NyZScsICdzcmVfY29tcGlsZScsICdzcmVfY29uc3RhbnRzJywgJ3NyZV9wYXJzZSd9CisgICAgICAgICMgX29zeF9zdXBwb3J0IHVzZXMgdGhlIHJlIG1vZHVsZSBpbiBtYW55IHBsYWNzCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9kdWxlcy5pbnRlcnNlY3Rpb24ocmVfbW9kcyksIHN0ZGVycikKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlOTU0OAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsb2NhbGUnLCBtb2R1bGVzLCBzdGRlcnIpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjA5CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjb3B5cmVnJywgbW9kdWxlcywgc3RkZXJyKQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIxOD4KKyAgICAgICAgY29sbGVjdGlvbl9tb2RzID0geydfY29sbGVjdGlvbnMnLCAnY29sbGVjdGlvbnMnLCAnZnVuY3Rvb2xzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFwcScsICdpdGVydG9vbHMnLCAna2V5d29yZCcsICdvcGVyYXRvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwcmxpYicsICd0eXBlcycsICd3ZWFrcmVmJ30KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihjb2xsZWN0aW9uX21vZHMpLCBzdGRlcnIpCisKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CmluZGV4IDJkZjkyNzEuLjkyMDNkNWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbGljZS5weQpAQCAtNCw4ICs0LDcwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gcGlja2xlIGltcG9ydCBsb2FkcywgZHVtcHMKIAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiAKKworZGVmIGV2YWx1YXRlX3NsaWNlX2luZGV4KGFyZyk6CisgICAgIiIiCisgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzbGljZSBhcmd1bWVudCB0byBhbiBpbnRlZ2VyLCBhbmQgcmFpc2UKKyAgICBUeXBlRXJyb3Igd2l0aCBhIHN1aXRhYmxlIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICIiIgorICAgIGlmIGhhc2F0dHIoYXJnLCAnX19pbmRleF9fJyk6CisgICAgICAgIHJldHVybiBvcGVyYXRvci5pbmRleChhcmcpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgInNsaWNlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciAiCisgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKQorCitkZWYgc2xpY2VfaW5kaWNlcyhzbGljZSwgbGVuZ3RoKToKKyAgICAiIiIKKyAgICBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzbGljZS5pbmRpY2VzIG1ldGhvZC4KKworICAgICIiIgorICAgICMgQ29tcHV0ZSBzdGVwIGFuZCBsZW5ndGggYXMgaW50ZWdlcnMuCisgICAgbGVuZ3RoID0gb3BlcmF0b3IuaW5kZXgobGVuZ3RoKQorICAgIHN0ZXAgPSAxIGlmIHNsaWNlLnN0ZXAgaXMgTm9uZSBlbHNlIGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0ZXApCisKKyAgICAjIFJhaXNlIFZhbHVlRXJyb3IgZm9yIG5lZ2F0aXZlIGxlbmd0aCBvciB6ZXJvIHN0ZXAuCisgICAgaWYgbGVuZ3RoIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibGVuZ3RoIHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKQorICAgIGlmIHN0ZXAgPT0gMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpCisKKyAgICAjIEZpbmQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBmb3Igc3RhcnQgYW5kIHN0b3AuCisgICAgbG93ZXIgPSAtMSBpZiBzdGVwIDwgMCBlbHNlIDAKKyAgICB1cHBlciA9IGxlbmd0aCAtIDEgaWYgc3RlcCA8IDAgZWxzZSBsZW5ndGgKKworICAgICMgQ29tcHV0ZSBzdGFydC4KKyAgICBpZiBzbGljZS5zdGFydCBpcyBOb25lOgorICAgICAgICBzdGFydCA9IHVwcGVyIGlmIHN0ZXAgPCAwIGVsc2UgbG93ZXIKKyAgICBlbHNlOgorICAgICAgICBzdGFydCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0YXJ0KQorICAgICAgICBzdGFydCA9IG1heChzdGFydCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0YXJ0IDwgMCBlbHNlIG1pbihzdGFydCwgdXBwZXIpCisKKyAgICAjIENvbXB1dGUgc3RvcC4KKyAgICBpZiBzbGljZS5zdG9wIGlzIE5vbmU6CisgICAgICAgIHN0b3AgPSBsb3dlciBpZiBzdGVwIDwgMCBlbHNlIHVwcGVyCisgICAgZWxzZToKKyAgICAgICAgc3RvcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0b3ApCisgICAgICAgIHN0b3AgPSBtYXgoc3RvcCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0b3AgPCAwIGVsc2UgbWluKHN0b3AsIHVwcGVyKQorCisgICAgcmV0dXJuIHN0YXJ0LCBzdG9wLCBzdGVwCisKKworIyBDbGFzcyBwcm92aWRpbmcgYW4gX19pbmRleF9fIG1ldGhvZC4gIFVzZWQgZm9yIHRlc3Rpbmcgc2xpY2UuaW5kaWNlcy4KKworY2xhc3MgTXlJbmRleGFibGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKwogY2xhc3MgU2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgpAQCAtNzUsNiArMTM3LDIyIEBACiAgICAgICAgIHMgPSBzbGljZShvYmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0b3AgaXMgb2JqKQogCisgICAgZGVmIGNoZWNrX2luZGljZXMoc2VsZiwgc2xpY2UsIGxlbmd0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbCA9IHNsaWNlLmluZGljZXMobGVuZ3RoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGFjdHVhbCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBlY3RlZCA9IHNsaWNlX2luZGljZXMoc2xpY2UsIGxlbmd0aCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICAgICAgaWYgbGVuZ3RoID49IDAgYW5kIHNsaWNlLnN0ZXAgIT0gMDoKKyAgICAgICAgICAgIGFjdHVhbCA9IHJhbmdlKCpzbGljZS5pbmRpY2VzKGxlbmd0aCkpCisgICAgICAgICAgICBleHBlY3RlZCA9IHJhbmdlKGxlbmd0aClbc2xpY2VdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdF9pbmRpY2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUgICAgICAgICAgICkuaW5kaWNlcygxMCksICgwLCAxMCwgIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsICBOb25lLCAgMikuaW5kaWNlcygxMCksICgwLCAxMCwgIDIpKQpAQCAtMTA4LDcgKzE4Niw0MSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgxMCkpWzo6c3lzLm1heHNpemUgLSAxXSwgWzBdKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNsaWNlKE5vbmUpLmluZGljZXMsIDE8PDEwMCkKKyAgICAgICAgIyBDaGVjayBhIHZhcmlldHkgb2Ygc3RhcnQsIHN0b3AsIHN0ZXAgYW5kIGxlbmd0aCB2YWx1ZXMsIGluY2x1ZGluZworICAgICAgICAjIHZhbHVlcyBleGNlZWRpbmcgc3lzLm1heHNpemUgKHNlZSBpc3N1ZSAjMTQ3OTQpLgorICAgICAgICB2YWxzID0gW05vbmUsIC0yKioxMDAsIC0yKiozMCwgLTUzLCAtNywgLTEsIDAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBsZW5ndGhzID0gWzAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBmb3Igc2xpY2VfYXJncyBpbiBpdGVydG9vbHMucHJvZHVjdCh2YWxzLCByZXBlYXQ9Myk6CisgICAgICAgICAgICBzID0gc2xpY2UoKnNsaWNlX2FyZ3MpCisgICAgICAgICAgICBmb3IgbGVuZ3RoIGluIGxlbmd0aHM6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHMsIGxlbmd0aCkKKyAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHNsaWNlKDAsIDEwLCAxKSwgLTMpCisKKyAgICAgICAgIyBOZWdhdGl2ZSBsZW5ndGggc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKE5vbmUpLmluZGljZXMoLTEpCisKKyAgICAgICAgIyBaZXJvIHN0ZXAgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAwKS5pbmRpY2VzKDUpCisKKyAgICAgICAgIyBVc2luZyBhIHN0YXJ0LCBzdG9wIG9yIHN0ZXAgb3IgbGVuZ3RoIHRoYXQgY2FuJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4KKyAgICAgICAgIyBpbnRlZ2VyIHNob3VsZCBnaXZlIGEgVHlwZUVycm9yIC4uLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLjAsIDEwLCAxKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLjAsIDEpLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDEuMCkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyg1LjApCisKKyAgICAgICAgIyAuLi4gYnV0IGl0IHNob3VsZCBiZSBmaW5lIHRvIHVzZSBhIGN1c3RvbSBjbGFzcyB0aGF0IHByb3ZpZGVzIGluZGV4LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTXlJbmRleGFibGUoMCksIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgTXlJbmRleGFibGUoMTApLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIE15SW5kZXhhYmxlKDEpKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoTXlJbmRleGFibGUoNSkpLCAoMCwgNSwgMSkpCiAKICAgICBkZWYgdGVzdF9zZXRzbGljZV93aXRob3V0X2dldHNsaWNlKHNlbGYpOgogICAgICAgICB0bXAgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CmluZGV4IDhkMWRiYmYuLmU2ZjM5ZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNvdXJjZV9hZGRyZXNzLCAoJzEyNy4wLjAuMScsIHBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmxvY2FsX2hvc3RuYW1lLCAnbG9jYWxob3N0JykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNTI0LDEyICs1MjQsNiBAQAogCiBjbGFzcyBOb25Db25uZWN0aW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzbXRwbGliLnNvY2tldCA9IG1vY2tfc29ja2V0Ci0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNtdHBsaWIuc29ja2V0ID0gc29ja2V0Ci0KICAgICBkZWYgdGVzdE5vdENvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBUZXN0IHZhcmlvdXMgb3BlcmF0aW9ucyBvbiBhbiB1bmNvbm5lY3RlZCBTTVRQIG9iamVjdCB0aGF0CiAgICAgICAgICMgc2hvdWxkIHJhaXNlIGV4Y2VwdGlvbnMgKGF0IHByZXNlbnQgdGhlIGF0dGVtcHQgaW4gU01UUC5zZW5kCkBAIC01NDEsMTAgKzUzNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLnNlbmQsICd0ZXN0IG1zZycpCiAKICAgICBkZWYgdGVzdE5vbm51bWVyaWNQb3J0KHNlbGYpOgotICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgc29ja2V0LmVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgICMgY2hlY2sgdGhhdCBub24tbnVtZXJpYyBwb3J0IHJhaXNlcyBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdCIsICJib2d1cyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdDpib2d1cyIpCiAKIApAQCAtODI1LDYgKzgxOSwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9jcmVkZW50aWFsc1snY3JhbS1tZDUnXSwgc3RyKGVycikpCiAgICAgICAgIHNtdHAuY2xvc2UoKQogCisgICAgZGVmIHRlc3RBVVRIX211bHRpcGxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSB0cmllZC4KKyAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCJBVVRIIEJPR1VTIFBMQUlOIExPR0lOIENSQU0tTUQ1IikKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorICAgICAgICB0cnk6IHNtdHAubG9naW4oc2ltX2F1dGhbMF0sIHNpbV9hdXRoWzFdKQorICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQQXV0aGVudGljYXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNpbV9hdXRoX2xvZ2luX3Bhc3N3b3JkLCBzdHIoZXJyKSkKKyAgICAgICAgc210cC5jbG9zZSgpCisKICAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKICAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0KSBhcyBzbXRwOgogICAgICAgICAgICAgY29kZSwgbWVzc2FnZSA9IHNtdHAubm9vcCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NuZGhkci5weSBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CmluZGV4IDEwMDQ2ODguLjVlMGFiZTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CkBAIC0xMiw3ICsxMiw3IEBACiAgICAgICAgICAgICAoJ3NuZGhkci5oY29tJywgKCdoY29tJywgMjIwNTAuMCwgMSwgLTEsIDgpKSwKICAgICAgICAgICAgICgnc25kaGRyLnNuZHQnLCAoJ3NuZHQnLCA0NDEwMCwgMSwgNSwgOCkpLAogICAgICAgICAgICAgKCdzbmRoZHIudm9jJywgKCd2b2MnLCAwLCAxLCAtMSwgOCkpLAotICAgICAgICAgICAgKCdzbmRoZHIud2F2JywgKCd3YXYnLCA0NDEwMCwgMiwgLTEsIDE2KSksCisgICAgICAgICAgICAoJ3NuZGhkci53YXYnLCAoJ3dhdicsIDQ0MTAwLCAyLCA1LCAxNikpLAogICAgICAgICApOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBmaW5kZmlsZShmaWxlbmFtZSwgc3ViZGlyPSJzbmRoZHJkYXRhIikKICAgICAgICAgICAgIHdoYXQgPSBzbmRoZHIud2hhdChmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKaW5kZXggMTI1MTdhZS4uM2M5ZmJmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKQEAgLTIsNyArMiw2IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IF9FeHBlY3RlZEZhaWx1cmUKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KQEAgLTI0LDEzICsyMywxMyBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN0cnVjdAogdHJ5OgotICAgIGltcG9ydCBmY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZjbnRsID0gRmFsc2UKLXRyeToKICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gRmFsc2UKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXHUxMjM0XHJcbicuZW5jb2RlKCd1dGYtOCcpICMjIHRlc3QgdW5pY29kZSBzdHJpbmcgYW5kIGNhcnJpYWdlIHJldHVybgpAQCAtNDYsNyArNDUsNyBAQAogICAgICIiIkNoZWNrIHdoZXRoZXIgQ0FOIHNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIGhvc3QuIiIiCiAgICAgdHJ5OgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHNvY2tldC5lcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIGVsc2U6CiAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTIxLDEyICsxMjAsNDIgQEAKICAgICBpbnRlcmZhY2UgPSAndmNhbjAnCiAgICAgYnVmc2l6ZSA9IDEyOAogCisgICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgorCisgICAgc3RydWN0IGNhbl9mcmFtZSB7CisgICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCisgICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCisgICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisgICAgfTsKKyAgICAiIiIKKyAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCisgICAgY2FuX2ZyYW1lX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoY2FuX2ZyYW1lX2ZtdCkKKworICAgICIiIlRoZSBCcm9hZGNhc3QgTWFuYWdlbWVudCBDb21tYW5kIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgICAgaW4gPGxpbnV4L2Nhbi9iY20uaD46CisKKyAgICBzdHJ1Y3QgYmNtX21zZ19oZWFkIHsKKyAgICAgICAgX191MzIgb3Bjb2RlOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgY291bnQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIGl2YWwxLCBpdmFsMjsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7CisgICAgICAgIF9fdTMyIG5mcmFtZXM7CisgICAgICAgIHN0cnVjdCBjYW5fZnJhbWUgZnJhbWVzWzBdOworICAgIH0KKworICAgIGBiY21fbXNnX2hlYWRgIG11c3QgYmUgOCBieXRlcyBhbGlnbmVkIGJlY2F1c2Ugb2YgdGhlIGBmcmFtZXNgIG1lbWJlciAoc2VlCisgICAgYHN0cnVjdCBjYW5fZnJhbWVgIGRlZmluaXRpb24pLiBNdXN0IHVzZSBuYXRpdmUgbm90IHN0YW5kYXJkIHR5cGVzIGZvciBwYWNraW5nLgorICAgICIiIgorICAgIGJjbV9jbWRfbXNnX2ZtdCA9ICJAM0k0bDJJIgorICAgIGJjbV9jbWRfbXNnX2ZtdCArPSAieCIgKiAoc3RydWN0LmNhbGNzaXplKGJjbV9jbWRfbXNnX2ZtdCkgJSA4KQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnMuY2xvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucy5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25ldHdvcmsgaW50ZXJmYWNlIGAlc2AgZG9lcyBub3QgZXhpc3QnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlKQogCkBAIC0yNDIsOSArMjcxLDYgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgIyBXZSBkZWxpYmVyYXRlbHkgaWdub3JlIGV4cGVjdGVkIGZhaWx1cmVzCi0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChlKQogICAgICAgICBmaW5hbGx5OgpAQCAtMjk1LDcgKzMyMSw3IEBACiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaS5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc2tpcFRlc3Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaGVyZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGluIHRoZQogICAgICAgICAgICAgIyBzZXJ2ZXIgaW5zdGVhZAogICAgICAgICAgICAgcGFzcwpAQCAtNTQzLDExICs1NjksNyBAQAogY2xhc3MgSW5ldDZUZXN0QmFzZShJbmV0VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIElQdjYgc29ja2V0IHRlc3RzLiIiIgogCi0gICAgIyBEb24ndCB1c2UgImxvY2FsaG9zdCIgaGVyZSAtIGl0IG1heSBub3QgaGF2ZSBhbiBJUHY2IGFkZHJlc3MKLSAgICAjIGFzc2lnbmVkIHRvIGl0IGJ5IGRlZmF1bHQgKGUuZy4gaW4gL2V0Yy9ob3N0cyksIGFuZCBpZiBzb21lb25lCi0gICAgIyBoYXMgYXNzaWduZWQgaXQgYW4gSVB2NC1tYXBwZWQgYWRkcmVzcywgdGhlbiBpdCdzIHVubGlrZWx5IHRvCi0gICAgIyB3b3JrIHdpdGggdGhlIGZ1bGwgSVB2NiBBUEkuCi0gICAgaG9zdCA9ICI6OjEiCisgICAgaG9zdCA9IHN1cHBvcnQuSE9TVHY2CiAKIGNsYXNzIFVEUDZUZXN0QmFzZShJbmV0NlRlc3RCYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBVRFAtb3Zlci1JUHY2IHRlc3RzLiIiIgpAQCAtNjA4LDcgKzYzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4gYXJnc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKmNhbGxhcmdzKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFhYWDogY2hlY2sgZXJybm8/CiAgICAgICAgICAgICBlcnIgPSBzdHIoZSkKICAgICAgICAgZWxzZToKQEAgLTYyNiw4ICs2NDgsMTcgQEAKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzKS5zdGFydHN3aXRoKCI8c29ja2V0LnNvY2tldCBvYmplY3QiKSkKKyAgICAgICAgd2l0aCBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmQ9JWknICUgcy5maWxlbm8oKSwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZhbWlseT0lcycgJSBzb2NrZXQuQUZfSU5FVCwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R5cGU9JXMnICUgc29ja2V0LlNPQ0tfU1RSRUFNLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncHJvdG89MCcsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdyYWRkcicsIHJlcHIocykpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xhZGRyJywgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyKHMuZ2V0c29ja25hbWUoKSksIHJlcHIocykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1tjbG9zZWRdJywgcmVwcihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGFkZHInLCByZXByKHMpKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKQEAgLTY0NSwxMSArNjc2LDExIEBACiAgICAgZGVmIHRlc3RTb2NrZXRFcnJvcihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNvY2tldCBtb2R1bGUgZXhjZXB0aW9ucwogICAgICAgICBtc2cgPSAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uICglcykuIgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZXJyb3InKToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdPU0Vycm9yJyk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuaGVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5nYWllcnJvcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmdhaWVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKIAogICAgIGRlZiB0ZXN0U2VuZHRvRXJyb3JzKHNlbGYpOgpAQCAtNzEyLDEzICs3NDMsMTMgQEAKICAgICAgICAgaG9zdG5hbWUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpcCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3RuYW1lKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAuZmluZCgnLicpID49IDAsICJFcnJvciByZXNvbHZpbmcgaG9zdCB0byBpcC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBobmFtZSwgYWxpYXNlcywgaXBhZGRycyA9IHNvY2tldC5nZXRob3N0YnlhZGRyKGlwKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgYSBzaW1pbGFyIHByb2JsZW0gYXMgYWJvdmU7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgYWxsX2hvc3RfbmFtZXMgPSBbaG9zdG5hbWUsIGhuYW1lXSArIGFsaWFzZXMKQEAgLTcyNiwxMyArNzU3LDI3IEBACiAgICAgICAgIGlmIG5vdCBmcWhuIGluIGFsbF9ob3N0X25hbWVzOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0ZXN0aW5nIGhvc3QgcmVzb2x1dGlvbiBtZWNoYW5pc21zLiAoZnFkbjogJXMsIGFsbDogJXMpIiAlIChmcWhuLCByZXByKGFsbF9ob3N0X25hbWVzKSkpCiAKKyAgICBkZWYgdGVzdF9ob3N0X3Jlc29sdXRpb24oc2VsZik6CisgICAgICAgIGZvciBhZGRyIGluIFsnMC4xLjEufjEnLCAnMSsuMS4xLjEnLCAnOjoxcScsICc6OjE6OjInLAorICAgICAgICAgICAgICAgICAgICAgJzE6MToxOjE6MToxOjE6MToxJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSwgYWRkcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRob3N0YnlhZGRyLCBhZGRyKQorCisgICAgICAgIGZvciBhZGRyIGluIFtzdXBwb3J0LkhPU1QsICcxMC4wLjAuMScsICcyNTUuMjU1LjI1NS4yNTUnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGhvc3RieW5hbWUoYWRkciksIGFkZHIpCisKKyAgICAgICAgIyB3ZSBkb24ndCB0ZXN0IHN1cHBvcnQuSE9TVHY2IGJlY2F1c2UgdGhlcmUncyBhIGNoYW5jZSBpdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgIyBhIG1hdGNoaW5nIG5hbWUgZW50cnkgKGUuZy4gJ2lwNi1sb2NhbGhvc3QnKQorICAgICAgICBmb3IgaG9zdCBpbiBbc3VwcG9ydC5IT1NUXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdCwgc29ja2V0LmdldGhvc3RieWFkZHIoaG9zdClbMl0pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5zZXRob3N0bmFtZSgpIikKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ2dldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5nZXRob3N0bmFtZSgpIikKICAgICBkZWYgdGVzdF9zZXRob3N0bmFtZShzZWxmKToKICAgICAgICAgb2xkaG4gPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0aG9zdG5hbWUoJ25ldycpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBFUk06CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBzaG91bGQgYmUgcnVuIGFzIHJvb3QiKQogICAgICAgICAgICAgZWxzZToKQEAgLTc2Niw4ICs4MTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuaWZfbmFtZWluZGV4KCkgbm90IGF2YWlsYWJsZS4nKQogICAgIGRlZiB0ZXN0SW52YWxpZEludGVyZmFjZU5hbWVJbmRleChzZWxmKToKICAgICAgICAgIyB0ZXN0IG5vbmV4aXN0ZW50IGludGVyZmFjZSBpbmRleC9uYW1lCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgJ19ERUFEQkVFRicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAnX0RFQURCRUVGJykKICAgICAgICAgIyB0ZXN0IHdpdGggaW52YWxpZCB2YWx1ZXMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAnX0RFQURCRUVGJykKQEAgLTc4OSw3ICs4MzQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgY3Jhc2hlcyB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oKCd4JywgMCwgMCwgMCksIDApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3ROdG9IKHNlbGYpOgpAQCAtODM2LDE3ICs4ODEsMTcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3RjcCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBUcnkgc2FtZSBjYWxsIHdpdGggb3B0aW9uYWwgcHJvdG9jb2wgb21pdHRlZAogICAgICAgICBwb3J0MiA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UpCiAgICAgICAgIGVxKHBvcnQsIHBvcnQyKQogICAgICAgICAjIFRyeSB1ZHAsIGJ1dCBkb24ndCBiYXJmIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdWRwcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd1ZHAnKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHVkcHBvcnQgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcSh1ZHBwb3J0LCBwb3J0KQpAQCAtOTAyLDcgKzk0Nyw3IEBACiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQsIGEpCiAKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBmdW5jLGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDBceDAwXHgwMFx4MDAnLCBmKCcwLjAuMC4wJykpCkBAIC05MzUsOSArOTgwLDE3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgJzo6JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICMgSVB2NiBtaWdodCBub3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgUEMKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDAwJyAqIDE2LCBmKCc6OicpKQpAQCAtOTg2LDcgKzEwMzksNyBAQAogICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9udG9hIGFzIGYsIGluZXRfbnRvcCwgQUZfSU5FVAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVULCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGZ1bmMsYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZihiJ1x4MDFceDAwXHgwMVx4MDAnKSkKQEAgLTEwMTMsOSArMTA2NiwxNyBAQAogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsIGInXHgwMCcgKiAxNikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICMgSVB2NiBtaWdodCBub3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgUEMKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzo6JywgZihiJ1x4MDAnICogMTYpKQpAQCAtMTA0Myw3ICsxMTA0LDcgQEAKICAgICAgICAgIyBBdCBsZWFzdCBmb3IgZUNvcy4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBTLzM5MCB0byBwYXNzLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBteV9pcF9hZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGhvc3RuYW1lKCkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBQcm9iYWJseSBuYW1lIGxvb2t1cCB3YXNuJ3Qgc2V0IHVwIHJpZ2h0OyBza2lwIHRoaXMgdGVzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZVswXSwgKCIwLjAuMC4wIiwgbXlfaXBfYWRkciksICclcyBpbnZhbGlkJyAlIG5hbWVbMF0pCkBAIC0xMDcwLDEzICsxMTMxLDE5IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNvY2suc2V0dGltZW91dCgxKQogICAgICAgICBzb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmQsIGIic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2suc2VuZCwgYiJzcGFtIikKIAogICAgIGRlZiB0ZXN0TmV3QXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyB0ZXN0aW5nIC5mYW1pbHksIC50eXBlIGFuZCAucHJvdG9jb2wKKwogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc29jay50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sucHJvdG8sIDApCiAgICAgICAgIHNvY2suY2xvc2UoKQogCkBAIC0xMTI5LDkgKzExOTYsMTIgQEAKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwKQogICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSkKICAgICAgICAgIyB0ZXN0IGZhbWlseSBhbmQgc29ja3R5cGUgZmlsdGVycwotICAgICAgICBpbmZvcyA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCBzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgZm9yIGZhbWlseSwgXywgXywgXywgXyBpbiBpbmZvczoKKyAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgODAsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmYW1pbHkpLCAnQWRkcmVzc0ZhbWlseS5BRl9JTkVUJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHlwZSksICdTb2NrZXRUeXBlLlNPQ0tfU1RSRUFNJykKICAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBmb3IgXywgc29ja3R5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2t0eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCkBAIC0xMTczLDcgKzEyNDMsNyBAQAogCiAgICAgZGVmIHRlc3RfZ2V0bmFtZWluZm8oc2VsZik6CiAgICAgICAgICMgb25seSBJUCBhZGRyZXNzZXMgYXJlIGFsbG93ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrZXQuZ2V0bmFtZWluZm8sICgnbWFpbC5weXRob24ub3JnJywwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLCAoJ21haWwucHl0aG9uLm9yZycsMCksIDApCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBpcyBub3QgZW5hYmxlZCcpCkBAIC0xMjg1LDEwICsxMzU1LDMxIEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5JUFY2X0VOQUJMRUQsICdJUHY2IHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdF9mbG93aW5mbyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoJzo6MScsMCwgMHhmZmZmZmZmZiksIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBwb3J0LkhPU1R2NiwgMCwgMHhmZmZmZmZmZiksIDApCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHMuYmluZCwgKCc6OjEnLCAwLCAtMTApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcy5iaW5kLCAoc3VwcG9ydC5IT1NUdjYsIDAsIC0xMCkpCiAKKyAgICBkZWYgdGVzdF9zdHJfZm9yX2VudW1zKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBBRl8qIGFuZCBTT0NLXyogY29uc3RhbnRzIGhhdmUgZW51bS1saWtlIHN0cmluZworICAgICAgICAjIHJlcHJzLgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHMuZmFtaWx5KSwgJ0FkZHJlc3NGYW1pbHkuQUZfSU5FVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzLnR5cGUpLCAnU29ja2V0VHlwZS5TT0NLX1NUUkVBTScpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgJ1dpbGwgbm90IHdvcmsgb24gV2luZG93cycpCisgICAgZGVmIHRlc3RfdWtub3duX3NvY2tldF9mYW1pbHlfcmVwcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2hlbiBjcmVhdGVkIHdpdGggYSBmYW1pbHkgdGhhdCdzIG5vdCBvbmUgb2YgdGhlIGtub3duCisgICAgICAgICMgQUZfKi9TT0NLXyogY29uc3RhbnRzLCBzb2NrZXQuZmFtaWx5IGp1c3QgcmV0dXJucyB0aGUgbnVtYmVyLgorICAgICAgICAjCisgICAgICAgICMgVG8gZG8gdGhpcyB3ZSBmb29sIHNvY2tldC5zb2NrZXQgaW50byBiZWxpZXZpbmcgaXQgYWxyZWFkeSBoYXMgYW4KKyAgICAgICAgIyBvcGVuIGZkIGJlY2F1c2Ugb24gdGhpcyBwYXRoIGl0IGRvZXNuJ3QgYWN0dWFsbHkgdmVyaWZ5IHRoZSBmYW1pbHkgYW5kCisgICAgICAgICMgdHlwZSBhbmQgcG9wdWxhdGVzIHRoZSBzb2NrZXQgb2JqZWN0LgorICAgICAgICAjCisgICAgICAgICMgT24gV2luZG93cyB0aGlzIHRyaWNrIHdvbid0IHdvcmssIHNvIHRoZSB0ZXN0IGlzIHNraXBwZWQuCisgICAgICAgIGZkLCBfID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChmYW1pbHk9NDI0MjQsIHR5cGU9MTMzMzEsIGZpbGVubz1mZCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5mYW1pbHksIDQyNDI0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnR5cGUsIDEzMzMxKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9DQU4sICdTb2NrZXRDYW4gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNDQU5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEyOTgsMTAgKzEzODksMzUgQEAKICAgICAgICAgc29ja2V0LlBGX0NBTgogICAgICAgICBzb2NrZXQuQ0FOX1JBVwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdEJDTUNvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc29ja2V0LkNBTl9CQ00KKworICAgICAgICAjIG9wY29kZXMKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfU0VUVVAgICAgICMgY3JlYXRlIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX0RFTEVURSAgICAjIHJlbW92ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9SRUFEICAgICAgIyByZWFkIHByb3BlcnRpZXMgb2YgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfU0VORCAgICAgICMgc2VuZCBvbmUgQ0FOIGZyYW1lCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1NFVFVQICAgICAjIGNyZWF0ZSBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfREVMRVRFICAgICMgcmVtb3ZlIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9SRUFEICAgICAgIyByZWFkIHByb3BlcnRpZXMgb2YgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NUQVRVUyAgICAjIHJlcGx5IHRvIFRYX1JFQUQgcmVxdWVzdAorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9FWFBJUkVEICAgIyBub3RpZmljYXRpb24gb24gcGVyZm9ybWVkIHRyYW5zbWlzc2lvbnMgKGNvdW50PTApCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1NUQVRVUyAgICAjIHJlcGx5IHRvIFJYX1JFQUQgcmVxdWVzdAorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9USU1FT1VUICAgIyBjeWNsaWMgbWVzc2FnZSBpcyBhYnNlbnQKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfQ0hBTkdFRCAgICMgdXBkYXRlZCBDQU4gZnJhbWUgKGRldGVjdGVkIGNvbnRlbnQgY2hhbmdlKQorCiAgICAgZGVmIHRlc3RDcmVhdGVTb2NrZXQoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgogICAgICAgICAgICAgcGFzcwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdENyZWF0ZUJDTVNvY2tldChzZWxmKToKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX0RHUkFNLCBzb2NrZXQuQ0FOX0JDTSkgYXMgczoKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0QmluZEFueShzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpIGFzIHM6CiAgICAgICAgICAgICBzLmJpbmQoKCcnLCApKQpAQCAtMTMwOSw3ICsxNDI1LDcgQEAKICAgICBkZWYgdGVzdFRvb0xvbmdJbnRlcmZhY2VOYW1lKHNlbGYpOgogICAgICAgICAjIG1vc3Qgc3lzdGVtcyBsaW1pdCBJRk5BTVNJWiB0byAxNiwgdGFrZSAxMDI0IHRvIGJlIHN1cmUKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNvY2tldC5lcnJvciwgJ2ludGVyZmFjZSBuYW1lIHRvbyBsb25nJywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoT1NFcnJvciwgJ2ludGVyZmFjZSBuYW1lIHRvbyBsb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5iaW5kLCAoJ3gnICogMTAyNCwpKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fUkFXX0xPT1BCQUNLIiksCkBAIC0xMzM0LDE5ICsxNDUwLDggQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9DQU4sICdTb2NrZXRDYW4gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQotQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIENBTlRlc3QoVGhyZWFkZWRDQU5Tb2NrZXRUZXN0KToKIAotICAgICIiIlRoZSBDQU4gZnJhbWUgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gPGxpbnV4L2Nhbi5oPjoKLQotICAgIHN0cnVjdCBjYW5fZnJhbWUgewotICAgICAgICBjYW5pZF90IGNhbl9pZDsgIC8qIDMyIGJpdCBDQU5fSUQgKyBFRkYvUlRSL0VSUiBmbGFncyAqLwotICAgICAgICBfX3U4ICAgIGNhbl9kbGM7IC8qIGRhdGEgbGVuZ3RoIGNvZGU6IDAgLi4gOCAqLwotICAgICAgICBfX3U4ICAgIGRhdGFbOF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotICAgIH07Ci0gICAgIiIiCi0gICAgY2FuX2ZyYW1lX2ZtdCA9ICI9SUIzeDhzIgotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKICAgICAgICAgVGhyZWFkZWRDQU5Tb2NrZXRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKIApAQCAtMTM5NSw2ICsxNTAwLDQ2IEBACiAgICAgICAgIHNlbGYuY2YyID0gc2VsZi5idWlsZF9jYW5fZnJhbWUoMHgxMiwgYidceDk5XHgyMlx4MzMnKQogICAgICAgICBzZWxmLmNsaS5zZW5kKHNlbGYuY2YyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgX3Rlc3RCQ00oc2VsZik6CisgICAgICAgIGNmLCBhZGRyID0gc2VsZi5jbGkucmVjdmZyb20oc2VsZi5idWZzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2YsIGNmKQorICAgICAgICBjYW5faWQsIGNhbl9kbGMsIGRhdGEgPSBzZWxmLmRpc3NlY3RfY2FuX2ZyYW1lKGNmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FuX2lkLCBjYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYXRhLCBkYXRhKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdEJDTShzZWxmKToKKyAgICAgICAgYmNtID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChiY20uY2xvc2UpCisgICAgICAgIGJjbS5jb25uZWN0KChzZWxmLmludGVyZmFjZSwpKQorICAgICAgICBzZWxmLmNhbl9pZCA9IDB4MTIzCisgICAgICAgIHNlbGYuZGF0YSA9IGJ5dGVzKFsweGMwLCAweGZmLCAweGVlXSkKKyAgICAgICAgc2VsZi5jZiA9IHNlbGYuYnVpbGRfY2FuX2ZyYW1lKHNlbGYuY2FuX2lkLCBzZWxmLmRhdGEpCisgICAgICAgIG9wY29kZSA9IHNvY2tldC5DQU5fQkNNX1RYX1NFTkQKKyAgICAgICAgZmxhZ3MgPSAwCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBpdmFsMV9zZWNvbmRzID0gaXZhbDFfdXNlYyA9IGl2YWwyX3NlY29uZHMgPSBpdmFsMl91c2VjID0gMAorICAgICAgICBiY21fY2FuX2lkID0gMHgwMjIyCisgICAgICAgIG5mcmFtZXMgPSAxCisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5jZikgPT0gMTYKKyAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soc2VsZi5iY21fY21kX21zZ19mbXQsCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICBpdmFsMV9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMV91c2VjLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl91c2VjLAorICAgICAgICAgICAgICAgICAgICBiY21fY2FuX2lkLAorICAgICAgICAgICAgICAgICAgICBuZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGhlYWRlcl9wbHVzX2ZyYW1lID0gaGVhZGVyICsgc2VsZi5jZgorICAgICAgICBieXRlc19zZW50ID0gYmNtLnNlbmQoaGVhZGVyX3BsdXNfZnJhbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXNfc2VudCwgbGVuKGhlYWRlcl9wbHVzX2ZyYW1lKSkKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9SRFMsICdSRFMgc29ja2V0cyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY1JEU1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTYwOSw3ICsxNzU0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBmaWxlbm8pCiAgICAgICAgICMgY2xpX2Nvbm4gY2Fubm90IGJlIHVzZWQgYW55bW9yZS4uLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGlfY29ubi5fY2xvc2VkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKICAgICAgICAgIyAuLi5idXQgd2UgY2FuIGNyZWF0ZSBhbm90aGVyIHNvY2tldCB1c2luZyB0aGUgKHN0aWxsIG9wZW4pCiAgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yCkBAIC0xOTc4LDcgKzIxMjMsNyBAQAogICAgIGRlZiBfdGVzdFNlbmRtc2dFeGNlc3NDbXNnUmVqZWN0KHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICJDTVNHX1NQQUNFIik6CiAgICAgICAgICAgICAjIENhbiBvbmx5IHNlbmQgb25lIGl0ZW0KLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW01TR10sIFsoMCwgMCwgYiIiKSwgKDAsIDAsIGIiIildKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY20uZXhjZXB0aW9uLmVycm5vKQogICAgICAgICBzZWxmLnNlbmRUb1NlcnZlcihiImRvbmUiKQpAQCAtMTk4OSw3ICsyMTM0LDcgQEAKIAogICAgIGRlZiBfdGVzdFNlbmRtc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmNsaV9zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNlbmRtc2dUb1NlcnZlciwgW01TR10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuc2VuZG1zZ1RvU2VydmVyLCBbTVNHXSkKIAogCiBjbGFzcyBTZW5kbXNnU3RyZWFtVGVzdHMoU2VuZG1zZ1Rlc3RzKToKQEAgLTIwMzMsNyArMjE3OCw3IEBACiAgICAgQHRlc3RTZW5kbXNnRG9udFdhaXQuY2xpZW50X3NraXAKICAgICBkZWYgX3Rlc3RTZW5kbXNnRG9udFdhaXQoc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW2IiYSIqNTEyXSwgW10sIHNvY2tldC5NU0dfRE9OVFdBSVQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGNtLmV4Y2VwdGlvbi5lcnJubywKQEAgLTIwNTMsOSArMjE5OCw5IEBACiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfdGVzdFNlbmRtc2dOb0Rlc3RBZGRyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbTVNHXSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgW01TR10sIFtdLCAwLCBOb25lKQogCiAKQEAgLTIxNDEsNyArMjI4Niw3IEBACiAgICAgZGVmIHRlc3RSZWN2bXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IHJlY3Ztc2dbX2ludG9dKCkgZmFpbHMgb24gYSBjbG9zZWQgc29ja2V0LgogICAgICAgICBzZWxmLnNlcnZfc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5kb1JlY3Ztc2csIHNlbGYuc2Vydl9zb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmRvUmVjdm1zZywgc2VsZi5zZXJ2X3NvY2ssIDEwMjQpCiAKICAgICBkZWYgX3Rlc3RSZWN2bXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgcGFzcwpAQCAtMjU4Nyw3ICsyNzMyLDcgQEAKICAgICAgICAgIyBjYWxsIGZhaWxzLCBqdXN0IHNlbmQgbXNnIHdpdGggbm8gYW5jaWxsYXJ5IGRhdGEuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddLCBhbmNkYXRhKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgaXQgd2FzIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGZhaWxlZAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuZXJybm8sIGludCkKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddKQpAQCAtMjk2NSw3ICszMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgIGFycmF5LmFycmF5KCJpIiwgW3NlbGYudHJhZmZpY19jbGFzc10pLnRvYnl0ZXMoKSArIGIiXHgwMCIpLAogICAgICAgICAgICAgICAgICAoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QTElNSVQsCiAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSgiaSIsIFtzZWxmLmhvcF9saW1pdF0pKV0pCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLmVycm5vLCBpbnQpCiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcigKICAgICAgICAgICAgICAgICBbTVNHXSwKQEAgLTM0MjMsMTAgKzM1NjgsMTAgQEAKICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoc2VsZi50aW1lb3V0KQogCiAgICAgZGVmIGNoZWNrSW50ZXJydXB0ZWRSZWN2KHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIHNvY2tldC5lcnJvciB3aXRoIGFuCisgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIE9TRXJyb3Igd2l0aCBhbgogICAgICAgICAjIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCiAgICAgICAgIHNlbGYuc2V0QWxhcm0oc2VsZi5hbGFybV90aW1lKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbiwgc29ja2V0LnRpbWVvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5UUikKQEAgLTM0ODMsOSArMzYyOCw5IEBACiAKICAgICBkZWYgY2hlY2tJbnRlcnJ1cHRlZFNlbmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIyBDaGVjayB0aGF0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSwgcnVuIGluIGEgbG9vcCwgcmFpc2VzCi0gICAgICAgICMgc29ja2V0LmVycm9yIHdpdGggYW4gZXJybm8gb2YgRUlOVFIgd2hlbiBpbnRlcnJ1cHRlZCBieSBhCisgICAgICAgICMgT1NFcnJvciB3aXRoIGFuIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYQogICAgICAgICAjIHNpZ25hbC4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKICAgICAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKQEAgLTM1ODQsNyArMzcyOSw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIHNldHRpbmcgbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2MTAsNyArMzc1NSw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIGNyZWF0aW5nIHdpdGggbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2NDAsNyArMzc4NSw3IEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIGFjY2VwdC4iKQpAQCAtMzY3MCw3ICszODE1LDcgQEAKICAgICAgICAgY29ubi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YobGVuKE1TRykpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIHJlY3YuIikKQEAgLTM3NTMsNyArMzg5OCw3IEBACiAgICAgICAgICMgRmlyc3QgcmVhZCByYWlzZXMgYSB0aW1lb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBzZWxmLnJlYWRfZmlsZS5yZWFkLCAxKQogICAgICAgICAjIFNlY29uZCByZWFkIGlzIGRpc2FsbG93ZWQKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjdHg6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY3R4OgogICAgICAgICAgICAgc2VsZi5yZWFkX2ZpbGUucmVhZCgxKQogICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiLCBzdHIoY3R4LmV4Y2VwdGlvbikpCiAKQEAgLTM4NDUsNyArMzk5MCw3IEBACiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5yZWFkX2ZpbGUuZmlsZW5vKQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQogCiAgICAgZGVmIF90ZXN0UmVhbENsb3NlKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC0zODgyLDcgKzQwMjcsNyBAQAogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfcmFpc2VfZWludHIoKToKLSAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQogCiAgICAgZGVmIF90ZXh0aW93cmFwX21vY2tfc29ja2V0KHNlbGYsIG1vY2ssIGJ1ZmZlcmluZz0tMSk6CiAgICAgICAgIHJhdyA9IHNvY2tldC5Tb2NrZXRJTyhtb2NrLCAiciIpCkBAIC0zOTk0LDcgKzQxMzksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgc2VsZi5yZWFkX21zZykKICAgICAgICAgIyAuLi51bnRpbCB0aGUgZmlsZSBpcyBpdHNlbGYgY2xvc2VkCiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKIAogICAgIGRlZiBfdGVzdE1ha2VmaWxlQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfZmlsZS53cml0ZShzZWxmLndyaXRlX21zZykKQEAgLTQxNDMsNyArNDI4OCw3IEBACiAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQogICAgICAgICBjbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGkuY2xvc2UpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGNsaS5jb25uZWN0KChIT1NULCBwb3J0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVDT05OUkVGVVNFRCkKIApAQCAtNDE1MSw3ICs0Mjk2LDcgQEAKICAgICAgICAgIyBJc3N1ZSAjOTc5MjogZXJyb3JzIHJhaXNlZCBieSBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBoYXZlCiAgICAgICAgICMgYSBwcm9wZXIgZXJybm8gYXR0cmlidXRlLgogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBwb3J0KSkKIAogICAgICAgICAjIElzc3VlICMxNjI1NzogY3JlYXRlX2Nvbm5lY3Rpb24oKSBjYWxscyBnZXRhZGRyaW5mbygpIGFnYWluc3QKQEAgLTQyOTksNyArNDQ0NCw3IEBACiAgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYuYWNjZXB0KCkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChUQ1ApIikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBvayA9IFRydWUKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb24gKFRDUCkiKQpAQCAtNDM1Niw3ICs0NTAxLDcgQEAKICAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5yZWN2KDEwMjQpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHRpbWVvdXQgaW5zdGVhZCBvZiBlcnJvciAoVURQKSIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChVRFApIikKQEAgLTQzNjYsMTAgKzQ1MTEsMTAgQEAKIGNsYXNzIFRlc3RFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0RXhjZXB0aW9uVHJlZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmVycm9yLCBFeGNlcHRpb24pKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBzb2NrZXQuZXJyb3IpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBzb2NrZXQuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPU0Vycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmdhaWVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIE9TRXJyb3IpKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ0xpbnV4IHNwZWNpZmljIHRlc3QnKQogY2xhc3MgVGVzdExpbnV4QWJzdHJhY3ROYW1lc3BhY2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDM5Niw3ICs0NTQxLDcgQEAKICAgICBkZWYgdGVzdE5hbWVPdmVyZmxvdyhzZWxmKToKICAgICAgICAgYWRkcmVzcyA9ICJceDAwIiArICJoIiAqIHNlbGYuVU5JWF9QQVRIX01BWAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgcy5iaW5kLCBhZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcy5iaW5kLCBhZGRyZXNzKQogCiAgICAgZGVmIHRlc3RTdHJOYW1lKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgYW4gYWJzdHJhY3QgbmFtZSBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nLgpAQCAtNDYzOCw3ICs0NzgzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKICAgICAgICAgIyBleGNlcHRpb24gaW5zaWRlIHdpdGggYmxvY2sKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKIAogICAgIGRlZiB0ZXN0Q3JlYXRlQ29ubmVjdGlvbkJhc2Uoc2VsZik6CkBAIC00NjY2LDE5ICs0ODExLDc2IEBACiAgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKLSAgICAgICAgICAgICAgICAgICAgICJTT0NLX0NMT0VYRUMgbm90IGRlZmluZWQiKQotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmNudGwsICJtb2R1bGUgZmNudGwgbm90IGF2YWlsYWJsZSIpCi1jbGFzcyBDbG9leGVjQ29uc3RhbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEluaGVyaXRhbmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKICAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDI4KQogICAgIGRlZiB0ZXN0X1NPQ0tfQ0xPRVhFQyhzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQykgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnR5cGUgJiBzb2NrZXQuU09DS19DTE9FWEVDKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjbnRsLmZjbnRsKHMsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5nZXRfaW5oZXJpdGFibGUoKSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2R1cChzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBuZXdzb2NrID0gc29jay5kdXAoKQorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG5ld3NvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9nZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICAgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICAgICAgZmxhZ3MgJj0gfmZjbnRsLkZEX0NMT0VYRUMKKyAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgICAgIHNvY2suc2V0X2luaGVyaXRhYmxlKFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAic29ja2V0cGFpciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHNvY2tldC5zb2NrZXRwYWlyKCkiKQorICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHMxLCBzMiA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMxLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoczIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEuZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMyLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIlNPQ0tfTk9OQkxPQ0siKSwKQEAgLTQ4NDcsNyArNTA0OSw3IEBACiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQXR0cmlidXRlc1Rlc3QsCiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQmVoYXZpb3VyVGVzdCwKICAgICAgICAgQ29udGV4dE1hbmFnZXJzVGVzdCwKLSAgICAgICAgQ2xvZXhlY0NvbnN0YW50VGVzdCwKKyAgICAgICAgSW5oZXJpdGFuY2VUZXN0LAogICAgICAgICBOb25ibG9ja0NvbnN0YW50VGVzdAogICAgIF0pCiAgICAgdGVzdHMuYXBwZW5kKEJhc2ljU29ja2V0UGFpclRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CmluZGV4IDU5ZDhlNWQuLjA2MTdiMzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CkBAIC0yLDggKzIsOCBAQAogVGVzdCBzdWl0ZSBmb3Igc29ja2V0c2VydmVyLgogIiIiCiAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNpZ25hbApAQCAtMjksNyArMjksNyBAQAogSEFWRV9VTklYX1NPQ0tFVFMgPSBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKQogcmVxdWlyZXNfdW5peF9zb2NrZXRzID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1VOSVhfU09DS0VUUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIFVuaXggc29ja2V0cycpCi1IQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpIGFuZCBvcy5uYW1lICE9ICJvczIiCitIQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpCiByZXF1aXJlc19mb3JraW5nID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX0ZPUktJTkcsICdyZXF1aXJlcyBmb3JraW5nJykKIAogZGVmIHNpZ25hbF9hbGFybShuKToKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgZm9yIGZuIGluIHNlbGYudGVzdF9maWxlczoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYudGVzdF9maWxlc1s6XSA9IFtdCiAKQEAgLTk2LDIxICs5Niw3IEBACiAgICAgICAgICAgICAjIFhYWDogV2UgbmVlZCBhIHdheSB0byB0ZWxsIEFGX1VOSVggdG8gcGljayBpdHMgb3duIG5hbWUKICAgICAgICAgICAgICMgbGlrZSBBRl9JTkVUIHByb3ZpZGVzIHBvcnQ9PTAuCiAgICAgICAgICAgICBkaXIgPSBOb25lCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgICAgIGRpciA9ICdcc29ja2V0JwogICAgICAgICAgICAgZm4gPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd1bml4X3NvY2tldC4nLCBkaXI9ZGlyKQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgICAgICAjIEFGX1VOSVggc29ja2V0IG5hbWVzIG9uIE9TLzIgcmVxdWlyZSBhIHNwZWNpZmljIHByZWZpeAotICAgICAgICAgICAgICAgICMgd2hpY2ggY2FuJ3QgaW5jbHVkZSBhIGRyaXZlIGxldHRlciBhbmQgbXVzdCBhbHNvIHVzZQotICAgICAgICAgICAgICAgICMgYmFja3NsYXNoZXMgYXMgZGlyZWN0b3J5IHNlcGFyYXRvcnMKLSAgICAgICAgICAgICAgICBpZiBmblsxXSA9PSAnOic6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm5bMjpdCi0gICAgICAgICAgICAgICAgaWYgZm5bMF0gaW4gKG9zLnNlcCwgb3MuYWx0c2VwKToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsxOl0KLSAgICAgICAgICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3Muc2VwLCBvcy5hbHRzZXApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmbi5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQogICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzLmFwcGVuZChmbikKICAgICAgICAgICAgIHJldHVybiBmbgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWQyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpAQCAtMCwwICsxLDEzNSBAQAorIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitjbGFzcyBTb3VyY2VFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgYidcXFx4ZDBceDlmJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg4MgorICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQorCisgICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKKyAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAorICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKKworICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKKworICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgorICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQorCisgICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCisgICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCisKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQorICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKKyAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKKyAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zc2wucHkgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQppbmRleCAwNmQ0NTk4Li5hZmVjNzJhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NzbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQpAQCAtNiw2ICs2LDcgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKIGltcG9ydCB0aW1lCitpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBnYwogaW1wb3J0IG9zCiBpbXBvcnQgZXJybm8KQEAgLTE3LDE5ICsxOCwxNSBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IGZ1bmN0b29scworZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCiBzc2wgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNzbCIpCiAKLVBST1RPQ09MUyA9IFsKLSAgICBzc2wuUFJPVE9DT0xfU1NMdjMsCi0gICAgc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxCi1dCi1pZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6Ci0gICAgUFJPVE9DT0xTLmFwcGVuZChzc2wuUFJPVE9DT0xfU1NMdjIpCi0KK1BST1RPQ09MUyA9IHNvcnRlZChzc2wuX1BST1RPQ09MX05BTUVTKQogSE9TVCA9IHN1cHBvcnQuSE9TVAogCi1kYXRhX2ZpbGUgPSBsYW1iZGEgbmFtZTogb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG5hbWUpCitkZWYgZGF0YV9maWxlKCpuYW1lKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICpuYW1lKQogCiAjIFRoZSBjdXN0b20ga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlcyB1c2VkIGluIHRlc3Rfc3NsIGFyZSBnZW5lcmF0ZWQKICMgdXNpbmcgTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkuCkBAIC00Nyw2ICs0NCwxNyBAQAogS0VZX1BBU1NXT1JEID0gInNvbWVwYXNzIgogQ0FQQVRIID0gZGF0YV9maWxlKCJjYXBhdGgiKQogQllURVNfQ0FQQVRIID0gb3MuZnNlbmNvZGUoQ0FQQVRIKQorQ0FGSUxFX05FVVJPTklPID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNGUxMjk1YTMuMCIpCitDQUZJTEVfQ0FDRVJUID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNWVkMzZmOTkuMCIpCisKKworIyBlbXB0eSBDUkwKK0NSTEZJTEUgPSBkYXRhX2ZpbGUoInJldm9jYXRpb24uY3JsIikKKworIyBUd28ga2V5cyBhbmQgY2VydHMgc2lnbmVkIGJ5IHRoZSBzYW1lIENBIChmb3IgU05JIHRlc3RzKQorU0lHTkVEX0NFUlRGSUxFID0gZGF0YV9maWxlKCJrZXljZXJ0My5wZW0iKQorU0lHTkVEX0NFUlRGSUxFMiA9IGRhdGFfZmlsZSgia2V5Y2VydDQucGVtIikKK1NJR05JTkdfQ0EgPSBkYXRhX2ZpbGUoInB5Y2FjZXJ0LnBlbSIpCiAKIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCA9IGRhdGFfZmlsZSgiaHR0cHNfc3ZuX3B5dGhvbl9vcmdfcm9vdC5wZW0iKQogCkBAIC02MCw2ICs2OCw3IEBACiBESEZJTEUgPSBkYXRhX2ZpbGUoImRoNTEyLnBlbSIpCiBCWVRFU19ESEZJTEUgPSBvcy5mc2VuY29kZShESEZJTEUpCiAKKwogZGVmIGhhbmRsZV9lcnJvcihwcmVmaXgpOgogICAgIGV4Y19mb3JtYXQgPSAnICcuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTczLDYgKzgyLDIzIEBACiAgICAgIyAwLjkuN2ggb3IgaGlnaGVyCiAgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgNywgOCwgMTUpCiAKK2RlZiBoYXZlX3ZlcmlmeV9mbGFncygpOgorICAgICMgMC45Ljggb3IgaGlnaGVyCisgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgOCwgMCwgMTUpCisKK2RlZiBhc24xdGltZShjZXJ0X3RpbWUpOgorICAgICMgU29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGlnbm9yZSBzZWNvbmRzLCBzZWUgIzE4MjA3CisgICAgIyAwLjkuOC5pCisgICAgaWYgc3NsLl9PUEVOU1NMX0FQSV9WRVJTSU9OID09ICgwLCA5LCA4LCA5LCAxNSk6CisgICAgICAgIGZtdCA9ICIlYiAlZCAlSDolTTolUyAlWSBHTVQiCisgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWUoY2VydF90aW1lLCBmbXQpCisgICAgICAgIGR0ID0gZHQucmVwbGFjZShzZWNvbmQ9MCkKKyAgICAgICAgY2VydF90aW1lID0gZHQuc3RyZnRpbWUoZm10KQorICAgICAgICAjICVkIGFkZHMgbGVhZGluZyB6ZXJvIGJ1dCBBU04xX1RJTUVfcHJpbnQoKSB1c2VzIGxlYWRpbmcgc3BhY2UKKyAgICAgICAgaWYgY2VydF90aW1lWzRdID09ICIwIjoKKyAgICAgICAgICAgIGNlcnRfdGltZSA9IGNlcnRfdGltZVs6NF0gKyAiICIgKyBjZXJ0X3RpbWVbNTpdCisKKyAgICByZXR1cm4gY2VydF90aW1lCiAKICMgSXNzdWUgIzk0MTU6IFVidW50dSBoaWphY2tzIHRoZWlyIE9wZW5TU0wgYW5kIGZvcmNlZnVsbHkgZGlzYWJsZXMgU1NMdjIKIGRlZiBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsKGZ1bmMpOgpAQCAtOTAsMTQgKzExNiwxMiBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBmdW5jCiAKK25lZWRzX3NuaSA9IHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLkhBU19TTkksICJTTkkgc3VwcG9ydCBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisKIAogY2xhc3MgQmFzaWNTb2NrZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6Ci0gICAgICAgICNzc2wuUFJPVE9DT0xfU1NMdjIKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyMwotICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1RMU3YxCiAgICAgICAgIHNzbC5DRVJUX05PTkUKICAgICAgICAgc3NsLkNFUlRfT1BUSU9OQUwKICAgICAgICAgc3NsLkNFUlRfUkVRVUlSRUQKQEAgLTE3NSw4ICsxOTksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJyksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdsb2NhbGhvc3QnKSwpKQogICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sICdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEJlZm9yZSddLCAnT2N0ICA4IDIzOjAxOjU2IDIwMTAgR01UJykKKyAgICAgICAgIyBOb3RlIHRoZSBuZXh0IHRocmVlIGFzc2VydHMgd2lsbCBmYWlsIGlmIHRoZSBrZXlzIGFyZSByZWdlbmVyYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sIGFzbjF0aW1lKCdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RCZWZvcmUnXSwgYXNuMXRpbWUoJ09jdCAgOCAyMzowMTo1NiAyMDEwIEdNVCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3NlcmlhbE51bWJlciddLCAnRDdDNzM4MTkxOUFGQzI0RScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc3ViamVjdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCkBAIC0xOTQsNiArMjE5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnRE5TJywgJ3Byb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb20nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvamVjdHMuZm9ydW0ubm9raWEuY29tJykpCiAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICMgZXh0cmEgT0NTUCBhbmQgQUlBIGZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ09DU1AnXSwgKCdodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY2FJc3N1ZXJzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1haWEudmVyaXNpZ24uY29tL1NWUkludGxHMy5jZXInLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1jcmwudmVyaXNpZ24uY29tL1NWUkludGxHMy5jcmwnLCkpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9jZXJ0X0NWRV8yMDEzXzQyMzgoc2VsZik6CiAgICAgICAgIHAgPSBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydChOVUxMQllURUNFUlQpCkBAIC0yNzYsMTUgKzMwNywxNSBAQAogCiAgICAgZGVmIHRlc3Rfd3JhcHBlZF91bmNvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBNZXRob2RzIG9uIGFuIHVuY29ubmVjdGVkIFNTTFNvY2tldCBwcm9wYWdhdGUgdGhlIG9yaWdpbmFsCi0gICAgICAgICMgc29ja2V0LmVycm9yIHJhaXNlIGJ5IHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCisgICAgICAgICMgT1NFcnJvciByYWlzZSBieSB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKICAgICAgICAgd2l0aCBzc2wud3JhcF9zb2NrZXQocykgYXMgc3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3YsIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2ZnJvbSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kLCBiJ3gnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kdG8sIGIneCcsICgnMC4wLjAuMCcsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdiwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdmZyb20sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2ZnJvbV9pbnRvLCBieXRlYXJyYXkoYid4JyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5zZW5kLCBiJ3gnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKIAogICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzg1MjQ6IHdoZW4gY3JlYXRpbmcgYW4gU1NMIHNvY2tldCwgdGhlIHRpbWVvdXQgb2YgdGhlCkBAIC0zMDksMTUgKzM0MCwxNSBAQAogICAgICAgICB3aXRoIHNzbC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlLCBjZXJ0ZmlsZT1DRVJURklMRSkgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgImNhbid0IGNvbm5lY3QgaW4gc2VydmVyLXNpZGUgbW9kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QsIChIT1NULCA4MDgwKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPUNFUlRGSUxFLCBrZXlmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCwga2V5ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCkBAIC00ODksMTUgKzUyMCwxMjEgQEAKICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ociwgc3RyKGNtLndhcm5pbmcuYXJnc1swXSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhdGhzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhdGhzLCBzc2wuRGVmYXVsdFZlcmlmeVBhdGhzKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgcGF0aHMgPSBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FmaWxlLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FwYXRoLCBDQVBBVEgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY2VydGlmaWNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJST09UIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgc3NsLmVudW1fY2VydGlmaWNhdGVzLCAiIikKKworICAgICAgICB0cnVzdF9vaWRzID0gc2V0KCkKKyAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiAoIkNBIiwgIlJPT1QiKToKKyAgICAgICAgICAgIHN0b3JlID0gc3NsLmVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdG9yZSwgbGlzdCkKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHN0b3JlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbGVtZW50KSwgMykKKyAgICAgICAgICAgICAgICBjZXJ0LCBlbmMsIHRydXN0ID0gZWxlbWVudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjZXJ0LCBieXRlcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVuYywgeyJ4NTA5X2FzbiIsICJwa2NzXzdfYXNuIn0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRydXN0LCAoc2V0LCBib29sKSkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRydXN0LCBzZXQpOgorICAgICAgICAgICAgICAgICAgICB0cnVzdF9vaWRzLnVwZGF0ZSh0cnVzdCkKKworICAgICAgICBzZXJ2ZXJBdXRoID0gIjEuMy42LjEuNS41LjcuMy4xIgorICAgICAgICBzZWxmLmFzc2VydEluKHNlcnZlckF1dGgsIHRydXN0X29pZHMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY3JscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNzbC5lbnVtX2NybHMoIkNBIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLmVudW1fY3JscykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBzc2wuZW51bV9jcmxzLCAiIikKKworICAgICAgICBjcmxzID0gc3NsLmVudW1fY3JscygiQ0EiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY3JscywgbGlzdCkKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gY3JsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVsZW1lbnQpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW1lbnRbMF0sIGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtZW50WzFdLCB7Ing1MDlfYXNuIiwgInBrY3NfN19hc24ifSkKKworCisgICAgZGVmIHRlc3RfYXNuMW9iamVjdChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTI5LCAnc2VydmVyQXV0aCcsICdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMScpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0KCcxLjMuNi4xLjUuNS43LjMuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwubmlkLCAxMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLnNob3J0bmFtZSwgJ3NlcnZlckF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5sb25nbmFtZSwgJ1RMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwub2lkLCAnMS4zLjYuMS41LjUuNy4zLjEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdCwgJ3NlcnZlckF1dGgnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAxMDAwMDAiKToKKyAgICAgICAgICAgIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEwMDAwMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2JqID0gc3NsLl9BU04xT2JqZWN0LmZyb21uaWQoaSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5uaWQsIGludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLnNob3J0bmFtZSwgc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmoubG9uZ25hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLm9pZCwgKHN0ciwgdHlwZShOb25lKSkpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnc2VydmVyQXV0aCcpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJzEuMy42LjEuNS41LjcuMy4xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAidW5rbm93biBvYmplY3QgJ3NlcnZlcmF1dGgnIik6CisgICAgICAgICAgICBzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJ3NlcnZlcmF1dGgnKQorCisgICAgZGVmIHRlc3RfcHVycG9zZV9lbnVtKHNlbGYpOgorICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QoJzEuMy42LjEuNS41LjcuMy4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5uaWQsIDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5zaG9ydG5hbWUsICdzZXJ2ZXJBdXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjEnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdCgnMS4zLjYuMS41LjUuNy4zLjInKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm5pZCwgMTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILnNob3J0bmFtZSwgJ2NsaWVudEF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMicpCisKKwogY2xhc3MgQ29udGV4dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKLSAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MikKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYzKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGZvciBwcm90b2NvbCBpbiBQUk9UT0NPTFM6CisgICAgICAgICAgICBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuU1NMQ29udGV4dCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLlNTTENvbnRleHQsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgNDIpCkBAIC01MzYsNyArNjczLDcgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMgPSAwCiAKLSAgICBkZWYgdGVzdF92ZXJpZnkoc2VsZik6CisgICAgZGVmIHRlc3RfdmVyaWZ5X21vZGUoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgIyBEZWZhdWx0IHZhbHVlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQpAQCAtNTUxLDEzICs2ODgsMzIgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IDQyCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX3ZlcmlmeV9mbGFncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJpZnlfZmxhZ3MgbmVlZCBPcGVuU1NMID4gMC45LjgiKQorICAgIGRlZiB0ZXN0X3ZlcmlmeV9mbGFncyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAjIGRlZmF1bHQgdmFsdWUgYnkgT3BlblNTTAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTikKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfREVGQVVMVAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKyAgICAgICAgIyBzdXBwb3J0cyBhbnkgdmFsdWUKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYgfCBzc2wuVkVSSUZZX1g1MDlfU1RSSUNUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGIHwgc3NsLlZFUklGWV9YNTA5X1NUUklDVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IE5vbmUKKwogICAgIGRlZiB0ZXN0X2xvYWRfY2VydF9jaGFpbihzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICAjIENvbWJpbmVkIGtleSBhbmQgY2VydCBpbiBhIHNpbmdsZSBmaWxlCiAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUsIGtleWZpbGU9Q0VSVEZJTEUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfY2VydF9jaGFpbiwga2V5ZmlsZT1DRVJURklMRSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oV1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgpAQCAtNjQxLDggKzc5Nyw4IEBACiAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQllURVNfQ0VSVEZJTEUpCiAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPUJZVEVTX0NFUlRGSUxFLCBjYXBhdGg9Tm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIE5vbmUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoV1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgpAQCAtNjUzLDYgKzgwOSw2NCBAQAogICAgICAgICAjIElzc3VlICMxMDk4OTogY3Jhc2ggaWYgdGhlIHNlY29uZCBhcmd1bWVudCB0eXBlIGlzIGludmFsaWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBUcnVlKQogCisgICAgZGVmIHRlc3RfbG9hZF92ZXJpZnlfY2FkYXRhKHNlbGYpOgorICAgICAgICAjIHRlc3QgY2FkYXRhCisgICAgICAgIHdpdGggb3BlbihDQUZJTEVfQ0FDRVJUKSBhcyBmOgorICAgICAgICAgICAgY2FjZXJ0X3BlbSA9IGYucmVhZCgpCisgICAgICAgIGNhY2VydF9kZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQoY2FjZXJ0X3BlbSkKKyAgICAgICAgd2l0aCBvcGVuKENBRklMRV9ORVVST05JTykgYXMgZjoKKyAgICAgICAgICAgIG5ldXJvbmlvX3BlbSA9IGYucmVhZCgpCisgICAgICAgIG5ldXJvbmlvX2RlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChuZXVyb25pb19wZW0pCisKKyAgICAgICAgIyB0ZXN0IFBFTQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAwKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jYWNlcnRfcGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9bmV1cm9uaW9fcGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKyAgICAgICAgIyBjZXJ0IGFscmVhZHkgaW4gaGFzaCB0YWJsZQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgY29tYmluZWQKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9ICJcbiIuam9pbigoY2FjZXJ0X3BlbSwgbmV1cm9uaW9fcGVtKSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y29tYmluZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgd2l0aCBqdW5rIGFyb3VuZCB0aGUgY2VydHMKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9IFsiaGVhZCIsIGNhY2VydF9wZW0sICJvdGhlciIsIG5ldXJvbmlvX3BlbSwgImFnYWluIiwKKyAgICAgICAgICAgICAgICAgICAgbmV1cm9uaW9fcGVtLCAidGFpbCJdCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPSJcbiIuam9pbihjb21iaW5lZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgdGVzdCBERVIKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jYWNlcnRfZGVyKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorICAgICAgICAjIGNlcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgY29tYmluZWQKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9IGIiIi5qb2luKChjYWNlcnRfZGVyLCBuZXVyb25pb19kZXIpKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jb21iaW5lZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBlcnJvciBjYXNlcworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgY2FkYXRhPW9iamVjdCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAibm8gc3RhcnQgbGluZSIpOgorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9ImJyb2tlbiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJub3QgZW5vdWdoIGRhdGEiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWIiYnJva2VuIikKKworCiAgICAgZGVmIHRlc3RfbG9hZF9kaF9wYXJhbXMoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgY3R4LmxvYWRfZGhfcGFyYW1zKERIRklMRSkKQEAgLTcwMCw2ICs5MTQsMTMyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgYiJmb28iKQogCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorCisgICAgICAgICMgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2sgZXhwZWN0cyBhIGNhbGxhYmxlLCBvciBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgY3R4KQorCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhOb25lKQorICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soZHVtbXljYWxsYmFjaykKKworICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgUmVmZXJlbmNlIGN5Y2xlcyB0aHJvdWdoIHRoZSBzZXJ2ZXJuYW1lIGNhbGxiYWNrIGFyZSBkZXRlY3RlZAorICAgICAgICAjIGFuZCBjbGVhcmVkLgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCwgY3ljbGU9Y3R4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGR1bW15Y2FsbGJhY2spCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoY3R4KQorICAgICAgICBkZWwgY3R4LCBkdW1teWNhbGxiYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jZXJ0X3N0b3JlX3N0YXRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDB9KQorICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAwfSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMX0pCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAxLCAnY3JsJzogMCwgJ3g1MDknOiAyfSkKKworICAgIGRlZiB0ZXN0X2dldF9jYV9jZXJ0cyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwgW10pCisgICAgICAgICMgQ0VSVEZJTEUgaXMgbm90IGZsYWdnZWQgYXMgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiBDQTpUUlVFCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBidXQgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUIGlzIGEgQ0EgY2VydAorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksCisgICAgICAgICAgICBbeydpc3N1ZXInOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdSb290IENBJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuY2FjZXJ0Lm9yZycpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdDQSBDZXJ0IFNpZ25pbmcgQXV0aG9yaXR5JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdlbWFpbEFkZHJlc3MnLCAnc3VwcG9ydEBjYWNlcnQub3JnJyksKSksCisgICAgICAgICAgICAgICdub3RBZnRlcic6IGFzbjF0aW1lKCdNYXIgMjkgMTI6Mjk6NDkgMjAzMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ25vdEJlZm9yZSc6IGFzbjF0aW1lKCdNYXIgMzAgMTI6Mjk6NDkgMjAwMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ3NlcmlhbE51bWJlcic6ICcwMCcsCisgICAgICAgICAgICAgICdjcmxEaXN0cmlidXRpb25Qb2ludHMnOiAoJ2h0dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybCcsKSwKKyAgICAgICAgICAgICAgJ3N1YmplY3QnOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdSb290IENBJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uYWxVbml0TmFtZScsICdodHRwOi8vd3d3LmNhY2VydC5vcmcnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBIENlcnQgU2lnbmluZyBBdXRob3JpdHknKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdlbWFpbEFkZHJlc3MnLCAnc3VwcG9ydEBjYWNlcnQub3JnJyksKSksCisgICAgICAgICAgICAgICd2ZXJzaW9uJzogM31dKQorCisgICAgICAgIHdpdGggb3BlbihTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpIGFzIGY6CisgICAgICAgICAgICBwZW0gPSBmLnJlYWQoKQorICAgICAgICBkZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQocGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoVHJ1ZSksIFtkZXJdKQorCisgICAgZGVmIHRlc3RfbG9hZF9kZWZhdWx0X2NlcnRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoKQorCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cyhzc2wuUHVycG9zZS5TRVJWRVJfQVVUSCkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF9kZWZhdWx0X2NlcnRzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMsICdTRVJWRVJfQVVUSCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIHdpdGggb3BlbihTSUdOSU5HX0NBKSBhcyBmOgorICAgICAgICAgICAgY2FkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoY2FmaWxlPVNJR05JTkdfQ0EsIGNhcGF0aD1DQVBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGF0YT1jYWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgZGVmIHRlc3RfX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHB1cnBvc2U9c3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCiAKIGNsYXNzIFNTTEVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC05MDMsNiArMTI0MywyOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2Nvbm5lY3RfY2FkYXRhKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX0NBQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPXBlbSkKKyAgICAgICAgICAgIHdpdGggY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKSBhcyBzOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisKKyAgICAgICAgICAgICMgc2FtZSB3aXRoIERFUgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1kZXIpCisgICAgICAgICAgICB3aXRoIGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkgYXMgczoKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICJudCIsICJDYW4ndCB1c2UgYSBzb2NrZXQgYXMgYSBmaWxlIHVuZGVyIFdpbmRvd3MiKQogICAgIGRlZiB0ZXN0X21ha2VmaWxlX2Nsb3NlKHNlbGYpOgogICAgICAgICAjIElzc3VlICM1MjM4OiBjcmVhdGluZyBhIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBtYWtlZmlsZSgpIHNob3VsZG4ndApAQCAtMTAxNSw2ICsxMzc3LDIxIEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzX2NhcGF0aChzZWxmKToKKyAgICAgICAgIyBjYXBhdGggY2VydHMgYXJlIGxvYWRlZCBvbiByZXF1ZXN0CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FwYXRoPUNBUEFUSCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgICAgIHMgPSBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN0eC5nZXRfY2FfY2VydHMoKSksIDEpCiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC0xMTQyLDcgKzE1MTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgc2VydmVyOiByZWFkICVyICglcyksIHNlbmRpbmcgYmFjayAlciAoJXMpLi4uXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobXNnLCBjdHlwZSwgbXNnLmxvd2VyKCksIGN0eXBlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKG1zZy5sb3dlcigpKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLmNoYXR0eToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoIlRlc3Qgc2VydmVyIGZhaWx1cmU6XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCkBAIC0xMjUyLDcgKzE2MjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTEzNTYsMTkgKzE3MzMsMTkgQEAKICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuU1NMRXJyb3IgaXMgJXNcbiIgJSB4LmFyZ3NbMV0pCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHg6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5zb2NrZXQuZXJyb3IgaXMgJXNcbiIgJSB4LmFyZ3NbMV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyB4OgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbk9TRXJyb3IgaXMgJXNcbiIgJSB4LmFyZ3NbMV0pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHguZXJybm8gIT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXElPRXJyb3IgaXMgJXNcbiIgJSBzdHIoeCkpCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxPU0Vycm9yIGlzICVzXG4iICUgc3RyKHgpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVXNlIG9mIGludmFsaWQgY2VydCBzaG91bGQgaGF2ZSBmYWlsZWQhIikKIAogICAgIGRlZiBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LCBpbmRhdGE9YiJGT09cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSwgc25pX25hbWU9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBMYXVuY2ggYSBzZXJ2ZXIsIGNvbm5lY3QgYSBjbGllbnQgdG8gaXQgYW5kIHRyeSB2YXJpb3VzIHJlYWRzCiAgICAgICAgIGFuZCB3cml0ZXMuCkBAIC0xMzc4LDcgKzE3NTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PWNoYXR0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UpCiAgICAgICAgIHdpdGggc2VydmVyOgotICAgICAgICAgICAgd2l0aCBjbGllbnRfY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICB3aXRoIGNsaWVudF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNuaV9uYW1lKSBhcyBzOgogICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQogICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gW2luZGF0YSwgYnl0ZWFycmF5KGluZGF0YSksIG1lbW9yeXZpZXcoaW5kYXRhKV06CiAgICAgICAgICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6CkBAIC0xNDAyLDYgKzE3ODAsNyBAQAogICAgICAgICAgICAgICAgIHN0YXRzLnVwZGF0ZSh7CiAgICAgICAgICAgICAgICAgICAgICdjb21wcmVzc2lvbic6IHMuY29tcHJlc3Npb24oKSwKICAgICAgICAgICAgICAgICAgICAgJ2NpcGhlcic6IHMuY2lwaGVyKCksCisgICAgICAgICAgICAgICAgICAgICdwZWVyY2VydCc6IHMuZ2V0cGVlcmNlcnQoKSwKICAgICAgICAgICAgICAgICAgICAgJ2NsaWVudF9ucG5fcHJvdG9jb2wnOiBzLnNlbGVjdGVkX25wbl9wcm90b2NvbCgpCiAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKQEAgLTE0MjcsMTIgKzE4MDYsMTUgQEAKICAgICAgICAgY2xpZW50X2NvbnRleHQub3B0aW9ucyA9IHNzbC5PUF9BTEwgfCBjbGllbnRfb3B0aW9ucwogICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNlcnZlcl9wcm90b2NvbCkKICAgICAgICAgc2VydmVyX2NvbnRleHQub3B0aW9ucyA9IHNzbC5PUF9BTEwgfCBzZXJ2ZXJfb3B0aW9ucworCisgICAgICAgICMgTk9URTogd2UgbXVzdCBlbmFibGUgIkFMTCIgY2lwaGVycyBvbiB0aGUgY2xpZW50LCBvdGhlcndpc2UgYW4KKyAgICAgICAgIyBTU0x2MjMgY2xpZW50IHdpbGwgc2VuZCBhbiBTU0x2MyBoZWxsbyAocmF0aGVyIHRoYW4gU1NMdjIpCisgICAgICAgICMgc3RhcnRpbmcgZnJvbSBPcGVuU1NMIDEuMC4wIChzZWUgaXNzdWUgIzgzMjIpLgorICAgICAgICBpZiBjbGllbnRfY29udGV4dC5wcm90b2NvbCA9PSBzc2wuUFJPVE9DT0xfU1NMdjIzOgorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQuc2V0X2NpcGhlcnMoIkFMTCIpCisKICAgICAgICAgZm9yIGN0eCBpbiAoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0KToKICAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IGNlcnRzcmVxcwotICAgICAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzLCBvdGhlcndpc2UgYW4gU1NMdjIzIGNsaWVudAotICAgICAgICAgICAgIyB3aWxsIHNlbmQgYW4gU1NMdjMgaGVsbG8gKHJhdGhlciB0aGFuIFNTTHYyKSBzdGFydGluZyBmcm9tCi0gICAgICAgICAgICAjIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCi0gICAgICAgICAgICBjdHguc2V0X2NpcGhlcnMoIkFMTCIpCiAgICAgICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQogICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKICAgICAgICAgdHJ5OgpAQCAtMTQ0Myw3ICsxODI1LDcgQEAKICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKICAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzIG9yIGUuZXJybm8gIT0gZXJybm8uRUNPTk5SRVNFVDoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICBlbHNlOgpAQCAtMTQ2MiwxMCArMTg0NCwxMSBAQAogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKICAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiBQUk9UT0NPTFM6Ci0gICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQotICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQotICAgICAgICAgICAgICAgIHNlcnZlcl9wYXJhbXNfdGVzdChjb250ZXh0LCBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1UcnVlKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvY29sPXNzbC5fUFJPVE9DT0xfTkFNRVNbcHJvdG9jb2xdKToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KGNvbnRleHQsIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1UcnVlKQogCiAgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0KHNlbGYpOgogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgpAQCAtMTQ3Niw4ICsxODU5LDE0IEBACiAgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKICAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PWNvbnRleHQsIGNoYXR0eT1GYWxzZSkKICAgICAgICAgICAgIHdpdGggc2VydmVyOgotICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgIyBnZXRwZWVyY2VydCgpIHJhaXNlIFZhbHVlRXJyb3Igd2hpbGUgdGhlIGhhbmRzaGFrZSBpc24ndAorICAgICAgICAgICAgICAgICMgZG9uZS4KKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzLmRvX2hhbmRzaGFrZSgpCiAgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKICAgICAgICAgICAgICAgICBjaXBoZXIgPSBzLmNpcGhlcigpCkBAIC0xNDk5LDYgKzE4ODgsNDggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYmVmb3JlLCBhZnRlcikKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX3ZlcmlmeV9mbGFncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJpZnlfZmxhZ3MgbmVlZCBPcGVuU1NMID4gMC45LjgiKQorICAgICAgICBkZWYgdGVzdF9jcmxfY2hlY2soc2VsZik6CisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNJR05JTkdfQ0EpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRleHQudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0RFRkFVTFQpCisKKyAgICAgICAgICAgICMgVkVSSUZZX0RFRkFVTFQgc2hvdWxkIHBhc3MKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKKworICAgICAgICAgICAgIyBWRVJJRllfQ1JMX0NIRUNLX0xFQUYgd2l0aG91dCBhIGxvYWRlZCBDUkwgZmlsZSBmYWlscworICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfZmxhZ3MgfD0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRgorCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIHZlcmlmeSBmYWlsZWQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorCisgICAgICAgICAgICAjIG5vdyBsb2FkIGEgQ1JMIGZpbGUuIFRoZSBDUkwgZmlsZSBpcyBzaWduZWQgYnkgdGhlIENBLgorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ1JMRklMRSkKKworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorCiAgICAgICAgIGRlZiB0ZXN0X2VtcHR5X2NlcnQoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYW4gZW1wdHkgY2VydCBmaWxlIiIiCiAgICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKQEAgLTE1MTcsNyArMTk0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFka2V5LnBlbSIpKQogCiAgICAgICAgIGRlZiB0ZXN0X3J1ZGVfc2h1dGRvd24oc2VsZik6Ci0gICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBJT0Vycm9yCisgICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBPU0Vycm9yCiAgICAgICAgICAgICBpbiB0aGUgY2xpZW50IHdoZW4gYXR0ZW1wdGluZyBoYW5kc2hha2UuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKQEAgLTE1NDUsNyArMTk3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUud2FpdCgpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrID0gc3NsLndyYXBfc29ja2V0KGMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY29ubmVjdGluZyB0byBjbG9zZWQgU1NMIHNvY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQnKQpAQCAtMTU4OCw3ICsyMDE5LDcgQEAKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgeDoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMgb24gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuU1NMICgwLjkuN2wsIGZvciBpbnN0YW5jZSkKICAgICAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKQEAgLTE2NDgsNiArMjA3OSw0OSBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAiUFJPVE9DT0xfVExTdjFfMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIHZlcnNpb24gMS4xIG5vdCBzdXBwb3J0ZWQuIikKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjFfMShzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MS4xIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMuCisgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIFRydWUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMSkKKworICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICJQUk9UT0NPTF9UTFN2MV8yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUTFMgdmVyc2lvbiAxLjIgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MV8yKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxLjIgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19TU0x2M3xzc2wuT1BfTk9fU1NMdjIsKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxXzIpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgRmFsc2UpCisKICAgICAgICAgZGVmIHRlc3Rfc3RhcnR0bHMoc2VsZik6CiAgICAgICAgICAgICAiIiJTd2l0Y2hpbmcgZnJvbSBjbGVhciB0ZXh0IHRvIGVuY3J5cHRlZCBhbmQgYmFjayBhZ2Fpbi4iIiIKICAgICAgICAgICAgIG1zZ3MgPSAoYiJtc2cgMSIsIGIiTVNHIDIiLCBiIlNUQVJUVExTIiwgYiJNU0cgMyIsIGIibXNnIDQiLCBiIkVORFRMUyIsIGIibXNnIDUiLCBiIm1zZyA2IikKQEAgLTE3MDgsNyArMjE4Miw3IEBACiAKICAgICAgICAgZGVmIHRlc3Rfc29ja2V0c2VydmVyKHNlbGYpOgogICAgICAgICAgICAgIiIiVXNpbmcgYSBTb2NrZXRTZXJ2ZXIgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgU1NMIGNvbm5lY3Rpb25zLiIiIgotICAgICAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1DRVJURklMRSkKICAgICAgICAgICAgICMgdHJ5IHRvIGNvbm5lY3QKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCkBAIC0xOTY0LDYgKzI0MzgsMjAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZW1vdGUsIHNzbC5TU0xTb2NrZXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlZXIsIGNsaWVudF9hZGRyKQogCisgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0X2Vub3Rjb25uKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHNvY2suZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKworICAgICAgICBkZWYgdGVzdF9kb19oYW5kc2hha2VfZW5vdGNvbm4oc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgc29jay5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKwogICAgICAgICBkZWYgdGVzdF9kZWZhdWx0X2NpcGhlcnMoc2VsZik6CiAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgICAgIHRyeToKQEAgLTE5NzUsNyArMjQ2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKSBhcyBzZXJ2ZXI6CiAgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgc3NsLlNTTEVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5vIHNoYXJlZCBjaXBoZXIiLCBzdHIoc2VydmVyLmNvbm5fZXJyb3JzWzBdKSkKIApAQCAtMjEwOCw2ICsyNTk2LDEyNCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdHNbJ3NlcnZlcl9ucG5fcHJvdG9jb2xzJ10pIGVsc2UgJ25vdGhpbmcnCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcmVzdWx0LCBleHBlY3RlZCwgbXNnICUgKHNlcnZlcl9yZXN1bHQsICJzZXJ2ZXIiKSkKIAorICAgICAgICBkZWYgc25pX2NvbnRleHRzKHNlbGYpOgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorICAgICAgICAgICAgb3RoZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIG90aGVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRTIpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTSUdOSU5HX0NBKQorICAgICAgICAgICAgcmV0dXJuIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dAorCisgICAgICAgIGRlZiBjaGVja19jb21tb25fbmFtZShzZWxmLCBzdGF0cywgbmFtZSk6CisgICAgICAgICAgICBjZXJ0ID0gc3RhdHNbJ3BlZXJjZXJ0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCgnY29tbW9uTmFtZScsIG5hbWUpLCksIGNlcnRbJ3N1YmplY3QnXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIHNlcnZlcm5hbWVfY2Ioc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgoc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCkpCisgICAgICAgICAgICAgICAgaWYgc2VydmVyX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrLmNvbnRleHQgPSBvdGhlcl9jb250ZXh0CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJuYW1lX2NiKQorCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgIyBUaGUgaG9zdG5hbWUgd2FzIGZldGNoZWQgcHJvcGVybHksIGFuZCB0aGUgY2VydGlmaWNhdGUgd2FzCisgICAgICAgICAgICAjIGNoYW5nZWQgZm9yIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWygic3VwZXJtZXNzYWdlIiwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgICMgQ0VSVEZJTEU0IHdhcyBzZWxlY3RlZAorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2Zha2Vob3N0bmFtZScpCisKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgICMgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHNlcnZlcl9uYW1lPU5vbmUKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsoTm9uZSwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdsb2NhbGhvc3QnKQorCisgICAgICAgICAgICAjIENoZWNrIGRpc2FibGluZyB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKE5vbmUpCisKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J25vdGZ1bm55JykKKyAgICAgICAgICAgICMgQ2VydGlmaWNhdGUgZGlkbid0IGNoYW5nZQorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2xvY2FsaG9zdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19hbGVydChzZWxmKToKKyAgICAgICAgICAgICMgUmV0dXJuaW5nIGEgVExTIGFsZXJ0IGlzIHJlZmxlY3RlZCB0byB0aGUgY29ubmVjdGluZyBjbGllbnQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3JldHVybmluZ19hbGVydChzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNzbC5BTEVSVF9ERVNDUklQVElPTl9BQ0NFU1NfREVOSUVECisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yZXR1cm5pbmdfYWxlcnQpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnVExTVjFfQUxFUlRfQUNDRVNTX0RFTklFRCcpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmFpc2luZyhzZWxmKToKKyAgICAgICAgICAgICMgUmFpc2luZyBmYWlscyB0aGUgY29ubmVjdGlvbiB3aXRoIGEgVExTIGhhbmRzaGFrZSBmYWlsdXJlIGFsZXJ0LgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2JfcmFpc2luZyhzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yYWlzaW5nKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1NTTFYzX0FMRVJUX0hBTkRTSEFLRV9GQUlMVVJFJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgc3RkZXJyLmdldHZhbHVlKCkpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfd3JvbmdfcmV0dXJuX3R5cGUoc2VsZik6CisgICAgICAgICAgICAjIFJldHVybmluZyB0aGUgd3JvbmcgcmV0dXJuIHR5cGUgdGVybWluYXRlcyB0aGUgVExTIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICMgd2l0aCBhbiBpbnRlcm5hbCBlcnJvciBhbGVydC4KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3dyb25nX3JldHVybl90eXBlKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3dyb25nX3JldHVybl90eXBlKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1RMU1YxX0FMRVJUX0lOVEVSTkFMX0VSUk9SJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlR5cGVFcnJvciIsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRfd3JpdGVfYWZ0ZXJfY2xvc2VfcmFpc2VzX3ZhbHVlcnJvcihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQorCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlYWQsIDEwMjQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy53cml0ZSwgYidoZWxsbycpCisKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0yMTI3LDEwICsyNzMzLDE2IEBACiAgICAgICAgICAgICAoc3NsLk9QRU5TU0xfVkVSU0lPTiwgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPKSkKICAgICAgICAgcHJpbnQoIiAgICAgICAgICB1bmRlciAlcyIgJSBwbGF0KQogICAgICAgICBwcmludCgiICAgICAgICAgIEhBU19TTkkgPSAlciIgJSBzc2wuSEFTX1NOSSkKKyAgICAgICAgcHJpbnQoIiAgICAgICAgICBPUF9BTEwgPSAweCU4eCIgJSBzc2wuT1BfQUxMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCgiICAgICAgICAgIE9QX05PX1RMU3YxXzEgPSAweCU4eCIgJSBzc2wuT1BfTk9fVExTdjFfMSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcwogCiAgICAgZm9yIGZpbGVuYW1lIGluIFsKICAgICAgICAgQ0VSVEZJTEUsIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwgQllURVNfQ0VSVEZJTEUsCiAgICAgICAgIE9OTFlDRVJULCBPTkxZS0VZLCBCWVRFU19PTkxZQ0VSVCwgQllURVNfT05MWUtFWSwKKyAgICAgICAgU0lHTkVEX0NFUlRGSUxFLCBTSUdORURfQ0VSVEZJTEUyLCBTSUdOSU5HX0NBLAogICAgICAgICBCQURDRVJULCBCQURLRVksIEVNUFRZQ0VSVF06CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZSAlciIgJSBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQppbmRleCBlYjNmMDdhLi5hZjZjZWQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0YXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CkBAIC0xLDkgKzEsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9mcmVzaF9tb2R1bGUKLWltcG9ydCBzdGF0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBpbXBvcnRfZnJlc2hfbW9kdWxlCiAKLWNsYXNzIFRlc3RGaWxlbW9kZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjX3N0YXQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdzdGF0JywgZnJlc2g9Wydfc3RhdCddKQorcHlfc3RhdCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3N0YXQnLCBibG9ja2VkPVsnX3N0YXQnXSkKKworY2xhc3MgVGVzdEZpbGVtb2RlOgorICAgIHN0YXRtb2QgPSBOb25lCisKICAgICBmaWxlX2ZsYWdzID0geydTRl9BUFBFTkQnLCAnU0ZfQVJDSElWRUQnLCAnU0ZfSU1NVVRBQkxFJywgJ1NGX05PVU5MSU5LJywKICAgICAgICAgICAgICAgICAgICdTRl9TTkFQU0hPVCcsICdVRl9BUFBFTkQnLCAnVUZfQ09NUFJFU1NFRCcsICdVRl9ISURERU4nLAogICAgICAgICAgICAgICAgICAgJ1VGX0lNTVVUQUJMRScsICdVRl9OT0RVTVAnLCAnVUZfTk9VTkxJTksnLCAnVUZfT1BBUVVFJ30KQEAgLTYzLDE3ICs2NywxNyBAQAogICAgICAgICAgICAgc3RfbW9kZSA9IG9zLmxzdGF0KGZuYW1lKS5zdF9tb2RlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdF9tb2RlID0gb3Muc3RhdChmbmFtZSkuc3RfbW9kZQotICAgICAgICBtb2Rlc3RyID0gc3RhdC5maWxlbW9kZShzdF9tb2RlKQorICAgICAgICBtb2Rlc3RyID0gc2VsZi5zdGF0bW9kLmZpbGVtb2RlKHN0X21vZGUpCiAgICAgICAgIHJldHVybiBzdF9tb2RlLCBtb2Rlc3RyCiAKICAgICBkZWYgYXNzZXJ0U19JUyhzZWxmLCBuYW1lLCBtb2RlKToKICAgICAgICAgIyB0ZXN0IGZvcm1hdCwgbHN0cmlwIGlzIGZvciBTX0lGSUZPCi0gICAgICAgIGZtdCA9IGdldGF0dHIoc3RhdCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChtb2RlKSwgZm10KQorICAgICAgICBmbXQgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKG1vZGUpLCBmbXQpCiAgICAgICAgICMgdGVzdCB0aGF0IGp1c3Qgb25lIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgICAgICB0ZXN0bmFtZSA9ICJTX0lTIiArIG5hbWUKICAgICAgICAgZm9yIGZ1bmNuYW1lIGluIHNlbGYuZm9ybWF0X2Z1bmNzOgotICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc3RhdCwgZnVuY25hbWUsIE5vbmUpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGZ1bmNuYW1lLCBOb25lKQogICAgICAgICAgICAgaWYgZnVuYyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGlmIGZ1bmNuYW1lID09IHRlc3RuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGZ1bmNuYW1lKQpAQCAtOTEsMzUgKzk1LDM1IEBACiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctcnd4LS0tLS0tJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWFUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYVSkKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzA3MCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy0tLS1yd3gtLS0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYRykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hHKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvMDA3KQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLS0tLS0tLXJ3eCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hPKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWE8pCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG80NDQpCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctci0tci0tci0tJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLCAwbzQ0NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksIDBvNDQ0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzcwMCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0cls6M10sICctcncnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lGUkVHKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JRlJFRykKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgb3MubWtkaXIoVEVTVEZOKQpAQCAtMTY1LDI1ICsxNjksMzQgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnN0YXRfc3RydWN0Lml0ZW1zKCk6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbW9kdmFsdWUsIGtleSkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5wZXJtaXNzaW9uX2JpdHMuaXRlbXMoKToKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBtb2R2YWx1ZSwga2V5KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZmlsZV9mbGFnczoKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdmFsdWUsIGludCkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHZhbHVlLCBpbnQpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5mb3JtYXRfZnVuY3M6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShmdW5jKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygwKSwgMCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RGaWxlbW9kZSkKK2NsYXNzIFRlc3RGaWxlbW9kZUNTdGF0KFRlc3RGaWxlbW9kZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXRtb2QgPSBjX3N0YXQKKworICAgIGZvcm1hdHMgPSBUZXN0RmlsZW1vZGUuZm9ybWF0cyB8IHsnU19JRkRPT1InLCAnU19JRlBPUlQnLCAnU19JRldIVCd9CisgICAgZm9ybWF0X2Z1bmNzID0gVGVzdEZpbGVtb2RlLmZvcm1hdF9mdW5jcyB8IHsnU19JU0RPT1InLCAnU19JU1BPUlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NfSVNXSFQnfQorCisKK2NsYXNzIFRlc3RGaWxlbW9kZVB5U3RhdChUZXN0RmlsZW1vZGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGF0bW9kID0gcHlfc3RhdAorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTU4NWUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5CkBAIC0wLDAgKzEsMTUzNCBAQAorIiIiVGVzdCBzdWl0ZSBmb3Igc3RhdGlzdGljcyBtb2R1bGUsIGluY2x1ZGluZyBoZWxwZXIgTnVtZXJpY1Rlc3RDYXNlIGFuZAorYXBwcm94X2VxdWFsIGZ1bmN0aW9uLgorCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGVjaW1hbAoraW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorCisKKyMgTW9kdWxlIHRvIGJlIHRlc3RlZC4KK2ltcG9ydCBzdGF0aXN0aWNzCisKKworIyA9PT0gSGVscGVyIGZ1bmN0aW9ucyBhbmQgY2xhc3MgPT09CisKK2RlZiBfY2FsY19lcnJvcnMoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3JzIGJldHdlZW4gdHdvIG51bWJlcnMuCisKKyAgICA+Pj4gX2NhbGNfZXJyb3JzKDEwMCwgNzUpCisgICAgKDI1LCAwLjI1KQorICAgID4+PiBfY2FsY19lcnJvcnMoMTAwLCAxMDApCisgICAgKDAsIDAuMCkKKworICAgIFJldHVybnMgdGhlIChhYnNvbHV0ZSBlcnJvciwgcmVsYXRpdmUgZXJyb3IpIGJldHdlZW4gdGhlIHR3byBhcmd1bWVudHMuCisgICAgIiIiCisgICAgYmFzZSA9IG1heChhYnMoYWN0dWFsKSwgYWJzKGV4cGVjdGVkKSkKKyAgICBhYnNfZXJyID0gYWJzKGFjdHVhbCAtIGV4cGVjdGVkKQorICAgIHJlbF9lcnIgPSBhYnNfZXJyL2Jhc2UgaWYgYmFzZSBlbHNlIGZsb2F0KCdpbmYnKQorICAgIHJldHVybiAoYWJzX2VyciwgcmVsX2VycikKKworCitkZWYgYXBwcm94X2VxdWFsKHgsIHksIHRvbD0xZS0xMiwgcmVsPTFlLTcpOgorICAgICIiImFwcHJveF9lcXVhbCh4LCB5IFssIHRvbCBbLCByZWxdXSkgPT4gVHJ1ZXxGYWxzZQorCisgICAgUmV0dXJuIFRydWUgaWYgbnVtYmVycyB4IGFuZCB5IGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLCB0byB3aXRoaW4gc29tZQorICAgIG1hcmdpbiBvZiBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4gTnVtYmVycyB3aGljaCBjb21wYXJlIGVxdWFsCisgICAgd2lsbCBhbHNvIGNvbXBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIHggaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byB5IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcyBsZXNzIHRoYW4KKyAgICBhbiBhYnNvbHV0ZSBlcnJvciB0b2wgb3IgYSByZWxhdGl2ZSBlcnJvciByZWwsIHdoaWNoZXZlciBpcyBiaWdnZXIuCisKKyAgICBJZiBnaXZlbiwgYm90aCB0b2wgYW5kIHJlbCBtdXN0IGJlIGZpbml0ZSwgbm9uLW5lZ2F0aXZlIG51bWJlcnMuIElmIG5vdAorICAgIGdpdmVuLCBkZWZhdWx0IHZhbHVlcyBhcmUgdG9sPTFlLTEyIGFuZCByZWw9MWUtNy4KKworICAgID4+PiBhcHByb3hfZXF1YWwoMS4yNTg5LCAxLjI1ODcsIHRvbD0wLjAwMDMsIHJlbD0wKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEuMjU4OSwgMS4yNTg3LCB0b2w9MC4wMDAxLCByZWw9MCkKKyAgICBGYWxzZQorCisgICAgQWJzb2x1dGUgZXJyb3IgaXMgZGVmaW5lZCBhcyBhYnMoeC15KTsgaWYgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAgICB0b2wsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIFJlbGF0aXZlIGVycm9yIGlzIGRlZmluZWQgYXMgYWJzKCh4LXkpL3gpIG9yIGFicygoeC15KS95KSwgd2hpY2hldmVyIGlzCisgICAgc21hbGxlciwgcHJvdmlkZWQgeCBvciB5IGFyZSBub3QgemVyby4gSWYgdGhhdCBmaWd1cmUgaXMgbGVzcyB0aGFuIG9yCisgICAgZXF1YWwgdG8gcmVsLCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICBDb21wbGV4IG51bWJlcnMgYXJlIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQuIElmIHlvdSB3aXNoIHRvIGNvbXBhcmUgdG8KKyAgICBjb21wbGV4IG51bWJlcnMsIGV4dHJhY3QgdGhlaXIgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFuZCBjb21wYXJlIHRoZW0KKyAgICBpbmRpdmlkdWFsbHkuCisKKyAgICBOQU5zIGFsd2F5cyBjb21wYXJlIHVuZXF1YWwsIGV2ZW4gd2l0aCB0aGVtc2VsdmVzLiBJbmZpbml0aWVzIGNvbXBhcmUKKyAgICBhcHByb3hpbWF0ZWx5IGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduIChib3RoIHBvc2l0aXZlIG9yIGJvdGgKKyAgICBuZWdhdGl2ZSkuIEluZmluaXRpZXMgd2l0aCBkaWZmZXJlbnQgc2lnbnMgY29tcGFyZSB1bmVxdWFsOyBzbyBkbworICAgIGNvbXBhcmlzb25zIG9mIGluZmluaXRpZXMgd2l0aCBmaW5pdGUgbnVtYmVycy4KKyAgICAiIiIKKyAgICBpZiB0b2wgPCAwIG9yIHJlbCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Vycm9yIHRvbGVyYW5jZXMgbXVzdCBiZSBub24tbmVnYXRpdmUnKQorICAgICMgTkFOcyBhcmUgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmcsIGFwcHJveGltYXRlbHkgb3Igb3RoZXJ3aXNlLgorICAgIGlmIG1hdGguaXNuYW4oeCkgb3IgbWF0aC5pc25hbih5KToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBOdW1iZXJzIHdoaWNoIGNvbXBhcmUgZXF1YWwgYWxzbyBjb21wYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisgICAgaWYgeCA9PSB5OgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgd2l0aCB0aGUgc2FtZSBzaWduLgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGlmIG1hdGguaXNpbmYoeCkgb3IgbWF0aC5pc2luZih5KToKKyAgICAgICAgIyBUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24sIG9yCisgICAgICAgICMgb25lIGluZmluaXR5IGFuZCBvbmUgZmluaXRlIG51bWJlci4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBUd28gZmluaXRlIG51bWJlcnMuCisgICAgYWN0dWFsX2Vycm9yID0gYWJzKHggLSB5KQorICAgIGFsbG93ZWRfZXJyb3IgPSBtYXgodG9sLCByZWwqbWF4KGFicyh4KSwgYWJzKHkpKSkKKyAgICByZXR1cm4gYWN0dWFsX2Vycm9yIDw9IGFsbG93ZWRfZXJyb3IKKworCisjIFRoaXMgY2xhc3MgZXhpc3RzIG9ubHkgYXMgc29tZXdoZXJlIHRvIHN0aWNrIGEgZG9jc3RyaW5nIGNvbnRhaW5pbmcKKyMgZG9jdGVzdHMuIFRoZSBmb2xsb3dpbmcgZG9jc3RyaW5nIGFuZCB0ZXN0cyB3ZXJlIG9yaWdpbmFsbHkgaW4gYSBzZXBhcmF0ZQorIyBtb2R1bGUuIE5vdyB0aGF0IGl0IGhhcyBiZWVuIG1lcmdlZCBpbiBoZXJlLCBJIG5lZWQgc29tZXdoZXJlIHRvIGhhbmcgdGhlLgorIyBkb2NzdHJpbmcuIFVsdGltYXRlbHksIHRoaXMgY2xhc3Mgd2lsbCBkaWUsIGFuZCB0aGUgaW5mb3JtYXRpb24gYmVsb3cgd2lsbAorIyBlaXRoZXIgYmVjb21lIHJlZHVuZGFudCwgb3IgYmUgbW92ZWQgaW50byBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlcy4KK2NsYXNzIF9Eb05vdGhpbmc6CisgICAgIiIiCisgICAgV2hlbiBkb2luZyBudW1lcmljIHdvcmssIGVzcGVjaWFsbHkgd2l0aCBmbG9hdHMsIGV4YWN0IGVxdWFsaXR5IGlzIG9mdGVuCisgICAgbm90IHdoYXQgeW91IHdhbnQuIER1ZSB0byByb3VuZC1vZmYgZXJyb3IsIGl0IGlzIG9mdGVuIGEgYmFkIGlkZWEgdG8gdHJ5CisgICAgdG8gY29tcGFyZSBmbG9hdHMgd2l0aCBlcXVhbGl0eS4gSW5zdGVhZCB0aGUgdXN1YWwgcHJvY2VkdXJlIGlzIHRvIHRlc3QKKyAgICB0aGVtIHdpdGggc29tZSAoaG9wZWZ1bGx5IHNtYWxsISkgYWxsb3dhbmNlIGZvciBlcnJvci4KKworICAgIFRoZSBgYGFwcHJveF9lcXVhbGBgIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBlaXRoZXIgYW4gYWJzb2x1dGUKKyAgICBlcnJvciB0b2xlcmFuY2UsIG9yIGEgcmVsYXRpdmUgZXJyb3IsIG9yIGJvdGguCisKKyAgICBBYnNvbHV0ZSBlcnJvciB0b2xlcmFuY2VzIGFyZSBzaW1wbGUsIGJ1dCB5b3UgbmVlZCB0byBrbm93IHRoZSBtYWduaXR1ZGUKKyAgICBvZiB0aGUgcXVhbnRpdGllcyBiZWluZyBjb21wYXJlZDoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1LCAxMi4zNDYsIHRvbD0xZS0zKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgdG9sPTFlLTMpICAjIHRvbCBpcyB0b28gc21hbGwuCisgICAgRmFsc2UKKworICAgIFJlbGF0aXZlIGVycm9ycyBhcmUgbW9yZSBzdWl0YWJsZSB3aGVuIHRoZSB2YWx1ZXMgeW91IGFyZSBjb21wYXJpbmcgY2FuCisgICAgdmFyeSBpbiBtYWduaXR1ZGU6CisKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NSwgMTIuMzQ2LCByZWw9MWUtNCkKKyAgICBUcnVlCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHJlbD0xZS00KQorICAgIFRydWUKKworICAgIGJ1dCBhIG5haXZlIGltcGxlbWVudGF0aW9uIG9mIHJlbGF0aXZlIGVycm9yIHRlc3RpbmcgY2FuIHJ1biBpbnRvIHRyb3VibGUKKyAgICBhcm91bmQgemVyby4KKworICAgIElmIHlvdSBzdXBwbHkgYm90aCBhbiBhYnNvbHV0ZSB0b2xlcmFuY2UgYW5kIGEgcmVsYXRpdmUgZXJyb3IsIHRoZQorICAgIGNvbXBhcmlzb24gc3VjY2VlZHMgaWYgZWl0aGVyIGluZGl2aWR1YWwgdGVzdCBzdWNjZWVkczoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCB0b2w9MWUtMywgcmVsPTFlLTQpCisgICAgVHJ1ZQorCisgICAgIiIiCisgICAgcGFzcworCisKKworIyBXZSBwcmVmZXIgdGhpcyBmb3IgdGVzdGluZyBudW1lcmljIHZhbHVlcyB0aGF0IG1heSBub3QgYmUgZXhhY3RseSBlcXVhbCwKKyMgYW5kIGF2b2lkIHVzaW5nIFRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsLCBiZWNhdXNlIGl0IHN1Y2tzIDotKQorCitjbGFzcyBOdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlVuaXQgdGVzdCBjbGFzcyBmb3IgbnVtZXJpYyB3b3JrLgorCisgICAgVGhpcyBzdWJjbGFzc2VzIFRlc3RDYXNlLiBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgbWV0aG9kCisgICAgYGBUZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbGBgLCAgYGBhc3NlcnRBcHByb3hFcXVhbGBgIGlzIHByb3ZpZGVkLgorICAgICIiIgorICAgICMgQnkgZGVmYXVsdCwgd2UgZXhwZWN0IGV4YWN0IGVxdWFsaXR5LCB1bmxlc3Mgb3ZlcnJpZGRlbi4KKyAgICB0b2wgPSByZWwgPSAwCisKKyAgICBkZWYgYXNzZXJ0QXBwcm94RXF1YWwoCisgICAgICAgICAgICBzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2w9Tm9uZSwgcmVsPU5vbmUsIG1zZz1Ob25lCisgICAgICAgICAgICApOgorICAgICAgICAiIiJUZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICAgICAgVGhpcyB0ZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGVxdWFsIHRvCisgICAgICAgIHdpdGhpbiBgYHRvbGBgLCBhbiBhYnNvbHV0ZSBlcnJvciwgb3IgYGByZWxgYCwgYSByZWxhdGl2ZSBlcnJvci4KKworICAgICAgICBJZiBlaXRoZXIgYGB0b2xgYCBvciBgYHJlbGBgIGFyZSBOb25lIG9yIG5vdCBnaXZlbiwgdGhleSBkZWZhdWx0IHRvCisgICAgICAgIHRlc3QgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lIChieSBkZWZhdWx0LCAwKS4KKworICAgICAgICBUaGUgb2JqZWN0cyBtYXkgYmUgZWl0aGVyIG51bWJlcnMsIG9yIHNlcXVlbmNlcyBvZiBudW1iZXJzLiBTZXF1ZW5jZXMKKyAgICAgICAgYXJlIHRlc3RlZCBlbGVtZW50LWJ5LWVsZW1lbnQuCisKKyAgICAgICAgPj4+IGNsYXNzIE15VGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgICAgICAuLi4gICAgIGRlZiB0ZXN0X251bWJlcihzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgeCA9IDEuMC82CisgICAgICAgIC4uLiAgICAgICAgIHkgPSBzdW0oW3hdKjYpCisgICAgICAgIC4uLiAgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoeSwgMS4wLCB0b2w9MWUtMTUpCisgICAgICAgIC4uLiAgICAgZGVmIHRlc3Rfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIC4uLiAgICAgICAgIGEgPSBbMS4wMDEsIDEuMDAxZS0xMCwgMS4wMDFlMTBdCisgICAgICAgIC4uLiAgICAgICAgIGIgPSBbMS4wLCAxZS0xMCwgMWUxMF0KKyAgICAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChhLCBiLCByZWw9MWUtMykKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBpbXBvcnQgdW5pdHRlc3QKKyAgICAgICAgPj4+IGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPICAjIFN1cHByZXNzIHRlc3QgcnVubmVyIG91dHB1dC4KKyAgICAgICAgPj4+IHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShNeVRlc3QpCisgICAgICAgID4+PiB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSkucnVuKHN1aXRlKQorICAgICAgICA8dW5pdHRlc3QucnVubmVyLlRleHRUZXN0UmVzdWx0IHJ1bj0yIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRvbCBpcyBOb25lOgorICAgICAgICAgICAgdG9sID0gc2VsZi50b2wKKyAgICAgICAgaWYgcmVsIGlzIE5vbmU6CisgICAgICAgICAgICByZWwgPSBzZWxmLnJlbAorICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShmaXJzdCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpIGFuZAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2Uoc2Vjb25kLCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX2FwcHJveF9zZXEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfYXBwcm94X251bQorICAgICAgICBjaGVjayhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnKQorCisgICAgZGVmIF9jaGVja19hcHByb3hfc2VxKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2cpOgorICAgICAgICBpZiBsZW4oZmlyc3QpICE9IGxlbihzZWNvbmQpOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAoCisgICAgICAgICAgICAgICAgInNlcXVlbmNlcyBkaWZmZXIgaW4gbGVuZ3RoOiAlZCBpdGVtcyAhPSAlZCBpdGVtcyIKKyAgICAgICAgICAgICAgICAlIChsZW4oZmlyc3QpLCBsZW4oc2Vjb25kKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorICAgICAgICBmb3IgaSwgKGEsZSkgaW4gZW51bWVyYXRlKHppcChmaXJzdCwgc2Vjb25kKSk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19hcHByb3hfbnVtKGEsIGUsIHRvbCwgcmVsLCBtc2csIGkpCisKKyAgICBkZWYgX2NoZWNrX2FwcHJveF9udW0oc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZywgaWR4PU5vbmUpOgorICAgICAgICBpZiBhcHByb3hfZXF1YWwoZmlyc3QsIHNlY29uZCwgdG9sLCByZWwpOgorICAgICAgICAgICAgIyBUZXN0IHBhc3Nlcy4gUmV0dXJuIGVhcmx5LCB3ZSBhcmUgZG9uZS4KKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIGZhaWxlZC4KKyAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl9tYWtlX3N0ZF9lcnJfbXNnKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpCisgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2Vfc3RkX2Vycl9tc2coZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCk6CisgICAgICAgICMgQ3JlYXRlIHRoZSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBhcHByb3hfZXF1YWwgZmFpbHVyZXMuCisgICAgICAgIGFzc2VydCBmaXJzdCAhPSBzZWNvbmQKKyAgICAgICAgdGVtcGxhdGUgPSAoCisgICAgICAgICAgICAnICAlciAhPSAlclxuJworICAgICAgICAgICAgJyAgdmFsdWVzIGRpZmZlciBieSBtb3JlIHRoYW4gdG9sPSVyIGFuZCByZWw9JXJcbicKKyAgICAgICAgICAgICcgIC0+IGFic29sdXRlIGVycm9yID0gJXJcbicKKyAgICAgICAgICAgICcgIC0+IHJlbGF0aXZlIGVycm9yID0gJXInCisgICAgICAgICAgICApCisgICAgICAgIGlmIGlkeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGhlYWRlciA9ICdudW1lcmljIHNlcXVlbmNlcyBmaXJzdCBkaWZmZXIgYXQgaW5kZXggJWQuXG4nICUgaWR4CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGhlYWRlciArIHRlbXBsYXRlCisgICAgICAgICMgQ2FsY3VsYXRlIGFjdHVhbCBlcnJvcnM6CisgICAgICAgIGFic19lcnIsIHJlbF9lcnIgPSBfY2FsY19lcnJvcnMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBhYnNfZXJyLCByZWxfZXJyKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjID09PSBUZXN0IHRoZSBoZWxwZXJzID09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKworCisjIC0tLSBUZXN0cyBmb3IgYXBwcm94X2VxdWFsIC0tLQorCitjbGFzcyBBcHByb3hFcXVhbFN5bW1ldHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHN5bW1ldHJ5IG9mIGFwcHJveF9lcXVhbC4KKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3N5bW1ldHJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYXBwcm94X2VxdWFsIHRyZWF0cyByZWxhdGl2ZSBlcnJvciBzeW1tZXRyaWNhbGx5LgorICAgICAgICAjIChhLWIpL2EgaXMgdXN1YWxseSBub3QgZXF1YWwgdG8gKGEtYikvYi4gRW5zdXJlIHRoYXQgdGhpcworICAgICAgICAjIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICAjCisgICAgICAgICMgICBOb3RlOiB0aGUgcmVhc29uIGZvciB0aGlzIHRlc3QgaXMgdGhhdCBhbiBlYXJseSB2ZXJzaW9uCisgICAgICAgICMgICBvZiBhcHByb3hfZXF1YWwgd2FzIG5vdCBzeW1tZXRyaWMuIEEgcmVsYXRpdmUgZXJyb3IgdGVzdAorICAgICAgICAjICAgd291bGQgcGFzcywgb3IgZmFpbCwgZGVwZW5kaW5nIG9uIHdoaWNoIHZhbHVlIHdhcyBwYXNzZWQKKyAgICAgICAgIyAgIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICAgICAgIworICAgICAgICBhcmdzMSA9IFsyNDU2LCAzNy44LCAtMTIuNDUsIERlY2ltYWwoJzIuNTQnKSwgRnJhY3Rpb24oMTcsIDU0KV0KKyAgICAgICAgYXJnczIgPSBbMjQ1OSwgMzcuMiwgLTEyLjQxLCBEZWNpbWFsKCcyLjU5JyksIEZyYWN0aW9uKDE1LCA1NCldCisgICAgICAgIGFzc2VydCBsZW4oYXJnczEpID09IGxlbihhcmdzMikKKyAgICAgICAgZm9yIGEsIGIgaW4gemlwKGFyZ3MxLCBhcmdzMik6CisgICAgICAgICAgICBzZWxmLmRvX3JlbGF0aXZlX3N5bW1ldHJ5KGEsIGIpCisKKyAgICBkZWYgZG9fcmVsYXRpdmVfc3ltbWV0cnkoc2VsZiwgYSwgYik6CisgICAgICAgIGEsIGIgPSBtaW4oYSwgYiksIG1heChhLCBiKQorICAgICAgICBhc3NlcnQgYSA8IGIKKyAgICAgICAgZGVsdGEgPSBiIC0gYSAgIyBUaGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2YWx1ZXMuCisgICAgICAgIHJlbF9lcnIxLCByZWxfZXJyMiA9IGFicyhkZWx0YS9hKSwgYWJzKGRlbHRhL2IpCisgICAgICAgICMgQ2hvb3NlIGFuIGVycm9yIG1hcmdpbiBoYWxmd2F5IGJldHdlZW4gdGhlIHR3by4KKyAgICAgICAgcmVsID0gKHJlbF9lcnIxICsgcmVsX2VycjIpLzIKKyAgICAgICAgIyBOb3cgc2VlIHRoYXQgdmFsdWVzIGEgYW5kIGIgY29tcGFyZSBhcHByb3ggZXF1YWwgcmVnYXJkbGVzcyBvZgorICAgICAgICAjIHdoaWNoIGlzIGdpdmVuIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGEsIGIsIHRvbD0wLCByZWw9cmVsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChiLCBhLCB0b2w9MCwgcmVsPXJlbCkpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyeShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYXBwcm94X2VxdWFsKGEsIGIpID09IGFwcHJveF9lcXVhbChiLCBhKQorICAgICAgICBhcmdzID0gWy0yMywgLTIsIDUsIDEwNywgOTM1NjhdCisgICAgICAgIGRlbHRhID0gMgorICAgICAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICAgICAgZm9yIHR5cGVfIGluIChpbnQsIGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbik6CisgICAgICAgICAgICAgICAgeCA9IHR5cGVfKGEpKjEwMAorICAgICAgICAgICAgICAgIHkgPSB4ICsgZGVsdGEKKyAgICAgICAgICAgICAgICByID0gYWJzKGRlbHRhL21heCh4LCB5KSkKKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBmaXZlIGNhc2VzIHRvIGNoZWNrOgorICAgICAgICAgICAgICAgICMgMSkgYWN0dWFsIGVycm9yIDw9IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIpCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSsxLCByZWw9MipyKQorICAgICAgICAgICAgICAgICMgMikgYWN0dWFsIGVycm9yID4gdG9sLCA+IHJlbAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDMpIGFjdHVhbCBlcnJvciA8PSB0b2wsID4gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDQpIGFjdHVhbCBlcnJvciA+IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9cikKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD0yKnIpCisgICAgICAgICAgICAgICAgIyA1KSBleGFjdCBlcXVhbGl0eSB0ZXN0CisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHgsIHRvbD0wLCByZWw9MCkKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPTAsIHJlbD0wKQorCisgICAgZGVmIGRvX3N5bW1ldHJ5X3Rlc3Qoc2VsZiwgYSwgYiwgdG9sLCByZWwpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJhcHByb3hfZXF1YWwgY29tcGFyaXNvbnMgZG9uJ3QgbWF0Y2ggZm9yICVyIgorICAgICAgICBmbGFnMSA9IGFwcHJveF9lcXVhbChhLCBiLCB0b2wsIHJlbCkKKyAgICAgICAgZmxhZzIgPSBhcHByb3hfZXF1YWwoYiwgYSwgdG9sLCByZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZzEsIGZsYWcyLCB0ZW1wbGF0ZS5mb3JtYXQoKGEsIGIsIHRvbCwgcmVsKSkpCisKKworY2xhc3MgQXBwcm94RXF1YWxFeGFjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGUgYXBwcm94X2VxdWFsIGZ1bmN0aW9uIHdpdGggZXhhY3RseSBlcXVhbCB2YWx1ZXMuCisgICAgIyBFcXVhbCB2YWx1ZXMgc2hvdWxkIGNvbXBhcmUgYXMgYXBwcm94aW1hdGVseSBlcXVhbC4KKyAgICAjIFRlc3QgY2FzZXMgZm9yIGV4YWN0bHkgZXF1YWwgdmFsdWVzLCB3aGljaCBzaG91bGQgY29tcGFyZSBhcHByb3gKKyAgICAjIGVxdWFsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIHRvbGVyYW5jZXMgZ2l2ZW4uCisKKyAgICBkZWYgZG9fZXhhY3RseV9lcXVhbF90ZXN0KHNlbGYsIHgsIHRvbCwgcmVsKToKKyAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKHgsIHgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIHgpCisgICAgICAgIHJlc3VsdCA9IGFwcHJveF9lcXVhbCgteCwgLXgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIC14KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBpbnQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgbiBpbiBbNDIsIDE5NzQwLCAxNDk3NCwgMjMwLCAxNzk1LCA3MDAyNDUsIDM2NTg3XToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4sIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgZmxvYXQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgeCBpbiBbMC40MiwgMS45NzQwLCAxNDk3LjQsIDIzLjAsIDE3OS41LCA3MC4wMjQ1LCAzNi41ODddOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBGcmFjdGlvbiB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBmb3IgZiBpbiBbRigxLCAyKSwgRigwKSwgRig1LCAzKSwgRig5LCA3KSwgRigzNSwgMzYpLCBGKDMsIDcpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGYsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBEZWNpbWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZm9yIGQgaW4gbWFwKEQsICI4LjIgMzEuMjc0IDkxMi4wNCAxNi43NDUgMS4yMDQ3Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGQsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWzE2LCAxMDEzLCAxMzcyLCAxMTk4LCA5NzEsIDRdOgorICAgICAgICAgICAgIyBUZXN0IGFzIGludHMuCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChuLCAwLjAxLCAwKQorICAgICAgICAgICAgIyBUZXN0IGFzIGZsb2F0cy4KKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4vMTAsIDAuMDEsIDApCisgICAgICAgICAgICAjIFRlc3QgYXMgRnJhY3Rpb25zLgorICAgICAgICAgICAgZiA9IEZyYWN0aW9uKG4sIDEyMzQpCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChmLCAwLjAxLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGVxdWFsIERlY2ltYWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjMuNTcxIiksIERlY2ltYWwoIjAuMDEiKSwgMCkKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoLURlY2ltYWwoIjgxLjM5NzEiKSwgRGVjaW1hbCgiMC4wMSIpLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWzgzNDcsIDEwMS4zLCAtNzkxMC4yOCwgRnJhY3Rpb24oNSwgMjEpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KHgsIDAsIDAuMDEpCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjExLjY4IiksIDAsIERlY2ltYWwoIjAuMDEiKSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYm90aChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBlcXVhbCB3aGVuIGJvdGggdG9sIGFuZCByZWwgYXJlIGdpdmVuLgorICAgICAgICBmb3IgeCBpbiBbNDEwMTcsIDE2Ljc0MiwgLTgxMy4wMiwgRnJhY3Rpb24oMywgOCldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMC4xLCAwLjAxKQorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChEKCI3LjIiKSwgRCgiMC4xIiksIEQoIjAuMDEiKSkKKworCitjbGFzcyBBcHByb3hFcXVhbFVuZXF1YWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFVuZXF1YWwgdmFsdWVzIHNob3VsZCBjb21wYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZXMuCisgICAgIyBUZXN0IGNhc2VzIGZvciB1bmVxdWFsIHZhbHVlcywgd2l0aCBleGFjdCBlcXVhbGl0eSB0ZXN0LgorCisgICAgZGVmIGRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KHNlbGYsIHgpOgorICAgICAgICBmb3IgYSBpbiAoeCwgLXgpOgorICAgICAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKGEsIGErMSwgdG9sPTAsIHJlbD0wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQsICdpbmVxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgYSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdW5lcXVhbCBpbnQgdmFsdWVzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBuIGluIFs5NTEsIDU3MjMwNSwgNDc4LCA5MTcsIDE3MjQwXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QobikKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCB1bmVxdWFsIGZsb2F0IHZhbHVlcyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBmb3IgeCBpbiBbOS41MSwgNTcyMy4wNSwgNDcuOCwgOS4xNywgMTcuMjRdOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdCh4KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdW5lcXVhbCBGcmFjdGlvbnMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGZvciBmIGluIFtGKDEsIDUpLCBGKDcsIDkpLCBGKDEyLCAxMSksIEYoMTAxLCA5OTAyMyldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChmKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB1bmVxdWFsIERlY2ltYWxzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMy4xNDE1IDI5OC4xMiAzLjQ3IDE4Ljk5NiAwLjAwMjQ1Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QoZCkKKworCitjbGFzcyBBcHByb3hFcXVhbEluZXhhY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEluZXhhY3QgdGVzdCBjYXNlcyBmb3IgYXBwcm94X2Vycm9yLgorICAgICMgVGVzdCBjYXNlcyB3aGVuIGNvbXBhcmluZyB0d28gdmFsdWVzIHRoYXQgYXJlIG5vdCBleGFjdGx5IGVxdWFsLgorCisgICAgIyA9PT0gQWJzb2x1dGUgZXJyb3IgdGVzdHMgPT09CisKKyAgICBkZWYgZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHNlbGYsIHgsIGRlbHRhKToKKyAgICAgICAgdGVtcGxhdGUgPSAiVGVzdCBmYWlsdXJlIGZvciB4PXshcn0sIHk9eyFyfSIKKyAgICAgICAgZm9yIHkgaW4gKHggKyBkZWx0YSwgeCAtIGRlbHRhKToKKyAgICAgICAgICAgIG1zZyA9IHRlbXBsYXRlLmZvcm1hdCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9MipkZWx0YSwgcmVsPTApLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9ZGVsdGEvMiwgcmVsPTApLCBtc2cpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGludHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWy0xMDczNywgLTE5NzUsIC03LCAtMiwgMCwgMSwgOSwgMzcsIDQyMywgOTg3NCwgMjM3ODkxMTBdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QobiwgMTApCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChuLCAyKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGZsb2F0cyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbLTI4NC4xMjYsIC05Ny4xLCAtMy40LCAtMi4xNSwgMC41LCAxLjAsIDcuOCwgNC4yMywgMzgxNy40XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDEuNSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDAuMDEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMSwgMjkpCisgICAgICAgIG51bWVyYXRvcnMgPSBbLTg0LCAtMTUsIC0yLCAtMSwgMCwgMSwgNSwgMTcsIDIzLCAzNCwgNzFdCisgICAgICAgIGZvciBmIGluIChGcmFjdGlvbihuLCAyOSkgZm9yIG4gaW4gbnVtZXJhdG9ycyk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChmLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGYsIGZsb2F0KGRlbHRhKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIERlY2ltYWxzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRGVjaW1hbCgiMC4wMSIpCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMS4wIDMuNSAzNi4wOCA2MS43OSA3OTEyLjM2NDgiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZCwgZGVsdGEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCgtZCwgZGVsdGEpCisKKyAgICBkZWYgdGVzdF9jcm9zc196ZXJvKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBjYXNlIG9mIHRoZSB0d28gdmFsdWVzIGhhdmluZyBvcHBvc2l0ZSBzaWducy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgxZS01LCAtMWUtNSwgdG9sPTFlLTQsIHJlbD0wKSkKKworICAgICMgPT09IFJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgZGVmIGRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChzZWxmLCB4LCBkZWx0YSk6CisgICAgICAgIHRlbXBsYXRlID0gIlRlc3QgZmFpbHVyZSBmb3IgeD17IXJ9LCB5PXshcn0iCisgICAgICAgIGZvciB5IGluICh4KigxK2RlbHRhKSwgeCooMS1kZWx0YSkpOgorICAgICAgICAgICAgbXNnID0gdGVtcGxhdGUuZm9ybWF0KHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9MipkZWx0YSksIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9ZGVsdGEvMiksIG1zZykKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgaW50cyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNjQsIDQ3LCB0b2w9MCwgcmVsPTAuMzYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDY0LCA0NywgdG9sPTAsIHJlbD0wLjM3KSkKKyAgICAgICAgIyAtLS0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg0NDksIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNDQ4LCA1MTIsIHRvbD0wLCByZWw9MC4xMjUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCg0NDcsIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgZmxvYXRzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWy0xNzguMzQsIC0wLjEsIDAuMSwgMS4wLCAzNi45NywgMjg0Ny4xMzYsIDkxNDUuMDc0XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHgsIDAuMDIpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMywgOCkKKyAgICAgICAgZm9yIGYgaW4gW0YoMywgODQpLCBGKDE3LCAzMCksIEYoNDksIDUwKSwgRig5MiwgODUpXToKKyAgICAgICAgICAgIGZvciBkIGluIChkZWx0YSwgZmxvYXQoZGVsdGEpKToKKyAgICAgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChmLCBkKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KC1mLCBkKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRGVjaW1hbHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgZCBpbiBtYXAoRGVjaW1hbCwgIjAuMDIgMS4wIDUuNyAxMy42NyA5NC4xMzggOTEwMjcuOTMyMSIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChkLCBEZWNpbWFsKCIwLjAwMSIpKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoLWQsIERlY2ltYWwoIjAuMDUiKSkKKworICAgICMgPT09IEJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgIyBUaGVyZSBhcmUgZm91ciBjYXNlcyB0byBjb25zaWRlcjoKKyAgICAjICAgMSkgYWN0dWFsIGVycm9yIDw9IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yCisgICAgIyAgIDIpIGFjdHVhbCBlcnJvciA8PSBhYnNvbHV0ZSBlcnJvciBidXQgPiByZWxhdGl2ZSBlcnJvcgorICAgICMgICAzKSBhY3R1YWwgZXJyb3IgPD0gcmVsYXRpdmUgZXJyb3IgYnV0ID4gYWJzb2x1dGUgZXJyb3IKKyAgICAjICAgNCkgYWN0dWFsIGVycm9yID4gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IKKworICAgIGRlZiBkb19jaGVja19ib3RoKHNlbGYsIGEsIGIsIHRvbCwgcmVsLCB0b2xfZmxhZywgcmVsX2ZsYWcpOgorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiB0b2xfZmxhZyBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD10b2wsIHJlbD0wKSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgcmVsX2ZsYWcgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9MCwgcmVsPXJlbCkpCisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmICh0b2xfZmxhZyBvciByZWxfZmxhZykgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9dG9sLCByZWw9cmVsKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMShzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDQsIDMuOGUtNCwgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKC03LjM4NywgLTcuMzg2LCAwLjAwMiwgMC4wMDAyLCBUcnVlLCBUcnVlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgyKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IGFic29sdXRlIGVycm9yIGJ1dCA+IHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwNCwgMy43ZS00LCBUcnVlLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSByZWxhdGl2ZSBlcnJvciBidXQgPiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDEsIDMuOGUtNCwgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDQoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPiBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDIuNzgsIDIuNzUsIDAuMDEsIDAuMDAxLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg5NzEuNDQsIDk3MS40NywgMC4wMiwgM2UtNSwgRmFsc2UsIEZhbHNlKQorCisKK2NsYXNzIEFwcHJveEVxdWFsU3BlY2lhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgYXBwcm94X2VxdWFsIHdpdGggTkFOcyBhbmQgSU5GcyBhbmQgemVyb2VzLgorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IHR5cGVfKCdpbmYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mLCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYsIDEsIDAuMDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgtaW5mLCAtaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKGluZiwgLWluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChpbmYsIDEwMDApKQorCisgICAgZGVmIHRlc3RfbmFuKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIG5hbiA9IHR5cGVfKCduYW4nKQorICAgICAgICAgICAgZm9yIG90aGVyIGluIChuYW4sIHR5cGVfKCdpbmYnKSwgMTAwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwobmFuLCBvdGhlcikpCisKKyAgICBkZWYgdGVzdF9mbG9hdF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gbWF0aC5jb3B5c2lnbigwLjAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKG56ZXJvLCAwLjAsIHRvbD0wLjEsIHJlbD0wLjEpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gRGVjaW1hbCgiLTAuMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwobnplcm8sIERlY2ltYWwoMCksIHRvbD0wLjEsIHJlbD0wLjEpKQorCisKK2NsYXNzIFRlc3RBcHByb3hFcXVhbEVycm9ycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGVycm9yIGNvbmRpdGlvbnMgb2YgYXBwcm94X2VxdWFsLgorCisgICAgZGVmIHRlc3RfYmFkX3RvbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG5lZ2F0aXZlIHRvbCByYWlzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFwcHJveF9lcXVhbCwgMTAwLCAxMDAsIC0xLCAwLjEpCisKKyAgICBkZWYgdGVzdF9iYWRfcmVsKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmVnYXRpdmUgcmVsIHJhaXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXBwcm94X2VxdWFsLCAxMDAsIDEwMCwgMSwgLTAuMSkKKworCisjIC0tLSBUZXN0cyBmb3IgTnVtZXJpY1Rlc3RDYXNlIC0tLQorCisjIFRoZSBmb3JtYXR0aW5nIHJvdXRpbmUgdGhhdCBnZW5lcmF0ZXMgdGhlIGVycm9yIG1lc3NhZ2VzIGlzIGNvbXBsZXggZW5vdWdoCisjIHRoYXQgaXQgdG9vIG5lZWRzIHRlc3RpbmcuCisKK2NsYXNzIFRlc3ROdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIGV4YWN0IHdvcmRpbmcgb2YgTnVtZXJpY1Rlc3RDYXNlIGVycm9yIG1lc3NhZ2VzIGlzICpub3QqIGd1YXJhbnRlZWQsCisgICAgIyBidXQgd2UgbmVlZCB0byBnaXZlIHRoZW0gc29tZSBzb3J0IG9mIHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUKKyAgICAjIGdlbmVyYXRlZCBjb3JyZWN0bHkuIEFzIGEgY29tcHJvbWlzZSwgd2UgbG9vayBmb3Igc3BlY2lmaWMgc3Vic3RyaW5ncworICAgICMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgZm91bmQgZXZlbiBpZiB0aGUgb3ZlcmFsbCBlcnJvciBtZXNzYWdlIGNoYW5nZXMuCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCBhcmdzKToKKyAgICAgICAgYWN0dWFsX21zZyA9IE51bWVyaWNUZXN0Q2FzZS5fbWFrZV9zdGRfZXJyX21zZygqYXJncykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmdlbmVyYXRlX3N1YnN0cmluZ3MoKmFyZ3MpCisgICAgICAgIGZvciBzdWJzdHJpbmcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN1YnN0cmluZywgYWN0dWFsX21zZykKKworICAgIGRlZiB0ZXN0X251bWVyaWN0ZXN0Y2FzZV9pc190ZXN0Y2FzZShzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBOdW1lcmljVGVzdENhc2UgYWN0dWFsbHkgaXMgYSBUZXN0Q2FzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTnVtZXJpY1Rlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tc2dfbnVtZXJpYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3IgbnVtZXJpYyBjb21wYXJpc29ucy4KKyAgICAgICAgYXJncyA9ICgyLjUsIDQuMCwgMC41LCAwLjI1LCBOb25lKQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiB0ZXN0X2Vycm9yX21zZ19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3Igc2VxdWVuY2UgY29tcGFyaXNvbnMuCisgICAgICAgIGFyZ3MgPSAoMy43NSwgOC4yNSwgMS4yNSwgMC41LCA3KQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiBnZW5lcmF0ZV9zdWJzdHJpbmdzKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpOgorICAgICAgICAiIiJSZXR1cm4gc3Vic3RyaW5ncyB3ZSBleHBlY3QgdG8gc2VlIGluIGVycm9yIG1lc3NhZ2VzLiIiIgorICAgICAgICBhYnNfZXJyLCByZWxfZXJyID0gX2NhbGNfZXJyb3JzKGZpcnN0LCBzZWNvbmQpCisgICAgICAgIHN1YnN0cmluZ3MgPSBbCisgICAgICAgICAgICAgICAgJ3RvbD0lcicgJSB0b2wsCisgICAgICAgICAgICAgICAgJ3JlbD0lcicgJSByZWwsCisgICAgICAgICAgICAgICAgJ2Fic29sdXRlIGVycm9yID0gJXInICUgYWJzX2VyciwKKyAgICAgICAgICAgICAgICAncmVsYXRpdmUgZXJyb3IgPSAlcicgJSByZWxfZXJyLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgaWR4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3Vic3RyaW5ncy5hcHBlbmQoJ2RpZmZlciBhdCBpbmRleCAlZCcgJSBpZHgpCisgICAgICAgIHJldHVybiBzdWJzdHJpbmdzCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09IFRlc3RzIGZvciB0aGUgc3RhdGlzdGljcyBtb2R1bGUgPT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK2NsYXNzIEdsb2JhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBzdGF0aXN0aWNzCisgICAgZXhwZWN0ZWRfbWV0YWRhdGEgPSBbIl9fZG9jX18iLCAiX19hbGxfXyJdCisKKyAgICBkZWYgdGVzdF9tZXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbWV0YWRhdGEuCisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuZXhwZWN0ZWRfbWV0YWRhdGE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1vZHVsZSwgbWV0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCBwcmVzZW50IiAlIG1ldGEpCisKKyAgICBkZWYgdGVzdF9jaGVja19hbGwoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZXZlcnl0aGluZyBpbiBfX2FsbF9fIGV4aXN0cyBhbmQgaXMgcHVibGljLgorICAgICAgICBtb2R1bGUgPSBzZWxmLm1vZHVsZQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGUuX19hbGxfXzoKKyAgICAgICAgICAgICMgTm8gcHJpdmF0ZSBuYW1lcyBpbiBfX2FsbF9fOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuYW1lLnN0YXJ0c3dpdGgoIl8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaXZhdGUgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKyAgICAgICAgICAgICMgQW5kIGFueXRoaW5nIGluIF9fYWxsX18gbXVzdCBleGlzdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKworCitjbGFzcyBEb2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZG9jX3Rlc3RzKHNlbGYpOgorICAgICAgICBmYWlsZWQsIHRyaWVkID0gZG9jdGVzdC50ZXN0bW9kKHN0YXRpc3RpY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih0cmllZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYWlsZWQsIDApCisKK2NsYXNzIFN0YXRpc3RpY3NFcnJvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2hhc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVycm1zZyA9ICgKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgU3RhdGlzdGljc0Vycm9yIHRvIGJlIGEgVmFsdWVFcnJvciwgYnV0IGdvdCBhIgorICAgICAgICAgICAgICAgICIgc3ViY2xhc3Mgb2YgJXIgaW5zdGVhZC4iCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzdGF0aXN0aWNzLCAnU3RhdGlzdGljc0Vycm9yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBlcnJtc2cgJSBzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvci5fX2Jhc2VfXworICAgICAgICAgICAgICAgICkKKworCisjID09PSBUZXN0cyBmb3IgcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9ucyA9PT0KKworY2xhc3MgRXhhY3RSYXRpb1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBfZXhhY3RfcmF0aW8gdXRpbGl0eS4KKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gKC0yMCwgLTMsIDAsIDUsIDk5LCAxMCoqMjApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyhpKSwgKGksIDEpKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb24oc2VsZik6CisgICAgICAgIG51bWVyYXRvcnMgPSAoLTUsIDEsIDEyLCAzOCkKKyAgICAgICAgZm9yIG4gaW4gbnVtZXJhdG9yczoKKyAgICAgICAgICAgIGYgPSBGcmFjdGlvbihuLCAzNykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oZiksIChuLCAzNykpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygwLjEyNSksICgxLCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygxLjEyNSksICg5LCA4KSkKKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTAwLCAxMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIGZvciB4IGluIGRhdGE6CisgICAgICAgICAgICBudW0sIGRlbiA9IHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIG51bS9kZW4pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsKHNlbGYpOgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBfZXhhY3RfcmF0aW8gPSBzdGF0aXN0aWNzLl9leGFjdF9yYXRpbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCIwLjEyNSIpKSwgKDEyNSwgMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIjEyLjM0NSIpKSwgKDEyMzQ1LCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiLTEuOTgiKSksICgtMTk4LCAxMDApKQorCisKK2NsYXNzIERlY2ltYWxUb1JhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9kZWNpbWFsX3RvX3JhdGlvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdFNwZWNpYWxzUmFpc2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYW5kIElORnMgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIyBOb24tc3BlY2lhbCB2YWx1ZXMgYXJlIGNvdmVyZWQgYnkgX2V4YWN0X3JhdGlvIGFib3ZlLgorICAgICAgICBmb3IgZCBpbiAoRGVjaW1hbCgnTkFOJyksIERlY2ltYWwoJ3NOQU4nKSwgRGVjaW1hbCgnSU5GJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbywgZCkKKworCisKKyMgPT09IFRlc3RzIGZvciBwdWJsaWMgZnVuY3Rpb25zID09PQorCitjbGFzcyBVbml2YXJpYXRlQ29tbW9uTWl4aW46CisgICAgIyBDb21tb24gdGVzdHMgZm9yIG1vc3QgdW5pdmFyaWF0ZSBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGF0YSBhcmd1bWVudC4KKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgICMgRmFpbCBpZiBnaXZlbiBubyBhcmd1bWVudHMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgIyBGYWlsIHdoZW4gdGhlIGRhdGEgYXJndW1lbnQgKGZpcnN0IGFyZ3VtZW50KSBpcyBlbXB0eS4KKyAgICAgICAgZm9yIGVtcHR5IGluIChbXSwgKCksIGl0ZXIoW10pKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGVtcHR5KQorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGludCBkYXRhIGZvciB2YXJpb3VzIHRlc3RzLiIiIgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIHdoaWxlIGRhdGEgPT0gc29ydGVkKGRhdGEpOgorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X25vX2lucGxhY2VfbW9kaWZpY2F0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSBpdHMgaW5wdXQgZGF0YS4KKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSAhPSAxICAjIE5lY2Vzc2FyeSB0byBhdm9pZCBpbmZpbml0ZSBsb29wLgorICAgICAgICBhc3NlcnQgZGF0YSAhPSBzb3J0ZWQoZGF0YSkKKyAgICAgICAgc2F2ZWQgPSBkYXRhWzpdCisgICAgICAgIGFzc2VydCBkYXRhIGlzIG5vdCBzYXZlZAorICAgICAgICBfID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGRhdGEsIHNhdmVkLCAiZGF0YSBoYXMgYmVlbiBtb2RpZmllZCIpCisKKyAgICBkZWYgdGVzdF9vcmRlcl9kb2VzbnRfbWF0dGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZGF0YSBwb2ludHMgZG9lc24ndCBjaGFuZ2UgdGhlIHJlc3VsdC4KKworICAgICAgICAjIENBVVRJT046IGR1ZSB0byBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMsIHRoZSByZXN1bHQgYWN0dWFsbHkKKyAgICAgICAgIyBtYXkgZGVwZW5kIG9uIHRoZSBvcmRlci4gQ29uc2lkZXIgdGhpcyB0ZXN0IHJlcHJlc2VudGluZyBhbiBpZGVhbC4KKyAgICAgICAgIyBUbyBhdm9pZCB0aGlzIHRlc3QgZmFpbGluZywgb25seSB0ZXN0IHdpdGggZXhhY3QgdmFsdWVzIHN1Y2ggYXMgaW50cworICAgICAgICAjIG9yIEZyYWN0aW9ucy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCAzLCAzLCA0LCA1LCA2XSoxMDAKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X3R5cGVfb2ZfZGF0YV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgdHlwZSBvZiBpdGVyYWJsZSBkYXRhIGRvZXNuJ3QgZWZmZWN0IHRoZSByZXN1bHQuCisgICAgICAgIGNsYXNzIE15TGlzdChsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTXlUdXBsZSh0dXBsZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBnZW5lcmF0b3IoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gKG9iaiBmb3Igb2JqIGluIGRhdGEpCisgICAgICAgIGRhdGEgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIGZvciBraW5kIGluIChsaXN0LCB0dXBsZSwgaXRlciwgTXlMaXN0LCBNeVR1cGxlLCBnZW5lcmF0b3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGtpbmQoZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yYW5nZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbnMgd29yayB3aXRoIHJhbmdlIG9iamVjdHMuCisgICAgICAgIGRhdGEgPSByYW5nZSgyMCwgNTAsIDMpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGxpc3QoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2JhZF9hcmdfdHlwZXMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9uIHJhaXNlcyB3aGVuIGdpdmVuIGRhdGEgb2YgdGhlIHdyb25nIHR5cGUuCisKKyAgICAgICAgIyBEb24ndCByb2xsIHRoZSBmb2xsb3dpbmcgaW50byBhIGxvb3AgbGlrZSB0aGlzOgorICAgICAgICAjICAgZm9yIGJhZCBpbiBsaXN0X29mX2JhZDoKKyAgICAgICAgIyAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKGJhZCkKKyAgICAgICAgIworICAgICAgICAjIFNpbmNlIGFzc2VydFJhaXNlcyBkb2Vzbid0IHNob3cgdGhlIGFyZ3VtZW50cyB0aGF0IGNhdXNlZCB0aGUgdGVzdAorICAgICAgICAjIGZhaWx1cmUsIGl0IGlzIHZlcnkgZGlmZmljdWx0IHRvIGRlYnVnIHRoZXNlIHRlc3QgZmFpbHVyZXMgd2hlbiB0aGUKKyAgICAgICAgIyBmb2xsb3dpbmcgYXJlIGluIGEgbG9vcC4KKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihOb25lKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKDIzKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKDQyLjApCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3Iob2JqZWN0KCkpCisKKyAgICBkZWYgY2hlY2tfZm9yX3R5cGVfZXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF90eXBlX29mX2RhdGFfZWxlbWVudChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGUgdHlwZSBvZiBkYXRhIGVsZW1lbnRzIGRvZXNuJ3QgYWZmZWN0IHRoZSBudW1lcmljIHJlc3VsdC4KKyAgICAgICAgIyBUaGlzIGlzIGEgd2Vha2VyIHRlc3QgdGhhbiBVbml2YXJpYXRlVHlwZU1peGluLnRlc3RUeXBlc0NvbnNlcnZlZCwKKyAgICAgICAgIyBiZWNhdXNlIGl0IGNoZWNrcyB0aGUgbnVtZXJpYyByZXN1bHQgYnkgZXF1YWxpdHksIGJ1dCBub3QgYnkgdHlwZS4KKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19hZGRfXyhvdGhlcikpCisgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KKworICAgICAgICByYXcgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBNeUZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbik6CisgICAgICAgICAgICBkYXRhID0gW2tpbmQoeCkgZm9yIHggaW4gcmF3XQorICAgICAgICAgICAgcmVzdWx0ID0gdHlwZShleHBlY3RlZCkoc2VsZi5mdW5jKGRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisKK2NsYXNzIFVuaXZhcmlhdGVUeXBlTWl4aW46CisgICAgIiIiTWl4aW4gY2xhc3MgZm9yIHR5cGUtY29uc2VydmluZyBmdW5jdGlvbnMuCisKKyAgICBUaGlzIG1peGluIGNsYXNzIGhvbGRzIHRlc3QocykgZm9yIGZ1bmN0aW9ucyB3aGljaCBjb25zZXJ2ZSB0aGUgdHlwZSBvZgorICAgIGluZGl2aWR1YWwgZGF0YSBwb2ludHMuIEUuZy4gdGhlIG1lYW4gb2YgYSBsaXN0IG9mIEZyYWN0aW9ucyBzaG91bGQgaXRzZWxmCisgICAgYmUgYSBGcmFjdGlvbi4KKworICAgIE5vdCBhbGwgdGVzdHMgdG8gZG8gd2l0aCB0eXBlcyBuZWVkIGdvIGluIHRoaXMgY2xhc3MuIE9ubHkgdGhvc2UgdGhhdAorICAgIHJlbHkgb24gdGhlIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgc2FtZSB0eXBlIGFzIGl0cyBpbnB1dCBkYXRhLgorICAgICIiIgorICAgIGRlZiB0ZXN0X3R5cGVzX2NvbnNlcnZlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb25zIGtlZXBzIHRoZSBzYW1lIHR5cGUgYXMgdGhlaXIgZGF0YSBwb2ludHMuCisgICAgICAgICMgKEV4Y2x1ZGVzIG1peGVkIGRhdGEgdHlwZXMuKSBUaGlzIG9ubHkgdGVzdHMgdGhlIHR5cGUgb2YgdGhlIHJldHVybgorICAgICAgICAjIHJlc3VsdCwgbm90IHRoZSB2YWx1ZS4KKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19zdWJfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19yc3ViX18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fcG93X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19wb3dfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgIGRhdGEgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCwgRnJhY3Rpb24sIE15RmxvYXQpOgorICAgICAgICAgICAgZCA9IFtraW5kKHgpIGZvciB4IGluIGRhdGFdCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXN1bHQpLCBraW5kKQorCisKK2NsYXNzIFRlc3RTdW0oTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlQ29tbW9uTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjYXNlcyBmb3Igc3RhdGlzdGljcy5fc3VtKCkgZnVuY3Rpb24uCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MuX3N1bQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSB0ZXN0IGZvciBlbXB0eSBkYXRhLgorICAgICAgICBmb3IgZGF0YSBpbiAoW10sICgpLCBpdGVyKFtdKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIzKSwgMjMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyLjMpLCAyLjMpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMSwgNSwgMywgLTQsIC04LCAyMCwgNDIsIDFdKSwgNjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFs0LCAyLCAzLCAtOCwgN10sIDEwMDApLCAxMDA4KQorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMC4yNV0qMjApLCA1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjEyNSwgMC4yNSwgMC41LCAwLjc1XSwgMS41KSwgMy4xMjUpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbRnJhY3Rpb24oMSwgMTAwMCldKjUwMCksIEZyYWN0aW9uKDEsIDIpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMC4wMDEiKSwgRCgiNS4yNDYiKSwgRCgiMS43MDIiKSwgRCgiLTAuMDI1IiksCisgICAgICAgICAgICAgICAgRCgiMy45NzQiKSwgRCgiMi4zMjgiKSwgRCgiNC42MTciKSwgRCgiMi44NDMiKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEZWNpbWFsKCIyMC42ODYiKSkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfd2l0aF9tYXRoX2ZzdW0oc2VsZik6CisgICAgICAgICMgQ29tcGFyZSB3aXRoIHRoZSBtYXRoLmZzdW0gZnVuY3Rpb24uCisgICAgICAgICMgSWRlYWxseSB3ZSBvdWdodCB0byBnZXQgdGhlIGV4YWN0IHNhbWUgcmVzdWx0LCBidXQgc29tZXRpbWVzCisgICAgICAgICMgd2UgZGlmZmVyIGJ5IGEgdmVyeSBzbGlnaHQgYW1vdW50IDotKAorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xMDAsIDEwMDApIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgbWF0aC5mc3VtKGRhdGEpLCByZWw9MmUtMTYpCisKKyAgICBkZWYgdGVzdF9zdGFydF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIG9wdGlvbmFsIHN0YXJ0IGFyZ3VtZW50IHdvcmtzIGNvcnJlY3RseS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgxLCAxMDAwKSBmb3IgXyBpbiByYW5nZSgxMDApXQorICAgICAgICB0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCs0Miwgc2VsZi5mdW5jKGRhdGEsIDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LTIzLCBzZWxmLmZ1bmMoZGF0YSwgLTIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KzFlMjAsIHNlbGYuZnVuYyhkYXRhLCAxZTIwKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ3NfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2Ygc3RyaW5ncyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzXSwgJzk5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgMywgJzk5OSddKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2YgYnl0ZXMgc2hvdWxkIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgM10sIGInOTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzLCBiJzk5OSddKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfc3VtKHNlbGYpOgorICAgICAgICAjIE1peGVkIHN1bXMgYXJlIGFsbG93ZWQuCisKKyAgICAgICAgIyBDYXJlZnVsIGhlcmU6IG9yZGVyIG1hdHRlcnMuIENhbid0IG1peCBGcmFjdGlvbiBhbmQgRGVjaW1hbCBkaXJlY3RseSwKKyAgICAgICAgIyBvbmx5IGFmdGVyIHRoZXkncmUgY29udmVydGVkIHRvIGZsb2F0LgorICAgICAgICBkYXRhID0gWzEsIDIsIEZyYWN0aW9uKDEsIDIpLCAzLjAsIERlY2ltYWwoIjAuMjUiKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNzUpCisKKworY2xhc3MgU3VtSW50ZXJuYWxzVGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCBpbnRlcm5hbHMgb2YgdGhlIHN1bSBmdW5jdGlvbi4KKworICAgIGRlZiB0ZXN0X2lnbm9yZV9pbnN0YW5jZV9mbG9hdF9tZXRob2Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IF9fZmxvYXRfXyBtZXRob2RzIG9uIGRhdGEgaW5zdGFuY2VzIGFyZSBpZ25vcmVkLgorCisgICAgICAgICMgUHl0aG9uIHR5cGljYWxseSBjYWxscyBfX2R1bmRlcl9fIG1ldGhvZHMgb24gdGhlIGNsYXNzLCBub3QgdGhlCisgICAgICAgICMgaW5zdGFuY2UuIFRoZSBgYHN1bWBgIGltcGxlbWVudGF0aW9uIGNhbGxzIF9fZmxvYXRfXyBkaXJlY3RseS4gVG8KKyAgICAgICAgIyBiZXR0ZXIgbWF0Y2ggdGhlIGJlaGF2aW91ciBvZiBQeXRob24sIHdlIGNhbGwgaXQgb25seSBvbiB0aGUgY2xhc3MsCisgICAgICAgICMgbm90IHRoZSBpbnN0YW5jZS4gVGhpcyB0ZXN0IHdpbGwgZmFpbCBpZiBzb21lYm9keSAiZml4ZXMiIHRoYXQgY29kZS4KKworICAgICAgICAjIENyZWF0ZSBhIGZha2UgX19mbG9hdF9fIG1ldGhvZC4KKyAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd0ZXN0IGZhaWxzJykKKworICAgICAgICAjIEluamVjdCBpdCBpbnRvIGFuIGluc3RhbmNlLgorICAgICAgICBjbGFzcyBNeU51bWJlcihGcmFjdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBNeU51bWJlcigzKQorICAgICAgICB4Ll9fZmxvYXRfXyA9IHR5cGVzLk1ldGhvZFR5cGUoX19mbG9hdF9fLCB4KQorCisgICAgICAgICMgQ2hlY2sgaXQgd29ya3MgYXMgZXhwZWN0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB4Ll9fZmxvYXRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh4KSwgMy4wKQorICAgICAgICAjIEFuZCBub3cgdGVzdCB0aGUgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fc3VtKFsxLjAsIDIuMCwgeCwgNC4wXSksIDEwLjApCisKKworY2xhc3MgU3VtVG9ydHVyZVRlc3QoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90b3J0dXJlKHNlbGYpOgorICAgICAgICAjIFRpbSBQZXRlcnMnIHRvcnR1cmUgdGVzdCBmb3Igc3VtLCBhbmQgdmFyaWFudHMgb2Ygc2FtZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzEsIDFlMTAwLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzFlMTAwLCAxLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbCgKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuX3N1bShbMWUtMTAwLCAxLCAxZS0xMDAsIC0xXSoxMDAwMCksIDIuMGUtOTYsIHJlbD01ZS0xNgorICAgICAgICAgICAgKQorCisKK2NsYXNzIFN1bVNwZWNpYWxWYWx1ZXMoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3QgdGhhdCBzdW0gd29ya3MgY29ycmVjdGx5IHdpdGggSUVFRS03NTQgc3BlY2lhbCB2YWx1ZXMuCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgbmFuID0gdHlwZV8oJ25hbicpCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIG5hbiwgMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmVzdWx0KSwgdHlwZV8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIGNoZWNrX2luZmluaXR5KHNlbGYsIHgsIGluZik6CisgICAgICAgICIiIkNoZWNrIHggaXMgYW4gaW5maW5pdHkgb2YgdGhlIHNhbWUgdHlwZSBhbmQgc2lnbiBhcyBpbmYuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKHgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoeCksIHR5cGUoaW5mKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID4gMCwgaW5mID4gMCkKKyAgICAgICAgYXNzZXJ0IHggPT0gaW5mCisKKyAgICBkZWYgZG9fdGVzdF9pbmYoc2VsZiwgaW5mKToKKyAgICAgICAgIyBBZGRpbmcgYSBzaW5nbGUgaW5maW5pdHkgZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzXSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKyAgICAgICAgIyBBZGRpbmcgdHdvIGluZmluaXRpZXMgb2YgdGhlIHNhbWUgc2lnbiBhbHNvIGdpdmVzIGluZmluaXR5LgorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgaW5mLCA0XSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X2luZihzZWxmKToKKyAgICAgICAgaW5mID0gZmxvYXQoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBEZWNpbWFsKCdpbmYnKQorICAgICAgICBmb3Igc2lnbiBpbiAoKzEsIC0xKToKKyAgICAgICAgICAgIHNlbGYuZG9fdGVzdF9pbmYoc2lnbippbmYpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFkZGluZyB0d28gaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduIGdpdmVzIGEgTkFOLgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmV0dXJucyBOQU4uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHN0YXRpc3RpY3MuX3N1bShkYXRhKSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX21pc21hdGNoZWRfaW5mc190b19uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgRGVjaW1hbCBJTkZzIHdpdGggb3Bwb3NpdGUgc2lnbiByYWlzZXMgSW52YWxpZE9wZXJhdGlvbi4KKyAgICAgICAgaW5mID0gRGVjaW1hbCgnaW5mJykKKyAgICAgICAgZGF0YSA9IFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdCisgICAgICAgIHdpdGggZGVjaW1hbC5sb2NhbGNvbnRleHQoZGVjaW1hbC5CYXNpY0NvbnRleHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3NuYW5fcmFpc2VzKHNlbGYpOgorICAgICAgICAjIEFkZGluZyBzTkFOIHNob3VsZCByYWlzZSBJbnZhbGlkT3BlcmF0aW9uLgorICAgICAgICBzTkFOID0gRGVjaW1hbCgnc05BTicpCisgICAgICAgIGRhdGEgPSBbMSwgc05BTiwgMl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKworIyA9PT0gVGVzdHMgZm9yIGF2ZXJhZ2VzID09PQorCitjbGFzcyBBdmVyYWdlTWl4aW4oVW5pdmFyaWF0ZUNvbW1vbk1peGluKToKKyAgICAjIE1peGluIGNsYXNzIGhvbGRpbmcgY29tbW9uIHRlc3RzIGZvciBhdmVyYWdlcy4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBBdmVyYWdlIG9mIGEgc2luZ2xlIHZhbHVlIGlzIHRoZSB2YWx1ZSBpdHNlbGYuCisgICAgICAgIGZvciB4IGluICgyMywgNDIuNSwgMS4zZTE1LCBGcmFjdGlvbigxNSwgMTkpLCBEZWNpbWFsKCcwLjI4JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW3hdKSwgeCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgYXZlcmFnZSBvZiBhIHNpbmdsZSByZXBlYXRlZCB2YWx1ZSBpcyB0aGUgdmFsdWUgaXRzZWxmLgorICAgICAgICBmb3IgeCBpbiAoMy41LCAxNywgMi41ZTE1LCBGcmFjdGlvbig2MSwgNjcpLCBEZWNpbWFsKCc0Ljk3MTInKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDUsIDEwLCAyMCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCB4KQorCisKK2NsYXNzIFRlc3RNZWFuKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVhbgorCisgICAgZGVmIHRlc3RfdG9ydHVyZV9wZXAoc2VsZik6CisgICAgICAgICMgIlRvcnR1cmUgVGVzdCIgZnJvbSBQRVAtNDUwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMWUxMDAsIDEsIDMsIC0xZTEwMF0pLCAxKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBkYXRhID0gWzAsIDEsIDIsIDMsIDMsIDMsIDQsIDUsIDUsIDYsIDcsIDcsIDcsIDcsIDgsIDldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0LjgxMjUpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggZmxvYXRzLgorICAgICAgICBkYXRhID0gWzE3LjI1LCAxOS43NSwgMjAuMCwgMjEuNSwgMjEuNzUsIDIzLjI1LCAyNS4xMjUsIDI3LjVdCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAyMi4wMTU2MjUpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjEuNjM0IiksIEQoIjIuNTE3IiksIEQoIjMuOTEyIiksIEQoIjQuMDcyIiksIEQoIjUuODEzIildCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCIzLjU4OTYiKSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgMiksIEYoMiwgMyksIEYoMywgNCksIEYoNCwgNSksIEYoNSwgNiksIEYoNiwgNyksIEYoNywgOCldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDE0NzksIDE5NjApKQorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGluZmluaXRpZXMuCisgICAgICAgIHJhdyA9IFsxLCAzLCA1LCA3LCA5XSAgIyBVc2Ugb25seSBpbnRzLCB0byBhdm9pZCBUeXBlRXJyb3IgbGF0ZXIuCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBmb3Igc2lnbiBpbiAoMSwgLTEpOgorICAgICAgICAgICAgICAgIGluZiA9IGtpbmQoImluZiIpKnNpZ24KKyAgICAgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihyZXN1bHQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBpbmYpCisKKyAgICBkZWYgdGVzdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduLgorICAgICAgICBkYXRhID0gWzIsIDQsIDYsIGZsb2F0KCdpbmYnKSwgMSwgMywgNSwgZmxvYXQoJy1pbmYnKV0KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggTkFOcy4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDUsIDcsIDldICAjIFVzZSBvbmx5IGludHMsIHRvIGF2b2lkIFR5cGVFcnJvciBsYXRlci4KKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IGtpbmQoIm5hbiIpCisgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X2JpZ19kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIGEgbGFyZ2UgY29uc3RhbnQgdG8gZXZlcnkgZGF0YSBwb2ludC4KKyAgICAgICAgYyA9IDFlOQorICAgICAgICBkYXRhID0gWzMuNCwgNC41LCA0LjksIDYuNywgNi44LCA3LjIsIDguMCwgOC4xLCA5LjRdCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpICsgYworICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgIT0gYworICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoW3grYyBmb3IgeCBpbiBkYXRhXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZG91YmxlZF9kYXRhKHNlbGYpOgorICAgICAgICAjIE1lYW4gb2YgW2EsYixjLi4uel0gc2hvdWxkIGJlIHNhbWUgYXMgZm9yIFthLGEsYixiLGMsYy4uLnosel0uCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTMsIDUpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSoyKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdE1lZGlhbihOdW1lcmljVGVzdENhc2UsIEF2ZXJhZ2VNaXhpbik6CisgICAgIyBDb21tb24gdGVzdHMgZm9yIG1lZGlhbiBhbmQgYWxsIG1lZGlhbi4qIGZ1bmN0aW9ucy4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJPdmVybG9hZCBtZXRob2QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uIiIiCisgICAgICAgIGRhdGEgPSBzdXBlcigpLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGlmIGxlbihkYXRhKSUyICE9IDE6CisgICAgICAgICAgICBkYXRhLmFwcGVuZCgyKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgaW50IGRhdGEgcG9pbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjUpCisKKyAgICBkZWYgdGVzdF9vZGRfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3aXRoIGFuIG9kZCBudW1iZXIgb2YgaW50IGRhdGEgcG9pbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDYsIDldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0KQorCisgICAgZGVmIHRlc3Rfb2RkX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigzLCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigxLCAyKSkKKworICAgIGRlZiB0ZXN0X29kZF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMi41JyksIEQoJzMuMScpLCBEKCc0LjInKSwgRCgnNS43JyksIEQoJzUuOCcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnNC4yJykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4yJyksIEQoJzIuNScpLCBEKCczLjEnKSwgRCgnNC4yJyksIEQoJzUuNycpLCBEKCc1LjgnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzMuNjUnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuRGF0YVR5cGUoTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3QgY29uc2VydmF0aW9uIG9mIGRhdGEgZWxlbWVudCB0eXBlIGZvciBtZWRpYW4uCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbgorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTUpKQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICB3aGlsZSBkYXRhID09IHNvcnRlZChkYXRhKToKKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhCisKKworY2xhc3MgVGVzdE1lZGlhbkxvdyhUZXN0TWVkaWFuLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2xvdworCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2xvdyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyksIEYoNiwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDMsIDcpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjEnKSwgRCgnMi4yJyksIEQoJzMuMycpLCBEKCc0LjQnKSwgRCgnNS41JyksIEQoJzYuNicpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnMy4zJykpCisKKworY2xhc3MgVGVzdE1lZGlhbkhpZ2goVGVzdE1lZGlhbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9oaWdoCisKKyAgICBkZWYgdGVzdF9ldmVuX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9oaWdoIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRig0LCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMScpLCBEKCcyLjInKSwgRCgnMy4zJyksIEQoJzQuNCcpLCBEKCc1LjUnKSwgRCgnNi42JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCc0LjQnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuR3JvdXBlZChUZXN0TWVkaWFuKToKKyAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQuCisgICAgIyBEb2Vzbid0IGNvbnNlcnZlIGRhdGEgZWxlbWVudCB0eXBlcywgc28gZG9uJ3QgdXNlIFRlc3RNZWRpYW5UeXBlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5fZ3JvdXBlZAorCisgICAgZGVmIHRlc3Rfb2RkX251bWJlcl9yZXBlYXRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbi5ncm91cGVkIHdpdGggcmVwZWF0ZWQgbWVkaWFuIHZhbHVlcy4KKyAgICAgICAgZGF0YSA9IFsxMiwgMTMsIDE0LCAxNCwgMTQsIDE1LCAxNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDE0KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMTIsIDEzLCAxNCwgMTQsIDE0LCAxNCwgMTVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAxMy44NzUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFs1LCAxMCwgMTAsIDE1LCAyMCwgMjAsIDIwLCAyMCwgMjUsIDI1LCAzMF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgNSksIDE5LjM3NSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzE2LCAxOCwgMTgsIDE4LCAxOCwgMjAsIDIwLCAyMCwgMjIsIDIyLCAyMiwgMjQsIDI0LCAyNiwgMjhdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIpLCAyMC42NjY2NjY2NywgdG9sPTFlLTgpCisKKyAgICBkZWYgdGVzdF9ldmVuX251bWJlcl9yZXBlYXRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbi5ncm91cGVkIHdpdGggcmVwZWF0ZWQgbWVkaWFuIHZhbHVlcy4KKyAgICAgICAgZGF0YSA9IFs1LCAxMCwgMTAsIDE1LCAyMCwgMjAsIDIwLCAyNSwgMjUsIDMwXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCA1KSwgMTkuMTY2NjY2NjcsIHRvbD0xZS04KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMiwgMywgNCwgNCwgNCwgNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuODMzMzMzMzMsIHRvbD0xZS04KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMiwgMywgMywgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNiwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQuNSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzMsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDYsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0Ljc1KQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIEF2ZXJhZ2VNaXhpbi4KKyAgICAgICAgIyBZZXQgYWdhaW4sIGZhaWx1cmUgb2YgbWVkaWFuX2dyb3VwZWQgdG8gY29uc2VydmUgdGhlIGRhdGEgdHlwZQorICAgICAgICAjIGNhdXNlcyBtZSBoZWFkYWNoZXMgOi0oCisgICAgICAgIGZvciB4IGluICg1LjMsIDY4LCA0LjNlMTcsIEZyYWN0aW9uKDI5LCAxMDEpLCBEZWNpbWFsKCczMi45NzE0JykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCA1LCAxMCwgMjApOgorICAgICAgICAgICAgICAgIGRhdGEgPSBbeF0qY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZmxvYXQoeCkpCisKKyAgICBkZWYgdGVzdF9vZGRfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRig1LCA0KSwgRig5LCA0KSwgRigxMywgNCksIEYoMTMsIDQpLCBGKDE3LCA0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuMCkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoNSwgNCksIEYoOSwgNCksIEYoMTMsIDQpLCBGKDEzLCA0KSwgRigxNywgNCksIEYoMTcsIDQpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy4yNSkKKworICAgIGRlZiB0ZXN0X29kZF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNi41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA2Ljc1KQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzUuNScpLCBEKCc2LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc4LjUnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc1LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA3LjApCisKKyAgICBkZWYgdGVzdF9pbnRlcnZhbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdpdGggaW50ZXJ2YWwgYXJndW1lbnQuCisgICAgICAgIGRhdGEgPSBbMi4yNSwgMi41LCAyLjUsIDIuNzUsIDIuNzUsIDMuMCwgMy4wLCAzLjI1LCAzLjUsIDMuNzVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDAuMjUpLCAyLjg3NSkKKyAgICAgICAgZGF0YSA9IFsyLjI1LCAyLjUsIDIuNSwgMi43NSwgMi43NSwgMi43NSwgMy4wLCAzLjAsIDMuMjUsIDMuNSwgMy43NV0KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMC4yNSksIDIuODMzMzMzMzMsIHRvbD0xZS04KQorICAgICAgICBkYXRhID0gWzIyMCwgMjIwLCAyNDAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjgwLCAyODAsIDMwMCwgMzIwLCAzNDBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIwKSwgMjY1LjApCisKKworY2xhc3MgVGVzdE1vZGUoTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjYXNlcyBmb3IgdGhlIGRpc2NyZXRlIHZlcnNpb24gb2YgbW9kZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubW9kZQorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiT3ZlcmxvYWQgbWV0aG9kIGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLiIiIgorICAgICAgICAjIE1ha2Ugc3VyZSB0ZXN0IGRhdGEgaGFzIGV4YWN0bHkgb25lIG1vZGUuCisgICAgICAgIHJldHVybiBbMSwgMSwgMSwgMSwgMywgNCwgNywgOSwgMCwgOCwgMl0KKworICAgIGRlZiB0ZXN0X3JhbmdlX2RhdGEoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgdGVzdCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4KKyAgICAgICAgZGF0YSA9IHJhbmdlKDIwLCA1MCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X25vbWluYWxfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgd2l0aCBub21pbmFsIGRhdGEuCisgICAgICAgIGRhdGEgPSAnYWJjYmRiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgJ2InKQorICAgICAgICBkYXRhID0gJ2ZlIGZpIGZvIGZ1bSBmaSBmaScuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgJ2ZpJykKKworICAgIGRlZiB0ZXN0X2Rpc2NyZXRlX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggZGlzY3JldGUgbnVtZXJpYyBkYXRhLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGQgPSBkYXRhICsgW2ldCisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZCksIGkpCisKKyAgICBkZWYgdGVzdF9iaW1vZGFsX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggYmltb2RhbCBkYXRhLgorICAgICAgICBkYXRhID0gWzEsIDEsIDIsIDIsIDIsIDIsIDMsIDQsIDUsIDYsIDYsIDYsIDYsIDcsIDgsIDksIDldCisgICAgICAgIGFzc2VydCBkYXRhLmNvdW50KDIpID09IGRhdGEuY291bnQoNikgPT0gNAorICAgICAgICAjIENoZWNrIGZvciBhbiBleGNlcHRpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGF0YV9mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSBleGNlcHRpb24gd2hlbiBkYXRhIHBvaW50cyBhcmUgYWxsIHVuaXF1ZS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfbm9uZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBtb2RlIHJhaXNlcyBUeXBlRXJyb3IgaWYgZ2l2ZW4gTm9uZSBhcyBkYXRhLgorCisgICAgICAgICMgVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBtb2RlIHVzZXMKKyAgICAgICAgIyBjb2xsZWN0aW9ucy5Db3VudGVyLCB3aGljaCBhY2NlcHRzIE5vbmUgYW5kIHJldHVybnMgYW4gZW1wdHkgZGljdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIE5vbmUpCisKKworIyA9PT0gVGVzdHMgZm9yIHZhcmlhbmNlcyBhbmQgc3RhbmRhcmQgZGV2aWF0aW9ucyA9PT0KKworY2xhc3MgVmFyaWFuY2VTdGRldk1peGluKFVuaXZhcmlhdGVDb21tb25NaXhpbik6CisgICAgIyBNaXhpbiBjbGFzcyBob2xkaW5nIGNvbW1vbiB0ZXN0cyBmb3IgdmFyaWFuY2UgYW5kIHN0ZCBkZXYuCisKKyAgICAjIFN1YmNsYXNzZXMgc2hvdWxkIGluaGVyaXQgZnJvbSB0aGlzIGJlZm9yZSBOdW1lcmljVGVzdENsYXNzLCBpbiBvcmRlcgorICAgICMgdG8gc2VlIHRoZSByZWwgYXR0cmlidXRlIGJlbG93LiBTZWUgdGVzdFNoaWZ0RGF0YSBmb3IgYW4gZXhwbGFuYXRpb24uCisKKyAgICByZWwgPSAxZS0xMgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIERldmlhdGlvbiBvZiBhIHNpbmdsZSB2YWx1ZSBpcyB6ZXJvLgorICAgICAgICBmb3IgeCBpbiAoMTEsIDE5LjgsIDQuNmUxNCwgRnJhY3Rpb24oMjEsIDM0KSwgRGVjaW1hbCgnOC4zOTInKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbeF0pLCAwKQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIFRoZSBkZXZpYXRpb24gb2YgYSBzaW5nbGUgcmVwZWF0ZWQgdmFsdWUgaXMgemVyby4KKyAgICAgICAgZm9yIHggaW4gKDcuMiwgNDksIDguMWUxNSwgRnJhY3Rpb24oMywgNyksIERlY2ltYWwoJzYyLjQ4MDInKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDMsIDUsIDE1KToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDApCisKKyAgICBkZWYgdGVzdF9kb21haW5fZXJyb3JfcmVncmVzc2lvbihzZWxmKToKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgZG9tYWluIGVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgIyAoVGhhbmtzIHRvIEdlcmVteSBDb25kcmEuKQorICAgICAgICBkYXRhID0gWzAuMTIzNDU2Nzg5MDEyMzQ1XSoxMDAwMAorICAgICAgICAjIEFsbCB0aGUgaXRlbXMgYXJlIGlkZW50aWNhbCwgc28gdmFyaWFuY2Ugc2hvdWxkIGJlIGV4YWN0bHkgemVyby4KKyAgICAgICAgIyBXZSBhbGxvdyBzb21lIHNtYWxsIHJvdW5kLW9mZiBlcnJvciwgYnV0IG5vdCBtdWNoLgorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChyZXN1bHQsIDAuMCwgdG9sPTVlLTE3KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChyZXN1bHQsIDApICAjIEEgbmVnYXRpdmUgcmVzdWx0IG11c3QgZmFpbC4KKworICAgIGRlZiB0ZXN0X3NoaWZ0X2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHNoaWZ0aW5nIHRoZSBkYXRhIGJ5IGEgY29uc3RhbnQgYW1vdW50IGRvZXMgbm90IGFmZmVjdAorICAgICAgICAjIHRoZSB2YXJpYW5jZSBvciBzdGRldi4gT3IgYXQgbGVhc3Qgbm90IG11Y2guCisKKyAgICAgICAgIyBEdWUgdG8gcm91bmRpbmcsIHRoaXMgdGVzdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBpZGVhbC4gV2UgYWxsb3cKKyAgICAgICAgIyBzb21lIHRvbGVyYW5jZSBhd2F5IGZyb20gIm5vIGNoYW5nZSBhdCBhbGwiIGJ5IHNldHRpbmcgdG9sIGFuZC9vciByZWwKKyAgICAgICAgIyBhdHRyaWJ1dGVzLiBTdWJjbGFzc2VzIG1heSBzZXQgdGlnaHRlciBvciBsb29zZXIgZXJyb3IgdG9sZXJhbmNlcy4KKyAgICAgICAgcmF3ID0gWzEuMDMsIDEuMjcsIDEuOTQsIDIuMDQsIDIuNTgsIDMuMTQsIDQuNzUsIDQuOTgsIDUuNDIsIDYuNzhdCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgIyBEb24ndCBzZXQgc2hpZnQgdG9vIGhpZ2gsIHRoZSBiaWdnZXIgaXQgaXMsIHRoZSBtb3JlIHJvdW5kaW5nIGVycm9yLgorICAgICAgICBzaGlmdCA9IDFlNQorICAgICAgICBkYXRhID0gW3ggKyBzaGlmdCBmb3IgeCBpbiByYXddCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NoaWZ0X2RhdGFfZXhhY3Qoc2VsZik6CisgICAgICAgICMgTGlrZSB0ZXN0X3NoaWZ0X2RhdGEsIGJ1dCByZXN1bHQgaXMgYWx3YXlzIGV4YWN0LgorICAgICAgICByYXcgPSBbMSwgMywgMywgNCwgNSwgNywgOSwgMTAsIDExLCAxNl0KKyAgICAgICAgYXNzZXJ0IGFsbCh4PT1pbnQoeCkgZm9yIHggaW4gcmF3KQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhyYXcpCisgICAgICAgIHNoaWZ0ID0gMTAqKjkKKyAgICAgICAgZGF0YSA9IFt4ICsgc2hpZnQgZm9yIHggaW4gcmF3XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pdGVyX2xpc3Rfc2FtZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaXRlciBkYXRhIGFuZCBsaXN0IGRhdGEgZ2l2ZSB0aGUgc2FtZSByZXN1bHQuCisKKyAgICAgICAgIyBUaGlzIGlzIGFuIGV4cGxpY2l0IHRlc3QgdGhhdCBpdGVyYXRvcnMgYW5kIGxpc3RzIGFyZSB0cmVhdGVkIHRoZQorICAgICAgICAjIHNhbWU7IGp1c3RpZmljYXRpb24gZm9yIHRoaXMgdGVzdCBvdmVyIGFuZCBhYm92ZSB0aGUgc2ltaWxhciB0ZXN0CisgICAgICAgICMgaW4gVW5pdmFyaWF0ZUNvbW1vbk1peGluIGlzIHRoYXQgYW4gZWFybGllciBkZXNpZ24gaGFkIHZhcmlhbmNlIGFuZAorICAgICAgICAjIGZyaWVuZHMgc3dhcCBiZXR3ZWVuIG9uZS0gYW5kIHR3by1wYXNzIGFsZ29yaXRobXMsIHdoaWNoIHdvdWxkCisgICAgICAgICMgc29tZXRpbWVzIGdpdmUgZGlmZmVyZW50IHJlc3VsdHMuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTMsIDgpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhpdGVyKGRhdGEpKSwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdFBWYXJpYW5jZShWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0cyBmb3IgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MucHZhcmlhbmNlCisKKyAgICBkZWYgdGVzdF9leGFjdF91bmlmb3JtKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIHZhcmlhbmNlIGFnYWluc3QgYW4gZXhhY3QgcmVzdWx0IGZvciB1bmlmb3JtIGRhdGEuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwMDAwKSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTAwMDAqKjIgLSAxKS8xMiAgIyBFeGFjdCB2YWx1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvcHVsYXRpb24gdmFyaWFuY2Ugd2l0aCBpbnQgZGF0YS4KKyAgICAgICAgZGF0YSA9IFs0LCA3LCAxMywgMTZdCisgICAgICAgIGV4YWN0ID0gMjIuNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhhY3QpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggRnJhY3Rpb24gZGF0YS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA0KSwgRigxLCA0KSwgRigzLCA0KSwgRig3LCA0KV0KKyAgICAgICAgZXhhY3QgPSBGKDMsIDgpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIEZyYWN0aW9uKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggRGVjaW1hbCBkYXRhLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjEyLjEiKSwgRCgiMTIuMiIpLCBEKCIxMi41IiksIEQoIjEyLjkiKV0KKyAgICAgICAgZXhhY3QgPSBEKCcwLjA5Njg3NScpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIERlY2ltYWwpCisKKworY2xhc3MgVGVzdFZhcmlhbmNlKFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3RzIGZvciBzYW1wbGUgdmFyaWFuY2UuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnZhcmlhbmNlCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgbWV0aG9kIGZyb20gVmFyaWFuY2VTdGRldk1peGluLgorICAgICAgICBmb3IgeCBpbiAoMzUsIDI0LjcsIDguMmUxNSwgRnJhY3Rpb24oMTksIDMwKSwgRGVjaW1hbCgnNC4yMDg0JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgW3hdKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIGludCBkYXRhLgorICAgICAgICBkYXRhID0gWzQsIDcsIDEzLCAxNl0KKyAgICAgICAgZXhhY3QgPSAzMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhhY3QpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBGcmFjdGlvbiBkYXRhLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDQpLCBGKDEsIDQpLCBGKDMsIDQpLCBGKDcsIDQpXQorICAgICAgICBleGFjdCA9IEYoMSwgMikKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRnJhY3Rpb24pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIERlY2ltYWwgZGF0YS4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKDIpLCBEKDIpLCBEKDcpLCBEKDkpXQorICAgICAgICBleGFjdCA9IDQqRCgnOS41JykvRCgzKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBEZWNpbWFsKQorCisKK2NsYXNzIFRlc3RQU3RkZXYoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdHMgZm9yIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5wc3RkZXYKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG9fdmFyaWFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHN0ZGV2IGlzLCBpbiBmYWN0LCB0aGUgc3F1YXJlIHJvb3Qgb2YgdmFyaWFuY2UuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTE3LCAyNCkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gbWF0aC5zcXJ0KHN0YXRpc3RpY3MucHZhcmlhbmNlKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdFN0ZGV2KFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5zdGRldgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIFZhcmlhbmNlU3RkZXZNaXhpbi4KKyAgICAgICAgZm9yIHggaW4gKDgxLCAyMDMuNzQsIDMuOWUxNCwgRnJhY3Rpb24oNSwgMjEpLCBEZWNpbWFsKCczNS43MTknKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBbeF0pCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvX3ZhcmlhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzdGRldiBpcywgaW4gZmFjdCwgdGhlIHNxdWFyZSByb290IG9mIHZhcmlhbmNlLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0yLCA5KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBtYXRoLnNxcnQoc3RhdGlzdGljcy52YXJpYW5jZShkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisKKyMgPT09IFJ1biB0ZXN0cyA9PT0KKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgaWdub3JlKToKKyAgICAiIiJVc2VkIGZvciBkb2N0ZXN0L3VuaXR0ZXN0IGludGVncmF0aW9uLiIiIgorICAgIHRlc3RzLmFkZFRlc3RzKGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCkpCisgICAgcmV0dXJuIHRlc3RzCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CmluZGV4IDc4YzljNWIuLjc3MmNkMDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQpAQCAtMTgyLDI2ICsxODIsMjMgQEAKICAgICBhIGRhdGUgYmVmb3JlIDE5MDAgaXMgcGFzc2VkIHdpdGggYSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcgIiV5IgogICAgICIiIgogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJPbmx5IGFwcGxpZXMgdG8gV2luZG93cyIpCi0gICAgZGVmIHRlc3RfeV9iZWZvcmVfMTkwMF93aW4oc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJEb2Vzbid0IGFwcGx5IG9uIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3lfYmVmb3JlXzE5MDBfbm9ud2luKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjk5IikKKyAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzY3NCwgIzE5NjM0CisgICAgICAgIHQgPSAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiCisgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgiYWl4IiwgInN1bm9zIiwgInNvbGFyaXMiKSkpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsIHQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuc3RyZnRpbWUoIiV5IiwgdCksICI5OSIpCiAKICAgICBkZWYgdGVzdF95XzE5MDAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpLCAiMDAiKQogCiAgICAgZGVmIHRlc3RfeV9hZnRlcl8xOTAwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDIwMTMsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjEzIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cmZ0aW1lVGVzdCwgWTE5MDBUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQppbmRleCBjNTk3OWZjLi40MWI2ZTVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJleHBlY3RlZCBWYWx1ZUVycm9yIgogCi0gICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTQsIGRyeV9ydW49RmFsc2UpCisgICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTMsIGRyeV9ydW49RmFsc2UpCiAgICAgZGVmIHRlc3Rfb3ZlcnNpemVkX2RpZ2l0X3N0cmluZ3Moc2VsZiwgbWF4c2l6ZSk6CiAgICAgICAgICMgSW5wdXQgc3RyaW5nIHdob3NlIGxlbmd0aCBkb2Vzbid0IGZpdCBpbiBhbiBJTlQuCiAgICAgICAgIHMgPSAiMS4iICsgIjEiICogbWF4c2l6ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQppbmRleCA1MGNhZTA1Li4wMTA3ZWViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQpAQCAtMSw0ICsxLDYgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGFiYwogaW1wb3J0IGFycmF5CitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwpAQCAtNiw3ICs4LDYgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBJU0JJR0VORElBTiA9IHN5cy5ieXRlb3JkZXIgPT0gImJpZyIKLUlTMzJCSVQgPSBzeXMubWF4c2l6ZSA9PSAweDdmZmZmZmZmCiAKIGludGVnZXJfY29kZXMgPSAnYicsICdCJywgJ2gnLCAnSCcsICdpJywgJ0knLCAnbCcsICdMJywgJ3EnLCAnUScsICduJywgJ04nCiBieXRlb3JkZXJzID0gJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnCkBAIC00ODksNyArNDkwLDcgQEAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBjbGFzcyBFeHBsb2RpbmdCb29sKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgZm9yIHByZWZpeCBpbiB0dXBsZSgiPD4hPSIpKygnJywpOgogICAgICAgICAgICAgZmFsc2UgPSAoKSwgW10sIFtdLCAnJywgMAogICAgICAgICAgICAgdHJ1ZSA9IFsxXSwgJ3Rlc3QnLCA1LCAtMSwgMHhmZmZmZmZmZisxLCAweGZmZmZmZmZmLzIKQEAgLTUyMCwxMCArNTIxLDEwIEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhwcmVmaXggKyAnPycsIEV4cGxvZGluZ0Jvb2woKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIElPRXJyb3I6IHN0cnVjdC5wYWNrKCVyLCAiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yOiBzdHJ1Y3QucGFjayglciwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwbG9kaW5nQm9vbCgpKSIgJSAocHJlZml4ICsgJz8nKSkKIAogICAgICAgICBmb3IgYyBpbiBbYidceDAxJywgYidceDdmJywgYidceGZmJywgYidceDBmJywgYidceGYwJ106CkBAIC01MzYsMTAgKzUzNyw2IEBACiAgICAgICAgIGh1Z2Vjb3VudDIgPSAne31ie31IJy5mb3JtYXQoc3lzLm1heHNpemUvLzIsIHN5cy5tYXhzaXplLy8yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5jYWxjc2l6ZSwgaHVnZWNvdW50MikKIAotICAgIGlmIElTMzJCSVQ6Ci0gICAgICAgIGRlZiB0ZXN0X2NyYXNoZXIoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgc3RydWN0LnBhY2ssICIzNTc5MTM5NDFiIiwgImEiKQotCiAgICAgZGVmIHRlc3RfdHJhaWxpbmdfY291bnRlcihzZWxmKToKICAgICAgICAgc3RvcmUgPSBhcnJheS5hcnJheSgnYicsIGInICcqMTAwKQogCkBAIC01NzYsNyArNTczLDcgQEAKICAgICAgICAgIyBUaGUgc2l6ZSBvZiAnUHlTdHJ1Y3RPYmplY3QnCiAgICAgICAgIHRvdGFsc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzJuM1AnKQogICAgICAgICAjIFRoZSBzaXplIHRha2VuIHVwIGJ5IHRoZSAnZm9ybWF0Y29kZScgZHluYW1pYyBhcnJheQotICAgICAgICB0b3RhbHNpemUgKz0gc3RydWN0LmNhbGNzaXplKCdQMm4wUCcpICogKG51bWJlcl9vZl9jb2RlcyArIDEpCisgICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJ1AzbjBQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKICAgICAgICAgc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgc3RydWN0LlN0cnVjdChmb3JtYXRfc3RyKSwgdG90YWxzaXplKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CkBAIC01ODcsMTQgKzU4NCw4NCBAQAogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignQicgKiAxMjM0LCAxMjM0KQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignZmQnLCAyKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZigneHh4eHh4eHh4eHh4eHgnLCAwKQotICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEwMCkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzEwMEgnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTg3cycsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcyMHAnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMHMnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMGMnLCAwKQogCisKK2NsYXNzIFVucGFja0l0ZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGl0ZXJhdGl2ZSB1bnBhY2tpbmcgKHN0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2spLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0KHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrX2l0ZXJhdG9yKGl0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgYWJjLkl0ZXJhdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBhYmMuSXRlcmFibGUpCisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+aWJjcCcpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2NyIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgIyBXcm9uZyBieXRlcyBsZW5ndGgKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyMzQ1NiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMjM0NTY3OCIpCisgICAgICAgICMgWmVyby1sZW5ndGggc3RydWN0CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMiIpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRlKHNlbGYpOgorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDE2KSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MGIwYzBkMGUsIDE1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfYXJiaXRyYXJ5X2J1ZmZlcihzZWxmKToKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxMSkpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhtZW1vcnl2aWV3KGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworICAgIGRlZiB0ZXN0X2xlbmd0aF9oaW50KHNlbGYpOgorICAgICAgICBsaCA9IG9wZXJhdG9yLmxlbmd0aF9oaW50CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTYpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDMpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAyKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMSkKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMCkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9mdW5jKHNlbGYpOgorICAgICAgICAjIFNhbml0eSBjaGVjayBmb3IgdGhlIGdsb2JhbCBzdHJ1Y3QuaXRlcl91bnBhY2soKQorICAgICAgICBpdCA9IHN0cnVjdC5pdGVyX3VucGFjaygnPklCJywgYnl0ZXMocmFuZ2UoMSwgMTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cnVjdFRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKaW5kZXggYTg5ZTk1NS4uMzUzZDBlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgIyBvcy5zdGF0KCkgZ2l2ZXMgYSBjb21wbGljYXRlZCBzdHJ1Y3Qgc2VxdWVuY2UuCiAgICAgICAgIHN0ID0gb3Muc3RhdChfX2ZpbGVfXykKICAgICAgICAgcmVwID0gcmVwcihzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5zdGFydHN3aXRoKG9zLm5hbWUgKyAiLnN0YXRfcmVzdWx0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgib3Muc3RhdF9yZXN1bHQiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfbW9kZT0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2lubz0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2Rldj0iLCByZXApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKaW5kZXggNzdmMWJhMy4uNTRmNjQ4MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHJlCitpbXBvcnQgc2VsZWN0b3JzCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBzZWxlY3QKQEAgLTE5LDEwICsyMCw2IEBACiBpbXBvcnQgdGV4dHdyYXAKIAogdHJ5OgotICAgIGltcG9ydCByZXNvdXJjZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHJlc291cmNlID0gTm9uZQotdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCkBAIC0xNjIsOCArMTU5LDI4IEBACiAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogICAgICAgICBzZWxmLmFzc2VydEluKGInQkRGTCcsIG91dHB1dCkKIAorICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRpbl9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgY2FuIGJlIGNhbGxlZCB3aXRoIHN0ZGluIHNldCB0byBhIGZpbGUKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQorICAgICAgICB0Zi53cml0ZShiJ3BlYXInKQorICAgICAgICB0Zi5zZWVrKDApCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoKS51cHBlcigpKSJdLAorICAgICAgICAgICAgICAgIHN0ZGluPXRmKQorICAgICAgICBzZWxmLmFzc2VydEluKGInUEVBUicsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9pbnB1dF9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgY2FuIGJlIGNhbGxlZCB3aXRoIGlucHV0IHNldCB0byBhIHN0cmluZworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkudXBwZXIoKSkiXSwKKyAgICAgICAgICAgICAgICBpbnB1dD1iJ3BlYXInKQorICAgICAgICBzZWxmLmFzc2VydEluKGInUEVBUicsIG91dHB1dCkKKwogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRvdXRfYXJnKHNlbGYpOgotICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHN0ZGVyciByZWRpcmVjdGVkIHRvIHN0ZG91dAorICAgICAgICAjIGNoZWNrX291dHB1dCgpIHJlZnVzZXMgdG8gYWNjZXB0ICdzdGRvdXQnIGFyZ3VtZW50CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgnd2lsbCBub3QgYmUgcnVuJykiXSwKQEAgLTE3MSw2ICsxODgsMjAgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciB3aGVuIHN0ZG91dCBhcmcgc3VwcGxpZWQuIikKICAgICAgICAgc2VsZi5hc3NlcnRJbignc3Rkb3V0JywgYy5leGNlcHRpb24uYXJnc1swXSkKIAorICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRpbl93aXRoX2lucHV0X2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSByZWZ1c2VzIHRvIGFjY2VwdCAnc3RkaW4nIHdpdGggJ2lucHV0JworICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGYuY2xvc2UpCisgICAgICAgIHRmLndyaXRlKGIncGVhcicpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjOgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50KCd3aWxsIG5vdCBiZSBydW4nKSJdLAorICAgICAgICAgICAgICAgICAgICBzdGRpbj10ZiwgaW5wdXQ9YidoYXJlJykKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciB3aGVuIHN0ZGluIGFuZCBpbnB1dCBhcmdzIHN1cHBsaWVkLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZGluJywgYy5leGNlcHRpb24uYXJnc1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW5wdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQorCiAgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gd2l0aCB0aW1lb3V0IGFyZwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQpIGFzIGM6CkBAIC04NTMsOCArODg0LDkgQEAKICAgICAgICAgIwogICAgICAgICAjIFVURi0xNiBhbmQgVVRGLTMyLUJFIGFyZSBzdWZmaWNpZW50IHRvIGNoZWNrIGJvdGggd2l0aCBCT00gYW5kCiAgICAgICAgICMgd2l0aG91dCwgYW5kIFVURi0xNiBhbmQgVVRGLTMyLgorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKICAgICAgICAgZm9yIGVuY29kaW5nIGluIFsndXRmLTE2JywgJ3V0Zi0zMi1iZSddOgotICAgICAgICAgICAgb2xkX2dldHByZWZlcnJlZGVuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgIyBJbmRpcmVjdGx5IHZpYSBpby5UZXh0SU9XcmFwcGVyLCBQb3BlbigpIGRlZmF1bHRzIHRvCiAgICAgICAgICAgICAjIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkgYW5kIGVhcmxpZXIgaW4gUHl0aG9uIDMuMiB0bwogICAgICAgICAgICAgIyBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKS4KQEAgLTg2NSw3ICs4OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBlbmNvZGluZykKICAgICAgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGVdCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nID0gZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGdldHByZWZlcnJlZGVuY29kaW5nCiAgICAgICAgICAgICAgICAgIyBXZSBzZXQgc3RkaW4gdG8gYmUgbm9uLU5vbmUgYmVjYXVzZSwgYXMgb2YgdGhpcyB3cml0aW5nLAogICAgICAgICAgICAgICAgICMgYSBkaWZmZXJlbnQgY29kZSBwYXRoIGlzIHVzZWQgd2hlbiB0aGUgbnVtYmVyIG9mIHBpcGVzIGlzCiAgICAgICAgICAgICAgICAgIyB6ZXJvIG9yIG9uZS4KQEAgLTg3NCw3ICs5MDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQogICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoaW5wdXQ9JycpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgICAgIF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nID0gb2xkX2dldHByZWZlcnJlZGVuY29kaW5nCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgJzFcbjJcbjNcbjQnKQogCiAgICAgZGVmIHRlc3Rfbm9fbGVha2luZyhzZWxmKToKQEAgLTk4Miw4ICsxMDE0LDcgQEAKICAgICAgICAgIyB2YWx1ZSBmb3IgdGhhdCBsaW1pdCwgYnV0IFdpbmRvd3MgaGFzIDIwNDgsIHNvIHdlIGxvb3AKICAgICAgICAgIyAxMDI0IHRpbWVzIChlYWNoIGNhbGwgbGVha2VkIHR3byBmZHMpLgogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDI0KToKLSAgICAgICAgICAgICMgV2luZG93cyByYWlzZXMgSU9FcnJvci4gIE90aGVycyByYWlzZSBPU0Vycm9yLgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjOgogICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQpAQCAtMTExNCw0NyArMTE0NSw2IEBACiAgICAgICAgIGZkc19hZnRlcl9leGNlcHRpb24gPSBvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZHNfYmVmb3JlX3BvcGVuLCBmZHNfYWZ0ZXJfZXhjZXB0aW9uKQogCi0KLSMgY29udGV4dCBtYW5hZ2VyCi1jbGFzcyBfU3VwcHJlc3NDb3JlRmlsZXMob2JqZWN0KToKLSAgICAiIiJUcnkgdG8gcHJldmVudCBjb3JlIGZpbGVzIGZyb20gYmVpbmcgY3JlYXRlZC4iIiIKLSAgICBvbGRfbGltaXQgPSBOb25lCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICAiIiJUcnkgdG8gc2F2ZSBwcmV2aW91cyB1bGltaXQsIHRoZW4gc2V0IGl0IHRvICgwLCAwKS4iIiIKLSAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5vbGRfbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCAoMCwgMCkpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKLSAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAotICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCi0gICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgotICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCi0gICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgotICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3RzIHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgIgotICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnKQotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgotICAgICAgICBpZiBzZWxmLm9sZF9saW1pdCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgc2VsZi5vbGRfbGltaXQpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLQogQHVuaXR0ZXN0LnNraXBJZihtc3dpbmRvd3MsICJQT1NJWCBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBQT1NJWFByb2Nlc3NUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogCkBAIC0xMjQzLDcgKzEyMzMsNyBAQAogCiAgICAgZGVmIHRlc3RfcnVuX2Fib3J0KHNlbGYpOgogICAgICAgICAjIHJldHVybmNvZGUgaGFuZGxlcyBzaWduYWwgdGVybWluYXRpb24KLSAgICAgICAgd2l0aCBfU3VwcHJlc3NDb3JlRmlsZXMoKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zOyBvcy5hYm9ydCgpJ10pCiAgICAgICAgICAgICBwLndhaXQoKQpAQCAtMTI2Niw3ICsxMjU2LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPXJhaXNlX2l0KQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhIFZhbHVlRXJyb3IgZnJvbSB0aGUgcHJlZXhlY19mbiIpCkBAIC0xMzA2LDkgKzEyOTYsMTAgQEAKICAgICAgICAgIiIiSXNzdWUxNjE0MDogRG9uJ3QgZG91YmxlIGNsb3NlIHBpcGVzIG9uIHByZWV4ZWMgZXJyb3IuIiIiCiAKICAgICAgICAgZGVmIHJhaXNlX2l0KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCisgICAgICAgICAgICByYWlzZSBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuX1Rlc3RFeGVjdXRlQ2hpbGRQb3BlbigKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKQEAgLTE1MDcsMTYgKzE0OTgsMjggQEAKICAgICAgICAgIyBUZXJtaW5hdGluZyBhIGRlYWQgcHJvY2VzcwogICAgICAgICBzZWxmLl9raWxsX2RlYWRfcHJvY2VzcygndGVybWluYXRlJykKIAorICAgIGRlZiBfc2F2ZV9mZHMoc2VsZiwgc2F2ZV9mZHMpOgorICAgICAgICBmZHMgPSBbXQorICAgICAgICBmb3IgZmQgaW4gc2F2ZV9mZHM6CisgICAgICAgICAgICBpbmhlcml0YWJsZSA9IG9zLmdldF9pbmhlcml0YWJsZShmZCkKKyAgICAgICAgICAgIHNhdmVkID0gb3MuZHVwKGZkKQorICAgICAgICAgICAgZmRzLmFwcGVuZCgoZmQsIHNhdmVkLCBpbmhlcml0YWJsZSkpCisgICAgICAgIHJldHVybiBmZHMKKworICAgIGRlZiBfcmVzdG9yZV9mZHMoc2VsZiwgZmRzKToKKyAgICAgICAgZm9yIGZkLCBzYXZlZCwgaW5oZXJpdGFibGUgaW4gZmRzOgorICAgICAgICAgICAgb3MuZHVwMihzYXZlZCwgZmQsIGluaGVyaXRhYmxlPWluaGVyaXRhYmxlKQorICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisKICAgICBkZWYgY2hlY2tfY2xvc2Vfc3RkX2ZkcyhzZWxmLCBmZHMpOgogICAgICAgICAjIElzc3VlICM5OTA1OiB0ZXN0IHRoYXQgc3VicHJvY2VzcyBwaXBlcyBzdGlsbCB3b3JrIHByb3Blcmx5IHdpdGgKICAgICAgICAgIyBzb21lIHN0YW5kYXJkIGZkcyBjbG9zZWQKICAgICAgICAgc3RkaW4gPSAwCi0gICAgICAgIG5ld2ZkcyA9IFtdCi0gICAgICAgIGZvciBhIGluIGZkczoKLSAgICAgICAgICAgIGIgPSBvcy5kdXAoYSkKLSAgICAgICAgICAgIG5ld2Zkcy5hcHBlbmQoYikKLSAgICAgICAgICAgIGlmIGEgPT0gMDoKLSAgICAgICAgICAgICAgICBzdGRpbiA9IGIKKyAgICAgICAgc2F2ZWRfZmRzID0gc2VsZi5fc2F2ZV9mZHMoZmRzKQorICAgICAgICBmb3IgZmQsIHNhdmVkLCBpbmhlcml0YWJsZSBpbiBzYXZlZF9mZHM6CisgICAgICAgICAgICBpZiBmZCA9PSAwOgorICAgICAgICAgICAgICAgIHN0ZGluID0gc2F2ZWQKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgogICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpAQCAtMTUzMSwxMCArMTUzNCw3IEBACiAgICAgICAgICAgICBlcnIgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIoZXJyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgob3V0LCBlcnIpLCAoYidhcHBsZScsIGInb3JhbmdlJykpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmb3IgYiwgYSBpbiB6aXAobmV3ZmRzLCBmZHMpOgotICAgICAgICAgICAgICAgIG9zLmR1cDIoYiwgYSkKLSAgICAgICAgICAgIGZvciBiIGluIG5ld2ZkczoKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShiKQorICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgZGVmIHRlc3RfY2xvc2VfZmRfMChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswXSkKQEAgLTE1NzQsNyArMTU3NCw3IEBACiAgICAgICAgICAgICBvcy5sc2Vlayh0ZW1wX2Zkc1sxXSwgMCwgMCkKIAogICAgICAgICAgICAgIyBtb3ZlIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzIG91dCBvZiB0aGUgd2F5Ci0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgZmlsZSBvYmplY3RzIG92ZXIgdGhlIHN0YW5kYXJkIGZkJ3MKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE1OTAsMTAgKzE1OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGVtcF9mZHNbMF0pCiAgICAgICAgICAgICAgICAgcC53YWl0KCkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgIyByZXN0b3JlIHRoZSBvcmlnaW5hbCBmZCdzIHVuZGVybmVhdGggc3lzLnN0ZGluLCBldGMuCi0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBmb3IgZmQgaW4gdGVtcF9mZHM6CiAgICAgICAgICAgICAgICAgb3MubHNlZWsoZmQsIDAsIDApCkBAIC0xNjE3LDcgKzE2MTQsNyBAQAogICAgICAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKIAogICAgICAgICAgICAgIyBzYXZlIGEgY29weSBvZiB0aGUgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9ycwotICAgICAgICAgICAgc2F2ZWRfZmRzID0gW29zLmR1cChmZCkgZm9yIGZkIGluIHJhbmdlKDMpXQorICAgICAgICAgICAgc2F2ZWRfZmRzID0gc2VsZi5fc2F2ZV9mZHMocmFuZ2UoMykpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgIyBkdXBsaWNhdGUgdGhlIHRlbXAgZmlsZXMgb3ZlciB0aGUgc3RhbmRhcmQgZmQncyAwLCAxLCAyCiAgICAgICAgICAgICAgICAgZm9yIGZkLCB0ZW1wX2ZkIGluIGVudW1lcmF0ZSh0ZW1wX2Zkcyk6CkBAIC0xNjQzLDkgKzE2NDAsNyBAQAogICAgICAgICAgICAgICAgIG91dCA9IG9zLnJlYWQoc3Rkb3V0X25vLCAxMDI0KQogICAgICAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihvcy5yZWFkKHN0ZGVycl9ubywgMTAyNCkpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZvciBzdGQsIHNhdmVkIGluIGVudW1lcmF0ZShzYXZlZF9mZHMpOgotICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBzdGQpCi0gICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHNhdmVkKQorICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3RvcmVfZmRzKHNhdmVkX2ZkcykKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGIiZ290IFNURElOIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiImVyciIpCkBAIC0xNjc3LDQwICsxNjcyLDQ3IEBACiAgICAgICAgICAgICAjIFB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBrZWVwcyB0aGUgbWVzc2FnZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgInN1cnJvZ2F0ZTpcdURDZmYiKQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICMgX3Bvc2l4c3VicHJvY2VzcyB1c2VzIGEgZGVmYXVsdCBtZXNzYWdlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAiRXhjZXB0aW9uIG9jY3VycmVkIGluIHByZWV4ZWNfZm4uIikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciBvciBSdW50aW1lRXJyb3IiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIG9yIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yIikKIAogICAgIGRlZiB0ZXN0X3VuZGVjb2RhYmxlX2VudihzZWxmKToKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gKCgndGVzdCcsICdhYmNcdURDRkYnKSwgKCd0ZXN0XHVEQ0ZGJywgJzQyJykpOgorICAgICAgICAgICAgZW5jb2RlZF92YWx1ZSA9IHZhbHVlLmVuY29kZSgiYXNjaWkiLCAic3Vycm9nYXRlZXNjYXBlIikKKwogICAgICAgICAgICAgIyB0ZXN0IHN0ciB3aXRoIHN1cnJvZ2F0ZXMKICAgICAgICAgICAgIHNjcmlwdCA9ICJpbXBvcnQgb3M7IHByaW50KGFzY2lpKG9zLmdldGVudiglcykpKSIgJSByZXByKGtleSkKICAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCi0gICAgICAgICAgICAjIFVzZSBDIGxvY2FsZSB0byBnZXQgYXNjaWkgZm9yIHRoZSBsb2NhbGUgZW5jb2RpbmcgdG8gZm9yY2UKKyAgICAgICAgICAgICMgVXNlIEMgbG9jYWxlIHRvIGdldCBBU0NJSSBmb3IgdGhlIGxvY2FsZSBlbmNvZGluZyB0byBmb3JjZQogICAgICAgICAgICAgIyBzdXJyb2dhdGUtZXNjYXBpbmcgb2YgXHhGRiBpbiB0aGUgY2hpbGQgcHJvY2Vzczsgb3RoZXJ3aXNlIGl0IGNhbgogICAgICAgICAgICAgIyBiZSBkZWNvZGVkIGFzLWlzIGlmIHRoZSBkZWZhdWx0IGxvY2FsZSBpcyBsYXRpbi0xLgogICAgICAgICAgICAgZW52WydMQ19BTEwnXSA9ICdDJworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpOgorICAgICAgICAgICAgICAgICMgT24gQUlYLCB0aGUgQyBsb2NhbGUgdXNlcyB0aGUgTGF0aW4xIGVuY29kaW5nCisgICAgICAgICAgICAgICAgZGVjb2RlZF92YWx1ZSA9IGVuY29kZWRfdmFsdWUuZGVjb2RlKCJsYXRpbjEiLCAic3Vycm9nYXRlZXNjYXBlIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBPbiBvdGhlciBVTklYZXMsIHRoZSBDIGxvY2FsZSB1c2VzIHRoZSBBU0NJSSBlbmNvZGluZworICAgICAgICAgICAgICAgIGRlY29kZWRfdmFsdWUgPSB2YWx1ZQogICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAogICAgICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKGInXG5ccicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkoZGVjb2RlZF92YWx1ZSkpCiAKICAgICAgICAgICAgICMgdGVzdCBieXRlcwogICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgiYXNjaWkiLCAic3Vycm9nYXRlZXNjYXBlIikKLSAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQogICAgICAgICAgICAgc2NyaXB0ID0gImltcG9ydCBvczsgcHJpbnQoYXNjaWkob3MuZ2V0ZW52YiglcykpKSIgJSByZXByKGtleSkKICAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCi0gICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBlbnZba2V5XSA9IGVuY29kZWRfdmFsdWUKICAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKICAgICAgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcChiJ1xuXHInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaSh2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKGVuY29kZWRfdmFsdWUpKQogCiAgICAgZGVmIHRlc3RfYnl0ZXNfcHJvZ3JhbShzZWxmKToKICAgICAgICAgYWJzX3Byb2dyYW0gPSBvcy5mc2VuY29kZShzeXMuZXhlY3V0YWJsZSkKQEAgLTE4MTYsNiArMTgxOCw5IEBACiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQogICAgICAgICAgICAgb3Blbl9mZHMuYWRkKGZkKQogCisgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKwogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIGZkX3N0YXR1c10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGNsb3NlX2Zkcz1GYWxzZSkKICAgICAgICAgb3V0cHV0LCBpZ25vcmVkID0gcC5jb21tdW5pY2F0ZSgpCkBAIC0xODYwLDYgKzE4NjUsOCBAQAogICAgICAgICAgICAgZmRzID0gb3MucGlwZSgpCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1swXSkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmRzWzFdKQorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZHNbMV0sIFRydWUpCiAgICAgICAgICAgICBvcGVuX2Zkcy51cGRhdGUoZmRzKQogCiAgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKQEAgLTE4ODIsNiArMTg4OSwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPUZhbHNlLCBwYXNzX2Zkcz0oZmQsICkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb3ZlcnJpZGluZyBjbG9zZV9mZHMnLCBzdHIoY29udGV4dC53YXJuaW5nKSkKIAorICAgIGRlZiB0ZXN0X3Bhc3NfZmRzX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSBzdXBwb3J0LmZpbmRmaWxlKCJmZF9zdGF0dXMucHkiLCBzdWJkaXI9InN1YnByb2Nlc3NkYXRhIikKKworICAgICAgICBpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgaW5oZXJpdGFibGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoaW5oZXJpdGFibGUsIFRydWUpCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShub25faW5oZXJpdGFibGUsIEZhbHNlKQorICAgICAgICBwYXNzX2ZkcyA9IChpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCBzY3JpcHRdCisgICAgICAgIGFyZ3MgKz0gbGlzdChtYXAoc3RyLCBwYXNzX2ZkcykpCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPXBhc3NfZmRzKQorICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dC5zcGxpdChiJywnKSkpCisKKyAgICAgICAgIyB0aGUgaW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgYmUgaW5oZXJpdGVkLCBzbyBpdHMgaW5oZXJpdGFibGUKKyAgICAgICAgIyBmbGFnIG11c3QgYmUgc2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzIGFmdGVyIGZvcmsoKSBhbmQgYmVmb3JlIGV4ZWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkcywgc2V0KHBhc3NfZmRzKSwgIm91dHB1dD0lYSIgJSBvdXRwdXQpCisKKyAgICAgICAgIyBpbmhlcml0YWJsZSBmbGFnIG11c3Qgbm90IGJlIGNoYW5nZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobm9uX2luaGVyaXRhYmxlKSwgRmFsc2UpCisKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkaW5fYXJlX3NpbmdsZV9pbm91dF9mZChzZWxmKToKICAgICAgICAgd2l0aCBpby5vcGVuKG9zLmRldm51bGwsICJyKyIpIGFzIGlub3V0OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKQEAgLTE5NjksNyArMjAwMiw3IEBACiAgICAgICAgICMgbGV0IHNvbWUgdGltZSBmb3IgdGhlIHByb2Nlc3MgdG8gZXhpdCwgYW5kIGNyZWF0ZSBhIG5ldyBQb3BlbjogdGhpcwogICAgICAgICAjIHNob3VsZCB0cmlnZ2VyIHRoZSB3YWl0KCkgb2YgcAogICAgICAgICB0aW1lLnNsZWVwKDAuMikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CkBAIC0yMTU0LDE1ICsyMTg3LDE2IEBACiAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3VicHJvY2VzcywgJ19oYXNfcG9sbCcsIEZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgICJwb2xsIHN5c3RlbSBjYWxsIG5vdCBzdXBwb3J0ZWQiKQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IiKQogY2xhc3MgUHJvY2Vzc1Rlc3RDYXNlTm9Qb2xsKFByb2Nlc3NUZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IEZhbHNlCisgICAgICAgIHNlbGYub3JpZ19zZWxlY3RvciA9IHN1YnByb2Nlc3MuX1BvcGVuU2VsZWN0b3IKKyAgICAgICAgc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgogICAgICAgICBQcm9jZXNzVGVzdENhc2Uuc2V0VXAoc2VsZikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3VicHJvY2Vzcy5faGFzX3BvbGwgPSBUcnVlCisgICAgICAgIHN1YnByb2Nlc3MuX1BvcGVuU2VsZWN0b3IgPSBzZWxmLm9yaWdfc2VsZWN0b3IKICAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnRlYXJEb3duKHNlbGYpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdW5hdS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkKaW5kZXggNzY3MzE0Zi4uYWY5ZmZlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5hdS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBzeXMKIGltcG9ydCBzdW5hdQogCkBAIC00Nyw2ICs0OCwzNCBAQAogICAgICAgIiIiKQogCiAKK2NsYXNzIFN1bmF1UENNMjRUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAorICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHN1bmF1CisgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtMjQuYXUnCisgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CisgICAgbmNoYW5uZWxzID0gMgorICAgIHNhbXB3aWR0aCA9IDMKKyAgICBmcmFtZXJhdGUgPSAxMTAyNQorICAgIG5mcmFtZXMgPSA0OAorICAgIGNvbXB0eXBlID0gJ05PTkUnCisgICAgY29tcG5hbWUgPSAnbm90IGNvbXByZXNzZWQnCisgICAgZnJhbWVzID0gYnl0ZXMuZnJvbWhleCgiIiJcCisgICAgICAwMjJENjVGRkVCOUQgNEI1QTBGMDBGQTU0IDMxMTNDMzA0RUUyQiA4MERDRDYwODQzMDMgXAorICAgICAgQ0JERUMwMDZCMjYxIDQ4QTk5ODAzRjJGOCBCRkU4MjQwMUIwN0QgMDM2QkZCRkU3QjVEIFwKKyAgICAgIEI4NTc1NkZBM0VDOSBCNEIwNTVGMzUwMkIgMjk5ODMwRUJDQjYyIDFBNUNBN0U2RDk5QSBcCisgICAgICBFREZBM0VFNDkxQkQgQzYyNUVCRTI3ODg0IDBFMDVBOUUwQjZDRiBFRjI5MjlFMDI5MjIgXAorICAgICAgNTc1OEQ4RTI3MDY3IEZCMzU1N0U4M0UxNiAxMzc3QkZFRjg0MDIgRDgyQzVCRjcyNzJBIFwKKyAgICAgIDk3OEYxNkZCNzc0NSBGNUY4NjVGQzEwMTMgMDg2NjM1RkI5QzRFIERGMzBGQ0ZCNDBFRSBcCisgICAgICAxMTdGRTBGQTM0MzggM0VFNkI4RkI1QUMzIEJDNzdBM0ZDQjJGNCA2NkQ2REFGRjVGMzIgXAorICAgICAgQ0YxM0I5MDQxMjc1IDQzMUQ2OTA5N0E4QyBDMUJCNjAwRUM3NEUgNTEyMEI5MTJBMkJBIFwKKyAgICAgIEVFREY2NDE3NTRDMCA4MjA3MDAxNjY0QjcgN0ZGRkZGMTQ0NTNGIDgwMDAwMDEyOTRFNiBcCisgICAgICA0OTlDMUIwRUIzQjIgNTJCNzNFMERCQ0EwIEVGQjJCMjBGNUZEOCBDRTNDREIwRkJFMTIgXAorICAgICAgRTRCNDlDMENFQTJEIDYzNDRBODBBNUE3QyAwOEM4RkUwQTFGRkUgMkJCOTg2MEIwQTBFIFwKKyAgICAgIDUxNDg2RjBFNDRFMSA4QkNDNjQxMTNCMDUgQjZGNEVDMEVFQjM2IDQ0MTMxNzBBNUI0OCBcCisgICAgICAiIiIpCisKKwogY2xhc3MgU3VuYXVQQ00zMlRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCiAgICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAogICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC05Niw3ICsxMjUsNyBAQAogICAgICAgRTUwNDBDQkMgNjE3QzBBM0MgMDhCQzBBM0MgMkM3QzBCM0MgNTE3QzBFM0MgOEE4NDEwRkMgQjY4NDBFQkMgNDU3QzBBM0MgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CmluZGV4IGUwOGNmMDEuLjJkYTNhYzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CkBAIC0xLDE5ICsxLDI2IEBACiAiIiJEbyBhIG1pbmltYWwgdGVzdCBvZiBhbGwgdGhlIG1vZHVsZXMgdGhhdCBhcmVuJ3Qgb3RoZXJ3aXNlIHRlc3RlZC4iIiIKLQotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCiBjbGFzcyBUZXN0VW50ZXN0ZWRNb2R1bGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9hdF9sZWFzdF9pbXBvcnRfdW50ZXN0ZWRfbW9kdWxlcyhzZWxmKToKKyAgICBkZWYgdGVzdF91bnRlc3RlZF9tb2R1bGVzX2Nhbl9iZV9pbXBvcnRlZChzZWxmKToKKyAgICAgICAgdW50ZXN0ZWQgPSAoJ2JkYicsICdlbmNvZGluZ3MnLCAnZm9ybWF0dGVyJywgJ2ltZ2hkcicsCisgICAgICAgICAgICAgICAgICAgICdudHVybDJwYXRoJywgJ3RhYm5hbm55JykKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgotICAgICAgICAgICAgaW1wb3J0IGJkYgotICAgICAgICAgICAgaW1wb3J0IGNnaXRiCisgICAgICAgICAgICBmb3IgbmFtZSBpbiB1bnRlc3RlZDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGVzdC50ZXN0X3t9Jy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IHVuaXR0ZXN0LlNraXBUZXN0OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne30gaGFzIHRlc3RzIGV2ZW4gdGhvdWdoIHRlc3Rfc3VuZHJ5IGNsYWltcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXJ3aXNlJy5mb3JtYXQobmFtZSkpCiAKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuYmNwcGNvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jeWd3aW5jY29tcGlsZXIKLSAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuZW14Y2NvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmZpbGVsaXN0CiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5tc3ZjY29tcGlsZXIKQEAgLTM5LDI4ICs0NiwxNCBAQAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnNkaXN0CiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkCiAKLSAgICAgICAgICAgIGltcG9ydCBlbmNvZGluZ3MKLSAgICAgICAgICAgIGltcG9ydCBmb3JtYXR0ZXIKLSAgICAgICAgICAgIGltcG9ydCBnZXRwYXNzCiAgICAgICAgICAgICBpbXBvcnQgaHRtbC5lbnRpdGllcwotICAgICAgICAgICAgaW1wb3J0IGltZ2hkcgotICAgICAgICAgICAgaW1wb3J0IGtleXdvcmQKLSAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCi0gICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAotICAgICAgICAgICAgaW1wb3J0IG9zMmVteHBhdGgKLSAgICAgICAgICAgIGltcG9ydCBwc3RhdHMKLSAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCi0gICAgICAgICAgICBpbXBvcnQgc25kaGRyCi0gICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKKwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgaW1wb3J0IHR0eSAgIyBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJza2lwcGluZyB0dHkiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VW50ZXN0ZWRNb2R1bGVzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBlci5weQppbmRleCAxZTI3MmVlLi4zN2ZjMmQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIGNsYXNzIFRlc3RTdXBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhpcyBmaXhlcyB0aGUgZGFtYWdlIHRoYXQgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyBkb2VzLgorICAgICAgICBub25sb2NhbCBfX2NsYXNzX18KKyAgICAgICAgX19jbGFzc19fID0gVGVzdFN1cGVyCisKICAgICBkZWYgdGVzdF9iYXNpY3Nfd29ya2luZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZigpLCAnQUJDRCcpCiAKQEAgLTgxLDggKzg2LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mKCksICdBRScpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgZGVmIHRlc3RfX19jbGFzc19fX3NldChzZWxmKToKKyAgICBkZWYgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyhzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzEyMzcwCiAgICAgICAgIGNsYXNzIFgoQSk6CiAgICAgICAgICAgICBkZWYgZihzZWxmKToKQEAgLTkxLDYgKzk1LDMxIEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmYoKSwgJ0EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCA0MTMpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICB4ID0gX19jbGFzc19fCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydElzKFgueCwgdHlwZShzZWxmKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFg6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAgICAgX19jbGFzc19fIiIiLCBnbG9iYWxzKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZS5leGNlcHRpb24pLCBOYW1lRXJyb3IpICMgTm90IFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBnbG9iYWwgX19jbGFzc19fCisgICAgICAgICAgICBfX2NsYXNzX18gPSA0MgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzKClbIl9fY2xhc3NfXyJdLCA0MikKKyAgICAgICAgZGVsIGdsb2JhbHMoKVsiX19jbGFzc19fIl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19jbGFzc19fIiwgWC5fX2RpY3RfXykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIG5vbmxvY2FsIF9fY2xhc3NfXworICAgICAgICAgICAgX19jbGFzc19fID0gNDIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19jbGFzc19fLCA0MikKIAogICAgIGRlZiB0ZXN0X19fY2xhc3NfX19pbnN0YW5jZW1ldGhvZChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzE0ODU3CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggNGVkYjFhOC4uMTZiNjYwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtMzA2LDYgKzMwNiw3IEBACiAgICAgIyBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKICAgICAjIGNhbl9zeW1saW5rCiAgICAgIyBza2lwX3VubGVzc19zeW1saW5rCisgICAgIyBTdXBwcmVzc0NyYXNoUmVwb3J0CiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQppbmRleCA1OTI2YjY5Li5hOWQzNjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMzMsNyArMzMsNyBAQAogCiA+Pj4gTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8ga2V5d29yZAogCiBJdCdzIGEgc3ludGF4IGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgdHVwbGUuICBXaHkgaXNuJ3QgaXQgYW4KIGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgbGlzdD8gIEl0IHdpbGwgYWx3YXlzIHJhaXNlIHNvbWUgZXJyb3IgYXQKQEAgLTIzMyw3ICsyMzMsNyBAQAogU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogPj4+IE5vbmUgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBrZXl3b3JkCiA+Pj4gZigpICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBhY2Y2ZDM2Li5mMGM3MTQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtNiw2ICs2LDkgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgZ2MKK2ltcG9ydCBzeXNjb25maWcKK2ltcG9ydCBwbGF0Zm9ybQogCiAjIGNvdW50IHRoZSBudW1iZXIgb2YgdGVzdCBydW5zLCB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUKICMgc3RyaW5ncyB0byBpbnRlcm4gaW4gdGVzdF9pbnRlcm4oKQpAQCAtMjQ4LDcgKzI1MSw3IEBACiAKICAgICAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdCglZCkKICAgICAgICAgICAgIGYoKSIiIikKLSAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgZm9yIGkgaW4gKDUwLCAxMDAwKToKICAgICAgICAgICAgICAgICBzdWIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgY29kZSAlIGldLAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQpAQCAtNDI5LDcgKzQzMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzeXMuaW50X2luZm8uc2l6ZW9mX2RpZ2l0KSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhleHZlcnNpb24sIGludCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMuaGFzaF9pbmZvKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmhhc2hfaW5mbyksIDkpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuaGFzaF9pbmZvLm1vZHVsdXMsIDIqKnN5cy5oYXNoX2luZm8ud2lkdGgpCiAgICAgICAgICMgc3lzLmhhc2hfaW5mby5tb2R1bHVzIHNob3VsZCBiZSBhIHByaW1lOyB3ZSBkbyBhIHF1aWNrCiAgICAgICAgICMgcHJvYmFibGUgcHJpbWFsaXR5IHRlc3QgKGRvZXNuJ3QgZXhjbHVkZSB0aGUgcG9zc2liaWxpdHkgb2YKQEAgLTQ0NCw2ICs0NDcsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8uaW5mLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLm5hbiwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5pbWFnLCBpbnQpCisgICAgICAgIGFsZ28gPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZX0hBU0hfQUxHT1JJVEhNIikKKyAgICAgICAgaWYgc3lzLmhhc2hfaW5mby5hbGdvcml0aG0gaW4geyJmbnYiLCAic2lwaGFzaDI0In06CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5oYXNoX2luZm8uaGFzaF9iaXRzLCB7MzIsIDY0fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3lzLmhhc2hfaW5mby5zZWVkX2JpdHMsIHszMiwgNjQsIDEyOH0pCisKKyAgICAgICAgICAgIGlmIGFsZ28gPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAic2lwaGFzaDI0IikKKyAgICAgICAgICAgIGVsaWYgYWxnbyA9PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sICJmbnYiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9jZXNzb3IgPSBwbGF0Zm9ybS5wcm9jZXNzb3IoKS5sb3dlcigpCisgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc29yIGluIHsic3BhcmMiLCAibWlwcyJ9OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAiZm52IikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAic2lwaGFzaDI0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUFlfSEFTSF9FWFRFUk5BTAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGdvLCAwKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzeXMuaGFzaF9pbmZvLmN1dG9mZiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN5cy5oYXNoX2luZm8uY3V0b2ZmLCA4KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMubWF4c2l6ZSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHVuaWNvZGUsIGludCkKQEAgLTQ4MSw3ICs1MDQsNyBAQAogICAgIGRlZiB0ZXN0X3RocmVhZF9pbmZvKHNlbGYpOgogICAgICAgICBpbmZvID0gc3lzLnRocmVhZF9pbmZvCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGluZm8pLCAzKQotICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubmFtZSwgKCdudCcsICdvczInLCAncHRocmVhZCcsICdzb2xhcmlzJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5mby5uYW1lLCAoJ250JywgJ3B0aHJlYWQnLCAnc29sYXJpcycsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubG9jaywgKCdzZW1hcGhvcmUnLCAnbXV0ZXgrY29uZCcsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfNDM1ODEoc2VsZik6CkBAIC01MTQsNyArNTM3LDcgQEAKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwKICAgICAgICAgICAgICAgICAgImluc3BlY3QiLCAiaW50ZXJhY3RpdmUiLCAib3B0aW1pemUiLCAiZG9udF93cml0ZV9ieXRlY29kZSIsCiAgICAgICAgICAgICAgICAgICJub191c2VyX3NpdGUiLCAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidmVyYm9zZSIsCi0gICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIsICJpc29sYXRlZCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCkBAIC01NDMsNiArNTY2LDQyIEBACiAgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJz8nKQogCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhhMikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmljb2RlRW5jb2RlRXJyb3I6JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJiIidceGEyJyIsIGVycikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaToiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VuaWNvZGVFbmNvZGVFcnJvcjonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmIiJ1x4YTInIiwgZXJyKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gIjpzdXJyb2dhdGVlc2NhcGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGRjYmQpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYidceGJkJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgT1Mgc3VwcG9ydCBvZiBub24tQVNDSUkgZW5jb2RpbmdzJykKKyAgICBkZWYgdGVzdF9pb2VuY29kaW5nX25vbmFzY2lpKHNlbGYpOgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCglYSknICUgdGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIG9zLmZzZW5jb2RlKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSkpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5iYXNlX3ByZWZpeCAhPSBzeXMucHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgaXMgbm90IHZlbnYtY29tcGF0aWJsZScpCiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKQEAgLTYxMCw2ICs2NjksMzYgQEAKICAgICAgICAgcmV0LCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmcmVlIFB5RGljdE9iamVjdHMiLCBlcnIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHN5cywgImdldGFsbG9jYXRlZGJsb2NrcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzIHVuYXZhaWxhYmxlIG9uIHRoaXMgYnVpbGQiKQorICAgIGRlZiB0ZXN0X2dldGFsbG9jYXRlZGJsb2NrcyhzZWxmKToKKyAgICAgICAgIyBTb21lIHNhbml0eSBjaGVja3MKKyAgICAgICAgd2l0aF9weW1hbGxvYyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9QWU1BTExPQycpCisgICAgICAgIGEgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGEpLCBpbnQpCisgICAgICAgIGlmIHdpdGhfcHltYWxsb2M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYSwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2hlbiBXSVRIX1BZTUFMTE9DIGlzbid0IGF2YWlsYWJsZSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZworICAgICAgICAgICAgIyBhYm91dCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbjogdGhlIGZ1bmN0aW9uIG1pZ2h0CisgICAgICAgICAgICAjIHJldHVybiAwIG9yIHNvbWV0aGluZyBncmVhdGVyLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYSwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBXaGlsZSB3ZSBjb3VsZCBpbWFnaW5lIGEgUHl0aG9uIHNlc3Npb24gd2hlcmUgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgIyBtdWx0aXBsZSBidWZmZXIgb2JqZWN0cyB3b3VsZCBleGNlZWQgdGhlIHNoYXJpbmcgb2YgcmVmZXJlbmNlcywKKyAgICAgICAgICAgICMgaXQgaXMgdW5saWtlbHkgdG8gaGFwcGVuIGluIGEgbm9ybWFsIHRlc3QgcnVuLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGEsIHN5cy5nZXR0b3RhbHJlZmNvdW50KCkpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgZ2V0dG90YWxyZWZjb3VudCgpIG5vdCBhdmFpbGFibGUKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGIgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYiwgYSkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGMgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjLCByYW5nZShiIC0gNTAsIGIgKyA1MCkpCisKKwogY2xhc3MgU2l6ZW9mVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC02NTQsNyArNzQzLDcgQEAKICAgICAgICAgc2FtcGxlcyA9IFtiJycsIGIndScqMTAwMDAwXQogICAgICAgICBmb3Igc2FtcGxlIGluIHNhbXBsZXM6CiAgICAgICAgICAgICB4ID0gYnl0ZWFycmF5KHNhbXBsZSkKLSAgICAgICAgICAgIGNoZWNrKHgsIHZzaXplKCdpblAnKSArIHguX19hbGxvY19fKCkpCisgICAgICAgICAgICBjaGVjayh4LCB2c2l6ZSgnbjJQaScpICsgeC5fX2FsbG9jX18oKSkKICAgICAgICAgIyBieXRlYXJyYXlfaXRlcmF0b3IKICAgICAgICAgY2hlY2soaXRlcihieXRlYXJyYXkoKSksIHNpemUoJ25QJykpCiAgICAgICAgICMgY2VsbApAQCAtNzMzLDcgKzgyMiw3IEBACiAgICAgICAgIG5mcmVlcyA9IGxlbih4LmZfY29kZS5jb19mcmVldmFycykKICAgICAgICAgZXh0cmFzID0geC5mX2NvZGUuY29fc3RhY2tzaXplICsgeC5mX2NvZGUuY29fbmxvY2FscyArXAogICAgICAgICAgICAgICAgICAgbmNlbGxzICsgbmZyZWVzIC0gMQotICAgICAgICBjaGVjayh4LCB2c2l6ZSgnMTJQM2knICsgQ09fTUFYQkxPQ0tTKiczaScgKyAnUCcgKyBleHRyYXMqJ1AnKSkKKyAgICAgICAgY2hlY2soeCwgdnNpemUoJzEzUDNpYycgKyBDT19NQVhCTE9DS1MqJzNpJyArICdQJyArIGV4dHJhcyonUCcpKQogICAgICAgICAjIGZ1bmN0aW9uCiAgICAgICAgIGRlZiBmdW5jKCk6IHBhc3MKICAgICAgICAgY2hlY2soZnVuYywgc2l6ZSgnMTJQJykpCkBAIC03NzksNyArODY4LDcgQEAKICAgICAgICAgIyBtZW1vcnl2aWV3CiAgICAgICAgIGNoZWNrKG1lbW9yeXZpZXcoYicnKSwgc2l6ZSgnUG5pbiAyUDJuMmk1UCAzY1BuJykpCiAgICAgICAgICMgbW9kdWxlCi0gICAgICAgIGNoZWNrKHVuaXR0ZXN0LCBzaXplKCdQblAnKSkKKyAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoJ1BuUFBQJykpCiAgICAgICAgICMgTm9uZQogICAgICAgICBjaGVjayhOb25lLCBzaXplKCcnKSkKICAgICAgICAgIyBOb3RJbXBsZW1lbnRlZFR5cGUKQEAgLTgzMywxMSArOTIyLDExIEBACiAgICAgICAgIGNoZWNrKCgxLDIsMyksIHZzaXplKCcnKSArIDMqc2VsZi5QKQogICAgICAgICAjIHR5cGUKICAgICAgICAgIyBzdGF0aWMgdHlwZTogUHlUeXBlT2JqZWN0Ci0gICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUEknKQorICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpCiAgICAgICAgIGNoZWNrKGludCwgcykKICAgICAgICAgIyAoUHlUeXBlT2JqZWN0ICsgUHlOdW1iZXJNZXRob2RzICsgUHlNYXBwaW5nTWV0aG9kcyArCiAgICAgICAgICMgIFB5U2VxdWVuY2VNZXRob2RzICsgUHlCdWZmZXJQcm9jcyArIDRQKQotICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJJykgKyBzdHJ1Y3QuY2FsY3NpemUoJzM0UCAzUCAxMFAgMlAgNFAnKQorICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpICsgc3RydWN0LmNhbGNzaXplKCczNFAgM1AgMTBQIDJQIDRQJykKICAgICAgICAgIyBTZXBhcmF0ZSBibG9jayBmb3IgUHlEaWN0S2V5c09iamVjdCB3aXRoIDQgZW50cmllcwogICAgICAgICBzICs9IHN0cnVjdC5jYWxjc2l6ZSgiMm5QbiIpICsgNCpzdHJ1Y3QuY2FsY3NpemUoIm4yUCIpCiAgICAgICAgICMgY2xhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKaW5kZXggMDNmNjdmZC4uODA0YzQ0NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgc2h1dGlsCiBmcm9tIGNvcHkgaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLCBjaGVja193YXJuaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0LCBza2lwX3VubGVzc19zeW1saW5rKQogCiBpbXBvcnQgc3lzY29uZmlnCkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNvbmZpZ19oKSwgY29uZmlnX2gpCiAKICAgICBkZWYgdGVzdF9nZXRfc2NoZW1lX25hbWVzKHNlbGYpOgotICAgICAgICB3YW50ZWQgPSAoJ250JywgJ250X3VzZXInLCAnb3MyJywgJ29zMl9ob21lJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCisgICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvc3hfZnJhbWV3b3JrX3VzZXInLAogICAgICAgICAgICAgICAgICAgJ3Bvc2l4X2hvbWUnLCAncG9zaXhfcHJlZml4JywgJ3Bvc2l4X3VzZXInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9zY2hlbWVfbmFtZXMoKSwgd2FudGVkKQogCkBAIC0zMDUsMTQgKzMwNSwxMyBAQAogICAgICAgICBpZiAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJyBpbiBlbnY6CiAgICAgICAgICAgICBkZWwgZW52WydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXQogCi0gICAgICAgIHdpdGggb3BlbignL2Rldi9udWxsJywgJ3cnKSBhcyBkZXZudWxsX2ZwOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWwotICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKLSAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSknLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbF9mcCwKLSAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSknLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLAorICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQogICAgICAgICBzdGF0dXMgPSBwLndhaXQoKQpAQCAtMzI1LDIwICszMjQsMTkgQEAKICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgZW52WydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXSA9ICcxMC4xJwogCi0gICAgICAgIHdpdGggb3BlbignL2Rldi9udWxsJykgYXMgZGV2X251bGw6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZfbnVsbCwKLSAgICAgICAgICAgICAgICBlbnY9ZW52KQotICAgICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlfcGxhdGZvcm0sIHRlc3RfcGxhdGZvcm0pCiAKICAgICBkZWYgdGVzdF9zcmNkaXIoc2VsZik6CiAgICAgICAgICMgU2VlIElzc3VlcyAjMTUzMjIsICMxNTM2NC4KQEAgLTM3MSw2ICszNjksMjYgQEAKICAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNkaXIsIHNyY2RpcjIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyLCAnU08nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fdmFsdWUoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2luX3ZhcnMoc2VsZik6CisgICAgICAgIHZhcnMgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodmFyc1snU08nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzWydTTyddLCB2YXJzWydFWFRfU1VGRklYJ10pCisKIAogY2xhc3MgTWFrZWZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCAyMzgxNzVmLi45ZDMxODEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC03LDcgKzcsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGFyZmlsZQogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiAjIENoZWNrIGZvciBvdXIgY29tcHJlc3Npb24gbW9kdWxlcy4KIHRyeToKQEAgLTI3LDExICsyNywxMyBAQAogICAgIHJldHVybiBtZDUoZGF0YSkuaGV4ZGlnZXN0KCkKIAogVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAiLXRhcmRpciIKK3RhcmV4dGRpciA9IFRFTVBESVIgKyAnLWV4dHJhY3QtdGVzdCcKIHRhcm5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCJ0ZXN0dGFyLnRhciIpCiBnemlwbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuZ3oiKQogYnoybmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuYnoyIikKIHh6bmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIueHoiKQogdG1wbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidG1wLnRhciIpCitkb3RsZXNzbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhciIpCiAKIG1kNV9yZWd0eXBlID0gIjY1ZjQ3N2M4MThhZDllMTVmN2ZlYWIwYzZkMzc3NDJmIgogbWQ1X3NwYXJzZSA9ICJhNTRmYmM0Y2E0ZjQzOTlhOTBlMWIyNzE2NDAxMmZjNiIKQEAgLTE3MjQsNiArMTcyNiwxNjggQEAKICAgICAgICAgICAgIHRhcmZpbGUuaXRuKDB4MTAwMDAwMDAwMDAsIDYsIHRhcmZpbGUuR05VX0ZPUk1BVCkKIAogCitjbGFzcyBDb21tYW5kTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRhcmZpbGVjbWQoc2VsZiwgKmFyZ3MpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1tJywgJ3RhcmZpbGUnLCAqYXJncykKKyAgICAgICAgcmV0dXJuIG91dC5yZXBsYWNlKG9zLmxpbmVzZXAuZW5jb2RlKCksIGInXG4nKQorCisgICAgZGVmIHRhcmZpbGVjbWRfZmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAndGFyZmlsZScsICphcmdzKQorCisgICAgZGVmIG1ha2Vfc2ltcGxlX3RhcmZpbGUoc2VsZiwgdGFyX25hbWUpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCB0YXJfbmFtZSkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICd3JykgYXMgdGY6CisgICAgICAgICAgICBmb3IgdGFyZGF0YSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQodGFyZGF0YSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHRhcmRhdGEpKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10ZXN0JzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0YXJfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIGZvciB0YXJfbmFtZSBpbiB0ZXN0dGFybmFtZXM6CisgICAgICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctdCcsIHRhcl9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidpcyBhIHRhciBhcmNoaXZlLlxuJywgb3V0KQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX2ludmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgemlwbmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3ppcGRpci56aXAnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLXQnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodGFyX25hbWU9dGFyX25hbWUpOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbih0YXJfbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVs6NTExXSkKKyAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy10JywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfbGlzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vfc2ltcGxlX3RhcmZpbGUodG1wbmFtZSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAncicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1GYWxzZSkKKyAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLWwnLCAnLS1saXN0JzoKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsIHRtcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfdmVyYm9zZShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyB0OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgJ3InKSBhcyB0ZjoKKyAgICAgICAgICAgICAgICB0Zi5saXN0KHZlcmJvc2U9VHJ1ZSkKKyAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctbCcsIHRtcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfaW52YWxpZF9maWxlKHNlbGYpOgorICAgICAgICB6aXBuYW1lID0gc3VwcG9ydC5maW5kZmlsZSgnemlwZGlyLnppcCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctbCcsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIGZpbGVzID0gW3N1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLnR4dCcpLAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy1uby1jb2RpbmctY29va2llLScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kLXV0ZjgtYm9tLXNpZy1vbmx5LnR4dCcpXQorICAgICAgICBmb3Igb3B0IGluICctYycsICctLWNyZWF0ZSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdG1wbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWMnLCB0bXBuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBmaWxlIGNyZWF0ZWQuJywgb3V0KQorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmRfZG90bGVzc19maWxlbmFtZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCBkb3RsZXNzbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGRvdGxlc3NuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZG90bGVzc25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9kb3Rfc3RhcnRlZF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgdGFyX25hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgIi50ZXN0dGFyIikKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCB0YXJfbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyX25hbWUpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2NvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICBmb3Igb3B0IGluICctZScsICctLWV4dHJhY3QnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0bXBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vfc2ltcGxlX3RhcmZpbGUodG1wbmFtZSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgJy1lJywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInIGZpbGUgaXMgZXh0cmFjdGVkLicsIG91dCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX2RpZmZlcmVudF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQoJy1lJywgdG1wbmFtZSwgJ3NwYW1kaXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHRhcmV4dGRpcik6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLWUnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworCiBjbGFzcyBDb250ZXh0TWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CkBAIC0xNzMyLDIwICsxODk2LDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9jbG9zZWQoc2VsZik6Ci0gICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBJT0Vycm9yCisgICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBPU0Vycm9yCiAgICAgICAgICMgaWYgdGhlIFRhckZpbGUgb2JqZWN0IGlzIGFscmVhZHkgY2xvc2VkLgogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSkKICAgICAgICAgdGFyLmNsb3NlKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgIHdpdGggdGFyOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IGlmIHRoZSBJT0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KKyAgICAgICAgIyBUZXN0IGlmIHRoZSBPU0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUpIGFzIHRhcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZXhjZXB0aW9uIHJhaXNlZCBpbiBjb250ZXh0IG1hbmFnZXIiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQogCkBAIC0xODUxLDYgKzIwMTUsOCBAQAogICAgIHN1cHBvcnQudW5saW5rKFRFTVBESVIpCiAgICAgb3MubWFrZWRpcnMoVEVNUERJUikKIAorICAgIGdsb2JhbCB0ZXN0dGFybmFtZXMKKyAgICB0ZXN0dGFybmFtZXMgPSBbdGFybmFtZV0KICAgICB3aXRoIG9wZW4odGFybmFtZSwgInJiIikgYXMgZm9iajoKICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCiAKQEAgLTE4NTgsNiArMjAyNCw3IEBACiAgICAgZm9yIGMgaW4gR3ppcFRlc3QsIEJ6MlRlc3QsIEx6bWFUZXN0OgogICAgICAgICBpZiBjLm9wZW46CiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhjLnRhcm5hbWUpCisgICAgICAgICAgICB0ZXN0dGFybmFtZXMuYXBwZW5kKGMudGFybmFtZSkKICAgICAgICAgICAgIHdpdGggYy5vcGVuKGMudGFybmFtZSwgIndiIikgYXMgdGFyOgogICAgICAgICAgICAgICAgIHRhci53cml0ZShkYXRhKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RjbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CmluZGV4IDRjZjNmMjguLjY2YzQ5ZmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CkBAIC0yNTQsNDAgKzI1NCw2IEBACiAgICAgICAgIGZvciBhcmcsIHJlcyBpbiB0ZXN0Y2FzZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KGFyZyksIHJlcywgbXNnPWFyZykKIAotICAgIGRlZiB0ZXN0X21lcmdlKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdtZXJnZSBpcyBkZXByZWNhdGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIG1lcmdlID0gc2VsZi5pbnRlcnAudGsubWVyZ2UKLSAgICAgICAgICAgIGNhbGwgPSBzZWxmLmludGVycC50ay5jYWxsCi0gICAgICAgICAgICB0ZXN0Y2FzZXMgPSBbCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKCgnYScsKSwgJ2EnKSwKLSAgICAgICAgICAgICAgICAoKDIsKSwgJzInKSwKLSAgICAgICAgICAgICAgICAoKCcnLCksICd7fScpLAotICAgICAgICAgICAgICAgICgneycsICdcXHsnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJ2InLCAnYycpLCAnYSBiIGMnKSwKLSAgICAgICAgICAgICAgICAoKCcgJywgJ1x0JywgJ1xyJywgJ1xuJyksICd7IH0ge1x0fSB7XHJ9IHtcbn0nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJyAnLCAnYycpLCAnYSB7IH0gYycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAn4oKsJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnXFUwMDAxMDRhMicpLCAnYSBcVTAwMDEwNGEyJyksCi0gICAgICAgICAgICAgICAgKCgnYScsIGInXHhlMlx4ODJceGFjJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAoJ2InLCAnYycpKSwgJ2Ege2IgY30nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMiksICdhIDInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMy40KSwgJ2EgMy40JyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgyLCAzLjQpKSwgJ2EgezIgMy40fScpLAotICAgICAgICAgICAgICAgICgoKSwgJycpLAotICAgICAgICAgICAgICAgICgoY2FsbCgnbGlzdCcsIDEsICcyJywgKDMuNCwpKSwpLCAnezEgMiAzLjR9JyksCi0gICAgICAgICAgICBdCi0gICAgICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6Ci0gICAgICAgICAgICAgICAgdGVzdGNhc2VzICs9IFsKLSAgICAgICAgICAgICAgICAgICAgKChjYWxsKCdkaWN0JywgJ2NyZWF0ZScsIDEyLCAnXHUyMGFjJywgYidceGUyXHg4Mlx4YWMnLCAoMy40LCkpLCksCi0gICAgICAgICAgICAgICAgICAgICAnezEyIOKCrCDigqwgMy40fScpLAotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGZvciBhcmdzLCByZXMgaW4gdGVzdGNhc2VzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVyZ2UoKmFyZ3MpLCByZXMsIG1zZz1hcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBtZXJnZSwgYidceDgwJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgbWVyZ2UsICdcdWRjODAnKQotCiAKIGNsYXNzIEJpZ21lbVRjbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CmluZGV4IGM5ZjJjY2IuLmJhMzMwNjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CkBAIC0xLDEwICsxLDkgQEAKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIGltcG9ydCB0ZWxuZXRsaWIKIGltcG9ydCB0aW1lCiBpbXBvcnQgY29udGV4dGxpYgogCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKQEAgLTExMiw0MCArMTExLDMyIEBACiAgICAgICAgIHNlbGYuX21lc3NhZ2VzICs9IG91dC5nZXR2YWx1ZSgpCiAgICAgICAgIHJldHVybgogCi1kZWYgbW9ja19zZWxlY3QoKnNfYXJncyk6Ci0gICAgYmxvY2sgPSBGYWxzZQotICAgIGZvciBsIGluIHNfYXJnczoKLSAgICAgICAgZm9yIGZvYiBpbiBsOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmb2IsIFRlbG5ldEFsaWtlKToKLSAgICAgICAgICAgICAgICBibG9jayA9IGZvYi5zb2NrLmJsb2NrCi0gICAgaWYgYmxvY2s6Ci0gICAgICAgIHJldHVybiBbW10sIFtdLCBbXV0KLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gc19hcmdzCi0KLWNsYXNzIE1vY2tQb2xsZXIob2JqZWN0KToKLSAgICB0ZXN0X2Nhc2UgPSBOb25lICAjIFNldCBkdXJpbmcgVGVzdENhc2Ugc2V0VXAuCitjbGFzcyBNb2NrU2VsZWN0b3Ioc2VsZWN0b3JzLkJhc2VTZWxlY3Rvcik6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2ZpbGVfb2JqcyA9IFtdCisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLmtleXMgPSB7fQogCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZkLCBldmVudG1hc2spOgotICAgICAgICBzZWxmLnRlc3RfY2FzZS5hc3NlcnRUcnVlKGhhc2F0dHIoZmQsICdmaWxlbm8nKSwgZmQpCi0gICAgICAgIHNlbGYudGVzdF9jYXNlLmFzc2VydEVxdWFsKGV2ZW50bWFzaywgc2VsZWN0LlBPTExJTnxzZWxlY3QuUE9MTFBSSSkKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzLmFwcGVuZChmZCkKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBrZXkgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoZmlsZW9iaiwgMCwgZXZlbnRzLCBkYXRhKQorICAgICAgICBzZWxmLmtleXNbZmlsZW9ial0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQogCi0gICAgZGVmIHBvbGwoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAga2V5ID0gc2VsZi5rZXlzLnBvcChmaWxlb2JqKQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGJsb2NrID0gRmFsc2UKLSAgICAgICAgZm9yIGZvYiBpbiBzZWxmLl9maWxlX29ianM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZvYiwgVGVsbmV0QWxpa2UpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gZm9iLnNvY2suYmxvY2sKKyAgICAgICAgZm9yIGZpbGVvYmogaW4gc2VsZi5rZXlzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlb2JqLCBUZWxuZXRBbGlrZSk6CisgICAgICAgICAgICAgICAgYmxvY2sgPSBmaWxlb2JqLnNvY2suYmxvY2sKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBpZiBibG9jazoKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHppcChzZWxmLl9maWxlX29ianMsIFtzZWxlY3QuUE9MTElOXSpsZW4oc2VsZi5fZmlsZV9vYmpzKSkKKyAgICAgICAgICAgIHJldHVybiBbKGtleSwga2V5LmV2ZW50cykgZm9yIGtleSBpbiBzZWxmLmtleXMudmFsdWVzKCldCiAKLSAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmZCk6Ci0gICAgICAgIHNlbGYuX2ZpbGVfb2Jqcy5yZW1vdmUoZmQpCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiBkZWYgdGVzdF9zb2NrZXQocmVhZHMpOgpAQCAtMTU5LDcgKzE1MCw3IEBACiAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbiA9IG9sZF9jb25uCiAgICAgcmV0dXJuCiAKLWRlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlLCB1c2VfcG9sbD1Ob25lKToKK2RlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlKToKICAgICAnJycgcmV0dXJuIGEgdGVsbmV0bGliLlRlbG5ldCBvYmplY3QgdGhhdCB1c2VzIGEgU29ja2V0U3R1YiB3aXRoCiAgICAgICAgIHJlYWRzIHF1ZXVlZCB1cCB0byBiZSByZWFkICcnJwogICAgIGZvciB4IGluIHJlYWRzOgpAQCAtMTY3LDI5ICsxNTgsMTQgQEAKICAgICB3aXRoIHRlc3Rfc29ja2V0KHJlYWRzKToKICAgICAgICAgdGVsbmV0ID0gY2xzKCdkdW1teScsIDApCiAgICAgICAgIHRlbG5ldC5fbWVzc2FnZXMgPSAnJyAjIGRlYnVnbGV2ZWwgb3V0cHV0Ci0gICAgICAgIGlmIHVzZV9wb2xsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdXNlX3BvbGwgYW5kIG5vdCB0ZWxuZXQuX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdzZWxlY3QucG9sbCgpIHJlcXVpcmVkLicpCi0gICAgICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gdXNlX3BvbGwKICAgICByZXR1cm4gdGVsbmV0CiAKLQogY2xhc3MgRXhwZWN0QW5kUmVhZFRlc3RDYXNlKFRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYub2xkX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IG1vY2tfc2VsZWN0Ci0gICAgICAgIHNlbGYub2xkX3BvbGwgPSBGYWxzZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKLSAgICAgICAgICAgIHNlbGYub2xkX3BvbGwgPSBzZWxlY3QucG9sbAotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBNb2NrUG9sbGVyCi0gICAgICAgICAgICBNb2NrUG9sbGVyLnRlc3RfY2FzZSA9IHNlbGYKLQorICAgICAgICBzZWxmLm9sZF9zZWxlY3RvciA9IHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IKKyAgICAgICAgdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvciA9IE1vY2tTZWxlY3RvcgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gTm9uZQotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBzZWxmLm9sZF9wb2xsCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBzZWxmLm9sZF9zZWxlY3QKLQorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gc2VsZi5vbGRfc2VsZWN0b3IKIAogY2xhc3MgUmVhZFRlc3RzKEV4cGVjdEFuZFJlYWRUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVhZF91bnRpbChzZWxmKToKQEAgLTIwOCwyMiArMTg0LDYgQEAKICAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdCkKIAotICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPUZhbHNlKQotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBwb2xsKCkgY2FsbC4nKQotICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfYWxsKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTQyNywyMyArMzg3LDYgQEAKICAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfcG9sbChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRlbG5ldC5leHBlY3QoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQotICAgIGRlZiB0ZXN0X2V4cGVjdF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBSZWFkVGVzdHMsIFdyaXRlVGVzdHMsIE9wdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKaW5kZXggNGZmNTZiOC4uYWM0ZDg2MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC0zNiw3ICszNiw3IEBACiAjIENvbW1vbiBmdW5jdGlvbmFsaXR5LgogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHN0cl9jaGVjayA9IHJlLmNvbXBpbGUociJbYS16QS1aMC05Xy1dezZ9JCIpCisgICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIl5bYS16MC05Xy1dezh9JCIpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuX3dhcm5pbmdzX21hbmFnZXIgPSBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkKQEAgLTYzLDcgKzYzLDcgQEAKIAogICAgICAgICBuYmFzZSA9IG5iYXNlW2xlbihwcmUpOmxlbihuYmFzZSktbGVuKHN1ZildCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnN0cl9jaGVjay5tYXRjaChuYmFzZSksCi0gICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIC9eW2EtekEtWjAtOV8tXXs2fSQvIgorICAgICAgICAgICAgICAgICAgICAgInJhbmRvbSBzdHJpbmcgJyVzJyBkb2VzIG5vdCBtYXRjaCBeW2EtejAtOV8tXXs4fSQiCiAgICAgICAgICAgICAgICAgICAgICAlIG5iYXNlKQogCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgICAgICMgdmlhIGFueSBidWdzIGFib3ZlCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIG9zLmNsb3NlKHJlYWRfZmQpCiAgICAgICAgICAgICBvcy5jbG9zZSh3cml0ZV9mZCkKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBvcy5lcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKQEAgLTMzMiw3ICszMzIsNyBAQAogICAgICAgICBmaWxlID0gc2VsZi5kb19jcmVhdGUoKQogICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZmlsZS5uYW1lKS5zdF9tb2RlKQogICAgICAgICBleHBlY3RlZCA9IDBvNjAwCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgpAQCAtMzUwLDYgKzM1MCw3IEBACiAgICAgICAgICAgICB2PSJxIgogCiAgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZpbGUuZmQpLCBGYWxzZSkKICAgICAgICAgZmQgPSAiJWQiICUgZmlsZS5mZAogCiAgICAgICAgIHRyeToKQEAgLTM2Niw3ICszNjcsNyBAQAogICAgICAgICAjIE9uIFdpbmRvd3MgYSBzcGF3biogL3BhdGgvIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZG4ndCBiZSBxdW90ZWQsCiAgICAgICAgICMgYnV0IGFuIGFyZyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBzaG91bGQgYmUgZGVjb3JhdGVkIHdpdGggZG91YmxlCiAgICAgICAgICMgcXVvdGVzIG9uIGVhY2ggZW5kCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGRlY29yYXRlZCA9ICciJXMiJyAlIHN5cy5leGVjdXRhYmxlCiAgICAgICAgICAgICB0ZXN0ZXIgPSAnIiVzIicgJSB0ZXN0ZXIKICAgICAgICAgZWxzZToKQEAgLTQ3Nyw2ICs0NzgsMjAgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQogCisgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdmUoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcGRpciBzaG91bGQgbm90IGZsYXR0ZW4gaXRzIGNhc2UKKyAgICAgICAgIyBldmVuIG9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbQorICAgICAgICBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgiLVRlbXAiKQorICAgICAgICBfdGVtcGRpciwgdGVtcGZpbGUudGVtcGRpciA9IHRlbXBmaWxlLnRlbXBkaXIsIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICAgICAgIyBGYWtlIHRoZSBmaXJzdCBlbnYgdmFyIHdoaWNoIGlzIGNoZWNrZWQgYXMgYSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICBlbnZbIlRNUERJUiJdID0gY2FzZV9zZW5zaXRpdmVfdGVtcGRpcgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGVtcGZpbGUudGVtcGRpciA9IF90ZW1wZGlyCisgICAgICAgICAgICBzdXBwb3J0LnJtZGlyKGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIpCisKIAogY2xhc3MgVGVzdE1rc3RlbXAoQmFzZVRlc3RDYXNlKToKICAgICAiIiJUZXN0IG1rc3RlbXAoKS4iIiIKQEAgLTU2Niw3ICs1ODEsNyBAQAogICAgICAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGRpcikuc3RfbW9kZSkKICAgICAgICAgICAgIG1vZGUgJj0gMG83NzcgIyBNYXNrIG9mZiBzdGlja3kgYml0cyBpbmhlcml0ZWQgZnJvbSAvdG1wCiAgICAgICAgICAgICBleHBlY3RlZCA9IDBvNzAwCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAgICAgIyByZXBsaWNhdGUgdGhlICd1c2VyJyBiaXRzLgogICAgICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5IGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQppbmRleCBjODZmNWNmLi4xYmJhNzdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKQEAgLTksOSArOSw4IEBACiAjCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLWZyb20gdGV4dHdyYXAgaW1wb3J0IFRleHRXcmFwcGVyLCB3cmFwLCBmaWxsLCBkZWRlbnQsIGluZGVudAorZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudCwgaW5kZW50LCBzaG9ydGVuCiAKIAogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQzMCw2ICs0MjksOTAgQEAKICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDcsIFsiYWEgXHhlNFx4ZTQtIiwgIlx4ZTRceGU0Il0pCiAKIAorY2xhc3MgTWF4TGluZXNUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyAgSSdtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xhZCB0byBoZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXQhIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NikKKworICAgIGRlZiB0ZXN0X3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBzdHJpcCBzcGFjZXMgYmVmb3JlIHBsYWNlaG9sZGVyCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz00KQorICAgICAgICAjIHBsYWNlaG9sZGVyIGF0IHRoZSBzdGFydCBvZiBsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICAjIGZpbmFsIHNwYWNlcworICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0ICsgJyAnICogMTAsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gIEknbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdsYWQgdG8gaGVhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIml0ISJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTYpCisKKyAgICBkZWYgdGVzdF9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScuLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nLi4uJykKKyAgICAgICAgIyBsb25nIHBsYWNlaG9sZGVyIGFuZCBpbmRlbnRhdGlvbgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgd3JhcChzZWxmLnRleHQsIDE2LCBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLCBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHdyYXAoc2VsZi50ZXh0LCAxNiwgc3Vic2VxdWVudF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgICAgSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICBbdHJ1bmNhdGVkXS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgIFt0cnVuY2F0ZWRdLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PScgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBwbGFjZWhvbGRlcj0nLicgKiAxMDAwKQorCisKIGNsYXNzIExvbmdXb3JkVGVzdENhc2UgKEJhc2VUZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLndyYXBwZXIgPSBUZXh0V3JhcHBlcigpCkBAIC00OTAsNiArNTczLDE0IEBACiAgICAgICAgIHJlc3VsdCA9IHdyYXAoc2VsZi50ZXh0LCB3aWR0aD0zMCwgYnJlYWtfbG9uZ193b3Jkcz0wKQogICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQogCisgICAgZGVmIHRlc3RfbWF4X2xpbmVzX2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWydEaWQgeW91IHNheSAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcic3VwZXJjYWxpZnInLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2lsaXN0aWNleHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdbLi4uXSddLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTQpCisKIAogY2xhc3MgSW5kZW50VGVzdENhc2VzKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTc3NywxMiArODY4LDYyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGVudCh0ZXh0LCBwcmVmaXgsIHByZWRpY2F0ZSksIGV4cGVjdCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoV3JhcFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9uZ1dvcmRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudFRlc3RDYXNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZGVudFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50VGVzdENhc2UpCitjbGFzcyBTaG9ydGVuVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja19zaG9ydGVuKHNlbGYsIHRleHQsIHdpZHRoLCBleHBlY3QsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gc2hvcnRlbih0ZXh0LCB3aWR0aCwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgICMgU2ltcGxlIGNhc2U6IGp1c3Qgd29yZHMsIHNwYWNlcywgYW5kIGEgYml0IG9mIHB1bmN0dWF0aW9uCisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/IEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCBbLi4uXSIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCkgLSAxLAorICAgICAgICAgICAgIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAiCisgICAgICAgICAgICAiSSdtIGdsYWQgdG8gWy4uLl0iKQorCisgICAgZGVmIHRlc3RfcGxhY2Vob2xkZXIoc2VsZik6CisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/IEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxNywgIkhlbGxvIHRoZXJlLCQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsIGhvdyQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsICQkIiwgcGxhY2Vob2xkZXI9JyAkJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCksIHRleHQsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCkgLSAxLAorICAgICAgICAgICAgIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAiCisgICAgICAgICAgICAiSSdtIGdsYWQgdG8gaGVhciQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCIiLCA2LCAiIikKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgICMgV2hpdGVzcGFjZSBjb2xsYXBzaW5nCisgICAgICAgIHRleHQgPSAiIiIKKyAgICAgICAgICAgIFRoaXMgaXMgYSAgcGFyYWdyYXBoIHRoYXQgIGFscmVhZHkgaGFzCisgICAgICAgICAgICBsaW5lIGJyZWFrcyBhbmQgXHQgdGFicyB0b28uIiIiCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCA2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcyBsaW5lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyZWFrcyBhbmQgdGFicyB0b28uIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDYxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGFscmVhZHkgaGFzIGxpbmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJlYWtzIGFuZCBbLi4uXSIpCisKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTIsICJoZWxsbyB3b3JsZCEiKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oImhlbGxvICAgICAgd29ybGQhICAiLCAxMSwgImhlbGxvIFsuLi5dIikKKyAgICAgICAgIyBUaGUgbGVhZGluZyBzcGFjZSBpcyB0cmltbWVkIGZyb20gdGhlIHBsYWNlaG9sZGVyCisgICAgICAgICMgKGl0IHdvdWxkIGJlIHVnbHkgb3RoZXJ3aXNlKS4KKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTAsICJbLi4uXSIpCisKKyAgICBkZWYgdGVzdF93aWR0aF90b29fc21hbGxfZm9yX3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICBzaG9ydGVuKCJ4IiAqIDIwLCB3aWR0aD04LCBwbGFjZWhvbGRlcj0iKC4uLi4uLikiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2hvcnRlbigieCIgKiAyMCwgd2lkdGg9OCwgcGxhY2Vob2xkZXI9IiguLi4uLi4uKSIpCisKKyAgICBkZWYgdGVzdF9maXJzdF93b3JkX3Rvb19sb25nX2J1dF9wbGFjZWhvbGRlcl9maXRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oIkhlbGxvbyIsIDUsICJbLi4uXSIpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQppbmRleCBhMTkxZTE1Li5mOWE3MjFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIDAsICJzdGFja19zaXplIG5vdCByZXNldCB0byBkZWZhdWx0IikKIAotICAgICAgICBpZiBvcy5uYW1lIG5vdCBpbiAoIm50IiwgIm9zMiIsICJwb3NpeCIpOgorICAgICAgICBpZiBvcy5uYW1lIG5vdCBpbiAoIm50IiwgInBvc2l4Iik6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICB0c3Nfc3VwcG9ydGVkID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQppbmRleCA2YzI5NjViLi4zZDk2MWI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQpAQCAtNSw4ICs1LDggQEAKICMgY29tcGxhaW5zIHNldmVyYWwgdGltZXMgYWJvdXQgbW9kdWxlIHJhbmRvbSBoYXZpbmcgbm8gYXR0cmlidXRlCiAjIHJhbmRyYW5nZSwgYW5kIHRoZW4gUHl0aG9uIGhhbmdzLgogCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKaW5kZXggMGViZWIzOS4uYTg0NTc3YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTExLDYgKzExLDcgQEAKIGltcG9ydCBzeXMKIF90aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCdfdGhyZWFkJykKIHRocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCitpbXBvcnQgX3Rlc3RjYXBpCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgpAQCAtMjAsNiArMjEsMTUgQEAKIAogZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKKworIyBCZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLCBvbmx5IGFzeW5jLXNhZmUgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIChpc3N1ZXMKKyMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKKyMgcHJvYmxlbXMgd2l0aCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChpc3N1ZSAjMzg2Myk6IHNraXAgcHJvYmxlbWF0aWMgdGVzdHMKKyMgb24gcGxhdGZvcm1zIGtub3duIHRvIGJlaGF2ZSBiYWRseS4KK3BsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKKyAgICAgICAgICAgICAgICAgICAgICdocC11eDExJykKKworCiAjIEEgdHJpdmlhbCBtdXRhYmxlIGNvdW50ZXIuCiBjbGFzcyBDb3VudGVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtOTksNyArMTA5LDcgQEAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCd3YWl0aW5nIGZvciBhbGwgdGFza3MgdG8gY29tcGxldGUnKQogICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdC5qb2luKE5VTVRBU0tTKQorICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdC5pc19hbGl2ZSgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0LmlkZW50LCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlkZW50IGlzIE5vbmUpCkBAIC00NjcsNiArNDc3LDEyNyBAQAogICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCiAKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZChzZWxmKToKKyAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5uYW1lLCAnTWFpblRocmVhZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5pZGVudCwgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5pZGVudCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZGluZy5tYWluX3RocmVhZCgpLmlkZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0aC5zdGFydCgpCisgICAgICAgIHRoLmpvaW4oKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgInRlc3QgbmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnd2FpdHBpZCcpLCAidGVzdCBuZWVkcyBvcy53YWl0cGlkKCkiKQorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkX2FmdGVyX2Zvcmsoc2VsZik6CisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zLCB0aHJlYWRpbmcKKworICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICBtYWluID0gdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLm5hbWUpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICIiIgorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJNYWluVGhyZWFkXG5UcnVlXG5UcnVlXG4iKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAidGVzdCBuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICd3YWl0cGlkJyksICJ0ZXN0IG5lZWRzIG9zLndhaXRwaWQoKSIpCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWRfYWZ0ZXJfZm9ya19mcm9tX25vbm1haW5fdGhyZWFkKHNlbGYpOgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGhyZWFkaW5nLCBzeXMKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgICAgICAgICAgICAgICMgc3Rkb3V0IGlzIGZ1bGx5IGJ1ZmZlcmVkIGJlY2F1c2Ugbm90IGEgdHR5LAorICAgICAgICAgICAgICAgICAgICAjIHdlIGhhdmUgdG8gZmx1c2ggYmVmb3JlIGV4aXQuCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorCisgICAgICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgICAgICB0aC5zdGFydCgpCisgICAgICAgICAgICB0aC5qb2luKCkKKyAgICAgICAgIiIiCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICBkYXRhID0gb3V0LmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIlRocmVhZC0xXG5UcnVlXG5UcnVlXG4iKQorCisgICAgZGVmIHRlc3RfdHN0YXRlX2xvY2soc2VsZik6CisgICAgICAgICMgVGVzdCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgVGhyZWFkIG9iamVjdHMuCisgICAgICAgIHN0YXJ0ZWQgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBmaW5pc2ggPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzdGFydGVkLnJlbGVhc2UoKQorICAgICAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAjIFRoZSB0c3RhdGUgbG9jayBpcyBOb25lIHVudGlsIHRoZSB0aHJlYWQgaXMgc3RhcnRlZAorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll90c3RhdGVfbG9jaywgTm9uZSkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgVGhlIHRzdGF0ZSBsb2NrIGNhbid0IGJlIGFjcXVpcmVkIHdoZW4gdGhlIHRocmVhZCBpcyBydW5uaW5nCisgICAgICAgICMgKG9yIHN1c3BlbmRlZCkuCisgICAgICAgIHRzdGF0ZV9sb2NrID0gdC5fdHN0YXRlX2xvY2sKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0c3RhdGVfbG9jay5hY3F1aXJlKHRpbWVvdXQ9MCksIEZhbHNlKQorICAgICAgICBmaW5pc2gucmVsZWFzZSgpCisgICAgICAgICMgV2hlbiB0aGUgdGhyZWFkIGVuZHMsIHRoZSBzdGF0ZV9sb2NrIGNhbiBiZSBzdWNjZXNzZnVsbHkKKyAgICAgICAgIyBhY3F1aXJlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRzdGF0ZV9sb2NrLmFjcXVpcmUodGltZW91dD01KSwgRmFsc2UpCisgICAgICAgICMgQnV0IGlzX2FsaXZlKCkgaXMgc3RpbGwgVHJ1ZTogIHdlIGhvbGQgX3RzdGF0ZV9sb2NrIG5vdywgd2hpY2gKKyAgICAgICAgIyBwcmV2ZW50cyBpc19hbGl2ZSgpIGZyb20ga25vd2luZyB0aGUgdGhyZWFkJ3MgZW5kLW9mLWxpZmUgQyBjb2RlCisgICAgICAgICMgaXMgZG9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBMZXQgaXNfYWxpdmUoKSBmaW5kIG91dCB0aGUgQyBjb2RlIGlzIGRvbmUuCisgICAgICAgIHRzdGF0ZV9sb2NrLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBBbmQgdmVyaWZ5IHRoZSB0aHJlYWQgZGlzcG9zZWQgb2YgX3RzdGF0ZV9sb2NrLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5fdHN0YXRlX2xvY2sgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHJfc3RvcHBlZChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCAic3RvcHBlZCIgc2hvd3MgdXAgaW4gcmVwcihUaHJlYWQpIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIHN0YXJ0ZWQgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBmaW5pc2ggPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzdGFydGVkLnJlbGVhc2UoKQorICAgICAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0YXJ0ZWQiLCByZXByKHQpKQorICAgICAgICBmaW5pc2gucmVsZWFzZSgpCisgICAgICAgICMgInN0b3BwZWQiIHNob3VsZCBhcHBlYXIgaW4gdGhlIHJlcHIgaW4gYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLgorICAgICAgICAjIEltcGxlbWVudGF0aW9uIGRldGFpbDogIGFzIG9mIHRoaXMgd3JpdGluZywgdGhhdCdzIHRyaXZpYWxseSB0cnVlCisgICAgICAgICMgaWYgLmpvaW4oKSBpcyBjYWxsZWQsIGFuZCBhbG1vc3QgdHJpdmlhbGx5IHRydWUgaWYgLmlzX2FsaXZlKCkgaXMKKyAgICAgICAgIyBjYWxsZWQuICBUaGUgZGV0YWlsIHdlJ3JlIHRlc3RpbmcgaGVyZSBpcyB0aGF0ICJzdG9wcGVkIiBzaG93cyB1cAorICAgICAgICAjICJhbGwgb24gaXRzIG93biIuCisgICAgICAgIExPT0tJTkdfRk9SID0gInN0b3BwZWQiCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUwMCk6CisgICAgICAgICAgICBpZiBMT09LSU5HX0ZPUiBpbiByZXByKHQpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oTE9PS0lOR19GT1IsIHJlcHIodCkpICMgd2Ugd2FpdGVkIGF0IGxlYXN0IDUgc2Vjb25kcwogCiAgICAgZGVmIHRlc3RfQm91bmRlZFNlbWFwaG9yZV9saW1pdChzZWxmKToKICAgICAgICAgIyBCb3VuZGVkU2VtYXBob3JlIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yIGlmIHJlbGVhc2VkIHRvbyBvZnRlbi4KQEAgLTQ4NiwxNCArNjE3LDUzIEBACiAgICAgICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJzLnJlbGVhc2UpCiAKLWNsYXNzIFRocmVhZEpvaW5PblNodXRkb3duKEJhc2VUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbG9jYWxzX2F0X2V4aXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDY2OiB0aHJlYWQgbG9jYWxzIG11c3Qgbm90IGJlIGRlbGV0ZWQgYmVmb3JlIGRlc3RydWN0b3JzCisgICAgICAgICMgYXJlIGNhbGxlZAorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCiAKLSAgICAjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcwotICAgICMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKLSAgICAjIHByb2JsZW1zIHdpdGggc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoaXNzdWUgIzM4NjMpOiBza2lwIHByb2JsZW1hdGljIHRlc3RzCi0gICAgIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgotICAgIHBsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnb3MyZW14JywgJ2hwLXV4MTEnKQorICAgICAgICAgICAgY2xhc3MgQXRleGl0OgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgidGhyZWFkX2RpY3QuYXRleGl0ID0gJXIiICUgdGhyZWFkX2RpY3QuYXRleGl0KQorCisgICAgICAgICAgICB0aHJlYWRfZGljdCA9IHRocmVhZGluZy5sb2NhbCgpCisgICAgICAgICAgICB0aHJlYWRfZGljdC5hdGV4aXQgPSAiYXRleGl0IgorCisgICAgICAgICAgICBhdGV4aXQgPSBBdGV4aXQoKQorICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCBiInRocmVhZF9kaWN0LmF0ZXhpdCA9ICdhdGV4aXQnIikKKworICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2F0X2V4aXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDY2OiB0cnkgdG8gY2FsbCBtb3N0IGRlc3RydWN0b3JzIGF0IFB5dGhvbiBzaHV0ZG93biBiZWZvcmUKKyAgICAgICAgIyBkZXN0cm95aW5nIFB5dGhvbiB0aHJlYWQgc3RhdGVzCisgICAgICAgIGZpbGVuYW1lID0gX19maWxlX18KKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVdkIiwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIGRlZiBvcGVuX3NsZWVwKCk6CisgICAgICAgICAgICAgICAgIyBhIHdhcm5pbmcgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIG9wZW4gZmlsZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgIyBkZXN0cm95ZWQgKHdpdGhvdXQgYmVpbmcgZXhwbGljaXRseSBjbG9zZWQpIHdoaWxlIHRoZSBkYWVtb24KKyAgICAgICAgICAgICAgICAjIHRocmVhZCBpcyBkZXN0cm95ZWQKKyAgICAgICAgICAgICAgICBmaWxlb2JqID0gb3BlbiglYSwgJ3JiJykKKyAgICAgICAgICAgICAgICBzdGFydF9ldmVudC5zZXQoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNjAuMCkKKworICAgICAgICAgICAgc3RhcnRfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1vcGVuX3NsZWVwKQorICAgICAgICAgICAgdGhyZWFkLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCisKKyAgICAgICAgICAgICMgd2FpdCB1bnRpbCB0aGUgdGhyZWFkIHN0YXJ0ZWQKKyAgICAgICAgICAgIHN0YXJ0X2V2ZW50LndhaXQoKQorICAgICAgICAiIiIgJSBmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIucnN0cmlwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgYiJec3lzOjE6IFJlc291cmNlV2FybmluZzogdW5jbG9zZWQgZmlsZSAiKQorCisKK2NsYXNzIFRocmVhZEpvaW5PblNodXRkb3duKEJhc2VUZXN0Q2FzZSk6CiAKICAgICBkZWYgX3J1bl9hbmRfam9pbihzZWxmLCBzY3JpcHQpOgogICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgpAQCAtNTY2LDE0NCArNzM2LDggQEAKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9ydW5fYW5kX2pvaW4oc2NyaXB0KQogCi0gICAgZGVmIGFzc2VydFNjcmlwdEhhc091dHB1dChzZWxmLCBzY3JpcHQsIGV4cGVjdGVkX291dHB1dCk6Ci0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgc2NyaXB0KQotICAgICAgICBkYXRhID0gb3V0LmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfb3V0cHV0KQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF80X2pvaW5pbmdfYWNyb3NzX2ZvcmtfaW5fd29ya2VyX3RocmVhZChzZWxmKToKLSAgICAgICAgIyBUaGVyZSB1c2VkIHRvIGJlIGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiBmb3JraW5nIGZyb20gYSBjaGlsZAotICAgICAgICAjIHRocmVhZC4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjY0My4KLQotICAgICAgICAjIFRoZSBzY3JpcHQgdGFrZXMgdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAgICAgIyAtIFRoZSBtYWluIHRocmVhZCBpbiB0aGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgbmV3IHRocmVhZCBhbmQgdGhlbgotICAgICAgICAjICAgdHJpZXMgdG8gam9pbiBpdC4KLSAgICAgICAgIyAtIFRoZSBqb2luIG9wZXJhdGlvbiBhY3F1aXJlcyB0aGUgTG9jayBpbnNpZGUgdGhlIHRocmVhZCdzIF9ibG9jawotICAgICAgICAjICAgQ29uZGl0aW9uLiAgKFNlZSB0aHJlYWRpbmcucHk6VGhyZWFkLmpvaW4oKS4pCi0gICAgICAgICMgLSBXZSBzdHViIG91dCB0aGUgYWNxdWlyZSBtZXRob2Qgb24gdGhlIGNvbmRpdGlvbiB0byBmb3JjZSBpdCB0byB3YWl0Ci0gICAgICAgICMgICB1bnRpbCB0aGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEFDUVVJUkVEIEhFUkUpCi0gICAgICAgICMgLSBUaGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEhFTEQgYW5kIFdPUktFUiBUSFJFQUQgRk9SS1MKLSAgICAgICAgIyAgIEhFUkUpCi0gICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIGVudGVycyBDb25kaXRpb24ud2FpdCgpLAotICAgICAgICAjICAgd2hpY2ggcmVsZWFzZXMgdGhlIGxvY2sgb24gdGhlIGNoaWxkIHRocmVhZC4KLSAgICAgICAgIyAtIFRoZSBjaGlsZCBwcm9jZXNzIHJldHVybnMuICBXaXRob3V0IHRoZSBuZWNlc3NhcnkgZml4LCB3aGVuIHRoZQotICAgICAgICAjICAgbWFpbiB0aHJlYWQgb2YgdGhlIGNoaWxkIHByb2Nlc3MgKHdoaWNoIHVzZWQgdG8gYmUgdGhlIGNoaWxkIHRocmVhZAotICAgICAgICAjICAgaW4gdGhlIHBhcmVudCBwcm9jZXNzKSBhdHRlbXB0cyB0byBleGl0LCBpdCB3aWxsIHRyeSB0byBhY3F1aXJlIHRoZQotICAgICAgICAjICAgbG9jayBpbiB0aGUgVGhyZWFkLl9ibG9jayBDb25kaXRpb24gb2JqZWN0IGFuZCBoYW5nLCBiZWNhdXNlIHRoZQotICAgICAgICAjICAgbG9jayB3YXMgaGVsZCBhY3Jvc3MgdGhlIGZvcmsuCi0KLSAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKLSAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCi0KLSAgICAgICAgICAgIGZpbmlzaF9qb2luID0gRmFsc2UKLSAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQotCi0gICAgICAgICAgICBkZWYgd29ya2VyKCk6Ci0gICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoaXMgdGhyZWFkJ3MgbG9jayBpcyBhY3F1aXJlZCBiZWZvcmUgZm9ya2luZyB0bwotICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBkZWFkbG9jay4KLSAgICAgICAgICAgICAgICBnbG9iYWwgZmluaXNoX2pvaW4KLSAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgICAgICMgTE9DSyBIRUxEOiBNYWluIHRocmVhZCBob2xkcyBsb2NrIGFjcm9zcyB0aGlzIGNhbGwuCi0gICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgICAgICBmaW5pc2hfam9pbiA9IFRydWUKLSAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgotICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQotICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCi0KLSAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCi0KLSAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgbG9jayBhY3F1aXJlIG1ldGhvZC4KLSAgICAgICAgICAgICMgVGhpcyBhY3F1aXJlcyB0aGUgbG9jayBhbmQgdGhlbiB3YWl0cyB1bnRpbCB0aGUgY2hpbGQgaGFzIGZvcmtlZAotICAgICAgICAgICAgIyBiZWZvcmUgcmV0dXJuaW5nLCB3aGljaCB3aWxsIHJlbGVhc2UgdGhlIGxvY2sgc29vbiBhZnRlci4gIElmCi0gICAgICAgICAgICAjIHNvbWVvbmUgZWxzZSB0cmllcyB0byBmaXggdGhpcyB0ZXN0IGNhc2UgYnkgYWNxdWlyaW5nIHRoaXMgbG9jawotICAgICAgICAgICAgIyBiZWZvcmUgZm9ya2luZyBpbnN0ZWFkIG9mIHJlc2V0dGluZyBpdCwgdGhlIHRlc3QgY2FzZSB3aWxsCi0gICAgICAgICAgICAjIGRlYWRsb2NrIHdoZW4gaXQgc2hvdWxkbid0LgotICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKLSAgICAgICAgICAgIG9yaWdfYWNxdWlyZSA9IGNvbmRpdGlvbi5hY3F1aXJlCi0gICAgICAgICAgICBjYWxsX2NvdW50X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgICAgICBjYWxsX2NvdW50ID0gMAotICAgICAgICAgICAgZGVmIG15X2FjcXVpcmUoKToKLSAgICAgICAgICAgICAgICBnbG9iYWwgY2FsbF9jb3VudAotICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCi0gICAgICAgICAgICAgICAgb3JpZ19hY3F1aXJlKCkgICMgTE9DSyBBQ1FVSVJFRCBIRVJFCi0gICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKLSAgICAgICAgICAgICAgICBpZiBjYWxsX2NvdW50ID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBmaW5pc2hfam9pbjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgICMgV09SS0VSIFRIUkVBRCBGT1JLUyBIRVJFCi0gICAgICAgICAgICAgICAgd2l0aCBjYWxsX2NvdW50X2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxfY291bnQgKz0gMQotICAgICAgICAgICAgY29uZGl0aW9uLmFjcXVpcmUgPSBteV9hY3F1aXJlCi0KLSAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgdy5qb2luKCkKLSAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbicpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCAiZW5kIG9mIG1haW5cbiIpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQotICAgIGRlZiB0ZXN0XzVfY2xlYXJfd2FpdGVyX2xvY2tzX3RvX2F2b2lkX2NyYXNoKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYSBzcGF3bmVkIHRocmVhZCB0aGF0IGZvcmtzIGRvZXNuJ3Qgc2VnZmF1bHQgb24gY2VydGFpbgotICAgICAgICAjIHBsYXRmb3JtcywgbmFtZWx5IE9TIFguICBUaGlzIHVzZWQgdG8gaGFwcGVuIGlmIHRoZXJlIHdhcyBhIHdhaXRlcgotICAgICAgICAjIGxvY2sgaW4gdGhlIHRocmVhZCdzIGNvbmRpdGlvbiB2YXJpYWJsZSdzIHdhaXRlcnMgbGlzdC4gIEV2ZW4gdGhvdWdoCi0gICAgICAgICMgd2Uga25vdyB0aGUgbG9jayB3aWxsIGJlIGhlbGQgYWNyb3NzIHRoZSBmb3JrLCBpdCBpcyBub3Qgc2FmZSB0bwotICAgICAgICAjIHJlbGVhc2UgbG9ja3MgaGVsZCBhY3Jvc3MgZm9ya3Mgb24gYWxsIHBsYXRmb3Jtcywgc28gcmVsZWFzaW5nIHRoZQotICAgICAgICAjIHdhaXRlciBsb2NrIGNhdXNlZCBhIHNlZ2ZhdWx0IG9uIE9TIFguICBGdXJ0aGVybW9yZSwgc2luY2UgbG9ja3Mgb24KLSAgICAgICAgIyBPUyBYIGFyZSAoYXMgb2YgdGhpcyB3cml0aW5nKSBpbXBsZW1lbnRlZCB3aXRoIGEgbXV0ZXggKyBjb25kaXRpb24KLSAgICAgICAgIyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgc2VtYXBob3JlLCB3aGlsZSB3ZSBrbm93IHRoYXQgdGhlIFB5dGhvbi1sZXZlbAotICAgICAgICAjIGxvY2sgd2lsbCBiZSBhY3F1aXJlZCwgd2UgY2FuJ3Qga25vdyBpZiB0aGUgaW50ZXJuYWwgbXV0ZXggd2lsbCBiZQotICAgICAgICAjIGFjcXVpcmVkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLgotCi0gICAgICAgIHNjcmlwdCA9ICIiImlmIFRydWU6Ci0gICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZwotCi0gICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKLQotICAgICAgICAgICAgZGVmIHdvcmtlcigpOgotICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaGFzIGF0dGVtcHRlZCB0byBqb2luIHRoaXMgdGhyZWFkCi0gICAgICAgICAgICAgICAgIyBiZWZvcmUgY29udGludWluZy4KLSAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgKGNwaWQsIHJjKSA9IG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBjcGlkID09IGNoaWxkcGlkCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydCByYyA9PSAwCi0gICAgICAgICAgICAgICAgICAgIHByaW50KCdlbmQgb2Ygd29ya2VyIHRocmVhZCcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQotCi0gICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIF9yZWxlYXNlX3NhdmUgbWV0aG9kLgotICAgICAgICAgICAgIyBUaGlzIHJlbGVhc2VzIHRoZSBjb25kaXRpb24ncyBsb2NrIGFuZCBmbGlwcyB0aGUgZ2xvYmFsIHRoYXQKLSAgICAgICAgICAgICMgY2F1c2VzIHRoZSB3b3JrZXIgdG8gZm9yay4gIEF0IHRoaXMgcG9pbnQsIHRoZSBwcm9ibGVtYXRpYyB3YWl0ZXIKLSAgICAgICAgICAgICMgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBvbmNlIGJ5IHRoZSB3YWl0ZXIgYW5kIGhhcyBiZWVuIHB1dCBvbnRvCi0gICAgICAgICAgICAjIHRoZSB3YWl0ZXJzIGxpc3QuCi0gICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jawotICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUgPSBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZQotICAgICAgICAgICAgZGVmIG15X3JlbGVhc2Vfc2F2ZSgpOgotICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCi0gICAgICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUoKQotICAgICAgICAgICAgICAgICMgV2FpdGVyIGxvY2sgaGVsZCBoZXJlLCBjb25kaXRpb24gbG9jayByZWxlYXNlZC4KLSAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQotICAgICAgICAgICAgY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUgPSBteV9yZWxlYXNlX3NhdmUKLQotICAgICAgICAgICAgdy5zdGFydCgpCi0gICAgICAgICAgICB3LmpvaW4oKQotICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluIHRocmVhZCcpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgb3V0cHV0ID0gImVuZCBvZiB3b3JrZXIgdGhyZWFkXG5lbmQgb2YgbWFpbiB0aHJlYWRcbiIKLSAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCBvdXRwdXQpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQotICAgIGRlZiB0ZXN0XzZfZGFlbW9uX3RocmVhZHMoc2VsZik6CisgICAgZGVmIHRlc3RfNF9kYWVtb25fdGhyZWFkcyhzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IGEgZGFlbW9uIHRocmVhZCBjYW5ub3QgY3Jhc2ggdGhlIGludGVycHJldGVyIG9uIHNodXRkb3duCiAgICAgICAgICMgYnkgbWFuaXB1bGF0aW5nIGludGVybmFsIHN0cnVjdHVyZXMgdGhhdCBhcmUgYmVpbmcgZGlzcG9zZWQgb2YgaW4KICAgICAgICAgIyB0aGUgbWFpbiB0aHJlYWQuCkBAIC03MTMsNiArNzQ3LDEwIEBACiAgICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBpbXBvcnQgdGltZQogICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisKKyAgICAgICAgICAgICMgaWdub3JlICJ1bmNsb3NlZCBmaWxlIC4uLiIgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAnJywgUmVzb3VyY2VXYXJuaW5nKQogCiAgICAgICAgICAgICB0aHJlYWRfaGFzX3J1biA9IHNldCgpCiAKQEAgLTc2OSw2ICs4MDcsMTExIEBACiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgZGVmIHRlc3RfY2xlYXJfdGhyZWFkc19zdGF0ZXNfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcwOTQ6IGNoZWNrIHRoYXQgdGhyZWFkcyBzdGF0ZXMgYXJlIGNsZWFyZWQgYWZ0ZXIgZm9yaygpCisKKyAgICAgICAgIyBzdGFydCBhIGJ1bmNoIG9mIHRocmVhZHMKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDE2KToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGEgOiB0aW1lLnNsZWVwKDAuMykpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRocmVhZHMgc3RhdGVzIGhhdmUgYmVlbiBjbGVhcmVkCisgICAgICAgICAgICBpZiBsZW4oc3lzLl9jdXJyZW50X2ZyYW1lcygpKSA9PSAxOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2NsYXNzIFN1YmludGVycFRocmVhZGluZ1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aHJlYWRzX2pvaW4oc2VsZik6CisgICAgICAgICMgTm9uLWRhZW1vbiB0aHJlYWRzIHNob3VsZCBiZSBqb2luZWQgYXQgc3ViaW50ZXJwcmV0ZXIgc2h1dGRvd24KKyAgICAgICAgIyAoaXNzdWUgIzE4ODA4KQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgICAgIG9zLndyaXRlKCVkLCBiIngiKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Zikuc3RhcnQoKQorICAgICAgICAgICAgIiIiICUgKHcsKQorICAgICAgICByZXQgPSB0ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgIyBUaGUgdGhyZWFkIHdhcyBqb2luZWQgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChyLCAxKSwgYiJ4IikKKworICAgIGRlZiB0ZXN0X3RocmVhZHNfam9pbl8yKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIGRlbGF5IGdldHMgaW50cm9kdWNlZCBhZnRlciB0aGUgdGhyZWFkJ3MKKyAgICAgICAgIyBQeXRob24gY29kZSByZXR1cm5lZCBidXQgYmVmb3JlIHRoZSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZC4KKyAgICAgICAgIyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJlZ2lzdGVyIGEgdGhyZWFkLWxvY2FsIG9iamVjdCB3aGljaCBzbGVlcHMKKyAgICAgICAgIyBhIGJpdCB3aGVuIGRlYWxsb2NhdGVkLgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGNsYXNzIFNsZWVwZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKworICAgICAgICAgICAgdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICAgICAgdGxzLnggPSBTbGVlcGVyKCkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSglZCwgYiJ4IikKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIiAlICh3LCkKKyAgICAgICAgcmV0ID0gdGVzdC5zdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgICMgVGhlIHRocmVhZCB3YXMgam9pbmVkIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQociwgMSksIGIieCIpCisKKyAgICBkZWYgdGVzdF9kYWVtb25fdGhyZWFkc19mYXRhbF9lcnJvcihzZWxmKToKKyAgICAgICAgc3ViaW50ZXJwX2NvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGFlbW9uIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZiwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKworICAgICAgICAgICAgX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoJXIpCisgICAgICAgICAgICAiIiIgJSAoc3ViaW50ZXJwX2NvZGUsKQorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoIi1jIiwgc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJGYXRhbCBQeXRob24gZXJyb3I6IFB5X0VuZEludGVycHJldGVyOiAiCisgICAgICAgICAgICAgICAgICAgICAgIm5vdCB0aGUgbGFzdCB0aHJlYWQiLCBlcnIuZGVjb2RlKCkpCisKIAogY2xhc3MgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKICAgICAjIEEgUnVudGltZUVycm9yIHNob3VsZCBiZSByYWlzZWQgaWYgVGhyZWFkLnN0YXJ0KCkgaXMgY2FsbGVkCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKaW5kZXggZjk3NWE3NS4uYjEwMDRlNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQpAQCAtOCw3ICs4LDcgQEAKIHRocmVhZCA9IGltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogaW1wb3J0IHRpbWUKIAotaWYgc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInKSBvciBzeXMucGxhdGZvcm09PSdyaXNjb3MnOgoraWYgKHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicpOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCiAKIHByb2Nlc3NfcGlkID0gb3MuZ2V0cGlkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCBkOGQ2MDI5Li40NGJjYjk0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0zNzEsNiArMzcxLDE0IEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cih0aW1lLCAnbW9ub3RvbmljJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgdGltZS5tb25vdG9uaWMnKQogICAgIGRlZiB0ZXN0X21vbm90b25pYyhzZWxmKToKKyAgICAgICAgIyBtb25vdG9uaWMoKSBzaG91bGQgbm90IGdvIGJhY2t3YXJkCisgICAgICAgIHRpbWVzID0gW3RpbWUubW9ub3RvbmljKCkgZm9yIG4gaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgdDEgPSB0aW1lc1swXQorICAgICAgICBmb3IgdDIgaW4gdGltZXNbMTpdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodDIsIHQxLCAidGltZXM9JXMiICUgdGltZXMpCisgICAgICAgICAgICB0MSA9IHQyCisKKyAgICAgICAgIyBtb25vdG9uaWMoKSBpbmNsdWRlcyB0aW1lIGVsYXBzZWQgZHVyaW5nIGEgc2xlZXAKICAgICAgICAgdDEgPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIHRpbWUuc2xlZXAoMC41KQogICAgICAgICB0MiA9IHRpbWUubW9ub3RvbmljKCkKQEAgLTM3OCw2ICszODYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIodDIsIHQxKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGR0LCAwLjUsIGRlbHRhPTAuMikKIAorICAgICAgICAjIG1vbm90b25pYygpIGlzIGEgbW9ub3RvbmljIGJ1dCBub24gYWRqdXN0YWJsZSBjbG9jawogICAgICAgICBpbmZvID0gdGltZS5nZXRfY2xvY2tfaW5mbygnbW9ub3RvbmljJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluZm8ubW9ub3RvbmljKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uYWRqdXN0YWJsZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCBkY2YyMDFiLi43MDNjNDNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgIHNvY2suY29ubmVjdCgod2hpdGVob2xlKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQ6CiAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CmluZGV4IDViY2UyYWYuLjk2ZWY5NTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CkBAIC0xNTAsMzAgKzE1MCw3NCBAQAogCiBjbGFzcyBUcmFjZWJhY2tGb3JtYXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgIGRlZiBzb21lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorCisgICAgZGVmIGNoZWNrX3RyYWNlYmFja19mb3JtYXQoc2VsZiwgY2xlYW51cF9mdW5jPU5vbmUpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcignYmxhaCcpCisgICAgICAgICAgICBzZWxmLnNvbWVfZXhjZXB0aW9uKCkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgdHlwZV8sIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBjbGVhbnVwX2Z1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBDbGVhciB0aGUgaW5uZXIgZnJhbWVzLCBub3QgdGhpcyBvbmUKKyAgICAgICAgICAgICAgICBjbGVhbnVwX2Z1bmModGIudGJfbmV4dCkKICAgICAgICAgICAgIHRyYWNlYmFja19mbXQgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJyArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfdGIodGIpKQogICAgICAgICAgICAgZmlsZV8gPSBTdHJpbmdJTygpCiAgICAgICAgICAgICB0cmFjZWJhY2tfcHJpbnQodGIsIGZpbGVfKQogICAgICAgICAgICAgcHl0aG9uX2ZtdCAgPSBmaWxlXy5nZXR2YWx1ZSgpCisgICAgICAgICAgICAjIENhbGwgYWxsIF90YiBhbmQgX2V4YyBmdW5jdGlvbnMKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyB0YnN0ZGVycjoKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfdGIodGIpCisgICAgICAgICAgICB0YmZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfdGIodGIsIGZpbGU9dGJmaWxlKQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGV4Y3N0ZGVycjoKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgIGV4Y2ZtdCA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgIGV4Y2ZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9ZXhjZmlsZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlc3QgdHJhY2ViYWNrIHN0cmluZyIpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBQeXRob24gYW5kIHRoZSB0cmFjZWJhY2sgbW9kdWxlIGZvcm1hdCB0aGUgc2FtZSB0aGluZwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja19mbXQsIHB5dGhvbl9mbXQpCisgICAgICAgICMgTm93IHZlcmlmeSB0aGUgX3RiIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGJzdGRlcnIuZ2V0dmFsdWUoKSwgdGJmaWxlLmdldHZhbHVlKCkpCisgICAgICAgICMgTm93IHZlcmlmeSB0aGUgX2V4YyBmdW5jIG91dHB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y3N0ZGVyci5nZXR2YWx1ZSgpLCBleGNmaWxlLmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjZm10LCBleGNmaWxlLmdldHZhbHVlKCkpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgdHJhY2ViYWNrIGlzIHByb3Blcmx5IGluZGVudGVkLgogICAgICAgICB0Yl9saW5lcyA9IHB5dGhvbl9mbXQuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgMykKLSAgICAgICAgYmFubmVyLCBsb2NhdGlvbiwgc291cmNlX2xpbmUgPSB0Yl9saW5lcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0Yl9saW5lcyksIDUpCisgICAgICAgIGJhbm5lciA9IHRiX2xpbmVzWzBdCisgICAgICAgIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzWy0yOl0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhbm5lci5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2F0aW9uLnN0YXJ0c3dpdGgoJyAgRmlsZScpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cmNlX2xpbmUuc3RhcnRzd2l0aCgnICAgIHJhaXNlJykpCiAKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoKQorCisgICAgZGVmIHRlc3RfdHJhY2ViYWNrX2Zvcm1hdF93aXRoX2NsZWFyZWRfZnJhbWVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdHJhY2ViYWNrIGZvcm1hdHRpbmcgYWxzbyB3b3JrcyB3aXRoIGEgY2xlYXIoKWVkIGZyYW1lCisgICAgICAgIGRlZiBjbGVhbnVwX3RiKHRiKToKKyAgICAgICAgICAgIHRiLnRiX2ZyYW1lLmNsZWFyKCkKKyAgICAgICAgc2VsZi5jaGVja190cmFjZWJhY2tfZm9ybWF0KGNsZWFudXBfdGIpCisKKyAgICBkZWYgdGVzdF9zdGFja19mb3JtYXQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IF9zdGFjayBmdW5jdGlvbnMuIE5vdGUgd2UgaGF2ZSB0byB1c2UgX2dldGZyYW1lKDEpIHRvCisgICAgICAgICMgY29tcGFyZSB0aGVtIHdpdGhvdXQgdGhpcyBmcmFtZSBhcHBlYXJpbmcgaW4gdGhlIG91dHB1dAorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgc3RzdGRlcnI6CisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKyAgICAgICAgc3RmaWxlID0gU3RyaW5nSU8oKQorICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSwgZmlsZT1zdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RzdGRlcnIuZ2V0dmFsdWUoKSwgc3RmaWxlLmdldHZhbHVlKCkpCisKKyAgICAgICAgc3RmbXQgPSB0cmFjZWJhY2suZm9ybWF0X3N0YWNrKHN5cy5fZ2V0ZnJhbWUoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCAiIi5qb2luKHN0Zm10KSkKKwogCiBjYXVzZV9tZXNzYWdlID0gKAogICAgICJcblRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2UgIgpAQCAtMzQ0LDYgKzM4OCwzNiBAQAogICAgICAgICByZXR1cm4gcy5nZXR2YWx1ZSgpCiAKIAorY2xhc3MgTWlzY1RyYWNlYmFja0Nhc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjCisgICAgIyBDaGVjayBub24tcHJpbnRpbmcgZnVuY3Rpb25zIGluIHRyYWNlYmFjayBtb2R1bGUKKyAgICAjCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBtaWRkbGUoKQorICAgICAgICBkZWYgbWlkZGxlKCk6CisgICAgICAgICAgICBpbm5lcigpCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgaSA9IDEKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dGVyKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHlwZV8sIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgIyBJbml0aWFsIGFzc2VydGlvbjogdGhlcmUncyBvbmUgbG9jYWwgaW4gdGhlIGlubmVyIGZyYW1lLgorICAgICAgICBpbm5lcl9mcmFtZSA9IHRiLnRiX25leHQudGJfbmV4dC50Yl9uZXh0LnRiX2ZyYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGlubmVyX2ZyYW1lLmZfbG9jYWxzKSwgMSkKKworICAgICAgICAjIENsZWFyIHRyYWNlYmFjayBmcmFtZXMKKyAgICAgICAgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lcyh0YikKKworICAgICAgICAjIExvY2FsIHZhcmlhYmxlIGRpY3Qgc2hvdWxkIG5vdyBiZSBlbXB0eS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5uZXJfZnJhbWUuZl9sb2NhbHMpLCAwKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzUyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5CkBAIC0wLDAgKzEsNzkyIEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2VtYWxsb2MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworRU1QVFlfU1RSSU5HX1NJWkUgPSBzeXMuZ2V0c2l6ZW9mKGInJykKKworZGVmIGdldF9mcmFtZXMobmZyYW1lLCBsaW5lbm9fZGVsdGEpOgorICAgIGZyYW1lcyA9IFtdCisgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpCisgICAgZm9yIGluZGV4IGluIHJhbmdlKG5mcmFtZSk6CisgICAgICAgIGNvZGUgPSBmcmFtZS5mX2NvZGUKKyAgICAgICAgbGluZW5vID0gZnJhbWUuZl9saW5lbm8gKyBsaW5lbm9fZGVsdGEKKyAgICAgICAgZnJhbWVzLmFwcGVuZCgoY29kZS5jb19maWxlbmFtZSwgbGluZW5vKSkKKyAgICAgICAgbGluZW5vX2RlbHRhID0gMAorICAgICAgICBmcmFtZSA9IGZyYW1lLmZfYmFjaworICAgICAgICBpZiBmcmFtZSBpcyBOb25lOgorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdHVwbGUoZnJhbWVzKQorCitkZWYgYWxsb2NhdGVfYnl0ZXMoc2l6ZSk6CisgICAgbmZyYW1lID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlYmFja19saW1pdCgpCisgICAgYnl0ZXNfbGVuID0gKHNpemUgLSBFTVBUWV9TVFJJTkdfU0laRSkKKyAgICBmcmFtZXMgPSBnZXRfZnJhbWVzKG5mcmFtZSwgMSkKKyAgICBkYXRhID0gYid4JyAqIGJ5dGVzX2xlbgorICAgIHJldHVybiBkYXRhLCB0cmFjZW1hbGxvYy5UcmFjZWJhY2soZnJhbWVzKQorCitkZWYgY3JlYXRlX3NuYXBzaG90cygpOgorICAgIHRyYWNlYmFja19saW1pdCA9IDIKKworICAgIHJhd190cmFjZXMgPSBbCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoNjYsICgoJ2IucHknLCAxKSwpKSwKKworICAgICAgICAoNywgKCgnPHVua25vd24+JywgMCksKSksCisgICAgXQorICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MuU25hcHNob3QocmF3X3RyYWNlcywgdHJhY2ViYWNrX2xpbWl0KQorCisgICAgcmF3X3RyYWNlczIgPSBbCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDUwMDAsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoNDAwLCAoKCdjLnB5JywgNTc4KSwpKSwKKyAgICBdCisgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MuU25hcHNob3QocmF3X3RyYWNlczIsIHRyYWNlYmFja19saW1pdCkKKworICAgIHJldHVybiAoc25hcHNob3QsIHNuYXBzaG90MikKKworZGVmIGZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pOgorICAgIHJldHVybiB0cmFjZW1hbGxvYy5fRnJhbWUoKGZpbGVuYW1lLCBsaW5lbm8pKQorCitkZWYgdHJhY2ViYWNrKCpmcmFtZXMpOgorICAgIHJldHVybiB0cmFjZW1hbGxvYy5UcmFjZWJhY2soZnJhbWVzKQorCitkZWYgdHJhY2ViYWNrX2xpbmVubyhmaWxlbmFtZSwgbGluZW5vKToKKyAgICByZXR1cm4gdHJhY2ViYWNrKChmaWxlbmFtZSwgbGluZW5vKSkKKworZGVmIHRyYWNlYmFja19maWxlbmFtZShmaWxlbmFtZSk6CisgICAgcmV0dXJuIHRyYWNlYmFja19saW5lbm8oZmlsZW5hbWUsIDApCisKKworY2xhc3MgVGVzdFRyYWNlbWFsbG9jRW5hYmxlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiB0cmFjZW1hbGxvYy5pc190cmFjaW5nKCk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0cmFjZW1hbGxvYyBtdXN0IGJlIHN0b3BwZWQgYmVmb3JlIHRoZSB0ZXN0IikKKworICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZW1hbGxvY19tZW1vcnkoc2VsZik6CisgICAgICAgIGRhdGEgPSBbYWxsb2NhdGVfYnl0ZXMoMTIzKSBmb3IgY291bnQgaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIHNpemUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgMCkKKworICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBzaXplMiA9IHRyYWNlbWFsbG9jLmdldF90cmFjZW1hbGxvY19tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZTIsIHNpemUpCisKKyAgICBkZWYgdGVzdF9nZXRfb2JqZWN0X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqX3NpemUgPSAxMjM0NQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjaykKKworICAgIGRlZiB0ZXN0X3NldF90cmFjZWJhY2tfbGltaXQoc2VsZik6CisgICAgICAgIG9ial9zaXplID0gMTAKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHJhY2VtYWxsb2Muc3RhcnQsIC0xKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgxMCkKKyAgICAgICAgb2JqMiwgb2JqMl90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHJhY2ViYWNrKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrLCBvYmoyX3RyYWNlYmFjaykKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoMSkKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHJhY2ViYWNrKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2spCisKKworICAgIGRlZiBmaW5kX3RyYWNlKHNlbGYsIHRyYWNlcywgdHJhY2ViYWNrKToKKyAgICAgICAgZm9yIHRyYWNlIGluIHRyYWNlczoKKyAgICAgICAgICAgIGlmIHRyYWNlWzFdID09IHRyYWNlYmFjay5fZnJhbWVzOgorICAgICAgICAgICAgICAgIHJldHVybiB0cmFjZQorCisgICAgICAgIHNlbGYuZmFpbCgidHJhY2Ugbm90IGZvdW5kIikKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZXMoc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisKKyAgICAgICAgdHJhY2VzID0gdHJhY2VtYWxsb2MuX2dldF90cmFjZXMoKQorICAgICAgICB0cmFjZSA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9ial90cmFjZWJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYWNlLCB0dXBsZSkKKyAgICAgICAgc2l6ZSwgdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBvYmpfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2suX2ZyYW1lcykKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpLCBbXSkKKworCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlc19pbnRlcm5fdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIGR1bW15IHdyYXBwZXJzIHRvIGdldCBtb3JlIHVzZWZ1bCBhbmQgaWRlbnRpY2FsIGZyYW1lcyBpbiB0aGUgdHJhY2ViYWNrCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzMyhzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzNChzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczMoc2l6ZSkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHR3byBpZGVudGljYWwgdHJhY2ViYWNrcyBhcmUgbm90IGR1cGxpY2F0ZWQKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDQpCisgICAgICAgIG9ial9zaXplID0gMTIzCisgICAgICAgIG9iajEsIG9iajFfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXM0KG9ial9zaXplKQorICAgICAgICBvYmoyLCBvYmoyX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzNChvYmpfc2l6ZSkKKworICAgICAgICB0cmFjZXMgPSB0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpCisKKyAgICAgICAgdHJhY2UxID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqMV90cmFjZWJhY2spCisgICAgICAgIHRyYWNlMiA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9iajJfdHJhY2ViYWNrKQorICAgICAgICBzaXplMSwgdHJhY2ViYWNrMSA9IHRyYWNlMQorICAgICAgICBzaXplMiwgdHJhY2ViYWNrMiA9IHRyYWNlMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjazIsIHRyYWNlYmFjazEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHJhY2ViYWNrMiwgdHJhY2ViYWNrMSkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZWRfbWVtb3J5KHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBhbGxvY2F0ZXMgc29tZSBpbnRlcm5hbHMgb2JqZWN0cywgc28gdGhlIHRlc3QgbXVzdCB0b2xlcmF0ZQorICAgICAgICAjIGEgc21hbGwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBleHBlY3RlZCBzaXplIGFuZCB0aGUgcmVhbCB1c2FnZQorICAgICAgICBtYXhfZXJyb3IgPSAyMDQ4CisKKyAgICAgICAgIyBhbGxvY2F0ZSBvbmUgb2JqZWN0CisgICAgICAgIG9ial9zaXplID0gMTAyNCAqIDEwMjQKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIG1heF9zaXplID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplLCBvYmpfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWF4X3NpemUsIHNpemUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZSAtIG9ial9zaXplLCBtYXhfZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG1heF9zaXplIC0gc2l6ZSwgbWF4X2Vycm9yKQorCisgICAgICAgICMgZGVzdHJveSB0aGUgb2JqZWN0CisgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgc2l6ZTIsIG1heF9zaXplMiA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHNpemUyLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplIC0gc2l6ZTIsIG9ial9zaXplIC0gbWF4X2Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChtYXhfc2l6ZTIsIG1heF9zaXplKQorCisgICAgICAgICMgY2xlYXJfdHJhY2VzKCkgbXVzdCByZXNldCB0cmFjZWQgbWVtb3J5IGNvdW50ZXJzCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKSwgKDAsIDApKQorCisgICAgICAgICMgYWxsb2NhdGUgYW5vdGhlciBvYmplY3QKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIG1heF9zaXplID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc2l6ZSwgMCkKKworICAgICAgICAjIHN0b3AoKSBhbHNvIHJlc2V0cyB0cmFjZWQgbWVtb3J5IGNvdW50ZXJzCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCksICgwLCAwKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX3RyYWNlcyhzZWxmKToKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMoMTIzKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyYWNlYmFjaykKKworICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICB0cmFjZWJhY2syID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFjZWJhY2syKQorCisgICAgZGVmIHRlc3RfaXNfdHJhY2luZyhzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90KHNlbGYpOgorICAgICAgICBvYmosIHNvdXJjZSA9IGFsbG9jYXRlX2J5dGVzKDEyMykKKworICAgICAgICAjIHRha2UgYSBzbmFwc2hvdAorICAgICAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorCisgICAgICAgICMgd3JpdGUgb24gZGlzaworICAgICAgICBzbmFwc2hvdC5kdW1wKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgICMgbG9hZCBmcm9tIGRpc2sKKyAgICAgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MuU25hcHNob3QubG9hZChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDIudHJhY2VzLCBzbmFwc2hvdC50cmFjZXMpCisKKyAgICAgICAgIyB0cmFjZW1hbGxvYyBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIHRvIHRha2UgYSBzbmFwc2hvdAorICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFsbG9jYXRpb25zIHRvIHRha2UgYSBzbmFwc2hvdCIpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9zYXZlX2F0dHIoc2VsZik6CisgICAgICAgICMgdGFrZSBhIHNuYXBzaG90IHdpdGggYSBuZXcgYXR0cmlidXRlCisgICAgICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgICAgIHNuYXBzaG90LnRlc3RfYXR0ciA9ICJuZXciCisgICAgICAgIHNuYXBzaG90LmR1bXAoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgIyBsb2FkKCkgc2hvdWxkIHJlY3JlYXRlcyB0aGUgYXR0cmlidXRlCisgICAgICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QyLnRlc3RfYXR0ciwgIm5ldyIpCisKKyAgICBkZWYgZm9ya19jaGlsZChzZWxmKToKKyAgICAgICAgaWYgbm90IHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHJldHVybiAyCisKKyAgICAgICAgb2JqX3NpemUgPSAxMjM0NQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBpZiB0cmFjZWJhY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAzCisKKyAgICAgICAgIyBldmVyeXRoaW5nIGlzIGZpbmUKKyAgICAgICAgcmV0dXJuIDAKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICduZWVkIG9zLmZvcmsoKScpCisgICAgZGVmIHRlc3RfZm9yayhzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IHRyYWNlbWFsbG9jIGlzIHN0aWxsIHdvcmtpbmcgYWZ0ZXIgZm9yaworICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgbm90IHBpZDoKKyAgICAgICAgICAgICMgY2hpbGQKKyAgICAgICAgICAgIGV4aXRjb2RlID0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4aXRjb2RlID0gc2VsZi5mb3JrX2NoaWxkKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoZXhpdGNvZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwaWQyLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5XSUZFWElURUQoc3RhdHVzKSkKKyAgICAgICAgICAgIGV4aXRjb2RlID0gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKKworCitjbGFzcyBUZXN0U25hcHNob3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSA0MDAwCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc25hcHNob3Qoc2VsZik6CisgICAgICAgIHJhd190cmFjZXMgPSBbKDUsICgoJ2EucHknLCAyKSwpKV0KKworICAgICAgICB3aXRoIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYXMgc3RhY2s6CisgICAgICAgICAgICBzdGFjay5lbnRlcl9jb250ZXh0KHBhdGNoLm9iamVjdCh0cmFjZW1hbGxvYywgJ2lzX3RyYWNpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPVRydWUpKQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChwYXRjaC5vYmplY3QodHJhY2VtYWxsb2MsICdnZXRfdHJhY2ViYWNrX2xpbWl0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT01KSkKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocGF0Y2gub2JqZWN0KHRyYWNlbWFsbG9jLCAnX2dldF90cmFjZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXJhd190cmFjZXMpKQorCisgICAgICAgICAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdC50cmFjZWJhY2tfbGltaXQsIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzbmFwc2hvdC50cmFjZXMpLCAxKQorICAgICAgICAgICAgdHJhY2UgPSBzbmFwc2hvdC50cmFjZXNbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2Uuc2l6ZSwgNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRyYWNlLnRyYWNlYmFjayksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLnRyYWNlYmFja1swXS5maWxlbmFtZSwgJ2EucHknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZS50cmFjZWJhY2tbMF0ubGluZW5vLCAyKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX3RyYWNlcyhzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBmaWx0ZXIxID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYi5weSIpCisgICAgICAgIGZpbHRlcjIgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImEucHkiLCAyKQorICAgICAgICBmaWx0ZXIzID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhLnB5IiwgNSkKKworICAgICAgICBvcmlnaW5hbF90cmFjZXMgPSBsaXN0KHNuYXBzaG90LnRyYWNlcy5fdHJhY2VzKQorCisgICAgICAgICMgZXhjbHVkZSBiLnB5CisgICAgICAgIHNuYXBzaG90MyA9IHNuYXBzaG90LmZpbHRlcl90cmFjZXMoKGZpbHRlcjEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDMudHJhY2VzLl90cmFjZXMsIFsKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoNywgKCgnPHVua25vd24+JywgMCksKSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBmaWx0ZXJfdHJhY2VzKCkgbXVzdCBub3QgdG91Y2ggdGhlIG9yaWdpbmFsIHNuYXBzaG90CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QudHJhY2VzLl90cmFjZXMsIG9yaWdpbmFsX3RyYWNlcykKKworICAgICAgICAjIG9ubHkgaW5jbHVkZSB0d28gbGluZXMgb2YgYS5weQorICAgICAgICBzbmFwc2hvdDQgPSBzbmFwc2hvdDMuZmlsdGVyX3RyYWNlcygoZmlsdGVyMiwgZmlsdGVyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3Q0LnRyYWNlcy5fdHJhY2VzLCBbCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICBdKQorCisgICAgICAgICMgTm8gZmlsdGVyOiBqdXN0IGR1cGxpY2F0ZSB0aGUgc25hcHNob3QKKyAgICAgICAgc25hcHNob3Q1ID0gc25hcHNob3QuZmlsdGVyX3RyYWNlcygoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzbmFwc2hvdDUsIHNuYXBzaG90KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHNuYXBzaG90NS50cmFjZXMsIHNuYXBzaG90LnRyYWNlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDUudHJhY2VzLCBzbmFwc2hvdC50cmFjZXMpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV9saW5lKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRiXzAgPSB0cmFjZWJhY2tfbGluZW5vKCc8dW5rbm93bj4nLCAwKQorICAgICAgICB0Yl9hXzIgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgMikKKyAgICAgICAgdGJfYV81ID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDUpCisgICAgICAgIHRiX2JfMSA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCAxKQorICAgICAgICB0Yl9jXzU3OCA9IHRyYWNlYmFja19saW5lbm8oJ2MucHknLCA1NzgpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSBhbmQgbGluZQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfMSwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfNSwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSBhbmQgbGluZSAoMikKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMyLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCA1MDAyLCAyKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9jXzU3OCwgNDAwLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzIsIDMwLCAzKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIGRpZmYgcGVyIGZpbGUgYW5kIGxpbmUKKyAgICAgICAgc3RhdGlzdGljcyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAnbGluZW5vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2FfNSwgNTAwMiwgNTAwMCwgMiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2NfNTc4LCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2JfMSwgMCwgLTY2LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiXzAsIDAsIC03LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2FfMiwgMzAsIDAsIDMsIDApLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfZmlsZShzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0Yl8wID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCc8dW5rbm93bj4nKQorICAgICAgICB0Yl9hID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdhLnB5JykKKyAgICAgICAgdGJfYiA9IHRyYWNlYmFja19maWxlbmFtZSgnYi5weScpCisgICAgICAgIHRiX2MgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2MucHknKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUKKyAgICAgICAgc3RhdHMxID0gc25hcHNob3Quc3RhdGlzdGljcygnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2IsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hLCAzMiwgNCksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSAoMikKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czIsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hLCA1MDMyLCA1KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9jLCA0MDAsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZQorICAgICAgICBkaWZmID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9hLCA1MDMyLCA1MDAwLCA1LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYywgNDAwLCA0MDAsIDEsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9iLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfMCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUKKyAgICAgICAgdGIxID0gdHJhY2ViYWNrKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkKKyAgICAgICAgdGIyID0gdHJhY2ViYWNrKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkKKyAgICAgICAgdGIzID0gdHJhY2ViYWNrKCgnYi5weScsIDEpKQorICAgICAgICB0YjQgPSB0cmFjZWJhY2soKCc8dW5rbm93bj4nLCAwKSkKKyAgICAgICAgc3RhdHMxID0gc25hcHNob3Quc3RhdGlzdGljcygndHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czEsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjMsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjEsIDMwLCAzKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjQsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMiwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSAoMikKKyAgICAgICAgdGI1ID0gdHJhY2ViYWNrKCgnYy5weScsIDU3OCkpCisgICAgICAgIHN0YXRzMiA9IHNuYXBzaG90Mi5zdGF0aXN0aWNzKCd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMiwgNTAwMiwgMiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGI1LCA0MDAsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMSwgMzAsIDMpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZQorICAgICAgICBkaWZmID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIyLCA1MDAyLCA1MDAwLCAyLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGI1LCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiMywgMCwgLTY2LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiNCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIxLCAzMCwgMCwgMywgMCksCisgICAgICAgIF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3Quc3RhdGlzdGljcywgJ3RyYWNlYmFjaycsIGN1bXVsYXRpdmU9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X2N1bXVsYXRpdmUoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdGJfMCA9IHRyYWNlYmFja19maWxlbmFtZSgnPHVua25vd24+JykKKyAgICAgICAgdGJfYSA9IHRyYWNlYmFja19maWxlbmFtZSgnYS5weScpCisgICAgICAgIHRiX2IgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2IucHknKQorICAgICAgICB0Yl9hXzIgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgMikKKyAgICAgICAgdGJfYV81ID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDUpCisgICAgICAgIHRiX2JfMSA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCAxKQorICAgICAgICB0Yl9iXzQgPSB0cmFjZWJhY2tfbGluZW5vKCdiLnB5JywgNCkKKworICAgICAgICAjIHBlciBmaWxlCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnZmlsZW5hbWUnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYiwgOTgsIDUpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDMyLCA0KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHBlciBsaW5lCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0cywgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfMSwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfNCwgMzIsIDQpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfNSwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF90cmFjZV9mb3JtYXQoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdHJhY2UgPSBzbmFwc2hvdC50cmFjZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHJhY2UpLCAnYS5weToyOiAxMCBCJykKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2UudHJhY2ViYWNrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHRyYWNlYmFjayksICdhLnB5OjInKQorICAgICAgICBmcmFtZSA9IHRyYWNlYmFja1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmcmFtZSksICdhLnB5OjInKQorCisgICAgZGVmIHRlc3Rfc3RhdGlzdGljX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHN0YXQgPSBzdGF0c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdGF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYi5weToxOiBzaXplPTY2IEIsIGNvdW50PTEsIGF2ZXJhZ2U9NjYgQicpCisKKyAgICBkZWYgdGVzdF9zdGF0aXN0aWNfZGlmZl9mb3JtYXQoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ2xpbmVubycpCisgICAgICAgIHN0YXQgPSBzdGF0c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdGF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYS5weTo1OiBzaXplPTUwMDIgQiAoKzUwMDAgQiksIGNvdW50PTIgKCsxKSwgYXZlcmFnZT0yNTAxIEInKQorCisKKworY2xhc3MgVGVzdEZpbHRlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSAyMDQ4CisKKyAgICBkZWYgdGVzdF9maWx0ZXJfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGRlZmF1bHQgdmFsdWVzCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pbmNsdXNpdmUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5saW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGxfZnJhbWVzLCBGYWxzZSkKKworICAgICAgICAjIHRlc3QgY3VzdG9tIHZhbHVlcworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAidGVzdC5weSIsIDEyMywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmluY2x1c2l2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAidGVzdC5weSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5saW5lbm8sIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsbF9mcmFtZXMsIFRydWUpCisKKyAgICAgICAgIyBwYXJhbWV0ZXJzIHBhc3NlZCBieSBrZXl3b3JkCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlPUZhbHNlLCBmaWxlbmFtZV9wYXR0ZXJuPSJ0ZXN0LnB5IiwgbGluZW5vPTEyMywgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaW5jbHVzaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZpbGVuYW1lX3BhdHRlcm4sICJ0ZXN0LnB5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmxpbmVubywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxsX2ZyYW1lcywgVHJ1ZSkKKworICAgICAgICAjIHJlYWQtb25seSBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIGYsICJmaWxlbmFtZV9wYXR0ZXJuIiwgImFiYyIpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2goc2VsZik6CisgICAgICAgICMgZmlsdGVyIHdpdGhvdXQgbGluZSBudW1iZXIKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciA+IDAKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImFiYyIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciAwCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiLCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBkZWYgZm5tYXRjaChpbmNsdXNpdmUsIGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGYuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKFRydWUsICJhYmMiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiMTIzNTYiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiPHVua25vd24+IiwgImFiYyIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChGYWxzZSwgImFiYyIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICIxMjM1NiIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICI8dW5rbm93bj4iLCAiYWJjIikpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2hfZmlsZW5hbWVfam9rZXIoc2VsZik6CisgICAgICAgIGRlZiBmbm1hdGNoKGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGZpbHRlciA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIDApCisKKyAgICAgICAgIyBlbXB0eSBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJyonKSkKKworICAgICAgICAjIG5vICoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnYWJjZCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdkZWYnKSkKKworICAgICAgICAjIGEqCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYSonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2IqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2FiY2QqJykpCisKKyAgICAgICAgIyBhKmIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhKmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2RjeCcsICdhKmN4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJiJywgJ2EqYycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2RjZScsICdhKmN4JykpCisKKyAgICAgICAgIyBhKmIqYworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjZGUnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2JkZWZlZycsICdhKmJkKmVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjZGQnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNiZGVmZWYnLCAnYSpiZCplZycpKQorCisgICAgICAgICMgcmVwbGFjZSAucHljIGFuZCAucHlvIHN1ZmZpeCB3aXRoIC5weQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weW8nLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5YycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgY2FzZSBpbnNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FCQycsICdBQmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhQmNEZScsICdBYipkRScpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EuUFlPJywgJ2EucHknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5JywgJ2EuUFlDJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjYXNlIHNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhQkMnLCAnQUJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FCY0RlJywgJ0FiKmRFJykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLlBZTycsICdhLnB5JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EucHknLCAnYS5QWUMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgbm9ybWFsaXplIGFsdGVybmF0ZSBzZXBhcmF0b3IgIi8iIHRvIHRoZSBzdGFuZGFyZCBzZXBhcmF0b3IgIlwiCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYicsIHInYVxiJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYlxjJywgcidhXGIvYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2IvYycsIHInYVxiXGMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlIHNlcGFyYXRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iJywgcidhXGInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhL2JcYycsIHInYVxiL2MnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYi9jJywgcidhXGJcYycpKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX3RyYWNlKHNlbGYpOgorICAgICAgICB0MSA9ICgoImEucHkiLCAyKSwgKCJiLnB5IiwgMykpCisgICAgICAgIHQyID0gKCgiYi5weSIsIDQpLCAoImIucHkiLCA1KSkKKyAgICAgICAgdDMgPSAoKCJjLnB5IiwgNSksICgnPHVua25vd24+JywgMCkpCisgICAgICAgIHVua25vd24gPSAoKCc8dW5rbm93bj4nLCAwKSwpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYi5weSIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisKK2NsYXNzIFRlc3RDb21tYW5kTGluZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW52X3ZhcihzZWxmKToKKyAgICAgICAgIyBub3QgdHJhY2luZyBieSBkZWZhdWx0CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidGYWxzZScpCisKKyAgICAgICAgIyBQWVRIT04qIGVudmlyb25tZW50IHZhcmlhYmxlcyBtdXN0IGJlIGlnbm9yZWQgd2hlbiAtRSBvcHRpb24gaXMKKyAgICAgICAgIyBwcmVzZW50CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctRScsICctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxJykKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ0ZhbHNlJykKKworICAgICAgICAjIHRyYWNpbmcgYXQgc3RhcnR1cAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05UUkFDRU1BTExPQz0nMScpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidUcnVlJykKKworICAgICAgICAjIHN0YXJ0IGFuZCBzZXQgdGhlIG51bWJlciBvZiBmcmFtZXMKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmdldF90cmFjZWJhY2tfbGltaXQoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgUFlUSE9OVFJBQ0VNQUxMT0M9JzEwJykKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJzEwJykKKworICAgIGRlZiB0ZXN0X2Vudl92YXJfaW52YWxpZChzZWxmKToKKyAgICAgICAgZm9yIG5mcmFtZSBpbiAoLTEsIDAsIDUwMDApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmZyYW1lPW5mcmFtZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgICAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywgJ3Bhc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OVFJBQ0VNQUxMT0M9c3RyKG5mcmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQWVRIT05UUkFDRU1BTExPQyBtdXN0IGJlIGFuIGludGVnZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gcmFuZ2UgWzE7IDEwMF0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycikKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIHhvcHRpb25zLCBuZnJhbWUgaW4gKAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYycsIDEpLAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYz0xJywgMSksCisgICAgICAgICAgICAoJ3RyYWNlbWFsbG9jPTE1JywgMTUpLAorICAgICAgICApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeG9wdGlvbnM9eG9wdGlvbnMsIG5mcmFtZT1uZnJhbWUpOgorICAgICAgICAgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1YJywgeG9wdGlvbnMsICctYycsIGNvZGUpCisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHN0cihuZnJhbWUpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9uc19pbnZhbGlkKHNlbGYpOgorICAgICAgICBmb3IgbmZyYW1lIGluICgtMSwgMCwgNTAwMCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuZnJhbWU9bmZyYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBhcmdzID0gKCctWCcsICd0cmFjZW1hbGxvYz0lcycgJSBuZnJhbWUsICctYycsICdwYXNzJykKKyAgICAgICAgICAgICAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCphcmdzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInLVggdHJhY2VtYWxsb2M9TkZSQU1FOiBudW1iZXIgb2YgZnJhbWUgbXVzdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZSBhbiBpbnRlZ2VyIGluIHJhbmdlIFsxOyAxMDBdJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0VHJhY2VtYWxsb2NFbmFibGVkLAorICAgICAgICBUZXN0U25hcHNob3QsCisgICAgICAgIFRlc3RGaWx0ZXJzLAorICAgICAgICBUZXN0Q29tbWFuZExpbmUsCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5IGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQppbmRleCAzZWU0YzZiLi5lYzEwNzUyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKQEAgLTIsNiArMiw3IEBACiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJ1bl93aXRoX2xvY2FsZQogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKQEAgLTEwNzcsOSArMTA3OCwxOSBAQAogICAgICAgICBuczIgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKQogICAgICAgICBuczIueCA9ICJzcGFtIgogICAgICAgICBuczIuX3kgPSA1CisgICAgICAgIG5hbWUgPSAibmFtZXNwYWNlIgogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLCAibmFtZXNwYWNlKHc9MywgeD0xLCB5PTIpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMiksICJuYW1lc3BhY2UoX3k9NSwgeD0nc3BhbScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksICJ7bmFtZX0odz0zLCB4PTEsIHk9MikiLmZvcm1hdChuYW1lPW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgIntuYW1lfShfeT01LCB4PSdzcGFtJykiLmZvcm1hdChuYW1lPW5hbWUpKQorCisgICAgZGVmIHRlc3RfZXF1YWwoc2VsZik6CisgICAgICAgIG5zMSA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSh4PTEpCisgICAgICAgIG5zMiA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCisgICAgICAgIG5zMi54ID0gMQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZXMuU2ltcGxlTmFtZXNwYWNlKCksIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zMSwgbnMyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMiwgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkpCiAKICAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CiAgICAgICAgIG5zMSA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZShhPTEsIGI9MikKQEAgLTExMTcsMTEgKzExMjgsMTIgQEAKICAgICAgICAgbnMxLnNwYW0gPSBuczEKICAgICAgICAgbnMyLnNwYW0gPSBuczMKICAgICAgICAgbnMzLnNwYW0gPSBuczIKKyAgICAgICAgbmFtZSA9ICJuYW1lc3BhY2UiCisgICAgICAgIHJlcHIxID0gIntuYW1lfShjPSdjb29raWUnLCBzcGFtPXtuYW1lfSguLi4pKSIuZm9ybWF0KG5hbWU9bmFtZSkKKyAgICAgICAgcmVwcjIgPSAie25hbWV9KHNwYW09e25hbWV9KHNwYW09e25hbWV9KC4uLiksIHg9MSkpIi5mb3JtYXQobmFtZT1uYW1lKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lc3BhY2UoYz0nY29va2llJywgc3BhbT1uYW1lc3BhY2UoLi4uKSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNwYWNlKHNwYW09bmFtZXNwYWNlKHNwYW09bmFtZXNwYWNlKC4uLiksIHg9MSkpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksIHJlcHIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgcmVwcjIpCiAKICAgICBkZWYgdGVzdF9hc19kaWN0KHNlbGYpOgogICAgICAgICBucyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZShzcGFtPSdzcGFtc3BhbXNwYW0nKQpAQCAtMTE0NCw2ICsxMTU2LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzcGFtKSwgU3BhbSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHNwYW0pLCB7J2hhbSc6IDgsICdlZ2dzJzogOX0pCiAKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIG5zID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKGJyZWFrZmFzdD0ic3BhbSIsIGx1bmNoPSJzcGFtIikKKworICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBuYW1lID0gInByb3RvY29sIHt9Ii5mb3JtYXQocHJvdG9jb2wpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbnNfcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhucywgcHJvdG9jb2wpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHBuYW1lKSBmcm9tIGUKKyAgICAgICAgICAgIG5zX3JvdW5kdHJpcCA9IHBpY2tsZS5sb2Fkcyhuc19waWNrbGVkKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBuc19yb3VuZHRyaXAsIHBuYW1lKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cywgTWFwcGluZ1Byb3h5VGVzdHMsIENsYXNzQ3JlYXRpb25UZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5IGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKaW5kZXggMmU2Mzc0NS4uNTliZGU3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91Y24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXN0ZGF0YSA9IHN1cHBvcnQub3Blbl91cmxyZXNvdXJjZSh1cmwsIGVuY29kaW5nPSJ1dGYtOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjaz1jaGVja192ZXJzaW9uKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIgKyB1cmwpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0ZGF0YS5jbG9zZSkKICAgICAgICAgZm9yIGxpbmUgaW4gdGVzdGRhdGE6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggNTAyZDM5My4uNTc1YzRhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtNyw2ICs3LDcgQEAKICIiIiMiCiBpbXBvcnQgX3N0cmluZwogaW1wb3J0IGNvZGVjcworaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CkBAIC0zMSw2ICszMiwxNiBAQAogICAgICAgICByZXR1cm4gTm9uZQogY29kZWNzLnJlZ2lzdGVyKHNlYXJjaF9mdW5jdGlvbikKIAorZGVmIGR1cGxpY2F0ZV9zdHJpbmcodGV4dCk6CisgICAgIiIiCisgICAgVHJ5IHRvIGdldCBhIGZyZXNoIGNsb25lIG9mIHRoZSBzcGVjaWZpZWQgdGV4dDoKKyAgICBuZXcgb2JqZWN0IHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgMS4KKworICAgIFRoaXMgaXMgYSBiZXN0LWVmZm9ydDogbGF0aW4xIHNpbmdsZSBsZXR0ZXJzIGFuZCB0aGUgZW1wdHkKKyAgICBzdHJpbmcgKCcnKSBhcmUgc2luZ2xldG9ucyBhbmQgY2Fubm90IGJlIGNsb25lZC4KKyAgICAiIiIKKyAgICByZXR1cm4gdGV4dC5lbmNvZGUoKS5kZWNvZGUoKQorCiBjbGFzcyBVbmljb2RlVGVzdChzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKQEAgLTg2MywxMSArODc0LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6ZH0nLmZvcm1hdChHKCdkYXRhJykpLCAnRyhkYXRhKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ3N0cmluZyBpcyBkYXRhJykKIAotICAgICAgICBtc2cgPSAnb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzIGRlcHJlY2F0ZWQnCi0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygobXNnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMH0nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeMTBzfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOj4xNXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJyBzdHJpbmcgaXMgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOl4xMH0nLmZvcm1hdCwgRSgnZGF0YScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7MDpeMTBzfScuZm9ybWF0LCBFKCdkYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOj4xNXN9Jy5mb3JtYXQsIEcoJ2RhdGEnKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LApAQCAtOTAzLDcgKzkxMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MCIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezAufSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAufSIuZm9ybWF0LCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezBbfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbfSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbfSIuZm9ybWF0LCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgInswXX0iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLltdfSIuZm9ybWF0LCAwKQpAQCAtOTU1LDYgKzk2NCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICcnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe31dfSIuZm9ybWF0KHsie30iOiA1fSksICI1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7fV19Ii5mb3JtYXQoeyJ7fSIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3tdfSIuZm9ybWF0KHsieyIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W31dfSIuZm9ybWF0KHsifSIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W1tdfSIuZm9ybWF0KHsiWyIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7WyFdfSIuZm9ybWF0KHsiISIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAie2F7fWJ9Ii5mb3JtYXQsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAie2F7Yn0iLmZvcm1hdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7W30iLmZvcm1hdCwgNDIpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMHh7OjB7OmR9WH0iLmZvcm1hdCgweDAsMTYpLCAiMHgwMDAwMDAwMDAwMDAwMDAwIikKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdF9tYXAoc2VsZik6CkBAIC0xMTA4LDYgKzExMjYsMzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJS4xcycgJSAiYVx4ZTlcdTIwYWMiLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUuMnMnICUgImFceGU5XHUyMGFjIiwgJ2FceGU5JykKIAorICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfd2l0aF9lbnVtKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTg3ODAKKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgRmxvYXQoZmxvYXQsIGVudW0uRW51bSk6CisgICAgICAgICAgICBQSSA9IDMuMTQxNTkyNgorICAgICAgICBjbGFzcyBJbnQoZW51bS5JbnRFbnVtKToKKyAgICAgICAgICAgIElERVMgPSAxNQorICAgICAgICBjbGFzcyBTdHIoc3RyLCBlbnVtLkVudW0pOgorICAgICAgICAgICAgQUJDID0gJ2FiYycKKyAgICAgICAgIyBUZXN0aW5nIFVuaWNvZGUgZm9ybWF0dGluZyBzdHJpbmdzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzLCAlcyIgJSAoU3RyLkFCQywgU3RyLkFCQyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ci5BQkMsIFN0ci5BQkMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcywgJXMsICVkLCAlaSwgJXUsICVmLCAlNS4yZiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKFN0ci5BQkMsIFN0ci5BQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSW50LklERVMsIEludC5JREVTLCBJbnQuSURFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdC5QSSwgRmxvYXQuUEkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTdHIuQUJDLCBTdHIuQUJDLCAxNSwgMTUsIDE1LCAzLjE0MTU5MywgIDMuMTQnKQorCisgICAgICAgICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOlN0ci5BQkN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5TdHIuQUJDLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5JbnQuSURFUy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWkuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylkLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjE1Li4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pdS4uLicgJSB7J2Zvbyc6SW50LklERVMsICdkZWYnOkZsb2F0LlBJfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylmLi4uJyAlIHsnZm9vJzpGbG9hdC5QSSwnZGVmJzoxMjN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4zLjE0MTU5My4uLicpCisKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX2h1Z2VfcHJlY2lzaW9uKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgSU5UX01BWApAQCAtMTc4MywxMCArMTgzMywxMCBAQAogICAgICAgICAjIDAtMTI3CiAgICAgICAgIHMgPSBieXRlcyhyYW5nZSgxMjgpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAotICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCisgICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywgJ2NwMjczJywKICAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCiAgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDExMjUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzMnLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsICdpc284ODU5XzYnLAogICAgICAgICAgICAgJ2lzbzg4NTlfNycsICdpc284ODU5XzknLCAna29pOF9yJywgJ2xhdGluXzEnLApAQCAtMTgxMSwxMCArMTg2MSwxMCBAQAogICAgICAgICAjIDEyOC0yNTUKICAgICAgICAgcyA9IGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgKLSAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAorICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsICdjcDI3MycsCiAgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAogICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKLSAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCisgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLCAnY3AxMTI1JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsCiAgICAgICAgICAgICAnaXNvODg1OV85JywgJ2tvaThfcicsICdsYXRpbl8xJywKQEAgLTIwMDUsOSArMjA1NSwxMCBAQAogICAgICMgVGVzdCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpCiAgICAgZGVmIHRlc3RfZnJvbV9mb3JtYXQoc2VsZik6CiAgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKLSAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IChweXRob25hcGksIHB5X29iamVjdCwKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0ICgKKyAgICAgICAgICAgIHB5dGhvbmFwaSwgcHlfb2JqZWN0LCBzaXplb2YsCiAgICAgICAgICAgICBjX2ludCwgY19sb25nLCBjX2xvbmdsb25nLCBjX3NzaXplX3QsCi0gICAgICAgICAgICBjX3VpbnQsIGNfdWxvbmcsIGNfdWxvbmdsb25nLCBjX3NpemVfdCkKKyAgICAgICAgICAgIGNfdWludCwgY191bG9uZywgY191bG9uZ2xvbmcsIGNfc2l6ZV90LCBjX3ZvaWRfcCkKICAgICAgICAgbmFtZSA9ICJQeVVuaWNvZGVfRnJvbUZvcm1hdCIKICAgICAgICAgX1B5VW5pY29kZV9Gcm9tRm9ybWF0ID0gZ2V0YXR0cihweXRob25hcGksIG5hbWUpCiAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUZvcm1hdC5yZXN0eXBlID0gcHlfb2JqZWN0CkBAIC0yMDE4LDkgKzIwNjksMTMgQEAKICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmNhcmdzKQogCisgICAgICAgIGRlZiBjaGVja19mb3JtYXQoZXhwZWN0ZWQsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCB0ZXh0KQorCiAgICAgICAgICMgYXNjaWkgZm9ybWF0LCBub24tYXNjaWkgYXJndW1lbnQKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInYXNjaWlceDdmPSVVJywgJ3VuaWNvZGVceGU5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAnYXNjaWlceDdmPXVuaWNvZGVceGU5JykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhc2NpaVx4N2Y9dW5pY29kZVx4ZTknLAorICAgICAgICAgICAgICAgICAgICAgYidhc2NpaVx4N2Y9JVUnLCAndW5pY29kZVx4ZTknKQogCiAgICAgICAgICMgbm9uLWFzY2lpIGZvcm1hdCwgYXNjaWkgYXJndW1lbnQ6IGVuc3VyZSB0aGF0IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpCiAgICAgICAgICMgcmFpc2VzIGFuIGVycm9yCkBAIC0yMDMwLDY0ICsyMDg1LDIwNSBAQAogICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQsIGIndW5pY29kZVx4ZTk9JXMnLCAnYXNjaWknKQogCiAgICAgICAgICMgdGVzdCAiJWMiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYycsIGNfaW50KDB4YWJjZCkpLCAnXHVhYmNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMGZmZmYpKSwgJ1xVMDAxMGZmZmYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1x1YWJjZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyVjJywgY19pbnQoMHhhYmNkKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcVTAwMTBmZmZmJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMnLCBjX2ludCgweDEwZmZmZikpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMTAwMDApKQogICAgICAgICAjIElzc3VlICMxODE4MwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYyVjJywgY19pbnQoMHgxMDAwMCksIGNfaW50KDB4MTAwMDAwKSksCi0gICAgICAgICAgICAnXFUwMDAxMDAwMFxVMDAxMDAwMDAnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1xVMDAwMTAwMDBcVTAwMTAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMlYycsIGNfaW50KDB4MTAwMDApLCBjX2ludCgweDEwMDAwMCkpCiAKICAgICAgICAgIyB0ZXN0ICIlIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJXMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ1slJV0nKSwgJ1slXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJSVzJywgYidhYmMnKSwgJyVhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUnLAorICAgICAgICAgICAgICAgICAgICAgYiclJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUnKQorICAgICAgICBjaGVja19mb3JtYXQoJyVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSVzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdbJV0nLAorICAgICAgICAgICAgICAgICAgICAgYidbJSVdJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUlcycsIGInYWJjJykKKworICAgICAgICAjIHRydW5jYXRlZCBzdHJpbmcKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNzJywgYidhYmNkZWYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ2FiY1tcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjVzJywgJ2FiY1tcdTIwYWNdJy5lbmNvZGUoJ3V0ZjgnKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXFx1MjBhY0FCQyciLAorICAgICAgICAgICAgICAgICAgICAgYiclQScsICdcdTIwYWNBQkMnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMCIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNUEnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVSJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1x1MjBhY0EiLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNSJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNTJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNVJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNWJywgJ1x1MjBhY0FCQ0RFRicsIE5vbmUpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNVYnLCBOb25lLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorCisgICAgICAgICMgZm9sbG93aW5nIHRlc3RzIGNvbWVzIGZyb20gIzczMzAKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUworICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1UycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlMnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yUycsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVIKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgICdhYmMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lOFInLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4zUicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAnYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjNSJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlQQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4QScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM0EnLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVzCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMnMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMnMnLCBiJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlUnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVYKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgJ2FiYycsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgMTIzIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCBOb25lLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0xMiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIDEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVicsIE5vbmUsIGInMTIzJykKIAogICAgICAgICAjIHRlc3QgaW50ZWdlciBmb3JtYXRzICglaSwgJWQsICV1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAzaScsIGNfaW50KDEwKSksICcwMTAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAuNGknLCBjX2ludCgxMCkpLCAnMDAxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclaScsIGNfaW50KC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxpJywgY19sb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclemknLCBjX3NzaXplX3QoLTEyMykpLCAnLTEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAzaScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcwMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAuNGknLCBjX2ludCgxMCkpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVpJywgY19pbnQoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsaScsIGNfbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6aScsIGNfc3NpemVfdCgtMTIzKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWQnLCBjX2ludCgtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsZCcsIGNfbG9uZygtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXpkJywgY19zc2l6ZV90KC0xMjMpKSwgJy0xMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclZCcsIGNfaW50KC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGQnLCBjX2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclemQnLCBjX3NzaXplX3QoLTEyMykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV1JywgY191aW50KDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsdScsIGNfdWxvbmcoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsdScsIGNfdWxvbmdsb25nKDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV6dScsIGNfc2l6ZV90KDEyMykpLCAnMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYicldScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsdScsIGNfdWxvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGx1JywgY191bG9uZ2xvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclenUnLCBjX3NpemVfdCgxMjMpKQorCisgICAgICAgICMgdGVzdCBsb25nIG91dHB1dAorICAgICAgICBtaW5fbG9uZ2xvbmcgPSAtKDIgKiogKDggKiBzaXplb2YoY19sb25nbG9uZykgLSAxKSkKKyAgICAgICAgbWF4X2xvbmdsb25nID0gLW1pbl9sb25nbG9uZyAtIDEKKyAgICAgICAgY2hlY2tfZm9ybWF0KHN0cihtaW5fbG9uZ2xvbmcpLAorICAgICAgICAgICAgICAgICAgICAgYiclbGxkJywgY19sb25nbG9uZyhtaW5fbG9uZ2xvbmcpKQorICAgICAgICBjaGVja19mb3JtYXQoc3RyKG1heF9sb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKG1heF9sb25nbG9uZykpCisgICAgICAgIG1heF91bG9uZ2xvbmcgPSAyICoqICg4ICogc2l6ZW9mKGNfdWxvbmdsb25nKSkgLSAxCisgICAgICAgIGNoZWNrX2Zvcm1hdChzdHIobWF4X3Vsb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbHUnLCBjX3Vsb25nbG9uZyhtYXhfdWxvbmdsb25nKSkKKyAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclcCcsIGNfdm9pZF9wKC0xKSkKKworICAgICAgICAjIHRlc3QgcGFkZGluZyAod2lkdGggYW5kL29yIHByZWNpc2lvbikKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUuMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwaScsIGNfaW50KDEyMykpCisKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMHUnLCBjX3VpbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwdScsIGNfdWludCgxMjMpKQorCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTAxMHgnLCBjX2ludCgweDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB4JywgY19pbnQoMHgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoODAsICcwJykucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMC44MHgnLCBjX2ludCgweDEyMykpCiAKICAgICAgICAgIyB0ZXN0ICVBCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgciIlQTonYWJjXHhlOVx1YWJjZFxVMDAxMGZmZmYnIikKKyAgICAgICAgY2hlY2tfZm9ybWF0KHIiJUE6J2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCiAKICAgICAgICAgIyB0ZXN0ICVWCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCAnYWJjJywgYid4eXonKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmMnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgJ2FiYycsIGIneHl6JykKIAogICAgICAgICAjIFRlc3Qgc3RyaW5nIGRlY29kZSBmcm9tIHBhcmFtZXRlciBvZiAlcyB1c2luZyB1dGYtOC4KICAgICAgICAgIyBiJ1x4ZTRceGJhXHhiYVx4ZTZceGIwXHg5MScgaXMgdXRmLTggZW5jb2RlZCBieXRlIHNlcXVlbmNlIG9mCiAgICAgICAgICMgJ1x1NGViYVx1NmMxMScKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAncmVwcj1cdTRlYmFcdTZjMTEnKQorICAgICAgICBjaGVja19mb3JtYXQoJ3JlcHI9XHU0ZWJhXHU2YzExJywKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKIAogICAgICAgICAjVGVzdCByZXBsYWNlIGVycm9yIGhhbmRsZXIuCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCBOb25lLCBiJ2FiY1x4ZmYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiY1x1ZmZmZCcpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmNcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgTm9uZSwgYidhYmNceGZmJykKIAogICAgICAgICAjIG5vdCBzdXBwb3J0ZWQ6IGNvcHkgdGhlIHJhdyBmb3JtYXQgc3RyaW5nLiB0aGVzZSB0ZXN0cyBhcmUganVzdCBoZXJlCiAgICAgICAgICMgdG8gY2hlY2sgZm9yIGNyYXNocyBhbmQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFzIHNwZWNpZmljYXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMSVzJywgYidhYmMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUxYWJjJyksICclMWFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclK2knLCBjX2ludCgxMCkpLCAnJStpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUuJXMnLCBiJ2FiYycpLCAnJS4lcycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclMSVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUxYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTFhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUraScsCisgICAgICAgICAgICAgICAgICAgICBiJyUraScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclLiVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS4lcycsIGInYWJjJykKIAogICAgICMgVGVzdCBQeVVuaWNvZGVfQXNXaWRlQ2hhcigpCiAgICAgZGVmIHRlc3RfYXN3aWRlY2hhcihzZWxmKToKQEAgLTIyMTEsNiArMjQwNyw4MCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYWJjLCBhYmNkZWYpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYmNkZWYuZGVjb2RlKCd1bmljb2RlX2ludGVybmFsJyksIHRleHQpCiAKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzYxNQorICAgICAgICBOID0gMTAKKyAgICAgICAgYXNjaWkgPSAnYScgKiBOCisgICAgICAgIGFzY2lpMiA9ICd6JyAqIE4KKyAgICAgICAgbGF0aW4gPSAnXHg4MCcgKiBOCisgICAgICAgIGxhdGluMiA9ICdceGZmJyAqIE4KKyAgICAgICAgYm1wID0gJ1x1MDEwMCcgKiBOCisgICAgICAgIGJtcDIgPSAnXHVmZmZmJyAqIE4KKyAgICAgICAgYXN0cmFsID0gJ1xVMDAxMDAwMDAnICogTgorICAgICAgICBhc3RyYWwyID0gJ1xVMDAxMGZmZmYnICogTgorICAgICAgICBzdHJpbmdzID0gKAorICAgICAgICAgICAgYXNjaWksIGFzY2lpMiwKKyAgICAgICAgICAgIGxhdGluLCBsYXRpbjIsCisgICAgICAgICAgICBibXAsIGJtcDIsCisgICAgICAgICAgICBhc3RyYWwsIGFzdHJhbDIpCisgICAgICAgIGZvciB0ZXh0MSwgdGV4dDIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzdHJpbmdzLCAyKToKKyAgICAgICAgICAgIGVxdWFsID0gKHRleHQxIGlzIHRleHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0MSA9PSB0ZXh0MiwgZXF1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQxICE9IHRleHQyLCBub3QgZXF1YWwpCisKKyAgICAgICAgICAgIGlmIGVxdWFsOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0MSA8PSB0ZXh0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dDEgPj0gdGV4dDIpCisKKyAgICAgICAgICAgICAgICAjIHRleHQxIGlzIHRleHQyOiBkdXBsaWNhdGUgc3RyaW5ncyB0byBza2lwIHRoZSAic3RyMSA9PSBzdHIyIgorICAgICAgICAgICAgICAgICMgb3B0aW1pemF0aW9uIGluIHVuaWNvZGVfY29tcGFyZV9lcSgpIGFuZCByZWFsbHkgY29tcGFyZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHBlciBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBjb3B5MSA9IGR1cGxpY2F0ZV9zdHJpbmcodGV4dDEpCisgICAgICAgICAgICAgICAgY29weTIgPSBkdXBsaWNhdGVfc3RyaW5nKHRleHQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29weTEsIGNvcHkyKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkxID09IGNvcHkyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29weTEgIT0gY29weTIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTEgPD0gY29weTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkyID49IGNvcHkyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgbGF0aW4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGxhdGluMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsIDwgYXN0cmFsMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA+PSBhc3RyYWwyKQorCiAKIGNsYXNzIFN0cmluZ01vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9wYXJzZXIoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQppbmRleCA5OWFhMDAzLi43MDdiMzBlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKQEAgLTIxLDcgKzIxLDcgQEAKIGNsYXNzIFVuaWNvZGVNZXRob2RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnYmY3YTc4ZjFhNTMyNDIxYjUwMzM2MDAxMDJlMjNhOTIwNDRkYmJhOScKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2U3NGU4NzhkZTcxYjZlNzgwZmZhYzI3MTc4NWMzY2I1OGY2MjUxZjMnCiAKICAgICBkZWYgdGVzdF9tZXRob2RfY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGggPSBoYXNobGliLnNoYTEoKQpAQCAtODAsNyArODAsNyBAQAogY2xhc3MgVW5pY29kZUZ1bmN0aW9uc1Rlc3QoVW5pY29kZURhdGFiYXNlVGVzdCk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnMTdmZTJmMTJiNzg4ZTRmZmY1NDc5YjQ2OWM0NDA0YmI2ZWNmODQxZicKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2YwYjc0ZDI2Nzc2MzMxY2M3YmRjM2E0Njk4ZjAzN2Q3M2YyY2VlMmInCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKaW5kZXggN2EzNGEwNS4uOTRmNjQwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKQEAgLTE2LDYgKzE2LDcgQEAKIGZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKIGltcG9ydCBjb2xsZWN0aW9ucwogCisKIGRlZiBoZXhlc2NhcGUoY2hhcik6CiAgICAgIiIiRXNjYXBlIGNoYXIgYXMgUkZDIDIzOTYgc3BlY2lmaWVzIiIiCiAgICAgaGV4X3JlcHIgPSBoZXgob3JkKGNoYXIpKVsyOl0udXBwZXIoKQpAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfcmVhZChiIjEuMSIpCiAKICAgICBkZWYgdGVzdF9yZWFkX2JvZ3VzKHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIE9TRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnJ0hUVFAvMS4xIDQwMSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZAogRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKIFNlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKQEAgLTI0NiwxMiArMjQ3LDEyIEBACiBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCiAnJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9yZWRpcmVjdChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBPU0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgogICAgICAgICBzZWxmLmZha2VodHRwKGInJydIVFRQLzEuMSAzMDIgRm91bmQKIERhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCiBTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCkBAIC0yNjYsMTkgKzI2NywyMCBAQAogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3NvY2tldChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIElPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CisgICAgICAgICMgdXJsb3BlbigpIHJhaXNlcyBPU0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBkb2VzIG5vdCBzZW5kIGFueQogICAgICAgICAjIGRhdGEuICgjMTY4MDIzMCkKICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9taXNzaW5nX2xvY2FsZmlsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciAjMTA4MzYKLSAgICAgICAgIyAzLjMgLSBVUkxFcnJvciBpcyBub3QgY2FwdHVyZWQsIGV4cGxpY2l0IElPRXJyb3IgaXMgcmFpc2VkLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4oJ2ZpbGU6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAgICAgZGVmIHRlc3RfZmlsZV9ub3RleGlzdHMoc2VsZik6CiAgICAgICAgIGZkLCB0bXBfZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQpAQCAtMjkxLDIwICsyOTMsMjEgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgb3MudW5saW5rKHRtcF9maWxlKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9maWxlKSkKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpOgogICAgICAgICAgICAgdXJsb3Blbih0bXBfZmlsZXVybCkKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub2hvc3Qoc2VsZik6CiAgICAgICAgIHRlc3RfZnRwX3VybCA9ICdmdHA6Ly8vcGF0aCcKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKHRlc3RfZnRwX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub25leGlzdGluZyhzZWxmKToKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKCdmdHA6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogCiAgICAgZGVmIHRlc3RfdXNlcnBhc3NfaW51cmwoc2VsZik6CkBAIC0zNDEsNiArMzQ0LDc5IEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIoKQogCitjbGFzcyB1cmxvcGVuX0RhdGFUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGRhdGEgVVJMLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIHRleHQgY29udGFpbmluZyBVUkwgc3BlY2lhbC0gYW5kIHVuaWNvZGUtY2hhcmFjdGVycworICAgICAgICBzZWxmLnRleHQgPSAidGVzdCBkYXRhIFVSTHMgOjssJT0mIFx1MDBmNiBcdTAwYzQgIgorICAgICAgICAjIDJ4MSBwaXhlbCBSR0IgUE5HIGltYWdlIHdpdGggb25lIGJsYWNrIGFuZCBvbmUgd2hpdGUgcGl4ZWwKKyAgICAgICAgc2VsZi5pbWFnZSA9ICgKKyAgICAgICAgICAgIGInXHg4OVBOR1xyXG5ceDFhXG5ceDAwXHgwMFx4MDBccklIRFJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwOFx4MDJceDAwXHgwMFx4MDB7QFx4ZThceGRkXHgwMFx4MDBceDAwXHgwMXNSR0JceDAwXHhhZScKKyAgICAgICAgICAgIGInXHhjZVx4MWNceGU5XHgwMFx4MDBceDAwXHgwZklEQVRceDA4XHhkN2NgYGBceGY4XHhmZlx4ZmY/XHgwMCcKKyAgICAgICAgICAgIGInXHgwNlx4MDFceDAyXHhmZVxuby9ceDFlXHgwMFx4MDBceDAwXHgwMElFTkRceGFlQmBceDgyJykKKworICAgICAgICBzZWxmLnRleHRfdXJsID0gKAorICAgICAgICAgICAgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVURi04LHRlc3QlMjBkYXRhJTIwVVJMcyUyMCUzQSUzQiUyQyUyNSUzIgorICAgICAgICAgICAgIkQlMjYlMjAlQzMlQjYlMjAlQzMlODQlMjAiKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCA9ICgKKyAgICAgICAgICAgICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1JU08tODg1OS0xO2Jhc2U2NCxkR1Z6ZENCa1lYUmhJRlZTVEhNZ09qcyIKKyAgICAgICAgICAgICJzSlQwbUlQWWd4Q0ElM0QiKQorICAgICAgICAjIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMIHRoYXQgY29udGFpbnMgaWdub3JhYmxlIHNwYWNlcywKKyAgICAgICAgIyBzdWNoIGFzICJcbiIsICIgIiwgIiUwQSIsIGFuZCAiJTIwIi4KKyAgICAgICAgc2VsZi5pbWFnZV91cmwgPSAoCisgICAgICAgICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFCQ0FJQUFBQjdcbiIKKyAgICAgICAgICAgICJRT2pkQUFBQUFYTlNSMElBcnM0YzZRQUFBQTlKUkVGVUNOZGolMEFZR0JnJTJCUC8vUHdBR0FRTCUyQkNtOCAiCisgICAgICAgICAgICAidkhnQUFBQUJKUlU1RXJrSmdnZyUzRCUzRCUwQSUyMCIpCisKKyAgICAgICAgc2VsZi50ZXh0X3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLnRleHRfdXJsKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0KQorICAgICAgICBzZWxmLmltYWdlX3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLmltYWdlX3VybCkKKworICAgIGRlZiB0ZXN0X2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgb2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBoYXMgdGhlIHNwZWNpZmllZCBtZXRob2RzCisgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYudGV4dF91cmxfcmVzcCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgbGFja3MgJXMgYXR0cmlidXRlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRleHRfdXJsX3Jlc3AuaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ0lTTy04ODU5LTEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5pbmZvKClbJ2NvbnRlbnQtbGVuZ3RoJ10sCisgICAgICAgICAgICBzdHIobGVuKHNlbGYuaW1hZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJkYXRhOiwiKS5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ1VTLUFTQ0lJJyldKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi50ZXh0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmdldHVybCgpLAorICAgICAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi5pbWFnZV91cmwpCisKKyAgICBkZWYgdGVzdF9yZWFkX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpKVsnY2hhcnNldCddKSwgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0X2Jhc2U2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSlbJ2NoYXJzZXQnXSksCisgICAgICAgICAgICBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AucmVhZCgpLCBzZWxmLmltYWdlKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19jb21tYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIucmVxdWVzdC51cmxvcGVuLCdkYXRhOnRleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9iYXNlNjRfZGF0YShzZWxmKToKKyAgICAgICAgIyBtaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnJlcXVlc3QudXJsb3BlbiwnZGF0YTo7YmFzZTY0LENnPScpCisKIGNsYXNzIHVybHJldHJpZXZlX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSBvbiBsb2NhbCBmaWxlcyIiIgogCkBAIC0xMjkxLDYgKzEzNjcsNyBAQAogIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAjICAgICAgICAgZnRwLmNsb3NlKCkKIAorCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlVuaXQgdGVzdHMgZm9yIHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCAzM2Y5MGY0Li5kYmQxYzYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAjIFRoZSBwcm94eSBieXBhc3MgbWV0aG9kIGltcG9ydGVkIGJlbG93IGhhcyBsb2dpYyBzcGVjaWZpYyB0byB0aGUgT1NYCiAjIHByb3h5IGNvbmZpZyBkYXRhIHN0cnVjdHVyZSBidXQgaXMgdGVzdGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yLCBfcHJveHlfYnlwYXNzX21hY29zeF9zeXNjb25mCitmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKIGltcG9ydCB1cmxsaWIuZXJyb3IKIAogIyBYWFgKQEAgLTExOCw2ICsxMTksMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLmdldF9oZWFkZXIoIk5vdC10aGVyZSIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAKKyAgICAgICAgcmVxLnJlbW92ZV9oZWFkZXIoIlNwYW0tZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxLmhhc19oZWFkZXIoIlNwYW0tZWdncyIpKQorCisgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iLCAiRWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKSkKKworICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQorCiAKICAgICBkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICBtZ3IgPSB1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3IoKQpAQCAtMjgzLDYgKzI5Myw3IEBACiAgICAgICAgIHNlbGYucmVxX2hlYWRlcnMgPSBbXQogICAgICAgICBzZWxmLmRhdGEgPSBOb25lCiAgICAgICAgIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVycyA9IEZhbHNlCisgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMgPSB7fQogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGhvc3QsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKQEAgLTMxMCw4ICszMjEsNyBAQAogICAgICAgICBpZiBib2R5OgogICAgICAgICAgICAgc2VsZi5kYXRhID0gYm9keQogICAgICAgICBpZiBzZWxmLnJhaXNlX29uX2VuZGhlYWRlcnM6Ci0gICAgICAgICAgICBpbXBvcnQgc29ja2V0Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgZGVmIGdldHJlc3BvbnNlKHNlbGYpOgogICAgICAgICByZXR1cm4gTW9ja0hUVFBSZXNwb25zZShNb2NrRmlsZSgpLCB7fSwgMjAwLCAiT0siKQogCkBAIC01OTYsMjcgKzYwNiw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3NbMV0gaXMgTm9uZSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGFyZ3NbMV0sIE1vY2tSZXNwb25zZSkpCiAKLSAgICBkZWYgdGVzdF9tZXRob2RfZGVwcmVjYXRpb25zKHNlbGYpOgotICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIikKLQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5hZGRfZGF0YSgiZGF0YSIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9kYXRhKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuaGFzX2RhdGEoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfaG9zdCgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9zZWxlY3RvcigpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmlzX3VudmVyaWZpYWJsZSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9vcmlnaW5fcmVxX2hvc3QoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfdHlwZSgpCi0KLQogZGVmIHNhbmVwYXRobmFtZTJ1cmwocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBwYXRoLmVuY29kZSgidXRmLTgiKQpAQCAtODExLDcgKzgwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkZvbyIsICJiYXIiKSwgKCJTcGFtIiwgImVnZ3MiKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAuZGF0YSwgZGF0YSkKIAotICAgICAgICAjIGNoZWNrIHNvY2tldC5lcnJvciBjb252ZXJ0ZWQgdG8gVVJMRXJyb3IKKyAgICAgICAgIyBjaGVjayBPU0Vycm9yIGNvbnZlcnRlZCB0byBVUkxFcnJvcgogICAgICAgICBodHRwLnJhaXNlX29uX2VuZGhlYWRlcnMgPSBUcnVlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvciwgaC5kb19vcGVuLCBodHRwLCByZXEpCiAKQEAgLTkxNiw2ICs5MDUsMzYgQEAKICAgICAgICAgICAgIHBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKIAorICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX3NldHRlcihzZWxmKToKKyAgICAgICAgIyBDaGVja3MgdG8gZW5zdXJlIHRoYXQgY29tcG9uZW50cyBhcmUgc2V0IGNvcnJlY3RseSBhZnRlciBzZXR0aW5nIHRoZQorICAgICAgICAjIGZ1bGxfdXJsIG9mIGEgUmVxdWVzdCBvYmplY3QKKworICAgICAgICB1cmxzID0gWworICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyI2JheicsCisgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXImc3BhbT1lZ2dzI2Jhc2gnLAorICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgIF0KKworICAgICAgICAjIHRlc3RpbmcgYSByZXVzYWJsZSByZXF1ZXN0IGluc3RhbmNlLCBidXQgdGhlIHVybCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyByZXF1aXJlZCwgc28ganVzdCB1c2UgYSBkdW1teSBvbmUgdG8gaW5zdGFudGlhdGUKKyAgICAgICAgciA9IFJlcXVlc3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScpCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHIuZnVsbF91cmwgPSB1cmwKKyAgICAgICAgICAgIHBhcnNlZCA9IHVybHBhcnNlKHVybCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldF9mdWxsX3VybCgpLCB1cmwpCisgICAgICAgICAgICAjIGZ1bGxfdXJsIHNldHRlciB1c2VzIHNwbGl0dGFnIHRvIHNwbGl0IGludG8gY29tcG9uZW50cy4KKyAgICAgICAgICAgICMgc3BsaXR0YWcgc2V0cyB0aGUgZnJhZ21lbnQgYXMgTm9uZSB3aGlsZSB1cmxwYXJzZSBzZXRzIGl0IHRvICcnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZnJhZ21lbnQgb3IgJycsIHBhcnNlZC5mcmFnbWVudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2Uoci5nZXRfZnVsbF91cmwoKSkucXVlcnksIHBhcnNlZC5xdWVyeSkKKworICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX2RlbGV0ZXIoc2VsZik6CisgICAgICAgIHIgPSBSZXF1ZXN0KCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKKyAgICAgICAgZGVsIHIuZnVsbF91cmwKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mdWxsX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNlbGVjdG9yLCAnJykKKwogICAgIGRlZiB0ZXN0X2ZpeHBhdGhfaW5fd2VpcmR1cmxzKHNlbGYpOgogICAgICAgICAjIElzc3VlNDQ5MzogdXJsbGliMiB0byBzdXBwbHkgJy8nIHdoZW4gdG8gdXJscyB3aGVyZSBwYXRoIGRvZXMgbm90CiAgICAgICAgICMgc3RhcnQgd2l0aCcvJwpAQCAtMTQxNSw2ICsxNDM0LDIxIEBACiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15SFRUUEhhbmRsZXIpCiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15T3RoZXJIVFRQSGFuZGxlcikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIG5ldHdvcmsgYWNjZXNzJykKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDY0KHNlbGYpOgorICAgICAgICBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoKQorICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0LmRhdGEpCisKKyAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEiLCByZXF1ZXN0LmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEiLCByZXF1ZXN0LmdldF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpCisKKyAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEyMzQ1Njc4OTAiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEyMzQ1Njc4OTAiLCByZXF1ZXN0LmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEwIiwgcmVxdWVzdC5nZXRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKQorCiAgICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIElzc3VlIDEzMjExIHJldmVhbHMgdGhhdCBIVFRQRXJyb3IgZGlkbid0IGltcGxlbWVudCB0aGUgVVJMRXJyb3IKQEAgLTE0MjYsMjMgKzE0NjAsMzEgQEAKICAgICAgICAgZXJyID0gdXJsbGliLmVycm9yLkhUVFBFcnJvcih1cmwsIGNvZGUsIG1zZywgaGRycywgZnApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ3JlYXNvbicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5yZWFzb24sICdzb21ldGhpbmcgYmFkIGhhcHBlbmVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGRycycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZHJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGVhZGVycycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZWFkZXJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKICAgICAgICAgZXhwZWN0ZWRfZXJybXNnID0gJ0hUVFAgRXJyb3IgJXM6ICVzJyAlIChlcnIuY29kZSwgZXJyLm1zZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgZXhwZWN0ZWRfZXJybXNnKQogCi0KIGNsYXNzIFJlcXVlc3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgUHV0UmVxdWVzdChSZXF1ZXN0KToKKyAgICAgICAgbWV0aG9kPSdQVVQnCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0ID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKICAgICAgICAgc2VsZi5wb3N0ID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17IlgtVGVzdCI6ICJ0ZXN0In0pCisgICAgICAgIHNlbGYuaGVhZCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsIG1ldGhvZD0nSEVBRCcpCisgICAgICAgIHNlbGYucHV0ID0gc2VsZi5QdXRSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iKQorICAgICAgICBzZWxmLmZvcmNlX3Bvc3QgPSBzZWxmLlB1dFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCisgICAgICAgICAgICBtZXRob2Q9IlBPU1QiKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5wb3N0LmdldF9tZXRob2QoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiR0VUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJIRUFEIiwgc2VsZi5oZWFkLmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUFVUIiwgc2VsZi5wdXQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5mb3JjZV9wb3N0LmdldF9tZXRob2QoKSkKIAogICAgIGRlZiB0ZXN0X2RhdGEoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5nZXQuZGF0YSkKQEAgLTE0NTEsNiArMTQ5MywyNSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5nZXQuZGF0YSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKIAorICAgICMgaXNzdWUgMTY0NjQKKyAgICAjIGlmIHdlIGNoYW5nZSBkYXRhIHdlIG5lZWQgdG8gcmVtb3ZlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcgorICAgICMgKGNhdXNlIGl0J3MgbW9zdCBwcm9iYWJseSBjYWxjdWxhdGVkIGZvciBwcmV2aW91cyB2YWx1ZSkKKyAgICBkZWYgdGVzdF9zZXR0aW5nX2RhdGFfc2hvdWxkX3JlbW92ZV9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgc2VsZi5nZXQuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LWxlbmd0aCJdKQorICAgICAgICBzZWxmLmdldC5kYXRhID0gInNwYW0iCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisKKyAgICAjIGlzc3VlIDE3NDg1IHNhbWUgZm9yIGRlbGV0aW5nIGRhdGEuCisgICAgZGVmIHRlc3RfZGVsZXRpbmdfZGF0YV9zaG91bGRfcmVtb3ZlX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICBzZWxmLmdldC5kYXRhID0gJ2ZvbycKKyAgICAgICAgc2VsZi5nZXQuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSkKKyAgICAgICAgZGVsIHNlbGYuZ2V0LmRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKwogICAgIGRlZiB0ZXN0X2dldF9mdWxsX3VybChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldC5nZXRfZnVsbF91cmwoKSkKQEAgLTE0OTIsMjEgKzE1NTMsMTMgQEAKICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCB1cmwpCiAKLSAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlX2NhbGwoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBJc3N1ZSAxNTcwMSAtIEhUVFBFcnJvciBpbnRlcmZhY2UgaGFzIGluZm8gbWV0aG9kIGF2YWlsYWJsZSBmcm9tIFVSTEVycm9yCi0gICAgICAgICIiIgotICAgICAgICBlcnIgPSB1cmxsaWIucmVxdWVzdC5IVFRQRXJyb3IobXNnPSJzb21ldGhpbmcgYmFkIGhhcHBlbmVkIiwgdXJsPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU9Tm9uZSwgaGRycz0nQ29udGVudC1MZW5ndGg6NDInLCBmcD1Ob25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdyZWFzb24nKSkKLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAncmVhc29uJykKLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAnaW5mbycpCi0gICAgICAgIGFzc2VydCBjYWxsYWJsZShlcnIuaW5mbykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXJyLmluZm8oKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ2Vyci5pbmZvIGNhbGwgZmFpbGVkLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmluZm8oKSwgIkNvbnRlbnQtTGVuZ3RoOjQyIikKKyAgICBkZWYgdGVzdF91cmxfZnVsbHVybF9nZXRfZnVsbF91cmwoc2VsZik6CisgICAgICAgIHVybHMgPSBbJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcnLAorICAgICAgICAgICAgICAgICdodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXJsbGliMi5odG1sI09LJywKKyAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy5weXRob24ub3JnLz9xcz1xdWVyeSNmcmFnbWVudD10cnVlJyBdCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2Z1bGxfdXJsKCksIHJlcS5mdWxsX3VybCkKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF91cmxsaWIyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKaW5kZXggOTExMmU1MC4uMDgyNTBjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtOSw3ICs5LDEwIEBACiBpbXBvcnQgaGFzaGxpYgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCi0KK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQogCiBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdsb2NhbGhvc3QnCkBAIC0xNyw2ICsyMCw3IEBACiAjIFNlbGYtc2lnbmVkIGNlcnQgZmlsZSBmb3IgJ2Zha2Vob3N0bmFtZScKIENFUlRfZmFrZWhvc3RuYW1lID0gb3MucGF0aC5qb2luKGhlcmUsICdrZXljZXJ0Mi5wZW0nKQogCisKICMgTG9vcGJhY2sgaHR0cCBzZXJ2ZXIgaW5mcmFzdHJ1Y3R1cmUKIAogY2xhc3MgTG9vcGJhY2tIdHRwU2VydmVyKGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgpAQCAtMzg5LDE0ICszOTMsMTQgQEAKICAgICAgICAgaGFuZGxlci5wb3J0ID0gcG9ydAogICAgICAgICByZXR1cm4gaGFuZGxlcgogCi0gICAgZGVmIHN0YXJ0X2h0dHBzX3NlcnZlcihzZWxmLCByZXNwb25zZXM9Tm9uZSwgY2VydGZpbGU9Q0VSVF9sb2NhbGhvc3QpOgorICAgIGRlZiBzdGFydF9odHRwc19zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIodXJsbGliLnJlcXVlc3QsICdIVFRQU0hhbmRsZXInKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3NzbCBzdXBwb3J0IHJlcXVpcmVkJykKICAgICAgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgogICAgICAgICBpZiByZXNwb25zZXMgaXMgTm9uZToKICAgICAgICAgICAgIHJlc3BvbnNlcyA9IFsoMjAwLCBbXSwgYiJ3ZSBjYXJlIGEgYml0IildCiAgICAgICAgIGhhbmRsZXIgPSBHZXRSZXF1ZXN0SGFuZGxlcihyZXNwb25zZXMpCi0gICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlLCBoYW5kbGVyX2NsYXNzPWhhbmRsZXIpCisgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGhhbmRsZXJfY2xhc3M9aGFuZGxlciwgKiprd2FyZ3MpCiAgICAgICAgIGhhbmRsZXIucG9ydCA9IHNlcnZlci5wb3J0CiAgICAgICAgIHJldHVybiBoYW5kbGVyCiAKQEAgLTQ4Niw2ICs0OTAsMjEgQEAKICAgICAgICAgICAgIHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZSIgJSBoYW5kbGVyLnBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FkZWZhdWx0PVRydWUpCiAKKyAgICBkZWYgdGVzdF9odHRwc19zbmkoc2VsZik6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic3NsIG1vZHVsZSByZXF1aXJlZCIpCisgICAgICAgIGlmIG5vdCBzc2wuSEFTX1NOSToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNOSSBzdXBwb3J0IHJlcXVpcmVkIGluIE9wZW5TU0wiKQorICAgICAgICBzbmlfbmFtZSA9IE5vbmUKKyAgICAgICAgZGVmIGNiX3NuaShzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICBub25sb2NhbCBzbmlfbmFtZQorICAgICAgICAgICAgc25pX25hbWUgPSBzZXJ2ZXJfbmFtZQorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3NuaSkKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfaHR0cHNfc2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2VydGZpbGU9Q0VSVF9sb2NhbGhvc3QpCisgICAgICAgIHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuaV9uYW1lLCAibG9jYWxob3N0IikKKwogICAgIGRlZiB0ZXN0X3NlbmRpbmdfaGVhZGVycyhzZWxmKToKICAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKCkKICAgICAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL2xvY2FsaG9zdDolcy8iICUgaGFuZGxlci5wb3J0LApAQCAtNTMyLDcgKzU1MSw3IEBACiAgICAgICAgICMgc28gd2UgcnVuIHRoZSB0ZXN0IG9ubHkgd2hlbiAtdW5ldHdvcmsvLXVhbGwgaXMgc3BlY2lmaWVkIHRvCiAgICAgICAgICMgbWl0aWdhdGUgdGhlIHByb2JsZW0gYSBiaXQgKHNlZSAjMTc1NjQpCiAgICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdpdmVuIHRoYXQgYm90aCBWZXJpU2lnbiBhbmQgdmFyaW91cyBJU1BzIGhhdmUgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgcGFzdCBvciBhcmUgcHJlc2VudGx5IGhpamFja2luZyB2YXJpb3VzIGludmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb21haW4gbmFtZSByZXF1ZXN0cyBpbiBhbiBhdHRlbXB0IHRvIGJvb3N0IHRyYWZmaWMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQppbmRleCA3ZjNjOTNhLi5mYmEzY2VhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CkBAIC0xNjQsNiArMTY0LDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXR1cmwoKSwKICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI2dsb3NzYXJ5IikKIAorICAgIGRlZiB0ZXN0X3JlZGlyZWN0X3VybF93aXRoZnJhZyhzZWxmKToKKyAgICAgICAgcmVkaXJlY3RfdXJsX3dpdGhfZnJhZyA9ICJodHRwOi8vYml0bHkuY29tL3VybGxpYnJlZGlyZWN0dGVzdCIKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChyZWRpcmVjdF91cmxfd2l0aF9mcmFnKToKKyAgICAgICAgICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QocmVkaXJlY3RfdXJsX3dpdGhfZnJhZykKKyAgICAgICAgICAgIHJlcyA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0dXJsKCksCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC9nbG9zc2FyeS5odG1sI3Rlcm0tZ2xvYmFsLWludGVycHJldGVyLWxvY2siKQorCiAgICAgZGVmIHRlc3RfY3VzdG9tX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CkBAIC0yMTYsNyArMjI0LDcgQEAKICAgICAgICAgICAgICAgICBkZWJ1Zyh1cmwpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBmID0gdXJsb3Blbih1cmwsIHJlcSwgVElNRU9VVCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhlcnIpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2VycjoKICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKQEAgLTMzMCwzNSArMzM4LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5yYXcuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKIAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJyZXF1aXJlcyBTU0wgc3VwcG9ydCIpCi1jbGFzcyBIVFRQU1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3NuaShzZWxmKToKLSAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBkaXNhYmxlZCAtIHRlc3Qgc2VydmVyIG5lZWRlZCIpCi0gICAgICAgICMgQ2hlY2tzIHRoYXQgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiB3b3JrcywgaWYgc3VwcG9ydGVkIGJ5IHRoZQotICAgICAgICAjIE9wZW5TU0wgbGlua2VkIHRvLgotICAgICAgICAjIFRoZSBzc2wgbW9kdWxlIGl0c2VsZiBkb2Vzbid0IGhhdmUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgU05JLAotICAgICAgICAjIHNvIHdlIHJlbHkgb24gYSB0aGlyZC1wYXJ0eSB0ZXN0IHNpdGUuCi0gICAgICAgIGV4cGVjdF9zbmkgPSBzc2wuSEFTX1NOSQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJYWFgiKToKLSAgICAgICAgICAgIHUgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJYWFgiKQotICAgICAgICAgICAgY29udGVudHMgPSB1LnJlYWRhbGwoKQotICAgICAgICAgICAgaWYgZXhwZWN0X3NuaToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBdXRoVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFNUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlck5ldHdvcmtUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVNvY2tldFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CmluZGV4IDIwZWZjYTYuLmI2ODg4ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CkBAIC0xMjQsMTYgKzEyNCwxNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBUaGlzIGhhcHBlbnMgd2l0aCBzb21lIG92ZXJ6ZWFsb3VzIEROUyBwcm92aWRlcnMgc3VjaCBhcyBPcGVuRE5TCiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBzaG91bGQgbm90IHJlc29sdmUgZm9yIHRlc3QgdG8gd29yayIgJSBib2d1c19kb21haW4pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBoaWdoamFja2luZyBpbnZhbGlkIC5jb20gYW5kIC5uZXQgYWRkcmVzc2VzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgYm9vc3QgdHJhZmZpYyB0byB0aGVpciBvd24gc2l0ZS4gIFRoaXMgdGVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbWFpbiB3aWxsIGJlIHNwYXJlZCB0byBzZXJ2ZSBpdHMgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHB1cnBvc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgdXJsbGliLnVybG9wZW4sICJodHRwOi8vd3d3LnNhZGZsa2pzYXNhZGYuY29tLyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCisgICAgICAgIGZhaWx1cmVfZXhwbGFuYXRpb24gPSAoJ29wZW5pbmcgYW4gaW52YWxpZCBVUkwgZGlkIG5vdCByYWlzZSBPU0Vycm9yOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbiBiZSBjYXVzZWQgYnkgYSBicm9rZW4gRE5TIHNlcnZlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhlLmcuIHJldHVybnMgNDA0IG9yIGhpamFja3MgcGFnZSknKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1mYWlsdXJlX2V4cGxhbmF0aW9uKToKKyAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQgaGlnaGphY2tpbmcKKyAgICAgICAgICAgICMgaW52YWxpZCAuY29tIGFuZCAubmV0IGFkZHJlc3NlcyB0byBib29zdCB0cmFmZmljIHRvIHRoZWlyIG93bgorICAgICAgICAgICAgIyBzaXRlLiAgVGhpcyB0ZXN0IHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAorICAgICAgICAgICAgIyBkb21haW4gd2lsbCBiZSBzcGFyZWQgdG8gc2VydmUgaXRzIGRlZmluZWQgcHVycG9zZS4KKyAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQvIikKIAogCiBjbGFzcyB1cmxyZXRyaWV2ZU5ldHdvcmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQppbmRleCAzNzhhNDI3Li5jOTM4ZjA5IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKQEAgLTg0Nyw2ICs4NDcsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnODYzLTEyMzQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJ3Bob25lLWNvbnRleHQ9KzEtOTE0LTU1NScpCiAKKyAgICBkZWYgdGVzdF91bndyYXAoc2VsZik6CisgICAgICAgIHVybCA9IHVybGxpYi5wYXJzZS51bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybCwgJ3R5cGU6Ly9ob3N0L3BhdGgnKQorCisgICAgZGVmIHRlc3RfUXVvdGVyX3JlcHIoc2VsZik6CisgICAgICAgIHF1b3RlciA9IHVybGxpYi5wYXJzZS5RdW90ZXIodXJsbGliLnBhcnNlLl9BTFdBWVNfU0FGRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUXVvdGVyJywgcmVwcihxdW90ZXIpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVcmxQYXJzZVRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKaW5kZXggMTM3YzQ0NS4uMmNhOTkyOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CkBAIC00NSw3ICs0NSw4IEBACiAgICAgICAgICMgVGVzdCBfX3JlcHJfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1MCksIHN0cihkMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1MSksIHJlcHIoZDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodTIpLCByZXByKGQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXByKHUyKSwgKCJ7J29uZSc6IDEsICd0d28nOiAyfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyd0d28nOiAyLCAnb25lJzogMX0iKSkKIAogICAgICAgICAjIFRlc3QgcmljaCBjb21wYXJpc29uIGFuZCBfX2xlbl9fCiAgICAgICAgIGFsbCA9IFtkMCwgZDEsIGQyLCB1LCB1MCwgdTEsIHUyLCB1dSwgdXUwLCB1dTEsIHV1Ml0KQEAgLTg5LDkgKzkwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChtMmEsIG0yKQogCiAgICAgICAgICMgVGVzdCBrZXlzLCBpdGVtcywgdmFsdWVzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIua2V5cygpLCBkMi5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIuaXRlbXMoKSwgZDIuaXRlbXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHUyLnZhbHVlcygpKSwgbGlzdChkMi52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHUyLmtleXMoKSksIHNvcnRlZChkMi5rZXlzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi5pdGVtcygpKSwgc29ydGVkKGQyLml0ZW1zKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi52YWx1ZXMoKSksIHNvcnRlZChkMi52YWx1ZXMoKSkpCiAKICAgICAgICAgIyBUZXN0ICJpbiIuCiAgICAgICAgIGZvciBpIGluIHUyLmtleXMoKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdmVudi5weSBiL0xpYi90ZXN0L3Rlc3RfdmVudi5weQppbmRleCAwZmFlODhiLi5mNTNlYjM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF92ZW52LnB5CkBAIC0xMiw5ICsxMiwxNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKGNhcHR1cmVkX3N0ZG91dCwgY2FwdHVyZWRfc3RkZXJyLCBydW5fdW5pdHRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbl9zeW1saW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5fc3ltbGluaywgRW52aXJvbm1lbnRWYXJHdWFyZCkKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHZlbnYKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitza2lwSW5WZW52ID0gdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdCBub3QgYXBwcm9wcmlhdGUgaW4gYSB2ZW52JykKKwogCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgdmVudiB0ZXN0cy4iIiIKQEAgLTgzLDggKzkxLDcgQEAKICAgICAgICAgICAgIHByaW50KCcgICAgJXInICUgb3MubGlzdGRpcihiZCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbiksICdGaWxlICVyIHNob3VsZCBleGlzdC4nICUgZm4pCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LCAnVGVzdCBub3QgYXBwcm9wcmlhdGUgJwotICAgICAgICAgICAgICAgICAgICAgJ2luIGEgdmVudicpCisgICAgQHNraXBJblZlbnYKICAgICBkZWYgdGVzdF9wcmVmaXhlcyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgcHJlZml4IHZhbHVlcyBhcmUgYXMgZXhwZWN0ZWQuCkBAIC0xMDksMTMgKzExNiw2OCBAQAogICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGV4cGVjdGVkLmVuY29kZSgpKQogCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIEVOVl9TVUJESVJTID0gKAorICAgICAgICAgICAgKCdTY3JpcHRzJywpLAorICAgICAgICAgICAgKCdJbmNsdWRlJywpLAorICAgICAgICAgICAgKCdMaWInLCksCisgICAgICAgICAgICAoJ0xpYicsICdzaXRlLXBhY2thZ2VzJyksCisgICAgICAgICkKKyAgICBlbHNlOgorICAgICAgICBFTlZfU1VCRElSUyA9ICgKKyAgICAgICAgICAgICgnYmluJywpLAorICAgICAgICAgICAgKCdpbmNsdWRlJywpLAorICAgICAgICAgICAgKCdsaWInLCksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ3NpdGUtcGFja2FnZXMnKSwKKyAgICAgICAgKQorCisgICAgZGVmIGNyZWF0ZV9jb250ZW50cyhzZWxmLCBwYXRocywgZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHNvbWUgZmlsZXMgaW4gdGhlIGVudmlyb25tZW50IHdoaWNoIGFyZSB1bnJlbGF0ZWQKKyAgICAgICAgdG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgICAgICIiIgorICAgICAgICBmb3Igc3ViZGlycyBpbiBwYXRoczoKKyAgICAgICAgICAgIGQgPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqc3ViZGlycykKKyAgICAgICAgICAgIG9zLm1rZGlyKGQpCisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihkLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInU3RpbGwgaGVyZT8nKQorCiAgICAgZGVmIHRlc3Rfb3ZlcndyaXRlX2V4aXN0aW5nKHNlbGYpOgogICAgICAgICAiIiIKLSAgICAgICAgVGVzdCBjb250cm9sIG9mIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGVudmlyb25tZW50IGRpcmVjdG9yeS4KKyAgICAgICAgVGVzdCBjcmVhdGluZyBlbnZpcm9ubWVudCBpbiBhbiBleGlzdGluZyBkaXJlY3RvcnkuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb250ZW50cyhzZWxmLkVOVl9TVUJESVJTLCAnZm9vJykKKyAgICAgICAgdmVudi5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm4pKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGInU3RpbGwgaGVyZT8nKQorCiAgICAgICAgIGJ1aWxkZXIgPSB2ZW52LkVudkJ1aWxkZXIoY2xlYXI9VHJ1ZSkKICAgICAgICAgYnVpbGRlci5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZuKSkKKworICAgIGRlZiBjbGVhcl9kaXJlY3Rvcnkoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZm4pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmbikgb3Igb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihmbik6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmbikKKworICAgIGRlZiB0ZXN0X3Vub3ZlcndyaXRhYmxlX2ZhaWxzKHNlbGYpOgorICAgICAgICAjY3JlYXRlIGEgZmlsZSBjbGFzaGluZyB3aXRoIGRpcmVjdG9yaWVzIGluIHRoZSBlbnYgZGlyCisgICAgICAgIGZvciBwYXRocyBpbiBzZWxmLkVOVl9TVUJESVJTWzozXToKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHNlbGYuZW52X2RpciwgKnBhdGhzKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLCB2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9kaXJlY3Rvcnkoc2VsZi5lbnZfZGlyKQogCiAgICAgZGVmIHRlc3RfdXBncmFkZShzZWxmKToKICAgICAgICAgIiIiCkBAIC0xNjIsOCArMjI0LDcgQEAKICAgICAjIHJ1biB0aGUgdGVzdCwgdGhlIHB5dmVudi5jZmcgaW4gdGhlIHZlbnYgY3JlYXRlZCBpbiB0aGUgdGVzdCB3aWxsCiAgICAgIyBwb2ludCB0byB0aGUgdmVudiBiZWluZyB1c2VkIHRvIHJ1biB0aGUgdGVzdCwgYW5kIHdlIGxvc2UgdGhlIGxpbmsKICAgICAjIHRvIHRoZSBzb3VyY2UgYnVpbGQgLSBzbyBQeXRob24gY2FuJ3QgaW5pdGlhbGlzZSBwcm9wZXJseS4KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LCAnVGVzdCBub3QgYXBwcm9wcmlhdGUgJwotICAgICAgICAgICAgICAgICAgICAgJ2luIGEgdmVudicpCisgICAgQHNraXBJblZlbnYKICAgICBkZWYgdGVzdF9leGVjdXRhYmxlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBzeXMuZXhlY3V0YWJsZSB2YWx1ZSBpcyBhcyBleHBlY3RlZC4KQEAgLTE5Miw4ICsyNTMsNzMgQEAKICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZW52cHkuZW5jb2RlKCkpCiAKKworQHNraXBJblZlbnYKK2NsYXNzIEVuc3VyZVBpcFRlc3QoQmFzZVRlc3QpOgorICAgICIiIlRlc3QgdmVudiBtb2R1bGUgaW5zdGFsbGF0aW9uIG9mIHBpcC4iIiIKKworICAgIGRlZiB0ZXN0X25vX3BpcF9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICB0cnlfaW1wb3J0ID0gJ3RyeTpcbiBpbXBvcnQgcGlwXG5leGNlcHQgSW1wb3J0RXJyb3I6XG4gcHJpbnQoIk9LIiknCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1jJywgdHJ5X2ltcG9ydF0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiIk9LIikKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X25vX3BpcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyLCB3aXRoX3BpcD1GYWxzZSkKKyAgICAgICAgZW52cHkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWFscGF0aChzZWxmLmVudl9kaXIpLCBzZWxmLmJpbmRpciwgc2VsZi5leGUpCisgICAgICAgIHRyeV9pbXBvcnQgPSAndHJ5OlxuIGltcG9ydCBwaXBcbmV4Y2VwdCBJbXBvcnRFcnJvcjpcbiBwcmludCgiT0siKScKKyAgICAgICAgY21kID0gW2VudnB5LCAnLWMnLCB0cnlfaW1wb3J0XQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGIiT0siKQorCisgICAgIyBUZW1wb3Jhcnkgc2tpcCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzQ0CisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ3BpcCBuZWVkcyBTU0wgc3VwcG9ydCcpCisgICAgZGVmIHRlc3Rfd2l0aF9waXAoc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZ2YXJzOgorICAgICAgICAgICAgIyBwaXAncyBjcm9zcy12ZXJzaW9uIGNvbXBhdGliaWxpdHkgbWF5IHRyaWdnZXIgZGVwcmVjYXRpb24KKyAgICAgICAgICAgICMgd2FybmluZ3MgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBQeXRob24uIEVuc3VyZSByZWxhdGVkCisgICAgICAgICAgICAjIGVudmlyb25tZW50IHNldHRpbmdzIGRvbid0IGNhdXNlIHZlbnYgdG8gZmFpbC4KKyAgICAgICAgICAgIGVudnZhcnNbIlBZVEhPTldBUk5JTkdTIl0gPSAiZSIKKyAgICAgICAgICAgICMgcGlwIGRvZXNuJ3QgaWdub3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aGVuIHJ1bm5pbmcgaW4KKyAgICAgICAgICAgICMgaXNvbGF0ZWQgbW9kZSwgYW5kIHdlIGRvbid0IGhhdmUgYW4gYWN0aXZlIHZpcnR1YWxlbnYgaGVyZQorICAgICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzM0IGZvciBkZXRhaWxzCisgICAgICAgICAgICBkZWwgZW52dmFyc1siUElQX1JFUVVJUkVfVklSVFVBTEVOViJdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIsIHdpdGhfcGlwPVRydWUpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICMgVGhlIG91dHB1dCB0aGlzIHByb2R1Y2VzIGNhbiBiZSBhIGxpdHRsZSBoYXJkIHRvIHJlYWQsIGJ1dAorICAgICAgICAgICAgICAgICMgbGVhc3QgaXQgaGFzIGFsbCB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIGRldGFpbHMgPSBleGMub3V0cHV0LmRlY29kZShlcnJvcnM9InJlcGxhY2UiKQorICAgICAgICAgICAgICAgIG1zZyA9ICJ7fVxuXG4qKlN1YnByb2Nlc3MgT3V0cHV0Kipcbnt9Ii5mb3JtYXQoZXhjLCBkZXRhaWxzKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICBjbWQgPSBbZW52cHksICctSW0nLCAncGlwJywgJy0tdmVyc2lvbiddCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgZW52X2RpciA9IG9zLmZzZW5jb2RlKHNlbGYuZW52X2RpcikuZGVjb2RlKCJsYXRpbi0xIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5zdGFydHN3aXRoKCJwaXAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlbnZfZGlyLCBvdXQpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChCYXNpY1Rlc3QpCisgICAgcnVuX3VuaXR0ZXN0KEJhc2ljVGVzdCwgRW5zdXJlUGlwVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YWl0My5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKaW5kZXggYmQwNmM4ZC4uZjZhMDY1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YWl0My5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CkBAIC03LDE1ICs3LDExIEBACiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgogCi10cnk6Ci0gICAgb3MuZm9yawotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5mb3JrIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDMiKQoraWYgbm90IGhhc2F0dHIob3MsICdmb3JrJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQiKQogCi10cnk6Ci0gICAgb3Mud2FpdDMKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ3dhaXQzJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLndhaXQzIG5vdCBkZWZpbmVkIikKIAogY2xhc3MgV2FpdDNUZXN0KEZvcmtXYWl0KToKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKaW5kZXggOWY2ZDc3NS4uODc0NjNhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CkBAIC0zMzAsNiArMzMwLDE5IEBACiAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gbW9kdWxlX25hbWUKICAgICAgICAgICAgIHN5cy5hcmd2ID0gYXJndgogCisgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF9ub25fYXNjaWlfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCJub25hc2NpaVx4ZTlcdTIwYWMiLCAic3Vycm9nYXRlXHVkYzgwIik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5mc2VuY29kZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQoInRleHQiLCBVc2VyV2FybmluZywgZmlsZW5hbWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgZmlsZW5hbWUpCisKICAgICBkZWYgdGVzdF93YXJuX2V4cGxpY2l0X3R5cGVfZXJyb3JzKHNlbGYpOgogICAgICAgICAjIHdhcm5fZXhwbGljaXQoKSBzaG91bGQgZXJyb3Igb3V0IGdyYWNlZnVsbHkgaWYgaXQgaXMgZ2l2ZW4gb2JqZWN0cwogICAgICAgICAjIG9mIHRoZSB3cm9uZyB0eXBlcy4KQEAgLTc4Nyw2ICs4MDAsMjUgQEAKICAgICAgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRjb2RlLCAwKQogCitjbGFzcyBGaW5hbGl6YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maW5hbGl6YXRpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDIxOiB3YXJuaW5ncy53YXJuKCkgc2hvdWxkIG5vdCBjcmFzaAorICAgICAgICAjIGR1cmluZyBQeXRob24gZmluYWxpemF0aW9uCisgICAgICAgIGNvZGUgPSAiIiIKK2ltcG9ydCB3YXJuaW5ncword2FybiA9IHdhcm5pbmdzLndhcm4KKworY2xhc3MgQToKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgd2FybigidGVzdCIpCisKK2E9QSgpCisgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgICMgbm90ZTogIl9fbWFpbl9fIiBmaWxlbmFtZSBpcyBub3QgY29ycmVjdCwgaXQgc2hvdWxkIGJlIHRoZSBuYW1lCisgICAgICAgICMgb2YgdGhlIHNjcmlwdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYidfX21haW5fXzo3OiBVc2VyV2FybmluZzogdGVzdCcpCisKIAogZGVmIHNldFVwTW9kdWxlKCk6CiAgICAgcHlfd2FybmluZ3Mub25jZXJlZ2lzdHJ5LmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQppbmRleCA1YmUxMjUxLi41NDljYTg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhdmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YXZlLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBzeXMKIGltcG9ydCB3YXZlCiAKQEAgLTQ2LDEzICs0Nyw3IEBACiAgICAgICBFNEI1MENFQiA2MzQ0MEE1QSAwOENBMEExRiAyQkJBMEIwQiA1MTQ2MEU0NyA4QkNCMTEzQyBCNkY1MEVFQSA0NDE1MEE1OSBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQotCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCiBjbGFzcyBXYXZlUENNMjRUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLApAQCAtODIsNyArNzcsNyBAQAogICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMyhmcmFtZXMpCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMykKIAogCiBjbGFzcyBXYXZlUENNMzJUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLApAQCAtMTEyLDEyICsxMDcsNyBAQAogICAgICAgNTE0ODZGODAwRTQ0RTE5MCA4QkNDNjQ4MDExM0IwNTgwIEI2RjRFQzAwMEVFQjM2MzAgNDQxMzE3ODAwQTVCNDhBMCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDQoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQppbmRleCA4NWFiNzE3Li5jY2NiNTE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CkBAIC03LDExICs3LDE1IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKIAogIyBVc2VkIGluIFJlZmVyZW5jZXNUZXN0Q2FzZS50ZXN0X3JlZl9jcmVhdGVkX2R1cmluZ19kZWwoKSAuCiByZWZfZnJvbV9kZWwgPSBOb25lCiAKKyMgVXNlZCBieSBGaW5hbGl6ZVRlc3RDYXNlIGFzIGEgZ2xvYmFsIHRoYXQgbWF5IGJlIHJlcGxhY2VkIGJ5IE5vbmUKKyMgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc2h1dHMgZG93bi4KK19nbG9iYWxfdmFyID0gJ2Zvb2JhcicKKwogY2xhc3MgQzoKICAgICBkZWYgbWV0aG9kKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC00Nyw2ICs1MSwxMSBAQAogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuYXJnKQorICAgIGRlZiBzb21lX21ldGhvZChzZWxmKToKKyAgICAgICAgcmV0dXJuIDQKKyAgICBkZWYgb3RoZXJfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gNQorCiAKIGNsYXNzIFJlZkN5Y2xlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTc5NCw2ICs4MDMsMzAgQEAKICAgICAgICAgZGVsIHJvb3QKICAgICAgICAgZ2MuY29sbGVjdCgpCiAKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGEgcmVmOiBOb25lCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZih4LCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWYxLl9fY2FsbGJhY2tfXywgY2FsbGJhY2spCisKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZjIuX19jYWxsYmFja19fKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfYXR0cmlidXRlX2FmdGVyX2RlbGV0aW9uKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKHgsIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlZi5fX2NhbGxiYWNrX18pCisgICAgICAgIGRlbCB4CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZi5fX2NhbGxiYWNrX18pCisKKyAgICBkZWYgdGVzdF9zZXRfY2FsbGJhY2tfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhIHJlZjogTm9uZQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYoeCwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcmVmMS5fX2NhbGxiYWNrX18gPSBsYW1iZGEgcmVmOiBOb25lCisKIAogY2xhc3MgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlKFRlc3RCYXNlKToKIApAQCAtODk4LDYgKzkzMSwxNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNiY2FsbGVkLCAwKQogCiAKK2NsYXNzIFdlYWtNZXRob2RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBPYmplY3Qgc3ViY2xhc3Mgb3ZlcnJpZGluZyBgc29tZV9tZXRob2RgLiIiIgorICAgICAgICBjbGFzcyBDKE9iamVjdCk6CisgICAgICAgICAgICBkZWYgc29tZV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiB0ZXN0X2FsaXZlKHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHdlYWtyZWYuUmVmZXJlbmNlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIoKSwgdHlwZShvLnNvbWVfbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCkuX19zZWxmX18sIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLl9fZnVuY19fLCBvLnNvbWVfbWV0aG9kLl9fZnVuY19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSgpLCA0KQorCisgICAgZGVmIHRlc3Rfb2JqZWN0X2RlYWQoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9tZXRob2RfZGVhZChzZWxmKToKKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgQy5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aGVuX29iamVjdF9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FsbGJhY2sgYmVoYXZpb3VyIHdoZW4gb2JqZWN0IGRpZXMgZmlyc3QuCisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorICAgICAgICAjIENhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UuCisgICAgICAgIEMuc29tZV9tZXRob2QgPSBPYmplY3Quc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3doZW5fbWV0aG9kX2RlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCBjYWxsYmFjayBiZWhhdmlvdXIgd2hlbiBtZXRob2QgZGllcyBmaXJzdC4KKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCwgY2IpCisgICAgICAgIGRlbCBDLnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisgICAgICAgICMgQ2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZS4KKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgIyBBIFdlYWtNZXRob2QgZG9lc24ndCBjcmVhdGUgYW55IHJlZmVyZW5jZSBjeWNsZSB0byBpdHNlbGYuCisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgZGVmIGNiKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHIpCisgICAgICAgIGRlbCByCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkZWYgX2VxKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSAhPSBiKQorICAgICAgICBkZWYgX25lKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBiKQorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5vdGhlcl9tZXRob2QpCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgT2JqZWN0cyBlcXVhbCwgc2FtZSBtZXRob2QKKyAgICAgICAgX2VxKGEsIGIpCisgICAgICAgIF9lcShjLCBkKQorICAgICAgICAjIE9iamVjdHMgZXF1YWwsIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgX25lKGEsIGMpCisgICAgICAgIF9uZShhLCBkKQorICAgICAgICBfbmUoYiwgYykKKyAgICAgICAgX25lKGIsIGQpCisgICAgICAgICMgT2JqZWN0cyB1bmVxdWFsLCBzYW1lIG9yIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgeiA9IE9iamVjdCgyKQorICAgICAgICBlID0gd2Vha3JlZi5XZWFrTWV0aG9kKHouc29tZV9tZXRob2QpCisgICAgICAgIGYgPSB3ZWFrcmVmLldlYWtNZXRob2Qoei5vdGhlcl9tZXRob2QpCisgICAgICAgIF9uZShhLCBlKQorICAgICAgICBfbmUoYSwgZikKKyAgICAgICAgX25lKGIsIGUpCisgICAgICAgIF9uZShiLCBmKQorICAgICAgICBkZWwgeCwgeSwgegorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgIyBEZWFkIFdlYWtNZXRob2RzIGNvbXBhcmUgYnkgaWRlbnRpdHkKKyAgICAgICAgcmVmcyA9IGEsIGIsIGMsIGQsIGUsIGYKKyAgICAgICAgZm9yIHEgaW4gcmVmczoKKyAgICAgICAgICAgIGZvciByIGluIHJlZnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxID09IHIsIHEgaXMgcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEgIT0gciwgcSBpcyBub3QgcikKKworICAgIGRlZiB0ZXN0X2hhc2hpbmcoc2VsZik6CisgICAgICAgICMgQWxpdmUgV2Vha01ldGhvZHMgYXJlIGhhc2hhYmxlIGlmIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpcworICAgICAgICAjIGhhc2hhYmxlLgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgU2luY2UgV2Vha01ldGhvZCBvYmplY3RzIGFyZSBlcXVhbCwgdGhlIGhhc2hlcyBzaG91bGQgYmUgZXF1YWwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiKSkKKyAgICAgICAgaGEgPSBoYXNoKGEpCisgICAgICAgICMgRGVhZCBXZWFrTWV0aG9kcyByZXRhaW4gdGhlaXIgb2xkIGhhc2ggdmFsdWUKKyAgICAgICAgZGVsIHgsIHkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiKSwgaGEpCisgICAgICAgICMgSWYgaXQgd2Fzbid0IGhhc2hlZCB3aGVuIGFsaXZlLCBhIGRlYWQgV2Vha01ldGhvZCBjYW5ub3QgYmUgaGFzaGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGMpCisKKwogY2xhc3MgTWFwcGluZ1Rlc3RDYXNlKFRlc3RCYXNlKToKIAogICAgIENPVU5UID0gMTAKQEAgLTEzODUsNiArMTU1MiwxNTEgQEAKICAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX19yZWYuY29weSgpCiAKKworY2xhc3MgRmluYWxpemVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KHNlbGYpOgorICAgICAgICAjIHdlIGNyZWF0ZSBubyByZWYtY3ljbGVzIHNvIGluIENQeXRob24gbm8gZ2Mgc2hvdWxkIGJlIG5lZWRlZAorICAgICAgICBpZiBzeXMuaW1wbGVtZW50YXRpb24ubmFtZSAhPSAnY3B5dGhvbic6CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfZmluYWxpemUoc2VsZik6CisgICAgICAgIGRlZiBhZGQoeCx5LHopOgorICAgICAgICAgICAgcmVzLmFwcGVuZCh4ICsgeSArIHopCisgICAgICAgICAgICByZXR1cm4geCArIHkgKyB6CisKKyAgICAgICAgYSA9IHNlbGYuQSgpCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCA2NywgNDMsIHo9ODkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzKSwgeyd6Jzo4OX0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgMTk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxOTldKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgNjcsIDQzLCA4OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzLDg5KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIChhLCBhZGQsICg2Nyw0Myw4OSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIHg9NjcsIHk9NDMsIHo9ODkpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMTk5XSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKworICAgICAgICBmMSA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YxJykKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMicpCisgICAgICAgIGYzID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjMnKQorICAgICAgICBmNCA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2Y0JykKKyAgICAgICAgZjUgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmNScpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgZmluYWxpemVycyBjYW4ga2VlcCB0aGVtc2VsdmVzIGFsaXZlCisgICAgICAgIGRlbCBmMSwgZjQKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMy5hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY1LmFsaXZlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmNS5kZXRhY2goKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmNS5hbGl2ZSkKKworICAgICAgICBmNSgpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IHVucmVnaXN0ZXJlZAorICAgICAgICByZXMuYXBwZW5kKCdBJykKKyAgICAgICAgZjMoKSAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjMuYWxpdmUpCisgICAgICAgIHJlcy5hcHBlbmQoJ0InKQorICAgICAgICBmMygpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IGNhbGxlZAorICAgICAgICByZXMuYXBwZW5kKCdDJykKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2Y0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyLmFsaXZlKQorICAgICAgICByZXMuYXBwZW5kKCdEJykKKyAgICAgICAgZjIoKSAgICAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIGJlY2F1c2UgcHJldmlvdXNseSBjYWxsZWQgYnkgZ2MKKworICAgICAgICBleHBlY3RlZCA9IFsnQScsICdmMycsICdCJywgJ0MnLCAnZjQnLCAnZjInLCAnZjEnLCAnRCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2FsbF9mcmVlZChzZWxmKToKKyAgICAgICAgIyB3ZSB3YW50IGEgd2Vha3JlZmFibGUgc3ViY2xhc3Mgb2Ygd2Vha3JlZi5maW5hbGl6ZQorICAgICAgICBjbGFzcyBNeUZpbmFsaXplcih3ZWFrcmVmLmZpbmFsaXplKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByZXMuYXBwZW5kKDEyMykKKyAgICAgICAgZiA9IE15RmluYWxpemVyKGEsIGNhbGxiYWNrKQorCisgICAgICAgIHdyX2NhbGxiYWNrID0gd2Vha3JlZi5yZWYoY2FsbGJhY2spCisgICAgICAgIHdyX2YgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgY2FsbGJhY2ssIGYKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9jYWxsYmFjaygpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9mKCkpCisKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2NhbGxiYWNrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxMjNdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9pbl9jaGlsZChjbHMpOgorICAgICAgICBkZWYgZXJyb3IoKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGFuIGF0ZXhpdCBmaW5hbGl6ZXIgZnJvbSBpbnNpZGUgYSBmaW5hbGl6ZXIgY2FsbGVkCisgICAgICAgICAgICAjIGF0IGV4aXQuICBUaGlzIHNob3VsZCBiZSB0aGUgbmV4dCB0byBiZSBydW4uCisgICAgICAgICAgICBnMSA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2cxJykKKyAgICAgICAgICAgIHByaW50KCdmMyBlcnJvcicpCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIGNscyBzaG91bGQgc3RheSBhbGl2ZSB0aWxsIGF0ZXhpdCBjYWxsYmFja3MgcnVuCisgICAgICAgIGYxID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZjEnLCBfZ2xvYmFsX3ZhcikKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmMicsIF9nbG9iYWxfdmFyKQorICAgICAgICBmMyA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBlcnJvcikKKyAgICAgICAgZjQgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmNCcsIF9nbG9iYWxfdmFyKQorCisgICAgICAgIGFzc2VydCBmMS5hdGV4aXQgPT0gVHJ1ZQorICAgICAgICBmMi5hdGV4aXQgPSBGYWxzZQorICAgICAgICBhc3NlcnQgZjMuYXRleGl0ID09IFRydWUKKyAgICAgICAgYXNzZXJ0IGY0LmF0ZXhpdCA9PSBUcnVlCisKKyAgICBkZWYgdGVzdF9hdGV4aXQoc2VsZik6CisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC50ZXN0X3dlYWtyZWYgaW1wb3J0IEZpbmFsaXplVGVzdENhc2U7JysKKyAgICAgICAgICAgICAgICAnRmluYWxpemVUZXN0Q2FzZS5ydW5faW5fY2hpbGQoKScpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBwcm9nKQorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCdhc2NpaScpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgWydmNCBmb29iYXInLCAnZjMgZXJyb3InLCAnZzEnLCAnZjEgZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ1plcm9EaXZpc2lvbkVycm9yJyBpbiBlcnIpCisKKwogbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IHdlYWtyZWYucnN0CiAKID4+PiBpbXBvcnQgd2Vha3JlZgpAQCAtMTQ3MywxMCArMTc4NSwxMiBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBSZWZlcmVuY2VzVGVzdENhc2UsCisgICAgICAgIFdlYWtNZXRob2RUZXN0Q2FzZSwKICAgICAgICAgTWFwcGluZ1Rlc3RDYXNlLAogICAgICAgICBXZWFrVmFsdWVEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFdlYWtLZXlEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZSwKKyAgICAgICAgRmluYWxpemVUZXN0Q2FzZSwKICAgICAgICAgKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CmluZGV4IGNiNGNkZTkuLmVmNGNlNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC04LDcgKzgsNyBAQAogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgbWFjaGluZQogCiAjIERvIHRoaXMgZmlyc3Qgc28gdGVzdCB3aWxsIGJlIHNraXBwZWQgaWYgbW9kdWxlIGRvZXNuJ3QgZXhpc3QKLXN1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJykKK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJywgcmVxdWlyZWRfb249Wyd3aW4nXSkKICMgTm93IGltcG9ydCBldmVyeXRoaW5nCiBmcm9tIHdpbnJlZyBpbXBvcnQgKgogCkBAIC01NywxMyArNTcsMTMgQEAKICAgICBkZWYgZGVsZXRlX3RyZWUoc2VsZiwgcm9vdCwgc3Via2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaGtleSA9IE9wZW5LZXkocm9vdCwgc3Via2V5LCBLRVlfQUxMX0FDQ0VTUykKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3Vic3Via2V5ID0gRW51bUtleShoa2V5LCAwKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgbm8gbW9yZSBzdWJrZXlzCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHNlbGYuZGVsZXRlX3RyZWUoaGtleSwgc3Vic3Via2V5KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICBRdWVyeUluZm9LZXkoaW50X3N1Yl9rZXkpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkl0IGFwcGVhcnMgdGhlIENsb3NlS2V5KCkgZnVuY3Rpb24gZG9lcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBjbG9zZSB0aGUgYWN0dWFsIGtleSEiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgLi4uIGFuZCBjbG9zZSB0aGF0IGtleSB0aGF0IHdheSA6LSkKICAgICAgICAgaW50X2tleSA9IGludChrZXkpCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfa2V5KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBrZXkuQ2xvc2UoKSBmdW5jdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIsIE9wZW5LZXk9T3BlbktleSk6CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSBpbiB0ZXN0X2RhdGEsIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgYmFjayB0aGUgY29ycmVjdCB0ZXN0IGRhdGEiKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIEVudW1LZXkoa2V5LCAxKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJXYXMgYWJsZSB0byBnZXQgYSBzZWNvbmQga2V5IHdoZW4gSSBvbmx5IGhhdmUgb25lISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBrZXkuQ2xvc2UoKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAjIFNob3VsZG50IGJlIGFibGUgdG8gZGVsZXRlIGl0IHR3aWNlIQogICAgICAgICAgICAgRGVsZXRlS2V5KGtleSwgc3Via2V5c3RyKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJEZWxldGluZyB0aGUga2V5IHR3aWNlIHN1Y2NlZWRlZCIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAga2V5LkNsb3NlKCkKICAgICAgICAgRGVsZXRlS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG9wZW4gdGhlIG5vbi1leGlzdGVudCBrZXkiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RfYWxsKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiKToKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5leGlzdGFudF9yZW1vdGVfcmVnaXN0cnkoc2VsZik6CiAgICAgICAgIGNvbm5lY3QgPSBsYW1iZGE6IENvbm5lY3RSZWdpc3RyeSgiYWJjZGVmZ2hpamtsIiwgSEtFWV9DVVJSRU5UX1VTRVIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29ubmVjdCkKIAogICAgIGRlZiB0ZXN0RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKHNlbGYpOgogICAgICAgICByID0gRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKCIld2luZGlyJVxcdGVzdCIpCkBAIC0yNDIsOCArMjQyLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKSBhcyBoOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCi0gICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCiAKICAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKQEAgLTQwNyw3ICs0MDcsNyBAQAogICAgICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcGVuX2ZhaWwpCiAKICAgICAgICAgICAgICMgTm93IGV4cGxpY2l0bHkgb3BlbiB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleQogICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCkBAIC00NDcsNyArNDQ3LDcgQEAKICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9wZW5fZmFpbCkKIAogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIDMyLWJpdCBrZXkgaXMgYWN0dWFsbHkgdGhlcmUKICAgICAgICAgICAgIHdpdGggT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQppbmRleCBlYjdmNzVmLi42MWQ4NjRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAga2V5ID0gd2lucmVnLk9wZW5LZXlFeCh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgIkFwcEV2ZW50c1xTY2hlbWVzXEFwcHNcLkRlZmF1bHRcezB9XC5EZWZhdWx0Ii5mb3JtYXQoc291bmQpKQogICAgICAgICByZXR1cm4gd2lucmVnLkVudW1WYWx1ZShrZXksIDApWzFdICE9ICIiCi0gICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIGNsYXNzIEJlZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKaW5kZXggNTQ5NjUzNC4uNTM1MWIwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTEwLDYgKzEwLDcgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiAKQEAgLTI0MCw3ICsyNDEsNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MLCBFVC5mcm9tc3RyaW5nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVULlBJLCBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MUGFyc2VyLCBFVC5YTUxUcmVlQnVpbGRlcikKIAogICAgIGRlZiB0ZXN0X3NpbXBsZW9wcyhzZWxmKToKICAgICAgICAgIyBCYXNpYyBtZXRob2Qgc2FuaXR5IGNoZWNrcy4KQEAgLTQzMywxNSArNDMzLDYgQEAKICAgICAgICAgICAgICAgICAnICAgPGVtcHR5LWVsZW1lbnQgLz5cbicKICAgICAgICAgICAgICAgICAnPC9yb290PicpCiAKLSAgICAgICAgcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKSAjIDEuMiBjb21wYXRpYmlsaXR5Ci0gICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgIHNlbGYuc2VyaWFsaXplX2NoZWNrKHBhcnNlci5jbG9zZSgpLAotICAgICAgICAgICAgICAgICc8cm9vdD5cbicKLSAgICAgICAgICAgICAgICAnICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD5cbicKLSAgICAgICAgICAgICAgICAnICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4nCi0gICAgICAgICAgICAgICAgJyAgIDxlbXB0eS1lbGVtZW50IC8+XG4nCi0gICAgICAgICAgICAgICAgJzwvcm9vdD4nKQotCiAgICAgICAgIHRhcmdldCA9IEVULlRyZWVCdWlsZGVyKCkKICAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCiAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCkBAIC03MDEsOSArNjkyLDkgQEAKICAgICAgICAgICAgICdpc284ODU5LTEzJywgJ2lzbzg4NTktMTQnLCAnaXNvODg1OS0xNScsICdpc284ODU5LTE2JywKICAgICAgICAgICAgICdjcDQzNycsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsICdjcDg1MicsCiAgICAgICAgICAgICAnY3A4NTUnLCAnY3A4NTYnLCAnY3A4NTcnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwODY5JywgJ2NwODc0JywgJ2NwMTAwNicsICdjcDEyNTAnLAotICAgICAgICAgICAgJ2NwMTI1MScsICdjcDEyNTInLCAnY3AxMjUzJywgJ2NwMTI1NCcsICdjcDEyNTUnLCAnY3AxMjU2JywKLSAgICAgICAgICAgICdjcDEyNTcnLCAnY3AxMjU4JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDg2OScsICdjcDg3NCcsICdjcDEwMDYnLCAnY3AxMTI1JywKKyAgICAgICAgICAgICdjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCisgICAgICAgICAgICAnY3AxMjU2JywgJ2NwMTI1NycsICdjcDEyNTgnLAogICAgICAgICAgICAgJ21hYy1jeXJpbGxpYycsICdtYWMtZ3JlZWsnLCAnbWFjLWljZWxhbmQnLCAnbWFjLWxhdGluMicsCiAgICAgICAgICAgICAnbWFjLXJvbWFuJywgJ21hYy10dXJraXNoJywKICAgICAgICAgICAgICdpc28yMDIyLWpwJywgJ2lzbzIwMjItanAtMScsICdpc28yMDIyLWpwLTInLCAnaXNvMjAyMi1qcC0yMDA0JywKQEAgLTk1OSw2ICs5NTAsMTYwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemVkLCBleHBlY3RlZCkKIAogCitjbGFzcyBYTUxQdWxsUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2ZlZWQoc2VsZiwgcGFyc2VyLCBkYXRhLCBjaHVua19zaXplPU5vbmUpOgorICAgICAgICBpZiBjaHVua19zaXplIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBjaHVua19zaXplKToKKyAgICAgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhW2k6aStjaHVua19zaXplXSkKKworICAgIGRlZiBhc3NlcnRfZXZlbnRfdGFncyhzZWxmLCBwYXJzZXIsIGV4cGVjdGVkKToKKyAgICAgICAgZXZlbnRzID0gcGFyc2VyLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGFjdGlvbiwgZWxlbS50YWcpIGZvciBhY3Rpb24sIGVsZW0gaW4gZXZlbnRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWwoc2VsZik6CisgICAgICAgIGZvciBjaHVua19zaXplIGluIChOb25lLCAxLCA1KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNodW5rX3NpemU9Y2h1bmtfc2l6ZSk6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHJvb3Q+XG4gIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICAgICAgICAgKCdlbmQnLCAnZWxlbWVudCcpLAorICAgICAgICAgICAgICAgICAgICAoJ2VuZCcsICdlbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAncm9vdCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2ZlZWRfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKCkKKyAgICAgICAgaXQgPSBwYXJzZXIucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PlxuIikKKyAgICAgICAgYWN0aW9uLCBlbGVtID0gbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYWN0aW9uLCBlbGVtLnRhZyksICgnZW5kJywgJ2VsZW1lbnQnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iKQorICAgICAgICBhY3Rpb24sIGVsZW0gPSBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhY3Rpb24sIGVsZW0udGFnKSwgKCdlbmQnLCAncm9vdCcpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgorICAgICAgICAgICAgbmV4dChpdCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWxfd2l0aF9ucyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QgeG1sbnM9J25hbWVzcGFjZSc+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVtcHR5LWVsZW1lbnQvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICgnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne25hbWVzcGFjZX1lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAne25hbWVzcGFjZX1yb290JyldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X25zX2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydC1ucycsICdlbmQtbnMnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290IHhtbG5zPSduYW1lc3BhY2UnPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxpc3QocGFyc2VyLnJlYWRfZXZlbnRzKCkpLAorICAgICAgICAgICAgWygnc3RhcnQtbnMnLCAoJycsICduYW1lc3BhY2UnKSldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKSwgWygnZW5kLW5zJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCAnZW5kJykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tmb299ZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne2Zvb31lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ2VuZCcsICdyb290JyldKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5jbG9zZSgpKQorCisgICAgZGVmIHRlc3RfZXZlbnRzX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBldmVudHMgY2FuIGJlIHNvbWUgc2VxdWVuY2UgdGhhdCdzIG5vdCBqdXN0IGEgdHVwbGUgb3IgbGlzdAorICAgICAgICBldmVudHNldCA9IHsnZW5kJywgJ3N0YXJ0J30KKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9ZXZlbnRzZXQpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGZvbz5iYXI8L2Zvbz4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZm9vJyksICgnZW5kJywgJ2ZvbycpXSkKKworICAgICAgICBjbGFzcyBEdW1teUl0ZXI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5ldmVudHMgPSBpdGVyKFsnc3RhcnQnLCAnZW5kJywgJ3N0YXJ0LW5zJ10pCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmV2ZW50cykKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz1EdW1teUl0ZXIoKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8Zm9vPmJhcjwvZm9vPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdmb28nKSwgKCdlbmQnLCAnZm9vJyldKQorCisKKyAgICBkZWYgdGVzdF91bmtub3duX2V2ZW50KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydCcsICdlbmQnLCAnYm9ndXMnKSkKKworCiAjCiAjIHhpbmNsdWRlIHRlc3RzIChzYW1wbGVzIGZyb20gYXBwZW5kaXggQyBvZiB0aGUgeGluY2x1ZGUgc3BlY2lmaWNhdGlvbikKIApAQCAtMTMwMCw3ICsxNDQ1LDcgQEAKICAgICAgICAgIyBEb24ndCBjcmFzaCB3aGVuIHVzaW5nIGN1c3RvbSBlbnRpdGllcy4KIAogICAgICAgICBFTlRJVElFUyA9IHsncnNxdW8nOiAnXHUyMDE5JywgJ2xzcXVvJzogJ1x1MjAxOCd9Ci0gICAgICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKICAgICAgICAgcGFyc2VyLmVudGl0eS51cGRhdGUoRU5USVRJRVMpCiAgICAgICAgIHBhcnNlci5mZWVkKCIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+CkBAIC0xNjM4LDYgKzE3ODMsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbmQoJy4vdGFnW2xhc3QoKS0xXScpLmF0dHJpYlsnY2xhc3MnXSwgJ2MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmluZCgnLi90YWdbbGFzdCgpLTJdJykuYXR0cmliWydjbGFzcyddLCAnYicpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1stMV0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCktMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCkrMV0nKQorCiAgICAgZGVmIHRlc3RfZmluZGFsbChzZWxmKToKICAgICAgICAgZSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgICAgICBlWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQpAQCAtMTg5Nyw3ICsyMDQ3LDcgQEAKICAgICAgICAgIyBNaW1pY2sgU2ltcGxlVEFMJ3MgYmVoYXZpb3VyIChpc3N1ZSAjMTYwODkpOiBib3RoIHZlcnNpb25zIG9mCiAgICAgICAgICMgVHJlZUJ1aWxkZXIgc2hvdWxkIGJlIGFibGUgdG8gY29wZSB3aXRoIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICAgICAgICMgcHVyZSBQeXRob24gRWxlbWVudCBjbGFzcy4KLSAgICAgICAgYmFzZSA9IEVULl9FbGVtZW50CisgICAgICAgIGJhc2UgPSBFVC5fRWxlbWVudF9QeQogICAgICAgICAjIE5vdCBmcm9tIGEgQyBleHRlbnNpb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQogICAgICAgICAjIEZvcmNlIHNvbWUgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugd2l0aCBhIEMgY2xhc3MgdG8gbWFrZSB0aGluZ3MKQEAgLTIyNTYsNiArMjQwNiwxOCBAQAogICAgICAgICAgICAgRVQudG9zdHJpbmcocm9vdCwgJ3V0Zi0xNicpLAogICAgICAgICAgICAgYicnLmpvaW4oRVQudG9zdHJpbmdsaXN0KHJvb3QsICd1dGYtMTYnKSkpCiAKKyAgICBkZWYgdGVzdF9zaG9ydF9lbXB0eV9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgcm9vdCA9IEVULmZyb21zdHJpbmcoJzx0YWc+YTx4IC8+Yjx5PjwveT5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJyksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9RmFsc2UpLAorICAgICAgICAgICAgJzx0YWc+YTx4PjwveD5iPHk+PC95PmM8L3RhZz4nKQorCiAKIGNsYXNzIFBhcnNlRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKQEAgLTIzMjEsOCArMjQ4MywxMSBAQAogCiAgICAgIyBUZXN0IHRoYXQgdGhlIEMgYWNjZWxlcmF0b3Igd2FzIG5vdCBpbXBvcnRlZCBmb3IgcHlFVAogICAgIGRlZiB0ZXN0X2NvcnJlY3RfaW1wb3J0X3B5RVQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlFVC5FbGVtZW50Ll9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuU3ViRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5FbGVtZW50Ll9faW5pdF9fLCB0eXBlcy5GdW5jdGlvblR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweUVULlhNTFBhcnNlci5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzOTIsNiArMjU1Nyw3IEBACiAgICAgICAgIEVsZW1lbnRJdGVyVGVzdCwKICAgICAgICAgVHJlZUJ1aWxkZXJUZXN0LAogICAgICAgICBYTUxQYXJzZXJUZXN0LAorICAgICAgICBYTUxQdWxsUGFyc2VyVGVzdCwKICAgICAgICAgQnVnc1Rlc3QsCiAgICAgICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggYmNhYTcyNC4uYjNmZjdhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cywgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiBjRVQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLApAQCAtMzMsMTQgKzM0LDIyIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY0VULCAncmVxdWlyZXMgX2VsZW1lbnR0cmVlJykKK0BzdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgVGVzdEFjY2VsZXJhdG9ySW1wb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBpbXBvcnRlZCwgYXMgZXhwZWN0ZWQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVQoc2VsZik6CisgICAgICAgICMgU3ViRWxlbWVudCBpcyBhIGZ1bmN0aW9uIHNvIGl0IHJldGFpbnMgX2VsZW1lbnR0cmVlIGFzIGl0cyBtb2R1bGUuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVRfYWxpYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VUX2FsaWFzLlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKKyAgICBkZWYgdGVzdF9wYXJzZXJfY29tZXNfZnJvbV9DKHNlbGYpOgorICAgICAgICAjIFRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbiBQeXRob24gY29kZSBpcyB0eXBlcy5GdW5jdGlvblR5cGUsCisgICAgICAgICMgd2hpbGUgdGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluc2lkZSBfZWxlbWVudHRyZWUgaXMKKyAgICAgICAgIyA8Y2xhc3MgJ3dyYXBwZXJfZGVzY3JpcHRvcic+CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjRVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCiBAc3VwcG9ydC5jcHl0aG9uX29ubHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggY2M1MjI1OS4uOTliM2VkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTE1LDYgKzE1LDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogdHJ5OgorICAgIGltcG9ydCBnemlwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3ppcCA9IE5vbmUKK3RyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMjE2LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCdodHRwczovL2xvY2FsaG9zdDo5OTk5JykuYmFkX2Z1bmN0aW9uKCkKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19zc2wsICJ4bWxycGMgY2xpZW50J3MgZXJyb3Igd2l0aCBTU0wgc3VwcG9ydCIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19zc2wpCiAKIGNsYXNzIEhlbHBlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM3Niw2ICszODAsMTEgQEAKICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCiAKKyAgICAgICAgY2xhc3MgRml4dHVyZToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXREYXRhKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc0MicKKwogICAgIGRlZiBteV9mdW5jdGlvbigpOgogICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC00MDcsNyArNDE2LDggQEAKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKLSAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnN0YW5jZShUZXN0SW5zdGFuY2VDbGFzcygpKQorICAgICAgICB0ZXN0SW5zdGFuY2UgPSBUZXN0SW5zdGFuY2VDbGFzcygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UodGVzdEluc3RhbmNlLCBhbGxvd19kb3R0ZWRfbmFtZXM9VHJ1ZSkKICAgICAgICAgZXZ0LnNldCgpCiAKICAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cwpAQCAtNTAwLDcgKzUxMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBleGNfbWVzcyA9IGUuaGVhZGVycy5nZXQoJ1gtZXhjZXB0aW9uJykKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICMgSWdub3JlIHNvY2tldC5lcnJvcnMgaGVyZS4KKyAgICAgICAgIyBJZ25vcmUgT1NFcnJvcnMgaGVyZS4KICAgICAgICAgZXhjX21lc3MgPSBzdHIoZSkKIAogICAgIGlmIGV4Y19tZXNzIGFuZCAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIGluIGV4Y19tZXNzLmxvd2VyKCk6CkBAIC01MTUsNyArNTI1LDcgQEAKICAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKS5teV9mdW5jdGlvbigpCi0gICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCkBAIC01NTMsNyArNTYzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTY2LDcgKzU3Niw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC01ODcsMTIgKzU5NywxMyBAQAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgogICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLm1ldGhvZFNpZ25hdHVyZScsICdzeXN0ZW0ubXVsdGljYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpeHR1cmUnXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobWV0aCksIGV4cGVjdGVkX21ldGhvZHMpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjA1LDcgKzYxNiw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MTksNyArNjMwLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYzMiw3ICs2NDMsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjQ5LDcgKzY2MCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZF9yZXN1bHQsIDIrMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93X3Jlc3VsdCwgNioqOCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2X3Jlc3VsdCwgMTI3Ly80MikKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02NzAsNyArNjgxLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCiAgICAgICAgICAgICAgICAgJzxjbGFzcyBcJ0V4Y2VwdGlvblwnPjptZXRob2QgInRoaXNfaXNfbm90X2V4aXN0cyIgJwogICAgICAgICAgICAgICAgICdpcyBub3Qgc3VwcG9ydGVkJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02ODYsNiArNjk3LDEyIEBACiAgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgogICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCiAKKyAgICBkZWYgdGVzdF9hbGxvd19kb3R0ZWRfbmFtZXNfdHJ1ZShzZWxmKToKKyAgICAgICAgIyBYWFggYWxzbyBuZWVkIGFsbG93X2RvdHRlZF9uYW1lc19mYWxzZSB0ZXN0LgorICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKKyAgICAgICAgZGF0YSA9IHNlcnZlci5GaXh0dXJlLmdldERhdGEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICc0MicpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2hvc3Qoc2VsZik6CiAgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkL1JQQzIiICUgKEFERFIsIFBPUlQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5hZGQoImEiLCAiXHhlOSIpLCAiYVx4ZTkiKQpAQCAtNzkzLDYgKzgxMCw3IEBACiAKICNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKICMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorQHVuaXR0ZXN0LnNraXBJZihnemlwIGlzIE5vbmUsICdyZXF1aXJlcyBnemlwJykKIGNsYXNzIEd6aXBTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgogICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCiAgICAgI2NsYXNzIHZhcmlhYmxlCkBAIC05MjMsNyArOTQxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtOTM2LDcgKzk1NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgogICAgICAgICAgICAgICAgICMgVGhlIHR3byBzZXJ2ZXItc2lkZSBlcnJvciBoZWFkZXJzIHNob3VsZG4ndCBiZSBzZW50IGJhY2sgaW4gdGhpcyBjYXNlCkBAIC05NTYsNyArOTc0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBwLnBvdyg2LDgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CiAgICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgZ2V0IGVycm9yIGluZm8gaW4gdGhlIHJlc3BvbnNlCkBAIC0xMDg0LDIzICsxMTAyLDEzIEBACiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCi0gICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZV0KLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2ltcGxlU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIpCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgZ3ppcAotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEd6aXBTZXJ2ZXJUZXN0Q2FzZSkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgI2d6aXAgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNlcnZlclByb3h5VGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAorICAgICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSwKKyAgICAgICAgICAgIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwgR3ppcFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UsIFNlcnZlclByb3h5VGVzdENhc2UsIEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgIENHSUhhbmRsZXJUZXN0Q2FzZSkKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp4bWxycGNfdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQppbmRleCBkZmI1ZjlhLi4wMGFjYTE5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CkBAIC05LDMyICs5LDcgQEAKIAogaW1wb3J0IHhtbHJwYy5jbGllbnQgYXMgeG1scnBjbGliCiAKLWNsYXNzIEN1cnJlbnRUaW1lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9jdXJyZW50X3RpbWUoc2VsZik6Ci0gICAgICAgICMgR2V0IHRoZSBjdXJyZW50IHRpbWUgZnJvbSB4bWxycGMuY29tLiAgVGhpcyBjb2RlIGV4ZXJjaXNlcwotICAgICAgICAjIHRoZSBtaW5pbWFsIEhUVFAgZnVuY3Rpb25hbGl0eSBpbiB4bWxycGNsaWIuCi0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWUueG1scnBjLmNvbSBpcyB1bnJlbGlhYmxlIikKLSAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vdGltZS54bWxycGMuY29tL1JQQzIiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0MCA9IHNlcnZlci5jdXJyZW50VGltZS5nZXRDdXJyZW50VGltZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5ldHdvcmsgZXJyb3I6ICVzIiAlIGUpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIFBlcmZvcm0gYSBtaW5pbWFsIHNhbml0eSBjaGVjayBvbiB0aGUgcmVzdWx0LCBqdXN0IHRvIGJlIHN1cmUKLSAgICAgICAgIyB0aGUgcmVxdWVzdCBtZWFucyB3aGF0IHdlIHRoaW5rIGl0IG1lYW5zLgotICAgICAgICB0MSA9IHhtbHJwY2xpYi5EYXRlVGltZSgpCi0KLSAgICAgICAgZHQwID0geG1scnBjbGliLl9kYXRldGltZV90eXBlKHQwLnZhbHVlKQotICAgICAgICBkdDEgPSB4bWxycGNsaWIuX2RhdGV0aW1lX3R5cGUodDEudmFsdWUpCi0gICAgICAgIGlmIGR0MCA+IGR0MToKLSAgICAgICAgICAgIGRlbHRhID0gZHQwIC0gZHQxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWx0YSA9IGR0MSAtIGR0MAotICAgICAgICAjIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHN5c3RlbSB0aW1lIGhlcmUgYW5kIHRoZSBzeXN0ZW0KLSAgICAgICAgIyB0aW1lIG9uIHRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCBiZSB0b28gYmlnLgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVsdGEuZGF5cyA8PSAxKQorY2xhc3MgUHl0aG9uQnVpbGRlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3B5dGhvbl9idWlsZGVycyhzZWxmKToKICAgICAgICAgIyBHZXQgdGhlIGxpc3Qgb2YgYnVpbGRlcnMgZnJvbSB0aGUgWE1MUlBDIGJ1aWxkYm90IGludGVyZmFjZSBhdApAQCAtNDIsNyArMTcsNyBAQAogICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly9idWlsZGJvdC5weXRob24ub3JnL2FsbC94bWxycGMvIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYnVpbGRlcnMgPSBzZXJ2ZXIuZ2V0QWxsQnVpbGRlcnMoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZXR3b3JrIGVycm9yOiAlcyIgJSBlKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNlcnZlcignY2xvc2UnKSgpKQpAQCAtNTUsNyArMzAsNyBAQAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ3VycmVudFRpbWVUZXN0KQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5dGhvbkJ1aWxkZXJzVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CmluZGV4IGFkMGMwYjcuLjQ5ZWNjYmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKQEAgLTEsNyArMSw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdGltZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0cnVjdApAQCAtMTQsNyArMTQsNyBAQAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgZmluZGZpbGUsIHVubGluaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemxpYiwgcmVxdWlyZXNfYnoyLCByZXF1aXJlc19sem1hLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCwgY2hlY2tfd2FybmluZ3MpCiAKIFRFU1RGTjIgPSBURVNURk4gKyAiMiIKIFRFU1RGTkRJUiA9IFRFU1RGTiArICJkIgpAQCAtMzUsNiArMzUsMTAgQEAKICAgICAgICAgeWllbGQgZgogICAgICAgICB0ZXN0LmFzc2VydEZhbHNlKGYuY2xvc2VkKQogCitkZWYgb3BlblUoemlwZnAsIGZuKToKKyAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJldHVybiB6aXBmcC5vcGVuKGZuLCAnclUnKQorCiBjbGFzcyBBYnN0cmFjdFRlc3RzV2l0aFNvdXJjZUZpbGU6CiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKQEAgLTUwNiwxMiArNTEwLDEyIEBACiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9TVE9SRUQKIAogICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9RmFsc2UpIGFzIHppcGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBmcC53cml0ZSwgVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKIAogICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0MihzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PUZhbHNlKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyLm5hbWUiLCBzZWxmLmRhdGEpCiAKQEAgLTU1Nyw3ICs1NjEsNyBAQAogICAgICAgICAgICAgICAgIGlmIG9zLmFsdHNlcCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcGF0aF9zcGxpdC5leHRlbmQoZm4uc3BsaXQob3MuYWx0c2VwKSkKICAgICAgICAgICAgICAgICBpZiAnX19weWNhY2hlX18nIGluIHBhdGhfc3BsaXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gaW1wLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQorICAgICAgICAgICAgICAgICAgICBmbiA9IGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQogCkBAIC01OTEsNiArNTk1LDM0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ2VtYWlsL19faW5pdF9fLnB5JywgbmFtZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ2VtYWlsL21pbWUvdGV4dC5weScsIG5hbWVzKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfZmlsdGVyZWRfcHl0aG9uX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGltcG9ydCB0ZXN0CisgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUodGVzdC5fX2ZpbGVfXykKKworICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgorCisgICAgICAgICAgICAjIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IGZvbGRlciBnaXZlcyBlcnJvciBtZXNzYWdlcworICAgICAgICAgICAgIyAob24gdGhlIGJhZHN5bnRheF8uLi4gZmlsZXMpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIHRoZSB3aG9sZSBwYWNrYWdlCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIsIGZpbHRlcmZ1bmM9bGFtYmRhIHdoYXRldmVyOiBGYWxzZSkKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBub3QgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpciwgZmlsdGVyZnVuYz1sYW1iZGEgZm46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQnIG5vdCBpbiBmbikKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBpZiByZXBvcnRTdHI6CisgICAgICAgICAgICAgICAgcHJpbnQocmVwb3J0U3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgbm90IGluIHJlcG9ydFN0cikKKwogICAgIGRlZiB0ZXN0X3dyaXRlX3dpdGhfb3B0aW1pemF0aW9uKHNlbGYpOgogICAgICAgICBpbXBvcnQgZW1haWwKICAgICAgICAgcGFja2FnZWRpciA9IG9zLnBhdGguZGlybmFtZShlbWFpbC5fX2ZpbGVfXykKQEAgLTYwMCw3ICs2MzIsNyBAQAogICAgICAgICBleHQgPSAnLnB5bycgaWYgb3B0bGV2ZWwgPT0gMSBlbHNlICcucHljJwogCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIFwKLSAgICAgICAgICAgICAgICAgemlwZmlsZS5QeVppcEZpbGUodCwgInciLCBvcHRpbWl6ZT1vcHRsZXZlbCkgYXMgemlwZnA6CisgICAgICAgICAgICAgemlwZmlsZS5QeVppcEZpbGUodCwgInciLCBvcHRpbWl6ZT1vcHRsZXZlbCkgYXMgemlwZnA6CiAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCiAKICAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQpAQCAtNjMwLDYgKzY2MiwyNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX2RpcmVjdG9yeV9maWx0ZXJlZChzZWxmKToKKyAgICAgICAgb3MubWtkaXIoVEVTVEZOMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMS5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIgKiA0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShURVNURk4yLCBmaWx0ZXJmdW5jPWxhbWJkYSBmbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGZuLmVuZHN3aXRoKCdtb2QyLnB5JykpCisKKyAgICAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ21vZDEucHknLCBuYW1lcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtb2QyLnB5JywgbmFtZXMpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKKwogICAgIGRlZiB0ZXN0X3dyaXRlX25vbl9weWZpbGUoc2VsZik6CiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CiAgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CkBAIC03MzMsMjUgKzc4NSwyNSBAQAogICAgIGRlZiB0ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lc193aW5kb3dzX29ubHkoc2VsZik6CiAgICAgICAgICIiIlRlc3QgY29tYmluYXRpb24gb2YgcGF0aCBmaXhpbmcgYW5kIHdpbmRvd3MgbmFtZSBzYW5pdGl6YXRpb24uIiIiCiAgICAgICAgIHdpbmRvd3NfaGFja25hbWVzID0gWwotICAgICAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy4uXC9mb29cL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInZm9vL1wuLlwvYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Zm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxjb25reVxcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vPy9DOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovLi4vQzovZm9vL2JhcicsICdDXy9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInYTpiXGM8ZD5lfGYiZz9oKmknLCAnYi9jX2RfZV9mX2dfaF9pJyksCi0gICAgICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKKyAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLi5cL2Zvb1wvYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2Zvby9cLi5cL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpmb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XFxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvLz8vQzovZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi8uLi9DOi9mb28vYmFyJywgJ0NfL2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2E6YlxjPGQ+ZXxmImc/aCppJywgJ2IvY19kX2VfZl9nX2hfaScpLAorICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKICAgICAgICAgXQogICAgICAgICBzZWxmLl90ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lcyh3aW5kb3dzX2hhY2tuYW1lcykKIApAQCAtODI3LDYgKzg3OSwxNyBAQAogICAgICAgICAgICAgICAgIGRhdGEgKz0gemlwZnAucmVhZChpbmZvKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkYXRhLCB7YiJmb29iYXIiLCBiImJhcmZvbyJ9KQogCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cignc3BhbS50eHQnLCBiJ2FiYWJhZ2FsYW1hZ2EnKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgbW9kZSBpbiAnVScsICdyVSc6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgICAgIHppcG9wZW4gPSB6aXBmcC5vcGVuKCdzcGFtLnR4dCcsIG1vZGUpCisgICAgICAgICAgICAgICAgemlwb3Blbi5jbG9zZSgpCisKICAgICBkZWYgdGVzdF91bml2ZXJzYWxfcmVhZGFoZWFkcyhzZWxmKToKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQogCkBAIC04MzYsNyArODk5LDcgQEAKIAogICAgICAgICBkYXRhMiA9IGInJwogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAncicpIGFzIHppcGZwLCBcCi0gICAgICAgICAgICAgemlwZnAub3BlbihURVNURk4sICdyVScpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgb3BlblUoemlwZnAsIFRFU1RGTikgYXMgemlwb3BlbjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIHppcG9wZW46CiAgICAgICAgICAgICAgICAgZGF0YTIgKz0gbGluZQogCkBAIC04NzcsMTAgKzk0MCwxMCBAQAogICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX3ZlcnNpb24oc2VsZik6CiAgICAgICAgICMgRmlsZSBoYXMgYW4gZXh0cmFjdF92ZXJzaW9uIG9mIDEyMAogICAgICAgICBkYXRhID0gKGInUEtceDAzXHgwNHhceDAwXHgwMFx4MDBceDAwXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNicKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDYnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKQpAQCAtOTEzLDcgKzk3Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ2EnKSBhcyB6ZjoKICAgICAgICAgICAgICAgICB6Zi53cml0ZXN0cihmaWxlbmFtZSwgY29udGVudCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdDb3VsZCBub3QgYXBwZW5kIGRhdGEgdG8gYSBub24tZXhpc3RlbnQgemlwIGZpbGUuJykKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKQEAgLTk4NSw3ICsxMDQ4LDcgQEAKICAgICAgICAgZnAuc2VlaygwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZmlsZS5pc196aXBmaWxlKGZwKSkKIAotICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19JT0Vycm9yKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19PU0Vycm9yKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkCiAgICAgICAgICMgWmlwRmlsZSBpbnN0YW5jZSBpcyBmaW5hbGl6ZWQ7IHRoaXMgdGVzdHMgZm9yIHJlZ3Jlc3Npb24gb24gU0YgdHJhY2tlcgogICAgICAgICAjIGJ1ZyAjNDAzODcxLgpAQCAtOTk3LDcgKzEwNjAsNyBAQAogICAgICAgICAjIGl0IGlzIGlnbm9yZWQsIGJ1dCB0aGUgdXNlciBzaG91bGQgYmUgc3VmZmljaWVudGx5IGFubm95ZWQgYnkKICAgICAgICAgIyB0aGUgbWVzc2FnZSBvbiB0aGUgb3V0cHV0IHRoYXQgcmVncmVzc2lvbiB3aWxsIGJlIG5vdGljZWQKICAgICAgICAgIyBxdWlja2x5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCiAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlX3JhaXNlc19CYWRaaXBGaWxlKHNlbGYpOgogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKQEAgLTEwNjYsMTEgKzExMjksMTEgQEAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9jb21wcmVzc2lvbihzZWxmKToKICAgICAgICAgIyBkYXRhIGlzIGRlY2xhcmVkIGFzIHNocnVuaywgYnV0IGFjdHVhbGx5IGRlZmxhdGVkCiAgICAgICAgIGRhdGEgPSAoYidQS1x4MDNceDA0Llx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJwotICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCi0gICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgICAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJworICAgICAgICAgICAgICAgIGInXHgwMi5ceDAzLlx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCisgICAgICAgICAgICAgICAgYicvXHgwMFx4MDBceDAwIVx4MDBceDAwXHgwMFx4MDBceDAwJykKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKSBhcyB6aXBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgemlwZi5vcGVuLCAneCcpCiAKQEAgLTExODQsNyArMTI0Nyw3IEBACiAgICAgZGVmIHRlc3Rfb3Blbl9lbXB0eV9maWxlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3MTA3MDM6IENoZWNrIHRoYXQgb3BlbmluZyBhIGZpbGUgd2l0aCBsZXNzIHRoYW4gMjIgYnl0ZXMKICAgICAgICAgIyByYWlzZXMgYSBCYWRaaXBGaWxlIGV4Y2VwdGlvbiAocmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgdW5oZWxwZnVsCi0gICAgICAgICMgSU9FcnJvcikKKyAgICAgICAgIyBPU0Vycm9yKQogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwRmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICdyJykKQEAgLTEyMzIsNTcgKzEyOTUsNTcgQEAKIGNsYXNzIFN0b3JlZEJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX1NUT1JFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXDAwM1wwMDRcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6cicKLSAgICAgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCi0gICAgICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCi0gICAgICAgICAgICBiJ0tcMDAxXDAwMlwwMjRcMDAzXDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OicKLSAgICAgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKLSAgICAgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCi0gICAgICAgICAgICBiJ2xlUEtcMDA1XDAwNlwwXDBcMFwwXDAwMVwwXDAwMVwwMDAzXDAwMCcKLSAgICAgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKKyAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCisgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCisgICAgICAgIGInaWxlaGVsbG8sQXdvcmxkUCcKKyAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCisgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKKyAgICAgICAgYidcMFwwXDBcMFwwXDBcMFwyMDBcMDAxXDBcMFwwXDAwMGFmaScKKyAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCisgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKIAogQHJlcXVpcmVzX3psaWIKIGNsYXNzIERlZmxhdGVCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9ERUZMQVRFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCi0gICAgICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCi0gICAgICAgICAgICBiJ31ceDBjPUZBS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDUnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCi0gICAgICAgICAgICBiJ1x4MDFceDAwM1x4MDBceDAwXHgwMDNceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMFx4MDBceDA4XHgwMG59XHgwYz1GQScKKyAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCisgICAgICAgIGInPVx4MTNceDAwUEtceDAxXHgwMlx4MTRceDAzXHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbicKKyAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgwMGFmaWxlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCcKKyAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiBAcmVxdWlyZXNfYnoyCiBjbGFzcyBCemlwMkJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0JaSVAyCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0U4XHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlQlpoOTFBWSZTWVx4ZDRceGE4XHhjYScKLSAgICAgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKLSAgICAgICAgICAgIGInUFx4ZDkhXHgwM1x4MDNceDEzXHgxM1x4MTNceDg5XHhhOVx4YTlceGMydTU6XHg5ZicKLSAgICAgICAgICAgIGInXHg4Ylx4YjkiXHg5YyhIalRlP1x4ODBQS1x4MDFceDAyXHgxNCcKLSAgICAgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbGVQSycKLSAgICAgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRThceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZUJaaDkxQVkmU1lceGQ0XHhhOFx4Y2EnCisgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKKyAgICAgICAgYidQXHhkOSFceDAzXHgwM1x4MTNceDEzXHgxM1x4ODlceGE5XHhhOVx4YzJ1NTpceDlmJworICAgICAgICBiJ1x4OGJceGI5Ilx4OWMoSGpUZT9ceDgwUEtceDAxXHgwMlx4MTQnCisgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWxlUEsnCisgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwJykKIAogQHJlcXVpcmVzX2x6bWEKIGNsYXNzIEx6bWFCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCi0gICAgICAgICAgICBiJ1x4ZWVceDhkXHhlOVx4MTdceDg5OjNgXHRxIS44XHgwMFBLJwotICAgICAgICAgICAgYidceDAxXHgwMlx4MTRceDAzXHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsJwotICAgICAgICAgICAgYidlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwJwotICAgICAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJworICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCisgICAgICAgIGInXHhlZVx4OGRceGU5XHgxN1x4ODk6M2BcdHEhLjhceDAwUEsnCisgICAgICAgIGInXHgwMVx4MDJceDE0XHgwM1x4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWwnCisgICAgICAgIGInZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMCcKKyAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKIAogCiBjbGFzcyBEZWNyeXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTI5MSwyMiArMTM1NCwyMiBAQAogICAgIFpJUCBmaWxlLiIiIgogCiAgICAgZGF0YSA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKLSAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCi0gICAgYidceDE4XHhlMFx4YThyXHhiM1p9TGdceGJjXHhhZVx4Zjl8XHg5Ylx4MTlceGU0XHg4Ylx4YmFceGJiKVx4OGNceGIwXHhkYmwnCi0gICAgYidQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCi0gICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCi0gICAgYidceDAwXHgwMFx4MDBceDAwdGVzdC50eHRQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDA2XHgwMCcKLSAgICBiJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMFx4MWFceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCisgICAgICAgIGInXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJworICAgICAgICBiJ1BLXHgwMVx4MDJceDE0XHgwMFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCisgICAgICAgIGInXHgwMFx4MDBMXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKICAgICBkYXRhMiA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCi0gICAgYidceDAwXHgwMFx4MDRceDAwXHgxNVx4MDB6ZXJvVVRcdFx4MDBceDAzXHhkNlx4OGJceDkyR1x4ZGFceDhiXHg5MkdVeFx4MDQnCi0gICAgYidceDAwXHhlOFx4MDNceGU4XHgwM1x4Yzc8TVx4YjVhXHhjZVhceGEzWSZceDhie29FXHhkN1x4OWRceDhjXHg5OFx4MDJceGMwJwotICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKLSAgICBiJ1x4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgIGInXHgwNFx4MDBcclx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4YTRceDgxXHgwMFx4MDBceDAwXHgwMHplJwotICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJwotICAgIGInXHgwMFx4MDFceDAwP1x4MDBceDAwXHgwMFtceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCisgICAgICAgIGInXHgwMFx4MDBceDA0XHgwMFx4MTVceDAwemVyb1VUXHRceDAwXHgwM1x4ZDZceDhiXHg5MkdceGRhXHg4Ylx4OTJHVXhceDA0JworICAgICAgICBiJ1x4MDBceGU4XHgwM1x4ZThceDAzXHhjNzxNXHhiNWFceGNlWFx4YTNZJlx4OGJ7b0VceGQ3XHg5ZFx4OGNceDk4XHgwMlx4YzAnCisgICAgICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKKyAgICAgICAgYidceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKKyAgICAgICAgYidceDA0XHgwMFxyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwXHgwMFx4MDBceDAwemUnCisgICAgICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJworICAgICAgICBiJ1x4MDBceDAxXHgwMD9ceDAwXHgwMFx4MDBbXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKIAogICAgIHBsYWluID0gYid6aXBmaWxlLnB5IGVuY3J5cHRpb24gdGVzdCcKICAgICBwbGFpbjIgPSBiJ1x4MDAnKjUxMgpAQCAtMTU2NSw3ICsxNjI4LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgZnA6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICB6aXBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyY2RhdGFbc2VwXSwgemlwZGF0YSkKIApAQCAtMTU3OSw3ICsxNjQyLDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGInJwogICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQpAQCAtMTYwNCw3ICsxNjY3LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgYidcbicpCkBAIC0xNjE5LDcgKzE2ODIsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHppcGxpbmVzID0gZnAucmVhZGxpbmVzKCkKICAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyBiJ1xuJykKQEAgLTE2MzQsNyArMTY5Nyw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIGZwKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQogCkBAIC0xNjY4LDYgKzE3MzEsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKaW5kZXggYThmYjdhYi4uNDk4ZDQ2NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlLgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PVRydWUpCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBJdCB3aWxsIGNvbnRhaW4gZW5vdWdoIGNvcGllcyBvZiBzZWxmLmRhdGEgdG8gcmVhY2ggYWJvdXQgNkdCIG9mCiAgICAgICAgICMgcmF3IGRhdGEgdG8gc3RvcmUuCkBAIC05Miw3ICs5Miw3IEBACiAgICAgZGVmIHRlc3RNb3JlVGhhbjY0a0ZpbGVzKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBtb3JlIHRoYW4gNjRrIGZpbGVzIGNhbiBiZSBhZGRlZCB0byBhbiBhcmNoaXZlLAogICAgICAgICAjIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgYXJjaGl2ZSBjYW4gYmUgcmVhZCBwcm9wZXJseSBieSBaaXBGaWxlCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciLCBhbGxvd1ppcDY0PUZhbHNlKQogICAgICAgICB6aXBmLmRlYnVnID0gMTAwCiAgICAgICAgIG51bWZpbGVzID0gKDEgPDwgMTYpICogMy8vMgogICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CmluZGV4IGY3Y2I4YjkuLjNmMTYwNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CkBAIC0xLDEzICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBtYXJzaGFsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRob29rcyBpbXBvcnQgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UsIHRlc3Rfc3JjLCB0ZXN0X2NvCiAKIGZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgWmlwSW5mbywgWklQX1NUT1JFRCwgWklQX0RFRkxBVEVECiAKQEAgLTE3LDYgKzE2LDE0IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IGlvCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZXh0cmFjdF90YiwgZXh0cmFjdF9zdGFjaywgcHJpbnRfdGIKKwordGVzdF9zcmMgPSAiIiJcCitkZWYgZ2V0X25hbWUoKToKKyAgICByZXR1cm4gX19uYW1lX18KK2RlZiBnZXRfZmlsZSgpOgorICAgIHJldHVybiBfX2ZpbGVfXworIiIiCit0ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQogcmFpc2Vfc3JjID0gJ2RlZiBkb19yYWlzZSgpOiByYWlzZSBUeXBlRXJyb3JcbicKIAogZGVmIG1ha2VfcHljKGNvLCBtdGltZSwgc2l6ZSk6CkBAIC0yNyw3ICszNCw4IEBACiAgICAgICAgICAgICBtdGltZSA9IGludChtdGltZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG10aW1lID0gaW50KC0weDEwMDAwMDAwMCArIGludChtdGltZSkpCi0gICAgcHljID0gaW1wLmdldF9tYWdpYygpICsgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEKKyAgICBweWMgPSAoaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSICsKKyAgICAgICAgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEpCiAgICAgcmV0dXJuIHB5YwogCiBkZWYgbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUocGF0aCk6CkBAIC00MiwxMCArNTAsMjcgQEAKIFRFU1RQQUNLMiA9ICJ6aXB0ZXN0cGFja2FnZTIiCiBURU1QX1pJUCA9IG9zLnBhdGguYWJzcGF0aCgianVuazk1MTQyLnppcCIpCiAKLXB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKFRFU1RNT0QgKyAnLnB5JykKK3B5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVE1PRCArICcucHknKQogcHljX2V4dCA9ICgnLnB5YycgaWYgX19kZWJ1Z19fIGVsc2UgJy5weW8nKQogCiAKK2NsYXNzIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCisgICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgc2VsZi5tb2R1bGVzX2JlZm9yZSA9IHN1cHBvcnQubW9kdWxlc19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5wYXRoCisgICAgICAgIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLm1ldGFfcGF0aAorICAgICAgICBzeXMucGF0aF9ob29rc1s6XSA9IHNlbGYucGF0aF9ob29rcworICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgICAgIHN1cHBvcnQubW9kdWxlc19jbGVhbnVwKCpzZWxmLm1vZHVsZXNfYmVmb3JlKQorCisKIGNsYXNzIFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKIAogICAgIGNvbXByZXNzaW9uID0gWklQX1NUT1JFRApAQCAtMTk2LDYgKzIyMSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJzcGFtIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtMjQ1LDYgKzI3MSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJlZ2dzIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtNDU5LDcgKzQ4Niw3IEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmxvYWRfbW9kdWxlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmdldF9jb2RlLCAnYWJjJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHouZ2V0X2RhdGEsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgei5nZXRfZGF0YSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfc291cmNlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmlzX3BhY2thZ2UsICdhYmMnKQogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKaW5kZXggZjdmMzM5OC4uODRiYTVlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CkBAIC0yMjcsMTMgKzIyNywxNSBAQAogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbihzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbih6aXBfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weSBiL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKaW5kZXggOTJlYmQ5NS4uYWZlNTBkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQorKysgYi9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIG9zLndyaXRlKGZkLCBiImJsYXQiKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBTdWNjZXNzIC0tIGNvdWxkIG5vdCB3cml0ZSB0byBmZC4KICAgICAgICAgc3lzLmV4aXQoMCkKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3RleHR3cmFwLnB5IGIvTGliL3RleHR3cmFwLnB5CmluZGV4IDcwMjRkNGQuLjI0ODkxODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXh0d3JhcC5weQorKysgYi9MaWIvdGV4dHdyYXAucHkKQEAgLTcsNyArNyw3IEBACiAKIGltcG9ydCByZQogCi1fX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCddCitfX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCcsICdzaG9ydGVuJ10KIAogIyBIYXJkY29kZSB0aGUgcmVjb2duaXplZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gdGhlIFVTLUFTQ0lJCiAjIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIFRoZSBtYWluIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpcyB0aGF0IGluCkBAIC02Miw2ICs2MiwxMCBAQAogICAgICAgICBjb21wb3VuZCB3b3Jkcy4KICAgICAgIGRyb3Bfd2hpdGVzcGFjZSAoZGVmYXVsdDogdHJ1ZSkKICAgICAgICAgRHJvcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gbGluZXMuCisgICAgICBtYXhfbGluZXMgKGRlZmF1bHQ6IE5vbmUpCisgICAgICAgIFRydW5jYXRlIHdyYXBwZWQgbGluZXMuCisgICAgICBwbGFjZWhvbGRlciAoZGVmYXVsdDogJyBbLi4uXScpCisgICAgICAgIEFwcGVuZCB0byB0aGUgbGFzdCBsaW5lIG9mIHRydW5jYXRlZCB0ZXh0LgogICAgICIiIgogCiAgICAgdW5pY29kZV93aGl0ZXNwYWNlX3RyYW5zID0ge30KQEAgLTEwNCw3ICsxMDgsMTAgQEAKICAgICAgICAgICAgICAgICAgYnJlYWtfbG9uZ193b3Jkcz1UcnVlLAogICAgICAgICAgICAgICAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwKICAgICAgICAgICAgICAgICAgYnJlYWtfb25faHlwaGVucz1UcnVlLAotICAgICAgICAgICAgICAgICB0YWJzaXplPTgpOgorICAgICAgICAgICAgICAgICB0YWJzaXplPTgsCisgICAgICAgICAgICAgICAgICosCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz1Ob25lLAorICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFsuLi5dJyk6CiAgICAgICAgIHNlbGYud2lkdGggPSB3aWR0aAogICAgICAgICBzZWxmLmluaXRpYWxfaW5kZW50ID0gaW5pdGlhbF9pbmRlbnQKICAgICAgICAgc2VsZi5zdWJzZXF1ZW50X2luZGVudCA9IHN1YnNlcXVlbnRfaW5kZW50CkBAIC0xMTUsNiArMTIyLDggQEAKICAgICAgICAgc2VsZi5kcm9wX3doaXRlc3BhY2UgPSBkcm9wX3doaXRlc3BhY2UKICAgICAgICAgc2VsZi5icmVha19vbl9oeXBoZW5zID0gYnJlYWtfb25faHlwaGVucwogICAgICAgICBzZWxmLnRhYnNpemUgPSB0YWJzaXplCisgICAgICAgIHNlbGYubWF4X2xpbmVzID0gbWF4X2xpbmVzCisgICAgICAgIHNlbGYucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcgogCiAKICAgICAjIC0tIFByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjIzLDYgKzIzMiwxMyBAQAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIHNlbGYud2lkdGggPD0gMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2lkdGggJXIgKG11c3QgYmUgPiAwKSIgJSBzZWxmLndpZHRoKQorICAgICAgICBpZiBzZWxmLm1heF9saW5lcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYubWF4X2xpbmVzID4gMToKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBzZWxmLnN1YnNlcXVlbnRfaW5kZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZGVudCA9IHNlbGYuaW5pdGlhbF9pbmRlbnQKKyAgICAgICAgICAgIGlmIGxlbihpbmRlbnQpICsgbGVuKHNlbGYucGxhY2Vob2xkZXIubHN0cmlwKCkpID4gc2VsZi53aWR0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwbGFjZWhvbGRlciB0b28gbGFyZ2UgZm9yIG1heCB3aWR0aCIpCiAKICAgICAgICAgIyBBcnJhbmdlIGluIHJldmVyc2Ugb3JkZXIgc28gaXRlbXMgY2FuIGJlIGVmZmljaWVudGx5IHBvcHBlZAogICAgICAgICAjIGZyb20gYSBzdGFjayBvZiBjaHVja3MuCkBAIC0yNjUsMTggKzI4MSw0NyBAQAogICAgICAgICAgICAgIyBmaXQgb24gKmFueSogbGluZSAobm90IGp1c3QgdGhpcyBvbmUpLgogICAgICAgICAgICAgaWYgY2h1bmtzIGFuZCBsZW4oY2h1bmtzWy0xXSkgPiB3aWR0aDoKICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfbG9uZ193b3JkKGNodW5rcywgY3VyX2xpbmUsIGN1cl9sZW4sIHdpZHRoKQorICAgICAgICAgICAgICAgIGN1cl9sZW4gPSBzdW0obWFwKGxlbiwgY3VyX2xpbmUpKQogCiAgICAgICAgICAgICAjIElmIHRoZSBsYXN0IGNodW5rIG9uIHRoaXMgbGluZSBpcyBhbGwgd2hpdGVzcGFjZSwgZHJvcCBpdC4KICAgICAgICAgICAgIGlmIHNlbGYuZHJvcF93aGl0ZXNwYWNlIGFuZCBjdXJfbGluZSBhbmQgY3VyX2xpbmVbLTFdLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICAgICAgY3VyX2xlbiAtPSBsZW4oY3VyX2xpbmVbLTFdKQogICAgICAgICAgICAgICAgIGRlbCBjdXJfbGluZVstMV0KIAotICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbiBsaXN0Ci0gICAgICAgICAgICAjIG9mIGFsbCBsaW5lcyAocmV0dXJuIHZhbHVlKS4KICAgICAgICAgICAgIGlmIGN1cl9saW5lOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5tYXhfbGluZXMgaXMgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICBsZW4obGluZXMpICsgMSA8IHNlbGYubWF4X2xpbmVzIG9yCisgICAgICAgICAgICAgICAgICAgIChub3QgY2h1bmtzIG9yCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmRyb3Bfd2hpdGVzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGxlbihjaHVua3MpID09IDEgYW5kCisgICAgICAgICAgICAgICAgICAgICBub3QgY2h1bmtzWzBdLnN0cmlwKCkpIGFuZCBjdXJfbGVuIDw9IHdpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbgorICAgICAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgYWxsIGxpbmVzIChyZXR1cm4gdmFsdWUpLgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgY3VyX2xpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyX2xpbmVbLTFdLnN0cmlwKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xlbiArIGxlbihzZWxmLnBsYWNlaG9sZGVyKSA8PSB3aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xpbmUuYXBwZW5kKHNlbGYucGxhY2Vob2xkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGVuIC09IGxlbihjdXJfbGluZVstMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY3VyX2xpbmVbLTFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2xpbmUgPSBsaW5lc1stMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHByZXZfbGluZSkgKyBsZW4oc2VsZi5wbGFjZWhvbGRlcikgPD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1stMV0gPSBwcmV2X2xpbmUgKyBzZWxmLnBsYWNlaG9sZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgc2VsZi5wbGFjZWhvbGRlci5sc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICByZXR1cm4gbGluZXMKIAorICAgIGRlZiBfc3BsaXRfY2h1bmtzKHNlbGYsIHRleHQpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQorICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXQodGV4dCkKIAogICAgICMgLS0gUHVibGljIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI4OSw4ICszMzQsNyBAQAogICAgICAgICBhbmQgYWxsIG90aGVyIHdoaXRlc3BhY2UgY2hhcmFjdGVycyAoaW5jbHVkaW5nIG5ld2xpbmUpIGFyZQogICAgICAgICBjb252ZXJ0ZWQgdG8gc3BhY2UuCiAgICAgICAgICIiIgotICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQotICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdCh0ZXh0KQorICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdF9jaHVua3ModGV4dCkKICAgICAgICAgaWYgc2VsZi5maXhfc2VudGVuY2VfZW5kaW5nczoKICAgICAgICAgICAgIHNlbGYuX2ZpeF9zZW50ZW5jZV9lbmRpbmdzKGNodW5rcykKICAgICAgICAgcmV0dXJuIHNlbGYuX3dyYXBfY2h1bmtzKGNodW5rcykKQEAgLTMzMiw2ICszNzYsMjEgQEAKICAgICB3ID0gVGV4dFdyYXBwZXIod2lkdGg9d2lkdGgsICoqa3dhcmdzKQogICAgIHJldHVybiB3LmZpbGwodGV4dCkKIAorZGVmIHNob3J0ZW4odGV4dCwgd2lkdGgsICoqa3dhcmdzKToKKyAgICAiIiJDb2xsYXBzZSBhbmQgdHJ1bmNhdGUgdGhlIGdpdmVuIHRleHQgdG8gZml0IGluIHRoZSBnaXZlbiB3aWR0aC4KKworICAgIFRoZSB0ZXh0IGZpcnN0IGhhcyBpdHMgd2hpdGVzcGFjZSBjb2xsYXBzZWQuICBJZiBpdCB0aGVuIGZpdHMgaW4KKyAgICB0aGUgKndpZHRoKiwgaXQgaXMgcmV0dXJuZWQgYXMgaXMuICBPdGhlcndpc2UsIGFzIG1hbnkgd29yZHMKKyAgICBhcyBwb3NzaWJsZSBhcmUgam9pbmVkIGFuZCB0aGVuIHRoZSBwbGFjZWhvbGRlciBpcyBhcHBlbmRlZDo6CisKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMikKKyAgICAgICAgJ0hlbGxvIHdvcmxkIScKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMSkKKyAgICAgICAgJ0hlbGxvIFsuLi5dJworICAgICIiIgorICAgIHcgPSBUZXh0V3JhcHBlcih3aWR0aD13aWR0aCwgbWF4X2xpbmVzPTEsICoqa3dhcmdzKQorICAgIHJldHVybiB3LmZpbGwoJyAnLmpvaW4odGV4dC5zdHJpcCgpLnNwbGl0KCkpKQorCiAKICMgLS0gTG9vc2VseSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9MaWIvdGhyZWFkaW5nLnB5IGIvTGliL3RocmVhZGluZy5weQppbmRleCA2MjVjOWI5Li5kOTA3Yzg5IDEwMDY0NAotLS0gYS9MaWIvdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90aHJlYWRpbmcucHkKQEAgLTEwLDYgKzEwLDExIEBACiAgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YyBhcyBfZm9ybWF0X2V4YwogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZSBhcyBfaXNsaWNlCit0cnk6CisgICAgZnJvbSBfY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlIGFzIF9kZXF1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlIGFzIF9kZXF1ZQogCiAjIE5vdGUgcmVnYXJkaW5nIFBFUCA4IGNvbXBsaWFudCBuYW1lcwogIyAgVGhpcyB0aHJlYWRpbmcgbW9kZWwgd2FzIG9yaWdpbmFsbHkgaW5zcGlyZWQgYnkgSmF2YSwgYW5kIGluaGVyaXRlZApAQCAtMjgsNiArMzMsNyBAQAogIyBSZW5hbWUgc29tZSBzdHVmZiBzbyAiZnJvbSB0aHJlYWRpbmcgaW1wb3J0ICoiIGlzIHNhZmUKIF9zdGFydF9uZXdfdGhyZWFkID0gX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkCiBfYWxsb2NhdGVfbG9jayA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaworX3NldF9zZW50aW5lbCA9IF90aHJlYWQuX3NldF9zZW50aW5lbAogZ2V0X2lkZW50ID0gX3RocmVhZC5nZXRfaWRlbnQKIFRocmVhZEVycm9yID0gX3RocmVhZC5lcnJvcgogdHJ5OgpAQCAtMTMyLDcgKzEzOCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBtZSA9IGdldF9pZGVudCgpCiAgICAgICAgIGlmIHNlbGYuX293bmVyID09IG1lOgotICAgICAgICAgICAgc2VsZi5fY291bnQgPSBzZWxmLl9jb3VudCArIDEKKyAgICAgICAgICAgIHNlbGYuX2NvdW50ICs9IDEKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgIHJjID0gc2VsZi5fYmxvY2suYWNxdWlyZShibG9ja2luZywgdGltZW91dCkKICAgICAgICAgaWYgcmM6CkBAIC0yMjQsNyArMjMwLDcgQEAKICAgICAgICAgICAgIHNlbGYuX2lzX293bmVkID0gbG9jay5faXNfb3duZWQKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLl93YWl0ZXJzID0gW10KKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IF9kZXF1ZSgpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbG9jay5fX2VudGVyX18oKQpAQCAtMzMyLDE0ICszMzgsMTQgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLl9pc19vd25lZCgpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3Qgbm90aWZ5IG9uIHVuLWFjcXVpcmVkIGxvY2siKQotICAgICAgICBfX3dhaXRlcnMgPSBzZWxmLl93YWl0ZXJzCi0gICAgICAgIHdhaXRlcnMgPSBfX3dhaXRlcnNbOm5dCi0gICAgICAgIGlmIG5vdCB3YWl0ZXJzOgorICAgICAgICBhbGxfd2FpdGVycyA9IHNlbGYuX3dhaXRlcnMKKyAgICAgICAgd2FpdGVyc190b19ub3RpZnkgPSBfZGVxdWUoX2lzbGljZShhbGxfd2FpdGVycywgbikpCisgICAgICAgIGlmIG5vdCB3YWl0ZXJzX3RvX25vdGlmeToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgIGZvciB3YWl0ZXIgaW4gd2FpdGVyc190b19ub3RpZnk6CiAgICAgICAgICAgICB3YWl0ZXIucmVsZWFzZSgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgX193YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICAgICAgYWxsX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIApAQCAtNDE0LDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBzZWxmLl9jb25kLndhaXQodGltZW91dCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSAtIDEKKyAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCiAgICAgICAgICAgICAgICAgcmMgPSBUcnVlCiAgICAgICAgIHJldHVybiByYwogCkBAIC00MjgsNyArNDM0LDcgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9jb25kOgotICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSArIDEKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlICs9IDEKICAgICAgICAgICAgIHNlbGYuX2NvbmQubm90aWZ5KCkKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CkBAIC03MjMsMTUgKzcyOSwxMyBAQAogX2NvdW50ZXIgPSAwCiBkZWYgX25ld25hbWUodGVtcGxhdGU9IlRocmVhZC0lZCIpOgogICAgIGdsb2JhbCBfY291bnRlcgotICAgIF9jb3VudGVyID0gX2NvdW50ZXIgKyAxCisgICAgX2NvdW50ZXIgKz0gMQogICAgIHJldHVybiB0ZW1wbGF0ZSAlIF9jb3VudGVyCiAKICMgQWN0aXZlIHRocmVhZCBhZG1pbmlzdHJhdGlvbgogX2FjdGl2ZV9saW1ib19sb2NrID0gX2FsbG9jYXRlX2xvY2soKQogX2FjdGl2ZSA9IHt9ICAgICMgbWFwcyB0aHJlYWQgaWQgdG8gVGhyZWFkIG9iamVjdAogX2xpbWJvID0ge30KLQotIyBGb3IgZGVidWcgYW5kIGxlYWsgdGVzdGluZwogX2RhbmdsaW5nID0gV2Vha1NldCgpCiAKICMgTWFpbiBjbGFzcyBmb3IgdGhyZWFkcwpAQCAtNzkwLDI4ICs3OTQsMzUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gY3VycmVudF90aHJlYWQoKS5kYWVtb24KICAgICAgICAgc2VsZi5faWRlbnQgPSBOb25lCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkID0gRXZlbnQoKQotICAgICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fYmxvY2sgPSBDb25kaXRpb24oTG9jaygpKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZWQgPSBUcnVlCiAgICAgICAgICMgc3lzLnN0ZGVyciBpcyBub3Qgc3RvcmVkIGluIHRoZSBjbGFzcyBsaWtlCiAgICAgICAgICMgc3lzLmV4Y19pbmZvIHNpbmNlIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gaW5zdGFuY2VzCiAgICAgICAgIHNlbGYuX3N0ZGVyciA9IF9zeXMuc3RkZXJyCisgICAgICAgICMgRm9yIGRlYnVnZ2luZyBhbmQgX2FmdGVyX2ZvcmsoKQogICAgICAgICBfZGFuZ2xpbmcuYWRkKHNlbGYpCiAKLSAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZiwgaXNfYWxpdmUpOgogICAgICAgICAjIHByaXZhdGUhICBDYWxsZWQgYnkgX2FmdGVyX2ZvcmsoKSB0byByZXNldCBvdXIgaW50ZXJuYWwgbG9ja3MgYXMKICAgICAgICAgIyB0aGV5IG1heSBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGxlYWRpbmcgdG8gYSBkZWFkbG9jayBvciBjcmFzaC4KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2Jsb2NrJyk6ICAjIER1bW15VGhyZWFkIGRlbGV0ZXMgX2Jsb2NrCi0gICAgICAgICAgICBzZWxmLl9ibG9jay5fX2luaXRfXygpCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKKyAgICAgICAgaWYgaXNfYWxpdmU6CisgICAgICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgdGhyZWFkIGlzbid0IGFsaXZlIGFmdGVyIGZvcms6IGl0IGRvZXNuJ3QgaGF2ZSBhIHRzdGF0ZQorICAgICAgICAgICAgIyBhbnltb3JlLgorICAgICAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCIKICAgICAgICAgc3RhdHVzID0gImluaXRpYWwiCiAgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6CiAgICAgICAgICAgICBzdGF0dXMgPSAic3RhcnRlZCIKLSAgICAgICAgaWYgc2VsZi5fc3RvcHBlZDoKKyAgICAgICAgc2VsZi5pc19hbGl2ZSgpICMgZWFzeSB3YXkgdG8gZ2V0IC5faXNfc3RvcHBlZCBzZXQgd2hlbiBhcHByb3ByaWF0ZQorICAgICAgICBpZiBzZWxmLl9pc19zdG9wcGVkOgogICAgICAgICAgICAgc3RhdHVzID0gInN0b3BwZWQiCiAgICAgICAgIGlmIHNlbGYuX2RhZW1vbmljOgogICAgICAgICAgICAgc3RhdHVzICs9ICIgZGFlbW9uIgpAQCAtODg0LDkgKzg5NSwxOCBAQAogICAgIGRlZiBfc2V0X2lkZW50KHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudCA9IGdldF9pZGVudCgpCiAKKyAgICBkZWYgX3NldF90c3RhdGVfbG9jayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCBhIGxvY2sgb2JqZWN0IHdoaWNoIHdpbGwgYmUgcmVsZWFzZWQgYnkgdGhlIGludGVycHJldGVyIHdoZW4KKyAgICAgICAgdGhlIHVuZGVybHlpbmcgdGhyZWFkIHN0YXRlIChzZWUgcHlzdGF0ZS5oKSBnZXRzIGRlbGV0ZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IF9zZXRfc2VudGluZWwoKQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jay5hY3F1aXJlKCkKKwogICAgIGRlZiBfYm9vdHN0cmFwX2lubmVyKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQorICAgICAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuc2V0KCkKICAgICAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgogICAgICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgpAQCAtOTQxLDcgKzk2MSw2IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2VsZi5fZGVsZXRlKCkgYmVjYXVzZSBpdCBhbHNvCiAgICAgICAgICAgICAgICAgICAgICMgZ3JhYnMgX2FjdGl2ZV9saW1ib19sb2NrLgpAQCAtOTUwLDEwICs5NjksMjcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF9zdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ibG9jay5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5fc3RvcHBlZCA9IFRydWUKLSAgICAgICAgc2VsZi5fYmxvY2subm90aWZ5X2FsbCgpCi0gICAgICAgIHNlbGYuX2Jsb2NrLnJlbGVhc2UoKQorICAgICAgICAjIEFmdGVyIGNhbGxpbmcgLl9zdG9wKCksIC5pc19hbGl2ZSgpIHJldHVybnMgRmFsc2UgYW5kIC5qb2luKCkgcmV0dXJucworICAgICAgICAjIGltbWVkaWF0ZWx5LiAgLl90c3RhdGVfbG9jayBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIC5fc3RvcCgpLgorICAgICAgICAjCisgICAgICAgICMgTm9ybWFsIGNhc2U6ICBDIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZQorICAgICAgICAjIChyZWxlYXNlX3NlbnRpbmVsIGluIF90aHJlYWRtb2R1bGUuYykgcmVsZWFzZXMgLl90c3RhdGVfbG9jaywgYW5kCisgICAgICAgICMgdGhhdCdzIGRldGVjdGVkIGJ5IG91ciAuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCksIGNhbGxlZCBieSAuam9pbigpCisgICAgICAgICMgYW5kIC5pc19hbGl2ZSgpLiAgQW55IG51bWJlciBvZiB0aHJlYWRzIF9tYXlfIGNhbGwgLl9zdG9wKCkKKyAgICAgICAgIyBzaW11bHRhbmVvdXNseSAoZm9yIGV4YW1wbGUsIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIGJsb2NrZWQgaW4KKyAgICAgICAgIyAuam9pbigpIGNhbGxzKSwgYW5kIHRoZXkncmUgbm90IHNlcmlhbGl6ZWQuICBUaGF0J3MgaGFybWxlc3MgLQorICAgICAgICAjIHRoZXknbGwganVzdCBtYWtlIHJlZHVuZGFudCByZWJpbmRpbmdzIG9mIC5faXNfc3RvcHBlZCBhbmQKKyAgICAgICAgIyAuX3RzdGF0ZV9sb2NrLiAgT2JzY3VyZTogIHdlIHJlYmluZCAuX3RzdGF0ZV9sb2NrIGxhc3Qgc28gdGhhdCB0aGUKKyAgICAgICAgIyAiYXNzZXJ0IHNlbGYuX2lzX3N0b3BwZWQiIGluIC5fd2FpdF9mb3JfdHN0YXRlX2xvY2soKSBhbHdheXMgd29ya3MKKyAgICAgICAgIyAodGhlIGFzc2VydCBpcyBleGVjdXRlZCBvbmx5IGlmIC5fdHN0YXRlX2xvY2sgaXMgTm9uZSkuCisgICAgICAgICMKKyAgICAgICAgIyBTcGVjaWFsIGNhc2U6ICBfbWFpbl90aHJlYWQgcmVsZWFzZXMgLl90c3RhdGVfbG9jayB2aWEgdGhpcworICAgICAgICAjIG1vZHVsZSdzIF9zaHV0ZG93bigpIGZ1bmN0aW9uLgorICAgICAgICBsb2NrID0gc2VsZi5fdHN0YXRlX2xvY2sKKyAgICAgICAgaWYgbG9jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFzc2VydCBub3QgbG9jay5sb2NrZWQoKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gVHJ1ZQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKIAogICAgIGRlZiBfZGVsZXRlKHNlbGYpOgogICAgICAgICAiUmVtb3ZlIGN1cnJlbnQgdGhyZWFkIGZyb20gdGhlIGRpY3Qgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGhyZWFkcy4iCkBAIC0xMDIxLDIwICsxMDU3LDI2IEBACiAgICAgICAgIGlmIHNlbGYgaXMgY3VycmVudF90aHJlYWQoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IGpvaW4gY3VycmVudCB0aHJlYWQiKQogCi0gICAgICAgIHNlbGYuX2Jsb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jsb2NrLndhaXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gZGVhZGxpbmUgLSBfdGltZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGRlbGF5IDw9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9jay53YWl0KGRlbGF5KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fYmxvY2sucmVsZWFzZSgpCisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGJlaGF2aW9yIG9mIGEgbmVnYXRpdmUgdGltZW91dCBpc24ndCBkb2N1bWVudGVkLCBidXQKKyAgICAgICAgICAgICMgaGlzdG9yaWNhbGx5IC5qb2luKHRpbWVvdXQ9eCkgZm9yIHg8MCBoYXMgYWN0ZWQgYXMgaWYgdGltZW91dD0wCisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayh0aW1lb3V0PW1heCh0aW1lb3V0LCAwKSkKKworICAgIGRlZiBfd2FpdF9mb3JfdHN0YXRlX2xvY2soc2VsZiwgYmxvY2s9VHJ1ZSwgdGltZW91dD0tMSk6CisgICAgICAgICMgSXNzdWUgIzE4ODA4OiB3YWl0IGZvciB0aGUgdGhyZWFkIHN0YXRlIHRvIGJlIGdvbmUuCisgICAgICAgICMgQXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZSwgYWZ0ZXIgYWxsIGtub3dsZWRnZSBvZiB0aGUgdGhyZWFkCisgICAgICAgICMgaXMgcmVtb3ZlZCBmcm9tIEMgZGF0YSBzdHJ1Y3R1cmVzLCBDIGNvZGUgcmVsZWFzZXMgb3VyIF90c3RhdGVfbG9jay4KKyAgICAgICAgIyBUaGlzIG1ldGhvZCBwYXNzZXMgaXRzIGFyZ3VtZW50cyB0byBfdHN0YXRlX2xvY2suYXF1aXJlKCkuCisgICAgICAgICMgSWYgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoZSBDIGNvZGUgaXMgZG9uZSwgYW5kIHNlbGYuX3N0b3AoKSBpcworICAgICAgICAjIGNhbGxlZC4gIFRoYXQgc2V0cyAuX2lzX3N0b3BwZWQgdG8gVHJ1ZSwgYW5kIC5fdHN0YXRlX2xvY2sgdG8gTm9uZS4KKyAgICAgICAgbG9jayA9IHNlbGYuX3RzdGF0ZV9sb2NrCisgICAgICAgIGlmIGxvY2sgaXMgTm9uZTogICMgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQgdGhlIEMgY29kZSBpcyBkb25lCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5faXNfc3RvcHBlZAorICAgICAgICBlbGlmIGxvY2suYWNxdWlyZShibG9jaywgdGltZW91dCk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgbmFtZShzZWxmKToKQEAgLTEwNzMsNyArMTExNSwxMCBAQAogCiAgICAgICAgICIiIgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSBub3QgY2FsbGVkIgotICAgICAgICByZXR1cm4gc2VsZi5fc3RhcnRlZC5pc19zZXQoKSBhbmQgbm90IHNlbGYuX3N0b3BwZWQKKyAgICAgICAgaWYgc2VsZi5faXNfc3RvcHBlZCBvciBub3Qgc2VsZi5fc3RhcnRlZC5pc19zZXQoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayhGYWxzZSkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9pc19zdG9wcGVkCiAKICAgICBpc0FsaXZlID0gaXNfYWxpdmUKIApAQCAtMTE0OSwyNSArMTE5NCwxMiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iTWFpblRocmVhZCIsIGRhZW1vbj1GYWxzZSkKKyAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgogCi0gICAgZGVmIF9leGl0ZnVuYyhzZWxmKToKLSAgICAgICAgc2VsZi5fc3RvcCgpCi0gICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICB3aGlsZSB0OgotICAgICAgICAgICAgdC5qb2luKCkKLSAgICAgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICBzZWxmLl9kZWxldGUoKQotCi1kZWYgX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCk6Ci0gICAgZm9yIHQgaW4gZW51bWVyYXRlKCk6Ci0gICAgICAgIGlmIG5vdCB0LmRhZW1vbiBhbmQgdC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgcmV0dXJuIHQKLSAgICByZXR1cm4gTm9uZQotCiAKICMgRHVtbXkgdGhyZWFkIGNsYXNzIHRvIHJlcHJlc2VudCB0aHJlYWRzIG5vdCBzdGFydGVkIGhlcmUuCiAjIFRoZXNlIGFyZW4ndCBnYXJiYWdlIGNvbGxlY3RlZCB3aGVuIHRoZXkgZGllLCBub3IgY2FuIHRoZXkgYmUgd2FpdGVkIGZvci4KQEAgLTExODIsMTEgKzEyMTQsNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9X25ld25hbWUoIkR1bW15LSVkIiksIGRhZW1vbj1UcnVlKQogCi0gICAgICAgICMgVGhyZWFkLl9ibG9jayBjb25zdW1lcyBhbiBPUy1sZXZlbCBsb2NraW5nIHByaW1pdGl2ZSwgd2hpY2gKLSAgICAgICAgIyBjYW4gbmV2ZXIgYmUgdXNlZCBieSBhIF9EdW1teVRocmVhZC4gIFNpbmNlIGEgX0R1bW15VGhyZWFkCi0gICAgICAgICMgaW5zdGFuY2UgaXMgaW1tb3J0YWwsIHRoYXQncyBiYWQsIHNvIHJlbGVhc2UgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgZGVsIHNlbGYuX2Jsb2NrCi0KICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKQEAgLTEyNDgsNyArMTI3NSw0MCBAQAogIyBhbmQgbWFrZSBpdCBhdmFpbGFibGUgZm9yIHRoZSBpbnRlcnByZXRlcgogIyAoUHlfTWFpbikgYXMgdGhyZWFkaW5nLl9zaHV0ZG93bi4KIAotX3NodXRkb3duID0gX01haW5UaHJlYWQoKS5fZXhpdGZ1bmMKK19tYWluX3RocmVhZCA9IF9NYWluVGhyZWFkKCkKKworZGVmIF9zaHV0ZG93bigpOgorICAgICMgT2JzY3VyZTogIG90aGVyIHRocmVhZHMgbWF5IGJlIHdhaXRpbmcgdG8gam9pbiBfbWFpbl90aHJlYWQuICBUaGF0J3MKKyAgICAjIGR1YmlvdXMsIGJ1dCBzb21lIGNvZGUgZG9lcyBpdC4gIFdlIGNhbid0IHdhaXQgZm9yIEMgY29kZSB0byByZWxlYXNlCisgICAgIyB0aGUgbWFpbiB0aHJlYWQncyB0c3RhdGVfbG9jayAtIHRoYXQgd29uJ3QgaGFwcGVuIHVudGlsIHRoZSBpbnRlcnByZXRlcgorICAgICMgaXMgbmVhcmx5IGRlYWQuICBTbyB3ZSByZWxlYXNlIGl0IGhlcmUuICBOb3RlIHRoYXQganVzdCBjYWxsaW5nIF9zdG9wKCkKKyAgICAjIGlzbid0IGVub3VnaDogIG90aGVyIHRocmVhZHMgbWF5IGFscmVhZHkgYmUgd2FpdGluZyBvbiBfdHN0YXRlX2xvY2suCisgICAgdGxvY2sgPSBfbWFpbl90aHJlYWQuX3RzdGF0ZV9sb2NrCisgICAgIyBUaGUgbWFpbiB0aHJlYWQgaXNuJ3QgZmluaXNoZWQgeWV0LCBzbyBpdHMgdGhyZWFkIHN0YXRlIGxvY2sgY2FuJ3QgaGF2ZQorICAgICMgYmVlbiByZWxlYXNlZC4KKyAgICBhc3NlcnQgdGxvY2sgaXMgbm90IE5vbmUKKyAgICBhc3NlcnQgdGxvY2subG9ja2VkKCkKKyAgICB0bG9jay5yZWxlYXNlKCkKKyAgICBfbWFpbl90aHJlYWQuX3N0b3AoKQorICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIHdoaWxlIHQ6CisgICAgICAgIHQuam9pbigpCisgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIF9tYWluX3RocmVhZC5fZGVsZXRlKCkKKworZGVmIF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpOgorICAgIGZvciB0IGluIGVudW1lcmF0ZSgpOgorICAgICAgICBpZiBub3QgdC5kYWVtb24gYW5kIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJldHVybiB0CisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1haW5fdGhyZWFkKCk6CisgICAgIiIiUmV0dXJuIHRoZSBtYWluIHRocmVhZCBvYmplY3QuCisKKyAgICBJbiBub3JtYWwgY29uZGl0aW9ucywgdGhlIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUKKyAgICBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQuCisgICAgIiIiCisgICAgcmV0dXJuIF9tYWluX3RocmVhZAogCiAjIGdldCB0aHJlYWQtbG9jYWwgaW1wbGVtZW50YXRpb24sIGVpdGhlciBmcm9tIHRoZSB0aHJlYWQKICMgbW9kdWxlLCBvciBmcm9tIHRoZSBweXRob24gZmFsbGJhY2sKQEAgLTEyNjYsMjUgKzEzMjYsMzEgQEAKIAogICAgICMgUmVzZXQgX2FjdGl2ZV9saW1ib19sb2NrLCBpbiBjYXNlIHdlIGZvcmtlZCB3aGlsZSB0aGUgbG9jayB3YXMgaGVsZAogICAgICMgYnkgYW5vdGhlciAobm9uLWZvcmtlZCkgdGhyZWFkLiAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3NDkwMAotICAgIGdsb2JhbCBfYWN0aXZlX2xpbWJvX2xvY2sKKyAgICBnbG9iYWwgX2FjdGl2ZV9saW1ib19sb2NrLCBfbWFpbl90aHJlYWQKICAgICBfYWN0aXZlX2xpbWJvX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpCiAKICAgICAjIGZvcmsoKSBvbmx5IGNvcGllZCB0aGUgY3VycmVudCB0aHJlYWQ7IGNsZWFyIHJlZmVyZW5jZXMgdG8gb3RoZXJzLgogICAgIG5ld19hY3RpdmUgPSB7fQogICAgIGN1cnJlbnQgPSBjdXJyZW50X3RocmVhZCgpCisgICAgX21haW5fdGhyZWFkID0gY3VycmVudAogICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICBmb3IgdGhyZWFkIGluIF9lbnVtZXJhdGUoKToKKyAgICAgICAgIyBEYW5nbGluZyB0aHJlYWQgaW5zdGFuY2VzIG11c3Qgc3RpbGwgaGF2ZSB0aGVpciBsb2NrcyByZXNldCwKKyAgICAgICAgIyBiZWNhdXNlIHNvbWVvbmUgbWF5IGpvaW4oKSB0aGVtLgorICAgICAgICB0aHJlYWRzID0gc2V0KF9lbnVtZXJhdGUoKSkKKyAgICAgICAgdGhyZWFkcy51cGRhdGUoX2RhbmdsaW5nKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAjIEFueSBsb2NrL2NvbmRpdGlvbiB2YXJpYWJsZSBtYXkgYmUgY3VycmVudGx5IGxvY2tlZCBvciBpbiBhbgogICAgICAgICAgICAgIyBpbnZhbGlkIHN0YXRlLCBzbyB3ZSByZWluaXRpYWxpemUgdGhlbS4KLSAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQogICAgICAgICAgICAgaWYgdGhyZWFkIGlzIGN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSBpcyBvbmx5IG9uZSBhY3RpdmUgdGhyZWFkLiBXZSByZXNldCB0aGUgaWRlbnQgdG8KICAgICAgICAgICAgICAgICAjIGl0cyBuZXcgdmFsdWUgc2luY2UgaXQgY2FuIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKFRydWUpCiAgICAgICAgICAgICAgICAgaWRlbnQgPSBnZXRfaWRlbnQoKQogICAgICAgICAgICAgICAgIHRocmVhZC5faWRlbnQgPSBpZGVudAogICAgICAgICAgICAgICAgIG5ld19hY3RpdmVbaWRlbnRdID0gdGhyZWFkCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgQWxsIHRoZSBvdGhlcnMgYXJlIGFscmVhZHkgc3RvcHBlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKEZhbHNlKQogICAgICAgICAgICAgICAgIHRocmVhZC5fc3RvcCgpCiAKICAgICAgICAgX2xpbWJvLmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90aW1laXQucHkgYi9MaWIvdGltZWl0LnB5CmluZGV4IDRmN2QyOGYuLmVhZDIwMzAgMTAwNjQ0Ci0tLSBhL0xpYi90aW1laXQucHkKKysrIGIvTGliL3RpbWVpdC5weQpAQCAtMzEsMzggKzMxLDI5IEBACiBJZiAtbiBpcyBub3QgZ2l2ZW4sIGEgc3VpdGFibGUgbnVtYmVyIG9mIGxvb3BzIGlzIGNhbGN1bGF0ZWQgYnkgdHJ5aW5nCiBzdWNjZXNzaXZlIHBvd2VycyBvZiAxMCB1bnRpbCB0aGUgdG90YWwgdGltZSBpcyBhdCBsZWFzdCAwLjIgc2Vjb25kcy4KIAotVGhlIGRpZmZlcmVuY2UgaW4gZGVmYXVsdCB0aW1lciBmdW5jdGlvbiBpcyBiZWNhdXNlIG9uIFdpbmRvd3MsCi1jbG9jaygpIGhhcyBtaWNyb3NlY29uZCBncmFudWxhcml0eSBidXQgdGltZSgpJ3MgZ3JhbnVsYXJpdHkgaXMgMS82MHRoCi1vZiBhIHNlY29uZDsgb24gVW5peCwgY2xvY2soKSBoYXMgMS8xMDB0aCBvZiBhIHNlY29uZCBncmFudWxhcml0eSBhbmQKLXRpbWUoKSBpcyBtdWNoIG1vcmUgcHJlY2lzZS4gIE9uIGVpdGhlciBwbGF0Zm9ybSwgdGhlIGRlZmF1bHQgdGltZXIKLWZ1bmN0aW9ucyBtZWFzdXJlIHdhbGwgY2xvY2sgdGltZSwgbm90IHRoZSBDUFUgdGltZS4gIFRoaXMgbWVhbnMgdGhhdAotb3RoZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgY29tcHV0ZXIgbWF5IGludGVyZmVyZSB3aXRoIHRoZQotdGltaW5nLiAgVGhlIGJlc3QgdGhpbmcgdG8gZG8gd2hlbiBhY2N1cmF0ZSB0aW1pbmcgaXMgbmVjZXNzYXJ5IGlzIHRvCi1yZXBlYXQgdGhlIHRpbWluZyBhIGZldyB0aW1lcyBhbmQgdXNlIHRoZSBiZXN0IHRpbWUuICBUaGUgLXIgb3B0aW9uIGlzCi1nb29kIGZvciB0aGlzOyB0aGUgZGVmYXVsdCBvZiAzIHJlcGV0aXRpb25zIGlzIHByb2JhYmx5IGVub3VnaCBpbiBtb3N0Ci1jYXNlcy4gIE9uIFVuaXgsIHlvdSBjYW4gdXNlIGNsb2NrKCkgdG8gbWVhc3VyZSBDUFUgdGltZS4KLQogTm90ZTogdGhlcmUgaXMgYSBjZXJ0YWluIGJhc2VsaW5lIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBleGVjdXRpbmcgYQotcGFzcyBzdGF0ZW1lbnQuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5IHRvIGhpZGUgaXQsIGJ1dCB5b3Ugc2hvdWxkCi1iZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUgbWVhc3VyZWQgYnkgaW52b2tpbmcgdGhlCi1wcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgorcGFzcyBzdGF0ZW1lbnQuICBJdCBkaWZmZXJzIGJldHdlZW4gdmVyc2lvbnMuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5Cit0byBoaWRlIGl0LCBidXQgeW91IHNob3VsZCBiZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUKK21lYXN1cmVkIGJ5IGludm9raW5nIHRoZSBwcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgogCi1UaGUgYmFzZWxpbmUgb3ZlcmhlYWQgZGlmZmVycyBiZXR3ZWVuIFB5dGhvbiB2ZXJzaW9ucyEgIEFsc28sIHRvCi1mYWlybHkgY29tcGFyZSBvbGRlciBQeXRob24gdmVyc2lvbnMgdG8gUHl0aG9uIDIuMywgeW91IG1heSB3YW50IHRvCi11c2UgcHl0aG9uIC1PIGZvciB0aGUgb2xkZXIgdmVyc2lvbnMgdG8gYXZvaWQgdGltaW5nIFNFVF9MSU5FTk8KLWluc3RydWN0aW9ucy4KK0NsYXNzZXM6CisKKyAgICBUaW1lcgorCitGdW5jdGlvbnM6CisKKyAgICB0aW1laXQoc3RyaW5nLCBzdHJpbmcpIC0+IGZsb2F0CisgICAgcmVwZWF0KHN0cmluZywgc3RyaW5nKSAtPiBsaXN0CisgICAgZGVmYXVsdF90aW1lcigpIC0+IGZsb2F0CisKICIiIgogCiBpbXBvcnQgZ2MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi10cnk6Ci0gICAgaW1wb3J0IGl0ZXJ0b29scwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgTXVzdCBiZSBhbiBvbGRlciBQeXRob24gdmVyc2lvbiAoc2VlIHRpbWVpdCgpIGJlbG93KQotICAgIGl0ZXJ0b29scyA9IE5vbmUKK2ltcG9ydCBpdGVydG9vbHMKIAotX19hbGxfXyA9IFsiVGltZXIiXQorX19hbGxfXyA9IFsiVGltZXIiLCAidGltZWl0IiwgInJlcGVhdCIsICJkZWZhdWx0X3RpbWVyIl0KIAogZHVtbXlfc3JjX25hbWUgPSAiPHRpbWVpdC1zcmM+IgogZGVmYXVsdF9udW1iZXIgPSAxMDAwMDAwCkBAIC0xODAsMTAgKzE3MSw3IEBACiAgICAgICAgIHRvIG9uZSBtaWxsaW9uLiAgVGhlIG1haW4gc3RhdGVtZW50LCB0aGUgc2V0dXAgc3RhdGVtZW50IGFuZAogICAgICAgICB0aGUgdGltZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGl0ZXJ0b29sczoKLSAgICAgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdChOb25lLCBudW1iZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdCA9IFtOb25lXSAqIG51bWJlcgorICAgICAgICBpdCA9IGl0ZXJ0b29scy5yZXBlYXQoTm9uZSwgbnVtYmVyKQogICAgICAgICBnY29sZCA9IGdjLmlzZW5hYmxlZCgpCiAgICAgICAgIGdjLmRpc2FibGUoKQogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weSBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CmluZGV4IDljYjIyODQuLjIyYTQxYWMgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CkBAIC0yMTgxLDQ1ICsyMTgxLDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2ludm9rZScpCiAKLQotIyBJbmRpY2VzOgotIyBYWFggSSBkb24ndCBsaWtlIHRoZXNlIC0tIHRha2UgdGhlbSBhd2F5Ci1kZWYgQXRFbmQoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0RW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdlbmQnCi0KLQotZGVmIEF0SW5zZXJ0KCphcmdzKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0SW5zZXJ0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcyA9ICdpbnNlcnQnCi0gICAgZm9yIGEgaW4gYXJnczoKLSAgICAgICAgaWYgYTogcyA9IHMgKyAoJyAnICsgYSkKLSAgICByZXR1cm4gcwotCi0KLWRlZiBBdFNlbEZpcnN0KCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdFNlbEZpcnN0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdzZWwuZmlyc3QnCi0KLQotZGVmIEF0U2VsTGFzdCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRTZWxMYXN0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdzZWwubGFzdCcKLQotCi1kZWYgQXQoeCwgeT1Ob25lKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgaWYgeSBpcyBOb25lOgotICAgICAgICByZXR1cm4gJ0AlcicgJSAoeCwpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICdAJXIsJXInICUgKHgsIHkpCi0KLQogY2xhc3MgQ2FudmFzKFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJDYW52YXMgd2lkZ2V0IHRvIGRpc3BsYXkgZ3JhcGhpY2FsIGVsZW1lbnRzIGxpa2UgbGluZXMgb3IgdGV4dC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CkBAIC0yOTUwLDExICsyOTExLDExIEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICd0ZXh0JywgY25mLCBrdykKLSAgICBkZWYgYmJveChzZWxmLCAqYXJncyk6CisgICAgZGVmIGJib3goc2VsZiwgaW5kZXgpOgogICAgICAgICAiIiJSZXR1cm4gYSB0dXBsZSBvZiAoeCx5LHdpZHRoLGhlaWdodCkgd2hpY2ggZ2l2ZXMgdGhlIGJvdW5kaW5nCi0gICAgICAgIGJveCBvZiB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGluZGV4IGluIEFSR1MuIiIiCisgICAgICAgIGJveCBvZiB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cygKLSAgICAgICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ2Jib3gnKSArIGFyZ3MpKSBvciBOb25lCisgICAgICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdiYm94JywgaW5kZXgpKSBvciBOb25lCiAgICAgZGVmIHRrX3RleHRTZWxlY3RUbyhzZWxmLCBpbmRleCk6CiAgICAgICAgIHNlbGYudGsuY2FsbCgndGtfdGV4dFNlbGVjdFRvJywgc2VsZi5fdywgaW5kZXgpCiAgICAgZGVmIHRrX3RleHRCYWNrc3BhY2Uoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5IGIvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQppbmRleCAzZmZiMjUyLi5hNzFhZmIyIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CisrKyBiL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgICAgICBkaXIsIHBhdCA9IHNlbGYuZ2V0X2ZpbHRlcigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLm1hc3Rlci5iZWxsKCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGRpcik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9IE5vbmUKICAgICAgICAgICAgIGlmIHB3ZDoKICAgICAgICAgICAgICAgICBkaXIgPSBvcy5wYXRoLmpvaW4ocHdkLCBkaXIpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKaW5kZXggMmM0Y2IwNS4uNGRlNjUzMSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtNjMwLDggKzYzMCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdpZGdldC5iYm94KCdlbmQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsICdub2luZGV4JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCwgJzEuMScsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpZGdldC5iYm94KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpZGdldC5iYm94LCAnMS4xJywgJ2VuZCcpCiAKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFBpeGVsU2l6ZVRlc3RzLCBTdGFuZGFyZE9wdGlvbnNUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90b2tlbi5weSBiL0xpYi90b2tlbi5weQppbmRleCAzMWZhZTBhLi43NDcwYzhjIDEwMDc1NQotLS0gYS9MaWIvdG9rZW4ucHkKKysrIGIvTGliL3Rva2VuLnB5CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIG91dEZpbGVOYW1lID0gYXJnc1sxXQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGluRmlsZU5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGxpbmVzID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAjIGxvYWQgdGhlIG91dHB1dCBza2VsZXRvbiBmcm9tIHRoZSB0YXJnZXQ6CiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4ob3V0RmlsZU5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCgyKQogICAgIGZvcm1hdCA9IGZwLnJlYWQoKS5zcGxpdCgiXG4iKQpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgZm9ybWF0W3N0YXJ0OmVuZF0gPSBsaW5lcwogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKG91dEZpbGVOYW1lLCAndycpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCg0KQogICAgIGZwLndyaXRlKCJcbiIuam9pbihmb3JtYXQpKQpkaWZmIC0tZ2l0IGEvTGliL3Rva2VuaXplLnB5IGIvTGliL3Rva2VuaXplLnB5CmluZGV4IGQwNjA5ZTguLmY2MTRhZWIgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbml6ZS5weQorKysgYi9MaWIvdG9rZW5pemUucHkKQEAgLTY3MCw3ICs2NzAsNyBAQAogICAgICAgICBlcnJvcihlcnIuYXJnc1swXSwgZmlsZW5hbWUsIChsaW5lLCBjb2x1bW4pKQogICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlcnI6CiAgICAgICAgIGVycm9yKGVyciwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgZXJyb3IoZXJyKQogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgcHJpbnQoImludGVycnVwdGVkXG4iKQpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlLnB5IGIvTGliL3RyYWNlLnB5CmluZGV4IGMwOWIzNjUuLjA5ZmU5ZWUgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZS5weQorKysgYi9MaWIvdHJhY2UucHkKQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgICAgICAgICAgICAgIGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMgPSBcCiAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZChvcGVuKHNlbGYuaW5maWxlLCAncmInKSkKICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZShzZWxmLl9fY2xhc3NfXyhjb3VudHMsIGNhbGxlZGZ1bmNzLCBjYWxsZXJzKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCgoIlNraXBwaW5nIGNvdW50cyBmaWxlICVyOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5pbmZpbGUsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAKQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKChzZWxmLmNvdW50cywgc2VsZi5jYWxsZWRmdW5jcywgc2VsZi5jYWxsZXJzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuKHNlbGYub3V0ZmlsZSwgJ3diJyksIDEpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcHJpbnQoIkNhbid0IHNhdmUgY291bnRzIGZpbGVzIGJlY2F1c2UgJXMiICUgZXJyLCBmaWxlPXN5cy5zdGRlcnIpCiAKICAgICBkZWYgd3JpdGVfcmVzdWx0c19maWxlKHNlbGYsIHBhdGgsIGxpbmVzLCBsbm90YWIsIGxpbmVzX2hpdCwgZW5jb2Rpbmc9Tm9uZSk6CkBAIC0zNTYsNyArMzU2LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvdXRmaWxlID0gb3BlbihwYXRoLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCgidHJhY2U6IENvdWxkIG5vdCBvcGVuICVyIGZvciB3cml0aW5nOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSBza2lwcGluZyIgJSAocGF0aCwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHJldHVybiAwLCAwCkBAIC00MzcsNyArNDM3LDcgQEAKICAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZpbGVuYW1lKSBhcyBmOgogICAgICAgICAgICAgcHJvZyA9IGYucmVhZCgpCiAgICAgICAgICAgICBlbmNvZGluZyA9IGYuZW5jb2RpbmcKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBwcmludCgoIk5vdCBwcmludGluZyBjb3ZlcmFnZSBkYXRhIGZvciAlcjogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgcmV0dXJuIHt9CkBAIC04MDIsNyArODAyLDcgQEAKICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IE5vbmUsCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0LnJ1bmN0eChjb2RlLCBnbG9icywgZ2xvYnMpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgX2Vycl9leGl0KCJDYW5ub3QgcnVuIGZpbGUgJXIgYmVjYXVzZTogJXMiICUgKHN5cy5hcmd2WzBdLCBlcnIpKQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90cmFjZWJhY2sucHkgYi9MaWIvdHJhY2ViYWNrLnB5CmluZGV4IGIxM2JmZTIuLjNiMmNhZTcgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZWJhY2sucHkKKysrIGIvTGliL3RyYWNlYmFjay5weQpAQCAtMiwyNiArMiwzMiBAQAogCiBpbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgc3lzCitpbXBvcnQgb3BlcmF0b3IKIAogX19hbGxfXyA9IFsnZXh0cmFjdF9zdGFjaycsICdleHRyYWN0X3RiJywgJ2Zvcm1hdF9leGNlcHRpb24nLAogICAgICAgICAgICAnZm9ybWF0X2V4Y2VwdGlvbl9vbmx5JywgJ2Zvcm1hdF9saXN0JywgJ2Zvcm1hdF9zdGFjaycsCiAgICAgICAgICAgICdmb3JtYXRfdGInLCAncHJpbnRfZXhjJywgJ2Zvcm1hdF9leGMnLCAncHJpbnRfZXhjZXB0aW9uJywKLSAgICAgICAgICAgJ3ByaW50X2xhc3QnLCAncHJpbnRfc3RhY2snLCAncHJpbnRfdGInXQorICAgICAgICAgICAncHJpbnRfbGFzdCcsICdwcmludF9zdGFjaycsICdwcmludF90YicsCisgICAgICAgICAgICdjbGVhcl9mcmFtZXMnXQogCi1kZWYgX3ByaW50KGZpbGUsIHN0cj0nJywgdGVybWluYXRvcj0nXG4nKToKLSAgICBmaWxlLndyaXRlKHN0cit0ZXJtaW5hdG9yKQorIworIyBGb3JtYXR0aW5nIGFuZCBwcmludGluZyBsaXN0cyBvZiB0cmFjZWJhY2sgbGluZXMuCisjCiAKK2RlZiBfZm9ybWF0X2xpc3RfaXRlcihleHRyYWN0ZWRfbGlzdCk6CisgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gZXh0cmFjdGVkX2xpc3Q6CisgICAgICAgIGl0ZW0gPSAnICBGaWxlICJ7fSIsIGxpbmUge30sIGluIHt9XG4nLmZvcm1hdChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKQorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgaXRlbSA9IGl0ZW0gKyAnICAgIHt9XG4nLmZvcm1hdChsaW5lLnN0cmlwKCkpCisgICAgICAgIHlpZWxkIGl0ZW0KIAogZGVmIHByaW50X2xpc3QoZXh0cmFjdGVkX2xpc3QsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgdGhlIGxpc3Qgb2YgdHVwbGVzIGFzIHJldHVybmVkIGJ5IGV4dHJhY3RfdGIoKSBvcgogICAgIGV4dHJhY3Rfc3RhY2soKSBhcyBhIGZvcm1hdHRlZCBzdGFjayB0cmFjZSB0byB0aGUgZ2l2ZW4gZmlsZS4iIiIKICAgICBpZiBmaWxlIGlzIE5vbmU6CiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gZXh0cmFjdGVkX2xpc3Q6Ci0gICAgICAgIF9wcmludChmaWxlLAotICAgICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsbGluZW5vLG5hbWUpKQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsICcgICAgJXMnICUgbGluZS5zdHJpcCgpKQorICAgIGZvciBpdGVtIGluIF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KToKKyAgICAgICAgcHJpbnQoaXRlbSwgZmlsZT1maWxlLCBlbmQ9IiIpCiAKIGRlZiBmb3JtYXRfbGlzdChleHRyYWN0ZWRfbGlzdCk6CiAgICAgIiIiRm9ybWF0IGEgbGlzdCBvZiB0cmFjZWJhY2sgZW50cnkgdHVwbGVzIGZvciBwcmludGluZy4KQEAgLTMzLDE0ICszOSw0NCBAQAogICAgIHRoZSBzdHJpbmdzIG1heSBjb250YWluIGludGVybmFsIG5ld2xpbmVzIGFzIHdlbGwsIGZvciB0aG9zZSBpdGVtcwogICAgIHdob3NlIHNvdXJjZSB0ZXh0IGxpbmUgaXMgbm90IE5vbmUuCiAgICAgIiIiCi0gICAgbGlzdCA9IFtdCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gZXh0cmFjdGVkX2xpc3Q6Ci0gICAgICAgIGl0ZW0gPSAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzXG4nICUgKGZpbGVuYW1lLGxpbmVubyxuYW1lKQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgaXRlbSA9IGl0ZW0gKyAnICAgICVzXG4nICUgbGluZS5zdHJpcCgpCi0gICAgICAgIGxpc3QuYXBwZW5kKGl0ZW0pCi0gICAgcmV0dXJuIGxpc3QKKyAgICByZXR1cm4gbGlzdChfZm9ybWF0X2xpc3RfaXRlcihleHRyYWN0ZWRfbGlzdCkpCiAKKyMKKyMgUHJpbnRpbmcgYW5kIEV4dHJhY3RpbmcgVHJhY2ViYWNrcy4KKyMKKworIyBleHRyYWN0b3IgdGFrZXMgY3VyciBhbmQgbmVlZHMgdG8gcmV0dXJuIGEgdHVwbGUgb2Y6CisjIC0gRnJhbWUgb2JqZWN0CisjIC0gTGluZSBudW1iZXIKKyMgLSBOZXh0IGl0ZW0gKHNhbWUgdHlwZSBhcyBjdXJyKQorIyBJbiBwcmFjdGljZSwgY3VyciBpcyBlaXRoZXIgYSB0cmFjZWJhY2sgb3IgYSBmcmFtZS4KK2RlZiBfZXh0cmFjdF90Yl9vcl9zdGFja19pdGVyKGN1cnIsIGxpbWl0LCBleHRyYWN0b3IpOgorICAgIGlmIGxpbWl0IGlzIE5vbmU6CisgICAgICAgIGxpbWl0ID0gZ2V0YXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcsIE5vbmUpCisKKyAgICBuID0gMAorICAgIHdoaWxlIGN1cnIgaXMgbm90IE5vbmUgYW5kIChsaW1pdCBpcyBOb25lIG9yIG4gPCBsaW1pdCk6CisgICAgICAgIGYsIGxpbmVubywgbmV4dF9pdGVtID0gZXh0cmFjdG9yKGN1cnIpCisgICAgICAgIGNvID0gZi5mX2NvZGUKKyAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQorICAgICAgICBuYW1lID0gY28uY29fbmFtZQorCisgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQorICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCisKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSBOb25lCisKKyAgICAgICAgeWllbGQgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUpCisgICAgICAgIGN1cnIgPSBuZXh0X2l0ZW0KKyAgICAgICAgbiArPSAxCisKK2RlZiBfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdCk6CisgICAgcmV0dXJuIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoCisgICAgICAgICAgICAgICAgdGIsIGxpbWl0LAorICAgICAgICAgICAgICAgIG9wZXJhdG9yLmF0dHJnZXR0ZXIoInRiX2ZyYW1lIiwgInRiX2xpbmVubyIsICJ0Yl9uZXh0IikpCiAKIGRlZiBwcmludF90Yih0YiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCB1cCB0byAnbGltaXQnIHN0YWNrIHRyYWNlIGVudHJpZXMgZnJvbSB0aGUgdHJhY2ViYWNrICd0YicuCkBAIC01MCwyOSArODYsMTEgQEAKICAgICAnZmlsZScgc2hvdWxkIGJlIGFuIG9wZW4gZmlsZSBvciBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggYSB3cml0ZSgpCiAgICAgbWV0aG9kLgogICAgICIiIgotICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIG4gPSAwCi0gICAgd2hpbGUgdGIgaXMgbm90IE5vbmUgYW5kIChsaW1pdCBpcyBOb25lIG9yIG4gPCBsaW1pdCk6Ci0gICAgICAgIGYgPSB0Yi50Yl9mcmFtZQotICAgICAgICBsaW5lbm8gPSB0Yi50Yl9saW5lbm8KLSAgICAgICAgY28gPSBmLmZfY29kZQotICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCi0gICAgICAgIG5hbWUgPSBjby5jb19uYW1lCi0gICAgICAgIF9wcmludChmaWxlLAotICAgICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCi0gICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQotICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCi0gICAgICAgIGlmIGxpbmU6IF9wcmludChmaWxlLCAnICAgICcgKyBsaW5lLnN0cmlwKCkpCi0gICAgICAgIHRiID0gdGIudGJfbmV4dAotICAgICAgICBuID0gbisxCisgICAgcHJpbnRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdD1saW1pdCksIGZpbGU9ZmlsZSkKIAogZGVmIGZvcm1hdF90Yih0YiwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiQSBzaG9ydGhhbmQgZm9yICdmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdCkpJy4iIiIKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQpKQorICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdD1saW1pdCkpCiAKIGRlZiBleHRyYWN0X3RiKHRiLCBsaW1pdD1Ob25lKToKICAgICAiIiJSZXR1cm4gbGlzdCBvZiB1cCB0byBsaW1pdCBwcmUtcHJvY2Vzc2VkIGVudHJpZXMgZnJvbSB0cmFjZWJhY2suCkBAIC04NSwyNiArMTAzLDExIEBACiAgICAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBzdHJpcHBlZDsgaWYgdGhlIHNvdXJjZSBpcyBub3QKICAgICBhdmFpbGFibGUgaXQgaXMgTm9uZS4KICAgICAiIiIKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIGxpc3QgPSBbXQotICAgIG4gPSAwCi0gICAgd2hpbGUgdGIgaXMgbm90IE5vbmUgYW5kIChsaW1pdCBpcyBOb25lIG9yIG4gPCBsaW1pdCk6Ci0gICAgICAgIGYgPSB0Yi50Yl9mcmFtZQotICAgICAgICBsaW5lbm8gPSB0Yi50Yl9saW5lbm8KLSAgICAgICAgY28gPSBmLmZfY29kZQotICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCi0gICAgICAgIG5hbWUgPSBjby5jb19uYW1lCi0gICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQotICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCi0gICAgICAgIGlmIGxpbmU6IGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgZWxzZTogbGluZSA9IE5vbmUKLSAgICAgICAgbGlzdC5hcHBlbmQoKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUpKQotICAgICAgICB0YiA9IHRiLnRiX25leHQKLSAgICAgICAgbiA9IG4rMQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2V4dHJhY3RfdGJfaXRlcih0YiwgbGltaXQ9bGltaXQpKQogCisjCisjIEV4Y2VwdGlvbiBmb3JtYXR0aW5nIGFuZCBvdXRwdXQuCisjCiAKIF9jYXVzZV9tZXNzYWdlID0gKAogICAgICJcblRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2UgIgpAQCAtMTMyLDkgKzEzNSwyMyBAQAogICAgIGl0cy5hcHBlbmQoWyhleGMsIGN1c3RvbV90YiBvciBleGMuX190cmFjZWJhY2tfXyldKQogICAgICMgaXRlcnRvb2xzLmNoYWluIGlzIGluIGFuIGV4dGVuc2lvbiBtb2R1bGUgYW5kIG1heSBiZSB1bmF2YWlsYWJsZQogICAgIGZvciBpdCBpbiBpdHM6Ci0gICAgICAgIGZvciB4IGluIGl0OgotICAgICAgICAgICAgeWllbGQgeAorICAgICAgICB5aWVsZCBmcm9tIGl0CiAKK2RlZiBfZm9ybWF0X2V4Y2VwdGlvbl9pdGVyKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBjaGFpbik6CisgICAgaWYgY2hhaW46CisgICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKKyAgICBlbHNlOgorICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCisKKyAgICBmb3IgdmFsdWUsIHRiIGluIHZhbHVlczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgICMgVGhpcyBpcyBhIGNhdXNlL2NvbnRleHQgbWVzc2FnZSBsaW5lCisgICAgICAgICAgICB5aWVsZCB2YWx1ZSArICdcbicKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHRiOgorICAgICAgICAgICAgeWllbGQgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2Zvcm1hdF9saXN0X2l0ZXIoX2V4dHJhY3RfdGJfaXRlcih0YiwgbGltaXQ9bGltaXQpKQorICAgICAgICB5aWVsZCBmcm9tIF9mb3JtYXRfZXhjZXB0aW9uX29ubHlfaXRlcih0eXBlKHZhbHVlKSwgdmFsdWUpCiAKIGRlZiBwcmludF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJQcmludCBleGNlcHRpb24gdXAgdG8gJ2xpbWl0JyBzdGFjayB0cmFjZSBlbnRyaWVzIGZyb20gJ3RiJyB0byAnZmlsZScuCkBAIC0xNDksMjAgKzE2Niw4IEBACiAgICAgIiIiCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGlmIGNoYWluOgotICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCi0gICAgZWxzZToKLSAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQotICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsIHZhbHVlKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgdGI6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonKQotICAgICAgICAgICAgcHJpbnRfdGIodGIsIGxpbWl0LCBmaWxlKQotICAgICAgICBsaW5lcyA9IGZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlKHZhbHVlKSwgdmFsdWUpCi0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsIGxpbmUsICcnKQorICAgIGZvciBsaW5lIGluIF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKToKKyAgICAgICAgcHJpbnQobGluZSwgZmlsZT1maWxlLCBlbmQ9IiIpCiAKIGRlZiBmb3JtYXRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIkZvcm1hdCBhIHN0YWNrIHRyYWNlIGFuZCB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgpAQCAtMTczLDIwICsxNzgsNyBAQAogICAgIHRoZXNlIGxpbmVzIGFyZSBjb25jYXRlbmF0ZWQgYW5kIHByaW50ZWQsIGV4YWN0bHkgdGhlIHNhbWUgdGV4dCBpcwogICAgIHByaW50ZWQgYXMgZG9lcyBwcmludF9leGNlcHRpb24oKS4KICAgICAiIiIKLSAgICBsaXN0ID0gW10KLSAgICBpZiBjaGFpbjoKLSAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQotICAgIGVsc2U6Ci0gICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KLSAgICBmb3IgdmFsdWUsIHRiIGluIHZhbHVlczoKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHZhbHVlICsgJ1xuJykKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHRiOgotICAgICAgICAgICAgbGlzdC5hcHBlbmQoJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicpCi0gICAgICAgICAgICBsaXN0LmV4dGVuZChmb3JtYXRfdGIodGIsIGxpbWl0KSkKLSAgICAgICAgbGlzdC5leHRlbmQoZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHR5cGUodmFsdWUpLCB2YWx1ZSkpCi0gICAgcmV0dXJuIGxpc3QKKyAgICByZXR1cm4gbGlzdChfZm9ybWF0X2V4Y2VwdGlvbl9pdGVyKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBjaGFpbikpCiAKIGRlZiBmb3JtYXRfZXhjZXB0aW9uX29ubHkoZXR5cGUsIHZhbHVlKToKICAgICAiIiJGb3JtYXQgdGhlIGV4Y2VwdGlvbiBwYXJ0IG9mIGEgdHJhY2ViYWNrLgpAQCAtMjA0LDEwICsxOTYsMTQgQEAKICAgICBzdHJpbmcgaW4gdGhlIGxpc3QuCiAKICAgICAiIiIKKyAgICByZXR1cm4gbGlzdChfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIoZXR5cGUsIHZhbHVlKSkKKworZGVmIF9mb3JtYXRfZXhjZXB0aW9uX29ubHlfaXRlcihldHlwZSwgdmFsdWUpOgogICAgICMgR3JhY2VmdWxseSBoYW5kbGUgKHRoZSB3YXkgUHl0aG9uIDIuNCBhbmQgZWFybGllciBkaWQpIHRoZSBjYXNlIG9mCiAgICAgIyBiZWluZyBjYWxsZWQgd2l0aCAoTm9uZSwgTm9uZSkuCiAgICAgaWYgZXR5cGUgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIFtfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSldCisgICAgICAgIHlpZWxkIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKQorICAgICAgICByZXR1cm4KIAogICAgIHN0eXBlID0gZXR5cGUuX19uYW1lX18KICAgICBzbW9kID0gZXR5cGUuX19tb2R1bGVfXwpAQCAtMjE1LDI2ICsyMTEsMjYgQEAKICAgICAgICAgc3R5cGUgPSBzbW9kICsgJy4nICsgc3R5cGUKIAogICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV0eXBlLCBTeW50YXhFcnJvcik6Ci0gICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGluZShzdHlwZSwgdmFsdWUpXQorICAgICAgICB5aWVsZCBfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuCiAKICAgICAjIEl0IHdhcyBhIHN5bnRheCBlcnJvcjsgc2hvdyBleGFjdGx5IHdoZXJlIHRoZSBwcm9ibGVtIHdhcyBmb3VuZC4KLSAgICBsaW5lcyA9IFtdCiAgICAgZmlsZW5hbWUgPSB2YWx1ZS5maWxlbmFtZSBvciAiPHN0cmluZz4iCiAgICAgbGluZW5vID0gc3RyKHZhbHVlLmxpbmVubykgb3IgJz8nCi0gICAgbGluZXMuYXBwZW5kKCcgIEZpbGUgIiVzIiwgbGluZSAlc1xuJyAlIChmaWxlbmFtZSwgbGluZW5vKSkKKyAgICB5aWVsZCAnICBGaWxlICJ7fSIsIGxpbmUge31cbicuZm9ybWF0KGZpbGVuYW1lLCBsaW5lbm8pCisKICAgICBiYWRsaW5lID0gdmFsdWUudGV4dAogICAgIG9mZnNldCA9IHZhbHVlLm9mZnNldAogICAgIGlmIGJhZGxpbmUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzXG4nICUgYmFkbGluZS5zdHJpcCgpKQorICAgICAgICB5aWVsZCAnICAgIHt9XG4nLmZvcm1hdChiYWRsaW5lLnN0cmlwKCkpCiAgICAgICAgIGlmIG9mZnNldCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGNhcmV0c3BhY2UgPSBiYWRsaW5lLnJzdHJpcCgnXG4nKVs6b2Zmc2V0XS5sc3RyaXAoKQogICAgICAgICAgICAgIyBub24tc3BhY2Ugd2hpdGVzcGFjZSAobGlrZXMgdGFicykgbXVzdCBiZSBrZXB0IGZvciBhbGlnbm1lbnQKICAgICAgICAgICAgIGNhcmV0c3BhY2UgPSAoKGMuaXNzcGFjZSgpIGFuZCBjIG9yICcgJykgZm9yIGMgaW4gY2FyZXRzcGFjZSkKICAgICAgICAgICAgICMgb25seSB0aHJlZSBzcGFjZXMgdG8gYWNjb3VudCBmb3Igb2Zmc2V0MSA9PSBwb3MgMAotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAlc15cbicgJSAnJy5qb2luKGNhcmV0c3BhY2UpKQorICAgICAgICAgICAgeWllbGQgJyAgIHt9XlxuJy5mb3JtYXQoJycuam9pbihjYXJldHNwYWNlKSkKICAgICBtc2cgPSB2YWx1ZS5tc2cgb3IgIjxubyBkZXRhaWwgYXZhaWxhYmxlPiIKLSAgICBsaW5lcy5hcHBlbmQoIiVzOiAlc1xuIiAlIChzdHlwZSwgbXNnKSkKLSAgICByZXR1cm4gbGluZXMKKyAgICB5aWVsZCAie306IHt9XG4iLmZvcm1hdChzdHlwZSwgbXNnKQogCiBkZWYgX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpOgogICAgIHZhbHVlc3RyID0gX3NvbWVfc3RyKHZhbHVlKQpAQCAtMjUwLDM4ICsyNDYsMzQgQEAKICAgICBleGNlcHQ6CiAgICAgICAgIHJldHVybiAnPHVucHJpbnRhYmxlICVzIG9iamVjdD4nICUgdHlwZSh2YWx1ZSkuX19uYW1lX18KIAotCiBkZWYgcHJpbnRfZXhjKGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQsIGZpbGUpJy4iIiIKLSAgICBpZiBmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgdHJ5OgotICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgcHJpbnRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBmaWxlLCBjaGFpbikKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICBwcmludF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpLCBsaW1pdD1saW1pdCwgZmlsZT1maWxlLCBjaGFpbj1jaGFpbikKIAogZGVmIGZvcm1hdF9leGMobGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiTGlrZSBwcmludF9leGMoKSBidXQgcmV0dXJuIGEgc3RyaW5nLiIiIgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHJldHVybiAnJy5qb2luKAotICAgICAgICAgICAgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGV0eXBlID0gdmFsdWUgPSB0YiA9IE5vbmUKLQorICAgIHJldHVybiAiIi5qb2luKGZvcm1hdF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpLCBsaW1pdD1saW1pdCwgY2hhaW49Y2hhaW4pKQogCiBkZWYgcHJpbnRfbGFzdChsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yICdwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwKICAgICBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLCBsaW1pdCwgZmlsZSknLiIiIgogICAgIGlmIG5vdCBoYXNhdHRyKHN5cywgImxhc3RfdHlwZSIpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBsYXN0IGV4Y2VwdGlvbiIpCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgogICAgIHByaW50X2V4Y2VwdGlvbihzeXMubGFzdF90eXBlLCBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLAogICAgICAgICAgICAgICAgICAgICBsaW1pdCwgZmlsZSwgY2hhaW4pCiAKKyMKKyMgUHJpbnRpbmcgYW5kIEV4dHJhY3RpbmcgU3RhY2tzLgorIworCitkZWYgX2V4dHJhY3Rfc3RhY2tfaXRlcihmLCBsaW1pdD1Ob25lKToKKyAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKKyAgICAgICAgICAgICAgICBmLCBsaW1pdCwgbGFtYmRhIGY6IChmLCBmLmZfbGluZW5vLCBmLmZfYmFjaykpCisKK2RlZiBfZ2V0X3N0YWNrKGYpOgorICAgIGlmIGYgaXMgTm9uZToKKyAgICAgICAgZiA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9iYWNrCisgICAgcmV0dXJuIGYKIAogZGVmIHByaW50X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCBhIHN0YWNrIHRyYWNlIGZyb20gaXRzIGludm9jYXRpb24gcG9pbnQuCkBAIC0yOTAsMjEgKzI4MiwxMSBAQAogICAgIHN0YWNrIGZyYW1lIGF0IHdoaWNoIHRvIHN0YXJ0LiBUaGUgb3B0aW9uYWwgJ2xpbWl0JyBhbmQgJ2ZpbGUnCiAgICAgYXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgcHJpbnRfZXhjZXB0aW9uKCkuCiAgICAgIiIiCi0gICAgaWYgZiBpcyBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcgotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBmID0gc3lzLmV4Y19pbmZvKClbMl0udGJfZnJhbWUuZl9iYWNrCi0gICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSwgZmlsZSkKKyAgICBwcmludF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpLCBmaWxlPWZpbGUpCiAKIGRlZiBmb3JtYXRfc3RhY2soZj1Ob25lLCBsaW1pdD1Ob25lKToKICAgICAiIiJTaG9ydGhhbmQgZm9yICdmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSknLiIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSkKKyAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCiAKIGRlZiBleHRyYWN0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiRXh0cmFjdCB0aGUgcmF3IHRyYWNlYmFjayBmcm9tIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLgpAQCAtMzE1LDI3ICsyOTcsMTYgQEAKICAgICBsaW5lIG51bWJlciwgZnVuY3Rpb24gbmFtZSwgdGV4dCksIGFuZCB0aGUgZW50cmllcyBhcmUgaW4gb3JkZXIKICAgICBmcm9tIG9sZGVzdCB0byBuZXdlc3Qgc3RhY2sgZnJhbWUuCiAgICAgIiIiCi0gICAgaWYgZiBpcyBOb25lOgorICAgIHN0YWNrID0gbGlzdChfZXh0cmFjdF9zdGFja19pdGVyKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSkKKyAgICBzdGFjay5yZXZlcnNlKCkKKyAgICByZXR1cm4gc3RhY2sKKworZGVmIGNsZWFyX2ZyYW1lcyh0Yik6CisgICAgIkNsZWFyIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgZnJhbWVzIG9mIGEgdHJhY2ViYWNrLiIKKyAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbGlzdCA9IFtdCi0gICAgbiA9IDAKLSAgICB3aGlsZSBmIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBsaW5lbm8gPSBmLmZfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGVsc2U6IGxpbmUgPSBOb25lCi0gICAgICAgIGxpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKLSAgICAgICAgZiA9IGYuZl9iYWNrCi0gICAgICAgIG4gPSBuKzEKLSAgICBsaXN0LnJldmVyc2UoKQotICAgIHJldHVybiBsaXN0CisgICAgICAgICAgICB0Yi50Yl9mcmFtZS5jbGVhcigpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXhjZXB0aW9uIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgc3RpbGwgZXhlY3V0aW5nLgorICAgICAgICAgICAgcGFzcworICAgICAgICB0YiA9IHRiLnRiX25leHQKZGlmZiAtLWdpdCBhL0xpYi90cmFjZW1hbGxvYy5weSBiL0xpYi90cmFjZW1hbGxvYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZmNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3RyYWNlbWFsbG9jLnB5CkBAIC0wLDAgKzEsNDU5IEBACitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTZXF1ZW5jZQorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHRvdGFsX29yZGVyaW5nCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBwaWNrbGUKKworIyBJbXBvcnQgdHlwZXMgYW5kIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDCitmcm9tIF90cmFjZW1hbGxvYyBpbXBvcnQgKgorZnJvbSBfdHJhY2VtYWxsb2MgaW1wb3J0IF9nZXRfb2JqZWN0X3RyYWNlYmFjaywgX2dldF90cmFjZXMKKworCitkZWYgX2Zvcm1hdF9zaXplKHNpemUsIHNpZ24pOgorICAgIGZvciB1bml0IGluICgnQicsICdLaUInLCAnTWlCJywgJ0dpQicsICdUaUInKToKKyAgICAgICAgaWYgYWJzKHNpemUpIDwgMTAwIGFuZCB1bml0ICE9ICdCJzoKKyAgICAgICAgICAgICMgMyBkaWdpdHMgKHh4LnggVU5JVCkKKyAgICAgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICAgICAgcmV0dXJuICIlKy4xZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlLjFmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICBpZiBhYnMoc2l6ZSkgPCAxMCAqIDEwMjQgb3IgdW5pdCA9PSAnVGlCJzoKKyAgICAgICAgICAgICMgNCBvciA1IGRpZ2l0cyAoeHh4eCBVTklUKQorICAgICAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUrLjBmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUuMGYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgIHNpemUgLz0gMTAyNAorCisKK2NsYXNzIFN0YXRpc3RpYzoKKyAgICAiIiIKKyAgICBTdGF0aXN0aWMgZGlmZmVyZW5jZSBvbiBtZW1vcnkgYWxsb2NhdGlvbnMgYmV0d2VlbiB0d28gU25hcHNob3QgaW5zdGFuY2UuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ3RyYWNlYmFjaycsICdzaXplJywgJ2NvdW50JykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZWJhY2ssIHNpemUsIGNvdW50KToKKyAgICAgICAgc2VsZi50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAgICAgICBzZWxmLmNvdW50ID0gY291bnQKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuY291bnQpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi50cmFjZWJhY2sgPT0gb3RoZXIudHJhY2ViYWNrCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZSA9PSBvdGhlci5zaXplCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuY291bnQgPT0gb3RoZXIuY291bnQpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICgiJXM6IHNpemU9JXMsIGNvdW50PSVpIgorICAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50KSkKKyAgICAgICAgaWYgc2VsZi5jb3VudDoKKyAgICAgICAgICAgIGF2ZXJhZ2UgPSBzZWxmLnNpemUgLyBzZWxmLmNvdW50CisgICAgICAgICAgICB0ZXh0ICs9ICIsIGF2ZXJhZ2U9JXMiICUgX2Zvcm1hdF9zaXplKGF2ZXJhZ2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8U3RhdGlzdGljIHRyYWNlYmFjaz0lciBzaXplPSVpIGNvdW50PSVpPicKKyAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLmNvdW50KSkKKworICAgIGRlZiBfc29ydF9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5zaXplLCBzZWxmLmNvdW50LCBzZWxmLnRyYWNlYmFjaykKKworCitjbGFzcyBTdGF0aXN0aWNEaWZmOgorICAgICIiIgorICAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGFuIG9sZCBhbmQgYSBuZXcKKyAgICBTbmFwc2hvdCBpbnN0YW5jZS4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoJ3RyYWNlYmFjaycsICdzaXplJywgJ3NpemVfZGlmZicsICdjb3VudCcsICdjb3VudF9kaWZmJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZWJhY2ssIHNpemUsIHNpemVfZGlmZiwgY291bnQsIGNvdW50X2RpZmYpOgorICAgICAgICBzZWxmLnRyYWNlYmFjayA9IHRyYWNlYmFjaworICAgICAgICBzZWxmLnNpemUgPSBzaXplCisgICAgICAgIHNlbGYuc2l6ZV9kaWZmID0gc2l6ZV9kaWZmCisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorICAgICAgICBzZWxmLmNvdW50X2RpZmYgPSBjb3VudF9kaWZmCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLnNpemVfZGlmZiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQsIHNlbGYuY291bnRfZGlmZikpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnRyYWNlYmFjayA9PSBvdGhlci50cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5zaXplID09IG90aGVyLnNpemUKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5zaXplX2RpZmYgPT0gb3RoZXIuc2l6ZV9kaWZmCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuY291bnQgPT0gb3RoZXIuY291bnQKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5jb3VudF9kaWZmID09IG90aGVyLmNvdW50X2RpZmYpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICgiJXM6IHNpemU9JXMgKCVzKSwgY291bnQ9JWkgKCUraSkiCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemVfZGlmZiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCwKKyAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50X2RpZmYpKQorICAgICAgICBpZiBzZWxmLmNvdW50OgorICAgICAgICAgICAgYXZlcmFnZSA9IHNlbGYuc2l6ZSAvIHNlbGYuY291bnQKKyAgICAgICAgICAgIHRleHQgKz0gIiwgYXZlcmFnZT0lcyIgJSBfZm9ybWF0X3NpemUoYXZlcmFnZSwgRmFsc2UpCisgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzxTdGF0aXN0aWNEaWZmIHRyYWNlYmFjaz0lciBzaXplPSVpICglK2kpIGNvdW50PSVpICglK2kpPicKKyAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLnNpemVfZGlmZiwKKyAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50LCBzZWxmLmNvdW50X2RpZmYpKQorCisgICAgZGVmIF9zb3J0X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIChhYnMoc2VsZi5zaXplX2RpZmYpLCBzZWxmLnNpemUsCisgICAgICAgICAgICAgICAgYWJzKHNlbGYuY291bnRfZGlmZiksIHNlbGYuY291bnQsCisgICAgICAgICAgICAgICAgc2VsZi50cmFjZWJhY2spCisKKworZGVmIF9jb21wYXJlX2dyb3VwZWRfc3RhdHMob2xkX2dyb3VwLCBuZXdfZ3JvdXApOgorICAgIHN0YXRpc3RpY3MgPSBbXQorICAgIGZvciB0cmFjZWJhY2ssIHN0YXQgaW4gbmV3X2dyb3VwLml0ZW1zKCk6CisgICAgICAgIHByZXZpb3VzID0gb2xkX2dyb3VwLnBvcCh0cmFjZWJhY2ssIE5vbmUpCisgICAgICAgIGlmIHByZXZpb3VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RhdCA9IFN0YXRpc3RpY0RpZmYodHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSwgc3RhdC5zaXplIC0gcHJldmlvdXMuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50LCBzdGF0LmNvdW50IC0gcHJldmlvdXMuY291bnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5zaXplLCBzdGF0LnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCwgc3RhdC5jb3VudCkKKyAgICAgICAgc3RhdGlzdGljcy5hcHBlbmQoc3RhdCkKKworICAgIGZvciB0cmFjZWJhY2ssIHN0YXQgaW4gb2xkX2dyb3VwLml0ZW1zKCk6CisgICAgICAgIHN0YXQgPSBTdGF0aXN0aWNEaWZmKHRyYWNlYmFjaywgMCwgLXN0YXQuc2l6ZSwgMCwgLXN0YXQuY291bnQpCisgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKHN0YXQpCisgICAgcmV0dXJuIHN0YXRpc3RpY3MKKworCitAdG90YWxfb3JkZXJpbmcKK2NsYXNzIEZyYW1lOgorICAgICIiIgorICAgIEZyYW1lIG9mIGEgdHJhY2ViYWNrLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgiX2ZyYW1lIiwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorICAgICAgICBzZWxmLl9mcmFtZSA9IGZyYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mcmFtZVswXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZyYW1lWzFdCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZSA9PSBvdGhlci5fZnJhbWUpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZSA8IG90aGVyLl9mcmFtZSkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fZnJhbWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlczolcyIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPEZyYW1lIGZpbGVuYW1lPSVyIGxpbmVubz0lcj4iICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vKQorCisKK0B0b3RhbF9vcmRlcmluZworY2xhc3MgVHJhY2ViYWNrKFNlcXVlbmNlKToKKyAgICAiIiIKKyAgICBTZXF1ZW5jZSBvZiBGcmFtZSBpbnN0YW5jZXMgc29ydGVkIGZyb20gdGhlIG1vc3QgcmVjZW50IGZyYW1lCisgICAgdG8gdGhlIG9sZGVzdCBmcmFtZS4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoIl9mcmFtZXMiLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZXMpOgorICAgICAgICBTZXF1ZW5jZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9mcmFtZXMgPSBmcmFtZXMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2ZyYW1lcykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHRyYWNlID0gc2VsZi5fZnJhbWVzW2luZGV4XQorICAgICAgICByZXR1cm4gRnJhbWUodHJhY2UpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgcmV0dXJuIGZyYW1lLl9mcmFtZSBpbiBzZWxmLl9mcmFtZXMKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fZnJhbWVzKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWVzID09IG90aGVyLl9mcmFtZXMpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZXMgPCBvdGhlci5fZnJhbWVzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZlswXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2ViYWNrICVyPiIgJSAodHVwbGUoc2VsZiksKQorCisKK2RlZiBnZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopOgorICAgICIiIgorICAgIEdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0ICpvYmoqIHdhcyBhbGxvY2F0ZWQuCisgICAgUmV0dXJuIGEgVHJhY2ViYWNrIGluc3RhbmNlLgorCisgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBub3QgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IKKyAgICBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBvYmplY3QuCisgICAgIiIiCisgICAgZnJhbWVzID0gX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICBpZiBmcmFtZXMgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soZnJhbWVzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgVHJhY2U6CisgICAgIiIiCisgICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfdHJhY2UiLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgIHNlbGYuX3RyYWNlID0gdHJhY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhY2VbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFjZWJhY2soc2VsZik6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soc2VsZi5fdHJhY2VbMV0pCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZSA9PSBvdGhlci5fdHJhY2UpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3RyYWNlKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChzZWxmLnRyYWNlYmFjaywgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCI8VHJhY2Ugc2l6ZT0lcywgdHJhY2ViYWNrPSVyPiIKKyAgICAgICAgICAgICAgICAlIChfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksIHNlbGYudHJhY2ViYWNrKSkKKworCitjbGFzcyBfVHJhY2VzKFNlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2VzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fdHJhY2VzID0gdHJhY2VzCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl90cmFjZXMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICB0cmFjZSA9IHNlbGYuX3RyYWNlc1tpbmRleF0KKyAgICAgICAgcmV0dXJuIFRyYWNlKHRyYWNlKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgIHJldHVybiB0cmFjZS5fdHJhY2UgaW4gc2VsZi5fdHJhY2VzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZXMgPT0gb3RoZXIuX3RyYWNlcykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2VzIGxlbj0lcz4iICUgbGVuKHNlbGYpCisKKworZGVmIF9ub3JtYWxpemVfZmlsZW5hbWUoZmlsZW5hbWUpOgorICAgIGZpbGVuYW1lID0gb3MucGF0aC5ub3JtY2FzZShmaWxlbmFtZSkKKyAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgoJy5weWMnLCAnLnB5bycpKToKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVs6LTFdCisgICAgcmV0dXJuIGZpbGVuYW1lCisKKworY2xhc3MgRmlsdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmNsdXNpdmUsIGZpbGVuYW1lX3BhdHRlcm4sCisgICAgICAgICAgICAgICAgIGxpbmVubz1Ob25lLCBhbGxfZnJhbWVzPUZhbHNlKToKKyAgICAgICAgc2VsZi5pbmNsdXNpdmUgPSBpbmNsdXNpdmUKKyAgICAgICAgc2VsZi5fZmlsZW5hbWVfcGF0dGVybiA9IF9ub3JtYWxpemVfZmlsZW5hbWUoZmlsZW5hbWVfcGF0dGVybikKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgc2VsZi5hbGxfZnJhbWVzID0gYWxsX2ZyYW1lcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZpbGVuYW1lX3BhdHRlcm4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlbmFtZV9wYXR0ZXJuCisKKyAgICBkZWYgX19tYXRjaF9mcmFtZShzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgZmlsZW5hbWUgPSBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBzZWxmLl9maWxlbmFtZV9wYXR0ZXJuKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLmxpbmVubyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAobGluZW5vID09IHNlbGYubGluZW5vKQorCisgICAgZGVmIF9tYXRjaF9mcmFtZShzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19tYXRjaF9mcmFtZShmaWxlbmFtZSwgbGluZW5vKSBeIChub3Qgc2VsZi5pbmNsdXNpdmUpCisKKyAgICBkZWYgX21hdGNoX3RyYWNlYmFjayhzZWxmLCB0cmFjZWJhY2spOgorICAgICAgICBpZiBzZWxmLmFsbF9mcmFtZXM6CisgICAgICAgICAgICBpZiBhbnkoc2VsZi5fX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8gaW4gdHJhY2ViYWNrKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmNsdXNpdmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5pbmNsdXNpdmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdHJhY2ViYWNrWzBdCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIGxpbmVubykKKworCitjbGFzcyBTbmFwc2hvdDoKKyAgICAiIiIKKyAgICBTbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlcywgdHJhY2ViYWNrX2xpbWl0KToKKyAgICAgICAgc2VsZi50cmFjZXMgPSBfVHJhY2VzKHRyYWNlcykKKyAgICAgICAgc2VsZi50cmFjZWJhY2tfbGltaXQgPSB0cmFjZWJhY2tfbGltaXQKKworICAgIGRlZiBkdW1wKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFdyaXRlIHRoZSBzbmFwc2hvdCBpbnRvIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBwaWNrbGUuZHVtcChzZWxmLCBmcCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWQoZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCBhIHNuYXBzaG90IGZyb20gYSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZChmcCkKKworICAgIGRlZiBfZmlsdGVyX3RyYWNlKHNlbGYsIGluY2x1ZGVfZmlsdGVycywgZXhjbHVkZV9maWx0ZXJzLCB0cmFjZSk6CisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlWzFdCisgICAgICAgIGlmIGluY2x1ZGVfZmlsdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBhbnkodHJhY2VfZmlsdGVyLl9tYXRjaF90cmFjZWJhY2sodHJhY2ViYWNrKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGluY2x1ZGVfZmlsdGVycyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGV4Y2x1ZGVfZmlsdGVyczoKKyAgICAgICAgICAgIGlmIGFueShub3QgdHJhY2VfZmlsdGVyLl9tYXRjaF90cmFjZWJhY2sodHJhY2ViYWNrKQorICAgICAgICAgICAgICAgICAgIGZvciB0cmFjZV9maWx0ZXIgaW4gZXhjbHVkZV9maWx0ZXJzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBmaWx0ZXJfdHJhY2VzKHNlbGYsIGZpbHRlcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgbmV3IFNuYXBzaG90IGluc3RhbmNlIHdpdGggYSBmaWx0ZXJlZCB0cmFjZXMgc2VxdWVuY2UsIGZpbHRlcnMKKyAgICAgICAgaXMgYSBsaXN0IG9mIEZpbHRlciBpbnN0YW5jZXMuICBJZiBmaWx0ZXJzIGlzIGFuIGVtcHR5IGxpc3QsIHJldHVybiBhCisgICAgICAgIG5ldyBTbmFwc2hvdCBpbnN0YW5jZSB3aXRoIGEgY29weSBvZiB0aGUgdHJhY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZmlsdGVyczoKKyAgICAgICAgICAgIGluY2x1ZGVfZmlsdGVycyA9IFtdCisgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcnMgPSBbXQorICAgICAgICAgICAgZm9yIHRyYWNlX2ZpbHRlciBpbiBmaWx0ZXJzOgorICAgICAgICAgICAgICAgIGlmIHRyYWNlX2ZpbHRlci5pbmNsdXNpdmU6CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZmlsdGVycy5hcHBlbmQodHJhY2VfZmlsdGVyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVycy5hcHBlbmQodHJhY2VfZmlsdGVyKQorICAgICAgICAgICAgbmV3X3RyYWNlcyA9IFt0cmFjZSBmb3IgdHJhY2UgaW4gc2VsZi50cmFjZXMuX3RyYWNlcworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9maWx0ZXJfdHJhY2UoaW5jbHVkZV9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3X3RyYWNlcyA9IHNlbGYudHJhY2VzLl90cmFjZXMuY29weSgpCisgICAgICAgIHJldHVybiBTbmFwc2hvdChuZXdfdHJhY2VzLCBzZWxmLnRyYWNlYmFja19saW1pdCkKKworICAgIGRlZiBfZ3JvdXBfYnkoc2VsZiwga2V5X3R5cGUsIGN1bXVsYXRpdmUpOgorICAgICAgICBpZiBrZXlfdHlwZSBub3QgaW4gKCd0cmFjZWJhY2snLCAnZmlsZW5hbWUnLCAnbGluZW5vJyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGtleV90eXBlOiAlciIgJSAoa2V5X3R5cGUsKSkKKyAgICAgICAgaWYgY3VtdWxhdGl2ZSBhbmQga2V5X3R5cGUgbm90IGluICgnbGluZW5vJywgJ2ZpbGVuYW1lJyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjdW11bGF0aXZlIG1vZGUgY2Fubm90IGJ5IHVzZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBrZXkgdHlwZSAlciIgJSBrZXlfdHlwZSkKKworICAgICAgICBzdGF0cyA9IHt9CisgICAgICAgIHRyYWNlYmFja3MgPSB7fQorICAgICAgICBpZiBub3QgY3VtdWxhdGl2ZToKKyAgICAgICAgICAgIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzOgorICAgICAgICAgICAgICAgIHNpemUsIHRyYWNlX3RyYWNlYmFjayA9IHRyYWNlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tzW3RyYWNlX3RyYWNlYmFja10KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleV90eXBlID09ICd0cmFjZWJhY2snOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gdHJhY2VfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5X3R5cGUgPT0gJ2xpbmVubyc6CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSB0cmFjZV90cmFjZWJhY2tbOjFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6ICMga2V5X3R5cGUgPT0gJ2ZpbGVuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9ICgodHJhY2VfdHJhY2ViYWNrWzBdWzBdLCAwKSwpCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IFRyYWNlYmFjayhmcmFtZXMpCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFja3NbdHJhY2VfdHJhY2ViYWNrXSA9IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHN0YXRzW3RyYWNlYmFja10KKyAgICAgICAgICAgICAgICAgICAgc3RhdC5zaXplICs9IHNpemUKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCArPSAxCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzdGF0c1t0cmFjZWJhY2tdID0gU3RhdGlzdGljKHRyYWNlYmFjaywgc2l6ZSwgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzCisgICAgICAgICAgICBmb3IgdHJhY2UgaW4gc2VsZi50cmFjZXMuX3RyYWNlczoKKyAgICAgICAgICAgICAgICBzaXplLCB0cmFjZV90cmFjZWJhY2sgPSB0cmFjZQorICAgICAgICAgICAgICAgIGZvciBmcmFtZSBpbiB0cmFjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja3NbZnJhbWVdCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleV90eXBlID09ICdsaW5lbm8nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9IChmcmFtZSwpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOiAjIGtleV90eXBlID09ICdmaWxlbmFtZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKChmcmFtZVswXSwgMCksKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gVHJhY2ViYWNrKGZyYW1lcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFja3NbZnJhbWVdID0gdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQgPSBzdGF0c1t0cmFjZWJhY2tdCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUgKz0gc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzW3RyYWNlYmFja10gPSBTdGF0aXN0aWModHJhY2ViYWNrLCBzaXplLCAxKQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIGRlZiBzdGF0aXN0aWNzKHNlbGYsIGtleV90eXBlLCBjdW11bGF0aXZlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEdyb3VwIHN0YXRpc3RpY3MgYnkga2V5X3R5cGUuIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIFN0YXRpc3RpYworICAgICAgICBpbnN0YW5jZXMuCisgICAgICAgICIiIgorICAgICAgICBncm91cGVkID0gc2VsZi5fZ3JvdXBfYnkoa2V5X3R5cGUsIGN1bXVsYXRpdmUpCisgICAgICAgIHN0YXRpc3RpY3MgPSBsaXN0KGdyb3VwZWQudmFsdWVzKCkpCisgICAgICAgIHN0YXRpc3RpY3Muc29ydChyZXZlcnNlPVRydWUsIGtleT1TdGF0aXN0aWMuX3NvcnRfa2V5KQorICAgICAgICByZXR1cm4gc3RhdGlzdGljcworCisgICAgZGVmIGNvbXBhcmVfdG8oc2VsZiwgb2xkX3NuYXBzaG90LCBrZXlfdHlwZSwgY3VtdWxhdGl2ZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyB3aXRoIGFuIG9sZCBzbmFwc2hvdCBvbGRfc25hcHNob3QuIEdldAorICAgICAgICBzdGF0aXN0aWNzIGFzIGEgc29ydGVkIGxpc3Qgb2YgU3RhdGlzdGljRGlmZiBpbnN0YW5jZXMsIGdyb3VwZWQgYnkKKyAgICAgICAgZ3JvdXBfYnkuCisgICAgICAgICIiIgorICAgICAgICBuZXdfZ3JvdXAgPSBzZWxmLl9ncm91cF9ieShrZXlfdHlwZSwgY3VtdWxhdGl2ZSkKKyAgICAgICAgb2xkX2dyb3VwID0gb2xkX3NuYXBzaG90Ll9ncm91cF9ieShrZXlfdHlwZSwgY3VtdWxhdGl2ZSkKKyAgICAgICAgc3RhdGlzdGljcyA9IF9jb21wYXJlX2dyb3VwZWRfc3RhdHMob2xkX2dyb3VwLCBuZXdfZ3JvdXApCisgICAgICAgIHN0YXRpc3RpY3Muc29ydChyZXZlcnNlPVRydWUsIGtleT1TdGF0aXN0aWNEaWZmLl9zb3J0X2tleSkKKyAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3MKKworCitkZWYgdGFrZV9zbmFwc2hvdCgpOgorICAgICIiIgorICAgIFRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorICAgICIiIgorICAgIGlmIG5vdCBpc190cmFjaW5nKCk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigidGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QiKQorICAgIHRyYWNlcyA9IF9nZXRfdHJhY2VzKCkKKyAgICB0cmFjZWJhY2tfbGltaXQgPSBnZXRfdHJhY2ViYWNrX2xpbWl0KCkKKyAgICByZXR1cm4gU25hcHNob3QodHJhY2VzLCB0cmFjZWJhY2tfbGltaXQpCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlLnB5IGIvTGliL3R1cnRsZS5weQppbmRleCBjNmViZmE1Li5hYjdiNmJhIDEwMDY0NAotLS0gYS9MaWIvdHVydGxlLnB5CisrKyBiL0xpYi90dXJ0bGUucHkKQEAgLTM4NDMsMTggKzM4NDMsMTggQEAKICAgICAgICAga2V5ID0gIlR1cnRsZS4iK21ldGhvZG5hbWUKICAgICAgICAgZG9jc2RpY3Rba2V5XSA9IGV2YWwoa2V5KS5fX2RvY19fCiAKLSAgICBmID0gb3BlbigiJXMucHkiICUgZmlsZW5hbWUsInciKQotICAgIGtleXMgPSBzb3J0ZWQoW3ggZm9yIHggaW4gZG9jc2RpY3Qua2V5cygpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKLSAgICBmLndyaXRlKCdkb2NzZGljdCA9IHtcblxuJykKLSAgICBmb3Iga2V5IGluIGtleXNbOi0xXToKKyAgICB3aXRoIG9wZW4oIiVzLnB5IiAlIGZpbGVuYW1lLCJ3IikgYXMgZjoKKyAgICAgICAga2V5cyA9IHNvcnRlZChbeCBmb3IgeCBpbiBkb2NzZGljdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKKyAgICAgICAgZi53cml0ZSgnZG9jc2RpY3QgPSB7XG5cbicpCisgICAgICAgIGZvciBrZXkgaW4ga2V5c1s6LTFdOgorICAgICAgICAgICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGtleSA9IGtleXNbLTFdCiAgICAgICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCi0gICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCi0gICAga2V5ID0ga2V5c1stMV0KLSAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQotICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIlxuXG4nICUgZG9jc2RpY3Rba2V5XSkKLSAgICBmLndyaXRlKCJ9XG4iKQotICAgIGYuY2xvc2UoKQorICAgICAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiJcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGYud3JpdGUoIn1cbiIpCisgICAgICAgIGYuY2xvc2UoKQogCiBkZWYgcmVhZF9kb2NzdHJpbmdzKGxhbmcpOgogICAgICIiIlJlYWQgaW4gZG9jc3RyaW5ncyBmcm9tIGxhbmctc3BlY2lmaWMgZG9jc3RyaW5nIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weSBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CmluZGV4IGNiZjNhZWIuLmExNDY4NGMgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CkBAIC02LDcgKzYsNyBAQAogZnJvbSBpZGxlbGliLlBlcmNvbGF0b3IgaW1wb3J0IFBlcmNvbGF0b3IKIGZyb20gaWRsZWxpYi5Db2xvckRlbGVnYXRvciBpbXBvcnQgQ29sb3JEZWxlZ2F0b3IKIGZyb20gaWRsZWxpYi50ZXh0VmlldyBpbXBvcnQgdmlld19maWxlICMgVGV4dFZpZXdlcgotZnJvbSBpbXAgaW1wb3J0IHJlbG9hZAorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZAogCiBpbXBvcnQgdHVydGxlCiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvTGliL3R5cGVzLnB5IGIvTGliL3R5cGVzLnB5CmluZGV4IGNmZDA5ZWEuLjdlNGZlYzIgMTAwNjQ0Ci0tLSBhL0xpYi90eXBlcy5weQorKysgYi9MaWIvdHlwZXMucHkKQEAgLTk5LDMgKzk5LDYwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBhIChub24tc3RyaWN0KSBzdWJjbGFzcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAib2YgdGhlIG1ldGFjbGFzc2VzIG9mIGFsbCBpdHMgYmFzZXMiKQogICAgIHJldHVybiB3aW5uZXIKKworY2xhc3MgRHluYW1pY0NsYXNzQXR0cmlidXRlOgorICAgICIiIlJvdXRlIGF0dHJpYnV0ZSBhY2Nlc3Mgb24gYSBjbGFzcyB0byBfX2dldGF0dHJfXy4KKworICAgIFRoaXMgaXMgYSBkZXNjcmlwdG9yLCB1c2VkIHRvIGRlZmluZSBhdHRyaWJ1dGVzIHRoYXQgYWN0IGRpZmZlcmVudGx5IHdoZW4KKyAgICBhY2Nlc3NlZCB0aHJvdWdoIGFuIGluc3RhbmNlIGFuZCB0aHJvdWdoIGEgY2xhc3MuICBJbnN0YW5jZSBhY2Nlc3MgcmVtYWlucworICAgIG5vcm1hbCwgYnV0IGFjY2VzcyB0byBhbiBhdHRyaWJ1dGUgdGhyb3VnaCBhIGNsYXNzIHdpbGwgYmUgcm91dGVkIHRvIHRoZQorICAgIGNsYXNzJ3MgX19nZXRhdHRyX18gbWV0aG9kOyB0aGlzIGlzIGRvbmUgYnkgcmFpc2luZyBBdHRyaWJ1dGVFcnJvci4KKworICAgIFRoaXMgYWxsb3dzIG9uZSB0byBoYXZlIHByb3BlcnRpZXMgYWN0aXZlIG9uIGFuIGluc3RhbmNlLCBhbmQgaGF2ZSB2aXJ0dWFsCisgICAgYXR0cmlidXRlcyBvbiB0aGUgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIChzZWUgRW51bSBmb3IgYW4gZXhhbXBsZSkuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmdldD1Ob25lLCBmc2V0PU5vbmUsIGZkZWw9Tm9uZSwgZG9jPU5vbmUpOgorICAgICAgICBzZWxmLmZnZXQgPSBmZ2V0CisgICAgICAgIHNlbGYuZnNldCA9IGZzZXQKKyAgICAgICAgc2VsZi5mZGVsID0gZmRlbAorICAgICAgICAjIG5leHQgdHdvIGxpbmVzIG1ha2UgRHluYW1pY0NsYXNzQXR0cmlidXRlIGFjdCB0aGUgc2FtZSBhcyBwcm9wZXJ0eQorICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2Mgb3IgZmdldC5fX2RvY19fCisgICAgICAgIHNlbGYub3ZlcndyaXRlX2RvYyA9IGRvYyBpcyBOb25lCisgICAgICAgICMgc3VwcG9ydCBmb3IgYWJzdHJhY3QgbWV0aG9kcworICAgICAgICBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gYm9vbChnZXRhdHRyKGZnZXQsICdfX2lzYWJzdHJhY3RtZXRob2RfXycsIEZhbHNlKSkKKworICAgIGRlZiBfX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcmNsYXNzPU5vbmUpOgorICAgICAgICBpZiBpbnN0YW5jZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoKQorICAgICAgICBlbGlmIHNlbGYuZmdldCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoInVucmVhZGFibGUgYXR0cmlidXRlIikKKyAgICAgICAgcmV0dXJuIHNlbGYuZmdldChpbnN0YW5jZSkKKworICAgIGRlZiBfX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYuZnNldCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImNhbid0IHNldCBhdHRyaWJ1dGUiKQorICAgICAgICBzZWxmLmZzZXQoaW5zdGFuY2UsIHZhbHVlKQorCisgICAgZGVmIF9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpOgorICAgICAgICBpZiBzZWxmLmZkZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJjYW4ndCBkZWxldGUgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mZGVsKGluc3RhbmNlKQorCisgICAgZGVmIGdldHRlcihzZWxmLCBmZ2V0KToKKyAgICAgICAgZmRvYyA9IGZnZXQuX19kb2NfXyBpZiBzZWxmLm92ZXJ3cml0ZV9kb2MgZWxzZSBOb25lCisgICAgICAgIHJlc3VsdCA9IHR5cGUoc2VsZikoZmdldCwgc2VsZi5mc2V0LCBzZWxmLmZkZWwsIGZkb2Mgb3Igc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgc2V0dGVyKHNlbGYsIGZzZXQpOgorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKHNlbGYuZmdldCwgZnNldCwgc2VsZi5mZGVsLCBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBkZWxldGVyKHNlbGYsIGZkZWwpOgorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKHNlbGYuZmdldCwgc2VsZi5mc2V0LCBmZGVsLCBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC9fX21haW5fXy5weQppbmRleCA3OThlYmMwLi4yNjYzMTc4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CkBAIC0xMyw3ICsxMyw2IEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLWZyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtLCBVU0FHRV9BU19NQUlOCi1UZXN0UHJvZ3JhbS5VU0FHRSA9IFVTQUdFX0FTX01BSU4KK2Zyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtCiAKIG1haW4obW9kdWxlPU5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvY2FzZS5weSBiL0xpYi91bml0dGVzdC9jYXNlLnB5CmluZGV4IGY1NmFmNTUuLjdlZDkzMmYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9jYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC9jYXNlLnB5CkBAIC0zLDE0ICszLDE2IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBwcHJpbnQKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb250ZXh0bGliCiAKIGZyb20gLiBpbXBvcnQgcmVzdWx0CiBmcm9tIC51dGlsIGltcG9ydCAoc3RyY2xhc3MsIHNhZmVfcmVwciwgX2NvdW50X2RpZmZfYWxsX3B1cnBvc2UsCi0gICAgICAgICAgICAgICAgICAgX2NvdW50X2RpZmZfaGFzaGFibGUpCisgICAgICAgICAgICAgICAgICAgX2NvdW50X2RpZmZfaGFzaGFibGUsIF9jb21tb25fc2hvcnRlbl9yZXByKQogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCkBAIC0yNiwxNyArMjgsMTEgQEAKICAgICBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KICAgICAiIiIKIAotY2xhc3MgX0V4cGVjdGVkRmFpbHVyZShFeGNlcHRpb24pOgorY2xhc3MgX1Nob3VsZFN0b3AoRXhjZXB0aW9uKToKICAgICAiIiIKLSAgICBSYWlzZSB0aGlzIHdoZW4gYSB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuCi0KLSAgICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICBUaGUgdGVzdCBzaG91bGQgc3RvcC4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbyk6Ci0gICAgICAgIHN1cGVyKF9FeHBlY3RlZEZhaWx1cmUsIHNlbGYpLl9faW5pdF9fKCkKLSAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvCi0KIGNsYXNzIF9VbmV4cGVjdGVkU3VjY2VzcyhFeGNlcHRpb24pOgogICAgICIiIgogICAgIFRoZSB0ZXN0IHdhcyBzdXBwb3NlZCB0byBmYWlsLCBidXQgaXQgZGlkbid0IQpAQCAtNDQsMTMgKzQwLDQwIEBACiAKIAogY2xhc3MgX091dGNvbWUob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgc2VsZi5leHBlY3RpbmdfZmFpbHVyZSA9IEZhbHNlCisgICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0CisgICAgICAgIHNlbGYucmVzdWx0X3N1cHBvcnRzX3N1YnRlc3RzID0gaGFzYXR0cihyZXN1bHQsICJhZGRTdWJUZXN0IikKICAgICAgICAgc2VsZi5zdWNjZXNzID0gVHJ1ZQotICAgICAgICBzZWxmLnNraXBwZWQgPSBOb25lCi0gICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc2tpcHBlZCA9IFtdCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlID0gTm9uZQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCi0gICAgICAgIHNlbGYuZmFpbHVyZXMgPSBbXQorCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgdGVzdFBhcnRFeGVjdXRvcihzZWxmLCB0ZXN0X2Nhc2UsIGlzVGVzdD1GYWxzZSk6CisgICAgICAgIG9sZF9zdWNjZXNzID0gc2VsZi5zdWNjZXNzCisgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5za2lwcGVkLmFwcGVuZCgodGVzdF9jYXNlLCBzdHIoZSkpKQorICAgICAgICBleGNlcHQgX1Nob3VsZFN0b3A6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIHNlbGYuZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmUgPSBleGNfaW5mbworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBleGNfaW5mbykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyBhbmQgc2VsZi5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBOb25lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IHNlbGYuc3VjY2VzcyBhbmQgb2xkX3N1Y2Nlc3MKIAogCiBkZWYgX2lkKG9iaik6CkBAIC04OCwyMiArMTExLDI2IEBACiAgICAgICAgIHJldHVybiBza2lwKHJlYXNvbikKICAgICByZXR1cm4gX2lkCiAKLQotZGVmIGV4cGVjdGVkRmFpbHVyZShmdW5jKToKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCi0gICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByYWlzZSBfRXhwZWN0ZWRGYWlsdXJlKHN5cy5leGNfaW5mbygpKQotICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MKLSAgICByZXR1cm4gd3JhcHBlcgorZGVmIGV4cGVjdGVkRmFpbHVyZSh0ZXN0X2l0ZW0pOgorICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18gPSBUcnVlCisgICAgcmV0dXJuIHRlc3RfaXRlbQogCiAKLWNsYXNzIF9Bc3NlcnRSYWlzZXNCYXNlQ29udGV4dChvYmplY3QpOgorY2xhc3MgX0Jhc2VUZXN0Q2FzZUNvbnRleHQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKToKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKworICAgIGRlZiBfcmFpc2VGYWlsdXJlKHNlbGYsIHN0YW5kYXJkTXNnKToKKyAgICAgICAgbXNnID0gc2VsZi50ZXN0X2Nhc2UuX2Zvcm1hdE1lc3NhZ2Uoc2VsZi5tc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLnRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkLCB0ZXN0X2Nhc2UsIGNhbGxhYmxlX29iaj1Ob25lLAogICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleD1Ob25lKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQogICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKICAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKICAgICAgICAgaWYgY2FsbGFibGVfb2JqIGlzIG5vdCBOb25lOgpAQCAtMTE4LDEwICsxNDUsNiBAQAogICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4ID0gZXhwZWN0ZWRfcmVnZXgKICAgICAgICAgc2VsZi5tc2cgPSBOb25lCiAKLSAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6Ci0gICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKLSAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCi0KICAgICBkZWYgaGFuZGxlKHNlbGYsIG5hbWUsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIElmIGNhbGxhYmxlX29iaiBpcyBOb25lLCBhc3NlcnRSYWlzZXMvV2FybnMgaXMgYmVpbmcgdXNlZCBhcyBhCkBAIC0xMzUsNyArMTU4LDYgQEAKICAgICAgICAgICAgIGNhbGxhYmxlX29iaigqYXJncywgKiprd2FyZ3MpCiAKIAotCiBjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQpOgogICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKIApAQCAtMjE3LDYgKzIzOSw3NCBAQAogICAgICAgICAgICAgc2VsZi5fcmFpc2VGYWlsdXJlKCJ7fSBub3QgdHJpZ2dlcmVkIi5mb3JtYXQoZXhjX25hbWUpKQogCiAKKworX0xvZ2dpbmdXYXRjaGVyID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0xvZ2dpbmdXYXRjaGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJyZWNvcmRzIiwgIm91dHB1dCJdKQorCisKK2NsYXNzIF9DYXB0dXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgIiIiCisgICAgQSBsb2dnaW5nIGhhbmRsZXIgY2FwdHVyaW5nIGFsbCAocmF3IGFuZCBmb3JtYXR0ZWQpIGxvZ2dpbmcgb3V0cHV0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gX0xvZ2dpbmdXYXRjaGVyKFtdLCBbXSkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi53YXRjaGVyLnJlY29yZHMuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICBzZWxmLndhdGNoZXIub3V0cHV0LmFwcGVuZChtc2cpCisKKworCitjbGFzcyBfQXNzZXJ0TG9nc0NvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgorICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydExvZ3MoKS4iIiIKKworICAgIExPR0dJTkdfRk9STUFUID0gIiUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCBsb2dnZXJfbmFtZSwgbGV2ZWwpOgorICAgICAgICBfQmFzZVRlc3RDYXNlQ29udGV4dC5fX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpCisgICAgICAgIHNlbGYubG9nZ2VyX25hbWUgPSBsb2dnZXJfbmFtZQorICAgICAgICBpZiBsZXZlbDoKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLl9uYW1lVG9MZXZlbC5nZXQobGV2ZWwsIGxldmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBzZWxmLm1zZyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5sb2dnZXJfbmFtZSwgbG9nZ2luZy5Mb2dnZXIpOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBzZWxmLmxvZ2dlcl9uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIgPSBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKHNlbGYubG9nZ2VyX25hbWUpCisgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKHNlbGYuTE9HR0lOR19GT1JNQVQpCisgICAgICAgIGhhbmRsZXIgPSBfQ2FwdHVyaW5nSGFuZGxlcigpCisgICAgICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gaGFuZGxlci53YXRjaGVyCisgICAgICAgIHNlbGYub2xkX2hhbmRsZXJzID0gbG9nZ2VyLmhhbmRsZXJzWzpdCisgICAgICAgIHNlbGYub2xkX2xldmVsID0gbG9nZ2VyLmxldmVsCisgICAgICAgIHNlbGYub2xkX3Byb3BhZ2F0ZSA9IGxvZ2dlci5wcm9wYWdhdGUKKyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2hhbmRsZXJdCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIud2F0Y2hlcgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaGFuZGxlcnMgPSBzZWxmLm9sZF9oYW5kbGVycworICAgICAgICBzZWxmLmxvZ2dlci5wcm9wYWdhdGUgPSBzZWxmLm9sZF9wcm9wYWdhdGUKKyAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2ZWwoc2VsZi5vbGRfbGV2ZWwpCisgICAgICAgIGlmIGV4Y190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBsZXQgdW5leHBlY3RlZCBleGNlcHRpb25zIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihzZWxmLndhdGNoZXIucmVjb3JkcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgKKyAgICAgICAgICAgICAgICAibm8gbG9ncyBvZiBsZXZlbCB7fSBvciBoaWdoZXIgdHJpZ2dlcmVkIG9uIHt9IgorICAgICAgICAgICAgICAgIC5mb3JtYXQobG9nZ2luZy5nZXRMZXZlbE5hbWUoc2VsZi5sZXZlbCksIHNlbGYubG9nZ2VyLm5hbWUpKQorCisKIGNsYXNzIFRlc3RDYXNlKG9iamVjdCk6CiAgICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2VzLgogCkBAIC0yNzAsNyArMzYwLDcgQEAKICAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKLSAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBOb25lCisgICAgICAgIHNlbGYuX291dGNvbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSAnTm8gdGVzdCcKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbWV0aG9kTmFtZSkKQEAgLTI4Myw2ICszNzMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXwogICAgICAgICBzZWxmLl9jbGVhbnVwcyA9IFtdCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBOb25lCiAKICAgICAgICAgIyBNYXAgdHlwZXMgdG8gY3VzdG9tIGFzc2VydEVxdWFsIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29tcGFyZQogICAgICAgICAjIGluc3RhbmNlcyBvZiBzYWlkIHR5cGUgaW4gbW9yZSBkZXRhaWwgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bApAQCAtMzcwLDQ0ICs0NjEsODAgQEAKICAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAogICAgICAgICAgICAgICAgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCiAKLSAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCByZWFzb24pOgorICAgIGRlZiBfYWRkU2tpcChzZWxmLCByZXN1bHQsIHRlc3RfY2FzZSwgcmVhc29uKToKICAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCiAgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBhZGRTa2lwKHNlbGYsIHJlYXNvbikKKyAgICAgICAgICAgIGFkZFNraXAodGVzdF9jYXNlLCByZWFzb24pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRTa2lwIG1ldGhvZCwgc2tpcHMgbm90IHJlcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIDIpCi0gICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdF9jYXNlKQogCi0gICAgZGVmIF9leGVjdXRlVGVzdFBhcnQoc2VsZiwgZnVuY3Rpb24sIG91dGNvbWUsIGlzVGVzdD1GYWxzZSk6CisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc3ViVGVzdChzZWxmLCBtc2c9Tm9uZSwgKipwYXJhbXMpOgorICAgICAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgZW5jbG9zZWQgYmxvY2sKKyAgICAgICAgb2YgY29kZSBpbiBhIHN1YnRlc3QgaWRlbnRpZmllZCBieSB0aGUgb3B0aW9uYWwgbWVzc2FnZSBhbmQKKyAgICAgICAga2V5d29yZCBwYXJhbWV0ZXJzLiAgQSBmYWlsdXJlIGluIHRoZSBzdWJ0ZXN0IG1hcmtzIHRoZSB0ZXN0CisgICAgICAgIGNhc2UgYXMgZmFpbGVkIGJ1dCByZXN1bWVzIGV4ZWN1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NlZAorICAgICAgICBibG9jaywgYWxsb3dpbmcgZnVydGhlciB0ZXN0IGNvZGUgdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHM6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcmVudCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICBwYXJhbXNfbWFwID0gY29sbGVjdGlvbnMuQ2hhaW5NYXAocGFyYW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IHBhcmVudC5wYXJhbXMubmV3X2NoaWxkKHBhcmFtcykKKyAgICAgICAgc2VsZi5fc3VidGVzdCA9IF9TdWJUZXN0KHNlbGYsIG1zZywgcGFyYW1zX21hcCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuY3Rpb24oKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLnNraXBwZWQgPSBzdHIoZSkKLSAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBpZiBpc1Rlc3Q6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcyA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKGV4Y19pbmZvKQotICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZmFpbHVyZXMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgd2l0aCBzZWxmLl9vdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZi5fc3VidGVzdCwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX291dGNvbWUucmVzdWx0CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lIGFuZCByZXN1bHQuZmFpbGZhc3Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9TaG91bGRTdG9wCisgICAgICAgICAgICBlbGlmIHNlbGYuX291dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaXMgZXhwZWN0aW5nIGEgZmFpbHVyZSwgd2UgcmVhbGx5IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAjIHN0b3Agbm93IGFuZCByZWdpc3RlciB0aGUgZXhwZWN0ZWQgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3VidGVzdCA9IHBhcmVudAorCisgICAgZGVmIF9mZWVkRXJyb3JzVG9SZXN1bHQoc2VsZiwgcmVzdWx0LCBlcnJvcnMpOgorICAgICAgICBmb3IgdGVzdCwgZXhjX2luZm8gaW4gZXJyb3JzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0LCBfU3ViVGVzdCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdC50ZXN0X2Nhc2UsIHRlc3QsIGV4Y19pbmZvKQorICAgICAgICAgICAgZWxpZiBleGNfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGV4Y19pbmZvWzBdLCBzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3IodGVzdCwgZXhjX2luZm8pCisKKyAgICBkZWYgX2FkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCByZXN1bHQsIGV4Y19pbmZvKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gcmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRFeHBlY3RlZEZhaWx1cmUgbWV0aG9kLCByZXBvcnRpbmcgYXMgcGFzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCByZXN1bHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IHJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2VzcworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBhbiBhY3R1YWwgZXhjZXB0aW9uIGFuZCB0cmFjZWJhY2sgdG8gYWRkRmFpbHVyZSwKKyAgICAgICAgICAgICMgb3RoZXJ3aXNlIHRoZSBsZWdhY3kgcmVzdWx0IGNhbiBjaG9rZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MgZnJvbSBOb25lCisgICAgICAgICAgICBleGNlcHQgX1VuZXhwZWN0ZWRTdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZikKIAogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgogICAgICAgICBvcmlnX3Jlc3VsdCA9IHJlc3VsdApAQCAtNDI2LDQ2ICs1NTMsMzggQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBza2lwX3doeSA9IChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2V0YXR0cih0ZXN0TWV0aG9kLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpKQotICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBza2lwX3doeSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2VsZiwgc2tpcF93aHkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4cGVjdGluZ19mYWlsdXJlID0gZ2V0YXR0cih0ZXN0TWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdW5pdHRlc3RfZXhwZWN0aW5nX2ZhaWx1cmVfXyIsIEZhbHNlKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUoKQotICAgICAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBvdXRjb21lCisgICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5fb3V0Y29tZSA9IG91dGNvbWUKIAotICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYuc2V0VXAsIG91dGNvbWUpCisgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldFVwKCkKICAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQodGVzdE1ldGhvZCwgb3V0Y29tZSwgaXNUZXN0PVRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYudGVhckRvd24sIG91dGNvbWUpCisgICAgICAgICAgICAgICAgb3V0Y29tZS5leHBlY3RpbmdfZmFpbHVyZSA9IGV4cGVjdGluZ19mYWlsdXJlCisgICAgICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKKyAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGluZ19mYWlsdXJlID0gRmFsc2UKKyAgICAgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCiAKICAgICAgICAgICAgIHNlbGYuZG9DbGVhbnVwcygpCisgICAgICAgICAgICBmb3IgdGVzdCwgcmVhc29uIGluIG91dGNvbWUuc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgdGVzdCwgcmVhc29uKQorICAgICAgICAgICAgc2VsZi5fZmVlZEVycm9yc1RvUmVzdWx0KHJlc3VsdCwgb3V0Y29tZS5lcnJvcnMpCiAgICAgICAgICAgICBpZiBvdXRjb21lLnN1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5za2lwcGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgb3V0Y29tZS5za2lwcGVkKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmVycm9yczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIGV4Y19pbmZvKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IGdldGF0dHIocmVzdWx0LCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkRXhwZWN0ZWRGYWlsdXJlKHJlc3VsdCwgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcykKLQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZEV4cGVjdGVkRmFpbHVyZScsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGFkZEV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZEV4cGVjdGVkRmFpbHVyZSBtZXRob2QsIHJlcG9ydGluZyBhcyBwYXNzZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRVbmV4cGVjdGVkU3VjY2VzcyhyZXN1bHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQpAQCAtNDc3LDExICs1OTYsMTEgQEAKICAgICBkZWYgZG9DbGVhbnVwcyhzZWxmKToKICAgICAgICAgIiIiRXhlY3V0ZSBhbGwgY2xlYW51cCBmdW5jdGlvbnMuIE5vcm1hbGx5IGNhbGxlZCBmb3IgeW91IGFmdGVyCiAgICAgICAgIHRlYXJEb3duLiIiIgotICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgb3IgX091dGNvbWUoKQorICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZSBvciBfT3V0Y29tZSgpCiAgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXBzOgogICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9IHNlbGYuX2NsZWFudXBzLnBvcCgpCi0gICAgICAgICAgICBwYXJ0ID0gbGFtYmRhOiBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQocGFydCwgb3V0Y29tZSkKKyAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgICAjIHJldHVybiB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgICAgICAjIGV2ZW4gdGhvdWdoIHdlIG5vIGxvbmdlciB1cyBpdCBpbnRlcm5hbGx5CkBAIC02MDAsNiArNzE5LDI4IEBACiAgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYsIGNhbGxhYmxlX29iaikKICAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRXYXJucycsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKQogCisgICAgZGVmIGFzc2VydExvZ3Moc2VsZiwgbG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBhIGxvZyBtZXNzYWdlIG9mIGxldmVsICpsZXZlbCogb3IgaGlnaGVyIGlzIGVtaXR0ZWQKKyAgICAgICAgb24gKmxvZ2dlcl9uYW1lKiBvciBpdHMgY2hpbGRyZW4uICBJZiBvbWl0dGVkLCAqbGV2ZWwqIGRlZmF1bHRzIHRvCisgICAgICAgIElORk8gYW5kICpsb2dnZXIqIGRlZmF1bHRzIHRvIHRoZSByb290IGxvZ2dlci4KKworICAgICAgICBUaGlzIG1ldGhvZCBtdXN0IGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGFuZCB3aWxsIHlpZWxkCisgICAgICAgIGEgcmVjb3JkaW5nIG9iamVjdCB3aXRoIHR3byBhdHRyaWJ1dGVzOiBgb3V0cHV0YCBhbmQgYHJlY29yZHNgLgorICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIsIHRoZSBgb3V0cHV0YCBhdHRyaWJ1dGUgd2lsbAorICAgICAgICBiZSBhIGxpc3Qgb2YgdGhlIG1hdGNoaW5nIGZvcm1hdHRlZCBsb2cgbWVzc2FnZXMgYW5kIHRoZQorICAgICAgICBgcmVjb3Jkc2AgYXR0cmlidXRlIHdpbGwgYmUgYSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIExvZ1JlY29yZAorICAgICAgICBvYmplY3RzLgorCisgICAgICAgIEV4YW1wbGU6OgorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJywgbGV2ZWw9J0lORk8nKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX0Fzc2VydExvZ3NDb250ZXh0KHNlbGYsIGxvZ2dlciwgbGV2ZWwpCisKICAgICBkZWYgX2dldEFzc2VydEVxdWFsaXR5RnVuYyhzZWxmLCBmaXJzdCwgc2Vjb25kKToKICAgICAgICAgIiIiR2V0IGEgZGV0YWlsZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdGhlIHR5cGVzIG9mIHRoZSB0d28gYXJncy4KIApAQCAtNjI5LDcgKzc3MCw3IEBACiAgICAgZGVmIF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgogICAgICAgICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3BlY2lmaWMuIiIiCiAgICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgc2FmZV9yZXByKHNlY29uZCkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQogICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIApAQCAtNzY0LDE0ICs5MDUsOSBAQAogICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgogICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICBzZXExX3JlcHIgPSBzYWZlX3JlcHIoc2VxMSkKLSAgICAgICAgICAgIHNlcTJfcmVwciA9IHNhZmVfcmVwcihzZXEyKQotICAgICAgICAgICAgaWYgbGVuKHNlcTFfcmVwcikgPiAzMDoKLSAgICAgICAgICAgICAgICBzZXExX3JlcHIgPSBzZXExX3JlcHJbOjMwXSArICcuLi4nCi0gICAgICAgICAgICBpZiBsZW4oc2VxMl9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTJfcmVwciA9IHNlcTJfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGVsZW1lbnRzID0gKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCBzZXExX3JlcHIsIHNlcTJfcmVwcikKLSAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlIGVsZW1lbnRzCisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnJXNzIGRpZmZlcjogJXMgIT0gJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgIChzZXFfdHlwZV9uYW1lLmNhcGl0YWxpemUoKSwpICsKKyAgICAgICAgICAgICAgICAgICAgX2NvbW1vbl9zaG9ydGVuX3JlcHIoc2VxMSwgc2VxMikpCiAKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4xLCBsZW4yKSk6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtOTI5LDcgKzEwNjUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZDIsIGRpY3QsICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCiAKICAgICAgICAgaWYgZDEgIT0gZDI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGQxLCBUcnVlKSwgc2FmZV9yZXByKGQyLCBUcnVlKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGQxLCBkMikKICAgICAgICAgICAgIGRpZmYgPSAoJ1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKQEAgLTEwMTMsOCArMTE0OSw3IEBACiAgICAgICAgICAgICBpZiBsZW4oZmlyc3RsaW5lcykgPT0gMSBhbmQgZmlyc3Quc3RyaXAoJ1xyXG4nKSA9PSBmaXJzdDoKICAgICAgICAgICAgICAgICBmaXJzdGxpbmVzID0gW2ZpcnN0ICsgJ1xuJ10KICAgICAgICAgICAgICAgICBzZWNvbmRsaW5lcyA9IFtzZWNvbmQgKyAnXG4nXQotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCwgVHJ1ZSkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgZGlmZiA9ICdcbicgKyAnJy5qb2luKGRpZmZsaWIubmRpZmYoZmlyc3RsaW5lcywgc2Vjb25kbGluZXMpKQogICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2Uoc3RhbmRhcmRNc2csIGRpZmYpCiAgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKQEAgLTEyMTIsMyArMTM0NywzOSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0aW9uCiAgICAgICAgIGRvYyA9IHNlbGYuX3Rlc3RGdW5jLl9fZG9jX18KICAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0KCJcbiIpWzBdLnN0cmlwKCkgb3IgTm9uZQorCisKK2NsYXNzIF9TdWJUZXN0KFRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UsIG1lc3NhZ2UsIHBhcmFtcyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQorICAgICAgICBzZWxmLnBhcmFtcyA9IHBhcmFtcworICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24gPSB0ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN1YnRlc3RzIGNhbm5vdCBiZSBydW4gZGlyZWN0bHkiKQorCisgICAgZGVmIF9zdWJEZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBpZiBzZWxmLl9tZXNzYWdlOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCJbe31dIi5mb3JtYXQoc2VsZi5fbWVzc2FnZSkpCisgICAgICAgIGlmIHNlbGYucGFyYW1zOgorICAgICAgICAgICAgcGFyYW1zX2Rlc2MgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgInt9PXshcn0iLmZvcm1hdChrLCB2KQorICAgICAgICAgICAgICAgIGZvciAoaywgdikgaW4gc29ydGVkKHNlbGYucGFyYW1zLml0ZW1zKCkpKQorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCIoe30pIi5mb3JtYXQocGFyYW1zX2Rlc2MpKQorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocGFydHMpIG9yICcoPHN1YnRlc3Q+KScKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSB7fSIuZm9ybWF0KHNlbGYudGVzdF9jYXNlLmlkKCksIHNlbGYuX3N1YkRlc2NyaXB0aW9uKCkpCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBzdWJ0ZXN0LCBvciBOb25lIGlmIG5vCisgICAgICAgIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHByb3ZpZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9jYXNlLnNob3J0RGVzY3JpcHRpb24oKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAie30ge30iLmZvcm1hdChzZWxmLnRlc3RfY2FzZSwgc2VsZi5fc3ViRGVzY3JpcHRpb24oKSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CmluZGV4IDlhYjI2YzEuLjgwOGM1MGUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpAQCAtMzQsNiArMzQsMTQgQEAKICAgICBUZXN0Q2xhc3MgPSB0eXBlKGNsYXNzbmFtZSwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCiAgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQogCitkZWYgX21ha2Vfc2tpcHBlZF90ZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CisgICAgQGNhc2Uuc2tpcChzdHIoZXhjZXB0aW9uKSkKKyAgICBkZWYgdGVzdFNraXBwZWQoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBhdHRycyA9IHttZXRob2RuYW1lOiB0ZXN0U2tpcHBlZH0KKyAgICBUZXN0Q2xhc3MgPSB0eXBlKCJNb2R1bGVTa2lwcGVkIiwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCisgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQorCiBkZWYgX2p5dGhvbl9hd2FyZV9zcGxpdGV4dChwYXRoKToKICAgICBpZiBwYXRoLmxvd2VyKCkuZW5kc3dpdGgoJyRweS5jbGFzcycpOgogICAgICAgICByZXR1cm4gcGF0aFs6LTldCkBAIC01Myw4ICs2MSw5IEBACiAgICAgZGVmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0ZXN0Q2FzZUNsYXNzIiIiCiAgICAgICAgIGlmIGlzc3ViY2xhc3ModGVzdENhc2VDbGFzcywgc3VpdGUuVGVzdFN1aXRlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSBUZXN0U3VpdGUuIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tIFRlc3RDYXNlPyIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0U3VpdGUuIE1heWJlIHlvdSBtZWFudCB0byBkZXJpdmUgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RDYXNlPyIpCiAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKICAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKICAgICAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBbJ3J1blRlc3QnXQpAQCAtMTY5LDYgKzE3OCw5IEBACiAgICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CiAgICAgICAgIHBhY2thZ2VzIGNhbiBjb250aW51ZSBkaXNjb3ZlcnkgdGhlbXNlbHZlcy4gdG9wX2xldmVsX2RpciBpcyBzdG9yZWQgc28KICAgICAgICAgbG9hZF90ZXN0cyBkb2VzIG5vdCBuZWVkIHRvIHBhc3MgdGhpcyBhcmd1bWVudCBpbiB0byBsb2FkZXIuZGlzY292ZXIoKS4KKworICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlIGV4ZWN1dGlvbgorICAgICAgICBvcmRlciBldmVuIG9uIGZpbGVzeXN0ZW1zIHdpdGggbm9uLWFscGhhYmV0aWNhbCBvcmRlcmluZyBsaWtlIGV4dDMvNC4KICAgICAgICAgIiIiCiAgICAgICAgIHNldF9pbXBsaWNpdF90b3AgPSBGYWxzZQogICAgICAgICBpZiB0b3BfbGV2ZWxfZGlyIGlzIE5vbmUgYW5kIHNlbGYuX3RvcF9sZXZlbF9kaXIgaXMgbm90IE5vbmU6CkBAIC0xODksNiArMjAxLDggQEAKICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbF9kaXIKIAogICAgICAgICBpc19ub3RfaW1wb3J0YWJsZSA9IEZhbHNlCisgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCisgICAgICAgIHRlc3RzID0gW10KICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKSk6CiAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKQogICAgICAgICAgICAgaWYgc3RhcnRfZGlyICE9IHRvcF9sZXZlbF9kaXI6CkBAIC0yMDIsMTUgKzIxNiw1MiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gc3lzLm1vZHVsZXNbc3RhcnRfZGlyXQogICAgICAgICAgICAgICAgIHRvcF9wYXJ0ID0gc3RhcnRfZGlyLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSgodGhlX21vZHVsZS5fX2ZpbGVfXykpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBuYW1lc3BhY2UgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IHRoZV9tb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICBpZiBzcGVjIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiB0aGVfbW9kdWxlLl9fcGF0aF9fOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IHNldF9pbXBsaWNpdF90b3AgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcGF0aC5zdGFydHN3aXRoKHRvcF9sZXZlbF9kaXIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aC5zcGxpdCh0aGVfbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCIuIiwgb3MucGF0aC5zZXApKVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfdGVzdHMocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPVRydWUpKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHRoZV9tb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBidWlsdGluIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW4gbm90IHVzZSBidWlsdGluIG1vZHVsZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBkb3R0ZWQgbW9kdWxlIG5hbWVzJykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvblwndCBrbm93IGhvdyB0byBkaXNjb3ZlciBmcm9tIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0aGVfbW9kdWxlKSkgZnJvbSBOb25lCisKICAgICAgICAgICAgICAgICBpZiBzZXRfaW1wbGljaXRfdG9wOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc19uYW1lc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCiAKICAgICAgICAgaWYgaXNfbm90X2ltcG9ydGFibGU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignU3RhcnQgZGlyZWN0b3J5IGlzIG5vdCBpbXBvcnRhYmxlOiAlcicgJSBzdGFydF9kaXIpCiAKLSAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgaWYgbm90IGlzX25hbWVzcGFjZToKKyAgICAgICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybikpCiAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3ModGVzdHMpCiAKICAgICBkZWYgX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgpAQCAtMjQzLDkgKzI5NCw5IEBACiAgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFsdGVybmF0aXZlIG1hdGNoaW5nIHN0cmF0ZWd5CiAgICAgICAgIHJldHVybiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pCiAKLSAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9RmFsc2UpOgogICAgICAgICAiIiJVc2VkIGJ5IGRpc2NvdmVyeS4gWWllbGRzIHRlc3Qgc3VpdGVzIGl0IGxvYWRzLiIiIgotICAgICAgICBwYXRocyA9IG9zLmxpc3RkaXIoc3RhcnRfZGlyKQorICAgICAgICBwYXRocyA9IHNvcnRlZChvcy5saXN0ZGlyKHN0YXJ0X2RpcikpCiAKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfZGlyLCBwYXRoKQpAQCAtMjU5LDYgKzMxMCw4IEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChmdWxsX3BhdGgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBjYXNlLlNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX3NraXBwZWRfdGVzdChuYW1lLCBlLCBzZWxmLnN1aXRlQ2xhc3MpCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc2VsZi5zdWl0ZUNsYXNzKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yNzQsNyArMzI3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZyAlIChtb2RfbmFtZSwgbW9kdWxlX2RpciwgZXhwZWN0ZWRfZGlyKSkKICAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgaWYgKG5vdCBuYW1lc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSkpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgbG9hZF90ZXN0cyA9IE5vbmUKQEAgLTI5MSw4ICszNDUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0cyBsb2FkZWQgZnJvbSBwYWNrYWdlIGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgICMgcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZT1uYW1lc3BhY2UpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgcGF0dGVybikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9tYWluLnB5IGIvTGliL3VuaXR0ZXN0L21haW4ucHkKaW5kZXggZWFkNjQ5My4uMTgwZGY4NiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L21haW4ucHkKKysrIGIvTGliL3VuaXR0ZXN0L21haW4ucHkKQEAgLTEsNyArMSw3IEBACiAiIiJVbml0dGVzdCBtYWluIHByb2dyYW0iIiIKIAogaW1wb3J0IHN5cwotaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBvcwogCiBmcm9tIC4gaW1wb3J0IGxvYWRlciwgcnVubmVyCkBAIC05LDUzICs5LDIwIEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLUZBSUxGQVNUICAgICA9ICIgIC1mLCAtLWZhaWxmYXN0ICAgU3RvcCBvbiBmaXJzdCBmYWlsdXJlXG4iCi1DQVRDSEJSRUFLICAgPSAiICAtYywgLS1jYXRjaCAgICAgIENhdGNoIGNvbnRyb2wtQyBhbmQgZGlzcGxheSByZXN1bHRzXG4iCi1CVUZGRVJPVVRQVVQgPSAiICAtYiwgLS1idWZmZXIgICAgIEJ1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdCBydW5zXG4iCi0KLVVTQUdFX0FTX01BSU4gPSAiIiJcCi1Vc2FnZTogJShwcm9nTmFtZSlzIFtvcHRpb25zXSBbdGVzdHNdCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK01BSU5fRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQotICAlKHByb2dOYW1lKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKLSAgJShwcm9nTmFtZSlzIG1vZHVsZS5DbGFzcy50ZXN0X21ldGhvZCAgLSBydW4gc3BlY2lmaWVkIHRlc3QgbWV0aG9kCi0KLVt0ZXN0c10gY2FuIGJlIGEgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIHRlc3QgbW9kdWxlcywgY2xhc3NlcyBhbmQgdGVzdAotbWV0aG9kcy4KLQotQWx0ZXJuYXRpdmUgVXNhZ2U6ICUocHJvZ05hbWUpcyBkaXNjb3ZlciBbb3B0aW9uc10KLQotT3B0aW9uczoKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzICAtcyBkaXJlY3RvcnkgICAgIERpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KQotICAtcCBwYXR0ZXJuICAgICAgIFBhdHRlcm4gdG8gbWF0Y2ggdGVzdCBmaWxlcyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KQotICAtdCBkaXJlY3RvcnkgICAgIFRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdCB0bwotICAgICAgICAgICAgICAgICAgIHN0YXJ0IGRpcmVjdG9yeSkKLQotRm9yIHRlc3QgZGlzY292ZXJ5IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcAotbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LgorICAlKHByb2cpcyB0ZXN0X21vZHVsZSAgICAgICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gdGVzdF9tb2R1bGUKKyAgJShwcm9nKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKKyAgJShwcm9nKXMgbW9kdWxlLkNsYXNzLnRlc3RfbWV0aG9kICAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKICIiIgogCi1VU0FHRV9GUk9NX01PRFVMRSA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0XSBbLi4uXQotCi1PcHRpb25zOgotICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCi0gIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKLSAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitNT0RVTEVfRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcnVuIGRlZmF1bHQgc2V0IG9mIHRlc3RzCi0gICUocHJvZ05hbWUpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCi0gICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcgICAgICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgICAgIC0gcnVuIGFsbCAndGVzdConIHRlc3QgbWV0aG9kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCisgICUocHJvZylzICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKKyAgJShwcm9nKXMgTXlUZXN0U3VpdGUgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCisgICUocHJvZylzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgLSBydW4gTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nCisgICUocHJvZylzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCiAiIiIKIAogZGVmIF9jb252ZXJ0X25hbWUobmFtZSk6CkBAIC04MiwxMCArNDksMTEgQEAKICAgICAiIiJBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKICAgICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KICAgICAiIiIKLSAgICBVU0FHRSA9IFVTQUdFX0ZST01fTU9EVUxFCi0KICAgICAjIGRlZmF1bHRzIGZvciB0ZXN0aW5nCisgICAgbW9kdWxlPU5vbmUKKyAgICB2ZXJib3NpdHkgPSAxCiAgICAgZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gcHJvZ05hbWUgPSB3YXJuaW5ncyA9IE5vbmUKKyAgICBfZGlzY292ZXJ5X3BhcnNlciA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLAogICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyPU5vbmUsIHRlc3RMb2FkZXI9bG9hZGVyLmRlZmF1bHRUZXN0TG9hZGVyLApAQCAtMTI3LDQ0ICs5NSw0NyBAQAogICAgIGRlZiB1c2FnZUV4aXQoc2VsZiwgbXNnPU5vbmUpOgogICAgICAgICBpZiBtc2c6CiAgICAgICAgICAgICBwcmludChtc2cpCi0gICAgICAgIHVzYWdlID0geydwcm9nTmFtZSc6IHNlbGYucHJvZ05hbWUsICdjYXRjaGJyZWFrJzogJycsICdmYWlsZmFzdCc6ICcnLAotICAgICAgICAgICAgICAgICAnYnVmZmVyJzogJyd9Ci0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnZmFpbGZhc3QnXSA9IEZBSUxGQVNUCi0gICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydjYXRjaGJyZWFrJ10gPSBDQVRDSEJSRUFLCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2J1ZmZlciddID0gQlVGRkVST1VUUFVUCi0gICAgICAgIHByaW50KHNlbGYuVVNBR0UgJSB1c2FnZSkKKyAgICAgICAgaWYgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBzZWxmLl9wcmludF9oZWxwKCkKICAgICAgICAgc3lzLmV4aXQoMikKIAorICAgIGRlZiBfcHJpbnRfaGVscChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcHJpbnQoc2VsZi5fbWFpbl9wYXJzZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgICAgIHByaW50KE1BSU5fRVhBTVBMRVMgJSB7J3Byb2cnOiBzZWxmLnByb2dOYW1lfSkKKyAgICAgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludChzZWxmLl9tYWluX3BhcnNlci5mb3JtYXRfaGVscCgpKQorICAgICAgICAgICAgcHJpbnQoTU9EVUxFX0VYQU1QTEVTICUgeydwcm9nJzogc2VsZi5wcm9nTmFtZX0pCisKICAgICBkZWYgcGFyc2VBcmdzKHNlbGYsIGFyZ3YpOgotICAgICAgICBpZiAoKGxlbihhcmd2KSA+IDEgYW5kIGFyZ3ZbMV0ubG93ZXIoKSA9PSAnZGlzY292ZXInKSBvcgotICAgICAgICAgICAgKGxlbihhcmd2KSA9PSAxIGFuZCBzZWxmLm1vZHVsZSBpcyBOb25lKSk6Ci0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsyOl0pCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3Zlcic6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KGFyZ3ZbMjpdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSwgc2VsZikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRlc3RzOgorICAgICAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKKyAgICAgICAgICAgICAgICAjIHRlc3QgZGlzY292ZXJ5LgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShbXSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21haW5fcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0sIHNlbGYpCiAKLSAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0T3B0UGFyc2VyKCkKLSAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQotICAgICAgICBzZWxmLl9zZXRBdHRyaWJ1dGVzRnJvbU9wdGlvbnMob3B0aW9ucykKLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5tb2R1bGUgaXMgTm9uZToKLSAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKLSAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuIFRoaXMgbWVhbnMgLWMgLyAtYiAvIC12IC8gLWYgb3B0aW9ucyB3aWxsCi0gICAgICAgICAgICAjIGJlIGhhbmRsZWQgdHdpY2UsIHdoaWNoIGlzIGhhcm1sZXNzIGJ1dCBub3QgaWRlYWwuCi0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsxOl0pCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgotICAgICAgICAgICAgIyBjcmVhdGVUZXN0cyB3aWxsIGxvYWQgdGVzdHMgZnJvbSBzZWxmLm1vZHVsZQotICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBOb25lCi0gICAgICAgIGVsaWYgbGVuKGFyZ3MpID4gMDoKLSAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoYXJncykKKyAgICAgICAgaWYgc2VsZi50ZXN0czoKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoc2VsZi50ZXN0cykKICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgICAgICAgIyB0byBzdXBwb3J0IHB5dGhvbiAtbSB1bml0dGVzdCAuLi4KICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IE5vbmUKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6CisgICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCisgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuZGVmYXVsdFRlc3QsIHN0cik6CiAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IChzZWxmLmRlZmF1bHRUZXN0LCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gbGlzdChzZWxmLmRlZmF1bHRUZXN0KQogICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKIAogICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKQEAgLTE3NCw3NiArMTQ1LDg0IEBACiAgICAgICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYudGVzdE5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKIAotICAgIGRlZiBfZ2V0T3B0UGFyc2VyKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3B0cGFyc2UKLSAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBkZXN0PSd2ZXJib3NlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGRlc3Q9J3F1aWV0JywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUXVpZXQgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBkZWYgX2luaXRBcmdQYXJzZXJzKHNlbGYpOgorICAgICAgICBwYXJlbnRfcGFyc2VyID0gc2VsZi5fZ2V0UGFyZW50QXJnUGFyc2VyKCkKKyAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIgPSBzZWxmLl9nZXRNYWluQXJnUGFyc2VyKHBhcmVudF9wYXJzZXIpCisgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgPSBzZWxmLl9nZXREaXNjb3ZlcnlBcmdQYXJzZXIocGFyZW50X3BhcnNlcikKIAotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0ICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTdG9wIG9uIGZpcnN0IGZhaWwgb3IgZXJyb3InLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBpZiBzZWxmLmJ1ZmZlciAhPSBGYWxzZToKLSAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYicsICctLWJ1ZmZlcicsIGRlc3Q9J2J1ZmZlcicsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgZGVmIF9nZXRQYXJlbnRBcmdQYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2l0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgZGVzdD0ndmVyYm9zaXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnKQorCisgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicpCisgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNhdGNoJywgZGVzdD0nY2F0Y2hicmVhaycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicpCisgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWZmZXInLCBkZXN0PSdidWZmZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJykKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gRmFsc2UKKwogICAgICAgICByZXR1cm4gcGFyc2VyCiAKLSAgICBkZWYgX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhzZWxmLCBvcHRpb25zKToKLSAgICAgICAgIyBvbmx5IHNldCBvcHRpb25zIGZyb20gdGhlIHBhcnNpbmcgaGVyZQotICAgICAgICAjIGlmIHRoZXkgd2VyZW4ndCBzZXQgZXhwbGljaXRseSBpbiB0aGUgY29uc3RydWN0b3IKLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IG9wdGlvbnMuZmFpbGZhc3QKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBvcHRpb25zLmNhdGNoYnJlYWsKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gb3B0aW9ucy5idWZmZXIKKyAgICBkZWYgX2dldE1haW5BcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwID0gc2VsZi5fcHJpbnRfaGVscAogCi0gICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgotICAgICAgICBlbGlmIG9wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDAKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndGVzdHMnLCBuYXJncz0nKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYSBsaXN0IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzZXMgYW5kIHRlc3QgbWV0aG9kcy4nKQogCi0gICAgZGVmIF9hZGREaXNjb3ZlcnlPcHRpb25zKHNlbGYsIHBhcnNlcik6Ci0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywgZGVmYXVsdD0nLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KSIpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywgZGVmYXVsdD0ndGVzdCoucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdG9wLWxldmVsLWRpcmVjdG9yeScsIGRlc3Q9J3RvcCcsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0cyB0byBzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIF9nZXREaXNjb3ZlcnlBcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQorICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdGb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuJykKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgZm9yIGFyZyBpbiAoJ3N0YXJ0JywgJ3BhdHRlcm4nLCAndG9wJyk6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KGFyZywgbmFyZ3M9Jz8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgICAgIHJldHVybiBwYXJzZXIKIAogICAgIGRlZiBfZG9fZGlzY292ZXJ5KHNlbGYsIGFyZ3YsIExvYWRlcj1Ob25lKToKLSAgICAgICAgaWYgTG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBMb2FkZXIgPSBsYW1iZGE6IHNlbGYudGVzdExvYWRlcgorICAgICAgICBzZWxmLnN0YXJ0ID0gJy4nCisgICAgICAgIHNlbGYucGF0dGVybiA9ICd0ZXN0Ki5weScKKyAgICAgICAgc2VsZi50b3AgPSBOb25lCisgICAgICAgIGlmIGFyZ3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIGZvciB0ZXN0aW5nCisgICAgICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlci5wYXJzZV9hcmdzKGFyZ3YsIHNlbGYpCiAKLSAgICAgICAgIyBoYW5kbGUgY29tbWFuZCBsaW5lIGFyZ3MgZm9yIHRlc3QgZGlzY292ZXJ5Ci0gICAgICAgIHNlbGYucHJvZ05hbWUgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQotICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRPcHRQYXJzZXIoKQotICAgICAgICBzZWxmLl9hZGREaXNjb3ZlcnlPcHRpb25zKHBhcnNlcikKLQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMzoKLSAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KCkKLQotICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gemlwKCgnc3RhcnQnLCAncGF0dGVybicsICd0b3AnKSwgYXJncyk6Ci0gICAgICAgICAgICBzZXRhdHRyKG9wdGlvbnMsIG5hbWUsIHZhbHVlKQotCi0gICAgICAgIHNlbGYuX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIHN0YXJ0X2RpciA9IG9wdGlvbnMuc3RhcnQKLSAgICAgICAgcGF0dGVybiA9IG9wdGlvbnMucGF0dGVybgotICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3B0aW9ucy50b3AKLQotICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQotICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKQorICAgICAgICBsb2FkZXIgPSBzZWxmLnRlc3RMb2FkZXIgaWYgTG9hZGVyIGlzIE5vbmUgZWxzZSBMb2FkZXIoKQorICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc2VsZi5zdGFydCwgc2VsZi5wYXR0ZXJuLCBzZWxmLnRvcCkKIAogICAgIGRlZiBydW5UZXN0cyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21vY2sucHkgYi9MaWIvdW5pdHRlc3QvbW9jay5weQppbmRleCAwNzM4NjlhLi5kYzVjMDMzIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbW9jay5weQorKysgYi9MaWIvdW5pdHRlc3QvbW9jay5weQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBzeXMKLWZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzLCBwYXJ0aWFsCiAKIAogQmFzZUV4Y2VwdGlvbnMgPSAoQmFzZUV4Y2VwdGlvbiwpCkBAIC02Niw1NSArNjYsNDUgQEAKICkKIAogCi1kZWYgX2dldHNpZ25hdHVyZShmdW5jLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgaW5zdGFuY2U6CitkZWYgX2dldF9zaWduYXR1cmVfb2JqZWN0KGZ1bmMsIGFzX2luc3RhbmNlLCBlYXRfc2VsZik6CisgICAgIiIiCisgICAgR2l2ZW4gYW4gYXJiaXRyYXJ5LCBwb3NzaWJseSBjYWxsYWJsZSBvYmplY3QsIHRyeSB0byBjcmVhdGUgYSBzdWl0YWJsZQorICAgIHNpZ25hdHVyZSBvYmplY3QuCisgICAgUmV0dXJuIGEgKHJlZHVjZWQgZnVuYywgc2lnbmF0dXJlKSB0dXBsZSwgb3IgTm9uZS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgYXNfaW5zdGFuY2U6CisgICAgICAgICMgSWYgaXQncyBhIHR5cGUgYW5kIHNob3VsZCBiZSBtb2RlbGxlZCBhcyBhIHR5cGUsIHVzZSBfX2luaXRfXy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYyA9IGZ1bmMuX19pbml0X18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNraXBmaXJzdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgU2tpcCB0aGUgYHNlbGZgIGFyZ3VtZW50IGluIF9faW5pdF9fCisgICAgICAgIGVhdF9zZWxmID0gVHJ1ZQogICAgIGVsaWYgbm90IGlzaW5zdGFuY2UoZnVuYywgRnVuY3Rpb25UeXBlcyk6Ci0gICAgICAgICMgZm9yIGNsYXNzZXMgd2hlcmUgaW5zdGFuY2UgaXMgVHJ1ZSB3ZSBlbmQgdXAgaGVyZSB0b28KKyAgICAgICAgIyBJZiB3ZSByZWFsbHkgd2FudCB0byBtb2RlbCBhbiBpbnN0YW5jZSBvZiB0aGUgcGFzc2VkIHR5cGUsCisgICAgICAgICMgX19jYWxsX18gc2hvdWxkIGJlIGxvb2tlZCB1cCwgbm90IF9faW5pdF9fLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2NhbGxfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBlYXRfc2VsZjoKKyAgICAgICAgc2lnX2Z1bmMgPSBwYXJ0aWFsKGZ1bmMsIE5vbmUpCisgICAgZWxzZToKKyAgICAgICAgc2lnX2Z1bmMgPSBmdW5jCiAgICAgdHJ5OgotICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhmdW5jKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICMgQyBmdW5jdGlvbiAvIG1ldGhvZCwgcG9zc2libHkgaW5oZXJpdGVkIG9iamVjdCgpLl9faW5pdF9fCi0gICAgICAgIHJldHVybgotCi0gICAgcmVnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHksIGt3b25seWRlZiwgYW5uID0gYXJnc3BlYwotCi0KLSAgICAjIGluc3RhbmNlIG1ldGhvZHMgYW5kIGNsYXNzbWV0aG9kcyBuZWVkIHRvIGxvc2UgdGhlIHNlbGYgYXJndW1lbnQKLSAgICBpZiBnZXRhdHRyKGZ1bmMsICdfX3NlbGZfXycsIE5vbmUpIGlzIG5vdCBOb25lOgotICAgICAgICByZWdhcmdzID0gcmVnYXJnc1sxOl0KLSAgICBpZiBza2lwZmlyc3Q6Ci0gICAgICAgICMgdGhpcyBjb25kaXRpb24gYW5kIHRoZSBhYm92ZSBvbmUgYXJlIG5ldmVyIGJvdGggVHJ1ZSAtIHdoeT8KLSAgICAgICAgcmVnYXJncyA9IHJlZ2FyZ3NbMTpdCi0KLSAgICBzaWduYXR1cmUgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgIHJlZ2FyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywKLSAgICAgICAga3dvbmx5LCBrd29ubHlkZWYsIGFubiwgZm9ybWF0dmFsdWU9bGFtYmRhIHZhbHVlOiAiIikKLSAgICByZXR1cm4gc2lnbmF0dXJlWzE6LTFdLCBmdW5jCisgICAgICAgIHJldHVybiBmdW5jLCBpbnNwZWN0LnNpZ25hdHVyZShzaWdfZnVuYykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgIyBDZXJ0YWluIGNhbGxhYmxlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGluc3BlY3Quc2lnbmF0dXJlKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBkZWYgX2NoZWNrX3NpZ25hdHVyZShmdW5jLCBtb2NrLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBub3QgX2NhbGxhYmxlKGZ1bmMpOgorICAgIHNpZyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChmdW5jLCBpbnN0YW5jZSwgc2tpcGZpcnN0KQorICAgIGlmIHNpZyBpcyBOb25lOgogICAgICAgICByZXR1cm4KLQotICAgIHJlc3VsdCA9IF9nZXRzaWduYXR1cmUoZnVuYywgc2tpcGZpcnN0LCBpbnN0YW5jZSkKLSAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc2lnbmF0dXJlLCBmdW5jID0gcmVzdWx0Ci0KLSAgICAjIGNhbid0IHVzZSBzZWxmIGJlY2F1c2UgInNlbGYiIGlzIGNvbW1vbiBhcyBhbiBhcmd1bWVudCBuYW1lCi0gICAgIyB1bmZvcnR1bmF0ZWx5IGV2ZW4gbm90IGluIHRoZSBmaXJzdCBwbGFjZQotICAgIHNyYyA9ICJsYW1iZGEgX21vY2tfc2VsZiwgJXM6IE5vbmUiICUgc2lnbmF0dXJlCi0gICAgY2hlY2tzaWcgPSBldmFsKHNyYywge30pCisgICAgZnVuYywgc2lnID0gc2lnCisgICAgZGVmIGNoZWNrc2lnKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKICAgICBfY29weV9mdW5jX2RldGFpbHMoZnVuYywgY2hlY2tzaWcpCiAgICAgdHlwZShtb2NrKS5fbW9ja19jaGVja19zaWcgPSBjaGVja3NpZwogCkBAIC0xNjYsMTUgKzE1NiwxMiBAQAogICAgICAgICByZXR1cm4KIAogICAgIHNraXBmaXJzdCA9IGlzaW5zdGFuY2Uob3JpZ2luYWwsIHR5cGUpCi0gICAgcmVzdWx0ID0gX2dldHNpZ25hdHVyZShvcmlnaW5hbCwgc2tpcGZpcnN0LCBpbnN0YW5jZSkKKyAgICByZXN1bHQgPSBfZ2V0X3NpZ25hdHVyZV9vYmplY3Qob3JpZ2luYWwsIGluc3RhbmNlLCBza2lwZmlyc3QpCiAgICAgaWYgcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICMgd2FzIGEgQyBmdW5jdGlvbiAoZS5nLiBvYmplY3QoKS5fX2luaXRfXyApIHRoYXQgY2FuJ3QgYmUgbW9ja2VkCiAgICAgICAgIHJldHVybgotCi0gICAgc2lnbmF0dXJlLCBmdW5jID0gcmVzdWx0Ci0KLSAgICBzcmMgPSAibGFtYmRhICVzOiBOb25lIiAlIHNpZ25hdHVyZQotICAgIGNoZWNrc2lnID0gZXZhbChzcmMsIHt9KQorICAgIGZ1bmMsIHNpZyA9IHJlc3VsdAorICAgIGRlZiBjaGVja3NpZygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzaWcuYmluZCgqYXJncywgKiprd2FyZ3MpCiAgICAgX2NvcHlfZnVuY19kZXRhaWxzKGZ1bmMsIGNoZWNrc2lnKQogCiAgICAgbmFtZSA9IG9yaWdpbmFsLl9fbmFtZV9fCkBAIC0zNjgsNyArMzU1LDcgQEAKICAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgICBzZWxmLCBzcGVjPU5vbmUsIHdyYXBzPU5vbmUsIG5hbWU9Tm9uZSwgc3BlY19zZXQ9Tm9uZSwKICAgICAgICAgICAgIHBhcmVudD1Ob25lLCBfc3BlY19zdGF0ZT1Ob25lLCBfbmV3X25hbWU9JycsIF9uZXdfcGFyZW50PU5vbmUsCi0gICAgICAgICAgICAqKmt3YXJncworICAgICAgICAgICAgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsIF9lYXRfc2VsZj1Ob25lLCAqKmt3YXJncwogICAgICAgICApOgogICAgICAgICBpZiBfbmV3X3BhcmVudCBpcyBOb25lOgogICAgICAgICAgICAgX25ld19wYXJlbnQgPSBwYXJlbnQKQEAgLTM4Miw4ICszNjksMTAgQEAKICAgICAgICAgaWYgc3BlY19zZXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzcGVjID0gc3BlY19zZXQKICAgICAgICAgICAgIHNwZWNfc2V0ID0gVHJ1ZQorICAgICAgICBpZiBfZWF0X3NlbGYgaXMgTm9uZToKKyAgICAgICAgICAgIF9lYXRfc2VsZiA9IHBhcmVudCBpcyBub3QgTm9uZQogCi0gICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQpCisgICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQsIF9zcGVjX2FzX2luc3RhbmNlLCBfZWF0X3NlbGYpCiAKICAgICAgICAgX19kaWN0X19bJ19tb2NrX2NoaWxkcmVuJ10gPSB7fQogICAgICAgICBfX2RpY3RfX1snX21vY2tfd3JhcHMnXSA9IHdyYXBzCkBAIC00MjgsMjAgKzQxNywyNiBAQAogICAgICAgICBzZWxmLl9tb2NrX2FkZF9zcGVjKHNwZWMsIHNwZWNfc2V0KQogCiAKLSAgICBkZWYgX21vY2tfYWRkX3NwZWMoc2VsZiwgc3BlYywgc3BlY19zZXQpOgorICAgIGRlZiBfbW9ja19hZGRfc3BlYyhzZWxmLCBzcGVjLCBzcGVjX3NldCwgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgIF9lYXRfc2VsZj1GYWxzZSk6CiAgICAgICAgIF9zcGVjX2NsYXNzID0gTm9uZQorICAgICAgICBfc3BlY19zaWduYXR1cmUgPSBOb25lCiAKICAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZSBhbmQgbm90IF9pc19saXN0KHNwZWMpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzcGVjLCB0eXBlKToKICAgICAgICAgICAgICAgICBfc3BlY19jbGFzcyA9IHNwZWMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgX3NwZWNfY2xhc3MgPSBfZ2V0X2NsYXNzKHNwZWMpCisgICAgICAgICAgICByZXMgPSBfZ2V0X3NpZ25hdHVyZV9vYmplY3Qoc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3BlY19hc19pbnN0YW5jZSwgX2VhdF9zZWxmKQorICAgICAgICAgICAgX3NwZWNfc2lnbmF0dXJlID0gcmVzIGFuZCByZXNbMV0KIAogICAgICAgICAgICAgc3BlYyA9IGRpcihzcGVjKQogCiAgICAgICAgIF9fZGljdF9fID0gc2VsZi5fX2RpY3RfXwogICAgICAgICBfX2RpY3RfX1snX3NwZWNfY2xhc3MnXSA9IF9zcGVjX2NsYXNzCiAgICAgICAgIF9fZGljdF9fWydfc3BlY19zZXQnXSA9IHNwZWNfc2V0CisgICAgICAgIF9fZGljdF9fWydfc3BlY19zaWduYXR1cmUnXSA9IF9zcGVjX3NpZ25hdHVyZQogICAgICAgICBfX2RpY3RfX1snX21vY2tfbWV0aG9kcyddID0gc3BlYwogCiAKQEAgLTY5NSw3ICs2OTAsNiBAQAogICAgICAgICBzZWxmLl9tb2NrX2NoaWxkcmVuW25hbWVdID0gX2RlbGV0ZWQKIAogCi0KICAgICBkZWYgX2Zvcm1hdF9tb2NrX2NhbGxfc2lnbmF0dXJlKHNlbGYsIGFyZ3MsIGt3YXJncyk6CiAgICAgICAgIG5hbWUgPSBzZWxmLl9tb2NrX25hbWUgb3IgJ21vY2snCiAgICAgICAgIHJldHVybiBfZm9ybWF0X2NhbGxfc2lnbmF0dXJlKG5hbWUsIGFyZ3MsIGt3YXJncykKQEAgLTcxMSw2ICs3MDUsMjggQEAKICAgICAgICAgcmV0dXJuIG1lc3NhZ2UgJSAoZXhwZWN0ZWRfc3RyaW5nLCBhY3R1YWxfc3RyaW5nKQogCiAKKyAgICBkZWYgX2NhbGxfbWF0Y2hlcihzZWxmLCBfY2FsbCk6CisgICAgICAgICIiIgorICAgICAgICBHaXZlbiBhIGNhbGwgKG9yIHNpbXBseSBhIChhcmdzLCBrd2FyZ3MpIHR1cGxlKSwgcmV0dXJuIGEKKyAgICAgICAgY29tcGFyaXNvbiBrZXkgc3VpdGFibGUgZm9yIG1hdGNoaW5nIHdpdGggb3RoZXIgY2FsbHMuCisgICAgICAgIFRoaXMgaXMgYSBiZXN0IGVmZm9ydCBtZXRob2Qgd2hpY2ggcmVsaWVzIG9uIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlLAorICAgICAgICBpZiBhdmFpbGFibGUsIG9yIGZhbGxzIGJhY2sgb24gdGhlIGFyZ3VtZW50cyB0aGVtc2VsdmVzLgorICAgICAgICAiIiIKKyAgICAgICAgc2lnID0gc2VsZi5fc3BlY19zaWduYXR1cmUKKyAgICAgICAgaWYgc2lnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbGVuKF9jYWxsKSA9PSAyOgorICAgICAgICAgICAgICAgIG5hbWUgPSAnJworICAgICAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IF9jYWxsCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWUsIGFyZ3MsIGt3YXJncyA9IF9jYWxsCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUsIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZS53aXRoX3RyYWNlYmFjayhOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIF9jYWxsCisKKwogICAgIGRlZiBhc3NlcnRfY2FsbGVkX3dpdGgoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiYXNzZXJ0IHRoYXQgdGhlIG1vY2sgd2FzIGNhbGxlZCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLgogCkBAIC03MjEsOSArNzM3LDE0IEBACiAgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2Zvcm1hdF9tb2NrX2NhbGxfc2lnbmF0dXJlKGFyZ3MsIGt3YXJncykKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdFeHBlY3RlZCBjYWxsOiAlc1xuTm90IGNhbGxlZCcgJSAoZXhwZWN0ZWQsKSkKIAotICAgICAgICBpZiBzZWxmLmNhbGxfYXJncyAhPSAoYXJncywga3dhcmdzKToKKyAgICAgICAgZGVmIF9lcnJvcl9tZXNzYWdlKCk6CiAgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRfbW9ja19mYWlsdXJlX21lc3NhZ2UoYXJncywga3dhcmdzKQotICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IobXNnKQorICAgICAgICAgICAgcmV0dXJuIG1zZworICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2NhbGxfbWF0Y2hlcigoYXJncywga3dhcmdzKSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5fY2FsbF9tYXRjaGVyKHNlbGYuY2FsbF9hcmdzKQorICAgICAgICBpZiBleHBlY3RlZCAhPSBhY3R1YWw6CisgICAgICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihfZXJyb3JfbWVzc2FnZSgpKSBmcm9tIGNhdXNlCiAKIAogICAgIGRlZiBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChfbW9ja19zZWxmLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNzQ3LDE4ICs3NjgsMjEgQEAKIAogICAgICAgICBJZiBgYW55X29yZGVyYCBpcyBUcnVlIHRoZW4gdGhlIGNhbGxzIGNhbiBiZSBpbiBhbnkgb3JkZXIsIGJ1dAogICAgICAgICB0aGV5IG11c3QgYWxsIGFwcGVhciBpbiBgbW9ja19jYWxsc2AuIiIiCisgICAgICAgIGV4cGVjdGVkID0gW3NlbGYuX2NhbGxfbWF0Y2hlcihjKSBmb3IgYyBpbiBjYWxsc10KKyAgICAgICAgY2F1c2UgPSBleHBlY3RlZCBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBFeGNlcHRpb24pIGVsc2UgTm9uZQorICAgICAgICBhbGxfY2FsbHMgPSBfQ2FsbExpc3Qoc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIHNlbGYubW9ja19jYWxscykKICAgICAgICAgaWYgbm90IGFueV9vcmRlcjoKLSAgICAgICAgICAgIGlmIGNhbGxzIG5vdCBpbiBzZWxmLm1vY2tfY2FsbHM6CisgICAgICAgICAgICBpZiBleHBlY3RlZCBub3QgaW4gYWxsX2NhbGxzOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAnQ2FsbHMgbm90IGZvdW5kLlxuRXhwZWN0ZWQ6ICVyXG4nCiAgICAgICAgICAgICAgICAgICAgICdBY3R1YWw6ICVyJyAlIChjYWxscywgc2VsZi5tb2NrX2NhbGxzKQotICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApIGZyb20gY2F1c2UKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGFsbF9jYWxscyA9IGxpc3Qoc2VsZi5tb2NrX2NhbGxzKQorICAgICAgICBhbGxfY2FsbHMgPSBsaXN0KGFsbF9jYWxscykKIAogICAgICAgICBub3RfZm91bmQgPSBbXQotICAgICAgICBmb3Iga2FsbCBpbiBjYWxsczoKKyAgICAgICAgZm9yIGthbGwgaW4gZXhwZWN0ZWQ6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYWxsX2NhbGxzLnJlbW92ZShrYWxsKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CkBAIC03NjYsNyArNzkwLDcgQEAKICAgICAgICAgaWYgbm90X2ZvdW5kOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgJyVyIG5vdCBhbGwgZm91bmQgaW4gY2FsbCBsaXN0JyAlICh0dXBsZShub3RfZm91bmQpLCkKLSAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgYXNzZXJ0X2FueV9jYWxsKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CkBAIC03NzUsMTIgKzc5OSwxNCBAQAogICAgICAgICBUaGUgYXNzZXJ0IHBhc3NlcyBpZiB0aGUgbW9jayBoYXMgKmV2ZXIqIGJlZW4gY2FsbGVkLCB1bmxpa2UKICAgICAgICAgYGFzc2VydF9jYWxsZWRfd2l0aGAgYW5kIGBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aGAgdGhhdCBvbmx5IHBhc3MgaWYKICAgICAgICAgdGhlIGNhbGwgaXMgdGhlIG1vc3QgcmVjZW50IG9uZS4iIiIKLSAgICAgICAga2FsbCA9IGNhbGwoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBpZiBrYWxsIG5vdCBpbiBzZWxmLmNhbGxfYXJnc19saXN0OgorICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2NhbGxfbWF0Y2hlcigoYXJncywga3dhcmdzKSkKKyAgICAgICAgYWN0dWFsID0gW3NlbGYuX2NhbGxfbWF0Y2hlcihjKSBmb3IgYyBpbiBzZWxmLmNhbGxfYXJnc19saXN0XQorICAgICAgICBpZiBleHBlY3RlZCBub3QgaW4gYWN0dWFsOgorICAgICAgICAgICAgY2F1c2UgPSBleHBlY3RlZCBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBFeGNlcHRpb24pIGVsc2UgTm9uZQogICAgICAgICAgICAgZXhwZWN0ZWRfc3RyaW5nID0gc2VsZi5fZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoYXJncywga3dhcmdzKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgJyVzIGNhbGwgbm90IGZvdW5kJyAlIGV4cGVjdGVkX3N0cmluZwotICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAKIAogICAgIGRlZiBfZ2V0X2NoaWxkX21vY2soc2VsZiwgKiprdyk6CkBAIC04NTAsMTEgKzg3NiwxMiBAQAogICAgICAgICBzZWxmID0gX21vY2tfc2VsZgogICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKICAgICAgICAgc2VsZi5jYWxsX2NvdW50ICs9IDEKLSAgICAgICAgc2VsZi5jYWxsX2FyZ3MgPSBfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpCi0gICAgICAgIHNlbGYuY2FsbF9hcmdzX2xpc3QuYXBwZW5kKF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkpCi0KICAgICAgICAgX25ld19uYW1lID0gc2VsZi5fbW9ja19uZXdfbmFtZQogICAgICAgICBfbmV3X3BhcmVudCA9IHNlbGYuX21vY2tfbmV3X3BhcmVudAorCisgICAgICAgIF9jYWxsID0gX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKQorICAgICAgICBzZWxmLmNhbGxfYXJncyA9IF9jYWxsCisgICAgICAgIHNlbGYuY2FsbF9hcmdzX2xpc3QuYXBwZW5kKF9jYWxsKQogICAgICAgICBzZWxmLm1vY2tfY2FsbHMuYXBwZW5kKF9DYWxsKCgnJywgYXJncywga3dhcmdzKSkpCiAKICAgICAgICAgc2VlbiA9IHNldCgpCkBAIC05MDksOCArOTM2LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICAgICAgICAgIHJldF92YWwgPSBlZmZlY3QoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgaWYgcmV0X3ZhbCBpcyBERUZBVUxUOgotICAgICAgICAgICAgICAgIHJldF92YWwgPSBzZWxmLnJldHVybl92YWx1ZQogCiAgICAgICAgIGlmIChzZWxmLl9tb2NrX3dyYXBzIGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgIHNlbGYuX21vY2tfcmV0dXJuX3ZhbHVlIGlzIERFRkFVTFQpOgpAQCAtMjAzMCw2ICsyMDU1LDggQEAKICAgICBlbGlmIHNwZWMgaXMgTm9uZToKICAgICAgICAgIyBOb25lIHdlIG1vY2sgd2l0aCBhIG5vcm1hbCBtb2NrIHdpdGhvdXQgYSBzcGVjCiAgICAgICAgIF9rd2FyZ3MgPSB7fQorICAgIGlmIF9rd2FyZ3MgYW5kIGluc3RhbmNlOgorICAgICAgICBfa3dhcmdzWydfc3BlY19hc19pbnN0YW5jZSddID0gVHJ1ZQogCiAgICAgX2t3YXJncy51cGRhdGUoa3dhcmdzKQogCkBAIC0yMDk2LDEwICsyMTIzLDEyIEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIEZ1bmN0aW9uVHlwZXMpOgogICAgICAgICAgICAgICAgIHBhcmVudCA9IG1vY2subW9jawogCi0gICAgICAgICAgICBuZXcgPSBNYWdpY01vY2socGFyZW50PXBhcmVudCwgbmFtZT1lbnRyeSwgX25ld19uYW1lPWVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXdfcGFyZW50PXBhcmVudCwgKiprd2FyZ3MpCi0gICAgICAgICAgICBtb2NrLl9tb2NrX2NoaWxkcmVuW2VudHJ5XSA9IG5ldwogICAgICAgICAgICAgc2tpcGZpcnN0ID0gX211c3Rfc2tpcChzcGVjLCBlbnRyeSwgaXNfdHlwZSkKKyAgICAgICAgICAgIGt3YXJnc1snX2VhdF9zZWxmJ10gPSBza2lwZmlyc3QKKyAgICAgICAgICAgIG5ldyA9IE1hZ2ljTW9jayhwYXJlbnQ9cGFyZW50LCBuYW1lPWVudHJ5LCBfbmV3X25hbWU9ZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ld19wYXJlbnQ9cGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgICAgICAgICAgbW9jay5fbW9ja19jaGlsZHJlbltlbnRyeV0gPSBuZXcKICAgICAgICAgICAgIF9jaGVja19zaWduYXR1cmUob3JpZ2luYWwsIG5ldywgc2tpcGZpcnN0PXNraXBmaXJzdCkKIAogICAgICAgICAjIHNvIGZ1bmN0aW9ucyBjcmVhdGVkIHdpdGggX3NldF9zaWduYXR1cmUgYmVjb21lIGluc3RhbmNlIGF0dHJpYnV0ZXMsCkBAIC0yMTEzLDYgKzIxNDIsMTAgQEAKIAogCiBkZWYgX211c3Rfc2tpcChzcGVjLCBlbnRyeSwgaXNfdHlwZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHdoZXRoZXIgd2Ugc2hvdWxkIHNraXAgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHNwZWMncyBgZW50cnlgCisgICAgYXR0cmlidXRlLgorICAgICIiIgogICAgIGlmIG5vdCBpc2luc3RhbmNlKHNwZWMsIHR5cGUpOgogICAgICAgICBpZiBlbnRyeSBpbiBnZXRhdHRyKHNwZWMsICdfX2RpY3RfXycsIHt9KToKICAgICAgICAgICAgICMgaW5zdGFuY2UgYXR0cmlidXRlIC0gc2hvdWxkbid0IHNraXAKQEAgLTIxMjUsNyArMjE1OCwxMiBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIChzdGF0aWNtZXRob2QsIGNsYXNzbWV0aG9kKSk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIGlzX3R5cGUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGdldGF0dHIocmVzdWx0LCAnX19nZXRfXycsIE5vbmUpLCBNZXRob2RXcmFwcGVyVHlwZXMpOgorICAgICAgICAgICAgIyBOb3JtYWwgbWV0aG9kID0+IHNraXAgaWYgbG9va2VkIHVwIG9uIHR5cGUKKyAgICAgICAgICAgICMgKGlmIGxvb2tlZCB1cCBvbiBpbnN0YW5jZSwgc2VsZiBpcyBhbHJlYWR5IHNraXBwZWQpCisgICAgICAgICAgICByZXR1cm4gaXNfdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAjIHNob3VsZG4ndCBnZXQgaGVyZSB1bmxlc3MgZnVuY3Rpb24gaXMgYSBkeW5hbWljYWxseSBwcm92aWRlZCBhdHRyaWJ1dGUKICAgICAjIFhYWFggdW50ZXN0ZWQgYmVoYXZpb3VyCkBAIC0yMTU5LDkgKzIxOTcsMzEgQEAKICAgICB0eXBlKEFOWS5fX2VxX18pLAogKQogCitNZXRob2RXcmFwcGVyVHlwZXMgPSAoCisgICAgdHlwZShBTlkuX19lcV9fLl9fZ2V0X18pLAorKQorCiAKIGZpbGVfc3BlYyA9IE5vbmUKIAorZGVmIF9pdGVyYXRlX3JlYWRfZGF0YShyZWFkX2RhdGEpOgorICAgICMgSGVscGVyIGZvciBtb2NrX29wZW46CisgICAgIyBSZXRyaWV2ZSBsaW5lcyBmcm9tIHJlYWRfZGF0YSB2aWEgYSBnZW5lcmF0b3Igc28gdGhhdCBzZXBhcmF0ZSBjYWxscyB0bworICAgICMgcmVhZGxpbmUsIHJlYWQsIGFuZCByZWFkbGluZXMgYXJlIHByb3Blcmx5IGludGVybGVhdmVkCisgICAgZGF0YV9hc19saXN0ID0gWyd7fVxuJy5mb3JtYXQobCkgZm9yIGwgaW4gcmVhZF9kYXRhLnNwbGl0KCdcbicpXQorCisgICAgaWYgZGF0YV9hc19saXN0Wy0xXSA9PSAnXG4nOgorICAgICAgICAjIElmIHRoZSBsYXN0IGxpbmUgZW5kZWQgaW4gYSBuZXdsaW5lLCB0aGUgbGlzdCBjb21wcmVoZW5zaW9uIHdpbGwgaGF2ZSBhbgorICAgICAgICAjIGV4dHJhIGVudHJ5IHRoYXQncyBqdXN0IGEgbmV3bGluZS4gIFJlbW92ZSB0aGlzLgorICAgICAgICBkYXRhX2FzX2xpc3QgPSBkYXRhX2FzX2xpc3RbOi0xXQorICAgIGVsc2U6CisgICAgICAgICMgSWYgdGhlcmUgd2Fzbid0IGFuIGV4dHJhIG5ld2xpbmUgYnkgaXRzZWxmLCB0aGVuIHRoZSBmaWxlIGJlaW5nCisgICAgICAgICMgZW11bGF0ZWQgZG9lc24ndCBoYXZlIGEgbmV3bGluZSB0byBlbmQgdGhlIGxhc3QgbGluZSAgcmVtb3ZlIHRoZQorICAgICAgICAjIG5ld2xpbmUgdGhhdCBvdXIgbmFpdmUgZm9ybWF0KCkgYWRkZWQKKyAgICAgICAgZGF0YV9hc19saXN0Wy0xXSA9IGRhdGFfYXNfbGlzdFstMV1bOi0xXQorCisgICAgZm9yIGxpbmUgaW4gZGF0YV9hc19saXN0OgorICAgICAgICB5aWVsZCBsaW5lCiAKIGRlZiBtb2NrX29wZW4obW9jaz1Ob25lLCByZWFkX2RhdGE9JycpOgogICAgICIiIgpAQCAtMjE3Miw5ICsyMjMyLDI3IEBACiAgICAgZGVmYXVsdCkgdGhlbiBhIGBNYWdpY01vY2tgIHdpbGwgYmUgY3JlYXRlZCBmb3IgeW91LCB3aXRoIHRoZSBBUEkgbGltaXRlZAogICAgIHRvIG1ldGhvZHMgb3IgYXR0cmlidXRlcyBhdmFpbGFibGUgb24gc3RhbmRhcmQgZmlsZSBoYW5kbGVzLgogCi0gICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSBgcmVhZGAgbWV0aG9kIG9mIHRoZSBmaWxlIGhhbmRsZSB0byByZXR1cm4uCi0gICAgVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KKyAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGByZWFkYCBtZXRob2RkbGluZWAsIGFuZCBgcmVhZGxpbmVzYCBvZiB0aGUKKyAgICBmaWxlIGhhbmRsZSB0byByZXR1cm4uICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgogICAgICIiIgorICAgIGRlZiBfcmVhZGxpbmVzX3NpZGVfZWZmZWN0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlCisgICAgICAgIHJldHVybiBsaXN0KF9kYXRhKQorCisgICAgZGVmIF9yZWFkX3NpZGVfZWZmZWN0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oX2RhdGEpCisKKyAgICBkZWYgX3JlYWRsaW5lX3NpZGVfZWZmZWN0KCk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHlpZWxkIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUKKyAgICAgICAgZm9yIGxpbmUgaW4gX2RhdGE6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKwogICAgIGdsb2JhbCBmaWxlX3NwZWMKICAgICBpZiBmaWxlX3NwZWMgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IF9pbwpAQCAtMjE4NCw5ICsyMjYyLDE4IEBACiAgICAgICAgIG1vY2sgPSBNYWdpY01vY2sobmFtZT0nb3BlbicsIHNwZWM9b3BlbikKIAogICAgIGhhbmRsZSA9IE1hZ2ljTW9jayhzcGVjPWZpbGVfc3BlYykKLSAgICBoYW5kbGUud3JpdGUucmV0dXJuX3ZhbHVlID0gTm9uZQogICAgIGhhbmRsZS5fX2VudGVyX18ucmV0dXJuX3ZhbHVlID0gaGFuZGxlCi0gICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gcmVhZF9kYXRhCisKKyAgICBfZGF0YSA9IF9pdGVyYXRlX3JlYWRfZGF0YShyZWFkX2RhdGEpCisKKyAgICBoYW5kbGUud3JpdGUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlID0gTm9uZQorCisgICAgaGFuZGxlLnJlYWQuc2lkZV9lZmZlY3QgPSBfcmVhZF9zaWRlX2VmZmVjdAorICAgIGhhbmRsZS5yZWFkbGluZS5zaWRlX2VmZmVjdCA9IF9yZWFkbGluZV9zaWRlX2VmZmVjdCgpCisgICAgaGFuZGxlLnJlYWRsaW5lcy5zaWRlX2VmZmVjdCA9IF9yZWFkbGluZXNfc2lkZV9lZmZlY3QKIAogICAgIG1vY2sucmV0dXJuX3ZhbHVlID0gaGFuZGxlCiAgICAgcmV0dXJuIG1vY2sKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CmluZGV4IDk3ZTU0MjYuLmYzZjRiNjcgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9yZXN1bHQucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQpAQCAtMTIxLDYgKzEyMSwyMiBAQAogICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQogICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCiAKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmLCB0ZXN0LCBzdWJ0ZXN0LCBlcnIpOgorICAgICAgICAiIiJDYWxsZWQgYXQgdGhlIGVuZCBvZiBhIHN1YnRlc3QuCisgICAgICAgICdlcnInIGlzIE5vbmUgaWYgdGhlIHN1YnRlc3QgZW5kZWQgc3VjY2Vzc2Z1bGx5LCBvdGhlcndpc2UgaXQncyBhCisgICAgICAgIHR1cGxlIG9mIHZhbHVlcyBhcyByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4KKyAgICAgICAgIiIiCisgICAgICAgICMgQnkgZGVmYXVsdCwgd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBzdWNjZXNzZnVsIHN1YnRlc3RzLCBidXQKKyAgICAgICAgIyBtb3JlIHNvcGhpc3RpY2F0ZWQgdGVzdCByZXN1bHRzIG1pZ2h0IHdhbnQgdG8gcmVjb3JkIHRoZW0uCisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoZXJyWzBdLCB0ZXN0LmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIGVycm9ycyA9IHNlbGYuZmFpbHVyZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyb3JzID0gc2VsZi5lcnJvcnMKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHN1YnRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKKyAgICAgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKKwogICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgogICAgICAgICAiQ2FsbGVkIHdoZW4gYSB0ZXN0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgogICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3Qvc3VpdGUucHkgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKaW5kZXggY2RlNWQzOC4uY2E4Mjc2NSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CisrKyBiL0xpYi91bml0dGVzdC9zdWl0ZS5weQpAQCAtMTYsNiArMTYsOCBAQAogY2xhc3MgQmFzZVRlc3RTdWl0ZShvYmplY3QpOgogICAgICIiIkEgc2ltcGxlIHRlc3Qgc3VpdGUgdGhhdCBkb2Vzbid0IHByb3ZpZGUgY2xhc3Mgb3IgbW9kdWxlIHNoYXJlZCBmaXh0dXJlcy4KICAgICAiIiIKKyAgICBfY2xlYW51cCA9IFRydWUKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cz0oKSk6CiAgICAgICAgIHNlbGYuX3Rlc3RzID0gW10KICAgICAgICAgc2VsZi5hZGRUZXN0cyh0ZXN0cykKQEAgLTU3LDEyICs1OSwyMiBAQAogICAgICAgICAgICAgc2VsZi5hZGRUZXN0KHRlc3QpCiAKICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgIGZvciBpbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZik6CiAgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgICAgICBpZiBzZWxmLl9jbGVhbnVwOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZVRlc3RBdEluZGV4KGluZGV4KQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBkZWYgX3JlbW92ZVRlc3RBdEluZGV4KHNlbGYsIGluZGV4KToKKyAgICAgICAgIiIiU3RvcCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBUZXN0Q2FzZSBhdCBpbmRleC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fdGVzdHNbaW5kZXhdID0gTm9uZQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBzdXBwb3J0IGZvciBzdWl0ZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIG92ZXJyaWRlbiBzZWxmLl90ZXN0CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQogCkBAIC04Nyw3ICs5OSw3IEBACiAgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCAnX3Rlc3RSdW5FbnRlcmVkJywgRmFsc2UpIGlzIEZhbHNlOgogICAgICAgICAgICAgcmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCA9IHRvcExldmVsID0gVHJ1ZQogCi0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgIGZvciBpbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZik6CiAgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKICAgICAgICAgICAgICAgICBicmVhawogCkBAIC0xMDYsNiArMTE4LDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGVzdC5kZWJ1ZygpCiAKKyAgICAgICAgICAgIGlmIHNlbGYuX2NsZWFudXA6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlVGVzdEF0SW5kZXgoaW5kZXgpCisKICAgICAgICAgaWYgdG9wTGV2ZWw6CiAgICAgICAgICAgICBzZWxmLl90ZWFyRG93blByZXZpb3VzQ2xhc3MoTm9uZSwgcmVzdWx0KQogICAgICAgICAgICAgc2VsZi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQwNTkxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIHBhdHRlcm4gPSBwYXR0ZXJuIG9yICJ0ZXN0XyoucHkiCisgICAgIyBXZSBhcmUgaW5zaWRlIHVuaXR0ZXN0LnRlc3QsIHNvIHRoZSB0b3AtbGV2ZWwgaXMgdHdvIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh0aGlzX2RpcikpCisgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXI9dG9wX2xldmVsX2RpcikKKyAgICBzdGFuZGFyZF90ZXN0cy5hZGRUZXN0cyhwYWNrYWdlX3Rlc3RzKQorICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQppbmRleCBkYmU0ZGRjLi4wMmU4ZjNhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlcyBhbmQgJXM6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQogCiAKLWNsYXNzIExvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CitjbGFzcyBfQmFzZUxvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cyA9IGxvZwogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdFJ1bigpCisgICAgICAgIHN1cGVyKCkuc3RhcnRUZXN0UnVuKCkKIAogICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RvcFRlc3QnKQpAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0UnVuKCkKKyAgICAgICAgc3VwZXIoKS5zdG9wVGVzdFJ1bigpCiAKICAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEZhaWx1cmUnKQpAQCAtNjgsNyArNjgsNyBAQAogCiAgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU3VjY2VzcygqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWNjZXNzKCphcmdzKQogCiAgICAgZGVmIGFkZEVycm9yKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXJyb3InKQpAQCAtNzYsMTUgKzc2LDM5IEBACiAKICAgICBkZWYgYWRkU2tpcChzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFNraXAnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTa2lwKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFNraXAoKmFyZ3MpCiAKICAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXhwZWN0ZWRGYWlsdXJlJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKIAogICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisKKworY2xhc3MgTGVnYWN5TG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgbGVnYWN5IFRlc3RSZXN1bHQgaW1wbGVtZW50YXRpb24sIHdpdGhvdXQgYW4gYWRkU3ViVGVzdCBtZXRob2QsCisgICAgd2hpY2ggcmVjb3JkcyBpdHMgbWV0aG9kIGNhbGxzLgorICAgICIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKworY2xhc3MgTG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgVGVzdFJlc3VsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCByZWNvcmRzIGl0cyBtZXRob2QgY2FsbHMuCisgICAgIiIiCisKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmLCB0ZXN0LCBzdWJ0ZXN0LCBlcnIpOgorICAgICAgICBpZiBlcnIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RTdWNjZXNzJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RGYWlsdXJlJykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIGVycikKIAogCiBjbGFzcyBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CmluZGV4IDc5MzFjYWQuLmFmMDhkNWEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKQEAgLTM2MSwzICszNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeInJlZ2V4IiBkb2VzIG5vdCBtYXRjaCAiZm9vIiQnLCAnXm9vcHMkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIgOiBvb3BzJCddKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQppbmRleCA3NTUzMmY0Li4wYmYxYTIyIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKQEAgLTI4MiwzICsyODIsNyBAQAogICAgICJpZiB0aHJlYWRzIGhhdmUgYmVlbiB1c2VkIikKIGNsYXNzIFRlc3RCcmVha1NpZ25hbERlZmF1bHQoVGVzdEJyZWFrKToKICAgICBpbnRfaGFuZGxlciA9IHNpZ25hbC5TSUdfREZMCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQppbmRleCBiOGNiMGM3Li40YjkzMTc5IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CkBAIC0xLDggKzEsMTAgQEAKK2ltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHBwcmludAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IGluc3BlY3QKQEAgLTEzLDkgKzE1LDE1IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSAuc3VwcG9ydCBpbXBvcnQgKAotICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsCisgICAgVGVzdEVxdWFsaXR5LCBUZXN0SGFzaGluZywgTG9nZ2luZ1Jlc3VsdCwgTGVnYWN5TG9nZ2luZ1Jlc3VsdCwKICAgICBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgogKQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZGVycgorCisKK2xvZ19mb28gPSBsb2dnaW5nLmdldExvZ2dlcignZm9vJykKK2xvZ19mb29iYXIgPSBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpCitsb2dfcXV1eCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdxdXV4JykKIAogCiBjbGFzcyBUZXN0KG9iamVjdCk6CkBAIC0yOTcsNiArMzA1LDk4IEBACiAKICAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKIAorICAgIGRlZiBfY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMoc2VsZiwgcmVzdWx0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIFsxLCAyLCAzXToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gWzIsIDNdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGo9aik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgKiBqID09IDY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCisgICAgICAgICAgICAgICAgMSAvIDAKKworICAgICAgICAjIE9yZGVyIGlzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICMgaT0xID0+IHN1YnRlc3QgZmFpbHVyZQorICAgICAgICAjIGk9Miwgaj0yID0+IHN1YnRlc3Qgc3VjY2VzcworICAgICAgICAjIGk9Miwgaj0zID0+IHN1YnRlc3QgZXJyb3IKKyAgICAgICAgIyBpPTMsIGo9MiA9PiBzdWJ0ZXN0IGVycm9yCisgICAgICAgICMgaT0zLCBqPTMgPT4gc3VidGVzdCBzdWNjZXNzCisgICAgICAgICMgdG9wbGV2ZWwgPT4gZXJyb3IKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkX2V2ZW50cykKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdhZGRTdWJUZXN0RmFpbHVyZScsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0U3VjY2VzcycsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19sZWdhY3koc2VsZik6CisgICAgICAgICMgV2l0aCBhIGxlZ2FjeSByZXN1bHQgb2JqZWN0ICh3aXRob3V0IGEgYWRkU3ViVGVzdCBtZXRob2QpLAorICAgICAgICAjIHRleHQgZXhlY3V0aW9uIHN0b3BzIGFmdGVyIHRoZSBmaXJzdCBzdWJ0ZXN0IGZhaWx1cmUuCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExlZ2FjeUxvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkRmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhzZWxmLCByZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gWzEsIDJdOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gWzIsIDNdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGo9aik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICAjIFRoZSA2IHN1YnRlc3Qgc3VjY2Vzc2VzIGFyZSBpbmRpdmlkdWFsbHkgcmVjb3JkZWQsIGluIGFkZGl0aW9uCisgICAgICAgICMgdG8gdGhlIHdob2xlIHRlc3Qgc3VjY2Vzcy4KKyAgICAgICAgZXhwZWN0ZWQgPSAoWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93biddCisgICAgICAgICAgICAgICAgICAgICsgNiAqIFsnYWRkU3ViVGVzdFN1Y2Nlc3MnXQorICAgICAgICAgICAgICAgICAgICArIFsnYWRkU3VjY2VzcycsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzX2xlZ2FjeShzZWxmKToKKyAgICAgICAgIyBXaXRoIGEgbGVnYWN5IHJlc3VsdCwgb25seSB0aGUgd2hvbGUgdGVzdCBzdWNjZXNzIGlzIHJlY29yZGVkLgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMZWdhY3lMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19mYWlsZmFzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPTEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9Mik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKICAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KICAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bwogICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgpAQCAtNzI5LDE4ICs4MjksMTggQEAKIAogICAgICAgICAjIHNldCBhIGxvd2VyIHRocmVzaG9sZCB2YWx1ZSBhbmQgYWRkIGEgY2xlYW51cCB0byByZXN0b3JlIGl0CiAgICAgICAgIG9sZF90aHJlc2hvbGQgPSBzZWxmLl9kaWZmVGhyZXNob2xkCi0gICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAyKio4CisgICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAyKio1CiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNldGF0dHIoc2VsZiwgJ19kaWZmVGhyZXNob2xkJywgb2xkX3RocmVzaG9sZCkpCiAKICAgICAgICAgIyB1bmRlciB0aGUgdGhyZXNob2xkOiBkaWZmIG1hcmtlciAoXikgaW4gZXJyb3IgbWVzc2FnZQotICAgICAgICBzID0gJ3gnICogKDIqKjcpCisgICAgICAgIHMgPSAneCcgKiAoMioqNCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2InKQogICAgICAgICBzZWxmLmFzc2VydEluKCdeJywgc3RyKGNtLmV4Y2VwdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKIAogICAgICAgICAjIG92ZXIgdGhlIHRocmVzaG9sZDogZGlmZiBub3QgdXNlZCBhbmQgbWFya2VyICheKSBub3QgaW4gZXJyb3IgbWVzc2FnZQotICAgICAgICBzID0gJ3gnICogKDIqKjkpCisgICAgICAgIHMgPSAneCcgKiAoMioqNikKICAgICAgICAgIyBpZiB0aGUgcGF0aCB0aGF0IHVzZXMgZGlmZmxpYiBpcyB0YWtlbiwgX3RydW5jYXRlTWVzc2FnZSB3aWxsIGJlCiAgICAgICAgICMgY2FsbGVkIC0tIHJlcGxhY2UgaXQgd2l0aCBleHBsb2RpbmdUcnVuY2F0aW9uIHRvIHZlcmlmeSB0aGF0IHRoaXMKICAgICAgICAgIyBkb2Vzbid0IGhhcHBlbgpAQCAtNzU3LDYgKzg1NywzNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAnJXIgIT0gJXInICUgKHMxLCBzMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKIAorICAgIGRlZiB0ZXN0QXNzZXJ0RXF1YWxfc2hvcnRlbihzZWxmKToKKyAgICAgICAgIyBzZXQgYSBsb3dlciB0aHJlc2hvbGQgdmFsdWUgYW5kIGFkZCBhIGNsZWFudXAgdG8gcmVzdG9yZSBpdAorICAgICAgICBvbGRfdGhyZXNob2xkID0gc2VsZi5fZGlmZlRocmVzaG9sZAorICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMAorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfZGlmZlRocmVzaG9sZCcsIG9sZF90aHJlc2hvbGQpKQorCisgICAgICAgIHMgPSAneCcgKiAxMDAKKyAgICAgICAgczEsIHMyID0gcyArICdhJywgcyArICdiJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4WzM1IGNoYXJzXScgKyAneCcgKiA2MQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiJyVzYScgIT0gJyVzYiciICUgKGMsIGMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCisKKyAgICAgICAgcCA9ICd5JyAqIDUwCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScgKyBwLCBzICsgJ2InICsgcAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4Wzg1IGNoYXJzXXh4eHh4eHh4eHh4JworICAgICAgICAjcHJpbnQoKQorICAgICAgICAjcHJpbnQoc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJXMnICE9ICclc2IlcyciICUgKGMsIHAsIGMsIHApKQorCisgICAgICAgIHAgPSAneScgKiAxMDAKKyAgICAgICAgczEsIHMyID0gcyArICdhJyArIHAsIHMgKyAnYicgKyBwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbOTEgY2hhcnNdeHh4eHgnCisgICAgICAgIGQgPSAneScgKiA0MCArICdbNTYgY2hhcnNdeXl5eScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2ElcycgIT0gJyVzYiVzJyIgJSAoYywgZCwgYywgZCkpCisKICAgICBkZWYgdGVzdEFzc2VydENvdW50RXF1YWwoc2VsZik6CiAgICAgICAgIGEgPSBvYmplY3QoKQogICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzEsIDIsIDNdLCBbMywgMiwgMV0pCkBAIC0xMTU5LDYgKzEyOTAsOTQgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChSdW50aW1lV2FybmluZywgIm8rIik6CiAgICAgICAgICAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oImJhcnoiKQogCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgYXNzZXJ0Tm9TdGRlcnIoc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgYnVmOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuZ2V0dmFsdWUoKSwgIiIpCisKKyAgICBkZWYgYXNzZXJ0TG9nUmVjb3JkcyhzZWxmLCByZWNvcmRzLCBtYXRjaGVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIGxlbihtYXRjaGVzKSkKKyAgICAgICAgZm9yIHJlYywgbWF0Y2ggaW4gemlwKHJlY29yZHMsIG1hdGNoZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlYywgbG9nZ2luZy5Mb2dSZWNvcmQpCisgICAgICAgICAgICBmb3IgaywgdiBpbiBtYXRjaC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihyZWMsIGspLCB2KQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRGVmYXVsdHMoc2VsZik6CisgICAgICAgICMgZGVmYXVsdHM6IHJvb3QgbG9nZ2VyLCBsZXZlbCBJTkZPCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsIFt7J25hbWUnOiAnZm9vJ31dKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzVHdvTWF0Y2hpbmdNZXNzYWdlcyhzZWxmKToKKyAgICAgICAgIyBTYW1lLCBidXQgd2l0aCB0d28gbWF0Y2hpbmcgbG9nIG1lc3NhZ2VzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgICAgIGxvZ19xdXV4Lndhcm5pbmcoIjMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSIsICJXQVJOSU5HOnF1dXg6MyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vJ30sIHsnbmFtZSc6ICdxdXV4J31dKQorCisgICAgZGVmIGNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKHNlbGYsIGxldmVsKToKKyAgICAgICAgIyBDaGVjayBsZXZlbCBmaWx0ZXJpbmcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD1sZXZlbCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby53YXJuaW5nKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmVycm9yKCIyIikKKyAgICAgICAgICAgICAgICBsb2dfcXV1eC5jcml0aWNhbCgiMyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJFUlJPUjpmb28uYmFyOjIiLCAiQ1JJVElDQUw6cXV1eDozIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28uYmFyJ30sIHsnbmFtZSc6ICdxdXV4J31dKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzUGVyTGV2ZWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwobG9nZ2luZy5FUlJPUikKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMZXZlbCgnRVJST1InKQorCisgICAgZGVmIGNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcihzZWxmLCBsb2dnZXIpOgorICAgICAgICAjIENoZWNrIHBlci1sb2dnZXIgZml0ZXJpbmcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD0nREVCVUcnKSBhcyBvdXRlcl9jbToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsb2dnZXIsIGxldmVsPSdERUJVRycpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgICAgICAgICAgbG9nX3F1dXgud2FybmluZygiMyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSIsICJERUJVRzpmb28uYmFyOjIiXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vJ30sIHsnbmFtZSc6ICdmb28uYmFyJ31dKQorICAgICAgICAgICAgIyBUaGUgb3V0ZXIgY2F0Y2hhbGwgY2F1Z2h0IHRoZSBxdXV4IGxvZworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRlcl9jbS5vdXRwdXQsIFsiV0FSTklORzpxdXV4OjMiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1BlckxvZ2dlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIobG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpKQorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcignZm9vJykKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVOb0xvZ3Moc2VsZik6CisgICAgICAgICMgRmFpbHVyZSBkdWUgdG8gbm8gbG9ncworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NGYWlsdXJlTGV2ZWxUb29IaWdoKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIGxldmVsIHRvbyBoaWdoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxldmVsPSdXQVJOSU5HJyk6CisgICAgICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NGYWlsdXJlTWlzbWF0Y2hpbmdMb2dnZXIoc2VsZik6CisgICAgICAgICMgRmFpbHVyZSBkdWUgdG8gbWlzbWF0Y2hpbmcgbG9nZ2VyIChhbmQgdGhlIGxvZ2dlZCBtZXNzYWdlIGlzCisgICAgICAgICMgcGFzc2VkIHRocm91Z2gpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdxdXV4JywgbGV2ZWw9J0VSUk9SJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ2ZvbycpOgorICAgICAgICAgICAgICAgICAgICBsb2dfcXV1eC5lcnJvcigiMSIpCisKICAgICBkZWYgdGVzdERlcHJlY2F0ZWRNZXRob2ROYW1lcyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgZGVwcmVjYXRlZCBtZXRob2RzIHJhaXNlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBTZWUgIzk0MjQuCkBAIC0xMzEzLDMgKzE1MzIsNyBAQAogICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgogICAgICAgICAgICAgZGVsIGNhc2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod3IoKSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQppbmRleCBjY2M3ZGIyLi42YjdiMTI4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQpAQCAtMSwxMiArMSwxNSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IGJ1aWx0aW5zCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogaW1wb3J0IHVuaXR0ZXN0CiAKIAogY2xhc3MgVGVzdGFibGVUZXN0UHJvZ3JhbSh1bml0dGVzdC5UZXN0UHJvZ3JhbSk6Ci0gICAgbW9kdWxlID0gJ19fbWFpbl9fJworICAgIG1vZHVsZSA9IE5vbmUKICAgICBleGl0ID0gVHJ1ZQogICAgIGRlZmF1bHRUZXN0ID0gZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gTm9uZQogICAgIHZlcmJvc2l0eSA9IDEKQEAgLTQ2LDkgKzQ5LDkgQEAKICAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKICAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgogCi0gICAgICAgIHBhdGhfbGlzdHMgPSBbWyd0ZXN0MS5weScsICd0ZXN0Mi5weScsICdub3RfYV90ZXN0LnB5JywgJ3Rlc3RfZGlyJywKKyAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3Rlc3QyLnB5JywgJ3Rlc3QxLnB5JywgJ25vdF9hX3Rlc3QucHknLCAndGVzdF9kaXInLAogICAgICAgICAgICAgICAgICAgICAgICAndGVzdC5mb28nLCAndGVzdC1ub3QtYS1tb2R1bGUucHknLCAnYW5vdGhlcl9kaXInXSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3QzLnB5JywgJ3Rlc3Q0LnB5JywgXV0KKyAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3Q0LnB5JywgJ3Rlc3QzLnB5JywgXV0KICAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBwYXRoOiBwYXRoX2xpc3RzLnBvcCgwKQogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9saXN0ZGlyKQogCkBAIC03MCw2ICs3Myw4IEBACiAgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbAogICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKHRvcF9sZXZlbCwgJ3Rlc3QqLnB5JykpCiAKKyAgICAgICAgIyBUaGUgdGVzdCBzdWl0ZXMgZm91bmQgc2hvdWxkIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBmb3IgcmVsaWFibGUKKyAgICAgICAgIyBleGVjdXRpb24gb3JkZXIuCiAgICAgICAgIGV4cGVjdGVkID0gW25hbWUgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MScsICd0ZXN0MicpXQogICAgICAgICBleHBlY3RlZC5leHRlbmQoWygndGVzdF9kaXIuJXMnICUgbmFtZSkgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KQEAgLTEzMiw2ICsxMzcsNyBAQAogICAgICAgICAjIGFuZCBkaXJlY3RseSBmcm9tIHRoZSB0ZXN0X2RpcmVjdG9yeTIgcGFja2FnZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnbG9hZF90ZXN0cycsICd0ZXN0X2RpcmVjdG9yeTInICsgJyBtb2R1bGUgdGVzdHMnXSkKKyAgICAgICAgIyBUaGUgdGVzdCBtb2R1bGUgcGF0aHMgc2hvdWxkIGJlIHNvcnRlZCBmb3IgcmVsaWFibGUgZXhlY3V0aW9uIG9yZGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLnBhdGhzLCBbJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddKQogCiAgICAgICAgICMgbG9hZF90ZXN0cyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIHdpdGggbG9hZGVyLCB0ZXN0cyBhbmQgcGF0dGVybgpAQCAtMTY5LDcgKzE3NSw3IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZGlyKQogCiAgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MgPSBbXQotICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPU5vbmUpOgogICAgICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybikpCiAgICAgICAgICAgICByZXR1cm4gWyd0ZXN0cyddCiAgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCkBAIC0xODQsMTEgKzE5MCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZpbmRfdGVzdHNfYXJncywgWyhzdGFydF9kaXIsICdwYXR0ZXJuJyldKQogICAgICAgICBzZWxmLmFzc2VydEluKHRvcF9sZXZlbF9kaXIsIHN5cy5wYXRoKQogCi0gICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCisgICAgZGVmIHNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cyhzZWxmLCBmYWtlZmlsZSk6CiAgICAgICAgIGxpc3RkaXIgPSBvcy5saXN0ZGlyCi0gICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogWyd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknXQorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFtmYWtlZmlsZV0KICAgICAgICAgaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgXzogVHJ1ZQogICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KQEAgLTE5OCw2ICsyMDIsMTEgQEAKICAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3dpdGhfbW9kdWxlc190aGF0X2ZhaWxfdG9faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cygndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5JykKKwogICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuZ2V0Y3dkKCksIHN5cy5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCkBAIC0yMDYsNjIgKzIxNSw3NCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIHRlc3QudGVzdF90aGlzX2RvZXNfbm90X2V4aXN0KCkKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3dpdGhfbW9kdWxlX3RoYXRfcmFpc2VzX1NraXBUZXN0X29uX2ltcG9ydChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgZGVmIF9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdza2lwcGVyb28nKQorICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gX2dldF9tb2R1bGVfZnJvbV9uYW1lCisKKyAgICAgICAgc2VsZi5zZXR1cF9pbXBvcnRfaXNzdWVfdGVzdHMoJ3Rlc3Rfc2tpcF9kdW1teS5weScpCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJy4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMSkKKwogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19wYXJzZUFyZ3Moc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKIAogICAgICAgICBhcmdzID0gW10KLSAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKLSAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKGFyZ3YpCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBhcmdzLmFwcGVuZAogICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICdkaXNjb3ZlciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCiAKKyAgICAgICAgYXJnc1s6XSA9IFtdCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJywgJ2ZvbycsICdiYXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ2ZvbycsICdiYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbWydmb28nLCAnYmFyJ11dKQogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2Rpc2NvdmVyX2J5X2RlZmF1bHQoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS5tb2R1bGUgPSBOb25lCiAKLSAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3YsIFtdKQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uYnVmZmVyLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmNhdGNoYnJlYWssIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uZmFpbGZhc3QsIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2Rpc2NvdmVyX2J5X2RlZmF1bHRfd2l0aF9vcHRpb25zKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCi0gICAgICAgIHByb2dyYW0ubW9kdWxlID0gTm9uZQogCi0gICAgICAgIGFyZ3MgPSBbJ3NvbWV0aGluZycsICctdicsICctYicsICctdicsICctYycsICctZiddCi0gICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKLSAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKLSAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmd2LCBhcmdzWzE6XSkKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5Ci0gICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKGFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNhbGxlZCkKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJy12JywgJy1iJywgJy12JywgJy1jJywgJy1mJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmJ1ZmZlciwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmNhdGNoYnJlYWssIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5mYWlsZmFzdCwgVHJ1ZSkKIAogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV90b29fbWFueV9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIGNsYXNzIFN0b3AoRXhjZXB0aW9uKToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZGVmIHVzYWdlRXhpdCgpOgotICAgICAgICAgICAgcmFpc2UgU3RvcAotCiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS51c2FnZUV4aXQgPSB1c2FnZUV4aXQKICAgICAgICAgcHJvZ3JhbS50ZXN0TG9hZGVyID0gTm9uZQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3RvcCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncwogICAgICAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VzYWdlOicsIHN0ZGVyci5nZXR2YWx1ZSgpKQogCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZG9fZGlzY292ZXJ5X3VzZXNfZGVmYXVsdF9sb2FkZXIoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5faW5pdEFyZ1BhcnNlcnMoKQogCiAgICAgICAgIGNsYXNzIExvYWRlcihvYmplY3QpOgogICAgICAgICAgICAgYXJncyA9IFtdCkBAIC00MTcsNyArNDM4LDcgQEAKICAgICAgICAgZXhwZWN0ZWRQYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZSh1bml0dGVzdC50ZXN0Ll9fZmlsZV9fKSkKIAogICAgICAgICBzZWxmLndhc1J1biA9IEZhbHNlCi0gICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgICAgICAgICBzZWxmLndhc1J1biA9IFRydWUKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfZGlyLCBleHBlY3RlZFBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdGVzdHMKQEAgLTQyNyw1ICs0NDgsNzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIHRlc3RzKQogCiAKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZnJvbV9kb3R0ZWRfcGF0aF9idWlsdGluX21vZHVsZXMoc2VsZik6CisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weSddCisgICAgICAgIGlzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIGlzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIF86IEZhbHNlCisgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBkZWYgcmVzdG9yZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBpc2ZpbGUKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBpc2RpcgorICAgICAgICAgICAgb3MubGlzdGRpciA9IGxpc3RkaXIKKyAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBsb2FkZXIuZGlzY292ZXIoJ3N5cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0NhbiBub3QgdXNlIGJ1aWx0aW4gbW9kdWxlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzIGRvdHRlZCBtb2R1bGUgbmFtZXMnKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2Zyb21fZG90dGVkX25hbWVzcGFjZV9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgb3JpZ19pbXBvcnQgPSBfX2ltcG9ydF9fCisgICAgICAgIHBhY2thZ2UgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwYWNrYWdlJykKKyAgICAgICAgcGFja2FnZS5fX3BhdGhfXyA9IFsnL2EnLCAnL2InXQorICAgICAgICBwYWNrYWdlLl9fc3BlY19fID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKAorICAgICAgICAgICBsb2FkZXI9Tm9uZSwKKyAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9WycvYScsICcvYiddCisgICAgICAgICkKKworICAgICAgICBkZWYgX2ltcG9ydChwYWNrYWdlbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3BhY2thZ2VuYW1lXSA9IHBhY2thZ2UKKyAgICAgICAgICAgIHJldHVybiBwYWNrYWdlCisKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBvcmlnX2ltcG9ydAorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKKyAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IF9pbXBvcnQKKworICAgICAgICBfZmluZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybikpCisgICAgICAgICAgICByZXR1cm4gWyclcy90ZXN0cycgJSBzdGFydF9kaXJdCisKKyAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCdwYWNrYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwgWycvYS90ZXN0cycsICcvYi90ZXN0cyddKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2ZhaWxlZF9kaXNjb3Zlcnkoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBwYWNrYWdlID0gdHlwZXMuTW9kdWxlVHlwZSgncGFja2FnZScpCisgICAgICAgIG9yaWdfaW1wb3J0ID0gX19pbXBvcnRfXworCisgICAgICAgIGRlZiBfaW1wb3J0KHBhY2thZ2VuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbcGFja2FnZW5hbWVdID0gcGFja2FnZQorICAgICAgICAgICAgcmV0dXJuIHBhY2thZ2UKKworICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IG9yaWdfaW1wb3J0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gX2ltcG9ydAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGxvYWRlci5kaXNjb3ZlcigncGFja2FnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvblwndCBrbm93IGhvdyB0byBkaXNjb3ZlciBmcm9tIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChwYWNrYWdlKSkKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CmluZGV4IDljZTVlZTMuLmQ3ZmUwN2EgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKQEAgLTE0MiwzICsxNDIsNyBAQAogICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUsIGRlc2NyaXB0aW9uPWRlc2MpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSwgInRoaXMgdGVzdHMgZm9vIikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQppbmRleCBmY2QyZTA3Li5iNjJhMWI1IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQpAQCAtMTMwNiwzICsxMzA2LDcgQEAKICAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIuc3VpdGVDbGFzcywgdW5pdHRlc3QuVGVzdFN1aXRlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKaW5kZXggOGE0YjNmYS4uMzI5NDI5OCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQpAQCAtMiw2ICsyLDcgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCiAKQEAgLTY0LDYgKzY1LDQxIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAogICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQogCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZXMoc2VsZiwgbmFtZXMsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAorICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdFRlc3Rfd2l0aF9zdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgb2xkX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICBzeXMuYXJndiA9IFsnZmFrZXRlc3QnXQorICAgICAgICBydW5uZXIgPSBGYWtlUnVubmVyKCkKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRlc3Q9J3VuaXR0ZXN0LnRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQorICAgICAgICBzeXMuYXJndiA9IG9sZF9hcmd2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1bml0dGVzdC50ZXN0JywpLCBwcm9ncmFtLnRlc3ROYW1lcykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0X3dpdGhfaXRlcmFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgb2xkX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICBzeXMuYXJndiA9IFsnZmFrZXRlc3QnXQorICAgICAgICBydW5uZXIgPSBGYWtlUnVubmVyKCkKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKAorICAgICAgICAgICAgdGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UsCisgICAgICAgICAgICBkZWZhdWx0VGVzdD1bJ3VuaXR0ZXN0LnRlc3QnLCAndW5pdHRlc3QudGVzdDInXSwKKyAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc3lzLmFyZ3YgPSBvbGRfYXJndgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsndW5pdHRlc3QudGVzdCcsICd1bml0dGVzdC50ZXN0MiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRlc3ROYW1lcykKIAogICAgIGRlZiB0ZXN0X05vbkV4aXQoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5tYWluKGV4aXQ9RmFsc2UsCkBAIC0xNTEsMjAgKzE4NywzOCBAQAogICAgICAgICAgICAgaWYgYXR0ciA9PSAnY2F0Y2gnIGFuZCBub3QgaGFzSW5zdGFsbEhhbmRsZXI6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBOb25lKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBGYWxzZSkKKworICAgICAgICAgICAgZmFsc2UgPSBbXQorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBmYWxzZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgZmFsc2UpCisKKyAgICAgICAgICAgIHRydWUgPSBbNDJdCisgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIHRydWUpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIHRydWUpCisKICAgICAgICAgICAgIHNob3J0X29wdCA9ICctJXMnICUgYXJnWzBdCiAgICAgICAgICAgICBsb25nX29wdCA9ICctLSVzJyAlIGFyZwogICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgogICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgTm9uZSkKLQogICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHByb2dyYW0sIGF0dHIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgVHJ1ZSkKIAotICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgotICAgICAgICAgICAgICAgIG5vdF9ub25lID0gb2JqZWN0KCkKLSAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIG5vdF9ub25lKQorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgRmFsc2UpCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKIAotICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgbm90X25vbmUpCisgICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBUcnVlKQorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCiAKICAgICBkZWYgdGVzdFdhcm5pbmcoc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhlIHdhcm5pbmdzIGFyZ3VtZW50IiIiCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CmluZGV4IDdkNDA3MjUuLjQ4OWZlMTcgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CkBAIC0yMjcsNiArMjI3LDQwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9ybWF0dGVkX2V4Yywgc3RyKQogCisgICAgZGVmIHRlc3RfYWRkU3ViVGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgc3VidGVzdAorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xKToKKyAgICAgICAgICAgICAgICAgICAgc3VidGVzdCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgIyBSZWdpc3RlciBhbiBlcnJvciBieSBoYW5kICh0byBjaGVjayB0aGUgQVBJKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBleGNfaW5mb190dXBsZSkKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgdHJpZ2dlciBhIGZhaWx1cmUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIikKKworICAgICAgICBzdWJ0ZXN0ID0gTm9uZQorICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXN0X2Nhc2UsIHN1YnRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgZm9ybWF0dGVkX2V4YykKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmZhaWx1cmVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCBzdWJ0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIiwgZm9ybWF0dGVkX2V4YykKKwogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgogICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjM0LDYgKzI2OCwzNyBAQAogICAgICAgICAgICAgICAgICd0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKwogICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KScpCiAKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdzb21lIG1lc3NhZ2UnKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKKyAgICAgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpIFtzb21lIG1lc3NhZ2VdJykKKworICAgIGRlZiB0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyAnCisgICAgICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpICg8c3VidGVzdD4pJykKKworICAgIGRlZiB0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYmFyPTIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcoc2VsZik6CkBAIC0yNDcsNiArMzEyLDE4IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSlcbicKKyAgICAgICAgICAgICAgICAnVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4nKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KICAgICAgICAgVGhlIHNlY29uZCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcuCkBAIC0yNTksNiArMzM2LDIxIEBACiAgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJwogICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorICAgICAgICBUaGUgc2Vjb25kIGxpbmUgb2YgdGhlIGRvY3N0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICgndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJworICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCisKICAgICBkZWYgdGVzdFN0YWNrRnJhbWVUcmltbWluZyhzZWxmKToKICAgICAgICAgY2xhc3MgRnJhbWUob2JqZWN0KToKICAgICAgICAgICAgIGNsYXNzIHRiX2ZyYW1lKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CmluZGV4IGUyMmU2YmMuLmVmMWMxYWY5IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQpAQCAtNSw2ICs1LDcgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiAKIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdC5jYXNlIGltcG9ydCBfT3V0Y29tZQogCiBmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgogCkBAIC00MiwxMiArNDMsOCBAQAogICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBjbGFzcyBNb2NrT3V0Y29tZShvYmplY3QpOgotICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKLSAgICAgICAgICAgIGVycm9ycyA9IFtdCi0KICAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQotICAgICAgICB0ZXN0Ll9vdXRjb21lRm9yRG9DbGVhbnVwcyA9IE1vY2tPdXRjb21lCisgICAgICAgIG91dGNvbWUgPSB0ZXN0Ll9vdXRjb21lID0gX091dGNvbWUoKQogCiAgICAgICAgIGV4YzEgPSBFeGNlcHRpb24oJ2ZvbycpCiAgICAgICAgIGV4YzIgPSBFeGNlcHRpb24oJ2JhcicpCkBAIC02MSw5ICs1OCwxMCBAQAogICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0LmRvQ2xlYW51cHMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2NrT3V0Y29tZS5zdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dGNvbWUuc3VjY2VzcykKIAotICAgICAgICAoVHlwZTEsIGluc3RhbmNlMSwgXyksIChUeXBlMiwgaW5zdGFuY2UyLCBfKSA9IHJldmVyc2VkKE1vY2tPdXRjb21lLmVycm9ycykKKyAgICAgICAgKChfLCAoVHlwZTEsIGluc3RhbmNlMSwgXykpLAorICAgICAgICAgKF8sIChUeXBlMiwgaW5zdGFuY2UyLCBfKSkpID0gcmV2ZXJzZWQob3V0Y29tZS5lcnJvcnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFR5cGUxLCBpbnN0YW5jZTEpLCAoRXhjZXB0aW9uLCBleGMxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoVHlwZTIsIGluc3RhbmNlMiksIChFeGNlcHRpb24sIGV4YzIpKQogCkBAIC0zNDEsMyArMzM5LDcgQEAKICAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoZikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5zdHJlYW0uc3RyZWFtIGlzIGYpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKaW5kZXggYjhkNWFhNC4uMzkyZjk1ZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKQEAgLTQ5NCwxNCArNDk0LDEzIEBACiAgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCiAgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQogCi0gICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHN1aXRlLmFkZFRlc3QoX3N1aXRlKQotCiAgICAgICAgIG1lc3NhZ2VzID0gKCdzZXRVcE1vZHVsZScsICd0ZWFyRG93bk1vZHVsZScsICdzZXRVcENsYXNzJywgJ3RlYXJEb3duQ2xhc3MnLCAndGVzdF9zb21ldGhpbmcnKQogICAgICAgICBmb3IgcGhhc2UsIG1zZyBpbiBlbnVtZXJhdGUobWVzc2FnZXMpOgorICAgICAgICAgICAgX3N1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCisgICAgICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbX3N1aXRlXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sIG1zZyk6CiAgICAgICAgICAgICAgICAgc3VpdGUuZGVidWcoKQogCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQppbmRleCA5NTIyNDBlLi5lMThjYWE0IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKQEAgLTI5LDYgKzI5LDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQogCisgICAgZGVmIHRlc3Rfc2tpcHBpbmdfc3VidGVzdHMoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9za2lwX21lKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGE9MSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGI9Mik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDEiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDIiKQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMyIpCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X3NraXBfbWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3N0YXJ0VGVzdCcsICdhZGRTa2lwJywgJ2FkZFNraXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRTa2lwJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMykKKyAgICAgICAgc3VidGVzdCwgbXNnID0gcmVzdWx0LnNraXBwZWRbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICJza2lwIDEiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VidGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3VidGVzdCwgdGVzdCkKKyAgICAgICAgc3VidGVzdCwgbXNnID0gcmVzdWx0LnNraXBwZWRbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICJza2lwIDIiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VidGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3VidGVzdCwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZFsyXSwgKHRlc3QsICJza2lwIDMiKSkKKwogICAgIGRlZiB0ZXN0X3NraXBwaW5nX2RlY29yYXRvcnMoc2VsZik6CiAgICAgICAgIG9wX3RhYmxlID0gKCh1bml0dGVzdC5za2lwVW5sZXNzLCBGYWxzZSwgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICh1bml0dGVzdC5za2lwSWYsIFRydWUsIEZhbHNlKSkKQEAgLTk1LDYgKzEyMCwzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAorICAgIGRlZiB0ZXN0X2V4cGVjdGVkX2ZhaWx1cmVfc3VidGVzdHMoc2VsZik6CisgICAgICAgICMgQSBmYWlsdXJlIGluIGFueSBzdWJ0ZXN0IGNvdW50cyBhcyB0aGUgZXhwZWN0ZWQgZmFpbHVyZSBvZiB0aGUKKyAgICAgICAgIyB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGVscCBtZSEiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgZG9lc24ndCBnZXQgZXhlY3V0ZWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgY29tZSBoZXJlIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKwogICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2VzcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKQEAgLTExMCw2ICsxNjAsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudW5leHBlY3RlZFN1Y2Nlc3NlcywgW3Rlc3RdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAorICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2Vzc19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgIyBTdWNjZXNzIGluIGFsbCBzdWJ0ZXN0cyBjb3VudHMgYXMgdGhlIHVuZXhwZWN0ZWQgc3VjY2VzcyBvZgorICAgICAgICAjIHRoZSB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgU28gZG9lcyB0aGlzIG9uZQorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdFN1Y2Nlc3MnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuZmFpbHVyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKICAgICBkZWYgdGVzdF9za2lwX2RvZXNudF9ydW5fc2V0dXAoc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICB3YXNTZXRVcCA9IEZhbHNlCkBAIC0xNDcsMyArMjIxLDcgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQogICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQppbmRleCAyZGI5NzhkLi41NGNlYzZlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKQEAgLTEsNiArMSw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIAoraW1wb3J0IGdjCiBpbXBvcnQgc3lzCitpbXBvcnQgd2Vha3JlZgogZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgVGVzdEVxdWFsaXR5CiAKIApAQCAtMzAwLDcgKzMwMiw1NCBAQAogICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKICAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKIAorICAgIGRlZiB0ZXN0X3JlbW92ZV90ZXN0X2F0X2luZGV4KHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKIAorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuX3Rlc3RzID0gWzEsIDIsIDNdCisgICAgICAgIHN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleCgxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIE5vbmUsIDNdLCBzdWl0ZS5fdGVzdHMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdGVzdF9hdF9pbmRleF9ub3RfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLl90ZXN0cyA9IE5vbmUKKworICAgICAgICAjIGlmIF9yZW1vdmVBdEluZGV4IHJhaXNlcyBmb3Igbm9uaXRlcmFibGVzIHRoaXMgbmV4dCBsaW5lIHdpbGwgYnJlYWsKKyAgICAgICAgc3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4KDIpCisKKyAgICBkZWYgYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bihzZWxmLCBUZXN0U3VpdGVDbGFzcyk6CisgICAgICAgIGlmIG5vdCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlN1aXRlIGNsZWFudXAgaXMgZGlzYWJsZWQiKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0X25vdGhpbmcnKQorICAgICAgICB3cmVmID0gd2Vha3JlZi5yZWYodGVzdCkKKworICAgICAgICBzdWl0ZSA9IFRlc3RTdWl0ZUNsYXNzKFt3cmVmKCldKQorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorCisgICAgICAgIGRlbCB0ZXN0CisKKyAgICAgICAgIyBmb3IgdGhlIGJlbmVmaXQgb2Ygbm9uLXJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIFtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JlZigpKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX0Jhc2VUZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bih1bml0dGVzdC5CYXNlVGVzdFN1aXRlKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSkKIAogICAgIGRlZiB0ZXN0X2Jhc2V0ZXN0c3VpdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzYzLDYgKzQxMiw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCkKIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzYzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICMgdG9wIGxldmVsIGRpcmVjdG9yeSBjYWNoZWQgb24gbG9hZGVyIGluc3RhbmNlCisgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcGF0dGVybiA9IHBhdHRlcm4gb3IgInRlc3QqLnB5IgorICAgICMgV2UgYXJlIGluc2lkZSB1bml0dGVzdC50ZXN0LnRlc3Rtb2NrLCBzbyB0aGUgdG9wLWxldmVsIGlzIHRocmVlIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUodGhpc19kaXIpKSkKKyAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2xldmVsX2Rpcj10b3BfbGV2ZWxfZGlyKQorICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCisgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQppbmRleCA3YjJkZDAwLi41MzkwYTRlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CkBAIC0xNDUsMyArMTQ1LDcgQEAKICAgICAgICAgbW9jay53aWJibGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay53aWJibGUsICdzb21lJywgICdhcmdzJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQppbmRleCBhMzYyYTJmLi4xZGJjMGI2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQpAQCAtMzM3LDkgKzMzNywxMCBAQAogCiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgZm9yIHNwZWMgaW4gKFNvbWVDbGFzcywgU29tZUNsYXNzKCkpOgotICAgICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhzcGVjKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhTb21lQ2xhc3MpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoU29tZUNsYXNzKCkpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCiAKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdXRvc3BlY19yZXR1cm5fdmFsdWUoc2VsZik6CkBAIC01NzYsMTAgKzU3NywxMCBAQAogCiAgICAgZGVmIHRlc3Rfc3BlY19pbmhlcml0YW5jZV9mb3JfY2xhc3NlcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgYShzZWxmKToKKyAgICAgICAgICAgIGRlZiBhKHNlbGYsIHgpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGNsYXNzIEJhcihvYmplY3QpOgotICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYsIHkpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgY2xhc3NfbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhGb28pCkBAIC01ODcsMjYgKzU4OCwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm90KGNsYXNzX21vY2ssIGNsYXNzX21vY2soKSkKIAogICAgICAgICBmb3IgdGhpc19tb2NrIGluIGNsYXNzX21vY2ssIGNsYXNzX21vY2soKToKLSAgICAgICAgICAgIHRoaXNfbW9jay5hKCkKLSAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRoaXNfbW9jay5hLCAnZm9vJykKKyAgICAgICAgICAgIHRoaXNfbW9jay5hKHg9NSkKKyAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCh4PTUpCisgICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGhpc19tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCB0aGlzX21vY2ssICdiJykKIAogICAgICAgICBpbnN0YW5jZV9tb2NrID0gY3JlYXRlX2F1dG9zcGVjKEZvbygpKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nKQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEoNSkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCg1KQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKHg9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2ssICdiJykKIAogICAgICAgICAjIFRoZSByZXR1cm4gdmFsdWUgaXNuJ3QgaXNuJ3QgY2FsbGFibGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrKQogCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoeT02KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jay5CYXIsICdnJykKIAotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCh5PTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLkJhcigpLCAnZycpCiAKIApAQCAtNjYzLDEyICs2NjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEsIDIpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIGI9MikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIpCiAKICAgICAgICAgZi5mID0gZgogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay5mKQogICAgICAgICBtb2NrLmYoMywgNCkKICAgICAgICAgbW9jay5mLmFzc2VydF9jYWxsZWRfd2l0aCgzLCA0KQorICAgICAgICBtb2NrLmYuYXNzZXJ0X2NhbGxlZF93aXRoKGE9MywgYj00KQogCiAKICAgICBkZWYgdGVzdF9za2lwX2F0dHJpYnV0ZWVycm9ycyhzZWxmKToKQEAgLTcwNCw5ICs3MTIsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLCAyKQogCiAgICAgICAgIG1vY2soNCwgNSkKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoNCwgNSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT00LCBiPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwgYT01LCBiPTQpCiAKIAogICAgIGRlZiB0ZXN0X2NsYXNzX3dpdGhfbm9faW5pdChzZWxmKToKQEAgLTcxOSwyNCArNzMxLDI3IEBACiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfY2FsbGFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIENhbGxhYmxlKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGEpOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKQotICAgICAgICBtb2NrKCkKLSAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCisgICAgICAgIG1vY2soMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHg9MSwgeT0yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2ssICdhJykKIAotICAgICAgICBpbnN0YW5jZSA9IG1vY2soKQorICAgICAgICBpbnN0YW5jZSA9IG1vY2soMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZSkKICAgICAgICAgaW5zdGFuY2UoYT0nYScpCisgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0nYScpCiAgICAgICAgIGluc3RhbmNlKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKCdhJykKKyAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKGE9J2EnKQogCi0gICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUoKSkKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSgxLCAyKSkKICAgICAgICAgbW9jayhhPSdhJykKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPSdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQpAQCAtNzc5LDcgKzc5NCwxMSBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBhID0gY3JlYXRlX2F1dG9zcGVjKEZvbykKKyAgICAgICAgYS5mKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAgICAgICAgIGEuZihzZWxmPTEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQogICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQppbmRleCBjZWY1NDA1Li4yMGNjNjU0IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQpAQCAtMjUsNiArMjUsMTggQEAKICAgICBfX25leHRfXyA9IG5leHQKIAogCitjbGFzcyBTb21ldGhpbmcob2JqZWN0KToKKyAgICBkZWYgbWV0aChzZWxmLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY21ldGgoY2xzLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNtZXRoKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKwogCiBjbGFzcyBNb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTI3Myw2ICsyODUsNDMgQEAKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMywgYT0nZmlzaCcsIGI9J25vdGhpbmcnKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aF9tZXRob2Rfc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIF9jaGVjayhtb2NrKToKKyAgICAgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkubWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLmNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5jbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLnNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5zbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisKKwogICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIG1vY2soKQpAQCAtMjk3LDYgKzM0NiwyOSBAQAogICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisgICAgICAgICMgTW9jayBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgPT4gYWx3YXlzIGZhaWxzCisgICAgICAgIG1vY2soNCwgNSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2KQorCisKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfYWNjZXNzX3JldHVybnNfbW9ja3Moc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgc29tZXRoaW5nID0gbW9jay5zb21ldGhpbmcKQEAgLTk5NSw2ICsxMDY3LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9oYXNfY2FsbHNfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrKDQsIDUsIGM9NiwgZD03KQorICAgICAgICBtb2NrKDEwLCAxMSwgYz0xMikKKyAgICAgICAgY2FsbHMgPSBbCisgICAgICAgICAgICAoJycsICgxLCAyLCAzKSwge30pLAorICAgICAgICAgICAgKCcnLCAoNCwgNSwgNiksIHsnZCc6IDd9KSwKKyAgICAgICAgICAgICgoMTAsIDExLCAxMiksIHt9KSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1UcnVlKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgIyBSZXZlcnNlZCBvcmRlcgorICAgICAgICBjYWxscyA9IGxpc3QocmV2ZXJzZWQoY2FsbHMpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscykKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0sIGFueV9vcmRlcj1UcnVlKQorCisKICAgICBkZWYgdGVzdF9hc3NlcnRfYW55X2NhbGwoc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgbW9jaygxLCAyKQpAQCAtMTAyMSw2ICsxMTI2LDI2IEBACiAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2FueV9jYWxsX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jayg0LCA1LCBjPTYsIGQ9NykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoNCwgNSwgNiwgNykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT00LCBiPTUsIGM9NiwgZD03KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfYW55X2NhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKworCiAgICAgZGVmIHRlc3RfbW9ja19jYWxsc19jcmVhdGVfYXV0b3NwZWMoc2VsZik6CiAgICAgICAgIGRlZiBmKGEsIGIpOgogICAgICAgICAgICAgcGFzcwpAQCAtMTE3NywyMCArMTMwMiw2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubWV0aG9kX2NhbGxzLCBbXSkKIAogCi0gICAgZGVmIHRlc3RfYXR0cmlidXRlX2RlbGV0aW9uKHNlbGYpOgotICAgICAgICAjIHRoaXMgYmVoYXZpb3VyIGlzbid0ICp1c2VmdWwqLCBidXQgYXQgbGVhc3QgaXQncyBub3cgdGVzdGVkLi4uCi0gICAgICAgIGZvciBLbGFzcyBpbiBNb2NrLCBNYWdpY01vY2ssIE5vbkNhbGxhYmxlTWFnaWNNb2NrLCBOb25DYWxsYWJsZU1vY2s6Ci0gICAgICAgICAgICBtID0gS2xhc3MoKQotICAgICAgICAgICAgb3JpZ2luYWwgPSBtLmZvbwotICAgICAgICAgICAgbS5mb28gPSAzCi0gICAgICAgICAgICBkZWwgbS5mb28KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb28sIG9yaWdpbmFsKQotCi0gICAgICAgICAgICBuZXcgPSBtLmZvbyA9IE1vY2soKQotICAgICAgICAgICAgZGVsIG0uZm9vCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZm9vLCBuZXcpCi0KLQogICAgIGRlZiB0ZXN0X21vY2tfcGFyZW50cyhzZWxmKToKICAgICAgICAgZm9yIEtsYXNzIGluIE1vY2ssIE1hZ2ljTW9jazoKICAgICAgICAgICAgIG0gPSBLbGFzcygpCkBAIC0xMjU0LDcgKzEzNjUsOCBAQAogCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZGVsZXRpb24oc2VsZik6Ci0gICAgICAgIGZvciBtb2NrIGluIE1vY2soKSwgTWFnaWNNb2NrKCk6CisgICAgICAgIGZvciBtb2NrIGluIChNb2NrKCksIE1hZ2ljTW9jaygpLCBOb25DYWxsYWJsZU1hZ2ljTW9jaygpLAorICAgICAgICAgICAgICAgICAgICAgTm9uQ2FsbGFibGVNb2NrKCkpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9jaywgJ20nKSkKIAogICAgICAgICAgICAgZGVsIG1vY2subQpAQCAtMTI3NCw2ICsxMzg2LDUgQEAKICAgICAgICAgICAgIG1vY2suZm9vCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CmluZGV4IGMxMDkxYjQuLmMxYmMzNGYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKQEAgLTE3ODAsNiArMTc4MCw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MucGF0aCwgcGF0aCkKIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CmluZGV4IDBhMGNmYWQuLmY1NGUwNTEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CkBAIC0xNzIsNSArMTcyLDg4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKIAogCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlYWRsaW5lIHdpbGwgcmV0dXJuIGFsbCB0aGUgbGluZXMgZnJvbSB0aGUgZmFrZSBmaWxlCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICBsaW5lMiA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZTMgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMiwgJ2JhclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMywgJ2JhelxuJykKKworICAgICAgICAjIENoZWNrIHRoYXQgd2UgcHJvcGVybHkgZW11bGF0ZSBhIGZpbGUgdGhhdCBkb2Vzbid0IGVuZCBpbiBhIG5ld2xpbmUKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKKworCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVtdWxhdGluZyBhIGZpbGUgdGhhdCBlbmRzIGluIGEgbmV3bGluZSBjaGFyYWN0ZXIgd29ya3MKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmb29cbicsICdiYXJcbicsICdiYXpcbiddKQorCisgICAgICAgICMgVGVzdCB0aGF0IGZpbGVzIHdpdGhvdXQgYSBmaW5hbCBuZXdsaW5lIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkKKyAgICAgICAgIyBlbXVsYXRlZAorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJheicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zvb1xuJywgJ2JhclxuJywgJ2JheiddKQorCisKKyAgICBkZWYgdGVzdF9tb2NrX29wZW5fcmVhZF93aXRoX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIEF0IG9uZSBwb2ludCBjYWxsaW5nIHJlYWQgd2l0aCBhbiBhcmd1bWVudCB3YXMgYnJva2VuCisgICAgICAgICMgZm9yIG1vY2tzIHJldHVybmVkIGJ5IG1vY2tfb3BlbgorICAgICAgICBzb21lX2RhdGEgPSAnZm9vXG5iYXJcbmJheicKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9c29tZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2soKS5yZWFkKDEwKSwgc29tZV9kYXRhKQorCisKKyAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZF9yZWFkcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyByZWFkLCByZWFkbGluZSwgYW5kIHJlYWRsaW5lcyBwdWxscyBkYXRhCisgICAgICAgICMgc2VxdWVudGlhbGx5IGZyb20gdGhlIGRhdGEgd2UgcHJlbG9hZCB3aXRoCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICByZXN0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3QsIFsnYmFyXG4nLCAnYmF6XG4nXSkKKworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICBsaW5lMSA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgcmVzdCA9IGgucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTEsICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdCwgJ2JhclxuYmF6XG4nKQorCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX3JldHVybl92YWx1ZXMoc2VsZik6CisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb28nKQorICAgICAgICBoYW5kbGUgPSBtb2NrKCkKKworICAgICAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSAnYmFyJworICAgICAgICBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gJ2JhcicKKyAgICAgICAgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgPSBbJ2JhciddCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZCgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lcygpLCBbJ2JhciddKQorCisgICAgICAgICMgY2FsbCByZXBlYXRlZGx5IHRvIGNoZWNrIHRoYXQgYSBTdG9wSXRlcmF0aW9uIGlzIG5vdCBwcm9wYWdhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3V0aWwucHkgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQppbmRleCBjY2RmMGI4Li5hZWU0OThmIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdXRpbC5weQorKysgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQpAQCAtMSwxMCArMSw0NyBAQAogIiIiVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucy4iIiIKIAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgT3JkZXJlZERpY3QKK2Zyb20gb3MucGF0aCBpbXBvcnQgY29tbW9ucHJlZml4CiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKIF9NQVhfTEVOR1RIID0gODAKK19QTEFDRUhPTERFUl9MRU4gPSAxMgorX01JTl9CRUdJTl9MRU4gPSA1CitfTUlOX0VORF9MRU4gPSA1CitfTUlOX0NPTU1PTl9MRU4gPSA1CitfTUlOX0RJRkZfTEVOID0gX01BWF9MRU5HVEggLSBcCisgICAgICAgICAgICAgICAoX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsKKyAgICAgICAgICAgICAgICBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9FTkRfTEVOKQorYXNzZXJ0IF9NSU5fRElGRl9MRU4gPj0gMAorCitkZWYgX3Nob3J0ZW4ocywgcHJlZml4bGVuLCBzdWZmaXhsZW4pOgorICAgIHNraXAgPSBsZW4ocykgLSBwcmVmaXhsZW4gLSBzdWZmaXhsZW4KKyAgICBpZiBza2lwID4gX1BMQUNFSE9MREVSX0xFTjoKKyAgICAgICAgcyA9ICclc1slZCBjaGFyc10lcycgJSAoc1s6cHJlZml4bGVuXSwgc2tpcCwgc1tsZW4ocykgLSBzdWZmaXhsZW46XSkKKyAgICByZXR1cm4gcworCitkZWYgX2NvbW1vbl9zaG9ydGVuX3JlcHIoKmFyZ3MpOgorICAgIGFyZ3MgPSB0dXBsZShtYXAoc2FmZV9yZXByLCBhcmdzKSkKKyAgICBtYXhsZW4gPSBtYXgobWFwKGxlbiwgYXJncykpCisgICAgaWYgbWF4bGVuIDw9IF9NQVhfTEVOR1RIOgorICAgICAgICByZXR1cm4gYXJncworCisgICAgcHJlZml4ID0gY29tbW9ucHJlZml4KGFyZ3MpCisgICAgcHJlZml4bGVuID0gbGVuKHByZWZpeCkKKworICAgIGNvbW1vbl9sZW4gPSBfTUFYX0xFTkdUSCAtIFwKKyAgICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbiArIF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTikKKyAgICBpZiBjb21tb25fbGVuID4gX01JTl9DT01NT05fTEVOOgorICAgICAgICBhc3NlcnQgX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsgXAorICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbikgPCBfTUFYX0xFTkdUSAorICAgICAgICBwcmVmaXggPSBfc2hvcnRlbihwcmVmaXgsIF9NSU5fQkVHSU5fTEVOLCBjb21tb25fbGVuKQorICAgICAgICByZXR1cm4gdHVwbGUocHJlZml4ICsgc1twcmVmaXhsZW46XSBmb3IgcyBpbiBhcmdzKQorCisgICAgcHJlZml4ID0gX3Nob3J0ZW4ocHJlZml4LCBfTUlOX0JFR0lOX0xFTiwgX01JTl9DT01NT05fTEVOKQorICAgIHJldHVybiB0dXBsZShwcmVmaXggKyBfc2hvcnRlbihzW3ByZWZpeGxlbjpdLCBfTUlOX0RJRkZfTEVOLCBfTUlOX0VORF9MRU4pCisgICAgICAgICAgICAgICAgIGZvciBzIGluIGFyZ3MpCisKIGRlZiBzYWZlX3JlcHIob2JqLCBzaG9ydD1GYWxzZSk6CiAgICAgdHJ5OgogICAgICAgICByZXN1bHQgPSByZXByKG9iaikKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvZXJyb3IucHkgYi9MaWIvdXJsbGliL2Vycm9yLnB5CmluZGV4IGI3MTJlYmIuLjQ1YjcxNjkgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvZXJyb3IucHkKKysrIGIvTGliL3VybGxpYi9lcnJvci5weQpAQCAtMSw2ICsxLDYgQEAKICIiIkV4Y2VwdGlvbiBjbGFzc2VzIHJhaXNlZCBieSB1cmxsaWIuCiAKLVRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBJT0Vycm9yLiAgSXQKK1RoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBPU0Vycm9yLiAgSXQKIGRvZXNuJ3QgZGVmaW5lIGFueSBiZWhhdmlvciBvZiBpdHMgb3duLCBidXQgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbAogZXhjZXB0aW9ucyBkZWZpbmVkIGluIHRoaXMgcGFja2FnZS4KIApAQCAtMTcsMTEgKzE3LDExIEBACiAKIAogIyBkbyB0aGVzZSBlcnJvciBjbGFzc2VzIG1ha2Ugc2Vuc2U/Ci0jIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIElPRXJyb3Igc3R1ZmYgaXMgb3ZlcnJpZGRlbi4gIHdlIGp1c3Qgd2FudCB0byBiZQorIyBtYWtlIHN1cmUgYWxsIG9mIHRoZSBPU0Vycm9yIHN0dWZmIGlzIG92ZXJyaWRkZW4uICB3ZSBqdXN0IHdhbnQgdG8gYmUKICMgc3VidHlwZXMuCiAKLWNsYXNzIFVSTEVycm9yKElPRXJyb3IpOgotICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBJT0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKK2NsYXNzIFVSTEVycm9yKE9TRXJyb3IpOgorICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBPU0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKICAgICAjIHRoZSBpbXBsZW1lbnRhdGlvbi4gIG5lZWQgdG8gb3ZlcnJpZGUgX19pbml0X18gYW5kIF9fc3RyX18uCiAgICAgIyBJdCBzZXRzIHNlbGYuYXJncyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIEVudmlyb25tZW50RXJyb3IKICAgICAjIHN1YmNsYXNzZXMsIGJ1dCBhcmdzIGRvZXNuJ3QgaGF2ZSB0aGUgdHlwaWNhbCBmb3JtYXQgd2l0aCBlcnJubyBpbgpAQCAtNjEsOSArNjEsMTMgQEAKICAgICBkZWYgcmVhc29uKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5tc2cKIAotICAgIGRlZiBpbmZvKHNlbGYpOgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoZWFkZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oZHJzCiAKKyAgICBAaGVhZGVycy5zZXR0ZXIKKyAgICBkZWYgaGVhZGVycyhzZWxmLCBoZWFkZXJzKToKKyAgICAgICAgc2VsZi5oZHJzID0gaGVhZGVycwogCiAjIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBkb3dubG9hZGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGgKIGNsYXNzIENvbnRlbnRUb29TaG9ydEVycm9yKFVSTEVycm9yKToKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcGFyc2UucHkgYi9MaWIvdXJsbGliL3BhcnNlLnB5CmluZGV4IDlhMmRmNDEuLjUzMjhiOWQgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcGFyc2UucHkKKysrIGIvTGliL3VybGxpYi9wYXJzZS5weQpAQCAtODQ2LDcgKzg0Niw2IEBACiAgICAgIiIic3BsaXR0eXBlKCd0eXBlOm9wYXF1ZXN0cmluZycpIC0tPiAndHlwZScsICdvcGFxdWVzdHJpbmcnLiIiIgogICAgIGdsb2JhbCBfdHlwZXByb2cKICAgICBpZiBfdHlwZXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF90eXBlcHJvZyA9IHJlLmNvbXBpbGUoJ14oW14vOl0rKTonKQogCiAgICAgbWF0Y2ggPSBfdHlwZXByb2cubWF0Y2godXJsKQpAQCAtODYwLDcgKzg1OSw2IEBACiAgICAgIiIic3BsaXRob3N0KCcvL2hvc3RbOnBvcnRdL3BhdGgnKSAtLT4gJ2hvc3RbOnBvcnRdJywgJy9wYXRoJy4iIiIKICAgICBnbG9iYWwgX2hvc3Rwcm9nCiAgICAgaWYgX2hvc3Rwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfaG9zdHByb2cgPSByZS5jb21waWxlKCdeLy8oW14vP10qKSguKikkJykKIAogICAgIG1hdGNoID0gX2hvc3Rwcm9nLm1hdGNoKHVybCkKQEAgLTg3Nyw3ICs4NzUsNiBAQAogICAgICIiInNwbGl0dXNlcigndXNlcls6cGFzc3dkXUBob3N0Wzpwb3J0XScpIC0tPiAndXNlcls6cGFzc3dkXScsICdob3N0Wzpwb3J0XScuIiIiCiAgICAgZ2xvYmFsIF91c2VycHJvZwogICAgIGlmIF91c2VycHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3VzZXJwcm9nID0gcmUuY29tcGlsZSgnXiguKilAKC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfdXNlcnByb2cubWF0Y2goaG9zdCkKQEAgLTg4OSw3ICs4ODYsNiBAQAogICAgICIiInNwbGl0cGFzc3dkKCd1c2VyOnBhc3N3ZCcpIC0+ICd1c2VyJywgJ3Bhc3N3ZCcuIiIiCiAgICAgZ2xvYmFsIF9wYXNzd2Rwcm9nCiAgICAgaWYgX3Bhc3N3ZHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9wYXNzd2Rwcm9nID0gcmUuY29tcGlsZSgnXihbXjpdKik6KC4qKSQnLHJlLlMpCiAKICAgICBtYXRjaCA9IF9wYXNzd2Rwcm9nLm1hdGNoKHVzZXIpCkBAIC05MDIsNyArODk4LDYgQEAKICAgICAiIiJzcGxpdHBvcnQoJ2hvc3Q6cG9ydCcpIC0tPiAnaG9zdCcsICdwb3J0Jy4iIiIKICAgICBnbG9iYWwgX3BvcnRwcm9nCiAgICAgaWYgX3BvcnRwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfcG9ydHByb2cgPSByZS5jb21waWxlKCdeKC4qKTooWzAtOV0rKSQnKQogCiAgICAgbWF0Y2ggPSBfcG9ydHByb2cubWF0Y2goaG9zdCkKQEAgLTkxNyw3ICs5MTIsNiBAQAogICAgIFJldHVybiBOb25lIGlmICc6JyBidXQgbm90IGEgdmFsaWQgbnVtYmVyLiIiIgogICAgIGdsb2JhbCBfbnBvcnRwcm9nCiAgICAgaWYgX25wb3J0cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX25wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOiguKikkJykKIAogICAgIG1hdGNoID0gX25wb3J0cHJvZy5tYXRjaChob3N0KQpAQCAtOTM2LDcgKzkzMCw2IEBACiAgICAgIiIic3BsaXRxdWVyeSgnL3BhdGg/cXVlcnknKSAtLT4gJy9wYXRoJywgJ3F1ZXJ5Jy4iIiIKICAgICBnbG9iYWwgX3F1ZXJ5cHJvZwogICAgIGlmIF9xdWVyeXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9xdWVyeXByb2cgPSByZS5jb21waWxlKCdeKC4qKVw/KFteP10qKSQnKQogCiAgICAgbWF0Y2ggPSBfcXVlcnlwcm9nLm1hdGNoKHVybCkKQEAgLTk0OCw3ICs5NDEsNiBAQAogICAgICIiInNwbGl0dGFnKCcvcGF0aCN0YWcnKSAtLT4gJy9wYXRoJywgJ3RhZycuIiIiCiAgICAgZ2xvYmFsIF90YWdwcm9nCiAgICAgaWYgX3RhZ3Byb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF90YWdwcm9nID0gcmUuY29tcGlsZSgnXiguKikjKFteI10qKSQnKQogCiAgICAgbWF0Y2ggPSBfdGFncHJvZy5tYXRjaCh1cmwpCkBAIC05NjYsNyArOTU4LDYgQEAKICAgICAiIiJzcGxpdHZhbHVlKCdhdHRyPXZhbHVlJykgLS0+ICdhdHRyJywgJ3ZhbHVlJy4iIiIKICAgICBnbG9iYWwgX3ZhbHVlcHJvZwogICAgIGlmIF92YWx1ZXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF92YWx1ZXByb2cgPSByZS5jb21waWxlKCdeKFtePV0qKT0oLiopJCcpCiAKICAgICBtYXRjaCA9IF92YWx1ZXByb2cubWF0Y2goYXR0cikKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcmVxdWVzdC5weSBiL0xpYi91cmxsaWIvcmVxdWVzdC5weQppbmRleCBhNzQ0NWQxLi41OTk1Y2JlIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3JlcXVlc3QucHkKKysrIGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CkBAIC0xOCw3ICsxOCw3IEBACiB1cmxsaWIuICBwYXNzIHRoZSB1cmwgYW5kIG9wdGlvbmFsbHkgZGF0YSB0byBwb3N0IHRvIGFuIEhUVFAgVVJMLCBhbmQKIGdldCBhIGZpbGUtbGlrZSBvYmplY3QgYmFjay4gIE9uZSBkaWZmZXJlbmNlIGlzIHRoYXQgeW91IGNhbiBhbHNvIHBhc3MKIGEgUmVxdWVzdCBpbnN0YW5jZSBpbnN0ZWFkIG9mIFVSTC4gIFJhaXNlcyBhIFVSTEVycm9yIChzdWJjbGFzcyBvZgotSU9FcnJvcik7IGZvciBIVFRQIGVycm9ycywgcmFpc2VzIGFuIEhUVFBFcnJvciwgd2hpY2ggY2FuIGFsc28gYmUKK09TRXJyb3IpOyBmb3IgSFRUUCBlcnJvcnMsIHJhaXNlcyBhbiBIVFRQRXJyb3IsIHdoaWNoIGNhbiBhbHNvIGJlCiB0cmVhdGVkIGFzIGEgdmFsaWQgcmVzcG9uc2UuCiAKIGJ1aWxkX29wZW5lciAtLSBGdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgT3BlbmVyRGlyZWN0b3IgaW5zdGFuY2UuCkBAIC0xMDMsNyArMTAzLDggQEAKIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCAoCiAgICAgdXJscGFyc2UsIHVybHNwbGl0LCB1cmxqb2luLCB1bndyYXAsIHF1b3RlLCB1bnF1b3RlLAogICAgIHNwbGl0dHlwZSwgc3BsaXRob3N0LCBzcGxpdHBvcnQsIHNwbGl0dXNlciwgc3BsaXRwYXNzd2QsCi0gICAgc3BsaXRhdHRyLCBzcGxpdHF1ZXJ5LCBzcGxpdHZhbHVlLCBzcGxpdHRhZywgdG9fYnl0ZXMsIHVybHVucGFyc2UpCisgICAgc3BsaXRhdHRyLCBzcGxpdHF1ZXJ5LCBzcGxpdHZhbHVlLCBzcGxpdHRhZywgdG9fYnl0ZXMsCisgICAgdW5xdW90ZV90b19ieXRlcywgdXJsdW5wYXJzZSkKIGZyb20gdXJsbGliLnJlc3BvbnNlIGltcG9ydCBhZGRpbmZvdXJsLCBhZGRjbG9zZWhvb2sKIAogIyBjaGVjayBmb3IgU1NMCkBAIC0xMjEsNyArMTIyLDcgQEAKICAgICAnSFRUUFBhc3N3b3JkTWdyJywgJ0hUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG0nLAogICAgICdBYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXInLCAnSFRUUEJhc2ljQXV0aEhhbmRsZXInLCAnUHJveHlCYXNpY0F1dGhIYW5kbGVyJywKICAgICAnQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlcicsICdIVFRQRGlnZXN0QXV0aEhhbmRsZXInLCAnUHJveHlEaWdlc3RBdXRoSGFuZGxlcicsCi0gICAgJ0hUVFBIYW5kbGVyJywgJ0ZpbGVIYW5kbGVyJywgJ0ZUUEhhbmRsZXInLCAnQ2FjaGVGVFBIYW5kbGVyJywKKyAgICAnSFRUUEhhbmRsZXInLCAnRmlsZUhhbmRsZXInLCAnRlRQSGFuZGxlcicsICdDYWNoZUZUUEhhbmRsZXInLCAnRGF0YUhhbmRsZXInLAogICAgICdVbmtub3duSGFuZGxlcicsICdIVFRQRXJyb3JQcm9jZXNzb3InLAogICAgICMgRnVuY3Rpb25zCiAgICAgJ3VybG9wZW4nLCAnaW5zdGFsbF9vcGVuZXInLCAnYnVpbGRfb3BlbmVyJywKQEAgLTE0MCwxMyArMTQxLDkgQEAKICAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGVmYXVsdDoKICAgICAgICAgaWYgbm90IF9oYXZlX3NzbDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NTTCBzdXBwb3J0IG5vdCBhdmFpbGFibGUnKQotICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgotICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKLSAgICAgICAgaWYgY2FmaWxlIG9yIGNhcGF0aDoKLSAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZSwgY2FwYXRoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPWNhZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGF0aD1jYXBhdGgpCiAgICAgICAgIGh0dHBzX2hhbmRsZXIgPSBIVFRQU0hhbmRsZXIoY29udGV4dD1jb250ZXh0LCBjaGVja19ob3N0bmFtZT1UcnVlKQogICAgICAgICBvcGVuZXIgPSBidWlsZF9vcGVuZXIoaHR0cHNfaGFuZGxlcikKICAgICBlbGlmIF9vcGVuZXIgaXMgTm9uZToKQEAgLTIyNyw3ICsyMjQsNyBAQAogICAgIGZvciB0ZW1wX2ZpbGUgaW4gX3VybF90ZW1wZmlsZXM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayh0ZW1wX2ZpbGUpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlbCBfdXJsX3RlbXBmaWxlc1s6XQpAQCAtMjU4LDI0ICsyNTUsNjAgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkYXRhPU5vbmUsIGhlYWRlcnM9e30sCiAgICAgICAgICAgICAgICAgIG9yaWdpbl9yZXFfaG9zdD1Ob25lLCB1bnZlcmlmaWFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgIG1ldGhvZD1Ob25lKToKLSAgICAgICAgIyB1bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKSAtLT4gJ3R5cGU6Ly9ob3N0L3BhdGgnCi0gICAgICAgIHNlbGYuZnVsbF91cmwgPSB1bndyYXAodXJsKQotICAgICAgICBzZWxmLmZ1bGxfdXJsLCBzZWxmLmZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5mdWxsX3VybCkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmZ1bGxfdXJsID0gdXJsCiAgICAgICAgIHNlbGYuaGVhZGVycyA9IHt9CisgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMgPSB7fQorICAgICAgICBzZWxmLl9kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICAgICAgIHNlbGYuX3R1bm5lbF9ob3N0ID0gTm9uZQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLmFkZF9oZWFkZXIoa2V5LCB2YWx1ZSkKLSAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycyA9IHt9CiAgICAgICAgIGlmIG9yaWdpbl9yZXFfaG9zdCBpcyBOb25lOgogICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0ID0gcmVxdWVzdF9ob3N0KHNlbGYpCiAgICAgICAgIHNlbGYub3JpZ2luX3JlcV9ob3N0ID0gb3JpZ2luX3JlcV9ob3N0CiAgICAgICAgIHNlbGYudW52ZXJpZmlhYmxlID0gdW52ZXJpZmlhYmxlCi0gICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisgICAgICAgIGlmIG1ldGhvZDoKKyAgICAgICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnVsbF91cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6CisgICAgICAgICAgICByZXR1cm4gJ3t9I3t9Jy5mb3JtYXQoc2VsZi5fZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBzZWxmLl9mdWxsX3VybAorCisgICAgQGZ1bGxfdXJsLnNldHRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmLCB1cmwpOgorICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSB1bndyYXAodXJsKQorICAgICAgICBzZWxmLl9mdWxsX3VybCwgc2VsZi5mcmFnbWVudCA9IHNwbGl0dGFnKHNlbGYuX2Z1bGxfdXJsKQogICAgICAgICBzZWxmLl9wYXJzZSgpCiAKKyAgICBAZnVsbF91cmwuZGVsZXRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmKToKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSBOb25lCisgICAgICAgIHNlbGYuZnJhZ21lbnQgPSBOb25lCisgICAgICAgIHNlbGYuc2VsZWN0b3IgPSAnJworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYXRhCisKKyAgICBAZGF0YS5zZXR0ZXIKKyAgICBkZWYgZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YSAhPSBzZWxmLl9kYXRhOgorICAgICAgICAgICAgc2VsZi5fZGF0YSA9IGRhdGEKKyAgICAgICAgICAgICMgaXNzdWUgMTY0NjQKKyAgICAgICAgICAgICMgaWYgd2UgY2hhbmdlIGRhdGEgd2UgbmVlZCB0byByZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyCisgICAgICAgICAgICAjIChjYXVzZSBpdCdzIG1vc3QgcHJvYmFibHkgY2FsY3VsYXRlZCBmb3IgcHJldmlvdXMgdmFsdWUpCisgICAgICAgICAgICBpZiBzZWxmLmhhc19oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIik6CisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpCisKKyAgICBAZGF0YS5kZWxldGVyCisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKKwogICAgIGRlZiBfcGFyc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYudHlwZSwgcmVzdCA9IHNwbGl0dHlwZShzZWxmLmZ1bGxfdXJsKQorICAgICAgICBzZWxmLnR5cGUsIHJlc3QgPSBzcGxpdHR5cGUoc2VsZi5fZnVsbF91cmwpCiAgICAgICAgIGlmIHNlbGYudHlwZSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB1cmwgdHlwZTogJXIiICUgc2VsZi5mdWxsX3VybCkKICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnNlbGVjdG9yID0gc3BsaXRob3N0KHJlc3QpCkBAIC0yODQsNjIgKzMxNywxMSBAQAogCiAgICAgZGVmIGdldF9tZXRob2Qoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kLiIiIgotICAgICAgICBpZiBzZWxmLm1ldGhvZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1ldGhvZAotICAgICAgICBlbGlmIHNlbGYuZGF0YSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAiUE9TVCIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiR0VUIgorICAgICAgICBkZWZhdWx0X21ldGhvZCA9ICJQT1NUIiBpZiBzZWxmLmRhdGEgaXMgbm90IE5vbmUgZWxzZSAiR0VUIgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAnbWV0aG9kJywgZGVmYXVsdF9tZXRob2QpCiAKICAgICBkZWYgZ2V0X2Z1bGxfdXJsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmZyYWdtZW50OgotICAgICAgICAgICAgcmV0dXJuICclcyMlcycgJSAoc2VsZi5mdWxsX3VybCwgc2VsZi5mcmFnbWVudCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bGxfdXJsCi0KLSAgICAjIEJlZ2luIGRlcHJlY2F0ZWQgbWV0aG9kcwotCi0gICAgZGVmIGFkZF9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5hZGRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQotCi0gICAgZGVmIGhhc19kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5oYXNfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSBpcyBub3QgTm9uZQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQotCi0gICAgZGVmIGdldF90eXBlKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfdHlwZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYudHlwZQotCi0gICAgZGVmIGdldF9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfaG9zdCBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuaG9zdAotCi0gICAgZGVmIGdldF9zZWxlY3RvcihzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X3NlbGVjdG9yIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RvcgotCi0gICAgZGVmIGlzX3VudmVyaWZpYWJsZShzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi51bnZlcmlmaWFibGUKLQotICAgIGRlZiBnZXRfb3JpZ2luX3JlcV9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0IG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5vcmlnaW5fcmVxX2hvc3QKLQotICAgICMgRW5kIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgICAgICByZXR1cm4gc2VsZi5mdWxsX3VybAogCiAgICAgZGVmIHNldF9wcm94eShzZWxmLCBob3N0LCB0eXBlKToKICAgICAgICAgaWYgc2VsZi50eXBlID09ICdodHRwcycgYW5kIG5vdCBzZWxmLl90dW5uZWxfaG9zdDoKQEAgLTM2OSw2ICszNTEsMTAgQEAKICAgICAgICAgICAgIGhlYWRlcl9uYW1lLAogICAgICAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycy5nZXQoaGVhZGVyX25hbWUsIGRlZmF1bHQpKQogCisgICAgZGVmIHJlbW92ZV9oZWFkZXIoc2VsZiwgaGVhZGVyX25hbWUpOgorICAgICAgICBzZWxmLmhlYWRlcnMucG9wKGhlYWRlcl9uYW1lLCBOb25lKQorICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLnBvcChoZWFkZXJfbmFtZSwgTm9uZSkKKwogICAgIGRlZiBoZWFkZXJfaXRlbXMoc2VsZik6CiAgICAgICAgIGhkcnMgPSBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLmNvcHkoKQogICAgICAgICBoZHJzLnVwZGF0ZShzZWxmLmhlYWRlcnMpCkBAIC01MzEsNyArNTE3LDggQEAKICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCiAgICAgZGVmYXVsdF9jbGFzc2VzID0gW1Byb3h5SGFuZGxlciwgVW5rbm93bkhhbmRsZXIsIEhUVFBIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICBIVFRQRGVmYXVsdEVycm9ySGFuZGxlciwgSFRUUFJlZGlyZWN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3Nvcl0KKyAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgRGF0YUhhbmRsZXJdCiAgICAgaWYgaGFzYXR0cihodHRwLmNsaWVudCwgIkhUVFBTQ29ubmVjdGlvbiIpOgogICAgICAgICBkZWZhdWx0X2NsYXNzZXMuYXBwZW5kKEhUVFBTSGFuZGxlcikKICAgICBza2lwID0gc2V0KCkKQEAgLTEyNDYsMTEgKzEyMzMsMTcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLnNlbGVjdG9yLCByZXEuZGF0YSwgaGVhZGVycykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgogICAgICAgICAgICAgaC5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICAjIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCB1cyBhICdDb25uZWN0aW9uOiBjbG9zZScgaGVhZGVyLAorICAgICAgICAgICAgIyBIVFRQQ29ubmVjdGlvbiBhc3N1bWVzIHRoZSBzb2NrZXQgc2hvdWxkIGJlIGxlZnQgb3Blbi4gTWFudWFsbHkKKyAgICAgICAgICAgICMgbWFyayB0aGUgc29ja2V0IHRvIGJlIGNsb3NlZCB3aGVuIHRoaXMgcmVzcG9uc2Ugb2JqZWN0IGdvZXMgYXdheS4KKyAgICAgICAgICAgIGlmIGguc29jazoKKyAgICAgICAgICAgICAgICBoLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGguc29jayA9IE5vbmUKIAogICAgICAgICByLnVybCA9IHJlcS5nZXRfZnVsbF91cmwoKQogICAgICAgICAjIFRoaXMgbGluZSByZXBsYWNlcyB0aGUgLm1zZyBhdHRyaWJ1dGUgb2YgdGhlIEhUVFBSZXNwb25zZQpAQCAtMTQ0NSw3ICsxNDM4LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBob3N0ID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKG1zZykKICAgICAgICAgcGF0aCwgYXR0cnMgPSBzcGxpdGF0dHIocmVxLnNlbGVjdG9yKQogICAgICAgICBkaXJzID0gcGF0aC5zcGxpdCgnLycpCkBAIC0xNTMxLDYgKzE1MjQsMzYgQEAKICAgICAgICAgc2VsZi5jYWNoZS5jbGVhcigpCiAgICAgICAgIHNlbGYudGltZW91dC5jbGVhcigpCiAKK2NsYXNzIERhdGFIYW5kbGVyKEJhc2VIYW5kbGVyKToKKyAgICBkZWYgZGF0YV9vcGVuKHNlbGYsIHJlcSk6CisgICAgICAgICMgZGF0YSBVUkxzIGFzIHNwZWNpZmllZCBpbiBSRkMgMjM5Ny4KKyAgICAgICAgIworICAgICAgICAjIGlnbm9yZXMgUE9TVGVkIGRhdGEKKyAgICAgICAgIworICAgICAgICAjIHN5bnRheDoKKyAgICAgICAgIyBkYXRhdXJsICAgOj0gImRhdGE6IiBbIG1lZGlhdHlwZSBdIFsgIjtiYXNlNjQiIF0gIiwiIGRhdGEKKyAgICAgICAgIyBtZWRpYXR5cGUgOj0gWyB0eXBlICIvIiBzdWJ0eXBlIF0gKiggIjsiIHBhcmFtZXRlciApCisgICAgICAgICMgZGF0YSAgICAgIDo9ICp1cmxjaGFyCisgICAgICAgICMgcGFyYW1ldGVyIDo9IGF0dHJpYnV0ZSAiPSIgdmFsdWUKKyAgICAgICAgdXJsID0gcmVxLmZ1bGxfdXJsCisKKyAgICAgICAgc2NoZW1lLCBkYXRhID0gdXJsLnNwbGl0KCI6IiwxKQorICAgICAgICBtZWRpYXR5cGUsIGRhdGEgPSBkYXRhLnNwbGl0KCIsIiwxKQorCisgICAgICAgICMgZXZlbiBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTHMgbWlnaHQgYmUgcXVvdGVkIHNvIHVucXVvdGUgaW4gYW55IGNhc2U6CisgICAgICAgIGRhdGEgPSB1bnF1b3RlX3RvX2J5dGVzKGRhdGEpCisgICAgICAgIGlmIG1lZGlhdHlwZS5lbmRzd2l0aCgiO2Jhc2U2NCIpOgorICAgICAgICAgICAgZGF0YSA9IGJhc2U2NC5kZWNvZGVieXRlcyhkYXRhKQorICAgICAgICAgICAgbWVkaWF0eXBlID0gbWVkaWF0eXBlWzotN10KKworICAgICAgICBpZiBub3QgbWVkaWF0eXBlOgorICAgICAgICAgICAgbWVkaWF0eXBlID0gInRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSIKKworICAgICAgICBoZWFkZXJzID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygiQ29udGVudC10eXBlOiAlc1xuQ29udGVudC1sZW5ndGg6ICVkXG4iICUKKyAgICAgICAgICAgIChtZWRpYXR5cGUsIGxlbihkYXRhKSkpCisKKyAgICAgICAgcmV0dXJuIGFkZGluZm91cmwoaW8uQnl0ZXNJTyhkYXRhKSwgaGVhZGVycywgdXJsKQorCiAKICMgQ29kZSBtb3ZlIGZyb20gdGhlIG9sZCB1cmxsaWIgbW9kdWxlCiAKQEAgLTE2NTQsMjAgKzE2NzcsMjAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKSh1cmwpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIG5hbWUpKHVybCwgZGF0YSkKLSAgICAgICAgZXhjZXB0IEhUVFBFcnJvcjoKKyAgICAgICAgZXhjZXB0IChIVFRQRXJyb3IsIFVSTEVycm9yKToKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKIAogICAgIGRlZiBvcGVuX3Vua25vd24oc2VsZiwgZnVsbHVybCwgZGF0YT1Ob25lKToKICAgICAgICAgIiIiT3ZlcnJpZGFibGUgaW50ZXJmYWNlIHRvIG9wZW4gdW5rbm93biBVUkwgdHlwZS4iIiIKICAgICAgICAgdHlwZSwgdXJsID0gc3BsaXR0eXBlKGZ1bGx1cmwpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3VybCBlcnJvcicsICd1bmtub3duIHVybCB0eXBlJywgdHlwZSkKKyAgICAgICAgcmFpc2UgT1NFcnJvcigndXJsIGVycm9yJywgJ3Vua25vd24gdXJsIHR5cGUnLCB0eXBlKQogCiAgICAgZGVmIG9wZW5fdW5rbm93bl9wcm94eShzZWxmLCBwcm94eSwgZnVsbHVybCwgZGF0YT1Ob25lKToKICAgICAgICAgIiIiT3ZlcnJpZGFibGUgaW50ZXJmYWNlIHRvIG9wZW4gdW5rbm93biBVUkwgdHlwZS4iIiIKICAgICAgICAgdHlwZSwgdXJsID0gc3BsaXR0eXBlKGZ1bGx1cmwpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3VybCBlcnJvcicsICdpbnZhbGlkIHByb3h5IGZvciAlcycgJSB0eXBlLCBwcm94eSkKKyAgICAgICAgcmFpc2UgT1NFcnJvcigndXJsIGVycm9yJywgJ2ludmFsaWQgcHJveHkgZm9yICVzJyAlIHR5cGUsIHByb3h5KQogCiAgICAgIyBFeHRlcm5hbCBpbnRlcmZhY2UKICAgICBkZWYgcmV0cmlldmUoc2VsZiwgdXJsLCBmaWxlbmFtZT1Ob25lLCByZXBvcnRob29rPU5vbmUsIGRhdGE9Tm9uZSk6CkBAIC0xNjgzLDcgKzE3MDYsNyBAQAogICAgICAgICAgICAgICAgIGhkcnMgPSBmcC5pbmZvKCkKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDJwYXRobmFtZShzcGxpdGhvc3QodXJsMSlbMV0pLCBoZHJzCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmcCA9IHNlbGYub3Blbih1cmwsIGRhdGEpCiAgICAgICAgIHRyeToKQEAgLTE3NzYsNyArMTc5OSw3IEBACiAgICAgICAgICAgICAgICAgaWYgcHJveHlfYnlwYXNzKHJlYWxob3N0KToKICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHJlYWxob3N0CiAKLSAgICAgICAgaWYgbm90IGhvc3Q6IHJhaXNlIElPRXJyb3IoJ2h0dHAgZXJyb3InLCAnbm8gaG9zdCBnaXZlbicpCisgICAgICAgIGlmIG5vdCBob3N0OiByYWlzZSBPU0Vycm9yKCdodHRwIGVycm9yJywgJ25vIGhvc3QgZ2l2ZW4nKQogCiAgICAgICAgIGlmIHByb3h5X3Bhc3N3ZDoKICAgICAgICAgICAgIHByb3h5X3Bhc3N3ZCA9IHVucXVvdGUocHJveHlfcGFzc3dkKQpAQCAtMTg0OSw3ICsxODcyLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuaHR0cF9lcnJvcl9kZWZhdWx0KHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycykKIAogICAgIGRlZiBodHRwX2Vycm9yX2RlZmF1bHQoc2VsZiwgdXJsLCBmcCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzKToKLSAgICAgICAgIiIiRGVmYXVsdCBlcnJvciBoYW5kbGVyOiBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgcmFpc2UgSU9FcnJvci4iIiIKKyAgICAgICAgIiIiRGVmYXVsdCBlcnJvciBoYW5kbGVyOiBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgcmFpc2UgT1NFcnJvci4iIiIKICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICByYWlzZSBIVFRQRXJyb3IodXJsLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIE5vbmUpCiAKQEAgLTE5NzYsNyArMTk5OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFt0eXBlLCBkYXRhXSA9IHVybC5zcGxpdCgnLCcsIDEpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQogICAgICAgICBpZiBub3QgdHlwZToKICAgICAgICAgICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJJwogICAgICAgICBzZW1pID0gdHlwZS5yZmluZCgnOycpCkBAIC0yNDI1LDcgKzI0NDgsNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaG9zdElQID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG9ubHkpCiAgICAgICAgICAgICAgICAgICAgIGhvc3RJUCA9IGlwMm51bShob3N0SVApCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgYmFzZSA9IGlwMm51bShtLmdyb3VwKDEpKQpAQCAtMjUxMSw3ICsyNTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXNbJ2h0dHBzJ10gPSAnaHR0cHM6Ly8lcycgJSBwcm94eVNlcnZlcgogICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllc1snZnRwJ10gPSAnZnRwOi8vJXMnICUgcHJveHlTZXJ2ZXIKICAgICAgICAgICAgIGludGVybmV0U2V0dGluZ3MuQ2xvc2UoKQotICAgICAgICBleGNlcHQgKFdpbmRvd3NFcnJvciwgVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICAgIyBFaXRoZXIgcmVnaXN0cnkga2V5IG5vdCBmb3VuZCBldGMsIG9yIHRoZSB2YWx1ZSBpbiBhbgogICAgICAgICAgICAgIyB1bmV4cGVjdGVkIGZvcm1hdC4KICAgICAgICAgICAgICMgcHJveGllcyBhbHJlYWR5IHNldCB1cCB0byBiZSBlbXB0eSBzbyBub3RoaW5nIHRvIGRvCkBAIC0yNTQxLDcgKzI1NjQsNyBAQAogICAgICAgICAgICAgcHJveHlPdmVycmlkZSA9IHN0cih3aW5yZWcuUXVlcnlWYWx1ZUV4KGludGVybmV0U2V0dGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm94eU92ZXJyaWRlJylbMF0pCiAgICAgICAgICAgICAjIF5eXl4gUmV0dXJuZWQgYXMgVW5pY29kZSBidXQgcHJvYmxlbXMgaWYgbm90IGNvbnZlcnRlZCB0byBBU0NJSQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIGlmIG5vdCBwcm94eUVuYWJsZSBvciBub3QgcHJveHlPdmVycmlkZToKICAgICAgICAgICAgIHJldHVybiAwCkBAIC0yNTUyLDEzICsyNTc1LDEzIEBACiAgICAgICAgICAgICBhZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUocmF3SG9zdCkKICAgICAgICAgICAgIGlmIGFkZHIgIT0gcmF3SG9zdDoKICAgICAgICAgICAgICAgICBob3N0LmFwcGVuZChhZGRyKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnFkbiA9IHNvY2tldC5nZXRmcWRuKHJhd0hvc3QpCiAgICAgICAgICAgICBpZiBmcWRuICE9IHJhd0hvc3Q6CiAgICAgICAgICAgICAgICAgaG9zdC5hcHBlbmQoZnFkbikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgbWFrZSBhIGNoZWNrIHZhbHVlIGxpc3QgZnJvbSB0aGUgcmVnaXN0cnkgZW50cnk6IHJlcGxhY2UgdGhlCiAgICAgICAgICMgJzxsb2NhbD4nIHN0cmluZyBieSB0aGUgbG9jYWxob3N0IGVudHJ5IGFuZCB0aGUgY29ycmVzcG9uZGluZwpkaWZmIC0tZ2l0IGEvTGliL3V1aWQucHkgYi9MaWIvdXVpZC5weQppbmRleCBkNWMzMTYwLi4zODVmYjliIDEwMDY0NAotLS0gYS9MaWIvdXVpZC5weQorKysgYi9MaWIvdXVpZC5weQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBpZiBsZW4oYnl0ZXMpICE9IDE2OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2J5dGVzIGlzIG5vdCBhIDE2LWNoYXIgc3RyaW5nJykKICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ5dGVzLCBieXRlc18pLCByZXByKGJ5dGVzKQotICAgICAgICAgICAgaW50ID0gaW50XygoJyUwMngnKjE2KSAlIHR1cGxlKGJ5dGVzKSwgMTYpCisgICAgICAgICAgICBpbnQgPSBpbnRfLmZyb21fYnl0ZXMoYnl0ZXMsIGJ5dGVvcmRlcj0nYmlnJykKICAgICAgICAgaWYgZmllbGRzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbGVuKGZpZWxkcykgIT0gNjoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmaWVsZHMgaXMgbm90IGEgNi10dXBsZScpCkBAIC0zMzcsNyArMzM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXNoZXMuIFRoZXNlIHNob3VsZCBiZSBpZ25vcmVkIGluIGZhdm9yIG9mIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWFsIE1BQyBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKICAgICByZXR1cm4gTm9uZQogCkBAIC0zNzksNyArMzc5LDcgQEAKICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBpcGUgPSBvcy5wb3Blbihvcy5wYXRoLmpvaW4oZGlyLCAnaXBjb25maWcnKSArICcgL2FsbCcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvX19pbml0X18ucHkgYi9MaWIvdmVudi9fX2luaXRfXy5weQppbmRleCAzNjA2MzcwLi4zYjVmNWZhIDEwMDY0NAotLS0gYS9MaWIvdmVudi9fX2luaXRfXy5weQorKysgYi9MaWIvdmVudi9fX2luaXRfXy5weQpAQCAtMjQsMTAgKzI0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgIC0tdXBncmFkZSAgICAgICAgICAgICBVcGdyYWRlIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgdG8gdXNlIHRoaXMgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuCisgIC0td2l0aG91dC1waXAgICAgICAgICBTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IChwaXAgaXMgYm9vdHN0cmFwcGVkIGJ5IGRlZmF1bHQpCiAiIiIKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgdHlwZXMKQEAgLTU2LDE0ICs1OSwxNyBAQAogICAgIDpwYXJhbSBzeW1saW5rczogSWYgVHJ1ZSwgYXR0ZW1wdCB0byBzeW1saW5rIHJhdGhlciB0aGFuIGNvcHkgZmlsZXMgaW50bwogICAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudC4KICAgICA6cGFyYW0gdXBncmFkZTogSWYgVHJ1ZSwgdXBncmFkZSBhbiBleGlzdGluZyB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgIDpwYXJhbSB3aXRoX3BpcDogSWYgVHJ1ZSwgZW5zdXJlIHBpcCBpcyBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50CiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLAotICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSk6CisgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSk6CiAgICAgICAgIHNlbGYuc3lzdGVtX3NpdGVfcGFja2FnZXMgPSBzeXN0ZW1fc2l0ZV9wYWNrYWdlcwogICAgICAgICBzZWxmLmNsZWFyID0gY2xlYXIKICAgICAgICAgc2VsZi5zeW1saW5rcyA9IHN5bWxpbmtzCiAgICAgICAgIHNlbGYudXBncmFkZSA9IHVwZ3JhZGUKKyAgICAgICAgc2VsZi53aXRoX3BpcCA9IHdpdGhfcGlwCiAKICAgICBkZWYgY3JlYXRlKHNlbGYsIGVudl9kaXIpOgogICAgICAgICAiIiIKQEAgLTc2LDEwICs4MiwyMCBAQAogICAgICAgICBjb250ZXh0ID0gc2VsZi5lbnN1cmVfZGlyZWN0b3JpZXMoZW52X2RpcikKICAgICAgICAgc2VsZi5jcmVhdGVfY29uZmlndXJhdGlvbihjb250ZXh0KQogICAgICAgICBzZWxmLnNldHVwX3B5dGhvbihjb250ZXh0KQorICAgICAgICBpZiBzZWxmLndpdGhfcGlwOgorICAgICAgICAgICAgc2VsZi5fc2V0dXBfcGlwKGNvbnRleHQpCiAgICAgICAgIGlmIG5vdCBzZWxmLnVwZ3JhZGU6CiAgICAgICAgICAgICBzZWxmLnNldHVwX3NjcmlwdHMoY29udGV4dCkKICAgICAgICAgICAgIHNlbGYucG9zdF9zZXR1cChjb250ZXh0KQogCisgICAgZGVmIGNsZWFyX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwYXRoLCBmbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZuKSBvciBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZuKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZuKQorCiAgICAgZGVmIGVuc3VyZV9kaXJlY3RvcmllcyhzZWxmLCBlbnZfZGlyKToKICAgICAgICAgIiIiCiAgICAgICAgIENyZWF0ZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBlbnZpcm9ubWVudC4KQEAgLTkxLDExICsxMDcsMTEgQEAKICAgICAgICAgZGVmIGNyZWF0ZV9pZl9uZWVkZWQoZCk6CiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZCk6CiAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZCkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2xpbmsoZCkgb3Igb3MucGF0aC5pc2ZpbGUoZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXInICUgZCkKIAotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhlbnZfZGlyKSBhbmQgbm90IChzZWxmLmNsZWFyIG9yIHNlbGYudXBncmFkZSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdEaXJlY3RvcnkgZXhpc3RzOiAlcycgJSBlbnZfZGlyKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhlbnZfZGlyKSBhbmQgc2VsZi5jbGVhcjoKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZW52X2RpcikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfZGlyZWN0b3J5KGVudl9kaXIpCiAgICAgICAgIGNvbnRleHQgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKQogICAgICAgICBjb250ZXh0LmVudl9kaXIgPSBlbnZfZGlyCiAgICAgICAgIGNvbnRleHQuZW52X25hbWUgPSBvcy5wYXRoLnNwbGl0KGVudl9kaXIpWzFdCkBAIC0yMTYsNiArMjMyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRzdCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAorICAgIGRlZiBfc2V0dXBfcGlwKHNlbGYsIGNvbnRleHQpOgorICAgICAgICAiIiJJbnN0YWxscyBvciB1cGdyYWRlcyBwaXAgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IiIiCisgICAgICAgICMgV2UgcnVuIGVuc3VyZXBpcCBpbiBpc29sYXRlZCBtb2RlIHRvIGF2b2lkIHNpZGUgZWZmZWN0cyBmcm9tCisgICAgICAgICMgZW52aXJvbm1lbnQgdmFycywgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBhbnl0aGluZyBlbHNlCisgICAgICAgICMgaW50ZW5kZWQgZm9yIHRoZSBnbG9iYWwgUHl0aG9uIGVudmlyb25tZW50CisgICAgICAgIGNtZCA9IFtjb250ZXh0LmVudl9leGUsICctSW0nLCAnZW5zdXJlcGlwJywgJy0tdXBncmFkZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tZGVmYXVsdC1waXAnXQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKwogICAgIGRlZiBzZXR1cF9zY3JpcHRzKHNlbGYsIGNvbnRleHQpOgogICAgICAgICAiIiIKICAgICAgICAgU2V0IHVwIHNjcmlwdHMgaW50byB0aGUgY3JlYXRlZCBlbnZpcm9ubWVudCBmcm9tIGEgZGlyZWN0b3J5LgpAQCAtMjUzLDcgKzI3OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBwcm9jZXNzZWQuCiAgICAgICAgICIiIgogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfRElSX18nLCBjb250ZXh0LmVudl9kaXIpCi0gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9OQU1FX18nLCBjb250ZXh0LnByb21wdCkKKyAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX05BTUVfXycsIGNvbnRleHQuZW52X25hbWUpCisgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9QUk9NUFRfXycsIGNvbnRleHQucHJvbXB0KQogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfQklOX05BTUVfXycsIGNvbnRleHQuYmluX25hbWUpCiAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9QWVRIT05fXycsIGNvbnRleHQuZW52X2V4ZSkKICAgICAgICAgcmV0dXJuIHRleHQKQEAgLTMwOCw3ICszMzQsOCBAQAogICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weW1vZGUoc3JjZmlsZSwgZHN0ZmlsZSkKIAogCi1kZWYgY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UpOgorZGVmIGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSk6CiAgICAgIiIiCiAgICAgQ3JlYXRlIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpbiBhIGRpcmVjdG9yeS4KIApAQCAtMzI0LDkgKzM1MSwxMSBAQAogICAgICAgICAgICAgICAgICAgcmFpc2VkLgogICAgIDpwYXJhbSBzeW1saW5rczogSWYgVHJ1ZSwgYXR0ZW1wdCB0byBzeW1saW5rIHJhdGhlciB0aGFuIGNvcHkgZmlsZXMgaW50bwogICAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudC4KKyAgICA6cGFyYW0gd2l0aF9waXA6IElmIFRydWUsIGVuc3VyZSBwaXAgaXMgaW5zdGFsbGVkIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudAogICAgICIiIgogICAgIGJ1aWxkZXIgPSBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPXN5c3RlbV9zaXRlX3BhY2thZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1jbGVhciwgc3ltbGlua3M9c3ltbGlua3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9Y2xlYXIsIHN5bWxpbmtzPXN5bWxpbmtzLCB3aXRoX3BpcD13aXRoX3BpcCkKICAgICBidWlsZGVyLmNyZWF0ZShlbnZfZGlyKQogCiBkZWYgbWFpbihhcmdzPU5vbmUpOgpAQCAtMzYwLDI4ICszODksNDAgQEAKICAgICAgICAgICAgIHVzZV9zeW1saW5rcyA9IEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB1c2Vfc3ltbGlua3MgPSBUcnVlCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3ltbGlua3MnLCBkZWZhdWx0PXVzZV9zeW1saW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdzeW1saW5rcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJ5IHRvIHVzZSBzeW1saW5rcyByYXRoZXIgdGhhbiBjb3BpZXMsICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHN5bWxpbmtzIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zeW1saW5rcycsIGRlZmF1bHQ9dXNlX3N5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nc3ltbGlua3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJ5IHRvIHVzZSBzeW1saW5rcyByYXRoZXIgdGhhbiBjb3BpZXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZW4gc3ltbGlua3MgYXJlIG5vdCB0aGUgZGVmYXVsdCBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1jb3BpZXMnLCBkZWZhdWx0PW5vdCB1c2Vfc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2ZhbHNlJywgZGVzdD0nc3ltbGlua3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJ5IHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2ZW4gd2hlbiBzeW1saW5rcyBhcmUgdGhlIGRlZmF1bHQgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNsZWFyJywgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjbGVhcicsIGhlbHA9J0RlbGV0ZSB0aGUgZW52aXJvbm1lbnQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlyZWN0b3J5IGlmIGl0IGFscmVhZHkgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhpc3RzLiBJZiBub3Qgc3BlY2lmaWVkIGFuZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgZGlyZWN0b3J5IGV4aXN0cywgYW4gZXJyb3InCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgcmFpc2VkLicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY2xlYXInLCBoZWxwPSdEZWxldGUgdGhlIGNvbnRlbnRzIG9mIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbnZpcm9ubWVudCBkaXJlY3RvcnkgaWYgaXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxyZWFkeSBleGlzdHMsIGJlZm9yZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbnZpcm9ubWVudCBjcmVhdGlvbi4nKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXVwZ3JhZGUnLCBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VwZ3JhZGUnLCBoZWxwPSdVcGdyYWRlIHRoZSBlbnZpcm9ubWVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gdXNlIHRoaXMgdmVyc2lvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvZiBQeXRob24sIGFzc3VtaW5nIFB5dGhvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMgYmVlbiB1cGdyYWRlZCBpbi1wbGFjZS4nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXdpdGhvdXQtcGlwJywgZGVzdD0nd2l0aF9waXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2tpcHMgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgcGlwIGluIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlydHVhbCBlbnZpcm9ubWVudCAocGlwIGlzIGJvb3RzdHJhcHBlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnkgZGVmYXVsdCknKQogICAgICAgICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKICAgICAgICAgaWYgb3B0aW9ucy51cGdyYWRlIGFuZCBvcHRpb25zLmNsZWFyOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneW91IGNhbm5vdCBzdXBwbHkgLS11cGdyYWRlIGFuZCAtLWNsZWFyIHRvZ2V0aGVyLicpCiAgICAgICAgIGJ1aWxkZXIgPSBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPW9wdGlvbnMuc3lzdGVtX3NpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPW9wdGlvbnMuY2xlYXIsIHN5bWxpbmtzPW9wdGlvbnMuc3ltbGlua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGU9b3B0aW9ucy51cGdyYWRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1vcHRpb25zLmNsZWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1vcHRpb25zLnN5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlPW9wdGlvbnMudXBncmFkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aF9waXA9b3B0aW9ucy53aXRoX3BpcCkKICAgICAgICAgZm9yIGQgaW4gb3B0aW9ucy5kaXJzOgogICAgICAgICAgICAgYnVpbGRlci5jcmVhdGUoZCkKIApkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEgYi9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMQppbmRleCAxYzVlZjk4Li5iMTVkZWNiIDEwMDY0NAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMQorKysgYi9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMQpAQCAtMSwyNSArMSw0MCBAQAorZnVuY3Rpb24gZ2xvYmFsOmRlYWN0aXZhdGUgKFtzd2l0Y2hdJE5vbkRlc3RydWN0aXZlKSB7DQorICAgICMgUmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlcw0KKyAgICBpZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCisgICAgICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FIGVudjpQWVRIT05IT01FDQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCkgew0KKyAgICAgICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6VklSVFVBTF9FTlYpIHsNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpWSVJUVUFMX0VOVg0KKyAgICB9DQorDQorICAgIGlmICghJE5vbkRlc3RydWN0aXZlKSB7DQorICAgICAgICAjIFNlbGYgZGVzdHJ1Y3QhDQorICAgICAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpkZWFjdGl2YXRlDQorICAgIH0NCit9DQorDQorZGVhY3RpdmF0ZSAtbm9uZGVzdHJ1Y3RpdmUNCisKICRlbnY6VklSVFVBTF9FTlY9Il9fVkVOVl9ESVJfXyINCiANCi0jIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCi1pZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCi0gICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQotICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCi19DQotDQogIyBTZXQgdGhlIHByb21wdCB0byBpbmNsdWRlIHRoZSBlbnYgbmFtZQ0KKyMgTWFrZSBzdXJlIF9PTERfVklSVFVBTF9QUk9NUFQgaXMgZ2xvYmFsDQorZnVuY3Rpb24gZ2xvYmFsOl9PTERfVklSVFVBTF9QUk9NUFQgeyIifQ0KIGNvcHktaXRlbSBmdW5jdGlvbjpwcm9tcHQgZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KLWZ1bmN0aW9uIHByb21wdCB7DQotICAgIFdyaXRlLUhvc3QgLU5vTmV3bGluZSAtRm9yZWdyb3VuZENvbG9yIEdyZWVuICdbX19WRU5WX05BTUVfX10nDQorZnVuY3Rpb24gZ2xvYmFsOnByb21wdCB7DQorICAgIFdyaXRlLUhvc3QgLU5vTmV3bGluZSAtRm9yZWdyb3VuZENvbG9yIEdyZWVuICdfX1ZFTlZfUFJPTVBUX18nDQogICAgIF9PTERfVklSVFVBTF9QUk9NUFQNCiB9DQogDQpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9udC9EZWFjdGl2YXRlLnBzMSBiL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMWU5NmIuLjAwMDAwMDAKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9EZWFjdGl2YXRlLnBzMQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgUmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlcw0KLWlmIChUZXN0LVBhdGggZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCkgew0KLSAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCi0gICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FIGVudjpQWVRIT05IT01FDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQ0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIIGVudjpQQVRIDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpWSVJUVUFMX0VOVikgew0KLSAgICByZW1vdmUtaXRlbSBlbnY6VklSVFVBTF9FTlYNCi19DQpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQgYi9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdAppbmRleCAzY2ViZTI2Li45ZWFiMTQ3IDEwMDY0NAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdAorKysgYi9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdApAQCAtMTQsNyArMTQsNyBAQAogKQ0KIA0KIHNldCAiX09MRF9WSVJUVUFMX1BST01QVD0lUFJPTVBUJSINCi1zZXQgIlBST01QVD1fX1ZFTlZfTkFNRV9fJVBST01QVCUiDQorc2V0ICJQUk9NUFQ9X19WRU5WX1BST01QVF9fJVBST01QVCUiDQogDQogaWYgZGVmaW5lZCBQWVRIT05IT01FICgNCiAgICAgc2V0ICJfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRT0lUFlUSE9OSE9NRSUiDQpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZSBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKaW5kZXggYzI0MTQ1MC4uN2JiZmZkOSAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCkBAIC01NCw4ICs1NCw4IEBACiAKIGlmIFsgLXogIiRWSVJUVUFMX0VOVl9ESVNBQkxFX1BST01QVCIgXSA7IHRoZW4KICAgICBfT0xEX1ZJUlRVQUxfUFMxPSIkUFMxIgotICAgIGlmIFsgInhfX1ZFTlZfTkFNRV9fIiAhPSB4IF0gOyB0aGVuCi0JUFMxPSJfX1ZFTlZfTkFNRV9fJFBTMSIKKyAgICBpZiBbICJ4X19WRU5WX1BST01QVF9fIiAhPSB4IF0gOyB0aGVuCisJUFMxPSJfX1ZFTlZfUFJPTVBUX18kUFMxIgogICAgIGVsc2UKICAgICBpZiBbICJgYmFzZW5hbWUgXCIkVklSVFVBTF9FTlZcImAiID0gIl9fIiBdIDsgdGhlbgogICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgQXNwZW4gbWFnaWMgZGlyZWN0b3JpZXMKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5jc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkNzllMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoCkBAIC0wLDAgKzEsMzcgQEAKKyMgVGhpcyBmaWxlIG11c3QgYmUgdXNlZCB3aXRoICJzb3VyY2UgYmluL2FjdGl2YXRlLmNzaCIgKmZyb20gY3NoKi4KKyMgWW91IGNhbm5vdCBydW4gaXQgZGlyZWN0bHkuCisjIENyZWF0ZWQgYnkgRGF2aWRlIERpIEJsYXNpIDxkYXZpZGVkYkBnbWFpbC5jb20+LgorIyBQb3J0ZWQgdG8gUHl0aG9uIDMuMyB2ZW52IGJ5IEFuZHJldyBTdmV0bG92IDxhbmRyZXcuc3ZldGxvdkBnbWFpbC5jb20+CisKK2FsaWFzIGRlYWN0aXZhdGUgJ3Rlc3QgJD9fT0xEX1ZJUlRVQUxfUEFUSCAhPSAwICYmIHNldGVudiBQQVRIICIkX09MRF9WSVJUVUFMX1BBVEgiICYmIHVuc2V0IF9PTERfVklSVFVBTF9QQVRIOyByZWhhc2g7IHRlc3QgJD9fT0xEX1ZJUlRVQUxfUFJPTVBUICE9IDAgJiYgc2V0IHByb21wdD0iJF9PTERfVklSVFVBTF9QUk9NUFQiICYmIHVuc2V0IF9PTERfVklSVFVBTF9QUk9NUFQ7IHVuc2V0ZW52IFZJUlRVQUxfRU5WOyB0ZXN0ICJcIToqIiAhPSAibm9uZGVzdHJ1Y3RpdmUiICYmIHVuYWxpYXMgZGVhY3RpdmF0ZScKKworIyBVbnNldCBpcnJlbGF2ZW50IHZhcmlhYmxlcy4KK2RlYWN0aXZhdGUgbm9uZGVzdHJ1Y3RpdmUKKworc2V0ZW52IFZJUlRVQUxfRU5WICJfX1ZFTlZfRElSX18iCisKK3NldCBfT0xEX1ZJUlRVQUxfUEFUSD0iJFBBVEgiCitzZXRlbnYgUEFUSCAiJFZJUlRVQUxfRU5WL19fVkVOVl9CSU5fTkFNRV9fOiRQQVRIIgorCisKK3NldCBfT0xEX1ZJUlRVQUxfUFJPTVBUPSIkcHJvbXB0IgorCitpZiAoISAiJD9WSVJUVUFMX0VOVl9ESVNBQkxFX1BST01QVCIpIHRoZW4KKyAgICBpZiAoIl9fVkVOVl9OQU1FX18iICE9ICIiKSB0aGVuCisgICAgICAgIHNldCBlbnZfbmFtZSA9ICJfX1ZFTlZfTkFNRV9fIgorICAgIGVsc2UKKyAgICAgICAgaWYgKGBiYXNlbmFtZSAiVklSVFVBTF9FTlYiYCA9PSAiX18iKSB0aGVuCisgICAgICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgQXNwZW4gbWFnaWMgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly93d3cuemV0YWRldi5jb20vc29mdHdhcmUvYXNwZW4vCisgICAgICAgICAgICBzZXQgZW52X25hbWUgPSBgYmFzZW5hbWUgXGBkaXJuYW1lICIkVklSVFVBTF9FTlYiXGBgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldCBlbnZfbmFtZSA9IGBiYXNlbmFtZSAiJFZJUlRVQUxfRU5WImAKKyAgICAgICAgZW5kaWYKKyAgICBlbmRpZgorICAgIHNldCBwcm9tcHQgPSAiWyRlbnZfbmFtZV0gJHByb21wdCIKKyAgICB1bnNldCBlbnZfbmFtZQorZW5kaWYKKworYWxpYXMgcHlkb2MgcHl0aG9uIC1tIHB5ZG9jCisKK3JlaGFzaApkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MzkxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmZpc2gKQEAgLTAsMCArMSw3NCBAQAorIyBUaGlzIGZpbGUgbXVzdCBiZSB1c2VkIHdpdGggIi4gYmluL2FjdGl2YXRlLmZpc2giICpmcm9tIGZpc2gqIChodHRwOi8vZmlzaHNoZWxsLm9yZykKKyMgeW91IGNhbm5vdCBydW4gaXQgZGlyZWN0bHkKKworZnVuY3Rpb24gZGVhY3RpdmF0ZSAgLWQgIkV4aXQgdmlydHVhbGVudiBhbmQgcmV0dXJuIHRvIG5vcm1hbCBzaGVsbCBlbnZpcm9ubWVudCIKKyAgICAjIHJlc2V0IG9sZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICBpZiB0ZXN0IC1uICIkX09MRF9WSVJUVUFMX1BBVEgiCisgICAgICAgIHNldCAtZ3ggUEFUSCAkX09MRF9WSVJUVUFMX1BBVEgKKyAgICAgICAgc2V0IC1lIF9PTERfVklSVFVBTF9QQVRICisgICAgZW5kCisgICAgaWYgdGVzdCAtbiAiJF9PTERfVklSVFVBTF9QWVRIT05IT01FIgorICAgICAgICBzZXQgLWd4IFBZVEhPTkhPTUUgJF9PTERfVklSVFVBTF9QWVRIT05IT01FCisgICAgICAgIHNldCAtZSBfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQorICAgIGVuZAorCisgICAgaWYgdGVzdCAtbiAiJF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUiCisgICAgICAgIGZ1bmN0aW9ucyAtZSBmaXNoX3Byb21wdAorICAgICAgICBzZXQgLWUgX09MRF9GSVNIX1BST01QVF9PVkVSUklERQorICAgICAgICAuICggYmVnaW4KKyAgICAgICAgICAgICAgICBwcmludGYgImZ1bmN0aW9uIGZpc2hfcHJvbXB0XG5cdCMiCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zIF9vbGRfZmlzaF9wcm9tcHQKKyAgICAgICAgICAgIGVuZCB8IHBzdWIgKQorICAgICAgICBmdW5jdGlvbnMgLWUgX29sZF9maXNoX3Byb21wdAorICAgIGVuZAorCisgICAgc2V0IC1lIFZJUlRVQUxfRU5WCisgICAgaWYgdGVzdCAiJGFyZ3ZbMV0iICE9ICJub25kZXN0cnVjdGl2ZSIKKyAgICAgICAgIyBTZWxmIGRlc3RydWN0IQorICAgICAgICBmdW5jdGlvbnMgLWUgZGVhY3RpdmF0ZQorICAgIGVuZAorZW5kCisKKyMgdW5zZXQgaXJyZWxhdmVudCB2YXJpYWJsZXMKK2RlYWN0aXZhdGUgbm9uZGVzdHJ1Y3RpdmUKKworc2V0IC1neCBWSVJUVUFMX0VOViAiX19WRU5WX0RJUl9fIgorCitzZXQgLWd4IF9PTERfVklSVFVBTF9QQVRIICRQQVRICitzZXQgLWd4IFBBVEggIiRWSVJUVUFMX0VOVi9fX1ZFTlZfQklOX05BTUVfXyIgJFBBVEgKKworIyB1bnNldCBQWVRIT05IT01FIGlmIHNldAoraWYgc2V0IC1xIFBZVEhPTkhPTUUKKyAgICBzZXQgLWd4IF9PTERfVklSVFVBTF9QWVRIT05IT01FICRQWVRIT05IT01FCisgICAgc2V0IC1lIFBZVEhPTkhPTUUKK2VuZAorCitpZiB0ZXN0IC16ICIkVklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiCisgICAgIyBmaXNoIHVzZXMgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGFuIGVudiB2YXIgdG8gZ2VuZXJhdGUgdGhlIHByb21wdC4KKworICAgICMgc2F2ZSB0aGUgY3VycmVudCBmaXNoX3Byb21wdCBmdW5jdGlvbiBhcyB0aGUgZnVuY3Rpb24gX29sZF9maXNoX3Byb21wdAorICAgIC4gKCBiZWdpbgorICAgICAgICAgICAgcHJpbnRmICJmdW5jdGlvbiBfb2xkX2Zpc2hfcHJvbXB0XG5cdCMiCisgICAgICAgICAgICBmdW5jdGlvbnMgZmlzaF9wcm9tcHQKKyAgICAgICAgZW5kIHwgcHN1YiApCisKKyAgICAjIHdpdGggdGhlIG9yaWdpbmFsIHByb21wdCBmdW5jdGlvbiByZW5hbWVkLCB3ZSBjYW4gb3ZlcnJpZGUgd2l0aCBvdXIgb3duLgorICAgIGZ1bmN0aW9uIGZpc2hfcHJvbXB0CisgICAgICAgICMgUHJvbXB0IG92ZXJyaWRlPworICAgICAgICBpZiB0ZXN0IC1uICJfX1ZFTlZfUFJPTVBUX18iCisgICAgICAgICAgICBwcmludGYgIiVzJXMlcyIgIl9fVkVOVl9QUk9NUFRfXyIgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVuZAorICAgICAgICAjIC4uLk90aGVyd2lzZSwgcHJlcGVuZCBlbnYKKyAgICAgICAgc2V0IC1sIF9jaGVja2Jhc2UgKGJhc2VuYW1lICIkVklSVFVBTF9FTlYiKQorICAgICAgICBpZiB0ZXN0ICRfY2hlY2tiYXNlID0gIl9fIgorICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnpldGFkZXYuY29tL3NvZnR3YXJlL2FzcGVuLworICAgICAgICAgICAgcHJpbnRmICIlc1slc10lcyAlcyIgKHNldF9jb2xvciAtYiBibHVlIHdoaXRlKSAoYmFzZW5hbWUgKGRpcm5hbWUgIiRWSVJUVUFMX0VOViIpKSAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZiAiJXMoJXMpJXMlcyIgKHNldF9jb2xvciAtYiBibHVlIHdoaXRlKSAoYmFzZW5hbWUgIiRWSVJUVUFMX0VOViIpIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBzZXQgLWd4IF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUgIiRWSVJUVUFMX0VOViIKK2VuZApkaWZmIC0tZ2l0IGEvTGliL3dhcm5pbmdzLnB5IGIvTGliL3dhcm5pbmdzLnB5CmluZGV4IGVkYmJiNWUuLmE0MjdlMzUgMTAwNjQ0Ci0tLSBhL0xpYi93YXJuaW5ncy5weQorKysgYi9MaWIvd2FybmluZ3MucHkKQEAgLTEsOSArMSw1IEBACiAiIiJQeXRob24gcGFydCBvZiB0aGUgd2FybmluZ3Mgc3Vic3lzdGVtLiIiIgogCi0jIE5vdGU6IGZ1bmN0aW9uIGxldmVsIGltcG9ydHMgc2hvdWxkICpub3QqIGJlIHVzZWQKLSMgaW4gdGhpcyBtb2R1bGUgYXMgaXQgbWF5IGNhdXNlIGltcG9ydCBsb2NrIGRlYWRsb2NrLgotIyBTZWUgYnVnIDY4MzY1OC4KLWltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBzeXMKIAogX19hbGxfXyA9IFsid2FybiIsICJzaG93d2FybmluZyIsICJmb3JtYXR3YXJuaW5nIiwgImZpbHRlcndhcm5pbmdzIiwKQEAgLTE2LDExICsxMiwxMiBAQAogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgogICAgIHRyeToKICAgICAgICAgZmlsZS53cml0ZShmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lKSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcyAjIHRoZSBmaWxlIChwcm9iYWJseSBzdGRlcnIpIGlzIGludmFsaWQgLSB0aGlzIHdhcm5pbmcgZ2V0cyBsb3N0LgogCiBkZWYgZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZT1Ob25lKToKICAgICAiIiJGdW5jdGlvbiB0byBmb3JtYXQgYSB3YXJuaW5nIHRoZSBzdGFuZGFyZCB3YXkuIiIiCisgICAgaW1wb3J0IGxpbmVjYWNoZQogICAgIHMgPSAgIiVzOiVzOiAlczogJXNcbiIgJSAoZmlsZW5hbWUsIGxpbmVubywgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCiAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pIGlmIGxpbmUgaXMgTm9uZSBlbHNlIGxpbmUKICAgICBpZiBsaW5lOgpAQCAtMjMzLDYgKzIzMCw3IEBACiAKICAgICAjIFByaW1lIHRoZSBsaW5lY2FjaGUgZm9yIGZvcm1hdHRpbmcsIGluIGNhc2UgdGhlCiAgICAgIyAiZmlsZSIgaXMgYWN0dWFsbHkgaW4gYSB6aXBmaWxlIG9yIHNvbWV0aGluZy4KKyAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgbGluZWNhY2hlLmdldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscykKIAogICAgIGlmIGFjdGlvbiA9PSAiZXJyb3IiOgpkaWZmIC0tZ2l0IGEvTGliL3dhdmUucHkgYi9MaWIvd2F2ZS5weQppbmRleCA0YTIyMzQ1Li5iNTYzOTVlIDEwMDY0NAotLS0gYS9MaWIvd2F2ZS5weQorKysgYi9MaWIvd2F2ZS5weQpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBsaW5lYXIgc2FtcGxlcykKICAgICAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIGxpbmVhciBzYW1wbGVzKQotICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgICAgIGdldG1hcmtlcnMoKSAgICAtLSByZXR1cm5zIE5vbmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmYyBtb2R1bGUpCkBAIC04MiwxNSArODIsMTQgQEAKIAogX2FycmF5X2ZtdHMgPSBOb25lLCAnYicsICdoJywgTm9uZSwgJ2knCiAKK2ltcG9ydCBhdWRpb29wCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBmcm9tIGNodW5rIGltcG9ydCBDaHVuaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQogCi1kZWYgX2J5dGVzd2FwMyhkYXRhKToKLSAgICBiYSA9IGJ5dGVhcnJheShkYXRhKQotICAgIGJhWzo6M10gPSBkYXRhWzI6OjNdCi0gICAgYmFbMjo6M10gPSBkYXRhWzo6M10KLSAgICByZXR1cm4gYnl0ZXMoYmEpCitfd2F2ZV9wYXJhbXMgPSBuYW1lZHR1cGxlKCdfd2F2ZV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQogCiBjbGFzcyBXYXZlX3JlYWQ6CiAgICAgIiIiVmFyaWFibGVzIHVzZWQgaW4gdGhpcyBjbGFzczoKQEAgLTE2OSw2ICsxNjgsMTMgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTIwNyw5ICsyMTMsOSBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY29tcG5hbWUKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTIzMiwyOSArMjM4LDkgQEAKICAgICAgICAgICAgIHNlbGYuX2RhdGFfc2Vla19uZWVkZWQgPSAwCiAgICAgICAgIGlmIG5mcmFtZXMgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiJycKLSAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoIGluICgyLCA0KSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgZnJvbWZpbGUoKSBtZXRob2QgZG9lcyBub3QgdGFrZQotICAgICAgICAgICAgIyBzb21ldGhpbmcgdGhhdCBvbmx5IGxvb2tzIGxpa2UgYSBmaWxlIG9iamVjdCwgc28KLSAgICAgICAgICAgICMgd2UgaGF2ZSB0byByZWFjaCBpbnRvIHRoZSBpbm5hcmRzIG9mIHRoZSBjaHVuayBvYmplY3QKLSAgICAgICAgICAgIGltcG9ydCBhcnJheQotICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9kYXRhX2NodW5rCi0gICAgICAgICAgICBkYXRhID0gYXJyYXkuYXJyYXkoX2FycmF5X2ZtdHNbc2VsZi5fc2FtcHdpZHRoXSkKLSAgICAgICAgICAgIGFzc2VydCBkYXRhLml0ZW1zaXplID09IHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgbml0ZW1zID0gbmZyYW1lcyAqIHNlbGYuX25jaGFubmVscwotICAgICAgICAgICAgaWYgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoID4gY2h1bmsuY2h1bmtzaXplIC0gY2h1bmsuc2l6ZV9yZWFkOgotICAgICAgICAgICAgICAgIG5pdGVtcyA9IChjaHVuay5jaHVua3NpemUgLSBjaHVuay5zaXplX3JlYWQpIC8vIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgZGF0YS5mcm9tZmlsZShjaHVuay5maWxlLmZpbGUsIG5pdGVtcykKLSAgICAgICAgICAgICMgInRlbGwiIGRhdGEgY2h1bmsgaG93IG11Y2ggd2FzIHJlYWQKLSAgICAgICAgICAgIGNodW5rLnNpemVfcmVhZCA9IGNodW5rLnNpemVfcmVhZCArIG5pdGVtcyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgIyBkbyB0aGUgc2FtZSBmb3IgdGhlIG91dGVybW9zdCBjaHVuawotICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5maWxlCi0gICAgICAgICAgICBjaHVuay5zaXplX3JlYWQgPSBjaHVuay5zaXplX3JlYWQgKyBuaXRlbXMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9ieXRlcygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCi0gICAgICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPT0gMyBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICAgICBkYXRhID0gX2J5dGVzd2FwMyhkYXRhKQorICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0IGFuZCBkYXRhOgogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2NvbnZlcnQoZGF0YSkKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSBzZWxmLl9zb3VuZHBvcyArIGxlbihkYXRhKSAvLyAoc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoKQpAQCAtMzI4LDYgKzMxNCwxMiBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTQwMiw4ICszOTQsOCBAQAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHMgb3Igbm90IHNlbGYuX3NhbXB3aWR0aCBvciBub3Qgc2VsZi5fZnJhbWVyYXRlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25vdCBhbGwgcGFyYW1ldGVycyBzZXQnKQotICAgICAgICByZXR1cm4gc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwgXAotICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLAorICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUpCiAKICAgICBkZWYgc2V0bWFyayhzZWxmLCBpZCwgcG9zLCBuYW1lKToKICAgICAgICAgcmFpc2UgRXJyb3IoJ3NldG1hcmsoKSBub3Qgc3VwcG9ydGVkJykKQEAgLTQxOCwyNCArNDEwLDE2IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbihsZW4oZGF0YSkpCiAgICAgICAgIG5mcmFtZXMgPSBsZW4oZGF0YSkgLy8gKHNlbGYuX3NhbXB3aWR0aCAqIHNlbGYuX25jaGFubmVscykKICAgICAgICAgaWYgc2VsZi5fY29udmVydDoKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb252ZXJ0KGRhdGEpCi0gICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCBpbiAoMiwgNCkgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShfYXJyYXlfZm10c1tzZWxmLl9zYW1wd2lkdGhdKQotICAgICAgICAgICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBhCi0gICAgICAgICAgICBhc3NlcnQgZGF0YS5pdGVtc2l6ZSA9PSBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YS50b2ZpbGUoc2VsZi5fZmlsZSkKLSAgICAgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuID0gc2VsZi5fZGF0YXdyaXR0ZW4gKyBsZW4oZGF0YSkgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAzIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgICAgIGRhdGEgPSBfYnl0ZXN3YXAzKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiA9IHNlbGYuX2RhdGF3cml0dGVuICsgbGVuKGRhdGEpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuICs9IGxlbihkYXRhKQogICAgICAgICBzZWxmLl9uZnJhbWVzd3JpdHRlbiA9IHNlbGYuX25mcmFtZXN3cml0dGVuICsgbmZyYW1lcwogCiAgICAgZGVmIHdyaXRlZnJhbWVzKHNlbGYsIGRhdGEpOgpAQCAtNDc2LDE0ICs0NjAsMTggQEAKICAgICAgICAgaWYgbm90IHNlbGYuX25mcmFtZXM6CiAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzID0gaW5pdGxlbmd0aCAvLyAoc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoKQogICAgICAgICBzZWxmLl9kYXRhbGVuZ3RoID0gc2VsZi5fbmZyYW1lcyAqIHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyA9IE5vbmUKICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHJ1Y3QucGFjaygnPEw0czRzTEhITExISDRzJywKICAgICAgICAgICAgIDM2ICsgc2VsZi5fZGF0YWxlbmd0aCwgYidXQVZFJywgYidmbXQgJywgMTYsCiAgICAgICAgICAgICBXQVZFX0ZPUk1BVF9QQ00sIHNlbGYuX25jaGFubmVscywgc2VsZi5fZnJhbWVyYXRlLAogICAgICAgICAgICAgc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fZnJhbWVyYXRlICogc2VsZi5fc2FtcHdpZHRoLAogICAgICAgICAgICAgc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoLAogICAgICAgICAgICAgc2VsZi5fc2FtcHdpZHRoICogOCwgYidkYXRhJykpCi0gICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIGlmIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3RydWN0LnBhY2soJzxMJywgc2VsZi5fZGF0YWxlbmd0aCkpCiAgICAgICAgIHNlbGYuX2hlYWRlcndyaXR0ZW4gPSBUcnVlCiAKZGlmZiAtLWdpdCBhL0xpYi93ZWFrcmVmLnB5IGIvTGliL3dlYWtyZWYucHkKaW5kZXggZmNiNmI3NC4uZjZhNDBjYSAxMDA2NDQKLS0tIGEvTGliL3dlYWtyZWYucHkKKysrIGIvTGliL3dlYWtyZWYucHkKQEAgLTIxLDEzICsyMSw2OSBAQAogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldCwgX0l0ZXJhdGlvbkd1YXJkCiAKIGltcG9ydCBjb2xsZWN0aW9ucyAgIyBJbXBvcnQgYWZ0ZXIgX3dlYWtyZWYgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0LgoraW1wb3J0IHN5cworaW1wb3J0IGl0ZXJ0b29scwogCiBQcm94eVR5cGVzID0gKFByb3h5VHlwZSwgQ2FsbGFibGVQcm94eVR5cGUpCiAKIF9fYWxsX18gPSBbInJlZiIsICJwcm94eSIsICJnZXR3ZWFrcmVmY291bnQiLCAiZ2V0d2Vha3JlZnMiLAogICAgICAgICAgICAiV2Vha0tleURpY3Rpb25hcnkiLCAiUmVmZXJlbmNlVHlwZSIsICJQcm94eVR5cGUiLAogICAgICAgICAgICAiQ2FsbGFibGVQcm94eVR5cGUiLCAiUHJveHlUeXBlcyIsICJXZWFrVmFsdWVEaWN0aW9uYXJ5IiwKLSAgICAgICAgICAgIldlYWtTZXQiXQorICAgICAgICAgICAiV2Vha1NldCIsICJXZWFrTWV0aG9kIiwgImZpbmFsaXplIl0KKworCitjbGFzcyBXZWFrTWV0aG9kKHJlZik6CisgICAgIiIiCisgICAgQSBjdXN0b20gYHdlYWtyZWYucmVmYCBzdWJjbGFzcyB3aGljaCBzaW11bGF0ZXMgYSB3ZWFrIHJlZmVyZW5jZSB0bworICAgIGEgYm91bmQgbWV0aG9kLCB3b3JraW5nIGFyb3VuZCB0aGUgbGlmZXRpbWUgcHJvYmxlbSBvZiBib3VuZCBtZXRob2RzLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gIl9mdW5jX3JlZiIsICJfbWV0aF90eXBlIiwgIl9hbGl2ZSIsICJfX3dlYWtyZWZfXyIKKworICAgIGRlZiBfX25ld19fKGNscywgbWV0aCwgY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IG1ldGguX19zZWxmX18KKyAgICAgICAgICAgIGZ1bmMgPSBtZXRoLl9fZnVuY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgYm91bmQgbWV0aG9kLCBub3Qge30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKG1ldGgpKSkgZnJvbSBOb25lCisgICAgICAgIGRlZiBfY2IoYXJnKToKKyAgICAgICAgICAgICMgVGhlIHNlbGYtd2Vha3JlZiB0cmljayBpcyBuZWVkZWQgdG8gYXZvaWQgY3JlYXRpbmcgYSByZWZlcmVuY2UKKyAgICAgICAgICAgICMgY3ljbGUuCisgICAgICAgICAgICBzZWxmID0gc2VsZl93cigpCisgICAgICAgICAgICBpZiBzZWxmLl9hbGl2ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHNlbGYpCisgICAgICAgIHNlbGYgPSByZWYuX19uZXdfXyhjbHMsIG9iaiwgX2NiKQorICAgICAgICBzZWxmLl9mdW5jX3JlZiA9IHJlZihmdW5jLCBfY2IpCisgICAgICAgIHNlbGYuX21ldGhfdHlwZSA9IHR5cGUobWV0aCkKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBUcnVlCisgICAgICAgIHNlbGZfd3IgPSByZWYoc2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgb2JqID0gc3VwZXIoKS5fX2NhbGxfXygpCisgICAgICAgIGZ1bmMgPSBzZWxmLl9mdW5jX3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBOb25lIG9yIGZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9tZXRoX3R5cGUoZnVuYywgb2JqKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFdlYWtNZXRob2QpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsaXZlIG9yIG5vdCBvdGhlci5fYWxpdmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKyAgICAgICAgICAgIHJldHVybiByZWYuX19lcV9fKHNlbGYsIG90aGVyKSBhbmQgc2VsZi5fZnVuY19yZWYgPT0gb3RoZXIuX2Z1bmNfcmVmCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFdlYWtNZXRob2QpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsaXZlIG9yIG5vdCBvdGhlci5fYWxpdmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90IG90aGVyCisgICAgICAgICAgICByZXR1cm4gcmVmLl9fbmVfXyhzZWxmLCBvdGhlcikgb3Igc2VsZi5fZnVuY19yZWYgIT0gb3RoZXIuX2Z1bmNfcmVmCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBfX2hhc2hfXyA9IHJlZi5fX2hhc2hfXwogCiAKIGNsYXNzIFdlYWtWYWx1ZURpY3Rpb25hcnkoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgpAQCAtMTUzLDggKzIwOSw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgotICAgICAgICAgICAgZm9yIHdyIGluIHNlbGYuZGF0YS52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB3cgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmRhdGEudmFsdWVzKCkKIAogICAgIGRlZiB2YWx1ZXMoc2VsZik6CiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgpAQCAtMzgzLDMgKzQzOCwxNDAgQEAKICAgICAgICAgICAgICAgICBkW3JlZihrZXksIHNlbGYuX3JlbW92ZSldID0gdmFsdWUKICAgICAgICAgaWYgbGVuKGt3YXJncyk6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShrd2FyZ3MpCisKKworY2xhc3MgZmluYWxpemU6CisgICAgIiIiQ2xhc3MgZm9yIGZpbmFsaXphdGlvbiBvZiB3ZWFrcmVmYWJsZSBvYmplY3RzCisKKyAgICBmaW5hbGl6ZShvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncykgcmV0dXJucyBhIGNhbGxhYmxlIGZpbmFsaXplcgorICAgIG9iamVjdCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIG9iaiBpcyBnYXJiYWdlIGNvbGxlY3RlZC4gVGhlCisgICAgZmlyc3QgdGltZSB0aGUgZmluYWxpemVyIGlzIGNhbGxlZCBpdCBldmFsdWF0ZXMgZnVuYygqYXJnLCAqKmt3YXJncykKKyAgICBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBBZnRlciB0aGlzIHRoZSBmaW5hbGl6ZXIgaXMgZGVhZCwgYW5kCisgICAgY2FsbGluZyBpdCBqdXN0IHJldHVybnMgTm9uZS4KKworICAgIFdoZW4gdGhlIHByb2dyYW0gZXhpdHMgYW55IHJlbWFpbmluZyBmaW5hbGl6ZXJzIGZvciB3aGljaCB0aGUKKyAgICBhdGV4aXQgYXR0cmlidXRlIGlzIHRydWUgd2lsbCBiZSBydW4gaW4gcmV2ZXJzZSBvcmRlciBvZiBjcmVhdGlvbi4KKyAgICBCeSBkZWZhdWx0IGF0ZXhpdCBpcyB0cnVlLgorICAgICIiIgorCisgICAgIyBGaW5hbGl6ZXIgb2JqZWN0cyBkb24ndCBoYXZlIGFueSBzdGF0ZSBvZiB0aGVpciBvd24uICBUaGV5IGFyZQorICAgICMganVzdCB1c2VkIGFzIGtleXMgdG8gbG9va3VwIF9JbmZvIG9iamVjdHMgaW4gdGhlIHJlZ2lzdHJ5LiAgVGhpcworICAgICMgZW5zdXJlcyB0aGF0IHRoZXkgY2Fubm90IGJlIHBhcnQgb2YgYSByZWYtY3ljbGUuCisKKyAgICBfX3Nsb3RzX18gPSAoKQorICAgIF9yZWdpc3RyeSA9IHt9CisgICAgX3NodXRkb3duID0gRmFsc2UKKyAgICBfaW5kZXhfaXRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgX2RpcnR5ID0gRmFsc2UKKyAgICBfcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdCA9IEZhbHNlCisKKyAgICBjbGFzcyBfSW5mbzoKKyAgICAgICAgX19zbG90c19fID0gKCJ3ZWFrcmVmIiwgImZ1bmMiLCAiYXJncyIsICJrd2FyZ3MiLCAiYXRleGl0IiwgImluZGV4IikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWdpc3RlcmVkX3dpdGhfYXRleGl0OgorICAgICAgICAgICAgIyBXZSBtYXkgcmVnaXN0ZXIgdGhlIGV4aXQgZnVuY3Rpb24gbW9yZSB0aGFuIG9uY2UgYmVjYXVzZQorICAgICAgICAgICAgIyBvZiBhIHRocmVhZCByYWNlLCBidXQgdGhhdCBpcyBoYXJtbGVzcworICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuX2V4aXRmdW5jKQorICAgICAgICAgICAgZmluYWxpemUuX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQgPSBUcnVlCisgICAgICAgIGluZm8gPSBzZWxmLl9JbmZvKCkKKyAgICAgICAgaW5mby53ZWFrcmVmID0gcmVmKG9iaiwgc2VsZikKKyAgICAgICAgaW5mby5mdW5jID0gZnVuYworICAgICAgICBpbmZvLmFyZ3MgPSBhcmdzCisgICAgICAgIGluZm8ua3dhcmdzID0ga3dhcmdzIG9yIE5vbmUKKyAgICAgICAgaW5mby5hdGV4aXQgPSBUcnVlCisgICAgICAgIGluZm8uaW5kZXggPSBuZXh0KHNlbGYuX2luZGV4X2l0ZXIpCisgICAgICAgIHNlbGYuX3JlZ2lzdHJ5W3NlbGZdID0gaW5mbworICAgICAgICBmaW5hbGl6ZS5fZGlydHkgPSBUcnVlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgXz1Ob25lKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiBtYXJrIGFzIGRlYWQgYW5kIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkucG9wKHNlbGYsIE5vbmUpCisgICAgICAgIGlmIGluZm8gYW5kIG5vdCBzZWxmLl9zaHV0ZG93bjoKKyAgICAgICAgICAgIHJldHVybiBpbmZvLmZ1bmMoKmluZm8uYXJncywgKiooaW5mby5rd2FyZ3Mgb3Ige30pKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiBtYXJrIGFzIGRlYWQgYW5kIHJldHVybiAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmUgYW5kIHNlbGYuX3JlZ2lzdHJ5LnBvcChzZWxmLCBOb25lKToKKyAgICAgICAgICAgIHJldHVybiAob2JqLCBpbmZvLmZ1bmMsIGluZm8uYXJncywgaW5mby5rd2FyZ3Mgb3Ige30pCisKKyAgICBkZWYgcGVlayhzZWxmKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiByZXR1cm4gKG9iaiwgZnVuYywgYXJncywga3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIChvYmosIGluZm8uZnVuYywgaW5mby5hcmdzLCBpbmZvLmt3YXJncyBvciB7fSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbGl2ZShzZWxmKToKKyAgICAgICAgIiIiV2hldGhlciBmaW5hbGl6ZXIgaXMgYWxpdmUiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2VsZi5fcmVnaXN0cnkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhdGV4aXQoc2VsZik6CisgICAgICAgICIiIldoZXRoZXIgZmluYWxpemVyIHNob3VsZCBiZSBjYWxsZWQgYXQgZXhpdCIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIHJldHVybiBib29sKGluZm8pIGFuZCBpbmZvLmF0ZXhpdAorCisgICAgQGF0ZXhpdC5zZXR0ZXIKKyAgICBkZWYgYXRleGl0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBpZiBpbmZvOgorICAgICAgICAgICAgaW5mby5hdGV4aXQgPSBib29sKHZhbHVlKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgb2JqZWN0IGF0ICUjeDsgZGVhZD4nICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgb2JqZWN0IGF0ICUjeDsgZm9yICVyIGF0ICUjeD4nICUgXAorICAgICAgICAgICAgICAgICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBpZChzZWxmKSwgdHlwZShvYmopLl9fbmFtZV9fLCBpZChvYmopKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zZWxlY3RfZm9yX2V4aXQoY2xzKToKKyAgICAgICAgIyBSZXR1cm4gbGl2ZSBmaW5hbGl6ZXJzIG1hcmtlZCBmb3IgZXhpdCwgb2xkZXN0IGZpcnN0CisgICAgICAgIEwgPSBbKGYsaSkgZm9yIChmLGkpIGluIGNscy5fcmVnaXN0cnkuaXRlbXMoKSBpZiBpLmF0ZXhpdF0KKyAgICAgICAgTC5zb3J0KGtleT1sYW1iZGEgaXRlbTppdGVtWzFdLmluZGV4KQorICAgICAgICByZXR1cm4gW2YgZm9yIChmLGkpIGluIExdCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2V4aXRmdW5jKGNscyk6CisgICAgICAgICMgQXQgc2h1dGRvd24gaW52b2tlIGZpbmFsaXplcnMgZm9yIHdoaWNoIGF0ZXhpdCBpcyB0cnVlLgorICAgICAgICAjIFRoaXMgaXMgY2FsbGVkIG9uY2UgYWxsIG90aGVyIG5vbi1kYWVtb25pYyB0aHJlYWRzIGhhdmUgYmVlbgorICAgICAgICAjIGpvaW5lZC4KKyAgICAgICAgcmVlbmFibGVfZ2MgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBjbHMuX3JlZ2lzdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgICAgIGlmIGdjLmlzZW5hYmxlZCgpOgorICAgICAgICAgICAgICAgICAgICByZWVuYWJsZV9nYyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZ2MuZGlzYWJsZSgpCisgICAgICAgICAgICAgICAgcGVuZGluZyA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBpZiBwZW5kaW5nIGlzIE5vbmUgb3IgZmluYWxpemUuX2RpcnR5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IGNscy5fc2VsZWN0X2Zvcl9leGl0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplLl9kaXJ0eSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwZW5kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZiA9IHBlbmRpbmcucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBnYyBpcyBkaXNhYmxlZCwgc28gKGFzc3VtaW5nIG5vIGRhZW1vbmljCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRocmVhZHMpIHRoZSBmb2xsb3dpbmcgaXMgdGhlIG9ubHkgbGluZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0IHRyaWdnZXIgY3JlYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgYSBuZXcgZmluYWxpemVyCisgICAgICAgICAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGYgbm90IGluIGNscy5fcmVnaXN0cnkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgcHJldmVudCBhbnkgbW9yZSBmaW5hbGl6ZXJzIGZyb20gZXhlY3V0aW5nIGR1cmluZyBzaHV0ZG93bgorICAgICAgICAgICAgZmluYWxpemUuX3NodXRkb3duID0gVHJ1ZQorICAgICAgICAgICAgaWYgcmVlbmFibGVfZ2M6CisgICAgICAgICAgICAgICAgZ2MuZW5hYmxlKCkKZGlmZiAtLWdpdCBhL0xpYi93ZWJicm93c2VyLnB5IGIvTGliL3dlYmJyb3dzZXIucHkKaW5kZXggOTQ1ZWRhNC4uMjcxNGJkMSAxMDA2NDQKLS0tIGEvTGliL3dlYmJyb3dzZXIucHkKKysrIGIvTGliL3dlYmJyb3dzZXIucHkKQEAgLTUsNiArNSw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHNobGV4CitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN1YnByb2Nlc3MKQEAgLTgzLDcgKzg0LDcgQEAKIAogICAgICIiIgogICAgIGNtZCA9IGJyb3dzZXIuc3BsaXQoKVswXQotICAgIGlmIG5vdCBfaXNjb21tYW5kKGNtZCk6CisgICAgaWYgbm90IHNodXRpbC53aGljaChjbWQpOgogICAgICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoY21kKQogICAgIHRyeToKQEAgLTEwMiwzOCArMTAzLDYgQEAKICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAKIAotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAid2luIjoKLSAgICBkZWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICBjbWQgPSBjbWQubG93ZXIoKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpIGFuZCBjbWQuZW5kc3dpdGgoKCIuZXhlIiwgIi5iYXQiKSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBmb3IgZXh0IGluICIuZXhlIiwgIi5iYXQiOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kICsgZXh0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLWVsc2U6Ci0gICAgZGVmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKToKLSAgICAgICAgICAgIG1vZGUgPSBvcy5zdGF0KGNtZClbc3RhdC5TVF9NT0RFXQotICAgICAgICAgICAgaWYgbW9kZSAmIHN0YXQuU19JWFVTUiBvciBtb2RlICYgc3RhdC5TX0lYR1JQIG9yIG1vZGUgJiBzdGF0LlNfSVhPVEg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLWRlZiBfaXNjb21tYW5kKGNtZCk6Ci0gICAgIiIiUmV0dXJuIFRydWUgaWYgY21kIGlzIGV4ZWN1dGFibGUgb3IgY2FuIGJlIGZvdW5kIG9uIHRoZSBleGVjdXRhYmxlCi0gICAgc2VhcmNoIHBhdGguIiIiCi0gICAgaWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHBhdGggPSBvcy5lbnZpcm9uLmdldCgiUEFUSCIpCi0gICAgaWYgbm90IHBhdGg6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIGZvciBkIGluIHBhdGguc3BsaXQob3MucGF0aHNlcCk6Ci0gICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbihkLCBjbWQpCi0gICAgICAgIGlmIF9pc2V4ZWN1dGFibGUoZXhlKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLQogIyBHZW5lcmFsIHBhcmVudCBjbGFzc2VzCiAKIGNsYXNzIEJhc2VCcm93c2VyKG9iamVjdCk6CkBAIC00MTgsMTEgKzM4NywxMSBAQAogICAgICAgICAgICAgIyBuZWVkIHRvIFBJTkcgZWFjaCBvbmUgdW50aWwgd2UgZmluZCBvbmUgdGhhdCdzIGxpdmUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoZm4pCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBubyBnb29kOyBhdHRlbXB0IHRvIGNsZWFuIGl0IG91dCwgYnV0IGRvbid0IGZhaWw6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHMKQEAgLTQ1MywyMiArNDIyLDIyIEBACiBkZWYgcmVnaXN0ZXJfWF9icm93c2VycygpOgogCiAgICAgIyB1c2UgeGRnLW9wZW4gaWYgYXJvdW5kCi0gICAgaWYgX2lzY29tbWFuZCgieGRnLW9wZW4iKToKKyAgICBpZiBzaHV0aWwud2hpY2goInhkZy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4ZGctb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJ4ZGctb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBHTk9NRTMgYnJvd3NlcgotICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImd2ZnMtb3BlbiIpOgorICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgiZ3Zmcy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJndmZzLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigiZ3Zmcy1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEdOT01FIGJyb3dzZXIKLSAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJnbm9tZS1vcGVuIik6CisgICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJnbm9tZS1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJnbm9tZS1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoImdub21lLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgS0RFIGJyb3dzZXIKLSAgICBpZiAiS0RFX0ZVTExfU0VTU0lPTiIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgia2ZtY2xpZW50Iik6CisgICAgaWYgIktERV9GVUxMX1NFU1NJT04iIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgia2ZtY2xpZW50Iik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm1jbGllbnQiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtY2xpZW50IikpCiAKLSAgICBpZiBfaXNjb21tYW5kKCJ4LXd3dy1icm93c2VyIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ4LXd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4LXd3dy1icm93c2VyIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIngtd3d3LWJyb3dzZXIiKSkKIAogICAgICMgVGhlIE1vemlsbGEvTmV0c2NhcGUgYnJvd3NlcnMKQEAgLTQ3NiwzOSArNDQ1LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICJtb3ppbGxhLWZpcmViaXJkIiwgImZpcmViaXJkIiwKICAgICAgICAgICAgICAgICAgICAgImljZXdlYXNlbCIsICJpY2VhcGUiLAogICAgICAgICAgICAgICAgICAgICAic2VhbW9ua2V5IiwgIm1vemlsbGEiLCAibmV0c2NhcGUiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgTW96aWxsYShicm93c2VyKSkKIAogICAgICMgS29ucXVlcm9yL2tmbSwgdGhlIEtERSBicm93c2VyLgotICAgIGlmIF9pc2NvbW1hbmQoImtmbSIpOgorICAgIGlmIHNodXRpbC53aGljaCgia2ZtIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm0iLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtIikpCi0gICAgZWxpZiBfaXNjb21tYW5kKCJrb25xdWVyb3IiKToKKyAgICBlbGlmIHNodXRpbC53aGljaCgia29ucXVlcm9yIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrb25xdWVyb3IiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia29ucXVlcm9yIikpCiAKICAgICAjIEdub21lJ3MgR2FsZW9uIGFuZCBFcGlwaGFueQogICAgIGZvciBicm93c2VyIGluICgiZ2FsZW9uIiwgImVwaXBoYW55Iik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEdhbGVvbihicm93c2VyKSkKIAogICAgICMgU2tpcHN0b25lLCBhbm90aGVyIEd0ay9Nb3ppbGxhIGJhc2VkIGJyb3dzZXIKLSAgICBpZiBfaXNjb21tYW5kKCJza2lwc3RvbmUiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInNraXBzdG9uZSIpOgogICAgICAgICByZWdpc3Rlcigic2tpcHN0b25lIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoInNraXBzdG9uZSIpKQogCiAgICAgIyBHb29nbGUgQ2hyb21lL0Nocm9taXVtIGJyb3dzZXJzCiAgICAgZm9yIGJyb3dzZXIgaW4gKCJnb29nbGUtY2hyb21lIiwgImNocm9tZSIsICJjaHJvbWl1bSIsICJjaHJvbWl1bS1icm93c2VyIik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIENocm9tZShicm93c2VyKSkKIAogICAgICMgT3BlcmEsIHF1aXRlIHBvcHVsYXIKLSAgICBpZiBfaXNjb21tYW5kKCJvcGVyYSIpOgorICAgIGlmIHNodXRpbC53aGljaCgib3BlcmEiKToKICAgICAgICAgcmVnaXN0ZXIoIm9wZXJhIiwgTm9uZSwgT3BlcmEoIm9wZXJhIikpCiAKICAgICAjIE5leHQsIE1vc2FpYyAtLSBvbGQgYnV0IHN0aWxsIGluIHVzZS4KLSAgICBpZiBfaXNjb21tYW5kKCJtb3NhaWMiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIm1vc2FpYyIpOgogICAgICAgICByZWdpc3RlcigibW9zYWljIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIm1vc2FpYyIpKQogCiAgICAgIyBHcmFpbCwgdGhlIFB5dGhvbiBicm93c2VyLiBEb2VzIGFueWJvZHkgc3RpbGwgdXNlIGl0PwotICAgIGlmIF9pc2NvbW1hbmQoImdyYWlsIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJncmFpbCIpOgogICAgICAgICByZWdpc3RlcigiZ3JhaWwiLCBHcmFpbCwgTm9uZSkKIAogIyBQcmVmZXIgWCBicm93c2VycyBpZiBwcmVzZW50CkBAIC01MTcsMTggKzQ4NiwxOCBAQAogCiAjIEFsc28gdHJ5IGNvbnNvbGUgYnJvd3NlcnMKIGlmIG9zLmVudmlyb24uZ2V0KCJURVJNIik6Ci0gICAgaWYgX2lzY29tbWFuZCgid3d3LWJyb3dzZXIiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ3d3ctYnJvd3NlciIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3d3ctYnJvd3NlciIpKQogICAgICMgVGhlIExpbmtzL2VsaW5rcyBicm93c2VycyA8aHR0cDovL2FydGF4Lmthcmxpbi5tZmYuY3VuaS5jei9+bWlrdWxhcy9saW5rcy8+Ci0gICAgaWYgX2lzY29tbWFuZCgibGlua3MiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJsaW5rcyIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJsaW5rcyIpKQotICAgIGlmIF9pc2NvbW1hbmQoImVsaW5rcyIpOgorICAgIGlmIHNodXRpbC53aGljaCgiZWxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJlbGlua3MiLCBOb25lLCBFbGlua3MoImVsaW5rcyIpKQogICAgICMgVGhlIEx5bnggYnJvd3NlciA8aHR0cDovL2x5bnguaXNjLm9yZy8+LCA8aHR0cDovL2x5bnguYnJvd3Nlci5vcmcvPgotICAgIGlmIF9pc2NvbW1hbmQoImx5bngiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImx5bngiKToKICAgICAgICAgcmVnaXN0ZXIoImx5bngiLCBOb25lLCBHZW5lcmljQnJvd3NlcigibHlueCIpKQogICAgICMgVGhlIHczbSBicm93c2VyIDxodHRwOi8vdzNtLnNvdXJjZWZvcmdlLm5ldC8+Ci0gICAgaWYgX2lzY29tbWFuZCgidzNtIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ3M20iKToKICAgICAgICAgcmVnaXN0ZXIoInczbSIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3M20iKSkKIAogIwpAQCAtNTQwLDcgKzUwOSw3IEBACiAgICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUodXJsKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgW0Vycm9yIDIyXSBObyBhcHBsaWNhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICMgZmlsZSBmb3IgdGhpcyBvcGVyYXRpb246ICc8VVJMPicKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTU1OCw3ICs1MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5ldCBFeHBsb3JlclxcSUVYUExPUkUuRVhFIikKICAgICBmb3IgYnJvd3NlciBpbiAoImZpcmVmb3giLCAiZmlyZWJpcmQiLCAic2VhbW9ua2V5IiwgIm1vemlsbGEiLAogICAgICAgICAgICAgICAgICAgICAibmV0c2NhcGUiLCAib3BlcmEiLCBpZXhwbG9yZSk6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKGJyb3dzZXIpKQogCiAjCkBAIC02NDQsMTcgKzYxMyw2IEBACiAgICAgcmVnaXN0ZXIoIk1hY09TWCIsIE5vbmUsIE1hY09TWE9TQVNjcmlwdCgnZGVmYXVsdCcpLCAtMSkKIAogCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQgZm9yIE9TLzIKLSMKLQotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAib3MyIiBhbmQgX2lzY29tbWFuZCgibmV0c2NhcGUiKToKLSAgICBfdHJ5b3JkZXIgPSBbXQotICAgIF9icm93c2VycyA9IHt9Ci0gICAgcmVnaXN0ZXIoIm9zMm5ldHNjYXBlIiwgTm9uZSwKLSAgICAgICAgICAgICBHZW5lcmljQnJvd3NlcihbInN0YXJ0IiwgIm5ldHNjYXBlIiwgIiVzIl0pLCAtMSkKLQotCiAjIE9LLCBub3cgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSBvcmRlcnMgZm9yIGVhY2gKICMgcGxhdGZvcm0gYXJlLCBhbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZW0gd2l0aCB0aGUgQlJPV1NFUiB2YXJpYWJsZS4KIGlmICJCUk9XU0VSIiBpbiBvcy5lbnZpcm9uOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5IGIvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CmluZGV4IGYwNzRhYjkuLjgxZTJkZjcgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQorKysgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKQEAgLTkwNSwxMSArOTA1LDggQEAKICAgICAgICAgYnVpbGRlciA9IEV4cGF0QnVpbGRlcigpCiAKICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIHN0cik6Ci0gICAgICAgIGZwID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlLCAncmInKSBhcyBmcDoKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZpbGUpCiAgICAgcmV0dXJuIHJlc3VsdApAQCAtOTM5LDExICs5MzYsOCBAQAogICAgICAgICBidWlsZGVyID0gRnJhZ21lbnRCdWlsZGVyKGNvbnRleHQpCiAKICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIHN0cik6Ci0gICAgICAgIGZwID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlLCAncmInKSBhcyBmcDoKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZpbGUpCiAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKaW5kZXggNmNjMWI0NC4uNzNlNDkxZSAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CkBAIC03MSw4ICs3MSw4IEBACiAjIEByZXR1cm4gVGhlIGV4cGFuZGVkIHJlc291cmNlLiAgSWYgdGhlIHBhcnNlIG1vZGUgaXMgInhtbCIsIHRoaXMKICMgICAgaXMgYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuICBJZiB0aGUgcGFyc2UgbW9kZSBpcyAidGV4dCIsIHRoaXMKICMgICAgaXMgYSBVbmljb2RlIHN0cmluZy4gIElmIHRoZSBsb2FkZXIgZmFpbHMsIGl0IGNhbiByZXR1cm4gTm9uZQotIyAgICBvciByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbi4KLSMgQHRocm93cyBJT0Vycm9yIElmIHRoZSBsb2FkZXIgZmFpbHMgdG8gbG9hZCB0aGUgcmVzb3VyY2UuCisjICAgIG9yIHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGxvYWRlciBmYWlscyB0byBsb2FkIHRoZSByZXNvdXJjZS4KIAogZGVmIGRlZmF1bHRfbG9hZGVyKGhyZWYsIHBhcnNlLCBlbmNvZGluZz1Ob25lKToKICAgICBpZiBwYXJzZSA9PSAieG1sIjoKQEAgLTk1LDcgKzk1LDcgQEAKICMgICAgIHRoYXQgaW1wbGVtZW50cyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgPGI+ZGVmYXVsdF9sb2FkZXI8L2I+LgogIyBAdGhyb3dzIEZhdGFsSW5jbHVkZUVycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBpbmNsdWRlIGEgZ2l2ZW4KICMgICAgIHJlc291cmNlLCBvciBpZiB0aGUgdHJlZSBjb250YWlucyBtYWxmb3JtZWQgWEluY2x1ZGUgZWxlbWVudHMuCi0jIEB0aHJvd3MgSU9FcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gbG9hZCBhIGdpdmVuIHJlc291cmNlLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGxvYWQgYSBnaXZlbiByZXNvdXJjZS4KIAogZGVmIGluY2x1ZGUoZWxlbSwgbG9hZGVyPU5vbmUpOgogICAgIGlmIGxvYWRlciBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKaW5kZXggZTcwMTVjNy4uZDkxNGRkYiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CkBAIC0xMDUsMTQgKzEwNSwxMiBAQAogZGVmIHByZXBhcmVfc3RhcihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgogICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZWxlbQogICAgIHJldHVybiBzZWxlY3QKIAogZGVmIHByZXBhcmVfc2VsZihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgotICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgIHlpZWxkIGZyb20gcmVzdWx0CiAgICAgcmV0dXJuIHNlbGVjdAogCiBkZWYgcHJlcGFyZV9kZXNjZW5kYW50KG5leHQsIHRva2VuKToKQEAgLTE3Niw3ICsxNzQsNyBAQAogICAgICAgICAgICAgICAgIGlmIGVsZW0uZ2V0KGtleSkgPT0gdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcLT9cZCskIiwgcHJlZGljYXRlWzBdKToKICAgICAgICAgIyBbdGFnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgpAQCAtMTg0LDcgKzE4Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgZWxlbS5maW5kKHRhZykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLT0nIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICBpZiBzaWduYXR1cmUgPT0gIi09JyIgYW5kIG5vdCByZS5tYXRjaCgiXC0/XGQrJCIsIHByZWRpY2F0ZVswXSk6CiAgICAgICAgICMgW3RhZz0ndmFsdWUnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgdmFsdWUgPSBwcmVkaWNhdGVbLTFdCkBAIC0xOTgsNyArMTk2LDEwIEBACiAgICAgaWYgc2lnbmF0dXJlID09ICItIiBvciBzaWduYXR1cmUgPT0gIi0oKSIgb3Igc2lnbmF0dXJlID09ICItKCktIjoKICAgICAgICAgIyBbaW5kZXhdIG9yIFtsYXN0KCldIG9yIFtsYXN0KCktaW5kZXhdCiAgICAgICAgIGlmIHNpZ25hdHVyZSA9PSAiLSI6CisgICAgICAgICAgICAjIFtpbmRleF0KICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVswXSkgLSAxCisgICAgICAgICAgICBpZiBpbmRleCA8IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlhQYXRoIHBvc2l0aW9uID49IDEgZXhwZWN0ZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgcHJlZGljYXRlWzBdICE9ICJsYXN0IjoKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgZnVuY3Rpb24iKQpAQCAtMjA3LDYgKzIwOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVsyXSkgLSAxCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBleHByZXNzaW9uIikKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA+IC0yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiWFBhdGggb2Zmc2V0IGZyb20gbGFzdCgpIG11c3QgYmUgbmVnYXRpdmUiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpbmRleCA9IC0xCiAgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CmluZGV4IGE4ZTU3MjkuLmNhYjQxNWMgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQpAQCAtMSwyOCArMSw0NyBAQAorIiIiTGlnaHR3ZWlnaHQgWE1MIHN1cHBvcnQgZm9yIFB5dGhvbi4KKworIFhNTCBpcyBhbiBpbmhlcmVudGx5IGhpZXJhcmNoaWNhbCBkYXRhIGZvcm1hdCwgYW5kIHRoZSBtb3N0IG5hdHVyYWwgd2F5IHRvCisgcmVwcmVzZW50IGl0IGlzIHdpdGggYSB0cmVlLiAgVGhpcyBtb2R1bGUgaGFzIHR3byBjbGFzc2VzIGZvciB0aGlzIHB1cnBvc2U6CisKKyAgICAxLiBFbGVtZW50VHJlZSByZXByZXNlbnRzIHRoZSB3aG9sZSBYTUwgZG9jdW1lbnQgYXMgYSB0cmVlIGFuZAorCisgICAgMi4gRWxlbWVudCByZXByZXNlbnRzIGEgc2luZ2xlIG5vZGUgaW4gdGhpcyB0cmVlLgorCisgSW50ZXJhY3Rpb25zIHdpdGggdGhlIHdob2xlIGRvY3VtZW50IChyZWFkaW5nIGFuZCB3cml0aW5nIHRvL2Zyb20gZmlsZXMpIGFyZQorIHVzdWFsbHkgZG9uZSBvbiB0aGUgRWxlbWVudFRyZWUgbGV2ZWwuICBJbnRlcmFjdGlvbnMgd2l0aCBhIHNpbmdsZSBYTUwgZWxlbWVudAorIGFuZCBpdHMgc3ViLWVsZW1lbnRzIGFyZSBkb25lIG9uIHRoZSBFbGVtZW50IGxldmVsLgorCisgRWxlbWVudCBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QgZGVzaWduZWQgdG8gc3RvcmUgaGllcmFyY2hpY2FsIGRhdGEKKyBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gSXQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhCisgZGljdGlvbmFyeS4gIEVhY2ggRWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6CisKKyAgICAndGFnJyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyBuYW1lLgorCisgICAgJ2F0dHJpYnV0ZXMnIC0gYSBQeXRob24gZGljdGlvbmFyeSBzdG9yaW5nIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4KKworICAgICd0ZXh0JyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyB0ZXh0IGNvbnRlbnQuCisKKyAgICAndGFpbCcgLSBhbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyB0ZXh0IGFmdGVyIHRoZSBlbGVtZW50J3MgZW5kIHRhZy4KKworICAgIEFuZCBhIG51bWJlciBvZiBjaGlsZCBlbGVtZW50cyBzdG9yZWQgaW4gYSBQeXRob24gc2VxdWVuY2UuCisKKyBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSBFbGVtZW50IGNvbnN0cnVjdG9yLAorIG9yIHRoZSBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb24uCisKKyBZb3UgY2FuIGFsc28gdXNlIHRoZSBFbGVtZW50VHJlZSBjbGFzcyB0byB3cmFwIGFuIGVsZW1lbnQgc3RydWN0dXJlCisgYW5kIGNvbnZlcnQgaXQgdG8gYW5kIGZyb20gWE1MLgorCisiIiIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRUcmVlLnB5IDM0NDAgMjAwOC0wNy0xOCAxNDo0NTowMVogZnJlZHJpayAkCi0jCi0jIGxpZ2h0LXdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uIDIuMyBhbmQgbGF0ZXIuCi0jCi0jIGhpc3RvcnkgKHNpbmNlIDEuMi42KToKLSMgMjAwNS0xMS0xMiBmbCAgIGFkZGVkIHRvc3RyaW5nbGlzdC9mcm9tc3RyaW5nbGlzdCBoZWxwZXJzCi0jIDIwMDYtMDctMDUgZmwgICBtZXJnZWQgaW4gc2VsZWN0ZWQgY2hhbmdlcyBmcm9tIHRoZSAxLjMgc2FuZGJveAotIyAyMDA2LTA3LTA1IGZsICAgcmVtb3ZlZCBzdXBwb3J0IGZvciAyLjEgYW5kIGVhcmxpZXIKLSMgMjAwNy0wNi0yMSBmbCAgIGFkZGVkIGRlcHJlY2F0aW9uL2Z1dHVyZSB3YXJuaW5ncwotIyAyMDA3LTA4LTI1IGZsICAgYWRkZWQgZG9jdHlwZSBob29rLCBhZGRlZCBwYXJzZXIgdmVyc2lvbiBhdHRyaWJ1dGUgZXRjCi0jIDIwMDctMDgtMjYgZmwgICBhZGRlZCBuZXcgc2VyaWFsaXplciBjb2RlIChiZXR0ZXIgbmFtZXNwYWNlIGhhbmRsaW5nLCBldGMpCi0jIDIwMDctMDgtMjcgZmwgICB3YXJuIGZvciBicm9rZW4gL3RhZyBzZWFyY2hlcyBvbiB0cmVlIGxldmVsCi0jIDIwMDctMDktMDIgZmwgICBhZGRlZCBodG1sL3RleHQgbWV0aG9kcyB0byBzZXJpYWxpemVyIChleHBlcmltZW50YWwpCi0jIDIwMDctMDktMDUgZmwgICBhZGRlZCBtZXRob2QgYXJndW1lbnQgdG8gdG9zdHJpbmcvdG9zdHJpbmdsaXN0Ci0jIDIwMDctMDktMDYgZmwgICBpbXByb3ZlZCBlcnJvciBoYW5kbGluZwotIyAyMDA3LTA5LTEzIGZsICAgYWRkZWQgaXRlcnRleHQsIGl0ZXJmaW5kOyBhc3NvcnRlZCBjbGVhbnVwcwotIyAyMDA3LTEyLTE1IGZsICAgYWRkZWQgQzE0TiBob29rcywgY29weSBtZXRob2QgKGV4cGVyaW1lbnRhbCkKLSMKICMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIGZyZWRyaWtAcHl0aG9ud2FyZS5jb20KICMgaHR0cDovL3d3dy5weXRob253YXJlLmNvbQotIwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwpAQCAtNTEsOSArNzAsNiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCi0KIF9fYWxsX18gPSBbCiAgICAgIyBwdWJsaWMgc3ltYm9scwogICAgICJDb21tZW50IiwKQEAgLTY5LDM0ICs4NSwxMiBAQAogICAgICJUcmVlQnVpbGRlciIsCiAgICAgIlZFUlNJT04iLAogICAgICJYTUwiLCAiWE1MSUQiLAotICAgICJYTUxQYXJzZXIiLCAiWE1MVHJlZUJ1aWxkZXIiLAorICAgICJYTUxQYXJzZXIiLAogICAgICJyZWdpc3Rlcl9uYW1lc3BhY2UiLAogICAgIF0KIAogVkVSU0lPTiA9ICIxLjMuMCIKIAotIyMKLSMgVGhlIDxiPkVsZW1lbnQ8L2I+IHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0bwotIyBzdG9yZSBoaWVyYXJjaGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gVGhlIHR5cGUgY2FuIGJlCi0jIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhIGRpY3Rpb25hcnkuCi0jIDxwPgotIyBFYWNoIGVsZW1lbnQgaGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIGl0OgotIyA8dWw+Ci0jIDxsaT5hIDxpPnRhZzwvaT4uIFRoaXMgaXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgd2hhdCBraW5kIG9mIGRhdGEKLSMgdGhpcyBlbGVtZW50IHJlcHJlc2VudHMgKHRoZSBlbGVtZW50IHR5cGUsIGluIG90aGVyIHdvcmRzKS48L2xpPgotIyA8bGk+YSBudW1iZXIgb2YgPGk+YXR0cmlidXRlczwvaT4sIHN0b3JlZCBpbiBhIFB5dGhvbiBkaWN0aW9uYXJ5LjwvbGk+Ci0jIDxsaT5hIDxpPnRleHQ8L2k+IHN0cmluZy48L2xpPgotIyA8bGk+YW4gb3B0aW9uYWwgPGk+dGFpbDwvaT4gc3RyaW5nLjwvbGk+Ci0jIDxsaT5hIG51bWJlciBvZiA8aT5jaGlsZCBlbGVtZW50czwvaT4sIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZTwvbGk+Ci0jIDwvdWw+Ci0jCi0jIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIHtAbGluayAjRWxlbWVudH0gY29uc3RydWN0b3IKLSMgb3IgdGhlIHtAbGluayAjU3ViRWxlbWVudH0gZmFjdG9yeSBmdW5jdGlvbi4KLSMgPHA+Ci0jIFRoZSB7QGxpbmsgI0VsZW1lbnRUcmVlfSBjbGFzcyBjYW4gYmUgdXNlZCB0byB3cmFwIGFuIGVsZW1lbnQKLSMgc3RydWN0dXJlLCBhbmQgY29udmVydCBpdCBmcm9tIGFuZCB0byBYTUwuCi0jIwotCiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncwpAQCAtMTA2LDgxICsxMDAsNjggQEAKIGZyb20gLiBpbXBvcnQgRWxlbWVudFBhdGgKIAogCi0jIwotIyBQYXJzZXIgZXJyb3IuICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgPGI+U3ludGF4RXJyb3I8L2I+LgotIyA8cD4KLSMgSW4gYWRkaXRpb24gdG8gdGhlIGV4Y2VwdGlvbiB2YWx1ZSwgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGNvbnRhaW5zIGEKLSMgc3BlY2lmaWMgZXhjZXB0aW9uIGNvZGUgaW4gdGhlIDxiPmNvZGU8L2I+IGF0dHJpYnV0ZSwgYW5kIHRoZSBsaW5lIGFuZAotIyBjb2x1bW4gb2YgdGhlIGVycm9yIGluIHRoZSA8Yj5wb3NpdGlvbjwvYj4gYXR0cmlidXRlLgotCiBjbGFzcyBQYXJzZUVycm9yKFN5bnRheEVycm9yKToKKyAgICAiIiJBbiBlcnJvciB3aGVuIHBhcnNpbmcgYW4gWE1MIGRvY3VtZW50LgorCisgICAgSW4gYWRkaXRpb24gdG8gaXRzIGV4Y2VwdGlvbiB2YWx1ZSwgYSBQYXJzZUVycm9yIGNvbnRhaW5zCisgICAgdHdvIGV4dHJhIGF0dHJpYnV0ZXM6CisgICAgICAgICdjb2RlJyAgICAgLSB0aGUgc3BlY2lmaWMgZXhjZXB0aW9uIGNvZGUKKyAgICAgICAgJ3Bvc2l0aW9uJyAtIHRoZSBsaW5lIGFuZCBjb2x1bW4gb2YgdGhlIGVycm9yCisKKyAgICAiIiIKICAgICBwYXNzCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgQ2hlY2tzIGlmIGFuIG9iamVjdCBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZWxlbWVudCBvYmplY3QuCi0jCi0jIEBwYXJhbSBBbiBlbGVtZW50IGluc3RhbmNlLgotIyBAcmV0dXJuIEEgdHJ1ZSB2YWx1ZSBpZiB0aGlzIGlzIGFuIGVsZW1lbnQgb2JqZWN0LgotIyBAZGVmcmV0dXJuIGZsYWcKIAogZGVmIGlzZWxlbWVudChlbGVtZW50KToKLSAgICAjIEZJWE1FOiBub3Qgc3VyZSBhYm91dCB0aGlzOwotICAgICMgaXNpbnN0YW5jZShlbGVtZW50LCBFbGVtZW50KSBvciBsb29rIGZvciB0YWcvYXR0cmliL3RleHQgYXR0cmlidXRlcworICAgICIiIlJldHVybiBUcnVlIGlmICplbGVtZW50KiBhcHBlYXJzIHRvIGJlIGFuIEVsZW1lbnQuIiIiCiAgICAgcmV0dXJuIGhhc2F0dHIoZWxlbWVudCwgJ3RhZycpCiAKLSMjCi0jIEVsZW1lbnQgY2xhc3MuICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLCBhbmQKLSMgcHJvdmlkZXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbnRlcmZhY2UuCi0jIDxwPgotIyBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZQotIyBlaXRoZXIgQVNDSUkgc3RyaW5ncyAob3JkaW5hcnkgUHl0aG9uIHN0cmluZ3MgY29udGFpbmluZyBvbmx5IDctYml0Ci0jIEFTQ0lJIGNoYXJhY3RlcnMpIG9yIFVuaWNvZGUgc3RyaW5ncy4KLSMKLSMgQHBhcmFtIHRhZyBUaGUgZWxlbWVudCBuYW1lLgotIyBAcGFyYW0gYXR0cmliIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotIyBAcGFyYW0gKipleHRyYSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotIyBAc2VlIEVsZW1lbnQKLSMgQHNlZSBTdWJFbGVtZW50Ci0jIEBzZWUgQ29tbWVudAotIyBAc2VlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgogCiBjbGFzcyBFbGVtZW50OgotICAgICMgPHRhZyBhdHRyaWI+dGV4dDxjaGlsZC8+Li4uPC90YWc+dGFpbAorICAgICIiIkFuIFhNTCBlbGVtZW50LgogCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIEVsZW1lbnQgdGFnLgorICAgIFRoaXMgY2xhc3MgaXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWxlbWVudCBpbnRlcmZhY2UuCisKKyAgICBBbiBlbGVtZW50J3MgbGVuZ3RoIGlzIGl0cyBudW1iZXIgb2Ygc3ViZWxlbWVudHMuICBUaGF0IG1lYW5zIGlmIHlvdQorICAgIHlvdSB3YW50IHRvIGNoZWNrIGlmIGFuIGVsZW1lbnQgaXMgdHJ1bHkgZW1wdHksIHlvdSBzaG91bGQgY2hlY2sgQk9USAorICAgIGl0cyBsZW5ndGggQU5EIGl0cyB0ZXh0IGF0dHJpYnV0ZS4KKworICAgIFRoZSBlbGVtZW50IHRhZywgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyCisgICAgYnl0ZXMgb3Igc3RyaW5ncy4KKworICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuICAqYXR0cmliKiBpcyBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcKKyAgICBlbGVtZW50IGF0dHJpYnV0ZXMuICpleHRyYSogYXJlIGFkZGl0aW9uYWwgZWxlbWVudCBhdHRyaWJ1dGVzIGdpdmVuIGFzCisgICAga2V5d29yZCBhcmd1bWVudHMuCisKKyAgICBFeGFtcGxlIGZvcm06CisgICAgICAgIDx0YWcgYXR0cmliPnRleHQ8Y2hpbGQvPi4uLjwvdGFnPnRhaWwKKworICAgICIiIgogCiAgICAgdGFnID0gTm9uZQotCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIEVsZW1lbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkuICBXaGVyZSBwb3NzaWJsZSwgdXNlCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQuZ2V0fSwKLSAgICAjIHtAbGluayAjRWxlbWVudC5zZXR9LAotICAgICMge0BsaW5rICNFbGVtZW50LmtleXN9LCBhbmQKLSAgICAjIHtAbGluayAjRWxlbWVudC5pdGVtc30gdG8gYWNjZXNzCi0gICAgIyBlbGVtZW50IGF0dHJpYnV0ZXMuCisgICAgIiIiVGhlIGVsZW1lbnQncyBuYW1lLiIiIgogCiAgICAgYXR0cmliID0gTm9uZQotCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIFRleHQgYmVmb3JlIGZpcnN0IHN1YmVsZW1lbnQuICBUaGlzIGlzIGVpdGhlciBhCi0gICAgIyBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUgd2FzIG5vIHRleHQsIHRoaXMKLSAgICAjIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24KLSAgICAjIHRoZSBwYXJzZXIuCisgICAgIiIiRGljdGlvbmFyeSBvZiB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuIiIiCiAKICAgICB0ZXh0ID0gTm9uZQorICAgICIiIgorICAgIFRleHQgYmVmb3JlIGZpcnN0IHN1YmVsZW1lbnQuIFRoaXMgaXMgZWl0aGVyIGEgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLgorICAgIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyCisgICAgTm9uZSBvciB0aGUgZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24gdGhlIHBhcnNlci4KIAotICAgICMjCi0gICAgIyAoQXR0cmlidXRlKSBUZXh0IGFmdGVyIHRoaXMgZWxlbWVudCdzIGVuZCB0YWcsIGJ1dCBiZWZvcmUgdGhlCi0gICAgIyBuZXh0IHNpYmxpbmcgZWxlbWVudCdzIHN0YXJ0IHRhZy4gIFRoaXMgaXMgZWl0aGVyIGEgc3RyaW5nIG9yCi0gICAgIyB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgbm8gdGV4dCwgdGhpcyBhdHRyaWJ1dGUKLSAgICAjIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgorICAgICIiIgogCi0gICAgdGFpbCA9IE5vbmUgIyB0ZXh0IGFmdGVyIGVuZCB0YWcsIGlmIGFueQorICAgIHRhaWwgPSBOb25lCisgICAgIiIiCisgICAgVGV4dCBhZnRlciB0aGlzIGVsZW1lbnQncyBlbmQgdGFnLCBidXQgYmVmb3JlIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCdzCisgICAgc3RhcnQgdGFnLiAgVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUKKyAgICB3YXMgbm8gdGV4dCwgdGhpcyBhdHRyaWJ1dGUgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywKKyAgICBkZXBlbmRpbmcgb24gdGhlIHBhcnNlci4KIAotICAgICMgY29uc3RydWN0b3IKKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGF0dHJpYj17fSwgKipleHRyYSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHJpYiwgZGljdCk6CkBAIC0xOTUsMzYgKzE3NiwzMCBAQAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICI8RWxlbWVudCAlcyBhdCAweCV4PiIgJSAocmVwcihzZWxmLnRhZyksIGlkKHNlbGYpKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGlzIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBFbGVtZW50IHRhZy4KLSAgICAjIEBwYXJhbSBhdHRyaWIgRWxlbWVudCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBhIGRpY3Rpb25hcnkuCi0gICAgIyBAcmV0dXJuIEEgbmV3IGVsZW1lbnQgaW5zdGFuY2UuCi0KICAgICBkZWYgbWFrZWVsZW1lbnQoc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoIHRoZSBzYW1lIHR5cGUuCisKKyAgICAgICAgKnRhZyogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCBuYW1lLgorICAgICAgICAqYXR0cmliKiBpcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgZWxlbWVudCBhdHRyaWJ1dGVzLgorCisgICAgICAgIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kLCB1c2UgdGhlIFN1YkVsZW1lbnQgZmFjdG9yeSBmdW5jdGlvbiBpbnN0ZWFkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18odGFnLCBhdHRyaWIpCiAKLSAgICAjIwotICAgICMgKEV4cGVyaW1lbnRhbCkgQ29waWVzIHRoZSBjdXJyZW50IGVsZW1lbnQuICBUaGlzIGNyZWF0ZXMgYQotICAgICMgc2hhbGxvdyBjb3B5OyBzdWJlbGVtZW50cyB3aWxsIGJlIHNoYXJlZCB3aXRoIHRoZSBvcmlnaW5hbCB0cmVlLgotICAgICMKLSAgICAjIEByZXR1cm4gQSBuZXcgZWxlbWVudCBpbnN0YW5jZS4KLQogICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gY29weSBvZiBjdXJyZW50IGVsZW1lbnQuCisKKyAgICAgICAgVGhpcyBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5LiBTdWJlbGVtZW50cyB3aWxsIGJlIHNoYXJlZCB3aXRoIHRoZQorICAgICAgICBvcmlnaW5hbCB0cmVlLgorCisgICAgICAgICIiIgogICAgICAgICBlbGVtID0gc2VsZi5tYWtlZWxlbWVudChzZWxmLnRhZywgc2VsZi5hdHRyaWIpCiAgICAgICAgIGVsZW0udGV4dCA9IHNlbGYudGV4dAogICAgICAgICBlbGVtLnRhaWwgPSBzZWxmLnRhaWwKICAgICAgICAgZWxlbVs6XSA9IHNlbGYKICAgICAgICAgcmV0dXJuIGVsZW0KIAotICAgICMjCi0gICAgIyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuICBOb3RlIHRoYXQgdGhpcyBvbmx5IGNvdW50cwotICAgICMgZnVsbCBlbGVtZW50czsgdG8gY2hlY2sgaWYgdGhlcmUncyBhbnkgY29udGVudCBpbiBhbiBlbGVtZW50LCB5b3UKLSAgICAjIGhhdmUgdG8gY2hlY2sgYm90aCB0aGUgbGVuZ3RoIGFuZCB0aGUgPGI+dGV4dDwvYj4gYXR0cmlidXRlLgotICAgICMKLSAgICAjIEByZXR1cm4gVGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4KLQogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2NoaWxkcmVuKQogCkBAIC0yMzYsMjMgKzIxMSw5IEBACiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fY2hpbGRyZW4pICE9IDAgIyBlbXVsYXRlIG9sZCBiZWhhdmlvdXIsIGZvciBub3cKIAotICAgICMjCi0gICAgIyBSZXR1cm5zIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIHJldHVybi4KLSAgICAjIEByZXR1cm4gVGhlIGdpdmVuIHN1YmVsZW1lbnQuCi0gICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCi0KICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW5baW5kZXhdCiAKLSAgICAjIwotICAgICMgUmVwbGFjZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gcmVwbGFjZS4KLSAgICAjIEBwYXJhbSBlbGVtZW50IFRoZSBuZXcgZWxlbWVudCB2YWx1ZS4KLSAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLQogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgZWxlbWVudCk6CiAgICAgICAgICMgaWYgaXNpbnN0YW5jZShpbmRleCwgc2xpY2UpOgogICAgICAgICAjICAgICBmb3IgZWx0IGluIGVsZW1lbnQ6CkBAIC0yNjEsNzYgKzIyMiw2MiBAQAogICAgICAgICAjICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuW2luZGV4XSA9IGVsZW1lbnQKIAotICAgICMjCi0gICAgIyBEZWxldGVzIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIGRlbGV0ZS4KLSAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLQogICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgIGRlbCBzZWxmLl9jaGlsZHJlbltpbmRleF0KIAotICAgICMjCi0gICAgIyBBZGRzIGEgc3ViZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudC4gIEluIGRvY3VtZW50IG9yZGVyLAotICAgICMgdGhlIG5ldyBlbGVtZW50IHdpbGwgYXBwZWFyIGFmdGVyIHRoZSBsYXN0IGV4aXN0aW5nIHN1YmVsZW1lbnQgKG9yCi0gICAgIyBkaXJlY3RseSBhZnRlciB0aGUgdGV4dCwgaWYgaXQncyB0aGUgZmlyc3Qgc3ViZWxlbWVudCksIGJ1dCBiZWZvcmUKLSAgICAjIHRoZSBlbmQgdGFnIGZvciB0aGlzIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gYWRkLgorICAgIGRlZiBhcHBlbmQoc2VsZiwgc3ViZWxlbWVudCk6CisgICAgICAgICIiIkFkZCAqc3ViZWxlbWVudCogdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnQuCiAKLSAgICBkZWYgYXBwZW5kKHNlbGYsIGVsZW1lbnQpOgotICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChlbGVtZW50KQotICAgICAgICBzZWxmLl9jaGlsZHJlbi5hcHBlbmQoZWxlbWVudCkKKyAgICAgICAgVGhlIG5ldyBlbGVtZW50IHdpbGwgYXBwZWFyIGluIGRvY3VtZW50IG9yZGVyIGFmdGVyIHRoZSBsYXN0IGV4aXN0aW5nCisgICAgICAgIHN1YmVsZW1lbnQgKG9yIGRpcmVjdGx5IGFmdGVyIHRoZSB0ZXh0LCBpZiBpdCdzIHRoZSBmaXJzdCBzdWJlbGVtZW50KSwKKyAgICAgICAgYnV0IGJlZm9yZSB0aGUgZW5kIHRhZyBmb3IgdGhpcyBlbGVtZW50LgogCi0gICAgIyMKLSAgICAjIEFwcGVuZHMgc3ViZWxlbWVudHMgZnJvbSBhIHNlcXVlbmNlLgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50cyBBIHNlcXVlbmNlIG9iamVjdCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KLSAgICAjIEBzaW5jZSAxLjMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KHN1YmVsZW1lbnQpCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLmFwcGVuZChzdWJlbGVtZW50KQogCiAgICAgZGVmIGV4dGVuZChzZWxmLCBlbGVtZW50cyk6CisgICAgICAgICIiIkFwcGVuZCBzdWJlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UuCisKKyAgICAgICAgKmVsZW1lbnRzKiBpcyBhIHNlcXVlbmNlIHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgorCisgICAgICAgICIiIgogICAgICAgICBmb3IgZWxlbWVudCBpbiBlbGVtZW50czoKICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuLmV4dGVuZChlbGVtZW50cykKIAotICAgICMjCi0gICAgIyBJbnNlcnRzIGEgc3ViZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGVyZSB0byBpbnNlcnQgdGhlIG5ldyBzdWJlbGVtZW50LgotCi0gICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgZWxlbWVudCk6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLmluc2VydChpbmRleCwgZWxlbWVudCkKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBzdWJlbGVtZW50KToKKyAgICAgICAgIiIiSW5zZXJ0ICpzdWJlbGVtZW50KiBhdCBwb3NpdGlvbiAqaW5kZXgqLiIiIgorICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChzdWJlbGVtZW50KQorICAgICAgICBzZWxmLl9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIHN1YmVsZW1lbnQpCiAKICAgICBkZWYgX2Fzc2VydF9pc19lbGVtZW50KHNlbGYsIGUpOgogICAgICAgICAjIE5lZWQgdG8gcmVmZXIgdG8gdGhlIGFjdHVhbCBQeXRob24gaW1wbGVtZW50YXRpb24sIG5vdCB0aGUKICAgICAgICAgIyBzaGFkb3dpbmcgQyBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgX0VsZW1lbnQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBfRWxlbWVudF9QeSk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIGFuIEVsZW1lbnQsIG5vdCAlcycgJSB0eXBlKGUpLl9fbmFtZV9fKQogCi0gICAgIyMKLSAgICAjIFJlbW92ZXMgYSBtYXRjaGluZyBzdWJlbGVtZW50LiAgVW5saWtlIHRoZSA8Yj5maW5kPC9iPiBtZXRob2RzLAotICAgICMgdGhpcyBtZXRob2QgY29tcGFyZXMgZWxlbWVudHMgYmFzZWQgb24gaWRlbnRpdHksIG5vdCBvbiB0YWcKLSAgICAjIHZhbHVlIG9yIGNvbnRlbnRzLiAgVG8gcmVtb3ZlIHN1YmVsZW1lbnRzIGJ5IG90aGVyIG1lYW5zLCB0aGUKLSAgICAjIGVhc2llc3Qgd2F5IGlzIG9mdGVuIHRvIHVzZSBhIGxpc3QgY29tcHJlaGVuc2lvbiB0byBzZWxlY3Qgd2hhdAotICAgICMgZWxlbWVudHMgdG8ga2VlcCwgYW5kIHVzZSBzbGljZSBhc3NpZ25tZW50IHRvIHVwZGF0ZSB0aGUgcGFyZW50Ci0gICAgIyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50IFdoYXQgZWxlbWVudCB0byByZW1vdmUuCi0gICAgIyBAZXhjZXB0aW9uIFZhbHVlRXJyb3IgSWYgYSBtYXRjaGluZyBlbGVtZW50IGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHN1YmVsZW1lbnQpOgorICAgICAgICAiIiJSZW1vdmUgbWF0Y2hpbmcgc3ViZWxlbWVudC4KIAotICAgIGRlZiByZW1vdmUoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIFVubGlrZSB0aGUgZmluZCBtZXRob2RzLCB0aGlzIG1ldGhvZCBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbgorICAgICAgICBpZGVudGl0eSwgTk9UIE9OIHRhZyB2YWx1ZSBvciBjb250ZW50cy4gIFRvIHJlbW92ZSBzdWJlbGVtZW50cyBieQorICAgICAgICBvdGhlciBtZWFucywgdGhlIGVhc2llc3Qgd2F5IGlzIHRvIHVzZSBhIGxpc3QgY29tcHJlaGVuc2lvbiB0bworICAgICAgICBzZWxlY3Qgd2hhdCBlbGVtZW50cyB0byBrZWVwLCBhbmQgdGhlbiB1c2Ugc2xpY2UgYXNzaWdubWVudCB0byB1cGRhdGUKKyAgICAgICAgdGhlIHBhcmVudCBlbGVtZW50LgorCisgICAgICAgIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGlmIGEgbWF0Y2hpbmcgZWxlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQotICAgICAgICBzZWxmLl9jaGlsZHJlbi5yZW1vdmUoZWxlbWVudCkKLQotICAgICMjCi0gICAgIyAoRGVwcmVjYXRlZCkgUmV0dXJucyBhbGwgc3ViZWxlbWVudHMuICBUaGUgZWxlbWVudHMgYXJlIHJldHVybmVkCi0gICAgIyBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvZiBzdWJlbGVtZW50cy4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcworICAgICAgICBzZWxmLl9jaGlsZHJlbi5yZW1vdmUoc3ViZWxlbWVudCkKIAogICAgIGRlZiBnZXRjaGlsZHJlbihzZWxmKToKKyAgICAgICAgIiIiKERlcHJlY2F0ZWQpIFJldHVybiBhbGwgc3ViZWxlbWVudHMuCisKKyAgICAgICAgRWxlbWVudHMgYXJlIHJldHVybmVkIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICAgICAgIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCiAgICAgICAgICAgICAiVXNlICdsaXN0KGVsZW0pJyBvciBpdGVyYXRpb24gb3ZlciBlbGVtIGluc3RlYWQuIiwKQEAgLTMzOCwxMzEgKzI4NSwxMjggQEAKICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuCiAKLSAgICAjIwotICAgICMgRmluZHMgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50IG9yIE5vbmUKLQogICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyB0ZXh0IGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcgc3ViZWxlbWVudCwgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZQotICAgICMgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQKLSAgICAjICAgICBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KLSAgICAjICAgICBlbXB0eSBzdHJpbmcuCi0gICAgIyBAZGVmcmV0dXJuIHN0cmluZwotCiAgICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCB0ZXh0IGZvciBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpkZWZhdWx0KiBpcyB0aGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRleHQgY29udGVudCBvZiBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBkZWZhdWx0IHZhbHVlIGlmCisgICAgICAgIG5vbmUgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIGFuIGVsZW1lbnQgaXMgZm91bmQgaGF2aW5nIG5vIHRleHQKKyAgICAgICAgY29udGVudCwgdGhlIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBIGxpc3Qgb3Igb3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm5zIGxpc3QgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBvciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBhIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhYmxlIHlpZWxkaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLml0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgUmVzZXRzIGFuIGVsZW1lbnQuICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMKLSAgICAjIGFsbCBhdHRyaWJ1dGVzLCBhbmQgc2V0cyB0aGUgPGI+dGV4dDwvYj4gYW5kIDxiPnRhaWw8L2I+IGF0dHJpYnV0ZXMKLSAgICAjIHRvIE5vbmUuCi0KICAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlc2V0IGVsZW1lbnQuCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzdWJlbGVtZW50cywgY2xlYXJzIGFsbCBhdHRyaWJ1dGVzLCBhbmQgc2V0cworICAgICAgICB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIHRvIE5vbmUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYXR0cmliLmNsZWFyKCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBbXQogICAgICAgICBzZWxmLnRleHQgPSBzZWxmLnRhaWwgPSBOb25lCiAKLSAgICAjIwotICAgICMgR2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLmdldDwvYj4sIGJ1dAotICAgICMgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgIwotICAgICMgQHBhcmFtIGtleSBXaGF0IGF0dHJpYnV0ZSB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEByZXR1cm4gVGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3IgdGhlIGRlZmF1bHQgdmFsdWUsIGlmIHRoZQotICAgICMgICAgIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgotICAgICMgQGRlZnJldHVybiBzdHJpbmcgb3IgTm9uZQotCiAgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIkdldCBlbGVtZW50IGF0dHJpYnV0ZS4KKworICAgICAgICBFcXVpdmFsZW50IHRvIGF0dHJpYi5nZXQsIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYQorICAgICAgICBiaXQgbW9yZSBlZmZpY2llbnRseS4gICprZXkqIGlzIHdoYXQgYXR0cmlidXRlIHRvIGxvb2sgZm9yLCBhbmQKKyAgICAgICAgKmRlZmF1bHQqIGlzIHdoYXQgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3IgdGhlIGRlZmF1bHQgaWYKKyAgICAgICAgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5nZXQoa2V5LCBkZWZhdWx0KQogCi0gICAgIyMKLSAgICAjIFNldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYltrZXldID0gdmFsdWU8L2I+LAotICAgICMgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LgotICAgICMKLSAgICAjIEBwYXJhbSBrZXkgV2hhdCBhdHRyaWJ1dGUgdG8gc2V0LgotICAgICMgQHBhcmFtIHZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWUuCi0KICAgICBkZWYgc2V0KHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAiIiJTZXQgZWxlbWVudCBhdHRyaWJ1dGUuCisKKyAgICAgICAgRXF1aXZhbGVudCB0byBhdHRyaWJba2V5XSA9IHZhbHVlLCBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZQorICAgICAgICB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuICAqa2V5KiBpcyB3aGF0IGF0dHJpYnV0ZSB0byBzZXQsIGFuZAorICAgICAgICAqdmFsdWUqIGlzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgdG8gc2V0IGl0IHRvLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmF0dHJpYltrZXldID0gdmFsdWUKIAotICAgICMjCi0gICAgIyBHZXRzIGEgbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMuICBUaGUgbmFtZXMgYXJlIHJldHVybmVkIGluIGFuCi0gICAgIyBhcmJpdHJhcnkgb3JkZXIgKGp1c3QgbGlrZSBmb3IgYW4gb3JkaW5hcnkgUHl0aG9uIGRpY3Rpb25hcnkpLgotICAgICMgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIua2V5cygpPC9iPi4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvZiBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcy4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBzdHJpbmdzCi0KICAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgIiIiR2V0IGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzLgorCisgICAgICAgIE5hbWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIsIGp1c3QgbGlrZSBhbiBvcmRpbmFyeQorICAgICAgICBQeXRob24gZGljdC4gIEVxdWl2YWxlbnQgdG8gYXR0cmliLmtleXMoKQorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIua2V5cygpCiAKLSAgICAjIwotICAgICMgR2V0cyBlbGVtZW50IGF0dHJpYnV0ZXMsIGFzIGEgc2VxdWVuY2UuICBUaGUgYXR0cmlidXRlcyBhcmUKLSAgICAjIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlci4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLml0ZW1zKCk8L2I+LgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIChuYW1lLCB2YWx1ZSkgdHVwbGVzIGZvciBhbGwgYXR0cmlidXRlcy4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiAoc3RyaW5nLCBzdHJpbmcpIHR1cGxlcwotCiAgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICAiIiJHZXQgZWxlbWVudCBhdHRyaWJ1dGVzIGFzIGEgc2VxdWVuY2UuCisKKyAgICAgICAgVGhlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkIGluIGFyYml0cmFyeSBvcmRlci4gIEVxdWl2YWxlbnQgdG8KKyAgICAgICAgYXR0cmliLml0ZW1zKCkuCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcy4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLml0ZW1zKCkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgdHJlZSBpdGVyYXRvci4gIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoaXMgZWxlbWVudAotICAgICMgYW5kIGFsbCBzdWJlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIsIGFuZCByZXR1cm5zIGFsbCBlbGVtZW50cwotICAgICMgd2l0aCBhIG1hdGNoaW5nIHRhZy4KLSAgICAjIDxwPgotICAgICMgSWYgdGhlIHRyZWUgc3RydWN0dXJlIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24sIG5ldyBvciByZW1vdmVkCi0gICAgIyBlbGVtZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBpbmNsdWRlZC4gIFRvIGdldCBhIHN0YWJsZSBzZXQsIHVzZSB0aGUKLSAgICAjIGxpc3QoKSBmdW5jdGlvbiBvbiB0aGUgaXRlcmF0b3IsIGFuZCBsb29wIG92ZXIgdGhlIHJlc3VsdGluZyBsaXN0LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgV2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpLgotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMuCi0gICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCi0KICAgICBkZWYgaXRlcihzZWxmLCB0YWc9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSB0cmVlIGl0ZXJhdG9yLgorCisgICAgICAgIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoZSBlbGVtZW50IGFuZCBhbGwgc3ViZWxlbWVudHMgaW4gZG9jdW1lbnQKKyAgICAgICAgb3JkZXIsIHJldHVybmluZyBhbGwgZWxlbWVudHMgd2l0aCBhIG1hdGNoaW5nIHRhZy4KKworICAgICAgICBJZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgbmV3IG9yIHJlbW92ZWQKKyAgICAgICAgZWxlbWVudHMgbWF5IG9yIG1heSBub3QgYmUgaW5jbHVkZWQuICBUbyBnZXQgYSBzdGFibGUgc2V0LCB1c2UgdGhlCisgICAgICAgIGxpc3QoKSBmdW5jdGlvbiBvbiB0aGUgaXRlcmF0b3IsIGFuZCBsb29wIG92ZXIgdGhlIHJlc3VsdGluZyBsaXN0LgorCisgICAgICAgICp0YWcqIGlzIHdoYXQgdGFncyB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKQorCisgICAgICAgIFJldHVybiBhbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIHRhZyA9PSAiKiI6CiAgICAgICAgICAgICB0YWcgPSBOb25lCiAgICAgICAgIGlmIHRhZyBpcyBOb25lIG9yIHNlbGYudGFnID09IHRhZzoKICAgICAgICAgICAgIHlpZWxkIHNlbGYKICAgICAgICAgZm9yIGUgaW4gc2VsZi5fY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgZSBpbiBlLml0ZXIodGFnKToKLSAgICAgICAgICAgICAgICB5aWVsZCBlCisgICAgICAgICAgICB5aWVsZCBmcm9tIGUuaXRlcih0YWcpCiAKICAgICAjIGNvbXBhdGliaWxpdHkKICAgICBkZWYgZ2V0aXRlcmF0b3Ioc2VsZiwgdGFnPU5vbmUpOgpAQCAtNDc0LDc4ICs0MTgsNjcgQEAKICAgICAgICAgKQogICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgdGV4dCBpdGVyYXRvci4gIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoaXMgZWxlbWVudAotICAgICMgYW5kIGFsbCBzdWJlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIsIGFuZCByZXR1cm5zIGFsbCBpbm5lcgotICAgICMgdGV4dC4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIGlubmVyIHRleHQuCi0gICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCi0KICAgICBkZWYgaXRlcnRleHQoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSB0ZXh0IGl0ZXJhdG9yLgorCisgICAgICAgIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoZSBlbGVtZW50IGFuZCBhbGwgc3ViZWxlbWVudHMgaW4gZG9jdW1lbnQKKyAgICAgICAgb3JkZXIsIHJldHVybmluZyBhbGwgaW5uZXIgdGV4dC4KKworICAgICAgICAiIiIKICAgICAgICAgdGFnID0gc2VsZi50YWcKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGFnLCBzdHIpIGFuZCB0YWcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi50ZXh0OgogICAgICAgICAgICAgeWllbGQgc2VsZi50ZXh0CiAgICAgICAgIGZvciBlIGluIHNlbGY6Ci0gICAgICAgICAgICBmb3IgcyBpbiBlLml0ZXJ0ZXh0KCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcworICAgICAgICAgICAgeWllbGQgZnJvbSBlLml0ZXJ0ZXh0KCkKICAgICAgICAgICAgIGlmIGUudGFpbDoKICAgICAgICAgICAgICAgICB5aWVsZCBlLnRhaWwKIAotIyBjb21wYXRpYmlsaXR5Ci1fRWxlbWVudCA9IF9FbGVtZW50SW50ZXJmYWNlID0gRWxlbWVudAotCi0jIwotIyBTdWJlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZWxlbWVudCBpbnN0YW5jZSwgYW5kCi0jIGFwcGVuZHMgaXQgdG8gYW4gZXhpc3RpbmcgZWxlbWVudC4KLSMgPHA+Ci0jIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlCi0jIGVpdGhlciA4LWJpdCBBU0NJSSBzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4KLSMKLSMgQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGVsZW1lbnQuCi0jIEBwYXJhbSB0YWcgVGhlIHN1YmVsZW1lbnQgbmFtZS4KLSMgQHBhcmFtIGF0dHJpYiBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KLSMgQHBhcmFtICoqZXh0cmEgQWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIFN1YkVsZW1lbnQocGFyZW50LCB0YWcsIGF0dHJpYj17fSwgKipleHRyYSk6CisgICAgIiIiU3ViZWxlbWVudCBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgYW4gZWxlbWVudCBpbnN0YW5jZSwgYW5kIGFwcGVuZHMgaXQKKyAgICB0byBhbiBleGlzdGluZyBwYXJlbnQuCisKKyAgICBUaGUgZWxlbWVudCB0YWcsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlIGVpdGhlcgorICAgIGJ5dGVzIG9yIFVuaWNvZGUgc3RyaW5ncy4KKworICAgICpwYXJlbnQqIGlzIHRoZSBwYXJlbnQgZWxlbWVudCwgKnRhZyogaXMgdGhlIHN1YmVsZW1lbnRzIG5hbWUsICphdHRyaWIqIGlzCisgICAgYW4gb3B0aW9uYWwgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLCAqZXh0cmEqIGFyZQorICAgIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgICIiIgogICAgIGF0dHJpYiA9IGF0dHJpYi5jb3B5KCkKICAgICBhdHRyaWIudXBkYXRlKGV4dHJhKQogICAgIGVsZW1lbnQgPSBwYXJlbnQubWFrZWVsZW1lbnQodGFnLCBhdHRyaWIpCiAgICAgcGFyZW50LmFwcGVuZChlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50CiAKLSMjCi0jIENvbW1lbnQgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsCi0jIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIGNvbW1lbnQgYnkgdGhlIHN0YW5kYXJkCi0jIHNlcmlhbGl6ZXIuCi0jIDxwPgotIyBUaGUgY29tbWVudCBzdHJpbmcgY2FuIGJlIGVpdGhlciBhbiA4LWJpdCBBU0NJSSBzdHJpbmcgb3IgYSBVbmljb2RlCi0jIHN0cmluZy4KLSMKLSMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudCBzdHJpbmcuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIGEgY29tbWVudC4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBDb21tZW50KHRleHQ9Tm9uZSk6CisgICAgIiIiQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgd2hpY2ggdGhlIHN0YW5kYXJkIHNlcmlhbGl6ZXIKKyAgICBzZXJpYWxpemVzIGFzIGFuIFhNTCBjb21tZW50LgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLgorCisgICAgIiIiCiAgICAgZWxlbWVudCA9IEVsZW1lbnQoQ29tbWVudCkKICAgICBlbGVtZW50LnRleHQgPSB0ZXh0CiAgICAgcmV0dXJuIGVsZW1lbnQKIAotIyMKLSMgUEkgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQKLSMgdGhhdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gYnkgdGhlIHN0YW5kYXJkCi0jIHNlcmlhbGl6ZXIuCi0jCi0jIEBwYXJhbSB0YXJnZXQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgdGFyZ2V0LgotIyBAcGFyYW0gdGV4dCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSBjb250ZW50cywgaWYgYW55LgotIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIFBJLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIHRleHQ9Tm9uZSk6CisgICAgIiIiUHJvY2Vzc2luZyBJbnN0cnVjdGlvbiBlbGVtZW50IGZhY3RvcnkuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgd2hpY2ggdGhlIHN0YW5kYXJkIHNlcmlhbGl6ZXIKKyAgICBzZXJpYWxpemVzIGFzIGFuIFhNTCBjb21tZW50LgorCisgICAgKnRhcmdldCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgKnRleHQqIGlzIGEKKyAgICBzdHJpbmcgY29udGFpbmluZyB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBjb250ZW50cywgaWYgYW55LgorCisgICAgIiIiCiAgICAgZWxlbWVudCA9IEVsZW1lbnQoUHJvY2Vzc2luZ0luc3RydWN0aW9uKQogICAgIGVsZW1lbnQudGV4dCA9IHRhcmdldAogICAgIGlmIHRleHQ6CkBAIC01NTQsMTcgKzQ4NywyMSBAQAogCiBQSSA9IFByb2Nlc3NpbmdJbnN0cnVjdGlvbgogCi0jIwotIyBRTmFtZSB3cmFwcGVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlLCBpbgotIyBvcmRlciB0byBnZXQgcHJvcGVyIG5hbWVzcGFjZSBoYW5kbGluZyBvbiBvdXRwdXQuCi0jCi0jIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFFOYW1lIHZhbHVlLCBpbiB0aGUgZm9ybSB7dXJpfWxvY2FsLAotIyAgICAgb3IsIGlmIHRoZSB0YWcgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBVUkkgcGFydCBvZiBhIFFOYW1lLgotIyBAcGFyYW0gdGFnIE9wdGlvbmFsIHRhZy4gIElmIGdpdmVuLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMKLSMgICAgIGFuIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgotIyBAcmV0dXJuIEFuIG9wYXF1ZSBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgUU5hbWUuCiAKIGNsYXNzIFFOYW1lOgorICAgICIiIlF1YWxpZmllZCBuYW1lIHdyYXBwZXIuCisKKyAgICBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYSBRTmFtZSBhdHRyaWJ1dGUgdmFsdWUgaW4gb3JkZXIgdG8gZ2V0CisgICAgcHJvcGVyIG5hbWVzcGFjZSBoYW5kaW5nIG9uIG91dHB1dC4KKworICAgICp0ZXh0X29yX3VyaSogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgUU5hbWUgdmFsdWUgZWl0aGVyIGluIHRoZSBmb3JtCisgICAge3VyaX1sb2NhbCwgb3IgaWYgdGhlIHRhZyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIFVSSSBwYXJ0IG9mIGEgUU5hbWUuCisKKyAgICAqdGFnKiBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB3aGljaCBpZiBnaXZlbiwgd2lsbCBtYWtlIHRoZSBmaXJzdAorICAgIGFyZ3VtZW50ICh0ZXh0X29yX3VyaSkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBVUkksIGFuZCB0aGlzIGFyZ3VtZW50ICh0YWcpCisgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHRfb3JfdXJpLCB0YWc9Tm9uZSk6CiAgICAgICAgIGlmIHRhZzoKICAgICAgICAgICAgIHRleHRfb3JfdXJpID0gInslc30lcyIgJSAodGV4dF9vcl91cmksIHRhZykKQEAgLTYwMiw2MyArNTM5LDY1IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgRWxlbWVudFRyZWUgd3JhcHBlciBjbGFzcy4gIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRpcmUgZWxlbWVudAotIyBoaWVyYXJjaHksIGFuZCBhZGRzIHNvbWUgZXh0cmEgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbQotIyBzdGFuZGFyZCBYTUwuCi0jCi0jIEBwYXJhbSBlbGVtZW50IE9wdGlvbmFsIHJvb3QgZWxlbWVudC4KLSMgQGtleXBhcmFtIGZpbGUgT3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgZmlsZSBuYW1lLiAgSWYgZ2l2ZW4sIHRoZQotIyAgICAgdHJlZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGlzIFhNTCBmaWxlLgogCiBjbGFzcyBFbGVtZW50VHJlZToKKyAgICAiIiJBbiBYTUwgZWxlbWVudCBoaWVyYXJjaHkuCiAKKyAgICBUaGlzIGNsYXNzIGFsc28gcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbQorICAgIHN0YW5kYXJkIFhNTC4KKworICAgICplbGVtZW50KiBpcyBhbiBvcHRpb25hbCByb290IGVsZW1lbnQgbm9kZSwKKyAgICAqZmlsZSogaXMgYW4gb3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgZmlsZSBuYW1lIG9mIGFuIFhNTCBmaWxlIHdob3NlCisgICAgY29udGVudHMgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHRyZWUgd2l0aC4KKworICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgICAgICMgYXNzZXJ0IGVsZW1lbnQgaXMgTm9uZSBvciBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQgIyBmaXJzdCBub2RlCiAgICAgICAgIGlmIGZpbGU6CiAgICAgICAgICAgICBzZWxmLnBhcnNlKGZpbGUpCiAKLSAgICAjIwotICAgICMgR2V0cyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgZ2V0cm9vdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHJvb3QgZWxlbWVudCBvZiB0aGlzIHRyZWUuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290CiAKLSAgICAjIwotICAgICMgUmVwbGFjZXMgdGhlIHJvb3QgZWxlbWVudCBmb3IgdGhpcyB0cmVlLiAgVGhpcyBkaXNjYXJkcyB0aGUKLSAgICAjIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHRyZWUsIGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBnaXZlbgotICAgICMgZWxlbWVudC4gIFVzZSB3aXRoIGNhcmUuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnQgQW4gZWxlbWVudCBpbnN0YW5jZS4KLQogICAgIGRlZiBfc2V0cm9vdChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgIiIiUmVwbGFjZSByb290IGVsZW1lbnQgb2YgdGhpcyB0cmVlLgorCisgICAgICAgIFRoaXMgd2lsbCBkaXNjYXJkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB0cmVlIGFuZCByZXBsYWNlIGl0CisgICAgICAgIHdpdGggdGhlIGdpdmVuIGVsZW1lbnQuICBVc2Ugd2l0aCBjYXJlIQorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQKIAotICAgICMjCi0gICAgIyBMb2FkcyBhbiBleHRlcm5hbCBYTUwgZG9jdW1lbnQgaW50byB0aGlzIGVsZW1lbnQgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gc291cmNlIEEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LiAgSWYgYSBmaWxlIG9iamVjdCBpcwotICAgICMgICAgIGdpdmVuLCBpdCBvbmx5IGhhcyB0byBpbXBsZW1lbnQgYSA8Yj5yZWFkKG4pPC9iPiBtZXRob2QuCi0gICAgIyBAa2V5cGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0gICAgIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0gICAgIyBAcmV0dXJuIFRoZSBkb2N1bWVudCByb290IGVsZW1lbnQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLSAgICAjIEBleGNlcHRpb24gUGFyc2VFcnJvciBJZiB0aGUgcGFyc2VyIGZhaWxzIHRvIHBhcnNlIHRoZSBkb2N1bWVudC4KLQogICAgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UsIHBhcnNlcj1Ob25lKToKKyAgICAgICAgIiIiTG9hZCBleHRlcm5hbCBYTUwgZG9jdW1lbnQgaW50byBlbGVtZW50IHRyZWUuCisKKyAgICAgICAgKnNvdXJjZSogaXMgYSBmaWxlIG5hbWUgb3IgZmlsZSBvYmplY3QsICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlcgorICAgICAgICBpbnN0YW5jZSB0aGF0IGRlZmF1bHRzIHRvIFhNTFBhcnNlci4KKworICAgICAgICBQYXJzZUVycm9yIGlzIHJhaXNlZCBpZiB0aGUgcGFyc2VyIGZhaWxzIHRvIHBhcnNlIHRoZSBkb2N1bWVudC4KKworICAgICAgICBSZXR1cm5zIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNvdXJjZSBkb2N1bWVudC4KKworICAgICAgICAiIiIKICAgICAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAicmVhZCIpOgogICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCiAgICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIG5vdCBwYXJzZXI6Ci0gICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQotICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIHBhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgSWYgbm8gcGFyc2VyIHdhcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIGRlZmF1bHQgWE1MUGFyc2VyCisgICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKCkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHBhcnNlciwgJ19wYXJzZV93aG9sZScpOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBkZWZhdWx0IFhNTFBhcnNlciwgd2hlbiBpdCBjb21lcyBmcm9tIGFuIGFjY2VsZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAjIGNhbiBkZWZpbmUgYW4gaW50ZXJuYWwgX3BhcnNlX3dob2xlIEFQSSBmb3IgZWZmaWNpZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgIyBJdCBjYW4gYmUgdXNlZCB0byBwYXJzZSB0aGUgd2hvbGUgc291cmNlIHdpdGhvdXQgZmVlZGluZworICAgICAgICAgICAgICAgICAgICAjIGl0IHdpdGggY2h1bmtzLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gcGFyc2VyLl9wYXJzZV93aG9sZShzb3VyY2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yb290CisgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZCg2NTUzNikKICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTY2OSwxNSArNjA4LDE1IEBACiAgICAgICAgICAgICBpZiBjbG9zZV9zb3VyY2U6CiAgICAgICAgICAgICAgICAgc291cmNlLmNsb3NlKCkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgdHJlZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4gIFRoZSBpdGVyYXRvciBsb29wcwotICAgICMgb3ZlciBhbGwgZWxlbWVudHMgaW4gdGhpcyB0cmVlLCBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFdoYXQgdGFncyB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKQotICAgICMgQHJldHVybiBBbiBpdGVyYXRvci4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIGFuZCByZXR1cm4gdHJlZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4KKworICAgICAgICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciBhbGwgZWxlbWVudHMgaW4gdGhpcyB0cmVlLCBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAqdGFnKiBpcyBhIHN0cmluZyB3aXRoIHRoZSB0YWcgbmFtZSB0byBpdGVyYXRlIG92ZXIKKyAgICAgICAgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuaXRlcih0YWcpCiAKQEAgLTY5MSwxNSArNjMwLDE3IEBACiAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVyKHRhZykpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZChwYXRoKSwgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50IG9yIE5vbmUKLQogICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQocGF0aCksIHdoaWNoIGlzIEVsZW1lbnQuZmluZCgpCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03MTEsMTkgKzY1MiwxNyBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmR0ZXh0KHBhdGgpLCBzdGFydGluZyBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZQotICAgICMgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQKLSAgICAjICAgICBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KLSAgICAjICAgICBlbXB0eSBzdHJpbmcuCi0gICAgIyBAZGVmcmV0dXJuIHN0cmluZwotCiAgICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZHRleHQocGF0aCksICB3aGljaCBpcyBFbGVtZW50LmZpbmR0ZXh0KCkKKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTczNSwxNiArNjc0LDE3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kdGV4dChwYXRoLCBkZWZhdWx0LCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmRhbGwocGF0aCksIHN0YXJ0aW5nIGF0IHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBIGxpc3Qgb3IgaXRlcmF0b3IgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kYWxsKHBhdGgpLCB3aGljaCBpcyBFbGVtZW50LmZpbmRhbGwoKS4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gbGlzdCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzU2LDE3ICs2OTYsMTcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmRhbGwocGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5pdGVyZmluZChwYXRoKS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3Igb3Igc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gYSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBpdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLml0ZXJmaW5kKHBhdGgpLCB3aGljaCBpcyBlbGVtZW50Lml0ZXJmaW5kKCkKKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gYW4gaXRlcmFibGUgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03NzgsMjYgKzcxOCwzNSBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuaXRlcmZpbmQocGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBXcml0ZXMgdGhlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUsIGFzIFhNTC4KLSAgICAjCi0gICAgIyBAZGVmIHdyaXRlKGZpbGUsICoqb3B0aW9ucykKLSAgICAjIEBwYXJhbSBmaWxlIEEgZmlsZSBuYW1lLCBvciBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3Igd3JpdGluZy4KLSAgICAjIEBwYXJhbSAqKm9wdGlvbnMgT3B0aW9ucywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0gICAgIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KLSAgICAjICAgICBVc2UgInVuaWNvZGUiIHRvIHJldHVybiBhIFVuaWNvZGUgc3RyaW5nLgotICAgICMgQGtleXBhcmFtIHhtbF9kZWNsYXJhdGlvbiBDb250cm9scyBpZiBhbiBYTUwgZGVjbGFyYXRpb24gc2hvdWxkCi0gICAgIyAgICAgYmUgYWRkZWQgdG8gdGhlIGZpbGUuICBVc2UgRmFsc2UgZm9yIG5ldmVyLCBUcnVlIGZvciBhbHdheXMsCi0gICAgIyAgICAgTm9uZSBmb3Igb25seSBpZiBub3QgVVMtQVNDSUkgb3IgVVRGLTggb3IgVW5pY29kZS4gIE5vbmUgaXMgZGVmYXVsdC4KLSAgICAjIEBrZXlwYXJhbSBkZWZhdWx0X25hbWVzcGFjZSBTZXRzIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgKGZvciAieG1sbnMiKS4KLSAgICAjIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCi0gICAgIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KLQogICAgIGRlZiB3cml0ZShzZWxmLCBmaWxlX29yX2ZpbGVuYW1lLAogICAgICAgICAgICAgICBlbmNvZGluZz1Ob25lLAogICAgICAgICAgICAgICB4bWxfZGVjbGFyYXRpb249Tm9uZSwKICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwKLSAgICAgICAgICAgICAgbWV0aG9kPU5vbmUpOgorICAgICAgICAgICAgICBtZXRob2Q9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSk6CisgICAgICAgICIiIldyaXRlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUgYXMgWE1MLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAqZmlsZV9vcl9maWxlbmFtZSogLS0gZmlsZSBuYW1lIG9yIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nCisKKyAgICAgICAgICAqZW5jb2RpbmcqIC0tIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQ6IFVTLUFTQ0lJKQorCisgICAgICAgICAgKnhtbF9kZWNsYXJhdGlvbiogLS0gYm9vbCBpbmRpY2F0aW5nIGlmIGFuIFhNTCBkZWNsYXJhdGlvbiBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgb3V0cHV0LiBJZiBOb25lLCBhbiBYTUwgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhZGRlZCBpZiBlbmNvZGluZyBJUyBOT1QgZWl0aGVyIG9mOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTLUFTQ0lJLCBVVEYtOCwgb3IgVW5pY29kZQorCisgICAgICAgICAgKmRlZmF1bHRfbmFtZXNwYWNlKiAtLSBzZXRzIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgKGZvciAieG1sbnMiKQorCisgICAgICAgICAgKm1ldGhvZCogLS0gZWl0aGVyICJ4bWwiIChkZWZhdWx0KSwgImh0bWwsICJ0ZXh0Iiwgb3IgImMxNG4iCisKKyAgICAgICAgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIC0tIGNvbnRyb2xzIHRoZSBmb3JtYXR0aW5nIG9mIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW4gbm8gY29udGVudC4gSWYgVHJ1ZSAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBzaW5nbGUgc2VsZi1jbG9zZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZywgb3RoZXJ3aXNlIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBwYWlyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzdGFydC9lbmQgdGFncworCisgICAgICAgICIiIgogICAgICAgICBpZiBub3QgbWV0aG9kOgogICAgICAgICAgICAgbWV0aG9kID0gInhtbCIKICAgICAgICAgZWxpZiBtZXRob2Qgbm90IGluIF9zZXJpYWxpemU6CkBAIC04MjUsNyArNzc0LDggQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcW5hbWVzLCBuYW1lc3BhY2VzID0gX25hbWVzcGFjZXMoc2VsZi5fcm9vdCwgZGVmYXVsdF9uYW1lc3BhY2UpCiAgICAgICAgICAgICAgICAgc2VyaWFsaXplID0gX3NlcmlhbGl6ZVttZXRob2RdCi0gICAgICAgICAgICAgICAgc2VyaWFsaXplKHdyaXRlLCBzZWxmLl9yb290LCBxbmFtZXMsIG5hbWVzcGFjZXMpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplKHdyaXRlLCBzZWxmLl9yb290LCBxbmFtZXMsIG5hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogCiAgICAgZGVmIHdyaXRlX2MxNG4oc2VsZiwgZmlsZSk6CiAgICAgICAgICMgbHhtbC5ldHJlZSBjb21wYXRpYmlsaXR5LiAgdXNlIG91dHB1dCBtZXRob2QgaW5zdGVhZApAQCAtOTQ3LDcgKzg5Nyw4IEBACiAgICAgICAgICAgICBhZGRfcW5hbWUodGV4dC50ZXh0KQogICAgIHJldHVybiBxbmFtZXMsIG5hbWVzcGFjZXMKIAotZGVmIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorZGVmIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHMsICoqa3dhcmdzKToKICAgICB0YWcgPSBlbGVtLnRhZwogICAgIHRleHQgPSBlbGVtLnRleHQKICAgICBpZiB0YWcgaXMgQ29tbWVudDoKQEAgLTk2MCw3ICs5MTEsOCBAQAogICAgICAgICAgICAgaWYgdGV4dDoKICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQogICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKLSAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lKQorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3cml0ZSgiPCIgKyB0YWcpCiAgICAgICAgICAgICBpdGVtcyA9IGxpc3QoZWxlbS5pdGVtcygpKQpAQCAtOTgyLDEyICs5MzQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBfZXNjYXBlX2F0dHJpYih2KQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgiICVzPVwiJXNcIiIgJSAocW5hbWVzW2tdLCB2KSkKLSAgICAgICAgICAgIGlmIHRleHQgb3IgbGVuKGVsZW0pOgorICAgICAgICAgICAgaWYgdGV4dCBvciBsZW4oZWxlbSkgb3Igbm90IHNob3J0X2VtcHR5X2VsZW1lbnRzOgogICAgICAgICAgICAgICAgIHdyaXRlKCI+IikKICAgICAgICAgICAgICAgICBpZiB0ZXh0OgogICAgICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQogICAgICAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgICAgICAgICAgICAgIHdyaXRlKCI8LyIgKyB0YWcgKyAiPiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHdyaXRlKCIgLz4iKQpAQCAtMTAwMiw3ICs5NTUsNyBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKLWRlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcyk6CitkZWYgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMsICoqa3dhcmdzKToKICAgICB0YWcgPSBlbGVtLnRhZwogICAgIHRleHQgPSBlbGVtLnRleHQKICAgICBpZiB0YWcgaXMgQ29tbWVudDoKQEAgLTEwNjYsMTggKzEwMTksMTkgQEAKICMgICAiYzE0biI6IF9zZXJpYWxpemVfYzE0biwKIH0KIAotIyMKLSMgUmVnaXN0ZXJzIGEgbmFtZXNwYWNlIHByZWZpeC4gIFRoZSByZWdpc3RyeSBpcyBnbG9iYWwsIGFuZCBhbnkKLSMgZXhpc3RpbmcgbWFwcGluZyBmb3IgZWl0aGVyIHRoZSBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkKLSMgd2lsbCBiZSByZW1vdmVkLgotIwotIyBAcGFyYW0gcHJlZml4IE5hbWVzcGFjZSBwcmVmaXguCi0jIEBwYXJhbSB1cmkgTmFtZXNwYWNlIHVyaS4gIFRhZ3MgYW5kIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2UKLSMgICAgIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIGlmIGF0IGFsbCBwb3NzaWJsZS4KLSMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIHRoZSBwcmVmaXggaXMgcmVzZXJ2ZWQsIG9yIGlzIG90aGVyd2lzZQotIyAgICAgaW52YWxpZC4KIAogZGVmIHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSk6CisgICAgIiIiUmVnaXN0ZXIgYSBuYW1lc3BhY2UgcHJlZml4LgorCisgICAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueSBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlCisgICAgZ2l2ZW4gcHJlZml4IG9yIHRoZSBuYW1lc3BhY2UgVVJJIHdpbGwgYmUgcmVtb3ZlZC4KKworICAgICpwcmVmaXgqIGlzIHRoZSBuYW1lc3BhY2UgcHJlZml4LCAqdXJpKiBpcyBhIG5hbWVzcGFjZSB1cmkuIFRhZ3MgYW5kCisgICAgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZSB3aWxsIGJlIHNlcmlhbGl6ZWQgd2l0aCBwcmVmaXggaWYgcG9zc2libGUuCisKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZCBpZiBwcmVmaXggaXMgcmVzZXJ2ZWQgb3IgaXMgaW52YWxpZC4KKworICAgICIiIgogICAgIGlmIHJlLm1hdGNoKCJuc1xkKyQiLCBwcmVmaXgpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcmVmaXggZm9ybWF0IHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UiKQogICAgIGZvciBrLCB2IGluIGxpc3QoX25hbWVzcGFjZV9tYXAuaXRlbXMoKSk6CkBAIC0xMTUzLDQwICsxMTA3LDI3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCi0jIHN1YmVsZW1lbnRzLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCB0aGUgcmV0dXJuIHR5cGUgaXMgYSBzdHJpbmc7Ci0jIG90aGVyd2lzZSBpdCBpcyBhIGJ5dGVzIGFycmF5LgotIwotIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KLSMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0jIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCi0jICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotIyBAcmV0dXJuIEFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzdHJpbmcKK2RlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSwgKiwKKyAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKKyAgICAiIiJHZW5lcmF0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgWE1MIGVsZW1lbnQuCiAKLWRlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CisgICAgQWxsIHN1YmVsZW1lbnRzIGFyZSBpbmNsdWRlZC4gIElmIGVuY29kaW5nIGlzICJ1bmljb2RlIiwgYSBzdHJpbmcKKyAgICBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIGEgYnl0ZXN0cmluZyBpcyByZXR1cm5lZC4KKworICAgICplbGVtZW50KiBpcyBhbiBFbGVtZW50IGluc3RhbmNlLCAqZW5jb2RpbmcqIGlzIGFuIG9wdGlvbmFsIG91dHB1dAorICAgIGVuY29kaW5nIGRlZmF1bHRpbmcgdG8gVVMtQVNDSUksICptZXRob2QqIGlzIGFuIG9wdGlvbmFsIG91dHB1dCB3aGljaCBjYW4KKyAgICBiZSBvbmUgb2YgInhtbCIgKGRlZmF1bHQpLCAiaHRtbCIsICJ0ZXh0IiBvciAiYzE0biIuCisKKyAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKworICAgICIiIgogICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkgaWYgZW5jb2RpbmcgPT0gJ3VuaWNvZGUnIGVsc2UgaW8uQnl0ZXNJTygpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBzdHJlYW0uZ2V0dmFsdWUoKQogCi0jIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuCi0jCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0jIEByZXR1cm4gQSBzZXF1ZW5jZSBvYmplY3QgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCi0jIEBkZWZyZXR1cm4gc2VxdWVuY2UKLSMgQHNpbmNlIDEuMwotCiBjbGFzcyBfTGlzdERhdGFTdHJlYW0oaW8uQnVmZmVyZWRJT0Jhc2UpOgotICAgICIiIiBBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UKLSAgICAiIiIKKyAgICAiIiJBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CiAKQEAgLTEyMDIsMjIgKzExNDMsMjUgQEAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmxzdCkKIAotZGVmIHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CitkZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKICAgICBsc3QgPSBbXQogICAgIHN0cmVhbSA9IF9MaXN0RGF0YVN0cmVhbShsc3QpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBsc3QKIAotIyMKLSMgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcwotIyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkuCi0jIDxwPgotIyBUaGUgZXhhY3Qgb3V0cHV0IGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzCi0jIHZlcnNpb24sIGl0J3Mgd3JpdHRlbiBhcyBhbiBvcmRpbmFyeSBYTUwgZmlsZS4KLSMKLSMgQHBhcmFtIGVsZW0gQW4gZWxlbWVudCB0cmVlIG9yIGFuIGluZGl2aWR1YWwgZWxlbWVudC4KIAogZGVmIGR1bXAoZWxlbSk6CisgICAgIiIiV3JpdGUgZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KKworICAgICplbGVtKiBpcyBlaXRoZXIgYW4gRWxlbWVudFRyZWUsIG9yIGEgc2luZ2xlIEVsZW1lbnQuICBUaGUgZXhhY3Qgb3V0cHV0CisgICAgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMgdmVyc2lvbiwgaXQncyB3cml0dGVuIGFzIGFuCisgICAgb3JkaW5hcnkgWE1MIGZpbGUuCisKKyAgICAiIiIKICAgICAjIGRlYnVnZ2luZwogICAgIGlmIG5vdCBpc2luc3RhbmNlKGVsZW0sIEVsZW1lbnRUcmVlKToKICAgICAgICAgZWxlbSA9IEVsZW1lbnRUcmVlKGVsZW0pCkBAIC0xMjI5LDE0NCArMTE3MywxNjkgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgcGFyc2luZwogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlLgotIwotIyBAcGFyYW0gc291cmNlIEEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudFRyZWUgaW5zdGFuY2UKIAogZGVmIHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBpbnRvIGVsZW1lbnQgdHJlZS4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwKKyAgICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UgZGVmYXVsdGluZyB0byBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm4gYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICB0cmVlID0gRWxlbWVudFRyZWUoKQogICAgIHRyZWUucGFyc2Uoc291cmNlLCBwYXJzZXIpCiAgICAgcmV0dXJuIHRyZWUKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LCBhbmQgcmVwb3J0cwotIyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gZXZlbnRzIEEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBJZiBvbWl0dGVkLCBvbmx5ICJlbmQiCi0jICAgICBldmVudHMgYXJlIHJlcG9ydGVkLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBIChldmVudCwgZWxlbSkgaXRlcmF0b3IuCiAKIGRlZiBpdGVycGFyc2Uoc291cmNlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIkluY3JlbWVudGFsbHkgcGFyc2UgWE1MIGRvY3VtZW50IGludG8gRWxlbWVudFRyZWUuCisKKyAgICBUaGlzIGNsYXNzIGFsc28gcmVwb3J0cyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIgYmFzZWQgb24gdGhlCisgICAgKmV2ZW50cyogaXQgaXMgaW5pdGlhbGl6ZWQgd2l0aC4gIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncworICAgICJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiIGFuZCAiZW5kLW5zIiAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldAorICAgIGRldGFpbGVkIG5hbWVzcGFjZSBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5CisgICAgImVuZCIgZXZlbnRzIGFyZSByZXBvcnRlZC4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwgKmV2ZW50cyogaXMKKyAgICBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuCisKKyAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIHByb3ZpZGluZyAoZXZlbnQsIGVsZW0pIHBhaXJzLgorCisgICAgIiIiCiAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6CiAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQogICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCi0gICAgaWYgbm90IHBhcnNlcjoKLSAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHJldHVybiBfSXRlclBhcnNlSXRlcmF0b3Ioc291cmNlLCBldmVudHMsIHBhcnNlciwgY2xvc2Vfc291cmNlKQogCisKK2NsYXNzIFhNTFB1bGxQYXJzZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzPU5vbmUsICosIF9wYXJzZXI9Tm9uZSk6CisgICAgICAgICMgVGhlIF9wYXJzZXIgYXJndW1lbnQgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtdXN0IG5vdCBiZSByZWxpZWQKKyAgICAgICAgIyB1cG9uIGluIHVzZXIgY29kZS4gSXQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzc0MSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgICMgX2VsZW1lbnR0cmVlLmMgZXhwZWN0cyBhIGxpc3QsIG5vdCBhIGRlcXVlCisgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZSA9IFtdCisgICAgICAgIHNlbGYuX2luZGV4ID0gMAorICAgICAgICBzZWxmLl9wYXJzZXIgPSBfcGFyc2VyIG9yIFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKKyAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZworICAgICAgICBpZiBldmVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIGV2ZW50cyA9ICgiZW5kIiwpCisgICAgICAgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50c19xdWV1ZSwgZXZlbnRzKQorCisgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkZlZWQgZW5jb2RlZCBkYXRhIHRvIHBhcnNlci4iIiIKKyAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmZWVkKCkgY2FsbGVkIGFmdGVyIGVuZCBvZiBzdHJlYW0iKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZS5hcHBlbmQoZXhjKQorCisgICAgZGVmIF9jbG9zZV9hbmRfcmV0dXJuX3Jvb3Qoc2VsZik6CisgICAgICAgICMgaXRlcnBhcnNlIG5lZWRzIHRoaXMgdG8gc2V0IGl0cyByb290IGF0dHJpYnV0ZSBwcm9wZXJseSA6KAorICAgICAgICByb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQorICAgICAgICByZXR1cm4gcm9vdAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGaW5pc2ggZmVlZGluZyBkYXRhIHRvIHBhcnNlci4KKworICAgICAgICBVbmxpa2UgWE1MUGFyc2VyLCBkb2VzIG5vdCByZXR1cm4gdGhlIHJvb3QgZWxlbWVudC4gVXNlCisgICAgICAgIHJlYWRfZXZlbnRzKCkgdG8gY29uc3VtZSBlbGVtZW50cyBmcm9tIFhNTFB1bGxQYXJzZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbG9zZV9hbmRfcmV0dXJuX3Jvb3QoKQorCisgICAgZGVmIHJlYWRfZXZlbnRzKHNlbGYpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgY3VycmVudGx5IGF2YWlsYWJsZSAoZXZlbnQsIGVsZW0pIHBhaXJzLgorCisgICAgICAgIEV2ZW50cyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgaW50ZXJuYWwgZXZlbnQgcXVldWUgYXMgdGhleSBhcmUKKyAgICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgZXZlbnRzID0gc2VsZi5fZXZlbnRzX3F1ZXVlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpbmRleCA9IHNlbGYuX2luZGV4CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXZlbnQgPSBldmVudHNbc2VsZi5faW5kZXhdCisgICAgICAgICAgICAgICAgIyBBdm9pZCByZXRhaW5pbmcgcmVmZXJlbmNlcyB0byBwYXN0IGV2ZW50cworICAgICAgICAgICAgICAgIGV2ZW50c1tzZWxmLl9pbmRleF0gPSBOb25lCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaW5kZXggKz0gMQorICAgICAgICAgICAgIyBDb21wYWN0IHRoZSBsaXN0IGluIGEgTygxKSBhbW9ydGl6ZWQgZmFzaGlvbgorICAgICAgICAgICAgIyBBcyBub3RlZCBhYm92ZSwgX2VsZW1lbnRyZWUuYyBuZWVkcyBhIGxpc3QsIG5vdCBhIGRlcXVlCisgICAgICAgICAgICBpZiBpbmRleCAqIDIgPj0gbGVuKGV2ZW50cyk6CisgICAgICAgICAgICAgICAgZXZlbnRzWzppbmRleF0gPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IGluZGV4CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHJhaXNlIGV2ZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50CisKKwogY2xhc3MgX0l0ZXJQYXJzZUl0ZXJhdG9yOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgZXZlbnRzLCBwYXJzZXIsIGNsb3NlX3NvdXJjZT1GYWxzZSk6CisgICAgICAgICMgVXNlIHRoZSBpbnRlcm5hbCwgdW5kb2N1bWVudGVkIF9wYXJzZXIgYXJndW1lbnQgZm9yIG5vdzsgV2hlbiB0aGUKKyAgICAgICAgIyBwYXJzZXIgYXJndW1lbnQgb2YgaXRlcnBhcnNlIGlzIHJlbW92ZWQsIHRoaXMgY2FuIGJlIGtpbGxlZC4KKyAgICAgICAgc2VsZi5fcGFyc2VyID0gWE1MUHVsbFBhcnNlcihldmVudHM9ZXZlbnRzLCBfcGFyc2VyPXBhcnNlcikKICAgICAgICAgc2VsZi5fZmlsZSA9IHNvdXJjZQogICAgICAgICBzZWxmLl9jbG9zZV9maWxlID0gY2xvc2Vfc291cmNlCi0gICAgICAgIHNlbGYuX2V2ZW50cyA9IFtdCi0gICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdCA9IE5vbmUKLSAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyCi0gICAgICAgICMgd2lyZSB1cCB0aGUgcGFyc2VyIGZvciBldmVudCByZXBvcnRpbmcKLSAgICAgICAgcGFyc2VyID0gc2VsZi5fcGFyc2VyLl9wYXJzZXIKLSAgICAgICAgYXBwZW5kID0gc2VsZi5fZXZlbnRzLmFwcGVuZAotICAgICAgICBpZiBldmVudHMgaXMgTm9uZToKLSAgICAgICAgICAgIGV2ZW50cyA9IFsiZW5kIl0KLSAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKLSAgICAgICAgICAgIGlmIGV2ZW50ID09ICJzdGFydCI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9c2VsZi5fcGFyc2VyLl9zdGFydF9saXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIHN0YXJ0KHRhZywgYXR0cmliX2luKSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBhdHRyaWJfaW4sIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9wYXJzZXIuX3N0YXJ0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIHN0YXJ0KHRhZywgYXR0cmliX2luKSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAiZW5kIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZD1zZWxmLl9wYXJzZXIuX2VuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIGVuZCh0YWcpKSkKLSAgICAgICAgICAgICAgICBwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJzdGFydC1ucyI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCB1cmksIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgKHByZWZpeCBvciAiIiwgdXJpIG9yICIiKSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJlbmQtbnMiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBOb25lKSkKLSAgICAgICAgICAgICAgICBwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZXZlbnQgJXIiICUgZXZlbnQpCiAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaXRlbSA9IHNlbGYuX2V2ZW50c1tzZWxmLl9pbmRleF0KLSAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCArPSAxCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0KLSAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGlmIHNlbGYuX2Vycm9yOgotICAgICAgICAgICAgICAgIGUgPSBzZWxmLl9lcnJvcgotICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQotICAgICAgICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuX3BhcnNlci5yZWFkX2V2ZW50cygpOgorICAgICAgICAgICAgICAgIHJldHVybiBldmVudAorICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyLl9wYXJzZXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlcgotICAgICAgICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XQotICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNiAqIDEwMjQpCiAgICAgICAgICAgICBpZiBkYXRhOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IGV4YworICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLl9jbG9zZV9hbmRfcmV0dXJuX3Jvb3QoKQogCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGNhbgotIyBiZSB1c2VkIHRvIGVtYmVkICJYTUwgbGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLgotIwotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgWE1MKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGVtYmVkICJYTUwgTGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEsICpwYXJzZXIqIGlzIGFuCisgICAgb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcGFyc2VyLmZlZWQodGV4dCkKICAgICByZXR1cm4gcGFyc2VyLmNsb3NlKCkKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LCBhbmQgYWxzbyByZXR1cm5zCi0jIGEgZGljdGlvbmFyeSB3aGljaCBtYXBzIGZyb20gZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgotIwotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyBhbiBFbGVtZW50IGluc3RhbmNlIGFuZCBhIGRpY3Rpb25hcnkuCi0jIEBkZWZyZXR1cm4gKEVsZW1lbnQsIGRpY3Rpb25hcnkpCiAKIGRlZiBYTUxJRCh0ZXh0LCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50IGZvciBpdHMgSURzLgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEsICpwYXJzZXIqIGlzIGFuCisgICAgb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIChFbGVtZW50LCBkaWN0KSB0dXBsZSwgaW4gd2hpY2ggdGhlCisgICAgZGljdCBtYXBzIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQpAQCAtMTM3OCwyNyArMTM0NywxOCBAQAogICAgICAgICAgICAgaWRzW2lkXSA9IGVsZW0KICAgICByZXR1cm4gdHJlZSwgaWRzCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFNhbWUgYXMge0BsaW5rICNYTUx9LgotIwotIyBAZGVmIGZyb21zdHJpbmcodGV4dCkKLSMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAotCisjIFBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudC4gIEFsaWFzIGZvciBYTUwoKS4KIGZyb21zdHJpbmcgPSBYTUwKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4KLSMKLSMgQHBhcmFtIHNlcXVlbmNlIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIFhNTCBkYXRhIGZyYWdtZW50cy4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0jIEBzaW5jZSAxLjMKLQogZGVmIGZyb21zdHJpbmdsaXN0KHNlcXVlbmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4KKworICAgICpzZXF1ZW5jZSogaXMgYSBsaXN0IG9mIG90aGVyIHNlcXVlbmNlLCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIKKyAgICBpbnN0YW5jZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyLgorCisgICAgUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIGZvciB0ZXh0IGluIHNlcXVlbmNlOgpAQCAtMTQwNywxOSArMTM2NywyMCBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMjCi0jIEdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4gIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlCi0jIG9mIHtAbGluayAjVHJlZUJ1aWxkZXIuc3RhcnR9LCB7QGxpbmsgI1RyZWVCdWlsZGVyLmRhdGF9LCBhbmQge0BsaW5rCi0jICNUcmVlQnVpbGRlci5lbmR9IG1ldGhvZCBjYWxscyB0byBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgc3RydWN0dXJlLgotIyA8cD4KLSMgWW91IGNhbiB1c2UgdGhpcyBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwKLSMgcGFyc2VyLCBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuCi0jCi0jIEBwYXJhbSBlbGVtZW50X2ZhY3RvcnkgT3B0aW9uYWwgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5Ci0jICAgIGlzIGNhbGxlZCB0byBjcmVhdGUgbmV3IEVsZW1lbnQgaW5zdGFuY2VzLCBhcyBuZWNlc3NhcnkuCiAKIGNsYXNzIFRyZWVCdWlsZGVyOgorICAgICIiIkdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4KIAorICAgIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlIG9mIHN0YXJ0LCBkYXRhLCBhbmQgZW5kIG1ldGhvZAorICAgIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuCisKKyAgICBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTAorICAgIHBhcnNlciwgb3IgYSBwYXJzZXIgZm9yIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LgorCisgICAgKmVsZW1lbnRfZmFjdG9yeSogaXMgYW4gb3B0aW9uYWwgZWxlbWVudCBmYWN0b3J5IHdoaWNoIGlzIGNhbGxlZAorICAgIHRvIGNyZWF0ZSBuZXcgRWxlbWVudCBpbnN0YW5jZXMsIGFzIG5lY2Vzc2FyeS4KKworICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50X2ZhY3Rvcnk9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2RhdGEgPSBbXSAjIGRhdGEgY29sbGVjdG9yCiAgICAgICAgIHNlbGYuX2VsZW0gPSBbXSAjIGVsZW1lbnQgc3RhY2sKQEAgLTE0MjksMTQgKzEzOTAsOCBAQAogICAgICAgICAgICAgZWxlbWVudF9mYWN0b3J5ID0gRWxlbWVudAogICAgICAgICBzZWxmLl9mYWN0b3J5ID0gZWxlbWVudF9mYWN0b3J5CiAKLSAgICAjIwotICAgICMgRmx1c2hlcyB0aGUgYnVpbGRlciBidWZmZXJzLCBhbmQgcmV0dXJucyB0aGUgdG9wbGV2ZWwgZG9jdW1lbnQKLSAgICAjIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZsdXNoIGJ1aWxkZXIgYnVmZmVycyBhbmQgcmV0dXJuIHRvcGxldmVsIGRvY3VtZW50IEVsZW1lbnQuIiIiCiAgICAgICAgIGFzc2VydCBsZW4oc2VsZi5fZWxlbSkgPT0gMCwgIm1pc3NpbmcgZW5kIHRhZ3MiCiAgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0IGlzIG5vdCBOb25lLCAibWlzc2luZyB0b3BsZXZlbCBlbGVtZW50IgogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdApAQCAtMTQ1MywyNCArMTQwOCwxNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0LnRleHQgPSB0ZXh0CiAgICAgICAgICAgICBzZWxmLl9kYXRhID0gW10KIAotICAgICMjCi0gICAgIyBBZGRzIHRleHQgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZGF0YSBBIHN0cmluZy4gIFRoaXMgc2hvdWxkIGJlIGVpdGhlciBhbiA4LWJpdCBzdHJpbmcKLSAgICAjICAgIGNvbnRhaW5pbmcgQVNDSUkgdGV4dCwgb3IgYSBVbmljb2RlIHN0cmluZy4KLQogICAgIGRlZiBkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJBZGQgdGV4dCB0byBjdXJyZW50IGVsZW1lbnQuIiIiCiAgICAgICAgIHNlbGYuX2RhdGEuYXBwZW5kKGRhdGEpCiAKLSAgICAjIwotICAgICMgT3BlbnMgYSBuZXcgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0gICAgIyBAcGFyYW0gYXR0cmliIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KLSAgICAjIEByZXR1cm4gVGhlIG9wZW5lZCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRycyk6CisgICAgICAgICIiIk9wZW4gbmV3IGVsZW1lbnQgYW5kIHJldHVybiBpdC4KKworICAgICAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLCAqYXR0cnMqIGlzIGEgZGljdCBjb250YWluaW5nIGVsZW1lbnQKKyAgICAgICAgYXR0cmlidXRlcy4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZmx1c2goKQogICAgICAgICBzZWxmLl9sYXN0ID0gZWxlbSA9IHNlbGYuX2ZhY3RvcnkodGFnLCBhdHRycykKICAgICAgICAgaWYgc2VsZi5fZWxlbToKQEAgLTE0NzksMTQgKzE0MjcsMTIgQEAKICAgICAgICAgc2VsZi5fdGFpbCA9IDAKICAgICAgICAgcmV0dXJuIGVsZW0KIAotICAgICMjCi0gICAgIyBDbG9zZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0gICAgIyBAcmV0dXJuIFRoZSBjbG9zZWQgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJDbG9zZSBhbmQgcmV0dXJuIGN1cnJlbnQgRWxlbWVudC4KKworICAgICAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9mbHVzaCgpCiAgICAgICAgIHNlbGYuX2xhc3QgPSBzZWxmLl9lbGVtLnBvcCgpCiAgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0LnRhZyA9PSB0YWcsXApAQCAtMTQ5NSwyMCArMTQ0MSwxOCBAQAogICAgICAgICBzZWxmLl90YWlsID0gMQogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdAogCi0jIwotIyBFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZQotIyA8Yj5leHBhdDwvYj4gcGFyc2VyLgotIwotIyBAa2V5cGFyYW0gdGFyZ2V0IFRhcmdldCBvYmplY3QuICBJZiBvbWl0dGVkLCB0aGUgYnVpbGRlciB1c2VzIGFuCi0jICAgICBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQge0BsaW5rICNUcmVlQnVpbGRlcn0gY2xhc3MuCi0jIEBrZXlwYXJhbSBodG1sIFByZWRlZmluZSBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQKLSMgICAgIGJ5IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgZW5jb2RpbmcuICBJZiBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcwotIyAgICAgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCi0jIEBzZWUgI0VsZW1lbnRUcmVlCi0jIEBzZWUgI1RyZWVCdWlsZGVyCiAKKyMgYWxzbyBzZWUgRWxlbWVudFRyZWUgYW5kIFRyZWVCdWlsZGVyCiBjbGFzcyBYTUxQYXJzZXI6CisgICAgIiIiRWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhIGJhc2VkIG9uIHRoZSBleHBhdCBwYXJzZXIuCisKKyAgICAqaHRtbCogYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcyAobm90IHN1cHBvcnRlZCBjdXJyZW50bHkpLAorICAgICp0YXJnZXQqIGlzIGFuIG9wdGlvbmFsIHRhcmdldCBvYmplY3Qgd2hpY2ggZGVmYXVsdHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgc3RhbmRhcmQgVHJlZUJ1aWxkZXIgY2xhc3MsICplbmNvZGluZyogaXMgYW4gb3B0aW9uYWwgZW5jb2Rpbmcgc3RyaW5nCisgICAgd2hpY2ggaWYgZ2l2ZW4sIG92ZXJyaWRlcyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZToKKyAgICBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzCisKKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKToKICAgICAgICAgdHJ5OgpAQCAtMTU0MSwxOSArMTQ4NSwxMCBAQAogICAgICAgICAgICAgcGFyc2VyLkNvbW1lbnRIYW5kbGVyID0gdGFyZ2V0LmNvbW1lbnQKICAgICAgICAgaWYgaGFzYXR0cih0YXJnZXQsICdwaScpOgogICAgICAgICAgICAgcGFyc2VyLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgPSB0YXJnZXQucGkKLSAgICAgICAgIyBsZXQgZXhwYXQgZG8gdGhlIGJ1ZmZlcmluZywgaWYgc3VwcG9ydGVkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICAjIHVzZSBuZXctc3R5bGUgYXR0cmlidXRlIGhhbmRsaW5nLCBpZiBzdXBwb3J0ZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgIGlmIGhhc2F0dHIodGFyZ2V0LCAnc3RhcnQnKToKLSAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuX3N0YXJ0X2xpc3QKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICAjIENvbmZpZ3VyZSBweWV4cGF0OiBidWZmZXJpbmcsIG5ldy1zdHlsZSBhdHRyaWJ1dGUgaGFuZGxpbmcuCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQogICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogICAgICAgICBzZWxmLmVudGl0eSA9IHt9CiAgICAgICAgIHRyeToKQEAgLTE1NjEsNiArMTQ5NiwzOSBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzICMgdW5rbm93bgogCisgICAgZGVmIF9zZXRldmVudHMoc2VsZiwgZXZlbnRzX3F1ZXVlLCBldmVudHNfdG9fcmVwb3J0KToKKyAgICAgICAgIyBJbnRlcm5hbCBBUEkgZm9yIFhNTFB1bGxQYXJzZXIKKyAgICAgICAgIyBldmVudHNfdG9fcmVwb3J0OiBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBkdXJpbmcgcGFyc2luZyAoc2FtZSBhcworICAgICAgICAjIHRoZSAqZXZlbnRzKiBvZiBYTUxQdWxsUGFyc2VyJ3MgY29uc3RydWN0b3IuCisgICAgICAgICMgZXZlbnRzX3F1ZXVlOiBhIGxpc3Qgb2YgYWN0dWFsIHBhcnNpbmcgZXZlbnRzIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQKKyAgICAgICAgIyBieSB0aGUgdW5kZXJseWluZyBwYXJzZXIuCisgICAgICAgICMKKyAgICAgICAgcGFyc2VyID0gc2VsZi5fcGFyc2VyCisgICAgICAgIGFwcGVuZCA9IGV2ZW50c19xdWV1ZS5hcHBlbmQKKyAgICAgICAgZm9yIGV2ZW50X25hbWUgaW4gZXZlbnRzX3RvX3JlcG9ydDoKKyAgICAgICAgICAgIGlmIGV2ZW50X25hbWUgPT0gInN0YXJ0IjoKKyAgICAgICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9zdGFydCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIHN0YXJ0KHRhZywgYXR0cmliX2luKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gImVuZCI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZD1zZWxmLl9lbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBlbmQodGFnKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJzdGFydC1ucyI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCB1cmksIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAiZW5kLW5zIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBOb25lKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZXZlbnQgJXIiICUgZXZlbnRfbmFtZSkKKwogICAgIGRlZiBfcmFpc2VlcnJvcihzZWxmLCB2YWx1ZSk6CiAgICAgICAgIGVyciA9IFBhcnNlRXJyb3IodmFsdWUpCiAgICAgICAgIGVyci5jb2RlID0gdmFsdWUuY29kZQpAQCAtMTU3OCwyMSArMTU0NiwxNiBAQAogICAgICAgICAgICAgc2VsZi5fbmFtZXNba2V5XSA9IG5hbWUKICAgICAgICAgcmV0dXJuIG5hbWUKIAotICAgIGRlZiBfc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgorICAgIGRlZiBfc3RhcnQoc2VsZiwgdGFnLCBhdHRyX2xpc3QpOgorICAgICAgICAjIEhhbmRsZXIgZm9yIGV4cGF0J3MgU3RhcnRFbGVtZW50SGFuZGxlci4gU2luY2Ugb3JkZXJlZF9hdHRyaWJ1dGVzCisgICAgICAgICMgaXMgc2V0LCB0aGUgYXR0cmlidXRlcyBhcmUgcmVwb3J0ZWQgYXMgYSBsaXN0IG9mIGFsdGVybmF0aW5nCisgICAgICAgICMgYXR0cmlidXRlIG5hbWUsdmFsdWUuCiAgICAgICAgIGZpeG5hbWUgPSBzZWxmLl9maXhuYW1lCiAgICAgICAgIHRhZyA9IGZpeG5hbWUodGFnKQogICAgICAgICBhdHRyaWIgPSB7fQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhdHRyaWJfaW4uaXRlbXMoKToKLSAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGtleSldID0gdmFsdWUKLSAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQotCi0gICAgZGVmIF9zdGFydF9saXN0KHNlbGYsIHRhZywgYXR0cmliX2luKToKLSAgICAgICAgZml4bmFtZSA9IHNlbGYuX2ZpeG5hbWUKLSAgICAgICAgdGFnID0gZml4bmFtZSh0YWcpCi0gICAgICAgIGF0dHJpYiA9IHt9Ci0gICAgICAgIGlmIGF0dHJpYl9pbjoKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRyaWJfaW4pLCAyKToKLSAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyaWJfaW5baV0pXSA9IGF0dHJpYl9pbltpKzFdCisgICAgICAgIGlmIGF0dHJfbGlzdDoKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRyX2xpc3QpLCAyKToKKyAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyX2xpc3RbaV0pXSA9IGF0dHJfbGlzdFtpKzFdCiAgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKIAogICAgIGRlZiBfZW5kKHNlbGYsIHRhZyk6CkBAIC0xNjUwLDE1ICsxNjEzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQogICAgICAgICAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAKLSAgICAjIwotICAgICMgKERlcHJlY2F0ZWQpIEhhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLgotICAgICMKLSAgICAjIEBwYXJhbSBuYW1lIERvY3R5cGUgbmFtZS4KLSAgICAjIEBwYXJhbSBwdWJpZCBQdWJsaWMgaWRlbnRpZmllci4KLSAgICAjIEBwYXJhbSBzeXN0ZW0gU3lzdGVtIGlkZW50aWZpZXIuCi0KICAgICBkZWYgZG9jdHlwZShzZWxmLCBuYW1lLCBwdWJpZCwgc3lzdGVtKToKLSAgICAgICAgIiIiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuIiIiCisgICAgICAgICIiIihEZXByZWNhdGVkKSAgSGFuZGxlIGRvY3R5cGUgZGVjbGFyYXRpb24KKworICAgICAgICAqbmFtZSogaXMgdGhlIERvY3R5cGUgbmFtZSwgKnB1YmlkKiBpcyB0aGUgcHVibGljIGlkZW50aWZpZXIsCisgICAgICAgIGFuZCAqc3lzdGVtKiBpcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuICBEZWZpbmUgZG9jdHlwZSgpICIKICAgICAgICAgICAgICJtZXRob2Qgb24gdGhlIFRyZWVCdWlsZGVyIHRhcmdldC4iLApAQCAtMTY2OCwyNCArMTYyOSwxNSBAQAogICAgICMgc2VudGluZWwsIGlmIGRvY3R5cGUgaXMgcmVkZWZpbmVkIGluIGEgc3ViY2xhc3MKICAgICBfX2RvY3R5cGUgPSBkb2N0eXBlCiAKLSAgICAjIwotICAgICMgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLgotICAgICMKLSAgICAjIEBwYXJhbSBkYXRhIEVuY29kZWQgZGF0YS4KLQogICAgIGRlZiBmZWVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJGZWVkIGVuY29kZWQgZGF0YSB0byBwYXJzZXIuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKGRhdGEsIDApCiAgICAgICAgIGV4Y2VwdCBzZWxmLl9lcnJvciBhcyB2OgogICAgICAgICAgICAgc2VsZi5fcmFpc2VlcnJvcih2KQogCi0gICAgIyMKLSAgICAjIEZpbmlzaGVzIGZlZWRpbmcgZGF0YSB0byB0aGUgcGFyc2VyLgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gZWxlbWVudCBzdHJ1Y3R1cmUuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmluaXNoIGZlZWRpbmcgZGF0YSB0byBwYXJzZXIgYW5kIHJldHVybiBlbGVtZW50IHN0cnVjdHVyZS4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIiIsIDEpICMgZW5kIG9mIGRhdGEKICAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yIGFzIHY6CkBAIC0xNzA0LDEwMyArMTY1NiwxMiBAQAogCiAjIEltcG9ydCB0aGUgQyBhY2NlbGVyYXRvcnMKIHRyeToKKyAgICAjIEVsZW1lbnQgaXMgZ29pbmcgdG8gYmUgc2hhZG93ZWQgYnkgdGhlIEMgaW1wbGVtZW50YXRpb24uIFdlIG5lZWQgdG8ga2VlcAorICAgICMgdGhlIFB5dGhvbiB2ZXJzaW9uIG9mIGl0IGFjY2Vzc2libGUgZm9yIHNvbWUgImNyZWF0aXZlIiBieSBleHRlcm5hbCBjb2RlCisgICAgIyAoc2VlIHRlc3RzKQorICAgIF9FbGVtZW50X1B5ID0gRWxlbWVudAorCiAgICAgIyBFbGVtZW50LCBTdWJFbGVtZW50LCBQYXJzZUVycm9yLCBUcmVlQnVpbGRlciwgWE1MUGFyc2VyCiAgICAgZnJvbSBfZWxlbWVudHRyZWUgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCi1lbHNlOgotICAgICMgT3ZlcndyaXRlICdFbGVtZW50VHJlZS5wYXJzZScgYW5kICdpdGVycGFyc2UnIHRvIHVzZSB0aGUgQyBYTUxQYXJzZXIKLQotICAgIGNsYXNzIEVsZW1lbnRUcmVlKEVsZW1lbnRUcmVlKToKLSAgICAgICAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOgotICAgICAgICAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgJ3JlYWQnKToKLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgJ3JiJykKLSAgICAgICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgcGFyc2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcigpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuX3BhcnNlKHNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcm9vdAotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBpZiBjbG9zZV9zb3VyY2U6Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCi0KLSAgICBjbGFzcyBpdGVycGFyc2U6Ci0gICAgICAgICIiIlBhcnNlcyBhbiBYTUwgc2VjdGlvbiBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LgotCi0gICAgICAgIFJlcG9ydHMgd2hhdOKAmXMgZ29pbmcgb24gdG8gdGhlIHVzZXIuICdzb3VyY2UnIGlzIGEgZmlsZW5hbWUgb3IgZmlsZQotICAgICAgICBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4gJ2V2ZW50cycgaXMgYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4KLSAgICAgICAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzICJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiIGFuZAotICAgICAgICAiZW5kLW5zIiAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZCBuYW1lc3BhY2UKLSAgICAgICAgaW5mb3JtYXRpb24pLiBJZiAnZXZlbnRzJyBpcyBvbWl0dGVkLCBvbmx5ICJlbmQiIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCi0gICAgICAgICdwYXJzZXInIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKLSAgICAgICAgWE1MUGFyc2VyIHBhcnNlciBpcyB1c2VkLiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHByb3ZpZGluZwotICAgICAgICAoZXZlbnQsIGVsZW0pIHBhaXJzLgotICAgICAgICAiIiIKLQotICAgICAgICByb290ID0gTm9uZQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgZXZlbnRzPU5vbmUsIHBhcnNlcj1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZmlsZSwgJ3JlYWQnKToKLSAgICAgICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLl9maWxlID0gZmlsZQotICAgICAgICAgICAgc2VsZi5fZXZlbnRzID0gW10KLSAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZQotICAgICAgICAgICAgaWYgcGFyc2VyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQotICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyCi0gICAgICAgICAgICBzZWxmLl9wYXJzZXIuX3NldGV2ZW50cyhzZWxmLl9ldmVudHMsIGV2ZW50cykKLQotICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHNlbGYuX2V2ZW50c1tzZWxmLl9pbmRleF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggKz0gMQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBzZWxmLl9lcnJvcgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlciBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKLSAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNjM4NCkKLSAgICAgICAgICAgICAgICBpZiBkYXRhOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBleGMKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSMgY29tcGF0aWJpbGl0eQotWE1MVHJlZUJ1aWxkZXIgPSBYTUxQYXJzZXIKLQotIyB3b3JrYXJvdW5kIGNpcmN1bGFyIGltcG9ydC4KLXRyeToKLSAgICBmcm9tIEVsZW1lbnRDMTROIGltcG9ydCBfc2VyaWFsaXplX2MxNG4KLSAgICBfc2VyaWFsaXplWyJjMTRuIl0gPSBfc2VyaWFsaXplX2MxNG4KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIveG1scnBjL2NsaWVudC5weSBiL0xpYi94bWxycGMvY2xpZW50LnB5CmluZGV4IDBmOTUyMmEuLjllMGYwNjkgMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGMvY2xpZW50LnB5CisrKyBiL0xpYi94bWxycGMvY2xpZW50LnB5CkBAIC0xMDQ1LDcgKzEwNDUsNyBAQAogICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0icmIiLCBmaWxlb2JqPWYpCiAgICAgdHJ5OgogICAgICAgICBkZWNvZGVkID0gZ3pmLnJlYWQoKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGRhdGEiKQogICAgIGYuY2xvc2UoKQogICAgIGd6Zi5jbG9zZSgpCkBAIC0xMTMwLDggKzExMzAsOSBAQAogICAgICAgICBmb3IgaSBpbiAoMCwgMSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2luZ2xlX3JlcXVlc3QoaG9zdCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5LCB2ZXJib3NlKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGkgb3IgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVTRVQsIGVycm5vLkVDT05OQUJPUlRFRCwgZXJybm8uRVBJUEUpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRVBJUEUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZXhjZXB0IGh0dHAuY2xpZW50LkJhZFN0YXR1c0xpbmU6ICNjbG9zZSBhZnRlciB3ZSBzZW50IHJlcXVlc3QKICAgICAgICAgICAgICAgICBpZiBpOgpAQCAtMTM4NSw3ICsxMzg2LDcgQEAKICAgICAgICAgIyBnZXQgdGhlIHVybAogICAgICAgICB0eXBlLCB1cmkgPSB1cmxsaWIucGFyc2Uuc3BsaXR0eXBlKHVyaSkKICAgICAgICAgaWYgdHlwZSBub3QgaW4gKCJodHRwIiwgImh0dHBzIik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ1bnN1cHBvcnRlZCBYTUwtUlBDIHByb3RvY29sIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInVuc3VwcG9ydGVkIFhNTC1SUEMgcHJvdG9jb2wiKQogICAgICAgICBzZWxmLl9faG9zdCwgc2VsZi5fX2hhbmRsZXIgPSB1cmxsaWIucGFyc2Uuc3BsaXRob3N0KHVyaSkKICAgICAgICAgaWYgbm90IHNlbGYuX19oYW5kbGVyOgogICAgICAgICAgICAgc2VsZi5fX2hhbmRsZXIgPSAiL1JQQzIiCmRpZmYgLS1naXQgYS9MaWIveG1scnBjL3NlcnZlci5weSBiL0xpYi94bWxycGMvc2VydmVyLnB5CmluZGV4IDc4Y2E0ZTAuLmQ5MTQyODIgMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGMvc2VydmVyLnB5CisrKyBiL0xpYi94bWxycGMvc2VydmVyLnB5CkBAIC01ODQsMTMgKzU4NCw2IEBACiAgICAgICAgIFNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgYWxsb3dfbm9uZSwgZW5jb2RpbmcsIHVzZV9idWlsdGluX3R5cGVzKQogICAgICAgICBzb2NrZXRzZXJ2ZXIuVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIHJlcXVlc3RIYW5kbGVyLCBiaW5kX2FuZF9hY3RpdmF0ZSkKIAotICAgICAgICAjIFtCdWcgIzEyMjI3OTBdIElmIHBvc3NpYmxlLCBzZXQgY2xvc2Utb24tZXhlYyBmbGFnOyBpZiBhCi0gICAgICAgICMgbWV0aG9kIHNwYXducyBhIHN1YnByb2Nlc3MsIHRoZSBzdWJwcm9jZXNzIHNob3VsZG4ndCBoYXZlCi0gICAgICAgICMgdGhlIGxpc3RlbmluZyBzb2NrZXQgb3Blbi4KLSAgICAgICAgaWYgZmNudGwgaXMgbm90IE5vbmUgYW5kIGhhc2F0dHIoZmNudGwsICdGRF9DTE9FWEVDJyk6Ci0gICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfR0VURkQpCi0gICAgICAgICAgICBmbGFncyB8PSBmY250bC5GRF9DTE9FWEVDCi0gICAgICAgICAgICBmY250bC5mY250bChzZWxmLmZpbGVubygpLCBmY250bC5GX1NFVEZELCBmbGFncykKIAogY2xhc3MgTXVsdGlQYXRoWE1MUlBDU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlcik6CiAgICAgIiIiTXVsdGlwYXRoIFhNTC1SUEMgU2VydmVyCmRpZmYgLS1naXQgYS9MaWIvemlwZmlsZS5weSBiL0xpYi96aXBmaWxlLnB5CmluZGV4IDkyYzk4YWIuLmZhZDUyYTIgMTAwNjQ0Ci0tLSBhL0xpYi96aXBmaWxlLnB5CisrKyBiL0xpYi96aXBmaWxlLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHN0YXQKQEAgLTE2NCw3ICsxNjQsNyBAQAogICAgIHRyeToKICAgICAgICAgaWYgX0VuZFJlY0RhdGEoZnApOgogICAgICAgICAgICAgcmV0dXJuIFRydWUgICAgICAgICAjIGZpbGUgaGFzIGNvcnJlY3QgbWFnaWMgbnVtYmVyCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gRmFsc2UKIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jaGVja196aXBmaWxlKGZwKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIHJlc3VsdAogCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGZwaW4uc2VlayhvZmZzZXQgLSBzaXplRW5kQ2VudERpcjY0TG9jYXRvciwgMikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBJZiB0aGUgc2VlayBmYWlscywgdGhlIGZpbGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIGEgWklQNjQKICAgICAgICAgIyBlbmQtb2YtYXJjaGl2ZSByZWNvcmQsIHNvIGp1c3QgcmV0dXJuIHRoZSBlbmQgcmVjb3JkIHdlIHdlcmUgZ2l2ZW4uCiAgICAgICAgIHJldHVybiBlbmRyZWMKQEAgLTIxMSw4ICsyMTEsOCBAQAogICAgIGlmIGxlbihkYXRhKSAhPSBzaXplRW5kQ2VudERpcjY0OgogICAgICAgICByZXR1cm4gZW5kcmVjCiAgICAgc2lnLCBzeiwgY3JlYXRlX3ZlcnNpb24sIHJlYWRfdmVyc2lvbiwgZGlza19udW0sIGRpc2tfZGlyLCBcCi0gICAgICAgICAgICBkaXJjb3VudCwgZGlyY291bnQyLCBkaXJzaXplLCBkaXJvZmZzZXQgPSBcCi0gICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKHN0cnVjdEVuZEFyY2hpdmU2NCwgZGF0YSkKKyAgICAgICAgZGlyY291bnQsIGRpcmNvdW50MiwgZGlyc2l6ZSwgZGlyb2Zmc2V0ID0gXAorICAgICAgICBzdHJ1Y3QudW5wYWNrKHN0cnVjdEVuZEFyY2hpdmU2NCwgZGF0YSkKICAgICBpZiBzaWcgIT0gc3RyaW5nRW5kQXJjaGl2ZTY0OgogICAgICAgICByZXR1cm4gZW5kcmVjCiAKQEAgLTI0Miw3ICsyNDIsNyBAQAogICAgICMgZmlsZSBpZiB0aGlzIGlzIHRoZSBjYXNlKS4KICAgICB0cnk6CiAgICAgICAgIGZwaW4uc2Vlaygtc2l6ZUVuZENlbnREaXIsIDIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgZGF0YSA9IGZwaW4ucmVhZCgpCiAgICAgaWYgKGxlbihkYXRhKSA9PSBzaXplRW5kQ2VudERpciBhbmQKQEAgLTI5MiwyNiArMjkyLDI2IEBACiAgICAgIiIiQ2xhc3Mgd2l0aCBhdHRyaWJ1dGVzIGRlc2NyaWJpbmcgZWFjaCBmaWxlIGluIHRoZSBaSVAgYXJjaGl2ZS4iIiIKIAogICAgIF9fc2xvdHNfXyA9ICgKLSAgICAgICAgICAgICdvcmlnX2ZpbGVuYW1lJywKLSAgICAgICAgICAgICdmaWxlbmFtZScsCi0gICAgICAgICAgICAnZGF0ZV90aW1lJywKLSAgICAgICAgICAgICdjb21wcmVzc190eXBlJywKLSAgICAgICAgICAgICdjb21tZW50JywKLSAgICAgICAgICAgICdleHRyYScsCi0gICAgICAgICAgICAnY3JlYXRlX3N5c3RlbScsCi0gICAgICAgICAgICAnY3JlYXRlX3ZlcnNpb24nLAotICAgICAgICAgICAgJ2V4dHJhY3RfdmVyc2lvbicsCi0gICAgICAgICAgICAncmVzZXJ2ZWQnLAotICAgICAgICAgICAgJ2ZsYWdfYml0cycsCi0gICAgICAgICAgICAndm9sdW1lJywKLSAgICAgICAgICAgICdpbnRlcm5hbF9hdHRyJywKLSAgICAgICAgICAgICdleHRlcm5hbF9hdHRyJywKLSAgICAgICAgICAgICdoZWFkZXJfb2Zmc2V0JywKLSAgICAgICAgICAgICdDUkMnLAotICAgICAgICAgICAgJ2NvbXByZXNzX3NpemUnLAotICAgICAgICAgICAgJ2ZpbGVfc2l6ZScsCi0gICAgICAgICAgICAnX3Jhd190aW1lJywKLSAgICAgICAgKQorICAgICAgICAnb3JpZ19maWxlbmFtZScsCisgICAgICAgICdmaWxlbmFtZScsCisgICAgICAgICdkYXRlX3RpbWUnLAorICAgICAgICAnY29tcHJlc3NfdHlwZScsCisgICAgICAgICdjb21tZW50JywKKyAgICAgICAgJ2V4dHJhJywKKyAgICAgICAgJ2NyZWF0ZV9zeXN0ZW0nLAorICAgICAgICAnY3JlYXRlX3ZlcnNpb24nLAorICAgICAgICAnZXh0cmFjdF92ZXJzaW9uJywKKyAgICAgICAgJ3Jlc2VydmVkJywKKyAgICAgICAgJ2ZsYWdfYml0cycsCisgICAgICAgICd2b2x1bWUnLAorICAgICAgICAnaW50ZXJuYWxfYXR0cicsCisgICAgICAgICdleHRlcm5hbF9hdHRyJywKKyAgICAgICAgJ2hlYWRlcl9vZmZzZXQnLAorICAgICAgICAnQ1JDJywKKyAgICAgICAgJ2NvbXByZXNzX3NpemUnLAorICAgICAgICAnZmlsZV9zaXplJywKKyAgICAgICAgJ19yYXdfdGltZScsCisgICAgKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPSJOb05hbWUiLCBkYXRlX3RpbWU9KDE5ODAsMSwxLDAsMCwwKSk6CiAgICAgICAgIHNlbGYub3JpZ19maWxlbmFtZSA9IGZpbGVuYW1lICAgIyBPcmlnaW5hbCBmaWxlIG5hbWUgaW4gYXJjaGl2ZQpAQCAtMzc2LDcgKzM3Niw3IEBACiAgICAgICAgIGlmIHppcDY0OgogICAgICAgICAgICAgZm10ID0gJzxISFFRJwogICAgICAgICAgICAgZXh0cmEgPSBleHRyYSArIHN0cnVjdC5wYWNrKGZtdCwKLSAgICAgICAgICAgICAgICAgICAgMSwgc3RydWN0LmNhbGNzaXplKGZtdCktNCwgZmlsZV9zaXplLCBjb21wcmVzc19zaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHN0cnVjdC5jYWxjc2l6ZShmbXQpLTQsIGZpbGVfc2l6ZSwgY29tcHJlc3Nfc2l6ZSkKICAgICAgICAgaWYgZmlsZV9zaXplID4gWklQNjRfTElNSVQgb3IgY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgaWYgbm90IHppcDY0OgogICAgICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZSgiRmlsZXNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKQEAgLTM5NSwxMCArMzk1LDEwIEBACiAgICAgICAgIHNlbGYuY3JlYXRlX3ZlcnNpb24gPSBtYXgobWluX3ZlcnNpb24sIHNlbGYuY3JlYXRlX3ZlcnNpb24pCiAgICAgICAgIGZpbGVuYW1lLCBmbGFnX2JpdHMgPSBzZWxmLl9lbmNvZGVGaWxlbmFtZUZsYWdzKCkKICAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soc3RydWN0RmlsZUhlYWRlciwgc3RyaW5nRmlsZUhlYWRlciwKLSAgICAgICAgICAgICAgICAgc2VsZi5leHRyYWN0X3ZlcnNpb24sIHNlbGYucmVzZXJ2ZWQsIGZsYWdfYml0cywKLSAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLCBDUkMsCi0gICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHRyYWN0X3ZlcnNpb24sIHNlbGYucmVzZXJ2ZWQsIGZsYWdfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLCBDUkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhKSkKICAgICAgICAgcmV0dXJuIGhlYWRlciArIGZpbGVuYW1lICsgZXh0cmEKIAogICAgIGRlZiBfZW5jb2RlRmlsZW5hbWVGbGFncyhzZWxmKToKQEAgLTUxMSw3ICs1MTEsNyBAQAogICAgIGRlZiBfaW5pdChzZWxmKToKICAgICAgICAgcHJvcHMgPSBsem1hLl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoeydpZCc6IGx6bWEuRklMVEVSX0xaTUExfSkKICAgICAgICAgc2VsZi5fY29tcCA9IGx6bWEuTFpNQUNvbXByZXNzb3IobHptYS5GT1JNQVRfUkFXLCBmaWx0ZXJzPVsKLSAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsIHByb3BzKQorICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLCBwcm9wcykKICAgICAgICAgXSkKICAgICAgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCc8QkJIJywgOSwgNCwgbGVuKHByb3BzKSkgKyBwcm9wcwogCkBAIC01NDMsOCArNTQzLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCiAKICAgICAgICAgICAgIHNlbGYuX2RlY29tcCA9IGx6bWEuTFpNQURlY29tcHJlc3Nvcihsem1hLkZPUk1BVF9SQVcsIGZpbHRlcnM9WwotICAgICAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZFs0OjQgKyBwc2l6ZV0pCisgICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkWzQ6NCArIHBzaXplXSkKICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fdW5jb25zdW1lZFs0ICsgcHNpemU6XQogICAgICAgICAgICAgZGVsIHNlbGYuX3VuY29uc3VtZWQKQEAgLTU4MCwxNSArNTgwLDE1IEBACiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfREVGTEFURUQ6CiAgICAgICAgIGlmIG5vdCB6bGliOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSB6bGliIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgemxpYiBtb2R1bGUiKQogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0JaSVAyOgogICAgICAgICBpZiBub3QgYnoyOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBiejIgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBiejIgbW9kdWxlIikKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9MWk1BOgogICAgICAgICBpZiBub3QgbHptYToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgbHptYSBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGx6bWEgbW9kdWxlIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRoYXQgY29tcHJlc3Npb24gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQiKQogCkBAIC01OTYsNyArNTk2LDcgQEAKIGRlZiBfZ2V0X2NvbXByZXNzb3IoY29tcHJlc3NfdHlwZSk6CiAgICAgaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfREVGTEFURUQ6CiAgICAgICAgIHJldHVybiB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAotICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgLTE1KQogICAgIGVsaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfQlpJUDI6CiAgICAgICAgIHJldHVybiBiejIuQloyQ29tcHJlc3NvcigpCiAgICAgZWxpZiBjb21wcmVzc190eXBlID09IFpJUF9MWk1BOgpAQCAtODM2LDggKzgzNiw4IEBACiAgICAgICAgICAgICBuID0gbWF4KG4sIHNlbGYuTUlOX1JFQURfU0laRSkKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhkYXRhLCBuKQogICAgICAgICAgICAgc2VsZi5fZW9mID0gKHNlbGYuX2RlY29tcHJlc3Nvci5lb2Ygb3IKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA8PSAwIGFuZAotICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZGVjb21wcmVzc29yLnVuY29uc3VtZWRfdGFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc19sZWZ0IDw9IDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwpCiAgICAgICAgICAgICBpZiBzZWxmLl9lb2Y6CiAgICAgICAgICAgICAgICAgZGF0YSArPSBzZWxmLl9kZWNvbXByZXNzb3IuZmx1c2goKQogICAgICAgICBlbHNlOgpAQCAtODc2LDcgKzg3Niw3IEBACiBjbGFzcyBaaXBGaWxlOgogICAgICIiIiBDbGFzcyB3aXRoIG1ldGhvZHMgdG8gb3BlbiwgcmVhZCwgd3JpdGUsIGNsb3NlLCBsaXN0IHppcCBmaWxlcy4KIAotICAgIHogPSBaaXBGaWxlKGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKQorICAgIHogPSBaaXBGaWxlKGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCiAKICAgICBmaWxlOiBFaXRoZXIgdGhlIHBhdGggdG8gdGhlIGZpbGUsIG9yIGEgZmlsZS1saWtlIG9iamVjdC4KICAgICAgICAgICBJZiBpdCBpcyBhIHBhdGgsIHRoZSBmaWxlIHdpbGwgYmUgb3BlbmVkIGFuZCBjbG9zZWQgYnkgWmlwRmlsZS4KQEAgLTg5Miw3ICs4OTIsNyBAQAogICAgIGZwID0gTm9uZSAgICAgICAgICAgICAgICAgICAjIFNldCBoZXJlIHNpbmNlIF9fZGVsX18gY2hlY2tzIGl0CiAgICAgX3dpbmRvd3NfaWxsZWdhbF9uYW1lX3RyYW5zX3RhYmxlID0gTm9uZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSk6CiAgICAgICAgICIiIk9wZW4gdGhlIFpJUCBmaWxlIHdpdGggbW9kZSByZWFkICJyIiwgd3JpdGUgInciIG9yIGFwcGVuZCAiYSIuIiIiCiAgICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJ3IiwgImEiKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignWmlwRmlsZSgpIHJlcXVpcmVzIG1vZGUgInIiLCAidyIsIG9yICJhIicpCkBAIC05MTcsNyArOTE3LDcgQEAKICAgICAgICAgICAgIG1vZGVEaWN0ID0geydyJyA6ICdyYicsICd3JzogJ3diJywgJ2EnIDogJ3IrYid9CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcCA9IGlvLm9wZW4oZmlsZSwgbW9kZURpY3RbbW9kZV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG1vZGUgPT0gJ2EnOgogICAgICAgICAgICAgICAgICAgICBtb2RlID0ga2V5ID0gJ3cnCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBpby5vcGVuKGZpbGUsIG1vZGVEaWN0W21vZGVdKQpAQCAtOTY4LDcgKzk2OCw3IEBACiAgICAgICAgIGZwID0gc2VsZi5mcAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBlbmRyZWM6CiAgICAgICAgICAgICByYWlzZSBCYWRaaXBGaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKQEAgLTEwMTYsOCArMTAxNiw4IEBACiAgICAgICAgICAgICB4LmNvbW1lbnQgPSBmcC5yZWFkKGNlbnRkaXJbX0NEX0NPTU1FTlRfTEVOR1RIXSkKICAgICAgICAgICAgIHguaGVhZGVyX29mZnNldCA9IGNlbnRkaXJbX0NEX0xPQ0FMX0hFQURFUl9PRkZTRVRdCiAgICAgICAgICAgICAoeC5jcmVhdGVfdmVyc2lvbiwgeC5jcmVhdGVfc3lzdGVtLCB4LmV4dHJhY3RfdmVyc2lvbiwgeC5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAotICAgICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KKyAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAorICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KICAgICAgICAgICAgIGlmIHguZXh0cmFjdF92ZXJzaW9uID4gTUFYX0VYVFJBQ1RfVkVSU0lPTjoKICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJ6aXAgZmlsZSB2ZXJzaW9uICUuMWYiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4LmV4dHJhY3RfdmVyc2lvbiAvIDEwKSkKQEAgLTEwMjUsNyArMTAyNSw3IEBACiAgICAgICAgICAgICAjIENvbnZlcnQgZGF0ZS90aW1lIGNvZGUgdG8gKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbiwgc2VjKQogICAgICAgICAgICAgeC5fcmF3X3RpbWUgPSB0CiAgICAgICAgICAgICB4LmRhdGVfdGltZSA9ICggKGQ+PjkpKzE5ODAsIChkPj41KSYweEYsIGQmMHgxRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Pj4xMSwgKHQ+PjUpJjB4M0YsICh0JjB4MUYpICogMiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdD4+MTEsICh0Pj41KSYweDNGLCAodCYweDFGKSAqIDIgKQogCiAgICAgICAgICAgICB4Ll9kZWNvZGVFeHRyYSgpCiAgICAgICAgICAgICB4LmhlYWRlcl9vZmZzZXQgPSB4LmhlYWRlcl9vZmZzZXQgKyBjb25jYXQKQEAgLTExMDMsNyArMTEwMyw3IEBACiAgICAgICAgIGlmIGxlbihjb21tZW50KSA+PSBaSVBfTUFYX0NPTU1FTlQ6CiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgIHByaW50KCdBcmNoaXZlIGNvbW1lbnQgaXMgdG9vIGxvbmc7IHRydW5jYXRpbmcgdG8gJWQgYnl0ZXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAlIFpJUF9NQVhfQ09NTUVOVCkKKyAgICAgICAgICAgICAgICAgICAgICAlIFpJUF9NQVhfQ09NTUVOVCkKICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50WzpaSVBfTUFYX0NPTU1FTlRdCiAgICAgICAgIHNlbGYuX2NvbW1lbnQgPSBjb21tZW50CiAgICAgICAgIHNlbGYuX2RpZE1vZGlmeSA9IFRydWUKQEAgLTExMTcsMTEgKzExMTcsMTUgQEAKICAgICAgICAgIiIiUmV0dXJuIGZpbGUtbGlrZSBvYmplY3QgZm9yICduYW1lJy4iIiIKICAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgIlUiLCAiclUiKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignb3BlbigpIHJlcXVpcmVzIG1vZGUgInIiLCAiVSIsIG9yICJyVSInKQorICAgICAgICBpZiAnVScgaW4gbW9kZToKKyAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3Mud2FybigiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgaWYgcHdkIGFuZCBub3QgaXNpbnN0YW5jZShwd2QsIGJ5dGVzKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicHdkOiBleHBlY3RlZCBieXRlcywgZ290ICVzIiAlIHR5cGUocHdkKSkKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byByZWFkIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byByZWFkIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICAjIE9ubHkgb3BlbiBhIG5ldyBmaWxlIGZvciBpbnN0YW5jZXMgd2hlcmUgd2Ugd2VyZSBub3QKICAgICAgICAgIyBnaXZlbiBhIGZpbGUgb2JqZWN0IGluIHRoZSBjb25zdHJ1Y3RvcgpAQCAtMTI5NCw3ICsxMjk4LDcgQEAKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignd3JpdGUoKSByZXF1aXJlcyBtb2RlICJ3IiBvciAiYSInKQogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAgICAgICAgIF9jaGVja19jb21wcmVzc2lvbih6aW5mby5jb21wcmVzc190eXBlKQogICAgICAgICBpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVDoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgpAQCAtMTMwMiwxNCArMTMwNiwxNCBAQAogICAgICAgICBpZiB6aW5mby5oZWFkZXJfb2Zmc2V0ID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3daaXA2NDoKICAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgIlppcGZpbGUgc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQorICAgICAgICAgICAgICAgICAgICAiWmlwZmlsZSBzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgZmlsZW5hbWUsIGFyY25hbWU9Tm9uZSwgY29tcHJlc3NfdHlwZT1Ob25lKToKICAgICAgICAgIiIiUHV0IHRoZSBieXRlcyBmcm9tIGZpbGVuYW1lIGludG8gdGhlIGFyY2hpdmUgdW5kZXIgdGhlIG5hbWUKICAgICAgICAgYXJjbmFtZS4iIiIKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogCiAgICAgICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgaXNkaXIgPSBzdGF0LlNfSVNESVIoc3Quc3RfbW9kZSkKQEAgLTEzNTYsNyArMTM2MCw3IEBACiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gY29tcHJlc3Nfc2l6ZSA9IDAKICAgICAgICAgICAgICMgQ29tcHJlc3NlZCBzaXplIGNhbiBiZSBsYXJnZXIgdGhhbiB1bmNvbXByZXNzZWQgc2l6ZQogICAgICAgICAgICAgemlwNjQgPSBzZWxmLl9hbGxvd1ppcDY0IGFuZCBcCi0gICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSAqIDEuMDUgPiBaSVA2NF9MSU1JVAorICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSAqIDEuMDUgPiBaSVA2NF9MSU1JVAogICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKHppcDY0KSkKICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IDAKICAgICAgICAgICAgIHdoaWxlIDE6CkBAIC0xNDEwLDcgKzE0MTQsNyBAQAogCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICB6aW5mby5maWxlX3NpemUgPSBsZW4oZGF0YSkgICAgICAgICAgICAjIFVuY29tcHJlc3NlZCBzaXplCiAgICAgICAgIHppbmZvLmhlYWRlcl9vZmZzZXQgPSBzZWxmLmZwLnRlbGwoKSAgICAjIFN0YXJ0IG9mIGhlYWRlciBkYXRhCkBAIC0xNDMwLDcgKzE0MzQsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IHppbmZvLmZpbGVfc2l6ZQogICAgICAgICB6aXA2NCA9IHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIFwKLSAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVAogICAgICAgICBpZiB6aXA2NCBhbmQgbm90IHNlbGYuX2FsbG93WmlwNjQ6CiAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCiAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCkBAIC0xNDM5LDcgKzE0NDMsNyBAQAogICAgICAgICAgICAgIyBXcml0ZSBDUkMgYW5kIGZpbGUgc2l6ZXMgYWZ0ZXIgdGhlIGZpbGUgZGF0YQogICAgICAgICAgICAgZm10ID0gJzxMUVEnIGlmIHppcDY0IGVsc2UgJzxMTEwnCiAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHN0cnVjdC5wYWNrKGZtdCwgemluZm8uQ1JDLCB6aW5mby5jb21wcmVzc19zaXplLAotICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKICAgICAgICAgc2VsZi5mcC5mbHVzaCgpCiAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQogICAgICAgICBzZWxmLk5hbWVUb0luZm9bemluZm8uZmlsZW5hbWVdID0gemluZm8KQEAgLTE0NjUsNyArMTQ2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRvc3RpbWUgPSBkdFszXSA8PCAxMSB8IGR0WzRdIDw8IDUgfCAoZHRbNV0gLy8gMikKICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBbXQogICAgICAgICAgICAgICAgICAgICBpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgICAgICAgICAgICBvciB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5hcHBlbmQoemluZm8uZmlsZV9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmNvbXByZXNzX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSAweGZmZmZmZmZmCkBAIC0xNDg1LDggKzE0ODksOCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBleHRyYToKICAgICAgICAgICAgICAgICAgICAgICAgICMgQXBwZW5kIGEgWklQNjQgZmllbGQgdG8gdGhlIGV4dHJhJ3MKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RhdGEgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxISCcgKyAnUScqbGVuKGV4dHJhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOCpsZW4oZXh0cmEpLCAqZXh0cmEpICsgZXh0cmFfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOCpsZW4oZXh0cmEpLCAqZXh0cmEpICsgZXh0cmFfZGF0YQogCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fdmVyc2lvbiA9IFpJUDY0X1ZFUlNJT04KIApAQCAtMTUwMCwyMSArMTUwNCwyMSBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gemluZm8uX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQogICAgICAgICAgICAgICAgICAgICAgICAgY2VudGRpciA9IHN0cnVjdC5wYWNrKHN0cnVjdENlbnRyYWxEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IERlcHJlY2F0aW9uV2FybmluZzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KChzdHJ1Y3RDZW50cmFsRGlyLCBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oemluZm8uZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShjZW50ZGlyKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGZpbGVuYW1lKQpAQCAtMTUzMSwyMiArMTUzNSwyMiBAQAogICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA+IFpJUDY0X0xJTUlUKToKICAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHdyaXRlIHRoZSBaSVA2NCBlbmQtb2YtYXJjaGl2ZSByZWNvcmRzCiAgICAgICAgICAgICAgICAgICAgIHppcDY0ZW5kcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0LCBzdHJpbmdFbmRBcmNoaXZlNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQsIDQ1LCA0NSwgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjQsIHN0cmluZ0VuZEFyY2hpdmU2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA0NSwgNDUsIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRlbmRyZWMpCiAKICAgICAgICAgICAgICAgICAgICAgemlwNjRsb2NyZWMgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IsIDAsIHBvczIsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nRW5kQXJjaGl2ZTY0TG9jYXRvciwgMCwgcG9zMiwgMSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aXA2NGxvY3JlYykKICAgICAgICAgICAgICAgICAgICAgY2VudERpckNvdW50ID0gbWluKGNlbnREaXJDb3VudCwgMHhGRkZGKQogICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA9IG1pbihjZW50RGlyU2l6ZSwgMHhGRkZGRkZGRikKICAgICAgICAgICAgICAgICAgICAgY2VudERpck9mZnNldCA9IG1pbihjZW50RGlyT2Zmc2V0LCAweEZGRkZGRkZGKQogCiAgICAgICAgICAgICAgICAgZW5kcmVjID0gc3RydWN0LnBhY2soc3RydWN0RW5kQXJjaGl2ZSwgc3RyaW5nRW5kQXJjaGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQsIGxlbihzZWxmLl9jb21tZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCwgbGVuKHNlbGYuX2NvbW1lbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoZW5kcmVjKQogICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoc2VsZi5fY29tbWVudCkKICAgICAgICAgICAgICAgICBzZWxmLmZwLmZsdXNoKCkKQEAgLTE1NjEsMTIgKzE1NjUsMTIgQEAKICAgICAiIiJDbGFzcyB0byBjcmVhdGUgWklQIGFyY2hpdmVzIHdpdGggUHl0aG9uIGxpYnJhcnkgZmlsZXMgYW5kIHBhY2thZ2VzLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELAotICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PUZhbHNlLCBvcHRpbWl6ZT0tMSk6CisgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9VHJ1ZSwgb3B0aW1pemU9LTEpOgogICAgICAgICBaaXBGaWxlLl9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9bW9kZSwgY29tcHJlc3Npb249Y29tcHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1hbGxvd1ppcDY0KQogICAgICAgICBzZWxmLl9vcHRpbWl6ZSA9IG9wdGltaXplCiAKLSAgICBkZWYgd3JpdGVweShzZWxmLCBwYXRobmFtZSwgYmFzZW5hbWU9IiIpOgorICAgIGRlZiB3cml0ZXB5KHNlbGYsIHBhdGhuYW1lLCBiYXNlbmFtZT0iIiwgZmlsdGVyZnVuYz1Ob25lKToKICAgICAgICAgIiIiQWRkIGFsbCBmaWxlcyBmcm9tICJwYXRobmFtZSIgdG8gdGhlIFpJUCBhcmNoaXZlLgogCiAgICAgICAgIElmIHBhdGhuYW1lIGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIHNlYXJjaCB0aGUgZGlyZWN0b3J5IGFuZApAQCAtMTU3Nyw3ICsxNTgxLDE0IEBACiAgICAgICAgIGFyY2hpdmUuICBBZGRlZCBtb2R1bGVzIGFyZSBhbHdheXMgbW9kdWxlLnB5byBvciBtb2R1bGUucHljLgogICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIGNvbXBpbGUgdGhlIG1vZHVsZS5weSBpbnRvIG1vZHVsZS5weWMgaWYKICAgICAgICAgbmVjZXNzYXJ5LgorICAgICAgICBJZiBmaWx0ZXJmdW5jKHBhdGhuYW1lKSBpcyBnaXZlbiwgaXQgaXMgY2FsbGVkIHdpdGggZXZlcnkgYXJndW1lbnQuCisgICAgICAgIFdoZW4gaXQgaXMgRmFsc2UsIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBpcyBza2lwcGVkLgogICAgICAgICAiIiIKKyAgICAgICAgaWYgZmlsdGVyZnVuYyBhbmQgbm90IGZpbHRlcmZ1bmMocGF0aG5hbWUpOgorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBsYWJlbCA9ICdwYXRoJyBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKSBlbHNlICdmaWxlJworICAgICAgICAgICAgICAgIHByaW50KCclcyAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSAobGFiZWwsIHBhdGhuYW1lKSkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKToKICAgICAgICAgICAgIGluaXRuYW1lID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCAiX19pbml0X18ucHkiKQpAQCAtMTYwMiwxMCArMTYxMywxNSBAQAogICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHBhdGgsICJfX2luaXRfXy5weSIpKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBwYWNrYWdlIGRpcmVjdG9yeSwgYWRkIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZXB5KHBhdGgsIGJhc2VuYW1lKSAgIyBSZWN1cnNpdmUgY2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVweShwYXRoLCBiYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZnVuYz1maWx0ZXJmdW5jKSAgIyBSZWN1cnNpdmUgY2FsbAogICAgICAgICAgICAgICAgICAgICBlbGlmIGV4dCA9PSAiLnB5IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaWxlICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhbMDotM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmciLCBhcmNuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShmbmFtZSwgYXJjbmFtZSkKQEAgLTE2MTcsMTUgKzE2MzMsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRobmFtZSwgZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCA9PSAiLnB5IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaWxlICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhbMDotM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmciLCBhcmNuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShmbmFtZSwgYXJjbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHBhdGhuYW1lWy0zOl0gIT0gIi5weSI6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICdGaWxlcyBhZGRlZCB3aXRoIHdyaXRlcHkoKSBtdXN0IGVuZCB3aXRoICIucHkiJykKKyAgICAgICAgICAgICAgICAgICAgJ0ZpbGVzIGFkZGVkIHdpdGggd3JpdGVweSgpIG11c3QgZW5kIHdpdGggIi5weSInKQogICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aG5hbWVbMDotM10sIGJhc2VuYW1lKQogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIGZpbGUiLCBhcmNuYW1lKQpAQCAtMTY1Miw4ICsxNjcyLDggQEAKICAgICAgICAgZmlsZV9weSAgPSBwYXRobmFtZSArICIucHkiCiAgICAgICAgIGZpbGVfcHljID0gcGF0aG5hbWUgKyAiLnB5YyIKICAgICAgICAgZmlsZV9weW8gPSBwYXRobmFtZSArICIucHlvIgotICAgICAgICBweWNhY2hlX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBUcnVlKQotICAgICAgICBweWNhY2hlX3B5byA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBGYWxzZSkKKyAgICAgICAgcHljYWNoZV9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBUcnVlKQorICAgICAgICBweWNhY2hlX3B5byA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIEZhbHNlKQogICAgICAgICBpZiBzZWxmLl9vcHRpbWl6ZSA9PSAtMToKICAgICAgICAgICAgICMgbGVnYWN5IG1vZGU6IHVzZSB3aGF0ZXZlciBmaWxlIGlzIHByZXNlbnQKICAgICAgICAgICAgIGlmIChvcy5wYXRoLmlzZmlsZShmaWxlX3B5bykgYW5kCkBAIC0xNzY0LDEwICsxNzg0LDEwIEBACiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgZm9yIG5tIGluIG9zLmxpc3RkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvWmlwKHpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCiAgICAgICAgICAgICAjIGVsc2U6IGlnbm9yZQogCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycsIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemY6CisgICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycpIGFzIHpmOgogICAgICAgICAgICAgZm9yIHNyYyBpbiBhcmdzWzI6XToKICAgICAgICAgICAgICAgICBhZGRUb1ppcCh6Ziwgc3JjLCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCiAKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0IGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKaW5kZXggNTZjNzY5YS4uMGE2YjU0NCAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKQEAgLTgsNyArOCw3IEBACiBhbiBJbnN0YWxsZXIgcGFja2FnZSBmcm9tIHRoZSBpbnN0YWxsYXRpb24gcGx1cyBvdGhlciBmaWxlcyBpbiBgYHJlc291cmNlc2BgIAogYW5kIGBgc2NyaXB0c2BgIGFuZCBwbGFjZWQgdGhhdCBvbiBhIGBgLmRtZ2BgIGRpc2sgaW1hZ2UuCiAKLUFzIG9mIFB5dGhvbiAzLjMuMCwgUFNGIHByYWN0aWNlIGlzIHRvIGJ1aWxkIHR3byBpbnN0YWxsZXIgdmFyaWFudHMKK0ZvciBQeXRob24gMy40LjAsIFBTRiBwcmFjdGljZSBpcyB0byBidWlsZCB0d28gaW5zdGFsbGVyIHZhcmlhbnRzCiBmb3IgZWFjaCByZWxlYXNlLgogCiAxLiAgMzItYml0LW9ubHksIGkzODYgYW5kIFBQQyB1bml2ZXJzYWwsIGNhcGFibGUgb24gcnVubmluZyBvbiBhbGwgbWFjaGluZXMKQEAgLTIyLDggKzIyLDggQEAKICAgICAtIGJ1aWxkcyB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogTkN1cnNlcyA1LjkgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTAzNykKLSAgICAgICAgKiBTUUxpdGUgMy43LjEzCi0gICAgICAgICogWFogNS4wLjMKKyAgICAgICAgKiBTUUxpdGUgMy44LjEKKyAgICAgICAgKiBYWiA1LjAuNQogCiAgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIApAQCAtNTYsMTQgKzU2LDE0IEBACiAgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAogICAgICAgICAqIE5DdXJzZXMgNS45IChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUwMzcpCi0gICAgICAgICogU1FMaXRlIDMuNy4xMwotICAgICAgICAqIFhaIDUuMC4zCisgICAgICAgICogU1FMaXRlIDMuOC4xCisgICAgICAgICogWFogNS4wLjUKIAogICAgIC0gdXNlcyBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbnMgb2YgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKICAgICAgICAgKiByZWFkbGluZSBtb2R1bGUgbGlua3Mgd2l0aCBBcHBsZSBCU0QgZWRpdGxpbmUgKGxpYmVkaXQpCiAKLSAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuOSAob3IgbGF0ZXIpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKyAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuMTUgKG9yIGxhdGVyKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCiAKICAgICAtIHJlY29tbWVuZGVkIGJ1aWxkIGVudmlyb25tZW50OgogCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCBmZDVkNWMzLi5mMDEyNTg3IDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTE5Myw3ICsxOTMsOCBAQAogCiAgICAgTFRfMTBfNSA9IGJvb2woREVQVEFSR0VUIDwgJzEwLjUnKQogCi0gICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgorIyAgIERpc2FibGUgZm9yIG5vdworICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDUpKToKICAgICAgICAgcmVzdWx0LmV4dGVuZChbCiAgICAgICAgICAgZGljdCgKICAgICAgICAgICAgICAgbmFtZT0iVGNsIDguNS4xNSIsCkBAIC0yMzcsOSArMjM4LDkgQEAKICAgICBpZiBnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgMyk6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCi0gICAgICAgICAgICAgIG5hbWU9IlhaIDUuMC4zIiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotNS4wLjMudGFyLmd6IiwKLSAgICAgICAgICAgICAgY2hlY2tzdW09J2ZlZmU1MmY5ZWNkNTIxZGUyYThjZTM4YzIxYTI3NTc0JywKKyAgICAgICAgICAgICAgbmFtZT0iWFogNS4wLjUiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly90dWthYW5pLm9yZy94ei94ei01LjAuNS50YXIuZ3oiLAorICAgICAgICAgICAgICBjaGVja3N1bT0nMTlkOTI0ZTA2NmI2ZmZmMGJjOWQxOTgxYjRlNTMxOTYnLAogICAgICAgICAgICAgICBjb25maWd1cmVfcHJlPVsKICAgICAgICAgICAgICAgICAgICAgJy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nJywKICAgICAgICAgICAgICAgXQpAQCAtMjgyLDkgKzI4Myw5IEBACiAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICksCiAgICAgICAgICAgZGljdCgKLSAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuNy4xMyIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5zcWxpdGUub3JnL3NxbGl0ZS1hdXRvY29uZi0zMDcxMzAwLnRhci5neiIsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSdjOTdkZjQwM2U4YTNkNWI2N2JiNDA4ZmNkNmFhYmQ4ZScsCisgICAgICAgICAgICAgIG5hbWU9IlNRTGl0ZSAzLjguMSIsCisgICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5zcWxpdGUub3JnLzIwMTMvc3FsaXRlLWF1dG9jb25mLTMwODAxMDAudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzhiNWEwYTAyZGZjYjBjN2RhZjkwODU2YTVjZmQ0ODVhJywKICAgICAgICAgICAgICAgZXh0cmFfY2ZsYWdzPSgnLU9zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURTUUxJVEVfRU5BQkxFX0ZUUzQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICctRFNRTElURV9FTkFCTEVfRlRTM19QQVJFTlRIRVNJUyAnCkBAIC0zNjQsNiArMzY1LDcgQEAKICMgSW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBwYWNrYWdlcyBpbnNpZGUgdGhlIC5tcGtnLgogZGVmIHBrZ19yZWNpcGVzKCk6CiAgICAgdW5zZWxlY3RlZF9mb3JfcHl0aG9uMyA9ICgnc2VsZWN0ZWQnLCAndW5zZWxlY3RlZCcpW1BZVEhPTl8zXQorICAgIHVuc2VsZWN0ZWRfZm9yX2x0X3B5dGhvbjM0ID0gKCdzZWxlY3RlZCcsICd1bnNlbGVjdGVkJylbZ2V0VmVyc2lvblR1cGxlKCkgPCAoMywgNCldCiAgICAgcmVzdWx0ID0gWwogICAgICAgICBkaWN0KAogICAgICAgICAgICAgbmFtZT0iUHl0aG9uRnJhbWV3b3JrIiwKQEAgLTQzMiwxMCArNDM0LDI3IEBACiAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCiAgICAgICAgICAgICBzb3VyY2U9Ii9lbXB0eS1kaXIiLAogICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCi0gICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAorICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfbHRfcHl0aG9uMzQsCiAgICAgICAgICksCiAgICAgXQogCisgICAgaWYgZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpOgorICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICBuYW1lPSJQeXRob25JbnN0YWxsUGlwIiwKKyAgICAgICAgICAgICAgICBsb25nX25hbWU9Ikluc3RhbGwgb3IgdXBncmFkZSBwaXAiLAorICAgICAgICAgICAgICAgIHJlYWRtZT0iIiJcCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFja2FnZSBpbnN0YWxscyAob3IgdXBncmFkZXMgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgIHBpcCwgYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgICAgICBwb3N0ZmxpZ2h0PSJzY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIiwKKyAgICAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCisgICAgICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKKyAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICBzZWxlY3RlZD0nc2VsZWN0ZWQnLAorICAgICAgICAgICAgKQorICAgICAgICApCisKICAgICBpZiBERVBUQVJHRVQgPCAnMTAuNCcgYW5kIG5vdCBQWVRIT05fMzoKICAgICAgICAgcmVzdWx0LmFwcGVuZCgKICAgICAgICAgICAgIGRpY3QoCkBAIC00NTMsNiArNDcyLDcgQEAKICAgICAgICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAogICAgICAgICAgICAgKQogICAgICAgICApCisKICAgICByZXR1cm4gcmVzdWx0CiAKIGRlZiBmYXRhbChtc2cpOgpAQCAtNTY3LDIwICs1ODcsNiBAQAogICAgICAgICAgICAgICAgICUgZnJhbWV3b3Jrc1snVGsnXSwKICAgICAgICAgICAgIF0KIAotICAgICMgRm9yIDEwLjYrIGJ1aWxkcywgd2UgYnVpbGQgdHdvIHZlcnNpb25zIG9mIF90a2ludGVyOgotICAgICMgICAgLSB0aGUgdHJhZGl0aW9uYWwgdmVyc2lvbiAocmVuYW1lZCB0byBfdGtpbnRlcl9saWJyYXJ5LnNvKSBsaW5rZWQKLSAgICAjICAgICAgIHdpdGggL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNsLFRrfS5mcmFtZXdvcmsKLSAgICAjICAgIC0gdGhlIGRlZmF1bHQgdmVyc2lvbiBsaW5rZWQgd2l0aCBvdXIgYnVpbHRpbiBjb3BpZXMgb2YgVGNsIGFuZCBUawotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgRVhQRUNURURfU0hBUkVEX0xJQlNbJ190a2ludGVyX2xpYnJhcnkuc28nXSA9IFwKLSAgICAgICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddCi0gICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddID0gWwotICAgICAgICAgICAgICAgICIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJXMvbGliL2xpYnRjbCVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RjbCddKSwKLSAgICAgICAgICAgICAgICAiL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyVzL2xpYi9saWJ0ayVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RrJ10pLAotICAgICAgICAgICAgICAgIF0KLQogICAgICMgUmVtb3ZlIGluaGVyaXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggbWlnaHQgaW5mbHVlbmNlIGJ1aWxkCiAgICAgZW52aXJvbl92YXJfcHJlZml4ZXMgPSBbJ0NQQVRIJywgJ0NfSU5DTFVERV8nLCAnRFlMRF8nLCAnTEFORycsICdMQ18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMRF8nLCAnTElCUkFSWV8nLCAnUEFUSCcsICdQWVRIT04nXQpAQCAtOTU1LDM0ICs5NjEsMTkgQEAKICAgICBydW5Db21tYW5kKCIlcyAtQyAtLWVuYWJsZS1mcmFtZXdvcmsgLS1lbmFibGUtdW5pdmVyc2Fsc2RrPSVzICIKICAgICAgICAgICAgICAgICItLXdpdGgtdW5pdmVyc2FsLWFyY2hzPSVzICIKICAgICAgICAgICAgICAgICIlcyAiCisgICAgICAgICAgICAgICAiJXMgIgogICAgICAgICAgICAgICAgIkxERkxBR1M9Jy1nIC1MJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9saWInICIKICAgICAgICAgICAgICAgICJDRkxBR1M9Jy1nIC1JJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9pbmNsdWRlJyAyPiYxIiUoCiAgICAgICAgIHNoZWxsUXVvdGUob3MucGF0aC5qb2luKFNSQ0RJUiwgJ2NvbmZpZ3VyZScpKSwgc2hlbGxRdW90ZShTREtQQVRIKSwKICAgICAgICAgVU5JVkVSU0FMQVJDSFMsCiAgICAgICAgICgnICcsICctLXdpdGgtY29tcHV0ZWQtZ290b3MgJylbUFlUSE9OXzNdLAorICAgICAgICAoJyAnLCAnLS13aXRob3V0LWVuc3VyZXBpcCAnKVtnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCldLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdKSkKIAogICAgIHByaW50KCJSdW5uaW5nIG1ha2UiKQogICAgIHJ1bkNvbW1hbmQoIm1ha2UiKQogCi0gICAgIyBGb3IgZGVwbG95bWVudCB0YXJnZXRzIG9mIDEwLjYgYW5kIGhpZ2hlciwgd2UgYnVpbGQgb3VyIG93biB2ZXJzaW9uCi0gICAgIyBvZiBUY2wgYW5kIENvY29hIEFxdWEgVGsgbGlicyBiZWNhdXNlIHRoZSBBcHBsZS1zdXBwbGllZCBUayA4LjUgaXMKLSAgICAjIG91dC1vZi1kYXRlIGFuZCBoYXMgY3JpdGljYWwgYnVncy4gIFNhdmUgdGhlIF90a2ludGVyLnNvIHRoYXQgd2FzCi0gICAgIyBsaW5rZWQgd2l0aCAvTGlicmFyeS9GcmFtZXdvcmtzL3tUY2ssVGt9LmZyYW1ld29yayBhbmQgYnVpbGQKLSAgICAjIGFub3RoZXIgX3RraW50ZXIuc28gbGlua2VkIHdpdGggb3VyIGJ1aWx0aW4gVGNsIGFuZCBUayBsaWJzLgotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgcnVuQ29tbWFuZCgiZmluZCBidWlsZCAtbmFtZSAnX3RraW50ZXIuc28nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgLWV4ZWNkaXIgbXYgJ3t9JyBfdGtpbnRlcl9saWJyYXJ5LnNvIFw7IikKLSAgICAgICAgcHJpbnQoIlJ1bm5pbmcgbWFrZSB0byBidWlsZCBidWlsdGluIF90a2ludGVyIikKLSAgICAgICAgcnVuQ29tbWFuZCgibWFrZSBUQ0xUS19JTkNMVURFUz0nLUklcy9saWJyYXJpZXMvdXNyL2xvY2FsL2luY2x1ZGUnICIKLSAgICAgICAgICAgICAgICAiVENMVEtfTElCUz0nLUwlcy9saWJyYXJpZXMvdXNyL2xvY2FsL2xpYiAtbHRjbDguNSAtbHRrOC41JyIlKAotICAgICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSwKLSAgICAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0pKQotICAgICAgICAjIG1ha2UgYSBjb3B5IHdoaWNoIHdpbGwgYmUgbW92ZWQgdG8gbGliLXRraW50ZXIgbGF0ZXIKLSAgICAgICAgcnVuQ29tbWFuZCgiZmluZCBidWlsZCAtbmFtZSAnX3RraW50ZXIuc28nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgLWV4ZWNkaXIgY3AgLXAgJ3t9JyBfdGtpbnRlcl9idWlsdGluLnNvIFw7IikKLQogICAgIHByaW50KCJSdW5uaW5nIG1ha2UgaW5zdGFsbCIpCiAgICAgcnVuQ29tbWFuZCgibWFrZSBpbnN0YWxsIERFU1RESVI9JXMiJSgKICAgICAgICAgc2hlbGxRdW90ZShyb290RGlyKSkpCkBAIC0xMDA3LDI3ICs5OTgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbi5mcmFtZXdvcmsnLCAnVmVyc2lvbnMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLCAnbGliJywgJ3B5dGhvbiVzJyUodmVyc2lvbiwpKQogCi0gICAgIyBJZiB3ZSBtYWRlIG11bHRpcGxlIHZlcnNpb25zIG9mIF90a2ludGVyLCBtb3ZlIHRoZW0gdG8KLSAgICAjIHRoZWlyIG93biBkaXJlY3RvcmllcyB1bmRlciBweXRob24gbGliLiAgVGhpcyBhbGxvd3MKLSAgICAjIHVzZXJzIHRvIHNlbGVjdCB3aGljaCB0byBpbXBvcnQgYnkgbWFuaXB1bGF0aW5nIHN5cy5wYXRoCi0gICAgIyBkaXJlY3RseSBvciB3aXRoIFBZVEhPTlBBVEguCi0KLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIFRLSU5URVJTID0gWydidWlsdGluJywgJ2xpYnJhcnknXQotICAgICAgICB0a2ludGVyX21vdmVzID0gWygnX3RraW50ZXJfJyArIHRrbiArICcuc28nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aF90b19saWIsICdsaWItdGtpbnRlcicsIHRrbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRrbiBpbiBUS0lOVEVSU10KLSAgICAgICAgIyBDcmVhdGUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzIHVuZGVyIGxpYi10a2ludGVyLgotICAgICAgICAjIFRoZSBwZXJtaXNzaW9ucyBhbmQgdWlkL2dpZCB3aWxsIGJlIGZpeGVkIHVwIG5leHQuCi0gICAgICAgIGZvciB0a20gaW4gdGtpbnRlcl9tb3ZlczoKLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRrbVsxXSkKLQogICAgIHByaW50KCJGaXggZmlsZSBtb2RlcyIpCiAgICAgZnJtRGlyID0gb3MucGF0aC5qb2luKHJvb3REaXIsICdMaWJyYXJ5JywgJ0ZyYW1ld29ya3MnLCAnUHl0aG9uLmZyYW1ld29yaycpCiAgICAgZ2lkID0gZ3JwLmdldGdybmFtKCdhZG1pbicpLmdyX2dpZAogCiAgICAgc2hhcmVkX2xpYl9lcnJvciA9IEZhbHNlCi0gICAgbW92ZXNfbGlzdCA9IFtdCiAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhmcm1EaXIpOgogICAgICAgICBmb3IgZG4gaW4gZGlybmFtZXM6CiAgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oZGlycGF0aCwgZG4pLCBTVEFUXzBvNzc1KQpAQCAtMTA1MywyNSArMTAyOCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNsLCBwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9saWJfZXJyb3IgPSBUcnVlCiAKLSAgICAgICAgICAgICMgSWYgdGhpcyBpcyBhIF90a2ludGVyIHZhcmlhbnQsIG1vdmUgaXQgdG8gaXRzIG93biBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgbm93IHRoYXQgd2UgaGF2ZSBmaXhlZCBpdHMgcGVybWlzc2lvbnMgYW5kIGNoZWNrZWQgdGhhdCBpdAotICAgICAgICAgICAgIyB3YXMgbGlua2VkIHByb3Blcmx5LiAgVGhlIGRpcmVjdG9yeSB3YXMgY3JlYXRlZCBlYXJsaWVyLgotICAgICAgICAgICAgIyBUaGUgZmlsZXMgYXJlIG1vdmVkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiB3YWxrZWQKLSAgICAgICAgICAgICMgc2luY2UgdGhlIHNoYXJlZCBsaWJyYXJ5IGNoZWNraW5nIGRlcGVuZHMgb24gdGhlIGZpbGVzCi0gICAgICAgICAgICAjIGhhdmluZyB1bmlxdWUgbmFtZXMuCi0gICAgICAgICAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgICAgICAgICAgZm9yIHRrbSBpbiB0a2ludGVyX21vdmVzOgotICAgICAgICAgICAgICAgICAgICBpZiBmbiA9PSB0a21bMF06Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3Zlc19saXN0LmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCwgb3MucGF0aC5qb2luKHRrbVsxXSwgJ190a2ludGVyLnNvJykpKQotCiAgICAgaWYgc2hhcmVkX2xpYl9lcnJvcjoKICAgICAgICAgZmF0YWwoIlVuZXhwZWN0ZWQgc2hhcmVkIGxpYnJhcnkgZXJyb3JzLiIpCiAKLSAgICAjIE5vdyBkbyB0aGUgbW92ZXMuCi0gICAgZm9yIG1sIGluIG1vdmVzX2xpc3Q6Ci0gICAgICAgIHNodXRpbC5tb3ZlKG1sWzBdLCBtbFsxXSkKLQogICAgIGlmIFBZVEhPTl8zOgogICAgICAgICBMRFZFUlNJT049Tm9uZQogICAgICAgICBWRVJTSU9OPU5vbmUKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dAppbmRleCAyMTJkOTYzLi5lMDYxYTA2IDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CkBAIC0yOCw2ICsyOCwzNiBAQAogZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkIGFuZCByZWNvbW1lbmRlZCB2ZXJzaW9ucyBvZgogVGNsL1RrIGZvciB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIGFuZCBvZiBNYWMgT1MgWC4KIAorICAgICAgICAgICAgICAqKk5FVyogQXMgb2YgUHl0aG9uIDMuNC4wYjE6CisKK05ldyBJbnN0YWxsYXRpb24gT3B0aW9ucyBhbmQgRGVmYXVsdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFB5dGhvbiBpbnN0YWxsZXIgbm93IGluY2x1ZGVzIGFuIG9wdGlvbiB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwKK29yIHVwZ3JhZGUgcGlwLCBhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4KK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgbm8gSW50ZXJuZXQgYWNjZXNzIGlzIHJlcXVpcmVkLgorSWYgeW91IGRvIG5vdCB3YW50IHRoZSBpbnN0YWxsZXIgdG8gZG8gdGhpcywgc2VsZWN0IHRoZSAiQ3VzdG9taXplIgorb3B0aW9uIGF0IHRoZSAiSW5zdGFsbGF0aW9uIFR5cGUiIHN0ZXAgYW5kIHVuY2hlY2sgdGhlICJJbnN0YWxsIG9yCit1Z3ByYWRlIHBpcCIgb3B0aW9uLgorCitUbyBtYWtlIGl0IGVhc2llciB0byB1c2Ugc2NyaXB0cyBpbnN0YWxsZWQgYnkgdGhpcmQtcGFydHkgUHl0aG9uCitwYWNrYWdlcywgd2l0aCBwaXAgb3IgYnkgb3RoZXIgbWVhbnMsIHRoZSAiU2hlbGwgcHJvZmlsZSB1cGRhdGVyIgorb3B0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFzIGhhcyBiZWVuIHRoZSBjYXNlIHdpdGggUHl0aG9uCisyLjcueCBpbnN0YWxsZXJzLiBZb3UgY2FuIGFsc28gdHVybiB0aGlzIG9wdGlvbiBvZmYgYnkgc2VsZWN0aW5nCisiQ3VzdG9taXplIiBhbmQgdW5jaGVja2luZyB0aGUgIlNoZWxsIHByb2ZpbGUgdXBkYXRlciIgb3B0aW9uLiBZb3UKK2NhbiBhbHNvIHVwZGF0ZSB5b3VyIHNoZWxsIHByb2ZpbGUgbGF0ZXIgYnkgbGF1bmNoaW5nIHRoZSAiVXBkYXRlCitTaGVsbCBQcm9maWxlIiBjb21tYW5kIGZvdW5kIGluIHRoZSAvQXBwbGljYXRpb25zL1B5dGhvbiAkVkVSU0lPTgorZm9sZGVyLiAgWW91IG1heSBuZWVkIHRvIHN0YXJ0IGEgbmV3IHRlcm1pbmFsIHdpbmRvdyBmb3IgdGhlCitjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LgorCitQeXRob24ub3JnIFB5dGhvbiAkVkVSU0lPTiBhbmQgMi43LnggdmVyc2lvbnMgY2FuIGJvdGggYmUgaW5zdGFsbGVkIGFuZAord2lsbCBub3QgY29uZmxpY3QuIENvbW1hbmQgbmFtZXMgZm9yIFB5dGhvbiAzIGNvbnRhaW4gYSAzIGluIHRoZW0sCitweXRob24zIChvciBweXRob24kVkVSU0lPTiksIGlkbGUzIChvciBpZGxlJFZFUlNJT04pLCBwaXAzIChvciBwaXAkVkVSU0lPTiksIGV0Yy4KK1B5dGhvbiAyLjcgY29tbWFuZCBuYW1lcyBjb250YWluIGEgMiBvciBubyBkaWdpdDogcHl0aG9uMiAob3IKK3B5dGhvbjIuNyBvciBweXRob24pLCBpZGxlMiAob3IgaWRsZTIuNyBvciBpZGxlKSwgZXRjLiBJZiB5b3Ugd2FudCB0bwordXNlIHBpcCB3aXRoIFB5dGhvbiAyLjcueCwgeW91IHdpbGwgbmVlZCB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCBhCitzZXBhcmF0ZSBjb3B5IG9mIGl0IGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4CisoaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaSkuCiAKIFVzaW5nIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gb24gT1MgWAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgppbmRleCAyMzlkNzZlLi44ODZlYmZlIDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKQEAgLTEsNSArMSw1IEBACiB7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjExODdcY29jb2FzdWJydGY0MDAKLVxjb2NvYXNjcmVlbmZvbnRzMXtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CitcY29jb2FzY3JlZW5mb250czF7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7XGYxXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXJOZXdQU01UO30KIHtcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KIFxwYXBlcncxMTkwNVxwYXBlcmgxNjgzN1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3OTY0MFx2aWV3aDEwNjIwXHZpZXdraW5kMAogXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MApAQCAtMTYsMTMgKzE2LDE3IEBACiBcYiBJRExFCiBcYjAgIGFuZCBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8gUHl0aG9uIHByb2dyYW1zLlwKIFwKLVNlZSB0aGUgUmVhZE1lIGZpbGUgYW5kIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cCi1cCiAKLVxiIE5PVEU6IAotXGIwIFRoaXMgcGFja2FnZSB3aWxsIG5vdCB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGJ5IGRlZmF1bHQuICBEb3VibGUtY2xpY2sgCi1cYiBVcGRhdGUgU2hlbGwgUHJvZmlsZQotXGIwICBhdCBhbnkgdGltZSB0byBtYWtlICRGVUxMX1ZFUlNJT04gdGhlIGRlZmF1bHQgUHl0aG9uIDMgdmVyc2lvbi4gIFRoaXMgdmVyc2lvbiBjYW4gY28tZXhpc3Qgd2l0aCBvdGhlciBpbnN0YWxsZWQgdmVyc2lvbnMgb2YgUHl0aG9uIDMgYW5kIFB5dGhvbiAyLlwKK1xiIE5FVyBmb3IgUHl0aG9uIDMuNDogCitcYjAgVGhpcyBwYWNrYWdlIG5vdyB1cGRhdGVzIHlvdXIgc2hlbGwgcHJvZmlsZSBieSBkZWZhdWx0IHRvIG1ha2UgJEZVTExfVkVSU0lPTiB0aGUgZGVmYXVsdCBQeXRob24gMyB2ZXJzaW9uLiAgVGhpcyB2ZXJzaW9uIGNhbiBjby1leGlzdCB3aXRoIG90aGVyIGluc3RhbGxlZCB2ZXJzaW9ucyBvZiBQeXRob24gMyBhbmQgUHl0aG9uIDIuICBUaGlzIHBhY2thZ2UgYWxzbyBpbnN0YWxscyBhIHZlcnNpb24gb2YgCitcZjEgcGlwCitcZjAgLCB0aGUgcmVjb21tZW5kZWQgdG9vbCBmb3IgaW5zdGFsbGluZyBhbmQgbWFuYWdpbmcgUHl0aG9uIHBhY2thZ2VzLiAgIFR5cGVcCitcCisJCitcZjEgcGlwMy40IC0taGVscAorXGYwIFwKK1wKK2ZvciBhbiBvdmVydmlldy4gIFNlZSB0aGUgUmVhZE1lIGZpbGUgYW5kIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cCiBcCiAKIFxiIElNUE9SVEFOVDoKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2I5N2M0NwotLS0gL2Rldi9udWxsCisrKyBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorIworIyBJbnN0YWxsL3VwZ3JhZGUgcGlwLgorIworCitQWVZFUj0iQFBZVkVSQCIKK1BZTUFKT1I9IjMiCitGV0s9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8ke1BZVkVSfSIKK1JFTEZXS0JJTj0iLi4vLi4vLi4ke0ZXS30vYmluIgorCit1bWFzayAwMjIKKworIiR7RldLfS9iaW4vcHl0aG9uJHtQWVZFUn0iIC1tIGVuc3VyZXBpcCAtLXVwZ3JhZGUKKworIiR7RldLfS9iaW4vcHl0aG9uJHtQWVZFUn0iIC1XaSBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vY29tcGlsZWFsbC5weSIgXAorICAgIC1mIC14IGJhZHN5bnRheCBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIKKworIiR7RldLfS9iaW4vcHl0aG9uJHtQWVZFUn0iIC1XaSAtTyBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vY29tcGlsZWFsbC5weSIgXAorICAgIC1mIC14IGJhZHN5bnRheCBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIKKworY2hncnAgLVIgYWRtaW4gIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIgIiR7RldLfS9iaW4iCitjaG1vZCAtUiBnK3cgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIgIiR7RldLfS9iaW4iCisKKyMgV2UgZG8gbm90IGtub3cgaWYgdGhlIHVzZXIgc2VsZWN0ZWQgdGhlIFB5dGhvbiBjb21tYW5kLWxpbmUgdG9vbHMKKyMgcGFja2FnZSB0aGF0IGluc3RhbGxzIHN5bWxpbmtzIHRvIC91c3IvbG9jYWwvYmluLiAgU28gd2UgYXNzdW1lCisjIHRoYXQgdGhlIGNvbW1hbmQtbGluZSB0b29scyBwYWNrYWdlIGhhcyBhbHJlYWR5IGNvbXBsZXRlZCBvciB3YXMKKyMgbm90IHNlbGVjdGVkIGFuZCB3ZSB3aWxsIG9ubHkgaW5zdGFsbCAvdXNyL2xvY2FsL2JpbiBzeW1saW5rcyBmb3IKKyMgcGlwIGV0IGFsIGlmIHRoZXJlIGFyZSAvdXNyL2xvY2FsL2Jpbi9weXRob24qIHN5bWxpbmtzIHRvIG91cgorIyBmcmFtZXdvcmsgYmluIGRpcmVjdG9yeS4KKworaWYgWyAtZCAvdXNyL2xvY2FsL2JpbiBdIDsgdGhlbgorICAgICgKKyAgICAgICAgY2QgL3Vzci9sb2NhbC9iaW4KKyAgICAgICAgIyBDcmVhdGUgcGlweC55IGFuZCBlYXN5X2luc3RhbGwteC55IGxpbmtzIGlmIC91c3IvbG9jYWwvYmluL3B5dGhvbngueQorICAgICAgICAjICAgaXMgbGlua2VkIHRvIHRoaXMgZnJhbWV3b3JrIHZlcnNpb24KKyAgICAgICAgaWYgWyAiJChyZWFkbGluayAtbiAuL3B5dGhvbiR7UFlWRVJ9KSIgPSAiJHtSRUxGV0tCSU59L3B5dGhvbiR7UFlWRVJ9IiBdIDsgdGhlbgorICAgICAgICAgICAgZm9yIGZuIGluICJwaXAke1BZVkVSfSIgImVhc3lfaW5zdGFsbC0ke1BZVkVSfSIgOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBpZiBbIC1lICIke1JFTEZXS0JJTn0vJHtmbn0iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIC4vJHtmbn0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXMgIiR7UkVMRldLQklOfS8ke2ZufSIgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgIGNoZ3JwIC1oIGFkbWluICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaG1vZCAtaCBnK3cgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgIyBDcmVhdGUgcGlweCBsaW5rIGlmIC91c3IvbG9jYWwvYmluL3B5dGhvbnggaXMgbGlua2VkIHRvIHRoaXMgdmVyc2lvbgorICAgICAgICBpZiBbICIkKHJlYWRsaW5rIC1uIC4vcHl0aG9uJHtQWU1BSk9SfSkiID0gIiR7UkVMRldLQklOfS9weXRob24ke1BZTUFKT1J9IiBdIDsgdGhlbgorICAgICAgICAgICAgZm9yIGZuIGluICJwaXAke1BZTUFKT1J9IiA7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIGlmIFsgLWUgIiR7UkVMRldLQklOfS8ke2ZufSIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcm0gLWYgLi8ke2ZufQorICAgICAgICAgICAgICAgICAgICBsbiAtcyAiJHtSRUxGV0tCSU59LyR7Zm59IiAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgY2hncnAgLWggYWRtaW4gIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgIGNobW9kIC1oIGcrdyAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICkKK2ZpCitleGl0IDAKZGlmZiAtLWdpdCBhL01hYy9NYWtlZmlsZS5pbiBiL01hYy9NYWtlZmlsZS5pbgppbmRleCA1Y2I2NjRkLi4wM2VjNzM4IDEwMDY0NAotLS0gYS9NYWMvTWFrZWZpbGUuaW4KKysrIGIvTWFjL01ha2VmaWxlLmluCkBAIC0zLDkgKzMsMTMgQEAKICMgY29tbWFuZGxpbmUgaW4gdGhhdCBjYXNlLgogCiBWRVJTSU9OPUBWRVJTSU9OQAorQUJJRkxBR1M9QEFCSUZMQUdTQAorTERWRVJTSU9OPUBMRFZFUlNJT05ACitFTlNVUkVQSVA9QEVOU1VSRVBJUEAKIGJ1aWxkZGlyID0gLi4KIHNyY2Rpcj1Ac3JjZGlyQAogcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACiBMSUJERVNUPSQocHJlZml4KS9saWIvcHl0aG9uJChWRVJTSU9OKQogUlVOU0hBUkVEPUBSVU5TSEFSRURACiBCVUlMREVYRT1AQlVJTERFWEVFWFRACkBAIC0yMyw3ICsyNyw3IEBACiAKIAogIyBUaGVzZSBhcmUgbm9ybWFsbHkgZ2xpbXBzZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0Ci1iaW5kaXI9JChwcmVmaXgpL2JpbgorQklORElSPQkJQGJpbmRpckAKIFBZVEhPTkFQUFNESVI9QEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYQC8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQogQVBQSU5TVEFMTERJUj0kKHByZWZpeCkvUmVzb3VyY2VzL1B5dGhvbi5hcHAKIApAQCAtNDYsMTkgKzUwLDcgQEAKIEFQUFNVQkRJUlM9TWFjT1MgUmVzb3VyY2VzCiBjb21waWxlYWxsPSQoc3JjZGlyKS8uLi9MaWIvY29tcGlsZWFsbC5weQogCi1pbnN0YWxsYXBwczogaW5zdGFsbF9QeXRob24gaW5zdGFsbF9weXRob253IGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFCi0KLWluc3RhbGxfcHl0aG9udzogcHl0aG9udwotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTikiCi0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zIgotCWxuIC1zZiBweXRob253JChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMiCi1pZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCi0JbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIC1vdXRwdXQgJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253Ci0JbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIC1vdXRwdXQgJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTiktMzIgcHl0aG9udwotCWxuIC1zZiBweXRob253JChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMtMzIiCi0JbG4gLXNmIHB5dGhvbiQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbjMtMzIiCi1lbmRpZgoraW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFCiAKICMKICMgSW5zdGFsbCB1bml4IHRvb2xzIGluIC91c3IvbG9jYWwvYmluLiBUaGVzZSBhcmUganVzdCBhbGlhc2VzIGZvciB0aGUgCkBAIC02OCwyMSArNjAsNDkgQEAKIAlpZiBbICEgLWQgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiBdOyB0aGVuICBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIDtcCiAJZmkKLQlmb3IgZm4gaW4gcHl0aG9uMyBweXRob253MyBpZGxlMyBweWRvYzMgcHl0aG9uMy1jb25maWcgXAotCQkgIHB5dGhvbiQoVkVSU0lPTikgcHl0aG9udyQoVkVSU0lPTikgaWRsZSQoVkVSU0lPTikgXAotCQkgIHB5ZG9jJChWRVJTSU9OKSBweXRob24kKFZFUlNJT04pLWNvbmZpZyAydG8zIFwKLQkJICAydG8zLSQoVkVSU0lPTikgcHl2ZW52IHB5dmVudi0kKFZFUlNJT04pIDtcCisJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJZm9yIGZuIGluIFwKKwkJCTJ0bzMgXAorCQkJaWRsZTMgXAorCQkJcHlkb2MzIFwKKwkJCXB5dGhvbjMgXAorCQkJcHl0aG9uMy1jb25maWcgXAorCQkJcHl2ZW52IFwKKwkJCTsgXAogCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKKwkJcm0gLWYgJCR7Zm59IDsgXAorCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAogCWRvbmUKLWlmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKLQlmb3IgZm4gaW4gcHl0aG9uMy0zMiBweXRob253My0zMiBcCi0JCSAgcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253JChWRVJTSU9OKS0zMiA7XAotCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKLQlkb25lCi1lbmRpZgotCisJLWlmIHRlc3QgIngkKFZFUlNJT04pIiAhPSAieCQoTERWRVJTSU9OKSI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24kKFZFUlNJT04pLWNvbmZpZyBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24zLTMyIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXBpcDMgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQogCiAjCiAjIExpa2UgaW5zdGFsbHVuaXh0b29scywgYnV0IG9ubHkgaW5zdGFsbCBsaW5rcyB0byB0aGUgdmVyc2lvbmVkIGJpbmFyaWVzLgpAQCAtOTEsMjAgKzExMSw1NSBAQAogCWlmIFsgISAtZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIF07IHRoZW4gIFwKIAkJJChJTlNUQUxMKSAtZCAtbSAkKERJUk1PREUpICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgO1wKIAlmaQotCWZvciBmbiBpbiBweXRob24kKFZFUlNJT04pIHB5dGhvbnckKFZFUlNJT04pIGlkbGUkKFZFUlNJT04pIFwKLQkJICBweWRvYyQoVkVSU0lPTikgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgMnRvMy0kKFZFUlNJT04pIHB5dmVudi0kKFZFUlNJT04pIDtcCisJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJZm9yIGZuIGluIFwKKwkJCTJ0bzMtJChWRVJTSU9OKSBcCisJCQlpZGxlJChWRVJTSU9OKSBcCisJCQlweWRvYyQoVkVSU0lPTikgXAorCQkJcHl0aG9uJChWRVJTSU9OKSBcCisJCQlweXRob24kKExEVkVSU0lPTiktY29uZmlnIFwKKwkJCXB5dmVudi0kKFZFUlNJT04pIFwKKwkJCTsgXAogCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKKwkJcm0gLWYgJCR7Zm59IDtcCisJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCiAJZG9uZQotaWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQotCWZvciBmbiBpbiBweXRob24kKFZFUlNJT04pLTMyIHB5dGhvbnckKFZFUlNJT04pLTMyIDtcCi0JZG8gXAotCQlsbiAtZnMgIiQocHJlZml4KS9iaW4vJCR7Zm59IiAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4vJCR7Zm59IiA7XAotCWRvbmUKLWVuZGlmCisJLWlmIHRlc3QgIngkKFZFUlNJT04pIiAhPSAieCQoTERWRVJTSU9OKSI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24kKExEVkVSU0lPTikgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChWRVJTSU9OKS0zMiBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQllYXN5X2luc3RhbGwtJChWRVJTSU9OKSBcCisJCQkJcGlwJChWRVJTSU9OKSBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCiAKIHB5dGhvbnc6ICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgTWFrZWZpbGUKLQkkKENDKSAkKExERkxBR1MpIC1EUFlUSE9ORlJBTUVXT1JLPSciJChQWVRIT05GUkFNRVdPUkspIicgLW8gJEAgJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyAtSS4uIC1JJChzcmNkaXIpLy4uL0luY2x1ZGUgLi4vJChQWVRIT05GUkFNRVdPUkspLmZyYW1ld29yay9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKQorCSQoQ0MpICQoTERGTEFHUykgLURQWVRIT05GUkFNRVdPUks9JyIkKFBZVEhPTkZSQU1FV09SSykiJyAtbyAkQCBcCisJCSQoc3JjZGlyKS9Ub29scy9weXRob253LmMgLUkuLiAtSSQoc3JjZGlyKS8uLi9JbmNsdWRlIFwKKwkJLi4vJChQWVRIT05GUkFNRVdPUkspLmZyYW1ld29yay9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKQogCiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyOgogCWNkIFB5dGhvbkxhdW5jaGVyICYmIG1ha2UgaW5zdGFsbCBERVNURElSPSQoREVTVERJUikKZGlmZiAtLWdpdCBhL01hYy9SRUFETUUgYi9NYWMvUkVBRE1FCmluZGV4IDkwMWEzMjQuLjYxNjM0ZTkgMTAwNjQ0Ci0tLSBhL01hYy9SRUFETUUKKysrIGIvTWFjL1JFQURNRQpAQCAtNyw3ICs3LDcgQEAKICAgICBSb25hbGQgT3Vzc29yZW4gKDIwMTAtMDQpLAogICAgIE5lZCBEZWlseSAoMjAxMi0wNikKIAotOlZlcnNpb246IDMuMy4wCis6VmVyc2lvbjogMy40LjAKIAogVGhpcyBkb2N1bWVudCBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHNvbWUgTWFjIE9TIFggc3BlY2lmaWMgZmVhdHVyZXMgaW4KIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgpAQCAtOTksNiArOTksOCBAQAogCiAgICogYGBpbnRlbGBgOgkgIGBgaTM4NmBgLCBgYHg4Nl82NGBgCiAKKyAgKiBgYGludGVsLTMyYGA6IGBgaTM4NmBgCisKICAgKiBgYDMyLWJpdGBgOiAgIGBgcHBjYGAsIGBgaTM4NmBgCiAKICAgKiBgYDMtd2F5YGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAsIGBgcHBjYGAKQEAgLTEyNSw3ICsxMjcsNyBAQAogCiAgICogMTAuNyBhbmQgMTAuOCBTREtzIHdpdGggWGNvZGUgNCBzdXBwb3J0IGBgaW50ZWxgYCBvbmx5CiAKLVRoZSBtYWtlZmlsZSBmb3IgYSBmcmFtZXdvcmsgYnVpbGQgd2lsbCBhbHNvIGluc3RhbGwgYGBweXRob24zLjMtMzJgYAorVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGFsc28gaW5zdGFsbCBgYHB5dGhvbjMuNC0zMmBgCiBiaW5hcmllcyB3aGVuIHRoZSB1bml2ZXJzYWwgYXJjaGl0ZWN0dXJlIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAzMi1iaXQKIGFyY2hpdGVjdHVyZSAodGhhdCBpcywgZm9yIGFsbCBmbGF2b3JzIGJ1dCBgYDY0LWJpdGBgKS4KIApAQCAtMTQ5LDcgKzE1MSw3IEBACiBub3QgYXV0b21hdGljYWxseSBjYXJyeSB0aHJvdWdoIHRvIHN1YnByb2Nlc3NlcyBsYXVuY2hlZCBieSBwcm9ncmFtcyBhbmQgdGVzdHMKIHVuZGVyIHRoYXQgUHl0aG9uLiAgSWYgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgUHl0aG9uIGludGVycHJldGVycyBsYXVuY2hlZCBpbgogc3VicHJvY2Vzc2VzIGFsc28gcnVuIGluIDMyLWJpdC1tb2RlIGlmIHRoZSBtYWluIGludGVycHJldGVyIGRvZXMsIHVzZQotYSBgYHB5dGhvbjMuMy0zMmBgIGJpbmFyeSBhbmQgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5leGVjdXRhYmxlYGAgYXMgdGhlCithIGBgcHl0aG9uMy40LTMyYGAgYmluYXJ5IGFuZCB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmV4ZWN1dGFibGVgYCBhcyB0aGUKIGBgc3VicHJvY2Vzc2BgIGBgUG9wZW5gYCBleGVjdXRhYmxlIHZhbHVlLgogCiAKQEAgLTE2OSw3ICsxNzEsNyBAQAogCiBBIHNlY29uZCByZWFzb24gZm9yIHVzaW5nIGZyYW1ld29ya3MgaXMgdGhhdCB0aGV5IHB1dCBQeXRob24tcmVsYXRlZCBpdGVtcyBpbgogb25seSB0d28gcGxhY2VzOiAiL0xpYnJhcnkvRnJhbWV3b3JrL1B5dGhvbi5mcmFtZXdvcmsiIGFuZCAKLSIvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj4iIHdoZXJlIGBgPFZFUlNJT04+YGAgY2FuIGJlIGUuZy4gIjMuMyIsCisiL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjQiLAogIjIuNyIsIGV0Yy4gIFRoaXMgc2ltcGxpZmllcyBtYXR0ZXJzIGZvciB1c2VycyBpbnN0YWxsaW5nCiBQeXRob24gZnJvbSBhIGJpbmFyeSBkaXN0cmlidXRpb24gaWYgdGhleSB3YW50IHRvIGdldCByaWQgb2YgaXQgYWdhaW4uIE1vcmVvdmVyLAogZHVlIHRvIHRoZSB3YXkgZnJhbWV3b3JrcyB3b3JrLCBhIHVzZXIgd2l0aG91dCBhZG1pbiBwcml2aWxlZ2VzIGNhbiBpbnN0YWxsIGEKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjNhY2U0Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIiIiU3VpdGUgSGVscCBJbmRleGluZyBUb29sIFN1aXRlOiBTcGVjaWFsIGV2ZW50cyB0aGF0IGp1c3QgdGhlIEhlbHAgSW5kZXhpbmcgVG9vbCBzdXBwb3J0cy4KLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdISVQgJwotCi1jbGFzcyBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzOgotCi0gICAgZGVmIHR1cm5fYW5jaG9yX2luZGV4aW5nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIGFuY2hvciBpbmRleGluZzogVHVybnMgYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZi4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0QW5jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF90dXJuX3JlbW90ZV9yb290ID0gewotICAgICAgICAnd2l0aF9yb290X3VybCcgOiAnclVSTCcsCi0gICAgfQotCi0gICAgZGVmIHR1cm5fcmVtb3RlX3Jvb3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gcmVtb3RlIHJvb3Q6IFR1cm4gdXNhZ2Ugb2YgcmVtb3RlIHJvb3QgZm9yIGNvbnRlbnQgb24gdGhlIHdlYiBvbiBvciBvZmYuIElmIHR1cm5pbmcgXHhkMm9uXHhkMywgc3VwcGx5IGEgc3RyaW5nIGFzIHNlY29uZCBwYXJhbWV0ZXIuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIHJlbW90ZSByb290IG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcm9vdF91cmw6IFRoZSByZW1vdGUgcm9vdCB0byB1c2UsIGluIHRoZSBmb3JtIG9mIFx4ZDJodHRwOi8vd3d3LmFwcGxlLmNvbS9oZWxwL1x4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RSZW0nCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgdXNlX3Rva2VuaXplcihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidXNlIHRva2VuaXplcjogVGVsbHMgdGhlIGluZGV4aW5nIHRvb2wgd2hpY2ggdG9rZW5pemVyIHRvIHVzZS4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFNwZWNpZnkgXHhkMkVuZ2xpc2hceGQzLCBceGQyRXVyb3BlYW5ceGQzLCBceGQySmFwYW5lc2VceGQzLCBceGQyS29yZWFuXHhkMywgb3IgXHhkMlNpbXBsZVx4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3VUb2snCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFwcGxpY2F0aW9uIGNsYXNzICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLWNsYXNzIF9Qcm9wX2lkbGVTdGF0dXMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImlkbGVTdGF0dXMgLSAgIiIiCi0gICAgd2hpY2ggPSAnc0lkbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2lkbGVTdGF0dXMnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci19Ci0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc0lkbCcgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmFlNzAuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgTWlzY2VsbGFuZW91cyBTdGFuZGFyZHM6IFVzZWZ1bCBldmVudHMgdGhhdCBhcmVuXHhkNXQgaW4gYW55IG90aGVyIHN1aXRlCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnbWlzYycKLQotY2xhc3MgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzOgotCi0gICAgZGVmIHJldmVydChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicmV2ZXJ0OiBSZXZlcnQgYW4gb2JqZWN0IHRvIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHZlcnNpb24KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IG9iamVjdCB0byByZXZlcnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAncnZydCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZmVlMC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0iIiJTdWl0ZSBSZXF1aXJlZCBTdWl0ZTogVGVybXMgdGhhdCBldmVyeSBhcHBsaWNhdGlvbiBzaG91bGQgc3VwcG9ydAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ3JlcWQnCi0KLWZyb20gU3RkU3VpdGVzLlJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBSZXF1aXJlZF9TdWl0ZV9FdmVudHMoUmVxdWlyZWRfU3VpdGVfRXZlbnRzKToKLQotICAgIHBhc3MKLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwYjYzYS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotIiIiU3VpdGUgU3RhbmRhcmQgU3VpdGU6IENvbW1vbiB0ZXJtcyBmb3IgbW9zdCBhcHBsaWNhdGlvbnMKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdDb1JlJwotCi1mcm9tIFN0ZFN1aXRlcy5TdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgU3RhbmRhcmRfU3VpdGVfRXZlbnRzKFN0YW5kYXJkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBfYXJnbWFwX2Nsb3NlID0gewotICAgICAgICAnc2F2aW5nJyA6ICdzYXZvJywKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgfQotCi0gICAgZGVmIGNsb3NlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJjbG9zZTogQ2xvc2UgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0cyB0byBjbG9zZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHNhdmluZzogc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5nCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY2xvcycKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbG9zZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0gICAgICAgIGFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdzYXZvJywgX0VudW1fc2F2bykKLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBkYXRhX3NpemUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImRhdGEgc2l6ZTogUmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIHNpemUgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzCi0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdkc2l6JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGdldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZ2V0OiBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogVGhlIGRhdGEgZnJvbSB0aGUgb2JqZWN0Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdnZXRkJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9tYWtlID0gewotICAgICAgICAnbmV3JyA6ICdrb2NsJywKLSAgICAgICAgJ2F0JyA6ICdpbnNoJywKLSAgICAgICAgJ3dpdGhfZGF0YScgOiAnZGF0YScsCi0gICAgICAgICd3aXRoX3Byb3BlcnRpZXMnIDogJ3ByZHQnLAotICAgIH0KLQotICAgIGRlZiBtYWtlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm1ha2U6IE1ha2UgYSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IG5ldzogdGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGF0OiB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9kYXRhOiB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvcGVydGllczogdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IE9iamVjdCBzcGVjaWZpZXIgZm9yIHRoZSBuZXcgZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY3JlbCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tYWtlKQotICAgICAgICBpZiBfbm9fb2JqZWN0IGlzIG5vdCBOb25lOiByYWlzZSBUeXBlRXJyb3IoJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnKQotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgb3BlbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIib3BlbjogT3BlbiB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBvcGVuLiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ29kb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgcHJpbnRfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJwcmludDogUHJpbnQgdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gcHJpbnQuIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAncGRvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2F2ZSA9IHsKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgICAgICdhcycgOiAnZmx0cCcsCi0gICAgfQotCi0gICAgZGVmIHNhdmUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNhdmU6IHNhdmUgYSBzZXQgb2Ygb2JqZWN0cwotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBzYXZlLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0KHMpCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXM6IHRoZSBmaWxlIHR5cGUgb2YgdGhlIGRvY3VtZW50IGluIHdoaWNoIHRvIHNhdmUgdGhlIGRhdGEKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2F2ZScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zYXZlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2V0ID0gewotICAgICAgICAndG8nIDogJ2RhdGEnLAotICAgIH0KLQotICAgIGRlZiBzZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNldDogU2V0IGFuIG9iamVjdFx4ZDVzIGRhdGEKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gY2hhbmdlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgdG86IHRoZSBuZXcgdmFsdWUKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2V0ZCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZXQpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLSMgICAgICAgIGVsZW1lbnQgJ2N3aW4nIGFzIFsnaW5keCcsICduYW1lJywgJ3JlbGUnXQotIyAgICAgICAgZWxlbWVudCAnZG9jdScgYXMgWyduYW1lJ10KLQotY2xhc3Mgd2luZG93KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIid2luZG93IC0gQSBXaW5kb3cgIiIiCi0gICAgd2FudCA9ICdjd2luJwotY2xhc3MgX1Byb3BfYm91bmRzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJib3VuZHMgLSB0aGUgYm91bmRhcnkgcmVjdGFuZ2xlIGZvciB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BibmQnCi0gICAgd2FudCA9ICdxZHJ0JwotY2xhc3MgX1Byb3BfY2xvc2VhYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJjbG9zZWFibGUgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIGNsb3NlIGJveD8gIiIiCi0gICAgd2hpY2ggPSAnaGNsYicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9mbG9hdGluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiZmxvYXRpbmcgLSBEb2VzIHRoZSB3aW5kb3cgZmxvYXQ/ICIiIgotICAgIHdoaWNoID0gJ2lzZmwnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfaW5kZXgoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImluZGV4IC0gdGhlIG51bWJlciBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BpZHgnCi0gICAgd2FudCA9ICdsb25nJwotY2xhc3MgX1Byb3BfbW9kYWwoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGFsIC0gSXMgdGhlIHdpbmRvdyBtb2RhbD8gIiIiCi0gICAgd2hpY2ggPSAncG1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJuYW1lIC0gdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncG5hbScKLSAgICB3YW50ID0gJ2l0eHQnCi1jbGFzcyBfUHJvcF9wb3NpdGlvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicG9zaXRpb24gLSB1cHBlciBsZWZ0IGNvb3JkaW5hdGVzIG9mIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwcG9zJwotICAgIHdhbnQgPSAnUURwdCcKLWNsYXNzIF9Qcm9wX3Jlc2l6YWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicmVzaXphYmxlIC0gSXMgdGhlIHdpbmRvdyByZXNpemFibGU/ICIiIgotICAgIHdoaWNoID0gJ3Byc3onCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdGl0bGVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ0aXRsZWQgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIHRpdGxlIGJhcj8gIiIiCi0gICAgd2hpY2ggPSAncHRpdCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF92aXNpYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ2aXNpYmxlIC0gaXMgdGhlIHdpbmRvdyB2aXNpYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwdmlzJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21hYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tYWJsZSAtIElzIHRoZSB3aW5kb3cgem9vbWFibGU/ICIiIgotICAgIHdoaWNoID0gJ2lzem0nCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tZWQgLSBJcyB0aGUgd2luZG93IHpvb21lZD8gIiIiCi0gICAgd2hpY2ggPSAncHp1bScKLSAgICB3YW50ID0gJ2Jvb2wnCi0KLWNsYXNzIGRvY3VtZW50KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiZG9jdW1lbnQgLSBBIERvY3VtZW50ICIiIgotICAgIHdhbnQgPSAnZG9jdScKLWNsYXNzIF9Qcm9wX21vZGlmaWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RpZmllZCAtIEhhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPyAiIiIKLSAgICB3aGljaCA9ICdpbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci0gICAgJ2RvY3VtZW50JyA6IGRvY3VtZW50LAotICAgICd3aW5kb3cnIDogd2luZG93LAotfQotd2luZG93Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotd2luZG93Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2JvdW5kcycgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ2Nsb3NlYWJsZScgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2Zsb2F0aW5nJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpbmRleCcgOiBfUHJvcF9pbmRleCwKLSAgICAnbW9kYWwnIDogX1Byb3BfbW9kYWwsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLSAgICAncG9zaXRpb24nIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Jlc2l6YWJsZScgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3RpdGxlZCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3Zpc2libGUnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAnem9vbWFibGUnIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3pvb21lZCcgOiBfUHJvcF96b29tZWQsCi19Ci13aW5kb3cuX3ByaXZlbGVtZGljdCA9IHsKLX0KLWRvY3VtZW50Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotZG9jdW1lbnQuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnbW9kaWZpZWQnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLX0KLWRvY3VtZW50Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1fRW51bV9zYXZvID0gewotICAgICd5ZXMnIDogJ3llcyAnLCAgICAgIyBTYXZlIG9iamVjdHMgbm93Ci0gICAgJ25vJyA6ICdubyAgJywgICAgICAjIERvIG5vdCBzYXZlIG9iamVjdHMKLSAgICAnYXNrJyA6ICdhc2sgJywgICAgICMgQXNrIHRoZSB1c2VyIHdoZXRoZXIgdG8gc2F2ZQotfQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2hjbGInIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdpbW9kJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICdpc2ZsJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpc3ptJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICdwYm5kJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAncGlkeCcgOiBfUHJvcF9pbmRleCwKLSAgICAncG1vZCcgOiBfUHJvcF9tb2RhbCwKLSAgICAncG5hbScgOiBfUHJvcF9uYW1lLAotICAgICdwcG9zJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdwcnN6JyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAncHRpdCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3B2aXMnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAncHp1bScgOiBfUHJvcF96b29tZWQsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc2F2bycgOiBfRW51bV9zYXZvLAotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU5ZGY1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIgotUGFja2FnZSBnZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi0iIiIKLWltcG9ydCBhZXRvb2xzCi1FcnJvciA9IGFldG9vbHMuRXJyb3IKLWltcG9ydCBTdGFuZGFyZF9TdWl0ZQotaW1wb3J0IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZQotaW1wb3J0IG9kZHNfYW5kX2VuZHMKLWltcG9ydCBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcwotaW1wb3J0IFJlcXVpcmVkX1N1aXRlCi0KLQotX2NvZGVfdG9fbW9kdWxlID0gewotICAgICdDb1JlJyA6IFN0YW5kYXJkX1N1aXRlLAotICAgICdISVQgJyA6IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSwKLSAgICAnT2RkcycgOiBvZGRzX2FuZF9lbmRzLAotICAgICdtaXNjJyA6IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLAotICAgICdyZXFkJyA6IFJlcXVpcmVkX1N1aXRlLAotfQotCi0KLQotX2NvZGVfdG9fZnVsbG5hbWUgPSB7Ci0gICAgJ0NvUmUnIDogKCdIZWxwSW5kZXhpbmdUb29sLlN0YW5kYXJkX1N1aXRlJywgJ1N0YW5kYXJkX1N1aXRlJyksCi0gICAgJ0hJVCAnIDogKCdIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScsICdIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnKSwKLSAgICAnT2RkcycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wub2Rkc19hbmRfZW5kcycsICdvZGRzX2FuZF9lbmRzJyksCi0gICAgJ21pc2MnIDogKCdIZWxwSW5kZXhpbmdUb29sLk1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJywgJ01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJyksCi0gICAgJ3JlcWQnIDogKCdIZWxwSW5kZXhpbmdUb29sLlJlcXVpcmVkX1N1aXRlJywgJ1JlcXVpcmVkX1N1aXRlJyksCi19Ci0KLWZyb20gU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWZyb20gSGVscF9JbmRleGluZ19Ub29sX1N1aXRlIGltcG9ydCAqCi1mcm9tIG9kZHNfYW5kX2VuZHMgaW1wb3J0ICoKLWZyb20gTWlzY2VsbGFuZW91c19TdGFuZGFyZHMgaW1wb3J0ICoKLWZyb20gUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLQotZGVmIGdldGJhc2VjbGFzc2VzKHYpOgotICAgIGlmIG5vdCBnZXRhdHRyKHYsICdfcHJvcGRpY3QnLCBOb25lKToKLSAgICAgICAgdi5fcHJvcGRpY3QgPSB7fQotICAgICAgICB2Ll9lbGVtZGljdCA9IHt9Ci0gICAgICAgIGZvciBzdXBlcmNsYXNzbmFtZSBpbiBnZXRhdHRyKHYsICdfc3VwZXJjbGFzc25hbWVzJywgW10pOgotICAgICAgICAgICAgc3VwZXJjbGFzcyA9IGV2YWwoc3VwZXJjbGFzc25hbWUpCi0gICAgICAgICAgICBnZXRiYXNlY2xhc3NlcyhzdXBlcmNsYXNzKQotICAgICAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19wcm9wZGljdCcsIHt9KSkKLSAgICAgICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfZWxlbWRpY3QnLCB7fSkpCi0gICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdnByb3BkaWN0Jywge30pKQotICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZlbGVtZGljdCcsIHt9KSkKLQotaW1wb3J0IFN0ZFN1aXRlcwotCi0jCi0jIFNldCBwcm9wZXJ0eSBhbmQgZWxlbWVudCBkaWN0aW9uYXJpZXMgbm93IHRoYXQgYWxsIGNsYXNzZXMgaGF2ZSBiZWVuIGRlZmluZWQKLSMKLWdldGJhc2VjbGFzc2VzKHdpbmRvdykKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotZ2V0YmFzZWNsYXNzZXMoZG9jdW1lbnQpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi0KLWNsYXNzIEhlbHBJbmRleGluZ1Rvb2woU3RhbmRhcmRfU3VpdGVfRXZlbnRzLAotICAgICAgICBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzLAotICAgICAgICBvZGRzX2FuZF9lbmRzX0V2ZW50cywKLSAgICAgICAgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzLAotICAgICAgICBSZXF1aXJlZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIGFldG9vbHMuVGFsa1RvKToKLSAgICBfc2lnbmF0dXJlID0gJ2hpdGknCi0KLSAgICBfbW9kdWxlTmFtZSA9ICdIZWxwSW5kZXhpbmdUb29sJwpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlY2I5NS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIG9kZHMgYW5kIGVuZHM6IFRoaW5ncyB0aGF0IHNob3VsZCBiZSBpbiBzb21lIHN0YW5kYXJkIHN1aXRlLCBidXQgYXJlblx4ZDV0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnT2RkcycKLQotY2xhc3Mgb2Rkc19hbmRfZW5kc19FdmVudHM6Ci0KLSAgICBkZWYgc2VsZWN0KHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNlbGVjdDogU2VsZWN0IHRoZSBzcGVjaWZpZWQgb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIHNlbGVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdzbGN0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUgYi9NYWMvVG9vbHMvRG9jL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZDUzZC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUluIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gYnVpbGQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIGEgZm9ybSB0aGF0Ci1pcyBzdWl0YWJsZSBmb3IgYWNjZXNzIHdpdGggQXBwbGUgSGVscCBWaWV3ZXIuIFRoaXMgd2lsbCBlbmFibGUgdGhlCi0iUHl0aG9uIERvY3VtZW50YXRpb24iIG1lbnUgZW50cmllcyBpbiB0aGUgTWFjUHl0aG9uIElERSBIZWxwIG1lbnUuCi0KLVVuZm9ydHVuYXRlbHkgdGhlIHByb2NlZHVyZSB0byBidWlsZCB0aGUgZG9jcyBpcyBub3QgdmVyeSBzdHJlYW1saW5lZC4KLQotRmlyc3QsIGVkaXQgc2V0dXAucHkuIEF0IHRoZSB0b3AsIGVkaXQgTUFKT1JfVkVSU0lPTiBhbmQgTUlOT1JfVkVSU0lPTiwKLWFuZCBjaGVjayB0aGF0IERFU1RESVIgbWFrZXMgc2Vuc2UuIFRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgaW5zdGFsbGVkCi1pbnNpZGUgUHl0aG9uSURFLmFwcC4KLQotSW4gRG9jQnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zLCBzZXQgc2VsZi5kb3dubG9hZCB0byBUcnVlIGlmIHlvdSB3YW50IHRvCi1kb3dubG9hZCB0aGUgZG9jcy4gU2V0IGl0IHRvIEZhbHNlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBkb2NzIGZyb20KLXRoZSBzb3VyY2UgdHJlZSwgYnV0IHRoaXMgcmVxdWlyZXMgTGFUZXggYW5kIGxvdHMgb2Ygb3RoZXIgc3R1ZmYuCi1Eb2FibGUsIGJ1dCBub3QgZWFzeS4KLQotU2Vjb25kLCBpZiB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGUgZG9jcyB5b3UgbWF5IG5lZWQgdG8gZG8gYSBjb3VwbGUKLW1vcmUgZWRpdHMuIFRoZSB3YXkgdGhlIGRvY3MgYXJlIHBhY2thZ2VkIHdpbGwgb2Z0ZW4gY2hhbmdlIGJldHdlZW4KLW1ham9yIHJlbGVhc2VzLiBGaWRkbGUgRG9jQnVpbGQuZG93bmxvYWREb2NzIHRvIG1ha2UgaXQgZG8gdGhlIHJpZ2h0Ci10aGluZyAoZG93bmxvYWQgdGhlIGRvY3MgZnJvbSBweXRob24ub3JnLCB1bnBhY2sgdGhlbSwgcmVuYW1lIHRoZQotZGlyZWN0b3J5IHRvICJidWlsZC9odG1sIikuCi0KLUFmdGVyIHRoZXNlIGVkaXRzIHlvdSBzaG91bGQgYmUgcmVhZHkgdG8gcm9sbC4gInB5dGhvbncgc2V0dXAucHkgYnVpbGQiCi1zaG91bGQgZG93bmxvYWQgYW5kIHVucGFjayAob3IgYnVpbGQpIHRoZSBkb2NzLiBOZXh0LCBpdCB3aWxsIGRvIHNvbWUKLW1hZ2ljIHRvIG1ha2UgdGhlIGRvY3MgaW5kZXhhYmxlLiBGaW5hbGx5LCBpdCB3aWxsIHJ1biB0aGUgQXBwbGUgSGVscAotSW5kZXhpbmcgVG9vbC4gKFRoaXMgbGFzdCBzdGVwIGlzIHRoZSByZWFzb24geW91IG11c3QgdXNlICJweXRob253IiBhcwotb3Bwb3NlZCB0byAicHl0aG9uIikuIFVzdWFsbHkgaXQgd2lsbCB0aW1lIG91dCB3aGlsZSB3YWl0aW5nIGZvciBBSElUIHRvCi1kbyBpdHMgd29yay4gV2FpdCB1bnRpbCBBSElUIGlzIGRvbmUuCi0KLU5vdyB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCB3aXRoICJweXRob24gc2V0dXAucHkgaW5zdGFsbCIuCi0KLUFmdGVyIHRoaXMgaXMgZG9uZSB0ZXN0IHlvdXIgd29yay4gRmlyZSB1cCBQeXRob25JREUsIGFuZCBjaGVjayB0aGF0Ci1IZWxwLT5QeXRob24gRG9jdW1lbnRhdGlvbiBicmluZ3MgdXAgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIEhlbHAgVmlld2VyLgotQWxzbyBvcGVuIGFuIElERSBlZGl0IHdpbmRvdywgdHlwZSBzb21ldGhpbmcgbGlrZSAiaW1wb3J0IHN5cyIsIHNlbGVjdAotImltcG9ydCIsIGFuZCB1c2UgSGVscC0+TG9va3VwIGluIFB5dGhvbiBEb2N1bWVudGF0aW9uIHRvIGNoZWNrIHRoYXQgdGhlCi1pbmRleCBoYXMgYmVlbiBnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weSBiL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTE1MmMuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0jIEJ1aWxkIGFuZCBpbnN0YWxsIGFuIEFwcGxlIEhlbHAgVmlld2VyIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgUHl0aG9uCi0jIGRvY3VtZW50YXRpb24gaW50byB0aGUgZnJhbWV3b3JrLgotIyBDb2RlIGJ5IEJpbGwgRmFuY2hlciwgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgYnkgSmFjayBKYW5zZW4uCi0jCi0jIFlvdSBtdXN0IHJ1biB0aGlzIGFzIGEgdHdvLXN0ZXAgcHJvY2VzcwotIyAxLiBweXRob24gc2V0dXBEb2NzLnB5IGJ1aWxkCi0jIDIuIFdhaXQgZm9yIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2gKLSMgMy4gcHl0aG9uIHNldHVwRG9jcy5weSBpbnN0YWxsCi0jCi0jIFRvIGRvOgotIyAtIHRlc3Qgd2hldGhlciB0aGUgZG9jcyBhcmUgYXZhaWxhYmxlIGxvY2FsbHkgYmVmb3JlIGRvd25sb2FkaW5nCi0jIC0gZml4IGJ1aWxkRG9jc0Zyb21Tb3VyY2UKLSMgLSBHZXQgZG9jdW1lbnRhdGlvbiB2ZXJzaW9uIGZyb20gc3lzLnZlcnNpb24sIGZhbGxiYWNrIHRvIDIuMi4xCi0jIC0gU2VlIGlmIHdlIGNhbiBzb21laG93IGRldGVjdCB0aGF0IEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBpcyBmaW5pc2hlZAotIyAtIGRhdGFfZmlsZXMgdG8gc2V0dXAoKSBkb2Vzbid0IHNlZW0gdGhlIHJpZ2h0IHdheSB0byBwYXNzIHRoZSBhcmd1bWVudHMKLSMKLWltcG9ydCBzeXMsIG9zLCByZQotZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkIGltcG9ydCBidWlsZAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgY29weV9maWxlCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnLCBkZXBfdXRpbAotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hhbmdlX3Jvb3QKLWltcG9ydCBIZWxwSW5kZXhpbmdUb29sCi1pbXBvcnQgQ2FyYm9uLkZpbGUKLWltcG9ydCB0aW1lCi0KLU1BSk9SX1ZFUlNJT049JzIuNCcKLU1JTk9SX1ZFUlNJT049JzIuNC4xJwotREVTVERJUj0nL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tJXMvUHl0aG9uSURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9QeXRob25Eb2N1bWVudGF0aW9uJyAlIE1BSk9SX1ZFUlNJT04KLQotY2xhc3MgRG9jQnVpbGQoYnVpbGQpOgotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBOb25lCi0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5kb3dubG9hZCA9IDEKLSAgICAgICAgc2VsZi5kb2NfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT04gIyBPbmx5IG5lZWRlZCBpZiBkb3dubG9hZCBpcyB0cnVlCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2h0bWwgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdodG1sJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnUHl0aG9uRG9jdW1lbnRhdGlvbicpCi0KLSAgICBkZWYgc3Bhd24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzcGF3bihhcmdzLCAxLCAgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0KLSAgICBkZWYgZG93bmxvYWREb2NzKHNlbGYpOgotICAgICAgICB3b3JrZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgIyBYWFggTm90ZTogdGhlIG5leHQgc3RyaW5ncyBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uCi0gICAgICAgIHVybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi9kb2MvJXMvaHRtbC0lcy50YXIuYnoyJyAlIFwKLSAgICAgICAgICAgICAgICAoc2VsZi5kb2NfdmVyc2lvbixzZWxmLmRvY192ZXJzaW9uKQotICAgICAgICB0YXJmaWxlID0gJ2h0bWwtJXMudGFyLmJ6MicgJSBzZWxmLmRvY192ZXJzaW9uCi0gICAgICAgIGRpcm5hbWUgPSAnUHl0aG9uLURvY3MtJXMnICUgc2VsZi5kb2NfdmVyc2lvbgotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVzOiBhbHJlYWR5IGV4aXN0cywgcGxlYXNlIHJlbW92ZSBhbmQgdHJ5IGFnYWluJyAlIHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLnNwYXduKCdjdXJsJywnLU8nLCB1cmwpCi0gICAgICAgIHNlbGYuc3Bhd24oJ3RhcicsICcteGpmJywgdGFyZmlsZSkKLSAgICAgICAgb3MucmVuYW1lKGRpcm5hbWUsICdodG1sJykKLSAgICAgICAgb3MuY2hkaXIod29ya2RpcikKLSMjICAgICAgICBwcmludCAiKiogUGxlYXNlIHVucGFjayAlcyIgJSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCB0YXJmaWxlKQotIyMgICAgICAgIHByaW50ICIqKiBVbnBhY2sgdGhlIGZpbGVzIGludG8gJXMiICUgc2VsZi5idWlsZF9odG1sCi0jIyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiWW91IG5lZWQgdG8gdW5wYWNrIHRoZSBkb2NzIG1hbnVhbGx5IgotCi0gICAgZGVmIGJ1aWxkRG9jc0Zyb21Tb3VyY2Uoc2VsZik6Ci0gICAgICAgIHNyY2RpciA9ICcuLi8uLi8uLicKLSAgICAgICAgZG9jZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgJ0RvYycpCi0gICAgICAgIGh0bWxkaXIgPSBvcy5wYXRoLmpvaW4oZG9jZGlyLCAnaHRtbCcpCi0gICAgICAgIHNwYXduKCgnbWFrZScsJy0tZGlyZWN0b3J5JywgZG9jZGlyLCAnaHRtbCcpLCAxLCBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9odG1sKQotICAgICAgICBjb3B5X3RyZWUoaHRtbGRpciwgc2VsZi5idWlsZF9odG1sKQotCi0gICAgZGVmIGVuc3VyZUh0bWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgaWYgc2VsZi5kb3dubG9hZDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvd25sb2FkRG9jcygpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYnVpbGREb2NzRnJvbVNvdXJjZSgpCi0KLSAgICBkZWYgaGFja0luZGV4KHNlbGYpOgotICAgICAgICBpbmRfaHRtbCA9ICdpbmRleC5odG1sJwotICAgICAgICAjcHJpbnQgJ3NlbGYuYnVpbGRfZGVzdCA9Jywgc2VsZi5idWlsZF9kZXN0Ci0gICAgICAgIGhhY2tlZEluZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBpbmRfaHRtbCksJ3cnKQotICAgICAgICBvcmlnSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsaW5kX2h0bWwpKQotICAgICAgICByID0gcmUuY29tcGlsZSgnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uKjwvc3R5bGU+JywgcmUuRE9UQUxMKQotICAgICAgICBoYWNrZWRJbmRleC53cml0ZShyLnN1YignPE1FVEEgTkFNRT0iQXBwbGVUaXRsZSIgQ09OVEVOVD0iUHl0aG9uIERvY3VtZW50YXRpb24iPicsb3JpZ0luZGV4LnJlYWQoKSkpCi0KLSAgICBkZWYgaGFja0ZpbGUoc2VsZixkLGYpOgotICAgICAgICBvcmlnUGF0aCA9IG9zLnBhdGguam9pbihkLGYpCi0gICAgICAgIGFzc2VydChvcmlnUGF0aFs6bGVuKHNlbGYuYnVpbGRfaHRtbCldID09IHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3V0UGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGRbbGVuKHNlbGYuYnVpbGRfaHRtbCkrMTpdLCBmKQotICAgICAgICAobmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZikKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihvcmlnUGF0aCk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChvdXRQYXRoKQotICAgICAgICBlbGlmIGV4dCA9PSAnLmh0bWwnOgotICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOiBwcmludCgnaGFja2luZyAlcyB0byAlcycgJSAob3JpZ1BhdGgsb3V0UGF0aCkpCi0gICAgICAgICAgICBoYWNrZWRGaWxlID0gZmlsZShvdXRQYXRoLCAndycpCi0gICAgICAgICAgICBvcmlnRmlsZSA9IGZpbGUob3JpZ1BhdGgsJ3InKQotICAgICAgICAgICAgaGFja2VkRmlsZS53cml0ZShzZWxmLnIuc3ViKCc8ZGw+PGR0PjxkZD4nLCBvcmlnRmlsZS5yZWFkKCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29weV9maWxlKG9yaWdQYXRoLCBvdXRQYXRoKQotCi0gICAgZGVmIGhhY2tIdG1sKHNlbGYpOgotICAgICAgICBzZWxmLnIgPSByZS5jb21waWxlKCc8ZGw+PGRkPicpCi0gICAgICAgIG9zLndhbGsoc2VsZi5idWlsZF9odG1sLCBzZWxmLnZpc2l0LCBOb25lKQotCi0gICAgZGVmIHZpc2l0KHNlbGYsIGR1bW15LCBkaXJuYW1lLCBmaWxlbmFtZXMpOgotICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6Ci0gICAgICAgICAgICBzZWxmLmhhY2tGaWxlKGRpcm5hbWUsIGYpCi0KLSAgICBkZWYgbWFrZUhlbHBJbmRleChzZWxmKToKLSAgICAgICAgYXBwID0gJy9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAnCi0gICAgICAgIHNlbGYuc3Bhd24oJ29wZW4nLCAnLWEnLCBhcHAgLCBzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgIHByaW50KCJQbGVhc2Ugd2FpdCB1bnRpbCBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgZmluaXNoZXMgYmVmb3JlIGluc3RhbGxpbmciKQotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9IEhlbHBJbmRleGluZ1Rvb2wuSGVscEluZGV4aW5nVG9vbChzdGFydD0xKQotICAgICAgICBhcHAub3BlbihDYXJib24uRmlsZS5GU1NwZWMoc2VsZi5idWlsZF9kZXN0KSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIHN0YXJ0Li4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLmVuc3VyZUh0bWwoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHNvdXJjZSBmb2xkZXIgZm9yIGRvY3VtZW50YXRpb24uIikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBpZiBkZXBfdXRpbC5uZXdlcihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLCdpbmRleC5odG1sJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsJ2luZGV4Lmh0bWwnKSk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgICAgICBzZWxmLmhhY2tIdG1sKCkKLSAgICAgICAgICAgIHNlbGYuaGFja0luZGV4KCkKLSAgICAgICAgICAgIHNlbGYubWFrZUhlbHBJbmRleCgpCi0KLWNsYXNzIEFIVkRvY0luc3RhbGwoQ29tbWFuZCk6Ci0gICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBBcHBsZSBIZWxwIFZpZXdlciBodG1sIGZpbGVzIgotICAgIHVzZXJfb3B0aW9ucyA9IFsoJ2luc3RhbGwtZG9jPScsICdkJywKLSAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gaW5zdGFsbCBIVE1MIHRyZWUnKSwKLSAgICAgICAgICAgICAoJ3Jvb3Q9JywgTm9uZSwKLSAgICAgICAgICAgICAiaW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5IiksCi0gICAgICAgICAgICBdCi0KLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBOb25lCi0gICAgICAgIHNlbGYucHJlZml4ID0gTm9uZQotICAgICAgICBzZWxmLnJvb3QgPSBOb25lCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2luc3RhbGwnLAotICAgICAgICAgICAgICAgICgncHJlZml4JywgJ3ByZWZpeCcpLAotICAgICAgICAgICAgICAgICgncm9vdCcsICdyb290JykpCi0jICAgICAgICAgICAgICAgaW1wb3J0IHBkYiA7IHBkYi5zZXRfdHJhY2UoKQotICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBidWlsZF9jbWQuYnVpbGRfZGVzdAotICAgICAgICBpZiBzZWxmLmluc3RhbGxfZG9jIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gb3MucGF0aC5qb2luKHNlbGYucHJlZml4LCBERVNURElSKQotICAgICAgICBwcmludCgnSU5TVEFMTCcsIHNlbGYuYnVpbGRfZGVzdCwgJy0+Jywgc2VsZi5pbnN0YWxsX2RvYykKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIEluc3RhbGxlciIpCi0gICAgICAgIGluc3Rsb2MgPSBzZWxmLmluc3RhbGxfZG9jCi0gICAgICAgIGlmIHNlbGYucm9vdDoKLSAgICAgICAgICAgIGluc3Rsb2MgPSBjaGFuZ2Vfcm9vdChzZWxmLnJvb3QsIGluc3Rsb2MpCi0gICAgICAgIHNlbGYubWtwYXRoKGluc3Rsb2MpCi0gICAgICAgIGNvcHlfdHJlZShzZWxmLmJ1aWxkX2Rlc3QsIGluc3Rsb2MpCi0gICAgICAgIHByaW50KCJJbnN0YWxsYXRpb24gY29tcGxldGUiKQotCi1kZWYgbXVuZ2VWZXJzaW9uKGluZmlsZSwgb3V0ZmlsZSk6Ci0gICAgaSA9IGZpbGUoaW5maWxlLCdyJykKLSAgICBvID0gZmlsZShvdXRmaWxlLCd3JykKLSAgICBvLndyaXRlKHJlLnN1YignXCRcKFZFUlNJT05cKScsc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJyksaS5yZWFkKCkpKQotICAgIGkuY2xvc2UoKQotICAgIG8uY2xvc2UoKQotCi1kZWYgbWFpbigpOgotICAgICMgdHVybiBvZmYgd2FybmluZ3Mgd2hlbiBkZXByZWNhdGVkIG1vZHVsZXMgYXJlIGltcG9ydGVkCi0jIyAgICAgIGltcG9ydCB3YXJuaW5ncwotIyMgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIixjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCi0gICAgc2V0dXAobmFtZSA9ICdEb2N1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHZlcnNpb24gPSAnJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sCi0gICAgICAgICAgICBjbWRjbGFzcyA9IHsnaW5zdGFsbF9kYXRhJzpBSFZEb2NJbnN0YWxsLCAnYnVpbGQnOkRvY0J1aWxkfSwKLSAgICAgICAgICAgIGRhdGFfZmlsZXMgPSBbJ2R1bW15J10sCi0gICAgICAgICAgICApCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weSBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CmluZGV4IDZjYzEzMGYuLmY1Njc5ZDMgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CisrKyBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CkBAIC0yNzAsNyArMjcwLDcgQEAKIGRlbCBfX2xvYWQKICIiIgogCi1NQVlNSVNTX01PRFVMRVMgPSBbJ21hYycsICdvczInLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKK01BWU1JU1NfTU9EVUxFUyA9IFsnbWFjJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCiAgICAgJ3dpbjMyYXBpJywgJ2NlJywgJ193aW5yZWcnLCAnbnR1cmwycGF0aCcsICdzaXRlY3VzdG9taXplJywKICAgICAnb3JnLnB5dGhvbi5jb3JlJywgJ3Jpc2NvcycsICdyaXNjb3NlbnZpcm9uJywgJ3Jpc2Nvc3BhdGgnCiBdCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkgYi9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExZDk3NgotLS0gL2Rldi9udWxsCisrKyBiL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQpAQCAtMCwwICsxLDk0IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKK2Zyb20gQ29jb2EgaW1wb3J0IE5TTXV0YWJsZURpY3Rpb25hcnksIE5TTXV0YWJsZUFycmF5LCBOU1N0cmluZywgTlNEYXRlCitmcm9tIENvY29hIGltcG9ydCBOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24sIE5TUHJvcGVydHlMaXN0T3BlblN0ZXBGb3JtYXQKK2Zyb20gQ29jb2EgaW1wb3J0IE5TUHJvcGVydHlMaXN0WE1MRm9ybWF0X3YxXzAsIE5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAKK2Zyb20gQ29jb2EgaW1wb3J0IENGVVVJRENyZWF0ZUZyb21TdHJpbmcsIE5TTnVsbCwgTlNVVUlELCBDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEKK2Zyb20gQ29jb2EgaW1wb3J0IE5TVVJMCisKK2ltcG9ydCBkYXRldGltZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2ltcG9ydCBiaW5hc2NpaQorCitGT1JNQVRTPVsKKyMgICAgKCdvcGVuc3RlcCcsIE5TUHJvcGVydHlMaXN0T3BlblN0ZXBGb3JtYXQpLAorICAgICgncGxpc3RsaWIuRk1UX1hNTCcsIE5TUHJvcGVydHlMaXN0WE1MRm9ybWF0X3YxXzApLAorICAgICgncGxpc3RsaWIuRk1UX0JJTkFSWScsIE5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzApLAorXQorCitkZWYgbnNzdHIodmFsdWUpOgorICAgIHJldHVybiBOU1N0cmluZy5hbGxvYygpLmluaXRXaXRoU3RyaW5nXyh2YWx1ZSkKKworCitkZWYgbWFpbigpOgorICAgIHBsID0gT3JkZXJlZERpY3QoKQorCisgICAgc2Vjb25kcyA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDQsIDEwLCAyNiwgMTAsIDMzLCAzMywgdHppbmZvPWRhdGV0aW1lLnRpbWV6b25lKGRhdGV0aW1lLnRpbWVkZWx0YSgwKSkpLnRpbWVzdGFtcCgpCisgICAgcGxbbnNzdHIoJ2FEYXRlJyldID0gTlNEYXRlLmRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwXyhzZWNvbmRzKQorCisgICAgcGxbbnNzdHIoJ2FEaWN0JyldID0gZCA9IE9yZGVyZWREaWN0KCkKKyAgICBkW25zc3RyKCdhRmFsc2VWYWx1ZScpXSA9IEZhbHNlCisgICAgZFtuc3N0cignYVRydWVWYWx1ZScpXSA9IFRydWUKKyAgICBkW25zc3RyKCdhVW5pY29kZVZhbHVlJyldID0gIk1ceGU0c3NpZywgTWFceGRmIgorICAgIGRbbnNzdHIoJ2Fub3RoZXJTdHJpbmcnKV0gPSAiPGhlbGxvICYgJ2hpJyB0aGVyZSE+IgorICAgIGRbbnNzdHIoJ2RlZXBlckRpY3QnKV0gPSBkZCA9IE9yZGVyZWREaWN0KCkKKyAgICBkZFtuc3N0cignYScpXSA9IDE3CisgICAgZGRbbnNzdHIoJ2InKV0gPSAzMi41CisgICAgZGRbbnNzdHIoJ2MnKV0gPSBhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZCgxKQorICAgIGEuYXBwZW5kKDIpCisgICAgYS5hcHBlbmQobnNzdHIoJ3RleHQnKSkKKworICAgIHBsW25zc3RyKCdhRmxvYXQnKV0gPSAwLjUKKworICAgIHBsW25zc3RyKCdhTGlzdCcpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKG5zc3RyKCdBJykpCisgICAgYS5hcHBlbmQobnNzdHIoJ0InKSkKKyAgICBhLmFwcGVuZCgxMikKKyAgICBhLmFwcGVuZCgzMi41KQorICAgIGFhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZChhYSkKKyAgICBhYS5hcHBlbmQoMSkKKyAgICBhYS5hcHBlbmQoMikKKyAgICBhYS5hcHBlbmQoMykKKworICAgIHBsW25zc3RyKCdhU3RyaW5nJyldID0gbnNzdHIoJ0Rvb2RhaCcpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eURpY3QnKV0gPSBOU011dGFibGVEaWN0aW9uYXJ5LmFsbG9jKCkuaW5pdCgpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eUxpc3QnKV0gPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorCisgICAgcGxbbnNzdHIoJ2FuSW50JyldID0gNzI4CisKKyAgICBwbFtuc3N0cignbmVzdGVkRGF0YScpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKGInJyc8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzJycnKQorCisKKyAgICBwbFtuc3N0cignc29tZURhdGEnKV0gPSBiJzxiaW5hcnkgZ3Vuaz4nCisKKyAgICBwbFtuc3N0cignc29tZU1vcmVEYXRhJyldID0gYicnJzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDMnJycKKworICAgIHBsW25zc3RyKCdceGM1YmVucmFhJyldID0gbnNzdHIoIlRoYXQgd2FzIGEgdW5pY29kZSBrZXkuIikKKworICAgIHByaW50KCJURVNUREFUQT17IikKKyAgICBmb3IgZm10X25hbWUsIGZtdF9rZXkgaW4gRk9STUFUUzoKKyAgICAgICAgZGF0YSwgZXJyb3IgPSBOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24uZGF0YVdpdGhQcm9wZXJ0eUxpc3RfZm9ybWF0X29wdGlvbnNfZXJyb3JfKAorICAgICAgICAgICAgcGwsIGZtdF9rZXksIDAsIE5vbmUpCisgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJDYW5ub3Qgc2VyaWFsaXplIiwgZm10X25hbWUsIGVycm9yKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiICAgICVzOiBiaW5hc2NpaS5hMmJfYmFzZTY0KGInJydcbiAgICAgICAgJXMnJycpLCIlKGZtdF9uYW1lLCBfZW5jb2RlX2Jhc2U2NChieXRlcyhkYXRhKSkuZGVjb2RlKCdhc2NpaScpWzotMV0pKQorCisgICAgcHJpbnQoIn0iKQorICAgIHByaW50KCkKKworZGVmIF9lbmNvZGVfYmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NjApOgorICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMworICAgIHBpZWNlcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKKyAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KKyAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKKyAgICByZXR1cm4gYicgICAgICAgICcuam9pbihwaWVjZXMpCisKK21haW4oKQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJlLmluIGIvTWFrZWZpbGUucHJlLmluCmluZGV4IGE2YWE5NzUuLmY4NDNhYTUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnByZS5pbgorKysgYi9NYWtlZmlsZS5wcmUuaW4KQEAgLTEyNyw3ICsxMjcsNiBAQAogIyBTeW1ib2xzIHVzZWQgZm9yIHVzaW5nIHNoYXJlZCBsaWJyYXJpZXMKIFNITElCX1NVRkZJWD0JQFNITElCX1NVRkZJWEAKIEVYVF9TVUZGSVg9CUBFWFRfU1VGRklYQAotU089CQkkKFNITElCX1NVRkZJWCkKIExEU0hBUkVEPQlATERTSEFSRURAICQoUFlfTERGTEFHUykKIEJMRFNIQVJFRD0JQEJMRFNIQVJFREAgJChQWV9MREZMQUdTKQogTERDWFhTSEFSRUQ9CUBMRENYWFNIQVJFREAKQEAgLTE0OSwxMiArMTQ4LDIxIEBACiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9QENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRACiBARVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVEBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAKKyMgT3B0aW9uIHRvIGluc3RhbGwgdG8gc3RyaXAgYmluYXJpZXMKK1NUUklQRkxBRz0tcworCisjIEZsYWdzIHRvIGxpcG8gdG8gcHJvZHVjZSBhIDMyLWJpdC1vbmx5IHVuaXZlcnNhbCBleGVjdXRhYmxlCitMSVBPXzMyQklUX0ZMQUdTPUBMSVBPXzMyQklUX0ZMQUdTQAorCiAjIE9wdGlvbnMgdG8gZW5hYmxlIHByZWJpbmRpbmcgKGZvciBmYXN0IHN0YXJ0dXAgcHJpb3IgdG8gTWFjIE9TIFggMTAuMykKIE9USEVSX0xJQlRPT0xfT1BUPUBPVEhFUl9MSUJUT09MX09QVEAKIAogIyBFbnZpcm9ubWVudCB0byBydW4gc2hhcmVkIHB5dGhvbiB3aXRob3V0IGluc3RhbGxlZCBsaWJyYXJpZXMKIFJVTlNIQVJFRD0gICAgICAgQFJVTlNIQVJFREAKIAorIyBlbnN1cmVwaXAgb3B0aW9ucworRU5TVVJFUElQPSAgICAgIEBFTlNVUkVQSVBACisKICMgTW9kZXMgZm9yIGRpcmVjdG9yaWVzLCBleGVjdXRhYmxlcyBhbmQgZGF0YSBmaWxlcyBjcmVhdGVkIGJ5IHRoZQogIyBpbnN0YWxsIHByb2Nlc3MuICBEZWZhdWx0IHRvIHVzZXItb25seS13cml0YWJsZSBmb3IgYWxsIGZpbGUgdHlwZXMuCiBESVJNT0RFPQk3NTUKQEAgLTIxNiw2ICsyMjQsMTIgQEAKIFBST0ZJTEVfVEFTSz0JJChzcmNkaXIpL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weSAtbiAyIC0td2l0aC1nYyAtLXdpdGgtc3lzY2hlY2sKICNQUk9GSUxFX1RBU0s9CSQoc3JjZGlyKS9MaWIvdGVzdC9yZWdydGVzdC5weQogCisjIHJlcG9ydCBmaWxlcyBmb3IgZ2NvdiAvIGxjb3YgY292ZXJhZ2UgcmVwb3J0CitDT1ZFUkFHRV9JTkZPPQkkKGFic19idWlsZGRpcikvY292ZXJhZ2UuaW5mbworQ09WRVJBR0VfUkVQT1JUPSQoYWJzX2J1aWxkZGlyKS9sY292LXJlcG9ydAorQ09WRVJBR0VfUkVQT1JUX09QVElPTlM9LS1uby1icmFuY2gtY292ZXJhZ2UgLS10aXRsZSAiQ1B5dGhvbiBsY292IHJlcG9ydCIKKworCiAjID09PSBEZWZpbml0aW9ucyBhZGRlZCBieSBtYWtlc2V0dXAgPT09CiAKIApAQCAtMzYxLDYgKzM3NSw3IEBACiAJCVB5dGhvbi9weWFyZW5hLm8gXAogCQlQeXRob24vcHljdHlwZS5vIFwKIAkJUHl0aG9uL3B5ZnBlLm8gXAorCQlQeXRob24vcHloYXNoLm8gXAogCQlQeXRob24vcHltYXRoLm8gXAogCQlQeXRob24vcHlzdGF0ZS5vIFwKIAkJUHl0aG9uL3B5dGhvbnJ1bi5vIFwKQEAgLTQ0NCw3ICs0NTksNyBAQAogCiAjIERlZmF1bHQgdGFyZ2V0CiBhbGw6CQlidWlsZF9hbGwKLWJ1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZAorYnVpbGRfYWxsOgkkKEJVSUxEUFlUSE9OKSBvbGRzaGFyZWRtb2RzIHNoYXJlZG1vZHMgZ2RiaG9va3MgTW9kdWxlcy9fdGVzdGVtYmVkIHB5dGhvbi1jb25maWcKIAogIyBDb21waWxlIGEgYmluYXJ5IHdpdGggZ2NjIHByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbi4KIHByb2ZpbGUtb3B0OgpAQCAtNDY4LDExICs0ODMsNTQgQEAKIGJ1aWxkX2FsbF91c2VfcHJvZmlsZToKIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS1jb3JyZWN0aW9uIgogCisjIENvbXBpbGUgYW5kIHJ1biB3aXRoIGdjb3YKKy5QSE9OWT1jb3ZlcmFnZSBjb3ZlcmFnZS1sY292IGNvdmVyYWdlLXJlcG9ydAogY292ZXJhZ2U6CiAJQGVjaG8gIkJ1aWxkaW5nIHdpdGggc3VwcG9ydCBmb3IgY292ZXJhZ2UgY2hlY2tpbmc6IgotCSQoTUFLRSkgY2xlYW4KKwkkKE1BS0UpIGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCSQoTUFLRSkgYWxsIENGTEFHUz0iJChDRkxBR1MpIC1PMCAtcGcgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIiBMSUJTPSIkKExJQlMpIC1sZ2NvdiIKIAorY292ZXJhZ2UtbGNvdjoKKwlAZWNobyAiQ3JlYXRpbmcgQ292ZXJhZ2UgSFRNTCByZXBvcnQgd2l0aCBMQ09WOiIKKwlAcm0gLWYgJChDT1ZFUkFHRV9JTkZPKQorCUBybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCisJQGxjb3YgLS1jYXB0dXJlIC0tZGlyZWN0b3J5ICQoYWJzX2J1aWxkZGlyKSBcCisJICAgIC0tYmFzZS1kaXJlY3RvcnkgJChyZWFscGF0aCAkKGFic19idWlsZGRpcikpIFwKKwkgICAgLS1wYXRoICQocmVhbHBhdGggJChhYnNfc3JjZGlyKSkgXAorCSAgICAtLW91dHB1dC1maWxlICQoQ09WRVJBR0VfSU5GTykKKwk6ICMgcmVtb3ZlIDNyZCBwYXJ0eSBtb2R1bGVzIGFuZCBzeXN0ZW0gaGVhZGVycworCUBsY292IC0tcmVtb3ZlICQoQ09WRVJBR0VfSU5GTykgXAorCSAgICAnKi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpKi8qJyBcCisJICAgICcqL01vZHVsZXMvX3NoYTMva2VjY2FrLyonIFwKKwkgICAgJyovTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy8qJyBcCisJICAgICcqL01vZHVsZXMvZXhwYXQvKicgXAorCSAgICAnKi9Nb2R1bGVzL3psaWIvKicgXAorCSAgICAnKi9JbmNsdWRlLyonIFwKKwkgICAgJy91c3IvaW5jbHVkZS8qJyBcCisJICAgICcvdXNyL2xvY2FsL2luY2x1ZGUvKicgXAorCSAgICAtLW91dHB1dC1maWxlICQoQ09WRVJBR0VfSU5GTykKKwlAZ2VuaHRtbCAkKENPVkVSQUdFX0lORk8pIC0tb3V0cHV0LWRpcmVjdG9yeSAkKENPVkVSQUdFX1JFUE9SVCkgXAorCSAgICAkKENPVkVSQUdFX1JFUE9SVF9PUFRJT05TKQorCUBlY2hvCisJQGVjaG8gImxjb3YgcmVwb3J0IGF0ICQoQ09WRVJBR0VfUkVQT1JUKS9pbmRleC5odG1sIgorCUBlY2hvCisKK2NvdmVyYWdlLXJlcG9ydDoKKwk6ICMgZm9yY2UgcmVidWlsZGluZyBvZiBwYXJzZXIgYW5kIGltcG9ydGxpYgorCUB0b3VjaCAkKEdSQU1NQVJfSU5QVVQpCisJQHRvdWNoICQoc3JjZGlyKS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKKwk6ICMgYnVpbGQgd2l0aCBjb3ZlcmFnZSBpbmZvCisJJChNQUtFKSBjb3ZlcmFnZQorCTogIyBydW4gdGVzdHMsIGlnbm9yZSBmYWlsdXJlcworCSQoVEVTVFJVTk5FUikgJChURVNUT1BUUykgfHwgdHJ1ZQorCTogIyBidWlsZCBsY292IHJlcG9ydAorCSQoTUFLRSkgY292ZXJhZ2UtbGNvdgorCisjIFJ1biAiQXJndW1lbnQgQ2xpbmljIiBvdmVyIGFsbCBzb3VyY2UgZmlsZXMKKyMgKGRlcGVuZHMgb24gcHl0aG9uIGhhdmluZyBhbHJlYWR5IGJlZW4gYnVpbHQpCisuUEhPTlk9Y2xpbmljCitjbGluaWM6ICQoQlVJTERQWVRIT04pCisJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLi9Ub29scy9jbGluaWMvY2xpbmljLnB5IC0tbWFrZQogCiAjIEJ1aWxkIHRoZSBpbnRlcnByZXRlcgogJChCVUlMRFBZVEhPTik6CU1vZHVsZXMvcHl0aG9uLm8gJChMSUJSQVJZKSAkKExETElCUkFSWSkgJChQWTNMSUJSQVJZKQpAQCAtNjQ2LDYgKzcwNCw4IEBACiBNb2R1bGVzL190ZXN0ZW1iZWQubzogJChzcmNkaXIpL01vZHVsZXMvX3Rlc3RlbWJlZC5jCiAJJChNQUlOQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL190ZXN0ZW1iZWQuYwogCitNb2R1bGVzL19zcmUubzogJChzcmNkaXIpL01vZHVsZXMvX3NyZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3NyZS5oICQoc3JjZGlyKS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaCAkKHNyY2RpcikvTW9kdWxlcy9zcmVfbGliLmgKKwogTW9kdWxlcy9wb3NpeG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKIAogTW9kdWxlcy9ncnBtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvZ3JwbW9kdWxlLmMgJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuaApAQCAtNzEzLDI3ICs3NzMsMzEgQEAKIAkJCQkkKHNyY2RpcikvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCiAKIEJZVEVTVFJfREVQUyA9IFwKLQkJJChzcmNkaXIpL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY3R5cGUuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9lcS5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAogCi1VTklDT0RFX0RFUFMgPSAkKEJZVEVTVFJfREVQUykgXAorVU5JQ09ERV9ERVBTID0gXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAogCkBAIC03NTEsOSArODE1LDYgQEAKIAogUHl0aG9uL2NldmFsLm86ICQoT1BDT0RFVEFSR0VUU19IKSAkKHNyY2RpcikvUHl0aG9uL2NldmFsX2dpbC5oCiAKLVB5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5vOiAkKHNyY2RpcikvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMgXAotCQkJCSQoQllURVNUUl9ERVBTKQotCiBQeXRob24vZnJvemVuLm86IFB5dGhvbi9pbXBvcnRsaWIuaAogCiBPYmplY3RzL3R5cGVvYmplY3QubzogT2JqZWN0cy90eXBlc2xvdHMuaW5jCkBAIC04MjMsNiArODg0LDcgQEAKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHlkZWJ1Zy5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHllcnJvcnMuaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZnBlLmggXAorCQkkKHNyY2RpcikvSW5jbHVkZS9weWhhc2guaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5bWF0aC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHlnZXRvcHQuaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5bWFjcm8uaCBcCkBAIC05MDAsMTYgKzk2MiwzOCBAQAogCiBRVUlDS1RFU1RPUFRTPQkkKFRFU1RPUFRTKSAteCB0ZXN0X3N1YnByb2Nlc3MgdGVzdF9pbyB0ZXN0X2xpYjJ0bzMgXAogCQl0ZXN0X211bHRpYnl0ZWNvZGVjIHRlc3RfdXJsbGliMl9sb2NhbG5ldCB0ZXN0X2l0ZXJ0b29scyBcCi0JCXRlc3RfbXVsdGlwcm9jZXNzaW5nIHRlc3RfbWFpbGJveCB0ZXN0X3NvY2tldCB0ZXN0X3BvbGwgXAorCQl0ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrIHRlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduIFwKKwkJdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlciBcCisJCXRlc3RfbWFpbGJveCB0ZXN0X3NvY2tldCB0ZXN0X3BvbGwgXAogCQl0ZXN0X3NlbGVjdCB0ZXN0X3ppcGZpbGUgdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMKIHF1aWNrdGVzdDoJYWxsIHBsYXRmb3JtCiAJCSQoVEVTVFJVTk5FUikgJChRVUlDS1RFU1RPUFRTKQogCiAKLWluc3RhbGw6IGFsdGluc3RhbGwgYmluaW5zdGFsbCBtYW5pbnN0YWxsCitpbnN0YWxsOiBARlJBTUVXT1JLSU5TVEFMTEZJUlNUQCBjb21tb25pbnN0YWxsIGJpbmluc3RhbGwgbWFuaW5zdGFsbCBARlJBTUVXT1JLSU5TVEFMTExBU1RACisJaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNhc2UgJChFTlNVUkVQSVApIGluIFwKKwkJCXVwZ3JhZGUpIGVuc3VyZXBpcD0iLS11cGdyYWRlIiA7OyBcCisJCQlpbnN0YWxsfCopIGVuc3VyZXBpcD0iIiA7OyBcCisJCWVzYWM7IFwKKwkJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gZW5zdXJlcGlwIFwKKwkJCSQkZW5zdXJlcGlwIC0tcm9vdD0kKERFU1RESVIpLyA7IFwKKwlmaQogCi1hbHRpbnN0YWxsOglARlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUQCBhbHRiaW5pbnN0YWxsIGxpYmluc3RhbGwgaW5jbGluc3RhbGwgbGliYWluc3RhbGwgXAotICAgICAgICAgICAgICAgIHNoYXJlZGluc3RhbGwgb2xkc2hhcmVkaW5zdGFsbCBhbHRtYW5pbnN0YWxsIEBGUkFNRVdPUktBTFRJTlNUQUxMTEFTVEAKK2FsdGluc3RhbGw6IGNvbW1vbmluc3RhbGwKKwlpZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2FzZSAkKEVOU1VSRVBJUCkgaW4gXAorCQkJdXBncmFkZSkgZW5zdXJlcGlwPSItLWFsdGluc3RhbGwgLS11cGdyYWRlIiA7OyBcCisJCQlpbnN0YWxsfCopIGVuc3VyZXBpcD0iLS1hbHRpbnN0YWxsIiA7OyBcCisJCWVzYWM7IFwKKwkJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gZW5zdXJlcGlwIFwKKwkJCSQkZW5zdXJlcGlwIC0tcm9vdD0kKERFU1RESVIpLyA7IFwKKwlmaQorCitjb21tb25pbnN0YWxsOiAgQEZSQU1FV09SS0FMVElOU1RBTExGSVJTVEAgXAorCQlhbHRiaW5pbnN0YWxsIGxpYmluc3RhbGwgaW5jbGluc3RhbGwgbGliYWluc3RhbGwgXAorCQlzaGFyZWRpbnN0YWxsIG9sZHNoYXJlZGluc3RhbGwgYWx0bWFuaW5zdGFsbCBcCisJCUBGUkFNRVdPUktBTFRJTlNUQUxMTEFTVEAKIAogIyBJbnN0YWxsIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBieSBTZXR1cAogREVTVERJUlM9CSQoZXhlY19wcmVmaXgpICQoTElCRElSKSAkKEJJTkxJQkRFU1QpICQoREVTVFNIQVJFRCkKQEAgLTkzNCw3ICsxMDE4LDcgQEAKIAogIyBJbnN0YWxsIHRoZSBpbnRlcnByZXRlciB3aXRoICQoVkVSU0lPTikgYWZmaXhlZAogIyBUaGlzIGdvZXMgaW50byAkKGV4ZWNfcHJlZml4KQotYWx0YmluaW5zdGFsbDogJChCVUlMRFBZVEhPTikKK2FsdGJpbmluc3RhbGw6ICQoQlVJTERQWVRIT04pIEBGUkFNRVdPUktQWVRIT05XQAogCUBmb3IgaSBpbiAkKEJJTkRJUikgJChMSUJESVIpOyBcCiAJZG8gXAogCQlpZiB0ZXN0ICEgLWQgJChERVNURElSKSQkaTsgdGhlbiBcCkBAIC05NDMsMTQgKzEwMjcsMTggQEAKIAkJZWxzZQl0cnVlOyBcCiAJCWZpOyBcCiAJZG9uZQotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKEJVSUxEUFlUSE9OKSAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKSQoRVhFKQorCWlmIHRlc3QgIiQoUFlUSE9ORlJBTUVXT1JLRElSKSIgPSAibm8tZnJhbWV3b3JrIiA7IHRoZW4gXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJChCVUlMRFBZVEhPTikgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSk7IFwKKwllbHNlIFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBNYWMvcHl0aG9udyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKSQoRVhFKTsgXAorCWZpCiAJLWlmIHRlc3QgIiQoVkVSU0lPTikiICE9ICIkKExEVkVSU0lPTikiOyB0aGVuIFwKIAkJaWYgdGVzdCAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSkgLW8gLWggJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpOyBcCiAJCXRoZW4gcm0gLWYgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpOyBcCiAJCWZpOyBcCiAJCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSBweXRob24kKExEVkVSU0lPTikkKEVYRSkgcHl0aG9uJChWRVJTSU9OKSQoRVhFKSk7IFwKIAlmaQotCWlmIHRlc3QgLWYgJChMRExJQlJBUlkpOyB0aGVuIFwKKwlpZiB0ZXN0IC1mICQoTERMSUJSQVJZKSAmJiB0ZXN0ICIkKFBZVEhPTkZSQU1FV09SS0RJUikiID0gIm5vLWZyYW1ld29yayIgOyB0aGVuIFwKIAkJaWYgdGVzdCAtbiAiJChETExMSUJSQVJZKSIgOyB0aGVuIFwKIAkJCSQoSU5TVEFMTF9TSEFSRUQpICQoRExMTElCUkFSWSkgJChERVNURElSKSQoQklORElSKTsgXAogCQllbHNlIFwKQEAgLTk2NCw2ICsxMDUyLDEyIEBACiAJCWZpOyBcCiAJZWxzZQl0cnVlOyBcCiAJZmkKKwlpZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiIDsgdGhlbiBcCisJCXJtIC1mICQoREVTVERJUikkKEJJTkRJUilweXRob24kKFZFUlNJT04pLTMyJChFWEUpOyBcCisJCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSBcCisJCQktb3V0cHV0ICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKS0zMiQoRVhFKSBcCisJCQkkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSk7IFwKKwlmaQogCiBiaW5pbnN0YWxsOiBhbHRiaW5pbnN0YWxsCiAJLWlmIHRlc3QgLWYgJChERVNURElSKSQoQklORElSKS9weXRob24zJChFWEUpIC1vIC1oICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMyQoRVhFKTsgXApAQCAtOTg5LDYgKzEwODMsMTAgQEAKIAkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgMnRvMy0kKFZFUlNJT04pIDJ0bzMpCiAJLXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl2ZW52CiAJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIHB5dmVudi0kKFZFUlNJT04pIHB5dmVudikKKwlpZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiIDsgdGhlbiBcCisJCXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMy0zMiQoRVhFKTsgXAorCQkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgcHl0aG9uJChWRVJTSU9OKS0zMiQoRVhFKSBweXRob24zLTMyJChFWEUpKSBcCisJZmkKIAogIyBJbnN0YWxsIHRoZSB2ZXJzaW9uZWQgbWFudWFsIHBhZ2UKIGFsdG1hbmluc3RhbGw6CkBAIC0xMDQwLDggKzExMzgsMTEgQEAKIAkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQgXAogICAgICAgICAgICAgICAgIHRlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZSBcCiAgICAgICAgICAgICAgICAgdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdCBcCisJCWFzeW5jaW8gXAorCQl0ZXN0L3Rlc3RfYXN5bmNpbyBcCiAJCWNvbGxlY3Rpb25zIGNvbmN1cnJlbnQgY29uY3VycmVudC9mdXR1cmVzIGVuY29kaW5ncyBcCiAJCWVtYWlsIGVtYWlsL21pbWUgdGVzdC90ZXN0X2VtYWlsIHRlc3QvdGVzdF9lbWFpbC9kYXRhIFwKKwkJZW5zdXJlcGlwIGVuc3VyZXBpcC9fYnVuZGxlZCBcCiAJCWh0bWwganNvbiB0ZXN0L3Rlc3RfanNvbiBodHRwIGRibSB4bWxycGMgXAogCQlzcWxpdGUzIHNxbGl0ZTMvdGVzdCBcCiAJCWxvZ2dpbmcgY3N2IHdzZ2lyZWYgdXJsbGliIFwKQEAgLTExNTksMTAgKzEyNjAsMTkgQEAKIAlmaTsgXAogCWNkICQoc3JjZGlyKS9MaWIvJChQTEFURElSKTsgJChSVU5TSEFSRUQpIC4vcmVnZW4KIAotcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbiBNaXNjL3B5dGhvbi1jb25maWcuc2gKIAkjIFN1YnN0aXR1dGlvbiBoYXBwZW5zIGhlcmUsIGFzIHRoZSBjb21wbGV0ZWx5LWV4cGFuZGVkIEJJTkRJUgogCSMgaXMgbm90IGF2YWlsYWJsZSBpbiBjb25maWd1cmUKLQlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcKKwlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcucHkKKwkjIFJlcGxhY2UgbWFrZWZpbGUgY29tcGF0LiB2YXJpYWJsZSByZWZlcmVuY2VzIHdpdGggc2hlbGwgc2NyaXB0IGNvbXBhdC4gb25lczsgJChWQVIpIC0+ICR7VkFSfQorCXNlZCAtZSAncyxcJCQoXChbQS1aYS16MC05X10qXCkpLFwkJFx7XDFcfSxnJyA8IE1pc2MvcHl0aG9uLWNvbmZpZy5zaCA+cHl0aG9uLWNvbmZpZworCSMgT24gRGFyd2luLCBhbHdheXMgdXNlIHRoZSBweXRob24gdmVyc2lvbiBvZiB0aGUgc2NyaXB0LCB0aGUgc2hlbGwKKwkjIHZlcnNpb24gZG9lc24ndCB1c2UgdGhlIGNvbXBpbGVyIGN1c3RvbWl6YXRpb25zIHRoYXQgYXJlIHByb3ZpZGVkCisJIyBpbiBweXRob24gKF9vc3hfc3VwcG9ydC5weSkuCisJaWYgdGVzdCBgdW5hbWUgLXNgID0gRGFyd2luOyB0aGVuIFwKKwkJY3AgcHl0aG9uLWNvbmZpZy5weSBweXRob24tY29uZmlnOyBcCisJZmkKKwogCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZmlsZXMKIElOQ0xESVJTVE9NQUtFPSQoSU5DTFVERURJUikgJChDT05GSU5DTFVERURJUikgJChJTkNMVURFUFkpICQoQ09ORklOQ0xVREVQWSkKQEAgLTEyMjAsOCArMTMzMCw4IEBACiAJJChJTlNUQUxMX0RBVEEpIE1pc2MvcHl0aG9uLnBjICQoREVTVERJUikkKExJQlBDKS9weXRob24tJChWRVJTSU9OKS5wYwogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9Nb2R1bGVzL21ha2VzZXR1cCAkKERFU1RESVIpJChMSUJQTCkvbWFrZXNldHVwCiAJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL2luc3RhbGwtc2ggJChERVNURElSKSQoTElCUEwpL2luc3RhbGwtc2gKKwkkKElOU1RBTExfU0NSSVBUKSBweXRob24tY29uZmlnLnB5ICQoREVTVERJUikkKExJQlBMKS9weXRob24tY29uZmlnLnB5CiAJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKS1jb25maWcKLQlybSBweXRob24tY29uZmlnCiAJQGlmIFsgLXMgTW9kdWxlcy9weXRob24uZXhwIC1hIFwKIAkJImBlY2hvICQoTUFDSERFUCkgfCBzZWQgJ3MvXlwoLi4uXCkuKi9cMS8nYCIgPSAiYWl4IiBdOyB0aGVuIFwKIAkJZWNobzsgZWNobyAiSW5zdGFsbGluZyBzdXBwb3J0IGZpbGVzIGZvciBidWlsZGluZyBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZXMgb24gQUlYOiI7IFwKQEAgLTEzMDMsNyArMTQxMywxNCBAQAogZnJhbWV3b3JraW5zdGFsbGFwcHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbGFwcHMgREVTVERJUj0iJChERVNURElSKSIKIAotIyBUaGlzIGluc3RhbGwgdGhlIHVuaXggcHl0aG9uIGFuZCBweXRob253IHRvb2xzIGluIC91c3IvbG9jYWwvYmluCisjIEJ1aWxkIHRoZSBib290c3RyYXAgZXhlY3V0YWJsZSB0aGF0IHdpbGwgc3Bhd24gdGhlIGludGVycHJldGVyIGluc2lkZQorIyBhbiBhcHAgYnVuZGxlIHdpdGhpbiB0aGUgZnJhbWV3b3JrLiAgVGhpcyBhbGxvd3MgdGhlIGludGVycHJldGVyIHRvCisjIHJ1biBPUyBYIEdVSSBBUElzLgorZnJhbWV3b3JrcHl0aG9udzoKKwljZCBNYWMgJiYgJChNQUtFKSBweXRob253CisKKyMgVGhpcyBpbnN0YWxscyB0aGUgcHl0aG9uKiBhbmQgb3RoZXIgYmluIHN5bWxpbmtzIGluICRwcmVmaXgvYmluIG9yIGluCisjIGEgYmluIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgZnJhbWV3b3JrIHJvb3QKIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbHVuaXh0b29scyBERVNURElSPSIkKERFU1RESVIpIgogCkBAIC0xNDAxLDYgKzE1MTgsOCBAQAogCiBwcm9maWxlLXJlbW92YWw6CiAJZmluZCAuIC1uYW1lICcqLmdjPz8nIC1leGVjIHJtIC1mIHt9ICc7JworCXJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCiAKIGNsb2JiZXI6IGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCS1ybSAtZiAkKEJVSUxEUFlUSE9OKSAkKFBHRU4pICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoRExMTElCUkFSWSkgXApAQCAtMTQwOCw2ICsxNTI3LDcgQEAKIAkJY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgcHljb25maWcuaCBNb2R1bGVzL2NvbmZpZy5jCiAJLXJtIC1yZiBidWlsZCBwbGF0Zm9ybQogCS1ybSAtcmYgJChQWVRIT05GUkFNRVdPUktESVIpCisJLXJtIC1mIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZwogCiAjIE1ha2UgdGhpbmdzIGV4dHJhIGNsZWFuLCBiZWZvcmUgbWFraW5nIGEgZGlzdHJpYnV0aW9uOgogIyByZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcywgZXZlbiBNYWtlZmlsZVsucHJlXQpAQCAtMTQ3OSw3ICsxNTk5LDcgQEAKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbCBmcmFtZXdvcmtpbnN0YWxsZnJhbWV3b3JrIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzCiAuUEhPTlk6IGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHMgcmVjaGVjayBhdXRvY29uZiBjbGVhbiBjbG9iYmVyIGRpc3RjbGVhbgotLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjayB0b3VjaCBhbHRtYW5pbnN0YWxsCisuUEhPTlk6IHNtZWxseSBmdW5ueSBwYXRjaGNoZWNrIHRvdWNoIGFsdG1hbmluc3RhbGwgY29tbW9uaW5zdGFsbAogLlBIT05ZOiBnZGJob29rcwogCiAjIElGIFlPVSBQVVQgQU5ZVEhJTkcgSEVSRSBJVCBXSUxMIEdPIEFXQVkKZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUwppbmRleCAyYzk1N2UzLi41ZTYwZjliIDEwMDY0NAotLS0gYS9NaXNjL0FDS1MKKysrIGIvTWlzYy9BQ0tTCkBAIC01Niw2ICs1Niw3IEBACiBEb25vdmFuIEJhYXJkYQogQXJuZSBCYWJlbmhhdXNlcmhlaWRlCiBBdHRpbGEgQmFibworTWF0dCBCYWNobWFubgogTWFyY2luIEJhY2hyeQogQWxmb25zbyBCYWNpZXJvCiBEd2F5bmUgQmFpbGV5CkBAIC0xMjIsNiArMTIzLDcgQEAKIE1pY2hhZWwgQmlydHdlbGwKIFN0dWFydCBCaXNob3AKIFJveSBCaXhsZXIKK0RhbmllbCBCbGFjawogSm9uYXRoYW4gQmxhY2sKIFJlbmF1ZCBCbGFuY2gKIE1pa2UgQmxhbmQKQEAgLTEzOSw2ICsxNDEsNyBAQAogRm9yZXN0IEJvbmQKIEdyZWdvcnkgQm9uZAogTWF0aWFzIEJvcmRlc2UKK0pvbmFzIEJvcmdzdHLDtm0KIEp1cmplbiBCb3MKIFBldGVyIEJvc2NoCiBEYW4gQm9zd2VsbApAQCAtMTUzLDggKzE1NiwxMCBAQAogQ2hyaXN0b3BoZXIgQnJhbm5vbgogVGVycmVuY2UgQnJhbm5vbgogR2VybcOhbiBNLiBCcmF2bworU3ZlbiBCcmF1Y2gKIEVyaWsgQnJheQogQnJpYW4gQnJhemlsCitEZW1pYW4gQnJlY2h0CiBEYXZlIEJyZW5uYW4KIFRvbSBCcmlkZ21hbgogQW50aG9ueSBCcmlnZ3MKQEAgLTE3MSw5ICsxNzYsMTEgQEAKIEZyYW5jaXNjbyBNYXJ0w61uIEJydWd1w6kKIElhbiBCcnVudGxldHQKIEZsb3JpcyBCcnV5bm9vZ2hlCitNYXR0IEJyeWFudAogU3RhbiBCdWJyb3Vza2kKIEVyaWsgZGUgQnVlZ2VyCiBKYW4tSGVpbiBCw7xocm1hbgorTGFycyBCdWl0aW5jawogRGljayBCdWx0ZXJtYW4KIEJpbGwgQnVtZ2FybmVyCiBKaW1teSBCdXJnZXR0CkBAIC0xOTMsNiArMjAwLDcgQEAKIE1pa2UgQ2FybHRvbgogUGllcnJlIENhcnJpZXIKIFRlcnJ5IENhcnJvbGwKK0Vkd2FyZCBDYXRtdXIKIExvcmVuem8gTS4gQ2F0dWNjaQogRG9ubiBDYXZlCiBDaGFybGVzIENhemFib24KQEAgLTIyNyw2ICsyMzUsNyBAQAogQ3JhaWcgQ2l0cm8KIEdpbGxlcyBDaXZhcmlvCiBDaHJpcyBDbGFyaworTGF1cmllIENsYXJrLU1pY2hhbGVrCiBNaWtlIENsYXJrc29uCiBBbmRyZXcgQ2xlZ2cKIEJyYWQgQ2xlbWVudHMKQEAgLTMxOSwxMSArMzI4LDEzIEBACiBKb2huIER1Qm9pcwogUGF1bCBEdWJvaXMKIEphY3F1ZXMgRHVjYXNzZQorQW5kcmVpIERvcmlhbiBEdW1hCiBHcmFoYW0gRHVtcGxldG9uCiBRdWlubiBEdW5rYW4KIFJvYmluIER1bm4KIEx1a2UgRHVuc3RhbgogVmlyZ2lsIER1cHJhcworQnJ1bm8gRHVwdWlzCiBBbmR5IER1c3RtYW4KIEdhcnkgRHV6YW4KIEV1Z2VuZSBEdnVyZWNoZW5za2kKQEAgLTMzMiw2ICszNDMsNyBAQAogV2FsdGVyIETDtnJ3YWxkCiBIYW5zIEVja2FyZHQKIFJvZG9scGhvIEVja2hhcmR0CitVbHJpY2ggRWNraGFyZHQKIERhdmlkIEVkZWxzb2huCiBKb2huIEVkbW9uZHMKIEdyYW50IEVkd2FyZHMKQEAgLTM0Niw2ICszNTgsNyBAQAogRGF2aWQgRWx5CiBKZWZmIEVwbGVyCiBUb20gRXBwZXJseQorR8O2a2NlbiBFcmFzbGFuCiBTdG9mZmVsIEVyYXNtdXMKIErDvHJnZW4gQS4gRXJoYXJkCiBNaWNoYWVsIEVybnN0CkBAIC00MzAsNiArNDQzLDcgQEAKIFRob21hcyBHZWxsZWt1bQogR2FicmllbCBHZW5lbGxpbmEKIENocmlzdG9zIEdlb3JnaW91CitFbGF6YXIgR2Vyc2h1bmkKIEJlbiBHZXJ0emZpZWxkCiBOYWRpbSBHaGF6bmF2aQogRGludSBHaGVybWFuCkBAIC00NDEsNiArNDU1LDcgQEAKIE1hdHQgR2l1Y2EKIFdpbSBHbGVubgogTWljaGFlbCBHb2RlcmJhdWVyCitKZXJvZW4gVmFuIEdvZXkKIENocmlzdG9waCBHb2hsa2UKIFRpbSBHb2xkZW4KIEd1aWxoZXJtZSBHb27Dp2FsdmVzCkBAIC00NTksNiArNDc0LDcgQEAKIERhZyBHcnVuZWF1CiBGaWxpcCBHcnVzemN6ecWEc2tpCiBUaG9tYXMgR3VldHRsZXIKK0FudWogR3VwdGEKIE1pY2hhZWwgR3VyYXZhZ2UKIExhcnMgR3VzdMOkYmVsCiBUaG9tYXMgR8O8dHRsZXIKQEAgLTQ2OSw2ICs0ODUsNyBAQAogUmFzbXVzIEhhaG4KIFBldGVyIEhhaWdodAogVsOhY2xhdiBIYWlzbWFuCitaYmlnbmlldyBIYWxhcwogV2Fsa2VyIEhhbGUgSVYKIEJvYiBIYWxsZXkKIEplc3NlIEhhbGxpbwpAQCAtNDk0LDYgKzUxMSw3IEBACiBSeWNoYXJkZSBIYXdrZXMKIEJlbiBIYXlkZW4KIEpvY2hlbiBIYXllaworVGltIEhlYW5leQogSGVucmlrIEhlaW1idWVyZ2VyCiBDaHJpc3RpYW4gSGVpbWVzCiBUaG9tYXMgSGVsbGVyCkBAIC01OTgsNiArNjE2LDcgQEAKIEZyZWRyaWsgSm9oYW5zc29uCiBHcmVnb3J5IEsuIEpvaG5zb24KIEtlbnQgSm9obnNvbgorTWljaGFlbCBKb2huc29uCiBTaW1vbiBKb2huc3RvbgogTWF0dCBKb2luZXIKIFRob21hcyBKb2xsYW5zCkBAIC02MTcsNiArNjM2LDcgQEAKIFNhcmFoIEsuCiBTdW5ueSBLCiBCb2h1c2xhdiBLYWJyZGEKK0FsZXhleSBLYWNoYXlldgogQm9iIEthaG4KIEt1cnQgQi4gS2Fpc2VyCiBUYW1pdG8gS2FqaXlhbWEKQEAgLTYzOCw2ICs2NTgsNyBAQAogTWFnbnVzIEtlc3NsZXIKIExhd3JlbmNlIEtlc3RlbG9vdAogVml2ZWsgS2hlcmEKK0RoaXJ1IEtob2xpYQogTWFkcyBLaWlsZXJpY2gKIEphc29uIEtpbGxlbgogSmFuIEtpbQpAQCAtNjkzLDcgKzcxNCw5IEBACiBFcm5vIEt1dXNlbGEKIFJvc3MgTGFnZXJ3YWxsCiBDYW1lcm9uIExhaXJkCitEYXZpZCBMYW0KIFRob21hcyBMYW1iCitWYWxlcmllIExhbWJlcnQKIEplYW4tQmFwdGlzdGUgIkppYmEiIExhbXkKIFJvbmFuIExhbXkKIFRvcnN0ZW4gTGFuZHNjaG9mZgpAQCAtNzMwLDkgKzc1MywxMSBAQAogTWF0ZXVzeiBMZW5pawogSm9obiBMZW50b24KIEtvc3R5YW50eW4gTGVzY2hlbmtvCitCZW5ubyBMZXNsaWUKIENocmlzdG9waGVyIFR1ciBMZXNuaWV3c2tpLUxhYXMKIEFsYWluIExldWZyb3kKIE1hcmsgTGV2aW5zb24KK01hcmsgTGV2aXR0CiBXaWxsaWFtIExld2lzCiBBa2lyYSBMaQogWHVhbmppIExpCkBAIC03NTYsMTQgKzc4MSwxNyBAQAogQW5uZSBMb3JkCiBUb20gTG9yZWRvCiBKdXN0aW4gTG92ZQorTmVkIEphY2tzb24gTG92ZWx5CiBKYXNvbiBMb3dlCiBUb255IExvd25kcwogUmF5IExveXphZ2EKK0thbmctSGFvIChLZW5ueSkgTHUKIEx1a2FzIEx1ZWcKIExvcmVuIEx1a2UKIEZyZWRyaWsgTHVuZGgKIFpob25neXVlIEx1bwogTWFyayBMdXR6CitUYXJhcyBMeWFwdW4KIEppbSBMeW5jaAogTWlrYWVsIEx5bmd2aWcKIE1hcnRpbiB2b24gTMO2d2lzCkBAIC03NzQsOSArODAyLDEzIEBACiBUaW0gTWFjS2VuemllCiBOaWNrIE1hY2xhcmVuCiBEb24gTWFjTWlsbGVuCitUb21hc3ogTWHEh2tvd2lhawogU3RldmUgTWFqZXdza2kKK01hcmVrIE1hamtvd3NraQogR3J6ZWdvcnogTWFrYXJld2ljegogRGF2aWQgTWFsY29sbQorR3JlZyBNYWxjb2xtCitXaWxsaWFtIE1hbGxhcmQKIEtlbiBNYW5oZWltZXIKIFZsYWRpbWlyIE1hcmFuZ296b3YKIENvbGluIE1hcmMKQEAgLTc5OSw3ICs4MzEsOSBAQAogRGlldGVyIE1hdXJlcgogRGFuaWVsIE1heQogTWFkaXNvbiBNYXkKK0x1Y2FzIE1heXN0cmUKIEFybmF1ZCBNYXppbgorTWF0dCBNY0NsdXJlCiBSZWJlY2NhIE1jQ3JlYXJ5CiBLaXJrIE1jRG9uYWxkCiBDaHJpcyBNY0Rvbm91Z2gKQEAgLTgzOSw2ICs4NzMsNyBAQAogRGFtaWVuIE1pbGxlcgogSmFzb24gVi4gTWlsbGVyCiBKYXkgVC4gTWlsbGVyCitLYXRpZSBNaWxsZXIKIFJvbWFuIE1pbG5lcgogSnVsaWVuIE1pb3R0ZQogQW5kcmlpIFYuIE1pc2hrb3Zza3lpCkBAIC04NDgsNiArODgzLDcgQEAKIEZsb3JpYW4gTWxhZGl0c2NoCiBEb3VnIE1vZW4KIFRoZSBEcmFnb24gRGUgTW9uc3luZQorQmFzdGllbiBNb250YWduZQogU2tpcCBNb250YW5hcm8KIFBldGVyIE1vb2R5CiBQYXVsIE1vb3JlCkBAIC04NTUsNiArODkxLDcgQEAKIEJlbiBNb3JnYW4KIERlcmVrIE1vcnIKIEphbWVzIEEgTW9ycmlzb24KK01hcnRpbiBNb3JyaXNvbgogRGVyZWsgTWNUYXZpc2ggTW91bmNlCiBBbGVzc2FuZHJvIE1vdXJhCiBQYWJsbyBNb3V6bwpAQCAtODY5LDYgKzkwNiw3IEBACiBMb3VpcyBNdW5ybwogUi4gRGF2aWQgTXVycmF5CiBNYXR0aSBNw6RraQorSsO2cmcgTcO8bGxlcgogRGFsZSBOYWdhdGEKIEpvaG4gTmFnbGUKIFRha2FoaXJvIE5ha2F5YW1hCkBAIC05MzEsNiArOTY5LDcgQEAKIFRvZGQgUi4gUGFsbWVyCiBKdWFuIERhdmlkIEliw6HDsWV6IFBhbG9tYXIKIEphbiBQYWx1cworTWF0aGlhcyBQYW56ZW5iw7ZjawogTS4gUGFwaWxsb24KIFBldGVyIFBhcmVudGUKIEFsZXhhbmRyZSBQYXJlbnRlYXUKQEAgLTkzOSw2ICs5NzgsNyBAQAogSGVpa2tpIFBhcnRhbmVuCiBIYXJyaSBQYXNhbmVuCiBHYcOrbCBQYXNncmltYXVkCitBc2hpc2ggTml0aW4gUGF0aWwKIFJhbmR5IFBhdXNjaAogU2FtdWVsZSBQZWRyb25pCiBKdXN0aW4gUGVlbApAQCAtOTU3LDggKzk5NywxMCBAQAogQmVuamFtaW4gUGV0ZXJzb24KIEpvZSBQZXRlcnNvbgogQ2hyaXMgUGV0cmlsbGkKK1JvdW1lbiBQZXRyb3YKIEJqb3JuIFBldHRlcnNlbgogSnVzdGluIEQuIFBldHRpdAorRXNhIFBldWhhCiBSb25ueSBQZmFubnNjaG1pZHQKIEdlb2ZmIFBoaWxicmljawogR2F2cmllIFBoaWxpcHNvbgpAQCAtOTcyLDEyICsxMDE0LDE1IEBACiBGcmFuw6dvaXMgUGluYXJkCiBUb20gUGluY2tuZXkKIFphY2ggUGluY3VzCitaZXJvIFBpcmFldXMKIE1pY2hhZWwgUGlvdHJvd3NraQogQW50b2luZSBQaXRyb3UKIEplYW4tRnJhbsOnb2lzIFBpw6lyb25uZQogT2xlZyBQbGFraG90bnl1awogUmVtaSBQb2ludGVsCitBcmllbCBQb2xpYWsKIEd1aWxoZXJtZSBQb2xvCitJbGxpYSBQb2xvc3VraGluCiBNaWNoYWVsIFBvbXJhbmluZwogTWFydGluIFBvb2wKIEl1c3RpbiBQb3AKQEAgLTk4OCwxOCArMTAzMywyMiBAQAogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFBhdWwgUHJpY2UKK0l1bGlpYSBQcm9za3VybmlhCiBKeXJraSBQdWxsaWFpbmVuCiBTdGV2ZSBQdXJjZWxsCiBFZHVhcmRvIFDDqXJlegogRmVybmFuZG8gUMOpcmV6CiBQaWVycmUgUXVlbnRlbAogQnJpYW4gUXVpbmxhbgorS2V2aW4gSmluZyBRaXUKIEFuZGVycyBRdmlzdAogVGhvbWFzIFJhY2hlbAorUmFtIFJhY2h1bQogSsOpcsO0bWUgUmFkaXgKIEJ1cnRvbiBSYWRvbnMKIEplZmYgUmFtbmFuaQogQnJvZGllIFJhbworU2Vua28gUmFzaWMKIEFudHRpIFJhc2luZW4KIFNyaWRoYXIgUmF0bmFrdW1hcgogWXNqIFJheQpAQCAtMTAzMSw3ICsxMDgwLDcgQEAKIEplYW4tQ2xhdWRlIFJpbWJhdWx0CiBWbGFkIFJpc2N1dGlhCiBXZXMgUmlzaGVsCi1EYW4gUml0aQorRGFuaWVsIFJpdGkKIEp1YW4gTS4gQmVsbG8gUml2YXMKIERhdmlkZSBSaXp6bwogQW50aG9ueSBSb2FjaApAQCAtMTE2MCw2ICsxMjA5LDcgQEAKIEtyYWdlbiBTaXRha2VyCiBNaWNoYWVsIFNsb2FuCiBOaWNrIFNsb2FuCitWw6FjbGF2IMWgbWlsYXVlcgogQ2hyaXN0b3BoZXIgU21pdGgKIEVyaWMgVi4gU21pdGgKIEdyZWdvcnkgUC4gU21pdGgKQEAgLTExOTgsNiArMTI0OCw3IEBACiBTZXJoaXkgU3RvcmNoYWthCiBLZW4gU3RveAogRGFuIFN0cm9tYmVyZworRG9uYWxkIFN0dWZmdAogRGFuaWVsIFN0dXR6YmFjaAogQW5kcmVhcyBTdMO8aHJrCiBDb2xpbiBTdQpAQCAtMTIxNCw2ICsxMjY1LDcgQEAKIFDDqXRlciBTemFiw7MKIEFtaXIgU3pla2VseQogQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMKK0hpZGVha2kgVGFrYWhhc2hpCiBJbmRyYSBUYWxpcAogTmVpbCBUYWxsaW0KIEdlb2ZmIFRhbHZvbGEKQEAgLTEyMjUsNiArMTI3Nyw3IEBACiBNb250eSBUYXlsb3IKIEFuYXRvbHkgVGVjaHRvbmlrCiBNaWtoYWlsIFRlcmVraG92CitWaWN0b3IgVGVycsOzbgogUmljaGFyZCBNLiBUZXcKIFRvYmlhcyBUaGVsZW4KIEbDqXZyeSBUaGliYXVsdApAQCAtMTIzMiw2ICsxMjg1LDcgQEAKIE5pY29sYXMgTS4gVGhpw6lyeQogSmFtZXMgVGhvbWFzCiBSb2JpbiBUaG9tYXMKK0JyaWFuIFRob3JuZQogU3RlcGhlbiBUaG9ybmUKIEplcmVteSBUaHVyZ29vZAogRXJpYyBUaWVkZW1hbm4KQEAgLTEzMTEsNiArMTM2NSw3IEBACiBSb2RyaWdvIFN0ZWlubXVsbGVyIFdhbmRlcmxleQogS2UgV2FuZwogR3JlZyBXYXJkCitUb20gV2FyZGlsbAogWmFjaGFyeSBXYXJlCiBKb25hcyBXYWduZXIKIEJhcnJ5IFdhcnNhdwpAQCAtMTMzNiw2ICsxMzkxLDcgQEAKIEZlbGl4IFdpZW1hbm4KIEdlcnJ5IFdpZW5lcgogRnJhbmsgV2llcnpiaWNraQorU2FudG9zbyBXaWpheWEKIEJyeWNlICJab29rbyIgV2lsY294LU8nSGVhcm4KIFRpbW90aHkgV2lsZAogSmFrdWIgV2lsawpAQCAtMTM2OCw2ICsxNDI0LDcgQEAKIEdvcmRvbiBXb3JsZXkKIERhcnJlbiBXb3JyYWxsCiBUaG9tYXMgV291dGVycworRGFuaWVsIFdvem5pYWsKIEhlaWtvIFd1bmRyYW0KIERvdWcgV3lhdHQKIFJvYmVydCBYaWFvCkBAIC0xMzgwLDYgKzE0MzcsNyBAQAogRGFubnkgWW9vCiBSb3J5IFlvcmtlCiBHZW9yZ2UgWW9zaGlkYQorS2F6dWhpcm8gWW9zaGlkYQogTWFzYXp1bWkgWW9zaGlrYXdhCiBBcm5hdWQgWXNtYWwKIEJlcm5hcmQgWXVlCmRpZmYgLS1naXQgYS9NaXNjL0hJU1RPUlkgYi9NaXNjL0hJU1RPUlkKaW5kZXggMDFjNjM1Yi4uNDI4MDc2NCAxMDA2NDQKLS0tIGEvTWlzYy9ISVNUT1JZCisrKyBiL01pc2MvSElTVE9SWQpAQCAtMywxMyArMyw0MTEwIEBACiAKIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcmVsZWFzZSBtZXNzYWdlcyBmb3IgcHJldmlvdXMgUHl0aG9uIHJlbGVhc2VzLgogQXMgeW91IHJlYWQgb24geW91IGdvIGJhY2sgdG8gdGhlIGRhcmsgYWdlcyBvZiBQeXRob24ncyBoaXN0b3J5LgotKE5vdGU6IG5ld3MgYWJvdXQgMi41YzIgYW5kIGxhdGVyIDIuNSByZWxlYXNlcyBpcyBpbiB0aGUgTWlzYy9ORVdTCi1maWxlIG9mIHRoZSByZWxlYXNlMjUtbWFpbnQgYnJhbmNoLikKIAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAorV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjktU2VwLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjA0NjogRml4IGxvYWRpbmcgc291cmNlbGVzcyBsZWdhY3kgLnB5byBmaWxlcy4KKworLSBJc3N1ZSAjMTYwNjA6IEZpeCByZWZjb3VudGluZyBidWcgd2hlbiBfX3RydW5jX18gcmV0dXJucyBhbiBvYmplY3QKKyAgd2hvc2UgX19pbnRfXyBnaXZlcyBhIG5vbi1pbnRlZ2VyLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2MDEyOiBGaXggYSByZWdyZXNzaW9uIGluIHB5ZXhwYXQuIFRoZSBwYXJzZXIncyBVc2VGb3JlaWduRFREKCkKKyAgbWV0aG9kIGRvZXNuJ3QgcmVxdWlyZSBhbiBhcmd1bWVudCBhZ2Fpbi4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBSZWxlYXNlIENhbmRpZGF0ZSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjMtU2VwLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTkwMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIFB5VW5pY29kZV9UcmFuc2xhdGVDaGFybWFwKCkuCisKKy0gSXNzdWUgIzE1OTI2OiBGaXggY3Jhc2ggYWZ0ZXIgbXVsdGlwbGUgcmVpbml0aWFsaXphdGlvbnMgb2YgdGhlIGludGVycHJldGVyLgorCistIElzc3VlICMxNTg5NTogRml4IEZJTEUgcG9pbnRlciBsZWFrIGluIG9uZSBlcnJvciBicmFuY2ggb2YKKyAgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MoKSB3aGVuIGZpbGVuYW1lIHBvaW50cyB0byBhIHB5Yy9weW8gZmlsZSwgY2xvc2VpdAorICBpcyBmYWxzZSBhbiBhbmQgc2V0X21haW5fbG9hZGVyKCkgZmFpbHMuCisKKy0gRml4ZXMgZm9yIGEgZmV3IGNyYXNoIGFuZCBtZW1vcnkgbGVhayByZWdyZXNzaW9ucyBmb3VuZCBieSBDb3Zlcml0eS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTg4MjogQ2hhbmdlIF9kZWNpbWFsIHRvIGFjY2VwdCBhbnkgY29lZmZpY2llbnQgdHVwbGUgd2hlbgorICBjb25zdHJ1Y3RpbmcgaW5maW5pdGllcy4gVGhpcyBpcyBkb25lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICB3aXRoIGRlY2ltYWwucHk6IEluZmluaXR5IGNvZWZmaWNpZW50cyBhcmUgdW5kZWZpbmVkIGluIF9kZWNpbWFsCisgIChpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNwZWNpZmljYXRpb24pLgorCistIElzc3VlICMxNTkyNTogRml4IGEgcmVncmVzc2lvbiBpbiBlbWFpbC51dGlsIHdoZXJlIHRoZSBwYXJzZWRhdGUoKSBhbmQKKyAgcGFyc2VkYXRlX3R6KCkgZnVuY3Rpb25zIGRpZCBub3QgcmV0dXJuIE5vbmUgYW55bW9yZSB3aGVuIHRoZSBhcmd1bWVudCBjb3VsZAorICBub3QgYmUgcGFyc2VkLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU5NzM6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIGNvbXBhcmluZyBkYXRldGltZSB0aW1lem9uZQorICBvYmplY3RzLgorCistIElzc3VlICMxNTk3NzogRml4IG1lbW9yeSBsZWFrIGluIE1vZHVsZXMvX3NzbC5jIHdoZW4gdGhlIGZ1bmN0aW9uCisgIF9zZXRfbnBuX3Byb3RvY29scygpIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgdGhhbmtzIHRvIERhbmllbCBTb21tZXJtYW5uLgorCistIElzc3VlICMxNTk2OTogZmF1bHRoYW5kbGVyIG1vZHVsZTogcmVuYW1lIGR1bXBfdHJhY2ViYWNrc19sYXRlcigpIHRvCisgIGR1bXBfdHJhY2ViYWNrX2xhdGVyKCkgYW5kIGNhbmNlbF9kdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworICBjYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKS4KKworLSBfZGVjaW1hbCBtb2R1bGU6IHVzZSBvbmx5IEMgODkgc3R5bGUgY29tbWVudHMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDA5LVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTM5OTI6IFRoZSB0cmFzaGNhbiBtZWNoYW5pc20gaXMgbm93IHRocmVhZC1zYWZlLiAgVGhpcyBlbGltaW5hdGVzCisgIHNwb3JhZGljIGNyYXNoZXMgaW4gbXVsdGktdGhyZWFkIHByb2dyYW1zIHdoZW4gc2V2ZXJhbCBsb25nIGRlYWxsb2NhdG9yCisgIGNoYWlucyByYW4gY29uY3VycmVudGx5IGFuZCBpbnZvbHZlZCBzdWJjbGFzc2VzIG9mIGJ1aWx0LWluIGNvbnRhaW5lcgorICB0eXBlcy4KKworLSBJc3N1ZSAjMTU3ODQ6IE1vZGlmeSBPU0Vycm9yLl9fc3RyX18oKSB0byBiZXR0ZXIgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICBlcnJubyBlcnJvciBudW1iZXJzIGFuZCBXaW5kb3dzIGVycm9yIG51bWJlcnMuCisKKy0gSXNzdWUgIzE1NzgxOiBGaXggdHdvIHNtYWxsIHJhY2UgY29uZGl0aW9ucyBpbiBpbXBvcnQncyBtb2R1bGUgbG9ja2luZy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTg0NzogRml4IGEgcmVncmVzc2lvbiBpbiBhcmdwYXJzZSwgd2hpY2ggZGlkIG5vdCBhY2NlcHQgdHVwbGVzCisgIGFzIGFyZ3VtZW50IGxpc3RzIGFueW1vcmUuCisKKy0gSXNzdWUgIzE1ODI4OiBSZXN0b3JlIHN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucyBpbiBpbXAubG9hZF9tb2R1bGUoKS4KKworLSBJc3N1ZSAjMTUzNDA6IEZpeCBpbXBvcnRpbmcgdGhlIHJhbmRvbSBtb2R1bGUgd2hlbiAvZGV2L3VyYW5kb20gY2Fubm90CisgIGJlIG9wZW5lZC4gIFRoaXMgd2FzIGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgdGhlIGhhc2ggcmFuZG9taXphdGlvbiBwYXRjaC4KKworLSBJc3N1ZSAjMTA2NTA6IERlcHJlY2F0ZSB0aGUgd2F0Y2hleHAgcGFyYW1ldGVyIG9mIHRoZSBEZWNpbWFsLnF1YW50aXplKCkKKyAgbWV0aG9kLgorCistIElzc3VlICMxNTc4NTogTW9kaWZ5IHdpbmRvdy5nZXRfd2NoKCkgQVBJIG9mIHRoZSBjdXJzZXMgbW9kdWxlOiByZXR1cm4KKyAgYSBjaGFyYWN0ZXIgZm9yIG1vc3Qga2V5cywgYW5kIGFuIGludGVnZXIgZm9yIHNwZWNpYWwga2V5cywgaW5zdGVhZCBvZgorICBhbHdheXMgcmV0dXJuaW5nIGFuIGludGVnZXIuIFNvIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBzcGVjaWFsCisgIGtleXMgbGlrZSBrZXlwYWQga2V5cy4KKworLSBJc3N1ZSAjMTQyMjM6IEZpeCB3aW5kb3cuYWRkY2goKSBvZiB0aGUgY3Vyc2VzIG1vZHVsZSBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzCisgIGxpa2UgY3Vyc2VzLkFDU19ITElORTogdGhlIFB5dGhvbiBmdW5jdGlvbiBhZGRjaChpbnQpIGFuZCBhZGRjaChieXRlcykgaXMgbm93CisgIGNhbGxpbmcgdGhlIEMgZnVuY3Rpb24gd2FkZGNoKCkvbXZ3YWRkY2goKSAoYXMgaXQgd2FzIGRvbmUgaW4gUHl0aG9uIDMuMiksCisgIGluc3RlYWQgb2Ygd2FkZF93Y2goKS9tdndhZGRfd2NoKCkuIFRoZSBQeXRob24gZnVuY3Rpb24gYWRkY2goc3RyKSBpcyBzdGlsbAorICBjYWxsaW5nIHRoZSBDIGZ1bmN0aW9uIHdhZGRfd2NoKCkvbXZ3YWRkX3djaCgpIGlmIHRoZSBQeXRob24gY3Vyc2VzIGlzIGxpbmtlZAorICB0byBsaWJuY3Vyc2Vzdy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE1ODIyOiBSZWFsbHkgZW5zdXJlIDJ0bzMgZ3JhbW1hciBwaWNrbGVzIGFyZSBwcm9wZXJseSBpbnN0YWxsZWQKKyAgKHJlcGxhY2VzIGZpeGVzIGZvciBJc3N1ZSAjMTU2NDUpLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1ODE0OiBUaGUgbWVtb3J5dmlldyBlbmhhbmNlbWVudHMgaW4gMy4zLjAgYWNjaWRlbnRhbGx5IHBlcm1pdHRlZAorICB0aGUgaGFzaGluZyBvZiBtdWx0aS1kaW1lbnNpb25hbCBtZW1vcnZpZXdzIGFuZCBtZW1vcnl2aWV3cyB3aXRoIG11bHRpLWJ5dGUKKyAgaXRlbSBmb3JtYXRzLiBUaGUgaW50ZW5kZWQgcmVzdHJpY3Rpb25zIGhhdmUgbm93IGJlZW4gZG9jdW1lbnRlZCAtIHRoZXkKKyAgd2lsbCBiZSBjb3JyZWN0bHkgZW5mb3JjZWQgaW4gMy4zLjEKKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBSZWxlYXNlIENhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjUtQXVnLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTU3MzogbWVtb3J5dmlldyBjb21wYXJpc29ucyBhcmUgbm93IHBlcmZvcm1lZCBieSB2YWx1ZSB3aXRoIGZ1bGwKKyAgc3VwcG9ydCBmb3IgYW55IHZhbGlkIHN0cnVjdCBtb2R1bGUgZm9ybWF0IGRlZmluaXRpb24uCisKKy0gSXNzdWUgIzE1MzE2OiBXaGVuIGFuIGl0ZW0gaW4gdGhlIGZyb21saXN0IGZvciBfX2ltcG9ydF9fIGRvZXNuJ3QgZXhpc3QsCisgIGRvbid0IHJhaXNlIGFuIGVycm9yLCBidXQgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhcyBwYXJ0IG9mIGFuIGltcG9ydCBkbworICBsZXQgdGhhdCBwcm9wYWdhdGUuCisKKy0gSXNzdWUgIzE1Nzc4OiBlbnN1cmUgdGhhdCBzdHIoSW1wb3J0RXJyb3IobXNnKSkgcmV0dXJucyBhIHN0cgorICBldmVuIHdoZW4gbXNnIGlzbid0IGEgc3RyLgorCistIElzc3VlICMyMDUxOiBTb3VyY2UgZmlsZSBwZXJtaXNzaW9uIGJpdHMgYXJlIG9uY2UgYWdhaW4gY29ycmVjdGx5CisgIGNvcGllZCB0byB0aGUgY2FjaGVkIGJ5dGVjb2RlIGZpbGUuIChUaGUgbWlncmF0aW9uIHRvIGltcG9ydGxpYgorICByZWludHJvZHVjZWQgdGhpcyBwcm9ibGVtIGJlY2F1c2UgdGhlc2Ugd2FzIG5vIHJlZ3Jlc3Npb24gdGVzdC4gQSB0ZXN0CisgIGhhcyBiZWVuIGFkZGVkIGFzIHBhcnQgb2YgdGhpcyBwYXRjaCkKKworLSBJc3N1ZSAjMTU3NjE6IEZpeCBjcmFzaCB3aGVuIFBZVEhPTkVYRUNVVEFCTEUgaXMgc2V0IG9uIE1hYyBPUyBYLgorCistIElzc3VlICMxNTcyNjogRml4IGluY29ycmVjdCBib3VuZHMgY2hlY2tpbmcgaW4gUHlTdGF0ZV9GaW5kTW9kdWxlLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE1NjA0OiBVcGRhdGUgdXNlcyBvZiBQeU9iamVjdF9Jc1RydWUoKSB0byBjaGVjayBmb3IgYW5kIGhhbmRsZQorICBlcnJvcnMgY29ycmVjdGx5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ4NDY6IGltcG9ydGxpYi5GaWxlRmluZGVyIG5vdyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZQorICBkaXJlY3RvcnkgYmVpbmcgc2VhcmNoZWQgaXMgcmVtb3ZlZCBhZnRlciBhIHByZXZpb3VzIGltcG9ydCBhdHRlbXB0CisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTMzNzA6IEVuc3VyZSB0aGF0IGN0eXBlcyB3b3JrcyBvbiBNYWMgT1MgWCB3aGVuIFB5dGhvbiBpcworICBjb21waWxlZCB1c2luZyB0aGUgY2xhbmcgY29tcGlsZXIKKworLSBJc3N1ZSAjMTMwNzI6IFRoZSBhcnJheSBtb2R1bGUncyAndScgZm9ybWF0IGNvZGUgaXMgbm93IGRlcHJlY2F0ZWQgYW5kCisgIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gNC4wLgorCistIElzc3VlICMxNTU0NDogRml4IERlY2ltYWwuX19mbG9hdF9fIHRvIHdvcmsgd2l0aCBwYXlsb2FkLWNhcnJ5aW5nIE5hTnMuCisKKy0gSXNzdWUgIzE1MjQ5OiBCeXRlc0dlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMgRnJvbSBsaW5lcyAod2hlbgorICByZXF1ZXN0ZWQpIGV2ZW4gaWYgdGhlIGJvZHkgY29udGFpbnMgdW5kZWNvZGFibGUgYnl0ZXMuCisKKy0gSXNzdWUgIzE1Nzc3OiBGaXggYSByZWZsZWFrIGluIF9wb3NpeHN1YnByb2Nlc3MuCisKKy0gSXNzdWUgIyM2NjUxOTQ6IFVwZGF0ZSBlbWFpbC51dGlscy5sb2NhbHRpbWUgdG8gdXNlIGRhdGV0aW1lLmFzdGltZXpvbmUgYW5kCisgIGNvcnJlY3RseSBoYW5kbGUgaGlzdG9yaWMgY2hhbmdlcyBpbiBVVEMgb2Zmc2V0cy4KKworLSBJc3N1ZSAjMTUxOTk6IEZpeCBKYXZhU2NyaXB0J3MgZGVmYXVsdCBNSU1FIHR5cGUgdG8gYXBwbGljYXRpb24vamF2YXNjcmlwdC4KKyAgUGF0Y2ggYnkgQm9odXNsYXYgS2FicmRhLgorCistIElzc3VlICMxMjY0MzogY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUgbm93IHJlc3BlY3RzIHN5cy5leGNlcHRob29rIHdoZW4KKyAgZGlzcGxheWluZyBleGNlcHRpb25zIChQYXRjaCBieSBBYXJvbiBJbGVzKQorCistIElzc3VlICMxMzU3OTogc3RyaW5nLkZvcm1hdHRlciBub3cgdW5kZXJzdGFuZHMgdGhlICdhJyBjb252ZXJzaW9uIHNwZWNpZmllci4KKworLSBJc3N1ZSAjMTU3OTM6IFN0YWNrIGNvcnJ1cHRpb24gaW4gc3NsLlJBTkRfZWdkKCkuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NTk1OiBGaXggc3VicHJvY2Vzcy5Qb3Blbih1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgZm9yIGNlcnRhaW4gbG9jYWxlcyAodXRmLTE2IGFuZCB1dGYtMzIgZmFtaWx5KS4gUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1NDc3OiBJbiBjbWF0aCBhbmQgbWF0aCBtb2R1bGVzLCBhZGQgd29ya2Fyb3VuZCBmb3IgcGxhdGZvcm1zIHdob3NlCisgIHN5c3RlbS1zdXBwbGllZCBsb2cxcCBmdW5jdGlvbiBkb2Vzbid0IHJlc3BlY3Qgc2lnbnMgb2YgemVyb3MuCisKKy0gSXNzdWUgIzE1NzE1OiBpbXBvcnRsaWIuX19pbXBvcnRfXygpIHdpbGwgc2lsZW5jZSBhbiBJbXBvcnRFcnJvciB3aGVuIHRoZSB1c2UKKyAgb2YgZnJvbWxpc3QgbGVhZHMgdG8gYSBmYWlsZWQgaW1wb3J0LgorCistIElzc3VlICMxNDY2OTogRml4IHBpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzIG9uIE1hY09TWAorICBieSBzZW5kaW5nL3JlY2VpdmluZyBhbiBhY2tub3dsZWRnbWVudCBhZnRlciBmaWxlIGRlc2NyaXB0b3IgdHJhbnNmZXIuCisgIFRlc3RQaWNrbGluZ0Nvbm5lY3Rpb24gaGFzIGJlZW4gcmVlbmFibGVkIGZvciBNYWNPU1guCisKKy0gSXNzdWUgIzExMDYyOiBGaXggYWRkaW5nIGEgbWVzc2FnZSBmcm9tIGZpbGUgdG8gQmFieWwgbWFpbGJveC4KKworLSBJc3N1ZSAjMTU2NDY6IFByZXZlbnQgZXF1aXZhbGVudCBvZiBhIGZvcmsgYm9tYiB3aGVuIHVzaW5nCisgIG11bHRpcHJvY2Vzc2luZyBvbiBXaW5kb3dzIHdpdGhvdXQgdGhlICJpZiBfX25hbWVfXyA9PSAnX19tYWluX18nIgorICBpZGlvbS4KKworLSBJc3N1ZSAjMTU2Nzg6IEZpeCBJRExFIG1lbnVzIHdoZW4gc3RhcnRlZCBmcm9tIE9TIFggY29tbWFuZCBsaW5lCisgICgzLjMuMGIyIHJlZ3Jlc3Npb24pLgorCitDIEFQSQorLS0tLS0KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0Njc0OiBBZGQgYSBkaXNjdXNzaW9uIG9mIHRoZSBqc29uIG1vZHVsZSdzIHN0YW5kYXJkIGNvbXBsaWFuY2UuCisgIFBhdGNoIGJ5IENocmlzIFJlYmVydC4KKworLSBDcmVhdGUgYSAnQ29uY3VycmVudCBFeGVjdXRpb24nIHNlY3Rpb24gaW4gdGhlIGRvY3MsIGFuZCBzcGxpdCB1cCB0aGUKKyAgJ09wdGlvbmFsIE9wZXJhdGluZyBTeXN0ZW0gU2VydmljZXMnIHNlY3Rpb24gdG8gdXNlIGEgbW9yZSB1c2VyLWNlbnRyaWMKKyAgY2xhc3NpZmljYXRpb24gc2NoZW1lIChzcGxpdHRpbmcgdGhlbSBhY3Jvc3MgdGhlIG5ldyBDRSBzZWN0aW9uLCBJUEMgYW5kCisgIHRleHQgcHJvY2Vzc2luZykuIE9wZXJhdGluZyBzeXN0ZW0gbGltaXRhdG9ucyBjYW4gYmUgcmVmbGVjdGVkIHdpdGgKKyAgdGhlIFNwaGlueCBgYDpwbGF0Zm9ybTpgYCB0YWcsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhcyBwYXJ0IG9mIHRoZSBUYWJsZSBvZgorICBDb250ZW50cy4KKworLSBJc3N1ZSAjNDk2NjogQnJpbmcgdGhlIHNlcXVlbmNlIGRvY3MgdXAgdG8gZGF0ZSBmb3IgdGhlIFB5M2sgdHJhbnNpdGlvbgorICBhbmQgdGhlIG1hbnkgbGFuZ3VhZ2UgZW5oYW5jZW1lbnRzIHNpbmNlIHRoZXkgd2VyZSBvcmlnaW5hbCB3cml0dGVuCisKKy0gVGhlICJwYXRoIGltcG9ydGVyIiBtaXNub21lciBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIEVyaWMgU25vdydzCisgIG1vcmUtYXdrd2FyZC1idXQtYXQtbGVhc3Qtbm90LXdyb25nIHN1Z2dlc3Rpb24gb2YgInBhdGggYmFzZWQgZmluZGVyIiBpbgorICB0aGUgaW1wb3J0IHN5c3RlbSByZWZlcmVuY2UgZG9jcworCistIElzc3VlICMxNTY0MDogRG9jdW1lbnQgaW1wb3J0bGliLmFiYy5GaW5kZXIgYXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTU2MzA6IEFkZCBhbiBleGFtcGxlIGZvciAiY29udGludWUiIHN0bXQgaW4gdGhlIHR1dG9yaWFsLiBQYXRjaCBieQorICBEYW5pZWwgRWxsaXMuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNTc0NzogWkZTIGFsd2F5cyByZXR1cm5zIEVPUE5PVFNVUFAgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUKKyAgVUZfSU1NVVRBQkxFIGZsYWcgKHZpYSBlaXRoZXIgY2hmbGFncyBvciBsY2hmbGFncyk7IHJlZmFjdG9yIGFmZmVjdGVkCisgIHRlc3RzIGluIHRlc3RfcG9zaXgucHkgdG8gYWNjb3VudCBmb3IgdGhpcy4KKworLSBJc3N1ZSAjMTUyODU6IFJlZmFjdG9yIHRoZSBhcHByb2FjaCBmb3IgdGVzdGluZyBjb25uZWN0IHRpbWVvdXRzIHVzaW5nCisgIHR3byBleHRlcm5hbCBob3N0cyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHNwZWNpZmljYWxseSBmb3IgdGhpcyB0eXBlCisgIG9mIHRlc3QuCisKKy0gSXNzdWUgIzE1NzQzOiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kIHVzYWdlIGluIHVybGxpYiB0ZXN0cy4gUGF0Y2ggYnkKKyAgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjMTU2MTU6IEFkZCBzb21lIHRlc3RzIGZvciB0aGUganNvbiBtb2R1bGUncyBoYW5kbGluZyBvZiBpbnZhbGlkCisgIGlucHV0IGRhdGEuICBQYXRjaCBieSBLdXNoYWwgRGFzLgorCitCdWlsZAorLS0tLS0KKworLSBPdXRwdXQgbGliIGZpbGVzIGZvciBQR08gYnVpbGQgaW50byBQR08gZGlyZWN0b3J5LgorCistIFBpY2sgdXAgMzItYml0IGxhdW5jaGVyIGZyb20gUEdPIGRpcmVjdG9yeSBvbiA2NC1iaXQgUEdPIGJ1aWxkLgorCistIERyb3AgUENccHl0aG9uX250LmggYXMgaXQncyBub3QgdXNlZC4gQWRkIGlucHV0IGRlcGVuZGVuY3kgb24gY3VzdG9tCisgIGJ1aWxkIHN0ZXAuCisKKy0gSXNzdWUgIzE1NTExOiBEcm9wIGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gcHl0aG9ueHkubGliIGZyb20gX2RlY2ltYWwKKyAgYW1kNjQgY29uZmlndXJhdGlvbi4KKworLSBBZGQgbWlzc2luZyBQR0kvUEdPIGNvbmZpZ3VyYXRpb25zIGZvciBweXdsYXVuY2hlci4KKworLSBJc3N1ZSAjMTU2NDU6IEVuc3VyZSAydG8zIGdyYW1tYXIgcGlja2xlcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEJldGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMTItQXVnLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTU2ODogRml4IHRoZSByZXR1cm4gdmFsdWUgb2YgInlpZWxkIGZyb20iIHdoZW4gU3RvcEl0ZXJhdGlvbiBpcworICByYWlzZWQgYnkgYSBjdXN0b20gaXRlcmF0b3IuCisKKy0gSXNzdWUgIzEzMTE5OiBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyIGFyZSBub3cgdXNpbmcgIlxyXG4iIG5ld2xpbmUgb24KKyAgV2luZG93cywgYXMgUHl0aG9uIDIuCisKKy0gSXNzdWUgIzE1NTM0OiBGaXggdGhlIGZhc3Qtc2VhcmNoIGZ1bmN0aW9uIGZvciBub24tQVNDSUkgVW5pY29kZSBzdHJpbmdzLgorCistIElzc3VlICMxNTUwODogRml4IHRoZSBkb2NzdHJpbmcgZm9yIF9faW1wb3J0X18gdG8gaGF2ZSB0aGUgcHJvcGVyIGRlZmF1bHQKKyAgdmFsdWUgb2YgMCBmb3IgJ2xldmVsJyBhbmQgdG8gbm90IG1lbnRpb24gbmVnYXRpdmUgbGV2ZWxzIHNpbmNlIHRoZXkgYXJlIG5vdAorICBzdXBwb3J0ZWQuCisKKy0gSXNzdWUgIzE1NDI1OiBFbGltaW5hdGVkIHRyYWNlYmFjayBub2lzZSBmcm9tIG1vcmUgc2l0dWF0aW9ucyBpbnZvbHZpbmcKKyAgaW1wb3J0bGliLgorCistIElzc3VlICMxNDU3ODogU3VwcG9ydCBtb2R1bGVzIHJlZ2lzdGVyZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkgYWdhaW4uCisKKy0gSXNzdWUgIzE1NDY2OiBTdG9wIHVzaW5nIFRZUEVfSU5UNjQgaW4gbWFyc2hhbCwgdG8gbWFrZSBpbXBvcnRsaWIuaCAoYW5kIG90aGVyCisgIGJ5dGUgY29kZSBmaWxlcykgZXF1YWwgYmV0d2VlbiAzMi1iaXQgYW5kIDY0LWJpdCBzeXN0ZW1zLgorCistIElzc3VlICMxNjkyMzM1OiBNb3ZlIGluaXRpYWwgZXhjZXB0aW9uIGFyZ3MgYXNzaWdubWVudCB0bworICAiQmFzZUV4Y2VwdGlvbi5fX25ld19fIiB0byBoZWxwIHBpY2tsaW5nIG9mIG5haXZlIHN1YmNsYXNzZXMuCisKKy0gSXNzdWUgIzEyODM0OiBGaXggUHlCdWZmZXJfVG9Db250aWd1b3VzKCkgZm9yIG5vbi1jb250aWd1b3VzIGFycmF5cy4KKworLSBJc3N1ZSAjMTU0NTY6IEZpeCBjb2RlIF9fc2l6ZW9mX18gYWZ0ZXIgIzEyMzk5IGNoYW5nZS4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDA0OiBSZWZsZWFrIGluIFB5TWV0aG9kT2JqZWN0IHJlcHIuCisKKy0gSXNzdWUgIzE1Mzk0OiBBbiBpc3N1ZSBpbiBQeU1vZHVsZV9DcmVhdGUgdGhhdCBjYXVzZWQgcmVmZXJlbmNlcyB0byBiZSBsZWFrZWQKKyAgb24gc29tZSBlcnJvciBwYXRocyBoYXMgYmVlbiBmaXhlZC4gIFBhdGNoIGJ5IEp1bGlhIExhd2FsbC4KKworLSBJc3N1ZSAjMTUzNjg6IEFuIGlzc3VlIHRoYXQgY2F1c2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24gdG8gYmUgbm9uLWRldGVybWluaXN0aWMKKyAgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE1MjAyOiBDb25zaXN0ZW50bHkgdXNlIHRoZSBuYW1lICJmb2xsb3dfc3ltbGlua3MiIGZvciBuZXcgcGFyYW1ldGVycworICBpbiBvcyBhbmQgc2h1dGlsIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTUzMTQ6IF9fbWFpbl9fLl9fbG9hZGVyX18gaXMgbm93IHNldCBjb3JyZWN0bHkgZHVyaW5nIGludGVycHJldGVyCisgIHN0YXJ0dXAuCisKKy0gSXNzdWUgIzE1MTExOiBXaGVuIGEgbW9kdWxlIGltcG9ydGVkIHVzaW5nICdmcm9tIGltcG9ydCcgaGFzIGFuIEltcG9ydEVycm9yCisgIGluc2lkZSBpdHNlbGYsIGRvbid0IG1hc2sgdGhhdCBmYWN0IGJlaGluZCBhIGdlbmVyaWMgSW1wb3J0RXJyb3IgZm9yIHRoZQorICBtb2R1bGUgaXRzZWxmLgorCistIElzc3VlICMxNTI5MzogQWRkIEdDIHN1cHBvcnQgdG8gdGhlIEFTVCBiYXNlIG5vZGUgdHlwZS4KKworLSBJc3N1ZSAjMTUyOTE6IEZpeCBhIG1lbW9yeSBsZWFrIHdoZXJlIEFTVCBub2RlcyB3aGVyZSBub3QgcHJvcGVybHkKKyAgZGVhbGxvY2F0ZWQuCisKKy0gSXNzdWUgIzE1MTEwOiBGaXggdGhlIHRyYWNlYmFja3MgZ2VuZXJhdGVkIGJ5ICJpbXBvcnQgeHh4IiB0byBub3Qgc2hvdyB0aGUKKyAgaW1wb3J0bGliIHN0YWNrIGZyYW1lcy4KKworLSBJc3N1ZSAjMTUwMjA6IFRoZSBwcm9ncmFtIG5hbWUgdXNlZCB0byBzZWFyY2ggZm9yIFB5dGhvbidzIHBhdGggaXMgbm93CisgICJweXRob24zIiB1bmRlciBVbml4LCBub3QgInB5dGhvbiIuCisKKy0gSXNzdWUgIzE1MDMzOiBGaXggdGhlIGV4aXQgc3RhdHVzIGJ1ZyB3aGVuIG1vZHVsZXMgaW52b2tlZCB1c2luZyAtbSBzd2l0aCwKKyAgcmV0dXJuIHRoZSBwcm9wZXIgZmFpbHVyZSByZXR1cm4gdmFsdWUgKDEpLiBQYXRjaCBjb250cmlidXRlZCBieSBKZWZmIEtudXBwLgorCistIElzc3VlICMxNTIyOTogQW4gT1NFcnJvciBzdWJjbGFzcyB3aG9zZSBfX2luaXRfXyBkb2Vzbid0IGNhbGwgYmFjaworICBPU0Vycm9yLl9faW5pdF9fIGNvdWxkIHByb2R1Y2UgaW5jb21wbGV0ZSBpbnN0YW5jZXMsIGxlYWRpbmcgdG8gY3Jhc2hlcyB3aGVuCisgIGNhbGxpbmcgc3RyKCkgb24gdGhlbS4KKworLSBJc3N1ZSAxNTMwNzogVmlydHVhbCBlbnZpcm9ubWVudHMgbm93IHVzZSBzeW1saW5rcyB3aXRoIGZyYW1ld29yayBidWlsZHMgb24KKyAgTWFjIE9TIFgsIGxpa2Ugb3RoZXIgUE9TSVggYnVpbGRzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE1NDI0OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBhcnJheSBvYmplY3RzLiAgUGF0Y2ggYnkKKyAgTHVkd2lnIEjDpGhuZS4KKworLSBJc3N1ZSAjMTU1NzY6IEFsbG93IGV4dGVuc2lvbiBtb2R1bGVzIHRvIGFjdCBhcyBhIHBhY2thZ2UncyBfX2luaXRfXyBtb2R1bGUuCisKKy0gSXNzdWUgIzE1NTAyOiBIYXZlIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIHdvcmsgb24gc3lzLm1ldGFfcGF0aCBpbnN0ZWFkCisgIG9mIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLgorCistIElzc3VlICMxNTE2MzogUHlkb2Mgc2hvdWxkbid0IGxpc3QgX19sb2FkZXJfXyBhcyBtb2R1bGUgZGF0YS4KKworLSBJc3N1ZSAjMTU0NzE6IERvIG5vdCB1c2UgbXV0YWJsZSBvYmplY3RzIGFzIGRlZmF1bHRzIGZvcgorICBpbXBvcnRsaWIuX19pbXBvcnRfXygpLgorCistIElzc3VlICMxNTU1OTogVG8gYXZvaWQgYSBwcm9ibGVtYXRpYyBmYWlsdXJlIG1vZGUgd2hlbiBwYXNzZWQgdG8gdGhlIGJ5dGVzCisgIGNvbnN0cnVjdG9yLCBvYmplY3RzIGluIHRoZSBpcGFkZHJlc3MgbW9kdWxlIG5vIGxvbmdlciBpbXBsZW1lbnQgX19pbmRleF9fCisgICh0aGV5IHN0aWxsIGltcGxlbWVudCBfX2ludF9fIGFzIGFwcHJvcHJpYXRlKQorCistIElzc3VlICMxNTU0NjogRml4IGhhbmRsaW5nIG9mIHBhdGhvbG9naWNhbCBpbnB1dCBkYXRhIGluIHRoZSBwZWVrKCkgYW5kCisgIHJlYWQxKCkgbWV0aG9kcyBvZiB0aGUgQloyRmlsZSwgR3ppcEZpbGUgYW5kIExaTUFGaWxlIGNsYXNzZXMuCisKKy0gSXNzdWUgIzEzMDUyOiBGaXggSURMRSBjcmFzaGluZyB3aGVuIHJlcGxhY2Ugc3RyaW5nIGluIFNlYXJjaC9SZXBsYWNlIGRpYWxvZworICBlbmRlZCB3aXRoICdcJy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEyNjU1OiBJbnN0ZWFkIG9mIHJlcXVpcmluZyBhIGN1c3RvbSB0eXBlLCBvcy5zY2hlZF9nZXRhZmZpbml0eSBhbmQKKyAgb3Muc2NoZWRfc2V0YWZmaW5pdHkgbm93IHVzZSByZWd1bGFyIHNldHMgb2YgaW50ZWdlcnMgdG8gcmVwcmVzZW50IHRoZSBDUFVzIGEKKyAgcHJvY2VzcyBpcyByZXN0cmljdGVkIHRvLgorCistIElzc3VlICMxNTUzODogRml4IGNvbXBpbGF0aW9uIG9mIHRoZSBnZXRuYW1laW5mbygpIC8gZ2V0YWRkcmluZm8oKSBlbXVsYXRpb24KKyAgY29kZS4gIFBhdGNoIGJ5IFBoaWxpcHAgSGFnZW1laXN0ZXIuCisKKy0gSXNzdWUgIzE1NTE5OiBQcm9wZXJseSBleHBvc2UgV2luZG93c1JlZ2lzdHJ5RmluZGVyIGluIGltcG9ydGxpYiAoYW5kIHVzZSB0aGUKKyAgY29ycmVjdCB0ZXJtIGZvciBpdCkuIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWMgU25vdy4KKworLSBJc3N1ZSAjMTU1MDI6IEJyaW5nIHRoZSBpbXBvcnRsaWIgQUJDcyBpbnRvIGxpbmUgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKyAgaW1wb3J0IHByb3RvY29scyBnaXZlbiBQRVAgNDIwLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisKKy0gSXNzdWUgIzE1NDk5OiBMYXVuY2hpbmcgYSB3ZWJicm93c2VyIGluIFVuaXggdXNlZCB0byBzbGVlcCBmb3IgYSBmZXcgc2Vjb25kcy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQW50b24gQmFya292c2t5LgorCistIElzc3VlICMxNTQ2MzogVGhlIGZhdWx0aGFuZGxlciBtb2R1bGUgdHJ1bmNhdGVzIHN0cmluZ3MgdG8gNTAwIGNoYXJhY3RlcnMsCisgIGluc3RlYWQgb2YgMTAwLCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgbG9uZyBmaWxlIHBhdGhzLgorCistIElzc3VlICM2MDU2OiBNYWtlIG11bHRpcHJvY2Vzc2luZyB1c2Ugc2V0YmxvY2tpbmcoVHJ1ZSkgb24gdGhlIHNvY2tldHMgaXQKKyAgdXNlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IEogRGVyZWsgV2lsc29uLgorCistIElzc3VlICMxNTM2NDogRml4IHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJykgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aC4KKworLSBJc3N1ZSAjMTUwNDE6IFVwZGF0ZSAic2VlIGFsc28iIGxpc3QgaW4gdGtpbnRlciBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxNTQxMzogb3MudGltZXMoKSBoYWQgZGlzYXBwZWFyZWQgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTU0MDI6IEFuIGlzc3VlIGluIHRoZSBzdHJ1Y3QgbW9kdWxlIHRoYXQgY2F1c2VkIHN5cy5nZXRzaXplb2YgdG8KKyAgcmV0dXJuIGluY29ycmVjdCByZXN1bHRzIGZvciBzdHJ1Y3QuU3RydWN0IGluc3RhbmNlcyBoYXMgYmVlbiBmaXhlZC4gIEluaXRpYWwKKyAgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUyMzI6IFdoZW4gbWFuZ2xlX2Zyb20gaXMgVHJ1ZSwgZW1haWwuR2VuZXJhdG9yIG5vdyBjb3JyZWN0bHkgbWFuZ2xlcworICBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggJ0Zyb20gJyB0aGF0IG9jY3VyIGluIGEgTUlNRSBwcmVhbWJsZSBvciBlcGlsb2d1ZS4KKworLSBJc3N1ZSAjMTUwOTQ6IEluY29ycmVjdGx5IHBsYWNlZCAjZW5kaWYgaW4gX3RraW50ZXIuYy4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEzOTIyOiBhcmdwYXJzZSBubyBsb25nZXIgaW5jb3JyZWN0bHkgc3RyaXBzICctLSdzIHRoYXQgYXBwZWFyIGFmdGVyCisgIHRoZSBmaXJzdCBvbmUuCisKKy0gSXNzdWUgIzEyMzUzOiBhcmdwYXJzZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgbnVsbCBhcmd1bWVudCB2YWx1ZXMuCisKKy0gSXNzdWUgIzEwMDE3LCBpc3N1ZSAjMTQ5OTg6IEZpeCBUeXBlRXJyb3IgdXNpbmcgcHByaW50IG9uIGRpY3Rpb25hcmllcyB3aXRoCisgIHVzZXItZGVmaW5lZCB0eXBlcyBhcyBrZXlzIG9yIG90aGVyIHVub3JkZXJhYmxlIGtleXMuCisKKy0gSXNzdWUgIzE1Mzk3OiBpbnNwZWN0LmdldG1vZHVsZW5hbWUoKSBpcyBub3cgYmFzZWQgZGlyZWN0bHkgb24gaW1wb3J0bGliIHZpYSBhCisgIG5ldyBpbXBvcnRsaWIubWFjaGluZXJ5LmFsbF9zdWZmaXhlcygpIEFQSS4KKworLSBJc3N1ZSAjMTQ2MzU6IHRlbG5ldGxpYiB3aWxsIHVzZSBwb2xsKCkgcmF0aGVyIHRoYW4gc2VsZWN0KCkgd2hlbiBwb3NzaWJsZSB0bworICBhdm9pZCBmYWlsaW5nIGR1ZSB0byB0aGUgc2VsZWN0KCkgZmlsZSBkZXNjcmlwdG9yIGxpbWl0LgorCistIElzc3VlICMxNTE4MDogQ2xhcmlmeSBwb3NpeHBhdGguam9pbigpIGVycm9yIG1lc3NhZ2Ugd2hlbiBtaXhpbmcgc3RyICYgYnl0ZXMuCisKKy0gSXNzdWUgIzE1MzQzOiBwa2d1dGlsIG5vdyBpbmNsdWRlcyBhbiBpdGVyX2ltcG9ydGVyX21vZHVsZXMgaW1wbGVtZW50YXRpb24gZm9yCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciAoc2ltaWxhciB0byB0aGUgd2F5IGl0IGFscmVhZHkgaGFuZGxlZAorICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIpLgorCistIElzc3VlICMxNTMxNDogcnVucHkgbm93IHNldHMgX19tYWluX18uX19sb2FkZXJfXyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE1MzU3OiBUaGUgaW1wb3J0IGVtdWxhdGlvbiBpbiBwa2d1dGlsIGlzIG5vdyBkZXByZWNhdGVkLiBwa2d1dGlsIHVzZXMKKyAgaW1wb3J0bGliIGludGVybmFsbHkgcmF0aGVyIHRoYW4gdGhlIGVtdWxhdGlvbi4KKworLSBJc3N1ZSAjMTUyMzM6IFB5dGhvbiBub3cgZ3VhcmFudGVlcyB0aGF0IGNhbGxhYmxlcyByZWdpc3RlcmVkIHdpdGggdGhlIGF0ZXhpdAorICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW4gYSBkZXRlcm1pbmlzdGljIG9yZGVyLgorCistIElzc3VlICMxNTIzODogc2h1dGlsLmNvcHlzdGF0IG5vdyBjb3BpZXMgTGludXggImV4dGVuZGVkIGF0dHJpYnV0ZXMiLgorCistIElzc3VlICMxNTIzMDogcnVucHkucnVuX3BhdGggbm93IGNvcnJlY3RseSBzZXRzIF9fcGFja2FnZV9fIGFzIGRlc2NyaWJlZCBpbgorICB0aGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTUzMTU6IFN1cHBvcnQgVlMgMjAxMCBpbiBkaXN0dXRpbHMgY3lnd2luY29tcGlsZXIuCisKKy0gSXNzdWUgIzE1Mjk0OiBGaXggYSByZWdyZXNzaW9uIGluIHBrZ3V0aWwuZXh0ZW5kX3BhdGgoKSdzIGhhbmRsaW5nIG9mIG5lc3RlZAorICBuYW1lc3BhY2UgcGFja2FnZXMuCisKKy0gSXNzdWUgIzE1MDU2OiBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoKSBhbmQgc291cmNlX2Zyb21fY2FjaGUoKSByYWlzZQorICBOb3RJbXBsZW1lbnRlZEVycm9yIHdoZW4gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBzZXQgdG8gTm9uZS4KKworLSBJc3N1ZSAjMTUyNTY6IEdyYW1tYXRpY2FsIG1pc3Rha2UgaW4gZXhjZXB0aW9uIHJhaXNlZCBieSBpbXAuZmluZF9tb2R1bGUoKS4KKworLSBJc3N1ZSAjNTkzMTogd3NnaXJlZiBlbnZpcm9uIHZhcmlhYmxlIFNFUlZFUl9TT0ZUV0FSRSB3aWxsIHNwZWNpZnkgYW4KKyAgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdGVybSBsaWtlIENQeXRob24sIEp5dGhvbiBpbnN0ZWFkIG9mIGdlbmVyaWMgIlB5dGhvbiIuCisKKy0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgb2Jzb2xldGUgYXJndW1lbnQgIm1heF9idWZmZXJfc2l6ZSIgb2YgQnVmZmVyZWRXcml0ZXIgYW5kCisgIEJ1ZmZlcmVkUldQYWlyLCBmcm9tIHRoZSBpbyBtb2R1bGUuCisKKy0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgb2Jzb2xldGUgYXJndW1lbnQgInZlcnNpb24iIG9mIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLgorCistIElzc3VlICMxNDgxNDogSW1wbGVtZW50IG1vcmUgY29uc2lzdGVudCBvcmRlcmluZyBhbmQgc29ydGluZyBiZWhhdmlvdXIgZm9yCisgIGlwYWRkcmVzcyBvYmplY3RzLgorCistIElzc3VlICMxNDgxNDogaXBhZGRyZXNzIG5ldHdvcmsgb2JqZWN0cyBjb3JyZWN0bHkgcmV0dXJuIE5vdEltcGxlbWVudGVkIHdoZW4KKyAgY29tcGFyZWQgdG8gYXJiaXRyYXJ5IG9iamVjdHMgaW5zdGVhZCBvZiByYWlzaW5nIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTQ5OTA6IENvcnJlY3RseSBmYWlsIHdpdGggU3ludGF4RXJyb3Igb24gaW52YWxpZCBlbmNvZGluZyBkZWNsYXJhdGlvbi4KKworLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBub3cgcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlcyB3aGVuCisgIGNvbnN0cnVjdGluZyBpbnN0YW5jZXMgZGlyZWN0bHkgKGNoYW5nZXMgcGVybWl0dGVkIGR1cmluZyBiZXRhIGR1ZSB0bworICBwcm92aXNpb25hbCBBUEkgc3RhdHVzKS4KKworLSBJc3N1ZSAjMTUyNDc6IEZpbGVJTyBub3cgcmFpc2VzIGFuIGVycm9yIHdoZW4gZ2l2ZW4gYSBmaWxlIGRlc2NyaXB0b3IgcG9pbnRpbmcKKyAgdG8gYSBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE1MjYxOiBTdG9wIG9zLnN0YXQoZmQpIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBmZCBub3Qgb3Blbi4KKworLSBJc3N1ZSAjMTUxNjY6IEltcGxlbWVudCBpbXAuZ2V0X3RhZygpIHVzaW5nIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcuCisKKy0gSXNzdWUgIzE1MjEwOiBDYXRjaCBLZXlFcnJvciB3aGVuIGltcG9ydGxpYi5fX2luaXRfXyBjYW4ndCBmaW5kCisgIF9mcm96ZW5faW1wb3J0bGliIGluIHN5cy5tb2R1bGVzLCBub3QgSW1wb3J0RXJyb3IuCisKKy0gSXNzdWUgIzE1MDMwOiBpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyIG5vdyBzdXBwb3J0cyB0aGUgbmV3IHNvdXJjZSBzaXplCisgIGhlYWRlciBmaWVsZCBpbiAucHljIGZpbGVzLgorCistIElzc3VlICM1MzQ2OiBQcmVzZXJ2ZSBwZXJtaXNzaW9ucyBvZiBtYm94LCBNTURGIGFuZCBCYWJ5bCBtYWlsYm94IGZpbGVzIG9uCisgIGZsdXNoKCkuCisKKy0gSXNzdWUgIzEwNTcxOiBGaXggdGhlICItLXNpZ24iIG9wdGlvbiBvZiBkaXN0dXRpbHMnIHVwbG9hZCBjb21tYW5kLiAgUGF0Y2ggYnkKKyAgSmFrdWIgV2lsay4KKworLSBJc3N1ZSAjOTU1OTogSWYgbWVzc2FnZXMgd2VyZSBvbmx5IGFkZGVkLCBhIG5ldyBmaWxlIGlzIG5vIGxvbmdlciBjcmVhdGVkIGFuZAorICByZW5hbWVkIG92ZXIgdGhlIG9sZCBmaWxlIHdoZW4gZmx1c2goKSBpcyBjYWxsZWQgb24gYW4gbWJveCwgTU1ERiBvciBCYWJ5bAorICBtYWlsYm94LgorCistIElzc3VlIDEwOTI0OiBGaXhlZCBjcnlwdC5ta3NhbHQoKSB0byB1c2UgYSBSTkcgdGhhdCBpcyBzdWl0YWJsZSBmb3IKKyAgY3J5cHRvZ3JhcGhpYyBwdXJwb3NlLgorCistIElzc3VlICMxNTE4NDogRW5zdXJlIGNvbnNpc3RlbnQgcmVzdWx0cyBvZiBPUyBYIGNvbmZpZ3VyYXRpb24gdGFpbG9yaW5nIGZvcgorICB1bml2ZXJzYWwgYnVpbGRzIGJ5IGZhY3RvcmluZyBvdXQgY29tbW9uIE9TIFgtc3BlY2lmaWMgY3VzdG9taXphdGlvbnMgZnJvbQorICBzeXNjb25maWcsIGRpc3R1dGlscy5zeXNjb25maWcsIGRpc3R1dGlscy51dGlsLCBhbmQgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIKKyAgaW50byBhIG5ldyBtb2R1bGUgX29zeF9zdXBwb3J0LgorCitDIEFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTU2MTA6IFB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4KCkgbm93IHVzZXMgYSAnbGV2ZWwnIG9mIDAgaW5zdGVhZCBvZiAtMS4KKworLSBJc3N1ZXMgIzE1MTY5LCAjMTQ1OTk6IFN0cmlwIG91dCB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZgorICBpbXAuc291cmNlX2Zyb21fY2FjaGUoKSB1c2VkIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGFuZAorICB1c2VkIHRoZSBQeXRob24gY29kZSBpbnN0ZWFkLiBMZWFkcyB0byBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdCgpIHRvIG5vdAorICB0cnkgdG8gaW5mZXIgdGhlIHNvdXJjZSBwYXRoIGZyb20gdGhlIGJ5dGVjb2RlIHBhdGggYXMKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgZG9lcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1Njc2OiBOb3cgIm1tYXAiIGNoZWNrIGZvciBlbXB0eSBmaWxlcyBiZWZvcmUgZG9pbmcgdGhlCisgIG9mZnNldCBjaGVjay4gIFBhdGNoIGJ5IFN0ZXZlbiBXaWxsaXMuCisKKy0gSXNzdWUgIzY0OTM6IEFuIGlzc3VlIGluIGN0eXBlcyBvbiBXaW5kb3dzIHRoYXQgY2F1c2VkIHN0cnVjdHVyZSBiaXRmaWVsZHMKKyAgb2YgdHlwZSBjdHlwZXMuY191aW50MzIgYW5kIHdpZHRoIDMyIHRvIGluY29ycmVjdGx5IGJlIHNldCBoYXMgYmVlbiBmaXhlZC4KKworLSBJc3N1ZSAjMTUxOTQ6IFVwZGF0ZSBsaWJmZmkgdG8gdGhlIDMuMC4xMSByZWxlYXNlLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU0NTg6IHB5dGhvbi1jb25maWcgZ2V0cyBhIG5ldyBvcHRpb24gLS1jb25maWdkaXIgdG8gcHJpbnQgdGhlICRMSUJQTAorICB2YWx1ZS4KKworLSBNb3ZlIGltcG9ydGxpYi50ZXN0LmJlbmNobWFyayB0byBUb29scy9pbXBvcnRiZW5jaC4KKworLSBJc3N1ZSAjMTI2MDU6IFRoZSBnZGIgaG9va3MgZm9yIGRlYnVnZ2luZyBDUHl0aG9uICh3aXRoaW4gVG9vbHMvZ2RiKSBoYXZlIGJlZW4KKyAgZW5oYW5jZWQgdG8gc2hvdyBpbmZvcm1hdGlvbiBvbiBtb3JlIEMgZnJhbWVzIHJlbGV2YW50IHRvIENQeXRob24gd2l0aGluIHRoZQorICAicHktYnQiIGFuZCAicHktYnQtZnVsbCIgY29tbWFuZHM6CisKKyAgKiBDIGZyYW1lcyB0aGF0IGFyZSB3YWl0aW5nIG9uIHRoZSBHSUwKKyAgKiBDIGZyYW1lcyB0aGF0IGFyZSBnYXJiYWdlLWNvbGxlY3RpbmcKKyAgKiBDIGZyYW1lcyB0aGF0IGFyZSBkdWUgdG8gdGhlIGludm9jYXRpb24gb2YgYSBQeUNGdW5jdGlvbgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NDQ0OiBVc2UgcHJvcGVyIHNwZWxsaW5nIGZvciBub24tQVNDSUkgY29udHJpYnV0b3IgbmFtZXMuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTI5NTogUmVvcmdhbml6ZSBhbmQgcmV3cml0ZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgaW1wb3J0IHN5c3RlbS4KKworLSBJc3N1ZSAjMTUyMzA6IENsZWFybHkgZG9jdW1lbnQgc29tZSBvZiB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIHJ1bnB5IG1vZHVsZSBhbmQKKyAgbnVkZ2UgcmVhZGVycyB0b3dhcmRzIGltcG9ydGxpYiB3aGVuIGFwcHJvcHJpYXRlLgorCistIElzc3VlICMxNTA1MzogQ29weSBQeXRob24gMy4zIGltcG9ydCBsb2NrIGNoYW5nZSBub3RpY2UgdG8gYWxsIHJlbGV2YW50CisgIGZ1bmN0aW9ucyBpbiBpbXAgaW5zdGVhZCBvZiBqdXN0IGF0IHRoZSB0b3Agb2YgdGhlIHJlbGV2YW50IHNlY3Rpb24uCisKKy0gSXNzdWUgIzE1Mjg4OiBMaW5rIHRvIHRoZSB0ZXJtICJsb2FkZXIiIGluIG5vdGVzIGluIHBrZ3V0aWwgYWJvdXQgaG93IHRoaW5ncworICB3b24ndCB3b3JrIGFzIGV4cGVjdGVkIGluIFB5dGhvbiAzLjMgYW5kIG1hcmsgdGhlIHJlcXVpc2l0ZSBmdW5jdGlvbnMgYXMKKyAgImNoYW5nZWQiIHNpbmNlIHRoZXkgd2lsbCBubyBsb25nZXIgd29yayB3aXRoIG1vZHVsZXMgZGlyZWN0bHkgaW1wb3J0ZWQgYnkKKyAgaW1wb3J0IGl0c2VsZi4KKworLSBJc3N1ZSAjMTM1NTc6IENsYXJpZnkgZWZmZWN0IG9mIGdpdmluZyB0d28gZGlmZmVyZW50IG5hbWVzcGFjZXMgdG8gZXhlYyBvcgorICBleGVjZmlsZSgpLgorCistIElzc3VlICMxNTI1MDogRG9jdW1lbnQgdGhhdCBmaWxlY21wLmRpcmNtcCBjb21wYXJlcyBmaWxlcyBzaGFsbG93bHkuIFBhdGNoCisgIGNvbnRyaWJ1dGVkIGJ5IENocmlzIEplcmRvbmVrLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTU0Njc6IE1vdmUgaGVscGVycyBmb3IgX19zaXplb2ZfXyB0ZXN0cyBpbnRvIHRlc3Rfc3VwcG9ydC4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MzIwOiBNYWtlIGl0ZXJhdGluZyB0aGUgbGlzdCBvZiB0ZXN0cyB0aHJlYWQtc2FmZSB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgaW4gbXVsdGlwcm9jZXNzIG1vZGUuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTE2ODogTW92ZSBpbXBvcnRsaWIudGVzdCB0byB0ZXN0LnRlc3RfaW1wb3J0bGliLgorCistIElzc3VlICMxNTA5MTogUmVhY3RpdmF0ZSBhIHRlc3Qgb24gVU5JWCB3aGljaCB3YXMgZmFpbGluZyB0aGFua3MgdG8gYQorICBmb3Jnb3R0ZW4gaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgY2FsbC4KKworLSBJc3N1ZSAjMTUyMzA6IEFkb3B0ZWQgYSBtb3JlIHN5c3RlbWF0aWMgYXBwcm9hY2ggaW4gdGhlIHJ1bnB5IHRlc3RzLgorCistIElzc3VlICMxNTMwMDogRW5zdXJlIHRoZSB0ZW1wb3JhcnkgdGVzdCB3b3JraW5nIGRpcmVjdG9yaWVzIGFyZSBpbiB0aGUgc2FtZQorICBwYXJlbnQgZm9sZGVyIHdoZW4gcnVubmluZyB0ZXN0cyBpbiBtdWx0aXByb2Nlc3MgbW9kZSBmcm9tIGEgUHl0aG9uIGJ1aWxkLgorICBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTUyODQ6IFNraXAge3NlbmQscmVjdn1tc2cgdGVzdHMgaW4gdGVzdF9zb2NrZXQgd2hlbiBJUHY2IGlzIG5vdAorICBlbmFibGVkLiBQYXRjaCBieSBCcmlhbiBCcmF6aWwuCisKKy0gSXNzdWUgIzE1Mjc3OiBGaXggYSByZXNvdXJjZSBsZWFrIGluIHN1cHBvcnQucHkgd2hlbiBJUHY2IGlzIGRpc2FibGVkLiAgUGF0Y2gKKyAgYnkgQnJpYW4gQnJhemlsLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTE3MTU6IEZpeCBtdWx0aWFyY2ggZGV0ZWN0aW9uIHdpdGhvdXQgaGF2aW5nIERlYmlhbiBkZXZlbG9wbWVudCB0b29scworICAoZHBrZy1kZXYpIGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTUwMzc6IEJ1aWxkIE9TIFggaW5zdGFsbGVycyB3aXRoIGxvY2FsIGNvcHkgb2YgbmN1cnNlcyA1LjkgbGlicmFyaWVzCisgIHRvIGF2b2lkIGN1cnNlcy51bmdldF93Y2ggYnVnIHByZXNlbnQgaW4gb2xkZXIgdmVyc2lvbnMgb2YgbmN1cnNlcyBzdWNoIGFzCisgIHRob3NlIHNoaXBwZWQgd2l0aCBPUyBYLgorCistIElzc3VlICMxNTU2MDogRml4IGJ1aWxkaW5nIF9zcWxpdGUzIGV4dGVuc2lvbiBvbiBPUyBYIHdpdGggYW4gU0RLLiAgQWxzbywgZm9yCisgIE9TIFggaW5zdGFsbGVycywgZW5zdXJlIGNvbnNpc3RlbnQgc3FsaXRlMyBiZWhhdmlvciBhbmQgZmVhdHVyZSBhdmFpbGFiaWxpdHkKKyAgYnkgYnVpbGRpbmcgYSBsb2NhbCBjb3B5IG9mIGxpYnNxbGl0ZTMgcmF0aGVyIHRoYW4gZGVwZW5kaW5nIG9uIHRoZSB3aWRlIHJhbmdlCisgIG9mIHZlcnNpb25zIHN1cHBsaWVkIHdpdGggdmFyaW91cyBPUyBYIHJlbGVhc2VzLgorCistIElzc3VlICM4ODQ3OiBEaXNhYmxlIENPTURBVCBmb2xkaW5nIGluIFdpbmRvd3MgUEdPIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTQwMTg6IEZpeCBPUyBYIFRjbC9UayBmcmFtZXdvcmsgY2hlY2tpbmcgd2hlbiB1c2luZyBPUyBYIFNES3MuCisKKy0gSXNzdWUgIzE1NDMxOiBBZGQgX2ZyZWV6ZV9pbXBvcnRsaWIgcHJvamVjdCB0byByZWdlbmVyYXRlIGltcG9ydGxpYi5oIG9uCisgIFdpbmRvd3MuIFBhdGNoIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3Nvbi4KKworLSBJc3N1ZSAjMTQxOTc6IEZvciBPUyBYIGZyYW1ld29yayBidWlsZHMsIGVuc3VyZSBsaW5rcyB0byB0aGUgc2hhcmVkIGxpYnJhcnkKKyAgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgcHJvcGVyIEFCSSBzdWZmaXguCisKKy0gSXNzdWUgIzE0MzMwOiBGb3IgY3Jvc3MgYnVpbGRzLCBkb24ndCB1c2UgaG9zdCBweXRob24sIHVzZSBob3N0IHNlYXJjaCBwYXRocworICBmb3IgaG9zdCBjb21waWxlci4KKworLSBJc3N1ZSAjMTUyMzU6IEFsbG93IEJlcmtsZXkgREIgdmVyc2lvbnMgdXAgdG8gNS4zIHRvIGJ1aWxkIHRoZSBkYm0gbW9kdWxlLgorCistIElzc3VlICMxNTI2ODogU2VhcmNoIGN1cnNlcy5oIGluIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI3LUp1bi0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBGaXggYSAobW9zdCBsaWtlbHkpIHZlcnkgcmFyZSBtZW1vcnkgbGVhayB3aGVuIGNhbGxpbmcgbWFpbigpIGFuZCBub3QgYmVpbmcKKyAgYWJsZSB0byBkZWNvZGUgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQuCisKKy0gSXNzdWUgIzE0ODE1OiBVc2UgUHlfc3NpemVfdCBpbnN0ZWFkIG9mIGxvbmcgZm9yIHRoZSBvYmplY3QgaGFzaCwgdG8KKyAgcHJlc2VydmUgYWxsIDY0IGJpdHMgb2YgaGFzaCBvbiBXaW42NC4KKworLSBJc3N1ZSAjMTIyNjg6IEZpbGUgcmVhZGxpbmUsIHJlYWRsaW5lcyBhbmQgcmVhZCgpIG9yIHJlYWRhbGwoKSBtZXRob2RzCisgIG5vIGxvbmdlciBsb3NlIGRhdGEgd2hlbiBhbiB1bmRlcmx5aW5nIHJlYWQgc3lzdGVtIGNhbGwgaXMgaW50ZXJydXB0ZWQuCisgIElPRXJyb3IgaXMgbm8gbG9uZ2VyIHJhaXNlZCBkdWUgdG8gYSByZWFkIHN5c3RlbSBjYWxsIHJldHVybmluZyBFSU5UUgorICBmcm9tIHdpdGhpbiB0aGVzZSBtZXRob2RzLgorCistIElzc3VlICMxMTYyNjogQWRkIF9TaXplVCBmdW5jdGlvbnMgdG8gc3RhYmxlIEFCSS4KKworLSBJc3N1ZSAjMTUxNDY6IEFkZCBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMuIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTUxNDI6IEZpeCByZWZlcmVuY2UgbGVhayB3aGVuIGRlYWxsb2NhdGluZyBpbnN0YW5jZXMgb2YgdHlwZXMKKyAgY3JlYXRlZCB1c2luZyBQeVR5cGVfRnJvbVNwZWMoKS4KKworLSBJc3N1ZSAjMTUwNDI6IEFkZCBQeVN0YXRlX0FkZE1vZHVsZSBhbmQgUHlTdGF0ZV9SZW1vdmVNb2R1bGUuIEFkZCB2ZXJzaW9uCisgIGd1YXJkIGZvciBQeV9MSU1JVEVEX0FQSSBhZGRpdGlvbnMuIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTAwNTM6IERvbid0IGNsb3NlIEZEcyB3aGVuIEZpbGVJTy5fX2luaXRfXyBmYWlscy4gTG9vc2VseSBiYXNlZCBvbgorICB0aGUgd29yayBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTUwOTY6IFJlbW92ZWQgc3VwcG9ydCBmb3IgdXInJyBhcyB0aGUgcmF3IG5vdGF0aW9uIGlzbid0CisgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi54J3MgcmF3IHVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTM3ODM6IEdlbmVyYXRvciBvYmplY3RzIG5vdyB1c2UgdGhlIGlkZW50aWZpZXIgQVBJcyBpbnRlcm5hbGx5CisKKy0gSXNzdWUgIzE0ODc0OiBSZXN0b3JlIGNoYXJtYXAgZGVjb2Rpbmcgc3BlZWQgdG8gcHJlLVBFUCAzOTMgbGV2ZWxzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTAyNjogdXRmLTE2IGVuY29kaW5nIGlzIG5vdyBzaWduaWZpY2FudGx5IGZhc3RlciAodXAgdG8gMTB4KS4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTEwMjI6IG9wZW4oKSBhbmQgaW8uVGV4dElPV3JhcHBlciBhcmUgbm93IGNhbGxpbmcKKyAgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKSBpbnN0ZWFkIG9mIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCisgIGluIHRleHQgbW9kZSBpZiB0aGUgZW5jb2RpbmcgaXMgbm90IHNwZWNpZmllZC4gRG9uJ3QgY2hhbmdlIHRlbXBvcmFyeSB0aGUKKyAgbG9jYWxlIGVuY29kaW5nIHVzaW5nIGxvY2FsZS5zZXRsb2NhbGUoKSwgdXNlIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZworICBpbnN0ZWFkIG9mIHRoZSB1c2VyIHByZWZlcnJlZCBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTQ2NzM6IEFkZCBFcmljIFNub3cncyBzeXMuaW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1MDM4OiBPcHRpbWl6ZSBweXRob24gTG9ja3Mgb24gV2luZG93cy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICM5ODAzOiBEb24ndCBjbG9zZSBJRExFIG9uIHNhdmluZyBpZiBicmVha3BvaW50IGlzIG9wZW4uCisgIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjI4ODogQ29uc2lkZXIgJzAnIGFuZCAnMC4wJyBhcyB2YWxpZCBpbml0aWFsdmFsdWUKKyAgZm9yIHRraW50ZXIgU2ltcGxlRGlhbG9nLgorCistIElzc3VlICMxNTUxMjogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgcGFyc2VyLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQ2OTogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgZGVxdWUgb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0ODk6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIEJ5dGVzSU8gb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0ODc6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGJ1ZmZlcmVkIEkvTyBvYmplY3RzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTUxNDogQ29ycmVjdCBfX3NpemVvZl9fIHN1cHBvcnQgZm9yIGNwdV9zZXQuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MTg3OiBCdWdmaXg6IHJlbW92ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgdGVzdF9zaHV0aWwgd2FzIGxlYXZpbmcKKyAgYmVoaW5kLgorCistIElzc3VlICMxNTE3NzogQWRkZWQgZGlyX2ZkIHBhcmFtZXRlciB0byBvcy5md2FsaygpLgorCistIElzc3VlICMxNTE3NjogQ2xhcmlmaWVkIGJlaGF2aW9yLCBkb2N1bWVudGF0aW9uLCBhbmQgaW1wbGVtZW50YXRpb24KKyAgb2Ygb3MubGlzdGRpcigpLgorCistIElzc3VlICMxNTA2MTogUmUtaW1wbGVtZW50ZWQgaG1hYy5jb21wYXJlX2RpZ2VzdCgpIGluIEMgdG8gcHJldmVudCBmdXJ0aGVyCisgIHRpbWluZyBhbmFseXNpcyBhbmQgdG8gc3VwcG9ydCBhbGwgYnVmZmVyIHByb3RvY29sIGF3YXJlIG9iamVjdHMgYXMgd2VsbCBhcworICBBU0NJSSBvbmx5IHN0ciBpbnN0YW5jZXMgc2FmZWx5LgorCistIElzc3VlICMxNTE2NDogQ2hhbmdlIHJldHVybiB2YWx1ZSBvZiBwbGF0Zm9ybS51bmFtZSgpIGZyb20gYQorICBwbGFpbiB0dXBsZSB0byBhIGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUuCisKKy0gU3VwcG9ydCBNYWdlaWEgTGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE2Nzg6IFN1cHBvcnQgQXJjaCBsaW51eCBpbiB0aGUgcGxhdGZvcm0gbW9kdWxlLgorCistIElzc3VlICMxNTExODogQ2hhbmdlIHJldHVybiB2YWx1ZSBvZiBvcy51bmFtZSgpIGFuZCBvcy50aW1lcygpIGZyb20KKyAgcGxhaW4gdHVwbGVzIHRvIGltbXV0YWJsZSBpdGVyYWJsZSBvYmplY3RzIHdpdGggbmFtZWQgYXR0cmlidXRlcworICAoc3RydWN0c2VxIG9iamVjdHMpLgorCistIFNwZWVkIHVwIF9kZWNpbWFsIGJ5IGFub3RoZXIgMTAtMTUlIGJ5IGNhY2hpbmcgdGhlIHRocmVhZCBsb2NhbCBjb250ZXh0CisgIHRoYXQgd2FzIGxhc3QgYWNjZXNzZWQuIEluIHRoZSBwaSBiZW5jaG1hcmsgKDY0LWJpdCBwbGF0Zm9ybSwgcHJlYz05KSwKKyAgX2RlY2ltYWwgaXMgbm93IG9ubHkgMS41eCBzbG93ZXIgdGhhbiBmbG9hdC4KKworLSBSZW1vdmUgdGhlIHBhY2thZ2luZyBtb2R1bGUsIHdoaWNoIGlzIG5vdCByZWFkeSBmb3IgcHJpbWUgdGltZS4KKworLSBJc3N1ZSAjMTUxNTQ6IEFkZCAiZGlyX2ZkIiBwYXJhbWV0ZXIgdG8gb3Mucm1kaXIsIHJlbW92ZSAicm1kaXIiCisgIHBhcmFtZXRlciBmcm9tIG9zLnJlbW92ZSAvIG9zLnVubGluay4KKworLSBJc3N1ZSAjNDQ4OTogQWRkIGEgc2h1dGlsLnJtdHJlZSB0aGF0IGlzbid0IHN1c2NlcHRpYmxlIHRvIHN5bWxpbmsgYXR0YWNrcy4KKyAgSXQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IG9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRoZSBuZWNlc3Nhcnkgb3Mub3BlbmF0KCkKKyAgYW5kIG9zLnVubGlua2F0KCkgZnVuY3Rpb25zLiBNYWluIGNvZGUgYnkgTWFydGluIHZvbiBMw7Z3aXMuCisKKy0gSXNzdWUgIzE1MTU2OiBIVE1MUGFyc2VyIG5vdyB1c2VzIHRoZSBuZXcgImh0bWwuZW50aXRpZXMuaHRtbDUiIGRpY3Rpb25hcnkuCisKKy0gSXNzdWUgIzExMTEzOiBhZGQgYSBuZXcgImh0bWw1IiBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIG5hbWVkIGNoYXJhY3RlcgorICByZWZlcmVuY2VzIGRlZmluZWQgYnkgdGhlIEhUTUw1IHN0YW5kYXJkIGFuZCB0aGUgZXF1aXZhbGVudCBVbmljb2RlCisgIGNoYXJhY3RlcihzKSB0byB0aGUgaHRtbC5lbnRpdGllcyBtb2R1bGUuCisKKy0gSXNzdWUgIzE1MTE0OiB0aGUgc3RyaWN0IG1vZGUgb2YgSFRNTFBhcnNlciBhbmQgdGhlIEhUTUxQYXJzZUVycm9yIGV4Y2VwdGlvbgorICBhcmUgZGVwcmVjYXRlZCBub3cgdGhhdCB0aGUgcGFyc2VyIGlzIGFibGUgdG8gcGFyc2UgaW52YWxpZCBtYXJrdXAuCisKKy0gSXNzdWUgIzM2NjU6IFx1IGFuZCBcVSBlc2NhcGVzIGFyZSBub3cgc3VwcG9ydGVkIGluIHVuaWNvZGUgcmVndWxhcgorICBleHByZXNzaW9ucy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MTUzOiBBZGRlZCBpbnNwZWN0LmdldGdlbmVyYXRvcmxvY2FscyB0byBzaW1wbGlmeSB3aGl0ZSBib3gKKyAgdGVzdGluZyBvZiBnZW5lcmF0b3Igc3RhdGUgdXBkYXRlcworCistIElzc3VlICMxMzA2MjogQWRkZWQgaW5zcGVjdC5nZXRjbG9zdXJldmFycyB0byBzaW1wbGlmeSB0ZXN0aW5nIHN0YXRlZnVsCisgIGNsb3N1cmVzCisKKy0gSXNzdWUgIzExMDI0OiBGaXhlcyBhbmQgYWRkaXRpb25hbCB0ZXN0cyBmb3IgVGltZTJJbnRlcm5hbGRhdGUuCisKKy0gSXNzdWUgIzE0NjI2OiBMYXJnZSByZWZhY3RvcmluZyBvZiBmdW5jdGlvbnMgLyBwYXJhbWV0ZXJzIGluIHRoZSBvcyBtb2R1bGUuCisgIE1hbnkgZnVuY3Rpb25zIG5vdyBzdXBwb3J0ICJkaXJfZmQiIGFuZCAiZm9sbG93X3N5bWxpbmtzIiBwYXJhbWV0ZXJzOworICBzb21lIGFsc28gc3VwcG9ydCBhY2NlcHRpbmcgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgaW4gcGxhY2Ugb2YgYSBwYXRoCisgIHN0cmluZy4gIEFkZGVkIG9zLnN1cHBvcnRfKiBjb2xsZWN0aW9ucyBhcyBMQllMIGhlbHBlcnMuICBSZW1vdmVkIG1hbnkKKyAgZnVuY3Rpb25zIG9ubHkgcHJldmlvdXNseSBzZWVuIGluIDMuMyBhbHBoYSByZWxlYXNlcyAob2Z0ZW4gc3RhcnRpbmcgd2l0aAorICAiZiIgb3IgImwiLCBvciBlbmRpbmcgd2l0aCAiYXQiKS4gIE9yaWdpbmFsbHkgc3VnZ2VzdGVkIGJ5IFNlcmhpeSBTdG9yY2hha2E7CisgIGltcGxlbWVudGVkIGJ5IExhcnJ5IEhhc3RpbmdzLgorCistIElzc3VlICMxNTAwODogSW1wbGVtZW50IFBFUCAzNjIgIlNpZ25hdHVyZSBPYmplY3RzIi4KKyAgUGF0Y2ggYnkgWXVyeSBTZWxpdmFub3YuCisKKy0gSXNzdWU6ICMxNTEzODogYmFzZTY0LnVybHNhZmVfe2VuLGRlfWNvZGUoKSBhcmUgbm93IDMtNHggZmFzdGVyLgorCistIElzc3VlICM0NDQ1ODI6IEFkZCBzaHV0aWwud2hpY2gsIGZvciBmaW5kaW5nIHByb2dyYW1zIG9uIHRoZSBzeXN0ZW0gcGF0aC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRXJpayBEZW1haW5lLCB3aXRoIGxhdGVyIGl0ZXJhdGlvbnMgYnkgSmFuIEtpbGxpYW4KKyAgYW5kIEJyaWFuIEN1cnRpbi4KKworLSBJc3N1ZSAjMTQ4Mzc6IFNTTCBlcnJvcnMgbm93IGhhdmUgYGBsaWJyYXJ5YGAgYW5kIGBgcmVhc29uYGAgYXR0cmlidXRlcworICBkZXNjcmliaW5nIHByZWNpc2VseSB3aGF0IGhhcHBlbmVkIGFuZCBpbiB3aGljaCBPcGVuU1NMIHN1Ym1vZHVsZS4gIFRoZQorICBzdHIoKSBvZiBhIFNTTEVycm9yIGlzIGFsc28gZW5oYW5jZWQgYWNjb3JkaW5nbHkuCisKKy0gSXNzdWUgIzk1Mjc6IGRhdGV0aW1lLmFzdGltZXpvbmUoKSBtZXRob2Qgd2lsbCBub3cgc3VwcGx5IGEgY2xhc3MKKyAgdGltZXpvbmUgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgc3lzdGVtIGxvY2FsIHRpbWV6b25lIHdoZW4KKyAgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLgorCistIElzc3VlICMxNDY1MzogZW1haWwudXRpbHMubWt0aW1lX3R6KCkgbm8gbG9uZ2VyIHJlbGllcyBvbiBzeXN0ZW0KKyAgbWt0aW1lKCkgd2hlbiB0aW1lem9uZSBvZmZlc3QgaXMgc3VwcGxpZWQuCisKKy0gSXNzdWUgIzE0Njg0OiB6bGliLmNvbXByZXNzb2JqKCkgYW5kIHpsaWIuZGVjb21wcmVzc29iaigpIG5vdyBzdXBwb3J0IHRoZSB1c2UKKyAgb2YgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJpZXMuIE9yaWdpbmFsIHBhdGNoIGJ5IFNhbSBSdXNoaW5nLgorCistIEZpeCBHemlwRmlsZSdzIGhhbmRsaW5nIG9mIGZpbGVuYW1lcyBnaXZlbiBhcyBieXRlcyBvYmplY3RzLgorCistIElzc3VlICMxNDc3MjogUmV0dXJuIGRlc3RpbmF0aW9uIHZhbHVlcyBmcm9tIHNvbWUgc2h1dGlsIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTUwNjQ6IEltcGxlbWVudCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgZm9yIG11bHRpcHJvY2Vzc2luZyB0eXBlcworCistIElzc3VlICMxNTEwMTogTWFrZSBwb29sIGZpbmFsaXplciBhdm9pZCBqb2luaW5nIGN1cnJlbnQgdGhyZWFkLgorCistIElzc3VlICMxNDY1NzogVGhlIGZyb3plbiBpbnN0YW5jZSBvZiBpbXBvcnRsaWIgdXNlZCBmb3IgYm9vdHN0cmFwIGlzIG5vdworICBhbHNvIHRoZSBtb2R1bGUgaW1wb3J0ZWQgYXMgaW1wb3J0bGliLl9ib290c3RyYXAuCisKKy0gSXNzdWUgIzE0MDU1OiBBZGQgX19zaXplb2ZfXyBzdXBwb3J0IHRvIF9lbGVtZW50dHJlZS4KKworLSBJc3N1ZSAjMTUwNTQ6IEEgYnVnIGluIHRva2VuaXplLnRva2VuaXplIHRoYXQgY2F1c2VkIHN0cmluZyBsaXRlcmFscworICB3aXRoICdiJyBwcmVmaXhlcyB0byBiZSBpbmNvcnJlY3RseSB0b2tlbml6ZWQgaGFzIGJlZW4gZml4ZWQuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MDA2OiBBbGxvdyBlcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gbmFpdmUgYW5kIGF3YXJlCisgIHRpbWUgb3IgZGF0ZXRpbWUgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ5ODI6IERvY3VtZW50IHRoYXQgcGtndXRpbCdzIGl0ZXJhdGlvbiBmdW5jdGlvbnMgcmVxdWlyZSB0aGUKKyAgbm9uLXN0YW5kYXJkIGl0ZXJfbW9kdWxlcygpIG1ldGhvZCB0byBiZSBkZWZpbmVkIGJ5IGFuIGltcG9ydGVyIChzb21ldGhpbmcKKyAgdGhlIGltcG9ydGxpYiBpbXBvcnRlcnMgZG8gbm90IGRlZmluZSkuCisKKy0gSXNzdWUgIzE1MDM2OiBNYWlsYm94IG5vIGxvbmdlciB0aHJvd3MgYW4gZXJyb3IgaWYgYSBmbHVzaCBpcyBkb25lCisgIGJldHdlZW4gb3BlcmF0aW9ucyB3aGVuIHJlbW92aW5nIG9yIGNoYW5naW5nIG11bHRpcGxlIGl0ZW1zIGluIG1ib3gsCisgIE1NREYsIG9yIEJhYnlsIG1haWxib3hlcy4KKworLSBJc3N1ZSAjMTQwNTk6IEltcGxlbWVudCBtdWx0aXByb2Nlc3NpbmcuQmFycmllci4KKworLSBJc3N1ZSAjMTUwNjE6IFRoZSBpbmFwcHJvcHJpYXRlbHkgbmFtZWQgaG1hYy5zZWN1cmVfY29tcGFyZSBoYXMgYmVlbgorICByZW5hbWVkIHRvIGhtYWMuY29tcGFyZV9kaWdlc3QsIHJlc3RyaWN0ZWQgdG8gb3BlcmF0aW5nIG9uIGJ5dGVzIGlucHV0cworICBvbmx5IGFuZCBoYWQgaXRzIGRvY3VtZW50YXRpb24gdXBkYXRlZCB0byBtb3JlIGFjY3VyYXRlbHkgcmVmbGVjdCBib3RoIGl0cworICBpbnRlbnQgYW5kIGl0cyBsaW1pdGF0aW9ucworCistIElzc3VlICMxMzg0MTogTWFrZSBjaGlsZCBwcm9jZXNzZXMgZXhpdCB1c2luZyBzeXMuZXhpdCgpIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE0OTM2OiBjdXJzZXNfcGFuZWwgd2FzIGNvbnZlcnRlZCB0byBQRVAgMzEyMSBhbmQgUEVQIDM4NCBBUEkuCisgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTY2NzU0NjogT24gcGxhdGZvcm1zIHN1cHBvcnRpbmcgdG1fem9uZSBhbmQgdG1fZ210b2ZmIGZpZWxkcworICBpbiBzdHJ1Y3QgdG0sIHRpbWUuc3RydWN0X3RpbWUgb2JqZWN0cyByZXR1cm5lZCBieSB0aW1lLmdtdGltZSgpLAorICB0aW1lLmxvY2FsdGltZSgpIGFuZCB0aW1lLnN0cnB0aW1lKCkgZnVuY3Rpb25zIG5vdyBoYXZlIHRtX3pvbmUgYW5kCisgIHRtX2dtdG9mZiBhdHRyaWJ1dGVzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUGF1bCBCb2RkaWUuCisKKy0gUmVuYW1lIGFkanVzdGVkIGF0dHJpYnV0ZSB0byBhZGp1c3RhYmxlIGluIHRpbWUuZ2V0X2Nsb2NrX2luZm8oKSByZXN1bHQuCisKKy0gSXNzdWUgIzM1MTg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCBCYXNlTWFuYWdlci5mcm9tX2FkZHJlc3MoKQorICBtZXRob2QuCisKKy0gSXNzdWUgIzEzODU3OiBBZGRlZCB0ZXh0d3JhcC5pbmRlbnQoKSBmdW5jdGlvbiAoaW5pdGlhbCBwYXRjaCBieSBFenJhCisgIEJlcmNoKQorCistIElzc3VlICMyNzM2OiBBZGRlZCBkYXRldGltZS50aW1lc3RhbXAoKSBtZXRob2QuCisKKy0gSXNzdWUgIzEzODU0OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBwcm9wZXJseSBoYW5kbGUgbm9uLWludGVnZXIKKyAgbm9uLXN0cmluZyBhcmd1bWVudCB0byBTeXN0ZW1FeGl0LgorCistIElzc3VlICMxMjE1NzogTWFrZSBwb29sLm1hcCgpIGVtcHR5IGl0ZXJhYmxlcyBjb3JyZWN0bHkuICBJbml0aWFsCisgIHBhdGNoIGJ5IG1vdWFkLgorCistIElzc3VlICMxMTgyMzogZGlzYXNzZW1ibHkgbm93IHNob3dzIGFyZ3VtZW50IGNvdW50cyBvbiBjYWxscyB3aXRoIGtleXdvcmQgYXJncy4KKworLSBJc3N1ZSAjMTQ3MTE6IG9zLnN0YXRfZmxvYXRfdGltZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLgorCistIExaTUFGaWxlIG5vdyBhY2NlcHRzIHRoZSBtb2RlcyAicmIiLyJ3YiIvImFiIiBhcyBzeW5vbnltcyBvZiAiciIvInciLyJhIi4KKworLSBUaGUgYnoyIGFuZCBsem1hIG1vZHVsZXMgbm93IGVhY2ggY29udGFpbiBhbiBvcGVuKCkgZnVuY3Rpb24sIGFsbG93aW5nCisgIGNvbXByZXNzZWQgZmlsZXMgdG8gcmVhZGlseSBiZSBvcGVuZWQgaW4gdGV4dCBtb2RlIGFzIHdlbGwgYXMgYmluYXJ5IG1vZGUuCisKKy0gQloyRmlsZS5fX2luaXRfXygpIGFuZCBMWk1BRmlsZS5fX2luaXRfXygpIG5vdyBhY2NlcHQgYSBmaWxlIG9iamVjdCBhcyB0aGVpcgorICBmaXJzdCBhcmd1bWVudCwgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGEgc2VwYXJhdGUgImZpbGVvYmoiIGFyZ3VtZW50LgorCistIGd6aXAub3BlbigpIG5vdyBhY2NlcHRzIGZpbGUgb2JqZWN0cyBhcyB3ZWxsIGFzIGZpbGVuYW1lcy4KKworLSBJc3N1ZSAjMTQ5OTI6IG9zLm1ha2VkaXJzKHBhdGgsIGV4aXN0X29rPVRydWUpIHdvdWxkIHJhaXNlIGFuIE9TRXJyb3IKKyAgd2hlbiB0aGUgcGF0aCBleGlzdGVkIGFuZCBoYWQgdGhlIFNfSVNHSUQgbW9kZSBiaXQgc2V0IHdoZW4gaXQgd2FzCisgIG5vdCBleHBsaWNpdGx5IGFza2VkIGZvci4gIFRoaXMgaXMgbm8gbG9uZ2VyIGFuIGV4Y2VwdGlvbiBhcyBta2RpcgorICBjYW5ub3QgY29udHJvbCBpZiB0aGUgT1Mgc2V0cyB0aGF0IGJpdCBmb3IgaXQgb3Igbm90LgorCistIElzc3VlICMxNDk4OTogTWFrZSB0aGUgQ0dJIGVuYWJsZSBvcHRpb24gdG8gaHR0cC5zZXJ2ZXIgYXZhaWxhYmxlIHZpYSBjb21tYW5kCisgIGxpbmUuCisKKy0gSXNzdWUgIzE0OTg3OiBBZGQgYSBtaXNzaW5nIGltcG9ydCBzdGF0ZW1lbnQgdG8gaW5zcGVjdC4KKworLSBJc3N1ZSAjMTA3OTogZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXIgbm93IGNvcnJlY3RseSBwYXJzZXMgYWxsIHRoZSBleGFtcGxlcworICBpbiBSRkMyMDQ3LiAgVGhlcmUgaXMgYSBuZWNlc3NhcnkgdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2U6IHRoZSBsZWFkaW5nIGFuZC9vcgorICB0cmFpbGluZyB3aGl0ZXNwYWNlIG9uIEFTQ0lJIHBhcnRzIGlzIG5vdyBwcmVzZXJ2ZWQuCisKKy0gSXNzdWUgIzE0OTY5OiBCZXR0ZXIgaGFuZGxpbmcgb2YgZXhjZXB0aW9uIGNoYWluaW5nIGluIGNvbnRleHRsaWIuRXhpdFN0YWNrCisKKy0gSXNzdWUgIzE0OTYyOiBVcGRhdGUgdGV4dCBjb2xvcmluZyBpbiBJRExFIHNoZWxsIHdpbmRvdyBhZnRlciBjaGFuZ2luZworICBvcHRpb25zLiAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzE0OTYzOiBDb252ZXJ0IGNvbnRleHRsaWIuRXhpdFN0YWNrLl9fZXhpdF9fIHRvIHVzZSBhbiBpdGVyYXRpdmUKKyAgYWxnb3JpdGhtIChQYXRjaCBieSBBbG9uIEhvcmV2KQorCistIElzc3VlICMxNDc4NTogQWRkIHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIHRvIGhlbHAgZGVidWcgbG93LWxldmVsIG1lbW9yeQorICBhbGxvY2F0aW9uIGlzc3VlcworCistIElzc3VlICMxNDQ0MzogRW5zdXJlIHRoYXQgLnB5IGZpbGVzIGFyZSBieXRlLWNvbXBpbGVkIHdpdGggdGhlIGNvcnJlY3QgUHl0aG9uCisgIGV4ZWN1dGFibGUgd2l0aGluIGJkaXN0X3JwbSBldmVuIG9uIG9sZGVyIHZlcnNpb25zIG9mIFJQTQorCitDLUFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTM3ODM6IEluYWR2ZXJ0ZW50IGFkZGl0aW9ucyB0byB0aGUgcHVibGljIEMgQVBJIGluIHRoZSBQRVAgMzgwCisgIGltcGxlbWVudGF0aW9uIGhhdmUgZWl0aGVyIGJlZW4gcmVtb3ZlZCBvciBtYXJrZWQgYXMgcHJpdmF0ZSBpbnRlcmZhY2VzLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTUwMDA6IFN1cHBvcnQgdGhlICJ1bmlxdWUiIHgzMiBhcmNoaXRlY3R1cmUgaW4gX3Bvc2l4c3VicHJvY2Vzcy5jLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1MDgxOiBEb2N1bWVudCBQeVN0YXRlX0ZpbmRNb2R1bGUuCisgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTQ4MTQ6IEFkZGVkIGZpcnN0IGRyYWZ0IG9mIGlwYWRkcmVzcyBtb2R1bGUgQVBJIHJlZmVyZW5jZQorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQ3Njk6IHRlc3RfY2FwaSBub3cgaGFzIFNraXBpdGVtVGVzdCwgd2hpY2ggY2xldmVybHkgY2hlY2tzCisgIGZvciAicGFyaXR5IiBiZXR3ZWVuIFB5QXJnX1BhcnNlVHVwbGUoKSBhbmQgdGhlIFB5dGhvbi9nZXRhcmdzLmMgc3RhdGljCisgIGZ1bmN0aW9uIHNraXBpdGVtKCkgZm9yIGFsbCBwb3NzaWJsZSAiZm9ybWF0IHVuaXRzIi4KKworLSB0ZXN0X25udHBsaWIgbm93IHRvbGVyYXRlcyBiZWluZyBydW4gZnJvbSBiZWhpbmQgTk5UUCBnYXRld2F5cyB0aGF0IGFkZAorICAiWC1BbnRpdmlydXMiIGhlYWRlcnMgdG8gYXJ0aWNsZXMKKworLSBJc3N1ZSAjMTUwNDM6IHRlc3RfZ2RiIGlzIG5vdyBza2lwcGVkIGVudGlyZWx5IGlmIGdkYiBzZWN1cml0eSBzZXR0aW5ncworICBibG9jayBsb2FkaW5nIG9mIHRoZSBnZGIgaG9va3MKKworLSBJc3N1ZSAjMTQ5NjM6IEFkZCB0ZXN0IGNhc2VzIGZvciBleGNlcHRpb24gaGFuZGxpbmcgYmVoYXZpb3VyCisgIGluIGNvbnRleHRsaWIuRXhpdFN0YWNrIChJbml0aWFsIHBhdGNoIGJ5IEFsb24gSG9yZXYpCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxMzU5MDogSW1wcm92ZSBzdXBwb3J0IGZvciBPUyBYIFhjb2RlIDQ6CisgICAgKiBUcnkgdG8gYXZvaWQgYnVpbGRpbmcgUHl0aG9uIG9yIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggcHJvYmxlbWF0aWMKKyAgICAgIGxsdm0tZ2NjIGNvbXBpbGVyLgorICAgICogU2luY2UgWGNvZGUgNCByZW1vdmVzIHBwYyBzdXBwb3J0LCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkcyBub3cKKyAgICAgIGNoZWNrIGZvciBwcGMgY29tcGlsZXIgc3VwcG9ydCBhbmQgYXV0b21hdGljYWxseSByZW1vdmUgcHBjIGFuZAorICAgICAgcHBjNjQgYXJjaHMgd2hlbiBub3QgYXZhaWxhYmxlLgorICAgICogU2luY2UgWGNvZGUgNCBubyBsb25nZXIgaW5zdGFsbCBTREtzIGluIGRlZmF1bHQgbG9jYXRpb25zLAorICAgICAgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93IHJldmVydCB0byB1c2luZyBpbnN0YWxsZWQgaGVhZGVycworICAgICAgYW5kIGxpYnMgaWYgdGhlIFNESyB1c2VkIHRvIGJ1aWxkIHRoZSBpbnRlcnByZXRlciBpcyBub3QKKyAgICAgIGF2YWlsYWJsZS4KKyAgICAqIFVwZGF0ZSAuL2NvbmZpZ3VyZSB0byB1c2UgYmV0dGVyIGRlZmF1bHRzIGZvciB1bml2ZXJzYWwgYnVpbGRzOworICAgICAgaW4gcGFydGljdWxhciwgLS1lbmFibGUtdW5pdmVyc2Fsc2RrPXllcyB1c2VzIHRoZSBYY29kZSBkZWZhdWx0CisgICAgICBTREsgYW5kIC0td2l0aC11bml2ZXJzYWwtYXJjaHMgbm93IGRlZmF1bHRzIHRvICJpbnRlbCIgaWYgcHBjCisgICAgICBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICMxNDIyNTogRml4IFVuaWNvZGUgc3VwcG9ydCBmb3IgY3Vyc2VzICgjMTI1NjcpIG9uIE9TIFgKKworLSBJc3N1ZSAjMTQ5Mjg6IEZpeCBpbXBvcnRsaWIgYm9vdHN0cmFwIGlzc3VlcyBieSB1c2luZyBhIGN1c3RvbSBleGVjdXRhYmxlCisgIChNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliKSB0byBidWlsZCBQeXRob24vaW1wb3J0bGliLmguCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDMxLU1heS0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ4MzU6IE1ha2UgcGxpc3RsaWIgb3V0cHV0IGVtcHR5IGFycmF5cyAmIGRpY3RzIGxpa2UgT1MgWC4KKyAgUGF0Y2ggYnkgU2lkbmV5IFNhbiBNYXJ0w61uLgorCistIElzc3VlICMxNDc0NDogVXNlIHRoZSBuZXcgX1B5VW5pY29kZVdyaXRlciBpbnRlcm5hbCBBUEkgdG8gc3BlZWQgdXAKKyAgc3RyJWFyZ3MgYW5kIHN0ci5mb3JtYXQoYXJncykuCisKKy0gSXNzdWUgIzE0OTMwOiBNYWtlIG1lbW9yeXZpZXcgb2JqZWN0cyB3ZWFrcmVmYWJsZS4KKworLSBJc3N1ZSAjMTQ3NzU6IEZpeCBhIHBvdGVudGlhbCBxdWFkcmF0aWMgZGljdCBidWlsZC11cCBkdWUgdG8gdGhlIGdhcmJhZ2UKKyAgY29sbGVjdG9yIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIHVudHJhY2sgZGljdHMuCisKKy0gSXNzdWUgIzE0ODU3OiBmaXggcmVncmVzc2lvbiBpbiByZWZlcmVuY2VzIHRvIFBFUCAzMTM1IGltcGxpY2l0IF9fY2xhc3NfXworICBjbG9zdXJlIHZhcmlhYmxlIChSZW9wZW5zIGlzc3VlICMxMjM3MCkKKworLSBJc3N1ZSAjMTQ3MTIgKFBFUCA0MDUpOiBWaXJ0dWFsIGVudmlyb25tZW50cy4gSW1wbGVtZW50ZWQgYnkgVmluYXkgU2FqaXAuCisKKy0gSXNzdWUgIzE0NjYwIChQRVAgNDIwKTogTmFtZXNwYWNlIHBhY2thZ2VzLiBJbXBsZW1lbnRlZCBieSBFcmljIFNtaXRoLgorCistIElzc3VlICMxNDQ5NDogRml4IF9fZnV0dXJlX18ucHkgYW5kIGl0cyBkb2N1bWVudGF0aW9uIHRvIG5vdGUgdGhhdAorICBhYnNvbHV0ZSBpbXBvcnRzIGFyZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBpbiAzLjAgaW5zdGVhZCBvZiAyLjcuCisgIFBhdGNoIGJ5IFN2ZW4gTWFybmFjaC4KKworLSBJc3N1ZSAjOTI2MDogQSBmaW5lci1ncmFpbmVkIGltcG9ydCBsb2NrLiAgTW9zdCBvZiB0aGUgaW1wb3J0IHNlcXVlbmNlCisgIG5vdyB1c2VzIHBlci1tb2R1bGUgbG9ja3MgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCBpbXBvcnQgbG9jaywgZWxpbWluYXRpbmcKKyAgd2VsbC1rbm93biBpc3N1ZXMgd2l0aCB0aHJlYWRzIGFuZCBpbXBvcnRzLgorCistIElzc3VlICMxNDYyNDogVVRGLTE2IGRlY29kaW5nIGlzIG5vdyAzeCB0byA0eCBmYXN0ZXIgb24gdmFyaW91cyBpbnB1dHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gYXNkbF9zZXEgYW5kIGFzZGxfaW50X3NlcSBhcmUgbm93IFB5X3NzaXplX3Qgc2l6ZWQuCisKKy0gSXNzdWUgIzE0MTMzIChQRVAgNDE1KTogSW1wbGVtZW50IHN1cHByZXNzaW9uIG9mIF9fY29udGV4dF9fIGRpc3BsYXkgd2l0aCBhbgorICBhdHRyaWJ1dGUgb24gQmFzZUV4Y2VwdGlvbi4gVGhpcyByZXBsYWNlcyB0aGUgb3JpZ2luYWwgbWVjaGFuaXNtIG9mIFBFUCA0MDkuCisKKy0gSXNzdWUgIzE0NDE3OiBNdXRhdGluZyBhIGRpY3QgZHVyaW5nIGxvb2t1cCBub3cgcmVzdGFydHMgdGhlIGxvb2t1cCBpbnN0ZWFkCisgIG9mIHJhaXNpbmcgYSBSdW50aW1lRXJyb3IgKHVuZG9lcyBpc3N1ZSAjMTQyMDUpLgorCistIElzc3VlICMxNDczODogU3BlZWQtdXAgVVRGLTggZGVjb2Rpbmcgb24gbm9uLUFTQ0lJIGRhdGEuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNDcwMDogRml4IHR3byBicm9rZW4gYW5kIHVuZGVmaW5lZC1iZWhhdmlvdXItaW5kdWNpbmcgb3ZlcmZsb3cgY2hlY2tzCisgIGluIG9sZC1zdHlsZSBzdHJpbmcgZm9ybWF0dGluZy4KKworLSBJc3N1ZSAjMTQ3MDU6IFRoZSBQeUFyZ19QYXJzZSgpIGZhbWlseSBvZiBmdW5jdGlvbnMgbm93IHN1cHBvcnQgdGhlICdwJyBmb3JtYXQKKyAgdW5pdCwgd2hpY2ggYWNjZXB0cyBhICJib29sZWFuIHByZWRpY2F0ZSIgYXJndW1lbnQuICBJdCBjb252ZXJ0cyBhbnkgUHl0aG9uCisgIHZhbHVlIGludG8gYW4gaW50ZWdlci0tMCBpZiBpdCBpcyAiZmFsc2UiLCBhbmQgMSBvdGhlcndpc2UuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTA6IFVzZSBtb25vdG9uaWMgY2xvY2sgaW5zdGVhZCBvZiBzeXN0ZW0gY2xvY2sgaW4gdGhlIHNjaGVkLAorICBzdWJwcm9jZXNzIGFuZCB0cmFjZSBtb2R1bGVzLgorCistIElzc3VlICMxNDk1ODogQ2hhbmdlIElETEUgc3lzdGF4IGhpZ2hsaWdodGluZyB0byByZWNvZ25pemUgYWxsIHN0cmluZyBhbmQKKyAgYnl0ZSBsaXRlcmFscyBzdXBwb3J0ZWQgaW4gUHl0aG9uIDMuMy4KKworLSBJc3N1ZSAjMTA5OTc6IFByZXZlbnQgYSBkdXBsaWNhdGUgZW50cnkgaW4gSURMRSdzICJSZWNlbnQgRmlsZXMiIG1lbnUuCisKKy0gSXNzdWUgIzE0NDQzOiBUZWxsIHJwbWJ1aWxkIHRvIHVzZSB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIFB5dGhvbiBpbgorICBiZGlzdF9ycG0uIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzE0OTI5OiBTdG9wIElkbGUgMy54IGZyb20gY2xvc2luZyBvbiBVbmljb2RlIGRlY29kZSBlcnJvcnMgd2hlbgorICBncmVwcGluZy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEyNTE1OiBlbWFpbCBub3cgcmVnaXN0ZXJzIGEgZGVmZWN0IGlmIGl0IGdldHMgdG8gRU9GIHdoaWxlIHBhcnNpbmcKKyAgYSBNSU1FIHBhcnQgd2l0aG91dCBzZWVpbmcgdGhlIGNsb3NpbmcgTUlNRSBib3VuZGFyeS4KKworLSBJc3N1ZSAjMTI1MTA6IEF0dGVtcHRpbmcgdG8gZ2V0IGludmFsaWQgdG9vbHRpcCBubyBsb25nZXIgY2xvc2VzIElkbGUuCisgIE90aGVyIHRvb2x0aXBzcyBoYXZlIGJlZW4gY29ycmVjdGVkIG9yIGltcHJvdmVkIGFuZCB0aGUgbnVtYmVyIG9mIHRlc3RzCisgIGhhcyBiZWVuIHRyaXBsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNjcyNTY4OiBlbWFpbCBub3cgYWx3YXlzIGRlY29kZXMgYmFzZTY0IHBheWxvYWRzLCBhZGRpbmcgcGFkZGluZyBhbmQKKyAgaWdub3Jpbmcgbm9uLWJhc2U2NC1hbHBoYWJldCBjaGFyYWN0ZXJzIGlmIG5lZWRlZCwgYW5kIHJlZ2lzdGVyaW5nIGRlZmVjdHMKKyAgZm9yIGFueSBzdWNoIHByb2JsZW1zLgorCistIElzc3VlICMxNDkyNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCB3aGVuIHRoZSBwYXJzZXIgZGVjaWRlcyB0aGF0IHRoZXJlCisgIGlzIGEgbWlzc2luZyBoZWFkZXIvYm9keSBzZXBhcmF0b3IgbGluZS4gIE1hbGZvcm1lZEhlYWRlckRlZmVjdCwgd2hpY2ggdGhlCisgIGV4aXN0aW5nIGNvZGUgd291bGQgbmV2ZXIgYWN0dWFsbHkgZ2VuZXJhdGUsIGlzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzEwMzY1OiBGaWxlIG9wZW4gZGlhbG9nIG5vdyB3b3JrcyBpbnN0ZWFkIG9mIGNyYXNoaW5nIGV2ZW4gd2hlbgorICB0aGUgcGFyZW50IHdpbmRvdyBpcyBjbG9zZWQgYmVmb3JlIHRoZSBkaWFsb2cuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICM4NzM5OiBVcGRhdGVkIHNtdHBkIHRvIHN1cHBvcnQgUkZDIDUzMjEsIGFuZCBhZGRlZCBzdXBwb3J0IGZvciB0aGUKKyAgUkZDIDE4NzAgU0laRSBleHRlbnNpb24uCisKKy0gSXNzdWUgIzY2NTE5NDogQWRkZWQgYSBsb2NhbHRpbWUgZnVuY3Rpb24gdG8gZW1haWwudXRpbHMgdG8gcHJvdmlkZSBhbgorICBhd2FyZSBsb2NhbCBkYXRldGltZSBmb3IgdXNlIGluIHNldHRpbmcgRGF0ZSBoZWFkZXJzLgorCistIElzc3VlICMxMjU4NjogQWRkZWQgbmV3IHByb3Zpc2lvbmFsIHBvbGljaWVzIHRoYXQgaW1wbGVtZW50IGNvbnZlbmllbnQKKyAgdW5pY29kZSBzdXBwb3J0IGZvciBlbWFpbCBoZWFkZXJzLiAgU2VlIFdoYXQncyBOZXcgZm9yIGRldGFpbHMuCisKKy0gSXNzdWUgIzE0NzMxOiBSZWZhY3RvcmVkIGVtYWlsIFBvbGljeSBmcmFtZXdvcmsgdG8gc3VwcG9ydCBmdWxsIGJhY2t3YXJkCisgIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4yIGJ5IGRlZmF1bHQgeWV0IGFsbG93IGZvciB0aGUgaW50cm9kdWN0aW9uIG9mCisgIG5ldyBmZWF0dXJlcyB0aHJvdWdoIG5ldyBwb2xpY2llcy4gIE5vdGUgdGhhdCBQb2xpY3kubXVzdF9iZV83Yml0IGlzIHJlbmFtZWQKKyAgdG8gY3RlX3R5cGUuCisKKy0gSXNzdWUgIzE0ODc2OiBVc2UgdXNlci1zZWxlY3RlZCBmb250IGZvciBoaWdobGlnaHQgY29uZmlndXJhdGlvbi4KKworLSBJc3N1ZSAjMTQ5MjA6IEZpeCB0aGUgaGVscCh1cmxsaWIucGFyc2UpIGZhaWx1cmUgb24gbG9jYWxlIEMgb24gdGVybWluYWxzLgorICBIYXZlIGFzY2lpIGNoYXJhY3RlcnMgaW4gaGVscC4KKworLSBJc3N1ZSAjMTQ1NDg6IE1ha2UgbXVsdGlwcm9jZXNzaW5nIGZpbmFsaXplcnMgY2hlY2sgcGlkIGJlZm9yZQorICBydW5uaW5nIHRvIGNvcGUgd2l0aCBwb3NzaWJpbGl0eSBvZiBnYyBydW5uaW5nIGp1c3QgYWZ0ZXIgZm9yay4KKworLSBJc3N1ZSAjMTQ4NjM6IFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBvcy5mZG9wZW4oKSB0byByZWZsZWN0IHRoZQorICBmYWN0IHRoYXQgaXQncyBvbmx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBvcGVuKCkgYW55bW9yZS4KKworLSBJc3N1ZSAjMTQwMzY6IEFkZCBhbiBhZGRpdGlvbmFsIGNoZWNrIHRvIHZhbGlkYXRlIHRoYXQgcG9ydCBpbiB1cmxwYXJzZSBkb2VzCisgIG5vdCBnbyBpbiBpbGxlZ2FsIHJhbmdlIGFuZCByZXR1cm5zIE5vbmUuCisKKy0gSXNzdWUgIzE0ODYyOiBBZGQgbWlzc2luZyBuYW1lcyB0byBvcy5fX2FsbF9fCisKKy0gSXNzdWUgIzE0ODc1OiBVc2UgZmxvYXQoJ2luZicpIGluc3RlYWQgb2YgZmxvYXQoJzFlNjY2NjYnKSBpbiB0aGUganNvbiBtb2R1bGUuCisKKy0gSXNzdWUgIzEzNTg1OiBBZGRlZCBjb250ZXh0bGliLkV4aXRTdGFjaworCistIFBFUCAzMTQ0LCBJc3N1ZSAjMTQ4MTQ6IEFkZGVkIHRoZSBpcGFkZHJlc3MgbW9kdWxlCisKKy0gSXNzdWUgIzE0NDI2OiBDb3JyZWN0IHRoZSBEYXRlIGZvcm1hdCBpbiBFeHBpcmVzIGF0dHJpYnV0ZSBvZiBTZXQtQ29va2llCisgIEhlYWRlciBpbiBDb29raWUucHkuCisKKy0gSXNzdWUgIzE0NTg4OiBUaGUgdHlwZXMgbW9kdWxlIG5vdyBwcm92aWRlIG5ld19jbGFzcygpIGFuZCBwcmVwYXJlX2NsYXNzKCkKKyAgZnVuY3Rpb25zIHRvIHN1cHBvcnQgUEVQIDMxMTUgY29tcGxpYW50IGR5bmFtaWMgY2xhc3MgY3JlYXRpb24uIFBhdGNoIGJ5CisgIERhbmllbCBVcmJhbiBhbmQgTmljayBDb2dobGFuLgorCistIElzc3VlICMxMzE1MjogQWxsb3cgdG8gc3BlY2lmeSBhIGN1c3RvbSB0YWJzaXplIGZvciBleHBhbmRpbmcgdGFicyBpbgorICB0ZXh0d3JhcC4gUGF0Y2ggYnkgSm9obiBGZXVlcnN0ZWluLgorCistIElzc3VlICMxNDcyMTogU2VuZCB0aGUgY29ycmVjdCAnQ29udGVudC1sZW5ndGg6IDAnIGhlYWRlciB3aGVuIHRoZSBib2R5IGlzIGFuCisgIGVtcHR5IHN0cmluZyAnJy4gSW5pdGlhbCBQYXRjaCBjb250cmlidXRlZCBieSBBcnZlIEtudWRzZW4uCisKKy0gSXNzdWUgIzE0MDcyOiBGaXggcGFyc2luZyBvZiAndGVsJyBVUklzIGluIHVybHBhcnNlIGJ5IG1ha2luZyB0aGUgY2hlY2sgZm9yCisgIHBvcnRzIHN0cmljdGVyLgorCistIElzc3VlICM5Mzc0OiBHZW5lcmljIHBhcnNpbmcgb2YgcXVlcnkgYW5kIGZyYWdtZW50IHBvcnRpb25zIG9mIHVybCBmb3IgYW55CisgIHNjaGVtZS4gU3VwcG9ydGVkIGJvdGggYnkgUkZDMzk4NiBhbmQgUkZDMjM5Ni4KKworLSBJc3N1ZSAjMTQ3OTg6IEZpeCB0aGUgZnVuY3Rpb25zIGluIHB5Y2xiciB0byByYWlzZSBhbiBJbXBvcnRFcnJvcgorICB3aGVuIHRoZSBmaXJzdCBwYXJ0IG9mIGEgZG90dGVkIG5hbWUgaXMgbm90IGEgcGFja2FnZS4gUGF0Y2ggYnkKKyAgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzEyMDk4OiBtdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cyBub3cgc3RhcnRzIGNoaWxkIHByb2Nlc3NlcworICB1c2luZyB0aGUgc2FtZSBzeXMuZmxhZ3MgYXMgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgU2VyZ2V5IE1lemVudHNldi4KKworLSBJc3N1ZSAjMTMwMzE6IFNtYWxsIHNwZWVkLXVwIGZvciB0YXJmaWxlIHdoZW4gdW56aXBwaW5nIHRhcmZpbGVzLgorICBQYXRjaCBieSBKdXN0aW4gUGVlbC4KKworLSBJc3N1ZSAjMTQ3ODA6IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBub3cgaGFzIGEgYGBjYWRlZmF1bHRgYCBhcmd1bWVudAorICB0byB1c2UgdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUgc3RvcmUuICBJbml0aWFsIHBhdGNoIGJ5IEphbWVzIE9ha2xleS4KKworLSBJc3N1ZSAjMTQ4Mjk6IEZpeCBiaXNlY3QgYW5kIHJhbmdlKCkgaW5kZXhpbmcgd2l0aCBsYXJnZSBpbmRpY2VzCisgICg+PSAyICoqIDMyKSB1bmRlciA2NC1iaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTQ3MzI6IFRoZSBfY3N2IG1vZHVsZSBub3cgdXNlcyBQRVAgMzEyMSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTQ4MDk6IEFkZCBIVFRQIHN0YXR1cyBjb2RlcyBpbnRyb2R1Y2VkIGJ5IFJGQyA2NTg1IHRvIGh0dHAuc2VydmVyCisgIGFuZCBodHRwLmNsaWVudC4gUGF0Y2ggYnkgRXVuZ0p1biBZaS4KKworLSBJc3N1ZSAjMTQ3Nzc6IHRraW50ZXIgbWF5IHJldHVybiB1bmRlY29kZWQgVVRGLTggYnl0ZXMgYXMgYSBzdHJpbmcgd2hlbgorICBhY2Nlc3NpbmcgdGhlIFRrIGNsaXBib2FyZC4gIE1vZGlmeSBjbGlwYm9hZF9nZXQoKSB0byBmaXJzdCByZXF1ZXN0IHR5cGUKKyAgVVRGOF9TVFJJTkcgd2hlbiBubyBzcGVjaWZpYyB0eXBlIGlzIHJlcXVlc3RlZCBpbiBhbiBYMTEgd2luZG93aW5nCisgIGVudmlyb25tZW50LCBmYWxsaW5nIGJhY2sgdG8gdGhlIGN1cnJlbnQgZGVmYXVsdCB0eXBlIFNUUklORyBpZiB0aGF0IGZhaWxzLgorICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTQ3NzM6IEZpeCBvcy5md2FsaygpIGZhaWxpbmcgb24gZGFuZ2xpbmcgc3ltbGlua3MuCisKKy0gSXNzdWUgIzEyNTQxOiBCZSBsZW5pZW50IHdpdGggcXVvdGVzIGFyb3VuZCBSZWFsbSBmaWVsZCBvZiBIVFRQIEJhc2ljCisgIEF1dGhlbnRhdGlvbiBpbiB1cmxsaWIyLgorCistIElzc3VlICMxNDgwNzogbW92ZSB1bmRvY3VtZW50ZWQgdGFyZmlsZS5maWxlbW9kZSgpIHRvIHN0YXQuZmlsZW1vZGUoKSBhbmQgYWRkCisgIGRvYyBlbnRyeS4gQWRkIHRhcmZpbGUuZmlsZW1vZGUgYWxpYXMgd2l0aCBkZXByZWNhdGlvbiB3YXJuaW5nLgorCistIElzc3VlICMxMzgxNTogVGFyRmlsZS5leHRyYWN0ZmlsZSgpIG5vdyByZXR1cm5zIGlvLkJ1ZmZlcmVkUmVhZGVyIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NTMyOiBBZGQgYSBzZWN1cmVfY29tcGFyZSgpIGhlbHBlciB0byB0aGUgaG1hYyBtb2R1bGUsIHRvIG1pdGlnYXRlCisgIHRpbWluZyBhdHRhY2tzLiBQYXRjaCBieSBKb24gT2JlcmhlaWRlLgorCistIEFkZCBpbXBvcnRsaWIudXRpbC5yZXNvbHZlX25hbWUoKS4KKworLSBJc3N1ZSAjMTQzNjY6IFN1cHBvcnQgbHptYSBjb21wcmVzc2lvbiBpbiB6aXAgZmlsZXMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEzOTU5OiBJbnRyb2R1Y2UgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgYW5kIGRvY3VtZW50CisgIGltcC5maW5kX21vZHVsZS9sb2FkX21vZHVsZSBhcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxNDA4Mjogc2h1dGlsLmNvcHkyKCkgbm93IGNvcGllcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBpZiBwb3NzaWJsZS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk1OTogTWFrZSBpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIubG9hZF9tb2R1bGUoKS9nZXRfZmlsZW5hbWUoKSBhbmQKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLmxvYWRfbW9kdWxlKCkgaGF2ZSB0aGVpciBzaW5nbGUKKyAgYXJndW1lbnQgYmUgb3B0aW9uYWwuIEFsbG93cyBmb3IgdGhlIHJlcGxhY2VtZW50IChhbmQgdGh1cyBkZXByZWNhdGlvbikgb2YKKyAgaW1wLmxvYWRfc291cmNlKCkvbG9hZF9wYWNrYWdlKCkvbG9hZF9jb21waWxlZCgpLgorCistIElzc3VlICMxMzk1OTogaW1wLmdldF9zdWZmaXhlcygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHRoZSBuZXcKKyAgYXR0cmlidXRlcyBvbiBpbXBvcnRsaWIubWFjaGluZXJ5OiBTT1VSQ0VfU1VGRklYRVMsIERFQlVHX0JZVEVDT0RFX1NVRkZJWEVTLAorICBPUFRJTUlaRURfQllURUNPREVfU1VGRklYRVMsIEJZVEVDT0RFX1NVRkZJWEVTLCBhbmQgRVhURU5TSU9OX1NVRkZJWEVTLiBUaGlzCisgIGxlZCB0byBhbiBpbmRpcmVjdCBkZXByZWNhdGlvbiBvZiBpbnNwZWN0LmdldG1vZHVsZWluZm8oKS4KKworLSBJc3N1ZSAjMTQ2NjI6IFByZXZlbnQgc2h1dGlsIGZhaWx1cmVzIG9uIE9TIFggd2hlbiBkZXN0aW5hdGlvbiBkb2VzIG5vdAorICBzdXBwb3J0IGNoZmxhZyBvcGVyYXRpb25zLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNDE1NzogRml4IHRpbWUuc3RycHRpbWUgZmFpbGluZyB3aXRob3V0IGEgeWVhciBvbiBGZWJydWFyeSAyOXRoLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzE0NzUzOiBNYWtlIG11bHRpcHJvY2Vzc2luZydzIGhhbmRsaW5nIG9mIG5lZ2F0aXZlIHRpbWVvdXRzCisgIHRoZSBzYW1lIGFzIGl0IHdhcyBpbiBQeXRob24gMy4yLgorCistIElzc3VlICMxNDU4MzogRml4IGltcG9ydGxpYiBidWcgd2hlbiBhIHBhY2thZ2UncyBfX2luaXRfXy5weSB3b3VsZCBmaXJzdAorICBpbXBvcnQgb25lIG9mIGl0cyBtb2R1bGVzIHRoZW4gcmFpc2UgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzE0NzQxOiBGaXggbWlzc2luZyBzdXBwb3J0IGZvciBFbGxpcHNpcyAoJy4uLicpIGluIHBhcnNlciBtb2R1bGUuCisKKy0gSXNzdWUgIzE0Njk3OiBGaXggbWlzc2luZyBzdXBwb3J0IGZvciBzZXQgZGlzcGxheXMgYW5kIHNldCBjb21wcmVoZW5zaW9ucyBpbgorICBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNDcwMTogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3IgJ3JhaXNlIC4uLiBmcm9tJyBpbiBwYXJzZXIgbW9kdWxlLgorCistIEFkZCBzdXBwb3J0IGZvciB0aW1lb3V0cyB0byB0aGUgYWNxdWlyZSgpIG1ldGhvZHMgb2YKKyAgbXVsdGlwcm9jZXNzaW5nJ3MgbG9jay9zZW1hcGhvcmUvY29uZGl0aW9uIHByb3hpZXMuCisKKy0gSXNzdWUgIzEzOTg5OiBBZGQgc3VwcG9ydCBmb3IgdGV4dCBtb2RlIHRvIGd6aXAub3BlbigpLgorCistIElzc3VlICMxNDEyNzogVGhlIG9zLnN0YXQoKSByZXN1bHQgb2JqZWN0IG5vdyBwcm92aWRlcyB0aHJlZSBhZGRpdGlvbmFsCisgIGZpZWxkczogc3RfY3RpbWVfbnMsIHN0X210aW1lX25zLCBhbmQgc3RfYXRpbWVfbnMsIHByb3ZpZGluZyB0aG9zZSB0aW1lcyBhcyBhbgorICBpbnRlZ2VyIHdpdGggbmFub3NlY29uZCByZXNvbHV0aW9uLiAgVGhlIGZ1bmN0aW9ucyBvcy51dGltZSgpLCBvcy5sdXRpbWVzKCksCisgIGFuZCBvcy5mdXRpbWVzKCkgbm93IGFjY2VwdCBhIG5ldyBwYXJhbWV0ZXIsIG5zLCB3aGljaCBhY2NlcHRzIG10aW1lIGFuZCBhdGltZQorICBhcyBpbnRlZ2VycyB3aXRoIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4KKworLSBJc3N1ZSAjMTQxMjcgYW5kICMxMDE0ODogc2h1dGlsLmNvcHlzdGF0IG5vdyBwcmVzZXJ2ZXMgZXhhY3QgbXRpbWUgYW5kIGF0aW1lCisgIG9uIGZpbGVzeXN0ZW1zIHByb3ZpZGluZyBuYW5vc2Vjb25kIHJlc29sdXRpb24uCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY5NTogQnJpbmcgVG9vbHMvcGFyc2VyL3VucGFyc2UucHkgc3VwcG9ydCB1cCB0byBkYXRlIHdpdGgKKyAgdGhlIFB5dGhvbiAzLjMgR3JhbW1hci4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE0NDcyOiBVcGRhdGUgLmdpdGlnbm9yZS4gUGF0Y2ggYnkgTWF0ZWogQ2VwbC4KKworLSBVcGdyYWRlIFdpbmRvd3MgbGlicmFyeSB2ZXJzaW9uczogYnppcCAxLjAuNiwgT3BlblNTTCAxLjAuMWMuCisKKy0gSXNzdWUgIzE0NjkzOiBVbmRlciBub24tV2luZG93cyBwbGF0Zm9ybXMsIGhhc2hsaWIncyBmYWxsYmFjayBtb2R1bGVzIGFyZQorICBhbHdheXMgY29tcGlsZWQsIGV2ZW4gaWYgT3BlblNTTCBpcyBwcmVzZW50IGF0IGJ1aWxkIHRpbWUuCisKKy0gSXNzdWUgIzEzMjEwOiBXaW5kb3dzIGJ1aWxkIG5vdyB1c2VzIFZTMjAxMCwgcG9ydGVkIGZyb20gVlMyMDA4LgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0NTg4OiBUaGUgbGFuZ3VhZ2UgcmVmZXJlbmNlIG5vdyBhY2N1cmF0ZWx5IGRvY3VtZW50cyB0aGUgUHl0aG9uIDMKKyAgY2xhc3MgZGVmaW5pdGlvbiBwcm9jZXNzLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4uCisKKy0gSXNzdWUgIzE0OTQzOiBDb3JyZWN0IGEgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZSBmb3Igd2lucmVnLk9wZW5LZXkKKyAgYW5kIGNvcnJlY3RseSBsaXN0IHRoZSBhcmd1bWVudCBuYW1lcyBpbiB0aGUgZnVuY3Rpb24ncyBleHBsYW5hdGlvbi4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDEtTWF5LTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY5OTogRml4IGNhbGxpbmcgdGhlIGNsYXNzbWV0aG9kIGRlc2NyaXB0b3IgZGlyZWN0bHkuCisKKy0gSXNzdWUgIzE0NDMzOiBQcmV2ZW50IG1zdmNydCBjcmFzaCBpbiBpbnRlcmFjdGl2ZSBwcm9tcHQgd2hlbiBzdGRpbiBpcyBjbG9zZWQuCisKKy0gSXNzdWUgIzE0NTIxOiBNYWtlIHJlc3VsdCBvZiBmbG9hdCgnbmFuJykgYW5kIGZsb2F0KCctbmFuJykgbW9yZSBjb25zaXN0ZW50CisgIGFjcm9zcyBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE0NjQ2OiBfX2ltcG9ydF9fKCkgc2V0cyBfX2xvYWRlcl9fIGlmIHRoZSBsb2FkZXIgZGlkIG5vdC4KKworLSBJc3N1ZSAjMTQ2MDU6IE5vIGxvbmdlciBoYXZlIGltcGxpY2l0IGVudHJpZXMgaW4gc3lzLm1ldGFfcGF0aC4gSWYKKyAgc3lzLm1ldGFfcGF0aCBpcyBmb3VuZCB0byBiZSBlbXB0eSwgcmFpc2UgSW1wb3J0V2FybmluZy4KKworLSBJc3N1ZSAjMTQ2MDU6IE5vIGxvbmdlciBoYXZlIGltcGxpY2l0IGVudHJpZXMgaW4gc3lzLnBhdGhfaG9va3MuIElmCisgIHN5cy5wYXRoX2hvb2tzIGlzIGZvdW5kIHRvIGJlIGVtcHR5LCBhIHdhcm5pbmcgd2lsbCBiZSByYWlzZWQuIE5vbmUgaXMgbm93CisgIGluc2VydGVkIGludG8gc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgaWYgbm8gZmluZGVyIHdhcyBkaXNjb3ZlcmVkLiBUaGlzIGFsc28KKyAgbWVhbnMgaW1wLk51bGxJbXBvcnRlciBpcyBubyBsb25nZXIgaW1wbGljaXRseSB1c2VkLgorCistIElzc3VlICMxMzkwMzogSW1wbGVtZW50IFBFUCA0MTIuIEluZGl2aWR1YWwgZGljdGlvbmFyeSBpbnN0YW5jZXMgY2FuIG5vdyBzaGFyZQorICB0aGVpciBrZXlzIHdpdGggb3RoZXIgZGljdGlvbmFyaWVzLiBDbGFzc2VzIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgdG8gc2hhcmUKKyAgdGhlaXIgaW5zdGFuY2UgZGljdGlvbmFyeSBrZXlzIGZvciBpbXByb3ZlZCBtZW1vcnkgYW5kIHBlcmZvcm1hbmNlLgorCistIElzc3VlICMxMTYwMyAoYWdhaW4pOiBTZXR0aW5nIF9fcmVwcl9fIHRvIF9fc3RyX18gbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvcgorICB3aGVuIHJlcHIoKSBvciBzdHIoKSBpcyBjYWxsZWQgb24gc3VjaCBhbiBvYmplY3QuCisKKy0gSXNzdWUgIzE0NjU4OiBGaXggYmluZGluZyBhIHNwZWNpYWwgbWV0aG9kIHRvIGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiBvZiBhCisgIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBkaWZmZXJlbnQgbmFtZS4KKworLSBJc3N1ZSAjMTQ2MzA6IEZpeCBhIG1lbW9yeSBhY2Nlc3MgYnVnIGZvciBpbnN0YW5jZXMgb2YgYSBzdWJjbGFzcyBvZiBpbnQKKyAgd2l0aCB2YWx1ZSAwLgorCistIElzc3VlICMxNDMzOTogU3BlZWQgaW1wcm92ZW1lbnRzIHRvIGJpbiwgb2N0IGFuZCBoZXggZnVuY3Rpb25zLiAgUGF0Y2ggYnkKKyAgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQwOTg6IE5ldyBmdW5jdGlvbnMgUHlFcnJfR2V0RXhjSW5mbyBhbmQgUHlFcnJfU2V0RXhjSW5mby4KKyAgUGF0Y2ggYnkgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMTQzODU6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gdHlwZSBmb3IgdGhlIF9fYnVpbHRpbnNfXworICBuYW1lc3BhY2UsIGluc3RlYWQgb2YgYSBkaWN0LiBJdCBjYW4gYmUgdXNlZCBmb3Igc2FuZGJveGluZyBmb3IgZXhhbXBsZS4KKyAgUmFpc2UgYWxzbyBhIE5hbWVFcnJvciBpbnN0ZWFkIG9mIEltcG9ydEVycm9yIGlmIF9fYnVpbGRfY2xhc3NfXyBuYW1lIGlmIG5vdAorICBmb3VuZCBpbiBfX2J1aWx0aW5zX18uCisKKy0gSXNzdWUgIzEyNTk5OiBCZSBtb3JlIHN0cmljdCBpbiBhY2NlcHRpbmcgTm9uZSBjb21wYXJlZCB0byBhIGZhbHNlLWxpa2UKKyAgb2JqZWN0IGZvciBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlciBhbmQKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLgorCistIElzc3VlICMxNDYxMjogRml4IGp1bXBpbmcgYXJvdW5kIHdpdGggYmxvY2tzIGJ5IHNldHRpbmcgZl9saW5lbm8uCisKKy0gSXNzdWUgIzE0NTkyOiBBdHRlbXB0aW5nIGEgcmVsYXRpdmUgaW1wb3J0IHcvbyBfX3BhY2thZ2VfXyBvciBfX25hbWVfXyBzZXQgaW4KKyAgZ2xvYmFscyByYWlzZXMgYSBLZXlFcnJvci4KKworLSBJc3N1ZSAjMTQ2MDc6IEZpeCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIHdoaWNoIHN0YXJ0ZWQgd2l0aCBgYF9fYGAuCisKKy0gSXNzdWUgIzEwODU0OiBUaGUgSW1wb3J0RXJyb3IgcmFpc2VkIHdoZW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSBvbiBXaW5kb3dzCisgIGZhaWxzIHRvIGltcG9ydCBub3cgdXNlcyB0aGUgbmV3IHBhdGggYW5kIG5hbWUgYXR0cmlidXRlcyBmcm9tCisgIElzc3VlICMxNTU5NTQ5LgorCistIElzc3VlICMxMzg4OTogQ2hlY2sgYW5kIChpZiBuZWNlc3NhcnkpIHNldCBGUFUgY29udHJvbCB3b3JkIGJlZm9yZSBjYWxsaW5nCisgIGFueSBvZiB0aGUgZHRvYS5jIHN0cmluZyA8LT4gZmxvYXQgY29udmVyc2lvbiBmdW5jdGlvbnMsIG9uIE1TVkMgYnVpbGRzIG9mCisgIFB5dGhvbi4gIFRoaXMgZml4ZXMgaXNzdWVzIHdoZW4gZW1iZWRkaW5nIFB5dGhvbiBpbiBhIERlbHBoaSBhcHAuCisKKy0gX19pbXBvcnRfXygpIG5vdyBtYXRjaGVzIFBFUCAzMjggYW5kIGRvY3VtZW50YXRpb24gYnkgZGVmYXVsdGluZyAnaW5kZXgnIHRvIDAKKyAgaW5zdGVhZCBvZiAtMSBhbmQgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgbmVnYXRpdmUgdmFsdWVzLgorCistIElzc3VlICMyMzc3OiBNYWtlIGltcG9ydGxpYiB0aGUgaW1wbGVtZW50YXRpb24gb2YgX19pbXBvcnRfXygpLgorCistIElzc3VlICMxNTU5NTQ5OiBJbXBvcnRFcnJvciBub3cgaGFzICduYW1lJyBhbmQgJ3BhdGgnIGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2V0CisgIHVzaW5nIGtleXdvcmQgYXJndW1lbnRzIHRvIGl0cyBjb25zdHJ1Y3Rvci4gVGhleSBhcmUgY3VycmVudGx5IG5vdCBzZXQgYnkKKyAgaW1wb3J0IGFzIHRoZXkgYXJlIG1lYW50IGZvciB1c2UgYnkgaW1wb3J0bGliLgorCistIElzc3VlICMxNDQ3NDogU2F2ZSBhbmQgcmVzdG9yZSBleGNlcHRpb24gc3RhdGUgaW4gdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoKQorICB3aGlsZSB3cml0aW5nIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHRocmVhZCBsZWF2ZXMgYSB1bmhhbmRsZWQgZXhjZXB0aW9uLgorCistIElzc3VlICMxMzAxOTogRml4IHBvdGVudGlhbCByZWZlcmVuY2UgbGVha3MgaW4gYnl0ZWFycmF5LmV4dGVuZCgpLiAgUGF0Y2gKKyAgYnkgU3VtYW4gU2FoYS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDc2ODogb3MucGF0aC5leHBhbmR1c2VyKCd+L2EnKSBkb2Vzbid0IHdvcmtzIGNvcnJlY3RseSB3aGVuIEhPTUUgaXMgJy8nLgorCistIElzc3VlICMxNDM3MTogU3VwcG9ydCBiemlwMiBpbiB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEzMTgzOiBGaXggcGRiIHNraXBwaW5nIGZyYW1lcyBhZnRlciBoaXR0aW5nIGEgYnJlYWtwb2ludCBhbmQgcnVubmluZworICBzdGVwLiAgUGF0Y2ggYnkgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzE0Njk2OiBGaXggcGFyc2VyIG1vZHVsZSB0byB1bmRlcnN0YW5kICdub25sb2NhbCcgZGVjbGFyYXRpb25zLgorCistIElzc3VlICMxMDk0MTogRml4IGltYXBsaWIuSW50ZXJuYWxkYXRlMnR1cGxlIHRvIHByb2R1Y2UgY29ycmVjdCByZXN1bHQgbmVhcgorICB0aGUgRFNUIHRyYW5zaXRpb24uICBQYXRjaCBieSBKb2UgUGV0ZXJzb24uCisKKy0gSXNzdWUgIzkxNTQ6IEZpeCBwYXJzZXIgbW9kdWxlIHRvIHVuZGVyc3RhbmQgZnVuY3Rpb24gYW5ub3RhdGlvbnMuCisKKy0gSXNzdWUgIzYwODU6IEluIGh0dHAuc2VydmVyLnB5IFNpbXBsZUhUVFBTZXJ2ZXIuYWRkcmVzc19zdHJpbmcgcmV0dXJucyB0aGUKKyAgY2xpZW50IGlwIGFkZHJlc3MgaW5zdGVhZCBjbGllbnQgaG9zdG5hbWUuIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTQzMDk6IERlcHJlY2F0ZSB0aW1lLmNsb2NrKCksIHVzZSB0aW1lLnBlcmZfY291bnRlcigpIG9yCisgIHRpbWUucHJvY2Vzc190aW1lKCkgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTQ0Mjg6IEltcGxlbWVudCB0aGUgUEVQIDQxOC4gQWRkIHRpbWUuZ2V0X2Nsb2NrX2luZm8oKSwKKyAgdGltZS5wZXJmX2NvdW50ZXIoKSBhbmQgdGltZS5wcm9jZXNzX3RpbWUoKSBmdW5jdGlvbnMsIGFuZCByZW5hbWUKKyAgdGltZS5zdGVhZHkoKSB0byB0aW1lLm1vbm90b25pYygpLgorCistIElzc3VlICMxNDY0NjogaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoKSBub3cgc2V0cyBfX2xvYWRlcl9fIGFuZAorICBfX3BhY2thZ2VfXyAod2hlbiBwb3NzaWJsZSkuCisKKy0gSXNzdWUgIzE0NjY0OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIEB1bml0dGVzdC5za2lwe0lmLFVubGVzc30gb24gYQorICB0ZXN0IGNsYXNzIHRoYXQgZG9lc24ndCBpbmhlcml0IGZyb20gVGVzdENhc2UgKGkuZS4gYSBtaXhpbikuCisKKy0gSXNzdWUgIzQ4OTI6IG11bHRpcHJvY2Vzc2luZyBDb25uZWN0aW9ucyBjYW4gbm93IGJlIHRyYW5zZmVycmVkIG92ZXIKKyAgbXVsdGlwcm9jZXNzaW5nIENvbm5lY3Rpb25zLiAgUGF0Y2ggYnkgUmljaGFyZCBPdWRrZXJrIChzYnQpLgorCistIElzc3VlICMxNDE2MDogVGFyRmlsZS5leHRyYWN0ZmlsZSgpIGZhaWxlZCB0byByZXNvbHZlIHN5bWJvbGljIGxpbmtzIHdoZW4KKyAgdGhlIGxpbmtzIHdlcmUgbm90IGxvY2F0ZWQgaW4gYW4gYXJjaGl2ZSBzdWJkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE0NjM4OiBweWRvYyBub3cgdHJlYXRzIG5vbi1zdHJpbmcgX19uYW1lX18gdmFsdWVzIGFzIGlmIHRoZXkKKyAgd2VyZSBtaXNzaW5nLCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzEzNjg0OiBGaXggaHR0cGxpYiB0dW5uZWwgaXNzdWUgb2YgaW5maW5pdGUgbG9vcHMgZm9yIGNlcnRhaW4gc2l0ZXMKKyAgd2hpY2ggc2VuZCBFT0Ygd2l0aG91dCB0cmFpbGluZyBcclxuLgorCistIElzc3VlICMxNDYwNTogQWRkIGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlciwgaW1wb3J0bGliLm1hY2hpbmVyeS4oRmlsZUZpbmRlciwKKyAgU291cmNlRmlsZUxvYWRlciwgU291cmNlbGVzc0ZpbGVMb2FkZXIsIEV4dGVuc2lvbkZpbGVMb2FkZXIpLgorCistIElzc3VlICMxMzk1OTogaW1wLmNhY2hlX2Zyb21fc291cmNlKCkvc291cmNlX2Zyb21fY2FjaGUoKSBub3cgZm9sbG93CisgIG9zLnBhdGguam9pbigpL3NwbGl0KCkgc2VtYW50aWNzIGZvciBwYXRoIG1hbmlwdWxhdGlvbiBpbnN0ZWFkIG9mIGl0cyBwcmlvciwKKyAgY3VzdG9tIHNlbWFudGljcyBvZiBjYXJpbmcgdGhlIHJpZ2h0LW1vc3QgcGF0aCBzZXBhcmF0b3IgZm9yd2FyZCBpbiBwYXRoCisgIGpvaW5pbmcuCisKKy0gSXNzdWUgIzIxOTM6IEFsbG93ICI6IiBjaGFyYWN0ZXIgaW4gQ29va2llIE5BTUUgdmFsdWVzLgorCistIElzc3VlICMxNDYyOTogdG9rZW5pemVyLmRldGVjdF9lbmNvZGluZyB3aWxsIHNwZWNpZnkgdGhlIGZpbGVuYW1lIGluIHRoZQorICBTeW50YXhFcnJvciBleGNlcHRpb24gaWYgZm91bmQgYXQgcmVhZGxpbmUuX19zZWxmX18ubmFtZS4KKworLSBJc3N1ZSAjMTQ2Mjk6IFJhaXNlIFN5bnRheEVycm9yIGluIHRva2VuaXplci5kZXRlY3RfZW5jb2RpbmcgaWYgdGhlCisgIGZpcnN0IHR3byBsaW5lcyBoYXZlIG5vbi1VVEYtOCBjaGFyYWN0ZXJzIHdpdGhvdXQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24uCisKKy0gSXNzdWUgIzE0MzA4OiBGaXggYW4gZXhjZXB0aW9uIHdoZW4gYSAiZHVtbXkiIHRocmVhZCBpcyBpbiB0aGUgdGhyZWFkaW5nCisgIG1vZHVsZSdzIGFjdGl2ZSBsaXN0IGFmdGVyIGEgZm9yaygpLgorCistIElzc3VlICMxMTc1MDogVGhlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyBzY2F0dGVyZWQgaW4gdGhlIF9zdWJwcm9jZXNzIGFuZAorICBfbXVsdGlwcm9jZXNzaW5nLndpbjMyIG1vZHVsZXMgbm93IGxpdmUgaW4gYSBzaW5nbGUgbW9kdWxlICJfd2luYXBpIi4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDA4NzogbXVsdGlwcm9jZXNzaW5nOiBhZGQgQ29uZGl0aW9uLndhaXRfZm9yKCkuIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQ1Mzg6IEhUTUxQYXJzZXIgY2FuIG5vdyBwYXJzZSBjb3JyZWN0bHkgc3RhcnQgdGFncyB0aGF0IGNvbnRhaW4KKyAgYSBiYXJlICcvJy4KKworLSBJc3N1ZSAjMTQ0NTI6IFN5c0xvZ0hhbmRsZXIgbm8gbG9uZ2VyIGluc2VydHMgYSBVVEYtOCBCT00gaW50byB0aGUgbWVzc2FnZS4KKworLSBJc3N1ZSAjMTQzODY6IEV4cG9zZSB0aGUgZGljdF9wcm94eSBpbnRlcm5hbCB0eXBlIGFzIHR5cGVzLk1hcHBpbmdQcm94eVR5cGUuCisKKy0gSXNzdWUgIzEzOTU5OiBNYWtlIGltcC5yZWxvYWQoKSBhbHdheXMgdXNlIGEgbW9kdWxlJ3MgX19sb2FkZXJfXyB0byBwZXJmb3JtCisgIHRoZSByZWxvYWQuCisKKy0gSXNzdWUgIzEzOTU5OiBBZGQgaW1wLnB5IGFuZCByZW5hbWUgdGhlIGJ1aWx0LWluIG1vZHVsZSB0byBfaW1wLCBhbGxvd2luZyBmb3IKKyAgcmUtaW1wbGVtZW50aW5nIHBhcnRzIG9mIHRoZSBtb2R1bGUgaW4gcHVyZSBQeXRob24uCisKKy0gSXNzdWUgIzEzNDk2OiBGaXggcG90ZW50aWFsIG92ZXJmbG93IGluIGJpc2VjdC5iaXNlY3QgYWxnb3JpdGhtIHdoZW4gYXBwbGllZAorICB0byBhIGNvbGxlY3Rpb24gb2Ygc2l6ZSA+IHN5cy5tYXhzaXplIC8gMi4KKworLSBIYXZlIGltcG9ydGxpYiB0YWtlIGFkdmFudGFnZSBvZiBJbXBvcnRFcnJvcidzIG5ldyAnbmFtZScgYW5kICdwYXRoJworICBhdHRyaWJ1dGVzLgorCistIElzc3VlICMxNDM5OTogemlwZmlsZSBub3cgcmVjb2duaXplcyB0aGF0IHRoZSBhcmNoaXZlIGhhcyBiZWVuIG1vZGlmaWVkIGV2ZW4KKyAgaWYgb25seSB0aGUgY29tbWVudCBpcyBjaGFuZ2VkLiAgSW4gYWRkaXRpb24sIHRoZSBUeXBlRXJyb3IgdGhhdCByZXN1bHRzIGZyb20KKyAgdHJ5aW5nIHRvIHNldCBhIG5vbi1iaW5hcnkgdmFsdWUgYXMgYSBjb21tZW50IGlzIG5vdyByYWlzZWQgYXQgdGhlIHRpbWUKKyAgdGhlIGNvbW1lbnQgaXMgc2V0IHJhdGhlciB0aGFuIGF0IHRoZSB0aW1lIHRoZSB6aXBmaWxlIGlzIHdyaXR0ZW4uCisKKy0gdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLmlzX2lnbm9yZWRfZmlsZW5hbWUoKSBub3cgaWdub3JlcyBhbnkgbmFtZSB0aGF0IHN0YXJ0cworICB3aXRoICI8IiBhbmQgZW5kcyB3aXRoICI+IiBpbnN0ZWFkIG9mIHNwZWNpYWwtY2FzaW5nICI8c3RyaW5nPiIgYW5kCisgICI8ZG9jdGVzdCAiLgorCistIElzc3VlICMxMjUzNzogVGhlIG1haWxib3ggbW9kdWxlIG5vIGxvbmdlciBkZXBlbmRzIG9uIGtub3dsZWRnZSBvZiBpbnRlcm5hbAorICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBlbWFpbCBwYWNrYWdlIE1lc3NhZ2Ugb2JqZWN0LgorCistIElzc3VlICM3OTc4OiBzb2NrZXRzZXJ2ZXIgbm93IHJlc3RhcnRzIHRoZSBzZWxlY3QoKSBjYWxsIHdoZW4gRUlOVFIgaXMKKyAgcmV0dXJuZWQuICBUaGlzIGF2b2lkcyBjcmFzaGluZyB0aGUgc2VydmVyIGxvb3Agd2hlbiBhIHNpZ25hbCBpcyByZWNlaXZlZC4KKyAgUGF0Y2ggYnkgSmVyenkgS296ZXJhLgorCistIElzc3VlICMxNDUyMjogQXZvaWQgZHVwbGljYXRpbmcgc29ja2V0IGhhbmRsZXMgaW4gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uCisgIFBhdGNoIGJ5IHNidC4KKworLSBEb24ndCBQeV9ERUNSRUYgTlVMTCB2YXJpYWJsZSBpbiBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLgorCistIElzc3VlICM4NTE1OiBTZXQgX19maWxlX18gd2hlbiBydW4gZmlsZSBpbiBJRExFLgorICBJbml0aWFsIHBhdGNoIGJ5IEJydWNlIEZyZWRlcmlrc2VuLgorCistIElzc3VlICMxNDQ5NjogRml4IHdyb25nIG5hbWUgaW4gaWRsZWxpYi90YWJiZWRwYWdlcy5weS4KKyAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgorCistIElzc3VlICMzMDMzOiBBZGQgZGlzcGxheW9mIHBhcmFtZXRlciB0byB0a2ludGVyIGZvbnQuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxNDQ4MjogUmFpc2UgYSBWYWx1ZUVycm9yLCBub3QgYSBOYW1lRXJyb3IsIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZQorICBhIG11bHRpcHJvY2Vzc2luZyBDbGllbnQgb3IgTGlzdGVuZXIgd2l0aCBhbiBBRl9VTklYIHR5cGUgYWRkcmVzcyB1bmRlcgorICBXaW5kb3dzLiAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgorCistIElzc3VlICM4MDIzMTA6IEdlbmVyYXRlIGFsd2F5cyB1bmlxdWUgdGtpbnRlciBmb250IG5hbWVzIGlmIG5vdCBkaXJlY3RseSBwYXNzZWQuCisKKy0gSXNzdWUgIzE0MTUxOiBSYWlzZSBhIFZhbHVlRXJyb3IsIG5vdCBhIE5hbWVFcnJvciwgd2hlbiB0cnlpbmcgdG8gY3JlYXRlCisgIGEgbXVsdGlwcm9jZXNzaW5nIENsaWVudCBvciBMaXN0ZW5lciB3aXRoIGFuIEFGX1BJUEUgdHlwZSBhZGRyZXNzIHVuZGVyCisgIG5vbi1XaW5kb3dzIHBsYXRmb3Jtcy4gIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjMTQ0OTM6IFVzZSBndmZzLW9wZW4gb3IgeGRnLW9wZW4gaW4gd2ViYnJvd3Nlci4KKworQnVpbGQKKy0tLS0tCisKKy0gIm1ha2UgdG91Y2giIHdpbGwgbm93IHRvdWNoIGdlbmVyYXRlZCBmaWxlcyB0aGF0IGFyZSBjaGVja2VkIGludG8gTWVyY3VyaWFsLAorICBhZnRlciBhICJoZyB1cGRhdGUiIHdoaWNoIGZhaWxlZCB0byBicmluZyB0aGUgdGltZXN0YW1wcyBpbnRvIHRoZSByaWdodCBvcmRlci4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0MDI2OiBJbiB0ZXN0X2NtZF9saW5lX3NjcmlwdCwgY2hlY2sgdGhhdCBzeXMuYXJndiBpcyBwb3B1bGF0ZWQKKyAgY29ycmVjdGx5IGZvciB0aGUgdmFyaW91cyBpbnZvY2F0aW9uIGFwcHJvYWNoZXMgKFBhdGNoIGJ5IEphc29uIFllbykKKworLSBJc3N1ZSAjMTQwMzI6IEZpeCBpbmNvcnJlY3QgdmFyaWFibGUgbmFtZSBpbiB0ZXN0X2NtZF9saW5lX3NjcmlwdCBkZWJ1Z2dpbmcKKyAgbWVzc2FnZSAoUGF0Y2ggYnkgSmFzb24gWWVvKQorCistIElzc3VlICMxNDU4OTogVXBkYXRlIGNlcnRpZmljYXRlIGNoYWluIGZvciBzaGEyNTYudGJzLWludGVybmV0LmNvbSwgZml4aW5nCisgIGEgdGVzdCBmYWlsdXJlIGluIHRlc3Rfc3NsLgorCistIElzc3VlICMxNDM1NTogUmVncnRlc3Qgbm93IHN1cHBvcnRzIHRoZSBzdGFuZGFyZCB1bml0dGVzdCB0ZXN0IGxvYWRpbmcsIGFuZAorICB3aWxsIHVzZSBpdCBpZiBhIHRlc3QgZmlsZSBjb250YWlucyBubyBgdGVzdF9tYWluYCBtZXRob2QuCisKK1Rvb2xzIC8gRGVtb3MKKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMzU2MTogVGhlIFdpbmRvd3MgaW5zdGFsbGVyIG5vdyBoYXMgYW4gb3B0aW9uLCBvZmYgYnkgZGVmYXVsdCwgZm9yCisgIHBsYWNpbmcgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaW50byB0aGUgc3lzdGVtICJQYXRoIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworLSBJc3N1ZSAjMTMxNjU6IHN0cmluZ2JlbmNoIGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIFRvb2xzL3N0cmluZ2JlbmNoIGZvbGRlci4KKyAgSXQgdXNlZCB0byBsaXZlIGluIGl0cyBvd24gU1ZOIHByb2plY3QuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDAxLUFwci0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTY4MzM2ODogb2JqZWN0Ll9fbmV3X18gYW5kIG9iamVjdC5fX2luaXRfXyByYWlzZSBhIFR5cGVFcnJvciBpZiB0aGV5CisgIGFyZSBwYXNzZWQgYXJndW1lbnRzIGFuZCB0aGVpciBjb21wbGVtZW50YXJ5IG1ldGhvZCBpcyBub3Qgb3ZlcnJpZGRlbi4KKworLSBJc3N1ZSAjMTQzNzg6IEZpeCBjb21waWxpbmcgYXN0LkltcG9ydEZyb20gbm9kZXMgd2l0aCBhICJfX2Z1dHVyZV9fIiBzdHJpbmcgYXMKKyAgdGhlIG1vZHVsZSBuYW1lIHRoYXQgd2FzIG5vdCBpbnRlcm5lZC4KKworLSBJc3N1ZSAjMTQzMzE6IFVzZSBzaWduaWZpY2FudGx5IGxlc3Mgc3RhY2sgc3BhY2Ugd2hlbiBpbXBvcnRpbmcgbW9kdWxlcyBieQorICBhbGxvY2F0aW5nIHBhdGggYnVmZmVycyBvbiB0aGUgaGVhcCBpbnN0ZWFkIG9mIHRoZSBzdGFjay4KKworLSBJc3N1ZSAjMTQzMzQ6IFByZXZlbnQgaW4gYSBzZWdmYXVsdCBpbiB0eXBlLl9fZ2V0YXR0cmlidXRlX18gd2hlbiBpdCB3YXMgbm90CisgIHBhc3NlZCBzdHJpbmdzLgorCistIElzc3VlICMxNDY5NjI5OiBBbGxvdyBjeWNsZXMgdGhyb3VnaCBhbiBvYmplY3QncyBfX2RpY3RfXyBzbG90IHRvIGJlCisgIGNvbGxlY3RlZC4gKEZvciBleGFtcGxlIGlmIGBgeC5fX2RpY3RfXyBpcyB4YGApLgorCistIElzc3VlICMxNDIwNTogZGljdCBsb29rdXAgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZSBkaWN0IGlzIG1vZGlmaWVkCisgIGR1cmluZyBhIGxvb2t1cC4KKworLSBJc3N1ZSAjMTQyMjA6IFdoZW4gYSBnZW5lcmF0b3IgaXMgZGVsZWdhdGluZyB0byBhbm90aGVyIGl0ZXJhdG9yIHdpdGggdGhlCisgIHlpZWxkIGZyb20gc3ludGF4LCBpdCBuZWVkcyB0byBoYXZlIGl0cyBgYGdpX3J1bm5pbmdgYCBmbGFnIHNldCB0byBUcnVlLgorCistIElzc3VlICMxNDQzNTogUmVtb3ZlIGRlZGljYXRlZCBibG9jayBhbGxvY2F0b3IgZnJvbSBmbG9hdG9iamVjdC5jIGFuZCByZWx5CisgIG9uIHRoZSBQeU9iamVjdF9NYWxsb2MoKSBhcGkgbGlrZSBhbGwgb3RoZXIgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ0NzE6IEZpeCBhIHBvc3NpYmxlIGJ1ZmZlciBvdmVycnVuIGluIHRoZSB3aW5yZWcgbW9kdWxlLgorCistIElzc3VlICMxNDI4ODogQWxsb3cgdGhlIHNlcmlhbGl6YXRpb24gb2YgYnVpbHRpbiBpdGVyYXRvcnMKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDMwMDogVW5kZXIgV2luZG93cywgc29ja2V0cyBjcmVhdGVkIHVzaW5nIHNvY2tldC5kdXAoKSBub3cgYWxsb3cKKyAgb3ZlcmxhcHBlZCBJL08uICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzODcyOiBzb2NrZXQuZGV0YWNoKCkgbm93IG1hcmtzIHRoZSBzb2NrZXQgY2xvc2VkIChhcyBtaXJyb3JlZAorICBpbiB0aGUgc29ja2V0IHJlcHIoKSkuICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjMTQ0MDY6IEZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdXNpbmcgYGBjb25jdXJyZW50LmZ1dHVyZXMud2FpdCgKKyAgcmV0dXJuX3doZW49QUxMX0NPTVBMRVRFRClgYC4gIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICM1MTM2OiBkZXByZWNhdGUgb2xkLCB1bnVzZWQgZnVuY3Rpb25zIGZyb20gdGtpbnRlci4KKworLSBJc3N1ZSAjMTQ0MDk6IElETEUgbm93IHByb3Blcmx5IGV4ZWN1dGVzIGNvbW1hbmRzIGluIHRoZSBTaGVsbCB3aW5kb3cKKyAgd2hlbiBpdCBjYW5ub3QgcmVhZCB0aGUgbm9ybWFsIGNvbmZpZyBmaWxlcyBvbiBzdGFydHVwIGFuZAorICBoYXMgdG8gdXNlIHRoZSBidWlsdC1pbiBkZWZhdWx0IGtleSBiaW5kaW5ncy4KKyAgVGhlcmUgd2FzIHByZXZpb3VzbHkgYSBidWcgaW4gb25lIG9mIHRoZSBkZWZhdWx0cy4KKworLSBJc3N1ZSAjMTQ0MTY6IHN5c2xvZyBub3cgZGVmaW5lcyB0aGUgTE9HX09ERUxBWSBhbmQgTE9HX0FVVEhQUklWIGNvbnN0YW50cworICBpZiB0aGV5IGFyZSBkZWZpbmVkIGluIDxzeXNsb2cuaD4uCisKKy0gSURMRSBjYW4gYmUgbGF1bmNoZWQgYXMgcHl0aG9uIC1tIGlkbGVsaWIKKworLSBJc3N1ZSAjMTQyOTU6IEFkZCB1bml0dGVzdC5tb2NrCisKKy0gSXNzdWUgIzc2NTI6IEFkZCAtLXdpdGgtc3lzdGVtLWxpYm1wZGVjIG9wdGlvbiB0byBjb25maWd1cmUgZm9yIGxpbmtpbmcKKyAgdGhlIF9kZWNpbWFsIG1vZHVsZSBhZ2FpbnN0IGFuIGluc3RhbGxlZCBsaWJtcGRlYy4KKworLSBJc3N1ZSAjMTQzODA6IE1JTUVUZXh0IG5vdyBkZWZhdWx0cyB0byB1dGYtOCB3aGVuIHBhc3NlZCBub24tQVNDSUkgdW5pY29kZQorICB3aXRoIG5vIGNoYXJzZXQgc3BlY2lmaWVkLgorCistIElzc3VlICMxMDM0MDogYXN5bmNvcmUgLSBwcm9wZXJseSBoYW5kbGUgRUlOVkFMIGluIGRpc3BhdGNoZXIgY29uc3RydWN0b3Igb24KKyAgT1NYOyBhdm9pZCB0byBjYWxsIGhhbmRsZV9jb25uZWN0IGluIGNhc2Ugb2YgYSBkaXNjb25uZWN0ZWQgc29ja2V0IHdoaWNoCisgIHdhcyBub3QgbWVhbnQgdG8gY29ubmVjdC4KKworLSBJc3N1ZSAjMTQyMDQ6IFRoZSBzc2wgbW9kdWxlIG5vdyBoYXMgc3VwcG9ydCBmb3IgdGhlIE5leHQgUHJvdG9jb2wKKyAgTmVnb3RpYXRpb24gZXh0ZW5zaW9uLCBpZiBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgT3BlblNTTCBsaWJyYXJ5LgorICBQYXRjaCBieSBDb2xpbiBNYXJjLgorCistIElzc3VlICMzMDM1OiBVbnVzZWQgZnVuY3Rpb25zIGZyb20gdGtpbnRlciBhcmUgbWFya2VkIGFzIHBlbmRpbmcgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTI3NTc6IEZpeCB0aGUgc2tpcHBpbmcgb2YgZG9jdGVzdHMgd2hlbiBweXRob24gaXMgcnVuIHdpdGggLU9PIHNvCisgIHRoYXQgaXQgd29ya3MgaW4gdW5pdHRlc3QncyB2ZXJib3NlIG1vZGUgYXMgd2VsbCBhcyBub24tdmVyYm9zZSBtb2RlLgorCistIElzc3VlICM3NjUyOiBJbnRlZ3JhdGUgdGhlIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGlibXBkZWMgbGlicmFyeSB0byBzcGVlZAorICB1cCB0aGUgZGVjaW1hbCBtb2R1bGUuIFBlcmZvcm1hbmNlIGdhaW5zIG9mIHRoZSBuZXcgQyBpbXBsZW1lbnRhdGlvbiBhcmUKKyAgYmV0d2VlbiAxMHggYW5kIDEwMHgsIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24uCisKKy0gSXNzdWUgIzM1NzM6IElETEUgaGFuZ3Mgd2hlbiBwYXNzaW5nIGludmFsaWQgY29tbWFuZCBsaW5lIGFyZ3MKKyAgKGRpcmVjdG9yeShpZXMpIGluc3RlYWQgb2YgZmlsZShzKSkgKFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvKQorCistIElzc3VlICMxNDI2OTogU01UUEQgbm93IGNvbmZvcm1zIHRvIHRoZSBSRkMgYW5kIHJlcXVpcmVzIGEgSEVMTyBjb21tYW5kCisgIGJlZm9yZSBNQUlMLCBSQ1BULCBvciBEQVRBLgorCistIElzc3VlICMxMzY5NDogYXN5bmNocm9ub3VzIGNvbm5lY3QgaW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBkb2VzIG5vdCBzZXQgYWRkcgorICBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzE0MzQ0OiBmaXhlZCB0aGUgcmVwciBvZiBlbWFpbC5wb2xpY3kgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTE2ODY6IEFkZGVkIG1pc3NpbmcgZW50cmllcyB0byBlbWFpbCBwYWNrYWdlIF9fYWxsX18gbGlzdHMKKyAgKG1vc3RseSB0aGUgbmV3IEJ5dGVzIGNsYXNzZXMpLgorCistIElzc3VlICMxNDMzNTogbXVsdGlwcm9jZXNzaW5nJ3MgY3VzdG9tIFBpY2tsZXIgc3ViY2xhc3Mgbm93IGluaGVyaXRzIGZyb20KKyAgdGhlIEMtYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24uICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEwNDg0OiBGaXggdGhlIENHSUhUVFBTZXJ2ZXIncyBQQVRIX0lORk8gaGFuZGxpbmcgcHJvYmxlbS4KKworLSBJc3N1ZSAjMTExOTk6IEZpeCB0aGUgd2l0aCB1cmxsaWIgd2hpY2ggaGFuZ3Mgb24gcGFydGljdWxhciBmdHAgdXJscy4KKworLSBJbXByb3ZlIHRoZSBtZW1vcnkgdXRpbGl6YXRpb24gYW5kIHNwZWVkIG9mIGZ1bmN0b29scy5scnVfY2FjaGUuCisKKy0gSXNzdWUgIzE0MjIyOiBVc2UgdGhlIG5ldyB0aW1lLnN0ZWFkeSgpIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGltZS50aW1lKCkgZm9yCisgIHRpbWVvdXQgaW4gcXVldWUgYW5kIHRocmVhZGluZyBtb2R1bGVzIHRvIG5vdCBiZSBhZmZlY3RlZCBvZiBzeXN0ZW0gdGltZQorICB1cGRhdGUuCisKKy0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgbGliMnRvMy5weXRyZWUuQmFzZS5nZXRfcHJlZml4L3NldF9wcmVmaXguCisKKy0gSXNzdWUgIzE0MjM0OiBDVkUtMjAxMi0wODc2OiBSYW5kb21pemUgaGFzaGVzIG9mIHhtbCBhdHRyaWJ1dGVzIGluIHRoZSBoYXNoCisgIHRhYmxlIGludGVybmFsIHRvIHRoZSBweWV4cGF0IG1vZHVsZSdzIGNvcHkgb2YgdGhlIGV4cGF0IGxpYnJhcnkgdG8gYXZvaWQgYQorICBkZW5pYWwgb2Ygc2VydmljZSBkdWUgdG8gaGFzaCBjb2xsaXNpb25zLiAgUGF0Y2ggYnkgRGF2aWQgTWFsY29sbSB3aXRoIHNvbWUKKyAgbW9kaWZpY2F0aW9ucyBieSB0aGUgZXhwYXQgcHJvamVjdC4KKworLSBJc3N1ZSAjMTQyMDA6IElkbGUgc2hlbGwgY3Jhc2ggb24gcHJpbnRpbmcgbm9uLUJNUCB1bmljb2RlIGNoYXJhY3Rlci4KKworLSBJc3N1ZSAjMTI4MTg6IGZvcm1hdCBhZGRyZXNzIG5vIGxvbmdlciBuZWVkbGVzc2x5IFwgZXNjYXBlcyAoKXMgaW4gbmFtZXMgd2hlbgorICB0aGUgbmFtZSBlbmRzIHVwIGJlaW5nIHF1b3RlZC4KKworLSBJc3N1ZSAjMTQwNjI6IEJ5dGVzR2VuZXJhdG9yIG5vdyBjb3JyZWN0bHkgZm9sZHMgSGVhZGVyIG9iamVjdHMsCisgIGluY2x1ZGluZyB1c2luZyBsaW5lc2VwIHdoZW4gZm9sZGluZy4KKworLSBJc3N1ZSAjMTM4Mzk6IFdoZW4gaW52b2tlZCBvbiB0aGUgY29tbWFuZC1saW5lLCB0aGUgcHN0YXRzIG1vZHVsZSBub3cKKyAgYWNjZXB0cyBzZXZlcmFsIGZpbGVuYW1lcyBvZiBwcm9maWxlIHN0YXQgZmlsZXMgYW5kIG1lcmdlcyB0aGVtIGFsbC4KKyAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzE0MjkxOiBFbWFpbCBub3cgZGVmYXVsdHMgdG8gdXRmLTggZm9yIG5vbi1BU0NJSSB1bmljb2RlIGhlYWRlcnMKKyAgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLiAgVGhpcyBmaXhlcyBhIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gMi43LgorCistIElzc3VlICM5ODk3MTI6IFN1cHBvcnQgdXNpbmcgVGsgd2l0aG91dCBhIG1haW5sb29wLgorCistIElzc3VlICM1MjE5OiBQcmV2ZW50IGV2ZW50IGhhbmRsZXIgY2FzY2FkZSBpbiBJRExFLgorCistIElzc3VlICMzODM1OiBSZWZ1c2UgdG8gdXNlIHVudGhyZWFkZWQgVGNsIGluIHRocmVhZGVkIFB5dGhvbi4KKworLSBJc3N1ZSAjMjg0MzogQWRkIG5ldyBUayBBUEkgdG8gVGtpbnRlci4KKworLSBJc3N1ZSAjMTQxODQ6IEluY3JlYXNlIHRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIHNlY29uZGFyeSB0aHJlYWRzIG9uCisgIE1hYyBPUyBYIHRvIGF2b2lkIGludGVycHJldGVyIGNyYXNoZXMgd2hlbiB1c2luZyB0aHJlYWRzIG9uIDEwLjcuCisKKy0gSXNzdWUgIzE0MTgwOiBkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXAoKSwKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZCBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkKKyAgbm93IHJhaXNlIGFuIE9TRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIGlmIGxvY2FsdGltZSgpIG9yIGdtdGltZSgpIGZhaWxlZC4KKworLSBJc3N1ZSAjMTQxODA6IHRpbWUuY3RpbWUoKSwgZ210aW1lKCksIHRpbWUubG9jYWx0aW1lKCksCisgIGRhdGV0aW1lLmRhdGUuZnJvbXRpbWVzdGFtcCgpLCBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKCkgYW5kCisgIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IsIGluc3RlYWQgb2YKKyAgYSBWYWx1ZUVycm9yLCBpZiB0aGUgdGltZXN0YW1wIGRvZXMgbm90IGZpdCBpbiB0aW1lX3QuCisKKy0gSXNzdWUgIzE0MTgwOiBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKCkgYW5kCisgIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoKSBub3cgcm91bmQgbWljcm9zZWNvbmRzIHRvd2FyZHMgemVybworICBpbnN0ZWFkIG9mIHJvdW5kaW5nIHRvIG5lYXJlc3Qgd2l0aCB0aWVzIGdvaW5nIGF3YXkgZnJvbSB6ZXJvLgorCistIElzc3VlICMxMDU0MzogRml4IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IHdpdGggSnl0aG9uIGJ5dGVjb2RlIGZpbGVzLgorCistIElzc3VlICMxMTc4ODYzOiBTZXBhcmF0ZSBpbml0aWFsaXNhdGlvbiBmcm9tIHNldHRpbmcgd2hlbiBpbml0aWFsaXppbmcKKyAgVGtpbnRlci5WYXJpYWJsZXM7IGhhcm1vbml6ZSBleGNlcHRpb25zIHRvIFZhbHVlRXJyb3I7IG9ubHkgZGVsZXRlIHZhcmlhYmxlcworICB0aGF0IGhhdmUgbm90IGJlZW4gZGVsZXRlZDsgYXNzZXJ0IHRoYXQgdmFyaWFibGUgbmFtZXMgYXJlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE0MTA0OiBJbXBsZW1lbnQgdGltZS5tb25vdG9uaWMoKSBvbiBNYWMgT1MgWCwgcGF0Y2ggd3JpdHRlbiBieQorICBOaWNob2xhcyBSaWxleS4KKworLSBJc3N1ZSAjMTMzOTQ6IHRoZSBhaWZjIG1vZHVsZSBub3cgdXNlcyB3YXJuaW5ncy53YXJuKCkgdG8gc2lnbmFsIHdhcm5pbmdzLgorCistIElzc3VlICMxNDI1MjogRml4IHN1YnByb2Nlc3MuUG9wZW4udGVybWluYXRlKCkgdG8gbm90IHJhaXNlIGFuIGVycm9yIHVuZGVyCisgIFdpbmRvd3Mgd2hlbiB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgYWxyZWFkeSBleGl0ZWQuCisKKy0gSXNzdWUgIzE0MjIzOiBjdXJzZXMuYWRkY2goKSBpcyBubyBtb3JlIGxpbWl0ZWQgdG8gdGhlIHJhbmdlIDAtMjU1IHdoZW4gdGhlCisgIFB5dGhvbiBjdXJzZXMgaXMgbm90IGxpbmtlZCB0byBsaWJuY3Vyc2Vzdy4gSXQgd2FzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkCisgIGluIFB5dGhvbiAzLjNhMS4KKworLSBJc3N1ZSAjMTQxNjg6IENoZWNrIGZvciBwcmVzZW5jZSBvZiBFbGVtZW50Ll9hdHRycyBpbiBtaW5pZG9tIGJlZm9yZQorICBhY2Nlc3NpbmcgaXQuCisKKy0gSXNzdWUgIzEyMzI4OiBGaXggbXVsdGlwcm9jZXNzaW5nJ3MgdXNlIG9mIG92ZXJsYXBwZWQgSS9PIG9uIFdpbmRvd3MuCisgIEFsc28sIGFkZCBhIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLndhaXQocmxpc3QsIHRpbWVvdXQ9Tm9uZSkgZnVuY3Rpb24KKyAgZm9yIHBvbGxpbmcgbXVsdGlwbGUgb2JqZWN0cyBhdCBvbmNlLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDAwNzogQWNjZXB0IGluY29tcGxldGUgVHJlZUJ1aWxkZXIgb2JqZWN0cyAobWlzc2luZyBzdGFydCwgZW5kLAorICBkYXRhIG9yIGNsb3NlIG1ldGhvZCkgZm9yIHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gYXMgd2VsbC4KKyAgRHJvcCB0aGUgbm8tb3AgVHJlZUJ1aWxkZXIoKS54bWwoKSBtZXRob2QgZnJvbSB0aGUgQyBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTQyMTA6IHBkYiBub3cgaGFzIHRhYi1jb21wbGV0aW9uIG5vdCBvbmx5IGZvciBjb21tYW5kIG5hbWVzLCBidXQKKyAgYWxzbyBmb3IgdGhlaXIgYXJndW1lbnRzLCB3aGVyZXZlciBwb3NzaWJsZS4KKworLSBJc3N1ZSAjMTQzMTA6IFNvY2tldHMgY2FuIG5vdyBiZSB3aXRoIG90aGVyIHByb2Nlc3NlcyBvbiBXaW5kb3dzIHVzaW5nCisgIHRoZSBhcGkgc29ja2V0LnNvY2tldC5zaGFyZSgpIGFuZCBzb2NrZXQuZnJvbXNoYXJlKCkuCisKKy0gSXNzdWUgIzEwNTc2OiBUaGUgZ2MgbW9kdWxlIG5vdyBoYXMgYSAnY2FsbGJhY2tzJyBtZW1iZXIgdGhhdCB3aWxsIGdldAorICBjYWxsZWQgd2hlbiBnYXJiYWdlIGNvbGxlY3Rpb24gdGFrZXMgcGxhY2UuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNDU1NzogRml4IGV4dGVuc2lvbnMgYnVpbGQgb24gSFAtVVguIFBhdGNoIGJ5IEFkaSBSb2liYW4uCisKKy0gSXNzdWUgIzE0Mzg3OiBEbyBub3QgaW5jbHVkZSBhY2N1LmggZnJvbSBQeXRob24uaC4KKworLSBJc3N1ZSAjMTQzNTk6IE9ubHkgdXNlIE9fQ0xPRVhFQyBpbiBfcG9zaXhtb2R1bGUuYyBpZiBpdCBpcyBkZWZpbmVkLgorICBCYXNlZCBvbiBwYXRjaCBmcm9tIEhlcnbDqSBDb2F0YW5oYXkuCisKKy0gSXNzdWUgIzE0MzIxOiBEbyBub3QgcnVuIHBnZW4gZHVyaW5nIHRoZSBidWlsZCBpZiBmaWxlcyBhcmUgdXAgdG8gZGF0ZS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDAzNDogYWRkZWQgdGhlIGFyZ3BhcnNlIHR1dG9yaWFsLgorCistIElzc3VlICMxNDMyNDogRml4IGNvbmZpZ3VyZSB0ZXN0cyBmb3IgY3Jvc3MgYnVpbGRzLgorCistIElzc3VlICMxNDMyNzogQ2FsbCBBQ19DQU5PTklDQUxfSE9TVCBpbiBjb25maWd1cmUuYWMgYW5kIGNoZWNrIGluCisgIGNvbmZpZy57Z3Vlc3Msc3VifS4gRG9uJ3QgdXNlIHVuYW1lIGNhbGxzIGZvciBjcm9zcyBidWlsZHMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM5MDQxOiBBbiBpc3N1ZSBpbiBjdHlwZXMuY19sb25nZG91YmxlLCBjdHlwZXMuY19kb3VibGUsIGFuZAorICBjdHlwZXMuY19mbG9hdCB0aGF0IGNhdXNlZCBhbiBpbmNvcnJlY3QgZXhjZXB0aW9uIHRvIGJlIHJldHVybmVkIGluIHRoZQorICBjYXNlIG9mIG92ZXJmbG93IGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNDIxMjogVGhlIHJlIG1vZHVsZSBkaWRuJ3QgcmV0YWluIGEgcmVmZXJlbmNlIHRvIGJ1ZmZlcnMgaXQgd2FzCisgIHNjYW5uaW5nLCByZXN1bHRpbmcgaW4gc2VnZmF1bHRzLgorCistIElzc3VlICMxNDI1OTogVGhlIGZpbmRpdGVyKCkgbWV0aG9kIG9mIHJlIG9iamVjdHMgZGlkIG5vdCB0YWtlIGFueQorICBrZXl3b3JkIGFyZ3VtZW50cywgY29udHJhcnkgdG8gdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzEwMTQyOiBTdXBwb3J0IGZvciBTRUVLX0hPTEUvU0VFS19EQVRBIChmb3IgZXhhbXBsZSwgdW5kZXIgWkZTKS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0NDQyOiBBZGQgbWlzc2luZyBlcnJubyBpbXBvcnQgaW4gdGVzdF9zbXRwbGliLgorCistIElzc3VlICM4MzE1OiAocGFydGlhbCBmaXgpIHB5dGhvbiAtbSB1bml0dGVzdCB0ZXN0LnRlc3RfZW1haWwgbm93IHdvcmtzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwNS1NYXItMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MTcyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBtYXJzaGFsbGluZyBhIGJ1ZmZlci1saWtlIG9iamVjdAorICAob3RoZXIgdGhhbiBhIGJ5dGVzIG9iamVjdCkuCisKKy0gSXNzdWUgIzEzNTIxOiBkaWN0LnNldGRlZmF1bHQoKSBub3cgZG9lcyBvbmx5IG9uZSBsb29rdXAgZm9yIHRoZSBnaXZlbiBrZXksCisgIG1ha2luZyBpdCAiYXRvbWljIiBmb3IgbWFueSBwdXJwb3Nlcy4gIFBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gUEVQIDQwOSwgSXNzdWUgIzYyMTA6ICJyYWlzZSBYIGZyb20gTm9uZSIgaXMgbm93IHN1cHBvcnRlZCBhcyBhIG1lYW5zIG9mCisgIHN1cHByZXNzaW5nIHRoZSBkaXNwbGF5IG9mIHRoZSBjaGFpbmVkIGV4Y2VwdGlvbiBjb250ZXh0LiBUaGUgY2hhaW5lZAorICBjb250ZXh0IHN0aWxsIHJlbWFpbnMgYXZhaWxhYmxlIGFzIHRoZSBfX2NvbnRleHRfXyBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzEwMTgxOiBOZXcgbWVtb3J5dmlldyBpbXBsZW1lbnRhdGlvbiBmaXhlcyBtdWx0aXBsZSBvd25lcnNoaXAKKyAgYW5kIGxpZmV0aW1lIGlzc3VlcyBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUHlfYnVmZmVyIG1lbWJlcnMgKCM5OTkwKQorICBhcyB3ZWxsIGFzIGNyYXNoZXMgKCM4MzA1LCAjNzQzMykuIE1hbnkgbmV3IGZlYXR1cmVzIGhhdmUgYmVlbiBhZGRlZAorICAoU2VlIHdoYXRzbmV3LzMuMyksIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIGV4dGVuc2l2ZWx5LgorICBUaGUgbmRhcnJheSB0ZXN0IG9iamVjdCBmcm9tIF90ZXN0YnVmZmVyLmMgaW1wbGVtZW50cyBhbGwgYXNwZWN0cyBvZgorICBQRVAtMzExOCwgc28gZnVydGhlciBkZXZlbG9wbWVudCB0b3dhcmRzIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbgorICBvZiB0aGUgUEVQIGNhbiBwcm9jZWVkIGluIGEgdGVzdC1kcml2ZW4gbWFubmVyLgorCisgIFRoYW5rcyB0byBOaWNrIENvZ2hsYW4sIEFudG9pbmUgUGl0cm91IGFuZCBQYXVsaSBWaXJ0YW5lbiBmb3IgcmV2aWV3CisgIGFuZCBtYW55IGlkZWFzLgorCistIElzc3VlICMxMjgzNDogRml4IGluY29ycmVjdCByZXN1bHRzIG9mIG1lbW9yeXZpZXcudG9ieXRlcygpIGZvcgorICBub24tY29udGlndW91cyBhcnJheXMuCisKKy0gSXNzdWUgIzUyMzE6IEludHJvZHVjZSBtZW1vcnl2aWV3LmNhc3QoKSBtZXRob2QgdGhhdCBhbGxvd3MgY2hhbmdpbmcKKyAgZm9ybWF0IGFuZCBzaGFwZSB3aXRob3V0IG1ha2luZyBhIGNvcHkgb2YgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgorCistIElzc3VlICMxNDA4NDogRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUgd2l0aCBhCisgIGJhZCBlbmNvZGluZy4KKworLSBVcGdyYWRlIFVuaWNvZGUgZGF0YSB0byBVbmljb2RlIDYuMS4KKworLSBJc3N1ZSAjMTQwNDA6IFJlbW92ZSByYXJlbHkgdXNlZCBmaWxlIG5hbWUgc3VmZml4ZXMgZm9yIEMgZXh0ZW5zaW9ucworICAodW5kZXIgUE9TSVggbWFpbmx5KS4KKworLSBJc3N1ZSAjMTQwNTE6IEFsbG93IGFyYml0cmFyeSBhdHRyaWJ1dGVzIHRvIGJlIHNldCBvZiBjbGFzc21ldGhvZCBhbmQKKyAgc3RhdGljbWV0aG9kLgorCistIElzc3VlICMxMzcwMzogb0NFUlQtMjAxMS0wMDM6IFJhbmRvbWl6ZSBoYXNoZXMgb2Ygc3RyIGFuZCBieXRlcyB0byBwcm90ZWN0CisgIGFnYWluc3QgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrcyBkdWUgdG8gaGFzaCBjb2xsaXNpb25zIHdpdGhpbiB0aGUgZGljdCBhbmQKKyAgc2V0IHR5cGVzLiAgUGF0Y2ggYnkgRGF2aWQgTWFsY29sbSwgYmFzZWQgb24gd29yayBieSBWaWN0b3IgU3Rpbm5lci4KKworLSBJc3N1ZSAjMTMwMjA6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIHdoZW4gYWxsb2NhdGluZyBhIHN0cnVjdHNlcXVlbmNlIG9iamVjdAorICBmYWlscy4gIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzOTA4OiBSZWFkeSB0eXBlcyByZXR1cm5lZCBmcm9tIFB5VHlwZV9Gcm9tU3BlYy4KKworLSBJc3N1ZSAjMTEyMzU6IEZpeCBPdmVyZmxvd0Vycm9yIHdoZW4gdHJ5aW5nIHRvIGltcG9ydCBhIHNvdXJjZSBmaWxlIHdob3NlCisgIG1vZGlmaWNhdGlvbiB0aW1lIGRvZXNuJ3QgZml0IGluIGEgMzItYml0IHRpbWVzdGFtcC4KKworLSBJc3N1ZSAjMTI3MDU6IEEgU3ludGF4RXJyb3IgZXhjZXB0aW9uIGlzIG5vdyByYWlzZWQgd2hlbiBhdHRlbXB0aW5nIHRvCisgIGNvbXBpbGUgbXVsdGlwbGUgc3RhdGVtZW50cyBhcyBhIHNpbmdsZSBpbnRlcmFjdGl2ZSBzdGF0ZW1lbnQuCisKKy0gRml4IHRoZSBidWlsdGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjb2RlIHRvIHN0b3JlIHRoZSBpbml0IGZ1bmN0aW9uIGZvcgorICBmdXR1cmUgcmVpbml0aWFsaXphdGlvbi4KKworLSBJc3N1ZSAjODA1MjogVGhlIHBvc2l4IHN1YnByb2Nlc3MgbW9kdWxlIHdvdWxkIHRha2UgYSBsb25nIHRpbWUgY2xvc2luZworICBhbGwgcG9zc2libGUgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgY2hpbGQgcHJvY2VzcyByYXRoZXIgdGhhbiBqdXN0IG9wZW4KKyAgZmlsZSBkZXNjcmlwdG9ycy4gIEl0IG5vdyBjbG9zZXMgb25seSB0aGUgb3BlbiBmZHMgaWYgcG9zc2libGUgZm9yIHRoZQorICBkZWZhdWx0IGNsb3NlX2Zkcz1UcnVlIGJlaGF2aW9yLgorCistIElzc3VlICMxMzYyOTogUmVudW1iZXIgdGhlIHRva2VucyBpbiB0b2tlbi5oIHNvIHRoYXQgdGhleSBtYXRjaCB0aGUgaW5kZXhlcworICBpbnRvIF9QeVBhcnNlcl9Ub2tlbk5hbWVzLgorCistIElzc3VlICMxMzc1MjogQWRkIGEgY2FzZWZvbGQoKSBtZXRob2QgdG8gc3RyLgorCistIElzc3VlICMxMzc2MTogQWRkIGEgImZsdXNoIiBrZXl3b3JkIGFyZ3VtZW50IHRvIHRoZSBwcmludCgpIGZ1bmN0aW9uLAorICB1c2VkIHRvIGVuc3VyZSBmbHVzaGluZyB0aGUgb3V0cHV0IHN0cmVhbS4KKworLSBJc3N1ZSAjMTM2NDU6IHB5YyBmaWxlcyBub3cgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UKKyAgY29kZSwgdG8gYXZvaWQgdGltZXN0YW1wIGNvbGxpc2lvbnMgKGVzcGVjaWFsbHkgb24gZmlsZXN5c3RlbXMgd2l0aCBhIGxvdworICB0aW1lc3RhbXAgcmVzb2x1dGlvbikgd2hlbiBjaGVja2luZyBmb3IgZnJlc2huZXNzIG9mIHRoZSBieXRlY29kZS4KKworLSBQRVAgMzgwLCBJc3N1ZSAjMTE2ODI6IEFkZCAieWllbGQgZnJvbSA8eD4iIHRvIHN1cHBvcnQgZWFzeSBkZWxlZ2F0aW9uIHRvCisgIHN1YmdlbmVyYXRvcnMgKGluaXRpYWwgcGF0Y2ggYnkgR3JlZyBFd2luZywgaW50ZWdyYXRpb24gaW50byAzLjMgYnkKKyAgUmVuYXVkIEJsYW5jaCwgUnlhbiBLZWxseSwgWmJpZ25pZXcgSsSZZHJ6ZWpld3NraS1Tem1layBhbmQgTmljayBDb2dobGFuKQorCistIElzc3VlICMxMzc0ODogUmF3IGJ5dGVzIGxpdGVyYWxzIGNhbiBub3cgYmUgd3JpdHRlbiB3aXRoIHRoZSBgYHJiYGAgcHJlZml4CisgIGFzIHdlbGwgYXMgYGBicmBgLgorCistIElzc3VlICMxMjczNjogVXNlIGZ1bGwgdW5pY29kZSBjYXNlIG1hcHBpbmdzIGZvciB1cHBlciwgbG93ZXIsIGFuZCB0aXRsZSBjYXNlLgorCistIElzc3VlICMxMjc2MDogQWRkIGEgY3JlYXRlIG1vZGUgdG8gb3BlbigpLiBQYXRjaCBieSBEYXZpZCBUb3duc2hlbmQuCisKKy0gSXNzdWUgIzEzNzM4OiBTaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBvZiBieXRlcy5sb3dlcigpIGFuZCBieXRlcy51cHBlcigpLgorCistIElzc3VlICMxMzU3NzogQnVpbHQtaW4gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIG5vdyBoYXZlIGEgX19xdWFsbmFtZV9fLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzY2OTU6IEZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIHJ1bnMgbm93IGNsZWFyIHRoZSBmcmVlbGlzdCBvZiBzZXQKKyAgb2JqZWN0cy4gIEluaXRpYWwgcGF0Y2ggYnkgTWF0dGhpYXMgVHJvZmZhZXMuCisKKy0gRml4IE9TRXJyb3IuX19pbml0X18gYW5kIE9TRXJyb3IuX19uZXdfXyBzbyB0aGF0IGVhY2ggb2YgdGhlbSBjYW4gYmUKKyAgb3ZlcnJpZGVuIGFuZCB0YWtlIGFkZGl0aW9uYWwgYXJndW1lbnRzIChmb2xsb3d1cCB0byBpc3N1ZSAjMTI1NTUpLgorCistIEZpeCB0aGUgZml4IGZvciBpc3N1ZSAjMTIxNDk6IGl0IHdhcyBpbmNvcnJlY3QsIGFsdGhvdWdoIGl0IGhhZCB0aGUgc2lkZQorICBlZmZlY3Qgb2YgYXBwZWFyaW5nIHRvIHJlc29sdmUgdGhlIGlzc3VlLiAgVGhhbmtzIHRvIE1hcmsgU2hhbm5vbiBmb3IKKyAgbm90aWNpbmcuCisKKy0gSXNzdWUgIzEzNTA1OiBQaWNrbGUgYnl0ZXMgb2JqZWN0cyBpbiBhIHdheSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAorICBQeXRob24gMiB3aGVuIHVzaW5nIHByb3RvY29scyA8PSAyLgorCistIElzc3VlICMxMTE0NzogRml4IGFuIHVudXNlZCBhcmd1bWVudCBpbiBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSLiAgKEZpeAorICBnaXZlbiBieSBDYW1wYmVsbCBCYXJ0b24pLgorCistIElzc3VlICMxMzUwMzogVXNlIGEgbW9yZSBlZmZpY2llbnQgcmVkdWN0aW9uIGZvcm1hdCBmb3IgYnl0ZWFycmF5cyB3aXRoCisgIHBpY2tsZSBwcm90b2NvbCA+PSAzLiAgVGhlIG9sZCByZWR1Y3Rpb24gZm9ybWF0IGlzIGtlcHQgd2l0aCBvbGRlciBwcm90b2NvbHMKKyAgaW4gb3JkZXIgdG8gYWxsb3cgdW5waWNrbGluZyB1bmRlciBQeXRob24gMi4gIFBhdGNoIGJ5IElybWVuIGRlIEpvbmcuCisKKy0gSXNzdWUgIzcxMTE6IFB5dGhvbiBjYW4gbm93IGJlIHJ1biB3aXRob3V0IGEgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIKKyAgc3RyZWFtLiAgSXQgd2FzIGFscmVhZHkgdGhlIGNhc2Ugd2l0aCBQeXRob24gMi4gIEhvd2V2ZXIsIHRoZSBjb3JyZXNwb25kaW5nCisgIHN5cyBtb2R1bGUgZW50cmllcyBhcmUgbm93IHNldCB0byBOb25lIChpbnN0ZWFkIG9mIGFuIHVudXNhYmxlIGZpbGUgb2JqZWN0KS4KKworLSBJc3N1ZSAjMTE4NDk6IEVuc3VyZSB0aGF0IGZyZWUoKWQgbWVtb3J5IGFyZW5hcyBhcmUgcmVhbGx5IHJlbGVhc2VkCisgIG9uIFBPU0lYIHN5c3RlbXMgc3VwcG9ydGluZyBhbm9ueW1vdXMgbWVtb3J5IG1hcHBpbmdzLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMzQ1MjogUHlVbmljb2RlX0VuY29kZURlY2ltYWwoKSBkb2Vzbid0IHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMKKyAgZGlmZmVyZW50IHRoYW4gInN0cmljdCIgYW55bW9yZS4gVGhlIGNhbGxlciB3YXMgdW5hYmxlIHRvIGNvbXB1dGUgdGhlCisgIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXI6IGl0IGRlcGVuZHMgb24gdGhlIGVycm9yIGhhbmRsZXIuCisKKy0gUEVQIDMxNTUgLyBpc3N1ZSAjMTM0NDg6IFF1YWxpZmllZCBuYW1lIGZvciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzEzNDM2OiBGaXggYSBib2d1cyBlcnJvciBtZXNzYWdlIHdoZW4gYW4gQVNUIG9iamVjdCB3YXMgcGFzc2VkCisgIGFuIGludmFsaWQgaW50ZWdlciB2YWx1ZS4KKworLSBJc3N1ZSAjMTM0MTE6IG1lbW9yeXZpZXcgb2JqZWN0cyBhcmUgbm93IGhhc2hhYmxlIHdoZW4gdGhlIHVuZGVybHlpbmcKKyAgb2JqZWN0IGlzIGhhc2hhYmxlLgorCistIElzc3VlICMxMzMzODogSGFuZGxlIGFsbCBlbnVtZXJhdGlvbnMgaW4gX1B5X0FOTk9UQVRFX01FTU9SWV9PUkRFUgorICB0byBhbGxvdyBjb21waWxpbmcgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCAtV3N3aXRjaC1lbnVtIG9uIGdjYy4KKyAgSW5pdGlhbCBwYXRjaCBieSBGbG9yaXMgQnJ1eW5vb2doZS4KKworLSBJc3N1ZSAjMTAyMjc6IEFkZCBhbiBhbGxvY2F0aW9uIGNhY2hlIGZvciBhIHNpbmdsZSBzbGljZSBvYmplY3QuICBQYXRjaCBieQorICBTdGVmYW4gQmVobmVsLgorCistIElzc3VlICMxMzM5MzogQnVmZmVyZWRSZWFkZXIucmVhZDEoKSBub3cgYXNrcyB0aGUgZnVsbCByZXF1ZXN0ZWQgc2l6ZSB0bworICB0aGUgcmF3IHN0cmVhbSBpbnN0ZWFkIG9mIGxpbWl0aW5nIGl0c2VsZiB0byB0aGUgYnVmZmVyIHNpemUuCisKKy0gSXNzdWUgIzEzMzkyOiBXcml0aW5nIGEgcHljIGZpbGUgc2hvdWxkIG5vdyBiZSBhdG9taWMgdW5kZXIgV2luZG93cyBhcyB3ZWxsLgorCistIElzc3VlICMxMzMzMzogVGhlIFVURi03IGRlY29kZXIgbm93IGFjY2VwdHMgbG9uZSBzdXJyb2dhdGVzICh0aGUgZW5jb2RlcgorICBhbHJlYWR5IGFjY2VwdHMgdGhlbSkuCisKKy0gSXNzdWUgIzEzMzg5OiBGdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXNzZXMgbm93IGNsZWFyIHRoZSBmcmVlbGlzdHMgZm9yCisgIGxpc3QgYW5kIGRpY3Qgb2JqZWN0cy4gIFRoZXkgYWxyZWFkeSBjbGVhcmVkIG90aGVyIGZyZWVsaXN0cyBpbiB0aGUKKyAgaW50ZXJwcmV0ZXIuCisKKy0gSXNzdWUgIzEzMzI3OiBSZW1vdmUgdGhlIG5lZWQgZm9yIGFuIGV4cGxpY2l0IE5vbmUgYXMgdGhlIHNlY29uZCBhcmd1bWVudAorICB0byBvcy51dGltZSwgb3MubHV0aW1lcywgb3MuZnV0aW1lcywgb3MuZnV0aW1lbnMsIG9zLmZ1dGltZXNhdCwgaW4KKyAgb3JkZXIgdG8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IHRpbWUuIEFsc28gYWRkZWQga2V5d29yZCBhcmd1bWVudAorICBoYW5kbGluZyB0byBvcy51dGltZW5zYXQgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBuZWVkIGZvciBleHBsaWNpdCBOb25lLgorCistIElzc3VlICMxMzM1MDogU2ltcGxpZnkgc29tZSBDIGNvZGUgYnkgcmVwbGFjaW5nIG1vc3QgdXNhZ2VzIG9mCisgIFB5VW5pY29kZV9Gb3JtYXQgYnkgUHlVbmljb2RlX0Zyb21Gb3JtYXQuCisKKy0gSXNzdWUgIzEzMzQyOiBpbnB1dCgpIHVzZWQgdG8gaWdub3JlIHN5cy5zdGRpbidzIGFuZCBzeXMuc3Rkb3V0J3MgdW5pY29kZQorICBlcnJvciBoYW5kbGVyIGluIGludGVyYWN0aXZlIG1vZGUgKHdoZW4gY2FsbGluZyBpbnRvIFB5T1NfUmVhZGxpbmUoKSkuCisKKy0gSXNzdWUgIzk4OTY6IEFkZCBzdGFydCwgc3RvcCwgYW5kIHN0ZXAgYXR0cmlidXRlcyB0byByYW5nZSBvYmplY3RzLgorCistIElzc3VlICMxMzM0MzogRml4IGEgU3lzdGVtRXJyb3Igd2hlbiBhIGxhbWJkYSBleHByZXNzaW9uIHVzZXMgYSBnbG9iYWwKKyAgdmFyaWFibGUgaW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQ6IGBgbGFtYmRhICosCisgIGFyZz1HTE9CQUxfTkFNRTogTm9uZWBgCisKKy0gSXNzdWUgIzEyNzk3OiBBZGRlZCBjdXN0b20gb3BlbmVyIHBhcmFtZXRlciB0byBidWlsdGluIG9wZW4oKSBhbmQKKyAgRmlsZUlPLm9wZW4oKS4KKworLSBJc3N1ZSAjMTA1MTk6IEF2b2lkIHVubmVjZXNzYXJ5IHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscyBpbgorICBzZXRvYmplY3QuYy4KKworLSBJc3N1ZSAjMTAzNjM6IERlYWxsb2NhdGUgZ2xvYmFsIGxvY2tzIGluIFB5X0ZpbmFsaXplKCkuCisKKy0gSXNzdWUgIzEzMDE4OiBGaXggcmVmZXJlbmNlIGxlYWtzIGluIGVycm9yIHBhdGhzIGluIGRpY3RvYmplY3QuYy4KKyAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTMyMDE6IERlZmluZSAnPT0nIGFuZCAnIT0nIHRvIGNvbXBhcmUgcmFuZ2Ugb2JqZWN0cyBiYXNlZCBvbgorICB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoZXkgZGVmaW5lIChpbnN0ZWFkIG9mIGNvbXBhcmluZyBiYXNlZCBvbgorICBvYmplY3QgaWRlbnRpdHkpLgorCistIElzc3VlICMxMjk0MjMyOiBJbiBhIGZldyBjYXNlcyBpbnZvbHZpbmcgbWV0YWNsYXNzIGluaGVyaXRhbmNlLCB0aGUKKyAgaW50ZXJwcmV0ZXIgd291bGQgc29tZXRpbWVzIGludm9rZSB0aGUgd3JvbmcgbWV0YWNsYXNzIHdoZW4gYnVpbGRpbmcgYSBuZXcKKyAgY2xhc3Mgb2JqZWN0LiBUaGVzZSBjYXNlcyBub3cgYmVoYXZlIGNvcnJlY3RseS4gUGF0Y2ggYnkgRGFuaWVsIFVyYmFuLgorCistIElzc3VlICMxMjc1MzogQWRkIHN1cHBvcnQgZm9yIFVuaWNvZGUgbmFtZSBhbGlhc2VzIGFuZCBuYW1lZCBzZXF1ZW5jZXMuCisgIEJvdGggYGB1bmljb2RlZGF0YS5sb29rdXAoKWBgIGFuZCAnXE57Li4ufScgbm93IHJlc29sdmUgYWxpYXNlcywKKyAgYW5kIGBgdW5pY29kZWRhdGEubG9va3VwKClgYCByZXNvbHZlcyBuYW1lZCBzZXF1ZW5jZXMgdG9vLgorCistIElzc3VlICMxMjE3MDogVGhlIGNvdW50KCksIGZpbmQoKSwgcmZpbmQoKSwgaW5kZXgoKSBhbmQgcmluZGV4KCkgbWV0aG9kcworICBvZiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgbm93IGFjY2VwdCBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1CisgIGFzIHRoZWlyIGZpcnN0IGFyZ3VtZW50LiAgUGF0Y2ggYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEyNjA0OiBWVFJBQ0UgbWFjcm8gZXhwYW5kZWQgdG8gbm8tb3AgaW4gX3NyZS5jIHRvIGF2b2lkIGNvbXBpbGVyCisgIHdhcm5pbmdzLiBQYXRjaCBieSBKb3NoIFRyaXBsZXR0IGFuZCBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTIyODE6IFJld3JpdGUgdGhlIE1CQ1MgY29kZWMgdG8gaGFuZGxlIGNvcnJlY3RseSByZXBsYWNlIGFuZCBpZ25vcmUKKyAgZXJyb3IgaGFuZGxlcnMgb24gYWxsIFdpbmRvd3MgdmVyc2lvbnMuIFRoZSBNQkNTIGNvZGVjIGlzIG5vdyBzdXBwb3J0aW5nIGFsbAorICBlcnJvciBoYW5kbGVycywgaW5zdGVhZCBvZiBvbmx5IHJlcGxhY2UgdG8gZW5jb2RlIGFuZCBpZ25vcmUgdG8gZGVjb2RlLgorCistIElzc3VlICMxMzE4ODogV2hlbiBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCB0cmFjZWJhY2sgYXJndW1lbnQsCisgIGdlbmVyYXRvci50aHJvdygpIG5vdyBnZXRzIHRoZSB0cmFjZWJhY2sgZnJvbSB0aGUgcGFzc2VkIGV4Y2VwdGlvbidzCisgIGBgX190cmFjZWJhY2tfX2BgIGF0dHJpYnV0ZS4gIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMzE0NjogV3JpdGluZyBhIHB5YyBmaWxlIGlzIG5vdyBhdG9taWMgdW5kZXIgUE9TSVguCisKKy0gSXNzdWUgIzc4MzM6IEV4dGVuc2lvbiBtb2R1bGVzIGJ1aWx0IHVzaW5nIGRpc3R1dGlscyBvbiBXaW5kb3dzIHdpbGwgbm8KKyAgbG9uZ2VyIGluY2x1ZGUgYSAibWFuaWZlc3QiIHRvIHByZXZlbnQgdGhlbSBmYWlsaW5nIGF0IGltcG9ydCB0aW1lIGluIHNvbWUKKyAgZW1iZWRkZWQgc2l0dWF0aW9ucy4KKworLSBQRVAgMzE1MSAvIGlzc3VlICMxMjU1NTogcmV3b3JraW5nIHRoZSBPUyBhbmQgSU8gZXhjZXB0aW9uIGhpZXJhcmNoeS4KKworLSBJc3N1ZSAjMTM1NjA6IEFkZCBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKCksIFB5VW5pY29kZV9EZWNvZGVMb2NhbGVBbmRTaXplKCkKKyAgYW5kIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoKSBmdW5jdGlvbnMgdG8gdGhlIEMgQVBJIHRvIGRlY29kZS9lbmNvZGUgZnJvbS90bworICB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcuCisKKy0gQWRkIGludGVybmFsIEFQSSBmb3Igc3RhdGljIHN0cmluZ3MgKF9QeV9pZGVudGlmaWVyIGV0IGFsLikuCisKKy0gSXNzdWUgIzEzMDYzOiB0aGUgV2luZG93cyBlcnJvciBFUlJPUl9OT19EQVRBIChudW1iZXJlZCAyMzIgYW5kIGRlc2NyaWJlZAorICBhcyAiVGhlIHBpcGUgaXMgYmVpbmcgY2xvc2VkIikgaXMgbm93IG1hcHBlZCB0byBQT1NJWCBlcnJubyBFUElQRQorICAocHJldmlvdXNseSBFSU5WQUwpLgorCistIElzc3VlICMxMjkxMTogRml4IG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIGNhbGN1bGF0aW5nIHRoZSByZXByKCkgb2YgaHVnZQorICB0dXBsZXMgb3IgbGlzdHMuCisKKy0gUEVQIDM5MzogZmxleGlibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBUaGFua3MgdG8gVG9yc3RlbiBCZWNrZXIgZm9yIHRoZQorICBpbml0aWFsIGltcGxlbWVudGF0aW9uLCBhbmQgVmljdG9yIFN0aW5uZXIgZm9yIHZhcmlvdXMgYnVnIGZpeGVzLgorCistIElzc3VlICMxNDA4MTogVGhlICdzZXAnIGFuZCAnbWF4c3BsaXQnIHBhcmFtZXRlciB0byBzdHIuc3BsaXQsIGJ5dGVzLnNwbGl0LAorICBhbmQgYnl0ZWFycmF5LnNwbGl0IG1heSBub3cgYmUgcGFzc2VkIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMxMzAxMjogVGhlICdrZWVwZW5kcycgcGFyYW1ldGVyIHRvIHN0ci5zcGxpdGxpbmVzIG1heSBub3cgYmUgcGFzc2VkCisgIGFzIGEga2V5d29yZCBhcmd1bWVudDogICJteV9zdHJpbmcuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSIuICBUaGUgc2FtZQorICBjaGFuZ2UgYWxzbyBhcHBsaWVzIHRvIGJ5dGVzLnNwbGl0bGluZXMgYW5kIGJ5dGVhcnJheS5zcGxpdGxpbmVzLgorCistIElzc3VlICM3NzMyOiBEb24ndCBvcGVuIGEgZGlyZWN0b3J5IGFzIGEgZmlsZSBhbnltb3JlIHdoaWxlIGltcG9ydGluZyBhCisgIG1vZHVsZS4gSWdub3JlIHRoZSBkaXJlY290cnkgaWYgaXRzIG5hbWUgbWF0Y2hzIHRoZSBtb2R1bGUgbmFtZSAoZS5nLgorICAiX19pbml0X18ucHkiKSBhbmQgcmFpc2UgYSBJbXBvcnRFcnJvciBpbnN0ZWFkLgorCistIElzc3VlICMxMzAyMTogTWlzc2luZyBkZWNyZWYgb24gYW4gZXJyb3IgcGF0aC4gIFRoYW5rcyB0byBTdW1hbiBTYWhhIGZvcgorICBmaW5kaW5nIHRoZSBidWcgYW5kIHByb3ZpZGluZyBhIHBhdGNoLgorCistIElzc3VlICMxMjk3MzogRml4IG92ZXJmbG93IGNoZWNrcyB0aGF0IHJlbGllZCBvbiB1bmRlZmluZWQgYmVoYXZpb3VyIGluCisgIGxpc3RfcmVwZWF0IChsaXN0b2JqZWN0LmMpIGFuZCBpc2xpY2VfbmV4dCAoaXRlcnRvb2xzbW9kdWxlLmMpLiAgVGhlc2UgYnVncworICBjYXVzZWQgdGVzdCBmYWlsdXJlcyB3aXRoIHJlY2VudCB2ZXJzaW9ucyBvZiBDbGFuZy4KKworLSBJc3N1ZSAjMTI5MDQ6IG9zLnV0aW1lLCBvcy5mdXRpbWVzLCBvcy5sdXRpbWVzLCBhbmQgb3MuZnV0aW1lc2F0IG5vdyB3cml0ZQorICBhdGltZSBhbmQgbXRpbWUgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbiBvbiBtb2Rlcm4gUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMjgwMjogdGhlIFdpbmRvd3MgZXJyb3IgRVJST1JfRElSRUNUT1JZIChudW1iZXJlZCAyNjcpIGlzIG5vdworICBtYXBwZWQgdG8gUE9TSVggZXJybm8gRU5PVERJUiAocHJldmlvdXNseSBFSU5WQUwpLgorCistIElzc3VlICM5MjAwOiBUaGUgc3RyLmlzKiBtZXRob2RzIG5vdyB3b3JrIHdpdGggc3RyaW5ncyB0aGF0IGNvbnRhaW4gbm9uLUJNUAorICBjaGFyYWN0ZXJzIGV2ZW4gaW4gbmFycm93IFVuaWNvZGUgYnVpbGRzLgorCistIElzc3VlICMxMjc5MTogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBlYXJseSB3aGVuIGEgZ2VuZXJhdG9yIGV4aXRzIHdpdGgKKyAgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxMjc3MzogTWFrZSBfX2RvY19fIG11dGFibGUgb24gdXNlci1kZWZpbmVkIGNsYXNzZXMuCisKKy0gSXNzdWUgIzEyNzY2OiBSYWlzZSBhIFZhbHVlRXJyb3Igd2hlbiBjcmVhdGluZyBhIGNsYXNzIHdpdGggYSBjbGFzcyB2YXJpYWJsZQorICB0aGF0IGNvbmZsaWN0cyB3aXRoIGEgbmFtZSBpbiBfX3Nsb3RzX18uCisKKy0gSXNzdWUgIzEyMjY2OiBGaXggc3RyLmNhcGl0YWxpemUoKSB0byBjb3JyZWN0bHkgdXBwZXJjYXNlL2xvd2VyY2FzZQorICB0aXRsZWNhc2VkIGFuZCBjYXNlZCBub24tbGV0dGVyIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzEyNzMyOiBJbiBuYXJyb3cgdW5pY29kZSBidWlsZHMsIGFsbG93IFVuaWNvZGUgaWRlbnRpZmllcnMgd2hpY2ggZmFsbAorICBvdXRzaWRlIHRoZSBCTVAuCisKKy0gSXNzdWUgIzEyNTc1OiBWYWxpZGF0ZSB1c2VyLWdlbmVyYXRlZCBBU1QgYmVmb3JlIGl0IGlzIGNvbXBpbGVkLgorCistIE1ha2UgdHlwZShOb25lKSwgdHlwZShFbGxpcHNpcyksIGFuZCB0eXBlKE5vdEltcGxlbWVudGVkKSBjYWxsYWJsZS4gVGhleQorICByZXR1cm4gdGhlIHJlc3BlY3RpdmUgc2luZ2xldG9uIGluc3RhbmNlcy4KKworLSBGb3JiaWQgc3VtbWluZyBieXRlcyB3aXRoIHN1bSgpLgorCistIFZlcmlmeSB0aGUgdHlwZXMgb2YgQVNUIHN0cmluZ3MgYW5kIGlkZW50aWZpZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGJlZm9yZQorICBjb21waWxpbmcgdGhlbS4KKworLSBJc3N1ZSAjMTI2NDc6IFRoZSBOb25lIG9iamVjdCBub3cgaGFzIGEgX19ib29sX18oKSBtZXRob2QgdGhhdCByZXR1cm5zIEZhbHNlLgorICBGb3JtZXJseSwgYm9vbChOb25lKSByZXR1cm5lZCBGYWxzZSBvbmx5IGJlY2F1c2Ugb2Ygc3BlY2lhbCBjYXNlIGxvZ2ljCisgIGluIFB5T2JqZWN0X0lzVHJ1ZSgpLgorCistIElzc3VlICMxMjU3OTogc3RyLmZvcm1hdF9tYXAoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB1c2VkIG9uIGEKKyAgZm9ybWF0IHN0cmluZyB0aGF0IGNvbnRhaW5zIHBvc2l0aW9uYWwgZmllbGRzLiBJbml0aWFsIHBhdGNoIGJ5CisgIEp1bGlhbiBCZXJtYW4uCisKKy0gSXNzdWUgIzEwMjcxOiBBbGxvdyB3YXJuaW5ncy5zaG93d2FybmluZygpIGJlIGFueSBjYWxsYWJsZS4KKworLSBJc3N1ZSAjMTE2Mjc6IEZpeCBzZWdmYXVsdCB3aGVuIF9fbmV3X18gb24gYSBleGNlcHRpb24gcmV0dXJucyBhCisgIG5vbi1leGNlcHRpb24gY2xhc3MuCisKKy0gSXNzdWUgIzEyMTQ5OiBVcGRhdGUgdGhlIG1ldGhvZCBjYWNoZSBhZnRlciBhIHR5cGUncyBkaWN0aW9uYXJ5IGdldHMKKyAgY2xlYXJlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuICBUaGlzIGZpeGVzIGEgc2VnZmF1bHQgd2hlbiBhbiBpbnN0YW5jZQorICBhbmQgaXRzIHR5cGUgZ2V0IGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZSwgYW5kIHRoZSBpbnN0YW5jZSdzCisgIGRlYWxsb2NhdG9yIGNhbGxzIG9uZSBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgdHlwZSAoZS5nLiB3aGVuIHN1YmNsYXNzaW5nCisgIElPQmFzZSkuICBEaWFnbm9zaXMgYW5kIHBhdGNoIGJ5IERhdmlkZSBSaXp6by4KKworLSBJc3N1ZSAjOTYxMSwgIzkwMTU6IEZpbGVJTy5yZWFkKCkgY2xhbXBzIHRoZSBsZW5ndGggdG8gSU5UX01BWCBvbiBXaW5kb3dzLgorCistIElzc3VlICM5NjQyOiBVbmlmb3JtaXplIHRoZSB0ZXN0cyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBtYmNzIGNvZGVjLCBhZGQKKyAgYSBuZXcgSEFWRV9NQkNTIGRlZmluZS4KKworLSBJc3N1ZSAjOTY0MjogRml4IGZpbGVzeXN0ZW0gZW5jb2RpbmcgaW5pdGlhbGl6YXRpb246IHVzZSB0aGUgQU5TSSBjb2RlIHBhZ2UKKyAgb24gV2luZG93cyBpZiB0aGUgbWJjcyBjb2RlYyBpcyBub3QgYXZhaWxhYmxlLCBhbmQgZmFpbCB3aXRoIGEgZmF0YWwgZXJyb3IgaWYKKyAgd2UgY2Fubm90IGdldCB0aGUgbG9jYWxlIGVuY29kaW5nIChpZiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub3QgYXZhaWxhYmxlKQorICBpbnN0ZWFkIG9mIHVzaW5nIFVURi04LgorCistIFdoZW4gYSBnZW5lcmF0b3IgeWllbGRzLCBkbyBub3QgcmV0YWluIHRoZSBjYWxsZXIncyBleGNlcHRpb24gc3RhdGUgb24gdGhlCisgIGdlbmVyYXRvci4KKworLSBJc3N1ZSAjMTI0NzU6IFByZXZlbnQgZ2VuZXJhdG9ycyBmcm9tIGxlYWtpbmcgdGhlaXIgZXhjZXB0aW9uIHN0YXRlIGludG8gdGhlCisgIGNhbGxlcidzIGZyYW1lIGFzIHRoZXkgcmV0dXJuIGZvciB0aGUgbGFzdCB0aW1lLgorCistIElzc3VlICMxMjI5MTogWW91IGNhbiBub3cgbG9hZCBtdWx0aXBsZSBtYXJzaGFsbGVkIG9iamVjdHMgZnJvbSBhIHN0cmVhbSwKKyAgd2l0aCBvdGhlciBkYXRhIGludGVybGVhdmVkIGJldHdlZW4gbWFyc2hhbGxlZCBvYmplY3RzLgorCistIElzc3VlICMxMjM1NjogV2hlbiByZXF1aXJlZCBwb3NpdGlvbmFsIG9yIGtleXdvcmQtb25seSBhcmd1bWVudHMgYXJlIG5vdAorICBnaXZlbiwgcHJvZHVjZSBhIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIG5hbWUocykgb2YgdGhlCisgIG1pc3NpbmcgYXJndW1lbnRzLgorCistIElzc3VlICMxMjM3MDogRml4IHN1cGVyIHdpdGggbm8gYXJndW1lbnRzIHdoZW4gX19jbGFzc19fIGlzIG92ZXJyaWRlbiBpbiB0aGUKKyAgY2xhc3MgYm9keS4KKworLSBJc3N1ZSAjMTIwODQ6IG9zLnN0YXQgb24gV2luZG93cyBub3cgd29ya3MgcHJvcGVybHkgd2l0aCByZWxhdGl2ZSBzeW1ib2xpYworICBsaW5rcyB3aGVuIGNhbGxlZCBmcm9tIGFueSBkaXJlY3RvcnkuCisKKy0gTG9vc2VuIHR5cGUgcmVzdHJpY3Rpb25zIG9uIHRoZSBfX2Rpcl9fIG1ldGhvZC4gX19kaXJfXyBjYW4gbm93IHJldHVybiBhbnkKKyAgc2VxdWVuY2UsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgbGlzdCBhbmQgc29ydGVkIGJ5IGRpcigpLgorCistIElzc3VlICMxMjI2NTogTWFrZSBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCBieSBwYXNzaW5nIGFuIGludmFsaWQgc2V0IG9mCisgIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIG1vcmUgaW5mb3JtYXRpdmUuCisKKy0gSXNzdWUgIzEyMjI1OiBTdGlsbCBhbGxvdyBQeXRob24gdG8gYnVpbGQgaWYgUHl0aG9uIGlzIG5vdCBpbiBpdHMgaGcgcmVwbyBvcgorICBtZXJjdXJpYWwgaXMgbm90IGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTE5NTogbXlfZmdldHMoKSBub3cgYWx3YXlzIGNsZWFycyBlcnJvcnMgYmVmb3JlIGNhbGxpbmcgZmdldHMoKS4gRml4CisgIHRoZSBmb2xsb3dpbmcgY2FzZTogc3lzLnN0ZGluLnJlYWQoKSBzdG9wcGVkIHdpdGggQ1RSTCtkIChlbmQgb2YgZmlsZSksCisgIHJhd19pbnB1dCgpIGludGVycnVwdGVkIGJ5IENUUkwrYy4KKworLSBJc3N1ZSAjMTIyMTY6IEFsbG93IHVuZXhwZWN0ZWQgRU9GIGVycm9ycyB0byBoYXBwZW4gb24gYW55IGxpbmUgb2YgdGhlIGZpbGUuCisKKy0gSXNzdWUgIzEyMTk5OiBUaGUgVHJ5RXhjZXB0IGFuZCBUcnlGaW5hbGx5IGFuZCBBU1Qgbm9kZXMgaGF2ZSBiZWVuIHVuaWZpZWQKKyAgaW50byBhIFRyeSBub2RlLgorCistIElzc3VlICM5NjcwOiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgorICBNYWMgT1MgWCBhbmQgRnJlZUJTRCB0byByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgYSBjcmFzaCBpbnN0ZWFkIG9mIGEKKyAgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIiBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLgorICAocGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjEwNjogVGhlIHVzZSBvZiB0aGUgbXVsdGlwbGUtd2l0aCBzaG9ydGhhbmQgc3ludGF4IGlzIG5vdyByZWZsZWN0ZWQKKyAgaW4gdGhlIEFTVC4KKworLSBJc3N1ZSAjMTIxOTA6IFRyeSB0byB1c2UgdGhlIHNhbWUgZmlsZW5hbWUgb2JqZWN0IHdoZW4gY29tcGlsaW5nIHVubWFyc2hhbGxpbmcKKyAgYSBjb2RlIG9iamVjdHMgaW4gdGhlIHNhbWUgZmlsZS4KKworLSBJc3N1ZSAjMTIxNjY6IE1vdmUgaW1wbGVtZW50YXRpb25zIG9mIGRpcigpIHNwZWNpYWxpemVkIGZvciB2YXJpb3VzIHR5cGVzIGludG8KKyAgdGhlIF9fZGlyX18oKSBtZXRob2RzIG9mIHRob3NlIHR5cGVzLgorCistIElzc3VlICM1NzE1OiBJbiBzb2NrZXRzZXJ2ZXIsIGNsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzLgorCistIENvcnJlY3QgbG9va3VwIG9mIF9fZGlyX18gb24gb2JqZWN0cy4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhdXNlcyBlcnJvcnMKKyAgYmVzaWRlcyBBdHRyaWJ1dGVFcnJvciBmb3VuZCBvbiBsb29rdXAgdG8gYmUgcHJvcGFnYXRlZC4KKworLSBJc3N1ZSAjMTIwNjA6IFVzZSBzaWdfYXRvbWljX3QgdHlwZSBhbmQgdm9sYXRpbGUga2V5d29yZCBpbiB0aGUgc2lnbmFsCisgIG1vZHVsZS4gUGF0Y2ggd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzE3NDY2NTY6IEFkZGVkIHRoZSBpZl9uYW1laW5kZXgsIGlmX2luZGV4dG9uYW1lLCBpZl9uYW1ldG9pbmRleAorICBtZXRob2RzIHRvIHRoZSBzb2NrZXQgbW9kdWxlLgorCistIElzc3VlICMxMjA0NDogRml4ZWQgc3VicHJvY2Vzcy5Qb3BlbiB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdG8KKyAgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gZW5kIHdoZW4gZXhpdGluZyB0aGUgY29udGV4dCB0byBhdm9pZCB1bmludGVudGlvbmFsbHkKKyAgbGVhdmluZyB6b21iaWUgcHJvY2Vzc2VzIGFyb3VuZC4KKworLSBJc3N1ZSAjMTE5NTogRml4IGlucHV0KCkgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgQ1RSTCtkIGFuZCB0aGVuIENUUkwrYywKKyAgY2xlYXIgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBhZnRlciBDVFJMK2QuCisKKy0gSXNzdWUgIzE4NTY6IEF2b2lkIGNyYXNoZXMgYW5kIGxvY2t1cHMgd2hlbiBkYWVtb24gdGhyZWFkcyBydW4gd2hpbGUgdGhlCisgIGludGVycHJldGVyIGlzIHNodXR0aW5nIGRvd247IGluc3RlYWQsIHRoZXNlIHRocmVhZHMgYXJlIG5vdyBraWxsZWQgd2hlbgorICB0aGV5IHRyeSB0byB0YWtlIHRoZSBHSUwuCisKKy0gSXNzdWUgIzk3NTY6IFdoZW4gY2FsbGluZyBhIG1ldGhvZCBkZXNjcmlwdG9yIG9yIGEgc2xvdCB3cmFwcGVyIGRlc2NyaXB0b3IsCisgIHRoZSBjaGVjayBvZiB0aGUgb2JqZWN0IHR5cGUgZG9lc24ndCByZWFkIHRoZSBfX2NsYXNzX18gYXR0cmlidXRlIGFueW1vcmUuCisgIEZpeCBhIGNyYXNoIGlmIGEgY2xhc3Mgb3ZlcnJpZGUgaXRzIF9fY2xhc3NfXyBhdHRyaWJ1dGUgKGUuZy4gYSBwcm94eSBvZiB0aGUKKyAgc3RyIHR5cGUpLiBQYXRjaCB3cml0dGVuIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTA1MTc6IEFmdGVyIGZvcmsoKSwgcmVpbml0aWFsaXplIHRoZSBUTFMgdXNlZCBieSB0aGUgUHlHSUxTdGF0ZV8qCisgIEFQSXMsIHRvIGF2b2lkIGEgY3Jhc2ggd2l0aCB0aGUgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBpbiBSSEVMIDUuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEwOTE0OiBJbml0aWFsaXplIGNvcnJlY3RseSB0aGUgZmlsZXN5c3RlbSBjb2RlYyB3aGVuIGNyZWF0aW5nIGEgbmV3CisgIHN1YmludGVycHJldGVyIHRvIGZpeCBhIGJvb3RzdHJhcCBpc3N1ZSB3aXRoIGNvZGVjcyBpbXBsZW1lbnRlZCBpbiBQeXRob24sIGFzCisgIHRoZSBJU08tODg1OS0xNSBjb2RlYy4KKworLSBJc3N1ZSAjMTE5MTg6IE9TLzIgYW5kIFZNUyBhcmUgbm8gbW9yZSBzdXBwb3J0ZWQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZgorICBtYWludGFpbmVyLgorCistIElzc3VlICM2NzgwOiBmaXggc3RhcnRzL2VuZHN3aXRoIGVycm9yIG1lc3NhZ2UgdG8gbWVudGlvbiB0aGF0IHR1cGxlcyBhcmUKKyAgYWNjZXB0ZWQgdG9vLgorCistIElzc3VlICM1MDU3OiBmaXggYSBidWcgaW4gdGhlIHBlZXBob2xlciB0aGF0IGxlZCB0byBub24tcG9ydGFibGUgcHljIGZpbGVzCisgIGJldHdlZW4gbmFycm93IGFuZCB3aWRlIGJ1aWxkcyB3aGlsZSBvcHRpbWl6aW5nIEJJTkFSWV9TVUJTQ1Igb24gbm9uLUJNUAorICBjaGFycyAoZS5nLiAiXFUwMDAxMjM0NSJbMF0pLgorCistIElzc3VlICMxMTg0NTogRml4IHR5cG8gaW4gcmFuZ2VvYmplY3QuYyB0aGF0IGNhdXNlZCBhIGNyYXNoIGluCisgIGNvbXB1dGVfc2xpY2VfaW5kaWNlcy4gIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjNTY3MzogQWRkZWQgYSBgdGltZW91dGAga2V5d29yZCBhcmd1bWVudCB0byBzdWJwcm9jZXNzLlBvcGVuLndhaXQsCisgIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGVkLCBzdWJwcm9jZXNzLmNhbGwsIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCwgYW5kCisgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LiAgSWYgdGhlIGJsb2NraW5nIG9wZXJhdGlvbiB0YWtlcyBtb3JlIHRoYW4gYHRpbWVvdXRgCisgIHNlY29uZHMsIHRoZSBgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTE2NTA6IFB5T1NfU3RkaW9SZWFkbGluZSgpIHJldHJpZXMgZmdldHMoKSBpZiBpdCB3YXMgaW50ZXJydXB0ZWQKKyAgKEVJTlRSKSwgZm9yIGV4YW1wbGUgaWYgdGhlIHByb2dyYW0gaXMgc3RvcHBlZCB3aXRoIENUUkwreiBvbiBNYWMgT1MgWC4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTMxOTogSW5jbHVkZSB0aGUgZmlsZW5hbWUgaW4gIk5vbi1VVEY4IGNvZGUgLi4uIiBzeW50YXggZXJyb3IuCisKKy0gSXNzdWUgIzEwNzg1OiBTdG9yZSB0aGUgZmlsZW5hbWUgYXMgVW5pY29kZSBpbiB0aGUgUHl0aG9uIHBhcnNlci4KKworLSBJc3N1ZSAjMTE2MTk6IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSgpIGRvZXNuJ3QgZW5jb2RlIHRoZSBwYXRoIHRvIGJ5dGVzCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEwOTk4OiBSZW1vdmUgbWVudGlvbnMgb2YgLVEsIHN5cy5mbGFncy5kaXZpc2lvbl93YXJuaW5nIGFuZAorICBQeV9EaXZpc2lvbldhcm5pbmdGbGFnIGxlZnQgb3ZlciBmcm9tIFB5dGhvbiAyLgorCistIElzc3VlICMxMTI0NDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IHBlZXBob2xlciBjaGVjayB0aGF0IHdhcyBwcmV2ZW50aW5nCisgIG5lZ2F0aXZlIHplcm9zIGZyb20gYmVpbmcgY29uc3RhbnQtZm9sZGVkIHByb3Blcmx5LgorCistIElzc3VlICMxMTM5NTogaW8uRmlsZUlPKCkud3JpdGUoKSBjbGFtcHMgdGhlIGRhdGEgbGVuZ3RoIHRvIDMyLDc2NyBieXRlcyBvbgorICBXaW5kb3dzIGlmIHRoZSBmaWxlIGlzIGEgVFRZIHRvIHdvcmthcm91bmQgYSBXaW5kb3dzIGJ1Zy4gVGhlIFdpbmRvd3MgY29uc29sZQorICByZXR1cm5zIGFuIGVycm9yICgxMjogbm90IGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZgorICBzdGRvdXQgbW9kZSBpcyBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKKyAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLgorCistIElzc3VlICMxMTMyMDogZml4IGJvZ3VzIG1lbW9yeSBtYW5hZ2VtZW50IGluIE1vZHVsZXMvZ2V0cGF0aC5jLCBsZWFkaW5nIHRvCisgIGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjYWxsaW5nIFB5X1NldFBhdGgoKS4KKworLSBJc3N1ZSAjMTE0MzI6IEEgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHN1YnByb2Nlc3MuUG9wZW4gb24gcG9zaXggc3lzdGVtcyB3aXRoCisgIDMuMi4wIHdoZXJlIHRoZSBzdGRvdXQgb3Igc3RkZXJyIGZpbGUgZGVzY3JpcHRvciBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc3RkaW4KKyAgZmlsZSBkZXNjcmlwdG9yIHdvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4gd2ViYnJvd3Nlci5vcGVuIHdvdWxkIGZhaWwuIGZpeGVkLgorCistIElzc3VlICM5ODU2OiBDaGFuZ2Ugb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nCisgIHRvIGJlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBJbiAzLjIgaXQgd2FzIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4KKyAgSW4gMy40IGl0IHdpbGwgYmUgYSBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzExMjQ0OiBUaGUgcGVlcGhvbGUgb3B0aW1pemVyIGlzIG5vdyBhYmxlIHRvIGNvbnN0YW50LWZvbGQKKyAgYXJiaXRyYXJpbHkgY29tcGxleCBleHByZXNzaW9ucy4gIFRoaXMgYWxzbyBmaXhlcyBhIDMuMiByZWdyZXNzaW9uIHdoZXJlCisgIG9wZXJhdGlvbnMgaW52b2x2aW5nIG5lZ2F0aXZlIG51bWJlcnMgd2VyZSBub3QgY29uc3RhbnQtZm9sZGVkLgorCistIElzc3VlICMxMTQ1MDogRG9uJ3QgdHJ1bmNhdGUgaGcgdmVyc2lvbiBpbmZvIGluIFB5X0dldEJ1aWxkSW5mbygpIHdoZW4KKyAgdGhlcmUgYXJlIG1hbnkgdGFncyAoZS5nLiB3aGVuIHVzaW5nIG1xKS4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTEzMzU6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gbGlzdC5zb3J0IHdoZW4gdGhlIGtleSBmdW5jdGlvbgorICB0aHJvd3MgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICM4OTIzOiBXaGVuIGEgc3RyaW5nIGlzIGVuY29kZWQgdG8gVVRGLTggaW4gc3RyaWN0IG1vZGUsIHRoZSByZXN1bHQgaXMKKyAgY2FjaGVkIGludG8gdGhlIG9iamVjdC4gRXhhbXBsZXM6IHN0ci5lbmNvZGUoKSwgc3RyLmVuY29kZSgndXRmLTgnKSwKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpIGFuZCBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHVuaWNvZGUsICJ1dGYtOCIsCisgIE5VTEwpLgorCistIElzc3VlICMxMDgzMTogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBzdXBwb3J0cyAlbGksICVsbGkgYW5kICV6aSBmb3JtYXRzLgorCistIElzc3VlICMxMDgyOTogUmVmYWN0b3IgUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSwgdXNlIHRoZSBzYW1lIGZ1bmN0aW9uIHRvIHBhcnNlCisgIHRoZSBmb3JtYXQgc3RyaW5nIGluIHRoZSAzIHN0ZXBzLCBmaXggY3Jhc2hzIG9uIGludmFsaWQgZm9ybWF0IHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzMDA3OiB3aGljaGRiIHNob3VsZCByZWNvZ25pemUgZ2RibSAxLjkgbWFnaWMgbnVtYmVycy4KKworLSBJc3N1ZSAjMTEyNDY6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVYiKSB0byBkZWNvZGUgdGhlIGJ5dGUgc3RyaW5nIGZyb20KKyAgVVRGLTggKHdpdGggcmVwbGFjZSBlcnJvciBoYW5kbGVyKSBpbnN0ZWFkIG9mIElTTy04ODU5LTEgKGluIHN0cmljdCBtb2RlKS4KKyAgUGF0Y2ggd3JpdHRlbiBieSBSYXkgQWxsZW4uCisKKy0gSXNzdWUgIzExMjg2OiBSYWlzZSBhIFZhbHVlRXJyb3IgZnJvbSBjYWxsaW5nIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyIHdpdGgKKyAgYSBidWZmZXIgc3RydWN0IGhhdmluZyBhIE5VTEwgZGF0YSBwb2ludGVyLgorCistIElzc3VlICMxMTI3MjogT24gV2luZG93cywgaW5wdXQoKSBzdHJpcHMgJ1xyJyAoYW5kIG5vdCBvbmx5ICdcbicpLCBhbmQKKyAgc3lzLnN0ZGluIHVzZXMgdW5pdmVyc2FsIG5ld2xpbmUgKHJlcGxhY2UgJ1xyXG4nIGJ5ICdcbicpLgorCistIElzc3VlICMxMTgyODogc3RhcnRzd2l0aCBhbmQgZW5kc3dpdGggbm93IGFjY2VwdCBOb25lIGFzIHNsaWNlIGluZGV4LgorICBQYXRjaCBieSBUb3JzdGVuIEJlY2tlci4KKworLSBJc3N1ZSAjMTA4MzA6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoIiVjIikgZm9yIG5vbi1CTVAgY2hhcmFjdGVycyBvbgorICBuYXJyb3cgYnVpbGQuCisKKy0gSXNzdWUgIzExMTY4OiBSZW1vdmUgZmlsZW5hbWUgZGVidWcgdmFyaWFibGUgZnJvbSBQeUV2YWxfRXZhbEZyYW1lRXgoKS4KKyAgSXQgZW5jb2RlZCB0aGUgVW5pY29kZSBmaWxlbmFtZSB0byBVVEYtOCwgYnV0IHRoZSBlbmNvZGluZyBmYWlscyBvbgorICB1bmRlY29kYWJsZSBmaWxlbmFtZSAob24gc3Vycm9nYXRlIGNoYXJhY3RlcnMpIHdoaWNoIHJhaXNlcyBhbiB1bmV4cGVjdGVkCisgIFVuaWNvZGVFbmNvZGVFcnJvciBvbiByZWN1cnNpb24gbGltaXQuCisKKy0gSXNzdWUgIzExMTg3OiBSZW1vdmUgYm9vdHN0cmFwIGNvZGUgKHVzZSBBU0NJSSkgb2YKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygpLCBpdCB3YXMgcmVwbGFjZWQgYnkgYSBiZXR0ZXIgZmFsbGJhY2sgKHVzZSB0aGUKKyAgbG9jYWxlIGVuY29kaW5nKSBpbiBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KCkuCisKKy0gQ2hlY2sgZm9yIE5VTEwgcmVzdWx0IGluIFB5VHlwZV9Gcm9tU3BlYy4KKworLSBJc3N1ZSAjMTA1MTY6IE5ldyBjb3B5KCkgYW5kIGNsZWFyKCkgbWV0aG9kcyBmb3IgbGlzdHMgYW5kIGJ5dGVhcnJheXMuCisKKy0gSXNzdWUgIzExMzg2OiBieXRlYXJyYXkucG9wKCkgbm93IHRocm93cyBJbmRleEVycm9yIHdoZW4gdGhlIGJ5dGVhcnJheSBpcworICBlbXB0eSwgaW5zdGVhZCBvZiBPdmVyZmxvd0Vycm9yLgorCistIElzc3VlICMxMjM4MDogVGhlIHJqdXN0LCBsanVzdCBhbmQgY2VudGVyIG1ldGhvZHMgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheQorICBub3cgYWNjZXB0IGEgYnl0ZWFycmF5IGFyZ3VtZW50LgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0MTk1OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCB3ZWFrcmVmLldlYWtTZXQgaW5zdGFuY2VzIHRvIGluY29ycmVjdGx5CisgIHJldHVybiBUcnVlIGZvciBhIFdlYWtTZXQgaW5zdGFuY2UgJ2EnIGluIGJvdGggJ2EgPCBhJyBhbmQgJ2EgPiBhJyBoYXMgYmVlbgorICBmaXhlZC4KKworLSBJc3N1ZSAjMTQxNjY6IFBpY2tsZXIgb2JqZWN0cyBub3cgaGF2ZSBhbiBvcHRpb25hbCBgYGRpc3BhdGNoX3RhYmxlYGAKKyAgYXR0cmlidXRlIHdoaWNoIGFsbG93cyB0byBzZXQgY3VzdG9tIHBlci1waWNrbGVyIHJlZHVjdGlvbiBmdW5jdGlvbnMuCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQxNzc6IG1hcnNoYWwubG9hZHMoKSBub3cgcmFpc2VzIFR5cGVFcnJvciB3aGVuIGdpdmVuIGFuIHVuaWNvZGUKKyAgc3RyaW5nLiAgUGF0Y2ggYnkgR3VpbGhlcm1lIEdvbsOnYWx2ZXMuCisKKy0gSXNzdWUgIzEzNTUwOiBSZW1vdmUgdGhlIGRlYnVnIG1hY2hpbmVyeSBmcm9tIHRoZSB0aHJlYWRpbmcgbW9kdWxlOiByZW1vdmUKKyAgdmVyYm9zZSBhcmd1bWVudHMgZnJvbSBhbGwgdGhyZWFkaW5nIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTQxNTk6IEZpeCB0aGUgbGVuKCkgb2Ygd2VhayBjb250YWluZXJzIChXZWFrU2V0LCBXZWFrS2V5RGljdGlvbmFyeSwKKyAgV2Vha1ZhbHVlRGljdGlvbmFyeSkgdG8gcmV0dXJuIGEgYmV0dGVyIGFwcHJveGltYXRpb24gd2hlbiBzb21lIG9iamVjdHMKKyAgYXJlIGRlYWQgb3IgZHlpbmcuICBNb3Jlb3ZlciwgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdyBPKDEpIHJhdGhlciB0aGFuCisgIE8obikuCisKKy0gSXNzdWUgIzEzMTI1OiBTaWxlbmNlIHNwdXJpb3VzIHRlc3RfbGliMnRvMyBvdXRwdXQgd2hlbiBpbiBub24tdmVyYm9zZSBtb2RlLgorICBQYXRjaCBieSBNaWtoYWlsIE5vdmlrb3YuCisKKy0gSXNzdWUgIzExODQxOiBGaXggY29tcGFyaXNvbiBidWcgd2l0aCAncmMnIHZlcnNpb25zIGluIHBhY2thZ2luZy52ZXJzaW9uLgorICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMzQ0NzogQWRkIGEgdGVzdCBmaWxlIHRvIGhvc3QgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYnVncyBpbiB0aGUKKyAgc2NyaXB0cyBmb3VuZCBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCistIElzc3VlICM2ODg0OiBGaXggbG9uZy1zdGFuZGluZyBidWdzIHdpdGggTUFOSUZFU1QuaW4gcGFyc2luZyBpbiBkaXN0dXRpbHMKKyAgb24gV2luZG93cy4gIEFsc28gZml4ZWQgaW4gcGFja2FnaW5nLgorCistIElzc3VlICM4MDMzOiBzcWxpdGUzOiBGaXggNjQtYml0IGludGVnZXIgaGFuZGxpbmcgaW4gdXNlciBmdW5jdGlvbnMKKyAgb24gMzItYml0IGFyY2hpdGVjdHVyZXMuIEluaXRpYWwgcGF0Y2ggYnkgUGhpbGlwcGUgRGV2YWxrZW5lZXIuCisKKy0gSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgc2xhc2hlcyBpbiB0aGUgc3RhcnQgdGFnLgorCistIElzc3VlICMxMzY0MTogRGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoZSBiYXNlNjQgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQorICB1bmljb2RlIHN0cmluZ3MuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxNDA0MzogU3BlZWQgdXAgaW1wb3J0bGliJ3MgX0ZpbGVGaW5kZXIgYnkgYXQgbGVhc3QgOHgsIGFuZCBhZGQgYQorICBuZXcgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE0MDAxOiBDVkUtMjAxMi0wODQ1OiB4bWxycGM6IEZpeCBhbiBlbmRsZXNzIGxvb3AgaW4KKyAgU2ltcGxlWE1MUlBDU2VydmVyIHVwb24gbWFsZm9ybWVkIFBPU1QgcmVxdWVzdC4KKworLSBJc3N1ZSAjMTM5NjE6IE1vdmUgaW1wb3J0bGliIG92ZXIgdG8gdXNpbmcgb3MucmVwbGFjZSgpIGZvciBhdG9taWMgcmVuYW1pbmcuCisKKy0gRG8gYXdheSB3aXRoIGFtYmlndW91cyBsZXZlbCB2YWx1ZXMgKGFzIHN1Z2dlc3RlZCBieSBQRVAgMzI4KSBpbgorICBpbXBvcnRsaWIuX19pbXBvcnRfXygpIGJ5IHJhaXNpbmcgVmFsdWVFcnJvciB3aGVuIGxldmVsIDwgMC4KKworLSBJc3N1ZSAjMjQ4OTogcHR5LnNwYXduIGNvdWxkIGNvbnN1bWUgMTAwJSBjcHUgd2hlbiBpdCBlbmNvdW50ZXJlZCBhbiBFT0YuCisKKy0gSXNzdWUgIzEzMDE0OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKS4KKworLSBJc3N1ZSAjMTM3Nzc6IEFkZCBQRl9TWVNURU0gc29ja2V0cyBvbiBPUyBYLgorICBQYXRjaCBieSBNaWNoYWVsIEdvZGVyYmF1ZXIuCisKKy0gSXNzdWUgIzEzMDE1OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBkZWZhdWx0ZGljdC5fX3JlcHJfXy4KKyAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTMyNjExMzogZGlzdHV0aWxzJyBhbmQgcGFja2FnaW5nJ3MgYnVpbGRfZXh0IGNvbW1hbmRzIG9wdGlvbiBub3cKKyAgY29ycmVjdGx5IHBhcnNlcyBtdWx0aXBsZSB2YWx1ZXMgKHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIG9yIGNvbW1hcykgZ2l2ZW4KKyAgdG8gdGhlaXIgLS1saWJyYXJpZXMgb3B0aW9uLgorCistIElzc3VlICMxMDI4Nzogbm50cGxpYiBub3cgcXVlcmllcyB0aGUgc2VydmVyJ3MgQ0FQQUJJTElUSUVTIGZpcnN0IGJlZm9yZQorICBzZW5kaW5nIE1PREUgUkVBREVSLCBhbmQgb25seSBzZW5kcyBpdCBpZiBub3QgYWxyZWFkeSBpbiBSRUFERVIgbW9kZS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk5MzogSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgYnJva2VuIGVuZCB0YWdzIHdoZW4KKyAgc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMzkzMDogbGliMnRvMyBub3cgc3VwcG9ydHMgd3JpdGluZyBjb252ZXJ0ZWQgb3V0cHV0IGZpbGVzIHRvIGFub3RoZXIKKyAgZGlyZWN0b3J5IHRyZWUgYXMgd2VsbCBhcyBjb3B5aW5nIHVuY2hhbmdlZCBmaWxlcyBhbmQgYWx0ZXJpbmcgdGhlIGZpbGUKKyAgc3VmZml4LgorCistIElzc3VlICM5NzUwOiBGaXggc3FsaXRlMy5Db25uZWN0aW9uLml0ZXJkdW1wIG9uIHRhYmxlcyBhbmQgZmllbGRzCisgIHdpdGggYSBuYW1lIHRoYXQgaXMgYSBrZXl3b3JkIG9yIGNvbnRhaW5zIHF1b3Rlcy4gUGF0Y2ggYnkgTWFya28KKyAgS29odGFsYS4KKworLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBhZ2FpbiBhZnRlcgorICBhdXRoZW50aWNhdGluZyAoc2luY2UgdGhlIHJlc3VsdCBtYXkgY2hhbmdlLCBhY2NvcmRpbmcgdG8gUkZDIDQ2NDMpLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzOTg5OiBEb2N1bWVudCB0aGF0IEd6aXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgdGV4dCBtb2RlLCBhbmQgZ2l2ZSBhCisgIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gb3BlbmVkIHdpdGggYW4gaW52YWxpZCBtb2RlIHN0cmluZy4KKworLSBJc3N1ZSAjMTM1OTA6IE9uIE9TIFggMTAuNyBhbmQgMTAuNiB3aXRoIFhjb2RlIDQuMiwgYnVpbGRpbmcKKyAgRGlzdHV0aWxzLWJhc2VkIHBhY2thZ2VzIHdpdGggQyBleHRlbnNpb24gbW9kdWxlcyBtYXkgZmFpbCBiZWNhdXNlCisgIEFwcGxlIGhhcyByZW1vdmVkIGdjYy00LjIsIHRoZSB2ZXJzaW9uIHVzZWQgdG8gYnVpbGQgcHl0aG9uLm9yZworICA2NC1iaXQvMzItYml0IFB5dGhvbnMuICBJZiB0aGUgdXNlciBkb2VzIG5vdCBleHBsaWNpdGx5IG92ZXJyaWRlCisgIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgYnkgc2V0dGluZyB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsCisgIERpc3R1dGlscyB3aWxsIG5vdyBhdHRlbXB0IHRvIGNvbXBpbGUgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBjbGFuZworICBpZiBnY2MtNC4yIGlzIHJlcXVpcmVkIGJ1dCBub3QgZm91bmQuIEFsc28gYXMgYSBjb252ZW5pZW5jZSwgaWYKKyAgdGhlIHVzZXIgZG9lcyBleHBsaWNpdGx5IHNldCBDQywgc3Vic3RpdHV0ZSBpdHMgdmFsdWUgYXMgdGhlIGRlZmF1bHQKKyAgY29tcGlsZXIgaW4gdGhlIERpc3R1dGlscyBMRFNIQVJFRCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBPUyBYLgorICAoTm90ZSwgdGhlIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgUHl0aG9ucyB1c2UgZ2NjLTQuMCBhbmQgdGhlIDEwLjR1CisgIFNESywgbmVpdGhlciBvZiB3aGljaCBhcmUgYXZhaWxhYmxlIGluIFhjb2RlIDQuICBUaGlzIGNoYW5nZSBkb2VzIG5vdAorICBhdHRlbXB0IHRvIG92ZXJyaWRlIHNldHRpbmdzIHRvIHN1cHBvcnQgdGhlaXIgdXNlIHdpdGggWGNvZGUgNC4pCisKKy0gSXNzdWUgIzEzOTYwOiBIVE1MUGFyc2VyIGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBicm9rZW4gY29tbWVudHMgd2hlbgorICBzdHJpY3Q9RmFsc2UuCisKKy0gSXNzdWUgIzEzOTIxOiBVbmRvY3VtZW50IGFuZCBjbGVhbiB1cCBzcWxpdGUzLk9wdGltaXplZFVuaWNvZGUsCisgIHdoaWNoIGlzIG9ic29sZXRlIGluIFB5dGhvbiAzLnguIEl0J3Mgbm93IGFsaWFzZWQgdG8gc3RyIGZvcgorICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworLSBXaGVuICcnIGlzIGEgcGF0aCAoZS5nLiBpbiBzeXMucGF0aCksIG1ha2Ugc3VyZSBfX2ZpbGVfXyB1c2VzIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IGluc3RlYWQgb2YgJycgaW4gaW1wb3J0bGliLgorCistIElzc3VlICMxMzYwOTogQWRkIHR3byBmdW5jdGlvbnMgdG8gcXVlcnkgdGhlIHRlcm1pbmFsIHNpemU6CisgIG9zLmdldF90ZXJtaW5hbF9zaXplIChsb3cgbGV2ZWwpIGFuZCBzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemUgKGhpZ2ggbGV2ZWwpLgorICBQYXRjaCBieSBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrLgorCistIElzc3VlICMxMzg0NTogT24gV2luZG93cywgdGltZS50aW1lKCkgbm93IHVzZXMgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKQorICBpbnN0ZWFkIG9mIGZ0aW1lKCkgdG8gaGF2ZSBhIHJlc29sdXRpb24gb2YgMTAwIG5zIGluc3RlYWQgb2YgMSBtcyAodGhlIGNsb2NrCisgIGFjY3VyYWN5IGlzIGJldHdlZW4gMC41IG1zIGFuZCAxNSBtcykuCisKKy0gSXNzdWUgIzEzODQ2OiBBZGQgdGltZS5tb25vdG9uaWMoKSwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICM4MTg0OiBtdWx0aXByb2Nlc3Npbmc6IE9uIFdpbmRvd3MsIGRvbid0IHNldCBTT19SRVVTRUFERFIgb24KKyAgQ29ubmVjdGlvbiBzb2NrZXRzLCBhbmQgc2V0IEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFIG9uIG5hbWVkIHBpcGVzLCB0bworICBtYWtlIHN1cmUgdHdvIGxpc3RlbmVycyBjYW4ndCBiaW5kIHRvIHRoZSBzYW1lIHNvY2tldC9waXBlIChvciBhbnkgZXhpc3RpbmcKKyAgc29ja2V0L3BpcGUpLgorCistIElzc3VlICMxMDgxMTogRml4IHJlY3Vyc2l2ZSB1c2FnZSBvZiBjdXJzb3JzLiBJbnN0ZWFkIG9mIGNyYXNoaW5nLAorICByYWlzZSBhIFByb2dyYW1taW5nRXJyb3Igbm93LgorCistIElzc3VlICMxMDg4MTogRml4IHRlc3Rfc2l0ZSBmYWlsdXJlIHdpdGggT1MgWCBmcmFtZXdvcmsgYnVpbGRzLgorCistIElzc3VlICM5NjQ0Mzc6IE1ha2UgSURMRSBoZWxwIHdpbmRvdyBub24tbW9kYWwuCisgIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM3MzQ6IEFkZCBvcy5md2FsaygpLCBhIGRpcmVjdG9yeSB3YWxraW5nIGZ1bmN0aW9uIHlpZWxkaW5nIGZpbGUKKyAgZGVzY3JpcHRvcnMuCisKKy0gSXNzdWUgIzI5NDU6IE1ha2UgdGhlIGRpc3R1dGlscyB1cGxvYWQgY29tbWFuZCBhd2FyZSBvZiBiZGlzdF9ycG0gcHJvZHVjdHMuCisKKy0gSXNzdWUgIzEzNzEyOiBweXNldHVwIGNyZWF0ZSBzaG91bGQgbm90IGNvbnZlcnQgcGFja2FnZV9kYXRhIHRvIGV4dHJhX2ZpbGVzLgorCistIElzc3VlICMxMTgwNTogcGFja2FnZV9kYXRhIGluIHNldHVwLmNmZyBzaG91bGQgYWxsb3cgbW9yZSB0aGFuIG9uZSB2YWx1ZS4KKworLSBJc3N1ZSAjMTM5MzM6IElETEUgYXV0by1jb21wbGV0ZSBkaWQgbm90IHdvcmsgd2l0aCBzb21lIGltcG9ydGVkCisgIG1vZHVsZSwgbGlrZSBoYXNobGliLiAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIElzc3VlICMxMzkwMTogUHJldmVudCB0ZXN0X2Rpc3R1dGlscyBmYWlsdXJlcyBvbiBPUyBYIHdpdGggLS1lbmFibGUtc2hhcmVkLgorCistIElzc3VlICMxMzY3NjogSGFuZGxlIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB6ZXJvcyBjb3JyZWN0bHkgaW4gc3FsaXRlMy4KKworLSBJc3N1ZSAjMTM1MDY6IEFkZCAnJyB0byBwYXRoIGZvciBJRExFIFNoZWxsIHdoZW4gc3RhcnRlZCBhbmQgcmVzdGFydGVkIHdpdGggUmVzdGFydCBTaGVsbC4KKyAgT3JpZ2luYWwgcGF0Y2hlcyBieSBNYXJjbyBTY2F0YWdsaW5pIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODgyODogQWRkIG5ldyBmdW5jdGlvbiBvcy5yZXBsYWNlKCksIGZvciBjcm9zcy1wbGF0Zm9ybSByZW5hbWluZworICB3aXRoIG92ZXJ3cml0aW5nLgorCistIElzc3VlICMxMzg0ODogb3BlbigpIGFuZCB0aGUgRmlsZUlPIGNvbnN0cnVjdG9yIG5vdyBjaGVjayBmb3IgTlVMCisgIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgbmFtZS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM4MDY6IFRoZSBzaXplIGNoZWNrIGluIGF1ZGlvb3AgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMgd2FzIHRvbworICBzdHJpY3QgYW5kIGNvdWxkIHJlamVjdCB2YWxpZCBjb21wcmVzc2VkIGRhdGEuICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgorCistIElzc3VlICMxMzgxMjogV2hlbiBhIG11bHRpcHJvY2Vzc2luZyBQcm9jZXNzIGNoaWxkIHJhaXNlcyBhbiBleGNlcHRpb24sCisgIGZsdXNoIHN0ZGVyciBhZnRlciBwcmludGluZyB0aGUgZXhjZXB0aW9uIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTM4ODU6IENWRS0yMDExLTMzODk6IHRoZSBfc3NsIG1vZHVsZSB3b3VsZCBhbHdheXMgZGlzYWJsZSB0aGUgQ0JDCisgIElWIGF0dGFjayBjb3VudGVybWVhc3VyZS4KKworLSBJc3N1ZSAjMTM4NDc6IHRpbWUubG9jYWx0aW1lKCkgYW5kIHRpbWUuZ210aW1lKCkgbm93IHJhaXNlIGFuIE9TRXJyb3IgaW5zdGVhZAorICBvZiBWYWx1ZUVycm9yIG9uIGZhaWx1cmUuIHRpbWUuY3RpbWUoKSBhbmQgdGltZS5hc2N0aW1lKCkgbm93IHJhaXNlcyBhbgorICBPU0Vycm9yIGlmIGxvY2FsdGltZSgpIGZhaWxlZC4gdGltZS5jbG9jaygpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIHByb2Nlc3NvciB0aW1lIHVzZWQgaXMgbm90IGF2YWlsYWJsZSBvciBpdHMgdmFsdWUgY2Fubm90IGJlIHJlcHJlc2VudGVkCisKKy0gSXNzdWUgIzEzODYyOiBGaXggc3B1cmlvdXMgZmFpbHVyZSBpbiB0ZXN0X3psaWIgZHVlIHRvIHJ1bnRpbWUvY29tcGlsZSB0aW1lCisgIG1pbm9yIHZlcnNpb25zIG5vdCBtYXRjaGluZy4KKworLSBJc3N1ZSAjMTI4MDQ6IEZpeCB0ZXN0X3NvY2tldCBhbmQgdGVzdF91cmxsaWIybmV0IGZhaWx1cmVzIHdoZW4gcnVubmluZyB0ZXN0cworICBvbiBhIHN5c3RlbSB3aXRob3V0IGludGVybmV0IGFjY2Vzcy4KKworLSBJc3N1ZSAjMTM3NzI6IEluIG9zLnN5bWxpbmsoKSB1bmRlciBXaW5kb3dzLCBkbyBub3QgdHJ5IHRvIGd1ZXNzIHRoZSBsaW5rCisgIHRhcmdldCdzIHR5cGUgKGZpbGUgb3IgZGlyZWN0b3J5KS4gIFRoZSBkZXRlY3Rpb24gd2FzIGJ1Z2d5IGFuZCBtYWRlIHRoZQorICBjYWxsIG5vbi1hdG9taWMgKHRoZXJlZm9yZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMpLgorCistIElzc3VlICM2NjMxOiBEaXNhbGxvdyByZWxhdGl2ZSBmaWxlIHBhdGhzIGluIHVybGxpYiB1cmxvcGVuIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEzNzIyOiBBdm9pZCBzaWxlbmNpbmcgSW1wb3J0RXJyb3JzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb2RlY3MKKyAgcmVnaXN0cnkuCisKKy0gSXNzdWUgIzEzNzgxOiBGaXggR3ppcEZpbGUgYnVnIHRoYXQgY2F1c2VkIGFuIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQgd2hlbgorICBvcGVuaW5nIGZvciB3cml0aW5nIHVzaW5nIGEgZmlsZW9iaiByZXR1cm5lZCBieSBvcy5mZG9wZW4oKS4KKworLSBJc3N1ZSAjMTM4MDM6IFVuZGVyIFNvbGFyaXMsIGRpc3R1dGlscyBkb2Vzbid0IGluY2x1ZGUgYml0bmVzcworICBpbiB0aGUgZGlyZWN0b3J5IG5hbWUuCisKKy0gSXNzdWUgIzEwMjc4OiBBZGQgdGltZS53YWxsY2xvY2soKSBmdW5jdGlvbiwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICMxMzgwOTogRml4IHJlZ3Jlc3Npb24gd2hlcmUgYnoyIG1vZHVsZSB3b3VsZG4ndCB3b3JrIHdoZW4gdGhyZWFkcyBhcmUKKyAgZGlzYWJsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjLgorCistIElzc3VlICMxMzU4OTogRml4IHNvbWUgc2VyaWFsaXphdGlvbiBwcmltaXRpdmVzIGluIHRoZSBhaWZjIG1vZHVsZS4KKyAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KKworLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCisgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KKworLSBJc3N1ZSAjMTM3MjY6IEZpeCB0aGUgYW1iaWd1b3VzIC1TIGZsYWcgaW4gcmVncnRlc3QuIEl0IGlzIC1vLy0tc2xvdyBmb3Igc2xvdworICB0ZXN0cy4KKworLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisgIFRoZSBoYW5nIHdvdWxkIG9jY3VyIHdoZW4gcmV0cmlldmluZyB0aGUgcmVzdWx0IG9mIGEgc2NoZWR1bGVkIGZ1dHVyZSBhZnRlcgorICB0aGUgZXhlY3V0b3IgaGFkIGJlZW4gc2h1dCBkb3duLgorCistIElzc3VlICMxMzUwMjogdGhyZWFkaW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBFdmVudC53YWl0KCkgdGhhdCBtYWRlIGl0CisgIHJldHVybiBGYWxzZSB3aGVuIHRoZSBldmVudCB3YXMgc2V0IGFuZCBjbGVhcmVkIHJpZ2h0IGFmdGVyLgorCistIElzc3VlICM5OTkzOiBXaGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBvbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsCisgIGFuZCB0aGUgc291cmNlIGlzIGEgc3ltbGluaywgc2h1dGlsLm1vdmUoKSBub3cgcmVjcmVhdGVzIGEgc3ltbGluayBvbiB0aGUKKyAgZGVzdGluYXRpb24gaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBmaWxlIGNvbnRlbnRzLiAgUGF0Y2ggYnkgSm9uYXRoYW4gTmllaG9mCisgIGFuZCBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEyOTI2OiBGaXggYSBidWcgaW4gdGFyZmlsZSdzIGxpbmsgZXh0cmFjdGlvbi4KKworLSBJc3N1ZSAjMTM2OTY6IEZpeCB0aGUgMzAyIFJlbGF0aXZlIFVSTCBSZWRpcmVjdGlvbiBwcm9ibGVtLgorCistIElzc3VlICMxMzYzNjogV2VhayBjaXBoZXJzIGFyZSBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgc3NsIG1vZHVsZQorICAoZXhjZXB0IHdoZW4gU1NMdjIgaXMgZXhwbGljaXRseSBhc2tlZCBmb3IpLgorCistIElzc3VlICMxMjcxNTogQWRkIGFuIG9wdGlvbmFsIHN5bWxpbmtzIGFyZ3VtZW50IHRvIHNodXRpbCBmdW5jdGlvbnMKKyAgKGNvcHlmaWxlLCBjb3B5bW9kZSwgY29weXN0YXQsIGNvcHksIGNvcHkyKS4gIFdoZW4gdGhhdCBwYXJhbWV0ZXIgaXMKKyAgdHJ1ZSwgc3ltbGlua3MgYXJlbid0IGRlcmVmZXJlbmNlZCBhbmQgdGhlIG9wZXJhdGlvbiBpbnN0ZWFkIGFjdHMgb24gdGhlCisgIHN5bWxpbmsgaXRzZWxmIChvciBjcmVhdGVzIG9uZSwgaWYgcmVsZXZhbnQpLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIEFkZCBhIGZsYWdzIHBhcmFtZXRlciB0byBzZWxlY3QuZXBvbGwuCisKKy0gSXNzdWUgIzEzNjI2OiBBZGQgc3VwcG9ydCBmb3IgU1NMIERpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUKKyAgU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG1ldGhvZCBhbmQgdGhlIHNzbC5PUF9TSU5HTEVfREhfVVNFIG9wdGlvbi4KKworLSBJc3N1ZSAjMTEwMDY6IERvbid0IGlzc3VlIGxvdyBsZXZlbCB3YXJuaW5nIGluIHN1YnByb2Nlc3Mgd2hlbiBwaXBlMigpIGZhaWxzLgorCistIElzc3VlICMxMzYyMDogU3VwcG9ydCBmb3IgQ2hyb21lIGJyb3dzZXIgaW4gd2ViYnJvd3Nlci4gIFBhdGNoIGNvbnRyaWJ1dGVkCisgIGJ5IEFybmF1ZCBDYWxtZXR0ZXMuCisKKy0gSXNzdWUgIzExODI5OiBGaXggY29kZSBleGVjdXRpb24gaG9sZXMgaW4gaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IKKyAgbWV0YWNsYXNzZXMgd2l0aCBtZXRhY2xhc3Nlcy4gUGF0Y2ggYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICMxMjcwODogQWRkIHN0YXJtYXAoKSBhbmQgc3Rhcm1hcF9hc3luYygpIG1ldGhvZHMgKHNpbWlsYXIgdG8KKyAgaXRlcnRvb2xzLnN0YXJtYXAoKSkgdG8gbXVsdGlwcm9jZXNzaW5nLlBvb2wuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzE3ODU6IEZpeCBpbnNwZWN0IGFuZCBweWRvYyB3aXRoIG1pc2JlaGF2aW5nIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxMzYzNzogImEyYiIgZnVuY3Rpb25zIGluIHRoZSBiaW5hc2NpaSBtb2R1bGUgbm93IGFjY2VwdCBBU0NJSS1vbmx5CisgIHVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTM2MzQ6IEFkZCBzdXBwb3J0IGZvciBxdWVyeWluZyBhbmQgZGlzYWJsaW5nIFNTTCBjb21wcmVzc2lvbi4KKworLSBJc3N1ZSAjMTM2Mjc6IEFkZCBzdXBwb3J0IGZvciBTU0wgRWxsaXB0aWMgQ3VydmUtYmFzZWQgRGlmZmllLUhlbGxtYW4KKyAga2V5IGV4Y2hhbmdlLCB0aHJvdWdoIHRoZSBTU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlKCkgbWV0aG9kIGFuZCB0aGUKKyAgc3NsLk9QX1NJTkdMRV9FQ0RIX1VTRSBvcHRpb24uCisKKy0gSXNzdWUgIzEzNjM1OiBBZGQgc3NsLk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgc28gdGhhdCBTU0wgc2VydmVycworICBjaG9vc2UgdGhlIGNpcGhlciBiYXNlZCBvbiB0aGVpciBvd24gcHJlZmVyZW5jZXMsIHJhdGhlciB0aGFuIG9uIHRoZQorICBjbGllbnQncy4KKworLSBJc3N1ZSAjMTE4MTM6IEZpeCBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGZvciBtb2R1bGVzLiBQYXRjaCBieSBBbmRyZWFzCisgIFN0w7xocmsuCisKKy0gSXNzdWUgIzc1MDI6IEZpeCBlcXVhbGl0eSBjb21wYXJpc29uIGZvciBEb2NUZXN0Q2FzZSBpbnN0YW5jZXMuICBQYXRjaCBieQorICBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMxMTg3MDogdGhyZWFkaW5nOiBQcm9wZXJseSByZWluaXRpYWxpemUgdGhyZWFkcyBpbnRlcm5hbCBsb2NrcyBhbmQKKyAgY29uZGl0aW9uIHZhcmlhYmxlcyB0byBhdm9pZCBkZWFkbG9ja3MgaW4gY2hpbGQgcHJvY2Vzc2VzLgorCistIElzc3VlICM4MDM1OiB1cmxsaWI6IEZpeCBhIGJ1ZyB3aGVyZSB0aGUgY2xpZW50IGNvdWxkIHJlbWFpbiBzdHVjayBhZnRlciBhCisgIHJlZGlyZWN0aW9uIG9yIGFuIGVycm9yLgorCistIElzc3VlICMxMzU2MDogb3Muc3RyZXJyb3IoKSBub3cgdXNlcyB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZgorICBVVEYtOC4KKworLSBJc3N1ZSAjODM3MzogVGhlIGZpbGVzeXN0ZW0gcGF0aCBvZiBBRl9VTklYIHNvY2tldHMgbm93IHVzZXMgdGhlIGZpbGVzeXN0ZW0KKyAgZW5jb2RpbmcgYW5kIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlciwgcmF0aGVyIHRoYW4gVVRGLTguICBQYXRjaAorICBieSBEYXZpZCBXYXRzb24uCisKKy0gSXNzdWUgIzEwMzUwOiBSZWFkIGFuZCBzYXZlIGVycm5vIGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQKKyAgb3ZlcndyaXRlIGl0LiAgT3JpZ2luYWwgcGF0Y2ggYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTE2MTA6IEludHJvZHVjZSBhIG1vcmUgZ2VuZXJhbCB3YXkgdG8gZGVjbGFyZSBhYnN0cmFjdCBwcm9wZXJ0aWVzLgorCistIElzc3VlICMxMzU5MTogQSBidWcgaW4gaW1wb3J0bGliIGhhcyBiZWVuIGZpeGVkIHRoYXQgY2F1c2VkIGltcG9ydF9tb2R1bGUKKyAgdG8gbG9hZCBhIG1vZHVsZSB0d2ljZS4KKworLSBJc3N1ZSAjNDYyNTogSWYgSURMRSBjYW5ub3Qgd3JpdGUgdG8gaXRzIHJlY2VudCBmaWxlIG9yIGJyZWFrcG9pbnQgZmlsZXMsCisgIGRpc3BsYXkgYSBtZXNzYWdlIHBvcHVwIGFuZCBjb250aW51ZSByYXRoZXIgdGhhbiBjcmFzaC4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMzQ0OSBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbWV0aG9kIGhhcyBhIG5ldyAiYmxvY2tpbmciIHBhcmFtZXRlciB3aGljaAorICB3aGVuIHNldCB0byBGYWxzZSBtYWtlcyBydW4oKSBleGVjdXRlIHRoZSBzY2hlZHVsZWQgZXZlbnRzIGR1ZSB0byBleHBpcmUKKyAgc29vbmVzdCAoaWYgYW55KSBhbmQgdGhlbiByZXR1cm4uICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBJc3N1ZSAjODY4NCBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY2FuIGJlIHNhZmVseSB1c2VkIGluIG11bHRpLXRocmVhZGVkCisgIGVudmlyb25tZW50cy4gIFBhdGNoIGJ5IEpvc2lhaCBDYXJsc29uIGFuZCBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBBbGlhcyByZXNvdXJjZS5lcnJvciB0byBPU0Vycm9yIGFsYSBQRVAgMzE1MS4KKworLSBJc3N1ZSAjNTY4OTogQWRkIHN1cHBvcnQgZm9yIGx6bWEgY29tcHJlc3Npb24gdG8gdGhlIHRhcmZpbGUgbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogVHVybiAzLjIncyBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIGludG8gMy4zJ3MKKyAgRGVwcmVjYXRpb25XYXJuaW5nLiAgSXQgY292ZXJzICdjZ2kuZXNjYXBlJywgJ2ltcG9ydGxpYi5hYmMuUHlMb2FkZXInLAorICAnaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlcicsICdubnRwbGliLk5OVFAueGd0aXRsZScsICdubnRwbGliLk5OVFAueHBhdGgnLAorICBhbmQgcHJpdmF0ZSBhdHRyaWJ1dGVzIG9mICdzbXRwZC5TTVRQQ2hhbm5lbCcuCisKKy0gSXNzdWUgIzU5MDUsICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKKyAgZW5jb2RpbmcsIGluc3RlYWQgb2YgVVRGLTgsIGlmIHRoZSB3Y3NmdGltZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzg2NDE6IFVwZGF0ZSBJRExFIDMgc3ludGF4IGNvbG9yaW5nIHRvIHJlY29nbml6ZSBiIi4uIiBhbmQgbm90IHUiLi4iLgorICBQYXRjaCBieSBUYWwgRWluYXQuCisKKy0gSXNzdWUgIzEzNDY0OiBBZGQgYSByZWFkaW50bygpIG1ldGhvZCB0byBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuICBQYXRjaAorICBieSBKb24gS3Vobi4KKworLSB0YXJmaWxlLnB5OiBDb3JyZWN0bHkgZGV0ZWN0IGJ6aXAyIGNvbXByZXNzZWQgc3RyZWFtcyB3aXRoIGJsb2Nrc2l6ZXMKKyAgb3RoZXIgdGhhbiA5MDBrLgorCistIElzc3VlICMxMzQzOTogRml4IG1hbnkgZXJyb3JzIGluIHR1cnRsZSBkb2NzdHJpbmdzLgorCistIElzc3VlICM2NzE1OiBBZGQgYSBtb2R1bGUgJ2x6bWEnIGZvciBjb21wcmVzc2lvbiB1c2luZyB0aGUgTFpNQSBhbGdvcml0aG0uCisgIFRoYW5rcyB0byBQZXIgw5h5dmluZCBLYXJsc2VuIGZvciB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTM0ODc6IE1ha2UgaW5zcGVjdC5nZXRtb2R1bGUgcm9idXN0IGFnYWluc3QgY2hhbmdlcyBkb25lIHRvCisgIHN5cy5tb2R1bGVzIHdoaWxlIGl0IGlzIGl0ZXJhdGluZyBvdmVyIGl0LgorCistIElzc3VlICMxMjYxODogRml4IGEgYnVnIHRoYXQgcHJldmVudGVkIHB5X2NvbXBpbGUgZnJvbSBjcmVhdGluZyBieXRlCisgIGNvbXBpbGVkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEluaXRpYWwgcGF0Y2ggYnkgU2pvZXJkIGRlIFZyaWVzLgorCistIElzc3VlICMxMzQ0NDogV2hlbiBzdGRvdXQgaGFzIGJlZW4gY2xvc2VkIGV4cGxpY2l0bHksIHdlIHNob3VsZCBub3QgYXR0ZW1wdAorICB0byBmbHVzaCBpdCBhdCBzaHV0ZG93biBhbmQgcHJpbnQgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzEyNTY3OiBUaGUgY3Vyc2VzIG1vZHVsZSB1c2VzIFVuaWNvZGUgZnVuY3Rpb25zIGZvciBVbmljb2RlIGFyZ3VtZW50cworICB3aGVuIGl0IGlzIGxpbmtlZCB0byB0aGUgbmN1cnNlcyBsaWJyYXJ5LiBJdCBlbmNvZGVzIGFsc28gVW5pY29kZSBzdHJpbmdzIHRvCisgIHRoZSBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOC4KKworLSBJc3N1ZSAjMTI4NTY6IEVuc3VyZSBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdGhlIHBhcmVudCdzIHJhbmRvbQorICBzZWVkIGZvciBmaWxlbmFtZSBnZW5lcmF0aW9uIGluIHRoZSB0ZW1wZmlsZSBtb2R1bGUuICBQYXRjaCBieSBCcmlhbgorICBIYXJyaW5nLgorCistIElzc3VlICM5OTU3OiBTcG9vbGVkVGVtcG9yYXJ5RmlsZS50cnVuY2F0ZSgpIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsIHNpemUKKyAgcGFyYW1ldGVyLCBhcyBvdGhlciBmaWxlLWxpa2Ugb2JqZWN0cy4gIFBhdGNoIGJ5IFJ5YW4gS2VsbHkuCisKKy0gSXNzdWUgIzEzNDU4OiBGaXggYSBtZW1vcnkgbGVhayBpbiB0aGUgc3NsIG1vZHVsZSB3aGVuIGRlY29kaW5nIGEKKyAgY2VydGlmaWNhdGUgd2l0aCBhIHN1YmplY3RBbHROYW1lLiAgUGF0Y2ggYnkgUm9iZXJ0IFhpYW8uCisKKy0gSXNzdWUgIzEzNDE1OiBvcy51bnNldGVudigpIGRvZXNuJ3QgaWdub3JlIGVycm9ycyBhbnltb3JlLgorCistIElzc3VlICMxMzI0NTogc2NoZWQuc2NoZWR1bGVyIGNsYXNzIGNvbnN0cnVjdG9yJ3MgdGltZWZ1bmMgYW5kCisgIGRlbGF5ZnVuY3QgcGFyYW1ldGVycyBhcmUgbm93IG9wdGlvbmFsLgorICBzY2hlZHVsZXIuZW50ZXIgYW5kIHNjaGVkdWxlci5lbnRlcmFicyBtZXRob2RzIGdhaW5lZCBhIG5ldyBrd2FyZ3MgcGFyYW1ldGVyLgorICBQYXRjaCBjb250cmlidXRlZCBieSBDaHJpcyBDbGFyay4KKworLSBJc3N1ZSAjMTIzMjg6IFVuZGVyIFdpbmRvd3MsIHJlZmFjdG9yIGhhbmRsaW5nIG9mIEN0cmwtQyBldmVudHMgYW5kCisgIG1ha2UgX211bHRpcHJvY2Vzc2luZy53aW4zMi5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGludGVycnVwdGlibGUgd2hlbgorICB0aGUgd2FpdF9mbGFnIHBhcmFtZXRlciBpcyBmYWxzZS4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTMzMjI6IEZpeCBCdWZmZXJlZFdyaXRlci53cml0ZSgpIHRvIGVuc3VyZSB0aGF0IEJsb2NraW5nSU9FcnJvciBpcworICByYWlzZWQgd2hlbiB0aGUgd3JhcHBlZCByYXcgZmlsZSBpcyBub24tYmxvY2tpbmcgYW5kIHRoZSB3cml0ZSB3b3VsZCBibG9jay4KKyAgUHJldmlvdXMgY29kZSBhc3N1bWVkIHRoYXQgdGhlIHJhdyB3cml0ZSgpIHdvdWxkIHJhaXNlIEJsb2NraW5nSU9FcnJvciwgYnV0CisgIFJhd0lPQmFzZS53cml0ZSgpIGlzIGRlZmluZWQgdG8gcmV0dXJuZWQgTm9uZSB3aGVuIHRoZSBjYWxsIHdvdWxkIGJsb2NrLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzMzU4OiBIVE1MUGFyc2VyIG5vdyBjYWxscyBoYW5kbGVfZGF0YSBvbmx5IG9uY2UgZm9yIGVhY2ggQ0RBVEEuCisKKy0gSXNzdWUgIzQxNDc6IG1pbmlkb20ncyB0b3ByZXR0eXhtbCBubyBsb25nZXIgYWRkcyB3aGl0ZXNwYWNlIGFyb3VuZCBhIHRleHQKKyAgbm9kZSB3aGVuIGl0IGlzIHRoZSBvbmx5IGNoaWxkIG9mIGFuIGVsZW1lbnQuICBJbml0aWFsIHBhdGNoIGJ5IERhbgorICBLZW5pZ3NiZXJnLgorCistIElzc3VlICMxMzM3NDogVGhlIFdpbmRvd3MgYnl0ZXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdGhlIG9zIG1vZHVsZS4gVXNlCisgIFVuaWNvZGUgZmlsZW5hbWVzIGluc3RlYWQgb2YgYnl0ZXMgZmlsZW5hbWVzIHRvIG5vdCBkZXBlbmQgb24gdGhlIEFOU0kgY29kZQorICBwYWdlIGFueW1vcmUgYW5kIHRvIHN1cHBvcnQgYW55IGZpbGVuYW1lLgorCistIElzc3VlICMxMzI5NzogVXNlIGJ5dGVzIHR5cGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBiaW5hcnkgZGF0YSB0aHJvdWdoIFhNTFJQQy4KKworLSBJc3N1ZSAjNjM5NzogU3VwcG9ydCAiL2Rldi9wb2xsIiBwb2xsaW5nIG9iamVjdHMgaW4gc2VsZWN0IG1vZHVsZSwKKyAgdW5kZXIgU29sYXJpcyAmIGRlcml2YXRpdmVzLgorCistIElzc3VlcyAjMTc0NTc2MSwgIzc1NTY3MCwgIzEzMzU3LCAjMTI2MjksICMxMjAwMzEzOiBIVE1MUGFyc2VyIG5vdyBjb3JyZWN0bHkKKyAgaGFuZGxlcyBub24tdmFsaWQgYXR0cmlidXRlcywgaW5jbHVkaW5nIGFkamFjZW50IGFuZCB1bnF1b3RlZCBhdHRyaWJ1dGVzLgorCistIElzc3VlICMxMzE5MzogRml4IGRpc3R1dGlscy5maWxlbGlzdC5GaWxlTGlzdCBhbmQgcGFja2FnaW5nLm1hbmlmZXN0Lk1hbmlmZXN0CisgIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEzMzg0OiBSZW1vdmUgdW5uZWNlc3NhcnkgX19mdXR1cmVfXyBpbXBvcnQgaW4gTGliL3JhbmRvbS5weQorCistIElzc3VlICMxMzE0OTogU3BlZWQgdXAgYXBwZW5kLW9ubHkgU3RyaW5nSU8gb2JqZWN0cy4KKworLSBJc3N1ZSAjMTMzNzM6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXQoKSBjb3VsZCBzb21ldGltZXMgYmxvY2sgaW5kZWZpbml0ZWx5CisgIHdoZW4gY2FsbGVkIHdpdGggYSB0aW1lb3V0LiAgUGF0Y2ggYnkgQXJuYXVkIFlzbWFsLgorCistIElzc3VlICMxMzI1NDogRml4IE1haWxkaXIgaW5pdGlhbGl6YXRpb24gc28gdGhhdCBtYWlsZGlyIGNvbnRlbnRzCisgIGFyZSByZWFkIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMzA2NzogbG9jYWxlLnNldGxvY2FsZSgpIG5vdyByYWlzZXMgVHlwZUVycm9yIGlmIHRoZSBzZWNvbmQKKyAgYXJndW1lbnQgaXMgYW4gaW52YWxpZCBpdGVyYWJsZS4gSXRzIGRvY3VtZW50YXRpb24gYW5kIGRvY3N0cmluZworICB3ZXJlIGFsc28gdXBkYXRlZC4gSW5pdGlhbCBwYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxMzE0MDogRml4IHRoZSBkYWVtb25fdGhyZWFkcyBhdHRyaWJ1dGUgb2YgVGhyZWFkaW5nTWl4SW4uCisKKy0gSXNzdWUgIzEzMzM5OiBGaXggY29tcGlsZSBlcnJvciBpbiBwb3NpeG1vZHVsZS5jIGR1ZSB0byBtaXNzaW5nIHNlbWljb2xvbi4KKyAgVGhhbmtzIHRvIFJvYmVydCBYaWFvLgorCistIEJ5dGUgY29tcGlsYXRpb24gaW4gcGFja2FnaW5nIGlzIG5vdyBpc29sYXRlZCBmcm9tIHRoZSBjYWxsaW5nIFB5dGhvbiAtQiBvcgorICAtTyBvcHRpb25zLCBpbnN0ZWFkIG9mIGJlaW5nIGRpc2FsbG93ZWQgdW5kZXIgLUIgb3IgYnVnZ3kgdW5kZXIgLU8uCisKKy0gSXNzdWUgIzEwNTcwOiBjdXJzZXMucHV0cCgpIGFuZCBjdXJzZXMudHBhcm0oKSBhcmUgbm93IGV4cGVjdGluZyBhIGJ5dGUKKyAgc3RyaW5nLCBpbnN0ZWFkIG9mIGEgVW5pY29kZSBzdHJpbmcuCisKKy0gSXNzdWUgIzEzMjk1OiBodHRwLnNlcnZlciBub3cgcHJvZHVjZXMgdmFsaWQgSFRNTCA0LjAxIHN0cmljdC4KKworLSBJc3N1ZSAjMjg5MjogcHJlc2VydmUgaXRlcnBhcnNlIGV2ZW50cyBpbiBjYXNlIG9mIFN5bnRheEVycm9yLgorCistIElzc3VlICMxMzI4NzogdXJsbGliLnJlcXVlc3QgYW5kIHVybGxpYi5lcnJvciBub3cgY29udGFpbnMgYW4gX19hbGxfXworICBhdHRyaWJ1dGUgdG8gZXhwb3NlIG9ubHkgcmVsZXZhbnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLiAgUGF0Y2ggYnkgRmxvcmVudAorICBYaWNsdW5hLgorCistIElzc3VlICM2NzA2NjQ6IEZpeCBIVE1MUGFyc2VyIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGNvbnRlbnQgb2YKKyAgYGA8c2NyaXB0Pi4uLjwvc2NyaXB0PmBgIGFuZCBgYDxzdHlsZT4uLi48L3N0eWxlPmBgLgorCistIElzc3VlICMxMDgxNzogRml4IHVybHJldHJpZXZlIGZ1bmN0aW9uIHRvIHJhaXNlIENvbnRlbnRUb29TaG9ydEVycm9yIGV2ZW4KKyAgd2hlbiByZXBvcnRob29rIGlzIE5vbmUuIFBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCisKKy0gSXNzdWUgIzEzMjk2OiBGaXggSURMRSB0byBjbGVhciBjb21waWxlIF9fZnV0dXJlX18gZmxhZ3Mgb24gc2hlbGwgcmVzdGFydC4KKyAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIEZpeCB0aGUgeG1scnBjLmNsaWVudCB1c2VyIGFnZW50IHRvIHJldHVybiBzb21ldGhpbmcgc2ltaWxhciB0bworICB1cmxsaWIucmVxdWVzdCB1c2VyIGFnZW50OiAiUHl0aG9uLXhtbHJwYy8zLjMiLgorCistIElzc3VlICMxMzI5MzogQmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gbWFyc2hhbCBieXRlcyB1c2luZworICB4bWxycGMuY2xpZW50LgorCistIElzc3VlICMxMzI5MTogTmFtZUVycm9yIGluIHhtbHJwYyBwYWNrYWdlLgorCistIElzc3VlICMxMzI1ODogVXNlIGNhbGxhYmxlKCkgYnVpbHQtaW4gaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCisKKy0gSXNzdWUgIzEzMjczOiBmaXggYSBidWcgdGhhdCBwcmV2ZW50ZWQgSFRNTFBhcnNlciB0byBwcm9wZXJseSBkZXRlY3Qgc29tZQorICB0YWdzIHdoZW4gc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMTE4MzogQWRkIGZpbmVyLWdyYWluZWQgZXhjZXB0aW9ucyB0byB0aGUgc3NsIG1vZHVsZSwgc28gdGhhdAorICB5b3UgZG9uJ3QgaGF2ZSB0byBpbnNwZWN0IHRoZSBleGNlcHRpb24ncyBhdHRyaWJ1dGVzIGluIHRoZSBjb21tb24gY2FzZS4KKworLSBJc3N1ZSAjMTMyMTY6IEFkZCBjcDY1MDAxIGNvZGVjLCB0aGUgV2luZG93cyBVVEYtOCAoQ1BfVVRGOCkuCisKKy0gSXNzdWUgIzEzMjI2OiBBZGQgUlRMRF94eHggY29uc3RhbnRzIHRvIHRoZSBvcyBtb2R1bGUuIFRoZXNlIGNvbnN0YW50cyBjYW4gYmUKKyAgdXNlZCB3aXRoIHN5cy5zZXRkbG9wZW5mbGFncygpLgorCistIElzc3VlICMxMDI3ODogQWRkIGNsb2NrX2dldHJlcygpLCBjbG9ja19nZXR0aW1lKCkgYW5kIENMT0NLX3h4eCBjb25zdGFudHMgdG8KKyAgdGhlIHRpbWUgbW9kdWxlLiB0aW1lLmNsb2NrX2dldHRpbWUodGltZS5DTE9DS19NT05PVE9OSUMpIHByb3ZpZGVzIGEKKyAgbW9ub3RvbmljIGNsb2NrCisKKy0gSXNzdWUgIzEwMzMyOiBtdWx0aXByb2Nlc3Npbmc6IGZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZW4gYSBQb29sIGlzIGNsb3NlZAorICBiZWZvcmUgYWxsIHRhc2tzIGhhdmUgY29tcGxldGVkLgorCistIElzc3VlICMxMzI1NTogd3JvbmcgZG9jc3RyaW5ncyBpbiBhcnJheSBtb2R1bGUuCisKKy0gSXNzdWUgIzg1NDA6IFJlbW92ZSBkZXByZWNhdGVkIENvbnRleHQuX2NsYW1wIGF0dHJpYnV0ZSBpbiBEZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzU6IEFkZGVkIERlcHJlY2F0aW9uV2FybmluZyB0byBsb2dnaW5nLndhcm4oKSBtZXRob2QgYW5kIGZ1bmN0aW9uLgorCistIElzc3VlICM5MTY4OiBub3cgc210cGQgaXMgYWJsZSB0byBiaW5kIHByaXZpbGVnZWQgcG9ydC4KKworLSBJc3N1ZSAjMTI1Mjk6IGZpeCBjZ2kucGFyc2VfaGVhZGVyIGlzc3VlIG9uIHN0cmluZ3Mgd2l0aCBkb3VibGUtcXVvdGVzIGFuZAorICBzZW1pY29sb25zIHRvZ2V0aGVyLiBQYXRjaCBieSBCZW4gRGFybmVsbCBhbmQgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMjI3OiBmdW5jdG9vbHMubHJ1X2NhY2hlKCkgbm93IGhhcyBhIG9wdGlvbiB0byBkaXN0aW5ndWlzaAorICBjYWxscyB3aXRoIGRpZmZlcmVudCBhcmd1bWVudCB0eXBlcy4KKworLSBJc3N1ZSAjNjA5MDogemlwZmlsZSByYWlzZXMgYSBWYWx1ZUVycm9yIHdoZW4gYSBkb2N1bWVudCB3aXRoIGEgdGltZXN0YW1wCisgIGVhcmxpZXIgdGhhbiAxOTgwIGlzIHByb3ZpZGVkLiBQYXRjaCBjb250cmlidXRlZCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTMxNTA6IHN5c2NvbmZpZyBubyBsb25nZXIgcGFyc2VzIHRoZSBNYWtlZmlsZSBhbmQgY29uZmlnLmggZmlsZXMKKyAgd2hlbiBpbXBvcnRlZCwgaW5zdGVhZCBkb2luZyBpdCBhdCBidWlsZCB0aW1lLiAgVGhpcyBtYWtlcyBpbXBvcnRpbmcKKyAgc3lzY29uZmlnIGZhc3RlciBhbmQgcmVkdWNlcyBQeXRob24gc3RhcnR1cCB0aW1lIGJ5IDIwJS4KKworLSBJc3N1ZSAjMTI0NDg6IHNtdHBsaWIgbm93IGZsdXNoZXMgc3Rkb3V0IHdoaWxlIHJ1bm5pbmcgYGBweXRob24gLW0gc210cGxpYmBgCisgIGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHByb21wdCBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzEyNDU0OiBUaGUgbWFpbGJveCBtb2R1bGUgaXMgbm93IHVzaW5nIEFTQ0lJLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUKKyAgZW5jb2RpbmcsIHRvIHJlYWQgYW5kIHdyaXRlIC5taF9zZXF1ZW5jZXMgZmlsZXMuCisKKy0gSXNzdWUgIzEzMTk0OiB6bGliLmNvbXByZXNzb2JqKCkuY29weSgpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKS5jb3B5KCkgYXJlCisgIG5vdyBhdmFpbGFibGUgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTY3MzAwNzogdXJsbGliLnJlcXVlc3Qgbm93IHN1cHBvcnRzIEhFQUQgcmVxdWVzdCB2aWEgbmV3IG1ldGhvZCBhcmd1bWVudC4KKyAgUGF0Y2ggY29udHJpYnV0aW9ucyBieSBEYXZpZCBTdGFuZWssIFBhdHJpY2sgV2VzdGVyaG9mZiBhbmQgRXppbyBNZWxvdHRpLgorCistIElzc3VlICMxMjM4NjogcGFja2FnaW5nIGRvZXMgbm90IGZhaWwgYW55bW9yZSB3aGVuIHdyaXRpbmcgdGhlIFJFU09VUkNFUworICBmaWxlLgorCistIElzc3VlICMxMzE1ODogRml4IGRlY29kaW5nIGFuZCBlbmNvZGluZyBvZiBHTlUgdGFyIHNwZWNpZmljIGJhc2UtMjU2IG51bWJlcgorICBmaWVsZHMgaW4gdGFyZmlsZS4KKworLSBJc3N1ZSAjMTMwMjU6IG1pbWV0eXBlcyBpcyBub3cgcmVhZGluZyBNSU1FIHR5cGVzIHVzaW5nIHRoZSBVVEYtOCBlbmNvZGluZywKKyAgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nLgorCistIElzc3VlICMxMDY1MzogT24gV2luZG93cywgdXNlIHN0cmZ0aW1lKCkgaW5zdGVhZCBvZiB3Y3NmdGltZSgpIGJlY2F1c2UKKyAgd2NzZnRpbWUoKSBkb2Vzbid0IGZvcm1hdCB0aW1lIHpvbmUgY29ycmVjdGx5LgorCistIElzc3VlICMxMzE1MDogVGhlIHRva2VuaXplIG1vZHVsZSBkb2Vzbid0IGNvbXBpbGUgbGFyZ2UgcmVndWxhciBleHByZXNzaW9ucworICBhdCBzdGFydHVwIGFueW1vcmUuCisKKy0gSXNzdWUgIzExMTcxOiBGaXggZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWUgd2hlbiBQeXRob24gd2FzCisgIGNvbmZpZ3VyZWQgd2l0aCBkaWZmZXJlbnQgcHJlZml4IGFuZCBleGVjLXByZWZpeC4KKworLSBJc3N1ZSAjMTEyNTQ6IFRlYWNoIGRpc3R1dGlscyBhbmQgcGFja2FnaW5nIHRvIGNvbXBpbGUgLnB5YyBhbmQgLnB5byBmaWxlcyBpbgorICBQRVAgMzE0Ny1jb21wbGlhbnQgX19weWNhY2hlX18gZGlyZWN0b3JpZXMuCisKKy0gSXNzdWUgIzczNjc6IEZpeCBwa2d1dGlsLndhbGtfcGF0aHMgdG8gc2tpcCBkaXJlY3RvcmllcyB3aG9zZQorICBjb250ZW50cyBjYW5ub3QgYmUgcmVhZC4KKworLSBJc3N1ZSAjMzE2MzogVGhlIHN0cnVjdCBtb2R1bGUgZ2V0cyBuZXcgZm9ybWF0IGNoYXJhY3RlcnMgJ24nIGFuZCAnTicKKyAgc3VwcG9ydGluZyBDIGludGVnZXIgdHlwZXMgYGBzc2l6ZV90YGAgYW5kIGBgc2l6ZV90YGAsIHJlc3BlY3RpdmVseS4KKworLSBJc3N1ZSAjMTMwOTk6IEZpeCBzcWxpdGUzLkN1cnNvci5sYXN0cm93aWQgdW5kZXIgYSBUdXJraXNoIGxvY2FsZS4KKyAgUmVwb3J0ZWQgYW5kIGRpYWdub3NlZCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTMwODc6IEJ1ZmZlcmVkUmVhZGVyLnNlZWsoKSBub3cgYWx3YXlzIHJhaXNlcyBVbnN1cHBvcnRlZE9wZXJhdGlvbgorICBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIHVuc2Vla2FibGUsIGV2ZW4gaWYgdGhlIHNlZWsgY291bGQgYmUKKyAgc2F0aXNmaWVkIHVzaW5nIHRoZSBpbnRlcm5hbCBidWZmZXIuICBQYXRjaCBieSBKb2huIE8nQ29ubm9yLgorCistIElzc3VlICM3Njg5OiBBbGxvdyBwaWNrbGluZyBvZiBkeW5hbWljYWxseSBjcmVhdGVkIGNsYXNzZXMgd2hlbiB0aGVpcgorICBtZXRhY2xhc3MgaXMgcmVnaXN0ZXJlZCB3aXRoIGNvcHlyZWcuICBQYXRjaCBieSBOaWNvbGFzIE0uIFRoacOpcnkgYW5kIENyYWlnCisgIENpdHJvLgorCistIElzc3VlICMxMzAzNDogV2hlbiBkZWNvZGluZyBzb21lIFNTTCBjZXJ0aWZpY2F0ZXMsIHRoZSBzdWJqZWN0QWx0TmFtZQorICBleHRlbnNpb24gY291bGQgYmUgdW5yZXBvcnRlZC4KKworLSBJc3N1ZSAjOTg3MTogUHJldmVudCBJRExFIDMgY3Jhc2ggd2hlbiBnaXZlbiBieXRlIHN0aW5ncworICB3aXRoIGludmFsaWQgaGV4IGVzY2FwZSBzZXF1ZW5jZXMsIGxpa2UgYidceDAnLgorICAoT3JpZ2luYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLikKKworLSBJc3N1ZSAjMTIzMDY6IEV4cG9zZSB0aGUgcnVudGltZSB2ZXJzaW9uIG9mIHRoZSB6bGliIEMgbGlicmFyeSBhcyBhIGNvbnN0YW50LAorICBaTElCX1JVTlRJTUVfVkVSU0lPTiwgaW4gdGhlIHpsaWIgbW9kdWxlLiBQYXRjaCBieSBUb3JzdGVuIExhbmRzY2hvZmYuCisKKy0gSXNzdWUgIzEyOTU5OiBBZGQgY29sbGVjdGlvbnMuQ2hhaW5NYXAgdG8gY29sbGVjdGlvbnMuX19hbGxfXy4KKworLSBJc3N1ZSAjODkzMzogZGlzdHV0aWxzJyBQS0ctSU5GTyBmaWxlcyBhbmQgcGFja2FnaW5nJ3MgTUVUQURBVEEgZmlsZXMgd2lsbAorICBub3cgY29ycmVjdGx5IHJlcG9ydCBNZXRhZGF0YS1WZXJzaW9uOiAxLjEgaW5zdGVhZCBvZiAxLjAgaWYgYSBDbGFzc2lmaWVyIG9yCisgIERvd25sb2FkLVVSTCBmaWVsZCBpcyBwcmVzZW50LgorCistIElzc3VlICMxMjU2NzogQWRkIGN1cnNlcy51bmdldF93Y2goKSBmdW5jdGlvbi4gUHVzaCBhIGNoYXJhY3RlciBzbyB0aGUgbmV4dAorICBnZXRfd2NoKCkgd2lsbCByZXR1cm4gaXQuCisKKy0gSXNzdWUgIzk1NjE6IGRpc3R1dGlscyBhbmQgcGFja2FnaW5nIG5vdyB3cml0ZXMgZWdnLWluZm8gZmlsZXMgdXNpbmcgVVRGLTgsCisgIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KKworLSBJc3N1ZSAjODI4NjogVGhlIGRpc3R1dGlscyBjb21tYW5kIHNkaXN0IHdpbGwgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgaW5zdGVhZAorICBvZiBjcmFzaGluZyB3aGVuIGFuIGludmFsaWQgcGF0aCBpcyBnaXZlbiBpbiB0aGUgbWFuaWZlc3QgdGVtcGxhdGUuCisKKy0gSXNzdWUgIzEyODQxOiB0YXJmaWxlIHVubmVjZXNzYXJpbHkgY2hlY2tlZCB0aGUgZXhpc3RlbmNlIG9mIG51bWVyaWNhbCB1c2VyCisgIGFuZCBncm91cCBpZHMgb24gZXh0cmFjdGlvbi4gSWYgb25lIG9mIHRoZW0gZGlkIG5vdCBleGlzdCB0aGUgcmVzcGVjdGl2ZSBpZAorICBvZiB0aGUgY3VycmVudCB1c2VyIChpLmUuIHJvb3QpIHdhcyB1c2VkIGZvciB0aGUgZmlsZSBhbmQgb3duZXJzaGlwCisgIGluZm9ybWF0aW9uIHdhcyBsb3N0LgorCistIElzc3VlICMxMjg4ODogRml4IGEgYnVnIGluIEhUTUxQYXJzZXIudW5lc2NhcGUgdGhhdCBwcmV2ZW50ZWQgaXQgdG8gZXNjYXBlCisgIG1vcmUgdGhhbiAxMjggZW50aXRpZXMuICBQYXRjaCBieSBQZXRlciBPdHRlbi4KKworLSBJc3N1ZSAjMTI4Nzg6IEV4cG9zZSBhIF9fZGljdF9fIGF0dHJpYnV0ZSBvbiBpby5JT0Jhc2UgYW5kIGl0cyBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMjYzNjogSURMRSByZWFkcyB0aGUgY29kaW5nIGNvb2tpZSB3aGVuIGV4ZWN1dGluZyBhIFB5dGhvbiBzY3JpcHQuCisKKy0gSXNzdWUgIzEyNDk0OiBPbiBlcnJvciwgY2FsbCgpLCBjaGVja19jYWxsKCksIGNoZWNrX291dHB1dCgpIGFuZAorICBnZXRzdGF0dXNvdXRwdXQoKSBmdW5jdGlvbnMgb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vdyBraWxsIHRoZSBwcm9jZXNzLAorICByZWFkIGl0cyBzdGF0dXMgKHRvIGF2b2lkIHpvbWJpcykgYW5kIGNsb3NlIHBpcGVzLgorCistIElzc3VlICMxMjcyMDogRXhwb3NlIGxvdy1sZXZlbCBMaW51eCBleHRlbmRlZCBmaWxlIGF0dHJpYnV0ZSBmdW5jdGlvbnMgaW4gb3MuCisKKy0gSXNzdWUgIzEwOTQ2OiBUaGUgZGlzdHV0aWxzIGNvbW1hbmRzIGJkaXN0X2R1bWIsIGJkaXN0X3dpbmluc3QgYW5kIGJkaXN0X21zaQorICBub3cgcmVzcGVjdCBhIC0tc2tpcC1idWlsZCBvcHRpb24gZ2l2ZW4gdG8gYmRpc3QuICBUaGUgcGFja2FnaW5nIGNvbW1hbmRzCisgIHdlcmUgZml4ZWQgdG9vLgorCistIElzc3VlICMxMjg0NzogRml4IGEgY3Jhc2ggd2l0aCBuZWdhdGl2ZSBQVVQgYW5kIExPTkdfQklOUFVUIGFyZ3VtZW50cyBpbgorICB0aGUgQyBwaWNrbGUgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzExNTY0OiBBdm9pZCBjcmFzaGVzIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBodWdlIG9iamVjdHMgb3IgY29udGFpbmVycworICAobW9yZSB0aGFuIDIqKjMxIGl0ZW1zKS4gIEluc3RlYWQsIGluIG1vc3QgY2FzZXMsIGFuIE92ZXJmbG93RXJyb3IgaXMgcmFpc2VkLgorCistIElzc3VlICMxMjI4NzogRml4IGEgc3RhY2sgY29ycnVwdGlvbiBpbiBvc3NhdWRpb2RldiBtb2R1bGUgd2hlbiB0aGUgRkQgaXMKKyAgZ3JlYXRlciB0aGFuIEZEX1NFVFNJWkUuCisKKy0gSXNzdWUgIzEyODM5OiBGaXggY3Jhc2ggaW4gemxpYiBtb2R1bGUgZHVlIHRvIHZlcnNpb24gbWlzbWF0Y2guCisgIEZpeCBieSBSaWNoYXJkIE0uIFRldy4KKworLSBJc3N1ZSAjOTkyMzogVGhlIG1haWxjYXAgbW9kdWxlIG5vdyBjb3JyZWN0bHkgdXNlcyB0aGUgcGxhdGZvcm0gcGF0aAorICBzZXBhcmF0b3IgZm9yIHRoZSBNQUlMQ0FQIGVudmlyb25tZW50IHZhcmlhYmxlIG9uIG5vbi1QT1NJWCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyODM1OiBGb2xsb3cgdXAgdG8gIzY1NjAgdGhhdCB1bmNvbmRpdGlvbmFsbHkgcHJldmVudHMgdXNlIG9mIHRoZQorICB1bmVuY3J5cHRlZCBzZW5kbXNnL3JlY3Ztc2cgQVBJcyBvbiBTU0wgd3JhcHBlZCBzb2NrZXRzLiBQYXRjaCBieSBEYXZpZAorICBXYXRzb24uCisKKy0gSXNzdWUgIzEyODAzOiBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpIG5vdyBhY2NlcHRzIGEgcGFzc3dvcmQgYXJndW1lbnQKKyAgdG8gYmUgdXNlZCBpZiB0aGUgcHJpdmF0ZSBrZXkgaXMgZW5jcnlwdGVkLiAgUGF0Y2ggYnkgQWRhbSBTaW1wa2lucy4KKworLSBJc3N1ZSAjMTE2NTc6IEZpeCBzZW5kaW5nIGZpbGUgZGVzY3JpcHRvcnMgb3ZlciAyNTUgb3ZlciBhIG11bHRpcHJvY2Vzc2luZworICBQaXBlLgorCistIElzc3VlICMxMjgxMTogdGFibmFubnkuY2hlY2soKSBub3cgcHJvbXB0bHkgY2xvc2VzIGNoZWNrZWQgZmlsZXMuIFBhdGNoIGJ5CisgIEFudGhvbnkgQnJpZ2dzLgorCistIElzc3VlICM2NTYwOiBUaGUgc2VuZG1zZy9yZWN2bXNnIEFQSSBpcyBub3cgZXhwb3NlZCBieSB0aGUgc29ja2V0IG1vZHVsZQorICB3aGVuIHByb3ZpZGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtLCBzdXBwb3J0aW5nIHByb2Nlc3Npbmcgb2YKKyAgYW5jaWxsYXJ5IGRhdGEgaW4gcHVyZSBQeXRob24gY29kZS4gUGF0Y2ggYnkgRGF2aWQgV2F0c29uIGFuZCBIZWlrbyBXdW5kcmFtLgorCistIElzc3VlICMxMjMyNjogT24gTGludXgsIHN5cy5wbGF0Zm9ybSBkb2Vzbid0IGNvbnRhaW4gdGhlIG1ham9yIHZlcnNpb24KKyAgYW55bW9yZS4gSXQgaXMgbm93IGFsd2F5cyAnbGludXgnLCBpbnN0ZWFkIG9mICdsaW51eDInIG9yICdsaW51eDMnIGRlcGVuZGluZworICBvbiB0aGUgTGludXggdmVyc2lvbiB1c2VkIHRvIGJ1aWxkIFB5dGhvbi4KKworLSBJc3N1ZSAjMTIyMTM6IEZpeCBhIGJ1ZmZlcmluZyBidWcgd2l0aCBpbnRlcmxlYXZlZCByZWFkcyBhbmQgd3JpdGVzIHRoYXQKKyAgY291bGQgYXBwZWFyIG9uIEJ1ZmZlcmVkUmFuZG9tIHN0cmVhbXMuCisKKy0gSXNzdWUgIzEyNzc4OiBSZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4gSlNPTi1lbmNvZGluZyBhIGxhcmdlCisgIGNvbnRhaW5lciBvZiBtYW55IHNtYWxsIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyNjUwOiBGaXggYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIHN1YnByb2Nlc3MuUG9wZW4gY291bGQgbGVhaworICByZXNvdXJjZXMgKEZEL3pvbWJpZSkgd2hlbiBraWxsZWQgYXQgdGhlIHdyb25nIHRpbWUuCisKKy0gSXNzdWUgIzEyNzQ0OiBGaXggaW5lZmZpY2llbnQgcmVwcmVzZW50YXRpb24gb2YgaW50ZWdlcnMgYmV0d2VlbiAyKiozMSBhbmQKKyAgMioqNjMgb24gc3lzdGVtcyB3aXRoIGEgNjQtYml0IEMgImxvbmciLgorCistIElzc3VlICMxMjY0NjogQWRkIGFuICdlb2YnIGF0dHJpYnV0ZSB0byB6bGliLkRlY29tcHJlc3MsIHRvIG1ha2UgaXQgZWFzaWVyIHRvCisgIGRldGVjdCB0cnVuY2F0ZWQgaW5wdXQgc3RyZWFtcy4KKworLSBJc3N1ZSAjMTE1MTM6IEZpeCBleGNlcHRpb24gaGFuZGxpbmcgYGB0YXJmaWxlLlRhckZpbGUuZ3pvcGVuKClgYCB3aGVuCisgIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQuCisKKy0gSXNzdWUgIzEyNjg3OiBGaXggYSBwb3NzaWJsZSBidWZmZXJpbmcgYnVnIHdoZW4gdW5waWNrbGluZyB0ZXh0IG1vZGUKKyAgKHByb3RvY29sIDAsIG1vc3RseSkgcGlja2xlcy4KKworLSBJc3N1ZSAjMTAwODc6IEZpeCB0aGUgaHRtbCBvdXRwdXQgZm9ybWF0IG9mIHRoZSBjYWxlbmRhciBtb2R1bGUuCisKKy0gSXNzdWUgIzEyNTQwOiBQcmV2ZW50IHpvbWJpZSBJRExFIHByb2Nlc3NlcyBvbiBXaW5kb3dzIGR1ZSB0byBjaGFuZ2VzCisgIGluIG9zLmtpbGwoKS4KKworLSBJc3N1ZSAjMTMxMjE6IGFkZCBzdXBwb3J0IGZvciBpbnBsYWNlIG1hdGggb3BlcmF0b3JzIHRvIGNvbGxlY3Rpb25zLkNvdW50ZXIuCisKKy0gQWRkIHN1cHBvcnQgZm9yIHVuYXJ5IHBsdXMgYW5kIHVuYXJ5IG1pbnVzIHRvIGNvbGxlY3Rpb25zLkNvdW50ZXIuCisKKy0gSXNzdWUgIzEyNjgzOiB1cmxwYXJzZSB1cGRhdGVkIHRvIGluY2x1ZGUgc3ZuIGFzIHNjaGVtZXMgdGhhdCB1c2VzIHJlbGF0aXZlCisgIHBhdGhzLiAoc3ZuIGZyb20gMS41IG9ud2FyZHMgc3VwcG9ydCByZWxhdGl2ZSBwYXRoKS4KKworLSBJc3N1ZSAjMTI2NTU6IEV4cG9zZSBmdW5jdGlvbnMgZnJvbSBzY2hlZC5oIGluIHRoZSBvcyBtb2R1bGU6IHNjaGVkX3lpZWxkKCksCisgIHNjaGVkX3NldHNjaGVkdWxlcigpLCBzY2hlZF9nZXRzY2hlZHVsZXIoKSwgc2NoZWRfc2V0cGFyYW0oKSwKKyAgc2NoZWRfZ2V0X21pbl9wcmlvcml0eSgpLCBzY2hlZF9nZXRfbWF4X3ByaW9yaXR5KCksIHNjaGVkX3JyX2dldF9pbnRlcnZhbCgpLAorICBzY2hlZF9nZXRhZmZpbml0eSgpLCBzY2hlZF9zZXRhZmZpbml0eSgpLgorCistIEFkZCBUaHJlYWRFcnJvciB0byB0aHJlYWRpbmcuX19hbGxfXy4KKworLSBJc3N1ZXMgIzExMTA0LCAjODY4ODogRml4IHRoZSBiZWhhdmlvciBvZiBkaXN0dXRpbHMnIHNkaXN0IGNvbW1hbmQgd2l0aAorICBtYW51YWxseS1tYWludGFpbmVkIE1BTklGRVNUIGZpbGVzLgorCistIElzc3VlICMxMTI4MTogc210cGxpYi5TVE1QIGdldHMgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyLCB3aGljaCBhZGRzIHRoZQorICBhYmlsaXR5IHRvIGJpbmQgdG8gc3BlY2lmaWMgc291cmNlIGFkZHJlc3Mgb24gYSBtYWNoaW5lIHdpdGggbXVsdGlwbGUKKyAgaW50ZXJmYWNlcy4gUGF0Y2ggYnkgUGF1bG8gU2NhcmRpbmUuCisKKy0gSXNzdWUgIzEyNDY0OiB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkuY2xlYW51cCgpIHNob3VsZCBub3QgZm9sbG93CisgIHN5bWxpbmtzOiBmaXggaXQuIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICM4ODg3OiAicHlkb2Mgc29tZWJ1aWx0aW4uc29tZW1ldGhvZCIgKG9yIGhlbHAoJ3NvbWVidWlsdGluLnNvbWVtZXRob2QnKQorICBpbiBQeXRob24gY29kZSkgbm93IGZpbmRzIHRoZSBkb2Mgb2YgdGhlIG1ldGhvZC4KKworLSBJc3N1ZSAjMTA5Njg6IFJlbW92ZSBpbmRpcmVjdGlvbiBpbiB0aHJlYWRpbmcuICBUaGUgcHVibGljIG5hbWVzIChFdmVudCwKKyAgQ29uZGl0aW9uLCBldGMuKSB1c2VkIHRvIGJlIGZhY3RvcnkgZnVuY3Rpb25zIHJldHVybmluZyBpbnN0YW5jZXMgb2YgaGlkZGVuCisgIGNsYXNzZXMgKF9FdmVudCwgX0NvbmRpdGlvbiwgZXRjLiksIGJlY2F1c2UgKGlmIEd1aWRvIHJlY2FsbHMgY29ycmVjdGx5KSB0aGlzCisgIGNvZGUgcHJlLWRhdGVzIHRoZSBhYmlsaXR5IHRvIHN1YmNsYXNzIGV4dGVuc2lvbiB0eXBlcy4gIEl0IGlzIG5vdyBwb3NzaWJsZQorICB0byBpbmhlcml0IGZyb20gdGhlc2UgY2xhc3NlcyB3aXRob3V0IGhhdmluZyB0byBpbXBvcnQgdGhlIHByaXZhdGUKKyAgdW5kZXJzY29yZWQgbmFtZXMgbGlrZSBtdWx0aXByb2Nlc3NpbmcgZGlkLgorCistIElzc3VlICM5NzIzOiBBZGQgc2hsZXgucXVvdGUgZnVuY3Rpb25zLCB0byBlc2NhcGUgZmlsZW5hbWVzIGFuZCBjb21tYW5kCisgIGxpbmVzLgorCistIElzc3VlICMxMjYwMzogRml4IHB5ZG9jLnN5bm9wc2lzKCkgb24gZmlsZXMgd2l0aCBub24tbmVnYXRpdmUgc3RfbXRpbWUuCisKKy0gSXNzdWUgIzEyNTE0OiBVc2UgdHJ5L2ZpbmFsbHkgdG8gYXNzdXJlIHRoZSB0aW1laXQgbW9kdWxlIHJlc3RvcmVzIGdhcmJhZ2UKKyAgY29sbGVjdGlvbnMgd2hlbiBpdCBpcyBkb25lLgorCistIElzc3VlICMxMjYwNzogSW4gc3VicHJvY2VzcywgZml4IGlzc3VlIHdoZXJlIGlmIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyIGlzCisgIGdpdmVuIGFzIGEgbG93IGZkLCBpdCBnZXRzIG92ZXJ3cml0dGVuLgorCistIElzc3VlICMxMjU5MDogSURMRSBlZGl0b3Igd2luZG93IG5vdyBhbHdheXMgZGlzcGxheXMgdGhlIGZpcnN0IGxpbmUKKyAgd2hlbiBvcGVuaW5nIGEgbG9uZyBmaWxlLiAgV2l0aCBUayA4LjUsIHRoZSBmaXJzdCBsaW5lIHdhcyBoaWRkZW4uCisKKy0gSXNzdWUgIzEyNTc2OiBGaXggdXJsb3BlbiBiZWhhdmlvciBvbiBzaXRlcyB3aGljaCBkbyBub3Qgc2VuZCAob3Igb2JmdXNjYXRlcykKKyAgQ29ubmVjdGlvbjpjbG9zZSBoZWFkZXIuCisKKy0gSXNzdWUgIzEyMTAyOiBEb2N1bWVudCB0aGF0IGJ1ZmZlcmVkIGZpbGVzIG11c3QgYmUgZmx1c2hlZCBiZWZvcmUgYmVpbmcgdXNlZAorICB3aXRoIG1tYXAuIFBhdGNoIGJ5IFN0ZWZmZW4gRGFvZGUgTnVycG1lc28uCisKKy0gSXNzdWUgIzEyNTYwOiBCdWlsZCBsaWJweXRob24uc28gb24gT3BlbkJTRC4gUGF0Y2ggYnkgU3RlZmFuIFNwZXJsaW5nLgorCistIElzc3VlICMxODEzOiBGaXggY29kZWMgbG9va3VwIHVuZGVyIFR1cmtpc2ggbG9jYWxlcy4KKworLSBJc3N1ZSAjMTI1OTE6IEltcHJvdmUgc3VwcG9ydCBvZiAidW5pdmVyc2FsIG5ld2xpbmVzIiBpbiB0aGUgc3VicHJvY2VzcworICBtb2R1bGU6IHRoZSBwaXBlZCBzdHJlYW1zIGNhbiBub3cgYmUgcHJvcGVybHkgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8uCisKKy0gSXNzdWUgIzEyNTkxOiBBbGxvdyBpby5UZXh0SU9XcmFwcGVyIHRvIHdvcmsgd2l0aCByYXcgSU8gb2JqZWN0cyAod2l0aG91dAorICBhIHJlYWQxKCkgbWV0aG9kKSwgYW5kIGFkZCBhICp3cml0ZV90aHJvdWdoKiBwYXJhbWV0ZXIgdG8gbWFuZGF0ZQorICB1bmJ1ZmZlcmVkIHdyaXRlcy4KKworLSBJc3N1ZSAjMTA4ODM6IEZpeCBzb2NrZXQgbGVha3MgaW4gdXJsbGliLnJlcXVlc3Qgd2hlbiB1c2luZyBGVFAuCisKKy0gSXNzdWUgIzEyNTkyOiBNYWtlIFB5dGhvbiBidWlsZCBvbiBPcGVuQlNEIDUgKGFuZCBmdXR1cmUgbWFqb3IgcmVsZWFzZXMpLgorCistIElzc3VlICMxMjM3MjogUE9TSVggc2VtYXBob3JlcyBhcmUgYnJva2VuIG9uIEFJWDogZG9uJ3QgdXNlIHRoZW0uCisKKy0gSXNzdWUgIzEyNTUxOiBQcm92aWRlIGEgZ2V0X2NoYW5uZWxfYmluZGluZygpIG1ldGhvZCBvbiBTU0wgc29ja2V0cyBzbyBhcworICB0byBnZXQgY2hhbm5lbCBiaW5kaW5nIGRhdGEgZm9yIHRoZSBjdXJyZW50IFNTTCBzZXNzaW9uIChvbmx5IHRoZQorICAidGxzLXVuaXF1ZSIgY2hhbm5lbCBiaW5kaW5nIGlzIGltcGxlbWVudGVkKS4gIFRoaXMgYWxsb3dzIHRoZSBpbXBsZW1lbnRhdGlvbgorICBvZiBjZXJ0YWluIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgc3VjaCBhcyBTQ1JBTS1TSEEtMS1QTFVTLiAgUGF0Y2ggYnkKKyAgSmFjZWsgS29uaWVjem55LgorCistIElzc3VlICM2NjUxOTQ6IGVtYWlsLnV0aWxzIG5vdyBoYXMgZm9ybWF0X2RhdGV0aW1lIGFuZCBwYXJzZWRhdGVfdG9fZGF0ZXRpbWUKKyAgZnVuY3Rpb25zLCBhbGxvd2luZyBmb3Igcm91bmQgdHJpcHBpbmcgb2YgUkZDMjgyMiBmb3JtYXQgZGF0ZXMuCisKKy0gSXNzdWUgIzEyNTcxOiBBZGQgYSBwbGF0LWxpbnV4MyBkaXJlY3RvcnkgbWlycm9yaW5nIHRoZSBwbGF0LWxpbnV4MgorICBkaXJlY3RvcnksIHNvIHRoYXQgImltcG9ydCBETEZDTiIgYW5kIG90aGVyIHNpbWlsYXIgaW1wb3J0cyB3b3JrIG9uCisgIExpbnV4IDMuMC4KKworLSBJc3N1ZSAjNzQ4NDogc210cGxpYiBubyBsb25nZXIgcHV0cyA8PiBhcm91bmQgYWRkcmVzc2VzIGluIFZSRlkgYW5kIEVYUE4KKyAgY29tbWFuZHM7IHRoZXkgYXJlbid0IHJlcXVpcmVkIGFuZCBpbiBmYWN0IHBvc3RmaXggZG9lc24ndCBzdXBwb3J0IHRoYXQgZm9ybS4KKworLSBJc3N1ZSAjMTIyNzM6IFJlbW92ZSBhc3QuX192ZXJzaW9uX18uIEFTVCBjaGFuZ2VzIGNhbiBiZSBhY2NvdW50ZWQgZm9yIGJ5CisgIGNoZWNraW5nIHN5cy52ZXJzaW9uX2luZm8gb3Igc3lzLl9tZXJjdXJpYWwuCisKKy0gU2lsZW5jZSBzcHVyaW91cyAiYnJva2VuIHBpcGUiIHRyYWNlYmFja3Mgd2hlbiBzaHV0dGluZyBkb3duIGEKKyAgUHJvY2Vzc1Bvb2xFeGVjdXRvci4KKworLSBGaXggcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yCisgIGJ5IGpvaW5pbmcgYWxsIHF1ZXVlcyBhbmQgcHJvY2Vzc2VzIHdoZW4gc2h1dGRvd24oKSBpcyBjYWxsZWQuCisKKy0gSXNzdWUgIzExNjAzOiBGaXggYSBjcmFzaCB3aGVuIF9fc3RyX18gaXMgcmVib3VuZCBhcyBfX3JlcHJfXy4gIFBhdGNoIGJ5CisgIEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTEzMjE6IEZpeCBhIGNyYXNoIHdpdGggbXVsdGlwbGUgaW1wb3J0cyBvZiB0aGUgX3BpY2tsZSBtb2R1bGUgd2hlbgorICBlbWJlZGRpbmcgUHl0aG9uLiAgUGF0Y2ggYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICM2NzU1OiBBZGQgZ2V0X3djaCgpIG1ldGhvZCB0byBjdXJzZXMud2luZG93IGNsYXNzLiBQYXRjaCBieSBJw7FpZ28KKyAgU2VybmEuCisKKy0gQWRkIGNnaS5jbG9zZWxvZygpIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBsb2cgZmlsZS4KKworLSBJc3N1ZSAjMTI1MDI6IGFzeW5jb3JlOiBmaXggcG9sbGluZyBsb29wIHdpdGggQUZfVU5JWCBzb2NrZXRzLgorCistIElzc3VlICM0Mzc2OiBjdHlwZXMgbm93IHN1cHBvcnRzIG5lc3RlZCBzdHJ1Y3R1cmVzIGluIGEgZW5kaWFuIGRpZmZlcmVudCB0aGFuCisgIHRoZSBwYXJlbnQgc3RydWN0dXJlLiBQYXRjaCBieSBWbGFkIFJpc2N1dGlhLgorCistIFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUgX0NIVU5LX1NJWkUgYXR0cmlidXRlIG9mIGEKKyAgVGV4dElPV3JhcHBlciB0byBhIGh1Z2UgdmFsdWUsIG5vdCBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzEyNTA0OiBDbG9zZSBmaWxlIGhhbmRsZXMgaW4gYSB0aW1lbHkgbWFubmVyIGluIHBhY2thZ2luZy5kYXRhYmFzZS4KKyAgVGhpcyBmaXhlcyBhIGJ1ZyB3aXRoIHRoZSByZW1vdmUgKHVuaW5zdGFsbCkgZmVhdHVyZSBvbiBXaW5kb3dzLgorCistIElzc3VlcyAjMTIxNjkgYW5kICMxMDUxMDogRmFjdG9yIG91dCBjb2RlIHVzZWQgYnkgdmFyaW91cyBwYWNrYWdpbmcgY29tbWFuZHMKKyAgdG8gbWFrZSBIVFRQIFBPU1QgcmVxdWVzdHMsIGFuZCBtYWtlIHN1cmUgaXQgdXNlcyBDUkxGLgorCistIElzc3VlICMxMjAxNjogTXVsdGlieXRlIENKSyBkZWNvZGVycyBub3cgcmVzeW5jaHJvbml6ZSBmYXN0ZXIuIFRoZXkgb25seQorICBpZ25vcmUgdGhlIGZpcnN0IGJ5dGUgb2YgYW4gaW52YWxpZCBieXRlIHNlcXVlbmNlLiBGb3IgZXhhbXBsZSwKKyAgYidceGZmXG4nLmRlY29kZSgnZ2IyMzEyJywgJ3JlcGxhY2UnKSBnaXZlcyAnXHVmZmZkXG4nIGluc3RlYWQgb2YgJ1x1ZmZmZCcuCisKKy0gSXNzdWUgIzEyNDU5OiB0aW1lLnNsZWVwKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIHNsZWVwIGxlbmd0aCBpcworICBuZWdhdGl2ZSwgaW5zdGVhZCBvZiBhbiBpbmZpbml0ZSBzbGVlcCBvbiBXaW5kb3dzIG9yIHJhaXNpbmcgYW4gSU9FcnJvciBvbgorICBMaW51eCBmb3IgZXhhbXBsZSwgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgb24gYWxsIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI0NTE6IHB5ZG9jOiBodG1sX2dldGZpbGUoKSBub3cgdXNlcyB0b2tlbml6ZS5vcGVuKCkgdG8gc3VwcG9ydAorICBQeXRob24gc2NyaXB0cyB1c2luZyBhIGVuY29kaW5nIGRpZmZlcmVudCB0aGFuIFVURi04IChyZWFkIHRoZSBjb2RpbmcgY29va2llCisgIG9mIHRoZSBzY3JpcHQpLgorCistIElzc3VlICMxMjQ5Mzogc3VicHJvY2VzczogUG9wZW4uY29tbXVuaWNhdGUoKSBub3cgYWxzbyBoYW5kbGVzIEVJTlRSIGVycm9ycworICBpZiB0aGUgcHJvY2VzcyBoYXMgb25seSBvbmUgcGlwZS4KKworLSBJc3N1ZSAjMTI0Njc6IHdhcm5pbmdzOiBmaXggYSByYWNlIGNvbmRpdGlvbiBpZiBhIHdhcm5pbmcgaXMgZW1pdHRlZCBhdAorICBzaHV0ZG93biwgaWYgZ2xvYmFscygpWydfX2ZpbGVfXyddIGlzIE5vbmUuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYzogaW1wb3J0ZmlsZSgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKKyAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcnVucHk6IHJ1bl9wYXRoKCkgbm93IG9wZW5zIHRoZSBQeXRob24gc2NyaXB0IGluIGJpbmFyeSBtb2RlLAorICBpbnN0ZWFkIG9mIHRleHQgbW9kZSB1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nLCB0byBzdXBwb3J0IG90aGVyIGVuY29kaW5ncworICB0aGFuIFVURi04IChzY3JpcHRzIHVzaW5nIHRoZSBjb2RpbmcgY29va2llKS4KKworLSBJc3N1ZSAjMTI0NTE6IHhtbC5kb20ucHVsbGRvbTogcGFyc2UoKSBub3cgb3BlbnMgZmlsZXMgaW4gYmluYXJ5IG1vZGUgaW5zdGVhZAorICBvZiB0aGUgdGV4dCBtb2RlICh1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nKSB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCisKKy0gSXNzdWUgIzEyMTQ3OiBBZGp1c3QgdGhlIG5ldy1pbi0zLjIgc210cGxpYi5zZW5kX21lc3NhZ2UgbWV0aG9kIGZvciBiZXR0ZXIKKyAgY29uZm9ybWFuY2UgdG8gdGhlIFJGQ3M6ICBjb3JyZWN0bHkgaGFuZGxlIFNlbmRlciBhbmQgUmVzZW50LSBoZWFkZXJzLgorCistIElzc3VlICMxMjM1MjogRml4IGEgZGVhZGxvY2sgaW4gbXVsdGlwcm9jZXNzaW5nLkhlYXAgd2hlbiBhIGJsb2NrIGlzIGZyZWVkIGJ5CisgIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGlsZSB0aGUgSGVhcCBsb2NrIGlzIGhlbGQuCisKKy0gSXNzdWUgIzEyNDYyOiB0aW1lLnNsZWVwKCkgbm93IGltbWVkaWF0ZWx5IGNhbGxzIHRoZSAoUHl0aG9uKSBzaWduYWwgaGFuZGxlcgorICBpZiBpdCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd2FpdCB1bnRpbCB0aGUgbmV4dAorICBpbnN0cnVjdGlvbi4KKworLSBJc3N1ZSAjMTI0NDI6IG5ldyBzaHV0aWwuZGlza191c2FnZSBmdW5jdGlvbiwgcHJvdmlkaW5nIHRvdGFsLCB1c2VkIGFuZCBmcmVlCisgIGRpc2sgc3BhY2Ugc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTI0NTE6IFRoZSBYSW5jbHVkZSBkZWZhdWx0IGxvYWRlciBvZiB4bWwuZXRyZWUgbm93IGRlY29kZXMgZmlsZXMgZnJvbQorICBVVEYtOCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIEl0IG5vdworICBhbHNvIG9wZW5zIFhNTCBmaWxlcyBmb3IgdGhlIHBhcnNlciBpbiBiaW5hcnkgbW9kZSBpbnN0ZWFkIG9mIHRoZSB0ZXh0IG1vZGUKKyAgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogZG9jdGVzdC5kZWJ1Z19zY3JpcHQoKSBkb2Vzbid0IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlCisgIGFueW1vcmUgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcHlkb2Muc3lub3BzaXMoKSBub3cgcmVhZHMgdGhlIGVuY29kaW5nIGNvb2tpZSBpZiBhdmFpbGFibGUsCisgIHRvIHJlYWQgdGhlIFB5dGhvbiBzY3JpcHQgZnJvbSB0aGUgcmlnaHQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzEyNDUxOiBkaXN0dXRpbHMgbm93IG9wZW5zIHRoZSBzZXR1cCBzY3JpcHQgaW4gYmluYXJ5IG1vZGUgdG8gcmVhZCB0aGUKKyAgZW5jb2RpbmcgY29va2llLCBpbnN0ZWFkIG9mIG9wZW5pbmcgaXQgaW4gVVRGLTguCisKKy0gSXNzdWUgIzk1MTY6IE9uIE1hYyBPUyBYLCBjaGFuZ2UgRGlzdHV0aWxzIHRvIG5vIGxvbmdlciBnbG9iYWxseSBhdHRlbXB0IHRvCisgIGNoZWNrIG9yIHNldCB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUKKyAgaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIFRoaXMgY291bGQgY2F1c2UgZmFpbHVyZXMgaW4gbm9uLURpc3R1dGlscyBzdWJwcm9jZXNzZXMKKyAgYW5kIHdhcyB1bnJlbGlhYmxlIHNpbmNlIHRlc3RzIG9yIHVzZXIgcHJvZ3JhbXMgY291bGQgbW9kaWZ5IHRoZSBpbnRlcnByZXRlcgorICBlbnZpcm9ubWVudCBhZnRlciBEaXN0dXRpbHMgc2V0IGl0LiAgSW5zdGVhZCwgaGF2ZSBEaXN0dXRpbHMgc2V0IHRoZQorICBkZXBsb3ltZW50IHRhcmdldCBvbmx5IGluIHRoZSBlbnZpcm9ubWVudCBvZiBlYWNoIGJ1aWxkIHN1YnByb2Nlc3MuICBJdCBpcworICBzdGlsbCBwb3NzaWJsZSB0byBnbG9iYWxseSBvdmVycmlkZSB0aGUgZGVmYXVsdCBieSBzZXR0aW5nCisgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBiZWZvcmUgbGF1bmNoaW5nIHRoZSBpbnRlcnByZXRlcjsgaXRzIHZhbHVlIG11c3QgYmUKKyAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIHZhbHVlIHdpdGggd2hpY2ggdGhlIGludGVycHJldGVyCisgIHdhcyBidWlsdC4gIEFsc28sIGltcGxlbWVudCB0aGUgc2FtZSBoYW5kbGluZyBpbiBwYWNrYWdpbmcuCisKKy0gSXNzdWUgIzEyNDIyOiBJbiB0aGUgY29weSBtb2R1bGUsIGRvbid0IHN0b3JlIG9iamVjdHMgdGhhdCBhcmUgdGhlaXIgb3duIGNvcHkKKyAgaW4gdGhlIG1lbW8gZGljdC4KKworLSBJc3N1ZSAjMTIzMDM6IEFkZCBzaWd3YWl0aW5mbygpIGFuZCBzaWd0aW1lZHdhaXQoKSB0byB0aGUgc2lnbmFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTI0MDQ6IFJlbW92ZSBDODkgaW5jb21wYXRpYmxlIGNvZGUgZnJvbSBtbWFwIG1vZHVsZS4gUGF0Y2ggYnkgQWtpcmEKKyAgS2l0YWRhLgorCistIElzc3VlICMxODc0OiBlbWFpbCBub3cgZGV0ZWN0cyBhbmQgcmVwb3J0cyBhcyBhIGRlZmVjdCB0aGUgcHJlc2VuY2Ugb2YKKyAgYW55IENURSBvdGhlciB0aGFuIDdiaXQsIDhiaXQsIG9yIGJpbmFyeSBvbiBhIG11bHRpcGFydC4KKworLSBJc3N1ZSAjMTIzODM6IEZpeCBzdWJwcm9jZXNzIG1vZHVsZSB3aXRoIGVudj17fTogZG9uJ3QgY29weSB0aGUgZW52aXJvbm1lbnQKKyAgdmFyaWFibGVzLCBzdGFydCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50LgorCistIElzc3VlICMxMTYzNzogRml4IHN1cHBvcnQgZm9yIGltcG9ydGluZyBwYWNrYWdpbmcgc2V0dXAgaG9va3MgZnJvbSB0aGUKKyAgcHJvamVjdCBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzY3NzE6IE1vdmVkIHRoZSBjdXJzZXMud3JhcHBlciBmdW5jdGlvbiBmcm9tIHRoZSBzaW5nbGUtZnVuY3Rpb24KKyAgd3JhcHBlciBtb2R1bGUgaW50byBfX2luaXRfXywgZWxpbWluYXRpbmcgdGhlIG1vZHVsZS4gIFNpbmNlIF9faW5pdF9fIHdhcworICBhbHJlYWR5IGltcG9ydGluZyB0aGUgZnVuY3Rpb24gdG8gY3Vyc2VzLndyYXBwZXIsIHRoZXJlIGlzIG5vIEFQSSBjaGFuZ2UuCisKKy0gSXNzdWUgIzExNTg0OiBlbWFpbC5oZWFkZXIuZGVjb2RlX2hlYWRlciBubyBsb25nZXIgZmFpbHMgaWYgdGhlIGhlYWRlcgorICBwYXNzZWQgdG8gaXQgaXMgYSBIZWFkZXIgb2JqZWN0LCBhbmQgSGVhZGVyL21ha2VfaGVhZGVyIG5vIGxvbmdlciBmYWlsCisgIGlmIGdpdmVuIGJpbmFyeSB1bmtub3duLThiaXQgaW5wdXQuCisKKy0gSXNzdWUgIzExNzAwOiBtYWlsYm94IHByb3h5IG9iamVjdCBjbG9zZSBtZXRob2RzIGNhbiBub3cgYmUgY2FsbGVkIG11bHRpcGxlCisgIHRpbWVzIHdpdGhvdXQgZXJyb3IuCisKKy0gSXNzdWUgIzExNzY3OiBDb3JyZWN0IGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG1haWxib3gncyBfX2dldGl0ZW1fXyBtZXRob2QuCisKKy0gSXNzdWUgIzEyMTMzOiBBYnN0cmFjdEhUVFBIYW5kbGVyLmRvX29wZW4oKSBvZiB1cmxsaWIucmVxdWVzdCBjbG9zZXMgdGhlIEhUVFAKKyAgY29ubmVjdGlvbiBpZiBpdHMgZ2V0cmVzcG9uc2UoKSBtZXRob2QgZmFpbHMgd2l0aCBhIHNvY2tldCBlcnJvci4gUGF0Y2gKKyAgd3JpdHRlbiBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzEyMjQwOiBBbGxvdyBtdWx0aXBsZSBzZXR1cCBob29rcyBpbiBwYWNrYWdpbmcncyBzZXR1cC5jZmcgZmlsZXMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgQnJheS4KKworLSBJc3N1ZSAjOTI4NDogQWxsb3cgaW5zcGVjdC5maW5kc291cmNlKCkgdG8gZmluZCB0aGUgc291cmNlIG9mIGRvY3Rlc3QKKyAgZnVuY3Rpb25zLgorCistIElzc3VlICMxMTU5NTogRml4IGFzc29ydGVkIGJ1Z3MgaW4gcGFja2FnaW5nLnV0aWwuY2ZnX3RvX2FyZ3MsIGEKKyAgY29tcGF0aWJpbGl0eSBoZWxwZXIgZm9yIHRoZSBkaXN0dXRpbHMtcGFja2FnaW5nIHRyYW5zaXRpb24uICBPcmlnaW5hbCBwYXRjaAorICBieSBFcmlrIEJyYXkuCisKKy0gSXNzdWUgIzEyMjg3OiBJbiBvc3NhdWRpb2RldiwgY2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzbid0IGNsb3NlZCBpbiBzZXZlcmFsCisgIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEyMDA5OiBGaXhlZCByZWdyZXNzaW9uIGluIG5ldHJjIGZpbGUgY29tbWVudCBoYW5kbGluZy4KKworLSBJc3N1ZSAjMTIyNDY6IFdhcm4gYW5kIGZhaWwgd2hlbiB0cnlpbmcgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHByb2plY3QgZnJvbQorICBhbiB1bmluc3RhbGxlZCBQeXRob24gKGJ1aWx0IGluIGEgc291cmNlIGNoZWNrb3V0KS4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFRzaGVwYW5nIExla2hvbmtob2JlLgorCistIElzc3VlICMxMDY5NDogemlwZmlsZSBub3cgaWdub3JlcyBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgYSB6aXBmaWxlLgorCistIElzc3VlICMxMjI4MzogRml4ZWQgcmVncmVzc2lvbiBpbiBzbXRwbGliIHF1b3Rpbmcgb2YgbGVhZGluZyBkb3RzIGluIERBVEEuCisKKy0gSXNzdWUgIzEwNDI0OiBBcmdwYXJzZSBub3cgaW5jbHVkZXMgdGhlIG5hbWVzIG9mIHRoZSBtaXNzaW5nIHJlcXVpcmVkCisgIGFyZ3VtZW50cyBpbiB0aGUgbWlzc2luZyBhcmd1bWVudHMgZXJyb3IgbWVzc2FnZS4KKworLSBJc3N1ZSAjMTIxNjg6IFN5c0xvZ0hhbmRsZXIgbm93IGFsbG93cyBOVUwgdGVybWluYXRpb24gdG8gYmUgY29udHJvbGxlZCB1c2luZworICBhIG5ldyAnYXBwZW5kX251bCcgYXR0cmlidXRlIG9uIHRoZSBoYW5kbGVyLgorCistIElzc3VlICMxMTU4MzogU3BlZWQgdXAgb3MucGF0aC5pc2RpciBvbiBXaW5kb3dzIGJ5IHVzaW5nIEdldEZpbGVBdHRyaWJ1dGVzCisgIGluc3RlYWQgb2Ygb3Muc3RhdC4KKworLSBJc3N1ZSAjMTIwMjE6IE1ha2UgbW1hcCdzIHJlYWQoKSBtZXRob2QgYXJndW1lbnQgb3B0aW9uYWwuIFBhdGNoIGJ5IFBldHJpCisgIExlaHRpbmVuLgorCistIElzc3VlICM5MjA1OiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvciBub3cgZGV0ZWN0cyBraWxsZWQKKyAgY2hpbGRyZW4gYW5kIHJhaXNlcyBCcm9rZW5Qcm9jZXNzUG9vbCBpbiBzdWNoIGEgc2l0dWF0aW9uLiAgUHJldmlvdXNseSBpdAorICB3b3VsZCByZWxpYWJseSBmcmVlemUvZGVhZGxvY2suCisKKy0gSXNzdWUgIzEyMDQwOiBFeHBvc2UgYSBuZXcgYXR0cmlidXRlIGBgc2VudGluZWxgYCBvbiBpbnN0YW5jZXMgb2YKKyAgYGBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2BgLiAgQWxzbywgZml4IFByb2Nlc3Muam9pbigpIHRvIG5vdCB1c2UgcG9sbGluZworICBhbnltb3JlLCB3aGVuIGdpdmVuIGEgdGltZW91dC4KKworLSBJc3N1ZSAjMTE4OTM6IFJlbW92ZSBvYnNvbGV0ZSBpbnRlcm5hbCB3cmFwcGVyIGNsYXNzIGBgU1NMRmFrZUZpbGVgYCBpbiB0aGUKKyAgc210cGxpYiBtb2R1bGUuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxMjA4MDogRml4IGEgRGVjaW1hbC5wb3dlcigpIGNhc2UgdGhhdCB0b29rIGFuIHVucmVhc29uYWJseSBsb25nIHRpbWUKKyAgdG8gY29tcHV0ZS4KKworLSBJc3N1ZSAjMTIyMjE6IFJlbW92ZSBfX3ZlcnNpb25fXyBhdHRyaWJ1dGVzIGZyb20gcHlleHBhdCwgcGlja2xlLCB0YXJmaWxlLAorICBweWRvYywgdGtpbnRlciwgYW5kIHhtbC5wYXJzZXJzLmV4cGF0LiBUaGlzIHdlcmUgdXNlbGVzcyB2ZXJzaW9uIGNvbnN0YW50cworICBsZWZ0IG92ZXIgZnJvbSB0aGUgTWVyY3VyaWFsIHRyYW5zaXRpb24KKworLSBOYW1lZCB0dXBsZXMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggdmFycygpLgorCistIElzc3VlICMxMjA4NTogRml4IGFuIGF0dHJpYnV0ZSBlcnJvciBpbiBzdWJwcm9jZXNzLlBvcGVuIGRlc3RydWN0b3IgaWYgdGhlCisgIGNvbnN0cnVjdG9yIGhhcyBmYWlsZWQsIGUuZy4gYmVjYXVzZSBvZiBhbiB1bmRlY2xhcmVkIGtleXdvcmQgYXJndW1lbnQuIFBhdGNoCisgIHdyaXR0ZW4gYnkgT2xlZyBPc2hteWFuLgorCistIElzc3VlICMxMjAyODogTWFrZSB0aHJlYWRpbmcuX2dldF9pZGVudCgpIHB1YmxpYywgcmVuYW1lIGl0IHRvCisgIHRocmVhZGluZy5nZXRfaWRlbnQoKSBhbmQgZG9jdW1lbnQgaXQuIFRoaXMgZnVuY3Rpb24gd2FzIGFscmVhZHkgdXNlZCB1c2luZworICBfdGhyZWFkLmdldF9pZGVudCgpLgorCistIElzc3VlICMxMjE3MTogSW5jcmVtZW50YWxFbmNvZGVyLnJlc2V0KCkgb2YgQ0pLIGNvZGVjcyAobXVsdGlieXRlY29kZWMpIGNhbGxzCisgIGVuY3Jlc2V0KCkgaW5zdGVhZCBvZiBkZWNyZXNldCgpLgorCistIElzc3VlICMxMjIxODogUmVtb3ZlZCB3c2dpcmVmLmVnZy1pbmZvLgorCistIElzc3VlICMxMjE5NjogQWRkIHBpcGUyKCkgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjOTg1MDY0OiBNYWtlIHBsaXN0bGliIG1vcmUgcmVzaWxpZW50IHRvIGZhdWx0eSBpbnB1dCBwbGlzdHMuCisgIFBhdGNoIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxNjI1OiBCWjJGaWxlIGFuZCBiejIuZGVjb21wcmVzcygpIG5vdyBzdXBwb3J0IG11bHRpLXN0cmVhbSBmaWxlcy4KKyAgSW5pdGlhbCBwYXRjaCBieSBOaXIgQWlkZXMuCisKKy0gSXNzdWUgIzEyMTc1OiBCdWZmZXJlZFJlYWRlci5yZWFkKC0xKSBub3cgY2FsbHMgcmF3LnJlYWRhbGwoKSBpZiBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyBvbmx5IHJlYWRzIHRoZSBmaWxlIHBvc2l0aW9uIGFuZCBzaXplCisgIG9uY2UuCisKKy0gSXNzdWUgIzEyMTc1OiBSYXdJT0Jhc2UucmVhZGFsbCgpIG5vdyByZXR1cm5zIE5vbmUgaWYgcmVhZCgpIHJldHVybnMgTm9uZS4KKworLSBJc3N1ZSAjMTIxNzU6IEZpbGVJTy5yZWFkYWxsKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhbiBJT0Vycm9yCisgIGlmIHRoZSBmaWxlIGlzIGNsb3NlZC4KKworLSBJc3N1ZSAjMTExMDk6IE5ldyBzZXJ2aWNlX2FjdGlvbiBtZXRob2QgZm9yIEJhc2VTZXJ2ZXIsIHVzZWQgYnkgRm9ya2luZ01peEluCisgIGNsYXNzIGZvciBjbGVhbnVwLiBJbml0aWFsIFBhdGNoIGJ5IEp1c3RpbiBXYXJrZW50aW4uCisKKy0gSXNzdWUgIzEyMDQ1OiBBdm9pZCBkdXBsaWNhdGUgZXhlY3V0aW9uIG9mIGNvbW1hbmQgaW4KKyAgY3R5cGVzLnV0aWwuX2dldF9zb25hbWUoKS4gIFBhdGNoIGJ5IFNpamluIEpvc2VwaC4KKworLSBJc3N1ZSAjMTA4MTg6IFJlbW92ZSB0aGUgVGsgR1VJIGFuZCB0aGUgc2VydmUoKSBmdW5jdGlvbiBvZiB0aGUgcHlkb2MgbW9kdWxlLAorICBweWRvYyAtZyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIgYW5kIGl0IGhhcyBhIG5ldyBlbmhhbmNlZCB3ZWIKKyAgc2VydmVyLgorCistIElzc3VlICMxNDQxNTMwOiBJbiBpbWFwbGliLCByZWFkIHRoZSBkYXRhIGluIG9uZSBjaHVuayB0byBzcGVlZCB1cCBsYXJnZQorICByZWFkcyBhbmQgc2ltcGxpZnkgY29kZS4KKworLSBJc3N1ZSAjMTIwNzA6IEZpeCB0aGUgTWFrZWZpbGUgcGFyc2VyIG9mIHRoZSBzeXNjb25maWcgbW9kdWxlIHRvIGhhbmRsZQorICBjb3JyZWN0bHkgcmVmZXJlbmNlcyB0byAiYm9ndXMgdmFyaWFibGUiIChlLmcuICJwcmVmaXg9JC9vcHQvcHl0aG9uIikuCisKKy0gSXNzdWUgIzEyMTAwOiBEb24ndCByZXNldCBpbmNyZW1lbnRhbCBlbmNvZGVycyBvZiBDSksgY29kZWNzIGF0IGVhY2ggY2FsbCB0bworICB0aGVpciBlbmNvZGUoKSBtZXRob2QgYW55bW9yZSwgYnV0IGNvbnRpbnVlIHRvIGNhbGwgdGhlIHJlc2V0KCkgbWV0aG9kIGlmIHRoZQorICBmaW5hbCBhcmd1bWVudCBpcyBUcnVlLgorCistIElzc3VlICMxMjA0OTogQWRkIFJBTkRfYnl0ZXMoKSBhbmQgUkFORF9wc2V1ZG9fYnl0ZXMoKSBmdW5jdGlvbnMgdG8gdGhlIHNzbAorICBtb2R1bGUuCisKKy0gSXNzdWUgIzY1MDE6IG9zLmRldmljZV9lbmNvZGluZygpIHJldHVybnMgTm9uZSBvbiBXaW5kb3dzIGlmIHRoZSBhcHBsaWNhdGlvbgorICBoYXMgbm8gY29uc29sZS4KKworLSBJc3N1ZSAjMTIxMDU6IEFkZCBPX0NMT0VYRUMgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTIwNzk6IERlY2ltYWwoJ0luZmluaXR5JykuZm1hKERlY2ltYWwoJzAnKSwgKDMuOTEyMjQzMTgxMjY3ODZlKzE5KzBqKSkKKyAgbm93IHJhaXNlcyBUeXBlRXJyb3IgKHJlZmxlY3RpbmcgdGhlIGludmFsaWQgdHlwZSBvZiB0aGUgM3JkIGFyZ3VtZW50KSByYXRoZXIKKyAgdGhhbiBEZWNpbWFsLkludmFsaWRPcGVyYXRpb24uCisKKy0gSXNzdWUgIzEyMTI0OiB6aXBpbXBvcnQgZG9lc24ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHpsaWIuZGVjb21wcmVzcygpIGFueW1vcmUKKyAgdG8gYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZS4KKworLSBBZGQgdGhlIHBhY2thZ2luZyBtb2R1bGUsIGFuIGltcHJvdmVkIGZvcmsgb2YgZGlzdHV0aWxzIChhbHNvIGtub3duIGFzCisgIGRpc3R1dGlsczIpLgorCistIElzc3VlICMxMjA2NTogY29ubmVjdF9leCgpIG9uIGFuIFNTTCBzb2NrZXQgbm93IHJldHVybnMgdGhlIG9yaWdpbmFsIGVycm5vCisgIHdoZW4gdGhlIHNvY2tldCdzIHRpbWVvdXQgZXhwaXJlcyAoaXQgdXNlZCB0byByZXR1cm4gTm9uZSkuCisKKy0gSXNzdWUgIzg4MDk6IFRoZSBTTVRQX1NTTCBjb25zdHJ1Y3RvciBhbmQgU01UUC5zdGFydHRscygpIG5vdyBzdXBwb3J0CisgIHBhc3NpbmcgYSBgYGNvbnRleHRgYCBhcmd1bWVudCBwb2ludGluZyB0byBhbiBzc2wuU1NMQ29udGV4dCBpbnN0YW5jZS4KKyAgUGF0Y2ggYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMTA4ODogZG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBGNSB0byBydW4gYSBzY3JpcHQgaW4gSURMRSBvbiBNYWNPU1gKKyAgd2l0aCBUayA4LjUuCisKKy0gSXNzdWUgIzk1MTY6IElzc3VlICM5NTE2OiBhdm9pZCBlcnJvcnMgaW4gc3lzY29uZmlnIHdoZW4gTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCisgIGlzIHNldCBpbiBzaGVsbC4KKworLSBJc3N1ZSAjODY1MDogTWFrZSB6bGliIG1vZHVsZSA2NC1iaXQgY2xlYW4uIGNvbXByZXNzKCksIGRlY29tcHJlc3MoKSBhbmQKKyAgdGhlaXIgaW5jcmVtZW50YWwgY291bnRlcnBhcnRzIG5vdyByYWlzZSBPdmVyZmxvd0Vycm9yIGlmIGdpdmVuIGFuIGlucHV0CisgIGxhcmdlciB0aGFuIDRHQiwgaW5zdGVhZCBvZiBzaWxlbnRseSB0cnVuY2F0aW5nIHRoZSBpbnB1dCBhbmQgcmV0dXJuaW5nCisgIGFuIGluY29ycmVjdCByZXN1bHQuCisKKy0gSXNzdWUgIzEyMDUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGNsZWFycyB0aGUgdW5jb25zdW1lZF90YWlsCisgIGF0dHJpYnV0ZSB3aGVuIGNhbGxlZCB3aXRob3V0IGEgbWF4X2xlbmd0aCBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTIwNjI6IEZpeCBhIGZsdXNoaW5nIGJ1ZyB3aGVuIGRvaW5nIGEgY2VydGFpbiB0eXBlIG9mIEkvTyBzZXF1ZW5jZQorICBvbiBhIGZpbGUgb3BlbmVkIGluIHJlYWQrd3JpdGUgbW9kZSAobmFtZWx5OiByZWFkaW5nLCBzZWVraW5nIGEgYml0IGZvcndhcmQsCisgIHdyaXRpbmcsIHRoZW4gc2Vla2luZyBiZWZvcmUgdGhlIHByZXZpb3VzIHdyaXRlIGJ1dCBzdGlsbCB3aXRoaW4gYnVmZmVyZWQKKyAgZGF0YSwgYW5kIHdyaXRpbmcgYWdhaW4pLgorCistIElzc3VlICM5OTcxOiBXcml0ZSBhbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyZWRSZWFkZXIucmVhZGludG8oKS4KKyAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjMTAyODogVGsgcmV0dXJucyBpbnZhbGlkIFVuaWNvZGUgbnVsbCBpbiAlQTogVW5pY29kZURlY29kZUVycm9yLgorICBXaXRoIFRrIDwgOC41IF90a2ludGVyLmM6UHl0aG9uQ21kKCkgcmFpc2VkIFVuaWNvZGVEZWNvZGVFcnJvciwgY2F1c2VkCisgIElETEUgdG8gZXhpdC4gIENvbnZlcnRlZCB0byB2YWxpZCBVbmljb2RlIG51bGwgaW4gUHl0aG9uQ21kKCkuCisKKy0gSXNzdWUgIzExNzk5OiB1cmxsaWIucmVxdWVzdCBBdXRoZW50aWNhdGlvbiBIYW5kbGVycyB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvcgorICB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIHVuc3VwcG9ydGVkIEF1dGhlbnRpY2F0aW9uIFNjaGVtZS4gUGF0Y2ggY29udHJpYnV0ZWQKKyAgYnkgWXV2YWwgR3JlZW5maWVsZC4KKworLSBJc3N1ZSAjMTA0MTksICM2MDExOiBidWlsZF9zY3JpcHRzIGNvbW1hbmQgb2YgZGlzdHV0aWxzIGhhbmRsZXMgY29ycmVjdGx5CisgIG5vbi1BU0NJSSBwYXRoIChwYXRoIHRvIHRoZSBQeXRob24gZXhlY3V0YWJsZSkuIE9wZW4gYW5kIHdyaXRlIHRoZSBzY3JpcHQgaW4KKyAgYmluYXJ5IG1vZGUsIGJ1dCBlbnN1cmUgdGhhdCB0aGUgc2hlYmFuZyBpcyBkZWNvZGFibGUgZnJvbSBVVEYtOCBhbmQgZnJvbSB0aGUKKyAgZW5jb2Rpbmcgb2YgdGhlIHNjcmlwdC4KKworLSBJc3N1ZSAjODQ5ODogSW4gc29ja2V0LmFjY2VwdCgpLCBhbGxvdyB0byBzcGVjaWZ5IDAgYXMgYSBiYWNrbG9nIHZhbHVlIGluCisgIG9yZGVyIHRvIGFjY2VwdCBleGFjdGx5IG9uZSBjb25uZWN0aW9uLiAgUGF0Y2ggYnkgRGFuaWVsIEV2ZXJzLgorCistIElzc3VlICMxMjAxMTogc2lnbmFsLnNpZ25hbCgpIGFuZCBzaWduYWwuc2lnaW50ZXJydXB0KCkgcmFpc2UgYW4gT1NFcnJvciwKKyAgaW5zdGVhZCBvZiBhIFJ1bnRpbWVFcnJvcjogT1NFcnJvciBoYXMgYW4gZXJybm8gYXR0cmlidXRlLgorCistIElzc3VlICMzNzA5OiBhZGQgYSBmbHVzaF9oZWFkZXJzIG1ldGhvZCB0byBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCB3aGljaAorICBtYW5hZ2VzIHRoZSBzZW5kaW5nIG9mIGhlYWRlcnMgdG8gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hpbmcgdGhlIGludGVybmFsCisgIGhlYWRlcnMgYnVmZmVyLiBQYXRjaCBjb250cmlidXRpb24gYnkgQW5kcmV3IFNjaGFhZgorCistIElzc3VlICMxMTc0MzogUmV3cml0ZSBtdWx0aXByb2Nlc3NpbmcgY29ubmVjdGlvbiBjbGFzc2VzIGluIHB1cmUgUHl0aG9uLgorCistIElzc3VlICMxMTE2NDogU3RvcCB0cnlpbmcgdG8gdXNlIF94bWxwbHVzIGluIHRoZSB4bWwgbW9kdWxlLgorCistIElzc3VlICMxMTg4ODogQWRkIGxvZzIgZnVuY3Rpb24gdG8gbWF0aCBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgTWFyaworICBEaWNraW5zb24uCisKKy0gSXNzdWUgIzEyMDEyOiBzc2wuUFJPVE9DT0xfU1NMdjIgYmVjb21lcyBvcHRpb25hbC4KKworLSBJc3N1ZSAjODQwNzogVGhlIHNpZ25hbCBoYW5kbGVyIHdyaXRlcyB0aGUgc2lnbmFsIG51bWJlciBhcyBhIHNpbmdsZSBieXRlCisgIGluc3RlYWQgb2YgYSBudWwgYnl0ZSBpbnRvIHRoZSB3YWtldXAgZmlsZSBkZXNjcmlwdG9yLiBTbyBpdCBpcyBwb3NzaWJsZSB0bworICB3YWl0IG1vcmUgdGhhbiBvbmUgc2lnbmFsIGFuZCBrbm93IHdoaWNoIHNpZ25hbHMgd2VyZSByYWlzZWQuCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBwdGhyZWFkX2tpbGwoKSwgc2lncGVuZGluZygpIGFuZCBzaWd3YWl0KCkgZnVuY3Rpb25zIHRvIHRoZQorICBzaWduYWwgbW9kdWxlLgorCistIElzc3VlICMxMTkyNzogU01UUF9TU0wgbm93IHVzZXMgcG9ydCA0NjUgYnkgZGVmYXVsdCBhcyBkb2N1bWVudGVkLiAgUGF0Y2gKKyAgYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMjAwMjogZnRwbGliJ3MgYWJvcnQoKSBtZXRob2QgcmFpc2VzIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTE5MTY6IEFkZCBhIG51bWJlciBvZiBNYWNPU1ggc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gdGhlIGVycm5vIG1vZHVsZS4KKyAgUGF0Y2ggYnkgUGllcnJlIENhcnJpZXIuCisKKy0gSXNzdWUgIzExOTk5OiBmaXhlZCBzcG9yYWRpYyBzeW5jIGZhaWx1cmUgbWFpbGJveC5NYWlsZGlyIGR1ZSB0byBpdHMgdHJ5aW5nIHRvCisgIGRldGVjdCBtdGltZSBjaGFuZ2VzIGJ5IGNvbXBhcmluZyB0byB0aGUgc3lzdGVtIGNsb2NrIGluc3RlYWQgb2YgdG8gdGhlCisgIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBtdGltZS4KKworLSBJc3N1ZSAjMTEwNzI6IGFkZGVkIE1MU0QgY29tbWFuZCAoUkZDLTM2NTkpIHN1cHBvcnQgdG8gZnRwbGliLgorCistIElzc3VlICM4ODA4OiBUaGUgSU1BUDRfU1NMIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgcGFzc2luZyBhbiBTU0xDb250ZXh0CisgIHBhcmFtZXRlciB0byBjb250cm9sIHBhcmFtZXRlcnMgb2YgdGhlIHNlY3VyZSBjaGFubmVsLiAgUGF0Y2ggYnkgU2lqaW4KKyAgSm9zZXBoLgorCistIG50cGF0aC5zYW1lZmlsZSBmYWlsZWQgdG8gbm90aWNlIHRoYXQgImEudHh0IiBhbmQgIkEuVFhUIiByZWZlciB0byB0aGUgc2FtZQorICBmaWxlIG9uIFdpbmRvd3MgWFAuIEFzIG5vdGljZWQgaW4gaXNzdWUgIzEwNjg0LgorCistIElzc3VlICMxMjAwMDogV2hlbiBhIFNTTCBjZXJ0aWZpY2F0ZSBoYXMgYSBzdWJqZWN0QWx0TmFtZSB3aXRob3V0IGFueQorICBkTlNOYW1lIGVudHJ5LCBzc2wubWF0Y2hfaG9zdG5hbWUoKSBzaG91bGQgdXNlIHRoZSBzdWJqZWN0J3MgY29tbW9uTmFtZS4KKyAgUGF0Y2ggYnkgTmljb2xhcyBCYXJlaWwuCisKKy0gSXNzdWUgIzEwNzc1OiBhc3NlcnRSYWlzZXMsIGFzc2VydFJhaXNlc1JlZ2V4LCBhc3NlcnRXYXJucywgYW5kCisgIGFzc2VydFdhcm5zUmVnZXggbm93IGFjY2VwdCBhIGtleXdvcmQgYXJndW1lbnQgJ21zZycgd2hlbiB1c2VkIGFzIGNvbnRleHQKKyAgbWFuYWdlcnMuICBJbml0aWFsIHBhdGNoIGJ5IFdpbnN0b24gRXdlcnQuCisKKy0gSXNzdWUgIzEwNjg0OiBzaHV0aWwubW92ZSB1c2VkIHRvIGRlbGV0ZSBhIGZvbGRlciBvbiBjYXNlIGluc2Vuc2l0aXZlCisgIGZpbGVzeXN0ZW1zIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZSB3aGVyZSB0aGUgc2FtZSBleGNlcHQKKyAgZm9yIHRoZSBjYXNlLgorCistIElzc3VlICMxMTY0Nzogb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIgbm93IHN1cHBvcnQKKyAgbW9yZSB0aGFuIG9uZSBjYWxsIHRvIHRoZSBmdW5jdGlvbiB3aGVuIHVzZWQgYXMgYSBkZWNvcmF0b3IuIEluaXRpYWwgcGF0Y2gKKyAgYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTE5MzA6IFJlbW92ZWQgZGVwcmVjYXRlZCB0aW1lLmFjY2VwdDJkeWVhciB2YXJpYWJsZS4KKyAgUmVtb3ZlZCB5ZWFyID49IDEwMDAgcmVzdHJpY3Rpb24gZnJvbSBkYXRldGltZS5zdHJmdGltZS4KKworLSBsb2dnaW5nOiBkb24ndCBkZWZpbmUgUXVldWVMaXN0ZW5lciBpZiBQeXRob24gaGFzIG5vIHRocmVhZCBzdXBwb3J0LgorCistIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgbm93IHdvcmtzIHdpdGggY29sbGVjdGlvbnMuSGFzaGFibGUoKS4KKworLSBJc3N1ZSAjMTEyNzc6IG1tYXAubW1hcCgpIGNhbGxzIGZjbnRsKGZkLCBGX0ZVTExGU1lOQykgb24gTWFjIE9TIFggdG8gZ2V0CisgIGFyb3VuZCBhIG1tYXAgYnVnIHdpdGggc3BhcnNlIGZpbGVzLiBQYXRjaCB3cml0dGVuIGJ5IFN0ZWZmZW4gRGFvZGUgTnVycG1lc28uCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBzaWduYWwucHRocmVhZF9zaWdtYXNrKCkgZnVuY3Rpb24gdG8gZmV0Y2ggYW5kL29yIGNoYW5nZSB0aGUKKyAgc2lnbmFsIG1hc2sgb2YgdGhlIGNhbGxpbmcgdGhyZWFkLgorCistIElzc3VlICMxMTg1ODogY29uZmlncGFyc2VyLkV4dGVuZGVkSW50ZXJwb2xhdGlvbiBleHBlY3RlZCBsb3dlci1jYXNlIHNlY3Rpb24KKyAgbmFtZXMuCisKKy0gSXNzdWUgIzExMzI0OiBDb25maWdQYXJzZXIoaW50ZXJwb2xhdGlvbj1Ob25lKSBub3cgd29ya3MgY29ycmVjdGx5LgorCistIElzc3VlICMxMTgxMTogc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKSBpcyBub3cgSVB2Ni1jb21wYXRpYmxlLiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTc2MzogZG9uJ3QgdXNlIGRpZmZsaWIgaW4gVGVzdENhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWwgaWYgdGhlCisgIHN0cmluZ3MgYXJlIHRvbyBsb25nLgorCistIElzc3VlICMxMTIzNjogZ2V0cGFzcy5nZXRwYXNzIHJlc3BvbmRzIHRvIGN0cmwtYyBvciBjdHJsLXogb24gdGVybWluYWwuCisKKy0gSXNzdWUgIzExODU2OiBTcGVlZCB1cCBwYXJzaW5nIG9mIEpTT04gbnVtYmVycy4KKworLSBJc3N1ZSAjMTEwMDU6IHRocmVhZGluZy5STG9jaygpLl9yZWxlYXNlX3NhdmUoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIGxvY2sgd2FzIG5vdCBhY3F1aXJlZC4KKworLSBJc3N1ZSAjMTEyNTg6IFNwZWVkIHVwIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIHVuZGVyIExpbnV4IGJ5IGEgZmFjdG9yCisgIG9mIDUgdG8gMTAuICBJbml0aWFsIHBhdGNoIGJ5IEpvbmFzIEguCisKKy0gSXNzdWUgIzExMzgyOiBUcml2aWFsIHN5c3RlbSBjYWxscywgc3VjaCBhcyBkdXAoKSBvciBwaXBlKCksIG5lZWRuJ3QKKyAgcmVsZWFzZSB0aGUgR0lMLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTIyMzogQWRkIHRocmVhZGluZy5faW5mbygpIGZ1bmN0aW9uIHByb3ZpZGluZyBpbmZvcm1hdGlvbnMgYWJvdXQKKyAgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTE3MzE6IHNpbXBsaWZ5L2VuaGFuY2UgZW1haWwgcGFyc2VyL2dlbmVyYXRvciBBUEkgYnkgaW50cm9kdWNpbmcKKyAgcG9saWN5IG9iamVjdHMuCisKKy0gSXNzdWUgIzExNzY4OiBUaGUgc2lnbmFsIGhhbmRsZXIgb2YgdGhlIHNpZ25hbCBtb2R1bGUgb25seSBjYWxscworICBQeV9BZGRQZW5kaW5nQ2FsbCgpIGZvciB0aGUgZmlyc3Qgc2lnbmFsIHRvIGZpeCBhIGRlYWRsb2NrIG9uIHJlZW50cmFudCBvcgorICBwYXJhbGxlbCBjYWxscy4gUHlFcnJfU2V0SW50ZXJydXB0KCkgd3JpdGVzIGFsc28gaW50byB0aGUgd2FrZSB1cCBmaWxlLgorCistIElzc3VlICMxMTQ5MjogZml4IHNldmVyYWwgaXNzdWVzIHdpdGggaGVhZGVyIGZvbGRpbmcgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCisKKy0gSXNzdWUgIzExODUyOiBBZGQgbWlzc2luZyBpbXBvcnRzIGFuZCB1cGRhdGUgdGVzdHMuCisKKy0gSXNzdWUgIzExODc1OiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCdzIF9fcmVkdWNlX18gd2FzIHRlbXBvcmFyaWx5CisgIG11dGF0aW5nIHRoZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IHdvcmtpbmcgb24gYSBjb3B5LgorCistIElzc3VlICMxMTQ2NzogRml4IHVybHBhcnNlIGJlaGF2aW9yIHdoZW4gaGFuZGxpbmcgdXJscyB3aGljaCBjb250YWlucyBzY2hlbWUKKyAgc3BlY2lmaWMgcGFydCBvbmx5IGRpZ2l0cy4gUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gY29sbGVjdGlvbnMuQ291bnRlcigpLmNvcHkoKSBub3cgd29ya3MgY29ycmVjdGx5IGZvciBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMTQ3NDogRml4IHRoZSBidWcgd2l0aCB1cmwycGF0aG5hbWUoKSBoYW5kbGluZyBvZiAnL0N8Lycgb24gV2luZG93cy4KKyAgUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gSXNzdWUgIzExNjg0OiBjb21wbGV0ZSBlbWFpbC5wYXJzZXIgYnl0ZXMgQVBJIGJ5IGFkZGluZyBCeXRlc0hlYWRlclBhcnNlci4KKworLSBUaGUgYnoyIG1vZHVsZSBub3cgaGFuZGxlcyA0R2lCKyBpbnB1dCBidWZmZXJzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjOTIzMzogRml4IGpzb24ubG9hZHMoJ3t9JykgdG8gcmV0dXJuIGEgZGljdCAoaW5zdGVhZCBvZiBhIGxpc3QpLCB3aGVuCisgIF9qc29uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzExODMwOiBSZW1vdmUgdW5uZWNlc3NhcnkgaW50cm9zcGVjdGlvbiBjb2RlIGluIHRoZSBkZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE3MDM6IHVybGxpYjIuZ2V0dXJsKCkgZG9lcyBub3QgcmV0dXJuIGNvcnJlY3QgdXJsIHdoZW4gdGhlIG9yaWdpbmFsCisgIHVybCBjb250YWlucyAjZnJhZ21lbnQuCisKKy0gSXNzdWUgIzEwMDE5OiBGaXhlZCByZWdyZXNzaW9uIGluIGpzb24gbW9kdWxlIHdoZXJlIGFuIGluZGVudCBvZiAwIHN0b3BwZWQKKyAgYWRkaW5nIG5ld2xpbmVzIGFuZCBhY3RlZCBpbnN0ZWFkIGxpa2UgJ05vbmUnLgorCistIElzc3VlICMxMTE4NjogcHlkb2MgaWdub3JlcyBhIG1vZHVsZSBpZiBpdHMgbmFtZSBjb250YWlucyBhIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXIgaW4gdGhlIGluZGV4IG9mIG1vZHVsZXMuCisKKy0gSXNzdWUgIzExODE1OiBVc2UgYSBsaWdodC13ZWlnaHQgU2ltcGxlUXVldWUgZm9yIHRoZSByZXN1bHQgcXVldWUgaW4KKyAgY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzUxNjI6IFRyZWF0IHNlcnZpY2VzIGxpa2UgZnJvemVuIGV4ZWN1dGFibGVzIHRvIGFsbG93IGNoaWxkIHNwYXduaW5nCisgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgb24gV2luZG93cy4KKworLSBsb2dnaW5nLmJhc2ljQ29uZmlnIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAnaGFuZGxlcnMnIGFyZ3VtZW50IHRha2luZyBhbgorICBpdGVyYWJsZSBvZiBoYW5kbGVycyB0byBiZSBhZGRlZCB0byB0aGUgcm9vdCBsb2dnZXIuIEFkZGl0aW9uYWwgcGFyYW1ldGVyCisgIGNoZWNrcyB3ZXJlIGFsc28gYWRkZWQgdG8gYmFzaWNDb25maWcuCisKKy0gSXNzdWUgIzExODE0OiBGaXggbGlrZWx5IHR5cG8gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wuX3Rlcm1pbmF0ZSgpLgorCistIElzc3VlICMxMTc0NzogRml4IHJhbmdlIGZvcm1hdHRpbmcgaW4gZGlmZmxpYi5jb250ZXh0X2RpZmYoKSBhbmQKKyAgZGlmZmxpYi51bmlmaWVkX2RpZmYoKS4KKworLSBJc3N1ZSAjODQyODogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wgd2hlbiB0ZXJtaW5hdGluZworICB3b3JrZXIgcHJvY2Vzc2VzOiBuZXcgcHJvY2Vzc2VzIHdvdWxkIGJlIHNwYXduZWQgd2hpbGUgdGhlIHBvb2wgaXMgYmVpbmcKKyAgc2h1dCBkb3duLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMyNjUwOiByZS5lc2NhcGUoKSBubyBsb25nZXIgZXNjYXBlcyB0aGUgJ18nLgorCistIElzc3VlICMxMTc1Nzogc2VsZWN0LnNlbGVjdCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIGEgbmVnYXRpdmUgdGltZW91dAorICBpcyBwYXNzZWQgKHByZXZpb3VzbHksIGEgc2VsZWN0LmVycm9yIHdpdGggRUlOVkFMIHdvdWxkIGJlIHJhaXNlZCkuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzczMTE6IGZpeCBodG1sLnBhcnNlciB0byBhY2NlcHQgbm9uLUFTQ0lJIGF0dHJpYnV0ZSB2YWx1ZXMuCisKKy0gSXNzdWUgIzExNjA1OiBlbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VyIHdhcyBpbmNvcnJlY3RseSBjb252ZXJ0aW5nCisgIG11bHRpcGFydCBzdWJwYXJ0cyB3aXRoIGFuIDgtYml0IENURSBpbnRvIHVuaWNvZGUgaW5zdGVhZCBvZiBwcmVzZXJ2aW5nIHRoZQorICBieXRlcy4KKworLSBJc3N1ZSAjMTY5MDYwODogZW1haWwudXRpbC5mb3JtYXRhZGRyIGlzIG5vdyBSRkMgMjA0NyBhd2FyZTogIGl0IG5vdyBoYXMgYQorICBjaGFyc2V0IHBhcmFtZXRlciB0aGF0IGRlZmF1bHRzIHRvIHV0Zi04IGFuZCBpcyB1c2VkIGFzIHRoZSBjaGFyc2V0IGZvciBSRkMKKyAgMjA0NyBlbmNvZGluZyB3aGVuIHRoZSByZWFsbmFtZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTA5NjM6IEVuc3VyZSB0aGF0IHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSBuZXZlciByYWlzZXMgRVBJUEUuCisKKy0gSXNzdWUgIzEwNzkxOiBJbXBsZW1lbnQgbWlzc2luZyBtZXRob2QgR3ppcEZpbGUucmVhZDEoKSwgYWxsb3dpbmcgR3ppcEZpbGUKKyAgdG8gYmUgd3JhcHBlZCBpbiBhIFRleHRJT1dyYXBwZXIuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNzA3OiBBZGRlZCBhIGZhc3QgQyB2ZXJzaW9uIG9mIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkuCisgIFBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzExNjg4OiBBZGQgc3FsaXRlMy5Db25uZWN0aW9uLnNldF90cmFjZV9jYWxsYmFjaygpLiAgUGF0Y2ggYnkKKyAgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMTc0NjogRml4IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkgdG8gYWNjZXB0IGVsbGlwdGljIGN1cnZlCisgIHByaXZhdGUga2V5cy4KKworLSBJc3N1ZSAjNTg2MzogUmV3cml0ZSBCWjJGaWxlIGluIHB1cmUgUHl0aG9uLCBhbmQgYWxsb3cgaXQgdG8gYWNjZXB0CisgIGZpbGUtbGlrZSBvYmplY3RzIHVzaW5nIGEgbmV3IGBgZmlsZW9iamBgIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiAgUGF0Y2ggYnkKKyAgTmFkZWVtIFZhd2RhLgorCistIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNhbWVFbGVtZW50cyBoYXMgYmVlbiByZW1vdmVkLgorCistIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgaW5pdGZzZW5jb2RpbmcoKSB3YXMgbm90CisgIGNhbGxlZCB5ZXQ6IGRldGVjdCBib290c3RyYXAgKHN0YXJ0dXApIGlzc3VlcyBlYXJsaWVyLgorCistIElzc3VlICMxMTM5MzogQWRkIHRoZSBuZXcgZmF1bHRoYW5kbGVyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE2MTg6IEZpeCB0aGUgdGltZW91dCBsb2dpYyBpbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCkgdW5kZXIgV2luZG93cy4KKworLSBSZW1vdmVkIHRoZSAnc3RyaWN0JyBhcmd1bWVudCB0byBlbWFpbC5wYXJzZXIuUGFyc2VyLCB3aGljaCBoYXMgYmVlbgorICBkZXByZWNhdGVkIHNpbmNlIFB5dGhvbiAyLjQuCisKKy0gSXNzdWUgIzExMjU2OiBGaXggaW5zcGVjdC5nZXRjYWxsYXJncyBvbiBmdW5jdGlvbnMgdGhhdCB0YWtlIG9ubHkga2V5d29yZAorICBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzExNjk2OiBGaXggSUQgZ2VuZXJhdGlvbiBpbiBtc2lsaWIuCisKKy0gaXRlcnRvb2xzLmFjY3VtdWxhdGUgbm93IHN1cHBvcnRzIGFuIG9wdGlvbmFsICpmdW5jKiBhcmd1bWVudCBmb3IKKyAgYSB1c2VyLXN1cHBsaWVkIGJpbmFyeSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTE2OTI6IFJlbW92ZSB1bm5lY2Vzc2FyeSBkZW1vIGZ1bmN0aW9ucyBpbiBzdWJwcm9jZXNzIG1vZHVsZS4KKworLSBJc3N1ZSAjOTY5NjogRml4IGV4Y2VwdGlvbiBpbmNvcnJlY3RseSByYWlzZWQgYnkgeGRybGliLlBhY2tlci5wYWNrX2ludCB3aGVuCisgIHRyeWluZyB0byBwYWNrIGEgbmVnYXRpdmUgKGluLXJhbmdlKSBpbnRlZ2VyLgorCistIElzc3VlICMxMTY3NTogbXVsdGlwcm9jZXNzaW5nLltSYXddQXJyYXkgb2JqZWN0cyBjcmVhdGVkIGZyb20gYW4gaW50ZWdlciBzaXplCisgIGFyZSBub3cgemVyb2VkIG9uIGNyZWF0aW9uLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvdXIgc3BlY2lmaWVkIGJ5IHRoZQorICBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM3NjM5OiBGaXggc2hvcnQgZmlsZSBuYW1lIGdlbmVyYXRpb24gaW4gYmRpc3RfbXNpCisKKy0gSXNzdWUgIzExNjU5OiBGaXggUmVzb3VyY2VXYXJuaW5nIGluIHRlc3Rfc3VicHJvY2VzcyBpbnRyb2R1Y2VkIGJ5ICMxMTQ1OS4KKyAgUGF0Y2ggYnkgQmVuIEhheWRlbi4KKworLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKKyAgY29uY3VycmVudC5mdXR1cmVzLgorCistIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKKyAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCisgIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KKworLSBJc3N1ZSAjODc1NDogSGF2ZSBpbXBvcnRsaWIgdXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzExNTkxOiBQcmV2ZW50ICJpbXBvcnQgc2l0ZSIgZnJvbSBtb2RpZnlpbmcgc3lzLnBhdGggd2hlbiBweXRob24KKyAgd2FzIHN0YXJ0ZWQgd2l0aCAtUy4KKworLSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgbm93IGFkZHMgYSBfc291cmNlIGF0dHJpYnV0ZSB0byB0aGUgZ2VuZXJhdGVkCisgIGNsYXNzLiAgVGhpcyBtYWtlIHRoZSBzb3VyY2UgbW9yZSBhY2Nlc3NpYmxlIHRoYW4gdGhlIG91dGRhdGVkCisgICJ2ZXJib3NlIiBvcHRpb24gd2hpY2ggcHJpbnRzIHRvIHN0ZG91dCBidXQgZG9lc24ndCBtYWtlIHRoZSBzb3VyY2UKKyAgc3RyaW5nIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTEzNzE6IE1hcmsgZ2V0b3B0IGVycm9yIG1lc3NhZ2VzIGFzIGxvY2FsaXphYmxlLiAgUGF0Y2ggYnkgRmlsaXAKKyAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTEzMzM6IEFkZCBfX3Nsb3RzX18gdG8gY29sbGVjdGlvbnMgQUJDcy4KKworLSBJc3N1ZSAjMTE2Mjg6IGNtcF90b19rZXkgZ2VuZXJhdGVkIGNsYXNzIHNob3VsZCB1c2UgX19zbG90c19fLgorCistIElzc3VlICMxMTY2NjogbGV0IGhlbHAoKSBkaXNwbGF5IG5hbWVkIHR1cGxlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMKKyAgdGhhdCBzdGFydCB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLgorCistIElzc3VlICMxMTY2MjogTWFrZSB1cmxsaWIgYW5kIHVybGxpYjIgaWdub3JlIHJlZGlyZWN0aW9ucyBpZiB0aGUKKyAgc2NoZW1lIGlzIG5vdCBIVFRQLCBIVFRQUyBvciBGVFAgKENWRS0yMDExLTE1MjEpLgorCistIElzc3VlICM1NTM3OiBGaXggdGltZTJpc296KCkgYW5kIHRpbWUybmV0c2NhcGUoKSBmdW5jdGlvbnMgb2YKKyAgaHR0cGxpYi5jb29raWVqYXIgZm9yIGV4cGlyYXRpb24geWVhciBncmVhdGVyIHRoYW4gMjAzOCBvbiAzMi1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjNDM5MTogVXNlIHByb3BlciBnZXR0ZXh0IHBsdXJhbCBmb3JtcyBpbiBvcHRwYXJzZS4KKworLSBJc3N1ZSAjMTExMjc6IFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBhIHNvY2tldCBvYmplY3QuCisKKy0gSXNzdWUgIzExNTYzOiBDb25uZWN0aW9uOmNsb3NlIGhlYWRlciBpcyBzZW50IGJ5IHJlcXVlc3RzIHVzaW5nIFVSTE9wZW5lcgorICBjbGFzcyB3aGljaCBoZWxwcyBpbiBjbG9zaW5nIG9mIHNvY2tldHMgYWZ0ZXIgY29ubmVjdGlvbiBpcyBvdmVyLiBQYXRjaAorICBjb250cmlidXRpb25zIGJ5IEplZmYgTWNOZWlsIGFuZCBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNDU5OiBBIGBgYnVmc2l6ZWBgIHZhbHVlIG9mIDAgaW4gc3VicHJvY2Vzcy5Qb3BlbigpIHJlYWxseSBjcmVhdGVzCisgIHVuYnVmZmVyZWQgcGlwZXMsIHN1Y2ggdGhhdCBzZWxlY3QoKSB3b3JrcyBwcm9wZXJseSBvbiB0aGVtLgorCistIElzc3VlICM1NDIxOiBGaXggbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHdoZW4gb25lIG9mIHNvY2tldC5zZW5kdG8oKSdzCisgIGFyZ3VtZW50cyBoYXMgdGhlIHdyb25nIHR5cGUuICBQYXRjaCBieSBOaWtpdGEgVmV0b3Noa2luLgorCistIElzc3VlICMxMDgxMjogQWRkIHNvbWUgZXh0cmEgcG9zaXggZnVuY3Rpb25zIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzEwOTc5OiB1bml0dGVzdCBzdGRvdXQgYnVmZmVyaW5nIG5vdyB3b3JrcyB3aXRoIGNsYXNzIGFuZCBtb2R1bGUKKyAgc2V0dXAgYW5kIHRlYXJkb3duLgorCistIElzc3VlICMxMTU3NzogZml4IFJlc291cmNlV2FybmluZyB0cmlnZ2VyZWQgYnkgaW1wcm92ZWQgYmluaGV4IHRlc3QgY292ZXJhZ2UKKworLSBJc3N1ZSAjMTEyNDM6IGZpeCB0aGUgcGFyYW1ldGVyIHF1ZXJ5aW5nIG1ldGhvZHMgb2YgTWVzc2FnZSB0byB3b3JrIGlmCisgIHRoZSBoZWFkZXJzIGNvbnRhaW4gdW4tZW5jb2RlZCBub24tQVNDSUkgZGF0YS4KKworLSBJc3N1ZSAjMTE0MDE6IGZpeCBoYW5kbGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWU7IHRoaXMgZml4ZXMgYSByZWdyZXNzaW9uCisgIHJlbGF0aXZlIHRvIFB5dGhvbjIgYW5kIHRoZSByZXN1bHQgaXMgbm93IHRoZSBzYW1lIGFzIGl0IHdhcyBpbiBQeXRob24yLgorCistIElzc3VlICM5Mjk4OiBiYXNlNjQgYm9kaWVzIHdlcmVuJ3QgYmVpbmcgZm9sZGVkIHRvIGxpbmUgbGVuZ3RocyBsZXNzIHRoYW4gNzgsCisgIHdoaWNoIHdhcyBhIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMi4gIFVubGlrZSBQeXRob24yLCB0aGUgbGFzdCBsaW5lCisgIG9mIHRoZSBmb2xkZWQgYm9keSBub3cgZW5kcyB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLgorCistIElzc3VlICMxMTU2MDogc2h1dGlsLnVucGFja19hcmNoaXZlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZm9ybWF0CisgIHBhcmFtZXRlci4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICM1ODcwOiBBZGQgYHN1YnByb2Nlc3MuREVWTlVMTGAgY29uc3RhbnQuCisKKy0gSXNzdWUgIzExMTMzOiBmaXggdHdvIGNhc2VzIHdoZXJlIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgY2FuIHRyaWdnZXIgY29kZQorICBleGVjdXRpb24uIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTE1Njk6IHVzZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBzeXNjdGwgY29tbWFuZCBpbiBtdWx0aXByb2Nlc3NpbmcgdG8KKyAgZW5zdXJlIHRoYXQgaXQgd2lsbCBiZSBmb3VuZCByZWdhcmRsZXNzIG9mIHRoZSBzaGVsbCBQQVRILiBUaGlzIGVuc3VyZXMKKyAgdGhhdCBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50IHdvcmtzIG9uIGRlZmF1bHQgaW5zdGFsbHMgb2YgTWFjT1NYLgorCistIElzc3VlICMxMTUwMTogZGlzdXRpbHMuYXJjaGl2ZV91dGlscy5tYWtlX3ppcGZpbGUgbm8gbG9uZ2VyIGZhaWxzIGlmIHpsaWIgaXMKKyAgbm90IGluc3RhbGxlZC4gSW5zdGVhZCwgdGhlIHppcGZpbGUuWklQX1NUT1JFRCBjb21wcmVzc2lvbiBpcyB1c2VkIHRvIGNyZWF0ZQorICB0aGUgWmlwRmlsZS4gUGF0Y2ggYnkgTmF0YWxpYSBCLiBCaWRhcnQuCisKKy0gSXNzdWUgIzExMjg5OiBgc210cC5TTVRQYCBjbGFzcyBpcyBub3cgYSBjb250ZXh0IG1hbmFnZXIgc28gaXQgY2FuIGJlIHVzZWQKKyAgaW4gYSBgd2l0aGAgc3RhdGVtZW50LiAgQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYS4KKworLSBJc3N1ZSAjMTE1NTQ6IEZpeGVkIHN1cHBvcnQgZm9yIEphcGFuZXNlIGNvZGVjczsgcHJldmlvdXNseSB0aGUgYm9keSBvdXRwdXQKKyAgZW5jb2Rpbmcgd2FzIG5vdCBkb25lIGlmIGV1Yy1qcCBvciBzaGlmdC1qaXMgd2FzIHNwZWNpZmllZCBhcyB0aGUgY2hhcnNldC4KKworLSBJc3N1ZSAjMTE1MDk6IFNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBmaWxlaW5wdXQuCisgIFBhdGNoIGJ5IERlbnZlciBDb25leWJlYXJlIGF0IFB5Q29uIDIwMTEgU3ByaW50cy4KKworLSBJc3N1ZSAjMTE0MDc6IGBUZXN0Q2FzZS5ydW5gIHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3QgdXNlZCBvciBjcmVhdGVkLgorICBDb250cmlidXRlZCBieSBKYW5hdGhhbiBIYXJ0bGV5LgorCistIElzc3VlICMxMTUwMDogRml4ZWQgYSBidWcgaW4gdGhlIE9TIFggcHJveHkgYnlwYXNzIGNvZGUgZm9yIGZ1bGx5IHF1YWxpZmllZAorICBJUCBhZGRyZXNzZXMgaW4gdGhlIHByb3h5IGV4Y2VwdGlvbiBsaXN0LgorCistIElzc3VlICMxMTQ5MTogZGJtLmVycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgd2hlbiBkYm0ub3BlbiBpcyBjYWxsZWQgd2l0aAorICB0aGUgIm4iIGFzIHRoZSBmbGFnIGFyZ3VtZW50IGFuZCB0aGUgZmlsZSBleGlzdHMuIFRoZSBiZWhhdmlvciBtYXRjaGVzCisgIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBnZW5lcmFsIGxvZ2ljLgorCistIElzc3VlICMxMTYyNDc3OiBQb3N0ZWwgUHJpbmNpcGxlIGFkanVzdG1lbnQgdG8gZW1haWwgZGF0ZSBwYXJzaW5nOiBoYW5kbGUgdGhlCisgIGZhY3QgdGhhdCBzb21lIG5vbi1jb21wbGlhbnQgTVVBcyB1c2UgJy4nIGluc3RlYWQgb2YgJzonIGluIHRpbWUgc3BlY3MuCisKKy0gSXNzdWUgIzExMTMxOiBGaXggc2lnbiBvZiB6ZXJvIGluIGRlY2ltYWwuRGVjaW1hbCBwbHVzIGFuZCBtaW51cworICBvcGVyYXRpb25zIHdoZW4gdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk9VTkRfRkxPT1IuCisKKy0gSXNzdWUgIzk5MzU6IFNwZWVkIHVwIHBpY2tsaW5nIG9mIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3Nlcy4KKworLSBJc3N1ZSAjNTYyMjogRml4IGN1cnNlcy53cmFwcGVyIHRvIHJhaXNlIGNvcnJlY3QgZXhjZXB0aW9uIGlmIGN1cnNlcworICBpbml0aWFsaXphdGlvbiBmYWlscy4KKworLSBJc3N1ZSAjMTE0MDg6IEluIHRocmVhZGluZy5Mb2NrLmFjcXVpcmUoKSwgb25seSBjYWxsIGdldHRpbWVvZmRheSgpIHdoZW4KKyAgcmVhbGx5IG5lY2Vzc2FyeS4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTEzOTE6IFdyaXRpbmcgdG8gYSBtbWFwIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAgYGBtbWFwLlBST1RfUkVBRHxtbWFwLlBST1RfRVhFQ2BgIHdvdWxkIHNlZ2ZhdWx0IGluc3RlYWQgb2YgcmFpc2luZyBhCisgIFR5cGVFcnJvci4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTc5NTogYWRkIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCBzdXBwb3J0IGZvciBubnRwbGliLk5OVFAgY2xhc3MuCisKKy0gSXNzdWUgIzExMzA2OiBtYWlsYm94IGluIGNlcnRhaW4gY2FzZXMgYWRhcHRzIHRvIGFuIGluYWJpbGl0eSB0byBvcGVuCisgIGNlcnRhaW4gZmlsZXMgaW4gcmVhZC13cml0ZSBtb2RlLiAgUHJldmlvdXNseSBpdCBkZXRlY3RlZCB0aGlzIGJ5CisgIGNoZWNraW5nIGZvciBFQUNDRVMsIG5vdyBpdCBhbHNvIGNoZWNrcyBmb3IgRVJPRlMuCisKKy0gSXNzdWUgIzExMjY1OiBhc3luY29yZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgRVBJUEUsIEVCQURGIGFuZCBFQUdBSU4gZXJyb3JzCisgIG9uIGFjY2VwdCgpLCBzZW5kKCkgYW5kIHJlY3YoKS4KKworLSBJc3N1ZSAjMTEzNzc6IERlcHJlY2F0ZSBwbGF0Zm9ybS5wb3BlbigpIGFuZCByZWltcGxlbWVudCBpdCB3aXRoIG9zLnBvcGVuKCkuCisKKy0gSXNzdWUgIzg1MTM6IE9uIFVOSVgsIHN1YnByb2Nlc3Mgc3VwcG9ydHMgYnl0ZXMgY29tbWFuZCBzdHJpbmcuCisKKy0gSXNzdWUgIzEwODY2OiBBZGQgc29ja2V0LnNldGhvc3RuYW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxMTE0MDogTG9jay5yZWxlYXNlKCkgbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvciB3aGVuIGF0dGVtcHRpbmcKKyAgdG8gcmVsZWFzZSBhbiB1bmFjcXVpcmVkIGxvY2ssIGFzIGNsYWltZWQgaW4gdGhlIHRocmVhZGluZyBkb2N1bWVudGF0aW9uLgorICBUaGUgX3RocmVhZC5lcnJvciBleGNlcHRpb24gaXMgbm93IGFuIGFsaWFzIG9mIFJ1bnRpbWVFcnJvci4gIFBhdGNoIGJ5CisgIEZpbGlwIEdydXN6Y3p5xYRza2kuICBQYXRjaCBmb3IgX2R1bW15X3RocmVhZCBieSBBeW1lcmljIEF1Z3VzdGluLgorCistIElzc3VlICM4NTk0OiBmdHBsaWIgbm93IHByb3ZpZGVzIGEgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIHRvIHNwZWNpZnkgd2hpY2gKKyAgKGFkZHJlc3MsIHBvcnQpIHRvIGJpbmQgdG8gYmVmb3JlIGNvbm5lY3RpbmcuCisKKy0gSXNzdWUgIzExMzI2OiBBZGQgdGhlIG1pc3NpbmcgY29ubmVjdF9leCgpIGltcGxlbWVudGF0aW9uIGZvciBTU0wgc29ja2V0cywKKyAgYW5kIG1ha2UgaXQgd29yayBmb3Igbm9uLWJsb2NraW5nIGNvbm5lY3RzLgorCistIElzc3VlICMxMTI5NzogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwKCkuCisKKy0gSXNzdWUgIzEwNzU1OiBBZGQgdGhlIHBvc2l4LmZsaXN0ZGlyKCkgZnVuY3Rpb24uICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNDc2MTogQWRkIHRoZSBgYCphdCgpYGAgZmFtaWx5IG9mIGZ1bmN0aW9ucyAob3BlbmF0KCksIGV0Yy4pIHRvIHRoZQorICBwb3NpeCBtb2R1bGUuICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNzMyMjogVHJ5aW5nIHRvIHJlYWQgZnJvbSBhIHNvY2tldCdzIGZpbGUtbGlrZSBvYmplY3QgYWZ0ZXIgYSB0aW1lb3V0CisgIG9jY3VycmVkIG5vdyByYWlzZXMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBsb3NpbmcgZGF0YS4KKworLSBJc3N1ZSAjMTEyOTE6IHBvcGxpYi5QT1Agbm8gbG9uZ2VyIHN1cHByZXNzZXMgZXJyb3JzIG9uIHF1aXQoKS4KKworLSBJc3N1ZSAjMTExNzc6IGFzeW5jb3JlJ3MgY3JlYXRlX3NvY2tldCgpIGFyZ3VtZW50cyBjYW4gbm93IGJlIG9taXR0ZWQuCisKKy0gSXNzdWUgIzYwNjQ6IEFkZCBhIGBgZGFlbW9uYGAga2V5d29yZCBhcmd1bWVudCB0byB0aGUgdGhyZWFkaW5nLlRocmVhZAorICBhbmQgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MgY29uc3RydWN0b3JzIGluIG9yZGVyIHRvIG92ZXJyaWRlIHRoZQorICBkZWZhdWx0IGJlaGF2aW91ciBvZiBpbmhlcml0aW5nIHRoZSBkYWVtb25pYyBwcm9wZXJ0eSBmcm9tIHRoZSBjdXJyZW50CisgIHRocmVhZC9wcm9jZXNzLgorCistIElzc3VlICMxMDk1NjogQnVmZmVyZWQgSS9PIGNsYXNzZXMgcmV0cnkgcmVhZGluZyBvciB3cml0aW5nIGFmdGVyIGEgc2lnbmFsCisgIGhhcyBhcnJpdmVkIGFuZCB0aGUgaGFuZGxlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCisKKy0gSXNzdWUgIzEwNzg0OiBOZXcgb3MuZ2V0cHJpb3JpdHkoKSBhbmQgb3Muc2V0cHJpb3JpdHkoKSBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzExMTE0OiBGaXggY2F0YXN0cm9waGljIHBlcmZvcm1hbmNlIG9mIHRlbGwoKSBvbiB0ZXh0IGZpbGVzICh1cAorICB0byAxMDAweCBmYXN0ZXIgaW4gc29tZSBjYXNlcykuICBJdCBpcyBzdGlsbCBvbmUgdG8gdHdvIG9yZGVyIG9mIG1hZ25pdHVkZXMKKyAgc2xvd2VyIHRoYW4gYmluYXJ5IHRlbGwoKS4KKworLSBJc3N1ZSAjMTA4ODI6IEFkZCBvcy5zZW5kZmlsZSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTA4Njg6IEFsbG93IHVzYWdlIG9mIHRoZSByZWdpc3RlciBtZXRob2Qgb2YgYW4gQUJDIGFzIGEgY2xhc3MKKyAgZGVjb3JhdG9yLgorCistIElzc3VlICMxMTIyNDogRml4ZWQgYSByZWdyZXNzaW9uIGluIHRhcmZpbGUgdGhhdCBhZmZlY3RlZCB0aGUgZmlsZS1saWtlCisgIG9iamVjdHMgcmV0dXJuZWQgYnkgVGFyRmlsZS5leHRyYWN0ZmlsZSgpIHJlZ2FyZGluZyBwZXJmb3JtYW5jZSwgbWVtb3J5CisgIGNvbnN1bXB0aW9uIGFuZCBmYWlsdXJlcyB3aXRoIHRoZSBzdHJlYW0gaW50ZXJmYWNlLgorCistIElzc3VlICMxMDkyNDogQWRkaW5nIHNhbHQgYW5kIE1vZHVsYXIgQ3J5cHQgRm9ybWF0IHRvIGNyeXB0IGxpYnJhcnkuCisgIE1vdmVkIG9sZCBDIHdyYXBwZXIgdG8gX2NyeXB0LCBhbmQgYWRkZWQgYSBQeXRob24gd3JhcHBlciB3aXRoCisgIGVuaGFuY2VkIHNhbHQgZ2VuZXJhdGlvbiBhbmQgc2ltcGxlciBBUEkgZm9yIHBhc3N3b3JkIGdlbmVyYXRpb24uCisKKy0gSXNzdWUgIzExMDc0OiBNYWtlICd0b2tlbml6ZScgc28gaXQgY2FuIGJlIHJlbG9hZGVkLgorCistIElzc3VlICMxMTA4NTogTW92ZWQgY29sbGVjdGlvbnMgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGludG8gYSBzZXBhcmF0ZQorICBtb2R1bGUgY2FsbGVkIGNvbGxlY3Rpb25zLmFiYywgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIHVzZWQgYnkgaW1wb3J0bGliLmFiYy4KKyAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgbmFtZXMgYXJlIGltcG9ydGVkIGludG8gdGhlIGNvbGxlY3Rpb25zCisgIG1vZHVsZS4KKworLSBJc3N1ZSAjNDY4MTogQWxsb3cgbW1hcCgpIHRvIHdvcmsgb24gZmlsZSBzaXplcyBhbmQgb2Zmc2V0cyBsYXJnZXIgdGhhbgorICA0R0IsIGV2ZW4gb24gMzItYml0IGJ1aWxkcy4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwsIGFkYXB0ZWQgZm9yCisgIDMyLWJpdCBXaW5kb3dzLgorCistIElzc3VlICMxMTE2OTogY29tcGlsZWFsbCBtb2R1bGUgdXNlcyByZXByKCkgdG8gZm9ybWF0IGZpbGVuYW1lcyBhbmQgcGF0aHMgdG8KKyAgZXNjYXBlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCBzaG93IHNwYWNlcy4KKworLSBJc3N1ZSAjMTEwODk6IEZpeCBwZXJmb3JtYW5jZSBpc3N1ZSBsaW1pdGluZyB0aGUgdXNlIG9mIENvbmZpZ1BhcnNlcigpCisgIHdpdGggbGFyZ2UgY29uZmlnIGZpbGVzLgorCistIElzc3VlICMxMDI3NjogRml4IHRoZSByZXN1bHRzIG9mIHpsaWIuY3JjMzIoKSBhbmQgemxpYi5hZGxlcjMyKCkgb24gYnVmZmVycworICBsYXJnZXIgdGhhbiA0R0IuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExMzg4OiBBZGRlZCBhIGNsZWFyKCkgbWV0aG9kIHRvIE11dGFibGVTZXF1ZW5jZQorCistIElzc3VlICMxMTE3NDogQWRkIGFyZ3BhcnNlLk1ldGF2YXJUeXBlSGVscEZvcm1hdHRlciwgd2hpY2ggdXNlcyB0eXBlIG5hbWVzCisgIGZvciB0aGUgbmFtZXMgb2Ygb3B0aW9uYWwgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDg6IFJhaXNlIGFuIGVhcmx5IGVycm9yIGlmIGFyZ3BhcnNlIG5hcmdzIGFuZCBtZXRhdmFyIGRvbid0IG1hdGNoLgorCistIElzc3VlICM4OTgyOiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYXJncGFyc2UgTmFtZXNwYWNlIG9iamVjdC4KKworLSBJc3N1ZSAjOTM0MzogRG9jdW1lbnQgdGhhdCBhcmdwYXJzZSBwYXJlbnQgcGFyc2VycyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCisgIHRoZWlyIGNoaWxkcmVuLgorCistIElzc3VlICM5MDI2OiBGaXggb3JkZXIgb2YgYXJncGFyc2Ugc3ViLWNvbW1hbmRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDc6IEZpeCBmb3JtYXR0aW5nIGZvciB0dXBsZXMgaW4gYXJncGFyc2UgdHlwZT0gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzEyMTkxOiBBZGRlZCBzaHV0aWwuY2hvd24oKSB0byBjaGFuZ2UgdXNlciBhbmQvb3IgZ3JvdXAgb3duZXIgb2YgYQorICBnaXZlbiBwYXRoIGFsc28gc3BlY2lmeWluZyB0aGVpciBuYW1lcy4KKworLSBJc3N1ZSAjMTM5ODg6IFRoZSBfZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IgaXMgdXNlZCB3aGVuZXZlciBhdmFpbGFibGUuCisgIE5vdyB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlIGJlY29tZXMgYSBkZXByZWNhdGVkIGFsaWFzIHRvIEVsZW1lbnRUcmVlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjNjgwNzogUnVuIG1zaXN1cHBvcnQubWFrIGVhcmxpZXIuCisKKy0gSXNzdWUgIzEwNTgwOiBNaW5vciBncmFtbWFyIGNoYW5nZSBpbiBXaW5kb3dzIGluc3RhbGxlci4KKworLSBJc3N1ZSAjMTMzMjY6IENsZWFuIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvcnJlY3RseSBvbiBPcGVuQlNELgorCistIFBFUCAzOTM6IHRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC13aWRlLXVuaWNvZGUgaXMgcmVtb3ZlZC4KKworLSBJc3N1ZSAjMTI4NTI6IFNldCBfWE9QRU5fU09VUkNFIHRvIDcwMCwgaW5zdGVhZCBvZiA2MDAsIHRvIGdldCBQT1NJWCAyMDA4CisgIGZ1bmN0aW9ucyBvbiBPcGVuQlNEIChlLmcuIGZkb3BlbmRpcikuCisKKy0gSXNzdWUgIzExODYzOiBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IHN5c3RlbXMgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yCisgIChmb2xsb3dpbmcgUEVQIDExKS4gIFRoZXNlIHN5c3RlbXMgYXJlIHN5c3RlbXMgdXNpbmcgTWFjaCBDIFRocmVhZHMsCisgIFN1bk9TIGxpZ2h0d2VpZ2h0IHByb2Nlc3NlcywgR05VIHB0aCB0aHJlYWRzIGFuZCBJUklYIHRocmVhZHMuCisKKy0gSXNzdWUgIzg3NDY6IENvcnJlY3QgZmF1bHR5IGNvbmZpZ3VyZSBjaGVja3Mgc28gdGhhdCBvcy5jaGZsYWdzKCkgYW5kCisgIG9zLmxjaGZsYWdzKCkgYXJlIG9uY2UgYWdhaW4gYnVpbHQgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlc2UKKyAgZnVuY3Rpb25zIChCU0QgYW5kIE9TIFgpLiAgQWxzbyBhZGQgbmV3IHN0YXQgZmlsZSBmbGFncyBmb3IgT1MgWAorICAoVUZfSElEREVOIGFuZCBVRl9DT01QUkVTU0VEKS4KKworLSBJc3N1ZSAjMTA2NDU6IEluc3RhbGxpbmcgUHl0aG9uIG5vIGxvbmdlciBjcmVhdGVzIGEKKyAgUHl0aG9uLVguWS5aLXB5WC5ZLmVnZy1pbmZvIGZpbGUgaW4gdGhlIGxpYi1keW5sb2FkIGRpcmVjdG9yeS4KKworLSBEbyBub3QgYWNjaWRlbnRhbGx5IGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHNxbGl0ZS5oIHR3aWNlIHdoZW4KKyAgYnVpbGRpbmcgc3FsaXRlMy4KKworLSBJc3N1ZSAjMTEyMTc6IEZvciA2NC1iaXQvMzItYml0IE1hYyBPUyBYIHVuaXZlcnNhbCBmcmFtZXdvcmsgYnVpbGRzLAorICBlbnN1cmUgIm1ha2UgaW5zdGFsbCIgY3JlYXRlcyBzeW1saW5rcyBpbiAtLXByZWZpeCBiaW4gZm9yIHRoZSAiLTMyIgorICBmaWxlcyBpbiB0aGUgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkgbGlrZSB0aGUgaW5zdGFsbGVyIGRvZXMuCisKKy0gSXNzdWUgIzExMzQ3OiBVc2UgLS1uby1hcy1uZWVkZWQgd2hlbiBsaW5raW5nIGxpYnB5dGhvbjMuc28uCisKKy0gSXNzdWUgIzExNDExOiBGaXggJ21ha2UgREVTVERJUj0nIHdpdGggYSByZWxhdGl2ZSBkZXN0aW5hdGlvbi4KKworLSBJc3N1ZSAjMTEyNjg6IFByZXZlbnQgTWFjIE9TIFggSW5zdGFsbGVyIGZhaWx1cmUgaWYgRG9jdW1lbnRhdGlvbgorICBwYWNrYWdlIGhhZCBwcmV2aW91c2x5IGJlZW4gaW5zdGFsbGVkLgorCistIElzc3VlICMxMTQ5NTogT1NGIHN1cHBvcnQgaXMgZWxpbWluYXRlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMi4KKworCitJRExFCistLS0tCisKKy0gSXNzdWUgIzExNzE4OiBJRExFJ3Mgb3BlbiBtb2R1bGUgZGlhbG9nIGNvdWxkbid0IGZpbmQgdGhlIF9faW5pdF9fLnB5CisgIGZpbGUgaW4gYSBwYWNrYWdlLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQwNTM6IHBhdGNoY2hlY2sucHkgKCJtYWtlIHBhdGNoY2hlY2siKSBub3cgd29ya3Mgd2l0aCBNUSBwYXRjaGVzLgorICBQYXRjaCBieSBGcmFuY2lzY28gTWFydMOtbiBCcnVndcOpLgorCistIElzc3VlICMxMzkzMDogMnRvMyBpcyBub3cgYWJsZSB0byB3cml0ZSBpdHMgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCisgIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCisgIHN1ZmZpeC4gIFNlZSBpdHMgbmV3IC1vLCAtVyBhbmQgLS1hZGQtc3VmZml4IG9wdGlvbnMuICBUaGlzIG1ha2VzIGl0IG1vcmUKKyAgdXNlZnVsIGluIG1hbnkgYXV0b21hdGVkIGNvZGUgdHJhbnNsYXRpb24gd29ya2Zsb3dzLgorCistIElzc3VlICMxMzYyODogcHl0aG9uLWdkYi5weSBpcyBub3cgYWJsZSB0byByZXRyaWV2ZSBtb3JlIGZyYW1lcyBpbiB0aGUgUHl0aG9uCisgIHRyYWNlYmFjayBpZiBQeXRob24gaXMgb3B0aW1pemVkLgorCistIElzc3VlICMxMTk5NjogbGlicHl0aG9uIChnZGIpLCByZXBsYWNlICJweS1idCIgY29tbWFuZCBieSAicHktYnQtZnVsbCIgYW5kCisgIGFkZCBhIHNtYXJ0ZXIgInB5LWJ0IiBjb21tYW5kIHByaW50aW5nIGEgY2xhc3NpYyBQeXRob24gdHJhY2ViYWNrLgorCistIElzc3VlICMxMTE3OTogTWFrZSBjY2JlbmNoIHdvcmsgdW5kZXIgUHl0aG9uIDMuMSBhbmQgMi43IGFnYWluLgorCistIElzc3VlICMxMDYzOTogcmVpbmRlbnQucHkgbm8gbG9uZ2VyIGNvbnZlcnRzIG5ld2xpbmVzIGFuZCB3aWxsIHJhaXNlCisgIGFuIGVycm9yIGlmIGF0dGVtcHRpbmcgdG8gY29udmVydCBhIGZpbGUgd2l0aCBtaXhlZCBuZXdsaW5lcy4KKyAgIi0tbmV3bGluZSIgb3B0aW9uIGFkZGVkIHRvIHNwZWNpZnkgbmV3IGxpbmUgY2hhcmFjdGVyLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTM4NDA6IFRoZSBlcnJvciBtZXNzYWdlIHByb2R1Y2VkIGJ5IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcgorICB3aGVuIGdpdmVuIGEgVW5pY29kZSBzdHJpbmcgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzk5NzU6IHNvY2tldDogRml4IGluY29ycmVjdCB1c2Ugb2YgZmxvd2luZm8gYW5kIHNjb3BlX2lkLiBQYXRjaCBieQorICBWaWxtb3MgTmViZWhhai4KKworLSBJc3N1ZSAjNzc3Nzogc29ja2V0OiBBZGQgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUEZfUkRTKSBzdXBwb3J0LgorCistIElzc3VlICMxMzE1OTogRmlsZUlPIGFuZCBCWjJDb21wcmVzc29yL0JaMkRlY29tcHJlc3NvciBub3cgdXNlIGEgbGluZWFyLXRpbWUKKyAgYnVmZmVyIGdyb3d0aCBzdHJhdGVneSBpbnN0ZWFkIG9mIGEgcXVhZHJhdGljLXRpbWUgb25lLgorCistIElzc3VlICMxMDE0MTogc29ja2V0OiBBZGQgU29ja2V0Q0FOIChQRl9DQU4pIHN1cHBvcnQuIEluaXRpYWwgcGF0Y2ggYnkKKyAgTWF0dGhpYXMgRnVjaHMsIHVwZGF0ZWQgYnkgVGlhZ28gR29uw6dhbHZlcy4KKworLSBJc3N1ZSAjMTMwNzA6IEZpeCBhIGNyYXNoIHdoZW4gYSBUZXh0SU9XcmFwcGVyIGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZQorICB3b3VsZCBiZSBmaW5hbGl6ZWQgYWZ0ZXIgdGhlIHJlZmVyZW5jZSB0byBpdHMgdW5kZXJseWluZyBCdWZmZXJlZFJXUGFpcidzCisgIHdyaXRlciBnb3QgY2xlYXJlZCBieSB0aGUgR0MuCisKKy0gSXNzdWUgIzEyODgxOiBjdHlwZXM6IEZpeCBzZWdmYXVsdCB3aXRoIGxhcmdlIHN0cnVjdHVyZSBmaWVsZCBuYW1lcy4KKworLSBJc3N1ZSAjMTMwNTg6IG9zc2F1ZGlvZGV2OiBmaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBvbiBlcnJvci4gUGF0Y2ggYnkKKyAgVGhvbWFzIEphcm9zY2guCisKKy0gSXNzdWUgIzEzMDEzOiBjdHlwZXM6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIFB5Q0FycmF5VHlwZV9mcm9tX2N0eXBlLgorICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTMwMjI6IEZpeDogX211bHRpcHJvY2Vzc2luZy5yZWN2ZmQoKSBkb2Vzbid0IGNoZWNrIHRoYXQKKyAgZmlsZSBkZXNjcmlwdG9yIHdhcyBhY3R1YWxseSByZWNlaXZlZC4KKworLSBJc3N1ZSAjMTE3MjcxMTogQWRkICdsb25nIGxvbmcnIHN1cHBvcnQgdG8gdGhlIGFycmF5IG1vZHVsZS4KKyAgSW5pdGlhbCBwYXRjaCBieSBPcmVuIFRpcm9zaCBhbmQgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzEyNDgzOiBjdHlwZXM6IEZpeCBhIGNyYXNoIHdoZW4gdGhlIGRlc3RydWN0aW9uIG9mIGEgY2FsbGJhY2sKKyAgb2JqZWN0IHRyaWdnZXJzIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKworLSBJc3N1ZSAjMTI5NTA6IEZpeCBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgaW4gbXVsdGlwcm9jZXNzaW5nLCB1bmRlcgorICBPcGVuSW5kaWFuYS9JbGx1bW9zLgorCistIElzc3VlICMxMjc2NDogRml4IGEgY3Jhc2ggaW4gY3R5cGVzIHdoZW4gdGhlIG5hbWUgb2YgYSBTdHJ1Y3R1cmUgZmllbGQgaXMgbm90CisgIGEgc3RyaW5nLgorCistIElzc3VlICMxMTI0MTogc3ViY2xhc3NlcyBvZiBjdHlwZXMuQXJyYXkgY2FuIG5vdyBiZSBzdWJjbGFzc2VkLgorCistIElzc3VlICM5NjUxOiBGaXggYSBjcmFzaCB3aGVuIGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcigwKSB3YXMgcGFzc2VkIHRvCisgIHNvbWUgZnVuY3Rpb25zIGxpa2UgZmlsZS53cml0ZSgpLgorCistIElzc3VlICMxMDMwOTogRGVmaW5lIF9HTlVfU09VUkNFIHNvIHRoYXQgbXJlbWFwKCkgZ2V0cyB0aGUgcHJvcGVyCisgIHNpZ25hdHVyZS4gIFdpdGhvdXQgdGhpcywgYXJjaGl0ZWN0dXJlcyB3aGVyZSBzaXplb2Ygdm9pZCogIT0gc2l6ZW9mIGludCBhcmUKKyAgYnJva2VuLiAgUGF0Y2ggZ2l2ZW4gYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTIwNTE6IEZpeCBzZWdmYXVsdCBpbiBqc29uLmR1bXBzKCkgd2hpbGUgZW5jb2RpbmcgaGlnaGx5LW5lc3RlZAorICBvYmplY3RzIHVzaW5nIHRoZSBDIGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDE3OiBGaXggc2VnZmF1bHQgaW4ganNvbi5sb2FkcygpIHdoaWxlIGRlY29kaW5nIGhpZ2hseS1uZXN0ZWQKKyAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxODM4OiBQcmV2ZW50IHNlZ2ZhdWx0IGluIGN0eXBlcywgd2hlbiBfYXNfcGFyYW1ldGVyXyBvbiBhIGNsYXNzIGlzIHNldAorICB0byBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxMTY4OTogRml4IGEgdmFyaWFibGUgc2NvcGluZyBlcnJvciBpbiBhbiBzcWxpdGUzIHRlc3QKKworLSBJc3N1ZSAjMTM3ODY6IFJlbW92ZSB1bmltcGxlbWVudGVkICd0cmFjZScgbG9uZyBvcHRpb24gZnJvbSByZWdydGVzdC5weS4KKworLSBJc3N1ZSAjMTM3MjU6IEZpeCByZWdydGVzdCB0byByZWNvZ25pemUgdGhlIGRvY3VtZW50ZWQgLWQgZmxhZy4KKyAgUGF0Y2ggYnkgRXJubyBUdWtpYS4KKworLSBJc3N1ZSAjMTMzMDQ6IFNraXAgdGVzdCBjYXNlIGlmIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXNhYmxlZCAoLXMgb3IKKyAgUFlUSE9OTk9VU0VSU0lURSkuICAoUGF0Y2ggYnkgQ2FybCBNZXllcikKKworLSBJc3N1ZSAjNTY2MTogQWRkIGEgdGVzdCBmb3IgRUNPTk5SRVNFVC9FUElQRSBoYW5kbGluZyB0byB0ZXN0X2FzeW5jb3JlLiBQYXRjaAorICBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTMyMTg6IEZpeCB0ZXN0X3NzbCBmYWlsdXJlcyBvbiBEZWJpYW4vVWJ1bnR1LgorCistIFJlLWVuYWJsZSBsaWIydG8zJ3MgdGVzdF9wYXJzZXIucHkgdGVzdHMsIHRob3VnaCB3aXRoIGFuIGV4cGVjdGVkIGZhaWx1cmUKKyAgKHNlZSBpc3N1ZSAxMzEyNSkuCisKKy0gSXNzdWUgIzEyNjU2OiBBZGQgdGVzdHMgZm9yIElQdjYgYW5kIFVuaXggc29ja2V0cyB0byB0ZXN0X2FzeW5jb3JlLgorCistIElzc3VlICM2NDg0OiBBZGQgdW5pdCB0ZXN0cyBmb3IgbWFpbGNhcCBtb2R1bGUgKHBhdGNoIGJ5IEdyZWdvcnkgTm9maSkKKworLSBJc3N1ZSAjMTE2NTE6IEltcHJvdmUgdGhlIE1ha2VmaWxlIHRlc3QgdGFyZ2V0cyB0byBydW4gbW9yZSBvZiB0aGUgdGVzdCBzdWl0ZQorICBtb3JlIHF1aWNrbHkuIFRoZSAtLW11bHRpcHJvY2VzcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCwgcmVkdWNpbmcKKyAgdGhlIGFtb3VudCBvZiB0aW1lIG5lZWRlZCB0byBydW4gdGhlIHRlc3RzLiAibWFrZSB0ZXN0IiBhbmQgIm1ha2UgcXVpY2t0ZXN0IgorICBub3cgaW5jbHVkZSBzb21lIHJlc291cmNlLWludGVuc2l2ZSB0ZXN0cywgYnV0IG5vIGxvbmdlciBydW4gdGhlIHRlc3Qgc3VpdGUKKyAgdHdpY2UgdG8gY2hlY2sgZm9yIGJ1Z3MgaW4gLnB5YyBnZW5lcmF0aW9uLiBUb29scy9zY3JpcHRzL3J1bl90ZXN0LnB5IHByb3ZpZGVzCisgIGFuIGVhc3kgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5IHRvIHJ1biB0ZXN0IHN1aXRlIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzEyMzMxOiBUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIHBhY2thZ2luZyBtb2R1bGUgY2FuIG5vdyBydW4gZnJvbSBhbgorICBpbnN0YWxsZWQgUHl0aG9uLgorCistIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIGxpYjJ0bzMgY2FuIG5vdyBydW4gZnJvbSBhbiBpbnN0YWxsZWQKKyAgUHl0aG9uLgorCistIElzc3VlICMxMjYyNjogSW4gcmVncnRlc3QsIGFsbG93IHRvIGZpbHRlciB0ZXN0cyB1c2luZyBhIGdsb2IgZmlsdGVyCisgIHdpdGggdGhlIGBgLW1gYCAob3IgYGAtLW1hdGNoYGApIG9wdGlvbi4gIFRoaXMgd29ya3Mgd2l0aCBhbGwgdGVzdCBjYXNlcworICB1c2luZyB0aGUgdW5pdHRlc3QgbW9kdWxlLiAgVGhpcyBpcyB1c2VmdWwgd2l0aCBsb25nIHRlc3Qgc3VpdGVzCisgIHN1Y2ggYXMgdGVzdF9pbyBvciB0ZXN0X3N1YnByb2Nlc3MuCisKKy0gSXNzdWUgIzEyNjI0OiBJdCBpcyBub3cgcG9zc2libGUgdG8gZmFpbCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSB3aGVuCisgIHJ1bm5pbmcgaW4gdmVyYm9zZSBtb2RlIChgYC12YGAgb3IgYGAtV2BgKSwgYnkgdXNpbmcgdGhlIGBgLS1mYWlsZmFzdGBgCisgIChvciBgYC1HYGApIG9wdGlvbiB0byByZWdydGVzdC4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcworICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgorCistIElzc3VlICMxMjU4NzogQ29ycmVjdCBmYXVsdHkgdGVzdCBmaWxlIGFuZCByZWZlcmVuY2UgaW4gdGVzdF90b2tlbml6ZS4KKyAgKFBhdGNoIGJ5IFJvYmVydCBYaWFvKQorCistIElzc3VlICMxMjU3MzogQWRkIHJlc291cmNlIGNoZWNrcyBmb3IgZGFuZ2xpbmcgVGhyZWFkIGFuZCBQcm9jZXNzIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyNTQ5OiBDb3JyZWN0IHRlc3RfcGxhdGZvcm0gdG8gbm90IGZhaWwgd2hlbiBPUyBYIHJldHVybnMgJ3g4Nl82NCcKKyAgYXMgdGhlIHByb2Nlc3NvciB0eXBlIG9uIHNvbWUgTWFjIHN5c3RlbXMuCisKKy0gU2tpcCBuZXR3b3JrIHRlc3RzIHdoZW4gZ2V0YWRkcmluZm8oKSByZXR1cm5zIEVBSV9BR0FJTiwgbWVhbmluZyBhIHRlbXBvcmFyeQorICBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbi4KKworLSBJc3N1ZSAjMTE4MTI6IFNvbHZlIHRyYW5zaWVudCBzb2NrZXQgZmFpbHVyZSB0byBjb25uZWN0IHRvICdsb2NhbGhvc3QnCisgIGluIHRlc3RfdGVsbmV0bGliLnB5LgorCistIFNvbHZlZCBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0ZXN0X3RlbG5ldGxpYi5weS4gUmVsYXRlZCB0byBpc3N1ZSAjMTE4MTIuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3JvYm90cGFyc2VyIHdoZW4gbXVlYmxlc21vcmFsZWRhLmNvbSBpcyBmbGFreSBhbmQKKyAgYW4gb3ZlcnplYWxvdXMgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVkaXJlY3RzIHRvIGEgcGxhY2Vob2xkZXIKKyAgV2ViIHNpdGUuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3VybGxpYm5ldC50ZXN0X2JhZF9hZGRyZXNzIHdoZW4gc29tZSBvdmVyemVhbG91cworICBETlMgc2VydmljZSAoZS5nLiBPcGVuRE5TKSByZXNvbHZlcyBhIG5vbi1leGlzdGVudCBkb21haW4gbmFtZS4gIFRoZSB0ZXN0CisgIGlzIG5vdyBza2lwcGVkIGluc3RlYWQuCisKKy0gSXNzdWUgIzEyNDQwOiBXaGVuIHRlc3Rpbmcgd2hldGhlciBzb21lIGJpdHMgaW4gU1NMQ29udGV4dC5vcHRpb25zIGNhbiBiZQorICByZXNldCwgY2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgaGVhZGVycyBQeXRob24gd2FzIGNvbXBpbGVkIGFnYWluc3QsCisgIHJhdGhlciB0aGFuIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeS4KKworLSBJc3N1ZSAjMTE1MTI6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBjZ2l0YiBtb2R1bGUuIFBhdGNoIGJ5IFJvYmJpZSBDbGVtb25zLgorCistIElzc3VlICMxMjQ5NzogSW5zdGFsbCB0ZXN0L2RhdGEgdG8gcHJldmVudCBmYWlsdXJlcyBvZiB0aGUgdmFyaW91cyBjb2RlY21hcHMKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzEyNDk2OiBJbnN0YWxsIHRlc3QvY2FwYXRoIGRpcmVjdG9yeSB0byBwcmV2ZW50IHRlc3RfY29ubmVjdF9jYXBhdGgKKyAgdGVzdGNhc2UgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KKworLSBJc3N1ZSAjMTI0Njk6IFJ1biB3YWtldXAgYW5kIHBlbmRpbmcgc2lnbmFsIHRlc3RzIGluIGEgc3VicHJvY2VzcyB0byBydW4gdGhlCisgIHRlc3QgaW4gYSBmcmVzaCBwcm9jZXNzIHdpdGggb25seSBvbmUgdGhyZWFkIGFuZCB0byBub3QgY2hhbmdlIHNpZ25hbAorICBoYW5kbGluZyBvZiB0aGUgcGFyZW50IHByb2Nlc3MuCisKKy0gSXNzdWUgIzg3MTY6IEF2b2lkIGNyYXNoZXMgY2F1c2VkIGJ5IEFxdWEgVGsgb24gT1NYIHdoZW4gYXR0ZW1wdGluZyB0byBydW4KKyAgdGVzdF90ayBvciB0ZXN0X3R0a19ndWlvbmx5IHVuZGVyIGEgdXNlcm5hbWUgdGhhdCBpcyBub3QgY3VycmVudGx5IGxvZ2dlZAorICBpbiB0byB0aGUgY29uc29sZSB3aW5kb3dzZXJ2ZXIgKGFzIG1heSBiZSB0aGUgY2FzZSB1bmRlciBidWlsZGJvdCBvciBzc2gpLgorCistIElzc3VlICMxMjQwNzogRXhwbGljaXRseSBza2lwIHRlc3RfY2FwaS5FbWJlZGRpbmdUZXN0IHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEyNDAwOiByZWdydGVzdCAtVyBkb2Vzbid0IHJlcnVuIHRoZSB0ZXN0cyB0d2ljZSBhbnltb3JlLCBidXQgY2FwdHVyZXMKKyAgdGhlIG91dHB1dCBhbmQgZGlzcGxheXMgaXQgb24gZmFpbHVyZSBpbnN0ZWFkLiByZWdydGVzdCAtdiBkb2Vzbid0IHByaW50IHRoZQorICBlcnJvciB0d2ljZSBhbnltb3JlIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVycm9yLgorCistIElzc3VlICMxMjE0MTogSW5zdGFsbCBjb3BpZXMgb2YgdGVtcGxhdGUgQyBtb2R1bGUgZmlsZSBzbyB0aGF0CisgIHRlc3RfYnVpbGRfZXh0IG9mIHRlc3RfZGlzdHV0aWxzIGFuZCB0ZXN0X2NvbW1hbmRfYnVpbGRfZXh0IG9mCisgIHRlc3RfcGFja2FnaW5nIGFyZSBubyBsb25nZXIgc2lsZW50bHkgc2tpcHBlZCB3aGVuCisgIHJ1biBvdXRzaWRlIG9mIGEgYnVpbGQgZGlyZWN0b3J5LgorCistIElzc3VlICM4NzQ2OiBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3Igb3MuY2hmbGFncygpIGFuZCBvcy5sY2hmbGFncygpLgorICBQYXRjaCBieSBHYXJyZXR0IENvb3Blci4KKworLSBJc3N1ZSAjMTA3MzY6IEZpeCB0ZXN0X3R0ayB0ZXN0X3dpZGdldHMgZmFpbHVyZXMgd2l0aCBDb2NvYSBUayA4LjUuOQorICAyLjggKyAgb24gTWFjIE9TIFguICAoUGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjA1NzogQWRkIHRlc3RzIGZvciBJU08gMjAyMiBjb2RlY3MgKGlzbzIwMjJfanAsIGlzbzIwMjJfanBfMiwKKyAgaXNvMjAyMl9rcikuCisKKy0gSXNzdWUgIzEyMDk2OiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0ZXN0X3RocmVhZGluZy50ZXN0X3dhaXRmb3IoKS4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExNjE0OiBpbXBvcnQgX19oZWxsb19fIHByaW50cyAiSGVsbG8gV29ybGQhIi4gUGF0Y2ggd3JpdHRlbiBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzU3MjM6IEltcHJvdmUganNvbiB0ZXN0cyB0byBiZSBleGVjdXRlZCB3aXRoIGFuZCB3aXRob3V0IGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDQxOiBNYWtlIHRlc3Rfd2FpdDMgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzExODczOiBDaGFuZ2UgcmVnZXggaW4gdGVzdF9jb21waWxlYWxsIHRvIGZpeCBvY2Nhc2lvbmFsIGZhaWx1cmVzIHdoZW4KKyAgd2hlbiB0aGUgcmFuZG9tbHkgZ2VuZXJhdGVkIHRlbXBvcmFyeSBwYXRoIGhhcHBlbmVkIHRvIG1hdGNoIHRoZSByZWdleC4KKworLSBJc3N1ZSAjMTE5NTg6IEZpeCBGVFAgdGVzdHMgZm9yIElQdjYsIGJpbmQgdG8gIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0Ii4KKyAgUGF0Y2ggd3JpdHRlbiBieSBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjODQwNywgIzExODU5OiBGaXggdGVzdHMgb2YgdGVzdF9pbyB1c2luZyB0aHJlYWRzIGFuZCBhbiBhbGFybTogdXNlCisgIHB0aHJlYWRfc2lnbWFzaygpIHRvIGVuc3VyZSB0aGF0IHRoZSBTSUdBTFJNIHNpZ25hbCBpcyByZWNlaXZlZCBieSB0aGUgbWFpbgorICB0aHJlYWQuCisKKy0gSXNzdWUgIzExODExOiBGYWN0b3Igb3V0IGRldGVjdGlvbiBvZiBJUHY2IHN1cHBvcnQgb24gdGhlIGN1cnJlbnQgaG9zdAorICBhbmQgbWFrZSBpdCBhdmFpbGFibGUgYXMgYGB0ZXN0LnN1cHBvcnQuSVBWNl9FTkFCTEVEYGAuICBQYXRjaCBieQorICBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEwOTE0OiBBZGQgYSBtaW5pbWFsIGVtYmVkZGluZyB0ZXN0IHRvIHRlc3RfY2FwaS4KKworLSBJc3N1ZSAjMTEyMjM6IFNraXAgdGVzdF9sb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgYW5kCisgIHRlc3RfcmxvY2tfYWNxdWlyZV9pbnRlcnJ1cHRpb24oKSBvZiB0ZXN0X3RocmVhZHNpZ25hbHMgaWYgYSB0aHJlYWQgbG9jayBpcworICBpbXBsZW1lbnRlZCB1c2luZyBhIFBPU0lYIG11dGV4IGFuZCBhIFBPU0lYIGNvbmRpdGlvbiB2YXJpYWJsZS4gQSBQT1NJWAorICBjb25kaXRpb24gdmFyaWFibGUgY2Fubm90IGJlIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIChlLmcuIG9uIExpbnV4LCB0aGUKKyAgZnV0ZXggc3lzdGVtIGNhbGwgaXMgcmVzdGFydGVkKS4KKworLSBJc3N1ZSAjMTE3OTA6IEZpeCBzcG9yYWRpYyBmYWlsdXJlcyBpbiB0ZXN0X211bHRpcHJvY2Vzc2luZy5XaXRoUHJvY2Vzc2VzVGVzdENvbmRpdGlvbi4KKworLSBGaXggcG9zc2libGUgImZpbGUgYWxyZWFkeSBleGlzdHMiIGVycm9yIHdoZW4gcnVubmluZyB0aGUgdGVzdHMgaW4gcGFyYWxsZWwuCisKKy0gSXNzdWUgIzExNzE5OiBGaXggbWVzc2FnZSBhYm91dCB1bmV4cGVjdGVkIHRlc3RfbXNpbGliIHNraXAgb24gbm9uLVdpbmRvd3MKKyAgcGxhdGZvcm1zLiBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNzI3OiBBZGQgYSAtLXRpbWVvdXQgb3B0aW9uIHRvIHJlZ3J0ZXN0OiBpZiBhIHRlc3QgdGFrZXMgbW9yZSB0aGFuCisgIFRJTUVPVVQgc2Vjb25kcywgZHVtcHMgdGhlIHRyYWNlYmFjayBvZiBhbGwgdGhyZWFkcyBhbmQgZXhpdHMuCisKKy0gSXNzdWUgIzExNjUzOiBmaXggLVcgd2l0aCAtaiBpbiByZWdydGVzdC4KKworLSBUaGUgZW1haWwgdGVzdCBzdWl0ZSBub3cgbGl2ZXMgaW4gdGhlIExpYi90ZXN0L3Rlc3RfZW1haWwgcGFja2FnZS4gIFRoZSB0ZXN0CisgIGhhcm5lc3MgY29kZSBoYXMgYWxzbyBiZWVuIG1vZGVybml6ZWQgdG8gYWxsb3cgdXNlIG9mIG5ldyB1bml0dGVzdCBmZWF0dXJlcy4KKworLSByZWdydGVzdCBub3cgZGlzY292ZXJzIHRlc3QgcGFja2FnZXMgYXMgd2VsbCBhcyB0ZXN0IG1vZHVsZXMuCisKKy0gSXNzdWUgIzExNTc3OiBpbXByb3ZlIHRlc3QgY292ZXJhZ2Ugb2YgYmluaGV4LnB5LiBQYXRjaCBieSBBcmthZHkgS29wbHlhcm92LgorCistIE5ldyB0ZXN0X2NyYXNoZXJzIGFkZGVkIHRvIGV4ZXJjaXNlIHRoZSBzY3JpcHRzIGluIHRoZSBMaWIvdGVzdC9jcmFzaGVycworICBkaXJlY3RvcnkgYW5kIGNvbmZpcm0gdGhleSBmYWlsIGFzIGV4cGVjdGVkCisKKy0gSXNzdWUgIzExNTc4OiBhZGRlZCB0ZXN0IGZvciB0aGUgdGltZWl0IG1vZHVsZS4gIFBhdGNoIGJ5IE1pY2hhZWwgSGVucnkuCisKKy0gSXNzdWUgIzExNTAzOiBpbXByb3ZlIHRlc3QgY292ZXJhZ2Ugb2YgcG9zaXhwYXRoLnB5LiBQYXRjaCBieSBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weSwgaW5jcmVhc2VzIGdyYW51bGFyaXR5IG9mCisgIHN0cmluZy5Gb3JtYXR0ZXIgdGVzdHMuIEluaXRpYWwgcGF0Y2ggYnkgQWxpY2lhIEFybGVuLgorCistIElzc3VlICMxMTU0ODogSW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHRoZSBzaHV0aWwgbW9kdWxlLiBQYXRjaCBieQorICBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzExNTU0OiBSZWFjdGl2YXRlZCB0ZXN0X2VtYWlsX2NvZGVjcy4KKworLSBJc3N1ZSAjMTE1MDU6IGltcHJvdmVzIHRlc3QgY292ZXJhZ2Ugb2Ygc3RyaW5nLnB5LiBQYXRjaCBieSBBbGljaWEKKyAgQXJsZW4KKworLSBJc3N1ZSAjMTE0OTA6IHRlc3Rfc3VicHJvY2Vzczp0ZXN0X2xlYWtpbmdfZmRzX29uX2Vycm9yIG5vIGxvbmdlciBnaXZlcyBhCisgIGZhbHNlIHBvc2l0aXZlIGlmIHRoZSBsYXN0IGRpcmVjdG9yeSBpbiB0aGUgcGF0aCBpcyBpbmFjY2Vzc2libGUuCisKKy0gSXNzdWUgIzExMjIzOiBGaXggdGVzdF90aHJlYWRzaWduYWxzIHRvIGZhaWwsIG5vdCBoYW5nLCB3aGVuIHRoZQorICBub24tc2VtYXBob3JlIGltcGxlbWVudGF0aW9uIG9mIGxvY2tzIGlzIHVzZWQgdW5kZXIgUE9TSVguCisKKy0gSXNzdWUgIzEwOTExOiBBZGQgdGVzdHMgb24gQ0dJIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFBhdGNoIHdyaXR0ZW4gYnkKKyAgUGllcnJlIFF1ZW50ZWwuCisKKy0gSXNzdWUgIzk5MzE6IEZpeCBoYW5ncyBpbiBHVUkgdGVzdHMgdW5kZXIgV2luZG93cyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMuCisgIFBhdGNoIGJ5IEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICMxMDUxMjogUHJvcGVybHkgY2xvc2Ugc29ja2V0cyB1bmRlciB0ZXN0LnRlc3RfY2dpLgorCistIElzc3VlICMxMDk5MjogTWFrZSB0ZXN0cyBwYXNzIHVuZGVyIGNvdmVyYWdlLgorCistIElzc3VlICMxMDgyNjogUHJldmVudCBzcG9yYWRpYyBmYWlsdXJlIGluIHRlc3Rfc3VicHJvY2VzcyBvbiBTb2xhcmlzIGR1ZQorICB0byBvcGVuIGRvb3IgZmlsZXMuCisKKy0gSXNzdWUgIzEwOTkwOiBQcmV2ZW50IHRlc3RzIGZyb20gY2xvYmJlcmluZyBhIHNldCB0cmFjZSBmdW5jdGlvbi4KKworQy1BUEkKKy0tLS0tCisKKy0gQWRkIFB5T2JqZWN0X0dlbmVyaWNHZXREaWN0IGFuZCBQeU9iamVjdF9HZW5lcmlTZXREaWN0LiBUaGV5IGFyZSBnZW5lcmljCisgIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGdldHRlciBhbmQgc2V0dGVyIG9mIGEgYGBfX2RpY3RfX2BgIGRlc2NyaXB0b3Igb2YgQworICB0eXBlcy4KKworLSBJc3N1ZSAjMTM3Mjc6IEFkZCAzIG1hY3JvcyB0byBhY2Nlc3MgUHlEYXRlVGltZV9EZWx0YSBtZW1iZXJzOgorICBQeURhdGVUaW1lX0RFTFRBX0dFVF9EQVlTLCBQeURhdGVUaW1lX0RFTFRBX0dFVF9TRUNPTkRTLAorICBQeURhdGVUaW1lX0RFTFRBX0dFVF9NSUNST1NFQ09ORFMuCisKKy0gSXNzdWUgIzEwNTQyOiBBZGQgNCBtYWNyb3MgdG8gd29yayB3aXRoIHN1cnJvZ2F0ZXM6IFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFLAorICBQeV9VTklDT0RFX0lTX0hJR0hfU1VSUk9HQVRFLCBQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUsCisgIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTLgorCistIElzc3VlICMxMjcyNDogQWRkIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRCBtYWNybyBmb3IgcmV0dXJuaW5nIE5vdEltcGxlbWVudGVkLgorCistIFBZX1BBVENITEVWRUxfUkVWSVNJT04gaGFzIGJlZW4gcmVtb3ZlZCwgc2luY2UgaXQncyBtZWFuaW5nbGVzcyB3aXRoCisgIE1lcmN1cmlhbC4KKworLSBJc3N1ZSAjMTIxNzM6IFRoZSBmaXJzdCBhcmd1bWVudCBvZiBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbCBpcyBub3cgYGNvbnN0CisgIGNoYXIgKmAgaW5zdGVhZCBvZiBgY2hhciAqYC4KKworLSBJc3N1ZSAjMTIzODA6IFB5QXJnX1BhcnNlVHVwbGUgbm93IGFjY2VwdHMgYSBieXRlYXJyYXkgZm9yIHRoZSAnYycgZm9ybWF0LgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWVzICMxMzQ5MSBhbmQgIzEzOTk1OiBGaXggbWFueSBlcnJvcnMgaW4gc3FsaXRlMyBkb2N1bWVudGF0aW9uLgorICBJbml0aWFsIHBhdGNoIGZvciAjMTM0OTEgYnkgSm9oYW5uZXMgVm9nZWwuCisKKy0gSXNzdWUgIzEzNDAyOiBEb2N1bWVudCBhYnNvbHV0ZW5lc3Mgb2Ygc3lzLmV4ZWN1dGFibGUuCisKKy0gSXNzdWUgIzEzODgzOiBQWVRIT05DQVNFT0sgYWxzbyB3b3JrcyBvbiBPUyBYLgorCistIElzc3VlICM5MDIxOiBBZGQgYW4gaW50cm9kdWN0aW9uIHRvIHRoZSBjb3B5IG1vZHVsZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM2MDA1OiBFeGFtcGxlcyBpbiB0aGUgc29ja2V0IGxpYnJhcnkgZG9jdW1lbnRhdGlvbiB1c2Ugc2VuZGFsbCwgd2hlcmUKKyAgcmVsZXZhbnQsIGluc3RlYWQgc2VuZCBtZXRob2QuCisKKy0gSXNzdWUgIzEyNzk4OiBVcGRhdGVkIHRoZSBtaW1ldHlwZXMgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTI5NDk6IERvY3VtZW50IHRoZSBrd29ubHlhcmdjb3VudCBhcmd1bWVudCBmb3IgdGhlIFB5Q29kZV9OZXcKKyAgQyBBUEkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzEzNTEzOiBGaXggaW8uSU9CYXNlIGRvY3VtZW50YXRpb24gdG8gY29ycmVjdGx5IGxpbmsgdG8gdGhlCisgIGlvLklPQmFzZS5yZWFkbGluZSBtZXRob2QgaW5zdGVhZCBvZiB0aGUgcmVhZGxpbmUgbW9kdWxlLgorCistIElzc3VlICMxMzIzNzogUmVvcmdhbmlzZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRpb24gdG8gZW1waGFzaXNlIGNvbnZlbmllbmNlCisgIGZ1bmN0aW9ucyBhbmQgdGhlIG1vc3QgY29tbW9ubHkgbmVlZGVkIGFyZ3VtZW50cyB0byBQb3Blbi4KKworLSBJc3N1ZSAjMTMxNDE6IERlbW9uc3RyYXRlIHJlY29tbWVuZGVkIHN0eWxlIGZvciBzb2NrZXRzZXJ2ZXIgZXhhbXBsZXMuCisKKy0gSXNzdWUgIzExODE4OiBGaXggdGVtcGZpbGUgZXhhbXBsZXMgZm9yIFB5dGhvbiAzLgorCisKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMj8KID09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IGRlZmJmMjUuLmJiMzdmOWYgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTIsMTAgKzIsMTAgQEAKIFB5dGhvbiBOZXdzCiArKysrKysrKysrKwogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNCByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEJldGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotKk5vdCB5ZXQgcmVsZWFzZWQsIHNlZSBzZWN0aW9ucyBiZWxvdyBmb3IgY2hhbmdlcyByZWxlYXNlZCBpbiAzLjMuMyoKK1JlbGVhc2UgZGF0ZTogMjAxNC0wMS0wNQogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI2LDIzICsyNiwyMjMgQEAKIC0gSXNzdWUgIzE5NTQ1OiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hpbGUgcGFzc2luZyBzdHJheSAlIHRvCiAgIHRpbWUuc3RycHRpbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgogCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTk1ODg6IEZpeGVkIHRlc3RzIGluIHRlc3RfcmFuZG9tIHRoYXQgd2VyZSBzaWxlbnRseSBza2lwcGVkIG1vc3QKKyAgb2YgdGhlIHRpbWUuICBQYXRjaCBieSBKdWxpYW4gR2luZGkuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxOTc4ODoga2lsbF9weXRob24oX2QpLmV4ZSBpcyBub3cgcnVuIGFzIGEgUHJlQnVpbGRFdmVudCBvbiB0aGUKKyAgcHl0aG9uY29yZSBzdWItcHJvamVjdC4gIFRoaXMgc2hvdWxkIHByZXZlbnQgYnVpbGQgZXJyb3JzIGR1ZSBhIHByZXZpb3VzCisgIGJ1aWxkJ3MgcHl0aG9uKF9kKS5leGUgc3RpbGwgcnVubmluZy4KKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMTEtMjQKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gVXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gbW9yZSBwbGFjZXMgaW4gaW1wb3J0LCBlc3BlY2lhbGx5CisgIGV4Y2VwdGlvbnMuCisKKy0gSXNzdWUgIzE5NjE5OiBzdHIuZW5jb2RlLCBieXRlcy5kZWNvZGUgYW5kIGJ5dGVhcnJheS5kZWNvZGUgbm93IHVzZSBhbgorICBpbnRlcm5hbCBBUEkgdG8gdGhyb3cgTG9va3VwRXJyb3IgZm9yIGtub3duIG5vbi10ZXh0IGVuY29kaW5ncywgcmF0aGVyCisgIHRoYW4gYXR0ZW1wdGluZyB0aGUgZW5jb2Rpbmcgb3IgZGVjb2Rpbmcgb3BlcmF0aW9uIGFuZCB0aGVuIHRocm93aW5nIGEKKyAgVHlwZUVycm9yIGZvciBhbiB1bmV4cGVjdGVkIG91dHB1dCB0eXBlLiAoVGhlIGxhdHRlciBtZWNoYW5pc20gcmVtYWlucworICBpbiBwbGFjZSBmb3IgdGhpcmQgcGFydHkgbm9uLXRleHQgZW5jb2RpbmdzKQorCistIElzc3VlICMxOTE4MzogSW1wbGVtZW50IFBFUCA0NTYgJ3NlY3VyZSBhbmQgaW50ZXJjaGFuZ2VhYmxlIGhhc2ggYWxnb3JpdGhtJy4KKyAgUHl0aG9uIG5vdyB1c2VzIFNpcEhhc2gyNCBvbiBhbGwgbWFqb3IgcGxhdGZvcm1zLgorCistIElzc3VlICMxMjg5MjogVGhlIHV0Zi0xNiogYW5kIHV0Zi0zMiogZW5jb2RlcnMgbm8gbG9uZ2VyIGFsbG93IHN1cnJvZ2F0ZSBjb2RlCisgIHBvaW50cyAoVStEODAwLVUrREZGRikgdG8gYmUgZW5jb2RlZC4gIFRoZSB1dGYtMzIqIGRlY29kZXJzIG5vIGxvbmdlciBkZWNvZGUKKyAgYnl0ZSBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4gIFRoZSBzdXJyb2dhdGVwYXNzCisgIGVycm9yIGhhbmRsZXIgbm93IHdvcmtzIHdpdGggdGhlIHV0Zi0xNiogYW5kIHV0Zi0zMiogY29kZWNzLiAgQmFzZWQgb24KKyAgcGF0Y2hlcyBieSBWaWN0b3IgU3Rpbm5lciBhbmQgS2FuZy1IYW8gKEtlbm55KSBMdS4KKworLSBJc3N1ZSAjMTc4MDY6IEFkZGVkIGtleXdvcmQtYXJndW1lbnQgc3VwcG9ydCBmb3IgInRhYnNpemUiIHRvCisgIHN0ci9ieXRlcy5leHBhbmR0YWJzKCkuCisKKy0gSXNzdWUgIzE3ODI4OiBPdXRwdXQgdHlwZSBlcnJvcnMgaW4gc3RyLmVuY29kZSgpLCBieXRlcy5kZWNvZGUoKSBhbmQKKyAgYnl0ZWFycmF5LmRlY29kZSgpIG5vdyBkaXJlY3QgdXNlcnMgdG8gY29kZWNzLmVuY29kZSgpIG9yIGNvZGVjcy5kZWNvZGUoKQorICBhcyBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTc4Mjg6IFRoZSBpbnRlcnByZXRlciBub3cgYXR0ZW1wdHMgdG8gY2hhaW4gZXJyb3JzIHRoYXQgb2NjdXIgaW4KKyAgY29kZWMgcHJvY2Vzc2luZyB3aXRoIGEgcmVwbGFjZW1lbnQgZXhjZXB0aW9uIG9mIHRoZSBzYW1lIHR5cGUgdGhhdAorICBpbmNsdWRlcyB0aGUgY29kZWMgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgZW5zdXJlcyBpdCBvbmx5IGRvZXMgdGhpcworICB3aGVuIHRoZSBjcmVhdGlvbiBvZiB0aGUgcmVwbGFjZW1lbnQgZXhjZXB0aW9uIHdvbid0IGxvc2UgYW55IGluZm9ybWF0aW9uLgorCistIElzc3VlICMxOTQ2NjogQ2xlYXIgdGhlIGZyYW1lcyBvZiBkYWVtb24gdGhyZWFkcyBlYXJsaWVyIGR1cmluZyB0aGUKKyAgUHl0aG9uIHNodXRkb3duIHRvIGNhbGwgb2JqZWN0cyBkZXN0cnVjdG9ycy4gU28gInVuY2xvc2VkIGZpbGUiIHJlc291cmNlCisgIHdhcm5pbmdzIGFyZSBub3cgY29ycmV0bHkgZW1pdHRlZCBmb3IgZGFlbW9uIHRocmVhZHMuCisKKy0gSXNzdWUgIzE5NTE0OiBEZWR1cGxpY2F0ZSBzb21lIF9QeV9JREVOVElGSUVSIGRlY2xhcmF0aW9ucy4KKyAgUGF0Y2ggYnkgQW5kcmVpIERvcmlhbiBEdW1hLgorCistIElzc3VlICMxNzkzNjogRml4IE8obioqMikgYmVoYXZpb3VyIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIG1hbnkgc3ViY2xhc3NlcworICBvZiBhIGdpdmVuIHR5cGUuCisKKy0gSXNzdWUgIzE5NDI4OiB6aXBpbXBvcnQgbm93IGhhbmRsZXMgZXJyb3JzIHdoZW4gcmVhZGluZyB0cnVuY2F0ZWQgb3IgaW52YWxpZAorICBaSVAgYXJjaGl2ZS4KKworLSBJc3N1ZSAjMTg0MDg6IEFkZCBhIG5ldyBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcigpIGZ1bmN0aW9uIHRvIGhhbmRsZQorICBleGNlcHRpb25zIHdoZW4gbWVyZ2luZyBmYXN0IGxvY2FscyBpbnRvIGZfbG9jYWxzIG9mIGEgZnJhbWUuCisgIFB5RXZhbF9HZXRMb2NhbHMoKSBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIE5VTEwgb24gZmFpbHVyZS4KKworLSBJc3N1ZSAjMTkzNjk6IE9wdGltaXplZCB0aGUgdXNhZ2Ugb2YgX19sZW5ndGhfaGludF9fKCkuCisKKy0gSXNzdWUgIzE4NjAzOiBFbnN1cmUgdGhhdCBQeU9TX215c3RyaWNtcCBhbmQgUHlPU19teXN0cm5pY21wIGFyZSBpbiB0aGUKKyAgUHl0aG9uIGV4ZWN1dGFibGUgYW5kIG5vdCByZW1vdmVkIGJ5IHRoZSBsaW5rZXIncyBvcHRpbWl6ZXIuCisKKy0gSXNzdWUgIzE5MzA2OiBBZGQgZXh0cmEgaGludHMgdG8gdGhlIGZhdWx0aGFuZGxlciBtb2R1bGUncyBzdGFjaworICBkdW1wcyB0aGF0IHRoZXNlIGFyZSAidXBzaWRlIGRvd24iLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzMxNTg6IGRvY3Rlc3QgY2FuIG5vdyBmaW5kIGRvY3Rlc3RzIGluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcworICB3cml0dGVuIGluIEMuCisKKy0gSXNzdWUgIzEzNDc3OiBBZGRlZCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHRoZSB0YXJmaWxlIG1vZHVsZS4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTk2NzQ6IGluc3BlY3Quc2lnbmF0dXJlKCkgbm93IHByb2R1Y2VzIGEgY29ycmVjdCBzaWduYXR1cmUKKyAgZm9yIHNvbWUgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE5NzIyOiBBZGRlZCBvcGNvZGUuc3RhY2tfZWZmZWN0KCksIHdoaWNoCisgIGNvbXB1dGVzIHRoZSBzdGFjayBlZmZlY3Qgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgorCistIElzc3VlICMxOTczNTogSW1wbGVtZW50IHByaXZhdGUgZnVuY3Rpb24gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKSB0bworICBjcmVhdGUgU1NMQ29udGV4dCBvYmplY3RzIGluIFB5dGhvbidzIHN0ZGxpYiBtb2R1bGUuIEl0IHByb3ZpZGVzIGEgc2luZ2xlCisgIGNvbmZpZ3VyYXRpb24gcG9pbnQgYW5kIG1ha2VzIHVzZSBvZiBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpLgorCistIElzc3VlICMxNjIwMzogQWRkIHJlLmZ1bGxtYXRjaCgpIGZ1bmN0aW9uIGFuZCByZWdleC5mdWxsbWF0Y2goKSBtZXRob2QsCisgIHdoaWNoIGFuY2hvciB0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzU5MjogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG9iamVjdHMuCisgIEJhc2VkIG9uIHBhdGNoIGJ5IEh1Z28gTG9wZXMgVGF2YXJlcy4KKworLSBJc3N1ZSAjMTk2NDE6IEFkZGVkIHRoZSBhdWRpb29wLmJ5dGVzd2FwKCkgZnVuY3Rpb24gdG8gY29udmVydCBiaWctZW5kaWFuCisgIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4KKworLSBJc3N1ZSAjMTUyMDQ6IERlcHJlY2F0ZWQgdGhlICdVJyBtb2RlIGluIGZpbGUtbGlrZSBvYmplY3RzLgorCistIElzc3VlICMxNzgxMDogSW1wbGVtZW50IFBFUCAzMTU0LCBwaWNrbGUgcHJvdG9jb2wgNC4KKworLSBJc3N1ZSAjMTk2Njg6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjcDExMjUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE5Njg5OiBBZGQgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSBmYWN0b3J5IGZ1bmN0aW9uLiBJdCBjcmVhdGVzCisgIGEgbmV3IFNTTENvbnRleHQgb2JqZWN0IHdpdGggc2VjdXJlIGRlZmF1bHQgc2V0dGluZ3MuCisKKy0gSXNzdWUgIzE5NzI3OiBvcy51dGltZSguLi4sIE5vbmUpIGlzIG5vdyBwb3RlbnRpYWxseSBtb3JlIHByZWNpc2UKKyAgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTcyMDE6IFpJUDY0IGV4dGVuc2lvbnMgbm93IGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBQYXRjaCBieQorICBXaWxsaWFtIE1hbGxhcmQuCisKKy0gSXNzdWUgIzE5MjkyOiBBZGQgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMoKSB0byBsb2FkIGRlZmF1bHQgcm9vdCBDQQorICBjZXJ0aWZpY2F0ZXMgZnJvbSBkZWZhdWx0IHN0b3JlcyBvciBzeXN0ZW0gc3RvcmVzLiBCeSBkZWZhdWx0IHRoZSBtZXRob2QKKyAgbG9hZHMgQ0EgY2VydHMgZm9yIGF1dGhlbnRpY2F0aW9uIG9mIHNlcnZlciBjZXJ0cy4KKworLSBJc3N1ZSAjMTk2NzM6IEFkZCBwYXRobGliIHRvIHRoZSBzdGRsaWIgYXMgYSBwcm92aXNpb25hbCBtb2R1bGUgKFBFUCA0MjgpLgorCistIElzc3VlICMxNjU5NjogcGRiIGluIGEgZ2VuZXJhdG9yIG5vdyBwcm9wZXJseSBza2lwcyBvdmVyIHlpZWxkIGFuZAorICB5aWVsZCBmcm9tIHJhdGhlciB0aGFuIHN0ZXBwaW5nIG91dCBvZiB0aGUgZ2VuZXJhdG9yIGludG8gaXRzCisgIGNhbGxlci4gIChUaGlzIGlzIGVzc2VudGlhbCBmb3Igc3RlcHBpbmcgdGhyb3VnaCBhc3luY2lvIGNvcm91dGluZXMuKQorCistIElzc3VlICMxNzkxNjogQWRkZWQgZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKCkgYW5kCisgIGRpcy5CeXRlY29kZS5jdXJyZW50X29mZnNldCB0byBlYXNpbHkgZGlzcGxheSAiY3VycmVudCBpbnN0cnVjdGlvbiIKKyAgbWFya2VycyBpbiB0aGUgbmV3IGRpc2Fzc2VtYmx5IEFQSSAoUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKS4KKworLSBJc3N1ZSAjMTk1NTI6IHZlbnYgbm93IHN1cHBvcnRzIGJvb3RzdHJhcHBpbmcgcGlwIGludG8gdmlydHVhbCBlbnZpcm9ubWVudHMKKworLSBJc3N1ZSAjMTcxMzQ6IEZpbmFsaXplIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0aWZpY2F0ZSBzdG9yZS4gQ2VydCBhbmQKKyAgQ1JMIGVudW1lcmF0aW9uIGFyZSBub3cgdHdvIGZ1bmN0aW9ucy4gZW51bV9jZXJ0aWZpY2F0ZXMoKSBhbHNvIHJldHVybnMKKyAgcHVycG9zZSBmbGFncyBhcyBzZXQgb2YgT0lEcy4KKworLSBJc3N1ZSAjMTk1NTU6IFJlc3RvcmUgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLCAoYW5kIHRoZSBkaXN0dXRpbHMKKyAgZXF1aXZhbGVudCkgd2l0aCBhIERlcHJlY2F0aW9uV2FybmluZyBwb2ludGluZyBwZW9wbGUgYXQgJEVYVF9TVUZGSVguCisKKy0gSXNzdWUgIzg4MTM6IEFkZCBTU0xDb250ZXh0LnZlcmlmeV9mbGFncyB0byBjaGFuZ2UgdGhlIHZlcmlmaWNhdGlvbiBmbGFncworICBvZiB0aGUgY29udGV4dCBpbiBvcmRlciB0byBlbmFibGUgY2VydGlmaWNhdGlvbiByZXZvY2F0aW9uIGxpc3QgKENSTCkKKyAgY2hlY2tzIG9yIHN0cmljdCBYNTA5IHJ1bGVzLgorCistIElzc3VlICMxODI5NDogRml4IHRoZSB6bGliIG1vZHVsZSB0byBtYWtlIGl0IDY0LWJpdCBzYWZlLgorCistIElzc3VlICMxOTY4MjogRml4IGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBvbGQgdmVyc2lvbiBvZiBPcGVuU1NMIHRoYXQKKyAgd2FzIGludHJvZHVjZWQgYnkgSXNzdWUgIzE4Mzc5LgorCistIElzc3VlICMxNDQ1NTogcGxpc3RsaWIgbm93IHN1cHBvcnRzIGJpbmFyeSBwbGlzdHMgYW5kIGhhcyBhbiB1cGRhdGVkIEFQSS4KKwogLSBJc3N1ZSAjMTk2MzM6IEZpeGVkIHdyaXRpbmcgbm90IGNvbXByZXNzZWQgMTYtIGFuZCAzMi1iaXQgd2F2ZSBmaWxlcyBvbgogICBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjMTgzNzk6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIHJldHVybnMgQ0EgaXNzdWVyIEFJQSBmaWVsZHMsIE9DU1AKKyAgYW5kIENSTCBkaXN0cmlidXRpb24gcG9pbnRzLgorCistIElzc3VlICMxODEzODogSW1wbGVtZW50IGNhZGF0YSBhcmd1bWVudCBvZiBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uKCkKKyAgdG8gbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIENSTCBmcm9tIG1lbW9yeS4gSXQgc3VwcG9ydHMgUEVNIGFuZCBERVIKKyAgZW5jb2RlZCBzdHJpbmdzLgorCistIElzc3VlICMxODc3NTogQWRkIG5hbWUgYW5kIGJsb2NrX3NpemUgYXR0cmlidXRlIHRvIEhNQUMgb2JqZWN0LiBUaGV5IG5vdworICBwcm92aWRlIHRoZSBzYW1lIEFQSSBlbGVtZW50cyBhcyBub24ta2V5ZWQgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTcyNzY6IE1ENSBhcyBkZWZhdWx0IGRpZ2VzdG1vZCBmb3IgSE1BQyBpcyBkZXByZWNhdGVkLiBUaGUgSE1BQworICBtb2R1bGUgc3VwcG9ydHMgZGlnZXN0bW9kIG5hbWVzLCBlLmcuIGhtYWMuSE1BQygnc2hhMScpLgorCiAtIElzc3VlICMxOTQ0OTogaW4gY3N2J3Mgd3JpdGVyb3csIGhhbmRsZSBub24tc3RyaW5nIGtleXMgd2hlbiBnZW5lcmF0aW5nIHRoZQogICBlcnJvciBtZXNzYWdlIHRoYXQgY2VydGFpbiBrZXlzIGFyZSBub3QgaW4gdGhlICdmaWVsZG5hbWVzJyBsaXN0LgogCistIElzc3VlICMxMzYzMzogQWRkZWQgYSBuZXcgY29udmVydF9jaGFycmVmcyBrZXl3b3JkIGFyZyB0byBIVE1MUGFyc2VyIHRoYXQsCisgIHdoZW4gVHJ1ZSwgYXV0b21hdGljYWxseSBjb252ZXJ0cyBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzI5Mjc6IEFkZGVkIHRoZSB1bmVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBodG1sIG1vZHVsZS4KKworLSBJc3N1ZSAjODQwMjogQWRkZWQgdGhlIGVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBnbG9iIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc2MTg6IEFkZCBCYXNlODUgYW5kIEFzY2lpODUgZW5jb2RpbmcvZGVjb2RpbmcgdG8gdGhlIGJhc2U2NCBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NjM0OiB0aW1lLnN0cmZ0aW1lKCIleSIpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIG9uIEFJWCB3aGVuIGdpdmVuIGEKKyAgeWVhciBiZWZvcmUgMTkwMC4KKwogLSBGaXggdGVzdC5zdXBwb3J0LmJpbmRfcG9ydCgpIHRvIG5vdCBjYXVzZSBhbiBlcnJvciB3aGVuIFB5dGhvbiB3YXMgY29tcGlsZWQKICAgb24gYSBzeXN0ZW0gd2l0aCBTT19SRVVTRVBPUlQgZGVmaW5lZCBpbiB0aGUgaGVhZGVycyBidXQgcnVuIG9uIGEgc3lzdGVtCiAgIHdpdGggYW4gT1Mga2VybmVsIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGF0IHJlYXNvbmFibHkgbmV3IHNvY2tldCBvcHRpb24uCiAKIC0gRml4IGNvbXBpbGF0aW9uIGVycm9yIHVuZGVyIGdjYyBvZiB0aGUgY3R5cGVzIG1vZHVsZSBidW5kbGVkIGxpYmZmaSBmb3IgYXJtLgogCistIElzc3VlICMxOTQ0ODogQWRkIHByaXZhdGUgQVBJIHRvIFNTTCBtb2R1bGUgdG8gbG9va3VwIEFTTi4xIG9iamVjdHMgYnkgT0lELAorICBOSUQsIHNob3J0IG5hbWUgYW5kIGxvbmcgbmFtZS4KKworLSBJc3N1ZSAjMTkyODI6IGRibS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAoSW5pdGFsCisgIHBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKworLSBJc3N1ZSAjODMxMTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhaWZjLAorICBzdW5hdSwgYW5kIHdhdmUgbW9kdWxlcy4KKworLSBJc3N1ZSAjNTIwMjogQWRkZWQgc3VwcG9ydCBmb3IgdW5zZWVrYWJsZSBmaWxlcyBpbiB0aGUgd2F2ZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjMTE4MDogUmVzdG9yZSBnbG9iYWwgb3B0aW9uIHRvIGlnbm9yZQorICB+Ly5weWRpc3R1dGlscy5jZmcgaW4gRGlzdHV0aWxzLCBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiBiYWNrb3V0IG9mCisgIGRpc3R1dGlsczIgY2hhbmdlcy4KKwogLSBJc3N1ZSAjMTk1MjM6IENsb3NlZCBGaWxlSGFuZGxlciBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gZGVsYXkgd2FzIHNldC4KIAorLSBJc3N1ZSAjMTk1NDQgYW5kICM2NTE2OiBSZXN0b3JlIHN1cHBvcnQgZm9yIC0tdXNlciBhbmQgLS1ncm91cCBwYXJhbWV0ZXJzIHRvCisgIHNkaXN0IGNvbW1hbmQgYWNjaWRlbnRhbGx5IHJvbGxlZCBiYWNrIGFzIHBhcnQgb2YgdGhlIGRpc3R1dGlsczIgcm9sbGJhY2suCisKIC0gSXNzdWUgIzEzNjc0OiBQcmV2ZW50ZWQgdGltZS5zdHJmdGltZSBmcm9tIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBnaXZlbgogICBhIHllYXIgYmVmb3JlIDE5MDAgYW5kIGEgZm9ybWF0IG9mICV5LgogCistIElzc3VlICMxOTQwNjogaW1wbGVtZW50YXRpb24gb2YgdGhlIGVuc3VyZXBpcCBtb2R1bGUgKHBhcnQgb2YgUEVQIDQ1MykuCisgIFBhdGNoIGJ5IERvbmFsZCBTdHVmZnQgYW5kIE5pY2sgQ29naGxhbi4KKwogLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM2Mjg2OiBSZXN0b3JlIHVzZSBvZiB1cmxsaWIgb3ZlciBodHRwIGFsbG93aW5nIHVzZQogICBvZiBodHRwX3Byb3h5IGZvciBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQsIGEgZmVhdHVyZSBhY2NpZGVudGFsbHkgbG9zdAogICBpbiB0aGUgcm9sbGJhY2sgb2YgZGlzdHV0aWxzMi4KQEAgLTUxLDE3MiArMjUxLDczIEBACiAgIGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbk1ldGFkYXRhIGFjY2lkZW50YWxseSByZW1vdmVkIGluIHRoZSB1bmRvIG9mCiAgIGRpc3R1dGlsczIuCiAKKy0gSXNzdWUgIzE2Njg1OiBBZGRlZCBzdXBwb3J0IGZvciBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhdWRpb29wIG1vZHVsZS4KKyAgUmVtb3ZlZCBzdXBwb3J0IGZvciBzdHJpbmdzLgorCistIElzc3VlICM3MTcxOiBBZGQgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBgYGluZXRfbnRvcGBgIGFuZCBgYGluZXRfcHRvbmBgCisgIHRvIHNvY2tldCBtb2R1bGUuIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxOTI2MTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyAyNC1iaXQgc2FtcGxlcyBpbiB0aGUgc3VuYXUgbW9kdWxlLgorCistIElzc3VlICMxMDk3Nzk3OiBBZGRlZCBDUDI3MyBlbmNvZGluZywgdXNlZCBvbiBJQk0gbWFpbmZyYW1lcyBpbgorICBHZXJtYW55IGFuZCBBdXN0cmlhLiAgTWFwcGluZyBwcm92aWRlZCBieSBNaWNoYWVsIEJpZXJlbmZlbGQuCisKIC0gSXNzdWUgIzE1NzUwMjA6IEZpeGVkIHN1cHBvcnQgb2YgMjQtYml0IHdhdmUgZmlsZXMgb24gYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCiAKLS0gSXNzdWUgIzE5NDgwOiBIVE1MUGFyc2VyIG5vdyBhY2NlcHRzIGFsbCB2YWxpZCBzdGFydC10YWcgbmFtZXMgYXMgZGVmaW5lZAotICBieSB0aGUgSFRNTDUgc3RhbmRhcmQuCistIElzc3VlICMxOTM3ODogRml4ZWQgYSBudW1iZXIgb2YgY2FzZXMgaW4gdGhlIGRpcyBtb2R1bGUgd2hlcmUgdGhlIG5ldworICAiZmlsZSIgcGFyYW1ldGVyIHdhcyBub3QgYmVpbmcgaG9ub3VyZWQgY29ycmVjdGx5CiAKLS0gSXNzdWUgIzYxNTc6IEZpeGVkIHRraW50ZXIuVGV4dC5kZWJ1ZygpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCistIElzc3VlICMxOTM3ODogUmVtb3ZlZCB0aGUgImRpcy5CeXRlY29kZS5zaG93X2luZm8iIG1ldGhvZAorCistIElzc3VlICMxOTM3ODogUmVuYW1lZCB0aGUgImRpcy5CeXRlY29kZS5kaXNwbGF5X2NvZGUiIG1ldGhvZCB0bworICAiZGlzLkJ5dGVjb2RlLmRpcyIgYW5kIGNvbnZlcnRlZCBpdCB0byByZXR1cm5pbmcgYSBzdHJpbmcgcmF0aGVyIHRoYW4KKyAgcHJpbnRpbmcgb3V0cHV0LgorCistIElzc3VlICMxOTM3ODogdGhlICJsaW5lX29mZnNldCIgcGFyYW1ldGVyIGluIHRoZSBuZXcgImRpcy5nZXRfaW5zdHJ1Y3Rpb25zIgorICBBUEkgaGFzIGJlZW4gcmVuYW1lZCB0byAiZmlyc3RfbGluZSIgKGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgdXNhZ2UKKyAgY2hhbmdlZCBhY2NvcmRpbmdseSkuIFRoaXMgc2hvdWxkIHJlZHVjZSBjb25mdXNpb24gd2l0aCB0aGUgbW9yZSBjb21tb24gdXNlCisgIG9mICJvZmZzZXQiIGluIHRoZSBkaXMgZG9jcyB0byByZWZlciB0byBieXRlY29kZSBvZmZzZXRzLgorCistIElzc3VlICMxODY3ODogQ29ycmVjdGVkIHNwd2Qgc3RydWN0IG1lbWJlciBuYW1lcyBpbiBzcHdkIG1vZHVsZToKKyAgc3BfbmFtLT5zcF9uYW1wLCBhbmQgc3BfcHdkLT5zcF9wd2RwLiAgVGhlIG9sZCBuYW1lcyBhcmUga2VwdCBhcyBleHRyYQorICBzdHJ1Y3RzZXEgbWVtYmVycywgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKy0gSXNzdWUgIzYxNTc6IEZpeGVkIHRraW50ZXIuVGV4dC5kZWJ1ZygpLiAgdGtpbnRlci5UZXh0LmJib3goKSBub3cgcmFpc2VzCisgIFR5cGVFcnJvciBpbnN0ZWFkIG9mIFRjbEVycm9yIG9uIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMuICBPcmlnaW5hbCBwYXRjaAorICBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTAxOTc6IFJld29yayBzdWJwcm9jZXNzLmdldFtzdGF0dXNdb3V0cHV0IHRvIHVzZSBzdWJwcm9jZXNzCisgIGZ1bmN0aW9uYWxpdHkgYW5kIHRodXMgdG8gd29yayBvbiBXaW5kb3dzLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4KIAogLSBJc3N1ZSAjNjE2MDogVGhlIGJib3goKSBtZXRob2Qgb2YgdGtpbnRlci5TcGluYm94IG5vdyByZXR1cm5zIGEgdHVwbGUgb2YKICAgaW50ZWdlcnMgaW5zdGVhZCBvZiBhIHN0cmluZy4gIEJhc2VkIG9uIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgogCi0tIElzc3VlICMxMDE5NzogUmV3b3JrIHN1YnByb2Nlc3MuZ2V0W3N0YXR1c11vdXRwdXQgdG8gdXNlIHN1YnByb2Nlc3MKLSAgZnVuY3Rpb25hbGl0eSBhbmQgdGh1cyB0byB3b3JrIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbi4KKy0gSXNzdWUgIzE5NDAzOiBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dCBpcyBub3cgcmVlbnRyYW50CiAKIC0gSXNzdWUgIzE5Mjg2OiBEaXJlY3RvcmllcyBpbiBgYHBhY2thZ2VfZGF0YWBgIGFyZSBubyBsb25nZXIgYWRkZWQgdG8KICAgdGhlIGZpbGVsaXN0LCBwcmV2ZW50aW5nIGZhaWx1cmUgb3V0bGluZWQgaW4gdGhlIHRpY2tldC4KIAotVGVzdHMKLS0tLS0tCistIElzc3VlICMxOTQ4MDogSFRNTFBhcnNlciBub3cgYWNjZXB0cyBhbGwgdmFsaWQgc3RhcnQtdGFnIG5hbWVzIGFzIGRlZmluZWQKKyAgYnkgdGhlIEhUTUw1IHN0YW5kYXJkLgogCi0tIElzc3VlICMxOTU4ODogRml4ZWQgdGVzdHMgaW4gdGVzdF9yYW5kb20gdGhhdCB3ZXJlIHNpbGVudGx5IHNraXBwZWQgbW9zdAotICBvZiB0aGUgdGltZS4gIFBhdGNoIGJ5IEp1bGlhbiBHaW5kaS4KKy0gSXNzdWUgIzE1MTE0OiBUaGUgaHRtbC5wYXJzZXIgbW9kdWxlIG5vdyByYWlzZXMgYSBEZXByZWNhdGlvbldhcm5pbmcgd2hlbiB0aGUKKyAgc3RyaWN0IGFyZ3VtZW50IG9mIEhUTUxQYXJzZXIgb3IgdGhlIEhUTUxQYXJzZXIuZXJyb3IgbWV0aG9kIGFyZSB1c2VkLgogCi0tIElzc3VlICMxOTU5NjogU2V0IHVudGVzdGFibGUgdGVzdHMgaW4gdGVzdF9pbXBvcnRsaWIgdG8gTm9uZSB0byBhdm9pZAotICByZXBvcnRpbmcgc3VjY2VzcyBvbiBlbXB0eSB0ZXN0cy4KKy0gSXNzdWUgIzE5NDEwOiBVbmRvIHRoZSBzcGVjaWFsLWNhc2luZyByZW1vdmFsIG9mICcnIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIuCiAKLS0gSXNzdWUgIzE5NDQwOiBDbGVhbiB1cCB0ZXN0X2NhcGkgYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgX19mdXR1cmVfXwotICBpbXBvcnQsIGNvbnZlcnRpbmcgZnJvbSB0ZXN0X21haW4gdG8gdW5pdHRlc3QubWFpbiwgYW5kIHJ1bm5pbmcgdGhlCi0gIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgd2l0aGluIGEgdW5pdHRlc3QgVGVzdENhc2UuCi0KLS0gSXNzdWUgIzE4NzAyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KLQotLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxODMyNjogQ2xhcmlmeSB0aGF0IGxpc3Quc29ydCdzIGFyZ3VtZW50cyBhcmUga2V5d29yZC1vbmx5LiAgQWxzbywKLSAgYXR0ZW1wdCB0byByZWR1Y2UgY29uZnVzaW9uIGluIHRoZSBnbG9zc2FyeSBieSBub3Qgc2F5aW5nIHRoZXJlIGFyZQotICBkaWZmZXJlbnQgInR5cGVzIiBvZiBhcmd1bWVudHMgYW5kIHBhcmFtZXRlcnMuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxOTc4ODoga2lsbF9weXRob24oX2QpLmV4ZSBpcyBub3cgcnVuIGFzIGEgUHJlQnVpbGRFdmVudCBvbiB0aGUKLSAgcHl0aG9uY29yZSBzdWItcHJvamVjdC4gIFRoaXMgc2hvdWxkIHByZXZlbnQgYnVpbGQgZXJyb3JzIGR1ZSBhIHByZXZpb3VzCi0gIGJ1aWxkJ3MgcHl0aG9uKF9kKS5leGUgc3RpbGwgcnVubmluZy4KLQotLSBBZGQgd29ya2Fyb3VuZCBmb3IgVlMgMjAxMCBubWFrZSBjbGVhbiBpc3N1ZS4gVlMgMjAxMCBkb2Vzbid0IHNldCB1cCBQQVRICi0gIGZvciBubWFrZS5leGUgY29ycmVjdGx5LgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDE3LU5vdi0yMDEzKgotCi1ObyBjaGFuZ2VzIGZyb20gcmVsZWFzZSBjYW5kaWRhdGUgMi4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMyByZWxlYXNlIGNhbmRpZGF0ZSAyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTEtTm92LTIwMTMqCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkyMjc6IEFueSByZS1zZWVkaW5nIG9mIHRoZSBPcGVuU1NMIFJORyBvbiBmb3JrIGhhcyBiZWVuIHJlbW92ZWQ7Ci0gIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgT3BlblNTTCBpdHNlbGYgb3IgYnkgdGhlIGFwcGxpY2F0aW9uLgorLSBJc3N1ZSAjMTk0MjQ6IEZpeCB0aGUgd2FybmluZ3MgbW9kdWxlIHRvIGFjY2VwdCBmaWxlbmFtZSBjb250YWluaW5nIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXJzLgogCiAtIElzc3VlICMxOTQzNTogRml4IGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrIG9uIENHSUh0dHBSZXF1ZXN0SGFuZGxlci4KIAotVGVzdHMKLS0tLS0tCistIElzc3VlICMxOTIyNzogUmVtb3ZlIHB0aHJlYWRfYXRmb3JrKCkgaGFuZGxlci4gVGhlIGhhbmRsZXIgd2FzIGFkZGVkIHRvCisgIHNvbHZlICMxODc0NyBidXQgaGFzIGNhdXNlZCBpc3N1ZXMuCiAKLS0gSXNzdWUgIzE4OTY0OiBGaXggdGVzdF90Y2wgd2hlbiBydW4gd2l0aCBUY2wvVGsgdmVyc2lvbnMgIDwgOC41LgorLSBJc3N1ZSAjMTk0MjA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBtb2R1bGUgaW5pdGFsaXphdGlvbiBjb2RlIG9mCisgIF9oYXNob3BlbnNzbC5jCiAKLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNTY2MzogUmV2ZXJ0IE9TIFggaW5zdGFsbGVyIGJ1aWx0LWluIFRjbC9UayBzdXBwb3J0IGZvciAzLjMuMy4KLSAgU29tZSB0aGlyZC1wYXJ0eSBwcm9qZWN0cywgc3VjaCBhcyBNYXRwbG90bGliIGFuZCBQSUwvUGlsbG93LAotICBkZXBlbmRlZCBvbiBiZWluZyBhYmxlIHRvIGJ1aWxkIHdpdGggVGNsIGFuZCBUayBmcmFtZXdvcmtzIGluCi0gIC9MaWJyYXJ5L0ZyYW1ld29ya3MuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjMgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI3LU9jdC0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTg2MDM6IEVuc3VyZSB0aGF0IFB5T1NfbXlzdHJpY21wIGFuZCBQeU9TX215c3RybmljbXAgYXJlIGluIHRoZQotICBQeXRob24gZXhlY3V0YWJsZSBhbmQgbm90IHJlbW92ZWQgYnkgdGhlIGxpbmtlcidzIG9wdGltaXplci4KLQotLSBJc3N1ZSAjMTkyNzk6IFVURi03IGRlY29kZXIgbm8gbW9yZSBwcm9kdWNlcyBpbGxlZ2FsIHN0cmluZ3MuCi0KLS0gRml4IG1hY3JvIGV4cGFuc2lvbiBvZiBfUHlFcnJfT0NDVVJSRUQoKSwgYW5kIG1ha2Ugc3VyZSB0byB1c2UgaXQgaW4gYXQKLSAgbGVhc3Qgb25lIHBsYWNlIHNvIGFzIHRvIGF2b2lkIHJlZ3Jlc3Npb25zLgotCi0tIElzc3VlICMxOTAxNDogbWVtb3J5dmlldy5jYXN0KCkgaXMgbm93IGFsbG93ZWQgb24gemVyby1sZW5ndGggdmlld3MuCi0KLS0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0Ci0gIGFic3VyZGx5IGhpZ2guCi0KLS0gSXNzdWUgIzE4OTQyOiBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSBvdXRwdXQgd2FzIGRhbWFnZWQgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgotCi0tIElzc3VlICMxODM2ODogUHlPU19TdGRpb1JlYWRsaW5lKCkgbm8gbG9uZ2VyIGxlYWtzIG1lbW9yeSB3aGVuIHJlYWxsb2MoKQotICBmYWlscy4KLQotLSBJc3N1ZSAjMTY3NDE6IEZpeCBhbiBlcnJvciByZXBvcnRpbmcgaW4gaW50KCkuCi0KLS0gSXNzdWUgIzE3ODk5OiBGaXggcmFyZSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBvcy5saXN0ZGlyKCkuCi0KLS0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCi0gIG9iajJhc3Rfb2JqZWN0KCkuCi0KLS0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KLQotLSBJc3N1ZSAjMTU5MDU6IEZpeCB0aGVvcmV0aWNhbCBidWZmZXIgb3ZlcmZsb3cgaW4gaGFuZGxpbmcgb2Ygc3lzLmFyZ3ZbMF0sCi0gIHByZWZpeCBhbmQgZXhlY19wcmVmaXggaWYgdGhlIG9wZXJhdGlvbiBzeXN0ZW0gZG9lcyBub3Qgb2JleSBNQVhQQVRITEVOLgotCi0tIElzc3VlICMxODM0NDogRml4IHBvdGVudGlhbCByZWYtbGVha3MgaW4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKCkuCi0KLS0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCi0gIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCi0KLS0gSXNzdWUgIzE4NDI2OiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEMgZXh0ZW5zaW9uIGltcG9ydCB3aGVuCi0gIFB5TW9kdWxlX0dldERlZigpIHJldHVybnMgYW4gZXJyb3IuCi0KLS0gSXNzdWUgIzE4MzI4OiBSZW9yZGVyIG9wcyBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZSooKSBmdW5jdGlvbnMuIE5vdyB0aGUKLSAgdHN0YXRlIGlzIGZpcnN0IHJlbW92ZWQgZnJvbSBUTFMgYW5kIHRoZW4gZGVhbGxvY2F0ZWQuCi0KLS0gSXNzdWUgIzE4MTg0OiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGFuZCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2UKLSAgT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGFyZ3VtZW50IG9mICVjIGZvcm1hdCBpcyBvdXQgb2YgcmFuZ2UuCi0KLS0gSXNzdWUgIzE4MTM3OiBEZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBvbiBwcmVjaXNpb24gaW4gZmxvYXQuX19mb3JtYXRfXygpCi0gIGFuZCBjb21wbGV4Ll9fZm9ybWF0X18oKS4KLQotLSBJc3N1ZSAjMTgxODM6IEZpeCB2YXJpb3VzIHVuaWNvZGUgb3BlcmF0aW9ucyBvbiBzdHJpbmdzIHdpdGggbGFyZ2UgdW5pY29kZQotICBjb2RlcG9pbnRzLgotCi0tIElzc3VlICMxODE4MDogRml4IHJlZiBsZWFrIGluIF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cygpLgotCi0tIElzc3VlICMxODAzODogU3ludGF4RXJyb3IgcmFpc2VkIGR1cmluZyBjb21waWxhdGlvbiBzb3VyY2VzIHdpdGggaWxsZWdhbAotICBlbmNvZGluZyBub3cgYWx3YXlzIGNvbnRhaW5zIGFuIGVuY29kaW5nIG5hbWUuCi0KLS0gSXNzdWUgIzE3NjQ0OiBGaXggYSBjcmFzaCBpbiBzdHIuZm9ybWF0IHdoZW4gY3VybHkgYnJhY2VzIGFyZSB1c2VkIGluIHNxdWFyZQotICBicmFja2V0cy4KLQotLSBJc3N1ZSAjMTc5ODM6IFJhaXNlIGEgU3ludGF4RXJyb3IgZm9yIGEgYGBnbG9iYWwgX19jbGFzc19fYGAgc3RhdGVtZW50IGluIGEKLSAgY2xhc3MgYm9keS4KLQotLSBJc3N1ZSAjMTc5Mjc6IEZyYW1lIG9iamVjdHMga2VwdCBhcmd1bWVudHMgYWxpdmUgaWYgdGhleSBoYWQgYmVlbiBjb3BpZWQgaW50bwotICBhIGNlbGwsIGV2ZW4gaWYgdGhlIGNlbGwgd2FzIGNsZWFyZWQuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkzOTU6IFJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIGF0dGVtcHRpbmcgdG8gcGlja2xlIGEgYnoyIG9yIGx6bWEKLSAgY29tcHJlc3Nvci9kZWNvbXByZXNzb3Igb2JqZWN0LCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIHBpY2tsZSB0aGF0IHdvdWxkCi0gIGNhdXNlIGEgc2VnZmF1bHQgd2hlbiBsb2FkZWQgYW5kIHVzZWQuCistIElzc3VlICMxOTMyOTogT3B0aW1pemVkIGNvbXBpbGluZyBjaGFyc2V0cyBpbiByZWd1bGFyIGV4cHJlc3Npb25zLgogCiAtIElzc3VlICMxOTIyNzogVHJ5IHRvIGZpeCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHJlLXNlZWRpbmcgdGhlbiBPcGVuU1NMCiAgIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvbiBmb3JrKCkuCkBAIC0yMzksMTIgKzM0MCwzMCBAQAogLSBJc3N1ZSAjMTYwMzk6IENWRS0yMDEzLTE3NTI6IENoYW5nZSB1c2Ugb2YgcmVhZGxpbmUgaW4gaW1hcGxpYiBtb2R1bGUgdG8gbGltaXQKICAgbGluZSBsZW5ndGguICBQYXRjaCBieSBFbWlsIExpbmQuCiAKKy0gSXNzdWUgIzE5MzMwOiB0aGUgdW5uZWNlc3Nhcnkgd3JhcHBlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQgYW5kCisgIGNvbnRleHRsaWIuc3VwcHJlc3MgY29udGV4dCBtYW5hZ2Vycywgd2hpY2ggYWxzbyBlbnN1cmVzIHRoZXkgcHJvdmlkZQorICByZWFzb25hYmxlIGhlbHAoKSBvdXRwdXQgb24gaW5zdGFuY2VzCisKIC0gSXNzdWUgIzE5MzkzOiBGaXggc3ltdGFibGUuc3ltdGFibGUgZnVuY3Rpb24gdG8gbm90IGJlIGNvbmZ1c2VkIHdoZW4gdGhlcmUgYXJlCiAgIGZ1bmN0aW9ucyBvciBjbGFzc2VzIG5hbWVkICJ0b3AiLgogCistIElzc3VlICMxODY4NTogUmVzdG9yZSByZSBwZXJmb3JtYW5jZSB0byBwcmUtUEVQIDM5MyBsZXZlbHMuCisKIC0gSXNzdWUgIzE5MzM5OiB0ZWxuZXRsaWIgbW9kdWxlIGlzIG5vdyB1c2luZyB0aW1lLm1vbm90b25pYygpIHdoZW4gYXZhaWxhYmxlCiAgIHRvIGNvbXB1dGUgdGltZW91dC4KIAorLSBJc3N1ZSAjMTkzOTk6IGZpeCBzcG9yYWRpYyB0ZXN0X3N1YnByb2Nlc3MgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTMyMzQ6IEZpeCBvcy5saXN0ZGlyIHRvIHdvcmsgd2l0aCBleHRlbmRlZCBwYXRocyBvbiBXaW5kb3dzLgorICBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKworLSBJc3N1ZSAjMTkzNzU6IFRoZSBzaXRlIG1vZHVsZSBhZGRpbmcgYSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB0byBzeXMucGF0aCwKKyAgaWYgaXQgZXhpc3RzLCBpcyBub3cgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTkzNzk6IExhemlseSBpbXBvcnQgbGluZWNhY2hlIGluIHRoZSB3YXJuaW5ncyBtb2R1bGUsIHRvIG1ha2UKKyAgc3RhcnR1cCB3aXRoIHdhcm5pbmdzIGZhc3RlciB1bnRpbCBhIHdhcm5pbmcgZ2V0cyBwcmludGVkLgorCiAtIElzc3VlICMxOTI4ODogRml4ZWQgdGhlICJpbiIgb3BlcmF0b3Igb2YgZGJtLmdudSBkYXRhYmFzZXMgZm9yIHN0cmluZwogICBhcmd1bWVudC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgogCkBAIC0yNTMsNTIgKzM3MiwyOTkgQEAKIAogLSBJc3N1ZSAjMTkzMjc6IEZpeGVkIHRoZSB3b3JraW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0aCB0b28gYmlnIGNoYXJzZXQuCiAKKy0gSXNzdWUgIzE3NDAwOiBOZXcgJ2lzX2dsb2JhbCcgYXR0cmlidXRlIGZvciBpcGFkZHJlc3MgdG8gdGVsbCBpZiBhbiBhZGRyZXNzCisgIGlzIGFsbG9jYXRlZCBieSBJQU5BIGZvciBnbG9iYWwgb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KKwogLSBJc3N1ZSAjMTkzNTA6IEluY3JlYXNpbmcgdGhlIHRlc3QgY292ZXJhZ2Ugb2YgbWFjdXJsMnBhdGguIFBhdGNoIGJ5IENvbGluCiAgIFdpbGxpYW1zLgogCistIElzc3VlICMxOTM2NTogT3B0aW1pemVkIHRoZSBwYXJzaW5nIG9mIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nIGluIHJlLnN1YiooKQorICBmdW5jdGlvbnMuCisKIC0gSXNzdWUgIzE5MzUyOiBGaXggdW5pdHRlc3QgZGlzY292ZXJ5IHdoZW4gYSBtb2R1bGUgY2FuIGJlIHJlYWNoZWQKICAgdGhyb3VnaCBzZXZlcmFsIHBhdGhzIChlLmcuIHVuZGVyIERlYmlhbi9VYnVudHUgd2l0aCB2aXJ0dWFsZW52KS4KIAogLSBJc3N1ZSAjMTUyMDc6IEZpeCBtaW1ldHlwZXMgdG8gcmVhZCBmcm9tIGNvcnJlY3QgcGFydCBvZiBXaW5kb3dzIHJlZ2lzdHJ5CiAgIE9yaWdpbmFsIHBhdGNoIGJ5IERhdmUgQ2hhbWJlcnMKIAorLSBJc3N1ZSAjMTY1OTU6IEFkZCBwcmxpbWl0KCkgdG8gcmVzb3VyY2UgbW9kdWxlLgorCistIElzc3VlICMxOTMyNDogRXhwb3NlIExpbnV4LXNwZWNpZmljIGNvbnN0YW50cyBpbiByZXNvdXJjZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE3NDAwOiBpcGFkZHJlc3Mgc2hvdWxkIG1ha2UgaXQgZWFzeSB0byBpZGVudGlmeSByZmM2NTk4IGFkZHJlc3Nlcy4KKworLSBMb2FkIFNTTCdzIGVycm9yIHN0cmluZ3MgaW4gaGFzaGxpYi4KKworLSBJc3N1ZSAjMTg1Mjc6IFVwZ3JhZGUgaW50ZXJuYWwgY29weSBvZiB6bGliIHRvIDEuMi44LgorCistIElzc3VlICMxOTI3NDogQWRkIGEgZmlsdGVyZnVuYyBwYXJhbWV0ZXIgdG8gUHlaaXBGaWxlLndyaXRlcHkuCisKIC0gSXNzdWUgIzg5NjQ6IGZpeCBwbGF0Zm9ybS5fc3lzX3ZlcnNpb24gdG8gaGFuZGxlIElyb25QeXRob24gMi42Ky4KICAgUGF0Y2ggYnkgTWFydGluIE1hdHVzaWFrLgogCistIElzc3VlICMxOTQxMzogUmVzdG9yZSBwcmUtMy4zIHJlbG9hZCgpIHNlbWFudGljcyBvZiByZS1maW5kaW5nIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE4OTU4OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIGEgc3RyaW5nCisgIHRoYXQgc3RhcnRzIHdpdGggYSBVVEYtOCBCT00uCisKKy0gSXNzdWUgIzE5MzA3OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIG9iamVjdHMKKyAgb2YgdGhlIHdyb25nIHR5cGUuCisKIC0gSXNzdWUgIzE2MDM4OiBDVkUtMjAxMy0xNzUyOiBmdHBsaWI6IExpbWl0IGFtb3VudCBvZiBkYXRhIHJlYWQgYnkKICAgbGltaXRpbmcgdGhlIGNhbGwgdG8gcmVhZGxpbmUoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1pY2hhxYIKICAgSmFzdHJ6xJlic2tpIGFuZCBHaWFtcGFvbG8gUm9kb2xhLgogCistIElzc3VlICMxNzA4NzogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTk2NjQ6IHRlc3RfdXNlcmRpY3QncyByZXByIHRlc3Qgbm8gbG9uZ2VyIGRlcGVuZHMgb24gdGhlIG9yZGVyCisgIG9mIGRpY3QgZWxlbWVudHMuCisKKy0gSXNzdWUgIzE5NDQwOiBDbGVhbiB1cCB0ZXN0X2NhcGkgYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgX19mdXR1cmVfXworICBpbXBvcnQsIGNvbnZlcnRpbmcgZnJvbSB0ZXN0X21haW4gdG8gdW5pdHRlc3QubWFpbiwgYW5kIHJ1bm5pbmcgdGhlCisgIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgYXMgc3ViVGVzdHMgb2YgYSB1bml0dGVzdCBUZXN0Q2FzZSBtZXRob2QuCisKKy0gSXNzdWUgIzE5Mzc4OiB0aGUgbWFpbiBkaXMgbW9kdWxlIHRlc3RzIGFyZSBub3cgcnVuIHdpdGggYm90aCBzdGRvdXQKKyAgcmVkaXJlY3Rpb24gKmFuZCogcGFzc2luZyBhbiBleHBsaWNpdCBmaWxlIHBhcmFtZXRlcgorCistIElzc3VlICMxOTM3ODogcmVtb3ZlZCB0aGUgbm90LWFjdHVhbGx5LWhlbHBmdWwgYXNzZXJ0SW5zdHJ1Y3Rpb25NYXRjaGVzCisgIGFuZCBhc3NlcnRCeXRlY29kZUV4YWN0bHlNYXRjaGVzIGhlbHBlcnMgZnJvbSBieXRlY29kZV9oZWxwZXIKKworLSBJc3N1ZSAjMTg3MDI6IEFsbCBza2lwcGVkIHRlc3RzIG5vdyByZXBvcnRlZCBhcyBza2lwcGVkLgorCistIElzc3VlICMxOTQzOTogaW50ZXJwcmV0ZXIgZW1iZWRkaW5nIHRlc3RzIGFyZSBub3cgZXhlY3V0ZWQgb24gV2luZG93cworICAoUGF0Y2ggYnkgWmFjaGFyeSBXYXJlKQorCistIElzc3VlICMxOTA4NTogQWRkZWQgYmFzaWMgdGVzdHMgZm9yIGFsbCB0a2ludGVyIHdpZGdldCBvcHRpb25zLgorCistIElzc3VlIDE5Mzg0OiBGaXggdGVzdF9weV9jb21waWxlIGZvciByb290IHVzZXIsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODMyNjogQ2xhcmlmeSB0aGF0IGxpc3Quc29ydCdzIGFyZ3VtZW50cyBhcmUga2V5d29yZC1vbmx5LiAgQWxzbywKKyAgYXR0ZW1wdCB0byByZWR1Y2UgY29uZnVzaW9uIGluIHRoZSBnbG9zc2FyeSBieSBub3Qgc2F5aW5nIHRoZXJlIGFyZQorICBkaWZmZXJlbnQgInR5cGVzIiBvZiBhcmd1bWVudHMgYW5kIHBhcmFtZXRlcnMuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxOTM1ODogIm1ha2UgY2xpbmljIiBub3cgcnVucyB0aGUgQXJndW1lbnQgQ2xpbmljIHByZXByb2Nlc3NvcgorICBvdmVyIGFsbCBDUHl0aG9uIHNvdXJjZSBmaWxlcy4KKworLSBVcGRhdGUgU1FMaXRlIHRvIDMuOC4xLCB4eiB0byA1LjAuNSwgYW5kIFRjbC9UayB0byA4LjYuMSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNjYzMjogRW5hYmxlIERFUCBhbmQgQVNMUiBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzc5MTogRHJvcCBQUkVGSVggYW5kIEVYRUNfUFJFRklYIGRlZmluaXRpb25zIGZyb20gUEMvcHljb25maWcuaAorCistIEFkZCB3b3JrYXJvdW5kIGZvciBWUyAyMDEwIG5tYWtlIGNsZWFuIGlzc3VlLiBWUyAyMDEwIGRvZXNuJ3Qgc2V0IHVwIFBBVEgKKyAgZm9yIG5tYWtlLmV4ZSBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE5NTUwOiBJbXBsZW1lbnQgV2luZG93cyBpbnN0YWxsZXIgY2hhbmdlcyBvZiBQRVAgNDUzIChlbnN1cmVwaXApLgorCistIElzc3VlICMxOTUyMDogRml4IGNvbXBpbGVyIHdhcm5pbmcgaW4gdGhlIF9zaGEzIG1vZHVsZSBvbiAzMmJpdCBXaW5kb3dzLgorCistIElzc3VlICMxOTM1NjogQXZvaWQgdXNpbmcgYSBDIHZhcmlhYmxlZCBuYW1lZCAiX3NlbGYiLCBpdCdzIGEgcmVzZXJ2ZWQKKyAgd29yZCBpbiBzb21lIEMgY29tcGlsZXJzLgorCistIElzc3VlICMxNTc5MjogQ29ycmVjdCBidWlsZCBvcHRpb25zIG9uIFdpbjY0LiBQYXRjaCBieSBKZXJlbXkgS2xvdGguCisKKy0gSXNzdWUgIzE5MzczOiBBcHBseSB1cHN0cmVhbSBjaGFuZ2UgdG8gVGsgOC41LjE1IGZpeGluZyBPUyBYIDEwLjkKKyAgc2NyZWVuIHJlZnJlc2ggcHJvYmxlbSBmb3IgT1MgWCBpbnN0YWxsZXIgYnVpbGQuCisKKy0gSXNzdWUgIzE5NjQ5OiBPbiBPUyBYLCB0aGUgc2FtZSBzZXQgb2YgZmlsZSBuYW1lcyBhcmUgbm93IGluc3RhbGxlZAorICBpbiBiaW4gZGlyZWN0b3JpZXMgZm9yIGFsbCBjb25maWd1cmF0aW9uczogbm9uLWZyYW1ld29yayB2cyBmcmFtZXdvcmssCisgIGFuZCBzaW5nbGUgYXJjaCB2cyB1bml2ZXJzYWwgYnVpbGRzLiAgcHl0aG9ueC55LTMyIGlzIG5vdyBhbHdheXMKKyAgaW5zdGFsbGVkIGZvciA2NC1iaXQvMzItYml0IHVuaXZlcnNhbCBidWlsZHMuICBUaGUgb2Jzb2xldGUgYW5kCisgIHVuZG9jdW1lbnRlZCBweXRob253KiBzeW1saW5rcyBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZCBhbnl3aGVyZS4KKworLSBJc3N1ZSAjMTk1NTM6IFBFUCA0NTMgLSAibWFrZSBpbnN0YWxsIiBhbmQgIm1ha2UgYWx0aW5zdGFsbCIgbm93IGluc3RhbGwgb3IKKyAgdXBncmFkZSBwaXAgYnkgZGVmYXVsdCwgdXNpbmcgdGhlIGJ1bmRsZWQgcGlwIHByb3ZpZGVkIGJ5IHRoZSBuZXcgZW5zdXJlcGlwCisgIG1vZHVsZS4gIEEgbmV3IGNvbmZpZ3VyZSBvcHRpb24sIC0td2l0aC1lbnN1cmVwaXBbPXVwZ3JhZGV8aW5zdGFsbHxub10sIGlzCisgIGF2YWlsYWJsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBlbnN1cmVwaXAgIi0tdXBncmFkZSIgb3B0aW9uLiAgVGhlIG9wdGlvbgorICBjYW4gYWxzbyBiZSBzZXQgd2l0aCAibWFrZSBbYWx0XWluc3RhbGwgRU5TVVJFUElQPVt1cGdyYWRlfGluc3RhbGxcbm9dIi4KKworLSBJc3N1ZSAjMTk1NTE6IFBFUCA0NTMgLSB0aGUgT1MgWCBpbnN0YWxsZXIgbm93IGluc3RhbGxzIHBpcCBieSBkZWZhdWx0LgorCistIFVwZGF0ZSB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgZm9yIE9TIFggaW5zdGFsbGVyczoKKyAgICB4eiA1LjAuMyAtPiA1LjAuNQorICAgIFNRTGl0ZSAzLjcuMTMgLT4gMy44LjEKKworLSBJc3N1ZSAjMTU2NjM6IFJldmVydCBPUyBYIGluc3RhbGxlciBidWlsdC1pbiBUY2wvVGsgc3VwcG9ydCBmb3IgMy40LjBiMS4KKyAgU29tZSB0aGlyZC1wYXJ0eSBwcm9qZWN0cywgc3VjaCBhcyBNYXRwbG90bGliIGFuZCBQSUwvUGlsbG93LAorICBkZXBlbmRlZCBvbiBiZWluZyBhYmxlIHRvIGJ1aWxkIHdpdGggVGNsIGFuZCBUayBmcmFtZXdvcmtzIGluCisgIC9MaWJyYXJ5L0ZyYW1ld29ya3MuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxOTczMDogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyBhbGwgdGhlIGV4aXN0aW5nIFB5QXJnCisgICJmb3JtYXQgdW5pdHMiIGFzIGxlZ2FjeSBjb252ZXJ0ZXJzLCBhcyB3ZWxsIGFzIHR3byBuZXcgZmVhdHVyZXM6CisgICJzZWxmIGNvbnZlcnRlcnMiIGFuZCB0aGUgInZlcnNpb24iIGRpcmVjdGl2ZS4KKworLSBJc3N1ZSAjMTk1NTI6IHB5dmVudiBub3cgYm9vdHN0cmFwcyBwaXAgaW50byB2aXJ0dWFsIGVudmlyb25tZW50cyBieQorICBkZWZhdWx0IChwYXNzIC0td2l0aG91dC1waXAgdG8gcmVxdWVzdCB0aGUgb2xkIGJlaGF2aW91cikKKworLSBJc3N1ZSAjMTkzOTA6IEFyZ3VtZW50IENsaW5pYyBubyBsb25nZXIgYWNjZXB0cyBtYWxmb3JtZWQgUHl0aG9uCisgIGFuZCBDIGlkcy4KKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0xMC0yMAorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTkzMDE6IEdpdmUgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWFya2VkIGdsb2JhbCBhCisgIGdsb2JhbCBxdWFsbmFtZS4KKworLSBJc3N1ZSAjMTkyNzk6IFVURi03IGRlY29kZXIgbm8gbG9uZ2VyIHByb2R1Y2VzIGlsbGVnYWwgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTY2MTI6IEFkZCAiQXJndW1lbnQgQ2xpbmljIiwgYSBjb21waWxlLXRpbWUgcHJlcHJvY2Vzc29yIGZvcgorICBDIGZpbGVzIHRvIGdlbmVyYXRlIGFyZ3VtZW50IHBhcnNpbmcgY29kZS4gIChTZWUgUEVQIDQzNi4pCisKKy0gSXNzdWUgIzE4ODEwOiBTaGlmdCBzdGF0IGNhbGxzIGluIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBzdWNoIHRoYXQKKyAgdGhlIGNvZGUgaXMgb3B0aW1pc3RpYyB0aGF0IGlmIHNvbWV0aGluZyBleGlzdHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZXhhY3RseQorICBsaWtlIHRoZSBwb3NzaWJsZSBwYWNrYWdlIGJlaW5nIHNlYXJjaGVkIGZvciB0aGF0IGl0J3MgaW4gYWN0dWFsaXR5IGEKKyAgZGlyZWN0b3J5LgorCistIElzc3VlICMxODQxNjogaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyIG5vdyB0cmVhdHMgJycgYXMgdGhlIGN3ZCBhbmQKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vIGxvbmdlciBzcGVjaWFsLWNhc2VzICcnIHRvICcuJy4gVGhpcyBsZWFkcworICB0byBtb2R1bGVzIGltcG9ydGVkIGZyb20gY3dkIHRvIG5vdyBwb3NzZXNzIGFuIGFic29sdXRlIGZpbGUgcGF0aCBmb3IKKyAgX19maWxlX18gKHRoaXMgZG9lcyBub3QgYWZmZWN0IG1vZHVsZXMgc3BlY2lmaWVkIGJ5IHBhdGggb24gdGhlIENMSSBidXQgaXQKKyAgZG9lcyBhZmZlY3QgLW0vcnVucHkpLiBJdCBhbHNvIGFsbG93cyBGaWxlRmluZGVyIHRvIGJlIG1vcmUgY29uc2lzdGVudCBieSBub3QKKyAgaGF2aW5nIGFuIGVkZ2UgY2FzZS4KKworLSBJc3N1ZSAjNDU1NTogQWxsIGV4cG9ydGVkIEMgc3ltYm9scyBhcmUgbm93IHByZWZpeGVkIHdpdGggZWl0aGVyCisgICJQeSIgb3IgIl9QeSIuCisKKy0gSXNzdWUgIzE5MjE5OiBTcGVlZCB1cCBtYXJzaGFsLmxvYWRzKCksIGFuZCBtYWtlIHB5YyBmaWxlcyBzbGlnaHRseQorICAoNSUgdG8gMTAlKSBzbWFsbGVyLgorCistIElzc3VlICMxOTIyMTogVXBncmFkZSBVbmljb2RlIGRhdGFiYXNlIHRvIHZlcnNpb24gNi4zLjAuCisKKy0gSXNzdWUgIzE2NzQyOiBUaGUgcmVzdWx0IG9mIHRoZSBDIGNhbGxiYWNrIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgbXVzdAorICBub3cgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IFB5TWVtX1Jhd01hbGxvYygpIG9yIFB5TWVtX1Jhd1JlYWxsb2MoKSAob3IgTlVMTAorICBpZiBhbiBlcnJvciBvY2N1cnJlZCksIGluc3RlYWQgb2YgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IFB5TWVtX01hbGxvYygpIG9yCisgIFB5TWVtX1JlYWxsb2MoKS4KKworLSBJc3N1ZSAjMTkxOTk6IFJlbW92ZSBgYFB5VGhyZWFkU3RhdGUudGlja19jb3VudGVyYGAgZmllbGQKKworLSBGaXggbWFjcm8gZXhwYW5zaW9uIG9mIF9QeUVycl9PQ0NVUlJFRCgpLCBhbmQgbWFrZSBzdXJlIHRvIHVzZSBpdCBpbiBhdAorICBsZWFzdCBvbmUgcGxhY2Ugc28gYXMgdG8gYXZvaWQgcmVncmVzc2lvbnMuCisKKy0gSXNzdWUgIzE5MDg3OiBJbXByb3ZlIGJ5dGVhcnJheSBhbGxvY2F0aW9uIGluIG9yZGVyIHRvIGFsbG93IGNoZWFwIHBvcHBpbmcKKyAgb2YgZGF0YSBhdCB0aGUgZnJvbnQgKHNsaWNlIGRlbGV0aW9uKS4KKworLSBJc3N1ZSAjMTkwMTQ6IG1lbW9yeXZpZXcuY2FzdCgpIGlzIG5vdyBhbGxvd2VkIG9uIHplcm8tbGVuZ3RoIHZpZXdzLgorCistIElzc3VlICMxODY5MDogbWVtb3J5dmlldyBpcyBub3cgYXV0b21hdGljYWxseSByZWdpc3RlcmVkIHdpdGgKKyAgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlCisKKy0gSXNzdWUgIzE5MDc4OiBtZW1vcnl2aWV3IG5vdyBjb3JyZWN0bHkgc3VwcG9ydHMgdGhlIHJldmVyc2VkIGJ1aWx0aW4KKyAgKFBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNzQ1NzogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm93IHdvcmtzIHdpdGggbmFtZXNwYWNlIHBhY2thZ2VzLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKIC0gSXNzdWUgIzE4MjM1OiBGaXggdGhlIHN5c2NvbmZpZyB2YXJpYWJsZXMgTERTSEFSRUQgYW5kIEJMRFNIQVJFRCB1bmRlciBBSVguCiAgIFBhdGNoIGJ5IERhdmlkIEVkZWxzb2huLgogCistIElzc3VlICMxODYwNjogQWRkIHRoZSBuZXcgInN0YXRpc3RpY3MiIG1vZHVsZSAoUEVQIDQ1MCkuICBDb250cmlidXRlZAorICBieSBTdGV2ZW4gRCdBcHJhbm8uCisKKy0gSXNzdWUgIzEyODY2OiBUaGUgYXVkaW9vcCBtb2R1bGUgbm93IHN1cHBvcnRzIDI0LWJpdCBzYW1wbGVzLgorCistIElzc3VlICMxOTI1NDogUHJvdmlkZSBhbiBvcHRpbWl6ZWQgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHBia2RmMl9obWFjLgorCistIElzc3VlcyAjMTkyMDEsICMxOTIyMiwgIzE5MjIzOiBBZGQgIngiIG1vZGUgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgaW4gb3BlbmluZworICBmaWxlIHRvIGJ6MiwgZ3ppcCBhbmQgbHptYSBtb2R1bGVzLiBQYXRjaGVzIGJ5IFRpbSBIZWFuZXkgYW5kIFZhanJhc2t5IEtvay4KKworLSBGaXggYSByZWZlcmVuY2UgY291bnQgbGVhayBpbiBfc3JlLgorCistIElzc3VlICMxOTI2MjogSW5pdGlhbCBjaGVjayBpbiBvZiB0aGUgJ2FzeW5jaW8nIHBhY2thZ2UgKGEuay5hLiBUdWxpcCwKKyAgYS5rLmEuIFBFUCAzMTU2KS4gIFRoZXJlIGFyZSBubyBkb2NzIHlldCwgYW5kIHRoZSBQRVAgaXMgc2xpZ2h0bHkKKyAgb3V0IG9mIGRhdGUgd2l0aCB0aGUgY29kZS4gIFRoaXMgbW9kdWxlIHdpbGwgaGF2ZSAqcHJvdmlzaW9uYWwqIHN0YXR1cworICBpbiBQeXRob24gMy40LgorCiAtIElzc3VlICMxOTI3NjogRml4ZWQgdGhlIHdhdmUgbW9kdWxlIG9uIDY0LWJpdCBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjMTkyNjY6IFJlbmFtZSB0aGUgbmV3LWluLTMuNCBgYGNvbnRleHRsaWIuaWdub3JlYGAgY29udGV4dCBtYW5hZ2VyCisgIHRvIGBgY29udGV4dGxpYi5zdXBwcmVzc2BgIGluIG9yZGVyIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIGV4aXN0aW5nCisgIGRlc2NyaXB0aW9ucyBvZiB0aGF0IG9wZXJhdGlvbiBlbHNld2hlcmUgaW4gdGhlIGxhbmd1YWdlIGFuZCBzdGFuZGFyZAorICBsaWJyYXJ5IGRvY3VtZW50YXRpb24gKFBhdGNoIGJ5IFplcm8gUGlyYWV1cykuCisKKy0gSXNzdWUgIzE4ODkxOiBDb21wbGV0ZWQgdGhlIG5ldyBlbWFpbCBwYWNrYWdlIChwcm92aXNpb25hbCkgQVBJIGFkZGl0aW9ucworICBieSBhZGRpbmcgbmV3IGNsYXNzZXMgRW1haWxNZXNzYWdlLCBNSU1FUGFydCwgYW5kIENvbnRlbnRNYW5hZ2VyLgorCistIElzc3VlICMxODI4MTogVW51c2VkIHN0YXQgY29uc3RhbnRzIHJlbW92ZWQgZnJvbSBgdGFyZmlsZWAuCisKKy0gSXNzdWUgIzE4NDY4OiBUaGUgcmUuc3BsaXQsIHJlLmZpbmRhbGwsIGFuZCByZS5zdWIgZnVuY3Rpb25zIGFuZCB0aGUgZ3JvdXAoKQorICBhbmQgZ3JvdXBzKCkgbWV0aG9kcyBvZiBtYXRjaCBvYmplY3Qgbm93IGFsd2F5cyByZXR1cm4gYSBzdHJpbmcgb3IgYSBieXRlcworICBvYmplY3QuCisKKy0gSXNzdWUgIzE4NzI1OiBUaGUgdGV4dHdyYXAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0cnVuY2F0aW5nIG11bHRpbGluZSB0ZXh0LgorCiAtIElzc3VlICMxODc3NjogYXRleGl0IGNhbGxiYWNrcyBub3cgZGlzcGxheSB0aGVpciBmdWxsIHRyYWNlYmFjayB3aGVuIHRoZXkKICAgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAtIElzc3VlICMxNzgyNzogQWRkIHRoZSBtaXNzaW5nIGRvY3VtZW50YXRpb24gZm9yIGBgY29kZWNzLmVuY29kZWBgIGFuZAogICBgYGNvZGVjcy5kZWNvZGVgYC4KIAotLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKLSAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgotICBPcmlnaW5hbCBwYXRjaCBieSBSb25hbGQgT3Vzc29yZW4uCistIElzc3VlICMxOTIxODogUmVuYW1lIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIGluIG9yZGVyIHRvCisgIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0LgogCi0tIElzc3VlICMxODkxOTogSWYgdGhlIGNsb3NlKCkgbWV0aG9kIG9mIGEgd3JpdGVyIGluIHRoZSBzdW5hdSBvciB3YXZlIG1vZHVsZQotICBmYWlsZWQsIHNlY29uZCBpbnZvY2F0aW9uIG9mIGNsb3NlKCkgYW5kIGRlc3RydWN0b3Igbm8gbW9yZSByYWlzZSBhbgotICBleGNlcHRpb24uCistIElzc3VlICMxODU4MjogQWRkICdwYmtkZjJfaG1hYycgdG8gdGhlIGhhc2hsaWIgbW9kdWxlLiBJdCBpbXBsZW1lbnRzIFBLQ1MjNQorICBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgd2l0aCBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KIAogLSBJc3N1ZSAjMTkxMzE6IFRoZSBhaWZjIG1vZHVsZSBub3cgY29ycmVjdGx5IHJlYWRzIGFuZCB3cml0ZXMgc2FtcHdpZHRoIG9mCiAgIGNvbXByZXNzZWQgc3RyZWFtcy4KIAorLSBJc3N1ZSAjMTkyMDk6IFJlbW92ZSBpbXBvcnQgb2YgY29weXJlZyBmcm9tIHRoZSBvcyBtb2R1bGUgdG8gc3BlZWQgdXAKKyAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gc3RhdF9yZXN1bHQgYW5kIHN0YXR2ZnNfcmVzdWx0IGFyZSBub3cgaGFyZC1jb2RlZCB0bworICByZXNpZGUgaW4gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkyMDU6IERvbid0IGltcG9ydCB0aGUgJ3JlJyBtb2R1bGUgaW4gc2l0ZSBhbmQgc3lzY29uZmlnIG1vZHVsZSB0bworICB0byBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KKworLSBJc3N1ZSAjOTU0ODogQWRkIGEgbWluaW1hbCAiX2Jvb3Rsb2NhbGUiIG1vZHVsZSB0aGF0IGlzIGltcG9ydGVkIGJ5IHRoZQorICBfaW8gbW9kdWxlIGluc3RlYWQgb2YgdGhlIGZ1bGwgbG9jYWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg3NjQ6IHJlbW92ZSB0aGUgJ3ByaW50JyBhbGlhcyBmb3IgdGhlIFBEQiAncCcgY29tbWFuZCBzbyB0aGF0IGl0IG5vCisgIGxvbmdlciBzaGFkb3dzIHRoZSBwcmludCBmdW5jdGlvbi4KKwogLSBJc3N1ZSAjMTkxNTg6ICBhIHJhcmUgcmFjZSBpbiBCb3VuZGVkU2VtYXBob3JlIGNvdWxkIGFsbG93IC5yZWxlYXNlKCkgdG9vCiAgIG9mdGVuLgogCistIElzc3VlICMxNTgwNTogQWRkIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KCkuCisKKy0gSXNzdWUgIzE4NzE2OiBEZXByZWNhdGUgdGhlIGZvcm1hdHRlciBtb2R1bGUuCisKKy0gSXNzdWUgIzEwNzEyOiAydG8zIGhhcyBhIG5ldyAiYXNzZXJ0cyIgZml4ZXIgdGhhdCByZXBsYWNlcyBkZXByZWNhdGVkIG5hbWVzCisgIG9mIHVuaXR0ZXN0IG1ldGhvZHMgKGUuZy4gZmFpbFVubGVzc0VxdWFsIC0+IGFzc2VydEVxdWFsKS4KKwogLSBJc3N1ZSAjMTgwMzc6IDJ0bzMgbm93IGVzY2FwZXMgJ1x1JyBhbmQgJ1xVJyBpbiBuYXRpdmUgc3RyaW5ncy4KIAorLSBJc3N1ZSAjMTc4Mzk6IGJhc2U2NC5kZWNvZGVieXRlcyBhbmQgYmFzZTY0LmVuY29kZWJ5dGVzIG5vdyBhY2NlcHQgYW55CisgIG9iamVjdCB0aGF0IGV4cG9ydHMgYSAxIGRpbWVuc2lvbmFsIGFycmF5IG9mIGJ5dGVzICh0aGlzIG1lYW5zIHRoZSBzYW1lCisgIGlzIG5vdyBhbHNvIHRydWUgZm9yIGJhc2U2NF9jb2RlYykKKworLSBJc3N1ZSAjMTkxMzI6IFRoZSBwcHJpbnQgbW9kdWxlIG5vdyBzdXBwb3J0cyBjb21wYWN0IG1vZGUuCisKIC0gSXNzdWUgIzE5MTM3OiBUaGUgcHByaW50IG1vZHVsZSBub3cgY29ycmVjdGx5IGZvcm1hdHMgaW5zdGFuY2VzIG9mIHNldCBhbmQKICAgZnJvemVuc2V0IHN1YmNsYXNzZXMuCiAKKy0gSXNzdWUgIzEwMDQyOiBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcgbm93IGNvcnJlY3RseSBoYW5kbGVzCisgIE5vdEltcGxlbWVudGVkIGJlaW5nIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gKFBhdGNoCisgIGJ5IEthdGllIE1pbGxlcikKKwogLSBJc3N1ZSAjMTkwOTI6IGNvbnRleHRsaWIuRXhpdFN0YWNrIG5vdyBjb3JyZWN0bHkgcmVyYWlzZXMgZXhjZXB0aW9ucwogICBmcm9tIHRoZSBfX2V4aXRfXyBjYWxsYmFja3Mgb2YgaW5uZXIgY29udGV4dCBtYW5hZ2VycyAoUGF0Y2ggYnkgSHJ2b2plCiAgIE5pa8WhacSHKQpAQCAtMzA2LDE1ICs2NzIsODkgQEAKIC0gSXNzdWUgIzEyNjQxOiBBdm9pZCBwYXNzaW5nICItbW5vLWN5Z3dpbiIgdG8gdGhlIG1pbmd3MzIgY29tcGlsZXIsIGV4Y2VwdAogICB3aGVuIG5lY2Vzc2FyeS4gIFBhdGNoIGJ5IE9zY2FyIEJlbmphbWluLgogCi0tIElzc3VlICMxODU5NDogVGhlIGZhc3QgcGF0aCBmb3IgY29sbGVjdGlvbnMuQ291bnRlcigpIHdhcyBuZXZlciB0YWtlbgotICBkdWUgdG8gYW4gb3Zlci1yZXN0cmljdGl2ZSB0eXBlIGNoZWNrLiAgQW5kIHRoZSBmYWxsYmFjayBwYXRoIGRpZAotICBub3QgaW1wbGVtZW50IHRoZSBzYW1lIGFsZ29yaXRobSBhcyB0aGUgcHVyZSBweXRob24gY29kZS4KKy0gSXNzdWUgIzU4NDU6IEluIHNpdGUucHksIG9ubHkgbG9hZCByZWFkbGluZSBoaXN0b3J5IGZyb20gfi8ucHl0aG9uX2hpc3RvcnkKKyAgaWYgbm8gaGlzdG9yeSBoYXMgYmVlbiByZWFkIGFscmVhZHkuICBUaGlzIGF2b2lkcyBkb3VibGUgd3JpdGVzIHRvIHRoZQorICBoaXN0b3J5IGZpbGUgYXQgc2h1dGRvd24uCiAKIC0gUHJvcGVybHkgaW5pdGlhbGl6ZSBhbGwgZmllbGRzIG9mIGEgU1NMIG9iamVjdCBhZnRlciBhbGxvY2F0aW9uLgogCistIElzc3VlICMxOTA5NTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yIHdoZW4gdGhlCisgIFNTTCBoYW5kc2hha2UgaGFzbid0IGJlZW4gZG9uZS4KKwogLSBJc3N1ZSAjNDM2NjogRml4IGJ1aWxkaW5nIGV4dGVuc2lvbnMgb24gYWxsIHBsYXRmb3JtcyB3aGVuIC0tZW5hYmxlLXNoYXJlZAogICBpcyB1c2VkLgogCistIElzc3VlICMxOTAzMDogRml4ZWQgYGluc3BlY3QuZ2V0bWVtYmVyc2AgYW5kIGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzYAorICB0byBhdHRlbXB0IGFjdGl2YXRpbmcgZGVzY3JpcHRvcnMgYmVmb3JlIGZhbGxpbmcgYmFjayB0byBhIF9fZGljdF9fIHNlYXJjaAorICBmb3IgZmF1bHR5IGRlc2NyaXB0b3JzLiAgYGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnNgIG5vIGxvbmdlciByZXR1cm5zCisgIEF0dHJpYnV0ZXMgd2hvc2UgaG9tZSBjbGFzcyBpcyBOb25lLgorCitDIEFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTc3MjY3MzogVGhlIHR5cGUgb2YgYGNoYXIqYCBhcmd1bWVudHMgbm93IGNoYW5nZWQgdG8gYGNvbnN0IGNoYXIqYC4KKworLSBJc3N1ZSAjMTYxMjk6IEFkZGVkIGEgYFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmdgIHByZS1pbml0aWFsaXphdGlvbiBBUEkKKyAgdG8gYWxsb3cgZW1iZWRkaW5nIGFwcGxpY2F0aW9ucyBsaWtlIEJsZW5kZXIgdG8gZm9yY2UgYSBwYXJ0aWN1bGFyCisgIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3RhbmRhcmQgSU8gc3RyZWFtcyAoaW5pdGlhbCBwYXRjaCBieQorICBCYXN0aWVuIE1vbnRhZ25lKQorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTkyNzU6IEZpeCB0ZXN0X3NpdGUgb24gQU1ENjQgU25vdyBMZW9wYXJkCisKKy0gSXNzdWUgIzE0NDA3OiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMuCisKKy0gSXNzdWUgIzE4OTE5OiBVbmlmaWVkIGFuZCBleHRlbmRlZCB0ZXN0cyBmb3IgYXVkaW8gbW9kdWxlczogYWlmYywgc3VuYXUgYW5kCisgIHdhdmUuCisKKy0gSXNzdWUgIzE4NzE0OiBBZGRlZCB0ZXN0cyBmb3IgYGBwZGIuZmluZF9mdW5jdGlvbigpYGAuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg3NTg6IEZpeGVkIGFuZCBpbXByb3ZlZCBjcm9zcy1yZWZlcmVuY2VzLgorCistIElzc3VlICMxODk3MjogTW9kZXJuaXplIGVtYWlsIGV4YW1wbGVzIGFuZCB1c2UgdGhlIGFyZ3BhcnNlIG1vZHVsZSBpbiB0aGVtLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTkxMzA6IENvcnJlY3QgUENidWlsZC9yZWFkbWUudHh0LCBQeXRob24gMy4zIGFuZCAzLjQgcmVxdWlyZSBWUyAyMDEwLgorCistIElzc3VlICMxNTY2MzogVXBkYXRlIE9TIFggMTAuNisgaW5zdGFsbGVyIHRvIHVzZSBUY2wvVGsgOC41LjE1LgorCistIElzc3VlICMxNDQ5OTogRml4IHNldmVyYWwgcHJvYmxlbXMgd2l0aCBPUyBYIHVuaXZlcnNhbCBidWlsZCBzdXBwb3J0OgorICAgIDEuIHBwYyBhcmNoIGRldGVjdGlvbiBmb3IgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgYnJva2Ugd2l0aCBYY29kZSA1CisgICAgMi4gcHBjIGFyY2ggZGV0ZWN0aW9uIGluIGNvbmZpZ3VyZSBkaWQgbm90IHdvcmsgb24gT1MgWCAxMC40CisgICAgMy4gLXN5c3Jvb3QgYW5kIC1hcmNoIGZsYWdzIHdlcmUgdW5uZWNlc3NhcmlseSBkdXBsaWNhdGVkCisgICAgNC4gdGhlcmUgd2FzIG5vIG9idmlvdXMgd2F5IHRvIGNvbmZpZ3VyZSBhbiBpbnRlbC0zMiBvbmx5IGJ1aWxkLgorCistIElzc3VlICMxOTAxOTogQ2hhbmdlIHRoZSBPUyBYIGluc3RhbGxlciBidWlsZCBzY3JpcHQgdG8gdXNlIENGTEFHUyBpbnN0ZWFkCisgIG9mIE9QVCBmb3Igc3BlY2lhbCBidWlsZCBvcHRpb25zLiAgQnkgc2V0dGluZyBPUFQsIHNvbWUgY29tcGlsZXItc3BlY2lmaWMKKyAgb3B0aW9ucyBsaWtlIC1md3JhcHYgd2VyZSBvdmVycmlkZGVuIGFuZCB0aHVzIG5vdCB1c2VkLCB3aGljaCBjb3VsZCByZXN1bHQKKyAgaW4gYnJva2VuIGludGVycHJldGVycyB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDktMjkKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4ODE4OiBUaGUgImVuY29kaW5nbmFtZSIgcGFydCBvZiBQWVRIT05JT0VOQ09ESU5HIGlzIG5vdyBvcHRpb25hbC4KKworLSBJc3N1ZSAjMTkwOTg6IFByZXZlbnQgb3ZlcmZsb3cgaW4gdGhlIGNvbXBpbGVyIHdoZW4gdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBzZXQKKyAgYWJzdXJkbHkgaGlnaC4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxODkyOTogYGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoKWAgbm93IGNvcnJlY3RseSBmaW5kcyBjbGFzcworICBhdHRyaWJ1dGVzIHJldHVybmVkIGJ5IGBkaXIoKWAgdGhhdCBhcmUgbG9jYXRlZCBpbiB0aGUgbWV0YWNsYXNzLgorCiAtIElzc3VlICMxODk1MDogRml4IG1pc2NlbGxhbmVvdXMgYnVncyBpbiB0aGUgc3VuYXUgbW9kdWxlLgogICBBdV9yZWFkLnJlYWRmcmFtZXMoKSBub3cgdXBkYXRlcyBjdXJyZW50IGZpbGUgcG9zaXRpb24gYW5kIHJlYWRzIGNvcnJlY3QKICAgbnVtYmVyIG9mIGZyYW1lcyBmcm9tIG11bHRpY2hhbm5lbCBzdHJlYW0uICBBdV93cml0ZS53cml0ZWZyYW1lc3JhdygpIG5vdwpAQCAtMzIyLDE3ICs3NjIsMjkgQEAKICAgaW50ZWdlciAoYXMgaW4gUHl0aG9uIDIpLiAgQXVfcmVhZCBhbmQgQXVfd3JpdGUgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGZpbGUKICAgb2JqZWN0IGlmIHN0YXJ0IGZpbGUgcG9zaXRpb24gaXMgbm90IGEgemVyby4KIAorLSBJc3N1ZSAjMTg1OTQ6IFRoZSBmYXN0IHBhdGggZm9yIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSB3YXMgbmV2ZXIgdGFrZW4KKyAgZHVlIHRvIGFuIG92ZXItcmVzdHJpY3RpdmUgdHlwZSBjaGVjay4KKwogLSBJc3N1ZSAjMTkwNTM6IFppcEV4dEZpbGUucmVhZDEoKSB3aXRoIG5vbi16ZXJvIGFyZ3VtZW50IG5vIG1vcmUgcmV0dXJucyBlbXB0eQogICBieXRlcyB1bnRpbCBlbmQgb2YgZGF0YS4KIAotLSBJc3N1ZSAjMTkwMjg6IEZpeGVkIHRraW50ZXIuVGthcHAubWVyZ2UoKSBmb3Igbm9uLXN0cmluZyBhcmd1bWVudHMuCistIGxvZ2dpbmc6IGFkZGVkIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHMgdG8gU29ja2V0SGFuZGxlciBhbmQKKyAgRGF0YWdyYW1IYW5kbGVyLgorCistIElzc3VlICMxODk5NjogVGVzdENhc2UuYXNzZXJ0RXF1YWwoKSBub3cgbW9yZSBjbGV2ZXJseSBzaG9ydGVuIGRpZmZlcmluZworICBzdHJpbmdzIGluIGVycm9yIHJlcG9ydC4KKworLSBJc3N1ZSAjMTkwMzQ6IHJlcHIoKSBmb3IgdGtpbnRlci5UY2xfT2JqIG5vdyBleHBvc2VzIHN0cmluZyByZXBlcmVzZW50YXRpb24uCisKKy0gSXNzdWUgIzE4OTc4OiBgYHVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgYCBub3cgYWxsb3dzIHRoZSBtZXRob2QgdG8gYmUKKyAgaW5kaWNhdGVkIG9uIHRoZSBjbGFzcyBhbmQgbm8gbG9uZ2VyIHNldHMgaXQgdG8gTm9uZSBpbiBgYF9faW5pdF9fYGAuCisKKy0gSXNzdWUgIzE4NjI2OiB0aGUgaW5zcGVjdCBtb2R1bGUgbm93IG9mZmVycyBhIGJhc2ljIGNvbW1hbmQgbGluZQorICBpbnRyb3NwZWN0aW9uIGludGVyZmFjZSAoSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEpCiAKIC0gSXNzdWUgIzMwMTU6IEZpeGVkIHRraW50ZXIgd2l0aCB3YW50b2JqZWN0PUZhbHNlLiAgQW55IFRjbCBjb21tYW5kIGNhbGwKICAgcmV0dXJuZWQgZW1wdHkgc3RyaW5nLgogCi0tIElzc3VlICMxODA1MDogRml4ZWQgYW4gaW5jb21wYXRpYmlsaXR5IG9mIHRoZSByZSBtb2R1bGUgd2l0aCBQeXRob24gMy4zLjAKLSAgYmluYXJpZXMuCi0KIC0gSXNzdWUgIzE5MDM3OiBUaGUgbWFpbGJveCBtb2R1bGUgbm93IG1ha2VzIGFsbCBjaGFuZ2VzIHRvIG1haWxkaXIgZmlsZXMKICAgYmVmb3JlIG1vdmluZyB0aGVtIGludG8gcGxhY2UsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zCiAgIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgbWFpbGRpciBkaXJlY3RvcnkuCkBAIC0zNDYsNiArNzk4LDEyIEBACiAtIElzc3VlICMxODg3MzogVGhlIHRva2VuaXplIG1vZHVsZSBub3cgZGV0ZWN0cyBQeXRob24gc291cmNlIGNvZGUgZW5jb2RpbmcKICAgb25seSBpbiBjb21tZW50IGxpbmVzLgogCistIElzc3VlICMxNzc2NDogRW5hYmxlIGh0dHAuc2VydmVyIHRvIGJpbmQgdG8gYSB1c2VyIHNwZWNpZmllZCBuZXR3b3JrCisgIGludGVyZmFjZS4gIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IE1hbHRlIFN3YXJ0LgorCistIElzc3VlICMxODkzNzogQWRkIGFuIGFzc2VydExvZ3MoKSBjb250ZXh0IG1hbmFnZXIgdG8gdW5pdHRlc3QuVGVzdENhc2UKKyAgdG8gZW5zdXJlIHRoYXQgYSBibG9jayBvZiBjb2RlIGVtaXRzIGEgbWVzc2FnZSB1c2luZyB0aGUgbG9nZ2luZyBtb2R1bGUuCisKIC0gSXNzdWUgIzE3MzI0OiBGaXggaHR0cC5zZXJ2ZXIncyByZXF1ZXN0IGhhbmRsaW5nIGNhc2Ugb24gdHJhaWxpbmcgJy8nLiBQYXRjaAogICBjb250cmlidXRlZCBieSBWYWpyYXNreSBLb2suCiAKQEAgLTM1NiwzMyArODE0LDE2OSBAQAogICBpZiBhbGwgbmVjZXNzYXJ5IGZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBmb3VuZCBpbiBsaWJ1dWlkLgogICBQYXRjaCBieSBFdmdlbnkgU29sb2d1Ym92LgogCistIFRoZSA6ZW52dmFyOmBQWVRIT05GQVVMVEhBTkRMRVJgIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdyBvbmx5IGVuYWJsZXMgdGhlCisgIGZhdWx0aGFuZGxlciBtb2R1bGUgaWYgdGhlIHZhcmlhYmxlIGlzIG5vbi1lbXB0eS4gU2FtZSBiZWhhdmlvdXIgdGhhbiBvdGhlcgorICB2YXJpYWJsZXMgbGlrZSA6ZW52dmFyOmBQWVRIT05ET05UV1JJVEVCWVRFQ09ERWAuCisKKy0gSXNzdWUgIzE1NjU1MjU6IE5ldyBmdW5jdGlvbiBgYHRyYWNlYmFjay5jbGVhcl9mcmFtZXNgYCB3aWxsIGNsZWFyCisgIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYWxsIHRoZSBzdGFjayBmcmFtZXMgcmVmZXJlbmNlZCBieSBhIHRyYWNlYmFjaworICBvYmplY3QuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxODk1MjogRml4IHJlZ3Jlc3Npb24gaW4gc3VwcG9ydCBkYXRhIGRvd25sb2FkcyBpbnRyb2R1Y2VkIHdoZW4KKyAgdGVzdC5zdXBwb3J0IHdhcyBjb252ZXJ0ZWQgdG8gYSBwYWNrYWdlLiBSZWdyZXNzaW9uIG5vdGljZWQgYnkgWmFjaGFyeQorICBXYXJlLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKKyAgbGluZXMuCisKKy0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTcwMDM6IFVuaWZpZWQgdGhlIHNpemUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGlvIG1vZHVsZSB3aXRoIGNvbW1vbgorICBwcmFjdGljZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE4NTk2OiBTdXBwb3J0IHRoZSB1c2Ugb2YgYWRkcmVzcyBzYW5pdHkgY2hlY2tpbmcgaW4gcmVjZW50IHZlcnNpb25zCisgIG9mIGNsYW5nIGFuZCBHQ0MgYnkgYXBwcm9wcmlhdGVseSBtYXJraW5nIGtub3duIGZhbHNlIGFsYXJtcyBpbiB0aGUgc21hbGwKKyAgb2JqZWN0IGFsbG9jYXRvci4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgRGhpcnUgS2hvbGlhLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQorICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTA5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODk0Mjogc3lzLl9kZWJ1Z21hbGxvY3N0YXRzKCkgb3V0cHV0IHdhcyBkYW1hZ2VkIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4NzgwOiAlLWZvcm1hdHRpbmcgbm93IHByaW50cyB2YWx1ZSBpbnN0ZWFkIG9mIHN0ciBmb3IKKyAgaW50IHN1YmNsYXNzZXMgd2hlbiB1c2luZyAlZCwgJWksIGFuZCAldSBjb2Rlcy4KKworLSBJc3N1ZSAjMTg1NzE6IEltcGxlbWVudGF0aW9uIG9mIHRoZSBQRVAgNDQ2OiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBmaWxlCisgIGhhbmRsZXMgYXJlIG5vdyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZTsgYWRkIGZ1bmN0aW9ucworICBvcy5nZXQvc2V0X2luaGVyaXRhYmxlKCksIG9zLmdldC9zZXRfaGFuZGxlX2luaGVyaXRhYmxlKCkgYW5kCisgIHNvY2tldC5zb2NrZXQuZ2V0L3NldF9pbmhlcml0YWJsZSgpLgorCistIElzc3VlICMxMTYxOTogVGhlIHBhcnNlciBhbmQgdGhlIGltcG9ydCBtYWNoaW5lcnkgZG8gbm90IGVuY29kZSBVbmljb2RlCisgIGZpbGVuYW1lcyBhbnltb3JlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4ODA4OiBOb24tZGFlbW9uIHRocmVhZHMgYXJlIG5vdyBhdXRvbWF0aWNhbGx5IGpvaW5lZCB3aGVuCisgIGEgc3ViLWludGVycHJldGVyIGlzIHNodXRkb3duIChpdCB3b3VsZCBwcmV2aW91c2x5IGR1bXAgYSBmYXRhbCBlcnJvcikuCisKKy0gUmVtb3ZlIHN1cHBvcnRpbmcgZm9yIGNvbXBpbGluZyBvbiBzeXN0ZW1zIHdpdGhvdXQgZ2V0Y3dkKCkuCisKKy0gSXNzdWUgIzE4Nzc0OiBSZW1vdmUgbGFzdCBiaXRzIG9mIEdOVSBQVEggdGhyZWFkIGNvZGUgYW5kIHRocmVhZF9wdGguaC4KKworLSBJc3N1ZSAjMTg3NzE6IEFkZCBvcHRpbWl6YXRpb24gdG8gc2V0IG9iamVjdCBsb29rdXBzIHRvIHJlZHVjZSB0aGUgY29zdAorICBvZiBoYXNoIGNvbGxpc2lvbnMuICBUaGUgY29yZSBpZGVhIGlzIHRvIGluc3BlY3QgYSBzZWNvbmQga2V5L2hhc2ggcGFpcgorICBmb3IgZWFjaCBjYWNoZSBsaW5lIHJldHJpZXZlZC4KKworLSBJc3N1ZSAjMTYxMDU6IFdoZW4gYSBzaWduYWwgaGFuZGxlciBmYWlscyB0byB3cml0ZSB0byB0aGUgZmlsZSBkZXNjcmlwdG9yCisgIHJlZ2lzdGVyZWQgd2l0aCBgYHNpZ25hbC5zZXRfd2FrZXVwX2ZkKClgYCwgcmVwb3J0IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkCisgIG9mIGlnbm9yaW5nIHRoZSBlcnJvci4KKworLSBJc3N1ZSAjMTg3MjI6IFJlbW92ZSB1c2VzIG9mIHRoZSAicmVnaXN0ZXIiIGtleXdvcmQgaW4gQyBjb2RlLgorCistIElzc3VlICMxODY2NzogQWRkIG1pc3NpbmcgIkhBVkVfRkNIT1dOQVQiIHN5bWJvbCB0byBwb3NpeC5faGF2ZV9mdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE2NDk5OiBBZGQgY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgaXNvbGF0ZWQgbW9kZS4KKworLSBJc3N1ZSAjMTUzMDE6IFBhcnNpbmcgZmQsIHVpZCwgYW5kIGdpZCBwYXJhbWV0ZXJzIGZvciBidWlsdGlucworICBpbiBNb2R1bGVzL3Bvc2l4bW9kdWxlLmMgaXMgbm93IGZhciBtb3JlIHJvYnVzdC4KKworLSBJc3N1ZSAjMTgzNjg6IFB5T1NfU3RkaW9SZWFkbGluZSgpIG5vIGxvbmdlciBsZWFrcyBtZW1vcnkgd2hlbiByZWFsbG9jKCkKKyAgZmFpbC4KKworLSBJc3N1ZSAjMTc5MzQ6IEFkZCBhIGNsZWFyKCkgbWV0aG9kIHRvIGZyYW1lIG9iamVjdHMsIHRvIGhlbHAgY2xlYW4gdXAKKyAgZXhwZW5zaXZlIGRldGFpbHMgKGxvY2FsIHZhcmlhYmxlcykgYW5kIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisKKy0gSXNzdWUgIzE4NzgwOiAlLWZvcm1hdHRpbmcgY29kZXMgJWQsICVpLCBhbmQgJXUgbm93IHRyZWF0IGludC1zdWJjbGFzc2VzCisgIGFzIGludCAoZGlzcGxheXMgdmFsdWUgb2YgaW50LXN1YmNsYXNzIGluc3RlYWQgb2Ygc3RyKGludC1zdWJjbGFzcykgKS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxODgwODogVGhyZWFkLmpvaW4oKSBub3cgd2FpdHMgZm9yIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBzdGF0ZSB0bworICBiZSBkZXN0cm95ZWQgYmVmb3JlIHJldHVybmluZy4gIFRoaXMgcHJldmVudHMgdW5wcmVkaWN0YWJsZSBhYm9ydHMgaW4KKyAgUHlfRW5kSW50ZXJwcmV0ZXIoKSB3aGVuIHNvbWUgbm9uLWRhZW1vbiB0aHJlYWRzIGFyZSBzdGlsbCBydW5uaW5nLgorCistIElzc3VlICMxODQ1ODogUHJldmVudCBjcmFzaGVzIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgbGliZWRpdC4gIEl0cyByZWFkbGluZQorICBlbXVsYXRpb24gaGFzIGNoYW5nZWQgZnJvbSAwLWJhc2VkIGluZGV4aW5nIHRvIDEtYmFzZWQgbGlrZSBnbnUgcmVhZGxpbmUuCisKKy0gSXNzdWUgIzE4ODUyOiBIYW5kbGUgY2FzZSBvZiBgYHJlYWRsaW5lLl9fZG9jX19gYCBiZWluZyBgYE5vbmVgYCBpbiB0aGUgbmV3CisgIHJlYWRsaW5lIGFjdGl2YXRpb24gY29kZSBpbiBgYHNpdGUucHlgYC4KKwogLSBJc3N1ZSAjMTg2NzI6IEZpeGVkIGZvcm1hdCBzcGVjaWZpZXJzIGZvciBQeV9zc2l6ZV90IGluIGRlYnVnZ2luZyBvdXRwdXQgaW4KICAgdGhlIF9zcmUgbW9kdWxlLgogCiAtIElzc3VlICMxODgzMDogaW5zcGVjdC5nZXRjbGFzc3RyZWUoKSBubyBtb3JlIHByb2R1Y2VzIGR1cGxpY2F0ZWQgZW50cmllcyBldmVuCiAgIHdoZW4gaW5wdXQgbGlzdCBjb250YWlucyBkdXBsaWNhdGVzLgogCistIElzc3VlICMxODg3ODogc3VuYXUub3BlbiBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4gIEJhc2VkIG9uCisgIHBhdGNoZXMgYnkgQ2xhdWRpdSBQb3BhIGFuZCBSLiBEYXZpZCBNdXJyYXkuCisKIC0gSXNzdWUgIzE4OTA5OiBGaXggX3RraW50ZXIudGthcHAuaW50ZXJwYWRkcigpIG9uIFdpbmRvd3MgNjQtYml0LCBkb24ndCBjYXN0CiAgIDY0LWJpdCBwb2ludGVyIHRvIGxvbmcgKDMyIGJpdHMpLgogCiAtIElzc3VlICMxODg3NjogVGhlIEZpbGVJTy5tb2RlIGF0dHJpYnV0ZSBub3cgYmV0dGVyIHJlZmxlY3RzIHRoZSBhY3R1YWwgbW9kZQogICB1bmRlciB3aGljaCB0aGUgZmlsZSB3YXMgb3BlbmVkLiAgUGF0Y2ggYnkgRXJpayBCcmF5LgogCistIElzc3VlICMxNjg1MzogQWRkIG5ldyBzZWxlY3RvcnMgbW9kdWxlLgorCistIElzc3VlICMxODg4MjogQWRkIHRocmVhZGluZy5tYWluX3RocmVhZCgpIGZ1bmN0aW9uLgorCistIElzc3VlICMxODkwMTogVGhlIHN1bmF1IGdldHBhcmFtcyBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuCisgIGEgcGxhaW4gdHVwbGUuICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE3NDg3OiBUaGUgcmVzdWx0IG9mIHRoZSB3YXZlIGdldHBhcmFtcyBtZXRob2Qgbm93IGlzIHBpY2tsZWFibGUgYWdhaW4uCisgIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTg3NTY6IG9zLnVyYW5kb20oKSBub3cgdXNlcyBhIGxhemlseS1vcGVuZWQgcGVyc2lzdGVudCBmaWxlCisgIGRlc2NyaXB0b3IsIHNvIGFzIHRvIGF2b2lkIHVzaW5nIG1hbnkgZmlsZSBkZXNjcmlwdG9ycyB3aGVuIHJ1biBpbgorICBwYXJhbGxlbCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisKIC0gSXNzdWUgIzE4NDE4OiBBZnRlciBmb3JrKCksIHJlaW5pdCBhbGwgdGhyZWFkcyBzdGF0ZXMsIG5vdCBvbmx5IGFjdGl2ZSBvbmVzLgogICBQYXRjaCBieSBBLiBKZXNzZSBKaXJ5dSBEYXZpcy4KIAorLSBJc3N1ZSAjMTc5NzQ6IFN3aXRjaCB1bml0dGVzdCBmcm9tIHVzaW5nIGdldG9wdCB0byB1c2luZyBhcmdwYXJzZS4KKworLSBJc3N1ZSAjMTE3OTg6IFRlc3RTdWl0ZSBub3cgZHJvcHMgcmVmZXJlbmNlcyB0byBvd24gdGVzdHMgYWZ0ZXIgZXhlY3V0aW9uLgorCiAtIElzc3VlICMxNjYxMTogaHR0cC5jb29raWUgbm93IGNvcnJlY3RseSBwYXJzZXMgdGhlICdzZWN1cmUnIGFuZCAnaHR0cG9ubHknCiAgIGNvb2tpZSBmbGFncy4KIAogLSBJc3N1ZSAjMTE5NzM6IEZpeCBhIHByb2JsZW0gaW4ga2V2ZW50LiBUaGUgZmxhZ3MgYW5kIGZmbGFncyBmaWVsZHMgYXJlIG5vdwogICBwcm9wZXJseSBoYW5kbGVkIGFzIHVuc2lnbmVkLgogCistIElzc3VlICMxODgwNzogYGBweXZlbnZgYCBub3cgdGFrZXMgYSAtLWNvcGllcyBhcmd1bWVudCBhbGxvd2luZyBjb3BpZXMKKyAgaW5zdGVhZCBvZiBzeW1saW5rcyBldmVuIHdoZXJlIHN5bWxpbmtzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0LgorCistIElzc3VlICMxODUzODogYGBweXRob24gLW0gZGlzYGAgbm93IHVzZXMgYXJncGFyc2UgZm9yIGFyZ3VtZW50IHByb2Nlc3NpbmcuCisgIFBhdGNoIGJ5IE1pY2hlbGUgT3Jyw7kuCisKKy0gSXNzdWUgIzE4Mzk0OiBDbG9zZSBjZ2kuRmllbGRTdG9yYWdlJ3Mgb3B0aW9uYWwgZmlsZS4KKwogLSBJc3N1ZSAjMTc3MDI6IE9uIGVycm9yLCBvcy5lbnZpcm9uYiBub3cgcmVtb3ZlcyBzdXBwcmVzcyB0aGUgZXhjZXB0IGNvbnRleHQKICAgd2hlbiByYWlzaW5nIGEgbmV3IEtleUVycm9yIHdpdGggdGhlIG9yaWdpbmFsIGtleS4KIAotLSBJc3N1ZSAjMTg3NTU6IEZpeGVkIHRoZSBsb2FkZXIgdXNlZCBpbiBpbXAgdG8gYWxsb3cgZ2V0X2RhdGEoKSB0byBiZSBjYWxsZWQKLSAgbXVsdGlwbGUgdGltZXMuCi0KIC0gSXNzdWUgIzE2ODA5OiBGaXhlZCBzb21lIHRraW50ZXIgaW5jb21wYWJpbGl0aWVzIHdpdGggVGNsL1RrIDguNi4KIAogLSBJc3N1ZSAjMTY4MDk6IFRraW50ZXIncyBzcGxpdGxpc3QoKSBhbmQgc3BsaXQoKSBtZXRob2RzIG5vdyBhY2NlcHQgVGNsX09iagpAQCAtMzkxLDYgKzk4NSw5IEBACiAtIElzc3VlICMxODMyNDogc2V0X3BheWxvYWQgbm93IGNvcnJlY3RseSBoYW5kbGVzIGJpbmFyeSBpbnB1dC4gIFRoaXMgYWxzbwogICBzdXBlcnNlZGVzIHRoZSBwcmV2aW91cyBmaXhlcyBmb3IgIzE0MzYwLCAjMTcxNywgYW5kICMxNjU2NC4KIAorLSBJc3N1ZSAjMTg3OTQ6IEFkZCBhIGZpbGVubygpIG1ldGhvZCBhbmQgYSBjbG9zZWQgYXR0cmlidXRlIHRvIHNlbGVjdC5kZXZwb2xsCisgIG9iamVjdHMuCisKIC0gSXNzdWUgIzE3MTE5OiBGaXhlZCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIHByb2Nlc3NpbmcgbGFyZ2Ugc3RyaW5ncyBhbmQgdHVwbGVzCiAgIGluIHRoZSB0a2ludGVyIG1vZHVsZS4KIApAQCAtNDAxLDkgKzk5OCw2IEBACiAtIElzc3VlICM4ODY1OiBDb25jdXJyZW50IGludm9jYXRpb24gb2Ygc2VsZWN0LnBvbGwucG9sbCgpIG5vdyByYWlzZXMgYQogICBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLiAgUGF0Y2ggYnkgQ2hyaXN0aWFuIFNjaHViZXJ0LgogCi0tIElzc3VlICMxMzQ2MTogRml4IGEgY3Jhc2ggaW4gdGhlIFRleHRJT1dyYXBwZXIudGVsbCBtZXRob2Qgb24gNjQtYml0Ci0gIHBsYXRmb3Jtcy4gIFBhdGNoIGJ5IFlvZ2VzaCBDaGF1ZGhhcmkuCi0KIC0gSXNzdWUgIzE4Nzc3OiBUaGUgc3NsIG1vZHVsZSBub3cgdXNlcyB0aGUgbmV3IENSWVBUT19USFJFQURJRCBBUEkgb2YKICAgT3BlblNTTCAxLjAuMCsgaW5zdGVhZCBvZiB0aGUgZGVwcmVjYXRlZCBDUllQVE8gaWQgY2FsbGJhY2sgZnVuY3Rpb24uCiAKQEAgLTQxOCw1MCArMTAxMiw2MDEgQEAKICAgc3RyaW5ncyBmb3IgYGByZmM4MjJOYW1lYGAgKGVtYWlsKSwgYGBkTlNOYW1lYGAgKEROUykgYW5kCiAgIGBgdW5pZm9ybVJlc291cmNlSWRlbnRpZmllcmBgIChVUkkpLgogCistIElzc3VlICMxODcwMTogUmVtb3ZlIHN1cHBvcnQgb2Ygb2xkIENQeXRob24gdmVyc2lvbnMgKDwzLjApIGZyb20gQyBjb2RlLgorCiAtIElzc3VlICMxODc1NjogSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gb3MudXJhbmRvbSgpIHdoZW4gdGhlIGZhaWx1cmUKICAgaXMgZHVlIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gL2Rldi91cmFuZG9tIG5vdCBleGlzdGluZyAoZm9yIGV4YW1wbGUsCiAgIGV4aGF1c3RpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBsaW1pdCkuCiAKKy0gSXNzdWUgIzE4NjczOiBBZGQgT19UTVBGSUxFIHRvIG9zIG1vZHVsZS4gT19UTVBGSUxFIHJlcXVpcmVzIExpbnV4IGtlcm5lbAorICAzLjExIG9yIG5ld2VyLiBJdCdzIG9ubHkgZGVmaW5lZCBvbiBzeXN0ZW0gd2l0aCAzLjExIHVhcGkgaGVhZGVycywgdG9vLgorCistIElzc3VlICMxODUzMjogQ2hhbmdlIHRoZSBidWlsdGluIGhhc2ggYWxnb3JpdGhtcycgbmFtZXMgdG8gbG93ZXIgY2FzZSBuYW1lcworICBhcyBwcm9taXNlZCBieSBoYXNobGliJ3MgZG9jdW1lbnRhdGlvbi4KKwogLSBJc3N1ZSAjMTg0MDU6IEltcHJvdmUgdGhlIGVudHJvcHkgb2YgY3J5cHQubWtzYWx0KCkuCiAKKy0gSXNzdWUgIzEyMDE1OiBUaGUgdGVtcGZpbGUgbW9kdWxlIG5vdyB1c2VzIGEgc3VmZml4IG9mIDggcmFuZG9tIGNoYXJhY3RlcnMKKyAgaW5zdGVhZCBvZiA2LCB0byByZWR1Y2UgdGhlIHJpc2sgb2YgZmlsZW5hbWUgY29sbGlzaW9uLiBUaGUgZW50cm9weSB3YXMKKyAgcmVkdWNlZCB3aGVuIHVwcGVyY2FzZSBsZXR0ZXJzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBjaGFyc2V0IHVzZWQgdG8gZ2VuZXJhdGUKKyAgcmFuZG9tIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE4NTg1OiBBZGQgOmZ1bmM6YHRleHR3cmFwLnNob3J0ZW5gIHRvIGNvbGxhcHNlIGFuZCB0cnVuY2F0ZSBhCisgIHBpZWNlIG9mIHRleHQgdG8gYSBnaXZlbiBsZW5ndGguCisKKy0gSXNzdWUgIzE4NTk4OiBUd2VhayBleGNlcHRpb24gbWVzc2FnZSBmb3IgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSB0bworICBpbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSB3aGVuIGEga2V5IGFyZ3VtZW50IGlzIG1pc3NpbmcuCisKIC0gSXNzdWUgIzE5MTUxOiBGaXggZG9jc3RyaW5nIGFuZCB1c2Ugb2YgX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkgdG8KICAgcmVmbGVjdCAyLXR1cGxlcy4KIAorLSBJc3N1ZSAjMTkxNTI6IEFkZCBFeHRlbnNpb25GaWxlTG9hZGVyLmdldF9maWxlbmFtZSgpLgorCiAtIElzc3VlICMxODY3NjogQ2hhbmdlICdwb3NpdGl2ZScgdG8gJ25vbi1uZWdhdGl2ZScgaW4gcXVldWUucHkgcHV0IGFuZCBnZXQKICAgZG9jc3RyaW5ncyBhbmQgVmFsdWVFcnJvciBtZXNzYWdlcy4gUGF0Y2ggYnkgWmhvbmd5dWUgTHVvCiAKLS0gSXNzdWUgIzE4NjgxOiBGaXggYSBOYW1lRXJyb3IgaW4gaW1wLnJlbG9hZCgpIChub3RpY2VkIGJ5IFdlaXpoYW8gTGkpLgorLSBGaXggcmVmY291bnRpbmcgaXNzdWUgd2l0aCBleHRlbnNpb24gdHlwZXMgaW4gdGtpbnRlci4KIAogLSBJc3N1ZSAjODExMjogeGxtcnBjLnNlcnZlcidzIERvY1hNTFJQQ1NlcnZlciBzZXJ2ZXIgbm8gbG9uZ2VyIHJhaXNlcyBhbiBlcnJvcgogICBpZiBtZXRob2RzIGhhdmUgYW5ub3RhdGlvbnM7IGl0IG5vdyBjb3JyZWN0bHkgZGlzcGxheXMgdGhlIGFubm90YXRpb25zLgogCistIElzc3VlICMxODYwMDogQWRkZWQgcG9saWN5IGFyZ3VtZW50IHRvIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmcsCisgIGFuZCBhc19ieXRlcyBhbmQgX19ieXRlc19fIG1ldGhvZHMgdG8gTWVzc2FnZS4KKworLSBJc3N1ZSAjMTg2NzE6IE91dHB1dCBtb3JlIGluZm9ybWF0aW9uIHdoZW4gbG9nZ2luZyBleGNlcHRpb25zIG9jY3VyLgorCistIElzc3VlICMxODYyMTogUHJldmVudCB0aGUgc2l0ZSBtb2R1bGUncyBwYXRjaGVkIGJ1aWx0aW5zIGZyb20ga2VlcGluZworICB0b28gbWFueSByZWZlcmVuY2VzIGFsaXZlIGZvciB0b28gbG9uZy4KKworLSBJc3N1ZSAjNDg4NTogQWRkIHdlYWtyZWYgc3VwcG9ydCB0byBtbWFwIG9iamVjdHMuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzg4NjA6IEZpeGVkIHJvdW5kaW5nIGluIHRpbWVkZWx0YSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTg4NDk6IEZpeGVkIGEgV2luZG93cy1zcGVjaWZpYyB0ZW1wZmlsZSBidWcgd2hlcmUgY29sbGlzaW9uIHdpdGggYW4KKyAgZXhpc3RpbmcgZGlyZWN0b3J5IGNhdXNlZCBta3N0ZW1wIGFuZCByZWxhdGVkIEFQSXMgdG8gZmFpbCBpbnN0ZWFkIG9mCisgIHJldHJ5aW5nLiBSZXBvcnQgYW5kIGZpeCBieSBWbGFkIFNoY2hlcmJpbmEuCisKKy0gSXNzdWUgIzE4OTIwOiBhcmdwYXJzZSdzIGRlZmF1bHQgZGVzdGluYXRpb24gZm9yIHRoZSB2ZXJzaW9uIGFjdGlvbiAoLXYsCisgIC0tdmVyc2lvbikgaGFzIGFsc28gYmVlbiBjaGFuZ2VkIHRvIHN0ZG91dCwgdG8gbWF0Y2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg2MjM6IEZhY3RvciBvdXQgdGhlIF9TdXBwcmVzc0NvcmVGaWxlcyBjb250ZXh0IG1hbmFnZXIgaW50bworICB0ZXN0LnN1cHBvcnQuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgorCistIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0CisgIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCisgIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCisgIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCisKKy0gSXNzdWUgIzE2Nzk5OiBTd2l0Y2hlZCBmcm9tIGdldG9wdCB0byBhcmdwYXJzZSBzdHlsZSBpbiByZWdydGVzdCdzIGFyZ3VtZW50CisgIHBhcnNpbmcuICBBZGRlZCBtb3JlIHRlc3RzIGZvciByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuCisKKy0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCisgIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCisgIHZlcnNpb25zLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4NzQzOiBGaXggcmVmZXJlbmNlcyB0byBub24tZXhpc3RhbnQgIlN0cmluZ0lPIiBtb2R1bGUuCisKKy0gSXNzdWUgIzE4NzgzOiBSZW1vdmVkIGV4aXN0aW5nIG1lbnRpb25zIG9mIFB5dGhvbiBsb25nIHR5cGUgaW4gZG9jc3RyaW5ncywKKyAgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbW1lbnRzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTU4NDogUHJvdmlkZSBjb25maWd1cmUgb3B0aW9ucyB0byBvdmVycmlkZSBkZWZhdWx0IHNlYXJjaCBwYXRocyBmb3IKKyAgVGNsIGFuZCBUayB3aGVuIGJ1aWxkaW5nIF90a2ludGVyLgorCistIElzc3VlICMxNTY2MzogVGNsL1RrIDguNS4xNCBpcyBub3cgaW5jbHVkZWQgd2l0aCB0aGUgT1MgWCAxMC42KyA2NC0vMzItYml0CisgIGluc3RhbGxlci4gIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YKKyAgVGNsL1RrIDguNSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbXMgaW4gdGhlIEFwcGxlLXN1cHBsaWVkIFRjbC9UayA4LjUKKyAgc2hpcHBlZCBpbiBPUyBYIDEwLjYgYW5kIGxhdGVyIHJlbGVhc2VzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg5MjI6IE5vdyBUaGUgTGliL3NtdHBkLnB5IGFuZCBUb29scy9pMThuL21zZ2ZtdC5weSBzY3JpcHRzIHdyaXRlCisgIHRoZWlyIHZlcnNpb24gc3RyaW5ncyB0byBzdGRvdXQsIGFuZCBub3QgdG8gc2RlcnIuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDgtMDMKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2NzQxOiBGaXggYW4gZXJyb3IgcmVwb3J0aW5nIGluIGludCgpLgorCistIElzc3VlICMxNzg5OTogRml4IHJhcmUgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gb3MubGlzdGRpcigpLgorCistIElzc3VlICMxMDI0MTogQ2xlYXIgZXh0ZW5zaW9uIG1vZHVsZSBkaWN0IGNvcGllcyBhdCBpbnRlcnByZXRlciBzaHV0ZG93bi4KKyAgUGF0Y2ggYnkgTmVpbCBTY2hlbWVuYXVlciwgbWluaW1hbGx5IG1vZGlmaWVkLgorCistIElzc3VlICM5MDM1OiBpc21vdW50IG5vdyByZWNvZ25pc2VzIHZvbHVtZXMgbW91bnRlZCBiZWxvdyBhIGRyaXZlIHJvb3QKKyAgb24gV2luZG93cy4gT3JpZ2luYWwgcGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSXNzdWUgIzE4MjE0OiBJbXByb3ZlIGZpbmFsaXphdGlvbiBvZiBQeXRob24gbW9kdWxlcyB0byBhdm9pZCBzZXR0aW5nCisgIHRoZWlyIGdsb2JhbHMgdG8gTm9uZSwgaW4gbW9zdCBjYXNlcy4KKworLSBJc3N1ZSAjMTgxMTI6IFBFUCA0NDIgaW1wbGVtZW50YXRpb24gKHNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbikuCisKKy0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCisgIG9iajJhc3Rfb2JqZWN0KCkuCisKKy0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KKworLSBJc3N1ZSAjMTg1MjA6IEFkZCBhIG5ldyBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigpIGZ1bmN0aW9uLCBzYW1lIHRoYW4KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgpIGV4Y2VwdCB0aGF0IGl0IGhhcyBhIHJldHVybiB2YWx1ZSAoMCBvbiBzdWNjZXNzLAorICAtMSBvbiBlcnJvcikuCisKKy0gSXNzdWUgIzE1OTA1OiBGaXggdGhlb3JldGljYWwgYnVmZmVyIG92ZXJmbG93IGluIGhhbmRsaW5nIG9mIHN5cy5hcmd2WzBdLAorICBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGlmIHRoZSBvcGVyYXRpb24gc3lzdGVtIGRvZXMgbm90IG9iZXkgTUFYUEFUSExFTi4KKworLSBJc3N1ZSAjMTg0MDg6IEZpeCBtYW55IHZhcmlvdXMgYnVncyBpbiBjb2RlIGhhbmRsaW5nIGVycm9ycywgZXNwZWNpYWxseQorICBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIChNZW1vcnlFcnJvcikuCisKKy0gSXNzdWUgIzE4MzQ0OiBGaXggcG90ZW50aWFsIHJlZi1sZWFrcyBpbiBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoKS4KKworLSBJc3N1ZSAjMTgzNDI6IFVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIHdoZW4gYW4gaW1wb3J0IGZhaWxzIHdoZW4gdXNpbmcKKyAgYGBmcm9tIC4uLiBpbXBvcnQgLi4uYGAuCisKKy0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCisgIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisKKy0gSXNzdWUgIzE4MzM4OiBgcHl0aG9uIC0tdmVyc2lvbmAgbm93IHByaW50cyB2ZXJzaW9uIHN0cmluZyB0byBzdGRvdXQsIGFuZAorICBub3QgdG8gc3RkZXJyLiAgUGF0Y2ggYnkgQmVya2VyIFBla3NhZyBhbmQgTWljaGFlbCBEaWNrZW5zLgorCistIElzc3VlICMxODQyNjogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBDIGV4dGVuc2lvbiBpbXBvcnQgd2hlbgorICBQeU1vZHVsZV9HZXREZWYoKSByZXR1cm5zIGFuIGVycm9yLgorCistIElzc3VlICMxNzIwNjogT24gV2luZG93cywgaW5jcmVhc2UgdGhlIHN0YWNrIHNpemUgZnJvbSAyIE1CIHRvIDQuMiBNQiB0byBmaXgKKyAgYSBzdGFjayBvdmVyZmxvdyBpbiB0aGUgbWFyc2hhbCBtb2R1bGUgKGZpeCBhIGNyYXNoIGluIHRlc3RfbWFyc2hhbCkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgSmVyZW15IEtsb3RoLgorCistIElzc3VlICMzMzI5OiBJbXBsZW1lbnQgdGhlIFBFUCA0NDU6IEFkZCBuZXcgQVBJcyB0byBjdXN0b21pemUgUHl0aG9uIG1lbW9yeQorICBhbGxvY2F0b3JzLgorCistIElzc3VlICMxODMyODogUmVvcmRlciBvcHMgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGUqKCkgZnVuY3Rpb25zLiBOb3cgdGhlCisgIHRzdGF0ZSBpcyBmaXJzdCByZW1vdmVkIGZyb20gVExTIGFuZCB0aGVuIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxMzQ4MzogVXNlIFZpcnR1YWxBbGxvYyBpbiBvYm1hbGxvYyBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODE4NDogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBhbmQgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgbm93IHJhaXNlCisgIE92ZXJmbG93RXJyb3Igd2hlbiBhbiBhcmd1bWVudCBvZiAlYyBmb3JtYXQgaXMgb3V0IG9mIHJhbmdlLgorCistIElzc3VlICMxODExMTogVGhlIG1pbigpIGFuZCBtYXgoKSBmdW5jdGlvbnMgbm93IHN1cHBvcnQgYSBkZWZhdWx0IGFyZ3VtZW50CisgIHRvIGJlIHJldHVybmVkIGluc3RlYWQgb2YgcmFpc2luZyBhIFZhbHVlRXJyb3Igb24gYW4gZW1wdHkgc2VxdWVuY2UuCisgIChDb250cmlidXRlZCBieSBKdWxpYW4gQmVybWFuLikKKworLSBJc3N1ZSAjMTgxMzc6IERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IG9uIHByZWNpc2lvbiBpbiBmbG9hdC5fX2Zvcm1hdF9fKCkKKyAgYW5kIGNvbXBsZXguX19mb3JtYXRfXygpLgorCistIElzc3VlICMxODE4MzogRml4IHZhcmlvdXMgdW5pY29kZSBvcGVyYXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBsYXJnZSB1bmljb2RlCisgIGNvZGVwb2ludHMuCisKKy0gSXNzdWUgIzE4MTgwOiBGaXggcmVmIGxlYWsgaW4gX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKCkuCisKKy0gSXNzdWUgIzE4MDM4OiBTeW50YXhFcnJvciByYWlzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHNvdXJjZXMgd2l0aCBpbGxlZ2FsCisgIGVuY29kaW5nIG5vdyBhbHdheXMgY29udGFpbnMgYW4gZW5jb2RpbmcgbmFtZS4KKworLSBJc3N1ZSAjMTc5MzE6IFJlc29sdmUgY29uZnVzaW9uIG9uIFdpbmRvd3MgYmV0d2VlbiBwaWRzIGFuZCBwcm9jZXNzCisgIGhhbmRsZXMuCisKKy0gVHdlYWsgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIHdoZW4gdGhlIG1hZ2ljIG51bWJlciBvciBzaXplIHZhbHVlIGluIGEgYnl0ZWNvZGUKKyAgZmlsZSBpcyB0cnVuY2F0ZWQuCisKKy0gSXNzdWUgIzE3OTMyOiBGaXggYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBvbiBXaW5kb3dzIDY0LWJpdCBpbiBpdGVyYXRvcnM6CisgIGNoYW5nZSB0aGUgQyB0eXBlIG9mIHNlcWl0ZXJvYmplY3QuaXRfaW5kZXggZnJvbSBsb25nIHRvIFB5X3NzaXplX3QuCisKKy0gSXNzdWUgIzE4MDY1OiBEb24ndCBzZXQgX19wYXRoX18gdG8gdGhlIHBhY2thZ2UgbmFtZSBmb3IgZnJvemVuIHBhY2thZ2VzLgorCistIElzc3VlICMxODA4ODogV2hlbiByZWxvYWRpbmcgYSBtb2R1bGUsIHVuY29uZGl0aW9uYWxseSByZXNldCBhbGwgcmVsZXZhbnQKKyAgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlIChlLmcuIF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywgX19maWxlX18sCisgIF9fY2FjaGVkX18pLgorCistIElzc3VlICMxNzkzNzogVHJ5IGhhcmRlciB0byBjb2xsZWN0IGN5Y2xpYyBnYXJiYWdlIGF0IHNodXRkb3duLgorCistIElzc3VlICMxMjM3MDogUHJldmVudCBjbGFzcyBib2RpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBfX2NsYXNzX18KKyAgY2xvc3VyZS4KKworLSBJc3N1ZSAjMTc2NDQ6IEZpeCBhIGNyYXNoIGluIHN0ci5mb3JtYXQgd2hlbiBjdXJseSBicmFjZXMgYXJlIHVzZWQgaW4gc3F1YXJlCisgIGJyYWNrZXRzLgorCistIElzc3VlICMxNzIzNzogRml4IGNyYXNoIGluIHRoZSBBU0NJSSBkZWNvZGVyIG9uIG02OGsuCisKKy0gSXNzdWUgIzE3OTI3OiBGcmFtZSBvYmplY3RzIGtlcHQgYXJndW1lbnRzIGFsaXZlIGlmIHRoZXkgaGFkIGJlZW4KKyAgY29waWVkIGludG8gYSBjZWxsLCBldmVuIGlmIHRoZSBjZWxsIHdhcyBjbGVhcmVkLgorCistIElzc3VlICMxNTQ1NDYzOiBBdCBzaHV0ZG93biwgZGVmZXIgZmluYWxpemF0aW9uIG9mIGNvZGVjIG1vZHVsZXMgc28KKyAgdGhhdCBzdGRlcnIgcmVtYWlucyB1c2FibGUuCisKKy0gSXNzdWUgIzczMzA6IEltcGxlbWVudCB3aWR0aCBhbmQgcHJlY2lzaW9uIChleDogIiU1LjNzIikgZm9yIHRoZSBmb3JtYXQKKyAgc3RyaW5nIG9mIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgZnVuY3Rpb24sIG9yaWdpbmFsIHBhdGNoIHdyaXR0ZW4gYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTU0NTQ2MzogR2xvYmFsIHZhcmlhYmxlcyBjYXVnaHQgaW4gcmVmZXJlbmNlIGN5Y2xlcyBhcmUgbm93CisgIGdhcmJhZ2UtY29sbGVjdGVkIGF0IHNodXRkb3duLgorCistIElzc3VlICMxNzA5NDogQ2xlYXIgc3RhbGUgdGhyZWFkIHN0YXRlcyBhZnRlciBmb3JrKCkuICBOb3RlIHRoYXQgdGhpcworICBpcyBhIHBvdGVudGlhbGx5IGRpc3J1cHRpdmUgY2hhbmdlIHNpbmNlIGl0IG1heSByZWxlYXNlIHNvbWUgc3lzdGVtCisgIHJlc291cmNlcyB3aGljaCB3b3VsZCBvdGhlcndpc2UgcmVtYWluIHBlcnBldHVhbGx5IGFsaXZlIChlLmcuIGRhdGFiYXNlCisgIGNvbm5lY3Rpb25zIGtlcHQgaW4gdGhyZWFkLWxvY2FsIHN0b3JhZ2UpLgorCistIElzc3VlICMxNzQwODogQXZvaWQgdXNpbmcgYW4gb2Jzb2xldGUgaW5zdGFuY2Ugb2YgdGhlIGNvcHlyZWcgbW9kdWxlIHdoZW4KKyAgdGhlIGludGVycHJldGVyIGlzIHNodXRkb3duIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4uCisKKy0gSXNzdWUgIzU4NDU6IEVuYWJsZSB0YWItY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgYnkKKyAgZGVmYXVsdCwgdGhhbmtzIHRvIGEgbmV3IHN5cy5fX2ludGVyYWN0aXZlaG9va19fLgorCistIElzc3VlICMxNzExNSwxNzExNjogTW9kdWxlIGluaXRpYWxpemF0aW9uIG5vdyBpbmNsdWRlcyBzZXR0aW5nIF9fcGFja2FnZV9fIGFuZAorICBfX2xvYWRlcl9fIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKworLSBJc3N1ZSAjMTc4NTM6IEVuc3VyZSBsb2NhbHMgb2YgYSBjbGFzcyB0aGF0IHNoYWRvdyBmcmVlIHZhcmlhYmxlcyBhbHdheXMgd2luCisgIG92ZXIgdGhlIGNsb3N1cmVzLgorCistIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKKyAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgorCistIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxODY5ODogRW5zdXJlIGltcG9ydGxpYi5yZWxvYWQoKSByZXR1cm5zIHRoZSBtb2R1bGUgb3V0IG9mIHN5cy5tb2R1bGVzLgorCistIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAorICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCisKKy0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KKyAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgorICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KKworLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQorICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCisKKy0gSXNzdWUgIzE3NzIyOiBXaGVuIGxvb2tpbmcgdXAgX19yb3VuZF9fLCByZXNvbHZlIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxNjA2MTogU3BlZWQgdXAgc3RyLnJlcGxhY2UoKSBmb3IgcmVwbGFjaW5nIDEtY2hhcmFjdGVyIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KKyAgbWV0aG9kLgorCistIElzc3VlICMxNzY0MzogQWRkIF9fY2FsbGJhY2tfXyBhdHRyaWJ1dGUgdG8gd2Vha3JlZi5yZWYuCisKKy0gSXNzdWUgIzE2NDQ3OiBGaXhlZCBwb3RlbnRpYWwgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gc2V0dGluZyBfX25hbWVfXyBvbiBhCisgIGNsYXNzLgorCistIElzc3VlICMxNzY2OTogRml4IGNyYXNoIGludm9sdmluZyBmaW5hbGl6YXRpb24gb2YgZ2VuZXJhdG9ycyB1c2luZyB5aWVsZCBmcm9tLgorCistIElzc3VlICMxNDQzOTogUHl0aG9uIG5vdyBwcmludHMgdGhlIHRyYWNlYmFjayBvbiBydW5weSBmYWlsdXJlIGF0IHN0YXJ0dXAuCisKKy0gSXNzdWUgIzE3NDY5OiBGaXggX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpIGFuZCBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgd2hlbiBydW5uaW5nIG9uIHZhbGdyaW5kLgorCistIElzc3VlICMxNzYxOTogTWFrZSBpbnB1dCgpIGNoZWNrIGZvciBDdHJsLUMgY29ycmVjdGx5IG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3MzU3OiBBZGQgbWlzc2luZyB2ZXJib3NpdHkgbWVzc2FnZXMgZm9yIC12Ly12diB0aGF0IHdlcmUgbG9zdCBkdXJpbmcKKyAgdGhlIGltcG9ydGxpYiB0cmFuc2l0aW9uLgorCistIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTczMjM6IFRoZSAiW1ggcmVmcywgWSBibG9ja3NdIiBwcmludGVkIGJ5IGRlYnVnIGJ1aWxkcyBoYXMgYmVlbgorICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgSXQgY2FuIGJlIHJlLWVuYWJsZWQgd2l0aCB0aGUgYC1YIHNob3dyZWZjb3VudGAgb3B0aW9uLgorCistIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgorCistIElzc3VlICMxNzI3NTogQ29ycmVjdGVkIGNsYXNzIG5hbWUgaW4gaW5pdCBlcnJvciBtZXNzYWdlcyBvZiB0aGUgQyB2ZXJzaW9uIG9mCisgIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbS4KKworLSBJc3N1ZSAjNzk2MzogRml4ZWQgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHRoYXQgaXNzdWVkIHdoZW4gb2JqZWN0IGlzCisgIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjODc0NTogU21hbGwgc3BlZWQgdXAgemlwaW1wb3J0IG9uIFdpbmRvd3MuIFBhdGNoIGJ5IENhdGFsaW4gSWFjb2IuCisKKy0gSXNzdWUgIzUzMDg6IFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBtYXJzaGFsbGluZyB0b28gbGFyZ2Ugb2JqZWN0IChhIHNlcXVlbmNlCisgIHdpdGggc2l6ZSA+PSAyKiozMSksIGluc3RlYWQgb2YgcHJvZHVjaW5nIGlsbGVnYWwgbWFyc2hhbCBkYXRhLgorCistIElzc3VlICMxMjk4MzogQnl0ZXMgbGl0ZXJhbHMgd2l0aCBpbnZhbGlkIFx4IGVzY2FwZSBub3cgcmFpc2UgYSBTeW50YXhFcnJvcgorICBhbmQgYSBmdWxsIHRyYWNlYmFjayBpbmNsdWRpbmcgbGluZSBudW1iZXIuCisKKy0gSXNzdWUgIzE2OTY3OiBJbiBmdW5jdGlvbiBkZWZpbml0aW9uLCBldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHRzIGJlZm9yZQorICBrZXl3b3JkLW9ubHkgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzE3MTczOiBSZW1vdmUgdXNlcyBvZiBsb2NhbGUtZGVwZW5kZW50IEMgZnVuY3Rpb25zIChpc2FscGhhKCkgZXRjLikKKyAgaW4gdGhlIGludGVycHJldGVyLgorCistIElzc3VlICMxNzEzNzogV2hlbiBhbiBVbmljb2RlIHN0cmluZyBpcyByZXNpemVkLCB0aGUgaW50ZXJuYWwgd2lkZSBjaGFyYWN0ZXIKKyAgc3RyaW5nICh3c3RyKSBmb3JtYXQgaXMgbm93IGNsZWFyZWQuCisKKy0gSXNzdWUgIzE3MDQzOiBUaGUgdW5pY29kZS1pbnRlcm5hbCBkZWNvZGVyIG5vIGxvbmdlciByZWFkIHBhc3QgdGhlIGVuZCBvZgorICBpbnB1dCBidWZmZXIuCisKKy0gSXNzdWUgIzE3MDk4OiBBbGwgbW9kdWxlcyBub3cgaGF2ZSBfX2xvYWRlcl9fIHNldCBldmVuIGlmIHRoZXkgcHJlLWV4aXN0IHRoZQorICBib290c3RyYXBwaW5nIG9mIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTY5Nzk6IEZpeCBlcnJvciBoYW5kbGluZyBidWdzIGluIHRoZSB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBiYXNlIGFyZ3VtZW50IHRvIHRoZSBpbnQgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMKKyAgZmxvYXRzLCBvciBvdGhlciBub24taW50ZWdlciBvYmplY3RzIHdpdGggYW4gX19pbnRfXyBtZXRob2QuICBPYmplY3RzCisgIHdpdGggYW4gX19pbmRleF9fIG1ldGhvZCBhcmUgbm93IGFjY2VwdGVkLgorCistIElzc3VlICMxMDE1NjogSW4gdGhlIGludGVycHJldGVyJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHVuaWNvZGUgZ2xvYmFscworICBhcmUgbm93IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5IGFzIG5lZWRlZC4KKworLSBJc3N1ZSAjMTY5ODA6IEZpeCBwcm9jZXNzaW5nIG9mIGVzY2FwZWQgbm9uLWFzY2lpIGJ5dGVzIGluIHRoZQorICB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY5NzU6IEZpeCBlcnJvciBoYW5kbGluZyBidWcgaW4gdGhlIGVzY2FwZS1kZWNvZGUgYnl0ZXMgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTQ4NTA6IE5vdyBhIGNoYXJtYXAgZGVjb2RlciB0cmVhdHMgVStGRkZFIGFzICJ1bmRlZmluZWQgbWFwcGluZyIKKyAgaW4gYW55IG1hcHBpbmcsIG5vdCBvbmx5IGluIGEgc3RyaW5nLgorCistIElzc3VlICMxNjczMDogaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vdyBubyBsb25nZXJzIHJhaXNlcyBhbgorICBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcG9wdWxhdGUgaXRzIGNhY2hlIGFuZCBpdCBmaW5kcyBvdXQgdGhlIGRpcmVjdG9yeSBpcworICB1bnJlYWRhYmxlIG9yIGhhcyB0dXJuZWQgaW50byBhIGZpbGUuIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkKKyAgRGF2aWQgUHJpdGNoYXJkLgorCistIElzc3VlICMxNjkwNjogRml4IGEgbG9naWMgZXJyb3IgdGhhdCBwcmV2ZW50ZWQgbW9zdCBzdGF0aWMgc3RyaW5ncyBmcm9tIGJlaW5nCisgIGNsZWFyZWQuCisKKy0gSXNzdWUgIzExNDYxOiBGaXggdGhlIGluY3JlbWVudGFsIFVURi0xNiBkZWNvZGVyLiBPcmlnaW5hbCBwYXRjaCBieQorICBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KKworLSBJc3N1ZSAjMTY4NTY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIGNhbGxpbmcgcmVwcigpIG9uIGEgZGljdCB3aXRoCisgIGEga2V5IHdob3NlIHJlcHIgcmFpc2UgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNjM2NzogRml4IEZpbGVJTy5yZWFkYWxsKCkgb24gV2luZG93cyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQi4KKworLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKKyAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCisgIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgorCistIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCisgIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgorCistIElzc3VlICMxMTkzOTogU2V0IHRoZSBzdF9kZXYgYXR0cmlidXRlIG9mIHN0YXRfcmVzdWx0IHRvIGFsbG93IFdpbmRvd3MgdG8KKyAgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG9zLnBhdGguc2FtZWZpbGUvc2FtZW9wZW5maWxlL3NhbWVzdGF0IGltcGxlbWVudGF0aW9ucworICB1c2VkIGJ5IG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBpbnQoKSBjb25zdHJ1Y3RvcidzIHNlY29uZCBhcmd1bWVudCAoYmFzZSkgbm8gbG9uZ2VyCisgIGFjY2VwdHMgbm9uIGludGVnZXIgdmFsdWVzLiAgQ29uc2lzdGVudCB3aXRoIHRoZSBiZWhhdmlvciBpbiBQeXRob24gMi4KKworLSBJc3N1ZSAjMTQ0NzA6IFJlbW92ZSB3OXhwb3BlbiBzdXBwb3J0IHBlciBQRVAgMTEuCisKKy0gSXNzdWUgIzk4NTY6IFJlcGxhY2UgZGVwcmVjYXRpb24gd2FybmluZyB3aXRoIHJhaXNpbmcgVHlwZUVycm9yCisgIGluIG9iamVjdC5fX2Zvcm1hdF9fLiBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzE2NTk3OiBJbiBidWZmZXJlZCBhbmQgdGV4dCBJTywgY2FsbCBjbG9zZSgpIG9uIHRoZSB1bmRlcmx5aW5nIHN0cmVhbQorICBpZiBpbnZva2luZyBmbHVzaCgpIGZhaWxzLgorCistIElzc3VlICMxNjcyMjogSW4gdGhlIGJ5dGVzKCkgY29uc3RydWN0b3IsIHRyeSB0byBjYWxsIF9fYnl0ZXNfXyBvbiB0aGUKKyAgYXJndW1lbnQgYmVmb3JlIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTY0MjE6IGxvYWRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBzaGFyZWQgb2JqZWN0IGlzIG5vdworICBoYW5kbGVkIGNvcnJlY3RseSAocHJldmlvdXNseSwgdGhlIGZpcnN0IG1vZHVsZSBsb2FkZWQgZnJvbSB0aGF0IGZpbGUKKyAgd2FzIHNpbGVudGx5IHJldHVybmVkKS4gUGF0Y2ggYnkgVsOhY2xhdiDFoG1pbGF1ZXIuCisKKy0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCisgIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAorICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KKworLSBJc3N1ZSAjMTY0OTU6IFJlbW92ZSBleHRyYW5lb3VzIE5VTEwgZW5jb2RpbmcgY2hlY2sgZnJvbSBieXRlc19kZWNvZGUoKS4KKworLSBJc3N1ZSAjMTY2MTk6IENyZWF0ZSBOYW1lQ29uc3RhbnQgQVNUIGNsYXNzIHRvIHJlcHJlc2VudCBOb25lLCBUcnVlLCBhbmQgRmFsc2UKKyAgbGl0ZXJhbHMuIEFzIGEgcmVzdWx0LCB0aGVzZSBjb25zdGFudHMgYXJlIG5ldmVyIGxvYWRlZCBhdCBydW50aW1lIGZyb20KKyAgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE2NDU1OiBPbiBGcmVlQlNEIGFuZCBTb2xhcmlzLCBpZiB0aGUgbG9jYWxlIGlzIEMsIHRoZQorICBBU0NJSS9zdXJyb2dhdGVlc2NhcGUgY29kZWMgaXMgbm93IHVzZWQsIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8KKyAgZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBUaGlzIGNoYW5nZSBmaXhlcyBpbmNvbnNpc3RlbmNpZXMgd2l0aAorICBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpIGJlY2F1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMgYW5ub3VuY2VzIGFuCisgIEFTQ0lJIGxvY2FsZSBlbmNvZGluZywgd2hlcmVhcyB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBpcyB1c2VkIGluIHByYWN0aWNlLgorCistIElzc3VlICMxNjU2MjogT3B0aW1pemUgZGljdCBlcXVhbGl0eSB0ZXN0aW5nLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY1ODg6IFNpbGVuY2UgdW51c2VkLWJ1dC1zZXQgd2FybmluZ3MgaW4gUHl0aG9uL3RocmVhZF9wdGhyZWFkCisKKy0gSXNzdWUgIzE2NTkyOiBzdHJpbmdsaWJfYnl0ZXNfam9pbiBkb2Vzbid0IHJhaXNlIE1lbW9yeUVycm9yIG9uIGFsbG9jYXRpb24KKyAgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTY1NDY6IEZpeDogYXN0LllpZWxkRnJvbSBhcmd1bWVudCBpcyBub3cgbWFuZGF0b3J5LgorCistIElzc3VlICMxNjUxNDogRml4IHJlZ3Jlc3Npb24gY2F1c2luZyBhIHRyYWNlYmFjayB3aGVuIHN5cy5wYXRoWzBdIGlzIE5vbmUKKyAgKGFjdHVhbGx5LCBhbnkgbm9uLXN0cmluZyBvciBub24tYnl0ZXMgdHlwZSkuCisKKy0gSXNzdWUgIzE2MzA2OiBGaXggbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB1bmtub3duIGNvbW1hbmQgbGluZQorICBwYXJhbWV0ZXJzIHdoZXJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBIaWV1IE5ndXllbi4KKworLSBJc3N1ZSAjMTYyMTU6IEZpeCBwb3RlbnRpYWwgZG91YmxlIG1lbW9yeSBmcmVlIGluIHN0ci5yZXBsYWNlKCkuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI5MDogQSBmbG9hdCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgX19jb21wbGV4X18gc3BlY2lhbCBtZXRob2QgaXMgbm8KKyAgbG9uZ2VyIGFjY2VwdGVkIGluIHRoZSBjb21wbGV4KCkgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE2NDE2OiBPbiBNYWMgT1MgWCwgb3BlcmF0aW5nIHN5c3RlbSBkYXRhIGFyZSBub3cgYWx3YXlzCisgIGVuY29kZWQvZGVjb2RlZCB0by9mcm9tIFVURi04L3N1cnJvZ2F0ZWVzY2FwZSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nCisgICh3aGljaCBtYXkgYmUgQVNDSUkgaWYgbm8gbG9jYWxlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIHRvIGF2b2lkCisgIGluY29uc2lzdGVuY2llcyB3aXRoIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgZnVuY3Rpb25zIHdoaWNoIGFyZQorICBhbHJlYWR5IHVzaW5nIFVURi04L3N1cnJvZ2F0ZWVzY2FwZS4KKworLSBJc3N1ZSAjMTY0NTM6IEZpeCBlcXVhbGl0eSB0ZXN0aW5nIG9mIGRlYWQgd2Vha3JlZiBvYmplY3RzLgorCistIElzc3VlICM5NTM1OiBGaXggcGVuZGluZyBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCBub3QgeWV0CisgIGhhbmRsZWQgYnkgUHl0aG9uIHRvIG5vdCBwZXJzaXN0IGFmdGVyIG9zLmZvcmsoKSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTQ3OTQ6IEZpeCBzbGljZS5pbmRpY2VzIHRvIHJldHVybiBjb3JyZWN0IHJlc3VsdHMgZm9yIGh1Z2UgdmFsdWVzLAorICByYXRoZXIgdGhhbiByYWlzaW5nIE92ZXJmbG93RXJyb3IuCisKKy0gSXNzdWUgIzE1MDAxOiBmaXggc2VnZmF1bHQgb24gImRlbCBzeXMubW9kdWxlc1snX19tYWluX18nXSIuIFBhdGNoIGJ5IFZpY3RvcgorICBTdGlubmVyLgorCistIElzc3VlICM4MjcxOiB0aGUgdXRmLTggZGVjb2RlciBub3cgb3V0cHV0cyB0aGUgY29ycmVjdCBudW1iZXIgb2YgVStGRkZECisgIGNoYXJhY3RlcnMgd2hlbiB1c2VkIHdpdGggdGhlICdyZXBsYWNlJyBlcnJvciBoYW5kbGVyIG9uIGludmFsaWQgdXRmLTgKKyAgc2VxdWVuY2VzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSwgdGVzdHMgYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICM1NzY1OiBBcHBseSBhIGhhcmQgcmVjdXJzaW9uIGxpbWl0IGluIHRoZSBjb21waWxlciBpbnN0ZWFkIG9mCisgIGJsb3dpbmcgdGhlIHN0YWNrIGFuZCBzZWdmYXVsdGluZy4gSW5pdGlhbCBwYXRjaCBieSBBbmRyZWEgR3JpZmZpbmkuCisKKy0gSXNzdWUgIzE2NDAyOiBXaGVuIHNsaWNpbmcgYSByYW5nZSwgZml4IHNoYWRvd2luZyBvZiBleGNlcHRpb25zIGZyb20KKyAgX19pbmRleF9fLgorCistIElzc3VlICMxNjMzNjogZml4IGlucHV0IGNoZWNraW5nIGluIHRoZSBzdXJyb2dhdGVwYXNzIGVycm9yIGhhbmRsZXIuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzg0MDE6IGFzc2lnbmluZyBhbiBpbnQgdG8gYSBieXRlYXJyYXkgc2xpY2UgKGUuZy4gYlszOjRdID0gNSkgbm93CisgIHJhaXNlcyBhbiBlcnJvci4KKworLSBJc3N1ZSAjNzMxNzogRGlzcGxheSBmdWxsIHRyYWNlYmFja3Mgd2hlbiBhbiBlcnJvciBvY2N1cnMgYXN5bmNocm9ub3VzbHkuCisgIFBhdGNoIGJ5IEFsb24gSG9yZXYgd2l0aCB1cGRhdGUgYnkgQWxleGV5IEthY2hheWV2LgorCistIElzc3VlICMxNjMwOTogTWFrZSBQWVRIT05QQVRIPSIiIGJlaGF2aW9yIHRoZSBzYW1lIGFzIGlmIFBZVEhPTlBBVEgKKyAgbm90IHNldCBhdCBhbGwuCisKKy0gSXNzdWUgIzEwMTg5OiBJbXByb3ZlIHRoZSBlcnJvciByZXBvcnRpbmcgb2YgU3ludGF4RXJyb3JzIHJlbGF0ZWQgdG8gZ2xvYmFsCisgIGFuZCBub25sb2NhbCBzdGF0ZW1lbnRzLgorCistIEZpeCBzZWdmYXVsdHMgb24gc2V0dGluZyBfX3F1YWxuYW1lX18gb24gYnVpbHRpbiB0eXBlcyBhbmQgYXR0ZW1wdGluZyB0bworICBkZWxldGUgaXQgb24gYW55IHR5cGUuCisKKy0gSXNzdWUgIzE0NjI1OiBSZXdyaXRlIHRoZSBVVEYtMzIgZGVjb2Rlci4gSXQgaXMgbm93IDN4IHRvIDR4IGZhc3Rlci4gUGF0Y2gKKyAgd3JpdHRlbiBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjM0NTogRml4IGFuIGluZmluaXRlIGxvb3Agd2hlbiBgYGZyb21rZXlzYGAgb24gYSBkaWN0IHN1YmNsYXNzCisgIHJlY2VpdmVkIGEgbm9uZW1wdHkgZGljdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTYyNzE6IEZpeCBzdHJhbmdlIGJ1Z3MgdGhhdCByZXN1bHRlZCBmcm9tIF9fcXVhbG5hbWVfXyBhcHBlYXJpbmcgaW4gYQorICBjbGFzcydzIF9fZGljdF9fIGFuZCBvbiB0eXBlLgorCistIElzc3VlICMxMjgwNTogTWFrZSBieXRlcy5qb2luIGFuZCBieXRlYXJyYXkuam9pbiBmYXN0ZXIgd2hlbiB0aGUgc2VwYXJhdG9yCisgIGlzIGVtcHR5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjNjA3NDogRW5zdXJlIGNhY2hlZCBieXRlY29kZSBmaWxlcyBjYW4gYWx3YXlzIGJlIHVwZGF0ZWQgYnkgdGhlCisgIHVzZXIgdGhhdCBjcmVhdGVkIHRoZW0sIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGUgaXMgcmVhZC1vbmx5LgorCistIElzc3VlICMxNTk1ODogYnl0ZXMuam9pbiBhbmQgYnl0ZWFycmF5LmpvaW4gbm93IGFjY2VwdCBhcmJpdHJhcnkgYnVmZmVyCisgIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NzgzOiBJbXByb3ZlIGludCgpIGRvY3N0cmluZyBhbmQgc3dpdGNoIGRvY3N0cmluZ3MgZm9yIHN0cigpLAorICByYW5nZSgpLCBhbmQgc2xpY2UoKSB0byB1c2UgbXVsdGktbGluZSBzaWduYXR1cmVzLgorCistIElzc3VlICMxNjE2MDogU3ViY2xhc3Mgc3VwcG9ydCBub3cgd29ya3MgZm9yIHR5cGVzLlNpbXBsZU5hbWVzcGFjZS4KKworLSBVcGdyYWRlIFVuaWNvZGUgZGF0YSAoVUNEKSB0byB2ZXJzaW9uIDYuMi4KKworLSBJc3N1ZSAjMTUzNzk6IEZpeCBwYXNzaW5nIG9mIG5vbi1CTVAgY2hhcmFjdGVycyBhcyBpbnRlZ2VycyBmb3IgdGhlIGNoYXJtYXAKKyAgZGVjb2RlciAoYWxyZWFkeSB3b3JraW5nIGFzIHVuaWNvZGUgc3RyaW5ncykuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE0NDogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBoYW5kbGluZyBwb2ludGVycyBhcyBpbnRlZ2VyCisgIHZhbHVlcywgYnkgdXNpbmcgYFB5X3VpbnRwdHJfdGAgaW5zdGVhZCBvZiBgc2l6ZV90YC4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1OTY1OiBFeHBsaWNpdGx5IGNhc3QgYEFUX0ZEQ1dEYCBhcyAoaW50KS4gIFJlcXVpcmVkIG9uIFNvbGFyaXMgMTAKKyAgKHdoaWNoIGRlZmluZXMgYEFUX0ZEQ1dEYCBhcyBgYDB4ZmZkMTk1NTNgYCksIGhhcm1sZXNzIG9uIG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTU4Mzk6IENvbnZlcnQgU3lzdGVtRXJyb3JzIGluIGBzdXBlcigpYCB0byBSdW50aW1lRXJyb3JzLgorCistIElzc3VlICMxNTQ0ODogQnVmZmVyZWQgSU8gbm93IGZyZWVzIHRoZSBidWZmZXIgd2hlbiBjbG9zZWQsIGluc3RlYWQKKyAgb2Ygd2hlbiBkZWFsbG9jYXRpbmcuCisKKy0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCisgIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgorCistIElzc3VlICMxNTg5NzogemlwaW1wb3J0LmMgZG9lc24ndCBjaGVjayByZXR1cm4gdmFsdWUgb2YgZnNlZWsoKS4KKyAgUGF0Y2ggYnkgRmVsaXBlIENydXouCisKKy0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQorICBzdWJzY3JpcHRhYmxlLgorCistIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgcHJvcGFnYXRlIEltcG9ydEVycm9yIHdoZW4gcmFpc2VkIGFzIGEKKyAgc2lkZS1lZmZlY3Qgb2YgYSBtb2R1bGUgdHJpZ2dlcmVkIGZyb20gdXNpbmcgZnJvbWxpc3QuCisKKy0gSXNzdWUgIzE1MDIyOiBBZGQgcGlja2xlIGFuZCBjb21wYXJpc29uIHN1cHBvcnQgdG8gdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzQzMzE6IEFkZGVkIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kIChJbml0aWFsIHBhdGNoIGJ5IEFsb24gSG9yZXYpCisKKy0gSXNzdWUgIzEzNDYxOiBGaXggYSBjcmFzaCBpbiB0aGUgVGV4dElPV3JhcHBlci50ZWxsIG1ldGhvZCBvbiA2NC1iaXQKKyAgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaS4KKworLSBJc3N1ZSAjMTg2ODE6IEZpeCBhIE5hbWVFcnJvciBpbiBpbXBvcnRsaWIucmVsb2FkKCkgKG5vdGljZWQgYnkgV2VpemhhbyBMaSkuCisKKy0gSXNzdWUgIzE0MzIzOiBFeHBhbmRlZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUKKyAgUkdCIC0tIFlJUSBjb252ZXJzaW9ucyBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLgorCiAtIElzc3VlICMxNzk5ODogRml4IGFuIGludGVybmFsIGVycm9yIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUuCiAKIC0gSXNzdWUgIzE3NTU3OiBGaXggb3MuZ2V0Z3JvdXBzKCkgdG8gd29yayB3aXRoIHRoZSBtb2RpZmllZCBiZWhhdmlvciBvZgogICBnZXRncm91cHMoMikgb24gT1MgWCAxMC44LiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0ZXVzeiBMZW5pay4KIAorLSBJc3N1ZSAjMTg2MDg6IEF2b2lkIGtlZXBpbmcgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbGUgbW9kdWxlCisgIGluc2lkZSB0aGUgX2lvIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg2MTk6IEZpeCBhdGV4aXQgbGVha2luZyBjYWxsYmFja3MgcmVnaXN0ZXJlZCBmcm9tIHN1Yi1pbnRlcnByZXRlcnMsCisgIGFuZCBtYWtlIGl0IEdDLWF3YXJlLgorCistIElzc3VlICMxNTY5OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgdXNlcyBQRVAgMzEyMS1zdHlsZSBtb2R1bGUKKyAgaW5pdGlhbGl6YXRpb24sIHNvIGFzIHRvIHJlY2xhaW0gYWxsb2NhdGVkIHJlc291cmNlcyAoUHl0aG9uIGNhbGxiYWNrcykKKyAgYXQgc2h1dGRvd24uICBPcmlnaW5hbCBwYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE3NjE2OiB3YXZlLm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisKIC0gSXNzdWUgIzE4NTk5OiBGaXggbmFtZSBhdHRyaWJ1dGUgb2YgX3NoYTEuc2hhMSgpIG9iamVjdC4gSXQgbm93IHJldHVybnMKICAgJ1NIQTEnIGluc3RlYWQgb2YgJ1NIQScuCiAKKy0gSXNzdWUgIzEzMjY2OiBBZGRlZCBpbnNwZWN0LnVud3JhcCB0byBlYXNpbHkgdW5yYXZlbCBfX3dyYXBwZWRfXyBjaGFpbnMKKyAgKGluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFVyYmFuIGFuZCBBYXJvbiBJbGVzKQorCiAtIElzc3VlICMxODU2MTogU2tpcCBuYW1lIGluIGN0eXBlcycgX2J1aWxkX2NhbGxhcmdzKCkgaWYgbmFtZSBpcyBOVUxMLgogCiAtIElzc3VlICMxODU1OTogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBlcnJvciBpbiBfcGlja2xlIG1vZHVsZQogCi0tIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgY2FsbCBpbgotICBjdHlwZXMnIFVfc2V0KCkuCistIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB0eXBlIG9mIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgaW4gY3R5cGUncworICBVX3NldCgpLgorCistIElzc3VlICMxNzgxODogYWlmYy5nZXRwYXJhbXMgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlLgogCiAtIElzc3VlICMxODU0OTogRWxpbWluYXRlIGRlYWQgY29kZSBpbiBzb2NrZXRfbnRvaGwoKQogCistIElzc3VlICMxODUzMDogUmVtb3ZlIGFkZGl0aW9uYWwgc3RhdCBjYWxsIGZyb20gcG9zaXhwYXRoLmlzbW91bnQuCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCiAtIElzc3VlICMxODUxNDogRml4IHVucmVhY2hhYmxlIFB5X0RFQ1JFRigpIGNhbGwgaW4gUHlDRGF0YV9Gcm9tQmFzZU9iaigpCiAKKy0gSXNzdWUgIzkxNzc6IENhbGxpbmcgcmVhZCgpIG9yIHdyaXRlKCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yLCBub3QKKyAgQXR0cmlidXRlRXJyb3IsIG9uIGEgY2xvc2VkIFNTTCBzb2NrZXQuICBQYXRjaCBieSBTZW5rbyBSYXNpYy4KKwogLSBJc3N1ZSAjMTg1MTM6IEZpeCBiZWhhdmlvdXIgb2YgY21hdGgucmVjdCB3LnIudC4gc2lnbmVkIHplcm9zIG9uIE9TIFggMTAuOCArCiAgIGdjYy4KIAorLSBJc3N1ZSAjMTg0Nzk6IENoYW5nZWQgdmVudiBBY3RpdmF0ZS5wczEgdG8gbWFrZSBkZWFjdGl2YXRlIGEgZnVuY3Rpb24sIGFuZAorICByZW1vdmVkIERlYWN0aXZhdGUucHMxLgorCiAtIElzc3VlICMxODQ4MDogQWRkIG1pc3NpbmcgY2FsbCB0byBQeVR5cGVfUmVhZHkgdG8gdGhlIF9lbGVtZW50dHJlZSBleHRlbnNpb24uCiAKIC0gSXNzdWUgIzE3Nzc4OiBGaXggdGVzdCBkaXNjb3ZlcnkgZm9yIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAoUGF0Y2ggYnkKICAgWmFjaGFyeSBXYXJlLikKIAorLSBJc3N1ZSAjMTgzOTM6IFRoZSBwcml2YXRlIG1vZHVsZSBfZ2VzdGFsdCBhbmQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAgcGxhdGZvcm0uX21hY192ZXJfZ2VzdGFsdCwgcGxhdGZvcm0uX21hY192ZXJfbG9va3VwIGFuZAorICBwbGF0Zm9ybS5fYmNkMnN0ciBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYworICBpbnRlcmZhY2Ugb2YgdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc0ODI6IGZ1bmN0b29scy51cGRhdGVfd3JhcHBlciAoYW5kIGZ1bmN0b29scy53cmFwcykgbm93IHNldCB0aGUKKyAgX193cmFwcGVkX18gYXR0cmlidXRlIGNvcnJlY3RseSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGhhcyBhCisgIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSBzZXQuCisKIC0gSXNzdWUgIzE4NDMxOiBUaGUgbmV3IGVtYWlsIGhlYWRlciBwYXJzZXIgbm93IGRlY29kZXMgUkZDMjA0NyBlbmNvZGVkIHdvcmRzCiAgIGluIHN0cnVjdHVyZWQgaGVhZGVycy4KIApAQCAtNDc1LDExICsxNjIwLDE4IEBACiAtIElzc3VlICMxODEwMTogVGNsLnNwbGl0KCkgbm93IHByb2Nlc3Mgc3RyaW5ncyBuZXN0ZWQgaW4gYSB0dXBsZSBhcyBpdAogICBkbyB3aXRoIGJ5dGUgc3RyaW5ncy4KIAorLSBJc3N1ZSAjMTgxMTY6IGdldHBhc3Mgd2FzIGFsd2F5cyBnZXR0aW5nIGFuIGVycm9yIHdoZW4gdGVzdGluZyAvZGV2L3R0eSwKKyAgYW5kIHRodXMgd2FzIGFsd2F5cyBmYWxsaW5nIGJhY2sgdG8gc3RkaW4uICBJdCBhbHNvIGxlYWtlZCBhbiBvcGVuIGZpbGUKKyAgd2hlbiBpdCBkaWQgc28uICBCb3RoIG9mIHRoZXNlIGlzc3VlcyBhcmUgbm93IGZpeGVkLgorCiAtIElzc3VlICMxNzE5ODogRml4IGEgTmFtZUVycm9yIGluIHRoZSBkYm0gbW9kdWxlLiAgUGF0Y2ggYnkgVmFsZW50aW5hCiAgIE11a2hhbWVkemhhbm92YS4KIAogLSBJc3N1ZSAjMTgwMTM6IEZpeCBjZ2kuRmllbGRTdG9yYWdlIHRvIHBhcnNlIHRoZSBXM0Mgc2FtcGxlIGZvcm0uCiAKKy0gSXNzdWUgIzE4MDIwOiBpbXByb3ZlIGh0bWwuZXNjYXBlIHNwZWVkIGJ5IGFuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgUGF0Y2ggYnkgTWF0dCBCcnlhbnQuCisKIC0gSXNzdWUgIzE4MzQ3OiBFbGVtZW50VHJlZSdzIGh0bWwgc2VyaWFsaXplciBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mCiAgIGNsb3NpbmcgdGFncy4KIApAQCAtNDk0LDYgKzE2NDYsOSBAQAogLSBJc3N1ZSAjMTgzMzk6IE5lZ2F0aXZlIGludHMga2V5cyBpbiB1bnBpY2tsZXIubWVtbyBkaWN0IG5vIGxvbmdlciBjYXVzZSBhCiAgIHNlZ2ZhdWx0IGluc2lkZSB0aGUgX3BpY2tsZSBDIGV4dGVuc2lvbi4KIAorLSBJc3N1ZSAxODI0MDogVGhlIEhNQUMgbW9kdWxlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGJ5dGVzIGFuZCBhY2NlcHRzCisgIGFueSBieXRlcy1saWtlIG9iamVjdCwgZS5nLiBtZW1vcnl2aWV3LiBPcmlnaW5hbCBwYXRjaCBieSBKb25hcyBCb3Jnc3Ryw7ZtLgorCiAtIElzc3VlICMxODIyNDogUmVtb3ZlZCBweWRvYyBzY3JpcHQgZnJvbSBjcmVhdGVkIHZlbnYsIGFzIGl0IGNhdXNlcyBwcm9ibGVtcwogICBvbiBXaW5kb3dzIGFuZCBhZGRzIG5vIHZhbHVlIG92ZXIgYW5kIGFib3ZlIHB5dGhvbiAtbSBweWRvYyAuLi4KIApAQCAtNTA0LDMxICsxNjU5LDkyIEBACiAtIElzc3VlICMxNDM2MDogZW5jb2RlX3F1b3ByaSBjYW4gbm93IGJlIHN1Y2Nlc3NmdWxseSB1c2VkIGFzIGFuIGVuY29kZXIKICAgd2hlbiBjb25zdHJ1Y3RpbmcgYSBNSU1FQXBwbGljYXRpb24gb2JqZWN0LgogCistIElzc3VlICMxMTM5MDogQWRkIC1vIGFuZCAtZiBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB0aGUgZG9jdGVzdCBDTEkgdG8KKyAgc3BlY2lmeSBkb2N0ZXN0IG9wdGlvbnMgKGFuZCBjb252ZXJ0IGl0IHRvIHVzaW5nIGFyZ3BhcnNlKS4KKwogLSBJc3N1ZSAjMTgxMzU6IHNzbC5TU0xTb2NrZXQud3JpdGUoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgdGhlIGlucHV0CiAgIHN0cmluZyBpbiBsb25nZXIgdGhhbiAyIGdpZ2FieXRlcywgYW5kIHNzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpCiAgIHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIHBhc3N3b3JkIGlzIGxvbmdlciB0aGFuIDIgZ2lnYWJ5dGVzLiBUaGUgc3NsCiAgIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgd3JpdGUuCiAKKy0gSXNzdWUgIzExMDE2OiBBZGQgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdCBtb2R1bGUgYXMgX3N0YXQuCisKIC0gSXNzdWUgIzE4MjQ4OiBGaXggbGliZmZpIGJ1aWxkIG9uIEFJWC4KIAogLSBJc3N1ZSAjMTgyNTk6IERlY2xhcmUgc2V0aG9zdG5hbWUgaW4gc29ja2V0bW9kdWxlLmMgZm9yIEFJWAogCistIElzc3VlICMxODE0NzogQWRkIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvIHNzbC5TU0xDb250ZXh0KCkuIGdldF9jYV9saXN0KCkKKyAgbGlzdHMgYWxsIGxvYWRlZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIGNlcnRfc3RvcmVfc3RhdHMoKSByZXR1cm5zIGFtb3VudCBvZgorICBsb2FkZWQgWC41MDkgY2VydHMsIFguNTA5IENBIGNlcnRzIGFuZCBDUkxzLgorCiAtIElzc3VlICMxODE2NzogY2dpLkZpZWxkU3RvcmFnZSBubyBsb25nZXIgZmFpbHMgdG8gaGFuZGxlIG11bHRpcGFydC9mb3JtLWRhdGEKICAgd2hlbiBcclxuIGFwcGVhcnMgYXQgZW5kIG9mIDY1NTM1IGJ5dGVzIHdpdGhvdXQgb3RoZXIgbmV3bGluZXMuCiAKKy0gSXNzdWUgIzE4MDc2OiBJbnRyb2R1Y2UgaW1wb3J0bGliLnV0aWwuZGVjb2RlX3NvdXJjZSgpLgorLSBJc3N1ZSAjMTgzNTc6IGFkZCB0ZXN0cyBmb3IgZGljdHZpZXcgc2V0IGRpZmZlcmVuY2UuCisgIFBhdGNoIGJ5IEZyYXNlciBUd2VlZGFsZS4KKworLSBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5nZXRfc291cmNlKCkgbm8gbG9uZ2VyIGNoYW5nZXMgU3ludGF4RXJyb3Igb3IKKyAgVW5pY29kZURlY29kZUVycm9yIGludG8gSW1wb3J0RXJyb3IuCisKKy0gSXNzdWUgIzE4MDU4LCAxODA1NzogTWFrZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UgbG9hZGVyIG1lZXQgdGhlCisgIGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlciBBQkMsIGFsbG93aW5nIGZvciBuYW1lc3BhY2UgcGFja2FnZXMgdG8gd29yayB3aXRoCisgIHJ1bnB5LgorCistIElzc3VlICMxNzE3NzogVGhlIGltcCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4KKwogLSBzdWJwcm9jZXNzOiBQcmV2ZW50IGEgcG9zc2libGUgZG91YmxlIGNsb3NlIG9mIHBhcmVudCBwaXBlIGZkcyB3aGVuIHRoZQogICBzdWJwcm9jZXNzIGV4ZWMgcnVucyBpbnRvIGFuIGVycm9yLiAgUHJldmVudCBhIHJlZ3VsYXIgbXVsdGktY2xvc2Ugb2YgdGhlCiAgIC9kZXYvbnVsbCBmZCB3aGVuIGFueSBvZiBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgd2FzIHNldCB0byBERVZOVUxMLgogCistIElzc3VlICMxODE5NDogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kCisgIHNvdXJjZV9mcm9tX2NhY2hlKCkgd2hpbGUgZG9jdW1lbnRpbmcgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb25zIGluIGltcCBhcworICBkZXByZWNhdGVkLgorCistIElzc3VlICMxNzkwNzogRG9jdW1lbnQgaW1wLm5ld19tb2R1bGUoKSBhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZgorICB0eXBlcy5Nb2R1bGVUeXBlLgorCistIElzc3VlICMxODE5MjogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiBhbmQgZG9jdW1lbnQgYXMgZGVwcmVjYXRlZAorICBpbXAuZ2V0X21hZ2ljKCkuCisKKy0gSXNzdWUgIzE4MTQ5OiBBZGQgZmlsZWNtcC5jbGVhcl9jYWNoZSgpIHRvIG1hbnVhbGx5IGNsZWFyIHRoZSBmaWxlY21wIGNhY2hlLgorICBQYXRjaCBieSBNYXJrIExldml0dAorCistIElzc3VlICMxODE5MzogQWRkIGltcG9ydGxpYi5yZWxvYWQoKS4KKworLSBJc3N1ZSAjMTgxNTc6IFN0b3AgdXNpbmcgaW1wLmxvYWRfbW9kdWxlKCkgaW4gcHlkb2MuCisKIC0gSXNzdWUgIzE2MTAyOiBNYWtlIHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpIHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCiAKKy0gSXNzdWUgIzE3MTM0OiBBZGQgc3NsLmVudW1fY2VydF9zdG9yZSgpIGFzIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0IHN0b3JlLgorCistIElzc3VlICMxODE0MzogSW1wbGVtZW50IHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSBpbiBvcmRlciB0byBkZWJ1ZworICB0aGUgZGVmYXVsdCBsb2NhdGlvbnMgZm9yIGNhZmlsZSBhbmQgY2FwYXRoLgorCistIElzc3VlICMxNzMxNDogTW92ZSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBvdmVyIHRvIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTE5NTk6IFNNVFBTZXJ2ZXIgYW5kIFNNVFBDaGFubmVsIG5vdyB0YWtlIGFuIG9wdGlvbmFsIG1hcCwgdXNlIG9mCisgIHdoaWNoIGF2b2lkcyBhZmZlY3RpbmcgZ2xvYmFsIHN0YXRlLgorCiAtIElzc3VlICMxODEwOTogb3MudW5hbWUoKSBub3cgZGVjb2RlcyBmaWVsZHMgZnJvbSB0aGUgbG9jYWxlIGVuY29kaW5nLCBhbmQKICAgc29ja2V0LmdldGhvc3RuYW1lKCkgbm93IGRlY29kZXMgdGhlIGhvc3RuYW1lIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZywKICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcgaW4gc3RyaWN0IG1vZGUuCiAKKy0gSXNzdWUgIzE4MDg5OiBJbXBsZW1lbnQgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlLgorCistIElzc3VlICMxODA4ODogSW50cm9kdWNlIGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzIGZvciBzZXR0aW5nCisgIG1vZHVsZSBhdHRyaWJ1dGVzLiBMZWFkcyB0byB0aGUgcGVuZGluZyBkZXByZWNhdGlvbiBvZgorICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKwogLSBJc3N1ZSAjMTc0MDM6IHVybGxpYi5wYXJzZS5yb2JvdHBhcnNlciBub3JtYWxpemVzIHRoZSB1cmxzIGJlZm9yZSBhZGRpbmcgdG8KICAgcnVsZWxpbmUuIFRoaXMgaGVscHMgaW4gaGFuZGxpbmcgY2VydGFpbiB0eXBlcyBpbnZhbGlkIHVybHMgaW4gYSBjb25zZXJ2YXRpdmUKLSAgbWFubmVyLgorICBtYW5uZXIuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxODA3MDogSGF2ZSBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIHNldCBhdHRyaWJ1dGVzCisgIHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBwcm9wZXJseSBzdXBwb3J0IHJlbG9hZGluZy4KKworLSBBZGRlZCBpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZCB0byByZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdG8gcHJvdmlkZSB0aGUKKyAgcHJvcGVyIG1vZHVsZSBvYmplY3QgdG8gbG9hZC4KIAogLSBJc3N1ZSAjMTgwMjU6IEZpeGVkIGEgc2VnZmF1bHQgaW4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG8oKSB3aGVuIHJhdwogICBzdHJlYW0ncyByZWFkKCkgcmV0dXJucyBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgpAQCAtNTM3LDMxICsxNzUzLDIwNCBAQAogICBub24tYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dCBzdHJpbmcgdG8gY29uZm9ybSBhIGRvY3N0cmluZy4KICAgVXBkYXRlZCB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24uCiAKLS0gSXNzdWUgIzEzNzcyOiBSZXN0b3JlZCBkaXJlY3RvcnkgZGV0ZWN0aW9uIG9mIHRhcmdldHMgaW4gYGBvcy5zeW1saW5rYGAgb24KLSAgV2luZG93cywgd2hpY2ggd2FzIHRlbXBvcmFyaWx5IHJlbW92ZWQgaW4gUHl0aG9uIDMuMi4zIGR1ZSB0byBhbiBpbmNvbXBsZXRlCi0gIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gbm93IHdvcmtzIGV2ZW4gaWYgdGhlIHN5bWxpbmsgaXMgY3JlYXRlZAotICBpbiBhIGxvY2F0aW9uIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLSBJc3N1ZSAjMTgwNzI6IEltcGxlbWVudCBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGUoKSBhbmQKKyAgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2NvZGUoKS4KKworLSBJc3N1ZSAjODI0MDogU2V0IHRoZSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUiBmbGFnIG9uIFNTTAorICBzb2NrZXRzLgorCistIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKKyAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KIAogLSBJc3N1ZSAjMTY5ODY6IEVsZW1lbnRUcmVlIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGEgc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KICAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLgogCistIElzc3VlICMxNzk5Njogc29ja2V0IG1vZHVsZSBub3cgZXhwb3NlcyBBRl9MSU5LIGNvbnN0YW50IG9uIEJTRCBhbmQgT1NYLgorCistIElzc3VlICMxNzkwMDogQWxsb3dlZCBwaWNrbGluZyBvZiByZWN1cnNpdmUgT3JkZXJlZERpY3RzLiAgRGVjcmVhc2VkIHBpY2tsZWQKKyAgc2l6ZSBhbmQgcGlja2xpbmcgdGltZS4KKworLSBJc3N1ZSAjMTc5MTQ6IEFkZCBvcy5jcHVfY291bnQoKS4gUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaSwgYmFzZWQgb24gYW4KKyAgaW5pdGlhbCBwYXRjaCBieSBUcmVudCBOZWxzb24uCisKIC0gSXNzdWUgIzE3ODEyOiBGaXhlZCBxdWFkcmF0aWMgY29tcGxleGl0eSBvZiBiYXNlNjQuYjMyZW5jb2RlKCkuCisgIE9wdGltaXplIGJhc2U2NC5iMzJlbmNvZGUoKSBhbmQgYmFzZTY0LmIzMmRlY29kZSgpIChzcGVlZCB1cCB0byAzeCkuCiAKIC0gSXNzdWUgIzE3OTgwOiBGaXggcG9zc2libGUgYWJ1c2Ugb2Ygc3NsLm1hdGNoX2hvc3RuYW1lKCkgZm9yIGRlbmlhbCBvZgogICBzZXJ2aWNlIHVzaW5nIGNlcnRpZmljYXRlcyB3aXRoIG1hbnkgd2lsZGNhcmRzIChDVkUtMjAxMy0yMDk5KS4KIAorLSBJc3N1ZSAjMTU3NTg6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIHNvIGl0IG5vIGxvbmdlciBoYXMgTyhuKioyKSBjb21wbGV4aXR5LgorCistIElzc3VlICMxNDU5NjogVGhlIHN0cnVjdC5TdHJ1Y3QoKSBvYmplY3RzIG5vdyB1c2UgbW9yZSBjb21wYWN0IGltcGxlbWVudGF0aW9uLgorCiAtIElzc3VlICMxNzk4MTogQ2xvc2VkIHNvY2tldCBvbiBlcnJvciBpbiBTeXNMb2dIYW5kbGVyLgogCistIElzc3VlICMxNzk2NDogRml4IG9zLnN5c2NvbmYoKTogdGhlIHJldHVybiB0eXBlIG9mIHRoZSBDIHN5c2NvbmYoKSBmdW5jdGlvbgorICBpcyBsb25nLCBub3QgaW50LgorCiAtIEZpeCB0eXBvcyBpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4KIAogLSBJc3N1ZSAjMTc3NTQ6IE1ha2UgY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCkgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2FsZS4KIAogLSBJc3N1ZSAjMTc5Njg6IEZpeCBtZW1vcnkgbGVhayBpbiBvcy5saXN0eGF0dHIoKS4KIAotLSBJc3N1ZSAjMTcyNjk6IFdvcmthcm91bmQgZm9yIHNvY2tldC5nZXRhZGRyaW5mbyBjcmFzaCBvbiBNYWNPUyBYCi0gIHdpdGggcG9ydCBOb25lIG9yICIwIiBhbmQgZmxhZ3MgQUlfTlVNRVJJQ1NFUlYuCistIElzc3VlICMxNzYwNjogRml4ZWQgc3VwcG9ydCBvZiBlbmNvZGVkIGJ5dGUgc3RyaW5ncyBpbiB0aGUgWE1MR2VuZXJhdG9yCisgIGNoYXJhY3RlcnMoKSBhbmQgaWdub3JhYmxlV2hpdGVzcGFjZSgpIG1ldGhvZHMuICBPcmlnaW5hbCBwYXRjaCBieSBTZWJhc3RpYW4KKyAgT3J0aXogVmFzcXVlei4KIAotLSBJc3N1ZSAjMTg2OTg6IEVuc3VyZSBpbXAucmVsb2FkKCkgcmV0dXJucyB0aGUgbW9kdWxlIG91dCBvZiBzeXMubW9kdWxlcy4KKy0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCisgIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgorCistIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQorICBjb2RlY3Mub3BlbigpLgorCistIElzc3VlICMxNjYwMTogUmVzdGFydGluZyBpdGVyYXRpb24gb3ZlciB0YXJmaWxlIG5vIG1vcmUgY29udGludWVzIGZyb20gd2hlcmUKKyAgaXQgbGVmdCBvZmYuICBQYXRjaCBieSBNaWNoYWVsIEJpcnR3ZWxsLgorCistIElzc3VlICMxNzI4OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgcGxheXMgbmljZXIgd2l0aCBleHRlcm5hbCBtb2R1bGVzCisgIG9yIGFwcGxpY2F0aW9ucyBjaGFuZ2luZyB0aGUgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyBnbG9iYWwKKyAgdmFyaWFibGUuICBJbml0aWFsIHBhdGNoIGJ5IEJyYWRsZXkgRnJvZWhsZS4KKworLSBJc3N1ZSAjMTIxODE6IHNlbGVjdCBtb2R1bGU6IEZpeCBzdHJ1Y3Qga2V2ZW50IGRlZmluaXRpb24gb24gT3BlbkJTRCA2NC1iaXQKKyAgcGxhdGZvcm1zLiBQYXRjaCBieSBGZWRlcmljbyBTY2h3aW5kdC4KKworLSBJc3N1ZSAjMTE4MTY6IG11bHRpcGxlIGltcHJvdmVtZW50cyB0byB0aGUgZGlzIG1vZHVsZTogZ2V0X2luc3RydWN0aW9ucworICBnZW5lcmF0b3IsIGFiaWxpdHkgdG8gcmVkaXJlY3Qgb3V0cHV0IHRvIGEgZmlsZSwgQnl0ZWNvZGUgYW5kIEluc3RydWN0aW9uCisgIGFic3RyYWN0aW9ucy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLCBSeWFuIEtlbGx5IGFuZCBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTM4MzE6IEVtYmVkIHN0cmluZ2lmaWNhdGlvbiBvZiByZW1vdGUgdHJhY2ViYWNrIGluIGxvY2FsCisgIHRyYWNlYmFjayByYWlzZWQgd2hlbiBwb29sIHRhc2sgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU1Mjg6IEFkZCB3ZWFrcmVmLmZpbmFsaXplIHRvIHN1cHBvcnQgZmluYWxpemF0aW9uIHVzaW5nCisgIHdlYWtyZWYgY2FsbGJhY2tzLgorCistIElzc3VlICMxNDE3MzogQXZvaWQgY3Jhc2hpbmcgd2hlbiByZWFkaW5nIGEgc2lnbmFsIGhhbmRsZXIgZHVyaW5nCisgIGludGVycHJldGVyIHNodXRkb3duLgorCistIElzc3VlICMxNTkwMjogRml4IGltcC5sb2FkX21vZHVsZSgpIGFjY2VwdGluZyBOb25lIGFzIGEgZmlsZSB3aGVuIGxvYWRpbmcgYW4KKyAgZXh0ZW5zaW9uIG1vZHVsZS4KKworLSBJc3N1ZSAjMTM3MjE6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIGFuZCBTU0xTb2NrZXQuZG9faGFuZHNoYWtlKCkgbm93CisgIHJhaXNlIGFuIE9TRXJyb3Igd2l0aCBFTk9UQ09OTiwgaW5zdGVhZCBvZiBhbiBBdHRyaWJ1dGVFcnJvciwgd2hlbiB0aGUKKyAgU1NMU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQuCisKKy0gSXNzdWUgIzE0Njc5OiBhZGQgYW4gX19hbGxfXyAodGhhdCBjb250YWlucyBvbmx5IEhUTUxQYXJzZXIpIHRvIGh0bWwucGFyc2VyLgorCistIElzc3VlICMxNzgwMjogRml4IGFuIFVuYm91bmRMb2NhbEVycm9yIGluIGh0bWwucGFyc2VyLiAgSW5pdGlhbCB0ZXN0cyBieQorICBUaG9tYXMgQmFybG93LgorCistIElzc3VlICMxNzM1ODogTW9kdWxlcyBsb2FkZWQgYnkgaW1wLmxvYWRfc291cmNlKCkgYW5kIGxvYWRfY29tcGlsZWQoKSAoYW5kIGJ5CisgIGV4dGVudGlvbiBsb2FkX21vZHVsZSgpKSBub3cgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2Ygd29ya2luZyB3aGVuIHJlbG9hZGVkLgorCistIElzc3VlICMxNzgwNDogTmV3IGZ1bmN0aW9uIGBgc3RydWN0Lml0ZXJfdW5wYWNrYGAgYWxsb3dzIGZvciBzdHJlYW1pbmcKKyAgc3RydWN0IHVucGFja2luZy4KKworLSBJc3N1ZSAjMTc4MzA6IFdoZW4ga2V5d29yZC5weSBpcyB1c2VkIHRvIHVwZGF0ZSBhIGtleXdvcmQgZmlsZSwgaXQgbm93CisgIHByZXNlcnZlcyB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorCistIElzc3VlICMxNzI3MjogTWFraW5nIHRoZSB1cmxsaWIucmVxdWVzdCdzIFJlcXVlc3QuZnVsbF91cmwgYSBkZXNjcmlwdG9yLgorICBGaXhlcyBidWdzIHdpdGggYXNzaWdubWVudCB0byBmdWxsX3VybC4gUGF0Y2ggYnkgRGVtaWFuIEJyZWNodC4KKworLSBJc3N1ZSAjMTczNTM6IFBsaXN0bGliIGVtaXR0ZWQgZW1wdHkgZGF0YSB0YWdzIHdpdGggZGVlcGx5IG5lc3RlZCBkYXRhc3RydWN0dXJlcworCistIElzc3VlICMxMTcxNDogVXNlICd3aXRoJyBzdGF0ZW1lbnRzIHRvIGFzc3VyZSBhIFNlbWFwaG9yZSByZWxlYXNlcyBhCisgIGNvbmRpdGlvbiB2YXJpYWJsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBSYWNoZWwuCisKKy0gSXNzdWUgIzE2NjI0OiBgc3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIG5vdyBhY2NlcHRzIGFuIGBpbnB1dGAgYXJndW1lbnQsCisgIGFsbG93aW5nIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4gdG8gYmUgcHJvdmlkZWQgYXMgYSAoYnl0ZSkgc3RyaW5nLgorICBQYXRjaCBieSBaYWNrIFdlaW5iZXJnLgorCistIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCisgIFVuaXggZG9tYWluIHNvY2tldHMuCisKKy0gSXNzdWUgIzE2Njk0OiBBZGQgYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgbW9kdWxlLgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzExMTgyOiByZW1vdmUgdGhlIHVudXNlZCBhbmQgdW5kb2N1bWVudGVkIHB5ZG9jLlNjYW5uZXIgY2xhc3MuCisgIFBhdGNoIGJ5IE1hcnRpbiBNb3JyaXNvbi4KKworLSBJc3N1ZSAjMTc3NDE6IEFkZCBFbGVtZW50VHJlZS5JbmNyZW1lbnRhbFBhcnNlciwgYW4gZXZlbnQtZHJpdmVuIHBhcnNlcgorICBmb3Igbm9uLWJsb2NraW5nIGFwcGxpY2F0aW9ucy4KKworLSBJc3N1ZSAjMTc1NTU6IEZpeCBGb3JrQXdhcmVUaHJlYWRMb2NrIHNvIHRoYXQgc2l6ZSBvZiBhZnRlciBmb3JrCisgIHJlZ2lzdHJ5IGRvZXMgbm90IGdyb3cgZXhwb25lbnRpYWxseSB3aXRoIGdlbmVyYXRpb24gb2YgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTc3MDc6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSdzIGdldCgpIG1ldGhvZCBkb2VzIG5vdCBibG9jayBmb3Igc2hvcnQKKyAgdGltZW91dHMuCisKKy0gSXN1c2UgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQorICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxsYmFja3MgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaWYgZW1wdHkgcGF0aCBhcmd1bWVudCBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNzcxMDogRml4IHBpY2tsZSByYWlzaW5nIGEgU3lzdGVtRXJyb3Igb24gYm9ndXMgaW5wdXQuCisKKy0gSXNzdWUgIzE3MzQxOiBJbmNsdWRlIHRoZSBpbnZhbGlkIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gcmUgYWJvdXQKKyAgaW52YWxpZCBncm91cCBuYW1lcy4KKworLSBJc3N1ZSAjMTc3MDI6IG9zLmVudmlyb24gbm93IHJhaXNlcyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudAorICB2YXJpYWJsZSBuYW1lIChzdHIgb24gVU5JWCksIGluc3RlYWQgb2YgdXNpbmcgdGhlIGVuY29kZWQgbmFtZSAoYnl0ZXMgb24KKyAgVU5JWCkuCisKKy0gSXNzdWUgIzE2MTYzOiBNYWtlIHRoZSBpbXBvcnRsaWIgYmFzZWQgdmVyc2lvbiBvZiBwa2d1dGlsLml0ZXJfaW1wb3J0ZXJzCisgIHdvcmsgZm9yIHN1Ym1vZHVsZXMuIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY4MDQ6IEZpeCBhIGJ1ZyBpbiB0aGUgJ3NpdGUnIG1vZHVsZSB0aGF0IGNhdXNlZCBydW5uaW5nCisgICdweXRob24gLVMgLW0gc2l0ZScgdG8gaW5jb3JyZWN0bHkgdGhyb3cgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNTQ4MDogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIGFuZCB1bnVzZWQgVFlQRV9JTlQ2NCBjb2RlIGZyb20gbWFyc2hhbC4KKyAgSW5pdGlhbCBwYXRjaCBieSBEYW5pZWwgUml0aS4KKworLSBJc3N1ZSAjMjExODogU01UUEV4Y2VwdGlvbiBpcyBub3cgYSBzdWJjbGFzcyBvZiBJT0Vycm9yLgorCistIElzc3VlICMxNzAxNjogR2V0IHJpZCBvZiBwb3NzaWJsZSBwb2ludGVyIHdyYXBhcm91bmRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cworICBpbiB0aGUgcmUgbW9kdWxlLiAgUGF0Y2ggYnkgTmlja29sYWkgWmVsZG92aWNoLgorCistIElzc3VlICMxNjY1ODogYWRkIG1pc3NpbmcgcmV0dXJuIHRvIEhUVFBDb25uZWN0aW9uLnNlbmQoKQorICBQYXRjaCBieSBKZWZmIEtudXBwLgorCistIElzc3VlICM5NTU2OiBBbGxvd2VkIHNwZWNpZnlpbmcgYSB0aW1lLW9mLWRheSBmb3IgYSBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIKKyAgdG8gcm90YXRlLgorCistIElzc3VlICMxNDk3MTogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm8gbG9uZ2VyIGdldHMgY29uZnVzZWQgd2hlbiBhIGZ1bmN0aW9uCisgIGhhcyBhIGRpZmZlcmVudCBfX25hbWVfXyB0aGFuIGl0cyBuYW1lIGluIHRoZSBUZXN0Q2FzZSBjbGFzcyBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNzQ4NzogVGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4KKworLSBJc3N1ZSAjMTc2NzU6IHNvY2tldCByZXByKCkgcHJvdmlkZXMgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKGlmIGFueSkuCisgIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnCisKKy0gSXNzdWUgIzE3MDkzOiBNYWtlIHRoZSBBQkNzIGluIGltcG9ydGxpYi5hYmMgcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBvciByYWlzZQorICByZWFzb25hYmxlIGV4Y2VwdGlvbnMgZm9yIHRoZWlyIG1ldGhvZHMgdG8gbWFrZSB0aGVtIG1vcmUgYW1lbmFibGUgdG8gc3VwZXIoKQorICBjYWxscy4KKworLSBJc3N1ZSAjMTc1NjY6IE1ha2UgaW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHIoKSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuCisgIGFic3RyYWN0bWV0aG9kIGFuZCByYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igc28gYXMgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCistIElzc3VlICMxNzY3ODogUmVtb3ZlIHRoZSB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgaW4gaHR0cC9jb29raWVqYXIucHkuCisgIENoYW5naW5nIHRoZSB1c2FnZSBvZiBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgorCistIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgorCistIElzc3VlICMxNjQ3NTogU3VwcG9ydCBvYmplY3QgaW5zdGFuY2luZywgcmVjdXJzaW9uIGFuZCBpbnRlcm5lZCBzdHJpbmdzCisgIGluIG1hcnNoYWwKKworLSBJc3N1ZSAjMTc1MDI6IFByb2Nlc3MgREVGQVVMVCB2YWx1ZXMgaW4gbW9jayBzaWRlX2VmZmVjdCB0aGF0IHJldHVybnMgaXRlcmF0b3IuCisKKy0gSXNzdWUgIzE2Nzk1OiBPbiB0aGUgYXN0LmFyZ3VtZW50cyBvYmplY3QsIHVuaWZ5IHZhcmFyZyB3aXRoIHZhcmFyZ2Fubm90YXRpb24KKyAgYW5kIGt3YXJnIGFuZCBrd2FyZ2Fubm90YXRpb24uIENoYW5nZSB0aGUgY29sdW1uIG9mZnNldCBvZiBhc3QuQXR0cmlidXRlIHRvIGJlCisgIGF0IHRoZSBhdHRyaWJ1dGUgbmFtZS4KKworLSBJc3N1ZSAjMTc0MzQ6IFByb3Blcmx5IHJhaXNlIGEgU3ludGF4RXJyb3Igd2hlbiBhIHN0cmluZyBvY2N1cnMgYmV0d2VlbiBmdXR1cmUKKyAgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTcxMTc6IEltcG9ydCBhbmQgQGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIgbm93IHNldCBfX2xvYWRlcl9fIHdoZW4KKyAgaXQgaGFzIGEgdmFsdWUgb2YgTm9uZSBvciB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QuCisKKy0gSXNzdWUgIzE3MDMyOiBUaGUgImdsb2JhbCIgaW4gdGhlICJOYW1lRXJyb3I6IGdsb2JhbCBuYW1lICd4JyBpcyBub3QgZGVmaW5lZCIKKyAgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiByZW1vdmVkLiAgUGF0Y2ggYnkgUmFtIFJhY2h1bS4KIAogLSBJc3N1ZSAjMTgwODA6IFdoZW4gYnVpbGRpbmcgYSBDIGV4dGVuc2lvbiBtb2R1bGUgb24gT1MgWCwgaWYgdGhlIGNvbXBpbGVyCiAgIGlzIG92ZXJyaWRlbiB3aXRoIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdXNlIHRoZSBuZXcgY29tcGlsZXIgYXMKQEAgLTU3MSwzMSArMTk2MCw3MTggQEAKIC0gSXNzdWUgIzE4MTEzOiBGaXhlZCBhIHJlZmNvdW50IGxlYWsgaW4gdGhlIGN1cnNlcy5wYW5lbCBtb2R1bGUncwogICBzZXRfdXNlcnB0cigpIG1ldGhvZC4gIFJlcG9ydGVkIGJ5IEF0c3VvIElzaGltb3RvLgogCi0tIElzc3VlICMxODg0OTogRml4ZWQgYSBXaW5kb3dzLXNwZWNpZmljIHRlbXBmaWxlIGJ1ZyB3aGVyZSBjb2xsaXNpb24gd2l0aCBhbgotICBleGlzdGluZyBkaXJlY3RvcnkgY2F1c2VkIG1rc3RlbXAgYW5kIHJlbGF0ZWQgQVBJcyB0byBmYWlsIGluc3RlYWQgb2YKLSAgcmV0cnlpbmcuIFJlcG9ydCBhbmQgZml4IGJ5IFZsYWQgU2hjaGVyYmluYS4KKy0gSW1wbGVtZW50IFBFUCA0NDMgIlNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyIuCiAKLS0gSXNzdWUgIzE5NDAwOiBQcmV2ZW50IGV4dGVuc2lvbiBtb2R1bGUgYnVpbGQgZmFpbHVyZXMgd2l0aCBYY29kZSA1IG9uIE9TIFgKLSAgMTAuOCsgd2hlbiB1c2luZyBhIHVuaXZlcnNhbCBQeXRob24gdGhhdCBpbmNsdWRlZCBhIFBQQyBhcmNoaXRlY3R1cmUsCi0gIHN1Y2ggYXMgd2l0aCBhIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgYmluYXJ5IGluc3RhbGxlci4KKy0gSW1wbGVtZW50IFBFUCA0MzUgIkFkZGluZyBhbiBFbnVtIHR5cGUgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5Ii4KIAotQyBBUEkKLS0tLS0tCistIElzc3VlICMxNTU5NjogRmFzdGVyIHBpY2tsaW5nIG9mIHVuaWNvZGUgc3RyaW5ncy4KIAotLSBJc3N1ZSAjMTgzNTE6IEZpeCB2YXJpb3VzIGlzc3VlcyB3aXRoIGEgaGVscGVyIGZ1bmN0aW9uIGluIGltcG9ydGxpYiB1c2VkCi0gIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIChhbmQgdGh1cyBieSBleHRlbnNpb24KLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoKSBhbmQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgpKS4KKy0gSXNzdWUgIzE3NTcyOiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hpbGUgcGFzc2luZyBiYWQgZGlyZWN0aXZlcyB0bworICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0MzU6IHRocmVhZGluZy5UaW1lcidzIF9faW5pdF9fIG1ldGhvZCBubyBsb25nZXIgdXNlcyBtdXRhYmxlCisgIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgYXJncyBhbmQga3dhcmdzIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzE3NTI2OiBmaXggYW4gSW5kZXhFcnJvciByYWlzZWQgd2hpbGUgcGFzc2luZyBjb2RlIHdpdGhvdXQgZmlsZW5hbWUgdG8KKyAgaW5zcGVjdC5maW5kc291cmNlKCkuICBJbml0aWFsIHBhdGNoIGJ5IFR5bGVyIERveWxlLgorCistIElzc3VlICMxNzU0MDogQWRkZWQgc3R5bGUgdG8gZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gYnkgZGljdC4KKworLSBJc3N1ZSAjMTY2OTI6IFRoZSBzc2wgbW9kdWxlIG5vdyBzdXBwb3J0cyBUTFMgMS4xIGFuZCBUTFMgMS4yLiAgSW5pdGlhbAorICBwYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxNzAyNTogbXVsdGlwcm9jZXNzaW5nOiBSZWR1Y2UgUXVldWUgYW5kIFNpbXBsZVF1ZXVlIGNvbnRlbnRpb24uCisKKy0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCisgIGljZXdlYXNlbCwgaWNlYXBlLgorCistIElzc3VlICMxNzE1MDogcHByaW50IG5vdyB1c2VzIGxpbmUgY29udGludWF0aW9ucyB0byB3cmFwIGxvbmcgc3RyaW5nCisgIGxpdGVyYWxzLgorCistIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKKyAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQorICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCisgIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgorCistIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bworICBmaWxlQ29uZmlnKCkuCisKKy0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKSB3aGVyZQorICB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCisKKy0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgKENUUkwrYykuCisKKy0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KKyAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCisgIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KKworLSBJc3N1ZSAjMTY5OTc6IHVuaXR0ZXN0LlRlc3RDYXNlIG5vdyBwcm92aWRlcyBhIHN1YlRlc3QoKSBjb250ZXh0IG1hbmFnZXIKKyAgdG8gcHJvY2VkdXJhbGx5IGdlbmVyYXRlLCBpbiBhbiBlYXN5IHdheSwgc21hbGwgdGVzdCBpbnN0YW5jZXMuCisKKy0gSXNzdWUgIzE3NDg1OiBBbHNvIGRlbGV0ZSB0aGUgUmVxdWVzdCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgdGhlIGRhdGEKKyAgYXR0cmlidXRlIGlzIGRlbGV0ZWQuICAoRm9sbG93IG9uIHRvIGlzc3VlIDE2NDY0KS4KKworLSBJc3N1ZSAjMTU5Mjc6IENWUyBub3cgY29ycmVjdGx5IHBhcnNlcyBlc2NhcGVkIG5ld2xpbmVzIGFuZCBjYXJyaWFnZQorICB3aGVuIHBhcnNpbmcgd2l0aCBxdW90aW5nIHR1cm5lZCBvZmYuCisKKy0gSXNzdWUgIzE3NDY3OiBhZGQgcmVhZGxpbmUgYW5kIHJlYWRsaW5lcyBzdXBwb3J0IHRvIG1vY2tfb3BlbiBpbgorICB1bml0dGVzdC5tb2NrLgorCistIElzc3VlICMxNzE5MjogVXBkYXRlIHRoZSBjdHlwZXMgbW9kdWxlJ3MgbGliZmZpIHRvIHYzLjAuMTMuICBUaGlzCisgIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBzdGFjayBtaXNhbGlnbm1lbnQgaXNzdWUgb24geDg2IGFuZCBpc3N1ZXMgb24KKyAgc29tZSBtb3JlIHJlY2VudCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzg4NjI6IEZpeGVkIGN1cnNlcyBjbGVhbnVwIHdoZW4gZ2V0a2V5IGlzIGludGVycnB1dGVkIGJ5IGEgc2lnbmFsLgorCistIElzc3VlICMxNzQ0MzogaW1hcGxpYi5JTUFQNF9zdHJlYW0gd2FzIHVzaW5nIHRoZSBkZWZhdWx0IHVuYnVmZmVyZWQgSU8KKyAgaW4gc3VicHJvY2VzcywgYnV0IHRoZSBpbWFwIGNvZGUgYXNzdW1lcyBidWZmZXJlZCBJTy4gIEluIFB5dGhvbjIgdGhpcworICB3b3JrZWQgYnkgYWNjaWRlbnQuICBJTUFQNF9zdHJlYW0gbm93IGV4cGxpY2l0bHkgdXNlcyBidWZmZXJlZCBJTy4KKworLSBJc3N1ZSAjMTc0NzY6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB1bmRvY3VtZW50ZWQgcHlkb2MKKyAgJ2FsbG1ldGhvZHMnOyBpdCB3YXMgbWlzc2luZyB1bmJvdW5kIG1ldGhvZHMgb24gdGhlIGNsYXNzLgorCistIElzc3VlICMxNzQ3NDogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZHMgb2YgUmVxdWVzdCBjbGFzcy4KKworLSBJc3N1ZSAjMTY3MDk6IHVuaXR0ZXN0IGRpc2NvdmVyIG9yZGVyIGlzIG5vLWxvbmdlciBmaWxlc3lzdGVtIHNwZWNpZmljLiBQYXRjaAorICBieSBKZWZmIFJhbW5hbmkuCisKKy0gVXNlIHRoZSBIVFRQUyBQeVBJIHVybCBmb3IgdXBsb2FkLCBvdmVycmlkaW5nIGFueSBwbGFpbiBIVFRQIFVSTCBpbiBweXBpcmMuCisKKy0gSXNzdWUgIzUwMjQ6IHNuZGhkci53aGljaGhkciBub3cgcmV0dXJucyB0aGUgZnJhbWUgY291bnQgZm9yIFdBViBmaWxlcworICByYXRoZXIgdGhhbiAtMS4KKworLSBJc3N1ZSAjMTc0NjA6IFJlbW92ZSB0aGUgc3RyaWN0IGFyZ3VtZW50IG9mIEhUVFBDb25uZWN0aW9uIGFuZCByZW1vdmluZyB0aGUKKyAgRGVwcmVjYXRpb25XYXJuaW5nIGJlaW5nIGlzc3VlZCBmcm9tIDMuMiBvbndhcmRzLgorCistIElzc3VlICMxNjg4MDogRG8gbm90IGFzc3VtZSBfaW1wLmxvYWRfZHluYW1pYygpIGlzIGRlZmluZWQgaW4gdGhlIGltcCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2Mzg5OiBGaXhlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uIDMuMSBpbiB0aGUKKyAgY2FjaGluZyBvZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLgorCistIEFkZGVkIG1pc3NpbmcgRmVlZFBhcnNlciBhbmQgQnl0ZXNGZWVkUGFyc2VyIHRvIGVtYWlsLnBhcnNlci5fX2FsbF9fLgorCistIElzc3VlICMxNzQzMTogRml4IG1pc3NpbmcgaW1wb3J0IG9mIEJ5dGVzRmVlZFBhcnNlciBpbiBlbWFpbC5wYXJzZXIuCisKKy0gSXNzdWUgIzEyOTIxOiBodHRwLnNlcnZlcidzIHNlbmRfZXJyb3IgdGFrZXMgYW4gZXhwbGFpbiBhcmd1bWVudCB0byBzZW5kIG1vcmUKKyAgaW5mb3JtYXRpb24gaW4gcmVzcG9uc2UuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEthcmwuCisKKy0gSXNzdWUgIzE3NDE0OiBBZGQgdGltZWl0LCByZXBlYXQsIGFuZCBkZWZhdWx0X3RpbWVyIHRvIHRpbWVpdC5fX2FsbF9fLgorCistIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAorICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgorCistIElzc3VlICMxNzA5OTogSGF2ZSBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSByYWlzZSBWYWx1ZUVycm9yIHdoZW4gX19sb2FkZXJfXworICBpcyBub3Qgc2V0LCBoYXJtb25pemluZyB3aXRoIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIE5vbmUuCisKKy0gRXhwb3NlIHRoZSBPX1BBVEggY29uc3RhbnQgaW4gdGhlIG9zIG1vZHVsZSBpZiBpdCBpcyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE3MzY4OiBGaXggYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgUHl0aG9uIEpTT04gZGVjb2RlciB0aGF0IGNhdXNlZAorICBhIGZhaWx1cmUgd2hpbGUgZGVjb2RpbmcgZW1wdHkgb2JqZWN0IGxpdGVyYWxzIHdoZW4gb2JqZWN0X3BhaXJzX2hvb2sgd2FzCisgIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTczODU6IEZpeCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gdGhyZWFkaW5nLkNvbmRpdGlvbi4gIFRoZSBGSUZPCisgIHF1ZXVlIG5vdyB1c2VzIGEgZGVxdWUgaW5zdGVhZCBvZiBhIGxpc3QuCisKKy0gSXNzdWUgIzE1ODA2OiBBZGQgY29udGV4dGxpYi5pZ25vcmUoKS4gIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWFuYWdlciB0bworICBpZ25vcmUgc3BlY2lmaWVkIGV4Y2VwdGlvbnMsIHJlcGxhY2luZyB0aGUgImV4Y2VwdCBTb21lRXhjZXB0aW9uOiBwYXNzIiBpZGlvbS4KKworLSBJc3N1ZSAjMTQ2NDU6IFRoZSBlbWFpbCBnZW5lcmF0b3IgY2xhc3NlcyBub3cgcHJvZHVjZSBvdXRwdXQgdXNpbmcgdGhlCisgIHNwZWNpZmllZCBsaW5lc2VwIHRocm91Z2hvdXQuICBQcmV2aW91c2x5IGlmIHRoZSBwcm9sb2csIGVwaWxvZywgb3IKKyAgYm9keSB3ZXJlIHN0b3JlZCB3aXRoIGEgZGlmZmVyZW50IGxpbmVzZXAsIHRoYXQgbGluZXNlcCB3YXMgdXNlZC4gIFRoaXMKKyAgZml4IGNvcnJlY3RzIGFuIFJGQyBub24tY29tcGxpYW5jZSBpc3N1ZSB3aXRoIHNtdHBsaWIuc2VuZF9tZXNzYWdlLgorCistIElzc3VlICMxNzI3ODogRml4IGEgY3Jhc2ggaW4gaGVhcHEuaGVhcHB1c2goKSBhbmQgaGVhcHEuaGVhcHBvcCgpIHdoZW4KKyAgdGhlIGxpc3QgaXMgYmVpbmcgcmVzaXplZCBjb25jdXJyZW50bHkuCisKKy0gSXNzdWUgIzE2OTYyOiBVc2UgZ2V0ZGVudHM2NCBpbnN0ZWFkIG9mIHRoZSBvYnNvbGV0ZSBnZXRkZW50cyBzeXNjYWxsCisgIGluIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBvbiBMaW51eC4KKworLSBJc3N1ZSAjMTY5MzU6IHVuaXR0ZXN0IG5vdyBjb3VudHMgdGhlIG1vZHVsZSBhcyBza2lwcGVkIGlmIGl0IHJhaXNlcyBTa2lwVGVzdCwKKyAgaW5zdGVhZCBvZiBjb3VudGluZyBpdCBhcyBhbiBlcnJvci4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTcwMTg6IE1ha2UgUHJvY2Vzcy5qb2luKCkgcmV0cnkgaWYgb3Mud2FpdHBpZCgpIGZhaWxzIHdpdGggRUlOVFIuCisKKy0gSXNzdWUgIzE3MjIzOiBhcnJheSBtb2R1bGU6IEZpeCBhIGNyYXNoZXIgd2hlbiBjb252ZXJ0aW5nIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgaW52YWxpZCBjaGFyYWN0ZXJzIChvdXRzaWRlIHJhbmdlIFtVKzAwMDA7IFUrMTBmZmZmXSkgdG8gVW5pY29kZToKKyAgcmVwcihhcnJheSksIHN0cihhcnJheSkgYW5kIGFycmF5LnRvdW5pY29kZSgpLiBQYXRjaCB3cml0dGVuIGJ5IE1hbnVlbCBKYWNvYi4KKworLSBJc3N1ZSAjMTcxOTc6IHByb2ZpbGUvY1Byb2ZpbGUgbW9kdWxlcyByZWZhY3RvcmVkIHNvIHRoYXQgY29kZSBvZiBydW4oKSBhbmQKKyAgcnVuY3R4KCkgdXRpbGl0eSBmdW5jdGlvbnMgaXMgbm90IGR1cGxpY2F0ZWQgaW4gYm90aCBtb2R1bGVzLgorCistIElzc3VlICMxNDcyMDogc3FsaXRlMzogQ29udmVydCBkYXRldGltZSBtaWNyb3NlY29uZHMgY29ycmVjdGx5LgorICBQYXRjaCBieSBMb3dlIFRoaWRlcm1hbi4KKworLSBJc3N1ZSAjMTUxMzI6IEFsbG93IGEgbGlzdCBmb3IgdGhlIGRlZmF1bHRUZXN0IGFyZ3VtZW50IG9mCisgIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLiBQYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZworICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgorCistIElzc3VlICM2NjIzOiBBZGRlZCBleHBsaWNpdCBEZXByZWNhdGlvbldhcm5pbmcgZm9yIGZ0cGxpYi5uZXRyYywgd2hpY2ggaGFzCisgIGJlZW4gZGVwcmVjYXRlZCBhbmQgdW5kb2N1bWVudGVkIGZvciBhIGxvbmcgdGltZS4KKworLSBJc3N1ZSAjMTM3MDA6IEZpeCBieXRlL3N0cmluZyBoYW5kbGluZyBpbiBpbWFwbGliIGF1dGhlbnRpY2F0aW9uIHdoZW4gYW4KKyAgYXV0aG9iamVjdCBpcyBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzEzMTUzOiBUa2ludGVyIGZ1bmN0aW9ucyBub3cgcmFpc2UgVGNsRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4KKyAgYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIuCisKKy0gSXNzdWUgIzk2Njk6IFByb3RlY3QgcmUgYWdhaW5zdCBpbmZpbml0ZSBsb29wcyBvbiB6ZXJvLXdpZHRoIG1hdGNoaW5nIGluCisgIG5vbi1ncmVlZHkgcmVwZWF0LiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzE2OTogVGhlIG1heGltYWwgcmVwZXRpdGlvbiBudW1iZXIgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGJlZW4KKyAgaW5jcmVhc2VkIGZyb20gNjU1MzQgdG8gMjE0NzQ4MzY0NyAob24gMzItYml0IHBsYXRmb3JtKSBvciA0Mjk0OTY3Mjk0IChvbgorICA2NC1iaXQpLgorCistIElzc3VlICMxNzE0MzogRml4IGEgbWlzc2luZyBpbXBvcnQgaW4gdGhlIHRyYWNlIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTUyMjA6IGVtYWlsLmZlZWRwYXJzZXIncyBsaW5lIHNwbGl0dGluZyBhbGdvcml0aG0gaXMgbm93IHNpbXBsZXIgYW5kCisgIGZhc3Rlci4KKworLSBJc3N1ZSAjMTY3NDM6IEZpeCBtbWFwIG92ZXJmbG93IGNoZWNrIG9uIDMyIGJpdCBXaW5kb3dzLgorCistIElzc3VlICMxNjk5Njogd2ViYnJvd3NlciBtb2R1bGUgbm93IHVzZXMgc2h1dGlsLndoaWNoKCkgdG8gZmluZCBhCisgIHdlYi1icm93c2VyIG9uIHRoZSBleGVjdXRhYmxlIHNlYXJjaCBwYXRoLgorCistIElzc3VlICMxNjgwMDogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIG5vIGxvbmdlciBsZWZ0IHRlbXBvcmFyeSBmaWxlcyB3aGVuCisgIHRoZSBkaXNrIGlzIGZ1bGwuICBPcmlnaW5hbCBwYXRjaCBieSBBbWlyIFN6ZWtlbHkuCisKKy0gSXNzdWUgIzE3MTkyOiBJbXBvcnQgbGliZmZpLTMuMC4xMi4KKworLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCisgIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgorCistIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgorCistIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCisKKy0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbW9yZSBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgorCistIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCisgIFswLCAyKm1hdGgucGldLgorCistIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgorCistIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKKyAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMzc3Mzogc3FsaXRlMy5jb25uZWN0KCkgZ2V0cyBhIG5ldyBgdXJpYCBwYXJhbWV0ZXIgdG8gcGFzcyB0aGUKKyAgZmlsZW5hbWUgYXMgYSBVUkksIGFsbG93aW5nIHRvIHBhc3MgY3VzdG9tIG9wdGlvbnMuCisKKy0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgorICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMTAzNTU6IEluIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNsYXNzIG1vZGUsIG5hbWUsIGVuY29kaW5nIGFuZAorICBuZXdsaW5lcyBwcm9wZXJ0aWVzIG5vdyB3b3JrIGZvciB1bnJvbGxlZCBmaWxlcy4gIE9ic29sZXRlZCBhbmQgbmV2ZXIKKyAgd29ya2luZyBvbiBQeXRob24gMyB4cmVhZGxpbmUgbWV0aG9kIG5vdyByZW1vdmVkLgorCistIElzc3VlICMxNjY4NjogRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBhdWRpb29wIG1vZHVsZS4gIEZpeGVkIGNyYXNoZXMgaW4KKyAgYXZncHAoKSwgbWF4cHAoKSBhbmQgcmF0ZWN2KCkuICBGaXhlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGFkZCgpLCBiaWFzKCksCisgIGFuZCByYXRlY3YoKS4gIHJldmVyc2UoKSwgbGluMmxpbigpIGFuZCByYXRlY3YoKSBubyBtb3JlIGxvc2UgcHJlY2lzaW9uIGZvcgorICAzMi1iaXQgc2FtcGxlcy4gIG1heCgpIGFuZCBybXMoKSBubyBtb3JlIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQgYW5kCisgIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIDMyLWJpdCBzYW1wbGUgLTB4ODAwMDAwMDAuCisKKy0gSXNzdWUgIzE3MDczOiBGaXggc29tZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiBzcWxpdGUzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTY3MjM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIG5vIGxvbmdlciBtYXJrZWQgY2xvc2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24KKyAgaXMgYXV0b21hdGljYWxseSBjbG9zZWQuCisKKy0gSXNzdWUgIzE1MzU5OiBBZGQgQ0FOX0JDTSBwcm90b2NvbCBzdXBwb3J0IHRvIHRoZSBzb2NrZXQgbW9kdWxlLiBQYXRjaCBieQorICBCcmlhbiBUaG9ybmUuCisKKy0gSXNzdWUgIzE2OTQ4OiBGaXggcXVvdGVkIHByaW50YWJsZSBib2R5IGVuY29kaW5nIGZvciBub24tbGF0aW4xIGNoYXJhY3RlcgorICBzZXRzIGluIHRoZSBlbWFpbCBwYWNrYWdlLgorCistIElzc3VlICMxNjgxMTogRml4IGZvbGRpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlIGluIHRoZSBwcm92aXNpb25hbCBlbWFpbAorICBwb2xpY2llcy4KKworLSBJc3N1ZSAjMTcxMzI6IFVwZGF0ZSBzeW1ib2wgZm9yICJ5aWVsZCBmcm9tIiBncmFtbWFyIGNoYW5nZXMuCisKKy0gSXNzdWUgIzE3MDc2OiBNYWtlIGNvcHlpbmcgb2YgeGF0dHJzIG1vcmUgcGVybWlzc2l2ZSBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCisgIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgorCistIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgorICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuICBJdCBub3cgYWNjZXB0cyBieXRlcyBhbmQKKyAgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KKworLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKKyAgcGFyc2VzIG5lc3RlZCBtdXRhdGluZyBzZXF1ZW5jZS4KKworLSBJc3N1ZSAjNTI4OTogRml4IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBvbiBTb2xhcmlzLgorCistIElzc3VlICMxNzEwNjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIGlvLlRleHRJT1dyYXBwZXIgd2hlbiBhbiB1bmRlcmx5aW5nCisgIHN0cmVhbSBvciBhIGRlY29kZXIgcHJvZHVjZXMgZGF0YSBvZiBhbiB1bmV4cGVjdGVkIHR5cGUgKGkuZS4gd2hlbgorICBpby5UZXh0SU9XcmFwcGVyIGluaXRpYWxpemVkIHdpdGggdGV4dCBzdHJlYW0gb3IgdXNlIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjKS4KKworLSBJc3N1ZSAjMTcwMTU6IFdoZW4gaXQgaGFzIGEgc3BlYywgYSBNb2NrIG9iamVjdCBub3cgaW5zcGVjdHMgaXRzIHNpZ25hdHVyZQorICB3aGVuIG1hdGNoaW5nIGNhbGxzLCBzbyB0aGF0IGFyZ3VtZW50cyBjYW4gYmUgbWF0Y2hlZCBwb3NpdGlvbmFsbHkgb3IKKyAgYnkgbmFtZS4KKworLSBJc3N1ZSAjMTU2MzM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIGlzIG5vdyBtYXJrIGNsb3NlZCB3aGVuIHRoZSBzZXJ2ZXIKKyAgc2VuZHMgbGVzcyB0aGFuIHRoZSBhZHZlcnRpc2VkIENvbnRlbnQtTGVuZ3RoLgorCistIElzc3VlICMxMjI2ODogVGhlIGlvIG1vZHVsZSBmaWxlIG9iamVjdCB3cml0ZSBtZXRob2RzIG5vIGxvbmdlciBhYm9ydCBlYXJseQorICB3aGVuIG9uZSBvZiBpdHMgd3JpdGUgc3lzdGVtIGNhbGxzIGlzIGludGVycnVwdGVkIChFSU5UUikuCisKKy0gSXNzdWUgIzY5NzI6IFRoZSB6aXBmaWxlIG1vZHVsZSBubyBsb25nZXIgb3ZlcndyaXRlcyBmaWxlcyBvdXRzaWRlIG9mCisgIGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdoZW4gZXh0cmFjdGluZyBtYWxpY2lvdXMgemlwIGZpbGVzLgorCistIElzc3VlICM0ODQ0OiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwRmlsZSB3aGVuIG9wZW5zIGEgWklQIGZpbGUgd2l0aCBhbgorICBpbmNvbXBsZXRlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZQorICBQb2xvIGFuZCBBbGFuIE1jSW50eXJlLgorCistIElzc3VlICMxNzA3MTogU2lnbmF0dXJlLmJpbmQoKSBub3cgd29ya3Mgd2hlbiBvbmUgb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzCisgIGlzIG5hbWVkIGBgc2VsZmBgLgorCistIElzc3VlICMxMjAwNDogRml4IGFuIGludGVybmFsIGVycm9yIGluIFB5WmlwRmlsZSB3aGVuIHdyaXRpbmcgYW4gaW52YWxpZAorICBQeXRob24gZmlsZS4gIFBhdGNoIGJ5IEJlbiBNb3JnYW4uCisKKy0gSGF2ZSBweV9jb21waWxlIHVzZSBpbXBvcnRsaWIgYXMgbXVjaCBhcyBwb3NzaWJsZSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICBDb2RlIG5vdyByYWlzZXMgRmlsZUV4aXN0c0Vycm9yIGlmIHRoZSBmaWxlIHBhdGggdG8gYmUgdXNlZCBmb3IgdGhlCisgIGJ5dGUtY29tcGlsZWQgZmlsZSBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSBhcyBhIHdhcm5pbmcgdGhhdCBpbXBvcnQKKyAgd2lsbCBub3Qga2VlcCB0aGUgZmlsZSBwYXRoIHR5cGUgaWYgaXQgd3JpdGVzIHRvIHRoYXQgcGF0aC4KKworLSBJc3N1ZSAjMTgwMDIyOiBIYXZlIHNpdGUuYWRkcGFja2FnZSgpIGNvbnNpZGVyIGFscmVhZHkga25vd24gcGF0aHMgZXZlbiB3aGVuCisgIG5vbmUgYXJlIGV4cGxpY2l0bHkgcGFzc2VkIGluLiBCdWcgcmVwb3J0IGFuZCBmaXggYnkgS2lyaWxsLgorCistIElzc3VlICMxNjAyMTMzOiBvbiBNYWMgT1MgWCBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIChgYC0tZW5hYmxlLXNoYXJlZGBgKQorICBub3cgZmlsbHMgdGhlIGBgb3MuZW52aXJvbmBgIHZhcmlhYmxlIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTU1MDU6IGB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcmAgbm8gbG9uZ2VyIGFzc3VtZXMgU0lHSU5UIGhhbmRsZXIgaXMKKyAgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LgorCistIElzc3VlICMxMzQ1NDogRml4IGEgY3Jhc2ggd2hlbiBkZWxldGluZyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5IGl0ZXJ0b29scy50ZWUoKQorICBpZiBhbGwgb3RoZXIgaXRlcmF0b3JzIHdlcmUgdmVyeSBhZHZhbmNlZCBiZWZvcmUuCisKKy0gSXNzdWUgIzEyNDExOiBGaXggdG8gY2dpLnBhcnNlX211bHRpcGFydCB0byBjb3JyZWN0bHkgdXNlIGJ5dGVzIGJvdW5kYXJpZXMKKyAgYW5kIGJ5dGVzIGRhdGEuIFBhdGNoIGJ5IEpvbmFzIFdhZ25lci4KKworLSBJc3N1ZSAjMTY5NTc6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBzZWFyY2hlcyBhIGJhcmUgZmlsZSBuYW1lIGluIHRoZQorICBjdXJyZW50IGRpcmVjdG9yeSBvbiBVbml4IGFuZCBubyBsb25nZXIgc2VhcmNoZXMgYSByZWxhdGl2ZSBmaWxlIHBhdGggd2l0aAorICBhIGRpcmVjdG9yeSBwYXJ0IGluIFBBVEggZGlyZWN0b3JpZXMuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTE1OTA1MTogR3ppcEZpbGUgbm93IHJhaXNlcyBFT0ZFcnJvciB3aGVuIHJlYWRpbmcgYSBjb3JydXB0ZWQgZmlsZQorICB3aXRoIHRydW5jYXRlZCBoZWFkZXIgb3IgZm9vdGVyLgorCistIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQorICBkZXNjcmlwdG9yIGFyZ3VtZW50LgorCistIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKKyAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgorCistIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCisgIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCisKKy0gSXNzdWUgIzk3MjA6IHppcGZpbGUgbm93IHdyaXRlcyBjb3JyZWN0IGxvY2FsIGhlYWRlcnMgZm9yIGZpbGVzIGxhcmdlciB0aGFuCisgIDQgR2lCLgorCistIElzc3VlICMxNjk1NTogRml4IHRoZSBwb2xsKCkgbWV0aG9kIGZvciBtdWx0aXByb2Nlc3NpbmcncyBzb2NrZXQKKyAgY29ubmVjdGlvbnMgb24gV2luZG93cy4KKworLSBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbm93IHByb3Blcmx5IGNsb3NlcyB0aGUgaW5wdXQgZmlsZS4KKworLSBJc3N1ZSAjMTUwMzE6IFJlZmFjdG9yIHNvbWUgLnB5YyBtYW5hZ2VtZW50IGNvZGUgdG8gY3V0IGRvd24gb24gY29kZQorICBkdXBsaWNhdGlvbi4gVGhhbmtzIHRvIFJvbmFuIExhbXkgZm9yIHRoZSByZXBvcnQgYW5kIHRha2luZyBhbiBpbml0aWFsIHN0YWIKKyAgYXQgdGhlIHByb2JsZW0uCisKKy0gSXNzdWUgIzE2Mzk4OiBPcHRpbWl6ZSBkZXF1ZS5yb3RhdGUoKSBzbyB0aGF0IGl0IG9ubHkgbW92ZXMgcG9pbnRlcnMKKyAgYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIHVuZGVybHlpbmcgZGF0YSB3aXRoIGluY3JlZnMgYW5kIGRlY3JlZnMuCisKKy0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KKworLSBJc3N1ZSAjMTM4OTk6IFxBLCBcWiwgYW5kIFxCIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosIGFuZCBCIGxpdGVyYWxzCisgIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gJ1tcQV0nKS4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCisgIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0CisgIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KKworLSBmY250bDogYWRkIEZfRFVQRkRfQ0xPRVhFQyBjb25zdGFudCwgYXZhaWxhYmxlIG9uIExpbnV4IDIuNi4yNCsuCisKKy0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCisgIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KKworLSBJc3N1ZSAjODEwOTogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkksIHRoYW5rcworICB0byBhIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuICBQYXRjaCBieSBEYW5pZWwKKyAgQmxhY2suCisKKy0gSXNzdWUgIzE2ODYwOiBJbiB0ZW1wZmlsZSwgdXNlIE9fQ0xPRVhFQyB3aGVuIGF2YWlsYWJsZSB0byBzZXQgdGhlCisgIGNsb3NlLW9uLWV4ZWMgZmxhZyBhdG9taWNhbGx5LgorCistIElzc3VlICMxNjY3NDogcmFuZG9tLmdldHJhbmRiaXRzKCkgaXMgbm93IDIwLTQwJSBmYXN0ZXIgZm9yIHNtYWxsIGludGVnZXJzLgorCistIElzc3VlICMxNjAwOTogSlNPTiBlcnJvciBtZXNzYWdlcyBub3cgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uLgorCistIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKKyAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KKworLSBJc3N1ZSAjMTY4MzM6IEluIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLCBkbyBub3QgY29uY2F0ZW5hdGUgdGhlIHJlcXVlc3QKKyAgaGVhZGVycyBhbmQgYm9keSB3aGVuIHRoZSBwYXlsb2FkIGV4Y2VlZHMgMTYgS0IsIHNpbmNlIGl0IGNhbiBjb25zdW1lIG1vcmUKKyAgbWVtb3J5IGZvciBubyBiZW5lZml0LiAgUGF0Y2ggYnkgQmVubm8gTGVzbGllLgorCistIElzc3VlICMxNjU0MTogdGtfc2V0UGFsZXR0ZSgpIG5vdyB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgcGFyc2VyLnBvcGl0ZW0oKWAgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yLgorICBUaGlzIG1ha2VzIGBwYXJzZXIuY2xlYW4oKWAgd29yayBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydzZWN0aW9uJ10gPSB7fWBgIG5vdyBwcmVzZXJ2ZXMKKyAgc2VjdGlvbiBvcmRlciB3aXRoaW4gdGhlIHBhcnNlci4gVGhpcyBtYWtlcyBgcGFyc2VyLnVwZGF0ZSgpYCBwcmVzZXJ2ZSBzZWN0aW9uCisgIG9yZGVyIGFzIHdlbGwuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydERUZBVUxUJ10gPSB7fWBgIG5vdyBjb3JyZWN0bHkKKyAgY2xlYXJzIHByZXZpb3VzIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbi4gU2FtZSBnb2VzIGZvcgorICBgYHBhcnNlci51cGRhdGUoeydERUZBVUxUJzoge319KWBgLgorCistIElzc3VlICM5NTg2OiBSZWRlZmluZSBTRU1fRkFJTEVEIG9uIE1hY09TWCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LgorCistIElzc3VlICMxNjc4NzogSW5jcmVhc2UgYXN5bmNvcmUgYW5kIGFzeW5jaGF0IGRlZmF1bHQgb3V0cHV0IGJ1ZmZlcnMgc2l6ZSwgdG8KKyAgZGVjcmVhc2UgQ1BVIHVzYWdlIGFuZCBpbmNyZWFzZSB0aHJvdWdocHV0LgorCistIElzc3VlICMxMDUyNzogbWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGlmIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTY2ODg6IE5vdyByZWdleGVzIGNvbnRhaW5lZCBiYWNrcmVmZXJlbmNlcyBjb3JyZWN0bHkgd29yayB3aXRoCisgIG5vbi1BU0NJSSBzdHJpbmdzLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxNjQ4NjogTWFrZSBhaWZjIGZpbGVzIGFjdCBhcyBjb250ZXh0IG1hbmFnZXJzLgorCistIElzc3VlICMxNjQ4NTogTm93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpZiBmaWxlIGhlYWRlciBwYXRjaGluZyBmYWlsZWQKKyAgb24gY2xvc2luZyBhbiBhaWZjIGZpbGUuCisKKy0gSXNzdWUgIzE2NjQwOiBSdW4gbGVzcyBjb2RlIHVuZGVyIGEgbG9jayBpbiBzY2hlZCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2MTY1OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbm8gbG9uZ2VyIGJsb2NrcyBhIHNjaGVkdWxlciBmb3Igb3RoZXIKKyAgdGhyZWFkcy4KKworLSBJc3N1ZSAjMTY2NDE6IERlZmF1bHQgdmFsdWVzIG9mIHNjaGVkLnNjaGVkdWxlci5lbnRlcigpIGFyZSBubyBsb25nZXIKKyAgbW9kaWZpYWJsZS4KKworLSBJc3N1ZSAjMTY2MTg6IE1ha2UgZ2xvYi5nbG9iIG1hdGNoIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3RyaW5ncyBhbmQgYnl0ZXMKKyAgcmVnYXJkaW5nIGxlYWRpbmcgZG90cy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Nzg4OiBBZGQgc2FtZXN0YXQgdG8gTGliL250cGF0aC5weQorCistIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQorICBwYXRoLgorCistIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCisgIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgorCistIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgorICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKKworLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQorICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93CisgIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKKyAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCisKKy0gSXNzdWUgIzExMTc1OiBhcmdwYXJzZS5GaWxlVHlwZSBub3cgYWNjZXB0cyBlbmNvZGluZyBhbmQgZXJyb3JzCisgIGFyZ3VtZW50cy4gUGF0Y2ggYnkgTHVjYXMgTWF5c3RyZS4KKworLSBJc3N1ZSAjMTY0ODg6IGVwb2xsKCkgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgYHdpdGhgIHN0YXRlbWVudC4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KKyAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCisgIFJ1bmRzdGVpbi4KKworLSBBZGQgYWJjLkFCQyBjbGFzcyB0byB1c2UgaW5oZXJpdGFuY2UgcmF0aGVyIHRoYW4gYSBkaXJlY3QgaW52b2NhdGlvbiBvZgorICBBQkNNZXRhIG1ldGFjbGFzcy4gUGF0Y2ggYnkgQnJ1bm8gRHVwdWlzLgorCistIEV4cG9zZSB0aGUgVENQX0ZBU1RPUEVOIGFuZCBNU0dfRkFTVE9QRU4gZmxhZ3MgaW4gc29ja2V0IHdoZW4gdGhleSdyZQorICBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE1NzAxOiBBZGQgYSAuaGVhZGVycyBhdHRyaWJ1dGUgdG8gdXJsbGliLmVycm9yLkhUVFBFcnJvci4gUGF0Y2gKKyAgY29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTU4NzI6IEZpeCAzLjMgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmQtYmFzZWQgc2h1dGlsLnJtdHJlZQorICB0aGF0IGNhdXNlZCBpdCB0byBub3QgaWdub3JlIGNlcnRhaW4gZXJyb3JzIHdoZW4gaWdub3JlX2Vycm9ycyB3YXMgc2V0LgorICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhIGFuZCBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI0ODogRGlzYWJsZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkKKyAgdGtpbnRlciB3aGVuIHRoZSAtRSBmbGFnIGlzIHBhc3NlZCB0byBQeXRob24uICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzEzMzkwOiBOZXcgZnVuY3Rpb24gOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAgcmV0dXJucyB0aGUKKyAgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTY2Mjg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGN0eXBlcy5yZXNpemUoKS4KKworLSBJc3N1ZSAjMTM2MTQ6IEZpeCBzZXR1cC5weSByZWdpc3RlciBmYWlsdXJlIHdpdGggaW52YWxpZCByc3QgaW4gZGVzY3JpcHRpb24uCisgIFBhdGNoIGJ5IEp1bGllbiBDb3VydGVhdSBhbmQgUGllcnJlIFBhdWwgTGVmZWJ2cmUuCisKKy0gSXNzdWUgIzEzNTEyOiBDcmVhdGUgfi8ucHlwaXJjIHNlY3VyZWx5IChDVkUtMjAxMS00OTQ0KS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgUGhpbGlwIEplbnZleSwgdGVzdGVkIGJ5IE1hZ2VpYSBhbmQgRGViaWFuLgorCistIElzc3VlICM3NzE5OiBNYWtlIGRpc3R1dGlscyBpZ25vcmUgYGAubmZzKmBgIGZpbGVzIGluc3RlYWQgb2YgY2hva2luZyBsYXRlcgorICBvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2lsZW50R2hvc3QgYW5kIEplZmYgUmFtbmFuaS4KKworLSBJc3N1ZSAjMTMxMjA6IEFsbG93IHRvIGNhbGwgcGRiLnNldF90cmFjZSgpIGZyb20gdGhyZWFkLgorICBQYXRjaCBieSBJbHlhIFNhbmRsZXIuCisKKy0gSXNzdWUgIzE2NTg1OiBNYWtlIENKSyBlbmNvZGVycyBzdXBwb3J0IGVycm9yIGhhbmRsZXJzIHRoYXQgcmV0dXJuIGJ5dGVzIHBlcgorICBQRVAgMzgzLgorCistIElzc3VlICMxMDE4MjogVGhlIHJlIG1vZHVsZSBkb2Vzbid0IHRydW5jYXRlIGluZGljZXMgdG8gMzIgYml0cyBhbnltb3JlLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjMzMzogdXNlICgiLCIsICI6ICIpIGFzIGRlZmF1bHQgc2VwYXJhdG9yIHdoZW4gaW5kZW50IGlzIHNwZWNpZmllZAorICB0byBhdm9pZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY1NzM6IEluIDJ0bzMsIHRyZWF0IGVudW1lcmF0ZSgpIGxpa2UgYSBjb25zdW1pbmcgY2FsbCwgc28gc3VwZXJmbHVvdXMKKyAgbGlzdCgpIGNhbGxzIGFyZW4ndCBhZGRlZCB0byBmaWx0ZXIoKSwgbWFwKCksIGFuZCB6aXAoKSB3aGljaCBhcmUgZGlyZWN0bHkKKyAgcGFzc2VkIGVudW1lcmF0ZSgpLgorCistIElzc3VlICMxMjg0ODogVGhlIHB1cmUgUHl0aG9uIHBpY2tsZSBpbXBsZW1lbnRhdGlvbiBub3cgdHJlYXRzIG9iamVjdAorICBsZW5ndGhzIGFzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VycywgbGlrZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2VzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjQyMzogdXJsbGliLnJlcXVlc3Qgbm93IGhhcyBzdXBwb3J0IGZvciBgYGRhdGE6YGAgVVJMcy4gIFBhdGNoIGJ5CisgIE1hdGhpYXMgUGFuemVuYsO2Y2suCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuc3RscygpIHRvIHN3aXRjaCBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8KKyAgYW4gZW5jcnlwdGVkIFBPUDMgc2Vzc2lvbiwgb24gc3VwcG9ydGVkIHNlcnZlcnMuICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuY2FwYSgpIG1ldGhvZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQKKyAgYnkgdGhlIFBPUDMgc2VydmVyLiAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICM0NDczOiBFbnN1cmUgdGhlIHNvY2tldCBpcyBzaHV0ZG93biBjbGVhbmx5IGluIFBPUDMuY2xvc2UoKS4KKyAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICMxNjUyMjogYWRkZWQgRkFJTF9GQVNUIGZsYWcgdG8gZG9jdGVzdC4KKworLSBJc3N1ZSAjMTU2Mjc6IEFkZCB0aGUgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLnNvdXJjZV90b19jb2RlKCkgbWV0aG9kLgorCistIElzc3VlICMxNjQwODogRml4IGZpbGUgZGVzY3JpcHRvcnMgbm90IGJlaW5nIGNsb3NlZCBpbiBlcnJvciBjb25kaXRpb25zCisgIGluIHRoZSB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0NjMxOiBBZGQgYSBuZXcgOmNsYXNzOmB3ZWFrcmVmLldlYWtNZXRob2RgIHRvIHNpbXVsYXRlIHdlYWsKKyAgcmVmZXJlbmNlcyB0byBib3VuZCBtZXRob2RzLgorCistIElzc3VlICMxNjQ2OTogRml4IGV4Y2VwdGlvbnMgZnJvbSBmbG9hdCAtPiBGcmFjdGlvbiBhbmQgRGVjaW1hbCAtPiBGcmFjdGlvbgorICBjb252ZXJzaW9ucyBmb3Igc3BlY2lhbCB2YWx1ZXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRob3NlIGZvciBmbG9hdCAtPiBpbnQKKyAgYW5kIERlY2ltYWwgLT4gaW50LiAgUGF0Y2ggYnkgQWxleGV5IEthY2hheWV2LgorCistIElzc3VlICMxNjQ4MTogbXVsdGlwcm9jZXNzaW5nIG5vIGxvbmdlciBsZWFrcyBwcm9jZXNzIGhhbmRsZXMgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTI0Mjg6IEFkZCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0b29scy5wYXJ0aWFsKCkuCisgIFBhdGNoIGJ5IEJyaWFuIFRob3JuZS4KKworLSBJc3N1ZSAjMTYxNDA6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgZG91YmxlIGNsb3NlcyBpdHMgY2hpbGQKKyAgc3VicHJvY2Vzcy5QSVBFIHBhcmVudCBmaWxlIGRlc2NyaXB0b3JzIG9uIGNoaWxkIGVycm9yIHByaW9yIHRvIGV4ZWMoKS4KKworLSBSZW1vdmUgYSBiYXJlIHByaW50IHRvIHN0ZG91dCBmcm9tIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSB0aGF0IGNvdWxkIGhhdmUKKyAgaGFwcGVuZWQgaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgZ2FyYmFnZSB0byBpdHMgcHJlLWV4ZWMgZXJyb3IgcGlwZS4KKworLSBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IHJhaXNlcyBpdHMgb3duIFN1YnByb2Nlc3NFcnJvciBpbnN0ZWFkIG9mIGEKKyAgUnVudGltZUVycm9yIGluIHZhcmlvdXMgZXJyb3Igc2l0dWF0aW9ucyB3aGljaCBzaG91bGQgbm90IG5vcm1hbGx5IGhhcHBlbi4KKworLSBJc3N1ZSAjMTYzMjc6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgbGVha3MgZmlsZSBkZXNjcmlwdG9ycworICB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGVzIHRvIHRoZSBjaGlsZCB3aGVuIGZvcmsoKSBmYWlscy4KKworLSBJc3N1ZSAjMTQzOTY6IEhhbmRsZSB0aGUgb2RkIHJhcmUgY2FzZSBvZiB3YWl0cGlkIHJldHVybmluZyAwIHdoZW4gbm90CisgIGV4cGVjdGVkIGluIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCgpLgorCistIElzc3VlICMxNjQxMTogRml4IGEgYnVnIHdoZXJlIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbWlnaHQgdHJ5IHRvIGFjY2VzcworICBwcmV2aW91c2x5LWZyZWVkIG1lbW9yeS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTc6IGZpeCBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgU1NMU29ja2V0IGNyZWF0ZWQgdGhyb3VnaAorICBTU0xDb250ZXh0LndyYXBfc29ja2V0KCkuICBPcmlnaW5hbCBwYXRjaCBieSBKZWZmIE1jTmVpbC4KKworLSBJc3N1ZSAjMTY0MDk6IFRoZSByZXBvcnRob29rIGNhbGxiYWNrIG1hZGUgYnkgdGhlIGxlZ2FjeQorICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSBBUEkgbm93IHByb3Blcmx5IHN1cHBsaWVzIGEgY29uc3RhbnQgbm9uLXplcm8KKyAgYmxvY2tfc2l6ZSBhcyBpdCBkaWQgaW4gUHl0aG9uIDMuMiBhbmQgMi43LiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgorICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIucmV0cmlldmUuCisKKy0gSXNzdWUgIzE2NDMxOiBVc2UgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBEZWNpbWFsIHN1YnR5cGUKKyAgZnJvbSBhIERlY2ltYWwgYXJndW1lbnQuCisKKy0gSXNzdWUgIzE1NjQxOiBDbGVhbiB1cCBkZXByZWNhdGVkIGNsYXNzZXMgZnJvbSBpbXBvcnRsaWIKKyAgUGF0Y2ggYnkgVGFyYXMgTHlhcHVuLgorCistIElzc3VlICMxNjM1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBhY2N1bXVsYXRlcyBkYXRhIGZyb20KKyAgc3VjY2Vzc2l2ZSBjYWxscyBhZnRlciBFT0YgaW4gdW51c2VkX2RhdGEsIGluc3RlYWQgb2Ygb25seSBzYXZpbmcgdGhlIGFyZ3VtZW50CisgIHRvIHRoZSBsYXN0IGNhbGwuIGRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG5vdyBjb3JyZWN0bHkgc2V0cyB1bnVzZWRfZGF0YSBhbmQKKyAgdW5jb25zdW1lZF90YWlsLiBBIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTWVtb3J5RXJyb3Igd2hlbiBzZXR0aW5nIHRoZQorICB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlIGhhcyBhbHNvIGJlZW4gZml4ZWQuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyNzU5OiBzcmVfcGFyc2Ugbm93IHJhaXNlcyBhIHByb3BlciBlcnJvciB3aGVuIHRoZSBuYW1lIG9mIHRoZSBncm91cAorICBpcyBtaXNzaW5nLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjE1MjogZml4IHRva2VuaXplIHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hlbgorICBubyBuZXdsaW5lIGlzIGZvdW5kLiAgUGF0Y2ggYnkgTmVkIEJhdGNoZWxkZXIuCisKKy0gSXNzdWUgIzE2Mjg0OiBQcmV2ZW50IGtlZXBpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcyB0byB3b3JrZXIgZnVuY3Rpb25zCisgIGluIGNvbmN1cnJlbnQuZnV0dXJlcyBUaHJlYWRQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzE2MjMwOiBGaXggYSBjcmFzaCBpbiBzZWxlY3Quc2VsZWN0KCkgd2hlbiBvbmUgdGhlIGxpc3RzIGNoYW5nZXMKKyAgc2l6ZSB3aGlsZSBpdGVyYXRlZCBvbi4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjI4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgd2hlcmUgYSBsaXN0IGNoYW5nZXMgc2l6ZQorICB3aGlsZSBpdCBpcyBiZWluZyBlbmNvZGVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTE6IE5ldyBmdW5jdGlvbiBnYy5nZXRfc3RhdHMoKSByZXR1cm5zIHBlci1nZW5lcmF0aW9uIGNvbGxlY3Rpb24KKyAgc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTQ4OTc6IEVuaGFuY2UgZXJyb3IgbWVzc2FnZXMgb2Ygc3RydWN0LnBhY2sgYW5kCisgIHN0cnVjdC5wYWNrX2ludG8uIFBhdGNoIGJ5IE1hdHRpIE3DpGtpLgorCistIElzc3VlICMxNjMxNjogbWltZXR5cGVzIG5vdyByZWNvZ25pemVzIHRoZSAueHogYW5kIC50eHogKC50YXIueHopIGV4dGVuc2lvbnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKKyAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KKyAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgorCistIElzc3VlICMxNjMwNTogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycmluZyB3aGVuIGludGVycnVwdGluZworICBtYXRoLmZhY3RvcmlhbC4KKworLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCisgIGV4dGVuc2lvbnMgaW4gdmVudnMuCisKKy0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisKKy0gSXNzdWUgIzE2MzAxOiBGaXggdGhlIGxvY2FsaG9zdCB2ZXJpZmljYXRpb24gaW4gdXJsbGliL3JlcXVlc3QucHkgZm9yIGZpbGU6Ly8KKyAgdXJscy4KKworLSBJc3N1ZSAjMTYyNTA6IEZpeCB0aGUgaW52b2NhdGlvbnMgb2YgVVJMRXJyb3Igd2hpY2ggaGFkIG1pc3BsYWNlZCBmaWxlbmFtZQorICBhdHRyaWJ1dGUgZm9yIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTA4MzY6IEZpeCBleGNlcHRpb24gcmFpc2VkIHdoZW4gZmlsZSBub3QgZm91bmQgaW4gdXJscmV0cmlldmUKKyAgSW5pdGlhbCBwYXRjaCBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgorCistIElzc3VlICMxMjY5MjogRml4IHJlc291cmNlIGxlYWsgaW4gdXJsbGliLnJlcXVlc3Qgd2hlbiB0YWxraW5nIHRvIGFuIEhUVFAKKyAgc2VydmVyIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIgaW4gaXRzIHJlc3BvbnNlcy4KKworLSBJc3N1ZSAjMTIwMzQ6IEZpeCBib2d1cyBjYWNoaW5nIG9mIHJlc3VsdCBpbiBjaGVja19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuCisgIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgYGx6bWEuTFpNQUZpbGVgLgorCistIElzc3VlICMxNjIyMDogd3NnaXJlZiBub3cgYWx3YXlzIGNhbGxzIGNsb3NlKCkgb24gYW4gaXRlcmFibGUgcmVzcG9uc2UuCisgIFBhdGNoIGJ5IEJyZW50IFR1YmJzLgorCistIElzc3VlICMxNjI3MDogdXJsbGliIG1heSBoYW5nIHdoZW4gdXNlZCBmb3IgcmV0cmlldmluZyBmaWxlcyB2aWEgRlRQIGJ5IHVzaW5nCisgIGEgY29udGV4dCBtYW5hZ2VyLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCisKKy0gSXNzdWUgIzE2NDYxOiBXYXZlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gZGVhbCB3aXRoIDRHQiB3YXYgZmlsZXMsCisgIGFuZCBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIei4KKworLSBJc3N1ZSAjMTYxNzY6IFByb3Blcmx5IGlkZW50aWZ5IFdpbmRvd3MgOCB2aWEgcGxhdGZvcm0ucGxhdGZvcm0oKQorCistIElzc3VlICMxNjA4ODogQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcidzIHNlbmRfZXJyb3IgbWV0aG9kIGluY2x1ZGVzIGEKKyAgQ29udGVudC1MZW5ndGggaGVhZGVyIGluIGl0J3MgcmVzcG9uc2Ugbm93LiBQYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMTYxMTQ6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgcHJvdmlkZXMgYSBtaXNsZWFkaW5nIGVycm9yCisgIG1lc3NhZ2Ugc3RhdGluZyB0aGF0IGFyZ3NbMF0gZGlkIG5vdCBleGlzdCB3aGVuIGVpdGhlciB0aGUgY3dkIG9yIGV4ZWN1dGFibGUKKyAga2V5d29yZCBhcmd1bWVudHMgc3BlY2lmaWVkIGEgcGF0aCB0aGF0IGRpZCBub3QgZXhpc3QuCisKKy0gSXNzdWUgIzE2MTY5OiBGaXggY3R5cGVzLldpbkVycm9yKCkncyBjb25mdXNpb24gYmV0d2VlbiBlcnJubyBhbmQgd2luZXJyb3IuCisKKy0gSXNzdWUgIzE0OTI3MDQ6IHNodXRpbC5jb3B5ZmlsZSgpIHJhaXNlcyBhIGRpc3RpbmN0IFNhbWVGaWxlRXJyb3Igbm93IGlmCisgIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUuIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxMzg5NjogTWFrZSBzaGVsZiBpbnN0YW5jZXMgd29yayB3aXRoICd3aXRoJyBhcyBjb250ZXh0IG1hbmFnZXJzLgorICBPcmlnaW5hbCBwYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxNTQxNzogQWRkIHN1cHBvcnQgZm9yIGNzaCBhbmQgZmlzaCBpbiB2ZW52IGFjdGl2YXRpb24gc2NyaXB0cy4KKworLSBJc3N1ZSAjMTQzNzc6IEVsZW1lbnRUcmVlLndyaXRlIGFuZCBzb21lIG9mIHRoZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIGhhdmUKKyAgYSBuZXcgcGFyYW1ldGVyIC0gKnNob3J0X2VtcHR5X2VsZW1lbnRzKi4gSXQgY29udHJvbHMgaG93IGVsZW1lbnRzIHdpdGggbm8KKyAgY29udGVudHMgYXJlIGVtaXR0ZWQuCisKKy0gSXNzdWUgIzE2MDg5OiBBbGxvdyBFbGVtZW50VHJlZS5UcmVlQnVpbGRlciB0byB3b3JrIGFnYWluIHdpdGggYSBub24tRWxlbWVudAorICBlbGVtZW50X2ZhY3RvcnkgKGZpeGVzIGEgcmVncmVzc2lvbiBpbiBTaW1wbGVUQUwpLgorCistIElzc3VlICM5NjUwOiBMaXN0IGNvbW1vbmx5IHVzZWQgZm9ybWF0IGNvZGVzIGluIHRpbWUuc3RyZnRpbWUgYW5kCisgIHRpbWUuc3RycHRpbWUgZG9jc3R0aW5ncy4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1pa2UgSG95LgorCistIElzc3VlICMxNjAzNDogRml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGluIHRoZSBuZXcgYGJ6Mi5CWjJGaWxlYAorICBpbXBsZW1lbnRhdGlvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBgcHR5LnNwYXduKClgIG5vdyByZXR1cm5zIHRoZSBjaGlsZCBwcm9jZXNzIHN0YXR1cyByZXR1cm5lZCBieSBgb3Mud2FpdHBpZCgpYC4KKworLSBJc3N1ZSAjMTU3NTY6IGBzdWJwcm9jZXNzLnBvbGwoKWAgbm93IHByb3Blcmx5IGhhbmRsZXMgYGVycm5vLkVDSElMRGAgdG8KKyAgcmV0dXJuIGEgcmV0dXJuY29kZSBvZiAwIHdoZW4gdGhlIGNoaWxkIGhhcyBhbHJlYWR5IGV4aXRlZCBvciBjYW5ub3QgYmUgd2FpdGVkCisgIG9uLgorCistIElzc3VlICMxNTMyMzogSW1wcm92ZSBmYWlsdXJlIG1lc3NhZ2Ugb2YgYE1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKWAuCisKKy0gSXNzdWUgIzE2MDY0OiBgYHVuaXR0ZXN0IC1tYGAgY2xhaW1zIGV4ZWN1dGFibGUgaXMgInB5dGhvbiIsIG5vdCAicHl0aG9uMyIuCisKKy0gSXNzdWUgIzEyMzc2OiBQYXNzIG9uIHBhcmFtZXRlcnMgaW4gYFRleHRUZXN0UmVzdWx0Ll9faW5pdF9fKClgIHN1cGVyIGNhbGwuCisKKy0gSXNzdWUgIzE1MjIyOiBJbnNlcnQgYmxhbmsgbGluZSBhZnRlciBlYWNoIG1lc3NhZ2UgaW4gbWJveCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE2MDEzOiBGaXggYGNzdi5SZWFkZXJgIHBhcnNpbmcgaXNzdWUgd2l0aCBlbmRpbmcgcXVvdGUgY2hhcmFjdGVycy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0MjE6IEZpeCBhbiBPdmVyZmxvd0Vycm9yIGluIGBDYWxlbmRhci5pdGVybW9udGhkYXRlcygpYCBhZnRlcgorICBgZGF0ZXRpbWUuTUFYWUVBUmAuICBQYXRjaCBieSBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMxNjExMjogcGxhdGZvcm0uYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGNvcnJlY3RseSBlc2NhcGUgYXJndW1lbnQgdG8KKyAgL3Vzci9iaW4vZmlsZS4gIFBhdGNoIGJ5IERhdmlkIEJlbmphbWluLgorCistIElzc3VlICMxNTk3MDogYHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgbm93IHNlcmlhbGl6ZXMgY29ycmVjdGx5IHRoZSBlbXB0eSBIVE1MCisgIGVsZW1lbnRzICdtZXRhJyBhbmQgJ3BhcmFtJy4KKworLSBJc3N1ZSAjMTU4NDI6IFRoZSBgU29ja2V0SU8ue3JlYWRhYmxlLHdyaXRhYmxlLHNlZWthYmxlfWAgbWV0aG9kcyBub3cgcmFpc2UKKyAgVmFsdWVFcnJvciB3aGVuIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCisKKy0gSXNzdWUgIzE1ODc2OiBGaXggYSByZWZsZWFrIGluIHRoZSBgY3Vyc2VzYCBtb2R1bGU6IHdpbmRvdy5lbmNvZGluZy4KKworLSBJc3N1ZSAjMTU4ODE6IEZpeCBgYXRleGl0YCBob29rIGluIGBtdWx0aXByb2Nlc3NpbmdgLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXMKKyAgTWNEb25vdWdoLgorCistIElzc3VlICMxNTg0MTogVGhlIHJlYWRhYmxlKCksIHdyaXRhYmxlKCkgYW5kIHNlZWthYmxlKCkgbWV0aG9kcyBvZgorICBgaW8uQnl0ZXNJT2AgYW5kIGBpby5TdHJpbmdJT2Agb2JqZWN0cyBub3cgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBvYmplY3QKKyAgaGFzIGJlZW4gY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KKworLSBJc3N1ZSAjMTU0NDc6IFVzZSBgc3VicHJvY2Vzcy5ERVZOVUxMYCBpbiB3ZWJicm93c2VyLCBpbnN0ZWFkIG9mIG9wZW5pbmcKKyAgYG9zLmRldm51bGxgIGV4cGxpY2l0bHkgYW5kIGxlYXZpbmcgaXQgb3Blbi4KKworLSBJc3N1ZSAjMTU1MDk6IGB3ZWJicm93c2VyLlVuaXhCcm93c2VyYCBubyBsb25nZXIgcGFzc2VzIGVtcHR5IGFyZ3VtZW50cyB0bworICBQb3BlbiB3aGVuIGBgJWFjdGlvbmBgIHN1YnN0aXR1dGlvbnMgcHJvZHVjZSBlbXB0eSBzdHJpbmdzLgorCistIElzc3VlICMxMjc3NiwgaXNzdWUgIzExODM5OiBDYWxsIGBhcmdwYXJzZWAgdHlwZSBmdW5jdGlvbiAoc3BlY2lmaWVkIGJ5CisgIGFkZF9hcmd1bWVudCkgb25seSBvbmNlLiBCZWZvcmUsIHRoZSB0eXBlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgdHdpY2UgaW4gdGhlCisgIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgd2FzIHNwZWNpZmllZCBhbmQgdGhlIGFyZ3VtZW50IHdhcyBnaXZlbiBhcyB3ZWxsLiAgVGhpcworICB3YXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBmb3IgdGhlIEZpbGVUeXBlIHR5cGUsIGFzIGEgZGVmYXVsdCBmaWxlIHdvdWxkCisgIGFsd2F5cyBiZSBvcGVuZWQsIGV2ZW4gaWYgYSBmaWxlIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjMTU5MDY6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UgY2F1c2VkIGJ5IHRoZSBwcmVjZWRpbmcgY2hhbmdlLAorICB3aGVuIGBgYWN0aW9uPSdhcHBlbmQnYGAsIGBgdHlwZT0nc3RyJ2BgIGFuZCBgYGRlZmF1bHQ9W11gYC4KKworLSBJc3N1ZSAjMTYxMTM6IEFkZGVkIHNoYTMgbW9kdWxlIGJhc2VkIG9uIHRoZSBLZWNjYWsgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uCisgIDMuMi4gVGhlIGBoYXNobGliYCBtb2R1bGUgaGFzIGZvdXIgYWRkaXRpb25hbCBoYXNoIGFsZ29yaXRobXM6IGBzaGEzXzIyNGAsCisgIGBzaGEzXzI1NmAsIGBzaGEzXzM4NGAgYW5kIGBzaGEzXzUxMmAuIEFzIHBhcnQgb2YgdGhlIHBhdGNoIHNvbWUgY29tbW9uCisgIGNvZGUgd2FzIG1vdmVkIGZyb20gX2hhc2hvcGVuc3NsLmMgdG8gaGFzaGxpYi5oLgorCistIGN0eXBlcy5jYWxsX2NvbW1ldGhvZCB3YXMgcmVtb3ZlZCwgc2luY2UgaXRzIG9ubHkgdXNhZ2Ugd2FzIGluIHRoZSBkZWZ1bmN0CisgIHNhbXBsZXMgZGlyZWN0b3J5LgorCistIElzc3VlICMxNjY5MjogQWRkZWQgVExTdjEuMSBhbmQgVExTdjEuMiBzdXBwb3J0IGZvciB0aGUgc3NsIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE2ODMyOiBhZGQgYWJjLmdldF9jYWNoZV90b2tlbigpIHRvIGV4cG9zZSBjYWNoZSB2YWxpZGl0eSBjaGVja2luZworICBzdXBwb3J0IGluIEFCQ01ldGEuCiAKIElETEUKIC0tLS0KIAotLSBJc3N1ZSAjMTg4NzM6IElETEUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudAotICBsaW5lcy4KLQotLSBJc3N1ZSAjMTg5ODg6IFRoZSAiVGFiIiBrZXkgbm93IHdvcmtzIHdoZW4gYSB3b3JkIGlzIGFscmVhZHkgYXV0b2NvbXBsZXRlZC4KLQotLSBJc3N1ZSAjMTg0ODk6IEFkZCB0ZXN0cyBmb3IgU2VhcmNoRW5naW5lLiBPcmlnaW5hbCBwYXRjaCBieSBQaGlsIFdlYnN0ZXIuCi0KIC0gSXNzdWUgIzE4NDI5OiBGb3JtYXQgLyBGb3JtYXQgUGFyYWdyYXBoLCBub3cgd29ya3Mgd2hlbiBjb21tZW50IGJsb2NrcwogICBhcmUgc2VsZWN0ZWQuIEFzIHdpdGggdGV4dCBibG9ja3MsIHRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSBzZWxlY3Rpb24KICAgb25seSBpbmNsdWRlcyBjb21wbGV0ZSBsaW5lcy4KQEAgLTYyNywzOCArMjcwMyw3MyBAQAogCiAtIElzc3VlICMxNDE0NjogSGlnaGxpZ2h0IHNvdXJjZSBsaW5lIHdoaWxlIGRlYnVnZ2luZyBvbiBXaW5kb3dzLgogCistIElzc3VlICMxNzgzODogQWxsb3cgc3lzLnN0ZGluIHRvIGJlIHJlYXNzaWduZWQuCisKKy0gSXNzdWUgIzEzNDk1OiBBdm9pZCBsb2FkaW5nIHRoZSBjb2xvciBkZWxlZ2F0b3IgdHdpY2UgaW4gSURMRS4KKworLSBJc3N1ZSAjMTc3OTg6IEFsbG93IElETEUgdG8gZWRpdCBuZXcgZmlsZXMgd2hlbiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLgorCistIElzc3VlICMxNDczNTogVXBkYXRlIElETEUgZG9jcyB0byBvbWl0ICJDb250cm9sLXogb24gV2luZG93cyIuCisKIC0gSXNzdWUgIzE3NTMyOiBBbHdheXMgaW5jbHVkZSBPcHRpb25zIG1lbnUgZm9yIElETEUgb24gT1MgWC4KICAgUGF0Y2ggYnkgR3VpbGhlcm1lIFNpbcO1ZXMuCiAKKy0gSXNzdWUgIzE3NTg1OiBGaXhlZCBJRExFIHJlZ3Jlc3Npb24uIE5vdyBjbG9zZXMgd2hlbiB1c2luZyBleGl0KCkgb3IgcXVpdCgpLgorCistIElzc3VlICMxNzY1NzogU2hvdyBmdWxsIFRrIHZlcnNpb24gaW4gSURMRSdzIGFib3V0IGRpYWxvZy4KKyAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE3NjEzOiBQcmV2ZW50IHRyYWNlYmFjayB3aGVuIHJlbW92aW5nIHN5bnRheCBjb2xvcml6ZXIgaW4gSURMRS4KKworLSBJc3N1ZSAjMTIwNzU4OTogQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgcGF0Y2ggZm9yIHJpZ2h0LWNsaWNrIG1lbnUgaW4gSURMRS4KKworLSBJc3N1ZSAjMTY4ODc6IElETEUgbm93IGFjY2VwdHMgQ2FuY2VsIGluIHRhYmlmeS91bnRhYmlmeSBkaWFsb2cgYm94LgorCistIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCisKKy0gSXNzdWUgIzE0MjU0OiBJRExFIG5vdyBoYW5kbGVzIHJlYWRsaW5lIGNvcnJlY3RseSBhY3Jvc3Mgc2hlbGwgcmVzdGFydHMuCisKKy0gSXNzdWUgIzE3NjE0OiBJRExFIG5vIGxvbmdlciByYWlzZXMgZXhjZXB0aW9uIHdoZW4gcXVpY2tseSBjbG9zaW5nIGEgZmlsZS4KKworLSBJc3N1ZSAjNjY5ODogSURMRSBub3cgb3BlbnMganVzdCBhbiBlZGl0b3Igd2luZG93IHdoZW4gY29uZmlndXJlZCB0byBkbyBzby4KKworLSBJc3N1ZSAjODkwMDogVXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIGluIElETEUgdG8gb3BlbiBhIGZpbGUgbm8gbG9uZ2VyCisgIHJhaXNlcyBhbiBleGNlcHRpb24uCisKKy0gSXNzdWUgIzY2NDk6IEZpeGVkIG1pc3NpbmcgZXhpdCBzdGF0dXMgaW4gSURMRS4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE3MTE0OiBJRExFIG5vdyB1c2VzIG5vbi1zdHJpY3QgY29uZmlnIHBhcnNlci4KKworLSBJc3N1ZSAjOTI5MDogSW4gSURMRSB0aGUgc3lzLnN0ZCogc3RyZWFtcyBub3cgaW1wbGVtZW50IGlvLlRleHRJT0Jhc2UKKyAgaW50ZXJmYWNlIGFuZCBzdXBwb3J0IGFsbCBtYW5kYXRvcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4KKworLSBJc3N1ZSAjNTA2NjogVXBkYXRlIElETEUgZG9jcy4gUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE2ODI5OiBJRExFIHByaW50aW5nIG5vIGxvbmdlciBmYWlscyBpZiB0aGVyZSBhcmUgc3BhY2VzIG9yIG90aGVyCisgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBwYXRoLgorCistIElzc3VlICMxNjQ5MTogSURMRSBub3cgcHJpbnRzIGNoYWluZWQgZXhjZXB0aW9uIHRyYWNlYmFja3MuCisKKy0gSXNzdWUgIzE2ODE5OiBJRExFIG1ldGhvZCBjb21wbGV0aW9uIG5vdyBjb3JyZWN0bHkgd29ya3MgZm9yIGJ5dGVzIGxpdGVyYWxzLgorCistIElzc3VlICMxNjUwNDogSURMRSBub3cgY2F0Y2hlcyBTeW50YXhFcnJvcnMgcmFpc2VkIGJ5IHRva2VuaXplci4gUGF0Y2ggYnkKKyAgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzE2NTExOiBVc2UgZGVmYXVsdCBJRExFIHdpZHRoIGFuZCBoZWlnaHQgaWYgY29uZmlnIHBhcmFtIGlzIG5vdCB2YWxpZC4KKyAgUGF0Y2ggU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTIwNzU4OTogQWRkIEN1dC9Db3B5L1Bhc3RlIGl0ZW1zIHRvIElETEUgcmlnaHQgY2xpY2sgQ29udGV4dCBNZW51CisgIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNjEyMzogSURMRSAtIGRlcHJlY2F0ZSBydW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKwogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzE0NDA3OiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMuCi0KLS0gSXNzdWUgIzE4OTE5OiBVbmlmaWVkIGFuZCBleHRlbmRlZCB0ZXN0cyBmb3IgYXVkaW8gbW9kdWxlczogYWlmYywgc3VuYXUgYW5kCi0gIHdhdmUuCi0KLS0gSXNzdWUgIzE4OTUyOiBGaXggcmVncmVzc2lvbiBpbiBzdXBwb3J0IGRhdGEgZG93bmxvYWRzIGludHJvZHVjZWQgd2hlbgotICB0ZXN0LnN1cHBvcnQgd2FzIGNvbnZlcnRlZCB0byBhIHBhY2thZ2UuIFJlZ3Jlc3Npb24gbm90aWNlZCBieSBaYWNoYXJ5Ci0gIFdhcmUuCi0KLS0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgotCi0tIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0Ci0gIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCi0gIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCi0gIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCi0KLS0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCi0gIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCi0gIHZlcnNpb25zLgotCiAtIElzc3VlICMxNjY2MzE4OiBBZGQgYSB0ZXN0IHRoYXQgc2h1dGlsLmNvcHl0cmVlKCkgcmV0YWlucyBkaXJlY3RvcnkKICAgcGVybWlzc2lvbnMuICBQYXRjaCBieSBDYXRoZXJpbmUgRGV2bGluLgogCi0tIElzc3VlICMxODM1NzogYWRkIHRlc3RzIGZvciBkaWN0dmlldyBzZXQgZGlmZmVyZW5jZS4KLSAgUGF0Y2ggYnkgRnJhc2VyIFR3ZWVkYWxlLgotCiAtIElzc3VlICMxODI3MzogbW92ZSB0aGUgdGVzdHMgaW4gTGliL3Rlc3QvanNvbl90ZXN0cyB0byBMaWIvdGVzdC90ZXN0X2pzb24KICAgYW5kIG1ha2UgdGhlbSBkaXNjb3ZlcmFibGUgYnkgdW5pdHRlc3QuICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKQEAgLTY5MCwyODUgKzI4MDEsMTMgQEAKIAogLSBJc3N1ZSAjMTExODU6IEZpeCB0ZXN0X3dhaXQ0IHVuZGVyIEFJWC4gIFBhdGNoIGJ5IFPDqWJhc3RpZW4gU2FibMOpLgogCi0tIElzc3VlICMxNzY5MTogdGVzdF91bml2bmV3bGluZXMgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCi0gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKy0gSXNzdWUgIzE4MjA3OiBGaXggdGVzdF9zc2wgZm9yIHNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCB0aGF0IGlnbm9yZSBzZWNvbmRzCisgIGluIEFTTjFfVElNRSBmaWVsZHMuCiAKIC0gSXNzdWUgIzE4MDk0OiB0ZXN0X3V1aWQgbm8gbW9yZSByZXBvcnRzIHNraXBwZWQgdGVzdHMgYXMgcGFzc2VkLgogCi0tIElzc3VlICMxMTk5NTogdGVzdF9weWRvYyBkb2Vzbid0IGltcG9ydCBhbGwgc3lzLnBhdGggbW9kdWxlcyBhbnltb3JlLgotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE5MzkyOiBEb2N1bWVudCB0aGF0IGBpbXAucmVsb2FkKClgIG5vdyBhbHNvIHJlcXVpcmVzIGBfX2xvYWRlcl9fYCB0bwotICBiZSBzZXQgb24gdGhlIG1vZHVsZSBiZWluZyByZWxvYWRlZC4KLQotLSBJc3N1ZSAjMTg3NTg6IEZpeGVkIGFuZCBpbXByb3ZlZCBjcm9zcy1yZWZlcmVuY2VzLgotCi0tIElzc3VlICMxODc0MzogRml4IHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0YW50ICJTdHJpbmdJTyIgbW9kdWxlLgotCi0tIElzc3VlICMxODc4MzogUmVtb3ZlZCBleGlzdGluZyBtZW50aW9ucyBvZiBQeXRob24gbG9uZyB0eXBlIGluIGRvY3N0cmluZ3MsCi0gIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tZW50cy4KLQotLSBJc3N1ZSAjMTc3MDE6IEltcHJvdmluZyBzdHJmdGltZSBkb2N1bWVudGF0aW9uLgotCi0tIElzc3VlICMxODQ0MDogQ2xhcmlmeSB0aGF0IGBoYXNoKClgIGNhbiB0cnVuY2F0ZSB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbgotICBvYmplY3QncyBjdXN0b20gYF9faGFzaF9fKClgIG1ldGhvZC4KLQotLSBJc3N1ZSAjMTc5NTM6IE1lbnRpb24gdGhhdCB5b3Ugc2hvdWxkbid0IHJlcGxhY2Ugc3lzLm1vZHVsZXMgYW5kIGRlbGV0aW5nIGtleQotICBpdGVtcyB3aWxsIGNhdXNlIFB5dGhvbiB0byBub3QgYmUgaGFwcHkuCi0KLS0gSXNzdWUgIzE3ODQ0OiBBZGQgbGlua3MgdG8gZW5jb2RlcnMgYW5kIGRlY29kZXJzIGZvciBieXRlcy10by1ieXRlcyBjb2RlY3MuCi0KLS0gSXNzdWUgIzE0MDk3OiBpbXByb3ZlIHRoZSAiaW50cm9kdWN0aW9uIiBwYWdlIG9mIHRoZSB0dXRvcmlhbC4KLQotLSBJc3N1ZSAjMTc5Nzc6IFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgY2FkZWZhdWx0IGFyZ3VtZW50J3MgZGVmYXVsdCB2YWx1ZQotICBpbiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgaXMgZml4ZWQgdG8gbWF0Y2ggdGhlIGNvZGUuCi0KLVRvb2xzL0RlbW9zCi0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxODg3MzogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGRldGVjdCBQeXRob24gc291cmNlCi0gIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50IGxpbmVzLgotCi0tIElzc3VlICMxODgxNzogRml4IGEgcmVzb3VyY2Ugd2FybmluZyBpbiBMaWIvYWlmYy5weSBkZW1vLgotCi0tIElzc3VlICMxODQzOTogTWFrZSBwYXRjaGNoZWNrIHdvcmsgb24gV2luZG93cyBmb3IgQUNLUywgTkVXUy4KLQotLSBJc3N1ZSAjMTg0NDg6IEZpeCBhIHR5cG8gaW4gVG9vbHMvZGVtby9laWZmZWwucHkuCi0KLS0gSXNzdWUgIzE4NDU3OiBGaXhlZCBzYXZpbmcgb2YgZm9ybXVsYXMgYW5kIGNvbXBsZXggbnVtYmVycyBpbgotICBUb29scy9kZW1vL3NzMS5weS4KLQotLSBJc3N1ZSAjMTg0NDk6IE1ha2UgVG9vbHMvZGVtby9zczEucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4gIFBhdGNoIGJ5Ci0gIEbDqXZyeSBUaGliYXVsdC4KLQotLSBJc3N1ZSAjMTUyMzk6IE1ha2UgbWtzdHJpbmdwcmVwLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCi0KLS0gSXNzdWUgIzEyOTkwOiBUaGUgIlB5dGhvbiBMYXVuY2hlciIgb24gT1NYIGNvdWxkIG5vdCBsYXVuY2ggcHl0aG9uIHNjcmlwdHMKLSAgdGhhdCBoYXZlIHBhdGhzIHRoYXQgaW5jbHVkZSB3aWRlIGNoYXJhY3RlcnMuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxOTM1NjogQXZvaWQgdXNpbmcgYSBDIHZhcmlhYmxlZCBuYW1lZCAiX3NlbGYiLCBpdCdzIGEgcmVzZXJ2ZWQKLSAgd29yZCBpbiBzb21lIEMgY29tcGlsZXJzLgotCi0tIElzc3VlICMxOTEzMDogQ29ycmVjdCBQQ2J1aWxkL3JlYWRtZS50eHQsIFB5dGhvbiAzLjMgYW5kIDMuNCByZXF1aXJlIFZTIDIwMTAuCi0KLS0gSXNzdWUgIzE2MDY3OiBBZGQgZGVzY3JpcHRpb24gaW50byBNU0kgZmlsZSB0byByZXBsYWNlIGluc3RhbGxlcidzIHRlbXBvcmFyeSBuYW1lLgotCi0tIElzc3VlICMxODI1NjogQ29tcGlsYXRpb24gZml4IGZvciByZWNlbnQgQUlYIHJlbGVhc2VzLiAgUGF0Y2ggYnkKLSAgRGF2aWQgRWRlbHNvaG4uCi0KLS0gSXNzdWUgIzE1MTcyOiBEb2N1bWVudCBOQVNNIDIuMTArIGFzIHJlcXVpcmVtZW50IGZvciBidWlsZGluZyBPcGVuU1NMIDEuMC4xCi0gIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE1ODQ6IFByb3ZpZGUgb3B0aW9ucyB0byBvdmVycmlkZSBkZWZhdWx0IHNlYXJjaCBwYXRocyBmb3IKLSAgVGNsIGFuZCBUayB3aGVuIGJ1aWxkaW5nIF90a2ludGVyLgotCi0tIElzc3VlICMxNTY2MzogVGNsL1RrIDguNS4xNSBpcyBub3cgaW5jbHVkZWQgd2l0aCB0aGUgT1MgWCAxMC42KwotICA2NC1iaXQvMzItYml0IGluc3RhbGxlciBmb3IgMTAuNisuICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5Ci0gIHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mIFRjbC9UayA4LjUgdG8gd29yayBhcm91bmQgdGhlCi0gIHByb2JsZW1zIGluIHRoZSBBcHBsZS1zdXBwbGllZCBUY2wvVGsgOC41IHNoaXBwZWQgaW4gT1MgWCAxMC42Ci0gIGFuZCBsYXRlciByZWxlYXNlcy4KLQotLSBJc3N1ZSAjMTkwMTk6IENoYW5nZSB0aGUgT1MgWCBpbnN0YWxsZXIgYnVpbGQgc2NyaXB0IHRvIHVzZSBDRkxBR1MgaW5zdGVhZAotICBvZiBPUFQgZm9yIHNwZWNpYWwgYnVpbGQgb3B0aW9ucy4gIEJ5IHNldHRpbmcgT1BULCBzb21lIGNvbXBpbGVyLXNwZWNpZmljCi0gIG9wdGlvbnMgbGlrZSAtZndyYXB2IHdlcmUgb3ZlcnJpZGRlbiBhbmQgdGh1cyBub3QgdXNlZCwgd2hpY2ggY291bGQgcmVzdWx0Ci0gIGluIGJyb2tlbiBpbnRlcnByZXRlcnMgd2hlbiBidWlsZGluZyB3aXRoIGNsYW5nLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4yPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDEzLU1heS0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTcyMzc6IEZpeCBjcmFzaCBpbiB0aGUgQVNDSUkgZGVjb2RlciBvbiBtNjhrLgotCi0tIElzc3VlICMxNzQwODogQXZvaWQgdXNpbmcgYW4gb2Jzb2xldGUgaW5zdGFuY2Ugb2YgdGhlIGNvcHlyZWcgbW9kdWxlIHdoZW4KLSAgdGhlIGludGVycHJldGVyIGlzIHNodXRkb3duIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4uCi0KLS0gSXNzdWUgIzE3ODYzOiBJbiB0aGUgaW50ZXJhY3RpdmUgY29uc29sZSwgZG9uJ3QgbG9vcCBmb3JldmVyIGlmIHRoZSBlbmNvZGluZwotICBjYW4ndCBiZSBmZXRjaGVkIGZyb20gc3RkaW4uCi0KLS0gSXNzdWUgIzE3ODY3OiBSYWlzZSBhbiBJbXBvcnRFcnJvciBpZiBfX2ltcG9ydF9fIGlzIG5vdCBmb3VuZCBpbiBfX2J1aWx0aW5zX18uCi0KLS0gSXNzdWUgIzE3ODU3OiBQcmV2ZW50IGJ1aWxkIGZhaWx1cmVzIHdpdGggcHJlLTMuNS4wIHZlcnNpb25zIG9mIHNxbGl0ZTMsCi0gIHN1Y2ggYXMgd2FzIHNoaXBwZWQgd2l0aCBDZW50b3MgNSBhbmQgTWFjIE9TIFggMTAuNC4KLQotLSBJc3N1ZSAjMTc0MTM6IHN5cy5zZXR0cmFjZSBjYWxsYmFja3Mgd2VyZSBiZWluZyBwYXNzZWQgYSBzdHJpbmcgaW5zdGVhZCBvZiBhbgotICBleGNlcHRpb24gaW5zdGFuY2UgZm9yIHRoZSAndmFsdWUnIGVsZW1lbnQgb2YgdGhlIGFyZyB0dXBsZSBpZiB0aGUgZXhjZXB0aW9uCi0gIG9yaWdpbmF0ZWQgZnJvbSBDIGNvZGU7IG5vdyBhbiBleGNlcHRpb24gaW5zdGFuY2UgaXMgYWx3YXlzIHByb3ZpZGVkLgotCi0tIElzc3VlICMxNzc4MjogRml4IHVuZGVmaW5lZCBiZWhhdmlvdXIgb24gcGxhdGZvcm1zIHdoZXJlCi0gIGBgc3RydWN0IHRpbWVzcGVjYGAncyAidHZfbnNlYyIgbWVtYmVyIGlzIG5vdCBhIEMgbG9uZy4KLQotLSBJc3N1ZSAjMTc3MTU6IEZpeCBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSByYWlzaW5nIGFuIGV4Y2VwdGlvbiBpbiBhIF9fdHJ1bmNfXwotICBtZXRob2QuCi0KLS0gSXNzdWUgIzE2NDQ3OiBGaXhlZCBwb3RlbnRpYWwgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gc2V0dGluZyBfX25hbWVfXyBvbiBhCi0gIGNsYXNzLgotCi0tIElzc3VlICMxNzY2OTogRml4IGNyYXNoIGludm9sdmluZyBmaW5hbGl6YXRpb24gb2YgZ2VuZXJhdG9ycyB1c2luZyB5aWVsZCBmcm9tLgotCi0tIElzc3VlICMxNzYxOTogTWFrZSBpbnB1dCgpIGNoZWNrIGZvciBDdHJsLUMgY29ycmVjdGx5IG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE3NjEwOiBEb24ndCByZWx5IG9uIG5vbi1zdGFuZGFyZCBiZWhhdmlvciBvZiB0aGUgQyBxc29ydCgpIGZ1bmN0aW9uLgotCi0tIElzc3VlICMxNzM1NzogQWRkIG1pc3NpbmcgdmVyYm9zaXR5IG91dHB1dCB3aGVuIHVzaW5nIC12Ly12di4KLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMxNzYwNjogRml4ZWQgc3VwcG9ydCBvZiBlbmNvZGVkIGJ5dGUgc3RyaW5ncyBpbiB0aGUgWE1MR2VuZXJhdG9yCi0gIGNoYXJhY3RlcnMoKSBhbmQgaWdub3JhYmxlV2hpdGVzcGFjZSgpIG1ldGhvZHMuICBPcmlnaW5hbCBwYXRjaCBieSBTZWJhc3RpYW4KLSAgT3J0aXogVmFzcXVlei4KLQotLSBJc3N1ZSAjMTc3MzI6IElnbm9yZSBkaXN0dXRpbHMuY2ZnIG9wdGlvbnMgcGVydGFpbmluZyB0byBpbnN0YWxsIHBhdGhzIGlmIGEKLSAgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBhY3RpdmUuCi0KLS0gSXNzdWUgIzExNTkwNTE6IEJhY2sgb3V0IGEgZml4IGZvciBoYW5kbGluZyBjb3JydXB0ZWQgZ3ppcCBmaWxlcyB0aGF0Ci0gIGJyb2tlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCi0tIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQotICBjb2RlY3Mub3BlbigpLgotCi0tIElzc3VlICMxNjYwMTogUmVzdGFydGluZyBpdGVyYXRpb24gb3ZlciB0YXJmaWxlIG5vIG1vcmUgY29udGludWVzIGZyb20gd2hlcmUKLSAgaXQgbGVmdCBvZmYuICBQYXRjaCBieSBNaWNoYWVsIEJpcnR3ZWxsLgotCi0tIElzc3VlICMxNzI4OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgcGxheXMgbmljZXIgd2l0aCBleHRlcm5hbCBtb2R1bGVzCi0gIG9yIGFwcGxpY2F0aW9ucyBjaGFuZ2luZyB0aGUgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyBnbG9iYWwKLSAgdmFyaWFibGUuICBJbml0aWFsIHBhdGNoIGJ5IEJyYWRsZXkgRnJvZWhsZS4KLQotLSBJc3N1ZSAjMTIxODE6IHNlbGVjdCBtb2R1bGU6IEZpeCBzdHJ1Y3Qga2V2ZW50IGRlZmluaXRpb24gb24gT3BlbkJTRCA2NC1iaXQKLSAgcGxhdGZvcm1zLiBQYXRjaCBieSBGZWRlcmljbyBTY2h3aW5kdC4KLQotLSBJc3N1ZSAjMTQxNzM6IEF2b2lkIGNyYXNoaW5nIHdoZW4gcmVhZGluZyBhIHNpZ25hbCBoYW5kbGVyIGR1cmluZwotICBpbnRlcnByZXRlciBzaHV0ZG93bi4KLQotLSBJc3N1ZSAjMTYzMTY6IG1pbWV0eXBlcyBub3cgcmVjb2duaXplcyB0aGUgLnh6IGFuZCAudHh6ICgudGFyLnh6KSBleHRlbnNpb25zLgotCi0tIElzc3VlICMxNTkwMjogRml4IGltcC5sb2FkX21vZHVsZSgpIGFjY2VwdGluZyBOb25lIGFzIGEgZmlsZSB3aGVuIGxvYWRpbmcgYW4KLSAgZXh0ZW5zaW9uIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTc4MDI6IEZpeCBhbiBVbmJvdW5kTG9jYWxFcnJvciBpbiBodG1sLnBhcnNlci4gIEluaXRpYWwgdGVzdHMgYnkKLSAgVGhvbWFzIEJhcmxvdy4KLQotLSBJc3N1ZSAjMTU1MzU6IEZpeCBuYW1lZHR1cGxlIHBpY2tsZXMgd2hpY2ggd2VyZSBwaWNraW5nIHVwIHRoZSBPcmRlcmVkRGljdAotICBpbnN0ZWFkIG9mIGp1c3QgdGhlIHVuZGVybHlpbmcgdHVwbGUuCi0KLS0gSXNzdWUgIzE3MTkyOiBSZXN0b3JlIHRoZSBwYXRjaCBmb3IgSXNzdWUgIzExNzI5IHdoaWNoIHdhcyBvbW1pdHRlZCBpbgotICAzLjMuMSB3aGVuIHVwZGF0aW5nIHRoZSBidW5kbGVkIHZlcnNpb24gb2YgbGliZmZpIHVzZWQgYnkgY3R5cGVzLiAgVXBkYXRlCi0gIG1hbnkgbGliZmZpIGZpbGVzIHRoYXQgd2VyZSBtaXNzZWQgaW4gMy4zLjEncyB1cGRhdGUgdG8gbGliZmZpLTMuMC4xMy4KLQotLSBJc3N1ZSAjMTczNTg6IE1vZHVsZXMgbG9hZGVkIGJ5IGltcC5sb2FkX3NvdXJjZSgpIGFuZCBsb2FkX2NvbXBpbGVkKCkgKGFuZCBieQotICBleHRlbnRpb24gbG9hZF9tb2R1bGUoKSkgbm93IGhhdmUgYSBiZXR0ZXIgY2hhbmNlIG9mIHdvcmtpbmcgd2hlbiByZWxvYWRlZC4KLQotLSBJc3N1ZSAjMTczNTM6IFBsaXN0bGliIGVtaXR0ZWQgZW1wdHkgZGF0YSB0YWdzIHdpdGggZGVlcGx5IG5lc3RlZCBkYXRhc3RydWN0dXJlcwotCi0tIElzc3VlICMxMTcxNDogVXNlICd3aXRoJyBzdGF0ZW1lbnRzIHRvIGFzc3VyZSBhIFNlbWFwaG9yZSByZWxlYXNlcyBhCi0gIGNvbmRpdGlvbiB2YXJpYWJsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBSYWNoZWwuCi0KLS0gSXNzdWUgIzE3Nzk1OiBSZXZlcnRlZCBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZSBpbiBTeXNMb2dIYW5kbGVyIHdpdGgKLSAgVW5peCBkb21haW4gc29ja2V0cy4KLQotLSBJc3N1ZSAjMTc1NTU6IEZpeCBGb3JrQXdhcmVUaHJlYWRMb2NrIHNvIHRoYXQgc2l6ZSBvZiBhZnRlciBmb3JrCi0gIHJlZ2lzdHJ5IGRvZXMgbm90IGdyb3cgZXhwb25lbnRpYWxseSB3aXRoIGdlbmVyYXRpb24gb2YgcHJvY2Vzcy4KLQotLSBJc3N1ZSAjMTc3MDc6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSdzIGdldCgpIG1ldGhvZCBkb2VzIG5vdCBibG9jayBmb3Igc2hvcnQKLSAgdGltZW91dHMuCi0KLS0gSXN1c2UgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQotICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KLQotLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxsYmFja3MgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgaWYgZW1wdHkgcGF0aCBhcmd1bWVudCBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNzcxMDogRml4IHBpY2tsZSByYWlzaW5nIGEgU3lzdGVtRXJyb3Igb24gYm9ndXMgaW5wdXQuCi0KLS0gSXNzdWUgIzE3MzQxOiBJbmNsdWRlIHRoZSBpbnZhbGlkIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gcmUgYWJvdXQKLSAgaW52YWxpZCBncm91cCBuYW1lcy4KLQotLSBJc3N1ZSAjMTc3MDI6IG9zLmVudmlyb24gbm93IHJhaXNlcyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudAotICB2YXJpYWJsZSBuYW1lIChzdHIgb24gVU5JWCksIGluc3RlYWQgb2YgdXNpbmcgdGhlIGVuY29kZWQgbmFtZSAoYnl0ZXMgb24KLSAgVU5JWCkuCi0KLS0gSXNzdWUgIzE2MTYzOiBNYWtlIHRoZSBpbXBvcnRsaWIgYmFzZWQgdmVyc2lvbiBvZiBwa2d1dGlsLml0ZXJfaW1wb3J0ZXJzCi0gIHdvcmsgZm9yIHN1Ym1vZHVsZXMuIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY4MDQ6IEZpeCBhIGJ1ZyBpbiB0aGUgJ3NpdGUnIG1vZHVsZSB0aGF0IGNhdXNlZCBydW5uaW5nCi0gICdweXRob24gLVMgLW0gc2l0ZScgdG8gaW5jb3JyZWN0bHkgdGhyb3cgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICMxNzAxNjogR2V0IHJpZCBvZiBwb3NzaWJsZSBwb2ludGVyIHdyYXBhcm91bmRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cwotICBpbiB0aGUgcmUgbW9kdWxlLiAgUGF0Y2ggYnkgTmlja29sYWkgWmVsZG92aWNoLgotCi0tIElzc3VlICMxNjY1ODogYWRkIG1pc3NpbmcgcmV0dXJuIHRvIEhUVFBDb25uZWN0aW9uLnNlbmQoKQotICBQYXRjaCBieSBKZWZmIEtudXBwLgotCi0tIElzc3VlICMxNDk3MTogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm8gbG9uZ2VyIGdldHMgY29uZnVzZWQgd2hlbiBhIGZ1bmN0aW9uCi0gIGhhcyBhIGRpZmZlcmVudCBfX25hbWVfXyB0aGFuIGl0cyBuYW1lIGluIHRoZSBUZXN0Q2FzZSBjbGFzcyBkaWN0aW9uYXJ5LgotCi0tIElzc3VlICMxNzY3ODogRml4IERlcHJlY2F0aW9uV2FybmluZyBpbiB0aGUgaHR0cC9jb29raWVqYXIucHkgYnkgY2hhbmdpbmcgdGhlCi0gIHVzYWdlIG9mIGdldF9vcmlnaW5fcmVxX2hvc3QoKSB0byBvcmlnaW5fcmVxX2hvc3QuCi0KLS0gSXNzdWUgIzE3NjY2OiBGaXggcmVhZGluZyBnemlwIGZpbGVzIHdpdGggYW4gZXh0cmEgZmllbGQuCi0KLS0gSXNzdWUgIzE3NTAyOiBQcm9jZXNzIERFRkFVTFQgdmFsdWVzIGluIG1vY2sgc2lkZV9lZmZlY3QgdGhhdCByZXR1cm5zIGl0ZXJhdG9yLgotICBQYXRjaCBieSBNaWNoYWVsIEZvb3JkLgotCi0tIElzc3VlICMxNzU3MjogQXZvaWQgY2hhaW5lZCBleGNlcHRpb25zIHdoaWxlIHBhc3NpbmcgYmFkIGRpcmVjdGl2ZXMgdG8KLSAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCi0KLS0gSXNzdWUgIzE3NDM1OiB0aHJlYWRpbmcuVGltZXIncyBfX2luaXRfXyBtZXRob2Qgbm8gbG9uZ2VyIHVzZXMgbXV0YWJsZQotICBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGFyZ3MgYW5kIGt3YXJncyBwYXJhbWV0ZXJzLgotCi0tIElzc3VlICMxNzUyNjogZml4IGFuIEluZGV4RXJyb3IgcmFpc2VkIHdoaWxlIHBhc3NpbmcgY29kZSB3aXRob3V0IGZpbGVuYW1lIHRvCi0gIGluc3BlY3QuZmluZHNvdXJjZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBUeWxlciBEb3lsZS4KLQotLSBJc3N1ZSAjMTY1NTA6IFVwZGF0ZSB0aGUgb3Bjb2RlIGRlc2NyaXB0aW9ucyBvZiBwaWNrbGV0b29scyB0byB1c2UgdW5zaWduZWQKLSAgaW50ZWdlcnMgd2hlcmUgYXBwcm9wcmlhdGUuICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMTc4Mzg6IEFsbG93IHN5cy5zdGRpbiB0byBiZSByZWFzc2lnbmVkLgotCi0tIElzc3VlICMxMzQ5NTogQXZvaWQgbG9hZGluZyB0aGUgY29sb3IgZGVsZWdhdG9yIHR3aWNlIGluIElETEUuCi0KLS0gSXNzdWUgIzE3Nzk4OiBBbGxvdyBJRExFIHRvIGVkaXQgbmV3IGZpbGVzIHdoZW4gc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS4KLQotLSBJc3N1ZSAjMTQ3MzU6IFVwZGF0ZSBJRExFIGRvY3MgdG8gb21pdCAiQ29udHJvbC16IG9uIFdpbmRvd3MiLgotCi0tIElzc3VlICMxNzU4NTogRml4ZWQgSURMRSByZWdyZXNzaW9uLiBOb3cgY2xvc2VzIHdoZW4gdXNpbmcgZXhpdCgpIG9yIHF1aXQoKS4KLQotLSBJc3N1ZSAjMTc2NTc6IFNob3cgZnVsbCBUayB2ZXJzaW9uIGluIElETEUncyBhYm91dCBkaWFsb2cuCi0gIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgotCi0tIElzc3VlICMxNzYxMzogUHJldmVudCB0cmFjZWJhY2sgd2hlbiByZW1vdmluZyBzeW50YXggY29sb3JpemVyIGluIElETEUuCi0KLS0gSXNzdWUgIzEyMDc1ODk6IEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHBhdGNoIGZvciByaWdodC1jbGljayBtZW51IGluIElETEUuCi0KLS0gSXNzdWUgIzE2ODg3OiBJRExFIG5vdyBhY2NlcHRzIENhbmNlbCBpbiB0YWJpZnkvdW50YWJpZnkgZGlhbG9nIGJveC4KLQotLSBJc3N1ZSAjMTc2MjU6IEluIElETEUsIGNsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgotCi0tIElzc3VlICMxNDI1NDogSURMRSBub3cgaGFuZGxlcyByZWFkbGluZSBjb3JyZWN0bHkgYWNyb3NzIHNoZWxsIHJlc3RhcnRzLgotCi0tIElzc3VlICMxNzYxNDogSURMRSBubyBsb25nZXIgcmFpc2VzIGV4Y2VwdGlvbiB3aGVuIHF1aWNrbHkgY2xvc2luZyBhIGZpbGUuCi0KLS0gSXNzdWUgIzY2OTg6IElETEUgbm93IG9wZW5zIGp1c3QgYW4gZWRpdG9yIHdpbmRvdyB3aGVuIGNvbmZpZ3VyZWQgdG8gZG8gc28uCi0KLS0gSXNzdWUgIzg5MDA6IFVzaW5nIGtleWJvYXJkIHNob3J0Y3V0cyBpbiBJRExFIHRvIG9wZW4gYSBmaWxlIG5vIGxvbmdlcgotICByYWlzZXMgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICM2NjQ5OiBGaXhlZCBtaXNzaW5nIGV4aXQgc3RhdHVzIGluIElETEUuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgotCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzE3OTkyOiBBZGQgdGltZW91dHMgdG8gYXN5bmNvcmUgYW5kIGFzeW5jaGF0IHRlc3RzIHNvIHRoYXQgdGhleSB3b24ndAorICBhY2NpZGVudGFsbHkgaGFuZy4KIAogLSBJc3N1ZSAjMTc4MzM6IEZpeCB0ZXN0X2dkYiBmYWlsdXJlcyBzZWVuIG9uIG1hY2hpbmVzIHdoZXJlIGRlYnVnIHN5bWJvbHMKICAgZm9yIGdsaWJjIGFyZSBhdmFpbGFibGUgKHNlZW4gb24gUFBDNjQgTGludXgpLgpAQCAtOTc2LDYgKzI4MTUsOSBAQAogLSBJc3N1ZSAjNzg1NTogQWRkIHRlc3RzIGZvciBjdHlwZXMvd2lucmVnIGZvciBpc3N1ZXMgZm91bmQgaW4gSXJvblB5dGhvbi4KICAgSW5pdGlhbCBwYXRjaCBieSBEaW5vIFZpZWhsYW5kLgogCistIElzc3VlICMxMTA3ODogdGVzdF9fX2FsbF9fIG5vdyBjaGVja3MgZm9yIGR1cGxpY2F0ZXMgaW4gX19hbGxfXy4KKyAgSW5pdGlhbCBwYXRjaCBieSBSLiBEYXZpZCBNdXJyYXkuCisKIC0gSXNzdWUgIzE3NzEyOiBGaXggdGVzdF9nZGIgZmFpbHVyZXMgb24gVWJ1bnR1IDEzLjA0LgogCiAtIElzc3VlICMxNzgzNTogRml4IHRlc3RfaW8gd2hlbiB0aGUgZGVmYXVsdCBPUyBwaXBlIGJ1ZmZlciBzaXplIGlzIGxhcmdlcgpAQCAtOTg3LDYgKzI4MjksOSBAQAogLSBJc3N1ZSAjMTI4MjA6IGFkZCB0ZXN0cyBmb3IgdGhlIHhtbC5kb20ubWluaWNvbXBhdCBtb2R1bGUuCiAgIFBhdGNoIGJ5IEpvaG4gQ2hhbmRsZXIgYW5kIFBoaWwgQ29ubmVsbC4KIAorLSBJc3N1ZSAjMTc2OTE6IHRlc3RfdW5pdm5ld2xpbmVzIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKIC0gSXNzdWUgIzE3NzkwOiB0ZXN0X3NldCBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KICAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgogCkBAIC0xMDA1LDcxNSArMjg1MCw3IEBACiAtIElzc3VlICMxNzY5MjogdGVzdF9zcWxpdGUgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIAotLSBJc3N1ZSAjMTc4NDM6IFJlbW92ZWQgYnoyIHRlc3QgZGF0YSBmaWxlIHRoYXQgd2FzIHRyaWdnZXJpbmcgZmFsc2UtcG9zaXRpdmUKLSAgdmlydXMgd2FybmluZ3Mgd2l0aCBjZXJ0YWluIGFudGl2aXJ1cyBzb2Z0d2FyZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNTk0MDogU3BlY2lmeSBlZmZlY3Qgb2YgbG9jYWxlIG9uIHRpbWUgZnVuY3Rpb25zLgotCi0tIElzc3VlICM2Njk2OiBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFByb2ZpbGUgb2JqZWN0cywgYW5kIGltcHJvdmUKLSAgcHJvZmlsZS9jUHJvZmlsZSBkb2NzLiAgUGF0Y2ggYnkgVG9tIFBpbmNrbmV5LgotCi0tIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQotICBjb2RlY3Mub3BlbigpLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDc6IEluIGNvbmZpZ3VyZSwgZXhwbGljaXRseSBwYXNzIC1XZm9ybWF0IGZvciB0aGUgYmVuZWZpdCBmb3IgR0NDCi0gIDQuOC4KLQotLSBJc3N1ZSAjMTc5NjI6IEJ1aWxkIHdpdGggT3BlblNTTCAxLjAuMWUgb24gV2luZG93cy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwNy1BcHItMjAxMyoKLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgotCi1JRExFCi0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMSByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjQtTWFyLTIwMTMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgotCi0tIElzc3VlICMxNzIyMzogRml4IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgpIGZvciBzdHJpbmcgb2YgMSBjaGFyYWN0ZXIgb3V0c2lkZQotICB0aGUgcmFuZ2UgVSswMDAwLVUrMTBmZmZmLgotCi0tIElzc3VlICMxNjkyMzM1OiBNb3ZlIGluaXRpYWwgYXJncyBhc3NpZ25tZW50IHRvCi0gIEJhc2VFeGNlcHRpb24uX19uZXdfXyB0byBoZWxwIHBpY2tsaW5nIG9mIG5haXZlIHN1YmNsYXNzZXMuCi0KLS0gSXNzdWUgIzE3Mjc1OiBDb3JyZWN0ZWQgY2xhc3MgbmFtZSBpbiBpbml0IGVycm9yIG1lc3NhZ2VzIG9mIHRoZSBDIHZlcnNpb24gb2YKLSAgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tLgotCi0tIElzc3VlICM3OTYzOiBGaXhlZCBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2UgdGhhdCBpc3N1ZWQgd2hlbiBvYmplY3QgaXMKLSAgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLgotCi0tIElzc3VlICM1MzA4OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gbWFyc2hhbGxpbmcgdG9vIGxhcmdlIG9iamVjdCAoYSBzZXF1ZW5jZQotICB3aXRoIHNpemUgPj0gMioqMzEpLCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpbGxlZ2FsIG1hcnNoYWwgZGF0YS4KLQotLSBJc3N1ZSAjMTI5ODM6IEJ5dGVzIGxpdGVyYWxzIHdpdGggaW52YWxpZCBceCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKLSAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgotCi0tIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCi0gIGluIHRoZSBpbnRlcnByZXRlci4KLQotLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCi0gIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgotCi0tIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKLSAgaW5wdXQgYnVmZmVyLgotCi0tIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKLSAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCi0KLS0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCi0KLS0gSXNzdWUgIzEwMTU2OiBJbiB0aGUgaW50ZXJwcmV0ZXIncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgdW5pY29kZSBnbG9iYWxzCi0gIGFyZSBub3cgaW5pdGlhbGl6ZWQgZHluYW1pY2FsbHkgYXMgbmVlZGVkLgotCi0tIElzc3VlICMxNjk4MDogRml4IHByb2Nlc3Npbmcgb2YgZXNjYXBlZCBub24tYXNjaWkgYnl0ZXMgaW4gdGhlCi0gIHVuaWNvZGUtZXNjYXBlLWRlY29kZSBkZWNvZGVyLgotCi0tIElzc3VlICMxNjk3NTogRml4IGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiB0aGUgZXNjYXBlLWRlY29kZSBieXRlcyBkZWNvZGVyLgotCi0tIElzc3VlICMxNDg1MDogTm93IGEgY2hhcm1hcCBkZWNvZGVyIHRyZWF0cyBVK0ZGRkUgYXMgInVuZGVmaW5lZCBtYXBwaW5nIgotICBpbiBhbnkgbWFwcGluZywgbm90IG9ubHkgaW4gYSBzdHJpbmcuCi0KLS0gSXNzdWUgIzE2NzMwOiBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgbm93IG5vIGxvbmdlcnMgcmFpc2VzIGFuCi0gIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBwb3B1bGF0ZSBpdHMgY2FjaGUgYW5kIGl0IGZpbmRzIG91dCB0aGUgZGlyZWN0b3J5IGlzCi0gIHVucmVhZGFibGUgb3IgaGFzIHR1cm5lZCBpbnRvIGEgZmlsZS4gUmVwb3J0ZWQgYW5kIGRpYWdub3NlZCBieQotICBEYXZpZCBQcml0Y2hhcmQuCi0KLS0gSXNzdWUgIzE2OTA2OiBGaXggYSBsb2dpYyBlcnJvciB0aGF0IHByZXZlbnRlZCBtb3N0IHN0YXRpYyBzdHJpbmdzIGZyb20gYmVpbmcKLSAgY2xlYXJlZC4KLQotLSBJc3N1ZSAjMTE0NjE6IEZpeCB0aGUgaW5jcmVtZW50YWwgVVRGLTE2IGRlY29kZXIuIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIEFtYXVyeSBGb3JnZW90IGQnQXJjLgotCi0tIElzc3VlICMxNjg1NjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gY2FsbGluZyByZXByKCkgb24gYSBkaWN0IHdpdGgKLSAgYSBrZXkgd2hvc2UgcmVwciByYWlzZSBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzE2MzY3OiBGaXggRmlsZUlPLnJlYWRhbGwoKSBvbiBXaW5kb3dzIGZvciBmaWxlcyBsYXJnZXIgdGhhbiAyIEdCLgotCi0tIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKLSAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvCi0gIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKLSAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBiZWNhdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zIGFubm91bmNlcyBhbgotICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIHdoZXJlYXMgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaXMgdXNlZCBpbiBwcmFjdGljZS4KLQotLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCi0KLS0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKLSAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCi0gIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgotCi0tIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCi0gIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgotCi0tIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KLSAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KLQotLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCi0gIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCi0KLS0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCi0gIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAotICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KLQotLSBJc3N1ZSAjMTY0MTY6IE9uIE1hYyBPUyBYLCBvcGVyYXRpbmcgc3lzdGVtIGRhdGEgYXJlIG5vdyBhbHdheXMKLSAgZW5jb2RlZC9kZWNvZGVkIHRvL2Zyb20gVVRGLTgvc3Vycm9nYXRlZXNjYXBlLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcKLSAgKHdoaWNoIG1heSBiZSBBU0NJSSBpZiBubyBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgdG8gYXZvaWQKLSAgaW5jb25zaXN0ZW5jaWVzIHdpdGggb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBmdW5jdGlvbnMgd2hpY2ggYXJlCi0gIGFscmVhZHkgdXNpbmcgVVRGLTgvc3Vycm9nYXRlZXNjYXBlLgotCi0tIElzc3VlICMxNjU4ODogU2lsZW5jZSB1bnVzZWQtYnV0LXNldCB3YXJuaW5ncyBpbiBQeXRob24vdGhyZWFkX3B0aHJlYWQKLQotLSBJc3N1ZSAjMTY1NDY6IEZpeDogYXN0LllpZWxkRnJvbSBhcmd1bWVudCBpcyBub3cgbWFuZGF0b3J5LgotCi0tIElzc3VlICMxNjUxNDogRml4IHJlZ3Jlc3Npb24gY2F1c2luZyBhIHRyYWNlYmFjayB3aGVuIHN5cy5wYXRoWzBdIGlzIE5vbmUKLSAgKGFjdHVhbGx5LCBhbnkgbm9uLXN0cmluZyBvciBub24tYnl0ZXMgdHlwZSkuCi0KLS0gSXNzdWUgIzE2MzA2OiBGaXggbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB1bmtub3duIGNvbW1hbmQgbGluZQotICBwYXJhbWV0ZXJzIHdoZXJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBIaWV1IE5ndXllbi4KLQotLSBJc3N1ZSAjMTYyMTU6IEZpeCBwb3RlbnRpYWwgZG91YmxlIG1lbW9yeSBmcmVlIGluIHN0ci5yZXBsYWNlKCkuICBQYXRjaAotICBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQ1MzogRml4IGVxdWFsaXR5IHRlc3Rpbmcgb2YgZGVhZCB3ZWFrcmVmIG9iamVjdHMuCi0KLS0gSXNzdWUgIzk1MzU6IEZpeCBwZW5kaW5nIHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQKLSAgaGFuZGxlZCBieSBQeXRob24gdG8gbm90IHBlcnNpc3QgYWZ0ZXIgb3MuZm9yaygpIGluIHRoZSBjaGlsZCBwcm9jZXNzLgotCi0tIElzc3VlICMxNTAwMTogZml4IHNlZ2ZhdWx0IG9uICJkZWwgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10iLiBQYXRjaCBieSBWaWN0b3IKLSAgU3Rpbm5lci4KLQotLSBJc3N1ZSAjODI3MTogdGhlIHV0Zi04IGRlY29kZXIgbm93IG91dHB1dHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIFUrRkZGRAotICBjaGFyYWN0ZXJzIHdoZW4gdXNlZCB3aXRoIHRoZSAncmVwbGFjZScgZXJyb3IgaGFuZGxlciBvbiBpbnZhbGlkIHV0Zi04Ci0gIHNlcXVlbmNlcy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EsIHRlc3RzIGJ5IEV6aW8gTWVsb3R0aS4KLQotLSBJc3N1ZSAjNTc2NTogQXBwbHkgYSBoYXJkIHJlY3Vyc2lvbiBsaW1pdCBpbiB0aGUgY29tcGlsZXIgaW5zdGVhZCBvZgotICBibG93aW5nIHRoZSBzdGFjayBhbmQgc2VnZmF1bHRpbmcuIEluaXRpYWwgcGF0Y2ggYnkgQW5kcmVhIEdyaWZmaW5pLgotCi0tIElzc3VlICMxNjQwMjogV2hlbiBzbGljaW5nIGEgcmFuZ2UsIGZpeCBzaGFkb3dpbmcgb2YgZXhjZXB0aW9ucyBmcm9tCi0gIF9faW5kZXhfXy4KLQotLSBJc3N1ZSAjMTYzMzY6IGZpeCBpbnB1dCBjaGVja2luZyBpbiB0aGUgc3Vycm9nYXRlcGFzcyBlcnJvciBoYW5kbGVyLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICM4NDAxOiBhc3NpZ25pbmcgYW4gaW50IHRvIGEgYnl0ZWFycmF5IHNsaWNlIChlLmcuIGJbMzo0XSA9IDUpIG5vdwotICByYWlzZXMgYW4gZXJyb3IuCi0KLS0gRml4IHNlZ2ZhdWx0cyBvbiBzZXR0aW5nIF9fcXVhbG5hbWVfXyBvbiBidWlsdGluIHR5cGVzIGFuZCBhdHRlbXB0aW5nIHRvCi0gIGRlbGV0ZSBpdCBvbiBhbnkgdHlwZS4KLQotLSBJc3N1ZSAjMTYzNDU6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gYGBmcm9ta2V5c2BgIG9uIGEgZGljdCBzdWJjbGFzcwotICByZWNlaXZlZCBhIG5vbmVtcHR5IGRpY3QgZnJvbSB0aGUgY29uc3RydWN0b3IuCi0KLS0gSXNzdWUgIzE2MjcxOiBGaXggc3RyYW5nZSBidWdzIHRoYXQgcmVzdWx0ZWQgZnJvbSBfX3F1YWxuYW1lX18gYXBwZWFyaW5nIGluIGEKLSAgY2xhc3MncyBfX2RpY3RfXyBhbmQgb24gdHlwZS4KLQotLSBJc3N1ZSAjNjA3NDogRW5zdXJlIGNhY2hlZCBieXRlY29kZSBmaWxlcyBjYW4gYWx3YXlzIGJlIHVwZGF0ZWQgYnkgdGhlCi0gIHVzZXIgdGhhdCBjcmVhdGVkIHRoZW0sIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGUgaXMgcmVhZC1vbmx5LgotCi0tIElzc3VlICMxNDc4MzogSW1wcm92ZSBpbnQoKSBkb2NzdHJpbmcgYW5kIHN3aXRjaCBkb2NzdHJpbmdzIGZvciBzdHIoKSwKLSAgcmFuZ2UoKSwgYW5kIHNsaWNlKCkgdG8gdXNlIG11bHRpLWxpbmUgc2lnbmF0dXJlcy4KLQotLSBJc3N1ZSAjMTYxNjA6IFN1YmNsYXNzIHN1cHBvcnQgbm93IHdvcmtzIGZvciB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCi0KLS0gSXNzdWUgIzE1Mzc5OiBGaXggcGFzc2luZyBvZiBub24tQk1QIGNoYXJhY3RlcnMgYXMgaW50ZWdlcnMgZm9yIHRoZSBjaGFybWFwCi0gIGRlY29kZXIgKGFscmVhZHkgd29ya2luZyBhcyB1bmljb2RlIHN0cmluZ3MpLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTUxNDQ6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gaGFuZGxpbmcgcG9pbnRlcnMgYXMgaW50ZWdlcgotICB2YWx1ZXMsIGJ5IHVzaW5nIGBQeV91aW50cHRyX3RgIGluc3RlYWQgb2YgYHNpemVfdGAuICBQYXRjaCBieSBTZXJoaXkKLSAgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTk2NTogRXhwbGljaXRseSBjYXN0IGBBVF9GRENXRGAgYXMgKGludCkuICBSZXF1aXJlZCBvbiBTb2xhcmlzIDEwCi0gICh3aGljaCBkZWZpbmVzIGBBVF9GRENXRGAgYXMgYGAweGZmZDE5NTUzYGApLCBoYXJtbGVzcyBvbiBvdGhlciBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE1ODM5OiBDb252ZXJ0IFN5c3RlbUVycm9ycyBpbiBgc3VwZXIoKWAgdG8gUnVudGltZUVycm9ycy4KLQotLSBJc3N1ZSAjMTU4NDY6IEZpeCBTeXN0ZW1FcnJvciB3aGljaCBoYXBwZW5lZCB3aGVuIHVzaW5nIGBhc3QucGFyc2UoKWAgaW4gYW4KLSAgZXhjZXB0aW9uIGhhbmRsZXIgb24gY29kZSB3aXRoIHN5bnRheCBlcnJvcnMuCi0KLS0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQotICBzdWJzY3JpcHRhYmxlLgotCi0tIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgbGV0IEltcG9ydEVycm9yIHByb3BhZ2F0ZSB3aGVuIGEgbW9kdWxlIHRoYXQKLSAgaXMgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiB1c2luZyBmcm9tbGlzdCB0cmllcyB0byBpbXBvcnQgYSBtb2R1bGUKLSAgdGhhdCBjYW5ub3QgYmUgZm91bmQuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDA6IEFkZGVkIHN0eWxlIHRvIGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGJ5IGRpY3QuCi0KLS0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCi0gIGljZXdlYXNlbCwgaWNlYXBlLgotCi0tIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKLSAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQotICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCi0gIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgotCi0tIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bwotICBmaWxlQ29uZmlnKCkuCi0KLS0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKSB3aGVyZQotICB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCi0KLS0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgKENUUkwrYykuCi0KLS0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KLSAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCi0gIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KLQotLSBJc3N1ZSAjMTcxOTI6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4wLjEzLiAgVGhpcwotICBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc3RhY2sgbWlzYWxpZ25tZW50IGlzc3VlIG9uIHg4NiBhbmQgaXNzdWVzIG9uCi0gIHNvbWUgbW9yZSByZWNlbnQgcGxhdGZvcm1zLgotCi0tIElzc3VlICM4ODYyOiBGaXhlZCBjdXJzZXMgY2xlYW51cCB3aGVuIGdldGtleSBpcyBpbnRlcnJwdXRlZCBieSBhIHNpZ25hbC4KLQotLSBJc3N1ZSAjMTc0NDM6IGltYXBsaWIuSU1BUDRfc3RyZWFtIHdhcyB1c2luZyB0aGUgZGVmYXVsdCB1bmJ1ZmZlcmVkIElPCi0gIGluIHN1YnByb2Nlc3MsIGJ1dCB0aGUgaW1hcCBjb2RlIGFzc3VtZXMgYnVmZmVyZWQgSU8uICBJbiBQeXRob24yIHRoaXMKLSAgd29ya2VkIGJ5IGFjY2lkZW50LiAgSU1BUDRfc3RyZWFtIG5vdyBleHBsaWNpdGx5IHVzZXMgYnVmZmVyZWQgSU8uCi0KLS0gSXNzdWUgIzE3NDc2OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdW5kb2N1bWVudGVkIHB5ZG9jCi0gICdhbGxtZXRob2RzJzsgaXQgd2FzIG1pc3NpbmcgdW5ib3VuZCBtZXRob2RzIG9uIHRoZSBjbGFzcy4KLQotLSBJc3N1ZSAjMTY4ODA6IERvIG5vdCBhc3N1bWUgX2ltcC5sb2FkX2R5bmFtaWMoKSBpcyBkZWZpbmVkIGluIHRoZSBpbXAgbW9kdWxlLgotCi0tIElzc3VlICMxNjM4OTogRml4ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbiAzLjEgaW4gdGhlCi0gIGNhY2hpbmcgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KLQotLSBJc3N1ZSAjMTc0MzE6IEZpeCBtaXNzaW5nIGltcG9ydCBvZiBCeXRlc0ZlZWRQYXJzZXIgaW4gZW1haWwucGFyc2VyLgotCi0tIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAotICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgotCi0tIElzc3VlICMxNzM2ODogRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIFB5dGhvbiBKU09OIGRlY29kZXIgdGhhdCBjYXVzZWQKLSAgYSBmYWlsdXJlIHdoaWxlIGRlY29kaW5nIGVtcHR5IG9iamVjdCBsaXRlcmFscyB3aGVuIG9iamVjdF9wYWlyc19ob29rIHdhcwotICBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzE0NjQ1OiBUaGUgZW1haWwgZ2VuZXJhdG9yIGNsYXNzZXMgbm93IHByb2R1Y2Ugb3V0cHV0IHVzaW5nIHRoZQotICBzcGVjaWZpZWQgbGluZXNlcCB0aHJvdWdob3V0LiAgUHJldmlvdXNseSBpZiB0aGUgcHJvbG9nLCBlcGlsb2csIG9yCi0gIGJvZHkgd2VyZSBzdG9yZWQgd2l0aCBhIGRpZmZlcmVudCBsaW5lc2VwLCB0aGF0IGxpbmVzZXAgd2FzIHVzZWQuICBUaGlzCi0gIGZpeCBjb3JyZWN0cyBhbiBSRkMgbm9uLWNvbXBsaWFuY2UgaXNzdWUgd2l0aCBzbXRwbGliLnNlbmRfbWVzc2FnZS4KLQotLSBJc3N1ZSAjMTcyNzg6IEZpeCBhIGNyYXNoIGluIGhlYXBxLmhlYXBwdXNoKCkgYW5kIGhlYXBxLmhlYXBwb3AoKSB3aGVuCi0gIHRoZSBsaXN0IGlzIGJlaW5nIHJlc2l6ZWQgY29uY3VycmVudGx5LgotCi0tIElzc3VlICMxNjk2MjogVXNlIGdldGRlbnRzNjQgaW5zdGVhZCBvZiB0aGUgb2Jzb2xldGUgZ2V0ZGVudHMgc3lzY2FsbAotICBpbiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgb24gTGludXguCi0KLS0gSXNzdWUgIzE3MDE4OiBNYWtlIFByb2Nlc3Muam9pbigpIHJldHJ5IGlmIG9zLndhaXRwaWQoKSBmYWlscyB3aXRoIEVJTlRSLgotCi0tIElzc3VlICMxNzIyMzogYXJyYXkgbW9kdWxlOiBGaXggYSBjcmFzaGVyIHdoZW4gY29udmVydGluZyBhbiBhcnJheSBjb250YWluaW5nCi0gIGludmFsaWQgY2hhcmFjdGVycyAob3V0c2lkZSByYW5nZSBbVSswMDAwOyBVKzEwZmZmZl0pIHRvIFVuaWNvZGU6Ci0gIHJlcHIoYXJyYXkpLCBzdHIoYXJyYXkpIGFuZCBhcnJheS50b3VuaWNvZGUoKS4gUGF0Y2ggd3JpdHRlbiBieSBNYW51ZWwgSmFjb2IuCi0KLS0gSXNzdWUgIzE0NzIwOiBzcWxpdGUzOiBDb252ZXJ0IGRhdGV0aW1lIG1pY3Jvc2Vjb25kcyBjb3JyZWN0bHkuCi0gIFBhdGNoIGJ5IExvd2UgVGhpZGVybWFuLgotCi0tIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZwotICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgotCi0tIElzc3VlICMxMzcwMDogRml4IGJ5dGUvc3RyaW5nIGhhbmRsaW5nIGluIGltYXBsaWIgYXV0aGVudGljYXRpb24gd2hlbiBhbgotICBhdXRob2JqZWN0IGlzIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTMxNTM6IFRraW50ZXIgZnVuY3Rpb25zIG5vdyByYWlzZSBUY2xFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3Igd2hlbgotICBhIHN0cmluZyBhcmd1bWVudCBjb250YWlucyBub24tQk1QIGNoYXJhY3Rlci4KLQotLSBJc3N1ZSAjOTY2OTogUHJvdGVjdCByZSBhZ2FpbnN0IGluZmluaXRlIGxvb3BzIG9uIHplcm8td2lkdGggbWF0Y2hpbmcgaW4KLSAgbm9uLWdyZWVkeSByZXBlYXQuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzEzMTY5OiBUaGUgbWF4aW1hbCByZXBldGl0aW9uIG51bWJlciBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgYmVlbgotICBpbmNyZWFzZWQgZnJvbSA2NTUzNCB0byAyMTQ3NDgzNjQ3IChvbiAzMi1iaXQgcGxhdGZvcm0pIG9yIDQyOTQ5NjcyOTQgKG9uCi0gIDY0LWJpdCkuCi0KLS0gSXNzdWUgIzE3MTQzOiBGaXggYSBtaXNzaW5nIGltcG9ydCBpbiB0aGUgdHJhY2UgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQotICBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjc0MzogRml4IG1tYXAgb3ZlcmZsb3cgY2hlY2sgb24gMzIgYml0IFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2ODAwOiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgbm8gbG9uZ2VyIGxlZnQgdGVtcG9yYXJ5IGZpbGVzIHdoZW4KLSAgdGhlIGRpc2sgaXMgZnVsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFtaXIgU3pla2VseS4KLQotLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCi0gIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgotCi0tIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgotCi0tIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCi0KLS0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbW9yZSBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgotCi0tIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCi0gIFswLCAyKm1hdGgucGldLgotCi0tIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgotCi0tIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKLSAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKLSAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCi0KLS0gSXNzdWUgIzEwMzU1OiBJbiBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjbGFzcyBtb2RlLCBuYW1lLCBlbmNvZGluZyBhbmQKLSAgbmV3bGluZXMgcHJvcGVydGllcyBub3cgd29yayBmb3IgdW5yb2xsZWQgZmlsZXMuICBPYnNvbGV0ZWQgYW5kIG5ldmVyCi0gIHdvcmtpbmcgb24gUHl0aG9uIDMgeHJlYWRsaW5lIG1ldGhvZCBub3cgcmVtb3ZlZC4KLQotLSBJc3N1ZSAjMTY2ODY6IEZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gYXVkaW9vcCBtb2R1bGUuICBGaXhlZCBjcmFzaGVzIGluCi0gIGF2Z3BwKCksIG1heHBwKCkgYW5kIHJhdGVjdigpLiAgRml4ZWQgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBhZGQoKSwgYmlhcygpLAotICBhbmQgcmF0ZWN2KCkuICByZXZlcnNlKCksIGxpbjJsaW4oKSBhbmQgcmF0ZWN2KCkgbm8gbW9yZSBsb3NlIHByZWNpc2lvbiBmb3IKLSAgMzItYml0IHNhbXBsZXMuICBtYXgoKSBhbmQgcm1zKCkgbm8gbW9yZSByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0IGFuZAotICB2YXJpb3VzIG90aGVyIGZ1bmN0aW9ucyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCAzMi1iaXQgc2FtcGxlIC0weDgwMDAwMDAwLgotCi0tIElzc3VlICMxNzA3MzogRml4IHNvbWUgaW50ZWdlciBvdmVyZmxvd3MgaW4gc3FsaXRlMyBtb2R1bGUuCi0KLS0gSXNzdWUgIzE2NzIzOiBodHRwbGliLkhUVFBSZXNwb25zZSBubyBsb25nZXIgbWFya2VkIGNsb3NlZCB3aGVuIHRoZSBjb25uZWN0aW9uCi0gIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkLgotCi0tIElzc3VlICMxNjk0ODogRml4IHF1b3RlZCBwcmludGFibGUgYm9keSBlbmNvZGluZyBmb3Igbm9uLWxhdGluMSBjaGFyYWN0ZXIKLSAgc2V0cyBpbiB0aGUgZW1haWwgcGFja2FnZS4KLQotLSBJc3N1ZSAjMTY4MTE6IEZpeCBmb2xkaW5nIG9mIGhlYWRlcnMgd2l0aCBubyB2YWx1ZSBpbiB0aGUgcHJvdmlzaW9uYWwgZW1haWwKLSAgcG9saWNpZXMuCi0KLS0gSXNzdWUgIzE3MTMyOiBVcGRhdGUgc3ltYm9sIGZvciAieWllbGQgZnJvbSIgZ3JhbW1hciBjaGFuZ2VzLgotCi0tIElzc3VlICMxNzA3NjogTWFrZSBjb3B5aW5nIG9mIHhhdHRycyBtb3JlIHBlcm1pc3NpdmUgb2YgbWlzc2luZyBGUyBzdXBwb3J0LgotICBQYXRjaCBieSBUaG9tYXMgV291dGVycy4KLQotLSBJc3N1ZSAjMTcwODk6IEV4cGF0IHBhcnNlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KLSAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLiAgSXQgbm93IGFjY2VwdHMgYnl0ZXMgYW5kCi0gIHN0cmluZ3MgbGFyZ2VyIHRoYW4gMiBHaUIuCi0KLS0gSXNzdWUgIzYwODM6IEZpeCBtdWx0aXBsZSBzZWdtZW50YXRpb24gZmF1bHRzIG9jY3VyZWQgd2hlbiBQeUFyZ19QYXJzZVR1cGxlCi0gIHBhcnNlcyBuZXN0ZWQgbXV0YXRpbmcgc2VxdWVuY2UuCi0KLS0gSXNzdWUgIzUyODk6IEZpeCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkgb24gU29sYXJpcy4KLQotLSBJc3N1ZSAjMTcxMDY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBpby5UZXh0SU9XcmFwcGVyIHdoZW4gYW4gdW5kZXJseWluZwotICBzdHJlYW0gb3IgYSBkZWNvZGVyIHByb2R1Y2VzIGRhdGEgb2YgYW4gdW5leHBlY3RlZCB0eXBlIChpLmUuIHdoZW4KLSAgaW8uVGV4dElPV3JhcHBlciBpbml0aWFsaXplZCB3aXRoIHRleHQgc3RyZWFtIG9yIHVzZSBieXRlcy10by1ieXRlcyBjb2RlYykuCi0KLS0gSXNzdWUgIzE1NjMzOiBodHRwbGliLkhUVFBSZXNwb25zZSBpcyBub3cgbWFyayBjbG9zZWQgd2hlbiB0aGUgc2VydmVyCi0gIHNlbmRzIGxlc3MgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBDb250ZW50LUxlbmd0aC4KLQotLSBJc3N1ZSAjMTIyNjg6IFRoZSBpbyBtb2R1bGUgZmlsZSBvYmplY3Qgd3JpdGUgbWV0aG9kcyBubyBsb25nZXIgYWJvcnQgZWFybHkKLSAgd2hlbiBvbmUgb2YgaXRzIHdyaXRlIHN5c3RlbSBjYWxscyBpcyBpbnRlcnJ1cHRlZCAoRUlOVFIpLgotCi0tIElzc3VlICM2OTcyOiBUaGUgemlwZmlsZSBtb2R1bGUgbm8gbG9uZ2VyIG92ZXJ3cml0ZXMgZmlsZXMgb3V0c2lkZSBvZgotICBpdHMgZGVzdGluYXRpb24gcGF0aCB3aGVuIGV4dHJhY3RpbmcgbWFsaWNpb3VzIHppcCBmaWxlcy4KLQotLSBJc3N1ZSAjNDg0NDogWmlwRmlsZSBub3cgcmFpc2VzIEJhZFppcEZpbGUgd2hlbiBvcGVucyBhIFpJUCBmaWxlIHdpdGggYW4KLSAgaW5jb21wbGV0ZSAiRW5kIG9mIENlbnRyYWwgRGlyZWN0b3J5IiByZWNvcmQuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUKLSAgUG9sbyBhbmQgQWxhbiBNY0ludHlyZS4KLQotLSBJc3N1ZSAjMTcwNzE6IFNpZ25hdHVyZS5iaW5kKCkgbm93IHdvcmtzIHdoZW4gb25lIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cwotICBpcyBuYW1lZCBgYHNlbGZgYC4KLQotLSBJc3N1ZSAjMTIwMDQ6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciBpbiBQeVppcEZpbGUgd2hlbiB3cml0aW5nIGFuIGludmFsaWQKLSAgUHl0aG9uIGZpbGUuICBQYXRjaCBieSBCZW4gTW9yZ2FuLgotCi0tIElzc3VlICMxNjAyMTMzOiBvbiBNYWMgT1MgWCBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIChgYC0tZW5hYmxlLXNoYXJlZGBgKQotICBub3cgZmlsbHMgdGhlIGBgb3MuZW52aXJvbmBgIHZhcmlhYmxlIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjMTU1MDU6IGB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcmAgbm8gbG9uZ2VyIGFzc3VtZXMgU0lHSU5UIGhhbmRsZXIgaXMKLSAgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LgotCi0tIElzc3VlICMxMzQ1NDogRml4IGEgY3Jhc2ggd2hlbiBkZWxldGluZyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5IGl0ZXJ0b29scy50ZWUoKQotICBpZiBhbGwgb3RoZXIgaXRlcmF0b3JzIHdlcmUgdmVyeSBhZHZhbmNlZCBiZWZvcmUuCi0KLS0gSXNzdWUgIzEyNDExOiBGaXggdG8gY2dpLnBhcnNlX211bHRpcGFydCB0byBjb3JyZWN0bHkgdXNlIGJ5dGVzIGJvdW5kYXJpZXMKLSAgYW5kIGJ5dGVzIGRhdGEuIFBhdGNoIGJ5IEpvbmFzIFdhZ25lci4KLQotLSBJc3N1ZSAjMTY5NTc6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBzZWFyY2hlcyBhIGJhcmUgZmlsZSBuYW1lIGluIHRoZQotICBjdXJyZW50IGRpcmVjdG9yeSBvbiBVbml4IGFuZCBubyBsb25nZXIgc2VhcmNoZXMgYSByZWxhdGl2ZSBmaWxlIHBhdGggd2l0aAotICBhIGRpcmVjdG9yeSBwYXJ0IGluIFBBVEggZGlyZWN0b3JpZXMuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KLQotLSBJc3N1ZSAjMTY5OTM6IHNodXRpbC53aGljaCgpIG5vdyBwcmVzZXJ2ZXMgdGhlIGNhc2Ugb2YgdGhlIHBhdGggYW5kIGV4dGVuc2lvbgotICBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNjk5MjogT24gV2luZG93cyBpbiBzaWduYWwuc2V0X3dha2V1cF9mZCwgdmFsaWRhdGUgdGhlIGZpbGUKLSAgZGVzY3JpcHRvciBhcmd1bWVudC4KLQotLSBJc3N1ZSAjMTY0MjI6IEZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFB5dGhvbiB2ZXJzaW9uLCB0aGUgQyB2ZXJzaW9uIG9mCi0gIGRlY2ltYWwgbm93IHVzZXMgc3RyaW5ncyBpbnN0ZWFkIG9mIGludGVnZXJzIGZvciByb3VuZGluZyBtb2RlIGNvbnN0YW50cy4KLQotLSBJc3N1ZSAjMTU4NjE6IHRraW50ZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGxpc3RzIGFuZCB0dXBsZXMgY29udGFpbmluZwotICBzdHJpbmdzIHdpdGggd2hpdGVzcGFjZXMsIGJhY2tzbGFzaGVzIG9yIHVuYmFsYW5jZWQgYnJhY2VzLgotCi0tIElzc3VlICMxMDUyNzogVXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGZvciBtdWx0aXByb2Nlc3NpbmcgcGlwZXMuCi0KLS0gSXNzdWUgIzk3MjA6IHppcGZpbGUgbm93IHdyaXRlcyBjb3JyZWN0IGxvY2FsIGhlYWRlcnMgZm9yIGZpbGVzIGxhcmdlciB0aGFuCi0gIDQgR2lCLgotCi0tIElzc3VlICMxNjk1NTogRml4IHRoZSBwb2xsKCkgbWV0aG9kIGZvciBtdWx0aXByb2Nlc3NpbmcncyBzb2NrZXQKLSAgY29ubmVjdGlvbnMgb24gV2luZG93cy4KLQotLSBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbm93IHByb3Blcmx5IGNsb3NlcyB0aGUgaW5wdXQgZmlsZS4KLQotLSBJc3N1ZSAjMTY5MDA6IElzc3VlIGEgUmVzb3VyY2VXYXJuaW5nIHdoZW4gYW4gc3NsIHNvY2tldCBpcyBsZWZ0IHVuY2xvc2VkLgotCi0tIElzc3VlICMxMzg5OTogXEEsIFxaLCBhbmQgXEIgbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgQSwgWiwgYW5kIEIgbGl0ZXJhbHMKLSAgd2hlbiB1c2VkIGluc2lkZSBjaGFyYWN0ZXIgY2xhc3NlcyAoZS5nLiAnW1xBXScpLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgotCi0tIElzc3VlICMxNTU0NTogRml4IHJlZ3Jlc3Npb24gaW4gc3FsaXRlMydzIGl0ZXJkdW1wIG1ldGhvZCB3aGVyZSBpdCB3YXMKLSAgZmFpbGluZyBpZiB0aGUgY29ubmVjdGlvbiB1c2VkIGEgcm93IGZhY3RvcnkgKHN1Y2ggYXMgc3FsaXRlMy5Sb3cpIHRoYXQKLSAgcHJvZHVjZWQgdW5zb3J0YWJsZSBvYmplY3RzLiAoUmVncmVzc2lvbiB3YXMgaW50cm9kdWNlZCBieSBmaXggZm9yIDk3NTApLgotCi0tIElzc3VlICMxNTk3MjogRml4IGVycm9yIG1lc3NhZ2VzIHdoZW4gb3MgZnVuY3Rpb25zIGV4cGVjdGluZyBhIGZpbGUgbmFtZSBvcgotICBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSB0aGUgaW5jb3JyZWN0IHR5cGUuCi0KLS0gSXNzdWUgIzE2ODI4OiBGaXggZXJyb3IgaW5jb3JyZWN0bHkgcmFpc2VkIGJ5IGJ6Mi5jb21wcmVzcyhiJycpIGFuZAotICBiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzcyhiJycpLiBJbml0aWFsIHBhdGNoIGJ5IE1hcnRpbiBQYWNrbWFuLgotCi0tIElzc3VlICMxNjU0MTogdGtfc2V0UGFsZXR0ZSgpIG5vdyB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzLgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgcGFyc2VyLnBvcGl0ZW0oKWAgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yLgotICBUaGlzIG1ha2VzIGBwYXJzZXIuY2xlYW4oKWAgd29yayBjb3JyZWN0bHkuCi0KLS0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydzZWN0aW9uJ10gPSB7fWBgIG5vdyBwcmVzZXJ2ZXMKLSAgc2VjdGlvbiBvcmRlciB3aXRoaW4gdGhlIHBhcnNlci4gVGhpcyBtYWtlcyBgcGFyc2VyLnVwZGF0ZSgpYCBwcmVzZXJ2ZSBzZWN0aW9uCi0gIG9yZGVyIGFzIHdlbGwuCi0KLS0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydERUZBVUxUJ10gPSB7fWBgIG5vdyBjb3JyZWN0bHkKLSAgY2xlYXJzIHByZXZpb3VzIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbi4gU2FtZSBnb2VzIGZvcgotICBgYHBhcnNlci51cGRhdGUoeydERUZBVUxUJzoge319KWBgLgotCi0tIElzc3VlICM5NTg2OiBSZWRlZmluZSBTRU1fRkFJTEVEIG9uIE1hY09TWCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LgotCi0tIElzc3VlICMxMDUyNzogbWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGlmIGF2YWlsYWJsZS4KLQotLSBJc3N1ZSAjMTY2ODg6IE5vdyByZWdleGVzIGNvbnRhaW5lZCBiYWNrcmVmZXJlbmNlcyBjb3JyZWN0bHkgd29yayB3aXRoCi0gIG5vbi1BU0NJSSBzdHJpbmdzLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgotCi0tIElzc3VlICMxNjQ4NTogTm93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpZiBmaWxlIGhlYWRlciBwYXRjaGluZyBmYWlsZWQKLSAgb24gY2xvc2luZyBhbiBhaWZjIGZpbGUuCi0KLS0gSXNzdWUgIzE2MTY1OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbm8gbG9uZ2VyIGJsb2NrcyBhIHNjaGVkdWxlciBmb3Igb3RoZXIKLSAgdGhyZWFkcy4KLQotLSBJc3N1ZSAjMTY2NDE6IERlZmF1bHQgdmFsdWVzIG9mIHNjaGVkLnNjaGVkdWxlci5lbnRlcigpIGFyZSBubyBsb25nZXIKLSAgbW9kaWZpYWJsZS4KLQotLSBJc3N1ZSAjMTY2MTg6IE1ha2UgZ2xvYi5nbG9iIG1hdGNoIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3RyaW5ncyBhbmQgYnl0ZXMKLSAgcmVnYXJkaW5nIGxlYWRpbmcgZG90cy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NzEzOiBQYXJzaW5nIG9mICd0ZWwnIHVybHMgdXNpbmcgdXJscGFyc2Ugc2VwYXJhdGVzIHBhcmFtcyBmcm9tCi0gIHBhdGguCi0KLS0gSXNzdWUgIzE2NDQzOiBBZGQgZG9jc3RyaW5ncyB0byByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggb2JqZWN0cy4KLSAgUGF0Y2ggYnkgQW50b24gS2FzeWFub3YuCi0KLS0gSXNzdWUgIzE1NzAxOiBGaXggSFRUUEVycm9yIGluZm8gbWV0aG9kIGNhbGwgdG8gcmV0dXJuIHRoZSBoZWFkZXJzIGluZm9ybWF0aW9uLgotCi0tIElzc3VlICMxNjc1MjogQWRkIGEgbWlzc2luZyBpbXBvcnQgdG8gbW9kdWxlZmluZGVyLiBQYXRjaCBieSBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjY0NjogZnRwbGliLkZUUC5tYWtlcG9ydCgpIG1pZ2h0IGxvc2Ugc29ja2V0IGVycm9yIGRldGFpbHMuCi0gIChwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthKQotCi0tIElzc3VlICMxNjYyNjogRml4IGluZmluaXRlIHJlY3Vyc2lvbiBpbiBnbG9iLmdsb2IoKSBvbiBXaW5kb3dzIHdoZW4gdGhlCi0gIHBhdHRlcm4gY29udGFpbnMgYSB3aWxkY2FyZCBpbiB0aGUgZHJpdmUgb3IgVU5DIHBhdGguICBQYXRjaCBieSBTZXJoaXkKLSAgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTc4MzogRXhjZXB0IGZvciB0aGUgbnVtYmVyIG1ldGhvZHMsIHRoZSBDIHZlcnNpb24gb2YgZGVjaW1hbCBub3cKLSAgc3VwcG9ydHMgYWxsIE5vbmUgZGVmYXVsdCB2YWx1ZXMgcHJlc2VudCBpbiBkZWNpbWFsLnB5LiBUaGVzZSB2YWx1ZXMgd2VyZQotICBsYXJnZWx5IHVuZG9jdW1lbnRlZC4KLQotLSBJc3N1ZSAjMTYyOTg6IEluIEhUVFBSZXNwb25zZS5yZWFkKCksIGNsb3NlIHRoZSBzb2NrZXQgd2hlbiB0aGVyZSBpcyBubwotICBDb250ZW50LUxlbmd0aCBhbmQgdGhlIGluY29taW5nIHN0cmVhbSBpcyBmaW5pc2hlZC4gIFBhdGNoIGJ5IEVyYW4KLSAgUnVuZHN0ZWluLgotCi0tIElzc3VlICMxNTg3MjogRml4IDMuMyByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgdGhlIG5ldyBmZC1iYXNlZCBzaHV0aWwucm10cmVlCi0gIHRoYXQgY2F1c2VkIGl0IHRvIG5vdCBpZ25vcmUgY2VydGFpbiBlcnJvcnMgd2hlbiBpZ25vcmVfZXJyb3JzIHdhcyBzZXQuCi0gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEgYW5kIFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MjQ4OiBEaXNhYmxlIGNvZGUgZXhlY3V0aW9uIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBieQotICB0a2ludGVyIHdoZW4gdGhlIC1FIGZsYWcgaXMgcGFzc2VkIHRvIFB5dGhvbi4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KLQotLSBJc3N1ZSAjMTY2Mjg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGN0eXBlcy5yZXNpemUoKS4KLQotLSBJc3N1ZSAjMTM2MTQ6IEZpeCBzZXR1cC5weSByZWdpc3RlciBmYWlsdXJlIHdpdGggaW52YWxpZCByc3QgaW4gZGVzY3JpcHRpb24uCi0gIFBhdGNoIGJ5IEp1bGllbiBDb3VydGVhdSBhbmQgUGllcnJlIFBhdWwgTGVmZWJ2cmUuCi0KLS0gSXNzdWUgIzEzNTEyOiBDcmVhdGUgfi8ucHlwaXJjIHNlY3VyZWx5IChDVkUtMjAxMS00OTQ0KS4gIEluaXRpYWwgcGF0Y2ggYnkKLSAgUGhpbGlwIEplbnZleSwgdGVzdGVkIGJ5IE1hZ2VpYSBhbmQgRGViaWFuLgotCi0tIElzc3VlICM3NzE5OiBNYWtlIGRpc3R1dGlscyBpZ25vcmUgYGAubmZzKmBgIGZpbGVzIGluc3RlYWQgb2YgY2hva2luZyBsYXRlcgotICBvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2lsZW50R2hvc3QgYW5kIEplZmYgUmFtbmFuaS4KLQotLSBJc3N1ZSAjMTMxMjA6IEFsbG93IHRvIGNhbGwgcGRiLnNldF90cmFjZSgpIGZyb20gdGhyZWFkLgotICBQYXRjaCBieSBJbHlhIFNhbmRsZXIuCi0KLS0gSXNzdWUgIzE2NTg1OiBNYWtlIENKSyBlbmNvZGVycyBzdXBwb3J0IGVycm9yIGhhbmRsZXJzIHRoYXQgcmV0dXJuIGJ5dGVzIHBlcgotICBQRVAgMzgzLgotCi0tIElzc3VlICMxMDE4MjogVGhlIHJlIG1vZHVsZSBkb2Vzbid0IHRydW5jYXRlIGluZGljZXMgdG8gMzIgYml0cyBhbnltb3JlLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjU3MzogSW4gMnRvMywgdHJlYXQgZW51bWVyYXRlKCkgbGlrZSBhIGNvbnN1bWluZyBjYWxsLCBzbyBzdXBlcmZsdW91cwotICBsaXN0KCkgY2FsbHMgYXJlbid0IGFkZGVkIHRvIGZpbHRlcigpLCBtYXAoKSwgYW5kIHppcCgpIHdoaWNoIGFyZSBkaXJlY3RseQotICBwYXNzZWQgZW51bWVyYXRlKCkuCi0KLS0gSXNzdWUgIzEyODQ4OiBUaGUgcHVyZSBQeXRob24gcGlja2xlIGltcGxlbWVudGF0aW9uIG5vdyB0cmVhdHMgb2JqZWN0Ci0gIGxlbmd0aHMgYXMgdW5zaWduZWQgMzItYml0IGludGVnZXJzLCBsaWtlIHRoZSBDIGltcGxlbWVudGF0aW9uIGRvZXMuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NDA4OiBGaXggZmlsZSBkZXNjcmlwdG9ycyBub3QgYmVpbmcgY2xvc2VkIGluIGVycm9yIGNvbmRpdGlvbnMKLSAgaW4gdGhlIHppcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0ODE6IG11bHRpcHJvY2Vzc2luZyBubyBsb25nZXIgbGVha3MgcHJvY2VzcyBoYW5kbGVzIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2MTQwOiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGRvdWJsZSBjbG9zZXMgaXRzIGNoaWxkCi0gIHN1YnByb2Nlc3MuUElQRSBwYXJlbnQgZmlsZSBkZXNjcmlwdG9ycyBvbiBjaGlsZCBlcnJvciBwcmlvciB0byBleGVjKCkuCi0KLS0gUmVtb3ZlIGEgYmFyZSBwcmludCB0byBzdGRvdXQgZnJvbSB0aGUgc3VicHJvY2VzcyBtb2R1bGUgdGhhdCBjb3VsZCBoYXZlCi0gIGhhcHBlbmVkIGlmIHRoZSBjaGlsZCBwcm9jZXNzIHdyb3RlIGdhcmJhZ2UgdG8gaXRzIHByZS1leGVjIGVycm9yIHBpcGUuCi0KLS0gSXNzdWUgIzE2MzI3OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGxlYWtzIGZpbGUgZGVzY3JpcHRvcnMKLSAgdXNlZCBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciBwaXBlcyB0byB0aGUgY2hpbGQgd2hlbiBmb3JrKCkgZmFpbHMuCi0KLS0gSXNzdWUgIzE0Mzk2OiBIYW5kbGUgdGhlIG9kZCByYXJlIGNhc2Ugb2Ygd2FpdHBpZCByZXR1cm5pbmcgMCB3aGVuIG5vdAotICBleHBlY3RlZCBpbiBzdWJwcm9jZXNzLlBvcGVuLndhaXQoKS4KLQotLSBJc3N1ZSAjMTY0MTE6IEZpeCBhIGJ1ZyB3aGVyZSB6bGliLmRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG1pZ2h0IHRyeSB0byBhY2Nlc3MKLSAgcHJldmlvdXNseS1mcmVlZCBtZW1vcnkuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MzU3OiBmaXggY2FsbGluZyBhY2NlcHQoKSBvbiBhIFNTTFNvY2tldCBjcmVhdGVkIHRocm91Z2gKLSAgU1NMQ29udGV4dC53cmFwX3NvY2tldCgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgSmVmZiBNY05laWwuCi0KLS0gSXNzdWUgIzE2NDA5OiBUaGUgcmVwb3J0aG9vayBjYWxsYmFjayBtYWRlIGJ5IHRoZSBsZWdhY3kKLSAgdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUgQVBJIG5vdyBwcm9wZXJseSBzdXBwbGllcyBhIGNvbnN0YW50IG5vbi16ZXJvCi0gIGJsb2NrX3NpemUgYXMgaXQgZGlkIGluIFB5dGhvbiAzLjIgYW5kIDIuNy4gIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YKLSAgdXJsbGliLnJlcXVlc3QuVVJMb3BlbmVyLnJldHJpZXZlLgotCi0tIElzc3VlICMxNjQzMTogVXNlIHRoZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4gY29uc3RydWN0aW5nIGEgRGVjaW1hbCBzdWJ0eXBlCi0gIGZyb20gYSBEZWNpbWFsIGFyZ3VtZW50LgotCi0tIElzc3VlICMxNjM1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBhY2N1bXVsYXRlcyBkYXRhIGZyb20KLSAgc3VjY2Vzc2l2ZSBjYWxscyBhZnRlciBFT0YgaW4gdW51c2VkX2RhdGEsIGluc3RlYWQgb2Ygb25seSBzYXZpbmcgdGhlIGFyZ3VtZW50Ci0gIHRvIHRoZSBsYXN0IGNhbGwuIGRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG5vdyBjb3JyZWN0bHkgc2V0cyB1bnVzZWRfZGF0YSBhbmQKLSAgdW5jb25zdW1lZF90YWlsLiBBIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTWVtb3J5RXJyb3Igd2hlbiBzZXR0aW5nIHRoZQotICB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlIGhhcyBhbHNvIGJlZW4gZml4ZWQuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzEyNzU5OiBzcmVfcGFyc2Ugbm93IHJhaXNlcyBhIHByb3BlciBlcnJvciB3aGVuIHRoZSBuYW1lIG9mIHRoZSBncm91cAotICBpcyBtaXNzaW5nLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjE1MjogZml4IHRva2VuaXplIHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hlbgotICBubyBuZXdsaW5lIGlzIGZvdW5kLiAgUGF0Y2ggYnkgTmVkIEJhdGNoZWxkZXIuCi0KLS0gSXNzdWUgIzE2MjMwOiBGaXggYSBjcmFzaCBpbiBzZWxlY3Quc2VsZWN0KCkgd2hlbiBvbmUgdGhlIGxpc3RzIGNoYW5nZXMKLSAgc2l6ZSB3aGlsZSBpdGVyYXRlZCBvbi4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MjI4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgd2hlcmUgYSBsaXN0IGNoYW5nZXMgc2l6ZQotICB3aGlsZSBpdCBpcyBiZWluZyBlbmNvZGVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTQ4OTc6IEVuaGFuY2UgZXJyb3IgbWVzc2FnZXMgb2Ygc3RydWN0LnBhY2sgYW5kCi0gIHN0cnVjdC5wYWNrX2ludG8uIFBhdGNoIGJ5IE1hdHRpIE3DpGtpLgotCi0tIElzc3VlICMxMjg5MDogY2dpdGIgbm8gbG9uZ2VyIHByaW50cyBzcHVyaW91cyA8cD4gdGFncyBpbiB0ZXh0Ci0gIG1vZGUgd2hlbiB0aGUgbG9nZGlyIG9wdGlvbiBpcyBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzE2MzA3OiBGaXggbXVsdGlwcm9jZXNzaW5nLlBvb2wubWFwX2FzeW5jIG5vdCBjYWxsaW5nIGl0cyBjYWxsYmFja3MuCi0gIFBhdGNoIGJ5IEphbm5lIEthcmlsYS4KLQotLSBJc3N1ZSAjMTYyNTA6IEZpeCBVUkxFcnJvciBpbnZvY2F0aW9uIHdpdGggcHJvcGVyIGFyZ3MuCi0KLS0gSXNzdWUgIzE2MTE2OiBGaXggaW5jbHVkZSBhbmQgbGlicmFyeSBwYXRocyB0byBiZSBjb3JyZWN0IHdoZW4gYnVpbGRpbmcgQwotICBleHRlbnNpb25zIGluIHZlbnZzLgotCi0tIElzc3VlICMxNjI0NTogRml4IHRoZSB2YWx1ZSBvZiBhIGZldyBlbnRpdGllcyBpbiBodG1sLmVudGl0aWVzLmh0bWw1LgotCi0tIElzc3VlICMxNDM5ODogRml4IHNpemUgdHJ1bmNhdGlvbiBhbmQgb3ZlcmZsb3cgYnVncyBpbiB0aGUgYnoyIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTYyMjA6IHdzZ2lyZWYgbm93IGFsd2F5cyBjYWxscyBjbG9zZSgpIG9uIGFuIGl0ZXJhYmxlIHJlc3BvbnNlLgotICBQYXRjaCBieSBCcmVudCBUdWJicy4KLQotLSBJc3N1ZSAjMTYyNzA6IHVybGxpYiBtYXkgaGFuZyB3aGVuIHVzZWQgZm9yIHJldHJpZXZpbmcgZmlsZXMgdmlhIEZUUCBieSB1c2luZwotICBhIGNvbnRleHQgbWFuYWdlci4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnLgotCi0tIElzc3VlICMxNjQ2MTogV2F2ZSBsaWJyYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCA0R0Igd2F2IGZpbGVzLAotICBhbmQgc2FtcGxlIHJhdGUgb2YgNDQxMDAgSHouCi0KLS0gSXNzdWUgIzE2MTc2OiBQcm9wZXJseSBpZGVudGlmeSBXaW5kb3dzIDggdmlhIHBsYXRmb3JtLnBsYXRmb3JtKCkKLQotLSBJc3N1ZSAjMTYxMTQ6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgcHJvdmlkZXMgYSBtaXNsZWFkaW5nIGVycm9yCi0gIG1lc3NhZ2Ugc3RhdGluZyB0aGF0IGFyZ3NbMF0gZGlkIG5vdCBleGlzdCB3aGVuIGVpdGhlciB0aGUgY3dkIG9yIGV4ZWN1dGFibGUKLSAga2V5d29yZCBhcmd1bWVudHMgc3BlY2lmaWVkIGEgcGF0aCB0aGF0IGRpZCBub3QgZXhpc3QuCi0KLS0gSXNzdWUgIzE2MTY5OiBGaXggY3R5cGVzLldpbkVycm9yKCkncyBjb25mdXNpb24gYmV0d2VlbiBlcnJubyBhbmQgd2luZXJyb3IuCi0KLS0gSXNzdWUgIzE2MDc2OiBNYWRlIF9lbGVtZW50dHJlZS5FbGVtZW50IHBpY2tsZWFibGUgaW4gYSB3YXkgdGhhdCBpcyBjb21wYXRpYmxlCi0gIHdpdGggdGhlIFB5dGhvbiBFbGVtZW50LiBQaWNrbGluZy91bnBpY2tsaW5nIG9mIHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Ci0gIHdvcmtzIGFnYWluIC0gdGhpcyB3YXMgYSB0ZW1wb3JhcnkgcmVncmVzc2lvbiBmcm9tIDMuMiB3aGVyZSB0aGUgYnktZGVmYXVsdAotICBpbXBvcnRlZCBfZWxlbWVudHRyZWUgaGFkIG5vIHBpY2tsaW5nIGNhcGFiaWxpdHkuCi0KLS0gSXNzdWUgIzE2MDg5OiBBbGxvdyBFbGVtZW50VHJlZS5UcmVlQnVpbGRlciB0byB3b3JrIGFnYWluIHdpdGggYSBub24tRWxlbWVudAotICBlbGVtZW50X2ZhY3RvcnkgKGZpeGVzIGEgcmVncmVzc2lvbiBpbiBTaW1wbGVUQUwpLgotCi0tIElzc3VlICMxNjkxMzogRml4IEVsZW1lbnQuaXRlcnRleHQoKSdzIGhhbmRsaW5nIG9mIHRleHQgd2l0aCBYTUwgZW50aXRpZXMuLAotCi0tIElzc3VlICMxNjAzNDogRml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGluIHRoZSBuZXcgYGJ6Mi5CWjJGaWxlYAotICBpbXBsZW1lbnRhdGlvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYxMTI6IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSBkb2VzIG5vdCBjb3JyZWN0bHkgZXNjYXBlIGFyZ3VtZW50IHRvCi0gIC91c3IvYmluL2ZpbGUuICBQYXRjaCBieSBEYXZpZCBCZW5qYW1pbi4KLQotLSBJc3N1ZSAjMTU3NTY6IGBzdWJwcm9jZXNzLnBvbGwoKWAgbm93IHByb3Blcmx5IGhhbmRsZXMgYGVycm5vLkVDSElMRGAgdG8KLSAgcmV0dXJuIGEgcmV0dXJuY29kZSBvZiAwIHdoZW4gdGhlIGNoaWxkIGhhcyBhbHJlYWR5IGV4aXRlZCBvciBjYW5ub3QgYmUgd2FpdGVkCi0gIG9uLgotCi0tIElzc3VlICMxNTMyMzogSW1wcm92ZSBmYWlsdXJlIG1lc3NhZ2Ugb2YgYE1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKWAuCi0KLS0gSXNzdWUgIzE2MDY0OiBgYHVuaXR0ZXN0IC1tYGAgY2xhaW1zIGV4ZWN1dGFibGUgaXMgInB5dGhvbiIsIG5vdCAicHl0aG9uMyIuCi0KLS0gSXNzdWUgIzEyMzc2OiBQYXNzIG9uIHBhcmFtZXRlcnMgaW4gYFRleHRUZXN0UmVzdWx0Ll9faW5pdF9fKClgIHN1cGVyIGNhbGwuCi0KLS0gSXNzdWUgIzE1MjIyOiBJbnNlcnQgYmxhbmsgbGluZSBhZnRlciBlYWNoIG1lc3NhZ2UgaW4gbWJveCBtYWlsYm94ZXMuCi0KLS0gSXNzdWUgIzE2MDEzOiBGaXggYGNzdi5SZWFkZXJgIHBhcnNpbmcgaXNzdWUgd2l0aCBlbmRpbmcgcXVvdGUgY2hhcmFjdGVycy4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU0MjE6IEZpeCBhbiBPdmVyZmxvd0Vycm9yIGluIGBDYWxlbmRhci5pdGVybW9udGhkYXRlcygpYCBhZnRlcgotICBgZGF0ZXRpbWUuTUFYWUVBUmAuICBQYXRjaCBieSBDw6lkcmljIEtyaWVyLgotCi0tIElzc3VlICMxNTk3MDogYHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgbm93IHNlcmlhbGl6ZXMgY29ycmVjdGx5IHRoZSBlbXB0eSBIVE1MCi0gIGVsZW1lbnRzICdtZXRhJyBhbmQgJ3BhcmFtJy4KLQotLSBJc3N1ZSAjMTU4NDI6IFRoZSBgU29ja2V0SU8ue3JlYWRhYmxlLHdyaXRhYmxlLHNlZWthYmxlfWAgbWV0aG9kcyBub3cgcmFpc2UKLSAgVmFsdWVFcnJvciB3aGVuIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCi0KLS0gSXNzdWUgIzE1ODc2OiBGaXggYSByZWZsZWFrIGluIHRoZSBgY3Vyc2VzYCBtb2R1bGU6IHdpbmRvdy5lbmNvZGluZy4KLQotLSBJc3N1ZSAjMTU4ODE6IEZpeCBgYXRleGl0YCBob29rIGluIGBtdWx0aXByb2Nlc3NpbmdgLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXMKLSAgTWNEb25vdWdoLgotCi0tIElzc3VlICMxNTg0MTogVGhlIHJlYWRhYmxlKCksIHdyaXRhYmxlKCkgYW5kIHNlZWthYmxlKCkgbWV0aG9kcyBvZgotICBgaW8uQnl0ZXNJT2AgYW5kIGBpby5TdHJpbmdJT2Agb2JqZWN0cyBub3cgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBvYmplY3QKLSAgaGFzIGJlZW4gY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KLQotLSBJc3N1ZSAjMTU0NDc6IFVzZSBgc3VicHJvY2Vzcy5ERVZOVUxMYCBpbiB3ZWJicm93c2VyLCBpbnN0ZWFkIG9mIG9wZW5pbmcKLSAgYG9zLmRldm51bGxgIGV4cGxpY2l0bHkgYW5kIGxlYXZpbmcgaXQgb3Blbi4KLQotLSBJc3N1ZSAjMTU1MDk6IGB3ZWJicm93c2VyLlVuaXhCcm93c2VyYCBubyBsb25nZXIgcGFzc2VzIGVtcHR5IGFyZ3VtZW50cyB0bwotICBQb3BlbiB3aGVuIGBgJWFjdGlvbmBgIHN1YnN0aXR1dGlvbnMgcHJvZHVjZSBlbXB0eSBzdHJpbmdzLgotCi0tIElzc3VlICMxMjc3NiwgaXNzdWUgIzExODM5OiBDYWxsIGBhcmdwYXJzZWAgdHlwZSBmdW5jdGlvbiAoc3BlY2lmaWVkIGJ5Ci0gIGFkZF9hcmd1bWVudCkgb25seSBvbmNlLiAgQmVmb3JlLCB0aGUgdHlwZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHR3aWNlIGluIHRoZQotICBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IHdhcyBzcGVjaWZpZWQgYW5kIHRoZSBhcmd1bWVudCB3YXMgZ2l2ZW4gYXMgd2VsbC4gIFRoaXMKLSAgd2FzIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHRoZSBGaWxlVHlwZSB0eXBlLCBhcyBhIGRlZmF1bHQgZmlsZSB3b3VsZAotICBhbHdheXMgYmUgb3BlbmVkLCBldmVuIGlmIGEgZmlsZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0KLS0gSXNzdWUgIzE1OTA2OiBGaXggYSByZWdyZXNzaW9uIGluIGBhcmdwYXJzZWAgY2F1c2VkIGJ5IHRoZSBwcmVjZWRpbmcgY2hhbmdlLAotICB3aGVuIGBgYWN0aW9uPSdhcHBlbmQnYGAsIGBgdHlwZT0nc3RyJ2BgIGFuZCBgYGRlZmF1bHQ9W11gYC4KLQotSURMRQotLS0tLQotCi0tIElzc3VlICMxNzExNDogSURMRSBub3cgdXNlcyBub24tc3RyaWN0IGNvbmZpZyBwYXJzZXIuCi0KLS0gSXNzdWUgIzkyOTA6IEluIElETEUgdGhlIHN5cy5zdGQqIHN0cmVhbXMgbm93IGltcGxlbWVudCBpby5UZXh0SU9CYXNlCi0gIGludGVyZmFjZSBhbmQgc3VwcG9ydCBhbGwgbWFuZGF0b3J5IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuCi0KLS0gSXNzdWUgIzE2ODI5OiBJRExFIHByaW50aW5nIG5vIGxvbmdlciBmYWlscyBpZiB0aGVyZSBhcmUgc3BhY2VzIG9yIG90aGVyCi0gIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBwYXRoLgotCi0tIElzc3VlICMxNjQ5MTogSURMRSBub3cgcHJpbnRzIGNoYWluZWQgZXhjZXB0aW9uIHRyYWNlYmFja3MuCi0KLS0gSXNzdWUgIzE2ODE5OiBJRExFIG1ldGhvZCBjb21wbGV0aW9uIG5vdyBjb3JyZWN0bHkgd29ya3MgZm9yIGJ5dGVzIGxpdGVyYWxzLgotCi0tIElzc3VlICMxNjUwNDogSURMRSBub3cgY2F0Y2hlcyBTeW50YXhFcnJvcnMgcmFpc2VkIGJ5IHRva2VuaXplci4gUGF0Y2ggYnkKLSAgUm9nZXIgU2Vyd3kuCi0KLS0gSXNzdWUgIzE2NTExOiBVc2UgZGVmYXVsdCBJRExFIHdpZHRoIGFuZCBoZWlnaHQgaWYgY29uZmlnIHBhcmFtIGlzIG5vdCB2YWxpZC4KLSAgUGF0Y2ggU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTIwNzU4OTogQWRkIEN1dC9Db3B5L1Bhc3RlIGl0ZW1zIHRvIElETEUgcmlnaHQgY2xpY2sgQ29udGV4dCBNZW51Ci0gIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgotCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzExOTk1OiB0ZXN0X3B5ZG9jIGRvZXNuJ3QgaW1wb3J0IGFsbCBzeXMucGF0aCBtb2R1bGVzIGFueW1vcmUuCiAKIC0gSXNzdWUgIzE3NDQ4OiB0ZXN0X3NheCBub3cgc2tpcHMgaWYgdGhlcmUgYXJlIG5vIHhtbCBwYXJzZXJzIGF2YWlsYWJsZQogICBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gSW1wb3J0RXJyb3IuCkBAIC0xNzMyLDggKzI4NjksMTUgQEAKIAogLSBJc3N1ZSAjMTM4OTg6IHRlc3Rfc3NsIG5vIGxvbmdlciBwcmludHMgYSBzcHVyaW91cyBzdGFjayB0cmFjZSBvbiBVYnVudHUuCiAKKy0gSXNzdWUgIzE3MjgzOiBTaGFyZSBjb2RlIGJldHdlZW4gYF9fbWFpbl9fLnB5YCBhbmQgYHJlZ3J0ZXN0LnB5YCBpbgorICBgTGliL3Rlc3RgLgorCiAtIElzc3VlICMxNzI0OTogY29udmVydCBhIHRlc3QgaW4gdGVzdF9jYXBpIHRvIHVzZSB1bml0dGVzdCBhbmQgcmVhcCB0aHJlYWRzLgogCistIElzc3VlICMxNzEwNzogVGVzdCBjbGllbnQtc2lkZSBTTkkgc3VwcG9ydCBpbiB1cmxsaWIucmVxdWVzdCB0aGFua3MgdG8KKyAgdGhlIG5ldyBzZXJ2ZXItc2lkZSBTTkkgc3VwcG9ydCBpbiB0aGUgc3NsIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgRGFuaWVsIEJsYWNrLgorCiAtIElzc3VlICMxNzA0MTogRml4IHRlc3Rpbmcgd2hlbiBQeXRob24gaXMgY29uZmlndXJlZCB3aXRoIHRoZQogICAtLXdpdGhvdXQtZG9jLXN0cmluZ3MuCiAKQEAgLTE3NDEsNiArMjg4NSw4IEBACiAKIC0gSXNzdWUgIzE1NTM5OiBBZGRlZCByZWdyZXNzaW9uIHRlc3RzIGZvciBUb29scy9zY3JpcHRzL3BpbmRlbnQucHkuCiAKKy0gSXNzdWUgIzE2ODM2OiBFbmFibGUgSVB2NiBzdXBwb3J0IGV2ZW4gaWYgSVB2NiBpcyBkaXNhYmxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKwogLSBJc3N1ZSAjMTc0Nzk6IHRlc3RfaW8gbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtMTgwMCw2ICsyOTQ2LDExIEBACiAKIC0gSXNzdWUgIzE2NzQ4OiB0ZXN0X2hlYXBxIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogCistIElzc3VlICMxMDY0NjogVGVzdHMgcmVhcnJhbmdlZCBmb3Igb3Muc2FtZWZpbGUvc2FtZXN0YXQgdG8gY2hlY2sgZm9yIG5vdAorICBqdXN0IHN5bWxpbmtzIGJ1dCBhbHNvIGhhcmQgbGlua3MuCisKKy0gSXNzdWUgIzE1MzAyOiBTd2l0Y2ggcmVncnRlc3QgZnJvbSB1c2luZyBnZXRvcHQgdG8gdXNpbmcgYXJncGFyc2UuCisKIC0gSXNzdWUgIzE1MzI0OiBGaXggcmVncnRlc3QgcGFyc2luZyBvZiAtLWZyb21maWxlLCAtLW1hdGNoLCBhbmQgLS1yYW5kb21pemUKICAgb3B0aW9ucy4KIApAQCAtMTgwOSw2ICsyOTYwLDkgQEAKIC0gSXNzdWUgIzE2NjY0OiBBZGQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgZ2xvYidzIGJlaGF2aW91ciBjb25jZXJuaW5nIGVudHJpZXMKICAgc3RhcnRpbmcgd2l0aCBhICIuIi4gIFBhdGNoIGJ5IFNlYmFzdGlhbiBLcmVmdC4KIAorLSBJc3N1ZSAjMTMzOTA6IFRoZSBgYC1SYGAgb3B0aW9uIHRvIHJlZ3J0ZXN0IG5vdyBhbHNvIGNoZWNrcyBmb3IgbWVtb3J5CisgIGFsbG9jYXRpb24gbGVha3MsIHVzaW5nIDpmdW5jOmBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKClgLgorCiAtIElzc3VlICMxNjU1OTogQWRkIG1vcmUgdGVzdHMgZm9yIHRoZSBqc29uIG1vZHVsZSwgaW5jbHVkaW5nIHNvbWUgZnJvbSB0aGUKICAgb2ZmaWNpYWwgdGVzdCBzdWl0ZSBhdCBqc29uLm9yZy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKQEAgLTE4MjcsNyArMjk4MSw3IEBACiAtIElzc3VlICMxNTgwMjogRml4IHRlc3QgbG9naWMgaW4gYFRlc3RNYWlsZGlyLnRlc3RfY3JlYXRlX3RtcCgpYC4gUGF0Y2ggYnkKICAgU2VyaGl5IFN0b3JjaGFrYS4KIAotLSBJc3N1ZSAjMTU1NTc6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBgd2ViYnJvd3NlcmAgbW9kdWxlLCB0aGFua3MgdG8gQW50b24KKy0gSXNzdWUgIzE1NTU3OiBBZGRlZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSB3ZWJicm93c2VyIG1vZHVsZSwgdGhhbmtzIHRvIEFudG9uCiAgIEJhcmtvdnNreS4KIAogLSBJc3N1ZSAjMTY2OTg6IFNraXAgcG9zaXggdGVzdF9nZXRncm91cHMgd2hlbiBidWlsdCB3aXRoIE9TIFgKQEAgLTE4MzYsNiArMjk5MCwzMCBAQAogQnVpbGQKIC0tLS0tCiAKKy0gSXNzdWUgIzE2MDY3OiBBZGQgZGVzY3JpcHRpb24gaW50byBNU0kgZmlsZSB0byByZXBsYWNlIGluc3RhbGxlcidzCisgIHRlbXBvcmFyeSBuYW1lLgorCistIElzc3VlICMxODI1NzogRml4IHJlYWRsaW5rIHVzYWdlIGluIHB5dGhvbi1jb25maWcuICBJbnN0YWxsIHRoZSBweXRob24KKyAgdmVyc2lvbiBhZ2FpbiBvbiBEYXJ3aW4uCisKKy0gSXNzdWUgIzE4NDgxOiBBZGQgQyBjb3ZlcmFnZSByZXBvcnRpbmcgd2l0aCBnY292IGFuZCBsY292LiBBIG5ldyBtYWtlIHRhcmdldAorICAiY292ZXJhZ2UtcmVwb3J0IiBjcmVhdGVzIGFuIGluc3RydW1lbnRlZCBQeXRob24gYnVpbGQsIHJ1bnMgdW5pdCB0ZXN0cworICBhbmQgY3JlYXRlcyBhIEhUTUwuIFRoZSByZXBvcnQgY2FuIGJlIHVwZGF0ZWQgd2l0aCAibWFrZSBjb3ZlcmFnZS1sY292Ii4KKworLSBJc3N1ZSAjMTc4NDU6IENsYXJpZmllZCB0aGUgbWVzc2FnZSBwcmludGVkIHdoZW4gc29tZSBtb2R1bGUgYXJlIG5vdCBidWlsdC4KKworLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5CisgIERhdmlkIEVkZWxzb2huLgorCistIElzc3VlICMxNzU0NzogSW4gY29uZmlndXJlLCBleHBsaWNpdGx5IHBhc3MgLVdmb3JtYXQgZm9yIHRoZSBiZW5lZml0IGZvciBHQ0MKKyAgNC44LgorCistIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQorICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzU5MTogVXNlIGxvd2VyY2FzZSBmaWxlbmFtZXMgd2hlbiBpbmNsdWRpbmcgV2luZG93cyBoZWFkZXIgZmlsZXMuCisgIFBhdGNoIGJ5IFJvdW1lbiBQZXRyb3YuCisKIC0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgogCiAtIElzc3VlICMxNzQyNTogQnVpbGQgd2l0aCBvcGVuc3NsIDEuMC4xZCBvbiBXaW5kb3dzLgpAQCAtMTg1MSw2ICszMDI5LDEwIEBACiAKIC0gSXNzdWUgIzM3MTg6IFVzZSBBQ19BUkdfVkFSIHRvIHNldCBNQUNIREVQIGluIGNvbmZpZ3VyZS5hYy4KIAorLSBJc3N1ZSAjMTYyMzU6IEltcGxlbWVudCBweXRob24tY29uZmlnIGFzIGEgc2hlbGwgc2NyaXB0LgorCistIElzc3VlICMxNjc2OTogUmVtb3ZlIG91dGRhdGVkIFZpc3VhbCBTdHVkaW8gcHJvamVjdHMuCisKIC0gSXNzdWUgIzE3MDMxOiBGaXggcnVubmluZyByZWdlbiBpbiBjcm9zcyBidWlsZHMuCiAKIC0gSXNzdWUgIzM3NTQ6IGZpeCB0eXBvIGluIHB0aHJlYWQgQUNfQ0FDSEVfVkFMLgpAQCAtMTg1OCwxMiArMzA0MCwxNCBAQAogLSBJc3N1ZSAjMTU0ODQ6IEZpeCBfUFlUSE9OX1BST0pFQ1RfQkFTRSBmb3Igc3JjZGlyICE9IGJ1aWxkZGlyIGJ1aWxkczsKICAgdXNlIF9QWVRIT05fUFJPSkVDVF9CQVNFIGluIGRpc3R1dGlscy9zeXNjb25maWcucHkuCiAKKy0gRHJvcCBzdXBwb3J0IGZvciBXaW5kb3dzIDIwMDAuCisKIC0gSXNzdWUgIzE3MDI5OiBMZXQgaDJweSBzZWFyY2ggdGhlIG11bHRpYXJjaCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCiAKIC0gSXNzdWUgIzE2OTUzOiBGaXggc29ja2V0IG1vZHVsZSBjb21waWxhdGlvbiBvbiBwbGF0Zm9ybXMgd2l0aAogICBIQVZFX0JST0tFTl9QT0xMLiBQYXRjaCBieSBKZWZmcmV5IEFybXN0cm9uZy4KIAotLSBJc3N1ZSAjMTY4MzY6IEVuYWJsZSBJUHY2IHN1cHBvcnQgZXZlbiBpZiBJUHY2IGlzIGRpc2FibGVkIG9uIHRoZSBidWlsZCBob3N0LgorLSBJc3N1ZSAjMTYzMjA6IFJlbW92ZSByZWR1bmRhbnQgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciBzdHJpbmdzIGFuZCBieXRlcy4KIAogLSBDcm9zcyBjb21waWxpbmcgbmVlZHMgaG9zdCBhbmQgYnVpbGQgc2V0dGluZ3MuIGNvbmZpZ3VyZSBubyBsb25nZXIKICAgY3JlYXRlcyBhIGJyb2tlbiBQWVRIT05fRk9SX0JVSUxEIHZhcmlhYmxlIHdoZW4gLS1idWlsZCBpcyBtaXNzaW5nLgpAQCAtMTg4NSw2ICszMDY5LDggQEAKIC0gSXNzdWUgIzE1OTIzOiBGaXggYSBtaXN0YWtlIGluIGBgYXNkbF9jLnB5YGAgdGhhdCByZXN1bHRlZCBpbiBhIFR5cGVFcnJvcgogICBhZnRlciAyODAxYmY4NzVhMjQgKHNlZSAjMTU4MDEpLgogCistIElzc3VlICMxNjEzNTogUmVtb3ZlIE9TLzIgc3VwcG9ydC4KKwogLSBJc3N1ZSAjMTU4MTk6IE1ha2Ugc3VyZSB3ZSBjYW4gYnVpbGQgUHl0aG9uIG91dC1vZi10cmVlIGZyb20gYSByZWFkLW9ubHkKICAgc291cmNlIGRpcmVjdG9yeS4gIChTb21ld2hhdCByZWxhdGVkIHRvIGlzc3VlICM5ODYwLikKIApAQCAtMTg5NywxMSArMzA4Myw1NCBAQAogQy1BUEkKIC0tLS0tCiAKKy0gSXNzdWUgIzE4MzUxOiBGaXggdmFyaW91cyBpc3N1ZXMgaW4gYSBmdW5jdGlvbiBpbiBpbXBvcnRsaWIgcHJvdmlkZWQgdG8gaGVscAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSAoYW5kIHRodXMgYnkgZXh0ZW5zaW9uCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKCkgYW5kIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoKSkuCisKKy0gSXNzdWUgIzkzNjk6IFRoZSB0eXBlcyBvZiBgY2hhcipgIGFyZ3VtZW50cyBvZiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKSBhbmQKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZCgpIG5vdyBjaGFuZ2VkIHRvIGBjb25zdCBjaGFyKmAuICBCYXNlZCBvbiBwYXRjaGVzIGJ5CisgIErDtnJnIE3DvGxsZXIgYW5kIExhcnMgQnVpdGluY2suCisKKy0gSXNzdWUgIzE3MjA2OiBQeV9DTEVBUigpLCBQeV9ERUNSRUYoKSwgUHlfWElOQ1JFRigpIGFuZCBQeV9YREVDUkVGKCkgbm93CisgIGV4cGFuZCB0aGVpciBhcmd1bWVudHMgb25jZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRpbWVzLiAgUGF0Y2ggd3JpdHRlbiBieSBJbGxpYQorICBQb2xvc3VraGluLgorCistIElzc3VlICMxNzUyMjogQWRkIHRoZSBQeUdJTFN0YXRlX0NoZWNrKCkgQVBJLgorCistIElzc3VlICMxNzMyNzogQWRkIFB5RGljdF9TZXREZWZhdWx0LgorCiAtIElzc3VlICMxNjg4MTogRml4IFB5X0FSUkFZX0xFTkdUSCBtYWNybyBmb3IgR0NDIDwgMy4xLgogCistIElzc3VlICMxNjUwNTogUmVtb3ZlIHVudXNlZCBQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUy4KKworLSBJc3N1ZSAjMTYwODY6IFB5VHlwZU9iamVjdC50cF9mbGFncyBhbmQgUHlUeXBlX1NwZWMuZmxhZ3MgYXJlIG5vdyB1bnNpZ25lZAorICAodW5zaWduZWQgbG9uZyBhbmQgdW5zaWduZWQgaW50KSB0byBhdm9pZCBhbiB1bmRlZmluZWQgYmVoYXZpb3VyIHdpdGgKKyAgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICgoMSA8PCAzMSkuIFB5VHlwZV9HZXRGbGFncygpIHJlc3VsdCB0eXBlIGlzCisgIG5vdyB1bnNpZ25lZCB0b28gKHVuc2lnbmVkIGxvbmcsIGluc3RlYWQgb2YgbG9uZykuCisKKy0gSXNzdWUgIzE2MTY2OiBBZGQgUFlfTElUVExFX0VORElBTiBhbmQgUFlfQklHX0VORElBTiBtYWNyb3MgYW5kIHVuaWZpZWQKKyAgZW5kaWFubmVzcyBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nLgorCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzE3NzAxOiBJbXByb3Zpbmcgc3RyZnRpbWUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTg0NDA6IENsYXJpZnkgdGhhdCBgaGFzaCgpYCBjYW4gdHJ1bmNhdGUgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4KKyAgb2JqZWN0J3MgY3VzdG9tIGBfX2hhc2hfXygpYCBtZXRob2QuCisKKy0gSXNzdWUgIzE3ODQ0OiBBZGQgbGlua3MgdG8gZW5jb2RlcnMgYW5kIGRlY29kZXJzIGZvciBieXRlcy10by1ieXRlcyBjb2RlY3MuCisKKy0gSXNzdWUgIzE0MDk3OiBpbXByb3ZlIHRoZSAiaW50cm9kdWN0aW9uIiBwYWdlIG9mIHRoZSB0dXRvcmlhbC4KKworLSBJc3N1ZSAjMTc5Nzc6IFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgY2FkZWZhdWx0IGFyZ3VtZW50J3MgZGVmYXVsdCB2YWx1ZQorICBpbiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgaXMgZml4ZWQgdG8gbWF0Y2ggdGhlIGNvZGUuCisKKy0gSXNzdWUgIzY2OTY6IGFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgUHJvZmlsZSBvYmplY3RzLCBhbmQgaW1wcm92ZQorICBwcm9maWxlL2NQcm9maWxlIGRvY3MuICBQYXRjaCBieSBUb20gUGluY2tuZXkuCisKKy0gSXNzdWUgIzE1OTQwOiBTcGVjaWZ5IGVmZmVjdCBvZiBsb2NhbGUgb24gdGltZSBmdW5jdGlvbnMuCisKIC0gSXNzdWUgMTc1Mzg6IERvY3VtZW50IFhNTCB2dWxuZXJhYmlsdGllcwogCiAtIElzc3VlICMxNjY0Mjogc2NoZWQuc2NoZWR1bGVyIHRpbWVmdW5jIGluaXRpYWwgZGVmYXVsdCBpcyB0aW1lLm1vbm90b25pYy4KQEAgLTE5NDYsOCArMzE3NSw4IEBACiAKIC0gSXNzdWUgIzEzNTM4OiBJbXByb3ZlIHN0cigpIGFuZCBvYmplY3QuX19zdHJfXygpIGRvY3VtZW50YXRpb24uCiAKLS0gSXNzdWUgIzE2NDg5OiBNYWtlIGl0IGNsZWFyZXIgdGhhdCBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSByZXF1aXJlcyBhbnkgYW5kCi0gIGFsbCBwYWNrYWdlcyB0byBiZSBzZXBhcmF0ZWx5IGltcG9ydGVkLgorLSBJc3N1ZSAjMTY0ODk6IE1ha2UgaXQgY2xlYXJlciB0aGF0IGltcG9ydGxpYi5maW5kX2xvYWRlcigpIG5lZWRzIHBhcmVudAorICBwYWNrYWdlcyB0byBiZSBleHBsaWNpdGx5IGltcG9ydGVkLgogCiAtIElzc3VlICMxNjQwMDogVXBkYXRlIHRoZSBkZXNjcmlwdGlvbiBvZiB3aGljaCB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UKICAgUHlQSSBkaXNwbGF5cy4KQEAgLTE5NzAsNiArMzE5OSw5IEBACiAtIElzc3VlICMxNjExNTogSW1wcm92ZSBzdWJwcm9jZXNzLlBvcGVuKCkgZG9jdW1lbnRhdGlvbiBhcm91bmQgYXJncywgc2hlbGwsCiAgIGFuZCBleGVjdXRhYmxlIGFyZ3VtZW50cy4KIAorLSBJc3N1ZSAjMTM0OTg6IENsYXJpZnkgZG9jcyBvZiBvcy5tYWtlZGlycygpJ3MgZXhpc3Rfb2sgYXJndW1lbnQuICBEb25lIHdpdGgKKyAgZ3JlYXQgbmF0aXZlLXNwZWFrZXIgaGVscCBmcm9tIFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTU1MzM6IENsYXJpZnkgZG9jcyBhbmQgYWRkIHRlc3RzIGZvciBgc3VicHJvY2Vzcy5Qb3BlbigpYCdzIGN3ZAogICBhcmd1bWVudC4KIApAQCAtMTk5MCw2ICszMjIyLDI3IEBACiBUb29scy9EZW1vcwogLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTg4MTc6IEZpeCBhIHJlc291cmNlIHdhcm5pbmcgaW4gTGliL2FpZmMucHkgZGVtby4gIFBhdGNoIGJ5CisgIFZhanJhc2t5IEtvay4KKworLSBJc3N1ZSAjMTg0Mzk6IE1ha2UgcGF0Y2hjaGVjayB3b3JrIG9uIFdpbmRvd3MgZm9yIEFDS1MsIE5FV1MuCisKKy0gSXNzdWUgIzE4NDQ4OiBGaXggYSB0eXBvIGluIFRvb2xzL2RlbW8vZWlmZmVsLnB5LgorCistIElzc3VlICMxODQ1NzogRml4ZWQgc2F2aW5nIG9mIGZvcm11bGFzIGFuZCBjb21wbGV4IG51bWJlcnMgaW4KKyAgVG9vbHMvZGVtby9zczEucHkuCisKKy0gSXNzdWUgIzE4NDQ5OiBNYWtlIFRvb2xzL2RlbW8vc3MxLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuICBQYXRjaCBieQorICBGw6l2cnkgVGhpYmF1bHQuCisKKy0gSXNzdWUgIzEyOTkwOiBUaGUgIlB5dGhvbiBMYXVuY2hlciIgb24gT1NYIGNvdWxkIG5vdCBsYXVuY2ggcHl0aG9uIHNjcmlwdHMKKyAgdGhhdCBoYXZlIHBhdGhzIHRoYXQgaW5jbHVkZSB3aWRlIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE1MjM5OiBNYWtlIG1rc3RyaW5ncHJlcC5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgorCistIElzc3VlICMxNzAyODogQWxsb3dlZCBQeXRob24gYXJndW1lbnRzIHRvIGJlIHN1cHBsaWVkIHRvIHRoZSBXaW5kb3dzCisgIGxhdW5jaGVyLgorCiAtIElzc3VlICMxNzE1NjogcHlnZXR0ZXh0LnB5IG5vdyB1c2VzIGFuIGVuY29kaW5nIG9mIHNvdXJjZSBmaWxlIGFuZCBjb3JyZWN0bHkKICAgd3JpdGVzIGFuZCBlc2NhcGVzIG5vbi1hc2NpaSBjaGFyYWN0ZXJzLgogCkBAIC0xOTk4LDkgKzMyNTEsMTggQEAKICAgaW1wcm9wZXIgaW5kZW50YXRpb24uICBwaW5kZW50LnB5IG5vdyB3b3JrcyB3aXRoIGNvbnRpbnVlZCBsaW5lcyBicm9rZW4gYWZ0ZXIKICAgImNsYXNzIiBvciAiZGVmIiBrZXl3b3JkcyBhbmQgd2l0aCBjb250aW51YXRpb25zIGF0IHRoZSBzdGFydCBvZiBsaW5lLgogCi0tIElzc3VlICMxNTM3ODogRml4IFRvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCistIElzc3VlICMxMTc5NzogQWRkIGEgMnRvMyBmaXhlciB0aGF0IG1hcHMgcmVsb2FkKCkgdG8gaW1wLnJlbG9hZCgpLgogCi0tIElzc3VlICMxNjQ3NjogRml4IGpzb24udG9vbCB0byBhdm9pZCBpbmNsdWRpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKy0gSXNzdWUgIzEwOTY2OiBSZW1vdmUgdGhlIGNvbmNlcHQgb2YgdW5leHBlY3RlZCBza2lwcGVkIHRlc3RzLgorCistIElzc3VlICM5ODkzOiBSZW1vdmVkIHRoZSBNaXNjL1ZpbSBkaXJlY3RvcnkuCisKKy0gUmVtb3ZlZCB0aGUgTWlzYy9UZXh0TWF0ZSBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE2MjQ1OiBBZGQgdGhlIFRvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgc2NyaXB0IHRvIHBhcnNlCisgIHRoZSBsaXN0IG9mIEhUTUw1IGVudGl0aWVzIGFuZCB1cGRhdGUgdGhlIGh0bWwuZW50aXRpZXMuaHRtbDUgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMTUzNzg6IEZpeCBUb29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgogCiAtIElzc3VlICMxNjU0OTogTWFrZSBqc29uLnRvb2wgd29yayBhZ2FpbiBvbiBQeXRob24gMyBhbmQgYWRkIHRlc3RzLgogICBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcgYW5kIFNlcmhpeSBTdG9yY2hha2EuCkBAIC0yMDA4LDYgKzMyNzAsMTIgQEAKIC0gSXNzdWUgIzEzMzAxOiB1c2UgYXN0LmxpdGVyYWxfZXZhbCgpIGluc3RlYWQgb2YgZXZhbCgpIGluIFRvb2xzL2kxOG4vbXNnZm10LnB5CiAgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKK1dpbmRvd3MKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg1Njk6IFRoZSBpbnN0YWxsZXIgbm93IGFkZHMgLnB5IHRvIHRoZSBQQVRIRVhUIHZhcmlhYmxlIHdoZW4gZXh0ZW5zaW9ucworICBhcmUgcmVnaXN0ZXJlZC4gUGF0Y2ggYnkgUGF1bCBNb29yZS4KKwogCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMD8KID09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjA5NSw2ICszMzYzLDkgQEAKIExpYnJhcnkKIC0tLS0tLS0KIAorLSBJc3N1ZSAjMTcxNTg6IEFkZCAnc3ltYm9scycgdG8gaGVscCgpIHdlbGNvbWUgbWVzc2FnZTsgY2xhcmlmeQorICAnbW9kdWxlcyBzcGFtJyBtZXNzYWdlcy4KKwogLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcyBhcwogICBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgogCkBAIC0yMTcwLDYgKzM0NDEsOCBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxMzI0ODogcmVtb3ZlZCBkZXByZWNhdGVkIGFuZCB1bmRvY3VtZW50ZWQgZGlmZmxpYi5pc2JqdW5rLCBpc2Jwb3B1bGFyLgorCiAtIElzc3VlICMxMzM3MDogRW5zdXJlIHRoYXQgY3R5cGVzIHdvcmtzIG9uIE1hYyBPUyBYIHdoZW4gUHl0aG9uIGlzIGNvbXBpbGVkCiAgIHVzaW5nIHRoZSBjbGFuZyBjb21waWxlci4KIApAQCAtMjU4NSw2ICszODU4LDEwIEBACiAtIElzc3VlICMxNTI1MDogRG9jdW1lbnQgdGhhdCBgZmlsZWNtcC5kaXJjbXAoKWAgY29tcGFyZXMgZmlsZXMgc2hhbGxvd2x5LiBQYXRjaAogICBjb250cmlidXRlZCBieSBDaHJpcyBKZXJkb25lay4KIAorLSBJc3N1ZSAjMTU0NDI6IEV4cG9zZSB0aGUgZGVmYXVsdCBsaXN0IG9mIGRpcmVjdG9yaWVzIGlnbm9yZWQgYnkKKyAgYGZpbGVjbXAuZGlyY21wKClgIGFzIGEgbW9kdWxlIGF0dHJpYnV0ZSwgYW5kIGV4cGFuZCB0aGUgbGlzdCB0byBtb3JlIG1vZGVybgorICB2YWx1ZXMuCisKIFRlc3RzCiAtLS0tLQogCkBAIC0yNjk3LDkgKzM5NzQsNiBAQAogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICMxNjMwNTogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycmluZyB3aGVuIGludGVycnVwdGluZwotICBtYXRoLmZhY3RvcmlhbC4KLQogLSBJc3N1ZSAjMTIyODg6IENvbnNpZGVyICcwJyBhbmQgJzAuMCcgYXMgdmFsaWQgaW5pdGlhbHZhbHVlCiAgIGZvciB0a2ludGVyIFNpbXBsZURpYWxvZy4KIApAQCAtNDM5NCw3ICs1NjY4LDcgQEAKIC0gSXNzdWUgIzEzNTg5OiBGaXggc29tZSBzZXJpYWxpemF0aW9uIHByaW1pdGl2ZXMgaW4gdGhlIGFpZmMgbW9kdWxlLgogICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgogCi0tIElzc3VlICMxMzY0MjogVW5xdW90ZSBiZWZvcmUgYjY0ZW5jb2RpbmcgYGB1c2VyOnBhc3N3b3JkYGAgZHVyaW5nIEJhc2ljCistIElzc3VlICMxMzY0MjogVW5xdW90ZSBiZWZvcmUgYjY0ZW5jb2RpbmcgdXNlcjpwYXNzd29yZCBkdXJpbmcgQmFzaWMKICAgQXV0aGVudGljYXRpb24uIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEpvb25hcyBLdW9yaWxlaHRvLgogCiAtIElzc3VlICMxMjM2NDogRml4IGEgaGFuZyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvci4KQEAgLTQ4NTMsOCArNjEyNyw4IEBACiAtIElzc3VlICMxMjYwNzogSW4gc3VicHJvY2VzcywgZml4IGlzc3VlIHdoZXJlIGlmIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyIGlzCiAgIGdpdmVuIGFzIGEgbG93IGZkLCBpdCBnZXRzIG92ZXJ3cml0dGVuLgogCi0tIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZSkKLSAgYSBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyLgorLSBJc3N1ZSAjMTI1NzY6IEZpeCB1cmxvcGVuIGJlaGF2aW9yIG9uIHNpdGVzIHdoaWNoIGRvIG5vdCBzZW5kIChvciBvYmZ1c2NhdGVzKQorICBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyLgogCiAtIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KIApAQCAtNTQxMiw2ICs2Njg2LDkgQEAKIC0gSXNzdWUgIzExNjM1OiBEb24ndCB1c2UgcG9sbGluZyBpbiB3b3JrZXIgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzIGxhdW5jaGVkIGJ5CiAgIGNvbmN1cnJlbnQuZnV0dXJlcy4KIAorLSBJc3N1ZSAjNTg0NTogQXV0b21hdGljYWxseSByZWFkIHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGNvbXBsZXRpb24KKyAgaW4gaW50ZXJhY3RpdmUgbW9kZS4KKwogLSBJc3N1ZSAjNjgxMTogQWxsb3cgaW1wb3J0bGliIHRvIGNoYW5nZSBhIGNvZGUgb2JqZWN0J3MgY29fZmlsZW5hbWUgYXR0cmlidXRlCiAgIHRvIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBjdXJyZW50bHkgaXMsIG5vdCB3aGVyZSB0aGUgY29kZQogICBvYmplY3Qgb3JpZ2luYWxseSBjYW1lIGZyb20uCmRpZmYgLS1naXQgYS9NaXNjL1JFQURNRSBiL01pc2MvUkVBRE1FCmluZGV4IDExOGY2YzcuLmU3NzgwYTIgMTAwNjQ0Ci0tLSBhL01pc2MvUkVBRE1FCisrKyBiL01pc2MvUkVBRE1FCkBAIC0yMiw5ICsyMiw3IEBACiBSRUFETUUuY292ZXJpdHkgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIENvdmVyaXR5J3MgUHJldmVudCBvbiBQeXRob24KIFJFQURNRS52YWxncmluZCAgICAgICAgIEluZm9ybWF0aW9uIGZvciBWYWxncmluZCB1c2Vycywgc2VlIHZhbGdyaW5kLXB5dGhvbi5zdXBwCiBSUE0gICAgICAgICAgICAgICAgICAgICAoT2xkKSB0b29scyB0byBidWlsZCBSUE1zCi1zdm5tYXAudHh0ICAgICAgICAgICAgICBNYXAgb2Ygb2xkIFNWTiByZXZzIGFuZCBicmFuY2hlcyB0byBoZyBjaGFuZ2VzZXQgaWRzCiBTcGVjaWFsQnVpbGRzLnR4dCAgICAgICBEZXNjcmliZXMgZXh0cmEgc3ltYm9scyB5b3UgY2FuIHNldCBmb3IgZGVidWcgYnVpbGRzCi1UZXh0TWF0ZSAgICAgICAgICAgICAgICBBIFRleHRNYXRlIGJ1bmRsZSBmb3IgUHl0aG9uIGRldmVsb3BtZW50Citzdm5tYXAudHh0ICAgICAgICAgICAgICBNYXAgb2Ygb2xkIFNWTiByZXZzIGFuZCBicmFuY2hlcyB0byBoZyBjaGFuZ2VzZXQgaWRzCiB2YWxncmluZC1weXRob24uc3VwcCAgICBWYWxncmluZCBzdXBwcmVzc2lvbiBmaWxlLCBzZWUgUkVBRE1FLnZhbGdyaW5kCiB2Z3JpbmRlZnMgICAgICAgICAgICAgICBQeXRob24gY29uZmlndXJhdGlvbiBmb3IgdmdyaW5kIChhIGdlbmVyaWMgcHJldHR5IHByaW50ZXIpCi1WaW0gICAgICAgICAgICAgICAgICAgICBQeXRob24gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIGZvciB0aGUgVmltIGVkaXRvcgpkaWZmIC0tZ2l0IGEvTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjIGIvTWlzYy9SUE0vcHl0aG9uLTMuNC5zcGVjCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIE1pc2MvUlBNL3B5dGhvbi0zLjMuc3BlYwpyZW5hbWUgdG8gTWlzYy9SUE0vcHl0aG9uLTMuNC5zcGVjCmluZGV4IGI4YjU3ZTIuLjE2ZTAwOWMgMTAwNjQ0Ci0tLSBhL01pc2MvUlBNL3B5dGhvbi0zLjMuc3BlYworKysgYi9NaXNjL1JQTS9weXRob24tMy40LnNwZWMKQEAgLTM5LDggKzM5LDggQEAKIAogJWRlZmluZSBuYW1lIHB5dGhvbgogIy0tc3RhcnQgY29uc3RhbnRzLS0KLSVkZWZpbmUgdmVyc2lvbiAzLjMuMwotJWRlZmluZSBsaWJ2ZXJzIDMuMworJWRlZmluZSB2ZXJzaW9uIDMuNC4wYjEKKyVkZWZpbmUgbGlidmVycyAzLjQKICMtLWVuZCBjb25zdGFudHMtLQogJWRlZmluZSByZWxlYXNlIDFweWRvdG9yZwogJWRlZmluZSBfX3ByZWZpeCAvdXNyCkBAIC04Myw4ICs4Myw3IEBACiBsaWJyYXJpZXMsIGFzIHdlbGwgYXMgdG8gdmFyaW91cyB3aW5kb3cgc3lzdGVtcywgYW5kIGlzIGV4dGVuc2libGUgaW4gQyBvcgogQysrLiBJdCBpcyBhbHNvIHVzYWJsZSBhcyBhbiBleHRlbnNpb24gbGFuZ3VhZ2UgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQKIGEgcHJvZ3JhbW1hYmxlIGludGVyZmFjZS4gIEZpbmFsbHksIFB5dGhvbiBpcyBwb3J0YWJsZTogaXQgcnVucyBvbiBtYW55Ci1icmFuZHMgb2YgVU5JWCwgb24gUENzIHVuZGVyIFdpbmRvd3MsIE1TLURPUywgYW5kIE9TLzIsIGFuZCBvbiB0aGUKLU1hYy4KK2JyYW5kcyBvZiBVTklYLCBvbiBQQ3MgdW5kZXIgV2luZG93cywgTVMtRE9TLCBhbmQgb24gdGhlIE1hYy4KIAogJXBhY2thZ2UgZGV2ZWwKIFN1bW1hcnk6IFRoZSBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcyBuZWVkZWQgZm9yIFB5dGhvbiBleHRlbnNpb24gZGV2ZWxvcG1lbnQuCmRpZmYgLS1naXQgYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0IGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dAppbmRleCBmODY5ZTdjLi42NDZhYzIzIDEwMDY0NAotLS0gYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CisrKyBiL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKQEAgLTEwNSw3ICsxMDUsOSBAQAogcFstMipTOi1TXQogICAgIE51bWJlciBvZiBieXRlcyBvcmlnaW5hbGx5IGFza2VkIGZvci4gIFRoaXMgaXMgYSBzaXplX3QsIGJpZy1lbmRpYW4gKGVhc2llcgogICAgIHRvIHJlYWQgaW4gYSBtZW1vcnkgZHVtcCkuCi1wWy1TOjBdCitwWy1TXQorICAgIEFQSSBJRC4gIFNlZSBQRVAgNDQ1LiAgVGhpcyBpcyBhIGNoYXJhY3RlciwgYnV0IHNlZW1zIHVuZG9jdW1lbnRlZC4KK3BbLVMrMTowXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCB1bmRlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbMDpOXQogICAgIFRoZSByZXF1ZXN0ZWQgbWVtb3J5LCBmaWxsZWQgd2l0aCBjb3BpZXMgb2YgQ0xFQU5CWVRFLCB1c2VkIHRvIGNhdGNoCmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2ZhZGE4Li4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMhL3Vzci9iaW4vcHl0aG9uCi0iIiJHZW5lcmF0ZSBjb2RlIHRvIHdhcm4gYWJvdXQgYSBtb2R1bGUncyByZW1vdmFsIGluIFB5dGhvbiAzLjAuCi0KLVhYWCBOb3Qgc3VwcG9ydGVkOgotLSBNb2R1bGUncyBpbiBhIHBhY2thZ2UgZG8gbm90IGhhdmUgdGhlaXIgZnVsbCBuYW1lIGdlbmVyYXRlZC4KLS0gUGFja2FnZSdzIF9faW5pdF9fIG1vZHVsZTsgc2hvdWxkIGRldGVjdCBhbmQgdXNlIHRoZSBwYWNrYWdlJ3MgbmFtZSBpbnN0ZWFkLgotCi0iIiIKLXB5X3RlbXBsYXRlID0gIiIiZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybnB5M2sKLXdhcm5weTNrKCJ0aGUgJHsxOiVzfSBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiBQeXRob24gMy4wIiwgc3RhY2tsZXZlbD0yKQotZGVsIHdhcm5weTNrJDAiIiIKLQotY190ZW1wbGF0ZSA9ICIiIgotaWYgKFB5RXJyX1dhcm5QeTNrKCJ0aGUgJHsxOiVzfSBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiCi0gICAgICAgICAgICAgICAgICAgIlB5dGhvbiAzLjAiLCAyKSAmbHQ7IDApCi0gICAgcmV0dXJuOyQwIiIiCi0KLQotaW1wb3J0IGltcAotaW1wb3J0IG9zCi0KLWZpbGVfbmFtZSA9IG9zLnBhdGguc3BsaXQob3MuZW52aXJvblsnVE1fRklMRVBBVEgnXSlbMV0KLQotcHlfc3VmZml4ZXMgPSByZXZlcnNlZChzb3J0ZWQoKHN1ZmZpeFswXSBmb3Igc3VmZml4IGluIGltcC5nZXRfc3VmZml4ZXMoKSBpZiBzdWZmaXhbMl0gPT0gaW1wLlBZX1NPVVJDRSksIGtleT1sZW4pKQotY19zdWZmaXhlcyA9IHJldmVyc2VkKHNvcnRlZCgob3MucGF0aC5zcGxpdGV4dChzdWZmaXhbMF0pWzBdICsgJy5jJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3VmZml4IGluIGltcC5nZXRfc3VmZml4ZXMoKSBpZiBzdWZmaXhbMl0gPT0gaW1wLkNfRVhURU5TSU9OKSwga2V5PWxlbikpCi0KLXBhaXJpbmdzID0gKChweV9zdWZmaXhlcywgcHlfdGVtcGxhdGUpLCAoY19zdWZmaXhlcywgY190ZW1wbGF0ZSkpCi0KLWRlZiBjcmVhdGVfdGVtcGxhdGUoc3VmZml4ZXMsIHRlbXBsYXRlKToKLSAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgotICAgICAgICBpZiBub3QgZmlsZV9uYW1lLmVuZHN3aXRoKHN1ZmZpeCk6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBtb2R1bGVfbmFtZSA9IGZpbGVfbmFtZVs6LWxlbihzdWZmaXgpXQotICAgICAgICByZXR1cm4gdGVtcGxhdGUgJSBtb2R1bGVfbmFtZQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLWZvciB0ZW1wbGF0ZSBpbiAoY3JlYXRlX3RlbXBsYXRlKCpwYWlyKSBmb3IgcGFpciBpbiBwYWlyaW5ncyk6Ci0gICAgaWYgbm90IHRlbXBsYXRlOgotICAgICAgICBjb250aW51ZQotICAgIHByaW50IHRlbXBsYXRlLAotICAgIGJyZWFrCi1lbHNlOgotICAgIHByaW50ICdYWFggQ291bGQgbm90IGdlbmVyYXRlIGNvZGUuJzwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPjIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbjwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5pbnNlcnRBc1NuaXBwZXQ8L3N0cmluZz4KLQk8a2V5PnRhYlRyaWdnZXI8L2tleT4KLQk8c3RyaW5nPjJ0bzNtb2RkZWw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPjk1MTlDMjJCLTZBQjgtNDFBMS05NEY2LTA3OUUwQjQ1QzE0Nzwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZCBEb2NzLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZCBEb2NzLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U0ZDUzYi4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQgRG9jcy50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBYWFggTGVvcGFyZC1zcGVjaWZpYyB1bmxlc3MgaGF2ZSBlYXN5IHdheSB0byBzcGVjaWZpYyBhbHRlcm5hdGl2ZSBQeXRob24gZXhlY3V0YWJsZS4KLQotY2QgJFRNX1BST0pFQ1RfRElSRUNUT1JZL0RvYwotbWFrZSBodG1sIDImZ3Q7JmFtcDsxIHwgcHJlCi0KLXJlc2Nhbl9wcm9qZWN0PC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+QnVpbGQgRG9jczwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5zaG93QXNIVE1MPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz42RUYxNTFFNS03MTQ5LTRGODItODc5Ni0wQ0M0MEZFNTg5RkE8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmZGE1Yy4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgWFhYIFRPRE8KLSMgLSBIaWdobGlnaHQgYW55IGNvbXBpbGVyIHdhcm5pbmdzIGZvciBQeXRob24gY29kZS4KLSMgLSBQb2ludCBvdXQgaWYgY29tcGlsZSBmYWlsZWQuCi0KLWNkICRUTV9QUk9KRUNUX0RJUkVDVE9SWQotbWFrZSAtcyAtajIgMiZndDsmYW1wOzEgfCBwcmUKLQotcmVzY2FuX3Byb2plY3Q8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5CdWlsZCBQeXRob248L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+c2hvd0FzSFRNTDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0dvIHRvIElzc3VlLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9HbyB0byBJc3N1ZS50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZDMwYmMuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0dvIHRvIElzc3VlLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5vcGVuICJodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlJChjYXQpIjwvc3RyaW5nPgotCTxrZXk+ZmFsbGJhY2tJbnB1dDwva2V5PgotCTxzdHJpbmc+d29yZDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPnNlbGVjdGlvbjwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+R28gdG8gSXNzdWU8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+ZGlzY2FyZDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+RkQyNUE4REMtMjJEQy00RUQ0LUIyMjItQjk0M0M4QTkxMTdEPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gRG9jcy50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBEb2NzLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAxYmU0My4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBEb2NzLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFNlYXJjaCBvcmRlcjoKLSMgIC0gQ3VycmVudCBwcm9qZWN0LgotIyAgLSBUTV9QWVRIT05ERVZfRE9DUy4KLSMgIC0gT25saW5lIGRvY3MgaW4gZGV2ZWxvcG1lbnQuCi0KLWh0bWxfaW5kZXg9JFRNX1BST0pFQ1RfRElSRUNUT1JZL0RvYy9idWlsZC9odG1sL2luZGV4Lmh0bWwKLWlmIFtbIC1mICRodG1sX2luZGV4IF1dOyB0aGVuCi0Jb3BlbiAkaHRtbF9pbmRleAotZWxpZiBbWyAkVE1fUFlUSE9OREVWX0RPQ1MgXV07IHRoZW4KLQlvcGVuICRUTV9QWVRIT05ERVZfRE9DUwotZWxzZQotCW9wZW4gaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvCi1maTwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5PmtleUVxdWl2YWxlbnQ8L2tleT4KLQk8c3RyaW5nPkBIPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5PcGVuIERvY3M8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+ZGlzY2FyZDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gUEVQLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIFBFUC50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNTUzM2EuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gUEVQLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFhYWCBXb3J0aCBzdXBwb3J0aW5nIHVzaW5nIGEgbG9jYWwgY29weT8KLQotIyBEdW1iIGx1Y2sgdGhhdCBhbiB1bnJlY29nbml6ZWQgbnVtYmVyIGxlYWRzIHRvIGEgMCBiZWluZyB1c2VkLgotb3BlbiBgcHJpbnRmICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLSUwNGQiICQoY2F0KWA8L3N0cmluZz4KLQk8a2V5PmZhbGxiYWNrSW5wdXQ8L2tleT4KLQk8c3RyaW5nPndvcmQ8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5zZWxlY3Rpb248L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPk9wZW4gUEVQPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmRpc2NhcmQ8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkVEQkIwMzdGLUFBRTMtNDUxMi04NjNGLUQ5QUE4MkM5RTUxRTwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCAiYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvU25pcHBldHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIFwwNTBkb2NzXDA1MS50bVNuaXBwZXQiICJiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9TbmlwcGV0cy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gXDA1MGRvY3NcMDUxLnRtU25pcHBldCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZThiYWUuLjAwMDAwMDAKLS0tICJhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9TbmlwcGV0cy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gXDA1MGRvY3NcMDUxLnRtU25pcHBldCIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+Y29udGVudDwva2V5PgotCTxzdHJpbmc+Li4gZGVwcmVjYXRlZDo6IDIuNgotICAgVGhlIDptb2Q6XGAkezF9XGAgbW9kdWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuMC4KLSR7MH08L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPjIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiAoZG9jcyk8L3N0cmluZz4KLQk8a2V5PnRhYlRyaWdnZXI8L2tleT4KLQk8c3RyaW5nPjJ0bzNkb2NkZWw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPjA1Njg0MTBELUVBRjEtNEFGMy1CNkRFLThBRjEzM0E5MTgyMTwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9pbmZvLnBsaXN0IGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL2luZm8ucGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MTBkNWQuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL2luZm8ucGxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+bWFpbk1lbnU8L2tleT4KLQk8ZGljdD4KLQkJPGtleT5pdGVtczwva2V5PgotCQk8YXJyYXk+Ci0JCQk8c3RyaW5nPjk1MTlDMjJCLTZBQjgtNDFBMS05NEY2LTA3OUUwQjQ1QzE0Nzwvc3RyaW5nPgotCQkJPHN0cmluZz4wNTY4NDEwRC1FQUYxLTRBRjMtQjZERS04QUYxMzNBOTE4MjE8L3N0cmluZz4KLQkJCTxzdHJpbmc+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkI1NDVCQjFCLUE4RTEtNDI2Qy1CNTBBLTQyNkU3OEI5NkQzODwvc3RyaW5nPgotCQkJPHN0cmluZz42RUYxNTFFNS03MTQ5LTRGODItODc5Ni0wQ0M0MEZFNTg5RkE8L3N0cmluZz4KLQkJCTxzdHJpbmc+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkJGMzM2RkZGLUUxNEQtNEJGMS1BMTU2LTcxQ0Y3NjhBQzAzNDwvc3RyaW5nPgotCQkJPHN0cmluZz5GRDI1QThEQy0yMkRDLTRFRDQtQjIyMi1COTQzQzhBOTExN0Q8L3N0cmluZz4KLQkJCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci0JCTwvYXJyYXk+Ci0JCTxrZXk+c3VibWVudXM8L2tleT4KLQkJPGRpY3QvPgotCTwvZGljdD4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPlB5dGhvbi1EZXY8L3N0cmluZz4KLQk8a2V5Pm9yZGVyaW5nPC9rZXk+Ci0JPGFycmF5PgotCQk8c3RyaW5nPjk1MTlDMjJCLTZBQjgtNDFBMS05NEY2LTA3OUUwQjQ1QzE0Nzwvc3RyaW5nPgotCQk8c3RyaW5nPjA1Njg0MTBELUVBRjEtNEFGMy1CNkRFLThBRjEzM0E5MTgyMTwvc3RyaW5nPgotCQk8c3RyaW5nPkI1NDVCQjFCLUE4RTEtNDI2Qy1CNTBBLTQyNkU3OEI5NkQzODwvc3RyaW5nPgotCQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotCQk8c3RyaW5nPkZEMjVBOERDLTIyREMtNEVENC1CMjIyLUI5NDNDOEE5MTE3RDwvc3RyaW5nPgotCQk8c3RyaW5nPkJGMzM2RkZGLUUxNEQtNEJGMS1BMTU2LTcxQ0Y3NjhBQzAzNDwvc3RyaW5nPgotCQk8c3RyaW5nPkVEQkIwMzdGLUFBRTMtNDUxMi04NjNGLUQ5QUE4MkM5RTUxRTwvc3RyaW5nPgotCTwvYXJyYXk+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5BOTMyRUNEMS1ENDNBLTRGNTctQjdGQi1BMUNFQzNCNjVEMjA8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1ZpbS9weXRob24udmltIGIvTWlzYy9WaW0vcHl0aG9uLnZpbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlZTdlYi4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS9weXRob24udmltCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLSIgQXV0by1nZW5lcmF0ZWQgVmltIHN5bnRheCBmaWxlIGZvciBQeXRob24gKHRydW5rOiByNjAzNzZNKS4KLSIKLSIgVG8gdXNlOiBjb3B5IG9yIHN5bWxpbmsgdG8gfi8udmltL3N5bnRheC9weXRob24udmltCi0KLQotaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKLSAgZmluaXNoCi1lbmRpZgotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYWxsIikKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMgPSAxCi0gIGxldCBweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMgPSAxCi0gIGxldCBweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyA9IDEKLWVuZGlmCi0KLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICBhcyBhc3NlcnQgYnJlYWsgY29udGludWUgZGVsIGV4Y2VwdCBleGVjIGZpbmFsbHkKLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICBnbG9iYWwgbGFtYmRhIHBhc3MgcHJpbnQgcmFpc2UgcmV0dXJuIHRyeSB3aXRoCi1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgeWllbGQKLQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGRlZiBjbGFzcyBuZXh0Z3JvdXA9cHl0aG9uRnVuY3Rpb24gc2tpcHdoaXRlCi0KLXN5biBtYXRjaCBweXRob25GdW5jdGlvbiAgICAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIgY29udGFpbmVkCi0KLXN5biBrZXl3b3JkIHB5dGhvblJlcGVhdCAgICBmb3Igd2hpbGUKLQotc3luIGtleXdvcmQgcHl0aG9uQ29uZGl0aW9uYWwgICAgaWYgZWxpZiBlbHNlCi0KLXN5biBrZXl3b3JkIHB5dGhvbk9wZXJhdG9yICAgIGFuZCBpbiBpcyBub3Qgb3IKLQotc3luIGtleXdvcmQgcHl0aG9uUHJlQ29uZGl0ICAgIGltcG9ydCBmcm9tCi0KLXN5biBtYXRjaCBweXRob25Db21tZW50ICAgICIjLiokIiBjb250YWlucz1weXRob25Ub2RvCi0KLXN5biBrZXl3b3JkIHB5dGhvblRvZG8gICAgVE9ETyBGSVhNRSBYWFggY29udGFpbmVkCi0KLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0nKyBlbmQ9KycrIHNraXA9K1xcXFxcfFxcJysgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9IisgZW5kPSsiKyBza2lwPStcXFxcXHxcXCIrIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPSIiIisgZW5kPSsiIiIrICBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0nJycrIGVuZD0rJycnKyAgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXScrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKyAKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdIisgZW5kPSsiKyBza2lwPStcXFxcXHxcXCIrIAotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0iIiIrIGVuZD0rIiIiKyAgCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXScnJysgZW5kPSsnJycrICAKLQotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICArXFxbYWJmbnJ0dlwnIlxcXSsgY29udGFpbmVkCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcXFxvXHsxLDN9IiBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxceFx4XHsyfSIgY29udGFpbmVkCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcKFxcdVx4XHs0fVx8XFxVXHhcezh9XCkiIGNvbnRhaW5lZAotCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcXCQiCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X251bWJlcnMiKQotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPDB4XHhcK1tMbF1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPFxkXCtbTGxqSl1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPFxkXCtcLlwoW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1wuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iCi0KLWVuZGlmCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIikKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBFbGxpcHNpcyBGYWxzZSBOb25lIE5vdEltcGxlbWVudGVkIFRydWUgX19kZWJ1Z19fCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgX19pbXBvcnRfXyBhYnMgYWxsIGFueSBib29sCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgYnVmZmVyIGNhbGxhYmxlIGNociBjbGFzc21ldGhvZCBjbXAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBjb21wbGV4IGNvcHlyaWdodCBjcmVkaXRzIGRlbGF0dHIgZGljdAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGRpciBkaXZtb2QgZW51bWVyYXRlIGV2YWwgZXhlYyBleGl0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZmlsdGVyIGZsb2F0IGZyb3plbnNldCBnZXRhdHRyIGdsb2JhbHMgaGFzYXR0cgotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGhhc2ggaGVscCBoZXggaWQgaW50IGlzaW5zdGFuY2UKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBpc3N1YmNsYXNzIGl0ZXIgbGVuIGxpY2Vuc2UgbGlzdCBsb2NhbHMgbWFwCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgbWF4IG1pbiBvYmplY3Qgb2N0IG9wZW4gb3JkIHBvdyBwcm9wZXJ0eSBxdWl0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgcmFuZ2UgcmVsb2FkIHJlcHIgcmV2ZXJzZWQgcm91bmQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBzZXQgc2V0YXR0ciBzbGljZSBzb3J0ZWQgc3RhdGljbWV0aG9kIHN0ciBzdW0KLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBzdXBlciB0cnVuYyB0dXBsZSB0eXBlIHVuaWNvZGUgdmFycyAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICB6aXAKLQotZW5kaWYKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyIpCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBBcml0aG1ldGljRXJyb3IgQXNzZXJ0aW9uRXJyb3IgQXR0cmlidXRlRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEJhc2VFeGNlcHRpb24gRGVwcmVjYXRpb25XYXJuaW5nIEVPRkVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBFbnZpcm9ubWVudEVycm9yIEV4Y2VwdGlvbiBGbG9hdGluZ1BvaW50RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEZ1dHVyZVdhcm5pbmcgR2VuZXJhdG9yRXhpdCBJT0Vycm9yIEltcG9ydEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBJbXBvcnRXYXJuaW5nIEluZGVudGF0aW9uRXJyb3IgSW5kZXhFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgS2V5RXJyb3IgS2V5Ym9hcmRJbnRlcnJ1cHQgTG9va3VwRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE1lbW9yeUVycm9yIE5hbWVFcnJvciBOb3RJbXBsZW1lbnRlZEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBPU0Vycm9yIE92ZXJmbG93RXJyb3IgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgUmVmZXJlbmNlRXJyb3IgUnVudGltZUVycm9yIFJ1bnRpbWVXYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBTeW50YXhXYXJuaW5nIFN5c3RlbUVycm9yIFN5c3RlbUV4aXQgVGFiRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFR5cGVFcnJvciBVbmJvdW5kTG9jYWxFcnJvciBVbmljb2RlRGVjb2RlRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFVuaWNvZGVFbmNvZGVFcnJvciBVbmljb2RlRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvciBVbmljb2RlV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVXNlcldhcm5pbmcgVmFsdWVFcnJvciBXYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBaZXJvRGl2aXNpb25FcnJvcgotCi1lbmRpZgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMiKQotICBzeW4gbWF0Y2ggcHl0aG9uU3BhY2VFcnJvciAgICBkaXNwbGF5IGV4Y2x1ZGVubCAiXFNcc1wrJCJtcz1zKzEKLSAgc3luIG1hdGNoIHB5dGhvblNwYWNlRXJyb3IgICAgZGlzcGxheSAiIFwrXHQiCi0gIHN5biBtYXRjaCBweXRob25TcGFjZUVycm9yICAgIGRpc3BsYXkgIlx0XCsgIgotCi1lbmRpZgotCi0KLSAgaGkgZGVmIGxpbmsgcHl0aG9uU3RhdGVtZW50IFN0YXRlbWVudAotICBoaSBkZWYgbGluayBweXRob25TdGF0ZW1lbnQgU3RhdGVtZW50Ci0gIGhpIGRlZiBsaW5rIHB5dGhvbkZ1bmN0aW9uIEZ1bmN0aW9uCi0gIGhpIGRlZiBsaW5rIHB5dGhvblJlcGVhdCBSZXBlYXQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwKLSAgaGkgZGVmIGxpbmsgcHl0aG9uT3BlcmF0b3IgT3BlcmF0b3IKLSAgaGkgZGVmIGxpbmsgcHl0aG9uUHJlQ29uZGl0IFByZUNvbmRpdAotICBoaSBkZWYgbGluayBweXRob25Db21tZW50IENvbW1lbnQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uVG9kbyBUb2RvCi0gIGhpIGRlZiBsaW5rIHB5dGhvblN0cmluZyBTdHJpbmcKLSAgaGkgZGVmIGxpbmsgcHl0aG9uRXNjYXBlIFNwZWNpYWwKLSAgaGkgZGVmIGxpbmsgcHl0aG9uRXNjYXBlIFNwZWNpYWwKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uTnVtYmVyIE51bWJlcgotICBlbmRpZgotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uQnVpbHRpbiBGdW5jdGlvbgotICBlbmRpZgotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIikKLSAgICBoaSBkZWYgbGluayBweXRob25FeGNlcHRpb24gRXhjZXB0aW9uCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uU3BhY2VFcnJvciBFcnJvcgotICBlbmRpZgotCi0KLSIgVW5jb21tZW50IHRoZSAnbWlubGluZXMnIHN0YXRlbWVudCBsaW5lIGFuZCBjb21tZW50IG91dCB0aGUgJ21heGxpbmVzJwotIiBzdGF0ZW1lbnQgbGluZTsgY2hhbmdlcyBiZWhhdmlvdXIgdG8gbG9vayBhdCBsZWFzdCAyMDAwIGxpbmVzIHByZXZpb3VzbHkgZm9yCi0iIHN5bnRheCBtYXRjaGVzIGluc3RlYWQgb2YgYXQgbW9zdCAyMDAgbGluZXMKLXN5biBzeW5jIG1hdGNoIHB5dGhvblN5bmMgZ3JvdXBoZXJlIE5PTkUgIik6JCIKLXN5biBzeW5jIG1heGxpbmVzPTIwMAotInN5biBzeW5jIG1pbmxpbmVzPTIwMDAKLQotbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHl0aG9uIgpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vc3ludGF4X3Rlc3QucHkgYi9NaXNjL1ZpbS9zeW50YXhfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQyMDg2Ni4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS9zeW50YXhfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSIiIlRlc3QgZmlsZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyBvZiBlZGl0b3JzLgotCi1NZWFudCB0byBjb3ZlciBhIHdpZGUgcmFuZ2Ugb2YgZGlmZmVyZW50IHR5cGVzIG9mIHN0YXRlbWVudHMgYW5kIGV4cHJlc3Npb25zLgotTm90IG5lY2Vzc2FyaWx5IHNlbnNpY2FsIG9yIGNvbXByZWhlbnNpdmUgKGFzc3VtZSB0aGF0IGlmIG9uZSBleGNlcHRpb24gaXMKLWhpZ2hsaWdodGVkIHRoYXQgYWxsIGFyZSwgZm9yIGluc3RhbmNlKS4KLQotRXh0cmFuZW91cyB0cmFpbGluZyB3aGl0ZXNwYWNlIGNhbid0IGJlIHRlc3RlZCBiZWNhdXNlIG9mIHN2biBwcmUtY29tbWl0IGhvb2sKLWNoZWNrcyBmb3Igc3VjaCB0aGluZ3MuCi0KLSIiIgotIyBDb21tZW50Ci0jIE9QVElPTkFMOiBYWFggY2F0Y2ggeW91ciBhdHRlbnRpb24KLQotIyBTdGF0ZW1lbnRzCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50ICAjIEltcG9ydAotZnJvbSBzeXMgaW1wb3J0IHBhdGggYXMgdGhpbmcKLWFzc2VydCBUcnVlICMga2V5d29yZAotZGVmIGZvbygpOiAgIyBmdW5jdGlvbiBkZWZpbml0aW9uCi0gICAgcmV0dXJuIFtdCi1jbGFzcyBCYXIob2JqZWN0KTogICMgQ2xhc3MgZGVmaW5pdGlvbgotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIHBhc3MKLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICBwYXNzCi1mb28oKSAgIyBVTkNPTE9VUkVEOiBmdW5jdGlvbiBjYWxsCi13aGlsZSBGYWxzZTogICMgJ3doaWxlJwotICAgIGNvbnRpbnVlCi1mb3IgeCBpbiBmb28oKTogICMgJ2ZvcicKLSAgICBicmVhawotd2l0aCBCYXIoKSBhcyBzdHVmZjoKLSAgICBwYXNzCi1pZiBGYWxzZTogcGFzcyAgIyAnaWYnCi1lbGlmIEZhbHNlOiBwYXNzCi1lbHNlOiBwYXNzCi0KLSMgQ29uc3RhbnRzCi0nc2luZ2xlLXF1b3RlJywgdSd1bmljb2RlJyAjIFN0cmluZ3Mgb2YgYWxsIGtpbmRzOyBwcmVmaXhlcyBub3QgaGlnaGxpZ2h0ZWQKLSJkb3VibGUtcXVvdGUiCi0iIiJ0cmlwbGUgZG91YmxlLXF1b3RlIiIiCi0nJyd0cmlwbGUgc2luZ2xlLXF1b3RlJycnCi1yJ3JhdycKLXVyJ3VuaWNvZGUgcmF3JwotJ2VzY2FwZVxuJwotJ1wwNCcgICMgb2N0YWwKLSdceEZGJyAjIGhleAotJ1x1MTExMScgIyB1bmljb2RlIGNoYXJhY3RlcgotMSAgIyBJbnRlZ3JhbAotMUwKLTEuMCAgIyBGbG9hdAotLjEKLTErMmogICMgQ29tcGxleAotCi0jIEV4cHJlc3Npb25zCi0xIGFuZCAyIG9yIDMgICMgQm9vbGVhbiBvcGVyYXRvcnMKLTIgPCAzICAjIFVOQ09MT1VSRUQ6IGNvbXBhcmlzb24gb3BlcmF0b3JzCi1zcGFtID0gNDIgICMgVU5DT0xPVVJFRDogYXNzaWdubWVudAotMiArIDMgICMgVU5DT0xPVVJFRDogbnVtYmVyIG9wZXJhdG9ycwotW10gICMgVU5DT0xPVVJFRDogbGlzdAote30gICMgVU5DT0xPVVJFRDogZGljdAotKDEsKSAgIyBVTkNPTE9VUkVEOiB0dXBsZQotYWxsICAjIEJ1aWx0LWluIGZ1bmN0aW9ucwotR2VuZXJhdG9yRXhpdCAgIyBFeGNlcHRpb25zCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS92aW1fc3ludGF4LnB5IGIvTWlzYy9WaW0vdmltX3N5bnRheC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyYjM1MC4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS92aW1fc3ludGF4LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLSMgWFhYKG5ub3J3aXR6KTogd2hhdCB2ZXJzaW9ucyBvZiBweXRob24gaXMgdGhpcyBmaWxlIHN1cHBvc2VkIHRvIHdvcmsgd2l0aD8KLSMgSXQgdXNlcyB0aGUgb2xkIHByaW50IHN0YXRlbWVudCBub3QgaW4gcHkzay4KLQotaW1wb3J0IGtleXdvcmQKLWltcG9ydCBleGNlcHRpb25zCi1pbXBvcnQgYnVpbHRpbnMKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotZnJvbSBzeXMgaW1wb3J0IHN1YnZlcnNpb24KLQotY29tbWVudF9oZWFkZXIgPSAnJyciIEF1dG8tZ2VuZXJhdGVkIFZpbSBzeW50YXggZmlsZSBmb3IgUHl0aG9uICglczogciVzKS4KLSIKLSIgVG8gdXNlOiBjb3B5IG9yIHN5bWxpbmsgdG8gfi8udmltL3N5bnRheC9weXRob24udmltJycnCi0KLXN0YXRlbWVudF9oZWFkZXIgPSAiIiIKLWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCi0gIGZpbmlzaAotZW5kaWYiIiIKLQotc3RhdGVtZW50X2Zvb3RlciA9ICcnJwotIiBVbmNvbW1lbnQgdGhlICdtaW5saW5lcycgc3RhdGVtZW50IGxpbmUgYW5kIGNvbW1lbnQgb3V0IHRoZSAnbWF4bGluZXMnCi0iIHN0YXRlbWVudCBsaW5lOyBjaGFuZ2VzIGJlaGF2aW91ciB0byBsb29rIGF0IGxlYXN0IDIwMDAgbGluZXMgcHJldmlvdXNseSBmb3IKLSIgc3ludGF4IG1hdGNoZXMgaW5zdGVhZCBvZiBhdCBtb3N0IDIwMCBsaW5lcwotc3luIHN5bmMgbWF0Y2ggcHl0aG9uU3luYyBncm91cGhlcmUgTk9ORSAiKTokIgotc3luIHN5bmMgbWF4bGluZXM9MjAwCi0ic3luIHN5bmMgbWlubGluZXM9MjAwMAotCi1sZXQgYjpjdXJyZW50X3N5bnRheCA9ICJweXRob24iJycnCi0KLWxvb3BpbmcgPSAoJ2ZvcicsICd3aGlsZScpCi1jb25kaXRpb25hbHMgPSAoJ2lmJywgJ2VsaWYnLCAnZWxzZScpCi1ib29sZWFuX29wcyA9ICgnYW5kJywgJ2luJywgJ2lzJywgJ25vdCcsICdvcicpCi1pbXBvcnRfc3RtdHMgPSAoJ2ltcG9ydCcsICdmcm9tJykKLW9iamVjdF9kZWZzID0gKCdkZWYnLCAnY2xhc3MnKQotCi1leGNlcHRpb25fbmFtZXMgPSBzb3J0ZWQoZXhjIGZvciBleGMgaW4gZGlyKGV4Y2VwdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBleGMuc3RhcnRzd2l0aCgnX18nKSkKLQotIyBOZWVkIHRvIGluY2x1ZGUgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCAnX18nIChlLmcuLCBfX2ltcG9ydF9fKSwgYnV0Ci0jIG5vdGhpbmcgdGhhdCBjb21lcyB3aXRoIG1vZHVsZXMgKGUuZy4sIF9fbmFtZV9fKSwgc28ganVzdCBleGNsdWRlIGFueXRoaW5nIGluCi0jIHRoZSAnZXhjZXB0aW9ucycgbW9kdWxlIHNpbmNlIHdlIHdhbnQgdG8gaWdub3JlIGV4Y2VwdGlvbnMgKmFuZCogd2hhdCBhbnkKLSMgbW9kdWxlIHdvdWxkIGhhdmUKLWJ1aWx0aW5fbmFtZXMgPSBzb3J0ZWQoYnVpbHRpbiBmb3IgYnVpbHRpbiBpbiBkaXIoYnVpbHRpbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVpbHRpbiBub3QgaW4gZGlyKGV4Y2VwdGlvbnMpKQotCi1lc2NhcGVzID0gKHInK1xcW2FiZm5ydHZcJyJcXF0rJywgciciXFxcb1x7MSwzfSInLCByJyJcXHhceFx7Mn0iJywKLSAgICAgICAgICAgIHInIlwoXFx1XHhcezR9XHxcXFVceFx7OH1cKSInLCByJyJcXCQiJykKLQotdG9kb3MgPSAoIlRPRE8iLCAiRklYTUUiLCAiWFhYIikKLQotIyBYWFggY29kaWZ5PwotbnVtYmVycyA9IChyJyJcPDB4XHhcK1tMbF1cPVw+IicsIHInIlw8XGRcK1tMbGpKXVw9XD4iJywKLSAgICAgICAgICAgICciXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiInLAotICAgICAgICAgICAgJyJcPFxkXCtcLlwoW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iJywKLSAgICAgICAgICAgICciXDxcZFwrXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiInKQotCi1jb250YWluZWQgPSBsYW1iZGEgeDogIiVzIGNvbnRhaW5lZCIgJSB4Ci0KLWRlZiBzdHJfcmVnZXhlcygpOgotICAgICIiIkdlbmVyYXRvciB0byB5aWVsZCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBzdHJpbmdzIHJlZ2V4ZXMiIiIKLSAgICByZWdleF90ZW1wbGF0ZSA9IFRlbXBsYXRlKCdtYXRjaGdyb3VwPU5vcm1hbCAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0PStbdVVdXD0ke3Jhd30ke3NlcH0rICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5kPSske3NlcH0rICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJHtza2lwfSAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyR7Y29udGFpbnN9JykKLSAgICBza2lwX3JlZ2V4ID0gVGVtcGxhdGUocidza2lwPStcXFxcXHxcXCR7c2VwfSsnKQotICAgIGZvciByYXcgaW4gKCcnLCAnW3JSXScpOgotICAgICAgICBmb3Igc2VwYXJhdG9yIGluICgiJyIsICciJywgJyIiIicsICInJyciKToKLSAgICAgICAgICAgIGlmIGxlbihzZXBhcmF0b3IpID09IDE6Ci0gICAgICAgICAgICAgICAgc2tpcCA9IHNraXBfcmVnZXguc3Vic3RpdHV0ZShzZXA9c2VwYXJhdG9yKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBza2lwID0gJycKLSAgICAgICAgICAgIGNvbnRhaW5zID0gJ2NvbnRhaW5zPXB5dGhvbkVzY2FwZScgaWYgbm90IHJhdyBlbHNlICcnCi0gICAgICAgICAgICB5aWVsZCByZWdleF90ZW1wbGF0ZS5zdWJzdGl0dXRlKHJhdz1yYXcsIHNlcD1zZXBhcmF0b3IsIHNraXA9c2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgPSBjb250YWlucykKLQotc3BhY2VfZXJyb3JzID0gKHInZXhjbHVkZW5sICJcU1xzXCskIm1zPXMrMScsIHInIiBcK1x0IicsIHInIlx0XCsgIicpCi0KLXN0YXRlbWVudHMgPSAoCi0gICAgICAgICAgICAgICAgKCcnLAotICAgICAgICAgICAgICAgICAgICAjIFhYWCBNaWdodCBuZWVkIHRvIGNoYW5nZSBweXRob25TdGF0ZW1lbnQgc2luY2UgaGF2ZQotICAgICAgICAgICAgICAgICAgICAjIHNwZWNpZmljIFJlcGVhdCwgQ29uZGl0aW9uYWwsIE9wZXJhdG9yLCBldGMuIGZvciAnd2hpbGUnLAotICAgICAgICAgICAgICAgICAgICAjIGV0Yy4KLSAgICAgICAgICAgICAgICAgICAgWygiU3RhdGVtZW50IiwgInB5dGhvblN0YXRlbWVudCIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChrdyBmb3Iga3cgaW4ga2V5d29yZC5rd2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrdyBub3QgaW4gKGxvb3BpbmcgKyBjb25kaXRpb25hbHMgKyBib29sZWFuX29wcyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3N0bXRzICsgb2JqZWN0X2RlZnMpKQotICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgICAoIlN0YXRlbWVudCIsICJweXRob25TdGF0ZW1lbnQiLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCcgJy5qb2luKG9iamVjdF9kZWZzKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgbmV4dGdyb3VwPXB5dGhvbkZ1bmN0aW9uIHNraXB3aGl0ZScpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiRnVuY3Rpb24iLCJweXRob25GdW5jdGlvbiIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkKCciW2EtekEtWl9dW2EtekEtWjAtOV9dKiInKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlJlcGVhdCIsICJweXRob25SZXBlYXQiLCAia2V5d29yZCIsIGxvb3BpbmcpLAotICAgICAgICAgICAgICAgICAgICAgKCJDb25kaXRpb25hbCIsICJweXRob25Db25kaXRpb25hbCIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbHMpLAotICAgICAgICAgICAgICAgICAgICAgKCJPcGVyYXRvciIsICJweXRob25PcGVyYXRvciIsICJrZXl3b3JkIiwgYm9vbGVhbl9vcHMpLAotICAgICAgICAgICAgICAgICAgICAgKCJQcmVDb25kaXQiLCAicHl0aG9uUHJlQ29uZGl0IiwgImtleXdvcmQiLCBpbXBvcnRfc3RtdHMpLAotICAgICAgICAgICAgICAgICAgICAgKCJDb21tZW50IiwgInB5dGhvbkNvbW1lbnQiLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgICciIy4qJCIgY29udGFpbnM9cHl0aG9uVG9kbycpLAotICAgICAgICAgICAgICAgICAgICAgKCJUb2RvIiwgInB5dGhvblRvZG8iLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkKCcgJy5qb2luKHRvZG9zKSkpLAotICAgICAgICAgICAgICAgICAgICAgKCJTdHJpbmciLCAicHl0aG9uU3RyaW5nIiwgInJlZ2lvbiIsIHN0cl9yZWdleGVzKCkpLAotICAgICAgICAgICAgICAgICAgICAgKCJTcGVjaWFsIiwgInB5dGhvbkVzY2FwZSIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lZChlc2MpIGZvciBlc2MgaW4gZXNjYXBlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgJyQnIGluIGVzYykpLAotICAgICAgICAgICAgICAgICAgICAgKCJTcGVjaWFsIiwgInB5dGhvbkVzY2FwZSIsICJtYXRjaCIsIHInIlxcJCInKSwKLSAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X251bWJlcnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJOdW1iZXIiLCAicHl0aG9uTnVtYmVyIiwgIm1hdGNoIiwgbnVtYmVycyldCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJGdW5jdGlvbiIsICJweXRob25CdWlsdGluIiwgImtleXdvcmQiLCBidWlsdGluX25hbWVzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgWygiRXhjZXB0aW9uIiwgInB5dGhvbkV4Y2VwdGlvbiIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lcyldCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIiwKLSAgICAgICAgICAgICAgICAgICAgWygiRXJyb3IiLCAicHl0aG9uU3BhY2VFcnJvciIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoImRpc3BsYXkgIiArIGVyciBmb3IgZXJyIGluIHNwYWNlX2Vycm9ycykpXQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICApCi0KLWRlZiBzeW5fcHJlZml4KHR5cGVfLCBraW5kKToKLSAgICByZXR1cm4gJ3N5biAlcyAlcyAgICAnICUgKHR5cGVfLCBraW5kKQotCi1kZWYgZmlsbF9zdG10KGl0ZXJhYmxlLCBmaWxsX2xlbik6Ci0gICAgIiIiWWllbGQgYSBzdHJpbmcgdGhhdCBmaWxscyBhdCBtb3N0IGZpbGxfbGVuIGNoYXJhY3RlcnMgd2l0aCBzdHJpbmdzCi0gICAgcmV0dXJuZWQgYnkgJ2l0ZXJhYmxlJyBhbmQgc2VwYXJhdGVkIGJ5IGEgc3BhY2UiIiIKLSAgICAjIERlYWwgd2l0aCB0cmFpbGluZyBjaGFyIHRvIGhhbmRsZSAnICcuam9pbigpIGNhbGN1bGF0aW9uCi0gICAgZmlsbF9sZW4gKz0gMQotICAgIG92ZXJmbG93ID0gTm9uZQotICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBidWZmZXJfID0gW10KLSAgICAgICAgdG90YWxfbGVuID0gMAotICAgICAgICBpZiBvdmVyZmxvdzoKLSAgICAgICAgICAgIGJ1ZmZlcl8uYXBwZW5kKG92ZXJmbG93KQotICAgICAgICAgICAgdG90YWxfbGVuICs9IGxlbihvdmVyZmxvdykgKyAxCi0gICAgICAgICAgICBvdmVyZmxvdyA9IE5vbmUKLSAgICAgICAgd2hpbGUgdG90YWxfbGVuIDwgZmlsbF9sZW46Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbmV3X2l0ZW0gPSBuZXh0KGl0KQotICAgICAgICAgICAgICAgIGJ1ZmZlcl8uYXBwZW5kKG5ld19pdGVtKQotICAgICAgICAgICAgICAgIHRvdGFsX2xlbiArPSBsZW4obmV3X2l0ZW0pICsgMQotICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgaWYgYnVmZmVyXzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBvdmVyZmxvdzoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgb3ZlcmZsb3cKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgdG90YWxfbGVuID4gZmlsbF9sZW46Ci0gICAgICAgICAgICBvdmVyZmxvdyA9IGJ1ZmZlcl8ucG9wKCkKLSAgICAgICAgICAgIHRvdGFsX2xlbiAtPSBsZW4ob3ZlcmZsb3cpIC0gMQotICAgICAgICByZXQgPSAnICcuam9pbihidWZmZXJfKQotICAgICAgICBhc3NlcnQgbGVuKHJldCkgPD0gZmlsbF9sZW4KLSAgICAgICAgeWllbGQgcmV0Ci0KLUZJTEwgPSA4MAotCi1kZWYgbWFpbihmaWxlX3BhdGgpOgotICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgRklMRToKLSAgICAgICAgIyBDb21tZW50IGZvciBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBjb21tZW50X2hlYWRlciAlIHN1YnZlcnNpb25bMTpdCi0gICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIFN0YXRlbWVudHMgYXQgc3RhcnQgb2YgZmlsZQotICAgICAgICBwcmludD4+RklMRSwgc3RhdGVtZW50X2hlYWRlcgotICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBHZW5lcmF0ZSBjYXNlIGZvciBweXRob25faGlnaGxpZ2h0X2FsbAotICAgICAgICBwcmludD4+RklMRSwgJ2lmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9hbGwiKScKLSAgICAgICAgZm9yIHN0YXRlbWVudF92YXIsIHN0YXRlbWVudF9wYXJ0cyBpbiBzdGF0ZW1lbnRzOgotICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJyAgbGV0ICVzID0gMScgJSBzdGF0ZW1lbnRfdmFyCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludD4+RklMRSwgJ2VuZGlmJwotICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgR2VuZXJhdGUgUHl0aG9uIGdyb3VwcwotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnaWYgZXhpc3RzKCIlcyIpJyAlIHN0YXRlbWVudF92YXIKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICAnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcnCi0gICAgICAgICAgICBmb3IgY29sb3VyX2dyb3VwLCBncm91cCwgdHlwZV8sIGFyZ3VtZW50cyBpbiBzdGF0ZW1lbnRfcGFydHM6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJndW1lbnRzLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gc3luX3ByZWZpeCh0eXBlXywgZ3JvdXApCi0gICAgICAgICAgICAgICAgICAgIGlmIHR5cGVfID09ICdrZXl3b3JkJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0bXRfaXRlciA9IGZpbGxfc3RtdChhcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEwgLSBsZW4ocHJlZml4KSAtIGxlbihpbmRlbnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBwcmVmaXggKyBuZXh0KHN0bXRfaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50IGluIGFyZ3VtZW50czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgaW5kZW50ICsgcHJlZml4ICsgYXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgaW5kZW50ICsgc3luX3ByZWZpeCh0eXBlXywgZ3JvdXApICsgYXJndW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJ2VuZGlmJwotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIEFzc29jaWF0aW5nIFB5dGhvbiBncm91cCB3aXRoIFZpbSBjb2xvdXIgZ3JvdXAKLSAgICAgICAgZm9yIHN0YXRlbWVudF92YXIsIHN0YXRlbWVudF9wYXJ0cyBpbiBzdGF0ZW1lbnRzOgotICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJyAgaWYgZXhpc3RzKCIlcyIpJyAlIHN0YXRlbWVudF92YXIKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICAgICcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW5kZW50ID0gJyAgJwotICAgICAgICAgICAgZm9yIGNvbG91cl9ncm91cCwgZ3JvdXAsIHR5cGVfLCBhcmd1bWVudHMgaW4gc3RhdGVtZW50X3BhcnRzOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAoaW5kZW50ICsgImhpIGRlZiBsaW5rICVzICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncm91cCwgY29sb3VyX2dyb3VwKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcgIGVuZGlmJwotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIFN0YXRlbWVudHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQotICAgICAgICBwcmludD4+RklMRSwgc3RhdGVtZW50X2Zvb3RlcgotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oInB5dGhvbi52aW0iKQpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vdmltcmMgYi9NaXNjL1ZpbS92aW1yYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5OGNjYS4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS92aW1yYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSIgdmltcmMgZmlsZSBmb3IgZm9sbG93aW5nIHRoZSBjb2Rpbmcgc3RhbmRhcmRzIHNwZWNpZmllZCBpbiBQRVAgNyAmIDguCi0iCi0iIFRvIHVzZSB0aGlzIGZpbGUsIHNvdXJjZSBpdCBpbiB5b3VyIG93biBwZXJzb25hbCAudmltcmMgZmlsZSAoYGBzb3VyY2UKLSIgPGZpbGVuYW1lPmBgKSBvciwgaWYgeW91IGRvbid0IGhhdmUgYSAudmltcmMgZmlsZSwgeW91IGNhbiBqdXN0IHN5bWxpbmsgdG8gaXQKLSIgKGBgbG4gLXMgPHRoaXMgZmlsZT4gfi8udmltcmNgYCkuICBBbGwgb3B0aW9ucyBhcmUgcHJvdGVjdGVkIGJ5IGF1dG9jbWRzCi0iIChyZWFkIGJlbG93IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgY29tbWFuZCkgc28gYmxpbmQgc291cmNpbmcgb2YgdGhpcyBmaWxlCi0iIGlzIHNhZmUgYW5kIHdpbGwgbm90IGFmZmVjdCB5b3VyIHNldHRpbmdzIGZvciBub24tUHl0aG9uIG9yIG5vbi1DIGZpbGVzLgotIgotIgotIiBBbGwgc2V0dGluZyBhcmUgcHJvdGVjdGVkIGJ5ICdhdScgKCdhdXRvY21kJykgc3RhdGVtZW50cy4gIE9ubHkgZmlsZXMgZW5kaW5nCi0iIGluIC5weSBvciAucHl3IHdpbGwgdHJpZ2dlciB0aGUgUHl0aG9uIHNldHRpbmdzIHdoaWxlIGZpbGVzIGVuZGluZyBpbiAqLmMgb3IKLSIgKi5oIHdpbGwgdHJpZ2dlciB0aGUgQyBzZXR0aW5ncy4gIFRoaXMgbWFrZXMgdGhlIGZpbGUgInNhZmUiIGluIHRlcm1zIG9mIG9ubHkKLSIgYWRqdXN0aW5nIHNldHRpbmdzIGZvciBQeXRob24gYW5kIEMgZmlsZXMuCi0iCi0iIE9ubHkgYmFzaWMgc2V0dGluZ3MgbmVlZGVkIHRvIGVuZm9yY2UgdGhlIHN0eWxlIGd1aWRlbGluZXMgYXJlIHNldC4KLSIgU29tZSBzdWdnZXN0ZWQgb3B0aW9ucyBhcmUgbGlzdGVkIGJ1dCBjb21tZW50ZWQgb3V0IGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgotCi0iIE51bWJlciBvZiBzcGFjZXMgdGhhdCBhIHByZS1leGlzdGluZyB0YWIgaXMgZXF1YWwgdG8uCi0iIEZvciB0aGUgYW1vdW50IG9mIHNwYWNlIHVzZWQgZm9yIGEgbmV3IHRhYiB1c2Ugc2hpZnR3aWR0aC4KLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqcHksKnB5dywqLmMsKi5oIHNldCB0YWJzdG9wPTgKLQotIiBXaGF0IHRvIHVzZSBmb3IgYW4gaW5kZW50LgotIiBUaGlzIHdpbGwgYWZmZWN0IEN0cmwtVCBhbmQgJ2F1dG9pbmRlbnQnLgotIiBQeXRob246IDQgc3BhY2VzCi0iIEM6IHRhYnMgKHByZS1leGlzdGluZyBmaWxlcykgb3IgNCBzcGFjZXMgKG5ldyBmaWxlcykKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCpweXcgc2V0IHNoaWZ0d2lkdGg9NAotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcgc2V0IGV4cGFuZHRhYgotZnUgU2VsZWN0X2Nfc3R5bGUoKQotICAgIGlmIHNlYXJjaCgnXlx0JywgJ24nLCAxNTApCi0gICAgICAgIHNldCBzaGlmdHdpZHRoPTgKLSAgICAgICAgc2V0IG5vZXhwYW5kdGFiCi0gICAgZWwgCi0gICAgICAgIHNldCBzaGlmdHdpZHRoPTQKLSAgICAgICAgc2V0IGV4cGFuZHRhYgotICAgIGVuCi1lbmRmCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5jLCouaCBjYWxsIFNlbGVjdF9jX3N0eWxlKCkKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSBNYWtlZmlsZSogc2V0IG5vZXhwYW5kdGFiCi0KLSIgVXNlIHRoZSBiZWxvdyBoaWdobGlnaHQgZ3JvdXAgd2hlbiBkaXNwbGF5aW5nIGJhZCB3aGl0ZXNwYWNlIGlzIGRlc2lyZWQuCi1oaWdobGlnaHQgQmFkV2hpdGVzcGFjZSBjdGVybWJnPXJlZCBndWliZz1yZWQKLQotIiBEaXNwbGF5IHRhYnMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgaW4gUHl0aG9uIG1vZGUgYXMgYmFkLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcgbWF0Y2ggQmFkV2hpdGVzcGFjZSAvXlx0XCsvCi0iIE1ha2UgdHJhaWxpbmcgd2hpdGVzcGFjZSBiZSBmbGFnZ2VkIGFzIGJhZC4KLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3LCouYywqLmgsKi5yc3QgbWF0Y2ggQmFkV2hpdGVzcGFjZSAvXHNcKyQvCi0KLSIgV3JhcCB0ZXh0IGFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgY2hhcmFjdGVycwotIiBQeXRob246IDc5IAotIiBDOiA3OQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCBzZXQgdGV4dHdpZHRoPTc5Ci0KLSIgVHVybiBvZmYgc2V0dGluZ3MgaW4gJ2Zvcm1hdG9wdGlvbnMnIHJlbGF0aW5nIHRvIGNvbW1lbnQgZm9ybWF0dGluZy4KLSIgLSBjIDogZG8gbm90IGF1dG9tYXRpY2FsbHkgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIHdyYXBwaW5nIGJhc2VkIG9uCi0iICAgICd0ZXh0d2lkdGgnCi0iIC0gbyA6IGRvIG5vdCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gdXNpbmcgJ28nIG9yICdPJyBmcm9tIGNvbW1hbmQgbW9kZQotIiAtIHIgOiBkbyBub3QgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIGhpdHRpbmcgPEVudGVyPiBpbiBpbnNlcnQgbW9kZQotIiBQeXRob246IG5vdCBuZWVkZWQKLSIgQzogcHJldmVudHMgaW5zZXJ0aW9uIG9mICcqJyBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGxpbmUgaW4gYSBjb21tZW50Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5jLCouaCBzZXQgZm9ybWF0b3B0aW9ucy09YyBmb3JtYXRvcHRpb25zLT1vIGZvcm1hdG9wdGlvbnMtPXIKLQotIiBVc2UgVU5JWCAoXG4pIGxpbmUgZW5kaW5ncy4KLSIgT25seSB1c2VkIGZvciBuZXcgZmlsZXMgc28gYXMgdG8gbm90IGZvcmNlIGV4aXN0aW5nIGZpbGVzIHRvIGNoYW5nZSB0aGVpcgotIiBsaW5lIGVuZGluZ3MuCi0iIFB5dGhvbjogeWVzCi0iIEM6IHllcwotYXUgQnVmTmV3RmlsZSAqLnB5LCoucHl3LCouYywqLmggc2V0IGZpbGVmb3JtYXQ9dW5peAotCi0KLSIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBUaGUgZm9sbG93aW5nIHNlY3Rpb24gY29udGFpbnMgc3VnZ2VzdGVkIHNldHRpbmdzLiAgV2hpbGUgaW4gbm8gd2F5IHJlcXVpcmVkCi0iIHRvIG1lZXQgY29kaW5nIHN0YW5kYXJkcywgdGhleSBhcmUgaGVscGZ1bC4KLQotIiBTZXQgdGhlIGRlZmF1bHQgZmlsZSBlbmNvZGluZyB0byBVVEYtODogYGBzZXQgZW5jb2Rpbmc9dXRmLThgYAotCi0iIFB1dHMgYSBtYXJrZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gVVRGIGFuZAotIiBVQ1MgZW5jb2RpbmcgKFdBUk5JTkc6IGNhbiB0cmljayBzaGVsbHMgaW50byB0aGlua2luZyBhIHRleHQgZmlsZSBpcyBhY3R1YWxseQotIiBhIGJpbmFyeSBmaWxlIHdoZW4gZXhlY3V0aW5nIHRoZSB0ZXh0IGZpbGUpOiBgYHNldCBib21iYGAKLQotIiBGb3IgZnVsbCBzeW50YXggaGlnaGxpZ2h0aW5nOgotImBgbGV0IHB5dGhvbl9oaWdobGlnaHRfYWxsPTFgYAotImBgc3ludGF4IG9uYGAKLQotIiBBdXRvbWF0aWNhbGx5IGluZGVudCBiYXNlZCBvbiBmaWxlIHR5cGU6IGBgZmlsZXR5cGUgaW5kZW50IG9uYGAKLSIgS2VlcCBpbmRlbnRhdGlvbiBsZXZlbCBmcm9tIHByZXZpb3VzIGxpbmU6IGBgc2V0IGF1dG9pbmRlbnRgYAotCi0iIEZvbGRpbmcgYmFzZWQgb24gaW5kZW50YXRpb246IGBgc2V0IGZvbGRtZXRob2Q9aW5kZW50YGAKZGlmZiAtLWdpdCBhL01pc2MvY292ZXJpdHlfbW9kZWwuYyBiL01pc2MvY292ZXJpdHlfbW9kZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2YzYWViCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9jb3Zlcml0eV9tb2RlbC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKiBDb3Zlcml0eSBTY2FuIG1vZGVsCisgKgorICogVGhpcyBpcyBhIG1vZGVsaW5nIGZpbGUgZm9yIENvdmVyaXR5IFNjYW4uIE1vZGVsaW5nIGhlbHBzIHRvIGF2b2lkIGZhbHNlCisgKiBwb3NpdGl2ZXMuCisgKgorICogLSBBIG1vZGVsIGZpbGUgY2FuJ3QgaW1wb3J0IGFueSBoZWFkZXIgZmlsZXMuCisgKiAtIFRoZXJlZm9yZSBvbmx5IHNvbWUgYnVpbHQtaW4gcHJpbWl0aXZlcyBsaWtlIGludCwgY2hhciBhbmQgdm9pZCBhcmUKKyAqICAgYXZhaWxhYmxlIGJ1dCBub3Qgd2NoYXJfdCwgTlVMTCBldGMuCisgKiAtIE1vZGVsaW5nIGRvZXNuJ3QgbmVlZCBmdWxsIHN0cnVjdHMgYW5kIHR5cGVkZWZzLiBSdWRpbWVudGFyeSBzdHJ1Y3RzCisgKiAgIGFuZCBzaW1pbGFyIHR5cGVzIGFyZSBzdWZmaWNpZW50LgorICogLSBBbiB1bmluaXRpYWxpemVkIGxvY2FsIHBvaW50ZXIgaXMgbm90IGFuIGVycm9yLiBJdCBzaWduaWZpZXMgdGhhdCB0aGUKKyAqICAgdmFyaWFibGUgY291bGQgYmUgZWl0aGVyIE5VTEwgb3IgaGF2ZSBzb21lIGRhdGEuCisgKgorICogQ292ZXJpdHkgU2NhbiBkb2Vzbid0IHBpY2sgdXAgbW9kaWZpY2F0aW9ucyBhdXRvbWF0aWNhbGx5LiBUaGUgbW9kZWwgZmlsZQorICogbXVzdCBiZSB1cGxvYWRlZCBieSBhbiBhZG1pbiBpbiB0aGUgYW5hbHlzaXMgc2V0dGluZ3Mgb2YKKyAqIGh0dHA6Ly9zY2FuLmNvdmVyaXR5LmNvbS9wcm9qZWN0cy8yMDAKKyAqLworCisvKiBkdW1teSBkZWZpbml0aW9ucywgaW4gbW9zdCBjYXNlcyBzdHJ1Y3QgZmllbGRzIGFyZW4ndCByZXF1aXJlZC4gKi8KKworI2RlZmluZSBOVUxMICh2b2lkICopMAorI2RlZmluZSBhc3NlcnQob3ApIC8qIGVtcHR5ICovCit0eXBlZGVmIGludCBzZGlnaXQ7Cit0eXBlZGVmIGxvbmcgUHlfc3NpemVfdDsKK3R5cGVkZWYgbG9uZyBsb25nIFBZX0xPTkdfTE9ORzsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgd2NoYXJfdDsKK3R5cGVkZWYgc3RydWN0IHt9IFB5T2JqZWN0OwordHlwZWRlZiBzdHJ1Y3Qge30gZ3JhbW1hcjsKK3R5cGVkZWYgc3RydWN0IHt9IERJUjsKK3R5cGVkZWYgc3RydWN0IHt9IFJGSUxFOworCisvKiBQeXRob24vcHl0aG9ucnVuLmMKKyAqIHJlc291cmVjZSBsZWFrIGZhbHNlIHBvc2l0aXZlICovCisKK3ZvaWQgUHlfRmF0YWxFcnJvcihjb25zdCBjaGFyICptc2cpIHsKKyAgICBfX2NvdmVyaXR5X3BhbmljX18oKTsKK30KKworLyogT2JqZWN0cy9sb25nb2JqZWN0LmMKKyAqIE5FR0FUSVZFX1JFVFVSTlMgZmFsc2UgcG9zaXRpdmUgKi8KKworc3RhdGljIFB5T2JqZWN0ICpnZXRfc21hbGxfaW50KHNkaWdpdCBpdmFsKQoreworICAgIC8qIE5ldmVyIHJldHVybnMgTlVMTCAqLworICAgIFB5T2JqZWN0ICpwOworICAgIGFzc2VydChwICE9IE5VTEwpOworICAgIHJldHVybiBwOworfQorCitQeU9iamVjdCAqUHlMb25nX0Zyb21Mb25nKGxvbmcgaXZhbCkKK3sKKyAgICBQeU9iamVjdCAqcDsKKyAgICBpbnQgbWF5YmU7CisKKyAgICBpZiAoKGl2YWwgPj0gLTUpICYmIChpdmFsIDwgMjU3ICsgNSkpIHsKKyAgICAgICAgcCA9IGdldF9zbWFsbF9pbnQoaXZhbCk7CisgICAgICAgIGFzc2VydChwICE9IE5VTEwpOworICAgICAgICByZXR1cm4gcDsKKyAgICB9CisgICAgaWYgKG1heWJlKQorICAgICAgICByZXR1cm4gcDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOVUxMOworfQorCitQeU9iamVjdCAqUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MT05HX0xPTkcgaXZhbCkKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWl2YWwpOworfQorCitQeU9iamVjdCAqUHlMb25nX0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgaXZhbCkKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWl2YWwpOworfQorCisvKiB0YWludGVkIHNpbmtzCisgKgorICogQ292ZXJpdHkgY29uc2lkZXJzIGFyZ3YsIGVudmlyb24sIHJlYWQoKSBkYXRhIGV0YyBhcyB0YWluZWQuCisgKi8KKworUHlPYmplY3QgKlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oZmlsZW5hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCisvKiBQeXRob24vZmlsZXV0aWxzLmMgKi8KK3djaGFyX3QgKl9QeV9jaGFyMndjaGFyKGNvbnN0IGNoYXIqIGFyZywgc2l6ZV90ICpzaXplKQoreworICAgd2NoYXJfdCAqdzsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oYXJnKTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oc2l6ZSk7CisgICByZXR1cm4gdzsKK30KKworLyogUGFyc2VyL3BnZW5tYWluLmMgKi8KK2dyYW1tYXIgKmdldGdyYW1tYXIoY2hhciAqZmlsZW5hbWUpCit7CisgICAgZ3JhbW1hciAqZzsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oZmlsZW5hbWUpOworICAgIHJldHVybiBnOworfQorCisvKiBQeXRob24vbWFyc2hhbC5jICovCisKK3N0YXRpYyBQeV9zc2l6ZV90IHJfc3RyaW5nKGNoYXIgKnMsIFB5X3NzaXplX3QgbiwgUkZJTEUgKnApCit7CisgICAgX19jb3Zlcml0eV90YWludGVkX3N0cmluZ19hcmd1bWVudF9fKHMpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyByX2xvbmcoUkZJTEUgKnApCit7CisgICAgbG9uZyBsOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzRdOworCisgICAgcl9zdHJpbmcoKGNoYXIgKilidWZmZXIsIDQsIHApOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9zdHJpbmdfc2FuaXRpemVfY29udGVudF9fKGJ1ZmZlcik7CisgICAgbCA9IChsb25nKWJ1ZmZlcjsKKyAgICByZXR1cm4gbDsKK30KKworLyogQ292ZXJpdHkgZG9lc24ndCB1bmRlcnN0YW5kIHRoYXQgZmRvcGVuZGlyKCkgbWF5IHRha2Ugb3duZXJzaGlwIG9mIGZkLiAqLworCitESVIgKmZkb3BlbmRpcihpbnQgZmQpIHsKKyAgICBESVIgKmQ7CisgICAgaWYgKGQpIHsKKyAgICAgICAgX19jb3Zlcml0eV9jbG9zZV9fKGZkKTsKKyAgICB9CisgICAgcmV0dXJuIGQ7Cit9CisKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbiBiL01pc2MvcHl0aG9uLWNvbmZpZy5pbgppbmRleCBhYzNhMmM3Li4wYjliNWRjIDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi1jb25maWcuaW4KKysrIGIvTWlzYy9weXRob24tY29uZmlnLmluCkBAIC0xLDYgKzEsOCBAQAogIyFARVhFTkFNRUAKICMgLSotIHB5dGhvbiAtKi0KIAorIyBLZWVwIHRoaXMgc2NyaXB0IGluIHN5bmMgd2l0aCBweXRob24tY29uZmlnLnNoLmluCisKIGltcG9ydCBnZXRvcHQKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tY29uZmlnLnNoLmluIGIvTWlzYy9weXRob24tY29uZmlnLnNoLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTNkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4KQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorCisjIEtlZXAgdGhpcyBzY3JpcHQgaW4gc3luYyB3aXRoIHB5dGhvbi1jb25maWcuaW4KKworZXhpdF93aXRoX3VzYWdlICgpCit7CisgICAgZWNobyAiVXNhZ2U6ICQwIC0tcHJlZml4fC0tZXhlYy1wcmVmaXh8LS1pbmNsdWRlc3wtLWxpYnN8LS1jZmxhZ3N8LS1sZGZsYWdzfC0tZXh0ZW5zaW9uLXN1ZmZpeHwtLWhlbHB8LS1hYmlmbGFnc3wtLWNvbmZpZ2RpciIKKyAgICBleGl0ICQxCit9CisKK2lmIFsgIiQxIiA9ICIiIF0gOyB0aGVuCisgICAgZXhpdF93aXRoX3VzYWdlIDEKK2ZpCisKKyMgUmV0dXJucyB0aGUgYWN0dWFsIHByZWZpeCB3aGVyZSB0aGlzIHNjcmlwdCB3YXMgaW5zdGFsbGVkIHRvLgoraW5zdGFsbGVkX3ByZWZpeCAoKQoreworICAgIFJFU1VMVD0kKGRpcm5hbWUgJChjZCAkKGRpcm5hbWUgIiQxIikgJiYgcHdkIC1QKSkKKyAgICBpZiB3aGljaCByZWFkbGluayA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICAgIGlmIHJlYWRsaW5rIC1mICIkUkVTVUxUIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBSRVNVTFQ9JChyZWFkbGluayAtZiAiJFJFU1VMVCIpCisgICAgICAgIGZpCisgICAgZmkKKyAgICBlY2hvICRSRVNVTFQKK30KKworcHJlZml4X2J1aWxkPSJAcHJlZml4QCIKK3ByZWZpeF9yZWFsPSQoaW5zdGFsbGVkX3ByZWZpeCAiJDAiKQorCisjIFVzZSBzZWQgdG8gZml4IHBhdGhzIGZyb20gdGhlaXIgYnVpbHQtdG8gbG9jYXRpb25zIHRvIHRoZWlyIGluc3RhbGxlZC10bworIyBsb2NhdGlvbnMuCitwcmVmaXg9JChlY2hvICIkcHJlZml4X2J1aWxkIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorZXhlY19wcmVmaXhfYnVpbGQ9IkBleGVjX3ByZWZpeEAiCitleGVjX3ByZWZpeD0kKGVjaG8gIiRleGVjX3ByZWZpeF9idWlsZCIgfCBzZWQgInMjJGV4ZWNfcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQoraW5jbHVkZWRpcj0kKGVjaG8gIkBpbmNsdWRlZGlyQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2xpYmRpcj0kKGVjaG8gIkBsaWJkaXJAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorQ0ZMQUdTPSQoZWNobyAiQENGTEFHU0AiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitWRVJTSU9OPSJAVkVSU0lPTkAiCitMSUJNPSJATElCTUAiCitMSUJDPSJATElCQ0AiCitTWVNMSUJTPSIkTElCTSAkTElCQyIKK0FCSUZMQUdTPSJAQUJJRkxBR1NAIgorTElCUz0iQExJQlNAICRTWVNMSUJTIC1scHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IgorQkFTRUNGTEFHUz0iQEJBU0VDRkxBR1NAIgorTERMSUJSQVJZPSJATERMSUJSQVJZQCIKK0xJTktGT1JTSEFSRUQ9IkBMSU5LRk9SU0hBUkVEQCIKK09QVD0iQE9QVEAiCitQWV9FTkFCTEVfU0hBUkVEPSJAUFlfRU5BQkxFX1NIQVJFREAiCitMRFZFUlNJT049IkBMRFZFUlNJT05AIgorTElCREVTVD0ke3ByZWZpeH0vbGliL3B5dGhvbiR7VkVSU0lPTn0KK0xJQlBMPSQoZWNobyAiQExJQlBMQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK1NPPSJAU09AIgorUFlUSE9ORlJBTUVXT1JLPSJAUFlUSE9ORlJBTUVXT1JLQCIKK0lOQ0RJUj0iLUkkaW5jbHVkZWRpci9weXRob24ke1ZFUlNJT059JHtBQklGTEFHU30iCitQTEFUSU5DRElSPSItSSRpbmNsdWRlZGlyL3B5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKKworIyBTY2FuIGZvciAtLWhlbHAgb3IgdW5rbm93biBhcmd1bWVudC4KK2ZvciBBUkcgaW4gJCoKK2RvCisgICAgY2FzZSAkQVJHIGluCisgICAgICAgIC0taGVscCkKKyAgICAgICAgICAgIGV4aXRfd2l0aF91c2FnZSAwCisgICAgICAgIDs7CisgICAgICAgIC0tcHJlZml4fC0tZXhlYy1wcmVmaXh8LS1pbmNsdWRlc3wtLWxpYnN8LS1jZmxhZ3N8LS1sZGZsYWdzfC0tZXh0ZW5zaW9uLXN1ZmZpeHwtLWFiaWZsYWdzfC0tY29uZmlnZGlyKQorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlIDEKKyAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2ZvciBBUkcgaW4gIiRAIgorZG8KKyAgICBjYXNlICIkQVJHIiBpbgorICAgICAgICAtLXByZWZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRwcmVmaXgiCisgICAgICAgIDs7CisgICAgICAgIC0tZXhlYy1wcmVmaXgpCisgICAgICAgICAgICBlY2hvICIkZXhlY19wcmVmaXgiCisgICAgICAgIDs7CisgICAgICAgIC0taW5jbHVkZXMpCisgICAgICAgICAgICBlY2hvICIkSU5DRElSICRQTEFUSU5DRElSIgorICAgICAgICA7OworICAgICAgICAtLWNmbGFncykKKyAgICAgICAgICAgIGVjaG8gIiRJTkNESVIgJFBMQVRJTkNESVIgJEJBU0VDRkxBR1MgJENGTEFHUyAkT1BUIgorICAgICAgICA7OworICAgICAgICAtLWxpYnMpCisgICAgICAgICAgICBlY2hvICIkTElCUyIKKyAgICAgICAgOzsKKyAgICAgICAgLS1sZGZsYWdzKQorICAgICAgICAgICAgTElOS0ZPUlNIQVJFRFVTRUQ9CisgICAgICAgICAgICBpZiBbIC16ICIkUFlUSE9ORlJBTUVXT1JLIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIExJTktGT1JTSEFSRURVU0VEPSRMSU5LRk9SU0hBUkVECisgICAgICAgICAgICBmaQorICAgICAgICAgICAgTElCUExVU0VEPQorICAgICAgICAgICAgaWYgWyAiJFBZX0VOQUJMRV9TSEFSRUQiID0gIjAiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgTElCUExVU0VEPSItTCRMSUJQTCIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlY2hvICIkTElCUExVU0VEIC1MJGxpYmRpciAkTElCUyAkTElOS0ZPUlNIQVJFRFVTRUQiCisgICAgICAgIDs7CisgICAgICAgIC0tZXh0ZW5zaW9uLXN1ZmZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRTTyIKKyAgICAgICAgOzsKKyAgICAgICAgLS1hYmlmbGFncykKKyAgICAgICAgICAgIGVjaG8gIiRBQklGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgLS1jb25maWdkaXIpCisgICAgICAgICAgICBlY2hvICIkTElCUEwiCisgICAgICAgIDs7Citlc2FjCitkb25lCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi13aW5nNS53cHIgYi9NaXNjL3B5dGhvbi13aW5nNS53cHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxYWU2MwotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvcHl0aG9uLXdpbmc1LndwcgpAQCAtMCwwICsxLDE4IEBACisjIXdpbmcKKyMhdmVyc2lvbj01LjAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXaW5nIElERSBwcm9qZWN0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1twcm9qZWN0IGF0dHJpYnV0ZXNdCitwcm9qLmRpcmVjdG9yeS1saXN0ID0gW3snZGlybG9jJzogbG9jKCcuLicpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGVzJzogW3UnLmhnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi91bml0dGVzdC9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvdW5pdHRlc3QvdGVzdC9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnYnVpbGQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnRG9jL2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJzogJyonLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAncmVjdXJzaXZlJzogVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3YXRjaF9mb3JfY2hhbmdlcyc6IFRydWV9XQorcHJvai5maWxlLXR5cGUgPSAnc2hhcmVkJwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24ubWFuIGIvTWlzYy9weXRob24ubWFuCmluZGV4IGJjYjNlYzguLjUyYWVkZWUgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLm1hbgorKysgYi9NaXNjL3B5dGhvbi5tYW4KQEAgLTI2LDExICsyNiwxNCBAQAogLkIgXC1pCiBdCiBbCi0uQiBcLW0KLS5JIG1vZHVsZS1uYW1lCisuQiBcLUkKIF0KIC5icgogICAgICAgIFsKKy5CIFwtbQorLkkgbW9kdWxlLW5hbWUKK10KK1sKIC5CIFwtcQogXQogWwpAQCAtMTM5LDYgKzE0MiwxMyBAQAogdXNlZnVsIHRvIGluc3BlY3QgZ2xvYmFsIHZhcmlhYmxlcyBvciBhIHN0YWNrIHRyYWNlIHdoZW4gYSBzY3JpcHQKIHJhaXNlcyBhbiBleGNlcHRpb24uCiAuVFAKKy5CIFwtSQorUnVuIFB5dGhvbiBpbiBpc29sYXRlZCBtb2RlLiBUaGlzIGFsc28gaW1wbGllcyBcZkJcLUVcZlAgYW5kIFxmQlwtU1xmUC4gSW4KK2lzb2xhdGVkIG1vZGUgc3lzLnBhdGggY29udGFpbnMgbmVpdGhlciB0aGUgc2NyaXB04oCZcyBkaXJlY3Rvcnkgbm9yIHRoZSB1c2Vy4oCZcworc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuIEFsbCBQWVRIT04qIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaWdub3JlZCwgdG9vLgorRnVydGhlciByZXN0cmljdGlvbnMgbWF5IGJlIGltcG9zZWQgdG8gcHJldmVudCB0aGUgdXNlciBmcm9tIGluamVjdGluZworbWFsaWNpb3VzIGNvZGUuCisuVFAKIC5CSSAiXC1tICIgbW9kdWxlLW5hbWUKIFNlYXJjaGVzIAogLkkgc3lzLnBhdGggCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1NldHVwLmRpc3QgYi9Nb2R1bGVzL1NldHVwLmRpc3QKaW5kZXggZjQ1ZGU1Yy4uMDFmYjg1ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9TZXR1cC5kaXN0CisrKyBiL01vZHVsZXMvU2V0dXAuZGlzdApAQCAtMTAyLDcgKzEwMiw3IEBACiAjIHZhcmlvdXMgcmVhc29uczsgdGhlcmVmb3JlIHRoZXkgYXJlIGxpc3RlZCBoZXJlIGluc3RlYWQgb2YgaW4gdGhlCiAjIG5vcm1hbCBvcmRlci4KIAotIyBUaGlzIG9ubHkgY29udGFpbnMgdGhlIG1pbmltYWwgc2V0IG9mIG1vZHVsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZSAKKyMgVGhpcyBvbmx5IGNvbnRhaW5zIHRoZSBtaW5pbWFsIHNldCBvZiBtb2R1bGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUKICMgc2V0dXAucHkgc2NyaXB0IGluIHRoZSByb290IG9mIHRoZSBQeXRob24gc291cmNlIHRyZWUuCiAKIHBvc2l4IHBvc2l4bW9kdWxlLmMJCSMgcG9zaXggKFVOSVgpIHN5c3RlbSBjYWxscwpAQCAtMTEzLDkgKzExMywxMSBAQAogX2NvZGVjcyBfY29kZWNzbW9kdWxlLmMJCSMgYWNjZXNzIHRvIHRoZSBidWlsdGluIGNvZGVjcyBhbmQgY29kZWMgcmVnaXN0cnkKIF93ZWFrcmVmIF93ZWFrcmVmLmMJCSMgd2VhayByZWZlcmVuY2VzCiBfZnVuY3Rvb2xzIF9mdW5jdG9vbHNtb2R1bGUuYyAgICMgVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCBmdW5jdGlvbnMgYW5kIGNhbGxhYmxlIG9iamVjdHMKLW9wZXJhdG9yIG9wZXJhdG9yLmMJICAgICAgICAjIG9wZXJhdG9yLmFkZCgpIGFuZCBzaW1pbGFyIGdvb2RpZXMKK19vcGVyYXRvciBfb3BlcmF0b3IuYwkgICAgICAgICMgb3BlcmF0b3IuYWRkKCkgYW5kIHNpbWlsYXIgZ29vZGllcwogX2NvbGxlY3Rpb25zIF9jb2xsZWN0aW9uc21vZHVsZS5jICMgQ29udGFpbmVyIHR5cGVzCi1pdGVydG9vbHMgaXRlcnRvb2xzbW9kdWxlLmMgICAgIyBGdW5jdGlvbnMgY3JlYXRpbmcgaXRlcmF0b3JzIGZvciBlZmZpY2llbnQgbG9vcGluZyAKK2l0ZXJ0b29scyBpdGVydG9vbHNtb2R1bGUuYyAgICAjIEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nCithdGV4aXQgYXRleGl0bW9kdWxlLmMgICAgICAjIFJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBiZSBydW4gYXQgaW50ZXJwcmV0ZXItc2h1dGRvd24KK19zdGF0IF9zdGF0LmMJCQkjIHN0YXQuaCBpbnRlcmZhY2UKIAogIyBhY2Nlc3MgdG8gSVNPIEMgbG9jYWxlIHN1cHBvcnQKIF9sb2NhbGUgX2xvY2FsZW1vZHVsZS5jICAjIC1saW50bApAQCAtMTMwLDEyICsxMzIsMTUgQEAKICMgZmF1bHRoYW5kbGVyIG1vZHVsZQogZmF1bHRoYW5kbGVyIGZhdWx0aGFuZGxlci5jCiAKKyMgZGVidWcgdG9vbCB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24KK190cmFjZW1hbGxvYyBfdHJhY2VtYWxsb2MuYyBoYXNodGFibGUuYworCiAjIFRoZSByZXN0IG9mIHRoZSBtb2R1bGVzIGxpc3RlZCBpbiB0aGlzIGZpbGUgYXJlIGFsbCBjb21tZW50ZWQgb3V0IGJ5CiAjIGRlZmF1bHQuICBVc3VhbGx5IHRoZXkgY2FuIGJlIGRldGVjdGVkIGFuZCBidWlsdCBhcyBkeW5hbWljYWxseQogIyBsb2FkZWQgbW9kdWxlcyBieSB0aGUgbmV3IHNldHVwLnB5IHNjcmlwdCBhZGRlZCBpbiBQeXRob24gMi4xLiAgSWYKLSMgeW91J3JlIG9uIGEgcGxhdGZvcm0gdGhhdCBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLCB3YW50IHRvIAotIyBjb21waWxlIG1vZHVsZXMgc3RhdGljYWxseSBpbnRvIHRoZSBQeXRob24gYmluYXJ5LCBvciBuZWVkIHRvIAotIyBzcGVjaWZ5IHNvbWUgb2RkIHNldCBvZiBjb21waWxlciBzd2l0Y2hlcywgeW91IGNhbiB1bmNvbW1lbnQgdGhlIAorIyB5b3UncmUgb24gYSBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcsIHdhbnQgdG8KKyMgY29tcGlsZSBtb2R1bGVzIHN0YXRpY2FsbHkgaW50byB0aGUgUHl0aG9uIGJpbmFyeSwgb3IgbmVlZCB0bworIyBzcGVjaWZ5IHNvbWUgb2RkIHNldCBvZiBjb21waWxlciBzd2l0Y2hlcywgeW91IGNhbiB1bmNvbW1lbnQgdGhlCiAjIGFwcHJvcHJpYXRlIGxpbmVzIGJlbG93LgogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE3MCw3ICsxNzUsNiBAQAogI193ZWFrcmVmIF93ZWFrcmVmLmMJIyBiYXNpYyB3ZWFrIHJlZmVyZW5jZSBzdXBwb3J0CiAjX3Rlc3RjYXBpIF90ZXN0Y2FwaW1vZHVsZS5jICAgICMgUHl0aG9uIEMgQVBJIHRlc3QgbW9kdWxlCiAjX3JhbmRvbSBfcmFuZG9tbW9kdWxlLmMJIyBSYW5kb20gbnVtYmVyIGdlbmVyYXRvcgotI2F0ZXhpdCBhdGV4aXRtb2R1bGUuYyAgICAgICMgUmVnaXN0ZXIgZnVuY3Rpb25zIHRvIGJlIHJ1biBhdCBpbnRlcnByZXRlci1zaHV0ZG93bgogI19lbGVtZW50dHJlZSAtSSQoc3JjZGlyKS9Nb2R1bGVzL2V4cGF0IC1ESEFWRV9FWFBBVF9DT05GSUdfSCAtRFVTRV9QWUVYUEFUX0NBUEkgX2VsZW1lbnR0cmVlLmMJIyBlbGVtZW50dHJlZSBhY2NlbGVyYXRvcgogI19waWNrbGUgX3BpY2tsZS5jCSMgcGlja2xlIGFjY2VsZXJhdG9yCiAjX2RhdGV0aW1lIF9kYXRldGltZW1vZHVsZS5jCSMgZGF0ZXRpbWUgYWNjZWxlcmF0b3IKQEAgLTE4NSw3ICsxODksNyBAQAogIyBzdXBwb3J0ZWQuLi4pCiAKICNmY250bCBmY250bG1vZHVsZS5jCSMgZmNudGwoMikgYW5kIGlvY3RsKDIpCi0jc3B3ZCBzcHdkbW9kdWxlLmMJCSMgc3B3ZCgzKSAKKyNzcHdkIHNwd2Rtb2R1bGUuYwkJIyBzcHdkKDMpCiAjZ3JwIGdycG1vZHVsZS5jCQkjIGdycCgzKQogI3NlbGVjdCBzZWxlY3Rtb2R1bGUuYwkjIHNlbGVjdCgyKTsgbm90IG9uIGFuY2llbnQgU3lzdGVtIFYKIApAQCAtMzAxLDcgKzMwNSw3IEBACiAKICNfY3Vyc2VzIF9jdXJzZXNtb2R1bGUuYyAtbGN1cnNlcyAtbHRlcm1jYXAKICMgV3JhcHBlciBmb3IgdGhlIHBhbmVsIGxpYnJhcnkgdGhhdCdzIHBhcnQgb2YgbmN1cnNlcyBhbmQgU1lTViBjdXJzZXMuCi0jX2N1cnNlc19wYW5lbCBfY3Vyc2VzX3BhbmVsLmMgLWxwYW5lbCAtbG5jdXJzZXMgCisjX2N1cnNlc19wYW5lbCBfY3Vyc2VzX3BhbmVsLmMgLWxwYW5lbCAtbG5jdXJzZXMKIAogCiAjIE1vZHVsZXMgdGhhdCBwcm92aWRlIHBlcnNpc3RlbnQgZGljdGlvbmFyeS1saWtlIHNlbWFudGljcy4gIFlvdSB3aWxsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYyBiL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jCmluZGV4IGZhY2E4Y2YuLjAyYjU1ZDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jCkBAIC02LDYgKzYsOCBAQAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKK19QeV9JREVOVElGSUVSKGluc2VydCk7CisKIHN0YXRpYyBQeV9zc2l6ZV90CiBpbnRlcm5hbF9iaXNlY3RfcmlnaHQoUHlPYmplY3QgKmxpc3QsIFB5T2JqZWN0ICppdGVtLCBQeV9zc2l6ZV90IGxvLCBQeV9zc2l6ZV90IGhpKQogewpAQCAtOTAsOCArOTIsNiBAQAogICAgICAgICBpZiAoUHlMaXN0X0luc2VydChsaXN0LCBpbmRleCwgaXRlbSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoaW5zZXJ0KTsKLQogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGxpc3QsICZQeUlkX2luc2VydCwgIm5PIiwgaW5kZXgsIGl0ZW0pOwogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE5NSw3ICsxOTUsNiBAQAogICAgICAgICBpZiAoUHlMaXN0X0luc2VydChsaXN0LCBpbmRleCwgaXRlbSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoaW5zZXJ0KTsKICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChsaXN0LCAmUHlJZF9pbnNlcnQsICJuTyIsIGluZGV4LCBpdGVtKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19iejJtb2R1bGUuYyBiL01vZHVsZXMvX2J6Mm1vZHVsZS5jCmluZGV4IDNmN2E2Y2YuLmZkMDVkZTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2J6Mm1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2J6Mm1vZHVsZS5jCkBAIC0zNiw4ICszNiw2IEBACiAjZGVmaW5lIFJFTEVBU0VfTE9DSyhvYmopCiAjZW5kaWYKIAotI2RlZmluZSBNSU4oWCwgWSkgKCgoWCkgPCAoWSkpID8gKFgpIDogKFkpKQotCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC0xNDksNyArMTQ3LDcgQEAKICAgICBjLT5ienMubmV4dF9pbiA9IGRhdGE7CiAgICAgYy0+YnpzLmF2YWlsX2luID0gMDsKICAgICBjLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwotICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgYy0+YnpzLmF2YWlsX291dCA9IFNNQUxMQ0hVTks7CiAgICAgZm9yICg7OykgewogICAgICAgICBjaGFyICp0aGlzX291dDsKICAgICAgICAgaW50IGJ6ZXJyb3I7CkBAIC0xNTcsNyArMTU1LDcgQEAKICAgICAgICAgLyogT24gYSA2NC1iaXQgc3lzdGVtLCBsZW4gbWlnaHQgbm90IGZpdCBpbiBhdmFpbF9pbiAoYW4gdW5zaWduZWQgaW50KS4KICAgICAgICAgICAgRG8gY29tcHJlc3Npb24gaW4gY2h1bmtzIG9mIG5vIG1vcmUgdGhhbiBVSU5UX01BWCBieXRlcyBlYWNoLiAqLwogICAgICAgICBpZiAoYy0+YnpzLmF2YWlsX2luID09IDAgJiYgbGVuID4gMCkgewotICAgICAgICAgICAgYy0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgICAgICAgICAgYy0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBsZW4gLT0gYy0+YnpzLmF2YWlsX2luOwogICAgICAgICB9CiAKQEAgLTE3Myw3ICsxNzEsNyBAQAogICAgICAgICAgICAgICAgIGMtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgICAgICAgICAgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjLT5ienMuYXZhaWxfb3V0ID0gTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CisgICAgICAgICAgICBjLT5ienMuYXZhaWxfb3V0ID0gKHVuc2lnbmVkIGludClQeV9NSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKICAgICAgICAgfQogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTI1OCw2ICsyNTYsMjQgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQqCitCWjJfTWFsbG9jKHZvaWQqIGN0eCwgaW50IGl0ZW1zLCBpbnQgc2l6ZSkKK3sKKyAgICBpZiAoaXRlbXMgPCAwIHx8IHNpemUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoKHNpemVfdClpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyAoc2l6ZV90KXNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOiBjb21wcmVzcygpIGFuZCBkZWNvbXByZXNzKCkKKyAgICAgICByZWxlYXNlIHRoZSBHSUwgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitCWjJfRnJlZSh2b2lkKiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKIHN0YXRpYyBpbnQKIEJaMkNvbXByZXNzb3JfaW5pdChCWjJDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKQEAgLTI4MCw2ICsyOTYsOSBAQAogICAgIH0KICNlbmRpZgogCisgICAgc2VsZi0+YnpzLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YnpzLmJ6YWxsb2MgPSBCWjJfTWFsbG9jOworICAgIHNlbGYtPmJ6cy5iemZyZWUgPSBCWjJfRnJlZTsKICAgICBiemVycm9yID0gQloyX2J6Q29tcHJlc3NJbml0KCZzZWxmLT5ienMsIGNvbXByZXNzbGV2ZWwsIDAsIDApOwogICAgIGlmIChjYXRjaF9iejJfZXJyb3IoYnplcnJvcikpCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNzksMTAgKzM5OCwxMCBAQAogICAgIGQtPmJ6cy5uZXh0X2luID0gZGF0YTsKICAgICAvKiBPbiBhIDY0LWJpdCBzeXN0ZW0sIGxlbiBtaWdodCBub3QgZml0IGluIGF2YWlsX2luIChhbiB1bnNpZ25lZCBpbnQpLgogICAgICAgIERvIGRlY29tcHJlc3Npb24gaW4gY2h1bmtzIG9mIG5vIG1vcmUgdGhhbiBVSU5UX01BWCBieXRlcyBlYWNoLiAqLwotICAgIGQtPmJ6cy5hdmFpbF9pbiA9IE1JTihsZW4sIFVJTlRfTUFYKTsKKyAgICBkLT5ienMuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KVB5X01JTihsZW4sIFVJTlRfTUFYKTsKICAgICBsZW4gLT0gZC0+YnpzLmF2YWlsX2luOwogICAgIGQtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7Ci0gICAgZC0+YnpzLmF2YWlsX291dCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KTsKKyAgICBkLT5ienMuYXZhaWxfb3V0ID0gU01BTExDSFVOSzsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGNoYXIgKnRoaXNfb3V0OwogICAgICAgICBpbnQgYnplcnJvcjsKQEAgLTQwOCw3ICs0MjcsNyBAQAogICAgICAgICBpZiAoZC0+YnpzLmF2YWlsX2luID09IDApIHsKICAgICAgICAgICAgIGlmIChsZW4gPT0gMCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9pbiA9IE1JTihsZW4sIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgbGVuIC09IGQtPmJ6cy5hdmFpbF9pbjsKICAgICAgICAgfQogICAgICAgICBpZiAoZC0+YnpzLmF2YWlsX291dCA9PSAwKSB7CkBAIC00MTksNyArNDM4LDcgQEAKICAgICAgICAgICAgICAgICBkLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgZGF0YV9zaXplOwogICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZWZ0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZC0+YnpzLmF2YWlsX291dCA9IE1JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOworICAgICAgICAgICAgZC0+YnpzLmF2YWlsX291dCA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGRhdGFfc2l6ZSAhPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCmluZGV4IDQwMDM3YjEuLjBiMDkzYWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCkBAIC0xODksOSArMTg5LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgYzsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciAqcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgY2hhciAqcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgZW5vdWdoIHJvb20gZm9yIGEgaGV4IGVzY2FwZSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKaW5kZXggYzZjNzk4My4uMzEwZTY3MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCkBAIC0zLDMwICszLDMyIEBACiAKIC8qIGNvbGxlY3Rpb25zIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGRlcXVlKCkgZGF0YXR5cGUKICAgIFdyaXR0ZW4gYW5kIG1haW50YWluZWQgYnkgUmF5bW9uZCBELiBIZXR0aW5nZXIgPHB5dGhvbkByY24uY29tPgotICAgQ29weXJpZ2h0IChjKSAyMDA0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKi8KIAogLyogVGhlIGJsb2NrIGxlbmd0aCBtYXkgYmUgc2V0IHRvIGFueSBudW1iZXIgb3ZlciAxLiAgTGFyZ2VyIG51bWJlcnMKLSAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGJ1dCB0YWtlIG1vcmUKLSAqIG1lbW9yeS4gIElkZWFsbHksIEJMT0NLTEVOIHNob3VsZCBiZSBzZXQgd2l0aCBhbiBleWUgdG8gdGhlCi0gKiBsZW5ndGggb2YgYSBjYWNoZSBsaW5lLgorICogcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IsIGdpdmUgZmFzdGVyCisgKiBpbmRleGluZyBhbmQgcm90YXRpb24sIGFuZCByZWR1Y2UgdGhlIGxpbms6OmRhdGEgb3ZlcmhlYWQgcmF0aW8uCisgKgorICogSWRlYWxseSwgdGhlIGJsb2NrIGxlbmd0aCB3aWxsIGJlIHNldCB0byB0d28gbGVzcyB0aGFuIHNvbWUKKyAqIG11bHRpcGxlIG9mIHRoZSBjYWNoZS1saW5lIGxlbmd0aCAoc28gdGhhdCB0aGUgZnVsbCBibG9jaworICogaW5jbHVkaW5nIHRoZSBsZWZ0bGluayBhbmQgcmlnaHRsaW5rIHdpbGwgZml0IG5lYXRseSBpbnRvCisgKiBjYWNoZSBsaW5lcykuCiAgKi8KIAogI2RlZmluZSBCTE9DS0xFTiA2MgogI2RlZmluZSBDRU5URVIgKChCTE9DS0xFTiAtIDEpIC8gMikKIAogLyogQSBgZGVxdWVvYmplY3RgIGlzIGNvbXBvc2VkIG9mIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGBibG9ja2Agbm9kZXMuCi0gKiBUaGlzIGxpc3QgaXMgbm90IGNpcmN1bGFyICh0aGUgbGVmdG1vc3QgYmxvY2sgaGFzIGxlZnRsaW5rPT1OVUxMLAotICogYW5kIHRoZSByaWdodG1vc3QgYmxvY2sgaGFzIHJpZ2h0bGluaz09TlVMTCkuICBBIGRlcXVlIGQncyBmaXJzdAotICogZWxlbWVudCBpcyBhdCBkLmxlZnRibG9ja1tsZWZ0aW5kZXhdIGFuZCBpdHMgbGFzdCBlbGVtZW50IGlzIGF0Ci0gKiBkLnJpZ2h0YmxvY2tbcmlnaHRpbmRleF07IG5vdGUgdGhhdCwgdW5saWtlIGFzIGZvciBQeXRob24gc2xpY2UKLSAqIGluZGljZXMsIHRoZXNlIGluZGljZXMgYXJlIGluY2x1c2l2ZSBvbiBib3RoIGVuZHMuICBCeSBiZWluZyBpbmNsdXNpdmUKLSAqIG9uIGJvdGggZW5kcywgYWxnb3JpdGhtcyBmb3IgbGVmdCBhbmQgcmlnaHQgb3BlcmF0aW9ucyBiZWNvbWUKLSAqIHN5bW1ldHJpY2FsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIGRlc2lnbi4KLSAqCiAgKiBUaGUgbGlzdCBvZiBibG9ja3MgaXMgbmV2ZXIgZW1wdHksIHNvIGQubGVmdGJsb2NrIGFuZCBkLnJpZ2h0YmxvY2sKLSAqIGFyZSBuZXZlciBlcXVhbCB0byBOVUxMLgorICogYXJlIG5ldmVyIGVxdWFsIHRvIE5VTEwuICBUaGUgbGlzdCBpcyBub3QgY2lyY3VsYXIuCisgKgorICogQSBkZXF1ZSBkJ3MgZmlyc3QgZWxlbWVudCBpcyBhdCBkLmxlZnRibG9ja1tsZWZ0aW5kZXhdCisgKiBhbmQgaXRzIGxhc3QgZWxlbWVudCBpcyBhdCBkLnJpZ2h0YmxvY2tbcmlnaHRpbmRleF0uCisgKiBVbmxpa2UgUHl0aG9uIHNsaWNlIGluZGljZXMsIHRoZXNlIGluZGljZXMgYXJlIGluY2x1c2l2ZQorICogb24gYm90aCBlbmRzLiAgVGhpcyBtYWtlcyB0aGUgYWxnb3JpdGhtcyBmb3IgbGVmdCBhbmQKKyAqIHJpZ2h0IG9wZXJhdGlvbnMgbW9yZSBzeW1tZXRyaWNhbCBhbmQgc2ltcGxpZmllcyB0aGUgZGVzaWduLgogICoKICAqIFRoZSBpbmRpY2VzLCBkLmxlZnRpbmRleCBhbmQgZC5yaWdodGluZGV4IGFyZSBhbHdheXMgaW4gdGhlIHJhbmdlCiAgKiAgICAgMCA8PSBpbmRleCA8IEJMT0NLTEVOLgpAQCAtNDcsNDIgKzQ5LDYwIEBACiAKIHR5cGVkZWYgc3RydWN0IEJMT0NLIHsKICAgICBzdHJ1Y3QgQkxPQ0sgKmxlZnRsaW5rOwotICAgIHN0cnVjdCBCTE9DSyAqcmlnaHRsaW5rOwogICAgIFB5T2JqZWN0ICpkYXRhW0JMT0NLTEVOXTsKKyAgICBzdHJ1Y3QgQkxPQ0sgKnJpZ2h0bGluazsKIH0gYmxvY2s7CiAKKy8qIEZvciBkZWJ1ZyBidWlsZHMsIGFkZCBlcnJvciBjaGVja2luZyB0byB0cmFjayB0aGUgZW5kcG9pbnRzCisgKiBpbiB0aGUgY2hhaW4gb2YgbGlua3MuICBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgdGhhdCBsaW5rCisgKiBhc3NpZ25tZW50cyBvbmx5IHRha2UgcGxhY2UgYXQgZW5kcG9pbnRzIHNvIHRoYXQgbGlua3MgYWxyZWFkeQorICogaW4gdXNlIGRvIG5vdCBnZXQgb3ZlcndyaXR0ZW4uCisgKgorICogQ0hFQ0tfRU5EIHNob3VsZCBoYXBwZW4gYmVmb3JlIGVhY2ggYXNzaWdubWVudCB0byBhIGJsb2NrJ3MgbGluayBmaWVsZC4KKyAqIE1BUktfRU5EIHNob3VsZCBoYXBwZW4gd2hlbmV2ZXIgYSBsaW5rIGZpZWxkIGJlY29tZXMgYSBuZXcgZW5kcG9pbnQuCisgKiBUaGlzIGhhcHBlbnMgd2hlbiBuZXcgYmxvY2tzIGFyZSBhZGRlZCBvciB3aGVuZXZlciBhbiBleGlzdGluZworICogYmxvY2sgaXMgZnJlZWQgbGVhdmluZyBhbm90aGVyIGV4aXN0aW5nIGJsb2NrIGFzIHRoZSBuZXcgZW5kcG9pbnQuCisgKi8KKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgTUFSS19FTkQobGluaykgIGxpbmsgPSBOVUxMOworI2RlZmluZSBDSEVDS19FTkQobGluaykgYXNzZXJ0KGxpbmsgPT0gTlVMTCk7CisjZGVmaW5lIENIRUNLX05PVF9FTkQobGluaykgYXNzZXJ0KGxpbmsgIT0gTlVMTCk7CisjZWxzZQorI2RlZmluZSBNQVJLX0VORChsaW5rKQorI2RlZmluZSBDSEVDS19FTkQobGluaykKKyNkZWZpbmUgQ0hFQ0tfTk9UX0VORChsaW5rKQorI2VuZGlmCisKKy8qIEEgc2ltcGxlIGZyZWVsaXN0aW5nIHNjaGVtZSBpcyB1c2VkIHRvIG1pbmltaXplIGNhbGxzIHRvIHRoZSBtZW1vcnkKKyAgIGFsbG9jYXRvci4gIEl0IGFjY29tb2RhdGVzIGNvbW1vbiB1c2UgY2FzZXMgd2hlcmUgbmV3IGJsb2NrcyBhcmUgYmVpbmcKKyAgIGFkZGVkIGF0IGFib3V0IHRoZSBzYW1lIHJhdGUgYXMgb2xkIGJsb2NrcyBhcmUgYmVpbmcgZnJlZWQuCisgKi8KKwogI2RlZmluZSBNQVhGUkVFQkxPQ0tTIDEwCiBzdGF0aWMgUHlfc3NpemVfdCBudW1mcmVlYmxvY2tzID0gMDsKIHN0YXRpYyBibG9jayAqZnJlZWJsb2Nrc1tNQVhGUkVFQkxPQ0tTXTsKIAogc3RhdGljIGJsb2NrICoKLW5ld2Jsb2NrKGJsb2NrICpsZWZ0bGluaywgYmxvY2sgKnJpZ2h0bGluaywgUHlfc3NpemVfdCBsZW4pIHsKK25ld2Jsb2NrKFB5X3NzaXplX3QgbGVuKSB7CiAgICAgYmxvY2sgKmI7Ci0gICAgLyogVG8gcHJldmVudCBsZW4gZnJvbSBvdmVyZmxvd2luZyBQWV9TU0laRV9UX01BWCBvbiA2NC1iaXQgbWFjaGluZXMsIHdlCi0gICAgICogcmVmdXNlIHRvIGFsbG9jYXRlIG5ldyBibG9ja3MgaWYgdGhlIGN1cnJlbnQgbGVuIGlzIGRhbmdlcm91c2x5Ci0gICAgICogY2xvc2UuICBUaGVyZSBpcyBzb21lIGV4dHJhIG1hcmdpbiB0byBwcmV2ZW50IHNwdXJpb3VzIGFyaXRobWV0aWMKLSAgICAgKiBvdmVyZmxvd3MgYXQgdmFyaW91cyBwbGFjZXMuICBUaGUgZm9sbG93aW5nIGNoZWNrIGVuc3VyZXMgdGhhdAotICAgICAqIHRoZSBibG9ja3MgYWxsb2NhdGVkIHRvIHRoZSBkZXF1ZSwgaW4gdGhlIHdvcnN0IGNhc2UsIGNhbiBvbmx5Ci0gICAgICogaGF2ZSBQWV9TU0laRV9UX01BWC0yIGVudHJpZXMgaW4gdG90YWwuCi0gICAgICovCisgICAgLyogVG8gcHJldmVudCBsZW4gZnJvbSBvdmVyZmxvd2luZyBQWV9TU0laRV9UX01BWCwgd2UgcmVmdXNlIHRvCisgICAgICogYWxsb2NhdGUgbmV3IGJsb2NrcyBpZiB0aGUgY3VycmVudCBsZW4gaXMgbmVhcmluZyBvdmVyZmxvdy4gKi8KICAgICBpZiAobGVuID49IFBZX1NTSVpFX1RfTUFYIC0gMipCTE9DS0xFTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYWRkIG1vcmUgYmxvY2tzIHRvIHRoZSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKG51bWZyZWVibG9ja3MpIHsKLSAgICAgICAgbnVtZnJlZWJsb2NrcyAtPSAxOwotICAgICAgICBiID0gZnJlZWJsb2Nrc1tudW1mcmVlYmxvY2tzXTsKLSAgICB9IGVsc2UgewotICAgICAgICBiID0gUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykpOwotICAgICAgICBpZiAoYiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgbnVtZnJlZWJsb2Nrcy0tOworICAgICAgICByZXR1cm4gZnJlZWJsb2Nrc1tudW1mcmVlYmxvY2tzXTsKICAgICB9Ci0gICAgYi0+bGVmdGxpbmsgPSBsZWZ0bGluazsKLSAgICBiLT5yaWdodGxpbmsgPSByaWdodGxpbms7Ci0gICAgcmV0dXJuIGI7CisgICAgYiA9IFB5TWVtX01hbGxvYyhzaXplb2YoYmxvY2spKTsKKyAgICBpZiAoYiAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKyAgICBQeUVycl9Ob01lbW9yeSgpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTcsMTQgKzExNywxMyBAQAogfQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0X1ZBUl9IRUFECiAgICAgYmxvY2sgKmxlZnRibG9jazsKICAgICBibG9jayAqcmlnaHRibG9jazsKICAgICBQeV9zc2l6ZV90IGxlZnRpbmRleDsgICAgICAgLyogaW4gcmFuZ2UoQkxPQ0tMRU4pICovCiAgICAgUHlfc3NpemVfdCByaWdodGluZGV4OyAgICAgIC8qIGluIHJhbmdlKEJMT0NLTEVOKSAqLwotICAgIFB5X3NzaXplX3QgbGVuOworICAgIGxvbmcgc3RhdGU7ICAgICAgICAgICAgICAgICAvKiBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgaW5kaWNlcyBtb3ZlICovCiAgICAgUHlfc3NpemVfdCBtYXhsZW47Ci0gICAgbG9uZyBzdGF0ZTsgICAgICAgICAvKiBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgaW5kaWNlcyBtb3ZlICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfSBkZXF1ZW9iamVjdDsKIApAQCAtMTE4LDkgKzEzNyw5IEBACiAgKi8KIAogI2RlZmluZSBUUklNKGQsIHBvcGZ1bmN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZC0+bWF4bGVuICE9IC0xICYmIGQtPmxlbiA+IGQtPm1heGxlbikgeyAgICAgICAgICAgICAgICBcCisgICAgaWYgKGQtPm1heGxlbiAhPSAtMSAmJiBQeV9TSVpFKGQpID4gZC0+bWF4bGVuKSB7ICAgICAgIFwKICAgICAgICAgUHlPYmplY3QgKnJ2ID0gcG9wZnVuY3Rpb24oZCwgTlVMTCk7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYXNzZXJ0KHJ2ICE9IE5VTEwgICYmICBkLT5sZW4gPD0gZC0+bWF4bGVuKTsgICAgICAgIFwKKyAgICAgICAgYXNzZXJ0KHJ2ICE9IE5VTEwgICYmICBQeV9TSVpFKGQpIDw9IGQtPm1heGxlbik7ICAgIFwKICAgICAgICAgUHlfREVDUkVGKHJ2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKQEAgLTEzNywxOCArMTU2LDIwIEBACiAgICAgaWYgKGRlcXVlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgYiA9IG5ld2Jsb2NrKE5VTEwsIE5VTEwsIDApOworICAgIGIgPSBuZXdibG9jaygwKTsKICAgICBpZiAoYiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihkZXF1ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CisgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKIAogICAgIGFzc2VydChCTE9DS0xFTiA+PSAyKTsKICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CiAgICAgZGVxdWUtPmxlZnRpbmRleCA9IENFTlRFUiArIDE7CiAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBDRU5URVI7Ci0gICAgZGVxdWUtPmxlbiA9IDA7CisgICAgUHlfU0laRShkZXF1ZSkgPSAwOwogICAgIGRlcXVlLT5zdGF0ZSA9IDA7CiAgICAgZGVxdWUtPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBkZXF1ZS0+bWF4bGVuID0gLTE7CkBAIC0xNjIsMTcgKzE4MywxNyBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIGJsb2NrICpwcmV2YmxvY2s7CiAKLSAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaXRlbSA9IGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XTsKICAgICBkZXF1ZS0+cmlnaHRpbmRleC0tOwotICAgIGRlcXVlLT5sZW4tLTsKKyAgICBQeV9TSVpFKGRlcXVlKS0tOwogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOwogICAgICAgICAgICAgLyogcmUtY2VudGVyIGluc3RlYWQgb2YgZnJlZWluZyBhIGJsb2NrICovCkBAIC0xODIsNyArMjAzLDggQEAKICAgICAgICAgICAgIHByZXZibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrLT5sZWZ0bGluazsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBwcmV2YmxvY2stPnJpZ2h0bGluayA9IE5VTEw7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHByZXZibG9jayk7CisgICAgICAgICAgICBNQVJLX0VORChwcmV2YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHByZXZibG9jazsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CkBAIC0xOTgsMTggKzIyMCwxOCBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIGJsb2NrICpwcmV2YmxvY2s7CiAKLSAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gTlVMTCk7CiAgICAgaXRlbSA9IGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF07CiAgICAgZGVxdWUtPmxlZnRpbmRleCsrOwotICAgIGRlcXVlLT5sZW4tLTsKKyAgICBQeV9TSVpFKGRlcXVlKS0tOwogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CiAgICAgICAgICAgICAvKiByZS1jZW50ZXIgaW5zdGVhZCBvZiBmcmVlaW5nIGEgYmxvY2sgKi8KQEAgLTIxOSw4ICsyNDEsOCBAQAogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgcHJldmJsb2NrID0gZGVxdWUtPmxlZnRibG9jay0+cmlnaHRsaW5rOwogICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5sZWZ0YmxvY2spOwotICAgICAgICAgICAgYXNzZXJ0KHByZXZibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIHByZXZibG9jay0+bGVmdGxpbmsgPSBOVUxMOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChwcmV2YmxvY2spOworICAgICAgICAgICAgTUFSS19FTkQocHJldmJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gcHJldmJsb2NrOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KQEAgLTIzNSwxNiArMjU3LDE4IEBACiB7CiAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOLTEpIHsKLSAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhkZXF1ZS0+cmlnaHRibG9jaywgTlVMTCwgZGVxdWUtPmxlbik7CisgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICBpZiAoYiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpOworICAgICAgICBiLT5sZWZ0bGluayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgICAgICBDSEVDS19FTkQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwogICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CisgICAgICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gLTE7CiAgICAgfQogICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICBkZXF1ZS0+bGVuKys7CisgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICBkZXF1ZS0+cmlnaHRpbmRleCsrOwogICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07CiAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wbGVmdCk7CkBAIC0yNTgsMTYgKzI4MiwxOCBAQAogewogICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKLSAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLCBkZXF1ZS0+bGVuKTsKKyAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgIGlmIChiID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOworICAgICAgICBiLT5yaWdodGxpbmsgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgICAgICBDSEVDS19FTkQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmspOwogICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CiAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOworICAgICAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CiAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKICAgICB9CiAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgIGRlcXVlLT5sZW4rKzsKKyAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgIGRlcXVlLT5sZWZ0aW5kZXgtLTsKICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdID0gaXRlbTsKICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3ApOwpAQCAtMzA5LDYgKzMzNSwxNCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNwYWNlIHNhdmluZyBoZXVyaXN0aWMuICBTdGFydCBmaWxsaW5nIGZyb20gdGhlIGxlZnQgKi8KKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgeworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOworICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gMTsKKyAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAwOworICAgIH0KKwogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzE5LDE5ICszNTMsMjAgQEAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+bGVuKTsKKyAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCk7CisgICAgICAgICAgICBiLT5sZWZ0bGluayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKICAgICAgICAgfQotICAgICAgICBkZXF1ZS0+bGVuKys7CisgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4Kys7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07CiAgICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcGxlZnQpOwpAQCAtMzYxLDYgKzM5NiwxNCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNwYWNlIHNhdmluZyBoZXVyaXN0aWMuICBTdGFydCBmaWxsaW5nIGZyb20gdGhlIHJpZ2h0ICovCisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKKyAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDI7CisgICAgfQorCiAgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNzEsMTkgKzQxNCwyMCBAQAogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+bGVuKTsKKyAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOworICAgICAgICAgICAgYi0+cmlnaHRsaW5rID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKICAgICAgICAgfQotICAgICAgICBkZXF1ZS0+bGVuKys7CisgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXgtLTsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSA9IGl0ZW07CiAgICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcCk7CkBAIC00MTMsNyArNDU3LDEzIEBACiBzdGF0aWMgaW50CiBfZGVxdWVfcm90YXRlKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlfc3NpemVfdCBuKQogewotICAgIFB5X3NzaXplX3QgbSwgbGVuPWRlcXVlLT5sZW4sIGhhbGZsZW49bGVuPj4xOworICAgIGJsb2NrICpiID0gTlVMTDsKKyAgICBibG9jayAqbGVmdGJsb2NrID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBibG9jayAqcmlnaHRibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXggPSBkZXF1ZS0+cmlnaHRpbmRleDsKKyAgICBQeV9zc2l6ZV90IGxlbj1QeV9TSVpFKGRlcXVlKSwgaGFsZmxlbj1sZW4+PjE7CisgICAgaW50IHJ2ID0gLTE7CiAKICAgICBpZiAobGVuIDw9IDEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDI5LDc2ICs0NzksMTAzIEBACiAKICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICB3aGlsZSAobiA+IDApIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLCBsZW4pOwotICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCk7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYiA9IG5ld2Jsb2NrKGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYi0+cmlnaHRsaW5rID0gbGVmdGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGxlZnRibG9jay0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGluZGV4ID0gQkxPQ0tMRU47CisgICAgICAgICAgICBiID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA+IDApOworICAgICAgICBhc3NlcnQobGVmdGluZGV4ID4gMCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG0gPSBuOwogCi0gICAgICAgIG0gPSBuOwotICAgICAgICBpZiAobSA+IGRlcXVlLT5yaWdodGluZGV4ICsgMSkKLSAgICAgICAgICAgIG0gPSBkZXF1ZS0+cmlnaHRpbmRleCArIDE7Ci0gICAgICAgIGlmIChtID4gZGVxdWUtPmxlZnRpbmRleCkKLSAgICAgICAgICAgIG0gPSBkZXF1ZS0+bGVmdGluZGV4OwotICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKLSAgICAgICAgbWVtY3B5KCZkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXggLSBtXSwKLSAgICAgICAgICAgICAgICZkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleCArIDEgLSBtXSwKLSAgICAgICAgICAgICAgIG0gKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCAtPSBtOwotICAgICAgICBkZXF1ZS0+bGVmdGluZGV4IC09IG07Ci0gICAgICAgIG4gLT0gbTsKLQotICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIGJsb2NrICpwcmV2YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jay0+bGVmdGxpbms7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2sgIT0gTlVMTCk7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgcHJldmJsb2NrLT5yaWdodGxpbmsgPSBOVUxMOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBwcmV2YmxvY2s7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgICAgIGlmIChtID4gcmlnaHRpbmRleCArIDEpCisgICAgICAgICAgICAgICAgbSA9IHJpZ2h0aW5kZXggKyAxOworICAgICAgICAgICAgaWYgKG0gPiBsZWZ0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IGxlZnRpbmRleDsKKyAgICAgICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOworICAgICAgICAgICAgc3JjID0gJnJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleF07CisgICAgICAgICAgICBkZXN0ID0gJmxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXggLSAxXTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggLT0gbTsKKyAgICAgICAgICAgIGxlZnRpbmRleCAtPSBtOworICAgICAgICAgICAgbiAtPSBtOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICooZGVzdC0tKSA9ICooc3JjLS0pOworICAgICAgICAgICAgfSB3aGlsZSAoLS1tKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmlnaHRpbmRleCA9PSAtMSkgeworICAgICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrKTsKKyAgICAgICAgICAgIGFzc2VydChiID09IE5VTEwpOworICAgICAgICAgICAgYiA9IHJpZ2h0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHJpZ2h0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSByaWdodGJsb2NrLT5sZWZ0bGluazsKKyAgICAgICAgICAgIE1BUktfRU5EKHJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CiAgICAgfQogICAgIHdoaWxlIChuIDwgMCkgewotICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4gLSAxKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLCBsZW4pOwotICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKTsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKKyAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4gLSAxKSB7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYiA9IG5ld2Jsb2NrKGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYi0+bGVmdGxpbmsgPSByaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKHJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOworICAgICAgICAgICAgcmlnaHRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOworICAgICAgICAgICAgcmlnaHRpbmRleCA9IC0xOworICAgICAgICAgICAgYiA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IChkZXF1ZS0+cmlnaHRpbmRleCA8IEJMT0NLTEVOIC0gMSk7CisgICAgICAgIGFzc2VydCAocmlnaHRpbmRleCA8IEJMT0NLTEVOIC0gMSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG0gPSAtbjsKIAotICAgICAgICBtID0gLW47Ci0gICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSBkZXF1ZS0+bGVmdGluZGV4KQotICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIDEgLSBkZXF1ZS0+cmlnaHRpbmRleCkKLSAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIDEgLSBkZXF1ZS0+cmlnaHRpbmRleDsKLSAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7Ci0gICAgICAgIG1lbWNweSgmZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXggKyAxXSwKLSAgICAgICAgICAgICAgICZkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdLAotICAgICAgICAgICAgICAgbSAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggKz0gbTsKLSAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggKz0gbTsKLSAgICAgICAgbiArPSBtOwotCi0gICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBibG9jayAqbmV4dGJsb2NrID0gZGVxdWUtPmxlZnRibG9jay0+cmlnaHRsaW5rOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5sZWZ0YmxvY2spOwotICAgICAgICAgICAgYXNzZXJ0KG5leHRibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIG5leHRibG9jay0+bGVmdGxpbmsgPSBOVUxMOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IG5leHRibG9jazsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAwOworICAgICAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIGxlZnRpbmRleCkKKyAgICAgICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSBsZWZ0aW5kZXg7CisgICAgICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gMSAtIHJpZ2h0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gMSAtIHJpZ2h0aW5kZXg7CisgICAgICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKKyAgICAgICAgICAgIHNyYyA9ICZsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKKyAgICAgICAgICAgIGRlc3QgPSAmcmlnaHRibG9jay0+ZGF0YVtyaWdodGluZGV4ICsgMV07CisgICAgICAgICAgICBsZWZ0aW5kZXggKz0gbTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggKz0gbTsKKyAgICAgICAgICAgIG4gKz0gbTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAqKHNyYysrKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrKTsKKyAgICAgICAgICAgIGFzc2VydChiID09IE5VTEwpOworICAgICAgICAgICAgYiA9IGxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQobGVmdGJsb2NrLT5yaWdodGxpbmspOworICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7CisgICAgICAgICAgICBNQVJLX0VORChsZWZ0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcnYgPSAwOworZG9uZToKKyAgICBpZiAoYiAhPSBOVUxMKQorICAgICAgICBmcmVlYmxvY2soYik7CisgICAgZGVxdWUtPmxlZnRibG9jayA9IGxlZnRibG9jazsKKyAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHJpZ2h0YmxvY2s7CisgICAgZGVxdWUtPmxlZnRpbmRleCA9IGxlZnRpbmRleDsKKyAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IHJpZ2h0aW5kZXg7CisKKyAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01MjMsMTMgKzYwMCwxNSBAQAogICAgIGJsb2NrICpyaWdodGJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleCA9IGRlcXVlLT5yaWdodGluZGV4OwotICAgIFB5X3NzaXplX3QgbiA9IChkZXF1ZS0+bGVuKS8yOworICAgIFB5X3NzaXplX3QgbiA9IChQeV9TSVpFKGRlcXVlKSkvMjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnRtcDsKIAogICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7CiAgICAgICAgIC8qIFZhbGlkYXRlIHRoYXQgcG9pbnRlcnMgaGF2ZW4ndCBtZXQgaW4gdGhlIG1pZGRsZSAqLwogICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2sgfHwgbGVmdGluZGV4IDwgcmlnaHRpbmRleCk7CisgICAgICAgIENIRUNLX05PVF9FTkQobGVmdGJsb2NrKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChyaWdodGJsb2NrKTsKIAogICAgICAgICAvKiBTd2FwICovCiAgICAgICAgIHRtcCA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOwpAQCAtNTM5LDggKzYxOCw2IEBACiAgICAgICAgIC8qIEFkdmFuY2UgbGVmdCBibG9jay9pbmRleCBwYWlyICovCiAgICAgICAgIGxlZnRpbmRleCsrOwogICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBpZiAobGVmdGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOwogICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKICAgICAgICAgfQpAQCAtNTQ4LDggKzYyNSw2IEBACiAgICAgICAgIC8qIFN0ZXAgYmFja3dhcmRzIHdpdGggdGhlIHJpZ2h0IGJsb2NrL2luZGV4IHBhaXIgKi8KICAgICAgICAgcmlnaHRpbmRleC0tOwogICAgICAgICBpZiAocmlnaHRpbmRleCA9PSAtMSkgewotICAgICAgICAgICAgaWYgKHJpZ2h0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByaWdodGJsb2NrID0gcmlnaHRibG9jay0+bGVmdGxpbms7CiAgICAgICAgICAgICByaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CkBAIC01NjMsOSArNjM4LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZV9jb3VudChkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2KQogewotICAgIGJsb2NrICpsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOwotICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICBQeV9zc2l6ZV90IG4gPSBkZXF1ZS0+bGVuOworICAgIGJsb2NrICpiID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IG4gPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBjb3VudCA9IDA7CiAgICAgUHlPYmplY3QgKml0ZW07CkBAIC01NzMsNyArNjQ4LDggQEAKICAgICBpbnQgY21wOwogCiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKLSAgICAgICAgaXRlbSA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOworICAgICAgICBDSEVDS19OT1RfRU5EKGIpOworICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CiAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLCB2LCBQeV9FUSk7CiAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgY291bnQrKzsKQEAgLTU4NywxMiArNjYzLDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBBZHZhbmNlIGxlZnQgYmxvY2svaW5kZXggcGFpciAqLwotICAgICAgICBsZWZ0aW5kZXgrKzsKLSAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICAgICAgaWYgKGxlZnRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpICAvKiBjYW4gb2NjdXIgd2hlbiBpPT1uLTEgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOwotICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgaWYgKGluZGV4ID09IEJMT0NLTEVOKSB7CisgICAgICAgICAgICBiID0gYi0+cmlnaHRsaW5rOworICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoY291bnQpOwpAQCAtNjA0LDE5ICs2NzgsMTkgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBkZXF1ZV9sZW4oZGVxdWVvYmplY3QgKmRlcXVlKQogewotICAgIHJldHVybiBkZXF1ZS0+bGVuOworICAgIHJldHVybiBQeV9TSVpFKGRlcXVlKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX3JlbW92ZShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKLSAgICBQeV9zc2l6ZV90IGksIG49ZGVxdWUtPmxlbjsKKyAgICBQeV9zc2l6ZV90IGksIG49UHlfU0laRShkZXF1ZSk7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqaXRlbSA9IGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF07CiAgICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbSwgdmFsdWUsIFB5X0VRKTsKIAotICAgICAgICBpZiAoZGVxdWUtPmxlbiAhPSBuKSB7CisgICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSAhPSBuKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICAgICAiZGVxdWUgbXV0YXRlZCBkdXJpbmcgcmVtb3ZlKCkuIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY0NywxNCArNzIxLDE0IEBACiB7CiAgICAgUHlPYmplY3QgKml0ZW07CiAKLSAgICB3aGlsZSAoZGVxdWUtPmxlbikgeworICAgIHdoaWxlIChQeV9TSVpFKGRlcXVlKSkgewogICAgICAgICBpdGVtID0gZGVxdWVfcG9wKGRlcXVlLCBOVUxMKTsKICAgICAgICAgYXNzZXJ0IChpdGVtICE9IE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgfQogICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrICYmCiAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggLSAxID09IGRlcXVlLT5yaWdodGluZGV4ICYmCi0gICAgICAgICAgIGRlcXVlLT5sZW4gPT0gMCk7CisgICAgICAgICAgIFB5X1NJWkUoZGVxdWUpID09IDApOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjY0LDcgKzczOCw3IEBACiAgICAgUHlPYmplY3QgKml0ZW07CiAgICAgUHlfc3NpemVfdCBuLCBpbmRleD1pOwogCi0gICAgaWYgKGkgPCAwIHx8IGkgPj0gZGVxdWUtPmxlbikgeworICAgIGlmIChpIDwgMCB8fCBpID49IFB5X1NJWkUoZGVxdWUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImRlcXVlIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY3MywxOSArNzQ3LDE5IEBACiAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICBpID0gZGVxdWUtPmxlZnRpbmRleDsKICAgICAgICAgYiA9IGRlcXVlLT5sZWZ0YmxvY2s7Ci0gICAgfSBlbHNlIGlmIChpID09IGRlcXVlLT5sZW4gLSAxKSB7CisgICAgfSBlbHNlIGlmIChpID09IFB5X1NJWkUoZGVxdWUpIC0gMSkgewogICAgICAgICBpID0gZGVxdWUtPnJpZ2h0aW5kZXg7CiAgICAgICAgIGIgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICB9IGVsc2UgewogICAgICAgICBpICs9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgICAgIG4gPSBpIC8gQkxPQ0tMRU47CiAgICAgICAgIGkgJT0gQkxPQ0tMRU47Ci0gICAgICAgIGlmIChpbmRleCA8IChkZXF1ZS0+bGVuID4+IDEpKSB7CisgICAgICAgIGlmIChpbmRleCA8IChQeV9TSVpFKGRlcXVlKSA+PiAxKSkgewogICAgICAgICAgICAgYiA9IGRlcXVlLT5sZWZ0YmxvY2s7CiAgICAgICAgICAgICB3aGlsZSAobi0tKQogICAgICAgICAgICAgICAgIGIgPSBiLT5yaWdodGxpbms7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBkZXF1ZS0+bGVuIC0gMSkgLyBCTE9DS0xFTiAtIG47CisgICAgICAgICAgICBuID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSAtIDEpIC8gQkxPQ0tMRU4gLSBuOwogICAgICAgICAgICAgYiA9IGRlcXVlLT5yaWdodGJsb2NrOwogICAgICAgICAgICAgd2hpbGUgKG4tLSkKICAgICAgICAgICAgICAgICBiID0gYi0+bGVmdGxpbms7CkBAIC03MDgsNyArNzgyLDcgQEAKIHsKICAgICBQeU9iamVjdCAqaXRlbTsKIAotICAgIGFzc2VydCAoaSA+PSAwICYmIGkgPCBkZXF1ZS0+bGVuKTsKKyAgICBhc3NlcnQgKGkgPj0gMCAmJiBpIDwgUHlfU0laRShkZXF1ZSkpOwogICAgIGlmIChfZGVxdWVfcm90YXRlKGRlcXVlLCAtaSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNzI0LDcgKzc5OCw3IEBACiB7CiAgICAgUHlPYmplY3QgKm9sZF92YWx1ZTsKICAgICBibG9jayAqYjsKLSAgICBQeV9zc2l6ZV90IG4sIGxlbj1kZXF1ZS0+bGVuLCBoYWxmbGVuPShsZW4rMSk+PjEsIGluZGV4PWk7CisgICAgUHlfc3NpemVfdCBuLCBsZW49UHlfU0laRShkZXF1ZSksIGhhbGZsZW49KGxlbisxKT4+MSwgaW5kZXg9aTsKIAogICAgIGlmIChpIDwgMCB8fCBpID49IGxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKQEAgLTc4NywxNyArODYxLDE3IEBACiAgICAgUHlfc3NpemVfdCBpbmRleDsKICAgICBQeV9zc2l6ZV90IGluZGV4bG8gPSBkZXF1ZS0+bGVmdGluZGV4OwogCi0gICAgZm9yIChiID0gZGVxdWUtPmxlZnRibG9jazsgYiAhPSBOVUxMOyBiID0gYi0+cmlnaHRsaW5rKSB7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgaW5kZXhoaSA9IGIgPT0gZGVxdWUtPnJpZ2h0YmxvY2sgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggOgotICAgICAgICAgICAgICAgICAgICAgQkxPQ0tMRU4gLSAxOwotCi0gICAgICAgIGZvciAoaW5kZXggPSBpbmRleGxvOyBpbmRleCA8PSBpbmRleGhpOyArK2luZGV4KSB7CisgICAgZm9yIChiID0gZGVxdWUtPmxlZnRibG9jazsgYiAhPSBkZXF1ZS0+cmlnaHRibG9jazsgYiA9IGItPnJpZ2h0bGluaykgeworICAgICAgICBmb3IgKGluZGV4ID0gaW5kZXhsbzsgaW5kZXggPCBCTE9DS0xFTiA7IGluZGV4KyspIHsKICAgICAgICAgICAgIGl0ZW0gPSBiLT5kYXRhW2luZGV4XTsKICAgICAgICAgICAgIFB5X1ZJU0lUKGl0ZW0pOwogICAgICAgICB9CiAgICAgICAgIGluZGV4bG8gPSAwOwogICAgIH0KKyAgICBmb3IgKGluZGV4ID0gaW5kZXhsbzsgaW5kZXggPD0gZGVxdWUtPnJpZ2h0aW5kZXg7IGluZGV4KyspIHsKKyAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOworICAgICAgICBQeV9WSVNJVChpdGVtKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg4Nyw4ICs5NjEsOCBAQAogICAgIH0KIAogICAgIC8qIFNob3J0Y3V0cyAqLwotICAgIHZzID0gKChkZXF1ZW9iamVjdCAqKXYpLT5sZW47Ci0gICAgd3MgPSAoKGRlcXVlb2JqZWN0ICopdyktPmxlbjsKKyAgICB2cyA9IFB5X1NJWkUoKGRlcXVlb2JqZWN0ICopdik7CisgICAgd3MgPSBQeV9TSVpFKChkZXF1ZW9iamVjdCAqKXcpOwogICAgIGlmIChvcCA9PSBQeV9FUSkgewogICAgICAgICBpZiAodiA9PSB3KQogICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CkBAIC05ODksOCArMTA2Myw4IEBACiAgICAgUHlfc3NpemVfdCBibG9ja3M7CiAKICAgICByZXMgPSBzaXplb2YoZGVxdWVvYmplY3QpOwotICAgIGJsb2NrcyA9IChkZXF1ZS0+bGVmdGluZGV4ICsgZGVxdWUtPmxlbiArIEJMT0NLTEVOIC0gMSkgLyBCTE9DS0xFTjsKLSAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCArIGRlcXVlLT5sZW4gLSAxID09CisgICAgYmxvY2tzID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSArIEJMT0NLTEVOIC0gMSkgLyBCTE9DS0xFTjsKKyAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCArIFB5X1NJWkUoZGVxdWUpIC0gMSA9PQogICAgICAgICAgICAoYmxvY2tzIC0gMSkgKiBCTE9DS0xFTiArIGRlcXVlLT5yaWdodGluZGV4KTsKICAgICByZXMgKz0gYmxvY2tzICogc2l6ZW9mKGJsb2NrKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CkBAIC0xMTQzLDcgKzEyMTcsNyBAQAogICAgIFB5X0lOQ1JFRihkZXF1ZSk7CiAgICAgaXQtPmRlcXVlID0gZGVxdWU7CiAgICAgaXQtPnN0YXRlID0gZGVxdWUtPnN0YXRlOwotICAgIGl0LT5jb3VudGVyID0gZGVxdWUtPmxlbjsKKyAgICBpdC0+Y291bnRlciA9IFB5X1NJWkUoZGVxdWUpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaXQ7CiB9CkBAIC0xMTgyLDcgKzEyNTYsNyBAQAogICAgIGl0LT5pbmRleCsrOwogICAgIGl0LT5jb3VudGVyLS07CiAgICAgaWYgKGl0LT5pbmRleCA9PSBCTE9DS0xFTiAmJiBpdC0+Y291bnRlciA+IDApIHsKLSAgICAgICAgYXNzZXJ0IChpdC0+Yi0+cmlnaHRsaW5rICE9IE5VTEwpOworICAgICAgICBDSEVDS19OT1RfRU5EKGl0LT5iLT5yaWdodGxpbmspOwogICAgICAgICBpdC0+YiA9IGl0LT5iLT5yaWdodGxpbms7CiAgICAgICAgIGl0LT5pbmRleCA9IDA7CiAgICAgfQpAQCAtMTIzMCw3ICsxMzA0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZWl0ZXJfcmVkdWNlKGRlcXVlaXRlcm9iamVjdCAqaXQpCiB7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT24pIiwgUHlfVFlQRShpdCksIGl0LT5kZXF1ZSwgaXQtPmRlcXVlLT5sZW4gLSBpdC0+Y291bnRlcik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT24pIiwgUHlfVFlQRShpdCksIGl0LT5kZXF1ZSwgUHlfU0laRShpdC0+ZGVxdWUpIC0gaXQtPmNvdW50ZXIpOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgZGVxdWVpdGVyX21ldGhvZHNbXSA9IHsKQEAgLTEyOTksNyArMTM3Myw3IEBACiAgICAgUHlfSU5DUkVGKGRlcXVlKTsKICAgICBpdC0+ZGVxdWUgPSBkZXF1ZTsKICAgICBpdC0+c3RhdGUgPSBkZXF1ZS0+c3RhdGU7Ci0gICAgaXQtPmNvdW50ZXIgPSBkZXF1ZS0+bGVuOworICAgIGl0LT5jb3VudGVyID0gUHlfU0laRShkZXF1ZSk7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilpdDsKIH0KQEAgLTEzMjQsNyArMTM5OCw3IEBACiAgICAgaXQtPmluZGV4LS07CiAgICAgaXQtPmNvdW50ZXItLTsKICAgICBpZiAoaXQtPmluZGV4ID09IC0xICYmIGl0LT5jb3VudGVyID4gMCkgewotICAgICAgICBhc3NlcnQgKGl0LT5iLT5sZWZ0bGluayAhPSBOVUxMKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChpdC0+Yi0+bGVmdGxpbmspOwogICAgICAgICBpdC0+YiA9IGl0LT5iLT5sZWZ0bGluazsKICAgICAgICAgaXQtPmluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgIH0KQEAgLTE3NDIsNyArMTgxNiw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvdW5kX2dldCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobWFwcGluZywgImdldCIpOworICAgICAgICBib3VuZF9nZXQgPSBfUHlPYmplY3RfR2V0QXR0cklkKG1hcHBpbmcsICZQeUlkX2dldCk7CiAgICAgICAgIGlmIChib3VuZF9nZXQgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3N2LmMgYi9Nb2R1bGVzL19jc3YuYwppbmRleCA0OGE1Y2Y4Li4xODNhOWE1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jc3YuYworKysgYi9Nb2R1bGVzL19jc3YuYwpAQCAtNTEsNyArNTEsNyBAQAogdHlwZWRlZiBlbnVtIHsKICAgICBTVEFSVF9SRUNPUkQsIFNUQVJUX0ZJRUxELCBFU0NBUEVEX0NIQVIsIElOX0ZJRUxELAogICAgIElOX1FVT1RFRF9GSUVMRCwgRVNDQVBFX0lOX1FVT1RFRF9GSUVMRCwgUVVPVEVfSU5fUVVPVEVEX0ZJRUxELAotICAgIEVBVF9DUk5MCisgICAgRUFUX0NSTkwsQUZURVJfRVNDQVBFRF9DUk5MCiB9IFBhcnNlclN0YXRlOwogCiB0eXBlZGVmIGVudW0gewpAQCAtNTQ2LDcgKzU0NiwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBmaWVsZCA9IHRtcDsKICAgICB9Ci0gICAgUHlMaXN0X0FwcGVuZChzZWxmLT5maWVsZHMsIGZpZWxkKTsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChzZWxmLT5maWVsZHMsIGZpZWxkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGZpZWxkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBQeV9ERUNSRUYoZmllbGQpOwogICAgIHJldHVybiAwOwogfQpAQCAtNjQ0LDYgKzY0NywxMiBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVNDQVBFRF9DSEFSOgorICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGM9PSdccicpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZV9hZGRfY2hhcihzZWxmLCBjKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgc2VsZi0+c3RhdGUgPSBBRlRFUl9FU0NBUEVEX0NSTkw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBpZiAoYyA9PSAnXDAnKQogICAgICAgICAgICAgYyA9ICdcbic7CiAgICAgICAgIGlmIChwYXJzZV9hZGRfY2hhcihzZWxmLCBjKSA8IDApCkBAIC02NTEsNiArNjYwLDExIEBACiAgICAgICAgIHNlbGYtPnN0YXRlID0gSU5fRklFTEQ7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBBRlRFUl9FU0NBUEVEX0NSTkw6CisgICAgICAgIGlmIChjID09ICdcMCcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLypmYWxsdGhydSovCisKICAgICBjYXNlIElOX0ZJRUxEOgogICAgICAgICAvKiBpbiB1bnF1b3RlZCBmaWVsZCAqLwogICAgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcMCcpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCmluZGV4IDdkMGQyNTguLjgyMGE2MDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwpAQCAtMjc4LDggKzI3OCwxMCBAQAogICAgIGlmIChwcmVmaXgpCiAgICAgICAgIGxlbiArPSBzdHJsZW4ocHJlZml4KTsKICAgICByZXN1bHQgPSBQeU1lbV9NYWxsb2MobGVuICsgMSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgc3RyY3B5KHJlc3VsdCwgcHJlZml4KTsKICAgICBlbHNlCkBAIC00MjgsMTMgKzQzMCw3IEBACiAgICAgU3RnRGljdE9iamVjdCAqZGljdCA9IFB5VHlwZV9zdGdkaWN0KHR5cGUpOwogICAgIGFzc2VydCAoZGljdCk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xpOmZyb21fYnVmZmVyIiwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfG46ZnJvbV9idWZmZXIiLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvYmosICZvZmZzZXQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xuOmZyb21fYnVmZmVyIiwgJm9iaiwgJm9mZnNldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKC0xID09IFB5T2JqZWN0X0FzV3JpdGVCdWZmZXIob2JqLCAmYnVmZmVyLCAmYnVmZmVyX2xlbikpCkBAIC00NDcsMTEgKzQ0Myw3IEBACiAgICAgfQogICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyX2xlbiAtIG9mZnNldCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJWQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlZCBieXRlcykiLAotI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCV6ZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICV6ZCBieXRlcykiLAotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNDYyLDcgKzQ1NCw2IEBACiAKICAgICBQeV9JTkNSRUYob2JqKTsKICAgICBpZiAoLTEgPT0gS2VlcFJlZigoQ0RhdGFPYmplY3QgKilyZXN1bHQsIC0xLCBvYmopKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ4NCwxMyArNDc1LDcgQEAKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlUeXBlX3N0Z2RpY3QodHlwZSk7CiAgICAgYXNzZXJ0IChkaWN0KTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfGk6ZnJvbV9idWZmZXIiLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98bjpmcm9tX2J1ZmZlciIsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJm9mZnNldCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46ZnJvbV9idWZmZXIiLCAmb2JqLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoLTEgPT0gUHlPYmplY3RfQXNSZWFkQnVmZmVyKG9iaiwgKGNvbnN0IHZvaWQqKikmYnVmZmVyLCAmYnVmZmVyX2xlbikpCkBAIC01MDQsMTEgKzQ4OSw3IEBACiAKICAgICBpZiAoZGljdC0+c2l6ZSA+IGJ1ZmZlcl9sZW4gLSBvZmZzZXQpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCVkIGluc3RlYWQgb2YgYXQgbGVhc3QgJWQgYnl0ZXMpIiwKLSNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglemQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlemQgYnl0ZXMpIiwKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2xlbiwgZGljdC0+c2l6ZSArIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEzMjYsOSArMTMwNywxMSBAQAogICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBzdGdkaWN0LT5uZGltID0gaXRlbWRpY3QtPm5kaW0gKyAxOwotICAgIHN0Z2RpY3QtPnNoYXBlID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90ICopICogc3RnZGljdC0+bmRpbSk7Ci0gICAgaWYgKHN0Z2RpY3QtPnNoYXBlID09IE5VTEwpCisgICAgc3RnZGljdC0+c2hhcGUgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5X3NzaXplX3QpICogc3RnZGljdC0+bmRpbSk7CisgICAgaWYgKHN0Z2RpY3QtPnNoYXBlID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgc3RnZGljdC0+c2hhcGVbMF0gPSBsZW5ndGg7CiAgICAgbWVtbW92ZSgmc3RnZGljdC0+c2hhcGVbMV0sIGl0ZW1kaWN0LT5zaGFwZSwKICAgICAgICAgc2l6ZW9mKFB5X3NzaXplX3QpICogKHN0Z2RpY3QtPm5kaW0gLSAxKSk7CkBAIC0xMzU5LDcgKzEzNDIsOCBAQAogICAgIGlmICgtMSA9PSBQeURpY3RfVXBkYXRlKChQeU9iamVjdCAqKXN0Z2RpY3QsIHJlc3VsdC0+dHBfZGljdCkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgUHlfREVDUkVGKHJlc3VsdC0+dHBfZGljdCk7Ci0gICAgcmVzdWx0LT50cF9kaWN0ID0gKFB5T2JqZWN0ICopc3RnZGljdDsKKyAgICByZXN1bHQtPnRwX2RpY3QgPSAoUHlPYmplY3QgKilzdGdkaWN0OyAgLyogc3RlYWwgdGhlIHJlZmVyZW5jZSAqLworICAgIHN0Z2RpY3QgPSBOVUxMOwogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBjaGFyYWN0ZXIgYXJyYXlzLgogICAgICAgIEEgcGVybWFuZW50IGFubm95YW5jZTogY2hhciBhcnJheXMgYXJlIGFsc28gc3RyaW5ncyEKQEAgLTIyNjEsNiArMjI0NSwxMCBAQAogICAgICAgIGFyZ3R5cGVzIHdvdWxkIGJlIGEgY3R5cGVzIHR5cGUpLgogICAgICovCiAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJYe30iKTsKKyAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKXN0Z2RpY3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgc3RnZGljdC0+ZmxhZ3MgfD0gVFlQRUZMQUdfSVNQT0lOVEVSOwogCiAgICAgLyogY3JlYXRlIHRoZSBuZXcgaW5zdGFuY2UgKHdoaWNoIGlzIGEgY2xhc3MsCkBAIC0yMzQzLDYgKzIzMzEsOCBAQAogICAgIGlmIChzZWxmLT5iX29iamVjdHMgPT0gTlVMTCkgewogICAgICAgICBpZiAoc2VsZi0+Yl9sZW5ndGgpIHsKICAgICAgICAgICAgIHNlbGYtPmJfb2JqZWN0cyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5iX29iamVjdHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgICAgIHNlbGYtPmJfb2JqZWN0cyA9IFB5X05vbmU7CkBAIC0yMzU0LDcgKzIzNDQsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBHZXRLZWVwZWRPYmplY3RzKENEYXRhT2JqZWN0ICp0YXJnZXQpCiB7Ci0gICAgcmV0dXJuIFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCktPmJfb2JqZWN0czsKKyAgICBDRGF0YU9iamVjdCAqY29udGFpbmVyOworICAgIGNvbnRhaW5lciA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCk7CisgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gY29udGFpbmVyLT5iX29iamVjdHM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDExLDYgKzI0MDUsMTAgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG9iID0gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KTsKKyAgICBpZiAob2IgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa2VlcCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgaWYgKG9iLT5iX29iamVjdHMgPT0gTlVMTCB8fCAhUHlEaWN0X0NoZWNrRXhhY3Qob2ItPmJfb2JqZWN0cykpIHsKICAgICAgICAgUHlfWERFQ1JFRihvYi0+Yl9vYmplY3RzKTsKICAgICAgICAgb2ItPmJfb2JqZWN0cyA9IGtlZXA7IC8qIHJlZmNvdW50IGNvbnN1bWVkICovCkBAIC0yNzk3LDYgKzI3OTUsOSBAQAogICAgICAgICAgICAgLyogWFhYICovOwogCiAgICAgICAgIHZhbHVlID0gR2V0S2VlcGVkT2JqZWN0cyhzcmMpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CkBAIC0yODIwLDYgKzI4MjEsOSBAQAogICAgICAgICAqKHZvaWQgKiopcHRyID0gc3JjLT5iX3B0cjsKIAogICAgICAgICBrZWVwID0gR2V0S2VlcGVkT2JqZWN0cyhzcmMpOworICAgICAgICBpZiAoa2VlcCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgLyoKICAgICAgICAgICBXZSBhcmUgYXNzaWduaW5nIGFuIGFycmF5IG9iamVjdCB0byBhIGZpZWxkIHdoaWNoIHJlcHJlc2VudHMKICAgICAgICAgICBhIHBvaW50ZXIuIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBjb252ZXJ0aW5nIGFuIGFycmF5CkBAIC00MDUwLDggKzQwNTQsOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKSB7Ci0gICAgICAgIGludCByZXMgPSBfaW5pdF9wb3NfYXJncyhzZWxmLCBQeV9UWVBFKHNlbGYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywga3dkcywgMCk7CisgICAgICAgIFB5X3NzaXplX3QgcmVzID0gX2luaXRfcG9zX2FyZ3Moc2VsZiwgUHlfVFlQRShzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLCBrd2RzLCAwKTsKICAgICAgICAgaWYgKHJlcyA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHJlcyA8IFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKQEAgLTQyMjIsNyArNDIyNiw3IEBACiAgICAgICAgICAgICBpICs9IHNlbGYtPmJfbGVuZ3RoOwogICAgICAgICByZXR1cm4gQXJyYXlfaXRlbShteXNlbGYsIGkpOwogICAgIH0KLSAgICBlbHNlIGlmIFB5U2xpY2VfQ2hlY2soaXRlbSkgeworICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaXRlbSkpIHsKICAgICAgICAgU3RnRGljdE9iamVjdCAqc3RnZGljdCwgKml0ZW1kaWN0OwogICAgICAgICBQeU9iamVjdCAqcHJvdG87CiAgICAgICAgIFB5T2JqZWN0ICpucDsKQEAgLTQyOTgsNiArNDMwMiwxMCBAQAogICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOwogICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gQXJyYXlfaXRlbShteXNlbGYsIGN1cik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5wKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShucCwgaSwgdik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5wOwpAQCAtNDgxMiw2ICs0ODIwLDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAga2VlcCA9IEdldEtlZXBlZE9iamVjdHMoZHN0KTsKKyAgICBpZiAoa2VlcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICBQeV9JTkNSRUYoa2VlcCk7CiAgICAgcmV0dXJuIEtlZXBSZWYoc2VsZiwgMCwga2VlcCk7CiB9CkBAIC01MjE4LDkgKzUyMjksMTQgQEAKICAgICAgKi8KICAgICBpZiAoQ0RhdGFPYmplY3RfQ2hlY2soc3JjKSkgewogICAgICAgICBDRGF0YU9iamVjdCAqb2JqID0gKENEYXRhT2JqZWN0ICopc3JjOworICAgICAgICBDRGF0YU9iamVjdCAqY29udGFpbmVyOworCiAgICAgICAgIC8qIFB5Q0RhdGFfR2V0Q29udGFpbmVyIHdpbGwgaW5pdGlhbGl6ZSBzcmMuYl9vYmplY3RzLCB3ZSBuZWVkCiAgICAgICAgICAgIHRoaXMgc28gaXQgY2FuIGJlIHNoYXJlZCAqLwotICAgICAgICBQeUNEYXRhX0dldENvbnRhaW5lcihvYmopOworICAgICAgICBjb250YWluZXIgPSBQeUNEYXRhX0dldENvbnRhaW5lcihvYmopOworICAgICAgICBpZiAoY29udGFpbmVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKwogICAgICAgICAvKiBCdXQgd2UgbmVlZCBhIGRpY3Rpb25hcnkhICovCiAgICAgICAgIGlmIChvYmotPmJfb2JqZWN0cyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoUHlfTm9uZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKaW5kZXggYTNkMjMyMS4uZWM4ZmQxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwpAQCAtOTgsMjAgKzk4LDM3IEBACiAgICAgUHlPYmplY3QgKnB5X2dsb2JhbHMgPSAwOwogICAgIFB5Q29kZU9iamVjdCAqcHlfY29kZSA9IDA7CiAgICAgUHlGcmFtZU9iamVjdCAqcHlfZnJhbWUgPSAwOworICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRiOworCisgICAgLyogKFNhdmUgYW5kKSBDbGVhciB0aGUgY3VycmVudCBleGNlcHRpb24uIFB5dGhvbiBmdW5jdGlvbnMgbXVzdCBub3QgYmUKKyAgICAgICBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LiBDYWxsaW5nIFB5dGhvbiBmdW5jdGlvbnMgaGFwcGVucyB3aGVuCisgICAgICAgdGhlIGNvZGVjIG9mIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIGlzIGltcGxlbWVudGVkIGluIHB1cmUgUHl0aG9uLiAqLworICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2YWx1ZSwgJnRiKTsKIAogICAgIHB5X2dsb2JhbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFweV9nbG9iYWxzKSBnb3RvIGJhZDsKKyAgICBpZiAoIXB5X2dsb2JhbHMpCisgICAgICAgIGdvdG8gYmFkOwogICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBsaW5lbm8pOwotICAgIGlmICghcHlfY29kZSkgZ290byBiYWQ7CisgICAgaWYgKCFweV9jb2RlKQorICAgICAgICBnb3RvIGJhZDsKICAgICBweV9mcmFtZSA9IFB5RnJhbWVfTmV3KAogICAgICAgICBQeVRocmVhZFN0YXRlX0dldCgpLCAvKlB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwqLwogICAgICAgICBweV9jb2RlLCAgICAgICAgICAgICAvKlB5Q29kZU9iamVjdCAqY29kZSwqLwogICAgICAgICBweV9nbG9iYWxzLCAgICAgICAgICAvKlB5T2JqZWN0ICpnbG9iYWxzLCovCiAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIC8qUHlPYmplY3QgKmxvY2FscyovCiAgICAgICAgICk7Ci0gICAgaWYgKCFweV9mcmFtZSkgZ290byBiYWQ7CisgICAgaWYgKCFweV9mcmFtZSkKKyAgICAgICAgZ290byBiYWQ7CiAgICAgcHlfZnJhbWUtPmZfbGluZW5vID0gbGluZW5vOworCisgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiAgICAgUHlUcmFjZUJhY2tfSGVyZShweV9mcmFtZSk7CisKKyAgICBQeV9ERUNSRUYocHlfZ2xvYmFscyk7CisgICAgUHlfREVDUkVGKHB5X2NvZGUpOworICAgIFB5X0RFQ1JFRihweV9mcmFtZSk7CisgICAgcmV0dXJuOworCiAgIGJhZDoKICAgICBQeV9YREVDUkVGKHB5X2dsb2JhbHMpOwogICAgIFB5X1hERUNSRUYocHlfY29kZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCmluZGV4IDA5ZWI2NTMuLjc0MTE5YTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCkBAIC0yNjEsMTggKzI2MSwxOCBAQAogICAgICAgICAgICB0byBhIHZpcnR1YWwgYWRkcmVzcyBmb3Igd2hpY2ggaXQgZG9lcyBub3QKICAgICAgICAgICAgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgYWNjZXNzLiAqLwogICAgICAgICBpZiAocHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzBdID09IDApCi0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiByZWFkaW5nICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiB3cml0aW5nICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0JSRUFLUE9JTlQ6CiAgICAgICAgIC8qIEEgYnJlYWtwb2ludCB3YXMgZW5jb3VudGVyZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYnJlYWtwb2ludCBlbmNvdW50ZXJlZCIpOwogICAgICAgICBicmVhazsKIApAQCAtMjgyLDE0ICsyODIsMTQgQEAKICAgICAgICAgICAgYWxpZ25tZW50LiBGb3IgZXhhbXBsZSwgMTYtYml0IHZhbHVlcyBtdXN0IGJlCiAgICAgICAgICAgIGFsaWduZWQgb24gMi1ieXRlIGJvdW5kYXJpZXMsIDMyLWJpdCB2YWx1ZXMgb24KICAgICAgICAgICAgNC1ieXRlIGJvdW5kYXJpZXMsIGFuZCBzbyBvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBkYXRhdHlwZSBtaXNhbGlnbm1lbnQiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9TSU5HTEVfU1RFUDoKICAgICAgICAgLyogQSB0cmFjZSB0cmFwIG9yIG90aGVyIHNpbmdsZS1pbnN0cnVjdGlvbiBtZWNoYW5pc20KICAgICAgICAgICAgc2lnbmFsZWQgdGhhdCBvbmUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc2luZ2xlIHN0ZXAiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBhY2Nlc3MgYW4gYXJyYXkgZWxlbWVudAogICAgICAgICAgICB0aGF0IGlzIG91dCBvZiBib3VuZHMsIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZQogICAgICAgICAgICBzdXBwb3J0cyBib3VuZHMgY2hlY2tpbmcuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYXJyYXkgYm91bmRzIGV4Y2VlZGVkIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMDYsMjggKzMwNiwyOCBAQAogICAgICAgICAgICBpcyBkZW5vcm1hbC4gQSBkZW5vcm1hbCB2YWx1ZSBpcyBvbmUgdGhhdCBpcyB0b28KICAgICAgICAgICAgc21hbGwgdG8gcmVwcmVzZW50IGFzIGEgc3RhbmRhcmQgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgdmFsdWUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXRpbmctcG9pbnQgb3BlcmFuZCBkZW5vcm1hbCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9ESVZJREVfQllfWkVSTzoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGEgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgdmFsdWUgYnkgYSBmbG9hdGluZy1wb2ludCBkaXZpc29yIG9mIHplcm8uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgZGl2aWRlIGJ5IHplcm8iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5FWEFDVF9SRVNVTFQ6CiAgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gY2Fubm90IGJlCiAgICAgICAgICAgIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBkZWNpbWFsIGZyYWN0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGluZXhhY3QiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5WQUxJRF9PUEVSQVRJT046CiAgICAgICAgIC8qIFRoaXMgZXhjZXB0aW9uIHJlcHJlc2VudHMgYW55IGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIGV4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGludmFsaWQgb3BlcmF0aW9uIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMzUsMjEgKzMzNSwyMSBAQAogICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMKICAgICAgICAgICAgZ3JlYXRlciB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUKICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX1NUQUNLX0NIRUNLOgogICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CiAgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXIvdW5kZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fU1RBQ0tfT1ZFUkZMT1c6CiAgICAgICAgIC8qIFRoZSBzdGFjayBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkIGFzIHRoZSByZXN1bHQKICAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3ZlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM1NywyMSArMzU3LDIxIEBACiAgICAgICAgIC8qIFRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBpcyBsZXNzCiAgICAgICAgICAgIHRoYW4gdGhlIG1hZ25pdHVkZSBhbGxvd2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgIHR5cGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgdW5kZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fSU5UX0RJVklERV9CWV9aRVJPOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBkaXZpZGUgYW4gaW50ZWdlciB2YWx1ZSBieQogICAgICAgICAgICBhbiBpbnRlZ2VyIGRpdmlzb3Igb2YgemVyby4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIGRpdmlkZSBieSB6ZXJvIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fSU5UX09WRVJGTE9XOgogICAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGFuIGludGVnZXIgb3BlcmF0aW9uIGNhdXNlZCBhIGNhcnJ5CiAgICAgICAgICAgIG91dCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHJlc3VsdC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNzksMTQgKzM3OSwxNCBAQAogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBleGVjdXRlIGFuIGluc3RydWN0aW9uCiAgICAgICAgICAgIHdob3NlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudAogICAgICAgICAgICBtYWNoaW5lIG1vZGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogcHJpdmlsZWRnZWQgaW5zdHJ1Y3Rpb24iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9OT05DT05USU5VQUJMRV9FWENFUFRJT046CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGNvbnRpbnVlIGV4ZWN1dGlvbiBhZnRlciBhCiAgICAgICAgICAgIG5vbmNvbnRpbnVhYmxlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBub2NvbnRpbnVhYmxlIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC02MjAsNiArNjIwLDggQEAKICAgICAgICAgYXNzZXJ0KGRpY3QtPnBhcmFtZnVuYyk7CiAgICAgICAgIC8qIElmIGl0IGhhcyBhbiBzdGdkaWN0LCBpdCBpcyBhIENEYXRhT2JqZWN0ICovCiAgICAgICAgIGNhcmcgPSBkaWN0LT5wYXJhbWZ1bmMoKENEYXRhT2JqZWN0ICopb2JqKTsKKyAgICAgICAgaWYgKGNhcmcgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcGEtPmZmaV90eXBlID0gY2FyZy0+cGZmaV90eXBlOwogICAgICAgICBtZW1jcHkoJnBhLT52YWx1ZSwgJmNhcmctPnZhbHVlLCBzaXplb2YocGEtPnZhbHVlKSk7CiAgICAgICAgIHBhLT5rZWVwID0gKFB5T2JqZWN0ICopY2FyZzsKQEAgLTExMDUsOSArMTEwNyw3IEBACiAgICAgICAgIGlmIChhcmd0eXBlcyAmJiBhcmd0eXBlX2NvdW50ID4gaSkgewogICAgICAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgICAgICBjb252ZXJ0ZXIgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R5cGVzLCBpKTsKLSAgICAgICAgICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNvbnZlcnRlciwgYXJnLCBOVUxMKTsKICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeUV4Y19BcmdFcnJvciwgImFyZ3VtZW50ICVkOiAiLCBpKzEpOwogICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKQEAgLTEyNzIsNjIgKzEyNzIsNiBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCi0vKiBvYnNvbGV0ZSwgc2hvdWxkIGJlIHJlbW92ZWQgKi8KLS8qIE9ubHkgdXNlZCBieSBzYW1wbGUgY29kZSAoaW4gc2FtcGxlc1xXaW5kb3dzXENPTS5weSkgKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1jYWxsX2NvbW1ldGhvZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSVVua25vd24gKnBJdW5rOwotICAgIGludCBpbmRleDsKLSAgICBQeU9iamVjdCAqYXJndW1lbnRzOwotICAgIFBQUk9DICpscFZ0Ymw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBDRGF0YU9iamVjdCAqcGNvbTsKLSAgICBQeU9iamVjdCAqYXJndHlwZXMgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPaU8hfE8hIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjb20sICZpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3R5cGVzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoYXJndHlwZXMgJiYgKFB5VHVwbGVfR0VUX1NJWkUoYXJndW1lbnRzKSAhPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3R5cGVzKSkpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgdGFrZXMgJWQgYXJndW1lbnRzICglZCBnaXZlbikiLAotICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShhcmd0eXBlcyksIFB5VHVwbGVfR0VUX1NJWkUoYXJndW1lbnRzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghQ0RhdGFPYmplY3RfQ2hlY2socGNvbSkgfHwgKHBjb20tPmJfc2l6ZSAhPSBzaXplb2Yodm9pZCAqKSkpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJDT00gUG9pbnRlciBleHBlY3RlZCBpbnN0ZWFkIG9mICVzIGluc3RhbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocGNvbSktPnRwX25hbWUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoKCoodm9pZCAqKikocGNvbS0+Yl9wdHIpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBDT00gJ3RoaXMnIHBvaW50ZXIgaXMgTlVMTCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBwSXVuayA9IChJVW5rbm93biAqKSgqKHZvaWQgKiopKHBjb20tPmJfcHRyKSk7Ci0gICAgbHBWdGJsID0gKFBQUk9DICopKHBJdW5rLT5scFZ0YmwpOwotCi0gICAgcmVzdWx0ID0gIF9jdHlwZXNfY2FsbHByb2MobHBWdGJsW2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKLSNpZmRlZiBNU19XSU4zMgotICAgICAgICAgICAgICAgICAgICAgICAgcEl1bmssCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBGVU5DRkxBR19IUkVTVUxULCAvKiBmbGFncyAqLwotICAgICAgICAgICAgICAgIGFyZ3R5cGVzLCAvKiBzZWxmLT5hcmd0eXBlcyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KLSAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBjaGFyIGNvcHlfY29tX3BvaW50ZXJfZG9jW10gPQogIkNvcHlDb21Qb2ludGVyKHNyYywgZHN0KSAtPiBIUkVTVUxUIHZhbHVlXG4iOwogCkBAIC0xNDg5LDkgKzE0MzMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ0ZMQUdfQ0RFQ0wsIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+YXJndHlwZXMgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCi0gICAgICAgICAgICAgICAgTlVMTCk7IC8qIGNoZWNrZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPmFyZ3R5cGVzICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4MjIsNyArMTc2Niw2IEBACiAgICAgeyJGb3JtYXRFcnJvciIsIGZvcm1hdF9lcnJvciwgTUVUSF9WQVJBUkdTLCBmb3JtYXRfZXJyb3JfZG9jfSwKICAgICB7IkxvYWRMaWJyYXJ5IiwgbG9hZF9saWJyYXJ5LCBNRVRIX1ZBUkFSR1MsIGxvYWRfbGlicmFyeV9kb2N9LAogICAgIHsiRnJlZUxpYnJhcnkiLCBmcmVlX2xpYnJhcnksIE1FVEhfVkFSQVJHUywgZnJlZV9saWJyYXJ5X2RvY30sCi0gICAgeyJjYWxsX2NvbW1ldGhvZCIsIGNhbGxfY29tbWV0aG9kLCBNRVRIX1ZBUkFSR1MgfSwKICAgICB7Il9jaGVja19IUkVTVUxUIiwgY2hlY2tfaHJlc3VsdCwgTUVUSF9WQVJBUkdTfSwKICNlbHNlCiAgICAgeyJkbG9wZW4iLCBweV9kbF9vcGVuLCBNRVRIX1ZBUkFSR1MsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCmluZGV4IGJmNDIwOTMuLjk2ODI2YjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCkBAIC0zOCwxMiArMzgsMTMgQEAKIC8qQG91dEAqLwlmZmlfdHlwZSoJYXJnKQogewogLypALXVzZWRlZkAqLworCWZmaV90eXBlKioJcHRyOwogCiAJaWYgKGFyZyA9PSBOVUxMIHx8IGFyZy0+ZWxlbWVudHMgPT0gTlVMTCB8fAogCQlhcmctPnNpemUgIT0gMCB8fCBhcmctPmFsaWdubWVudCAhPSAwKQogCQlyZXR1cm4gRkZJX0JBRF9UWVBFREVGOwogCi0JZmZpX3R5cGUqKglwdHIgPSAmKGFyZy0+ZWxlbWVudHNbMF0pOworICAgIHB0ciA9ICYoYXJnLT5lbGVtZW50c1swXSk7CiAKIAl3aGlsZSAoKCpwdHIpICE9IE5VTEwpCiAJewpAQCAtMTM1LDE2ICsxMzYsMTYgQEAKIC8qQGRlcGVuZGVudEAqLyAvKkBvdXRAKi8gLypAcGFydGlhbEAqLyBmZmlfdHlwZSoJcnR5cGUsIAogLypAZGVwZW5kZW50QCovCQkJZmZpX3R5cGUqKgkJYXR5cGVzKQogeworCXVuc2lnbmVkIGludAlieXRlcwk9IDA7CisJdW5zaWduZWQgaW50CWk7CisJZmZpX3R5cGUqKgkJcHRyOworCiAJaWYgKGNpZiA9PSBOVUxMKQogCQlyZXR1cm4gRkZJX0JBRF9UWVBFREVGOwogCiAJaWYgKGFiaSA8PSBGRklfRklSU1RfQUJJIHx8IGFiaSA+IEZGSV9ERUZBVUxUX0FCSSkKIAkJcmV0dXJuIEZGSV9CQURfQUJJOwogCi0JdW5zaWduZWQgaW50CWJ5dGVzCT0gMDsKLQl1bnNpZ25lZCBpbnQJaTsKLQlmZmlfdHlwZSoqCQlwdHI7Ci0KIAljaWYtPmFiaSA9IGFiaTsKIAljaWYtPmFyZ190eXBlcyA9IGF0eXBlczsKIAljaWYtPm5hcmdzID0gbmFyZ3M7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKaW5kZXggMmFmZmIxNC4uZjI2MTBjMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYwpAQCAtMjI1LDE0ICsyMjUsMTYgQEAKIAkJCS8qIE1lcmdlIHRoZSBmaWVsZHMgb2Ygc3RydWN0dXJlLiAgKi8KIAkJCWZvciAocHRyID0gdHlwZS0+ZWxlbWVudHM7ICpwdHIgIT0gTlVMTDsgcHRyKyspCiAJCQl7CisJCQkJaW50IG51bSwgcG9zOworCiAJCQkJYnl0ZV9vZmZzZXQgPSBBTElHTihieXRlX29mZnNldCwgKCpwdHIpLT5hbGlnbm1lbnQpOwogCi0JCQkJaW50CW51bSA9IGNsYXNzaWZ5X2FyZ3VtZW50KCpwdHIsIHN1YmNsYXNzZXMsIGJ5dGVfb2Zmc2V0ICUgOCk7CisJCQkJbnVtID0gY2xhc3NpZnlfYXJndW1lbnQoKnB0ciwgc3ViY2xhc3NlcywgYnl0ZV9vZmZzZXQgJSA4KTsKIAogCQkJCWlmIChudW0gPT0gMCkKIAkJCQkJcmV0dXJuIDA7CiAKLQkJCQlpbnQgcG9zID0gYnl0ZV9vZmZzZXQgLyA4OworCQkJCXBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKIAkJCQl7CkBAIC01ODksMTEgKzU5MSwxMiBAQAogCXZvaWQJCQkoKmZ1bikoZmZpX2NpZiosIHZvaWQqLCB2b2lkKiosIHZvaWQqKSwKIAl2b2lkKgkJCXVzZXJfZGF0YSkKIHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqCXRyYW1wOworCiAJaWYgKGNpZi0+YWJpICE9IEZGSV9VTklYNjQpCiAJCXJldHVybiBGRklfQkFEX0FCSTsKIAotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0Kgl0cmFtcCA9Ci0JCSh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopJmNsb3N1cmUtPnRyYW1wWzBdOworCXRyYW1wID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikmY2xvc3VyZS0+dHJhbXBbMF07CiAKIAl0cmFtcFswXSA9IDB4YmI0OTsJCS8qIG1vdiA8Y29kZT4sICVyMTEJKi8KIAkqKHZvaWQqIHZvbGF0aWxlKikmdHJhbXBbMV0gPSBmZmlfY2xvc3VyZV91bml4NjQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jIGIvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYwppbmRleCAyNWQ5OTk2Li5iOTViMGE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKQEAgLTQxNyw2ICs0MTcsOCBAQAogICAgICAgICAgICB0aGF0KS4gVXNlICdCJyBmb3IgYnl0ZXMuICovCiAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiQiIpOwogICAgIH0KKyAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKIAogI2RlZmluZSByZWFsZGljdCAoKFB5T2JqZWN0ICopJnN0Z2RpY3QtPmRpY3QpCiAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CkBAIC00ODMsNyArNDg1LDcgQEAKICAgICAgICAgICAgIGNoYXIgKmZpZWxkZm10ID0gZGljdC0+Zm9ybWF0ID8gZGljdC0+Zm9ybWF0IDogIkIiOwogICAgICAgICAgICAgY2hhciAqZmllbGRuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKTsKICAgICAgICAgICAgIGNoYXIgKnB0cjsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOyAKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogICAgICAgICAgICAgY2hhciAqYnVmOwogCiAgICAgICAgICAgICBpZiAoZmllbGRuYW1lID09IE5VTEwpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYyBiL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jCmluZGV4IGY1NjA3MDIuLjg3YjljMDUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jCisrKyBiL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIHsKICAgICBsaXN0X29mX3BhbmVscyAqbmV3OwogCi0gICAgaWYgKChuZXcgPSAobGlzdF9vZl9wYW5lbHMgKiltYWxsb2Moc2l6ZW9mKGxpc3Rfb2ZfcGFuZWxzKSkpID09IE5VTEwpIHsKKyAgICBpZiAoKG5ldyA9IChsaXN0X29mX3BhbmVscyAqKVB5TWVtX01hbGxvYyhzaXplb2YobGlzdF9vZl9wYW5lbHMpKSkgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgdGVtcCA9IGxvcDsKICAgICBpZiAodGVtcC0+cG8gPT0gcG8pIHsKICAgICAgICAgbG9wID0gdGVtcC0+bmV4dDsKLSAgICAgICAgZnJlZSh0ZW1wKTsKKyAgICAgICAgUHlNZW1fRnJlZSh0ZW1wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB3aGlsZSAodGVtcC0+bmV4dCA9PSBOVUxMIHx8IHRlbXAtPm5leHQtPnBvICE9IHBvKSB7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICAgfQogICAgIG4gPSB0ZW1wLT5uZXh0LT5uZXh0OwotICAgIGZyZWUodGVtcC0+bmV4dCk7CisgICAgUHlNZW1fRnJlZSh0ZW1wLT5uZXh0KTsKICAgICB0ZW1wLT5uZXh0ID0gbjsKICAgICByZXR1cm47CiB9CkBAIC01MTMsNiArNTEzLDggQEAKICAgICAgICAgZ290byBmYWlsOwogCiAgICAgaW1wb3J0X2N1cnNlcygpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGZhaWw7CiAKICAgICAvKiBGb3IgZXhjZXB0aW9uIF9jdXJzZXNfcGFuZWwuZXJyb3IgKi8KICAgICBfY3Vyc2VzX3BhbmVsc3RhdGUobSktPlB5Q3Vyc2VzRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9jdXJzZXNfcGFuZWwuZXJyb3IiLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jIGIvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKaW5kZXggZjVkZjgwYy4uOThiODFmZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKQEAgLTEzNCw2ICsxMzQsMTIgQEAKICNkZWZpbmUgU1RSSUNUX1NZU1ZfQ1VSU0VTCiAjZW5kaWYKIAorLypbY2xpbmljXQorbW9kdWxlIGN1cnNlcworY2xhc3MgY3Vyc2VzLndpbmRvdworW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIC8qIERlZmluaXRpb24gb2YgZXhjZXB0aW9uIGN1cnNlcy5lcnJvciAqLwogCiBzdGF0aWMgUHlPYmplY3QgKlB5Q3Vyc2VzRXJyb3I7CkBAIC0xNjgsMTAgKzE3NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBjYWxsIHN0YXJ0X2NvbG9yKCkgZmlyc3QiKTsgICAgICAgXAogICAgICAgICByZXR1cm4gMDsgfQogCi0jaWZuZGVmIE1JTgotI2RlZmluZSBNSU4oeCx5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQotI2VuZGlmCi0KIC8qIFV0aWxpdHkgRnVuY3Rpb25zICovCiAKIC8qCkBAIC01MzMsNyArNTM1LDcgQEAKICAgICB3byA9IFB5T2JqZWN0X05FVyhQeUN1cnNlc1dpbmRvd09iamVjdCwgJlB5Q3Vyc2VzV2luZG93X1R5cGUpOwogICAgIGlmICh3byA9PSBOVUxMKSByZXR1cm4gTlVMTDsKICAgICB3by0+d2luID0gd2luOwotICAgIHdvLT5lbmNvZGluZyA9IHN0cmR1cChlbmNvZGluZyk7CisgICAgd28tPmVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChlbmNvZGluZyk7CiAgICAgaWYgKHdvLT5lbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRih3byk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC01NDcsNzQgKzU0OSwxNDQgQEAKIHsKICAgICBpZiAod28tPndpbiAhPSBzdGRzY3IpIGRlbHdpbih3by0+d2luKTsKICAgICBpZiAod28tPmVuY29kaW5nICE9IE5VTEwpCi0gICAgICAgIGZyZWUod28tPmVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fRnJlZSh3by0+ZW5jb2RpbmcpOwogICAgIFB5T2JqZWN0X0RFTCh3byk7CiB9CiAKIC8qIEFkZGNoLCBBZGRzdHIsIEFkZG5zdHIgKi8KIAorLypbY2xpbmljXQorCitjdXJzZXMud2luZG93LmFkZGNoCisKKyAgICBbCisgICAgeDogaW50CisgICAgICBYLWNvb3JkaW5hdGUuCisgICAgeTogaW50CisgICAgICBZLWNvb3JkaW5hdGUuCisgICAgXQorCisgICAgY2g6IG9iamVjdAorICAgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKworICAgIFsKKyAgICBhdHRyOiBsb25nCisgICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgIF0KKyAgICAvCisKK1BhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIuCisKK1BhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIsCitvdmVyd3JpdGluZyBhbnkgY2hhcmFjdGVyIHByZXZpb3VzbHkgcGFpbnRlZCBhdCB0aGF0IGxvY2F0aW9uLgorQnkgZGVmYXVsdCwgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgYXR0cmlidXRlcyBhcmUgdGhlCitjdXJyZW50IHNldHRpbmdzIGZvciB0aGUgd2luZG93IG9iamVjdC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKGN1cnNlc193aW5kb3dfYWRkY2hfX2RvY19fLAorImFkZGNoKFt4LCB5LF0gY2gsIFthdHRyXSlcbiIKKyJQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLlxuIgorIlxuIgorIiAgeFxuIgorIiAgICBYLWNvb3JkaW5hdGUuXG4iCisiICB5XG4iCisiICAgIFktY29vcmRpbmF0ZS5cbiIKKyIgIGNoXG4iCisiICAgIENoYXJhY3RlciB0byBhZGQuXG4iCisiICBhdHRyXG4iCisiICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuXG4iCisiXG4iCisiUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0cixcbiIKKyJvdmVyd3JpdGluZyBhbnkgY2hhcmFjdGVyIHByZXZpb3VzbHkgcGFpbnRlZCBhdCB0aGF0IGxvY2F0aW9uLlxuIgorIkJ5IGRlZmF1bHQsIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMgYXJlIHRoZVxuIgorImN1cnJlbnQgc2V0dGluZ3MgZm9yIHRoZSB3aW5kb3cgb2JqZWN0LiIpOworCisjZGVmaW5lIENVUlNFU19XSU5ET1dfQUREQ0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImFkZGNoIiwgKFB5Q0Z1bmN0aW9uKWN1cnNlc193aW5kb3dfYWRkY2gsIE1FVEhfVkFSQVJHUywgY3Vyc2VzX3dpbmRvd19hZGRjaF9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotUHlDdXJzZXNXaW5kb3dfQWRkQ2goUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgZ3JvdXBfbGVmdF8xLCBpbnQgeCwgaW50IHksIFB5T2JqZWN0ICpjaCwgaW50IGdyb3VwX3JpZ2h0XzEsIGxvbmcgYXR0cik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjdXJzZXNfd2luZG93X2FkZGNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgcnRuLCB4LCB5LCB1c2VfeHkgPSBGQUxTRTsKLSAgICBQeU9iamVjdCAqY2hvYmo7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGdyb3VwX2xlZnRfMSA9IDA7CisgICAgaW50IHggPSAwOworICAgIGludCB5ID0gMDsKKyAgICBQeU9iamVjdCAqY2g7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIGxvbmcgYXR0ciA9IDA7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86YWRkY2giLCAmY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2w6YWRkY2giLCAmY2gsICZhdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPOmFkZGNoIiwgJngsICZ5LCAmY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ3JvdXBfbGVmdF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpT2w6YWRkY2giLCAmeCwgJnksICZjaCwgJmF0dHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBncm91cF9sZWZ0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiY3Vyc2VzLndpbmRvdy5hZGRjaCByZXF1aXJlcyAxIHRvIDQgYXJndW1lbnRzIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuX3ZhbHVlID0gY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKHNlbGYsIGdyb3VwX2xlZnRfMSwgeCwgeSwgY2gsIGdyb3VwX3JpZ2h0XzEsIGF0dHIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2N1cnNlc193aW5kb3dfYWRkY2hfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGdyb3VwX2xlZnRfMSwgaW50IHgsIGludCB5LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpCisvKltjbGluaWMgY2hlY2tzdW06IDQ0ZWQ5NThiODkxY2RlOTEyMDVlNTg0Yzc2NmUwNDhmMzk5OTcxNGZdKi8KK3sKKyAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqY3dzZWxmID0gKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICopc2VsZjsKKyAgICBpbnQgY29vcmRpbmF0ZXNfZ3JvdXAgPSBncm91cF9sZWZ0XzE7CisgICAgaW50IGF0dHJfZ3JvdXAgPSBncm91cF9yaWdodF8xOworICAgIGludCBydG47CiAgICAgaW50IHR5cGU7Ci0gICAgY2h0eXBlIGNoOworICAgIGNodHlwZSBjY2g7CiAjaWZkZWYgSEFWRV9OQ1VSU0VTVwogICAgIGNjaGFyX3Qgd2NoOwogI2VuZGlmCi0gICAgYXR0cl90IGF0dHIgPSBBX05PUk1BTDsKLSAgICBsb25nIGxhdHRyOwogICAgIGNvbnN0IGNoYXIgKmZ1bmNuYW1lOwogCi0gICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTztjaCBvciBpbnQiLCAmY2hvYmopKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbDtjaCBvciBpbnQsYXR0ciIsICZjaG9iaiwgJmxhdHRyKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhdHRyID0gbGF0dHI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpTzt5LHgsY2ggb3IgaW50IiwgJnksICZ4LCAmY2hvYmopKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHVzZV94eSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpT2w7eSx4LGNoIG9yIGludCwgYXR0ciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeSwgJngsICZjaG9iaiwgJmxhdHRyKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhdHRyID0gbGF0dHI7Ci0gICAgICAgIHVzZV94eSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhZGRjaCByZXF1aXJlcyAxIHRvIDQgYXJndW1lbnRzIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIWF0dHJfZ3JvdXApCisgICAgICBhdHRyID0gQV9OT1JNQUw7CiAKICNpZmRlZiBIQVZFX05DVVJTRVNXCi0gICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3Qoc2VsZiwgY2hvYmosICZjaCwgJndjaCk7CisgICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3QoY3dzZWxmLCBjaCwgJmNjaCwgJndjaCk7CiAgICAgaWYgKHR5cGUgPT0gMikgewogICAgICAgICBmdW5jbmFtZSA9ICJhZGRfd2NoIjsKICAgICAgICAgd2NoLmF0dHIgPSBhdHRyOwotICAgICAgICBpZiAodXNlX3h5ID09IFRSVUUpCi0gICAgICAgICAgICBydG4gPSBtdndhZGRfd2NoKHNlbGYtPndpbix5LHgsICZ3Y2gpOworICAgICAgICBpZiAoY29vcmRpbmF0ZXNfZ3JvdXApCisgICAgICAgICAgICBydG4gPSBtdndhZGRfd2NoKGN3c2VsZi0+d2luLHkseCwgJndjaCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcnRuID0gd2FkZF93Y2goc2VsZi0+d2luLCAmd2NoKTsKKyAgICAgICAgICAgIHJ0biA9IHdhZGRfd2NoKGN3c2VsZi0+d2luLCAmd2NoKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAjZWxzZQotICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KHNlbGYsIGNob2JqLCAmY2gpOworICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KGN3c2VsZiwgY2gsICZjY2gpOwogI2VuZGlmCiAgICAgaWYgKHR5cGUgPT0gMSkgewogICAgICAgICBmdW5jbmFtZSA9ICJhZGRjaCI7Ci0gICAgICAgIGlmICh1c2VfeHkgPT0gVFJVRSkKLSAgICAgICAgICAgIHJ0biA9IG12d2FkZGNoKHNlbGYtPndpbix5LHgsIGNoIHwgYXR0cik7CisgICAgICAgIGlmIChjb29yZGluYXRlc19ncm91cCkKKyAgICAgICAgICAgIHJ0biA9IG12d2FkZGNoKGN3c2VsZi0+d2luLHkseCwgY2NoIHwgYXR0cik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcnRuID0gd2FkZGNoKHNlbGYtPndpbiwgY2ggfCBhdHRyKTsKKyAgICAgICAgICAgIHJ0biA9IHdhZGRjaChjd3NlbGYtPndpbiwgY2NoIHwgYXR0cik7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC0xMjEyLDcgKzEyODQsNyBAQAogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtuIiwgJm4pKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcnRuMiA9IHdnZXRuc3RyKHNlbGYtPndpbixydG4sTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CkBAIC0xMjMyLDExICsxMzA0LDExIEBACiAjaWZkZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgcnRuMiA9IHdtb3ZlKHNlbGYtPndpbix5LHgpPT1FUlIgPyBFUlIgOgotICAgICAgICB3Z2V0bnN0cihzZWxmLT53aW4sIHJ0biwgTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZWxzZQogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJ0bjIgPSBtdndnZXRuc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBNSU4obiwgMTAyMykpOworICAgICAgICBydG4yID0gbXZ3Z2V0bnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICNlbmRpZgogICAgICAgICBicmVhazsKQEAgLTEzNzQsNyArMTQ0Niw3IEBACiAgICAgY2FzZSAxOgogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtuIiwgJm4pKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJ0bjIgPSB3aW5uc3RyKHNlbGYtPndpbixydG4sTUlOKG4sMTAyMykpOworICAgICAgICBydG4yID0gd2lubnN0cihzZWxmLT53aW4sIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7eSx4IiwmeSwmeCkpCkBAIC0xMzg0LDcgKzE0NTYsNyBAQAogICAgIGNhc2UgMzoKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWk7eSx4LG4iLCAmeSwgJngsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBydG4yID0gbXZ3aW5uc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBNSU4obiwxMDIzKSk7CisgICAgICAgIHJ0bjIgPSBtdndpbm5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIFB5X01JTihuLDEwMjMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluc3RyIHJlcXVpcmVzIDAgb3IgMyBhcmd1bWVudHMiKTsKQEAgLTE2OTgsMjYgKzE3NzAsMjQgQEAKICAgICAvKiBXZSBoYXZlIHRvIHNpbXVsYXRlIHRoaXMgYnkgd3JpdGluZyB0byBhIHRlbXBvcmFyeSBGSUxFKiwKICAgICAgICB0aGVuIHJlYWRpbmcgYmFjaywgdGhlbiB3cml0aW5nIHRvIHRoZSBhcmd1bWVudCBzdHJlYW0uICovCiAgICAgY2hhciBmblsxMDBdOwotICAgIGludCBmZDsKLSAgICBGSUxFICpmcDsKLSAgICBQeU9iamVjdCAqcmVzOworICAgIGludCBmZCA9IC0xOworICAgIEZJTEUgKmZwID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIHN0cmNweShmbiwgIi90bXAvcHkuY3Vyc2VzLnB1dHdpbi5YWFhYWFgiKTsKICAgICBmZCA9IG1rc3RlbXAoZm4pOwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBmcCA9IGZkb3BlbihmZCwgIndiKyIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgcmVzID0gUHlDdXJzZXNDaGVja0VSUihwdXR3aW4oc2VsZi0+d2luLCBmcCksICJwdXR3aW4iKTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgZnNlZWsoZnAsIDAsIDApOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGNoYXIgYnVmW0JVRlNJWl07CkBAIC0xNzMxLDcgKzE4MDEsMTIgQEAKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGZjbG9zZShmcCk7CisKK2V4aXQ6CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgIGZjbG9zZShmcCk7CisgICAgZWxzZSBpZiAoZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKGZkKTsKICAgICByZW1vdmUoZm4pOwogICAgIHJldHVybiByZXM7CiB9CkBAIC0xOTQyLDIwICsyMDE3LDIwIEBACiAgICAgYXNjaWkgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZyh2YWx1ZSk7CiAgICAgaWYgKGFzY2lpID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBlbmNvZGluZyA9IHN0cmR1cChQeUJ5dGVzX0FTX1NUUklORyhhc2NpaSkpOworICAgIGVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChQeUJ5dGVzX0FTX1NUUklORyhhc2NpaSkpOwogICAgIFB5X0RFQ1JFRihhc2NpaSk7CiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBmcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKICAgICBzZWxmLT5lbmNvZGluZyA9IGVuY29kaW5nOwogICAgIHJldHVybiAwOwogfQogCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBQeUN1cnNlc1dpbmRvd19NZXRob2RzW10gPSB7Ci0gICAgeyJhZGRjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkQ2gsIE1FVEhfVkFSQVJHU30sCisgICAgQ1VSU0VTX1dJTkRPV19BRERDSF9NRVRIT0RERUYKICAgICB7ImFkZG5zdHIiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGROU3RyLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiYWRkc3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZFN0ciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImF0dHJvZmYiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyT2ZmLCBNRVRIX1ZBUkFSR1N9LApAQCAtMjI1NiwxMiArMjMzMSwxMyBAQAogUHlDdXJzZXNfR2V0V2luKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyZWFtKQogewogICAgIGNoYXIgZm5bMTAwXTsKLSAgICBpbnQgZmQ7Ci0gICAgRklMRSAqZnA7CisgICAgaW50IGZkID0gLTE7CisgICAgRklMRSAqZnAgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpkYXRhOwogICAgIHNpemVfdCBkYXRhbGVuOwogICAgIFdJTkRPVyAqd2luOwogICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCiAgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIApAQCAtMjI2OSw0NCArMjM0NSw0NyBAQAogICAgIGZkID0gbWtzdGVtcChmbik7CiAgICAgaWYgKGZkIDwgMCkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBmcCA9IGZkb3BlbihmZCwgIndiKyIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQorCiAgICAgZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc3RyZWFtLCAmUHlJZF9yZWFkLCAiIik7Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCkgewotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soZGF0YSkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJmLnJlYWQoKSByZXR1cm5lZCAlLjEwMHMgaW5zdGVhZCBvZiBieXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKGRhdGEpOwotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZGF0YWxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoZGF0YSk7CiAgICAgaWYgKGZ3cml0ZShQeUJ5dGVzX0FTX1NUUklORyhkYXRhKSwgMSwgZGF0YWxlbiwgZnApICE9IGRhdGFsZW4pIHsKICAgICAgICAgUHlfREVDUkVGKGRhdGEpOwotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgUHlfREVDUkVGKGRhdGEpOworCiAgICAgZnNlZWsoZnAsIDAsIDApOwogICAgIHdpbiA9IGdldHdpbihmcCk7Ci0gICAgZmNsb3NlKGZwKTsKLSAgICByZW1vdmUoZm4pOwogICAgIGlmICh3aW4gPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICByZXR1cm4gUHlDdXJzZXNXaW5kb3dfTmV3KHdpbiwgTlVMTCk7CisgICAgcmVzID0gUHlDdXJzZXNXaW5kb3dfTmV3KHdpbiwgTlVMTCk7CisKK2Vycm9yOgorICAgIGlmIChmcCAhPSBOVUxMKQorICAgICAgICBmY2xvc2UoZnApOworICAgIGVsc2UgaWYgKGZkICE9IC0xKQorICAgICAgICBjbG9zZShmZCk7CisgICAgcmVtb3ZlKGZuKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzQxNCw3ICszNDkzLDcgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChzdHJuY21wKGtleV9uLCJLRVlfRigiLDYpPT0wKSB7CiAgICAgICAgICAgICAgICAgY2hhciAqcDEsICpwMjsKLSAgICAgICAgICAgICAgICBrZXlfbjIgPSBtYWxsb2Moc3RybGVuKGtleV9uKSsxKTsKKyAgICAgICAgICAgICAgICBrZXlfbjIgPSBQeU1lbV9NYWxsb2Moc3RybGVuKGtleV9uKSsxKTsKICAgICAgICAgICAgICAgICBpZiAoIWtleV9uMikgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM0MzMsNyArMzUxMiw3IEBACiAgICAgICAgICAgICAgICAga2V5X24yID0ga2V5X247CiAgICAgICAgICAgICBTZXREaWN0SW50KGtleV9uMixrZXkpOwogICAgICAgICAgICAgaWYgKGtleV9uMiAhPSBrZXlfbikKLSAgICAgICAgICAgICAgICBmcmVlKGtleV9uMik7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShrZXlfbjIpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgU2V0RGljdEludCgiS0VZX01JTiIsIEtFWV9NSU4pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYyBiL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKaW5kZXggZmEyMzFkOS4uZTRkYzFiZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYworKysgYi9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCkBAIC0xNiw2ICsxNiwxMiBAQAogI2luY2x1ZGUgImRhdGV0aW1lLmgiCiAjdW5kZWYgUHlfQlVJTERfQ09SRQogCisvKltjbGluaWNdCittb2R1bGUgZGF0ZXRpbWUKK2NsYXNzIGRhdGV0aW1lLmRhdGV0aW1lCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogLyogV2UgcmVxdWlyZSB0aGF0IEMgaW50IGJlIGF0IGxlYXN0IDMyIGJpdHMsIGFuZCB1c2UgaW50IHZpcnR1YWxseQogICogZXZlcnl3aGVyZS4gIEluIGp1c3QgYSBmZXcgY2FzZXMgd2UgdXNlIGEgdGVtcCBsb25nLCB3aGVyZSBhIFB5dGhvbgogICogQVBJIHJldHVybnMgYSBDIGxvbmcuICBJbiBzdWNoIGNhc2VzLCB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZQpAQCAtMTA0LDYgKzExMCwxMSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBQeURhdGVUaW1lX1RaSW5mb1R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVGltZVpvbmVUeXBlOwogCitfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKK19QeV9JREVOVElGSUVSKGZyb211dGMpOworX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKK19QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBNYXRoIHV0aWxpdGllcy4KICAqLwpAQCAtMTQwLDE5ICsxNTEsNiBAQAogICAgIHJldHVybiBxdW87CiB9CiAKLS8qIFJvdW5kIGEgZG91YmxlIHRvIHRoZSBuZWFyZXN0IGxvbmcuICB8eHwgbXVzdCBiZSBzbWFsbCBlbm91Z2ggdG8gZml0Ci0gKiBpbiBhIEMgbG9uZzsgdGhpcyBpcyBub3QgY2hlY2tlZC4KLSAqLwotc3RhdGljIGxvbmcKLXJvdW5kX3RvX2xvbmcoZG91YmxlIHgpCi17Ci0gICAgaWYgKHggPj0gMC4wKQotICAgICAgICB4ID0gZmxvb3IoeCArIDAuNSk7Ci0gICAgZWxzZQotICAgICAgICB4ID0gY2VpbCh4IC0gMC41KTsKLSAgICByZXR1cm4gKGxvbmcpeDsKLX0KLQogLyogTmVhcmVzdCBpbnRlZ2VyIHRvIG0gLyBuIGZvciBpbnRlZ2VycyBtIGFuZCBuLiBIYWxmLWludGVnZXIgcmVzdWx0cwogICogYXJlIHJvdW5kZWQgdG8gZXZlbi4KICAqLwpAQCAtMTI5MCw4ICsxMjg4LDYgQEAKICAgICAgICAgICAgIGdvdG8gRG9uZTsKICAgICAgICAgZm9ybWF0ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlCeXRlc19BU19TVFJJTkcobmV3Zm10KSk7CiAgICAgICAgIGlmIChmb3JtYXQgIT0gTlVMTCkgewotICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoc3RyZnRpbWUpOwotCiAgICAgICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHRpbWUsICZQeUlkX3N0cmZ0aW1lLCAiT08iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHRpbWV0dXBsZSwgTlVMTCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZm9ybWF0KTsKQEAgLTEzOTcsNyArMTM5Myw3IEBACiAgKi8KIAogLyogQ29udmVyc2lvbiBmYWN0b3JzLiAqLwotc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfdXMgPSBOVUxMOyAgICAgIC8qIDEgKi8KK3N0YXRpYyBQeU9iamVjdCAqb25lID0gTlVMTDsgICAgICAvKiAxICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9tcyA9IE5VTEw7ICAgICAgLyogMTAwMCAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfc2Vjb25kID0gTlVMTDsgIC8qIDEwMDAwMDAgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX21pbnV0ZSA9IE5VTEw7ICAvKiAxZTYgKiA2MCBhcyBQeXRob24gaW50ICovCkBAIC0xNTc5LDcgKzE1NzUsNiBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpweXVzX2luID0gTlVMTCwgKnRlbXAsICpweXVzX291dDsKICAgICBQeU9iamVjdCAqcmF0aW8gPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKGFzX2ludGVnZXJfcmF0aW8pOwogCiAgICAgcHl1c19pbiA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcyhkZWx0YSk7CiAgICAgaWYgKHB5dXNfaW4gPT0gTlVMTCkKQEAgLTE2NzgsNyArMTY3Myw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnB5dXNfaW4gPSBOVUxMLCAqdGVtcCwgKnB5dXNfb3V0OwogICAgIFB5T2JqZWN0ICpyYXRpbyA9IE5VTEw7Ci0gICAgX1B5X0lERU5USUZJRVIoYXNfaW50ZWdlcl9yYXRpbyk7CiAKICAgICBweXVzX2luID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKGRlbHRhKTsKICAgICBpZiAocHl1c19pbiA9PSBOVUxMKQpAQCAtMjExOSw3ICsyMTEzLDcgQEAKICAgICAgICAgZ290byBEb25lCiAKICAgICBpZiAodXMpIHsKLSAgICAgICAgeSA9IGFjY3VtKCJtaWNyb3NlY29uZHMiLCB4LCB1cywgdXNfcGVyX3VzLCAmbGVmdG92ZXJfdXMpOworICAgICAgICB5ID0gYWNjdW0oIm1pY3Jvc2Vjb25kcyIsIHgsIHVzLCBvbmUsICZsZWZ0b3Zlcl91cyk7CiAgICAgICAgIENMRUFOVVA7CiAgICAgfQogICAgIGlmIChtcykgewpAQCAtMjE0OCw3ICsyMTQyLDMzIEBACiAgICAgfQogICAgIGlmIChsZWZ0b3Zlcl91cykgewogICAgICAgICAvKiBSb3VuZCB0byBuZWFyZXN0IHdob2xlICMgb2YgdXMsIGFuZCBhZGQgaW50byB4LiAqLwotICAgICAgICBQeU9iamVjdCAqdGVtcCA9IFB5TG9uZ19Gcm9tTG9uZyhyb3VuZF90b19sb25nKGxlZnRvdmVyX3VzKSk7CisgICAgICAgIGRvdWJsZSB3aG9sZV91cyA9IHJvdW5kKGxlZnRvdmVyX3VzKTsKKyAgICAgICAgaW50IHhfaXNfb2RkOworICAgICAgICBQeU9iamVjdCAqdGVtcDsKKworICAgICAgICB3aG9sZV91cyA9IHJvdW5kKGxlZnRvdmVyX3VzKTsKKyAgICAgICAgaWYgKGZhYnMod2hvbGVfdXMgLSBsZWZ0b3Zlcl91cykgPT0gMC41KSB7CisgICAgICAgICAgICAvKiBXZSdyZSBleGFjdGx5IGhhbGZ3YXkgYmV0d2VlbiB0d28gaW50ZWdlcnMuICBJbiBvcmRlcgorICAgICAgICAgICAgICogdG8gZG8gcm91bmQtaGFsZi10by1ldmVuLCB3ZSBtdXN0IGRldGVybWluZSB3aGV0aGVyIHgKKyAgICAgICAgICAgICAqIGlzIG9kZC4gTm90ZSB0aGF0IHggaXMgb2RkIHdoZW4gaXQncyBsYXN0IGJpdCBpcyAxLiBUaGUKKyAgICAgICAgICAgICAqIGNvZGUgYmVsb3cgdXNlcyBiaXR3aXNlIGFuZCBvcGVyYXRpb24gdG8gY2hlY2sgdGhlIGxhc3QKKyAgICAgICAgICAgICAqIGJpdC4gKi8KKwkgICAgdGVtcCA9IFB5TnVtYmVyX0FuZCh4LCBvbmUpOyAgLyogdGVtcCA8LSB4ICYgMSAqLworICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4X2lzX29kZCA9IFB5T2JqZWN0X0lzVHJ1ZSh0ZW1wKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgIGlmICh4X2lzX29kZCA9PSAtMSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aG9sZV91cyA9IDIuMCAqIHJvdW5kKChsZWZ0b3Zlcl91cyArIHhfaXNfb2RkKSAqIDAuNSkgLSB4X2lzX29kZDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXAgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpd2hvbGVfdXMpOworCiAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKICAgICAgICAgICAgIGdvdG8gRG9uZTsKQEAgLTIyMzksMjIgKzIyNTksMTQgQEAKIHsKICAgICBQeU9iamVjdCAqdG90YWxfc2Vjb25kczsKICAgICBQeU9iamVjdCAqdG90YWxfbWljcm9zZWNvbmRzOwotICAgIFB5T2JqZWN0ICpvbmVfbWlsbGlvbjsKIAogICAgIHRvdGFsX21pY3Jvc2Vjb25kcyA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcygoUHlEYXRlVGltZV9EZWx0YSAqKXNlbGYpOwogICAgIGlmICh0b3RhbF9taWNyb3NlY29uZHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBvbmVfbWlsbGlvbiA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwMDAwTCk7Ci0gICAgaWYgKG9uZV9taWxsaW9uID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHRvdGFsX21pY3Jvc2Vjb25kcyk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHRvdGFsX3NlY29uZHMgPSBQeU51bWJlcl9UcnVlRGl2aWRlKHRvdGFsX21pY3Jvc2Vjb25kcywgb25lX21pbGxpb24pOworICAgIHRvdGFsX3NlY29uZHMgPSBQeU51bWJlcl9UcnVlRGl2aWRlKHRvdGFsX21pY3Jvc2Vjb25kcywgdXNfcGVyX3NlY29uZCk7CiAKICAgICBQeV9ERUNSRUYodG90YWxfbWljcm9zZWNvbmRzKTsKLSAgICBQeV9ERUNSRUYob25lX21pbGxpb24pOwogICAgIHJldHVybiB0b3RhbF9zZWNvbmRzOwogfQogCkBAIC0yNjMwLDggKzI2NDIsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGVfc3RyKFB5RGF0ZVRpbWVfRGF0ZSAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOwotCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfaXNvZm9ybWF0LCAiKCkiKTsKIH0KIApAQCAtMjY3MSw3ICsyNjgxLDYgQEAKIGRhdGVfZm9ybWF0KFB5RGF0ZVRpbWVfRGF0ZSAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKmZvcm1hdDsKLSAgICBfUHlfSURFTlRJRklFUihzdHJmdGltZSk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM1ODgsOCArMzU5Nyw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogdGltZV9zdHIoUHlEYXRlVGltZV9UaW1lICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7Ci0KICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9pc29mb3JtYXQsICIoKSIpOwogfQogCkBAIC00MTM4LDMxICs0MTQ1LDcxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyk7CiB9CiAKLS8qIFJldHVybiBiZXN0IHBvc3NpYmxlIGxvY2FsIHRpbWUgLS0gdGhpcyBpc24ndCBjb25zdHJhaW5lZCBieSB0aGUKLSAqIHByZWNpc2lvbiBvZiBhIHRpbWVzdGFtcC4KLSAqLworLypbY2xpbmljXQorCitAY2xhc3NtZXRob2QKK2RhdGV0aW1lLmRhdGV0aW1lLm5vdworCisgICAgdHo6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgVGltZXpvbmUgb2JqZWN0LgorCitSZXR1cm5zIG5ldyBkYXRldGltZSBvYmplY3QgcmVwcmVzZW50aW5nIGN1cnJlbnQgdGltZSBsb2NhbCB0byB0ei4KKworSWYgbm8gdHogaXMgc3BlY2lmaWVkLCB1c2VzIGxvY2FsIHRpbWV6b25lLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X19kb2NfXywKKyJub3codHo9Tm9uZSlcbiIKKyJSZXR1cm5zIG5ldyBkYXRldGltZSBvYmplY3QgcmVwcmVzZW50aW5nIGN1cnJlbnQgdGltZSBsb2NhbCB0byB0ei5cbiIKKyJcbiIKKyIgIHR6XG4iCisiICAgIFRpbWV6b25lIG9iamVjdC5cbiIKKyJcbiIKKyJJZiBubyB0eiBpcyBzcGVjaWZpZWQsIHVzZXMgbG9jYWwgdGltZXpvbmUuIik7CisKKyNkZWZpbmUgREFURVRJTUVfREFURVRJTUVfTk9XX01FVEhPRERFRiAgICBcCisgICAgeyJub3ciLCAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfZGF0ZXRpbWVfbm93LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU3xNRVRIX0NMQVNTLCBkYXRldGltZV9kYXRldGltZV9ub3dfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWRhdGV0aW1lX25vdyhQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQorZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwoUHlUeXBlT2JqZWN0ICpjbHMsIFB5T2JqZWN0ICp0eik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYXRldGltZV9kYXRldGltZV9ub3coUHlUeXBlT2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqdHogPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifE86bm93IiwgX2tleXdvcmRzLAorICAgICAgICAmdHopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwoY2xzLCB0eik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKFB5VHlwZU9iamVjdCAqY2xzLCBQeU9iamVjdCAqdHopCisvKltjbGluaWMgY2hlY2tzdW06IGNhM2QyNmE0MjNiM2Y2MzNiMjYwYzc2MjJlMzAzZjA5MTVhOTZmN2NdKi8KIHsKICAgICBQeU9iamVjdCAqc2VsZjsKLSAgICBQeU9iamVjdCAqdHppbmZvID0gUHlfTm9uZTsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKIAotICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOm5vdyIsIGtleXdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHppbmZvKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGNoZWNrX3R6aW5mb19zdWJjbGFzcyh0emluZm8pIDwgMCkKKyAgICAvKiBSZXR1cm4gYmVzdCBwb3NzaWJsZSBsb2NhbCB0aW1lIC0tIHRoaXMgaXNuJ3QgY29uc3RyYWluZWQgYnkgdGhlCisgICAgICogcHJlY2lzaW9uIG9mIGEgdGltZXN0YW1wLgorICAgICAqLworICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHopIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmID0gZGF0ZXRpbWVfYmVzdF9wb3NzaWJsZShjbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvID09IFB5X05vbmUgPyBsb2NhbHRpbWUgOiBnbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6aW5mbyAhPSBQeV9Ob25lKSB7CisgICAgc2VsZiA9IGRhdGV0aW1lX2Jlc3RfcG9zc2libGUoKFB5T2JqZWN0ICopY2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6ID09IFB5X05vbmUgPyBsb2NhbHRpbWUgOiBnbXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHopOworICAgIGlmIChzZWxmICE9IE5VTEwgJiYgdHogIT0gUHlfTm9uZSkgewogICAgICAgICAvKiBDb252ZXJ0IFVUQyB0byB0emluZm8ncyB6b25lLiAqLwogICAgICAgICBQeU9iamVjdCAqdGVtcCA9IHNlbGY7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGZyb211dGMpOwogCi0gICAgICAgIHNlbGYgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHR6aW5mbywgJlB5SWRfZnJvbXV0YywgIk8iLCBzZWxmKTsKKyAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHosICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CiAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKICAgICB9CiAgICAgcmV0dXJuIHNlbGY7CkBAIC00MTk5LDcgKzQyNDYsNiBAQAogICAgIGlmIChzZWxmICE9IE5VTEwgJiYgdHppbmZvICE9IFB5X05vbmUpIHsKICAgICAgICAgLyogQ29udmVydCBVVEMgdG8gdHppbmZvJ3Mgem9uZS4gKi8KICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBzZWxmOwotICAgICAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKIAogICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0emluZm8sICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CiAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKQEAgLTQ0MjEsNiArNDQ2Nyw5IEBACiAgICAgICAgICAgICBkZWx0YV91cyA9IERBVEVfR0VUX01JQ1JPU0VDT05EKGxlZnQpIC0KICAgICAgICAgICAgICAgICAgICAgICAgREFURV9HRVRfTUlDUk9TRUNPTkQocmlnaHQpOwogICAgICAgICAgICAgcmVzdWx0ID0gbmV3X2RlbHRhKGRlbHRhX2QsIGRlbHRhX3MsIGRlbHRhX3VzLCAxKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICAgICAgaWYgKG9mZmRpZmYgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRlbHRhX3N1YnRyYWN0KHJlc3VsdCwgb2ZmZGlmZik7CkBAIC00NDgyLDggKzQ1MzEsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGV0aW1lX3N0cihQeURhdGVUaW1lX0RhdGVUaW1lICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7Ci0KICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9pc29mb3JtYXQsICIocykiLCAiICIpOwogfQogCkBAIC00NzQ5LDcgKzQ3OTYsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgcmVzdWx0ID0gbmV3X3RpbWV6b25lKGRlbHRhLCBuYW1lbyk7Ci0gICAgUHlfREVDUkVGKG5hbWVvKTsKKyAgICBQeV9YREVDUkVGKG5hbWVvKTsKICAgZXJyb3I6CiAgICAgUHlfREVDUkVGKGRlbHRhKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDc2Miw3ICs0ODA5LDYgQEAKICAgICBQeU9iamVjdCAqb2Zmc2V0OwogICAgIFB5T2JqZWN0ICp0ZW1wOwogICAgIFB5T2JqZWN0ICp0emluZm8gPSBQeV9Ob25lOwotICAgIF9QeV9JREVOVElGSUVSKGZyb211dGMpOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJ0eiIsIE5VTEx9OwogCiAgICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE86YXN0aW1lem9uZSIsIGtleXdvcmRzLApAQCAtNDg3Myw5ICs0OTE5LDE2IEBACiAgICAgICAgIHRpbWUudG1fd2RheSA9IC0xOwogICAgICAgICB0aW1lLnRtX2lzZHN0ID0gLTE7CiAgICAgICAgIHRpbWVzdGFtcCA9IG1rdGltZSgmdGltZSk7Ci0gICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQgdG1fd2RheQotICAgICAgICAgKiBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLwotICAgICAgICBpZiAodGltZXN0YW1wID09ICh0aW1lX3QpKC0xKSAmJiB0aW1lLnRtX3dkYXkgPT0gLTEpIHsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCA9PSAodGltZV90KSgtMSkKKyNpZm5kZWYgX0FJWAorICAgICAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsCisgICAgICAgICAgICAgKiBidXQgdG1fd2RheSBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLworICAgICAgICAgICAgJiYgdGltZS50bV93ZGF5ID09IC0xCisjZWxzZQorICAgICAgICAgICAgLyogb24gQUlYLCB0bV93ZGF5IGlzIGFsd2F5cyBzZXRzLCBldmVuIG9uIGVycm9yICovCisjZW5kaWYKKyAgICAgICAgICApCisgICAgICAgIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ5ODksOSArNTA0Miw3IEBACiAKICAgICAvKiBDbGFzcyBtZXRob2RzOiAqLwogCi0gICAgeyJub3ciLCAgICAgICAgIChQeUNGdW5jdGlvbilkYXRldGltZV9ub3csCi0gICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMgfCBNRVRIX0NMQVNTLAotICAgICBQeURvY19TVFIoIlt0el0gLT4gbmV3IGRhdGV0aW1lIHdpdGggdHoncyBsb2NhbCBkYXkgYW5kIHRpbWUuIil9LAorICAgIERBVEVUSU1FX0RBVEVUSU1FX05PV19NRVRIT0RERUYKIAogICAgIHsidXRjbm93IiwgICAgICAgICAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfdXRjbm93LAogICAgICBNRVRIX05PQVJHUyB8IE1FVEhfQ0xBU1MsCkBAIC01Mjk5LDggKzUzNTAsOCBAQAogICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTUlOWUVBUiIsIE1JTllFQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNQVhZRUFSIiwgTUFYWUVBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUlOWUVBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUFYWUVBUik7CiAKICAgICBQeV9JTkNSRUYoJlB5RGF0ZVRpbWVfRGF0ZVR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZGF0ZSIsIChQeU9iamVjdCAqKSAmUHlEYXRlVGltZV9EYXRlVHlwZSk7CkBAIC01MzQ0LDEyICs1Mzk1LDEyIEBACiAgICAgYXNzZXJ0KERJMTAwWSA9PSAyNSAqIERJNFkgLSAxKTsKICAgICBhc3NlcnQoREkxMDBZID09IGRheXNfYmVmb3JlX3llYXIoMTAwKzEpKTsKIAotICAgIHVzX3Blcl91cyA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CiAgICAgdXNfcGVyX21zID0gUHlMb25nX0Zyb21Mb25nKDEwMDApOwogICAgIHVzX3Blcl9zZWNvbmQgPSBQeUxvbmdfRnJvbUxvbmcoMTAwMDAwMCk7CiAgICAgdXNfcGVyX21pbnV0ZSA9IFB5TG9uZ19Gcm9tTG9uZyg2MDAwMDAwMCk7CiAgICAgc2Vjb25kc19wZXJfZGF5ID0gUHlMb25nX0Zyb21Mb25nKDI0ICogMzYwMCk7Ci0gICAgaWYgKHVzX3Blcl91cyA9PSBOVUxMIHx8IHVzX3Blcl9tcyA9PSBOVUxMIHx8IHVzX3Blcl9zZWNvbmQgPT0gTlVMTCB8fAorICAgIGlmIChvbmUgPT0gTlVMTCB8fCB1c19wZXJfbXMgPT0gTlVMTCB8fCB1c19wZXJfc2Vjb25kID09IE5VTEwgfHwKICAgICAgICAgdXNfcGVyX21pbnV0ZSA9PSBOVUxMIHx8IHNlY29uZHNfcGVyX2RheSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL19kYm1tb2R1bGUuYwppbmRleCA4M2MwNTFjLi4xMGY4ZmI5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kYm1tb2R1bGUuYworKysgYi9Nb2R1bGVzL19kYm1tb2R1bGUuYwpAQCAtMTQsMTEgKzE0LDcgQEAKICAqLwogI2lmIGRlZmluZWQoSEFWRV9OREJNX0gpCiAjaW5jbHVkZSA8bmRibS5oPgotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotc3RhdGljIGNoYXIgKndoaWNoX2RibSA9ICJuZGJtIjsKLSNlbHNlCiBzdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIkdOVSBnZGJtIjsgIC8qIEVNWCBwb3J0IG9mIEdEQk0gKi8KLSNlbmRpZgogI2VsaWYgZGVmaW5lZChIQVZFX0dEQk1fTkRCTV9IKQogI2luY2x1ZGUgPGdkYm0vbmRibS5oPgogc3RhdGljIGNoYXIgKndoaWNoX2RibSA9ICJHTlUgZ2RibSI7CkBAIC0zMiw2ICsyOCwxMiBAQAogI2Vycm9yICJObyBuZGJtLmggYXZhaWxhYmxlISIKICNlbmRpZgogCisvKltjbGluaWNdCittb2R1bGUgZGJtCitjbGFzcyBkYm0uZGJtCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBpbnQgZGlfc2l6ZTsgICAgICAgIC8qIC0xIG1lYW5zIHJlY29tcHV0ZSAqLwpAQCAtNDcsOCArNDksMTYgQEAKIAogc3RhdGljIFB5T2JqZWN0ICpEYm1FcnJvcjsKIAorLypbcHl0aG9uXQorY2xhc3MgZGJtb2JqZWN0X2NvbnZlcnRlcihzZWxmX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICJkYm1vYmplY3QgKiIKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdkcCcKK1tweXRob25dKi8KKy8qW3B5dGhvbiBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbmV3ZGJtb2JqZWN0KGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCituZXdkYm1vYmplY3QoY29uc3QgY2hhciAqZmlsZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKIHsKICAgICBkYm1vYmplY3QgKmRwOwogCkBAIC02Nyw3ICs3Nyw3IEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi1kYm1fZGVhbGxvYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwKQorZGJtX2RlYWxsb2MoZGJtb2JqZWN0ICpkcCkKIHsKICAgICBpZiAoIGRwLT5kaV9kYm0gKQogICAgICAgICBkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC05NSw3ICsxMDUsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqa2V5KQogewogICAgIGRhdHVtIGRyZWMsIGtyZWM7CiAgICAgUHlfc3NpemVfdCB0bXBfc2l6ZTsKQEAgLTE3MCw3ICsxODAsNyBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9fY2xvc2UocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMTgwLDkgKzE5MCw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0yNTIsMzEgKzI2Miw4MCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLwogfTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibV9nZXQocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgZGF0dW0ga2V5LCB2YWw7Ci0gICAgUHlPYmplY3QgKmRlZnZhbHVlID0gUHlfTm9uZTsKLSAgICBjaGFyICp0bXBfcHRyOwotICAgIFB5X3NzaXplX3QgdG1wX3NpemU7CisvKltjbGluaWNdCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjfE86Z2V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcF9wdHIsICZ0bXBfc2l6ZSwgJmRlZnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5LmRwdHIgPSB0bXBfcHRyOwotICAgIGtleS5kc2l6ZSA9IHRtcF9zaXplOwotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICB2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwga2V5KTsKLSAgICBpZiAodmFsLmRwdHIgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsLmRwdHIsIHZhbC5kc2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRihkZWZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBkZWZ2YWx1ZTsKK2RibS5kYm0uZ2V0CisKKyAgICBzZWxmOiBkYm1vYmplY3QKKworICAgIGtleTogc3RyKGxlbmd0aD1UcnVlKQorICAgIFsKKyAgICBkZWZhdWx0OiBvYmplY3QKKyAgICBdCisgICAgLworCitSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihkYm1fZGJtX2dldF9fZG9jX18sCisiZ2V0KGtleSwgW2RlZmF1bHRdKVxuIgorIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4iKTsKKworI2RlZmluZSBEQk1fREJNX0dFVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0IiwgKFB5Q0Z1bmN0aW9uKWRibV9kYm1fZ2V0LCBNRVRIX1ZBUkFSR1MsIGRibV9kYm1fZ2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fZGJtX2dldF9pbXBsKGRibW9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSwgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX2RibV9nZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGg7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gTlVMTDsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6Z2V0IiwgJmtleSwgJmtleV9sZW5ndGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNPOmdldCIsICZrZXksICZrZXlfbGVuZ3RoLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImRibS5kYm0uZ2V0IHJlcXVpcmVzIDEgdG8gMiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICByZXR1cm5fdmFsdWUgPSBkYm1fZGJtX2dldF9pbXBsKChkYm1vYmplY3QgKilzZWxmLCBrZXksIGtleV9sZW5ndGgsIGdyb3VwX3JpZ2h0XzEsIGRlZmF1bHRfdmFsdWUpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zZXRkZWZhdWx0KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQorZGJtX2RibV9nZXRfaW1wbChkYm1vYmplY3QgKmRwLCBjb25zdCBjaGFyICprZXksIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aCwgaW50IGdyb3VwX3JpZ2h0XzEsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGNoZWNrc3VtOiAyOGNmODkyODgxMWJkZTUxZTUzNWQ2N2FlOThlYTAzOWQ3OWRmNzE3XSovCit7CisgICAgZGF0dW0gZGJtX2tleSwgdmFsOworCisgICAgaWYgKCFncm91cF9yaWdodF8xKQorICAgICAgICBkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKKyAgICBkYm1fa2V5LmRwdHIgPSAoY2hhciAqKWtleTsKKyAgICBkYm1fa2V5LmRzaXplID0ga2V5X2xlbmd0aDsKKyAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CisgICAgdmFsID0gZGJtX2ZldGNoKGRwLT5kaV9kYm0sIGRibV9rZXkpOworICAgIGlmICh2YWwuZHB0ciAhPSBOVUxMKQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2YWwuZHB0ciwgdmFsLmRzaXplKTsKKworICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKKyAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9zZXRkZWZhdWx0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGRhdHVtIGtleSwgdmFsOwogICAgIFB5T2JqZWN0ICpkZWZ2YWx1ZSA9IE5VTEw7CkBAIC0zMTcsMTggKzM3NiwzMyBAQAogICAgIHJldHVybiBkZWZ2YWx1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZW50ZXJfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19leGl0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKKwogc3RhdGljIFB5TWV0aG9kRGVmIGRibV9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX19jbG9zZSwgICAgICAgIE1FVEhfTk9BUkdTLAogICAgICAiY2xvc2UoKVxuQ2xvc2UgdGhlIGRhdGFiYXNlLiJ9LAogICAgIHsia2V5cyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICAgICAgICBNRVRIX05PQVJHUywKICAgICAgImtleXMoKSAtPiBsaXN0XG5SZXR1cm4gYSBsaXN0IG9mIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4ifSwKLSAgICB7ImdldCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAiZ2V0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgotICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiJ9LAorICAgIERCTV9EQk1fR0VUX01FVEhPRERFRgogICAgIHsic2V0ZGVmYXVsdCIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zZXRkZWZhdWx0LCAgICBNRVRIX1ZBUkFSR1MsCiAgICAgICJzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgogICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiAgSWYga2V5XG4iCiAgICAgICJpcyBub3QgaW4gdGhlIGRhdGFiYXNlLCBpdCBpcyBpbnNlcnRlZCB3aXRoIGRlZmF1bHQgYXMgdGhlIHZhbHVlLiJ9LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzY1LDE2ICs0MzksNjggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibW9wZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZmxhZ3MgPSAiciI7Ci0gICAgaW50IGlmbGFnczsKLSAgICBpbnQgbW9kZSA9IDA2NjY7CisvKltjbGluaWNdCiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfHNpOm9wZW4iLCAmbmFtZSwgJmZsYWdzLCAmbW9kZSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKK2RibS5vcGVuIGFzIGRibW9wZW4KKworICAgIGZpbGVuYW1lOiBzdHIKKyAgICAgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uCisKKyAgICBmbGFnczogc3RyPSJyIgorICAgICAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gICJyIiBmb3IgcmVhZGluZywgInciIGZvciB3cml0aW5nLCBldGMuCisKKyAgICBtb2RlOiBpbnQoZG9jX2RlZmF1bHQ9IjBvNjY2IikgPSAwbzY2NgorICAgICAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGUKKyAgICAgICAgKGUuZy4gb3MuT19SRFdSKS4KKworICAgIC8KKworUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LgorCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihkYm1vcGVuX19kb2NfXywKKyJvcGVuKGZpbGVuYW1lLCBmbGFncz1cJ3JcJywgbW9kZT0wbzY2NilcbiIKKyJSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuXG4iCisiXG4iCisiICBmaWxlbmFtZVxuIgorIiAgICBUaGUgZmlsZW5hbWUgdG8gb3Blbi5cbiIKKyIgIGZsYWdzXG4iCisiICAgIEhvdyB0byBvcGVuIHRoZSBmaWxlLiAgXCJyXCIgZm9yIHJlYWRpbmcsIFwid1wiIGZvciB3cml0aW5nLCBldGMuXG4iCisiICBtb2RlXG4iCisiICAgIElmIGNyZWF0aW5nIGEgbmV3IGZpbGUsIHRoZSBtb2RlIGJpdHMgZm9yIHRoZSBuZXcgZmlsZVxuIgorIiAgICAoZS5nLiBvcy5PX1JEV1IpLiIpOworCisjZGVmaW5lIERCTU9QRU5fTUVUSE9EREVGICAgIFwKKyAgICB7Im9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLCBkYm1vcGVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZsYWdzLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICAgIGNvbnN0IGNoYXIgKmZsYWdzID0gInIiOworICAgIGludCBtb2RlID0gNDM4OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzfHNpOm9wZW4iLAorICAgICAgICAmZmlsZW5hbWUsICZmbGFncywgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtb3Blbl9pbXBsKG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3Blbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywgaW50IG1vZGUpCisvKltjbGluaWMgY2hlY2tzdW06IGZiMjY1Zjc1NjQxNTUzY2NkOTYzZjg0YzE0M2IzNWMxMWY5MTIxZmNdKi8KK3sKKyAgICBpbnQgaWZsYWdzOworCiAgICAgaWYgKCBzdHJjbXAoZmxhZ3MsICJyIikgPT0gMCApCiAgICAgICAgIGlmbGFncyA9IE9fUkRPTkxZOwogICAgIGVsc2UgaWYgKCBzdHJjbXAoZmxhZ3MsICJ3IikgPT0gMCApCkBAIC0zOTAsMTMgKzUxNiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImFyZyAyIHRvIG9wZW4gc2hvdWxkIGJlICdyJywgJ3cnLCAnYycsIG9yICduJyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIG5ld2RibW9iamVjdChuYW1lLCBpZmxhZ3MsIG1vZGUpOworICAgIHJldHVybiBuZXdkYm1vYmplY3QoZmlsZW5hbWUsIGlmbGFncywgbW9kZSk7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1tb2R1bGVfbWV0aG9kc1tdID0gewotICAgIHsgIm9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLAotICAgICAgIm9wZW4ocGF0aFssIGZsYWdbLCBtb2RlXV0pIC0+IG1hcHBpbmdcbiIKLSAgICAgICJSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuIn0sCisgICAgREJNT1BFTl9NRVRIT0RERUYKICAgICB7IDAsIDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCmluZGV4IDliZGM0YzcuLjQ2YTFmNDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKKysrIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwpAQCAtMSw2MyArMSwyMiBAQAotLyoKLSAqIEVsZW1lbnRUcmVlCi0gKiAkSWQ6IF9lbGVtZW50dHJlZS5jIDM0NzMgMjAwOS0wMS0xMSAyMjo1Mzo1NVogZnJlZHJpayAkCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisgKiBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KICAqCi0gKiBlbGVtZW50dHJlZSBhY2NlbGVyYXRvcgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAxOTk5LTA2LTIwIGZsICBjcmVhdGVkIChhcyBwYXJ0IG9mIHNnbWxvcCkKLSAqIDIwMDEtMDUtMjkgZmwgIGVmZmRvbSBlZGl0aW9uCi0gKiAyMDAzLTAyLTI3IGZsICBlbGVtZW50dHJlZSBlZGl0aW9uIChhbHBoYSkKLSAqIDIwMDQtMDYtMDMgZmwgIHVwZGF0ZXMgZm9yIGVsZW1lbnR0cmVlIDEuMgotICogMjAwNS0wMS0wNSBmbCAgbWFqb3Igb3B0aW1pemF0aW9uIGVmZm9ydAotICogMjAwNS0wMS0xMSBmbCAgZmlyc3QgcHVibGljIHJlbGVhc2UgKGNFbGVtZW50VHJlZSAwLjgpCi0gKiAyMDA1LTAxLTEyIGZsICBzcGxpdCBlbGVtZW50IG9iamVjdCBpbnRvIGJhc2UgYW5kIGV4dHJhcwotICogMjAwNS0wMS0xMyBmbCAgdXNlIHRhZ2dlZCBwb2ludGVycyBmb3IgdGFpbC90ZXh0IChjRWxlbWVudFRyZWUgMC45KQotICogMjAwNS0wMS0xNyBmbCAgYWRkZWQgdHJlZWJ1aWxkZXIgY2xvc2UgbWV0aG9kCi0gKiAyMDA1LTAxLTE3IGZsICBmaXhlZCBjcmFzaCBpbiBnZXRjaGlsZHJlbgotICogMjAwNS0wMS0xOCBmbCAgcmVtb3ZlZCBvYnNlcnZlciBhcGksIGFkZGVkIGl0ZXJwYXJzZSAoY0VsZW1lbnRUcmVlIDAuOS4zKQotICogMjAwNS0wMS0yMyBmbCAgcmV2aXNlZCBpdGVycGFyc2UgYXBpOyBhZGRlZCBuYW1lc3BhY2UgZXZlbnQgc3VwcG9ydCAoMC45LjgpCi0gKiAyMDA1LTAxLTI2IGZsICBhZGRlZCBWRVJTSU9OIG1vZHVsZSBwcm9wZXJ0eSAoY0VsZW1lbnRUcmVlIDEuMCkKLSAqIDIwMDUtMDEtMjggZmwgIGFkZGVkIHJlbW92ZSBtZXRob2QgKDEuMC4xKQotICogMjAwNS0wMy0wMSBmbCAgYWRkZWQgaXNlbGVtZW50IGZ1bmN0aW9uOyBmaXhlZCBtYWtlZWxlbWVudCBhbGlhc2luZyAoMS4wLjIpCi0gKiAyMDA1LTAzLTEzIGZsICBleHBvcnQgQ29tbWVudCBhbmQgUHJvY2Vzc2luZ0luc3RydWN0aW9uL1BJIGhlbHBlcnMKLSAqIDIwMDUtMDMtMjYgZmwgIGFkZGVkIENvbW1lbnQgYW5kIFBJIHN1cHBvcnQgdG8gWE1MUGFyc2VyCi0gKiAyMDA1LTAzLTI3IGZsICBldmVudCBvcHRpbWl6YXRpb25zOyBjb21wbGFpbiBhYm91dCBib2d1cyBldmVudHMKLSAqIDIwMDUtMDgtMDggZmwgIGZpeGVkIHJlYWQgZXJyb3IgaGFuZGxpbmcgaW4gcGFyc2UKLSAqIDIwMDUtMDgtMTEgZmwgIGFkZGVkIHJ1bnRpbWUgdGVzdCBmb3IgY29weSB3b3JrYXJvdW5kICgxLjAuMykKLSAqIDIwMDUtMTItMTMgZmwgIGFkZGVkIGV4cGF0X2NhcGkgc3VwcG9ydCAoZm9yIHhtbC5ldHJlZSkgKDEuMC40KQotICogMjAwNS0xMi0xNiBmbCAgYWRkZWQgc3VwcG9ydCBmb3Igbm9uLXN0YW5kYXJkIGVuY29kaW5ncwotICogMjAwNi0wMy0wOCBmbCAgZml4ZWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIG51bGwtcmVmcyBhbmQgbGVha3MKLSAqIDIwMDYtMDMtMTIgZmwgIG1lcmdlIGluIDIuNSBzc2l6ZV90IGNoYW5nZXMKLSAqIDIwMDctMDgtMjUgZmwgIGNhbGwgY3VzdG9tIGJ1aWxkZXIncyBjbG9zZSBtZXRob2QgZnJvbSBYTUxQYXJzZXIKLSAqIDIwMDctMDgtMzEgZmwgIGFkZGVkIGl0ZXIsIGV4dGVuZCBmcm9tIEVUIDEuMwotICogMjAwNy0wOS0wMSBmbCAgZml4ZWQgUGFyc2VFcnJvciBleGNlcHRpb24sIHNldHNsaWNlIHNvdXJjZSB0eXBlLCBldGMKLSAqIDIwMDctMDktMDMgZmwgIGZpeGVkIGhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluc2VydCBpbmRleGVzCi0gKiAyMDA3LTA5LTA0IGZsICBhZGRlZCBpdGVydGV4dCBmcm9tIEVUIDEuMwotICogMjAwNy0wOS0wNiBmbCAgYWRkZWQgcG9zaXRpb24gYXR0cmlidXRlIHRvIFBhcnNlRXJyb3IgZXhjZXB0aW9uCi0gKiAyMDA4LTA2LTA2IGZsICBkZWxheSBlcnJvciByZXBvcnRpbmcgaW4gaXRlcnBhcnNlIChmcm9tIEhydm9qZSBOaWtzaWMpCi0gKgorICogX2VsZW1lbnR0cmVlIC0gQyBhY2NlbGVyYXRvciBmb3IgeG1sLmV0cmVlLkVsZW1lbnRUcmVlCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBieSBTZWNyZXQgTGFicyBBQi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBieSBGcmVkcmlrIEx1bmRoLgogICoKICAqIGluZm9AcHl0aG9ud2FyZS5jb20KICAqIGh0dHA6Ly93d3cucHl0aG9ud2FyZS5jb20KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuICovCi0vKiBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4gKi8KLQogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jZGVmaW5lIFZFUlNJT04gIjEuMC42IgotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY29uZmlndXJhdGlvbiAqLwogCi0vKiBMZWF2ZSBkZWZpbmVkIHRvIGluY2x1ZGUgdGhlIGV4cGF0LWJhc2VkIFhNTFBhcnNlciB0eXBlICovCi0jZGVmaW5lIFVTRV9FWFBBVAotCiAvKiBBbiBlbGVtZW50IGNhbiBob2xkIHRoaXMgbWFueSBjaGlsZHJlbiB3aXRob3V0IGV4dHJhIG1lbW9yeQogICAgYWxsb2NhdGlvbnMuICovCiAjZGVmaW5lIFNUQVRJQ19DSElMRFJFTiA0CkBAIC0xMTksMTAgKzc4LDUxIEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0IFhNTFBhcnNlcl9UeXBlOwogCiAKLS8qIGdsdWUgZnVuY3Rpb25zIChzZWUgdGhlIGluaXQgZnVuY3Rpb24gZm9yIGRldGFpbHMpICovCi1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqOwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9kZWVwY29weV9vYmo7Ci1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnRwYXRoX29iajsKKy8qIFBlci1tb2R1bGUgc3RhdGU7IFBFUCAzMTIxICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3QgKnBhcnNlZXJyb3Jfb2JqOworICAgIFB5T2JqZWN0ICpkZWVwY29weV9vYmo7CisgICAgUHlPYmplY3QgKmVsZW1lbnRwYXRoX29iajsKK30gZWxlbWVudHRyZWVzdGF0ZTsKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBlbGVtZW50dHJlZW1vZHVsZTsKKworLyogR2l2ZW4gYSBtb2R1bGUgb2JqZWN0IChhc3N1bWVkIHRvIGJlIF9lbGVtZW50dHJlZSksIGdldCBpdHMgcGVyLW1vZHVsZQorICogc3RhdGUuCisgKi8KKyNkZWZpbmUgRVRfU1RBVEUobW9kKSAoKGVsZW1lbnR0cmVlc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUobW9kKSkKKworLyogRmluZCB0aGUgbW9kdWxlIGluc3RhbmNlIGltcG9ydGVkIGluIHRoZSBjdXJyZW50bHkgcnVubmluZyBzdWItaW50ZXJwcmV0ZXIKKyAqIGFuZCBnZXQgaXRzIHN0YXRlLgorICovCisjZGVmaW5lIEVUX1NUQVRFX0dMT0JBTCBcCisgICAgKChlbGVtZW50dHJlZXN0YXRlICopIFB5TW9kdWxlX0dldFN0YXRlKFB5U3RhdGVfRmluZE1vZHVsZSgmZWxlbWVudHRyZWVtb2R1bGUpKSkKKworc3RhdGljIGludAorZWxlbWVudHRyZWVfY2xlYXIoUHlPYmplY3QgKm0pCit7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURShtKTsKKyAgICBQeV9DTEVBUihzdC0+cGFyc2VlcnJvcl9vYmopOworICAgIFB5X0NMRUFSKHN0LT5kZWVwY29weV9vYmopOworICAgIFB5X0NMRUFSKHN0LT5lbGVtZW50cGF0aF9vYmopOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbGVtZW50dHJlZV90cmF2ZXJzZShQeU9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURShtKTsKKyAgICBQeV9WSVNJVChzdC0+cGFyc2VlcnJvcl9vYmopOworICAgIFB5X1ZJU0lUKHN0LT5kZWVwY29weV9vYmopOworICAgIFB5X1ZJU0lUKHN0LT5lbGVtZW50cGF0aF9vYmopOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZWxlbWVudHRyZWVfZnJlZSh2b2lkICptKQoreworICAgIGVsZW1lbnR0cmVlX2NsZWFyKChQeU9iamVjdCAqKW0pOworfQogCiAvKiBoZWxwZXJzICovCiAKQEAgLTEzMCwxMSArMTMwLDExIEBACiBkZWVwY29weShQeU9iamVjdCogb2JqZWN0LCBQeU9iamVjdCogbWVtbykKIHsKICAgICAvKiBkbyBhIGRlZXAgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0ICovCi0KICAgICBQeU9iamVjdCogYXJnczsKICAgICBQeU9iamVjdCogcmVzdWx0OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCi0gICAgaWYgKCFlbGVtZW50dHJlZV9kZWVwY29weV9vYmopIHsKKyAgICBpZiAoIXN0LT5kZWVwY29weV9vYmopIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgImRlZXBjb3B5IGhlbHBlciBub3QgZm91bmQiCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDIsIG9iamVjdCwgbWVtbyk7CiAgICAgaWYgKCFhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaiwgYXJncyk7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChzdC0+ZGVlcGNvcHlfb2JqLCBhcmdzKTsKICAgICBQeV9ERUNSRUYoYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIyOSw4ICsyMjksMTAgQEAKIGNyZWF0ZV9leHRyYShFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXR0cmliKQogewogICAgIHNlbGYtPmV4dHJhID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihFbGVtZW50T2JqZWN0RXh0cmEpKTsKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQorICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmICghYXR0cmliKQogICAgICAgICBhdHRyaWIgPSBQeV9Ob25lOwpAQCAtMjgzLDEzICsyODUsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzZWxmLT5leHRyYSA9IE5VTEw7CiAKLSAgICBpZiAoYXR0cmliICE9IFB5X05vbmUgJiYgIWlzX2VtcHR5X2RpY3QoYXR0cmliKSkgewotICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIGF0dHJpYikgPCAwKSB7Ci0gICAgICAgICAgICBQeU9iamVjdF9EZWwoc2VsZik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQogICAgIFB5X0lOQ1JFRih0YWcpOwogICAgIHNlbGYtPnRhZyA9IHRhZzsKIApAQCAtMzAzLDYgKzI5OCwxNCBAQAogCiAgICAgQUxMT0Moc2l6ZW9mKEVsZW1lbnRPYmplY3QpLCAiY3JlYXRlIGVsZW1lbnQiKTsKICAgICBQeU9iamVjdF9HQ19UcmFjayhzZWxmKTsKKworICAgIGlmIChhdHRyaWIgIT0gUHlfTm9uZSAmJiAhaXNfZW1wdHlfZGljdChhdHRyaWIpKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgYXR0cmliKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIChQeU9iamVjdCopIHNlbGY7CiB9CiAKQEAgLTM1OCw2ICszNjEsNyBAQAogCiAgICAgUHlfREVDUkVGKGF0dHJpYl9zdHIpOwogCisgICAgLyogYXR0cmliIGNhbiBiZSBOVUxMIGlmIFB5RGljdF9OZXcgZmFpbGVkICovCiAgICAgaWYgKGF0dHJpYikKICAgICAgICAgaWYgKFB5RGljdF9VcGRhdGUoYXR0cmliLCBrd2RzKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQzMyw4ICs0MzcsMTAgQEAKICAgICAvKiBtYWtlIHN1cmUgc2VsZi0+Y2hpbGRyZW4gY2FuIGhvbGQgdGhlIGdpdmVuIG51bWJlciBvZiBleHRyYQogICAgICAgIGVsZW1lbnRzLiAgc2V0IGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIGlmIGFsbG9jYXRpb24gZmFpbGVkICovCiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBzaXplID0gc2VsZi0+ZXh0cmEtPmxlbmd0aCArIGV4dHJhOwogCkBAIC01NjEsOCArNTY3LDkgQEAKICAgICBQeU9iamVjdCogYXR0cmliID0gTlVMTDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hT3xPITpTdWJFbGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJkVsZW1lbnRfVHlwZSwgJnBhcmVudCwgJnRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RGljdF9UeXBlLCAmYXR0cmliKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RGljdF9UeXBlLCAmYXR0cmliKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpZiAoYXR0cmliKSB7CiAgICAgICAgIC8qIGF0dHJpYiBwYXNzZWQgYXMgcG9zaXRpb25hbCBhcmcgKi8KQEAgLTU4Niw4ICs1OTMsOSBAQAogICAgIH0KIAogICAgIGVsZW0gPSBjcmVhdGVfbmV3X2VsZW1lbnQodGFnLCBhdHRyaWIpOwotCiAgICAgUHlfREVDUkVGKGF0dHJpYik7CisgICAgaWYgKGVsZW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoZWxlbWVudF9hZGRfc3ViZWxlbWVudChwYXJlbnQsIGVsZW0pIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CkBAIC02NDUsNyArNjUzLDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIG1ldGhvZHMgKGluIGFscGhhYmV0aWNhbCBvcmRlcikgKi8KIAogc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9hcHBlbmQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC02ODksOCArNjk2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlbGVtZW50ID0gKEVsZW1lbnRPYmplY3QqKSBjcmVhdGVfbmV3X2VsZW1lbnQoCi0gICAgICAgIHNlbGYtPnRhZywgKHNlbGYtPmV4dHJhKSA/IHNlbGYtPmV4dHJhLT5hdHRyaWIgOiBQeV9Ob25lCi0gICAgICAgICk7CisgICAgICAgIHNlbGYtPnRhZywgKHNlbGYtPmV4dHJhKSA/IHNlbGYtPmV4dHJhLT5hdHRyaWIgOiBQeV9Ob25lKTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC03MDMsNyArNzA5LDYgQEAKICAgICBQeV9JTkNSRUYoSk9JTl9PQkooZWxlbWVudC0+dGFpbCkpOwogCiAgICAgaWYgKHNlbGYtPmV4dHJhKSB7Ci0KICAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKGVsZW1lbnQsIHNlbGYtPmV4dHJhLT5sZW5ndGgpIDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGVsZW1lbnQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MTUsNyArNzIwLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmV4dHJhLT5sZW5ndGggPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwotCiAgICAgfQogCiAgICAgcmV0dXJuIChQeU9iamVjdCopIGVsZW1lbnQ7CkBAIC03NzIsNyArNzc2LDYgQEAKICAgICBlbGVtZW50LT50YWlsID0gSk9JTl9TRVQodGFpbCwgSk9JTl9HRVQoc2VsZi0+dGFpbCkpOwogCiAgICAgaWYgKHNlbGYtPmV4dHJhKSB7Ci0KICAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKGVsZW1lbnQsIHNlbGYtPmV4dHJhLT5sZW5ndGgpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTc4Niw3ICs3ODksNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZWxlbWVudC0+ZXh0cmEtPmxlbmd0aCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0KICAgICB9CiAKICAgICAvKiBhZGQgb2JqZWN0IHRvIG1lbW8gZGljdGlvbmFyeSAoc28gZGVlcGNvcHkgd29uJ3QgdmlzaXQgaXQgYWdhaW4pICovCkBAIC0xMDc5LDYgKzEwODEsNyBAQAogICAgIFB5T2JqZWN0KiB0YWc7CiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOmZpbmQiLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKQpAQCAtMTA4Nyw3ICsxMDkwLDcgQEAKICAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGZpbmQpOwogICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcwogICAgICAgICAgICAgKTsKICAgICB9CiAKQEAgLTExMTUsNiArMTExOCw3IEBACiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIF9QeV9JREVOVElGSUVSKGZpbmR0ZXh0KTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAiZGVmYXVsdCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpmaW5kdGV4dCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmZGVmYXVsdF92YWx1ZSwgJm5hbWVzcGFjZXMpKQpAQCAtMTEyMiw3ICsxMTI2LDcgQEAKIAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpCiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kdGV4dCwgIk9PT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmR0ZXh0LCAiT09PTyIsIHNlbGYsIHRhZywgZGVmYXVsdF92YWx1ZSwgbmFtZXNwYWNlcwogICAgICAgICAgICAgKTsKIAogICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKQEAgLTExMzIsOCArMTEzNiw4IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEVsZW1lbnRPYmplY3QqIGl0ZW0gPSAoRWxlbWVudE9iamVjdCopIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKEVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSAmJiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgdGFnLCBQeV9FUSkgPT0gMSkpIHsKLQorICAgICAgICBpZiAoRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pICYmCisgICAgICAgICAgICAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgdGFnLCBQeV9FUSkgPT0gMSkpIHsKICAgICAgICAgICAgIFB5T2JqZWN0KiB0ZXh0ID0gZWxlbWVudF9nZXRfdGV4dChpdGVtKTsKICAgICAgICAgICAgIGlmICh0ZXh0ID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9OZXcoMCwgMCk7CkBAIC0xMTU0LDYgKzExNTgsNyBAQAogICAgIFB5T2JqZWN0KiB0YWc7CiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOmZpbmRhbGwiLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKQpAQCAtMTE2Miw3ICsxMTY3LDcgQEAKICAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGZpbmRhbGwpOwogICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZGFsbCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZGFsbCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcwogICAgICAgICAgICAgKTsKICAgICB9CiAKQEAgLTExOTQsMTQgKzExOTksMTUgQEAKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgX1B5X0lERU5USUZJRVIoaXRlcmZpbmQpOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOml0ZXJmaW5kIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKLSAgICAgICAgKTsKKyAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0xMzEyLDggKzEzMTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJkVsZW1lbnRfVHlwZSwgJmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICBpbmRleCArPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwpAQCAtMTQ1NCw4ICsxNDYyLDEwIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpzZXQiLCAma2V5LCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgYXR0cmliID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOwogICAgIGlmICghYXR0cmliKQpAQCAtMTU3MCw4ICsxNTgwLDEwIEBACiAgICAgICAgIFB5T2JqZWN0KiByZWN5Y2xlID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QqIHNlcSA9IE5VTEw7CiAKLSAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKICAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGl0ZW0sCiAgICAgICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCwKQEAgLTE3ODYsNyArMTc5OCw3IEBACiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRleHQiKSA9PSAwKSB7CiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X3RleHQoc2VsZik7Ci0gICAgICAgIFB5X0lOQ1JFRihyZXMpOworICAgICAgICBQeV9YSU5DUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQogCkBAIC0xODAxLDggKzE4MTMsMTAgQEAKICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGFpbChzZWxmKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXMgPSBlbGVtZW50X2dldF9hdHRyaWIoc2VsZik7CiAgICAgfQogCkBAIC0xODE5LDEwICsxODMzLDEwIEBACiAgICAgY2hhciAqbmFtZSA9ICIiOwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZW9iaikpCiAgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWVvYmopOwotCi0gICAgaWYgKG5hbWUgPT0gTlVMTCkgeworICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgeworCisgICAgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZi0+dGFnKTsKICAgICAgICAgc2VsZi0+dGFnID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT50YWcpOwpAQCAtMTgzNSw4ICsxODQ5LDEwIEBACiAgICAgICAgIHNlbGYtPnRhaWwgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnRhaWwpOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJhdHRyaWIiKSA9PSAwKSB7Ci0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoc2VsZi0+ZXh0cmEtPmF0dHJpYik7CiAgICAgICAgIHNlbGYtPmV4dHJhLT5hdHRyaWIgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwpAQCAtMjE1MiwxNCArMjE2OCw2IEBACiAgICAgaXQgPSBQeU9iamVjdF9HQ19OZXcoRWxlbWVudEl0ZXJPYmplY3QsICZFbGVtZW50SXRlcl9UeXBlKTsKICAgICBpZiAoIWl0KQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIShpdC0+cGFyZW50X3N0YWNrID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihQYXJlbnRMb2NhdG9yKSkpKSB7Ci0gICAgICAgIFB5T2JqZWN0X0dDX0RlbChpdCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGl0LT5wYXJlbnRfc3RhY2stPnBhcmVudCA9IE5VTEw7Ci0gICAgaXQtPnBhcmVudF9zdGFjay0+Y2hpbGRfaW5kZXggPSAwOwotICAgIGl0LT5wYXJlbnRfc3RhY2stPm5leHQgPSBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh0YWcpKQogICAgICAgICBzdGFyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIioiKTsKQEAgLTIxNjgsMTcgKzIxNzYsMjcgQEAKIAogICAgIGlmIChzdGFyICYmIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0YWcsIHN0YXIsIFB5X0VRKSA9PSAxKQogICAgICAgICB0YWcgPSBQeV9Ob25lOwotCiAgICAgUHlfWERFQ1JFRihzdGFyKTsKKworICAgIFB5X0lOQ1JFRih0YWcpOwogICAgIGl0LT5zb3VnaHRfdGFnID0gdGFnOwogICAgIGl0LT5yb290X2RvbmUgPSAwOwogICAgIGl0LT5nZXR0ZXh0ID0gZ2V0dGV4dDsKKyAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgaXQtPnJvb3RfZWxlbWVudCA9IHNlbGY7CiAKLSAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgUHlfSU5DUkVGKHRhZyk7Ci0KICAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CisKKyAgICBpdC0+cGFyZW50X3N0YWNrID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihQYXJlbnRMb2NhdG9yKSk7CisgICAgaWYgKGl0LT5wYXJlbnRfc3RhY2sgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoaXQpOworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaXQtPnBhcmVudF9zdGFjay0+cGFyZW50ID0gTlVMTDsKKyAgICBpdC0+cGFyZW50X3N0YWNrLT5jaGlsZF9pbmRleCA9IDA7CisgICAgaXQtPnBhcmVudF9zdGFjay0+bmV4dCA9IE5VTEw7CisKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaXQ7CiB9CiAKQEAgLTIzNzEsNiArMjM4OSw3IEBACiB7CiAgICAgUHlPYmplY3QqIG5vZGU7CiAgICAgUHlPYmplY3QqIHRoaXM7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoc2VsZi0+ZGF0YSkgewogICAgICAgICBpZiAoc2VsZi0+dGhpcyA9PSBzZWxmLT5sYXN0KSB7CkBAIC0yNDAxLDcgKzI0MjAsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzZWxmLT5yb290KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosCisgICAgICAgICAgICAgICAgc3QtPnBhcnNlZXJyb3Jfb2JqLAogICAgICAgICAgICAgICAgICJtdWx0aXBsZSBlbGVtZW50cyBvbiB0b3AgbGV2ZWwiCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0yNjg4LDEwICsyNzA3LDEyIEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogdGhlIGV4cGF0IGludGVyZmFjZSAqLwogCi0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCi0KICNpbmNsdWRlICJleHBhdC5oIgogI2luY2x1ZGUgInB5ZXhwYXQuaCIKKworLyogVGhlIFB5RXhwYXRfQ0FQSSBzdHJ1Y3R1cmUgaXMgYW4gaW1tdXRhYmxlIGRpc3BhdGNoIHRhYmxlLCBzbyBpdCBjYW4gYmUKKyAqIGNhY2hlZCBnbG9iYWxseSB3aXRob3V0IGJlaW5nIGluIHBlci1tb2R1bGUgc3RhdGUuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlFeHBhdF9DQVBJICpleHBhdF9jYXBpOwogI2RlZmluZSBFWFBBVChmdW5jKSAoZXhwYXRfY2FwaS0+ZnVuYykKIApAQCAtMjc1OCw2ICsyNzc5LDEwIEBACiAgICAgICAgIGlmIChpICE9IHNpemUpIHsKICAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gdW5pdmVyc2FsIG5hbWUgKi8KICAgICAgICAgICAgIHRhZyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSsxKTsKKyAgICAgICAgICAgIGlmICh0YWcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHRhZyk7CiAgICAgICAgICAgICBwWzBdID0gJ3snOwogICAgICAgICAgICAgbWVtY3B5KHArMSwgc3RyaW5nLCBzaXplKTsKQEAgLTI3OTcsNiArMjgyMiw3IEBACiBleHBhdF9zZXRfZXJyb3IoZW51bSBYTUxfRXJyb3IgZXJyb3JfY29kZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgUHlPYmplY3QgKmVycm1zZywgKmVycm9yLCAqcG9zaXRpb24sICpjb2RlOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgZXJybXNnID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzOiBsaW5lICVkLCBjb2x1bW4gJWQiLAogICAgICAgICAgICAgICAgIG1lc3NhZ2UgPyBtZXNzYWdlIDogRVhQQVQoRXJyb3JTdHJpbmcpKGVycm9yX2NvZGUpLApAQCAtMjgwNCw3ICsyODMwLDcgQEAKICAgICBpZiAoZXJybXNnID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLCAiTyIsIGVycm1zZyk7CisgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc3QtPnBhcnNlZXJyb3Jfb2JqLCAiTyIsIGVycm1zZyk7CiAgICAgUHlfREVDUkVGKGVycm1zZyk7CiAgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzNCw3ICsyODYwLDcgQEAKICAgICB9CiAgICAgUHlfREVDUkVGKHBvc2l0aW9uKTsKIAotICAgIFB5RXJyX1NldE9iamVjdChlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgZXJyb3IpOworICAgIFB5RXJyX1NldE9iamVjdChzdC0+cGFyc2VlcnJvcl9vYmosIGVycm9yKTsKICAgICBQeV9ERUNSRUYoZXJyb3IpOwogfQogCkBAIC0yODUyLDYgKzI4NzgsOSBAQAogICAgIGlmIChkYXRhX2xlbiA8IDIgfHwgZGF0YV9pblswXSAhPSAnJicpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBrZXkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luICsgMSwgZGF0YV9sZW4gLSAyLCAic3RyaWN0Iik7CiAgICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4OTIsNiArMjkyMSw5IEBACiAgICAgUHlPYmplY3QqIGF0dHJpYjsKICAgICBpbnQgb2s7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLyogdGFnIG5hbWUgKi8KICAgICB0YWcgPSBtYWtldW5pdmVyc2FsKHNlbGYsIHRhZ19pbik7CiAgICAgaWYgKCF0YWcpCkBAIC0yOTUwLDYgKzI5ODIsOSBAQAogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZGF0YSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGRhdGFfaW4sIGRhdGFfbGVuLCAic3RyaWN0Iik7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47IC8qIHBhcnNlciB3aWxsIGxvb2sgZm9yIGVycm9ycyAqLwpAQCAtMjk3Myw2ICszMDA4LDkgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiByZXMgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpCiAgICAgICAgIC8qIHNob3J0Y3V0ICovCiAgICAgICAgIC8qIHRoZSBzdGFuZGFyZCB0cmVlIGJ1aWxkZXIgZG9lc24ndCBsb29rIGF0IHRoZSBlbmQgdGFnICovCkBAIC0yOTk3LDYgKzMwMzUsOSBAQAogICAgIFB5T2JqZWN0KiBzcHJlZml4ID0gTlVMTDsKICAgICBQeU9iamVjdCogc3VyaSA9IE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgc3VyaSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHVyaSwgc3RybGVuKHVyaSksICJzdHJpY3QiKTsKICAgICBpZiAoIXN1cmkpCiAgICAgICAgIHJldHVybjsKQEAgLTMwMjEsNiArMzA2Miw5IEBACiBzdGF0aWMgdm9pZAogZXhwYXRfZW5kX25zX2hhbmRsZXIoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBjb25zdCBYTUxfQ2hhciogcHJlZml4X2luKQogeworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICB0cmVlYnVpbGRlcl9oYW5kbGVfbmFtZXNwYWNlKAogICAgICAgICAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsIDAsIE5VTEwsIE5VTEwKICAgICAgICAgKTsKQEAgLTMwMzIsNiArMzA3Niw5IEBACiAgICAgUHlPYmplY3QqIGNvbW1lbnQ7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+aGFuZGxlX2NvbW1lbnQpIHsKICAgICAgICAgY29tbWVudCA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGNvbW1lbnRfaW4sIHN0cmxlbihjb21tZW50X2luKSwgInN0cmljdCIpOwogICAgICAgICBpZiAoY29tbWVudCkgewpAQCAtMzA1NCw2ICszMTAxLDkgQEAKICAgICBQeU9iamVjdCAqcGFyc2VyX2RvY3R5cGUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGRvY3R5cGVfbmFtZV9vYmogPSBtYWtldW5pdmVyc2FsKHNlbGYsIGRvY3R5cGVfbmFtZSk7CiAgICAgaWYgKCFkb2N0eXBlX25hbWVfb2JqKQogICAgICAgICByZXR1cm47CkBAIC0zMTIyLDYgKzMxNzIsOSBAQAogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmhhbmRsZV9waSkgewogICAgICAgICB0YXJnZXQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh0YXJnZXRfaW4sIHN0cmxlbih0YXJnZXRfaW4pLCAic3RyaWN0Iik7CiAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luLCBzdHJsZW4oZGF0YV9pbiksICJzdHJpY3QiKTsKQEAgLTMyOTQsNiArMzM0Nyw3IEBACiB7CiAgICAgaW50IG9rOwogCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKICAgICBvayA9IEVYUEFUKFBhcnNlKShzZWxmLT5wYXJzZXIsIGRhdGEsIGRhdGFfbGVuLCBmaW5hbCk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTMzMjgsMTEgKzMzODIsMTQgQEAKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gdHJlZWJ1aWxkZXJfZG9uZSgoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQpOwotICAgIH0gaWYgKHNlbGYtPmhhbmRsZV9jbG9zZSkgeworICAgIH0KKyAgICBlbHNlIGlmIChzZWxmLT5oYW5kbGVfY2xvc2UpIHsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+aGFuZGxlX2Nsb3NlLCAiIik7Ci0gICAgfSBlbHNlCisgICAgfQorICAgIGVsc2UgewogICAgICAgICByZXR1cm4gcmVzOworICAgIH0KIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMzM3MCwxMCArMzQyNyw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLXhtbHBhcnNlcl9wYXJzZShYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreG1scGFyc2VyX3BhcnNlX3dob2xlKFhNTFBhcnNlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7Ci0gICAgLyogKGludGVybmFsKSBwYXJzZSB1bnRpbCBlbmQgb2YgaW5wdXQgc3RyZWFtICovCi0KKyAgICAvKiAoaW50ZXJuYWwpIHBhcnNlIHRoZSB3aG9sZSBpbnB1dCwgdW50aWwgZW5kIG9mIHN0cmVhbSAqLwogICAgIFB5T2JqZWN0KiByZWFkZXI7CiAgICAgUHlPYmplY3QqIGJ1ZmZlcjsKICAgICBQeU9iamVjdCogdGVtcDsKQEAgLTM0MDAsNyArMzQ1Niw3IEBACiAKICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGJ1ZmZlcikpIHsKICAgICAgICAgICAgIC8qIEEgdW5pY29kZSBvYmplY3QgaXMgZW5jb2RlZCBpbnRvIGJ5dGVzIHVzaW5nIFVURi04ICovCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKGJ1ZmZlcikgPT0gMCkgeworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGJ1ZmZlcikgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzQ1NCwxNCArMzUxMCwxNCBAQAogeG1scGFyc2VyX3NldGV2ZW50cyhYTUxQYXJzZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIC8qIGFjdGl2YXRlIGVsZW1lbnQgZXZlbnQgcmVwb3J0aW5nICovCisgICAgUHlfc3NpemVfdCBpLCBzZXFsZW47CisgICAgVHJlZUJ1aWxkZXJPYmplY3QgKnRhcmdldDsKIAotICAgIFB5X3NzaXplX3QgaTsKLSAgICBUcmVlQnVpbGRlck9iamVjdCogdGFyZ2V0OwotCi0gICAgUHlPYmplY3QqIGV2ZW50czsgLyogZXZlbnQgY29sbGVjdG9yICovCi0gICAgUHlPYmplY3QqIGV2ZW50X3NldCA9IFB5X05vbmU7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOl9zZXRldmVudHMiLCAgJlB5TGlzdF9UeXBlLCAmZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRfc2V0KSkKKyAgICBQeU9iamVjdCAqZXZlbnRzX3F1ZXVlOworICAgIFB5T2JqZWN0ICpldmVudHNfdG9fcmVwb3J0ID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqZXZlbnRzX3NlcTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86X3NldGV2ZW50cyIsICAmUHlMaXN0X1R5cGUsICZldmVudHNfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudHNfdG9fcmVwb3J0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIVRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkgewpAQCAtMzQ3NSw5ICszNTMxLDkgQEAKIAogICAgIHRhcmdldCA9IChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldDsKIAotICAgIFB5X0lOQ1JFRihldmVudHMpOworICAgIFB5X0lOQ1JFRihldmVudHNfcXVldWUpOwogICAgIFB5X1hERUNSRUYodGFyZ2V0LT5ldmVudHMpOwotICAgIHRhcmdldC0+ZXZlbnRzID0gZXZlbnRzOworICAgIHRhcmdldC0+ZXZlbnRzID0gZXZlbnRzX3F1ZXVlOwogCiAgICAgLyogY2xlYXIgb3V0IGV4aXN0aW5nIGV2ZW50cyAqLwogICAgIFB5X0NMRUFSKHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqKTsKQEAgLTM0ODUsNzUgKzM1NDEsNzEgQEAKICAgICBQeV9DTEVBUih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaik7CiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqKTsKIAotICAgIGlmIChldmVudF9zZXQgPT0gUHlfTm9uZSkgeworICAgIGlmIChldmVudHNfdG9fcmVwb3J0ID09IFB5X05vbmUpIHsKICAgICAgICAgLyogZGVmYXVsdCBpcyAiZW5kIiBvbmx5ICovCiAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJlbmQiKTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogCi0gICAgaWYgKCFQeVR1cGxlX0NoZWNrKGV2ZW50X3NldCkpIC8qIEZJWE1FOiBoYW5kbGUgYXJiaXRyYXJ5IHNlcXVlbmNlcyAqLwotICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghKGV2ZW50c19zZXEgPSBQeVNlcXVlbmNlX0Zhc3QoZXZlbnRzX3RvX3JlcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudHMgbXVzdCBiZSBhIHNlcXVlbmNlIikpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKGV2ZW50X3NldCk7IGkrKykgewotICAgICAgICBQeU9iamVjdCogaXRlbSA9IFB5VHVwbGVfR0VUX0lURU0oZXZlbnRfc2V0LCBpKTsKLSAgICAgICAgY2hhciogZXZlbnQ7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgIGV2ZW50ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhpdGVtKTsKLSAgICAgICAgICAgIGlmIChldmVudCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhpdGVtKSkKLSAgICAgICAgICAgIGV2ZW50ID0gUHlCeXRlc19BU19TVFJJTkcoaXRlbSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX1NpemUoZXZlbnRzX3NlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7CisgICAgICAgIFB5T2JqZWN0ICpldmVudF9uYW1lX29iaiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShldmVudHNfc2VxLCBpKTsKKyAgICAgICAgY2hhciAqZXZlbnRfbmFtZSA9IE5VTEw7CisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soZXZlbnRfbmFtZV9vYmopKSB7CisgICAgICAgICAgICBldmVudF9uYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhldmVudF9uYW1lX29iaik7CisgICAgICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhldmVudF9uYW1lX29iaikpIHsKKyAgICAgICAgICAgIGV2ZW50X25hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhldmVudF9uYW1lX29iaik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmNtcChldmVudCwgInN0YXJ0IikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9ldmVudF9vYmogPSBpdGVtOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgImVuZCIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKworICAgICAgICBpZiAoZXZlbnRfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgZXZlbnRzIHNlcXVlbmNlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgInN0YXJ0IikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKKyAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJlbmQiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmVuZF9ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gaXRlbTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnQsICJzdGFydC1ucyIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQtbnMiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiA9IGl0ZW07CisgICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOwogICAgICAgICAgICAgRVhQQVQoU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIpKAogICAgICAgICAgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgICAgICAgICAoWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X3N0YXJ0X25zX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfZW5kX25zX2hhbmRsZXIKICAgICAgICAgICAgICAgICApOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgImVuZC1ucyIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgImVuZC1ucyIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPmVuZF9uc19ldmVudF9vYmogPSBpdGVtOworICAgICAgICAgICAgdGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CiAgICAgICAgICAgICBFWFBBVChTZXROYW1lc3BhY2VEZWNsSGFuZGxlcikoCiAgICAgICAgICAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAgICAgICAgIChYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfc3RhcnRfbnNfaGFuZGxlciwKICAgICAgICAgICAgICAgICAoWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9lbmRfbnNfaGFuZGxlcgogICAgICAgICAgICAgICAgICk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAidW5rbm93biBldmVudCAnJXMnIiwgZXZlbnQKLSAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIGV2ZW50ICclcyciLCBldmVudF9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogCisgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOwogICAgIFB5X1JFVFVSTl9OT05FOwotCi0gIGVycm9yOgotICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAiaW52YWxpZCBldmVudCB0dXBsZSIKLSAgICAgICAgKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHhtbHBhcnNlcl9tZXRob2RzW10gPSB7CiAgICAgeyJmZWVkIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfZmVlZCwgTUVUSF9PfSwKICAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfY2xvc2UsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJfcGFyc2UiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9wYXJzZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Il9wYXJzZV93aG9sZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3BhcnNlX3dob2xlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiX3NldGV2ZW50cyIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3NldGV2ZW50cywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImRvY3R5cGUiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9kb2N0eXBlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHtOVUxMLCBOVUxMfQpAQCAtMzYyNSw4ICszNjc3LDYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCi0jZW5kaWYKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIHB5dGhvbiBtb2R1bGUgaW50ZXJmYWNlICovCiAKQEAgLTM2MzYsMjIgKzM2ODYsMjkgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfZWxlbWVudHRyZWVtb2R1bGUgPSB7Ci0gICAgICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAgICAgIl9lbGVtZW50dHJlZSIsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIC0xLAotICAgICAgICBfZnVuY3Rpb25zLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGVsZW1lbnR0cmVlbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX2VsZW1lbnR0cmVlIiwKKyAgICBOVUxMLAorICAgIHNpemVvZihlbGVtZW50dHJlZXN0YXRlKSwKKyAgICBfZnVuY3Rpb25zLAorICAgIE5VTEwsCisgICAgZWxlbWVudHRyZWVfdHJhdmVyc2UsCisgICAgZWxlbWVudHRyZWVfY2xlYXIsCisgICAgZWxlbWVudHRyZWVfZnJlZQogfTsKIAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fZWxlbWVudHRyZWUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbSwgKnRlbXA7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3Q7CisKKyAgICBtID0gUHlTdGF0ZV9GaW5kTW9kdWxlKCZlbGVtZW50dHJlZW1vZHVsZSk7CisgICAgaWYgKG0pIHsKKyAgICAgICAgUHlfSU5DUkVGKG0pOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CiAKICAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlcyAqLwogICAgIGlmIChQeVR5cGVfUmVhZHkoJkVsZW1lbnRJdGVyX1R5cGUpIDwgMCkKQEAgLTM2NjAsMjEgKzM3MTcsMjAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRWxlbWVudF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQogICAgIGlmIChQeVR5cGVfUmVhZHkoJlhNTFBhcnNlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAKLSAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfZWxlbWVudHRyZWVtb2R1bGUpOworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJmVsZW1lbnR0cmVlbW9kdWxlKTsKICAgICBpZiAoIW0pCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0ID0gRVRfU1RBVEUobSk7CiAKICAgICBpZiAoISh0ZW1wID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb3B5IikpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbGVtZW50dHJlZV9kZWVwY29weV9vYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJkZWVwY29weSIpOworICAgIHN0LT5kZWVwY29weV9vYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJkZWVwY29weSIpOwogICAgIFB5X1hERUNSRUYodGVtcCk7CiAKLSAgICBpZiAoIShlbGVtZW50cGF0aF9vYmogPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInhtbC5ldHJlZS5FbGVtZW50UGF0aCIpKSkKKyAgICBpZiAoIShzdC0+ZWxlbWVudHBhdGhfb2JqID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJ4bWwuZXRyZWUuRWxlbWVudFBhdGgiKSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbGluayBhZ2FpbnN0IHB5ZXhwYXQgKi8KQEAgLTM2OTQsMTEgKzM3NTAsMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmogPSBQeUVycl9OZXdFeGNlcHRpb24oCisgICAgc3QtPnBhcnNlZXJyb3Jfb2JqID0gUHlFcnJfTmV3RXhjZXB0aW9uKAogICAgICAgICAieG1sLmV0cmVlLkVsZW1lbnRUcmVlLlBhcnNlRXJyb3IiLCBQeUV4Y19TeW50YXhFcnJvciwgTlVMTAogICAgICAgICApOwotICAgIFB5X0lOQ1JFRihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQYXJzZUVycm9yIiwgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmopOworICAgIFB5X0lOQ1JFRihzdC0+cGFyc2VlcnJvcl9vYmopOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGFyc2VFcnJvciIsIHN0LT5wYXJzZWVycm9yX29iaik7CiAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJkVsZW1lbnRfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJFbGVtZW50IiwgKFB5T2JqZWN0ICopJkVsZW1lbnRfVHlwZSk7CkBAIC0zNzA2LDEwICszNzYyLDggQEAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlRyZWVCdWlsZGVyX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVHJlZUJ1aWxkZXIiLCAoUHlPYmplY3QgKikmVHJlZUJ1aWxkZXJfVHlwZSk7CiAKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlhNTFBhcnNlcl9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlhNTFBhcnNlciIsIChQeU9iamVjdCAqKSZYTUxQYXJzZXJfVHlwZSk7Ci0jZW5kaWYKIAogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jIGIvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCmluZGV4IDhmMDdhODkuLjU3YjFhYzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYworKysgYi9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgIG9mIGZyb3plbiBtb2R1bGVzIGluc3RlYWQsIGxlZnQgZGVsaWJlcmF0ZWx5IGJsYW5rIHNvIGFzIHRvIGF2b2lkCiAgICB1bmludGVudGlvbmFsIGltcG9ydCBvZiBhIHN0YWxlIHZlcnNpb24gb2YgX2Zyb3plbl9pbXBvcnRsaWIuICovCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0geworY29uc3Qgc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CiAgICAgezAsIDAsIDB9IC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNSw3ICsyNSw3IEBACiAvKiBPbiBXaW5kb3dzLCB0aGlzIGxpbmtzIHdpdGggdGhlIHJlZ3VsYXIgcHl0aG9uWFkuZGxsLCBzbyB0aGlzIHZhcmlhYmxlIGNvbWVzCiAgICBmcm9tIGZyb3plbi5vYmouIEluIHRoZSBNYWtlZmlsZSwgZnJvemVuLm8gaXMgbm90IGxpbmtlZCBpbnRvIHRoaXMgZXhlY3V0YWJsZSwKICAgIHNvIHdlIGRlZmluZSB0aGUgdmFyaWFibGUgaGVyZS4gKi8KLXN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOworY29uc3Qgc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CiAjZW5kaWYKIAogY29uc3QgY2hhciBoZWFkZXJbXSA9ICIvKiBBdXRvLWdlbmVyYXRlZCBieSBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgKi8iOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGZwcmludGYob3V0ZmlsZSwgIiVzXG4iLCBoZWFkZXIpOwotICAgIGZwcmludGYob3V0ZmlsZSwgInVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0ge1xuIik7CisgICAgZnByaW50ZihvdXRmaWxlLCAiY29uc3QgdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7XG4iKTsKICAgICBmb3IgKG4gPSAwOyBuIDwgZGF0YV9zaXplOyBuICs9IDE2KSB7CiAgICAgICAgIHNpemVfdCBpLCBlbmQgPSBQeV9NSU4obiArIDE2LCBkYXRhX3NpemUpOwogICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgICAgIik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKaW5kZXggMGJkNTljOC4uMjI5ZTE2ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwpAQCAtNzksNyArNzksNyBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotZGJtX2RlYWxsb2MocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCkKK2RibV9kZWFsbG9jKGRibW9iamVjdCAqZHApCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGdkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC0xMTIsNyArMTEyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBkcmVjLCBrcmVjOwpAQCAtMjMyLDcgKzIzMiw3IEBACiBDbG9zZXMgdGhlIGRhdGFiYXNlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2Nsb3NlKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTI0Nyw5ICsyNDcsOSBAQAogR2V0IGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleSwgbmV4dGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0zMzcsOSArMzM3LDkgQEAKIHJldHVybnMgdGhlIHN0YXJ0aW5nIGtleS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9maXJzdGtleShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2ZpcnN0a2V5KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5OwogCiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwpAQCAtMzY3LDkgKzM2Nyw5IEBACiAgICAgICAgICAgayA9IGRiLm5leHRrZXkoaykiKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9uZXh0a2V5KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQorZGJtX25leHRrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5LCBuZXh0a2V5OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpuZXh0a2V5IiwgJmtleS5kcHRyLCAma2V5LmRzaXplKSkKQEAgLTM5Niw3ICszOTYsNyBAQAoga2VwdCBhbmQgcmV1c2VkIGFzIG5ldyAoa2V5LHZhbHVlKSBwYWlycyBhcmUgYWRkZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fcmVvcmdhbml6ZShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX3Jlb3JnYW5pemUoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CiAgICAgZXJybm8gPSAwOwpAQCAtNDE3LDcgKzQxNyw3IEBACiBhbnkgdW53cml0dGVuIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGlzay4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zeW5jKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fc3luYyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKICAgICBnZGJtX3N5bmMoZHAtPmRpX2RibSk7CkBAIC00MjUsNiArNDI1LDIwIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2VudGVyX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZXhpdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOworfQorCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtX21ldGhvZHNbXSA9IHsKICAgICB7ImNsb3NlIiwgICAgIChQeUNGdW5jdGlvbilkYm1fY2xvc2UsICAgTUVUSF9OT0FSR1MsIGRibV9jbG9zZV9fZG9jX199LAogICAgIHsia2V5cyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICBNRVRIX05PQVJHUywgZGJtX2tleXNfX2RvY19ffSwKQEAgLTQzNCw2ICs0NDgsOCBAQAogICAgIHsic3luYyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zeW5jLCAgICBNRVRIX05PQVJHUywgZGJtX3N5bmNfX2RvY19ffSwKICAgICB7ImdldCIsICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgTUVUSF9WQVJBUkdTLCBkYm1fZ2V0X19kb2NfX30sCiAgICAgeyJzZXRkZWZhdWx0IiwoUHlDRnVuY3Rpb24pZGJtX3NldGRlZmF1bHQsTUVUSF9WQVJBUkdTLCBkYm1fc2V0ZGVmYXVsdF9fZG9jX199LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZ2VzdGFsdC5jIGIvTW9kdWxlcy9fZ2VzdGFsdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDMwNjgzLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2dlc3RhbHQuYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NyBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCi1USElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi1GSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFCi1GT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi1BQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNYWNpbnRvc2ggR2VzdGFsdCBpbnRlcmZhY2UgKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotCi0vKiBDb252ZXJ0IGEgNC1jaGFyIHN0cmluZyBvYmplY3QgYXJndW1lbnQgdG8gYW4gT1NUeXBlIHZhbHVlICovCi1zdGF0aWMgaW50Ci1jb252ZXJ0X3RvX09TVHlwZShQeU9iamVjdCAqdiwgT1NUeXBlICpwcikKLXsKLSAgICB1aW50MzJfdCB0bXA7Ci0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikgfHwgUHlVbmljb2RlX0dldExlbmd0aCh2KSAhPSA0KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIk9TVHlwZSBhcmcgbXVzdCBiZSBzdHJpbmcgb2YgNCBjaGFycyIpOwotICAgIHJldHVybiAwOwotICAgIH0KLSAgICBtZW1jcHkoKGNoYXIgKikmdG1wLCBfUHlVbmljb2RlX0FzU3RyaW5nKHYpLCA0KTsKLSAgICAqcHIgPSAoT1NUeXBlKW50b2hsKHRtcCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1nZXN0YWx0X2dlc3RhbHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIE9TRXJyIGlFcnI7Ci0gICAgT1NUeXBlIHNlbGVjdG9yOwotICAgIFNJbnQzMiByZXNwb25zZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mIiwgY29udmVydF90b19PU1R5cGUsICZzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlFcnIgPSBHZXN0YWx0KHNlbGVjdG9yLCAmcmVzcG9uc2UpOwotICAgIGlmIChpRXJyICE9IDApIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGV4aXQgY29kZSEiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyZXNwb25zZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgZ2VzdGFsdF9tZXRob2RzW10gPSB7Ci0gICAgeyJnZXN0YWx0IiwgZ2VzdGFsdF9nZXN0YWx0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHtOVUxMLCBOVUxMfSAvKiBTZW50aW5lbCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBnZXN0YWx0bW9kdWxlID0gewotICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAiX2dlc3RhbHQiLAotICAgIE5VTEwsCi0gICAgLTEsCi0gICAgZ2VzdGFsdF9tZXRob2RzLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKLX07Ci0KLVB5TU9ESU5JVF9GVU5DCi1QeUluaXRfX2dlc3RhbHQodm9pZCkKLXsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZnZXN0YWx0bW9kdWxlKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCmluZGV4IDNhYjFjMGMuLmE4NjZmYmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKKysrIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwpAQCAtMTcsMzYgKzE3LDE2IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCi0jaWZkZWYgV0lUSF9USFJFQUQKLSNpbmNsdWRlICJweXRocmVhZC5oIgotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKLSAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKLSAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCi0gICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCi0gICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAotICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9Ci0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAotICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAotICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAotICAgICAgICB9Ci0jZWxzZQotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCi0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKLSNlbmRpZgogCiAvKiBFVlAgaXMgdGhlIHByZWZlcnJlZCBpbnRlcmZhY2UgdG8gaGFzaGluZyBpbiBPcGVuU1NMICovCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KIC8qIFdlIHVzZSB0aGUgb2JqZWN0IGludGVyZmFjZSB0byBkaXNjb3ZlciB3aGF0IGhhc2hlcyBPcGVuU1NMIHN1cHBvcnRzLiAqLwogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCiAKICNkZWZpbmUgTVVOQ0hfU0laRSBJTlRfTUFYCiAKLS8qIFRPRE8oZ3BzKTogV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBvciBFVlBvYmplY3QgYXR0cmlidXRlCi0gKiB0byBhbGxvdyB0aGUgdXNlciB0byBvcHRpbWl6ZSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gdGhleSdyZSB1c2luZy4gKi8KLSNkZWZpbmUgSEFTSExJQl9HSUxfTUlOU0laRSAyMDQ4Ci0KICNpZm5kZWYgSEFTSF9PQkpfQ09OU1RSVUNUT1IKICNkZWZpbmUgSEFTSF9PQkpfQ09OU1RSVUNUT1IgMAogI2VuZGlmCkBAIC00ODksNiArNDY5LDIyMyBAQAogfQogCiAKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDAgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ITUFDKSBcCisgICAgICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSkKKworI2RlZmluZSBQWV9QQktERjJfSE1BQyAxCisKKy8qIEltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIFBLQ1M1X1BCS0RGMl9ITUFDKCkKKyAqCisgKiBQS0NTNV9QQktERjJfSE1BQ19mYXN0KCkgaGFzaGVzIHRoZSBwYXNzd29yZCBleGFjdGx5IG9uZSB0aW1lIGluc3RlYWQgb2YKKyAqIGBpdGVyYCB0aW1lcy4gVG9kYXkgKDIwMTMpIHRoZSBpdGVyYXRpb24gY291bnQgaXMgdHlwaWNhbGx5IDEwMCwwMDAgb3IKKyAqIG1vcmUuIFRoZSBpbXByb3ZlZCBhbGdvcml0aG0gaXMgbm90IHN1YmplY3QgdG8gYSBEZW5pYWwtb2YtU2VydmljZQorICogdnVsbmVyYWJpbGl0eSB3aXRoIG92ZXJseSBsYXJnZSBwYXNzd29yZHMuCisgKgorICogQWxzbyBPcGVuU1NMIDwgMS4wIGRvbid0IHByb3ZpZGUgUEtDUzVfUEJLREYyX0hNQUMoKSwgb25seQorICogUEtDUzVfUEJLREYyX1NIQTEuCisgKi8KK3N0YXRpYyBpbnQKK1BLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlciwgY29uc3QgRVZQX01EICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ3RtcFtFVlBfTUFYX01EX1NJWkVdLCAqcCwgaXRtcFs0XTsKKyAgICBpbnQgY3BsZW4sIGosIGssIHRrZXlsZW4sIG1kbGVuOworICAgIHVuc2lnbmVkIGxvbmcgaSA9IDE7CisgICAgSE1BQ19DVFggaGN0eF90cGwsIGhjdHg7CisKKyAgICBtZGxlbiA9IEVWUF9NRF9zaXplKGRpZ2VzdCk7CisgICAgaWYgKG1kbGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBITUFDX0NUWF9pbml0KCZoY3R4X3RwbCk7CisgICAgSE1BQ19DVFhfaW5pdCgmaGN0eCk7CisgICAgcCA9IG91dDsKKyAgICB0a2V5bGVuID0ga2V5bGVuOworICAgIGlmICghSE1BQ19Jbml0X2V4KCZoY3R4X3RwbCwgcGFzcywgcGFzc2xlbiwgZGlnZXN0LCBOVUxMKSkgeworICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB3aGlsZSh0a2V5bGVuKSB7CisgICAgICAgIGlmKHRrZXlsZW4gPiBtZGxlbikKKyAgICAgICAgICAgIGNwbGVuID0gbWRsZW47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNwbGVuID0gdGtleWxlbjsKKyAgICAgICAgLyogV2UgYXJlIHVubGlrZWx5IHRvIGV2ZXIgdXNlIG1vcmUgdGhhbiAyNTYgYmxvY2tzICg1MTIwIGJpdHMhKQorICAgICAgICAgKiBidXQganVzdCBpbiBjYXNlLi4uCisgICAgICAgICAqLworICAgICAgICBpdG1wWzBdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzFdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzJdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDgpICYgMHhmZik7CisgICAgICAgIGl0bXBbM10gPSAodW5zaWduZWQgY2hhcikoaSAmIDB4ZmYpOworICAgICAgICBpZiAoIUhNQUNfQ1RYX2NvcHkoJmhjdHgsICZoY3R4X3RwbCkpIHsKKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmICghSE1BQ19VcGRhdGUoJmhjdHgsIHNhbHQsIHNhbHRsZW4pCisgICAgICAgICAgICAgICAgfHwgIUhNQUNfVXBkYXRlKCZoY3R4LCBpdG1wLCA0KQorICAgICAgICAgICAgICAgIHx8ICFITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpKSB7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICBtZW1jcHkocCwgZGlndG1wLCBjcGxlbik7CisgICAgICAgIGZvciAoaiA9IDE7IGogPCBpdGVyOyBqKyspIHsKKyAgICAgICAgICAgIGlmICghSE1BQ19DVFhfY29weSgmaGN0eCwgJmhjdHhfdHBsKSkgeworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghSE1BQ19VcGRhdGUoJmhjdHgsIGRpZ3RtcCwgbWRsZW4pCisgICAgICAgICAgICAgICAgICAgIHx8ICFITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpKSB7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY3BsZW47IGsrKykgeworICAgICAgICAgICAgICAgIHBba10gXj0gZGlndG1wW2tdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRrZXlsZW4tPSBjcGxlbjsKKyAgICAgICAgaSsrOworICAgICAgICBwKz0gY3BsZW47CisgICAgfQorICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19zZXRFeGNlcHRpb24oUHlPYmplY3QgKmV4YykKK3sKKyAgICB1bnNpZ25lZCBsb25nIGVycmNvZGU7CisgICAgY29uc3QgY2hhciAqbGliLCAqZnVuYywgKnJlYXNvbjsKKworICAgIGVycmNvZGUgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgaWYgKCFlcnJjb2RlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsICJ1bmtub3duIHJlYXNvbnMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEVSUl9jbGVhcl9lcnJvcigpOworCisgICAgbGliID0gRVJSX2xpYl9lcnJvcl9zdHJpbmcoZXJyY29kZSk7CisgICAgZnVuYyA9IEVSUl9mdW5jX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKyAgICByZWFzb24gPSBFUlJfcmVhc29uX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKworICAgIGlmIChsaWIgJiYgZnVuYykgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzOiAlc10gJXMiLCBsaWIsIGZ1bmMsIHJlYXNvbik7CisgICAgfQorICAgIGVsc2UgaWYgKGxpYikgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzXSAlcyIsIGxpYiwgcmVhc29uKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsIHJlYXNvbik7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitQeURvY19TVFJWQVIocGJrZGYyX2htYWNfX2RvY19fLAorInBia2RmMl9obWFjKGhhc2hfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGRrbGVuPU5vbmUpIC0+IGtleVxuXAorXG5cCitQYXNzd29yZCBiYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyIChQS0NTICM1IHYyLjApIHdpdGggSE1BQyBhc1xuXAorcHNldWRvcmFuZG9tIGZ1bmN0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcGJrZGYyX2htYWMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaGFzaF9uYW1lIiwgInBhc3N3b3JkIiwgInNhbHQiLCAiaXRlcmF0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJka2xlbiIsIE5VTEx9OworICAgIFB5T2JqZWN0ICprZXlfb2JqID0gTlVMTCwgKmRrbGVuX29iaiA9IFB5X05vbmU7CisgICAgY2hhciAqbmFtZSwgKmtleTsKKyAgICBQeV9idWZmZXIgcGFzc3dvcmQsIHNhbHQ7CisgICAgbG9uZyBpdGVyYXRpb25zLCBka2xlbjsKKyAgICBpbnQgcmV0dmFsOworICAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAic3kqeSpsfE86cGJrZGYyX2htYWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm5hbWUsICZwYXNzd29yZCwgJnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZXJhdGlvbnMsICZka2xlbl9vYmopKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGRpZ2VzdCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKG5hbWUpOworICAgIGlmIChkaWdlc3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVuc3VwcG9ydGVkIGhhc2ggdHlwZSIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAocGFzc3dvcmQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzd29yZCBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHNhbHQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzYWx0IGlzIHRvbyBsb25nLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoaXRlcmF0aW9ucyA8IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoaXRlcmF0aW9ucyA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIGlzIHRvbyBncmVhdC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKGRrbGVuX29iaiA9PSBQeV9Ob25lKSB7CisgICAgICAgIGRrbGVuID0gRVZQX01EX3NpemUoZGlnZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBka2xlbiA9IFB5TG9uZ19Bc0xvbmcoZGtsZW5fb2JqKTsKKyAgICAgICAgaWYgKChka2xlbiA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGRrbGVuIDwgMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXkgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoZGtsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIC8qIElOVF9NQVggaXMgYWx3YXlzIHNtYWxsZXIgdGhhbiBka0xlbiBtYXggKDJeMzIgLSAxKSAqIGhMZW4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAia2V5IGxlbmd0aCBpcyB0b28gZ3JlYXQuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGtleV9vYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGRrbGVuKTsKKyAgICBpZiAoa2V5X29iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBrZXkgPSBQeUJ5dGVzX0FTX1NUUklORyhrZXlfb2JqKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXR2YWwgPSBQS0NTNV9QQktERjJfSE1BQ19mYXN0KChjaGFyKilwYXNzd29yZC5idWYsIChpbnQpcGFzc3dvcmQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilzYWx0LmJ1ZiwgKGludClzYWx0LmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMsIGRpZ2VzdCwgZGtsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWtleSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgIFB5X0NMRUFSKGtleV9vYmopOworICAgICAgICBfc2V0RXhjZXB0aW9uKFB5RXhjX1ZhbHVlRXJyb3IpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgZW5kOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc3N3b3JkKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzYWx0KTsKKyAgICByZXR1cm4ga2V5X29iajsKK30KKworI2VuZGlmCisKIC8qIFN0YXRlIGZvciBvdXIgY2FsbGJhY2sgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gYWNjdW11bGF0ZSBhIHJlc3VsdC4gKi8KIHR5cGVkZWYgc3RydWN0IF9pbnRlcm5hbF9uYW1lX21hcHBlcl9zdGF0ZSB7CiAgICAgUHlPYmplY3QgKnNldDsKQEAgLTUxNyw5ICs3MTQsOSBAQAogICAgICAgICBzdGF0ZS0+ZXJyb3IgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChQeVNldF9BZGQoc3RhdGUtPnNldCwgcHlfbmFtZSkgIT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHB5X25hbWUpOwogICAgICAgICAgICAgc3RhdGUtPmVycm9yID0gMTsKICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocHlfbmFtZSk7CiAgICAgfQogfQogCkBAIC02MTAsNiArODA3LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgRVZQX2Z1bmN0aW9uc1tdID0gewogICAgIHsibmV3IiwgKFB5Q0Z1bmN0aW9uKUVWUF9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBFVlBfbmV3X19kb2NfX30sCisjaWZkZWYgUFlfUEJLREYyX0hNQUMKKyAgICB7InBia2RmMl9obWFjIiwgKFB5Q0Z1bmN0aW9uKXBia2RmMl9obWFjLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgcGJrZGYyX2htYWNfX2RvY19ffSwKKyNlbmRpZgogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKG1kNSksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMSksCiAjaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgpAQCAtNjQzLDYgKzg0NCw3IEBACiAgICAgUHlPYmplY3QgKm0sICpvcGVuc3NsX21kX21ldGhfbmFtZXM7CiAKICAgICBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cygpOworICAgIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7CiAKICAgICAvKiBUT0RPIGJ1aWxkIEVWUF9mdW5jdGlvbnMgb3BlbnNzbF8qIGVudHJpZXMgZHluYW1pY2FsbHkgYmFzZWQKICAgICAgKiBvbiB3aGF0IGhhc2hlcyBhcmUgc3VwcG9ydGVkIHJhdGhlciB0aGFuIGxpc3RpbmcgbWFueQpAQCAtNjY3LDEwICs4NjksOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSNpZiBIQVNIX09CSl9DT05TVFJVQ1RPUgotICAgIFB5X0lOQ1JFRigmRVZQdHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZFVlB0eXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkhBU0giLCAoUHlPYmplY3QgKikmRVZQdHlwZSk7Ci0jZW5kaWYKIAogICAgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBieSB0aGUgY29udmVuaWVuY2UgY29uc3RydWN0b3JzICovCiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMobWQ1KTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCmluZGV4IGYzNzdlOWMuLjk2YWZjZGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwpAQCAtMTY4LDcgKzE2OCwxMCBAQAogCiAgICAgbGFzdGVsdCA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBuLTEpIDsKICAgICBQeV9JTkNSRUYobGFzdGVsdCk7Ci0gICAgUHlMaXN0X1NldFNsaWNlKGhlYXAsIG4tMSwgbiwgTlVMTCk7CisgICAgaWYgKFB5TGlzdF9TZXRTbGljZShoZWFwLCBuLTEsIG4sIE5VTEwpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobGFzdGVsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBuLS07CiAKICAgICBpZiAoIW4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCmluZGV4IDRhN2U3NTguLjk4NjZmYmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCkBAIC0xMjYsOCArMTI2LDcgQEAKICInYicgICAgICAgYmluYXJ5IG1vZGVcbiIKICIndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KVxuIgogIicrJyAgICAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZylcbiIKLSInVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyB1bm5lZWRlZFxuIgotIiAgICAgICAgICBmb3IgbmV3IGNvZGUpXG4iCisiJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGRlcHJlY2F0ZWQpXG4iCiAiPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgogIlxuIgogIlRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb21cbiIKQEAgLTE0Myw2ICsxNDIsMTAgQEAKICJyZXR1cm5lZCBhcyBzdHJpbmdzLCB0aGUgYnl0ZXMgaGF2aW5nIGJlZW4gZmlyc3QgZGVjb2RlZCB1c2luZyBhXG4iCiAicGxhdGZvcm0tZGVwZW5kZW50IGVuY29kaW5nIG9yIHVzaW5nIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgaWYgZ2l2ZW4uXG4iCiAiXG4iCisiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zXG4iCisib2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2xcbiIKKyJ1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS5cbiIKKyJcbiIKICJidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS5cbiIKICJQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0XG4iCiAibGluZSBidWZmZXJpbmcgKG9ubHkgdXNhYmxlIGluIHRleHQgbW9kZSksIGFuZCBhbiBpbnRlZ2VyID4gMSB0byBpbmRpY2F0ZVxuIgpAQCAtMzEwLDYgKzMxMyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBVIGFuZCB3cml0aW5nIG1vZGUgYXQgb25jZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmVhZGluZyA9IDE7CiAgICAgfQogCkBAIC01MzMsNiArNTM5LDMxIEBACiB9CiAKIAorUHlPYmplY3QgKgorX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoX1B5SU9fU3RhdGUgKnN0YXRlKQoreworICAgIFB5T2JqZWN0ICptb2Q7CisgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlICE9IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihzdGF0ZS0+bG9jYWxlX21vZHVsZSkpOworICAgICAgICBtb2QgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChzdGF0ZS0+bG9jYWxlX21vZHVsZSk7CisgICAgICAgIGlmIChtb2QgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CisgICAgICAgICAgICByZXR1cm4gbW9kOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHN0YXRlLT5sb2NhbGVfbW9kdWxlKTsKKyAgICB9CisgICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfYm9vdGxvY2FsZSIpOworICAgIGlmIChtb2QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RhdGUtPmxvY2FsZV9tb2R1bGUgPSBQeVdlYWtyZWZfTmV3UmVmKG1vZCwgTlVMTCk7CisgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG1vZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbW9kOworfQorCisKIHN0YXRpYyBpbnQKIGlvbW9kdWxlX3RyYXZlcnNlKFB5T2JqZWN0ICptb2QsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKSB7CiAgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fTU9EX1NUQVRFKG1vZCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaCBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCmluZGV4IDBmZTkwYTMuLmI5MGE2NTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCkBAIC03Nyw3ICs3Nyw3IEBACiAgICBsb25nIHdpdGggIiVsbGQiIGV2ZW4gd2hlbiBib3RoIGxvbmcgYW5kIGxvbmcgbG9uZyBoYXZlIHRoZSBzYW1lCiAgICBwcmVjaXNpb24uICovCiAKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogCiAvKiBXaW5kb3dzIHVzZXMgbG9uZyBsb25nIGZvciBvZmZzZXRzICovCiB0eXBlZGVmIFBZX0xPTkdfTE9ORyBQeV9vZmZfdDsKQEAgLTEzNyw2ICsxMzcsOCBAQAogI2RlZmluZSBJT19NT0RfU1RBVEUobW9kKSAoKF9QeUlPX1N0YXRlICopUHlNb2R1bGVfR2V0U3RhdGUobW9kKSkKICNkZWZpbmUgSU9fU1RBVEUgSU9fTU9EX1NUQVRFKFB5U3RhdGVfRmluZE1vZHVsZSgmX1B5SU9fTW9kdWxlKSkKIAorZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19nZXRfbG9jYWxlX21vZHVsZShfUHlJT19TdGF0ZSAqKTsKKwogZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfY2xvc2U7CiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZWQ7CiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9kZWNvZGU7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKaW5kZXggM2FmZTdiMS4uYTA0YjQ4ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCisrKyBiL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYwpAQCAtNTIsNyArNTIsNiBAQAogICAgIFB5X2J1ZmZlciBidWY7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKmRhdGE7Ci0gICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIncqOnJlYWRpbnRvIiwgJmJ1ZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTAsNyArMTg5LDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZGlvYmFzZV9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0yMDksNiArMjA5LDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTIyMCw3ICsyMzAsNyBAQAogICAgIGludCBkZXRhY2hlZDsKICAgICBpbnQgcmVhZGFibGU7CiAgICAgaW50IHdyaXRhYmxlOwotICAgIGludCBkZWFsbG9jYXRpbmc7CisgICAgY2hhciBmaW5hbGl6aW5nOwogCiAgICAgLyogVHJ1ZSBpZiB0aGlzIGlzIGEgdmFuaWxsYSBCdWZmZXJlZCBvYmplY3QgKHJhdGhlciB0aGFuIGEgdXNlciBkZXJpdmVkCiAgICAgICAgY2xhc3MpICphbmQqIHRoZSByYXcgc3RyZWFtIGlzIGEgdmFuaWxsYSBGaWxlSU8gb2JqZWN0LiAqLwpAQCAtMzg0LDggKzM5NCw4IEBACiBzdGF0aWMgdm9pZAogYnVmZmVyZWRfZGVhbGxvYyhidWZmZXJlZCAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKKyAgICBzZWxmLT5maW5hbGl6aW5nID0gMTsKKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBzZWxmLT5vayA9IDA7CkBAIC00MjgsOCArNDM4LDYgQEAKIHN0YXRpYyBpbnQKIGJ1ZmZlcmVkX2NsZWFyKGJ1ZmZlcmVkICpzZWxmKQogewotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm9rID0gMDsKICAgICBQeV9DTEVBUihzZWxmLT5yYXcpOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwpAQCAtNTA4LDcgKzUxNiw3IEBACiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICBQeU9iamVjdCAqciA9IGJ1ZmZlcmVkX2RlYWxsb2Nfd2FybihzZWxmLCAoUHlPYmplY3QgKikgc2VsZik7CiAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwpAQCAtNTI3LDYgKzUzNSwxMSBAQAogCiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfY2xvc2UsIE5VTEwpOwogCisgICAgaWYgKHNlbGYtPmJ1ZmZlcikgeworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CisgICAgfQorCiAgICAgaWYgKGV4YyAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKQEAgLTY1OCw2ICs2NzEsMTEgQEAKIF9zZXRfQmxvY2tpbmdJT0Vycm9yKGNoYXIgKm1zZywgUHlfc3NpemVfdCB3cml0dGVuKQogewogICAgIFB5T2JqZWN0ICplcnI7CisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbiBlcnJvcgorICAgICAgIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCiAgICAgZXJyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX0Jsb2NraW5nSU9FcnJvciwgImlzbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLCBtc2csIHdyaXR0ZW4pOwogICAgIGlmIChlcnIpCkBAIC0xNzM5LDYgKzE3NTcsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyZWFkZXJfbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTE3NzEsNyArMTc5MCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRyZWFkZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0xNzkwLDYgKzE4MDksMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyZWFkZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTIxMjAsNiArMjE0OSw3IEBACiAKIHN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHdyaXRlcl9tZW1iZXJzW10gPSB7CiAgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMjE1Miw3ICsyMTgyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZHdyaXRlcl9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KQEAgLTIxNzEsNiArMjIwMSwxNiBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHdyaXRlcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAwKIApAQCAtMjQwNiw3ICsyNDQ2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qIHRwX2ZsYWdzICovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qIHRwX2ZsYWdzICovCiAgICAgYnVmZmVyZWRyd3BhaXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRyd3BhaXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRyd3BhaXJfY2xlYXIsIC8qIHRwX2NsZWFyICovCkBAIC0yNDI1LDYgKzI0NjUsMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyd3BhaXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTI1MTIsNiArMjU2Miw3IEBACiAKIHN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHJhbmRvbV9tZW1iZXJzW10gPSB7CiAgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMjU0NCw3ICsyNTk1LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZHJhbmRvbV9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KQEAgLTI1NjMsNCArMjYxNCwxNCBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHJhbmRvbV9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2ZpbGVpby5jIGIvTW9kdWxlcy9faW8vZmlsZWlvLmMKaW5kZXggZjNjZTc3Ni4uMGUxZTcwOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vZmlsZWlvLmMKKysrIGIvTW9kdWxlcy9faW8vZmlsZWlvLmMKQEAgLTUyLDEzICs1MiwxNSBAQAogICAgIHVuc2lnbmVkIGludCBhcHBlbmRpbmcgOiAxOwogICAgIHNpZ25lZCBpbnQgc2Vla2FibGUgOiAyOyAvKiAtMSBtZWFucyB1bmtub3duICovCiAgICAgdW5zaWduZWQgaW50IGNsb3NlZmQgOiAxOwotICAgIHVuc2lnbmVkIGludCBkZWFsbG9jYXRpbmc6IDE7CisgICAgY2hhciBmaW5hbGl6aW5nOwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKICAgICBQeU9iamVjdCAqZGljdDsKIH0gZmlsZWlvOwogCiBQeVR5cGVPYmplY3QgUHlGaWxlSU9fVHlwZTsKIAorX1B5X0lERU5USUZJRVIobmFtZSk7CisKICNkZWZpbmUgUHlGaWxlSU9fQ2hlY2sob3ApIChQeU9iamVjdF9UeXBlQ2hlY2soKG9wKSwgJlB5RmlsZUlPX1R5cGUpKQogCiBpbnQKQEAgLTEyOSw3ICsxMzEsNyBAQAogICAgICAgICBzZWxmLT5mZCA9IC0xOwogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9Ci0gICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyID0gZmlsZWlvX2RlYWxsb2Nfd2FybihzZWxmLCAoUHlPYmplY3QgKikgc2VsZik7CiAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwpAQCAtMjA0LDYgKzIwNiw5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBPX0NMT0VYRUMKK2V4dGVybiBpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbmRpZgogCiBzdGF0aWMgaW50CiBmaWxlaW9faW5pdChQeU9iamVjdCAqb3NlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKQEAgLTIyMyw2ICsyMjgsMTEgQEAKICAgICBpbnQgZmQgPSAtMTsKICAgICBpbnQgY2xvc2VmZCA9IDE7CiAgICAgaW50IGZkX2lzX293biA9IDA7CisjaWZkZWYgT19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VsaWYgIWRlZmluZWQoTVNfV0lORE9XUykKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgogCiAgICAgYXNzZXJ0KFB5RmlsZUlPX0NoZWNrKG9zZWxmKSk7CiAgICAgaWYgKHNlbGYtPmZkID49IDApIHsKQEAgLTM0Myw2ICszNTMsMTIgQEAKICAgICBmbGFncyB8PSBPX0JJTkFSWTsKICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VsaWYgZGVmaW5lZChPX0NMT0VYRUMpCisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2VuZGlmCisKICAgICBpZiAoZmQgPj0gMCkgewogICAgICAgICBpZiAoY2hlY2tfZmQoZmQpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTM2NiwxMCArMzgyLDE4IEBACiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAgICBzZWxmLT5mZCA9IG9wZW4obmFtZSwgZmxhZ3MsIDA2NjYpOworCiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3QgKmZkb2JqID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lciwgIk9pIiwgbmFtZW9iaiwgZmxhZ3MpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKmZkb2JqOworCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgICAgIC8qIHRoZSBvcGVuZXIgbWF5IGNsZWFyIHRoZSBhdG9taWMgZmxhZyAqLworICAgICAgICAgICAgYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisKKyAgICAgICAgICAgIGZkb2JqID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKG9wZW5lciwgIk9pIiwgbmFtZW9iaiwgZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGZkb2JqID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKGZkb2JqKSkgewpAQCAtMzg4LDE0ICs0MTIsMTQgQEAKIAogICAgICAgICBmZF9pc19vd24gPSAxOwogICAgICAgICBpZiAoc2VsZi0+ZmQgPCAwKSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAgICAgaWYgKHdpZGVuYW1lICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX0lPRXJyb3IsIG5hbWVvYmopOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIG5hbWUpOworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIG5hbWVvYmopOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+ZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworI2VuZGlmCiAgICAgfQogICAgIGlmIChkaXJjaGVjayhzZWxmLCBuYW1lb2JqKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC00MDUsNyArNDI5LDcgQEAKICAgICBfc2V0bW9kZShzZWxmLT5mZCwgT19CSU5BUlkpOwogI2VuZGlmCiAKLSAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLCAibmFtZSIsIG5hbWVvYmopIDwgMCkKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9uYW1lLCBuYW1lb2JqKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoc2VsZi0+YXBwZW5kaW5nKSB7CkBAIC00NDksNyArNDczLDcgQEAKIHN0YXRpYyB2b2lkCiBmaWxlaW9fZGVhbGxvYyhmaWxlaW8gKnNlbGYpCiB7Ci0gICAgc2VsZi0+ZGVhbGxvY2F0aW5nID0gMTsKKyAgICBzZWxmLT5maW5hbGl6aW5nID0gMTsKICAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKQEAgLTUzNSw3ICs1NTksNyBAQAogICAgICAgICBsZW4gPSBwYnVmLmxlbjsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCiAgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOwogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKQEAgLTU1OCwzMyArNTgyLDI3IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKIH0KIAorI2lmbmRlZiBIQVZFX0ZTVEFUCisKK3N0YXRpYyBQeU9iamVjdCAqCitmaWxlaW9fcmVhZGFsbChmaWxlaW8gKnNlbGYpCit7CisgICAgX1B5X0lERU5USUZJRVIocmVhZGFsbCk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KikmUHlSYXdJT0Jhc2VfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9yZWFkYWxsLCAiTyIsIHNlbGYpOworfQorCisjZWxzZQorCiBzdGF0aWMgc2l6ZV90Ci1uZXdfYnVmZmVyc2l6ZShmaWxlaW8gKnNlbGYsIHNpemVfdCBjdXJyZW50c2l6ZQotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICAgICAgICAgICAgICwgUHlfb2ZmX3QgcG9zLCBQeV9vZmZfdCBlbmQKLSNlbmRpZgotICAgICAgICAgICAgICAgKQorbmV3X2J1ZmZlcnNpemUoZmlsZWlvICpzZWxmLCBzaXplX3QgY3VycmVudHNpemUpCiB7CiAgICAgc2l6ZV90IGFkZGVuZDsKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgaWYgKGVuZCAhPSAoUHlfb2ZmX3QpLTEpIHsKLSAgICAgICAgLyogRmlsZXMgY2xhaW1pbmcgYSBzaXplIHNtYWxsZXIgdGhhbiBTTUFMTENIVU5LIG1heQotICAgICAgICAgICBhY3R1YWxseSBiZSBzdHJlYW1pbmcgcHNldWRvLWZpbGVzLiBJbiB0aGlzIGNhc2UsIHdlCi0gICAgICAgICAgIGFwcGx5IHRoZSBtb3JlIGFnZ3Jlc3NpdmUgYWxnb3JpdGhtIGJlbG93LgotICAgICAgICAqLwotICAgICAgICBpZiAoZW5kID49IFNNQUxMQ0hVTksgJiYgZW5kID49IHBvcyAmJiBwb3MgPj0gMCkgewotICAgICAgICAgICAgLyogQWRkIDEgc28gaWYgdGhlIGZpbGUgd2VyZSB0byBncm93IHdlJ2Qgbm90aWNlLiAqLwotICAgICAgICAgICAgUHlfb2ZmX3QgYnVmc2l6ZSA9IGN1cnJlbnRzaXplICsgZW5kIC0gcG9zICsgMTsKLSAgICAgICAgICAgIGlmIChidWZzaXplIDwgUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChzaXplX3QpYnVmc2l6ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gUFlfU1NJWkVfVF9NQVg7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKwogICAgIC8qIEV4cGFuZCB0aGUgYnVmZmVyIGJ5IGFuIGFtb3VudCBwcm9wb3J0aW9uYWwgdG8gdGhlIGN1cnJlbnQgc2l6ZSwKICAgICAgICBnaXZpbmcgdXMgYW1vcnRpemVkIGxpbmVhci10aW1lIGJlaGF2aW9yLiAgRm9yIGJpZ2dlciBzaXplcywgdXNlIGEKICAgICAgICBsZXNzLXRoYW4tZG91YmxlIGdyb3d0aCBmYWN0b3IgdG8gYXZvaWQgZXhjZXNzaXZlIGFsbG9jYXRpb24uICovCisgICAgYXNzZXJ0KGN1cnJlbnRzaXplIDw9IFBZX1NTSVpFX1RfTUFYKTsKICAgICBpZiAoY3VycmVudHNpemUgPiA2NTUzNikKICAgICAgICAgYWRkZW5kID0gY3VycmVudHNpemUgPj4gMzsKICAgICBlbHNlCkBAIC01OTgsMjYgKzYxNiwxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKIHsKLSNpZmRlZiBIQVZFX0ZTVEFUCiAgICAgc3RydWN0IHN0YXQgc3Q7CiAgICAgUHlfb2ZmX3QgcG9zLCBlbmQ7Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIFB5X3NzaXplX3QgdG90YWwgPSAwOworICAgIFB5X3NzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CiAgICAgUHlfc3NpemVfdCBuOwotICAgIHNpemVfdCBuZXdzaXplOworICAgIHNpemVfdCBidWZzaXplOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKICAgICBpZiAoIV9QeVZlcmlmeV9mZChzZWxmLT5mZCkpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAKLSAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFNNQUxMQ0hVTkspOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBIQVZFX0ZTVEFUCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBwb3MgPSBfbHNlZWtpNjQoc2VsZi0+ZmQsIDBMLCBTRUVLX0NVUik7CiAjZWxzZQogICAgIHBvcyA9IGxzZWVrKHNlbGYtPmZkLCAwTCwgU0VFS19DVVIpOwpAQCAtNjI2LDQ0ICs2MzcsNDYgQEAKICAgICAgICAgZW5kID0gc3Quc3Rfc2l6ZTsKICAgICBlbHNlCiAgICAgICAgIGVuZCA9IChQeV9vZmZfdCktMTsKLSNlbmRpZgotICAgIHdoaWxlICgxKSB7Ci0jaWZkZWYgSEFWRV9GU1RBVAotICAgICAgICBuZXdzaXplID0gbmV3X2J1ZmZlcnNpemUoc2VsZiwgdG90YWwsIHBvcywgZW5kKTsKLSNlbHNlCi0gICAgICAgIG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG5ld3NpemUgPiBQWV9TU0laRV9UX01BWCB8fCBuZXdzaXplIDw9IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKLSAgICAgICAgICAgICAgICAidGhhbiBhIFB5dGhvbiBzdHJpbmcgY2FuIGhvbGQgIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA8IChQeV9zc2l6ZV90KW5ld3NpemUpIHsKLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgbmV3c2l6ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvdGFsID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKGVuZCA+IDAgJiYgZW5kID49IHBvcyAmJiBwb3MgPj0gMCAmJiBlbmQgLSBwb3MgPCBQWV9TU0laRV9UX01BWCkgeworICAgICAgICAvKiBUaGlzIGlzIHByb2JhYmx5IGEgcmVhbCBmaWxlLCBzbyB3ZSB0cnkgdG8gYWxsb2NhdGUgYQorICAgICAgICAgICBidWZmZXIgb25lIGJ5dGUgbGFyZ2VyIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUuICBJZiB0aGUKKyAgICAgICAgICAgY2FsY3VsYXRpb24gaXMgcmlnaHQgdGhlbiB3ZSBzaG91bGQgZ2V0IEVPRiB3aXRob3V0IGhhdmluZworICAgICAgICAgICB0byBlbmxhcmdlIHRoZSBidWZmZXIuICovCisgICAgICAgIGJ1ZnNpemUgPSAoc2l6ZV90KShlbmQgLSBwb3MgKyAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZzaXplID0gU01BTExDSFVOSzsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1ZnNpemUpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoYnl0ZXNfcmVhZCA+PSAoUHlfc3NpemVfdClidWZzaXplKSB7CisgICAgICAgICAgICBidWZzaXplID0gbmV3X2J1ZmZlcnNpemUoc2VsZiwgYnl0ZXNfcmVhZCk7CisgICAgICAgICAgICBpZiAoYnVmc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IGJ1ZnNpemUgPD0gMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ib3VuZGVkIHJlYWQgcmV0dXJuZWQgbW9yZSBieXRlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFuIGEgUHl0aG9uIHN0cmluZyBjYW4gaG9sZCIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIDwgKFB5X3NzaXplX3QpYnVmc2l6ZSkgeworICAgICAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgYnVmc2l6ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbiA9IG5ld3NpemUgLSB0b3RhbDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgIG4gPSBidWZzaXplIC0gYnl0ZXNfcmVhZDsKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIGlmIChuID4gSU5UX01BWCkKICAgICAgICAgICAgIG4gPSBJTlRfTUFYOwotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwKLSAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIHRvdGFsLAotICAgICAgICAgICAgICAgICAoaW50KW4pOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGJ5dGVzX3JlYWQsIChpbnQpbik7CiAjZWxzZQotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwKLSAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIHRvdGFsLAotICAgICAgICAgICAgICAgICBuKTsKKyAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBieXRlc19yZWFkLCBuKTsKICNlbmRpZgogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBpZiAobiA9PSAwKQpAQCAtNjc2LDcgKzY4OSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRvdGFsID4gMCkKKyAgICAgICAgICAgIGlmIChieXRlc19yZWFkID4gMCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKQEAgLTY4NiwyMiArNjk5LDE5IEBACiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICB0b3RhbCArPSBuOwotI2lmZGVmIEhBVkVfRlNUQVQKKyAgICAgICAgYnl0ZXNfcmVhZCArPSBuOwogICAgICAgICBwb3MgKz0gbjsKLSNlbmRpZgogICAgIH0KIAotICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPiB0b3RhbCkgewotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIHRvdGFsKSA8IDApIHsKLSAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGp1c3QgaW4gY2FzZSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA+IGJ5dGVzX3JlYWQpIHsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBieXRlc19yZWFkKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjZW5kaWYgLyogSEFWRV9GU1RBVCAqLworCiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlYWQoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTcyMiw3ICs3MzIsNyBAQAogICAgICAgICByZXR1cm4gZmlsZWlvX3JlYWRhbGwoc2VsZik7CiAgICAgfQogCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoc2l6ZSA+IElOVF9NQVgpCiAgICAgICAgIHNpemUgPSBJTlRfTUFYOwogI2VuZGlmCkBAIC03MzQsNyArNzQ0LDcgQEAKICAgICBpZiAoX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCAoaW50KXNpemUpOwogI2Vsc2UKICAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHB0ciwgc2l6ZSk7CkBAIC03NTUsNyArNzY1LDcgQEAKIAogICAgIGlmIChuICE9IHNpemUpIHsKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmYnl0ZXMsIG4pIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKGJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgyLDcgKzc5Miw3IEBACiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICBsZW4gPSBwYnVmLmxlbjsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAobGVuID4gMzI3NjcgJiYgaXNhdHR5KHNlbGYtPmZkKSkgewogICAgICAgICAgICAgLyogSXNzdWUgIzExMzk1OiB0aGUgV2luZG93cyBjb25zb2xlIHJldHVybnMgYW4gZXJyb3IgKDEyOiBub3QKICAgICAgICAgICAgICAgIGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZiBzdGRvdXQgbW9kZSBpcwpAQCAtODU1LDcgKzg2NSw3IEBACiAKICAgICBpZiAoX1B5VmVyaWZ5X2ZkKGZkKSkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIHdoZW5jZSk7CiAjZWxzZQogICAgICAgICByZXMgPSBsc2VlayhmZCwgcG9zLCB3aGVuY2UpOwpAQCAtMTAyOCw3ICsxMDM4LDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmaWxlaW9fcmVwcihmaWxlaW8gKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIobmFtZSk7CiAgICAgUHlPYmplY3QgKm5hbWVvYmosICpyZXM7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQpAQCAtMTIwNCw2ICsxMjEzLDExIEBACiAgICAge05VTEx9LAogfTsKIAorc3RhdGljIFB5TWVtYmVyRGVmIGZpbGVpb19tZW1iZXJzW10gPSB7CisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoZmlsZWlvLCBmaW5hbGl6aW5nKSwgMH0sCisgICAge05VTEx9Cit9OworCiBQeVR5cGVPYmplY3QgUHlGaWxlSU9fVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2lvLkZpbGVJTyIsCkBAIC0xMjI1LDcgKzEyMzksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIGZpbGVpb19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylmaWxlaW9fdHJhdmVyc2UsICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWZpbGVpb19jbGVhciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTEyMzQsNyArMTI0OCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIGZpbGVpb19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGZpbGVpb19tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIGZpbGVpb19nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCkBAIC0xMjQ1LDQgKzEyNTksMTMgQEAKICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgZmlsZWlvX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vaW9iYXNlLmMgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwppbmRleCBlMzg0NzNhLi4xYjdjYjBmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9pb2Jhc2UuYworKysgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEkvTyBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgaGllcmFyY2h5CiAgICAgYXMgZGVmaW5lZCBieSBQRVAgMzExNiAtICJOZXcgSS9PIgotICAgIAorCiAgICAgQ2xhc3NlcyBkZWZpbmVkIGhlcmU6IElPQmFzZSwgUmF3SU9CYXNlLgotICAgIAorCiAgICAgV3JpdHRlbiBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYyBhbmQgQW50b2luZSBQaXRyb3UKICovCiAKQEAgLTE5LDcgKzE5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICAKKwogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gaW9iYXNlOwpAQCAtNjMsNiArNjMsOCBAQAogI2RlZmluZSBJU19DTE9TRUQoc2VsZikgXAogICAgIF9QeU9iamVjdF9IYXNBdHRySWQoc2VsZiwgJlB5SWRfX19JT0Jhc2VfY2xvc2VkKQogCitfUHlfSURFTlRJRklFUihyZWFkKTsKKwogLyogSW50ZXJuYWwgbWV0aG9kcyAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGlvYmFzZV91bnN1cHBvcnRlZChjb25zdCBjaGFyICptZXNzYWdlKQpAQCAtMTgwLDQyICsxODIsNDQgQEAKIGlvYmFzZV9jbG9zZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihfX0lPQmFzZV9jbG9zZWQpOwogCiAgICAgaWYgKElTX0NMT1NFRChzZWxmKSkKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOwotICAgIF9QeU9iamVjdF9TZXRBdHRySWQoc2VsZiwgJlB5SWRfX19JT0Jhc2VfY2xvc2VkLCBQeV9UcnVlKTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKKworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHNlbGYsICZQeUlkX19fSU9CYXNlX2Nsb3NlZCwgUHlfVHJ1ZSkgPCAwKSB7CisgICAgICAgIFB5X1hERUNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X1hERUNSRUYocmVzKTsKKworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9ERUNSRUYocmVzKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogLyogRmluYWxpemF0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gc3VwcG9ydCAqLwogCi1pbnQKLV9QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3N0YXRpYyB2b2lkCitpb2Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBQeU9iamVjdCAqdHAsICp2LCAqdGI7Ci0gICAgaW50IGNsb3NlZCA9IDE7Ci0gICAgaW50IGlzX3pvbWJpZTsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworICAgIGludCBjbG9zZWQ7CisgICAgX1B5X0lERU5USUZJRVIoX2ZpbmFsaXppbmcpOwogCi0gICAgLyogSWYgX1B5SU9CYXNlX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGZyb20gYSBkZXN0cnVjdG9yLCB3ZSBuZWVkIHRvCi0gICAgICAgcmVzdXJyZWN0IHRoZSBvYmplY3QgYXMgY2FsbGluZyBjbG9zZSgpIGNhbiBpbnZva2UgYXJiaXRyYXJ5IGNvZGUuICovCi0gICAgaXNfem9tYmllID0gKFB5X1JFRkNOVChzZWxmKSA9PSAwKTsKLSAgICBpZiAoaXNfem9tYmllKSB7Ci0gICAgICAgICsrUHlfUkVGQ05UKHNlbGYpOwotICAgIH0KLSAgICBQeUVycl9GZXRjaCgmdHAsICZ2LCAmdGIpOworICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKICAgICAvKiBJZiBgY2xvc2VkYCBkb2Vzbid0IGV4aXN0IG9yIGNhbid0IGJlIGV2YWx1YXRlZCBhcyBib29sLCB0aGVuIHRoZQogICAgICAgIG9iamVjdCBpcyBwcm9iYWJseSBpbiBhbiB1bnVzYWJsZSBzdGF0ZSwgc28gaWdub3JlLiAqLwogICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHIoc2VsZiwgX1B5SU9fc3RyX2Nsb3NlZCk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQorICAgIGlmIChyZXMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBjbG9zZWQgPSAtMTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGNsb3NlZCA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwogICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTIyMyw2ICsyMjcsMTAgQEAKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQogICAgIGlmIChjbG9zZWQgPT0gMCkgeworICAgICAgICAvKiBTaWduYWwgY2xvc2UoKSB0aGF0IGl0IHdhcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgIGZpbmFsaXphdGlvbiBwcm9jZXNzLiAqLworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fZmluYWxpemluZywgUHlfVHJ1ZSkpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKikgc2VsZiwgX1B5SU9fc3RyX2Nsb3NlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgIC8qIFNpbGVuY2luZyBJL08gZXJyb3JzIGlzIGJhZCwgYnV0IHByaW50aW5nIHNwdXJpb3VzIHRyYWNlYmFja3MgaXMKQEAgLTIzMywzMSArMjQxLDI1IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKHRwLCB2LCB0Yik7Ci0gICAgaWYgKGlzX3pvbWJpZSkgewotICAgICAgICBpZiAoLS1QeV9SRUZDTlQoc2VsZikgIT0gMCkgewotICAgICAgICAgICAgLyogVGhlIG9iamVjdCBsaXZlcyBhZ2Fpbi4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRha2VuIGZyb20KLSAgICAgICAgICAgICAgIHNsb3RfdHBfZGVsIGluIHR5cGVvYmplY3QuYy4gKi8KLSAgICAgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gUHlfUkVGQ05UKHNlbGYpOwotICAgICAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgICAgIFB5X1JFRkNOVChzZWxmKSA9IHJlZmNudDsKLSAgICAgICAgICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAgICAgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCi0gICAgICAgICAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgICAgICAgICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgotICAgICAgICAgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICAgICAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgICAgICAgICAqIHVuZG9uZS4KLSAgICAgICAgICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgICAgICAgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKLSAgICAgICAgICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKworICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworfQorCitpbnQKK19QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgaXNfem9tYmllOworCisgICAgLyogSWYgX1B5SU9CYXNlX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGZyb20gYSBkZXN0cnVjdG9yLCB3ZSBuZWVkIHRvCisgICAgICAgcmVzdXJyZWN0IHRoZSBvYmplY3QgYXMgY2FsbGluZyBjbG9zZSgpIGNhbiBpbnZva2UgYXJiaXRyYXJ5IGNvZGUuICovCisgICAgaXNfem9tYmllID0gKFB5X1JFRkNOVChzZWxmKSA9PSAwKTsKKyAgICBpZiAoaXNfem9tYmllKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpOworICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdF9DYWxsRmluYWxpemVyKHNlbGYpOworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI3MCw4ICsyNzIsNiBAQAogc3RhdGljIGludAogaW9iYXNlX2NsZWFyKGlvYmFzZSAqc2VsZikKIHsKLSAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKICAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTQ1NSw3ICs0NTUsNiBAQAogICAgIGludCBoYXNfcGVlayA9IDA7CiAgICAgUHlPYmplY3QgKmJ1ZmZlciwgKnJlc3VsdDsKICAgICBQeV9zc2l6ZV90IG9sZF9zaXplID0gLTE7Ci0gICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAgICAgX1B5X0lERU5USUZJRVIocGVlayk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkbGluZSIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJmxpbWl0KSkgewpAQCAtNTM2LDcgKzUzNSwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgb2xkX3NpemUgPSBQeUJ5dGVBcnJheV9HRVRfU0laRShidWZmZXIpOwotICAgICAgICBQeUJ5dGVBcnJheV9SZXNpemUoYnVmZmVyLCBvbGRfc2l6ZSArIFB5Qnl0ZXNfR0VUX1NJWkUoYikpOworICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKGJ1ZmZlciwgb2xkX3NpemUgKyBQeUJ5dGVzX0dFVF9TSVpFKGIpKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQogICAgICAgICBtZW1jcHkoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGJ1ZmZlcikgKyBvbGRfc2l6ZSwKICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGIpLCBQeUJ5dGVzX0dFVF9TSVpFKGIpKTsKIApAQCAtNzQxLDcgKzc0Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgaW9iYXNlX2RvYywgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpaW9iYXNlX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWlvYmFzZV9jbGVhciwgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtNzYwLDYgKzc2MiwxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIChkZXN0cnVjdG9yKWlvYmFzZV9maW5hbGl6ZSwgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIApAQCAtODMxLDEyICs4NDMsMTEgQEAKICAgICBpbnQgcjsKICAgICBQeU9iamVjdCAqY2h1bmtzID0gUHlMaXN0X05ldygwKTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIAorCiAgICAgaWYgKGNodW5rcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOwogICAgICAgICBQeU9iamVjdCAqZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpIiwgREVGQVVMVF9CVUZGRVJfU0laRSk7CiAgICAgICAgIGlmICghZGF0YSkgewpAQCAtOTA1LDcgKzkxNiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgcmF3aW9iYXNlX2RvYywgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtOTI0LDQgKzkzNSwxNCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL3RleHRpby5jIGIvTW9kdWxlcy9faW8vdGV4dGlvLmMKaW5kZXggNjAzZWU2MC4uZmI4OWExNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vdGV4dGlvLmMKKysrIGIvTW9kdWxlcy9faW8vdGV4dGlvLmMKQEAgLTE3Myw3ICsxNzMsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgIC8qdHBfZmxhZ3MqLwogICAgIHRleHRpb2Jhc2VfZG9jLCAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTE5Miw2ICsxOTMsMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIApAQCAtNjkxLDcgKzcwMiw3IEBACiAgICAgY2hhciBzZWVrYWJsZTsKICAgICBjaGFyIGhhc19yZWFkMTsKICAgICBjaGFyIHRlbGxpbmc7Ci0gICAgY2hhciBkZWFsbG9jYXRpbmc7CisgICAgY2hhciBmaW5hbGl6aW5nOwogICAgIC8qIFNwZWNpYWxpemVkIGVuY29kaW5nIGZ1bmMgKHNlZSBiZWxvdykgKi8KICAgICBlbmNvZGVmdW5jX3QgZW5jb2RlZnVuYzsKICAgICAvKiBXaGV0aGVyIG9yIG5vdCBpdCdzIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtICovCkBAIC03NTgsNyArNzY5LDcgQEAKIHsKICAgICBpZiAoIXNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSkgewogICAgICAgICAvKiBTa2lwIHRoZSBCT00gYW5kIHVzZSBuYXRpdmUgYnl0ZSBvcmRlcmluZyAqLwotI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorI2lmIFBZX0JJR19FTkRJQU4KICAgICAgICAgcmV0dXJuIHV0ZjE2YmVfZW5jb2RlKHNlbGYsIHRleHQpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHV0ZjE2bGVfZW5jb2RlKHNlbGYsIHRleHQpOwpAQCAtNzg3LDcgKzc5OCw3IEBACiB7CiAgICAgaWYgKCFzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0pIHsKICAgICAgICAgLyogU2tpcCB0aGUgQk9NIGFuZCB1c2UgbmF0aXZlIGJ5dGUgb3JkZXJpbmcgKi8KLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKKyNpZiBQWV9CSUdfRU5ESUFOCiAgICAgICAgIHJldHVybiB1dGYzMmJlX2VuY29kZShzZWxmLCB0ZXh0KTsKICNlbHNlCiAgICAgICAgIHJldHVybiB1dGYzMmxlX2VuY29kZShzZWxmLCB0ZXh0KTsKQEAgLTkwNiwzNSArOTE3LDI5IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwgJiYgc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkgewotICAgICAgICAgICAgc3RhdGUtPmxvY2FsZV9tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImxvY2FsZSIpOwotICAgICAgICAgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBjYXRjaF9JbXBvcnRFcnJvcjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIHVzZV9sb2NhbGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdXNlX2xvY2FsZToKLSAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSwgJlB5SWRfZ2V0cHJlZmVycmVkZW5jb2RpbmcsICJPIiwgUHlfRmFsc2UpOwotICAgICAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgY2F0Y2hfSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYSBJbXBvcnRFcnJvciBiZWNhdXNlIG9mCi0gICAgICAgICAgICAgICAgIF9mdW5jdG9vbHMsIGFuZCBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgY2FuIHJhaXNlIGEKLSAgICAgICAgICAgICAgICAgSW1wb3J0RXJyb3IgaWYgX2xvY2FsZSBpcyBub3QgYXZhaWxhYmxlLiAgVGhlc2Ugd2lsbCBoYXBwZW4KLSAgICAgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0ltcG9ydEVycm9yKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBzZWxmLT5lbmNvZGluZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJhc2NpaSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5T2JqZWN0ICpsb2NhbGVfbW9kdWxlID0gX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoc3RhdGUpOworICAgICAgICBpZiAobG9jYWxlX21vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBjYXRjaF9JbXBvcnRFcnJvcjsKKyAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAorICAgICAgICAgICAgbG9jYWxlX21vZHVsZSwgJlB5SWRfZ2V0cHJlZmVycmVkZW5jb2RpbmcsICJPIiwgUHlfRmFsc2UpOworICAgICAgICBQeV9ERUNSRUYobG9jYWxlX21vZHVsZSk7CisgICAgICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgY2F0Y2hfSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgIEltcG9ydGluZyBsb2NhbGUgY2FuIHJhaXNlIGEgSW1wb3J0RXJyb3IgYmVjYXVzZSBvZgorICAgICAgICAgICAgIF9mdW5jdG9vbHMsIGFuZCBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgY2FuIHJhaXNlIGEKKyAgICAgICAgICAgICBJbXBvcnRFcnJvciBpZiBfbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUuICBUaGVzZSB3aWxsIGhhcHBlbgorICAgICAgICAgICAgIGR1cmluZyBtb2R1bGUgYnVpbGRpbmcuCisgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5lbmNvZGluZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJhc2NpaSIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIVB5VW5pY29kZV9DaGVjayhzZWxmLT5lbmNvZGluZykpCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIVB5VW5pY29kZV9DaGVjayhzZWxmLT5lbmNvZGluZykpCisgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CiAgICAgfQogICAgIGlmIChzZWxmLT5lbmNvZGluZyAhPSBOVUxMKSB7CiAgICAgICAgIGVuY29kaW5nID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzZWxmLT5lbmNvZGluZyk7CkBAIC0xMTEyLDggKzExMTcsNiBAQAogc3RhdGljIGludAogX3RleHRpb3dyYXBwZXJfY2xlYXIodGV4dGlvICpzZWxmKQogewotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm9rID0gMDsKICAgICBQeV9DTEVBUihzZWxmLT5idWZmZXIpOwogICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKQEAgLTExMzEsOSArMTEzNCwxMCBAQAogc3RhdGljIHZvaWQKIHRleHRpb3dyYXBwZXJfZGVhbGxvYyh0ZXh0aW8gKnNlbGYpCiB7Ci0gICAgc2VsZi0+ZGVhbGxvY2F0aW5nID0gMTsKLSAgICBpZiAoX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZikgPCAwKQorICAgIHNlbGYtPmZpbmFsaXppbmcgPSAxOworICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuOworICAgIF90ZXh0aW93cmFwcGVyX2NsZWFyKHNlbGYpOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKXNlbGYpOwpAQCAtMTkzNywxMCArMTk0MSw3IEBACiAKICNkZWZpbmUgQ09PS0lFX0JVRl9MRU4gICAgICAoc2l6ZW9mKFB5X29mZl90KSArIDMgKiBzaXplb2YoaW50KSArIHNpemVvZihjaGFyKSkKIAotI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQotCi0jIGRlZmluZSBJU19MSVRUTEVfRU5ESUFOICAgMAotCisjaWYgUFlfQklHX0VORElBTgogLyogV2Ugd2FudCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBzdGFydF9wb3MgdG8gYWxzbyBiZSB0aGUgbGVhc3QKICAgIHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIGNvb2tpZSwgd2hpY2ggbWVhbnMgdGhhdCBpbiBiaWctZW5kaWFuIG1vZGUgd2UKICAgIG11c3QgY29weSB0aGUgZmllbGRzIGluIHJldmVyc2Ugb3JkZXIuICovCkBAIC0xOTUyLDkgKzE5NTMsNiBAQAogIyBkZWZpbmUgT0ZGX05FRURfRU9GICAgICAgIDAKIAogI2Vsc2UKLQotIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDEKLQogLyogTGl0dGxlLWVuZGlhbiBtb2RlOiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBzdGFydF9wb3Mgd2lsbAogICAgbmF0dXJhbGx5IGVuZCB1cCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgY29va2llLiAqLwogCkBAIC0xOTc1LDcgKzE5NzMsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoX1B5TG9uZ19Bc0J5dGVBcnJheShjb29raWVMb25nLCBidWZmZXIsIHNpemVvZihidWZmZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTX0xJVFRMRV9FTkRJQU4sIDApIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0xJVFRMRV9FTkRJQU4sIDApIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYoY29va2llTG9uZyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0yMDAxLDkgKzE5OTksOSBAQAogICAgIG1lbWNweShidWZmZXIgKyBPRkZfQ0hBUlNfVE9fU0tJUCwgJmNvb2tpZS0+Y2hhcnNfdG9fc2tpcCwgc2l6ZW9mKGNvb2tpZS0+Y2hhcnNfdG9fc2tpcCkpOwogICAgIG1lbWNweShidWZmZXIgKyBPRkZfTkVFRF9FT0YsICZjb29raWUtPm5lZWRfZW9mLCBzaXplb2YoY29va2llLT5uZWVkX2VvZikpOwogCi0gICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShidWZmZXIsIHNpemVvZihidWZmZXIpLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKKyAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9MSVRUTEVfRU5ESUFOLCAwKTsKIH0KLSN1bmRlZiBJU19MSVRUTEVfRU5ESUFOCiAKIHN0YXRpYyBpbnQKIF90ZXh0aW93cmFwcGVyX2RlY29kZXJfc2V0c3RhdGUodGV4dGlvICpzZWxmLCBjb29raWVfdHlwZSAqY29va2llKQpAQCAtMjM1Myw3ICsyMzUxLDcgQEAKIAogICAgIC8qIE5vdGUgb3VyIGluaXRpYWwgc3RhcnQgcG9pbnQuICovCiAgICAgY29va2llLnN0YXJ0X3BvcyArPSBza2lwX2J5dGVzOwotICAgIGNvb2tpZS5jaGFyc190b19za2lwID0gY2hhcnNfdG9fc2tpcDsKKyAgICBjb29raWUuY2hhcnNfdG9fc2tpcCA9IFB5X1NBRkVfRE9XTkNBU1QoY2hhcnNfdG9fc2tpcCwgUHlfc3NpemVfdCwgaW50KTsKICAgICBpZiAoY2hhcnNfdG9fc2tpcCA9PSAwKQogICAgICAgICBnb3RvIGZpbmFsbHk7CiAKQEAgLTI1NzksNyArMjU3Nyw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeU9iamVjdCAqZXhjID0gTlVMTCwgKnZhbCwgKnRiOwotICAgICAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgICAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfX2RlYWxsb2Nfd2FybiwgIk8iLCBzZWxmKTsKICAgICAgICAgICAgIGlmIChyZXMpCiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CkBAIC0yNzQwLDYgKzI3MzgsNyBAQAogICAgIHsiZW5jb2RpbmciLCBUX09CSkVDVCwgb2Zmc2V0b2YodGV4dGlvLCBlbmNvZGluZyksIFJFQURPTkxZfSwKICAgICB7ImJ1ZmZlciIsIFRfT0JKRUNULCBvZmZzZXRvZih0ZXh0aW8sIGJ1ZmZlciksIFJFQURPTkxZfSwKICAgICB7ImxpbmVfYnVmZmVyaW5nIiwgVF9CT09MLCBvZmZzZXRvZih0ZXh0aW8sIGxpbmVfYnVmZmVyaW5nKSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKHRleHRpbywgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMjc3Niw3ICsyNzc1LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAvKnRwX2ZsYWdzKi8KICAgICB0ZXh0aW93cmFwcGVyX2RvYywgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYyl0ZXh0aW93cmFwcGVyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KXRleHRpb3dyYXBwZXJfY2xlYXIsIC8qIHRwX2NsZWFyICovCkBAIC0yNzk1LDQgKzI3OTQsMTQgQEAKICAgICAoaW5pdHByb2MpdGV4dGlvd3JhcHBlcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2pzb24uYyBiL01vZHVsZXMvX2pzb24uYwppbmRleCA5MTY2NjgwLi4xMjUxMDFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19qc29uLmMKKysrIGIvTW9kdWxlcy9fanNvbi5jCkBAIC0yLDIwICsyLDYgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJhY2N1LmgiCiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNjAwMDAgJiYgIWRlZmluZWQoUHlfVFlQRSkKLSNkZWZpbmUgUHlfVFlQRShvYikgICAgICgoKFB5T2JqZWN0Kikob2IpKS0+b2JfdHlwZSkKLSNlbmRpZgotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCAmJiAhZGVmaW5lZChQWV9TU0laRV9UX01JTikKLXR5cGVkZWYgaW50IFB5X3NzaXplX3Q7Ci0jZGVmaW5lIFBZX1NTSVpFX1RfTUFYIElOVF9NQVgKLSNkZWZpbmUgUFlfU1NJWkVfVF9NSU4gSU5UX01JTgotI2RlZmluZSBQeUludF9Gcm9tU3NpemVfdCBQeUludF9Gcm9tTG9uZwotI2RlZmluZSBQeUludF9Bc1NzaXplX3QgUHlJbnRfQXNMb25nCi0jZW5kaWYKLSNpZm5kZWYgUHlfSVNfRklOSVRFCi0jZGVmaW5lIFB5X0lTX0ZJTklURShYKSAoIVB5X0lTX0lORklOSVRZKFgpICYmICFQeV9JU19OQU4oWCkpCi0jZW5kaWYKLQogI2lmZGVmIF9fR05VQ19fCiAjZGVmaW5lIFVOVVNFRCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKICNlbHNlCkBAIC0xMjksMzMgKzExNSwxNCBAQAogcmFpc2VfZXJybXNnKGNoYXIgKm1zZywgUHlPYmplY3QgKnMsIFB5X3NzaXplX3QgZW5kKTsKIHN0YXRpYyBQeU9iamVjdCAqCiBlbmNvZGVyX2VuY29kZV9zdHJpbmcoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKLXN0YXRpYyBpbnQKLV9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90ICpzaXplX3B0cik7CiBzdGF0aWMgUHlPYmplY3QgKgotX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdChQeV9zc2l6ZV90ICpzaXplX3B0cik7CitlbmNvZGVyX2VuY29kZV9sb25nKFB5RW5jb2Rlck9iamVjdCogcyBVTlVTRUQsIFB5T2JqZWN0ICpvYmopOwogc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX2Zsb2F0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaik7CiAKICNkZWZpbmUgU19DSEFSKGMpIChjID49ICcgJyAmJiBjIDw9ICd+JyAmJiBjICE9ICdcXCcgJiYgYyAhPSAnIicpCiAjZGVmaW5lIElTX1dISVRFU1BBQ0UoYykgKCgoYykgPT0gJyAnKSB8fCAoKGMpID09ICdcdCcpIHx8ICgoYykgPT0gJ1xuJykgfHwgKChjKSA9PSAnXHInKSkKIAotc3RhdGljIGludAotX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKQotewotICAgIC8qIFB5T2JqZWN0IHRvIFB5X3NzaXplX3QgY29udmVydGVyICovCi0gICAgKnNpemVfcHRyID0gUHlMb25nX0FzU3NpemVfdChvKTsKLSAgICBpZiAoKnNpemVfcHRyID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdChQeV9zc2l6ZV90ICpzaXplX3B0cikKLXsKLSAgICAvKiBQeV9zc2l6ZV90IHRvIFB5T2JqZWN0IGNvbnZlcnRlciAqLwotICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoKnNpemVfcHRyKTsKLX0KLQogc3RhdGljIFB5X3NzaXplX3QKIGFzY2lpX2VzY2FwZV91bmljaGFyKFB5X1VDUzQgYywgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBQeV9zc2l6ZV90IGNoYXJzKQogewpAQCAtMTc0LDE0ICsxNDEsMTMgQEAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChjID49IDB4MTAwMDApIHsKICAgICAgICAgICAgICAgICAvKiBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgKi8KLSAgICAgICAgICAgICAgICBQeV9VQ1M0IHYgPSBjIC0gMHgxMDAwMDsKLSAgICAgICAgICAgICAgICBjID0gMHhkODAwIHwgKCh2ID4+IDEwKSAmIDB4M2ZmKTsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IHYgPSBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGMpOwogICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKGMgPj4gMTIpICYgMHhmXTsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKGMgPj4gIDgpICYgMHhmXTsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKGMgPj4gIDQpICYgMHhmXTsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKGMgICAgICApICYgMHhmXTsKLSAgICAgICAgICAgICAgICBjID0gMHhkYzAwIHwgKHYgJiAweDNmZik7CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyh2ID4+IDEyKSAmIDB4Zl07CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyh2ID4+ICA4KSAmIDB4Zl07CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyh2ID4+ICA0KSAmIDB4Zl07CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyh2ICAgICAgKSAmIDB4Zl07CisgICAgICAgICAgICAgICAgYyA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjKTsKICAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwpAQCAtMjY4LDEzICsyMzQsMjMgQEAKICAgICAgICAgaWYgKGVycm1zZ19mbiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBweW1zZyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlcnJtc2dfZm4sICIoek9PJikiLCBtc2csIHMsIF9jb252ZXJ0UHlJbnRfRnJvbVNzaXplX3QsICZlbmQpOworICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T24pIiwgbXNnLCBzLCBlbmQpOwogICAgIGlmIChweW1zZykgewogICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfVmFsdWVFcnJvciwgcHltc2cpOwogICAgICAgICBQeV9ERUNSRUYocHltc2cpOwogICAgIH0KIH0KIAorc3RhdGljIHZvaWQKK3JhaXNlX3N0b3BfaXRlcmF0aW9uKFB5X3NzaXplX3QgaWR4KQoreworICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChpZHgpOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19TdG9wSXRlcmF0aW9uLCB2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgfQorfQorCiBzdGF0aWMgUHlPYmplY3QgKgogX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUoUHlPYmplY3QgKnJ2YWwsIFB5X3NzaXplX3QgaWR4KSB7CiAgICAgLyogcmV0dXJuIChydmFsLCBpZHgpIHR1cGxlLCBzdGVhbGluZyByZWZlcmVuY2UgdG8gcnZhbCAqLwpAQCAtMzQ0LDcgKzMyMCw3IEBACiAgICAgYnVmID0gUHlVbmljb2RlX0RBVEEocHlzdHIpOwogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChweXN0cik7CiAKLSAgICBpZiAoZW5kIDwgMCB8fCBsZW4gPD0gZW5kKSB7CisgICAgaWYgKGVuZCA8IDAgfHwgbGVuIDwgZW5kKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW5kIGlzIG91dCBvZiBib3VuZHMiKTsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KQEAgLTUxNSw3ICs0OTEsNyBAQAogICAgIFB5X3NzaXplX3QgZW5kOwogICAgIFB5X3NzaXplX3QgbmV4dF9lbmQgPSAtMTsKICAgICBpbnQgc3RyaWN0ID0gMTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PJnxpOnNjYW5zdHJpbmciLCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmZW5kLCAmc3RyaWN0KSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT258aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCAmZW5kLCAmc3RyaWN0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKQEAgLTYzMCwxMiArNjA2LDEyIEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCxzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICptZW1va2V5OwogCiAgICAgICAgICAgICAvKiByZWFkIGtleSAqLwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC02OTIsMTEgKzY2OCw5IEBACiAgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgb2JqZWN0IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnfScpIHsKKyAgICAgICAgICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ30nKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgeworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgewogICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC03MDcsMTIgKzY4MSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ30nICovCi0gICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgewotICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKIAogICAgIGlmIChoYXNfcGFpcnNfaG9vaykgewpAQCAtNzY0LDggKzczMiw4IEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIGFycmF5IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKIAogICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiB0ZXJtICAqLwogICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKQEAgLTc4MiwxMSArNzUwLDkgQEAKICAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBhcnJheSBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ10nKSB7CisgICAgICAgICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICddJykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNzk5LDcgKzc2NSw3IEBACiAKICAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgc2hvdWxkIGJlICddJyAqLwogICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHB5c3RyLCBlbmRfaWR4KTsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKQEAgLTg2Nyw3ICs4MzMsNyBAQAogICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJy0nKSB7CiAgICAgICAgIGlkeCsrOwogICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKHN0YXJ0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtODgzLDcgKzg0OSw3IEBACiAgICAgfQogICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLwogICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihzdGFydCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtOTc2LDcgKzk0Miw3IEBACiAgICAgbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocHlzdHIpOwogCiAgICAgaWYgKGlkeCA+PSBsZW5ndGgpIHsKLSAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmFpc2Vfc3RvcF9pdGVyYXRpb24oaWR4KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMDc4LDcgKzEwNDQsNyBAQAogICAgIFB5U2Nhbm5lck9iamVjdCAqczsKICAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKICAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpZHgpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPbjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgJmlkeCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKQEAgLTEyNzksOCArMTI0NSw4IEBACiAKICAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKICAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKLSAgICAgICAgJm9iaiwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpbmRlbnRfbGV2ZWwpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPbjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKKyAgICAgICAgJm9iaiwgJmluZGVudF9sZXZlbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChfUHlBY2N1X0luaXQoJmFjYykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMyNiwxMyArMTI5Miw0NSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9lbmNvZGVfbG9uZyhQeUVuY29kZXJPYmplY3QqIHMgVU5VU0VELCBQeU9iamVjdCAqb2JqKQoreworICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5TG9uZyBhbmQgUHlMb25nIHN1YmNsYXNzZXMuCisgICAgICAgQ2FsbHMgaW50KCkgb24gUHlMb25nIHN1YmNsYXNzZXMgaW4gY2FzZSB0aGUgc3RyKCkgd2FzIGNoYW5nZWQuCisgICAgICAgQWRkZWQgc3BlY2lmaWNhbGx5IHRvIGRlYWwgd2l0aCBJbnRFbnVtLiAgU2VlIElzc3VlMTgyNjQuICovCisgICAgUHlPYmplY3QgKmVuY29kZWQsICpsb25nb2JqOworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvbmdvYmogPSBQeU51bWJlcl9Mb25nKG9iaik7CisgICAgICAgIGlmIChsb25nb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBjb2VyY2UgaW50IHN1YmNsYXNzIHRvIGludCIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIobG9uZ29iaik7CisgICAgICAgIFB5X0RFQ1JFRihsb25nb2JqKTsKKyAgICB9CisgICAgcmV0dXJuIGVuY29kZWQ7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX2Zsb2F0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaikKIHsKLSAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0ICovCisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlGbG9hdC4KKyAgICAgICBNb2RpZmllZCB0byBjYWxsIGZsb2F0KCkgb24gZmxvYXQgc3ViY2xhc3NlcyBpbiBjYXNlIHRoZSBzdWJjbGFzcworICAgICAgIGNoYW5nZXMgdGhlIHJlcHIuICBTZWUgSXNzdWUxODI2NC4gICovCisgICAgUHlPYmplY3QgKmVuY29kZWQsICpmbG9hdG9iajsKICAgICBkb3VibGUgaSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9iaik7CiAgICAgaWYgKCFQeV9JU19GSU5JVEUoaSkpIHsKICAgICAgICAgaWYgKCFzLT5hbGxvd19uYW4pIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiT3V0IG9mIHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50Iik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiCisgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoaSA+IDApIHsKQEAgLTEzNDUsOCArMTM0MywyNCBAQAogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOYU4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCi0gICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICAvKiBjb2VyY2UgZmxvYXQgc3ViY2xhc3NlcyB0byBmbG9hdCAocHJpbWFyaWx5IGZvciBFbnVtKSAqLworICAgIGlmIChQeUZsb2F0X0NoZWNrRXhhY3Qob2JqKSkgeworICAgICAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9SZXByKG9iaik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmbG9hdG9iaiA9IFB5TnVtYmVyX0Zsb2F0KG9iaik7CisgICAgICAgIGlmIChmbG9hdG9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gY29lcmNlIGZsb2F0IHN1YmNsYXNzIHRvIGZsb2F0IgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1JlcHIoZmxvYXRvYmopOworICAgICAgICBQeV9ERUNSRUYoZmxvYXRvYmopOworICAgIH0KKyAgICByZXR1cm4gZW5jb2RlZDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEzOTAsNyArMTQwNCw3IEBACiAgICAgICAgIHJldHVybiBfc3RlYWxfYWNjdW11bGF0ZShhY2MsIGVuY29kZWQpOwogICAgIH0KICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sob2JqKSkgewotICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOworICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywgb2JqKTsKICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcmV0dXJuIF9zdGVhbF9hY2N1bXVsYXRlKGFjYywgZW5jb2RlZCk7CkBAIC0xNTc1LDkgKzE1ODksMTAgQEAKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKGtleSkpIHsKLSAgICAgICAgICAgIGtzdHIgPSBQeU9iamVjdF9TdHIoa2V5KTsKLSAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpCisgICAgICAgICAgICBrc3RyID0gZW5jb2Rlcl9lbmNvZGVfbG9uZyhzLCBrZXkpOworICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChza2lwa2V5cykgewogICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwppbmRleCBjYzY4OGJhLi40MDBjMzQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwpAQCAtMTQ3LDI2ICsxNDcsMzQgQEAKICAgICAvKiBob3BlZnVsbHksIHRoZSBsb2NhbGVjb252IHJlc3VsdCBzdXJ2aXZlcyB0aGUgQyBsaWJyYXJ5IGNhbGxzCiAgICAgICAgaW52b2x2ZWQgaGVyZWluICovCiAKKyNkZWZpbmUgUkVTVUxUKGtleSwgb2JqKVwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSBcCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsgXAorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCBrZXksIG9iaikgPCAwKSB7IFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOyBcCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsgXAorICAgICAgICB9IFwKKyAgICAgICAgUHlfREVDUkVGKG9iaik7IFwKKyAgICB9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJFU1VMVF9TVFJJTkcocylcCi0gICAgeCA9IFB5VW5pY29kZV9EZWNvZGVMb2NhbGUobC0+cywgTlVMTCk7ICAgXAotICAgIGlmICgheCkgZ290byBmYWlsZWQ7XAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgI3MsIHgpO1wKLSAgICBQeV9YREVDUkVGKHgpCisgICAgZG8geyBcCisgICAgICAgIHggPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKGwtPnMsIE5VTEwpOyBcCisgICAgICAgIFJFU1VMVCgjcywgeCk7IFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFU1VMVF9JTlQoaSlcCi0gICAgeCA9IFB5TG9uZ19Gcm9tTG9uZyhsLT5pKTtcCi0gICAgaWYgKCF4KSBnb3RvIGZhaWxlZDtcCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAjaSwgeCk7XAotICAgIFB5X1hERUNSRUYoeCkKKyAgICBkbyB7IFwKKyAgICAgICAgeCA9IFB5TG9uZ19Gcm9tTG9uZyhsLT5pKTsgXAorICAgICAgICBSRVNVTFQoI2ksIHgpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogICAgIC8qIE51bWVyaWMgaW5mb3JtYXRpb24gKi8KICAgICBSRVNVTFRfU1RSSU5HKGRlY2ltYWxfcG9pbnQpOwogICAgIFJFU1VMVF9TVFJJTkcodGhvdXNhbmRzX3NlcCk7CiAgICAgeCA9IGNvcHlfZ3JvdXBpbmcobC0+Z3JvdXBpbmcpOwotICAgIGlmICgheCkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAiZ3JvdXBpbmciLCB4KTsKLSAgICBQeV9YREVDUkVGKHgpOworICAgIFJFU1VMVCgiZ3JvdXBpbmciLCB4KTsKIAogICAgIC8qIE1vbmV0YXJ5IGluZm9ybWF0aW9uICovCiAgICAgUkVTVUxUX1NUUklORyhpbnRfY3Vycl9zeW1ib2wpOwpAQCAtMTc0LDEwICsxODIsOCBAQAogICAgIFJFU1VMVF9TVFJJTkcobW9uX2RlY2ltYWxfcG9pbnQpOwogICAgIFJFU1VMVF9TVFJJTkcobW9uX3Rob3VzYW5kc19zZXApOwogICAgIHggPSBjb3B5X2dyb3VwaW5nKGwtPm1vbl9ncm91cGluZyk7Ci0gICAgaWYgKCF4KQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICJtb25fZ3JvdXBpbmciLCB4KTsKLSAgICBQeV9YREVDUkVGKHgpOworICAgIFJFU1VMVCgibW9uX2dyb3VwaW5nIiwgeCk7CisKICAgICBSRVNVTFRfU1RSSU5HKHBvc2l0aXZlX3NpZ24pOwogICAgIFJFU1VMVF9TVFJJTkcobmVnYXRpdmVfc2lnbik7CiAgICAgUkVTVUxUX0lOVChpbnRfZnJhY19kaWdpdHMpOwpAQCAtMTkyLDcgKzE5OCw2IEBACiAKICAgZmFpbGVkOgogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICBQeV9YREVDUkVGKHgpOwogICAgIHJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sc3Byb2YuYyBiL01vZHVsZXMvX2xzcHJvZi5jCmluZGV4IGIwYTIyNmIuLjg5NDc4ODkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2xzcHJvZi5jCisrKyBiL01vZHVsZXMvX2xzcHJvZi5jCkBAIC0zNiwxMiArMzYsOCBAQAogI2Vycm9yICJUaGlzIG1vZHVsZSByZXF1aXJlcyBnZXR0aW1lb2ZkYXkoKSBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMhIgogI2VuZGlmCiAKLSNpZiAoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbHNlCiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWVzLmg+Ci0jZW5kaWYKIAogc3RhdGljIFBZX0xPTkdfTE9ORwogaHBUaW1lcih2b2lkKQpAQCAtMjI3LDcgKzIyMyw3IEBACiBuZXdQcm9maWxlckVudHJ5KFByb2ZpbGVyT2JqZWN0ICpwT2JqLCB2b2lkICprZXksIFB5T2JqZWN0ICp1c2VyT2JqKQogewogICAgIFByb2ZpbGVyRW50cnkgKnNlbGY7Ci0gICAgc2VsZiA9IChQcm9maWxlckVudHJ5KikgbWFsbG9jKHNpemVvZihQcm9maWxlckVudHJ5KSk7CisgICAgc2VsZiA9IChQcm9maWxlckVudHJ5KikgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlckVudHJ5KSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM1LDcgKzIzMSw3IEBACiAgICAgdXNlck9iaiA9IG5vcm1hbGl6ZVVzZXJPYmoodXNlck9iaik7CiAgICAgaWYgKHVzZXJPYmogPT0gTlVMTCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBmcmVlKHNlbGYpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYpOwogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI2OCw3ICsyNjQsNyBAQAogbmV3U3ViRW50cnkoUHJvZmlsZXJPYmplY3QgKnBPYmosICBQcm9maWxlckVudHJ5ICpjYWxsZXIsIFByb2ZpbGVyRW50cnkqIGVudHJ5KQogewogICAgIFByb2ZpbGVyU3ViRW50cnkgKnNlbGY7Ci0gICAgc2VsZiA9IChQcm9maWxlclN1YkVudHJ5KikgbWFsbG9jKHNpemVvZihQcm9maWxlclN1YkVudHJ5KSk7CisgICAgc2VsZiA9IChQcm9maWxlclN1YkVudHJ5KikgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlclN1YkVudHJ5KSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjg2LDcgKzI4Miw3IEBACiBzdGF0aWMgaW50IGZyZWVTdWJFbnRyeShyb3RhdGluZ19ub2RlX3QgKmhlYWRlciwgdm9pZCAqYXJnKQogewogICAgIFByb2ZpbGVyU3ViRW50cnkgKnN1YmVudHJ5ID0gKFByb2ZpbGVyU3ViRW50cnkqKSBoZWFkZXI7Ci0gICAgZnJlZShzdWJlbnRyeSk7CisgICAgUHlNZW1fRnJlZShzdWJlbnRyeSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI5NSw3ICsyOTEsNyBAQAogICAgIFByb2ZpbGVyRW50cnkgKmVudHJ5ID0gKFByb2ZpbGVyRW50cnkqKSBoZWFkZXI7CiAgICAgUm90YXRpbmdUcmVlX0VudW0oZW50cnktPmNhbGxzLCBmcmVlU3ViRW50cnksIE5VTEwpOwogICAgIFB5X0RFQ1JFRihlbnRyeS0+dXNlck9iaik7Ci0gICAgZnJlZShlbnRyeSk7CisgICAgUHlNZW1fRnJlZShlbnRyeSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMwNSwxMyArMzAxLDEzIEBACiAgICAgcE9iai0+cHJvZmlsZXJFbnRyaWVzID0gRU1QVFlfUk9UQVRJTkdfVFJFRTsKICAgICAvKiByZWxlYXNlIHRoZSBtZW1vcnkgaG9sZCBieSB0aGUgUHJvZmlsZXJDb250ZXh0cyAqLwogICAgIGlmIChwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0KSB7Ci0gICAgICAgIGZyZWUocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCk7CisgICAgICAgIFB5TWVtX0ZyZWUocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCk7CiAgICAgICAgIHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQgPSBOVUxMOwogICAgIH0KICAgICB3aGlsZSAocE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQpIHsKICAgICAgICAgUHJvZmlsZXJDb250ZXh0ICpjID0gcE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQ7CiAgICAgICAgIHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0ID0gYy0+cHJldmlvdXM7Ci0gICAgICAgIGZyZWUoYyk7CisgICAgICAgIFB5TWVtX0ZyZWUoYyk7CiAgICAgfQogICAgIHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0ID0gTlVMTDsKIH0KQEAgLTM5Nyw3ICszOTMsNyBAQAogICAgIGVsc2UgewogICAgICAgICAvKiBmcmVlIGxpc3QgZXhoYXVzdGVkLCBhbGxvY2F0ZSBhIG5ldyBvbmUgKi8KICAgICAgICAgcENvbnRleHQgPSAoUHJvZmlsZXJDb250ZXh0KikKLSAgICAgICAgICAgIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJDb250ZXh0KSk7CisgICAgICAgICAgICBQeU1lbV9NYWxsb2Moc2l6ZW9mKFByb2ZpbGVyQ29udGV4dCkpOwogICAgICAgICBpZiAocENvbnRleHQgPT0gTlVMTCkgewogICAgICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICAgICAgZ290byByZXN0b3JlUHllcnI7CkBAIC03MTYsNyArNzEyLDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCA9IHBDb250ZXh0LT5wcmV2aW91czsKICAgICAgICAgaWYgKHBDb250ZXh0KQotICAgICAgICAgICAgZnJlZShwQ29udGV4dCk7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHBDb250ZXh0KTsKICAgICB9CiAKIH0KQEAgLTg4OCwxMCArODg0LDEyIEBACiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlByb2ZpbGVyIiwgKFB5T2JqZWN0ICopJlB5UHJvZmlsZXJfVHlwZSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRzRW50cnlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9lbnRyeV9kZXNjKTsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdHNTdWJFbnRyeVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX3N1YmVudHJ5X2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRzRW50cnlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX2VudHJ5X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRzU3ViRW50cnlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX3N1YmVudHJ5X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlN0YXRzRW50cnlUeXBlKTsKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlN0YXRzU3ViRW50cnlUeXBlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2x6bWFtb2R1bGUuYyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwppbmRleCA2NDM2MTYwLi4xMjE3ZWQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fbHptYW1vZHVsZS5jCkBAIC01MSw2ICs1MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECisgICAgbHptYV9hbGxvY2F0b3IgYWxsb2M7CiAgICAgbHptYV9zdHJlYW0gbHpzOwogICAgIGludCBmbHVzaGVkOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC02MCw2ICs2MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECisgICAgbHptYV9hbGxvY2F0b3IgYWxsb2M7CiAgICAgbHptYV9zdHJlYW0gbHpzOwogICAgIGludCBjaGVjazsKICAgICBjaGFyIGVvZjsKQEAgLTExNyw2ICsxMTksMjIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkKgorUHlMem1hX01hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBpdGVtcywgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKGl0ZW1zID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIHNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOgorICAgICAgIHRoZSBHSUwgaXMgbm90IGhlbGQgd2hlbiBsem1hX2NvZGUoKSBpcyBjYWxsZWQgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitQeUx6bWFfRnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKICNpZiBCVUZTSVogPCA4MTkyCiAjZGVmaW5lIElOSVRJQUxfQlVGRkVSX1NJWkUgODE5MgogI2Vsc2UKQEAgLTY2NCw2ICs2ODIsMTEgQEAKICAgICAgICAgaWYgKCF1aW50MzJfY29udmVydGVyKHByZXNldF9vYmosICZwcmVzZXQpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgc2VsZi0+YWxsb2Mub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT5hbGxvYy5hbGxvYyA9IFB5THptYV9NYWxsb2M7CisgICAgc2VsZi0+YWxsb2MuZnJlZSA9IFB5THptYV9GcmVlOworICAgIHNlbGYtPmx6cy5hbGxvY2F0b3IgPSAmc2VsZi0+YWxsb2M7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpAQCAtOTM5LDYgKzk2MiwxMSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgc2VsZi0+YWxsb2Mub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT5hbGxvYy5hbGxvYyA9IFB5THptYV9NYWxsb2M7CisgICAgc2VsZi0+YWxsb2MuZnJlZSA9IFB5THptYV9GcmVlOworICAgIHNlbGYtPmx6cy5hbGxvY2F0b3IgPSAmc2VsZi0+YWxsb2M7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCmluZGV4IDk0NjBjODkuLjFhYWYzNjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKQEAgLTEwLDI1ICsxMCwyMyBAQAogI2luY2x1ZGUgIm11bHRpcHJvY2Vzc2luZy5oIgogCiAKLVB5T2JqZWN0ICpQcm9jZXNzRXJyb3IsICpCdWZmZXJUb29TaG9ydDsKLQogLyoKICAqIEZ1bmN0aW9uIHdoaWNoIHJhaXNlcyBleGNlcHRpb25zIGJhc2VkIG9uIGVycm9yIGNvZGVzCiAgKi8KIAogUHlPYmplY3QgKgotbXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pCitfUHlNcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSkKIHsKICAgICBzd2l0Y2ggKG51bSkgewogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBjYXNlIE1QX1NUQU5EQVJEX0VSUk9SOgogICAgICAgICBpZiAoVHlwZSA9PSBOVUxMKQotICAgICAgICAgICAgVHlwZSA9IFB5RXhjX1dpbmRvd3NFcnJvcjsKKyAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19PU0Vycm9yOwogICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihUeXBlLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNUF9TT0NLRVRfRVJST1I6CiAgICAgICAgIGlmIChUeXBlID09IE5VTEwpCi0gICAgICAgICAgICBUeXBlID0gUHlFeGNfV2luZG93c0Vycm9yOworICAgICAgICAgICAgVHlwZSA9IFB5RXhjX09TRXJyb3I7CiAgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFR5cGUsIFdTQUdldExhc3RFcnJvcigpKTsKICAgICAgICAgYnJlYWs7CiAjZWxzZSAvKiAhTVNfV0lORE9XUyAqLwpAQCAtMTAxLDEzICs5OSwxNSBAQAogewogICAgIEhBTkRMRSBoYW5kbGU7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQsIGxlbmd0aDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAieSo6c2VuZCIgLCAmaGFuZGxlLCAmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBsZW5ndGggPSAoaW50KVB5X01JTihidWYubGVuLCBJTlRfTUFYKTsKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXQgPSBzZW5kKChTT0NLRVQpIGhhbmRsZSwgYnVmLmJ1ZiwgYnVmLmxlbiwgMCk7CisgICAgcmV0ID0gc2VuZCgoU09DS0VUKSBoYW5kbGUsIGJ1Zi5idWYsIGxlbmd0aCwgMCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CkBAIC0xMjgsNiArMTI4LDcgQEAKICAgICB7InJlY3YiLCBtdWx0aXByb2Nlc3NpbmdfcmVjdiwgTUVUSF9WQVJBUkdTLCAiIn0sCiAgICAgeyJzZW5kIiwgbXVsdGlwcm9jZXNzaW5nX3NlbmQsIE1FVEhfVkFSQVJHUywgIiJ9LAogI2VuZGlmCisgICAgeyJzZW1fdW5saW5rIiwgX1B5TXBfc2VtX3VubGluaywgTUVUSF9WQVJBUkdTLCAiIn0sCiAgICAge05VTEx9CiB9OwogCkBAIC0xNTksMTkgKzE2MCwxMiBAQAogICAgIGlmICghbW9kdWxlKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIEdldCBjb3B5IG9mIEJ1ZmZlclRvb1Nob3J0ICovCi0gICAgdGVtcCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgibXVsdGlwcm9jZXNzaW5nIik7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBCdWZmZXJUb29TaG9ydCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgIkJ1ZmZlclRvb1Nob3J0Iik7Ci0gICAgUHlfWERFQ1JFRih0ZW1wKTsKLQogI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoZGVmaW5lZChIQVZFX1NFTV9PUEVOKSAmJiAhZGVmaW5lZChQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVEKSkKLSAgICAvKiBBZGQgU2VtTG9jayB0eXBlIHRvIG1vZHVsZSAqLwotICAgIGlmIChQeVR5cGVfUmVhZHkoJlNlbUxvY2tUeXBlKSA8IDApCisgICAgLyogQWRkIF9QeU1wX1NlbUxvY2sgdHlwZSB0byBtb2R1bGUgKi8KKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZfUHlNcF9TZW1Mb2NrVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoJlNlbUxvY2tUeXBlKTsKKyAgICBQeV9JTkNSRUYoJl9QeU1wX1NlbUxvY2tUeXBlKTsKICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpweV9zZW1fdmFsdWVfbWF4OwogICAgICAgICAvKiBTb21lIHN5c3RlbXMgZGVmaW5lIFNFTV9WQUxVRV9NQVggYXMgYW4gdW5zaWduZWQgdmFsdWUgdGhhdApAQCAtMTgyLDEwICsxNzYsMTAgQEAKICAgICAgICAgICAgIHB5X3NlbV92YWx1ZV9tYXggPSBQeUxvbmdfRnJvbUxvbmcoU0VNX1ZBTFVFX01BWCk7CiAgICAgICAgIGlmIChweV9zZW1fdmFsdWVfbWF4ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoU2VtTG9ja1R5cGUudHBfZGljdCwgIlNFTV9WQUxVRV9NQVgiLAorICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhfUHlNcF9TZW1Mb2NrVHlwZS50cF9kaWN0LCAiU0VNX1ZBTFVFX01BWCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5X3NlbV92YWx1ZV9tYXgpOwogICAgIH0KLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobW9kdWxlLCAiU2VtTG9jayIsIChQeU9iamVjdCopJlNlbUxvY2tUeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobW9kdWxlLCAiU2VtTG9jayIsIChQeU9iamVjdCopJl9QeU1wX1NlbUxvY2tUeXBlKTsKICNlbmRpZgogCiAgICAgLyogQWRkIGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmggYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKaW5kZXggZTNkZTliYS4uOWFlZWE4ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaApAQCAtOTEsMjMgKzkxLDEzIEBACiAjZGVmaW5lIE1QX1NPQ0tFVF9FUlJPUiAoLTEwMDIpCiAjZGVmaW5lIE1QX0VYQ0VQVElPTl9IQVNfQkVFTl9TRVQgKC0xMDAzKQogCi1QeU9iamVjdCAqbXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pOworUHlPYmplY3QgKl9QeU1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKTsKIAogLyoKICAqIEV4dGVybnMgLSBub3QgYWxsIHdpbGwgcmVhbGx5IGV4aXN0IG9uIGFsbCBwbGF0Zm9ybXMKICAqLwogCi1leHRlcm4gUHlPYmplY3QgKkJ1ZmZlclRvb1Nob3J0OwotZXh0ZXJuIFB5VHlwZU9iamVjdCBTZW1Mb2NrVHlwZTsKLWV4dGVybiBQeVR5cGVPYmplY3QgUGlwZUNvbm5lY3Rpb25UeXBlOwotCi0vKgotICogTWlzY2VsbGFuZW91cwotICovCi0KLSNpZm5kZWYgTUlOCi0jICBkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyB4IDogeSkKLSMgIGRlZmluZSBNQVgoeCwgeSkgKCh4KSA+ICh5KSA/IHggOiB5KQotI2VuZGlmCitleHRlcm4gUHlUeXBlT2JqZWN0IF9QeU1wX1NlbUxvY2tUeXBlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlNcF9zZW1fdW5saW5rKFB5T2JqZWN0ICppZ25vcmUsIFB5T2JqZWN0ICphcmdzKTsKIAogI2VuZGlmIC8qIE1VTFRJUFJPQ0VTU0lOR19IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKaW5kZXggMmMyYjAyMC4uZGU4NWE5MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwpAQCAtMTgsNiArMTgsNyBAQAogICAgIGludCBjb3VudDsKICAgICBpbnQgbWF4dmFsdWU7CiAgICAgaW50IGtpbmQ7CisgICAgY2hhciAqbmFtZTsKIH0gU2VtTG9ja09iamVjdDsKIAogI2RlZmluZSBJU01JTkUobykgKG8tPmNvdW50ID4gMCAmJiBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgPT0gby0+bGFzdF90aWQpCkBAIC00Myw3ICs0NCw3IEBACiB7CiAgICAgbG9uZyBwcmV2aW91czsKIAotICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIDApKSB7CisgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaGFuZGxlLCAwLCBGQUxTRSkpIHsKICAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CiAgICAgICAgIGlmICghUmVsZWFzZVNlbWFwaG9yZShoYW5kbGUsIDEsICZwcmV2aW91cykpCiAgICAgICAgICAgICByZXR1cm4gTVBfU1RBTkRBUkRfRVJST1I7CkBAIC05OSw3ICsxMDAsNyBAQAogICAgIH0KIAogICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgY2FuIGFjcXVpcmUgd2l0aG91dCByZWxlYXNpbmcgdGhlIEdJTCBhbmQgYmxvY2tpbmcgKi8KLSAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChzZWxmLT5oYW5kbGUsIDApID09IFdBSVRfT0JKRUNUXzApIHsKKyAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdEV4KHNlbGYtPmhhbmRsZSwgMCwgRkFMU0UpID09IFdBSVRfT0JKRUNUXzApIHsKICAgICAgICAgc2VsZi0+bGFzdF90aWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICAgICAgICAgKytzZWxmLT5jb3VudDsKICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CkBAIC0xMTgsNyArMTE5LDcgQEAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHNpZ2ludF9ldmVudCAhPSBOVUxMKQogICAgICAgICBSZXNldEV2ZW50KHNpZ2ludF9ldmVudCk7Ci0gICAgcmVzID0gV2FpdEZvck11bHRpcGxlT2JqZWN0cyhuaGFuZGxlcywgaGFuZGxlcywgRkFMU0UsIGZ1bGxfbXNlY3MpOworICAgIHJlcyA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHNFeChuaGFuZGxlcywgaGFuZGxlcywgRkFMU0UsIGZ1bGxfbXNlY3MsIEZBTFNFKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgLyogaGFuZGxlIHJlc3VsdCAqLwpAQCAtMjAwLDcgKzIwMSw3IEBACiAjaWZuZGVmIEhBVkVfU0VNX1RJTUVEV0FJVAogIyAgZGVmaW5lIHNlbV90aW1lZHdhaXQoc2VtLGRlYWRsaW5lKSBzZW1fdGltZWR3YWl0X3NhdmUoc2VtLGRlYWRsaW5lLF9zYXZlKQogCi1pbnQKK3N0YXRpYyBpbnQKIHNlbV90aW1lZHdhaXRfc2F2ZShzZW1fdCAqc2VtLCBzdHJ1Y3QgdGltZXNwZWMgKmRlYWRsaW5lLCBQeVRocmVhZFN0YXRlICpfc2F2ZSkKIHsKICAgICBpbnQgcmVzOwpAQCAtMzk3LDcgKzM5OCw4IEBACiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLW5ld3NlbWxvY2tvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBTRU1fSEFORExFIGhhbmRsZSwgaW50IGtpbmQsIGludCBtYXh2YWx1ZSkKK25ld3NlbWxvY2tvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBTRU1fSEFORExFIGhhbmRsZSwgaW50IGtpbmQsIGludCBtYXh2YWx1ZSwKKyAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSkKIHsKICAgICBTZW1Mb2NrT2JqZWN0ICpzZWxmOwogCkBAIC00MDksMjEgKzQxMSwyMiBAQAogICAgIHNlbGYtPmNvdW50ID0gMDsKICAgICBzZWxmLT5sYXN0X3RpZCA9IDA7CiAgICAgc2VsZi0+bWF4dmFsdWUgPSBtYXh2YWx1ZTsKKyAgICBzZWxmLT5uYW1lID0gbmFtZTsKICAgICByZXR1cm4gKFB5T2JqZWN0KilzZWxmOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogc2VtbG9ja19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgY2hhciBidWZmZXJbMjU2XTsKICAgICBTRU1fSEFORExFIGhhbmRsZSA9IFNFTV9GQUlMRUQ7Ci0gICAgaW50IGtpbmQsIG1heHZhbHVlLCB2YWx1ZTsKKyAgICBpbnQga2luZCwgbWF4dmFsdWUsIHZhbHVlLCB1bmxpbms7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtpbmQiLCAidmFsdWUiLCAibWF4dmFsdWUiLCBOVUxMfTsKLSAgICBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOworICAgIGNoYXIgKm5hbWUsICpuYW1lX2NvcHkgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2luZCIsICJ2YWx1ZSIsICJtYXh2YWx1ZSIsICJuYW1lIiwgInVubGluayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImlpaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2luZCwgJnZhbHVlLCAmbWF4dmFsdWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJpaWlzaSIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2luZCwgJnZhbHVlLCAmbWF4dmFsdWUsICZuYW1lLCAmdW5saW5rKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoa2luZCAhPSBSRUNVUlNJVkVfTVVURVggJiYga2luZCAhPSBTRU1BUEhPUkUpIHsKQEAgLTQzMSwxOCArNDM0LDIzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5T1Nfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIi9tcCVsZC0lZCIsIChsb25nKWdldHBpZCgpLCBjb3VudGVyKyspOworICAgIGlmICghdW5saW5rKSB7CisgICAgICAgIG5hbWVfY29weSA9IFB5TWVtX01hbGxvYyhzdHJsZW4obmFtZSkgKyAxKTsKKyAgICAgICAgaWYgKG5hbWVfY29weSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsdXJlOworICAgICAgICBzdHJjcHkobmFtZV9jb3B5LCBuYW1lKTsKKyAgICB9CiAKICAgICBTRU1fQ0xFQVJfRVJST1IoKTsKLSAgICBoYW5kbGUgPSBTRU1fQ1JFQVRFKGJ1ZmZlciwgdmFsdWUsIG1heHZhbHVlKTsKKyAgICBoYW5kbGUgPSBTRU1fQ1JFQVRFKG5hbWUsIHZhbHVlLCBtYXh2YWx1ZSk7CiAgICAgLyogT24gV2luZG93cyB3ZSBzaG91bGQgZmFpbCBpZiBHZXRMYXN0RXJyb3IoKT09RVJST1JfQUxSRUFEWV9FWElTVFMgKi8KICAgICBpZiAoaGFuZGxlID09IFNFTV9GQUlMRUQgfHwgU0VNX0dFVF9MQVNUX0VSUk9SKCkgIT0gMCkKICAgICAgICAgZ290byBmYWlsdXJlOwogCi0gICAgaWYgKFNFTV9VTkxJTksoYnVmZmVyKSA8IDApCisgICAgaWYgKHVubGluayAmJiBTRU1fVU5MSU5LKG5hbWUpIDwgMCkKICAgICAgICAgZ290byBmYWlsdXJlOwogCi0gICAgcmVzdWx0ID0gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlKTsKKyAgICByZXN1bHQgPSBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUsIG5hbWVfY29weSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIApAQCAtNDUxLDcgKzQ1OSw4IEBACiAgIGZhaWx1cmU6CiAgICAgaWYgKGhhbmRsZSAhPSBTRU1fRkFJTEVEKQogICAgICAgICBTRU1fQ0xPU0UoaGFuZGxlKTsKLSAgICBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgUHlNZW1fRnJlZShuYW1lX2NvcHkpOworICAgIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDYwLDEyICs0NjksMzAgQEAKIHsKICAgICBTRU1fSEFORExFIGhhbmRsZTsKICAgICBpbnQga2luZCwgbWF4dmFsdWU7CisgICAgY2hhciAqbmFtZSwgKm5hbWVfY29weSA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9TRU1fSEFORExFICJpaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZraW5kLCAmbWF4dmFsdWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX1NFTV9IQU5ETEUgImlpeiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZraW5kLCAmbWF4dmFsdWUsICZuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlKTsKKyAgICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgICAgIG5hbWVfY29weSA9IFB5TWVtX01hbGxvYyhzdHJsZW4obmFtZSkgKyAxKTsKKyAgICAgICAgaWYgKG5hbWVfY29weSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHN0cmNweShuYW1lX2NvcHksIG5hbWUpOworICAgIH0KKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgaWYgKG5hbWUgIT0gTlVMTCkgeworICAgICAgICBoYW5kbGUgPSBzZW1fb3BlbihuYW1lLCAwKTsKKyAgICAgICAgaWYgKGhhbmRsZSA9PSBTRU1fRkFJTEVEKSB7CisgICAgICAgICAgICBQeU1lbV9GcmVlKG5hbWVfY29weSk7CisgICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlLCBuYW1lX2NvcHkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDczLDYgKzUwMCw3IEBACiB7CiAgICAgaWYgKHNlbGYtPmhhbmRsZSAhPSBTRU1fRkFJTEVEKQogICAgICAgICBTRU1fQ0xPU0Uoc2VsZi0+aGFuZGxlKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPm5hbWUpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KIApAQCAtNDk4LDcgKzUyNiw3IEBACiAjZWxzZQogICAgIGludCBzdmFsOwogICAgIGlmIChTRU1fR0VUVkFMVUUoc2VsZi0+aGFuZGxlLCAmc3ZhbCkgPCAwKQotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIC8qIHNvbWUgcG9zaXggaW1wbGVtZW50YXRpb25zIHVzZSBuZWdhdGl2ZSBudW1iZXJzIHRvIGluZGljYXRlCiAgICAgICAgdGhlIG51bWJlciBvZiB3YWl0aW5nIHRocmVhZHMgKi8KICAgICBpZiAoc3ZhbCA8IDApCkBAIC01MTQsMTYgKzU0MiwxNiBAQAogICAgIGlmIChzZW1fdHJ5d2FpdChzZWxmLT5oYW5kbGUpIDwgMCkgewogICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQogICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7Ci0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHNlbV9wb3N0KHNlbGYtPmhhbmRsZSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKICAgICB9CiAjZWxzZQogICAgIGludCBzdmFsOwogICAgIGlmIChTRU1fR0VUVkFMVUUoc2VsZi0+aGFuZGxlLCAmc3ZhbCkgPCAwKQotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpc3ZhbCA9PSAwKTsKICNlbmRpZgogfQpAQCAtNTc0LDYgKzYwMiw4IEBACiAgICAgICIifSwKICAgICB7Im1heHZhbHVlIiwgVF9JTlQsIG9mZnNldG9mKFNlbUxvY2tPYmplY3QsIG1heHZhbHVlKSwgUkVBRE9OTFksCiAgICAgICIifSwKKyAgICB7Im5hbWUiLCBUX1NUUklORywgb2Zmc2V0b2YoU2VtTG9ja09iamVjdCwgbmFtZSksIFJFQURPTkxZLAorICAgICAiIn0sCiAgICAge05VTEx9CiB9OwogCkBAIC01ODEsNyArNjExLDcgQEAKICAqIFNlbWFwaG9yZSB0eXBlCiAgKi8KIAotUHlUeXBlT2JqZWN0IFNlbUxvY2tUeXBlID0geworUHlUeXBlT2JqZWN0IF9QeU1wX1NlbUxvY2tUeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgIC8qIHRwX25hbWUgICAgICAgICAgICovICJfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2siLAogICAgIC8qIHRwX2Jhc2ljc2l6ZSAgICAgICovIHNpemVvZihTZW1Mb2NrT2JqZWN0KSwKQEAgLTYyMSwzICs2NTEsMjMgQEAKICAgICAvKiB0cF9hbGxvYyAgICAgICAgICAqLyAwLAogICAgIC8qIHRwX25ldyAgICAgICAgICAgICovIHNlbWxvY2tfbmV3LAogfTsKKworLyoKKyAqIEZ1bmN0aW9uIHRvIHVubGluayBzZW1hcGhvcmUgbmFtZXMKKyAqLworCitQeU9iamVjdCAqCitfUHlNcF9zZW1fdW5saW5rKFB5T2JqZWN0ICppZ25vcmUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFNFTV9VTkxJTksobmFtZSkgPCAwKSB7CisgICAgICAgIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19vcGNvZGUuYyBiL01vZHVsZXMvX29wY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2ZmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19vcGNvZGUuYwpAQCAtMCwwICsxLDExNyBAQAorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgIm9wY29kZS5oIgorCisvKltjbGluaWNdCittb2R1bGUgX29wY29kZQorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKKy8qW2NsaW5pY10KKworX29wY29kZS5zdGFja19lZmZlY3QgLT4gaW50CisKKyAgb3Bjb2RlOiBpbnQKKworICBbCisgIG9wYXJnOiBpbnQKKyAgXQorICAvCisKK0NvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiB0aGUgb3Bjb2RlLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX29wY29kZV9zdGFja19lZmZlY3RfX2RvY19fLAorInN0YWNrX2VmZmVjdChvcGNvZGUsIFtvcGFyZ10pXG4iCisiQ29tcHV0ZSB0aGUgc3RhY2sgZWZmZWN0IG9mIHRoZSBvcGNvZGUuIik7CisKKyNkZWZpbmUgX09QQ09ERV9TVEFDS19FRkZFQ1RfTUVUSE9EREVGICAgIFwKKyAgICB7InN0YWNrX2VmZmVjdCIsIChQeUNGdW5jdGlvbilfb3Bjb2RlX3N0YWNrX2VmZmVjdCwgTUVUSF9WQVJBUkdTLCBfb3Bjb2RlX3N0YWNrX2VmZmVjdF9fZG9jX199LAorCitzdGF0aWMgaW50Citfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBvcGNvZGUsIGludCBncm91cF9yaWdodF8xLCBpbnQgb3BhcmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX29wY29kZV9zdGFja19lZmZlY3QoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IG9wY29kZTsKKyAgICBpbnQgZ3JvdXBfcmlnaHRfMSA9IDA7CisgICAgaW50IG9wYXJnID0gMDsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpzdGFja19lZmZlY3QiLCAmb3Bjb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOnN0YWNrX2VmZmVjdCIsICZvcGNvZGUsICZvcGFyZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIl9vcGNvZGUuc3RhY2tfZWZmZWN0IHJlcXVpcmVzIDEgdG8gMiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBfcmV0dXJuX3ZhbHVlID0gX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChtb2R1bGUsIG9wY29kZSwgZ3JvdXBfcmlnaHRfMSwgb3BhcmcpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgaW50Citfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBvcGNvZGUsIGludCBncm91cF9yaWdodF8xLCBpbnQgb3BhcmcpCisvKltjbGluaWMgY2hlY2tzdW06IGU4ODBlNjJkYzdiMGRlNzM0MDMwMjZlYWY0ZjgwNzRhYTEwNjM1OGJdKi8KK3sKKyAgICBpbnQgZWZmZWN0OworICAgIGlmIChIQVNfQVJHKG9wY29kZSkpIHsgICAgICAgIAorICAgICAgICBpZiAoIWdyb3VwX3JpZ2h0XzEpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAic3RhY2tfZWZmZWN0OiBvcGNvZGUgcmVxdWlyZXMgb3BhcmcgYnV0IG9wYXJnIHdhcyBub3Qgc3BlY2lmaWVkIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZ3JvdXBfcmlnaHRfMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAic3RhY2tfZWZmZWN0OiBvcGNvZGUgZG9lcyBub3QgcGVybWl0IG9wYXJnIGJ1dCBvcGFyZyB3YXMgc3BlY2lmaWVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWZmZWN0ID0gUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KG9wY29kZSwgb3BhcmcpOworICAgIGlmIChlZmZlY3QgPT0gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1QpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBvcGNvZGUgb3Igb3BhcmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIGVmZmVjdDsKK30KKworCisKKworc3RhdGljIFB5TWV0aG9kRGVmCitvcGNvZGVfZnVuY3Rpb25zW10gPSAgeworICAgIF9PUENPREVfU1RBQ0tfRUZGRUNUX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMLCAwLCBOVUxMfQorfTsKKworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG9wY29kZW1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9vcGNvZGUiLAorICAgICJPcGNvZGUgc3VwcG9ydCBtb2R1bGUuIiwKKyAgICAtMSwKKyAgICBvcGNvZGVfZnVuY3Rpb25zLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX29wY29kZSh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJm9wY29kZW1vZHVsZSk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29wZXJhdG9yLmMgYi9Nb2R1bGVzL19vcGVyYXRvci5jCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIE1vZHVsZXMvb3BlcmF0b3IuYwpyZW5hbWUgdG8gTW9kdWxlcy9fb3BlcmF0b3IuYwppbmRleCA1MTU2YjZiLi5lOGJlZjA0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL29wZXJhdG9yLmMKKysrIGIvTW9kdWxlcy9fb3BlcmF0b3IuYwpAQCAtMjA4LDYgKzIwOCwzMSBAQAogICAgIHJldHVybiAocmVzdWx0ID09IDApOwogfQogCitQeURvY19TVFJWQVIobGVuZ3RoX2hpbnRfX2RvY19fLAorImxlbmd0aF9oaW50KG9iaiwgZGVmYXVsdD0wKSAtPiBpbnRcbiIKKyJSZXR1cm4gYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBvYmouXG4iCisiVGhpcyBpcyB1c2VmdWwgZm9yIHByZXNpemluZyBjb250YWluZXJzIHdoZW4gYnVpbGRpbmcgZnJvbSBhblxuIgorIml0ZXJhYmxlLlxuIgorIlxuIgorIklmIHRoZSBvYmplY3Qgc3VwcG9ydHMgbGVuKCksIHRoZSByZXN1bHQgd2lsbCBiZVxuIgorImV4YWN0LiBPdGhlcndpc2UsIGl0IG1heSBvdmVyLSBvciB1bmRlci1lc3RpbWF0ZSBieSBhblxuIgorImFyYml0cmFyeSBhbW91bnQuIFRoZSByZXN1bHQgd2lsbCBiZSBhbiBpbnRlZ2VyID49IDAuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqbGVuZ3RoX2hpbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUgPSAwLCByZXM7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46bGVuZ3RoX2hpbnQiLCAmb2JqLCAmZGVmYXVsdHZhbHVlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzID0gUHlPYmplY3RfTGVuZ3RoSGludChvYmosIGRlZmF1bHR2YWx1ZSk7CisgICAgaWYgKHJlcyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKKwogUHlEb2NfU1RSVkFSKGNvbXBhcmVfZGlnZXN0X19kb2NfXywKICJjb21wYXJlX2RpZ2VzdChhLCBiKSAtPiBib29sXG4iCiAiXG4iCkBAIC0yOTcsMTcgKzMyMiwxNSBAQAogLyogb3BlcmF0b3IgbWV0aG9kcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIHNwYW0xKE9QLERPQykgeyNPUCwgT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAotI2RlZmluZSBzcGFtMihPUCxBTFRPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB7I0FMVE9QLCBvcF8jI09QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwKKyNkZWZpbmUgc3BhbTIoT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwKICNkZWZpbmUgc3BhbTFvKE9QLERPQykgeyNPUCwgT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LAotI2RlZmluZSBzcGFtMm8oT1AsQUxUT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeyNBTFRPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCisjZGVmaW5lIHNwYW0ybyhPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LAogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG9wZXJhdG9yX21ldGhvZHNbXSA9IHsKIAogc3BhbTFvKHRydXRoLAogICJ0cnV0aChhKSAtLSBSZXR1cm4gVHJ1ZSBpZiBhIGlzIHRydWUsIEZhbHNlIG90aGVyd2lzZS4iKQotc3BhbTIoY29udGFpbnMsX19jb250YWluc19fLAorc3BhbTIoY29udGFpbnMsCiAgImNvbnRhaW5zKGEsIGIpIC0tIFNhbWUgYXMgYiBpbiBhIChub3RlIHJldmVyc2VkIG9wZXJhbmRzKS4iKQogc3BhbTEoaW5kZXhPZiwKICAiaW5kZXhPZihhLCBiKSAtLSBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IG9mIGIgaW4gYS4iKQpAQCAtMzE2LDU2ICszMzksNTggQEAKIAogc3BhbTEoaXNfLCAiaXNfKGEsIGIpIC0tIFNhbWUgYXMgYSBpcyBiLiIpCiBzcGFtMShpc19ub3QsICJpc19ub3QoYSwgYikgLS0gU2FtZSBhcyBhIGlzIG5vdCBiLiIpCi1zcGFtMm8oaW5kZXgsIF9faW5kZXhfXywgImluZGV4KGEpIC0tIFNhbWUgYXMgYS5fX2luZGV4X18oKSIpCi1zcGFtMihhZGQsX19hZGRfXywgImFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKyBiLiIpCi1zcGFtMihzdWIsX19zdWJfXywgInN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLSBiLiIpCi1zcGFtMihtdWwsX19tdWxfXywgIm11bChhLCBiKSAtLSBTYW1lIGFzIGEgKiBiLiIpCi1zcGFtMihmbG9vcmRpdixfX2Zsb29yZGl2X18sICJmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy8gYi4iKQotc3BhbTIodHJ1ZWRpdixfX3RydWVkaXZfXywgInRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8gYi4iKQotc3BhbTIobW9kLF9fbW9kX18sICJtb2QoYSwgYikgLS0gU2FtZSBhcyBhICUgYi4iKQotc3BhbTJvKG5lZyxfX25lZ19fLCAibmVnKGEpIC0tIFNhbWUgYXMgLWEuIikKLXNwYW0ybyhwb3MsX19wb3NfXywgInBvcyhhKSAtLSBTYW1lIGFzICthLiIpCi1zcGFtMm8oYWJzLF9fYWJzX18sICJhYnMoYSkgLS0gU2FtZSBhcyBhYnMoYSkuIikKLXNwYW0ybyhpbnYsX19pbnZfXywgImludihhKSAtLSBTYW1lIGFzIH5hLiIpCi1zcGFtMm8oaW52ZXJ0LF9faW52ZXJ0X18sICJpbnZlcnQoYSkgLS0gU2FtZSBhcyB+YS4iKQotc3BhbTIobHNoaWZ0LF9fbHNoaWZ0X18sICJsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8IGIuIikKLXNwYW0yKHJzaGlmdCxfX3JzaGlmdF9fLCAicnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+PiBiLiIpCi1zcGFtMm8obm90XyxfX25vdF9fLCAibm90XyhhKSAtLSBTYW1lIGFzIG5vdCBhLiIpCi1zcGFtMihhbmRfLF9fYW5kX18sICJhbmRfKGEsIGIpIC0tIFNhbWUgYXMgYSAmIGIuIikKLXNwYW0yKHhvcixfX3hvcl9fLCAieG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBeIGIuIikKLXNwYW0yKG9yXyxfX29yX18sICJvcl8oYSwgYikgLS0gU2FtZSBhcyBhIHwgYi4iKQotc3BhbTIoaWFkZCxfX2lhZGRfXywgImEgPSBpYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLiIpCi1zcGFtMihpc3ViLF9faXN1Yl9fLCAiYSA9IGlzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC09IGIuIikKLXNwYW0yKGltdWwsX19pbXVsX18sICJhID0gaW11bChhLCBiKSAtLSBTYW1lIGFzIGEgKj0gYi4iKQotc3BhbTIoaWZsb29yZGl2LF9faWZsb29yZGl2X18sICJhID0gaWZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLz0gYi4iKQotc3BhbTIoaXRydWVkaXYsX19pdHJ1ZWRpdl9fLCAiYSA9IGl0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvPSBiIikKLXNwYW0yKGltb2QsX19pbW9kX18sICJhID0gaW1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJT0gYi4iKQotc3BhbTIoaWxzaGlmdCxfX2lsc2hpZnRfXywgImEgPSBpbHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PD0gYi4iKQotc3BhbTIoaXJzaGlmdCxfX2lyc2hpZnRfXywgImEgPSBpcnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+Pj0gYi4iKQotc3BhbTIoaWFuZCxfX2lhbmRfXywgImEgPSBpYW5kKGEsIGIpIC0tIFNhbWUgYXMgYSAmPSBiLiIpCi1zcGFtMihpeG9yLF9faXhvcl9fLCAiYSA9IGl4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF49IGIuIikKLXNwYW0yKGlvcixfX2lvcl9fLCAiYSA9IGlvcihhLCBiKSAtLSBTYW1lIGFzIGEgfD0gYi4iKQotc3BhbTIoY29uY2F0LF9fY29uY2F0X18sCitzcGFtMm8oaW5kZXgsICJpbmRleChhKSAtLSBTYW1lIGFzIGEuX19pbmRleF9fKCkiKQorc3BhbTIoYWRkLCAiYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArIGIuIikKK3NwYW0yKHN1YiwgInN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLSBiLiIpCitzcGFtMihtdWwsICJtdWwoYSwgYikgLS0gU2FtZSBhcyBhICogYi4iKQorc3BhbTIoZmxvb3JkaXYsICJmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy8gYi4iKQorc3BhbTIodHJ1ZWRpdiwgInRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8gYi4iKQorc3BhbTIobW9kLCAibW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlIGIuIikKK3NwYW0ybyhuZWcsICJuZWcoYSkgLS0gU2FtZSBhcyAtYS4iKQorc3BhbTJvKHBvcywgInBvcyhhKSAtLSBTYW1lIGFzICthLiIpCitzcGFtMm8oYWJzLCAiYWJzKGEpIC0tIFNhbWUgYXMgYWJzKGEpLiIpCitzcGFtMm8oaW52LCAiaW52KGEpIC0tIFNhbWUgYXMgfmEuIikKK3NwYW0ybyhpbnZlcnQsICJpbnZlcnQoYSkgLS0gU2FtZSBhcyB+YS4iKQorc3BhbTIobHNoaWZ0LCAibHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PCBiLiIpCitzcGFtMihyc2hpZnQsICJyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+IGIuIikKK3NwYW0ybyhub3RfLCAibm90XyhhKSAtLSBTYW1lIGFzIG5vdCBhLiIpCitzcGFtMihhbmRfLCAiYW5kXyhhLCBiKSAtLSBTYW1lIGFzIGEgJiBiLiIpCitzcGFtMih4b3IsICJ4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF4gYi4iKQorc3BhbTIob3JfLCAib3JfKGEsIGIpIC0tIFNhbWUgYXMgYSB8IGIuIikKK3NwYW0yKGlhZGQsICJhID0gaWFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKz0gYi4iKQorc3BhbTIoaXN1YiwgImEgPSBpc3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtPSBiLiIpCitzcGFtMihpbXVsLCAiYSA9IGltdWwoYSwgYikgLS0gU2FtZSBhcyBhICo9IGIuIikKK3NwYW0yKGlmbG9vcmRpdiwgImEgPSBpZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vPSBiLiIpCitzcGFtMihpdHJ1ZWRpdiwgImEgPSBpdHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLz0gYiIpCitzcGFtMihpbW9kLCAiYSA9IGltb2QoYSwgYikgLS0gU2FtZSBhcyBhICU9IGIuIikKK3NwYW0yKGlsc2hpZnQsICJhID0gaWxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDw9IGIuIikKK3NwYW0yKGlyc2hpZnQsICJhID0gaXJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj49IGIuIikKK3NwYW0yKGlhbmQsICJhID0gaWFuZChhLCBiKSAtLSBTYW1lIGFzIGEgJj0gYi4iKQorc3BhbTIoaXhvciwgImEgPSBpeG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBePSBiLiIpCitzcGFtMihpb3IsICJhID0gaW9yKGEsIGIpIC0tIFNhbWUgYXMgYSB8PSBiLiIpCitzcGFtMihjb25jYXQsCiAgImNvbmNhdChhLCBiKSAtLSBTYW1lIGFzIGEgKyBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIikKLXNwYW0yKGljb25jYXQsX19pY29uY2F0X18sCitzcGFtMihpY29uY2F0LAogICJhID0gaWNvbmNhdChhLCBiKSAtLSBTYW1lIGFzIGEgKz0gYiwgZm9yIGEgYW5kIGIgc2VxdWVuY2VzLiIpCi1zcGFtMihnZXRpdGVtLF9fZ2V0aXRlbV9fLAorc3BhbTIoZ2V0aXRlbSwKICAiZ2V0aXRlbShhLCBiKSAtLSBTYW1lIGFzIGFbYl0uIikKLXNwYW0yKHNldGl0ZW0sX19zZXRpdGVtX18sCitzcGFtMihzZXRpdGVtLAogICJzZXRpdGVtKGEsIGIsIGMpIC0tIFNhbWUgYXMgYVtiXSA9IGMuIikKLXNwYW0yKGRlbGl0ZW0sX19kZWxpdGVtX18sCitzcGFtMihkZWxpdGVtLAogICJkZWxpdGVtKGEsIGIpIC0tIFNhbWUgYXMgZGVsIGFbYl0uIikKLXNwYW0yKHBvdyxfX3Bvd19fLCAicG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKiBiLiIpCi1zcGFtMihpcG93LF9faXBvd19fLCAiYSA9IGlwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqPSBiLiIpCi1zcGFtMihsdCxfX2x0X18sICJsdChhLCBiKSAtLSBTYW1lIGFzIGE8Yi4iKQotc3BhbTIobGUsX19sZV9fLCAibGUoYSwgYikgLS0gU2FtZSBhcyBhPD1iLiIpCi1zcGFtMihlcSxfX2VxX18sICJlcShhLCBiKSAtLSBTYW1lIGFzIGE9PWIuIikKLXNwYW0yKG5lLF9fbmVfXywgIm5lKGEsIGIpIC0tIFNhbWUgYXMgYSE9Yi4iKQotc3BhbTIoZ3QsX19ndF9fLCAiZ3QoYSwgYikgLS0gU2FtZSBhcyBhPmIuIikKLXNwYW0yKGdlLF9fZ2VfXywgImdlKGEsIGIpIC0tIFNhbWUgYXMgYT49Yi4iKQorc3BhbTIocG93LCAicG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKiBiLiIpCitzcGFtMihpcG93LCAiYSA9IGlwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqPSBiLiIpCitzcGFtMihsdCwgImx0KGEsIGIpIC0tIFNhbWUgYXMgYTxiLiIpCitzcGFtMihsZSwgImxlKGEsIGIpIC0tIFNhbWUgYXMgYTw9Yi4iKQorc3BhbTIoZXEsICJlcShhLCBiKSAtLSBTYW1lIGFzIGE9PWIuIikKK3NwYW0yKG5lLCAibmUoYSwgYikgLS0gU2FtZSBhcyBhIT1iLiIpCitzcGFtMihndCwgImd0KGEsIGIpIC0tIFNhbWUgYXMgYT5iLiIpCitzcGFtMihnZSwgImdlKGEsIGIpIC0tIFNhbWUgYXMgYT49Yi4iKQogCiAgICAgeyJfY29tcGFyZV9kaWdlc3QiLCAoUHlDRnVuY3Rpb24pY29tcGFyZV9kaWdlc3QsIE1FVEhfVkFSQVJHUywKICAgICAgY29tcGFyZV9kaWdlc3RfX2RvY19ffSwKKyAgICAgeyJsZW5ndGhfaGludCIsIChQeUNGdW5jdGlvbilsZW5ndGhfaGludCwgTUVUSF9WQVJBUkdTLAorICAgICBsZW5ndGhfaGludF9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiAKIH07CkBAIC04OTIsMTIgKzkxNywxMiBAQAogfTsKIAogCi0vKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBQeUluaXRfb3BlcmF0b3IpICovCisvKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBQeUluaXRfX29wZXJhdG9yKSAqLwogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3BlcmF0b3Jtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJvcGVyYXRvciIsCisgICAgIl9vcGVyYXRvciIsCiAgICAgb3BlcmF0b3JfZG9jLAogICAgIC0xLAogICAgIG9wZXJhdG9yX21ldGhvZHMsCkBAIC05MDgsNyArOTMzLDcgQEAKIH07CiAKIFB5TU9ESU5JVF9GVU5DCi1QeUluaXRfb3BlcmF0b3Iodm9pZCkKK1B5SW5pdF9fb3BlcmF0b3Iodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fcGlja2xlLmMgYi9Nb2R1bGVzL19waWNrbGUuYwppbmRleCBiYzNiNDA2Li5kNzVkZjNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19waWNrbGUuYworKysgYi9Nb2R1bGVzL19waWNrbGUuYwpAQCAtMSwxMiArMSwzNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCisvKltjbGluaWNdCittb2R1bGUgX3BpY2tsZQorY2xhc3MgX3BpY2tsZS5QaWNrbGVyCitjbGFzcyBfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyCitjbGFzcyBfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eQorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKKy8qW3B5dGhvbl0KK2NsYXNzIFBpY2tsZXJPYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gIlBpY2tsZXJPYmplY3QgKiIKKworY2xhc3MgUGlja2xlck1lbW9Qcm94eU9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiUGlja2xlck1lbW9Qcm94eU9iamVjdCAqIgorCitjbGFzcyBVbnBpY2tsZXJPYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gIlVucGlja2xlck9iamVjdCAqIgorCitjbGFzcyBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gIlVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqIgorW3B5dGhvbl0qLworLypbcHl0aG9uIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIFB5RG9jX1NUUlZBUihwaWNrbGVfbW9kdWxlX2RvYywKICJPcHRpbWl6ZWQgQyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBwaWNrbGUgbW9kdWxlLiIpOwogCiAvKiBCdW1wIHRoaXMgd2hlbiBuZXcgb3Bjb2RlcyBhcmUgYWRkZWQgdG8gdGhlIHBpY2tsZSBwcm90b2NvbC4gKi8KIGVudW0gewotICAgIEhJR0hFU1RfUFJPVE9DT0wgPSAzLAorICAgIEhJR0hFU1RfUFJPVE9DT0wgPSA0LAogICAgIERFRkFVTFRfUFJPVE9DT0wgPSAzCiB9OwogCkBAIC03MSwxOCArOTUsMjAgQEAKIAogICAgIC8qIFByb3RvY29sIDMgKFB5dGhvbiAzLngpICovCiAgICAgQklOQllURVMgICAgICAgPSAnQicsCi0gICAgU0hPUlRfQklOQllURVMgPSAnQycKLX07CisgICAgU0hPUlRfQklOQllURVMgPSAnQycsCiAKLS8qIFRoZXNlIGFyZW4ndCBvcGNvZGVzIC0tIHRoZXkncmUgd2F5cyB0byBwaWNrbGUgYm9vbHMgYmVmb3JlIHByb3RvY29sIDIKLSAqIHNvIHRoYXQgdW5waWNrbGVycyB3cml0dGVuIGJlZm9yZSBib29scyB3ZXJlIGludHJvZHVjZWQgdW5waWNrbGUgdGhlbQotICogYXMgaW50cywgYnV0IHVucGlja2xlcnMgYWZ0ZXIgY2FuIHJlY29nbml6ZSB0aGF0IGJvb2xzIHdlcmUgaW50ZW5kZWQuCi0gKiBOb3RlIHRoYXQgcHJvdG9jb2wgMiBhZGRlZCBkaXJlY3Qgd2F5cyB0byBwaWNrbGUgYm9vbHMuCi0gKi8KLSN1bmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgICJJMDFcbiIKLSN1bmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAiSTAwXG4iCisgICAgLyogUHJvdG9jb2wgNCAqLworICAgIFNIT1JUX0JJTlVOSUNPREUgPSAnXHg4YycsCisgICAgQklOVU5JQ09ERTggICAgICA9ICdceDhkJywKKyAgICBCSU5CWVRFUzggICAgICAgID0gJ1x4OGUnLAorICAgIEVNUFRZX1NFVCAgICAgICAgPSAnXHg4ZicsCisgICAgQURESVRFTVMgICAgICAgICA9ICdceDkwJywKKyAgICBGUk9aRU5TRVQgICAgICAgID0gJ1x4OTEnLAorICAgIE5FV09CSl9FWCAgICAgICAgPSAnXHg5MicsCisgICAgU1RBQ0tfR0xPQkFMICAgICA9ICdceDkzJywKKyAgICBNRU1PSVpFICAgICAgICAgID0gJ1x4OTQnLAorICAgIEZSQU1FICAgICAgICAgICAgPSAnXHg5NScKK307CiAKIGVudW0gewogICAgLyogS2VlcCBpbiBzeW5jaCB3aXRoIHBpY2tsZS5QaWNrbGVyLl9CQVRDSFNJWkUuICBUaGlzIGlzIGhvdyBtYW55IGVsZW1lbnRzCkBAIC05OCwxMiArMTI0LDEyIEBACiAgICAgLyogSW5pdGlhbCBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgb2YgUGlja2xlci4gKi8KICAgICBXUklURV9CVUZfU0laRSA9IDQwOTYsCiAKLSAgICAvKiBNYXhpbXVtIHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlciBvZiBQaWNrbGVyIHdoZW4gcGlja2xpbmcgdG8gYQotICAgICAgIHN0cmVhbS4gIFRoaXMgaXMgaWdub3JlZCBmb3IgaW4tbWVtb3J5IHBpY2tsaW5nLiAqLwotICAgIE1BWF9XUklURV9CVUZfU0laRSA9IDY0ICogMTAyNCwKLQogICAgIC8qIFByZWZldGNoIHNpemUgd2hlbiB1bnBpY2tsaW5nIChkaXNhYmxlZCBvbiB1bnBlZWthYmxlIHN0cmVhbXMpICovCi0gICAgUFJFRkVUQ0ggPSA4MTkyICogMTYKKyAgICBQUkVGRVRDSCA9IDgxOTIgKiAxNiwKKworICAgIEZSQU1FX1NJWkVfVEFSR0VUID0gNjQgKiAxMDI0LAorCisgICAgRlJBTUVfSEVBREVSX1NJWkUgPSA5CiB9OwogCiAvKiBFeGNlcHRpb24gY2xhc3NlcyBmb3IgcGlja2xlLiBUaGVzZSBzaG91bGQgb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbgpAQCAtMzI5LDcgKzM1NSwxMiBAQAogICAgIFB5X3NzaXplX3QgbWF4X291dHB1dF9sZW47ICAvKiBBbGxvY2F0aW9uIHNpemUgb2Ygb3V0cHV0X2J1ZmZlci4gKi8KICAgICBpbnQgcHJvdG87ICAgICAgICAgICAgICAgICAgLyogUGlja2xlIHByb3RvY29sIG51bWJlciwgPj0gMCAqLwogICAgIGludCBiaW47ICAgICAgICAgICAgICAgICAgICAvKiBCb29sZWFuLCB0cnVlIGlmIHByb3RvID4gMCAqLwotICAgIFB5X3NzaXplX3QgYnVmX3NpemU7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLworICAgIGludCBmcmFtaW5nOyAgICAgICAgICAgICAgICAvKiBUcnVlIHdoZW4gZnJhbWluZyBpcyBlbmFibGVkLCBwcm90byA+PSA0ICovCisgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydDsgICAgIC8qIFBvc2l0aW9uIGluIG91dHB1dF9idWZmZXIgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBjdXJyZW50IGZyYW1lIGJlZ2lucy4gLTEgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm8gZnJhbWUgY3VycmVudGx5IG9wZW4uICovCisKKyAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOyAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLwogICAgIGludCBmYXN0OyAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgZmFzdCBtb2RlIGlmIHNldCB0byBhIHRydWUgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmYXN0IG1vZGUgZGlzYWJsZSB0aGUgdXNhZ2Ugb2YgbWVtbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIHNwZWVkaW5nIHRoZSBwaWNrbGluZyBwcm9jZXNzIGJ5CkBAIC0zNDksNyArMzgwLDggQEAKICAgICAvKiBUaGUgdW5waWNrbGVyIG1lbW8gaXMganVzdCBhbiBhcnJheSBvZiBQeU9iamVjdCAqcy4gVXNpbmcgYSBkaWN0CiAgICAgICAgaXMgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBrZXlzIGFyZSBjb250aWd1b3VzIGludHMuICovCiAgICAgUHlPYmplY3QgKiptZW1vOwotICAgIFB5X3NzaXplX3QgbWVtb19zaXplOworICAgIFB5X3NzaXplX3QgbWVtb19zaXplOyAgICAgICAvKiBDYXBhY2l0eSBvZiB0aGUgbWVtbyBhcnJheSAqLworICAgIFB5X3NzaXplX3QgbWVtb19sZW47ICAgICAgICAvKiBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgbWVtbyAqLwogCiAgICAgUHlPYmplY3QgKmFyZzsKICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9sb2FkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTC4gKi8KQEAgLTM2MCw2ICszOTIsNyBAQAogICAgIFB5X3NzaXplX3QgaW5wdXRfbGVuOwogICAgIFB5X3NzaXplX3QgbmV4dF9yZWFkX2lkeDsKICAgICBQeV9zc2l6ZV90IHByZWZldGNoZWRfaWR4OyAgLyogaW5kZXggb2YgZmlyc3QgcHJlZmV0Y2hlZCBieXRlICovCisKICAgICBQeU9iamVjdCAqcmVhZDsgICAgICAgICAgICAgLyogcmVhZCgpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLwogICAgIFB5T2JqZWN0ICpyZWFkbGluZTsgICAgICAgICAvKiByZWFkbGluZSgpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLwogICAgIFB5T2JqZWN0ICpwZWVrOyAgICAgICAgICAgICAvKiBwZWVrKCkgbWV0aG9kIG9mIHRoZSBpbnB1dCBzdHJlYW0sIG9yIE5VTEwgKi8KQEAgLTQzNiw2ICs0NjksNyBAQAogICAgIG5ldy0+bXRfdGFibGUgPSBQeU1lbV9NQUxMT0Moc2VsZi0+bXRfYWxsb2NhdGVkICogc2l6ZW9mKFB5TWVtb0VudHJ5KSk7CiAgICAgaWYgKG5ldy0+bXRfdGFibGUgPT0gTlVMTCkgewogICAgICAgICBQeU1lbV9GUkVFKG5ldyk7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bXRfYWxsb2NhdGVkOyBpKyspIHsKQEAgLTUyOSw3ICs1NjMsNyBAQAogICAgIG9sZHRhYmxlID0gc2VsZi0+bXRfdGFibGU7CiAgICAgc2VsZi0+bXRfdGFibGUgPSBQeU1lbV9NQUxMT0MobmV3X3NpemUgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKICAgICBpZiAoc2VsZi0+bXRfdGFibGUgPT0gTlVMTCkgewotICAgICAgICBQeU1lbV9GUkVFKG9sZHRhYmxlKTsKKyAgICAgICAgc2VsZi0+bXRfdGFibGUgPSBvbGR0YWJsZTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTY2OSwxNSArNzAzLDcxIEBACiAgICAgaWYgKHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm91dHB1dF9sZW4gPSAwOworICAgIHNlbGYtPmZyYW1lX3N0YXJ0ID0gLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitfd3JpdGVfc2l6ZTY0KGNoYXIgKm91dCwgc2l6ZV90IHZhbHVlKQoreworICAgIGludCBpOworCisgICAgYXNzZXJ0KHNpemVvZihzaXplX3QpIDw9IDgpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzaXplX3QpOyBpKyspIHsKKyAgICAgICAgb3V0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCh2YWx1ZSA+PiAoOCAqIGkpKSAmIDB4ZmYpOworICAgIH0KKyAgICBmb3IgKGkgPSBzaXplb2Yoc2l6ZV90KTsgaSA8IDg7IGkrKykgeworICAgICAgICBvdXRbaV0gPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK19QaWNrbGVyX1dyaXRlRnJhbWVIZWFkZXIoUGlja2xlck9iamVjdCAqc2VsZiwgY2hhciAqcWRhdGEsIHNpemVfdCBmcmFtZV9sZW4pCit7CisgICAgcWRhdGFbMF0gPSBGUkFNRTsKKyAgICBfd3JpdGVfc2l6ZTY0KHFkYXRhICsgMSwgZnJhbWVfbGVuKTsKK30KKworc3RhdGljIGludAorX1BpY2tsZXJfQ29tbWl0RnJhbWUoUGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBzaXplX3QgZnJhbWVfbGVuOworICAgIGNoYXIgKnFkYXRhOworCisgICAgaWYgKCFzZWxmLT5mcmFtaW5nIHx8IHNlbGYtPmZyYW1lX3N0YXJ0ID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmcmFtZV9sZW4gPSBzZWxmLT5vdXRwdXRfbGVuIC0gc2VsZi0+ZnJhbWVfc3RhcnQgLSBGUkFNRV9IRUFERVJfU0laRTsKKyAgICBxZGF0YSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPm91dHB1dF9idWZmZXIpICsgc2VsZi0+ZnJhbWVfc3RhcnQ7CisgICAgX1BpY2tsZXJfV3JpdGVGcmFtZUhlYWRlcihzZWxmLCBxZGF0YSwgZnJhbWVfbGVuKTsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfUGlja2xlcl9PcGNvZGVCb3VuZGFyeShQaWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgZnJhbWVfbGVuOworCisgICAgaWYgKCFzZWxmLT5mcmFtaW5nIHx8IHNlbGYtPmZyYW1lX3N0YXJ0ID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmcmFtZV9sZW4gPSBzZWxmLT5vdXRwdXRfbGVuIC0gc2VsZi0+ZnJhbWVfc3RhcnQgLSBGUkFNRV9IRUFERVJfU0laRTsKKyAgICBpZiAoZnJhbWVfbGVuID49IEZSQU1FX1NJWkVfVEFSR0VUKQorICAgICAgICByZXR1cm4gX1BpY2tsZXJfQ29tbWl0RnJhbWUoc2VsZik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIF9QaWNrbGVyX0dldFN0cmluZyhQaWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpvdXRwdXRfYnVmZmVyID0gc2VsZi0+b3V0cHV0X2J1ZmZlcjsKIAogICAgIGFzc2VydChzZWxmLT5vdXRwdXRfYnVmZmVyICE9IE5VTEwpOworCisgICAgaWYgKF9QaWNrbGVyX0NvbW1pdEZyYW1lKHNlbGYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHNlbGYtPm91dHB1dF9idWZmZXIgPSBOVUxMOwogICAgIC8qIFJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZvdXRwdXRfYnVmZmVyLCBzZWxmLT5vdXRwdXRfbGVuKSA8IDApCkBAIC02OTIsNiArNzgyLDcgQEAKIAogICAgIGFzc2VydChzZWxmLT53cml0ZSAhPSBOVUxMKTsKIAorICAgIC8qIFRoaXMgd2lsbCBjb21taXQgdGhlIGZyYW1lIGZpcnN0ICovCiAgICAgb3V0cHV0ID0gX1BpY2tsZXJfR2V0U3RyaW5nKHNlbGYpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNzAyLDU3ICs3OTMsNTMgQEAKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLV9QaWNrbGVyX1dyaXRlKFBpY2tsZXJPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbikKK19QaWNrbGVyX1dyaXRlKFBpY2tsZXJPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgZGF0YV9sZW4pCiB7Ci0gICAgUHlfc3NpemVfdCBpLCByZXF1aXJlZDsKKyAgICBQeV9zc2l6ZV90IGksIG4sIHJlcXVpcmVkOwogICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICBpbnQgbmVlZF9uZXdfZnJhbWU7CiAKICAgICBhc3NlcnQocyAhPSBOVUxMKTsKKyAgICBuZWVkX25ld19mcmFtZSA9IChzZWxmLT5mcmFtaW5nICYmIHNlbGYtPmZyYW1lX3N0YXJ0ID09IC0xKTsKKworICAgIGlmIChuZWVkX25ld19mcmFtZSkKKyAgICAgICAgbiA9IGRhdGFfbGVuICsgRlJBTUVfSEVBREVSX1NJWkU7CisgICAgZWxzZQorICAgICAgICBuID0gZGF0YV9sZW47CiAKICAgICByZXF1aXJlZCA9IHNlbGYtPm91dHB1dF9sZW4gKyBuOwogICAgIGlmIChyZXF1aXJlZCA+IHNlbGYtPm1heF9vdXRwdXRfbGVuKSB7Ci0gICAgICAgIGlmIChzZWxmLT53cml0ZSAhPSBOVUxMICYmIHJlcXVpcmVkID4gTUFYX1dSSVRFX0JVRl9TSVpFKSB7Ci0gICAgICAgICAgICAvKiBYWFggVGhpcyByZWFsbG9jYXRlcyBhIG5ldyBidWZmZXIgZXZlcnkgdGltZSwgd2hpY2ggaXMgYSBiaXQKLSAgICAgICAgICAgICAgIHdhc3RlZnVsLiAqLwotICAgICAgICAgICAgaWYgKF9QaWNrbGVyX0ZsdXNoVG9GaWxlKHNlbGYpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoX1BpY2tsZXJfQ2xlYXJCdWZmZXIoc2VsZikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgLyogTWFrZSBwbGFjZSBpbiBidWZmZXIgZm9yIHRoZSBwaWNrbGUgY2h1bmsgKi8KKyAgICAgICAgaWYgKHNlbGYtPm91dHB1dF9sZW4gPj0gUFlfU1NJWkVfVF9NQVggLyAyIC0gbikgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCAmJiBuID4gTUFYX1dSSVRFX0JVRl9TSVpFKSB7Ci0gICAgICAgICAgICAvKiB3ZSBhbHJlYWR5IGZsdXNoZWQgYWJvdmUsIHNvIHRoZSBidWZmZXIgaXMgZW1wdHkgKi8KLSAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgICAgICAgICAvKiBYWFggd2UgY291bGQgc3BhcmUgYW4gaW50ZXJtZWRpYXRlIGNvcHkgYW5kIHBhc3MKLSAgICAgICAgICAgICAgIGEgbWVtb3J5dmlldyBpbnN0ZWFkICovCi0gICAgICAgICAgICBQeU9iamVjdCAqb3V0cHV0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBuKTsKLSAgICAgICAgICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgcmVzdWx0ID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+d3JpdGUsIG91dHB1dCk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA9PSBOVUxMKSA/IC0xIDogMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfbGVuID49IFBZX1NTSVpFX1RfTUFYIC8gMiAtIG4pIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuID0gKHNlbGYtPm91dHB1dF9sZW4gKyBuKSAvIDIgKiAzOwotICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+b3V0cHV0X2J1ZmZlciwgc2VsZi0+bWF4X291dHB1dF9sZW4pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKyAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSAoc2VsZi0+b3V0cHV0X2xlbiArIG4pIC8gMiAqIDM7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnNlbGYtPm91dHB1dF9idWZmZXIsIHNlbGYtPm1heF9vdXRwdXRfbGVuKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPm91dHB1dF9idWZmZXIpOwotICAgIGlmIChuIDwgOCkgeworICAgIGlmIChuZWVkX25ld19mcmFtZSkgeworICAgICAgICAvKiBTZXR1cCBuZXcgZnJhbWUgKi8KKyAgICAgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydCA9IHNlbGYtPm91dHB1dF9sZW47CisgICAgICAgIHNlbGYtPmZyYW1lX3N0YXJ0ID0gZnJhbWVfc3RhcnQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGUkFNRV9IRUFERVJfU0laRTsgaSsrKSB7CisgICAgICAgICAgICAvKiBXcml0ZSBhbiBpbnZhbGlkIHZhbHVlLCBmb3IgZGVidWdnaW5nICovCisgICAgICAgICAgICBidWZmZXJbZnJhbWVfc3RhcnQgKyBpXSA9IDB4RkU7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+b3V0cHV0X2xlbiArPSBGUkFNRV9IRUFERVJfU0laRTsKKyAgICB9CisgICAgaWYgKGRhdGFfbGVuIDwgOCkgewogICAgICAgICAvKiBUaGlzIGlzIGZhc3RlciB0aGFuIG1lbWNweSB3aGVuIHRoZSBzdHJpbmcgaXMgc2hvcnQuICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuOyBpKyspIHsKICAgICAgICAgICAgIGJ1ZmZlcltzZWxmLT5vdXRwdXRfbGVuICsgaV0gPSBzW2ldOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBtZW1jcHkoYnVmZmVyICsgc2VsZi0+b3V0cHV0X2xlbiwgcywgbik7CisgICAgICAgIG1lbWNweShidWZmZXIgKyBzZWxmLT5vdXRwdXRfbGVuLCBzLCBkYXRhX2xlbik7CiAgICAgfQotICAgIHNlbGYtPm91dHB1dF9sZW4gKz0gbjsKLSAgICByZXR1cm4gbjsKKyAgICBzZWxmLT5vdXRwdXRfbGVuICs9IGRhdGFfbGVuOworICAgIHJldHVybiBkYXRhX2xlbjsKIH0KIAogc3RhdGljIFBpY2tsZXJPYmplY3QgKgpAQCAtNzcwLDIxICs4NTcsMjAgQEAKICAgICBzZWxmLT53cml0ZSA9IE5VTEw7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIHNlbGYtPmJpbiA9IDA7CisgICAgc2VsZi0+ZnJhbWluZyA9IDA7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKICAgICBzZWxmLT5mYXN0ID0gMDsKICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gMDsKICAgICBzZWxmLT5mYXN0X21lbW8gPSBOVUxMOwotCi0gICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwotICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSBXUklURV9CVUZfU0laRTsKICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKworICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuKTsKLSAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CisKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMIHx8IHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc5MiwzNCArODc4LDI5IEBACiB9CiAKIHN0YXRpYyBpbnQKLV9QaWNrbGVyX1NldFByb3RvY29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpwcm90b19vYmosCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZml4X2ltcG9ydHNfb2JqKQorX1BpY2tsZXJfU2V0UHJvdG9jb2woUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCiB7Ci0gICAgbG9uZyBwcm90byA9IDA7Ci0gICAgaW50IGZpeF9pbXBvcnRzOworICAgIGxvbmcgcHJvdG87CiAKLSAgICBpZiAocHJvdG9fb2JqID09IE5VTEwgfHwgcHJvdG9fb2JqID09IFB5X05vbmUpCisgICAgaWYgKHByb3RvY29sID09IE5VTEwgfHwgcHJvdG9jb2wgPT0gUHlfTm9uZSkgewogICAgICAgICBwcm90byA9IERFRkFVTFRfUFJPVE9DT0w7CisgICAgfQogICAgIGVsc2UgewotICAgICAgICBwcm90byA9IFB5TG9uZ19Bc0xvbmcocHJvdG9fb2JqKTsKLSAgICAgICAgaWYgKHByb3RvID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHByb3RvID0gUHlMb25nX0FzTG9uZyhwcm90b2NvbCk7CisgICAgICAgIGlmIChwcm90byA8IDApIHsKKyAgICAgICAgICAgIGlmIChwcm90byA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwcm90byA+IEhJR0hFU1RfUFJPVE9DT0wpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEhJR0hFU1RfUFJPVE9DT0wpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChwcm90byA8IDApCi0gICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKLSAgICBpZiAocHJvdG8gPiBISUdIRVNUX1BST1RPQ09MKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAotICAgICAgICAgICAgICAgICAgICAgSElHSEVTVF9QUk9UT0NPTCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHNfb2JqKTsKLSAgICBpZiAoZml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHNlbGYtPnByb3RvID0gcHJvdG87CisgICAgc2VsZi0+cHJvdG8gPSAoaW50KXByb3RvOwogICAgIHNlbGYtPmJpbiA9IHByb3RvID4gMDsKICAgICBzZWxmLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzICYmIHByb3RvIDwgMzsKLQogICAgIHJldHVybiAwOwogfQogCkBAIC04NzQsMTggKzk1NSwyMSBAQAogc3RhdGljIGludAogX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewotICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBzZWxmLT5uZXh0X3JlYWRfaWR4IC0gc2VsZi0+cHJlZmV0Y2hlZF9pZHg7CisgICAgUHlfc3NpemVfdCBjb25zdW1lZDsKKyAgICBQeU9iamVjdCAqcjsKIAotICAgIGlmIChjb25zdW1lZCA+IDApIHsKLSAgICAgICAgUHlPYmplY3QgKnI7Ci0gICAgICAgIGFzc2VydChzZWxmLT5wZWVrKTsgIC8qIG90aGVyd2lzZSB3ZSBkaWQgc29tZXRoaW5nIHdyb25nICovCi0gICAgICAgIC8qIFRoaXMgbWFrZXMgYW4gdXNlbGVzcyBjb3B5Li4uICovCi0gICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cmVhZCwgIm4iLCBjb25zdW1lZCk7Ci0gICAgICAgIGlmIChyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFB5X0RFQ1JFRihyKTsKLSAgICAgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSBzZWxmLT5uZXh0X3JlYWRfaWR4OwotICAgIH0KKyAgICBjb25zdW1lZCA9IHNlbGYtPm5leHRfcmVhZF9pZHggLSBzZWxmLT5wcmVmZXRjaGVkX2lkeDsKKyAgICBpZiAoY29uc3VtZWQgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhc3NlcnQoc2VsZi0+cGVlayk7ICAvKiBvdGhlcndpc2Ugd2UgZGlkIHNvbWV0aGluZyB3cm9uZyAqLworICAgIC8qIFRoaXMgbWFrZXMgYW4gdXNlbGVzcyBjb3B5Li4uICovCisgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yZWFkLCAibiIsIGNvbnN1bWVkKTsKKyAgICBpZiAociA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHIpOworCisgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSBzZWxmLT5uZXh0X3JlYWRfaWR4OwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMDA2LDggKzEwOTAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3VsdCkKIHsKICAgICBjaGFyICppbnB1dF9saW5lID0gUHlNZW1fUmVhbGxvYyhzZWxmLT5pbnB1dF9saW5lLCBsZW4gKyAxKTsKLSAgICBpZiAoaW5wdXRfbGluZSA9PSBOVUxMKQorICAgIGlmIChpbnB1dF9saW5lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIG1lbWNweShpbnB1dF9saW5lLCBsaW5lLCBsZW4pOwogICAgIGlucHV0X2xpbmVbbGVuXSA9ICdcMCc7CkBAIC0xMDk2LDcgKzExODIsMTIgQEAKICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgIG9sZF9pdGVtID0gc2VsZi0+bWVtb1tpZHhdOwogICAgIHNlbGYtPm1lbW9baWR4XSA9IHZhbHVlOwotICAgIFB5X1hERUNSRUYob2xkX2l0ZW0pOworICAgIGlmIChvbGRfaXRlbSAhPSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihvbGRfaXRlbSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzZWxmLT5tZW1vX2xlbisrOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTEwNCw4ICsxMTk1LDEwIEBACiBfVW5waWNrbGVyX05ld01lbW8oUHlfc3NpemVfdCBuZXdfc2l6ZSkKIHsKICAgICBQeU9iamVjdCAqKm1lbW8gPSBQeU1lbV9NQUxMT0MobmV3X3NpemUgKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgIGlmIChtZW1vID09IE5VTEwpCisgICAgaWYgKG1lbW8gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbWVtc2V0KG1lbW8sIDAsIG5ld19zaXplICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKICAgICByZXR1cm4gbWVtbzsKIH0KQEAgLTExMzYsMjAgKzEyMjksNiBAQAogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZi0+c3RhY2sgPSAoUGRhdGEgKilQZGF0YV9OZXcoKTsKLSAgICBpZiAoc2VsZi0+c3RhY2sgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBtZW1zZXQoJnNlbGYtPmJ1ZmZlciwgMCwgc2l6ZW9mKFB5X2J1ZmZlcikpOwotCi0gICAgc2VsZi0+bWVtb19zaXplID0gMzI7Ci0gICAgc2VsZi0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT5tZW1vX3NpemUpOwotICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPnBlcnNfZnVuYyA9IE5VTEw7CiAgICAgc2VsZi0+aW5wdXRfYnVmZmVyID0gTlVMTDsKQEAgLTExNjcsNiArMTI0NiwxNiBAQAogICAgIHNlbGYtPm1hcmtzX3NpemUgPSAwOwogICAgIHNlbGYtPnByb3RvID0gMDsKICAgICBzZWxmLT5maXhfaW1wb3J0cyA9IDA7CisgICAgbWVtc2V0KCZzZWxmLT5idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKKyAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKKyAgICBzZWxmLT5tZW1vX2xlbiA9IDA7CisgICAgc2VsZi0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT5tZW1vX3NpemUpOworICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7CisKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMIHx8IHNlbGYtPnN0YWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTEyMTMsOCArMTMwMiw4IEBACiAgICAgaWYgKGVycm9ycyA9PSBOVUxMKQogICAgICAgICBlcnJvcnMgPSAic3RyaWN0IjsKIAotICAgIHNlbGYtPmVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKLSAgICBzZWxmLT5lcnJvcnMgPSBzdHJkdXAoZXJyb3JzKTsKKyAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoZW5jb2RpbmcpOworICAgIHNlbGYtPmVycm9ycyA9IF9QeU1lbV9TdHJkdXAoZXJyb3JzKTsKICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCB8fCBzZWxmLT5lcnJvcnMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xMjc0LDM2ICsxMzYzLDQyIEBACiBzdGF0aWMgaW50CiBtZW1vX3B1dChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIFB5X3NzaXplX3QgeDsKICAgICBjaGFyIHBkYXRhWzMwXTsKICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQgc3RhdHVzID0gMDsKKyAgICBQeV9zc2l6ZV90IGlkeDsKKworICAgIGNvbnN0IGNoYXIgbWVtb2l6ZV9vcCA9IE1FTU9JWkU7CiAKICAgICBpZiAoc2VsZi0+ZmFzdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB4ID0gUHlNZW1vVGFibGVfU2l6ZShzZWxmLT5tZW1vKTsKLSAgICBpZiAoUHlNZW1vVGFibGVfU2V0KHNlbGYtPm1lbW8sIG9iaiwgeCkgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgIGlkeCA9IFB5TWVtb1RhYmxlX1NpemUoc2VsZi0+bWVtbyk7CisgICAgaWYgKFB5TWVtb1RhYmxlX1NldChzZWxmLT5tZW1vLCBvYmosIGlkeCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoIXNlbGYtPmJpbikgeworICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbWVtb2l6ZV9vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIXNlbGYtPmJpbikgewogICAgICAgICBwZGF0YVswXSA9IFBVVDsKICAgICAgICAgUHlPU19zbnByaW50ZihwZGF0YSArIDEsIHNpemVvZihwZGF0YSkgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICIlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCB4KTsKKyAgICAgICAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgaWR4KTsKICAgICAgICAgbGVuID0gc3RybGVuKHBkYXRhKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICh4IDwgMjU2KSB7CisgICAgICAgIGlmIChpZHggPCAyNTYpIHsKICAgICAgICAgICAgIHBkYXRhWzBdID0gQklOUFVUOwotICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcil4OworICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcilpZHg7CiAgICAgICAgICAgICBsZW4gPSAyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHggPD0gMHhmZmZmZmZmZkwpIHsKKyAgICAgICAgZWxzZSBpZiAoaWR4IDw9IDB4ZmZmZmZmZmZMKSB7CiAgICAgICAgICAgICBwZGF0YVswXSA9IExPTkdfQklOUFVUOwotICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoeCAmIDB4ZmYpOwotICAgICAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHggPj4gOCkgJiAweGZmKTsKLSAgICAgICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMjQpICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKShpZHggJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKChpZHggPj4gOCkgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKChpZHggPj4gMTYpICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoaWR4ID4+IDI0KSAmIDB4ZmYpOwogICAgICAgICAgICAgbGVuID0gNTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsgLyogdW5saWtlbHkgKi8KQEAgLTEzMTIsOTAgKzE0MDcsMTMwIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoMCkgewotICBlcnJvcjoKLSAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdoaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSkKK2dldGF0dHJpYnV0ZShQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKSB7CisgICAgUHlPYmplY3QgKmRvdHRlZF9wYXRoOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2RvdCwgIi4iKTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2xvY2FscywgIjxsb2NhbHM+Iik7CisKKyAgICBkb3R0ZWRfcGF0aCA9IFB5VW5pY29kZV9TcGxpdChuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9kb3QpLCAtMSk7CisgICAgaWYgKGRvdHRlZF9wYXRoID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChQeV9TSVpFKGRvdHRlZF9wYXRoKSA+PSAxKTsKKyAgICBpZiAoIWFsbG93X3F1YWxuYW1lICYmIFB5X1NJWkUoZG90dGVkX3BhdGgpID4gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IHF1YWxpZmllZCBhdHRyaWJ1dGUgJVIgb24gJVI7IgorICAgICAgICAgICAgICAgICAgICAgInVzZSBwcm90b2NvbHMgPj0gNCB0byBlbmFibGUgc3VwcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lLCBvYmopOworICAgICAgICBQeV9ERUNSRUYoZG90dGVkX3BhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoZG90dGVkX3BhdGgpOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKnN1YnBhdGggPSBQeUxpc3RfR0VUX0lURU0oZG90dGVkX3BhdGgsIGkpOworICAgICAgICBQeU9iamVjdCAqdG1wOworICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAorICAgICAgICAgICAgc3VicGF0aCwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbG9jYWxzKSwgUHlfRVEpOworICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOworICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzX2VxdWFsKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBsb2NhbCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHN1YnBhdGgpOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG9iaiA9IHRtcDsKKyAgICB9CisgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgord2hpY2htb2R1bGUoUHlPYmplY3QgKmdsb2JhbCwgUHlPYmplY3QgKmdsb2JhbF9uYW1lLCBpbnQgYWxsb3dfcXVhbG5hbWUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBqOwotICAgIHN0YXRpYyBQeU9iamVjdCAqbW9kdWxlX3N0ciA9IE5VTEw7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICptYWluX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKICAgICBQeU9iamVjdCAqb2JqOworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKKyAgICBfUHlfSURFTlRJRklFUihfX21haW5fXyk7CiAKLSAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIG1vZHVsZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19tb2R1bGVfXyIpOwotICAgICAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKQorICAgIG1vZHVsZV9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChnbG9iYWwsICZQeUlkX19fbW9kdWxlX18pOworCisgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBtYWluX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICBpZiAobWFpbl9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIG1vZHVsZV9uYW1lID0gUHlPYmplY3RfR2V0QXR0cihnbG9iYWwsIG1vZHVsZV9zdHIpOwotCi0gICAgLyogSW4gc29tZSByYXJlIGNhc2VzIChlLmcuLCBib3VuZCBtZXRob2RzIG9mIGV4dGVuc2lvbiB0eXBlcyksCi0gICAgICAgX19tb2R1bGVfXyBjYW4gYmUgTm9uZS4gSWYgaXQgaXMgc28sIHRoZW4gc2VhcmNoIHN5cy5tb2R1bGVzCi0gICAgICAgZm9yIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAgKi8KLSAgICBpZiAobW9kdWxlX25hbWUgPT0gUHlfTm9uZSkgewotICAgICAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOwotICAgICAgICBnb3RvIHNlYXJjaDsKLSAgICB9Ci0KLSAgICBpZiAobW9kdWxlX25hbWUpIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwotICAgIH0KLSAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIEluIHNvbWUgcmFyZSBjYXNlcyAoZS5nLiwgYm91bmQgbWV0aG9kcyBvZiBleHRlbnNpb24gdHlwZXMpLAorICAgICAgICAgICBfX21vZHVsZV9fIGNhbiBiZSBOb25lLiBJZiBpdCBpcyBzbywgdGhlbiBzZWFyY2ggc3lzLm1vZHVsZXMgZm9yCisgICAgICAgICAgIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAqLworICAgICAgICBpZiAobW9kdWxlX25hbWUgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKKyAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOworICAgIH0KKyAgICBhc3NlcnQobW9kdWxlX25hbWUgPT0gTlVMTCk7CiAKLSAgc2VhcmNoOgotICAgIG1vZHVsZXNfZGljdCA9IFB5U3lzX0dldE9iamVjdCgibW9kdWxlcyIpOwotICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkKKyAgICBtb2R1bGVzX2RpY3QgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfbW9kdWxlcyk7CisgICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5tb2R1bGVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGkgPSAwOwotICAgIG1vZHVsZV9uYW1lID0gTlVMTDsKICAgICB3aGlsZSAoKGogPSBQeURpY3RfTmV4dChtb2R1bGVzX2RpY3QsICZpLCAmbW9kdWxlX25hbWUsICZtb2R1bGUpKSkgewotICAgICAgICBpZiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKG1vZHVsZV9uYW1lLCBtYWluX3N0ciwgUHlfRVEpID09IDEpCisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVVuaWNvZGVfUmljaENvbXBhcmUoCisgICAgICAgICAgICBtb2R1bGVfbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pLCBQeV9FUSk7CisgICAgICAgIGludCBpc19lcXVhbCA9IChyZXN1bHQgPT0gUHlfVHJ1ZSk7CisgICAgICAgIGFzc2VydChQeUJvb2xfQ2hlY2socmVzdWx0KSk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICBpZiAoaXNfZXF1YWwpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgb2JqID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgb2JqID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIGFsbG93X3F1YWxuYW1lKTsKICAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAob2JqICE9IGdsb2JhbCkgeworICAgICAgICBpZiAob2JqID09IGdsb2JhbCkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiAgICAgICAgIH0KLQogICAgICAgICBQeV9ERUNSRUYob2JqKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyogSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCB1c2UgX19tYWluX18uICovCi0gICAgaWYgKCFqKSB7Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gbWFpbl9zdHI7Ci0gICAgfQotCisgICAgbW9kdWxlX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX21haW5fXyk7CiAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiB9CkBAIC0xNDcyLDQ2ICsxNjA3LDU4IEBACiBzdGF0aWMgaW50CiBzYXZlX2Jvb2woUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqYnVmWzJdID0geyBGQUxTRSwgVFJVRSB9OwotICAgIGNvbnN0IGNoYXIgbGVuWzJdID0ge3NpemVvZihGQUxTRSkgLSAxLCBzaXplb2YoVFJVRSkgLSAxfTsKLSAgICBpbnQgcCA9IChvYmogPT0gUHlfVHJ1ZSk7Ci0KICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gMikgewotICAgICAgICBjb25zdCBjaGFyIGJvb2xfb3AgPSBwID8gTkVXVFJVRSA6IE5FV0ZBTFNFOworICAgICAgICBjb25zdCBjaGFyIGJvb2xfb3AgPSAob2JqID09IFB5X1RydWUpID8gTkVXVFJVRSA6IE5FV0ZBTFNFOwogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmJvb2xfb3AsIDEpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZWxzZSBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgYnVmW3BdLCBsZW5bcF0pIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCisgICAgZWxzZSB7CisgICAgICAgIC8qIFRoZXNlIGFyZW4ndCBvcGNvZGVzIC0tIHRoZXkncmUgd2F5cyB0byBwaWNrbGUgYm9vbHMgYmVmb3JlIHByb3RvY29sIDIKKyAgICAgICAgICogc28gdGhhdCB1bnBpY2tsZXJzIHdyaXR0ZW4gYmVmb3JlIGJvb2xzIHdlcmUgaW50cm9kdWNlZCB1bnBpY2tsZSB0aGVtCisgICAgICAgICAqIGFzIGludHMsIGJ1dCB1bnBpY2tsZXJzIGFmdGVyIGNhbiByZWNvZ25pemUgdGhhdCBib29scyB3ZXJlIGludGVuZGVkLgorICAgICAgICAgKiBOb3RlIHRoYXQgcHJvdG9jb2wgMiBhZGRlZCBkaXJlY3Qgd2F5cyB0byBwaWNrbGUgYm9vbHMuCisgICAgICAgICAqLworICAgICAgICBjb25zdCBjaGFyICpib29sX3N0ciA9IChvYmogPT0gUHlfVHJ1ZSkgPyAiSTAxXG4iIDogIkkwMFxuIjsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGJvb2xfc3RyLCBzdHJsZW4oYm9vbF9zdHIpKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1zYXZlX2ludChQaWNrbGVyT2JqZWN0ICpzZWxmLCBsb25nIHgpCitzYXZlX2xvbmcoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBjaGFyIHBkYXRhWzMyXTsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IDA7CisgICAgUHlPYmplY3QgKnJlcHIgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBsb25nIHZhbDsKKyAgICBpbnQgc3RhdHVzID0gMDsKIAotICAgIGlmICghc2VsZi0+YmluCi0jaWYgU0laRU9GX0xPTkcgPiA0Ci0gICAgICAgIHx8IHggPiAweDdmZmZmZmZmTCB8fCB4IDwgLTB4ODAwMDAwMDBMCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0gICAgICAgIC8qIFRleHQtbW9kZSBwaWNrbGUsIG9yIGxvbmcgdG9vIGJpZyB0byBmaXQgaW4gdGhlIDQtYnl0ZQotICAgICAgICAgKiBzaWduZWQgQklOSU5UIGZvcm1hdDogIHN0b3JlIGFzIGEgc3RyaW5nLgotICAgICAgICAgKi8KLSAgICAgICAgcGRhdGFbMF0gPSBMT05HOyAgICAgICAgLyogdXNlIExPTkcgZm9yIGNvbnNpc3RlbmN5IHdpdGggcGlja2xlLnB5ICovCi0gICAgICAgIFB5T1Nfc25wcmludGYocGRhdGEgKyAxLCBzaXplb2YocGRhdGEpIC0gMSwgIiVsZExcbiIsIHgpOwotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIHN0cmxlbihwZGF0YSkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICBjb25zdCBjaGFyIGxvbmdfb3AgPSBMT05HOworCisgICAgdmFsPSBQeUxvbmdfQXNMb25nKG9iaik7CisgICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIC8qIG91dCBvZiByYW5nZSBmb3IgaW50IHBpY2tsaW5nICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBCaW5hcnkgcGlja2xlIGFuZCB4IGZpdHMgaW4gYSBzaWduZWQgNC1ieXRlIGludC4gKi8KLSAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoeCAmIDB4ZmYpOwotICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiA4KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMjQpICYgMHhmZik7CisgICAgZWxzZSBpZiAoc2VsZi0+YmluICYmCisgICAgICAgICAgICAgKHNpemVvZihsb25nKSA8PSA0IHx8CisgICAgICAgICAgICAgICh2YWwgPD0gMHg3ZmZmZmZmZkwgJiYgdmFsID49ICgtMHg3ZmZmZmZmZkwgLSAxKSkpKSB7CisgICAgICAgIC8qIHJlc3VsdCBmaXRzIGluIGEgc2lnbmVkIDQtYnl0ZSBpbnRlZ2VyLiAKKworICAgICAgICAgICBOb3RlOiB3ZSBjYW4ndCB1c2UgLTB4ODAwMDAwMDBMIGluIHRoZSBhYm92ZSBjb25kaXRpb24gYmVjYXVzZSBzb21lCisgICAgICAgICAgIGNvbXBpbGVycyAoZS5nLiwgTVNWQykgd2lsbCBwcm9tb3RlIDB4ODAwMDAwMDBMIHRvIGFuIHVuc2lnbmVkIHR5cGUKKyAgICAgICAgICAgYmVmb3JlIGFwcGx5aW5nIHRoZSB1bmFyeSBtaW51cyB3aGVuIHNpemVvZihsb25nKSA8PSA0LiBUaGUKKyAgICAgICAgICAgcmVzdWx0aW5nIHZhbHVlIHN0YXlzIHVuc2lnbmVkIHdoaWNoIGlzIGNvbW1vbmx5IG5vdCB3aGF0IHdlIHdhbnQsCisgICAgICAgICAgIHNvIE1TVkMgaGFwcGlseSB3YXJucyB1cyBhYm91dCBpdC4gIEhvd2V2ZXIsIHRoYXQgcmVzdWx0IHdvdWxkIGhhdmUKKyAgICAgICAgICAgYmVlbiBmaW5lIGJlY2F1c2Ugd2UgZ3VhcmQgZm9yIHNpemVvZihsb25nKSA8PSA0IHdoaWNoIHR1cm5zIHRoZQorICAgICAgICAgICBjb25kaXRpb24gdHJ1ZSBpbiB0aGF0IHBhcnRpY3VsYXIgY2FzZS4gKi8KKyAgICAgICAgY2hhciBwZGF0YVszMl07CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKworICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgJiAweGZmKTsKKyAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHZhbCA+PiA4KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDI0KSAmIDB4ZmYpOwogCiAgICAgICAgIGlmICgocGRhdGFbNF0gPT0gMCkgJiYgKHBkYXRhWzNdID09IDApKSB7CiAgICAgICAgICAgICBpZiAocGRhdGFbMl0gPT0gMCkgewpAQCAtMTUzMCwzMSArMTY3NywxMCBAQAogCiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhdmVfbG9uZyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgbG9uZyB2YWwgPSBQeUxvbmdfQXNMb25nKG9iaik7Ci0gICAgaW50IHN0YXR1cyA9IDA7Ci0KLSAgICBjb25zdCBjaGFyIGxvbmdfb3AgPSBMT05HOwotCi0gICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIC8qIG91dCBvZiByYW5nZSBmb3IgaW50IHBpY2tsaW5nICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgfQotICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgaWYgKHZhbCA8PSAweDdmZmZmZmZmTCAmJiB2YWwgPj0gLTB4ODAwMDAwMDBMKQotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gc2F2ZV9pbnQoc2VsZiwgdmFsKTsKLQogICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7CiAgICAgICAgIC8qIExpbmVhci10aW1lIHBpY2tsaW5nLiAqLwogICAgICAgICBzaXplX3QgbmJpdHM7CkBAIC0xNzM5LDIwICsxODY1LDE3IEBACiAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTygpKSIsIChQeU9iamVjdCopJlB5Qnl0ZXNfVHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKmxhdGluMSA9IE5VTEw7CiAgICAgICAgICAgICBQeU9iamVjdCAqdW5pY29kZV9zdHIgPQogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoUHlCeXRlc19BU19TVFJJTkcob2JqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUob2JqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiKTsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKGxhdGluMSk7CisKICAgICAgICAgICAgIGlmICh1bmljb2RlX3N0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChsYXRpbjEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJsYXRpbjEiKTsKLSAgICAgICAgICAgICAgICBpZiAobGF0aW4xID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE9PKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3NfZW5jb2RlLCB1bmljb2RlX3N0ciwgbGF0aW4xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzX2VuY29kZSwgdW5pY29kZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2xhdGluMSkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGVfc3RyKTsKICAgICAgICAgfQogCkBAIC0xNzY2LDE0ICsxODg5LDE0IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgIGNoYXIgaGVhZGVyWzVdOworICAgICAgICBjaGFyIGhlYWRlcls5XTsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAKICAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUob2JqKTsKICAgICAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIGlmIChzaXplIDwgMjU2KSB7CisgICAgICAgIGlmIChzaXplIDw9IDB4ZmYpIHsKICAgICAgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTkJZVEVTOwogICAgICAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpc2l6ZTsKICAgICAgICAgICAgIGxlbiA9IDI7CkBAIC0xNzg2LDYgKzE5MDksMTEgQEAKICAgICAgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgaGVhZGVyWzBdID0gQklOQllURVM4OworICAgICAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgICAgIGxlbiA9IDg7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIGJ5dGVzIG9iamVjdCBsYXJnZXIgdGhhbiA0IEdpQiIpOwpAQCAtMTg3Myw2MyArMjAwMSwxMDYgQEAKIH0KIAogc3RhdGljIGludAotc2F2ZV91bmljb2RlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit3cml0ZV91dGY4KFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKmRhdGEsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgUHlPYmplY3QgKmVuY29kZWQgPSBOVUxMOworICAgIGNoYXIgaGVhZGVyWzldOworICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKHNlbGYtPmJpbikgewotICAgICAgICBjaGFyIHBkYXRhWzVdOwotCi0gICAgICAgIGVuY29kZWQgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgInV0Zi04IiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCk7Ci0gICAgICAgIGlmIChzaXplID4gMHhmZmZmZmZmZkwpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplIGEgc3RyaW5nIGxhcmdlciB0aGFuIDQgR2lCIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOyAgICAgICAgICAvKiBzdHJpbmcgdG9vIGxhcmdlICovCi0gICAgICAgIH0KLQotICAgICAgICBwZGF0YVswXSA9IEJJTlVOSUNPREU7Ci0gICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gOCkgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOwotCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgNSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKHNpemUgPD0gMHhmZiAmJiBzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGxlbiA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPD0gMHhmZmZmZmZmZlVMKSB7CisgICAgICAgIGhlYWRlclswXSA9IEJJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGhlYWRlclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiA4KSAmIDB4ZmYpOworICAgICAgICBoZWFkZXJbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgbGVuID0gNTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBoZWFkZXJbMF0gPSBCSU5VTklDT0RFODsKKyAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgbGVuID0gOTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBzdHJpbmcgbGFyZ2VyIHRoYW4gNEdpQiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGhlYWRlciwgbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgZGF0YSwgc2l6ZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVfdW5pY29kZV9iaW5hcnkoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmRhdGE7CisgICAgaW50IHI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShvYmosICZzaXplKTsKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gd3JpdGVfdXRmOChzZWxmLCBkYXRhLCBzaXplKTsKKworICAgIC8qIElzc3VlICM4MzgzOiBmb3Igc3RyaW5ncyB3aXRoIGxvbmUgc3Vycm9nYXRlcywgZmFsbGJhY2sgb24gdGhlCisgICAgICAgInN1cnJvZ2F0ZXBhc3MiIGVycm9yIGhhbmRsZXIuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhvYmosICJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIik7CisgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgciA9IHdyaXRlX3V0Zjgoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSk7CisgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgIHJldHVybiByOworfQorCitzdGF0aWMgaW50CitzYXZlX3VuaWNvZGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBpZiAoc2VsZi0+YmluKSB7CisgICAgICAgIGlmICh3cml0ZV91bmljb2RlX2JpbmFyeShzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOworICAgICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgICAgIGNvbnN0IGNoYXIgdW5pY29kZV9vcCA9IFVOSUNPREU7CiAKICAgICAgICAgZW5jb2RlZCA9IHJhd191bmljb2RlX2VzY2FwZShvYmopOwogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnVuaWNvZGVfb3AsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmdW5pY29kZV9vcCwgMSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKTsKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKIAogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgcmV0dXJuIDA7Ci0KLSAgZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlbmNvZGVkKTsKLSAgICByZXR1cm4gLTE7CiB9CiAKIC8qIEEgaGVscGVyIGZvciBzYXZlX3R1cGxlLiAgUHVzaCB0aGUgbGVuIGVsZW1lbnRzIGluIHR1cGxlIHQgb24gdGhlIHN0YWNrLiAqLwpAQCAtMjU1NywzNCArMjcyOCwyNTAgQEAKIH0KIAogc3RhdGljIGludAorc2F2ZV9zZXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IHNldF9zaXplLCBwcG9zID0gMDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKworICAgIGNvbnN0IGNoYXIgZW1wdHlfc2V0X29wID0gRU1QVFlfU0VUOworICAgIGNvbnN0IGNoYXIgbWFya19vcCA9IE1BUks7CisgICAgY29uc3QgY2hhciBhZGRpdGVtc19vcCA9IEFERElURU1TOworCisgICAgaWYgKHNlbGYtPnByb3RvIDwgNCkgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAgICAgICAgaXRlbXMgPSBQeVNlcXVlbmNlX0xpc3Qob2JqKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTyhPKSkiLCAoUHlPYmplY3QqKSZQeVNldF9UeXBlLCBpdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgICAgIGlmIChyZWR1Y2VfdmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8qIHNhdmVfcmVkdWNlKCkgd2lsbCBtZW1vaXplIHRoZSBvYmplY3QgYXV0b21hdGljYWxseS4gKi8KKyAgICAgICAgc3RhdHVzID0gc2F2ZV9yZWR1Y2Uoc2VsZiwgcmVkdWNlX3ZhbHVlLCBvYmopOworICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmVtcHR5X3NldF9vcCwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNldF9zaXplID0gUHlTZXRfR0VUX1NJWkUob2JqKTsKKyAgICBpZiAoc2V0X3NpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAvKiBub3RoaW5nIHRvIGRvICovCisKKyAgICAvKiBXcml0ZSBpbiBiYXRjaGVzIG9mIEJBVENIU0laRS4gKi8KKyAgICBkbyB7CisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd2hpbGUgKF9QeVNldF9OZXh0RW50cnkob2JqLCAmcHBvcywgJml0ZW0sICZoYXNoKSkgeworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgaXRlbSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICgrK2kgPT0gQkFUQ0hTSVpFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmYWRkaXRlbXNfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKFB5U2V0X0dFVF9TSVpFKG9iaikgIT0gc2V0X3NpemUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgInNldCBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoaSA9PSBCQVRDSFNJWkUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhdmVfZnJvemVuc2V0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKml0ZXI7CisKKyAgICBjb25zdCBjaGFyIG1hcmtfb3AgPSBNQVJLOworICAgIGNvbnN0IGNoYXIgZnJvemVuc2V0X29wID0gRlJPWkVOU0VUOworCisgICAgaWYgKHNlbGYtPmZhc3QgJiYgIWZhc3Rfc2F2ZV9lbnRlcihzZWxmLCBvYmopKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoc2VsZi0+cHJvdG8gPCA0KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFB5U2VxdWVuY2VfTGlzdChvYmopOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE8pKSIsIChQeU9iamVjdCopJlB5RnJvemVuU2V0X1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICBpZiAocmVkdWNlX3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKiBzYXZlX3JlZHVjZSgpIHdpbGwgbWVtb2l6ZSB0aGUgb2JqZWN0IGF1dG9tYXRpY2FsbHkuICovCisgICAgICAgIHN0YXR1cyA9IHNhdmVfcmVkdWNlKHNlbGYsIHJlZHVjZV92YWx1ZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKHJlZHVjZV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtYXJrX29wLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7CisgICAgaWYgKGl0ZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgaXRlbSA9IFB5SXRlcl9OZXh0KGl0ZXIpOworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2F2ZShzZWxmLCBpdGVtLCAwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorICAgIFB5X0RFQ1JFRihpdGVyKTsKKworICAgIC8qIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uICovCisgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CisgICAgICAgIGNvbnN0IGNoYXIgcG9wX21hcmtfb3AgPSBQT1BfTUFSSzsKKworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9tYXJrX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZmcm96ZW5zZXRfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZpeF9pbXBvcnRzKFB5T2JqZWN0ICoqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICoqZ2xvYmFsX25hbWUpCit7CisgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeU9iamVjdCAqaXRlbTsKKworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18zdG8yLCBrZXkpOworICAgIFB5X0RFQ1JFRihrZXkpOworICAgIGlmIChpdGVtKSB7CisgICAgICAgIFB5T2JqZWN0ICpmaXhlZF9tb2R1bGVfbmFtZTsKKyAgICAgICAgUHlPYmplY3QgKmZpeGVkX2dsb2JhbF9uYW1lOworCisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSAyLXR1cGxlcywgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZml4ZWRfbW9kdWxlX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDApOworICAgICAgICBmaXhlZF9nbG9iYWxfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMSk7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGZpeGVkX21vZHVsZV9uYW1lKSB8fAorICAgICAgICAgICAgIVB5VW5pY29kZV9DaGVjayhmaXhlZF9nbG9iYWxfbmFtZSkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBwYWlycyBvZiBzdHIsIG5vdCAoJS4yMDBzLCAlLjIwMHMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGZpeGVkX21vZHVsZV9uYW1lKS0+dHBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGZpeGVkX2dsb2JhbF9uYW1lKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBQeV9DTEVBUigqbW9kdWxlX25hbWUpOworICAgICAgICBQeV9DTEVBUigqZ2xvYmFsX25hbWUpOworICAgICAgICBQeV9JTkNSRUYoZml4ZWRfbW9kdWxlX25hbWUpOworICAgICAgICBQeV9JTkNSRUYoZml4ZWRfZ2xvYmFsX25hbWUpOworICAgICAgICAqbW9kdWxlX25hbWUgPSBmaXhlZF9tb2R1bGVfbmFtZTsKKyAgICAgICAgKmdsb2JhbF9uYW1lID0gZml4ZWRfZ2xvYmFsX25hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihpbXBvcnRfbWFwcGluZ18zdG8yLCAqbW9kdWxlX25hbWUpOworICAgIGlmIChpdGVtKSB7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHZhbHVlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBzdHJpbmdzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUigqbW9kdWxlX25hbWUpOworICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICptb2R1bGVfbmFtZSA9IGl0ZW07CisgICAgfQorICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBzYXZlX2dsb2JhbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdGF0aWMgUHlPYmplY3QgKm5hbWVfc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNsczsKICAgICBpbnQgc3RhdHVzID0gMDsKKyAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19xdWFsbmFtZV9fKTsKIAogICAgIGNvbnN0IGNoYXIgZ2xvYmFsX29wID0gR0xPQkFMOwogCi0gICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKLSAgICAgICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQogICAgIGlmIChuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKICAgICAgICAgZ2xvYmFsX25hbWUgPSBuYW1lOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFsX25hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZ2xvYmFsX25hbWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZV9zdHIpOwotICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3F1YWxuYW1lX18pOworICAgICAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdsb2JhbF9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fbmFtZV9fKTsKKyAgICAgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgZ2xvYmFsX25hbWUpOworICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTI2MDMsMTEgKzI5OTAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgIG9iaiwgbW9kdWxlX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBjbHMgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgIGNscyA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBhdHRyaWJ1dGUgbG9va3VwICVTLiVTIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBhdHRyaWJ1dGUgbG9va3VwICVTIG9uICVTIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICBvYmosIGdsb2JhbF9uYW1lLCBtb2R1bGVfbmFtZSk7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjbHMgIT0gb2JqKSB7CkBAIC0yNjgxLDEyMCArMzA2OCw4NCBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIEdlbmVyYXRlIGEgbm9ybWFsIGdsb2JhbCBvcGNvZGUgaWYgd2UgYXJlIHVzaW5nIGEgcGlja2xlCi0gICAgICAgICAgIHByb3RvY29sIDw9IDIsIG9yIGlmIHRoZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlCi0gICAgICAgICAgIGV4dGVuc2lvbiByZWdpc3RyeS4gKi8KLSAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7Ci0gICAgICAgIFB5T2JqZWN0ICooKnVuaWNvZGVfZW5jb2RlcikoUHlPYmplY3QgKik7Ci0KICAgZ2VuX2dsb2JhbDoKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZnbG9iYWxfb3AsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyIHN0YWNrX2dsb2JhbF9vcCA9IFNUQUNLX0dMT0JBTDsKIAotICAgICAgICAvKiBTaW5jZSBQeXRob24gMy4wIG5vdyBzdXBwb3J0cyBub24tQVNDSUkgaWRlbnRpZmllcnMsIHdlIGVuY29kZSBib3RoCi0gICAgICAgICAgIHRoZSBtb2R1bGUgbmFtZSBhbmQgdGhlIGdsb2JhbCBuYW1lIHVzaW5nIFVURi04LiBXZSBkbyBzbyBvbmx5IHdoZW4KLSAgICAgICAgICAgd2UgYXJlIHVzaW5nIHRoZSBwaWNrbGUgcHJvdG9jb2wgbmV3ZXIgdGhhbiB2ZXJzaW9uIDMuIFRoaXMgaXMgdG8KLSAgICAgICAgICAgZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBVbnBpY2tsZXIgcnVubmluZyBvbiBQeXRob24gMi54LiAqLwotICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gMykgewotICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZzsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIG1vZHVsZV9uYW1lLCAwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIGdsb2JhbF9uYW1lLCAwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZzdGFja19nbG9iYWxfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8qIEdlbmVyYXRlIGEgbm9ybWFsIGdsb2JhbCBvcGNvZGUgaWYgd2UgYXJlIHVzaW5nIGEgcGlja2xlCisgICAgICAgICAgICAgICBwcm90b2NvbCA8IDQsIG9yIGlmIHRoZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlCisgICAgICAgICAgICAgICBleHRlbnNpb24gcmVnaXN0cnkuICovCisgICAgICAgICAgICBQeU9iamVjdCAqZW5jb2RlZDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICooKnVuaWNvZGVfZW5jb2RlcikoUHlPYmplY3QgKik7CiAKLSAgICAgICAgLyogRm9yIHByb3RvY29sIDwgMyBhbmQgaWYgdGhlIHVzZXIgZGlkbid0IHJlcXVlc3QgYWdhaW5zdCBkb2luZyBzbywKLSAgICAgICAgICAgd2UgY29udmVydCBtb2R1bGUgbmFtZXMgdG8gdGhlIG9sZCAyLnggbW9kdWxlIG5hbWVzLiAqLwotICAgICAgICBpZiAoc2VsZi0+Zml4X2ltcG9ydHMpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgICAgICAgICBQeU9iamVjdCAqaXRlbTsKLQotICAgICAgICAgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7Ci0gICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmdsb2JhbF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IobmFtZV9tYXBwaW5nXzN0bzIsIGtleSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5VHVwbGVfR0VUX1NJWkUoaXRlbSkgIT0gMikgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIDItdHVwbGVzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworCisgICAgICAgICAgICAvKiBGb3IgcHJvdG9jb2wgPCAzIGFuZCBpZiB0aGUgdXNlciBkaWRuJ3QgcmVxdWVzdCBhZ2FpbnN0IGRvaW5nCisgICAgICAgICAgICAgICBzbywgd2UgY29udmVydCBtb2R1bGUgbmFtZXMgdG8gdGhlIG9sZCAyLnggbW9kdWxlIG5hbWVzLiAqLworICAgICAgICAgICAgaWYgKHNlbGYtPnByb3RvIDwgMyAmJiBzZWxmLT5maXhfaW1wb3J0cykgeworICAgICAgICAgICAgICAgIGlmIChmaXhfaW1wb3J0cygmbW9kdWxlX25hbWUsICZnbG9iYWxfbmFtZSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0NMRUFSKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihnbG9iYWxfbmFtZSk7Ci0gICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDApOwotICAgICAgICAgICAgICAgIGdsb2JhbF9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAxKTsKLSAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhtb2R1bGVfbmFtZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgIVB5VW5pY29kZV9DaGVjayhnbG9iYWxfbmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBwYWlycyBvZiBzdHIsIG5vdCAoJS4yMDBzLCAlLjIwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobW9kdWxlX25hbWUpLT50cF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShnbG9iYWxfbmFtZSktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlX25hbWUpOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihnbG9iYWxfbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKGltcG9ydF9tYXBwaW5nXzN0bzIsIG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHZhbHVlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHN0cmluZ3MsIG5vdCAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0NMRUFSKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSA9IGl0ZW07Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKKyAgICAgICAgICAgIC8qIFNpbmNlIFB5dGhvbiAzLjAgbm93IHN1cHBvcnRzIG5vbi1BU0NJSSBpZGVudGlmaWVycywgd2UgZW5jb2RlCisgICAgICAgICAgICAgICBib3RoIHRoZSBtb2R1bGUgbmFtZSBhbmQgdGhlIGdsb2JhbCBuYW1lIHVzaW5nIFVURi04LiBXZSBkbyBzbworICAgICAgICAgICAgICAgb25seSB3aGVuIHdlIGFyZSB1c2luZyB0aGUgcGlja2xlIHByb3RvY29sIG5ld2VyIHRoYW4gdmVyc2lvbgorICAgICAgICAgICAgICAgMy4gVGhpcyBpcyB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFVucGlja2xlciBydW5uaW5nCisgICAgICAgICAgICAgICBvbiBQeXRob24gMi54LiAqLworICAgICAgICAgICAgaWYgKHNlbGYtPnByb3RvID09IDMpIHsKKyAgICAgICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmNvZGVkID0gdW5pY29kZV9lbmNvZGVyKG1vZHVsZV9uYW1lKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgbW9kdWxlIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBzZWxmLT5wcm90byk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KLSAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2Rlcihtb2R1bGVfbmFtZSk7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgbW9kdWxlIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBtb2R1bGVfbmFtZSwgc2VsZi0+cHJvdG8pOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZihfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICAvKiBTYXZlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuICovCi0gICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIoZ2xvYmFsX25hbWUpOwotICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlIGdsb2JhbCBpZGVudGlmaWVyICclUycgdXNpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKKyAgICAgICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KKyAgICAgICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIoZ2xvYmFsX25hbWUpOworICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBnbG9iYWwgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAgICAgLyogTWVtb2l6ZSB0aGUgb2JqZWN0LiAqLwogICAgICAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjgxMiwzMCArMzE2Myw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfZWxsaXBzaXMoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7Ci0gICAgaW50IHJlczsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXMgPSBzYXZlX2dsb2JhbChzZWxmLCBQeV9FbGxpcHNpcywgc3RyKTsKLSAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci1zYXZlX25vdGltcGxlbWVudGVkKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOb3RJbXBsZW1lbnRlZCIpOwotICAgIGludCByZXM7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgUHlfTm90SW1wbGVtZW50ZWQsIHN0cik7Ci0gICAgUHlfREVDUkVGKHN0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAogc2F2ZV9wZXJzKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpmdW5jKQogewogICAgIFB5T2JqZWN0ICpwaWQgPSBOVUxMOwpAQCAtMjg5MywxNCArMzIyMCw5IEBACiBnZXRfY2xhc3MoUHlPYmplY3QgKm9iaikKIHsKICAgICBQeU9iamVjdCAqY2xzOwotICAgIHN0YXRpYyBQeU9iamVjdCAqc3RyX2NsYXNzOworICAgIF9QeV9JREVOVElGSUVSKF9fY2xhc3NfXyk7CiAKLSAgICBpZiAoc3RyX2NsYXNzID09IE5VTEwpIHsKLSAgICAgICAgc3RyX2NsYXNzID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY2xhc3NfXyIpOwotICAgICAgICBpZiAoc3RyX2NsYXNzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgY2xzID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHN0cl9jbGFzcyk7CisgICAgY2xzID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fY2xhc3NfXyk7CiAgICAgaWYgKGNscyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTI5MjMsMTIgKzMyNDUsMTIgQEAKICAgICBQeU9iamVjdCAqbGlzdGl0ZW1zID0gUHlfTm9uZTsKICAgICBQeU9iamVjdCAqZGljdGl0ZW1zID0gUHlfTm9uZTsKICAgICBQeV9zc2l6ZV90IHNpemU7Ci0KLSAgICBpbnQgdXNlX25ld29iaiA9IHNlbGYtPnByb3RvID49IDI7CisgICAgaW50IHVzZV9uZXdvYmogPSAwLCB1c2VfbmV3b2JqX2V4ID0gMDsKIAogICAgIGNvbnN0IGNoYXIgcmVkdWNlX29wID0gUkVEVUNFOwogICAgIGNvbnN0IGNoYXIgYnVpbGRfb3AgPSBCVUlMRDsKICAgICBjb25zdCBjaGFyIG5ld29ial9vcCA9IE5FV09CSjsKKyAgICBjb25zdCBjaGFyIG5ld29ial9leF9vcCA9IE5FV09CSl9FWDsKIAogICAgIHNpemUgPSBQeVR1cGxlX1NpemUoYXJncyk7CiAgICAgaWYgKHNpemUgPCAyIHx8IHNpemUgPiA1KSB7CkBAIC0yOTczLDM0ICszMjk1LDc1IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICAvKiBQcm90b2NvbCAyIHNwZWNpYWwgY2FzZTogaWYgY2FsbGFibGUncyBuYW1lIGlzIF9fbmV3b2JqX18sIHVzZQotICAgICAgIE5FV09CSi4gKi8KLSAgICBpZiAodXNlX25ld29iaikgewotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKm5ld29ial9zdHIgPSBOVUxMLCAqbmFtZV9zdHIgPSBOVUxMOworICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7CiAgICAgICAgIFB5T2JqZWN0ICpuYW1lOworICAgICAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CiAKLSAgICAgICAgaWYgKG5ld29ial9zdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV3b2JqX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25ld29ial9fIik7Ci0gICAgICAgICAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOwotICAgICAgICAgICAgaWYgKG5ld29ial9zdHIgPT0gTlVMTCB8fCBuYW1lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIG5hbWUgPSBQeU9iamVjdF9HZXRBdHRyKGNhbGxhYmxlLCBuYW1lX3N0cik7CisgICAgICAgIG5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGNhbGxhYmxlLCAmUHlJZF9fX25hbWVfXyk7CiAgICAgICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHVzZV9uZXdvYmogPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9leF9fKTsKKyAgICAgICAgICAgIHVzZV9uZXdvYmpfZXggPSBQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZSgKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19uZXdvYmpfZXhfXykpID09IDA7CisgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKICAgICAgICAgICAgIHVzZV9uZXdvYmogPSBQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZShuYW1lLCBuZXdvYmpfc3RyKSA9PSAwOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKAorICAgICAgICAgICAgICAgICAgICBuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX25ld29ial9fKSkgPT0gMDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodXNlX25ld29iaikgeworCisgICAgaWYgKHVzZV9uZXdvYmpfZXgpIHsKKyAgICAgICAgUHlPYmplY3QgKmNsczsKKyAgICAgICAgUHlPYmplY3QgKmFyZ3M7CisgICAgICAgIFB5T2JqZWN0ICprd2FyZ3M7CisKKyAgICAgICAgaWYgKFB5X1NJWkUoYXJndHVwKSAhPSAzKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIG9mIHRoZSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4YWN0bHkgMywgbm90ICV6ZCIsIFB5X1NJWkUoYXJndHVwKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjbHMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMCk7CisgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSBjbGFzcywgbm90ICUuMjAwcyIsIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXJncyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAxKTsKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBpdGVtIGZyb20gTkVXT0JKX0VYIGFyZ3VtZW50IHR1cGxlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhIHR1cGxlLCBub3QgJS4yMDBzIiwgUHlfVFlQRShhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga3dhcmdzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDIpOworICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhrd2FyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkIGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgZGljdCwgbm90ICUuMjAwcyIsIFB5X1RZUEUoa3dhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2F2ZShzZWxmLCBjbHMsIDApIDwgMCB8fAorICAgICAgICAgICAgc2F2ZShzZWxmLCBhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIHNhdmUoc2VsZiwga3dhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsICZuZXdvYmpfZXhfb3AsIDEpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHVzZV9uZXdvYmopIHsKICAgICAgICAgUHlPYmplY3QgKmNsczsKICAgICAgICAgUHlPYmplY3QgKm5ld2FyZ3R1cDsKICAgICAgICAgUHlPYmplY3QgKm9ial9jbGFzczsKQEAgLTMwODQsOCArMzQ0NywyMyBAQAogICAgICAgIHRoZSBjYWxsZXIgZG8gbm90IHdhbnQgdG8gbWVtb2l6ZSB0aGUgb2JqZWN0LiBOb3QgcGFydGljdWxhcmx5IHVzZWZ1bCwKICAgICAgICBidXQgdGhhdCBpcyB0byBtaW1pYyB0aGUgYmVoYXZpb3Igc2F2ZV9yZWR1Y2UoKSBpbiBwaWNrbGUucHkgd2hlbgogICAgICAgIG9iaiBpcyBOb25lLiAqLwotICAgIGlmIChvYmogJiYgbWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAob2JqICE9IE5VTEwpIHsKKyAgICAgICAgLyogSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgICAgIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgICAgICBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLiAqLworICAgICAgICBpZiAoUHlNZW1vVGFibGVfR2V0KHNlbGYtPm1lbW8sIG9iaikpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgcG9wX29wID0gUE9QOworCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9vcCwgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmIChsaXN0aXRlbXMgJiYgYmF0Y2hfbGlzdChzZWxmLCBsaXN0aXRlbXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzExMCw2ICszNDg4LDkgQEAKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlID0gTlVMTDsKICAgICBpbnQgc3RhdHVzID0gMDsKIAorICAgIGlmIChfUGlja2xlcl9PcGNvZGVCb3VuZGFyeShzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBwaWNrbGluZyBhbiBvYmplY3QiKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0zMTM4LDE0ICszNTE5LDYgQEAKICAgICAgICAgc3RhdHVzID0gc2F2ZV9ub25lKHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9Ci0gICAgZWxzZSBpZiAob2JqID09IFB5X0VsbGlwc2lzKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNhdmVfZWxsaXBzaXMoc2VsZiwgb2JqKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmogPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKLSAgICAgICAgc3RhdHVzID0gc2F2ZV9ub3RpbXBsZW1lbnRlZChzZWxmLCBvYmopOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQogICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9GYWxzZSB8fCBvYmogPT0gUHlfVHJ1ZSkgewogICAgICAgICBzdGF0dXMgPSBzYXZlX2Jvb2woc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwpAQCAtMzE4MCw2ICszNTUzLDE0IEBACiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZGljdChzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5U2V0X1R5cGUpIHsKKyAgICAgICAgc3RhdHVzID0gc2F2ZV9zZXQoc2VsZiwgb2JqKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICZQeUZyb3plblNldF9UeXBlKSB7CisgICAgICAgIHN0YXR1cyA9IHNhdmVfZnJvemVuc2V0KHNlbGYsIG9iaik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlMaXN0X1R5cGUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9saXN0KHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTMxOTQsMTYgKzM1NzUsNiBAQAogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09ICZQeUZ1bmN0aW9uX1R5cGUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKLSAgICAgICAgaWYgKHN0YXR1cyA8IDAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQaWNrbGVFcnJvcikpIHsKLSAgICAgICAgICAgIC8qIGZhbGwgYmFjayB0byByZWR1Y2UgKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAmUHlDRnVuY3Rpb25fVHlwZSkgewotICAgICAgICBzdGF0dXMgPSBzYXZlX2dsb2JhbChzZWxmLCBvYmosIE5VTEwpOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCkBAIC0zMjM2LDE4ICszNjA3LDkgQEAKICAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpyZWR1Y2Vfc3RyID0gTlVMTDsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpyZWR1Y2VfZXhfc3RyID0gTlVMTDsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19yZWR1Y2VfXyk7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fcmVkdWNlX2V4X18pOwogCi0gICAgICAgIC8qIENhY2hlIHRoZSBuYW1lIG9mIHRoZSByZWR1Y2UgbWV0aG9kcy4gKi8KLSAgICAgICAgaWYgKHJlZHVjZV9zdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVkdWNlX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JlZHVjZV9fIik7Ci0gICAgICAgICAgICBpZiAocmVkdWNlX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICByZWR1Y2VfZXhfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcmVkdWNlX2V4X18iKTsKLSAgICAgICAgICAgIGlmIChyZWR1Y2VfZXhfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQogCiAgICAgICAgIC8qIFhYWDogSWYgdGhlIF9fcmVkdWNlX18gbWV0aG9kIGlzIGRlZmluZWQsIF9fcmVkdWNlX2V4X18gaXMKICAgICAgICAgICAgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIF9fcmVkdWNlX18uIFdoaWxlIHRoaXMgaXMgY29udmVuaWVudCwgdGhpcwpAQCAtMzI1OCw3ICszNjIwLDcgQEAKICAgICAgICAgICAgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0byBjaGVjayBmb3IgYSBfX3JlZHVjZV9fIG1ldGhvZC4gKi8KIAogICAgICAgICAvKiBDaGVjayBmb3IgYSBfX3JlZHVjZV9leF9fIG1ldGhvZC4gKi8KLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgcmVkdWNlX2V4X3N0cik7CisgICAgICAgIHJlZHVjZV9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcmVkdWNlX2V4X18pOwogICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlPYmplY3QgKnByb3RvOwogICAgICAgICAgICAgcHJvdG8gPSBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+cHJvdG8pOwpAQCAtMzI3Miw3ICszNjM0LDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGEgX19yZWR1Y2VfXyBtZXRob2QuICovCi0gICAgICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCByZWR1Y2Vfc3RyKTsKKyAgICAgICAgICAgIHJlZHVjZV9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcmVkdWNlX18pOwogICAgICAgICAgICAgaWYgKHJlZHVjZV9mdW5jICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeU9iamVjdF9DYWxsKHJlZHVjZV9mdW5jLCBlbXB0eV90dXBsZSwgTlVMTCk7CiAgICAgICAgICAgICB9CkBAIC0zMzA1LDYgKzM2NjcsNyBAQAogICAgICAgICBzdGF0dXMgPSAtMTsKICAgICB9CiAgIGRvbmU6CisKICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKICAgICBQeV9YREVDUkVGKHJlZHVjZV9mdW5jKTsKICAgICBQeV9YREVDUkVGKHJlZHVjZV92YWx1ZSk7CkBAIC0zMzI1LDYgKzM2ODgsOCBAQAogICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcilzZWxmLT5wcm90bzsKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGhlYWRlciwgMikgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkKKyAgICAgICAgICAgIHNlbGYtPmZyYW1pbmcgPSAxOwogICAgIH0KIAogICAgIGlmIChzYXZlKHNlbGYsIG9iaiwgMCkgPCAwIHx8CkBAIC0zMzM0LDE2ICszNjk5LDM1IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihQaWNrbGVyX2NsZWFyX21lbW9fZG9jLAotImNsZWFyX21lbW8oKSAtPiBOb25lLiBDbGVhcnMgdGhlIHBpY2tsZXIncyBcIm1lbW9cIi4iCisvKltjbGluaWNdCisKK19waWNrbGUuUGlja2xlci5jbGVhcl9tZW1vCisKKyAgc2VsZjogUGlja2xlck9iamVjdAorCitDbGVhcnMgdGhlIHBpY2tsZXIncyAibWVtbyIuCisKK1RoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZQorcGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cyBhcmUKK3BpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbgorcmUtdXNpbmcgcGlja2xlcnMuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19fZG9jX18sCisiY2xlYXJfbWVtbygpXG4iCisiQ2xlYXJzIHRoZSBwaWNrbGVyXCdzIFwibWVtb1wiLlxuIgogIlxuIgogIlRoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZVxuIgogInBpY2tsZXIgaGFzIGFscmVhZHkgc2Vlbiwgc28gdGhhdCBzaGFyZWQgb3IgcmVjdXJzaXZlIG9iamVjdHMgYXJlXG4iCiAicGlja2xlZCBieSByZWZlcmVuY2UgYW5kIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuXG4iCiAicmUtdXNpbmcgcGlja2xlcnMuIik7CiAKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSX0NMRUFSX01FTU9fTUVUSE9EREVGICAgIFwKKyAgICB7ImNsZWFyX21lbW8iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW8sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotUGlja2xlcl9jbGVhcl9tZW1vKFBpY2tsZXJPYmplY3QgKnNlbGYpCitfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtbyhQaWNrbGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiA5YzMyYmU3ZTdhMTdmZjgyYTgxYWFlNDA5ZDBkNGY0NjkwMzNhNWIyXSovCiB7CiAgICAgaWYgKHNlbGYtPm1lbW8pCiAgICAgICAgIFB5TWVtb1RhYmxlX0NsZWFyKHNlbGYtPm1lbW8pOwpAQCAtMzM1MSwxNCArMzczNSwyOCBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIoUGlja2xlcl9kdW1wX2RvYywKLSJkdW1wKG9iaikgLT4gTm9uZS4gV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLiIpOworLypbY2xpbmljXQorCitfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgIHNlbGY6IFBpY2tsZXJPYmplY3QKKyAgb2JqOiBvYmplY3QKKyAgLworCitXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19fLAorImR1bXAob2JqKVxuIgorIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBvcGVuIGZpbGUuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyX2R1bXAsIE1FVEhfTywgX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLVBpY2tsZXJfZHVtcChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19waWNrbGVfUGlja2xlcl9kdW1wKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCisvKltjbGluaWMgY2hlY2tzdW06IGI3MmE2OWVjOTg3MzdmYWJmNjZkYWU3YzVhMzIxMDE3OGJkYmQzZTZdKi8KIHsKLSAgICBQeU9iamVjdCAqb2JqOwotCiAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgUGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IChpc3N1ZTM2NjQpLgogICAgICAgIERldmVsb3BlcnMgb2Z0ZW4gZm9yZ2V0IHRvIGNhbGwgX19pbml0X18oKSBpbiB0aGVpciBzdWJjbGFzc2VzLCB3aGljaAogICAgICAgIHdvdWxkIHRyaWdnZXIgYSBzZWdmYXVsdCB3aXRob3V0IHRoaXMgY2hlY2suICovCkBAIC0zMzY5LDkgKzM3NjcsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZHVtcCIsICZvYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zMzg1LDEwICszNzgwLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBQaWNrbGVyX21ldGhvZHNbXSA9IHsKLSAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pUGlja2xlcl9kdW1wLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFBpY2tsZXJfZHVtcF9kb2N9LAotICAgIHsiY2xlYXJfbWVtbyIsIChQeUNGdW5jdGlvbilQaWNrbGVyX2NsZWFyX21lbW8sIE1FVEhfTk9BUkdTLAotICAgICBQaWNrbGVyX2NsZWFyX21lbW9fZG9jfSwKKyAgICBfUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJfQ0xFQVJfTUVNT19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM0MzksMTUgKzM4MzIsNDUgQEAKIH0KIAogCi1QeURvY19TVFJWQVIoUGlja2xlcl9kb2MsCi0iUGlja2xlcihmaWxlLCBwcm90b2NvbD1Ob25lKSIKLSJcbiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5QaWNrbGVyLl9faW5pdF9fCisKKyAgc2VsZjogUGlja2xlck9iamVjdAorICBmaWxlOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1RoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KKworVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUKK2dpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlCitkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvcgorUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QKK3Byb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlCittb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZQorcHJvZHVjZWQuCisKK1RoZSBmaWxlIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZQorYnl0ZXMgYXJndW1lbnQuIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkKK3dyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdAorbWVldHMgdGhpcyBpbnRlcmZhY2UuCisKK0lmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsCitzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX18sCisiX19pbml0X18oZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKICJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uXG4iCiAiXG4iCiAiVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGVcbiIKLSJnaXZlbiBwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0XG4iCi0icHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yXG4iCi0iUHl0aG9uIDMuMC5cbiIKKyJnaXZlbiBwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZVxuIgorImRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yXG4iCisiUHl0aG9uIDMuXG4iCiAiXG4iCiAiU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdFxuIgogInByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlXG4iCkBAIC0zNDYwLDM4ICszODgzLDU2IEBACiAibWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCiAiXG4iCiAiSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgotIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob25cbiIKLSIyLngsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKyJtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLFxuIgorInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLiIpOwogCi1zdGF0aWMgaW50Ci1QaWNrbGVyX2luaXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJfX19JTklUX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9faW5pdF9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9fX2luaXRfXywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CiAgICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKnByb3RvX29iaiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfE9wOl9faW5pdF9fIiwgX2tleXdvcmRzLAorICAgICAgICAmZmlsZSwgJnByb3RvY29sLCAmZml4X2ltcG9ydHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX2ltcGwoKFBpY2tsZXJPYmplY3QgKilzZWxmLCBmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCisvKltjbGluaWMgY2hlY2tzdW06IGM5OWZmNDE3YmQ3MDNhNzRhZmZjNGI3MDgxNjdlNTZlMTM1ZTg5NjldKi8KK3sKICAgICBfUHlfSURFTlRJRklFUihwZXJzaXN0ZW50X2lkKTsKICAgICBfUHlfSURFTlRJRklFUihkaXNwYXRjaF90YWJsZSk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpQaWNrbGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZmaWxlLCAmcHJvdG9fb2JqLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICAvKiBJbiBjYXNlIG9mIG11bHRpcGxlIF9faW5pdF9fKCkgY2FsbHMsIGNsZWFyIHByZXZpb3VzIGNvbnRlbnQuICovCiAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwpCiAgICAgICAgICh2b2lkKVBpY2tsZXJfY2xlYXIoc2VsZik7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2woc2VsZiwgcHJvdG9fb2JqLCBmaXhfaW1wb3J0cykgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHNlbGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChfUGlja2xlcl9TZXRPdXRwdXRTdHJlYW0oc2VsZiwgZmlsZSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbWVtbyBhbmQgb3V0cHV0X2J1ZmZlciBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBfUGlja2xlcl9OZXcgKi8KICAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7CiAgICAgICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKICAgICAgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKICAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CkBAIC0zNDk5LDcgKzM5NDAsNyBAQAogICAgICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbik7CiAgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBzZWxmLT5hcmcgPSBOVUxMOwpAQCAtMzUxMSwxNCArMzk1MiwyNCBAQAogICAgICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfcGVyc2lzdGVudF9pZCk7CiAgICAgICAgIGlmIChzZWxmLT5wZXJzX2Z1bmMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzZWxmLT5kaXNwYXRjaF90YWJsZSA9IE5VTEw7CiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfZGlzcGF0Y2hfdGFibGUpKSB7CiAgICAgICAgIHNlbGYtPmRpc3BhdGNoX3RhYmxlID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfZGlzcGF0Y2hfdGFibGUpOwogICAgICAgICBpZiAoc2VsZi0+ZGlzcGF0Y2hfdGFibGUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworLyogWFhYIFNsaWdodCBoYWNrIHRvIHNsb3QgYSBDbGluaWMgZ2VuZXJhdGVkIHNpZ25hdHVyZSBpbiB0cF9pbml0LiAqLworc3RhdGljIGludAorUGlja2xlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpZiAoX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fKHNlbGYsIGFyZ3MsIGt3YXJncykgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMzUzOCwyMiArMzk4OSw0OCBAQAogICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7IC8qIFBpY2tsZXIgd2hvc2UgbWVtbyB0YWJsZSB3ZSdyZSBwcm94eWluZy4gKi8KIH0gUGlja2xlck1lbW9Qcm94eU9iamVjdDsKIAotUHlEb2NfU1RSVkFSKHBtcF9jbGVhcl9kb2MsCi0ibWVtby5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuUGlja2xlck1lbW9Qcm94eS5jbGVhcgorCisgIHNlbGY6IFBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXJfX2RvY19fLAorImNsZWFyKClcbiIKKyJSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNsZWFyIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhciwgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG1wX2NsZWFyKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXIoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogNTA3ZjEzOTM4NzIxOTkyZTE3NWEzZTU4YjVhZDAyNjIwMDQ1YTFjY10qLwogewogICAgIGlmIChzZWxmLT5waWNrbGVyLT5tZW1vKQogICAgICAgICBQeU1lbW9UYWJsZV9DbGVhcihzZWxmLT5waWNrbGVyLT5tZW1vKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHBtcF9jb3B5X2RvYywKLSJtZW1vLmNvcHkoKSAtPiBuZXdfbWVtby4gIENvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworLypbY2xpbmljXQorX3BpY2tsZS5QaWNrbGVyTWVtb1Byb3h5LmNvcHkKKworICBzZWxmOiBQaWNrbGVyTWVtb1Byb3h5T2JqZWN0CisKK0NvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfX2RvY19fLAorImNvcHkoKVxuIgorIkNvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5LCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBtcF9jb3B5KFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiA3M2E1MTE3YWIzNTQyOTBlYmRiZTA3YmQwYmY3MjMyZDA5MzZhNjlkXSovCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5TWVtb1RhYmxlICptZW1vOwpAQCAtMzU5MCwxNCArNDA2NywyNyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocG1wX3JlZHVjZV9kb2MsCi0ibWVtby5fX3JlZHVjZV9fKCkuIFBpY2tsaW5nIHN1cHBvcnQuIik7CisvKltjbGluaWNdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuX19yZWR1Y2VfXworCisgIHNlbGY6IFBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworSW1wbGVtZW50IHBpY2tsZSBzdXBwb3J0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19fX2RvY19fLAorIl9fcmVkdWNlX18oKVxuIgorIkltcGxlbWVudCBwaWNrbGUgc3VwcG9ydC4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXywgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfcmVkdWNlKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18oUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogNDBmMGJmN2E5YjE2MWU3NzEzMDY3NGYwNDgxYmRhMGEwMTg0ZGNjZV0qLwogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWUsICpkaWN0X2FyZ3M7Ci0gICAgUHlPYmplY3QgKmNvbnRlbnRzID0gcG1wX2NvcHkoc2VsZik7CisgICAgUHlPYmplY3QgKmNvbnRlbnRzID0gX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHkoc2VsZik7CiAgICAgaWYgKGNvbnRlbnRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zNjIwLDkgKzQxMTAsOSBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgcGlja2xlcnByb3h5X21ldGhvZHNbXSA9IHsKLSAgICB7ImNsZWFyIiwgICAgICAoUHlDRnVuY3Rpb24pcG1wX2NsZWFyLCAgTUVUSF9OT0FSR1MsICBwbXBfY2xlYXJfZG9jfSwKLSAgICB7ImNvcHkiLCAgICAgICAoUHlDRnVuY3Rpb24pcG1wX2NvcHksICAgTUVUSF9OT0FSR1MsICBwbXBfY29weV9kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilwbXBfcmVkdWNlLCBNRVRIX1ZBUkFSR1MsIHBtcF9yZWR1Y2VfZG9jfSwKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0zODM0LDcgKzQzMjQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLAotICAgIFBpY2tsZXJfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KKyAgICBfcGlja2xlX1BpY2tsZXJfX19pbml0X19fX2RvY19fLCAgICAvKnRwX2RvYyovCiAgICAgKHRyYXZlcnNlcHJvYylQaWNrbGVyX3RyYXZlcnNlLCAgICAgLyp0cF90cmF2ZXJzZSovCiAgICAgKGlucXVpcnkpUGlja2xlcl9jbGVhciwgICAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCkBAIC0zODQ5LDcgKzQzMzksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2MpUGlja2xlcl9pbml0LCAgICAgICAgICAgICAvKnRwX2luaXQqLworICAgIFBpY2tsZXJfaW5pdCwgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCkBAIC0zOTU0LDE3ICs0NDQ0LDE1IEBACiAgKiBhcyBhIEMgUHlfc3NpemVfdCwgb3IgLTEgaWYgaXQncyBoaWdoZXIgdGhhbiBQWV9TU0laRV9UX01BWC4KICAqLwogc3RhdGljIFB5X3NzaXplX3QKLWNhbGNfYmluc2l6ZShjaGFyICpieXRlcywgaW50IHNpemUpCitjYWxjX2JpbnNpemUoY2hhciAqYnl0ZXMsIGludCBuYnl0ZXMpCiB7CiAgICAgdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopYnl0ZXM7CisgICAgaW50IGk7CiAgICAgc2l6ZV90IHggPSAwOwogCi0gICAgYXNzZXJ0KHNpemUgPT0gNCk7Ci0KLSAgICB4ID0gIChzaXplX3QpIHNbMF07Ci0gICAgeCB8PSAoc2l6ZV90KSBzWzFdIDw8IDg7Ci0gICAgeCB8PSAoc2l6ZV90KSBzWzJdIDw8IDE2OwotICAgIHggfD0gKHNpemVfdCkgc1szXSA8PCAyNDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJ5dGVzICYmIGkgPCBzaXplb2Yoc2l6ZV90KTsgaSsrKSB7CisgICAgICAgIHggfD0gKHNpemVfdCkgc1tpXSA8PCAoOCAqIGkpOworICAgIH0KIAogICAgIGlmICh4ID4gUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTM5NzgsMjEgKzQ0NjYsMjEgQEAKICAqIG9mIHgtcGxhdGZvcm0gYnVncy4KICAqLwogc3RhdGljIGxvbmcKLWNhbGNfYmluaW50KGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKK2NhbGNfYmluaW50KGNoYXIgKmJ5dGVzLCBpbnQgbmJ5dGVzKQogewogICAgIHVuc2lnbmVkIGNoYXIgKnMgPSAodW5zaWduZWQgY2hhciAqKWJ5dGVzOwotICAgIGludCBpID0gc2l6ZTsKKyAgICBpbnQgaTsKICAgICBsb25nIHggPSAwOwogCi0gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICB4IHw9IChsb25nKXNbaV0gPDwgKGkgKiA4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJ5dGVzOyBpKyspIHsKKyAgICAgICAgeCB8PSAobG9uZylzW2ldIDw8ICg4ICogaSk7CiAgICAgfQogCiAgICAgLyogVW5saWtlIEJJTklOVDEgYW5kIEJJTklOVDIsIEJJTklOVCAobW9yZSBhY2N1cmF0ZWx5IEJJTklOVDQpCiAgICAgICogaXMgc2lnbmVkLCBzbyBvbiBhIGJveCB3aXRoIGxvbmdzIGJpZ2dlciB0aGFuIDQgYnl0ZXMgd2UgbmVlZAogICAgICAqIHRvIGV4dGVuZCBhIEJJTklOVCdzIHNpZ24gYml0IHRvIHRoZSBmdWxsIHdpZHRoLgogICAgICAqLwotICAgIGlmIChTSVpFT0ZfTE9ORyA+IDQgJiYgc2l6ZSA9PSA0KSB7CisgICAgaWYgKFNJWkVPRl9MT05HID4gNCAmJiBuYnl0ZXMgPT0gNCkgewogICAgICAgICB4IHw9IC0oeCAmICgxTCA8PCAzMSkpOwogICAgIH0KIApAQCAtNDE3MSwzNiArNDY1OSwyMyBAQAogCiAgICAgaWYgKChsZW4gPSBfVW5waWNrbGVyX1JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGxlbiA8IDIpCi0gICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKLSAgICBpZiAoKHMgPSBzdHJkdXAocykpID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQorICAgIC8qIFN0cmlwIHRoZSBuZXdsaW5lICovCisgICAgbGVuLS07CiAgICAgLyogU3RyaXAgb3V0ZXJtb3N0IHF1b3RlcyAqLwotICAgIHdoaWxlIChsZW4gPiAwICYmIHNbbGVuIC0gMV0gPD0gJyAnKQotICAgICAgICBsZW4tLTsKLSAgICBpZiAobGVuID4gMSAmJiBzWzBdID09ICciJyAmJiBzW2xlbiAtIDFdID09ICciJykgewotICAgICAgICBzW2xlbiAtIDFdID0gJ1wwJzsKLSAgICAgICAgcCA9IHMgKyAxOwotICAgICAgICBsZW4gLT0gMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobGVuID4gMSAmJiBzWzBdID09ICdcJycgJiYgc1tsZW4gLSAxXSA9PSAnXCcnKSB7Ci0gICAgICAgIHNbbGVuIC0gMV0gPSAnXDAnOworICAgIGlmIChsZW4gPj0gMiAmJiBzWzBdID09IHNbbGVuIC0gMV0gJiYgKHNbMF0gPT0gJ1wnJyB8fCBzWzBdID09ICciJykpIHsKICAgICAgICAgcCA9IHMgKyAxOwogICAgICAgICBsZW4gLT0gMjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGZyZWUocyk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZSIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBTVFJJTkcgb3Bjb2RlIGFyZ3VtZW50IG11c3QgYmUgcXVvdGVkIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAogICAgIC8qIFVzZSB0aGUgUHlCeXRlcyBBUEkgdG8gZGVjb2RlIHRoZSBzdHJpbmcsIHNpbmNlIHRoYXQgaXMgd2hhdCBpcyB1c2VkCiAgICAgICAgdG8gZW5jb2RlLCBhbmQgdGhlbiBjb2VyY2UgdGhlIHJlc3VsdCB0byBVbmljb2RlLiAqLwogICAgIGJ5dGVzID0gUHlCeXRlc19EZWNvZGVFc2NhcGUocCwgbGVuLCBOVUxMLCAwLCBOVUxMKTsKLSAgICBmcmVlKHMpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KGJ5dGVzLCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKQEAgLTQyMTMsMjcgKzQ2ODgsMjcgQEAKIH0KIAogc3RhdGljIGludAotbG9hZF9iaW5ieXRlcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitsb2FkX2NvdW50ZWRfYmluYnl0ZXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbmJ5dGVzKQogewogICAgIFB5T2JqZWN0ICpieXRlczsKLSAgICBQeV9zc2l6ZV90IHg7CisgICAgUHlfc3NpemVfdCBzaXplOwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHggPSBjYWxjX2JpbnNpemUocywgNCk7Ci0gICAgaWYgKHggPCAwKSB7CisgICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCBuYnl0ZXMpOworICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgKLSAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgeCk7CisKKyAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgc2l6ZSk7CiAgICAgaWYgKGJ5dGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDI0Miw3NCArNDcxNywyNyBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2FkX3Nob3J0X2JpbmJ5dGVzKFVucGlja2xlck9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqYnl0ZXM7Ci0gICAgUHlfc3NpemVfdCB4OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHggPSAodW5zaWduZWQgY2hhcilzWzBdOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgeCk7Ci0gICAgaWYgKGJ5dGVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIGJ5dGVzLCAtMSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWxvYWRfYmluc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZikKK2xvYWRfY291bnRlZF9iaW5zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbmJ5dGVzKQogewogICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlfc3NpemVfdCB4OworICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIG5ieXRlcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICB4ID0gY2FsY19iaW5pbnQocywgNCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpOworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJCSU5TVFJJTkcgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIENvbnZlcnQgUHl0aG9uIDIueCBzdHJpbmdzIHRvIHVuaWNvZGUuICovCi0gICAgc3RyID0gUHlVbmljb2RlX0RlY29kZShzLCB4LCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHN0ciwgLTEpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1sb2FkX3Nob3J0X2JpbnN0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeV9zc2l6ZV90IHg7Ci0gICAgY2hhciAqczsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgeCA9ICh1bnNpZ25lZCBjaGFyKXNbMF07Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIENvbnZlcnQgUHl0aG9uIDIueCBzdHJpbmdzIHRvIHVuaWNvZGUuICovCi0gICAgc3RyID0gUHlVbmljb2RlX0RlY29kZShzLCB4LCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKKyAgICBzdHIgPSBQeVVuaWNvZGVfRGVjb2RlKHMsIHNpemUsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOwogICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00MzM4LDI1ICs0NzY2LDIzIEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfYmludW5pY29kZShVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitsb2FkX2NvdW50ZWRfYmludW5pY29kZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCiB7CiAgICAgUHlPYmplY3QgKnN0cjsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgY2hhciAqczsKIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBuYnl0ZXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCA0KTsKKyAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIG5ieXRlcyk7CiAgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLQogICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NDI4LDYgKzQ4NTQsMTcgQEAKIH0KIAogc3RhdGljIGludAorbG9hZF9lbXB0eV9zZXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpzZXQ7CisKKyAgICBpZiAoKHNldCA9IFB5U2V0X05ldyhOVUxMKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHNldCwgLTEpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX2xpc3QoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpsaXN0OwpAQCAtNDQ2OSw2ICs0OTA2LDI5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2xvYWRfZnJvemVuc2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgUHlPYmplY3QgKmZyb3plbnNldDsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICBpZiAoKGkgPSBtYXJrZXIoc2VsZikpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaXRlbXMgPSBQZGF0YV9wb3B0dXBsZShzZWxmLT5zdGFjaywgaSk7CisgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGZyb3plbnNldCA9IFB5RnJvemVuU2V0X05ldyhpdGVtcyk7CisgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICBpZiAoZnJvemVuc2V0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIGZyb3plbnNldCwgLTEpOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogaW5zdGFudGlhdGUoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC00NjIwLDYgKzUwODAsNTcgQEAKIH0KIAogc3RhdGljIGludAorbG9hZF9uZXdvYmpfZXgoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpjbHMsICphcmdzLCAqa3dhcmdzOworICAgIFB5T2JqZWN0ICpvYmo7CisKKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGt3YXJncyk7CisgICAgaWYgKGt3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBhcmdzKTsKKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgY2xzKTsKKyAgICBpZiAoY2xzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihjbHMpOworICAgICAgICBQeUVycl9Gb3JtYXQoVW5waWNrbGluZ0Vycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICJORVdPQkpfRVggY2xhc3MgYXJndW1lbnQgbXVzdCBiZSBhIHR5cGUsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShjbHMpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX25ldyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihjbHMpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5FV09CSl9FWCBjbGFzcyBhcmd1bWVudCBkb2Vzbid0IGhhdmUgX19uZXdfXyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG9iaiA9ICgoUHlUeXBlT2JqZWN0ICopY2xzKS0+dHBfbmV3KChQeVR5cGVPYmplY3QgKiljbHMsIGFyZ3MsIGt3YXJncyk7CisgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihjbHMpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIG9iaiwgLTEpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX2dsb2JhbChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKmdsb2JhbCA9IE5VTEw7CkBAIC00NjU2LDYgKzUxNjcsMzEgQEAKIH0KIAogc3RhdGljIGludAorbG9hZF9zdGFja19nbG9iYWwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpnbG9iYWw7CisgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOworICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZTsKKworICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgZ2xvYmFsX25hbWUpOworICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgbW9kdWxlX25hbWUpOworICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2tFeGFjdChtb2R1bGVfbmFtZSkgfHwKKyAgICAgICAgZ2xvYmFsX25hbWUgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrRXhhY3QoZ2xvYmFsX25hbWUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJTVEFDS19HTE9CQUwgcmVxdWlyZXMgc3RyIik7CisgICAgICAgIFB5X1hERUNSRUYoZ2xvYmFsX25hbWUpOworICAgICAgICBQeV9YREVDUkVGKG1vZHVsZV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBnbG9iYWwgPSBmaW5kX2NsYXNzKHNlbGYsIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisgICAgUHlfREVDUkVGKGdsb2JhbF9uYW1lKTsKKyAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOworICAgIGlmIChnbG9iYWwgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIGdsb2JhbCwgLTEpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX3BlcnNpZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnBpZDsKQEAgLTQ5OTksNiArNTUzNSwxOCBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX21lbW9pemUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKworICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIDFdOworCisgICAgcmV0dXJuIF9VbnBpY2tsZXJfTWVtb1B1dChzZWxmLCBzZWxmLT5tZW1vX2xlbiwgdmFsdWUpOworfQorCitzdGF0aWMgaW50CiBkb19hcHBlbmQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHgpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlOwpAQCAtNTExNCw2ICs1NjYyLDU5IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfYWRkaXRlbXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpzZXQ7CisgICAgUHlfc3NpemVfdCBtYXJrLCBsZW4sIGk7CisKKyAgICBtYXJrID0gIG1hcmtlcihzZWxmKTsKKyAgICBsZW4gPSBQeV9TSVpFKHNlbGYtPnN0YWNrKTsKKyAgICBpZiAobWFyayA+IGxlbiB8fCBtYXJrIDw9IDApCisgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKKyAgICBpZiAobGVuID09IG1hcmspICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgICAgIHJldHVybiAwOworCisgICAgc2V0ID0gc2VsZi0+c3RhY2stPmRhdGFbbWFyayAtIDFdOworCisgICAgaWYgKFB5U2V0X0NoZWNrKHNldCkpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOworICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgIGl0ZW1zID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIG1hcmspOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBzdGF0dXMgPSBfUHlTZXRfVXBkYXRlKHNldCwgaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmFkZF9mdW5jOworICAgICAgICBfUHlfSURFTlRJRklFUihhZGQpOworCisgICAgICAgIGFkZF9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChzZXQsICZQeUlkX2FkZCk7CisgICAgICAgIGlmIChhZGRfZnVuYyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBmb3IgKGkgPSBtYXJrOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlbTsKKworICAgICAgICAgICAgaXRlbSA9IHNlbGYtPnN0YWNrLT5kYXRhW2ldOworICAgICAgICAgICAgcmVzdWx0ID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBhZGRfZnVuYywgaXRlbSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgaSArIDEpOworICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0gbWFyazsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBQeV9TSVpFKHNlbGYtPnN0YWNrKSA9IG1hcms7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfYnVpbGQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpzdGF0ZSwgKmluc3QsICpzbG90c3RhdGU7CkBAIC01MzE0LDE0ICs1OTE1LDM5IEBACiAgICAgcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50Citsb2FkX2ZyYW1lKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBjaGFyICpzOworICAgIFB5X3NzaXplX3QgZnJhbWVfbGVuOworCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgOCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcmFtZV9sZW4gPSBjYWxjX2JpbnNpemUocywgOCk7CisgICAgaWYgKGZyYW1lX2xlbiA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiRlJBTUUgbGVuZ3RoIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBvZiAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgZnJhbWVfbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIFJld2luZCB0byBzdGFydCBvZiBmcmFtZSAqLworICAgIHNlbGYtPm5leHRfcmVhZF9pZHggLT0gZnJhbWVfbGVuOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmVycjsKICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOwogICAgIGNoYXIgKnM7CiAKICAgICBzZWxmLT5udW1fbWFya3MgPSAwOworICAgIHNlbGYtPnByb3RvID0gMDsKICAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykpCiAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCAwKTsKIApAQCAtNTM0NywxMyArNTk3MywxNiBAQAogICAgICAgICBPUF9BUkcoTE9ORzQsIGxvYWRfY291bnRlZF9sb25nLCA0KQogICAgICAgICBPUChGTE9BVCwgbG9hZF9mbG9hdCkKICAgICAgICAgT1AoQklORkxPQVQsIGxvYWRfYmluZmxvYXQpCi0gICAgICAgIE9QKEJJTkJZVEVTLCBsb2FkX2JpbmJ5dGVzKQotICAgICAgICBPUChTSE9SVF9CSU5CWVRFUywgbG9hZF9zaG9ydF9iaW5ieXRlcykKLSAgICAgICAgT1AoQklOU1RSSU5HLCBsb2FkX2JpbnN0cmluZykKLSAgICAgICAgT1AoU0hPUlRfQklOU1RSSU5HLCBsb2FkX3Nob3J0X2JpbnN0cmluZykKKyAgICAgICAgT1BfQVJHKFNIT1JUX0JJTkJZVEVTLCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDEpCisgICAgICAgIE9QX0FSRyhCSU5CWVRFUywgbG9hZF9jb3VudGVkX2JpbmJ5dGVzLCA0KQorICAgICAgICBPUF9BUkcoQklOQllURVM4LCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDgpCisgICAgICAgIE9QX0FSRyhTSE9SVF9CSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDEpCisgICAgICAgIE9QX0FSRyhCSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDQpCiAgICAgICAgIE9QKFNUUklORywgbG9hZF9zdHJpbmcpCiAgICAgICAgIE9QKFVOSUNPREUsIGxvYWRfdW5pY29kZSkKLSAgICAgICAgT1AoQklOVU5JQ09ERSwgbG9hZF9iaW51bmljb2RlKQorICAgICAgICBPUF9BUkcoU0hPUlRfQklOVU5JQ09ERSwgbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUsIDEpCisgICAgICAgIE9QX0FSRyhCSU5VTklDT0RFLCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgNCkKKyAgICAgICAgT1BfQVJHKEJJTlVOSUNPREU4LCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgOCkKICAgICAgICAgT1BfQVJHKEVNUFRZX1RVUExFLCBsb2FkX2NvdW50ZWRfdHVwbGUsIDApCiAgICAgICAgIE9QX0FSRyhUVVBMRTEsIGxvYWRfY291bnRlZF90dXBsZSwgMSkKICAgICAgICAgT1BfQVJHKFRVUExFMiwgbG9hZF9jb3VudGVkX3R1cGxlLCAyKQpAQCAtNTM2MywxMCArNTk5MiwxNSBAQAogICAgICAgICBPUChMSVNULCBsb2FkX2xpc3QpCiAgICAgICAgIE9QKEVNUFRZX0RJQ1QsIGxvYWRfZW1wdHlfZGljdCkKICAgICAgICAgT1AoRElDVCwgbG9hZF9kaWN0KQorICAgICAgICBPUChFTVBUWV9TRVQsIGxvYWRfZW1wdHlfc2V0KQorICAgICAgICBPUChBRERJVEVNUywgbG9hZF9hZGRpdGVtcykKKyAgICAgICAgT1AoRlJPWkVOU0VULCBsb2FkX2Zyb3plbnNldCkKICAgICAgICAgT1AoT0JKLCBsb2FkX29iaikKICAgICAgICAgT1AoSU5TVCwgbG9hZF9pbnN0KQogICAgICAgICBPUChORVdPQkosIGxvYWRfbmV3b2JqKQorICAgICAgICBPUChORVdPQkpfRVgsIGxvYWRfbmV3b2JqX2V4KQogICAgICAgICBPUChHTE9CQUwsIGxvYWRfZ2xvYmFsKQorICAgICAgICBPUChTVEFDS19HTE9CQUwsIGxvYWRfc3RhY2tfZ2xvYmFsKQogICAgICAgICBPUChBUFBFTkQsIGxvYWRfYXBwZW5kKQogICAgICAgICBPUChBUFBFTkRTLCBsb2FkX2FwcGVuZHMpCiAgICAgICAgIE9QKEJVSUxELCBsb2FkX2J1aWxkKQpAQCAtNTM3OCw2ICs2MDEyLDcgQEAKICAgICAgICAgT1AoQklOUFVULCBsb2FkX2JpbnB1dCkKICAgICAgICAgT1AoTE9OR19CSU5QVVQsIGxvYWRfbG9uZ19iaW5wdXQpCiAgICAgICAgIE9QKFBVVCwgbG9hZF9wdXQpCisgICAgICAgIE9QKE1FTU9JWkUsIGxvYWRfbWVtb2l6ZSkKICAgICAgICAgT1AoUE9QLCBsb2FkX3BvcCkKICAgICAgICAgT1AoUE9QX01BUkssIGxvYWRfcG9wX21hcmspCiAgICAgICAgIE9QKFNFVElURU0sIGxvYWRfc2V0aXRlbSkKQEAgLTUzODYsNiArNjAyMSw3IEBACiAgICAgICAgIE9QKEJJTlBFUlNJRCwgbG9hZF9iaW5wZXJzaWQpCiAgICAgICAgIE9QKFJFRFVDRSwgbG9hZF9yZWR1Y2UpCiAgICAgICAgIE9QKFBST1RPLCBsb2FkX3Byb3RvKQorICAgICAgICBPUChGUkFNRSwgbG9hZF9mcmFtZSkKICAgICAgICAgT1BfQVJHKEVYVDEsIGxvYWRfZXh0ZW5zaW9uLCAxKQogICAgICAgICBPUF9BUkcoRVhUMiwgbG9hZF9leHRlbnNpb24sIDIpCiAgICAgICAgIE9QX0FSRyhFWFQ0LCBsb2FkX2V4dGVuc2lvbiwgNCkKQEAgLTU0MDcsNzAgKzYwNDMsMTIxIEBACiAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGFuZCB3ZSBhcmUgZG9uZSEgKi8KICAgICB9CiAKLSAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIFhYWDogSXQgaXMgbm90IGNsZWFyIHdoYXQgdGhpcyBpcyBhY3R1YWxseSBmb3IuICovCi0gICAgaWYgKChlcnIgPSBQeUVycl9PY2N1cnJlZCgpKSkgewotICAgICAgICBpZiAoZXJyID09IFB5RXhjX0VPRkVycm9yKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0VPRkVycm9yKTsKLSAgICAgICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2xvYWRfZG9jLAotImxvYWQoKSAtPiBvYmplY3QuIExvYWQgYSBwaWNrbGUuIgorLypbY2xpbmljXQorCitfcGlja2xlLlVucGlja2xlci5sb2FkCisKK0xvYWQgYSBwaWNrbGUuCisKK1JlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGdpdmVuIGluCit0aGUgY29uc3RydWN0b3IsIGFuZCByZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQKK3RoZXJlaW4uCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9sb2FkX19kb2NfXywKKyJsb2FkKClcbiIKKyJMb2FkIGEgcGlja2xlLlxuIgogIlxuIgogIlJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGdpdmVuIGluXG4iCiAidGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkXG4iCi0idGhlcmVpbi5cbiIpOworInRoZXJlaW4uIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJfTE9BRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlcl9sb2FkLCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotVW5waWNrbGVyX2xvYWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJfbG9hZChQeU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogOWEzMGJhNGU0ZDkyMjFkNGRjZDcwNWUxNDcxYWIxMWIyYzllM2FjNl0qLwogeworICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0gKFVucGlja2xlck9iamVjdCopc2VsZjsKICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBVbnBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhpcyBwcmV2ZW50cwogICAgICAgIHNlZ2ZhdWx0aW5nIGlmIGEgc3ViY2xhc3Mgb3ZlcnJpZGRlbiBfX2luaXRfXyB3aXRoIGEgZnVuY3Rpb24gdGhhdCBkb2VzCiAgICAgICAgbm90IGNhbGwgVW5waWNrbGVyLl9faW5pdF9fKCkuIEhlcmUsIHdlIHNpbXBseSBlbnN1cmUgdGhhdCBzZWxmLT5yZWFkCiAgICAgICAgaXMgbm90IE5VTEwuICovCi0gICAgaWYgKHNlbGYtPnJlYWQgPT0gTlVMTCkgeworICAgIGlmICh1bnBpY2tsZXItPnJlYWQgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoVW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlVucGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVucGlja2xlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gbG9hZChzZWxmKTsKKyAgICByZXR1cm4gbG9hZCh1bnBpY2tsZXIpOwogfQogCiAvKiBUaGUgbmFtZSBvZiBmaW5kX2NsYXNzKCkgaXMgbWlzbGVhZGluZy4gSW4gbmV3ZXIgcGlja2xlIHByb3RvY29scywgdGhpcwogICAgZnVuY3Rpb24gaXMgdXNlZCBmb3IgbG9hZGluZyBhbnkgZ2xvYmFsIChpLmUuLCBmdW5jdGlvbnMpLCBub3QganVzdAogICAgY2xhc3Nlcy4gVGhlIG5hbWUgaXMga2VwdCBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jLAotImZpbmRfY2xhc3MobW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKSAtPiBvYmplY3QuXG4iCisvKltjbGluaWNdCisKK19waWNrbGUuVW5waWNrbGVyLmZpbmRfY2xhc3MKKworICBzZWxmOiBVbnBpY2tsZXJPYmplY3QKKyAgbW9kdWxlX25hbWU6IG9iamVjdAorICBnbG9iYWxfbmFtZTogb2JqZWN0CisgIC8KKworUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZS4KKworSWYgbmVjZXNzYXJ5LCB0aGUgbW9kdWxlIHdpbGwgYmUgaW1wb3J0ZWQuIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXMKK21ldGhvZCAoZS5nLiB0byByZXN0cmljdCB1bnBpY2tsaW5nIG9mIGFyYml0cmFyeSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMpLgorCitUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpcworbmVlZGVkLiAgQm90aCBhcmd1bWVudHMgcGFzc2VkIGFyZSBzdHIgb2JqZWN0cy4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfX2RvY19fLAorImZpbmRfY2xhc3MobW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKVxuIgorIlJldHVybiBhbiBvYmplY3QgZnJvbSBhIHNwZWNpZmllZCBtb2R1bGUuXG4iCiAiXG4iCi0iUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZSwgaW1wb3J0aW5nIHRoZSBtb2R1bGUgaWZcbiIKLSJuZWNlc3NhcnkuICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCAoZS5nLiB0byByZXN0cmljdFxuIgotInVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucykuXG4iCisiSWYgbmVjZXNzYXJ5LCB0aGUgbW9kdWxlIHdpbGwgYmUgaW1wb3J0ZWQuIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXNcbiIKKyJtZXRob2QgKGUuZy4gdG8gcmVzdHJpY3QgdW5waWNrbGluZyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBhbmQgZnVuY3Rpb25zKS5cbiIKICJcbiIKICJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpc1xuIgotIm5lZWRlZC4gIEJvdGggYXJndW1lbnRzIHBhc3NlZCBhcmUgc3RyIG9iamVjdHMuXG4iKTsKKyJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSX0ZJTkRfQ0xBU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcywgTUVUSF9WQVJBUkdTLCBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1VbnBpY2tsZXJfZmluZF9jbGFzcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOworICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiT086ZmluZF9jbGFzcyIsCisgICAgICAgICZtb2R1bGVfbmFtZSwgJmdsb2JhbF9uYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbCgoVW5waWNrbGVyT2JqZWN0ICopc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpCisvKltjbGluaWMgY2hlY2tzdW06IGI3ZDA1ZDRkZDhhZGM2OThlNTc4MGMxYWMyYmUwZjUwNjJkMzM5MTVdKi8KIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZTsKLQotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZpbmRfY2xhc3MiLCAyLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKIAogICAgIC8qIFRyeSB0byBtYXAgdGhlIG9sZCBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLnggdG8gdGhlIG5ldyBvbmVzIHVzZWQgaW4KICAgICAgICBQeXRob24gMy54LiAgV2UgZG8gdGhpcyBvbmx5IHdpdGggb2xkIHBpY2tsZSBwcm90b2NvbHMgYW5kIHdoZW4gdGhlCkBAIC01NTI1LDkgKzYyMTIsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIG1vZHVsZXNfZGljdCA9IFB5U3lzX0dldE9iamVjdCgibW9kdWxlcyIpOwotICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkKKyAgICBtb2R1bGVzX2RpY3QgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfbW9kdWxlcyk7CisgICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5tb2R1bGVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG1vZHVsZXNfZGljdCwgbW9kdWxlX25hbWUpOwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewpAQCAtNTUzNiwyMCArNjIyNSwxOCBAQAogICAgICAgICBtb2R1bGUgPSBQeUltcG9ydF9JbXBvcnQobW9kdWxlX25hbWUpOwogICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZ2xvYmFsID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgZ2xvYmFsID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGdsb2JhbCA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIGdsb2JhbCA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICB9CiAgICAgcmV0dXJuIGdsb2JhbDsKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBVbnBpY2tsZXJfbWV0aG9kc1tdID0gewotICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilVbnBpY2tsZXJfbG9hZCwgTUVUSF9OT0FSR1MsCi0gICAgIFVucGlja2xlcl9sb2FkX2RvY30sCi0gICAgeyJmaW5kX2NsYXNzIiwgKFB5Q0Z1bmN0aW9uKVVucGlja2xlcl9maW5kX2NsYXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFVucGlja2xlcl9maW5kX2NsYXNzX2RvY30sCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJfTE9BRF9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUl9GSU5EX0NMQVNTX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNTU3MSw4ICs2MjU4LDggQEAKICAgICBfVW5waWNrbGVyX01lbW9DbGVhbnVwKHNlbGYpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+bWFya3MpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+aW5wdXRfbGluZSk7Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKIAogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC01NjA4LDE3ICs2Mjk1LDQ5IEBACiAgICAgc2VsZi0+bWFya3MgPSBOVUxMOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+aW5wdXRfbGluZSk7CiAgICAgc2VsZi0+aW5wdXRfbGluZSA9IE5VTEw7Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lbmNvZGluZyk7CiAgICAgc2VsZi0+ZW5jb2RpbmcgPSBOVUxMOwotICAgIGZyZWUoc2VsZi0+ZXJyb3JzKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVycm9ycyk7CiAgICAgc2VsZi0+ZXJyb3JzID0gTlVMTDsKIAogICAgIHJldHVybiAwOwogfQogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2RvYywKLSJVbnBpY2tsZXIoZmlsZSwgKiwgZW5jb2Rpbmc9J0FTQ0lJJywgZXJyb3JzPSdzdHJpY3QnKSIKLSJcbiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5VbnBpY2tsZXIuX19pbml0X18KKworICBzZWxmOiBVbnBpY2tsZXJPYmplY3QKKyAgZmlsZTogb2JqZWN0CisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisgIGVuY29kaW5nOiBzdHIgPSAnQVNDSUknCisgIGVycm9yczogc3RyID0gJ3N0cmljdCcKKworVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgorCitUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vCitwcm90byBhcmd1bWVudCBpcyBuZWVkZWQuCisKK1RoZSBmaWxlLWxpa2Ugb2JqZWN0IG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kCit0aGF0IHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQKK3JlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLgorVGh1cyBmaWxlLWxpa2Ugb2JqZWN0IGNhbiBiZSBhIGJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yCityZWFkaW5nLCBhIEJ5dGVzSU8gb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0CittZWV0cyB0aGlzIGludGVyZmFjZS4KKworT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAord2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQorZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZQorKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKK2luc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQKKydzdHJpY3QnLCByZXNwZWN0aXZlbHkuCisKK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX19kb2NfXywKKyJfX2luaXRfXyhmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz1cJ0FTQ0lJXCcsIGVycm9ycz1cJ3N0cmljdFwnKVxuIgogIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3IgcmVhZGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS5cbiIKICJcbiIKICJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vXG4iCkBAIC01NjM2LDU3ICs2MzU1LDYwIEBACiAiZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgogIm1hcCB0aGUgb2xkIFB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGVcbiIKICIqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZ1xuIgotImluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmRcbiIKLSInc3RyaWN0JywgcmVzcGVjdGl2ZWx5LlxuIik7CisiaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byBcJ0FTQ0lJXCcgYW5kXG4iCisiXCdzdHJpY3RcJywgcmVzcGVjdGl2ZWx5LiIpOwogCi1zdGF0aWMgaW50Ci1VbnBpY2tsZXJfaW5pdChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJfX19JTklUX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9faW5pdF9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6X19pbml0X18iLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKChVbnBpY2tsZXJPYmplY3QgKilzZWxmLCBmaWxlLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGNoZWNrc3VtOiBiZWQwZDhiYmUxYzY0Nzk2MGNjYzZmOTk3YjMzYmYzMzkzNWZhNTZmXSovCit7CiAgICAgX1B5X0lERU5USUZJRVIocGVyc2lzdGVudF9sb2FkKTsKIAotICAgIC8qIFhYWDogVGhhdCBpcyBhbiBob3JyaWJsZSBlcnJvciBtZXNzYWdlLiBCdXQsIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8KLSAgICAgICBiZXR0ZXIuLi4gKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSAhPSAxKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCAoJXpkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qIEFyZ3VtZW50cyBwYXJzaW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIF9faW5pdF9fKCkgbWV0aG9kIHRvIGFsbG93Ci0gICAgICAgc3ViY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIF9faW5pdF9fKCkgbWV0aG9kLCB3aGljaCBtYXkgKG9yIG1heQotICAgICAgIG5vdCkgc3VwcG9ydCBVbnBpY2tsZXIgYXJndW1lbnRzLiBIb3dldmVyLCB0aGlzIG1lYW5zIHdlIG5lZWQgdG8gYmUKLSAgICAgICBleHRyYSBjYXJlZnVsIGluIHRoZSBvdGhlciBVbnBpY2tsZXIgbWV0aG9kcywgc2luY2UgYSBzdWJjbGFzcyBjb3VsZAotICAgICAgIGZvcmdldCB0byBjYWxsIFVucGlja2xlci5fX2luaXRfXygpIHRodXMgYnJlYWtpbmcgb3VyIGludGVybmFsCi0gICAgICAgaW52YXJpYW50cy4gKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6VW5waWNrbGVyIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgX19pbml0X18oKSBjYWxscywgY2xlYXIgcHJldmlvdXMgY29udGVudC4gKi8KICAgICBpZiAoc2VsZi0+cmVhZCAhPSBOVUxMKQogICAgICAgICAodm9pZClVbnBpY2tsZXJfY2xlYXIoc2VsZik7CiAKICAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dFN0cmVhbShzZWxmLCBmaWxlKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dEVuY29kaW5nKHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzKTsKKyAgICBzZWxmLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzOwogICAgIGlmIChzZWxmLT5maXhfaW1wb3J0cyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX3BlcnNpc3RlbnRfbG9hZCkpIHsKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3BlcnNpc3RlbnRfbG9hZCk7CiAgICAgICAgIGlmIChzZWxmLT5wZXJzX2Z1bmMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKQEAgLTU2OTQsMTYgKzY0MTYsMjYgQEAKIAogICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7CiAgICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKICAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7CiAgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogCisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKKy8qIFhYWCBTbGlnaHQgaGFjayB0byBzbG90IGEgQ2xpbmljIGdlbmVyYXRlZCBzaWduYXR1cmUgaW4gdHBfaW5pdC4gKi8KK3N0YXRpYyBpbnQKK1VucGlja2xlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpZiAoX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X18oc2VsZiwgYXJncywga3dhcmdzKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU3MjUsMTEgKzY0NTcsMjQgQEAKICAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKIH0gVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0OwogCi1QeURvY19TVFJWQVIodW1wX2NsZWFyX2RvYywKLSJtZW1vLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworLypbY2xpbmljXQorX3BpY2tsZS5VbnBpY2tsZXJNZW1vUHJveHkuY2xlYXIKKworICBzZWxmOiBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX18sCisiY2xlYXIoKVxuIgorIlJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhciIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhciwgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfY2xlYXIoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXIoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiA0NmZlY2Y0ZTMzYzBjODczMTI0Zjg0NWVkZjZjYzNhMmU5ODY0YmQ1XSovCiB7CiAgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmLT51bnBpY2tsZXIpOwogICAgIHNlbGYtPnVucGlja2xlci0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT51bnBpY2tsZXItPm1lbW9fc2l6ZSk7CkBAIC01NzM4LDExICs2NDgzLDI0IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUih1bXBfY29weV9kb2MsCi0ibWVtby5jb3B5KCkgLT4gbmV3X21lbW8uICBDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5LmNvcHkKKworICBzZWxmOiBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfXywKKyJjb3B5KClcbiIKKyJDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHksIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfY29weShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5KFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogZjg4NTZjNGU4YTMzNTQwODg2ZGZiYjI0NWYyODZhZjMwMDhmYTBhZF0qLwogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqbmV3X21lbW8gPSBQeURpY3RfTmV3KCk7CkBAIC01NzcyLDE1ICs2NTMwLDI4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUih1bXBfcmVkdWNlX2RvYywKLSJtZW1vLl9fcmVkdWNlX18oKS4gUGlja2xpbmcgc3VwcG9ydC4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5Ll9fcmVkdWNlX18KKworICBzZWxmOiBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworSW1wbGVtZW50IHBpY2tsaW5nIHN1cHBvcnQuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfXywKKyJfX3JlZHVjZV9fKClcbiIKKyJJbXBsZW1lbnQgcGlja2xpbmcgc3VwcG9ydC4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfcmVkdWNlKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogYWI1NTE2YTc3NjU5MTQ0ZTExOTFjN2RkNzBhMGM2Yzc0NTU2NjBiY10qLwogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CiAgICAgUHlPYmplY3QgKmNvbnN0cnVjdG9yX2FyZ3M7Ci0gICAgUHlPYmplY3QgKmNvbnRlbnRzID0gdW1wX2NvcHkoc2VsZik7CisgICAgUHlPYmplY3QgKmNvbnRlbnRzID0gX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weShzZWxmKTsKICAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTU4MDMsOSArNjU3NCw5IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bnBpY2tsZXJwcm94eV9tZXRob2RzW10gPSB7Ci0gICAgeyJjbGVhciIsICAgICAgIChQeUNGdW5jdGlvbil1bXBfY2xlYXIsICBNRVRIX05PQVJHUywgIHVtcF9jbGVhcl9kb2N9LAotICAgIHsiY29weSIsICAgICAgICAoUHlDRnVuY3Rpb24pdW1wX2NvcHksICAgTUVUSF9OT0FSR1MsICB1bXBfY29weV9kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsICAoUHlDRnVuY3Rpb24pdW1wX3JlZHVjZSwgTUVUSF9WQVJBUkdTLCB1bXBfcmVkdWNlX2RvY30sCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNjAyOSw3ICs2ODAwLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICBVbnBpY2tsZXJfZG9jLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19fLCAgLyp0cF9kb2MqLwogICAgICh0cmF2ZXJzZXByb2MpVW5waWNrbGVyX3RyYXZlcnNlLCAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KVVucGlja2xlcl9jbGVhciwgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwpAQCAtNjA0NCwyMSArNjgxNSw1MyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2MpVW5waWNrbGVyX2luaXQsICAgICAgICAgICAvKnRwX2luaXQqLworICAgIFVucGlja2xlcl9pbml0LCAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCiB9OwogCi1QeURvY19TVFJWQVIocGlja2xlX2R1bXBfZG9jLAotImR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKSAtPiBOb25lXG4iCisvKltjbGluaWNdCisKK19waWNrbGUuZHVtcAorCisgIG9iajogb2JqZWN0CisgIGZpbGU6IG9iamVjdAorICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorCitXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLCBidXQgbWF5IGJlIG1vcmUKK2VmZmljaWVudC4KKworVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2wKK3N1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhCitiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLjAuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvbgorc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mCitQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworVGhlIGZpbGUgYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIGJ5dGVzCithcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYQoraW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKworSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsCitzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9kdW1wX19kb2NfXywKKyJkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuXG4iCiAiXG4iCi0iV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLiAgVGhpc1xuIgotImlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heSBiZSBtb3JlXG4iCisiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXkgYmUgbW9yZVxuIgogImVmZmljaWVudC5cbiIKICJcbiIKLSJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDtcbiIKKyJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbFxuIgogInN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhXG4iCiAiYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLlxuIgogIlxuIgpAQCAtNjA3MiwzNSArNjg3NSw0NCBAQAogIlxuIgogIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKICJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCxcbiIKLSJzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7Cisic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4iKTsKKworI2RlZmluZSBfUElDS0xFX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9kdW1wLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfZHVtcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9kdW1wX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKnByb3RvID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwotICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7CisgICAgUHlPYmplY3QgKnByb3RvY29sID0gTlVMTDsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOwogCi0gICAgLyogZml4X2ltcG9ydHMgaXMgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpID4gMykgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5kdW1wKCkgdGFrZXMgYXQgbW9zdCAzIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPT3xPJHA6ZHVtcCIsIF9rZXl3b3JkcywKKyAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfZHVtcF9pbXBsKG1vZHVsZSwgb2JqLCBmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PfE9POmR1bXAiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90bywgJmZpeF9pbXBvcnRzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKLSAgICBwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGNoZWNrc3VtOiBlNDQyNzIxYjE2MDUyZDkyMWI1ZTNmYmQxNDZkMGE2MmU5NGE0NTllXSovCit7CisgICAgUGlja2xlck9iamVjdCAqcGlja2xlciA9IF9QaWNrbGVyX05ldygpOworCiAgICAgaWYgKHBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG8sIGZpeF9pbXBvcnRzKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9QaWNrbGVyX1NldE91dHB1dFN0cmVhbShwaWNrbGVyLCBmaWxlKSA8IDApCkBAIC02MTIwLDExICs2OTMyLDMzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfZHVtcHNfZG9jLAotImR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzXG4iCi0ib2JqZWN0LCBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQgdG8gYSBmaWxlLlxuIgorLypbY2xpbmljXQorCitfcGlja2xlLmR1bXBzCisKKyAgb2JqOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSBieXRlcyBvYmplY3QuCisKK1RoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sOworc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEKK2JhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KKworU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uCitzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YKK1B5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgorCitJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAorc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfZHVtcHNfX2RvY19fLAorImR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKICJcbiIKICJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDtcbiIKICJzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYVxuIgpAQCAtNjEzNiwzNSArNjk3MCw0NCBAQAogIlxuIgogIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgogIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LFxuIgotInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKyJzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LiIpOworCisjZGVmaW5lIF9QSUNLTEVfRFVNUFNfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXBzIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfZHVtcHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2R1bXBzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfZHVtcHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfZHVtcHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2R1bXBzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqb2JqOwotICAgIFB5T2JqZWN0ICpwcm90byA9IE5VTEw7CisgICAgUHlPYmplY3QgKnByb3RvY29sID0gTlVMTDsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3xPJHA6ZHVtcHMiLCBfa2V5d29yZHMsCisgICAgICAgICZvYmosICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfZHVtcHNfaW1wbChtb2R1bGUsIG9iaiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGNoZWNrc3VtOiBkZjYyNjJjNGM0ODdmNTM3ZjQ3YWVjOGExNzA5MzE4MjA0YzFlMTc0XSovCit7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwotICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7CisgICAgUGlja2xlck9iamVjdCAqcGlja2xlciA9IF9QaWNrbGVyX05ldygpOwogCi0gICAgLyogZml4X2ltcG9ydHMgaXMgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpID4gMikgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5kdW1wcygpIHRha2VzIGF0IG1vc3QgMiBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpkdW1wcyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmcHJvdG8sICZmaXhfaW1wb3J0cykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcGlja2xlciA9IF9QaWNrbGVyX05ldygpOwogICAgIGlmIChwaWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvLCBmaXhfaW1wb3J0cykgPCAwKQorICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChkdW1wKHBpY2tsZXIsIG9iaikgPCAwKQpAQCAtNjE3OSwxNSArNzAyMiw0NiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocGlja2xlX2xvYWRfZG9jLAotImxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9J0FTQ0lJJywgZXJyb3JzPSdzdHJpY3QnKSAtPiBvYmplY3RcbiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5sb2FkCisKKyAgZmlsZTogb2JqZWN0CisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisgIGVuY29kaW5nOiBzdHIgPSAnQVNDSUknCisgIGVycm9yczogc3RyID0gJ3N0cmljdCcKKworUmV0dXJuIGEgcmVjb25zdGl0dXRlZCBvYmplY3QgZnJvbSB0aGUgcGlja2xlIGRhdGEgc3RvcmVkIGluIGEgZmlsZS4KKworVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50LgorCitUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sCithcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZQoraWdub3JlZC4KKworVGhlIGFyZ3VtZW50IGZpbGUgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhbgoraW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoCittZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYSBiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkCitmb3IgcmVhZGluZywgYSBCeXRlc0lPIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzCitpbnRlcmZhY2UuCisKK09wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycywKK3doaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkCitieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCitQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlIGVuY29kaW5nIGFuZAorZXJyb3JzIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbgorMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2xvYWRfX2RvY19fLAorImxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLCBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyJSZXR1cm4gYSByZWNvbnN0aXR1dGVkIG9iamVjdCBmcm9tIHRoZSBwaWNrbGUgZGF0YSBzdG9yZWQgaW4gYSBmaWxlLlxuIgogIlxuIgotIlJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUgYW5kXG4iCi0icmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW4uICBUaGlzIGlzXG4iCi0iZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYCwgYnV0IG1heSBiZSBtb3JlIGVmZmljaWVudC5cbiIKKyJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBVbnBpY2tsZXIoZmlsZSkubG9hZCgpYGAsIGJ1dCBtYXkgYmUgbW9yZSBlZmZpY2llbnQuXG4iCiAiXG4iCiAiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgotImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCisiYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3RcJ3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCiAiaWdub3JlZC5cbiIKICJcbiIKICJUaGUgYXJndW1lbnQgZmlsZSBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzIGFuXG4iCkBAIC02MjAxLDMyICs3MDc1LDQxIEBACiAiYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZFxuIgogIlB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgZW5jb2RpbmcgYW5kXG4iCiAiZXJyb3JzIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvblxuIgotIjIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LlxuIik7CisiMi54OyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmQgXCdzdHJpY3RcJywgcmVzcGVjdGl2ZWx5LiIpOworCisjZGVmaW5lIF9QSUNLTEVfTE9BRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilfcGlja2xlX2xvYWQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2xvYWRfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBpY2tsZV9sb2FkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfcGlja2xlX2xvYWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6bG9hZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfbG9hZF9pbXBsKG1vZHVsZSwgZmlsZSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGNoZWNrc3VtOiBlMTA3OTZmNjc2NWIyMmNlNDhkY2E2OTQwZjExYjM5MzM4NTNjYTM1XSovCit7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmUgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUubG9hZCgpIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpsb2FkIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKICAgICBpZiAodW5waWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC02MjM2LDkgKzcxMTksNyBAQAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2RpbmcodW5waWNrbGVyLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzKTsKLSAgICBpZiAodW5waWNrbGVyLT5maXhfaW1wb3J0cyA9PSAtMSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHM7CiAKICAgICByZXN1bHQgPSBsb2FkKHVucGlja2xlcik7CiAgICAgUHlfREVDUkVGKHVucGlja2xlcik7CkBAIC02MjQ5LDE0ICs3MTMwLDM2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfbG9hZHNfZG9jLAotImxvYWRzKGlucHV0LCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpIC0+IG9iamVjdFxuIgotIlxuIgotIlJlYWQgYSBwaWNrbGVkIG9iamVjdCBoaWVyYXJjaHkgZnJvbSBhIGJ5dGVzIG9iamVjdCBhbmQgcmV0dXJuIHRoZVxuIgotInJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpblxuIgorLypbY2xpbmljXQorCitfcGlja2xlLmxvYWRzCisKKyAgZGF0YTogb2JqZWN0CisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisgIGVuY29kaW5nOiBzdHIgPSAnQVNDSUknCisgIGVycm9yczogc3RyID0gJ3N0cmljdCcKKworUmV0dXJuIGEgcmVjb25zdGl0dXRlZCBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlIGRhdGEuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2wKK2FyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlCitpZ25vcmVkLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsIHdoaWNoCithcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZAorYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmQKK2Vycm9ycyB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KKzIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9sb2Fkc19fZG9jX18sCisibG9hZHMoZGF0YSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLCBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyJSZXR1cm4gYSByZWNvbnN0aXR1dGVkIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBwaWNrbGUgZGF0YS5cbiIKICJcbiIKICJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sXG4iCi0iYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncyByZXByZXNlbnRhdGlvbiBhcmVcbiIKKyJhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdFwncyByZXByZXNlbnRhdGlvbiBhcmVcbiIKICJpZ25vcmVkLlxuIgogIlxuIgogIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycywgd2hpY2hcbiIKQEAgLTYyNjQsNDQgKzcxNjcsNTEgQEAKICJieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkXG4iCiAiUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmRcbiIKICJlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uXG4iCi0iMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKyIyLng7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZCBcJ3N0cmljdFwnLCByZXNwZWN0aXZlbHkuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9MT0FEU19NRVRIT0RERUYgICAgXAorICAgIHsibG9hZHMiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfbG9hZHNfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBpY2tsZV9sb2FkcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9sb2Fkc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpkYXRhLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2FkcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImlucHV0IiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwotICAgIFB5T2JqZWN0ICppbnB1dDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98JHBzczpsb2FkcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRhdGEsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfbG9hZHNfaW1wbChtb2R1bGUsIGRhdGEsIGZpeF9pbXBvcnRzLCBlbmNvZGluZywgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2Fkc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpkYXRhLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgY2hlY2tzdW06IDI5ZWU3MjVlZmNiZjUxYTM1MzNjMTljYjgyNjFhOGUyNjdiNzA4MGFdKi8KK3sKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyOworICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzIGFyZSBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5sb2FkcygpIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpsb2FkcyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wdXQsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICB1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwogICAgIGlmICh1bnBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dCh1bnBpY2tsZXIsIGlucHV0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQodW5waWNrbGVyLCBkYXRhKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dEVuY29kaW5nKHVucGlja2xlciwgZW5jb2RpbmcsIGVycm9ycykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgdW5waWNrbGVyLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7Ci0gICAgaWYgKHVucGlja2xlci0+Zml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgdW5waWNrbGVyLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzOwogCiAgICAgcmVzdWx0ID0gbG9hZCh1bnBpY2tsZXIpOwogICAgIFB5X0RFQ1JFRih1bnBpY2tsZXIpOwpAQCAtNjMxNCwxNCArNzIyNCwxMCBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgcGlja2xlX21ldGhvZHNbXSA9IHsKLSAgICB7ImR1bXAiLCAgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9kdW1wLCAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9kdW1wX2RvY30sCi0gICAgeyJkdW1wcyIsIChQeUNGdW5jdGlvbilwaWNrbGVfZHVtcHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBwaWNrbGVfZHVtcHNfZG9jfSwKLSAgICB7ImxvYWQiLCAgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9sb2FkLCAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9sb2FkX2RvY30sCi0gICAgeyJsb2FkcyIsIChQeUNGdW5jdGlvbilwaWNrbGVfbG9hZHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBwaWNrbGVfbG9hZHNfZG9jfSwKKyAgICBfUElDS0xFX0RVTVBfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9EVU1QU19NRVRIT0RERUYKKyAgICBfUElDS0xFX0xPQURfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9MT0FEU19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKaW5kZXggOGQ2NTUzMC4uYTJkNzAyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKKysrIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKQEAgLTM1LDcgKzM1LDcgQEAKICMgZGVmaW5lIEZEX0RJUiAiL3Byb2Mvc2VsZi9mZCIKICNlbmRpZgogCi0jZGVmaW5lIFBPU0lYX0NBTEwoY2FsbCkgICBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yCisjZGVmaW5lIFBPU0lYX0NBTEwoY2FsbCkgICBkbyB7IGlmICgoY2FsbCkgPT0gLTEpIGdvdG8gZXJyb3I7IH0gd2hpbGUgKDApCiAKIAogLyogTWF4aW11bSBmaWxlIGRlc2NyaXB0b3IsIGluaXRpYWxpemVkIG9uIG1vZHVsZSBsb2FkLiAqLwpAQCAtODcsNyArODcsNyBAQAogICAgIGlmIChzdGF0KCIvZGV2IiwgJmRldl9zdGF0KSAhPSAwKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoc3RhdChGRF9ESVIsICZkZXZfZmRfc3RhdCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7IAorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoZGV2X3N0YXQuc3RfZGV2ID09IGRldl9mZF9zdGF0LnN0X2RldikKICAgICAgICAgcmV0dXJuIDA7ICAvKiAvID09IC9kZXYgPT0gL2Rldi9mZCBtZWFucyBpdCBpcyBzdGF0aWMuICNmYWlsICovCiAgICAgcmV0dXJuIDE7CkBAIC0xMzYsNiArMTM2LDI5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK21ha2VfaW5oZXJpdGFibGUoUHlPYmplY3QgKnB5X2Zkc190b19rZWVwLCBpbnQgZXJycGlwZV93cml0ZSkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGxlbjsKKworICAgIGxlbiA9IFB5U2VxdWVuY2VfTGVuZ3RoKHB5X2Zkc190b19rZWVwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QqIGZkb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHB5X2Zkc190b19rZWVwLCBpKTsKKyAgICAgICAgbG9uZyBmZCA9IFB5TG9uZ19Bc0xvbmcoZmRvYmopOworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworICAgICAgICBhc3NlcnQoMCA8PSBmZCAmJiBmZCA8PSBJTlRfTUFYKTsKKyAgICAgICAgaWYgKGZkID09IGVycnBpcGVfd3JpdGUpIHsKKyAgICAgICAgICAgIC8qIGVycnBpcGVfd3JpdGUgaXMgcGFydCBvZiBweV9mZHNfdG9fa2VlcC4gSXQgbXVzdCBiZSBjbG9zZWQgYXQKKyAgICAgICAgICAgICAgIGV4ZWMoKSwgYnV0IGtlcHQgb3BlbiBpbiB0aGUgY2hpbGQgcHJvY2VzcyB1bnRpbCBleGVjKCkgaXMKKyAgICAgICAgICAgICAgIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKChpbnQpZmQsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIAogLyogQ2xvc2UgYWxsIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIHJhbmdlIHN0YXJ0X2ZkIGluY2x1c2l2ZSB0bwogICogZW5kX2ZkIGV4Y2x1c2l2ZSBleGNlcHQgZm9yIHRob3NlIGluIHB5X2Zkc190b19rZWVwLiAgSWYgdGhlCkBAIC0yMDUsMTggKzIyOCw4IEBACiAgICAgaW50IGZkX2Rpcl9mZDsKICAgICBpZiAoc3RhcnRfZmQgPj0gZW5kX2ZkKQogICAgICAgICByZXR1cm47Ci0jaWZkZWYgT19DTE9FWEVDCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZIHwgT19DTE9FWEVDLCAwKTsKLSNlbHNlCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZLCAwKTsKLSNpZmRlZiBGRF9DTE9FWEVDCi0gICAgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZmRfZGlyX2ZkLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGZkX2Rpcl9mZCwgRl9TRVRGRCwgb2xkIHwgRkRfQ0xPRVhFQyk7Ci0gICAgfQotI2VuZGlmCi0jZW5kaWYKKworICAgIGZkX2Rpcl9mZCA9IF9QeV9vcGVuKEZEX0RJUiwgT19SRE9OTFkpOwogICAgIGlmIChmZF9kaXJfZmQgPT0gLTEpIHsKICAgICAgICAgLyogTm8gd2F5IHRvIGdldCBhIGxpc3Qgb2Ygb3BlbiBmZHMuICovCiAgICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIGVuZF9mZCwgcHlfZmRzX3RvX2tlZXApOwpAQCAtMzU2LDE2ICszNjksMTYgQEAKICAgICAvKiBCdWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBoZXggaW50ZWdlci4gIFdlIGNhbid0IG1hbGxvYy4gKi8KICAgICBjaGFyIGhleF9lcnJub1tzaXplb2Yoc2F2ZWRfZXJybm8pKjIrMV07CiAKKyAgICBpZiAobWFrZV9pbmhlcml0YWJsZShweV9mZHNfdG9fa2VlcCwgZXJycGlwZV93cml0ZSkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAgICAgLyogQ2xvc2UgcGFyZW50J3MgcGlwZSBlbmRzLiAqLwotICAgIGlmIChwMmN3cml0ZSAhPSAtMSkgeworICAgIGlmIChwMmN3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShwMmN3cml0ZSkpOwotICAgIH0KLSAgICBpZiAoYzJwcmVhZCAhPSAtMSkgeworICAgIGlmIChjMnByZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGMycHJlYWQpKTsKLSAgICB9Ci0gICAgaWYgKGVycnJlYWQgIT0gLTEpIHsKKyAgICBpZiAoZXJycmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJyZWFkKSk7Ci0gICAgfQogICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJycGlwZV9yZWFkKSk7CiAKICAgICAvKiBXaGVuIGR1cGluZyBmZHMsIGlmIHRoZXJlIGFyaXNlcyBhIHNpdHVhdGlvbiB3aGVyZSBvbmUgb2YgdGhlIGZkcyBpcwpAQCAtMzc5LDM4ICszOTIsMzQgQEAKICAgICAgICBkdXAyKCkgcmVtb3ZlcyB0aGUgQ0xPRVhFQyBmbGFnIGJ1dCB3ZSBtdXN0IGRvIGl0IG91cnNlbHZlcyBpZiBkdXAyKCkKICAgICAgICB3b3VsZCBiZSBhIG5vLW9wIChpc3N1ZSAjMTA4MDYpLiAqLwogICAgIGlmIChwMmNyZWFkID09IDApIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKHAyY3JlYWQsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwocDJjcmVhZCwgRl9TRVRGRCwgb2xkICYgfkZEX0NMT0VYRUMpOwotICAgIH0gZWxzZSBpZiAocDJjcmVhZCAhPSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShwMmNyZWFkLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChwMmNyZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGR1cDIocDJjcmVhZCwgMCkpOyAgLyogc3RkaW4gKi8KLSAgICB9CisKICAgICBpZiAoYzJwd3JpdGUgPT0gMSkgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoYzJwd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoYzJwd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGMycHdyaXRlICE9IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGMycHdyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChjMnB3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGMycHdyaXRlLCAxKSk7ICAvKiBzdGRvdXQgKi8KLSAgICB9CisKICAgICBpZiAoZXJyd3JpdGUgPT0gMikgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZXJyd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoZXJyd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGVycndyaXRlICE9IC0xKSB7Ci0gICAgICAgIFBPU0lYX0NBTEwoZHVwMihlcnJ3cml0ZSwgMikpOyAgLyogc3RkZXJyICovCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGVycndyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKyAgICBlbHNlIGlmIChlcnJ3cml0ZSAhPSAtMSkKKyAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGVycndyaXRlLCAyKSk7ICAvKiBzdGRlcnIgKi8KIAogICAgIC8qIENsb3NlIHBpcGUgZmRzLiAgTWFrZSBzdXJlIHdlIGRvbid0IGNsb3NlIHRoZSBzYW1lIGZkIG1vcmUgdGhhbiAqLwogICAgIC8qIG9uY2UsIG9yIHN0YW5kYXJkIGZkcy4gKi8KLSAgICBpZiAocDJjcmVhZCA+IDIpIHsKKyAgICBpZiAocDJjcmVhZCA+IDIpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjcmVhZCkpOwotICAgIH0KLSAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpIHsKKyAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoYzJwd3JpdGUpKTsKLSAgICB9Ci0gICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKSB7CisgICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycndyaXRlKSk7Ci0gICAgfQogCiAgICAgaWYgKGN3ZCkKICAgICAgICAgUE9TSVhfQ0FMTChjaGRpcihjd2QpKTsKQEAgLTQ5Miw3ICs1MDEsNyBAQAogICAgICAgICAvKiBXZSBjYW4ndCBjYWxsIHN0cmVycm9yKHNhdmVkX2Vycm5vKS4gIEl0IGlzIG5vdCBhc3luYyBzaWduYWwgc2FmZS4KICAgICAgICAgICogVGhlIHBhcmVudCBwcm9jZXNzIHdpbGwgbG9vayB0aGUgZXJyb3IgbWVzc2FnZSB1cC4gKi8KICAgICB9IGVsc2UgewotICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiUnVudGltZUVycm9yOjA6IiwgMTUpOworICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiU3VicHJvY2Vzc0Vycm9yOjA6IiwgMTgpOwogICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCBlcnJfbXNnLCBzdHJsZW4oZXJyX21zZykpOwogICAgIH0KICAgICBpZiAodW51c2VkKSByZXR1cm47ICAvKiBzaWxseT8geWVzISBhdm9pZHMgZ2NjIGNvbXBpbGVyIHdhcm5pbmcuICovCkBAIC01NDQsNyArNTUzLDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgX1B5X0lERU5USUZJRVIoaXNlbmFibGVkKTsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZGlzYWJsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdjX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZ2MiKTsKICAgICAgICAgaWYgKGdjX21vZHVsZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MjEsNTIgKzczMCw2IEBACiBSYWlzZXM6IE9ubHkgb24gYW4gZXJyb3IgaW4gdGhlIHBhcmVudCBwcm9jZXNzLlxuXAogIik7CiAKLVB5RG9jX1NUUlZBUihzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZV9kb2MsCi0iY2xvZXhlY19waXBlKCkgLT4gKHJlYWRfZW5kLCB3cml0ZV9lbmQpXG5cblwKLUNyZWF0ZSBhIHBpcGUgd2hvc2UgZW5kcyBoYXZlIHRoZSBjbG9leGVjIGZsYWcgc2V0LiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotc3VicHJvY2Vzc19jbG9leGVjX3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgaW50IGZkc1syXTsKLSAgICBpbnQgcmVzOwotI2lmZGVmIEhBVkVfUElQRTIKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwICYmIGVycm5vID09IEVOT1NZUykKLSAgICB7Ci0gICAgICAgIHsKLSNlbmRpZgotICAgICAgICAvKiBXZSBob2xkIHRoZSBHSUwgd2hpY2ggb2ZmZXJzIHNvbWUgcHJvdGVjdGlvbiBmcm9tIG90aGVyIGNvZGUgY2FsbGluZwotICAgICAgICAgKiBmb3JrKCkgYmVmb3JlIHRoZSBDTE9FWEVDIGZsYWdzIGhhdmUgYmVlbiBzZXQgYnV0IHdlIGNhbid0IGd1YXJhbnRlZQotICAgICAgICAgKiBhbnl0aGluZyB3aXRob3V0IHBpcGUyKCkuICovCi0gICAgICAgIGxvbmcgb2xkZmxhZ3M7Ci0KLSAgICAgICAgcmVzID0gcGlwZShmZHMpOwotCi0gICAgICAgIGlmIChyZXMgPT0gMCkgewotICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bChmZHNbMF0sIEZfR0VURkQsIDApOwotICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgcmVzID0gZmNudGwoZmRzWzBdLCBGX1NFVEZELCBvbGRmbGFncyB8IEZEX0NMT0VYRUMpOwotCi0gICAgICAgIGlmIChyZXMgPT0gMCkgewotICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bChmZHNbMV0sIEZfR0VURkQsIDApOwotICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgcmVzID0gZmNudGwoZmRzWzFdLCBGX1NFVEZELCBvbGRmbGFncyB8IEZEX0NMT0VYRUMpOwotI2lmZGVmIEhBVkVfUElQRTIKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLX0KLQogLyogbW9kdWxlIGxldmVsIGNvZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLApAQCAtNzc1LDcgKzczOCw2IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0gewogICAgIHsiZm9ya19leGVjIiwgc3VicHJvY2Vzc19mb3JrX2V4ZWMsIE1FVEhfVkFSQVJHUywgc3VicHJvY2Vzc19mb3JrX2V4ZWNfZG9jfSwKLSAgICB7ImNsb2V4ZWNfcGlwZSIsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlLCBNRVRIX05PQVJHUywgc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jfSwKICAgICB7TlVMTCwgTlVMTH0gIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCmluZGV4IDIxYTJiMDkuLjQzNzdlZTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCkBAIC0xNjgsOSArMTY4LDkgQEAKIC8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi8KIC8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWluaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHVuc2lnbmVkIGxvbmcga2V5X2xlbmd0aCkKK2luaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHNpemVfdCBrZXlfbGVuZ3RoKQogewotICAgIHVuc2lnbmVkIGludCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLworICAgIHNpemVfdCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLwogICAgIHVuc2lnbmVkIGxvbmcgKm10OwogCiAgICAgbXQgPSBzZWxmLT5zdGF0ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgIGsgPSAoTj5rZXlfbGVuZ3RoID8gTiA6IGtleV9sZW5ndGgpOwogICAgIGZvciAoOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTY2NDUyNVVMKSkKLSAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi8KKyAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArICh1bnNpZ25lZCBsb25nKWo7IC8qIG5vbiBsaW5lYXIgKi8KICAgICAgICAgbXRbaV0gJj0gMHhmZmZmZmZmZlVMOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqLwogICAgICAgICBpKys7IGorKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgIH0KICAgICBmb3IgKGs9Ti0xOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MVVMKSkKLSAgICAgICAgICAgICAgICAgLSBpOyAvKiBub24gbGluZWFyICovCisgICAgICAgICAgICAgICAgIC0gKHVuc2lnbmVkIGxvbmcpaTsgLyogbm9uIGxpbmVhciAqLwogICAgICAgICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovCiAgICAgICAgIGkrKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTIwNywxNCArMjA3LDExIEBACiByYW5kb21fc2VlZChSYW5kb21PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOyAgICAgICAgICAgIC8qIGd1aWx0eSB1bnRpbCBwcm92ZWQgaW5ub2NlbnQgKi8KLSAgICBQeU9iamVjdCAqbWFza2xvd2VyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdGhpcnR5dHdvID0gTlVMTDsKICAgICBQeU9iamVjdCAqbiA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyAqbmV3X2tleSwgKmtleSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBrZXltYXg7ICAgICAgICAgICAgICAgLyogIyBvZiBhbGxvY2F0ZWQgc2xvdHMgaW4ga2V5ICovCi0gICAgdW5zaWduZWQgbG9uZyBrZXl1c2VkOyAgICAgICAgICAgICAgLyogIyBvZiB1c2VkIHNsb3RzIGluIGtleSAqLwotICAgIGludCBlcnI7Ci0KKyAgICB1bnNpZ25lZCBsb25nICprZXkgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmtleV9hc19ieXRlcyA9IE5VTEw7CisgICAgc2l6ZV90IGJpdHMsIGtleXVzZWQsIGk7CisgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqYXJnID0gTlVMTDsKIAogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNlZWQiLCAwLCAxLCAmYXJnKSkKQEAgLTI0Myw2OSArMjQwLDQ2IEBACiAgICAgaWYgKG4gPT0gTlVMTCkKICAgICAgICAgZ290byBEb25lOwogCi0gICAgLyogTm93IHNwbGl0IG4gaW50byAzMi1iaXQgY2h1bmtzLCBmcm9tIHRoZSByaWdodC4gIEVhY2ggcGllY2UgaXMKLSAgICAgKiBzdG9yZWQgaW50byBrZXksIHdoaWNoIGhhcyBhIGNhcGFjaXR5IG9mIGtleW1heCBjaHVua3MsIG9mIHdoaWNoCi0gICAgICoga2V5dXNlZCBhcmUgZmlsbGVkLiAgQWxhcywgdGhlIHJlcGVhdGVkIHNoaWZ0aW5nIG1ha2VzIHRoaXMgYQotICAgICAqIHF1YWRyYXRpYy10aW1lIGFsZ29yaXRobTsgd2UnZCByZWFsbHkgbGlrZSB0byB1c2UKLSAgICAgKiBfUHlMb25nX0FzQnl0ZUFycmF5IGhlcmUsIGJ1dCB0aGVuIHdlJ2QgaGF2ZSB0byBicmVhayBpbnRvIHRoZQotICAgICAqIGxvbmcgcmVwcmVzZW50YXRpb24gdG8gZmlndXJlIG91dCBob3cgYmlnIGFuIGFycmF5IHdhcyBuZWVkZWQKLSAgICAgKiBpbiBhZHZhbmNlLgotICAgICAqLwotICAgIGtleW1heCA9IDg7ICAgICAgICAgLyogYXJiaXRyYXJ5OyBncm93cyBsYXRlciBpZiBuZWVkZWQgKi8KLSAgICBrZXl1c2VkID0gMDsKLSAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhrZXltYXggKiBzaXplb2YoKmtleSkpOwotICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAvKiBOb3cgc3BsaXQgbiBpbnRvIDMyLWJpdCBjaHVua3MsIGZyb20gdGhlIHJpZ2h0LiAqLworICAgIGJpdHMgPSBfUHlMb25nX051bUJpdHMobik7CisgICAgaWYgKGJpdHMgPT0gKHNpemVfdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIERvbmU7CiAKLSAgICBtYXNrbG93ZXIgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygweGZmZmZmZmZmVSk7Ci0gICAgaWYgKG1hc2tsb3dlciA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgdGhpcnR5dHdvID0gUHlMb25nX0Zyb21Mb25nKDMyTCk7Ci0gICAgaWYgKHRoaXJ0eXR3byA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgd2hpbGUgKChlcnI9UHlPYmplY3RfSXNUcnVlKG4pKSkgewotICAgICAgICBQeU9iamVjdCAqbmV3bjsKLSAgICAgICAgUHlPYmplY3QgKnB5Y2h1bms7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bms7CisgICAgLyogRmlndXJlIG91dCBob3cgbWFueSAzMi1iaXQgY2h1bmtzIHRoaXMgZ2l2ZXMgdXMuICovCisgICAga2V5dXNlZCA9IGJpdHMgPT0gMCA/IDEgOiAoYml0cyAtIDEpIC8gMzIgKyAxOwogCi0gICAgICAgIGlmIChlcnIgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIHB5Y2h1bmsgPSBQeU51bWJlcl9BbmQobiwgbWFza2xvd2VyKTsKLSAgICAgICAgaWYgKHB5Y2h1bmsgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgY2h1bmsgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcocHljaHVuayk7Ci0gICAgICAgIFB5X0RFQ1JFRihweWNodW5rKTsKLSAgICAgICAgaWYgKGNodW5rID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIG5ld24gPSBQeU51bWJlcl9Sc2hpZnQobiwgdGhpcnR5dHdvKTsKLSAgICAgICAgaWYgKG5ld24gPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgUHlfREVDUkVGKG4pOwotICAgICAgICBuID0gbmV3bjsKLSAgICAgICAgaWYgKGtleXVzZWQgPj0ga2V5bWF4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJpZ2dlciA9IGtleW1heCA8PCAxOwotICAgICAgICAgICAgaWYgKChiaWdnZXIgPj4gMSkgIT0ga2V5bWF4IHx8Ci0gICAgICAgICAgICAgICAgYmlnZ2VyID4gUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoKmtleSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld19rZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX1JlYWxsb2Moa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlnZ2VyICogc2l6ZW9mKCprZXkpKTsKLSAgICAgICAgICAgIGlmIChuZXdfa2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICAgICAga2V5ID0gbmV3X2tleTsKLSAgICAgICAgICAgIGtleW1heCA9IGJpZ2dlcjsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQoa2V5dXNlZCA8IGtleW1heCk7Ci0gICAgICAgIGtleVtrZXl1c2VkKytdID0gY2h1bms7CisgICAgLyogQ29udmVydCBzZWVkIHRvIGJ5dGUgc2VxdWVuY2UuICovCisgICAga2V5X2FzX2J5dGVzID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoKHNpemVfdCk0ICoga2V5dXNlZCk7CisgICAgaWYgKGtleV9hc19ieXRlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9hc19ieXRlcywga2V5dXNlZCAqIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7IC8qIHVuc2lnbmVkICovCisgICAgaWYgKHJlcyA9PSAtMSkgeworICAgICAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CisgICAgICAgIGdvdG8gRG9uZTsKICAgICB9CiAKLSAgICBpZiAoa2V5dXNlZCA9PSAwKQotICAgICAgICBrZXlba2V5dXNlZCsrXSA9IDBVTDsKKyAgICAvKiBGaWxsIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGZyb20gYnl0ZSBzZXF1ZW5jZS4gKi8KKyAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBrZXl1c2VkKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBrZXl1c2VkOyBpKyspIHsKKyAgICAgICAga2V5W2ldID0KKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMF0gPDwgMCkgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAxXSA8PCA4KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDJdIDw8IDE2KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDNdIDw8IDI0KTsKKyAgICB9CisgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOwogICAgIHJlc3VsdCA9IGluaXRfYnlfYXJyYXkoc2VsZiwga2V5LCBrZXl1c2VkKTsKIERvbmU6Ci0gICAgUHlfWERFQ1JFRihtYXNrbG93ZXIpOwotICAgIFB5X1hERUNSRUYodGhpcnR5dHdvKTsKICAgICBQeV9YREVDUkVGKG4pOwogICAgIFB5TWVtX0ZyZWUoa2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzg5LDYgKzM2Myw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChrIDw9IDMyKSAgLyogRmFzdCBwYXRoICovCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhnZW5yYW5kX2ludDMyKHNlbGYpID4+ICgzMiAtIGspKTsKKwogICAgIGJ5dGVzID0gKChrIC0gMSkgLyAzMiArIDEpICogNDsKICAgICBieXRlYXJyYXkgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYyhieXRlcyk7CiAgICAgaWYgKGJ5dGVhcnJheSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2NsZWFudXAucHkgYi9Nb2R1bGVzL19zaGEzL2NsZWFudXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWFiY2IwNAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMvY2xlYW51cC5weQpAQCAtMCwwICsxLDQ5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgQ2hyaXN0aWFuIEhlaW1lcyAoY2hyaXN0aWFuQHB5dGhvbi5vcmcpCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMKKyMgY2xlYW51cCBLZWNjYWsgc291cmNlcworCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitDUFAxID0gcmUuY29tcGlsZSgiXi8vKC4qKSIpCitDUFAyID0gcmUuY29tcGlsZSgiXCAvLyguKikiKQorCitTVEFUSUNTID0gKCJ2b2lkICIsICJpbnQgIiwgIkhhc2hSZXR1cm4gIiwgImNvbnN0IFVJTlQ2NCAiLCAiVUlOVDE2ICIpCisKK0hFUkUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKK0tFQ0NBSyA9IG9zLnBhdGguam9pbihIRVJFLCAia2VjY2FrIikKKworZGVmIGdldGZpbGVzKCk6CisgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihLRUNDQUspOgorICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKEtFQ0NBSywgbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobmFtZSk6CisgICAgICAgICAgICB5aWVsZCBuYW1lCisKK2RlZiBjbGVhbnVwKGYpOgorICAgIGJ1ZiA9IFtdCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgIyBtYXJrIGFsbCBmdW5jdGlvbnMgYW5kIGdsb2JhbCBkYXRhIGFzIHN0YXRpYworICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoU1RBVElDUyk6CisgICAgICAgICAgICBidWYuYXBwZW5kKCJzdGF0aWMgIiArIGxpbmUpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIHJlbW92ZSBVSU5UNjQgdHlwZWRlZiwgd2UgaGF2ZSBvdXIgb3duCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgidHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50Iik6CisgICAgICAgICAgICBidWYuYXBwZW5kKCIvKiAlcyAqL1xuIiAlIGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgcmVtb3ZlICNpbmNsdWRlICJicmdfZW5kaWFuLmgiCisgICAgICAgIGlmICJicmdfZW5kaWFuLmgiIGluIGxpbmU6CisgICAgICAgICAgICBidWYuYXBwZW5kKCIvKiAlcyAqL1xuIiAlIGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgdHJhbnNmb3JtIEMrKyBjb21tZW50cyBpbnRvIEFOU0kgQyBjb21tZW50cworICAgICAgICBsaW5lID0gQ1BQMS5zdWIociIvKiBcMSAqLyIsIGxpbmUpCisgICAgICAgIGxpbmUgPSBDUFAyLnN1YihyIiAvKiBcMSAqLyIsIGxpbmUpCisgICAgICAgIGJ1Zi5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gIiIuam9pbihidWYpCisKK2ZvciBuYW1lIGluIGdldGZpbGVzKCk6CisgICAgd2l0aCBvcGVuKG5hbWUpIGFzIGY6CisgICAgICAgIHJlcyA9IGNsZWFudXAoZikKKyAgICB3aXRoIG9wZW4obmFtZSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHJlcykKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLXJ2ay5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjOTAyOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zCkBAIC0wLDAgKzEsNTU1IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IFJvbm55IFZhbiBLZWVyLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKK3N0YXRpYyBjb25zdCBVSU5UMzIgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyWzIqMjRdID0KK3sKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwODlVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwOGJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDgwODBVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDAwOGJVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwODJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwMGFVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwODJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDgwMDNVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwOGJVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwOGFVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwMDhVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwODNVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDgwMDNVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwODhVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDgwODJVTAorfTsKKworI3VuZGVmIHJvdW5kcworCisjZGVmaW5lIHJvdW5kcyBcCit7IFwKKyAgICBVSU5UMzIgRGEwLCBEZTAsIERpMCwgRG8wLCBEdTA7IFwKKyAgICBVSU5UMzIgRGExLCBEZTEsIERpMSwgRG8xLCBEdTE7IFwKKyAgICBVSU5UMzIgQmEsIEJlLCBCaSwgQm8sIEJ1OyBcCisgICAgVUlOVDMyIEFiYTAsIEFiZTAsIEFiaTAsIEFibzAsIEFidTA7IFwKKyAgICBVSU5UMzIgQWJhMSwgQWJlMSwgQWJpMSwgQWJvMSwgQWJ1MTsgXAorICAgIFVJTlQzMiBBZ2EwLCBBZ2UwLCBBZ2kwLCBBZ28wLCBBZ3UwOyBcCisgICAgVUlOVDMyIEFnYTEsIEFnZTEsIEFnaTEsIEFnbzEsIEFndTE7IFwKKyAgICBVSU5UMzIgQWthMCwgQWtlMCwgQWtpMCwgQWtvMCwgQWt1MDsgXAorICAgIFVJTlQzMiBBa2ExLCBBa2UxLCBBa2kxLCBBa28xLCBBa3UxOyBcCisgICAgVUlOVDMyIEFtYTAsIEFtZTAsIEFtaTAsIEFtbzAsIEFtdTA7IFwKKyAgICBVSU5UMzIgQW1hMSwgQW1lMSwgQW1pMSwgQW1vMSwgQW11MTsgXAorICAgIFVJTlQzMiBBc2EwLCBBc2UwLCBBc2kwLCBBc28wLCBBc3UwOyBcCisgICAgVUlOVDMyIEFzYTEsIEFzZTEsIEFzaTEsIEFzbzEsIEFzdTE7IFwKKyAgICBVSU5UMzIgQ3csIEN4LCBDeSwgQ3o7IFwKKyAgICBVSU5UMzIgRWJhMCwgRWJlMCwgRWJpMCwgRWJvMCwgRWJ1MDsgXAorICAgIFVJTlQzMiBFYmExLCBFYmUxLCBFYmkxLCBFYm8xLCBFYnUxOyBcCisgICAgVUlOVDMyIEVnYTAsIEVnZTAsIEVnaTAsIEVnbzAsIEVndTA7IFwKKyAgICBVSU5UMzIgRWdhMSwgRWdlMSwgRWdpMSwgRWdvMSwgRWd1MTsgXAorICAgIFVJTlQzMiBFa2EwLCBFa2UwLCBFa2kwLCBFa28wLCBFa3UwOyBcCisgICAgVUlOVDMyIEVrYTEsIEVrZTEsIEVraTEsIEVrbzEsIEVrdTE7IFwKKyAgICBVSU5UMzIgRW1hMCwgRW1lMCwgRW1pMCwgRW1vMCwgRW11MDsgXAorICAgIFVJTlQzMiBFbWExLCBFbWUxLCBFbWkxLCBFbW8xLCBFbXUxOyBcCisgICAgVUlOVDMyIEVzYTAsIEVzZTAsIEVzaTAsIEVzbzAsIEVzdTA7IFwKKyAgICBVSU5UMzIgRXNhMSwgRXNlMSwgRXNpMSwgRXNvMSwgRXN1MTsgXAorCWNvbnN0IFVJTlQzMiAqIHBSb3VuZENvbnN0YW50cyA9IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50MjsgXAorICAgIFVJTlQzMiBpOyBcCitcCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkgXAorXAorICAgIGZvciggaSA9IDEyOyBpICE9IDA7IC0taSApIHsgXAorCSAgICBDeCA9IEFidTBeQWd1MF5Ba3UwXkFtdTBeQXN1MDsgXAorCSAgICBEdTEgPSBBYmUxXkFnZTFeQWtlMV5BbWUxXkFzZTE7IFwKKwkgICAgRGEwID0gQ3heUk9MMzIoRHUxLCAxKTsgXAorCSAgICBDeiA9IEFidTFeQWd1MV5Ba3UxXkFtdTFeQXN1MTsgXAorCSAgICBEdTAgPSBBYmUwXkFnZTBeQWtlMF5BbWUwXkFzZTA7IFwKKwkgICAgRGExID0gQ3peRHUwOyBcCitcCisJICAgIEN3ID0gQWJpMF5BZ2kwXkFraTBeQW1pMF5Bc2kwOyBcCisJICAgIERvMCA9IEN3XlJPTDMyKEN6LCAxKTsgXAorCSAgICBDeSA9IEFiaTFeQWdpMV5Ba2kxXkFtaTFeQXNpMTsgXAorCSAgICBEbzEgPSBDeV5DeDsgXAorXAorCSAgICBDeCA9IEFiYTBeQWdhMF5Ba2EwXkFtYTBeQXNhMDsgXAorCSAgICBEZTAgPSBDeF5ST0wzMihDeSwgMSk7IFwKKwkgICAgQ3ogPSBBYmExXkFnYTFeQWthMV5BbWExXkFzYTE7IFwKKwkgICAgRGUxID0gQ3peQ3c7IFwKK1wKKwkgICAgQ3kgPSBBYm8xXkFnbzFeQWtvMV5BbW8xXkFzbzE7IFwKKwkgICAgRGkwID0gRHUwXlJPTDMyKEN5LCAxKTsgXAorCSAgICBDdyA9IEFibzBeQWdvMF5Ba28wXkFtbzBeQXNvMDsgXAorCSAgICBEaTEgPSBEdTFeQ3c7IFwKK1wKKwkgICAgRHUwID0gQ3deUk9MMzIoQ3osIDEpOyBcCisJICAgIER1MSA9IEN5XkN4OyBcCitcCisJICAgIEFiYTAgXj0gRGEwOyBcCisJICAgIEJhID0gQWJhMDsgXAorCSAgICBBZ2UwIF49IERlMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnZTAsIDIyKTsgXAorCSAgICBBa2kxIF49IERpMTsgXAorCSAgICBCaSA9IFJPTDMyKEFraTEsIDIyKTsgXAorCSAgICBBbW8xIF49IERvMTsgXAorCSAgICBCbyA9IFJPTDMyKEFtbzEsIDExKTsgXAorCSAgICBBc3UwIF49IER1MDsgXAorCSAgICBCdSA9IFJPTDMyKEFzdTAsIDcpOyBcCisJICAgIEViYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApIF4gKihwUm91bmRDb25zdGFudHMrKyk7IFwKKwkgICAgRWJlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWJpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWJvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWJ1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJvMCBePSBEbzA7IFwKKwkgICAgQmEgPSBST0wzMihBYm8wLCAxNCk7IFwKKwkgICAgQWd1MCBePSBEdTA7IFwKKwkgICAgQmUgPSBST0wzMihBZ3UwLCAxMCk7IFwKKwkgICAgQWthMSBePSBEYTE7IFwKKwkgICAgQmkgPSBST0wzMihBa2ExLCAyKTsgXAorCSAgICBBbWUxIF49IERlMTsgXAorCSAgICBCbyA9IFJPTDMyKEFtZTEsIDIzKTsgXAorCSAgICBBc2kxIF49IERpMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzaTEsIDMxKTsgXAorCSAgICBFZ2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFZ2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFZ2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFZ28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFZ3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmUxIF49IERlMTsgXAorCSAgICBCYSA9IFJPTDMyKEFiZTEsIDEpOyBcCisJICAgIEFnaTAgXj0gRGkwOyBcCisJICAgIEJlID0gUk9MMzIoQWdpMCwgMyk7IFwKKwkgICAgQWtvMSBePSBEbzE7IFwKKwkgICAgQmkgPSBST0wzMihBa28xLCAxMyk7IFwKKwkgICAgQW11MCBePSBEdTA7IFwKKwkgICAgQm8gPSBST0wzMihBbXUwLCA0KTsgXAorCSAgICBBc2EwIF49IERhMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzYTAsIDkpOyBcCisJICAgIEVrYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVrZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVraTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVrbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVrdTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFidTEgXj0gRHUxOyBcCisJICAgIEJhID0gUk9MMzIoQWJ1MSwgMTQpOyBcCisJICAgIEFnYTAgXj0gRGEwOyBcCisJICAgIEJlID0gUk9MMzIoQWdhMCwgMTgpOyBcCisJICAgIEFrZTAgXj0gRGUwOyBcCisJICAgIEJpID0gUk9MMzIoQWtlMCwgNSk7IFwKKwkgICAgQW1pMSBePSBEaTE7IFwKKwkgICAgQm8gPSBST0wzMihBbWkxLCA4KTsgXAorCSAgICBBc28wIF49IERvMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzbzAsIDI4KTsgXAorCSAgICBFbWEwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFbWUwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFbWkwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFbW8wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFbXUwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmkwIF49IERpMDsgXAorCSAgICBCYSA9IFJPTDMyKEFiaTAsIDMxKTsgXAorCSAgICBBZ28xIF49IERvMTsgXAorCSAgICBCZSA9IFJPTDMyKEFnbzEsIDI4KTsgXAorCSAgICBBa3UxIF49IER1MTsgXAorCSAgICBCaSA9IFJPTDMyKEFrdTEsIDIwKTsgXAorCSAgICBBbWExIF49IERhMTsgXAorCSAgICBCbyA9IFJPTDMyKEFtYTEsIDIxKTsgXAorCSAgICBBc2UwIF49IERlMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzZTAsIDEpOyBcCisJICAgIEVzYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVzZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVzaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVzbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVzdTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFiYTEgXj0gRGExOyBcCisJICAgIEJhID0gQWJhMTsgXAorCSAgICBBZ2UxIF49IERlMTsgXAorCSAgICBCZSA9IFJPTDMyKEFnZTEsIDIyKTsgXAorCSAgICBBa2kwIF49IERpMDsgXAorCSAgICBCaSA9IFJPTDMyKEFraTAsIDIxKTsgXAorCSAgICBBbW8wIF49IERvMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtbzAsIDEwKTsgXAorCSAgICBBc3UxIF49IER1MTsgXAorCSAgICBCdSA9IFJPTDMyKEFzdTEsIDcpOyBcCisJICAgIEViYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEViYTEgXj0gKihwUm91bmRDb25zdGFudHMrKyk7IFwKKwkgICAgRWJlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWJpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWJvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWJ1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJvMSBePSBEbzE7IFwKKwkgICAgQmEgPSBST0wzMihBYm8xLCAxNCk7IFwKKwkgICAgQWd1MSBePSBEdTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ3UxLCAxMCk7IFwKKwkgICAgQWthMCBePSBEYTA7IFwKKwkgICAgQmkgPSBST0wzMihBa2EwLCAxKTsgXAorCSAgICBBbWUwIF49IERlMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtZTAsIDIyKTsgXAorCSAgICBBc2kwIF49IERpMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzaTAsIDMwKTsgXAorCSAgICBFZ2ExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFZ2UxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFZ2kxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFZ28xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFZ3UxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmUwIF49IERlMDsgXAorCSAgICBCYSA9IEFiZTA7IFwKKwkgICAgQWdpMSBePSBEaTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ2kxLCAzKTsgXAorCSAgICBBa28wIF49IERvMDsgXAorCSAgICBCaSA9IFJPTDMyKEFrbzAsIDEyKTsgXAorCSAgICBBbXUxIF49IER1MTsgXAorCSAgICBCbyA9IFJPTDMyKEFtdTEsIDQpOyBcCisJICAgIEFzYTEgXj0gRGExOyBcCisJICAgIEJ1ID0gUk9MMzIoQXNhMSwgOSk7IFwKKwkgICAgRWthMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRWtlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWtpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWtvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWt1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJ1MCBePSBEdTA7IFwKKwkgICAgQmEgPSBST0wzMihBYnUwLCAxMyk7IFwKKwkgICAgQWdhMSBePSBEYTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ2ExLCAxOCk7IFwKKwkgICAgQWtlMSBePSBEZTE7IFwKKwkgICAgQmkgPSBST0wzMihBa2UxLCA1KTsgXAorCSAgICBBbWkwIF49IERpMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtaTAsIDcpOyBcCisJICAgIEFzbzEgXj0gRG8xOyBcCisJICAgIEJ1ID0gUk9MMzIoQXNvMSwgMjgpOyBcCisJICAgIEVtYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVtZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVtaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVtbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVtdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFiaTEgXj0gRGkxOyBcCisJICAgIEJhID0gUk9MMzIoQWJpMSwgMzEpOyBcCisJICAgIEFnbzAgXj0gRG8wOyBcCisJICAgIEJlID0gUk9MMzIoQWdvMCwgMjcpOyBcCisJICAgIEFrdTAgXj0gRHUwOyBcCisJICAgIEJpID0gUk9MMzIoQWt1MCwgMTkpOyBcCisJICAgIEFtYTAgXj0gRGEwOyBcCisJICAgIEJvID0gUk9MMzIoQW1hMCwgMjApOyBcCisJICAgIEFzZTEgXj0gRGUxOyBcCisJICAgIEJ1ID0gUk9MMzIoQXNlMSwgMSk7IFwKKwkgICAgRXNhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRXNlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRXNpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRXNvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRXN1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQ3ggPSBFYnUwXkVndTBeRWt1MF5FbXUwXkVzdTA7IFwKKwkgICAgRHUxID0gRWJlMV5FZ2UxXkVrZTFeRW1lMV5Fc2UxOyBcCisJICAgIERhMCA9IEN4XlJPTDMyKER1MSwgMSk7IFwKKwkgICAgQ3ogPSBFYnUxXkVndTFeRWt1MV5FbXUxXkVzdTE7IFwKKwkgICAgRHUwID0gRWJlMF5FZ2UwXkVrZTBeRW1lMF5Fc2UwOyBcCisJICAgIERhMSA9IEN6XkR1MDsgXAorXAorCSAgICBDdyA9IEViaTBeRWdpMF5Fa2kwXkVtaTBeRXNpMDsgXAorCSAgICBEbzAgPSBDd15ST0wzMihDeiwgMSk7IFwKKwkgICAgQ3kgPSBFYmkxXkVnaTFeRWtpMV5FbWkxXkVzaTE7IFwKKwkgICAgRG8xID0gQ3leQ3g7IFwKK1wKKwkgICAgQ3ggPSBFYmEwXkVnYTBeRWthMF5FbWEwXkVzYTA7IFwKKwkgICAgRGUwID0gQ3heUk9MMzIoQ3ksIDEpOyBcCisJICAgIEN6ID0gRWJhMV5FZ2ExXkVrYTFeRW1hMV5Fc2ExOyBcCisJICAgIERlMSA9IEN6XkN3OyBcCitcCisJICAgIEN5ID0gRWJvMV5FZ28xXkVrbzFeRW1vMV5Fc28xOyBcCisJICAgIERpMCA9IER1MF5ST0wzMihDeSwgMSk7IFwKKwkgICAgQ3cgPSBFYm8wXkVnbzBeRWtvMF5FbW8wXkVzbzA7IFwKKwkgICAgRGkxID0gRHUxXkN3OyBcCitcCisJICAgIER1MCA9IEN3XlJPTDMyKEN6LCAxKTsgXAorCSAgICBEdTEgPSBDeV5DeDsgXAorXAorCSAgICBFYmEwIF49IERhMDsgXAorCSAgICBCYSA9IEViYTA7IFwKKwkgICAgRWdlMCBePSBEZTA7IFwKKwkgICAgQmUgPSBST0wzMihFZ2UwLCAyMik7IFwKKwkgICAgRWtpMSBePSBEaTE7IFwKKwkgICAgQmkgPSBST0wzMihFa2kxLCAyMik7IFwKKwkgICAgRW1vMSBePSBEbzE7IFwKKwkgICAgQm8gPSBST0wzMihFbW8xLCAxMSk7IFwKKwkgICAgRXN1MCBePSBEdTA7IFwKKwkgICAgQnUgPSBST0wzMihFc3UwLCA3KTsgXAorCSAgICBBYmEwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBYmEwIF49ICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEFiZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFiaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFibzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFidTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEVibzAgXj0gRG8wOyBcCisJICAgIEJhID0gUk9MMzIoRWJvMCwgMTQpOyBcCisJICAgIEVndTAgXj0gRHUwOyBcCisJICAgIEJlID0gUk9MMzIoRWd1MCwgMTApOyBcCisJICAgIEVrYTEgXj0gRGExOyBcCisJICAgIEJpID0gUk9MMzIoRWthMSwgMik7IFwKKwkgICAgRW1lMSBePSBEZTE7IFwKKwkgICAgQm8gPSBST0wzMihFbWUxLCAyMyk7IFwKKwkgICAgRXNpMSBePSBEaTE7IFwKKwkgICAgQnUgPSBST0wzMihFc2kxLCAzMSk7IFwKKwkgICAgQWdhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWdlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQWdpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQWdvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQWd1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJlMSBePSBEZTE7IFwKKwkgICAgQmEgPSBST0wzMihFYmUxLCAxKTsgXAorCSAgICBFZ2kwIF49IERpMDsgXAorCSAgICBCZSA9IFJPTDMyKEVnaTAsIDMpOyBcCisJICAgIEVrbzEgXj0gRG8xOyBcCisJICAgIEJpID0gUk9MMzIoRWtvMSwgMTMpOyBcCisJICAgIEVtdTAgXj0gRHUwOyBcCisJICAgIEJvID0gUk9MMzIoRW11MCwgNCk7IFwKKwkgICAgRXNhMCBePSBEYTA7IFwKKwkgICAgQnUgPSBST0wzMihFc2EwLCA5KTsgXAorCSAgICBBa2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBa2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBa2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBa28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBa3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYnUxIF49IER1MTsgXAorCSAgICBCYSA9IFJPTDMyKEVidTEsIDE0KTsgXAorCSAgICBFZ2EwIF49IERhMDsgXAorCSAgICBCZSA9IFJPTDMyKEVnYTAsIDE4KTsgXAorCSAgICBFa2UwIF49IERlMDsgXAorCSAgICBCaSA9IFJPTDMyKEVrZTAsIDUpOyBcCisJICAgIEVtaTEgXj0gRGkxOyBcCisJICAgIEJvID0gUk9MMzIoRW1pMSwgOCk7IFwKKwkgICAgRXNvMCBePSBEbzA7IFwKKwkgICAgQnUgPSBST0wzMihFc28wLCAyOCk7IFwKKwkgICAgQW1hMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQW1lMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQW1pMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQW1vMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQW11MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJpMCBePSBEaTA7IFwKKwkgICAgQmEgPSBST0wzMihFYmkwLCAzMSk7IFwKKwkgICAgRWdvMSBePSBEbzE7IFwKKwkgICAgQmUgPSBST0wzMihFZ28xLCAyOCk7IFwKKwkgICAgRWt1MSBePSBEdTE7IFwKKwkgICAgQmkgPSBST0wzMihFa3UxLCAyMCk7IFwKKwkgICAgRW1hMSBePSBEYTE7IFwKKwkgICAgQm8gPSBST0wzMihFbWExLCAyMSk7IFwKKwkgICAgRXNlMCBePSBEZTA7IFwKKwkgICAgQnUgPSBST0wzMihFc2UwLCAxKTsgXAorCSAgICBBc2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBc2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBc2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBc28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBc3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYmExIF49IERhMTsgXAorCSAgICBCYSA9IEViYTE7IFwKKwkgICAgRWdlMSBePSBEZTE7IFwKKwkgICAgQmUgPSBST0wzMihFZ2UxLCAyMik7IFwKKwkgICAgRWtpMCBePSBEaTA7IFwKKwkgICAgQmkgPSBST0wzMihFa2kwLCAyMSk7IFwKKwkgICAgRW1vMCBePSBEbzA7IFwKKwkgICAgQm8gPSBST0wzMihFbW8wLCAxMCk7IFwKKwkgICAgRXN1MSBePSBEdTE7IFwKKwkgICAgQnUgPSBST0wzMihFc3UxLCA3KTsgXAorCSAgICBBYmExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBYmExIF49ICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEFiZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFiaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFibzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFidTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEVibzEgXj0gRG8xOyBcCisJICAgIEJhID0gUk9MMzIoRWJvMSwgMTQpOyBcCisJICAgIEVndTEgXj0gRHUxOyBcCisJICAgIEJlID0gUk9MMzIoRWd1MSwgMTApOyBcCisJICAgIEVrYTAgXj0gRGEwOyBcCisJICAgIEJpID0gUk9MMzIoRWthMCwgMSk7IFwKKwkgICAgRW1lMCBePSBEZTA7IFwKKwkgICAgQm8gPSBST0wzMihFbWUwLCAyMik7IFwKKwkgICAgRXNpMCBePSBEaTA7IFwKKwkgICAgQnUgPSBST0wzMihFc2kwLCAzMCk7IFwKKwkgICAgQWdhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWdlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQWdpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQWdvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQWd1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJlMCBePSBEZTA7IFwKKwkgICAgQmEgPSBFYmUwOyBcCisJICAgIEVnaTEgXj0gRGkxOyBcCisJICAgIEJlID0gUk9MMzIoRWdpMSwgMyk7IFwKKwkgICAgRWtvMCBePSBEbzA7IFwKKwkgICAgQmkgPSBST0wzMihFa28wLCAxMik7IFwKKwkgICAgRW11MSBePSBEdTE7IFwKKwkgICAgQm8gPSBST0wzMihFbXUxLCA0KTsgXAorCSAgICBFc2ExIF49IERhMTsgXAorCSAgICBCdSA9IFJPTDMyKEVzYTEsIDkpOyBcCisJICAgIEFrYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFrZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFraTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFrbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFrdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEVidTAgXj0gRHUwOyBcCisJICAgIEJhID0gUk9MMzIoRWJ1MCwgMTMpOyBcCisJICAgIEVnYTEgXj0gRGExOyBcCisJICAgIEJlID0gUk9MMzIoRWdhMSwgMTgpOyBcCisJICAgIEVrZTEgXj0gRGUxOyBcCisJICAgIEJpID0gUk9MMzIoRWtlMSwgNSk7IFwKKwkgICAgRW1pMCBePSBEaTA7IFwKKwkgICAgQm8gPSBST0wzMihFbWkwLCA3KTsgXAorCSAgICBFc28xIF49IERvMTsgXAorCSAgICBCdSA9IFJPTDMyKEVzbzEsIDI4KTsgXAorCSAgICBBbWExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBbWUxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBbWkxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBbW8xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBbXUxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYmkxIF49IERpMTsgXAorCSAgICBCYSA9IFJPTDMyKEViaTEsIDMxKTsgXAorCSAgICBFZ28wIF49IERvMDsgXAorCSAgICBCZSA9IFJPTDMyKEVnbzAsIDI3KTsgXAorCSAgICBFa3UwIF49IER1MDsgXAorCSAgICBCaSA9IFJPTDMyKEVrdTAsIDE5KTsgXAorCSAgICBFbWEwIF49IERhMDsgXAorCSAgICBCbyA9IFJPTDMyKEVtYTAsIDIwKTsgXAorCSAgICBFc2UxIF49IERlMTsgXAorCSAgICBCdSA9IFJPTDMyKEVzZTEsIDEpOyBcCisJICAgIEFzYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFzZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFzaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFzbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFzdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpIFwKK30KKworI2RlZmluZSBjb3B5RnJvbVN0YXRlKFgsIHN0YXRlKSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdOyBcCisgICAgWCMjYmUwID0gc3RhdGVbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdOyBcCisgICAgWCMjYmkxID0gc3RhdGVbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddOyBcCisgICAgWCMjYnUwID0gc3RhdGVbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdOyBcCisgICAgWCMjZ2ExID0gc3RhdGVbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdOyBcCisgICAgWCMjZ2kwID0gc3RhdGVbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdOyBcCisgICAgWCMjZ28xID0gc3RhdGVbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldOyBcCisgICAgWCMja2EwID0gc3RhdGVbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdOyBcCisgICAgWCMja2UxID0gc3RhdGVbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdOyBcCisgICAgWCMja28wID0gc3RhdGVbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdOyBcCisgICAgWCMja3UxID0gc3RhdGVbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdOyBcCisgICAgWCMjbWUwID0gc3RhdGVbMzJdOyBcCisgICAgWCMjbWUxID0gc3RhdGVbMzNdOyBcCisgICAgWCMjbWkwID0gc3RhdGVbMzRdOyBcCisgICAgWCMjbWkxID0gc3RhdGVbMzVdOyBcCisgICAgWCMjbW8wID0gc3RhdGVbMzZdOyBcCisgICAgWCMjbW8xID0gc3RhdGVbMzddOyBcCisgICAgWCMjbXUwID0gc3RhdGVbMzhdOyBcCisgICAgWCMjbXUxID0gc3RhdGVbMzldOyBcCisgICAgWCMjc2EwID0gc3RhdGVbNDBdOyBcCisgICAgWCMjc2ExID0gc3RhdGVbNDFdOyBcCisgICAgWCMjc2UwID0gc3RhdGVbNDJdOyBcCisgICAgWCMjc2UxID0gc3RhdGVbNDNdOyBcCisgICAgWCMjc2kwID0gc3RhdGVbNDRdOyBcCisgICAgWCMjc2kxID0gc3RhdGVbNDVdOyBcCisgICAgWCMjc28wID0gc3RhdGVbNDZdOyBcCisgICAgWCMjc28xID0gc3RhdGVbNDddOyBcCisgICAgWCMjc3UwID0gc3RhdGVbNDhdOyBcCisgICAgWCMjc3UxID0gc3RhdGVbNDldOyBcCisKKyNkZWZpbmUgY29weVRvU3RhdGUoc3RhdGUsIFgpIFwKKyAgICBzdGF0ZVsgMF0gPSBYIyNiYTA7IFwKKyAgICBzdGF0ZVsgMV0gPSBYIyNiYTE7IFwKKyAgICBzdGF0ZVsgMl0gPSBYIyNiZTA7IFwKKyAgICBzdGF0ZVsgM10gPSBYIyNiZTE7IFwKKyAgICBzdGF0ZVsgNF0gPSBYIyNiaTA7IFwKKyAgICBzdGF0ZVsgNV0gPSBYIyNiaTE7IFwKKyAgICBzdGF0ZVsgNl0gPSBYIyNibzA7IFwKKyAgICBzdGF0ZVsgN10gPSBYIyNibzE7IFwKKyAgICBzdGF0ZVsgOF0gPSBYIyNidTA7IFwKKyAgICBzdGF0ZVsgOV0gPSBYIyNidTE7IFwKKyAgICBzdGF0ZVsxMF0gPSBYIyNnYTA7IFwKKyAgICBzdGF0ZVsxMV0gPSBYIyNnYTE7IFwKKyAgICBzdGF0ZVsxMl0gPSBYIyNnZTA7IFwKKyAgICBzdGF0ZVsxM10gPSBYIyNnZTE7IFwKKyAgICBzdGF0ZVsxNF0gPSBYIyNnaTA7IFwKKyAgICBzdGF0ZVsxNV0gPSBYIyNnaTE7IFwKKyAgICBzdGF0ZVsxNl0gPSBYIyNnbzA7IFwKKyAgICBzdGF0ZVsxN10gPSBYIyNnbzE7IFwKKyAgICBzdGF0ZVsxOF0gPSBYIyNndTA7IFwKKyAgICBzdGF0ZVsxOV0gPSBYIyNndTE7IFwKKyAgICBzdGF0ZVsyMF0gPSBYIyNrYTA7IFwKKyAgICBzdGF0ZVsyMV0gPSBYIyNrYTE7IFwKKyAgICBzdGF0ZVsyMl0gPSBYIyNrZTA7IFwKKyAgICBzdGF0ZVsyM10gPSBYIyNrZTE7IFwKKyAgICBzdGF0ZVsyNF0gPSBYIyNraTA7IFwKKyAgICBzdGF0ZVsyNV0gPSBYIyNraTE7IFwKKyAgICBzdGF0ZVsyNl0gPSBYIyNrbzA7IFwKKyAgICBzdGF0ZVsyN10gPSBYIyNrbzE7IFwKKyAgICBzdGF0ZVsyOF0gPSBYIyNrdTA7IFwKKyAgICBzdGF0ZVsyOV0gPSBYIyNrdTE7IFwKKyAgICBzdGF0ZVszMF0gPSBYIyNtYTA7IFwKKyAgICBzdGF0ZVszMV0gPSBYIyNtYTE7IFwKKyAgICBzdGF0ZVszMl0gPSBYIyNtZTA7IFwKKyAgICBzdGF0ZVszM10gPSBYIyNtZTE7IFwKKyAgICBzdGF0ZVszNF0gPSBYIyNtaTA7IFwKKyAgICBzdGF0ZVszNV0gPSBYIyNtaTE7IFwKKyAgICBzdGF0ZVszNl0gPSBYIyNtbzA7IFwKKyAgICBzdGF0ZVszN10gPSBYIyNtbzE7IFwKKyAgICBzdGF0ZVszOF0gPSBYIyNtdTA7IFwKKyAgICBzdGF0ZVszOV0gPSBYIyNtdTE7IFwKKyAgICBzdGF0ZVs0MF0gPSBYIyNzYTA7IFwKKyAgICBzdGF0ZVs0MV0gPSBYIyNzYTE7IFwKKyAgICBzdGF0ZVs0Ml0gPSBYIyNzZTA7IFwKKyAgICBzdGF0ZVs0M10gPSBYIyNzZTE7IFwKKyAgICBzdGF0ZVs0NF0gPSBYIyNzaTA7IFwKKyAgICBzdGF0ZVs0NV0gPSBYIyNzaTE7IFwKKyAgICBzdGF0ZVs0Nl0gPSBYIyNzbzA7IFwKKyAgICBzdGF0ZVs0N10gPSBYIyNzbzE7IFwKKyAgICBzdGF0ZVs0OF0gPSBYIyNzdTA7IFwKKyAgICBzdGF0ZVs0OV0gPSBYIyNzdTE7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLXMxLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczZDYxZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MKQEAgLTAsMCArMSwxMTg3IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFVJTlQzMiBBYmEwLCBBYmUwLCBBYmkwLCBBYm8wLCBBYnUwOyBcCisgICAgVUlOVDMyIEFiYTEsIEFiZTEsIEFiaTEsIEFibzEsIEFidTE7IFwKKyAgICBVSU5UMzIgQWdhMCwgQWdlMCwgQWdpMCwgQWdvMCwgQWd1MDsgXAorICAgIFVJTlQzMiBBZ2ExLCBBZ2UxLCBBZ2kxLCBBZ28xLCBBZ3UxOyBcCisgICAgVUlOVDMyIEFrYTAsIEFrZTAsIEFraTAsIEFrbzAsIEFrdTA7IFwKKyAgICBVSU5UMzIgQWthMSwgQWtlMSwgQWtpMSwgQWtvMSwgQWt1MTsgXAorICAgIFVJTlQzMiBBbWEwLCBBbWUwLCBBbWkwLCBBbW8wLCBBbXUwOyBcCisgICAgVUlOVDMyIEFtYTEsIEFtZTEsIEFtaTEsIEFtbzEsIEFtdTE7IFwKKyAgICBVSU5UMzIgQXNhMCwgQXNlMCwgQXNpMCwgQXNvMCwgQXN1MDsgXAorICAgIFVJTlQzMiBBc2ExLCBBc2UxLCBBc2kxLCBBc28xLCBBc3UxOyBcCisgICAgVUlOVDMyIEJiYTAsIEJiZTAsIEJiaTAsIEJibzAsIEJidTA7IFwKKyAgICBVSU5UMzIgQmJhMSwgQmJlMSwgQmJpMSwgQmJvMSwgQmJ1MTsgXAorICAgIFVJTlQzMiBCZ2EwLCBCZ2UwLCBCZ2kwLCBCZ28wLCBCZ3UwOyBcCisgICAgVUlOVDMyIEJnYTEsIEJnZTEsIEJnaTEsIEJnbzEsIEJndTE7IFwKKyAgICBVSU5UMzIgQmthMCwgQmtlMCwgQmtpMCwgQmtvMCwgQmt1MDsgXAorICAgIFVJTlQzMiBCa2ExLCBCa2UxLCBCa2kxLCBCa28xLCBCa3UxOyBcCisgICAgVUlOVDMyIEJtYTAsIEJtZTAsIEJtaTAsIEJtbzAsIEJtdTA7IFwKKyAgICBVSU5UMzIgQm1hMSwgQm1lMSwgQm1pMSwgQm1vMSwgQm11MTsgXAorICAgIFVJTlQzMiBCc2EwLCBCc2UwLCBCc2kwLCBCc28wLCBCc3UwOyBcCisgICAgVUlOVDMyIEJzYTEsIEJzZTEsIEJzaTEsIEJzbzEsIEJzdTE7IFwKKyAgICBVSU5UMzIgQ2EwLCBDZTAsIENpMCwgQ28wLCBDdTA7IFwKKyAgICBVSU5UMzIgQ2ExLCBDZTEsIENpMSwgQ28xLCBDdTE7IFwKKyAgICBVSU5UMzIgRGEwLCBEZTAsIERpMCwgRG8wLCBEdTA7IFwKKyAgICBVSU5UMzIgRGExLCBEZTEsIERpMSwgRG8xLCBEdTE7IFwKKyAgICBVSU5UMzIgRWJhMCwgRWJlMCwgRWJpMCwgRWJvMCwgRWJ1MDsgXAorICAgIFVJTlQzMiBFYmExLCBFYmUxLCBFYmkxLCBFYm8xLCBFYnUxOyBcCisgICAgVUlOVDMyIEVnYTAsIEVnZTAsIEVnaTAsIEVnbzAsIEVndTA7IFwKKyAgICBVSU5UMzIgRWdhMSwgRWdlMSwgRWdpMSwgRWdvMSwgRWd1MTsgXAorICAgIFVJTlQzMiBFa2EwLCBFa2UwLCBFa2kwLCBFa28wLCBFa3UwOyBcCisgICAgVUlOVDMyIEVrYTEsIEVrZTEsIEVraTEsIEVrbzEsIEVrdTE7IFwKKyAgICBVSU5UMzIgRW1hMCwgRW1lMCwgRW1pMCwgRW1vMCwgRW11MDsgXAorICAgIFVJTlQzMiBFbWExLCBFbWUxLCBFbWkxLCBFbW8xLCBFbXUxOyBcCisgICAgVUlOVDMyIEVzYTAsIEVzZTAsIEVzaTAsIEVzbzAsIEVzdTA7IFwKKyAgICBVSU5UMzIgRXNhMSwgRXNlMSwgRXNpMSwgRXNvMSwgRXN1MTsgXAorCisjZGVmaW5lIHByZXBhcmVUaGV0YSBcCisgICAgQ2EwID0gQWJhMF5BZ2EwXkFrYTBeQW1hMF5Bc2EwOyBcCisgICAgQ2ExID0gQWJhMV5BZ2ExXkFrYTFeQW1hMV5Bc2ExOyBcCisgICAgQ2UwID0gQWJlMF5BZ2UwXkFrZTBeQW1lMF5Bc2UwOyBcCisgICAgQ2UxID0gQWJlMV5BZ2UxXkFrZTFeQW1lMV5Bc2UxOyBcCisgICAgQ2kwID0gQWJpMF5BZ2kwXkFraTBeQW1pMF5Bc2kwOyBcCisgICAgQ2kxID0gQWJpMV5BZ2kxXkFraTFeQW1pMV5Bc2kxOyBcCisgICAgQ28wID0gQWJvMF5BZ28wXkFrbzBeQW1vMF5Bc28wOyBcCisgICAgQ28xID0gQWJvMV5BZ28xXkFrbzFeQW1vMV5Bc28xOyBcCisgICAgQ3UwID0gQWJ1MF5BZ3UwXkFrdTBeQW11MF5Bc3UwOyBcCisgICAgQ3UxID0gQWJ1MV5BZ3UxXkFrdTFeQW11MV5Bc3UxOyBcCisKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oICBCYmUwIHwgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCAgQmJlMSB8ICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCAgQmdlMCB8ICBCZ2kwICk7IFwKKyAgICBDYTAgXj0gRSMjZ2EwOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oICBCZ2kwICYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oICBCZ2EwICYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oICBCZ2UxIHwgIEJnaTEgKTsgXAorICAgIENhMSBePSBFIyNnYTE7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXiggIEJnaTEgJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCAgQmdvMSB8KH5CZ3UxKSk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXiggIEJrZTAgfCAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAofkJrbzApXiggIEJrdTAgfCAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXiggIEJraTEgJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXiggIEJrYTEgJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oICBCbWkwIHwgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApfCAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXiggIEJtZTEgJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAofkJtbzEpXiggIEJtdTEgJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgRSMjc2UwID0gKH5Cc2UwKV4oICBCc2kwIHwgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oICBCc2EwICYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCAgQnNvMSAmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gdXNpbmcgZmFjdG9yIDIgaW50ZXJsZWF2aW5nLCA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDMyLWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSBcCisgICAgRGEwID0gQ3UwXlJPTDMyKENlMSwgMSk7IFwKKyAgICBEYTEgPSBDdTFeQ2UwOyBcCisgICAgRGUwID0gQ2EwXlJPTDMyKENpMSwgMSk7IFwKKyAgICBEZTEgPSBDYTFeQ2kwOyBcCisgICAgRGkwID0gQ2UwXlJPTDMyKENvMSwgMSk7IFwKKyAgICBEaTEgPSBDZTFeQ28wOyBcCisgICAgRG8wID0gQ2kwXlJPTDMyKEN1MSwgMSk7IFwKKyAgICBEbzEgPSBDaTFeQ3UwOyBcCisgICAgRHUwID0gQ28wXlJPTDMyKENhMSwgMSk7IFwKKyAgICBEdTEgPSBDbzFeQ2EwOyBcCitcCisgICAgQSMjYmEwIF49IERhMDsgXAorICAgIEJiYTAgPSBBIyNiYTA7IFwKKyAgICBBIyNnZTAgXj0gRGUwOyBcCisgICAgQmJlMCA9IFJPTDMyKEEjI2dlMCwgMjIpOyBcCisgICAgQSMja2kxIF49IERpMTsgXAorICAgIEJiaTAgPSBST0wzMihBIyNraTEsIDIyKTsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXiggIEJiZTAgfCAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgRSMjYmUwID0gICBCYmUwIF4oKH5CYmkwKXwgIEJibzAgKTsgXAorICAgIEUjI2JpMCA9ICAgQmJpMCBeKCAgQmJvMCAmICBCYnUwICk7IFwKKyAgICBFIyNibzAgPSAgIEJibzAgXiggIEJidTAgfCAgQmJhMCApOyBcCisgICAgRSMjYnUwID0gICBCYnUwIF4oICBCYmEwICYgIEJiZTAgKTsgXAorXAorICAgIEEjI2JhMSBePSBEYTE7IFwKKyAgICBCYmExID0gQSMjYmExOyBcCisgICAgQSMjZ2UxIF49IERlMTsgXAorICAgIEJiZTEgPSBST0wzMihBIyNnZTEsIDIyKTsgXAorICAgIEEjI2tpMCBePSBEaTA7IFwKKyAgICBCYmkxID0gUk9MMzIoQSMja2kwLCAyMSk7IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oICBCYmUxIHwgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIEUjI2JlMSA9ICAgQmJlMSBeKCh+QmJpMSl8ICBCYm8xICk7IFwKKyAgICBFIyNiaTEgPSAgIEJiaTEgXiggIEJibzEgJiAgQmJ1MSApOyBcCisgICAgRSMjYm8xID0gICBCYm8xIF4oICBCYnUxIHwgIEJiYTEgKTsgXAorICAgIEUjI2J1MSA9ICAgQmJ1MSBeKCAgQmJhMSAmICBCYmUxICk7IFwKK1wKKyAgICBBIyNibzAgXj0gRG8wOyBcCisgICAgQmdhMCA9IFJPTDMyKEEjI2JvMCwgMTQpOyBcCisgICAgQSMjZ3UwIF49IER1MDsgXAorICAgIEJnZTAgPSBST0wzMihBIyNndTAsIDEwKTsgXAorICAgIEEjI2thMSBePSBEYTE7IFwKKyAgICBCZ2kwID0gUk9MMzIoQSMja2ExLCAyKTsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oICBCZ2UwIHwgIEJnaTAgKTsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCAgQmdpMCAmICBCZ28wICk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgRSMjZ28wID0gICBCZ28wIF4oICBCZ3UwIHwgIEJnYTAgKTsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oICBCZ2UxIHwgIEJnaTEgKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCAgQmdpMSAmICBCZ28xICk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIEUjI2d1MSA9ICAgQmd1MSBeKCAgQmdhMSAmICBCZ2UxICk7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBFIyNraTAgPSAgIEJraTAgXigofkJrbzApJiAgQmt1MCApOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKK1wKKyAgICBBIyNiZTAgXj0gRGUwOyBcCisgICAgQmthMSA9IEEjI2JlMDsgXAorICAgIEEjI2dpMSBePSBEaTE7IFwKKyAgICBCa2UxID0gUk9MMzIoQSMjZ2kxLCAzKTsgXAorICAgIEEjI2tvMCBePSBEbzA7IFwKKyAgICBCa2kxID0gUk9MMzIoQSMja28wLCAxMik7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNrYTEgPSAgIEJrYTEgXiggIEJrZTEgfCAgQmtpMSApOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBFIyNrbzEgPSAofkJrbzEpXiggIEJrdTEgfCAgQmthMSApOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXiggIEJtaTAgfCAgQm1vMCApOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBFIyNtdTAgPSAgIEJtdTAgXiggIEJtYTAgfCAgQm1lMCApOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oICBCbWUxICYgIEJtaTEgKTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBFIyNtaTEgPSAgIEJtaTEgXigofkJtbzEpfCAgQm11MSApOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKK1wKKyAgICBBIyNiaTAgXj0gRGkwOyBcCisgICAgQnNhMCA9IFJPTDMyKEEjI2JpMCwgMzEpOyBcCisgICAgQSMjZ28xIF49IERvMTsgXAorICAgIEJzZTAgPSBST0wzMihBIyNnbzEsIDI4KTsgXAorICAgIEEjI2t1MSBePSBEdTE7IFwKKyAgICBCc2kwID0gUk9MMzIoQSMja3UxLCAyMCk7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgRSMjc28wID0gICBCc28wIF4oICBCc3UwIHwgIEJzYTAgKTsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIEUjI3NlMSA9ICh+QnNlMSleKCAgQnNpMSB8ICBCc28xICk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIEUjI3N1MSA9ICAgQnN1MSBeKCAgQnNhMSAmICBCc2UxICk7IFwKK1wKKworI2Vsc2UgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCh+QmdlMCkmICBCZ2kwICk7IFwKKyAgICBDYTAgXj0gRSMjZ2EwOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oKH5CZ2kwKSYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXigofkJnbzApJiAgQmd1MCApOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oKH5CZ2UxKSYgIEJnaTEgKTsgXAorICAgIENhMSBePSBFIyNnYTE7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oKH5CZ3UxKSYgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCh+QmtpMCkmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCh+QmthMCkmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCh+Qm1lMCkmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICAgQm1vMCBeKCh+Qm11MCkmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXigofkJtZTEpJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCh+Qm1pMSkmICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCh+Qm1hMSkmICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXigofkJzbzApJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oKH5Cc3UxKSYgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCh+QmdlMCkmICBCZ2kwICk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXigofkJnaTApJiAgQmdvMCApOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXigofkJnYTApJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCh+QmdlMSkmICBCZ2kxICk7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oKH5CZ28xKSYgIEJndTEgKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCh+QmtlMCkmICBCa2kwICk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICAgQmtvMCBeKCh+Qmt1MCkmICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCh+QmtpMSkmICBCa28xICk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCh+QmthMSkmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXigofkJtZTApJiAgQm1pMCApOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCkmICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCh+Qm1lMSkmICBCbWkxICk7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXigofkJtaTEpJiAgQm1vMSApOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICAgQm1vMSBeKCh+Qm11MSkmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBFIyNzZTAgPSAgIEJzZTAgXigofkJzaTApJiAgQnNvMCApOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXigofkJzYTApJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oKH5Cc28xKSYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCitcCisKKyNlbmRpZiAvKiAgVXNlQmViaWdva2ltaXNhICovCisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFsyNF0gPSB7CisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwgfTsKKworY29uc3QgVUlOVDMyIEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDA4OVVMLAorICAgIDB4ODAwMDAwOGJVTCwKKyAgICAweDgwMDA4MDgwVUwsCisgICAgMHgwMDAwMDA4YlVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4MlVMLAorICAgIDB4MDAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDBhVUwsCisgICAgMHgwMDAwODA4MlVMLAorICAgIDB4MDAwMDgwMDNVTCwKKyAgICAweDAwMDA4MDhiVUwsCisgICAgMHg4MDAwMDAwYlVMLAorICAgIDB4ODAwMDAwOGFVTCwKKyAgICAweDgwMDAwMDgxVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwMDhVTCwKKyAgICAweDAwMDAwMDgzVUwsCisgICAgMHg4MDAwODAwM1VMLAorICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDgwMDAwMDg4VUwsCisgICAgMHgwMDAwODAwMFVMLAorICAgIDB4ODAwMDgwODJVTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXV5pbnB1dFszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM11eaW5wdXRbMzNdOyBcCisgICAgWCMjbWkwID0gc3RhdGVbMzRdOyBcCisgICAgWCMjbWkxID0gc3RhdGVbMzVdOyBcCisgICAgWCMjbW8wID0gc3RhdGVbMzZdOyBcCisgICAgWCMjbW8xID0gc3RhdGVbMzddOyBcCisgICAgWCMjbXUwID0gc3RhdGVbMzhdOyBcCisgICAgWCMjbXUxID0gc3RhdGVbMzldOyBcCisgICAgWCMjc2EwID0gc3RhdGVbNDBdOyBcCisgICAgWCMjc2ExID0gc3RhdGVbNDFdOyBcCisgICAgWCMjc2UwID0gc3RhdGVbNDJdOyBcCisgICAgWCMjc2UxID0gc3RhdGVbNDNdOyBcCisgICAgWCMjc2kwID0gc3RhdGVbNDRdOyBcCisgICAgWCMjc2kxID0gc3RhdGVbNDVdOyBcCisgICAgWCMjc28wID0gc3RhdGVbNDZdOyBcCisgICAgWCMjc28xID0gc3RhdGVbNDddOyBcCisgICAgWCMjc3UwID0gc3RhdGVbNDhdOyBcCisgICAgWCMjc3UxID0gc3RhdGVbNDldOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhMCA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JlMSA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2JvMCA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2J1MSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2dlMCA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XTsgXAorICAgIFgjI2dpMSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI2d1MCA9IHN0YXRlWzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXTsgXAorICAgIFgjI2thMSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXTsgXAorICAgIFgjI2tpMCA9IHN0YXRlWzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XTsgXAorICAgIFgjI2tvMSA9IHN0YXRlWzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XTsgXAorICAgIFgjI21hMCA9IHN0YXRlWzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmEwOyBcCisgICAgc3RhdGVbIDFdID0gWCMjYmExOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmUwOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYmUxOyBcCisgICAgc3RhdGVbIDRdID0gWCMjYmkwOyBcCisgICAgc3RhdGVbIDVdID0gWCMjYmkxOyBcCisgICAgc3RhdGVbIDZdID0gWCMjYm8wOyBcCisgICAgc3RhdGVbIDddID0gWCMjYm8xOyBcCisgICAgc3RhdGVbIDhdID0gWCMjYnUwOyBcCisgICAgc3RhdGVbIDldID0gWCMjYnUxOyBcCisgICAgc3RhdGVbMTBdID0gWCMjZ2EwOyBcCisgICAgc3RhdGVbMTFdID0gWCMjZ2ExOyBcCisgICAgc3RhdGVbMTJdID0gWCMjZ2UwOyBcCisgICAgc3RhdGVbMTNdID0gWCMjZ2UxOyBcCisgICAgc3RhdGVbMTRdID0gWCMjZ2kwOyBcCisgICAgc3RhdGVbMTVdID0gWCMjZ2kxOyBcCisgICAgc3RhdGVbMTZdID0gWCMjZ28wOyBcCisgICAgc3RhdGVbMTddID0gWCMjZ28xOyBcCisgICAgc3RhdGVbMThdID0gWCMjZ3UwOyBcCisgICAgc3RhdGVbMTldID0gWCMjZ3UxOyBcCisgICAgc3RhdGVbMjBdID0gWCMja2EwOyBcCisgICAgc3RhdGVbMjFdID0gWCMja2ExOyBcCisgICAgc3RhdGVbMjJdID0gWCMja2UwOyBcCisgICAgc3RhdGVbMjNdID0gWCMja2UxOyBcCisgICAgc3RhdGVbMjRdID0gWCMja2kwOyBcCisgICAgc3RhdGVbMjVdID0gWCMja2kxOyBcCisgICAgc3RhdGVbMjZdID0gWCMja28wOyBcCisgICAgc3RhdGVbMjddID0gWCMja28xOyBcCisgICAgc3RhdGVbMjhdID0gWCMja3UwOyBcCisgICAgc3RhdGVbMjldID0gWCMja3UxOyBcCisgICAgc3RhdGVbMzBdID0gWCMjbWEwOyBcCisgICAgc3RhdGVbMzFdID0gWCMjbWExOyBcCisgICAgc3RhdGVbMzJdID0gWCMjbWUwOyBcCisgICAgc3RhdGVbMzNdID0gWCMjbWUxOyBcCisgICAgc3RhdGVbMzRdID0gWCMjbWkwOyBcCisgICAgc3RhdGVbMzVdID0gWCMjbWkxOyBcCisgICAgc3RhdGVbMzZdID0gWCMjbW8wOyBcCisgICAgc3RhdGVbMzddID0gWCMjbW8xOyBcCisgICAgc3RhdGVbMzhdID0gWCMjbXUwOyBcCisgICAgc3RhdGVbMzldID0gWCMjbXUxOyBcCisgICAgc3RhdGVbNDBdID0gWCMjc2EwOyBcCisgICAgc3RhdGVbNDFdID0gWCMjc2ExOyBcCisgICAgc3RhdGVbNDJdID0gWCMjc2UwOyBcCisgICAgc3RhdGVbNDNdID0gWCMjc2UxOyBcCisgICAgc3RhdGVbNDRdID0gWCMjc2kwOyBcCisgICAgc3RhdGVbNDVdID0gWCMjc2kxOyBcCisgICAgc3RhdGVbNDZdID0gWCMjc28wOyBcCisgICAgc3RhdGVbNDddID0gWCMjc28xOyBcCisgICAgc3RhdGVbNDhdID0gWCMjc3UwOyBcCisgICAgc3RhdGVbNDldID0gWCMjc3UxOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYTAgPSBZIyNiYTA7IFwKKyAgICBYIyNiYTEgPSBZIyNiYTE7IFwKKyAgICBYIyNiZTAgPSBZIyNiZTA7IFwKKyAgICBYIyNiZTEgPSBZIyNiZTE7IFwKKyAgICBYIyNiaTAgPSBZIyNiaTA7IFwKKyAgICBYIyNiaTEgPSBZIyNiaTE7IFwKKyAgICBYIyNibzAgPSBZIyNibzA7IFwKKyAgICBYIyNibzEgPSBZIyNibzE7IFwKKyAgICBYIyNidTAgPSBZIyNidTA7IFwKKyAgICBYIyNidTEgPSBZIyNidTE7IFwKKyAgICBYIyNnYTAgPSBZIyNnYTA7IFwKKyAgICBYIyNnYTEgPSBZIyNnYTE7IFwKKyAgICBYIyNnZTAgPSBZIyNnZTA7IFwKKyAgICBYIyNnZTEgPSBZIyNnZTE7IFwKKyAgICBYIyNnaTAgPSBZIyNnaTA7IFwKKyAgICBYIyNnaTEgPSBZIyNnaTE7IFwKKyAgICBYIyNnbzAgPSBZIyNnbzA7IFwKKyAgICBYIyNnbzEgPSBZIyNnbzE7IFwKKyAgICBYIyNndTAgPSBZIyNndTA7IFwKKyAgICBYIyNndTEgPSBZIyNndTE7IFwKKyAgICBYIyNrYTAgPSBZIyNrYTA7IFwKKyAgICBYIyNrYTEgPSBZIyNrYTE7IFwKKyAgICBYIyNrZTAgPSBZIyNrZTA7IFwKKyAgICBYIyNrZTEgPSBZIyNrZTE7IFwKKyAgICBYIyNraTAgPSBZIyNraTA7IFwKKyAgICBYIyNraTEgPSBZIyNraTE7IFwKKyAgICBYIyNrbzAgPSBZIyNrbzA7IFwKKyAgICBYIyNrbzEgPSBZIyNrbzE7IFwKKyAgICBYIyNrdTAgPSBZIyNrdTA7IFwKKyAgICBYIyNrdTEgPSBZIyNrdTE7IFwKKyAgICBYIyNtYTAgPSBZIyNtYTA7IFwKKyAgICBYIyNtYTEgPSBZIyNtYTE7IFwKKyAgICBYIyNtZTAgPSBZIyNtZTA7IFwKKyAgICBYIyNtZTEgPSBZIyNtZTE7IFwKKyAgICBYIyNtaTAgPSBZIyNtaTA7IFwKKyAgICBYIyNtaTEgPSBZIyNtaTE7IFwKKyAgICBYIyNtbzAgPSBZIyNtbzA7IFwKKyAgICBYIyNtbzEgPSBZIyNtbzE7IFwKKyAgICBYIyNtdTAgPSBZIyNtdTA7IFwKKyAgICBYIyNtdTEgPSBZIyNtdTE7IFwKKyAgICBYIyNzYTAgPSBZIyNzYTA7IFwKKyAgICBYIyNzYTEgPSBZIyNzYTE7IFwKKyAgICBYIyNzZTAgPSBZIyNzZTA7IFwKKyAgICBYIyNzZTEgPSBZIyNzZTE7IFwKKyAgICBYIyNzaTAgPSBZIyNzaTA7IFwKKyAgICBYIyNzaTEgPSBZIyNzaTE7IFwKKyAgICBYIyNzbzAgPSBZIyNzbzA7IFwKKyAgICBYIyNzbzEgPSBZIyNzbzE7IFwKKyAgICBYIyNzdTAgPSBZIyNzdTA7IFwKKyAgICBYIyNzdTEgPSBZIyNzdTE7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLXMyLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMi5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExMTc2MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMi5tYWNyb3MKQEAgLTAsMCArMSwxMTg3IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFVJTlQzMiBBYmEwLCBBYmUwLCBBYmkwLCBBYm8wLCBBYnUwOyBcCisgICAgVUlOVDMyIEFiYTEsIEFiZTEsIEFiaTEsIEFibzEsIEFidTE7IFwKKyAgICBVSU5UMzIgQWdhMCwgQWdlMCwgQWdpMCwgQWdvMCwgQWd1MDsgXAorICAgIFVJTlQzMiBBZ2ExLCBBZ2UxLCBBZ2kxLCBBZ28xLCBBZ3UxOyBcCisgICAgVUlOVDMyIEFrYTAsIEFrZTAsIEFraTAsIEFrbzAsIEFrdTA7IFwKKyAgICBVSU5UMzIgQWthMSwgQWtlMSwgQWtpMSwgQWtvMSwgQWt1MTsgXAorICAgIFVJTlQzMiBBbWEwLCBBbWUwLCBBbWkwLCBBbW8wLCBBbXUwOyBcCisgICAgVUlOVDMyIEFtYTEsIEFtZTEsIEFtaTEsIEFtbzEsIEFtdTE7IFwKKyAgICBVSU5UMzIgQXNhMCwgQXNlMCwgQXNpMCwgQXNvMCwgQXN1MDsgXAorICAgIFVJTlQzMiBBc2ExLCBBc2UxLCBBc2kxLCBBc28xLCBBc3UxOyBcCisgICAgVUlOVDMyIEJiYTAsIEJiZTAsIEJiaTAsIEJibzAsIEJidTA7IFwKKyAgICBVSU5UMzIgQmJhMSwgQmJlMSwgQmJpMSwgQmJvMSwgQmJ1MTsgXAorICAgIFVJTlQzMiBCZ2EwLCBCZ2UwLCBCZ2kwLCBCZ28wLCBCZ3UwOyBcCisgICAgVUlOVDMyIEJnYTEsIEJnZTEsIEJnaTEsIEJnbzEsIEJndTE7IFwKKyAgICBVSU5UMzIgQmthMCwgQmtlMCwgQmtpMCwgQmtvMCwgQmt1MDsgXAorICAgIFVJTlQzMiBCa2ExLCBCa2UxLCBCa2kxLCBCa28xLCBCa3UxOyBcCisgICAgVUlOVDMyIEJtYTAsIEJtZTAsIEJtaTAsIEJtbzAsIEJtdTA7IFwKKyAgICBVSU5UMzIgQm1hMSwgQm1lMSwgQm1pMSwgQm1vMSwgQm11MTsgXAorICAgIFVJTlQzMiBCc2EwLCBCc2UwLCBCc2kwLCBCc28wLCBCc3UwOyBcCisgICAgVUlOVDMyIEJzYTEsIEJzZTEsIEJzaTEsIEJzbzEsIEJzdTE7IFwKKyAgICBVSU5UMzIgQ2EwLCBDZTAsIENpMCwgQ28wLCBDdTA7IFwKKyAgICBVSU5UMzIgQ2ExLCBDZTEsIENpMSwgQ28xLCBDdTE7IFwKKyAgICBVSU5UMzIgRGEwLCBEZTAsIERpMCwgRG8wLCBEdTA7IFwKKyAgICBVSU5UMzIgRGExLCBEZTEsIERpMSwgRG8xLCBEdTE7IFwKKyAgICBVSU5UMzIgRWJhMCwgRWJlMCwgRWJpMCwgRWJvMCwgRWJ1MDsgXAorICAgIFVJTlQzMiBFYmExLCBFYmUxLCBFYmkxLCBFYm8xLCBFYnUxOyBcCisgICAgVUlOVDMyIEVnYTAsIEVnZTAsIEVnaTAsIEVnbzAsIEVndTA7IFwKKyAgICBVSU5UMzIgRWdhMSwgRWdlMSwgRWdpMSwgRWdvMSwgRWd1MTsgXAorICAgIFVJTlQzMiBFa2EwLCBFa2UwLCBFa2kwLCBFa28wLCBFa3UwOyBcCisgICAgVUlOVDMyIEVrYTEsIEVrZTEsIEVraTEsIEVrbzEsIEVrdTE7IFwKKyAgICBVSU5UMzIgRW1hMCwgRW1lMCwgRW1pMCwgRW1vMCwgRW11MDsgXAorICAgIFVJTlQzMiBFbWExLCBFbWUxLCBFbWkxLCBFbW8xLCBFbXUxOyBcCisgICAgVUlOVDMyIEVzYTAsIEVzZTAsIEVzaTAsIEVzbzAsIEVzdTA7IFwKKyAgICBVSU5UMzIgRXNhMSwgRXNlMSwgRXNpMSwgRXNvMSwgRXN1MTsgXAorCisjZGVmaW5lIHByZXBhcmVUaGV0YSBcCisgICAgQ2EwID0gQWJhMF5BZ2EwXkFrYTBeQW1hMF5Bc2EwOyBcCisgICAgQ2ExID0gQWJhMV5BZ2ExXkFrYTFeQW1hMV5Bc2ExOyBcCisgICAgQ2UwID0gQWJlMF5BZ2UwXkFrZTBeQW1lMF5Bc2UwOyBcCisgICAgQ2UxID0gQWJlMV5BZ2UxXkFrZTFeQW1lMV5Bc2UxOyBcCisgICAgQ2kwID0gQWJpMF5BZ2kwXkFraTBeQW1pMF5Bc2kwOyBcCisgICAgQ2kxID0gQWJpMV5BZ2kxXkFraTFeQW1pMV5Bc2kxOyBcCisgICAgQ28wID0gQWJvMF5BZ28wXkFrbzBeQW1vMF5Bc28wOyBcCisgICAgQ28xID0gQWJvMV5BZ28xXkFrbzFeQW1vMV5Bc28xOyBcCisgICAgQ3UwID0gQWJ1MF5BZ3UwXkFrdTBeQW11MF5Bc3UwOyBcCisgICAgQ3UxID0gQWJ1MV5BZ3UxXkFrdTFeQW11MV5Bc3UxOyBcCisKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXiggIEJiZTAgfCAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQ2EwID0gRSMjYmEwOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oICBCYmUxIHwgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIENhMSA9IEUjI2JhMTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXiggIEJnZTAgfCAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXiggIEJnaTAgJiAgQmdvMCApOyBcCisgICAgQ2UwIF49IEUjI2dlMDsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oICBCZ2EwICYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCAgQmdpMSAmICBCZ28xICk7IFwKKyAgICBDZTEgXj0gRSMjZ2UxOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCAgQmdvMSB8KH5CZ3UxKSk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXiggIEJrZTAgfCAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAofkJrbzApXiggIEJrdTAgfCAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXiggIEJraTEgJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXiggIEJrYTEgJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oICBCbWUwICYgIEJtaTAgKTsgXAorICAgIENhMCBePSBFIyNtYTA7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXiggIEJtaTAgfCAgQm1vMCApOyBcCisgICAgQ2UwIF49IEUjI21lMDsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApfCAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCAgQm1lMSAmICBCbWkxICk7IFwKKyAgICBDYTEgXj0gRSMjbWExOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oICBCbWkxIHwgIEJtbzEgKTsgXAorICAgIENlMSBePSBFIyNtZTE7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAofkJtbzEpXiggIEJtdTEgJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIENhMCBePSBFIyNzYTA7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgRSMjc2UwID0gKH5Cc2UwKV4oICBCc2kwIHwgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oICBCc2EwICYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgQ2ExIF49IEUjI3NhMTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCAgQnNvMSAmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gdXNpbmcgZmFjdG9yIDIgaW50ZXJsZWF2aW5nLCA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDMyLWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSBcCisgICAgRGEwID0gQ3UwXlJPTDMyKENlMSwgMSk7IFwKKyAgICBEYTEgPSBDdTFeQ2UwOyBcCisgICAgRGUwID0gQ2EwXlJPTDMyKENpMSwgMSk7IFwKKyAgICBEZTEgPSBDYTFeQ2kwOyBcCisgICAgRGkwID0gQ2UwXlJPTDMyKENvMSwgMSk7IFwKKyAgICBEaTEgPSBDZTFeQ28wOyBcCisgICAgRG8wID0gQ2kwXlJPTDMyKEN1MSwgMSk7IFwKKyAgICBEbzEgPSBDaTFeQ3UwOyBcCisgICAgRHUwID0gQ28wXlJPTDMyKENhMSwgMSk7IFwKKyAgICBEdTEgPSBDbzFeQ2EwOyBcCitcCisgICAgQSMjYmEwIF49IERhMDsgXAorICAgIEJiYTAgPSBBIyNiYTA7IFwKKyAgICBBIyNnZTAgXj0gRGUwOyBcCisgICAgQmJlMCA9IFJPTDMyKEEjI2dlMCwgMjIpOyBcCisgICAgQSMja2kxIF49IERpMTsgXAorICAgIEJiaTAgPSBST0wzMihBIyNraTEsIDIyKTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCAgQmJlMCB8ICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgRSMjYmUwID0gICBCYmUwIF4oKH5CYmkwKXwgIEJibzAgKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JpMCA9ICAgQmJpMCBeKCAgQmJvMCAmICBCYnUwICk7IFwKKyAgICBFIyNibzAgPSAgIEJibzAgXiggIEJidTAgfCAgQmJhMCApOyBcCisgICAgRSMjYnUwID0gICBCYnUwIF4oICBCYmEwICYgIEJiZTAgKTsgXAorXAorICAgIEEjI2JhMSBePSBEYTE7IFwKKyAgICBCYmExID0gQSMjYmExOyBcCisgICAgQSMjZ2UxIF49IERlMTsgXAorICAgIEJiZTEgPSBST0wzMihBIyNnZTEsIDIyKTsgXAorICAgIEEjI2tpMCBePSBEaTA7IFwKKyAgICBCYmkxID0gUk9MMzIoQSMja2kwLCAyMSk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXiggIEJiZTEgfCAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEUjI2JlMSA9ICAgQmJlMSBeKCh+QmJpMSl8ICBCYm8xICk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiaTEgPSAgIEJiaTEgXiggIEJibzEgJiAgQmJ1MSApOyBcCisgICAgRSMjYm8xID0gICBCYm8xIF4oICBCYnUxIHwgIEJiYTEgKTsgXAorICAgIEUjI2J1MSA9ICAgQmJ1MSBeKCAgQmJhMSAmICBCYmUxICk7IFwKK1wKKyAgICBBIyNibzAgXj0gRG8wOyBcCisgICAgQmdhMCA9IFJPTDMyKEEjI2JvMCwgMTQpOyBcCisgICAgQSMjZ3UwIF49IER1MDsgXAorICAgIEJnZTAgPSBST0wzMihBIyNndTAsIDEwKTsgXAorICAgIEEjI2thMSBePSBEYTE7IFwKKyAgICBCZ2kwID0gUk9MMzIoQSMja2ExLCAyKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCAgQmdlMCB8ICBCZ2kwICk7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oICBCZ2kwICYgIEJnbzAgKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgRSMjZ28wID0gICBCZ28wIF4oICBCZ3UwIHwgIEJnYTAgKTsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oICBCZ2kxICYgIEJnbzEgKTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIEUjI2d1MSA9ICAgQmd1MSBeKCAgQmdhMSAmICBCZ2UxICk7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNraTAgPSAgIEJraTAgXigofkJrbzApJiAgQmt1MCApOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKK1wKKyAgICBBIyNiZTAgXj0gRGUwOyBcCisgICAgQmthMSA9IEEjI2JlMDsgXAorICAgIEEjI2dpMSBePSBEaTE7IFwKKyAgICBCa2UxID0gUk9MMzIoQSMjZ2kxLCAzKTsgXAorICAgIEEjI2tvMCBePSBEbzA7IFwKKyAgICBCa2kxID0gUk9MMzIoQSMja28wLCAxMik7IFwKKyAgICBFIyNrYTEgPSAgIEJrYTEgXiggIEJrZTEgfCAgQmtpMSApOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBFIyNrbzEgPSAofkJrbzEpXiggIEJrdTEgfCAgQmthMSApOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oICBCbWUwICYgIEJtaTAgKTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCAgQm1pMCB8ICBCbW8wICk7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBFIyNtdTAgPSAgIEJtdTAgXiggIEJtYTAgfCAgQm1lMCApOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXiggIEJtZTEgJiAgQm1pMSApOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oICBCbWkxIHwgIEJtbzEgKTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtaTEgPSAgIEJtaTEgXigofkJtbzEpfCAgQm11MSApOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKK1wKKyAgICBBIyNiaTAgXj0gRGkwOyBcCisgICAgQnNhMCA9IFJPTDMyKEEjI2JpMCwgMzEpOyBcCisgICAgQSMjZ28xIF49IERvMTsgXAorICAgIEJzZTAgPSBST0wzMihBIyNnbzEsIDI4KTsgXAorICAgIEEjI2t1MSBePSBEdTE7IFwKKyAgICBCc2kwID0gUk9MMzIoQSMja3UxLCAyMCk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgRSMjc28wID0gICBCc28wIF4oICBCc3UwIHwgIEJzYTAgKTsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEUjI3NlMSA9ICh+QnNlMSleKCAgQnNpMSB8ICBCc28xICk7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIEUjI3N1MSA9ICAgQnN1MSBeKCAgQnNhMSAmICBCc2UxICk7IFwKK1wKKworI2Vsc2UgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXigofkJiZTApJiAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQ2EwID0gRSMjYmEwOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oKH5CYmUxKSYgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIENhMSA9IEUjI2JhMTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXigofkJnaTApJiAgQmdvMCApOyBcCisgICAgQ2UwIF49IEUjI2dlMDsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXigofkJnbzApJiAgQmd1MCApOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCh+QmdlMSkmICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCh+QmdpMSkmICBCZ28xICk7IFwKKyAgICBDZTEgXj0gRSMjZ2UxOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oKH5CZ3UxKSYgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCh+QmtpMCkmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCh+QmthMCkmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oKH5CbWUwKSYgIEJtaTAgKTsgXAorICAgIENhMCBePSBFIyNtYTA7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXigofkJtaTApJiAgQm1vMCApOyBcCisgICAgQ2UwIF49IEUjI21lMDsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICAgQm1vMCBeKCh+Qm11MCkmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCh+Qm1lMSkmICBCbWkxICk7IFwKKyAgICBDYTEgXj0gRSMjbWExOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oKH5CbWkxKSYgIEJtbzEgKTsgXAorICAgIENlMSBePSBFIyNtZTE7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCh+Qm1hMSkmICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIENhMCBePSBFIyNzYTA7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXigofkJzbzApJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgQ2ExIF49IEUjI3NhMTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oKH5Cc3UxKSYgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXigofkJiZTApJiAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oKH5CYmUxKSYgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCh+QmdpMCkmICBCZ28wICk7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXigofkJnYTApJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXigofkJnZTEpJiAgQmdpMSApOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCh+QmdpMSkmICBCZ28xICk7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oKH5CZ28xKSYgIEJndTEgKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCh+QmtlMCkmICBCa2kwICk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICAgQmtvMCBeKCh+Qmt1MCkmICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCh+QmtpMSkmICBCa28xICk7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCh+QmthMSkmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCh+Qm1lMCkmICBCbWkwICk7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXigofkJtaTApJiAgQm1vMCApOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCkmICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oKH5CbWUxKSYgIEJtaTEgKTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCh+Qm1pMSkmICBCbW8xICk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICAgQm1vMSBeKCh+Qm11MSkmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBFIyNzZTAgPSAgIEJzZTAgXigofkJzaTApJiAgQnNvMCApOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXigofkJzYTApJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oKH5Cc28xKSYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCitcCisKKyNlbmRpZiAvKiAgVXNlQmViaWdva2ltaXNhICovCisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFsyNF0gPSB7CisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwgfTsKKworY29uc3QgVUlOVDMyIEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDA4OVVMLAorICAgIDB4ODAwMDAwOGJVTCwKKyAgICAweDgwMDA4MDgwVUwsCisgICAgMHgwMDAwMDA4YlVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4MlVMLAorICAgIDB4MDAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDBhVUwsCisgICAgMHgwMDAwODA4MlVMLAorICAgIDB4MDAwMDgwMDNVTCwKKyAgICAweDAwMDA4MDhiVUwsCisgICAgMHg4MDAwMDAwYlVMLAorICAgIDB4ODAwMDAwOGFVTCwKKyAgICAweDgwMDAwMDgxVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwMDhVTCwKKyAgICAweDAwMDAwMDgzVUwsCisgICAgMHg4MDAwODAwM1VMLAorICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDgwMDAwMDg4VUwsCisgICAgMHgwMDAwODAwMFVMLAorICAgIDB4ODAwMDgwODJVTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXV5pbnB1dFszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM11eaW5wdXRbMzNdOyBcCisgICAgWCMjbWkwID0gc3RhdGVbMzRdOyBcCisgICAgWCMjbWkxID0gc3RhdGVbMzVdOyBcCisgICAgWCMjbW8wID0gc3RhdGVbMzZdOyBcCisgICAgWCMjbW8xID0gc3RhdGVbMzddOyBcCisgICAgWCMjbXUwID0gc3RhdGVbMzhdOyBcCisgICAgWCMjbXUxID0gc3RhdGVbMzldOyBcCisgICAgWCMjc2EwID0gc3RhdGVbNDBdOyBcCisgICAgWCMjc2ExID0gc3RhdGVbNDFdOyBcCisgICAgWCMjc2UwID0gc3RhdGVbNDJdOyBcCisgICAgWCMjc2UxID0gc3RhdGVbNDNdOyBcCisgICAgWCMjc2kwID0gc3RhdGVbNDRdOyBcCisgICAgWCMjc2kxID0gc3RhdGVbNDVdOyBcCisgICAgWCMjc28wID0gc3RhdGVbNDZdOyBcCisgICAgWCMjc28xID0gc3RhdGVbNDddOyBcCisgICAgWCMjc3UwID0gc3RhdGVbNDhdOyBcCisgICAgWCMjc3UxID0gc3RhdGVbNDldOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhMCA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JlMSA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2JvMCA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2J1MSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2dlMCA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XTsgXAorICAgIFgjI2dpMSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI2d1MCA9IHN0YXRlWzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXTsgXAorICAgIFgjI2thMSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXTsgXAorICAgIFgjI2tpMCA9IHN0YXRlWzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XTsgXAorICAgIFgjI2tvMSA9IHN0YXRlWzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XTsgXAorICAgIFgjI21hMCA9IHN0YXRlWzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmEwOyBcCisgICAgc3RhdGVbIDFdID0gWCMjYmExOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmUwOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYmUxOyBcCisgICAgc3RhdGVbIDRdID0gWCMjYmkwOyBcCisgICAgc3RhdGVbIDVdID0gWCMjYmkxOyBcCisgICAgc3RhdGVbIDZdID0gWCMjYm8wOyBcCisgICAgc3RhdGVbIDddID0gWCMjYm8xOyBcCisgICAgc3RhdGVbIDhdID0gWCMjYnUwOyBcCisgICAgc3RhdGVbIDldID0gWCMjYnUxOyBcCisgICAgc3RhdGVbMTBdID0gWCMjZ2EwOyBcCisgICAgc3RhdGVbMTFdID0gWCMjZ2ExOyBcCisgICAgc3RhdGVbMTJdID0gWCMjZ2UwOyBcCisgICAgc3RhdGVbMTNdID0gWCMjZ2UxOyBcCisgICAgc3RhdGVbMTRdID0gWCMjZ2kwOyBcCisgICAgc3RhdGVbMTVdID0gWCMjZ2kxOyBcCisgICAgc3RhdGVbMTZdID0gWCMjZ28wOyBcCisgICAgc3RhdGVbMTddID0gWCMjZ28xOyBcCisgICAgc3RhdGVbMThdID0gWCMjZ3UwOyBcCisgICAgc3RhdGVbMTldID0gWCMjZ3UxOyBcCisgICAgc3RhdGVbMjBdID0gWCMja2EwOyBcCisgICAgc3RhdGVbMjFdID0gWCMja2ExOyBcCisgICAgc3RhdGVbMjJdID0gWCMja2UwOyBcCisgICAgc3RhdGVbMjNdID0gWCMja2UxOyBcCisgICAgc3RhdGVbMjRdID0gWCMja2kwOyBcCisgICAgc3RhdGVbMjVdID0gWCMja2kxOyBcCisgICAgc3RhdGVbMjZdID0gWCMja28wOyBcCisgICAgc3RhdGVbMjddID0gWCMja28xOyBcCisgICAgc3RhdGVbMjhdID0gWCMja3UwOyBcCisgICAgc3RhdGVbMjldID0gWCMja3UxOyBcCisgICAgc3RhdGVbMzBdID0gWCMjbWEwOyBcCisgICAgc3RhdGVbMzFdID0gWCMjbWExOyBcCisgICAgc3RhdGVbMzJdID0gWCMjbWUwOyBcCisgICAgc3RhdGVbMzNdID0gWCMjbWUxOyBcCisgICAgc3RhdGVbMzRdID0gWCMjbWkwOyBcCisgICAgc3RhdGVbMzVdID0gWCMjbWkxOyBcCisgICAgc3RhdGVbMzZdID0gWCMjbW8wOyBcCisgICAgc3RhdGVbMzddID0gWCMjbW8xOyBcCisgICAgc3RhdGVbMzhdID0gWCMjbXUwOyBcCisgICAgc3RhdGVbMzldID0gWCMjbXUxOyBcCisgICAgc3RhdGVbNDBdID0gWCMjc2EwOyBcCisgICAgc3RhdGVbNDFdID0gWCMjc2ExOyBcCisgICAgc3RhdGVbNDJdID0gWCMjc2UwOyBcCisgICAgc3RhdGVbNDNdID0gWCMjc2UxOyBcCisgICAgc3RhdGVbNDRdID0gWCMjc2kwOyBcCisgICAgc3RhdGVbNDVdID0gWCMjc2kxOyBcCisgICAgc3RhdGVbNDZdID0gWCMjc28wOyBcCisgICAgc3RhdGVbNDddID0gWCMjc28xOyBcCisgICAgc3RhdGVbNDhdID0gWCMjc3UwOyBcCisgICAgc3RhdGVbNDldID0gWCMjc3UxOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYTAgPSBZIyNiYTA7IFwKKyAgICBYIyNiYTEgPSBZIyNiYTE7IFwKKyAgICBYIyNiZTAgPSBZIyNiZTA7IFwKKyAgICBYIyNiZTEgPSBZIyNiZTE7IFwKKyAgICBYIyNiaTAgPSBZIyNiaTA7IFwKKyAgICBYIyNiaTEgPSBZIyNiaTE7IFwKKyAgICBYIyNibzAgPSBZIyNibzA7IFwKKyAgICBYIyNibzEgPSBZIyNibzE7IFwKKyAgICBYIyNidTAgPSBZIyNidTA7IFwKKyAgICBYIyNidTEgPSBZIyNidTE7IFwKKyAgICBYIyNnYTAgPSBZIyNnYTA7IFwKKyAgICBYIyNnYTEgPSBZIyNnYTE7IFwKKyAgICBYIyNnZTAgPSBZIyNnZTA7IFwKKyAgICBYIyNnZTEgPSBZIyNnZTE7IFwKKyAgICBYIyNnaTAgPSBZIyNnaTA7IFwKKyAgICBYIyNnaTEgPSBZIyNnaTE7IFwKKyAgICBYIyNnbzAgPSBZIyNnbzA7IFwKKyAgICBYIyNnbzEgPSBZIyNnbzE7IFwKKyAgICBYIyNndTAgPSBZIyNndTA7IFwKKyAgICBYIyNndTEgPSBZIyNndTE7IFwKKyAgICBYIyNrYTAgPSBZIyNrYTA7IFwKKyAgICBYIyNrYTEgPSBZIyNrYTE7IFwKKyAgICBYIyNrZTAgPSBZIyNrZTA7IFwKKyAgICBYIyNrZTEgPSBZIyNrZTE7IFwKKyAgICBYIyNraTAgPSBZIyNraTA7IFwKKyAgICBYIyNraTEgPSBZIyNraTE7IFwKKyAgICBYIyNrbzAgPSBZIyNrbzA7IFwKKyAgICBYIyNrbzEgPSBZIyNrbzE7IFwKKyAgICBYIyNrdTAgPSBZIyNrdTA7IFwKKyAgICBYIyNrdTEgPSBZIyNrdTE7IFwKKyAgICBYIyNtYTAgPSBZIyNtYTA7IFwKKyAgICBYIyNtYTEgPSBZIyNtYTE7IFwKKyAgICBYIyNtZTAgPSBZIyNtZTA7IFwKKyAgICBYIyNtZTEgPSBZIyNtZTE7IFwKKyAgICBYIyNtaTAgPSBZIyNtaTA7IFwKKyAgICBYIyNtaTEgPSBZIyNtaTE7IFwKKyAgICBYIyNtbzAgPSBZIyNtbzA7IFwKKyAgICBYIyNtbzEgPSBZIyNtbzE7IFwKKyAgICBYIyNtdTAgPSBZIyNtdTA7IFwKKyAgICBYIyNtdTEgPSBZIyNtdTE7IFwKKyAgICBYIyNzYTAgPSBZIyNzYTA7IFwKKyAgICBYIyNzYTEgPSBZIyNzYTE7IFwKKyAgICBYIyNzZTAgPSBZIyNzZTA7IFwKKyAgICBYIyNzZTEgPSBZIyNzZTE7IFwKKyAgICBYIyNzaTAgPSBZIyNzaTA7IFwKKyAgICBYIyNzaTEgPSBZIyNzaTE7IFwKKyAgICBYIyNzbzAgPSBZIyNzbzA7IFwKKyAgICBYIyNzbzEgPSBZIyNzbzE7IFwKKyAgICBYIyNzdTAgPSBZIyNzdTA7IFwKKyAgICBYIyNzdTEgPSBZIyNzdTE7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkZTYwMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi5tYWNyb3MKQEAgLTAsMCArMSwyNiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZmRlZiBVc2VTY2hlZHVsZQorICAgICNpZiAoVXNlU2NoZWR1bGUgPT0gMSkKKyAgICAgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MiCisgICAgI2VsaWYgKFVzZVNjaGVkdWxlID09IDIpCisgICAgICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtMzItczIubWFjcm9zIgorICAgICNlbGlmIChVc2VTY2hlZHVsZSA9PSAzKQorICAgICAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLXJ2ay5tYWNyb3MiCisgICAgI2Vsc2UKKyAgICAgICAgI2Vycm9yICJUaGlzIHNjaGVkdWxlIGlzIG5vdCBzdXBwb3J0ZWQuIgorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLXMxLm1hY3JvcyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTY0Lm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC02NC5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwZjc4OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC02NC5tYWNyb3MKQEAgLTAsMCArMSw3MjggQEAKKy8qCitDb2RlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IEtlY2Nha1Rvb2xzIQorCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjZGVmaW5lIGRlY2xhcmVBQkNERSBcCisgICAgVUlOVDY0IEFiYSwgQWJlLCBBYmksIEFibywgQWJ1OyBcCisgICAgVUlOVDY0IEFnYSwgQWdlLCBBZ2ksIEFnbywgQWd1OyBcCisgICAgVUlOVDY0IEFrYSwgQWtlLCBBa2ksIEFrbywgQWt1OyBcCisgICAgVUlOVDY0IEFtYSwgQW1lLCBBbWksIEFtbywgQW11OyBcCisgICAgVUlOVDY0IEFzYSwgQXNlLCBBc2ksIEFzbywgQXN1OyBcCisgICAgVUlOVDY0IEJiYSwgQmJlLCBCYmksIEJibywgQmJ1OyBcCisgICAgVUlOVDY0IEJnYSwgQmdlLCBCZ2ksIEJnbywgQmd1OyBcCisgICAgVUlOVDY0IEJrYSwgQmtlLCBCa2ksIEJrbywgQmt1OyBcCisgICAgVUlOVDY0IEJtYSwgQm1lLCBCbWksIEJtbywgQm11OyBcCisgICAgVUlOVDY0IEJzYSwgQnNlLCBCc2ksIEJzbywgQnN1OyBcCisgICAgVUlOVDY0IENhLCBDZSwgQ2ksIENvLCBDdTsgXAorICAgIFVJTlQ2NCBEYSwgRGUsIERpLCBEbywgRHU7IFwKKyAgICBVSU5UNjQgRWJhLCBFYmUsIEViaSwgRWJvLCBFYnU7IFwKKyAgICBVSU5UNjQgRWdhLCBFZ2UsIEVnaSwgRWdvLCBFZ3U7IFwKKyAgICBVSU5UNjQgRWthLCBFa2UsIEVraSwgRWtvLCBFa3U7IFwKKyAgICBVSU5UNjQgRW1hLCBFbWUsIEVtaSwgRW1vLCBFbXU7IFwKKyAgICBVSU5UNjQgRXNhLCBFc2UsIEVzaSwgRXNvLCBFc3U7IFwKKworI2RlZmluZSBwcmVwYXJlVGhldGEgXAorICAgIENhID0gQWJhXkFnYV5Ba2FeQW1hXkFzYTsgXAorICAgIENlID0gQWJlXkFnZV5Ba2VeQW1lXkFzZTsgXAorICAgIENpID0gQWJpXkFnaV5Ba2leQW1pXkFzaTsgXAorICAgIENvID0gQWJvXkFnb15Ba29eQW1vXkFzbzsgXAorICAgIEN1ID0gQWJ1XkFndV5Ba3VeQW11XkFzdTsgXAorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKGxhbmUgY29tcGxlbWVudGluZyBwYXR0ZXJuICdiZWJpZ29raW1pc2EnKSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgRGEgPSBDdV5ST0w2NChDZSwgMSk7IFwKKyAgICBEZSA9IENhXlJPTDY0KENpLCAxKTsgXAorICAgIERpID0gQ2VeUk9MNjQoQ28sIDEpOyBcCisgICAgRG8gPSBDaV5ST0w2NChDdSwgMSk7IFwKKyAgICBEdSA9IENvXlJPTDY0KENhLCAxKTsgXAorXAorICAgIEEjI2JhIF49IERhOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBBIyNnZSBePSBEZTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBBIyNraSBePSBEaTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBBIyNtbyBePSBEbzsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBBIyNzdSBePSBEdTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiYSA9ICAgQmJhIF4oICBCYmUgfCAgQmJpICk7IFwKKyAgICBFIyNiYSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldOyBcCisgICAgQ2EgPSBFIyNiYTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSl8ICBCYm8gKTsgXAorICAgIENlID0gRSMjYmU7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oICBCYm8gJiAgQmJ1ICk7IFwKKyAgICBDaSA9IEUjI2JpOyBcCisgICAgRSMjYm8gPSAgIEJibyBeKCAgQmJ1IHwgIEJiYSApOyBcCisgICAgQ28gPSBFIyNibzsgXAorICAgIEUjI2J1ID0gICBCYnUgXiggIEJiYSAmICBCYmUgKTsgXAorICAgIEN1ID0gRSMjYnU7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXiggIEJnZSB8ICBCZ2kgKTsgXAorICAgIENhIF49IEUjI2dhOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCAgQmdpICYgIEJnbyApOyBcCisgICAgQ2UgXj0gRSMjZ2U7IFwKKyAgICBFIyNnaSA9ICAgQmdpIF4oICBCZ28gfCh+Qmd1KSk7IFwKKyAgICBDaSBePSBFIyNnaTsgXAorICAgIEUjI2dvID0gICBCZ28gXiggIEJndSB8ICBCZ2EgKTsgXAorICAgIENvIF49IEUjI2dvOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCAgQmdhICYgIEJnZSApOyBcCisgICAgQ3UgXj0gRSMjZ3U7IFwKK1wKKyAgICBBIyNiZSBePSBEZTsgXAorICAgIEJrYSA9IFJPTDY0KEEjI2JlLCAxKTsgXAorICAgIEEjI2dpIF49IERpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgQSMja28gXj0gRG87IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgQSMjbXUgXj0gRHU7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBBIyNzYSBePSBEYTsgXAorICAgIEJrdSA9IFJPTDY0KEEjI3NhLCAxOCk7IFwKKyAgICBFIyNrYSA9ICAgQmthIF4oICBCa2UgfCAgQmtpICk7IFwKKyAgICBDYSBePSBFIyNrYTsgXAorICAgIEUjI2tlID0gICBCa2UgXiggIEJraSAmICBCa28gKTsgXAorICAgIENlIF49IEUjI2tlOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgQ2kgXj0gRSMja2k7IFwKKyAgICBFIyNrbyA9ICh+QmtvKV4oICBCa3UgfCAgQmthICk7IFwKKyAgICBDbyBePSBFIyNrbzsgXAorICAgIEUjI2t1ID0gICBCa3UgXiggIEJrYSAmICBCa2UgKTsgXAorICAgIEN1IF49IEUjI2t1OyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCAgQm1lICYgIEJtaSApOyBcCisgICAgQ2EgXj0gRSMjbWE7IFwKKyAgICBFIyNtZSA9ICAgQm1lIF4oICBCbWkgfCAgQm1vICk7IFwKKyAgICBDZSBePSBFIyNtZTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbyl8ICBCbXUgKTsgXAorICAgIENpIF49IEUjI21pOyBcCisgICAgRSMjbW8gPSAofkJtbyleKCAgQm11ICYgIEJtYSApOyBcCisgICAgQ28gXj0gRSMjbW87IFwKKyAgICBFIyNtdSA9ICAgQm11IF4oICBCbWEgfCAgQm1lICk7IFwKKyAgICBDdSBePSBFIyNtdTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgQ2EgXj0gRSMjc2E7IFwKKyAgICBFIyNzZSA9ICh+QnNlKV4oICBCc2kgfCAgQnNvICk7IFwKKyAgICBDZSBePSBFIyNzZTsgXAorICAgIEUjI3NpID0gICBCc2kgXiggIEJzbyAmICBCc3UgKTsgXAorICAgIENpIF49IEUjI3NpOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCAgQnN1IHwgIEJzYSApOyBcCisgICAgQ28gXj0gRSMjc287IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oICBCc2EgJiAgQnNlICk7IFwKKyAgICBDdSBePSBFIyNzdTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhID0gQ3VeUk9MNjQoQ2UsIDEpOyBcCisgICAgRGUgPSBDYV5ST0w2NChDaSwgMSk7IFwKKyAgICBEaSA9IENlXlJPTDY0KENvLCAxKTsgXAorICAgIERvID0gQ2leUk9MNjQoQ3UsIDEpOyBcCisgICAgRHUgPSBDb15ST0w2NChDYSwgMSk7IFwKK1wKKyAgICBBIyNiYSBePSBEYTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgQSMjZ2UgXj0gRGU7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2kgXj0gRGk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgQSMjbW8gXj0gRG87IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgQSMjc3UgXj0gRHU7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmEgPSAgIEJiYSBeKCAgQmJlIHwgIEJiaSApOyBcCisgICAgRSMjYmEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSl8ICBCYm8gKTsgXAorICAgIEUjI2JpID0gICBCYmkgXiggIEJibyAmICBCYnUgKTsgXAorICAgIEUjI2JvID0gICBCYm8gXiggIEJidSB8ICBCYmEgKTsgXAorICAgIEUjI2J1ID0gICBCYnUgXiggIEJiYSAmICBCYmUgKTsgXAorXAorICAgIEEjI2JvIF49IERvOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEEjI2d1IF49IER1OyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIEEjI2thIF49IERhOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQSMjbWUgXj0gRGU7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQSMjc2kgXj0gRGk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2EgPSAgIEJnYSBeKCAgQmdlIHwgIEJnaSApOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCAgQmdpICYgIEJnbyApOyBcCisgICAgRSMjZ2kgPSAgIEJnaSBeKCAgQmdvIHwofkJndSkpOyBcCisgICAgRSMjZ28gPSAgIEJnbyBeKCAgQmd1IHwgIEJnYSApOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCAgQmdhICYgIEJnZSApOyBcCitcCisgICAgQSMjYmUgXj0gRGU7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBBIyNnaSBePSBEaTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tvIF49IERvOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI211IF49IER1OyBcCisgICAgQmtvID0gUk9MNjQoQSMjbXUsIDgpOyBcCisgICAgQSMjc2EgXj0gRGE7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2EgPSAgIEJrYSBeKCAgQmtlIHwgIEJraSApOyBcCisgICAgRSMja2UgPSAgIEJrZSBeKCAgQmtpICYgIEJrbyApOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgRSMja28gPSAofkJrbyleKCAgQmt1IHwgIEJrYSApOyBcCisgICAgRSMja3UgPSAgIEJrdSBeKCAgQmthICYgIEJrZSApOyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCAgQm1lICYgIEJtaSApOyBcCisgICAgRSMjbWUgPSAgIEJtZSBeKCAgQm1pIHwgIEJtbyApOyBcCisgICAgRSMjbWkgPSAgIEJtaSBeKCh+Qm1vKXwgIEJtdSApOyBcCisgICAgRSMjbW8gPSAofkJtbyleKCAgQm11ICYgIEJtYSApOyBcCisgICAgRSMjbXUgPSAgIEJtdSBeKCAgQm1hIHwgIEJtZSApOyBcCitcCisgICAgQSMjYmkgXj0gRGk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgQSMjZ28gXj0gRG87IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgQSMja3UgXj0gRHU7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgQSMjbWEgXj0gRGE7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgQSMjc2UgXj0gRGU7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzYSA9ICAgQnNhIF4oKH5Cc2UpJiAgQnNpICk7IFwKKyAgICBFIyNzZSA9ICh+QnNlKV4oICBCc2kgfCAgQnNvICk7IFwKKyAgICBFIyNzaSA9ICAgQnNpIF4oICBCc28gJiAgQnN1ICk7IFwKKyAgICBFIyNzbyA9ICAgQnNvIF4oICBCc3UgfCAgQnNhICk7IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oICBCc2EgJiAgQnNlICk7IFwKK1wKKworI2Vsc2UgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYSA9IEN1XlJPTDY0KENlLCAxKTsgXAorICAgIERlID0gQ2FeUk9MNjQoQ2ksIDEpOyBcCisgICAgRGkgPSBDZV5ST0w2NChDbywgMSk7IFwKKyAgICBEbyA9IENpXlJPTDY0KEN1LCAxKTsgXAorICAgIER1ID0gQ29eUk9MNjQoQ2EsIDEpOyBcCitcCisgICAgQSMjYmEgXj0gRGE7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIEEjI2dlIF49IERlOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2tpIF49IERpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21vIF49IERvOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEEjI3N1IF49IER1OyBcCisgICAgQmJ1ID0gUk9MNjQoQSMjc3UsIDE0KTsgXAorICAgIEUjI2JhID0gICBCYmEgXigofkJiZSkmICBCYmkgKTsgXAorICAgIEUjI2JhIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV07IFwKKyAgICBDYSA9IEUjI2JhOyBcCisgICAgRSMjYmUgPSAgIEJiZSBeKCh+QmJpKSYgIEJibyApOyBcCisgICAgQ2UgPSBFIyNiZTsgXAorICAgIEUjI2JpID0gICBCYmkgXigofkJibykmICBCYnUgKTsgXAorICAgIENpID0gRSMjYmk7IFwKKyAgICBFIyNibyA9ICAgQmJvIF4oKH5CYnUpJiAgQmJhICk7IFwKKyAgICBDbyA9IEUjI2JvOyBcCisgICAgRSMjYnUgPSAgIEJidSBeKCh+QmJhKSYgIEJiZSApOyBcCisgICAgQ3UgPSBFIyNidTsgXAorXAorICAgIEEjI2JvIF49IERvOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEEjI2d1IF49IER1OyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIEEjI2thIF49IERhOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQSMjbWUgXj0gRGU7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQSMjc2kgXj0gRGk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2EgPSAgIEJnYSBeKCh+QmdlKSYgIEJnaSApOyBcCisgICAgQ2EgXj0gRSMjZ2E7IFwKKyAgICBFIyNnZSA9ICAgQmdlIF4oKH5CZ2kpJiAgQmdvICk7IFwKKyAgICBDZSBePSBFIyNnZTsgXAorICAgIEUjI2dpID0gICBCZ2kgXigofkJnbykmICBCZ3UgKTsgXAorICAgIENpIF49IEUjI2dpOyBcCisgICAgRSMjZ28gPSAgIEJnbyBeKCh+Qmd1KSYgIEJnYSApOyBcCisgICAgQ28gXj0gRSMjZ287IFwKKyAgICBFIyNndSA9ICAgQmd1IF4oKH5CZ2EpJiAgQmdlICk7IFwKKyAgICBDdSBePSBFIyNndTsgXAorXAorICAgIEEjI2JlIF49IERlOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgQSMjZ2kgXj0gRGk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrbyBePSBEbzsgXAorICAgIEJraSA9IFJPTDY0KEEjI2tvLCAyNSk7IFwKKyAgICBBIyNtdSBePSBEdTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEEjI3NhIF49IERhOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2thID0gICBCa2EgXigofkJrZSkmICBCa2kgKTsgXAorICAgIENhIF49IEUjI2thOyBcCisgICAgRSMja2UgPSAgIEJrZSBeKCh+QmtpKSYgIEJrbyApOyBcCisgICAgQ2UgXj0gRSMja2U7IFwKKyAgICBFIyNraSA9ICAgQmtpIF4oKH5Ca28pJiAgQmt1ICk7IFwKKyAgICBDaSBePSBFIyNraTsgXAorICAgIEUjI2tvID0gICBCa28gXigofkJrdSkmICBCa2EgKTsgXAorICAgIENvIF49IEUjI2tvOyBcCisgICAgRSMja3UgPSAgIEJrdSBeKCh+QmthKSYgIEJrZSApOyBcCisgICAgQ3UgXj0gRSMja3U7IFwKK1wKKyAgICBBIyNidSBePSBEdTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBBIyNnYSBePSBEYTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBBIyNrZSBePSBEZTsgXAorICAgIEJtaSA9IFJPTDY0KEEjI2tlLCAxMCk7IFwKKyAgICBBIyNtaSBePSBEaTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBBIyNzbyBePSBEbzsgXAorICAgIEJtdSA9IFJPTDY0KEEjI3NvLCA1Nik7IFwKKyAgICBFIyNtYSA9ICAgQm1hIF4oKH5CbWUpJiAgQm1pICk7IFwKKyAgICBDYSBePSBFIyNtYTsgXAorICAgIEUjI21lID0gICBCbWUgXigofkJtaSkmICBCbW8gKTsgXAorICAgIENlIF49IEUjI21lOyBcCisgICAgRSMjbWkgPSAgIEJtaSBeKCh+Qm1vKSYgIEJtdSApOyBcCisgICAgQ2kgXj0gRSMjbWk7IFwKKyAgICBFIyNtbyA9ICAgQm1vIF4oKH5CbXUpJiAgQm1hICk7IFwKKyAgICBDbyBePSBFIyNtbzsgXAorICAgIEUjI211ID0gICBCbXUgXigofkJtYSkmICBCbWUgKTsgXAorICAgIEN1IF49IEUjI211OyBcCitcCisgICAgQSMjYmkgXj0gRGk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgQSMjZ28gXj0gRG87IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgQSMja3UgXj0gRHU7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgQSMjbWEgXj0gRGE7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgQSMjc2UgXj0gRGU7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzYSA9ICAgQnNhIF4oKH5Cc2UpJiAgQnNpICk7IFwKKyAgICBDYSBePSBFIyNzYTsgXAorICAgIEUjI3NlID0gICBCc2UgXigofkJzaSkmICBCc28gKTsgXAorICAgIENlIF49IEUjI3NlOyBcCisgICAgRSMjc2kgPSAgIEJzaSBeKCh+QnNvKSYgIEJzdSApOyBcCisgICAgQ2kgXj0gRSMjc2k7IFwKKyAgICBFIyNzbyA9ICAgQnNvIF4oKH5Cc3UpJiAgQnNhICk7IFwKKyAgICBDbyBePSBFIyNzbzsgXAorICAgIEUjI3N1ID0gICBCc3UgXigofkJzYSkmICBCc2UgKTsgXAorICAgIEN1IF49IEUjI3N1OyBcCitcCisKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhID0gQ3VeUk9MNjQoQ2UsIDEpOyBcCisgICAgRGUgPSBDYV5ST0w2NChDaSwgMSk7IFwKKyAgICBEaSA9IENlXlJPTDY0KENvLCAxKTsgXAorICAgIERvID0gQ2leUk9MNjQoQ3UsIDEpOyBcCisgICAgRHUgPSBDb15ST0w2NChDYSwgMSk7IFwKK1wKKyAgICBBIyNiYSBePSBEYTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgQSMjZ2UgXj0gRGU7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2kgXj0gRGk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgQSMjbW8gXj0gRG87IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgQSMjc3UgXj0gRHU7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmEgPSAgIEJiYSBeKCh+QmJlKSYgIEJiaSApOyBcCisgICAgRSMjYmEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSkmICBCYm8gKTsgXAorICAgIEUjI2JpID0gICBCYmkgXigofkJibykmICBCYnUgKTsgXAorICAgIEUjI2JvID0gICBCYm8gXigofkJidSkmICBCYmEgKTsgXAorICAgIEUjI2J1ID0gICBCYnUgXigofkJiYSkmICBCYmUgKTsgXAorXAorICAgIEEjI2JvIF49IERvOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEEjI2d1IF49IER1OyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIEEjI2thIF49IERhOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQSMjbWUgXj0gRGU7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQSMjc2kgXj0gRGk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2EgPSAgIEJnYSBeKCh+QmdlKSYgIEJnaSApOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCh+QmdpKSYgIEJnbyApOyBcCisgICAgRSMjZ2kgPSAgIEJnaSBeKCh+QmdvKSYgIEJndSApOyBcCisgICAgRSMjZ28gPSAgIEJnbyBeKCh+Qmd1KSYgIEJnYSApOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCh+QmdhKSYgIEJnZSApOyBcCitcCisgICAgQSMjYmUgXj0gRGU7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBBIyNnaSBePSBEaTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tvIF49IERvOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI211IF49IER1OyBcCisgICAgQmtvID0gUk9MNjQoQSMjbXUsIDgpOyBcCisgICAgQSMjc2EgXj0gRGE7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2EgPSAgIEJrYSBeKCh+QmtlKSYgIEJraSApOyBcCisgICAgRSMja2UgPSAgIEJrZSBeKCh+QmtpKSYgIEJrbyApOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgRSMja28gPSAgIEJrbyBeKCh+Qmt1KSYgIEJrYSApOyBcCisgICAgRSMja3UgPSAgIEJrdSBeKCh+QmthKSYgIEJrZSApOyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCh+Qm1lKSYgIEJtaSApOyBcCisgICAgRSMjbWUgPSAgIEJtZSBeKCh+Qm1pKSYgIEJtbyApOyBcCisgICAgRSMjbWkgPSAgIEJtaSBeKCh+Qm1vKSYgIEJtdSApOyBcCisgICAgRSMjbW8gPSAgIEJtbyBeKCh+Qm11KSYgIEJtYSApOyBcCisgICAgRSMjbXUgPSAgIEJtdSBeKCh+Qm1hKSYgIEJtZSApOyBcCitcCisgICAgQSMjYmkgXj0gRGk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgQSMjZ28gXj0gRG87IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgQSMja3UgXj0gRHU7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgQSMjbWEgXj0gRGE7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgQSMjc2UgXj0gRGU7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzYSA9ICAgQnNhIF4oKH5Cc2UpJiAgQnNpICk7IFwKKyAgICBFIyNzZSA9ICAgQnNlIF4oKH5Cc2kpJiAgQnNvICk7IFwKKyAgICBFIyNzaSA9ICAgQnNpIF4oKH5Cc28pJiAgQnN1ICk7IFwKKyAgICBFIyNzbyA9ICAgQnNvIF4oKH5Cc3UpJiAgQnNhICk7IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oKH5Cc2EpJiAgQnNlICk7IFwKK1wKKworI2VuZGlmIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmUgPSBzdGF0ZVsgMV1eaW5wdXRbIDFdOyBcCisgICAgWCMjYmkgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYm8gPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYnUgPSBzdGF0ZVsgNF1eaW5wdXRbIDRdOyBcCisgICAgWCMjZ2EgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjZ2UgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjZ2kgPSBzdGF0ZVsgN11eaW5wdXRbIDddOyBcCisgICAgWCMjZ28gPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjZ3UgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF1eaW5wdXRbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMja2kgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwMjRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2t1ID0gc3RhdGVbMTRdXmlucHV0WzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2t1ID0gc3RhdGVbMTRdXmlucHV0WzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI21pID0gc3RhdGVbMTddXmlucHV0WzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEzNDRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2t1ID0gc3RhdGVbMTRdXmlucHV0WzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI21pID0gc3RhdGVbMTddXmlucHV0WzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI3NhID0gc3RhdGVbMjBdXmlucHV0WzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdOyBcCisgICAgWCMjYmUgPSBzdGF0ZVsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdOyBcCisgICAgWCMjYnUgPSBzdGF0ZVsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdOyBcCisgICAgWCMjZ2kgPSBzdGF0ZVsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weVRvU3RhdGUoc3RhdGUsIFgpIFwKKyAgICBzdGF0ZVsgMF0gPSBYIyNiYTsgXAorICAgIHN0YXRlWyAxXSA9IFgjI2JlOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmk7IFwKKyAgICBzdGF0ZVsgM10gPSBYIyNibzsgXAorICAgIHN0YXRlWyA0XSA9IFgjI2J1OyBcCisgICAgc3RhdGVbIDVdID0gWCMjZ2E7IFwKKyAgICBzdGF0ZVsgNl0gPSBYIyNnZTsgXAorICAgIHN0YXRlWyA3XSA9IFgjI2dpOyBcCisgICAgc3RhdGVbIDhdID0gWCMjZ287IFwKKyAgICBzdGF0ZVsgOV0gPSBYIyNndTsgXAorICAgIHN0YXRlWzEwXSA9IFgjI2thOyBcCisgICAgc3RhdGVbMTFdID0gWCMja2U7IFwKKyAgICBzdGF0ZVsxMl0gPSBYIyNraTsgXAorICAgIHN0YXRlWzEzXSA9IFgjI2tvOyBcCisgICAgc3RhdGVbMTRdID0gWCMja3U7IFwKKyAgICBzdGF0ZVsxNV0gPSBYIyNtYTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI21lOyBcCisgICAgc3RhdGVbMTddID0gWCMjbWk7IFwKKyAgICBzdGF0ZVsxOF0gPSBYIyNtbzsgXAorICAgIHN0YXRlWzE5XSA9IFgjI211OyBcCisgICAgc3RhdGVbMjBdID0gWCMjc2E7IFwKKyAgICBzdGF0ZVsyMV0gPSBYIyNzZTsgXAorICAgIHN0YXRlWzIyXSA9IFgjI3NpOyBcCisgICAgc3RhdGVbMjNdID0gWCMjc287IFwKKyAgICBzdGF0ZVsyNF0gPSBYIyNzdTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmEgPSBZIyNiYTsgXAorICAgIFgjI2JlID0gWSMjYmU7IFwKKyAgICBYIyNiaSA9IFkjI2JpOyBcCisgICAgWCMjYm8gPSBZIyNibzsgXAorICAgIFgjI2J1ID0gWSMjYnU7IFwKKyAgICBYIyNnYSA9IFkjI2dhOyBcCisgICAgWCMjZ2UgPSBZIyNnZTsgXAorICAgIFgjI2dpID0gWSMjZ2k7IFwKKyAgICBYIyNnbyA9IFkjI2dvOyBcCisgICAgWCMjZ3UgPSBZIyNndTsgXAorICAgIFgjI2thID0gWSMja2E7IFwKKyAgICBYIyNrZSA9IFkjI2tlOyBcCisgICAgWCMja2kgPSBZIyNraTsgXAorICAgIFgjI2tvID0gWSMja287IFwKKyAgICBYIyNrdSA9IFkjI2t1OyBcCisgICAgWCMjbWEgPSBZIyNtYTsgXAorICAgIFgjI21lID0gWSMjbWU7IFwKKyAgICBYIyNtaSA9IFkjI21pOyBcCisgICAgWCMjbW8gPSBZIyNtbzsgXAorICAgIFgjI211ID0gWSMjbXU7IFwKKyAgICBYIyNzYSA9IFkjI3NhOyBcCisgICAgWCMjc2UgPSBZIyNzZTsgXAorICAgIFgjI3NpID0gWSMjc2k7IFwKKyAgICBYIyNzbyA9IFkjI3NvOyBcCisgICAgWCMjc3UgPSBZIyNzdTsgXAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50LXNldC5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludC1zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQxZDgwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludC1zZXQuaApAQCAtMCwwICsxLDYgQEAKKyNkZWZpbmUgUHJvdmlkZUZhc3Q1NzYKKyNkZWZpbmUgUHJvdmlkZUZhc3Q4MzIKKyNkZWZpbmUgUHJvdmlkZUZhc3QxMDI0CisjZGVmaW5lIFByb3ZpZGVGYXN0MTA4OAorI2RlZmluZSBQcm92aWRlRmFzdDExNTIKKyNkZWZpbmUgUHJvdmlkZUZhc3QxMzQ0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyNzEwZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaApAQCAtMCwwICsxLDQ2IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2lmbmRlZiBfS2VjY2FrUGVybXV0YXRpb25JbnRlcmZhY2VfaF8KKyNkZWZpbmUgX0tlY2Nha1Blcm11dGF0aW9uSW50ZXJmYWNlX2hfCisKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50LXNldC5oIgorCitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplKCB2b2lkICk7CitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplU3RhdGUodW5zaWduZWQgY2hhciAqc3RhdGUpOworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb24odW5zaWduZWQgY2hhciAqc3RhdGUpOworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI1NzZiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0ODMyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI4MzJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTAyNGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDg4Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjExNTJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTM0NGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIodW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpOworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrRXh0cmFjdDEwMjRiaXRzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgS2VjY2FrRXh0cmFjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxhbmVDb3VudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLXNldHRpbmdzLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0MzItc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVjNzgyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLXNldHRpbmdzLmgKQEAgLTAsMCArMSw2IEBACisvKgorI2RlZmluZSBVbnJvbGxpbmcgMgorI2RlZmluZSBVc2VCZWJpZ29raW1pc2EKKyNkZWZpbmUgVXNlSW50ZXJsZWF2ZVRhYmxlcworI2RlZmluZSBVc2VTY2hlZHVsZSAzCisqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTJiZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMKQEAgLTAsMCArMSw1MjQgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiAjaW5jbHVkZSAiYnJnX2VuZGlhbi5oIiAqLworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1vcHQzMi1zZXR0aW5ncy5oIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UMzI7CisvKiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgVUlOVDY0OyAqLworCisjaWZkZWYgVXNlSW50ZXJsZWF2ZVRhYmxlcworc3RhdGljIGludCBpbnRlcmxlYXZlVGFibGVzQnVpbHQgPSAwOworc3RhdGljIFVJTlQxNiBpbnRlcmxlYXZlVGFibGVbNjU1MzZdOworc3RhdGljIFVJTlQxNiBkZWludGVybGVhdmVUYWJsZVs2NTUzNl07CisKK3N0YXRpYyB2b2lkIGJ1aWxkSW50ZXJsZWF2ZVRhYmxlcygpCit7CisgICAgVUlOVDMyIGksIGo7CisgICAgVUlOVDE2IHg7CisKKyAgICBpZiAoIWludGVybGVhdmVUYWJsZXNCdWlsdCkgeworICAgICAgICBmb3IoaT0wOyBpPDY1NTM2OyBpKyspIHsKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgZm9yKGo9MDsgajwxNjsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgJiAoMSA8PCBqKSkKKyAgICAgICAgICAgICAgICAgICAgeCB8PSAoMSA8PCAoai8yICsgOCooaiUyKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50ZXJsZWF2ZVRhYmxlW2ldID0geDsKKyAgICAgICAgICAgIGRlaW50ZXJsZWF2ZVRhYmxlW3hdID0gKFVJTlQxNilpOworICAgICAgICB9CisgICAgICAgIGludGVybGVhdmVUYWJsZXNCdWlsdCA9IDE7CisgICAgfQorfQorCisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKworI2RlZmluZSB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgaikgXAorICAgIGkjI2ogPSBpbnRlcmxlYXZlVGFibGVbKChjb25zdCBVSU5UMTYqKXNvdXJjZSlbal1dOyBcCisgICAgKChVSU5UOCopZXZlbilbal0gXj0gaSMjaiAmIDB4RkY7IFwKKyAgICAoKFVJTlQ4KilvZGQpW2pdIF49IGkjI2ogPj4gODsKKworI2RlZmluZSBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIGopIFwKKyAgICBkIyNqID0gZGVpbnRlcmxlYXZlVGFibGVbKChldmVuID4+IChqKjgpKSAmIDB4RkYpIF4gKCgob2RkID4+IChqKjgpKSAmIDB4RkYpIDw8IDgpXTsgXAorICAgICgoVUlOVDE2KilkZXN0KVtqXSA9IGQjI2o7CisKKyNlbHNlIC8qICAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKSAqLworCisjZGVmaW5lIHhvcjJieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKGV2ZW4sIG9kZCwgc291cmNlLCBqKSBcCisgICAgaSMjaiA9IGludGVybGVhdmVUYWJsZVtzb3VyY2VbMipqXSBeICgoVUlOVDE2KXNvdXJjZVsyKmorMV0gPDwgOCldOyBcCisgICAgKmV2ZW4gXj0gKGkjI2ogJiAweEZGKSA8PCAoaio4KTsgXAorICAgICpvZGQgXj0gKChpIyNqID4+IDgpICYgMHhGRikgPDwgKGoqOCk7CisKKyNkZWZpbmUgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCBqKSBcCisgICAgZCMjaiA9IGRlaW50ZXJsZWF2ZVRhYmxlWygoZXZlbiA+PiAoaio4KSkgJiAweEZGKSBeICgoKG9kZCA+PiAoaio4KSkgJiAweEZGKSA8PCA4KV07IFwKKyAgICBkZXN0WzIqal0gPSBkIyNqICYgMHhGRjsgXAorICAgIGRlc3RbMipqKzFdID0gZCMjaiA+PiA4OworCisjZW5kaWYgLyogIEVuZGlhbm5lc3MgKi8KKworc3RhdGljIHZvaWQgeG9yOGJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoVUlOVDMyICpldmVuLCBVSU5UMzIgKm9kZCwgY29uc3QgVUlOVDgqIHNvdXJjZSkKK3sKKyAgICBVSU5UMTYgaTAsIGkxLCBpMiwgaTM7CisKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMCkKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMSkKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMikKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMykKK30KKworI2RlZmluZSB4b3JMYW5lc0ludG9TdGF0ZShsYW5lQ291bnQsIHN0YXRlLCBpbnB1dCkgXAorICAgIHsgXAorICAgICAgICBpbnQgaTsgXAorICAgICAgICBmb3IoaT0wOyBpPChsYW5lQ291bnQpOyBpKyspIFwKKyAgICAgICAgICAgIHhvcjhieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKHN0YXRlK2kqMiwgc3RhdGUraSoyKzEsIGlucHV0K2kqOCk7IFwKKyAgICB9CisKK3N0YXRpYyB2b2lkIHNldEludGVybGVhdmVkV29yZHNJbnRvOGJ5dGVzKFVJTlQ4KiBkZXN0LCBVSU5UMzIgZXZlbiwgVUlOVDMyIG9kZCkKK3sKKyAgICBVSU5UMTYgZDAsIGQxLCBkMiwgZDM7CisKKyAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIDApCisgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCAxKQorICAgIHNldEludGVybGVhdmVkV29yZHNJbnRvMmJ5dGVzKGRlc3QsIGV2ZW4sIG9kZCwgMikKKyAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIDMpCit9CisKKyNkZWZpbmUgZXh0cmFjdExhbmVzKGxhbmVDb3VudCwgc3RhdGUsIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhkYXRhK2kqOCwgKChVSU5UMzIqKXN0YXRlKVtpKjJdLCAoKFVJTlQzMiopc3RhdGUpW2kqMisxXSk7IFwKKyAgICB9CisKKyNlbHNlIC8qICBObyBpbnRlcmxlYXZpbmcgdGFibGVzICovCisKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorCisvKiAgQ3JlZGl0OiBIZW5yeSBTLiBXYXJyZW4sIEhhY2tlcidzIERlbGlnaHQsIEFkZGlzb24tV2VzbGV5LCAyMDAyICovCisjZGVmaW5lIHhvckludGVybGVhdmVkTEUocmF0ZUluTGFuZXMsIHN0YXRlLCBpbnB1dCkgXAorCXsgXAorCQljb25zdCBVSU5UMzIgKiBwSSA9IChjb25zdCBVSU5UMzIgKilpbnB1dDsgXAorCQlVSU5UMzIgKiBwUyA9IHN0YXRlOyBcCisJCVVJTlQzMiB0LCB4MCwgeDE7IFwKKwkgICAgaW50IGk7IFwKKwkgICAgZm9yIChpID0gKHJhdGVJbkxhbmVzKS0xOyBpID49IDA7IC0taSkgXAorCQl7IFwKKwkJCXgwID0gKihwSSsrKTsgXAorCQkJdCA9ICh4MCBeICh4MCA+PiAgMSkpICYgMHgyMjIyMjIyMlVMOyAgeDAgPSB4MCBeIHQgXiAodCA8PCAgMSk7IFwKKwkJCXQgPSAoeDAgXiAoeDAgPj4gIDIpKSAmIDB4MEMwQzBDMENVTDsgIHgwID0geDAgXiB0IF4gKHQgPDwgIDIpOyBcCisJCQl0ID0gKHgwIF4gKHgwID4+ICA0KSkgJiAweDAwRjAwMEYwVUw7ICB4MCA9IHgwIF4gdCBeICh0IDw8ICA0KTsgXAorCQkJdCA9ICh4MCBeICh4MCA+PiAgOCkpICYgMHgwMDAwRkYwMFVMOyAgeDAgPSB4MCBeIHQgXiAodCA8PCAgOCk7IFwKKyAJCQl4MSA9ICoocEkrKyk7IFwKKwkJCXQgPSAoeDEgXiAoeDEgPj4gIDEpKSAmIDB4MjIyMjIyMjJVTDsgIHgxID0geDEgXiB0IF4gKHQgPDwgIDEpOyBcCisJCQl0ID0gKHgxIF4gKHgxID4+ICAyKSkgJiAweDBDMEMwQzBDVUw7ICB4MSA9IHgxIF4gdCBeICh0IDw8ICAyKTsgXAorCQkJdCA9ICh4MSBeICh4MSA+PiAgNCkpICYgMHgwMEYwMDBGMFVMOyAgeDEgPSB4MSBeIHQgXiAodCA8PCAgNCk7IFwKKwkJCXQgPSAoeDEgXiAoeDEgPj4gIDgpKSAmIDB4MDAwMEZGMDBVTDsgIHgxID0geDEgXiB0IF4gKHQgPDwgIDgpOyBcCisJCQkqKHBTKyspIF49IChVSU5UMTYpeDAgfCAoeDEgPDwgMTYpOyBcCisJCQkqKHBTKyspIF49ICh4MCA+PiAxNikgfCAoeDEgJiAweEZGRkYwMDAwKTsgXAorCQl9IFwKKwl9CisKKyNkZWZpbmUgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpIFwKKyAgICB4b3JJbnRlcmxlYXZlZExFKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KQorCisjZWxzZSAvKiAgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfQklHX0VORElBTikgKi8KKworLyogIENyZWRpdDogSGVucnkgUy4gV2FycmVuLCBIYWNrZXIncyBEZWxpZ2h0LCBBZGRpc29uLVdlc2xleSwgMjAwMiAqLworVUlOVDY0IHRvSW50ZXJsZWF2aW5nKFVJTlQ2NCB4KSAKK3sKKyAgIFVJTlQ2NCB0OworCisgICB0ID0gKHggXiAoeCA+PiAgMSkpICYgMHgyMjIyMjIyMjIyMjIyMjIyVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDEpOworICAgdCA9ICh4IF4gKHggPj4gIDIpKSAmIDB4MEMwQzBDMEMwQzBDMEMwQ1VMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAyKTsKKyAgIHQgPSAoeCBeICh4ID4+ICA0KSkgJiAweDAwRjAwMEYwMDBGMDAwRjBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgNCk7CisgICB0ID0gKHggXiAoeCA+PiAgOCkpICYgMHgwMDAwRkYwMDAwMDBGRjAwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDgpOworICAgdCA9ICh4IF4gKHggPj4gMTYpKSAmIDB4MDAwMDAwMDBGRkZGMDAwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8IDE2KTsKKworICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkIHhvcjhieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKFVJTlQzMiogZXZlbkFuZE9kZCwgY29uc3QgVUlOVDgqIHNvdXJjZSkKK3sKKyAgICAvKiAgVGhpcyBjYW4gYmUgb3B0aW1pemVkICovCisgICAgVUlOVDY0IHNvdXJjZVdvcmQgPQorICAgICAgICAoVUlOVDY0KXNvdXJjZVswXQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbMV0pIDw8ICA4KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbMl0pIDw8IDE2KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbM10pIDw8IDI0KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbNF0pIDw8IDMyKQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbNV0pIDw8IDQwKQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbNl0pIDw8IDQ4KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbN10pIDw8IDU2KTsKKyAgICBVSU5UNjQgZXZlbkFuZE9kZFdvcmQgPSB0b0ludGVybGVhdmluZyhzb3VyY2VXb3JkKTsKKyAgICBldmVuQW5kT2RkWzBdIF49IChVSU5UMzIpZXZlbkFuZE9kZFdvcmQ7CisgICAgZXZlbkFuZE9kZFsxXSBePSAoVUlOVDMyKShldmVuQW5kT2RkV29yZCA+PiAzMik7Cit9CisKKyNkZWZpbmUgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpIFwKKyAgICB7IFwKKyAgICAgICAgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICB4b3I4Ynl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhzdGF0ZStpKjIsIGlucHV0K2kqOCk7IFwKKyAgICB9CisKKyNlbmRpZiAvKiAgRW5kaWFubmVzcyAqLworCisvKiAgQ3JlZGl0OiBIZW5yeSBTLiBXYXJyZW4sIEhhY2tlcidzIERlbGlnaHQsIEFkZGlzb24tV2VzbGV5LCAyMDAyICovCitVSU5UNjQgZnJvbUludGVybGVhdmluZyhVSU5UNjQgeCkKK3sKKyAgIFVJTlQ2NCB0OworCisgICB0ID0gKHggXiAoeCA+PiAxNikpICYgMHgwMDAwMDAwMEZGRkYwMDAwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgMTYpOworICAgdCA9ICh4IF4gKHggPj4gIDgpKSAmIDB4MDAwMEZGMDAwMDAwRkYwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICA4KTsKKyAgIHQgPSAoeCBeICh4ID4+ICA0KSkgJiAweDAwRjAwMEYwMDBGMDAwRjBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgNCk7CisgICB0ID0gKHggXiAoeCA+PiAgMikpICYgMHgwQzBDMEMwQzBDMEMwQzBDVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDIpOworICAgdCA9ICh4IF4gKHggPj4gIDEpKSAmIDB4MjIyMjIyMjIyMjIyMjIyMlVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAxKTsKKworICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkIHNldEludGVybGVhdmVkV29yZHNJbnRvOGJ5dGVzKFVJTlQ4KiBkZXN0LCBVSU5UMzIqIGV2ZW5BbmRPZGQpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICAoKFVJTlQ2NCopZGVzdClbMF0gPSBmcm9tSW50ZXJsZWF2aW5nKCooVUlOVDY0KilldmVuQW5kT2RkKTsKKyNlbHNlIC8qICAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKSAqLworICAgIC8qICBUaGlzIGNhbiBiZSBvcHRpbWl6ZWQgKi8KKyAgICBVSU5UNjQgZXZlbkFuZE9kZFdvcmQgPSAoVUlOVDY0KWV2ZW5BbmRPZGRbMF0gXiAoKFVJTlQ2NClldmVuQW5kT2RkWzFdIDw8IDMyKTsKKyAgICBVSU5UNjQgZGVzdFdvcmQgPSBmcm9tSW50ZXJsZWF2aW5nKGV2ZW5BbmRPZGRXb3JkKTsKKyAgICBkZXN0WzBdID0gZGVzdFdvcmQgJiAweEZGOworICAgIGRlc3RbMV0gPSAoZGVzdFdvcmQgPj4gOCkgJiAweEZGOworICAgIGRlc3RbMl0gPSAoZGVzdFdvcmQgPj4gMTYpICYgMHhGRjsKKyAgICBkZXN0WzNdID0gKGRlc3RXb3JkID4+IDI0KSAmIDB4RkY7CisgICAgZGVzdFs0XSA9IChkZXN0V29yZCA+PiAzMikgJiAweEZGOworICAgIGRlc3RbNV0gPSAoZGVzdFdvcmQgPj4gNDApICYgMHhGRjsKKyAgICBkZXN0WzZdID0gKGRlc3RXb3JkID4+IDQ4KSAmIDB4RkY7CisgICAgZGVzdFs3XSA9IChkZXN0V29yZCA+PiA1NikgJiAweEZGOworI2VuZGlmIC8qICBFbmRpYW5uZXNzICovCit9CisKKyNkZWZpbmUgZXh0cmFjdExhbmVzKGxhbmVDb3VudCwgc3RhdGUsIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgdW5zaWduZWQgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhkYXRhK2kqOCwgKFVJTlQzMiopc3RhdGUraSoyKTsgXAorICAgIH0KKworI2VuZGlmIC8qICBXaXRoIG9yIHdpdGhvdXQgaW50ZXJsZWF2aW5nIHRhYmxlcyAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgUk9MMzIoYSwgb2Zmc2V0KSBfcm90bChhLCBvZmZzZXQpCisjZWxpZiAoZGVmaW5lZCAoX19hcm1fXykgJiYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pKQorI2RlZmluZSBST0wzMihhLCBvZmZzZXQpIF9fcm9yKGEsIDMyLShvZmZzZXQpKQorI2Vsc2UKKyNkZWZpbmUgUk9MMzIoYSwgb2Zmc2V0KSAoKCgoVUlOVDMyKWEpIDw8IChvZmZzZXQpKSBeICgoKFVJTlQzMilhKSA+PiAoMzItKG9mZnNldCkpKSkKKyNlbmRpZgorCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MiCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLm1hY3JvcyIKKworI2lmIChVc2VTY2hlZHVsZSA9PSAzKQorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisjZXJyb3IgIk5vIGxhbmUgY29tcGxlbWVudGluZyB3aXRoIHNjaGVkdWxlIDMuIgorI2VuZGlmCisKKyNpZiAoVW5yb2xsaW5nICE9IDIpCisjZXJyb3IgIk9ubHkgdW5yb2xsaW5nIDIgaXMgc3VwcG9ydGVkIGJ5IHNjaGVkdWxlIDMuIgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcyhVSU5UMzIgKnN0YXRlKQoreworICAgIHJvdW5kcworfQorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSg5LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0ODMyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzgzMmJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDEzLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoMTYsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxNywgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTE1MmJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDE4LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoMjEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjZWxzZSAvKiAgKFNjaGVkdWxlICE9IDMpICovCisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcyhVSU5UMzIgKnN0YXRlKQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCwgdW5zaWduZWQgaW50IGxhbmVDb3VudCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDksIHN0YXRlLCBpbnB1dCkKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDEzLCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwMjRiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDE2LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDE3LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDE4LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEzNDRiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDIxLCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZSgpCit7CisjaWZkZWYgVXNlSW50ZXJsZWF2ZVRhYmxlcworICAgIGJ1aWxkSW50ZXJsZWF2ZVRhYmxlcygpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha0luaXRpYWxpemVTdGF0ZSh1bnNpZ25lZCBjaGFyICpzdGF0ZSkKK3sKKyAgICBtZW1zZXQoc3RhdGUsIDAsIDIwMCk7CisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgKChVSU5UMzIqKXN0YXRlKVsgMl0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbIDNdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWyA0XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsgNV0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMTZdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzE3XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsyNF0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMjVdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzM0XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVszNV0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbNDBdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzQxXSA9IH4oVUlOVDMyKTA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb24odW5zaWduZWQgY2hhciAqc3RhdGUpCit7CisgICAgLyogIFdlIGFzc3VtZSB0aGUgc3RhdGUgaXMgYWx3YXlzIHN0b3JlZCBhcyBpbnRlcmxlYXZlZCAzMi1iaXQgd29yZHMgKi8KKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoKFVJTlQzMiopc3RhdGUpOworfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjU3NmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjgzMmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDI0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwMjRiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDg4Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMTUyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMzQ0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEzNDRiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIodW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoKFVJTlQzMiopc3RhdGUsIGRhdGEsIGxhbmVDb3VudCk7Cit9CisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBleHRyYWN0TGFuZXMoMTYsIHN0YXRlLCBkYXRhKQorI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICgoVUlOVDMyKilkYXRhKVsgMl0gPSB+KChVSU5UMzIqKWRhdGEpWyAyXTsKKyAgICAoKFVJTlQzMiopZGF0YSlbIDNdID0gfigoVUlOVDMyKilkYXRhKVsgM107CisgICAgKChVSU5UMzIqKWRhdGEpWyA0XSA9IH4oKFVJTlQzMiopZGF0YSlbIDRdOworICAgICgoVUlOVDMyKilkYXRhKVsgNV0gPSB+KChVSU5UMzIqKWRhdGEpWyA1XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbMTZdID0gfigoVUlOVDMyKilkYXRhKVsxNl07CisgICAgKChVSU5UMzIqKWRhdGEpWzE3XSA9IH4oKFVJTlQzMiopZGF0YSlbMTddOworICAgICgoVUlOVDMyKilkYXRhKVsyNF0gPSB+KChVSU5UMzIqKWRhdGEpWzI0XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbMjVdID0gfigoVUlOVDMyKilkYXRhKVsyNV07CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworICAgIGV4dHJhY3RMYW5lcyhsYW5lQ291bnQsIHN0YXRlLCBkYXRhKQorI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgIGlmIChsYW5lQ291bnQgPiAxKSB7CisgICAgICAgICgoVUlOVDMyKilkYXRhKVsgMl0gPSB+KChVSU5UMzIqKWRhdGEpWyAyXTsKKyAgICAgICAgKChVSU5UMzIqKWRhdGEpWyAzXSA9IH4oKFVJTlQzMiopZGF0YSlbIDNdOworICAgICAgICBpZiAobGFuZUNvdW50ID4gMikgeworICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWyA0XSA9IH4oKFVJTlQzMiopZGF0YSlbIDRdOworICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWyA1XSA9IH4oKFVJTlQzMiopZGF0YSlbIDVdOworICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDgpIHsKKyAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMTZdID0gfigoVUlOVDMyKilkYXRhKVsxNl07CisgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzE3XSA9IH4oKFVJTlQzMiopZGF0YSlbMTddOworICAgICAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiAxMikgeworICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMjRdID0gfigoVUlOVDMyKilkYXRhKVsyNF07CisgICAgICAgICAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsyNV0gPSB+KChVSU5UMzIqKWRhdGEpWzI1XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMzRdID0gfigoVUlOVDMyKilkYXRhKVszNF07CisgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMzVdID0gfigoVUlOVDMyKilkYXRhKVszNV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMjApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbNDBdID0gfigoVUlOVDMyKilkYXRhKVs0MF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzQxXSA9IH4oKFVJTlQzMiopZGF0YSlbNDFdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC1zZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODNlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaApAQCAtMCwwICsxLDkgQEAKKy8qCisjZGVmaW5lIFVucm9sbGluZyAyNAorI2RlZmluZSBVc2VCZWJpZ29raW1pc2EKKyNkZWZpbmUgVXNlU1NFCisjZGVmaW5lIFVzZU9ubHlTSU1ENjQKKyNkZWZpbmUgVXNlTU1YCisjZGVmaW5lIFVzZVNITEQKKyNkZWZpbmUgVXNlWE9QCisqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTliMThiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMKQEAgLTAsMCArMSw1MTAgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiAjaW5jbHVkZSAiYnJnX2VuZGlhbi5oIiAqLworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1vcHQ2NC1zZXR0aW5ncy5oIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OworLyogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFVJTlQ2NDsgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEFMSUdOIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBBTElHTiBfX2RlY2xzcGVjKGFsaWduKDMyKSkKKyNlbHNlCisjZGVmaW5lIEFMSUdOCisjZW5kaWYKKworI2lmIGRlZmluZWQoVXNlU1NFKQorICAgICNpbmNsdWRlIDx4ODZpbnRyaW4uaD4KKyAgICB0eXBlZGVmIF9fbTEyOGkgVjY0OworICAgIHR5cGVkZWYgX19tMTI4aSBWMTI4OworICAgIHR5cGVkZWYgdW5pb24geworICAgICAgICBWMTI4IHYxMjg7CisgICAgICAgIFVJTlQ2NCB2NjRbMl07CisgICAgfSBWNjQ2NDsKKworICAgICNkZWZpbmUgQU5EbnU2NChhLCBiKSAgICAgICBfbW1fYW5kbm90X3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBMT0FENjQoYSkgICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAgICAgX21tX2xvYWRsX2VwaTY0KChjb25zdCBWNjQgKikmKGEpKQorICAgICNkZWZpbmUgUk9MNjQoYSwgbykgICAgICAgICBfbW1fb3Jfc2kxMjgoX21tX3NsbGlfZXBpNjQoYSwgbyksIF9tbV9zcmxpX2VwaTY0KGEsIDY0LShvKSkpCisgICAgI2RlZmluZSBTVE9SRTY0KGEsIGIpICAgICAgIF9tbV9zdG9yZWxfZXBpNjQoKFY2NCAqKSYoYSksIGIpCisgICAgI2RlZmluZSBYT1I2NChhLCBiKSAgICAgICAgIF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIFhPUmVxNjQoYSwgYikgICAgICAgYSA9IF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIFNIVUZGTEVCWVRFUzEyOChhLCBiKSAgIF9tbV9zaHVmZmxlX2VwaTgoYSwgYikKKworICAgICNkZWZpbmUgQU5EbnUxMjgoYSwgYikgICAgICBfbW1fYW5kbm90X3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBMT0FENjQ2NChhLCBiKSAgICAgIF9tbV9zZXRfZXBpNjQoKF9fbTY0KShhKSwgKF9fbTY0KShiKSkKKyAgICAjZGVmaW5lIENPTlNUMTI4KGEpICAgICAgICAgX21tX2xvYWRfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgTE9BRDEyOChhKSAgICAgICAgICBfbW1fbG9hZF9zaTEyOCgoY29uc3QgVjEyOCAqKSYoYSkpCisgICAgI2RlZmluZSBMT0FEMTI4dShhKSAgICAgICAgIF9tbV9sb2FkdV9zaTEyOCgoY29uc3QgVjEyOCAqKSYoYSkpCisgICAgI2RlZmluZSBST0w2NGluMTI4KGEsIG8pICAgIF9tbV9vcl9zaTEyOChfbW1fc2xsaV9lcGk2NChhLCBvKSwgX21tX3NybGlfZXBpNjQoYSwgNjQtKG8pKSkKKyAgICAjZGVmaW5lIFNUT1JFMTI4KGEsIGIpICAgICAgX21tX3N0b3JlX3NpMTI4KChWMTI4ICopJihhKSwgYikKKyAgICAjZGVmaW5lIFhPUjEyOChhLCBiKSAgICAgICAgX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWE9SZXExMjgoYSwgYikgICAgICBhID0gX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgR0VUNjRMT0xPKGEsIGIpICAgICBfbW1fdW5wYWNrbG9fZXBpNjQoYSwgYikKKyAgICAjZGVmaW5lIEdFVDY0SElISShhLCBiKSAgICAgX21tX3VucGFja2hpX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBDT1BZNjRISTJMTyhhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4RUUpCisgICAgI2RlZmluZSBDT1BZNjRMTzJISShhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4NDQpCisgICAgI2RlZmluZSBaRVJPMTI4KCkgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkKKworICAgICNpZmRlZiBVc2VPbmx5U0lNRDY0CisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zIgorICAgICNlbHNlCitBTElHTiBjb25zdCBVSU5UNjQgcmhvOF81NlsyXSA9IHsweDA2MDUwNDAzMDIwMTAwMDcsIDB4MDgwRjBFMEQwQzBCMEEwOX07CisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1zaW1kMTI4Lm1hY3JvcyIKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAjZXJyb3IgIlVzZUJlYmlnb2tpbWlzYSBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFVzZVNTRSIKKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoVXNlWE9QKQorICAgICNpbmNsdWRlIDx4ODZpbnRyaW4uaD4KKyAgICB0eXBlZGVmIF9fbTEyOGkgVjY0OworICAgIHR5cGVkZWYgX19tMTI4aSBWMTI4OworICAgCisgICAgI2RlZmluZSBMT0FENjQoYSkgICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAgICAgX21tX2xvYWRsX2VwaTY0KChjb25zdCBWNjQgKikmKGEpKQorICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgICAgICBfbW1fc3RvcmVsX2VwaTY0KChWNjQgKikmKGEpLCBiKQorICAgICNkZWZpbmUgWE9SNjQoYSwgYikgICAgICAgICBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBYT1JlcTY0KGEsIGIpICAgICAgIGEgPSBfbW1feG9yX3NpMTI4KGEsIGIpCisKKyAgICAjZGVmaW5lIEFORG51MTI4KGEsIGIpICAgICAgX21tX2FuZG5vdF9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgTE9BRDY0NjQoYSwgYikgICAgICBfbW1fc2V0X2VwaTY0KChfX202NCkoYSksIChfX202NCkoYikpCisgICAgI2RlZmluZSBDT05TVDEyOChhKSAgICAgICAgIF9tbV9sb2FkX3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIExPQUQxMjgoYSkgICAgICAgICAgX21tX2xvYWRfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgTE9BRDEyOHUoYSkgICAgICAgICBfbW1fbG9hZHVfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgU1RPUkUxMjgoYSwgYikgICAgICBfbW1fc3RvcmVfc2kxMjgoKFYxMjggKikmKGEpLCBiKQorICAgICNkZWZpbmUgWE9SMTI4KGEsIGIpICAgICAgICBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBYT1JlcTEyOChhLCBiKSAgICAgIGEgPSBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBaRVJPMTI4KCkgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkKKworICAgICNkZWZpbmUgU1dBUDY0KGEpICAgICAgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweDRFKQorICAgICNkZWZpbmUgR0VUNjRMT0xPKGEsIGIpICAgICBfbW1fdW5wYWNrbG9fZXBpNjQoYSwgYikKKyAgICAjZGVmaW5lIEdFVDY0SElISShhLCBiKSAgICAgX21tX3VucGFja2hpX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBHRVQ2NExPSEkoYSwgYikgICAgICgoX19tMTI4aSlfbW1fYmxlbmRfcGQoKF9fbTEyOGQpYSwgKF9fbTEyOGQpYiwgMikpCisgICAgI2RlZmluZSBHRVQ2NEhJTE8oYSwgYikgICAgIFNXQVA2NChHRVQ2NExPSEkoYiwgYSkpCisgICAgI2RlZmluZSBDT1BZNjRISTJMTyhhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4RUUpCisgICAgI2RlZmluZSBDT1BZNjRMTzJISShhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4NDQpCisgCisgICAgI2RlZmluZSBST0w2NDY0c2FtZShhLCBvKSAgIF9tbV9yb3RpX2VwaTY0KGEsIG8pCisgICAgI2RlZmluZSBST0w2NDY0KGEsIHIxLCByMikgIF9tbV9yb3RfZXBpNjQoYSwgQ09OU1QxMjgoIHJvdF8jI3IxIyNfIyNyMiApKQorQUxJR04gY29uc3QgVUlOVDY0IHJvdF8wXzIwWzJdICA9IHsgMCwgMjB9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF80NF8zWzJdICA9IHs0NCwgIDN9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF80M180NVsyXSA9IHs0MywgNDV9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8yMV82MVsyXSA9IHsyMSwgNjF9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8xNF8yOFsyXSA9IHsxNCwgMjh9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8xXzM2WzJdICA9IHsgMSwgMzZ9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF82XzEwWzJdICA9IHsgNiwgMTB9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8yNV8xNVsyXSA9IHsyNSwgMTV9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF84XzU2WzJdICA9IHsgOCwgNTZ9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8xOF8yN1syXSA9IHsxOCwgMjd9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF82Ml81NVsyXSA9IHs2MiwgNTV9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8zOV80MVsyXSA9IHszOSwgNDF9OworCisjaWYgZGVmaW5lZChVc2VTaW11bGF0ZWRYT1ApCisgICAgLyogIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHdoZW4gWE9QIGlzIG5vdCBhdmFpbGFibGUgKi8KKyAgICAjdW5kZWYgUk9MNjQ2NAorICAgICN1bmRlZiBST0w2NDY0c2FtZQorICAgICNkZWZpbmUgUk9MNjQ2NHNhbWUoYSwgbykgICBfbW1fb3Jfc2kxMjgoX21tX3NsbGlfZXBpNjQoYSwgbyksIF9tbV9zcmxpX2VwaTY0KGEsIDY0LShvKSkpCisgICAgVjEyOCBST0w2NDY0KFYxMjggYSwgaW50IHIwLCBpbnQgcjEpCisgICAgeworICAgICAgICBWMTI4IGEwID0gUk9MNjQoYSwgcjApOworICAgICAgICBWMTI4IGExID0gQ09QWTY0SEkyTE8oUk9MNjQoYSwgcjEpKTsKKyAgICAgICAgcmV0dXJuIEdFVDY0TE9MTyhhMCwgYTEpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAteG9wLm1hY3JvcyIKKworICAgICNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAjZXJyb3IgIlVzZUJlYmlnb2tpbWlzYSBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFVzZVhPUCIKKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoVXNlTU1YKQorICAgICNpbmNsdWRlIDxtbWludHJpbi5oPgorICAgIHR5cGVkZWYgX19tNjQgVjY0OworICAgICNkZWZpbmUgQU5EbnU2NChhLCBiKSAgICAgICBfbW1fYW5kbm90X3NpNjQoYSwgYikKKworICAgICNpZiAoZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikpCisgICAgICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgICooVjY0KikmKGEpCisgICAgICAgICNkZWZpbmUgQ09OU1Q2NChhKSAgICAgICooVjY0KikmKGEpCisgICAgICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgICooVjY0KikmKGEpID0gYgorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgIChWNjQpYQorICAgICAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAoVjY0KWEKKyAgICAgICAgI2RlZmluZSBTVE9SRTY0KGEsIGIpICAgYSA9IChVSU5UNjQpYgorICAgICNlbmRpZgorICAgICNkZWZpbmUgUk9MNjQoYSwgbykgICAgICAgICBfbW1fb3Jfc2k2NChfbW1fc2xsaV9zaTY0KGEsIG8pLCBfbW1fc3JsaV9zaTY0KGEsIDY0LShvKSkpCisgICAgI2RlZmluZSBYT1I2NChhLCBiKSAgICAgICAgIF9tbV94b3Jfc2k2NChhLCBiKQorICAgICNkZWZpbmUgWE9SZXE2NChhLCBiKSAgICAgICBhID0gX21tX3hvcl9zaTY0KGEsIGIpCisKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXNpbWQ2NC5tYWNyb3MiCisKKyAgICAjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgI2Vycm9yICJVc2VCZWJpZ29raW1pc2EgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBVc2VNTVgiCisgICAgI2VuZGlmCisjZWxzZQorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgUk9MNjQoYSwgb2Zmc2V0KSBfcm90bDY0KGEsIG9mZnNldCkKKyAgICAjZWxpZiBkZWZpbmVkKFVzZVNITEQpCisgICAgICAjZGVmaW5lIFJPTDY0KHgsTikgKHsgXAorICAgICAgICByZWdpc3RlciBVSU5UNjQgX19vdXQ7IFwKKyAgICAgICAgcmVnaXN0ZXIgVUlOVDY0IF9faW4gPSB4OyBcCisgICAgICAgIF9fYXNtX18gKCJzaGxkICUyLCUwLCUwIiA6ICI9ciIoX19vdXQpIDogIjAiKF9faW4pLCAiaSIoTikpOyBcCisgICAgICAgIF9fb3V0OyBcCisgICAgICB9KQorICAgICNlbHNlCisgICAgI2RlZmluZSBST0w2NChhLCBvZmZzZXQpICgoKChVSU5UNjQpYSkgPDwgb2Zmc2V0KSBeICgoKFVJTlQ2NClhKSA+PiAoNjQtb2Zmc2V0KSkpCisgICAgI2VuZGlmCisKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTY0Lm1hY3JvcyIKKyNlbmRpZgorCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MiCisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcyhVSU5UNjQgKnN0YXRlKQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCwgdW5zaWduZWQgaW50IGxhbmVDb3VudCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisJdW5zaWduZWQgaW50IGo7CisKKyAgICBmb3Ioaj0wOyBqPGxhbmVDb3VudDsgaisrKQorICAgICAgICBzdGF0ZVtqXSBePSBpbnB1dFtqXTsJCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisgICAgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisgICAgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTE1MmJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3IxMzQ0Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplKCkKK3sKK30KKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZVN0YXRlKHVuc2lnbmVkIGNoYXIgKnN0YXRlKQoreworICAgIG1lbXNldChzdGF0ZSwgMCwgMjAwKTsKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAoKFVJTlQ2NCopc3RhdGUpWyAxXSA9IH4oVUlOVDY0KTA7CisgICAgKChVSU5UNjQqKXN0YXRlKVsgMl0gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbIDhdID0gfihVSU5UNjQpMDsKKyAgICAoKFVJTlQ2NCopc3RhdGUpWzEyXSA9IH4oVUlOVDY0KTA7CisgICAgKChVSU5UNjQqKXN0YXRlKVsxN10gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbMjBdID0gfihVSU5UNjQpMDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbih1bnNpZ25lZCBjaGFyICpzdGF0ZSkKK3sKKyAgICAvKiAgV2UgYXNzdW1lIHRoZSBzdGF0ZSBpcyBhbHdheXMgc3RvcmVkIGFzIHdvcmRzICovCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzKChVSU5UNjQqKXN0YXRlKTsKK30KKworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0JJR19FTkRJQU4pCitzdGF0aWMgdm9pZCBmcm9tQnl0ZXNUb1dvcmQoVUlOVDY0ICp3b3JkLCBjb25zdCBVSU5UOCAqYnl0ZXMpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAqd29yZCA9IDA7CisgICAgZm9yKGk9MDsgaTwoNjQvOCk7IGkrKykKKyAgICAgICAgKndvcmQgfD0gKFVJTlQ2NCkoYnl0ZXNbaV0pIDw8ICg4KmkpOworfQorI2VuZGlmCisKKworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI1NzZiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKChVSU5UNjQqKXN0YXRlLCAoY29uc3QgVUlOVDY0KilkYXRhKTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzldOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTw5OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzU3NmJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiODMyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1sxM107CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDEzOyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzgzMmJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEwMjRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1sxNl07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDE2OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwMjRiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDg4Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTA4OGJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMTddOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxNzsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTE1Mgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTE1MmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKChVSU5UNjQqKXN0YXRlLCAoY29uc3QgVUlOVDY0KilkYXRhKTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzE4XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8MTg7IGkrKykKKyAgICAgICAgZnJvbUJ5dGVzVG9Xb3JkKGRhdGFBc1dvcmRzK2ksIGRhdGErKGkqOCkpOworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTE1MmJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEzNDRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1syMV07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDIxOyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEzNDRiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIodW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSwgbGFuZUNvdW50KTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzI1XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8bGFuZUNvdW50OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMsIGxhbmVDb3VudCk7CisjZW5kaWYKK30KKworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0JJR19FTkRJQU4pCitzdGF0aWMgdm9pZCBmcm9tV29yZFRvQnl0ZXMoVUlOVDggKmJ5dGVzLCBjb25zdCBVSU5UNjQgd29yZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8KDY0LzgpOyBpKyspCisgICAgICAgIGJ5dGVzW2ldID0gKHdvcmQgPj4gKDgqaSkpICYgMHhGRjsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIG1lbWNweShkYXRhLCBzdGF0ZSwgMTI4KTsKKyNlbHNlCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDE2OyBpKyspCisgICAgICAgIGZyb21Xb3JkVG9CeXRlcyhkYXRhKyhpKjgpLCAoKGNvbnN0IFVJTlQ2NCopc3RhdGUpW2ldKTsKKyNlbmRpZgorI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICgoVUlOVDY0KilkYXRhKVsgMV0gPSB+KChVSU5UNjQqKWRhdGEpWyAxXTsKKyAgICAoKFVJTlQ2NCopZGF0YSlbIDJdID0gfigoVUlOVDY0KilkYXRhKVsgMl07CisgICAgKChVSU5UNjQqKWRhdGEpWyA4XSA9IH4oKFVJTlQ2NCopZGF0YSlbIDhdOworICAgICgoVUlOVDY0KilkYXRhKVsxMl0gPSB+KChVSU5UNjQqKWRhdGEpWzEyXTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBtZW1jcHkoZGF0YSwgc3RhdGUsIGxhbmVDb3VudCo4KTsKKyNlbHNlCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPGxhbmVDb3VudDsgaSsrKQorICAgICAgICBmcm9tV29yZFRvQnl0ZXMoZGF0YSsoaSo4KSwgKChjb25zdCBVSU5UNjQqKXN0YXRlKVtpXSk7CisjZW5kaWYKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICBpZiAobGFuZUNvdW50ID4gMSkgeworICAgICAgICAoKFVJTlQ2NCopZGF0YSlbIDFdID0gfigoVUlOVDY0KilkYXRhKVsgMV07CisgICAgICAgIGlmIChsYW5lQ291bnQgPiAyKSB7CisgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbIDJdID0gfigoVUlOVDY0KilkYXRhKVsgMl07CisgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gOCkgeworICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsgOF0gPSB+KChVSU5UNjQqKWRhdGEpWyA4XTsKKyAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMTIpIHsKKyAgICAgICAgICAgICAgICAgICAgKChVSU5UNjQqKWRhdGEpWzEyXSA9IH4oKFVJTlQ2NCopZGF0YSlbMTJdOworICAgICAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsxN10gPSB+KChVSU5UNjQqKWRhdGEpWzE3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiAyMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsyMF0gPSB+KChVSU5UNjQqKWRhdGEpWzIwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQxMjgubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQxMjgubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTQ3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtc2ltZDEyOC5tYWNyb3MKQEAgLTAsMCArMSw2NTEgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjZGVmaW5lIGRlY2xhcmVBQkNERSBcCisgICAgVjY0NjQgQWJhZ2UsIEFiZWdpLCBBYmlnbywgQWJvZ3UsIEFidWdhOyBcCisgICAgVjY0NjQgQWthbWUsIEFrZW1pLCBBa2ltbywgQWtvbXUsIEFrdW1hOyBcCisgICAgVjY0NjQgQWJhZSwgQWJpbywgQWdhZSwgQWdpbywgQWthZSwgQWtpbywgQW1hZSwgQW1pbywgQXNhZSwgQXNpbzsgXAorICAgIFY2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFY2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFY2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFY2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFY2NCBBc2EsIEFzZSwgQXNpLCBBc28sIEFzdTsgXAorICAgIFYxMjggQmJhZ2UsIEJiZWdpLCBCYmlnbywgQmJvZ3UsIEJidWdhOyBcCisgICAgVjEyOCBCa2FtZSwgQmtlbWksIEJraW1vLCBCa29tdSwgQmt1bWE7IFwKKyAgICBWNjQgQmJhLCBCYmUsIEJiaSwgQmJvLCBCYnU7IFwKKyAgICBWNjQgQmdhLCBCZ2UsIEJnaSwgQmdvLCBCZ3U7IFwKKyAgICBWNjQgQmthLCBCa2UsIEJraSwgQmtvLCBCa3U7IFwKKyAgICBWNjQgQm1hLCBCbWUsIEJtaSwgQm1vLCBCbXU7IFwKKyAgICBWNjQgQnNhLCBCc2UsIEJzaSwgQnNvLCBCc3U7IFwKKyAgICBWMTI4IENhZSwgQ2VpLCBDaW8sIENvdSwgQ3VhLCBEZWksIERvdTsgXAorICAgIFY2NCBDYSwgQ2UsIENpLCBDbywgQ3U7IFwKKyAgICBWNjQgRGEsIERlLCBEaSwgRG8sIER1OyBcCisgICAgVjY0NjQgRWJhZ2UsIEViZWdpLCBFYmlnbywgRWJvZ3UsIEVidWdhOyBcCisgICAgVjY0NjQgRWthbWUsIEVrZW1pLCBFa2ltbywgRWtvbXUsIEVrdW1hOyBcCisgICAgVjY0IEViYSwgRWJlLCBFYmksIEVibywgRWJ1OyBcCisgICAgVjY0IEVnYSwgRWdlLCBFZ2ksIEVnbywgRWd1OyBcCisgICAgVjY0IEVrYSwgRWtlLCBFa2ksIEVrbywgRWt1OyBcCisgICAgVjY0IEVtYSwgRW1lLCBFbWksIEVtbywgRW11OyBcCisgICAgVjY0IEVzYSwgRXNlLCBFc2ksIEVzbywgRXN1OyBcCisgICAgVjEyOCBaZXJvOworCisjZGVmaW5lIHByZXBhcmVUaGV0YQorCisjZGVmaW5lIGNvbXB1dGVEIFwKKyAgICBDdWEgPSBHRVQ2NExPTE8oQ3UsIENhZSk7IFwKKyAgICBEZWkgPSBYT1IxMjgoQ2FlLCBST0w2NGluMTI4KENpbywgMSkpOyBcCisgICAgRG91ID0gWE9SMTI4KENpbywgUk9MNjRpbjEyOChDdWEsIDEpKTsgXAorICAgIERhID0gWE9SNjQoQ3UsIFJPTDY0aW4xMjgoQ09QWTY0SEkyTE8oQ2FlKSwgMSkpOyBcCisgICAgRGUgPSBEZWk7IFwKKyAgICBEaSA9IENPUFk2NEhJMkxPKERlaSk7IFwKKyAgICBEbyA9IERvdTsgXAorICAgIER1ID0gQ09QWTY0SEkyTE8oRG91KTsKKworLyogIC0tLSBUaGV0YSBSaG8gUGkgQ2hpIElvdGEgUHJlcGFyZS10aGV0YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCBhbmQgMTI4LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgY29tcHV0ZUQgXAorICAgIFwKKyAgICBBIyNiYSA9IExPQUQ2NChBIyNiYWdlLnY2NFswXSk7IFwKKyAgICBYT1JlcTY0KEEjI2JhLCBEYSk7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjZ3UsIER1KTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBCYmFnZSA9IEdFVDY0TE9MTyhCYmEsIEJnZSk7IFwKKyAgICBBIyNnZSA9IExPQUQ2NChBIyNiYWdlLnY2NFsxXSk7IFwKKyAgICBYT1JlcTY0KEEjI2dlLCBEZSk7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2EgPSBMT0FENjQoQSMja2FtZS52NjRbMF0pOyBcCisgICAgWE9SZXE2NChBIyNrYSwgRGEpOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQmJlZ2kgPSBHRVQ2NExPTE8oQmJlLCBCZ2kpOyBcCisgICAgWE9SZXE2NChBIyNraSwgRGkpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21lID0gTE9BRDY0KEEjI2thbWUudjY0WzFdKTsgXAorICAgIFhPUmVxNjQoQSMjbWUsIERlKTsgXAorICAgIEJnbyA9IFJPTDY0KEEjI21lLCA0NSk7IFwKKyAgICBCYmlnbyA9IEdFVDY0TE9MTyhCYmksIEJnbyk7IFwKKyAgICBFIyNiYWdlLnYxMjggPSBYT1IxMjgoQmJhZ2UsIEFORG51MTI4KEJiZWdpLCBCYmlnbykpOyBcCisgICAgWE9SZXExMjgoRSMjYmFnZS52MTI4LCBDT05TVDY0KEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV0pKTsgXAorICAgIENhZSA9IEUjI2JhZ2UudjEyODsgXAorICAgIFhPUmVxNjQoQSMjbW8sIERvKTsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBYT1JlcTY0KEEjI3NpLCBEaSk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgQmJvZ3UgPSBHRVQ2NExPTE8oQmJvLCBCZ3UpOyBcCisgICAgRSMjYmVnaS52MTI4ID0gWE9SMTI4KEJiZWdpLCBBTkRudTEyOChCYmlnbywgQmJvZ3UpKTsgXAorICAgIENlaSA9IEUjI2JlZ2kudjEyODsgXAorICAgIFhPUmVxNjQoQSMjc3UsIER1KTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBYT1JlcTY0KEEjI2JvLCBEbyk7IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgQmJ1Z2EgPSBHRVQ2NExPTE8oQmJ1LCBCZ2EpOyBcCisgICAgRSMjYmlnby52MTI4ID0gWE9SMTI4KEJiaWdvLCBBTkRudTEyOChCYm9ndSwgQmJ1Z2EpKTsgXAorICAgIEUjI2JpID0gRSMjYmlnby52MTI4OyBcCisgICAgRSMjZ28gPSBHRVQ2NEhJSEkoRSMjYmlnby52MTI4LCBFIyNiaWdvLnYxMjgpOyBcCisgICAgQ2lvID0gRSMjYmlnby52MTI4OyBcCisgICAgRSMjYm9ndS52MTI4ID0gWE9SMTI4KEJib2d1LCBBTkRudTEyOChCYnVnYSwgQmJhZ2UpKTsgXAorICAgIEUjI2JvID0gRSMjYm9ndS52MTI4OyBcCisgICAgRSMjZ3UgPSBHRVQ2NEhJSEkoRSMjYm9ndS52MTI4LCBFIyNib2d1LnYxMjgpOyBcCisgICAgQ291ID0gRSMjYm9ndS52MTI4OyBcCisgICAgRSMjYnVnYS52MTI4ID0gWE9SMTI4KEJidWdhLCBBTkRudTEyOChCYmFnZSwgQmJlZ2kpKTsgXAorICAgIEUjI2J1ID0gRSMjYnVnYS52MTI4OyBcCisgICAgRSMjZ2EgPSBHRVQ2NEhJSEkoRSMjYnVnYS52MTI4LCBFIyNidWdhLnYxMjgpOyBcCisgICAgQ3VhID0gRSMjYnVnYS52MTI4OyBcCitcCisgICAgQSMjYmUgPSBMT0FENjQoQSMjYmVnaS52NjRbMF0pOyBcCisgICAgWE9SZXE2NChBIyNiZSwgRGUpOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgWE9SZXE2NChBIyNnYSwgRGEpOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEJrYW1lID0gR0VUNjRMT0xPKEJrYSwgQm1lKTsgXAorICAgIEEjI2dpID0gTE9BRDY0KEEjI2JlZ2kudjY0WzFdKTsgXAorICAgIFhPUmVxNjQoQSMjZ2ksIERpKTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tlID0gTE9BRDY0KEEjI2tlbWkudjY0WzBdKTsgXAorICAgIFhPUmVxNjQoQSMja2UsIERlKTsgXAorICAgIEJtaSA9IFJPTDY0KEEjI2tlLCAxMCk7IFwKKyAgICBCa2VtaSA9IEdFVDY0TE9MTyhCa2UsIEJtaSk7IFwKKyAgICBYT1JlcTY0KEEjI2tvLCBEbyk7IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgQSMjbWkgPSBMT0FENjQoQSMja2VtaS52NjRbMV0pOyBcCisgICAgWE9SZXE2NChBIyNtaSwgRGkpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEJraW1vID0gR0VUNjRMT0xPKEJraSwgQm1vKTsgXAorICAgIEUjI2thbWUudjEyOCA9IFhPUjEyOChCa2FtZSwgQU5EbnUxMjgoQmtlbWksIEJraW1vKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEUjI2thbWUudjEyOCk7IFwKKyAgICBCa29tdSA9IEdFVDY0TE9MTyhYT1I2NChBIyNtdSwgRHUpLCBYT1I2NChBIyNzbywgRG8pKTsgXAorICAgIEJrb211ID0gU0hVRkZMRUJZVEVTMTI4KEJrb211LCBDT05TVDEyOChyaG84XzU2KSk7IFwKKyAgICBFIyNrZW1pLnYxMjggPSBYT1IxMjgoQmtlbWksIEFORG51MTI4KEJraW1vLCBCa29tdSkpOyBcCisgICAgWE9SZXExMjgoQ2VpLCBFIyNrZW1pLnYxMjgpOyBcCisgICAgWE9SZXE2NChBIyNzYSwgRGEpOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIFhPUmVxNjQoQSMjYnUsIER1KTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBCa3VtYSA9IEdFVDY0TE9MTyhCa3UsIEJtYSk7IFwKKyAgICBFIyNraW1vLnYxMjggPSBYT1IxMjgoQmtpbW8sIEFORG51MTI4KEJrb211LCBCa3VtYSkpOyBcCisgICAgRSMja2kgPSBFIyNraW1vLnYxMjg7IFwKKyAgICBFIyNtbyA9IEdFVDY0SElISShFIyNraW1vLnYxMjgsIEUjI2tpbW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIEUjI2tpbW8udjEyOCk7IFwKKyAgICBFIyNrb211LnYxMjggPSBYT1IxMjgoQmtvbXUsIEFORG51MTI4KEJrdW1hLCBCa2FtZSkpOyBcCisgICAgRSMja28gPSBFIyNrb211LnYxMjg7IFwKKyAgICBFIyNtdSA9IEdFVDY0SElISShFIyNrb211LnYxMjgsIEUjI2tvbXUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDb3UsIEUjI2tvbXUudjEyOCk7IFwKKyAgICBFIyNrdW1hLnYxMjggPSBYT1IxMjgoQmt1bWEsIEFORG51MTI4KEJrYW1lLCBCa2VtaSkpOyBcCisgICAgRSMja3UgPSBFIyNrdW1hLnYxMjg7IFwKKyAgICBFIyNtYSA9IEdFVDY0SElISShFIyNrdW1hLnYxMjgsIEUjI2t1bWEudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDdWEsIEUjI2t1bWEudjEyOCk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JpLCBEaSk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgWE9SZXE2NChBIyNnbywgRG8pOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIFhPUmVxNjQoQSMja3UsIER1KTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBFIyNzYSA9IFhPUjY0KEJzYSwgQU5EbnU2NChCc2UsIEJzaSkpOyBcCisgICAgQ2EgPSBFIyNzYTsgXAorICAgIFhPUmVxNjQoQSMjbWEsIERhKTsgXAorICAgIEJzbyA9IFJPTDY0KEEjI21hLCA0MSk7IFwKKyAgICBFIyNzZSA9IFhPUjY0KEJzZSwgQU5EbnU2NChCc2ksIEJzbykpOyBcCisgICAgQ2UgPSBFIyNzZTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRMT0xPKENhLCBDZSkpOyBcCisgICAgWE9SZXE2NChBIyNzZSwgRGUpOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2kgPSBYT1I2NChCc2ksIEFORG51NjQoQnNvLCBCc3UpKTsgXAorICAgIENpID0gRSMjc2k7IFwKKyAgICBFIyNzbyA9IFhPUjY0KEJzbywgQU5EbnU2NChCc3UsIEJzYSkpOyBcCisgICAgQ28gPSBFIyNzbzsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRMT0xPKENpLCBDbykpOyBcCisgICAgRSMjc3UgPSBYT1I2NChCc3UsIEFORG51NjQoQnNhLCBCc2UpKTsgXAorICAgIEN1ID0gRSMjc3U7IFwKK1wKKyAgICBaZXJvID0gWkVSTzEyOCgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoQ3VhLCBaZXJvKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0TE9MTyhaZXJvLCBDZWkpKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRISUhJKENlaSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBHRVQ2NExPTE8oWmVybywgQ291KSk7IFwKKyAgICBYT1JlcTEyOChDdWEsIEdFVDY0SElISShDb3UsIFplcm8pKTsgXAorICAgIFhPUmVxNjQoQ3UsIEN1YSk7IFwKKworLyogIC0tLSBUaGV0YSBSaG8gUGkgQ2hpIElvdGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkKKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMTBdKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yODMyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLnYxMjgsIFgjI2Jpby52MTI4KTsgXAorICAgIENpbyA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpby52MTI4OyBcCisgICAgWCMjYmVnaS52MTI4ID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8udjEyOCwgWCMjZ2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8udjEyOCk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWUudjEyODsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZS52MTI4LCBYIyNrYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZS52MTI4KTsgXAorICAgIFgjI2tpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gTE9BRDY0KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IExPQUQxMjh1KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtYSA9IFgjI21hZS52MTI4OyBcCisgICAgWCMjbWUgPSBHRVQ2NEhJSEkoWCMjbWFlLnYxMjgsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI2thbWUudjEyOCA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNtaW8udjEyOCA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pby52MTI4OyBcCisgICAgWCMja2VtaS52MTI4ID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8udjEyOCwgWCMjbWlvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8udjEyOCk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjbXUpOyBcCisgICAgWCMjc2FlLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzYSA9IFgjI3NhZS52MTI4OyBcCisgICAgWCMjc2UgPSBHRVQ2NEhJSEkoWCMjc2FlLnYxMjgsIFgjI3NhZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FlLnYxMjgpOyBcCisgICAgWCMjc2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzaSA9IFgjI3Npby52MTI4OyBcCisgICAgWCMjc28gPSBHRVQ2NEhJSEkoWCMjc2lvLnYxMjgsIFgjI3Npby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lvLnYxMjgpOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLnYxMjgsIFgjI2Jpby52MTI4KTsgXAorICAgIENpbyA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpby52MTI4OyBcCisgICAgWCMjYmVnaS52MTI4ID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8udjEyOCwgWCMjZ2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8udjEyOCk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWUudjEyODsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZS52MTI4LCBYIyNrYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZS52MTI4KTsgXAorICAgIFgjI2tpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpby52MTI4OyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLnYxMjgsIFgjI2tpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvLnYxMjgpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQxMjh1KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQxMjh1KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTddKSwgTE9BRDY0KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQxMjh1KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTddKSwgTE9BRDEyOHUoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtaSA9IFgjI21pby52MTI4OyBcCisgICAgWCMja2VtaS52MTI4ID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8udjEyOCwgWCMjbWlvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8udjEyOCk7IFwKKyAgICBYIyNtdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxOV0pLCBMT0FENjQoaW5wdXRbMTldKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzIwXSksIExPQUQ2NChpbnB1dFsyMF0pKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsgMF0pOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gTE9BRDEyOChzdGF0ZVsgMl0pOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gTE9BRDY0KHN0YXRlWyA0XSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsgNV0pOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsgN10pOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2EgPSBYIyNrYWUudjEyODsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZS52MTI4LCBYIyNrYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZS52MTI4KTsgXAorICAgIFgjI2tpby52MTI4ID0gTE9BRDEyOChzdGF0ZVsxMl0pOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gTE9BRDY0KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IExPQUQxMjh1KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtYSA9IFgjI21hZS52MTI4OyBcCisgICAgWCMjbWUgPSBHRVQ2NEhJSEkoWCMjbWFlLnYxMjgsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI2thbWUudjEyOCA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNtaW8udjEyOCA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pby52MTI4OyBcCisgICAgWCMja2VtaS52MTI4ID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8udjEyOCwgWCMjbWlvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8udjEyOCk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjbXUpOyBcCisgICAgWCMjc2FlLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzYSA9IFgjI3NhZS52MTI4OyBcCisgICAgWCMjc2UgPSBHRVQ2NEhJSEkoWCMjc2FlLnYxMjgsIFgjI3NhZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FlLnYxMjgpOyBcCisgICAgWCMjc2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzaSA9IFgjI3Npby52MTI4OyBcCisgICAgWCMjc28gPSBHRVQ2NEhJSEkoWCMjc2lvLnYxMjgsIFgjI3Npby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lvLnYxMjgpOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gQSMjYmFnZS52NjRbMF07IFwKKyAgICBzdGF0ZVsgMV0gPSBBIyNiZWdpLnY2NFswXTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDJdLCBYIyNiaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAzXSwgWCMjYm8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgNF0sIFgjI2J1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDVdLCBYIyNnYSk7IFwKKyAgICBzdGF0ZVsgNl0gPSBBIyNiYWdlLnY2NFsxXTsgXAorICAgIHN0YXRlWyA3XSA9IEEjI2JlZ2kudjY0WzFdOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgOF0sIFgjI2dvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDldLCBYIyNndSk7IFwKKyAgICBzdGF0ZVsxMF0gPSBYIyNrYW1lLnY2NFswXTsgXAorICAgIHN0YXRlWzExXSA9IFgjI2tlbWkudjY0WzBdOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMl0sIFgjI2tpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTNdLCBYIyNrbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE0XSwgWCMja3UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNV0sIFgjI21hKTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI2thbWUudjY0WzFdOyBcCisgICAgc3RhdGVbMTddID0gWCMja2VtaS52NjRbMV07IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE4XSwgWCMjbW8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOV0sIFgjI211KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjBdLCBYIyNzYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIxXSwgWCMjc2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMl0sIFgjI3NpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjNdLCBYIyNzbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzI0XSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYWdlID0gWSMjYmFnZTsgXAorICAgIFgjI2JlZ2kgPSBZIyNiZWdpOyBcCisgICAgWCMjYmkgPSBZIyNiaTsgXAorICAgIFgjI2JvID0gWSMjYm87IFwKKyAgICBYIyNidSA9IFkjI2J1OyBcCisgICAgWCMjZ2EgPSBZIyNnYTsgXAorICAgIFgjI2dvID0gWSMjZ287IFwKKyAgICBYIyNndSA9IFkjI2d1OyBcCisgICAgWCMja2FtZSA9IFkjI2thbWU7IFwKKyAgICBYIyNrZW1pID0gWSMja2VtaTsgXAorICAgIFgjI2tpID0gWSMja2k7IFwKKyAgICBYIyNrbyA9IFkjI2tvOyBcCisgICAgWCMja3UgPSBZIyNrdTsgXAorICAgIFgjI21hID0gWSMjbWE7IFwKKyAgICBYIyNtbyA9IFkjI21vOyBcCisgICAgWCMjbXUgPSBZIyNtdTsgXAorICAgIFgjI3NhID0gWSMjc2E7IFwKKyAgICBYIyNzZSA9IFkjI3NlOyBcCisgICAgWCMjc2kgPSBZIyNzaTsgXAorICAgIFgjI3NvID0gWSMjc287IFwKKyAgICBYIyNzdSA9IFkjI3N1OyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQ2NC5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhMzBlMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zCkBAIC0wLDAgKzEsNTE3IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFY2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFY2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFY2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFY2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFY2NCBBc2EsIEFzZSwgQXNpLCBBc28sIEFzdTsgXAorICAgIFY2NCBCYmEsIEJiZSwgQmJpLCBCYm8sIEJidTsgXAorICAgIFY2NCBCZ2EsIEJnZSwgQmdpLCBCZ28sIEJndTsgXAorICAgIFY2NCBCa2EsIEJrZSwgQmtpLCBCa28sIEJrdTsgXAorICAgIFY2NCBCbWEsIEJtZSwgQm1pLCBCbW8sIEJtdTsgXAorICAgIFY2NCBCc2EsIEJzZSwgQnNpLCBCc28sIEJzdTsgXAorICAgIFY2NCBDYSwgQ2UsIENpLCBDbywgQ3U7IFwKKyAgICBWNjQgRGEsIERlLCBEaSwgRG8sIER1OyBcCisgICAgVjY0IEViYSwgRWJlLCBFYmksIEVibywgRWJ1OyBcCisgICAgVjY0IEVnYSwgRWdlLCBFZ2ksIEVnbywgRWd1OyBcCisgICAgVjY0IEVrYSwgRWtlLCBFa2ksIEVrbywgRWt1OyBcCisgICAgVjY0IEVtYSwgRW1lLCBFbWksIEVtbywgRW11OyBcCisgICAgVjY0IEVzYSwgRXNlLCBFc2ksIEVzbywgRXN1OyBcCisKKyNkZWZpbmUgcHJlcGFyZVRoZXRhIFwKKyAgICBDYSA9IFhPUjY0KEFiYSwgWE9SNjQoQWdhLCBYT1I2NChBa2EsIFhPUjY0KEFtYSwgQXNhKSkpKTsgXAorICAgIENlID0gWE9SNjQoQWJlLCBYT1I2NChBZ2UsIFhPUjY0KEFrZSwgWE9SNjQoQW1lLCBBc2UpKSkpOyBcCisgICAgQ2kgPSBYT1I2NChBYmksIFhPUjY0KEFnaSwgWE9SNjQoQWtpLCBYT1I2NChBbWksIEFzaSkpKSk7IFwKKyAgICBDbyA9IFhPUjY0KEFibywgWE9SNjQoQWdvLCBYT1I2NChBa28sIFhPUjY0KEFtbywgQXNvKSkpKTsgXAorICAgIEN1ID0gWE9SNjQoQWJ1LCBYT1I2NChBZ3UsIFhPUjY0KEFrdSwgWE9SNjQoQW11LCBBc3UpKSkpOyBcCisKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgRGEgPSBYT1I2NChDdSwgUk9MNjQoQ2UsIDEpKTsgXAorICAgIERlID0gWE9SNjQoQ2EsIFJPTDY0KENpLCAxKSk7IFwKKyAgICBEaSA9IFhPUjY0KENlLCBST0w2NChDbywgMSkpOyBcCisgICAgRG8gPSBYT1I2NChDaSwgUk9MNjQoQ3UsIDEpKTsgXAorICAgIER1ID0gWE9SNjQoQ28sIFJPTDY0KENhLCAxKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JhLCBEYSk7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjZ2UsIERlKTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBYT1JlcTY0KEEjI2tpLCBEaSk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgRSMjYmEgPSBYT1I2NChCYmEsIEFORG51NjQoQmJlLCBCYmkpKTsgXAorICAgIFhPUmVxNjQoRSMjYmEsIENPTlNUNjQoS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXSkpOyBcCisgICAgQ2EgPSBFIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjbW8sIERvKTsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBFIyNiZSA9IFhPUjY0KEJiZSwgQU5EbnU2NChCYmksIEJibykpOyBcCisgICAgQ2UgPSBFIyNiZTsgXAorICAgIFhPUmVxNjQoQSMjc3UsIER1KTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiaSA9IFhPUjY0KEJiaSwgQU5EbnU2NChCYm8sIEJidSkpOyBcCisgICAgQ2kgPSBFIyNiaTsgXAorICAgIEUjI2JvID0gWE9SNjQoQmJvLCBBTkRudTY0KEJidSwgQmJhKSk7IFwKKyAgICBDbyA9IEUjI2JvOyBcCisgICAgRSMjYnUgPSBYT1I2NChCYnUsIEFORG51NjQoQmJhLCBCYmUpKTsgXAorICAgIEN1ID0gRSMjYnU7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JvLCBEbyk7IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgWE9SZXE2NChBIyNndSwgRHUpOyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIFhPUmVxNjQoQSMja2EsIERhKTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEUjI2dhID0gWE9SNjQoQmdhLCBBTkRudTY0KEJnZSwgQmdpKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNnYSk7IFwKKyAgICBYT1JlcTY0KEEjI21lLCBEZSk7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgRSMjZ2UgPSBYT1I2NChCZ2UsIEFORG51NjQoQmdpLCBCZ28pKTsgXAorICAgIFhPUmVxNjQoQ2UsIEUjI2dlKTsgXAorICAgIFhPUmVxNjQoQSMjc2ksIERpKTsgXAorICAgIEJndSA9IFJPTDY0KEEjI3NpLCA2MSk7IFwKKyAgICBFIyNnaSA9IFhPUjY0KEJnaSwgQU5EbnU2NChCZ28sIEJndSkpOyBcCisgICAgWE9SZXE2NChDaSwgRSMjZ2kpOyBcCisgICAgRSMjZ28gPSBYT1I2NChCZ28sIEFORG51NjQoQmd1LCBCZ2EpKTsgXAorICAgIFhPUmVxNjQoQ28sIEUjI2dvKTsgXAorICAgIEUjI2d1ID0gWE9SNjQoQmd1LCBBTkRudTY0KEJnYSwgQmdlKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBFIyNndSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JlLCBEZSk7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBYT1JlcTY0KEEjI2dpLCBEaSk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBYT1JlcTY0KEEjI2tvLCBEbyk7IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgRSMja2EgPSBYT1I2NChCa2EsIEFORG51NjQoQmtlLCBCa2kpKTsgXAorICAgIFhPUmVxNjQoQ2EsIEUjI2thKTsgXAorICAgIFhPUmVxNjQoQSMjbXUsIER1KTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEUjI2tlID0gWE9SNjQoQmtlLCBBTkRudTY0KEJraSwgQmtvKSk7IFwKKyAgICBYT1JlcTY0KENlLCBFIyNrZSk7IFwKKyAgICBYT1JlcTY0KEEjI3NhLCBEYSk7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2kgPSBYT1I2NChCa2ksIEFORG51NjQoQmtvLCBCa3UpKTsgXAorICAgIFhPUmVxNjQoQ2ksIEUjI2tpKTsgXAorICAgIEUjI2tvID0gWE9SNjQoQmtvLCBBTkRudTY0KEJrdSwgQmthKSk7IFwKKyAgICBYT1JlcTY0KENvLCBFIyNrbyk7IFwKKyAgICBFIyNrdSA9IFhPUjY0KEJrdSwgQU5EbnU2NChCa2EsIEJrZSkpOyBcCisgICAgWE9SZXE2NChDdSwgRSMja3UpOyBcCitcCisgICAgWE9SZXE2NChBIyNidSwgRHUpOyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIFhPUmVxNjQoQSMjZ2EsIERhKTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBYT1JlcTY0KEEjI2tlLCBEZSk7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgRSMjbWEgPSBYT1I2NChCbWEsIEFORG51NjQoQm1lLCBCbWkpKTsgXAorICAgIFhPUmVxNjQoQ2EsIEUjI21hKTsgXAorICAgIFhPUmVxNjQoQSMjbWksIERpKTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBFIyNtZSA9IFhPUjY0KEJtZSwgQU5EbnU2NChCbWksIEJtbykpOyBcCisgICAgWE9SZXE2NChDZSwgRSMjbWUpOyBcCisgICAgWE9SZXE2NChBIyNzbywgRG8pOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21pID0gWE9SNjQoQm1pLCBBTkRudTY0KEJtbywgQm11KSk7IFwKKyAgICBYT1JlcTY0KENpLCBFIyNtaSk7IFwKKyAgICBFIyNtbyA9IFhPUjY0KEJtbywgQU5EbnU2NChCbXUsIEJtYSkpOyBcCisgICAgWE9SZXE2NChDbywgRSMjbW8pOyBcCisgICAgRSMjbXUgPSBYT1I2NChCbXUsIEFORG51NjQoQm1hLCBCbWUpKTsgXAorICAgIFhPUmVxNjQoQ3UsIEUjI211KTsgXAorXAorICAgIFhPUmVxNjQoQSMjYmksIERpKTsgXAorICAgIEJzYSA9IFJPTDY0KEEjI2JpLCA2Mik7IFwKKyAgICBYT1JlcTY0KEEjI2dvLCBEbyk7IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgWE9SZXE2NChBIyNrdSwgRHUpOyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEUjI3NhID0gWE9SNjQoQnNhLCBBTkRudTY0KEJzZSwgQnNpKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNzYSk7IFwKKyAgICBYT1JlcTY0KEEjI21hLCBEYSk7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgRSMjc2UgPSBYT1I2NChCc2UsIEFORG51NjQoQnNpLCBCc28pKTsgXAorICAgIFhPUmVxNjQoQ2UsIEUjI3NlKTsgXAorICAgIFhPUmVxNjQoQSMjc2UsIERlKTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NpID0gWE9SNjQoQnNpLCBBTkRudTY0KEJzbywgQnN1KSk7IFwKKyAgICBYT1JlcTY0KENpLCBFIyNzaSk7IFwKKyAgICBFIyNzbyA9IFhPUjY0KEJzbywgQU5EbnU2NChCc3UsIEJzYSkpOyBcCisgICAgWE9SZXE2NChDbywgRSMjc28pOyBcCisgICAgRSMjc3UgPSBYT1I2NChCc3UsIEFORG51NjQoQnNhLCBCc2UpKTsgXAorICAgIFhPUmVxNjQoQ3UsIEUjI3N1KTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYSA9IFhPUjY0KEN1LCBST0w2NChDZSwgMSkpOyBcCisgICAgRGUgPSBYT1I2NChDYSwgUk9MNjQoQ2ksIDEpKTsgXAorICAgIERpID0gWE9SNjQoQ2UsIFJPTDY0KENvLCAxKSk7IFwKKyAgICBEbyA9IFhPUjY0KENpLCBST0w2NChDdSwgMSkpOyBcCisgICAgRHUgPSBYT1I2NChDbywgUk9MNjQoQ2EsIDEpKTsgXAorXAorICAgIFhPUmVxNjQoQSMjYmEsIERhKTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgWE9SZXE2NChBIyNnZSwgRGUpOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIFhPUmVxNjQoQSMja2ksIERpKTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBFIyNiYSA9IFhPUjY0KEJiYSwgQU5EbnU2NChCYmUsIEJiaSkpOyBcCisgICAgWE9SZXE2NChFIyNiYSwgQ09OU1Q2NChLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldKSk7IFwKKyAgICBYT1JlcTY0KEEjI21vLCBEbyk7IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgRSMjYmUgPSBYT1I2NChCYmUsIEFORG51NjQoQmJpLCBCYm8pKTsgXAorICAgIFhPUmVxNjQoQSMjc3UsIER1KTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiaSA9IFhPUjY0KEJiaSwgQU5EbnU2NChCYm8sIEJidSkpOyBcCisgICAgRSMjYm8gPSBYT1I2NChCYm8sIEFORG51NjQoQmJ1LCBCYmEpKTsgXAorICAgIEUjI2J1ID0gWE9SNjQoQmJ1LCBBTkRudTY0KEJiYSwgQmJlKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JvLCBEbyk7IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgWE9SZXE2NChBIyNndSwgRHUpOyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIFhPUmVxNjQoQSMja2EsIERhKTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEUjI2dhID0gWE9SNjQoQmdhLCBBTkRudTY0KEJnZSwgQmdpKSk7IFwKKyAgICBYT1JlcTY0KEEjI21lLCBEZSk7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgRSMjZ2UgPSBYT1I2NChCZ2UsIEFORG51NjQoQmdpLCBCZ28pKTsgXAorICAgIFhPUmVxNjQoQSMjc2ksIERpKTsgXAorICAgIEJndSA9IFJPTDY0KEEjI3NpLCA2MSk7IFwKKyAgICBFIyNnaSA9IFhPUjY0KEJnaSwgQU5EbnU2NChCZ28sIEJndSkpOyBcCisgICAgRSMjZ28gPSBYT1I2NChCZ28sIEFORG51NjQoQmd1LCBCZ2EpKTsgXAorICAgIEUjI2d1ID0gWE9SNjQoQmd1LCBBTkRudTY0KEJnYSwgQmdlKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JlLCBEZSk7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBYT1JlcTY0KEEjI2dpLCBEaSk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBYT1JlcTY0KEEjI2tvLCBEbyk7IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgRSMja2EgPSBYT1I2NChCa2EsIEFORG51NjQoQmtlLCBCa2kpKTsgXAorICAgIFhPUmVxNjQoQSMjbXUsIER1KTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEUjI2tlID0gWE9SNjQoQmtlLCBBTkRudTY0KEJraSwgQmtvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3NhLCBEYSk7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2kgPSBYT1I2NChCa2ksIEFORG51NjQoQmtvLCBCa3UpKTsgXAorICAgIEUjI2tvID0gWE9SNjQoQmtvLCBBTkRudTY0KEJrdSwgQmthKSk7IFwKKyAgICBFIyNrdSA9IFhPUjY0KEJrdSwgQU5EbnU2NChCa2EsIEJrZSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNidSwgRHUpOyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIFhPUmVxNjQoQSMjZ2EsIERhKTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBYT1JlcTY0KEEjI2tlLCBEZSk7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgRSMjbWEgPSBYT1I2NChCbWEsIEFORG51NjQoQm1lLCBCbWkpKTsgXAorICAgIFhPUmVxNjQoQSMjbWksIERpKTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBFIyNtZSA9IFhPUjY0KEJtZSwgQU5EbnU2NChCbWksIEJtbykpOyBcCisgICAgWE9SZXE2NChBIyNzbywgRG8pOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21pID0gWE9SNjQoQm1pLCBBTkRudTY0KEJtbywgQm11KSk7IFwKKyAgICBFIyNtbyA9IFhPUjY0KEJtbywgQU5EbnU2NChCbXUsIEJtYSkpOyBcCisgICAgRSMjbXUgPSBYT1I2NChCbXUsIEFORG51NjQoQm1hLCBCbWUpKTsgXAorXAorICAgIFhPUmVxNjQoQSMjYmksIERpKTsgXAorICAgIEJzYSA9IFJPTDY0KEEjI2JpLCA2Mik7IFwKKyAgICBYT1JlcTY0KEEjI2dvLCBEbyk7IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgWE9SZXE2NChBIyNrdSwgRHUpOyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEUjI3NhID0gWE9SNjQoQnNhLCBBTkRudTY0KEJzZSwgQnNpKSk7IFwKKyAgICBYT1JlcTY0KEEjI21hLCBEYSk7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgRSMjc2UgPSBYT1I2NChCc2UsIEFORG51NjQoQnNpLCBCc28pKTsgXAorICAgIFhPUmVxNjQoQSMjc2UsIERlKTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NpID0gWE9SNjQoQnNpLCBBTkRudTY0KEJzbywgQnN1KSk7IFwKKyAgICBFIyNzbyA9IFhPUjY0KEJzbywgQU5EbnU2NChCc3UsIEJzYSkpOyBcCisgICAgRSMjc3UgPSBYT1I2NChCc3UsIEFORG51NjQoQnNhLCBCc2UpKTsgXAorXAorCitzdGF0aWMgY29uc3QgVUlOVDY0IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbMjRdID0geworICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwODJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDhhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwMFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwOGJVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDhhVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4OFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDg5VUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwM1VMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDgwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4MFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDA4VUxMIH07CisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjU3NmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFgjI2thID0gTE9BRDY0KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrZSA9IExPQUQ2NChzdGF0ZVsxMV0pOyBcCisgICAgWCMja2kgPSBMT0FENjQoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tvID0gTE9BRDY0KHN0YXRlWzEzXSk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWCMjbWEgPSBMT0FENjQoc3RhdGVbMTVdKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNtaSA9IExPQUQ2NChzdGF0ZVsxN10pOyBcCisgICAgWCMjbW8gPSBMT0FENjQoc3RhdGVbMThdKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNzYSA9IExPQUQ2NChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2thID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEwXSksIExPQUQ2NChpbnB1dFsxMF0pKTsgXAorICAgIFgjI2tlID0gWE9SNjQoTE9BRDY0KHN0YXRlWzExXSksIExPQUQ2NChpbnB1dFsxMV0pKTsgXAorICAgIFgjI2tpID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tvID0gTE9BRDY0KHN0YXRlWzEzXSk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWCMjbWEgPSBMT0FENjQoc3RhdGVbMTVdKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNtaSA9IExPQUQ2NChzdGF0ZVsxN10pOyBcCisgICAgWCMjbW8gPSBMT0FENjQoc3RhdGVbMThdKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNzYSA9IExPQUQ2NChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMF0pLCBMT0FENjQoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMV0pLCBMT0FENjQoaW5wdXRbIDFdKSk7IFwKKyAgICBYIyNiaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMl0pLCBMT0FENjQoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNibyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgM10pLCBMT0FENjQoaW5wdXRbIDNdKSk7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBYIyNnYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNV0pLCBMT0FENjQoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNl0pLCBMT0FENjQoaW5wdXRbIDZdKSk7IFwKKyAgICBYIyNnaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgN10pLCBMT0FENjQoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOF0pLCBMT0FENjQoaW5wdXRbIDhdKSk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNrYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMF0pLCBMT0FENjQoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMV0pLCBMT0FENjQoaW5wdXRbMTFdKSk7IFwKKyAgICBYIyNraSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNrbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxM10pLCBMT0FENjQoaW5wdXRbMTNdKSk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYIyNtYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNV0pLCBMT0FENjQoaW5wdXRbMTVdKSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMjbWkgPSBYT1I2NChMT0FENjQoc3RhdGVbMTddKSwgTE9BRDY0KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbW8gPSBMT0FENjQoc3RhdGVbMThdKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNzYSA9IExPQUQ2NChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMzQ0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMF0pLCBMT0FENjQoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMV0pLCBMT0FENjQoaW5wdXRbIDFdKSk7IFwKKyAgICBYIyNiaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMl0pLCBMT0FENjQoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNibyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgM10pLCBMT0FENjQoaW5wdXRbIDNdKSk7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBYIyNnYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNV0pLCBMT0FENjQoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNl0pLCBMT0FENjQoaW5wdXRbIDZdKSk7IFwKKyAgICBYIyNnaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgN10pLCBMT0FENjQoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOF0pLCBMT0FENjQoaW5wdXRbIDhdKSk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNrYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMF0pLCBMT0FENjQoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMV0pLCBMT0FENjQoaW5wdXRbMTFdKSk7IFwKKyAgICBYIyNraSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNrbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxM10pLCBMT0FENjQoaW5wdXRbMTNdKSk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYIyNtYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNV0pLCBMT0FENjQoaW5wdXRbMTVdKSk7IFwKKyAgICBYIyNtZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNl0pLCBMT0FENjQoaW5wdXRbMTZdKSk7IFwKKyAgICBYIyNtaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxN10pLCBMT0FENjQoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxOF0pLCBMT0FENjQoaW5wdXRbMThdKSk7IFwKKyAgICBYIyNtdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxOV0pLCBMT0FENjQoaW5wdXRbMTldKSk7IFwKKyAgICBYIyNzYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsyMF0pLCBMT0FENjQoaW5wdXRbMjBdKSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhID0gTE9BRDY0KHN0YXRlWyAwXSk7IFwKKyAgICBYIyNiZSA9IExPQUQ2NChzdGF0ZVsgMV0pOyBcCisgICAgWCMjYmkgPSBMT0FENjQoc3RhdGVbIDJdKTsgXAorICAgIFgjI2JvID0gTE9BRDY0KHN0YXRlWyAzXSk7IFwKKyAgICBYIyNidSA9IExPQUQ2NChzdGF0ZVsgNF0pOyBcCisgICAgWCMjZ2EgPSBMT0FENjQoc3RhdGVbIDVdKTsgXAorICAgIFgjI2dlID0gTE9BRDY0KHN0YXRlWyA2XSk7IFwKKyAgICBYIyNnaSA9IExPQUQ2NChzdGF0ZVsgN10pOyBcCisgICAgWCMjZ28gPSBMT0FENjQoc3RhdGVbIDhdKTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYIyNrYSA9IExPQUQ2NChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2UgPSBMT0FENjQoc3RhdGVbMTFdKTsgXAorICAgIFgjI2tpID0gTE9BRDY0KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNrbyA9IExPQUQ2NChzdGF0ZVsxM10pOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFgjI21hID0gTE9BRDY0KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIFNUT1JFNjQoc3RhdGVbIDBdLCBYIyNiYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAxXSwgWCMjYmUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMl0sIFgjI2JpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDNdLCBYIyNibyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA0XSwgWCMjYnUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgNV0sIFgjI2dhKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDZdLCBYIyNnZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA3XSwgWCMjZ2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgOF0sIFgjI2dvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDldLCBYIyNndSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEwXSwgWCMja2EpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMV0sIFgjI2tlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTJdLCBYIyNraSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEzXSwgWCMja28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNF0sIFgjI2t1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTVdLCBYIyNtYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE2XSwgWCMjbWUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxN10sIFgjI21pKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMThdLCBYIyNtbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE5XSwgWCMjbXUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMF0sIFgjI3NhKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjFdLCBYIyNzZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIyXSwgWCMjc2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyM10sIFgjI3NvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjRdLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5U3RhdGVWYXJpYWJsZXMoWCwgWSkgXAorICAgIFgjI2JhID0gWSMjYmE7IFwKKyAgICBYIyNiZSA9IFkjI2JlOyBcCisgICAgWCMjYmkgPSBZIyNiaTsgXAorICAgIFgjI2JvID0gWSMjYm87IFwKKyAgICBYIyNidSA9IFkjI2J1OyBcCisgICAgWCMjZ2EgPSBZIyNnYTsgXAorICAgIFgjI2dlID0gWSMjZ2U7IFwKKyAgICBYIyNnaSA9IFkjI2dpOyBcCisgICAgWCMjZ28gPSBZIyNnbzsgXAorICAgIFgjI2d1ID0gWSMjZ3U7IFwKKyAgICBYIyNrYSA9IFkjI2thOyBcCisgICAgWCMja2UgPSBZIyNrZTsgXAorICAgIFgjI2tpID0gWSMja2k7IFwKKyAgICBYIyNrbyA9IFkjI2tvOyBcCisgICAgWCMja3UgPSBZIyNrdTsgXAorICAgIFgjI21hID0gWSMjbWE7IFwKKyAgICBYIyNtZSA9IFkjI21lOyBcCisgICAgWCMjbWkgPSBZIyNtaTsgXAorICAgIFgjI21vID0gWSMjbW87IFwKKyAgICBYIyNtdSA9IFkjI211OyBcCisgICAgWCMjc2EgPSBZIyNzYTsgXAorICAgIFgjI3NlID0gWSMjc2U7IFwKKyAgICBYIyNzaSA9IFkjI3NpOyBcCisgICAgWCMjc28gPSBZIyNzbzsgXAorICAgIFgjI3N1ID0gWSMjc3U7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtdW5yb2xsaW5nLm1hY3JvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M2OTRjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MKQEAgLTAsMCArMSwxMjQgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaWYgKFVucm9sbGluZyA9PSAyNCkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCAwLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDEsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggMiwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCAzLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDQsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggNSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA2LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDcsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggOCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA5LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTAsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxMSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDEyLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTMsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxNCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE1LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTYsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxNywgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE4LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTksIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgyMCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDIxLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMjIsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YSgyMywgRSwgQSkgXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2VsaWYgKFVucm9sbGluZyA9PSAxMikKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTEyKSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgICwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyAxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgMywgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA0LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDUsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgNiwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA3LCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDgsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgOSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzEwLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMTEsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gOCkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTgpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMiwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzMsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs0LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzYsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs3LCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDYpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz02KSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSszLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzUsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gNCkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTQpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMiwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzMsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMykKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTMpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMiwgQSwgRSkgXAorICAgICAgICBjb3B5U3RhdGVWYXJpYWJsZXMoQSwgRSkgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2VsaWYgKFVucm9sbGluZyA9PSAyKQorI2RlZmluZSByb3VuZHMgXAorICAgIHByZXBhcmVUaGV0YSBcCisgICAgZm9yKGk9MDsgaTwyNDsgaSs9MikgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzEsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMSkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrKykgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICwgQSwgRSkgXAorICAgICAgICBjb3B5U3RhdGVWYXJpYWJsZXMoQSwgRSkgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2Vsc2UKKyNlcnJvciAiVW5yb2xsaW5nIGlzIG5vdCBjb3JyZWN0bHkgc3BlY2lmaWVkISIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAteG9wLm1hY3JvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNjOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MKQEAgLTAsMCArMSw1NzMgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjZGVmaW5lIGRlY2xhcmVBQkNERSBcCisgICAgVjEyOCBBYmFnZSwgQWJlZ2ksIEFiaWdvLCBBYm9ndSwgQWJ1Z2E7IFwKKyAgICBWMTI4IEFrYW1lLCBBa2VtaSwgQWtpbW8sIEFrb211LCBBa3VtYTsgXAorICAgIFYxMjggQWJhZSwgQWJpbywgQWdhZSwgQWdpbywgQWthZSwgQWtpbywgQW1hZSwgQW1pbzsgXAorICAgIFY2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFY2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFY2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFY2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFYxMjggQXNhc2UsIEFzaXNvOyBcCisgICAgVjY0IEFzdTsgXAorICAgIFYxMjggQmJhZ2UsIEJiZWdpLCBCYmlnbywgQmJvZ3UsIEJidWdhOyBcCisgICAgVjEyOCBCa2FtZSwgQmtlbWksIEJraW1vLCBCa29tdSwgQmt1bWE7IFwKKyAgICBWMTI4IEJzYXNlLCBCc2VzaSwgQnNpc28sIEJzb3N1LCBCc3VzYTsgXAorICAgIFYxMjggQ2FlLCBDZWksIENpbywgQ291LCBDdWE7IFwKKyAgICBWMTI4IERhdSwgRGVhLCBEaWUsIERvaSwgRHVvOyBcCisgICAgVjEyOCBEdWEsIERhZSwgRGVpLCBEaW8sIERvdTsgXAorICAgIFYxMjggRWJhZ2UsIEViZWdpLCBFYmlnbywgRWJvZ3UsIEVidWdhOyBcCisgICAgVjEyOCBFa2FtZSwgRWtlbWksIEVraW1vLCBFa29tdSwgRWt1bWE7IFwKKyAgICBWMTI4IEVzYXNlLCBFc2lzbzsgXAorICAgIFY2NCBFc3U7IFwKKyAgICBWMTI4IFplcm87CisKKyNkZWZpbmUgcHJlcGFyZVRoZXRhCisKKyNkZWZpbmUgY29tcHV0ZUQgXAorICAgIEN1YSA9IEdFVDY0TE9MTyhDdWEsIENhZSk7IFwKKyAgICBEZWkgPSBYT1IxMjgoQ2FlLCBST0w2NDY0c2FtZShDaW8sIDEpKTsgXAorICAgIERvdSA9IFhPUjEyOChDaW8sIFJPTDY0NjRzYW1lKEN1YSwgMSkpOyBcCisgICAgQ2VpID0gR0VUNjRISUxPKENhZSwgQ2lvKTsgXAorICAgIERhZSA9IFhPUjEyOChDdWEsIFJPTDY0NjRzYW1lKENlaSwgMSkpOyBcCisgICAgRGF1ID0gR0VUNjRMT0hJKERhZSwgRG91KTsgXAorICAgIERlYSA9IFNXQVA2NChEYWUpOyBcCisgICAgRGllID0gU1dBUDY0KERlaSk7IFwKKyAgICBEb2kgPSBHRVQ2NExPTE8oRG91LCBEaWUpOyBcCisgICAgRHVvID0gU1dBUDY0KERvdSk7CisKKy8qICAtLS0gVGhldGEgUmhvIFBpIENoaSBJb3RhIFByZXBhcmUtdGhldGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIGNvbXB1dGVEIFwKKyAgICBcCisgICAgQmJhZ2UgPSBYT1IxMjgoR0VUNjRMT0hJKEEjI2JhZ2UsIEEjI2JvZ3UpLCBEYXUpOyBcCisgICAgQmJhZ2UgPSBST0w2NDY0KEJiYWdlLCAwLCAyMCk7IFwKKyAgICBCYmVnaSA9IFhPUjEyOChHRVQ2NEhJTE8oQSMjYmFnZSwgQSMja2FtZSksIERlYSk7IFwKKyAgICBCYmVnaSA9IFJPTDY0NjQoQmJlZ2ksIDQ0LCAzKTsgXAorICAgIEJiaWdvID0gWE9SMTI4KEdFVDY0TE9ISShBIyNraW1vLCBBIyNrYW1lKSwgRGllKTsgXAorICAgIEJiaWdvID0gUk9MNjQ2NChCYmlnbywgNDMsIDQ1KTsgXAorICAgIEUjI2JhZ2UgPSBYT1IxMjgoQmJhZ2UsIEFORG51MTI4KEJiZWdpLCBCYmlnbykpOyBcCisgICAgWE9SZXExMjgoRSMjYmFnZSwgQ09OU1Q2NChLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldKSk7IFwKKyAgICBDYWUgPSBFIyNiYWdlOyBcCisgICAgQmJvZ3UgPSBYT1IxMjgoR0VUNjRISUxPKEEjI2tpbW8sIEEjI3Npc28pLCBEb2kpOyBcCisgICAgQmJvZ3UgPSBST0w2NDY0KEJib2d1LCAyMSwgNjEpOyBcCisgICAgRSMjYmVnaSA9IFhPUjEyOChCYmVnaSwgQU5EbnUxMjgoQmJpZ28sIEJib2d1KSk7IFwKKyAgICBDZWkgPSBFIyNiZWdpOyBcCisgICAgQmJ1Z2EgPSBYT1IxMjgoR0VUNjRMT0xPKEEjI3N1LCBBIyNib2d1KSwgRHVvKTsgXAorICAgIEJidWdhID0gUk9MNjQ2NChCYnVnYSwgMTQsIDI4KTsgXAorICAgIEUjI2JpZ28gPSBYT1IxMjgoQmJpZ28sIEFORG51MTI4KEJib2d1LCBCYnVnYSkpOyBcCisgICAgQ2lvID0gRSMjYmlnbzsgXAorICAgIEUjI2JvZ3UgPSBYT1IxMjgoQmJvZ3UsIEFORG51MTI4KEJidWdhLCBCYmFnZSkpOyBcCisgICAgQ291ID0gRSMjYm9ndTsgXAorICAgIEUjI2J1Z2EgPSBYT1IxMjgoQmJ1Z2EsIEFORG51MTI4KEJiYWdlLCBCYmVnaSkpOyBcCisgICAgQ3VhID0gRSMjYnVnYTsgXAorXAorICAgIEJrYW1lID0gWE9SMTI4KEdFVDY0TE9ISShBIyNiZWdpLCBBIyNidWdhKSwgRGVhKTsgXAorICAgIEJrYW1lID0gUk9MNjQ2NChCa2FtZSwgMSwgMzYpOyBcCisgICAgQmtlbWkgPSBYT1IxMjgoR0VUNjRISUxPKEEjI2JlZ2ksIEEjI2tlbWkpLCBEaWUpOyBcCisgICAgQmtlbWkgPSBST0w2NDY0KEJrZW1pLCA2LCAxMCk7IFwKKyAgICBCa2ltbyA9IFhPUjEyOChHRVQ2NExPSEkoQSMja29tdSwgQSMja2VtaSksIERvaSk7IFwKKyAgICBCa2ltbyA9IFJPTDY0NjQoQmtpbW8sIDI1LCAxNSk7IFwKKyAgICBFIyNrYW1lID0gWE9SMTI4KEJrYW1lLCBBTkRudTEyOChCa2VtaSwgQmtpbW8pKTsgXAorICAgIFhPUmVxMTI4KENhZSwgRSMja2FtZSk7IFwKKyAgICBCa29tdSA9IFhPUjEyOChHRVQ2NEhJSEkoQSMja29tdSwgQSMjc2lzbyksIER1byk7IFwKKyAgICBCa29tdSA9IFJPTDY0NjQoQmtvbXUsIDgsIDU2KTsgXAorICAgIEUjI2tlbWkgPSBYT1IxMjgoQmtlbWksIEFORG51MTI4KEJraW1vLCBCa29tdSkpOyBcCisgICAgWE9SZXExMjgoQ2VpLCBFIyNrZW1pKTsgXAorICAgIEJrdW1hID0gWE9SMTI4KEdFVDY0TE9MTyhBIyNzYXNlLCBBIyNidWdhKSwgRGF1KTsgXAorICAgIEJrdW1hID0gUk9MNjQ2NChCa3VtYSwgMTgsIDI3KTsgXAorICAgIEUjI2tpbW8gPSBYT1IxMjgoQmtpbW8sIEFORG51MTI4KEJrb211LCBCa3VtYSkpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBFIyNraW1vKTsgXAorICAgIEUjI2tvbXUgPSBYT1IxMjgoQmtvbXUsIEFORG51MTI4KEJrdW1hLCBCa2FtZSkpOyBcCisgICAgWE9SZXExMjgoQ291LCBFIyNrb211KTsgXAorICAgIEUjI2t1bWEgPSBYT1IxMjgoQmt1bWEsIEFORG51MTI4KEJrYW1lLCBCa2VtaSkpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBFIyNrdW1hKTsgXAorXAorICAgIEJzYXNlID0gWE9SMTI4KEEjI2JpZ28sIFNXQVA2NChEb2kpKTsgXAorICAgIEJzYXNlID0gUk9MNjQ2NChCc2FzZSwgNjIsIDU1KTsgXAorICAgIEJzaXNvID0gWE9SMTI4KEEjI2t1bWEsIFNXQVA2NChEYXUpKTsgXAorICAgIEJzaXNvID0gUk9MNjQ2NChCc2lzbywgMzksIDQxKTsgXAorICAgIEJzdXNhID0gWE9SNjQoQ09QWTY0SEkyTE8oQSMjc2FzZSksIERlaSk7IFwKKyAgICBCc3VzYSA9IFJPTDY0NjRzYW1lKEJzdXNhLCAyKTsgXAorICAgIEJzdXNhID0gR0VUNjRMT0xPKEJzdXNhLCBCc2FzZSk7IFwKKyAgICBCc2VzaSA9IEdFVDY0SElMTyhCc2FzZSwgQnNpc28pOyBcCisgICAgQnNvc3UgPSBHRVQ2NEhJTE8oQnNpc28sIEJzdXNhKTsgXAorICAgIEUjI3Nhc2UgPSBYT1IxMjgoQnNhc2UsIEFORG51MTI4KEJzZXNpLCBCc2lzbykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBFIyNzYXNlKTsgXAorICAgIEUjI3Npc28gPSBYT1IxMjgoQnNpc28sIEFORG51MTI4KEJzb3N1LCBCc3VzYSkpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBFIyNzaXNvKTsgXAorICAgIEUjI3N1ID0gR0VUNjRMT0xPKFhPUjEyOChCc3VzYSwgQU5EbnUxMjgoQnNhc2UsIEJzZXNpKSksIFplcm8pOyBcCisgICAgWE9SZXExMjgoQ3VhLCBFIyNzdSk7IFwKK1wKKyAgICBaZXJvID0gWkVSTzEyOCgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoQ3VhLCBaZXJvKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0TE9MTyhaZXJvLCBDZWkpKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRISUhJKENlaSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBHRVQ2NExPTE8oWmVybywgQ291KSk7IFwKKyAgICBYT1JlcTEyOChDdWEsIEdFVDY0SElISShDb3UsIFplcm8pKTsgXAorCisvKiAgLS0tIFRoZXRhIFJobyBQaSBDaGkgSW90YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCBhbmQgMTI4LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKQorCitzdGF0aWMgY29uc3QgVUlOVDY0IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbMjRdID0geworICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwODJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDhhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwMFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwOGJVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDhhVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4OFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDg5VUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwM1VMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDgwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4MFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDA4VUxMIH07CisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjU3NmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IExPQUQ2NChzdGF0ZVsgOV0pOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IExPQUQxMjgoc3RhdGVbMTBdKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gTE9BRDEyOChzdGF0ZVsxMl0pOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gTE9BRDEyOChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNrb211ID0gR0VUNjRMT0xPKFgjI2tvLCBYIyNtdSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjbXUpOyBcCisgICAgWCMjc2FzZSA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FzZSk7IFwKKyAgICBYIyNzaXNvID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaXNvKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IExPQUQxMjgoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlOyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLCBYIyNiYWUpOyBcCisgICAgQ2FlID0gWCMjYmFlOyBcCisgICAgWCMjYmlvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWU7IFwKKyAgICBYIyNidWdhID0gR0VUNjRMT0xPKFgjI2J1LCBYIyNnYSk7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNiYWdlID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNnaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxNF0pLCBMT0FEMTI4KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNrb211ID0gR0VUNjRMT0xPKFgjI2tvLCBYIyNtdSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjbXUpOyBcCisgICAgWCMjc2FzZSA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FzZSk7IFwKKyAgICBYIyNzaXNvID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaXNvKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzE0XSksIExPQUQxMjgoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNl0pLCBMT0FENjQoaW5wdXRbMTZdKSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMTUyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlOyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLCBYIyNiYWUpOyBcCisgICAgQ2FlID0gWCMjYmFlOyBcCisgICAgWCMjYmlvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWU7IFwKKyAgICBYIyNidWdhID0gR0VUNjRMT0xPKFgjI2J1LCBYIyNnYSk7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNiYWdlID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNnaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxNF0pLCBMT0FEMTI4KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE3XSksIExPQUQ2NChpbnB1dFsxN10pKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTRdKSwgTE9BRDEyOChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxN10pLCBMT0FEMTI4dShpbnB1dFsxN10pKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTldKSwgTE9BRDY0KGlucHV0WzE5XSkpOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsyMF0pLCBMT0FENjQoaW5wdXRbMjBdKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYWUgPSBMT0FEMTI4KHN0YXRlWyAwXSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IExPQUQxMjgoc3RhdGVbIDJdKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBMT0FENjQoc3RhdGVbIDRdKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gTE9BRDEyOHUoc3RhdGVbIDVdKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gTE9BRDEyOHUoc3RhdGVbIDddKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBMT0FEMTI4KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IExPQUQxMjgoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgU1RPUkU2NChzdGF0ZVsgMF0sIFgjI2JhZ2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMV0sIFgjI2JlZ2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMl0sIFgjI2JpZ28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgM10sIFgjI2JvZ3UpOyBcCisgICAgU1RPUkUxMjgoc3RhdGVbIDRdLCBYIyNidWdhKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDZdLCBDT1BZNjRISTJMTyhYIyNiYWdlKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA3XSwgQ09QWTY0SEkyTE8oWCMjYmVnaSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgOF0sIENPUFk2NEhJMkxPKFgjI2JpZ28pKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDldLCBDT1BZNjRISTJMTyhYIyNib2d1KSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEwXSwgWCMja2FtZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzExXSwgWCMja2VtaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEyXSwgWCMja2ltbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEzXSwgWCMja29tdSk7IFwKKyAgICBTVE9SRTEyOChzdGF0ZVsxNF0sIFgjI2t1bWEpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNl0sIENPUFk2NEhJMkxPKFgjI2thbWUpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTddLCBDT1BZNjRISTJMTyhYIyNrZW1pKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE4XSwgQ09QWTY0SEkyTE8oWCMja2ltbykpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOV0sIENPUFk2NEhJMkxPKFgjI2tvbXUpKTsgXAorICAgIFNUT1JFMTI4KHN0YXRlWzIwXSwgWCMjc2FzZSk7IFwKKyAgICBTVE9SRTEyOChzdGF0ZVsyMl0sIFgjI3Npc28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyNF0sIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmFnZSA9IFkjI2JhZ2U7IFwKKyAgICBYIyNiZWdpID0gWSMjYmVnaTsgXAorICAgIFgjI2JpZ28gPSBZIyNiaWdvOyBcCisgICAgWCMjYm9ndSA9IFkjI2JvZ3U7IFwKKyAgICBYIyNidWdhID0gWSMjYnVnYTsgXAorICAgIFgjI2thbWUgPSBZIyNrYW1lOyBcCisgICAgWCMja2VtaSA9IFkjI2tlbWk7IFwKKyAgICBYIyNraW1vID0gWSMja2ltbzsgXAorICAgIFgjI2tvbXUgPSBZIyNrb211OyBcCisgICAgWCMja3VtYSA9IFkjI2t1bWE7IFwKKyAgICBYIyNzYXNlID0gWSMjc2FzZTsgXAorICAgIFgjI3Npc28gPSBZIyNzaXNvOyBcCisgICAgWCMjc3UgPSBZIyNzdTsgXAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0MDgyYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuYwpAQCAtMCwwICsxLDgzIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIktlY2Nha05JU1RJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgiCisKK3N0YXRpYyBIYXNoUmV0dXJuIEluaXQoaGFzaFN0YXRlICpzdGF0ZSwgaW50IGhhc2hiaXRsZW4pCit7CisgICAgc3dpdGNoKGhhc2hiaXRsZW4pIHsKKyAgICAgICAgY2FzZSAwOiAvKiAgRGVmYXVsdCBwYXJhbWV0ZXJzLCBhcmJpdHJhcnkgbGVuZ3RoIG91dHB1dCAqLworICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCAxMDI0LCA1NzYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjI0OgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCAxMTUyLCA0NDgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjU2OgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCAxMDg4LCA1MTIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzg0OgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCA4MzIsIDc2OCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1MTI6CisgICAgICAgICAgICBJbml0U3BvbmdlKChzcG9uZ2VTdGF0ZSopc3RhdGUsIDU3NiwgMTAyNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBCQURfSEFTSExFTjsKKyAgICB9CisgICAgc3RhdGUtPmZpeGVkT3V0cHV0TGVuZ3RoID0gaGFzaGJpdGxlbjsKKyAgICByZXR1cm4gU1VDQ0VTUzsKK30KKworc3RhdGljIEhhc2hSZXR1cm4gVXBkYXRlKGhhc2hTdGF0ZSAqc3RhdGUsIGNvbnN0IEJpdFNlcXVlbmNlICpkYXRhLCBEYXRhTGVuZ3RoIGRhdGFiaXRsZW4pCit7CisgICAgaWYgKChkYXRhYml0bGVuICUgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIEFic29yYigoc3BvbmdlU3RhdGUqKXN0YXRlLCBkYXRhLCBkYXRhYml0bGVuKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSGFzaFJldHVybiByZXQgPSBBYnNvcmIoKHNwb25nZVN0YXRlKilzdGF0ZSwgZGF0YSwgZGF0YWJpdGxlbiAtIChkYXRhYml0bGVuICUgOCkpOworICAgICAgICBpZiAocmV0ID09IFNVQ0NFU1MpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGFzdEJ5dGU7IAorICAgICAgICAgICAgLyogIEFsaWduIHRoZSBsYXN0IHBhcnRpYWwgYnl0ZSB0byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyAqLworICAgICAgICAgICAgbGFzdEJ5dGUgPSBkYXRhW2RhdGFiaXRsZW4vOF0gPj4gKDggLSAoZGF0YWJpdGxlbiAlIDgpKTsKKyAgICAgICAgICAgIHJldHVybiBBYnNvcmIoKHNwb25nZVN0YXRlKilzdGF0ZSwgJmxhc3RCeXRlLCBkYXRhYml0bGVuICUgOCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Cit9CisKK3N0YXRpYyBIYXNoUmV0dXJuIEZpbmFsKGhhc2hTdGF0ZSAqc3RhdGUsIEJpdFNlcXVlbmNlICpoYXNodmFsKQoreworICAgIHJldHVybiBTcXVlZXplKHN0YXRlLCBoYXNodmFsLCBzdGF0ZS0+Zml4ZWRPdXRwdXRMZW5ndGgpOworfQorCisvKgorc3RhdGljIEhhc2hSZXR1cm4gSGFzaChpbnQgaGFzaGJpdGxlbiwgY29uc3QgQml0U2VxdWVuY2UgKmRhdGEsIERhdGFMZW5ndGggZGF0YWJpdGxlbiwgQml0U2VxdWVuY2UgKmhhc2h2YWwpCit7CisgICAgaGFzaFN0YXRlIHN0YXRlOworICAgIEhhc2hSZXR1cm4gcmVzdWx0OworCisgICAgaWYgKChoYXNoYml0bGVuICE9IDIyNCkgJiYgKGhhc2hiaXRsZW4gIT0gMjU2KSAmJiAoaGFzaGJpdGxlbiAhPSAzODQpICYmIChoYXNoYml0bGVuICE9IDUxMikpCisgICAgICAgIHJldHVybiBCQURfSEFTSExFTjsgKiAgT25seSB0aGUgZm91ciBmaXhlZCBvdXRwdXQgbGVuZ3RocyBhdmFpbGFibGUgdGhyb3VnaCB0aGlzIEFQSSAqCisgICAgcmVzdWx0ID0gSW5pdCgmc3RhdGUsIGhhc2hiaXRsZW4pOworICAgIGlmIChyZXN1bHQgIT0gU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXN1bHQgPSBVcGRhdGUoJnN0YXRlLCBkYXRhLCBkYXRhYml0bGVuKTsKKyAgICBpZiAocmVzdWx0ICE9IFNVQ0NFU1MpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gRmluYWwoJnN0YXRlLCBoYXNodmFsKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorKi8KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NDQzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZm5kZWYgX0tlY2Nha05JU1RJbnRlcmZhY2VfaF8KKyNkZWZpbmUgX0tlY2Nha05JU1RJbnRlcmZhY2VfaF8KKworI2luY2x1ZGUgIktlY2Nha1Nwb25nZS5oIgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQml0U2VxdWVuY2U7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhTGVuZ3RoOwordHlwZWRlZiBlbnVtIHsgU1VDQ0VTUyA9IDAsIEZBSUwgPSAxLCBCQURfSEFTSExFTiA9IDIgfSBIYXNoUmV0dXJuOworCit0eXBlZGVmIHNwb25nZVN0YXRlIGhhc2hTdGF0ZTsKKworLyoqCisgICogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIEtlY2Nha1tyLCBjXSBzcG9uZ2UgZnVuY3Rpb24uCisgICogVGhlIHJhdGUgciBhbmQgY2FwYWNpdHkgYyB2YWx1ZXMgYXJlIGRldGVybWluZWQgZnJvbSBAYSBoYXNoYml0bGVuLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBiZSBpbml0aWFsaXplZC4KKyAgKiBAcGFyYW0gIGhhc2hiaXRsZW4gIFRoZSBkZXNpcmVkIG51bWJlciBvZiBvdXRwdXQgYml0cywgCisgICogICAgICAgICAgICAgICAgICAgICBvciAwIGZvciBLZWNjYWtbXSB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycworICAqICAgICAgICAgICAgICAgICAgICAgYW5kIGFyYml0cmFyaWx5LWxvbmcgb3V0cHV0LgorICAqIEBwcmUgICAgVGhlIHZhbHVlIG9mIGhhc2hiaXRsZW4gbXVzdCBiZSBvbmUgb2YgMCwgMjI0LCAyNTYsIDM4NCBhbmQgNTEyLgorICAqIEByZXR1cm4gU1VDQ0VTUyBpZiBzdWNjZXNzZnVsLCBCQURfSEFTSExFTiBpZiB0aGUgdmFsdWUgb2YgaGFzaGJpdGxlbiBpcyBpbmNvcnJlY3QuCisgICovCitzdGF0aWMgSGFzaFJldHVybiBJbml0KGhhc2hTdGF0ZSAqc3RhdGUsIGludCBoYXNoYml0bGVuKTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGdpdmUgaW5wdXQgZGF0YSBmb3IgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBhYnNvcmIuCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIGluaXRpYWxpemVkIGJ5IEluaXQoKS4KKyAgKiBAcGFyYW0gIGRhdGEgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IGRhdGEuIAorICAqICAgICAgICAgICAgICAgICAgICAgV2hlbiBAYSBkYXRhYml0TGVuIGlzIG5vdCBhIG11bHRpcGxlIG9mIDgsIHRoZSBsYXN0IGJpdHMgb2YgZGF0YSBtdXN0IGJlCisgICogICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBsYXN0IGJ5dGUuCisgICogQHBhcmFtICBkYXRhYml0TGVuICBUaGUgbnVtYmVyIG9mIGlucHV0IGJpdHMgcHJvdmlkZWQgaW4gdGhlIGlucHV0IGRhdGEuCisgICogQHByZSAgICBJbiB0aGUgcHJldmlvdXMgY2FsbCB0byBBYnNvcmIoKSwgZGF0YWJpdExlbiB3YXMgYSBtdWx0aXBsZSBvZiA4LgorICAqIEByZXR1cm4gU1VDQ0VTUyBpZiBzdWNjZXNzZnVsLCBGQUlMIG90aGVyd2lzZS4KKyAgKi8KK3N0YXRpYyBIYXNoUmV0dXJuIFVwZGF0ZShoYXNoU3RhdGUgKnN0YXRlLCBjb25zdCBCaXRTZXF1ZW5jZSAqZGF0YSwgRGF0YUxlbmd0aCBkYXRhYml0bGVuKTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIHNxdWVlemUgb3V0cHV0IGRhdGEgZnJvbSB0aGUgc3BvbmdlIGZ1bmN0aW9uLgorICAqIElmIEBhIGhhc2hiaXRsZW4gd2FzIG5vdCAwIGluIHRoZSBjYWxsIHRvIEluaXQoKSwgdGhlIG51bWJlciBvZiBvdXRwdXQgYml0cyBpcyBlcXVhbCB0byBAYSBoYXNoYml0bGVuLgorICAqIElmIEBhIGhhc2hiaXRsZW4gd2FzIDAgaW4gdGhlIGNhbGwgdG8gSW5pdCgpLCB0aGUgb3V0cHV0IGJpdHMgbXVzdCBiZSBleHRyYWN0ZWQgdXNpbmcgdGhlIFNxdWVlemUoKSBmdW5jdGlvbi4KKyAgKiBAcGFyYW0gIHN0YXRlICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXRlIG9mIHRoZSBzcG9uZ2UgZnVuY3Rpb24gaW5pdGlhbGl6ZWQgYnkgSW5pdCgpLgorICAqIEBwYXJhbSAgaGFzaHZhbCAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBvdXRwdXQgZGF0YS4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgRkFJTCBvdGhlcndpc2UuCisgICovCitzdGF0aWMgSGFzaFJldHVybiBGaW5hbChoYXNoU3RhdGUgKnN0YXRlLCBCaXRTZXF1ZW5jZSAqaGFzaHZhbCk7CisvKioKKyAgKiBGdW5jdGlvbiB0byBjb21wdXRlIGEgaGFzaCB1c2luZyB0aGUgS2VjY2FrW3IsIGNdIHNwb25nZSBmdW5jdGlvbi4KKyAgKiBUaGUgcmF0ZSByIGFuZCBjYXBhY2l0eSBjIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBmcm9tIEBhIGhhc2hiaXRsZW4uCisgICogQHBhcmFtICBoYXNoYml0bGVuICBUaGUgZGVzaXJlZCBudW1iZXIgb2Ygb3V0cHV0IGJpdHMuCisgICogQHBhcmFtICBkYXRhICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLiAKKyAgKiAgICAgICAgICAgICAgICAgICAgIFdoZW4gQGEgZGF0YWJpdExlbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA4LCB0aGUgbGFzdCBiaXRzIG9mIGRhdGEgbXVzdCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgbGFzdCBieXRlLgorICAqIEBwYXJhbSAgZGF0YWJpdExlbiAgVGhlIG51bWJlciBvZiBpbnB1dCBiaXRzIHByb3ZpZGVkIGluIHRoZSBpbnB1dCBkYXRhLgorICAqIEBwYXJhbSAgaGFzaHZhbCAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBvdXRwdXQgZGF0YS4KKyAgKiBAcHJlICAgIFRoZSB2YWx1ZSBvZiBoYXNoYml0bGVuIG11c3QgYmUgb25lIG9mIDIyNCwgMjU2LCAzODQgYW5kIDUxMi4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgQkFEX0hBU0hMRU4gaWYgdGhlIHZhbHVlIG9mIGhhc2hiaXRsZW4gaXMgaW5jb3JyZWN0LgorICAqLworLyoKK3N0YXRpYyBIYXNoUmV0dXJuIEhhc2goaW50IGhhc2hiaXRsZW4sIGNvbnN0IEJpdFNlcXVlbmNlICpkYXRhLCBEYXRhTGVuZ3RoIGRhdGFiaXRsZW4sIEJpdFNlcXVlbmNlICpoYXNodmFsKTsKKyovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2E2YmYwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiS2VjY2FrU3BvbmdlLmgiCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oIgorI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorI2luY2x1ZGUgImRpc3BsYXlJbnRlcm1lZGlhdGVWYWx1ZXMuaCIKKyNlbmRpZgorCitzdGF0aWMgaW50IEluaXRTcG9uZ2Uoc3BvbmdlU3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGNhcGFjaXR5KQoreworICAgIGlmIChyYXRlK2NhcGFjaXR5ICE9IDE2MDApCisgICAgICAgIHJldHVybiAxOworICAgIGlmICgocmF0ZSA8PSAwKSB8fCAocmF0ZSA+PSAxNjAwKSB8fCAoKHJhdGUgJSA2NCkgIT0gMCkpCisgICAgICAgIHJldHVybiAxOworICAgIEtlY2Nha0luaXRpYWxpemUoKTsKKyAgICBzdGF0ZS0+cmF0ZSA9IHJhdGU7CisgICAgc3RhdGUtPmNhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgc3RhdGUtPmZpeGVkT3V0cHV0TGVuZ3RoID0gMDsKKyAgICBLZWNjYWtJbml0aWFsaXplU3RhdGUoc3RhdGUtPnN0YXRlKTsKKyAgICBtZW1zZXQoc3RhdGUtPmRhdGFRdWV1ZSwgMCwgS2VjY2FrTWF4aW11bVJhdGVJbkJ5dGVzKTsKKyAgICBzdGF0ZS0+Yml0c0luUXVldWUgPSAwOworICAgIHN0YXRlLT5zcXVlZXppbmcgPSAwOworICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nID0gMDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBBYnNvcmJRdWV1ZShzcG9uZ2VTdGF0ZSAqc3RhdGUpCit7CisgICAgLyogIHN0YXRlLT5iaXRzSW5RdWV1ZSBpcyBhc3N1bWVkIHRvIGJlIGVxdWFsIHRvIHN0YXRlLT5yYXRlICovCisgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDU3NgorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSA1NzYpCisgICAgICAgIEtlY2Nha0Fic29yYjU3NmJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlIAorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gODMyKQorICAgICAgICBLZWNjYWtBYnNvcmI4MzJiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KQorICAgICAgICBLZWNjYWtBYnNvcmIxMDI0Yml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgIGVsc2UgCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwODgKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTA4OCkKKyAgICAgICAgS2VjY2FrQWJzb3JiMTA4OGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTE1MikKKyAgICAgICAgS2VjY2FrQWJzb3JiMTE1MmJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlIAorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CisgICAgaWYgKHN0YXRlLT5yYXRlID09IDEzNDQpCisgICAgICAgIEtlY2Nha0Fic29yYjEzNDRiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorICAgICAgICBLZWNjYWtBYnNvcmIoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+cmF0ZS82NCk7CisgICAgc3RhdGUtPmJpdHNJblF1ZXVlID0gMDsKK30KKworc3RhdGljIGludCBBYnNvcmIoc3BvbmdlU3RhdGUgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJpdGxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaSwgaiwgd2hvbGVCbG9ja3M7CisgICAgdW5zaWduZWQgaW50IHBhcnRpYWxCbG9jaywgcGFydGlhbEJ5dGU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VyRGF0YTsKKworICAgIGlmICgoc3RhdGUtPmJpdHNJblF1ZXVlICUgOCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDE7IC8qICBPbmx5IHRoZSBsYXN0IGNhbGwgbWF5IGNvbnRhaW4gYSBwYXJ0aWFsIGJ5dGUgKi8KKyAgICBpZiAoc3RhdGUtPnNxdWVlemluZykKKyAgICAgICAgcmV0dXJuIDE7IC8qICBUb28gbGF0ZSBmb3IgYWRkaXRpb25hbCBpbnB1dCAqLworCisgICAgaSA9IDA7CisgICAgd2hpbGUoaSA8IGRhdGFiaXRsZW4pIHsKKyAgICAgICAgaWYgKChzdGF0ZS0+Yml0c0luUXVldWUgPT0gMCkgJiYgKGRhdGFiaXRsZW4gPj0gc3RhdGUtPnJhdGUpICYmIChpIDw9IChkYXRhYml0bGVuLXN0YXRlLT5yYXRlKSkpIHsKKyAgICAgICAgICAgIHdob2xlQmxvY2tzID0gKGRhdGFiaXRsZW4taSkvc3RhdGUtPnJhdGU7CisgICAgICAgICAgICBjdXJEYXRhID0gZGF0YStpLzg7CisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSA1NzYpIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPTU3Ni84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiNTc2Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0ODMyCisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gODMyKSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz04MzIvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjgzMmJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz0xMDI0LzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIxMDI0Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDEwODgpIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPTEwODgvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjEwODhiaXRzKHN0YXRlLT5zdGF0ZSwgY3VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTE1MikgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9MTE1Mi84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiMTE1MmJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMzQ0KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz0xMzQ0LzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIxMzQ0Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9c3RhdGUtPnJhdGUvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYihzdGF0ZS0+c3RhdGUsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzY0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IHdob2xlQmxvY2tzKnN0YXRlLT5yYXRlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFydGlhbEJsb2NrID0gKHVuc2lnbmVkIGludCkoZGF0YWJpdGxlbiAtIGkpOworICAgICAgICAgICAgaWYgKHBhcnRpYWxCbG9jaytzdGF0ZS0+Yml0c0luUXVldWUgPiBzdGF0ZS0+cmF0ZSkKKyAgICAgICAgICAgICAgICBwYXJ0aWFsQmxvY2sgPSBzdGF0ZS0+cmF0ZS1zdGF0ZS0+Yml0c0luUXVldWU7CisgICAgICAgICAgICBwYXJ0aWFsQnl0ZSA9IHBhcnRpYWxCbG9jayAlIDg7CisgICAgICAgICAgICBwYXJ0aWFsQmxvY2sgLT0gcGFydGlhbEJ5dGU7CisgICAgICAgICAgICBtZW1jcHkoc3RhdGUtPmRhdGFRdWV1ZStzdGF0ZS0+Yml0c0luUXVldWUvOCwgZGF0YStpLzgsIHBhcnRpYWxCbG9jay84KTsKKyAgICAgICAgICAgIHN0YXRlLT5iaXRzSW5RdWV1ZSArPSBwYXJ0aWFsQmxvY2s7CisgICAgICAgICAgICBpICs9IHBhcnRpYWxCbG9jazsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+Yml0c0luUXVldWUgPT0gc3RhdGUtPnJhdGUpCisgICAgICAgICAgICAgICAgQWJzb3JiUXVldWUoc3RhdGUpOworICAgICAgICAgICAgaWYgKHBhcnRpYWxCeXRlID4gMCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbWFzayA9ICgxIDw8IHBhcnRpYWxCeXRlKS0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5kYXRhUXVldWVbc3RhdGUtPmJpdHNJblF1ZXVlLzhdID0gZGF0YVtpLzhdICYgbWFzazsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+Yml0c0luUXVldWUgKz0gcGFydGlhbEJ5dGU7CisgICAgICAgICAgICAgICAgaSArPSBwYXJ0aWFsQnl0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgUGFkQW5kU3dpdGNoVG9TcXVlZXppbmdQaGFzZShzcG9uZ2VTdGF0ZSAqc3RhdGUpCit7CisgICAgLyogIE5vdGU6IHRoZSBiaXRzIGFyZSBudW1iZXJlZCBmcm9tIDA9TFNCIHRvIDc9TVNCICovCisgICAgaWYgKHN0YXRlLT5iaXRzSW5RdWV1ZSArIDEgPT0gc3RhdGUtPnJhdGUpIHsKKyAgICAgICAgc3RhdGUtPmRhdGFRdWV1ZVtzdGF0ZS0+Yml0c0luUXVldWUvOCBdIHw9IDEgPDwgKHN0YXRlLT5iaXRzSW5RdWV1ZSAlIDgpOworICAgICAgICBBYnNvcmJRdWV1ZShzdGF0ZSk7CisgICAgICAgIG1lbXNldChzdGF0ZS0+ZGF0YVF1ZXVlLCAwLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1lbXNldChzdGF0ZS0+ZGF0YVF1ZXVlICsgKHN0YXRlLT5iaXRzSW5RdWV1ZSs3KS84LCAwLCBzdGF0ZS0+cmF0ZS84IC0gKHN0YXRlLT5iaXRzSW5RdWV1ZSs3KS84KTsKKyAgICAgICAgc3RhdGUtPmRhdGFRdWV1ZVtzdGF0ZS0+Yml0c0luUXVldWUvOCBdIHw9IDEgPDwgKHN0YXRlLT5iaXRzSW5RdWV1ZSAlIDgpOworICAgIH0KKyAgICBzdGF0ZS0+ZGF0YVF1ZXVlWyhzdGF0ZS0+cmF0ZS0xKS84XSB8PSAxIDw8ICgoc3RhdGUtPnJhdGUtMSkgJSA4KTsKKyAgICBBYnNvcmJRdWV1ZShzdGF0ZSk7CisKKyAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgZGlzcGxheVRleHQoMSwgIi0tLSBTd2l0Y2hpbmcgdG8gc3F1ZWV6aW5nIHBoYXNlIC0tLSIpOworICAgICNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KSB7CisgICAgICAgIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgICAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IDEwMjQ7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgS2VjY2FrRXh0cmFjdChzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUsIHN0YXRlLT5yYXRlLzY0KTsKKyAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPSBzdGF0ZS0+cmF0ZTsKKyAgICB9CisgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgYXZhaWxhYmxlIGZvciBzcXVlZXppbmciLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZy84KTsKKyAgICAjZW5kaWYKKyAgICBzdGF0ZS0+c3F1ZWV6aW5nID0gMTsKK30KKworc3RhdGljIGludCBTcXVlZXplKHNwb25nZVN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCB1bnNpZ25lZCBsb25nIGxvbmcgb3V0cHV0TGVuZ3RoKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpOworICAgIHVuc2lnbmVkIGludCBwYXJ0aWFsQmxvY2s7CisKKyAgICBpZiAoIXN0YXRlLT5zcXVlZXppbmcpCisgICAgICAgIFBhZEFuZFN3aXRjaFRvU3F1ZWV6aW5nUGhhc2Uoc3RhdGUpOworICAgIGlmICgob3V0cHV0TGVuZ3RoICUgOCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDE7IC8qICBPbmx5IG11bHRpcGxlIG9mIDggYml0cyBhcmUgYWxsb3dlZCwgdHJ1bmNhdGlvbiBjYW4gYmUgZG9uZSBhdCB1c2VyIGxldmVsICovCisKKyAgICBpID0gMDsKKyAgICB3aGlsZShpIDwgb3V0cHV0TGVuZ3RoKSB7CisgICAgICAgIGlmIChzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9PSAwKSB7CisgICAgICAgICAgICBLZWNjYWtQZXJtdXRhdGlvbihzdGF0ZS0+c3RhdGUpOworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDEwMjQpIHsKKyAgICAgICAgICAgICAgICBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IDEwMjQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBLZWNjYWtFeHRyYWN0KHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPnJhdGUvNjQpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nID0gc3RhdGUtPnJhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIGF2YWlsYWJsZSBmb3Igc3F1ZWV6aW5nIiwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcvOCk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBwYXJ0aWFsQmxvY2sgPSBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZzsKKyAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpcGFydGlhbEJsb2NrID4gb3V0cHV0TGVuZ3RoIC0gaSkKKyAgICAgICAgICAgIHBhcnRpYWxCbG9jayA9ICh1bnNpZ25lZCBpbnQpKG91dHB1dExlbmd0aCAtIGkpOworICAgICAgICBtZW1jcHkob3V0cHV0K2kvOCwgc3RhdGUtPmRhdGFRdWV1ZSsoc3RhdGUtPnJhdGUtc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcpLzgsIHBhcnRpYWxCbG9jay84KTsKKyAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgLT0gcGFydGlhbEJsb2NrOworICAgICAgICBpICs9IHBhcnRpYWxCbG9jazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha1Nwb25nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDVjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2lmbmRlZiBfS2VjY2FrU3BvbmdlX2hfCisjZGVmaW5lIF9LZWNjYWtTcG9uZ2VfaF8KKworI2RlZmluZSBLZWNjYWtQZXJtdXRhdGlvblNpemUgMTYwMAorI2RlZmluZSBLZWNjYWtQZXJtdXRhdGlvblNpemVJbkJ5dGVzIChLZWNjYWtQZXJtdXRhdGlvblNpemUvOCkKKyNkZWZpbmUgS2VjY2FrTWF4aW11bVJhdGUgMTUzNgorI2RlZmluZSBLZWNjYWtNYXhpbXVtUmF0ZUluQnl0ZXMgKEtlY2Nha01heGltdW1SYXRlLzgpCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBBTElHTiBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQUxJR04gX19kZWNsc3BlYyhhbGlnbigzMikpCisjZWxzZQorI2RlZmluZSBBTElHTgorI2VuZGlmCisKK0FMSUdOIHR5cGVkZWYgc3RydWN0IHNwb25nZVN0YXRlU3RydWN0IHsKKyAgICBBTElHTiB1bnNpZ25lZCBjaGFyIHN0YXRlW0tlY2Nha1Blcm11dGF0aW9uU2l6ZUluQnl0ZXNdOworICAgIEFMSUdOIHVuc2lnbmVkIGNoYXIgZGF0YVF1ZXVlW0tlY2Nha01heGltdW1SYXRlSW5CeXRlc107CisgICAgdW5zaWduZWQgaW50IHJhdGU7CisgICAgdW5zaWduZWQgaW50IGNhcGFjaXR5OworICAgIHVuc2lnbmVkIGludCBiaXRzSW5RdWV1ZTsKKyAgICB1bnNpZ25lZCBpbnQgZml4ZWRPdXRwdXRMZW5ndGg7CisgICAgaW50IHNxdWVlemluZzsKKyAgICB1bnNpZ25lZCBpbnQgYml0c0F2YWlsYWJsZUZvclNxdWVlemluZzsKK30gc3BvbmdlU3RhdGU7CisKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHN0YXRlIG9mIHRoZSBLZWNjYWtbciwgY10gc3BvbmdlIGZ1bmN0aW9uLgorICAqIFRoZSBzcG9uZ2UgZnVuY3Rpb24gaXMgc2V0IHRvIHRoZSBhYnNvcmJpbmcgcGhhc2UuCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIHRvIGJlIGluaXRpYWxpemVkLgorICAqIEBwYXJhbSAgcmF0ZSAgICAgICAgVGhlIHZhbHVlIG9mIHRoZSByYXRlIHIuCisgICogQHBhcmFtICBjYXBhY2l0eSAgICBUaGUgdmFsdWUgb2YgdGhlIGNhcGFjaXR5IGMuCisgICogQHByZSAgICBPbmUgbXVzdCBoYXZlIHIrYz0xNjAwIGFuZCB0aGUgcmF0ZSBhIG11bHRpcGxlIG9mIDY0IGJpdHMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAgKiBAcmV0dXJuIFplcm8gaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlcndpc2UuCisgICovCitzdGF0aWMgaW50IEluaXRTcG9uZ2Uoc3BvbmdlU3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGNhcGFjaXR5KTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGdpdmUgaW5wdXQgZGF0YSBmb3IgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBhYnNvcmIuCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIGluaXRpYWxpemVkIGJ5IEluaXRTcG9uZ2UoKS4KKyAgKiBAcGFyYW0gIGRhdGEgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IGRhdGEuIAorICAqICAgICAgICAgICAgICAgICAgICAgV2hlbiBAYSBkYXRhYml0TGVuIGlzIG5vdCBhIG11bHRpcGxlIG9mIDgsIHRoZSBsYXN0IGJpdHMgb2YgZGF0YSBtdXN0IGJlCisgICogICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgbGFzdCBieXRlLgorICAqIEBwYXJhbSAgZGF0YWJpdExlbiAgVGhlIG51bWJlciBvZiBpbnB1dCBiaXRzIHByb3ZpZGVkIGluIHRoZSBpbnB1dCBkYXRhLgorICAqIEBwcmUgICAgSW4gdGhlIHByZXZpb3VzIGNhbGwgdG8gQWJzb3JiKCksIGRhdGFiaXRMZW4gd2FzIGEgbXVsdGlwbGUgb2YgOC4KKyAgKiBAcHJlICAgIFRoZSBzcG9uZ2UgZnVuY3Rpb24gbXVzdCBiZSBpbiB0aGUgYWJzb3JiaW5nIHBoYXNlLAorICAqICAgICAgICAgaS5lLiwgU3F1ZWV6ZSgpIG11c3Qgbm90IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlLgorICAqIEByZXR1cm4gWmVybyBpZiBzdWNjZXNzZnVsLCAxIG90aGVyd2lzZS4KKyAgKi8KK3N0YXRpYyBpbnQgQWJzb3JiKHNwb25nZVN0YXRlICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiaXRsZW4pOworLyoqCisgICogRnVuY3Rpb24gdG8gc3F1ZWV6ZSBvdXRwdXQgZGF0YSBmcm9tIHRoZSBzcG9uZ2UgZnVuY3Rpb24uCisgICogSWYgdGhlIHNwb25nZSBmdW5jdGlvbiB3YXMgaW4gdGhlIGFic29yYmluZyBwaGFzZSwgdGhpcyBmdW5jdGlvbiAKKyAgKiBzd2l0Y2hlcyBpdCB0byB0aGUgc3F1ZWV6aW5nIHBoYXNlLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiBpbml0aWFsaXplZCBieSBJbml0U3BvbmdlKCkuCisgICogQHBhcmFtICBvdXRwdXQgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIG91dHB1dCBkYXRhLgorICAqIEBwYXJhbSAgb3V0cHV0TGVuZ3RoICAgIFRoZSBudW1iZXIgb2Ygb3V0cHV0IGJpdHMgZGVzaXJlZC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LgorICAqIEByZXR1cm4gWmVybyBpZiBzdWNjZXNzZnVsLCAxIG90aGVyd2lzZS4KKyAgKi8KK3N0YXRpYyBpbnQgU3F1ZWV6ZShzcG9uZ2VTdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgdW5zaWduZWQgbG9uZyBsb25nIG91dHB1dExlbmd0aCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvYnJnX2VuZGlhbi5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvYnJnX2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyMjZlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9icmdfZW5kaWFuLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDgsIEJyaWFuIEdsYWRtYW4sIFdvcmNlc3RlciwgVUsuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyBMSUNFTlNFIFRFUk1TCisKKyBUaGUgcmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlICh3aXRoIG9yIHdpdGhvdXQgY2hhbmdlcykKKyBpcyBhbGxvd2VkIHdpdGhvdXQgdGhlIHBheW1lbnQgb2YgZmVlcyBvciByb3lhbHRpZXMgcHJvdmlkZWQgdGhhdDoKKworICAxLiBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXI7CisKKyAgMi4gYmluYXJ5IGRpc3RyaWJ1dGlvbnMgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVpciBkb2N1bWVudGF0aW9uOworCisgIDMuIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGlzIG5vdCB1c2VkIHRvIGVuZG9yc2UgcHJvZHVjdHMKKyAgICAgYnVpbHQgdXNpbmcgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworIERJU0NMQUlNRVIKKworIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzIGlzJyB3aXRoIG5vIGV4cGxpY2l0IG9yIGltcGxpZWQgd2FycmFudGllcworIGluIHJlc3BlY3Qgb2YgaXRzIHByb3BlcnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBjb3JyZWN0bmVzcworIGFuZC9vciBmaXRuZXNzIGZvciBwdXJwb3NlLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElzc3VlIERhdGU6IDIwLzEyLzIwMDcKKyBDaGFuZ2VzIGZvciBBUk0gOS85LzIwMTAKKyovCisKKyNpZm5kZWYgX0JSR19FTkRJQU5fSAorI2RlZmluZSBfQlJHX0VORElBTl9ICisKKyNkZWZpbmUgSVNfQklHX0VORElBTiAgICAgIDQzMjEgLyogYnl0ZSAwIGlzIG1vc3Qgc2lnbmlmaWNhbnQgKG1jNjhrKSAqLworI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOICAgMTIzNCAvKiBieXRlIDAgaXMgbGVhc3Qgc2lnbmlmaWNhbnQgKGkzODYpICovCisKKyNpZiAwCisvKiBJbmNsdWRlIGZpbGVzIHdoZXJlIGVuZGlhbiBkZWZpbmVzIGFuZCBieXRlc3dhcCBmdW5jdGlvbnMgbWF5IHJlc2lkZSAqLworI2lmIGRlZmluZWQoIF9fc3VuICkKKyMgIGluY2x1ZGUgPHN5cy9pc2FfZGVmcy5oPgorI2VsaWYgZGVmaW5lZCggX19GcmVlQlNEX18gKSB8fCBkZWZpbmVkKCBfX09wZW5CU0RfXyApIHx8IGRlZmluZWQoIF9fTmV0QlNEX18gKQorIyAgaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VsaWYgZGVmaW5lZCggQlNEICkgJiYgKCBCU0QgPj0gMTk5MTAzICkgfHwgZGVmaW5lZCggX19BUFBMRV9fICkgfHwgXAorICAgICAgZGVmaW5lZCggX19DWUdXSU4zMl9fICkgfHwgZGVmaW5lZCggX19ESkdQUF9fICkgfHwgZGVmaW5lZCggX19vc2ZfXyApCisjICBpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorI2VsaWYgZGVmaW5lZCggX19saW51eF9fICkgfHwgZGVmaW5lZCggX19HTlVDX18gKSB8fCBkZWZpbmVkKCBfX0dOVV9MSUJSQVJZX18gKQorIyAgaWYgIWRlZmluZWQoIF9fTUlOR1czMl9fICkgJiYgIWRlZmluZWQoIF9BSVggKQorIyAgICBpbmNsdWRlIDxlbmRpYW4uaD4KKyMgICAgaWYgIWRlZmluZWQoIF9fQkVPU19fICkKKyMgICAgICBpbmNsdWRlIDxieXRlc3dhcC5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qIE5vdyBhdHRlbXB0IHRvIHNldCB0aGUgZGVmaW5lIGZvciBwbGF0Zm9ybSBieXRlIG9yZGVyIHVzaW5nIGFueSAgKi8KKy8qIG9mIHRoZSBmb3VyIGZvcm1zIFNZTUJPTCwgX1NZTUJPTCwgX19TWU1CT0wgJiBfX1NZTUJPTF9fLCB3aGljaCAgKi8KKy8qIHNlZW0gdG8gZW5jb21wYXNzIG1vc3QgZW5kaWFuIHN5bWJvbCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgKi8KKworI2lmIGRlZmluZWQoIEJJR19FTkRJQU4gKSAmJiBkZWZpbmVkKCBMSVRUTEVfRU5ESUFOICkKKyMgIGlmIGRlZmluZWQoIEJZVEVfT1JERVIgKSAmJiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyAgZWxpZiBkZWZpbmVkKCBCWVRFX09SREVSICkgJiYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBCSUdfRU5ESUFOICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbGlmIGRlZmluZWQoIExJVFRMRV9FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBfQklHX0VORElBTiApICYmIGRlZmluZWQoIF9MSVRUTEVfRU5ESUFOICkKKyMgIGlmIGRlZmluZWQoIF9CWVRFX09SREVSICkgJiYgX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyAgZWxpZiBkZWZpbmVkKCBfQllURV9PUkRFUiApICYmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBfQklHX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBfTElUVExFX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2lmIGRlZmluZWQoIF9fQklHX0VORElBTiApICYmIGRlZmluZWQoIF9fTElUVExFX0VORElBTiApCisjICBpZiBkZWZpbmVkKCBfX0JZVEVfT1JERVIgKSAmJiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyMgIGVsaWYgZGVmaW5lZCggX19CWVRFX09SREVSICkgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZCggX19CSUdfRU5ESUFOICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbGlmIGRlZmluZWQoIF9fTElUVExFX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2lmIGRlZmluZWQoIF9fQklHX0VORElBTl9fICkgJiYgZGVmaW5lZCggX19MSVRUTEVfRU5ESUFOX18gKQorIyAgaWYgZGVmaW5lZCggX19CWVRFX09SREVSX18gKSAmJiBfX0JZVEVfT1JERVJfXyA9PSBfX0JJR19FTkRJQU5fXworIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjICBlbGlmIGRlZmluZWQoIF9fQllURV9PUkRFUl9fICkgJiYgX19CWVRFX09SREVSX18gPT0gX19MSVRUTEVfRU5ESUFOX18KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoIF9fQklHX0VORElBTl9fICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbGlmIGRlZmluZWQoIF9fTElUVExFX0VORElBTl9fICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisvKiAgaWYgdGhlIHBsYXRmb3JtIGJ5dGUgb3JkZXIgY291bGQgbm90IGJlIGRldGVybWluZWQsIHRoZW4gdHJ5IHRvICovCisvKiAgc2V0IHRoaXMgZGVmaW5lIHVzaW5nIGNvbW1vbiBtYWNoaW5lIGRlZmluZXMgICAgICAgICAgICAgICAgICAgICovCisjaWYgIWRlZmluZWQoUExBVEZPUk1fQllURV9PUkRFUikKKworI2lmICAgZGVmaW5lZCggX19hbHBoYV9fICkgfHwgZGVmaW5lZCggX19hbHBoYSApIHx8IGRlZmluZWQoIGkzODYgKSAgICAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX2kzODZfXyApICB8fCBkZWZpbmVkKCBfTV9JODYgKSAgfHwgZGVmaW5lZCggX01fSVg4NiApICAgIHx8IFwKKyAgICAgIGRlZmluZWQoIF9fT1MyX18gKSAgIHx8IGRlZmluZWQoIHN1bjM4NiApICB8fCBkZWZpbmVkKCBfX1RVUkJPQ19fICkgfHwgXAorICAgICAgZGVmaW5lZCggdmF4ICkgICAgICAgfHwgZGVmaW5lZCggdm1zICkgICAgIHx8IGRlZmluZWQoIFZNUyApICAgICAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX1ZNUyApICAgICB8fCBkZWZpbmVkKCBfTV9YNjQgKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorCisjZWxpZiBkZWZpbmVkKCBBTUlHQSApICAgfHwgZGVmaW5lZCggYXBwbGVjICkgICAgfHwgZGVmaW5lZCggX19BUzQwMF9fICkgIHx8IFwKKyAgICAgIGRlZmluZWQoIF9DUkFZICkgICB8fCBkZWZpbmVkKCBfX2hwcGEgKSAgICB8fCBkZWZpbmVkKCBfX2hwOTAwMCApICAgfHwgXAorICAgICAgZGVmaW5lZCggaWJtMzcwICkgIHx8IGRlZmluZWQoIG1jNjgwMDAgKSAgIHx8IGRlZmluZWQoIG02OGsgKSAgICAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX01SQ19fICkgfHwgZGVmaW5lZCggX19NVlNfXyApICAgfHwgZGVmaW5lZCggX19NV0VSS1NfXyApIHx8IFwKKyAgICAgIGRlZmluZWQoIHNwYXJjICkgICB8fCBkZWZpbmVkKCBfX3NwYXJjKSAgICB8fCBkZWZpbmVkKCBTWU1BTlRFQ19DICkgfHwgXAorICAgICAgZGVmaW5lZCggX19WT1NfXyApIHx8IGRlZmluZWQoIF9fVElHQ0NfXyApIHx8IGRlZmluZWQoIF9fVEFOREVNICkgICB8fCBcCisgICAgICBkZWZpbmVkKCBUSElOS19DICkgfHwgZGVmaW5lZCggX19WTUNNU19fICkgfHwgZGVmaW5lZCggX0FJWCApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisKKyNlbGlmIGRlZmluZWQoX19hcm1fXykKKyMgaWZkZWYgX19CSUdfRU5ESUFOCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjIGVsc2UKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgZW5kaWYKKyNlbGlmIDEgICAgIC8qICoqKiogRURJVCBIRVJFIElGIE5FQ0VTU0FSWSAqKioqICovCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZWxpZiAwICAgICAvKiAqKioqIEVESVQgSEVSRSBJRiBORUNFU1NBUlkgKioqKiAqLworIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorI2Vsc2UKKyMgIGVycm9yIFBsZWFzZSBlZGl0IGxpbmVzIDEzMiBvciAxMzQgaW4gYnJnX2VuZGlhbi5oIHRvIHNldCB0aGUgcGxhdGZvcm0gYnl0ZSBvcmRlcgorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0IGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvY3J5cHRvX2hhc2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvYS5vdXQKcmVuYW1lIHRvIE1vZHVsZXMvX3NoYTMva2VjY2FrL2NyeXB0b19oYXNoLmgKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMvc2hhM21vZHVsZS5jIGIvTW9kdWxlcy9fc2hhMy9zaGEzbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMjdkMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMvc2hhM21vZHVsZS5jCkBAIC0wLDAgKzEsNTkzIEBACisvKiBTSEEzIG1vZHVsZQorICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgU0hBMyBhbGdvcml0aG0KKyAqCisgKiBTZWUgYmVsb3cgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBjb2RlIHRoaXMgbW9kdWxlIHdhcworICogYmFzZWQgdXBvbi4gQWRkaXRpb25hbCB3b3JrIHBlcmZvcm1lZCBieToKKyAqCisgKiAgQW5kcmV3IEt1Y2hsaW5nIChhbWtAYW1rLmNhKQorICogIEdyZWcgU3RlaW4gKGdzdGVpbkBseXJhLm9yZykKKyAqICBUcmV2b3IgUGVycmluICh0cmV2cEB0cmV2cC5uZXQpCisgKiAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgICBDaHJpc3RpYW4gSGVpbWVzIChjaHJpc3RpYW5AcHl0aG9uLm9yZykKKyAqICBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisgKgorICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICIuLi9oYXNobGliLmgiCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hBLTMgKEtlY2NhaykKKyAqCisgKiBUaGUgY29kZSBpcyBiYXNlZCBvbiBLZWNjYWtSZWZlcmVuY2VBbmRPcHRpbWl6ZWQtMy4yLnppcCBmcm9tIDI5IE1heSAyMDEyLgorICoKKyAqIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgYWx0ZXJlZCBpbiB0aGlzIHBvaW50czoKKyAqICAtIEMrKyBjb21tZW50cyBhcmUgY29udmVydGVkIHRvIEFOU0kgQyBjb21tZW50cy4KKyAqICAtIEFsbCBmdW5jdGlvbnMgYW5kIGdsb2JhbHMgYXJlIGRlY2xhcmVkIHN0YXRpYy4KKyAqICAtIFRoZSB0eXBlZGVmIGZvciBVSU5UNjQgaXMgY29tbWVudGVkIG91dC4KKyAqICAtIEtlY2Nha0YtMTYwMC1vcHRbMzJ8NjRdLXNldHRpbmdzLmggYXJlIGNvbW1lbnRlZCBvdXQKKyAqICAtIFNvbWUgdW51c2VkIGZ1bmN0aW9ucyBhcmUgY29tbWVudGVkIG91dCB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzLgorICoKKyAqIEluIG9yZGVyIHRvIGF2b2lkIG5hbWUgY2xhc2hlcyB3aXRoIG90aGVyIHNvZnR3YXJlIEkgaGF2ZSB0byBkZWNsYXJlIGFsbAorICogS2VjY2FrIGZ1bmN0aW9ucyBhbmQgZ2xvYmFsIGRhdGEgYXMgc3RhdGljLiBUaGUgQyBjb2RlIGlzIGRpcmVjdGx5CisgKiBpbmNsdWRlZCBpbnRvIHRoaXMgZmlsZSBpbiBvcmRlciB0byBhY2Nlc3MgdGhlIHN0YXRpYyBmdW5jdGlvbnMuCisgKgorICogS2VjY2FrIGNhbiBiZSB0dW5lZCB3aXRoIHNldmVyYWwgcGFyYW1lbnRlcnMuIEkgdHJ5IHRvIGV4cGxhaW4gYWxsIG9wdGlvbnMKKyAqIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgdGhlbS4gVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGNvbnRhaW5zCisgKiBhc3NlbWJsZXIgY29kZSBmb3IgQVJNIHBsYXRmb3JtcyAoTkVPTiBpbnN0cnVjdGlvbnMpLgorICoKKyAqIENvbW1vbgorICogPT09PT09CisgKgorICogT3B0aW9uczoKKyAqICAgVXNlQmViaWdva2ltaXNhLCBVbnJvbGxpbmcKKyAqCisgKiAtIFVucm9sbGluZzogbG9vcCB1bnJvbGxpbmcgKDI0LCAxMiwgOCwgNiwgNCwgMywgMiwgMSkKKyAqIC0gVXNlQmViaWdva2ltaXNhOiBsYW5lIGNvbXBsZW1lbnRpbmcKKyAqCisgKiA2NGJpdCBwbGF0Zm9ybXMKKyAqID09PT09PT09PT09PT09PQorICoKKyAqIEFkZGl0aW9uYWwgb3B0aW9uczoKKyAqICAgVXNlU1NFLCBVc2VPbmx5U0lNRDY0LCBVc2VNTVgsIFVzZVhPUCwgVXNlU0hMRAorICoKKyAqIE9wdGltaXplZCBpbnN0cnVjdGlvbnMgKGRpc2FibGVkIGJ5IGRlZmF1bHQpOgorICogICAtIFVzZVNTRTogdXNlIFN0cmVhbSBTSU1EIGV4dGVuc2lvbnMKKyAqICAgICBvIFVzZU9ubHlTSU1ENjQ6IGxpbWl0IHRvIDY0Yml0IGluc3RydWN0aW9ucywgb3RoZXJ3aXNlIDEyOGJpdAorICogICAgIG8gdy9vIFVzZU9ubHlTSU1ENjQ6IHJlcXVpcmVzIGNvbXBpbGVyIGFndW1lbnQgLW1zc3NlMyBvciAtbXR1bmUKKyAqICAgLSBVc2VNTVg6IHVzZSA2NGJpdCBNTVggaW5zdHJ1Y3Rpb25zCisgKiAgIC0gVXNlWE9QOiB1c2UgQU1EJ3MgZVh0ZW5kZWQgT3BlcmF0aW9ucyAoMTI4Yml0IFNTRSBleHRlbnNpb24pCisgKgorICogT3RoZXI6CisgKiAgIC0gVW5yb2xsaW5nOiBkZWZhdWx0IDI0CisgKiAgIC0gVXNlQmViaWdva2ltaXNhOiBkZWZhdWx0IDEKKyAqCisgKiBXaGVuIG5laXRoZXIgVXNlU1NFLCBVc2VNTVggbm9yIFVzZVhPUCBpcyBjb25maWd1cmVkLCBST0w2NCAocm90YXRlIGxlZnQKKyAqIDY0KSBpcyBpbXBsZW1lbnRlZCBhczoKKyAqICAgLSBXaW5kb3dzOiBfcm90bDY0KCkKKyAqICAgLSBVc2VTSExEOiB1c2Ugc2hsZCAoc2hpZnQgbGVmdCkgYXNtIG9wdGltaXphdGlvbgorICogICAtIG90aGVyd2lzZTogc2hpZnQgYW5kIHhvcgorICoKKyAqIFVzZUJlYmlnb2tpbWlzYSBjYW4ndCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggVXNlU1NFLCBVc2VNTVggb3IKKyAqIFVzZVhPUC4gVXNlT25seVNJTUQ2NCBoYXMgbm8gZWZmZWN0IHVubGVzcyBVc2VTU0UgaXMgc3BlY2lmaWVkLgorICoKKyAqIFRlc3RzIGhhdmUgc2hvd24gdGhhdCBVc2VTU0UgKyBVc2VPbmx5U0lNRDY0IGlzIGFib3V0IHRocmVlIHRvIGZvdXIKKyAqIHRpbWVzIFNMT1dFUiB0aGFuIFVzZUJlYmlnb2tpbWlzYS4gVXNlU1NFIGFuZCBVc2VNTVggYXJlIGFib3V0IHR3byB0aW1lcworICogc2xvd2VyLiAodGVzdGVkIGJ5IENIIGFuZCBBUCkKKyAqCisgKiAzMmJpdCBwbGF0Zm9ybXMKKyAqID09PT09PT09PT09PT09PQorICoKKyAqIEFkZGl0aW9uYWwgb3B0aW9uczoKKyAqICAgVXNlSW50ZXJsZWF2ZVRhYmxlcywgVXNlU2NoZWR1bGUKKyAqCisgKiAgIC0gVW5yb2xsaW5nOiBkZWZhdWx0IDIKKyAqICAgLSBVc2VCZWJpZ29raW1pc2E6IGRlZmF1bHQgbi9hCisgKiAgIC0gVXNlU2NoZWR1bGU6ID8/PywgKDEsIDIsIDM7IGRlZmF1bHQgMykKKyAqICAgLSBVc2VJbnRlcmxlYXZlVGFibGVzOiB1c2UgdHdvIDY0ayBsb29rdXAgdGFibGVzIGZvciAoZGUpaW50ZXJsZWF2aW5nCisgKiAgICAgZGVmYXVsdDogbi9hCisgKgorICogc2NoZWR1bGVzOgorICogICAtIDM6IG5vIFVzZUJlYmlnb2tpbWlzYSwgVW5yb2xsaW5nIG11c3QgYmUgMgorICogICAtIDIgKyAxOiA/Pz8KKyAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19zcGFyYworICAvKiBvcHQ2NCB1c2VzIHVuLWFsaWduZWQgbWVtb3J5IGFjY2VzcyB0aGF0IGNhdXNlcyBhIEJVUyBlcnJvciB3aXRoIG1zZworICAgKiAnaW52YWxpZCBhZGRyZXNzIGFsaWdubWVudCcgb24gU1BBUkMuICovCisgICNkZWZpbmUgS2VjY2FrT3B0IDMyCisjZWxpZiBTSVpFT0ZfVk9JRF9QID09IDggJiYgZGVmaW5lZChQWV9VSU5UNjRfVCkKKyAgLyogb3B0NjQgd29ya3Mgb25seSBmb3IgNjRiaXQgcGxhdGZvcm1zIHdpdGggdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBLZWNjYWtPcHQgNjQKKyNlbHNlCisgIC8qIG9wdDMyIGlzIHVzZWQgZm9yIHRoZSByZW1haW5pbmcgMzIgYW5kIDY0Yml0IHBsYXRmb3JtcyAqLworICAjZGVmaW5lIEtlY2Nha09wdCAzMgorI2VuZGlmCisKKyNpZiBLZWNjYWtPcHQgPT0gNjQgJiYgZGVmaW5lZChQWV9VSU5UNjRfVCkKKyAgLyogNjRiaXQgcGxhdGZvcm1zIHdpdGggdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBVbnJvbGxpbmcgMjQKKyAgI2RlZmluZSBVc2VCZWJpZ29raW1pc2EKKyAgdHlwZWRlZiBQWV9VSU5UNjRfVCBVSU5UNjQ7CisjZWxpZiBLZWNjYWtPcHQgPT0gMzIgJiYgZGVmaW5lZChQWV9VSU5UNjRfVCkKKyAgLyogMzJiaXQgcGxhdGZvcm1zIHdpdGggdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBVbnJvbGxpbmcgMgorICAjZGVmaW5lIFVzZVNjaGVkdWxlIDMKKyAgdHlwZWRlZiBQWV9VSU5UNjRfVCBVSU5UNjQ7CisjZWxzZQorICAvKiAzMiBvciA2NGJpdCBwbGF0Zm9ybXMgd2l0aG91dCB1bnNpZ25lZCBpbnQ2NCAqLworICAjZGVmaW5lIFVucm9sbGluZyAyCisgICNkZWZpbmUgVXNlU2NoZWR1bGUgMworICAjZGVmaW5lIFVzZUludGVybGVhdmVUYWJsZXMKKyNlbmRpZgorCisvKiByZXBsYWNlbWVudCBmb3IgYnJnX2VuZGlhbi5oICovCisjZGVmaW5lIElTX0JJR19FTkRJQU4gNDMyMQorI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOIDEyMzQKKyNpZiBQWV9CSUdfRU5ESUFOCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxzZQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKy8qIGlubGluZSBhbGwgS2VjY2FrIGRlcGVuZGVuY2llcyAqLworI2luY2x1ZGUgImtlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAia2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuYyIKKyNpbmNsdWRlICJrZWNjYWsvS2VjY2FrU3BvbmdlLmMiCisjaWYgS2VjY2FrT3B0ID09IDY0CisgICNpbmNsdWRlICJrZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMiCisjZWxpZiBLZWNjYWtPcHQgPT0gMzIKKyAgI2luY2x1ZGUgImtlY2Nhay9LZWNjYWtGLTE2MDAtb3B0MzIuYyIKKyNlbmRpZgorCisvKiAjZGVmaW5lIFNIQTNfQkxPQ0tTSVpFIDIwMCAvLyAxNjAwIGJpdHMgICovCisjZGVmaW5lIFNIQTNfTUFYX0RJR0VTVFNJWkUgNjQgLyogNTEyIGJpdHMgKi8KKyNkZWZpbmUgU0hBM19zdGF0ZSBoYXNoU3RhdGUKKyNkZWZpbmUgU0hBM19pbml0IEluaXQKKyNkZWZpbmUgU0hBM19wcm9jZXNzIFVwZGF0ZQorI2RlZmluZSBTSEEzX2RvbmUgRmluYWwKKyNkZWZpbmUgU0hBM19jb3B5c3RhdGUoZGVzdCwgc3JjKSBtZW1jcHkoJihkZXN0KSwgJihzcmMpLCBzaXplb2YoU0hBM19zdGF0ZSkpCisjZGVmaW5lIFNIQTNfY2xlYXJzdGF0ZShzdGF0ZSkgbWVtc2V0KCYoc3RhdGUpLCAwLCBzaXplb2YoU0hBM19zdGF0ZSkpCisKKy8qIFRoZSBzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgU0hBMyBpbmZvICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgaW50IGhhc2hiaXRsZW47CisgICAgU0hBM19zdGF0ZSBoYXNoX3N0YXRlOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2s7CisjZW5kaWYKKworfSBTSEEzb2JqZWN0OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFNIQTN0eXBlOworCisKK3N0YXRpYyBTSEEzb2JqZWN0ICoKK25ld1NIQTNvYmplY3QoaW50IGhhc2hiaXRsZW4pCit7CisgICAgU0hBM29iamVjdCAqbmV3b2JqOworCisgICAgLyogY2hlY2sgaGFzaGJpdGxlbiAqLworICAgIHN3aXRjaChoYXNoYml0bGVuKSB7CisgICAgICAgIC8qIHN1cHBvcnRlZCBoYXNoIGxlbmd0aCAqLworICAgICAgICBjYXNlIDIyNDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM4NDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDUxMjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAvKiAgYXJiaXRyYXJpbHktbG9uZyBvdXRwdXQgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBldmVyeXRoaW5nIGVsc2UgaXMgYW4gZXJyb3IgKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiaGFzaGJpdGxlbiBtdXN0IGJlIG9uZSBvZiAyMjQsIDI1NiwgMzg0IG9yIDUxMi4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZXdvYmogPSAoU0hBM29iamVjdCAqKVB5T2JqZWN0X05ldyhTSEEzb2JqZWN0LCAmU0hBM3R5cGUpOworICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3b2JqLT5oYXNoYml0bGVuID0gaGFzaGJpdGxlbjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIG5ld29iai0+bG9jayA9IE5VTEw7CisjZW5kaWYKKyAgICByZXR1cm4gbmV3b2JqOworfQorCisKKy8qIEludGVybmFsIG1ldGhvZHMgZm9yIGEgaGFzaCBvYmplY3QgKi8KKworc3RhdGljIHZvaWQKK1NIQTNfZGVhbGxvYyhTSEEzb2JqZWN0ICpzZWxmKQoreworICAgIFNIQTNfY2xlYXJzdGF0ZShzZWxmLT5oYXNoX3N0YXRlKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGlmIChzZWxmLT5sb2NrKSB7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5sb2NrKTsKKyAgICB9CisjZW5kaWYKKyAgICBQeU9iamVjdF9EZWwoc2VsZik7Cit9CisKKworLyogRXh0ZXJuYWwgbWV0aG9kcyBmb3IgYSBoYXNoIG9iamVjdCAqLworCitQeURvY19TVFJWQVIoU0hBM19jb3B5X19kb2NfXywgIlJldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19jb3B5KFNIQTNvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgU0hBM29iamVjdCAqbmV3b2JqOworCisgICAgaWYgKChuZXdvYmogPSBuZXdTSEEzb2JqZWN0KHNlbGYtPmhhc2hiaXRsZW4pKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBFTlRFUl9IQVNITElCKHNlbGYpOworICAgIFNIQTNfY29weXN0YXRlKG5ld29iai0+aGFzaF9zdGF0ZSwgc2VsZi0+aGFzaF9zdGF0ZSk7CisgICAgTEVBVkVfSEFTSExJQihzZWxmKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3b2JqOworfQorCisKK1B5RG9jX1NUUlZBUihTSEEzX2RpZ2VzdF9fZG9jX18sCisiUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgYmluYXJ5IGRhdGEuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2RpZ2VzdChTSEEzb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTNfTUFYX0RJR0VTVFNJWkVdOworICAgIFNIQTNfc3RhdGUgdGVtcDsKKyAgICBIYXNoUmV0dXJuIHJlczsKKworICAgIEVOVEVSX0hBU0hMSUIoc2VsZik7CisgICAgU0hBM19jb3B5c3RhdGUodGVtcCwgc2VsZi0+aGFzaF9zdGF0ZSk7CisgICAgTEVBVkVfSEFTSExJQihzZWxmKTsKKyAgICByZXMgPSBTSEEzX2RvbmUoJnRlbXAsIGRpZ2VzdCk7CisgICAgU0hBM19jbGVhcnN0YXRlKHRlbXApOworICAgIGlmIChyZXMgIT0gU1VDQ0VTUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiaW50ZXJuYWwgZXJyb3IgaW4gU0hBMyBGaW5hbCgpIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKWRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+aGFzaGJpdGxlbiAvIDgpOworfQorCisKK1B5RG9jX1NUUlZBUihTSEEzX2hleGRpZ2VzdF9fZG9jX18sCisiUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19oZXhkaWdlc3QoU0hBM29iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEzX01BWF9ESUdFU1RTSVpFXTsKKyAgICBTSEEzX3N0YXRlIHRlbXA7CisgICAgSGFzaFJldHVybiByZXM7CisgICAgUHlPYmplY3QgKnJldHZhbDsKKyAgICBQeV9VQ1MxICpoZXhfZGlnZXN0OworICAgIGludCBkaWdlc3RsZW4sIGksIGo7CisKKyAgICAvKiBHZXQgdGhlIHJhdyAoYmluYXJ5KSBkaWdlc3QgdmFsdWUgKi8KKyAgICBFTlRFUl9IQVNITElCKHNlbGYpOworICAgIFNIQTNfY29weXN0YXRlKHRlbXAsIHNlbGYtPmhhc2hfc3RhdGUpOworICAgIExFQVZFX0hBU0hMSUIoc2VsZik7CisgICAgcmVzID0gU0hBM19kb25lKCZ0ZW1wLCBkaWdlc3QpOworICAgIFNIQTNfY2xlYXJzdGF0ZSh0ZW1wKTsKKyAgICBpZiAocmVzICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImludGVybmFsIGVycm9yIGluIFNIQTMgRmluYWwoKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgYSBuZXcgc3RyaW5nICovCisgICAgZGlnZXN0bGVuID0gc2VsZi0+aGFzaGJpdGxlbiAvIDg7CisgICAgcmV0dmFsID0gUHlVbmljb2RlX05ldyhkaWdlc3RsZW4gKiAyLCAxMjcpOworICAgIGlmICghcmV0dmFsKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGV4X2RpZ2VzdCA9IFB5VW5pY29kZV8xQllURV9EQVRBKHJldHZhbCk7CisKKyAgICAvKiBNYWtlIGhleCB2ZXJzaW9uIG9mIHRoZSBkaWdlc3QgKi8KKyAgICBmb3IoaT1qPTA7IGkgPCBkaWdlc3RsZW47IGkrKykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAgICAgIGMgPSAoZGlnZXN0W2ldID4+IDQpICYgMHhmOworICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBQeV9oZXhkaWdpdHNbY107CisgICAgICAgIGMgPSAoZGlnZXN0W2ldICYgMHhmKTsKKyAgICAgICAgaGV4X2RpZ2VzdFtqKytdID0gUHlfaGV4ZGlnaXRzW2NdOworICAgIH0KKyNpZmRlZiBQeV9ERUJVRworICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmV0dmFsLCAxKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitQeURvY19TVFJWQVIoU0hBM191cGRhdGVfX2RvY19fLAorIlVwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM191cGRhdGUoU0hBM29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9idWZmZXIgYnVmOworICAgIEhhc2hSZXR1cm4gcmVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnVwZGF0ZSIsICZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEdFVF9CVUZGRVJfVklFV19PUl9FUlJPVVQob2JqLCAmYnVmKTsKKworICAgIC8qIGFkZCBuZXcgZGF0YSwgdGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXMgKi8KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwgJiYgYnVmLmxlbiA+PSBIQVNITElCX0dJTF9NSU5TSVpFKSB7CisgICAgICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgfQorICAgIC8qIE9uY2UgYSBsb2NrIGV4aXN0cyBhbGwgY29kZSBwYXRocyBtdXN0IGJlIHN5bmNocm9uaXplZC4gV2UgaGF2ZSB0bworICAgICAqIHJlbGVhc2UgdGhlIEdJTCBldmVuIGZvciBzbWFsbCBidWZmZXJzIGFzIGFjcXVpcmluZyB0aGUgbG9jayBtYXkgdGFrZQorICAgICAqIGFuIHVubGltaXRlZCBhbW91bnQgb2YgdGltZSB3aGVuIGFub3RoZXIgdGhyZWFkIHVwZGF0ZXMgdGhpcyBvYmplY3QKKyAgICAgKiB3aXRoIGxvdHMgb2YgZGF0YS4gKi8KKyAgICBpZiAoc2VsZi0+bG9jaykgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5sb2NrLCAxKTsKKyAgICAgICAgcmVzID0gU0hBM19wcm9jZXNzKCZzZWxmLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhzZWxmLT5sb2NrKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlcyA9IFNIQTNfcHJvY2Vzcygmc2VsZi0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworICAgIH0KKyNlbHNlCisgICAgcmVzID0gU0hBM19wcm9jZXNzKCZzZWxmLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisjZW5kaWYKKyAgICBMRUFWRV9IQVNITElCKHNlbGYpOworCisgICAgaWYgKHJlcyAhPSBTVUNDRVNTKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3IgaW4gU0hBMyBVcGRhdGUoKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIFNIQTNfbWV0aG9kc1tdID0geworICAgIHsiY29weSIsICAgICAgKFB5Q0Z1bmN0aW9uKVNIQTNfY29weSwgICAgICBNRVRIX05PQVJHUywKKyAgICAgICAgIFNIQTNfY29weV9fZG9jX199LAorICAgIHsiZGlnZXN0IiwgICAgKFB5Q0Z1bmN0aW9uKVNIQTNfZGlnZXN0LCAgICBNRVRIX05PQVJHUywKKyAgICAgICAgIFNIQTNfZGlnZXN0X19kb2NfX30sCisgICAgeyJoZXhkaWdlc3QiLCAoUHlDRnVuY3Rpb24pU0hBM19oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLAorICAgICAgICAgU0hBM19oZXhkaWdlc3RfX2RvY19ffSwKKyAgICB7InVwZGF0ZSIsICAgIChQeUNGdW5jdGlvbilTSEEzX3VwZGF0ZSwgICAgTUVUSF9WQVJBUkdTLAorICAgICAgICAgU0hBM191cGRhdGVfX2RvY19ffSwKKyAgICB7TlVMTCwgICAgICAgIE5VTEx9ICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2dldF9ibG9ja19zaXplKFNIQTNvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgLyogSE1BQy1TSEEzIGhhc24ndCBiZWVuIHNwZWNpZmllZCB5ZXQgYW5kIG5vIG9mZmljaWFsIHRlc3QgdmVjdG9ycyBhcmUKKyAgICAgKiBhdmFpbGFibGUuIFRodXMgYmxvY2tfc2l6ZSByZXR1cm5zIE5vdEltcGxlbWVudGVkIHRvIHByZXZlbnQgcGVvcGxlCisgICAgICogZnJvbSB1c2luZyBTSEEzIHdpdGggdGhlIGhtYWMgbW9kdWxlLgorICAgICAqLworICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfZ2V0X25hbWUoU0hBM29iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInNoYTNfJWkiLCBzZWxmLT5oYXNoYml0bGVuKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfZ2V0X2RpZ2VzdF9zaXplKFNIQTNvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5oYXNoYml0bGVuIC8gOCk7Cit9CisKKworc3RhdGljIFB5R2V0U2V0RGVmIFNIQTNfZ2V0c2V0ZXJzW10gPSB7CisgICAgeyJibG9ja19zaXplIiwgKGdldHRlcilTSEEzX2dldF9ibG9ja19zaXplLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgICB7Im5hbWUiLCAoZ2V0dGVyKVNIQTNfZ2V0X25hbWUsIE5VTEwsIE5VTEwsIE5VTEx9LAorICAgIHsiZGlnZXN0X3NpemUiLCAoZ2V0dGVyKVNIQTNfZ2V0X2RpZ2VzdF9zaXplLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFNIQTN0eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfc2hhMy5TSEEzIiwgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihTSEEzb2JqZWN0KSwgLyogdHBfc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiAgbWV0aG9kcyAgKi8KKyAgICAoZGVzdHJ1Y3RvcilTSEEzX2RlYWxsb2MsIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgU0hBM19tZXRob2RzLCAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgU0hBM19nZXRzZXRlcnMsICAgICAvKiB0cF9nZXRzZXQgKi8KK307CisKKworLyogY29uc3RydWN0b3IgaGVscGVyICovCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19mYWN0b3J5KFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0LCBjb25zdCBjaGFyICpmbXQsCisgICAgICAgICAgICAgaW50IGhhc2hiaXRsZW4pCit7CisgICAgU0hBM29iamVjdCAqbmV3b2JqID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpkYXRhX29iaiA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBIYXNoUmV0dXJuIHJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgZm10LCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2JqKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZGF0YV9vYmopCisgICAgICAgIEdFVF9CVUZGRVJfVklFV19PUl9FUlJPVVQoZGF0YV9vYmosICZidWYpOworCisgICAgaWYgKChuZXdvYmogPSBuZXdTSEEzb2JqZWN0KGhhc2hiaXRsZW4pKSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKFNIQTNfaW5pdCgmbmV3b2JqLT5oYXNoX3N0YXRlLCBoYXNoYml0bGVuKSAhPSBTVUNDRVNTKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3IgaW4gU0hBMyBVcGRhdGUoKSIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChkYXRhX29iaikgeworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgICAgIGlmIChidWYubGVuID49IEhBU0hMSUJfR0lMX01JTlNJWkUpIHsKKyAgICAgICAgICAgIC8qIGludmFyaWFudDogTmV3IG9iamVjdHMgY2FuJ3QgYmUgYWNjZXNzZWQgYnkgb3RoZXIgY29kZSB5ZXQsCisgICAgICAgICAgICAgKiB0aHVzIGl0J3Mgc2FmZSB0byByZWxlYXNlIHRoZSBHSUwgd2l0aG91dCBsb2NraW5nIHRoZSBvYmplY3QuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIHJlcyA9IFNIQTNfcHJvY2VzcygmbmV3b2JqLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzID0gU0hBM19wcm9jZXNzKCZuZXdvYmotPmhhc2hfc3RhdGUsIGJ1Zi5idWYsIGJ1Zi5sZW4gKiA4KTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgcmVzID0gU0hBM19wcm9jZXNzKCZuZXdvYmotPmhhc2hfc3RhdGUsIGJ1Zi5idWYsIGJ1Zi5sZW4gKiA4KTsKKyNlbmRpZgorICAgICAgICBpZiAocmVzICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yIGluIFNIQTMgVXBkYXRlKCkiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICB9CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3b2JqOworCisgIGVycm9yOgorICAgIGlmIChuZXdvYmopIHsKKyAgICAgICAgU0hBM19kZWFsbG9jKG5ld29iaik7CisgICAgfQorICAgIGlmIChkYXRhX29iaikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKKworfQorCitQeURvY19TVFJWQVIoc2hhM18yMjRfX2RvY19fLAorInNoYTNfMjI0KFtzdHJpbmddKSAtPiBTSEEzIG9iamVjdFxuXAorXG5cCitSZXR1cm4gYSBuZXcgU0hBMyBoYXNoIG9iamVjdCB3aXRoIGEgaGFzaGJpdCBsZW5ndGggb2YgMjggYnl0ZXMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaGEzXzIyNChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgcmV0dXJuIFNIQTNfZmFjdG9yeShhcmdzLCBrd2RpY3QsICJ8TzpzaGEzXzIyNCIsIDIyNCk7Cit9CisKKworUHlEb2NfU1RSVkFSKHNoYTNfMjU2X19kb2NfXywKKyJzaGEzXzI1Nihbc3RyaW5nXSkgLT4gU0hBMyBvYmplY3RcblwKK1xuXAorUmV0dXJuIGEgbmV3IFNIQTMgaGFzaCBvYmplY3Qgd2l0aCBhIGhhc2hiaXQgbGVuZ3RoIG9mIDMyIGJ5dGVzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2hhM18yNTYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHJldHVybiBTSEEzX2ZhY3RvcnkoYXJncywga3dkaWN0LCAifE86c2hhM18yNTYiLCAyNTYpOworfQorCitQeURvY19TVFJWQVIoc2hhM18zODRfX2RvY19fLAorInNoYTNfMzg0KFtzdHJpbmddKSAtPiBTSEEzIG9iamVjdFxuXAorXG5cCitSZXR1cm4gYSBuZXcgU0hBMyBoYXNoIG9iamVjdCB3aXRoIGEgaGFzaGJpdCBsZW5ndGggb2YgNDggYnl0ZXMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaGEzXzM4NChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgcmV0dXJuIFNIQTNfZmFjdG9yeShhcmdzLCBrd2RpY3QsICJ8TzpzaGEzXzM4NCIsIDM4NCk7Cit9CisKK1B5RG9jX1NUUlZBUihzaGEzXzUxMl9fZG9jX18sCisic2hhM181MTIoW3N0cmluZ10pIC0+IFNIQTMgb2JqZWN0XG5cCitcblwKK1JldHVybiBhIG5ldyBTSEEzIGhhc2ggb2JqZWN0IHdpdGggYSBoYXNoYml0IGxlbmd0aCBvZiA2NCBieXRlcy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NoYTNfNTEyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK3sKKyAgICByZXR1cm4gU0hBM19mYWN0b3J5KGFyZ3MsIGt3ZGljdCwgInxPOnNoYTNfNTEyIiwgNTEyKTsKK30KKworCisvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLworc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBTSEEzX2Z1bmN0aW9uc1tdID0geworICAgIHsic2hhM18yMjQiLCAoUHlDRnVuY3Rpb24pc2hhM18yMjQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICAgc2hhM18yMjRfX2RvY19ffSwKKyAgICB7InNoYTNfMjU2IiwgKFB5Q0Z1bmN0aW9uKXNoYTNfMjU2LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgICAgIHNoYTNfMjU2X19kb2NfX30sCisgICAgeyJzaGEzXzM4NCIsIChQeUNGdW5jdGlvbilzaGEzXzM4NCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgICBzaGEzXzM4NF9fZG9jX199LAorICAgIHsic2hhM181MTIiLCAoUHlDRnVuY3Rpb24pc2hhM181MTIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICAgc2hhM181MTJfX2RvY19ffSwKKyAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCit9OworCisKKy8qIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuICovCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9TSEEzbW9kdWxlID0geworICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgICAgICJfc2hhMyIsCisgICAgICAgIE5VTEwsCisgICAgICAgIC0xLAorICAgICAgICBTSEEzX2Z1bmN0aW9ucywKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fc2hhMyh2b2lkKQoreworICAgIFB5T2JqZWN0ICptOworCisgICAgUHlfVFlQRSgmU0hBM3R5cGUpID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTN0eXBlKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX1NIQTNtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEzdHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEzVHlwZSIsIChQeU9iamVjdCAqKSZTSEEzdHlwZSk7CisgICAgcmV0dXJuIG07Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCmluZGV4IDM2OTMzNjMuLjM2ODlhNGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwppbmRleCA0NTFlYTI0Li41MGM2ZjBhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjdXJzb3IuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKIApAQCAtNDIsNiArNDEsOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKKwogc3RhdGljIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9pc29sYXRpb25fbGV2ZWwocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGlzb2xhdGlvbl9sZXZlbCk7CiBzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfY3Vyc29yX3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZik7CiAKQEAgLTYwLDcgKzYxLDExIEBACiAKIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX2luaXQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLCAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsIE5VTEwsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsKKyAgICAgICAgImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsCisgICAgICAgICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgInVyaSIsCisgICAgICAgIE5VTEwKKyAgICB9OwogCiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CkBAIC02OCwxMSArNzMsMTQgQEAKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHMgPSAxMDA7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAgICAgaW50IHJjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtOTEsOCArOTksMTkgQEAKICAgICBQeV9JTkNSRUYoJlB5VW5pY29kZV9UeXBlKTsKICAgICBzZWxmLT50ZXh0X2ZhY3RvcnkgPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZTsKIAorI2lmZGVmIFNRTElURV9PUEVOX1VSSQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByYyA9IHNxbGl0ZTNfb3Blbl92MihkYXRhYmFzZSwgJnNlbGYtPmRiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSA/IFNRTElURV9PUEVOX1VSSSA6IDApLCBOVUxMKTsKKyNlbHNlCisgICAgaWYgKHVyaSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfTm90U3VwcG9ydGVkRXJyb3IsICJVUklzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmMgPSBzcWxpdGUzX29wZW4oZGF0YWJhc2UsICZzZWxmLT5kYik7CisjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJjICE9IFNRTElURV9PSykgewpAQCAtNTAzLDEwICs1MjIsMTYgQEAKICAgICAgICAgY29uc3QgY2hhciogYnVmZmVyOwogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihweV92YWwsICZidWZmZXIsICZidWZsZW4pICE9IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHNxbGl0ZTNfcmVzdWx0X2Jsb2IoY29udGV4dCwgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOworICAgICAgICBpZiAoYnVmbGVuID4gSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHNxbGl0ZTNfcmVzdWx0X2Jsb2IoY29udGV4dCwgYnVmZmVyLCAoaW50KWJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTY3OSw2ICs3MDQsOCBAQAogICAgIFB5T2JqZWN0KiogYWdncmVnYXRlX2luc3RhbmNlOwogICAgIF9QeV9JREVOVElGSUVSKGZpbmFsaXplKTsKICAgICBpbnQgb2s7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisgICAgaW50IHJlc3RvcmU7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5R0lMU3RhdGVfU1RBVEUgdGhyZWFkc3RhdGU7CkBAIC02OTQsNyArNzIxLDEyIEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgLyogS2VlcCB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpICovCisgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOworICAgIHJlc3RvcmUgPSAxOworCiAgICAgZnVuY3Rpb25fcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgqYWdncmVnYXRlX2luc3RhbmNlLCAmUHlJZF9maW5hbGl6ZSwgIiIpOworCiAgICAgUHlfREVDUkVGKCphZ2dyZWdhdGVfaW5zdGFuY2UpOwogCiAgICAgb2sgPSAwOwpAQCAtNzA5LDYgKzc0MSwxNyBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICBfc3FsaXRlM19yZXN1bHRfZXJyb3IoY29udGV4dCwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiLCAtMSk7CisjaWYgU1FMSVRFX1ZFUlNJT05fTlVNQkVSIDwgMzAwMzAwMworICAgICAgICAvKiB3aXRoIG9sZCBTUUxpdGUgdmVyc2lvbnMsIF9zcWxpdGUzX3Jlc3VsdF9lcnJvcigpIHNldHMgYSBuZXcgUHl0aG9uCisgICAgICAgICAgIGV4Y2VwdGlvbiwgc28gZG9uJ3QgcmVzdG9yZSB0aGUgcHJldmlvdXMgZXhjZXB0aW9uICovCisgICAgICAgIHJlc3RvcmUgPSAwOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKHJlc3RvcmUpIHsKKyAgICAgICAgLyogUmVzdG9yZSB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpLAorICAgICAgICAgICBidXQgY2xlYXIgYWxzbyB0aGUgY3VycmVudCBleGNlcHRpb24gaWYgZmluYWxpemUoKSBmYWlsZWQgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiAgICAgfQogCiBlcnJvcjoKQEAgLTg1OSwyMiArOTAyLDI5IEBACiAKICAgICBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKKwogICAgIHJldCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKXVzZXJfYXJnLCAiaXNzc3MiLCBhY3Rpb24sIGFyZzEsIGFyZzIsIGRibmFtZSwgYWNjZXNzX2F0dGVtcHRfc291cmNlKTsKIAotICAgIGlmICghcmV0KSB7Ci0gICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpIHsKKyAgICBpZiAocmV0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykKICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KIAogICAgICAgICByYyA9IFNRTElURV9ERU5ZOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHJldCkpIHsKICAgICAgICAgICAgIHJjID0gX1B5TG9uZ19Bc0ludChyZXQpOwotICAgICAgICAgICAgaWYgKHJjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBpZiAocmMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByYyA9IFNRTElURV9ERU5ZOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihyZXQpOwpAQCAtMTE4Nyw5ICsxMjM3LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNxbCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmc3FsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX3N0YXRlbWVudF9yZWZlcmVuY2VzKHNlbGYpOwogCkBAIC0xMjA1LDcgKzEyNTQsNiBAQAogICAgIHN0YXRlbWVudC0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgcmMgPSBweXNxbGl0ZV9zdGF0ZW1lbnRfY3JlYXRlKHN0YXRlbWVudCwgc2VsZiwgc3FsKTsKLQogICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgaWYgKHJjID09IFBZU1FMSVRFX1RPT19NVUNIX1NRTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1dhcm5pbmcsICJZb3UgY2FuIG9ubHkgZXhlY3V0ZSBvbmUgc3RhdGVtZW50IGF0IGEgdGltZS4iKTsKQEAgLTEyMTUsMjUgKzEyNjMsMjMgQEAKICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzdGF0ZW1lbnQpOwogICAgICAgICAgICAgX3B5c3FsaXRlX3NldGVycm9yKHNlbGYtPmRiLCBOVUxMKTsKICAgICAgICAgfQotCi0gICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOwotICAgICAgICBpZiAoIXdlYWtyZWYpIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgewotICAgICAgICAgICAgUHlfQ0xFQVIod2Vha3JlZik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgUHlfREVDUkVGKHdlYWtyZWYpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotZXJyb3I6CisgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOworICAgIGlmICh3ZWFrcmVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgeworICAgICAgICBQeV9ERUNSRUYod2Vha3JlZik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0RFQ1JFRih3ZWFrcmVmKTsKKwogICAgIHJldHVybiAoUHlPYmplY3QqKXN0YXRlbWVudDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKHN0YXRlbWVudCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGUocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCkBAIC0xMjQxLDcgKzEyODcsNiBAQAogICAgIFB5T2JqZWN0KiBjdXJzb3IgPSAwOwogICAgIFB5T2JqZWN0KiByZXN1bHQgPSAwOwogICAgIFB5T2JqZWN0KiBtZXRob2QgPSAwOwotICAgIF9QeV9JREVOVElGSUVSKGN1cnNvcik7CiAKICAgICBjdXJzb3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopc2VsZiwgJlB5SWRfY3Vyc29yLCAiIik7CiAgICAgaWYgKCFjdXJzb3IpIHsKQEAgLTEyNzEsNyArMTMxNiw2IEBACiAgICAgUHlPYmplY3QqIGN1cnNvciA9IDA7CiAgICAgUHlPYmplY3QqIHJlc3VsdCA9IDA7CiAgICAgUHlPYmplY3QqIG1ldGhvZCA9IDA7Ci0gICAgX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKIAogICAgIGN1cnNvciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KilzZWxmLCAmUHlJZF9jdXJzb3IsICIiKTsKICAgICBpZiAoIWN1cnNvcikgewpAQCAtMTMwMSw3ICsxMzQ1LDYgQEAKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggNDk5OTQxNS4uOGQxMDg5MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImN1cnNvci5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9pdGVybmV4dChweXNxbGl0ZV9DdXJzb3IqIHNlbGYpOwogCkBAIC0zMzksNiArMzM4LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSA9PSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUodmFsX3N0ciwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgdHlwZV9jYWxsKCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSBzcWxpdGUzX2NvbHVtbl9uYW1lKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSA9ICI8dW5rbm93biBjb2x1bW4gbmFtZT4iOwpAQCAtODY3LDEwICs4NzEsMTUgQEAKICAgICB9CiAKICAgICBuZXh0X3Jvd190dXBsZSA9IHNlbGYtPm5leHRfcm93OworICAgIGFzc2VydChuZXh0X3Jvd190dXBsZSAhPSBOVUxMKTsKICAgICBzZWxmLT5uZXh0X3JvdyA9IE5VTEw7CiAKICAgICBpZiAoc2VsZi0+cm93X2ZhY3RvcnkgIT0gUHlfTm9uZSkgewogICAgICAgICBuZXh0X3JvdyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yb3dfZmFjdG9yeSwgIk9PIiwgc2VsZiwgbmV4dF9yb3dfdHVwbGUpOworICAgICAgICBpZiAobmV4dF9yb3cgPT0gTlVMTCkgeworICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihuZXh0X3Jvd190dXBsZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKQEAgLTg4Nyw2ICs4OTYsMTIgQEAKIAogICAgICAgICBpZiAocmMgPT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBfcHlzcWxpdGVfZmV0Y2hfb25lX3JvdyhzZWxmKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5uZXh0X3JvdyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5leHRfcm93KTsKKyAgICAgICAgICAgICAgICBfcHlzcWxpdGVfc2V0ZXJyb3Ioc2VsZi0+Y29ubmVjdGlvbi0+ZGIsIE5VTEwpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKaW5kZXggYmVhNmQ2YS4uN2E3ZTg2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYwpAQCAtNTAsMTkgKzUwLDI2IEBACiAgICAgICogQy1sZXZlbCwgc28gdGhpcyBjb2RlIGlzIHJlZHVuZGFudCB3aXRoIHRoZSBvbmUgaW4gY29ubmVjdGlvbl9pbml0IGluCiAgICAgICogY29ubmVjdGlvbi5jIGFuZCBtdXN0IGFsd2F5cyBiZSBjb3BpZWQgZnJvbSB0aGVyZSAuLi4gKi8KIAotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCBOVUxMLCBOVUxMfTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7CisgICAgICAgICJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLAorICAgICAgICAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsICJ1cmkiLAorICAgICAgICBOVUxMCisgICAgfTsKICAgICBjaGFyKiBkYXRhYmFzZTsKICAgICBpbnQgZGV0ZWN0X3R5cGVzID0gMDsKICAgICBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsOwogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQgPSAxOwogICAgIGludCBjYWNoZWRfc3RhdGVtZW50czsKKyAgICBpbnQgdXJpID0gMDsKICAgICBkb3VibGUgdGltZW91dCA9IDUuMDsKIAogICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLCAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pcCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzLCAmdXJpKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc3LDcgKzg0LDggQEAKIH0KIAogUHlEb2NfU1RSVkFSKG1vZHVsZV9jb25uZWN0X2RvYywKLSJjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgaXNvbGF0aW9uX2xldmVsLCBkZXRlY3RfdHlwZXMsIGZhY3RvcnldKVxuXAorImNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCxcblwKKyAgICAgICAgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKVxuXAogXG5cCiBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlXG5cCiBcIjptZW1vcnk6XCIgdG8gb3BlbiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aGF0IHJlc2lkZXMgaW5cblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCmluZGV4IGZjNjg4NzQuLmYyYzg1ZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwpAQCAtMjEsNyArMjEsNiBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogCiBpbnQgcHlzcWxpdGVfcHJlcGFyZV9wcm90b2NvbF9pbml0KHB5c3FsaXRlX1ByZXBhcmVQcm90b2NvbCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKaW5kZXggYjUwNjU4Yy4uNGE4N2EwNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAicm93LmgiCiAjaW5jbHVkZSAiY3Vyc29yLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIHZvaWQgcHlzcWxpdGVfcm93X2RlYWxsb2MocHlzcWxpdGVfUm93KiBzZWxmKQogewpAQCAtNjgsNyArNjcsNyBAQAogewogICAgIGxvbmcgX2lkeDsKICAgICBjaGFyKiBrZXk7Ci0gICAgaW50IG5pdGVtcywgaTsKKyAgICBQeV9zc2l6ZV90IG5pdGVtcywgaTsKICAgICBjaGFyKiBjb21wYXJlX2tleTsKIAogICAgIGNoYXIqIHAxOwpAQCAtODksNyArODgsMTAgQEAKICAgICAgICAgbml0ZW1zID0gUHlUdXBsZV9TaXplKHNlbGYtPmRlc2NyaXB0aW9uKTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspIHsKLSAgICAgICAgICAgIGNvbXBhcmVfa2V5ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhQeVR1cGxlX0dFVF9JVEVNKFB5VHVwbGVfR0VUX0lURU0oc2VsZi0+ZGVzY3JpcHRpb24sIGkpLCAwKSk7CisgICAgICAgICAgICBQeU9iamVjdCAqb2JqOworICAgICAgICAgICAgb2JqID0gUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5kZXNjcmlwdGlvbiwgaSk7CisgICAgICAgICAgICBvYmogPSBQeVR1cGxlX0dFVF9JVEVNKG9iaiwgMCk7CisgICAgICAgICAgICBjb21wYXJlX2tleSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcob2JqKTsKICAgICAgICAgICAgIGlmICghY29tcGFyZV9rZXkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KQEAgLTEyMSwxMCArMTIzLDEyIEBACiAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJObyBpdGVtIHdpdGggdGhhdCBrZXkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGlkeCkpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpZHgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAic2xpY2VzIG5vdCBpbXBsZW1lbnRlZCwgeWV0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgIkluZGV4IG11c3QgYmUgaW50IG9yIHN0cmluZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmggYi9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjBmMTYuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogc3FsaXRlY29tcGF0LmggLSBjb21wYXRpYmlsaXR5IG1hY3JvcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEdlcmhhcmQgSMOkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLSAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLSAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi0gKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci0gKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci0gKgotICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLSAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi0gKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKLSAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi0gKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQotICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgotICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KLSAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLSNpZm5kZWYgUFlTUUxJVEVfQ09NUEFUX0gKLSNkZWZpbmUgUFlTUUxJVEVfQ09NUEFUX0gKLQotLyogZGVmaW5lIFB5X3NzaXplX3QgZm9yIHByZS0yLjUgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0KLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAKLXR5cGVkZWYgaW50IFB5X3NzaXplX3Q7Ci10eXBlZGVmIGludCAoKmxlbmZ1bmMpKFB5T2JqZWN0Kik7Ci0jZW5kaWYKLQotCi0vKiBkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3QgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0jaWZuZGVmIFB5RGljdF9DaGVja0V4YWN0Ci0jZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0KG9wKSAoKG9wKS0+b2JfdHlwZSA9PSAmUHlEaWN0X1R5cGUpCi0jZW5kaWYKLQotLyogZGVmaW5lIFB5X0NMRUFSIGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLwotI2lmbmRlZiBQeV9DTEVBUgotI2RlZmluZSBQeV9DTEVBUihvcCkJCQkJXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCi0gICAgICAgICAgICAgICAgaWYgKG9wKSB7CQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IChQeU9iamVjdCAqKShvcCk7CVwKLSAgICAgICAgICAgICAgICAgICAgICAgIChvcCkgPSBOVUxMOwkJXAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CQlcCi0gICAgICAgICAgICAgICAgfQkJCQlcCi0gICAgICAgIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmbmRlZiBQeVZhck9iamVjdF9IRUFEX0lOSVQKLSNkZWZpbmUgUHlWYXJPYmplY3RfSEVBRF9JTklUKHR5cGUsIHNpemUpIFwKLSAgICBQeU9iamVjdF9IRUFEX0lOSVQodHlwZSkgc2l6ZSwKLSNlbmRpZgotCi0jaWZuZGVmIFB5X1RZUEUKLSNkZWZpbmUgUHlfVFlQRShvYikgKChvYiktPm9iX3R5cGUpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKaW5kZXggNDcxYTA2Ny4uNjZiNGE1MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIm1pY3JvcHJvdG9jb2xzLmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogLyogcHJvdG90eXBlcyAqLwogc3RhdGljIGludCBweXNxbGl0ZV9jaGVja19yZW1haW5pbmdfc3FsKGNvbnN0IGNoYXIqIHRhaWwpOwpAQCAtMTMzLDE4ICsxMzIsMjYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfVU5JQ09ERToKICAgICAgICAgICAgIHN0cmluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmdBbmRTaXplKHBhcmFtZXRlciwgJmJ1Zmxlbik7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIGJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoYnVmbGVuID4gSU5UX01BWCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIGxvbmdlciB0aGFuIElOVF9NQVggYnl0ZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF90ZXh0KHNlbGYtPnN0LCBwb3MsIHN0cmluZywgKGludClidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVFlQRV9CVUZGRVI6Ci0gICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHBhcmFtZXRlciwgJmJ1ZmZlciwgJmJ1ZmxlbikgPT0gMCkgewotICAgICAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX2Jsb2Ioc2VsZi0+c3QsIHBvcywgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIocGFyYW1ldGVyLCAmYnVmZmVyLCAmYnVmbGVuKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwotICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJ1ZmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX2Jsb2Ioc2VsZi0+c3QsIHBvcywgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVFlQRV9VTktOT1dOOgogICAgICAgICAgICAgcmMgPSAtMTsKQEAgLTE3Nyw3ICsxODQsNyBAQAogICAgIGludCBpOwogICAgIGludCByYzsKICAgICBpbnQgbnVtX3BhcmFtc19uZWVkZWQ7Ci0gICAgaW50IG51bV9wYXJhbXM7CisgICAgUHlfc3NpemVfdCBudW1fcGFyYW1zOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIG51bV9wYXJhbXNfbmVlZGVkID0gc3FsaXRlM19iaW5kX3BhcmFtZXRlcl9jb3VudChzZWxmLT5zdCk7CkBAIC0xOTMsNyArMjAwLDkgQEAKICAgICAgICAgICAgIG51bV9wYXJhbXMgPSBQeVNlcXVlbmNlX1NpemUocGFyYW1ldGVycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG51bV9wYXJhbXMgIT0gbnVtX3BhcmFtc19uZWVkZWQpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiSW5jb3JyZWN0IG51bWJlciBvZiBiaW5kaW5ncyBzdXBwbGllZC4gVGhlIGN1cnJlbnQgc3RhdGVtZW50IHVzZXMgJWQsIGFuZCB0aGVyZSBhcmUgJWQgc3VwcGxpZWQuIiwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJpbmRpbmdzIHN1cHBsaWVkLiBUaGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRlbWVudCB1c2VzICVkLCBhbmQgdGhlcmUgYXJlICV6ZCBzdXBwbGllZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wYXJhbXNfbmVlZGVkLCBudW1fcGFyYW1zKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjQ5LDcgKzI1OCw3IEBACiAgICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIGJpbmRpbmdfbmFtZSk7CiAgICAgICAgICAgICAgICAgUHlfWElOQ1JFRihjdXJyZW50X3BhcmFtKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIChjaGFyKiliaW5kaW5nX25hbWUpOworICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCBiaW5kaW5nX25hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjdXJyZW50X3BhcmFtKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJZb3UgZGlkIG5vdCBzdXBwbHkgYSB2YWx1ZSBmb3IgYmluZGluZyAlZC4iLCBpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCmluZGV4IGQ4OGJjM2YuLjMxMmZlM2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgfQogIyBlbmRpZgogI2VuZGlmCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhQeV9TQUZFX0RPV05DQVNUKHZhbHVlLCBzcWxpdGVfaW50NjQsIGxvbmcpKTsKIH0KIAogc3FsaXRlX2ludDY0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcmUuYyBiL01vZHVsZXMvX3NyZS5jCmluZGV4IDFjNzZkMjQuLjU1YTg2YzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NyZS5jCisrKyBiL01vZHVsZXMvX3NyZS5jCkBAIC00LDI0ICs0LDI1IEBACiAgKiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgZW5naW5lCiAgKgogICogcGFydGlhbCBoaXN0b3J5OgotICogMTk5OS0xMC0yNCBmbCAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQotICogMjAwMC0wMy0wNiBmbCAgZmlyc3QgYWxwaGEsIHNvcnQgb2YKLSAqIDIwMDAtMDgtMDEgZmwgIGZpeGVzIGZvciAxLjZiMQotICogMjAwMC0wOC0wNyBmbCAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQotICogMjAwMC0wOS0yMCBmbCAgYWRkZWQgZXhwYW5kIG1ldGhvZAotICogMjAwMS0wMy0yMCBmbCAgbG90cyBvZiBmaXhlcyBmb3IgMi4xYjIKLSAqIDIwMDEtMDQtMTUgZmwgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAotICogMjAwMS0wNC0yOCBmbCAgYWRkZWQgX19jb3B5X18gbWV0aG9kcyAod29yayBpbiBwcm9ncmVzcykKLSAqIDIwMDEtMDUtMTQgZmwgIGZpeGVzIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5Ci0gKiAyMDAxLTA3LTAxIGZsICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCi0gKiAyMDAxLTEwLTE4IGZsICBmaXhlZCBncm91cCByZXNldCBpc3N1ZSAoZnJvbSBNYXR0aGV3IE11ZWxsZXIpCi0gKiAyMDAxLTEwLTIwIGZsICBhZGRlZCBzcGxpdCBwcmltaXRpdmU7IHJlZW5hYmxlIHVuaWNvZGUgZm9yIDEuNi8yLjAvMi4xCi0gKiAyMDAxLTEwLTIxIGZsICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKLSAqIDIwMDEtMTAtMjQgZmwgIGFkZGVkIGZpbmRpdGVyIHByaW1pdGl2ZSAoZm9yIDIuMiBvbmx5KQotICogMjAwMS0xMi0wNyBmbCAgZml4ZWQgbWVtb3J5IGxlYWsgaW4gc3ViL3N1Ym4gKEd1aWRvIHZhbiBSb3NzdW0pCi0gKiAyMDAyLTExLTA5IGZsICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQotICogMjAwMy0wNC0xOCBtdmwgZnVsbHkgc3VwcG9ydCA0LWJ5dGUgY29kZXMKLSAqIDIwMDMtMTAtMTcgZ24gIGltcGxlbWVudGVkIG5vbiByZWN1cnNpdmUgc2NoZW1lCisgKiAxOTk5LTEwLTI0IGZsICAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQorICogMjAwMC0wMy0wNiBmbCAgIGZpcnN0IGFscGhhLCBzb3J0IG9mCisgKiAyMDAwLTA4LTAxIGZsICAgZml4ZXMgZm9yIDEuNmIxCisgKiAyMDAwLTA4LTA3IGZsICAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQorICogMjAwMC0wOS0yMCBmbCAgIGFkZGVkIGV4cGFuZCBtZXRob2QKKyAqIDIwMDEtMDMtMjAgZmwgICBsb3RzIG9mIGZpeGVzIGZvciAyLjFiMgorICogMjAwMS0wNC0xNSBmbCAgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAorICogMjAwMS0wNC0yOCBmbCAgIGFkZGVkIF9fY29weV9fIG1ldGhvZHMgKHdvcmsgaW4gcHJvZ3Jlc3MpCisgKiAyMDAxLTA1LTE0IGZsICAgZml4ZXMgZm9yIDEuNS4yIGNvbXBhdGliaWxpdHkKKyAqIDIwMDEtMDctMDEgZmwgICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCisgKiAyMDAxLTEwLTE4IGZsICAgZml4ZWQgZ3JvdXAgcmVzZXQgaXNzdWUgKGZyb20gTWF0dGhldyBNdWVsbGVyKQorICogMjAwMS0xMC0yMCBmbCAgIGFkZGVkIHNwbGl0IHByaW1pdGl2ZTsgcmVlbmFibGUgdW5pY29kZSBmb3IgMS42LzIuMC8yLjEKKyAqIDIwMDEtMTAtMjEgZmwgICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKKyAqIDIwMDEtMTAtMjQgZmwgICBhZGRlZCBmaW5kaXRlciBwcmltaXRpdmUgKGZvciAyLjIgb25seSkKKyAqIDIwMDEtMTItMDcgZmwgICBmaXhlZCBtZW1vcnkgbGVhayBpbiBzdWIvc3VibiAoR3VpZG8gdmFuIFJvc3N1bSkKKyAqIDIwMDItMTEtMDkgZmwgICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQorICogMjAwMy0wNC0xOCBtdmwgIGZ1bGx5IHN1cHBvcnQgNC1ieXRlIGNvZGVzCisgKiAyMDAzLTEwLTE3IGduICAgaW1wbGVtZW50ZWQgbm9uIHJlY3Vyc2l2ZSBzY2hlbWUKKyAqIDIwMTMtMDItMDQgbXJhYiBhZGRlZCBmdWxsbWF0Y2ggcHJpbWl0aXZlCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDEgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM0LDggKzM1LDYgQEAKICAqIG90aGVyIGNvbXBhdGliaWxpdHkgd29yay4KICAqLwogCi0jaWZuZGVmIFNSRV9SRUNVUlNJVkUKLQogc3RhdGljIGNoYXIgY29weXJpZ2h0W10gPQogICAgICIgU1JFIDIuMi4yIENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIGJ5IFNlY3JldCBMYWJzIEFCICI7CiAKQEAgLTQ2LDYgKzQ1LDggQEAKIAogI2luY2x1ZGUgInNyZS5oIgogCisjZGVmaW5lIFNSRV9DT0RFX0JJVFMgKDggKiBzaXplb2YoU1JFX0NPREUpKQorCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogLyogbmFtZSBvZiB0aGlzIG1vZHVsZSwgbWludXMgdGhlIGxlYWRpbmcgdW5kZXJzY29yZSAqLwpAQCAtNTgsOSArNTksNiBAQAogLyogZGVmaW5pbmcgdGhpcyBvbmUgZW5hYmxlcyB0cmFjaW5nICovCiAjdW5kZWYgVkVSQk9TRQogCi0vKiBkZWZpbmluZyB0aGlzIGVuYWJsZXMgdW5pY29kZSBzdXBwb3J0IChkZWZhdWx0IHVuZGVyIDEuNmExIGFuZCBsYXRlcikgKi8KLSNkZWZpbmUgSEFWRV9VTklDT0RFCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBvcHRpb25hbCBmZWF0dXJlcyAqLwogCkBAIC03MCwxMCArNjgsNiBAQAogLyogZW5hYmxlcyBjb3B5L2RlZXBjb3B5IGhhbmRsaW5nICh3b3JrIGluIHByb2dyZXNzKSAqLwogI3VuZGVmIFVTRV9CVUlMVElOX0NPUFkKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMTA2MDAwMAotI2RlZmluZSBQeU9iamVjdF9ERUwob3ApIFB5TWVtX0RFTCgob3ApKQotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTUwLDkgKzE0NCw2IEBACiAvKiBsb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHByZWRpY2F0ZXMgKi8KIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwogICogd2FybmluZ3Mgd2hlbiBjJ3MgdHlwZSBzdXBwb3J0cyBvbmx5IG51bWJlcnMgPCBOKzEgKi8KLSNkZWZpbmUgU1JFX0xPQ19JU19ESUdJVChjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNkaWdpdCgoY2gpKSA6IDApCi0jZGVmaW5lIFNSRV9MT0NfSVNfU1BBQ0UoY2gpICghKChjaCkgJiB+MjU1KSA/IGlzc3BhY2UoKGNoKSkgOiAwKQotI2RlZmluZSBTUkVfTE9DX0lTX0xJTkVCUkVBSyhjaCkgKChjaCkgPT0gJ1xuJykKICNkZWZpbmUgU1JFX0xPQ19JU19BTE5VTShjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNhbG51bSgoY2gpKSA6IDApCiAjZGVmaW5lIFNSRV9MT0NfSVNfV09SRChjaCkgKFNSRV9MT0NfSVNfQUxOVU0oKGNoKSkgfHwgKGNoKSA9PSAnXycpCiAKQEAgLTI1NiwxMzgwICsyNDcsMzIgQEAKIAogLyogZ2VuZXJhdGUgOC1iaXQgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFNSRV9DSEFSIHVuc2lnbmVkIGNoYXIKLSNkZWZpbmUgU1JFX0NIQVJHRVQoc3RhdGUsIGJ1ZiwgaW5kZXgpICgodW5zaWduZWQgY2hhciopYnVmKVtpbmRleF0KLSNkZWZpbmUgU1JFX0FUIHNyZV9hdAotI2RlZmluZSBTUkVfQ09VTlQgc3JlX2NvdW50Ci0jZGVmaW5lIFNSRV9DSEFSU0VUIHNyZV9jaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV9pbmZvCi0jZGVmaW5lIFNSRV9NQVRDSCBzcmVfbWF0Y2gKLSNkZWZpbmUgU1JFX01BVENIX0NPTlRFWFQgc3JlX21hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfc2VhcmNoCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzEKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDEKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MxXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotI2RlZmluZSBTUkVfUkVDVVJTSVZFCi0jaW5jbHVkZSAiX3NyZS5jIgotI3VuZGVmIFNSRV9SRUNVUlNJVkUKKy8qIGdlbmVyYXRlIDE2LWJpdCB1bmljb2RlIHZlcnNpb24gKi8KIAotI3VuZGVmIFNSRV9TRUFSQ0gKLSN1bmRlZiBTUkVfTUFUQ0gKLSN1bmRlZiBTUkVfTUFUQ0hfQ09OVEVYVAotI3VuZGVmIFNSRV9JTkZPCi0jdW5kZWYgU1JFX0NIQVJTRVQKLSN1bmRlZiBTUkVfQ09VTlQKLSN1bmRlZiBTUkVfQVQKLSN1bmRlZiBTUkVfQ0hBUgotI3VuZGVmIFNSRV9DSEFSR0VUCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzIKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDIKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MyXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotLyogZ2VuZXJhdGUgOC8xNi8zMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCisvKiBnZW5lcmF0ZSAzMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCiAKLSNkZWZpbmUgU1JFX0NIQVIgdm9pZAotI2RlZmluZSBTUkVfQ0hBUkdFVChzdGF0ZSwgYnVmLCBpbmRleCkgXAotICAgICgoc3RhdGUtPmNoYXJzaXplPT0xKSA/ICgoUHlfVUNTMSopYnVmKVtpbmRleF0gOiBcCi0gICAgIChzdGF0ZS0+Y2hhcnNpemU9PTIpID8gKChQeV9VQ1MyKilidWYpW2luZGV4XSA6IFwKLSAgICAgKChQeV9VQ1M0KilidWYpW2luZGV4XSkKLSNkZWZpbmUgU1JFX0FUIHNyZV91YXQKLSNkZWZpbmUgU1JFX0NPVU5UIHNyZV91Y291bnQKLSNkZWZpbmUgU1JFX0NIQVJTRVQgc3JlX3VjaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV91aW5mbwotI2RlZmluZSBTUkVfTUFUQ0ggc3JlX3VtYXRjaAotI2RlZmluZSBTUkVfTUFUQ0hfQ09OVEVYVCBzcmVfdW1hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfdXNlYXJjaAotCi0jZW5kaWYgLyogU1JFX1JFQ1VSU0lWRSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogU3RyaW5nIG1hdGNoaW5nIGVuZ2luZSAqLwotCi0vKiB0aGUgZm9sbG93aW5nIHNlY3Rpb24gaXMgY29tcGlsZWQgdHdpY2UsIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlcgotICAgc2V0dGluZ3MgKi8KLQotTE9DQUwoaW50KQotU1JFX0FUKFNSRV9TVEFURSogc3RhdGUsIGNoYXIqIHB0ciwgU1JFX0NPREUgYXQpCi17Ci0gICAgLyogY2hlY2sgaWYgcG9pbnRlciBpcyBhdCBnaXZlbiBwb3NpdGlvbiAqLwotCi0gICAgUHlfc3NpemVfdCB0aGlzcCwgdGhhdHA7Ci0KLSAgICBzd2l0Y2ggKGF0KSB7Ci0KLSAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkc6Ci0gICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nKTsKLQotICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19MSU5FOgotICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcgfHwKLSAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EOgotICAgICAgICByZXR1cm4gKCgodm9pZCopIChwdHIrc3RhdGUtPmNoYXJzaXplKSA9PSBzdGF0ZS0+ZW5kICYmCi0gICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKSB8fAotICAgICAgICAgICAgICAgICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKSk7Ci0KLSAgICBjYXNlIFNSRV9BVF9FTkRfTElORToKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kIHx8Ci0gICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKTsKLQotICAgIGNhc2UgU1JFX0FUX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTE9DX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9MT0NfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9VTklfQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX1VOSV9OT05fQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKLQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1MT0NBTChpbnQpCi1TUkVfQ0hBUlNFVChTUkVfQ09ERSogc2V0LCBTUkVfQ09ERSBjaCkKLXsKLSAgICAvKiBjaGVjayBpZiBjaGFyYWN0ZXIgaXMgYSBtZW1iZXIgb2YgdGhlIGdpdmVuIHNldCAqLwotCi0gICAgaW50IG9rID0gMTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgc3dpdGNoICgqc2V0KyspIHsKLQotICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgotICAgICAgICAgICAgcmV0dXJuICFvazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgaWYgKGNoID09IHNldFswXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICBzZXQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgotICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIGlmIChzcmVfY2F0ZWdvcnkoc2V0WzBdLCAoaW50KSBjaCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgaWYgKHNpemVvZihTUkVfQ09ERSkgPT0gMikgewotICAgICAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAoMTYgYml0cyBwZXIgY29kZSB3b3JkKSAqLwotICAgICAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJiAoc2V0W2NoID4+IDRdICYgKDEgPDwgKGNoICYgMTUpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKDMyIGJpdHMgcGVyIGNvZGUgd29yZCkgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPCAyNTYgJiYgKHNldFtjaCA+PiA1XSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSA4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0U6Ci0gICAgICAgICAgICAvKiA8UkFOR0U+IDxsb3dlcj4gPHVwcGVyPiAqLwotICAgICAgICAgICAgaWYgKHNldFswXSA8PSBjaCAmJiBjaCA8PSBzZXRbMV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6Ci0gICAgICAgICAgICBvayA9ICFvazsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6Ci0gICAgICAgICAgICAvKiA8QklHQ0hBUlNFVD4gPGJsb2NrY291bnQ+IDwyNTYgYmxvY2tpbmRpY2VzPiA8YmxvY2tzPiAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50LCBibG9jazsKLSAgICAgICAgICAgIGNvdW50ID0gKihzZXQrKyk7Ci0KLSAgICAgICAgICAgIGlmIChzaXplb2YoU1JFX0NPREUpID09IDIpIHsKLSAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTI4OwotICAgICAgICAgICAgICAgIGlmIChzZXRbYmxvY2sqMTYgKyAoKGNoICYgMjU1KT4+NCldICYgKDEgPDwgKGNoICYgMTUpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCoxNjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwotICAgICAgICAgICAgICAgICAqIHdhcm5pbmdzIHdoZW4gYydzIHR5cGUgc3VwcG9ydHMgb25seSBudW1iZXJzIDwgTisxICovCi0gICAgICAgICAgICAgICAgaWYgKCEoY2ggJiB+NjU1MzUpKQotICAgICAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrID0gLTE7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDY0OwotICAgICAgICAgICAgICAgIGlmIChibG9jayA+PTAgJiYKLSAgICAgICAgICAgICAgICAgICAgKHNldFtibG9jayo4ICsgKChjaCAmIDI1NSk+PjUpXSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCo4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgLS0gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQKLSAgICAgICAgICAgICAgIGhlcmUsIHNvIGxldCdzIGp1c3QgcHJldGVuZCBpdCBkaWRuJ3QgbWF0Y2guLi4gKi8KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1MT0NBTChQeV9zc2l6ZV90KSBTUkVfTUFUQ0goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pOwotCi1MT0NBTChQeV9zc2l6ZV90KQotU1JFX0NPVU5UKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIFNSRV9DT0RFIGNocjsKLSAgICBjaGFyKiBwdHIgPSAoY2hhciAqKXN0YXRlLT5wdHI7Ci0gICAgY2hhciogZW5kID0gKGNoYXIgKilzdGF0ZS0+ZW5kOwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qIGFkanVzdCBlbmQgKi8KLSAgICBpZiAobWF4Y291bnQgPCAoZW5kIC0gcHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSAmJiBtYXhjb3VudCAhPSBTUkVfTUFYUkVQRUFUKQotICAgICAgICBlbmQgPSBwdHIgKyBtYXhjb3VudCpzdGF0ZS0+Y2hhcnNpemU7Ci0KLSAgICBzd2l0Y2ggKHBhdHRlcm5bMF0pIHsKLQotICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAvKiByZXBlYXRlZCBzZXQgKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgSU5cbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmCi0gICAgICAgICAgICAgICBTUkVfQ0hBUlNFVChwYXR0ZXJuICsgMiwgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9BTlk6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gIHNraXAgdG8gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgIHN0cmluZywgYW5kIGJhY2t0cmFjayBmcm9tIHRoZXJlICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWV9BTExcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICBwdHIgPSBlbmQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybiAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBTVUJQQVRURVJOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKChjaGFyKikgc3RhdGUtPnB0ciA8IGVuZCkgewotICAgICAgICAgICAgaSA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybik7Ci0gICAgICAgICAgICBpZiAoaSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAotICAgICAgICAgICAgICAgKChjaGFyKilzdGF0ZS0+cHRyIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUpKTsKLSAgICAgICAgcmV0dXJuICgoY2hhciopc3RhdGUtPnB0ciAtIHB0cikvc3RhdGUtPmNoYXJzaXplOwotICAgIH0KLQotICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKLSAgICAgICAgICAgKHB0ciAtIChjaGFyKikgc3RhdGUtPnB0cikvc3RhdGUtPmNoYXJzaXplKSk7Ci0gICAgcmV0dXJuIChwdHIgLSAoY2hhciopIHN0YXRlLT5wdHIpL3N0YXRlLT5jaGFyc2l6ZTsKLX0KLQotI2lmIDAgLyogbm90IHVzZWQgaW4gdGhpcyByZWxlYXNlICovCi1MT0NBTChpbnQpCi1TUkVfSU5GTyhTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICAvKiBjaGVjayBpZiBhbiBTUkVfT1BfSU5GTyBibG9jayBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBTUkVfQ09ERSBvYmplY3RzIHRvIHNraXAgaWYgc3VjY2Vzc2Z1bCwgMAotICAgICAgIGlmIG5vIG1hdGNoICovCi0KLSAgICBjaGFyKiBlbmQgPSBzdGF0ZS0+ZW5kOwotICAgIGNoYXIqIHB0ciA9IHN0YXRlLT5wdHI7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyogY2hlY2sgbWluaW1hbCBsZW5ndGggKi8KLSAgICBpZiAocGF0dGVyblszXSAmJiAoZW5kIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBwYXR0ZXJuWzNdKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIGNoZWNrIGtub3duIHByZWZpeCAqLwotICAgIGlmIChwYXR0ZXJuWzJdICYgU1JFX0lORk9fUFJFRklYICYmIHBhdHRlcm5bNV0gPiAxKSB7Ci0gICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuWzVdOyBpKyspCi0gICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCBpKSAhPSBwYXR0ZXJuWzcgKyBpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHBhdHRlcm5bMF0gKyAyICogcGF0dGVybls2XTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhdHRlcm5bMF07Ci19Ci0jZW5kaWYKLQotLyogVGhlIG1hY3JvcyBiZWxvdyBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHJlY3Vyc2l2ZSBTUkVfTUFUQ0goKQotICogY2FsbHMgdGhhdCAqZmFpbGVkKiBhbmQgZG8gKm5vdCogcmV0dXJuIGltbWVkaWF0ZWx5IChJT1csIHRob3NlCi0gKiB0aGF0IHdpbGwgYmFja3RyYWNrKS4gRXhwbGFpbmluZzoKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCB0cnVlOiB0aGF0J3MgdXN1YWxseSBhIHN1Y2Nlc3MKLSAqICAgKGJlc2lkZXMgYXR5cGljYWwgY2FzZXMgbGlrZSBBU1NFUlRfTk9UKSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8KLSAqICAgcmVhc29uIHRvIHJlc3RvcmUgbGFzdG1hcms7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UgYnV0IHRoZSBjdXJyZW50IFNSRV9NQVRDSCgpCi0gKiAgIGlzIHJldHVybmluZyB0byB0aGUgY2FsbGVyOiBJZiB0aGUgY3VycmVudCBTUkVfTUFUQ0goKSBpcyB0aGUKLSAqICAgdG9wIGZ1bmN0aW9uIG9mIHRoZSByZWN1cnNpb24sIHJldHVybmluZyBmYWxzZSB3aWxsIGJlIGEgbWF0Y2hpbmcKLSAqICAgZmFpbHVyZSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGxhc3RtYXJrIGlzIHBvaW50aW5nIHRvLgotICogICBJZiBpdCdzICpub3QqIHRoZSB0b3AgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYSByZWN1cnNpdmUgU1JFX01BVENIKCkKLSAqICAgZmFpbHVyZSBieSBpdHNlbGYsIGFuZCB0aGUgY2FsbGluZyBTUkVfTUFUQ0goKSB3aWxsIGhhdmUgdG8gZGVhbAotICogICB3aXRoIHRoZSBmYWlsdXJlIGJ5IHRoZSBzYW1lIHJ1bGVzIGV4cGxhaW5lZCBoZXJlIChpdCB3aWxsIHJlc3RvcmUKLSAqICAgbGFzdG1hcmsgYnkgaXRzZWxmIGlmIG5lY2Vzc2FyeSk7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGNvbnRpbnVlIHRoZQotICogICBvdXRzaWRlICdmb3InIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIHdoZW4gYnJlYWtpbmcsIHNpbmNlIHRoZSBuZXh0Ci0gKiAgIE9QIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyazsKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGFnYWluCi0gKiAgIGluc2lkZSBhIGxvY2FsIGZvci93aGlsZSBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCBiZXR3ZWVuIGVhY2gKLSAqICAgbG9vcCBpdGVyYXRpb24sIHNpbmNlIHRoZSByZWN1cnNpdmUgU1JFX01BVENIKCkgY291bGQgZG8gYW55dGhpbmcsCi0gKiAgIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcmsuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIHRoZSBkaXNjdXNzaW9uIGF0IFNGIHBhdGNoICM3MTI5MDAuCi0gKi8KLSNkZWZpbmUgTEFTVE1BUktfU0FWRSgpICAgICBcCi0gICAgZG8geyBcCi0gICAgICAgIGN0eC0+bGFzdG1hcmsgPSBzdGF0ZS0+bGFzdG1hcms7IFwKLSAgICAgICAgY3R4LT5sYXN0aW5kZXggPSBzdGF0ZS0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTEFTVE1BUktfUkVTVE9SRSgpICBcCi0gICAgZG8geyBcCi0gICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGN0eC0+bGFzdG1hcms7IFwKLSAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGN0eC0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRVRVUk5fRVJST1IoaSkgZG8geyByZXR1cm4gaTsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fRkFJTFVSRSBkbyB7IHJldCA9IDA7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fU1VDQ0VTUyBkbyB7IHJldCA9IDE7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotCi0jZGVmaW5lIFJFVFVSTl9PTl9FUlJPUihpKSBcCi0gICAgZG8geyBpZiAoaSA8IDApIFJFVFVSTl9FUlJPUihpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVUVVJOX09OX1NVQ0NFU1MoaSkgXAotICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA+IDApIFJFVFVSTl9TVUNDRVNTOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRVRVUk5fT05fRkFJTFVSRShpKSBcCi0gICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID09IDApIFJFVFVSTl9GQUlMVVJFOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNGWSh4KSAjeAotCi0jZGVmaW5lIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHR5cGUsIHB0cikgXAotZG8geyBcCi0gICAgYWxsb2NfcG9zID0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZTsgXAotICAgIFRSQUNFKCgiYWxsb2NhdGluZyAlcyBpbiAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIFNGWSh0eXBlKSwgYWxsb2NfcG9zLCBzaXplb2YodHlwZSkpKTsgXAotICAgIGlmIChzaXplb2YodHlwZSkgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gYWxsb2NfcG9zKSB7IFwKLSAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemVvZih0eXBlKSk7IFwKLSAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAotICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAotICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOyBcCi0gICAgfSBcCi0gICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaythbGxvY19wb3MpOyBcCi0gICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplb2YodHlwZSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIHR5cGUsIHB0ciwgcG9zKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImxvb2tpbmcgdXAgJXMgYXQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgU0ZZKHR5cGUpLCBwb3MpKTsgXAotICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srcG9zKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIGRhdGEsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIGluICVwIHRvICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgc2l6ZSkpOyBcCi0gICAgaWYgKHNpemUgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSkgeyBcCi0gICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplKTsgXAotICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCi0gICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCi0gICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7IFwKLSAgICB9IFwKLSAgICBtZW1jcHkoc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgZGF0YSwgc2l6ZSk7IFwKLSAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemU7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19QT1Aoc3RhdGUsIGRhdGEsIHNpemUsIGRpc2NhcmQpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIHRvICVwIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIG1lbWNweShkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpOyBcCi0gICAgaWYgKGRpc2NhcmQpIFwKLSAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiZGlzY2FyZCBkYXRhIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIERBVEFfUFVTSCh4KSBcCi0gICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSkKLSNkZWZpbmUgREFUQV9QT1AoeCkgXAotICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSwgMSkKLSNkZWZpbmUgREFUQV9QT1BfRElTQ0FSRCh4KSBcCi0gICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZW9mKCooeCkpKQotI2RlZmluZSBEQVRBX0FMTE9DKHQscCkgXAotICAgIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHQsIHApCi0jZGVmaW5lIERBVEFfTE9PS1VQX0FUKHQscCxwb3MpIFwKLSAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSx0LHAscG9zKQotCi0jZGVmaW5lIE1BUktfUFVTSChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBpID0gbGFzdG1hcms7IC8qIGN0eC0+bGFzdG1hcmsgbWF5IGNoYW5nZSBpZiByZWFsbG9jYXRlZCAqLyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgc3RhdGUtPm1hcmssIChpKzEpKnNpemVvZih2b2lkKikpOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1AobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMSk7IFwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBNQVJLX1BPUF9LRUVQKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDApOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1BfRElTQ0FSRChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEpVTVBfTk9ORSAgICAgICAgICAgIDAKLSNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMSAgICAgMQotI2RlZmluZSBKVU1QX01BWF9VTlRJTF8yICAgICAyCi0jZGVmaW5lIEpVTVBfTUFYX1VOVElMXzMgICAgIDMKLSNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMSAgICAgNAotI2RlZmluZSBKVU1QX01JTl9VTlRJTF8yICAgICA1Ci0jZGVmaW5lIEpVTVBfTUlOX1VOVElMXzMgICAgIDYKLSNkZWZpbmUgSlVNUF9SRVBFQVQgICAgICAgICAgNwotI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMSAgICA4Ci0jZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8yICAgIDkKLSNkZWZpbmUgSlVNUF9NSU5fUkVQRUFUX09ORSAgMTAKLSNkZWZpbmUgSlVNUF9CUkFOQ0ggICAgICAgICAgMTEKLSNkZWZpbmUgSlVNUF9BU1NFUlQgICAgICAgICAgMTIKLSNkZWZpbmUgSlVNUF9BU1NFUlRfTk9UICAgICAgMTMKLQotI2RlZmluZSBET19KVU1QKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIG5leHRjdHgpOyBcCi0gICAgbmV4dGN0eC0+bGFzdF9jdHhfcG9zID0gY3R4X3BvczsgXAotICAgIG5leHRjdHgtPmp1bXAgPSBqdW1wdmFsdWU7IFwKLSAgICBuZXh0Y3R4LT5wYXR0ZXJuID0gbmV4dHBhdHRlcm47IFwKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCi0gICAgY3R4ID0gbmV4dGN0eDsgXAotICAgIGdvdG8gZW50cmFuY2U7IFwKLSAgICBqdW1wbGFiZWw6IFwKLSAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9zc2l6ZV90IGxhc3RfY3R4X3BvczsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgY2hhciogcHRyOwotICAgIFNSRV9DT0RFKiBwYXR0ZXJuOwotICAgIFB5X3NzaXplX3QgY291bnQ7Ci0gICAgUHlfc3NpemVfdCBsYXN0bWFyazsKLSAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIFNSRV9DT0RFIGNocjsKLSAgICAgICAgU1JFX1JFUEVBVCogcmVwOwotICAgIH0gdTsKLX0gU1JFX01BVENIX0NPTlRFWFQ7Ci0KLS8qIGNoZWNrIGlmIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAgcmV0dXJucyA8MCBmb3IKLSAgIGVycm9yLCAwIGZvciBmYWlsdXJlLCBhbmQgMSBmb3Igc3VjY2VzcyAqLwotTE9DQUwoUHlfc3NpemVfdCkKLVNSRV9NQVRDSChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICBjaGFyKiBlbmQgPSAoY2hhciopc3RhdGUtPmVuZDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jX3BvcywgY3R4X3BvcyA9IC0xOwotICAgIFB5X3NzaXplX3QgaSwgcmV0ID0gMDsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgdW5zaWduZWQgaW50IHNpZ2NvdW50PTA7Ci0KLSAgICBTUkVfTUFUQ0hfQ09OVEVYVCogY3R4OwotICAgIFNSRV9NQVRDSF9DT05URVhUKiBuZXh0Y3R4OwotCi0gICAgVFJBQ0UoKCJ8JXB8JXB8RU5URVJcbiIsIHBhdHRlcm4sIHN0YXRlLT5wdHIpKTsKLQotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIGN0eCk7Ci0gICAgY3R4LT5sYXN0X2N0eF9wb3MgPSAtMTsKLSAgICBjdHgtPmp1bXAgPSBKVU1QX05PTkU7Ci0gICAgY3R4LT5wYXR0ZXJuID0gcGF0dGVybjsKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOwotCi1lbnRyYW5jZToKLQotICAgIGN0eC0+cHRyID0gKGNoYXIgKilzdGF0ZS0+cHRyOwotCi0gICAgaWYgKGN0eC0+cGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgewotICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLwotICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gLi4uICovCi0gICAgICAgIGlmIChjdHgtPnBhdHRlcm5bM10gJiYgKGVuZCAtIGN0eC0+cHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBjdHgtPnBhdHRlcm5bM10pIHsKLSAgICAgICAgICAgIFRSQUNFKCgicmVqZWN0IChnb3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBjaGFycywgIgotICAgICAgICAgICAgICAgICAgICJuZWVkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLAotICAgICAgICAgICAgICAgICAgIChlbmQgLSBjdHgtPnB0cikvc3RhdGUtPmNoYXJzaXplLAotICAgICAgICAgICAgICAgICAgIChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bM10pKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV0gKyAxOwotICAgIH0KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgKytzaWdjb3VudDsKLSAgICAgICAgaWYgKCgwID09IChzaWdjb3VudCAmIDB4ZmZmKSkgJiYgUHlFcnJfQ2hlY2tTaWduYWxzKCkpCi0gICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lOVEVSUlVQVEVEKTsKLQotICAgICAgICBzd2l0Y2ggKCpjdHgtPnBhdHRlcm4rKykgewotCi0gICAgICAgIGNhc2UgU1JFX09QX01BUks6Ci0gICAgICAgICAgICAvKiBzZXQgbWFyayAqLwotICAgICAgICAgICAgLyogPE1BUks+IDxnaWQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVJLICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGlmIChpICYgMSkKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gaS8yICsgMTsKLSAgICAgICAgICAgIGlmIChpID4gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgLyogc3RhdGUtPmxhc3RtYXJrIGlzIHRoZSBoaWdoZXN0IHZhbGlkIGluZGV4IGluIHRoZQotICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrIGFycmF5LiAgSWYgaXQgaXMgaW5jcmVhc2VkIGJ5IG1vcmUgdGhhbiAxLAotICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnZlbmluZyBtYXJrcyBtdXN0IGJlIHNldCB0byBOVUxMIHRvIHNpZ25hbAotICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlc2UgbWFya3MgaGF2ZSBub3QgYmVlbiBlbmNvdW50ZXJlZC4gKi8KLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGogPSBzdGF0ZS0+bGFzdG1hcmsgKyAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgaSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmtbaisrXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5tYXJrW2ldID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6Ci0gICAgICAgICAgICAvKiBtYXRjaCBsaXRlcmFsIHN0cmluZyAqLwotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgdGhhdCBpcyBub3QgbGl0ZXJhbCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIC8qIDxOT1RfTElURVJBTD4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSA9PSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1NVQ0NFU1M6Ci0gICAgICAgICAgICAvKiBlbmQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U1VDQ0VTU1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQVQ6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiAqLwotICAgICAgICAgICAgLyogPEFUPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFUICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoIVNSRV9BVChzdGF0ZSwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIGNhdGVnb3J5ICovCi0gICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q0FURUdPUlkgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhc3JlX2NhdGVnb3J5KGN0eC0+cGF0dGVyblswXSwgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FOWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIChleGNlcHQgYSBuZXdsaW5lKSAqLwotICAgICAgICAgICAgLyogPEFOWT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKi8KLSAgICAgICAgICAgIC8qIDxBTllfQUxMPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZX0FMTFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAgICAgLyogbWF0Y2ggc2V0IG1lbWJlciAob3Igbm9uX21lbWJlcikgKi8KLSAgICAgICAgICAgIC8qIDxJTj4gPHNraXA+IDxzZXQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDEsIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKQotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUxfSUdOT1JFICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSAhPSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpID09IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCi0gICAgICAgICAgICAgICAgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybisxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9KVU1QOgotICAgICAgICBjYXNlIFNSRV9PUF9JTkZPOgotICAgICAgICAgICAgLyoganVtcCBmb3J3YXJkICovCi0gICAgICAgICAgICAvKiA8SlVNUD4gPG9mZnNldD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVAgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQlJBTkNIOgotICAgICAgICAgICAgLyogYWx0ZXJuYXRpb24gKi8KLSAgICAgICAgICAgIC8qIDxCUkFOQ0g+IDwwPXNraXA+IGNvZGUgPEpVTVA+IC4uLiA8TlVMTD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEJSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICBmb3IgKDsgY3R4LT5wYXR0ZXJuWzBdOyBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfTElURVJBTCAmJgotICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT5wYXR0ZXJuWzJdKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfSU4gJiYKLSAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDMsIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0JSQU5DSCwganVtcF9icmFuY2gsIGN0eC0+cGF0dGVybisxKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfS0VFUChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUX09ORToKLSAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtYXhpbWl6aW5nIHJlZ2V4cCkgKi8KLQotICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCi0gICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCi0gICAgICAgICAgICAgICB1c2UgdGhlIE1BWF9SRVBFQVQgb3BlcmF0b3IgKi8KLQotICAgICAgICAgICAgLyogPFJFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzJdKTsKLSAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0gICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplICogY3R4LT5jb3VudDsKLQotICAgICAgICAgICAgLyogd2hlbiB3ZSBhcnJpdmUgaGVyZSwgY291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZgotICAgICAgICAgICAgICAgbWF0Y2hlcywgYW5kIGN0eC0+cHRyIHBvaW50cyB0byB0aGUgdGFpbCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICBzdHJpbmcuICBjaGVjayBpZiB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLAotICAgICAgICAgICAgICAgYW5kIGJhY2t0cmFjayBpZiBub3QuICovCi0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCi0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgc3RhcnRzIHdpdGggYSBsaXRlcmFsLiBza2lwIHBvc2l0aW9ucyB3aGVyZQotICAgICAgICAgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGNhbm5vdCBwb3NzaWJseSBtYXRjaCAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5jaHIgPSBjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdKzFdOwotICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT51LmNocikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLQotICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzIsIGp1bXBfcmVwZWF0X29uZV8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOwotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWluaW1pemluZyByZWdleHApICovCi0KLSAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcwotICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQotICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAotICAgICAgICAgICAgICAgdXNlIHRoZSBNSU5fUkVQRUFUIG9wZXJhdG9yICovCi0KLSAgICAgICAgICAgIC8qIDxNSU5fUkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCi0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9SRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQotICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KLSAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMV0pOwotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQotICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWF0Y2ggbWluaW11bSBudW1iZXIgb2YgdGltZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IG1pbmltdW0gbWF0Y2hlcyBvZiByZXBlYXQgKi8KLSAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KLSAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y291bnQgPD0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9SRVBFQVRfT05FLGp1bXBfbWluX3JlcGVhdF9vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVQ6Ci0gICAgICAgICAgICAvKiBjcmVhdGUgcmVwZWF0IGNvbnRleHQuICBhbGwgdGhlIGhhcmQgd29yayBpcyBkb25lCi0gICAgICAgICAgICAgICBieSB0aGUgVU5USUwgb3BlcmF0b3IgKE1BWF9VTlRJTCwgTUlOX1VOVElMKSAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxVTlRJTD4gdGFpbCAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIC8qIGluc3RhbGwgbmV3IHJlcGVhdCBjb250ZXh0ICovCi0gICAgICAgICAgICBjdHgtPnUucmVwID0gKFNSRV9SRVBFQVQqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKCpjdHgtPnUucmVwKSk7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSAtMTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4gPSBjdHgtPnBhdHRlcm47Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5wcmV2ID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gTlVMTDsKLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFULCBqdW1wX3JlcGVhdCwgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUoY3R4LT51LnJlcCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX01BWF9VTlRJTDoKLSAgICAgICAgICAgIC8qIG1heGltaXppbmcgcmVwZWF0ICovCi0gICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1BWF9VTlRJTD4gdGFpbCAqLwotCi0gICAgICAgICAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkZWFsIHdpdGggemVyby13aWR0aAotICAgICAgICAgICAgICAgbWF0Y2hlcyBpbiBoZXJlLi4uICovCi0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVhfVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8xLCBqdW1wX21heF91bnRpbF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXSB8fAotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVCkgJiYKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyICE9IGN0eC0+dS5yZXAtPmxhc3RfcHRyKSB7Ci0gICAgICAgICAgICAgICAgLyogd2UgbWF5IGhhdmUgZW5vdWdoIG1hdGNoZXMsIGJ1dCBpZiB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgICBtYXRjaCBhbm90aGVyIGl0ZW0sIGRvIHNvICovCi0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMiwganVtcF9tYXhfdW50aWxfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTUFSS19QT1AoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogY2Fubm90IG1hdGNoIG1vcmUgcmVwZWF0ZWQgaXRlbXMgaGVyZS4gIG1ha2Ugc3VyZSB0aGUKLSAgICAgICAgICAgICAgIHRhaWwgbWF0Y2hlcyAqLwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzMsIGp1bXBfbWF4X3VudGlsXzMsIGN0eC0+cGF0dGVybik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fU1VDQ0VTUyhyZXQpOwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NSU5fVU5USUw6Ci0gICAgICAgICAgICAvKiBtaW5pbWl6aW5nIHJlcGVhdCAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNSU5fVU5USUw+IHRhaWwgKi8KLQotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7Ci0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7Ci0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICVwXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQsIGN0eC0+dS5yZXAtPnBhdHRlcm4pKTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzEsIGp1bXBfbWluX3VudGlsXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLQotICAgICAgICAgICAgLyogc2VlIGlmIHRoZSB0YWlsIG1hdGNoZXMgKi8KLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8yLCBqdW1wX21pbl91bnRpbF8yLCBjdHgtPnBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0KLSAgICAgICAgICAgICAgICAmJiBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdICE9IFNSRV9NQVhSRVBFQVQpIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9PSBjdHgtPnUucmVwLT5sYXN0X3B0cikKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMyxqdW1wX21pbl91bnRpbF8zLAotICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRiAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIHAgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogZSA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9JR05PUkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9JR05PUkUgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFyKiBwID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIGUgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfRVhJU1RTOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfRVhJU1RTICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgLyogPEdST1VQUkVGX0VYSVNUUz4gPGdyb3VwPiA8c2tpcD4gY29kZXllcyA8SlVNUD4gY29kZW5vIC4uLiAqLwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOwotICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlQ6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgc3VicGF0dGVybiAqLwotICAgICAgICAgICAgLyogPEFTU0VSVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyIDwgc3RhdGUtPmJlZ2lubmluZykKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9BU1NFUlQsIGp1bXBfYXNzZXJ0LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fRkFJTFVSRShyZXQpOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgbm90IHN1YnBhdHRlcm4gKi8KLSAgICAgICAgICAgIC8qIDxBU1NFUlRfTk9UPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUX05PVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyID49IHN0YXRlLT5iZWdpbm5pbmcpIHsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6Ci0gICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOwotICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKLSAgICAgICAgfQotICAgIH0KLQotZXhpdDoKLSAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7Ci0gICAganVtcCA9IGN0eC0+anVtcDsKLSAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7Ci0gICAgaWYgKGN0eF9wb3MgPT0gLTEpCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0KLSAgICBzd2l0Y2ggKGp1bXApIHsKLSAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8yOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8yOwotICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzM6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzM7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMjsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8zOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8zOwotICAgICAgICBjYXNlIEpVTVBfQlJBTkNIOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9CUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9icmFuY2g7Ci0gICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMTsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8xOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8xOwotICAgICAgICBjYXNlIEpVTVBfUkVQRUFUOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXQ7Ci0gICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzE6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMTsKLSAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8yOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9SRVBFQVRfT05FXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3JlcGVhdF9vbmU7Ci0gICAgICAgIGNhc2UgSlVNUF9BU1NFUlQ6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydDsKLSAgICAgICAgY2FzZSBKVU1QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVF9OT1RcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnRfbm90OwotICAgICAgICBjYXNlIEpVTVBfTk9ORToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFVFVSTiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIHJldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCi19Ci0KLUxPQ0FMKFB5X3NzaXplX3QpCi1TUkVfU0VBUkNIKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQotewotICAgIGNoYXIqIHB0ciA9IChjaGFyKilzdGF0ZS0+c3RhcnQ7Ci0gICAgY2hhciogZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgUHlfc3NpemVfdCBzdGF0dXMgPSAwOwotICAgIFB5X3NzaXplX3QgcHJlZml4X2xlbiA9IDA7Ci0gICAgUHlfc3NpemVfdCBwcmVmaXhfc2tpcCA9IDA7Ci0gICAgU1JFX0NPREUqIHByZWZpeCA9IE5VTEw7Ci0gICAgU1JFX0NPREUqIGNoYXJzZXQgPSBOVUxMOwotICAgIFNSRV9DT0RFKiBvdmVybGFwID0gTlVMTDsKLSAgICBpbnQgZmxhZ3MgPSAwOwotCi0gICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKLSAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KLSAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IDw0PW1heD4gPDU9cHJlZml4IGluZm8+ICAqLwotCi0gICAgICAgIGZsYWdzID0gcGF0dGVyblsyXTsKLQotICAgICAgICBpZiAocGF0dGVyblszXSA+IDEpIHsKLSAgICAgICAgICAgIC8qIGFkanVzdCBlbmQgcG9pbnQgKGJ1dCBtYWtlIHN1cmUgd2UgbGVhdmUgYXQgbGVhc3Qgb25lCi0gICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlcmUsIHNvIGxpdGVyYWwgc2VhcmNoIHdpbGwgd29yaykgKi8KLSAgICAgICAgICAgIGVuZCAtPSAocGF0dGVyblszXS0xKSAqIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChlbmQgPD0gcHRyKQotICAgICAgICAgICAgICAgIGVuZCA9IHB0ciArIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX1BSRUZJWCkgewotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeCAqLwotICAgICAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KLSAgICAgICAgICAgIHByZWZpeF9sZW4gPSBwYXR0ZXJuWzVdOwotICAgICAgICAgICAgcHJlZml4X3NraXAgPSBwYXR0ZXJuWzZdOwotICAgICAgICAgICAgcHJlZml4ID0gcGF0dGVybiArIDc7Ci0gICAgICAgICAgICBvdmVybGFwID0gcHJlZml4ICsgcHJlZml4X2xlbiAtIDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBTUkVfSU5GT19DSEFSU0VUKQotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCi0gICAgICAgICAgICAvKiA8Y2hhcnNldD4gKi8KLSAgICAgICAgICAgIGNoYXJzZXQgPSBwYXR0ZXJuICsgNTsKLQotICAgICAgICBwYXR0ZXJuICs9IDEgKyBwYXR0ZXJuWzFdOwotICAgIH0KLQotICAgIFRSQUNFKCgicHJlZml4ID0gJXAgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAotICAgICAgICAgICBwcmVmaXgsIHByZWZpeF9sZW4sIHByZWZpeF9za2lwKSk7Ci0gICAgVFJBQ0UoKCJjaGFyc2V0ID0gJXBcbiIsIGNoYXJzZXQpKTsKLQotI2lmIGRlZmluZWQoVVNFX0ZBU1RfU0VBUkNIKQotICAgIGlmIChwcmVmaXhfbGVuID4gMSkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4LiAgdXNlIHRoZSBvdmVybGFwCi0gICAgICAgICAgIHRhYmxlIHRvIHNraXAgZm9yd2FyZCBhcyBmYXN0IGFzIHdlIHBvc3NpYmx5IGNhbiAqLwotICAgICAgICBQeV9zc2l6ZV90IGkgPSAwOwotICAgICAgICBlbmQgPSAoY2hhciAqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBwcmVmaXhbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gcHJlZml4X2xlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgYSBwb3RlbnRpYWwgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBTQ0FOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSkgKiBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyIC0gKHByZWZpeF9sZW4gLSBwcmVmaXhfc2tpcCAtIDEpICogc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKLSAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgU1JFX0NPREUgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQotICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCi0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4gKyAyKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hhcnNldCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9DSEFSU0VUKGNoYXJzZXQsIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkKLSAgICAgICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggQ0hBUlNFVFxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyOwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgIHdoaWxlIChwdHIgPD0gZW5kKSB7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0ciA9IHB0cjsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi0jaWYgIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkKKyNkZWZpbmUgU1JFX0NIQVIgUHlfVUNTNAorI2RlZmluZSBTSVpFT0ZfU1JFX0NIQVIgNAorI2RlZmluZSBTUkUoRikgc3JlX3VjczRfIyNGCisjaW5jbHVkZSAic3JlX2xpYi5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZmFjdG9yaWVzIGFuZCBkZXN0cnVjdG9ycyAqLwogCiAvKiBzZWUgc3JlLmggZm9yIG9iamVjdCBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgaW50KTsKK3N0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgUHlfc3NpemVfdCk7CiBzdGF0aWMgUHlPYmplY3QqcGF0dGVybl9zY2FubmVyKFBhdHRlcm5PYmplY3QqLCBQeU9iamVjdCosIFB5T2JqZWN0KiBrdyk7CiAKLXN0YXRpYyBpbnQKLXNyZV9saXRlcmFsX3RlbXBsYXRlKGludCBjaGFyc2l6ZSwgY2hhciogcHRyLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICAvKiBjaGVjayBpZiBnaXZlbiBzdHJpbmcgaXMgYSBsaXRlcmFsIHRlbXBsYXRlIChpLmUuIG5vIGVzY2FwZXMpICovCi0gICAgc3RydWN0IHsKLSAgICAgICAgaW50IGNoYXJzaXplOwotICAgIH0gc3RhdGUgPSB7Ci0gICAgICAgIGNoYXJzaXplCi0gICAgfTsKLSAgICB3aGlsZSAobGVuLS0gPiAwKSB7Ci0gICAgICAgIGlmIChTUkVfQ0hBUkdFVCgoJnN0YXRlKSwgcHRyLCAwKSA9PSAnXFwnKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHB0ciArPSBjaGFyc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBzcmVfY29kZXNpemUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CkBAIC0xNjY1LDcyICszMDgsNDEgQEAKIAogc3RhdGljIHZvaWQqCiBnZXRzdHJpbmcoUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCogcF9sZW5ndGgsCi0gICAgICAgICAgaW50KiBwX2xvZ2ljYWxfY2hhcnNpemUsIGludCogcF9jaGFyc2l6ZSwKKyAgICAgICAgICBpbnQqIHBfaXNieXRlcywgaW50KiBwX2NoYXJzaXplLAogICAgICAgICAgIFB5X2J1ZmZlciAqdmlldykKIHsKICAgICAvKiBnaXZlbiBhIHB5dGhvbiBvYmplY3QsIHJldHVybiBhIGRhdGEgcG9pbnRlciwgYSBsZW5ndGggKGluCiAgICAgICAgY2hhcmFjdGVycyksIGFuZCBhIGNoYXJhY3RlciBzaXplLiAgcmV0dXJuIE5VTEwgaWYgdGhlIG9iamVjdAogICAgICAgIGlzIG5vdCBhIHN0cmluZyAob3Igbm90IGNvbXBhdGlibGUpICovCiAKLSAgICBQeUJ1ZmZlclByb2NzICpidWZmZXI7Ci0gICAgUHlfc3NpemVfdCBzaXplLCBieXRlczsKLSAgICBpbnQgY2hhcnNpemU7Ci0gICAgdm9pZCogcHRyOwotCiAgICAgLyogVW5pY29kZSBvYmplY3RzIGRvIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJLiBTbywgZ2V0IHRoZSBkYXRhCiAgICAgICAgZGlyZWN0bHkgaW5zdGVhZC4gKi8KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHN0cmluZykpIHsKICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHJpbmcpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHB0ciA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7CiAgICAgICAgICpwX2xlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZyk7CiAgICAgICAgICpwX2NoYXJzaXplID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKLSAgICAgICAgKnBfbG9naWNhbF9jaGFyc2l6ZSA9IDQ7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgICpwX2lzYnl0ZXMgPSAwOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKICAgICB9CiAKICAgICAvKiBnZXQgcG9pbnRlciB0byBieXRlIHN0cmluZyBidWZmZXIgKi8KLSAgICB2aWV3LT5sZW4gPSAtMTsKLSAgICBidWZmZXIgPSBQeV9UWVBFKHN0cmluZyktPnRwX2FzX2J1ZmZlcjsKLSAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5iZl9nZXRidWZmZXIgfHwKLSAgICAgICAgKCpidWZmZXItPmJmX2dldGJ1ZmZlcikoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogZGV0ZXJtaW5lIGJ1ZmZlciBzaXplICovCi0gICAgYnl0ZXMgPSB2aWV3LT5sZW47Ci0gICAgcHRyID0gdmlldy0+YnVmOworICAgICpwX2xlbmd0aCA9IHZpZXctPmxlbjsKKyAgICAqcF9jaGFyc2l6ZSA9IDE7CisgICAgKnBfaXNieXRlcyA9IDE7CiAKLSAgICBpZiAoYnl0ZXMgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgaGFzIG5lZ2F0aXZlIHNpemUiKTsKLSAgICAgICAgZ290byBlcnI7CisgICAgaWYgKHZpZXctPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQnVmZmVyIGlzIE5VTEwiKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsKKyAgICAgICAgdmlldy0+YnVmID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCi0gICAgLyogZGV0ZXJtaW5lIGNoYXJhY3RlciBzaXplICovCi0gICAgc2l6ZSA9IFB5T2JqZWN0X1NpemUoc3RyaW5nKTsKLQotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHN0cmluZykgfHwgYnl0ZXMgPT0gc2l6ZSkKLSAgICAgICAgY2hhcnNpemUgPSAxOwotICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIHNpemUgbWlzbWF0Y2giKTsKLSAgICAgICAgZ290byBlcnI7Ci0gICAgfQotCi0gICAgKnBfbGVuZ3RoID0gc2l6ZTsKLSAgICAqcF9jaGFyc2l6ZSA9IGNoYXJzaXplOwotICAgICpwX2xvZ2ljYWxfY2hhcnNpemUgPSBjaGFyc2l6ZTsKLQotICAgIGlmIChwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBpcyBOVUxMIik7Ci0gICAgICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsKLSAgZXJyOgotICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7Ci0gICAgdmlldy0+YnVmID0gTlVMTDsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdmlldy0+YnVmOwogfQogCiBMT0NBTChQeU9iamVjdCopCkBAIC0xNzQwLDcgKzM1Miw3IEBACiAgICAgLyogcHJlcGFyZSBzdGF0ZSBvYmplY3QgKi8KIAogICAgIFB5X3NzaXplX3QgbGVuZ3RoOwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplLCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CiAgICAgdm9pZCogcHRyOwogCiAgICAgbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoU1JFX1NUQVRFKSk7CkBAIC0xNzQ5LDE2ICszNjEsMTYgQEAKICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gLTE7CiAKICAgICBzdGF0ZS0+YnVmZmVyLmJ1ZiA9IE5VTEw7Ci0gICAgcHRyID0gZ2V0c3RyaW5nKHN0cmluZywgJmxlbmd0aCwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnN0YXRlLT5idWZmZXIpOworICAgIHB0ciA9IGdldHN0cmluZyhzdHJpbmcsICZsZW5ndGgsICZpc2J5dGVzLCAmY2hhcnNpemUsICZzdGF0ZS0+YnVmZmVyKTsKICAgICBpZiAoIXB0cikKICAgICAgICAgZ290byBlcnI7CiAKLSAgICBpZiAobG9naWNhbF9jaGFyc2l6ZSA9PSAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPiAxKSB7CisgICAgaWYgKGlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIGEgc3RyaW5nIHBhdHRlcm4gb24gYSBieXRlcy1saWtlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycjsKICAgICB9Ci0gICAgaWYgKGxvZ2ljYWxfY2hhcnNpemUgPiAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgeworICAgIGlmICghaXNieXRlcyAmJiBwYXR0ZXJuLT5pc2J5dGVzID4gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBhIGJ5dGVzIHBhdHRlcm4gb24gYSBzdHJpbmctbGlrZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnI7CkBAIC0xNzc1LDcgKzM4Nyw3IEBACiAgICAgZWxzZSBpZiAoZW5kID4gbGVuZ3RoKQogICAgICAgICBlbmQgPSBsZW5ndGg7CiAKLSAgICBzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9IGxvZ2ljYWxfY2hhcnNpemU7CisgICAgc3RhdGUtPmlzYnl0ZXMgPSBpc2J5dGVzOwogICAgIHN0YXRlLT5jaGFyc2l6ZSA9IGNoYXJzaXplOwogCiAgICAgc3RhdGUtPmJlZ2lubmluZyA9IHB0cjsKQEAgLTE4MTYsNiArNDI4LDI0IEBACiAgICAgKCgoY2hhciopKG1lbWJlcikgLSAoY2hhciopKHN0YXRlKS0+YmVnaW5uaW5nKSAvIChzdGF0ZSktPmNoYXJzaXplKQogCiBMT0NBTChQeU9iamVjdCopCitnZXRzbGljZShpbnQgaXNieXRlcywgY29uc3Qgdm9pZCAqcHRyLAorICAgICAgICAgUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCit7CisgICAgaWYgKGlzYnl0ZXMpIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChzdHJpbmcpICYmCisgICAgICAgICAgICBzdGFydCA9PSAwICYmIGVuZCA9PSBQeUJ5dGVzX0dFVF9TSVpFKHN0cmluZykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXB0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX1N1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQpOworICAgIH0KK30KKworTE9DQUwoUHlPYmplY3QqKQogc3RhdGVfZ2V0c2xpY2UoU1JFX1NUQVRFKiBzdGF0ZSwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIHN0cmluZywgaW50IGVtcHR5KQogewogICAgIFB5X3NzaXplX3QgaSwgajsKQEAgLTE4MzUsMTEgKzQ2NSwxMSBAQAogICAgICAgICBqID0gU1RBVEVfT0ZGU0VUKHN0YXRlLCBzdGF0ZS0+bWFya1tpbmRleCsxXSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBqKTsKKyAgICByZXR1cm4gZ2V0c2xpY2Uoc3RhdGUtPmlzYnl0ZXMsIHN0YXRlLT5iZWdpbm5pbmcsIHN0cmluZywgaSwgaik7CiB9CiAKIHN0YXRpYyB2b2lkCi1wYXR0ZXJuX2Vycm9yKGludCBzdGF0dXMpCitwYXR0ZXJuX2Vycm9yKFB5X3NzaXplX3Qgc3RhdHVzKQogewogICAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBTUkVfRVJST1JfUkVDVVJTSU9OX0xJTUlUOgpAQCAtMTg2OCwxOSArNDk4LDM5IEBACiB7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwotICAgIGlmIChzZWxmLT52aWV3LmJ1ZikKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+dmlldyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wYXR0ZXJuKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmdyb3VwaW5kZXgpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+aW5kZXhncm91cCk7CiAgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQogCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX21hdGNoKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MxX21hdGNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDIpCisgICAgICAgIHJldHVybiBzcmVfdWNzMl9tYXRjaChzdGF0ZSwgcGF0dGVybik7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfbWF0Y2goc3RhdGUsIHBhdHRlcm4pOworfQorCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX3NlYXJjaChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDEpCisgICAgICAgIHJldHVybiBzcmVfdWNzMV9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMikKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MyX3NlYXJjaChzdGF0ZSwgcGF0dGVybik7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKK30KKwogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9tYXRjaChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgUHlPYmplY3QqIHN0cmluZzsKICAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKQEAgLTE4OTgsMTEgKzU0OCw0MSBAQAogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFUQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKLSAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VtYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CisKKyAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RhdGVfZmluaSgmc3RhdGUpOworCisgICAgcmV0dXJuIHBhdHRlcm5fbmV3X21hdGNoKHNlbGYsICZzdGF0ZSwgc3RhdHVzKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcGF0dGVybl9mdWxsbWF0Y2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKK3sKKyAgICBTUkVfU1RBVEUgc3RhdGU7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CisKKyAgICBQeU9iamVjdCogc3RyaW5nOworICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOworICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CisgICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyAicGF0dGVybiIsICJwb3MiLCAiZW5kcG9zIiwgTlVMTCB9OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiT3xubjpmdWxsbWF0Y2giLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmluZywgJnN0YXJ0LCAmZW5kKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdHJpbmcgPSBzdGF0ZV9pbml0KCZzdGF0ZSwgc2VsZiwgc3RyaW5nLCBzdGFydCwgZW5kKTsKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdGF0ZS5tYXRjaF9hbGwgPSAxOworICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RlVMTE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOworCisgICAgc3RhdHVzID0gc3JlX21hdGNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE5MTcsNyArNTk3LDcgQEAKIHBhdHRlcm5fc2VhcmNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBQeU9iamVjdCogc3RyaW5nOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwpAQCAtMTkzMywxMSArNjEzLDcgQEAKIAogICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIAotICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIApAQCAtMTk5Nyw1OSArNjczLDExIEBACiAjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0Kgotam9pbl9saXN0KFB5T2JqZWN0KiBsaXN0LCBQeU9iamVjdCogc3RyaW5nKQotewotICAgIC8qIGpvaW4gbGlzdCBlbGVtZW50cyAqLwotCi0gICAgUHlPYmplY3QqIGpvaW5lcjsKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwCi0gICAgUHlPYmplY3QqIGZ1bmN0aW9uOwotICAgIFB5T2JqZWN0KiBhcmdzOwotI2VuZGlmCi0gICAgUHlPYmplY3QqIHJlc3VsdDsKLQotICAgIGpvaW5lciA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCAwLCAwKTsKLSAgICBpZiAoIWpvaW5lcikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGxpc3QpID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICByZXR1cm4gam9pbmVyOwotICAgIH0KLQotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDEwNjAwMDAKLSAgICBmdW5jdGlvbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoam9pbmVyLCAiam9pbiIpOwotICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAgUHlfREVDUkVGKGpvaW5lcik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7Ci0gICAgaWYgKCFhcmdzKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0gICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBsaXN0KTsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGZ1bmN0aW9uLCBhcmdzKTsKLSAgICBQeV9ERUNSRUYoYXJncyk7IC8qIGFsc28gcmVtb3ZlcyBsaXN0ICovCi0gICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKLSNlbHNlCi0gICAgcmVzdWx0ID0gY2FsbCgKLSAgICAgICAgInN0cmluZyIsICJqb2luIiwKLSAgICAgICAgUHlUdXBsZV9QYWNrKDIsIGxpc3QsIGpvaW5lcikKLSAgICAgICAgKTsKLSNlbmRpZgotICAgIFB5X0RFQ1JFRihqb2luZXIpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9maW5kYWxsKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBpLCBiLCBlOwogCiAgICAgUHlPYmplY3QqIHN0cmluZzsKQEAgLTIwNzgsMTIgKzcwNiw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMDk5LDcgKzcyMiw4IEBACiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIGIgPSBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCk7CiAgICAgICAgICAgICBlID0gU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUucHRyKTsKLSAgICAgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgYiwgZSk7CisgICAgICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgYiwgZSk7CiAgICAgICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE0NSw3ICs3NjksNiBAQAogCiB9CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiBzdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX2ZpbmRpdGVyKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CkBAIC0yMTY3LDcgKzc5MCw2IEBACiAKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9Ci0jZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9zcGxpdChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQpAQCAtMjE3NSw3ICs3OTcsNyBAQAogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKICAgICBQeU9iamVjdCogaXRlbTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgdm9pZCogbGFzdDsKQEAgLTIyMDYsMTIgKzgyOCw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMjMxLDcgKzg0OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBnZXQgc2VnbWVudCBiZWZvcmUgdGhpcyBtYXRjaCAqLwotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZSgKKyAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgICAgIHN0cmluZywgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgbGFzdCksCiAgICAgICAgICAgICBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCkKICAgICAgICAgICAgICk7CkBAIC0yMjYwLDcgKzg3Nyw3IEBACiAgICAgfQogCiAgICAgLyogZ2V0IHNlZ21lbnQgZm9sbG93aW5nIGxhc3QgbWF0Y2ggKGV2ZW4gaWYgZW1wdHkpICovCi0gICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2UoCisgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgc3RyaW5nLCBTVEFURV9PRkZTRVQoJnN0YXRlLCBsYXN0KSwgc3RhdGUuZW5kcG9zCiAgICAgICAgICk7CiAgICAgaWYgKCFpdGVtKQpAQCAtMjI4NiwxNSArOTAzLDE2IEBACiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OworICAgIFB5T2JqZWN0KiBqb2luZXI7CiAgICAgUHlPYmplY3QqIGl0ZW07CiAgICAgUHlPYmplY3QqIGZpbHRlcjsKICAgICBQeU9iamVjdCogYXJnczsKICAgICBQeU9iamVjdCogbWF0Y2g7CiAgICAgdm9pZCogcHRyOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5X3NzaXplX3QgaSwgYiwgZTsKLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZSwgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOwogICAgIGludCBmaWx0ZXJfaXNfY2FsbGFibGU7CiAgICAgUHlfYnVmZmVyIHZpZXc7CiAKQEAgLTIzMDcsMTAgKzkyNSwxMyBAQAogICAgICAgICAvKiBpZiBub3QgY2FsbGFibGUsIGNoZWNrIGlmIGl0J3MgYSBsaXRlcmFsIHN0cmluZyAqLwogICAgICAgICBpbnQgbGl0ZXJhbDsKICAgICAgICAgdmlldy5idWYgPSBOVUxMOwotICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOwogICAgICAgICBiID0gY2hhcnNpemU7CiAgICAgICAgIGlmIChwdHIpIHsKLSAgICAgICAgICAgIGxpdGVyYWwgPSBzcmVfbGl0ZXJhbF90ZW1wbGF0ZShiLCBwdHIsIG4pOworICAgICAgICAgICAgaWYgKGNoYXJzaXplID09IDEpCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IG1lbWNocihwdHIsICdcXCcsIG4pID09IE5VTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IFB5VW5pY29kZV9GaW5kQ2hhcihwdGVtcGxhdGUsICdcXCcsIDAsIG4sIDEpID09IC0xOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGxpdGVyYWwgPSAwOwpAQCAtMjM1NCwxMiArOTc1LDcgQEAKIAogICAgICAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKIAotICAgICAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfQotCisgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTIzNzUsNyArOTkxLDggQEAKIAogICAgICAgICBpZiAoaSA8IGIpIHsKICAgICAgICAgICAgIC8qIGdldCBzZWdtZW50IGJlZm9yZSB0aGlzIG1hdGNoICovCi0gICAgICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGksIGIpOworICAgICAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICBzdHJpbmcsIGksIGIpOwogICAgICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQzMCw3ICsxMDQ3LDggQEAKIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoICovCiAgICAgaWYgKGkgPCBzdGF0ZS5lbmRwb3MpIHsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOworICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQ0NCwxMCArMTA2MiwyNSBAQAogICAgIFB5X0RFQ1JFRihmaWx0ZXIpOwogCiAgICAgLyogY29udmVydCBsaXN0IHRvIHNpbmdsZSBzdHJpbmcgKGFsc28gcmVtb3ZlcyBsaXN0KSAqLwotICAgIGl0ZW0gPSBqb2luX2xpc3QobGlzdCwgc3RyaW5nKTsKLQotICAgIGlmICghaXRlbSkKKyAgICBqb2luZXIgPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsIHN0cmluZywgMCwgMCk7CisgICAgaWYgKCFqb2luZXIpIHsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TGlzdF9HRVRfU0laRShsaXN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgaXRlbSA9IGpvaW5lcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzdGF0ZS5pc2J5dGVzKQorICAgICAgICAgICAgaXRlbSA9IF9QeUJ5dGVzX0pvaW4oam9pbmVyLCBsaXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbSA9IFB5VW5pY29kZV9Kb2luKGpvaW5lciwgbGlzdCk7CisgICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChzdWJuKQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTm4iLCBpdGVtLCBuKTsKQEAgLTI1NDEsMTAgKzExNzQsOTQgQEAKICNlbmRpZgogfQogCitzdGF0aWMgUHlPYmplY3QgKgorcGF0dGVybl9yZXByKFBhdHRlcm5PYmplY3QgKm9iaikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgaW50IHZhbHVlOworICAgIH0gZmxhZ19uYW1lc1tdID0geworICAgICAgICB7InJlLlRFTVBMQVRFIiwgU1JFX0ZMQUdfVEVNUExBVEV9LAorICAgICAgICB7InJlLklHTk9SRUNBU0UiLCBTUkVfRkxBR19JR05PUkVDQVNFfSwKKyAgICAgICAgeyJyZS5MT0NBTEUiLCBTUkVfRkxBR19MT0NBTEV9LAorICAgICAgICB7InJlLk1VTFRJTElORSIsIFNSRV9GTEFHX01VTFRJTElORX0sCisgICAgICAgIHsicmUuRE9UQUxMIiwgU1JFX0ZMQUdfRE9UQUxMfSwKKyAgICAgICAgeyJyZS5VTklDT0RFIiwgU1JFX0ZMQUdfVU5JQ09ERX0sCisgICAgICAgIHsicmUuVkVSQk9TRSIsIFNSRV9GTEFHX1ZFUkJPU0V9LAorICAgICAgICB7InJlLkRFQlVHIiwgU1JFX0ZMQUdfREVCVUd9LAorICAgICAgICB7InJlLkFTQ0lJIiwgU1JFX0ZMQUdfQVNDSUl9LAorICAgIH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZsYWdfaXRlbXM7CisgICAgaW50IGk7CisgICAgaW50IGZsYWdzID0gb2JqLT5mbGFnczsKKworICAgIC8qIE9taXQgcmUuVU5JQ09ERSBmb3IgdmFsaWQgc3RyaW5nIHBhdHRlcm5zLiAqLworICAgIGlmIChvYmotPmlzYnl0ZXMgPT0gMCAmJgorICAgICAgICAoZmxhZ3MgJiAoU1JFX0ZMQUdfTE9DQUxFfFNSRV9GTEFHX1VOSUNPREV8U1JFX0ZMQUdfQVNDSUkpKSA9PQorICAgICAgICAgU1JFX0ZMQUdfVU5JQ09ERSkKKyAgICAgICAgZmxhZ3MgJj0gflNSRV9GTEFHX1VOSUNPREU7CisKKyAgICBmbGFnX2l0ZW1zID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoIWZsYWdfaXRlbXMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IFB5X0FSUkFZX0xFTkdUSChmbGFnX25hbWVzKTsgaSsrKSB7CisgICAgICAgIGlmIChmbGFncyAmIGZsYWdfbmFtZXNbaV0udmFsdWUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZmxhZ19uYW1lc1tpXS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBmbGFncyAmPSB+ZmxhZ19uYW1lc1tpXS52YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiMHgleCIsIGZsYWdzKTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICB9CisKKyAgICBpZiAoUHlMaXN0X1NpemUoZmxhZ19pdGVtcykgPiAwKSB7CisgICAgICAgIFB5T2JqZWN0ICpmbGFnc19yZXN1bHQ7CisgICAgICAgIFB5T2JqZWN0ICpzZXAgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygifCIpOworICAgICAgICBpZiAoIXNlcCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgZmxhZ3NfcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4oc2VwLCBmbGFnX2l0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKHNlcCk7CisgICAgICAgIGlmICghZmxhZ3NfcmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIsICVTKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai0+cGF0dGVybiwgZmxhZ3NfcmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKGZsYWdzX3Jlc3VsdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIpIiwgb2JqLT5wYXR0ZXJuKTsKKyAgICB9CisKK2RvbmU6CisgICAgUHlfREVDUkVGKGZsYWdfaXRlbXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFB5RG9jX1NUUlZBUihwYXR0ZXJuX21hdGNoX2RvYywKICJtYXRjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgTWF0Y2hlcyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmciKTsKIAorUHlEb2NfU1RSVkFSKHBhdHRlcm5fZnVsbG1hdGNoX2RvYywKKyJmdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAorICAgIE1hdGNoZXMgYWdhaW5zdCBhbGwgb2YgdGhlIHN0cmluZyIpOworCiBQeURvY19TVFJWQVIocGF0dGVybl9zZWFyY2hfZG9jLAogInNlYXJjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZ1xuXApAQCAtMjU4MCw2ICsxMjk3LDggQEAKIHN0YXRpYyBQeU1ldGhvZERlZiBwYXR0ZXJuX21ldGhvZHNbXSA9IHsKICAgICB7Im1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX21hdGNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9tYXRjaF9kb2N9LAorICAgIHsiZnVsbG1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2Z1bGxtYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgIHBhdHRlcm5fZnVsbG1hdGNoX2RvY30sCiAgICAgeyJzZWFyY2giLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc2VhcmNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9zZWFyY2hfZG9jfSwKICAgICB7InN1YiIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zdWIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLApAQCAtMjU5MCwxMCArMTMwOSw4IEBACiAgICAgICAgIHBhdHRlcm5fc3BsaXRfZG9jfSwKICAgICB7ImZpbmRhbGwiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZmluZGFsbCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGFsbF9kb2N9LAotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMjAwMDAKICAgICB7ImZpbmRpdGVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRpdGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9maW5kaXRlcl9kb2N9LAotI2VuZGlmCiAgICAgeyJzY2FubmVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NjYW5uZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7Il9fY29weV9fIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2NvcHksIE1FVEhfTk9BUkdTfSwKICAgICB7Il9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9kZWVwY29weSwgTUVUSF9PfSwKQEAgLTI2MTgsNyArMTMzNSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpcGF0dGVybl9yZXByLCAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCkBAIC0yNjcxLDcgKzEzODgsNiBAQAogICAgIHNlbGYtPnBhdHRlcm4gPSBOVUxMOwogICAgIHNlbGYtPmdyb3VwaW5kZXggPSBOVUxMOwogICAgIHNlbGYtPmluZGV4Z3JvdXAgPSBOVUxMOwotICAgIHNlbGYtPnZpZXcuYnVmID0gTlVMTDsKIAogICAgIHNlbGYtPmNvZGVzaXplID0gbjsKIApAQCAtMjY5MiwxNiArMTQwOCwyMCBAQAogICAgIH0KIAogICAgIGlmIChwYXR0ZXJuID09IFB5X05vbmUpIHsKLSAgICAgICAgc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSA9IC0xOwotICAgICAgICBzZWxmLT5jaGFyc2l6ZSA9IC0xOworICAgICAgICBzZWxmLT5pc2J5dGVzID0gLTE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHBfbGVuZ3RoOwotICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5sb2dpY2FsX2NoYXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+Y2hhcnNpemUsICZzZWxmLT52aWV3KSkgeworICAgICAgICBpbnQgY2hhcnNpemU7CisgICAgICAgIFB5X2J1ZmZlciB2aWV3OworICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICghZ2V0c3RyaW5nKHBhdHRlcm4sICZwX2xlbmd0aCwgJnNlbGYtPmlzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2l6ZSwgJnZpZXcpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAodmlldy5idWYpCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9CiAKICAgICBQeV9JTkNSRUYocGF0dGVybik7CkBAIC0yNzg3LDcgKzE1MDcsNyBAQAogICAgICAgICBza2lwID0gKmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFZUUkFDRSgoIiVsdSAoc2tpcCB0byAlcClcbiIsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNraXAsIGNvZGUrc2tpcCkpOyAgICAgICAgXAotICAgICAgICBpZiAoc2tpcC1hZGogPiBlbmQtY29kZSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChza2lwLWFkaiA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKSAgICAgIFwKICAgICAgICAgICAgIEZBSUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb2RlKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTI4MTksOCArMTUzOSw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgb2Zmc2V0ID0gMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9TUkVfQ09ERV9CSVRTOyAvKiAyNTYtYml0IGJpdG1hcCAqLworICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjgyOCw3ICsxNTQ4LDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKICAgICAgICAgICAgIEdFVF9BUkc7IC8qIE51bWJlciBvZiBibG9ja3MgKi8KICAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9zaXplb2YoU1JFX0NPREUpOyAvKiAyNTYtYnl0ZSB0YWJsZSAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBlYWNoIGJ5dGUgcG9pbnRzIHRvIGEgdmFsaWQgYmxvY2sgKi8KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMjgzNiw4ICsxNTU2LDggQEAKICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgdGltZXMgYXJnICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSBhcmcgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOyAvKiAyNTYtYml0IGJpdG1hcCB0aW1lcyBhcmcgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5MDAsNyArMTYyMCw3IEBACiAgICAgICAgICAgICAgICBzcmVfbWF0Y2goKSBjb2RlIGlzIHJvYnVzdCBldmVuIGlmIHRoZXkgZG9uJ3QsIGFuZCB0aGUgd29yc3QKICAgICAgICAgICAgICAgIHlvdSBjYW4gZ2V0IGlzIG5vbnNlbnNpY2FsIG1hdGNoIHJlc3VsdHMuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+IDIqZ3JvdXBzKzEpIHsKKyAgICAgICAgICAgIGlmIChhcmcgPiAyICogKHNpemVfdClncm91cHMgKyAxKSB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYXJnPSVkLCBncm91cHM9JWRcbiIsIChpbnQpYXJnLCAoaW50KWdyb3VwcykpOwogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CkBAIC0yOTg4LDExICsxNzA4LDExIEBACiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9sZW4gPSBhcmc7CiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7CiAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY29tZXMgdGhlIHByZWZpeCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgY29kZSArPSBwcmVmaXhfbGVuOwogICAgICAgICAgICAgICAgICAgICAvKiBBbmQgaGVyZSBjb21lcyB0aGUgb3ZlcmxhcCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IG5ld2NvZGUtY29kZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiAoUHlfdWludHB0cl90KShuZXdjb2RlIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgICAgICAgICAvKiBFYWNoIG92ZXJsYXAgdmFsdWUgc2hvdWxkIGJlIDwgcHJlZml4X2xlbiAqLwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4X2xlbjsgaSsrKSB7CkBAIC0zMDgzLDcgKzE4MDMsNyBAQAogICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMwOTIsNyArMTgxMiw3IEBACiAgICAgICAgICAgICAgICAnZ3JvdXAnIGlzIGVpdGhlciBhbiBpbnRlZ2VyIGdyb3VwIG51bWJlciBvciBhIGdyb3VwIG5hbWUsCiAgICAgICAgICAgICAgICAndGhlbicgYW5kICdlbHNlJyBhcmUgc3ViLXJlZ2V4ZXMsIGFuZCAnZWxzZScgaXMgb3B0aW9uYWwuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+PSBncm91cHMpCisgICAgICAgICAgICBpZiAoYXJnID49IChzaXplX3QpZ3JvdXBzKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBHRVRfU0tJUF9BREooMSk7CiAgICAgICAgICAgICBjb2RlLS07IC8qIFRoZSBza2lwIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBhcmchICovCkBAIC0zMTIxLDcgKzE4NDEsNyBAQAogICAgICAgICAgICAgICAgdG8gYWxsb3cgYXJiaXRyYXJ5IGp1bXBzIGFueXdoZXJlIGluIHRoZSBjb2RlOyBzbyB3ZSBqdXN0IGxvb2sKICAgICAgICAgICAgICAgIGZvciBhIEpVTVAgb3Bjb2RlIHByZWNlZGluZyBvdXIgc2tpcCB0YXJnZXQuCiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCBlbmQtY29kZSAmJgorICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSAmJgogICAgICAgICAgICAgICAgIGNvZGVbc2tpcC0zXSA9PSBTUkVfT1BfSlVNUCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBWVFJBQ0UoKCJib3RoIHRoZW4gYW5kIGVsc2UgcGFydHMgcHJlc2VudFxuIikpOwpAQCAtMzIwNSw2ICsxOTI1LDEyIEBACiBzdGF0aWMgUHlPYmplY3QqCiBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChNYXRjaE9iamVjdCogc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGRlZikKIHsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICB2b2lkKiBwdHI7CisKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNlbGYtPmdyb3VwcykgewogICAgICAgICAvKiByYWlzZSBJbmRleEVycm9yIGlmIHdlIHdlcmUgZ2l2ZW4gYSBiYWQgZ3JvdXAgbnVtYmVyICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKQEAgLTMyMjIsOSArMTk0OCwxNCBAQAogICAgICAgICByZXR1cm4gZGVmOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKAotICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdCi0gICAgICAgICk7CisgICAgcHRyID0gZ2V0c3RyaW5nKHNlbGYtPnN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gZ2V0c2xpY2UoaXNieXRlcywgcHRyLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmluZywgc2VsZi0+bWFya1tpbmRleF0sIHNlbGYtPm1hcmtbaW5kZXgrMV0pOworICAgIGlmIChpc2J5dGVzICYmIHZpZXcuYnVmICE9IE5VTEwpCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0zNjQ0LDYgKzIzNzUsMjIgQEAKICAgICAgICAgcmV0dXJuIG1hdGNoX3JlZ3Moc2VsZik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittYXRjaF9yZXByKE1hdGNoT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmdyb3VwMCA9IG1hdGNoX2dldHNsaWNlX2J5X2luZGV4KHNlbGYsIDAsIFB5X05vbmUpOworICAgIGlmIChncm91cDAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPCVzIG9iamVjdDsgc3Bhbj0oJWQsICVkKSwgbWF0Y2g9JS41MFI+IiwKKyAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsCisgICAgICAgICAgICBzZWxmLT5tYXJrWzBdLCBzZWxmLT5tYXJrWzFdLCBncm91cDApOworICAgIFB5X0RFQ1JFRihncm91cDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIG1hdGNoX2dldHNldFtdID0gewogICAgIHsibGFzdGluZGV4IiwgKGdldHRlciltYXRjaF9sYXN0aW5kZXhfZ2V0LCAoc2V0dGVyKU5VTEx9LAogICAgIHsibGFzdGdyb3VwIiwgKGdldHRlciltYXRjaF9sYXN0Z3JvdXBfZ2V0LCAoc2V0dGVyKU5VTEx9LApAQCAtMzY3Miw3ICsyNDE5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpbWF0Y2hfcmVwciwgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMzY5Niw3ICsyNDQzLDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFNSRV9TVEFURSogc3RhdGUsIGludCBzdGF0dXMpCitwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBTUkVfU1RBVEUqIHN0YXRlLCBQeV9zc2l6ZV90IHN0YXR1cykKIHsKICAgICAvKiBjcmVhdGUgbWF0Y2ggb2JqZWN0IChmcm9tIHN0YXRlIG9iamVjdCkgKi8KIApAQCAtMzc3NSwxNyArMjUyMiwxMyBAQAogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBzdGF0ZV9yZXNldChzdGF0ZSk7CiAKICAgICBzdGF0ZS0+cHRyID0gc3RhdGUtPnN0YXJ0OwogCi0gICAgaWYgKHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX21hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM4MDYsMTcgKzI1NDksMTMgQEAKIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zOTY5LDcgKzI3MDgsNSBAQAogICAgIHJldHVybiBtOwogfQogCi0jZW5kaWYgLyogIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkgKi8KLQogLyogdmltOnRzPTQ6c3c9NDpldAogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbC5jIGIvTW9kdWxlcy9fc3NsLmMKaW5kZXggMzc0ZDkzMC4uYzI1NTM3NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsLmMKKysrIGIvTW9kdWxlcy9fc3NsLmMKQEAgLTQyLDYgKzQyLDcwIEBACiAKICNlbmRpZgogCisvKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLworI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgorCitzdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOworCisjaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2VuZGlmCisKKy8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKKworLyogU1NMIGVycm9yIG9iamVjdCAqLworc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKKworLyogRXJyb3IgbWFwcGluZ3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOworc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7CitzdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKKworc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKKyAgICBjb25zdCBjaGFyICptbmVtb25pYzsKKyAgICBpbnQgbGlicmFyeSwgcmVhc29uOworfTsKK3N0cnVjdCBweV9zc2xfbGlicmFyeV9jb2RlIHsKKyAgICBjb25zdCBjaGFyICpsaWJyYXJ5OworICAgIGludCBjb2RlOworfTsKKworLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCisjaW5jbHVkZSAiX3NzbF9kYXRhLmgiCisKKy8qIE9wZW5zc2wgY29tZXMgd2l0aCBUTFN2MS4xIGFuZCBUTFN2MS4yIGJldHdlZW4gMS4wLjBoIGFuZCAxLjAuMQorICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvbmV3cy9jaGFuZ2Vsb2cuaHRtbAorICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDAwTAorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1RMU3YxXzIgMAorI2VuZGlmCisKKy8qIFNOSSBzdXBwb3J0IChjbGllbnQtIGFuZCBzZXJ2ZXItc2lkZSkgYXBwZWFyZWQgaW4gT3BlblNTTCAxLjAuMC4KKyAqIFRoaXMgaW5jbHVkZXMgdGhlIFNTTF9zZXRfU1NMX0NUWCgpIGZ1bmN0aW9uLgorICovCisjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorIyBkZWZpbmUgSEFWRV9TTkkgMQorI2Vsc2UKKyMgZGVmaW5lIEhBVkVfU05JIDAKKyNlbmRpZgorCiBlbnVtIHB5X3NzbF9lcnJvciB7CiAgICAgLyogdGhlc2UgbWlycm9yIHNzbC5oICovCiAgICAgUFlfU1NMX0VSUk9SX05PTkUsCkBAIC03NSw1NSArMTM5LDE0IEBACiAjZW5kaWYKICAgICBQWV9TU0xfVkVSU0lPTl9TU0wzPTEsCiAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMjMsCisjaWYgSEFWRV9UTFN2MV8yCisgICAgUFlfU1NMX1ZFUlNJT05fVExTMSwKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzEsCisgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8yCisjZWxzZQogICAgIFBZX1NTTF9WRVJTSU9OX1RMUzEKLX07Ci0KLXN0cnVjdCBweV9zc2xfZXJyb3JfY29kZSB7Ci0gICAgY29uc3QgY2hhciAqbW5lbW9uaWM7Ci0gICAgaW50IGxpYnJhcnksIHJlYXNvbjsKLX07Ci0KLXN0cnVjdCBweV9zc2xfbGlicmFyeV9jb2RlIHsKLSAgICBjb25zdCBjaGFyICpsaWJyYXJ5OwotICAgIGludCBjb2RlOwotfTsKLQotLyogSW5jbHVkZSBzeW1ib2xzIGZyb20gX3NvY2tldCBtb2R1bGUgKi8KLSNpbmNsdWRlICJzb2NrZXRtb2R1bGUuaCIKLQotc3RhdGljIFB5U29ja2V0TW9kdWxlX0FQSU9iamVjdCBQeVNvY2tldE1vZHVsZTsKLQotI2lmIGRlZmluZWQoSEFWRV9QT0xMX0gpCi0jaW5jbHVkZSA8cG9sbC5oPgotI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCi0jaW5jbHVkZSA8c3lzL3BvbGwuaD4KICNlbmRpZgotCi0vKiBJbmNsdWRlIE9wZW5TU0wgaGVhZGVyIGZpbGVzICovCi0jaW5jbHVkZSAib3BlbnNzbC9yc2EuaCIKLSNpbmNsdWRlICJvcGVuc3NsL2NyeXB0by5oIgotI2luY2x1ZGUgIm9wZW5zc2wveDUwOS5oIgotI2luY2x1ZGUgIm9wZW5zc2wveDUwOXYzLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9wZW0uaCIKLSNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgotI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9yYW5kLmgiCi0KLS8qIEluY2x1ZGUgZ2VuZXJhdGVkIGRhdGEgKGVycm9yIGNvZGVzKSAqLwotI2luY2x1ZGUgIl9zc2xfZGF0YS5oIgotCi0vKiBTU0wgZXJyb3Igb2JqZWN0ICovCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMWmVyb1JldHVybkVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRSZWFkRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFdyaXRlRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMU3lzY2FsbEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVPRkVycm9yT2JqZWN0OwotCi0vKiBFcnJvciBtYXBwaW5ncyAqLwotc3RhdGljIFB5T2JqZWN0ICplcnJfY29kZXNfdG9fbmFtZXM7Ci1zdGF0aWMgUHlPYmplY3QgKmVycl9uYW1lc190b19jb2RlczsKLXN0YXRpYyBQeU9iamVjdCAqbGliX2NvZGVzX3RvX25hbWVzOworfTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAKQEAgLTE3NSw2ICsxOTgsMTEgQEAKICMgZGVmaW5lIE9QRU5TU0xfTk9fQ09NUAogI2VuZGlmCiAKKy8qIFg1MDlfVkVSSUZZX1BBUkFNIGdvdCBhZGRlZCB0byBPcGVuU1NMIGluIDAuOS44ICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA4MDBmTAorIyBkZWZpbmUgSEFWRV9PUEVOU1NMX1ZFUklGWV9QQVJBTQorI2VuZGlmCisKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTE4MywxNCArMjExLDE5IEBACiAgICAgY2hhciAqbnBuX3Byb3RvY29sczsKICAgICBpbnQgbnBuX3Byb3RvY29sc19sZW47CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBQeU9iamVjdCAqc2V0X2hvc3RuYW1lOworI2VuZGlmCiB9IFB5U1NMQ29udGV4dDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAqU29ja2V0OyAvKiB3ZWFrcmVmIHRvIHNvY2tldCBvbiB3aGljaCB3ZSdyZSBsYXllcmVkICovCiAgICAgU1NMICpzc2w7CisgICAgUHlTU0xDb250ZXh0ICpjdHg7IC8qIHdlYWtyZWYgdG8gU1NMIGNvbnRleHQgKi8KICAgICBYNTA5ICpwZWVyX2NlcnQ7Ci0gICAgaW50IHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIGhhbmRzaGFrZV9kb25lOwogICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGU7CiB9IFB5U1NMU29ja2V0OwogCkBAIC0zMTgsMTQgKzM1MSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfb2JqLCBlcnJzdHIsIGxpbmVubyk7CiAgICAgZWxzZQogICAgICAgICBtc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMgKF9zc2wuYzolZCkiLCBlcnJzdHIsIGxpbmVubyk7Ci0KICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGluaXRfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCJpTiIsIHNzbF9lcnJubywgbXNnKTsKKyAgICBpZiAoaW5pdF92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKICAgICBlcnJfdmFsdWUgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHR5cGUsIGluaXRfdmFsdWUpOwogICAgIFB5X0RFQ1JFRihpbml0X3ZhbHVlKTsKICAgICBpZiAoZXJyX3ZhbHVlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGlmIChyZWFzb25fb2JqID09IE5VTEwpCiAgICAgICAgIHJlYXNvbl9vYmogPSBQeV9Ob25lOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGVycl92YWx1ZSwgJlB5SWRfcmVhc29uLCByZWFzb25fb2JqKSkKQEAgLTQzOSwxMSArNDc2LDEzIEBACiAgKi8KIAogc3RhdGljIFB5U1NMU29ja2V0ICoKLW5ld1B5U1NMU29ja2V0KFNTTF9DVFggKmN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAorbmV3UHlTU0xTb2NrZXQoUHlTU0xDb250ZXh0ICpzc2xjdHgsIFB5U29ja2V0U29ja09iamVjdCAqc29jaywKICAgICAgICAgICAgICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGUsCiAgICAgICAgICAgICAgICBjaGFyICpzZXJ2ZXJfaG9zdG5hbWUpCiB7CiAgICAgUHlTU0xTb2NrZXQgKnNlbGY7CisgICAgU1NMX0NUWCAqY3R4ID0gc3NsY3R4LT5jdHg7CisgICAgbG9uZyBtb2RlOwogCiAgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVNTTFNvY2tldCwgJlB5U1NMU29ja2V0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCkBAIC00NTIsNyArNDkxLDEwIEBACiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gTlVMTDsKICAgICBzZWxmLT5zc2wgPSBOVUxMOwogICAgIHNlbGYtPlNvY2tldCA9IE5VTEw7CisgICAgc2VsZi0+Y3R4ID0gc3NsY3R4OwogICAgIHNlbGYtPnNodXRkb3duX3NlZW5femVybyA9IDA7CisgICAgc2VsZi0+aGFuZHNoYWtlX2RvbmUgPSAwOworICAgIFB5X0lOQ1JFRihzc2xjdHgpOwogCiAgICAgLyogTWFrZSBzdXJlIHRoZSBTU0wgZXJyb3Igc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KICAgICAodm9pZCkgRVJSX2dldF9zdGF0ZSgpOwpAQCAtNDYxLDEyICs1MDMsMTUgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+c3NsID0gU1NMX25ldyhjdHgpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCi0gICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIHNvY2stPnNvY2tfZmQpOworICAgIFNTTF9zZXRfYXBwX2RhdGEoc2VsZi0+c3NsLHNlbGYpOworICAgIFNTTF9zZXRfZmQoc2VsZi0+c3NsLCBQeV9TQUZFX0RPV05DQVNUKHNvY2stPnNvY2tfZmQsIFNPQ0tFVF9ULCBpbnQpKTsKKyAgICBtb2RlID0gU1NMX01PREVfQUNDRVBUX01PVklOR19XUklURV9CVUZGRVI7CiAjaWZkZWYgU1NMX01PREVfQVVUT19SRVRSWQotICAgIFNTTF9zZXRfbW9kZShzZWxmLT5zc2wsIFNTTF9NT0RFX0FVVE9fUkVUUlkpOworICAgIG1vZGUgfD0gU1NMX01PREVfQVVUT19SRVRSWTsKICNlbmRpZgorICAgIFNTTF9zZXRfbW9kZShzZWxmLT5zc2wsIG1vZGUpOwogCi0jaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmIEhBVkVfU05JCiAgICAgaWYgKHNlcnZlcl9ob3N0bmFtZSAhPSBOVUxMKQogICAgICAgICBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUoc2VsZi0+c3NsLCBzZXJ2ZXJfaG9zdG5hbWUpOwogI2VuZGlmCkBAIC00ODgsNiArNTMzLDEwIEBACiAKICAgICBzZWxmLT5zb2NrZXRfdHlwZSA9IHNvY2tldF90eXBlOwogICAgIHNlbGYtPlNvY2tldCA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIHNvY2ssIE5VTEwpOworICAgIGlmIChzZWxmLT5Tb2NrZXQgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtNTU0LDYgKzYwMyw3IEBACiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNlbGYtPnBlZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzZWxmLT5zc2wpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisgICAgc2VsZi0+aGFuZHNoYWtlX2RvbmUgPSAxOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtOTIwLDYgKzk3MCwxMjYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfYWlhX3VyaShYNTA5ICpjZXJ0aWZpY2F0ZSwgaW50IG5pZCkgeworICAgIFB5T2JqZWN0ICpsc3QgPSBOVUxMLCAqb3N0ciA9IE5VTEw7CisgICAgaW50IGksIHJlc3VsdDsKKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1MgKmluZm87CisKKyAgICBpbmZvID0gWDUwOV9nZXRfZXh0X2QyaShjZXJ0aWZpY2F0ZSwgTklEX2luZm9fYWNjZXNzLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoKGluZm8gPT0gTlVMTCkgfHwgKHNrX0FDQ0VTU19ERVNDUklQVElPTl9udW0oaW5mbykgPT0gMCkpIHsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorCisgICAgaWYgKChsc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShpbmZvKTsgaSsrKSB7CisgICAgICAgIEFDQ0VTU19ERVNDUklQVElPTiAqYWQgPSBza19BQ0NFU1NfREVTQ1JJUFRJT05fdmFsdWUoaW5mbywgaSk7CisgICAgICAgIEFTTjFfSUE1U1RSSU5HICp1cmk7CisKKyAgICAgICAgaWYgKChPQkpfb2JqMm5pZChhZC0+bWV0aG9kKSAhPSBuaWQpIHx8CisgICAgICAgICAgICAgICAgKGFkLT5sb2NhdGlvbi0+dHlwZSAhPSBHRU5fVVJJKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdXJpID0gYWQtPmxvY2F0aW9uLT5kLnVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgIG9zdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKil1cmktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLT5sZW5ndGgpOworICAgICAgICBpZiAob3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gUHlMaXN0X0FwcGVuZChsc3QsIG9zdHIpOworICAgICAgICBQeV9ERUNSRUYob3N0cik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICB9CisgICAgQVVUSE9SSVRZX0lORk9fQUNDRVNTX2ZyZWUoaW5mbyk7CisKKyAgICAvKiBjb252ZXJ0IHRvIHR1cGxlIG9yIE5vbmUgKi8KKyAgICBpZiAoUHlMaXN0X1NpemUobHN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeU9iamVjdCAqdHVwOworICAgICAgICB0dXAgPSBQeUxpc3RfQXNUdXBsZShsc3QpOworICAgICAgICBQeV9ERUNSRUYobHN0KTsKKyAgICAgICAgcmV0dXJuIHR1cDsKKyAgICB9CisKKyAgZmFpbDoKKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZShpbmZvKTsKKyAgICBQeV9YREVDUkVGKGxzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2V0X2NybF9kcChYNTA5ICpjZXJ0aWZpY2F0ZSkgeworICAgIFNUQUNLX09GKERJU1RfUE9JTlQpICpkcHM7CisgICAgaW50IGksIGosIHJlc3VsdDsKKyAgICBQeU9iamVjdCAqbHN0OworCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAwMDEwMDBMCisgICAgZHBzID0gWDUwOV9nZXRfZXh0X2QyaShjZXJ0aWZpY2F0ZSwgTklEX2NybF9kaXN0cmlidXRpb25fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisjZWxzZQorICAgIC8qIENhbGxzIHg1MDl2M19jYWNoZV9leHRlbnNpb25zIGFuZCBzZXRzIHVwIGNybGRwICovCisgICAgWDUwOV9jaGVja19jYShjZXJ0aWZpY2F0ZSk7CisgICAgZHBzID0gY2VydGlmaWNhdGUtPmNybGRwOworI2VuZGlmCisKKyAgICBpZiAoZHBzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorCisgICAgaWYgKChsc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAoaT0wOyBpIDwgc2tfRElTVF9QT0lOVF9udW0oZHBzKTsgaSsrKSB7CisgICAgICAgIERJU1RfUE9JTlQgKmRwOworICAgICAgICBTVEFDS19PRihHRU5FUkFMX05BTUUpICpnbnM7CisKKyAgICAgICAgZHAgPSBza19ESVNUX1BPSU5UX3ZhbHVlKGRwcywgaSk7CisgICAgICAgIGducyA9IGRwLT5kaXN0cG9pbnQtPm5hbWUuZnVsbG5hbWU7CisKKyAgICAgICAgZm9yIChqPTA7IGogPCBza19HRU5FUkFMX05BTUVfbnVtKGducyk7IGorKykgeworICAgICAgICAgICAgR0VORVJBTF9OQU1FICpnbjsKKyAgICAgICAgICAgIEFTTjFfSUE1U1RSSU5HICp1cmk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3VyaTsKKworICAgICAgICAgICAgZ24gPSBza19HRU5FUkFMX05BTUVfdmFsdWUoZ25zLCBqKTsKKyAgICAgICAgICAgIGlmIChnbi0+dHlwZSAhPSBHRU5fVVJJKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cmkgPSBnbi0+ZC51bmlmb3JtUmVzb3VyY2VJZGVudGlmaWVyOworICAgICAgICAgICAgb3VyaSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKXVyaS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLT5sZW5ndGgpOworICAgICAgICAgICAgaWYgKG91cmkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gUHlMaXN0X0FwcGVuZChsc3QsIG91cmkpOworICAgICAgICAgICAgUHlfREVDUkVGKG91cmkpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobHN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBjb252ZXJ0IHRvIHR1cGxlIG9yIE5vbmUgKi8KKyAgICBpZiAoUHlMaXN0X1NpemUobHN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeU9iamVjdCAqdHVwOworICAgICAgICB0dXAgPSBQeUxpc3RfQXNUdXBsZShsc3QpOworICAgICAgICBQeV9ERUNSRUYobHN0KTsKKyAgICAgICAgcmV0dXJuIHR1cDsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBfZGVjb2RlX2NlcnRpZmljYXRlKFg1MDkgKmNlcnRpZmljYXRlKSB7CiAKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKQEAgLTkyOSw5ICsxMDk5LDEwIEBACiAgICAgUHlPYmplY3QgKmlzc3VlcjsKICAgICBQeU9iamVjdCAqdmVyc2lvbjsKICAgICBQeU9iamVjdCAqc25fb2JqOworICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgQVNOMV9JTlRFR0VSICpzZXJpYWxOdW1iZXI7CiAgICAgY2hhciBidWZbMjA0OF07Ci0gICAgaW50IGxlbjsKKyAgICBpbnQgbGVuLCByZXN1bHQ7CiAgICAgQVNOMV9USU1FICpub3RCZWZvcmUsICpub3RBZnRlcjsKICAgICBQeU9iamVjdCAqcG5vdEJlZm9yZSwgKnBub3RBZnRlcjsKIApAQCAtMTAzNyw2ICsxMjA4LDQxIEBACiAgICAgICAgIFB5X0RFQ1JFRihwZWVyX2FsdF9uYW1lcyk7CiAgICAgfQogCisgICAgLyogQXV0aG9yaXR5IEluZm9ybWF0aW9uIEFjY2VzczogT0NTUCBVUklzICovCisgICAgb2JqID0gX2dldF9haWFfdXJpKGNlcnRpZmljYXRlLCBOSURfYWRfT0NTUCk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfSBlbHNlIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJPQ1NQIiwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICB9CisgICAgfQorCisgICAgb2JqID0gX2dldF9haWFfdXJpKGNlcnRpZmljYXRlLCBOSURfYWRfY2FfaXNzdWVycyk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfSBlbHNlIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJjYUlzc3VlcnMiLCBvYmopOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDRFAgKENSTCBkaXN0cmlidXRpb24gcG9pbnRzKSAqLworICAgIG9iaiA9IF9nZXRfY3JsX2RwKGNlcnRpZmljYXRlKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgImNybERpc3RyaWJ1dGlvblBvaW50cyIsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsMTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEJJT19mcmVlKGJpb2J1Zik7CiAgICAgcmV0dXJuIHJldHZhbDsKIApAQCAtMTA0OCw2ICsxMjU0LDI0IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitfY2VydGlmaWNhdGVfdG9fZGVyKFg1MDkgKmNlcnRpZmljYXRlKQoreworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzX2J1ZiA9IE5VTEw7CisgICAgaW50IGxlbjsKKyAgICBQeU9iamVjdCAqcmV0dmFsOworCisgICAgYnl0ZXNfYnVmID0gTlVMTDsKKyAgICBsZW4gPSBpMmRfWDUwOShjZXJ0aWZpY2F0ZSwgJmJ5dGVzX2J1Zik7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAvKiB0aGlzIGlzIGFjdHVhbGx5IGFuIGltbXV0YWJsZSBieXRlcyBzZXF1ZW5jZSAqLworICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikgYnl0ZXNfYnVmLCBsZW4pOworICAgIE9QRU5TU0xfZnJlZShieXRlc19idWYpOworICAgIHJldHVybiByZXR2YWw7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVNTTF90ZXN0X2RlY29kZV9jZXJ0aWZpY2F0ZSAoUHlPYmplY3QgKm1vZCwgUHlPYmplY3QgKmFyZ3MpIHsKQEAgLTEwOTMsMzQgKzEzMTcsMjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVNTTF9wZWVyY2VydChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgaW50IGxlbjsKICAgICBpbnQgdmVyaWZpY2F0aW9uOwogICAgIGludCBiaW5hcnlfbW9kZSA9IDA7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxwOnBlZXJfY2VydGlmaWNhdGUiLCAmYmluYXJ5X21vZGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmICghc2VsZi0+aGFuZHNoYWtlX2RvbmUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFuZHNoYWtlIG5vdCBkb25lIHlldCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgaWYgKCFzZWxmLT5wZWVyX2NlcnQpCiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCiAgICAgaWYgKGJpbmFyeV9tb2RlKSB7CiAgICAgICAgIC8qIHJldHVybiBjZXJ0IGluIERFUi1lbmNvZGVkIGZvcm1hdCAqLwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzX2J1ZiA9IE5VTEw7Ci0KLSAgICAgICAgYnl0ZXNfYnVmID0gTlVMTDsKLSAgICAgICAgbGVuID0gaTJkX1g1MDkoc2VsZi0+cGVlcl9jZXJ0LCAmYnl0ZXNfYnVmKTsKLSAgICAgICAgaWYgKGxlbiA8IDApIHsKLSAgICAgICAgICAgIFB5U1NMX1NldEVycm9yKHNlbGYsIGxlbiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIC8qIHRoaXMgaXMgYWN0dWFsbHkgYW4gaW1tdXRhYmxlIGJ5dGVzIHNlcXVlbmNlICovCi0gICAgICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgICAgICAgICAoKGNvbnN0IGNoYXIgKikgYnl0ZXNfYnVmLCBsZW4pOwotICAgICAgICBPUEVOU1NMX2ZyZWUoYnl0ZXNfYnVmKTsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLQorICAgICAgICByZXR1cm4gX2NlcnRpZmljYXRlX3RvX2RlcihzZWxmLT5wZWVyX2NlcnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZlcmlmaWNhdGlvbiA9IFNTTF9DVFhfZ2V0X3ZlcmlmeV9tb2RlKFNTTF9nZXRfU1NMX0NUWChzZWxmLT5zc2wpKTsKICAgICAgICAgaWYgKCh2ZXJpZmljYXRpb24gJiBTU0xfVkVSSUZZX1BFRVIpID09IDApCkBAIC0xMjIzLDYgKzE0MzYsNDMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgUHlTU0xDb250ZXh0ICpQeVNTTF9nZXRfY29udGV4dChQeVNTTFNvY2tldCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgeworICAgIFB5X0lOQ1JFRihzZWxmLT5jdHgpOworICAgIHJldHVybiBzZWxmLT5jdHg7Cit9CisKK3N0YXRpYyBpbnQgUHlTU0xfc2V0X2NvbnRleHQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgeworCisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayh2YWx1ZSwgJlB5U1NMQ29udGV4dF9UeXBlKSkgeworI2lmICFIQVZFX1NOSQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwgInNldHRpbmcgYSBzb2NrZXQncyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiY29udGV4dCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgT3BlblNTTCBsaWJyYXJ5Iik7CisgICAgICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmLT5jdHgpOworICAgICAgICBzZWxmLT5jdHggPSAoUHlTU0xDb250ZXh0ICopIHZhbHVlOworICAgICAgICBTU0xfc2V0X1NTTF9DVFgoc2VsZi0+c3NsLCBzZWxmLT5jdHgtPmN0eCk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiVGhlIHZhbHVlIG11c3QgYmUgYSBTU0xDb250ZXh0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX3NldF9jb250ZXh0X2RvYywKKyJfc2V0dGVyX2NvbnRleHQoY3R4KVxuXAorXAorVGhpcyBjaGFuZ2VzIHRoZSBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgU1NMU29ja2V0LiBUaGlzIGlzIHR5cGljYWxseVxuXAordXNlZCBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHNldCBieSB0aGUgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tcblwKK29uIHRoZSBTU0xDb250ZXh0IHRvIGNoYW5nZSB0aGUgY2VydGlmaWNhdGUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZVxuXAorU1NMU29ja2V0IGJlZm9yZSB0aGUgY3J5cHRvZ3JhcGhpYyBleGNoYW5nZSBoYW5kc2hha2UgbWVzc2FnZXNcbiIpOworCisKKwogc3RhdGljIHZvaWQgUHlTU0xfZGVhbGxvYyhQeVNTTFNvY2tldCAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+cGVlcl9jZXJ0KSAgICAgICAgLyogUG9zc2libGUgbm90IHRvIGhhdmUgb25lPyAqLwpAQCAtMTIzMCw2ICsxNDgwLDcgQEAKICAgICBpZiAoc2VsZi0+c3NsKQogICAgICAgICBTU0xfZnJlZShzZWxmLT5zc2wpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+U29ja2V0KTsKKyAgICBQeV9YREVDUkVGKHNlbGYtPmN0eCk7CiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC0xMjg4LDkgKzE1MzksMTEgQEAKICAgICAvKiBTZWUgaWYgdGhlIHNvY2tldCBpcyByZWFkeSAqLwogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBpZiAod3JpdGluZykKLSAgICAgICAgcmMgPSBzZWxlY3Qocy0+c29ja19mZCsxLCBOVUxMLCAmZmRzLCBOVUxMLCAmdHYpOworICAgICAgICByYyA9IHNlbGVjdChQeV9TQUZFX0RPV05DQVNUKHMtPnNvY2tfZmQrMSwgU09DS0VUX1QsIGludCksCisgICAgICAgICAgICAgICAgICAgIE5VTEwsICZmZHMsIE5VTEwsICZ0dik7CiAgICAgZWxzZQotICAgICAgICByYyA9IHNlbGVjdChzLT5zb2NrX2ZkKzEsICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisgICAgICAgIHJjID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUwogCiAjaWZkZWYgSEFWRV9QT0xMCkBAIC0xNjcwLDYgKzE5MjMsMTIgQEAKIAogI2VuZGlmIC8qIEhBVkVfT1BFTlNTTF9GSU5JU0hFRCAqLwogCitzdGF0aWMgUHlHZXRTZXREZWYgc3NsX2dldHNldGxpc3RbXSA9IHsKKyAgICB7ImNvbnRleHQiLCAoZ2V0dGVyKSBQeVNTTF9nZXRfY29udGV4dCwKKyAgICAgICAgICAgICAgICAoc2V0dGVyKSBQeVNTTF9zZXRfY29udGV4dCwgUHlTU0xfc2V0X2NvbnRleHRfZG9jfSwKKyAgICB7TlVMTH0sICAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKIHN0YXRpYyBQeU1ldGhvZERlZiBQeVNTTE1ldGhvZHNbXSA9IHsKICAgICB7ImRvX2hhbmRzaGFrZSIsIChQeUNGdW5jdGlvbilQeVNTTF9TU0xkb19oYW5kc2hha2UsIE1FVEhfTk9BUkdTfSwKICAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX1NTTHdyaXRlLCBNRVRIX1ZBUkFSR1MsCkBAIC0xNzI0LDYgKzE5ODMsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCiAgICAgUHlTU0xNZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLworICAgIHNzbF9nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KIH07CiAKIApAQCAtMTc0Nyw2ICsyMDA4LDEyIEBACiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzEpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFRMU3YxX21ldGhvZCgpKTsKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzFfMSkKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfMV9tZXRob2QoKSk7CisgICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9UTFMxXzIpCisgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFRMU3YxXzJfbWV0aG9kKCkpOworI2VuZGlmCiAgICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9TU0wzKQogICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhTU0x2M19tZXRob2QoKSk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgpAQCAtMTc4MCw2ICsyMDQ3LDkgQEAKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECiAgICAgc2VsZi0+bnBuX3Byb3RvY29scyA9IE5VTEw7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBzZWxmLT5zZXRfaG9zdG5hbWUgPSBOVUxMOworI2VuZGlmCiAgICAgLyogRGVmYXVsdHMgKi8KICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc2VsZi0+Y3R4LCBTU0xfVkVSSUZZX05PTkUsIE5VTEwpOwogICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc2VsZi0+Y3R4LApAQCAtMTc5Myw5ICsyMDYzLDI4IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKK3N0YXRpYyBpbnQKK2NvbnRleHRfdHJhdmVyc2UoUHlTU0xDb250ZXh0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBQeV9WSVNJVChzZWxmLT5zZXRfaG9zdG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnRleHRfY2xlYXIoUHlTU0xDb250ZXh0ICpzZWxmKQoreworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5X0NMRUFSKHNlbGYtPnNldF9ob3N0bmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQKIGNvbnRleHRfZGVhbGxvYyhQeVNTTENvbnRleHQgKnNlbGYpCiB7CisgICAgY29udGV4dF9jbGVhcihzZWxmKTsKICAgICBTU0xfQ1RYX2ZyZWUoc2VsZi0+Y3R4KTsKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECiAgICAgUHlNZW1fRnJlZShzZWxmLT5ucG5fcHJvdG9jb2xzKTsKQEAgLTE5NDYsNiArMjIzNSw0NiBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgSEFWRV9PUEVOU1NMX1ZFUklGWV9QQVJBTQorc3RhdGljIFB5T2JqZWN0ICoKK2dldF92ZXJpZnlfZmxhZ3MoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmbGFncyA9IFg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyhzdG9yZS0+cGFyYW0pOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF92ZXJpZnlfZmxhZ3MoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCB2b2lkICpjKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBmbGFncywgc2V0LCBjbGVhcjsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiayIsICZuZXdfZmxhZ3MpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgZmxhZ3MgPSBYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3Moc3RvcmUtPnBhcmFtKTsKKyAgICBjbGVhciA9IGZsYWdzICYgfm5ld19mbGFnczsKKyAgICBzZXQgPSB+ZmxhZ3MgJiBuZXdfZmxhZ3M7CisgICAgaWYgKGNsZWFyKSB7CisgICAgICAgIGlmICghWDUwOV9WRVJJRllfUEFSQU1fY2xlYXJfZmxhZ3Moc3RvcmUtPnBhcmFtLCBjbGVhcikpIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzZXQpIHsKKyAgICAgICAgaWYgKCFYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3Moc3RvcmUtPnBhcmFtLCBzZXQpKSB7CisgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X29wdGlvbnMoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQogewpAQCAtMjAxOSw4ICsyMzQ4LDggQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICBmcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKLSAgICBwd19pbmZvLT5wYXNzd29yZCA9IG1hbGxvYyhzaXplKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKKyAgICBwd19pbmZvLT5wYXNzd29yZCA9IFB5TWVtX01hbGxvYyhzaXplKTsKICAgICBpZiAoIXB3X2luZm8tPnBhc3N3b3JkKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gYWxsb2NhdGUgcGFzc3dvcmQgYnVmZmVyIik7CkBAIC0yMTY0LDcyICsyNDkzLDIxMiBAQAogICAgIH0KICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYihzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX2NiKTsKICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YShzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX3VzZXJkYXRhKTsKLSAgICBmcmVlKHB3X2luZm8ucGFzc3dvcmQpOworICAgIFB5TWVtX0ZyZWUocHdfaW5mby5wYXNzd29yZCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiAKIGVycm9yOgogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfY2IpOwogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfdXNlcmRhdGEpOwotICAgIGZyZWUocHdfaW5mby5wYXNzd29yZCk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLnBhc3N3b3JkKTsKICAgICBQeV9YREVDUkVGKGtleWZpbGVfYnl0ZXMpOwogICAgIFB5X1hERUNSRUYoY2VydGZpbGVfYnl0ZXMpOwogICAgIHJldHVybiBOVUxMOwogfQogCisvKiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIHJldHVybnMgLTEgb24gZXJyb3IKKyAqLworc3RhdGljIGludAorX2FkZF9jYV9jZXJ0cyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmRhdGEsIFB5X3NzaXplX3QgbGVuLAorICAgICAgICAgICAgICBpbnQgZmlsZXR5cGUpCit7CisgICAgQklPICpiaW9idWYgPSBOVUxMOworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIGludCByZXR2YWwgPSAwLCBlcnIsIGxvYWRlZCA9IDA7CisKKyAgICBhc3NlcnQoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX0FTTjEgfHwgZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSk7CisKKyAgICBpZiAobGVuIDw9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiRW1wdHkgY2VydGlmaWNhdGUgZGF0YSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmIChsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNlcnRpZmljYXRlIGRhdGEgaXMgdG9vIGxvbmcuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBiaW9idWYgPSBCSU9fbmV3X21lbV9idWYoZGF0YSwgKGludClsZW4pOworICAgIGlmIChiaW9idWYgPT0gTlVMTCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoIkNhbid0IGFsbG9jYXRlIGJ1ZmZlciIsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBhc3NlcnQoc3RvcmUgIT0gTlVMTCk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBYNTA5ICpjZXJ0ID0gTlVMTDsKKyAgICAgICAgaW50IHI7CisKKyAgICAgICAgaWYgKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9BU04xKSB7CisgICAgICAgICAgICBjZXJ0ID0gZDJpX1g1MDlfYmlvKGJpb2J1ZiwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDkoYmlvYnVmLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmN0eC0+ZGVmYXVsdF9wYXNzd2RfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+Y3R4LT5kZWZhdWx0X3Bhc3N3ZF9jYWxsYmFja191c2VyZGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNlcnQgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgciA9IFg1MDlfU1RPUkVfYWRkX2NlcnQoc3RvcmUsIGNlcnQpOworICAgICAgICBYNTA5X2ZyZWUoY2VydCk7CisgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworICAgICAgICAgICAgaWYgKChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfWDUwOSkgJiYKKyAgICAgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBYNTA5X1JfQ0VSVF9BTFJFQURZX0lOX0hBU0hfVEFCTEUpKSB7CisgICAgICAgICAgICAgICAgLyogY2VydCBhbHJlYWR5IGluIGhhc2ggdGFibGUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2FkZWQrKzsKKyAgICB9CisKKyAgICBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgaWYgKChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkgJiYKKyAgICAgICAgICAgIChsb2FkZWQgPiAwKSAmJgorICAgICAgICAgICAgKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9BU04xKSAmJgorICAgICAgICAgICAgKEVSUl9HRVRfUkVBU09OKGVycikgPT0gQVNOMV9SX0hFQURFUl9UT09fTE9ORykpIHsKKyAgICAgICAgLyogRU9GIEFTTjEgZmlsZSwgbm90IGFuIGVycm9yICovCisgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICByZXR2YWwgPSAwOworICAgIH0gZWxzZSBpZiAoKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9QRU0pICYmCisgICAgICAgICAgICAgICAgICAgKGxvYWRlZCA+IDApICYmCisgICAgICAgICAgICAgICAgICAgKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9QRU0pICYmCisgICAgICAgICAgICAgICAgICAgKEVSUl9HRVRfUkVBU09OKGVycikgPT0gUEVNX1JfTk9fU1RBUlRfTElORSkpIHsKKyAgICAgICAgLyogRU9GIFBFTSBmaWxlLCBub3QgYW4gZXJyb3IgKi8KKyAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgIHJldHZhbCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHZhbCA9IC0xOworICAgIH0KKworICAgIEJJT19mcmVlKGJpb2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZF92ZXJpZnlfbG9jYXRpb25zKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJjYWZpbGUiLCAiY2FwYXRoIiwgTlVMTH07Ci0gICAgUHlPYmplY3QgKmNhZmlsZSA9IE5VTEwsICpjYXBhdGggPSBOVUxMOworICAgIGNoYXIgKmt3bGlzdFtdID0geyJjYWZpbGUiLCAiY2FwYXRoIiwgImNhZGF0YSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpjYWZpbGUgPSBOVUxMLCAqY2FwYXRoID0gTlVMTCwgKmNhZGF0YSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNhZmlsZV9ieXRlcyA9IE5VTEwsICpjYXBhdGhfYnl0ZXMgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKmNhZmlsZV9idWYgPSBOVUxMLCAqY2FwYXRoX2J1ZiA9IE5VTEw7Ci0gICAgaW50IHI7CisgICAgaW50IHIgPSAwLCBvayA9IDE7CiAKICAgICBlcnJubyA9IDA7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKLSAgICAgICAgInxPTzpsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCBrd2xpc3QsCi0gICAgICAgICZjYWZpbGUsICZjYXBhdGgpKQorICAgICAgICAifE9PTzpsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCBrd2xpc3QsCisgICAgICAgICZjYWZpbGUsICZjYXBhdGgsICZjYWRhdGEpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmIChjYWZpbGUgPT0gUHlfTm9uZSkKICAgICAgICAgY2FmaWxlID0gTlVMTDsKICAgICBpZiAoY2FwYXRoID09IFB5X05vbmUpCiAgICAgICAgIGNhcGF0aCA9IE5VTEw7Ci0gICAgaWYgKGNhZmlsZSA9PSBOVUxMICYmIGNhcGF0aCA9PSBOVUxMKSB7CisgICAgaWYgKGNhZGF0YSA9PSBQeV9Ob25lKQorICAgICAgICBjYWRhdGEgPSBOVUxMOworCisgICAgaWYgKGNhZmlsZSA9PSBOVUxMICYmIGNhcGF0aCA9PSBOVUxMICYmIGNhZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlIGFuZCBjYXBhdGggY2Fubm90IGJlIGJvdGggb21pdHRlZCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUsIGNhcGF0aCBhbmQgY2FkYXRhIGNhbm5vdCBiZSBhbGwgb21pdHRlZCIpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoY2FmaWxlICYmICFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoY2FmaWxlLCAmY2FmaWxlX2J5dGVzKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhZmlsZSBzaG91bGQgYmUgYSB2YWxpZCBmaWxlc3lzdGVtIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjYXBhdGggJiYgIVB5VW5pY29kZV9GU0NvbnZlcnRlcihjYXBhdGgsICZjYXBhdGhfYnl0ZXMpKSB7Ci0gICAgICAgIFB5X1hERUNSRUYoY2FmaWxlX2J5dGVzKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYXBhdGggc2hvdWxkIGJlIGEgdmFsaWQgZmlsZXN5c3RlbSBwYXRoIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpZiAoY2FmaWxlKQotICAgICAgICBjYWZpbGVfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FmaWxlX2J5dGVzKTsKLSAgICBpZiAoY2FwYXRoKQotICAgICAgICBjYXBhdGhfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FwYXRoX2J5dGVzKTsKLSAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCi0gICAgciA9IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNlbGYtPmN0eCwgY2FmaWxlX2J1ZiwgY2FwYXRoX2J1Zik7Ci0gICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIC8qIHZhbGlkYXRhIGNhZGF0YSB0eXBlIGFuZCBsb2FkIGNhZGF0YSAqLworICAgIGlmIChjYWRhdGEpIHsKKyAgICAgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICAgICAgUHlPYmplY3QgKmNhZGF0YV9hc2NpaSA9IE5VTEw7CisKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihjYWRhdGEsICZidWYsIFB5QlVGX1NJTVBMRSkgPT0gMCkgeworICAgICAgICAgICAgaWYgKCFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoJmJ1ZiwgJ0MnKSB8fCBidWYubmRpbSA+IDEpIHsKKyAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWRhdGEgc2hvdWxkIGJlIGEgY29udGlndW91cyBidWZmZXIgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHNpbmdsZSBkaW1lbnNpb24iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgciA9IF9hZGRfY2FfY2VydHMoc2VsZiwgYnVmLmJ1ZiwgYnVmLmxlbiwgU1NMX0ZJTEVUWVBFX0FTTjEpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBjYWRhdGFfYXNjaWkgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZyhjYWRhdGEpOworICAgICAgICAgICAgaWYgKGNhZGF0YV9hc2NpaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhZGF0YSBzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgb3IgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcy1saWtlIG9iamVjdCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByID0gX2FkZF9jYV9jZXJ0cyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgUHlfREVDUkVGKGNhZGF0YV9hc2NpaSk7CisgICAgICAgICAgICBpZiAociA9PSAtMSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBsb2FkIGNhZmlsZSBvciBjYXBhdGggKi8KKyAgICBpZiAoY2FmaWxlIHx8IGNhcGF0aCkgeworICAgICAgICBpZiAoY2FmaWxlKQorICAgICAgICAgICAgY2FmaWxlX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhZmlsZV9ieXRlcyk7CisgICAgICAgIGlmIChjYXBhdGgpCisgICAgICAgICAgICBjYXBhdGhfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FwYXRoX2J5dGVzKTsKKyAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByID0gU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZi0+Y3R4LCBjYWZpbGVfYnVmLCBjYXBhdGhfYnVmKTsKKyAgICAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHIgIT0gMSkgeworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgaWYgKGVycm5vICE9IDApIHsKKyAgICAgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZ290byBlbmQ7CisKKyAgZXJyb3I6CisgICAgb2sgPSAwOworICBlbmQ6CiAgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOwogICAgIFB5X1hERUNSRUYoY2FwYXRoX2J5dGVzKTsKLSAgICBpZiAociAhPSAxKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSAwKSB7Ci0gICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICB9CisgICAgaWYgKG9rKSB7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIyMzgsNyArMjcwNyw3IEBACiAgICAgRklMRSAqZjsKICAgICBESCAqZGg7CiAKLSAgICBmID0gX1B5X2ZvcGVuKGZpbGVwYXRoLCAicmIiKTsKKyAgICBmID0gX1B5X2ZvcGVuX29iaihmaWxlcGF0aCwgInJiIik7CiAgICAgaWYgKGYgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgZmlsZXBhdGgpOwpAQCAtMjI4Niw3ICsyNzU1LDcgQEAKICAgICAgICAgICAgICZzb2NrLCAmc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAiaWRuYSIsICZob3N0bmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNpZm5kZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmICFIQVZFX1NOSQogICAgICAgICBQeU1lbV9GcmVlKGhvc3RuYW1lKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzZXJ2ZXJfaG9zdG5hbWUgaXMgbm90IHN1cHBvcnRlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKQEAgLTIyOTQsNyArMjc2Myw3IEBACiAjZW5kaWYKICAgICB9CiAKLSAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZi0+Y3R4LCBzb2NrLCBzZXJ2ZXJfc2lkZSwKKyAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZiwgc29jaywgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lKTsKICAgICBpZiAoaG9zdG5hbWUgIT0gTlVMTCkKICAgICAgICAgUHlNZW1fRnJlZShob3N0bmFtZSk7CkBAIC0yMzc5LDkgKzI4NDgsMjU3IEBACiB9CiAjZW5kaWYKIAorI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorc3RhdGljIGludAorX3NlcnZlcm5hbWVfY2FsbGJhY2soU1NMICpzLCBpbnQgKmFsLCB2b2lkICphcmdzKQoreworICAgIGludCByZXQ7CisgICAgUHlTU0xDb250ZXh0ICpzc2xfY3R4ID0gKFB5U1NMQ29udGV4dCAqKSBhcmdzOworICAgIFB5U1NMU29ja2V0ICpzc2w7CisgICAgUHlPYmplY3QgKnNlcnZlcm5hbWVfbzsKKyAgICBQeU9iamVjdCAqc2VydmVybmFtZV9pZG5hOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgLyogVGhlIGhpZ2gtbGV2ZWwgc3NsLlNTTFNvY2tldCBvYmplY3QgKi8KKyAgICBQeU9iamVjdCAqc3NsX3NvY2tldDsKKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJuYW1lID0gU1NMX2dldF9zZXJ2ZXJuYW1lKHMsIFRMU0VYVF9OQU1FVFlQRV9ob3N0X25hbWUpOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisKKyAgICBpZiAoc3NsX2N0eC0+c2V0X2hvc3RuYW1lID09IE5VTEwpIHsKKyAgICAgICAgLyogcmVtb3ZlIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgdGhlIGNhbGwgYmFjayB3aGlsZSBpZiByZW1vdmluZyB0aGUKKyAgICAgICAgICogY2FsbGJhY2sgaXMgaW4gcHJvZ3Jlc3MgKi8KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgfQorCisgICAgc3NsID0gU1NMX2dldF9hcHBfZGF0YShzKTsKKyAgICBhc3NlcnQoUHlTU0xTb2NrZXRfQ2hlY2soc3NsKSk7CisgICAgc3NsX3NvY2tldCA9IFB5V2Vha3JlZl9HZXRPYmplY3Qoc3NsLT5Tb2NrZXQpOworICAgIFB5X0lOQ1JFRihzc2xfc29ja2V0KTsKKyAgICBpZiAoc3NsX3NvY2tldCA9PSBQeV9Ob25lKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNlcnZlcm5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lLCBzc2xfY3R4LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlcnZlcm5hbWVfbyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhzZXJ2ZXJuYW1lKTsKKyAgICAgICAgaWYgKHNlcnZlcm5hbWVfbyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoKFB5T2JqZWN0ICopIHNzbF9jdHgpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VydmVybmFtZV9vLCAiaWRuYSIsIE5VTEwpOworICAgICAgICBpZiAoc2VydmVybmFtZV9pZG5hID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZXJ2ZXJuYW1lX28pOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfbyk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX28pOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEsIHNzbF9jdHgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9pZG5hKTsKKyAgICB9CisgICAgUHlfREVDUkVGKHNzbF9zb2NrZXQpOworCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzc2xfY3R4LT5zZXRfaG9zdG5hbWUpOworICAgICAgICAqYWwgPSBTU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CisgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICAqYWwgPSAoaW50KSBQeUxvbmdfQXNMb25nKHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShyZXN1bHQpOworICAgICAgICAgICAgICAgICphbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihzc2xfc29ja2V0KTsKKyAgICAqYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKKworUHlEb2NfU1RSVkFSKFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvYywKKyJzZXRfc2VydmVybmFtZV9jYWxsYmFjayhtZXRob2QpXG5cCitcblwKK1RoaXMgc2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHNlcnZlciBuYW1lIGlzIHByb3ZpZGVkIGJ5XG5cCit0aGUgU1NML1RMUyBjbGllbnQgaW4gdGhlIFNOSSBleHRlbnNpb24uXG5cCitcblwKK0lmIHRoZSBhcmd1bWVudCBpcyBOb25lIHRoZW4gdGhlIGNhbGxiYWNrIGlzIGRpc2FibGVkLiBUaGUgbWV0aG9kIGlzIGNhbGxlZFxuXAord2l0aCB0aGUgU1NMU29ja2V0LCB0aGUgc2VydmVyIG5hbWUgYXMgYSBzdHJpbmcsIGFuZCB0aGUgU1NMQ29udGV4dCBvYmplY3QuXG5cCitTZWUgUkZDIDYwNjYgZm9yIGRldGFpbHMgb2YgdGhlIFNOSSBleHRlbnNpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzZXRfc2VydmVybmFtZV9jYWxsYmFjayhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorICAgIFB5T2JqZWN0ICpjYjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZjYikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyAgICBpZiAoY2IgPT0gUHlfTm9uZSkgeworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGNiKSkgeworICAgICAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBOVUxMKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNhbGxhYmxlIG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKGNiKTsKKyAgICAgICAgc2VsZi0+c2V0X2hvc3RuYW1lID0gY2I7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgX3NlcnZlcm5hbWVfY2FsbGJhY2spOworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9hcmcoc2VsZi0+Y3R4LCBzZWxmKTsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7CisjZWxzZQorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVGhlIFRMUyBleHRlbnNpb24gc2VydmVybmFtZSBjYWxsYmFjaywgIgorICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIKKyAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBpbiB0aGUgY3VycmVudCBPcGVuU1NMIGxpYnJhcnkuIik7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9zdGF0c19kb2MsCisiY2VydF9zdG9yZV9zdGF0cygpIC0+IHsnY3JsJzogaW50LCAneDUwOV9jYSc6IGludCwgJ3g1MDknOiBpbnR9XG5cCitcblwKK1JldHVybnMgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLiBYLjUwOSBjZXJ0aWZpY2F0ZXMgd2l0aCBhXG5cCitDQSBleHRlbnNpb24gYW5kIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgaW5zaWRlIHRoZSBjb250ZXh0J3MgY2VydFxuXAorc3RvcmUuXG5cCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjZXJ0X3N0b3JlX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZikKK3sKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICBYNTA5X09CSkVDVCAqb2JqOworICAgIGludCB4NTA5ID0gMCwgY3JsID0gMCwgcGtleSA9IDAsIGNhID0gMCwgaTsKKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0oc3RvcmUtPm9ianMpOyBpKyspIHsKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBzd2l0Y2ggKG9iai0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX1g1MDk6CisgICAgICAgICAgICAgICAgeDUwOSsrOworICAgICAgICAgICAgICAgIGlmIChYNTA5X2NoZWNrX2NhKG9iai0+ZGF0YS54NTA5KSkgeworICAgICAgICAgICAgICAgICAgICBjYSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9DUkw6CisgICAgICAgICAgICAgICAgY3JsKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfUEtFWToKKyAgICAgICAgICAgICAgICBwa2V5Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qIElnbm9yZSBYNTA5X0xVX0ZBSUwsIFg1MDlfTFVfUkVUUlksIFg1MDlfTFVfUEtFWS4KKyAgICAgICAgICAgICAgICAgKiBBcyBmYXIgYXMgSSBjYW4gdGVsbCB0aGV5IGFyZSBpbnRlcm5hbCBzdGF0ZXMgYW5kIG5ldmVyCisgICAgICAgICAgICAgICAgICogc3RvcmVkIGluIGEgY2VydCBzdG9yZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJ7c2lzaXNpfSIsICJ4NTA5IiwgeDUwOSwgImNybCIsIGNybCwKKyAgICAgICAgIng1MDlfY2EiLCBjYSk7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfY2FfY2VydHNfZG9jLAorImdldF9jYV9jZXJ0cyhiaW5hcnlfZm9ybT1GYWxzZSkgLT4gbGlzdCBvZiBsb2FkZWQgY2VydGlmaWNhdGVcblwKK1xuXAorUmV0dXJucyBhIGxpc3Qgb2YgZGljdHMgd2l0aCBpbmZvcm1hdGlvbiBvZiBsb2FkZWQgQ0EgY2VydHMuIElmIHRoZVxuXAorb3B0aW9uYWwgYXJndW1lbnQgaXMgVHJ1ZSwgcmV0dXJucyBhIERFUi1lbmNvZGVkIGNvcHkgb2YgdGhlIENBIGNlcnRpZmljYXRlLlxuXAorTk9URTogQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcblwKK2JlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X2NhX2NlcnRzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJiaW5hcnlfZm9ybSIsIE5VTEx9OworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIFB5T2JqZWN0ICpjaSA9IE5VTEwsICpybGlzdCA9IE5VTEw7CisgICAgaW50IGk7CisgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8cDpnZXRfY2FfY2VydHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJpbmFyeV9tb2RlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKHJsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKHN0b3JlLT5vYmpzKTsgaSsrKSB7CisgICAgICAgIFg1MDlfT0JKRUNUICpvYmo7CisgICAgICAgIFg1MDkgKmNlcnQ7CisKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBpZiAob2JqLT50eXBlICE9IFg1MDlfTFVfWDUwOSkgeworICAgICAgICAgICAgLyogbm90IGEgeDUwOSBjZXJ0ICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBDQSBmb3IgYW55IHB1cnBvc2UgKi8KKyAgICAgICAgY2VydCA9IG9iai0+ZGF0YS54NTA5OworICAgICAgICBpZiAoIVg1MDlfY2hlY2tfY2EoY2VydCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiaW5hcnlfbW9kZSkgeworICAgICAgICAgICAgY2kgPSBfY2VydGlmaWNhdGVfdG9fZGVyKGNlcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2kgPSBfZGVjb2RlX2NlcnRpZmljYXRlKGNlcnQpOworICAgICAgICB9CisgICAgICAgIGlmIChjaSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJsaXN0LCBjaSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoY2kpOworICAgIH0KKyAgICByZXR1cm4gcmxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihjaSk7CisgICAgUHlfWERFQ1JFRihybGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIGNvbnRleHRfZ2V0c2V0bGlzdFtdID0gewogICAgIHsib3B0aW9ucyIsIChnZXR0ZXIpIGdldF9vcHRpb25zLAogICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF9vcHRpb25zLCBOVUxMfSwKKyNpZmRlZiBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCisgICAgeyJ2ZXJpZnlfZmxhZ3MiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X3ZlcmlmeV9mbGFncywgTlVMTH0sCisjZW5kaWYKICAgICB7InZlcmlmeV9tb2RlIiwgKGdldHRlcikgZ2V0X3ZlcmlmeV9tb2RlLAogICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfdmVyaWZ5X21vZGUsIE5VTEx9LAogICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMjQwOCw2ICszMTI1LDEyIEBACiAgICAgeyJzZXRfZWNkaF9jdXJ2ZSIsIChQeUNGdW5jdGlvbikgc2V0X2VjZGhfY3VydmUsCiAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfTywgTlVMTH0sCiAjZW5kaWYKKyAgICB7InNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfc2VydmVybmFtZV9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLCBQeVNTTF9zZXRfc2VydmVybmFtZV9jYWxsYmFja19kb2N9LAorICAgIHsiY2VydF9zdG9yZV9zdGF0cyIsIChQeUNGdW5jdGlvbikgY2VydF9zdG9yZV9zdGF0cywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIFB5U1NMX2dldF9zdGF0c19kb2N9LAorICAgIHsiZ2V0X2NhX2NlcnRzIiwgKFB5Q0Z1bmN0aW9uKSBnZXRfY2FfY2VydHMsCisgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2dldF9jYV9jZXJ0c19kb2N9LAogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI0MzEsMTAgKzMxNTQsMTAgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KKyAgICAodHJhdmVyc2Vwcm9jKSBjb250ZXh0X3RyYXZlcnNlLCAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCisgICAgKGlucXVpcnkpIGNvbnRleHRfY2xlYXIsICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCkBAIC0yNTg0LDcgKzMzMDcsMzg0IEBACiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX1JBTkQgKi8KIAogCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2RvYywKKyJnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSAtPiB0dXBsZVxuXAorXG5cCitSZXR1cm4gc2VhcmNoIHBhdGhzIGFuZCBlbnZpcm9ubWVudCB2YXJzIHRoYXQgYXJlIHVzZWQgYnkgU1NMQ29udGV4dCdzXG5cCitzZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSB0byBsb2FkIGRlZmF1bHQgQ0FzLiBUaGUgdmFsdWVzIGFyZVxuXAorJ2NlcnRfZmlsZV9lbnYnLCAnY2VydF9maWxlJywgJ2NlcnRfZGlyX2VudicsICdjZXJ0X2RpcicuIik7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKm9maWxlX2VudiA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9maWxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2Rpcl9lbnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZGlyID0gTlVMTDsKKworI2RlZmluZSBjb252ZXJ0KGluZm8sIHRhcmdldCkgeyBcCisgICAgICAgIGNvbnN0IGNoYXIgKnRtcCA9IChpbmZvKTsgXAorICAgICAgICB0YXJnZXQgPSBOVUxMOyBcCisgICAgICAgIGlmICghdG1wKSB7IFB5X0lOQ1JFRihQeV9Ob25lKTsgdGFyZ2V0ID0gUHlfTm9uZTsgfSBcCisgICAgICAgIGVsc2UgaWYgKCh0YXJnZXQgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHRtcCkpID09IE5VTEwpIHsgXAorICAgICAgICAgICAgdGFyZ2V0ID0gUHlCeXRlc19Gcm9tU3RyaW5nKHRtcCk7IH0gXAorICAgICAgICBpZiAoIXRhcmdldCkgZ290byBlcnJvcjsgXAorICAgIH0gd2hpbGUoMCkKKworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52KCksIG9maWxlX2Vudik7CisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZSgpLCBvZmlsZSk7CisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudigpLCBvZGlyX2Vudik7CisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyKCksIG9kaXIpOworI3VuZGVmIGNvbnZlcnQKKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOTk5OIiwgb2ZpbGVfZW52LCBvZmlsZSwgb2Rpcl9lbnYsIG9kaXIpOworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYob2ZpbGVfZW52KTsKKyAgICBQeV9YREVDUkVGKG9maWxlKTsKKyAgICBQeV9YREVDUkVGKG9kaXJfZW52KTsKKyAgICBQeV9YREVDUkVGKG9kaXIpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QqCithc24xb2JqMnB5KEFTTjFfT0JKRUNUICpvYmopCit7CisgICAgaW50IG5pZDsKKyAgICBjb25zdCBjaGFyICpsbiwgKnNuOworICAgIGNoYXIgYnVmWzEwMF07CisgICAgaW50IGJ1ZmxlbjsKKworICAgIG5pZCA9IE9CSl9vYmoybmlkKG9iaik7CisgICAgaWYgKG5pZCA9PSBOSURfdW5kZWYpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJVbmtub3duIG9iamVjdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc24gPSBPQkpfbmlkMnNuKG5pZCk7CisgICAgbG4gPSBPQkpfbmlkMmxuKG5pZCk7CisgICAgYnVmbGVuID0gT0JKX29iajJ0eHQoYnVmLCBzaXplb2YoYnVmKSwgb2JqLCAxKTsKKyAgICBpZiAoYnVmbGVuIDwgMCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChidWZsZW4pIHsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlzc3MjIiwgbmlkLCBzbiwgbG4sIGJ1ZiwgYnVmbGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaXNzTyIsIG5pZCwgc24sIGxuLCBQeV9Ob25lKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF90eHQyb2JqX2RvYywKKyJ0eHQyb2JqKHR4dCwgbmFtZT1GYWxzZSkgLT4gKG5pZCwgc2hvcnRuYW1lLCBsb25nbmFtZSwgb2lkKVxuXAorXG5cCitMb29rdXAgTklELCBzaG9ydCBuYW1lLCBsb25nIG5hbWUgYW5kIE9JRCBvZiBhbiBBU04xX09CSkVDVC4gQnkgZGVmYXVsdFxuXAorb2JqZWN0cyBhcmUgbG9va2VkIHVwIGJ5IE9JRC4gV2l0aCBuYW1lPVRydWUgc2hvcnQgYW5kIGxvbmcgbmFtZSBhcmUgYWxzb1xuXAorbWF0Y2hlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorUHlTU0xfdHh0Mm9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJ0eHQiLCAibmFtZSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIGNoYXIgKnR4dDsKKyAgICBpbnQgbmFtZSA9IDA7CisgICAgQVNOMV9PQkpFQ1QgKm9iajsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzfHA6dHh0Mm9iaiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmdHh0LCAmbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG9iaiA9IE9CSl90eHQyb2JqKHR4dCwgbmFtZSA/IDAgOiAxKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIG9iamVjdCAnJS4xMDBzJyIsIHR4dCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBhc24xb2JqMnB5KG9iaik7CisgICAgQVNOMV9PQkpFQ1RfZnJlZShvYmopOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9uaWQyb2JqX2RvYywKKyJuaWQyb2JqKG5pZCkgLT4gKG5pZCwgc2hvcnRuYW1lLCBsb25nbmFtZSwgb2lkKVxuXAorXG5cCitMb29rdXAgTklELCBzaG9ydCBuYW1lLCBsb25nIG5hbWUgYW5kIE9JRCBvZiBhbiBBU04xX09CSkVDVCBieSBOSUQuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK1B5U1NMX25pZDJvYmooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIGludCBuaWQ7CisgICAgQVNOMV9PQkpFQ1QgKm9iajsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpuaWQyb2JqIiwgJm5pZCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChuaWQgPCBOSURfdW5kZWYpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJOSUQgbXVzdCBiZSBwb3NpdGl2ZS4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG9iaiA9IE9CSl9uaWQyb2JqKG5pZCk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5rbm93biBOSUQgJWkiLCBuaWQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gYXNuMW9iajJweShvYmopOworICAgIEFTTjFfT0JKRUNUX2ZyZWUob2JqKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWZkZWYgX01TQ19WRVIKKworc3RhdGljIFB5T2JqZWN0KgorY2VydEVuY29kaW5nVHlwZShEV09SRCBlbmNvZGluZ1R5cGUpCit7CisgICAgc3RhdGljIFB5T2JqZWN0ICp4NTA5X2FzbiA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpwa2NzXzdfYXNuID0gTlVMTDsKKworICAgIGlmICh4NTA5X2FzbiA9PSBOVUxMKSB7CisgICAgICAgIHg1MDlfYXNuID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIng1MDlfYXNuIik7CisgICAgICAgIGlmICh4NTA5X2FzbiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChwa2NzXzdfYXNuID09IE5VTEwpIHsKKyAgICAgICAgcGtjc183X2FzbiA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJwa2NzXzdfYXNuIik7CisgICAgICAgIGlmIChwa2NzXzdfYXNuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3dpdGNoKGVuY29kaW5nVHlwZSkgeworICAgIGNhc2UgWDUwOV9BU05fRU5DT0RJTkc6CisgICAgICAgIFB5X0lOQ1JFRih4NTA5X2Fzbik7CisgICAgICAgIHJldHVybiB4NTA5X2FzbjsKKyAgICBjYXNlIFBLQ1NfN19BU05fRU5DT0RJTkc6CisgICAgICAgIFB5X0lOQ1JFRihwa2NzXzdfYXNuKTsKKyAgICAgICAgcmV0dXJuIHBrY3NfN19hc247CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhlbmNvZGluZ1R5cGUpOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0KgorcGFyc2VLZXlVc2FnZShQQ0NFUlRfQ09OVEVYVCBwQ2VydEN0eCwgRFdPUkQgZmxhZ3MpCit7CisgICAgQ0VSVF9FTkhLRVlfVVNBR0UgKnVzYWdlOworICAgIERXT1JEIHNpemUsIGVycm9yLCBpOworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisKKyAgICBpZiAoIUNlcnRHZXRFbmhhbmNlZEtleVVzYWdlKHBDZXJ0Q3R4LCBmbGFncywgTlVMTCwgJnNpemUpKSB7CisgICAgICAgIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBDUllQVF9FX05PVF9GT1VORCkgeworICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm9yKTsKKyAgICB9CisKKyAgICB1c2FnZSA9IChDRVJUX0VOSEtFWV9VU0FHRSopUHlNZW1fTWFsbG9jKHNpemUpOworICAgIGlmICh1c2FnZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIH0KKworICAgIC8qIE5vdyBnZXQgdGhlIGFjdHVhbCBlbmhhbmNlZCB1c2FnZSBwcm9wZXJ0eSAqLworICAgIGlmICghQ2VydEdldEVuaGFuY2VkS2V5VXNhZ2UocENlcnRDdHgsIGZsYWdzLCB1c2FnZSwgJnNpemUpKSB7CisgICAgICAgIFB5TWVtX0ZyZWUodXNhZ2UpOworICAgICAgICBlcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgPT0gQ1JZUFRfRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnJvcik7CisgICAgfQorICAgIHJldHZhbCA9IFB5U2V0X05ldyhOVUxMKTsKKyAgICBpZiAocmV0dmFsID09IE5VTEwpIHsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHVzYWdlLT5jVXNhZ2VJZGVudGlmaWVyOyArK2kpIHsKKyAgICAgICAgaWYgKHVzYWdlLT5yZ3BzelVzYWdlSWRlbnRpZmllcltpXSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm9pZDsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBvaWQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh1c2FnZS0+cmdwc3pVc2FnZUlkZW50aWZpZXJbaV0pOworICAgICAgICAgICAgaWYgKG9pZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHJldHZhbCwgb2lkKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvaWQpOworICAgICAgICAgICAgaWYgKGVyciA9PSAtMSkgeworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgZXJyb3I6CisgICAgUHlNZW1fRnJlZSh1c2FnZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2VudW1fY2VydGlmaWNhdGVzX2RvYywKKyJlbnVtX2NlcnRpZmljYXRlcyhzdG9yZV9uYW1lKSAtPiBbXVxuXAorXG5cCitSZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMgZnJvbSBXaW5kb3dzJyBjZXJ0IHN0b3JlLiBzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2ZcblwKKydDQScsICdST09UJyBvciAnTVknLiBUaGUgc3lzdGVtIG1heSBwcm92aWRlIG1vcmUgY2VydCBzdG9yYWdlcywgdG9vLlxuXAorVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywgZW5jb2RpbmdfdHlwZSwgdHJ1c3QpIHR1cGxlcy4gVGhlXG5cCitlbmNvZGluZ190eXBlIGZsYWcgY2FuIGJlIGludGVycHJldGVkIHdpdGggWDUwOV9BU05fRU5DT0RJTkcgb3JcblwKK1BLQ1NfN19BU05fRU5DT0RJTkcuIFRoZSB0cnVzdCBzZXR0aW5nIGlzIGVpdGhlciBhIHNldCBvZiBPSURzIG9yIHRoZVxuXAorYm9vbGVhbiBUcnVlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsic3RvcmVfbmFtZSIsIE5VTEx9OworICAgIGNoYXIgKnN0b3JlX25hbWU7CisgICAgSENFUlRTVE9SRSBoU3RvcmUgPSBOVUxMOworICAgIFBDQ0VSVF9DT05URVhUIHBDZXJ0Q3R4ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqa2V5dXNhZ2UgPSBOVUxMLCAqY2VydCA9IE5VTEwsICplbmMgPSBOVUxMLCAqdHVwID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzfHM6ZW51bV9jZXJ0aWZpY2F0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnN0b3JlX25hbWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaFN0b3JlID0gQ2VydE9wZW5TeXN0ZW1TdG9yZSgoSENSWVBUUFJPVilOVUxMLCBzdG9yZV9uYW1lKTsKKyAgICBpZiAoaFN0b3JlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorCisgICAgd2hpbGUgKHBDZXJ0Q3R4ID0gQ2VydEVudW1DZXJ0aWZpY2F0ZXNJblN0b3JlKGhTdG9yZSwgcENlcnRDdHgpKSB7CisgICAgICAgIGNlcnQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyKilwQ2VydEN0eC0+cGJDZXJ0RW5jb2RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENlcnRDdHgtPmNiQ2VydEVuY29kZWQpOworICAgICAgICBpZiAoIWNlcnQpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGVuYyA9IGNlcnRFbmNvZGluZ1R5cGUocENlcnRDdHgtPmR3Q2VydEVuY29kaW5nVHlwZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBrZXl1c2FnZSA9IHBhcnNlS2V5VXNhZ2UocENlcnRDdHgsIENFUlRfRklORF9QUk9QX09OTFlfRU5IS0VZX1VTQUdFX0ZMQUcpOworICAgICAgICBpZiAoa2V5dXNhZ2UgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGtleXVzYWdlKTsKKyAgICAgICAgICAgIGtleXVzYWdlID0gcGFyc2VLZXlVc2FnZShwQ2VydEN0eCwgQ0VSVF9GSU5EX0VYVF9PTkxZX0VOSEtFWV9VU0FHRV9GTEFHKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5dXNhZ2UgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgodHVwID0gUHlUdXBsZV9OZXcoMykpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMCwgY2VydCk7CisgICAgICAgIGNlcnQgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMSwgZW5jKTsKKyAgICAgICAgZW5jID0gTlVMTDsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDIsIGtleXVzYWdlKTsKKyAgICAgICAga2V5dXNhZ2UgPSBOVUxMOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIHR1cCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIodHVwKTsKKyAgICB9CisgICAgaWYgKHBDZXJ0Q3R4KSB7CisgICAgICAgIC8qIGxvb3AgZW5kZWQgd2l0aCBhbiBlcnJvciwgbmVlZCB0byBjbGVhbiB1cCBjb250ZXh0IG1hbnVhbGx5ICovCisgICAgICAgIENlcnRGcmVlQ2VydGlmaWNhdGVDb250ZXh0KHBDZXJ0Q3R4KTsKKyAgICB9CisKKyAgICAvKiBJbiBlcnJvciBjYXNlcyBjZXJ0LCBlbmMgYW5kIHR1cCBtYXkgbm90IGJlIE5VTEwgKi8KKyAgICBQeV9YREVDUkVGKGNlcnQpOworICAgIFB5X1hERUNSRUYoZW5jKTsKKyAgICBQeV9YREVDUkVGKGtleXVzYWdlKTsKKyAgICBQeV9YREVDUkVGKHR1cCk7CisKKyAgICBpZiAoIUNlcnRDbG9zZVN0b3JlKGhTdG9yZSwgMCkpIHsKKyAgICAgICAgLyogVGhpcyBlcnJvciBjYXNlIG1pZ2h0IHNoYWRvdyBhbm90aGVyIGV4Y2VwdGlvbi4qLworICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9lbnVtX2NybHNfZG9jLAorImVudW1fY3JscyhzdG9yZV9uYW1lKSAtPiBbXVxuXAorXG5cCitSZXRyaWV2ZSBDUkxzIGZyb20gV2luZG93cycgY2VydCBzdG9yZS4gc3RvcmVfbmFtZSBtYXkgYmUgb25lIG9mXG5cCisnQ0EnLCAnUk9PVCcgb3IgJ01ZJy4gVGhlIHN5c3RlbSBtYXkgcHJvdmlkZSBtb3JlIGNlcnQgc3RvcmFnZXMsIHRvby5cblwKK1RoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoYnl0ZXMsIGVuY29kaW5nX3R5cGUpIHR1cGxlcy4gVGhlXG5cCitlbmNvZGluZ190eXBlIGZsYWcgY2FuIGJlIGludGVycHJldGVkIHdpdGggWDUwOV9BU05fRU5DT0RJTkcgb3JcblwKK1BLQ1NfN19BU05fRU5DT0RJTkcuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9lbnVtX2NybHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsic3RvcmVfbmFtZSIsIE5VTEx9OworICAgIGNoYXIgKnN0b3JlX25hbWU7CisgICAgSENFUlRTVE9SRSBoU3RvcmUgPSBOVUxMOworICAgIFBDQ1JMX0NPTlRFWFQgcENybEN0eCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNybCA9IE5VTEwsICplbmMgPSBOVUxMLCAqdHVwID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzfHM6ZW51bV9jcmxzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzdG9yZV9uYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGhTdG9yZSA9IENlcnRPcGVuU3lzdGVtU3RvcmUoKEhDUllQVFBST1YpTlVMTCwgc3RvcmVfbmFtZSk7CisgICAgaWYgKGhTdG9yZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKworICAgIHdoaWxlIChwQ3JsQ3R4ID0gQ2VydEVudW1DUkxzSW5TdG9yZShoU3RvcmUsIHBDcmxDdHgpKSB7CisgICAgICAgIGNybCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIqKXBDcmxDdHgtPnBiQ3JsRW5jb2RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENybEN0eC0+Y2JDcmxFbmNvZGVkKTsKKyAgICAgICAgaWYgKCFjcmwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGVuYyA9IGNlcnRFbmNvZGluZ1R5cGUocENybEN0eC0+ZHdDZXJ0RW5jb2RpbmdUeXBlKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgodHVwID0gUHlUdXBsZV9OZXcoMikpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMCwgY3JsKTsKKyAgICAgICAgY3JsID0gTlVMTDsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDEsIGVuYyk7CisgICAgICAgIGVuYyA9IE5VTEw7CisKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocmVzdWx0LCB0dXApIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHR1cCk7CisgICAgfQorICAgIGlmIChwQ3JsQ3R4KSB7CisgICAgICAgIC8qIGxvb3AgZW5kZWQgd2l0aCBhbiBlcnJvciwgbmVlZCB0byBjbGVhbiB1cCBjb250ZXh0IG1hbnVhbGx5ICovCisgICAgICAgIENlcnRGcmVlQ1JMQ29udGV4dChwQ3JsQ3R4KTsKKyAgICB9CisKKyAgICAvKiBJbiBlcnJvciBjYXNlcyBjZXJ0LCBlbmMgYW5kIHR1cCBtYXkgbm90IGJlIE5VTEwgKi8KKyAgICBQeV9YREVDUkVGKGNybCk7CisgICAgUHlfWERFQ1JFRihlbmMpOworICAgIFB5X1hERUNSRUYodHVwKTsKKworICAgIGlmICghQ2VydENsb3NlU3RvcmUoaFN0b3JlLCAwKSkgeworICAgICAgICAvKiBUaGlzIGVycm9yIGNhc2UgbWlnaHQgc2hhZG93IGFub3RoZXIgZXhjZXB0aW9uLiovCisgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmIC8qIF9NU0NfVkVSICovCiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLiAqLwogCkBAIC0yNjAzLDYgKzM3MDMsMTggQEAKICAgICB7IlJBTkRfc3RhdHVzIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlTU0xfUkFORF9zdGF0dXMsIE1FVEhfTk9BUkdTLAogICAgICBQeVNTTF9SQU5EX3N0YXR1c19kb2N9LAogI2VuZGlmCisgICAgeyJnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzLAorICAgICBNRVRIX05PQVJHUywgUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2RvY30sCisjaWZkZWYgX01TQ19WRVIKKyAgICB7ImVudW1fY2VydGlmaWNhdGVzIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX2VudW1fY2VydGlmaWNhdGVzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9lbnVtX2NlcnRpZmljYXRlc19kb2N9LAorICAgIHsiZW51bV9jcmxzIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX2VudW1fY3JscywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZW51bV9jcmxzX2RvY30sCisjZW5kaWYKKyAgICB7InR4dDJvYmoiLCAoUHlDRnVuY3Rpb24pUHlTU0xfdHh0Mm9iaiwKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfdHh0Mm9ial9kb2N9LAorICAgIHsibmlkMm9iaiIsIChQeUNGdW5jdGlvbilQeVNTTF9uaWQyb2JqLAorICAgICBNRVRIX1ZBUkFSR1MsIFB5U1NMX25pZDJvYmpfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCkBAIC0yNjY0LDcgKzM3NzYsNyBAQAogICAgIGlmIChfc3NsX2xvY2tzID09IE5VTEwpIHsKICAgICAgICAgX3NzbF9sb2Nrc19jb3VudCA9IENSWVBUT19udW1fbG9ja3MoKTsKICAgICAgICAgX3NzbF9sb2NrcyA9IChQeVRocmVhZF90eXBlX2xvY2sgKikKLSAgICAgICAgICAgIG1hbGxvYyhzaXplb2YoUHlUaHJlYWRfdHlwZV9sb2NrKSAqIF9zc2xfbG9ja3NfY291bnQpOworICAgICAgICAgICAgUHlNZW1fTWFsbG9jKHNpemVvZihQeVRocmVhZF90eXBlX2xvY2spICogX3NzbF9sb2Nrc19jb3VudCk7CiAgICAgICAgIGlmIChfc3NsX2xvY2tzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgbWVtc2V0KF9zc2xfbG9ja3MsIDAsCkBAIC0yNjc2LDcgKzM3ODgsNyBAQAogICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7ICBqIDwgaTsgIGorKykgewogICAgICAgICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soX3NzbF9sb2Nrc1tqXSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZyZWUoX3NzbF9sb2Nrcyk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShfc3NsX2xvY2tzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjgzMCw2ICszOTQyLDY2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX0NFUlRfT1BUSU9OQUwpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDRVJUX1JFUVVJUkVEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfQ0VSVF9SRVFVSVJFRCk7CisgICAgLyogQ1JMIHZlcmlmaWNhdGlvbiBmb3IgdmVyaWZpY2F0aW9uX2ZsYWdzICovCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9ERUZBVUxUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX0NSTF9DSEVDS19MRUFGIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19DUkxfQ0hFQ0spOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfQ1JMX0NIRUNLX0NIQUlOIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19DUkxfQ0hFQ0t8WDUwOV9WX0ZMQUdfQ1JMX0NIRUNLX0FMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9YNTA5X1NUUklDVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfWDUwOV9TVFJJQ1QpOworCisgICAgLyogQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gc3NsLmggKi8KKyAgICAvKiBub3RlIFJFU0VSVkVEIGNvbnN0YW50cyBubyBsb25nZXIgaW50ZW5kZWQgZm9yIHVzZSBoYXZlIGJlZW4gcmVtb3ZlZCAqLworICAgIC8qIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTYgKi8KKworI2RlZmluZSBBRERfQURfQ09OU1RBTlQocykgXAorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBTEVSVF9ERVNDUklQVElPTl8iI3MsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQURfIyNzKQorCisgICAgQUREX0FEX0NPTlNUQU5UKENMT1NFX05PVElGWSk7CisgICAgQUREX0FEX0NPTlNUQU5UKFVORVhQRUNURURfTUVTU0FHRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9SRUNPUkRfTUFDKTsKKyAgICBBRERfQURfQ09OU1RBTlQoUkVDT1JEX09WRVJGTE9XKTsKKyAgICBBRERfQURfQ09OU1RBTlQoREVDT01QUkVTU0lPTl9GQUlMVVJFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSEFORFNIQUtFX0ZBSUxVUkUpOworICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEUpOworICAgIEFERF9BRF9DT05TVEFOVChVTlNVUFBPUlRFRF9DRVJUSUZJQ0FURSk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX1JFVk9LRUQpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9FWFBJUkVEKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfVU5LTk9XTik7CisgICAgQUREX0FEX0NPTlNUQU5UKElMTEVHQUxfUEFSQU1FVEVSKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5LTk9XTl9DQSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEFDQ0VTU19ERU5JRUQpOworICAgIEFERF9BRF9DT05TVEFOVChERUNPREVfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChERUNSWVBUX0VSUk9SKTsKKyAgICBBRERfQURfQ09OU1RBTlQoUFJPVE9DT0xfVkVSU0lPTik7CisgICAgQUREX0FEX0NPTlNUQU5UKElOU1VGRklDSUVOVF9TRUNVUklUWSk7CisgICAgQUREX0FEX0NPTlNUQU5UKElOVEVSTkFMX0VSUk9SKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVVNFUl9DQU5DRUxMRUQpOworICAgIEFERF9BRF9DT05TVEFOVChOT19SRU5FR09USUFUSU9OKTsKKyAgICAvKiBOb3QgYWxsIGNvbnN0YW50cyBhcmUgaW4gb2xkIE9wZW5TU0wgdmVyc2lvbnMgKi8KKyNpZmRlZiBTU0xfQURfVU5TVVBQT1JURURfRVhURU5TSU9OCisgICAgQUREX0FEX0NPTlNUQU5UKFVOU1VQUE9SVEVEX0VYVEVOU0lPTik7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX1VOT0JUQUlOQUJMRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfVU5SRUNPR05JWkVEX05BTUUKKyAgICBBRERfQURfQ09OU1RBTlQoVU5SRUNPR05JWkVEX05BTUUpOworI2VuZGlmCisjaWZkZWYgU1NMX0FEX0JBRF9DRVJUSUZJQ0FURV9TVEFUVVNfUkVTUE9OU0UKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUpOworI2VuZGlmCisjaWZkZWYgU1NMX0FEX1VOS05PV05fUFNLX0lERU5USVRZCisgICAgQUREX0FEX0NPTlNUQU5UKFVOS05PV05fUFNLX0lERU5USVRZKTsKKyNlbmRpZgorCisjdW5kZWYgQUREX0FEX0NPTlNUQU5UCiAKICAgICAvKiBwcm90b2NvbCB2ZXJzaW9ucyAqLwogI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKQEAgLTI4NDIsNiArNDAxNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIzKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzEpOworI2lmIEhBVkVfVExTdjFfMgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MV8xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzEpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MV8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzIpOworI2VuZGlmCiAKICAgICAvKiBwcm90b2NvbCBvcHRpb25zICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX0FMTCIsCkBAIC0yODQ5LDYgKzQwMjcsMTAgQEAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fU1NMdjIiLCBTU0xfT1BfTk9fU1NMdjIpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19TU0x2MyIsIFNTTF9PUF9OT19TU0x2Myk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxIiwgU1NMX09QX05PX1RMU3YxKTsKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjFfMSIsIFNTTF9PUF9OT19UTFN2MV8xKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjFfMiIsIFNTTF9PUF9OT19UTFN2MV8yKTsKKyNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9TSU5HTEVfREhfVVNFIiwgU1NMX09QX1NJTkdMRV9ESF9VU0UpOwpAQCAtMjg2MCw3ICs0MDQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfT1BfTk9fQ09NUFJFU1NJT04pOwogI2VuZGlmCiAKLSNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgSEFWRV9TTkkKICAgICByID0gUHlfVHJ1ZTsKICNlbHNlCiAgICAgciA9IFB5X0ZhbHNlOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3RhdC5jIGIvTW9kdWxlcy9fc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDFmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zdGF0LmMKQEAgLTAsMCArMSw1NjMgQEAKKy8qIHN0YXQuaCBpbnRlcmZhY2UKKyAqCisgKiBUaGUgbW9kdWxlIGRlZmluZXMgYWxsIFNfSUYqLCBTX0kqLCBVRl8qLCBTRl8qIGFuZCBTVF8qIGNvbnN0YW50cyB0bworICogc2Vuc2libGUgZGVmYXVsdCB2YWx1ZXMgYXMgd2VsbCBhcyBkZWZpbmVzIFNfSVMqKCkgbWFjcm9zIGluIG9yZGVyIHRvIGtlZXAKKyAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIHN0YXQucHkgbW9kdWxlLgorICoKKyAqIE5ldyBjb25zdGFudHMgYW5kIG1hY3JvcyBzdWNoIGFzIFNfSUZET09SIC8gU19JU0RPT1IoKSBhcmUgYWx3YXlzIGRlZmluZWQKKyAqIGFzIGludCAwLgorICoKKyAqIE5PVEU6IFBPU0lYIG9ubHkgZGVmaW5lcyB0aGUgdmFsdWVzIG9mIHRoZSBTX0kqIHBlcm1pc3Npb24gYml0cy4KKyAqCisgKi8KKworI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19UWVBFU19IICovCisKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX1NUQVRfSCAqLworCisjaWZkZWYgTVNfV0lORE9XUwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7CisjZW5kaWYKKworLyogRnJvbSBQeXRob24ncyBzdGF0LnB5ICovCisjaWZuZGVmIFNfSU1PREUKKyMgIGRlZmluZSBTX0lNT0RFIDA3Nzc3CisjZW5kaWYKKworLyogU19JRlhYWCBjb25zdGFudHMgKGZpbGUgdHlwZXMpCisgKgorICogT25seSB0aGUgbmFtZXMgYXJlIGRlZmluZWQgYnkgUE9TSVggYnV0IG5vdCB0aGVpciB2YWx1ZS4gQWxsIGNvbW1vbiBmaWxlCisgKiB0eXBlcyBzZWVtcyB0byBoYXZlIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgb24gYWxsIHBsYXRmb3JtcywgdGhvdWdoLgorICoKKyAqIHB5cG9ydC5oIGd1YXJhbnRlZXMgU19JRk1ULCBTX0lGRElSLCBTX0lGQ0hSLCBTX0lGUkVHIGFuZCBTX0lGTE5LCisgKi8KKworI2lmbmRlZiBTX0lGQkxLCisjICBkZWZpbmUgU19JRkJMSyAwMDYwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGSUZPCisjICBkZWZpbmUgU19JRklGTyAwMDEwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGU09DSworIyAgZGVmaW5lIFNfSUZTT0NLIDAxNDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZET09SCisjICBkZWZpbmUgU19JRkRPT1IgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRlBPUlQKKyMgIGRlZmluZSBTX0lGUE9SVCAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGV0hUCisjICBkZWZpbmUgU19JRldIVCAwCisjZW5kaWYKKworCisvKiBTX0lTWFhYKCkKKyAqIHB5cG9ydC5oIGRlZmluZXMgU19JU0RJUigpLCBTX0lTUkVHKCkgYW5kIFNfSVNDSFIoKQorICovCisKKyNpZm5kZWYgU19JU0JMSworIyAgZGVmaW5lIFNfSVNCTEsobW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjZW5kaWYKKworI2lmbmRlZiBTX0lTRklGTworIyAgZGVmaW5lIFNfSVNGSUZPKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGSUZPKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU0xOSworIyAgZGVmaW5lIFNfSVNMTksobW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZMTkspCisjZW5kaWYKKworI2lmbmRlZiBTX0lTU09DSworIyAgZGVmaW5lIFNfSVNTT0NLKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGU09DSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNET09SCisjICBkZWZpbmUgU19JU0RPT1IobW9kZSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1BPUlQKKyMgIGRlZmluZSBTX0lTUE9SVChtb2RlKSAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lTV0hUCisjICBkZWZpbmUgU19JU1dIVChtb2RlKSAwCisjZW5kaWYKKworCisvKiBTX0kqIGZpbGUgcGVybWlzc2lvbgorICoKKyAqIFRoZSBwZXJtaXNzaW9uIGJpdCB2YWx1ZSBhcmUgZGVmaW5lZCBieSBQT1NJWCBzdGFuZGFyZHMuCisgKi8KKyNpZm5kZWYgU19JU1VJRAorIyAgZGVmaW5lIFNfSVNVSUQgMDQwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNHSUQKKyMgIGRlZmluZSBTX0lTR0lEIDAyMDAwCisjZW5kaWYKKworLyogd2hhdCBpcyBTX0VORk1UPyAqLworI2lmbmRlZiBTX0VORk1UCisjICBkZWZpbmUgU19FTkZNVCBTX0lTR0lECisjZW5kaWYKKworI2lmbmRlZiBTX0lTVlRYCisjICBkZWZpbmUgU19JU1ZUWCAwMTAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUkVBRAorIyAgZGVmaW5lIFNfSVJFQUQgMDA0MDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdSSVRFCisjICBkZWZpbmUgU19JV1JJVEUgMDAyMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUVYRUMKKyMgIGRlZmluZSBTX0lFWEVDIDAwMTAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSV1hVCisjICBkZWZpbmUgU19JUldYVSAwMDcwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUlVTUgorIyAgZGVmaW5lIFNfSVJVU1IgMDA0MDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdVU1IKKyMgIGRlZmluZSBTX0lXVVNSIDAwMjAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lYVVNSCisjICBkZWZpbmUgU19JWFVTUiAwMDEwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYRworIyAgZGVmaW5lIFNfSVJXWEcgMDAwNzAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJHUlAKKyMgIGRlZmluZSBTX0lSR1JQIDAwMDQwCisjZW5kaWYKKworI2lmbmRlZiBTX0lXR1JQCisjICBkZWZpbmUgU19JV0dSUCAwMDAyMAorI2VuZGlmCisKKyNpZm5kZWYgU19JWEdSUAorIyAgZGVmaW5lIFNfSVhHUlAgMDAwMTAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWE8KKyMgIGRlZmluZSBTX0lSV1hPIDAwMDA3CisjZW5kaWYKKworI2lmbmRlZiBTX0lST1RICisjICBkZWZpbmUgU19JUk9USCAwMDAwNAorI2VuZGlmCisKKyNpZm5kZWYgU19JV09USAorIyAgZGVmaW5lIFNfSVdPVEggMDAwMDIKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgIGRlZmluZSBTX0lYT1RIIDAwMDAxCisjZW5kaWYKKworCisvKiBOYW1lcyBmb3IgZmlsZSBmbGFncyAqLworI2lmbmRlZiBVRl9OT0RVTVAKKyMgIGRlZmluZSBVRl9OT0RVTVAgMHgwMDAwMDAwMQorI2VuZGlmCisKKyNpZm5kZWYgVUZfSU1NVVRBQkxFCisjICBkZWZpbmUgVUZfSU1NVVRBQkxFIDB4MDAwMDAwMDIKKyNlbmRpZgorCisjaWZuZGVmIFVGX0FQUEVORAorIyAgZGVmaW5lIFVGX0FQUEVORCAweDAwMDAwMDA0CisjZW5kaWYKKworI2lmbmRlZiBVRl9PUEFRVUUKKyMgIGRlZmluZSBVRl9PUEFRVUUgMHgwMDAwMDAwOAorI2VuZGlmCisKKyNpZm5kZWYgVUZfTk9VTkxJTksKKyMgIGRlZmluZSBVRl9OT1VOTElOSyAweDAwMDAwMDEwCisjZW5kaWYKKworI2lmbmRlZiBVRl9DT01QUkVTU0VECisjICBkZWZpbmUgVUZfQ09NUFJFU1NFRCAweDAwMDAwMDIwCisjZW5kaWYKKworI2lmbmRlZiBVRl9ISURERU4KKyMgIGRlZmluZSBVRl9ISURERU4gMHgwMDAwODAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfQVJDSElWRUQKKyMgIGRlZmluZSBTRl9BUkNISVZFRCAweDAwMDEwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9JTU1VVEFCTEUKKyMgIGRlZmluZSBTRl9JTU1VVEFCTEUgMHgwMDAyMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfQVBQRU5ECisjICBkZWZpbmUgU0ZfQVBQRU5EIDB4MDAwNDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX05PVU5MSU5LCisjICBkZWZpbmUgU0ZfTk9VTkxJTksgMHgwMDEwMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfU05BUFNIT1QKKyMgIGRlZmluZSBTRl9TTkFQU0hPVCAweDAwMjAwMDAwCisjZW5kaWYKKworc3RhdGljIG1vZGVfdAorX1B5TG9uZ19Bc01vZGVfdChQeU9iamVjdCAqb3ApCit7CisgICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKyAgICBtb2RlX3QgbW9kZTsKKworICAgIHZhbHVlID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9wKTsKKyAgICBpZiAoKHZhbHVlID09ICh1bnNpZ25lZCBsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gKG1vZGVfdCktMTsKKworICAgIG1vZGUgPSAobW9kZV90KXZhbHVlOworICAgIGlmICgodW5zaWduZWQgbG9uZyltb2RlICE9IHZhbHVlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibW9kZSBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIChtb2RlX3QpLTE7CisgICAgfQorICAgIHJldHVybiBtb2RlOworfQorCisKKyNkZWZpbmUgc3RhdF9TX0lTRlVOQyhpc2Z1bmMsIGRvYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0XyAjI2lzZnVuYyAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpICAgICAgICAgICBcCisgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpc2Z1bmMobW9kZSkpOyAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUHlEb2NfU1RSVkFSKHN0YXRfICMjIGlzZnVuYyAjIyBfZG9jLCBkb2MpCisKK3N0YXRfU19JU0ZVTkMoU19JU0RJUiwKKyAgICAiU19JU0RJUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgZGlyZWN0b3J5LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNDSFIsCisgICAgIlNfSVNDSFIobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNCTEssCisgICAgIlNfSVNCTEsobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1JFRywKKyAgICAiU19JU1JFRyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgcmVndWxhciBmaWxlLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNGSUZPLAorICAgICJTX0lTRklGTyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgRklGTyAobmFtZWQgcGlwZSkuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0xOSywKKyAgICAiU19JU0xOSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgc3ltYm9saWMgbGluay4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTU09DSywKKyAgICAiU19JU1NPQ0sobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHNvY2tldC4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTRE9PUiwKKyAgICAiU19JU0RPT1IobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGRvb3IuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1BPUlQsCisgICAgIlNfSVNQT1JUKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYW4gZXZlbnQgcG9ydC4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTV0hULAorICAgICJTX0lTV0hUKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSB3aGl0ZW91dC4iKTsKKworCitQeURvY19TVFJWQVIoc3RhdF9TX0lNT0RFX2RvYywKKyJSZXR1cm4gdGhlIHBvcnRpb24gb2YgdGhlIGZpbGUncyBtb2RlIHRoYXQgY2FuIGJlIHNldCBieSBvcy5jaG1vZCgpLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RhdF9TX0lNT0RFKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpCit7CisgICAgbW9kZV90IG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsKKyAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1vZGUgJiBTX0lNT0RFKTsKK30KKworCitQeURvY19TVFJWQVIoc3RhdF9TX0lGTVRfZG9jLAorIlJldHVybiB0aGUgcG9ydGlvbiBvZiB0aGUgZmlsZSdzIG1vZGUgdGhhdCBkZXNjcmliZXMgdGhlIGZpbGUgdHlwZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0YXRfU19JRk1UKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpCit7CisgICAgbW9kZV90IG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsKKyAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1vZGUgJiBTX0lGTVQpOworfQorCisvKiBmaWxlIHR5cGUgY2hhcnMgYWNjb3JkaW5nIHRvCisgICBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0NfUHJvZ3JhbW1pbmcvUE9TSVhfUmVmZXJlbmNlL3N5cy9zdGF0LmggKi8KKworc3RhdGljIGNoYXIKK2ZpbGV0eXBlKG1vZGVfdCBtb2RlKQoreworICAgIC8qIGNvbW1vbiBjYXNlcyBmaXJzdCAqLworICAgIGlmIChTX0lTUkVHKG1vZGUpKSAgcmV0dXJuICctJzsKKyAgICBpZiAoU19JU0RJUihtb2RlKSkgIHJldHVybiAnZCc7CisgICAgaWYgKFNfSVNMTksobW9kZSkpICByZXR1cm4gJ2wnOworICAgIC8qIHNwZWNpYWwgZmlsZXMgKi8KKyAgICBpZiAoU19JU0JMSyhtb2RlKSkgIHJldHVybiAnYic7CisgICAgaWYgKFNfSVNDSFIobW9kZSkpICByZXR1cm4gJ2MnOworICAgIGlmIChTX0lTRklGTyhtb2RlKSkgcmV0dXJuICdwJzsKKyAgICBpZiAoU19JU1NPQ0sobW9kZSkpIHJldHVybiAncyc7CisgICAgLyogbm9uLXN0YW5kYXJkIHR5cGVzICovCisgICAgaWYgKFNfSVNET09SKG1vZGUpKSByZXR1cm4gJ0QnOworICAgIGlmIChTX0lTUE9SVChtb2RlKSkgcmV0dXJuICdQJzsKKyAgICBpZiAoU19JU1dIVChtb2RlKSkgIHJldHVybiAndyc7CisgICAgLyogdW5rbm93biAqLworICAgIHJldHVybiAnPyc7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxlcGVybShtb2RlX3QgbW9kZSwgY2hhciAqYnVmKQoreworICAgIGJ1ZlswXSA9IG1vZGUgJiBTX0lSVVNSID8gJ3InIDogJy0nOworICAgIGJ1ZlsxXSA9IG1vZGUgJiBTX0lXVVNSID8gJ3cnIDogJy0nOworICAgIGlmIChtb2RlICYgU19JU1VJRCkgeworICAgICAgICBidWZbMl0gPSBtb2RlICYgU19JWFVTUiA/ICdzJyA6ICdTJzsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZbMl0gPSBtb2RlICYgU19JWFVTUiA/ICd4JyA6ICctJzsKKyAgICB9CisgICAgYnVmWzNdID0gbW9kZSAmIFNfSVJHUlAgPyAncicgOiAnLSc7CisgICAgYnVmWzRdID0gbW9kZSAmIFNfSVdHUlAgPyAndycgOiAnLSc7CisgICAgaWYgKG1vZGUgJiBTX0lTR0lEKSB7CisgICAgICAgIGJ1Zls1XSA9IG1vZGUgJiBTX0lYR1JQID8gJ3MnIDogJ1MnOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1Zls1XSA9IG1vZGUgJiBTX0lYR1JQID8gJ3gnIDogJy0nOworICAgIH0KKyAgICBidWZbNl0gPSBtb2RlICYgU19JUk9USCA/ICdyJyA6ICctJzsKKyAgICBidWZbN10gPSBtb2RlICYgU19JV09USCA/ICd3JyA6ICctJzsKKyAgICBpZiAobW9kZSAmIFNfSVNWVFgpIHsKKyAgICAgICAgYnVmWzhdID0gbW9kZSAmIFNfSVhPVEggPyAndCcgOiAnVCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmWzhdID0gbW9kZSAmIFNfSVhPVEggPyAneCcgOiAnLSc7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoc3RhdF9maWxlbW9kZV9kb2MsCisiQ29udmVydCBhIGZpbGUncyBtb2RlIHRvIGEgc3RyaW5nIG9mIHRoZSBmb3JtICctcnd4cnd4cnd4JyIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RhdF9maWxlbW9kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKQoreworICAgIGNoYXIgYnVmWzEwXTsKKyAgICBtb2RlX3QgbW9kZTsKKworICAgIG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsKKyAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBidWZbMF0gPSBmaWxldHlwZShtb2RlKTsKKyAgICBmaWxlcGVybShtb2RlLCAmYnVmWzFdKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKGJ1ZiwgMTApOworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBzdGF0X21ldGhvZHNbXSA9IHsKKyAgICB7IlNfSVNESVIiLCAgICAgICAgIHN0YXRfU19JU0RJUiwgIE1FVEhfTywgc3RhdF9TX0lTRElSX2RvY30sCisgICAgeyJTX0lTQ0hSIiwgICAgICAgICBzdGF0X1NfSVNDSFIsICBNRVRIX08sIHN0YXRfU19JU0NIUl9kb2N9LAorICAgIHsiU19JU0JMSyIsICAgICAgICAgc3RhdF9TX0lTQkxLLCAgTUVUSF9PLCBzdGF0X1NfSVNCTEtfZG9jfSwKKyAgICB7IlNfSVNSRUciLCAgICAgICAgIHN0YXRfU19JU1JFRywgIE1FVEhfTywgc3RhdF9TX0lTUkVHX2RvY30sCisgICAgeyJTX0lTRklGTyIsICAgICAgICBzdGF0X1NfSVNGSUZPLCBNRVRIX08sIHN0YXRfU19JU0ZJRk9fZG9jfSwKKyAgICB7IlNfSVNMTksiLCAgICAgICAgIHN0YXRfU19JU0xOSywgIE1FVEhfTywgc3RhdF9TX0lTTE5LX2RvY30sCisgICAgeyJTX0lTU09DSyIsICAgICAgICBzdGF0X1NfSVNTT0NLLCBNRVRIX08sIHN0YXRfU19JU1NPQ0tfZG9jfSwKKyAgICB7IlNfSVNET09SIiwgICAgICAgIHN0YXRfU19JU0RPT1IsIE1FVEhfTywgc3RhdF9TX0lTRE9PUl9kb2N9LAorICAgIHsiU19JU1BPUlQiLCAgICAgICAgc3RhdF9TX0lTUE9SVCwgTUVUSF9PLCBzdGF0X1NfSVNQT1JUX2RvY30sCisgICAgeyJTX0lTV0hUIiwgICAgICAgICBzdGF0X1NfSVNXSFQsICBNRVRIX08sIHN0YXRfU19JU1dIVF9kb2N9LAorICAgIHsiU19JTU9ERSIsICAgICAgICAgc3RhdF9TX0lNT0RFLCAgTUVUSF9PLCBzdGF0X1NfSU1PREVfZG9jfSwKKyAgICB7IlNfSUZNVCIsICAgICAgICAgIHN0YXRfU19JRk1ULCAgIE1FVEhfTywgc3RhdF9TX0lGTVRfZG9jfSwKKyAgICB7ImZpbGVtb2RlIiwgICAgICAgIHN0YXRfZmlsZW1vZGUsIE1FVEhfTywgc3RhdF9maWxlbW9kZV9kb2N9LAorICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCisKK1B5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAorIlNfSUZNVF86IGZpbGUgdHlwZSBiaXRzXG5cCitTX0lGRElSOiBkaXJlY3RvcnlcblwKK1NfSUZDSFI6IGNoYXJhY3RlciBkZXZpY2VcblwKK1NfSUZCTEs6IGJsb2NrIGRldmljZVxuXAorU19JRlJFRzogcmVndWxhciBmaWxlXG5cCitTX0lGSUZPOiBmaWZvIChuYW1lZCBwaXBlKVxuXAorU19JRkxOSzogc3ltYm9saWMgbGlua1xuXAorU19JRlNPQ0s6IHNvY2tldCBmaWxlXG5cCitTX0lGRE9PUjogZG9vclxuXAorU19JRlBPUlQ6IGV2ZW50IHBvcnRcblwKK1NfSUZXSFQ6IHdoaXRlb3V0XG5cCitcbiIKKworIlNfSVNVSUQ6IHNldCBVSUQgYml0XG5cCitTX0lTR0lEOiBzZXQgR0lEIGJpdFxuXAorU19FTkZNVDogZmlsZSBsb2NraW5nIGVuZm9yY2VtZW50XG5cCitTX0lTVlRYOiBzdGlja3kgYml0XG5cCitTX0lSRUFEOiBVbml4IFY3IHN5bm9ueW0gZm9yIFNfSVJVU1JcblwKK1NfSVdSSVRFOiBVbml4IFY3IHN5bm9ueW0gZm9yIFNfSVdVU1JcblwKK1NfSUVYRUM6IFVuaXggVjcgc3lub255bSBmb3IgU19JWFVTUlxuXAorU19JUldYVTogbWFzayBmb3Igb3duZXIgcGVybWlzc2lvbnNcblwKK1NfSVJVU1I6IHJlYWQgYnkgb3duZXJcblwKK1NfSVdVU1I6IHdyaXRlIGJ5IG93bmVyXG5cCitTX0lYVVNSOiBleGVjdXRlIGJ5IG93bmVyXG5cCitTX0lSV1hHOiBtYXNrIGZvciBncm91cCBwZXJtaXNzaW9uc1xuXAorU19JUkdSUDogcmVhZCBieSBncm91cFxuXAorU19JV0dSUDogd3JpdGUgYnkgZ3JvdXBcblwKK1NfSVhHUlA6IGV4ZWN1dGUgYnkgZ3JvdXBcblwKK1NfSVJXWE86IG1hc2sgZm9yIG90aGVycyAobm90IGluIGdyb3VwKSBwZXJtaXNzaW9uc1xuXAorU19JUk9USDogcmVhZCBieSBvdGhlcnNcblwKK1NfSVdPVEg6IHdyaXRlIGJ5IG90aGVyc1xuXAorU19JWE9USDogZXhlY3V0ZSBieSBvdGhlcnNcblwKK1xuIgorCisiVUZfTk9EVU1QOiBkbyBub3QgZHVtcCBmaWxlXG5cCitVRl9JTU1VVEFCTEU6IGZpbGUgbWF5IG5vdCBiZSBjaGFuZ2VkXG5cCitVRl9BUFBFTkQ6IGZpbGUgbWF5IG9ubHkgYmUgYXBwZW5kZWQgdG9cblwKK1VGX09QQVFVRTogZGlyZWN0b3J5IGlzIG9wYXF1ZSB3aGVuIHZpZXdlZCB0aHJvdWdoIGEgdW5pb24gc3RhY2tcblwKK1VGX05PVU5MSU5LOiBmaWxlIG1heSBub3QgYmUgcmVuYW1lZCBvciBkZWxldGVkXG5cCitVRl9DT01QUkVTU0VEOiBPUyBYOiBmaWxlIGlzIGhmcy1jb21wcmVzc2VkXG5cCitVRl9ISURERU46IE9TIFg6IGZpbGUgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWRcblwKK1NGX0FSQ0hJVkVEOiBmaWxlIG1heSBiZSBhcmNoaXZlZFxuXAorU0ZfSU1NVVRBQkxFOiBmaWxlIG1heSBub3QgYmUgY2hhbmdlZFxuXAorU0ZfQVBQRU5EOiBmaWxlIG1heSBvbmx5IGJlIGFwcGVuZGVkIHRvXG5cCitTRl9OT1VOTElOSzogZmlsZSBtYXkgbm90IGJlIHJlbmFtZWQgb3IgZGVsZXRlZFxuXAorU0ZfU05BUFNIT1Q6IGZpbGUgaXMgYSBzbmFwc2hvdCBmaWxlXG5cCitcbiIKKworIlNUX01PREVcblwKK1NUX0lOT1xuXAorU1RfREVWXG5cCitTVF9OTElOS1xuXAorU1RfVUlEXG5cCitTVF9HSURcblwKK1NUX1NJWkVcblwKK1NUX0FUSU1FXG5cCitTVF9NVElNRVxuXAorU1RfQ1RJTUVcblwKKyIpOworCisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgc3RhdG1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9zdGF0IiwKKyAgICBtb2R1bGVfZG9jLAorICAgIC0xLAorICAgIHN0YXRfbWV0aG9kcywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQworUHlJbml0X19zdGF0KHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3RhdG1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkRJUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGQ0hSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZCTEspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRlJFRykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGSUZPKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZMTkspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRlNPQ0spKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkRPT1IpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRlBPUlQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRldIVCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVNVSUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JU0dJRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lTVlRYKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfRU5GTVQpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSRUFEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdSSVRFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUVYRUMpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSV1hVKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJVU1IpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV1VTUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lYVVNSKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUldYRykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSR1JQKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdHUlApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JWEdSUCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJXWE8pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUk9USCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXT1RIKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVhPVEgpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9OT0RVTVApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfSU1NVVRBQkxFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0FQUEVORCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9PUEFRVUUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfTk9VTkxJTkspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfQ09NUFJFU1NFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9ISURERU4pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfQVJDSElWRUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfSU1NVVRBQkxFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX0FQUEVORCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9OT1VOTElOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9TTkFQU0hPVCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9NT0RFIiwgMCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfSU5PIiwgMSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfREVWIiwgMikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfTkxJTksiLCAzKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9VSUQiLCA0KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9HSUQiLCA1KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9TSVpFIiwgNikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfQVRJTUUiLCA3KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9NVElNRSIsIDgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0NUSU1FIiwgOSkpIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIG07Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdHJ1Y3QuYyBiL01vZHVsZXMvX3N0cnVjdC5jCmluZGV4IGEyNDg3NTMuLjFkZTk0ZTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3N0cnVjdC5jCisrKyBiL01vZHVsZXMvX3N0cnVjdC5jCkBAIC0yNiw2ICsyNiw3IEBACiAgICAgY29uc3Qgc3RydWN0IF9mb3JtYXRkZWYgKmZtdGRlZjsKICAgICBQeV9zc2l6ZV90IG9mZnNldDsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlfc3NpemVfdCByZXBlYXQ7CiB9IGZvcm1hdGNvZGU7CiAKIC8qIFN0cnVjdCBvYmplY3QgaW50ZXJmYWNlICovCkBAIC0xMTk5LDEyICsxMjAwLDExIEBACiAgICAgY2FzZSAnISc6IC8qIE5ldHdvcmsgYnl0ZSBvcmRlciBpcyBiaWctZW5kaWFuICovCiAgICAgICAgIHJldHVybiBiaWdlbmRpYW5fdGFibGU7CiAgICAgY2FzZSAnPSc6IHsgLyogSG9zdCBieXRlIG9yZGVyIC0tIGRpZmZlcmVudCBmcm9tIG5hdGl2ZSBpbiBhbGlnbm1lbnQhICovCi0gICAgICAgIGludCBuID0gMTsKLSAgICAgICAgY2hhciAqcCA9IChjaGFyICopICZuOwotICAgICAgICBpZiAoKnAgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBsaWxlbmRpYW5fdGFibGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBiaWdlbmRpYW5fdGFibGU7CisjaWYgUFlfTElUVExFX0VORElBTgorICAgICAgICByZXR1cm4gbGlsZW5kaWFuX3RhYmxlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKKyNlbmRpZgogICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICAtLSpwZm10OyAvKiBCYWNrIG91dCBvZiBwb2ludGVyIGluY3JlbWVudCAqLwpAQCAtMTI0OCw2ICsxMjQ4LDkgQEAKICAgICByZXR1cm4gc2l6ZTsKIH0KIAorLyoKKyAqIFN0cnVjdCBvYmplY3QgaW1wbGVtZW50YXRpb24uCisgKi8KIAogLyogY2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgZm9ybWF0IHN0cmluZyAqLwogCkBAIC0xMjYxLDcgKzEyNjQsNyBAQAogICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgY29uc3QgY2hhciAqZm10OwogICAgIGNoYXIgYzsKLSAgICBQeV9zc2l6ZV90IHNpemUsIGxlbiwgbnVtLCBpdGVtc2l6ZTsKKyAgICBQeV9zc2l6ZV90IHNpemUsIGxlbiwgbmNvZGVzLCBudW0sIGl0ZW1zaXplOwogCiAgICAgZm10ID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+c19mb3JtYXQpOwogCkBAIC0xMjcwLDYgKzEyNzMsNyBAQAogICAgIHMgPSBmbXQ7CiAgICAgc2l6ZSA9IDA7CiAgICAgbGVuID0gMDsKKyAgICBuY29kZXMgPSAwOwogICAgIHdoaWxlICgoYyA9ICpzKyspICE9ICdcMCcpIHsKICAgICAgICAgaWYgKFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soYykpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjk5LDkgKzEzMDMsOSBAQAogCiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICAgY2FzZSAncyc6IC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSAncCc6IGxlbisrOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3AnOiBsZW4rKzsgbmNvZGVzKys7IGJyZWFrOwogICAgICAgICAgICAgY2FzZSAneCc6IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogbGVuICs9IG51bTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBsZW4gKz0gbnVtOyBpZiAobnVtKSBuY29kZXMrKzsgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBpdGVtc2l6ZSA9IGUtPnNpemU7CkBAIC0xMzE2LDE0ICsxMzIwLDE0IEBACiAgICAgfQogCiAgICAgLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCi0gICAgaWYgKChsZW4gKyAxKSA+IChQWV9TU0laRV9UX01BWCAvIHNpemVvZihmb3JtYXRjb2RlKSkpIHsKKyAgICBpZiAoKG5jb2RlcyArIDEpID4gKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKGZvcm1hdGNvZGUpKSkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgc2VsZi0+c19zaXplID0gc2l6ZTsKICAgICBzZWxmLT5zX2xlbiA9IGxlbjsKLSAgICBjb2RlcyA9IFB5TWVtX01BTExPQygobGVuICsgMSkgKiBzaXplb2YoZm9ybWF0Y29kZSkpOworICAgIGNvZGVzID0gUHlNZW1fTUFMTE9DKChuY29kZXMgKyAxKSAqIHNpemVvZihmb3JtYXRjb2RlKSk7CiAgICAgaWYgKGNvZGVzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTM1NSwyMyArMTM1OSwyNCBAQAogICAgICAgICAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7CiAgICAgICAgICAgICBjb2Rlcy0+c2l6ZSA9IG51bTsKICAgICAgICAgICAgIGNvZGVzLT5mbXRkZWYgPSBlOworICAgICAgICAgICAgY29kZXMtPnJlcGVhdCA9IDE7CiAgICAgICAgICAgICBjb2RlcysrOwogICAgICAgICAgICAgc2l6ZSArPSBudW07CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAneCcpIHsKICAgICAgICAgICAgIHNpemUgKz0gbnVtOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd2hpbGUgKC0tbnVtID49IDApIHsKLSAgICAgICAgICAgICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKLSAgICAgICAgICAgICAgICBjb2Rlcy0+c2l6ZSA9IGUtPnNpemU7Ci0gICAgICAgICAgICAgICAgY29kZXMtPmZtdGRlZiA9IGU7Ci0gICAgICAgICAgICAgICAgY29kZXMrKzsKLSAgICAgICAgICAgICAgICBzaXplICs9IGUtPnNpemU7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobnVtKSB7CisgICAgICAgICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKKyAgICAgICAgICAgIGNvZGVzLT5zaXplID0gZS0+c2l6ZTsKKyAgICAgICAgICAgIGNvZGVzLT5mbXRkZWYgPSBlOworICAgICAgICAgICAgY29kZXMtPnJlcGVhdCA9IG51bTsKKyAgICAgICAgICAgIGNvZGVzKys7CisgICAgICAgICAgICBzaXplICs9IGUtPnNpemUgKiBudW07CiAgICAgICAgIH0KICAgICB9CiAgICAgY29kZXMtPmZtdGRlZiA9IE5VTEw7CiAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7CiAgICAgY29kZXMtPnNpemUgPSAwOworICAgIGNvZGVzLT5yZXBlYXQgPSAwOwogCiAgICAgcmV0dXJuIDA7CiAKQEAgLTE0NjAsMjIgKzE0NjUsMjYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKGNvZGUgPSBzb3NlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgIGNvbnN0IGZvcm1hdGRlZiAqZSA9IGNvZGUtPmZtdGRlZjsKICAgICAgICAgY29uc3QgY2hhciAqcmVzID0gc3RhcnRmcm9tICsgY29kZS0+b2Zmc2V0OwotICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgewotICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzLCBjb2RlLT5zaXplKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSAqKHVuc2lnbmVkIGNoYXIqKXJlczsKLSAgICAgICAgICAgIGlmIChuID49IGNvZGUtPnNpemUpCi0gICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOwotICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzICsgMSwgbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2ID0gZS0+dW5wYWNrKHJlcywgZSk7CisgICAgICAgIFB5X3NzaXplX3QgaiA9IGNvZGUtPnJlcGVhdDsKKyAgICAgICAgd2hpbGUgKGotLSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnY7CisgICAgICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgeworICAgICAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcywgY29kZS0+c2l6ZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSAqKHVuc2lnbmVkIGNoYXIqKXJlczsKKyAgICAgICAgICAgICAgICBpZiAobiA+PSBjb2RlLT5zaXplKQorICAgICAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7CisgICAgICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzICsgMSwgbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHYgPSBlLT51bnBhY2socmVzLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGkrKywgdik7CisgICAgICAgICAgICByZXMgKz0gY29kZS0+c2l6ZTsKICAgICAgICAgfQotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSsrLCB2KTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTU1Nyw2ICsxNTY2LDE0MiBAQAogfQogCiAKKy8qIFVucGFjayBpdGVyYXRvciB0eXBlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlTdHJ1Y3RPYmplY3QgKnNvOworICAgIFB5X2J1ZmZlciBidWY7CisgICAgUHlfc3NpemVfdCBpbmRleDsKK30gdW5wYWNraXRlcm9iamVjdDsKKworc3RhdGljIHZvaWQKK3VucGFja2l0ZXJfZGVhbGxvYyh1bnBhY2tpdGVyb2JqZWN0ICpzZWxmKQoreworICAgIFB5X1hERUNSRUYoc2VsZi0+c28pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1Zik7CisgICAgUHlPYmplY3RfR0NfRGVsKHNlbGYpOworfQorCitzdGF0aWMgaW50Cit1bnBhY2tpdGVyX3RyYXZlcnNlKHVucGFja2l0ZXJvYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPnNvKTsKKyAgICBQeV9WSVNJVChzZWxmLT5idWYub2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3VucGFja2l0ZXJfbGVuKHVucGFja2l0ZXJvYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaWYgKHNlbGYtPnNvID09IE5VTEwpCisgICAgICAgIGxlbiA9IDA7CisgICAgZWxzZQorICAgICAgICBsZW4gPSAoc2VsZi0+YnVmLmxlbiAtIHNlbGYtPmluZGV4KSAvIHNlbGYtPnNvLT5zX3NpemU7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgdW5wYWNraXRlcl9tZXRob2RzW10gPSB7CisgICAgeyJfX2xlbmd0aF9oaW50X18iLCAoUHlDRnVuY3Rpb24pIHVucGFja2l0ZXJfbGVuLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bnBhY2tpdGVyX2l0ZXJuZXh0KHVucGFja2l0ZXJvYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBpZiAoc2VsZi0+c28gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHNlbGYtPmluZGV4ID49IHNlbGYtPmJ1Zi5sZW4pIHsKKyAgICAgICAgLyogSXRlcmF0b3IgZXhoYXVzdGVkICovCisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnNvKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+YnVmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChzZWxmLT5pbmRleCArIHNlbGYtPnNvLT5zX3NpemUgPD0gc2VsZi0+YnVmLmxlbik7CisgICAgcmVzdWx0ID0gc191bnBhY2tfaW50ZXJuYWwoc2VsZi0+c28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKSBzZWxmLT5idWYuYnVmICsgc2VsZi0+aW5kZXgpOworICAgIHNlbGYtPmluZGV4ICs9IHNlbGYtPnNvLT5zX3NpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCB1bnBhY2tpdGVyX3R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAidW5wYWNrX2l0ZXJhdG9yIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YodW5wYWNraXRlcm9iamVjdCksICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAoZGVzdHJ1Y3Rvcil1bnBhY2tpdGVyX2RlYWxsb2MsICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpdW5wYWNraXRlcl90cmF2ZXJzZSwgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAoaXRlcm5leHRmdW5jKXVucGFja2l0ZXJfaXRlcm5leHQsICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgdW5wYWNraXRlcl9tZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCit9OworCitQeURvY19TVFJWQVIoc19pdGVyX3VucGFja19fZG9jX18sCisiUy5pdGVyX3VucGFjayhidWZmZXIpIC0+IGl0ZXJhdG9yKHYxLCB2MiwgLi4uKVxuXAorXG5cCitSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgdHVwbGVzIHVucGFja2VkIGZyb20gdGhlIGdpdmVuIGJ5dGVzXG5cCitzb3VyY2UsIGxpa2UgYSByZXBlYXRlZCBpbnZvY2F0aW9uIG9mIHVucGFja19mcm9tKCkuICBSZXF1aXJlc1xuXAordGhhdCB0aGUgYnl0ZXMgbGVuZ3RoIGJlIGEgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdCBzaXplLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc19pdGVyX3VucGFjayhQeU9iamVjdCAqX3NvLCBQeU9iamVjdCAqaW5wdXQpCit7CisgICAgUHlTdHJ1Y3RPYmplY3QgKnNvID0gKFB5U3RydWN0T2JqZWN0ICopIF9zbzsKKyAgICB1bnBhY2tpdGVyb2JqZWN0ICpzZWxmOworCisgICAgYXNzZXJ0KFB5U3RydWN0X0NoZWNrKF9zbykpOworICAgIGFzc2VydChzby0+c19jb2RlcyAhPSBOVUxMKTsKKworICAgIGlmIChzby0+c19zaXplID09IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBpdGVyYXRpdmVseSB1bnBhY2sgd2l0aCBhIHN0cnVjdCBvZiBsZW5ndGggMCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmID0gKHVucGFja2l0ZXJvYmplY3QgKikgUHlUeXBlX0dlbmVyaWNBbGxvYygmdW5wYWNraXRlcl90eXBlLCAwKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoaW5wdXQsICZzZWxmLT5idWYsIFB5QlVGX1NJTVBMRSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzZWxmLT5idWYubGVuICUgc28tPnNfc2l6ZSAhPSAwKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpdmUgdW5wYWNraW5nIHJlcXVpcmVzIGEgYnl0ZXMgbGVuZ3RoICIKKyAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBvZiAlemQiLAorICAgICAgICAgICAgICAgICAgICAgc28tPnNfc2l6ZSk7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihzbyk7CisgICAgc2VsZi0+c28gPSBzbzsKKyAgICBzZWxmLT5pbmRleCA9IDA7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOworfQorCisKIC8qCiAgKiBHdXRzIG9mIHRoZSBwYWNrIGZ1bmN0aW9uLgogICoKQEAgLTE1NzgsNjIgKzE3MjMsNjcgQEAKICAgICBtZW1zZXQoYnVmLCAnXDAnLCBzb3NlbGYtPnNfc2l6ZSk7CiAgICAgaSA9IG9mZnNldDsKICAgICBmb3IgKGNvZGUgPSBzb3NlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspIHsKLSAgICAgICAgUHlfc3NpemVfdCBuOwotICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSsrKTsKICAgICAgICAgY29uc3QgZm9ybWF0ZGVmICplID0gY29kZS0+Zm10ZGVmOwogICAgICAgICBjaGFyICpyZXMgPSBidWYgKyBjb2RlLT5vZmZzZXQ7Ci0gICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7Ci0gICAgICAgICAgICBpbnQgaXNzdHJpbmc7Ci0gICAgICAgICAgICB2b2lkICpwOwotICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOwotICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID4gY29kZS0+c2l6ZSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZTsKLSAgICAgICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgICAgICBtZW1jcHkocmVzLCBwLCBuKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7Ci0gICAgICAgICAgICBpbnQgaXNzdHJpbmc7Ci0gICAgICAgICAgICB2b2lkICpwOwotICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOwotICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3AnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID4gKGNvZGUtPnNpemUgLSAxKSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7Ci0gICAgICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlcyArIDEsIHAsIG4pOwotICAgICAgICAgICAgaWYgKG4gPiAyNTUpCi0gICAgICAgICAgICAgICAgbiA9IDI1NTsKLSAgICAgICAgICAgICpyZXMgPSBQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGUtPnBhY2socmVzLCB2LCBlKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgIFB5X3NzaXplX3QgaiA9IGNvZGUtPnJlcGVhdDsKKyAgICAgICAgd2hpbGUgKGotLSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkrKyk7CisgICAgICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgICAgICAgICBpbnQgaXNzdHJpbmc7CisgICAgICAgICAgICAgICAgdm9pZCAqcDsKKyAgICAgICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7CisgICAgICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4gPiBjb2RlLT5zaXplKQorICAgICAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IDApCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShyZXMsIHAsIG4pOworICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuOworICAgICAgICAgICAgICAgIGludCBpc3N0cmluZzsKKyAgICAgICAgICAgICAgICB2b2lkICpwOworICAgICAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdwJyBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOworICAgICAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuID4gKGNvZGUtPnNpemUgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHJlcyArIDEsIHAsIG4pOworICAgICAgICAgICAgICAgIGlmIChuID4gMjU1KQorICAgICAgICAgICAgICAgICAgICBuID0gMjU1OworICAgICAgICAgICAgICAgICpyZXMgPSBQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFjayhyZXMsIHYsIGUpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzICs9IGNvZGUtPnNpemU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NjksMTQgKzE5MTksMTggQEAKIHNfc2l6ZW9mKFB5U3RydWN0T2JqZWN0ICpzZWxmLCB2b2lkICp1bnVzZWQpCiB7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGZvcm1hdGNvZGUgKmNvZGU7CiAKLSAgICBzaXplID0gc2l6ZW9mKFB5U3RydWN0T2JqZWN0KSArIHNpemVvZihmb3JtYXRjb2RlKSAqIChzZWxmLT5zX2xlbiArIDEpOworICAgIHNpemUgPSBzaXplb2YoUHlTdHJ1Y3RPYmplY3QpICsgc2l6ZW9mKGZvcm1hdGNvZGUpOworICAgIGZvciAoY29kZSA9IHNlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspCisgICAgICAgIHNpemUgKz0gc2l6ZW9mKGZvcm1hdGNvZGUpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZSk7CiB9CiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zICovCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgc19tZXRob2RzW10gPSB7CisgICAgeyJpdGVyX3VucGFjayIsICAgICBzX2l0ZXJfdW5wYWNrLCAgTUVUSF9PLCBzX2l0ZXJfdW5wYWNrX19kb2NfX30sCiAgICAgeyJwYWNrIiwgICAgICAgICAgICBzX3BhY2ssICAgICAgICAgTUVUSF9WQVJBUkdTLCBzX3BhY2tfX2RvY19ffSwKICAgICB7InBhY2tfaW50byIsICAgICAgIHNfcGFja19pbnRvLCAgICBNRVRIX1ZBUkFSR1MsIHNfcGFja19pbnRvX19kb2NfX30sCiAgICAgeyJ1bnBhY2siLCAgICAgICAgICBzX3VucGFjaywgICAgICAgTUVUSF9PLCBzX3VucGFja19fZG9jX199LApAQCAtMjAyNiw5ICsyMTgwLDM0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGl0ZXJfdW5wYWNrX2RvYywKKyJpdGVyX3VucGFjayhmbXQsIGJ1ZmZlcikgLT4gaXRlcmF0b3IodjEsIHYyLCAuLi4pXG5cCitcblwKK1JldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyB0dXBsZXMgdW5wYWNrZWQgZnJvbSB0aGUgZ2l2ZW4gYnl0ZXNcblwKK3NvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBzdHJpbmcsIGxpa2UgYSByZXBlYXRlZCBpbnZvY2F0aW9uIG9mXG5cCit1bnBhY2tfZnJvbSgpLiAgUmVxdWlyZXMgdGhhdCB0aGUgYnl0ZXMgbGVuZ3RoIGJlIGEgbXVsdGlwbGUgb2YgdGhlXG5cCitmb3JtYXQgc3RydWN0IHNpemUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpdGVyX3VucGFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnNfb2JqZWN0LCAqZm10LCAqaW5wdXQsICpyZXN1bHQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POml0ZXJfdW5wYWNrIiwgJmZtdCwgJmlucHV0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzX29iamVjdCA9IGNhY2hlX3N0cnVjdChmbXQpOworICAgIGlmIChzX29iamVjdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSBzX2l0ZXJfdW5wYWNrKHNfb2JqZWN0LCBpbnB1dCk7CisgICAgUHlfREVDUkVGKHNfb2JqZWN0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG1vZHVsZV9mdW5jdGlvbnNbXSA9IHsKICAgICB7Il9jbGVhcmNhY2hlIiwgICAgIChQeUNGdW5jdGlvbiljbGVhcmNhY2hlLCAgICAgICAgTUVUSF9OT0FSR1MsICAgIGNsZWFyY2FjaGVfZG9jfSwKICAgICB7ImNhbGNzaXplIiwgICAgICAgIGNhbGNzaXplLCAgICAgICBNRVRIX08sIGNhbGNzaXplX2RvY30sCisgICAgeyJpdGVyX3VucGFjayIsICAgICBpdGVyX3VucGFjaywgICAgTUVUSF9WQVJBUkdTLCAgIGl0ZXJfdW5wYWNrX2RvY30sCiAgICAgeyJwYWNrIiwgICAgICAgICAgICBwYWNrLCAgICAgICAgICAgTUVUSF9WQVJBUkdTLCAgIHBhY2tfZG9jfSwKICAgICB7InBhY2tfaW50byIsICAgICAgIHBhY2tfaW50bywgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19pbnRvX2RvY30sCiAgICAgeyJ1bnBhY2siLCAgICAgICAgICB1bnBhY2ssIE1FVEhfVkFSQVJHUywgICB1bnBhY2tfZG9jfSwKQEAgLTIwOTgsMTMgKzIyNzcsMTMgQEAKIAogICAgIC8qIENoZWNrIGVuZGlhbiBhbmQgc3dhcCBpbiBmYXN0ZXIgZnVuY3Rpb25zICovCiAgICAgewotICAgICAgICBpbnQgb25lID0gMTsKICAgICAgICAgZm9ybWF0ZGVmICpuYXRpdmUgPSBuYXRpdmVfdGFibGU7CiAgICAgICAgIGZvcm1hdGRlZiAqb3RoZXIsICpwdHI7Ci0gICAgICAgIGlmICgoaW50KSoodW5zaWduZWQgY2hhciopJm9uZSkKLSAgICAgICAgICAgIG90aGVyID0gbGlsZW5kaWFuX3RhYmxlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdGhlciA9IGJpZ2VuZGlhbl90YWJsZTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgICAgIG90aGVyID0gbGlsZW5kaWFuX3RhYmxlOworI2Vsc2UKKyAgICAgICAgb3RoZXIgPSBiaWdlbmRpYW5fdGFibGU7CisjZW5kaWYKICAgICAgICAgLyogU2NhbiB0aHJvdWdoIHRoZSBuYXRpdmUgdGFibGUsIGZpbmQgYSBtYXRjaGluZwogICAgICAgICAgICBlbnRyeSBpbiB0aGUgZW5kaWFuIHRhYmxlIGFuZCBzd2FwIGluIHRoZQogICAgICAgICAgICBuYXRpdmUgaW1wbGVtZW50YXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMgYi9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKaW5kZXggMzE2NjY2ZS4uMGM2ZWYxNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCisrKyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwpAQCAtMTgxNSw3ICsxODE1LDcgQEAKICAgICAgICAgaWYgKGluaXRfc2xpY2UoYmFzZSwga2V5LCAwKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycl9vY2N1cnJlZDsKICAgICB9Ci0gICAgZWxzZSBpZiBQeVR1cGxlX0NoZWNrKGtleSkgeworICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soa2V5KSkgewogICAgICAgICAvKiBtdWx0aS1kaW1lbnNpb25hbCBzbGljZSAqLwogICAgICAgICBQeU9iamVjdCAqdHVwbGUgPSBrZXk7CiAgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKQEAgLTI4MzcsMzYgKzI4MzcsMzYgQEAKICAgICBpZiAoc2ltcGxlX2Zvcm1hdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9NQVhfTkRJTSIsIE5EX01BWF9ORElNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfVkFSRVhQT1JUIiwgTkRfVkFSRVhQT1JUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfV1JJVEFCTEUiLCBORF9XUklUQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0ZPUlRSQU4iLCBORF9GT1JUUkFOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfU0NBTEFSIiwgTkRfU0NBTEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfUElMIiwgTkRfUElMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfR0VUQlVGX0ZBSUwiLCBORF9HRVRCVUZfRkFJTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0dFVEJVRl9VTkRFRklORUQiLCBORF9HRVRCVUZfVU5ERUZJTkVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfUkVESVJFQ1QiLCBORF9SRURJUkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfTUFYX05ESU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1ZBUkVYUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfV1JJVEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0ZPUlRSQU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1NDQUxBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfUElMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9HRVRCVUZfRkFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfR0VUQlVGX1VOREVGSU5FRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfUkVESVJFQ1QpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NJTVBMRSIsIFB5QlVGX1NJTVBMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1dSSVRBQkxFIiwgUHlCVUZfV1JJVEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GT1JNQVQiLCBQeUJVRl9GT1JNQVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9ORCIsIFB5QlVGX05EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFUyIsIFB5QlVGX1NUUklERVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9JTkRJUkVDVCIsIFB5QlVGX0lORElSRUNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ19DT05USUdVT1VTIiwgUHlCVUZfQ19DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRl9DT05USUdVT1VTIiwgUHlCVUZfRl9DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQU5ZX0NPTlRJR1VPVVMiLCBQeUJVRl9BTllfQ09OVElHVU9VUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZVTEwiLCBQeUJVRl9GVUxMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRlVMTF9STyIsIFB5QlVGX0ZVTExfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9SRUNPUkRTIiwgUHlCVUZfUkVDT1JEUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQ09SRFNfUk8iLCBQeUJVRl9SRUNPUkRTX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFRCIsIFB5QlVGX1NUUklERUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVEX1JPIiwgUHlCVUZfU1RSSURFRF9STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NPTlRJRyIsIFB5QlVGX0NPTlRJRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NPTlRJR19STyIsIFB5QlVGX0NPTlRJR19STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU0lNUExFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9XUklUQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRk9STUFUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9ORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfSU5ESVJFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRl9DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9BTllfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRlVMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRlVMTF9STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVDT1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVDT1JEU19STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFRF9STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ09OVElHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DT05USUdfUk8pOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQUQiLCBQeUJVRl9SRUFEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfV1JJVEUiLCBQeUJVRl9XUklURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfV1JJVEUpOwogCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwppbmRleCA3ZGYzZTE5Li45NjYyZWI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKQEAgLTY1LDYgKzY1LDY5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKK3Rlc3Rfc2l6ZW9mX2NfdHlwZXMoUHlPYmplY3QgKnNlbGYpCit7CisjZGVmaW5lIENIRUNLX1NJWkVPRihUWVBFLCBFWFBFQ1RFRCkgICAgICAgICBcCisgICAgaWYgKEVYUEVDVEVEICE9IHNpemVvZihUWVBFKSkgIHsgICAgICAgICBcCisgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAic2l6ZW9mKCVzKSA9ICV1IGluc3RlYWQgb2YgJXUiLCBcCisgICAgICAgICAgICAjVFlQRSwgc2l6ZW9mKFRZUEUpLCBFWFBFQ1RFRCk7ICBcCisgICAgICAgIHJldHVybiAoUHlPYmplY3QqKU5VTEw7ICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBJU19TSUdORUQoVFlQRSkgKCgoVFlQRSktMSkgPCAoVFlQRSkwKQorI2RlZmluZSBDSEVDS19TSUdOTkVTUyhUWVBFLCBTSUdORUQpICAgICAgICAgXAorICAgIGlmIChJU19TSUdORUQoVFlQRSkgIT0gU0lHTkVEKSB7ICAgICAgICAgXAorICAgICAgICBQeUVycl9Gb3JtYXQoVGVzdEVycm9yLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIiVzIHNpZ25uZXNzIGlzLCBpbnN0ZWFkIG9mICVpIiwgIFwKKyAgICAgICAgICAgICNUWVBFLCBJU19TSUdORUQoVFlQRSksIFNJR05FRCk7IFwKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCopTlVMTDsgICAgICAgICAgICAgIFwKKyAgICB9CisKKyAgICAvKiBpbnRlZ2VyIHR5cGVzICovCisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzEsIDEpOworICAgIENIRUNLX1NJWkVPRihQeV9VQ1MyLCAyKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTNCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTMSwgMCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTMiwgMCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTNCwgMCk7CisjaWZkZWYgSEFWRV9JTlQzMl9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX0lOVDMyX1QsIDQpOworICAgIENIRUNLX1NJR05ORVNTKFBZX0lOVDMyX1QsIDEpOworI2VuZGlmCisjaWZkZWYgSEFWRV9VSU5UMzJfVAorICAgIENIRUNLX1NJWkVPRihQWV9VSU5UMzJfVCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfVUlOVDMyX1QsIDApOworI2VuZGlmCisjaWZkZWYgSEFWRV9JTlQ2NF9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX0lOVDY0X1QsIDgpOworICAgIENIRUNLX1NJR05ORVNTKFBZX0lOVDY0X1QsIDEpOworI2VuZGlmCisjaWZkZWYgSEFWRV9VSU5UNjRfVAorICAgIENIRUNLX1NJWkVPRihQWV9VSU5UNjRfVCwgOCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfVUlOVDY0X1QsIDApOworI2VuZGlmCisKKyAgICAvKiBwb2ludGVyL3NpemUgdHlwZXMgKi8KKyAgICBDSEVDS19TSVpFT0Yoc2l6ZV90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1Moc2l6ZV90LCAwKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfc3NpemVfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKFB5X3NzaXplX3QsIDEpOworCisgICAgQ0hFQ0tfU0laRU9GKFB5X3VpbnRwdHJfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKFB5X3VpbnRwdHJfdCwgMCk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X2ludHB0cl90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfaW50cHRyX3QsIDEpOworCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworCisjdW5kZWYgSVNfU0lHTkVECisjdW5kZWYgQ0hFQ0tfU0lHTkVTUworI3VuZGVmIENIRUNLX1NJWkVPRgorfQorCisKK3N0YXRpYyBQeU9iamVjdCoKIHRlc3RfbGlzdF9hcGkoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QqIGxpc3Q7CkBAIC0xNDI0LDYgKzE0ODcsMjAgQEAKICAgICBlbHNlCiAgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF93aWRlY2hhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Vbmljb2RlKExcIlxcVTAwMTEwMDAwXCIsIDEpIGRpZG4ndCBmYWlsIik7CisKKyAgICB3aWRlID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDEpOworICAgIGlmICh3aWRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHdpZGUpWzBdID0gaW52YWxpZFswXTsKKyAgICBpZiAoX1B5VW5pY29kZV9SZWFkeSh3aWRlKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHdpZGUpOworICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfREVDUkVGKHdpZGUpOworICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3Rfd2lkZWNoYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5VW5pY29kZV9SZWFkeSgpIGRpZG4ndCBmYWlsIik7CisgICAgfQogI2VuZGlmCiAKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTI0NzcsMTYgKzI1NTQsMzM2IEBACiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5sIiwgX1B5TG9uZ19Gcm9tVGltZV90KHNlYyksIG5zZWMpOwogfQogCitzdGF0aWMgdm9pZAorc2xvdF90cF9kZWwoUHlPYmplY3QgKnNlbGYpCit7CisgICAgX1B5X0lERU5USUZJRVIoX190cF9kZWxfXyk7CisgICAgUHlPYmplY3QgKmRlbCwgKnJlczsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA9PSAwKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIEV4ZWN1dGUgX19kZWxfXyBtZXRob2QsIGlmIGFueS4gKi8KKyAgICBkZWwgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChzZWxmLCAmUHlJZF9fX3RwX2RlbF9fKTsKKyAgICBpZiAoZGVsICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZGVsLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGRlbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICBQeV9ERUNSRUYoZGVsKTsKKyAgICB9CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgIC8qIHRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIG91dCAqLworCisgICAgLyogX19kZWxfXyByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICB7CisgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gc2VsZi0+b2JfcmVmY250OworICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOworICAgICAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisgICAgfQorICAgIGFzc2VydCghUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpIHx8CisgICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aXRoX3RwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeVR5cGVPYmplY3QgKnRwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOndpdGhfdHBfZGVsIiwgJm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHRwID0gKFB5VHlwZU9iamVjdCAqKSBvYmo7CisgICAgaWYgKCFQeVR5cGVfQ2hlY2sob2JqKSB8fCAhUHlUeXBlX0hhc0ZlYXR1cmUodHAsIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaGVhcCB0eXBlIGV4cGVjdGVkLCBnb3QgJVIiLCBvYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHAtPnRwX2RlbCA9IHNsb3RfdHBfZGVsOworICAgIFB5X0lOQ1JFRihvYmopOworICAgIHJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGVzdF9pbmNyZWYoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0lOQ1JFRihvYik7CisgICAgcmV0dXJuIG9iOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF94aW5jcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X1hJTkNSRUYoX3Rlc3RfaW5jcmVmKG9iaikpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfSU5DUkVGKF90ZXN0X2luY3JlZihvYmopKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfeGRlY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlfWERFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9kZWNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0RFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZGVjcmVmX0FQSShQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9JbmNSZWYob2IpOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9hbGxvYzAoUHlPYmplY3QgKnNlbGYpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgcHRyID0gUHlNZW1fTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlNZW1fRnJlZShwdHIpOworCisgICAgcHRyID0gUHlPYmplY3RfTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlPYmplY3RfTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlPYmplY3RfRnJlZShwdHIpOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIHNpemVfdCBtYWxsb2Nfc2l6ZTsKKyAgICB2b2lkICpyZWFsbG9jX3B0cjsKKyAgICBzaXplX3QgcmVhbGxvY19uZXdfc2l6ZTsKKyAgICB2b2lkICpmcmVlX3B0cjsKK30gYWxsb2NfaG9va190OworCitzdGF0aWMgdm9pZCogaG9va19tYWxsb2MgKHZvaWQqIGN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5tYWxsb2Nfc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLm1hbGxvYyhob29rLT5hbGxvYy5jdHgsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCogaG9va19yZWFsbG9jICh2b2lkKiBjdHgsIHZvaWQqIHB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIGFsbG9jX2hvb2tfdCAqaG9vayA9IChhbGxvY19ob29rX3QgKiljdHg7CisgICAgaG9vay0+cmVhbGxvY19wdHIgPSBwdHI7CisgICAgaG9vay0+cmVhbGxvY19uZXdfc2l6ZSA9IG5ld19zaXplOworICAgIHJldHVybiBob29rLT5hbGxvYy5yZWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvb2tfZnJlZSAodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5mcmVlX3B0ciA9IHB0cjsKKyAgICBob29rLT5hbGxvYy5mcmVlKGhvb2stPmFsbG9jLmN0eCwgcHRyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3Rfc2V0YWxsb2NhdG9ycyhQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4pCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZXJyb3JfbXNnOworICAgIGFsbG9jX2hvb2tfdCBob29rOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplLCBzaXplMjsKKyAgICB2b2lkICpwdHIsICpwdHIyOworCisgICAgaG9vay5tYWxsb2Nfc2l6ZSA9IDA7CisgICAgaG9vay5yZWFsbG9jX3B0ciA9IE5VTEw7CisgICAgaG9vay5yZWFsbG9jX25ld19zaXplID0gMDsKKyAgICBob29rLmZyZWVfcHRyID0gTlVMTDsKKworICAgIGFsbG9jLmN0eCA9ICZob29rOworICAgIGFsbG9jLm1hbGxvYyA9ICZob29rX21hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gJmhvb2tfcmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gJmhvb2tfZnJlZTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmFsbG9jKTsKKworICAgIHNpemUgPSA0MjsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0ciA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiBwdHIgPSBQeU1lbV9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyID0gUHlPYmplY3RfTWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfbXNnID0gIm1hbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2subWFsbG9jX3NpemUgIT0gc2l6ZSkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGludmFsaWQgc2l6ZSI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzaXplMiA9IDIwMDsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0cjIgPSBQeU1lbV9SYXdSZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0cjIgPSBQeU1lbV9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6IHB0cjIgPSBQeU9iamVjdF9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIyID0gTlVMTDsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHB0cjIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2sucmVhbGxvY19wdHIgIT0gcHRyCisgICAgICAgIHx8IGhvb2sucmVhbGxvY19uZXdfc2l6ZSAhPSBzaXplMikgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBpbnZhbGlkIHBhcmFtZXRlcnMiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiBQeU1lbV9SYXdGcmVlKHB0cjIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IFB5TWVtX0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogUHlPYmplY3RfRnJlZShwdHIyKTsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGhvb2suZnJlZV9wdHIgIT0gcHRyMikgeworICAgICAgICBlcnJvcl9tc2cgPSAiZnJlZSBpbnZhbGlkIHBvaW50ZXIiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJlcyA9IFB5X05vbmU7CisgICAgZ290byBmaW5hbGx5OworCitmYWlsOgorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIGVycm9yX21zZyk7CisKK2ZpbmFsbHk6CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmhvb2suYWxsb2MpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fUkFXKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9NRU0pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX09CSik7Cit9CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfZW1wdHksCisiIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ19ub19zaWduYXR1cmUsCisiVGhpcyBkb2NzdHJpbmcgaGFzIG5vIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUsCisiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUgKGJvbylcbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUuIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSwKKyJkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmUoc2lnKVxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcywKKyJkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzKHBhcmFtZXRlcilcbiIKKyJcbiIKKyJcbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUgYW5kIHNvbWUgZXh0cmEgbmV3bGluZXMuIgorKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIFRlc3RNZXRob2RzW10gPSB7CiAgICAgeyJyYWlzZV9leGNlcHRpb24iLCAgICAgICAgIHJhaXNlX2V4Y2VwdGlvbiwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyYWlzZV9tZW1vcnllcnJvciIsICAgKFB5Q0Z1bmN0aW9uKXJhaXNlX21lbW9yeWVycm9yLCAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9jb25maWciLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9jb25maWcsICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3NpemVvZl9jX3R5cGVzIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X3NpemVvZl9jX3R5cGVzLCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2RhdGV0aW1lX2NhcGkiLCAgdGVzdF9kYXRldGltZV9jYXBpLCAgICAgICAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9saXN0X2FwaSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9saXN0X2FwaSwgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2RpY3RfaXRlcmF0aW9uIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X2RpY3RfaXRlcmF0aW9uLE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbGF6eV9oYXNoX2luaGVyaXRhbmNlIiwgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sYXp5X2hhc2hfaW5oZXJpdGFuY2UsTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FwaSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FwaSwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWsiLChQeUNGdW5jdGlvbil0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9pbmNyZWZfZG9lc250X2xlYWsiLCAoUHlDRnVuY3Rpb24pdGVzdF9pbmNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrIiwoUHlDRnVuY3Rpb24pdGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfZGVjcmVmX2RvZXNudF9sZWFrIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfZGVjcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfaW5jcmVmX2RlY3JlZl9BUEkiLCAgKFB5Q0Z1bmN0aW9uKXRlc3RfaW5jcmVmX2RlY3JlZl9BUEksICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLCAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FuZF9vdmVyZmxvdywKICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FzX2RvdWJsZSIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FzX2RvdWJsZSxNRVRIX05PQVJHU30sCkBAIC0yNTc0LDYgKzI5NzEsMzIgQEAKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZV90IiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVfdCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZXZhbCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjIiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCAgTUVUSF9WQVJBUkdTfSwKKyAgICB7IndpdGhfdHBfZGVsIiwgICAgICAgICAgICAgd2l0aF90cF9kZWwsICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRlc3RfcHltZW0iLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9hbGxvYzAsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfcHltZW1fYWxsb2MwIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fc2V0cmF3YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fc2V0YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHlvYmplY3Rfc2V0YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsibm9fZG9jc3RyaW5nIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRvY3N0cmluZ19lbXB0eSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX2VtcHR5fSwKKyAgICB7ImRvY3N0cmluZ19ub19zaWduYXR1cmUiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ19ub19zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXN9LAogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGVtYmVkLmMgYi9Nb2R1bGVzL190ZXN0ZW1iZWQuYwppbmRleCA1MWI0MzlmLi5hMjFkMjUxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0ZW1iZWQuYworKysgYi9Nb2R1bGVzL190ZXN0ZW1iZWQuYwpAQCAtMSw3ICsxLDI2IEBACiAjaW5jbHVkZSA8UHl0aG9uLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotdm9pZCBwcmludF9zdWJpbnRlcnAodm9pZCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVtYmVkZGVkIGludGVycHJldGVyIHRlc3RzIHRoYXQgbmVlZCBhIGN1c3RvbSBleGUKKyAqCisgKiBFeGVjdXRlZCB2aWEgJ0VtYmVkZGluZ1Rlc3RzJyBpbiBMaWIvdGVzdC90ZXN0X2NhcGkucHkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSh2b2lkKQoreworICAgIC8qIEhBQ0s6IHRoZSAiLi8iIGF0IGZyb250IGF2b2lkcyBhIHNlYXJjaCBhbG9uZyB0aGUgUEFUSCBpbgorICAgICAgIE1vZHVsZXMvZ2V0cGF0aC5jICovCisgICAgUHlfU2V0UHJvZ3JhbU5hbWUoTCIuL190ZXN0ZW1iZWQiKTsKKyAgICBQeV9Jbml0aWFsaXplKCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUZXN0IHJlcGVhdGVkIGluaXRhbGlzYXRpb24gYW5kIHN1YmludGVycHJldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBwcmludF9zdWJpbnRlcnAodm9pZCkKIHsKICAgICAvKiBKdXN0IG91dHB1dCBzb21lIGRlYnVnIHN0dWZmICovCiAgICAgUHlUaHJlYWRTdGF0ZSAqdHMgPSBQeVRocmVhZFN0YXRlX0dldCgpOwpAQCAtMTQsNyArMzMsNyBAQAogICAgICk7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCitzdGF0aWMgdm9pZCB0ZXN0X3JlcGVhdGVkX2luaXRfYW5kX3N1YmludGVycHJldGVycyh2b2lkKQogewogICAgIFB5VGhyZWFkU3RhdGUgKm1haW5zdGF0ZSwgKnN1YnN0YXRlOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yNCwxMCArNDMsNyBAQAogCiAgICAgZm9yIChpPTA7IGk8MzsgaSsrKSB7CiAgICAgICAgIHByaW50ZigiLS0tIFBhc3MgJWQgLS0tXG4iLCBpKTsKLSAgICAgICAgLyogSEFDSzogdGhlICIuLyIgYXQgZnJvbnQgYXZvaWRzIGEgc2VhcmNoIGFsb25nIHRoZSBQQVRIIGluCi0gICAgICAgICAgIE1vZHVsZXMvZ2V0cGF0aC5jICovCi0gICAgICAgIFB5X1NldFByb2dyYW1OYW1lKEwiLi9fdGVzdGVtYmVkIik7Ci0gICAgICAgIFB5X0luaXRpYWxpemUoKTsKKyAgICAgICAgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKCk7CiAgICAgICAgIG1haW5zdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtNTQsNSArNzAsNzEgQEAKICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQobWFpbnN0YXRlKTsKICAgICAgICAgUHlfRmluYWxpemUoKTsKICAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGVzdCBmb3JjaW5nIGEgcGFydGljdWxhciBJTyBlbmNvZGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBjaGVja19zdGRpb19kZXRhaWxzKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICogZXJyb3JzKQoreworICAgIC8qIE91dHB1dCBpbmZvIGZvciB0aGUgdGVzdCBjYXNlIHRvIGNoZWNrICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZW5jb2Rpbmc6ICVzXG4iLCBlbmNvZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdFxuIik7CisgICAgfQorICAgIGlmIChlcnJvcnMpIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlcnJvcnM6ICVzXG4iLCBlcnJvcnMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZXJyb3JzOiBkZWZhdWx0XG4iKTsKKyAgICB9CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgLyogRm9yY2UgdGhlIGdpdmVuIElPIGVuY29kaW5nICovCisgICAgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhlbmNvZGluZywgZXJyb3JzKTsKKyAgICBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUoKTsKKyAgICBQeVJ1bl9TaW1wbGVTdHJpbmcoCisgICAgICAgICJpbXBvcnQgc3lzOyIKKyAgICAgICAgInByaW50KCdzdGRpbjogezAuZW5jb2Rpbmd9OnswLmVycm9yc30nLmZvcm1hdChzeXMuc3RkaW4pKTsiCisgICAgICAgICJwcmludCgnc3Rkb3V0OiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRvdXQpKTsiCisgICAgICAgICJwcmludCgnc3RkZXJyOiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRlcnIpKTsiCisgICAgICAgICJzeXMuc3Rkb3V0LmZsdXNoKCkiCisgICAgKTsKKyAgICBQeV9GaW5hbGl6ZSgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZyh2b2lkKQoreworICAgIC8qIENoZWNrIHZhcmlvdXMgY29tYmluYXRpb25zICovCisgICAgcHJpbnRmKCItLS0gVXNlIGRlZmF1bHRzIC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscyhOVUxMLCBOVUxMKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZXJyb3JzIG9ubHkgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKE5VTEwsICJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZW5jb2Rpbmcgb25seSAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoImxhdGluLTEiLCBOVUxMKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZW5jb2RpbmcgYW5kIGVycm9ycyAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoImxhdGluLTEiLCAic3Vycm9nYXRlZXNjYXBlIik7CisKKyAgICAvKiBDaGVjayBjYWxsaW5nIGFmdGVyIGluaXRpYWxpemF0aW9uIGZhaWxzICovCisgICAgUHlfSW5pdGlhbGl6ZSgpOworCisgICAgaWYgKFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoTlVMTCwgTlVMTCkgPT0gMCkgeworICAgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmciKTsKKyAgICB9CisgICAgUHlfRmluYWxpemUoKTsKK30KKworLyogRGlmZmVyZW50IGVtYmVkZGluZyB0ZXN0cyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKworICAgIC8qIFRPRE86IENoZWNrIHRoZSBhcmd1bWVudCBzdHJpbmcgdG8gYWxsb3cgZm9yIG1vcmUgdGVzdCBjYXNlcyAqLworICAgIGlmIChhcmdjID4gMSkgeworICAgICAgICAvKiBGb3Igbm93OiBhc3N1bWUgImZvcmNlZF9pb19lbmNvZGluZyAqLworICAgICAgICB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFJ1biB0aGUgb3JpZ2luYWwgZW1iZWRkaW5nIHRlc3QgY2FzZSBieSBkZWZhdWx0ICovCisgICAgICAgIHRlc3RfcmVwZWF0ZWRfaW5pdF9hbmRfc3ViaW50ZXJwcmV0ZXJzKCk7CisgICAgfQogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMgYi9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2FlYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIEMgZXh0ZW5zaW9ucyBtb2R1bGUgdG8gdGVzdCBpbXBvcnRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBjb21waWxlZAorICogZmlsZSAoaXNzdWUxNjQyMSkuIFRoaXMgZmlsZSBkZWZpbmVzIDMgbW9kdWxlcyAoX3Rlc3RpbXBvcnRtb2R1bGUsCisgKiBmb28sIGJhciksIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyBjYWxsZWQgdGhlIHNhbWUgYXMgdGhlIGNvbXBpbGVkIGZpbGUuCisgKi8KKyNpbmNsdWRlPFB5dGhvbi5oPgorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF90ZXN0aW1wb3J0bXVsdGlwbGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZSBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGUodm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfdGVzdGltcG9ydG11bHRpcGxlKTsKK30KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfZm9vbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28iLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2ZvbyBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX2Zvb21vZHVsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2Jhcm1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfYmFyIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIgZG9jIiwKKyAgICAtMSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DIFB5SW5pdF9fdGVzdGltcG9ydG11bHRpcGxlX2Jhcih2b2lkKXsKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfYmFybW9kdWxlKTsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwppbmRleCBkMWRjNjFkLi5hYjBmZWE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYworKysgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwpAQCAtMTcsNiArMTcsOCBAQAogc3RhdGljIGxvbmcgbmJfdGhyZWFkcyA9IDA7CiBzdGF0aWMgUHlPYmplY3QgKnN0cl9kaWN0OwogCitfUHlfSURFTlRJRklFUihzdGRlcnIpOworCiAvKiBMb2NrIG9iamVjdHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNjgsNyArNzAsNyBAQAogICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAgICAgciA9IFB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChsb2NrLCBtaWNyb3NlY29uZHMsIDEpOwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChyID09IFBZX0xPQ0tfSU5UUikgewogICAgICAgICAgICAgLyogUnVuIHNpZ25hbCBoYW5kbGVycyBpZiB3ZSB3ZXJlIGludGVycnVwdGVkLiAgUHJvcGFnYXRlCkBAIC0yNTUsMTQgKzI1NywxNyBAQAogc3RhdGljIHZvaWQKIHJsb2NrX2RlYWxsb2MocmxvY2tvYmplY3QgKnNlbGYpCiB7Ci0gICAgYXNzZXJ0KHNlbGYtPnJsb2NrX2xvY2spOwogICAgIGlmIChzZWxmLT5pbl93ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKLSAgICAvKiBVbmxvY2sgdGhlIGxvY2sgc28gaXQncyBzYWZlIHRvIGZyZWUgaXQgKi8KLSAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwKQotICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgLyogc2VsZi0+cmxvY2tfbG9jayBjYW4gYmUgTlVMTCBpZiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgZmFpbGVkCisgICAgICAgaW4gcmxvY2tfbmV3KCkgKi8KKyAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLworICAgICAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwKQorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOwogCi0gICAgUHlUaHJlYWRfZnJlZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOworICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgfQogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7CiB9CiAKQEAgLTQ1MiwxNSArNDU3LDE2IEBACiAKICAgICBzZWxmID0gKHJsb2Nrb2JqZWN0ICopIHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwogICAgIGlmIChzZWxmICE9IE5VTEwpIHsKLSAgICAgICAgc2VsZi0+cmxvY2tfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKLSAgICAgICAgaWYgKHNlbGYtPnJsb2NrX2xvY2sgPT0gTlVMTCkgewotICAgICAgICAgICAgdHlwZS0+dHBfZnJlZShzZWxmKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUaHJlYWRFcnJvciwgImNhbid0IGFsbG9jYXRlIGxvY2siKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKICAgICAgICAgc2VsZi0+cmxvY2tfb3duZXIgPSAwOwogICAgICAgICBzZWxmLT5ybG9ja19jb3VudCA9IDA7CisKKyAgICAgICAgc2VsZi0+cmxvY2tfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICAgICAgaWYgKHNlbGYtPnJsb2NrX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRocmVhZEVycm9yLCAiY2FuJ3QgYWxsb2NhdGUgbG9jayIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7CkBAIC03NDEsNyArNzQ3LDcgQEAKICAgICB3ciA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIHNlbGYsIE5VTEwpOwogICAgIGlmICh3ciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKLSAgICBzZWxmLT53cl9jYWxsYmFjayA9IFB5Q0Z1bmN0aW9uX05ldygmd3JfY2FsbGJhY2tfZGVmLCB3cik7CisgICAgc2VsZi0+d3JfY2FsbGJhY2sgPSBQeUNGdW5jdGlvbl9OZXdFeCgmd3JfY2FsbGJhY2tfZGVmLCB3ciwgTlVMTCk7CiAgICAgUHlfREVDUkVGKHdyKTsKICAgICBpZiAoc2VsZi0+d3JfY2FsbGJhY2sgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7CkBAIC0xMDAxLDcgKzEwMDcsNyBAQAogICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoCiAgICAgICAgICAgICAgICAgIlVuaGFuZGxlZCBleGNlcHRpb24gaW4gdGhyZWFkIHN0YXJ0ZWQgYnkgIik7CiAgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsdWUsICZ0Yik7Ci0gICAgICAgICAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICAgICAgICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICAgICAgICAgIGlmIChmaWxlICE9IE5VTEwgJiYgZmlsZSAhPSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChib290LT5mdW5jLCBmaWxlLCAwKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTExNzIsNiArMTE3OCw2NiBAQAogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgYW5kIHNwZWNpYWxpemVkIHB1cnBvc2VzIG9ubHkuXG5cCiBJbiBtb3N0IGFwcGxpY2F0aW9ucyBgdGhyZWFkaW5nLmVudW1lcmF0ZSgpYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiIpOwogCitzdGF0aWMgdm9pZAorcmVsZWFzZV9zZW50aW5lbCh2b2lkICp3cikKK3sKKyAgICAvKiBUcmlja3k6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlCisgICAgICAgaXMgYmVpbmcgZGVsZXRlZC4gIFRoZXJlZm9yZSwgb25seSBzaW1wbGUgQyBjb2RlIGNhbiBzYWZlbHkKKyAgICAgICBleGVjdXRlIGhlcmUuICovCisgICAgUHlPYmplY3QgKm9iaiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHdyKTsKKyAgICBsb2Nrb2JqZWN0ICpsb2NrOworICAgIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICBhc3NlcnQoUHlfVFlQRShvYmopID09ICZMb2NrdHlwZSk7CisgICAgICAgIGxvY2sgPSAobG9ja29iamVjdCAqKSBvYmo7CisgICAgICAgIGlmIChsb2NrLT5sb2NrZWQpIHsKKyAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhsb2NrLT5sb2NrX2xvY2spOworICAgICAgICAgICAgbG9jay0+bG9ja2VkID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBEZWFsbG9jYXRpbmcgYSB3ZWFrcmVmIHdpdGggYSBOVUxMIGNhbGxiYWNrIG9ubHkgY2FsbHMKKyAgICAgICBQeU9iamVjdF9HQ19EZWwoKSwgd2hpY2ggY2FuJ3QgY2FsbCBhbnkgUHl0aG9uIGNvZGUuICovCisgICAgUHlfREVDUkVGKHdyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RocmVhZF9fc2V0X3NlbnRpbmVsKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp3cjsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOworICAgIGxvY2tvYmplY3QgKmxvY2s7CisKKyAgICBpZiAodHN0YXRlLT5vbl9kZWxldGVfZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIC8qIFdlIG11c3Qgc3VwcG9ydCB0aGUgcmUtY3JlYXRpb24gb2YgdGhlIGxvY2sgZnJvbSBhCisgICAgICAgICAgIGZvcmsoKWVkIGNoaWxkLiAqLworICAgICAgICBhc3NlcnQodHN0YXRlLT5vbl9kZWxldGUgPT0gJnJlbGVhc2Vfc2VudGluZWwpOworICAgICAgICB3ciA9IChQeU9iamVjdCAqKSB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSBOVUxMOworICAgICAgICBQeV9ERUNSRUYod3IpOworICAgIH0KKyAgICBsb2NrID0gbmV3bG9ja29iamVjdCgpOworICAgIGlmIChsb2NrID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFRoZSBsb2NrIGlzIG93bmVkIGJ5IHdob2V2ZXIgY2FsbGVkIF9zZXRfc2VudGluZWwoKSwgYnV0IHRoZSB3ZWFrcmVmCisgICAgICAgaGFuZ3MgdG8gdGhlIHRocmVhZCBzdGF0ZS4gKi8KKyAgICB3ciA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIGxvY2ssIE5VTEwpOworICAgIGlmICh3ciA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihsb2NrKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSAodm9pZCAqKSB3cjsKKyAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9ICZyZWxlYXNlX3NlbnRpbmVsOworICAgIHJldHVybiAoUHlPYmplY3QgKikgbG9jazsKK30KKworUHlEb2NfU1RSVkFSKF9zZXRfc2VudGluZWxfZG9jLAorIl9zZXRfc2VudGluZWwoKSAtPiBsb2NrXG5cCitcblwKK1NldCBhIHNlbnRpbmVsIGxvY2sgdGhhdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkXG5cCitzdGF0ZSBpcyBmaW5hbGl6ZWQgKGFmdGVyIGl0IGlzIHVudGllZCBmcm9tIHRoZSBpbnRlcnByZXRlcikuXG5cCitcblwKK1RoaXMgaXMgYSBwcml2YXRlIEFQSSBmb3IgdGhlIHRocmVhZGluZyBtb2R1bGUuIik7CisKIHN0YXRpYyBQeU9iamVjdCAqCiB0aHJlYWRfc3RhY2tfc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0xMjQ3LDYgKzEzMTMsOCBAQAogICAgICBNRVRIX05PQVJHUywgX2NvdW50X2RvY30sCiAgICAgeyJzdGFja19zaXplIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfc3RhY2tfc2l6ZSwKICAgICAgTUVUSF9WQVJBUkdTLCBzdGFja19zaXplX2RvY30sCisgICAgeyJfc2V0X3NlbnRpbmVsIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfX3NldF9zZW50aW5lbCwKKyAgICAgTUVUSF9OT0FSR1MsIF9zZXRfc2VudGluZWxfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190a2ludGVyLmMgYi9Nb2R1bGVzL190a2ludGVyLmMKaW5kZXggZWNhZDU0MS4uZTAyMmE3YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGtpbnRlci5jCisrKyBiL01vZHVsZXMvX3RraW50ZXIuYwpAQCAtMTI4LDUyICsxMjgsNjAgQEAKIAogLyogVGhlIHRocmVhZGluZyBzaXR1YXRpb24gaXMgY29tcGxpY2F0ZWQuICBUY2wgaXMgbm90IHRocmVhZC1zYWZlLCBleGNlcHQKICAgIHdoZW4gY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXRocmVhZHMuCi0gICBTbyB3ZSBuZWVkIHRvIHVzZSBhIGxvY2sgYXJvdW5kIGFsbCB1c2VzIG9mIFRjbC4gIFByZXZpb3VzbHksIHRoZSBQeXRob24KLSAgIGludGVycHJldGVyIGxvY2sgd2FzIHVzZWQgZm9yIHRoaXMuICBIb3dldmVyLCB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3aGVuCi0gICBvdGhlciBQeXRob24gdGhyZWFkcyBuZWVkIHRvIHJ1biB3aGlsZSBUY2wgaXMgYmxvY2tlZCB3YWl0aW5nIGZvciBldmVudHMuCiAKLSAgIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYSBzZXBhcmF0ZSBsb2NrIGZvciBUY2wgaXMgaW50cm9kdWNlZC4gIEhvbGRpbmcgaXQKLSAgIGlzIGluY29tcGF0aWJsZSB3aXRoIGhvbGRpbmcgUHl0aG9uJ3MgaW50ZXJwcmV0ZXIgbG9jay4gIFRoZSBmb2xsb3dpbmcgZm91cgotICAgbWFjcm9zIG1hbmlwdWxhdGUgYm90aCBsb2NrcyB0b2dldGhlci4KKyAgIFNvIHdlIG5lZWQgdG8gdXNlIGEgbG9jayBhcm91bmQgYWxsIHVzZXMgb2YgVGNsLiAgUHJldmlvdXNseSwgdGhlCisgICBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayB3YXMgdXNlZCBmb3IgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzCisgICBwcm9ibGVtcyB3aGVuIG90aGVyIFB5dGhvbiB0aHJlYWRzIG5lZWQgdG8gcnVuIHdoaWxlIFRjbCBpcyBibG9ja2VkCisgICB3YWl0aW5nIGZvciBldmVudHMuCiAKLSAgIEVOVEVSX1RDTCBhbmQgTEVBVkVfVENMIGFyZSBicmFja2V0cywganVzdCBsaWtlIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgYW5kCi0gICBQeV9FTkRfQUxMT1dfVEhSRUFEUy4gIFRoZXkgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYSBjYWxsIGludG8gVGNsIGlzIG1hZGUKLSAgIHRoYXQgY291bGQgY2FsbCBhbiBldmVudCBoYW5kbGVyLCBvciBvdGhlcndpc2UgYWZmZWN0IHRoZSBzdGF0ZSBvZiBhIFRjbAotICAgaW50ZXJwcmV0ZXIuICBUaGVzZSBhc3N1bWUgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgdGhlIFB5dGhvbgotICAgaW50ZXJwcmV0ZXIgbG9jazsgaW5zaWRlIHRoZSBicmFja2V0cywgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGhhcyBiZWVuCi0gICByZWxlYXNlZCBhbmQgdGhlIGxvY2sgZm9yIFRjbCBoYXMgYmVlbiBhY3F1aXJlZC4KKyAgIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYSBzZXBhcmF0ZSBsb2NrIGZvciBUY2wgaXMgaW50cm9kdWNlZC4KKyAgIEhvbGRpbmcgaXQgaXMgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBQeXRob24ncyBpbnRlcnByZXRlciBsb2NrLgorICAgVGhlIGZvbGxvd2luZyBmb3VyIG1hY3JvcyBtYW5pcHVsYXRlIGJvdGggbG9ja3MgdG9nZXRoZXIuCiAKLSAgIFNvbWV0aW1lcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCB0aGUgUHl0aG9uIGxvY2sgYW5kIHRoZSBUY2wgbG9jay4KLSAgIChGb3IgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBUY2wgaW50ZXJwcmV0ZXIgcmVzdWx0IHRvIGEKLSAgIFB5dGhvbiBzdHJpbmcgb2JqZWN0LikgIFRoaXMgY2FuIGJlIGRvbmUgYnkgdXNpbmcgZGlmZmVyZW50IG1hY3JvcyB0byBjbG9zZQotICAgdGhlIEVOVEVSX1RDTCBibG9jazogRU5URVJfT1ZFUkxBUCByZWFjcXVpcmVzIHRoZSBQeXRob24gbG9jayAoYW5kIHJlc3RvcmVzCi0gICB0aGUgdGhyZWFkIHN0YXRlKSBidXQgZG9lc24ndCByZWxlYXNlIHRoZSBUY2wgbG9jazsgTEVBVkVfT1ZFUkxBUF9UQ0wKLSAgIHJlbGVhc2VzIHRoZSBUY2wgbG9jay4KKyAgIEVOVEVSX1RDTCBhbmQgTEVBVkVfVENMIGFyZSBicmFja2V0cywganVzdCBsaWtlCisgICBQeV9CRUdJTl9BTExPV19USFJFQURTIGFuZCBQeV9FTkRfQUxMT1dfVEhSRUFEUy4gIFRoZXkgc2hvdWxkIGJlCisgICB1c2VkIHdoZW5ldmVyIGEgY2FsbCBpbnRvIFRjbCBpcyBtYWRlIHRoYXQgY291bGQgY2FsbCBhbiBldmVudAorICAgaGFuZGxlciwgb3Igb3RoZXJ3aXNlIGFmZmVjdCB0aGUgc3RhdGUgb2YgYSBUY2wgaW50ZXJwcmV0ZXIuICBUaGVzZQorICAgYXNzdW1lIHRoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaGFzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jazsKKyAgIGluc2lkZSB0aGUgYnJhY2tldHMsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayBoYXMgYmVlbiByZWxlYXNlZAorICAgYW5kIHRoZSBsb2NrIGZvciBUY2wgaGFzIGJlZW4gYWNxdWlyZWQuCisKKyAgIFNvbWV0aW1lcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCB0aGUgUHl0aG9uIGxvY2sgYW5kIHRoZSBUY2wKKyAgIGxvY2suICAoRm9yIGV4YW1wbGUsIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSB0aGUgVGNsCisgICBpbnRlcnByZXRlciByZXN1bHQgdG8gYSBQeXRob24gc3RyaW5nIG9iamVjdC4pICBUaGlzIGNhbiBiZSBkb25lIGJ5CisgICB1c2luZyBkaWZmZXJlbnQgbWFjcm9zIHRvIGNsb3NlIHRoZSBFTlRFUl9UQ0wgYmxvY2s6IEVOVEVSX09WRVJMQVAKKyAgIHJlYWNxdWlyZXMgdGhlIFB5dGhvbiBsb2NrIChhbmQgcmVzdG9yZXMgdGhlIHRocmVhZCBzdGF0ZSkgYnV0CisgICBkb2Vzbid0IHJlbGVhc2UgdGhlIFRjbCBsb2NrOyBMRUFWRV9PVkVSTEFQX1RDTCByZWxlYXNlcyB0aGUgVGNsCisgICBsb2NrLgogCiAgICBCeSBjb250cmFzdCwgRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04gYXJlIHVzZWQgaW4gVGNsIGV2ZW50Ci0gICBoYW5kbGVycyB3aGVuIHRoZSBoYW5kbGVyIG5lZWRzIHRvIHVzZSBQeXRob24uICBTdWNoIGV2ZW50IGhhbmRsZXJzIGFyZQotICAgZW50ZXJlZCB3aGlsZSB0aGUgbG9jayBmb3IgVGNsIGlzIGhlbGQ7IHRoZSBldmVudCBoYW5kbGVyIHByZXN1bWFibHkgbmVlZHMKLSAgIHRvIHVzZSBQeXRob24uICBFTlRFUl9QWVRIT04gcmVsZWFzZXMgdGhlIGxvY2sgZm9yIFRjbCBhbmQgYWNxdWlyZXMKLSAgIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jaywgcmVzdG9yaW5nIHRoZSBhcHByb3ByaWF0ZSB0aHJlYWQgc3RhdGUsIGFuZAotICAgTEVBVkVfUFlUSE9OIHJlbGVhc2VzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayBhbmQgcmUtYWNxdWlyZXMgdGhlIGxvY2sKLSAgIGZvciBUY2wuICBJdCBpcyBva2F5IGZvciBFTlRFUl9UQ0wvTEVBVkVfVENMIHBhaXJzIHRvIGJlIGNvbnRhaW5lZCBpbnNpZGUKLSAgIHRoZSBjb2RlIGJldHdlZW4gRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04uCisgICBoYW5kbGVycyB3aGVuIHRoZSBoYW5kbGVyIG5lZWRzIHRvIHVzZSBQeXRob24uICBTdWNoIGV2ZW50IGhhbmRsZXJzCisgICBhcmUgZW50ZXJlZCB3aGlsZSB0aGUgbG9jayBmb3IgVGNsIGlzIGhlbGQ7IHRoZSBldmVudCBoYW5kbGVyCisgICBwcmVzdW1hYmx5IG5lZWRzIHRvIHVzZSBQeXRob24uICBFTlRFUl9QWVRIT04gcmVsZWFzZXMgdGhlIGxvY2sgZm9yCisgICBUY2wgYW5kIGFjcXVpcmVzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jaywgcmVzdG9yaW5nIHRoZQorICAgYXBwcm9wcmlhdGUgdGhyZWFkIHN0YXRlLCBhbmQgTEVBVkVfUFlUSE9OIHJlbGVhc2VzIHRoZSBQeXRob24KKyAgIGludGVycHJldGVyIGxvY2sgYW5kIHJlLWFjcXVpcmVzIHRoZSBsb2NrIGZvciBUY2wuICBJdCBpcyBva2F5IGZvcgorICAgRU5URVJfVENML0xFQVZFX1RDTCBwYWlycyB0byBiZSBjb250YWluZWQgaW5zaWRlIHRoZSBjb2RlIGJldHdlZW4KKyAgIEVOVEVSX1BZVEhPTiBhbmQgTEVBVkVfUFlUSE9OLgogCi0gICBUaGVzZSBsb2NrcyBleHBhbmQgdG8gc2V2ZXJhbCBzdGF0ZW1lbnRzIGFuZCBicmFja2V0czsgdGhleSBzaG91bGQgbm90IGJlCi0gICB1c2VkIGluIGJyYW5jaGVzIG9mIGlmIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLgorICAgVGhlc2UgbG9ja3MgZXhwYW5kIHRvIHNldmVyYWwgc3RhdGVtZW50cyBhbmQgYnJhY2tldHM7IHRoZXkgc2hvdWxkCisgICBub3QgYmUgdXNlZCBpbiBicmFuY2hlcyBvZiBpZiBzdGF0ZW1lbnRzIGFuZCB0aGUgbGlrZS4KIAotICAgSWYgVGNsIGlzIHRocmVhZGVkLCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsgYW55bW9yZS4gVGhlIFRjbCBpbnRlcnByZXRlciBpcwotICAgb25seSB2YWxpZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCBpdCwgYW5kIGFsbCBUayBhY3Rpdml0eSBtdXN0IGhhcHBlbiBpbiB0aGlzCi0gICB0aHJlYWQsIGFsc28uIFRoYXQgbWVhbnMgdGhhdCB0aGUgbWFpbmxvb3AgbXVzdCBiZSBpbnZva2VkIGluIHRoZSB0aHJlYWQgdGhhdAotICAgY3JlYXRlZCB0aGUgaW50ZXJwcmV0ZXIuIEludm9raW5nIGNvbW1hbmRzIGZyb20gb3RoZXIgdGhyZWFkcyBpcyBwb3NzaWJsZTsKLSAgIF90a2ludGVyIHdpbGwgcXVldWUgYW4gZXZlbnQgZm9yIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHdoaWNoIHdpbGwgdGhlbgotICAgZXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgcGFzcyBiYWNrIHRoZSByZXN1bHQuIElmIHRoZSBtYWluIHRocmVhZCBpcyBub3QgaW4gdGhlCi0gICBtYWlubG9vcCwgYW5kIGludm9raW5nIGNvbW1hbmRzIGNhdXNlcyBhbiBleGNlcHRpb247IGlmIHRoZSBtYWluIGxvb3AgaXMgcnVubmluZwotICAgYnV0IG5vdCBwcm9jZXNzaW5nIGV2ZW50cywgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiB3aWxsIGJsb2NrLgorICAgSWYgVGNsIGlzIHRocmVhZGVkLCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsgYW55bW9yZS4gVGhlIFRjbAorICAgaW50ZXJwcmV0ZXIgaXMgb25seSB2YWxpZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCBpdCwgYW5kIGFsbCBUaworICAgYWN0aXZpdHkgbXVzdCBoYXBwZW4gaW4gdGhpcyB0aHJlYWQsIGFsc28uIFRoYXQgbWVhbnMgdGhhdCB0aGUKKyAgIG1haW5sb29wIG11c3QgYmUgaW52b2tlZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUKKyAgIGludGVycHJldGVyLiBJbnZva2luZyBjb21tYW5kcyBmcm9tIG90aGVyIHRocmVhZHMgaXMgcG9zc2libGU7CisgICBfdGtpbnRlciB3aWxsIHF1ZXVlIGFuIGV2ZW50IGZvciB0aGUgaW50ZXJwcmV0ZXIgdGhyZWFkLCB3aGljaCB3aWxsCisgICB0aGVuIGV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIHBhc3MgYmFjayB0aGUgcmVzdWx0LiBJZiB0aGUgbWFpbgorICAgdGhyZWFkIGlzIG5vdCBpbiB0aGUgbWFpbmxvb3AsIGFuZCBpbnZva2luZyBjb21tYW5kcyBjYXVzZXMgYW4KKyAgIGV4Y2VwdGlvbjsgaWYgdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nIGJ1dCBub3QgcHJvY2Vzc2luZyBldmVudHMsCisgICB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdpbGwgYmxvY2suCiAKLSAgIEluIGFkZGl0aW9uLCBmb3IgYSB0aHJlYWRlZCBUY2wsIGEgc2luZ2xlIGdsb2JhbCB0Y2xfdHN0YXRlIHdvbid0IGJlIHN1ZmZpY2llbnQKLSAgIGFueW1vcmUsIHNpbmNlIG11bHRpcGxlIFRjbCBpbnRlcnByZXRlcnMgbWF5IHNpbXVsdGFuZW91c2x5IGRpc3BhdGNoIGluIGRpZmZlcmVudAotICAgdGhyZWFkcy4gU28gd2UgdXNlIHRoZSBUY2wgVExTIEFQSS4KKyAgIEluIGFkZGl0aW9uLCBmb3IgYSB0aHJlYWRlZCBUY2wsIGEgc2luZ2xlIGdsb2JhbCB0Y2xfdHN0YXRlIHdvbid0CisgICBiZSBzdWZmaWNpZW50IGFueW1vcmUsIHNpbmNlIG11bHRpcGxlIFRjbCBpbnRlcnByZXRlcnMgbWF5CisgICBzaW11bHRhbmVvdXNseSBkaXNwYXRjaCBpbiBkaWZmZXJlbnQgdGhyZWFkcy4gU28gd2UgdXNlIHRoZSBUY2wgVExTCisgICBBUEkuCiAKICovCiAKQEAgLTE4Miw3ICsxOTAsOCBAQAogI2lmZGVmIFRDTF9USFJFQURTCiBzdGF0aWMgVGNsX1RocmVhZERhdGFLZXkgc3RhdGVfa2V5OwogdHlwZWRlZiBQeVRocmVhZFN0YXRlICpUaHJlYWRTcGVjaWZpY0RhdGE7Ci0jZGVmaW5lIHRjbF90c3RhdGUgKCooUHlUaHJlYWRTdGF0ZSoqKVRjbF9HZXRUaHJlYWREYXRhKCZzdGF0ZV9rZXksIHNpemVvZihQeVRocmVhZFN0YXRlKikpKQorI2RlZmluZSB0Y2xfdHN0YXRlIFwKKyAgICAoKihQeVRocmVhZFN0YXRlKiopVGNsX0dldFRocmVhZERhdGEoJnN0YXRlX2tleSwgc2l6ZW9mKFB5VGhyZWFkU3RhdGUqKSkpCiAjZWxzZQogc3RhdGljIFB5VGhyZWFkU3RhdGUgKnRjbF90c3RhdGUgPSBOVUxMOwogI2VuZGlmCkBAIC0xOTIsNyArMjAxLDggQEAKICAgICAgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHRjbF9sb2NrLCAxKTsgdGNsX3RzdGF0ZSA9IHRzdGF0ZTsKIAogI2RlZmluZSBMRUFWRV9UQ0wgXAotICAgIHRjbF90c3RhdGUgPSBOVUxMOyBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeV9FTkRfQUxMT1dfVEhSRUFEU30KKyAgICB0Y2xfdHN0YXRlID0gTlVMTDsgXAorICAgIGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5X0VORF9BTExPV19USFJFQURTfQogCiAjZGVmaW5lIEVOVEVSX09WRVJMQVAgXAogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC0yMDIsNyArMjEyLDggQEAKIAogI2RlZmluZSBFTlRFUl9QWVRIT04gXAogICAgIHsgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gdGNsX3RzdGF0ZTsgdGNsX3RzdGF0ZSA9IE5VTEw7IFwKLSAgICAgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKHRzdGF0ZSkpOyB9CisgICAgICAgIGlmKHRjbF9sb2NrKSBcCisgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKHRzdGF0ZSkpOyB9CiAKICNkZWZpbmUgTEVBVkVfUFlUSE9OIFwKICAgICB7IFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5RXZhbF9TYXZlVGhyZWFkKCk7IFwKQEAgLTIxMSw3ICsyMjIsOCBAQAogI2RlZmluZSBDSEVDS19UQ0xfQVBQQVJUTUVOVCBcCiAgICAgaWYgKCgoVGthcHBPYmplY3QgKilzZWxmKS0+dGhyZWFkZWQgJiYgXAogICAgICAgICAoKFRrYXBwT2JqZWN0ICopc2VsZiktPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7IFwKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIkNhbGxpbmcgVGNsIGZyb20gZGlmZmVyZW50IGFwcGFydG1lbnQiKTsgXAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FsbGluZyBUY2wgZnJvbSBkaWZmZXJlbnQgYXBwYXJ0bWVudCIpOyBcCiAgICAgICAgIHJldHVybiAwOyBcCiAgICAgfQogCkBAIC0yMzMsNyArMjQ1LDcgQEAKIAogLyoqKiogVGthcHAgT2JqZWN0IERlY2xhcmF0aW9uICoqKiovCiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGthcHBfVHlwZTsKK3N0YXRpYyBQeU9iamVjdCAqVGthcHBfVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTI1Myw3ICsyNjUsNiBAQAogICAgIFRjbF9PYmpUeXBlICpTdHJpbmdUeXBlOwogfSBUa2FwcE9iamVjdDsKIAotI2RlZmluZSBUa2FwcF9DaGVjayh2KSAoUHlfVFlQRSh2KSA9PSAmVGthcHBfVHlwZSkKICNkZWZpbmUgVGthcHBfSW50ZXJwKHYpICgoKFRrYXBwT2JqZWN0ICopICh2KSktPmludGVycCkKICNkZWZpbmUgVGthcHBfUmVzdWx0KHYpIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHYpKQogCkBAIC0zMjYsMTEwICszMzcsOSBAQAogI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCiAKIAotc3RhdGljIGNoYXIgKgotQXNTdHJpbmcoUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdG1wKQotewotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfQXNTdHJpbmcodmFsdWUpOwotICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4KHZhbHVlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeU9iamVjdF9TdHIodmFsdWUpOwotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHRtcCwgdikgIT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0FzVVRGOCh2KTsKLSAgICB9Ci19Ci0KLQogCiAjZGVmaW5lIEFSR1NaIDY0CiAKLXN0YXRpYyBjaGFyICoKLU1lcmdlKFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICp0bXAgPSBOVUxMOwotICAgIGNoYXIgKmFyZ3ZTdG9yZVtBUkdTWl07Ci0gICAgY2hhciAqKmFyZ3YgPSBOVUxMOwotICAgIGludCBmdlN0b3JlW0FSR1NaXTsKLSAgICBpbnQgKmZ2ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGFyZ2MgPSAwLCBmdmMgPSAwLCBpOwotICAgIGNoYXIgKnJlcyA9IE5VTEw7Ci0KLSAgICBpZiAoISh0bXAgPSBQeUxpc3RfTmV3KDApKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBhcmd2ID0gYXJndlN0b3JlOwotICAgIGZ2ID0gZnZTdG9yZTsKLQotICAgIGlmIChhcmdzID09IE5VTEwpCi0gICAgICAgIGFyZ2MgPSAwOwotCi0gICAgZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgYXJnYyA9IDE7Ci0gICAgICAgIGZ2WzBdID0gMDsKLSAgICAgICAgaWYgKCEoYXJndlswXSA9IEFzU3RyaW5nKGFyZ3MsIHRtcCkpKQotICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKLQotICAgICAgICBpZiAoYXJnYyA+IEFSR1NaKSB7Ci0gICAgICAgICAgICBpZiAoIUNIRUNLX1NJWkUoYXJnYywgc2l6ZW9mKGNoYXIgKikpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJ0dXBsZSBpcyB0b28gbG9uZyIpOwotICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZ3YgPSAoY2hhciAqKilja2FsbG9jKChzaXplX3QpYXJnYyAqIHNpemVvZihjaGFyICopKTsKLSAgICAgICAgICAgIGZ2ID0gKGludCAqKWNrYWxsb2MoKHNpemVfdClhcmdjICogc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgaWYgKGFyZ3YgPT0gTlVMTCB8fCBmdiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR2V0SXRlbShhcmdzLCBpKTsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgZnZbaV0gPSAxOwotICAgICAgICAgICAgICAgIGlmICghKGFyZ3ZbaV0gPSBNZXJnZSh2KSkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgICAgICBmdmMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHYgPT0gUHlfTm9uZSkgewotICAgICAgICAgICAgICAgIGFyZ2MgPSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnZbaV0gPSAwOwotICAgICAgICAgICAgICAgIGlmICghKGFyZ3ZbaV0gPSBBc1N0cmluZyh2LCB0bXApKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgICAgIGZ2YysrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJlcyA9IFRjbF9NZXJnZShhcmdjLCBhcmd2KTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCAibWVyZ2UgZmFpbGVkIik7Ci0KLSAgZmluYWxseToKLSAgICBmb3IgKGkgPSAwOyBpIDwgZnZjOyBpKyspCi0gICAgICAgIGlmIChmdltpXSkgewotICAgICAgICAgICAgY2tmcmVlKGFyZ3ZbaV0pOwotICAgICAgICB9Ci0gICAgaWYgKGFyZ3YgIT0gYXJndlN0b3JlKQotICAgICAgICBja2ZyZWUoRlJFRUNBU1QgYXJndik7Ci0gICAgaWYgKGZ2ICE9IGZ2U3RvcmUpCi0gICAgICAgIGNrZnJlZShGUkVFQ0FTVCBmdik7Ci0KLSAgICBQeV9ERUNSRUYodG1wKTsKLSAgICByZXR1cm4gcmVzOwotfQotCiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ0MCw4ICszNTAsNyBAQAogICAgIFB5T2JqZWN0ICp2OwogCiAgICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKICAgICBpZiAoVGNsX1NwbGl0TGlzdCgoVGNsX0ludGVycCAqKU5VTEwsIGxpc3QsICZhcmdjLCAmYXJndikgIT0gVENMX09LKSB7CkBAIC00NzMsOSArMzgyLDkgQEAKICAgICByZXR1cm4gdjsKIH0KIAotLyogSW4gc29tZSBjYXNlcywgVGNsIHdpbGwgc3RpbGwgcmV0dXJuIHN0cmluZ3MgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUKLSAgIGxpc3RzLiBTcGxpdE9iaiB3YWxrcyB0aHJvdWdoIGEgbmVzdGVkIHR1cGxlLCBmaW5kaW5nIHN0cmluZyBvYmplY3RzIHRoYXQKLSAgIG5lZWQgdG8gYmUgc3BsaXQuICovCisvKiBJbiBzb21lIGNhc2VzLCBUY2wgd2lsbCBzdGlsbCByZXR1cm4gc3RyaW5ncyB0aGF0IGFyZSBzdXBwb3NlZCB0bworICAgYmUgbGlzdHMuIFNwbGl0T2JqIHdhbGtzIHRocm91Z2ggYSBuZXN0ZWQgdHVwbGUsIGZpbmRpbmcgc3RyaW5nCisgICBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBzcGxpdC4gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKIFNwbGl0T2JqKFB5T2JqZWN0ICphcmcpCkBAIC02MDcsOSArNTE2LDEwIEBACiAgICAgVGthcHBPYmplY3QgKnY7CiAgICAgY2hhciAqYXJndjA7CiAKLSAgICB2ID0gUHlPYmplY3RfTmV3KFRrYXBwT2JqZWN0LCAmVGthcHBfVHlwZSk7CisgICAgdiA9IFB5T2JqZWN0X05ldyhUa2FwcE9iamVjdCwgKFB5VHlwZU9iamVjdCAqKSBUa2FwcF9UeXBlKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoVGthcHBfVHlwZSk7CiAKICAgICB2LT5pbnRlcnAgPSBUY2xfQ3JlYXRlSW50ZXJwKCk7CiAgICAgdi0+d2FudG9iamVjdHMgPSB3YW50b2JqZWN0czsKQEAgLTYyMCw3ICs1MzAsOCBAQAogCiAjaWZuZGVmIFRDTF9USFJFQURTCiAgICAgaWYgKHYtPnRocmVhZGVkKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJUY2wgaXMgdGhyZWFkZWQgYnV0IF90a2ludGVyIGlzIG5vdCIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRjbCBpcyB0aHJlYWRlZCBidXQgX3RraW50ZXIgaXMgbm90Iik7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNzU3LDE2ICs2NjgsMTcgQEAKICAgICBQeU9iamVjdCAqc3RyaW5nOyAvKiBUaGlzIGNhbm5vdCBjYXVzZSBjeWNsZXMuICovCiB9IFB5VGNsT2JqZWN0OwogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFB5VGNsT2JqZWN0X1R5cGU7Ci0jZGVmaW5lIFB5VGNsT2JqZWN0X0NoZWNrKHYpICAgICgodiktPm9iX3R5cGUgPT0gJlB5VGNsT2JqZWN0X1R5cGUpCitzdGF0aWMgUHlPYmplY3QgKlB5VGNsT2JqZWN0X1R5cGU7CisjZGVmaW5lIFB5VGNsT2JqZWN0X0NoZWNrKHYpICgodiktPm9iX3R5cGUgPT0gKFB5VHlwZU9iamVjdCAqKSBQeVRjbE9iamVjdF9UeXBlKQogCiBzdGF0aWMgUHlPYmplY3QgKgogbmV3UHlUY2xPYmplY3QoVGNsX09iaiAqYXJnKQogewogICAgIFB5VGNsT2JqZWN0ICpzZWxmOwotICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlUY2xPYmplY3QsICZQeVRjbE9iamVjdF9UeXBlKTsKKyAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5VGNsT2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFB5VGNsT2JqZWN0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihQeVRjbE9iamVjdF9UeXBlKTsKICAgICBUY2xfSW5jclJlZkNvdW50KGFyZyk7CiAgICAgc2VsZi0+dmFsdWUgPSBhcmc7CiAgICAgc2VsZi0+c3RyaW5nID0gTlVMTDsKQEAgLTc3Niw5ICs2ODgsMTEgQEAKIHN0YXRpYyB2b2lkCiBQeVRjbE9iamVjdF9kZWFsbG9jKFB5VGNsT2JqZWN0ICpzZWxmKQogeworICAgIFB5T2JqZWN0ICp0cCA9IChQeU9iamVjdCAqKSBQeV9UWVBFKHNlbGYpOwogICAgIFRjbF9EZWNyUmVmQ291bnQoc2VsZi0+dmFsdWUpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+c3RyaW5nKTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKIH0KIAogc3RhdGljIGNoYXIqCkBAIC04MjMsOCArNzM3LDEzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogUHlUY2xPYmplY3RfcmVwcihQeVRjbE9iamVjdCAqc2VsZikKIHsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dmFsdWUtPnR5cGVQdHItPm5hbWUsIHNlbGYtPnZhbHVlKTsKKyAgICBQeU9iamVjdCAqcmVwciwgKnN0ciA9IFB5VGNsT2JqZWN0X3N0cihzZWxmLCBOVUxMKTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdDogJVI+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dmFsdWUtPnR5cGVQdHItPm5hbWUsIHN0cik7CisgICAgUHlfREVDUkVGKHN0cik7CisgICAgcmV0dXJuIHJlcHI7CiB9CiAKICNkZWZpbmUgVEVTVF9DT05EKGNvbmQpICgoY29uZCkgPyBQeV9UcnVlIDogUHlfRmFsc2UpCkBAIC04OTgsNTAgKzgxNywyNSBAQAogICAgIHswfSwKIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZSA9IHsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX3RraW50ZXIuVGNsX09iaiIsICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLwotICAgIHNpemVvZihQeVRjbE9iamVjdCksICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAvKiBtZXRob2RzICovCi0gICAgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvYywvKnRwX2RlYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3RfcmVwciwgICAgICAgICAvKnRwX3JlcHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyLCAgICAgICAgICAvKnRwX3N0ciovCi0gICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICBQeVRjbE9iamVjdF9yaWNoY29tcGFyZSwgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KLSAgICBQeVRjbE9iamVjdF9nZXRzZXRsaXN0LCAgICAgICAgICAgICAvKnRwX2dldHNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLworc3RhdGljIFB5VHlwZV9TbG90IFB5VGNsT2JqZWN0X1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvY30sCisgICAge1B5X3RwX3JlcHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByfSwKKyAgICB7UHlfdHBfc3RyLCAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyfSwKKyAgICB7UHlfdHBfZ2V0YXR0cm8sIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyfSwKKyAgICB7UHlfdHBfcmljaGNvbXBhcmUsIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlfSwKKyAgICB7UHlfdHBfZ2V0c2V0LCBQeVRjbE9iamVjdF9nZXRzZXRsaXN0fSwKKyAgICB7MCwgMH0KIH07CiAKK3N0YXRpYyBQeVR5cGVfU3BlYyBQeVRjbE9iamVjdF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLlRjbF9PYmoiLAorICAgIHNpemVvZihQeVRjbE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgUHlUY2xPYmplY3RfVHlwZV9zbG90cywKK307CisKKwogc3RhdGljIFRjbF9PYmoqCiBBc09iaihQeU9iamVjdCAqdmFsdWUpCiB7CkBAIC0xMzU2LDQyICsxMjUwLDYgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfR2xvYmFsQ2FsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgLyogQ291bGQgZG8gdGhlIHNhbWUgaGVyZSBhcyBmb3IgVGthcHBfQ2FsbCgpLCBidXQgdGhpcyBpcyBub3QgdXNlZAotICAgICAgIG11Y2gsIHNvIEkgY2FuJ3QgYmUgYm90aGVyZWQuICBVbmZvcnR1bmF0ZWx5IFRjbCBkb2Vzbid0IGV4cG9ydCBhCi0gICAgICAgd2F5IGZvciB0aGUgdXNlciB0byBkbyB3aGF0IGFsbCBpdHMgR2xvYmFsKiB2YXJpYW50cyBkbyAoc2F2ZSBhbmQKLSAgICAgICByZXNldCB0aGUgc2NvcGUgcG9pbnRlciwgY2FsbCB0aGUgbG9jYWwgdmVyc2lvbiwgcmVzdG9yZSB0aGUgc2F2ZWQKLSAgICAgICBzY29wZSBwb2ludGVyKS4gKi8KLQotICAgIGNoYXIgKmNtZDsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgImdsb2JhbGNhbGwgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7Ci0KLSAgICBjbWQgID0gTWVyZ2UoYXJncyk7Ci0gICAgaWYgKGNtZCkgewotICAgICAgICBpbnQgZXJyOwotICAgICAgICBFTlRFUl9UQ0wKLSAgICAgICAgZXJyID0gVGNsX0dsb2JhbEV2YWwoVGthcHBfSW50ZXJwKHNlbGYpLCBjbWQpOwotICAgICAgICBFTlRFUl9PVkVSTEFQCi0gICAgICAgIGlmIChlcnIgPT0gVENMX0VSUk9SKQotICAgICAgICAgICAgcmVzID0gVGtpbnRlcl9FcnJvcihzZWxmKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoVGthcHBfUmVzdWx0KHNlbGYpKTsKLSAgICAgICAgTEVBVkVfT1ZFUkxBUF9UQ0wKLSAgICAgICAgY2tmcmVlKGNtZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0V2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNoYXIgKnNjcmlwdDsKQEAgLTE0MTUsMzQgKzEyNzMsNiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfR2xvYmFsRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgY2hhciAqc2NyaXB0OwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotICAgIGludCBlcnI7Ci0KLSAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICJnbG9iYWxldmFsIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgICAgMSkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnbG9iYWxldmFsIiwgJnNjcmlwdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7Ci0KLSAgICBFTlRFUl9UQ0wKLSAgICBlcnIgPSBUY2xfR2xvYmFsRXZhbChUa2FwcF9JbnRlcnAoc2VsZiksIHNjcmlwdCk7Ci0gICAgRU5URVJfT1ZFUkxBUAotICAgIGlmIChlcnIgPT0gVENMX0VSUk9SKQotICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOwotICAgIGVsc2UKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoVGthcHBfUmVzdWx0KHNlbGYpKTsKLSAgICBMRUFWRV9PVkVSTEFQX1RDTAotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCiBUa2FwcF9FdmFsRmlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqZmlsZU5hbWU7CkBAIC0xNTAyLDggKzEzMzIsNyBAQAogICAgIFRjbF9BZGRFcnJvckluZm8oVGthcHBfSW50ZXJwKHNlbGYpLCBtc2cpOwogICAgIExFQVZFX1RDTAogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTE3MDEsNyArMTUzMCw4IEBACiAgICAgdHJlcyA9IFRjbF9HZXRWYXIyRXgoVGthcHBfSW50ZXJwKHNlbGYpLCBuYW1lMSwgbmFtZTIsIGZsYWdzKTsKICAgICBFTlRFUl9PVkVSTEFQCiAgICAgaWYgKHRyZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMpIHsKICAgICAgICAgICAgIHJlcyA9IEZyb21PYmooc2VsZiwgdHJlcyk7CkBAIC0xNzYwLDcgKzE1OTAsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0dsb2JhbFVuc2V0VmFyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gdmFyX2ludm9rZShVbnNldFZhciwgc2VsZiwgYXJncywgVENMX0xFQVZFX0VSUl9NU0cgfCBUQ0xfR0xPQkFMX09OTFkpOworICAgIHJldHVybiB2YXJfaW52b2tlKFVuc2V0VmFyLCBzZWxmLCBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgIFRDTF9MRUFWRV9FUlJfTVNHIHwgVENMX0dMT0JBTF9PTkxZKTsKIH0KIAogCkBAIC0yMDI2LDI3ICsxODU3LDYgQEAKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX01lcmdlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAibWVyZ2UgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcyA9IE1lcmdlKGFyZ3MpOwotCi0gICAgaWYgKHMpIHsKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocyk7Ci0gICAgICAgIGNrZnJlZShzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCiAKIAogLyoqIFRjbCBDb21tYW5kICoqLwpAQCAtMjIzMiw4ICsyMDQyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTIyNzQsOCArMjA4Myw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCAiY2FuJ3QgZGVsZXRlIFRjbCBjb21tYW5kIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjM3OSw4ICsyMTg3LDcgQEAKICAgICBFTlRFUl9UQ0wKICAgICBUY2xfQ3JlYXRlRmlsZUhhbmRsZXIodGZpbGUsIG1hc2ssIEZpbGVIYW5kbGVyLCAoQ2xpZW50RGF0YSkgZGF0YSk7CiAgICAgTEVBVkVfVENMCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQwNCwxNSArMjIxMSwxNCBAQAogICAgIEVOVEVSX1RDTAogICAgIFRjbF9EZWxldGVGaWxlSGFuZGxlcih0ZmlsZSk7CiAgICAgTEVBVkVfVENMCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfQ1JFQVRFRklMRUhBTkRMRVIgKi8KIAogCiAvKioqKiBUa3R0IE9iamVjdCAodGltZXIgdG9rZW4pICoqKiovCiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGt0dF9UeXBlOworc3RhdGljIFB5T2JqZWN0ICpUa3R0X1R5cGU7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC0yNDM3LDggKzIyNDMsNyBAQAogICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsgLyogU2VlIFRrdHRfTmV3KCkgKi8KICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgVGt0dF9tZXRob2RzW10gPQpAQCAtMjQ1Miw5ICsyMjU3LDEwIEBACiB7CiAgICAgVGt0dE9iamVjdCAqdjsKIAotICAgIHYgPSBQeU9iamVjdF9OZXcoVGt0dE9iamVjdCwgJlRrdHRfVHlwZSk7CisgICAgdiA9IFB5T2JqZWN0X05ldyhUa3R0T2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFRrdHRfVHlwZSk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFRrdHRfVHlwZSk7CiAKICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgdi0+dG9rZW4gPSBOVUxMOwpAQCAtMjQ3MCwxMCArMjI3NiwxMiBAQAogewogICAgIFRrdHRPYmplY3QgKnYgPSAoVGt0dE9iamVjdCAqKXNlbGY7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSB2LT5mdW5jOworICAgIFB5T2JqZWN0ICp0cCA9IChQeU9iamVjdCAqKSBQeV9UWVBFKHNlbGYpOwogCiAgICAgUHlfWERFQ1JFRihmdW5jKTsKIAogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQ4NSwzOCArMjI5MywyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5mdW5jID09IE5VTEwgPyAiLCBoYW5kbGVyIGRlbGV0ZWQiIDogIiIpOwogfQogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRrdHRfVHlwZSA9Ci17Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgInRrdGltZXJ0b2tlbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUgKi8KLSAgICBzaXplb2YoVGt0dE9iamVjdCksICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplICovCi0gICAgVGt0dF9EZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkICovCi0gICAgVGt0dF9SZXByLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIFRrdHRfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KK3N0YXRpYyBQeVR5cGVfU2xvdCBUa3R0X1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgVGt0dF9EZWFsbG9jfSwKKyAgICB7UHlfdHBfcmVwciwgVGt0dF9SZXByfSwKKyAgICB7UHlfdHBfbWV0aG9kcywgVGt0dF9tZXRob2RzfSwKKyAgICB7MCwgMH0KIH07CiAKK3N0YXRpYyBQeVR5cGVfU3BlYyBUa3R0X1R5cGVfc3BlYyA9IHsKKyAgICAidGt0aW1lcnRva2VuIiwKKyAgICBzaXplb2YoVGt0dE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgVGt0dF9UeXBlX3Nsb3RzLAorfTsKIAogCiAvKiogVGltZXIgSGFuZGxlciAqKi8KQEAgLTI2MzgsOCArMjQyOCw3IEBACiAgICAgICAgIGV4Y0luQ21kID0gdmFsSW5DbWQgPSB0cmJJbkNtZCA9IE5VTEw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNjY1LDggKzI0NTQsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHF1aXRNYWluTG9vcCA9IDE7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjcxNiwxNSArMjUwNCwxNSBAQAogICAgIH0KICAgICBpZiAoX3RrX2V4aXN0cyA9PSBOVUxMIHx8IHN0cmNtcChfdGtfZXhpc3RzLCAiMSIpICE9IDApICAgICB7CiAgICAgICAgIGlmIChUa19Jbml0KGludGVycCkgICAgICAgICAgICAgPT0gVENMX0VSUk9SKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CiAjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSwogICAgICAgICAgICAgdGtfbG9hZF9mYWlsZWQgPSAxOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzM4LDggKzI1MjYsNyBAQAogICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKCgoVGthcHBPYmplY3QqKXNlbGYpLT53YW50b2JqZWN0cyk7CiAgICAgKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzID0gd2FudG9iamVjdHM7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzQ4LDggKzI1MzUsNyBAQAogCiAgICAgKChUa2FwcE9iamVjdCopc2VsZiktPmRpc3BhdGNoaW5nID0gMTsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC0yNzYwLDkgKzI1NDYsNyBAQAogICAgIHsid2lsbGRpc3BhdGNoIiwgICAgICAgVGthcHBfV2lsbERpc3BhdGNoLCBNRVRIX05PQVJHU30sCiAgICAgeyJ3YW50b2JqZWN0cyIsICAgICAgICAgICAgVGthcHBfV2FudE9iamVjdHMsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJjYWxsIiwgICAgICAgICAgICAgICAgICAgVGthcHBfQ2FsbCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imdsb2JhbGNhbGwiLCAgICAgICAgICAgICBUa2FwcF9HbG9iYWxDYWxsLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZXZhbCIsICAgICAgICAgICAgICAgICAgIFRrYXBwX0V2YWwsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnbG9iYWxldmFsIiwgICAgICAgICAgICAgVGthcHBfR2xvYmFsRXZhbCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImV2YWxmaWxlIiwgICAgICAgICAgICAgICBUa2FwcF9FdmFsRmlsZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7InJlY29yZCIsICAgICAgICAgICAgICAgICBUa2FwcF9SZWNvcmQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhZGRlcnJvcmluZm8iLCAgICAgICBUa2FwcF9BZGRFcnJvckluZm8sIE1FVEhfVkFSQVJHU30sCkBAIC0yNzgxLDcgKzI1NjUsNiBAQAogICAgIHsiZXhwcmJvb2xlYW4iLCAgICAgICAgVGthcHBfRXhwckJvb2xlYW4sIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzcGxpdGxpc3QiLCAgICAgICAgICAgICAgVGthcHBfU3BsaXRMaXN0LCBNRVRIX1ZBUkFSR1N9LAogICAgIHsic3BsaXQiLCAgICAgICAgICAgICAgICAgIFRrYXBwX1NwbGl0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHsibWVyZ2UiLCAgICAgICAgICAgICAgICAgIFRrYXBwX01lcmdlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiY3JlYXRlY29tbWFuZCIsICAgICAgVGthcHBfQ3JlYXRlQ29tbWFuZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImRlbGV0ZWNvbW1hbmQiLCAgICAgIFRrYXBwX0RlbGV0ZUNvbW1hbmQsIE1FVEhfVkFSQVJHU30sCiAjaWZkZWYgSEFWRV9DUkVBVEVGSUxFSEFORExFUgpAQCAtMjgwNCw0NCArMjU4NywyOSBAQAogc3RhdGljIHZvaWQKIFRrYXBwX0RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAgICAgLypDSEVDS19UQ0xfQVBQQVJUTUVOVDsqLwogICAgIEVOVEVSX1RDTAogICAgIFRjbF9EZWxldGVJbnRlcnAoVGthcHBfSW50ZXJwKHNlbGYpKTsKICAgICBMRUFWRV9UQ0wKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKICAgICBEaXNhYmxlRXZlbnRIb29rKCk7CiB9CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGthcHBfVHlwZSA9Ci17Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgInRrYXBwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUgKi8KLSAgICBzaXplb2YoVGthcHBPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplICovCi0gICAgVGthcHBfRGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIFRrYXBwX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KK3N0YXRpYyBQeVR5cGVfU2xvdCBUa2FwcF9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RlYWxsb2MsIFRrYXBwX0RlYWxsb2N9LAorICAgIHtQeV90cF9tZXRob2RzLCBUa2FwcF9tZXRob2RzfSwKKyAgICB7MCwgMH0KK307CisKKworc3RhdGljIFB5VHlwZV9TcGVjIFRrYXBwX1R5cGVfc3BlYyA9IHsKKyAgICAidGthcHAiLAorICAgIHNpemVvZihUa2FwcE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgVGthcHBfVHlwZV9zbG90cywKIH07CiAKIApAQCAtMjk4MSw3ICsyNzQ5LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIFRrYXBwX05ldyhzY3JlZW5OYW1lLCBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCAgICAgd2FudFRrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlLCB3YW50b2JqZWN0cywgd2FudFRrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmMsIHVzZSk7CiB9CiAKQEAgLTI5OTcsOCArMjc2NSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBUa2ludGVyX2J1c3l3YWl0aW50ZXJ2YWwgPSBuZXdfdmFsOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIGNoYXIgc2V0YnVzeXdhaXRpbnRlcnZhbF9kb2NbXSA9CkBAIC0zMTMxLDI3ICsyODk4LDYgQEAKIH0KIAogCi0vKiBhbGwgZXJyb3JzIHdpbGwgYmUgY2hlY2tlZCBpbiBvbmUgZmVsbCBzd29vcCBpbiBpbml0X3RraW50ZXIoKSAqLwotc3RhdGljIHZvaWQKLWluc19sb25nKFB5T2JqZWN0ICpkLCBjaGFyICpuYW1lLCBsb25nIHZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZyh2YWwpOwotICAgIGlmICh2KSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIG5hbWUsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotfQotc3RhdGljIHZvaWQKLWluc19zdHJpbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfdGtpbnRlcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgIl90a2ludGVyIiwKQEAgLTMxNjcsNDUgKzI5MTMsMTExIEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X190a2ludGVyKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdWV4ZSwgKmNleGU7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa2FwcF9UeXBlKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworICBQeU9iamVjdCAqbSwgKnVleGUsICpjZXhlLCAqbzsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgdGNsX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgaWYgKHRjbF9sb2NrID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfdGtpbnRlcm1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBUa2ludGVyX1RjbEVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xFcnJvciIsIFRraW50ZXJfVGNsRXJyb3IpOwotCi0gICAgaW5zX2xvbmcoZCwgIlJFQURBQkxFIiwgVENMX1JFQURBQkxFKTsKLSAgICBpbnNfbG9uZyhkLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpOwotICAgIGluc19sb25nKGQsICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKTsKLSAgICBpbnNfbG9uZyhkLCAiV0lORE9XX0VWRU5UUyIsIFRDTF9XSU5ET1dfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiSURMRV9FVkVOVFMiLCBUQ0xfSURMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTik7Ci0gICAgaW5zX3N0cmluZyhkLCAiVENMX1ZFUlNJT04iLCBUQ0xfVkVSU0lPTik7Ci0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGthcHBUeXBlIiwgKFB5T2JqZWN0ICopJlRrYXBwX1R5cGUpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmVGt0dF9UeXBlKSA8IDApIHsKKyAgICBvID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChvID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRrdHRUeXBlIiwgKFB5T2JqZWN0ICopJlRrdHRfVHlwZSk7CisgICAgUHlfSU5DUkVGKG8pOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRjbEVycm9yIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBUa2ludGVyX1RjbEVycm9yID0gbzsKIAotICAgIFB5X1RZUEUoJlB5VGNsT2JqZWN0X1R5cGUpID0gJlB5VHlwZV9UeXBlOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xfT2JqIiwgKFB5T2JqZWN0ICopJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVhDRVBUSU9OIiwgVENMX0VYQ0VQVElPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElNRVJfRVZFTlRTIiwgVENMX1RJTUVSX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRE9OVF9XQUlUIiwgVENMX0RPTlRfV0FJVCkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlRrYXBwX1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa2FwcFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrYXBwX1R5cGUgPSBvOworCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGt0dF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGt0dFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrdHRfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZQeVRjbE9iamVjdF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsX09iaiIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUY2xPYmplY3RfVHlwZSA9IG87CiAKICNpZmRlZiBUS19BUVVBCiAgICAgLyogVGtfTWFjT1NYU2V0dXBUa05vdGlmaWVyIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBUY2wncyBzdWJzeXN0ZW1zCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190cmFjZW1hbGxvYy5jIGIvTW9kdWxlcy9fdHJhY2VtYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTkyM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdHJhY2VtYWxsb2MuYwpAQCAtMCwwICsxLDE0MjggQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJoYXNodGFibGUuaCIKKyNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisjaW5jbHVkZSAib3NkZWZzLmgiCisKKy8qIFRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5TWVtX1Jhd01hbGxvYygpICovCisjZGVmaW5lIFRSQUNFX1JBV19NQUxMT0MKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQgdHJhY2VtYWxsb2Nfc3RvcCh2b2lkKTsKK3N0YXRpYyBpbnQgdHJhY2VtYWxsb2NfYXRleGl0X3JlZ2lzdGVyKHZvaWQpOworc3RhdGljIHZvaWQqIHJhd19tYWxsb2Moc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgcmF3X2ZyZWUodm9pZCAqcHRyKTsKKworI2lmZGVmIFB5X0RFQlVHCisjICBkZWZpbmUgVFJBQ0VfREVCVUcKKyNlbmRpZgorCisjZGVmaW5lIF9TVFIoVkFMKSAjVkFMCisjZGVmaW5lIFNUUihWQUwpIF9TVFIoVkFMKQorCisvKiBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIHN0cnVjdCB7CisgICAgUHlNZW1BbGxvY2F0b3IgbWVtOworICAgIFB5TWVtQWxsb2NhdG9yIHJhdzsKKyAgICBQeU1lbUFsbG9jYXRvciBvYmo7Cit9IGFsbG9jYXRvcnM7CisKKy8qIEFyYml0cmFyeSBsaW1pdCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHRyYWNlYmFjay4gVGhlIHZhbHVlIHdhcyBjaG9zZW4KKyAgIHRvIG5vdCBhbGxvY2F0ZSB0b28gbXVjaCBtZW1vcnkgb24gdGhlIHN0YWNrIChzZWUgVFJBQ0VCQUNLX1NUQUNLX1NJWkUKKyAgIGJlbG93KS4gKi8KKyNkZWZpbmUgTUFYX05GUkFNRSAxMDAKKworc3RhdGljIHN0cnVjdCB7CisgICAgLyogTW9kdWxlIGluaXRpYWxpemVkPworICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisgICAgZW51bSB7CisgICAgICAgIFRSQUNFTUFMTE9DX05PVF9JTklUSUFMSVpFRCwKKyAgICAgICAgVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQsCisgICAgICAgIFRSQUNFTUFMTE9DX0ZJTkFMSVpFRAorICAgIH0gaW5pdGlhbGl6ZWQ7CisKKyAgICAvKiBhdGV4aXQgaGFuZGxlciByZWdpc3RlcmVkPyAqLworICAgIGludCBhdGV4aXRfcmVnaXN0ZXJlZDsKKworICAgIC8qIElzIHRyYWNlbWFsbG9jIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zPworICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisgICAgaW50IHRyYWNpbmc7CisKKyAgICAvKiBsaW1pdCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHRyYWNlYmFjaywgMSBieSBkZWZhdWx0LgorICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMLiAqLworICAgIGludCBtYXhfbmZyYW1lOworfSB0cmFjZW1hbGxvY19jb25maWcgPSB7VFJBQ0VNQUxMT0NfTk9UX0lOSVRJQUxJWkVELCAwLCAwLCAxfTsKKworI2lmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkKKy8qIFRoaXMgbG9jayBpcyBuZWVkZWQgYmVjYXVzZSB0cmFjZW1hbGxvY19mcmVlKCkgaXMgY2FsbGVkIHdpdGhvdXQKKyAgIHRoZSBHSUwgaGVsZCBmcm9tIFB5TWVtX1Jhd0ZyZWUoKS4gSXQgY2Fubm90IGFjcXVpcmUgdGhlIGxvY2sgYmVjYXVzZSBpdAorICAgd291bGQgaW50cm9kdWNlIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCitzdGF0aWMgUHlUaHJlYWRfdHlwZV9sb2NrIHRhYmxlc19sb2NrOworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHRhYmxlc19sb2NrLCAxKQorIyAgZGVmaW5lIFRBQkxFU19VTkxPQ0soKSBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGFibGVzX2xvY2spCisjZWxzZQorICAgLyogdmFyaWFibGVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkKKyMgIGRlZmluZSBUQUJMRVNfVU5MT0NLKCkKKyNlbmRpZgorCisvKiBQYWNrIHRoZSBmcmFtZV90IHN0cnVjdHVyZSB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgb24gNjQtYml0CisgICBhcmNoaXRlY3R1cmVzOiAxMiBieXRlcyBpbnN0ZWFkIG9mIDE2LiBUaGlzIG9wdGltaXphdGlvbiBtaWdodCBwcm9kdWNlCisgICBTSUdCVVMgb24gYXJjaGl0ZWN0dXJlcyBub3Qgc3VwcG9ydGluZyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzICg2NC1iaXQKKyAgIElQUyBDUFU/KTogb24gc3VjaCBhcmNoaXRlY3R1cmUsIHRoZSBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgcGFja2VkLiAqLworI3ByYWdtYSBwYWNrKDQpCit0eXBlZGVmIHN0cnVjdAorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2VuZGlmCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGludCBsaW5lbm87Cit9IGZyYW1lX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV91aGFzaF90IGhhc2g7CisgICAgaW50IG5mcmFtZTsKKyAgICBmcmFtZV90IGZyYW1lc1sxXTsKK30gdHJhY2ViYWNrX3Q7CisKKyNkZWZpbmUgVFJBQ0VCQUNLX1NJWkUoTkZSQU1FKSBcCisgICAgICAgIChzaXplb2YodHJhY2ViYWNrX3QpICsgc2l6ZW9mKGZyYW1lX3QpICogKE5GUkFNRSAtIDEpKQorI2RlZmluZSBUUkFDRUJBQ0tfU1RBQ0tfU0laRSBUUkFDRUJBQ0tfU0laRShNQVhfTkZSQU1FKQorCitzdGF0aWMgUHlPYmplY3QgKnVua25vd25fZmlsZW5hbWUgPSBOVUxMOworc3RhdGljIHRyYWNlYmFja190IHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjazsKKworLyogVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2sgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBTaXplIG9mIHRoZSBtZW1vcnkgYmxvY2sgaW4gYnl0ZXMgKi8KKyAgICBzaXplX3Qgc2l6ZTsKKworICAgIC8qIFRyYWNlYmFjayB3aGVyZSB0aGUgbWVtb3J5IGJsb2NrIHdhcyBhbGxvY2F0ZWQgKi8KKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworfSB0cmFjZV90OworCisvKiBTaXplIGluIGJ5dGVzIG9mIGN1cnJlbnRseSB0cmFjZWQgbWVtb3J5LgorICAgUHJvdGVjdGVkIGJ5IFRBQkxFU19MT0NLKCkuICovCitzdGF0aWMgc2l6ZV90IHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPSAwOworCisvKiBNYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgdHJhY2VkIG1lbW9yeS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIHNpemVfdCB0cmFjZW1hbGxvY19tYXhfdHJhY2VkX21lbW9yeSA9IDA7CisKKy8qIEhhc2ggdGFibGUgdXNlZCBhcyBhIHNldCB0byB0byBpbnRlcm4gZmlsZW5hbWVzOgorICAgUHlPYmplY3QqID0+IFB5T2JqZWN0Ki4KKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICp0cmFjZW1hbGxvY19maWxlbmFtZXMgPSBOVUxMOworCisvKiBIYXNoIHRhYmxlIHVzZWQgYXMgYSBzZXQgdG8gaW50ZXJuIHRyYWNlYmFja3M6CisgICB0cmFjZWJhY2tfdCogPT4gdHJhY2ViYWNrX3QqCisgICBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqdHJhY2VtYWxsb2NfdHJhY2ViYWNrcyA9IE5VTEw7CisKKy8qIHBvaW50ZXIgKHZvaWQqKSA9PiB0cmFjZSAodHJhY2VfdCkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlbWFsbG9jX3RyYWNlcyA9IE5VTEw7CisKKyNpZmRlZiBUUkFDRV9ERUJVRworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgZnByaW50ZihzdGRlcnIsICJ0cmFjZW1hbGxvYzogIik7CisgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgICAgdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorI2RlZmluZSBSRUVOVFJBTlRfVEhSRUFETE9DQUwKKworLyogSWYgeW91ciBPUyBkb2VzIG5vdCBwcm92aWRlIG5hdGl2ZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSwgeW91IGNhbiBpbXBsZW1lbnQKKyAgIGl0IG1hbnVhbGx5IHVzaW5nIGEgbG9jay4gRnVuY3Rpb25zIG9mIHRocmVhZC5jIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UKKyAgIHRoZXkgdXNlIFB5TWVtX1Jhd01hbGxvYygpIHdoaWNoIGxlYWRzIHRvIGEgcmVlbnRyYW50IGNhbGwuICovCisjaWYgIShkZWZpbmVkKF9QT1NJWF9USFJFQURTKSB8fCBkZWZpbmVkKE5UX1RIUkVBRFMpKQorIyAgZXJyb3IgIm5lZWQgbmF0aXZlIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIgorI2VuZGlmCisKK3N0YXRpYyBpbnQgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleTsKKworLyogQW55IG5vbi1OVUxMIHBvaW50ZXIgY2FuIGJlIHVzZWQgKi8KKyNkZWZpbmUgUkVFTlRSQU5UIFB5X1RydWUKKworc3RhdGljIGludAorZ2V0X3JlZW50cmFudCh2b2lkKQoreworICAgIHZvaWQgKnB0ciA9IFB5VGhyZWFkX2dldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgIGFzc2VydChwdHIgPT0gUkVFTlRSQU5UKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfcmVlbnRyYW50KGludCByZWVudHJhbnQpCit7CisgICAgYXNzZXJ0KHJlZW50cmFudCA9PSAwIHx8IHJlZW50cmFudCA9PSAxKTsKKyAgICBpZiAocmVlbnRyYW50KSB7CisgICAgICAgIGFzc2VydChQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpID09IE5VTEwpOworICAgICAgICBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVFTlRSQU5UKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIEZJWE1FOiBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKCkgY2Fubm90IGJlIHVzZWQgdG8gc2V0IHRoZSBmbGFnCisgICAgICAgICAgIHRvIHplcm8sIGJlY2F1c2UgaXQgZG9lcyBub3RoaW5nIGlmIHRoZSB2YXJpYWJsZSBoYXMgYWxyZWFkeQorICAgICAgICAgICBhIHZhbHVlIHNldC4gKi8KKyAgICAgICAgUHlUaHJlYWRfZGVsZXRlX2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KTsKKyAgICB9Cit9CisKKyNlbHNlCisKKy8qIFdJVEhfVEhSRUFEIG5vdCBkZWZpbmVkOiBQeXRob24gY29tcGlsZWQgd2l0aG91dCB0aHJlYWRzLAorICAgb3IgVFJBQ0VfUkFXX01BTExPQyBub3QgZGVmaW5lZDogdmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBpbnQgdHJhY2VtYWxsb2NfcmVlbnRyYW50ID0gMDsKKworc3RhdGljIGludAorZ2V0X3JlZW50cmFudCh2b2lkKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19yZWVudHJhbnQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfcmVlbnRyYW50KGludCByZWVudHJhbnQpCit7CisgICAgYXNzZXJ0KCFyZWVudHJhbnQgfHwgIWdldF9yZWVudHJhbnQoKSk7CisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50ID0gcmVlbnRyYW50OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2hhc2h0YWJsZV9jb21wYXJlX3VuaWNvZGUoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5KQoreworICAgIGlmIChrZXkgIT0gTlVMTCAmJiBlbnRyeS0+a2V5ICE9IE5VTEwpCisgICAgICAgIHJldHVybiAoUHlVbmljb2RlX0NvbXBhcmUoKFB5T2JqZWN0ICopa2V5LCAoUHlPYmplY3QgKillbnRyeS0+a2V5KSA9PSAwKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBrZXkgPT0gZW50cnktPmtleTsKK30KKworc3RhdGljIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgaGFzaHRhYmxlX2FsbG9jID0ge21hbGxvYywgZnJlZX07CisKK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKgoraGFzaHRhYmxlX25ldyhzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYykKK3sKKyAgICByZXR1cm4gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChkYXRhX3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9mdW5jLCBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgJmhhc2h0YWJsZV9hbGxvYyk7Cit9CisKK3N0YXRpYyB2b2lkKgorcmF3X21hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9ycy5yYXcubWFsbG9jKGFsbG9jYXRvcnMucmF3LmN0eCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCityYXdfZnJlZSh2b2lkICpwdHIpCit7CisgICAgYWxsb2NhdG9ycy5yYXcuZnJlZShhbGxvY2F0b3JzLnJhdy5jdHgsIHB0cik7Cit9CisKK3N0YXRpYyBQeV91aGFzaF90CitoYXNodGFibGVfaGFzaF90cmFjZWJhY2soY29uc3Qgdm9pZCAqa2V5KQoreworICAgIGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2sgPSBrZXk7CisgICAgcmV0dXJuIHRyYWNlYmFjay0+aGFzaDsKK30KKworc3RhdGljIGludAoraGFzaHRhYmxlX2NvbXBhcmVfdHJhY2ViYWNrKGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2sxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqaGUpCit7CisgICAgY29uc3QgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazIgPSBoZS0+a2V5OworICAgIGNvbnN0IGZyYW1lX3QgKmZyYW1lMSwgKmZyYW1lMjsKKyAgICBpbnQgaTsKKworICAgIGlmICh0cmFjZWJhY2sxLT5uZnJhbWUgIT0gdHJhY2ViYWNrMi0+bmZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZvciAoaT0wOyBpIDwgdHJhY2ViYWNrMS0+bmZyYW1lOyBpKyspIHsKKyAgICAgICAgZnJhbWUxID0gJnRyYWNlYmFjazEtPmZyYW1lc1tpXTsKKyAgICAgICAgZnJhbWUyID0gJnRyYWNlYmFjazItPmZyYW1lc1tpXTsKKworICAgICAgICBpZiAoZnJhbWUxLT5saW5lbm8gIT0gZnJhbWUyLT5saW5lbm8pCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZnJhbWUxLT5maWxlbmFtZSAhPSBmcmFtZTItPmZpbGVuYW1lKSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NvbXBhcmUoZnJhbWUxLT5maWxlbmFtZSwgZnJhbWUyLT5maWxlbmFtZSkgIT0gMCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2dldF9mcmFtZShQeUZyYW1lT2JqZWN0ICpweWZyYW1lLCBmcmFtZV90ICpmcmFtZSkKK3sKKyAgICBQeUNvZGVPYmplY3QgKmNvZGU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBmcmFtZS0+ZmlsZW5hbWUgPSB1bmtub3duX2ZpbGVuYW1lOworICAgIGZyYW1lLT5saW5lbm8gPSBQeUZyYW1lX0dldExpbmVOdW1iZXIocHlmcmFtZSk7CisgICAgYXNzZXJ0KGZyYW1lLT5saW5lbm8gPj0gMCk7CisgICAgaWYgKGZyYW1lLT5saW5lbm8gPCAwKQorICAgICAgICBmcmFtZS0+bGluZW5vID0gMDsKKworICAgIGNvZGUgPSBweWZyYW1lLT5mX2NvZGU7CisgICAgaWYgKGNvZGUgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gZ2V0IHRoZSBjb2RlIG9iamVjdCBvZiB0aGUgZnJhbWUiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvZGUtPmNvX2ZpbGVuYW1lID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgZmlsZW5hbWUgb2YgdGhlIGNvZGUgb2JqZWN0Iik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZpbGVuYW1lID0gY29kZS0+Y29fZmlsZW5hbWU7CisgICAgYXNzZXJ0KGZpbGVuYW1lICE9IE5VTEwpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaWxlbmFtZSkpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmlsZW5hbWUgaXMgbm90IGFuIHVuaWNvZGUgc3RyaW5nIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIVB5VW5pY29kZV9JU19SRUFEWShmaWxlbmFtZSkpIHsKKyAgICAgICAgLyogRG9uJ3QgbWFrZSBhIFVuaWNvZGUgc3RyaW5nIHJlYWR5IHRvIGF2b2lkIHJlZW50cmFudCBjYWxscworICAgICAgICAgICB0byB0cmFjZW1hbGxvY19tYWxsb2MoKSBvciB0cmFjZW1hbGxvY19yZWFsbG9jKCkgKi8KKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmlsZW5hbWUgaXMgbm90IGEgcmVhZHkgdW5pY29kZSBzdHJpbmciKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogaW50ZXJuIHRoZSBmaWxlbmFtZSAqLworICAgIGVudHJ5ID0gX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkodHJhY2VtYWxsb2NfZmlsZW5hbWVzLCBmaWxlbmFtZSk7CisgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW5hbWUgPSAoUHlPYmplY3QgKillbnRyeS0+a2V5OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogdHJhY2VtYWxsb2NfZmlsZW5hbWVzIGlzIHJlc3BvbnNpYmxlIHRvIGtlZXAgYSByZWZlcmVuY2UKKyAgICAgICAgICAgdG8gdGhlIGZpbGVuYW1lICovCisgICAgICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CisgICAgICAgIGlmIChfUHlfaGFzaHRhYmxlX3NldCh0cmFjZW1hbGxvY19maWxlbmFtZXMsIGZpbGVuYW1lLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gaW50ZXJuIHRoZSBmaWxlbmFtZSIpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB0aGUgdHJhY2VtYWxsb2NfZmlsZW5hbWVzIHRhYmxlIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWxlbmFtZSAqLworICAgIGZyYW1lLT5maWxlbmFtZSA9IGZpbGVuYW1lOworfQorCitzdGF0aWMgUHlfdWhhc2hfdAordHJhY2ViYWNrX2hhc2godHJhY2ViYWNrX3QgKnRyYWNlYmFjaykKK3sKKyAgICAvKiBjb2RlIGJhc2VkIG9uIHR1cGxlaGFzaCgpIG9mIE9iamVjdHMvdHVwbGVvYmplY3QuYyAqLworICAgIFB5X3VoYXNoX3QgeDsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLworICAgIFB5X2hhc2hfdCB5OworICAgIGludCBsZW4gPSB0cmFjZWJhY2stPm5mcmFtZTsKKyAgICBQeV91aGFzaF90IG11bHQgPSBfUHlIQVNIX01VTFRJUExJRVI7CisgICAgZnJhbWVfdCAqZnJhbWU7CisKKyAgICB4ID0gMHgzNDU2NzhVTDsKKyAgICBmcmFtZSA9IHRyYWNlYmFjay0+ZnJhbWVzOworICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CisgICAgICAgIHkgPSBQeU9iamVjdF9IYXNoKGZyYW1lLT5maWxlbmFtZSk7CisgICAgICAgIHkgXj0gZnJhbWUtPmxpbmVubzsKKyAgICAgICAgZnJhbWUrKzsKKworICAgICAgICB4ID0gKHggXiB5KSAqIG11bHQ7CisgICAgICAgIC8qIHRoZSBjYXN0IG1pZ2h0IHRydW5jYXRlIGxlbjsgdGhhdCBkb2Vzbid0IGNoYW5nZSBoYXNoIHN0YWJpbGl0eSAqLworICAgICAgICBtdWx0ICs9IChQeV9oYXNoX3QpKDgyNTIwVUwgKyBsZW4gKyBsZW4pOworICAgIH0KKyAgICB4ICs9IDk3NTMxVUw7CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZWJhY2tfZ2V0X2ZyYW1lcyh0cmFjZWJhY2tfdCAqdHJhY2ViYWNrKQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKKyAgICBQeUZyYW1lT2JqZWN0ICpweWZyYW1lOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICB0c3RhdGUgPSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpOworI2Vsc2UKKyAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOworI2VuZGlmCisgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAocHlmcmFtZSA9IHRzdGF0ZS0+ZnJhbWU7IHB5ZnJhbWUgIT0gTlVMTDsgcHlmcmFtZSA9IHB5ZnJhbWUtPmZfYmFjaykgeworICAgICAgICB0cmFjZW1hbGxvY19nZXRfZnJhbWUocHlmcmFtZSwgJnRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXSk7CisgICAgICAgIGFzc2VydCh0cmFjZWJhY2stPmZyYW1lc1t0cmFjZWJhY2stPm5mcmFtZV0uZmlsZW5hbWUgIT0gTlVMTCk7CisgICAgICAgIGFzc2VydCh0cmFjZWJhY2stPmZyYW1lc1t0cmFjZWJhY2stPm5mcmFtZV0ubGluZW5vID49IDApOworICAgICAgICB0cmFjZWJhY2stPm5mcmFtZSsrOworICAgICAgICBpZiAodHJhY2ViYWNrLT5uZnJhbWUgPT0gdHJhY2VtYWxsb2NfY29uZmlnLm1heF9uZnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB0cmFjZWJhY2tfdCAqCit0cmFjZWJhY2tfbmV3KHZvaWQpCit7CisgICAgY2hhciBzdGFja19idWZmZXJbVFJBQ0VCQUNLX1NUQUNLX1NJWkVdOworICAgIHRyYWNlYmFja190ICp0cmFjZWJhY2sgPSAodHJhY2ViYWNrX3QgKilzdGFja19idWZmZXI7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIC8qIGdldCBmcmFtZXMgKi8KKyAgICB0cmFjZWJhY2stPm5mcmFtZSA9IDA7CisgICAgdHJhY2ViYWNrX2dldF9mcmFtZXModHJhY2ViYWNrKTsKKyAgICBpZiAodHJhY2ViYWNrLT5uZnJhbWUgPT0gMCkKKyAgICAgICAgcmV0dXJuICZ0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2s7CisgICAgdHJhY2ViYWNrLT5oYXNoID0gdHJhY2ViYWNrX2hhc2godHJhY2ViYWNrKTsKKworICAgIC8qIGludGVybiB0aGUgdHJhY2ViYWNrICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2spOworICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgIHRyYWNlYmFjayA9ICh0cmFjZWJhY2tfdCAqKWVudHJ5LT5rZXk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB0cmFjZWJhY2tfdCAqY29weTsKKyAgICAgICAgc2l6ZV90IHRyYWNlYmFja19zaXplOworCisgICAgICAgIHRyYWNlYmFja19zaXplID0gVFJBQ0VCQUNLX1NJWkUodHJhY2ViYWNrLT5uZnJhbWUpOworCisgICAgICAgIGNvcHkgPSByYXdfbWFsbG9jKHRyYWNlYmFja19zaXplKTsKKyAgICAgICAgaWYgKGNvcHkgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgdHJhY2ViYWNrOiBtYWxsb2MgZmFpbGVkIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweShjb3B5LCB0cmFjZWJhY2ssIHRyYWNlYmFja19zaXplKTsKKworICAgICAgICBpZiAoX1B5X2hhc2h0YWJsZV9zZXQodHJhY2VtYWxsb2NfdHJhY2ViYWNrcywgY29weSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICByYXdfZnJlZShjb3B5KTsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBpbnRlcm4gdGhlIHRyYWNlYmFjazogcHV0ZGF0YSBmYWlsZWQiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdHJhY2ViYWNrID0gY29weTsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlYmFjazsKK30KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfbG9nX2FsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKKyAgICB0cmFjZV90IHRyYWNlOworICAgIGludCByZXM7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tfbmV3KCk7CisgICAgaWYgKHRyYWNlYmFjayA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB0cmFjZS5zaXplID0gc2l6ZTsKKyAgICB0cmFjZS50cmFjZWJhY2sgPSB0cmFjZWJhY2s7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHJlcyA9IF9QeV9IQVNIVEFCTEVfU0VUKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCB0cmFjZSk7CisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgIGFzc2VydCh0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5IDw9IFBZX1NJWkVfTUFYIC0gc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgKz0gc2l6ZTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPiB0cmFjZW1hbGxvY19tYXhfdHJhY2VkX21lbW9yeSkKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX21heF90cmFjZWRfbWVtb3J5ID0gdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeTsKKyAgICB9CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2xvZ19mcmVlKHZvaWQgKnB0cikKK3sKKyAgICB0cmFjZV90IHRyYWNlOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBpZiAoX1B5X2hhc2h0YWJsZV9wb3AodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSkpIHsKKyAgICAgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPj0gdHJhY2Uuc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgLT0gdHJhY2Uuc2l6ZTsKKyAgICB9CisgICAgVEFCTEVTX1VOTE9DSygpOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX21hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplLCBpbnQgZ2lsX2hlbGQpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworI2lmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbF9zdGF0ZTsKKyNlbmRpZgorICAgIHZvaWQgKnB0cjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgc2l6ZSk7CisgICAgfQorCisgICAgLyogSWdub3JlIHJlZW50cmFudCBjYWxsLiBQeU9iamV0X01hbGxvYygpIGNhbGxzIFB5TWVtX01hbGxvYygpCisgICAgICAgZm9yIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDUxMiBieXRlcy4gUHlHSUxTdGF0ZV9FbnN1cmUoKSBtYXkgY2FsbAorICAgICAgIFB5TWVtX1Jhd01hbGxvYygpIGluZGlyZWN0bHkgd2hpY2ggd291bGQgY2FsbCBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlmCisgICAgICAgcmVlbnRyYW50IGFyZSBub3QgZGlzYWJsZWQuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBpZiAoIWdpbF9oZWxkKQorICAgICAgICBnaWxfc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2Vsc2UKKyAgICBhc3NlcnQoZ2lsX2hlbGQpOworI2VuZGlmCisjZW5kaWYKKyAgICBwdHIgPSBhbGxvYy0+bWFsbG9jKGFsbG9jLT5jdHgsIHNpemUpOworCisgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgIGlmICh0cmFjZW1hbGxvY19sb2dfYWxsb2MocHRyLCBzaXplKSA8IDApIHsKKyAgICAgICAgICAgIC8qIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICAgICAgYWxsb2MtPmZyZWUoYWxsb2MtPmN0eCwgcHRyKTsKKyAgICAgICAgICAgIHB0ciA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgc2V0X3JlZW50cmFudCgwKTsKKworI2lmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkKKyAgICBpZiAoIWdpbF9oZWxkKQorICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsX3N0YXRlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUsIGludCBnaWxfaGVsZCkKK3sKKyAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisjaWYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsX3N0YXRlOworI2VuZGlmCisgICAgdm9pZCAqcHRyMjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgLyogUmVlbnRyYW50IGNhbGwgdG8gUHlNZW1fUmVhbGxvYygpIGFuZCBQeU1lbV9SYXdSZWFsbG9jKCkuCisgICAgICAgICAgIEV4YW1wbGU6IFB5TWVtX1Jhd1JlYWxsb2MoKSBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSBweW1hbGxvYworICAgICAgICAgICAoX1B5T2JqZWN0X01hbGxvYygpIGFuZCAgX1B5T2JqZWN0X1JlYWxsb2MoKSkgdG8gYWxsb2NhdGUgYSBuZXcKKyAgICAgICAgICAgYXJlbmEgKG5ld19hcmVuYSgpKS4gKi8KKyAgICAgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworCisgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpCisgICAgICAgICAgICB0cmFjZW1hbGxvY19sb2dfZnJlZShwdHIpOworCisgICAgICAgIHJldHVybiBwdHIyOworICAgIH0KKworICAgIC8qIElnbm9yZSByZWVudHJhbnQgY2FsbC4gUHlPYmpldF9SZWFsbG9jKCkgY2FsbHMgUHlNZW1fUmVhbGxvYygpIGZvcgorICAgICAgIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDUxMiBieXRlcy4gUHlHSUxTdGF0ZV9FbnN1cmUoKSBtYXkgY2FsbAorICAgICAgIFB5TWVtX1Jhd01hbGxvYygpIGluZGlyZWN0bHkgd2hpY2ggd291bGQgY2FsbCBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlmCisgICAgICAgcmVlbnRyYW50IGFyZSBub3QgZGlzYWJsZWQuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBpZiAoIWdpbF9oZWxkKQorICAgICAgICBnaWxfc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2Vsc2UKKyAgICBhc3NlcnQoZ2lsX2hlbGQpOworI2VuZGlmCisjZW5kaWYKKyAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CisKKyAgICBpZiAocHRyMiAhPSBOVUxMKSB7CisgICAgICAgIGlmIChwdHIgIT0gTlVMTCkgeworICAgICAgICAgICAgLyogcmVzaXplICovCisgICAgICAgICAgICB0cmFjZW1hbGxvY19sb2dfZnJlZShwdHIpOworCisgICAgICAgICAgICBpZiAodHJhY2VtYWxsb2NfbG9nX2FsbG9jKHB0cjIsIG5ld19zaXplKSA8IDApIHsKKyAgICAgICAgICAgICAgICAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIFRoZSBlcnJvciBjYW5ub3QgYmUgcmVwb3J0ZWQgdG8KKyAgICAgICAgICAgICAgICAgICB0aGUgY2FsbGVyLCBiZWNhdXNlIHJlYWxsb2MoKSBtYXkgYWxyZWFkeSBoYXZlIHNocmlua2VkIHRoZQorICAgICAgICAgICAgICAgICAgIG1lbW9yeSBibG9jayBhbmQgc28gcmVtb3ZlZCBieXRlcy4KKworICAgICAgICAgICAgICAgICAgIFRoaXMgY2FzZSBpcyB2ZXJ5IHVubGlrZWx5IHNpbmNlIHdlIGp1c3QgcmVsZWFzZWQgYW4gaGFzaAorICAgICAgICAgICAgICAgICAgIGVudHJ5LCBzbyB3ZSBoYXZlIGVub3VnaCBmcmVlIGJ5dGVzIHRvIGFsbG9jYXRlIHRoZSBuZXcKKyAgICAgICAgICAgICAgICAgICBlbnRyeS4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIG5ldyBhbGxvY2F0aW9uICovCisgICAgICAgICAgICBpZiAodHJhY2VtYWxsb2NfbG9nX2FsbG9jKHB0cjIsIG5ld19zaXplKSA8IDApIHsKKyAgICAgICAgICAgICAgICAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKyAgICAgICAgICAgICAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIyKTsKKyAgICAgICAgICAgICAgICBwdHIyID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBzZXRfcmVlbnRyYW50KDApOworCisjaWYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorICAgIGlmICghZ2lsX2hlbGQpCisgICAgICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxfc3RhdGUpOworI2VuZGlmCisKKyAgICByZXR1cm4gcHRyMjsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2ZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworCisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAgLyogR0lMIGNhbm5vdCBiZSBsb2NrZWQgaW4gUHlNZW1fUmF3RnJlZSgpIGJlY2F1c2UgaXQgd291bGQgaW50cm9kdWNlCisgICAgICAgIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCisKKyAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworICAgIHRyYWNlbWFsbG9jX2xvZ19mcmVlKHB0cik7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jX2dpbCh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19tYWxsb2MoY3R4LCBzaXplLCAxKTsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yZWFsbG9jX2dpbCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19yZWFsbG9jKGN0eCwgcHRyLCBuZXdfc2l6ZSwgMSk7Cit9CisKKyNpZmRlZiBUUkFDRV9SQVdfTUFMTE9DCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX3Jhd19tYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gdHJhY2VtYWxsb2NfbWFsbG9jKGN0eCwgc2l6ZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmF3X3JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICByZXR1cm4gdHJhY2VtYWxsb2NfcmVhbGxvYyhjdHgsIHB0ciwgbmV3X3NpemUsIDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2NsZWFyX2ZpbGVuYW1lKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSAoUHlPYmplY3QgKillbnRyeS0+a2V5OworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlYmFja19mcmVlX3RyYWNlYmFjayhfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjayA9ICh0cmFjZWJhY2tfdCAqKWVudHJ5LT5rZXk7CisgICAgcmF3X2ZyZWUodHJhY2ViYWNrKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogcmVlbnRyYW50IGZsYWcgbXVzdCBiZSBzZXQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFuZCBHSUwgbXVzdCBiZSBoZWxkICovCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKHZvaWQpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICAvKiBUaGUgR0lMIHByb3RlY3RzIHZhcmlhYmxlcyBhZ2FpbnQgY29uY3VycmVudCBhY2Nlc3MgKi8KKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgLyogRGlzYWJsZSBhbHNvIHJlZW50cmFudCBjYWxscyB0byB0cmFjZW1hbGxvY19tYWxsb2MoKSB0byBub3QgYWRkIGEgbmV3CisgICAgICAgdHJhY2Ugd2hpbGUgd2UgYXJlIGNsZWFyaW5nIHRyYWNlcyAqLworICAgIGFzc2VydChnZXRfcmVlbnRyYW50KCkpOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBfUHlfaGFzaHRhYmxlX2NsZWFyKHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA9IDA7CisgICAgdHJhY2VtYWxsb2NfbWF4X3RyYWNlZF9tZW1vcnkgPSAwOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2tfZnJlZV90cmFjZWJhY2ssIE5VTEwpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2godHJhY2VtYWxsb2NfZmlsZW5hbWVzLCB0cmFjZW1hbGxvY19jbGVhcl9maWxlbmFtZSwgTlVMTCk7CisgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY19maWxlbmFtZXMpOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19pbml0KHZvaWQpCit7CisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9PSBUUkFDRU1BTExPQ19GSU5BTElaRUQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGhhcyBiZWVuIHVubG9hZGVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID09IFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVEKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworCisjaWZkZWYgUkVFTlRSQU5UX1RIUkVBRExPQ0FMCisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9IFB5VGhyZWFkX2NyZWF0ZV9rZXkoKTsKKyAgICBpZiAodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9PSAtMSkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayA9PSBOVUxMKSB7CisgICAgICAgIHRhYmxlc19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAodGFibGVzX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImNhbm5vdCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IGhhc2h0YWJsZV9uZXcoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYylQeU9iamVjdF9IYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhYmxlX2NvbXBhcmVfdW5pY29kZSk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gaGFzaHRhYmxlX25ldygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyloYXNodGFibGVfaGFzaF90cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jKWhhc2h0YWJsZV9jb21wYXJlX3RyYWNlYmFjayk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZXMgPSBoYXNodGFibGVfbmV3KHNpemVvZih0cmFjZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19maWxlbmFtZXMgPT0gTlVMTCB8fCB0cmFjZW1hbGxvY190cmFjZWJhY2tzID09IE5VTEwKKyAgICAgICAgfHwgdHJhY2VtYWxsb2NfdHJhY2VzID09IE5VTEwpCisgICAgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdW5rbm93bl9maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKyAgICBpZiAodW5rbm93bl9maWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnVua25vd25fZmlsZW5hbWUpOworCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLm5mcmFtZSA9IDE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7CisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5saW5lbm8gPSAwOworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5oYXNoID0gdHJhY2ViYWNrX2hhc2goJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjayk7CisKKyAgICAvKiBEaXNhYmxlIHRyYWNpbmcgYWxsb2NhdGlvbnMgdW50aWwgaG9va3MgYXJlIGluc3RhbGxlZC4gU2V0CisgICAgICAgYWxzbyB0aGUgcmVlbnRyYW50IGZsYWcgdG8gZGV0ZWN0IGJ1Z3M6IGZhaWwgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBzZXRfcmVlbnRyYW50KDEpIGlzIGNhbGxlZCB3aGlsZSB0cmFjaW5nIGlzIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19JTklUSUFMSVpFRDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2RlaW5pdCh2b2lkKQoreworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgIT0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQpCisgICAgICAgIHJldHVybjsKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19GSU5BTElaRUQ7CisKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisKKyAgICAvKiBkZXN0cm95IGhhc2ggdGFibGVzICovCisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIF9QeV9oYXNodGFibGVfZGVzdHJveSh0cmFjZW1hbGxvY19maWxlbmFtZXMpOworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayh0YWJsZXNfbG9jayk7CisgICAgICAgIHRhYmxlc19sb2NrID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFJFRU5UUkFOVF9USFJFQURMT0NBTAorICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXkodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisjZW5kaWYKKworICAgIFB5X1hERUNSRUYodW5rbm93bl9maWxlbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3N0YXJ0KHZvaWQpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisKKyAgICBpZiAodHJhY2VtYWxsb2NfaW5pdCgpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKSB7CisgICAgICAgIC8qIGhvb2sgYWxyZWFkeSBpbnN0YWxsZWQ6IGRvIG5vdGhpbmcgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHRyYWNlbWFsbG9jX2F0ZXhpdF9yZWdpc3RlcigpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIGFsbG9jLm1hbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19tYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSB0cmFjZW1hbGxvY19mcmVlOworCisgICAgYWxsb2MuY3R4ID0gJmFsbG9jYXRvcnMucmF3OworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworI2VuZGlmCisKKyAgICBhbGxvYy5tYWxsb2MgPSB0cmFjZW1hbGxvY19tYWxsb2NfZ2lsOworICAgIGFsbG9jLnJlYWxsb2MgPSB0cmFjZW1hbGxvY19yZWFsbG9jX2dpbDsKKyAgICBhbGxvYy5mcmVlID0gdHJhY2VtYWxsb2NfZnJlZTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm1lbTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jYXRvcnMubWVtKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jKTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm9iajsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jYXRvcnMub2JqKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgcmVhZHk6IHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nID0gMTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19zdG9wKHZvaWQpCit7CisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogc3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKyAgICB0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyA9IDA7CisKKyAgICAvKiBzZXQgdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yIGlmCisgICAgICAgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgLyogdW5yZWdpc3RlciB0aGUgaG9vayBvbiBtZW1vcnkgYWxsb2NhdG9ycyAqLworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKKyNlbmRpZgorICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2NhdG9ycy5tZW0pOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2NhdG9ycy5vYmopOworCisgICAgLyogcmVsZWFzZSBtZW1vcnkgKi8KKyAgICB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoKTsKK30KKworCitzdGF0aWMgUHlPYmplY3QqCitsaW5lbm9fYXNfb2JqKGludCBsaW5lbm8pCit7CisgICAgaWYgKGxpbmVubyA+PSAwKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGxpbmVubyk7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2lzX3RyYWNpbmdfZG9jLAorICAgICJpc190cmFjaW5nKCktPmJvb2xcbiIKKyAgICAiXG4iCisgICAgIlRydWUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMsXG4iCisgICAgIkZhbHNlIG90aGVyd2lzZS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfaXNfdHJhY2luZyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlc19kb2MsCisgICAgImNsZWFyX3RyYWNlcygpXG4iCisgICAgIlxuIgorICAgICJDbGVhciB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICBzZXRfcmVlbnRyYW50KDEpOworICAgIHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcygpOworICAgIHNldF9yZWVudHJhbnQoMCk7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZnJhbWVfdG9fcHlvYmplY3QoZnJhbWVfdCAqZnJhbWUpCit7CisgICAgUHlPYmplY3QgKmZyYW1lX29iaiwgKmxpbmVub19vYmo7CisKKyAgICBmcmFtZV9vYmogPSBQeVR1cGxlX05ldygyKTsKKyAgICBpZiAoZnJhbWVfb2JqID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGZyYW1lLT5maWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBmcmFtZS0+ZmlsZW5hbWUgPSBQeV9Ob25lOworICAgIFB5X0lOQ1JFRihmcmFtZS0+ZmlsZW5hbWUpOworICAgIFB5VHVwbGVfU0VUX0lURU0oZnJhbWVfb2JqLCAwLCBmcmFtZS0+ZmlsZW5hbWUpOworCisgICAgYXNzZXJ0KGZyYW1lLT5saW5lbm8gPj0gMCk7CisgICAgbGluZW5vX29iaiA9IGxpbmVub19hc19vYmooZnJhbWUtPmxpbmVubyk7CisgICAgaWYgKGxpbmVub19vYmogPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZnJhbWVfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0oZnJhbWVfb2JqLCAxLCBsaW5lbm9fb2JqKTsKKworICAgIHJldHVybiBmcmFtZV9vYmo7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlYmFja190b19weW9iamVjdCh0cmFjZWJhY2tfdCAqdHJhY2ViYWNrLCBfUHlfaGFzaHRhYmxlX3QgKmludGVybl90YWJsZSkKK3sKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqZnJhbWVzLCAqZnJhbWU7CisKKyAgICBpZiAoaW50ZXJuX3RhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeV9IQVNIVEFCTEVfR0VUKGludGVybl90YWJsZSwgdHJhY2ViYWNrLCBmcmFtZXMpKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZnJhbWVzKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFtZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZXMgPSBQeVR1cGxlX05ldyh0cmFjZWJhY2stPm5mcmFtZSk7CisgICAgaWYgKGZyYW1lcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaT0wOyBpIDwgdHJhY2ViYWNrLT5uZnJhbWU7IGkrKykgeworICAgICAgICBmcmFtZSA9IGZyYW1lX3RvX3B5b2JqZWN0KCZ0cmFjZWJhY2stPmZyYW1lc1tpXSk7CisgICAgICAgIGlmIChmcmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJhbWVzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oZnJhbWVzLCBpLCBmcmFtZSk7CisgICAgfQorCisgICAgaWYgKGludGVybl90YWJsZSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlfSEFTSFRBQkxFX1NFVChpbnRlcm5fdGFibGUsIHRyYWNlYmFjaywgZnJhbWVzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qIGludGVybl90YWJsZSBrZWVwcyBhIG5ldyByZWZlcmVuY2UgdG8gZnJhbWVzICovCisgICAgICAgIFB5X0lOQ1JFRihmcmFtZXMpOworICAgIH0KKyAgICByZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZV90b19weW9iamVjdCh0cmFjZV90ICp0cmFjZSwgX1B5X2hhc2h0YWJsZV90ICppbnRlcm5fdHJhY2ViYWNrcykKK3sKKyAgICBQeU9iamVjdCAqdHJhY2Vfb2JqID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc2l6ZSwgKnRyYWNlYmFjazsKKworICAgIHRyYWNlX29iaiA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmICh0cmFjZV9vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzaXplID0gUHlMb25nX0Zyb21TaXplX3QodHJhY2UtPnNpemUpOworICAgIGlmIChzaXplID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHRyYWNlX29iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHRyYWNlX29iaiwgMCwgc2l6ZSk7CisKKyAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tfdG9fcHlvYmplY3QodHJhY2UtPnRyYWNlYmFjaywgaW50ZXJuX3RyYWNlYmFja3MpOworICAgIGlmICh0cmFjZWJhY2sgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodHJhY2Vfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0odHJhY2Vfb2JqLCAxLCB0cmFjZWJhY2spOworCisgICAgcmV0dXJuIHRyYWNlX29iajsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIF9QeV9oYXNodGFibGVfdCAqdHJhY2VzOworICAgIF9QeV9oYXNodGFibGVfdCAqdHJhY2ViYWNrczsKKyAgICBQeU9iamVjdCAqbGlzdDsKK30gZ2V0X3RyYWNlc190OworCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2ZpbGwoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIGdldF90cmFjZXNfdCAqZ2V0X3RyYWNlcyA9IHVzZXJfZGF0YTsKKyAgICB0cmFjZV90ICp0cmFjZTsKKyAgICBQeU9iamVjdCAqdHJhY2VtYWxsb2Nfb2JqOworICAgIGludCByZXM7CisKKyAgICB0cmFjZSA9ICh0cmFjZV90ICopX1BZX0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KTsKKworICAgIHRyYWNlbWFsbG9jX29iaiA9IHRyYWNlX3RvX3B5b2JqZWN0KHRyYWNlLCBnZXRfdHJhY2VzLT50cmFjZWJhY2tzKTsKKyAgICBpZiAodHJhY2VtYWxsb2Nfb2JqID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmVzID0gUHlMaXN0X0FwcGVuZChnZXRfdHJhY2VzLT5saXN0LCB0cmFjZW1hbGxvY19vYmopOworICAgIFB5X0RFQ1JFRih0cmFjZW1hbGxvY19vYmopOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19weW9iamVjdF9kZWNyZWZfY2IoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFB5T2JqZWN0ICpvYmogPSAoUHlPYmplY3QgKilfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZXNfZG9jLAorICAgICJfZ2V0X3RyYWNlcygpIC0+IGxpc3RcbiIKKyAgICAiXG4iCisgICAgIkdldCB0cmFjZXMgb2YgYWxsIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi5cbiIKKyAgICAiUmV0dXJuIGEgbGlzdCBvZiAoc2l6ZTogaW50LCB0cmFjZWJhY2s6IHR1cGxlKSB0dXBsZXMuXG4iCisgICAgInRyYWNlYmFjayBpcyBhIHR1cGxlIG9mIChmaWxlbmFtZTogc3RyLCBsaW5lbm86IGludCkgdHVwbGVzLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJuIGFuIGVtcHR5IGxpc3QgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBkaXNhYmxlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBnZXRfdHJhY2VzX3QgZ2V0X3RyYWNlczsKKyAgICBpbnQgZXJyOworCisgICAgZ2V0X3RyYWNlcy50cmFjZXMgPSBOVUxMOworICAgIGdldF90cmFjZXMudHJhY2ViYWNrcyA9IE5VTEw7CisgICAgZ2V0X3RyYWNlcy5saXN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoZ2V0X3RyYWNlcy5saXN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICByZXR1cm4gZ2V0X3RyYWNlcy5saXN0OworCisgICAgLyogdGhlIHRyYWNlYmFjayBoYXNoIHRhYmxlIGlzIHVzZWQgdGVtcG9yYXJpbHkgdG8gaW50ZXJuIHRyYWNlYmFjayB0dXBsZQorICAgICAgIG9mIChmaWxlbmFtZSwgbGluZW5vKSB0dXBsZXMgKi8KKyAgICBnZXRfdHJhY2VzLnRyYWNlYmFja3MgPSBoYXNodGFibGVfbmV3KHNpemVvZihQeU9iamVjdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KTsKKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZWJhY2tzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGdldF90cmFjZXMudHJhY2VzID0gX1B5X2hhc2h0YWJsZV9jb3B5KHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgaWYgKGdldF90cmFjZXMudHJhY2VzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBzZXRfcmVlbnRyYW50KDEpOworICAgIGVyciA9IF9QeV9oYXNodGFibGVfZm9yZWFjaChnZXRfdHJhY2VzLnRyYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19maWxsLCAmZ2V0X3RyYWNlcyk7CisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgZ290byBmaW5hbGx5OworCitlcnJvcjoKKyAgICBQeV9DTEVBUihnZXRfdHJhY2VzLmxpc3QpOworCitmaW5hbGx5OgorICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlYmFja3MgIT0gTlVMTCkgeworICAgICAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2goZ2V0X3RyYWNlcy50cmFjZWJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlbWFsbG9jX3B5b2JqZWN0X2RlY3JlZl9jYiwgTlVMTCk7CisgICAgICAgIF9QeV9oYXNodGFibGVfZGVzdHJveShnZXRfdHJhY2VzLnRyYWNlYmFja3MpOworICAgIH0KKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZXMgIT0gTlVMTCkKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KGdldF90cmFjZXMudHJhY2VzKTsKKworICAgIHJldHVybiBnZXRfdHJhY2VzLmxpc3Q7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFja19kb2MsCisgICAgIl9nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopXG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIHRyYWNlYmFjayB3aGVyZSB0aGUgUHl0aG9uIG9iamVjdCBvYmogd2FzIGFsbG9jYXRlZC5cbiIKKyAgICAiUmV0dXJuIGEgdHVwbGUgb2YgKGZpbGVuYW1lOiBzdHIsIGxpbmVubzogaW50KSB0dXBsZXMuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gTm9uZSBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGRpc2FibGVkIG9yIGRpZCBub3RcbiIKKyAgICAidHJhY2UgdGhlIGFsbG9jYXRpb24gb2YgdGhlIG9iamVjdC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfZ2V0X29iamVjdF90cmFjZWJhY2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlUeXBlT2JqZWN0ICp0eXBlOworICAgIHZvaWQgKnB0cjsKKyAgICB0cmFjZV90IHRyYWNlOworICAgIGludCBmb3VuZDsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCisgICAgdHlwZSA9IFB5X1RZUEUob2JqKTsKKyAgICBpZiAoUHlUeXBlX0lTX0dDKHR5cGUpKQorICAgICAgICBwdHIgPSAodm9pZCAqKSgoY2hhciAqKW9iaiAtIHNpemVvZihQeUdDX0hlYWQpKTsKKyAgICBlbHNlCisgICAgICAgIHB0ciA9ICh2b2lkICopb2JqOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBmb3VuZCA9IF9QeV9IQVNIVEFCTEVfR0VUKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCB0cmFjZSk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICByZXR1cm4gdHJhY2ViYWNrX3RvX3B5b2JqZWN0KHRyYWNlLnRyYWNlYmFjaywgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlbWFsbG9jX2F0ZXhpdChQeU9iamVjdCAqc2VsZikKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisgICAgdHJhY2VtYWxsb2NfZGVpbml0KCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBhdGV4aXRfbWV0aG9kID0geworICAgICJfYXRleGl0IiwgKFB5Q0Z1bmN0aW9uKXRyYWNlbWFsbG9jX2F0ZXhpdCwgTUVUSF9OT0FSR1MsIE5VTEx9OworCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19hdGV4aXRfcmVnaXN0ZXIodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbWV0aG9kID0gTlVMTCwgKmF0ZXhpdCA9IE5VTEwsICpmdW5jID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIGludCByZXQgPSAtMTsKKworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuYXRleGl0X3JlZ2lzdGVyZWQpCisgICAgICAgIHJldHVybiAwOworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy5hdGV4aXRfcmVnaXN0ZXJlZCA9IDE7CisKKyAgICAvKiBwcml2YXRlIGZ1bmN0aW9ucyAqLworICAgIG1ldGhvZCA9IFB5Q0Z1bmN0aW9uX05ldygmYXRleGl0X21ldGhvZCwgTlVMTCk7CisgICAgaWYgKG1ldGhvZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBhdGV4aXQgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImF0ZXhpdCIpOworICAgIGlmIChhdGV4aXQgPT0gTlVMTCkgeworICAgICAgICBpZiAoIVB5RXJyX1dhcm4oUHlFeGNfSW1wb3J0V2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgImF0ZXhpdCBtb2R1bGUgaXMgbWlzc2luZzogIgorICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGF1dG9tYXRpY2FsbHkgZGlzYWJsZSB0cmFjZW1hbGxvYyBhdCBleGl0IikpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgZnVuYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoYXRleGl0LCAicmVnaXN0ZXIiKTsKKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuYywgIk8iLCBtZXRob2QpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworCisgICAgcmV0ID0gMDsKKworZG9uZToKKyAgICBQeV9YREVDUkVGKG1ldGhvZCk7CisgICAgUHlfWERFQ1JFRihmdW5jKTsKKyAgICBQeV9YREVDUkVGKGF0ZXhpdCk7CisgICAgcmV0dXJuIHJldDsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX3N0YXJ0X2RvYywKKyAgICAic3RhcnQobmZyYW1lOiBpbnQ9MSlcbiIKKyAgICAiXG4iCisgICAgIlN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4gU2V0IGFsc28gdGhlIG1heGltdW0gbnVtYmVyIFxuIgorICAgICJvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZSB0byBuZnJhbWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX3N0YXJ0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG5mcmFtZSA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnN0YXJ0IiwgJm5mcmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKG5mcmFtZSA8IDEgfHwgbmZyYW1lID4gTUFYX05GUkFNRSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ0aGUgbnVtYmVyIG9mIGZyYW1lcyBtdXN0IGJlIGluIHJhbmdlIFsxOyAlaV0iLAorICAgICAgICAgICAgICAgICAgICAgTUFYX05GUkFNRSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSA9IFB5X1NBRkVfRE9XTkNBU1QobmZyYW1lLCBQeV9zc2l6ZV90LCBpbnQpOworCisgICAgaWYgKHRyYWNlbWFsbG9jX3N0YXJ0KCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2Nfc3RvcF9kb2MsCisgICAgInN0b3AoKVxuIgorICAgICJcbiIKKyAgICAiU3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGNsZWFyIHRyYWNlc1xuIgorICAgICJvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX3N0b3AoUHlPYmplY3QgKnNlbGYpCit7CisgICAgdHJhY2VtYWxsb2Nfc3RvcCgpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdF9kb2MsCisgICAgImdldF90cmFjZWJhY2tfbGltaXQoKSAtPiBpbnRcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiB0aGUgdHJhY2ViYWNrXG4iCisgICAgIm9mIGEgdHJhY2UuXG4iCisgICAgIlxuIgorICAgICJCeSBkZWZhdWx0LCBhIHRyYWNlIG9mIGFuIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2sgb25seSBzdG9yZXNcbiIKKyAgICAidGhlIG1vc3QgcmVjZW50IGZyYW1lOiB0aGUgbGltaXQgaXMgMS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdChQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHRyYWNlbWFsbG9jX2NvbmZpZy5tYXhfbmZyYW1lKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnlfZG9jLAorICAgICJnZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkgLT4gaW50XG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIG1lbW9yeSB1c2FnZSBpbiBieXRlcyBvZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlXG4iCisgICAgInVzZWQgaW50ZXJuYWxseSB0byB0cmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnkoUHlPYmplY3QgKnNlbGYpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlPYmplY3QgKnNpemVfb2JqOworCisgICAgc2l6ZSA9IF9QeV9oYXNodGFibGVfc2l6ZSh0cmFjZW1hbGxvY190cmFjZWJhY2tzKTsKKyAgICBzaXplICs9IF9QeV9oYXNodGFibGVfc2l6ZSh0cmFjZW1hbGxvY19maWxlbmFtZXMpOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBzaXplICs9IF9QeV9oYXNodGFibGVfc2l6ZSh0cmFjZW1hbGxvY190cmFjZXMpOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIHNpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3Qoc2l6ZSk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4iLCBzaXplX29iaik7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeV9kb2MsCisgICAgImdldF90cmFjZWRfbWVtb3J5KCkgLT4gKGludCwgaW50KVxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSBjdXJyZW50IHNpemUgYW5kIG1heGltdW0gc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIHRyYWNlZFxuIgorICAgICJieSB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGFzIGEgdHVwbGU6IChzaXplOiBpbnQsIG1heF9zaXplOiBpbnQpLiIpOworCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHNpemUsIG1heF9zaXplOworICAgIFB5T2JqZWN0ICpzaXplX29iaiwgKm1heF9zaXplX29iajsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpaSIsIDAsIDApOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBzaXplID0gdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeTsKKyAgICBtYXhfc2l6ZSA9IHRyYWNlbWFsbG9jX21heF90cmFjZWRfbWVtb3J5OworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIHNpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3Qoc2l6ZSk7CisgICAgbWF4X3NpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3QobWF4X3NpemUpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOTiIsIHNpemVfb2JqLCBtYXhfc2l6ZV9vYmopOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKKyAgICB7ImlzX3RyYWNpbmciLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfaXNfdHJhY2luZywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2lzX3RyYWNpbmdfZG9jfSwKKyAgICB7ImNsZWFyX3RyYWNlcyIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19jbGVhcl90cmFjZXMsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXNfZG9jfSwKKyAgICB7Il9nZXRfdHJhY2VzIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2dldF90cmFjZXMsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2RvY30sCisgICAgeyJfZ2V0X29iamVjdF90cmFjZWJhY2siLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfZ2V0X29iamVjdF90cmFjZWJhY2ssCisgICAgIE1FVEhfTywgdHJhY2VtYWxsb2NfZ2V0X29iamVjdF90cmFjZWJhY2tfZG9jfSwKKyAgICB7InN0YXJ0IiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX3N0YXJ0LAorICAgICAgTUVUSF9WQVJBUkdTLCB0cmFjZW1hbGxvY19zdGFydF9kb2N9LAorICAgIHsic3RvcCIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19zdG9wLAorICAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX3N0b3BfZG9jfSwKKyAgICB7ImdldF90cmFjZWJhY2tfbGltaXQiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdCwKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXRfZG9jfSwKKyAgICB7ImdldF90cmFjZW1hbGxvY19tZW1vcnkiLCAoUHlDRnVuY3Rpb24pdHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSwKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnlfZG9jfSwKKyAgICB7ImdldF90cmFjZWRfbWVtb3J5IiwgKFB5Q0Z1bmN0aW9uKXRyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnlfZG9jfSwKKworICAgIC8qIHNlbnRpbmVsICovCisgICAge05VTEwsIE5VTEx9Cit9OworCitQeURvY19TVFJWQVIobW9kdWxlX2RvYywKKyJEZWJ1ZyBtb2R1bGUgdG8gdHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiIpOworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG1vZHVsZV9kZWYgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdHJhY2VtYWxsb2MiLAorICAgIG1vZHVsZV9kb2MsCisgICAgMCwgLyogbm9uLW5lZ2F0aXZlIHNpemUgdG8gYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZSAqLworICAgIG1vZHVsZV9tZXRob2RzLAorICAgIE5VTEwsCit9OworCitQeU1PRElOSVRfRlVOQworUHlJbml0X190cmFjZW1hbGxvYyh2b2lkKQoreworICAgIFB5T2JqZWN0ICptOworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJm1vZHVsZV9kZWYpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2luaXQoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIG07Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX3N5c194b3B0aW9ucyhQeU9iamVjdCAqdmFsdWUpCit7CisgICAgUHlPYmplY3QgKnZhbHVlbG9uZzsKKyAgICBsb25nIG5mcmFtZTsKKworICAgIGlmICh2YWx1ZSA9PSBQeV9UcnVlKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKTsKKyAgICBpZiAoUHlVbmljb2RlX0dldExlbmd0aCh2YWx1ZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgdmFsdWVsb25nID0gUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KHZhbHVlLCAxMCk7CisgICAgaWYgKHZhbHVlbG9uZyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBuZnJhbWUgPSBQeUxvbmdfQXNMb25nKHZhbHVlbG9uZyk7CisgICAgUHlfREVDUkVGKHZhbHVlbG9uZyk7CisgICAgaWYgKG5mcmFtZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobmZyYW1lIDwgMSB8fCBuZnJhbWUgPiBNQVhfTkZSQU1FKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChuZnJhbWUsIGxvbmcsIGludCk7Cit9CisKK2ludAorX1B5VHJhY2VNYWxsb2NfSW5pdCh2b2lkKQoreworICAgIGNoYXIgKnA7CisgICAgaW50IG5mcmFtZTsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OVFJBQ0VNQUxMT0MiKSkgJiYgKnAgIT0gJ1wwJykgeworICAgICAgICBjaGFyICplbmRwdHIgPSBwOworICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworCisgICAgICAgIHZhbHVlID0gc3RydG91bChwLCAmZW5kcHRyLCAxMCk7CisgICAgICAgIGlmICgqZW5kcHRyICE9ICdcMCcKKyAgICAgICAgICAgIHx8IHZhbHVlIDwgMQorICAgICAgICAgICAgfHwgdmFsdWUgPiBNQVhfTkZSQU1FCisgICAgICAgICAgICB8fCAoZXJybm8gPT0gRVJBTkdFICYmIHZhbHVlID09IFVMT05HX01BWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlBZVEhPTlRSQUNFTUFMTE9DIG11c3QgYmUgYW4gaW50ZWdlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiByYW5nZSBbMTsgIiBTVFIoTUFYX05GUkFNRSkgIl0iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IChpbnQpdmFsdWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqeG9wdGlvbnMsICprZXksICp2YWx1ZTsKKworICAgICAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CisgICAgICAgIGlmICh4b3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGtleSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ0cmFjZW1hbGxvYyIpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcih4b3B0aW9ucywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIC8qIC1YIHRyYWNlbWFsbG9jIGlzIG5vdCB1c2VkICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IHBhcnNlX3N5c194b3B0aW9ucyh2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGlmIChuZnJhbWUgPCAwKSB7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCItWCB0cmFjZW1hbGxvYz1ORlJBTUU6IG51bWJlciBvZiBmcmFtZSBtdXN0IGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGludGVnZXIgaW4gcmFuZ2UgWzE7ICIgU1RSKE1BWF9ORlJBTUUpICJdIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSA9IG5mcmFtZTsKKyAgICByZXR1cm4gdHJhY2VtYWxsb2Nfc3RhcnQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fd2Vha3JlZi5jIGIvTW9kdWxlcy9fd2Vha3JlZi5jCmluZGV4IDg4OTk1YjguLjgwZGU1ZGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3dlYWtyZWYuYworKysgYi9Nb2R1bGVzL193ZWFrcmVmLmMKQEAgLTQsMjUgKzQsNTYgQEAKICNkZWZpbmUgR0VUX1dFQUtSRUZTX0xJU1RQVFIobykgXAogICAgICAgICAoKFB5V2Vha1JlZmVyZW5jZSAqKikgUHlPYmplY3RfR0VUX1dFQUtSRUZTX0xJU1RQVFIobykpCiAKKy8qW2NsaW5pY10KK21vZHVsZSBfd2Vha3JlZgorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCiAKLVB5RG9jX1NUUlZBUih3ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX18sCi0iZ2V0d2Vha3JlZmNvdW50KG9iamVjdCkgLS0gcmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzXG4iCi0idG8gJ29iamVjdCcuIik7CisvKltjbGluaWNdCisKK193ZWFrcmVmLmdldHdlYWtyZWZjb3VudCAtPiBQeV9zc2l6ZV90CisKKyAgb2JqZWN0OiBvYmplY3QKKyAgLworCitSZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gJ29iamVjdCcuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19fLAorImdldHdlYWtyZWZjb3VudChvYmplY3QpXG4iCisiUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvIFwnb2JqZWN0XCcuIik7CisKKyNkZWZpbmUgX1dFQUtSRUZfR0VUV0VBS1JFRkNPVU5UX01FVEhPRERFRiAgICBcCisgICAgeyJnZXR3ZWFrcmVmY291bnQiLCAoUHlDRnVuY3Rpb24pX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCBNRVRIX08sIF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13ZWFrcmVmX2dldHdlYWtyZWZjb3VudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iamVjdCkKK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqZWN0KQogewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgX3JldHVybl92YWx1ZTsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwobW9kdWxlLCBvYmplY3QpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKIAotICAgIGlmIChQeVR5cGVfU1VQUE9SVFNfV0VBS1JFRlMoUHlfVFlQRShvYmplY3QpKSkgewotICAgICAgICBQeVdlYWtSZWZlcmVuY2UgKipsaXN0ID0gR0VUX1dFQUtSRUZTX0xJU1RQVFIob2JqZWN0KTsKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbVNzaXplX3QoX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoKmxpc3QpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcoMCk7CitzdGF0aWMgUHlfc3NpemVfdAorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKKy8qW2NsaW5pYyBjaGVja3N1bTogNDM2ZThmYmUwMjk3NDM0Mzc1ZjAzOWQ4YzJkOWZjM2E5YmJlNzczY10qLworeworICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3Q7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGlmICghUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKFB5X1RZUEUob2JqZWN0KSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGxpc3QgPSBHRVRfV0VBS1JFRlNfTElTVFBUUihvYmplY3QpOworICAgIHJldHVybiBfUHlXZWFrcmVmX0dldFdlYWtyZWZDb3VudCgqbGlzdCk7CiB9CiAKIApAQCAtNzgsOCArMTA5LDcgQEAKIAogc3RhdGljIFB5TWV0aG9kRGVmCiB3ZWFrcmVmX2Z1bmN0aW9uc1tdID0gIHsKLSAgICB7ImdldHdlYWtyZWZjb3VudCIsIHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCAgICAgICAgTUVUSF9PLAotICAgICB3ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAorICAgIF9XRUFLUkVGX0dFVFdFQUtSRUZDT1VOVF9NRVRIT0RERUYKICAgICB7ImdldHdlYWtyZWZzIiwgICAgIHdlYWtyZWZfZ2V0d2Vha3JlZnMsICAgICAgICAgICAgTUVUSF9PLAogICAgICB3ZWFrcmVmX2dldHdlYWtyZWZzX19kb2NfX30sCiAgICAgeyJwcm94eSIsICAgICAgICAgICB3ZWFrcmVmX3Byb3h5LCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKQEAgLTEwNiw3ICsxMzYsNyBAQAogICAgIFB5T2JqZWN0ICptOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmd2Vha3JlZm1vZHVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgaWYgKG0gIT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoJl9QeVdlYWtyZWZfUmVmVHlwZSk7CiAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAicmVmIiwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3dpbmFwaS5jIGIvTW9kdWxlcy9fd2luYXBpLmMKaW5kZXggYzUzZDU1YS4uNzI0YTQ3OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fd2luYXBpLmMKKysrIGIvTW9kdWxlcy9fd2luYXBpLmMKQEAgLTYyLDYgKzYyLDggQEAKIAogI2RlZmluZSBUX0hBTkRMRSBUX1BPSU5URVIKIAorI2RlZmluZSBEV09SRF9NQVggNDI5NDk2NzI5NVUKKwogLyogR3JhYiBDYW5jZWxJb0V4IGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KIHN0YXRpYyBpbnQgaGFzX0NhbmNlbElvRXggPSAtMTsKIHN0YXRpYyBCT09MIChDQUxMQkFDSyAqUHlfQ2FuY2VsSW9FeCkoSEFORExFLCBMUE9WRVJMQVBQRUQpOwpAQCAtMTA1LDE3ICsxMDcsMzcgQEAKIHsKICAgICBEV09SRCBieXRlczsKICAgICBpbnQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisKICAgICBpZiAoc2VsZi0+cGVuZGluZykgewotICAgICAgICAvKiBtYWtlIGl0IGEgcHJvZ3JhbW1pbmcgZXJyb3IgdG8gZGVhbGxvY2F0ZSB3aGlsZSBvcGVyYXRpb24KLSAgICAgICAgICAgaXMgcGVuZGluZywgZXZlbiBpZiB3ZSBjYW4gc2FmZWx5IGNhbmNlbCBpdCAqLwogICAgICAgICBpZiAoY2hlY2tfQ2FuY2VsSW9FeCgpICYmCi0gICAgICAgICAgICAgICAgUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKSkKLSAgICAgICAgICAgIEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJmJ5dGVzLCBUUlVFKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9ucyBzdGlsbCBpbiBmbGlnaHQgd2hpbGUgZGVzdHJveWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiT3ZlcmxhcHBlZCBvYmplY3QsIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIpOwotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgICAgICBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgICAgICBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsICZieXRlcywgVFJVRSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIHBlbmRpbmcgLS0gbm90aGluZyB0byBkby4gKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChfUHlfRmluYWxpemluZyA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcgLS0gZ2l2ZSBhIHdhcm5pbmcuICBUaGlzCisgICAgICAgICAgICAgICB3aWxsIHByb2JhYmx5IG9ubHkgaGFwcGVuIG9uIFdpbmRvd3MgWFAuICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9ucyBzdGlsbCBpbiBmbGlnaHQgd2hpbGUgZGVzdHJveWluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk92ZXJsYXBwZWQgb2JqZWN0LCB0aGUgcHJvY2VzcyBtYXkgY3Jhc2giKTsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZywgYnV0IHRoZSBwcm9jZXNzIGlzCisgICAgICAgICAgICAgICBwcm9iYWJseSBhYm91dCB0byBleGl0LCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSB0b28gbXVjaAorICAgICAgICAgICAgICAgYWJvdXQgbWVtb3J5IGxlYWtzLiAgTGVha2luZyBzZWxmIHByZXZlbnRzIGEgcG90ZW50aWFsCisgICAgICAgICAgICAgICBjcmFzaC4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgZGFlbW9uIHRocmVhZCBpcyBjbGVhbmVkCisgICAgICAgICAgICAgICB1cCBhdCBleGl0IC0tIHNlZSAjMTk1NjUuICBXZSBvbmx5IGV4cGVjdCB0byBnZXQgaGVyZQorICAgICAgICAgICAgICAgb24gV2luZG93cyBYUC4gKi8KKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICAgICAgICAgIFNldExhc3RFcnJvcihlcnIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQorCiAgICAgQ2xvc2VIYW5kbGUoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQpOwogICAgIFNldExhc3RFcnJvcihlcnIpOwogICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIub2JqKQpAQCAtMTE0Miw3ICsxMTY0LDcgQEAKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIFB5X2J1ZmZlciBfYnVmLCAqYnVmOwogICAgIFB5T2JqZWN0ICpidWZvYmo7Ci0gICAgRFdPUkQgd3JpdHRlbjsKKyAgICBEV09SRCBsZW4sIHdyaXR0ZW47CiAgICAgQk9PTCByZXQ7CiAgICAgaW50IHVzZV9vdmVybGFwcGVkID0gMDsKICAgICBEV09SRCBlcnI7CkBAIC0xMTcwLDcgKzExOTIsOCBAQAogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBidWYtPmJ1ZiwgYnVmLT5sZW4sICZ3cml0dGVuLAorICAgIGxlbiA9IChEV09SRClQeV9NSU4oYnVmLT5sZW4sIERXT1JEX01BWCk7CisgICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgYnVmLT5idWYsIGxlbiwgJndyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXBwZWQgPyAmb3ZlcmxhcHBlZC0+b3ZlcmxhcHBlZCA6IE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXJyYXltb2R1bGUuYyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwppbmRleCA5NmM5ZTViLi4zNDY2MDY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCkBAIC01MTMsNyArNTEzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRhcnJheWl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGkpCiB7Ci0gICAgcmVnaXN0ZXIgYXJyYXlvYmplY3QgKmFwOworICAgIGFycmF5b2JqZWN0ICphcDsKICAgICBhc3NlcnQoYXJyYXlfQ2hlY2sob3ApKTsKICAgICBhcCA9IChhcnJheW9iamVjdCAqKW9wOwogICAgIGFzc2VydChpPj0wICYmIGk8UHlfU0laRShhcCkpOwpAQCAtOTY4LDggKzk2OCwxMyBAQAogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgY291bnQrKzsKQEAgLTk5MCw4ICs5OTUsMTMgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkgewogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylpKTsKQEAgLTEwMTYsNiArMTAyNiw4IEBACiAKICAgICBmb3IgKGkgPSAwLCBjbXAgPSAwIDsgY21wID09IDAgJiYgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICB9CkBAIC0xMDI4LDggKzEwNDAsMTMgQEAKICAgICBpbnQgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkgewogICAgICAgICAgICAgaWYgKGFycmF5X2Fzc19zbGljZShzZWxmLCBpLCBpKzEsCkBAIC0xMDY4LDcgKzEwODUsOSBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZixpKTsKKyAgICB2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChhcnJheV9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKSAhPSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMTE0LDEzICsxMTMzLDI1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfYnVmZmVyX2luZm8oYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgUHlPYmplY3QqIHJldHZhbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEwsICp2OworCiAgICAgcmV0dmFsID0gUHlUdXBsZV9OZXcoMik7CiAgICAgaWYgKCFyZXR2YWwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDAsIFB5TG9uZ19Gcm9tVm9pZFB0cihzZWxmLT5vYl9pdGVtKSk7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIFB5TG9uZ19Gcm9tTG9uZygobG9uZykoUHlfU0laRShzZWxmKSkpKTsKKyAgICB2ID0gUHlMb25nX0Zyb21Wb2lkUHRyKHNlbGYtPm9iX2l0ZW0pOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgdik7CisKKyAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShQeV9TSVpFKHNlbGYpKSk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAxLCB2KTsKIAogICAgIHJldHVybiByZXR2YWw7CiB9CkBAIC0xMjA2LDggKzEyMzcsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X3JldmVyc2UoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKLSAgICByZWdpc3RlciBjaGFyICpwLCAqcTsKKyAgICBQeV9zc2l6ZV90IGl0ZW1zaXplID0gc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOworICAgIGNoYXIgKnAsICpxOwogICAgIC8qIGxpdHRsZSBidWZmZXIgdG8gaG9sZCBpdGVtcyB3aGlsZSBzd2FwcGluZyAqLwogICAgIGNoYXIgdG1wWzI1Nl07ICAgICAgLyogOCBpcyBwcm9iYWJseSBlbm91Z2ggLS0gYnV0IHdoeSBza2ltcCAqLwogICAgIGFzc2VydCgoc2l6ZV90KWl0ZW1zaXplIDw9IHNpemVvZih0bXApKTsKQEAgLTEzODYsMTMgKzE0MTcsMTYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgdik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgdikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKHRvbGlzdF9kb2MsCkBAIC0xNjY0LDExICsxNjk4LDggQEAKIHN0YXRpYyBlbnVtIG1hY2hpbmVfZm9ybWF0X2NvZGUKIHR5cGVjb2RlX3RvX21mb3JtYXRfY29kZShjaGFyIHR5cGVjb2RlKQogewotI2lmZGVmIFdPUkRTX0JJR0VORElBTgotICAgIGNvbnN0IGludCBpc19iaWdfZW5kaWFuID0gMTsKLSNlbHNlCi0gICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSAwOwotI2VuZGlmCisgICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSBQWV9CSUdfRU5ESUFOOworCiAgICAgc2l6ZV90IGludHNpemU7CiAgICAgaW50IGlzX3NpZ25lZDsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYyBiL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKaW5kZXggZjY4ZDgwNC4uOTg4NzAxNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYworKysgYi9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCkBAIC0xMCw4ICsxMCw2IEBACiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKGZvciBhdGV4aXRfY2xlYW51cCkgKi8KIHN0YXRpYyBQeU9iamVjdCAqYXRleGl0X2NsZWFyKFB5T2JqZWN0KiwgUHlPYmplY3QqKTsKLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKGZvciBhdGV4aXRfY2FsbGZ1bmNzKSAqLwotc3RhdGljIHZvaWQgYXRleGl0X2NsZWFudXAoUHlPYmplY3QqKTsKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgbW9kdWxlIG9iamVjdCAqLwogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBhdGV4aXRtb2R1bGU7CiAKQEAgLTMzLDYgKzMxLDM1IEBACiAjZGVmaW5lIEdFVF9BVEVYSVRfU1RBVEUobW9kKSAoKGF0ZXhpdG1vZHVsZV9zdGF0ZSopUHlNb2R1bGVfR2V0U3RhdGUobW9kKSkKIAogCitzdGF0aWMgdm9pZAorYXRleGl0X2RlbGV0ZV9jYihhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlLCBpbnQgaSkKK3sKKyAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOworCisgICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKKyAgICBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXSA9IE5VTEw7CisgICAgUHlfREVDUkVGKGNiLT5mdW5jKTsKKyAgICBQeV9ERUNSRUYoY2ItPmFyZ3MpOworICAgIFB5X1hERUNSRUYoY2ItPmt3YXJncyk7CisgICAgUHlNZW1fRnJlZShjYik7Cit9CisKKy8qIENsZWFyIGFsbCBjYWxsYmFja3Mgd2l0aG91dCBjYWxsaW5nIHRoZW0gKi8KK3N0YXRpYyB2b2lkCithdGV4aXRfY2xlYW51cChhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlKQoreworICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1vZHN0YXRlLT5uY2FsbGJhY2tzOyBpKyspIHsKKyAgICAgICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKKyAgICAgICAgaWYgKGNiID09IE5VTEwpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKG1vZHN0YXRlLCBpKTsKKyAgICB9CisgICAgbW9kc3RhdGUtPm5jYWxsYmFja3MgPSAwOworfQorCiAvKiBJbnN0YWxsZWQgaW50byBweXRob25ydW4uYydzIGF0ZXhpdCBtZWNoYW5pc20gKi8KIAogc3RhdGljIHZvaWQKQEAgLTc4LDM0ICsxMDUsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHVsZSk7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOwogCiAgICAgaWYgKGV4Y190eXBlKQogICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190Yik7CiB9CiAKLXN0YXRpYyB2b2lkCi1hdGV4aXRfZGVsZXRlX2NiKFB5T2JqZWN0ICpzZWxmLCBpbnQgaSkKLXsKLSAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOwotICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7Ci0KLSAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7Ci0gICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKLSAgICBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXSA9IE5VTEw7Ci0gICAgUHlfREVDUkVGKGNiLT5mdW5jKTsKLSAgICBQeV9ERUNSRUYoY2ItPmFyZ3MpOwotICAgIFB5X1hERUNSRUYoY2ItPmt3YXJncyk7Ci0gICAgUHlNZW1fRnJlZShjYik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGV4aXRfY2xlYW51cChQeU9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqciA9IGF0ZXhpdF9jbGVhcihzZWxmLCBOVUxMKTsKLSAgICBQeV9ERUNSRUYocik7Ci19Ci0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogTW9kdWxlIG1ldGhvZHMuICovCiAKQEAgLTE5NCwyMSArMTk5LDUwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXRleGl0X2NsZWFyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogeworICAgIGF0ZXhpdF9jbGVhbnVwKEdFVF9BVEVYSVRfU1RBVEUoc2VsZikpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoYXRleGl0X25jYWxsYmFja3NfX2RvY19fLAorIl9uY2FsbGJhY2tzKCkgLT4gaW50XG5cCitcblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgZXhpdCBmdW5jdGlvbnMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdGV4aXRfbmNhbGxiYWNrcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKICAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOwotICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7Ci0gICAgaW50IGk7CiAKICAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CiAKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG1vZHN0YXRlLT5uY2FsbGJhY2tzKTsKK30KKworc3RhdGljIGludAorYXRleGl0X21fdHJhdmVyc2UoUHlPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIGludCBpOworICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7CisKKyAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CiAgICAgZm9yIChpID0gMDsgaSA8IG1vZHN0YXRlLT5uY2FsbGJhY2tzOyBpKyspIHsKLSAgICAgICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKKyAgICAgICAgYXRleGl0X2NhbGxiYWNrICpjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOwogICAgICAgICBpZiAoY2IgPT0gTlVMTCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF0ZXhpdF9kZWxldGVfY2Ioc2VsZiwgaSk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5mdW5jKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmFyZ3MpOworICAgICAgICBQeV9WSVNJVChjYi0+a3dhcmdzKTsKICAgICB9Ci0gICAgbW9kc3RhdGUtPm5jYWxsYmFja3MgPSAwOwotICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithdGV4aXRfbV9jbGVhcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOworICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKKyAgICBhdGV4aXRfY2xlYW51cChtb2RzdGF0ZSk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMTYsNiArMjUwLDcgQEAKIHsKICAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOwogICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShtKTsKKyAgICBhdGV4aXRfY2xlYW51cChtb2RzdGF0ZSk7CiAgICAgUHlNZW1fRnJlZShtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrcyk7CiB9CiAKQEAgLTI0Niw3ICsyODEsNyBAQAogICAgICAgICBpZiAoZXEgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmIChlcSkKLSAgICAgICAgICAgIGF0ZXhpdF9kZWxldGVfY2Ioc2VsZiwgaSk7CisgICAgICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKG1vZHN0YXRlLCBpKTsKICAgICB9CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CkBAIC0yNjAsNiArMjk1LDggQEAKICAgICAgICAgYXRleGl0X3VucmVnaXN0ZXJfX2RvY19ffSwKICAgICB7Il9ydW5fZXhpdGZ1bmNzIiwgKFB5Q0Z1bmN0aW9uKSBhdGV4aXRfcnVuX2V4aXRmdW5jcywgTUVUSF9OT0FSR1MsCiAgICAgICAgIGF0ZXhpdF9ydW5fZXhpdGZ1bmNzX19kb2NfX30sCisgICAgeyJfbmNhbGxiYWNrcyIsIChQeUNGdW5jdGlvbikgYXRleGl0X25jYWxsYmFja3MsIE1FVEhfTk9BUkdTLAorICAgICAgICBhdGV4aXRfbmNhbGxiYWNrc19fZG9jX199LAogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI3NSwxNSArMzEyLDE1IEBACiAKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBhdGV4aXRtb2R1bGUgPSB7Ci0JUHlNb2R1bGVEZWZfSEVBRF9JTklULAotCSJhdGV4aXQiLAotCWF0ZXhpdF9fZG9jX18sCi0Jc2l6ZW9mKGF0ZXhpdG1vZHVsZV9zdGF0ZSksCi0JYXRleGl0X21ldGhvZHMsCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwsCi0JKGZyZWVmdW5jKWF0ZXhpdF9mcmVlCisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJhdGV4aXQiLAorICAgIGF0ZXhpdF9fZG9jX18sCisgICAgc2l6ZW9mKGF0ZXhpdG1vZHVsZV9zdGF0ZSksCisgICAgYXRleGl0X21ldGhvZHMsCisgICAgTlVMTCwKKyAgICBhdGV4aXRfbV90cmF2ZXJzZSwKKyAgICBhdGV4aXRfbV9jbGVhciwKKyAgICAoZnJlZWZ1bmMpYXRleGl0X2ZyZWUKIH07CiAKIFB5TU9ESU5JVF9GVU5DCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2F1ZGlvb3AuYyBiL01vZHVsZXMvYXVkaW9vcC5jCmluZGV4IDNmMDQ3NjIuLmFlM2ZmMDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXVkaW9vcC5jCisrKyBiL01vZHVsZXMvYXVkaW9vcC5jCkBAIC01LDE4ICs1LDYgQEAKIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCi0jaWYgU0laRU9GX0lOVCA9PSA0Ci10eXBlZGVmIGludCBQeV9JbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IFB5X1VJbnQzMjsKLSNlbHNlCi0jaWYgU0laRU9GX0xPTkcgPT0gNAotdHlwZWRlZiBsb25nIFB5X0ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFB5X1VJbnQzMjsKLSNlbHNlCi0jZXJyb3IgIk5vIDQtYnl0ZSBpbnRlZ3JhbCB0eXBlIgotI2VuZGlmCi0jZW5kaWYKLQogdHlwZWRlZiBzaG9ydCBQeUludDE2OwogCiAjaWYgZGVmaW5lZChfX0NIQVJfVU5TSUdORURfXykKQEAgLTM4LDcgKzI2LDcgQEAKICAgICAgICAgdmFsID0gbWF4dmFsOwogICAgIGVsc2UgaWYgKHZhbCA8IG1pbnZhbCArIDEpCiAgICAgICAgIHZhbCA9IG1pbnZhbDsKLSAgICByZXR1cm4gdmFsOworICAgIHJldHVybiAoaW50KXZhbDsKIH0KIAogCkBAIC0xNjEsOSArMTQ5LDYgQEAKICAgICBQeUludDE2ICAgICAgICAgc2VnOwogICAgIHVuc2lnbmVkIGNoYXIgICB1dmFsOwogCi0gICAgLyogVGhlIG9yaWdpbmFsIHNveCBjb2RlIGRvZXMgdGhpcyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbiwgbm90IGhlcmUgKi8KLSAgICBwY21fdmFsID0gcGNtX3ZhbCA+PiAyOwotCiAgICAgLyogdS1sYXcgaW52ZXJ0cyBhbGwgYml0cyAqLwogICAgIC8qIEdldCB0aGUgc2lnbiBhbmQgdGhlIG1hZ25pdHVkZSBvZiB0aGUgdmFsdWUuICovCiAgICAgaWYgKHBjbV92YWwgPCAwKSB7CkBAIC0yNTgsOSArMjQzLDYgQEAKICAgICBzaG9ydCAgICAgICAgICAgc2VnOwogICAgIHVuc2lnbmVkIGNoYXIgICBhdmFsOwogCi0gICAgLyogVGhlIG9yaWdpbmFsIHNveCBjb2RlIGRvZXMgdGhpcyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbiwgbm90IGhlcmUgKi8KLSAgICBwY21fdmFsID0gcGNtX3ZhbCA+PiAzOwotCiAgICAgLyogQS1sYXcgdXNpbmcgZXZlbiBiaXQgaW52ZXJzaW9uICovCiAgICAgaWYgKHBjbV92YWwgPj0gMCkgewogICAgICAgICBtYXNrID0gMHhENTsgICAgICAgICAgICAvKiBzaWduICg3dGgpIGJpdCA9IDEgKi8KQEAgLTMwNSwxOSArMjg3LDkxIEBACiAgICAgMTUyODksIDE2ODE4LCAxODUwMCwgMjAzNTAsIDIyMzg1LCAyNDYyMywgMjcwODYsIDI5Nzk0LCAzMjc2NwogfTsKIAotI2RlZmluZSBDSEFSUChjcCwgaSkgKChzaWduZWQgY2hhciAqKShjcCtpKSkKLSNkZWZpbmUgU0hPUlRQKGNwLCBpKSAoKHNob3J0ICopKGNwK2kpKQotI2RlZmluZSBMT05HUChjcCwgaSkgKChQeV9JbnQzMiAqKShjcCtpKSkKKyNkZWZpbmUgR0VUSU5UWChULCBjcCwgaSkgICgqKFQgKikoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKSkKKyNkZWZpbmUgU0VUSU5UWChULCBjcCwgaSwgdmFsKSAgZG8geyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAqKFQgKikoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKSA9IChUKSh2YWwpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogCisjZGVmaW5lIEdFVElOVDgoY3AsIGkpICAgICAgICAgIEdFVElOVFgoc2lnbmVkIGNoYXIsIChjcCksIChpKSkKKyNkZWZpbmUgR0VUSU5UMTYoY3AsIGkpICAgICAgICAgR0VUSU5UWChzaG9ydCwgKGNwKSwgKGkpKQorI2RlZmluZSBHRVRJTlQzMihjcCwgaSkgICAgICAgICBHRVRJTlRYKFBZX0lOVDMyX1QsIChjcCksIChpKSkKKworI2lmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBHRVRJTlQyNChjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdICsgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdIDw8IDgpICsgICAgICAgXAorICAgICAgICAoKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdIDw8IDE2KSApCisjZWxzZQorI2RlZmluZSBHRVRJTlQyNChjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdICsgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdIDw8IDgpICsgICAgICAgXAorICAgICAgICAoKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdIDw8IDE2KSApCisjZW5kaWYKKworCisjZGVmaW5lIFNFVElOVDgoY3AsIGksIHZhbCkgICAgIFNFVElOVFgoc2lnbmVkIGNoYXIsIChjcCksIChpKSwgKHZhbCkpCisjZGVmaW5lIFNFVElOVDE2KGNwLCBpLCB2YWwpICAgIFNFVElOVFgoc2hvcnQsIChjcCksIChpKSwgKHZhbCkpCisjZGVmaW5lIFNFVElOVDMyKGNwLCBpLCB2YWwpICAgIFNFVElOVFgoUFlfSU5UMzJfVCwgKGNwKSwgKGkpLCAodmFsKSkKKworI2lmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBTRVRJTlQyNChjcCwgaSwgdmFsKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gPSAoaW50KSh2YWwpOyAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdID0gKGludCkodmFsKSA+PiA4OyAgICAgXAorICAgICAgICAoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gPSAoaW50KSh2YWwpID4+IDE2OyAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgU0VUSU5UMjQoY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdID0gKGludCkodmFsKTsgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA9IChpbnQpKHZhbCkgPj4gODsgICAgIFwKKyAgICAgICAgKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdID0gKGludCkodmFsKSA+PiAxNjsgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKyNkZWZpbmUgR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAxKSA/IChpbnQpR0VUSU5UOCgoY3ApLCAoaSkpIDogICAgICAgICBcCisgICAgICAgIChzaXplID09IDIpID8gKGludClHRVRJTlQxNigoY3ApLCAoaSkpIDogICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMykgPyAoaW50KUdFVElOVDI0KChjcCksIChpKSkgOiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpR0VUSU5UMzIoKGNwKSwgKGkpKSkKKworI2RlZmluZSBTRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGksIHZhbCkgIGRvIHsgICAgXAorICAgICAgICBpZiAoc2l6ZSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UOCgoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDIpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMTYoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDMpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMjQoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMzIoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKworCisjZGVmaW5lIEdFVFNBTVBMRTMyKHNpemUsIGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMSkgPyAoaW50KUdFVElOVDgoKGNwKSwgKGkpKSA8PCAyNCA6ICAgXAorICAgICAgICAoc2l6ZSA9PSAyKSA/IChpbnQpR0VUSU5UMTYoKGNwKSwgKGkpKSA8PCAxNiA6ICBcCisgICAgICAgIChzaXplID09IDMpID8gKGludClHRVRJTlQyNCgoY3ApLCAoaSkpIDw8IDggOiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KUdFVElOVDMyKChjcCksIChpKSkpCisKKyNkZWZpbmUgU0VUU0FNUExFMzIoc2l6ZSwgY3AsIGksIHZhbCkgIGRvIHsgICAgIFwKKyAgICAgICAgaWYgKHNpemUgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDgoKGNwKSwgKGkpLCAodmFsKSA+PiAyNCk7ICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDE2KChjcCksIChpKSwgKHZhbCkgPj4gMTYpOyAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDI0KChjcCksIChpKSwgKHZhbCkgPj4gOCk7ICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDMyKChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKIAogc3RhdGljIFB5T2JqZWN0ICpBdWRpb29wRXJyb3I7CiAKIHN0YXRpYyBpbnQKIGF1ZGlvb3BfY2hlY2tfc2l6ZShpbnQgc2l6ZSkKIHsKLSAgICBpZiAoc2l6ZSAhPSAxICYmIHNpemUgIT0gMiAmJiBzaXplICE9IDQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNpemUgc2hvdWxkIGJlIDEsIDIgb3IgNCIpOworICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2l6ZSBzaG91bGQgYmUgMSwgMiwgMyBvciA0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlCkBAIC0zMzksMTIzICszOTMsMTI5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9nZXRzYW1wbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgaW50IHZhbDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaW46Z2V0c2FtcGxlIiwgJmNwLCAmbGVuLCAmc2l6ZSwgJmkpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaW46Z2V0c2FtcGxlIiwgJnZpZXcsICZzaXplLCAmaSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICggaSA8IDAgfHwgaSA+PSBsZW4vc2l6ZSApIHsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKGkgPCAwIHx8IGkgPj0gdmlldy5sZW4vc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiSW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkqMik7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKjQpOworICAgIHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSpzaXplKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHZhbCk7CisKKyAgZXJyb3I6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX21heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKICAgICB1bnNpZ25lZCBpbnQgYWJzdmFsLCBtYXggPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1heCIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTptYXgiLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCA8IDApIGFic3ZhbCA9ICgtdmFsKTsKICAgICAgICAgZWxzZSBhYnN2YWwgPSB2YWw7CiAgICAgICAgIGlmIChhYnN2YWwgPiBtYXgpIG1heCA9IGFic3ZhbDsKICAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1heCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX21pbm1heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKICAgICAvKiAtMSB0cmljayBiZWxvdyBpcyBuZWVkZWQgb24gV2luZG93cyB0byBzdXBwb3J0IC0weDgwMDAwMDAwIHdpdGhvdXQKICAgICBhIHdhcm5pbmcgKi8KICAgICBpbnQgbWluID0gMHg3ZmZmZmZmZiwgbWF4ID0gLTB4N0ZGRkZGRkYtMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1pbm1heCIsICZjcCwgJmxlbiwgJnNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOm1pbm1heCIsICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUpIHsKLSAgICAgICAgaWYgKHNpemUgPT0gMSkgdmFsID0gKGludCkgKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSB2YWwgPSAoaW50KSAqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSA0KSB2YWwgPSAoaW50KSAqTE9OR1AoY3AsIGkpOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCA+IG1heCkgbWF4ID0gdmFsOwogICAgICAgICBpZiAodmFsIDwgbWluKSBtaW4gPSB2YWw7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbWluLCBtYXgpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9hdmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKLSAgICBkb3VibGUgYXZnID0gMC4wOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZSwgYXZnOworICAgIGRvdWJsZSBzdW0gPSAwLjA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YXZnIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmF2ZyIsICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBhdmcgKz0gdmFsOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmICggbGVuID09IDAgKQotICAgICAgICB2YWwgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKQorICAgICAgICBzdW0gKz0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCBpKTsKKyAgICBpZiAodmlldy5sZW4gPT0gMCkKKyAgICAgICAgYXZnID0gMDsKICAgICBlbHNlCi0gICAgICAgIHZhbCA9IChpbnQpZmxvb3IoYXZnIC8gKGRvdWJsZSkobGVuL3NpemUpKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHZhbCk7CisgICAgICAgIGF2ZyA9IChpbnQpZmxvb3Ioc3VtIC8gKGRvdWJsZSkodmlldy5sZW4vc2l6ZSkpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoYXZnKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3Bfcm1zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOwogICAgIHVuc2lnbmVkIGludCByZXM7CiAgICAgZG91YmxlIHN1bV9zcXVhcmVzID0gMC4wOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnJtcyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpybXMiLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgc3VtX3NxdWFyZXMgKz0gKGRvdWJsZSl2YWwqKGRvdWJsZSl2YWw7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCBsZW4gPT0gMCApCisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIHN1bV9zcXVhcmVzICs9IHZhbCp2YWw7CisgICAgfQorICAgIGlmICh2aWV3LmxlbiA9PSAwKQogICAgICAgICByZXMgPSAwOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gKHVuc2lnbmVkIGludClzcXJ0KHN1bV9zcXVhcmVzIC8gKGRvdWJsZSkobGVuL3NpemUpKTsKKyAgICAgICAgcmVzID0gKHVuc2lnbmVkIGludClzcXJ0KHN1bV9zcXVhcmVzIC8gKGRvdWJsZSkodmlldy5sZW4vc2l6ZSkpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhyZXMpOwogfQogCi1zdGF0aWMgZG91YmxlIF9zdW0yKHNob3J0ICphLCBzaG9ydCAqYiwgUHlfc3NpemVfdCBsZW4pCitzdGF0aWMgZG91YmxlIF9zdW0yKGNvbnN0IHNob3J0ICphLCBjb25zdCBzaG9ydCAqYiwgUHlfc3NpemVfdCBsZW4pCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGRvdWJsZSBzdW0gPSAwLjA7CkBAIC01MDEsMjkgKzU2MSwyOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfZmluZGZpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2hvcnQgKmNwMSwgKmNwMjsKKyAgICBQeV9idWZmZXIgdmlldzE7CisgICAgUHlfYnVmZmVyIHZpZXcyOworICAgIGNvbnN0IHNob3J0ICpjcDEsICpjcDI7CiAgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOwogICAgIFB5X3NzaXplX3QgaiwgYmVzdF9qOwogICAgIGRvdWJsZSBhal9tMSwgYWpfbG0xOwogICAgIGRvdWJsZSBzdW1fcmlfMiwgc3VtX2Fpal8yLCBzdW1fYWlqX3JpLCByZXN1bHQsIGJlc3RfcmVzdWx0LCBmYWN0b3I7CiAKLSAgICAvKiBQYXNzaW5nIGEgc2hvcnQqKiBmb3IgYW4gJ3MnIGFyZ3VtZW50IGlzIGNvcnJlY3Qgb25seQotICAgICAgIGlmIHRoZSBzdHJpbmcgY29udGVudHMgaXMgYWxpZ25lZCBmb3IgaW50ZXJwcmV0YXRpb24KLSAgICAgICBhcyBzaG9ydFtdLiBEdWUgdG8gdGhlIGRlZmluaXRpb24gb2YgUHlCeXRlc09iamVjdCwKLSAgICAgICB0aGlzIGlzIGN1cnJlbnRseSAoUHl0aG9uIDIuNikgdGhlIGNhc2UuICovCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNzIzpmaW5kZml0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsIChjaGFyKiopJmNwMiwgJmxlbjIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCBsZW4xICYgMSB8fCBsZW4yICYgMSApIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqeSo6ZmluZGZpdCIsICZ2aWV3MSwgJnZpZXcyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZpZXcxLmxlbiAmIDEgfHwgdmlldzIubGVuICYgMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU3RyaW5ncyBzaG91bGQgYmUgZXZlbi1zaXplZCIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgbGVuMSA+Pj0gMTsKLSAgICBsZW4yID4+PSAxOworICAgIGNwMSA9IChjb25zdCBzaG9ydCAqKXZpZXcxLmJ1ZjsKKyAgICBsZW4xID0gdmlldzEubGVuID4+IDE7CisgICAgY3AyID0gKGNvbnN0IHNob3J0ICopdmlldzIuYnVmOworICAgIGxlbjIgPSB2aWV3Mi5sZW4gPj4gMTsKIAotICAgIGlmICggbGVuMSA8IGxlbjIgKSB7CisgICAgaWYgKGxlbjEgPCBsZW4yKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJGaXJzdCBzYW1wbGUgc2hvdWxkIGJlIGxvbmdlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgc3VtX3JpXzIgPSBfc3VtMihjcDIsIGNwMiwgbGVuMik7CiAgICAgc3VtX2Fpal8yID0gX3N1bTIoY3AxLCBjcDEsIGxlbjIpOwpAQCAtNTUzLDcgKzYxMiwxNCBAQAogCiAgICAgZmFjdG9yID0gX3N1bTIoY3AxK2Jlc3RfaiwgY3AyLCBsZW4yKSAvIHN1bV9yaV8yOwogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzEpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcyKTsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKG5mKSIsIGJlc3RfaiwgZmFjdG9yKTsKKworICBlcnJvcjoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3MSk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzIpOworICAgIHJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtNTYzLDI4ICs2MjksMzggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2ZpbmRmYWN0b3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNob3J0ICpjcDEsICpjcDI7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOworICAgIFB5X2J1ZmZlciB2aWV3MTsKKyAgICBQeV9idWZmZXIgdmlldzI7CisgICAgY29uc3Qgc2hvcnQgKmNwMSwgKmNwMjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBkb3VibGUgc3VtX3JpXzIsIHN1bV9haWpfcmksIHJlc3VsdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZhY3RvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcioqKSZjcDEsICZsZW4xLCAoY2hhcioqKSZjcDIsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgfHwgbGVuMiAmIDEgKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqOmZpbmRmYWN0b3IiLCAmdmlldzEsICZ2aWV3MikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2aWV3MS5sZW4gJiAxIHx8IHZpZXcyLmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGlmICggbGVuMSAhPSBsZW4yICkgeworICAgIGlmICh2aWV3MS5sZW4gIT0gdmlldzIubGVuKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTYW1wbGVzIHNob3VsZCBiZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGxlbjIgPj49IDE7Ci0gICAgc3VtX3JpXzIgPSBfc3VtMihjcDIsIGNwMiwgbGVuMik7Ci0gICAgc3VtX2Fpal9yaSA9IF9zdW0yKGNwMSwgY3AyLCBsZW4yKTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKil2aWV3MS5idWY7CisgICAgY3AyID0gKGNvbnN0IHNob3J0ICopdmlldzIuYnVmOworICAgIGxlbiA9IHZpZXcxLmxlbiA+PiAxOworICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbik7CisgICAgc3VtX2Fpal9yaSA9IF9zdW0yKGNwMSwgY3AyLCBsZW4pOwogCiAgICAgcmVzdWx0ID0gc3VtX2Fpal9yaSAvIHN1bV9yaV8yOwogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzEpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcyKTsKICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHJlc3VsdCk7CisKKyAgZXJyb3I6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzEpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcyKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTU5NCwyNCArNjcwLDI1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9maW5kbWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaG9ydCAqY3AxOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIGNvbnN0IHNob3J0ICpjcDE7CiAgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOwogICAgIFB5X3NzaXplX3QgaiwgYmVzdF9qOwogICAgIGRvdWJsZSBhal9tMSwgYWpfbG0xOwogICAgIGRvdWJsZSByZXN1bHQsIGJlc3RfcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNuOmZpbmRtYXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmY3AxLCAmbGVuMSwgJmxlbjIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCBsZW4xICYgMSApIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqbjpmaW5kbWF4IiwgJnZpZXcsICZsZW4yKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZpZXcubGVuICYgMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU3RyaW5ncyBzaG91bGQgYmUgZXZlbi1zaXplZCIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgbGVuMSA+Pj0gMTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKil2aWV3LmJ1ZjsKKyAgICBsZW4xID0gdmlldy5sZW4gPj4gMTsKIAotICAgIGlmICggbGVuMiA8IDAgfHwgbGVuMSA8IGxlbjIgKSB7CisgICAgaWYgKGxlbjIgPCAwIHx8IGxlbjEgPCBsZW4yKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJJbnB1dCBzYW1wbGUgc2hvdWxkIGJlIGxvbmdlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICByZXN1bHQgPSBfc3VtMihjcDEsIGNwMSwgbGVuMik7CkBAIC02MzIsMzQgKzcwOSwzOSBAQAogCiAgICAgfQogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChiZXN0X2opOworCisgIGVycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9hdmdwcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplLCBwcmV2dmFsLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwKICAgICAgICAgcHJldmV4dHJlbWUgPSAwOwogICAgIGRvdWJsZSBzdW0gPSAwLjA7CiAgICAgdW5zaWduZWQgaW50IGF2ZzsKICAgICBpbnQgZGlmZiwgcHJldmRpZmYsIG5leHRyZW1lID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTphdmdwcCIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTphdmdwcCIsICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChsZW4gPD0gc2l6ZSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAodmlldy5sZW4gPD0gc2l6ZSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKLSAgICBpZiAoIHNpemUgPT0gMSApICAgICAgcHJldnZhbCA9IChpbnQpKkNIQVJQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgcHJldnZhbCA9IChpbnQpKlNIT1JUUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHByZXZ2YWwgPSAoaW50KSpMT05HUChjcCwgMCk7CisgICAgfQorICAgIHByZXZ2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIDApOwogICAgIHByZXZkaWZmID0gMTc7IC8qIEFueXRoaW5nICE9IDAsIDEgKi8KLSAgICBmb3IgKCBpPXNpemU7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSBzaXplOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSB7CiAgICAgICAgICAgICBkaWZmID0gdmFsIDwgcHJldnZhbDsKICAgICAgICAgICAgIGlmIChwcmV2ZGlmZiA9PSAhZGlmZikgewpAQCAtNjY3LDcgKzc0OSwxMiBAQAogICAgICAgICAgICAgICAgICoqIGV4dHJlbWUgdmFsdWUgYW5kIHJlbWVtYmVyLgogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKHByZXZleHRyZW1ldmFsaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZhYnMoKGRvdWJsZSlwcmV2dmFsIC0gKGRvdWJsZSlwcmV2ZXh0cmVtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2dmFsIDwgcHJldmV4dHJlbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gKz0gKGRvdWJsZSkoKHVuc2lnbmVkIGludClwcmV2ZXh0cmVtZSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClwcmV2dmFsKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IChkb3VibGUpKCh1bnNpZ25lZCBpbnQpcHJldnZhbCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClwcmV2ZXh0cmVtZSk7CiAgICAgICAgICAgICAgICAgICAgIG5leHRyZW1lKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHByZXZleHRyZW1ldmFsaWQgPSAxOwpAQCAtNjgxLDMzICs3NjgsMzQgQEAKICAgICAgICAgYXZnID0gMDsKICAgICBlbHNlCiAgICAgICAgIGF2ZyA9ICh1bnNpZ25lZCBpbnQpKHN1bSAvIChkb3VibGUpbmV4dHJlbWUpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhhdmcpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9tYXhwcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplLCBwcmV2dmFsLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwKICAgICAgICAgcHJldmV4dHJlbWUgPSAwOwogICAgIHVuc2lnbmVkIGludCBtYXggPSAwLCBleHRyZW1lZGlmZjsKICAgICBpbnQgZGlmZiwgcHJldmRpZmY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bWF4cHAiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6bWF4cHAiLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuIDw9IHNpemUpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHZpZXcubGVuIDw9IHNpemUpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHByZXZ2YWwgPSAoaW50KSpDSEFSUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHByZXZ2YWwgPSAoaW50KSpTSE9SVFAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSBwcmV2dmFsID0gKGludCkqTE9OR1AoY3AsIDApOworICAgIH0KKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gc2l6ZTsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgIT0gcHJldnZhbCkgewogICAgICAgICAgICAgZGlmZiA9IHZhbCA8IHByZXZ2YWw7CiAgICAgICAgICAgICBpZiAocHJldmRpZmYgPT0gIWRpZmYpIHsKQEAgLTczMSw2OCArODE5LDY3IEBACiAgICAgICAgICAgICBwcmV2ZGlmZiA9IGRpZmY7CiAgICAgICAgIH0KICAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1heCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2Nyb3NzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOwogICAgIGludCBwcmV2dmFsOwogICAgIFB5X3NzaXplX3QgbmNyb3NzOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmNyb3NzIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmNyb3NzIiwgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbmNyb3NzID0gLTE7CiAgICAgcHJldnZhbCA9IDE3OyAvKiBBbnl0aGluZyA8PiAwLDEgKi8KLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPj4gNzsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA+PiAxNTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDMxOwotICAgICAgICB2YWwgPSB2YWwgJiAxOwotICAgICAgICBpZiAoIHZhbCAhPSBwcmV2dmFsICkgbmNyb3NzKys7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSkgPCAwOworICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIG5jcm9zcysrOwogICAgICAgICBwcmV2dmFsID0gdmFsOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG5jcm9zcyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX211bChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIGRvdWJsZSBmYWN0b3IsIGZ2YWwsIG1heHZhbCwgbWludmFsOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBzaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBkb3VibGUgZmFjdG9yLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpZDptdWwiLCAmY3AsICZsZW4sICZzaXplLCAmZmFjdG9yICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppZDptdWwiLCAmdmlldywgJnNpemUsICZmYWN0b3IpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbc2l6ZV07CiAgICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1tzaXplXTsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4pOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3Lmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjdG9yOwotICAgICAgICB2YWwgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpdmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKXZhbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBkb3VibGUgdmFsID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCBpKTsKKyAgICAgICAgdmFsICo9IGZhY3RvcjsKKyAgICAgICAgdmFsID0gZmxvb3IoZmJvdW5kKHZhbCwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHNpemUsIG5jcCwgaSwgKGludCl2YWwpOwogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gcnY7CiB9CiAKQEAgLTgwMiw0OSArODg5LDM4IEBACiAgICAgUHlfYnVmZmVyIHBjcDsKICAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDEgPSAwLCB2YWwyID0gMDsKLSAgICBkb3VibGUgZmFjMSwgZmFjMiwgZnZhbCwgbWF4dmFsLCBtaW52YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIGludCBzaXplOworICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyppZGQ6dG9tb25vIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZwY3AsICZzaXplLCAmZmFjMSwgJmZhYzIgKSApCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppZGQ6dG9tb25vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjcCwgJnNpemUsICZmYWMxLCAmZmFjMikpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGNwID0gcGNwLmJ1ZjsKICAgICBsZW4gPSBwY3AubGVuOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBpZiAoKChsZW4gLyBzaXplKSAmIDEpICE9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIm5vdCBhIHdob2xlIG51bWJlciBvZiBmcmFtZXMiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKICAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwogICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CiAKICAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuLzIpOwotICAgIGlmICggcnYgPT0gMCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplKjIgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwxID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMSA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwxID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMiA9IChpbnQpKkNIQVJQKGNwLCBpKzEpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMiA9IChpbnQpKlNIT1JUUChjcCwgaSsyKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDIgPSAoaW50KSpMT05HUChjcCwgaSs0KTsKLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsMSpmYWMxICsgKGRvdWJsZSl2YWwyKmZhYzI7Ci0gICAgICAgIHZhbDEgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaS8yKSA9IChzaWduZWQgY2hhcil2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkvMikgPSAoc2hvcnQpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkvMik9IChQeV9JbnQzMil2YWwxOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSoyKSB7CisgICAgICAgIGRvdWJsZSB2YWwxID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpKTsKKyAgICAgICAgZG91YmxlIHZhbDIgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkgKyBzaXplKTsKKyAgICAgICAgZG91YmxlIHZhbCA9IHZhbDEqZmFjMSArIHZhbDIqZmFjMjsKKyAgICAgICAgdmFsID0gZmxvb3IoZmJvdW5kKHZhbCwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHNpemUsIG5jcCwgaS8yLCB2YWwpOwogICAgIH0KKyAgZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwY3ApOwogICAgIHJldHVybiBydjsKIH0KQEAgLTg1Miw4OSArOTI4LDc2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF90b3N0ZXJlbyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwxLCB2YWwyLCB2YWwgPSAwOwotICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKLSAgICBQeU9iamVjdCAqcnY7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgZG91YmxlIGZhYzEsIGZhYzIsIG1heHZhbCwgbWludmFsOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lkZDp0b3N0ZXJlbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmZmFjMSwgJmZhYzIgKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlkZDp0b3N0ZXJlbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSwgJmZhYzEsICZmYWMyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwogICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvMikgeworICAgIGlmICh2aWV3LmxlbiA+IFBZX1NTSVpFX1RfTUFYLzIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4qMik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotCi0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbCpmYWMxOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLQotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjMjsKLSAgICAgICAgdmFsMiA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkqMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKjIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKjIpID0gKFB5X0ludDMyKXZhbDE7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkqMisxKSA9IChzaWduZWQgY2hhcil2YWwyOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkqMisyKSA9IChzaG9ydCl2YWwyOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSoyKzQpID0gKFB5X0ludDMyKXZhbDI7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIGludCB2YWwxID0gKGludClmbG9vcihmYm91bmQodmFsKmZhYzEsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIGludCB2YWwyID0gKGludClmbG9vcihmYm91bmQodmFsKmZhYzIsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGkqMiwgdmFsMSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGkqMiArIHNpemUsIHZhbDIpOwogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2FkZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwMSwgKmNwMiwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGk7Ci0gICAgaW50IHNpemUsIHZhbDEgPSAwLCB2YWwyID0gMCwgbWludmFsLCBtYXh2YWwsIG5ld3ZhbDsKLSAgICBQeU9iamVjdCAqcnY7CisgICAgUHlfYnVmZmVyIHZpZXcxOworICAgIFB5X2J1ZmZlciB2aWV3MjsKKyAgICBzaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZSwgbWludmFsLCBtYXh2YWwsIG5ld3ZhbDsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNzI2k6YWRkIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AxLCAmbGVuMSwgJmNwMiwgJmxlbjIsICZzaXplICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4xLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqeSppOmFkZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3MSwgJnZpZXcyLCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICggbGVuMSAhPSBsZW4yICkgeworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcxLmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAodmlldzEubGVuICE9IHZpZXcyLmxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiTGVuZ3RocyBzaG91bGQgYmUgdGhlIHNhbWUiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKICAgICBtYXh2YWwgPSBtYXh2YWxzW3NpemVdOwogICAgIG1pbnZhbCA9IG1pbnZhbHNbc2l6ZV07CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuMSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcxLmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjE7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDEgPSAoaW50KSpDSEFSUChjcDEsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMSA9IChpbnQpKlNIT1JUUChjcDEsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwMSwgaSk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcDIsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMiA9IChpbnQpKlNIT1JUUChjcDIsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMiA9IChpbnQpKkxPTkdQKGNwMiwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcxLmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwxID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcxLmJ1ZiwgaSk7CisgICAgICAgIGludCB2YWwyID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcyLmJ1ZiwgaSk7CiAKICAgICAgICAgaWYgKHNpemUgPCA0KSB7CiAgICAgICAgICAgICBuZXd2YWwgPSB2YWwxICsgdmFsMjsKQEAgLTk1MCwxMjQgKzEwMTMsMTY1IEBACiAgICAgICAgICAgICBuZXd2YWwgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKW5ld3ZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCluZXd2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMiluZXd2YWw7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGksIG5ld3ZhbCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcxKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3Mik7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9iaWFzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpemUsIGJpYXM7CiAgICAgdW5zaWduZWQgaW50IHZhbCA9IDAsIG1hc2s7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lpOmJpYXMiLAotICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUgLCAmYmlhcykgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlpOmJpYXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUsICZiaWFzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3Lmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAogICAgIG1hc2sgPSBtYXNrc1tzaXplXTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgY2hhcikqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgc2hvcnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAodW5zaWduZWQgaW50KShQeV9VSW50MzIpKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICAgICAgdmFsID0gR0VUSU5UWCh1bnNpZ25lZCBjaGFyLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgodW5zaWduZWQgc2hvcnQsIHZpZXcuYnVmLCBpKTsKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKQorICAgICAgICAgICAgdmFsID0gKCh1bnNpZ25lZCBpbnQpR0VUSU5UMjQodmlldy5idWYsIGkpKSAmIDB4ZmZmZmZmdTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoc2l6ZSA9PSA0KTsKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgoUFlfVUlOVDMyX1QsIHZpZXcuYnVmLCBpKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZhbCArPSAodW5zaWduZWQgaW50KWJpYXM7CiAgICAgICAgIC8qIHdyYXAgYXJvdW5kIGluIGNhc2Ugb2Ygb3ZlcmZsb3cgKi8KICAgICAgICAgdmFsICY9IG1hc2s7CiAKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh1bnNpZ25lZCBjaGFyKXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodW5zaWduZWQgc2hvcnQpdmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKFB5X1VJbnQzMil2YWw7CisgICAgICAgIGlmIChzaXplID09IDEpCisgICAgICAgICAgICBTRVRJTlRYKHVuc2lnbmVkIGNoYXIsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQorICAgICAgICAgICAgU0VUSU5UWCh1bnNpZ25lZCBzaG9ydCwgbmNwLCBpLCB2YWwpOworICAgICAgICBlbHNlIGlmIChzaXplID09IDMpCisgICAgICAgICAgICBTRVRJTlQyNChuY3AsIGksIChpbnQpdmFsKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoc2l6ZSA9PSA0KTsKKyAgICAgICAgICAgIFNFVElOVFgoUFlfVUlOVDMyX1QsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgfQogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX3JldmVyc2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGksIGo7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnJldmVyc2UiLAotICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOnJldmVyc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4pOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDI0OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKChpbnQpKlNIT1JUUChjcCwgaSkpIDw8IDE2OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotCi0gICAgICAgIGogPSBsZW4gLSBpIC0gc2l6ZTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaikgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiAyNCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaikgPSAoc2hvcnQpKHZhbCA+PiAxNik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBqKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIHZpZXcubGVuIC0gaSAtIHNpemUsIHZhbCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiBydjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYnl0ZXN3YXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOnN3YXBieXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCBqOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKQorICAgICAgICAgICAgbmNwW2kgKyBzaXplIC0gMSAtIGpdID0gKCh1bnNpZ25lZCBjaGFyICopdmlldy5idWYpW2kgKyBqXTsKKyAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9saW4ybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwotICAgIGludCBzaXplLCBzaXplMiwgdmFsID0gMDsKLSAgICBQeU9iamVjdCAqcnY7CisgICAgUHlfc3NpemVfdCBpLCBqOworICAgIGludCBzaXplLCBzaXplMjsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpsaW4ybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc2l6ZTIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppaTpsaW4ybGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplLCAmc2l6ZTIpKQogICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OwogICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDsKIAotICAgIGlmIChsZW4vc2l6ZSA+IFBZX1NTSVpFX1RfTUFYL3NpemUyKSB7CisgICAgaWYgKHZpZXcubGVuL3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIChsZW4vc2l6ZSkqc2l6ZTIpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAodmlldy5sZW4vc2l6ZSkqc2l6ZTIpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MCwgaj0wOyBpIDwgbGVuOyBpICs9IHNpemUsIGogKz0gc2l6ZTIgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBpZiAoIHNpemUyID09IDEgKSAgKkNIQVJQKG5jcCwgaikgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiAyNCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplMiA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZTIgPT0gNCApICpMT05HUChuY3AsIGopID0gKFB5X0ludDMyKXZhbDsKKyAgICBmb3IgKGkgPSBqID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUsIGogKz0gc2l6ZTIpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHNpemUsIHZpZXcuYnVmLCBpKTsKKyAgICAgICAgU0VUU0FNUExFMzIoc2l6ZTIsIG5jcCwgaiwgdmFsKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC0xMDg1LDYgKzExODksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfcmF0ZWN2KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICBjaGFyICpjcCwgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgc2l6ZSwgbmNoYW5uZWxzLCBpbnJhdGUsIG91dHJhdGUsIHdlaWdodEEsIHdlaWdodEI7CkBAIC0xMDk0LDE1ICsxMTk5LDE1IEBACiAKICAgICB3ZWlnaHRBID0gMTsKICAgICB3ZWlnaHRCID0gMDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWlpaU98aWk6cmF0ZWN2IiwgJmNwLCAmbGVuLCAmc2l6ZSwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWlpaU98aWk6cmF0ZWN2IiwgJnZpZXcsICZzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbmNoYW5uZWxzLCAmaW5yYXRlLCAmb3V0cmF0ZSwgJnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmd2VpZ2h0QSwgJndlaWdodEIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgaWYgKG5jaGFubmVscyA8IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIiMgb2YgY2hhbm5lbHMgc2hvdWxkIGJlID49IDEiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgfQogICAgIGlmIChzaXplID4gSU5UX01BWCAvIG5jaGFubmVscykgewogICAgICAgICAvKiBUaGlzIG92ZXJmbG93IHRlc3QgaXMgcmlnb3JvdXNseSBjb3JyZWN0IGJlY2F1c2UKQEAgLTExMTAsMjEgKzEyMTUsMjEgQEAKICAgICAgICAgICAgZnJvbSB0aGUgZG9jcyBmb3IgdGhlIGVycm9yIG1zZy4gKi8KICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGggKiBuY2hhbm5lbHMgdG9vIGJpZyBmb3IgYSBDIGludCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0MjsKICAgICB9CiAgICAgYnl0ZXNfcGVyX2ZyYW1lID0gc2l6ZSAqIG5jaGFubmVsczsKICAgICBpZiAod2VpZ2h0QSA8IDEgfHwgd2VpZ2h0QiA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwKICAgICAgICAgICAgICJ3ZWlnaHRBIHNob3VsZCBiZSA+PSAxLCB3ZWlnaHRCIHNob3VsZCBiZSA+PSAwIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQyOwogICAgIH0KLSAgICBpZiAobGVuICUgYnl0ZXNfcGVyX2ZyYW1lICE9IDApIHsKKyAgICBpZiAodmlldy5sZW4gJSBieXRlc19wZXJfZnJhbWUgIT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAibm90IGEgd2hvbGUgbnVtYmVyIG9mIGZyYW1lcyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0MjsKICAgICB9CiAgICAgaWYgKGlucmF0ZSA8PSAwIHx8IG91dHJhdGUgPD0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAic2FtcGxpbmcgcmF0ZSBub3QgPiAwIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQyOwogICAgIH0KICAgICAvKiBkaXZpZGUgaW5yYXRlIGFuZCBvdXRyYXRlIGJ5IHRoZWlyIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yICovCiAgICAgZCA9IGdjZChpbnJhdGUsIG91dHJhdGUpOwpAQCAtMTEzOCwxNiArMTI0MywxNiBAQAogICAgIGlmICgoc2l6ZV90KW5jaGFubmVscyA+IFBZX1NJWkVfTUFYL3NpemVvZihpbnQpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBleGl0MjsKICAgICB9Ci0gICAgcHJldl9pID0gKGludCAqKSBtYWxsb2MobmNoYW5uZWxzICogc2l6ZW9mKGludCkpOwotICAgIGN1cl9pID0gKGludCAqKSBtYWxsb2MobmNoYW5uZWxzICogc2l6ZW9mKGludCkpOworICAgIHByZXZfaSA9IChpbnQgKikgUHlNZW1fTWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKKyAgICBjdXJfaSA9IChpbnQgKikgUHlNZW1fTWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKICAgICBpZiAocHJldl9pID09IE5VTEwgfHwgY3VyX2kgPT0gTlVMTCkgewogICAgICAgICAodm9pZCkgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAotICAgIGxlbiAvPSBieXRlc19wZXJfZnJhbWU7IC8qICMgb2YgZnJhbWVzICovCisgICAgbGVuID0gdmlldy5sZW4gLyBieXRlc19wZXJfZnJhbWU7IC8qICMgb2YgZnJhbWVzICovCiAKICAgICBpZiAoc3RhdGUgPT0gUHlfTm9uZSkgewogICAgICAgICBkID0gLW91dHJhdGU7CkBAIC0xMTk3LDYgKzEzMDIsNyBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIG5jcCA9IFB5Qnl0ZXNfQXNTdHJpbmcoc3RyKTsKKyAgICBjcCA9IHZpZXcuYnVmOwogCiAgICAgZm9yICg7OykgewogICAgICAgICB3aGlsZSAoZCA8IDApIHsKQEAgLTEyMjcsMTIgKzEzMzMsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChjaGFuID0gMDsgY2hhbiA8IG5jaGFubmVsczsgY2hhbisrKSB7CiAgICAgICAgICAgICAgICAgcHJldl9pW2NoYW5dID0gY3VyX2lbY2hhbl07Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoKGludCkqQ0hBUlAoY3AsIDApKSA8PCAyNDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKChpbnQpKlNIT1JUUChjcCwgMCkpIDw8IDE2OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoaW50KSpMT05HUChjcCwgMCk7CisgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSBHRVRTQU1QTEUzMihzaXplLCBjcCwgMCk7CiAgICAgICAgICAgICAgICAgY3AgKz0gc2l6ZTsKICAgICAgICAgICAgICAgICAvKiBpbXBsZW1lbnRzIGEgc2ltcGxlIGRpZ2l0YWwgZmlsdGVyICovCiAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoaW50KSgKQEAgLTEyNDgsMTg0ICsxMzQ5LDE3NSBAQAogICAgICAgICAgICAgICAgIGN1cl9vID0gKGludCkoKChkb3VibGUpcHJldl9pW2NoYW5dICogKGRvdWJsZSlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWN1cl9pW2NoYW5dICogKGRvdWJsZSkob3V0cmF0ZSAtIGQpKSAvCiAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpb3V0cmF0ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgKkNIQVJQKG5jcCwgMCkgPSAoc2lnbmVkIGNoYXIpKGN1cl9vID4+IDI0KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCi0gICAgICAgICAgICAgICAgICAgICpTSE9SVFAobmNwLCAwKSA9IChzaG9ydCkoY3VyX28gPj4gMTYpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgKkxPTkdQKG5jcCwgMCkgPSAoUHlfSW50MzIpKGN1cl9vKTsKKyAgICAgICAgICAgICAgICBTRVRTQU1QTEUzMihzaXplLCBuY3AsIDAsIGN1cl9vKTsKICAgICAgICAgICAgICAgICBuY3AgKz0gc2l6ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGQgLT0gaW5yYXRlOwogICAgICAgICB9CiAgICAgfQogICBleGl0OgotICAgIGlmIChwcmV2X2kgIT0gTlVMTCkKLSAgICAgICAgZnJlZShwcmV2X2kpOwotICAgIGlmIChjdXJfaSAhPSBOVUxMKQotICAgICAgICBmcmVlKGN1cl9pKTsKKyAgICBQeU1lbV9GcmVlKHByZXZfaSk7CisgICAgUHlNZW1fRnJlZShjdXJfaSk7CisgIGV4aXQyOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfbGluMnVsYXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmxpbjJ1bGF3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDAgOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpsaW4ydWxhdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi9zaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3Lmxlbi9zaXplKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7Ci0KLSAgICAgICAgKm5jcCsrID0gc3RfMTRsaW5lYXIydWxhdyh2YWwpOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgICpuY3ArKyA9IHN0XzE0bGluZWFyMnVsYXcodmFsID4+IDE4KTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF91bGF3MmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgdW5zaWduZWQgY2hhciBjdmFsOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDsKLSAgICBQeU9iamVjdCAqcnY7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6dWxhdzJsaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOnVsYXcybGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgeworICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiAodmlldy5sZW4gPiBQWV9TU0laRV9UX01BWC9zaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3LmxlbipzaXplKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemU7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgY3ZhbCA9ICpjcCsrOwotICAgICAgICB2YWwgPSBzdF91bGF3MmxpbmVhcjE2KGN2YWwpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFsID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWwpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbDw8MTYpOworICAgIGNwID0gdmlldy5idWY7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuKnNpemU7IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsID0gc3RfdWxhdzJsaW5lYXIxNigqY3ArKykgPDwgMTY7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUsIG5jcCwgaSwgdmFsKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9saW4yYWxhdyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKLSAgICBQeU9iamVjdCAqcnY7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bGluMmFsYXciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6bGluMmFsYXciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4vc2l6ZSk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OwotCi0gICAgICAgICpuY3ArKyA9IHN0X2xpbmVhcjJhbGF3KHZhbCk7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHNpemUsIHZpZXcuYnVmLCBpKTsKKyAgICAgICAgKm5jcCsrID0gc3RfbGluZWFyMmFsYXcodmFsID4+IDE5KTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9hbGF3MmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgdW5zaWduZWQgY2hhciBjdmFsOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaXplLCB2YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YWxhdzJsaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmFsYXcybGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgeworICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiAodmlldy5sZW4gPiBQWV9TU0laRV9UX01BWC9zaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3LmxlbipzaXplKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOworICAgIGNwID0gdmlldy5idWY7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4qc2l6ZTsgaSArPSBzaXplICkgewotICAgICAgICBjdmFsID0gKmNwKys7Ci0gICAgICAgIHZhbCA9IHN0X2FsYXcybGluZWFyMTYoY3ZhbCk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gOCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHZhbCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFsPDwxNik7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuKnNpemU7IGkgKz0gc2l6ZSkgeworICAgICAgICB2YWwgPSBzdF9hbGF3MmxpbmVhcjE2KCpjcCsrKSA8PCAxNjsKKyAgICAgICAgU0VUU0FNUExFMzIoc2l6ZSwgbmNwLCBpLCB2YWwpOwogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2xpbjJhZHBjbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDAsIHN0ZXAsIHZhbHByZWQsIGRlbHRhLAorICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZSwgc3RlcCwgdmFscHJlZCwgZGVsdGEsCiAgICAgICAgIGluZGV4LCBzaWduLCB2cGRpZmYsIGRpZmY7Ci0gICAgUHlPYmplY3QgKnJ2LCAqc3RhdGUsICpzdHI7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTCwgKnN0YXRlLCAqc3RyOwogICAgIGludCBvdXRwdXRidWZmZXIgPSAwLCBidWZmZXJzdGVwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpTzpsaW4yYWRwY20iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnN0YXRlKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaU86bGluMmFkcGNtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplLCAmc3RhdGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuLyhzaXplKjIpKTsKLSAgICBpZiAoIHN0ciA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuLyhzaXplKjIpKTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CiAKICAgICAvKiBEZWNvZGUgc3RhdGUsIHNob3VsZCBoYXZlICh2YWx1ZSwgc3RlcCkgKi8KQEAgLTE0MzMsMjEgKzE1MjUsMjQgQEAKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKICAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSApCi0gICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpKQorICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICBzdGVwID0gc3RlcHNpemVUYWJsZVtpbmRleF07CiAgICAgYnVmZmVyc3RlcCA9IDE7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHNpemUsIHZpZXcuYnVmLCBpKSA+PiAxNjsKIAogICAgICAgICAvKiBTdGVwIDEgLSBjb21wdXRlIGRpZmZlcmVuY2Ugd2l0aCBwcmV2aW91cyB2YWx1ZSAqLwotICAgICAgICBkaWZmID0gdmFsIC0gdmFscHJlZDsKLSAgICAgICAgc2lnbiA9IChkaWZmIDwgMCkgPyA4IDogMDsKLSAgICAgICAgaWYgKCBzaWduICkgZGlmZiA9ICgtZGlmZik7CisgICAgICAgIGlmICh2YWwgPCB2YWxwcmVkKSB7CisgICAgICAgICAgICBkaWZmID0gdmFscHJlZCAtIHZhbDsKKyAgICAgICAgICAgIHNpZ24gPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGlmZiA9IHZhbCAtIHZhbHByZWQ7CisgICAgICAgICAgICBzaWduID0gMDsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIFN0ZXAgMiAtIERpdmlkZSBhbmQgY2xhbXAgKi8KICAgICAgICAgLyogTm90ZToKQEAgLTE1MDgsNDggKzE2MDMsNTMgQEAKICAgICB9CiAgICAgcnYgPSBQeV9CdWlsZFZhbHVlKCIoTyhpaSkpIiwgc3RyLCB2YWxwcmVkLCBpbmRleCk7CiAgICAgUHlfREVDUkVGKHN0cik7CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9hZHBjbTJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIFB5X3NzaXplX3QgaSwgb3V0bGVuOwogICAgIGludCBzaXplLCB2YWxwcmVkLCBzdGVwLCBkZWx0YSwgaW5kZXgsIHNpZ24sIHZwZGlmZjsKLSAgICBQeU9iamVjdCAqcnYsICpzdHIsICpzdGF0ZTsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMLCAqc3RyLCAqc3RhdGU7CiAgICAgaW50IGlucHV0YnVmZmVyID0gMCwgYnVmZmVyc3RlcDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaU86YWRwY20ybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUsICZzdGF0ZSkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaU86YWRwY20ybGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplLCAmc3RhdGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0OwogCiAgICAgLyogRGVjb2RlIHN0YXRlLCBzaG91bGQgaGF2ZSAodmFsdWUsIHN0ZXApICovCiAgICAgaWYgKCBzdGF0ZSA9PSBQeV9Ob25lICkgewogICAgICAgICAvKiBGaXJzdCB0aW1lLCBpdCBzZWVtcy4gU2V0IGRlZmF1bHRzICovCiAgICAgICAgIHZhbHByZWQgPSAwOwogICAgICAgICBpbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmICghUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkpCisgICAgICAgIGdvdG8gZXhpdDsKIAotICAgIGlmIChsZW4gPiAoUFlfU1NJWkVfVF9NQVgvMikvc2l6ZSkgeworICAgIGlmICh2aWV3LmxlbiA+IChQWV9TU0laRV9UX01BWC8yKS9zaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KLSAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKjIpOwotICAgIGlmICggc3RyID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBvdXRsZW4gPSB2aWV3LmxlbipzaXplKjI7CisgICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRsZW4pOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcoc3RyKTsKKyAgICBjcCA9IHZpZXcuYnVmOwogCiAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogICAgIGJ1ZmZlcnN0ZXAgPSAwOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemUqMjsgaSArPSBzaXplICkgeworICAgIGZvciAoaSA9IDA7IGkgPCBvdXRsZW47IGkgKz0gc2l6ZSkgewogICAgICAgICAvKiBTdGVwIDEgLSBnZXQgdGhlIGRlbHRhIHZhbHVlIGFuZCBjb21wdXRlIG5leHQgaW5kZXggKi8KICAgICAgICAgaWYgKCBidWZmZXJzdGVwICkgewogICAgICAgICAgICAgZGVsdGEgPSBpbnB1dGJ1ZmZlciAmIDB4ZjsKQEAgLTE1OTQsMTMgKzE2OTQsMTMgQEAKICAgICAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogCiAgICAgICAgIC8qIFN0ZXAgNiAtIE91dHB1dCB2YWx1ZSAqLwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWxwcmVkID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWxwcmVkKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWxwcmVkPDwxNik7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUsIG5jcCwgaSwgdmFscHJlZCA8PCAxNik7CiAgICAgfQogCiAgICAgcnYgPSBQeV9CdWlsZFZhbHVlKCIoTyhpaSkpIiwgc3RyLCB2YWxwcmVkLCBpbmRleCk7CiAgICAgUHlfREVDUkVGKHN0cik7CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC0xNjI5LDYgKzE3MjksNyBAQAogICAgIHsgInRvc3RlcmVvIiwgYXVkaW9vcF90b3N0ZXJlbywgTUVUSF9WQVJBUkdTIH0sCiAgICAgeyAiZ2V0c2FtcGxlIiwgYXVkaW9vcF9nZXRzYW1wbGUsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsgInJldmVyc2UiLCBhdWRpb29wX3JldmVyc2UsIE1FVEhfVkFSQVJHUyB9LAorICAgIHsgImJ5dGVzd2FwIiwgYXVkaW9vcF9ieXRlc3dhcCwgTUVUSF9WQVJBUkdTIH0sCiAgICAgeyAicmF0ZWN2IiwgYXVkaW9vcF9yYXRlY3YsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsgMCwgICAgICAgICAgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9iaW5hc2NpaS5jIGIvTW9kdWxlcy9iaW5hc2NpaS5jCmluZGV4IGE4NGJhZGM3Li4wZjQ5NzAxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2JpbmFzY2lpLmMKKysrIGIvTW9kdWxlcy9iaW5hc2NpaS5jCkBAIC0zNjEsOCArMzYxLDcgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOwogICAgIHJldHVybiBydjsKQEAgLTQ5MSw4ICs0OTAsNyBAQAogICAgICovCiAgICAgaWYgKGJpbl9sZW4gPiAwKSB7CiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LCBiaW5fbGVuKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgICAgICBydiA9IE5VTEw7CisgICAgICAgICAgICBQeV9DTEVBUihydik7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC01NjMsOCArNTYxLDcgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBydjsKQEAgLTY0Miw4ICs2MzksNyBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYmluX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIGlmIChydikgewogICAgICAgICBQeU9iamVjdCAqcnJ2ID0gUHlfQnVpbGRWYWx1ZSgiT2kiLCBydiwgZG9uZSk7CkBAIC03MTMsOCArNzA5LDcgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gcnY7CkBAIC03NzAsOCArNzY1LDcgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOwogICAgIHJldHVybiBydjsKQEAgLTgzNCw3ICs4MjgsNyBAQAogICAgICAgICAgICAgIGlmICggLS1vdXRfbGVuX2xlZnQgPCAwICkgeyBcCiAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvdXRfbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKSByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LCAyKm91dF9sZW4pIDwgMCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9ERUNSRUYocnYpOyBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOyByZXR1cm4gTlVMTDsgfSBcCisgICAgICAgICAgICAgICAgICAgICAgICB7IFB5X1hERUNSRUYocnYpOyBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOyByZXR1cm4gTlVMTDsgfSBcCiAgICAgICAgICAgICAgICAgICAgICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBvdXRfbGVuOyBcCiAgICAgICAgICAgICAgICAgICAgICAgb3V0X2xlbl9sZWZ0ID0gb3V0X2xlbi0xOyBcCkBAIC04ODcsOCArODgxLDcgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgIHJldHVybiBydjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwppbmRleCA5ZTllOTZjLi4wMTNjM2ZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCkBAIC0yMywxOCArMjMsMzMgQEAKICAqIEE4NDQgICAgICAgICB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgIFUrMjAxNSBIT1JJWk9OVEFMIEJBUgogICovCiAKLSNkZWZpbmUgR0JLX0RFQ09ERShkYzEsIGRjMiwgYXNzaSkgXAotICAgIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YWEpIChhc3NpKSA9IDB4MjAxNDsgXAotICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTggJiYgKGRjMikgPT0gMHg0NCkgKGFzc2kpID0gMHgyMDE1OyBcCi0gICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGE0KSAoYXNzaSkgPSAweDAwYjc7IFwKLSAgICBlbHNlIFRSWU1BUF9ERUMoZ2IyMzEyLCBhc3NpLCBkYzEgXiAweDgwLCBkYzIgXiAweDgwKTsgXAotICAgIGVsc2UgVFJZTUFQX0RFQyhnYmtleHQsIGFzc2ksIGRjMSwgZGMyKTsKKyNkZWZpbmUgR0JLX0RFQ09ERShkYzEsIGRjMiwgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YWEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTggJiYgKGRjMikgPT0gMHg0NCkgeyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhNCkgeyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgwMGI3KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCBkZWNvZGVkLCBkYzEgXiAweDgwLCBkYzIgXiAweDgwKSkgeyBcCisgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoZ2JrZXh0LCBkZWNvZGVkLCBkYzEsIGRjMikpIHsgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKLSNkZWZpbmUgR0JLX0VOQ09ERShjb2RlLCBhc3NpKSBcCi0gICAgaWYgKChjb2RlKSA9PSAweDIwMTQpIChhc3NpKSA9IDB4YTFhYTsgXAotICAgIGVsc2UgaWYgKChjb2RlKSA9PSAweDIwMTUpIChhc3NpKSA9IDB4YTg0NDsgXAotICAgIGVsc2UgaWYgKChjb2RlKSA9PSAweDAwYjcpIChhc3NpKSA9IDB4YTFhNDsgXAotICAgIGVsc2UgaWYgKChjb2RlKSAhPSAweDMwZmIgJiYgVFJZTUFQX0VOQ19DT05EKGdiY29tbW9uLCBhc3NpLCBjb2RlKSk7CisjZGVmaW5lIEdCS19FTkNPREUoY29kZSwgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGNvZGUpID09IDB4MjAxNCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGExYWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgPT0gMHgyMDE1KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhODQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpID09IDB4MDBiNykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTFhNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSAhPSAweDMwZmIgJiYgVFJZTUFQX0VOQyhnYmNvbW1vbiwgYXNzaSwgY29kZSkpIHsgXAorICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAvKgogICogR0IyMzEyIGNvZGVjCkBAIC00MiwyNyArNTcsMzEgQEAKIAogRU5DT0RFUihnYjIzMTIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBHQksgKi8KICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTcyLDIwICs5MSwyMSBAQAogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICoqaW5idWY7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgVFJZTUFQX0RFQyhnYjIzMTIsICoqb3V0YnVmLCBjIF4gMHg4MCwgSU4yIF4gMHg4MCkgewotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIGRlY29kZWQsIGMgXiAweDgwLCBJTkJZVEUyIF4gMHg4MCkpIHsKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtOTgsMjggKzExOCwzMSBAQAogCiBFTkNPREVSKGdiaykKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBHQktfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0KLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpKSAvKiBNU0Igc2V0OiBHQksgKi8KICAgICAgICAgZWxzZQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpKTsgLyogTVNCIHNldDogR0JLICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTEyOCwyMiArMTUxLDIyIEBACiBERUNPREVSKGdiaykKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBHQktfREVDT0RFKGMsIElOMiwgKipvdXRidWYpCi0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIEdCS19ERUNPREUoYywgSU5CWVRFMiwgd3JpdGVyKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNTYsNzIgKzE3OSw2MyBAQAogCiBFTkNPREVSKGdiMTgwMzApCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKGMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpZiAoYyA+IDB4MTBGRkZGKQotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICByZXR1cm4gMjsgLyogc3Vycm9nYXRlcyBwYWlyICovCi0jZWxzZQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYKLSAgICAgICAgZWxzZSBpZiAoYyA+PSAweDEwMDAwKSB7Ci0gICAgICAgICAgICB1Y3M0X3QgdGMgPSBjIC0gMHgxMDAwMDsKKyAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgUHlfVUNTNCB0YyA9IGMgLSAweDEwMDAwOworICAgICAgICAgICAgYXNzZXJ0IChjIDw9IDB4MTBGRkZGKTsKIAotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpOwogCi0gICAgICAgICAgICBPVVQ0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICBPVVRCWVRFNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgT1VUMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSkKKyAgICAgICAgICAgIE9VVEJZVEUzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKTsKICAgICAgICAgICAgIHRjIC89IDEyNjsKLSAgICAgICAgICAgIE9VVDIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgIE9VVEJZVEUyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKSh0YyArIDB4OTApKQorICAgICAgICAgICAgT1VUQllURTEoKHVuc2lnbmVkIGNoYXIpKHRjICsgMHg5MCkpOwogCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSAgICAgICAgICAgIE5FWFQoMiwgNCkgLyogc3Vycm9nYXRlcyBwYWlyICovCi0jZWxzZQotICAgICAgICAgICAgTkVYVCgxLCA0KQotI2VuZGlmCisgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBHQktfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhnYjE4MDMwZXh0LCBjb2RlLCBjKTsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhnYjE4MDMwZXh0LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgX2diMTgwMzBfdG9fdW5pYm1wX3JhbmdlcyAqdXRycmFuZ2U7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsKIAogICAgICAgICAgICAgZm9yICh1dHJyYW5nZSA9IGdiMTgwMzBfdG9fdW5pYm1wX3JhbmdlczsKICAgICAgICAgICAgICAgICAgdXRycmFuZ2UtPmZpcnN0ICE9IDA7CiAgICAgICAgICAgICAgICAgIHV0cnJhbmdlKyspCiAgICAgICAgICAgICAgICAgaWYgKHV0cnJhbmdlLT5maXJzdCA8PSBjICYmCiAgICAgICAgICAgICAgICAgICAgIGMgPD0gdXRycmFuZ2UtPmxhc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSB0YzsKKyAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB0YzsKIAogICAgICAgICAgICAgICAgICAgICB0YyA9IGMgLSB1dHJyYW5nZS0+Zmlyc3QgKwogICAgICAgICAgICAgICAgICAgICAgICAgIHV0cnJhbmdlLT5iYXNlOwogCi0gICAgICAgICAgICAgICAgICAgIE9VVDQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgICAgICAgICBPVVQzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSk7CiAgICAgICAgICAgICAgICAgICAgIHRjIC89IDEyNjsKLSAgICAgICAgICAgICAgICAgICAgT1VUMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDEoKHVuc2lnbmVkIGNoYXIpdGMgKyAweDgxKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFMSgodW5zaWduZWQgY2hhcil0YyArIDB4ODEpOwogCi0gICAgICAgICAgICAgICAgICAgIE5FWFQoMSwgNCkKKyAgICAgICAgICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yMzAsMTMgKzI0NCwxMyBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikpIC8qIE1TQiBzZXQ6IEdCSyBvciBHQjE4MDMwZXh0ICovCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpKTsgLyogTVNCIHNldDogR0JLIG9yIEdCMTgwMzBleHQgKi8KICAgICAgICAgZWxzZQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KIAotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0yNDUsNjEgKzI1OSw2MiBAQAogREVDT0RFUihnYjE4MDMwKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMSwgYzI7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMSwgYzI7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgYzIgPSBJTjI7CisgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgaWYgKGMyID49IDB4MzAgJiYgYzIgPD0gMHgzOSkgeyAvKiA0IGJ5dGVzIHNlcSAqLwogICAgICAgICAgICAgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgKnV0cjsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzMsIGM0OwotICAgICAgICAgICAgdWNzNF90IGxzZXE7CisgICAgICAgICAgICBQeV9VQ1M0IGxzZXE7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoNCkKLSAgICAgICAgICAgIGMzID0gSU4zOwotICAgICAgICAgICAgYzQgPSBJTjQ7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDQpOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzOworICAgICAgICAgICAgYzQgPSBJTkJZVEU0OwogICAgICAgICAgICAgaWYgKGMgPCAweDgxIHx8IGMzIDwgMHg4MSB8fCBjNCA8IDB4MzAgfHwgYzQgPiAweDM5KQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgYyAtPSAweDgxOyAgYzIgLT0gMHgzMDsKICAgICAgICAgICAgIGMzIC09IDB4ODE7IGM0IC09IDB4MzA7CiAKICAgICAgICAgICAgIGlmIChjIDwgNCkgeyAvKiBVKzAwODAgLSBVK0ZGRkYgKi8KLSAgICAgICAgICAgICAgICBsc2VxID0gKCh1Y3M0X3QpYyAqIDEwICsgYzIpICogMTI2MCArCi0gICAgICAgICAgICAgICAgICAgICh1Y3M0X3QpYzMgKiAxMCArIGM0OworICAgICAgICAgICAgICAgIGxzZXEgPSAoKFB5X1VDUzQpYyAqIDEwICsgYzIpICogMTI2MCArCisgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0KWMzICogMTAgKyBjNDsKICAgICAgICAgICAgICAgICBpZiAobHNlcSA8IDM5NDIwKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodXRyID0gZ2IxODAzMF90b191bmlibXBfcmFuZ2VzOwogICAgICAgICAgICAgICAgICAgICAgICAgIGxzZXEgPj0gKHV0ciArIDEpLT5iYXNlOwogICAgICAgICAgICAgICAgICAgICAgICAgIHV0cisrKSA7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDEodXRyLT5maXJzdCAtIHV0ci0+YmFzZSArIGxzZXEpCi0gICAgICAgICAgICAgICAgICAgIE5FWFQoNCwgMSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUih1dHItPmZpcnN0IC0gdXRyLT5iYXNlICsgbHNlcSk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oNCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMTUpIHsgLyogVSsxMDAwMCAtIFUrMTBGRkZGICovCi0gICAgICAgICAgICAgICAgbHNlcSA9IDB4MTAwMDAgKyAoKCh1Y3M0X3QpYy0xNSkgKiAxMCArIGMyKQotICAgICAgICAgICAgICAgICAgICAqIDEyNjAgKyAodWNzNF90KWMzICogMTAgKyBjNDsKKyAgICAgICAgICAgICAgICBsc2VxID0gMHgxMDAwMCArICgoKFB5X1VDUzQpYy0xNSkgKiAxMCArIGMyKQorICAgICAgICAgICAgICAgICAgICAqIDEyNjAgKyAoUHlfVUNTNCljMyAqIDEwICsgYzQ7CiAgICAgICAgICAgICAgICAgaWYgKGxzZXEgPD0gMHgxMEZGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KGxzZXEpOwotICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIobHNlcSk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oNCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKLSAgICAgICAgR0JLX0RFQ09ERShjLCBjMiwgKipvdXRidWYpCi0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhnYjE4MDMwZXh0LCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBHQktfREVDT0RFKGMsIGMyLCB3cml0ZXIpCisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoZ2IxODAzMGV4dCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMzE5LDQ4ICszMzQsNTEgQEAKIEVOQ09ERVJfUkVTRVQoaHopCiB7CiAgICAgaWYgKHN0YXRlLT5pICE9IDApIHsKLSAgICAgICAgV1JJVEUyKCd+JywgJ30nKQorICAgICAgICBXUklURUJZVEUyKCd+JywgJ30nKTsKICAgICAgICAgc3RhdGUtPmkgPSAwOwotICAgICAgICBORVhUX09VVCgyKQorICAgICAgICBORVhUX09VVCgyKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVIoaHopCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+aSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdSSVRFMygnficsICd9JywgKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgICAgICBORVhUKDEsIDMpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMygnficsICd9JywgKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAzKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+aSA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIC8qIE1TQiBzZXQ6IEdCSyAqLwogICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKHN0YXRlLT5pID09IDApIHsKLSAgICAgICAgICAgIFdSSVRFNCgnficsICd7JywgY29kZSA+PiA4LCBjb2RlICYgMHhmZikKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKKyAgICAgICAgICAgIFdSSVRFQllURTQoJ34nLCAneycsIGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpOworICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgICAgIHN0YXRlLT5pID0gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFdSSVRFMihjb2RlID4+IDgsIGNvZGUgJiAweGZmKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMihjb2RlID4+IDgsIGNvZGUgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM4MiwxNSArNDAwLDE2IEBACiBERUNPREVSKGh6KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjID09ICd+JykgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiA9IElOMjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBJTkJZVEUyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogICAgICAgICAgICAgaWYgKGMyID09ICd+JykgewotICAgICAgICAgICAgICAgIFdSSVRFMSgnficpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoJ34nKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYzIgPT0gJ3snICYmIHN0YXRlLT5pID09IDApCkBAIC00MDEsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICA7IC8qIGxpbmUtY29udGludWF0aW9uICovCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDIsIDApOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQwOSwxNCArNDI4LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoc3RhdGUtPmkgPT0gMCkgeyAvKiBBU0NJSSBtb2RlICovCi0gICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiBHQiBtb2RlICovCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQotICAgICAgICAgICAgVFJZTUFQX0RFQyhnYjIzMTIsICoqb3V0YnVmLCBjLCBJTjIpIHsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYwppbmRleCBkM2FkMDRiLi5iN2E3ZWJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCkBAIC0zOCwzNSArMzgsMzkgQEAKIAogRU5DT0RFUihiaWc1aGtzY3MpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSAqKmluYnVmOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAgICAgICAgICAgICAqKm91dGJ1ZiA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaW5zaXplID0gMTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgaWYgKGMgPCAweDEwMDAwKSB7Ci0gICAgICAgICAgICBUUllNQVBfRU5DKGJpZzVoa3Njc19ibXAsIGNvZGUsIGMpIHsKKyAgICAgICAgICAgIGlmIChUUllNQVBfRU5DKGJpZzVoa3Njc19ibXAsIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gTVVMVElDKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPj0gMiAmJgorICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGMyOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPj0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gSU5DSEFSMjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA+PSAyICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAoKGMgJiAweGZmZGYpID09IDB4MDBjYSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKCppbmJ1ZilbMV0gJiAweGZmZjcpID09IDB4MDMwNCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICgoYzIgJiAweGZmZjcpID09IDB4MDMwNCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBiaWc1aGtzY3NfcGFpcmVuY190YWJsZVsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGMgPj4gNCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCppbmJ1ZilbMV0gPj4gMykpICYgM107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjMiA+PiAzKSkgJiAzXTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2l6ZSA9IDI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5sZWZ0IDwgMiAmJgorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmxlbiAtICppbnBvcyA8IDIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShmbGFncyAmIE1CRU5DX0ZMVVNIKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtNzcsMjEgKzgxLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYyk7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA8IDB4MjAwMDApCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICBlbHNlIGlmIChjIDwgMHgzMDAwMCkgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhiaWc1aGtzY3Nfbm9uYm1wLCBjb2RlLCBjICYgMHhmZmZmKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfRU5DKGJpZzVoa3Njc19ub25ibXAsIGNvZGUsIGMgJiAweGZmZmYpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4RkYpCi0gICAgICAgIE5FWFQoaW5zaXplLCAyKQorICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7CisgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTEwMiwzMyArMTEwLDMyIEBACiBERUNPREVSKGJpZzVoa3NjcykKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0gICAgICAgIHVjczRfdCBkZWNvZGVkOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgaWYgKDB4YzYgPiBjIHx8IGMgPiAweGM4IHx8IChjIDwgMHhjNyAmJiBJTjIgPCAweGExKSkgewotICAgICAgICAgICAgVFJZTUFQX0RFQyhiaWc1LCAqKm91dGJ1ZiwgYywgSU4yKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBpZiAoMHhjNiA+IGMgfHwgYyA+IDB4YzggfHwgKGMgPCAweGM3ICYmIElOQllURTIgPCAweGExKSkgeworICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoYmlnNSwgZGVjb2RlZCwgYywgSU5CWVRFMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBUUllNQVBfREVDKGJpZzVoa3NjcywgZGVjb2RlZCwgYywgSU4yKQorICAgICAgICBpZiAoVFJZTUFQX0RFQyhiaWc1aGtzY3MsIGRlY29kZWQsIGMsIElOQllURTIpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcyA9IEJIMlMoYywgSU4yKTsKKyAgICAgICAgICAgIGludCBzID0gQkgyUyhjLCBJTkJZVEUyKTsKICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhpbnRiYXNlOwogCiAgICAgICAgICAgICBhc3NlcnQoMHg4NyA8PSBjICYmIGMgPD0gMHhmZSk7Ci0gICAgICAgICAgICBhc3NlcnQoMHg0MCA8PSBJTjIgJiYgSU4yIDw9IDB4ZmUpOworICAgICAgICAgICAgYXNzZXJ0KDB4NDAgPD0gSU5CWVRFMiAmJiBJTkJZVEUyIDw9IDB4ZmUpOwogCiAgICAgICAgICAgICBpZiAoQkgyUygweDg3LCAweDQwKSA8PSBzICYmIHMgPD0gQkgyUygweGEwLCAweGZlKSkgewogICAgICAgICAgICAgICAgICAgICBoaW50YmFzZSA9IGJpZzVoa3Njc19waGludF8wOwpAQCAtMTQ2LDI1ICsxNTMsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX0lOVEVSTkFMOwogCiAgICAgICAgICAgICBpZiAoaGludGJhc2VbcyA+PiAzXSAmICgxIDw8IChzICYgNykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChkZWNvZGVkIHwgMHgyMDAwMCkKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQgfCAweDIwMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPVVQxKGRlY29kZWQpCi0gICAgICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoICgoYyA8PCA4KSB8IElOMikgewotICAgICAgICBjYXNlIDB4ODg2MjogV1JJVEUyKDB4MDBjYSwgMHgwMzA0KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg4ODY0OiBXUklURTIoMHgwMGNhLCAweDAzMGMpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDg4YTM6IFdSSVRFMigweDAwZWEsIDB4MDMwNCk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4ODhhNTogV1JJVEUyKDB4MDBlYSwgMHgwMzBjKTsgYnJlYWs7CisgICAgICAgIHN3aXRjaCAoKGMgPDwgOCkgfCBJTkJZVEUyKSB7CisgICAgICAgIGNhc2UgMHg4ODYyOiBPVVRDSEFSMigweDAwY2EsIDB4MDMwNCk7IGJyZWFrOworICAgICAgICBjYXNlIDB4ODg2NDogT1VUQ0hBUjIoMHgwMGNhLCAweDAzMGMpOyBicmVhazsKKyAgICAgICAgY2FzZSAweDg4YTM6IE9VVENIQVIyKDB4MDBlYSwgMHgwMzA0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgMHg4OGE1OiBPVVRDSEFSMigweDAwZWEsIDB4MDMwYyk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiByZXR1cm4gMTsKICAgICAgICAgfQogCi0gICAgICAgIE5FWFQoMiwgMikgLyogYWxsIGRlY29kZWQgY29kZXBvaW50cyBhcmUgcGFpcnMsIGFib3ZlLiAqLworICAgICAgICBORVhUX0lOKDIpOyAvKiBhbGwgZGVjb2RlZCBjb2RlcG9pbnRzIGFyZSBwYWlycywgYWJvdmUuICovCiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCmluZGV4IGNiYzE1NDIuLjVjNDAxYWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCkBAIC03Myw3ICs3Myw3IEBACiAjZGVmaW5lIEZfU0hJRlRFRCAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgRl9FU0NUSFJPVUdIT1VUICAgICAgICAgMHgwMgogCi0jZGVmaW5lIFNUQVRFX1NFVEcoZG4sIHYpICAgICAgICgoc3RhdGUpLT5jW2RuXSkgPSAodik7CisjZGVmaW5lIFNUQVRFX1NFVEcoZG4sIHYpICAgICAgIGRvIHsgKChzdGF0ZSktPmNbZG5dKSA9ICh2KTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgU1RBVEVfR0VURyhkbikgICAgICAgICAgKChzdGF0ZSktPmNbZG5dKQogCiAjZGVmaW5lIFNUQVRFX0cwICAgICAgICAgICAgICAgIFNUQVRFX0dFVEcoMCkKQEAgLTg1LDEwICs4NSwxMCBAQAogI2RlZmluZSBTVEFURV9TRVRHMih2KSAgICAgICAgICBTVEFURV9TRVRHKDIsIHYpCiAjZGVmaW5lIFNUQVRFX1NFVEczKHYpICAgICAgICAgIFNUQVRFX1NFVEcoMywgdikKIAotI2RlZmluZSBTVEFURV9TRVRGTEFHKGYpICAgICAgICAoKHN0YXRlKS0+Y1s0XSkgfD0gKGYpOworI2RlZmluZSBTVEFURV9TRVRGTEFHKGYpICAgICAgICBkbyB7ICgoc3RhdGUpLT5jWzRdKSB8PSAoZik7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRFX0dFVEZMQUcoZikgICAgICAgICgoc3RhdGUpLT5jWzRdICYgKGYpKQotI2RlZmluZSBTVEFURV9DTEVBUkZMQUcoZikgICAgICAoKHN0YXRlKS0+Y1s0XSkgJj0gfihmKTsKLSNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHUygpICAgICAgKChzdGF0ZSktPmNbNF0pID0gMDsKKyNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHKGYpICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgJj0gfihmKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHUygpICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgPSAwOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIElTTzIwMjJfQ09ORklHICAgICAgICAgICgoY29uc3Qgc3RydWN0IGlzbzIwMjJfY29uZmlnICopY29uZmlnKQogI2RlZmluZSBDT05GSUdfSVNTRVQoZmxhZykgICAgICAoSVNPMjAyMl9DT05GSUctPmZsYWdzICYgKGZsYWcpKQpAQCAtMTAyLDggKzEwMiw4IEBACiAvKi0qLSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgLSotKi8KIAogdHlwZWRlZiBpbnQgKCppc28yMDIyX2luaXRfZnVuYykodm9pZCk7Ci10eXBlZGVmIHVjczRfdCAoKmlzbzIwMjJfZGVjb2RlX2Z1bmMpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotdHlwZWRlZiBEQkNIQVIgKCppc28yMDIyX2VuY29kZV9mdW5jKShjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCk7Cit0eXBlZGVmIFB5X1VDUzQgKCppc28yMDIyX2RlY29kZV9mdW5jKShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKK3R5cGVkZWYgREJDSEFSICgqaXNvMjAyMl9lbmNvZGVfZnVuYykoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKTsKIAogc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gewogICAgIHVuc2lnbmVkIGNoYXIgbWFyazsKQEAgLTEzMiw1MyArMTMyLDUyIEBACiAKIEVOQ09ERVJfSU5JVChpc28yMDIyKQogewotICAgIFNUQVRFX0NMRUFSRkxBR1MoKQotICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSkKKyAgICBTVEFURV9DTEVBUkZMQUdTKCk7CisgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVJfUkVTRVQoaXNvMjAyMikKIHsKICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgIFdSSVRFMShTSSkKLSAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKKyAgICAgICAgV1JJVEVCWVRFMShTSSk7CisgICAgICAgIE5FWFRfT1VUKDEpOworICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKICAgICB9CiAgICAgaWYgKFNUQVRFX0cwICE9IENIQVJTRVRfQVNDSUkpIHsKLSAgICAgICAgV1JJVEUzKEVTQywgJygnLCAnQicpCi0gICAgICAgIE5FWFRfT1VUKDMpCi0gICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCisgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsICdCJyk7CisgICAgICAgIE5FWFRfT1VUKDMpOworICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVIoaXNvMjAyMikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgeworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgewogICAgICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnOwogICAgICAgICBEQkNIQVIgZW5jb2RlZDsKLSAgICAgICAgdWNzNF90IGMgPSAqKmluYnVmOworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKICAgICAgICAgICAgIGlmIChTVEFURV9HMCAhPSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJygnLCAnQicpCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsICdCJyk7CisgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBlbmNvZGVkID0gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsgZHNnLT5tYXJrOyBkc2crKykgewpAQCAtMTg3LDI0ICsxODYsMTQgQEAKICAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkgewogICAgICAgICAgICAgICAgIC8qIHRoaXMgaW1wbGVtZW50YXRpb24gd29uJ3Qgd29yayBmb3IgcGFpcgogICAgICAgICAgICAgICAgICAqIG9mIG5vbi1ibXAgY2hhcmFjdGVycy4gKi8KLSAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0IDwgMikgeworICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBNQkVOQ19GTFVTSCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAtMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAyOwotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVjczRfdCB1NGluWzJdOwotICAgICAgICAgICAgICAgICAgICB1NGluWzBdID0gKHVjczRfdClJTjE7Ci0gICAgICAgICAgICAgICAgICAgIHU0aW5bMV0gPSAodWNzNF90KUlOMjsKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2Rlcih1NGluLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2RlcigmYywgJmxlbmd0aCk7Ci0jZWxzZQogICAgICAgICAgICAgICAgIGVuY29kZWQgPSBkc2ctPmVuY29kZXIoJmMsICZsZW5ndGgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKGVuY29kZWQgIT0gTUFQX1VOTUFQUEFCTEUpIHsKICAgICAgICAgICAgICAgICAgICAgaW5zaXplID0gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyMSw0NyArMjEwLDQ2IEBACiAgICAgICAgIHN3aXRjaCAoZHNnLT5wbGFuZSkgewogICAgICAgICBjYXNlIDA6IC8qIEcwICovCiAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChTVEFURV9HMCAhPSBkc2ctPm1hcmspIHsKICAgICAgICAgICAgICAgICBpZiAoZHNnLT53aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICcoJywgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChkc2ctPm1hcmsgPT0gQ0hBUlNFVF9KSVNYMDIwOCkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnJCcsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJyQnLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFNChFU0MsICckJywgJygnLAotICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTQoRVNDLCAnJCcsICcoJywKKyAgICAgICAgICAgICAgICAgICAgICAgIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6IC8qIEcxICovCiAgICAgICAgICAgICBpZiAoU1RBVEVfRzEgIT0gZHNnLT5tYXJrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnKScsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJyknLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFNChFU0MsICckJywgJyknLAotICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTQoRVNDLCAnJCcsICcpJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoU08pCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNPKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogLyogRzIgYW5kIEczIGlzIG5vdCBzdXBwb3J0ZWQ6IG5vIGVuY29kaW5nIGluCkBAIC0yNzAsMTQgKzI1OCwxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWVuY29kZWQpCi0gICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhcillbmNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgV1JJVEUyKGVuY29kZWQgPj4gOCwgZW5jb2RlZCAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUX09VVCgyKQorICAgICAgICAgICAgV1JJVEVCWVRFMihlbmNvZGVkID4+IDgsIGVuY29kZWQgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDIpOwogICAgICAgICB9Ci0gICAgICAgIE5FWFRfSU4oaW5zaXplKQorICAgICAgICBORVhUX0lOQ0hBUihpbnNpemUpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjg1LDE3ICsyNzMsMTcgQEAKIAogREVDT0RFUl9JTklUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfQ0xFQVJGTEFHUygpCi0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX1NFVEcyKENIQVJTRVRfQVNDSUkpCisgICAgU1RBVEVfQ0xFQVJGTEFHUygpOworICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcyKENIQVJTRVRfQVNDSUkpOwogICAgIHJldHVybiAwOwogfQogCiBERUNPREVSX1JFU0VUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQorICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTQsOCArMzAyLDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfSklTWDAyMDhfRVhUKSAmJiBpKzEgPCAqaW5sZWZ0ICYmCi0gICAgICAgICAgICAgICAgICgqaW5idWYpW2ldID09ICcmJyAmJiAoKmluYnVmKVtpKzFdID09ICdAJykKKyAgICAgICAgICAgICAgICAgKCppbmJ1ZilbaV0gPT0gJyYnICYmICgqaW5idWYpW2krMV0gPT0gJ0AnKSB7CiAgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoaSA+PSBNQVhfRVNDU0VRTEVOKQpAQCAtMzIzLDI3ICszMTIsMzMgQEAKIAogICAgIHN3aXRjaCAoZXNjbGVuKSB7CiAgICAgY2FzZSAzOgotICAgICAgICBpZiAoSU4yID09ICckJykgewotICAgICAgICAgICAgY2hhcnNldCA9IElOMyB8IENIQVJTRVRfREJDUzsKKyAgICAgICAgaWYgKElOQllURTIgPT0gJyQnKSB7CisgICAgICAgICAgICBjaGFyc2V0ID0gSU5CWVRFMyB8IENIQVJTRVRfREJDUzsKICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXJzZXQgPSBJTjM7Ci0gICAgICAgICAgICBpZiAoSU4yID09ICcoJykgZGVzaWduYXRpb24gPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAoSU4yID09ICcpJykgZGVzaWduYXRpb24gPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU4yID09ICcuJykKKyAgICAgICAgICAgIGNoYXJzZXQgPSBJTkJZVEUzOworICAgICAgICAgICAgaWYgKElOQllURTIgPT0gJygnKQorICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKElOQllURTIgPT0gJyknKQorICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOQllURTIgPT0gJy4nKQogICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMjsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA0OgotICAgICAgICBpZiAoSU4yICE9ICckJykKKyAgICAgICAgaWYgKElOQllURTIgIT0gJyQnKQogICAgICAgICAgICAgcmV0dXJuIDQ7CiAKLSAgICAgICAgY2hhcnNldCA9IElONCB8IENIQVJTRVRfREJDUzsKLSAgICAgICAgaWYgKElOMyA9PSAnKCcpIGRlc2lnbmF0aW9uID0gMDsKLSAgICAgICAgZWxzZSBpZiAoSU4zID09ICcpJykgZGVzaWduYXRpb24gPSAxOwotICAgICAgICBlbHNlIHJldHVybiA0OworICAgICAgICBjaGFyc2V0ID0gSU5CWVRFNCB8IENIQVJTRVRfREJDUzsKKyAgICAgICAgaWYgKElOQllURTMgPT0gJygnKQorICAgICAgICAgICAgZGVzaWduYXRpb24gPSAwOworICAgICAgICBlbHNlIGlmIChJTkJZVEUzID09ICcpJykKKyAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNjogLyogZGVzaWduYXRpb24gd2l0aCBwcmVmaXggKi8KICAgICAgICAgaWYgKENPTkZJR19JU1NFVChVU0VfSklTWDAyMDhfRVhUKSAmJgpAQCAtMzYzLDU4ICszNTgsNjUgQEAKICAgICBpZiAoY2hhcnNldCAhPSBDSEFSU0VUX0FTQ0lJKSB7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAKLSAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOyBkc2ctPm1hcms7IGRzZysrKQorICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7IGRzZy0+bWFyazsgZHNnKyspIHsKICAgICAgICAgICAgIGlmIChkc2ctPm1hcmsgPT0gY2hhcnNldCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWRzZy0+bWFyaykKICAgICAgICAgICAgIHJldHVybiBlc2NsZW47CiAgICAgfQogCi0gICAgU1RBVEVfU0VURyhkZXNpZ25hdGlvbiwgY2hhcnNldCkKKyAgICBTVEFURV9TRVRHKGRlc2lnbmF0aW9uLCBjaGFyc2V0KTsKICAgICAqaW5sZWZ0IC09IGVzY2xlbjsKICAgICAoKmluYnVmKSArPSBlc2NsZW47CiAgICAgcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgSVNPODg1OV83X0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHhhMCkgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPCAweGMwICYmICgweDI4OGYzYmM5TCAmICgxTCA8PCAoKGMpLTB4YTApKSkpICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPj0gMHhiNCAmJiAoYykgPD0gMHhmZSAmJiAoKGMpID49IDB4ZDQgfHwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAoMHhiZmZmZmQ3N0wgJiAoMUwgPDwgKChjKS0weGI0KSkpKSkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gMHgwMmQwICsgKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhMSkgKGFzc2kpID0gMHgyMDE4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhMikgKGFzc2kpID0gMHgyMDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhZikgKGFzc2kpID0gMHgyMDE1OworI2RlZmluZSBJU084ODU5XzdfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHhhMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpIDwgMHhjMCAmJiAoMHgyODhmM2JjOUwgJiAoMUwgPDwgKChjKS0weGEwKSkpKSB7IFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPj0gMHhiNCAmJiAoYykgPD0gMHhmZSAmJiAoKGMpID49IDB4ZDQgfHwgICAgICAgXAorICAgICAgICAgICAgICgweGJmZmZmZDc3TCAmICgxTCA8PCAoKGMpLTB4YjQpKSkpKSB7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAyZDAgKyAoYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPT0gMHhhMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA9PSAweGEyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID09IDB4YWYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiBzdGF0aWMgUHlfc3NpemVfdAogaXNvMjAyMnByb2Nlc3NnMihjb25zdCB2b2lkICpjb25maWcsIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90ICppbmxlZnQsCi0gICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKipvdXRidWYsIFB5X3NzaXplX3QgKm91dGxlZnQpCisgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICAvKiBub3Qgd3JpdHRlbiB0byB1c2UgZW5jb2RlciwgZGVjb2RlciBmdW5jdGlvbnMgYmVjYXVzZSBvbmx5IGZldwogICAgICAqIGVuY29kaW5ncyB1c2UgRzIgZGVzaWduYXRpb25zIGluIENKS0NvZGVjcyAqLwogICAgIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0lTTzg4NTlfMSkgewotICAgICAgICBpZiAoSU4zIDwgMHg4MCkKLSAgICAgICAgICAgIE9VVDEoSU4zICsgMHg4MCkKKyAgICAgICAgaWYgKElOQllURTMgPCAweDgwKQorICAgICAgICAgICAgT1VUQ0hBUihJTkJZVEUzICsgMHg4MCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAzOwogICAgIH0KICAgICBlbHNlIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0lTTzg4NTlfNykgewotICAgICAgICBJU084ODU5XzdfREVDT0RFKElOMyBeIDB4ODAsICoqb3V0YnVmKQotICAgICAgICBlbHNlIHJldHVybiAzOworICAgICAgICBJU084ODU5XzdfREVDT0RFKElOQllURTMgXiAweDgwLCB3cml0ZXIpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAzOwogICAgIH0KICAgICBlbHNlIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgIGlmIChJTjMgJiAweDgwKSByZXR1cm4gMzsKLSAgICAgICAgZWxzZSAqKm91dGJ1ZiA9IElOMzsKKyAgICAgICAgaWYgKElOQllURTMgJiAweDgwKQorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVENIQVIoSU5CWVRFMyk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1CRVJSX0lOVEVSTkFMOwogCiAgICAgKCppbmJ1ZikgKz0gMzsKICAgICAqaW5sZWZ0IC09IDM7Ci0gICAgKCpvdXRidWYpICs9IDE7Ci0gICAgKm91dGxlZnQgLT0gMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDIzLDU4ICs0MjUsNTggQEAKICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnY2FjaGUgPSBOVUxMOwogCiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOwogICAgICAgICBQeV9zc2l6ZV90IGVycjsKIAogICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpKSB7CiAgICAgICAgICAgICAvKiBFU0MgdGhyb3VnaG91dCBtb2RlOgogICAgICAgICAgICAgICogZm9yIG5vbi1pc28yMDIyIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSAgICAgICAgICAgIFdSSVRFMShjKSAvKiBhc3N1bWUgYXMgSVNPLTg4NTktMSAqLwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsgLyogYXNzdW1lIGFzIElTTy04ODU5LTEgKi8KKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBpZiAoSVNfRVNDRU5EKGMpKSB7Ci0gICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfRVNDVEhST1VHSE9VVCkKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9FU0NUSFJPVUdIT1VUKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgIGNhc2UgRVNDOgotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgaWYgKElTX0lTTzIwMjJFU0MoSU4yKSkgeworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGlmIChJU19JU08yMDIyRVNDKElOQllURTIpKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gaXNvMjAyMnByb2Nlc3Nlc2MoY29uZmlnLCBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlubGVmdCk7CiAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU4yID09ICdOJykgey8qIFNTMiAqLwotICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKKyAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOQllURTIgPT0gJ04nKSB7LyogU1MyICovCisgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKTsKICAgICAgICAgICAgICAgICBlcnIgPSBpc28yMDIycHJvY2Vzc2cyKGNvbmZpZywgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0LCBvdXRidWYsICZvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0LCB3cml0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdSSVRFMShFU0MpCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoRVNDKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfRVNDVEhST1VHSE9VVCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNJOgogICAgICAgICAgICAgaWYgKENPTkZJR19JU1NFVChOT19TSElGVCkpCiAgICAgICAgICAgICAgICAgZ290byBieXBhc3M7Ci0gICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgTkVYVF9JTigxKQorICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU086CiAgICAgICAgICAgICBpZiAoQ09ORklHX0lTU0VUKE5PX1NISUZUKSkKICAgICAgICAgICAgICAgICBnb3RvIGJ5cGFzczsKLSAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgTkVYVF9JTigxKQorICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExGOgotICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgIFdSSVRFMShMRikKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgT1VUQ0hBUihMRik7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoYyA8IDB4MjApIC8qIEMwICovCkBAIC00ODQsNyArNDg2LDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaGFyc2V0OwotICAgICAgICAgICAgICAgIHVjczRfdCBkZWNvZGVkOworICAgICAgICAgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBTVEFURV9HMTsKQEAgLTQ5Miw0MyArNDk0LDQ0IEBACiAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBTVEFURV9HMDsKIAogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0ID09IENIQVJTRVRfQVNDSUkpIHsKLWJ5cGFzczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHNnY2FjaGUgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUtPm1hcmsgPT0gY2hhcnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2cgPSBkc2djYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnLT5tYXJrICE9IGNoYXJzZXQKLSNpZmRlZiBQeV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZHNnLT5tYXJrICE9ICdcMCcKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO2RzZysrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqLzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZHNnLT5tYXJrICE9ICdcMCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlID0gZHNnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRihkc2ctPndpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gZHNnLT5kZWNvZGVyKCppbmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkID09IE1BUF9VTk1BUFBBQkxFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc2ctPndpZHRoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkIDwgMHgxMDAwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFMShkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjb2RlZCA8IDB4MzAwMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoZGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLyogSklTIFggMDIxMyBwYWlycyAqLwotICAgICAgICAgICAgICAgICAgICBXUklURTIoZGVjb2RlZCA+PiAxNiwgZGVjb2RlZCAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMikKK2J5cGFzczoKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5FWFRfSU4oZHNnLT53aWR0aCkKKworICAgICAgICAgICAgICAgIGlmIChkc2djYWNoZSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlLT5tYXJrID09IGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBkc2cgPSBkc2djYWNoZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOworICAgICAgICAgICAgICAgICAgICAgICAgIGRzZy0+bWFyayAhPSBjaGFyc2V0CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkc2ctPm1hcmsgIT0gJ1wwJworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgOyBkc2crKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChkc2ctPm1hcmsgIT0gJ1wwJyk7CisgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlID0gZHNnOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoZHNnLT53aWR0aCk7CisgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGRzZy0+ZGVjb2RlcigqaW5idWYpOworICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkID09IE1BUF9VTk1BUFBBQkxFKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHNnLT53aWR0aDsKKworICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkIDwgMHgxMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNvZGVkIDwgMHgzMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsgLyogSklTIFggMDIxMyBwYWlycyAqLworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSMihkZWNvZGVkID4+IDE2LCBkZWNvZGVkICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTkVYVF9JTihkc2ctPndpZHRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01NzcsMjUgKzU4MCwyNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAoga3N4MTAwMV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhrc3gxMDAxLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWtzeDEwMDFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2tzeDEwMDFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk0OSwgY29kZWQsICpkYXRhKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CkBAIC02MTMsMjcgKzYxNywyNyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMDhfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjA4X2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIwOF9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewogICAgICAgICBpZiAoKmRhdGEgPT0gMHhmZjNjKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgICAgICByZXR1cm4gMHgyMTQwOwotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgfQpAQCAtNjU0LDIzICs2NTgsMjMgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEyX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGppc3gwMjEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkICYgMHg4MDAwKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZCAmIDB4N2ZmZjsKICAgICAgICAgfQpAQCAtNzA1LDMwICs3MDksMzQgQEAKIH0KIAogI2RlZmluZSBjb25maWcgKCh2b2lkICopMjAwMCkKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDAwXzFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh1LCBkYXRhWzBdLCBkYXRhWzFdKQogICAgIGVsc2UgaWYgKGRhdGFbMF0gPT0gMHgyMSAmJiBkYXRhWzFdID09IDB4NDApIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgcmV0dXJuIDB4ZmYzYzsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDAwXzJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHUsIGRhdGFbMF0sIGRhdGFbMV0pCi0gICAgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMl9DSEFSKHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKQEAgLTczNiwyOCArNzQ0LDMyIEBACiB9CiAjdW5kZWYgY29uZmlnCiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDA0XzFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDRfMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwpAQCAtNzY1LDcgKzc3Nyw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmNvbmZpZykKK2ppc3gwMjEzX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoLCB2b2lkICpjb25maWcpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogCkBAIC03NzQsMjggKzc4NiwyOCBAQAogICAgICAgICBpZiAoKmRhdGEgPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgaWYgKCgqZGF0YSkgPj4gMTYgPT0gMHgyMDAwMCA+PiAxNikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGVkLCAqZGF0YSkKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpkYXRhKSAmIDB4ZmZmZikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZWQsICgqZGF0YSkgJiAweGZmZmYpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIH0KIAogICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChjb2RlZCwgKmRhdGEpCi0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkID09IE1VTFRJQykKICAgICAgICAgICAgICAgICByZXR1cm4gTUFQX01VTFRJUExFX0FWQUlMOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoY29kZWQgJiAweDgwMDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgcmV0dXJuIGNvZGVkOworCiAgICAgY2FzZSAyOiAvKiBzZWNvbmQgY2hhcmFjdGVyIG9mIHVuaWNvZGUgcGFpciAqLwogICAgICAgICBjb2RlZCA9IGZpbmRfcGFpcmVuY21hcCgodWNzMl90KWRhdGFbMF0sICh1Y3MyX3QpZGF0YVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgIGlmIChjb2RlZCA9PSBEQkNJTlYpIHsKICAgICAgICAgICAgICpsZW5ndGggPSAxOwogICAgICAgICAgICAgY29kZWQgPSBmaW5kX3BhaXJlbmNtYXAoKHVjczJfdClkYXRhWzBdLCAwLApAQCAtODA1LDIxICs4MTcsMjQgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CisKICAgICBjYXNlIC0xOiAvKiBmbHVzaCB1bnRlcm1pbmF0ZWQgKi8KICAgICAgICAgKmxlbmd0aCA9IDE7CiAgICAgICAgIGNvZGVkID0gZmluZF9wYWlyZW5jbWFwKCh1Y3MyX3QpZGF0YVswXSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgIGlmIChjb2RlZCA9PSBEQkNJTlYpCiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgfQogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDAwXzFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDBfMV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgKHZvaWQgKikyMDAwKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtODMxLDcgKzg0Niw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBQeV9zc2l6ZV90IGlsZW5ndGggPSAqbGVuZ3RoOwpAQCAtODU0LDcgKzg2OSw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8yX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCAodm9pZCAqKTIwMDApOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04NjYsNyArODgxLDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8xX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsIE5VTEwpOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04NzgsNyArODkzLDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIFB5X3NzaXplX3QgaWxlbmd0aCA9ICpsZW5ndGg7CkBAIC05MDEsNyArOTE2LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8yX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsIE5VTEwpOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC05MTIsMzkgKzkyNyw0MyBAQAogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIwMV9yX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBKSVNYMDIwMV9SX0RFQ09ERSgqZGF0YSwgdSkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBQeV9VQ1M0IHU7CisgICAgSklTWDAyMDFfUl9ERUNPREVfQ0hBUigqZGF0YSwgdSkKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMDFfcl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMDFfcl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgSklTWDAyMDFfUl9FTkNPREUoKmRhdGEsIGNvZGVkKQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiBjb2RlZDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjAxX2tfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEpJU1gwMjAxX0tfREVDT0RFKCpkYXRhIF4gMHg4MCwgdSkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBQeV9VQ1M0IHU7CisgICAgSklTWDAyMDFfS19ERUNPREVfQ0hBUigqZGF0YSBeIDB4ODAsIHUpCisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjAxX2tfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjAxX2tfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIEpJU1gwMjAxX0tfRU5DT0RFKCpkYXRhLCBjb2RlZCkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gY29kZWQgLSAweDgwOwogfQogCkBAIC05NjEsMjMgKzk4MCwyMyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogZ2IyMzEyX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGdiMjMxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWdiMjMxMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQorZ2IyMzEyX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7Ci0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgfQpAQCAtOTg2LDE0ICsxMDA1LDE0IEBACiB9CiAKIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGR1bW15X2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWR1bW15X2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitkdW1teV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMKaW5kZXggYTUwMDY5Ni4uMmM3Nzg4YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYwpAQCAtMTksNDAgKzE5LDQxIEBACiAKIEVOQ09ERVIoY3A5MzIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKICAgICAgICAgaWYgKGMgPD0gMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7Ci0gICAgICAgICAgICBXUklURTEoYyAtIDB4ZmVjMCkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGY4ZjAgJiYgYyA8PSAweGY4ZjMpIHsKICAgICAgICAgICAgIC8qIFdpbmRvd3MgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgaWYgKGMgPT0gMHhmOGYwKQotICAgICAgICAgICAgICAgIE9VVDEoMHhhMCkKKyAgICAgICAgICAgICAgICBPVVRCWVRFMSgweGEwKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBPVVQxKGMgLSAweGZlZjEgKyAweGZkKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVEJZVEUxKGMgLSAweGZlZjEgKyAweGZkKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5MzJleHQsIGNvZGUsIGMpIHsKLSAgICAgICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICAgICAgT1VUMihjb2RlICYgMHhmZikKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5MzJleHQsIGNvZGUsIGMpKSB7CisgICAgICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICAgICAgT1VUQllURTIoY29kZSAmIDB4ZmYpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpIHsKICAgICAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBKSVMgWCAwMjEyICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKQEAgLTYxLDIwICs2MiwyMCBAQAogICAgICAgICAgICAgYzIgPSBjb2RlICYgMHhmZjsKICAgICAgICAgICAgIGMyID0gKCgoYzEgLSAweDIxKSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7CiAgICAgICAgICAgICBjMSA9IChjMSAtIDB4MjEpID4+IDE7Ci0gICAgICAgICAgICBPVVQxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSkKLSAgICAgICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQorICAgICAgICAgICAgT1VUQllURTEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGUwMDAgJiYgYyA8IDB4ZTc1OCkgewogICAgICAgICAgICAgLyogVXNlci1kZWZpbmVkIGFyZWEgKi8KLSAgICAgICAgICAgIGMxID0gKFB5X1VOSUNPREUpKGMgLSAweGUwMDApIC8gMTg4OwotICAgICAgICAgICAgYzIgPSAoUHlfVU5JQ09ERSkoYyAtIDB4ZTAwMCkgJSAxODg7Ci0gICAgICAgICAgICBPVVQxKGMxICsgMHhmMCkKLSAgICAgICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQorICAgICAgICAgICAgYzEgPSAoUHlfVUNTNCkoYyAtIDB4ZTAwMCkgLyAxODg7CisgICAgICAgICAgICBjMiA9IChQeV9VQ1M0KShjIC0gMHhlMDAwKSAlIDE4ODsKKyAgICAgICAgICAgIE9VVEJZVEUxKGMxICsgMHhmMCk7CisgICAgICAgICAgICBPVVRCWVRFMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTgzLDMzICs4NCwzNCBAQAogREVDT0RFUihjcDkzMikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjEsIGMyOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxLCBjMjsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCiAgICAgICAgIGlmIChjIDw9IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGEwICYmIGMgPD0gMHhkZikgewogICAgICAgICAgICAgaWYgKGMgPT0gMHhhMCkKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZjhmMCkgLyogaGFsZi13aWR0aCBrYXRha2FuYSAqLworICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmOGYwKTsgLyogaGFsZi13aWR0aCBrYXRha2FuYSAqLwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE9VVDEoMHhmZWMwICsgYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZC8qICYmIGMgPD0gMHhmZiovKSB7CiAgICAgICAgICAgICAvKiBXaW5kb3dzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgICAgIE9VVDEoMHhmOGYxIC0gMHhmZCArIGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKDB4ZjhmMSAtIDB4ZmQgKyBjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgYzIgPSBJTjI7CisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGMyID0gSU5CWVRFMjsKIAotICAgICAgICBUUllNQVBfREVDKGNwOTMyZXh0LCAqKm91dGJ1ZiwgYywgYzIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhjcDkzMmV4dCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKICAgICAgICAgZWxzZSBpZiAoKGMgPj0gMHg4MSAmJiBjIDw9IDB4OWYpIHx8IChjID49IDB4ZTAgJiYgYyA8PSAweGVhKSl7CiAgICAgICAgICAgICBpZiAoYzIgPCAweDQwIHx8IChjMiA+IDB4N2UgJiYgYzIgPCAweDgwKSB8fCBjMiA+IDB4ZmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0xMTksMjEgKzEyMSwyMyBAQAogICAgICAgICAgICAgYyA9ICgyICogYyArIChjMiA8IDB4NWUgPyAwIDogMSkgKyAweDIxKTsKICAgICAgICAgICAgIGMyID0gKGMyIDwgMHg1ZSA/IGMyIDogYzIgLSAweDVlKSArIDB4MjE7CiAKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmMCAmJiBjIDw9IDB4ZjkpIHsKICAgICAgICAgICAgIGlmICgoYzIgPj0gMHg0MCAmJiBjMiA8PSAweDdlKSB8fAogICAgICAgICAgICAgICAgIChjMiA+PSAweDgwICYmIGMyIDw9IDB4ZmMpKQotICAgICAgICAgICAgICAgIE9VVDEoMHhlMDAwICsgMTg4ICogKGMgLSAweGYwKSArCi0gICAgICAgICAgICAgICAgICAgICAoYzIgPCAweDgwID8gYzIgLSAweDQwIDogYzIgLSAweDQxKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZTAwMCArIDE4OCAqIChjIC0gMHhmMCkgKworICAgICAgICAgICAgICAgICAgICAoYzIgPCAweDgwID8gYzIgLSAweDQwIDogYzIgLSAweDQxKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTQ2LDI1ICsxNTAsMjQgQEAKIAogRU5DT0RFUihldWNfamlzXzIwMDQpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBpZiAoYyA8PSAweEZGRkYpIHsKICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGUsIGMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTUJFTkNfRkxVU0gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIDAsCkBAIC0xNzcsOCArMTgwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjMiA9IElOQ0hBUjI7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgKCppbmJ1ZilbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBjMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBEQkNJTlYpIHsKQEAgLTE5MywxMSArMTk3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYyk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7CiAgICAgICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCi0gICAgICAgICAgICAgICAgV1JJVEUyKDB4OGUsIGMgLSAweGZlYzApCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTIoMHg4ZSwgYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhmZjNjKQpAQCAtMjExLDIwICsyMTYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID4+IDE2ID09IEVNUEJBU0UgPj4gMTYpIHsKICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGUsIGMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjICYgMHhmZmZmKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjICYgMHhmZmZmKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSB7CiAgICAgICAgICAgICAvKiBDb2Rlc2V0IDIgKi8KLSAgICAgICAgICAgIFdSSVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVChpbnNpemUsIDMpCisgICAgICAgICAgICBXUklURUJZVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVChpbnNpemUsIDMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogQ29kZXNldCAxICovCi0gICAgICAgICAgICBXUklURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoaW5zaXplLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM0LDE0ICsyNDEsMTIgQEAKIERFQ09ERVIoZXVjX2ppc18yMDA0KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLSAgICAgICAgdWNzNF90IGNvZGU7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBjb2RlLCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0yNDksMTEgKzI1NCwxMSBAQAogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPj0gMHhhMSAmJiBjMiA8PSAweGRmKSB7Ci0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjMikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjMik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTI2MSw0NyArMjY2LDU1IEBACiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHg4ZikgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiwgYzM7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKLSAgICAgICAgICAgIGMyID0gSU4yIF4gMHg4MDsKLSAgICAgICAgICAgIGMzID0gSU4zIF4gMHg4MDsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMyk7CisgICAgICAgICAgICBjMiA9IElOQllURTIgXiAweDgwOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzIF4gMHg4MDsKIAogICAgICAgICAgICAgLyogSklTIFggMDIxMyBQbGFuZSAyIG9yIEpJUyBYIDAyMTIgKHNlZSBOT1RFUykgKi8KLSAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKCoqb3V0YnVmLCBjMiwgYzMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsICoqb3V0YnVmLCBjMiwgYzMpIDsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzIsIGMzKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIE5FWFRfSU4oMykKKyAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHdyaXRlciwgYzIsIGMzKQorICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgZGVjb2RlZCwgYzIsIGMzKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzIsIGMzKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTIsICoqb3V0YnVmLCBjMiwgYzMpIDsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDMsIDEpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEyLCBkZWNvZGVkLCBjMiwgYzMpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBORVhUX0lOKDMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKICAgICAgICAgICAgIGMgXj0gMHg4MDsKLSAgICAgICAgICAgIGMyID0gSU4yIF4gMHg4MDsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMiBeIDB4ODA7CiAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTMgUGxhbmUgMSAqLwotICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoKipvdXRidWYsIGMsIGMyKQotICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIxICYmIGMyID09IDB4NDApICoqb3V0YnVmID0gMHhmZjNjOwotICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIyICYmIGMyID09IDB4MzIpICoqb3V0YnVmID0gMHhmZjVlOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjLCBjMikgewotICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh3cml0ZXIsIGMsIGMyKQorICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIxICYmIGMyID09IDB4NDApCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOworICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIyICYmIGMyID09IDB4MzIpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmNWUpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYywgYzIpIHsKLSAgICAgICAgICAgICAgICBXUklURTIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDIpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDM1ICszMjgsMzcgQEAKIAogRU5DT0RFUihldWNfanApCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KLSAgICAgICAgICAgIFdSSVRFMigweDhlLCBjIC0gMHhmZWMwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigweDhlLCBjIC0gMHhmZWMwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGZmM2MpIC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgICAgICBjb2RlID0gMHgyMTQwOwogICAgICAgICBlbHNlIGlmIChjID09IDB4YTUpIHsgLyogWUVOIFNJR04gKi8KLSAgICAgICAgICAgIFdSSVRFMSgweDVjKTsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoMHg1Yyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAweDIwM2UpIHsgLyogT1ZFUkxJTkUgKi8KLSAgICAgICAgICAgIFdSSVRFMSgweDdlKTsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoMHg3ZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMzUyLDEyICszNjcsMTIgQEAKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgewogICAgICAgICAgICAgLyogSklTIFggMDIxMiAqLwotICAgICAgICAgICAgV1JJVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKDEsIDMpCisgICAgICAgICAgICBXUklURUJZVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVCgxLCAzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDggKi8KLSAgICAgICAgICAgIFdSSVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM2NywxMyArMzgyLDEyIEBACiBERUNPREVSKGV1Y19qcCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0zODEsMTEgKzM5NSwxMSBAQAogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPj0gMHhhMSAmJiBjMiA8PSAweGRmKSB7Ci0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjMikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjMik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTM5MywxMiArNDA3LDEzIEBACiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHg4ZikgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiwgYzM7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKLSAgICAgICAgICAgIGMyID0gSU4yOwotICAgICAgICAgICAgYzMgPSBJTjM7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzOwogICAgICAgICAgICAgLyogSklTIFggMDIxMiAqLwotICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIxMiwgKipvdXRidWYsIGMyIF4gMHg4MCwgYzMgXiAweDgwKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgzLCAxKQorICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTIsIGRlY29kZWQsIGMyIF4gMHg4MCwgYzMgXiAweDgwKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTQwNiwxOSArNDIxLDIwIEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgLyogSklTIFggMDIwOCAqLwogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgICAgIGlmIChjID09IDB4YTEgJiYgYzIgPT0gMHhjMCkKICAgICAgICAgICAgICAgICAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwotICAgICAgICAgICAgICAgICoqb3V0YnVmID0gMHhmZjNjOworICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjNjKTsKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYyBeIDB4ODAsIGMyIF4gMHg4MCkgOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjIF4gMHg4MCwgYzIgXiAweDgwKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDMyLDM0ICs0NDgsNDAgQEAKIAogRU5DT0RFUihzaGlmdF9qaXMpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKICNpZmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgSklTWDAyMDFfUl9FTkNPREUoYywgY29kZSkKICNlbHNlCi0gICAgICAgIGlmIChjIDwgMHg4MCkgY29kZSA9IGM7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgwMGE1KSBjb2RlID0gMHg1YzsgLyogWUVOIFNJR04gKi8KLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwM2UpIGNvZGUgPSAweDdlOyAvKiBPVkVSTElORSAqLworICAgICAgICBpZiAoYyA8IDB4ODApCisgICAgICAgICAgICBjb2RlID0gYzsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDAwYTUpCisgICAgICAgICAgICBjb2RlID0gMHg1YzsgLyogWUVOIFNJR04gKi8KKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwM2UpCisgICAgICAgICAgICBjb2RlID0gMHg3ZTsgLyogT1ZFUkxJTkUgKi8KICNlbmRpZgogICAgICAgICBlbHNlIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgVUNTNElOVkFMSUQoYykKLSAgICAgICAgZWxzZSBjb2RlID0gTk9DSEFSOworICAgICAgICBlbHNlIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSBOT0NIQVI7CiAKICAgICAgICAgaWYgKGNvZGUgPCAweDgwIHx8IChjb2RlID49IDB4YTEgJiYgY29kZSA8PSAweGRmKSkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogCi0gICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKWNvZGUpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRCWVRFMSgodW5zaWduZWQgY2hhciljb2RlKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjb2RlID09IE5PQ0hBUikgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4ZmYzYykKICAgICAgICAgICAgICAgICBjb2RlID0gMHgyMTQwOyAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwpAQCAtNDc1LDkgKzQ5Nyw5IEBACiAgICAgICAgIGMyID0gY29kZSAmIDB4ZmY7CiAgICAgICAgIGMyID0gKCgoYzEgLSAweDIxKSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7CiAgICAgICAgIGMxID0gKGMxIC0gMHgyMSkgPj4gMTsKLSAgICAgICAgT1VUMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpCi0gICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSk7CisgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC00ODYsMjEgKzUwOCwyMSBAQAogREVDT0RFUihzaGlmdF9qaXMpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogI2lmZGVmIFNUUklDVF9CVUlMRAotICAgICAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgSklTWDAyMDFfUl9ERUNPREUoYywgd3JpdGVyKQogI2Vsc2UKLSAgICAgICAgaWYgKGMgPCAweDgwKSAqKm91dGJ1ZiA9IGM7CisgICAgICAgIGlmIChjIDwgMHg4MCkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CiAjZW5kaWYKLSAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpCiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhlYSkpewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA8IDB4NDAgfHwgKGMyID4gMHg3ZSAmJiBjMiA8IDB4ODApIHx8IGMyID4gMHhmYykKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtNTEyLDEzICs1MzQsMTQgQEAKICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBpZiAoYzEgPT0gMHgyMSAmJiBjMiA9PSAweDQwKSB7CiAgICAgICAgICAgICAgICAgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmYzYykKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYzEsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTUyNyw3ICs1NTAsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDEsIDEpIC8qIEpJUyBYIDAyMDEgKi8KKyAgICAgICAgTkVYVF9JTigxKTsgLyogSklTIFggMDIwMSAqLwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNTQwLDMwICs1NjMsMjkgQEAKIAogRU5DT0RFUihzaGlmdF9qaXNfMjAwNCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGUgPSBOT0NIQVI7CiAgICAgICAgIGludCBjMSwgYzI7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIEpJU1gwMjAxX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIERFQ09ERV9TVVJST0dBVEUoYykKIAogICAgICAgICBpZiAoY29kZSA8IDB4ODAgfHwgKGNvZGUgPj0gMHhhMSAmJiBjb2RlIDw9IDB4ZGYpKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpY29kZSkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpY29kZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBpZiAoY29kZSA9PSBOT0NIQVIpIHsKICAgICAgICAgICAgIGlmIChjIDw9IDB4ZmZmZikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGUsIGMpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTUJFTkNfRkxVU0gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWNzMl90KWMsIDAsCkBAIC01NzYsOCArNTk4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgY2gyID0gSU5DSEFSMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIElOMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBjaDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IERCQ0lOVikgewpAQCAtNTkzLDE3ICs2MTYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICAgICAgLyogYWJhbmRvbiBKSVMgWCAwMjEyIGNvZGVzICovCiAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj4gMTYgPT0gRU1QQkFTRSA+PiAxNikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGUsIGMpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyYweGZmZmYpOwotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyYweGZmZmYpKQorICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CkBAIC02MTIsMjAgKzYzOCwyNyBAQAogICAgICAgICBjMSA9IGNvZGUgPj4gODsKICAgICAgICAgYzIgPSAoY29kZSAmIDB4ZmYpIC0gMHgyMTsKIAotICAgICAgICBpZiAoYzEgJiAweDgwKSB7IC8qIFBsYW5lIDIgKi8KLSAgICAgICAgICAgIGlmIChjMSA+PSAweGVlKSBjMSAtPSAweDg3OwotICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHhhYyB8fCBjMSA9PSAweGE4KSBjMSAtPSAweDQ5OwotICAgICAgICAgICAgZWxzZSBjMSAtPSAweDQzOworICAgICAgICBpZiAoYzEgJiAweDgwKSB7CisgICAgICAgICAgICAvKiBQbGFuZSAyICovCisgICAgICAgICAgICBpZiAoYzEgPj0gMHhlZSkKKyAgICAgICAgICAgICAgICBjMSAtPSAweDg3OworICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHhhYyB8fCBjMSA9PSAweGE4KQorICAgICAgICAgICAgICAgIGMxIC09IDB4NDk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYzEgLT0gMHg0MzsKICAgICAgICAgfQotICAgICAgICBlbHNlIC8qIFBsYW5lIDEgKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBQbGFuZSAxICovCiAgICAgICAgICAgICBjMSAtPSAweDIxOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKGMxICYgMSkgYzIgKz0gMHg1ZTsKKyAgICAgICAgaWYgKGMxICYgMSkKKyAgICAgICAgICAgIGMyICs9IDB4NWU7CiAgICAgICAgIGMxID4+PSAxOwotICAgICAgICBPVVQxKGMxICsgKGMxIDwgMHgxZiA/IDB4ODEgOiAweGMxKSkKLSAgICAgICAgT1VUMihjMiArIChjMiA8IDB4M2YgPyAweDQwIDogMHg0MSkpCisgICAgICAgIE9VVEJZVEUxKGMxICsgKGMxIDwgMHgxZiA/IDB4ODEgOiAweGMxKSk7CisgICAgICAgIE9VVEJZVEUyKGMyICsgKGMyIDwgMHgzZiA/IDB4NDAgOiAweDQxKSk7CiAKLSAgICAgICAgTkVYVChpbnNpemUsIDIpCisgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTYzNCwxNiArNjY3LDE1IEBACiBERUNPREVSKHNoaWZ0X2ppc18yMDA0KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQotICAgICAgICBKSVNYMDIwMV9ERUNPREUoYywgKipvdXRidWYpCisgICAgICAgIEpJU1gwMjAxX0RFQ09ERShjLCB3cml0ZXIpCiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhmYykpewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7Ci0gICAgICAgICAgICB1Y3M0X3QgY29kZTsKKyAgICAgICAgICAgIFB5X1VDUzQgY29kZSwgZGVjb2RlZDsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyIDwgMHg0MCB8fCAoYzIgPiAweDdlICYmIGMyIDwgMHg4MCkgfHwgYzIgPiAweGZjKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC02NTQsNTAgKzY4Niw0NyBAQAogCiAgICAgICAgICAgICBpZiAoYzEgPCAweDVlKSB7IC8qIFBsYW5lIDEgKi8KICAgICAgICAgICAgICAgICBjMSArPSAweDIxOwotICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKCoqb3V0YnVmLAorICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgxKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgyKQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIGRlY29kZWQsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7IC8qIFBsYW5lIDIgKi8KLSAgICAgICAgICAgICAgICBpZiAoYzEgPj0gMHg2NykgYzEgKz0gMHgwNzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweDYzIHx8IGMxID09IDB4NWYpIGMxIC09IDB4Mzc7Ci0gICAgICAgICAgICAgICAgZWxzZSBjMSAtPSAweDNkOworICAgICAgICAgICAgICAgIGlmIChjMSA+PSAweDY3KQorICAgICAgICAgICAgICAgICAgICBjMSArPSAweDA3OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4NjMgfHwgYzEgPT0gMHg1ZikKKyAgICAgICAgICAgICAgICAgICAgYzEgLT0gMHgzNzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGMxIC09IDB4M2Q7CiAKLSAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMigqKm91dGJ1ZiwKKyAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpIDsKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMxLCBjMikpIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgxLCAxKSAvKiBKSVMgWCAwMjAxICovCisgICAgICAgIE5FWFRfSU4oMSk7IC8qIEpJUyBYIDAyMDEgKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYwppbmRleCBmNTY5N2RkLi4xYWQ0MWE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jCkBAIC0zMyw1MSArMzMsNTYgQEAKIAogRU5DT0RFUihldWNfa3IpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmICgoY29kZSAmIDB4ODAwMCkgPT0gMCkgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxIGNvZGVkIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7ICAgICAgICAgIC8qIE1hcHBpbmcgaXMgZm91bmQgaW4gQ1A5NDkgZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAqIGJ1dCB3ZSBlbmNvZGUgaXQgaW4gS1MgWCAxMDAxOjE5OTggQW5uZXggMywKLSAgICAgICAgICAgICAgICAgKiBtYWtlLXVwIHNlcXVlbmNlIGZvciBFVUMtS1IuICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogTWFwcGluZyBpcyBmb3VuZCBpbiBDUDk0OSBleHRlbnNpb24sCisgICAgICAgICAgICAgICBidXQgd2UgZW5jb2RlIGl0IGluIEtTIFggMTAwMToxOTk4IEFubmV4IDMsCisgICAgICAgICAgICAgICBtYWtlLXVwIHNlcXVlbmNlIGZvciBFVUMtS1IuICovCiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDgpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig4KTsKIAogICAgICAgICAgICAgLyogc3lsbGFibGUgY29tcG9zaXRpb24gcHJlY2VkZW5jZSAqLwotICAgICAgICAgICAgT1VUMShFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDIoRVVDS1JfSkFNT19GSUxMRVIpCisgICAgICAgICAgICBPVVRCWVRFMShFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFMihFVUNLUl9KQU1PX0ZJTExFUik7CiAKICAgICAgICAgICAgIC8qIEFsbCBjb2RlcG9pbnRzIGluIENQOTQ5IGV4dGVuc2lvbiBhcmUgaW4gdW5pY29kZQogICAgICAgICAgICAgICogSGFuZ3VsIFN5bGxhYmxlIGFyZWEuICovCiAgICAgICAgICAgICBhc3NlcnQoMHhhYzAwIDw9IGMgJiYgYyA8PSAweGQ3YTMpOwogICAgICAgICAgICAgYyAtPSAweGFjMDA7CiAKLSAgICAgICAgICAgIE9VVDMoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQ0KHUyY2drX2Nob3Nlb25nW2MgLyA1ODhdKQotICAgICAgICAgICAgTkVYVF9PVVQoNCkKKyAgICAgICAgICAgIE9VVEJZVEUzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEU0KHUyY2drX2Nob3Nlb25nW2MgLyA1ODhdKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogCi0gICAgICAgICAgICBPVVQxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUMih1MmNna19qdW5nc2VvbmdbKGMgLyAyOCkgJSAyMV0pCi0gICAgICAgICAgICBPVVQzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUNCh1MmNna19qb25nc2VvbmdbYyAlIDI4XSkKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKKyAgICAgICAgICAgIE9VVEJZVEUxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKHUyY2drX2p1bmdzZW9uZ1soYyAvIDI4KSAlIDIxXSk7CisgICAgICAgICAgICBPVVRCWVRFMyhFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFNCh1MmNna19qb25nc2VvbmdbYyAlIDI4XSk7CisgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDIsMjQgKzEwNywyMyBAQAogREVDT0RFUihldWNfa3IpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKICAgICAgICAgaWYgKGMgPT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgJiYKLSAgICAgICAgICAgIElOMiA9PSBFVUNLUl9KQU1PX0ZJTExFUikgeworICAgICAgICAgICAgSU5CWVRFMiA9PSBFVUNLUl9KQU1PX0ZJTExFUikgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxOjE5OTggQW5uZXggMyBtYWtlLXVwIHNlcXVlbmNlICovCiAgICAgICAgICAgICBEQkNIQVIgY2hvLCBqdW5nLCBqb25nOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDgpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDgpOwogICAgICAgICAgICAgaWYgKCgqaW5idWYpWzJdICE9IEVVQ0tSX0pBTU9fRklSU1RCWVRFIHx8CiAgICAgICAgICAgICAgICAgKCppbmJ1ZilbNF0gIT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgfHwKICAgICAgICAgICAgICAgICAoKmluYnVmKVs2XSAhPSBFVUNLUl9KQU1PX0ZJUlNUQllURSkKQEAgLTE0NSwxMSArMTQ5LDEyIEBACiAgICAgICAgICAgICBpZiAoY2hvID09IE5PTkUgfHwganVuZyA9PSBOT05FIHx8IGpvbmcgPT0gTk9ORSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICAgICAgT1VUMSgweGFjMDAgKyBjaG8qNTg4ICsganVuZyoyOCArIGpvbmcpOwotICAgICAgICAgICAgTkVYVCg4LCAxKQorICAgICAgICAgICAgT1VUQ0hBUigweGFjMDAgKyBjaG8qNTg4ICsganVuZyoyOCArIGpvbmcpOworICAgICAgICAgICAgTkVYVF9JTig4KTsKICAgICAgICAgfQotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKSB7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0xNjYsMjcgKzE3MSwzMSBAQAogCiBFTkNPREVSKGNwOTQ5KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCi0gICAgICAgICAgICBPVVQyKGNvZGUgJiAweEZGKSAvKiBNU0Igc2V0OiBDUDk0OSAqLworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKSAvKiBNU0IgdW5zZXQ6IGtzIHggMTAwMSAqLwotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKKyAgICAgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsgLyogTVNCIHNldDogQ1A5NDkgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOyAvKiBNU0IgdW5zZXQ6IGtzIHggMTAwMSAqLworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTk1LDIyICsyMDQsMjQgQEAKIERFQ09ERVIoY3A5NDkpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKTsKLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGNwOTQ5ZXh0LCAqKm91dGJ1ZiwgYywgSU4yKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoY3A5NDlleHQsIGRlY29kZWQsIGMsIElOQllURTIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjUwLDE4ICsyNjEsMjAgQEAKIAogRU5DT0RFUihqb2hhYikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBpZiAoYyA+PSAweGFjMDAgJiYgYyA8PSAweGQ3YTMpIHsKICAgICAgICAgICAgIGMgLT0gMHhhYzAwOwpAQCAtMjcyLDcgKzI4NSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweDMxMzEgJiYgYyA8PSAweDMxNjMpCiAgICAgICAgICAgICBjb2RlID0gdTJqb2hhYmphbW9bYyAtIDB4MzEzMV07Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzIsIHQyOwogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdDE7CiAKQEAgLTI4NSw5ICsyOTgsOSBAQAogICAgICAgICAgICAgICAgIHQxID0gKGMxIDwgMHg0YSA/IChjMSAtIDB4MjEgKyAweDFiMikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAoYzEgLSAweDIxICsgMHgxOTcpKTsKICAgICAgICAgICAgICAgICB0MiA9ICgodDEgJiAxKSA/IDB4NWUgOiAwKSArIChjMiAtIDB4MjEpOwotICAgICAgICAgICAgICAgIE9VVDEodDEgPj4gMSkKLSAgICAgICAgICAgICAgICBPVVQyKHQyIDwgMHg0ZSA/IHQyICsgMHgzMSA6IHQyICsgMHg0MykKLSAgICAgICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICAgICAgT1VUQllURTEodDEgPj4gMSk7CisgICAgICAgICAgICAgICAgT1VUQllURTIodDIgPCAweDRlID8gdDIgKyAweDMxIDogdDIgKyAweDQzKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMjk2LDkgKzMwOSw5IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweGZmKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweGZmKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTM0OCwxOCArMzYxLDE3IEBACiBERUNPREVSKGpvaGFiKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgYyA9IElOMSwgYzI7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMSwgYzI7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBjMiA9IElOQllURTI7CiAKICAgICAgICAgaWYgKGMgPCAweGQ4KSB7CiAgICAgICAgICAgICAvKiBqb2hhYiBoYW5ndWwgKi8KQEAgLTM4MSwzMyArMzkzLDMzIEBACiAgICAgICAgICAgICBpZiAoaV9jaG8gPT0gRklMTCkgewogICAgICAgICAgICAgICAgIGlmIChpX2p1bmcgPT0gRklMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaV9qb25nID09IEZJTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMDAwKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMxMDAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fam9uZ3Nlb25nW2Nfam9uZ10pCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzEwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2pvbmdzZW9uZ1tjX2pvbmddKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2p1bmdzZW9uZ1tjX2p1bmddKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMxMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qdW5nc2VvbmdbY19qdW5nXSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGlfanVuZyA9PSBGSUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2Nob3Nlb25nW2NfY2hvXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMTAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fY2hvc2VvbmdbY19jaG9dKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgT1VUMSgweGFjMDAgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGlfY2hvICogNTg4ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBpX2p1bmcgKiAyOCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGlfam9uZyA9PSBGSUxMID8gMCA6IGlfam9uZykpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHhhYzAwICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlfY2hvICogNTg4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlfanVuZyAqIDI4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpX2pvbmcgPT0gRklMTCA/IDAgOiBpX2pvbmcpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBLUyBYIDEwMDEgZXhjZXB0IGhhbmd1bCBqYW1vcyBhbmQgc3lsbGFibGVzICovCiAgICAgICAgICAgICBpZiAoYyA9PSAweGRmIHx8IGMgPiAweGY5IHx8CkBAIC00MjQsOSArNDM2LDEzIEBACiAgICAgICAgICAgICAgICAgdDEgPSB0MSArICh0MiA8IDB4NWUgPyAwIDogMSkgKyAweDIxOwogICAgICAgICAgICAgICAgIHQyID0gKHQyIDwgMHg1ZSA/IHQyIDogdDIgLSAweDVlKSArIDB4MjE7CiAKLSAgICAgICAgICAgICAgICBUUllNQVBfREVDKGtzeDEwMDEsICoqb3V0YnVmLCB0MSwgdDIpOwotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIGRlY29kZWQsIHQxLCB0MikpIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYwppbmRleCA5MTYyOThkLi43MjJiMjZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jCkBAIC0xMywyNiArMTMsMzAgQEAKIAogRU5DT0RFUihiaWc1KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9ICoqaW5idWY7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgKipvdXRidWYgPSAodW5zaWduZWQgY2hhciljOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNDEsMTkgKzQ1LDE5IEBACiBERUNPREVSKGJpZzUpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhiaWc1LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSByZXR1cm4gMTsKICAgICB9CkBAIC02OCwyNSArNzIsMzAgQEAKIAogRU5DT0RFUihjcDk1MCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk1MGV4dCwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NTBleHQsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC05NSwyMyArMTA0LDI1IEBACiBERUNPREVSKGNwOTUwKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIFRSWU1BUF9ERUMoY3A5NTBleHQsICoqb3V0YnVmLCBjLCBJTjIpOwotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChUUllNQVBfREVDKGNwOTUwZXh0LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoYmlnNSwgZGVjb2RlZCwgYywgSU5CWVRFMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaCBiL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCmluZGV4IDBiYzdkYjUuLjMwMzRiNWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCkBAIC0xLDI0ICsxLDY1IEBACiAjZGVmaW5lIEpJU1gwMjAxX1JfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHg4MCAmJiAoYykgIT0gMHg1YyAmJiAoYykgIT0gMHg3ZSkgICAgICAgXAorICAgIGlmICgoYykgPCAweDgwICYmIChjKSAhPSAweDVjICYmIChjKSAhPSAweDdlKSB7ICAgICBcCiAgICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHgwMGE1KSAoYXNzaSkgPSAweDVjOyAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDIwM2UpIChhc3NpKSA9IDB4N2U7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHgwMGE1KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHgyMDNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZGVmaW5lIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpID49IDB4ZmY2MSAmJiAoYykgPD0gMHhmZjlmKSAgICAgICAgICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAoYykgLSAweGZlYzA7CisgICAgaWYgKChjKSA+PSAweGZmNjEgJiYgKGMpIDw9IDB4ZmY5ZikgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpIC0gMHhmZWMwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogI2RlZmluZSBKSVNYMDIwMV9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgSklTWDAyMDFfUl9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGFzc2kpCiAKLSNkZWZpbmUgSklTWDAyMDFfUl9ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPCAweDVjKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIChhc3NpKSA9IDB4MDBhNTsgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPCAweDdlKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDdlKSAoYXNzaSkgPSAweDIwM2U7ICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIChhc3NpKSA9IDB4N2Y7Ci0jZGVmaW5lIEpJU1gwMjAxX0tfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpID49IDB4YTEgJiYgKGMpIDw9IDB4ZGYpICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NpKSA9IDB4ZmVjMCArIChjKTsKLSNkZWZpbmUgSklTWDAyMDFfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCBhc3NpKQorI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERV9DSEFSKGMsIGFzc2kpICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHgwMGE1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHgyMDNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg3ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAwYTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwM2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDdmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA+PSAweGExICYmIChjKSA8PSAweGRmKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweGZlYzAgKyAoYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNkZWZpbmUgSklTWDAyMDFfS19ERUNPREVfQ0hBUihjLCBhc3NpKSAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPj0gMHhhMSAmJiAoYykgPD0gMHhkZikgeyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4ZmVjMCArIChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIEpJU1gwMjAxX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgd3JpdGVyKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaAppbmRleCBhYjA2ODJhLi4yNWJhYjQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaApAQCAtMzMsNyArMzMsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgZGJjc19pbmRleCBkZWNvZGVfbWFwOwogCiBzdHJ1Y3Qgd2lkZWRiY3NfaW5kZXggewotICAgIGNvbnN0IHVjczRfdCAqbWFwOworICAgIGNvbnN0IFB5X1VDUzQgKm1hcDsKICAgICB1bnNpZ25lZCBjaGFyIGJvdHRvbSwgdG9wOwogfTsKIHR5cGVkZWYgc3RydWN0IHdpZGVkYmNzX2luZGV4IHdpZGVkZWNvZGVfbWFwOwpAQCAtNTYsNyArNTYsNyBAQAogfTsKIAogc3RydWN0IHBhaXJfZW5jb2RlbWFwIHsKLSAgICB1Y3M0X3QgdW5pc2VxOworICAgIFB5X1VDUzQgdW5pc2VxOwogICAgIERCQ0hBUiBjb2RlOwogfTsKIApAQCAtNzIsNyArNzIsOCBAQAogI2RlZmluZSBFTkNPREVSKGVuY29kaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZW5jb2RlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsIGNvbnN0IHZvaWQgKmNvbmZpZywgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQga2luZCwgdm9pZCAqZGF0YSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfc3NpemVfdCAqaW5wb3MsIFB5X3NzaXplX3QgaW5sZW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0LCBpbnQgZmxhZ3MpCiAjZGVmaW5lIEVOQ09ERVJfUkVTRVQoZW5jb2RpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19lbmNvZGVfcmVzZXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04NiwxMjAgKzg3LDExOCBAQAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZGVjb2RlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsIGNvbnN0IHZvaWQgKmNvbmZpZywgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LCAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9VTklDT0RFICoqb3V0YnVmLCBQeV9zc2l6ZV90IG91dGxlZnQpCisgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKICNkZWZpbmUgREVDT0RFUl9SRVNFVChlbmNvZGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2RlY29kZV9yZXNldCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcpCiAKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gNAotI2RlZmluZSBVQ1M0SU5WQUxJRChjb2RlKSAgICAgICBcCi0gICAgaWYgKChjb2RlKSA+IDB4RkZGRikgICAgICAgIFwKLSAgICByZXR1cm4gMTsKLSNlbHNlCi0jZGVmaW5lIFVDUzRJTlZBTElEKGNvZGUpICAgICAgIFwKLSAgICBpZiAoMCkgOwotI2VuZGlmCi0KICNkZWZpbmUgTkVYVF9JTihpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKmluYnVmKSArPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoaW5sZWZ0KSAtPSAoaSk7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqaW5idWYpICs9IChpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChpbmxlZnQpIC09IChpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTkVYVF9JTkNIQVIoaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCppbnBvcykgKz0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogI2RlZmluZSBORVhUX09VVChvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgqb3V0YnVmKSArPSAobyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChvdXRsZWZ0KSAtPSAobyk7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKSArPSAobyk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChvdXRsZWZ0KSAtPSAobyk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgTkVYVChpLCBvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBORVhUX0lOKGkpIE5FWFRfT1VUKG8pCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5FWFRfSU5DSEFSKGkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5FWFRfT1VUKG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSRVFVSVJFX0lOQlVGKG4pICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChpbmxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoaW5sZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKICNkZWZpbmUgUkVRVUlSRV9PVVRCVUYobikgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAob3V0bGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIE1CRVJSX1RPT1NNQUxMOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAob3V0bGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT1NNQUxMOyAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgSU4xICgoKmluYnVmKVswXSkKLSNkZWZpbmUgSU4yICgoKmluYnVmKVsxXSkKLSNkZWZpbmUgSU4zICgoKmluYnVmKVsyXSkKLSNkZWZpbmUgSU40ICgoKmluYnVmKVszXSkKKyNkZWZpbmUgSU5CWVRFMSAoKCppbmJ1ZilbMF0pCisjZGVmaW5lIElOQllURTIgKCgqaW5idWYpWzFdKQorI2RlZmluZSBJTkJZVEUzICgoKmluYnVmKVsyXSkKKyNkZWZpbmUgSU5CWVRFNCAoKCppbmJ1ZilbM10pCiAKLSNkZWZpbmUgT1VUMShjKSAoKCpvdXRidWYpWzBdKSA9IChjKTsKLSNkZWZpbmUgT1VUMihjKSAoKCpvdXRidWYpWzFdKSA9IChjKTsKLSNkZWZpbmUgT1VUMyhjKSAoKCpvdXRidWYpWzJdKSA9IChjKTsKLSNkZWZpbmUgT1VUNChjKSAoKCpvdXRidWYpWzNdKSA9IChjKTsKKyNkZWZpbmUgSU5DSEFSMSAoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgKmlucG9zKSkKKyNkZWZpbmUgSU5DSEFSMiAoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgKmlucG9zICsgMSkpCiAKLSNkZWZpbmUgV1JJVEUxKGMxKSAgICAgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDEpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsKLSNkZWZpbmUgV1JJVEUyKGMxLCBjMikgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDIpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOwotI2RlZmluZSBXUklURTMoYzEsIGMyLCBjMykgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMykgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzJdID0gKGMzKTsKLSNkZWZpbmUgV1JJVEU0KGMxLCBjMiwgYzMsIGM0KSAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDQpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsyXSA9IChjMyk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzNdID0gKGM0KTsKKyNkZWZpbmUgT1VUQ0hBUihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKHdyaXRlciwgKGMpKSA8IDApICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9FWENFUFRJT047ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0jIGRlZmluZSBXUklURVVDUzQoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAweGQ4MDAgKyAoKChjKSAtIDB4MTAwMDApID4+IDEwKTsgICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gMHhkYzAwICsgKCgoYykgLSAweDEwMDAwKSAmIDB4M2ZmKTsgICAgICAgICAgXAotICAgIE5FWFRfT1VUKDIpCi0jZWxzZQotIyBkZWZpbmUgV1JJVEVVQ1M0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKipvdXRidWYgPSAoUHlfVU5JQ09ERSkoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE5FWFRfT1VUKDEpCi0jZW5kaWYKKyNkZWZpbmUgT1VUQ0hBUjIoYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfVUNTNCBfYzEgPSAoYzEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfVUNTNCBfYzIgPSAoYzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDIsIFB5X01BWChfYzEsIGMyKSkgPCAwKSAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9FWENFUFRJT047ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgX2MxKTsgICAgIFwKKyAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcyArIDEsIF9jMik7IFwKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIE9VVEJZVEUxKGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbMF0pID0gKGMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBPVVRCWVRFMihjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzFdKSA9IChjKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgT1VUQllURTMoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVsyXSkgPSAoYyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE9VVEJZVEU0KGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbM10pID0gKGMpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFdSSVRFQllURTEoYzEpICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV1JJVEVCWVRFMihjMSwgYzIpICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBXUklURUJZVEUzKGMxLCBjMiwgYzMpICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRigzKTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFdSSVRFQllURTQoYzEsIGMyLCBjMywgYzQpICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsyXSA9IChjMyk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVszXSA9IChjNCk7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfVFJZTUFQX0VOQyhtLCBhc3NpLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCiAgICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0gICAgICAgICAgXAogICAgICAgICAobSktPmJvdHRvbV0pICE9IE5PQ0hBUikKLSNkZWZpbmUgVFJZTUFQX0VOQ19DT05EKGNoYXJzZXQsIGFzc2ksIHVuaSkgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFRSWU1BUF9FTkMoY2hhcnNldCwgYXNzaSwgdW5pKSAgICAgICAgICAgICAgICAgICAgIFwKICAgICBfVFJZTUFQX0VOQygmY2hhcnNldCMjX2VuY21hcFsodW5pKSA+PiA4XSwgYXNzaSwgKHVuaSkgJiAweGZmKQotI2RlZmluZSBUUllNQVBfRU5DKGNoYXJzZXQsIGFzc2ksIHVuaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiBUUllNQVBfRU5DX0NPTkQoY2hhcnNldCwgYXNzaSwgdW5pKQogCi0jZGVmaW5lIF9UUllNQVBfREVDKG0sIGFzc2ksIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLSAgICAgICAgICBcCi0gICAgICAgIChtKS0+Ym90dG9tXSkgIT0gVU5JSU5WKQotI2RlZmluZSBUUllNQVBfREVDKGNoYXJzZXQsIGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiBfVFJZTUFQX0RFQygmY2hhcnNldCMjX2RlY21hcFtjMV0sIGFzc2ksIGMyKQotCi0jZGVmaW5lIF9UUllNQVBfRU5DX01QTEFORShtLCBhc3NwbGFuZSwgYXNzaGksIGFzc2xvLCB2YWwpICAgICAgXAotICAgICgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgoYXNzcGxhbmUpID0gKG0pLT5tYXBbKCh2YWwpIC0gKG0pLT5ib3R0b20pKjNdKSAhPSAwICYmIFwKLSAgICAgICAgKCgoYXNzaGkpID0gKG0pLT5tYXBbKCh2YWwpIC0gKG0pLT5ib3R0b20pKjMgKyAxXSksIDEpICYmIFwKLSAgICAgICAgKCgoYXNzbG8pID0gKG0pLT5tYXBbKCh2YWwpIC0gKG0pLT5ib3R0b20pKjMgKyAyXSksIDEpKQotI2RlZmluZSBUUllNQVBfRU5DX01QTEFORShjaGFyc2V0LCBhc3NwbGFuZSwgYXNzaGksIGFzc2xvLCB1bmkpIFwKLSAgICBpZiBfVFJZTUFQX0VOQ19NUExBTkUoJmNoYXJzZXQjI19lbmNtYXBbKHVuaSkgPj4gOF0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgKHVuaSkgJiAweGZmKQotI2RlZmluZSBUUllNQVBfREVDX01QTEFORShjaGFyc2V0LCBhc3NpLCBwbGFuZSwgYzEsIGMyKSAgICAgICAgIFwKLSAgICBpZiBfVFJZTUFQX0RFQygmY2hhcnNldCMjX2RlY21hcFtwbGFuZV1bYzFdLCBhc3NpLCBjMikKLQotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0jZGVmaW5lIERFQ09ERV9TVVJST0dBVEUoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjID4+IDEwID09IDB4ZDgwMCA+PiAxMCkgeyAvKiBoaWdoIHN1cnJvZ2F0ZSAqLyAgICAgICAgIFwKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChJTjIgPj4gMTAgPT0gMHhkYzAwID4+IDEwKSB7IC8qIGxvdyBzdXJyb2dhdGUgKi8gXAotICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKHVjczRfdCkoYyAtIDB4ZDgwMCkgPDwgMTApICsgXAotICAgICAgICAgICAgKCh1Y3M0X3QpKElOMikgLSAweGRjMDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotI2RlZmluZSBHRVRfSU5TSVpFKGMpICAgKChjKSA+IDB4ZmZmZiA/IDIgOiAxKQotI2Vsc2UKLSNkZWZpbmUgREVDT0RFX1NVUlJPR0FURShjKSB7O30KLSNkZWZpbmUgR0VUX0lOU0laRShjKSAgIDEKLSNlbmRpZgorI2RlZmluZSBfVFJZTUFQX0RFQyhtLCBhc3NpLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChtKS0+bWFwICE9IE5VTEwgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoYXNzaSkgPSAobSktPm1hcFsodmFsKSAtIChtKS0+Ym90dG9tXSkgIT0gVU5JSU5WKQorI2RlZmluZSBUUllNQVBfREVDKGNoYXJzZXQsIGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbYzFdLCBhc3NpLCBjMikKIAogI2RlZmluZSBCRUdJTl9NQVBQSU5HU19MSVNUIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGJjc19tYXAgX21hcHBpbmdfbGlzdFtdID0gewogI2RlZmluZSBNQVBQSU5HX0VOQ09OTFkoZW5jKSB7I2VuYywgKHZvaWQqKWVuYyMjX2VuY21hcCwgTlVMTH0sCkBAIC0zMjQsNyArMzIzLDcgQEAKICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGFpcl9lbmNvZGVtYXAgKmhheXN0YWNrLCBpbnQgaGF5c3RhY2tzaXplKQogewogICAgIGludCBwb3MsIG1pbiwgbWF4OwotICAgIHVjczRfdCB2YWx1ZSA9IGJvZHkgPDwgMTYgfCBtb2RpZmllcjsKKyAgICBQeV9VQ1M0IHZhbHVlID0gYm9keSA8PCAxNiB8IG1vZGlmaWVyOwogCiAgICAgbWluID0gMDsKICAgICBtYXggPSBoYXlzdGFja3NpemU7CkBAIC0zNTksNyArMzU4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqbywgKm1vZDsKIAotICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgoY2hhciAqKW1vZG5hbWUpOworICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZShtb2RuYW1lKTsKICAgICBpZiAobW9kID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaCBiL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmgKaW5kZXggNDIyN2ZiMi4uYTVkNWE3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oCkBAIC0yLDcgKzIsNyBAQAogICogc3RhbmRhcmRzLiAqLwogCiAjaWZuZGVmIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRAotI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQgMQorIyAgZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRCAxCiAjZW5kaWYKIAogI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChhc3NpLCBjKSAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTEsMTcgKzExLDIwIEBACiAgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDUyNUQgfHwgKGMpID09IDB4NTQxRSB8fCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDU2NTMgfHwgKGMpID09IDB4NTlGOCB8fCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDVDNUIgfHwgKGMpID09IDB4NUU3NyB8fCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDc2MjYgfHwgKGMpID09IDB4N0U2QikpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDc2MjYgfHwgKGMpID09IDB4N0U2QikpIHsgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQ7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHg5QjFEKSAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHg5QjFEKSB7ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChhc3NpKSA9IDB4ODAwMCB8IDB4N2QzYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGFzc2ksIGMpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4MjBCOUYpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQ7CisgICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4MjBCOUYpIHsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQ7ICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAjaWZuZGVmIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRAotI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQgMgorIyAgZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRCAyCiAjZW5kaWYKIAogI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMShhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgXApAQCAtMzUsOSArMzgsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdCKSB8fCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdDKSB8fCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdEKSB8fCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdFKSkpICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdFKSkpIHsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIoYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgIFwKLSAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gMHg5QjFEOworI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih3cml0ZXIsIGMxLCBjMikgICAgICAgICAgICAgXAorICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjMSkgPT0gMHg3RCAmJiAoYzIpID09IDB4M0IpIHsgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4OUIxRCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMl9DSEFSKGFzc2ksIGMxLCBjMikgICAgICAgICAgXAorICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjMSkgPT0gMHg3RCAmJiAoYzIpID09IDB4M0IpIHsgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDlCMUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaCBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmgKaW5kZXggYTZkY2ViZi4uMWY4YzI5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oCkBAIC00MDQ5LDcgKzQwNDksNyBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX2diMTgwMzBfdG9fdW5pYm1wX3JhbmdlcyB7Ci0gICAgUHlfVU5JQ09ERSAgIGZpcnN0LCBsYXN0OworICAgIFB5X1VDUzQgICBmaXJzdCwgbGFzdDsKICAgICBEQkNIQVIgICAgICAgYmFzZTsKIH0gZ2IxODAzMF90b191bmlibXBfcmFuZ2VzW10gPSB7CiB7MTI4LDE2MywwfSx7MTY1LDE2NiwzNn0sezE2OSwxNzUsMzh9LHsxNzgsMTgyLDQ1fSx7MTg0LDIxNCw1MH0sezIxNiwyMjMsODF9LHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaCBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaAppbmRleCBlZGE4ZTllLi43MjllNGJjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oCkBAIC0zLDcgKzMsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB3aWRlZGJjc19pbmRleCAqamlzeDAyMTNfcGFpcl9kZWNtYXA7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHBhaXJfZW5jb2RlbWFwICpqaXN4MDIxM19wYWlyX2VuY21hcDsKICNlbHNlCi1zdGF0aWMgY29uc3QgdWNzNF90IF9famlzeDAyMTNfcGFpcl9kZWNtYXBbNDldID0geworc3RhdGljIGNvbnN0IFB5X1VDUzQgX19qaXN4MDIxM19wYWlyX2RlY21hcFs0OV0gPSB7CiA4MTAyMzQwMTAsODEwMzY1MDgyLDgxMDQ5NjE1NCw4MTA2MjcyMjYsODEwNzU4Mjk4LDgxNjUyNTQ2Niw4MTY2NTY1MzgsCiA4MTY3ODc2MTAsODE2OTE4NjgyLDgxNzA0OTc1NCw4MTc1NzQwNDIsODE4MTYzODY2LDgxODQyNjAxMCw4MzgyODM0MTgsCiAxNTA3NDA0OCxVLFUsVSwzOTA2MDIyNCwzOTA2MDIyNSw0MjczMDI0MCw0MjczMDI0MSwzOTM4NzkwNCwzOTM4NzkwNSwzOTQ1MzQ0MCwKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCmluZGV4IGMwMzJjZGIuLjA4N2FlOWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwpAQCAtMTAsMTUgKzEwLDE2IEBACiAjaW5jbHVkZSAibXVsdGlieXRlY29kZWMuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IFB5X1VOSUNPREUgICAgKmluYnVmLCAqaW5idWZfdG9wLCAqaW5idWZfZW5kOworICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmlub2JqOworICAgIFB5X3NzaXplX3QgICAgICAgICAgaW5wb3MsIGlubGVuOwogICAgIHVuc2lnbmVkIGNoYXIgICAgICAgKm91dGJ1ZiwgKm91dGJ1Zl9lbmQ7CiAgICAgUHlPYmplY3QgICAgICAgICAgICAqZXhjb2JqLCAqb3V0b2JqOwogfSBNdWx0aWJ5dGVFbmNvZGVCdWZmZXI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiwgKmluYnVmX3RvcCwgKmluYnVmX2VuZDsKLSAgICBQeV9VTklDT0RFICAgICAgICAgICpvdXRidWYsICpvdXRidWZfZW5kOwotICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmV4Y29iaiwgKm91dG9iajsKKyAgICBQeU9iamVjdCAgICAgICAgICAgICpleGNvYmo7CisgICAgX1B5VW5pY29kZVdyaXRlciAgICB3cml0ZXI7CiB9IE11bHRpYnl0ZURlY29kZUJ1ZmZlcjsKIAogUHlEb2NfU1RSVkFSKE11bHRpYnl0ZUNvZGVjX0VuY29kZV9fZG9jX18sCkBAIC00NSwxMSArNDYsMTMgQEAKIHN0YXRpYyBjaGFyICpzdHJlYW1rd2FyZ2xpc3RbXSA9IHsic3RyZWFtIiwgImVycm9ycyIsIE5VTEx9OwogCiBzdGF0aWMgUHlPYmplY3QgKm11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqLAotICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICosIGNvbnN0IFB5X1VOSUNPREUgKiosIFB5X3NzaXplX3QsCisgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKiwgUHlPYmplY3QgKiwgUHlfc3NpemVfdCAqLAogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIGludCk7CiAKICNkZWZpbmUgTUJFTkNfUkVTRVQgICAgIE1CRU5DX01BWDw8MSAvKiByZXNldCBhZnRlciBhbiBlbmNvZGluZyBzZXNzaW9uICovCiAKK19QeV9JREVOVElGSUVSKHdyaXRlKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIG1ha2VfdHVwbGUoUHlPYmplY3QgKm9iamVjdCwgUHlfc3NpemVfdCBsZW4pCiB7CkBAIC0xOTcsMjkgKzIwMCw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKLXN0YXRpYyBpbnQKLWV4cGFuZF9kZWNvZGVidWZmZXIoTXVsdGlieXRlRGVjb2RlQnVmZmVyICpidWYsIFB5X3NzaXplX3QgZXNpemUpCi17Ci0gICAgUHlfc3NpemVfdCBvcmdwb3MsIG9yZ3NpemU7Ci0KLSAgICBvcmdwb3MgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWYgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYtPm91dG9iaikpOwotICAgIG9yZ3NpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLT5vdXRvYmopOwotICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZidWYtPm91dG9iaiwgb3Jnc2l6ZSArICgKLSAgICAgICAgZXNpemUgPCAob3Jnc2l6ZSA+PiAxKSA/IChvcmdzaXplID4+IDEpIHwgMSA6IGVzaXplKSkgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGJ1Zi0+b3V0YnVmID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLT5vdXRvYmopICsgb3JncG9zOwotICAgIGJ1Zi0+b3V0YnVmX2VuZCA9IFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi0+b3V0b2JqKQotICAgICAgICAgICAgICAgICAgICAgICsgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLQotICAgIHJldHVybiAwOwotfQotI2RlZmluZSBSRVFVSVJFX0RFQ09ERUJVRkZFUihidWYsIHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgocykgPCAxIHx8IChidWYpLT5vdXRidWYgKyAocykgPiAoYnVmKS0+b3V0YnVmX2VuZCkgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZXhwYW5kX2RlY29kZWJ1ZmZlcihidWYsIHMpID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCiAKIC8qKgogICogTXVsdGlieXRlQ29kZWMgb2JqZWN0CkBAIC0yNDcsNyArMjI3LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7Ci0gICAgICAgICAgICBlc2l6ZSA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWYpOworICAgICAgICAgICAgZXNpemUgPSAoUHlfc3NpemVfdClidWYtPmlucG9zOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTUJFUlJfSU5URVJOQUw6CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMjYxLDE0ICsyNDEsMjQgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSByZXBsY2hhciA9ICc/JywgKmluYnVmID0gJnJlcGxjaGFyOworICAgICAgICBQeU9iamVjdCAqcmVwbGNoYXI7CiAgICAgICAgIFB5X3NzaXplX3QgcjsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CiAKKyAgICAgICAgcmVwbGNoYXIgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoJz8nKTsKKyAgICAgICAgaWYgKHJlcGxjaGFyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcGxjaGFyKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcGxjaGFyKTsKKworICAgICAgICBpbnBvcyA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYtPm91dGJ1Zl9lbmQgLSBidWYtPm91dGJ1Zik7CiAKLSAgICAgICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwotICAgICAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZpbmJ1ZiwgMSwKKyAgICAgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCwgZGF0YSwgJmlucG9zLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi0+b3V0YnVmLCBvdXRsZWZ0LCAwKTsKICAgICAgICAgICAgIGlmIChyID09IE1CRVJSX1RPT1NNQUxMKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCAtMSk7CkBAIC0yNzgsMjUgKzI2OCwyNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgUHlfREVDUkVGKHJlcGxjaGFyKTsKKwogICAgICAgICBpZiAociAhPSAwKSB7CiAgICAgICAgICAgICBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIDEpOwogICAgICAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSAnPyc7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKKyAgICAgICAgYnVmLT5pbnBvcyArPSBlc2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgc3RhcnQgPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1ZiAtIGJ1Zi0+aW5idWZfdG9wKTsKKyAgICBzdGFydCA9IChQeV9zc2l6ZV90KWJ1Zi0+aW5wb3M7CiAgICAgZW5kID0gc3RhcnQgKyBlc2l6ZTsKIAogICAgIC8qIHVzZSBjYWNoZWQgZXhjZXB0aW9uIG9iamVjdCBpZiBhdmFpbGFibGUgKi8KICAgICBpZiAoYnVmLT5leGNvYmogPT0gTlVMTCkgewotICAgICAgICBidWYtPmV4Y29iaiA9IFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZShjb2RlYy0+ZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYtPmluYnVmX3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zl90b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCByZWFzb24pOworICAgICAgICBidWYtPmV4Y29iaiA9ICBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPbm5zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjLT5lbmNvZGluZywgYnVmLT5pbm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsIHJlYXNvbik7CiAgICAgICAgIGlmIChidWYtPmV4Y29iaiA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQpAQCAtMzI1LDEwICszMTcsMTAgQEAKICAgICB9CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRvYmopKSB7Ci0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKnVyYXcgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh0b2JqKTsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKIAotICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCAmdXJhdywKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0b2JqKSwgRVJST1JfU1RSSUNULAorICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCB0b2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgJmlucG9zLCBFUlJPUl9TVFJJQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICBNQkVOQ19GTFVTSCk7CiAgICAgICAgIGlmIChyZXRzdHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtMzQ3LDE1ICszMzksMTUgQEAKIAogICAgIG5ld3BvcyA9IFB5TG9uZ19Bc1NzaXplX3QoUHlUdXBsZV9HRVRfSVRFTShyZXRvYmosIDEpKTsKICAgICBpZiAobmV3cG9zIDwgMCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgbmV3cG9zICs9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWZfdG9wKTsKLSAgICBpZiAobmV3cG9zIDwgMCB8fCBidWYtPmluYnVmX3RvcCArIG5ld3BvcyA+IGJ1Zi0+aW5idWZfZW5kKSB7CisgICAgICAgIG5ld3BvcyArPSAoUHlfc3NpemVfdClidWYtPmlubGVuOworICAgIGlmIChuZXdwb3MgPCAwIHx8IG5ld3BvcyA+IGJ1Zi0+aW5sZW4pIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gJXpkIGZyb20gZXJyb3IgaGFuZGxlciBvdXQgb2YgYm91bmRzIiwKICAgICAgICAgICAgICAgICAgICAgIG5ld3Bvcyk7CiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KLSAgICBidWYtPmluYnVmID0gYnVmLT5pbmJ1Zl90b3AgKyBuZXdwb3M7CisgICAgYnVmLT5pbnBvcyA9IG5ld3BvczsKIAogICAgIFB5X0RFQ1JFRihyZXRvYmopOwogICAgIFB5X0RFQ1JFRihyZXRzdHIpOwpAQCAtMzc0LDcgKzM2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXJyb3JzLCBQeV9zc2l6ZV90IGUpCiB7CiAgICAgUHlPYmplY3QgKnJldG9iaiA9IE5VTEwsICpyZXR1bmkgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgcmV0dW5pc2l6ZSwgbmV3cG9zOworICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIGNvbnN0IGNoYXIgKnJlYXNvbjsKICAgICBQeV9zc2l6ZV90IGVzaXplLCBzdGFydCwgZW5kOwogCkBAIC0zODUsNyArMzc3LDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgc3dpdGNoIChlKSB7CiAgICAgICAgIGNhc2UgTUJFUlJfVE9PU01BTEw6Ci0gICAgICAgICAgICBSRVFVSVJFX0RFQ09ERUJVRkZFUihidWYsIC0xKTsKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7CkBAIC0zOTUsNiArMzg2LDggQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGNvZGVjIGVycm9yIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNhc2UgTUJFUlJfRVhDRVBUSU9OOgorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBydW50aW1lIGVycm9yIik7CkBAIC00MDMsOCArMzk2LDkgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCAxKTsKLSAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZidWYtPndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKICAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKQEAgLTQ0NywxNSArNDQxLDggQEAKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogCi0gICAgaWYgKFB5VW5pY29kZV9Bc1VuaWNvZGUocmV0dW5pKSA9PSBOVUxMKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZidWYtPndyaXRlciwgcmV0dW5pKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIHJldHVuaXNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUocmV0dW5pKTsKLSAgICBpZiAocmV0dW5pc2l6ZSA+IDApIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCByZXR1bmlzaXplKTsKLSAgICAgICAgbWVtY3B5KChjaGFyICopYnVmLT5vdXRidWYsIFB5VW5pY29kZV9BU19VTklDT0RFKHJldHVuaSksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1bmlzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKLSAgICAgICAgYnVmLT5vdXRidWYgKz0gcmV0dW5pc2l6ZTsKLSAgICB9CiAKICAgICBuZXdwb3MgPSBQeUxvbmdfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0ocmV0b2JqLCAxKSk7CiAgICAgaWYgKG5ld3BvcyA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpCkBAIC00NzksMTkgKzQ2NiwyOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKipkYXRhLCBQeV9zc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRleHQsIFB5X3NzaXplX3QgKmlucG9zX3QsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVycm9ycywgaW50IGZsYWdzKQogewogICAgIE11bHRpYnl0ZUVuY29kZUJ1ZmZlciBidWY7CiAgICAgUHlfc3NpemVfdCBmaW5hbHNpemUsIHIgPSAwOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0ZXh0KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh0ZXh0KTsKIAogICAgIGlmIChkYXRhbGVuID09IDAgJiYgIShmbGFncyAmIE1CRU5DX1JFU0VUKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYub3V0b2JqID0gTlVMTDsKLSAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKmRhdGE7Ci0gICAgYnVmLmluYnVmX2VuZCA9IGJ1Zi5pbmJ1Zl90b3AgKyBkYXRhbGVuOworICAgIGJ1Zi5pbm9iaiA9IHRleHQ7ICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgYnVmLmlucG9zID0gMDsKKyAgICBidWYuaW5sZW4gPSBkYXRhbGVuOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChidWYuaW5vYmopOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShidWYuaW5vYmopOwogCiAgICAgaWYgKGRhdGFsZW4gPiAoUFlfU1NJWkVfVF9NQVggLSAxNikgLyAyKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC01MDQsMTQgKzUwMSwxNCBAQAogICAgIGJ1Zi5vdXRidWYgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKGJ1Zi5vdXRvYmopOwogICAgIGJ1Zi5vdXRidWZfZW5kID0gYnVmLm91dGJ1ZiArIFB5Qnl0ZXNfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKLSAgICB3aGlsZSAoYnVmLmluYnVmIDwgYnVmLmluYnVmX2VuZCkgewotICAgICAgICBQeV9zc2l6ZV90IGlubGVmdCwgb3V0bGVmdDsKLQorICAgIHdoaWxlIChidWYuaW5wb3MgPCBidWYuaW5sZW4pIHsKICAgICAgICAgLyogd2UgZG9uJ3QgcmV1c2UgaW5sZWZ0IGFuZCBvdXRsZWZ0IGhlcmUuCiAgICAgICAgICAqIGVycm9yIGNhbGxiYWNrcyBjYW4gcmVsb2NhdGUgdGhlIGN1cnNvciBhbnl3aGVyZSBvbiBidWZmZXIqLwotICAgICAgICBpbmxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLmluYnVmX2VuZCAtIGJ1Zi5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1Zl9lbmQgLSBidWYub3V0YnVmKTsKLSAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZidWYuaW5idWYsIGlubGVmdCwKKyAgICAgICAgUHlfc3NpemVfdCBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWZfZW5kIC0gYnVmLm91dGJ1Zik7CisKKyAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5wb3MsIGJ1Zi5pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5vdXRidWYsIG91dGxlZnQsIGZsYWdzKTsKICAgICAgICAgaWYgKChyID09IDApIHx8IChyID09IE1CRVJSX1RPT0ZFVyAmJiAhKGZsYWdzICYgTUJFTkNfRkxVU0gpKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQyLDcgKzUzOSw4IEBACiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAotICAgICpkYXRhID0gYnVmLmluYnVmOworICAgIGlmIChpbnBvc190KQorICAgICAgICAqaW5wb3NfdCA9IGJ1Zi5pbnBvczsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwogICAgIHJldHVybiBidWYub3V0b2JqOwogCkBAIC01NTcsNyArNTU1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKLSAgICBQeV9VTklDT0RFICpkYXRhOwogICAgIFB5T2JqZWN0ICplcnJvcmNiLCAqciwgKmFyZywgKnVjdnQ7CiAgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW47CkBAIC01ODAsMTEgKzU3NywxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZGF0YSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKGFyZywgJmRhdGFsZW4pOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGFyZykgPCAwKSB7CiAgICAgICAgIFB5X1hERUNSRUYodWN2dCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYXJnKTsKIAogICAgIGVycm9yY2IgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChlcnJvcmNiID09IE5VTEwpIHsKQEAgLTU5Niw3ICs1OTMsNyBAQAogICAgICAgICBzZWxmLT5jb2RlYy0+ZW5jaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoc2VsZi0+Y29kZWMsICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VOSUNPREUgKiopJmRhdGEsIGRhdGFsZW4sIGVycm9yY2IsCisgICAgICAgICAgICAgICAgICAgIGFyZywgTlVMTCwgZXJyb3JjYiwKICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCk7CiAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC02MTcsMTAgKzYxNCwxMCBAQAogewogICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlIHN0YXRlOwogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7Ci0gICAgUHlPYmplY3QgKmVycm9yY2I7CisgICAgUHlPYmplY3QgKmVycm9yY2IsICpyZXM7CiAgICAgUHlfYnVmZmVyIHBkYXRhOwogICAgIGNvbnN0IGNoYXIgKmRhdGEsICplcnJvcnMgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgZGF0YWxlbiwgZmluYWxzaXplOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfHo6ZGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY2t3YXJnbGlzdCwgJnBkYXRhLCAmZXJyb3JzKSkKQEAgLTY0MCwyOSArNjM3LDIzIEBACiAgICAgICAgIHJldHVybiBtYWtlX3R1cGxlKFB5VW5pY29kZV9OZXcoMCwgMCksIDApOwogICAgIH0KIAorICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLndyaXRlci5taW5fbGVuZ3RoID0gZGF0YWxlbjsKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi5pbmJ1Zl9lbmQgPSBidWYuaW5idWZfdG9wICsgZGF0YWxlbjsKLSAgICBidWYub3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIGRhdGFsZW4pOwotICAgIGlmIChidWYub3V0b2JqID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIGJ1Zi5vdXRidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYub3V0b2JqKTsKLSAgICBpZiAoYnVmLm91dGJ1ZiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBidWYub3V0YnVmX2VuZCA9IGJ1Zi5vdXRidWYgKyBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKICAgICBpZiAoc2VsZi0+Y29kZWMtPmRlY2luaXQgIT0gTlVMTCAmJgogICAgICAgICBzZWxmLT5jb2RlYy0+ZGVjaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgd2hpbGUgKGJ1Zi5pbmJ1ZiA8IGJ1Zi5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQsIHI7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCByOwogCiAgICAgICAgIGlubGVmdCA9IChQeV9zc2l6ZV90KShidWYuaW5idWZfZW5kIC0gYnVmLmluYnVmKTsKLSAgICAgICAgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmX2VuZCAtIGJ1Zi5vdXRidWYpOwogCiAgICAgICAgIHIgPSBzZWxmLT5jb2RlYy0+ZGVjb2RlKCZzdGF0ZSwgc2VsZi0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5idWYsIGlubGVmdCwgJmJ1Zi5vdXRidWYsIG91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLndyaXRlcik7CiAgICAgICAgIGlmIChyID09IDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZWxzZSBpZiAobXVsdGlieXRlY29kZWNfZGVjZXJyb3Ioc2VsZi0+Y29kZWMsICZzdGF0ZSwKQEAgLTY3MCwyMyArNjYxLDIwIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAKLSAgICBmaW5hbHNpemUgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1ZiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKLQotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwotICAgIHJldHVybiBtYWtlX3R1cGxlKGJ1Zi5vdXRvYmosIGRhdGFsZW4pOworICAgIHJldHVybiBtYWtlX3R1cGxlKHJlcywgZGF0YWxlbik7CiAKIGVycm9yZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogCiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC03NTIsOSArNzQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmlzdHIsIGludCBmaW5hbCkKIHsKICAgICBQeU9iamVjdCAqdWN2dCwgKnIgPSBOVUxMOwotICAgIFB5X1VOSUNPREUgKmluYnVmLCAqaW5idWZfZW5kLCAqaW5idWZfdG1wID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGRhdGFsZW4sIG9yaWdwZW5kaW5nOwotICAgIHdjaGFyX3QgKmRhdGE7CisgICAgUHlPYmplY3QgKmluYnVmID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGlucG9zLCBkYXRhbGVuOworICAgIFB5T2JqZWN0ICpvcmlncGVuZGluZyA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHVuaXN0cikpCiAgICAgICAgIHVjdnQgPSBOVUxMOwpAQCAtNzcwLDY5ICs3NTgsNjYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh1bmlzdHIsICZkYXRhbGVuKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBvcmlncGVuZGluZyA9IGN0eC0+cGVuZGluZ3NpemU7CisgICAgaWYgKGN0eC0+cGVuZGluZykgeworICAgICAgICBQeU9iamVjdCAqaW5idWZfdG1wOwogCi0gICAgaWYgKG9yaWdwZW5kaW5nID4gMCkgewotICAgICAgICBpZiAoZGF0YWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gY3R4LT5wZW5kaW5nc2l6ZSkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIC8qIGluYnVmX3RtcCA9PSBOVUxMICovCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgfQotICAgICAgICBpbmJ1Zl90bXAgPSBQeU1lbV9OZXcoUHlfVU5JQ09ERSwgZGF0YWxlbiArIGN0eC0+cGVuZGluZ3NpemUpOworICAgICAgICBQeV9JTkNSRUYoY3R4LT5wZW5kaW5nKTsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBjdHgtPnBlbmRpbmc7CisKKyAgICAgICAgUHlfSU5DUkVGKGN0eC0+cGVuZGluZyk7CisgICAgICAgIGluYnVmX3RtcCA9IGN0eC0+cGVuZGluZzsKKyAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmaW5idWZfdG1wLCB1bmlzdHIpOwogICAgICAgICBpZiAoaW5idWZfdG1wID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgbWVtY3B5KGluYnVmX3RtcCwgY3R4LT5wZW5kaW5nLAotICAgICAgICAgICAgUHlfVU5JQ09ERV9TSVpFICogY3R4LT5wZW5kaW5nc2l6ZSk7Ci0gICAgICAgIG1lbWNweShpbmJ1Zl90bXAgKyBjdHgtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKSwKLSAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIGRhdGFsZW4pOwotICAgICAgICBkYXRhbGVuICs9IGN0eC0+cGVuZGluZ3NpemU7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAwOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOwogICAgICAgICBpbmJ1ZiA9IGluYnVmX3RtcDsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICBpbmJ1ZiA9IChQeV9VTklDT0RFICopUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogCi0gICAgaW5idWZfZW5kID0gaW5idWYgKyBkYXRhbGVuOworICAgICAgICBQeV9JTkNSRUYodW5pc3RyKTsKKyAgICAgICAgaW5idWYgPSB1bmlzdHI7CisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaW5idWYpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgaW5wb3MgPSAwOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbmJ1Zik7CiAKICAgICByID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAoY29uc3QgUHlfVU5JQ09ERSAqKikmaW5idWYsIGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+ZXJyb3JzLCBmaW5hbCA/IE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9ycywgZmluYWwgPyBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUIDogMCk7CiAgICAgaWYgKHIgPT0gTlVMTCkgewogICAgICAgICAvKiByZWNvdmVyIHRoZSBvcmlnaW5hbCBwZW5kaW5nIGJ1ZmZlciAqLwotICAgICAgICBpZiAob3JpZ3BlbmRpbmcgPiAwKQotICAgICAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWZfdG1wLAotICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIG9yaWdwZW5kaW5nKTsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IG9yaWdwZW5kaW5nOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOworICAgICAgICBjdHgtPnBlbmRpbmcgPSBvcmlncGVuZGluZzsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CisgICAgUHlfWERFQ1JFRihvcmlncGVuZGluZyk7CiAKLSAgICBpZiAoaW5idWYgPCBpbmJ1Zl9lbmQpIHsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IChQeV9zc2l6ZV90KShpbmJ1Zl9lbmQgLSBpbmJ1Zik7Ci0gICAgICAgIGlmIChjdHgtPnBlbmRpbmdzaXplID4gTUFYRU5DUEVORElORykgeworICAgIGlmIChpbnBvcyA8IGRhdGFsZW4pIHsKKyAgICAgICAgaWYgKGRhdGFsZW4gLSBpbnBvcyA+IE1BWEVOQ1BFTkRJTkcpIHsKICAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLwotICAgICAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IDA7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZW5kaW5nIGJ1ZmZlciBvdmVyZmxvdyIpOwogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWYsCi0gICAgICAgICAgICBjdHgtPnBlbmRpbmdzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKKyAgICAgICAgY3R4LT5wZW5kaW5nID0gUHlVbmljb2RlX1N1YnN0cmluZyhpbmJ1ZiwgaW5wb3MsIGRhdGFsZW4pOworICAgICAgICBpZiAoY3R4LT5wZW5kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLworICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5idWZfdG1wICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0RlbChpbmJ1Zl90bXApOworICAgIFB5X0RFQ1JFRihpbmJ1Zik7CiAgICAgUHlfWERFQ1JFRih1Y3Z0KTsKICAgICByZXR1cm4gcjsKIAogZXJyb3JleGl0OgotICAgIGlmIChpbmJ1Zl90bXAgIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRGVsKGluYnVmX3RtcCk7CiAgICAgUHlfWERFQ1JFRihyKTsKICAgICBQeV9YREVDUkVGKHVjdnQpOworICAgIFB5X1hERUNSRUYob3JpZ3BlbmRpbmcpOworICAgIFB5X1hERUNSRUYoaW5idWYpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC04NTksMTcgKzg0NCw3IEBACiB7CiAgICAgYnVmLT5pbmJ1ZiA9IGJ1Zi0+aW5idWZfdG9wID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi0+aW5idWZfZW5kID0gYnVmLT5pbmJ1Zl90b3AgKyBzaXplOwotICAgIGlmIChidWYtPm91dG9iaiA9PSBOVUxMKSB7IC8qIG9ubHkgaWYgb3V0b2JqIGlzIG5vdCBhbGxvY2F0ZWQgeWV0ICovCi0gICAgICAgIGJ1Zi0+b3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIHNpemUpOwotICAgICAgICBpZiAoYnVmLT5vdXRvYmogPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgYnVmLT5vdXRidWYgPSBQeVVuaWNvZGVfQXNVbmljb2RlKGJ1Zi0+b3V0b2JqKTsKLSAgICAgICAgaWYgKGJ1Zi0+b3V0YnVmID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmX2VuZCA9IGJ1Zi0+b3V0YnVmICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLSAgICB9Ci0KKyAgICBidWYtPndyaXRlci5taW5fbGVuZ3RoICs9IHNpemU7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg3OCwxNCArODUzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciAqYnVmKQogewogICAgIHdoaWxlIChidWYtPmluYnVmIDwgYnVmLT5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQ7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0OwogICAgICAgICBQeV9zc2l6ZV90IHI7CiAKICAgICAgICAgaW5sZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwogCiAgICAgICAgIHIgPSBjdHgtPmNvZGVjLT5kZWNvZGUoJmN0eC0+c3RhdGUsIGN0eC0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICZidWYtPmluYnVmLCBpbmxlZnQsICZidWYtPm91dGJ1Ziwgb3V0bGVmdCk7CisgICAgICAgICAgICAmYnVmLT5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLT53cml0ZXIpOwogICAgICAgICBpZiAociA9PSAwIHx8IHIgPT0gTUJFUlJfVE9PRkVXKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVsc2UgaWYgKG11bHRpYnl0ZWNvZGVjX2RlY2Vycm9yKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLApAQCAtOTI3LDcgKzkwMSw3IEBACiAgICAgICAgIGlmIChyICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPnBlbmRpbmcpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC05NjMsNyArOTM3LDcgQEAKICAgICB9CiAKICAgICBzZWxmLT5jb2RlYyA9ICgoTXVsdGlieXRlQ29kZWNPYmplY3QgKiljb2RlYyktPmNvZGVjOwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBzZWxmLT5wZW5kaW5nID0gTlVMTDsKICAgICBzZWxmLT5lcnJvcnMgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC0xMDU4LDggKzEwMzIsOSBAQAogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7CiAgICAgY2hhciAqZGF0YSwgKndkYXRhID0gTlVMTDsKICAgICBQeV9idWZmZXIgcGRhdGE7Ci0gICAgUHlfc3NpemVfdCB3c2l6ZSwgZmluYWxzaXplID0gMCwgc2l6ZSwgb3JpZ3BlbmRpbmc7CisgICAgUHlfc3NpemVfdCB3c2l6ZSwgc2l6ZSwgb3JpZ3BlbmRpbmc7CiAgICAgaW50IGZpbmFsID0gMDsKKyAgICBQeU9iamVjdCAqcmVzOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAieSp8aTpkZWNvZGUiLAogICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbGt3YXJnbGlzdCwgJnBkYXRhLCAmZmluYWwpKQpAQCAtMTA2Nyw3ICsxMDQyLDggQEAKICAgICBkYXRhID0gcGRhdGEuYnVmOwogICAgIHNpemUgPSBwZGF0YS5sZW47CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBvcmlncGVuZGluZyA9IHNlbGYtPnBlbmRpbmdzaXplOwogCiAgICAgaWYgKHNlbGYtPnBlbmRpbmdzaXplID09IDApIHsKQEAgLTEwODEsOCArMTA1NywxMCBAQAogICAgICAgICB9CiAgICAgICAgIHdzaXplID0gc2l6ZSArIHNlbGYtPnBlbmRpbmdzaXplOwogICAgICAgICB3ZGF0YSA9IFB5TWVtX01hbGxvYyh3c2l6ZSk7Ci0gICAgICAgIGlmICh3ZGF0YSA9PSBOVUxMKQorICAgICAgICBpZiAod2RhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICB9CiAgICAgICAgIG1lbWNweSh3ZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwogICAgICAgICBtZW1jcHkod2RhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwgZGF0YSwgc2l6ZSk7CiAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKQEAgLTExMDksMjMgKzEwODcsMjIgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KIAotICAgIGZpbmFsc2l6ZSA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmIC0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIGlmICh3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gTlVMTCAmJiB3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMjY1LDEzICsxMjQyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QsIFB5X3NzaXplX3Qgc2l6ZWhpbnQpCiB7CiAgICAgTXVsdGlieXRlRGVjb2RlQnVmZmVyIGJ1ZjsKLSAgICBQeU9iamVjdCAqY3JlczsKLSAgICBQeV9zc2l6ZV90IHJzaXplLCBmaW5hbHNpemUgPSAwOworICAgIFB5T2JqZWN0ICpjcmVzLCAqcmVzOworICAgIFB5X3NzaXplX3QgcnNpemU7CiAKICAgICBpZiAoc2l6ZWhpbnQgPT0gMCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9OZXcoMCwgMCk7CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBjcmVzID0gTlVMTDsKIAogICAgIGZvciAoOzspIHsKQEAgLTEzMDMsMTkgKzEyODEsMTkgQEAKICAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpID4gUFlfU1NJWkVfVF9NQVggLSBzZWxmLT5wZW5kaW5nc2l6ZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpICsgc2VsZi0+cGVuZGluZ3NpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcnNpemUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgICAgICAgICAgICAgIGN0cmRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyhjdHIpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGNyZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7Ci0gICAgICAgICAgICAgICAgICAgIGNyZXMgPSBjdHI7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKSArIHNlbGYtPnBlbmRpbmdzaXplOworICAgICAgICAgICAgY3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByc2l6ZSk7CisgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgICAgICBjdHJkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoY3RyKTsKKyAgICAgICAgICAgIG1lbWNweShjdHJkYXRhLCBzZWxmLT5wZW5kaW5nLCBzZWxmLT5wZW5kaW5nc2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAorICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjcmVzKSwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShjcmVzKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CisgICAgICAgICAgICBjcmVzID0gY3RyOworICAgICAgICAgICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpOwpAQCAtMTM0MCwyOSArMTMxOCwyNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWxzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWYgLQotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwogICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CiAgICAgICAgIGNyZXMgPSBOVUxMOwogCi0gICAgICAgIGlmIChzaXplaGludCA8IDAgfHwgZmluYWxzaXplICE9IDAgfHwgcnNpemUgPT0gMCkKKyAgICAgICAgaWYgKHNpemVoaW50IDwgMCB8fCBidWYud3JpdGVyLnBvcyAhPSAwIHx8IHJzaXplID09IDApCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBzaXplaGludCA9IDE7IC8qIHJlYWQgMSBtb3JlIGJ5dGUgYW5kIHJldHJ5ICovCiAgICAgfQogCi0gICAgaWYgKGZpbmFsc2l6ZSAhPSBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaikpCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZidWYub3V0b2JqLCBmaW5hbHNpemUpID09IC0xKQotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJmJ1Zi53cml0ZXIpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKICAgICBQeV9YREVDUkVGKGNyZXMpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5X1hERUNSRUYoY3Jlcyk7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKLSAgICBQeV9YREVDUkVGKGJ1Zi5vdXRvYmopOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmYnVmLndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE1OTUsNyArMTU3MSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnVuaXN0cikKIHsKICAgICBQeU9iamVjdCAqc3RyLCAqd3I7Ci0gICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogCiAgICAgc3RyID0gZW5jb2Rlcl9lbmNvZGVfc3RhdGVmdWwoU1RBVEVGVUxfRUNUWChzZWxmKSwgdW5pc3RyLCAwKTsKICAgICBpZiAoc3RyID09IE5VTEwpCkBAIC0xNjQ5LDI1ICsxNjI0LDIyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogbWJzdHJlYW13cml0ZXJfcmVzZXQoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmKQogewotICAgIGNvbnN0IFB5X1VOSUNPREUgKnBlbmRpbmc7CiAgICAgUHlPYmplY3QgKnB3cnQ7CiAKLSAgICBwZW5kaW5nID0gc2VsZi0+cGVuZGluZzsKICAgICBwd3J0ID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKHNlbGYtPmNvZGVjLCAmc2VsZi0+c3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICZwZW5kaW5nLCBzZWxmLT5wZW5kaW5nc2l6ZSwgc2VsZi0+ZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICBzZWxmLT5wZW5kaW5nLCBOVUxMLCBzZWxmLT5lcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQpOwogICAgIC8qIHNvbWUgcGVuZGluZyBidWZmZXIgY2FuIGJlIHRydW5jYXRlZCB3aGVuIFVuaWNvZGVFbmNvZGVFcnJvciBpcwogICAgICAqIHJhaXNlZCBvbiAnc3RyaWN0JyBtb2RlLiBidXQsICdyZXNldCcgbWV0aG9kIGlzIGRlc2lnbmVkIHRvCiAgICAgICogcmVzZXQgdGhlIHBlbmRpbmcgYnVmZmVyIG9yIHN0YXRlcyBzbyBmYWlsZWQgc3RyaW5nIHNlcXVlbmNlCiAgICAgICogb3VnaHQgdG8gYmUgbWlzc2VkICovCi0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPnBlbmRpbmcpOwogICAgIGlmIChwd3J0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2socHdydCkpOwogICAgIGlmIChQeUJ5dGVzX1NpemUocHdydCkgPiAwKSB7CiAgICAgICAgIFB5T2JqZWN0ICp3cjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogCiAgICAgICAgIHdyID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5zdHJlYW0sICZQeUlkX3dyaXRlLCAiTyIsIHB3cnQpOwogICAgICAgICBpZiAod3IgPT0gTlVMTCkgewpAQCAtMTcwNiw3ICsxNjc4LDcgQEAKICAgICBzZWxmLT5jb2RlYyA9ICgoTXVsdGlieXRlQ29kZWNPYmplY3QgKiljb2RlYyktPmNvZGVjOwogICAgIHNlbGYtPnN0cmVhbSA9IHN0cmVhbTsKICAgICBQeV9JTkNSRUYoc3RyZWFtKTsKLSAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgc2VsZi0+cGVuZGluZyA9IE5VTEw7CiAgICAgc2VsZi0+ZXJyb3JzID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoc2VsZi0+ZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaCBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKaW5kZXggMWI2ZWY1NS4uNWI4YzIyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCkBAIC0xMCwxMiArMTAsNiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmZGVmIHVpbnQzMl90Ci10eXBlZGVmIHVpbnQzMl90IHVjczRfdDsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGludCB1Y3M0X3Q7Ci0jZW5kaWYKLQogI2lmZGVmIHVpbnQxNl90CiB0eXBlZGVmIHVpbnQxNl90IHVjczJfdCwgREJDSEFSOwogI2Vsc2UKQEAgLTI3LDEzICsyMSwxNCBAQAogICAgIGludCBpOwogICAgIHVuc2lnbmVkIGNoYXIgY1s4XTsKICAgICB1Y3MyX3QgdTJbNF07Ci0gICAgdWNzNF90IHU0WzJdOworICAgIFB5X1VDUzQgdTRbMl07CiB9IE11bHRpYnl0ZUNvZGVjX1N0YXRlOwogCiB0eXBlZGVmIGludCAoKm1iY29kZWNfaW5pdCkoY29uc3Qgdm9pZCAqY29uZmlnKTsKIHR5cGVkZWYgUHlfc3NpemVfdCAoKm1iZW5jb2RlX2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2luZCwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmlucG9zLCBQeV9zc2l6ZV90IGlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKIHR5cGVkZWYgaW50ICgqbWJlbmNvZGVpbml0X2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKQEAgLTQ0LDcgKzM5LDcgQEAKIHR5cGVkZWYgUHlfc3NpemVfdCAoKm1iZGVjb2RlX2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICoqb3V0YnVmLCBQeV9zc2l6ZV90IG91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKTsKIHR5cGVkZWYgaW50ICgqbWJkZWNvZGVpbml0X2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbmZpZyk7CiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmRlY29kZXJlc2V0X2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKQEAgLTgxLDggKzc2LDcgQEAKICNkZWZpbmUgTUFYRU5DUEVORElORyAgIDIKICNkZWZpbmUgX011bHRpYnl0ZVN0YXRlZnVsRW5jb2Rlcl9IRUFEICAgICAgICAgIFwKICAgICBfTXVsdGlieXRlU3RhdGVmdWxDb2RlY19IRUFEICAgICAgICAgICAgICAgIFwKLSAgICBQeV9VTklDT0RFIHBlbmRpbmdbTUFYRU5DUEVORElOR107ICAgICAgICAgIFwKLSAgICBQeV9zc2l6ZV90IHBlbmRpbmdzaXplOworICAgIFB5T2JqZWN0ICpwZW5kaW5nOwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIF9NdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJfSEVBRAogfSBNdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJDb250ZXh0OwpAQCAtMTE4LDE2ICsxMTIsMTcgQEAKICNkZWZpbmUgTUJFUlJfVE9PU01BTEwgICAgICAgICAgKC0xKSAvKiBpbnN1ZmZpY2llbnQgb3V0cHV0IGJ1ZmZlciBzcGFjZSAqLwogI2RlZmluZSBNQkVSUl9UT09GRVcgICAgICAgICAgICAoLTIpIC8qIGluY29tcGxldGUgaW5wdXQgYnVmZmVyICovCiAjZGVmaW5lIE1CRVJSX0lOVEVSTkFMICAgICAgICAgICgtMykgLyogaW50ZXJuYWwgcnVudGltZSBlcnJvciAqLworI2RlZmluZSBNQkVSUl9FWENFUFRJT04gICAgICAgICAoLTQpIC8qIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiByYWlzZWQgKi8KIAogI2RlZmluZSBFUlJPUl9TVFJJQ1QgICAgICAgICAgICAoUHlPYmplY3QgKikoMSkKICNkZWZpbmUgRVJST1JfSUdOT1JFICAgICAgICAgICAgKFB5T2JqZWN0ICopKDIpCiAjZGVmaW5lIEVSUk9SX1JFUExBQ0UgICAgICAgICAgIChQeU9iamVjdCAqKSgzKQogI2RlZmluZSBFUlJPUl9JU0NVU1RPTShwKSAgICAgICAoKHApIDwgRVJST1JfU1RSSUNUIHx8IEVSUk9SX1JFUExBQ0UgPCAocCkpCi0jZGVmaW5lIEVSUk9SX0RFQ1JFRihwKSBkbyB7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHAgIT0gTlVMTCAmJiBFUlJPUl9JU0NVU1RPTShwKSkgeyAgICAgICBcCi0gICAgICAgIFB5X0RFQ1JFRihwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKTsKKyNkZWZpbmUgRVJST1JfREVDUkVGKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocCAhPSBOVUxMICYmIEVSUk9SX0lTQ1VTVE9NKHApKSAgICAgICAgIFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCk7CiAKICNkZWZpbmUgTUJFTkNfRkxVU0ggICAgICAgICAgICAgMHgwMDAxIC8qIGVuY29kZSBhbGwgY2hhcmFjdGVycyBlbmNvZGFibGUgKi8KICNkZWZpbmUgTUJFTkNfTUFYICAgICAgICAgICAgICAgTUJFTkNfRkxVU0gKZGlmZiAtLWdpdCBhL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMgYi9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCmluZGV4IGM4NmEyN2YuLjI3YjFkNTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKKysrIGIvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYwpAQCAtMjIsNyArMjIsMTQgQEAKICMgIGRlZmluZSBGQVVMVEhBTkRMRVJfVVNFUgogI2VuZGlmCiAKLSNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSkKKy8qIGNhc3Qgc2l6ZV90IHRvIGludCBiZWNhdXNlIHdyaXRlKCkgdGFrZXMgYW4gaW50IG9uIFdpbmRvd3MKKyAgIChhbnl3YXksIHRoZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIDMwIGNoYXJhY3RlcnMpICovCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKKworX1B5X0lERU5USUZJRVIoZW5hYmxlKTsKK19QeV9JREVOVElGSUVSKGZpbGVubyk7CitfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOwogCiAjaWZkZWYgSEFWRV9TSUdBQ1RJT04KIHR5cGVkZWYgc3RydWN0IHNpZ2FjdGlvbiBfUHlfc2lnaGFuZGxlcl90OwpAQCAtNzksOSArODYsNiBAQAogc3RhdGljIHVzZXJfc2lnbmFsX3QgKnVzZXJfc2lnbmFsczsKIAogLyogdGhlIGZvbGxvd2luZyBtYWNyb3MgY29tZSBmcm9tIFB5dGhvbjogTW9kdWxlcy9zaWduYWxtb2R1bGUuYyAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBOU0lHIDEyCi0jZW5kaWYKICNpZm5kZWYgTlNJRwogIyBpZiBkZWZpbmVkKF9OU0lHKQogIyAgZGVmaW5lIE5TSUcgX05TSUcgICAgICAgICAgICAvKiBGb3IgQlNEL1N5c1YgKi8KQEAgLTEzMSwxMyArMTM1LDExIEBACiBmYXVsdGhhbmRsZXJfZ2V0X2ZpbGVubyhQeU9iamVjdCAqZmlsZSwgaW50ICpwX2ZkKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgX1B5X0lERU5USUZJRVIoZmlsZW5vKTsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAgICAgbG9uZyBmZF9sb25nOwogICAgIGludCBmZDsKIAogICAgIGlmIChmaWxlID09IE5VTEwgfHwgZmlsZSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgICAgIGlmIChmaWxlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5zdGRlcnIiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDQ4LDcgKzQ1MCw3IEBACiAgICAgICAgIC8qIGdldCB0aGUgdGhyZWFkIGhvbGRpbmcgdGhlIEdJTCwgTlVMTCBpZiBubyB0aHJlYWQgaG9sZCB0aGUgR0lMICovCiAgICAgICAgIGN1cnJlbnQgPSBfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CiAKLSAgICAgICAgd3JpdGUodGhyZWFkLmZkLCB0aHJlYWQuaGVhZGVyLCB0aHJlYWQuaGVhZGVyX2xlbik7CisgICAgICAgIHdyaXRlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgKGludCl0aHJlYWQuaGVhZGVyX2xlbik7CiAKICAgICAgICAgZXJybXNnID0gX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKHRocmVhZC5mZCwgdGhyZWFkLmludGVycCwgY3VycmVudCk7CiAgICAgICAgIG9rID0gKGVycm1zZyA9PSBOVUxMKTsKQEAgLTQ3Niw3ICs0NzgsNyBAQAogCiAgICAgUHlfQ0xFQVIodGhyZWFkLmZpbGUpOwogICAgIGlmICh0aHJlYWQuaGVhZGVyKSB7Ci0gICAgICAgIGZyZWUodGhyZWFkLmhlYWRlcik7CisgICAgICAgIFB5TWVtX0ZyZWUodGhyZWFkLmhlYWRlcik7CiAgICAgICAgIHRocmVhZC5oZWFkZXIgPSBOVUxMOwogICAgIH0KIH0KQEAgLTUwNSw3ICs1MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICJUaW1lb3V0ICglbHU6JTAybHU6JTAybHUpIVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBob3VyLCBtaW4sIHNlYyk7CiAKLSAgICByZXR1cm4gc3RyZHVwKGJ1ZmZlcik7CisgICAgcmV0dXJuIF9QeU1lbV9TdHJkdXAoYnVmZmVyKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtNTcxLDcgKzU3Myw3IEBACiAgICAgaWYgKFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQoZmF1bHRoYW5kbGVyX3RocmVhZCwgTlVMTCkgPT0gLTEpIHsKICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRocmVhZC5ydW5uaW5nKTsKICAgICAgICAgUHlfQ0xFQVIodGhyZWFkLmZpbGUpOwotICAgICAgICBmcmVlKGhlYWRlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoaGVhZGVyKTsKICAgICAgICAgdGhyZWFkLmhlYWRlciA9IE5VTEw7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHN0YXJ0IHdhdGNoZG9nIHRocmVhZCIpOwpAQCAtNzMwLDkgKzczMiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICh1c2VyX3NpZ25hbHMgPT0gTlVMTCkgewotICAgICAgICB1c2VyX3NpZ25hbHMgPSBjYWxsb2MoTlNJRywgc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKKyAgICAgICAgdXNlcl9zaWduYWxzID0gUHlNZW1fTWFsbG9jKE5TSUcgKiBzaXplb2YodXNlcl9zaWduYWxfdCkpOwogICAgICAgICBpZiAodXNlcl9zaWduYWxzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgbWVtc2V0KHVzZXJfc2lnbmFscywgMCwgTlNJRyAqIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CiAgICAgfQogICAgIHVzZXIgPSAmdXNlcl9zaWduYWxzW3NpZ251bV07CiAKQEAgLTEwNDcsOSArMTA1MCwxMSBAQAogZmF1bHRoYW5kbGVyX2Vudl9vcHRpb25zKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqa2V5LCAqbW9kdWxlLCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKGVuYWJsZSk7CisgICAgY2hhciAqcDsKIAotICAgIGlmICghUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgeworICAgIGlmICghKChwID0gUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgJiYgKnAgIT0gJ1wwJykpIHsKKyAgICAgICAgLyogUFlUSE9ORkFVTFRIQU5ETEVSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG1pc3NpbmcKKyAgICAgICAgICAgb3IgYW4gZW1wdHkgc3RyaW5nICovCiAgICAgICAgIGludCBoYXNfa2V5OwogCiAgICAgICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKQEAgLTExMzcsNyArMTE0Miw3IEBACiAgICAgaWYgKHVzZXJfc2lnbmFscyAhPSBOVUxMKSB7CiAgICAgICAgIGZvciAoc2lnbnVtPTA7IHNpZ251bSA8IE5TSUc7IHNpZ251bSsrKQogICAgICAgICAgICAgZmF1bHRoYW5kbGVyX3VucmVnaXN0ZXIoJnVzZXJfc2lnbmFsc1tzaWdudW1dLCBzaWdudW0pOwotICAgICAgICBmcmVlKHVzZXJfc2lnbmFscyk7CisgICAgICAgIFB5TWVtX0ZyZWUodXNlcl9zaWduYWxzKTsKICAgICAgICAgdXNlcl9zaWduYWxzID0gTlVMTDsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvZmNudGxtb2R1bGUuYyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwppbmRleCA2NzY5MDk4Li5lNTRjOGUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9mY250bG1vZHVsZS5jCkBAIC0zMjcsMTEgKzMyNyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW5vYmosICZzdGFydG9iaiwgJndoZW5jZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImxvY2tmIG5vdCBzdXBwb3J0ZWQgb24gT1MvMiAoRU1YKSIpOwotICAgIHJldHVybiBOVUxMOwotI2Vsc2UKICNpZm5kZWYgTE9DS19TSAogI2RlZmluZSBMT0NLX1NIICAgICAgICAgMSAgICAgICAvKiBzaGFyZWQgbG9jayAqLwogI2RlZmluZSBMT0NLX0VYICAgICAgICAgMiAgICAgICAvKiBleGNsdXNpdmUgbG9jayAqLwpAQCAtMzg1LDcgKzM4MCw2IEBACiAgICAgfQogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKLSNlbmRpZiAgLyogZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgKi8KIH0KIAogUHlEb2NfU1RSVkFSKGxvY2tmX2RvYywKQEAgLTQzMiwxODggKzQyNiwxNzkgQEAKIAogLyogTW9kdWxlIGluaXRpYWxpc2F0aW9uICovCiAKLXN0YXRpYyBpbnQKLWlucyhQeU9iamVjdCogZCwgY2hhciogc3ltYm9sLCBsb25nIHZhbHVlKQotewotICAgIFB5T2JqZWN0KiB2ID0gUHlMb25nX0Zyb21Mb25nKHZhbHVlKTsKLSAgICBpZiAoIXYgfHwgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgc3ltYm9sLCB2KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFB5X0RFQ1JFRih2KTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBJTlMoeCkgaWYgKGlucyhkLCAjeCwgKGxvbmcpeCkpIHJldHVybiAtMQogCiBzdGF0aWMgaW50Ci1hbGxfaW5zKFB5T2JqZWN0KiBkKQorYWxsX2lucyhQeU9iamVjdCogbSkKIHsKLSAgICBpZiAoaW5zKGQsICJMT0NLX1NIIiwgKGxvbmcpTE9DS19TSCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX0VYIiwgKGxvbmcpTE9DS19FWCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX05CIiwgKGxvbmcpTE9DS19OQikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX1VOIiwgKGxvbmcpTE9DS19VTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19TSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19FWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19OQikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19VTikpIHJldHVybiAtMTsKIC8qIEdOVSBleHRlbnNpb25zLCBhcyBvZiBnbGliYyAyLjIuNCAqLwogI2lmZGVmIExPQ0tfTUFORAotICAgIGlmIChpbnMoZCwgIkxPQ0tfTUFORCIsIChsb25nKUxPQ0tfTUFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19NQU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19SRUFECi0gICAgaWYgKGlucyhkLCAiTE9DS19SRUFEIiwgKGxvbmcpTE9DS19SRUFEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1JFQUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1dSSVRFCi0gICAgaWYgKGlucyhkLCAiTE9DS19XUklURSIsIChsb25nKUxPQ0tfV1JJVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfV1JJVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1JXCi0gICAgaWYgKGlucyhkLCAiTE9DS19SVyIsIChsb25nKUxPQ0tfUlcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfUlcpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEZfRFVQRkQKLSAgICBpZiAoaW5zKGQsICJGX0RVUEZEIiwgKGxvbmcpRl9EVVBGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9EVVBGRCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIEZfRFVQRkRfQ0xPRVhFQworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0RVUEZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVEZECi0gICAgaWYgKGlucyhkLCAiRl9HRVRGRCIsIChsb25nKUZfR0VURkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VURkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVEZECi0gICAgaWYgKGlucyhkLCAiRl9TRVRGRCIsIChsb25nKUZfU0VURkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VURkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVEZMCi0gICAgaWYgKGlucyhkLCAiRl9HRVRGTCIsIChsb25nKUZfR0VURkwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VURkwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVEZMCi0gICAgaWYgKGlucyhkLCAiRl9TRVRGTCIsIChsb25nKUZfU0VURkwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VURkwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVExLCi0gICAgaWYgKGlucyhkLCAiRl9HRVRMSyIsIChsb25nKUZfR0VUTEspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMSyIsIChsb25nKUZfU0VUTEspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLVwotICAgIGlmIChpbnMoZCwgIkZfU0VUTEtXIiwgKGxvbmcpRl9TRVRMS1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEtXKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRPV04KLSAgICBpZiAoaW5zKGQsICJGX0dFVE9XTiIsIChsb25nKUZfR0VUT1dOKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVE9XTikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUT1dOCi0gICAgaWYgKGlucyhkLCAiRl9TRVRPV04iLCAobG9uZylGX1NFVE9XTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRPV04pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVFNJRwotICAgIGlmIChpbnMoZCwgIkZfR0VUU0lHIiwgKGxvbmcpRl9HRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUU0lHKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRTSUcKLSAgICBpZiAoaW5zKGQsICJGX1NFVFNJRyIsIChsb25nKUZfU0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVFNJRykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfUkRMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1JETENLIiwgKGxvbmcpRl9SRExDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9SRExDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfV1JMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1dSTENLIiwgKGxvbmcpRl9XUkxDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9XUkxDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVU5MQ0sKLSAgICBpZiAoaW5zKGQsICJGX1VOTENLIiwgKGxvbmcpRl9VTkxDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9VTkxDSykpIHJldHVybiAtMTsKICNlbmRpZgogLyogTEZTIGNvbnN0YW50cyAqLwogI2lmZGVmIEZfR0VUTEs2NAotICAgIGlmIChpbnMoZCwgIkZfR0VUTEs2NCIsIChsb25nKUZfR0VUTEs2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMSzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMSzY0Ci0gICAgaWYgKGlucyhkLCAiRl9TRVRMSzY0IiwgKGxvbmcpRl9TRVRMSzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLVzY0Ci0gICAgaWYgKGlucyhkLCAiRl9TRVRMS1c2NCIsIChsb25nKUZfU0VUTEtXNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEtXNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIEdOVSBleHRlbnNpb25zLCBhcyBvZiBnbGliYyAyLjIuNC4gKi8KICNpZmRlZiBGQVNZTkMKLSAgICBpZiAoaW5zKGQsICJGQVNZTkMiLCAobG9uZylGQVNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZBU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEVBU0UKLSAgICBpZiAoaW5zKGQsICJGX1NFVExFQVNFIiwgKGxvbmcpRl9TRVRMRUFTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMRUFTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUTEVBU0UKLSAgICBpZiAoaW5zKGQsICJGX0dFVExFQVNFIiwgKGxvbmcpRl9HRVRMRUFTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMRUFTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfTk9USUZZCi0gICAgaWYgKGlucyhkLCAiRl9OT1RJRlkiLCAobG9uZylGX05PVElGWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9OT1RJRlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIE9sZCBCU0QgZmxvY2soKS4gKi8KICNpZmRlZiBGX0VYTENLCi0gICAgaWYgKGlucyhkLCAiRl9FWExDSyIsIChsb25nKUZfRVhMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRVhMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NITENLCi0gICAgaWYgKGlucyhkLCAiRl9TSExDSyIsIChsb25nKUZfU0hMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0hMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogT1MgWCBzcGVjaWZpY3MgKi8KICNpZmRlZiBGX0ZVTExGU1lOQwotICAgIGlmIChpbnMoZCwgIkZfRlVMTEZTWU5DIiwgKGxvbmcpRl9GVUxMRlNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRlVMTEZTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9OT0NBQ0hFCi0gICAgaWYgKGlucyhkLCAiRl9OT0NBQ0hFIiwgKGxvbmcpRl9OT0NBQ0hFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX05PQ0FDSEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogRm9yIEZfe0dFVHxTRVR9RkwgKi8KICNpZmRlZiBGRF9DTE9FWEVDCi0gICAgaWYgKGlucyhkLCAiRkRfQ0xPRVhFQyIsIChsb25nKUZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogRm9yIEZfTk9USUZZICovCiAjaWZkZWYgRE5fQUNDRVNTCi0gICAgaWYgKGlucyhkLCAiRE5fQUNDRVNTIiwgKGxvbmcpRE5fQUNDRVNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9BQ0NFU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9NT0RJRlkKLSAgICBpZiAoaW5zKGQsICJETl9NT0RJRlkiLCAobG9uZylETl9NT0RJRlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX01PRElGWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0NSRUFURQotICAgIGlmIChpbnMoZCwgIkROX0NSRUFURSIsIChsb25nKUROX0NSRUFURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQ1JFQVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fREVMRVRFCi0gICAgaWYgKGlucyhkLCAiRE5fREVMRVRFIiwgKGxvbmcpRE5fREVMRVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9ERUxFVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9SRU5BTUUKLSAgICBpZiAoaW5zKGQsICJETl9SRU5BTUUiLCAobG9uZylETl9SRU5BTUUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX1JFTkFNRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0FUVFJJQgotICAgIGlmIChpbnMoZCwgIkROX0FUVFJJQiIsIChsb25nKUROX0FUVFJJQikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQVRUUklCKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fTVVMVElTSE9UCi0gICAgaWYgKGlucyhkLCAiRE5fTVVMVElTSE9UIiwgKGxvbmcpRE5fTVVMVElTSE9UKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9NVUxUSVNIT1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1RST1BUU19ICiAgICAgLyogVW5peCA5OCBndWFyYW50ZWVzIHRoYXQgdGhlc2UgYXJlIGluIHN0cm9wdHMuaC4gKi8KLSAgICBJTlMoSV9QVVNIKTsKLSAgICBJTlMoSV9QT1ApOwotICAgIElOUyhJX0xPT0spOwotICAgIElOUyhJX0ZMVVNIKTsKLSAgICBJTlMoSV9GTFVTSEJBTkQpOwotICAgIElOUyhJX1NFVFNJRyk7Ci0gICAgSU5TKElfR0VUU0lHKTsKLSAgICBJTlMoSV9GSU5EKTsKLSAgICBJTlMoSV9QRUVLKTsKLSAgICBJTlMoSV9TUkRPUFQpOwotICAgIElOUyhJX0dSRE9QVCk7Ci0gICAgSU5TKElfTlJFQUQpOwotICAgIElOUyhJX0ZESU5TRVJUKTsKLSAgICBJTlMoSV9TVFIpOwotICAgIElOUyhJX1NXUk9QVCk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUFVTSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QT1ApKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTE9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GTFVTSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GTFVTSEJBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GSU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BFRUspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1JET1BUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dSRE9QVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9OUkVBRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GRElOU0VSVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TVFIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1dST1BUKSkgcmV0dXJuIC0xOwogI2lmZGVmIElfR1dST1BUCiAgICAgLyogZGVzcGl0ZSB0aGUgY29tbWVudCBhYm92ZSwgb2xkLWlzaCBnbGliY3MgbWlzcyBhIGNvdXBsZS4uLiAqLwotICAgIElOUyhJX0dXUk9QVCk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR1dST1BUKSkgcmV0dXJuIC0xOwogI2VuZGlmCi0gICAgSU5TKElfU0VOREZEKTsKLSAgICBJTlMoSV9SRUNWRkQpOwotICAgIElOUyhJX0xJU1QpOwotICAgIElOUyhJX0FUTUFSSyk7Ci0gICAgSU5TKElfQ0tCQU5EKTsKLSAgICBJTlMoSV9HRVRCQU5EKTsKLSAgICBJTlMoSV9DQU5QVVQpOwotICAgIElOUyhJX1NFVENMVElNRSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VOREZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1JFQ1ZGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MSVNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0FUTUFSSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9DS0JBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUQkFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9DQU5QVVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VUQ0xUSU1FKSkgcmV0dXJuIC0xOwogI2lmZGVmIElfR0VUQ0xUSU1FCi0gICAgSU5TKElfR0VUQ0xUSU1FKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRDTFRJTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKLSAgICBJTlMoSV9MSU5LKTsKLSAgICBJTlMoSV9VTkxJTkspOwotICAgIElOUyhJX1BMSU5LKTsKLSAgICBJTlMoSV9QVU5MSU5LKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MSU5LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1VOTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QVU5MSU5LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICByZXR1cm4gMDsKQEAgLTYzNSw3ICs2MjAsNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9mY250bCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqZDsKKyAgICBQeU9iamVjdCAqbTsKIAogICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiAqLwogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJmZjbnRsbW9kdWxlKTsKQEAgLTY0Myw3ICs2MjgsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCi0gICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgYWxsX2lucyhkKTsKKyAgICBhbGxfaW5zKG0pOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nY21vZHVsZS5jIGIvTW9kdWxlcy9nY21vZHVsZS5jCmluZGV4IGY3ODJkZDAuLmE4NGQ3NTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL2djbW9kdWxlLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAvKgogICAgTk9URTogYWJvdXQgdW50cmFja2luZyBvZiBtdXRhYmxlIG9iamVjdHMuCi0gICAKKwogICAgQ2VydGFpbiB0eXBlcyBvZiBjb250YWluZXIgY2Fubm90IHBhcnRpY2lwYXRlIGluIGEgcmVmZXJlbmNlIGN5Y2xlLCBhbmQKICAgIHNvIGRvIG5vdCBuZWVkIHRvIGJlIHRyYWNrZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBVbnRyYWNraW5nIHRoZXNlCiAgICBvYmplY3RzIHJlZHVjZXMgdGhlIGNvc3Qgb2YgZ2FyYmFnZSBjb2xsZWN0aW9ucy4gSG93ZXZlciwgZGV0ZXJtaW5pbmcKQEAgLTEzNiwxMCArMTM2LDEwIEBACiAgICBub3Qgc3Vydml2ZSB1bnRpbCBnYXJiYWdlIGNvbGxlY3Rpb24uIEl0IGlzIHRoZXJlZm9yZSBub3Qgd29ydGh3aGlsZQogICAgdG8gdW50cmFjayBlbGlnaWJsZSB0dXBsZXMgYXQgY3JlYXRpb24gdGltZS4KIAotICAgSW5zdGVhZCwgYWxsIHR1cGxlcyBleGNlcHQgdGhlIGVtcHR5IHR1cGxlIGFyZSB0cmFja2VkIHdoZW4gY3JlYXRlZC4gCi0gICBEdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGl0IGlzIGRldGVybWluZWQgd2hldGhlciBhbnkgc3Vydml2aW5nIHR1cGxlcyAKLSAgIGNhbiBiZSB1bnRyYWNrZWQuIEEgdHVwbGUgY2FuIGJlIHVudHJhY2tlZCBpZiBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZSAKLSAgIGFscmVhZHkgbm90IHRyYWNrZWQuIFR1cGxlcyBhcmUgZXhhbWluZWQgZm9yIHVudHJhY2tpbmcgaW4gYWxsIGdhcmJhZ2UgCisgICBJbnN0ZWFkLCBhbGwgdHVwbGVzIGV4Y2VwdCB0aGUgZW1wdHkgdHVwbGUgYXJlIHRyYWNrZWQgd2hlbiBjcmVhdGVkLgorICAgRHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBpdCBpcyBkZXRlcm1pbmVkIHdoZXRoZXIgYW55IHN1cnZpdmluZyB0dXBsZXMKKyAgIGNhbiBiZSB1bnRyYWNrZWQuIEEgdHVwbGUgY2FuIGJlIHVudHJhY2tlZCBpZiBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZQorICAgYWxyZWFkeSBub3QgdHJhY2tlZC4gVHVwbGVzIGFyZSBleGFtaW5lZCBmb3IgdW50cmFja2luZyBpbiBhbGwgZ2FyYmFnZQogICAgY29sbGVjdGlvbiBjeWNsZXMuIEl0IG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgY3ljbGUgdG8gdW50cmFjayBhIHR1cGxlLgogCiAgICBEaWN0aW9uYXJpZXMgY29udGFpbmluZyBvbmx5IGltbXV0YWJsZSBvYmplY3RzIGFsc28gZG8gbm90IG5lZWQgdG8gYmUKQEAgLTE1Miw4ICsxNTIsOCBAQAogICAgVGhlIG1vZHVsZSBwcm92aWRlcyB0aGUgcHl0aG9uIGZ1bmN0aW9uIGlzX3RyYWNrZWQob2JqKSwgd2hpY2ggcmV0dXJucwogICAgdGhlIENVUlJFTlQgdHJhY2tpbmcgc3RhdHVzIG9mIHRoZSBvYmplY3QuIFN1YnNlcXVlbnQgZ2FyYmFnZQogICAgY29sbGVjdGlvbnMgbWF5IGNoYW5nZSB0aGUgdHJhY2tpbmcgc3RhdHVzIG9mIHRoZSBvYmplY3QuCi0gICAKLSAgIFVudHJhY2tpbmcgb2YgY2VydGFpbiBjb250YWluZXJzIHdhcyBpbnRyb2R1Y2VkIGluIGlzc3VlICM0Njg4LCBhbmQgCisKKyAgIFVudHJhY2tpbmcgb2YgY2VydGFpbiBjb250YWluZXJzIHdhcyBpbnRyb2R1Y2VkIGluIGlzc3VlICM0Njg4LCBhbmQKICAgIHRoZSBhbGdvcml0aG0gd2FzIHJlZmluZWQgaW4gcmVzcG9uc2UgdG8gaXNzdWUgIzE0Nzc1LgogKi8KIApAQCAtMTY4LDYgKzE2OCwxOCBAQAogc3RhdGljIGludCBkZWJ1ZzsKIHN0YXRpYyBQeU9iamVjdCAqdG1vZCA9IE5VTEw7CiAKKy8qIFJ1bm5pbmcgc3RhdHMgcGVyIGdlbmVyYXRpb24gKi8KK3N0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgY29sbGVjdGlvbnMgKi8KKyAgICBQeV9zc2l6ZV90IGNvbGxlY3Rpb25zOworICAgIC8qIHRvdGFsIG51bWJlciBvZiBjb2xsZWN0ZWQgb2JqZWN0cyAqLworICAgIFB5X3NzaXplX3QgY29sbGVjdGVkOworICAgIC8qIHRvdGFsIG51bWJlciBvZiB1bmNvbGxlY3RhYmxlIG9iamVjdHMgKHB1dCBpbnRvIGdjLmdhcmJhZ2UpICovCisgICAgUHlfc3NpemVfdCB1bmNvbGxlY3RhYmxlOworfTsKKworc3RhdGljIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIGdlbmVyYXRpb25fc3RhdHNbTlVNX0dFTkVSQVRJT05TXTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2NfcmVmcyB2YWx1ZXMuCiAKQEAgLTIxMSwxMCArMjIzLDEwIEBACiAjZGVmaW5lIEdDX1JFQUNIQUJMRSAgICAgICAgICAgICAgICAgICAgX1B5R0NfUkVGU19SRUFDSEFCTEUKICNkZWZpbmUgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICBfUHlHQ19SRUZTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFCiAKLSNkZWZpbmUgSVNfVFJBQ0tFRChvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyAhPSBHQ19VTlRSQUNLRUQpCi0jZGVmaW5lIElTX1JFQUNIQUJMRShvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyA9PSBHQ19SRUFDSEFCTEUpCisjZGVmaW5lIElTX1RSQUNLRUQobykgKF9QeUdDX1JFRlMobykgIT0gR0NfVU5UUkFDS0VEKQorI2RlZmluZSBJU19SRUFDSEFCTEUobykgKF9QeUdDX1JFRlMobykgPT0gR0NfUkVBQ0hBQkxFKQogI2RlZmluZSBJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvKSAoIFwKLSAgICAoQVNfR0MobykpLT5nYy5nY19yZWZzID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKQorICAgIF9QeUdDX1JFRlMobykgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpCiAKIC8qKiogbGlzdCBmdW5jdGlvbnMgKioqLwogCkBAIC0zMjksOCArMzQxLDggQEAKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gY29udGFpbmVycy0+Z2MuZ2NfbmV4dDsKICAgICBmb3IgKDsgZ2MgIT0gY29udGFpbmVyczsgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgewotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgPT0gR0NfUkVBQ0hBQkxFKTsKLSAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBQeV9SRUZDTlQoRlJPTV9HQyhnYykpOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID09IEdDX1JFQUNIQUJMRSk7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CiAgICAgICAgIC8qIFB5dGhvbidzIGN5Y2xpYyBnYyBzaG91bGQgbmV2ZXIgc2VlIGFuIGluY29taW5nIHJlZmNvdW50CiAgICAgICAgICAqIG9mIDA6ICBpZiBzb21ldGhpbmcgZGVjcmVmJ2VkIHRvIDAsIGl0IHNob3VsZCBoYXZlIGJlZW4KICAgICAgICAgICogZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHkgYXQgdGhhdCB0aW1lLgpAQCAtMzQ5LDcgKzM2MSw3IEBACiAgICAgICAgICAqIHNvIHNlcmlvdXMgdGhhdCBtYXliZSB0aGlzIHNob3VsZCBiZSBhIHJlbGVhc2UtYnVpbGQKICAgICAgICAgICogY2hlY2sgaW5zdGVhZCBvZiBhbiBhc3NlcnQ/CiAgICAgICAgICAqLwotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgIT0gMCk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CiAgICAgfQogfQogCkBAIC0zNjQsOSArMzc2LDkgQEAKICAgICAgICAgICogZ2VuZXJhdGlvbiBiZWluZyBjb2xsZWN0ZWQsIHdoaWNoIGNhbiBiZSByZWNvZ25pemVkCiAgICAgICAgICAqIGJlY2F1c2Ugb25seSB0aGV5IGhhdmUgcG9zaXRpdmUgZ2NfcmVmcy4KICAgICAgICAgICovCi0gICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyAhPSAwKTsgLyogZWxzZSByZWZjb3VudCB3YXMgdG9vIHNtYWxsICovCi0gICAgICAgIGlmIChnYy0+Z2MuZ2NfcmVmcyA+IDApCi0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcy0tOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOyAvKiBlbHNlIHJlZmNvdW50IHdhcyB0b28gc21hbGwgKi8KKyAgICAgICAgaWYgKF9QeUdDSGVhZF9SRUZTKGdjKSA+IDApCisgICAgICAgICAgICBfUHlHQ0hlYWRfREVDUkVGKGdjKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zOTUsNyArNDA3LDcgQEAKIHsKICAgICBpZiAoUHlPYmplY3RfSVNfR0Mob3ApKSB7CiAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBBU19HQyhvcCk7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgZ2NfcmVmcyA9IGdjLT5nYy5nY19yZWZzOworICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGdjX3JlZnMgPSBfUHlHQ0hlYWRfUkVGUyhnYyk7CiAKICAgICAgICAgaWYgKGdjX3JlZnMgPT0gMCkgewogICAgICAgICAgICAgLyogVGhpcyBpcyBpbiBtb3ZlX3VucmVhY2hhYmxlJ3MgJ3lvdW5nJyBsaXN0LCBidXQKQEAgLTQwMyw3ICs0MTUsNyBAQAogICAgICAgICAgICAgICogd2UgbmVlZCB0byBkbyBpcyB0ZWxsIG1vdmVfdW5yZWFjaGFibGUgdGhhdCBpdCdzCiAgICAgICAgICAgICAgKiByZWFjaGFibGUuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gMTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoZ2NfcmVmcyA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkgewogICAgICAgICAgICAgLyogVGhpcyBoYWQgZ2NfcmVmcyA9IDAgd2hlbiBtb3ZlX3VucmVhY2hhYmxlIGdvdApAQCAtNDEzLDcgKzQyNSw3IEBACiAgICAgICAgICAgICAgKiBhZ2Fpbi4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCByZWFjaGFibGUpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSAxOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCAxKTsKICAgICAgICAgfQogICAgICAgICAvKiBFbHNlIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KICAgICAgICAgICogSWYgZ2NfcmVmcyA+IDAsIGl0IG11c3QgYmUgaW4gbW92ZV91bnJlYWNoYWJsZSdzICd5b3VuZycKQEAgLTQ1Nyw3ICs0NjksNyBAQAogICAgIHdoaWxlIChnYyAhPSB5b3VuZykgewogICAgICAgICBQeUdDX0hlYWQgKm5leHQ7CiAKLSAgICAgICAgaWYgKGdjLT5nYy5nY19yZWZzKSB7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykpIHsKICAgICAgICAgICAgIC8qIGdjIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gb3V0c2lkZSB0aGUKICAgICAgICAgICAgICAqIG9yaWdpbmFsICd5b3VuZycuICBNYXJrIGl0IGFzIHN1Y2gsIGFuZCB0cmF2ZXJzZQogICAgICAgICAgICAgICogaXRzIHBvaW50ZXJzIHRvIGZpbmQgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtYXkKQEAgLTQ2OCw4ICs0ODAsOCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKICAgICAgICAgICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZSA9IFB5X1RZUEUob3ApLT50cF90cmF2ZXJzZTsKLSAgICAgICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyA+IDApOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID4gMCk7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgICAgICAodm9pZCkgdHJhdmVyc2Uob3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpc2l0cHJvYyl2aXNpdF9yZWFjaGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKil5b3VuZyk7CkBAIC00ODgsNyArNTAwLDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgbmV4dCA9IGdjLT5nYy5nY19uZXh0OwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCB1bnJlYWNoYWJsZSk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICAgICAgZ2MgPSBuZXh0OwogICAgIH0KQEAgLTUwOCwyMiArNTIwLDE5IEBACiAgICAgfQogfQogCi0vKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaGFzIGEgZmluYWxpemF0aW9uIG1ldGhvZC4gKi8KKy8qIFJldHVybiB0cnVlIGlmIG9iamVjdCBoYXMgYSBwcmUtUEVQIDQ0MiBmaW5hbGl6YXRpb24gbWV0aG9kLiAqLwogc3RhdGljIGludAotaGFzX2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCitoYXNfbGVnYWN5X2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCiB7Ci0gICAgaWYgKFB5R2VuX0NoZWNrRXhhY3Qob3ApKQotICAgICAgICByZXR1cm4gUHlHZW5fTmVlZHNGaW5hbGl6aW5nKChQeUdlbk9iamVjdCAqKW9wKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcC0+b2JfdHlwZS0+dHBfZGVsICE9IE5VTEw7CisgICAgcmV0dXJuIG9wLT5vYl90eXBlLT50cF9kZWwgIT0gTlVMTDsKIH0KIAotLyogTW92ZSB0aGUgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSB3aXRoIF9fZGVsX18gbWV0aG9kcyBpbnRvIGBmaW5hbGl6ZXJzYC4KKy8qIE1vdmUgdGhlIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgd2l0aCB0cF9kZWwgc2xvdHMgaW50byBgZmluYWxpemVyc2AuCiAgKiBPYmplY3RzIG1vdmVkIGludG8gYGZpbmFsaXplcnNgIGhhdmUgZ2NfcmVmcyBzZXQgdG8gR0NfUkVBQ0hBQkxFOyB0aGUKICAqIG9iamVjdHMgcmVtYWluaW5nIGluIHVucmVhY2hhYmxlIGFyZSBsZWZ0IGF0IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFLgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqdW5yZWFjaGFibGUsIFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICp1bnJlYWNoYWJsZSwgUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgUHlHQ19IZWFkICpuZXh0OwpAQCAtNTM3LDE0ICs1NDYsMTQgQEAKICAgICAgICAgYXNzZXJ0KElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSk7CiAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKIAotICAgICAgICBpZiAoaGFzX2ZpbmFsaXplcihvcCkpIHsKKyAgICAgICAgaWYgKGhhc19sZWdhY3lfZmluYWxpemVyKG9wKSkgewogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCBmaW5hbGl6ZXJzKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogfQogCi0vKiBBIHRyYXZlcnNhbCBjYWxsYmFjayBmb3IgbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlLiAqLworLyogQSB0cmF2ZXJzYWwgY2FsbGJhY2sgZm9yIG1vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUuICovCiBzdGF0aWMgaW50CiB2aXNpdF9tb3ZlKFB5T2JqZWN0ICpvcCwgUHlHQ19IZWFkICp0b2xpc3QpCiB7CkBAIC01NTIsNyArNTYxLDcgQEAKICAgICAgICAgaWYgKElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSkgewogICAgICAgICAgICAgUHlHQ19IZWFkICpnYyA9IEFTX0dDKG9wKTsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgdG9saXN0KTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtNTYyLDcgKzU3MSw3IEBACiAgKiBpbnRvIGZpbmFsaXplcnMgc2V0LgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlKFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUoUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZTsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKQEAgLTczNSw3ICs3NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBtc2csIFB5X1RZUEUob3ApLT50cF9uYW1lLCBvcCk7CiB9CiAKLS8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIGZpbmFsaXplcnMsIGFuZCBzdHVmZiByZWFjaGFibGUKKy8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIHRwX2RlbCBzbG90cywgYW5kIHN0dWZmIHJlYWNoYWJsZQogICogb25seSBmcm9tIHN1Y2ggY3ljbGVzKS4KICAqIElmIERFQlVHX1NBVkVBTEwsIGFsbCBvYmplY3RzIGluIGZpbmFsaXplcnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBtb2R1bGUKICAqIGdhcmJhZ2UgbGlzdCAoYSBQeXRob24gbGlzdCksIGVsc2Ugb25seSB0aGUgb2JqZWN0cyBpbiBmaW5hbGl6ZXJzIHdpdGgKQEAgLTc0NSw3ICs3NTQsNyBAQAogICogVGhlIGZpbmFsaXplcnMgbGlzdCBpcyBtYWRlIGVtcHR5IG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4uCiAgKi8KIHN0YXRpYyBpbnQKLWhhbmRsZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCitoYW5kbGVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICpmaW5hbGl6ZXJzLCBQeUdDX0hlYWQgKm9sZCkKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKIApAQCAtNzU3LDcgKzc2Niw3IEBACiAgICAgZm9yICg7IGdjICE9IGZpbmFsaXplcnM7IGdjID0gZ2MtPmdjLmdjX25leHQpIHsKICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAKLSAgICAgICAgaWYgKChkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpIHx8IGhhc19maW5hbGl6ZXIob3ApKSB7CisgICAgICAgIGlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8fCBoYXNfbGVnYWN5X2ZpbmFsaXplcihvcCkpIHsKICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC03NjcsNiArNzc2LDYyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5hbGl6ZV9nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUsIFB5R0NfSGVhZCAqb2xkKQoreworICAgIGRlc3RydWN0b3IgZmluYWxpemU7CisgICAgUHlHQ19IZWFkICpnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OworCisgICAgZm9yICg7IGdjICE9IGNvbGxlY3RhYmxlOyBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOworCisgICAgICAgIGlmICghX1B5R0NIZWFkX0ZJTkFMSVpFRChnYykgJiYKKyAgICAgICAgICAgIFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmCisgICAgICAgICAgICAoZmluYWxpemUgPSBQeV9UWVBFKG9wKS0+dHBfZmluYWxpemUpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfRklOQUxJWkVEKGdjLCAxKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihvcCk7CisgICAgICAgICAgICBmaW5hbGl6ZShvcCk7CisgICAgICAgICAgICBpZiAoUHlfUkVGQ05UKG9wKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgLyogb3Agd2lsbCBiZSBkZXN0cm95ZWQgKi8KKyAgICAgICAgICAgICAgICBnYyA9IGdjLT5nYy5nY19wcmV2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogV2FsayB0aGUgY29sbGVjdGFibGUgbGlzdCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSByZWFsbHkgdW5yZWFjaGFibGUKKyAgIGZyb20gdGhlIG91dHNpZGUgKHNvbWUgb2JqZWN0cyBjb3VsZCBoYXZlIGJlZW4gcmVzdXJyZWN0ZWQgYnkgYQorICAgZmluYWxpemVyKS4gKi8KK3N0YXRpYyBpbnQKK2NoZWNrX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBQeUdDX0hlYWQgKmdjOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CisgICAgfQorICAgIHN1YnRyYWN0X3JlZnMoY29sbGVjdGFibGUpOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgPj0gMCk7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZXZpdmVfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlKQoreworICAgIFB5R0NfSGVhZCAqZ2M7CisgICAgZm9yIChnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OyBnYyAhPSBjb2xsZWN0YWJsZTsKKyAgICAgICAgIGdjID0gZ2MtPmdjLmdjX25leHQpIHsKKyAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOworICAgIH0KK30KKwogLyogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSBjbGVhcmluZyB0aGUgY29udGFpbmVycyBpbnZvbHZlZC4gIFRoaXMgaXMKICAqIHRyaWNreSBidXNpbmVzcyBhcyB0aGUgbGlzdHMgY2FuIGJlIGNoYW5naW5nIGFuZCB3ZSBkb24ndCBrbm93IHdoaWNoCiAgKiBvYmplY3RzIG1heSBiZSBmcmVlZC4gIEl0IGlzIHBvc3NpYmxlIEkgc2NyZXdlZCBzb21ldGhpbmcgdXAgaGVyZS4KQEAgLTc4MCw3ICs4NDUsNiBAQAogICAgICAgICBQeUdDX0hlYWQgKmdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7CiAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogCi0gICAgICAgIGFzc2VydChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpOwogICAgICAgICBpZiAoZGVidWcgJiBERUJVR19TQVZFQUxMKSB7CiAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKTsKICAgICAgICAgfQpAQCAtNzk0LDcgKzg1OCw3IEBACiAgICAgICAgIGlmIChjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dCA9PSBnYykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIHN0aWxsIGFsaXZlLCBtb3ZlIGl0LCBpdCBtYXkgZGllIGxhdGVyICovCiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIG9sZCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTg0MSw3ICs5MDUsOCBAQAogLyogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbi4gIFJlYWQgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUKICAqIGNvbGxlY3Rpb24gcHJvY2VzcyB3b3Jrcy4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci1jb2xsZWN0KGludCBnZW5lcmF0aW9uLCBQeV9zc2l6ZV90ICpuX2NvbGxlY3RlZCwgUHlfc3NpemVfdCAqbl91bmNvbGxlY3RhYmxlKQorY29sbGVjdChpbnQgZ2VuZXJhdGlvbiwgUHlfc3NpemVfdCAqbl9jb2xsZWN0ZWQsIFB5X3NzaXplX3QgKm5fdW5jb2xsZWN0YWJsZSwKKyAgICAgICAgaW50IG5vZmFpbCkKIHsKICAgICBpbnQgaTsKICAgICBQeV9zc2l6ZV90IG0gPSAwOyAvKiAjIG9iamVjdHMgY29sbGVjdGVkICovCkBAIC04NTIsNiArOTE3LDcgQEAKICAgICBQeUdDX0hlYWQgZmluYWxpemVyczsgIC8qIG9iamVjdHMgd2l0aCwgJiByZWFjaGFibGUgZnJvbSwgX19kZWxfXyAqLwogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgZG91YmxlIHQxID0gMC4wOworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzICpzdGF0cyA9ICZnZW5lcmF0aW9uX3N0YXRzW2dlbmVyYXRpb25dOwogCiAgICAgaWYgKGRlYnVnICYgREVCVUdfU1RBVFMpIHsKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoImdjOiBjb2xsZWN0aW5nIGdlbmVyYXRpb24gJWQuLi5cbiIsCkBAIC05MTUsMTkgKzk4MSwxNSBAQAogICAgIH0KIAogICAgIC8qIEFsbCBvYmplY3RzIGluIHVucmVhY2hhYmxlIGFyZSB0cmFzaCwgYnV0IG9iamVjdHMgcmVhY2hhYmxlIGZyb20KLSAgICAgKiBmaW5hbGl6ZXJzIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLiAgUHl0aG9uIHByb2dyYW1tZXJzIHNob3VsZCB0YWtlCi0gICAgICogY2FyZSBub3QgdG8gY3JlYXRlIHN1Y2ggdGhpbmdzLiAgRm9yIFB5dGhvbiwgZmluYWxpemVycyBtZWFucwotICAgICAqIGluc3RhbmNlIG9iamVjdHMgd2l0aCBfX2RlbF9fIG1ldGhvZHMuICBXZWFrcmVmcyB3aXRoIGNhbGxiYWNrcwotICAgICAqIGNhbiBhbHNvIGNhbGwgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGJ1dCB0aGV5IHdpbGwgYmUgZGVhbHQgd2l0aCBieQotICAgICAqIGhhbmRsZV93ZWFrcmVmcygpLgorICAgICAqIGxlZ2FjeSBmaW5hbGl6ZXJzIChlLmcuIHRwX2RlbCkgY2FuJ3Qgc2FmZWx5IGJlIGRlbGV0ZWQuCiAgICAgICovCiAgICAgZ2NfbGlzdF9pbml0KCZmaW5hbGl6ZXJzKTsKLSAgICBtb3ZlX2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7Ci0gICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgZmluYWxpemVyOworICAgIG1vdmVfbGVnYWN5X2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7CisgICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgbGVnYWN5IGZpbmFsaXplcjsKICAgICAgKiB1bnJlYWNoYWJsZSBvYmplY3RzIHJlYWNoYWJsZSAqZnJvbSogdGhvc2UgYXJlIGFsc28gdW5jb2xsZWN0YWJsZSwKICAgICAgKiBhbmQgd2UgbW92ZSB0aG9zZSBpbnRvIHRoZSBmaW5hbGl6ZXJzIGxpc3QgdG9vLgogICAgICAqLwotICAgIG1vdmVfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CisgICAgbW92ZV9sZWdhY3lfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CiAKICAgICAvKiBDb2xsZWN0IHN0YXRpc3RpY3Mgb24gY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCkBAIC05NDMsMTEgKzEwMDUsMjAgQEAKICAgICAvKiBDbGVhciB3ZWFrcmVmcyBhbmQgaW52b2tlIGNhbGxiYWNrcyBhcyBuZWNlc3NhcnkuICovCiAgICAgbSArPSBoYW5kbGVfd2Vha3JlZnMoJnVucmVhY2hhYmxlLCBvbGQpOwogCi0gICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKLSAgICAgKiB0aGUgcmVmZXJlbmNlIGN5Y2xlcyB0byBiZSBicm9rZW4uICBJdCBtYXkgYWxzbyBjYXVzZSBzb21lIG9iamVjdHMKLSAgICAgKiBpbiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkLgotICAgICAqLwotICAgIGRlbGV0ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICAvKiBDYWxsIHRwX2ZpbmFsaXplIG9uIG9iamVjdHMgd2hpY2ggaGF2ZSBvbmUuICovCisgICAgZmluYWxpemVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisKKyAgICBpZiAoY2hlY2tfZ2FyYmFnZSgmdW5yZWFjaGFibGUpKSB7CisgICAgICAgIHJldml2ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSk7CisgICAgICAgIGdjX2xpc3RfbWVyZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKKyAgICAgICAgICogdGhlIHJlZmVyZW5jZSBjeWNsZXMgdG8gYmUgYnJva2VuLiAgSXQgbWF5IGFsc28gY2F1c2Ugc29tZSBvYmplY3RzCisgICAgICAgICAqIGluIGZpbmFsaXplcnMgdG8gYmUgZnJlZWQuCisgICAgICAgICAqLworICAgICAgICBkZWxldGVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgfQogCiAgICAgLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICovCkBAIC05NzgsNyArMTA0OSw3IEBACiAgICAgICogcmVhY2hhYmxlIGxpc3Qgb2YgZ2FyYmFnZS4gIFRoZSBwcm9ncmFtbWVyIGhhcyB0byBkZWFsIHdpdGgKICAgICAgKiB0aGlzIGlmIHRoZXkgaW5zaXN0IG9uIGNyZWF0aW5nIHRoaXMgdHlwZSBvZiBzdHJ1Y3R1cmUuCiAgICAgICovCi0gICAgKHZvaWQpaGFuZGxlX2ZpbmFsaXplcnMoJmZpbmFsaXplcnMsIG9sZCk7CisgICAgKHZvaWQpaGFuZGxlX2xlZ2FjeV9maW5hbGl6ZXJzKCZmaW5hbGl6ZXJzLCBvbGQpOwogCiAgICAgLyogQ2xlYXIgZnJlZSBsaXN0IG9ubHkgZHVyaW5nIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBoaWdoZXN0CiAgICAgICogZ2VuZXJhdGlvbiAqLwpAQCAtOTg3LDE2ICsxMDU4LDI1IEBACiAgICAgfQogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ2Nfc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImdhcmJhZ2UgY29sbGVjdGlvbiIpOwotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2Nfc3RyKTsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICBpZiAobm9mYWlsKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdjX3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnY19zdHIpOworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICB9CiAgICAgfQogCisgICAgLyogVXBkYXRlIHN0YXRzICovCiAgICAgaWYgKG5fY29sbGVjdGVkKQogICAgICAgICAqbl9jb2xsZWN0ZWQgPSBtOwogICAgIGlmIChuX3VuY29sbGVjdGFibGUpCiAgICAgICAgICpuX3VuY29sbGVjdGFibGUgPSBuOworICAgIHN0YXRzLT5jb2xsZWN0aW9ucysrOworICAgIHN0YXRzLT5jb2xsZWN0ZWQgKz0gbTsKKyAgICBzdGF0cy0+dW5jb2xsZWN0YWJsZSArPSBuOwogICAgIHJldHVybiBuK207CiB9CiAKQEAgLTEwNDUsNyArMTEyNSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXN1bHQsIGNvbGxlY3RlZCwgdW5jb2xsZWN0YWJsZTsKICAgICBpbnZva2VfZ2NfY2FsbGJhY2soInN0YXJ0IiwgZ2VuZXJhdGlvbiwgMCwgMCk7Ci0gICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSk7CisgICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSwgMCk7CiAgICAgaW52b2tlX2djX2NhbGxiYWNrKCJzdG9wIiwgZ2VuZXJhdGlvbiwgY29sbGVjdGVkLCB1bmNvbGxlY3RhYmxlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTM0Myw2ICsxNDIzLDUyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGdjX2dldF9zdGF0c19fZG9jX18sCisiZ2V0X3N0YXRzKCkgLT4gWy4uLl1cbiIKKyJcbiIKKyJSZXR1cm4gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBjb250YWluaW5nIHBlci1nZW5lcmF0aW9uIHN0YXRpc3RpY3MuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2djX2dldF9zdGF0cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHN0YXRzW05VTV9HRU5FUkFUSU9OU10sICpzdDsKKworICAgIC8qIFRvIGdldCBjb25zaXN0ZW50IHZhbHVlcyBkZXNwaXRlIGFsbG9jYXRpb25zIHdoaWxlIGNvbnN0cnVjdGluZworICAgICAgIHRoZSByZXN1bHQgbGlzdCwgd2UgdXNlIGEgc25hcHNob3Qgb2YgdGhlIHJ1bm5pbmcgc3RhdHMuICovCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIHN0YXRzW2ldID0gZ2VuZXJhdGlvbl9zdGF0c1tpXTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0dFTkVSQVRJT05TOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgICAgIHN0ID0gJnN0YXRzW2ldOworICAgICAgICBkaWN0ID0gUHlfQnVpbGRWYWx1ZSgie3Nuc25zbn0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sbGVjdGlvbnMiLCBzdC0+Y29sbGVjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xsZWN0ZWQiLCBzdC0+Y29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5jb2xsZWN0YWJsZSIsIHN0LT51bmNvbGxlY3RhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgZGljdCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogUHlEb2NfU1RSVkFSKGdjX2lzX3RyYWNrZWRfX2RvY19fLAogImlzX3RyYWNrZWQob2JqKSAtPiBib29sXG4iCiAiXG4iCkBAIC0xMzkzLDYgKzE1MTksNyBAQAogICAgIHsiY29sbGVjdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWdjX2NvbGxlY3QsCiAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgICAgICBnY19jb2xsZWN0X19kb2NfX30sCiAgICAgeyJnZXRfb2JqZWN0cyIsICAgIGdjX2dldF9vYmplY3RzLE1FVEhfTk9BUkdTLCAgZ2NfZ2V0X29iamVjdHNfX2RvY19ffSwKKyAgICB7ImdldF9zdGF0cyIsICAgICAgZ2NfZ2V0X3N0YXRzLCBNRVRIX05PQVJHUywgZ2NfZ2V0X3N0YXRzX19kb2NfX30sCiAgICAgeyJpc190cmFja2VkIiwgICAgIGdjX2lzX3RyYWNrZWQsIE1FVEhfTywgICAgICAgZ2NfaXNfdHJhY2tlZF9fZG9jX199LAogICAgIHsiZ2V0X3JlZmVycmVycyIsICBnY19nZXRfcmVmZXJyZXJzLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgIGdjX2dldF9yZWZlcnJlcnNfX2RvY19ffSwKQEAgLTE0ODAsOCArMTYwNywyOSBAQAogICAgIHJldHVybiBuOwogfQogCitQeV9zc2l6ZV90CitfUHlHQ19Db2xsZWN0Tm9GYWlsKHZvaWQpCit7CisgICAgUHlfc3NpemVfdCBuOworCisgICAgLyogSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiBpbnRlcnByZXRlciBzaHV0ZG93biwKKyAgICAgICBhbmQgdGhlcmVmb3JlIG5vdCByZWN1cnNpdmVseS4gIFVuZm9ydHVuYXRlbHksIHdoZW4gdGhlcmUgYXJlIGRhZW1vbgorICAgICAgIHRocmVhZHMsIGEgZGFlbW9uIHRocmVhZCBjYW4gc3RhcnQgYSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duIChhbmQgdGhlbiBuZXZlciBmaW5pc2ggaXQpLgorICAgICAgIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODcxMyNtc2cxOTUxNzggZm9yIGFuIGV4YW1wbGUuCisgICAgICAgKi8KKyAgICBpZiAoY29sbGVjdGluZykKKyAgICAgICAgbiA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNvbGxlY3RpbmcgPSAxOworICAgICAgICBuID0gY29sbGVjdChOVU1fR0VORVJBVElPTlMgLSAxLCBOVUxMLCBOVUxMLCAxKTsKKyAgICAgICAgY29sbGVjdGluZyA9IDA7CisgICAgfQorICAgIHJldHVybiBuOworfQorCiB2b2lkCi1fUHlHQ19GaW5pKHZvaWQpCitfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKQogewogICAgIGlmICghKGRlYnVnICYgREVCVUdfU0FWRUFMTCkKICAgICAgICAgJiYgZ2FyYmFnZSAhPSBOVUxMICYmIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSA+IDApIHsKQEAgLTE0OTIsOCArMTY0MCwxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtZXNzYWdlID0gImdjOiAlemQgdW5jb2xsZWN0YWJsZSBvYmplY3RzIGF0ICIgXAogICAgICAgICAgICAgICAgICJzaHV0ZG93bjsgdXNlIGdjLnNldF9kZWJ1ZyhnYy5ERUJVR19VTkNPTExFQ1RBQkxFKSB0byBsaXN0IHRoZW0iOwotICAgICAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsIDAsIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkgPCAwKQorICAgICAgICAvKiBQeUVycl9XYXJuRm9ybWF0IGRvZXMgdG9vIG1hbnkgdGhpbmdzIGFuZCB3ZSBhcmUgYXQgc2h1dGRvd24sCisgICAgICAgICAgIHRoZSB3YXJuaW5ncyBtb2R1bGUncyBkZXBlbmRlbmNpZXMgKGUuZy4gbGluZWNhY2hlKSBtYXkgYmUgZ29uZQorICAgICAgICAgICBhbHJlYWR5LiAqLworICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5RXhjX1Jlc291cmNlV2FybmluZywgImdjIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2MiLCBOVUxMLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkpCiAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CiAgICAgICAgIGlmIChkZWJ1ZyAmIERFQlVHX1VOQ09MTEVDVEFCTEUpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTCwgKmJ5dGVzID0gTlVMTDsKQEAgLTE1MDIsNyArMTY1NCw3IEBACiAgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdhcmJhZ2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoCi0gICAgICAgICAgICAgICAgICAgICIgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICIgICAgICAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9CkBAIC0xNTEwLDcgKzE2NjIsMTMgQEAKICAgICAgICAgICAgIFB5X1hERUNSRUYoYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQorfQorCit2b2lkCitfUHlHQ19GaW5pKHZvaWQpCit7CiAgICAgUHlfQ0xFQVIoY2FsbGJhY2tzKTsKKyAgICBQeV9DTEVBUih0bW9kKTsKIH0KIAogLyogZm9yIGRlYnVnZ2luZyAqLwpAQCAtMTU2OSw3ICsxNzI3LDggQEAKICAgICAgICAgc2l6ZW9mKFB5R0NfSGVhZCkgKyBiYXNpY3NpemUpOwogICAgIGlmIChnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGctPmdjLmdjX3JlZnMgPSBHQ19VTlRSQUNLRUQ7CisgICAgZy0+Z2MuZ2NfcmVmcyA9IDA7CisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIEdDX1VOVFJBQ0tFRCk7CiAgICAgZ2VuZXJhdGlvbnNbMF0uY291bnQrKzsgLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBHQyBvYmplY3RzICovCiAgICAgaWYgKGdlbmVyYXRpb25zWzBdLmNvdW50ID4gZ2VuZXJhdGlvbnNbMF0udGhyZXNob2xkICYmCiAgICAgICAgIGVuYWJsZWQgJiYKQEAgLTE1OTYsOCArMTc1NSwxNSBAQAogUHlWYXJPYmplY3QgKgogX1B5T2JqZWN0X0dDX05ld1ZhcihQeVR5cGVPYmplY3QgKnRwLCBQeV9zc2l6ZV90IG5pdGVtcykKIHsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IF9QeU9iamVjdF9WQVJfU0laRSh0cCwgbml0ZW1zKTsKLSAgICBQeVZhck9iamVjdCAqb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeVZhck9iamVjdCAqb3A7CisKKyAgICBpZiAobml0ZW1zIDwgMCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIG5pdGVtcyk7CisgICAgb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKICAgICBpZiAob3AgIT0gTlVMTCkKICAgICAgICAgb3AgPSBQeU9iamVjdF9JTklUX1ZBUihvcCwgdHAsIG5pdGVtcyk7CiAgICAgcmV0dXJuIG9wOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nZXRwYXRoLmMgYi9Nb2R1bGVzL2dldHBhdGguYwppbmRleCBmZjE0ZmRkLi45ZTc5YzI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dldHBhdGguYworKysgYi9Nb2R1bGVzL2dldHBhdGguYwpAQCAtMTM0LDggKzEzNCw2IEBACiBzdGF0aWMgd2NoYXJfdCBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOwogc3RhdGljIHdjaGFyX3QgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKIHN0YXRpYyB3Y2hhcl90ICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwotc3RhdGljIGludCBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAwOwotc3RhdGljIHdjaGFyX3QgKmxpYl9weXRob24gPSBMImxpYi9weXRob24iIFZFUlNJT047CiAKIHN0YXRpYyB2b2lkCiByZWR1Y2Uod2NoYXJfdCAqZGlyKQpAQCAtMzE3LDcgKzMxNSw4IEBACiAgICBieXRlcyBsb25nLgogKi8KIHN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsIHdjaGFyX3QgKl9wcmVmaXgpCitzZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfcHJlZml4LAorICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKICAgICB3Y2hhcl90ICp2cGF0aDsKQEAgLTM0Niw3ICszNDUsNyBAQAogICAgICAgICAgICAgd2NzbmNweShwcmVmaXgsIGFyZ3YwX3BhdGgsIE1BWFBBVEhMRU4pOwogICAgICAgICAgICAgcHJlZml4W01BWFBBVEhMRU5dID0gTCdcMCc7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIHZwYXRoKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUodnBhdGgpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh2cGF0aCk7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIEwiTGliIik7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIExBTkRNQVJLKTsKICAgICAgICAgICAgIGlmIChpc21vZHVsZShwcmVmaXgpKQpAQCAtMzgzLDcgKzM4Miw4IEBACiAgICBNQVhQQVRITEVOIGJ5dGVzIGxvbmcuCiAqLwogc3RhdGljIGludAotc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfZXhlY19wcmVmaXgpCitzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKl9leGVjX3ByZWZpeCwgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKIApAQCAtNDkzLDEyICs0OTMsMTQgQEAKICAgICBjaGFyIGV4ZWNwYXRoW01BWFBBVEhMRU4rMV07CiAjZW5kaWYKICAgICB3Y2hhcl90ICpfcHl0aG9ucGF0aCwgKl9wcmVmaXgsICpfZXhlY19wcmVmaXg7CisgICAgd2NoYXJfdCAqbGliX3B5dGhvbjsKIAogICAgIF9weXRob25wYXRoID0gX1B5X2NoYXIyd2NoYXIoUFlUSE9OUEFUSCwgTlVMTCk7CiAgICAgX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKFBSRUZJWCwgTlVMTCk7CiAgICAgX2V4ZWNfcHJlZml4ID0gX1B5X2NoYXIyd2NoYXIoRVhFQ19QUkVGSVgsIE5VTEwpOworICAgIGxpYl9weXRob24gPSBfUHlfY2hhcjJ3Y2hhcigibGliL3B5dGhvbiIgVkVSU0lPTiwgTlVMTCk7CiAKLSAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXgpIHsKKyAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXggfHwgIWxpYl9weXRob24pIHsKICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICJVbmFibGUgdG8gZGVjb2RlIHBhdGggdmFyaWFibGVzIGluIGdldHBhdGguYzogIgogICAgICAgICAgICAgIm1lbW9yeSBlcnJvciIpOwpAQCAtNTYyLDggKzU2NCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgIGlmIChwYXRoX2J1ZmZlciAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHBhdGhfYnVmZmVyKTsKKyAgICBQeU1lbV9SYXdGcmVlKHBhdGhfYnVmZmVyKTsKICAgICBpZiAocHJvZ3BhdGhbMF0gIT0gU0VQICYmIHByb2dwYXRoWzBdICE9ICdcMCcpCiAgICAgICAgIGFic29sdXRpemUocHJvZ3BhdGgpOwogICAgIHdjc25jcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pOwpAQCAtNjA1LDcgKzYwNiw3IEBACiAgICAgICAgICAgICAvKiBVc2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGFzIHRoZSBwcm9ncGF0aCAqLwogICAgICAgICAgICAgd2NzbmNweShhcmd2MF9wYXRoLCB3YnVmLCBNQVhQQVRITEVOKTsKICAgICAgICAgfQotICAgICAgICBQeU1lbV9GcmVlKHdidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIH0KICNlbmRpZgogCkBAIC02NjcsNyArNjY4LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghKHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgpKSkgeworICAgIHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgsIGxpYl9weXRob24pOworICAgIGlmICghcGZvdW5kKSB7CiAgICAgICAgIGlmICghUHlfRnJvemVuRmxhZykKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBsaWJyYXJpZXMgPHByZWZpeD5cbiIpOwpAQCAtNjkwLDcgKzY5Miw5IEBACiAgICAgemlwX3BhdGhbYnVmc3ogLSA2XSA9IFZFUlNJT05bMF07CiAgICAgemlwX3BhdGhbYnVmc3ogLSA1XSA9IFZFUlNJT05bMl07CiAKLSAgICBpZiAoIShlZm91bmQgPSBzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9leGVjX3ByZWZpeCkpKSB7CisgICAgZWZvdW5kID0gc2VhcmNoX2Zvcl9leGVjX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V4ZWNfcHJlZml4LCBsaWJfcHl0aG9uKTsKKyAgICBpZiAoIWVmb3VuZCkgewogICAgICAgICBpZiAoIVB5X0Zyb3plbkZsYWcpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgcGxhdGZvcm0gZGVwZW5kZW50IGxpYnJhcmllcyA8ZXhlY19wcmVmaXg+XG4iKTsKQEAgLTcwNywxMyArNzExLDExIEBACiAgICAgICovCiAgICAgYnVmc3ogPSAwOwogCi0gICAgaWYgKF9ydHB5cGF0aCkgeworICAgIGlmIChfcnRweXBhdGggJiYgX3J0cHlwYXRoWzBdICE9ICdcMCcpIHsKICAgICAgICAgc2l6ZV90IHJ0cHlwYXRoX2xlbjsKICAgICAgICAgcnRweXBhdGggPSBfUHlfY2hhcjJ3Y2hhcihfcnRweXBhdGgsICZydHB5cGF0aF9sZW4pOwogICAgICAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKICAgICAgICAgICAgIGJ1ZnN6ICs9IHJ0cHlwYXRoX2xlbiArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9ydHB5cGF0aCA9IE5VTEw7CiAgICAgfQogCiAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwpAQCAtNzM3LDYwICs3MzksNTUgQEAKICAgICBidWZzeiArPSB3Y3NsZW4oemlwX3BhdGgpICsgMTsKICAgICBidWZzeiArPSB3Y3NsZW4oZXhlY19wcmVmaXgpICsgMTsKIAotICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGJ1ZnN6KnNpemVvZih3Y2hhcl90KSk7Ci0KKyAgICBidWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZzeiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IEwiIiBQWVRIT05QQVRIOworICAgICAgICBQeV9GYXRhbEVycm9yKAorICAgICAgICAgICAgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEgiKTsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFJ1bi10aW1lIHZhbHVlIG9mICRQWVRIT05QQVRIIGdvZXMgZmlyc3QgKi8KLSAgICAgICAgaWYgKHJ0cHlwYXRoKSB7Ci0gICAgICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7Ci0gICAgICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1ZlswXSA9ICdcMCc7CiAKLSAgICAgICAgLyogTmV4dCBpcyB0aGUgZGVmYXVsdCB6aXAgcGF0aCAqLwotICAgICAgICB3Y3NjYXQoYnVmLCB6aXBfcGF0aCk7CisgICAgLyogUnVuLXRpbWUgdmFsdWUgb2YgJFBZVEhPTlBBVEggZ29lcyBmaXJzdCAqLworICAgIGlmIChydHB5cGF0aCkgeworICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7CiAgICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogTmV4dCBnb2VzIG1lcmdlIG9mIGNvbXBpbGUtdGltZSAkUFlUSE9OUEFUSCB3aXRoCi0gICAgICAgICAqIGR5bmFtaWNhbGx5IGxvY2F0ZWQgcHJlZml4LgotICAgICAgICAgKi8KLSAgICAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVmcGF0aFswXSAhPSBTRVApIHsKLSAgICAgICAgICAgICAgICB3Y3NjYXQoYnVmLCBwcmVmaXgpOwotICAgICAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkZWxpbSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOwotICAgICAgICAgICAgICAgIHNpemVfdCBlbmQgPSB3Y3NsZW4oYnVmKSArIGxlbjsKLSAgICAgICAgICAgICAgICB3Y3NuY2F0KGJ1ZiwgZGVmcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLwotICAgICAgICB3Y3NjYXQoYnVmLCBleGVjX3ByZWZpeCk7Ci0KLSAgICAgICAgLyogQW5kIHB1Ymxpc2ggdGhlIHJlc3VsdHMgKi8KLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOwogICAgIH0KKyAgICBlbHNlCisgICAgICAgIGJ1ZlswXSA9ICdcMCc7CisKKyAgICAvKiBOZXh0IGlzIHRoZSBkZWZhdWx0IHppcCBwYXRoICovCisgICAgd2NzY2F0KGJ1ZiwgemlwX3BhdGgpOworICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7CisKKyAgICAvKiBOZXh0IGdvZXMgbWVyZ2Ugb2YgY29tcGlsZS10aW1lICRQWVRIT05QQVRIIHdpdGgKKyAgICAgKiBkeW5hbWljYWxseSBsb2NhdGVkIHByZWZpeC4KKyAgICAgKi8KKyAgICBkZWZwYXRoID0gX3B5dGhvbnBhdGg7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOworCisgICAgICAgIGlmIChkZWZwYXRoWzBdICE9IFNFUCkgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgcHJlZml4KTsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVsaW0pIHsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOworICAgICAgICAgICAgc2l6ZV90IGVuZCA9IHdjc2xlbihidWYpICsgbGVuOworICAgICAgICAgICAgd2NzbmNhdChidWYsIGRlZnBhdGgsIGxlbik7CisgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOworICAgIH0KKyAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOworCisgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLworICAgIHdjc2NhdChidWYsIGV4ZWNfcHJlZml4KTsKKworICAgIC8qIEFuZCBwdWJsaXNoIHRoZSByZXN1bHRzICovCisgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwogCiAgICAgLyogUmVkdWNlIHByZWZpeCBhbmQgZXhlY19wcmVmaXggdG8gdGhlaXIgZXNzZW5jZSwKICAgICAgKiBlLmcuIC91c3IvbG9jYWwvbGliL3B5dGhvbjEuNSBpcyByZWR1Y2VkIHRvIC91c3IvbG9jYWwuCkBAIC04MTgsMTEgKzgxNSwxMSBAQAogICAgIGVsc2UKICAgICAgICAgd2NzbmNweShleGVjX3ByZWZpeCwgX2V4ZWNfcHJlZml4LCBNQVhQQVRITEVOKTsKIAotICAgIFB5TWVtX0ZyZWUoX3B5dGhvbnBhdGgpOwotICAgIFB5TWVtX0ZyZWUoX3ByZWZpeCk7Ci0gICAgUHlNZW1fRnJlZShfZXhlY19wcmVmaXgpOwotICAgIGlmIChydHB5cGF0aCAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHJ0cHlwYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9weXRob25wYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9wcmVmaXgpOworICAgIFB5TWVtX1Jhd0ZyZWUoX2V4ZWNfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKGxpYl9weXRob24pOworICAgIFB5TWVtX1Jhd0ZyZWUocnRweXBhdGgpOwogfQogCiAKQEAgLTgzMSwxOCArODI4LDE1IEBACiBQeV9TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQpCi0gICAgICAgICAgICBQeU1lbV9GcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobW9kdWxlX3NlYXJjaF9wYXRoKTsKICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMDsKICAgICB9CiAgICAgaWYgKHBhdGggIT0gTlVMTCkgewogICAgICAgICBleHRlcm4gd2NoYXJfdCAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7CiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgZXhlY19wcmVmaXhbMF0gPSBwcmVmaXhbMF0gPSBMJ1wwJzsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUHlNZW1fTWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDE7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpCiAgICAgICAgICAgICB3Y3NjcHkobW9kdWxlX3NlYXJjaF9wYXRoLCBwYXRoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dycG1vZHVsZS5jIGIvTW9kdWxlcy9ncnBtb2R1bGUuYwppbmRleCAwNDJjZjA1Li5hODVhMjcxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dycG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKQEAgLTIxMCw5ICsyMTAsMTQgQEAKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0R3JwVHlwZSwgJnN0cnVjdF9ncm91cF90eXBlX2Rlc2MpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJzdHJ1Y3RfZ3JvdXAiLCAoUHlPYmplY3QgKikgJlN0cnVjdEdycFR5cGUpOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RHcnBUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ncm91cF90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInN0cnVjdF9ncm91cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZTdHJ1Y3RHcnBUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGluaXRpYWxpemVkID0gMTsKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaGxpYi5oIGIvTW9kdWxlcy9oYXNobGliLmgKaW5kZXggNDU5OTE0Ni4uNTFjNjhmNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9oYXNobGliLmgKKysrIGIvTW9kdWxlcy9oYXNobGliLmgKQEAgLTI2LDMgKzI2LDM2IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICB9IFwKICAgICB9IHdoaWxlKDApOworCisvKgorICogSGVscGVyIGNvZGUgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvIHRoZSBoYXNoIG9iamVjdCB3aGVuIHRoZSBHSUwgaXMKKyAqIHJlbGVhc2VkIGFyb3VuZCBhIENQVSBjb25zdW1pbmcgaGFzaGxpYiBvcGVyYXRpb24uIEFsbCBjb2RlIHBhdGhzIHRoYXQKKyAqIGFjY2VzcyBhIG11dGFibGUgcGFydCBvZiBvYmogbXVzdCBiZSBlbmNsb3NlZCBpbiBhIEVOVEVSX0hBU0hMSUIgLworICogTEVBVkVfSEFTSExJQiBibG9jayBvciBleHBsaWNpdGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIGxvY2sgaW5zaWRlCisgKiBhIFBZX0JFR0lOIC8gRU5EX0FMTE9XX1RIUkVBRFMgYmxvY2sgaWYgdGhleSB3aXNoIHRvIHJlbGVhc2UgdGhlIEdJTCBmb3IKKyAqIGFuIG9wZXJhdGlvbi4KKyAqLworCisjaWZkZWYgV0lUSF9USFJFQUQKKyNpbmNsdWRlICJweXRocmVhZC5oIgorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKKyAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKKyAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCisgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCisgICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAorICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9CisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAorICAgICAgICB9CisjZWxzZQorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKKyNlbmRpZgorCisvKiBUT0RPKGdwcyk6IFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBtb2R1bGUgb3IgRVZQb2JqZWN0IGF0dHJpYnV0ZQorICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gb3B0aW1pemUgYmFzZWQgb24gdGhlIHBsYXRmb3JtIHRoZXkncmUgdXNpbmcuICovCisjZGVmaW5lIEhBU0hMSUJfR0lMX01JTlNJWkUgMjA0OAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2h0YWJsZS5jIGIvTW9kdWxlcy9oYXNodGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFlZDUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9oYXNodGFibGUuYwpAQCAtMCwwICsxLDUxOCBAQAorLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoIHRhYmxlIChfUHlfaGFzaHRhYmxlX3QpIGlzIGJhc2VkIG9uIHRoZSBjZnVoYXNoCisgICBwcm9qZWN0OgorICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJjZnUvCisKKyAgIENvcHlyaWdodCBvZiBjZnVoYXNoOgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRpb24gZGF0ZTogMjAwNS0wNi0yNCAyMToyMjo0MAorICAgQXV0aG9yczogRG9uCisgICBDaGFuZ2UgbG9nOgorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUgRG9uIE93ZW5zCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgICBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJoYXNodGFibGUuaCIKKworI2RlZmluZSBIQVNIVEFCTEVfTUlOX1NJWkUgMTYKKyNkZWZpbmUgSEFTSFRBQkxFX0hJR0ggMC41MAorI2RlZmluZSBIQVNIVEFCTEVfTE9XIDAuMTAKKyNkZWZpbmUgSEFTSFRBQkxFX1JFSEFTSF9GQUNUT1IgMi4wIC8gKEhBU0hUQUJMRV9MT1cgKyBIQVNIVEFCTEVfSElHSCkKKworI2RlZmluZSBCVUNLRVRTX0hFQUQoU0xJU1QpIFwKKyAgICAgICAgKChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKilfUHlfU0xJU1RfSEVBRCgmKFNMSVNUKSkpCisjZGVmaW5lIFRBQkxFX0hFQUQoSFQsIEJVQ0tFVCkgXAorICAgICAgICAoKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKV9QeV9TTElTVF9IRUFEKCYoSFQpLT5idWNrZXRzW0JVQ0tFVF0pKQorI2RlZmluZSBFTlRSWV9ORVhUKEVOVFJZKSBcCisgICAgICAgICgoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopX1B5X1NMSVNUX0lURU1fTkVYVChFTlRSWSkpCisjZGVmaW5lIEhBU0hUQUJMRV9JVEVNX1NJWkUoSFQpIFwKKyAgICAgICAgKHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QpICsgKEhUKS0+ZGF0YV9zaXplKQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCBoYXNodGFibGVfcmVoYXNoKF9QeV9oYXNodGFibGVfdCAqaHQpOworCitzdGF0aWMgdm9pZAorX1B5X3NsaXN0X2luaXQoX1B5X3NsaXN0X3QgKmxpc3QpCit7CisgICAgbGlzdC0+aGVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlfc2xpc3RfcHJlcGVuZChfUHlfc2xpc3RfdCAqbGlzdCwgX1B5X3NsaXN0X2l0ZW1fdCAqaXRlbSkKK3sKKyAgICBpdGVtLT5uZXh0ID0gbGlzdC0+aGVhZDsKKyAgICBsaXN0LT5oZWFkID0gaXRlbTsKK30KKworc3RhdGljIHZvaWQKK19QeV9zbGlzdF9yZW1vdmUoX1B5X3NsaXN0X3QgKmxpc3QsIF9QeV9zbGlzdF9pdGVtX3QgKnByZXZpb3VzLAorICAgICAgICAgICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICppdGVtKQoreworICAgIGlmIChwcmV2aW91cyAhPSBOVUxMKQorICAgICAgICBwcmV2aW91cy0+bmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgZWxzZQorICAgICAgICBsaXN0LT5oZWFkID0gaXRlbS0+bmV4dDsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX2ludChjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KWtleTsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX3B0cihjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KV9QeV9IYXNoUG9pbnRlcigodm9pZCAqKWtleSk7Cit9CisKK2ludAorX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpCit7CisgICAgcmV0dXJuIGVudHJ5LT5rZXkgPT0ga2V5OworfQorCisvKiBtYWtlcyBzdXJlIHRoZSByZWFsIHNpemUgb2YgdGhlIGJ1Y2tldHMgYXJyYXkgaXMgYSBwb3dlciBvZiAyICovCitzdGF0aWMgc2l6ZV90Cityb3VuZF9zaXplKHNpemVfdCBzKQoreworICAgIHNpemVfdCBpOworICAgIGlmIChzIDwgSEFTSFRBQkxFX01JTl9TSVpFKQorICAgICAgICByZXR1cm4gSEFTSFRBQkxFX01JTl9TSVpFOworICAgIGkgPSAxOworICAgIHdoaWxlIChpIDwgcykKKyAgICAgICAgaSA8PD0gMTsKKyAgICByZXR1cm4gaTsKK30KKworX1B5X2hhc2h0YWJsZV90ICoKK19QeV9oYXNodGFibGVfbmV3X2Z1bGwoc2l6ZV90IGRhdGFfc2l6ZSwgc2l6ZV90IGluaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCAqYWxsb2NhdG9yKQoreworICAgIF9QeV9oYXNodGFibGVfdCAqaHQ7CisgICAgc2l6ZV90IGJ1Y2tldHNfc2l6ZTsKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGFsbG9jOworCisgICAgaWYgKGFsbG9jYXRvciA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLm1hbGxvYyA9IFB5TWVtX1Jhd01hbGxvYzsKKyAgICAgICAgYWxsb2MuZnJlZSA9IFB5TWVtX1Jhd0ZyZWU7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgYWxsb2MgPSAqYWxsb2NhdG9yOworCisgICAgaHQgPSAoX1B5X2hhc2h0YWJsZV90ICopYWxsb2MubWFsbG9jKHNpemVvZihfUHlfaGFzaHRhYmxlX3QpKTsKKyAgICBpZiAoaHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGh0OworCisgICAgaHQtPm51bV9idWNrZXRzID0gcm91bmRfc2l6ZShpbml0X3NpemUpOworICAgIGh0LT5lbnRyaWVzID0gMDsKKyAgICBodC0+ZGF0YV9zaXplID0gZGF0YV9zaXplOworCisgICAgYnVja2V0c19zaXplID0gaHQtPm51bV9idWNrZXRzICogc2l6ZW9mKGh0LT5idWNrZXRzWzBdKTsKKyAgICBodC0+YnVja2V0cyA9IGFsbG9jLm1hbGxvYyhidWNrZXRzX3NpemUpOworICAgIGlmIChodC0+YnVja2V0cyA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLmZyZWUoaHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtc2V0KGh0LT5idWNrZXRzLCAwLCBidWNrZXRzX3NpemUpOworCisgICAgaHQtPmhhc2hfZnVuYyA9IGhhc2hfZnVuYzsKKyAgICBodC0+Y29tcGFyZV9mdW5jID0gY29tcGFyZV9mdW5jOworICAgIGh0LT5jb3B5X2RhdGFfZnVuYyA9IGNvcHlfZGF0YV9mdW5jOworICAgIGh0LT5mcmVlX2RhdGFfZnVuYyA9IGZyZWVfZGF0YV9mdW5jOworICAgIGh0LT5nZXRfZGF0YV9zaXplX2Z1bmMgPSBnZXRfZGF0YV9zaXplX2Z1bmM7CisgICAgaHQtPmFsbG9jID0gYWxsb2M7CisgICAgcmV0dXJuIGh0OworfQorCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9uZXcoc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYykKK3sKKyAgICByZXR1cm4gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChkYXRhX3NpemUsIEhBU0hUQUJMRV9NSU5fU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Z1bmMsIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc2l6ZV90CitfUHlfaGFzaHRhYmxlX3NpemUoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgaHY7CisKKyAgICBzaXplID0gc2l6ZW9mKF9QeV9oYXNodGFibGVfdCk7CisKKyAgICAvKiBidWNrZXRzICovCisgICAgc2l6ZSArPSBodC0+bnVtX2J1Y2tldHMgKiBzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopOworCisgICAgLyogZW50cmllcyAqLworICAgIHNpemUgKz0gaHQtPmVudHJpZXMgKiBIQVNIVEFCTEVfSVRFTV9TSVpFKGh0KTsKKworICAgIC8qIGRhdGEgbGlua2VkIGZyb20gZW50cmllcyAqLworICAgIGlmIChodC0+Z2V0X2RhdGFfc2l6ZV9mdW5jKSB7CisgICAgICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgICAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgICAgICB2b2lkICpkYXRhOworCisgICAgICAgICAgICAgICAgZGF0YSA9IF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgICAgICAgICAgICAgIHNpemUgKz0gaHQtPmdldF9kYXRhX3NpemVfZnVuYyhkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KKworI2lmZGVmIFB5X0RFQlVHCit2b2lkCitfUHlfaGFzaHRhYmxlX3ByaW50X3N0YXRzKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGNoYWluX2xlbiwgbWF4X2NoYWluX2xlbiwgdG90YWxfY2hhaW5fbGVuLCBuY2hhaW5zOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGh2OworICAgIGRvdWJsZSBsb2FkOworCisgICAgc2l6ZSA9IF9QeV9oYXNodGFibGVfc2l6ZShodCk7CisKKyAgICBsb2FkID0gKGRvdWJsZSlodC0+ZW50cmllcyAvIGh0LT5udW1fYnVja2V0czsKKworICAgIG1heF9jaGFpbl9sZW4gPSAwOworICAgIHRvdGFsX2NoYWluX2xlbiA9IDA7CisgICAgbmNoYWlucyA9IDA7CisgICAgZm9yIChodiA9IDA7IGh2IDwgaHQtPm51bV9idWNrZXRzOyBodisrKSB7CisgICAgICAgIGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOworICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICAgICAgY2hhaW5fbGVuID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgICAgIGNoYWluX2xlbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYWluX2xlbiA+IG1heF9jaGFpbl9sZW4pCisgICAgICAgICAgICAgICAgbWF4X2NoYWluX2xlbiA9IGNoYWluX2xlbjsKKyAgICAgICAgICAgIHRvdGFsX2NoYWluX2xlbiArPSBjaGFpbl9sZW47CisgICAgICAgICAgICBuY2hhaW5zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRmKCJoYXNoIHRhYmxlICVwOiBlbnRyaWVzPSV6dS8lenUgKCUuMGYlJSksICIsCisgICAgICAgICAgIGh0LCBodC0+ZW50cmllcywgaHQtPm51bV9idWNrZXRzLCBsb2FkICogMTAwLjApOworICAgIGlmIChuY2hhaW5zKQorICAgICAgICBwcmludGYoImF2Z19jaGFpbl9sZW49JS4xZiwgIiwgKGRvdWJsZSl0b3RhbF9jaGFpbl9sZW4gLyBuY2hhaW5zKTsKKyAgICBwcmludGYoIm1heF9jaGFpbl9sZW49JXp1LCAlenUga0JcbiIsCisgICAgICAgICAgIG1heF9jaGFpbl9sZW4sIHNpemUgLyAxMDI0KTsKK30KKyNlbmRpZgorCisvKiBHZXQgYW4gZW50cnkuIFJldHVybiBOVUxMIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuICovCitfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKgorX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5KQoreworICAgIFB5X3VoYXNoX3Qga2V5X2hhc2g7CisgICAgc2l6ZV90IGluZGV4OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBrZXlfaGFzaCA9IGh0LT5oYXNoX2Z1bmMoa2V5KTsKKyAgICBpbmRleCA9IGtleV9oYXNoICYgKGh0LT5udW1fYnVja2V0cyAtIDEpOworCisgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGluZGV4KTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICBpZiAoZW50cnktPmtleV9oYXNoID09IGtleV9oYXNoICYmIGh0LT5jb21wYXJlX2Z1bmMoa2V5LCBlbnRyeSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQKK19oYXNodGFibGVfcG9wX2VudHJ5KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCAqcHJldmlvdXM7CisKKyAgICBrZXlfaGFzaCA9IGh0LT5oYXNoX2Z1bmMoa2V5KTsKKyAgICBpbmRleCA9IGtleV9oYXNoICYgKGh0LT5udW1fYnVja2V0cyAtIDEpOworCisgICAgcHJldmlvdXMgPSBOVUxMOworICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBpbmRleCk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXlfaGFzaCA9PSBrZXlfaGFzaCAmJiBodC0+Y29tcGFyZV9mdW5jKGtleSwgZW50cnkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHByZXZpb3VzID0gZW50cnk7CisgICAgfQorCisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgX1B5X3NsaXN0X3JlbW92ZSgmaHQtPmJ1Y2tldHNbaW5kZXhdLCAoX1B5X3NsaXN0X2l0ZW1fdCAqKXByZXZpb3VzLAorICAgICAgICAgICAgICAgICAgICAgKF9QeV9zbGlzdF9pdGVtX3QgKillbnRyeSk7CisgICAgaHQtPmVudHJpZXMtLTsKKworICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIF9QeV9IQVNIVEFCTEVfRU5UUllfUkVBRF9EQVRBKGh0LCBkYXRhLCBkYXRhX3NpemUsIGVudHJ5KTsKKyAgICBodC0+YWxsb2MuZnJlZShlbnRyeSk7CisKKyAgICBpZiAoKGZsb2F0KWh0LT5lbnRyaWVzIC8gKGZsb2F0KWh0LT5udW1fYnVja2V0cyA8IEhBU0hUQUJMRV9MT1cpCisgICAgICAgIGhhc2h0YWJsZV9yZWhhc2goaHQpOworICAgIHJldHVybiAxOworfQorCisvKiBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGhhc2guIFRoZSBrZXkgbXVzdCBub3QgYmUgcHJlc2VudCBpbiB0aGUgaGFzaCB0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIG1lbW9yeSBlcnJvci4gKi8KK2ludAorX1B5X2hhc2h0YWJsZV9zZXQoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LAorICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgYXNzZXJ0KGRhdGEgIT0gTlVMTCB8fCBkYXRhX3NpemUgPT0gMCk7CisjaWZuZGVmIE5ERUJVRworICAgIC8qIERvbid0IHdyaXRlIHRoZSBhc3NlcnRpb24gb24gYSBzaW5nbGUgbGluZSBiZWNhdXNlIGl0IGlzIGludGVyZXN0aW5nCisgICAgICAgdG8ga25vdyB0aGUgZHVwbGljYXRlZCBlbnRyeSBpZiB0aGUgYXNzZXJ0aW9uIGZhaWxlZC4gVGhlIGVudHJ5IGNhbgorICAgICAgIGJlIHJlYWQgdXNpbmcgYSBkZWJ1Z2dlci4gKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KGh0LCBrZXkpOworICAgIGFzc2VydChlbnRyeSA9PSBOVUxMKTsKKyNlbmRpZgorCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIGVudHJ5ID0gaHQtPmFsbG9jLm1hbGxvYyhIQVNIVEFCTEVfSVRFTV9TSVpFKGh0KSk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKKyAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBlbnRyeS0+a2V5ID0gKHZvaWQgKilrZXk7CisgICAgZW50cnktPmtleV9oYXNoID0ga2V5X2hhc2g7CisKKyAgICBhc3NlcnQoZGF0YV9zaXplID09IGh0LT5kYXRhX3NpemUpOworICAgIG1lbWNweShfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpLCBkYXRhLCBkYXRhX3NpemUpOworCisgICAgX1B5X3NsaXN0X3ByZXBlbmQoJmh0LT5idWNrZXRzW2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QqKWVudHJ5KTsKKyAgICBodC0+ZW50cmllcysrOworCisgICAgaWYgKChmbG9hdClodC0+ZW50cmllcyAvIChmbG9hdClodC0+bnVtX2J1Y2tldHMgPiBIQVNIVEFCTEVfSElHSCkKKyAgICAgICAgaGFzaHRhYmxlX3JlaGFzaChodCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEdldCBkYXRhIGZyb20gYW4gZW50cnkuIENvcHkgZW50cnkgZGF0YSBpbnRvIGRhdGEgYW5kIHJldHVybiAxIGlmIHRoZSBlbnRyeQorICAgZXhpc3RzLCByZXR1cm4gMCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuICovCitpbnQKK19QeV9oYXNodGFibGVfZ2V0KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgYXNzZXJ0KGRhdGEgIT0gTlVMTCk7CisKKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KGh0LCBrZXkpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShodCwgZGF0YSwgZGF0YV9zaXplLCBlbnRyeSk7CisgICAgcmV0dXJuIDE7Cit9CisKK2ludAorX1B5X2hhc2h0YWJsZV9wb3AoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zaXplKQoreworICAgIGFzc2VydChkYXRhICE9IE5VTEwpOworICAgIGFzc2VydChodC0+ZnJlZV9kYXRhX2Z1bmMgPT0gTlVMTCk7CisgICAgcmV0dXJuIF9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIGRhdGEsIGRhdGFfc2l6ZSk7Cit9CisKKy8qIERlbGV0ZSBhbiBlbnRyeS4gVGhlIGVudHJ5IG11c3QgZXhpc3QuICovCit2b2lkCitfUHlfaGFzaHRhYmxlX2RlbGV0ZShfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXkpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGludCBmb3VuZCA9IF9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIE5VTEwsIDApOworICAgIGFzc2VydChmb3VuZCk7CisjZWxzZQorICAgICh2b2lkKV9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIE5VTEwsIDApOworI2VuZGlmCit9CisKKy8qIFByb3RvdHlwZSBmb3IgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvcmVhY2gKKyAgIGtleS92YWx1ZSBwYWlyIGluIHRoZSBoYXNoIGJ5IGhhc2h0YWJsZV9mb3JlYWNoKCkuICBJdGVyYXRpb24KKyAgIHN0b3BzIGlmIGEgbm9uLXplcm8gdmFsdWUgaXMgcmV0dXJuZWQuICovCitpbnQKK19QeV9oYXNodGFibGVfZm9yZWFjaChfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpIChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICphcmcpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworICAgIHNpemVfdCBodjsKKworICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgaW50IHJlcyA9IGZ1bmMoZW50cnksIGFyZyk7CisgICAgICAgICAgICBpZiAocmVzKQorICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitoYXNodGFibGVfcmVoYXNoKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IGJ1Y2tldHNfc2l6ZSwgbmV3X3NpemUsIGJ1Y2tldDsKKyAgICBfUHlfc2xpc3RfdCAqb2xkX2J1Y2tldHMgPSBOVUxMOworICAgIHNpemVfdCBvbGRfbnVtX2J1Y2tldHM7CisKKyAgICBuZXdfc2l6ZSA9IHJvdW5kX3NpemUoKHNpemVfdCkoaHQtPmVudHJpZXMgKiBIQVNIVEFCTEVfUkVIQVNIX0ZBQ1RPUikpOworICAgIGlmIChuZXdfc2l6ZSA9PSBodC0+bnVtX2J1Y2tldHMpCisgICAgICAgIHJldHVybjsKKworICAgIG9sZF9udW1fYnVja2V0cyA9IGh0LT5udW1fYnVja2V0czsKKworICAgIGJ1Y2tldHNfc2l6ZSA9IG5ld19zaXplICogc2l6ZW9mKGh0LT5idWNrZXRzWzBdKTsKKyAgICBvbGRfYnVja2V0cyA9IGh0LT5idWNrZXRzOworICAgIGh0LT5idWNrZXRzID0gaHQtPmFsbG9jLm1hbGxvYyhidWNrZXRzX3NpemUpOworICAgIGlmIChodC0+YnVja2V0cyA9PSBOVUxMKSB7CisgICAgICAgIC8qIGNhbmNlbCByZWhhc2ggb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAqLworICAgICAgICBodC0+YnVja2V0cyA9IG9sZF9idWNrZXRzIDsKKyAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbWVtc2V0KGh0LT5idWNrZXRzLCAwLCBidWNrZXRzX3NpemUpOworCisgICAgaHQtPm51bV9idWNrZXRzID0gbmV3X3NpemU7CisKKyAgICBmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCA8IG9sZF9udW1fYnVja2V0czsgYnVja2V0KyspIHsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgKm5leHQ7CisgICAgICAgIGZvciAoZW50cnkgPSBCVUNLRVRTX0hFQUQob2xkX2J1Y2tldHNbYnVja2V0XSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gbmV4dCkgeworICAgICAgICAgICAgc2l6ZV90IGVudHJ5X2luZGV4OworCisgICAgICAgICAgICBhc3NlcnQoaHQtPmhhc2hfZnVuYyhlbnRyeS0+a2V5KSA9PSBlbnRyeS0+a2V5X2hhc2gpOworICAgICAgICAgICAgbmV4dCA9IEVOVFJZX05FWFQoZW50cnkpOworICAgICAgICAgICAgZW50cnlfaW5kZXggPSBlbnRyeS0+a2V5X2hhc2ggJiAobmV3X3NpemUgLSAxKTsKKworICAgICAgICAgICAgX1B5X3NsaXN0X3ByZXBlbmQoJmh0LT5idWNrZXRzW2VudHJ5X2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QqKWVudHJ5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGh0LT5hbGxvYy5mcmVlKG9sZF9idWNrZXRzKTsKK30KKwordm9pZAorX1B5X2hhc2h0YWJsZV9jbGVhcihfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksICpuZXh0OworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpPTA7IGkgPCBodC0+bnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IEVOVFJZX05FWFQoZW50cnkpOworICAgICAgICAgICAgaWYgKGh0LT5mcmVlX2RhdGFfZnVuYykKKyAgICAgICAgICAgICAgICBodC0+ZnJlZV9kYXRhX2Z1bmMoX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSkpOworICAgICAgICAgICAgaHQtPmFsbG9jLmZyZWUoZW50cnkpOworICAgICAgICB9CisgICAgICAgIF9QeV9zbGlzdF9pbml0KCZodC0+YnVja2V0c1tpXSk7CisgICAgfQorICAgIGh0LT5lbnRyaWVzID0gMDsKKyAgICBoYXNodGFibGVfcmVoYXNoKGh0KTsKK30KKwordm9pZAorX1B5X2hhc2h0YWJsZV9kZXN0cm95KF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgaHQtPm51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgX1B5X3NsaXN0X2l0ZW1fdCAqZW50cnkgPSBodC0+YnVja2V0c1tpXS5oZWFkOworICAgICAgICB3aGlsZSAoZW50cnkpIHsKKyAgICAgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKmVudHJ5X25leHQgPSBlbnRyeS0+bmV4dDsKKyAgICAgICAgICAgIGlmIChodC0+ZnJlZV9kYXRhX2Z1bmMpCisgICAgICAgICAgICAgICAgaHQtPmZyZWVfZGF0YV9mdW5jKF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpKTsKKyAgICAgICAgICAgIGh0LT5hbGxvYy5mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIGVudHJ5ID0gZW50cnlfbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGh0LT5hbGxvYy5mcmVlKGh0LT5idWNrZXRzKTsKKyAgICBodC0+YWxsb2MuZnJlZShodCk7Cit9CisKKy8qIFJldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggdGFibGUgKi8KK19QeV9oYXNodGFibGVfdCAqCitfUHlfaGFzaHRhYmxlX2NvcHkoX1B5X2hhc2h0YWJsZV90ICpzcmMpCit7CisgICAgX1B5X2hhc2h0YWJsZV90ICpkc3Q7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgYnVja2V0OworICAgIGludCBlcnI7CisgICAgdm9pZCAqZGF0YSwgKm5ld19kYXRhOworCisgICAgZHN0ID0gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChzcmMtPmRhdGFfc2l6ZSwgc3JjLT5udW1fYnVja2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPmhhc2hfZnVuYywgc3JjLT5jb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5jb3B5X2RhdGFfZnVuYywgc3JjLT5mcmVlX2RhdGFfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPmdldF9kYXRhX3NpemVfZnVuYywgJnNyYy0+YWxsb2MpOworICAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGJ1Y2tldD0wOyBidWNrZXQgPCBzcmMtPm51bV9idWNrZXRzOyBidWNrZXQrKykgeworICAgICAgICBlbnRyeSA9IFRBQkxFX0hFQUQoc3JjLCBidWNrZXQpOworICAgICAgICBmb3IgKDsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgIGlmIChzcmMtPmNvcHlfZGF0YV9mdW5jKSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgICAgICAgICAgICAgIG5ld19kYXRhID0gc3JjLT5jb3B5X2RhdGFfZnVuYyhkYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3X2RhdGEgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9zZXQoZHN0LCBlbnRyeS0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfZGF0YSwgc3JjLT5kYXRhX3NpemUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRhdGEgPSBfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpOworICAgICAgICAgICAgICAgIGVyciA9IF9QeV9oYXNodGFibGVfc2V0KGRzdCwgZW50cnktPmtleSwgZGF0YSwgc3JjLT5kYXRhX3NpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZGVzdHJveShkc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaHRhYmxlLmggYi9Nb2R1bGVzL2hhc2h0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOWU0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2hhc2h0YWJsZS5oCkBAIC0wLDAgKzEsMTI4IEBACisjaWZuZGVmIFB5X0hBU0hUQUJMRV9ICisjZGVmaW5lIFB5X0hBU0hUQUJMRV9ICisKKy8qIFRoZSB3aG9sZSBBUEkgaXMgcHJpdmF0ZSAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorCit0eXBlZGVmIHN0cnVjdCBfUHlfc2xpc3RfaXRlbV9zIHsKKyAgICBzdHJ1Y3QgX1B5X3NsaXN0X2l0ZW1fcyAqbmV4dDsKK30gX1B5X3NsaXN0X2l0ZW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIF9QeV9zbGlzdF9pdGVtX3QgKmhlYWQ7Cit9IF9QeV9zbGlzdF90OworCisjZGVmaW5lIF9QeV9TTElTVF9JVEVNX05FWFQoSVRFTSkgKCgoX1B5X3NsaXN0X2l0ZW1fdCAqKUlURU0pLT5uZXh0KQorCisjZGVmaW5lIF9QeV9TTElTVF9IRUFEKFNMSVNUKSAoKChfUHlfc2xpc3RfdCAqKVNMSVNUKS0+aGVhZCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZWQgYnkgX1B5X2hhc2h0YWJsZV90LmJ1Y2tldHMgdG8gbGluayBlbnRyaWVzICovCisgICAgX1B5X3NsaXN0X2l0ZW1fdCBfUHlfc2xpc3RfaXRlbTsKKworICAgIGNvbnN0IHZvaWQgKmtleTsKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworCisgICAgLyogZGF0YSBmb2xsb3dzICovCit9IF9QeV9oYXNodGFibGVfZW50cnlfdDsKKworI2RlZmluZSBfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpIFwKKyAgICAgICAgKChjaGFyICopKEVOVFJZKSArIHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoRU5UUlkpIFwKKyAgICAgICAgKCoodm9pZCAqKilfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfRU5UUllfUkVBRF9EQVRBKFRBQkxFLCBEQVRBLCBEQVRBX1NJWkUsIEVOVFJZKSBcCisgICAgZG8geyBcCisgICAgICAgIGFzc2VydCgoREFUQV9TSVpFKSA9PSAoVEFCTEUpLT5kYXRhX3NpemUpOyBcCisgICAgICAgIG1lbWNweShEQVRBLCBfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpLCBEQVRBX1NJWkUpOyBcCisgICAgfSB3aGlsZSAoMCkKKwordHlwZWRlZiBQeV91aGFzaF90ICgqX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMpIChjb25zdCB2b2lkICprZXkpOwordHlwZWRlZiBpbnQgKCpfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYykgKGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICpoZSk7Cit0eXBlZGVmIHZvaWQqICgqX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYykodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jKSh2b2lkICpkYXRhKTsKK3R5cGVkZWYgc2l6ZV90ICgqX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMpKHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKm1hbGxvYykgKHNpemVfdCBzaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKnB0cik7Cit9IF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzaXplX3QgbnVtX2J1Y2tldHM7CisgICAgc2l6ZV90IGVudHJpZXM7IC8qIFRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZS4gKi8KKyAgICBfUHlfc2xpc3RfdCAqYnVja2V0czsKKyAgICBzaXplX3QgZGF0YV9zaXplOworCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jOworICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jIGNvcHlfZGF0YV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgYWxsb2M7Cit9IF9QeV9oYXNodGFibGVfdDsKKworLyogaGFzaCBhbmQgY29tcGFyZSBmdW5jdGlvbnMgZm9yIGludGVnZXJzIGFuZCBwb2ludGVycyAqLworUHlBUElfRlVOQyhQeV91aGFzaF90KSBfUHlfaGFzaHRhYmxlX2hhc2hfcHRyKGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKFB5X3VoYXNoX3QpIF9QeV9oYXNodGFibGVfaGFzaF9pbnQoY29uc3Qgdm9pZCAqa2V5KTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSk7CisKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV90ICopIF9QeV9oYXNodGFibGVfbmV3KAorICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYyk7CitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX25ld19mdWxsKAorICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgc2l6ZV90IGluaXRfc2l6ZSwKKyAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYyBmcmVlX2RhdGFfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2dldF9kYXRhX3NpemVfZnVuYyBnZXRfZGF0YV9zaXplX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCAqYWxsb2NhdG9yKTsKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV90ICopIF9QeV9oYXNodGFibGVfY29weShfUHlfaGFzaHRhYmxlX3QgKnNyYyk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfY2xlYXIoX1B5X2hhc2h0YWJsZV90ICpodCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfZGVzdHJveShfUHlfaGFzaHRhYmxlX3QgKmh0KTsKKwordHlwZWRlZiBpbnQgKCpfUHlfaGFzaHRhYmxlX2ZvcmVhY2hfZnVuYykgKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKmFyZyk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2ZvcmVhY2goCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2hfZnVuYyBmdW5jLCB2b2lkICphcmcpOworUHlBUElfRlVOQyhzaXplX3QpIF9QeV9oYXNodGFibGVfc2l6ZShfUHlfaGFzaHRhYmxlX3QgKmh0KTsKKworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX2VudHJ5X3QqKSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9zZXQoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXksCisgICAgdm9pZCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9zaXplKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2dldCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICB2b2lkICpkYXRhLAorICAgIHNpemVfdCBkYXRhX3NpemUpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfcG9wKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgIHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfZGVsZXRlKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5KTsKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX1NFVChUQUJMRSwgS0VZLCBEQVRBKSBcCisgICAgX1B5X2hhc2h0YWJsZV9zZXQoVEFCTEUsIEtFWSwgJihEQVRBKSwgc2l6ZW9mKERBVEEpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfR0VUKFRBQkxFLCBLRVksIERBVEEpIFwKKyAgICBfUHlfaGFzaHRhYmxlX2dldChUQUJMRSwgS0VZLCAmKERBVEEpLCBzaXplb2YoREFUQSkpCisKKyNlbmRpZiAgIC8qIFB5X0xJTUlURURfQVBJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYyBiL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKaW5kZXggMDEyMzE4MS4uOGJlNjJjZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYworKysgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlPYmplY3QgKml0OwotICAgIGludCBudW1yZWFkOworICAgIGludCBudW1yZWFkOyAgLyogMCA8PSBudW1yZWFkIDw9IExJTktDRUxMUyAqLwogICAgIFB5T2JqZWN0ICpuZXh0bGluazsKICAgICBQeU9iamVjdCAqKHZhbHVlc1tMSU5LQ0VMTFNdKTsKIH0gdGVlZGF0YW9iamVjdDsKQEAgLTQwOSw3ICs0MDksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICB0ZWVkYXRhb2JqZWN0ICpkYXRhb2JqOwotICAgIGludCBpbmRleDsKKyAgICBpbnQgaW5kZXg7ICAgIC8qIDAgPD0gaW5kZXggPD0gTElOS0NFTExTICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogfSB0ZWVvYmplY3Q7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFpbi5jIGIvTW9kdWxlcy9tYWluLmMKaW5kZXggM2NmYzljMy4uOTE3MTA3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYWluLmMKKysrIGIvTW9kdWxlcy9tYWluLmMKQEAgLTIyLDE1ICsyMiwxMSBAQAogI2luY2x1ZGUgPGNydGRiZy5oPgogI2VuZGlmCiAKLSNpZiAoZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD5cXGxpYiIKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+L0xpYiIKLSNlbHNlCiAjZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4Pi9weXRob25YLlgiCiAjZW5kaWYKLSNlbmRpZgogCiAjaW5jbHVkZSAicHlnZXRvcHQuaCIKIApAQCAtNDcsNyArNDMsNyBAQAogc3RhdGljIGludCAgb3JpZ19hcmdjOwogCiAvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLwotI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUptOk9xUnNTdHV2Vlc6eFg6PyIKKyNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlJSm06T3FSc1N0dXZWVzp4WDo/IgogCiAjZGVmaW5lIFBST0dSQU1fT1BUUyBCQVNFX09QVFMKIApAQCAtNjksNiArNjUsNyBAQAogc3RhdGljIGNoYXIgKnVzYWdlXzIgPSAiXAogLWkgICAgIDogaW5zcGVjdCBpbnRlcmFjdGl2ZWx5IGFmdGVyIHJ1bm5pbmcgc2NyaXB0OyBmb3JjZXMgYSBwcm9tcHQgZXZlblxuXAogICAgICAgICAgaWYgc3RkaW4gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdGVybWluYWw7IGFsc28gUFlUSE9OSU5TUEVDVD14XG5cCistSSAgICAgOiBpc29sYXRlIFB5dGhvbiBmcm9tIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQgKGltcGxpZXMgLUUgYW5kIC1zKVxuXAogLW0gbW9kIDogcnVuIGxpYnJhcnkgbW9kdWxlIGFzIGEgc2NyaXB0ICh0ZXJtaW5hdGVzIG9wdGlvbiBsaXN0KVxuXAogLU8gICAgIDogb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlIHNsaWdodGx5OyBhbHNvIFBZVEhPTk9QVElNSVpFPXhcblwKIC1PTyAgICA6IHJlbW92ZSBkb2Mtc3RyaW5ncyBpbiBhZGRpdGlvbiB0byB0aGUgLU8gb3B0aW1pemF0aW9uc1xuXApAQCAtMTQ2LDcgKzE0Myw3IEBACiB7CiAgICAgY2hhciAqc3RhcnR1cCA9IFB5X0dFVEVOVigiUFlUSE9OU1RBUlRVUCIpOwogICAgIGlmIChzdGFydHVwICE9IE5VTEwgJiYgc3RhcnR1cFswXSAhPSAnXDAnKSB7Ci0gICAgICAgIEZJTEUgKmZwID0gZm9wZW4oc3RhcnR1cCwgInIiKTsKKyAgICAgICAgRklMRSAqZnAgPSBfUHlfZm9wZW4oc3RhcnR1cCwgInIiKTsKICAgICAgICAgaWYgKGZwICE9IE5VTEwpIHsKICAgICAgICAgICAgICh2b2lkKSBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyhmcCwgc3RhcnR1cCwgMCwgY2YpOwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTE2NSw2ICsxNjIsMzIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIFJ1bkludGVyYWN0aXZlSG9vayh2b2lkKQoreworICAgIFB5T2JqZWN0ICpzeXMsICpob29rLCAqcmVzdWx0OworICAgIHN5cyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic3lzIik7CisgICAgaWYgKHN5cyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGhvb2sgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN5cywgIl9faW50ZXJhY3RpdmVob29rX18iKTsKKyAgICBQeV9ERUNSRUYoc3lzKTsKKyAgICBpZiAoaG9vayA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhvb2ssIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoaG9vayk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgICByZXR1cm47CisKK2Vycm9yOgorICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJGYWlsZWQgY2FsbGluZyBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX1xuIik7CisgICAgUHlFcnJfUHJpbnQoKTsKKyAgICBQeUVycl9DbGVhcigpOworfQorCiAKIHN0YXRpYyBpbnQgUnVuTW9kdWxlKHdjaGFyX3QgKm1vZG5hbWUsIGludCBzZXRfYXJndjApCiB7CkBAIC0xNzIsMTcgKzE5NSwyMCBAQAogICAgIHJ1bnB5ID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJydW5weSIpOwogICAgIGlmIChydW5weSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGltcG9ydCBydW5weSBtb2R1bGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJ1bm1vZHVsZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcocnVucHksICJfcnVuX21vZHVsZV9hc19tYWluIik7CiAgICAgaWYgKHJ1bm1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGFjY2VzcyBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vZG5hbWUsIHdjc2xlbihtb2RuYW1lKSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgbW9kdWxlIG5hbWUgdG8gdW5pY29kZVxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5tb2R1bGUpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xOTEsNiArMjE3LDcgQEAKICAgICBpZiAocnVuYXJncyA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgYXJndW1lbnRzIGZvciBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgUHlfREVDUkVGKHJ1bm1vZHVsZSk7CiAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwpAQCAtMjM1LDggKzI2MiwxMCBAQAogICAgIC8qIGFyZ3YwIGlzIHVzYWJsZSBhcyBhbiBpbXBvcnQgc291cmNlLCBzbyBwdXQgaXQgaW4gc3lzLnBhdGhbMF0KICAgICAgICBhbmQgaW1wb3J0IF9fbWFpbl9fICovCiAgICAgc3lzX3BhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKLSAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkKKyAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMucGF0aCIpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBpZiAoUHlMaXN0X1NldEl0ZW0oc3lzX3BhdGgsIDAsIGFyZ3YwKSkgewogICAgICAgICBhcmd2MCA9IE5VTEw7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsNyArMzk1LDcgQEAKICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gaW50ZXJwcmV0LiAqLwogCiAgICAgICAgICAgICBsZW4gPSB3Y3NsZW4oX1B5T1Nfb3B0YXJnKSArIDEgKyAxOwotICAgICAgICAgICAgY29tbWFuZCA9ICh3Y2hhcl90ICopbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIGxlbik7CisgICAgICAgICAgICBjb21tYW5kID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogbGVuKTsKICAgICAgICAgICAgIGlmIChjb21tYW5kID09IE5VTEwpCiAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSAtYyBhcmd1bWVudCIpOwpAQCAtMzk4LDYgKzQyNywxMiBAQAogICAgICAgICAgICAgUHlfSW50ZXJhY3RpdmVGbGFnKys7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlICdJJzoKKyAgICAgICAgICAgIFB5X0lzb2xhdGVkRmxhZysrOworICAgICAgICAgICAgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSsrOworICAgICAgICAgICAgUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnKys7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAvKiBjYXNlICdKJzogcmVzZXJ2ZWQgZm9yIEp5dGhvbiAqLwogCiAgICAgICAgIGNhc2UgJ08nOgpAQCAtNDc1LDcgKzUxMCw3IEBACiAgICAgICAgIHJldHVybiB1c2FnZSgwLCBhcmd2WzBdKTsKIAogICAgIGlmICh2ZXJzaW9uKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHl0aG9uICVzXG4iLCBQWV9WRVJTSU9OKTsKKyAgICAgICAgcHJpbnRmKCJQeXRob24gJXNcbiIsIFBZX1ZFUlNJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTQ5NSw3ICs1MzAsNyBAQAogICAgICAgICAqd3AgIT0gTCdcMCcpIHsKICAgICAgICAgd2NoYXJfdCAqYnVmLCAqd2FybmluZzsKIAotICAgICAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYygod2NzbGVuKHdwKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05XQVJOSU5HUyIpOwpAQCAtNTA1LDcgKzU0MCw3IEBACiAgICAgICAgICAgICAgd2FybmluZyA9IHdjc3RvayhOVUxMLCBMIiwiKSkgewogICAgICAgICAgICAgUHlTeXNfQWRkV2Fybk9wdGlvbih3YXJuaW5nKTsKICAgICAgICAgfQotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYnVmKTsKICAgICB9CiAjZWxzZQogICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OV0FSTklOR1MiKSkgJiYgKnAgIT0gJ1wwJykgewpAQCAtNTE0LDEyICs1NDksMTIgQEAKIAogICAgICAgICAvKiBzZXR0bGUgZm9yIHN0cnRvayBoZXJlIGFzIHRoZXJlJ3Mgbm8gb25lIHN0YW5kYXJkCiAgICAgICAgICAgIEM4OSB3Y3N0b2sgKi8KLSAgICAgICAgYnVmID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHApICsgMSk7CisgICAgICAgIGJ1ZiA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKHN0cmxlbihwKSArIDEpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKICAgICAgICAgc3RyY3B5KGJ1ZiwgcCk7Ci0gICAgICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwogICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgICAgIGZvciAocCA9IHN0cnRvayhidWYsICIsIik7IHAgIT0gTlVMTDsgcCA9IHN0cnRvayhOVUxMLCAiLCIpKSB7CiAjaWZkZWYgX19BUFBMRV9fCkBAIC01MzcsOCArNTcyLDggQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgfQogICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgICAgICBmcmVlKG9sZGxvYyk7Ci0gICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgfQogI2VuZGlmCiAKQEAgLTYwOCw3ICs2NDMsNyBAQAogICAgICAgICB3Y2hhcl90KiBidWZmZXI7CiAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocCkgKyAxOwogCi0gICAgICAgIGJ1ZmZlciA9IG1hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBidWZmZXIgPSBQeU1lbV9SYXdNYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9ORVhFQ1VUQUJMRSIpOwpAQCAtNjgyLDcgKzcxNyw3IEBACiAKICAgICBpZiAoY29tbWFuZCkgewogICAgICAgICBzdHMgPSBydW5fY29tbWFuZChjb21tYW5kLCAmY2YpOwotICAgICAgICBmcmVlKGNvbW1hbmQpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGNvbW1hbmQpOwogICAgIH0gZWxzZSBpZiAobW9kdWxlKSB7CiAgICAgICAgIHN0cyA9IChSdW5Nb2R1bGUobW9kdWxlLCAxKSAhPSAwKTsKICAgICB9CkBAIC02OTEsNiArNzI2LDcgQEAKICAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsgLyogZG8gZXhpdCBvbiBTeXN0ZW1FeGl0ICovCiAgICAgICAgICAgICBSdW5TdGFydHVwRmlsZSgmY2YpOworICAgICAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIH0KICAgICAgICAgLyogWFhYICovCiAKQEAgLTc1Niw2ICs3OTIsNyBAQAogICAgIGlmIChQeV9JbnNwZWN0RmxhZyAmJiBzdGRpbl9pc19pbnRlcmFjdGl2ZSAmJgogICAgICAgICAoZmlsZW5hbWUgIT0gTlVMTCB8fCBjb21tYW5kICE9IE5VTEwgfHwgbW9kdWxlICE9IE5VTEwpKSB7CiAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsKKyAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIC8qIFhYWCAqLwogICAgICAgICBzdHMgPSBQeVJ1bl9BbnlGaWxlRmxhZ3Moc3RkaW4sICI8c3RkaW4+IiwgJmNmKSAhPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbWQ1bW9kdWxlLmMgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCmluZGV4IDEyZTE4N2MuLjVjYjNkMzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWQ1bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tZDVtb2R1bGUuYwpAQCAtOTEsMTAgKzkxLDYgQEAKICAgICAgICAoeSlbM10gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICBcCiAgICAgICAgKHkpWzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBNRDUgbWFjcm9zICovCiAKQEAgLTI0NCw5ICsyNDAsOSBAQAogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoTUQ1X0JMT0NLU0laRSAtIG1kNS0+Y3VybGVuKSk7CisgICAgICAgICAgIG4gPSBQeV9NSU4oaW5sZW4sIChQeV9zc2l6ZV90KShNRDVfQkxPQ0tTSVpFIC0gbWQ1LT5jdXJsZW4pKTsKICAgICAgICAgICAgbWVtY3B5KG1kNS0+YnVmICsgbWQ1LT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSBuOworICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSAoTUQ1X0lOVDMyKW47CiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IG47CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IG47CiAgICAgICAgICAgIGlmIChtZDUtPmN1cmxlbiA9PSBNRDVfQkxPQ0tTSVpFKSB7CkBAIC00NDMsNyArNDM5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBNRDVfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiTUQ1IiwgMyk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgibWQ1IiwgMyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NzYsOCArNTcyLDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19tZDUodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJk1ENXR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJk1ENXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX21kNW1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfbWQ1bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmTUQ1dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJNRDVUeXBlIiwgKFB5T2JqZWN0ICopJk1ENXR5cGUpOworICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwppbmRleCAxMTA3ZWI4Li4zNjZkYWMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL21tYXBtb2R1bGUuYworKysgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlIDxQeXRob24uaD4KKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAogI2lmbmRlZiBNU19XSU5ET1dTCiAjZGVmaW5lIFVOSVgKQEAgLTEwOCw2ICsxMDksNyBAQAogICAgIGludCBmZDsKICNlbmRpZgogCisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIGFjY2Vzc19tb2RlIGFjY2VzczsKIH0gbW1hcF9vYmplY3Q7CiAKQEAgLTEzNCw2ICsxMzYsOCBAQAogICAgIH0KICNlbmRpZiAvKiBVTklYICovCiAKKyAgICBpZiAobV9vYmotPndlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIG1fb2JqKTsKICAgICBQeV9UWVBFKG1fb2JqKS0+dHBfZnJlZSgoUHlPYmplY3QqKW1fb2JqKTsKIH0KIApAQCAtMTAzMiw3ICsxMDM2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YobW1hcF9vYmplY3QsIHdlYWtyZWZsaXN0KSwgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBtbWFwX29iamVjdF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KQEAgLTExOTAsNiArMTE5NCw3IEBACiAgICAgbV9vYmotPmRhdGEgPSBOVUxMOwogICAgIG1fb2JqLT5zaXplID0gKHNpemVfdCkgbWFwX3NpemU7CiAgICAgbV9vYmotPnBvcyA9IChzaXplX3QpIDA7CisgICAgbV9vYmotPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBtX29iai0+ZXhwb3J0cyA9IDA7CiAgICAgbV9vYmotPm9mZnNldCA9IG9mZnNldDsKICAgICBpZiAoZmQgPT0gLTEpIHsKQEAgLTEyMDMsMTggKzEyMDgsMTggQEAKICAgICAgICAgZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUzsKICNlbHNlCiAgICAgICAgIC8qIFNWUjQgbWV0aG9kIHRvIG1hcCBhbm9ueW1vdXMgbWVtb3J5IGlzIHRvIG9wZW4gL2Rldi96ZXJvICovCi0gICAgICAgIGZkID0gZGV2emVybyA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7CisgICAgICAgIGZkID0gZGV2emVybyA9IF9QeV9vcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOwogICAgICAgICBpZiAoZGV2emVybyA9PSAtMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG1fb2JqKTsKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAjZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBtX29iai0+ZmQgPSBkdXAoZmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbV9vYmotPmZkID0gX1B5X2R1cChmZCk7CiAgICAgICAgIGlmIChtX29iai0+ZmQgPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtX29iaik7Ci0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzOTQsNiArMTM5OSw3IEBACiAgICAgLyogc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uICovCiAgICAgbV9vYmotPnBvcyA9IChzaXplX3QpIDA7CiAKKyAgICBtX29iai0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIG1fb2JqLT5leHBvcnRzID0gMDsKICAgICAvKiBzZXQgdGhlIHRhZyBuYW1lICovCiAgICAgaWYgKHRhZ25hbWUgIT0gTlVMTCAmJiAqdGFnbmFtZSAhPSAnXDAnKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKaW5kZXggNTBlMjY2Zi4uYjBhMTZkYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCisrKyBiL01vZHVsZXMvb3NzYXVkaW9kZXYuYwpAQCAtMTE1LDcgKzExNSw5IEBACiAgICAgICAgb25lIG9wZW4gYXQgYSB0aW1lLiAgVGhpcyBkb2VzICpub3QqIGFmZmVjdCBsYXRlciBJL087IE9TUwogICAgICAgIHByb3ZpZGVzIGEgc3BlY2lhbCBpb2N0bCgpIGZvciBub24tYmxvY2tpbmcgcmVhZC93cml0ZSwgd2hpY2ggaXMKICAgICAgICBleHBvc2VkIHZpYSBvc3Nfbm9uYmxvY2soKSBiZWxvdy4gKi8KLSAgICBpZiAoKGZkID0gb3BlbihkZXZpY2VuYW1lLCBpbW9kZXxPX05PTkJMT0NLKSkgPT0gLTEpIHsKKyAgICBmZCA9IF9QeV9vcGVuKGRldmljZW5hbWUsIGltb2RlfE9fTk9OQkxPQ0spOworCisgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBkZXZpY2VuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTc3LDcgKzE3OSw4IEBACiAgICAgICAgICAgICBkZXZpY2VuYW1lID0gIi9kZXYvbWl4ZXIiOwogICAgIH0KIAotICAgIGlmICgoZmQgPSBvcGVuKGRldmljZW5hbWUsIE9fUkRXUikpID09IC0xKSB7CisgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBPX1JEV1IpOworICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI0NSw3ICsyNDgsNyBAQAogICAgIGludCBhcmc7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjcwLDcgKzI3Myw3IEBACiAgICAgaW50IGFyZyA9IDA7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjkwLDcgKzI5Myw3IEBACiAgICAgaW50IHJ2OwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvb3ZlcmxhcHBlZC5jIGIvTW9kdWxlcy9vdmVybGFwcGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1Yzc2ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvb3ZlcmxhcHBlZC5jCkBAIC0wLDAgKzEsMTM3OCBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIG92ZXJsYXBwZWQgSU8KKyAqCisgKiBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSBNb2R1bGVzL193aW5hcGkuYyBvZiBDUHl0aG9uCisgKi8KKworLyogWFhYIGNoZWNrIG92ZXJmbG93IGFuZCBEV09SRCA8LT4gUHlfc3NpemVfdCBjb252ZXJzaW9ucworICAgQ2hlY2sgaXRlbXNpemUgKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorCisjZGVmaW5lIFdJTkRPV1NfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxtc3dzb2NrLmg+CisKKyNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChNU19XSU42NCkKKyMgIGRlZmluZSBGX1BPSU5URVIgImsiCisjICBkZWZpbmUgVF9QT0lOVEVSIFRfVUxPTkcKKyNlbHNlCisjICBkZWZpbmUgRl9QT0lOVEVSICJLIgorIyAgZGVmaW5lIFRfUE9JTlRFUiBUX1VMT05HTE9ORworI2VuZGlmCisKKyNkZWZpbmUgRl9IQU5ETEUgRl9QT0lOVEVSCisjZGVmaW5lIEZfVUxPTkdfUFRSIEZfUE9JTlRFUgorI2RlZmluZSBGX0RXT1JEICJrIgorI2RlZmluZSBGX0JPT0wgImkiCisjZGVmaW5lIEZfVUlOVCAiSSIKKworI2RlZmluZSBUX0hBTkRMRSBUX1BPSU5URVIKKworZW51bSB7VFlQRV9OT05FLCBUWVBFX05PVF9TVEFSVEVELCBUWVBFX1JFQUQsIFRZUEVfV1JJVEUsIFRZUEVfQUNDRVBULAorICAgICAgVFlQRV9DT05ORUNULCBUWVBFX0RJU0NPTk5FQ1QsIFRZUEVfQ09OTkVDVF9OQU1FRF9QSVBFLAorICAgICAgVFlQRV9XQUlUX05BTUVEX1BJUEVfQU5EX0NPTk5FQ1R9OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIE9WRVJMQVBQRUQgb3ZlcmxhcHBlZDsKKyAgICAvKiBGb3IgY29udmVuaWVuY2UsIHdlIHN0b3JlIHRoZSBmaWxlIGhhbmRsZSB0b28gKi8KKyAgICBIQU5ETEUgaGFuZGxlOworICAgIC8qIEVycm9yIHJldHVybmVkIGJ5IGxhc3QgbWV0aG9kIGNhbGwgKi8KKyAgICBEV09SRCBlcnJvcjsKKyAgICAvKiBUeXBlIG9mIG9wZXJhdGlvbiAqLworICAgIERXT1JEIHR5cGU7CisgICAgdW5pb24geworICAgICAgICAvKiBCdWZmZXIgdXNlZCBmb3IgcmVhZGluZyAob3B0aW9uYWwpICovCisgICAgICAgIFB5T2JqZWN0ICpyZWFkX2J1ZmZlcjsKKyAgICAgICAgLyogQnVmZmVyIHVzZWQgZm9yIHdyaXRpbmcgKG9wdGlvbmFsKSAqLworICAgICAgICBQeV9idWZmZXIgd3JpdGVfYnVmZmVyOworICAgIH07Cit9IE92ZXJsYXBwZWRPYmplY3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkOworICAgIEhBTkRMRSBJb2NwSGFuZGxlOworICAgIGNoYXIgQWRkcmVzc1sxXTsKK30gV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0OworCisvKgorICogTWFwIFdpbmRvd3MgZXJyb3IgY29kZXMgdG8gc3ViY2xhc3NlcyBvZiBPU0Vycm9yCisgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK1NldEZyb21XaW5kb3dzRXJyKERXT1JEIGVycikKK3sKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uX3R5cGU7CisKKyAgICBpZiAoZXJyID09IDApCisgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEOgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19Db25uZWN0aW9uUmVmdXNlZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEOgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19Db25uZWN0aW9uQWJvcnRlZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBleGNlcHRpb25fdHlwZSA9IFB5RXhjX09TRXJyb3I7CisgICAgfQorICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihleGNlcHRpb25fdHlwZSwgZXJyKTsKK30KKworLyoKKyAqIFNvbWUgZnVuY3Rpb25zIHNob3VsZCBiZSBsb2FkZWQgYXQgcnVudGltZQorICovCisKK3N0YXRpYyBMUEZOX0FDQ0VQVEVYIFB5X0FjY2VwdEV4ID0gTlVMTDsKK3N0YXRpYyBMUEZOX0NPTk5FQ1RFWCBQeV9Db25uZWN0RXggPSBOVUxMOworc3RhdGljIExQRk5fRElTQ09OTkVDVEVYIFB5X0Rpc2Nvbm5lY3RFeCA9IE5VTEw7CitzdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKlB5X0NhbmNlbElvRXgpKEhBTkRMRSwgTFBPVkVSTEFQUEVEKSA9IE5VTEw7CisKKyNkZWZpbmUgR0VUX1dTQV9QT0lOVEVSKHMsIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoU09DS0VUX0VSUk9SICE9IFdTQUlvY3RsKHMsIFNJT19HRVRfRVhURU5TSU9OX0ZVTkNUSU9OX1BPSU5URVIsICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHdWlkIyN4LCBzaXplb2YoR3VpZCMjeCksICZQeV8jI3gsICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQeV8jI3gpLCAmZHdCeXRlcywgTlVMTCwgTlVMTCkpCisKK3N0YXRpYyBpbnQKK2luaXRpYWxpemVfZnVuY3Rpb25fcG9pbnRlcnModm9pZCkKK3sKKyAgICBHVUlEIEd1aWRBY2NlcHRFeCA9IFdTQUlEX0FDQ0VQVEVYOworICAgIEdVSUQgR3VpZENvbm5lY3RFeCA9IFdTQUlEX0NPTk5FQ1RFWDsKKyAgICBHVUlEIEd1aWREaXNjb25uZWN0RXggPSBXU0FJRF9ESVNDT05ORUNURVg7CisgICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKKyAgICBTT0NLRVQgczsKKyAgICBEV09SRCBkd0J5dGVzOworCisgICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOworICAgIGlmIChzID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghR0VUX1dTQV9QT0lOVEVSKHMsIEFjY2VwdEV4KSB8fAorICAgICAgICAhR0VUX1dTQV9QT0lOVEVSKHMsIENvbm5lY3RFeCkgfHwKKyAgICAgICAgIUdFVF9XU0FfUE9JTlRFUihzLCBEaXNjb25uZWN0RXgpKQorICAgIHsKKyAgICAgICAgY2xvc2Vzb2NrZXQocyk7CisgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNsb3Nlc29ja2V0KHMpOworCisgICAgLyogT24gV2luWFAgd2Ugd2lsbCBoYXZlIFB5X0NhbmNlbElvRXggPT0gTlVMTCAqLworICAgIGhLZXJuZWwzMiA9IEdldE1vZHVsZUhhbmRsZSgiS0VSTkVMMzIiKTsKKyAgICAqKEZBUlBST0MgKikmUHlfQ2FuY2VsSW9FeCA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwgIkNhbmNlbElvRXgiKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbXBsZXRpb24gcG9ydCBzdHVmZgorICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0X2RvYywKKyAgICAiQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChoYW5kbGUsIHBvcnQsIGtleSwgY29uY3VycmVuY3kpIC0+IHBvcnRcblxuIgorICAgICJDcmVhdGUgYSBjb21wbGV0aW9uIHBvcnQgb3IgcmVnaXN0ZXIgYSBoYW5kbGUgd2l0aCBhIHBvcnQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0NyZWF0ZUlvQ29tcGxldGlvblBvcnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBGaWxlSGFuZGxlOworICAgIEhBTkRMRSBFeGlzdGluZ0NvbXBsZXRpb25Qb3J0OworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5OworICAgIERXT1JEIE51bWJlck9mQ29uY3VycmVudFRocmVhZHM7CisgICAgSEFORExFIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSBGX1VMT05HX1BUUiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUhhbmRsZSwgJkV4aXN0aW5nQ29tcGxldGlvblBvcnQsICZDb21wbGV0aW9uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTnVtYmVyT2ZDb25jdXJyZW50VGhyZWFkcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IENyZWF0ZUlvQ29tcGxldGlvblBvcnQoRmlsZUhhbmRsZSwgRXhpc3RpbmdDb21wbGV0aW9uUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25LZXksIE51bWJlck9mQ29uY3VycmVudFRocmVhZHMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgcmV0KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jLAorICAgICJHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHBvcnQsIG1zZWNzKSAtPiAoZXJyLCBieXRlcywga2V5LCBhZGRyZXNzKVxuXG4iCisgICAgIkdldCBhIG1lc3NhZ2UgZnJvbSBjb21wbGV0aW9uIHBvcnQuICBXYWl0IGZvciB1cCB0byBtc2VjcyBtaWxsaXNlY29uZHMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydCA9IE5VTEw7CisgICAgRFdPUkQgTnVtYmVyT2ZCeXRlcyA9IDA7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXkgPSAwOworICAgIE9WRVJMQVBQRUQgKk92ZXJsYXBwZWQgPSBOVUxMOworICAgIERXT1JEIE1pbGxpc2Vjb25kczsKKyAgICBEV09SRCBlcnI7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25Qb3J0LCAmTWlsbGlzZWNvbmRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhDb21wbGV0aW9uUG9ydCwgJk51bWJlck9mQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvbktleSwgJk92ZXJsYXBwZWQsIE1pbGxpc2Vjb25kcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoT3ZlcmxhcHBlZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChlcnIgPT0gV0FJVF9USU1FT1VUKQorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0RXT1JEIEZfRFdPUkQgRl9VTE9OR19QVFIgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwgTnVtYmVyT2ZCeXRlcywgQ29tcGxldGlvbktleSwgT3ZlcmxhcHBlZCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2MsCisgICAgIlBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHBvcnQsIGJ5dGVzLCBrZXksIGFkZHJlc3MpIC0+IE5vbmVcblxuIgorICAgICJQb3N0IGEgbWVzc2FnZSB0byBjb21wbGV0aW9uIHBvcnQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1Bvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQ7CisgICAgRFdPUkQgTnVtYmVyT2ZCeXRlczsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleTsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQgRl9VTE9OR19QVFIgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvblBvcnQsICZOdW1iZXJPZkJ5dGVzLCAmQ29tcGxldGlvbktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk92ZXJsYXBwZWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhDb21wbGV0aW9uUG9ydCwgTnVtYmVyT2ZCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uS2V5LCBPdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIFdhaXQgZm9yIGEgaGFuZGxlCisgKi8KKworc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgeworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydDsKKyAgICBMUE9WRVJMQVBQRUQgT3ZlcmxhcHBlZDsKK307CisKK3N0YXRpYyBWT0lEIENBTExCQUNLCitQb3N0VG9RdWV1ZUNhbGxiYWNrKFBWT0lEIGxwUGFyYW1ldGVyLCBCT09MIFRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgKnAgPSAoc3RydWN0IFBvc3RDYWxsYmFja0RhdGEqKSBscFBhcmFtZXRlcjsKKworICAgIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHAtPkNvbXBsZXRpb25Qb3J0LCBUaW1lck9yV2FpdEZpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHAtPk92ZXJsYXBwZWQpOworICAgIC8qIGlnbm9yZSBwb3NzaWJsZSBlcnJvciEgKi8KKyAgICBQeU1lbV9GcmVlKHApOworfQorCitQeURvY19TVFJWQVIoCisgICAgUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlX2RvYywKKyAgICAiUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKE9iamVjdCwgQ29tcGxldGlvblBvcnQsIE92ZXJsYXBwZWQsIFRpbWVvdXQpXG4iCisgICAgIiAgICAtPiBXYWl0SGFuZGxlXG5cbiIKKyAgICAiUmVnaXN0ZXIgd2FpdCBmb3IgT2JqZWN0OyB3aGVuIGNvbXBsZXRlIENvbXBsZXRpb25Qb3J0IGlzIG5vdGlmaWVkLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1JlZ2lzdGVyV2FpdFdpdGhRdWV1ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIE5ld1dhaXRPYmplY3Q7CisgICAgSEFORExFIE9iamVjdDsKKyAgICBVTE9ORyBNaWxsaXNlY29uZHM7CisgICAgc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgZGF0YSwgKnBkYXRhOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFIEZfUE9JTlRFUiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS5Db21wbGV0aW9uUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEuT3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk1pbGxpc2Vjb25kcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcGRhdGEgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhKSk7CisgICAgaWYgKHBkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKworICAgICpwZGF0YSA9IGRhdGE7CisKKyAgICBpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgKKyAgICAgICAgICAgICZOZXdXYWl0T2JqZWN0LCBPYmplY3QsIChXQUlUT1JUSU1FUkNBTExCQUNLKVBvc3RUb1F1ZXVlQ2FsbGJhY2ssCisgICAgICAgICAgICBwZGF0YSwgTWlsbGlzZWNvbmRzLAorICAgICAgICAgICAgV1RfRVhFQ1VURUlOV0FJVFRIUkVBRCB8IFdUX0VYRUNVVEVPTkxZT05DRSkpCisgICAgeworICAgICAgICBQeU1lbV9GcmVlKHBkYXRhKTsKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIH0KKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBOZXdXYWl0T2JqZWN0KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFVucmVnaXN0ZXJXYWl0X2RvYywKKyAgICAiVW5yZWdpc3RlcldhaXQoV2FpdEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlVucmVnaXN0ZXIgd2FpdCBoYW5kbGUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBXYWl0SGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmV2FpdEhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFVucmVnaXN0ZXJXYWl0KFdhaXRIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogRXZlbnQgZnVuY3Rpb25zIC0tIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdHMKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQ3JlYXRlRXZlbnRfZG9jLAorICAgICJDcmVhdGVFdmVudChFdmVudEF0dHJpYnV0ZXMsIE1hbnVhbFJlc2V0LCBJbml0aWFsU3RhdGUsIE5hbWUpIgorICAgICIgLT4gSGFuZGxlXG5cbiIKKyAgICAiQ3JlYXRlIGFuIGV2ZW50LiAgRXZlbnRBdHRyaWJ1dGVzIG11c3QgYmUgTm9uZS5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9DcmVhdGVFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKkV2ZW50QXR0cmlidXRlczsKKyAgICBCT09MIE1hbnVhbFJlc2V0OworICAgIEJPT0wgSW5pdGlhbFN0YXRlOworICAgIFB5X1VOSUNPREUgKk5hbWU7CisgICAgSEFORExFIEV2ZW50OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiBGX0JPT0wgRl9CT09MICJaIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkV2ZW50QXR0cmlidXRlcywgJk1hbnVhbFJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5pdGlhbFN0YXRlLCAmTmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKEV2ZW50QXR0cmlidXRlcyAhPSBQeV9Ob25lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiRXZlbnRBdHRyaWJ1dGVzIG11c3QgYmUgTm9uZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgRXZlbnQgPSBDcmVhdGVFdmVudFcoTlVMTCwgTWFudWFsUmVzZXQsIEluaXRpYWxTdGF0ZSwgTmFtZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChFdmVudCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIEV2ZW50KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFNldEV2ZW50X2RvYywKKyAgICAiU2V0RXZlbnQoSGFuZGxlKSAtPiBOb25lXG5cbiIKKyAgICAiU2V0IGV2ZW50LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1NldEV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgSGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gU2V0RXZlbnQoSGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFJlc2V0RXZlbnRfZG9jLAorICAgICJSZXNldEV2ZW50KEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlJlc2V0IGV2ZW50LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1Jlc2V0RXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBIYW5kbGU7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBSZXNldEV2ZW50KEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBCaW5kIHNvY2tldCBoYW5kbGUgdG8gbG9jYWwgcG9ydCB3aXRob3V0IGRvaW5nIHNsb3cgZ2V0YWRkcmluZm8oKQorICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBCaW5kTG9jYWxfZG9jLAorICAgICJCaW5kTG9jYWwoaGFuZGxlLCBmYW1pbHkpIC0+IE5vbmVcblxuIgorICAgICJCaW5kIGEgc29ja2V0IGhhbmRsZSB0byBhbiBhcmJpdHJhcnkgbG9jYWwgcG9ydC5cbiIKKyAgICAiZmFtaWx5IHNob3VsZCBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0JpbmRMb2NhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIFNvY2tldDsKKyAgICBpbnQgRmFtaWx5OworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJpIiwgJlNvY2tldCwgJkZhbWlseSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKEZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIGFkZHIuc2luX3BvcnQgPSAwOworICAgICAgICBhZGRyLnNpbl9hZGRyLlNfdW4uU19hZGRyID0gSU5BRERSX0FOWTsKKyAgICAgICAgcmV0ID0gYmluZChTb2NrZXQsIChTT0NLQUREUiopJmFkZHIsIHNpemVvZihhZGRyKSkgIT0gU09DS0VUX0VSUk9SOworICAgIH0gZWxzZSBpZiAoRmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIGFkZHIuc2luNl9wb3J0ID0gMDsKKyAgICAgICAgYWRkci5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKyAgICAgICAgcmV0ID0gYmluZChTb2NrZXQsIChTT0NLQUREUiopJmFkZHIsIHNpemVvZihhZGRyKSkgIT0gU09DS0VUX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZXhwZWN0ZWQgdHVwbGUgb2YgbGVuZ3RoIDIgb3IgNCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIFdpbmRvd3MgZXF1aXZhbGVudCBvZiBvcy5zdHJlcnJvcigpIC0tIGNvbXBhcmUgX2N0eXBlcy9jYWxscHJvYy5jCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIEZvcm1hdE1lc3NhZ2VfZG9jLAorICAgICJGb3JtYXRNZXNzYWdlKGVycm9yX2NvZGUpIC0+IGVycm9yX21lc3NhZ2VcblxuIgorICAgICJSZXR1cm4gZXJyb3IgbWVzc2FnZSBmb3IgYW4gZXJyb3IgY29kZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfRm9ybWF0TWVzc2FnZShQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBEV09SRCBjb2RlLCBuOworICAgIFdDSEFSICpscE1zZ0J1ZjsKKyAgICBQeU9iamVjdCAqcmVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfRFdPUkQsICZjb2RlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuID0gRm9ybWF0TWVzc2FnZVcoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMQU5HSUQoTEFOR19ORVVUUkFMLCBTVUJMQU5HX0RFRkFVTFQpLAorICAgICAgICAgICAgICAgICAgICAgICAoTFBXU1RSKSAmbHBNc2dCdWYsCisgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChuKSB7CisgICAgICAgIHdoaWxlIChpc3dzcGFjZShscE1zZ0J1ZltuLTFdKSkKKyAgICAgICAgICAgIC0tbjsKKyAgICAgICAgbHBNc2dCdWZbbl0gPSBMJ1wwJzsKKyAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgidSIsIGxwTXNnQnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgidW5rbm93biBlcnJvciBjb2RlICV1IiwgY29kZSk7CisgICAgfQorICAgIExvY2FsRnJlZShscE1zZ0J1Zik7CisgICAgcmV0dXJuIHJlczsKK30KKworCisvKgorICogTWFyayBvcGVyYXRpb24gYXMgY29tcGxldGVkIC0gdXNlZCB3aGVuIHJlYWRpbmcgcHJvZHVjZXMgRVJST1JfQlJPS0VOX1BJUEUKKyAqLworCitzdGF0aWMgdm9pZAorbWFya19hc19jb21wbGV0ZWQoT1ZFUkxBUFBFRCAqb3YpCit7CisgICAgb3YtPkludGVybmFsID0gMDsKKyAgICBpZiAob3YtPmhFdmVudCAhPSBOVUxMKQorICAgICAgICBTZXRFdmVudChvdi0+aEV2ZW50KTsKK30KKworLyoKKyAqIEEgUHl0aG9uIG9iamVjdCB3cmFwcGluZyBhbiBPVkVSTEFQUEVEIHN0cnVjdHVyZSBhbmQgb3RoZXIgdXNlZnVsIGRhdGEKKyAqIGZvciBvdmVybGFwcGVkIEkvTworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2RvYywKKyAgICAiT3ZlcmxhcHBlZCBvYmplY3QiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIE92ZXJsYXBwZWRPYmplY3QgKnNlbGY7CisgICAgSEFORExFIGV2ZW50ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJldmVudCIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInwiIEZfSEFORExFLCBrd2xpc3QsICZldmVudCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGV2ZW50ID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGV2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworICAgICAgICBpZiAoZXZlbnQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICB9CisKKyAgICBzZWxmID0gUHlPYmplY3RfTmV3KE92ZXJsYXBwZWRPYmplY3QsIHR5cGUpOworICAgIGlmIChzZWxmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGV2ZW50ICE9IE5VTEwpCisgICAgICAgICAgICBDbG9zZUhhbmRsZShldmVudCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPmhhbmRsZSA9IE5VTEw7CisgICAgc2VsZi0+ZXJyb3IgPSAwOworICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PTkU7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBOVUxMOworICAgIG1lbXNldCgmc2VsZi0+b3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKE9WRVJMQVBQRUQpKTsKKyAgICBtZW1zZXQoJnNlbGYtPndyaXRlX2J1ZmZlciwgMCwgc2l6ZW9mKFB5X2J1ZmZlcikpOworICAgIGlmIChldmVudCkKKyAgICAgICAgc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQgPSBldmVudDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKK30KKworc3RhdGljIHZvaWQKK092ZXJsYXBwZWRfZGVhbGxvYyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIERXT1JEIGJ5dGVzOworICAgIERXT1JEIG9sZGVyciA9IEdldExhc3RFcnJvcigpOworICAgIEJPT0wgd2FpdCA9IEZBTFNFOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFIYXNPdmVybGFwcGVkSW9Db21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgIHNlbGYtPnR5cGUgIT0gVFlQRV9OT1RfU1RBUlRFRCkKKyAgICB7CisgICAgICAgIGlmIChQeV9DYW5jZWxJb0V4ICYmIFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCkpCisgICAgICAgICAgICB3YWl0ID0gVFJVRTsKKworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJldCA9IEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXMsIHdhaXQpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIHN3aXRjaCAocmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgICAgICBjYXNlIEVSUk9SX05PVF9GT1VORDoKKyAgICAgICAgICAgIGNhc2UgRVJST1JfT1BFUkFUSU9OX0FCT1JURUQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiJVIgc3RpbGwgaGFzIHBlbmRpbmcgb3BlcmF0aW9uIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgImRlYWxsb2NhdGlvbiwgdGhlIHByb2Nlc3MgbWF5IGNyYXNoIiwgc2VsZik7CisgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50ICE9IE5VTEwpCisgICAgICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKKworICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIub2JqKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworCisgICAgc3dpdGNoIChzZWxmLT50eXBlKSB7CisgICAgICAgIGNhc2UgVFlQRV9SRUFEOgorICAgICAgICBjYXNlIFRZUEVfQUNDRVBUOgorICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZF9idWZmZXIpOworICAgIH0KKyAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgU2V0TGFzdEVycm9yKG9sZGVycik7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2NhbmNlbF9kb2MsCisgICAgImNhbmNlbCgpIC0+IE5vbmVcblxuIgorICAgICJDYW5jZWwgb3ZlcmxhcHBlZCBvcGVyYXRpb24iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfY2FuY2VsKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgQk9PTCByZXQgPSBUUlVFOworCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT1RfU1RBUlRFRAorICAgICAgICB8fCBzZWxmLT50eXBlID09IFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIGlmICghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGlmIChQeV9DYW5jZWxJb0V4KQorICAgICAgICAgICAgcmV0ID0gUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gQ2FuY2VsSW8oc2VsZi0+aGFuZGxlKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisKKyAgICAvKiBDYW5jZWxJb0V4IHJldHVybnMgRVJST1JfTk9UX0ZPVU5EIGlmIHRoZSBJL08gY29tcGxldGVkIGluLWJldHdlZW4gKi8KKyAgICBpZiAoIXJldCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT1RfRk9VTkQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfZ2V0cmVzdWx0X2RvYywKKyAgICAiZ2V0cmVzdWx0KHdhaXQ9RmFsc2UpIC0+IHJlc3VsdFxuXG4iCisgICAgIlJldHJpZXZlIHJlc3VsdCBvZiBvcGVyYXRpb24uICBJZiB3YWl0IGlzIHRydWUgdGhlbiBpdCBibG9ja3NcbiIKKyAgICAidW50aWwgdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4gIElmIHdhaXQgaXMgZmFsc2UgYW5kIHRoZVxuIgorICAgICJvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZyB0aGVuIGFuIGVycm9yIGlzIHJhaXNlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfZ2V0cmVzdWx0KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEJPT0wgd2FpdCA9IEZBTFNFOworICAgIERXT1JEIHRyYW5zZmVycmVkID0gMDsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInwiIEZfQk9PTCwgJndhaXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBub3QgeWV0IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PVF9TVEFSVEVEKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGZhaWxlZCB0byBzdGFydCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLCAmdHJhbnNmZXJyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVSUk9SX0JST0tFTl9QSVBFOgorICAgICAgICAgICAgaWYgKHNlbGYtPnJlYWRfYnVmZmVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKworICAgIHN3aXRjaCAoc2VsZi0+dHlwZSkgeworICAgICAgICBjYXNlIFRZUEVfUkVBRDoKKyAgICAgICAgICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrRXhhY3Qoc2VsZi0+cmVhZF9idWZmZXIpKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2ZlcnJlZCAhPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnJlYWRfYnVmZmVyKSAmJgorICAgICAgICAgICAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+cmVhZF9idWZmZXIsIHRyYW5zZmVycmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5yZWFkX2J1ZmZlcik7CisgICAgICAgICAgICByZXR1cm4gc2VsZi0+cmVhZF9idWZmZXI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHRyYW5zZmVycmVkKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1JlYWRGaWxlX2RvYywKKyAgICAiUmVhZEZpbGUoaGFuZGxlLCBzaXplKSAtPiBPdmVybGFwcGVkW21lc3NhZ2VdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCByZWFkIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1JlYWRGaWxlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBEV09SRCBucmVhZDsKKyAgICBQeU9iamVjdCAqYnVmOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JELCAmaGFuZGxlLCAmc2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIFNJWkVPRl9TSVpFX1QgPD0gU0laRU9GX0xPTkcKKyAgICBzaXplID0gUHlfTUlOKHNpemUsIChEV09SRClQWV9TU0laRV9UX01BWCk7CisjZW5kaWYKKyAgICBidWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFB5X01BWChzaXplLCAxKSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1JFQUQ7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gYnVmOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFJlYWRGaWxlKGhhbmRsZSwgUHlCeXRlc19BU19TVFJJTkcoYnVmKSwgc2l6ZSwgJm5yZWFkLAorICAgICAgICAgICAgICAgICAgICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XU0FSZWN2X2RvYywKKyAgICAiUmVjdkZpbGUoaGFuZGxlLCBzaXplLCBmbGFncykgLT4gT3ZlcmxhcHBlZFttZXNzYWdlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgcmVjZWl2ZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XU0FSZWN2KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBEV09SRCBmbGFncyA9IDA7CisgICAgRFdPUkQgbnJlYWQ7CisgICAgUHlPYmplY3QgKmJ1ZjsKKyAgICBXU0FCVUYgd3NhYnVmOworICAgIGludCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQgInwiIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZzaXplLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBTSVpFT0ZfU0laRV9UIDw9IFNJWkVPRl9MT05HCisgICAgc2l6ZSA9IFB5X01JTihzaXplLCAoRFdPUkQpUFlfU1NJWkVfVF9NQVgpOworI2VuZGlmCisgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9NQVgoc2l6ZSwgMSkpOworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9SRUFEOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKyAgICB3c2FidWYubGVuID0gc2l6ZTsKKyAgICB3c2FidWYuYnVmID0gUHlCeXRlc19BU19TVFJJTkcoYnVmKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXU0FSZWN2KChTT0NLRVQpaGFuZGxlLCAmd3NhYnVmLCAxLCAmbnJlYWQsICZmbGFncywKKyAgICAgICAgICAgICAgICAgICZzZWxmLT5vdmVybGFwcGVkLCBOVUxMKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSAocmV0IDwgMCA/IFdTQUdldExhc3RFcnJvcigpIDogRVJST1JfU1VDQ0VTUyk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Xcml0ZUZpbGVfZG9jLAorICAgICJXcml0ZUZpbGUoaGFuZGxlLCBidWYpIC0+IE92ZXJsYXBwZWRbYnl0ZXNfdHJhbnNmZXJyZWRdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCB3cml0ZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9Xcml0ZUZpbGUoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBQeU9iamVjdCAqYnVmb2JqOworICAgIERXT1JEIHdyaXR0ZW47CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPIiwgJmhhbmRsZSwgJmJ1Zm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2UoYnVmb2JqLCAieSoiLCAmc2VsZi0+d3JpdGVfYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBTSVpFT0ZfU0laRV9UID4gU0laRU9GX0xPTkcKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiA+IChQeV9zc2l6ZV90KVVMT05HX01BWCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlciB0byBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1dSSVRFOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBzZWxmLT53cml0ZV9idWZmZXIuYnVmLAorICAgICAgICAgICAgICAgICAgICAoRFdPUkQpc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4sICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XU0FTZW5kX2RvYywKKyAgICAiV1NBU2VuZChoYW5kbGUsIGJ1ZiwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbYnl0ZXNfdHJhbnNmZXJyZWRdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBzZW5kIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1dTQVNlbmQoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBQeU9iamVjdCAqYnVmb2JqOworICAgIERXT1JEIGZsYWdzOworICAgIERXT1JEIHdyaXR0ZW47CisgICAgV1NBQlVGIHdzYWJ1ZjsKKyAgICBpbnQgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmJ1Zm9iaiwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZShidWZvYmosICJ5KiIsICZzZWxmLT53cml0ZV9idWZmZXIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworI2lmIFNJWkVPRl9TSVpFX1QgPiBTSVpFT0ZfTE9ORworICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIubGVuID4gKFB5X3NzaXplX3QpVUxPTkdfTUFYKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPndyaXRlX2J1ZmZlcik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYnVmZmVyIHRvIGxhcmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfV1JJVEU7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworICAgIHdzYWJ1Zi5sZW4gPSAoRFdPUkQpc2VsZi0+d3JpdGVfYnVmZmVyLmxlbjsKKyAgICB3c2FidWYuYnVmID0gc2VsZi0+d3JpdGVfYnVmZmVyLmJ1ZjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXU0FTZW5kKChTT0NLRVQpaGFuZGxlLCAmd3NhYnVmLCAxLCAmd3JpdHRlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCwgTlVMTCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gKHJldCA8IDAgPyBXU0FHZXRMYXN0RXJyb3IoKSA6IEVSUk9SX1NVQ0NFU1MpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfQWNjZXB0RXhfZG9jLAorICAgICJBY2NlcHRFeChsaXN0ZW5faGFuZGxlLCBhY2NlcHRfaGFuZGxlKSAtPiBPdmVybGFwcGVkW2FkZHJlc3NfYXNfYnl0ZXNdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCB3YWl0IGZvciBjbGllbnQgdG8gY29ubmVjdCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9BY2NlcHRFeChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgTGlzdGVuU29ja2V0OworICAgIFNPQ0tFVCBBY2NlcHRTb2NrZXQ7CisgICAgRFdPUkQgQnl0ZXNSZWNlaXZlZDsKKyAgICBEV09SRCBzaXplOworICAgIFB5T2JqZWN0ICpidWY7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTGlzdGVuU29ja2V0LCAmQWNjZXB0U29ja2V0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSArIDE2OworICAgIGJ1ZiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSoyKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9BQ0NFUFQ7CisgICAgc2VsZi0+aGFuZGxlID0gKEhBTkRMRSlMaXN0ZW5Tb2NrZXQ7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBidWY7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfQWNjZXB0RXgoTGlzdGVuU29ja2V0LCBBY2NlcHRTb2NrZXQsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZSwgc2l6ZSwgJkJ5dGVzUmVjZWl2ZWQsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogV1NBR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCisKK3N0YXRpYyBpbnQKK3BhcnNlX2FkZHJlc3MoUHlPYmplY3QgKm9iaiwgU09DS0FERFIgKkFkZHJlc3MsIGludCBMZW5ndGgpCit7CisgICAgY2hhciAqSG9zdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBQb3J0OworICAgIHVuc2lnbmVkIGxvbmcgRmxvd0luZm87CisgICAgdW5zaWduZWQgbG9uZyBTY29wZUlkOworCisgICAgbWVtc2V0KEFkZHJlc3MsIDAsIExlbmd0aCk7CisKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShvYmosICJzSCIsICZIb3N0LCAmUG9ydCkpCisgICAgeworICAgICAgICBBZGRyZXNzLT5zYV9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBpZiAoV1NBU3RyaW5nVG9BZGRyZXNzQShIb3N0LCBBRl9JTkVULCBOVUxMLCBBZGRyZXNzLCAmTGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAoKFNPQ0tBRERSX0lOKilBZGRyZXNzKS0+c2luX3BvcnQgPSBodG9ucyhQb3J0KTsKKyAgICAgICAgcmV0dXJuIExlbmd0aDsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlBcmdfUGFyc2VUdXBsZShvYmosICJzSGtrIiwgJkhvc3QsICZQb3J0LCAmRmxvd0luZm8sICZTY29wZUlkKSkKKyAgICB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIEFkZHJlc3MtPnNhX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBpZiAoV1NBU3RyaW5nVG9BZGRyZXNzQShIb3N0LCBBRl9JTkVUNiwgTlVMTCwgQWRkcmVzcywgJkxlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKChTT0NLQUREUl9JTjYqKUFkZHJlc3MpLT5zaW42X3BvcnQgPSBodG9ucyhQb3J0KTsKKyAgICAgICAgKChTT0NLQUREUl9JTjYqKUFkZHJlc3MpLT5zaW42X2Zsb3dpbmZvID0gRmxvd0luZm87CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9zY29wZV9pZCA9IFNjb3BlSWQ7CisgICAgICAgIHJldHVybiBMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Nvbm5lY3RFeF9kb2MsCisgICAgIkNvbm5lY3RFeChjbGllbnRfaGFuZGxlLCBhZGRyZXNzX2FzX2J5dGVzKSAtPiBPdmVybGFwcGVkW05vbmVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0LiAgY2xpZW50X2hhbmRsZSBzaG91bGQgYmUgdW5ib3VuZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQ29ubmVjdEV4KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBDb25uZWN0U29ja2V0OworICAgIFB5T2JqZWN0ICpBZGRyZXNzT2JqOworICAgIGNoYXIgQWRkcmVzc0J1ZltzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNildOworICAgIFNPQ0tBRERSICpBZGRyZXNzID0gKFNPQ0tBRERSKilBZGRyZXNzQnVmOworICAgIGludCBMZW5ndGg7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPIiwgJkNvbm5lY3RTb2NrZXQsICZBZGRyZXNzT2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgTGVuZ3RoID0gc2l6ZW9mKEFkZHJlc3NCdWYpOworICAgIExlbmd0aCA9IHBhcnNlX2FkZHJlc3MoQWRkcmVzc09iaiwgQWRkcmVzcywgTGVuZ3RoKTsKKyAgICBpZiAoTGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9DT05ORUNUOworICAgIHNlbGYtPmhhbmRsZSA9IChIQU5ETEUpQ29ubmVjdFNvY2tldDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQeV9Db25uZWN0RXgoQ29ubmVjdFNvY2tldCwgQWRkcmVzcywgTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IFdTQUdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfRGlzY29ubmVjdEV4X2RvYywKKyAgICAiRGlzY29ubmVjdEV4KGhhbmRsZSwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbTm9uZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIGNvbm5lY3QuICBjbGllbnRfaGFuZGxlIHNob3VsZCBiZSB1bmJvdW5kLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXgoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIFNvY2tldDsKKyAgICBEV09SRCBmbGFnczsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwgJlNvY2tldCwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfRElTQ09OTkVDVDsKKyAgICBzZWxmLT5oYW5kbGUgPSAoSEFORExFKVNvY2tldDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQeV9EaXNjb25uZWN0RXgoU29ja2V0LCAmc2VsZi0+b3ZlcmxhcHBlZCwgZmxhZ3MsIDApOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGVfZG9jLAorICAgICJDb25uZWN0TmFtZWRQaXBlKGhhbmRsZSkgLT4gT3ZlcmxhcHBlZFtOb25lXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd2FpdCBmb3IgYSBjbGllbnQgdG8gY29ubmVjdC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgUGlwZTsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZQaXBlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQ09OTkVDVF9OQU1FRF9QSVBFOworICAgIHNlbGYtPmhhbmRsZSA9IFBpcGU7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gQ29ubmVjdE5hbWVkUGlwZShQaXBlLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfUElQRV9DT05ORUNURUQ6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCisvKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIHdheSB0byBkbyBhbiBvdmVybGFwcGVkIGNvbm5lY3QgdG8gYQorICAgcGlwZS4gIFdlIGluc3RlYWQgdXNlIFdhaXROYW1lZFBpcGUoKSBhbmQgQ3JlYXRlRmlsZSgpIGluIGEgdGhyZWFkCisgICBwb29sIHRocmVhZC4gIElmIGEgY29ubmVjdGlvbiBzdWNjZWVkcyB3aXRoaW4gYSB0aW1lIGxpbWl0ICgxMAorICAgc2Vjb25kcykgdGhlbiBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cygpIGlzIHVzZWQgdG8gcmV0dXJuIHRoZQorICAgcGlwZSBoYW5kbGUgdG8gdGhlIGNvbXBsZXRpb24gcG9ydC4gKi8KKworc3RhdGljIERXT1JEIFdJTkFQSQorV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RJblRocmVhZChXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdENvbnRleHQgKmN0eCkKK3sKKyAgICBIQU5ETEUgUGlwZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIERXT1JEIFN0YXJ0ID0gR2V0VGlja0NvdW50KCk7CisgICAgRFdPUkQgRGVhZGxpbmUgPSBTdGFydCArIDEwKjEwMDA7CisgICAgRFdPUkQgRXJyb3IgPSAwOworICAgIERXT1JEIFRpbWVvdXQ7CisgICAgQk9PTCBTdWNjZXNzOworCisgICAgZm9yICggOyA7ICkgeworICAgICAgICBUaW1lb3V0ID0gRGVhZGxpbmUgLSBHZXRUaWNrQ291bnQoKTsKKyAgICAgICAgaWYgKChpbnQpVGltZW91dCA8IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3VjY2VzcyA9IFdhaXROYW1lZFBpcGUoY3R4LT5BZGRyZXNzLCBUaW1lb3V0KTsKKyAgICAgICAgRXJyb3IgPSBTdWNjZXNzID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgICAgICBzd2l0Y2ggKEVycm9yKSB7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgICAgICAgICAgUGlwZUhhbmRsZSA9IENyZWF0ZUZpbGUoY3R4LT5BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgT1BFTl9FWElTVElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKFBpcGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFUlJPUl9TRU1fVElNRU9VVDoKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhjdHgtPklvY3BIYW5kbGUsIEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVMT05HX1BUUilQaXBlSGFuZGxlLCBjdHgtPk92ZXJsYXBwZWQpKQorICAgICAgICBDbG9zZUhhbmRsZShQaXBlSGFuZGxlKTsKKyAgICBmcmVlKGN0eCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1dhaXROYW1lZFBpcGVBbmRDb25uZWN0X2RvYywKKyAgICAiV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QoYWRkciwgaW9jcF9oYW5kbGUpIC0+IE92ZXJsYXBwZWRbcGlwZV9oYW5kbGVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0aW9uIHRvIGFkZHJlc3MsIG5vdGlmeWluZyBpb2NwX2hhbmRsZSB3aGVuXG4iCisgICAgImZpbmlzaGVkIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1dhaXROYW1lZFBpcGVBbmRDb25uZWN0KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKkFkZHJlc3M7CisgICAgUHlfc3NpemVfdCBBZGRyZXNzTGVuZ3RoOworICAgIEhBTkRMRSBJb2NwSGFuZGxlOworICAgIE9WRVJMQVBQRUQgT3ZlcmxhcHBlZDsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisgICAgV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0ICpjdHg7CisgICAgUHlfc3NpemVfdCBDb250ZXh0TGVuZ3RoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIyIgRl9IQU5ETEUgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmQWRkcmVzcywgJkFkZHJlc3NMZW5ndGgsICZJb2NwSGFuZGxlLCAmT3ZlcmxhcHBlZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIENvbnRleHRMZW5ndGggPSAoQWRkcmVzc0xlbmd0aCArCisgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdENvbnRleHQsIEFkZHJlc3MpKTsKKyAgICBjdHggPSBjYWxsb2MoMSwgQ29udGV4dExlbmd0aCArIDEpOworICAgIGlmIChjdHggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgbWVtY3B5KGN0eC0+QWRkcmVzcywgQWRkcmVzcywgQWRkcmVzc0xlbmd0aCArIDEpOworICAgIGN0eC0+T3ZlcmxhcHBlZCA9ICZzZWxmLT5vdmVybGFwcGVkOworICAgIGN0eC0+SW9jcEhhbmRsZSA9IElvY3BIYW5kbGU7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9XQUlUX05BTUVEX1BJUEVfQU5EX0NPTk5FQ1Q7CisgICAgc2VsZi0+aGFuZGxlID0gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBRdWV1ZVVzZXJXb3JrSXRlbShXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdEluVGhyZWFkLCBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RfRVhFQ1VURUxPTkdGVU5DVElPTik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorT3ZlcmxhcHBlZF9nZXRhZGRyZXNzKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVm9pZFB0cigmc2VsZi0+b3ZlcmxhcHBlZCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK092ZXJsYXBwZWRfZ2V0cGVuZGluZyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnR5cGUgIT0gVFlQRV9OT1RfU1RBUlRFRCk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBPdmVybGFwcGVkX21ldGhvZHNbXSA9IHsKKyAgICB7ImdldHJlc3VsdCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9nZXRyZXN1bHQsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9nZXRyZXN1bHRfZG9jfSwKKyAgICB7ImNhbmNlbCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9jYW5jZWwsCisgICAgIE1FVEhfTk9BUkdTLCBPdmVybGFwcGVkX2NhbmNlbF9kb2N9LAorICAgIHsiUmVhZEZpbGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfUmVhZEZpbGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9SZWFkRmlsZV9kb2N9LAorICAgIHsiV1NBUmVjdiIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FSZWN2LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBUmVjdl9kb2N9LAorICAgIHsiV3JpdGVGaWxlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dyaXRlRmlsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dyaXRlRmlsZV9kb2N9LAorICAgIHsiV1NBU2VuZCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FTZW5kLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBU2VuZF9kb2N9LAorICAgIHsiQWNjZXB0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQWNjZXB0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9BY2NlcHRFeF9kb2N9LAorICAgIHsiQ29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Nvbm5lY3RFeF9kb2N9LAorICAgIHsiRGlzY29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeF9kb2N9LAorICAgIHsiQ29ubmVjdE5hbWVkUGlwZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZV9kb2N9LAorICAgIHsiV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QiLAorICAgICAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdF9kb2N9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIE92ZXJsYXBwZWRfbWVtYmVyc1tdID0geworICAgIHsiZXJyb3IiLCBUX1VMT05HLAorICAgICBvZmZzZXRvZihPdmVybGFwcGVkT2JqZWN0LCBlcnJvciksCisgICAgIFJFQURPTkxZLCAiRXJyb3IgZnJvbSBsYXN0IG9wZXJhdGlvbiJ9LAorICAgIHsiZXZlbnQiLCBUX0hBTkRMRSwKKyAgICAgb2Zmc2V0b2YoT3ZlcmxhcHBlZE9iamVjdCwgb3ZlcmxhcHBlZCkgKyBvZmZzZXRvZihPVkVSTEFQUEVELCBoRXZlbnQpLAorICAgICBSRUFET05MWSwgIk92ZXJsYXBwZWQgZXZlbnQgaGFuZGxlIn0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgT3ZlcmxhcHBlZF9nZXRzZXRzW10gPSB7CisgICAgeyJhZGRyZXNzIiwgKGdldHRlcilPdmVybGFwcGVkX2dldGFkZHJlc3MsIE5VTEwsCisgICAgICJBZGRyZXNzIG9mIG92ZXJsYXBwZWQgc3RydWN0dXJlIn0sCisgICAgeyJwZW5kaW5nIiwgKGdldHRlcilPdmVybGFwcGVkX2dldHBlbmRpbmcsIE5VTEwsCisgICAgICJXaGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgcGVuZGluZyJ9LAorICAgIHtOVUxMfSwKK307CisKK1B5VHlwZU9iamVjdCBPdmVybGFwcGVkVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAvKiB0cF9uYW1lICAgICAgICAgICAqLyAiX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCIsCisgICAgLyogdHBfYmFzaWNzaXplICAgICAgKi8gc2l6ZW9mKE92ZXJsYXBwZWRPYmplY3QpLAorICAgIC8qIHRwX2l0ZW1zaXplICAgICAgICovIDAsCisgICAgLyogdHBfZGVhbGxvYyAgICAgICAgKi8gKGRlc3RydWN0b3IpIE92ZXJsYXBwZWRfZGVhbGxvYywKKyAgICAvKiB0cF9wcmludCAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0ciAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXNlcnZlZCAgICAgICAqLyAwLAorICAgIC8qIHRwX3JlcHIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfYXNfbnVtYmVyICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19zZXF1ZW5jZSAgICAqLyAwLAorICAgIC8qIHRwX2FzX21hcHBpbmcgICAgICovIDAsCisgICAgLyogdHBfaGFzaCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9jYWxsICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX3N0ciAgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZ2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9zZXRhdHRybyAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX2J1ZmZlciAgICAgICovIDAsCisgICAgLyogdHBfZmxhZ3MgICAgICAgICAgKi8gUHlfVFBGTEFHU19ERUZBVUxULAorICAgIC8qIHRwX2RvYyAgICAgICAgICAgICovICJPVkVSTEFQUEVEIHN0cnVjdHVyZSB3cmFwcGVyIiwKKyAgICAvKiB0cF90cmF2ZXJzZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2NsZWFyICAgICAgICAgICovIDAsCisgICAgLyogdHBfcmljaGNvbXBhcmUgICAgKi8gMCwKKyAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLyAwLAorICAgIC8qIHRwX2l0ZXIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfaXRlcm5leHQgICAgICAgKi8gMCwKKyAgICAvKiB0cF9tZXRob2RzICAgICAgICAqLyBPdmVybGFwcGVkX21ldGhvZHMsCisgICAgLyogdHBfbWVtYmVycyAgICAgICAgKi8gT3ZlcmxhcHBlZF9tZW1iZXJzLAorICAgIC8qIHRwX2dldHNldCAgICAgICAgICovIE92ZXJsYXBwZWRfZ2V0c2V0cywKKyAgICAvKiB0cF9iYXNlICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3QgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZGVzY3JfZ2V0ICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZXNjcl9zZXQgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3RvZmZzZXQgICAgICovIDAsCisgICAgLyogdHBfaW5pdCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9hbGxvYyAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX25ldyAgICAgICAgICAgICovIE92ZXJsYXBwZWRfbmV3LAorfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIG92ZXJsYXBwZWRfZnVuY3Rpb25zW10gPSB7CisgICAgeyJDcmVhdGVJb0NvbXBsZXRpb25Qb3J0Iiwgb3ZlcmxhcHBlZF9DcmVhdGVJb0NvbXBsZXRpb25Qb3J0LAorICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUlvQ29tcGxldGlvblBvcnRfZG9jfSwKKyAgICB7IkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMsCisgICAgIE1FVEhfVkFSQVJHUywgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2N9LAorICAgIHsiUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX1Bvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzLAorICAgICBNRVRIX1ZBUkFSR1MsIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvY30sCisgICAgeyJGb3JtYXRNZXNzYWdlIiwgb3ZlcmxhcHBlZF9Gb3JtYXRNZXNzYWdlLAorICAgICBNRVRIX1ZBUkFSR1MsIEZvcm1hdE1lc3NhZ2VfZG9jfSwKKyAgICB7IkJpbmRMb2NhbCIsIG92ZXJsYXBwZWRfQmluZExvY2FsLAorICAgICBNRVRIX1ZBUkFSR1MsIEJpbmRMb2NhbF9kb2N9LAorICAgIHsiUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlIiwgb3ZlcmxhcHBlZF9SZWdpc3RlcldhaXRXaXRoUXVldWUsCisgICAgIE1FVEhfVkFSQVJHUywgUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlX2RvY30sCisgICAgeyJVbnJlZ2lzdGVyV2FpdCIsIG92ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXQsCisgICAgIE1FVEhfVkFSQVJHUywgVW5yZWdpc3RlcldhaXRfZG9jfSwKKyAgICB7IkNyZWF0ZUV2ZW50Iiwgb3ZlcmxhcHBlZF9DcmVhdGVFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBDcmVhdGVFdmVudF9kb2N9LAorICAgIHsiU2V0RXZlbnQiLCBvdmVybGFwcGVkX1NldEV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIFNldEV2ZW50X2RvY30sCisgICAgeyJSZXNldEV2ZW50Iiwgb3ZlcmxhcHBlZF9SZXNldEV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIFJlc2V0RXZlbnRfZG9jfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3ZlcmxhcHBlZF9tb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfb3ZlcmxhcHBlZCIsCisgICAgTlVMTCwKKyAgICAtMSwKKyAgICBvdmVybGFwcGVkX2Z1bmN0aW9ucywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCisjZGVmaW5lIFdJTkFQSV9DT05TVEFOVChmbXQsIGNvbikgXAorICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICNjb24sIFB5X0J1aWxkVmFsdWUoZm10LCBjb24pKQorCitQeU1PRElOSVRfRlVOQworUHlJbml0X19vdmVybGFwcGVkKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm0sICpkOworCisgICAgLyogRW5zdXJlIFdTQVN0YXJ0dXAoKSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemluZyBmdW5jdGlvbiBwb2ludGVycyAqLworICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9zb2NrZXQiKTsKKyAgICBpZiAoIW0pCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihtKTsKKworICAgIGlmIChpbml0aWFsaXplX2Z1bmN0aW9uX3BvaW50ZXJzKCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJk92ZXJsYXBwZWRUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmb3ZlcmxhcHBlZF9tb2R1bGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIk92ZXJsYXBwZWQiLCAoUHlPYmplY3QgKikmT3ZlcmxhcHBlZFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKKworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfSU9fUEVORElORyk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBFUlJPUl9ORVROQU1FX0RFTEVURUQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfU0VNX1RJTUVPVVQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgSU5GSU5JVEUpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0hBTkRMRSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0hBTkRMRSwgTlVMTCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBTT19VUERBVEVfQUNDRVBUX0NPTlRFWFQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBURl9SRVVTRV9TT0NLRVQpOworCisgICAgcmV0dXJuIG07Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwppbmRleCBlODZmZTRkLi41MzdhMmU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCisrKyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKQEAgLTgzLDU0ICs4Myw3OCBAQAogICAgICAgICAgICBpbnQgbGluZW5vLCAgICAgICAgICAgICAgICAgIC8qIGluY2x1ZGUgbGluZSBudW1iZXJzPyAgICAgICAgICovCiAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0KSAgICAgICAgICAgICAgLyogaW5jbHVkZSBjb2x1bW4gb2Zmc2V0cz8gICAgICAgKi8KIHsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTCwgKnc7CisKICAgICBpZiAobiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQorCiAgICAgaWYgKElTTk9OVEVSTUlOQUwoVFlQRShuKSkpIHsKICAgICAgICAgaW50IGk7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwotICAgICAgICBQeU9iamVjdCAqdzsKIAotICAgICAgICB2ID0gbWtzZXEoMSArIE5DSChuKSArIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAodik7CisgICAgICAgIHJlc3VsdCA9IG1rc2VxKDEgKyBOQ0gobikgKyAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKTsKLSAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dXJuICgoUHlPYmplY3QqKSBOVUxMKTsKLSAgICAgICAgfQotICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCAwLCB3KTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgdyk7CisKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSsrKSB7CiAgICAgICAgICAgICB3ID0gbm9kZTJ0dXBsZShDSElMRChuLCBpKSwgbWtzZXEsIGFkZGVsZW0sIGxpbmVubywgY29sX29mZnNldCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCBpKzEsIHcpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCBpKzEsIHcpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkKLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHYsIGkrMSwgUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKSk7Ci0gICAgICAgIHJldHVybiAodik7CisgICAgICAgIGlmIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpIHsKKyAgICAgICAgICAgIHcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCBpKzEsIHcpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKElTVEVSTUlOQUwoVFlQRShuKSkpIHsKLSAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IG1rc2VxKDIgKyBsaW5lbm8gKyBjb2xfb2Zmc2V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKSk7Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDEsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSkpOwotICAgICAgICAgICAgaWYgKGxpbmVubyA9PSAxKQotICAgICAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMiwgUHlMb25nX0Zyb21Mb25nKG4tPm5fbGluZW5vKSk7Ci0gICAgICAgICAgICBpZiAoY29sX29mZnNldCA9PSAxKQotICAgICAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMywgUHlMb25nX0Zyb21Mb25nKG4tPm5fY29sX29mZnNldCkpOworICAgICAgICByZXN1bHQgPSBta3NlcSgyICsgbGluZW5vICsgY29sX29mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgdyk7CisKKyAgICAgICAgdyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDEsIHcpOworCisgICAgICAgIGlmIChsaW5lbm8gPT0gMSkgeworICAgICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2xpbmVubyk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDIsIHcpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAocmVzdWx0KTsKKworICAgICAgICBpZiAoY29sX29mZnNldCA9PSAxKSB7CisgICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKG4tPm5fY29sX29mZnNldCk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDMsIHcpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5yZWNvZ25pemVkIHBhcnNlIHRyZWUgbm9kZSB0eXBlIik7CiAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7CiAgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIC8qCiAgKiAgRW5kIG9mIG1hdGVyaWFsIGNvcHlyaWdodGVkIGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4KQEAgLTQ1MywzMyArNDc3LDQ2IEBACiBzdGF0aWMgUHlPYmplY3QqCiBwYXJzZXJfY29tcGlsZXN0KFB5U1RfT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQogewotICAgIFB5T2JqZWN0KiAgICAgcmVzID0gMDsKLSAgICBQeUFyZW5hKiAgICAgIGFyZW5hOworICAgIFB5T2JqZWN0KiAgICAgcmVzID0gTlVMTDsKKyAgICBQeUFyZW5hKiAgICAgIGFyZW5hID0gTlVMTDsKICAgICBtb2RfdHkgICAgICAgIG1vZDsKLSAgICBjaGFyKiAgICAgICAgIHN0ciA9ICI8c3ludGF4LXRyZWU+IjsKKyAgICBQeU9iamVjdCogICAgIGZpbGVuYW1lID0gTlVMTDsKICAgICBpbnQgb2s7CiAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsic3QiLCAiZmlsZW5hbWUiLCBOVUxMfTsKIAogICAgIGlmIChzZWxmID09IE5VTEwgfHwgUHlNb2R1bGVfQ2hlY2soc2VsZikpCi0gICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiTyF8czpjb21waWxlc3QiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5U1RfVHlwZSwgJnNlbGYsICZzdHIpOworICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk8hfE8mOmNvbXBpbGVzdCIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlTVF9UeXBlLCAmc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lKTsKICAgICBlbHNlCi0gICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifHM6Y29tcGlsZSIsICZrZXl3b3Jkc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cik7CisgICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE8mOmNvbXBpbGUiLCAma2V5d29yZHNbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSk7CisgICAgaWYgKCFvaykKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGlmIChvaykgewotICAgICAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7Ci0gICAgICAgIGlmIChhcmVuYSkgewotICAgICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShzZWxmLT5zdF9ub2RlLCAmKHNlbGYtPnN0X2ZsYWdzKSwgc3RyLCBhcmVuYSk7Ci0gICAgICAgICAgIGlmIChtb2QpIHsKLSAgICAgICAgICAgICAgIHJlcyA9IChQeU9iamVjdCAqKVB5QVNUX0NvbXBpbGUobW9kLCBzdHIsICYoc2VsZi0+c3RfZmxhZ3MpLCBhcmVuYSk7Ci0gICAgICAgICAgIH0KLSAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKLSAgICAgICAgfQorICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxzeW50YXgtdHJlZT4iKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIHJldHVybiAocmVzKTsKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgaWYgKCFhcmVuYSkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KHNlbGYtPnN0X25vZGUsICZzZWxmLT5zdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgYXJlbmEpOworICAgIGlmICghbW9kKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgcmVzID0gKFB5T2JqZWN0ICopUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlbGYtPnN0X2ZsYWdzLCAtMSwgYXJlbmEpOworZXJyb3I6CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisgICAgaWYgKGFyZW5hICE9IE5VTEwpCisgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogCkBAIC04MDksOCArODQ2LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHJuID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICBpZiAoc3RybiAhPSBOVUxMKQotICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkoc3RybiwgdGVtcF9zdHIsIGxlbiArIDEpOworICAgICAgICAgICAgaWYgKHN0cm4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGVsZW0pOworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHN0cm4sIHRlbXBfc3RyLCBsZW4gKyAxKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICghSVNOT05URVJNSU5BTCh0eXBlKSkgewpAQCAtODcwLDcgKzkxMiw3IEBACiAgICAgICAgICAqICBUaGUgdHVwbGUgaXMgc2ltcGxlLCBidXQgaXQgZG9lc24ndCBzdGFydCB3aXRoIGEgc3RhcnQgc3ltYm9sLgogICAgICAgICAgKiAgUmFpc2UgYW4gZXhjZXB0aW9uIG5vdyBhbmQgYmUgZG9uZSB3aXRoIGl0LgogICAgICAgICAgKi8KLSAgICAgICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCJvcyIsIHR1cGxlLAorICAgICAgICB0dXBsZSA9IFB5X0J1aWxkVmFsdWUoIk9zIiwgdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIHN5bnRheC10cmVlOyBjYW5ub3Qgc3RhcnQgd2l0aCB0ZXJtaW5hbCBzeW1ib2wuIik7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChwYXJzZXJfZXJyb3IsIHR1cGxlKTsKICAgICAgICAgUHlfWERFQ1JFRih0dXBsZSk7CkBAIC05MDYsOCArOTQ4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXMtPm5fc3RyID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcy0+bl9zdHIgIT0gTlVMTCAmJiB0ZW1wICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkocmVzLT5uX3N0ciwgdGVtcCwgbGVuICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcy0+bl9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkocmVzLT5uX3N0ciwgdGVtcCwgbGVuICsgMSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCmluZGV4IGYzMjM0YTQuLjJmMjFjZWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKQEAgLTEsMTUgKzEsMTQgQEAKIAogLyogUE9TSVggbW9kdWxlIGltcGxlbWVudGF0aW9uICovCiAKLS8qIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgZm9yIFdpbmRvd3MgTlQvTVMtV2luIGFuZCBPUy8yLiAgSW4gdGhhdCBjYXNlIHRoZQotICAgbW9kdWxlIGFjdHVhbGx5IGNhbGxzIGl0c2VsZiAnbnQnIG9yICdvczInLCBub3QgJ3Bvc2l4JywgYW5kIGEgZmV3CisvKiBUaGlzIGZpbGUgaXMgYWxzbyB1c2VkIGZvciBXaW5kb3dzIE5UL01TLVdpbi4gIEluIHRoYXQgY2FzZSB0aGUKKyAgIG1vZHVsZSBhY3R1YWxseSBjYWxscyBpdHNlbGYgJ250Jywgbm90ICdwb3NpeCcsIGFuZCBhIGZldwogICAgZnVuY3Rpb25zIGFyZSBlaXRoZXIgdW5pbXBsZW1lbnRlZCBvciBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseS4gIFRoZSBzb3VyY2UKICAgIGFzc3VtZXMgdGhhdCBmb3IgV2luZG93cyBOVCwgdGhlIG1hY3JvICdNU19XSU5ET1dTJyBpcyBkZWZpbmVkIGluZGVwZW5kZW50CiAgICBvZiB0aGUgY29tcGlsZXIgdXNlZC4gIERpZmZlcmVudCBjb21waWxlcnMgZGVmaW5lIHRoZWlyIG93biBmZWF0dXJlCi0gICB0ZXN0IG1hY3JvLCBlLmcuICdfX0JPUkxBTkRDX18nIG9yICdfTVNDX1ZFUicuICBGb3IgT1MvMiwgdGhlIGNvbXBpbGVyCi0gICBpbmRlcGVuZGVudCBtYWNybyBQWU9TX09TMiBzaG91bGQgYmUgZGVmaW5lZC4gIE9uIE9TLzIgdGhlIGRlZmF1bHQKLSAgIGNvbXBpbGVyIGlzIGFzc3VtZWQgdG8gYmUgSUJNJ3MgVmlzdWFsQWdlIEMrKyAoVkFDUFApLiAgUFlDQ19HQ0MgaXMgdXNlZAotICAgYXMgdGhlIGNvbXBpbGVyIHNwZWNpZmljIG1hY3JvIGZvciB0aGUgRU1YIHBvcnQgb2YgZ2NjIHRvIE9TLzIuICovCisgICB0ZXN0IG1hY3JvLCBlLmcuICdfX0JPUkxBTkRDX18nIG9yICdfTVNDX1ZFUicuICovCisKKwogCiAjaWZkZWYgX19BUFBMRV9fCiAgICAvKgpAQCAtNDYsMjIgKzQ1LDYgQEAKIGNvcnJlc3BvbmRpbmcgVW5peCBtYW51YWwgZW50cmllcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjYWxscy4iKTsKIAogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSNlcnJvciAiUEVQIDExOiBPUy8yIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLSNkZWZpbmUgIElOQ0xfRE9TCi0jZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSAgSU5DTF9ET1NQUk9DRVNTCi0jZGVmaW5lICBJTkNMX05PUE1BUEkKLSNpbmNsdWRlIDxvczIuaD4KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8aW8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZgotI2luY2x1ZGUgIm9zZGVmcy5oIgotI2VuZGlmCi0KICNpZmRlZiBIQVZFX1NZU19VSU9fSAogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNlbmRpZgpAQCAtMTMyLDYgKzExNSwxOCBAQAogI2luY2x1ZGUgPGRsZmNuLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9faHB1eAorI2luY2x1ZGUgPHN5cy9tcGN0bC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgIHx8IFwKKyAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgIHx8IFwKKyAgICBkZWZpbmVkKF9fTmV0QlNEX18pICAgIHx8IFwKKyAgICBkZWZpbmVkKF9fQVBQTEVfXykKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKwogI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICMgIGRlZmluZSBURVJNU0laRV9VU0VfQ09OSU8KICNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkKQEAgLTE0NiwyOSArMTQxLDE5IEBACiAKIC8qIFZhcmlvdXMgY29tcGlsZXJzIGhhdmUgb25seSBjZXJ0YWluIHBvc2l4IGZ1bmN0aW9ucyAqLwogLyogWFhYIEdvc2ggSSB3aXNoIHRoZXNlIHdlcmUgYWxsIG1vdmVkIGludG8gcHljb25maWcuaCAqLwotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZWxzZQogI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKF9fUU5YX18pICAgICAgICAgICAvKiBXYXRjb20gY29tcGlsZXIgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9PUEVORElSICAgIDEKICNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKLSNpZiBkZWZpbmVkKF9fT1MyX18pCi0jZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCi0jZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCi0jZW5kaWYKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZWxzZQogI2lmZGVmIF9fQk9STEFORENfXyAgICAgICAgICAgICAvKiBCb3JsYW5kIGNvbXBpbGVyICovCiAjZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCiAjZGVmaW5lIEhBVkVfUElQRSAgICAgICAxCiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCiAjZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCiAjZWxzZQogI2lmZGVmIF9NU0NfVkVSICAgICAgICAgLyogTWljcm9zb2Z0IGNvbXBpbGVyICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VUTE9HSU4gICAxCiAjZGVmaW5lIEhBVkVfU1BBV05WICAgICAxCkBAIC0xNzksOCArMTY0LDggQEAKICNkZWZpbmUgSEFWRV9GU1lOQyAgICAgIDEKICNkZWZpbmUgZnN5bmMgX2NvbW1pdAogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSB8fCBkZWZpbmVkKF9fVk1TKQotLyogRXZlcnl0aGluZyBuZWVkZWQgaXMgZGVmaW5lZCBpbiBQQy9vczJlbXgvcHljb25maWcuaCBvciB2bXMvcHljb25maWcuaCAqLworI2lmIGRlZmluZWQoX19WTVMpCisvKiBFdmVyeXRoaW5nIG5lZWRlZCBpcyBkZWZpbmVkIGluIHZtcy9weWNvbmZpZy5oICovCiAjZWxzZSAgICAgICAgICAgICAgICAgICAvKiBhbGwgb3RoZXIgY29tcGlsZXJzICovCiAvKiBVbml4IGZ1bmN0aW9ucyB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3QgY2hlY2sgZm9yICovCiAjZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCkBAIC0xODgsNyArMTczLDYgQEAKICNpZiBkZWZpbmVkKF9fVVNMQ19fKSAmJiBkZWZpbmVkKF9fU0NPX1ZFUlNJT05fXykgICAgICAgLyogU0NPIFVESyBDb21waWxlciAqLwogI2RlZmluZSBIQVZFX0ZPUksxICAgICAgMQogI2VuZGlmCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfR0VURUdJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VURVVJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VUR0lEICAgICAxCkBAIC0yMDAsMTQgKzE4NCwxNiBAQAogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQogI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQogI2RlZmluZSBIQVZFX1RUWU5BTUUgICAgMQotI2VuZGlmICAvKiBQWU9TX09TMiAmJiBQWUNDX0dDQyAmJiBfX1ZNUyAqLworI2VuZGlmICAvKiBfX1ZNUyAqLwogI2VuZGlmICAvKiBfTVNDX1ZFUiAqLwogI2VuZGlmICAvKiBfX0JPUkxBTkRDX18gKi8KICNlbmRpZiAgLyogISBfX1dBVENPTUNfXyB8fCBfX1FOWF9fICovCi0jZW5kaWYgLyogISBfX0lCTUNfXyAqLwogCiAKLQorLypbY2xpbmljXQorbW9kdWxlIG9zCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KIAogI2lmbmRlZiBfTVNDX1ZFUgogCkBAIC0zMzUsMTAgKzMyMSw2IEBACiAjZW5kaWYKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KICNpZm5kZWYgTUFYUEFUSExFTgogI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAogI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCkBAIC0zODAsNyArMzYyLDcgQEAKICN1bmRlZiBTVEFUCiAjdW5kZWYgRlNUQVQKICN1bmRlZiBTVFJVQ1RfU1RBVAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAjICAgICAgIGRlZmluZSBTVEFUIHdpbjMyX3N0YXQKICMgICAgICAgZGVmaW5lIExTVEFUIHdpbjMyX2xzdGF0CiAjICAgICAgIGRlZmluZSBGU1RBVCB3aW4zMl9mc3RhdApAQCAtNDAzLDYgKzM4NSw4IEBACiAjZW5kaWYKICNlbmRpZgogCisjZGVmaW5lIERXT1JEX01BWCA0Mjk0OTY3Mjk1VQorCiAKICNpZmRlZiBNU19XSU5ET1dTCiBzdGF0aWMgaW50CkBAIC00MzYsMTA4ICs0MjAsMjEzIEBACiBpbnQKIF9QeV9VaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgdWlkX3QgdWlkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInVpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKHVpZF90ICopcCA9ICh1aWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIHVpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh1aWRfdCl1cmVzdWx0ID09ICh1aWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIHVpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCB1aWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICB1aWQgPSAodWlkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KICAgICAgICAgaWYgKHNpemVvZih1aWRfdCkgPCBzaXplb2YobG9uZykgJiYKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh1aWRfdCl1cmVzdWx0ICE9IHVyZXN1bHQpCi0gICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgICoodWlkX3QgKilwID0gKHVpZF90KXVyZXN1bHQ7CisgICAgICAgICAgICAobG9uZyl1aWQgIT0gcmVzdWx0KQorICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICB9CisKKyAgICBpZiAob3ZlcmZsb3cgPCAwKQorICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgIC8qCisgICAgICogT2theSwgdGhlIHZhbHVlIG92ZXJmbG93ZWQgYSBzaWduZWQgbG9uZy4gIElmIGl0CisgICAgICogZml0cyBpbiBhbiAqdW5zaWduZWQqIGxvbmcsIGl0IG1heSBzdGlsbCBiZSBva2F5LAorICAgICAqIGFzIHVpZF90IG1heSBiZSB1bnNpZ25lZCBsb25nIG9uIHRoaXMgcGxhdGZvcm0uCisgICAgICovCisgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhpbmRleCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICBnb3RvIG92ZXJmbG93OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgdWlkID0gKHVpZF90KXVyZXN1bHQ7CisKKyAgICAvKgorICAgICAqIElmIHVpZCA9PSAodWlkX3QpLTEsIHRoZSB1c2VyIGFjdHVhbGx5IHBhc3NlZCBpbiBVTE9OR19NQVgsCisgICAgICogYnV0IHRoaXMgdmFsdWUgd291bGQgZ2V0IGludGVycHJldGVkIGFzICh1aWRfdCktMSAgYnkgY2hvd24KKyAgICAgKiBhbmQgaXRzIHNpYmxpbmdzLiAgIFRoYXQncyBub3Qgd2hhdCB0aGUgdXNlciBtZWFudCEgIFNvIHdlCisgICAgICogdGhyb3cgYW4gb3ZlcmZsb3cgZXhjZXB0aW9uIGluc3RlYWQuICAgKFdlIGFscmVhZHkKKyAgICAgKiBoYW5kbGVkIGEgcmVhbCAtMSB3aXRoIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdygpIGFib3ZlLikKKyAgICAgKi8KKyAgICBpZiAodWlkID09ICh1aWRfdCktMSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKworICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KKyAgICBpZiAoc2l6ZW9mKHVpZF90KSA8IHNpemVvZihsb25nKSAmJgorICAgICAgICAodW5zaWduZWQgbG9uZyl1aWQgIT0gdXJlc3VsdCkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAvKiBmYWxsdGhyb3VnaCAqLworCitzdWNjZXNzOgorICAgIFB5X0RFQ1JFRihpbmRleCk7CisgICAgKih1aWRfdCAqKXAgPSB1aWQ7CiAgICAgcmV0dXJuIDE7CiAKLU92ZXJmbG93RG93bjoKK3VuZGVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInVzZXIgaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgInVpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgIGdvdG8gZmFpbDsKIAotT3ZlcmZsb3dVcDoKK292ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAidXNlciBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAidWlkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogCiBpbnQKIF9QeV9HaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgZ2lkX3QgZ2lkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImdpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIGdpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChnaWRfdCl1cmVzdWx0ID09IChnaWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIGdpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCBnaWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICBnaWQgPSAoZ2lkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIH0KKworICAgICAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCiAgICAgICAgIGlmIChzaXplb2YoZ2lkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCi0gICAgICAgICAgICAodW5zaWduZWQgbG9uZykoZ2lkX3QpdXJlc3VsdCAhPSB1cmVzdWx0KQotICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCl1cmVzdWx0OworICAgICAgICAgICAgKGxvbmcpZ2lkICE9IHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQorCisgICAgaWYgKG92ZXJmbG93IDwgMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAvKgorICAgICAqIE9rYXksIHRoZSB2YWx1ZSBvdmVyZmxvd2VkIGEgc2lnbmVkIGxvbmcuICBJZiBpdAorICAgICAqIGZpdHMgaW4gYW4gKnVuc2lnbmVkKiBsb25nLCBpdCBtYXkgc3RpbGwgYmUgb2theSwKKyAgICAgKiBhcyBnaWRfdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAqLworICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoaW5kZXgpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGdpZCA9IChnaWRfdCl1cmVzdWx0OworCisgICAgLyoKKyAgICAgKiBJZiBnaWQgPT0gKGdpZF90KS0xLCB0aGUgdXNlciBhY3R1YWxseSBwYXNzZWQgaW4gVUxPTkdfTUFYLAorICAgICAqIGJ1dCB0aGlzIHZhbHVlIHdvdWxkIGdldCBpbnRlcnByZXRlZCBhcyAoZ2lkX3QpLTEgIGJ5IGNob3duCisgICAgICogYW5kIGl0cyBzaWJsaW5ncy4gICBUaGF0J3Mgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQhICBTbyB3ZQorICAgICAqIHRocm93IGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnN0ZWFkLiAgIChXZSBhbHJlYWR5CisgICAgICogaGFuZGxlZCBhIHJlYWwgLTEgd2l0aCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coKSBhYm92ZS4pCisgICAgICovCisgICAgaWYgKGdpZCA9PSAoZ2lkX3QpLTEpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisKKyAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCisgICAgaWYgKHNpemVvZihnaWRfdCkgPCBzaXplb2YobG9uZykgJiYKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpZ2lkICE9IHVyZXN1bHQpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOworICAgICooZ2lkX3QgKilwID0gZ2lkOwogICAgIHJldHVybiAxOwogCi1PdmVyZmxvd0Rvd246Cit1bmRlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwotICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgZ290byBmYWlsOwogCi1PdmVyZmxvd1VwOgorb3ZlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTU2MCwyNSArNjQ5LDI5IEBACiBfZmRfY29udmVydGVyKFB5T2JqZWN0ICpvLCBpbnQgKnAsIGNvbnN0IGNoYXIgKmFsbG93ZWQpCiB7CiAgICAgaW50IG92ZXJmbG93OwotICAgIGxvbmcgbG9uZ192YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvLCAmb3ZlcmZsb3cpOwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG8pIHx8Ci0gICAgICAgIChsb25nX3ZhbHVlID09IC0xICYmICFvdmVyZmxvdyAmJiBQeUVycl9PY2N1cnJlZCgpKSkgewotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGxvbmcgbG9uZ192YWx1ZTsKKworICAgIFB5T2JqZWN0ICppbmRleCA9IFB5TnVtYmVyX0luZGV4KG8pOworICAgIGlmIChpbmRleCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlICVzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQsIFB5X1RZUEUobyktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSAlcywgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkLCBQeV9UWVBFKG8pLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorCisgICAgbG9uZ192YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIGlmIChvdmVyZmxvdyA+IDAgfHwgbG9uZ192YWx1ZSA+IElOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKG92ZXJmbG93IDwgMCB8fCBsb25nX3ZhbHVlIDwgSU5UX01JTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzaWduZWQgaW50ZWdlciBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImZkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKwogICAgICpwID0gKGludClsb25nX3ZhbHVlOwogICAgIHJldHVybiAxOwogfQpAQCAtNjI2LDcgKzcxOSw3IEBACiAgKiAgIHBhdGguZnVuY3Rpb25fbmFtZQogICogICAgIElmIG5vbi1OVUxMLCBwYXRoX2NvbnZlcnRlciB3aWxsIHVzZSB0aGF0IGFzIHRoZSBuYW1lCiAgKiAgICAgb2YgdGhlIGZ1bmN0aW9uIGluIGVycm9yIG1lc3NhZ2VzLgotICogICAgIChJZiBwYXRoLmFyZ3VtZW50X25hbWUgaXMgTlVMTCBpdCBvbWl0cyB0aGUgZnVuY3Rpb24gbmFtZS4pCisgKiAgICAgKElmIHBhdGguZnVuY3Rpb25fbmFtZSBpcyBOVUxMIGl0IG9taXRzIHRoZSBmdW5jdGlvbiBuYW1lLikKICAqICAgcGF0aC5hcmd1bWVudF9uYW1lCiAgKiAgICAgSWYgbm9uLU5VTEwsIHBhdGhfY29udmVydGVyIHdpbGwgdXNlIHRoYXQgYXMgdGhlIG5hbWUKICAqICAgICBvZiB0aGUgcGFyYW1ldGVyIGluIGVycm9yIG1lc3NhZ2VzLgpAQCAtNjc4LDggKzc3MSw4IEBACiAgKiBwYXRoX2NsZWFudXAoKS4gIEhvd2V2ZXIgaXQgaXMgc2FmZSB0byBkbyBzby4pCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyICpmdW5jdGlvbl9uYW1lOwotICAgIGNoYXIgKmFyZ3VtZW50X25hbWU7CisgICAgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZTsKKyAgICBjb25zdCBjaGFyICphcmd1bWVudF9uYW1lOwogICAgIGludCBudWxsYWJsZTsKICAgICBpbnQgYWxsb3dfZmQ7CiAgICAgd2NoYXJfdCAqd2lkZTsKQEAgLTY5MCw2ICs3ODMsOSBAQAogICAgIFB5T2JqZWN0ICpjbGVhbnVwOwogfSBwYXRoX3Q7CiAKKyNkZWZpbmUgUEFUSF9UX0lOSVRJQUxJWkUoZnVuY3Rpb25fbmFtZSwgbnVsbGFibGUsIGFsbG93X2ZkKSBcCisgICAge2Z1bmN0aW9uX25hbWUsIE5VTEwsIG51bGxhYmxlLCBhbGxvd19mZCwgTlVMTCwgTlVMTCwgMCwgMCwgTlVMTCwgTlVMTH0KKwogc3RhdGljIHZvaWQKIHBhdGhfY2xlYW51cChwYXRoX3QgKnBhdGgpIHsKICAgICBpZiAocGF0aC0+Y2xlYW51cCkgewpAQCAtNzM4LDE1ICs4MzQsMTQgQEAKICAgICBpZiAodW5pY29kZSkgewogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgd2NoYXJfdCAqd2lkZTsKLSAgICAgICAgbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpOwotICAgICAgICBpZiAobGVuZ3RoID4gMzI3NjcpIHsKLSAgICAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CisKKyAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHVuaWNvZGUsICZsZW5ndGgpOworICAgICAgICBpZiAoIXdpZGUpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0KLSAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pY29kZSk7Ci0gICAgICAgIGlmICghd2lkZSkgeworICAgICAgICBpZiAobGVuZ3RoID4gMzI3NjcpIHsKKyAgICAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtODA0LDcgKzg5OSw3IEBACiAKICAgICBsZW5ndGggPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRIKSB7CisgICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRILTEpIHsKICAgICAgICAgRk9STUFUX0VYQ0VQVElPTihQeUV4Y19WYWx1ZUVycm9yLCAiJXMgdG9vIGxvbmcgZm9yIFdpbmRvd3MiKTsKICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA1LDEwICsxMjAwLDYgQEAKICNlbHNlCiAgICAgY2hhciAqKmU7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIEFQSVJFVCByYzsKLSAgICBjaGFyICAgYnVmZmVyWzEwMjRdOyAvKiBPUy8yIFByb3ZpZGVzIGEgRG9jdW1lbnRlZCBNYXggb2YgMTAyNCBDaGFycyAqLwotI2VuZGlmCiAKICAgICBkID0gUHlEaWN0X05ldygpOwogICAgIGlmIChkID09IE5VTEwpCkBAIC0xMTc3LDIwICsxMjY4LDYgQEAKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgIH0KICNlbmRpZgotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgcmMgPSBEb3NRdWVyeUV4dExJQlBBVEgoYnVmZmVyLCBCRUdJTl9MSUJQQVRIKTsKLSAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsgLyogKG5vdCBhIHR5cGUsIGVudm5hbWUgaXMgTk9UICdCRUdJTl9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkJFR0lOTElCUEFUSCIsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJjID0gRG9zUXVlcnlFeHRMSUJQQVRIKGJ1ZmZlciwgRU5EX0xJQlBBVEgpOwotICAgIGlmIChyYyA9PSBOT19FUlJPUikgeyAvKiAobm90IGEgdHlwbywgZW52bmFtZSBpcyBOT1QgJ0VORF9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkVORExJQlBBVEgiLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBkOwogfQogCkBAIC0xMjAxLDI1ICsxMjc4LDYgQEAKIHsKICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUoY2hhciogbmFtZSkKLXsKLSAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsIG5hbWUpOwotfQotCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShQeU9iamVjdCogbmFtZSkKLXsKLSAgICBQeU9iamVjdCAqbmFtZV9zdHIsICpyYzsKLSAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKFB5Qnl0ZXNfQXNTdHJpbmcobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG5hbWUpKTsKLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmMgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N0cik7Ci0gICAgUHlfWERFQ1JFRihuYW1lX3N0cik7Ci0gICAgcmV0dXJuIHJjOwotfQogCiAjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyMzgsMjQgKzEyOTYsMTMgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdpbjMyX2Vycm9yX3VuaWNvZGUoY2hhciogZnVuY3Rpb24sIHdjaGFyX3QqIGZpbGVuYW1lKQotewotICAgIC8qIFhYWCAtIHNlZSB3aW4zMl9lcnJvciBmb3IgY29tbWVudHMgb24gJ2Z1bmN0aW9uJyAqLwotICAgIGVycm5vID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgaWYgKGZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKGVycm5vLCBmaWxlbmFtZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJybm8pOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogd2luMzJfZXJyb3Jfb2JqZWN0KGNoYXIqIGZ1bmN0aW9uLCBQeU9iamVjdCogZmlsZW5hbWUpCiB7CiAgICAgLyogWFhYIC0gc2VlIHdpbjMyX2Vycm9yIGZvciBjb21tZW50cyBvbiAnZnVuY3Rpb24nICovCiAgICAgZXJybm8gPSBHZXRMYXN0RXJyb3IoKTsKICAgICBpZiAoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICBlcnJubywKICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwogICAgIGVsc2UKQEAgLTEyNjQsMTA4ICsxMzExLDE3IEBACiAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKLS8qCi0gKiBTb21lIGZ1bmN0aW9ucyByZXR1cm4gV2luMzIgZXJyb3JzLCBvdGhlcnMgb25seSBldmVyIHVzZSBwb3NpeF9lcnJvcgotICogKHRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZXhjZXB0aW9ucykKLSAqLwogc3RhdGljIFB5T2JqZWN0ICoKLXBhdGhfcG9zaXhfZXJyb3IoY2hhciAqZnVuY3Rpb25fbmFtZSwgcGF0aF90ICpwYXRoKQotewotICAgIGlmIChwYXRoLT5uYXJyb3cpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgtPm5hcnJvdyk7Ci0gICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wYXRoX2Vycm9yKGNoYXIgKmZ1bmN0aW9uX25hbWUsIHBhdGhfdCAqcGF0aCkKK3BhdGhfZXJyb3IocGF0aF90ICpwYXRoKQogewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAocGF0aC0+bmFycm93KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuY3Rpb25fbmFtZSwgcGF0aC0+bmFycm93KTsKLSAgICBpZiAocGF0aC0+d2lkZSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoZnVuY3Rpb25fbmFtZSwgcGF0aC0+d2lkZSk7Ci0gICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmN0aW9uX25hbWUsIE5VTEwpOworICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwYXRoLT5vYmplY3QpOwogI2Vsc2UKLSAgICByZXR1cm4gcGF0aF9wb3NpeF9lcnJvcihmdW5jdGlvbl9uYW1lLCBwYXRoKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgtPm9iamVjdCk7CiAjZW5kaWYKIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBIZWxwZXIgRnVuY3Rpb24gdG8gVHJpbSBhbmQgRm9ybWF0IE9TLzIgTWVzc2FnZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLW9zMl9mb3JtYXRtc2coY2hhciAqbXNnYnVmLCBpbnQgbXNnbGVuLCBjaGFyICpyZWFzb24pCi17Ci0gICAgbXNnYnVmW21zZ2xlbl0gPSAnXDAnOyAvKiBPUy8yIERvZXNuJ3QgR3VhcmFudGVlIGEgVGVybWluYXRvciAqLwotCi0gICAgaWYgKHN0cmxlbihtc2didWYpID4gMCkgeyAvKiBJZiBOb24tRW1wdHkgTXNnLCBUcmltIENSTEYgKi8KLSAgICAgICAgY2hhciAqbGFzdGMgPSAmbXNnYnVmWyBzdHJsZW4obXNnYnVmKS0xIF07Ci0KLSAgICAgICAgd2hpbGUgKGxhc3RjID4gbXNnYnVmICYmIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKmxhc3RjKSkpCi0gICAgICAgICAgICAqbGFzdGMtLSA9ICdcMCc7IC8qIFRyaW0gVHJhaWxpbmcgV2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICB9Ci0KLSAgICAvKiBBZGQgT3B0aW9uYWwgUmVhc29uIFRleHQgKi8KLSAgICBpZiAocmVhc29uKSB7Ci0gICAgICAgIHN0cmNhdChtc2didWYsICIgOiAiKTsKLSAgICAgICAgc3RyY2F0KG1zZ2J1ZiwgcmVhc29uKTsKLSAgICB9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICBEZWNvZGUgYW4gT1MvMiBPcGVyYXRpbmcgU3lzdGVtIEVycm9yIENvZGUKLSAqCi0gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb2t1cCBhbiBPUy8yIGVycm9yIGNvZGUgYW5kIHJldHVybiBhCi0gKiB0ZXh0IG1lc3NhZ2Ugd2UgY2FuIHVzZSB0byByYWlzZSBhIFB5dGhvbiBleGNlcHRpb24uCi0gKgotICogTm90ZXM6Ci0gKiAgIFRoZSBtZXNzYWdlcyBmb3IgZXJyb3JzIHJldHVybmVkIGZyb20gdGhlIE9TLzIga2VybmVsIHJlc2lkZSBpbgotICogICB0aGUgZmlsZSBPU08wMDEuTVNHIGluIHRoZSBcT1MyIGRpcmVjdG9yeSBoaWVyYXJjaHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgY2hhciAqCi1vczJfc3RyZXJyb3IoY2hhciAqbXNnYnVmLCBpbnQgbXNnYnVmbGVuLCBpbnQgZXJyb3Jjb2RlLCBjaGFyICpyZWFzb24pCi17Ci0gICAgQVBJUkVUIHJjOwotICAgIFVMT05HICBtc2dsZW47Ci0KLSAgICAvKiBSZXRyaWV2ZSBLZXJuZWwtUmVsYXRlZCBFcnJvciBNZXNzYWdlIGZyb20gT1NPMDAxLk1TRyBGaWxlICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gRG9zR2V0TWVzc2FnZShOVUxMLCAwLCBtc2didWYsIG1zZ2J1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb2RlLCAib3NvMDAxLm1zZyIsICZtc2dsZW4pOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmMgPT0gTk9fRVJST1IpCi0gICAgICAgIG9zMl9mb3JtYXRtc2cobXNnYnVmLCBtc2dsZW4sIHJlYXNvbik7Ci0gICAgZWxzZQotICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgbXNnYnVmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIE9TIGVycm9yICMlZCIsIGVycm9yY29kZSk7Ci0KLSAgICByZXR1cm4gbXNnYnVmOwotfQotCi0vKiBTZXQgYW4gT1MvMi1zcGVjaWZpYyBlcnJvciBhbmQgcmV0dXJuIE5VTEwuICBPUy8yIGtlcm5lbAotICAgZXJyb3JzIGFyZSBub3QgaW4gYSBnbG9iYWwgdmFyaWFibGUgZS5nLiAnZXJybm8nIG5vciBhcmUKLSAgIHRoZXkgY29uZ3J1ZW50IHdpdGggcG9zaXggZXJyb3IgbnVtYmVycy4gKi8KLQotc3RhdGljIFB5T2JqZWN0ICoKLW9zMl9lcnJvcihpbnQgY29kZSkKLXsKLSAgICBjaGFyIHRleHRbMTAyNF07Ci0gICAgUHlPYmplY3QgKnY7Ci0KLSAgICBvczJfc3RyZXJyb3IodGV4dCwgc2l6ZW9mKHRleHQpLCBjb2RlLCAiIik7Ci0KLSAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIGNvZGUsIHRleHQpOwotICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOyAvKiBTaWduYWwgdG8gUHl0aG9uIHRoYXQgYW4gRXhjZXB0aW9uIGlzIFBlbmRpbmcgKi8KLX0KLQotI2VuZGlmIC8qIE9TMiAqLwogCiAvKiBQT1NJWCBnZW5lcmljIG1ldGhvZHMgKi8KIApAQCAtMTM4OSw2NSArMTM0NSwzMSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfMXN0cihQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LCBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCitwb3NpeF8xc3RyKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgUHlPYmplY3QgKmFyZ3MsIGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgaW50ICgqZnVuYykoY29uc3QgY2hhciopKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDEgPSBOVUxMOwotICAgIGNoYXIgKnBhdGgxOworICAgIHBhdGhfdCBwYXRoOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9IGZ1bmNfbmFtZTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoMSA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgxKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gKCpmdW5jKShwYXRoMSk7CisgICAgcmVzID0gKCpmdW5jKShwYXRoLm5hcnJvdyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoMSk7Ci0gICAgUHlfREVDUkVGKG9wYXRoMSk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAogCiAjaWZkZWYgTVNfV0lORE9XUwotc3RhdGljIFB5T2JqZWN0Kgotd2luMzJfMXN0cihQeU9iamVjdCogYXJncywgY2hhciogZnVuYywKLSAgICAgICAgICAgY2hhciogZm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNBKShMUENTVFIpLAotICAgICAgICAgICBjaGFyKiB3Zm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNXKShMUFdTVFIpKQotewotICAgIFB5T2JqZWN0ICp1bmk7Ci0gICAgY29uc3QgY2hhciAqYW5zaTsKLSAgICBCT09MIHJlc3VsdDsKLQotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHdmb3JtYXQsICZ1bmkpKQotICAgIHsKLSAgICAgICAgd2NoYXJfdCAqd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pKTsKLSAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJlc3VsdCA9IGZ1bmNXKHdzdHIpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoZnVuYywgdW5pKTsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgUHlFcnJfQ2xlYXIoKTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsICZhbnNpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHdpbjMyX3dhcm5fYnl0ZXNfYXBpKCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXN1bHQgPSBmdW5jQShhbnNpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuYywgYW5zaSk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotCi19Ci0KIC8qIFRoaXMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHRoZSBDIGxpYnJhcnkncyBjaGRpciBmdW5jdGlvbiwKICAgIGJ1dCBvbmUgdGhhdCBwcm9kdWNlcyBXaW4zMiBlcnJvcnMgaW5zdGVhZCBvZiBET1MgZXJyb3IgY29kZXMuCiAgICBjaGRpciBpcyBlc3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIFNldEN1cnJlbnREaXJlY3Rvcnk7IGhvd2V2ZXIsCkBAIC0xNDU2LDE4ICsxMzc4LDE4IEBACiBzdGF0aWMgQk9PTCBfX3N0ZGNhbGwKIHdpbjMyX2NoZGlyKExQQ1NUUiBwYXRoKQogewotICAgIGNoYXIgbmV3X3BhdGhbTUFYX1BBVEgrMV07CisgICAgY2hhciBuZXdfcGF0aFtNQVhfUEFUSF07CiAgICAgaW50IHJlc3VsdDsKICAgICBjaGFyIGVudls0XSA9ICI9eDoiOwogCiAgICAgaWYoIVNldEN1cnJlbnREaXJlY3RvcnlBKHBhdGgpKQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeUEoTUFYX1BBVEgrMSwgbmV3X3BhdGgpOworICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlBKFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCksIG5ld19wYXRoKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8qIEluIHRoZSBBTlNJIEFQSSwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgcGF0aHMgbG9uZ2VyCi0gICAgICAgdGhhbiBNQVhfUEFUSC4gKi8KLSAgICBhc3NlcnQocmVzdWx0IDw9IE1BWF9QQVRIKzEpOworICAgICAgIHRoYW4gTUFYX1BBVEgtMSAobm90IGluY2x1ZGluZyB0aGUgZmluYWwgbnVsbCBjaGFyYWN0ZXIpLiAqLworICAgIGFzc2VydChyZXN1bHQgPCBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKTsKICAgICBpZiAoc3RybmNtcChuZXdfcGF0aCwgIlxcXFwiLCAyKSA9PSAwIHx8CiAgICAgICAgIHN0cm5jbXAobmV3X3BhdGgsICIvLyIsIDIpID09IDApCiAgICAgICAgIC8qIFVOQyBwYXRoLCBub3RoaW5nIHRvIGRvLiAqLwpAQCAtMTQ4MSwyNCArMTQwMywyNCBAQAogc3RhdGljIEJPT0wgX19zdGRjYWxsCiB3aW4zMl93Y2hkaXIoTFBDV1NUUiBwYXRoKQogewotICAgIHdjaGFyX3QgX25ld19wYXRoW01BWF9QQVRIKzFdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CisgICAgd2NoYXJfdCBfbmV3X3BhdGhbTUFYX1BBVEhdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CiAgICAgaW50IHJlc3VsdDsKICAgICB3Y2hhcl90IGVudls0XSA9IEwiPXg6IjsKIAogICAgIGlmKCFTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRIKzEsIG5ld19wYXRoKTsKKyAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpLCBuZXdfcGF0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZiAocmVzdWx0ID4gTUFYX1BBVEgrMSkgewotICAgICAgICBuZXdfcGF0aCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKSB7CisgICAgICAgIG5ld19wYXRoID0gUHlNZW1fUmF3TWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghbmV3X3BhdGgpIHsKICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcocmVzdWx0LCBuZXdfcGF0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUobmV3X3BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgfQpAQCAtMTUwOSw3ICsxNDMxLDcgQEAKICAgICBlbnZbMV0gPSBuZXdfcGF0aFswXTsKICAgICByZXN1bHQgPSBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnYsIG5ld19wYXRoKTsKICAgICBpZiAobmV3X3BhdGggIT0gX25ld19wYXRoKQotICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtMTUyNCwxMyArMTQ0NiwxMyBAQAogI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCiAKIHN0cnVjdCB3aW4zMl9zdGF0ewotICAgIGludCBzdF9kZXY7CisgICAgdW5zaWduZWQgbG9uZyBzdF9kZXY7CiAgICAgX19pbnQ2NCBzdF9pbm87CiAgICAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICAgICBpbnQgc3Rfbmxpbms7CiAgICAgaW50IHN0X3VpZDsKICAgICBpbnQgc3RfZ2lkOwotICAgIGludCBzdF9yZGV2OworICAgIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKICAgICBfX2ludDY0IHN0X3NpemU7CiAgICAgdGltZV90IHN0X2F0aW1lOwogICAgIGludCBzdF9hdGltZV9uc2VjOwpAQCAtMTU4OSw2ICsxNTExLDggQEAKICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwogICAgIHJlc3VsdC0+c3RfbW9kZSA9IGF0dHJpYnV0ZXNfdG9fbW9kZShpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzKTsKICAgICByZXN1bHQtPnN0X3NpemUgPSAoKChfX2ludDY0KWluZm8tPm5GaWxlU2l6ZUhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZVNpemVMb3c7CisgICAgcmVzdWx0LT5zdF9kZXYgPSBpbmZvLT5kd1ZvbHVtZVNlcmlhbE51bWJlcjsKKyAgICByZXN1bHQtPnN0X3JkZXYgPSByZXN1bHQtPnN0X2RldjsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0Q3JlYXRpb25UaW1lLCAmcmVzdWx0LT5zdF9jdGltZSwgJnJlc3VsdC0+c3RfY3RpbWVfbnNlYyk7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RXcml0ZVRpbWUsICZyZXN1bHQtPnN0X210aW1lLCAmcmVzdWx0LT5zdF9tdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdEFjY2Vzc1RpbWUsICZyZXN1bHQtPnN0X2F0aW1lLCAmcmVzdWx0LT5zdF9hdGltZV9uc2VjKTsKQEAgLTE1OTYsOSArMTUyMCw5IEBACiAgICAgcmVzdWx0LT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8tPm5GaWxlSW5kZXhIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVJbmRleExvdzsKICAgICBpZiAocmVwYXJzZV90YWcgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgewogICAgICAgICAvKiBmaXJzdCBjbGVhciB0aGUgU19JRk1UIGJpdHMgKi8KLSAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiAwMTcwMDAwKTsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiBTX0lGTVQpOwogICAgICAgICAvKiBub3cgc2V0IHRoZSBiaXRzIHRoYXQgbWFrZSB0aGlzIGEgc3ltbGluayAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gMDEyMDAwMDsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IFNfSUZMTks7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNjUxLDcgKzE1NzUsNyBAQAogfQogCiAvKiBHcmFiIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCi1zdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAwOworc3RhdGljIGludCBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlID0gLTE7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKShIQU5ETEUsIExQV1NUUiwgRFdPUkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CiBzdGF0aWMgaW50CkBAIC0xNjYyLDcgKzE1ODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQpOwogCiAgICAgLyogb25seSByZWNoZWNrICovCi0gICAgaWYgKCFoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQorICAgIGlmICgtMSA9PSBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQogICAgIHsKICAgICAgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlVyhMIktFUk5FTDMyIik7CiAgICAgICAgICooRkFSUFJPQyopJlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZUEgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsCkBAIC0xNjg4LDcgKzE2MTIsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFidWYpIHsKICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTY5OCwxMiArMTYyMiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1Zl9zaXplLCBWT0xVTUVfTkFNRV9ET1MpOwogCiAgICAgaWYoIXJlc3VsdF9sZW5ndGgpIHsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBpZighQ2xvc2VIYW5kbGUoaGRsKSkgewotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtMTc5NCw3ICsxNzE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMTg5MCw3ICsxODE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMjI4OSw3ICsyMjEzLDkgQEAKICNlbHNlCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAxLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpc3QtPnN0X2lubykpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAyLCBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhzdC0+c3RfZGV2KSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORylzdC0+c3RfZGV2KSk7CiAjZWxzZQpAQCAtMjQyNCw1MyArMjM1MCwxNTEgQEAKICAgICAgICAgcmVzdWx0ID0gU1RBVChwYXRoLT5uYXJyb3csICZzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IoInN0YXQiLCBwYXRoKTsKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CisgICAgfQogCiAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3N0YXRfX2RvY19fLAotInN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKSAtPiBzdGF0IHJlc3VsdFxuXG5cCi1QZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cblwKLVxuXAotcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIHN0cmluZyBvciBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLSAgZGlyX2ZkIG1heSBub3QgYmUgc3VwcG9ydGVkIG9uIHlvdXIgcGxhdGZvcm07IGlmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZ1xuXAotICBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1JdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuXAotICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKyNpZmRlZiBIQVZFX0ZTVEFUQVQKKyAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKworLypbcHl0aG9uXQorCitjbGFzcyBwYXRoX3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorCisgICAgdHlwZSA9ICJwYXRoX3QiCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorCisgICAgY29udmVydGVyID0gJ3BhdGhfY29udmVydGVyJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGFsbG93X2ZkPUZhbHNlLCBudWxsYWJsZT1GYWxzZSk6CisgICAgICAgIGRlZiBzdHJpZnkodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihpbnQoYm9vbCh2YWx1ZSkpKQorCisgICAgICAgICMgcmlnaHQgbm93IHBhdGhfdCBkb2Vzbid0IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICMgdG8gc3VwcG9ydCBhIGRlZmF1bHQgdmFsdWUsIHlvdSdsbCBuZWVkIHRvIG92ZXJyaWRlIGluaXRpYWxpemUoKS4KKworICAgICAgICBhc3NlcnQgc2VsZi5kZWZhdWx0IGlzIHVuc3BlY2lmaWVkCisKKyAgICAgICAgc2VsZi5udWxsYWJsZSA9IG51bGxhYmxlCisgICAgICAgIHNlbGYuYWxsb3dfZmQgPSBhbGxvd19mZAorCisgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ1BBVEhfVF9JTklUSUFMSVpFKCJ7fSIsIHt9LCB7fSknLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24ubmFtZSwKKyAgICAgICAgICAgIHN0cmlmeShudWxsYWJsZSksCisgICAgICAgICAgICBzdHJpZnkoYWxsb3dfZmQpLAorICAgICAgICAgICAgKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHJldHVybiAicGF0aF9jbGVhbnVwKCYiICsgc2VsZi5uYW1lICsgIik7XG4iCisKKworY2xhc3MgZGlyX2ZkX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBjb252ZXJ0ZXIgPSAnT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaW4gKHVuc3BlY2lmaWVkLCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ0RFRkFVTFRfRElSX0ZEJworCisKK1tweXRob25dKi8KKy8qW3B5dGhvbiBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCisvKltjbGluaWNdCisKK29zLnN0YXQgLT4gb2JqZWN0KGRvY19kZWZhdWx0PSdzdGF0X3Jlc3VsdCcpCisKKyAgICBwYXRoIDogcGF0aF90KGFsbG93X2ZkPVRydWUpCisgICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0bworICAgICAgICB0aGF0IGRpcmVjdG9yeS4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgICAgICAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KKworZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZAorICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhCisgIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK0l0J3MgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXMKKyAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCisKK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKG9zX3N0YXRfX2RvY19fLAorInN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIlBlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIGV4YW1pbmVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgorIiAgZGlyX2ZkXG4iCisiICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcbiIKKyIgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0b1xuIgorIiAgICB0aGF0IGRpcmVjdG9yeS5cbiIKKyIgIGZvbGxvd19zeW1saW5rc1xuIgorIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgorIiAgICBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgorIiAgICB0aGUgbGluayBwb2ludHMgdG8uXG4iCisiXG4iCisiZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgorIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgorIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJJdFwncyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuIgorIiAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuIik7CisKKyNkZWZpbmUgT1NfU1RBVF9NRVRIT0RERUYgICAgXAorICAgIHsic3RhdCIsIChQeUNGdW5jdGlvbilvc19zdGF0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3Nfc3RhdF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3RhdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19zdGF0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgic3RhdCIsIDAsIDEpOwogICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJnA6c3RhdCIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0jaWZkZWYgSEFWRV9GU1RBVEFUCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8mfCRPJnA6c3RhdCIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc3RhdF9pbXBsKG1vZHVsZSwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCiAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zdGF0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGNoZWNrc3VtOiA4NWE3MWFkNjAyZTg5ZjhlMjgwMTE4ZGE5NzZmNzBjZDJmOWFiZGYxXSovCit7CisgICAgcmV0dXJuIHBvc2l4X2RvX3N0YXQoInN0YXQiLCBwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7Cit9CisKIFB5RG9jX1NUUlZBUihwb3NpeF9sc3RhdF9fZG9jX18sCiAibHN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUpIC0+IHN0YXQgcmVzdWx0XG5cblwKIExpa2Ugc3RhdCgpLCBidXQgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cblwKQEAgLTI0ODYsNiArMjUxMCw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibHN0YXQiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpsc3RhdCIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9GU1RBVEFUCkBAIC0yNDk1LDQ0ICsyNTIwLDExOSBAQAogI2VuZGlmCiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoImxzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9hY2Nlc3NfX2RvY19fLAotImFjY2VzcyhwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcCi0gZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLVVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguICBSZXR1cm5zIFRydWUgaWYgZ3JhbnRlZCxcblwKLUZhbHNlIG90aGVyd2lzZS5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLUlmIGVmZmVjdGl2ZV9pZHMgaXMgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mXG5cCi0gIHRoZSByZWFsIHVpZC9naWQuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1kaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuXAotICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG5cCi0gIE5vdEltcGxlbWVudGVkRXJyb3IuXG5cCi1cblwKLU5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuXAotICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXJcblwKLSAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLlxuXAotVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsIG9yIHRoZSBpbmNsdXNpdmUtT1JcblwKLSAgb2YgUl9PSywgV19PSywgYW5kIFhfT0suIik7CisKKyNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAorICAgICNkZWZpbmUgT1NfQUNDRVNTX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9TX0FDQ0VTU19ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisvKltjbGluaWNdCitvcy5hY2Nlc3MgLT4gb2JqZWN0KGRvY19kZWZhdWx0PSdUcnVlIGlmIGdyYW50ZWQsIEZhbHNlIG90aGVyd2lzZScpCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9VHJ1ZSkKKyAgICAgICAgUGF0aCB0byBiZSB0ZXN0ZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICBtb2RlOiBpbnQKKyAgICAgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsCisgICAgICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0CisgICAgICAgIGRpcmVjdG9yeS4KKworICAgIGVmZmVjdGl2ZV9pZHM6IGJvb2wgPSBGYWxzZQorICAgICAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2YKKyAgICAgICAgdGhlIHJlYWwgdWlkL2dpZC4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICAgICAgICB0aGUgbGluayBwb2ludHMgdG8uCisKK1VzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguCisKK3twYXJhbWV0ZXJzfQorZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQKKyAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYQorICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCitOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXMKKyAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyCisgIGhhcyB0aGUgc3BlY2lmaWVkIGFjY2VzcyB0byB0aGUgcGF0aC4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIob3NfYWNjZXNzX19kb2NfXywKKyJhY2Nlc3MocGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsIGVmZmVjdGl2ZV9pZHM9RmFsc2UsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIlVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguXG4iCisiXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgdGVzdGVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgorIiAgbW9kZVxuIgorIiAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuICBDYW4gYmUgRl9PSyB0byB0ZXN0IGV4aXN0ZW5jZSxcbiIKKyIgICAgb3IgdGhlIGluY2x1c2l2ZS1PUiBvZiBSX09LLCBXX09LLCBhbmQgWF9PSy5cbiIKKyIgIGRpcl9mZFxuIgorIiAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICAgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdFxuIgorIiAgICBkaXJlY3RvcnkuXG4iCisiICBlZmZlY3RpdmVfaWRzXG4iCisiICAgIElmIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZlxuIgorIiAgICB0aGUgcmVhbCB1aWQvZ2lkLlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcbiIKKyIgICAgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorIlxuIgorImRpcl9mZCwgZWZmZWN0aXZlX2lkcywgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIk5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuIgorIiAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyXG4iCisiICBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgdG8gdGhlIHBhdGguIik7CisKKyNkZWZpbmUgT1NfQUNDRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJhY2Nlc3MiLCAoUHlDRnVuY3Rpb24pb3NfYWNjZXNzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfYWNjZXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9hY2Nlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfYWNjZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCwgaW50IGVmZmVjdGl2ZV9pZHMsIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfYWNjZXNzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgImVmZmVjdGl2ZV9pZHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07Ci0gICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgImVmZmVjdGl2ZV9pZHMiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgiYWNjZXNzIiwgMCwgMSk7CiAgICAgaW50IG1vZGU7CiAgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwogICAgIGludCBlZmZlY3RpdmVfaWRzID0gMDsKICAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8maXwkTyZwcDphY2Nlc3MiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCwgJmVmZmVjdGl2ZV9pZHMsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfYWNjZXNzX2ltcGwobW9kdWxlLCAmcGF0aCwgbW9kZSwgZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2Vzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQsIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGNoZWNrc3VtOiA2MzZlODM1YzM2NTYyYTJmYzExYWNhYjc1MzE0NjM0MTI3ZmRmNzY5XSovCit7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0yNTQxLDE3ICsyNjQxLDYgQEAKICAgICBpbnQgcmVzdWx0OwogI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfCRPJnBwOmFjY2VzcyIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAotI2lmZGVmIEhBVkVfRkFDQ0VTU0FUCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgJmVmZmVjdGl2ZV9pZHMsICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogI2lmbmRlZiBIQVZFX0ZBQ0NFU1NBVAogICAgIGlmIChmb2xsb3dfc3ltbGlua3Nfc3BlY2lmaWVkKCJhY2Nlc3MiLCBmb2xsb3dfc3ltbGlua3MpKQogICAgICAgICBnb3RvIGV4aXQ7CkBAIC0yNTY0LDEwICsyNjUzLDEwIEBACiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGlmIChwYXRoLndpZGUgIT0gTlVMTCkKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLndpZGUpOworICAgIGlmIChwYXRoLT53aWRlICE9IE5VTEwpCisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC0+d2lkZSk7CiAgICAgZWxzZQotICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgubmFycm93KTsKKyAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLT5uYXJyb3cpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKgpAQCAtMjU3OSw3ICsyNjY4LDcgQEAKICAgICAgKiAoRGlyZWN0b3JpZXMgY2Fubm90IGJlIHJlYWQtb25seSBvbiBXaW5kb3dzLikKICAgICAqLwogICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZygKLSAgICAgICAgKGF0dHIgIT0gMHhGRkZGRkZGRikgJiYKKyAgICAgICAgKGF0dHIgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpICYmCiAgICAgICAgICAgICAoIShtb2RlICYgMikgfHwKICAgICAgICAgICAgICEoYXR0ciAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSB8fAogICAgICAgICAgICAgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSk7CkBAIC0yNTk1LDExICsyNjg0LDExIEBACiAgICAgICAgICAgICBmbGFncyB8PSBBVF9TWU1MSU5LX05PRk9MTE9XOwogICAgICAgICBpZiAoZWZmZWN0aXZlX2lkcykKICAgICAgICAgICAgIGZsYWdzIHw9IEFUX0VBQ0NFU1M7Ci0gICAgICAgIHJlc3VsdCA9IGZhY2Nlc3NhdChkaXJfZmQsIHBhdGgubmFycm93LCBtb2RlLCBmbGFncyk7CisgICAgICAgIHJlc3VsdCA9IGZhY2Nlc3NhdChkaXJfZmQsIHBhdGgtPm5hcnJvdywgbW9kZSwgZmxhZ3MpOwogICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gYWNjZXNzKHBhdGgubmFycm93LCBtb2RlKTsKKyAgICAgICAgcmVzdWx0ID0gYWNjZXNzKHBhdGgtPm5hcnJvdywgbW9kZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoIXJlc3VsdCk7CiAjZW5kaWYKQEAgLTI2MDcsNyArMjY5Niw2IEBACiAjaWZuZGVmIEhBVkVfRkFDQ0VTU0FUCiBleGl0OgogI2VuZGlmCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCkBAIC0yNjI0LDM1ICsyNzEyLDc2IEBACiAjZGVmaW5lIFhfT0sgMQogI2VuZGlmCiAKKwogI2lmZGVmIEhBVkVfVFRZTkFNRQotUHlEb2NfU1RSVkFSKHBvc2l4X3R0eW5hbWVfX2RvY19fLAotInR0eW5hbWUoZmQpIC0+IHN0cmluZ1xuXG5cCi1SZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gJ2ZkJy4iKTsKKworLypbY2xpbmljXQorb3MudHR5bmFtZSAtPiBEZWNvZGVGU0RlZmF1bHQKKworICAgIGZkOiBpbnQKKyAgICAgICAgSW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgaGFuZGxlLgorCisgICAgLworCitSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gJ2ZkJy4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKG9zX3R0eW5hbWVfX2RvY19fLAorInR0eW5hbWUoZmQpXG4iCisiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvIFwnZmRcJy5cbiIKKyJcbiIKKyIgIGZkXG4iCisiICAgIEludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGhhbmRsZS4iKTsKKworI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRiAgICBcCisgICAgeyJ0dHluYW1lIiwgKFB5Q0Z1bmN0aW9uKW9zX3R0eW5hbWUsIE1FVEhfVkFSQVJHUywgb3NfdHR5bmFtZV9fZG9jX199LAorCitzdGF0aWMgY2hhciAqCitvc190dHluYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGZkKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3R0eW5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfdHR5bmFtZShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgaWQ7Ci0gICAgY2hhciAqcmV0OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBjaGFyICpfcmV0dXJuX3ZhbHVlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnR0eW5hbWUiLCAmaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgImk6dHR5bmFtZSIsCisgICAgICAgICZmZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfdHR5bmFtZV9pbXBsKG1vZHVsZSwgZmQpOworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBjaGFyICoKK29zX3R0eW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgZmQpCisvKltjbGluaWMgY2hlY2tzdW06IDBmMzY4MTM0ZGMwYTdmMjFmMjUxODVlMmU2YmFjZjc2NzVmYjQ3M2FdKi8KK3sKKyAgICBjaGFyICpyZXQ7CiAKICNpZiBkZWZpbmVkKF9fVk1TKQogICAgIC8qIGZpbGUgZGVzY3JpcHRvciAwIG9ubHksIHRoZSBkZWZhdWx0IGlucHV0IGRldmljZSAoc3RkaW4pICovCi0gICAgaWYgKGlkID09IDApIHsKKyAgICBpZiAoZmQgPT0gMCkgewogICAgICAgICByZXQgPSB0dHluYW1lKCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICByZXQgPSBOVUxMOwogICAgIH0KICNlbHNlCi0gICAgcmV0ID0gdHR5bmFtZShpZCk7CisgICAgcmV0ID0gdHR5bmFtZShmZCk7CiAjZW5kaWYKICAgICBpZiAocmV0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHJldCk7CisgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgcmV0dXJuIHJldDsKIH0KKyNlbHNlCisjZGVmaW5lIE9TX1RUWU5BTUVfTUVUSE9EREVGCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfQ1RFUk1JRApAQCAtMjY5NCw2ICsyODIzLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaGRpciI7CiAjaWZkZWYgSEFWRV9GQ0hESVIKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMjcwOSw4ICsyODM5LDYgQEAKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IHdpbjMyX2NoZGlyKHBhdGgubmFycm93KTsKICAgICByZXN1bHQgPSAhcmVzdWx0OyAvKiBvbiB1bml4LCBzdWNjZXNzID0gMCwgb24gd2luZG93cywgc3VjY2VzcyA9ICEwICovCi0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJlc3VsdCA9IF9jaGRpcjIocGF0aC5uYXJyb3cpOwogI2Vsc2UKICNpZmRlZiBIQVZFX0ZDSERJUgogICAgIGlmIChwYXRoLmZkICE9IC0xKQpAQCAtMjcyMiw3ICsyODUwLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJjaGRpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTI3ODYsNiArMjkxNCw3IEBACiAjZW5kaWYKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2htb2QiOwogI2lmZGVmIEhBVkVfRkNITU9ECiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTI4MTEsNyArMjk0MCw3IEBACiAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC53aWRlKTsKICAgICBlbHNlCiAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC5uYXJyb3cpOwotICAgIGlmIChhdHRyID09IDB4RkZGRkZGRkYpCisgICAgaWYgKGF0dHIgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpCiAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChtb2RlICYgX1NfSVdSSVRFKQpAQCAtMjgyNiw3ICsyOTU1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJjaG1vZCIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZSAvKiBNU19XSU5ET1dTICovCkBAIC0yODgwLDcgKzMwMDksNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigiY2htb2QiLCAmcGF0aCk7CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMjkyNCwyMCArMzA1MywyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaG1vZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7CisgICAgcGF0aF90IHBhdGg7CiAgICAgaW50IGk7CiAgICAgaW50IHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmkpKQorICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNobW9kIjsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2htb2QocGF0aCwgaSk7CisgICAgcmVzID0gbGNobW9kKHBhdGgubmFycm93LCBpKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfTENITU9EICovCkBAIC0yOTY1LDYgKzMwOTcsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImZsYWdzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaGZsYWdzIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJmt8JGk6Y2hmbGFncyIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFncywgJmZvbGxvd19zeW1saW5rcykpCkBAIC0yOTg1LDcgKzMxMTgsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoImNoZmxhZ3MiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0zMDA4LDIyICszMTQxLDI0IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNoZmxhZ3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaGZsYWdzIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mazpsY2hmbGFncyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLCAmZmxhZ3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZmbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNoZmxhZ3MocGF0aCwgZmxhZ3MpOworICAgIHJlcyA9IGxjaGZsYWdzKHBhdGgubmFycm93LCBmbGFncyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hGTEFHUyAqLwogCkBAIC0zMDM1LDcgKzMxNzAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2Nocm9vdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHBvc2l4XzFzdHIoYXJncywgIk8mOmNocm9vdCIsIGNocm9vdCk7CisgICAgcmV0dXJuIHBvc2l4XzFzdHIoImNocm9vdCIsIGFyZ3MsICJPJjpjaHJvb3QiLCBjaHJvb3QpOwogfQogI2VuZGlmCiAKQEAgLTMxMTcsNiArMzI1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaG93biI7CiAjaWZkZWYgSEFWRV9GQ0hPV04KICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMzE3NCw3ICszMzEwLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJjaG93biIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTMyMjMsMzAgKzMzNTksMzIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2hvd24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIHVpZF90IHVpZDsKICAgICBnaWRfdCBnaWQ7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaG93biI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJk8mTyY6bGNob3duIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZ1aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9HaWRfQ29udmVydGVyLCAmZ2lkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2hvd24ocGF0aCwgdWlkLCBnaWQpOworICAgIHJlcyA9IGxjaG93bihwYXRoLm5hcnJvdywgdWlkLCBnaWQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogI2VuZGlmIC8qIEhBVkVfTENIT1dOICovCiAKIAotI2lmZGVmIEhBVkVfR0VUQ1dECiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZ2V0Y3dkKGludCB1c2VfYnl0ZXMpCiB7CkBAIC0zMjYwLDEyICszMzk4LDEyIEBACiAgICAgICAgIFB5T2JqZWN0ICpyZXNvYmo7CiAgICAgICAgIERXT1JEIGxlbjsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0sIHdidWYpOworICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgod2J1ZiksIHdidWYpOwogICAgICAgICAvKiBJZiB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCwgbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlCiAgICAgICAgICAgIHRlcm1pbmF0aW5nIFwwLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgbGVuIGluY2x1ZGVzCiAgICAgICAgICAgIHRoZSBzcGFjZSBuZWVkZWQgZm9yIHRoZSB0ZXJtaW5hdG9yLiAqLwotICAgICAgICBpZiAobGVuID49IHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSkgewotICAgICAgICAgICAgd2J1ZjIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgaWYgKGxlbiA+PSBQeV9BUlJBWV9MRU5HVEgod2J1ZikpIHsKKyAgICAgICAgICAgIHdidWYyID0gUHlNZW1fUmF3TWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgICAgICBpZiAod2J1ZjIpCiAgICAgICAgICAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcobGVuLCB3YnVmMik7CiAgICAgICAgIH0KQEAgLTMyNzUsMTEgKzM0MTMsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghbGVuKSB7Ci0gICAgICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7Ci0gICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImdldGN3ZHUiLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKQorICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1ZjIpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogICAgICAgICB9CiAgICAgICAgIHJlc29iaiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod2J1ZjIsIGxlbik7Ci0gICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKKyAgICAgICAgaWYgKHdidWYyICE9IHdidWYpCisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYyKTsKICAgICAgICAgcmV0dXJuIHJlc29iajsKICAgICB9CiAKQEAgLTMyODgsMTEgKzM0MjgsNyBAQAogI2VuZGlmCiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXMgPSBfZ2V0Y3dkMihidWYsIHNpemVvZiBidWYpOwotI2Vsc2UKICAgICByZXMgPSBnZXRjd2QoYnVmLCBzaXplb2YgYnVmKTsKLSNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTMzMjAsNyArMzQ1Niw2IEBACiB7CiAgICAgcmV0dXJuIHBvc2l4X2dldGN3ZCgxKTsKIH0KLSNlbmRpZgogCiAjaWYgKCghZGVmaW5lZChIQVZFX0xJTkspKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpKQogI2RlZmluZSBIQVZFX0xJTksgMQpAQCAtMzM1OSw2ICszNDk0LDggQEAKIAogICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfE8mTyZwOmxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZkc3QsCkBAIC0zMzg5LDcgKzM1MjYsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoImxpbmsiLCBkc3Qub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlCkBAIC0zNDA3LDcgKzM1NDQsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImxpbmsiLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMzQzNyw3MiArMzU3NCwzNSBAQAogICB0aGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgcmVmZXIgdG8gYSBkaXJlY3RvcnkuXG5cCiAgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKLSNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIGludCBmZCA9IC0xOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCi0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKK3N0YXRpYyBQeU9iamVjdCAqCitfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICp2OwogICAgIEhBTkRMRSBoRmluZEZpbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICBCT09MIHJlc3VsdDsKICAgICBXSU4zMl9GSU5EX0RBVEEgRmlsZURhdGE7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOyAvKiBPdmVyYWxsb2NhdGUgZm9yIFxcKi4qXDAgKi8KKyAgICBjaGFyIG5hbWVidWZbTUFYX1BBVEgrNF07IC8qIE92ZXJhbGxvY2F0ZSBmb3IgIlwqLioiICovCiAgICAgY2hhciAqYnVmcHRyID0gbmFtZWJ1ZjsKICAgICAvKiBvbmx5IGNsYWltIHRvIGhhdmUgc3BhY2UgZm9yIE1BWF9QQVRIICovCi0gICAgUHlfc3NpemVfdCBsZW4gPSBzaXplb2YobmFtZWJ1ZiktNTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X0FSUkFZX0xFTkdUSChuYW1lYnVmKS00OwogICAgIFB5T2JqZWN0ICpwbyA9IE5VTEw7CiAgICAgd2NoYXJfdCAqd25hbWVidWYgPSBOVUxMOwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSNpZm5kZWYgTUFYX1BBVEgKLSNkZWZpbmUgTUFYX1BBVEggICAgQ0NITUFYUEFUSAotI2VuZGlmCi0gICAgY2hhciAqcHQ7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOwotICAgIEhESVIgIGhkaXIgPSAxOwotICAgIFVMT05HIHNyY2hjbnQgPSAxOwotICAgIEZJTEVGSU5EQlVGMyAgIGVwOwotICAgIEFQSVJFVCByYzsKLSNlbHNlCi0gICAgUHlPYmplY3QgKnY7Ci0gICAgRElSICpkaXJwID0gTlVMTDsKLSAgICBzdHJ1Y3QgZGlyZW50ICplcDsKLSAgICBpbnQgcmV0dXJuX3N0cjsgLyogaWYgZmFsc2UsIHJldHVybiBieXRlcyAqLwotI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5udWxsYWJsZSA9IDE7Ci0jaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBwYXRoLmZkID0gLTE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyY6bGlzdGRpciIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFggU2hvdWxkIHJlZG8gdGhpcyBwdXR0aW5nIHRoZSAobm93IGZvdXIpIHZlcnNpb25zIG9mIG9wZW5kaXIKLSAgICAgICBpbiBzZXBhcmF0ZSBmaWxlcyBpbnN0ZWFkIG9mIGhhdmluZyB0aGVtIGFsbCBoZXJlLi4uICovCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCi0gICAgaWYgKCFwYXRoLm5hcnJvdykgeworICAgIGlmICghcGF0aC0+bmFycm93KSB7CiAgICAgICAgIFdJTjMyX0ZJTkRfREFUQVcgd0ZpbGVEYXRhOwogICAgICAgICB3Y2hhcl90ICpwb193Y2hhcnM7CiAKLSAgICAgICAgaWYgKCFwYXRoLndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLworICAgICAgICBpZiAoIXBhdGgtPndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLwogICAgICAgICAgICAgcG9fd2NoYXJzID0gTCIuIjsKICAgICAgICAgICAgIGxlbiA9IDE7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb193Y2hhcnMgPSBwYXRoLndpZGU7Ci0gICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC53aWRlKTsKKyAgICAgICAgICAgIHBvX3djaGFycyA9IHBhdGgtPndpZGU7CisgICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC0+d2lkZSk7CiAgICAgICAgIH0KICAgICAgICAgLyogVGhlICs1IGlzIHNvIHdlIGNhbiBhcHBlbmQgIlxcKi4qXDAiICovCi0gICAgICAgIHduYW1lYnVmID0gbWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHduYW1lYnVmID0gUHlNZW1fTWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghd25hbWVidWYpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CkBAIC0zNTEwLDggKzM2MTAsOCBAQAogICAgICAgICB3Y3NjcHkod25hbWVidWYsIHBvX3djaGFycyk7CiAgICAgICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgICAgICB3Y2hhcl90IHdjaCA9IHduYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgICAgIGlmICh3Y2ggIT0gTCcvJyAmJiB3Y2ggIT0gTCdcXCcgJiYgd2NoICE9IEwnOicpCi0gICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gTCdcXCc7CisgICAgICAgICAgICBpZiAod2NoICE9IFNFUCAmJiB3Y2ggIT0gQUxUU0VQICYmIHdjaCAhPSBMJzonKQorICAgICAgICAgICAgICAgIHduYW1lYnVmW2xlbisrXSA9IFNFUDsKICAgICAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiArIGxlbiwgTCIqLioiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CkBAIC0zNTI1LDggKzM2MjUsNyBAQAogICAgICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZEZpcnN0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBkbyB7CkBAIC0zNTU1LDE5ICszNjU0LDE5IEBACiAgICAgICAgICAgICAgICBpdCBnb3QgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5LiAqLwogICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZE5leHRGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKIAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQotICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLm5hcnJvdyk7Ci0gICAgbGVuID0gcGF0aC5sZW5ndGg7CisgICAgc3RyY3B5KG5hbWVidWYsIHBhdGgtPm5hcnJvdyk7CisgICAgbGVuID0gcGF0aC0+bGVuZ3RoOwogICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgIGNoYXIgY2ggPSBuYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgaWYgKGNoICE9IFNFUCAmJiBjaCAhPSBBTFRTRVAgJiYgY2ggIT0gJzonKQotICAgICAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSAnLyc7CisgICAgICAgIGlmIChjaCAhPSAnXFwnICYmIGNoICE9ICcvJyAmJiBjaCAhPSAnOicpCisgICAgICAgICAgICBuYW1lYnVmW2xlbisrXSA9ICdcXCc7CiAgICAgICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CiAgICAgfQogCkBAIC0zNTgyLDcgKzM2ODEsNyBAQAogICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yKCJGaW5kRmlyc3RGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGRvIHsKQEAgLTM2MTAsNyArMzcwOSw3IEBACiAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCiAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcigiRmluZE5leHRGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKQEAgLTM2MjAsODggKzM3MTksMzMgQEAKICAgICAgICAgaWYgKEZpbmRDbG9zZShoRmluZEZpbGUpID09IEZBTFNFKSB7CiAgICAgICAgICAgICBpZiAobGlzdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkZpbmRDbG9zZSIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAod25hbWVidWYpCi0gICAgICAgIGZyZWUod25hbWVidWYpOwotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgUHlNZW1fRnJlZSh3bmFtZWJ1Zik7CiAKICAgICByZXR1cm4gbGlzdDsKK30gIC8qIGVuZCBvZiBfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIgKi8KIAotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBpZiAocGF0aC5sZW5ndGggPj0gTUFYX1BBVEgpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJwYXRoIHRvbyBsb25nIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0gICAgc3RyY3B5KG5hbWVidWYsIHBhdGgubmFycm93KTsKLSAgICBmb3IgKHB0ID0gbmFtZWJ1ZjsgKnB0OyBwdCsrKQotICAgICAgICBpZiAoKnB0ID09IEFMVFNFUCkKLSAgICAgICAgICAgICpwdCA9IFNFUDsKLSAgICBpZiAobmFtZWJ1ZltsZW4tMV0gIT0gU0VQKQotICAgICAgICBuYW1lYnVmW2xlbisrXSA9IFNFUDsKLSAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOworI2Vsc2UgIC8qIHRodXMgUE9TSVgsIGllOiBub3QgKE1TX1dJTkRPV1MgYW5kIG5vdCBIQVZFX09QRU5ESVIpICovCiAKLSAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICByYyA9IERvc0ZpbmRGaXJzdChuYW1lYnVmLCAgICAgICAgIC8qIFdpbGRjYXJkIFBhdHRlcm4gdG8gTWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAmaGRpciwgICAgICAgICAgIC8qIEhhbmRsZSB0byBVc2UgV2hpbGUgU2VhcmNoIERpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTEVfUkVBRE9OTFkgfCBGSUxFX0hJRERFTiB8IEZJTEVfU1lTVEVNIHwgRklMRV9ESVJFQ1RPUlksCi0gICAgICAgICAgICAgICAgICAgICAgJmVwLCBzaXplb2YoZXApLCAvKiBTdHJ1Y3R1cmUgdG8gUmVjZWl2ZSBEaXJlY3RvcnkgRW50cnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAmc3JjaGNudCwgICAgICAgIC8qIE1heCBhbmQgQWN0dWFsIENvdW50IG9mIEVudHJpZXMgUGVyIEl0ZXJhdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTF9TVEFOREFSRCk7ICAgLyogRm9ybWF0IG9mIEVudHJ5IChFQXMgb3IgTm90KSAqLwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGVycm5vID0gRU5PRU5UOwotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgubmFycm93KTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIGlmIChzcmNoY250ID4gMCkgeyAvKiBJZiBEaXJlY3RvcnkgaXMgTk9UIFRvdGFsbHkgRW1wdHksICovCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChlcC5hY2hOYW1lWzBdID09ICcuJwotICAgICAgICAgICAgJiYgKGVwLmFjaE5hbWVbMV0gPT0gJ1wwJyB8fCAoZXAuYWNoTmFtZVsxXSA9PSAnLicgJiYgZXAuYWNoTmFtZVsyXSA9PSAnXDAnKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7IC8qIFNraXAgT3ZlciAiLiIgYW5kICIuLiIgTmFtZXMgKi8KLQotICAgICAgICAgICAgc3RyY3B5KG5hbWVidWYsIGVwLmFjaE5hbWUpOwotCi0gICAgICAgICAgICAvKiBMZWF2ZSBDYXNlIG9mIE5hbWUgQWxvbmUgLS0gSW4gTmF0aXZlIEZvcm0gKi8KLSAgICAgICAgICAgIC8qIChSZW1vdmVkIEZvcmNlZCBMb3dlcmNhc2luZyBDb2RlKSAqLwotCi0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKG5hbWVidWYpOwotICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICB9IHdoaWxlIChEb3NGaW5kTmV4dChoZGlyLCAmZXAsIHNpemVvZihlcCksICZzcmNoY250KSA9PSBOT19FUlJPUiAmJiBzcmNoY250ID4gMCk7Ci0gICAgfQotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0KLSAgICByZXR1cm4gbGlzdDsKLSNlbHNlCitzdGF0aWMgUHlPYmplY3QgKgorX3Bvc2l4X2xpc3RkaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBQeU9iamVjdCAqdjsKKyAgICBESVIgKmRpcnAgPSBOVUxMOworICAgIHN0cnVjdCBkaXJlbnQgKmVwOworICAgIGludCByZXR1cm5fc3RyOyAvKiBpZiBmYWxzZSwgcmV0dXJuIGJ5dGVzICovCisjaWZkZWYgSEFWRV9GRE9QRU5ESVIKKyAgICBpbnQgZmQgPSAtMTsKKyNlbmRpZgogCiAgICAgZXJybm8gPSAwOwogI2lmZGVmIEhBVkVfRkRPUEVORElSCi0gICAgaWYgKHBhdGguZmQgIT0gLTEpIHsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpIHsKICAgICAgICAgLyogY2xvc2VkaXIoKSBjbG9zZXMgdGhlIEZELCBzbyB3ZSBkdXBsaWNhdGUgaXQgKi8KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBmZCA9IGR1cChwYXRoLmZkKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQorICAgICAgICBmZCA9IF9QeV9kdXAocGF0aC0+ZmQpOwogICAgICAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcigpOwogICAgICAgICAgICAgZ290byBleGl0OwpAQCAtMzcxNywxMCArMzc2MSwxMCBAQAogI2VuZGlmCiAgICAgewogICAgICAgICBjaGFyICpuYW1lOwotICAgICAgICBpZiAocGF0aC5uYXJyb3cpIHsKLSAgICAgICAgICAgIG5hbWUgPSBwYXRoLm5hcnJvdzsKKyAgICAgICAgaWYgKHBhdGgtPm5hcnJvdykgeworICAgICAgICAgICAgbmFtZSA9IHBhdGgtPm5hcnJvdzsKICAgICAgICAgICAgIC8qIG9ubHkgcmV0dXJuIGJ5dGVzIGlmIHRoZXkgc3BlY2lmaWVkIGEgYnl0ZXMgb2JqZWN0ICovCi0gICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgub2JqZWN0KSk7CisgICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgtPm9iamVjdCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbmFtZSA9ICIuIjsKQEAgLTM3MzMsMTQgKzM3NzcsMTQgQEAKICAgICB9CiAKICAgICBpZiAoZGlycCA9PSBOVUxMKSB7Ci0gICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgogICAgICAgICBpZiAoZmQgIT0gLTEpIHsKICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLworI2VuZGlmCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewpAQCAtMzc1Niw3ICszODAwLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzc4NiwxNyArMzgzMCw0NCBAQAogI2lmZGVmIEhBVkVfRkRPUEVORElSCiAgICAgICAgIGlmIChmZCA+IC0xKQogICAgICAgICAgICAgcmV3aW5kZGlyKGRpcnApOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCisjZW5kaWYKICAgICAgICAgY2xvc2VkaXIoZGlycCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQogCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQogICAgIHJldHVybiBsaXN0OworfSAgLyogZW5kIG9mIF9wb3NpeF9saXN0ZGlyICovCisjZW5kaWYgIC8qIHdoaWNoIE9TICovCiAKLSNlbmRpZiAvKiB3aGljaCBPUyAqLwotfSAgLyogZW5kIG9mIHBvc2l4X2xpc3RkaXIgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOworCisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsaXN0ZGlyIjsKKyAgICBwYXRoLm51bGxhYmxlID0gMTsKKyNpZmRlZiBIQVZFX0ZET1BFTkRJUgorICAgIHBhdGguYWxsb3dfZmQgPSAxOworICAgIHBhdGguZmQgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOmxpc3RkaXIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQorICAgIHJldHVybl92YWx1ZSA9IF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpcigmcGF0aCwgbGlzdCk7CisjZWxzZQorICAgIHJldHVybl92YWx1ZSA9IF9wb3NpeF9saXN0ZGlyKCZwYXRoLCBsaXN0KTsKKyNlbmRpZgorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAogI2lmZGVmIE1TX1dJTkRPV1MKIC8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBhYnNwYXRoIG9uIHdpbjMyICovCkBAIC0zODA0LDE0ICszODc1LDE0IEBACiBwb3NpeF9fZ2V0ZnVsbHBhdGhuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNoYXIgb3V0YnVmW01BWF9QQVRIKjJdOworICAgIGNoYXIgb3V0YnVmW01BWF9QQVRIXTsKICAgICBjaGFyICp0ZW1wOwogICAgIFB5T2JqZWN0ICpwbzsKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0ZnVsbHBhdGhuYW1lIiwgJnBvKSkKICAgICB7CiAgICAgICAgIHdjaGFyX3QgKndwYXRoOwotICAgICAgICB3Y2hhcl90IHdvdXRidWZbTUFYX1BBVEgqMl0sICp3b3V0YnVmcCA9IHdvdXRidWY7CisgICAgICAgIHdjaGFyX3Qgd291dGJ1ZltNQVhfUEFUSF0sICp3b3V0YnVmcCA9IHdvdXRidWY7CiAgICAgICAgIHdjaGFyX3QgKnd0ZW1wOwogICAgICAgICBEV09SRCByZXN1bHQ7CiAgICAgICAgIFB5T2JqZWN0ICp2OwpAQCAtMzgyMyw3ICszODk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9BUlJBWV9MRU5HVEgod291dGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd291dGJ1ZiwgJnd0ZW1wKTsKICAgICAgICAgaWYgKHJlc3VsdCA+IFB5X0FSUkFZX0xFTkdUSCh3b3V0YnVmKSkgewotICAgICAgICAgICAgd291dGJ1ZnAgPSBtYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgICAgIHdvdXRidWZwID0gUHlNZW1fTWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgICAgICBpZiAoIXdvdXRidWZwKQogICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyh3cGF0aCwgcmVzdWx0LCB3b3V0YnVmcCwgJnd0ZW1wKTsKQEAgLTM4MzMsNyArMzkwNCw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHYgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkdldEZ1bGxQYXRoTmFtZVciLCBwbyk7CiAgICAgICAgIGlmICh3b3V0YnVmcCAhPSB3b3V0YnVmKQotICAgICAgICAgICAgZnJlZSh3b3V0YnVmcCk7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHdvdXRidWZwKTsKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKQEAgLTM5MDMsNyArMzk3NCw3IEBACiAgICAgaWYoIWJ1Zl9zaXplKQogICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUiLCBwbyk7CiAKLSAgICB0YXJnZXRfcGF0aCA9ICh3Y2hhcl90ICopbWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgIHRhcmdldF9wYXRoID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYoIXRhcmdldF9wYXRoKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIApAQCAtMzkxNywzNiArMzk4OCwxMSBAQAogCiAgICAgdGFyZ2V0X3BhdGhbcmVzdWx0X2xlbmd0aF0gPSAwOwogICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIodGFyZ2V0X3BhdGgsIHJlc3VsdF9sZW5ndGgpOwotICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgIFB5TWVtX0ZyZWUodGFyZ2V0X3BhdGgpOwogICAgIHJldHVybiByZXN1bHQ7CiAKIH0gLyogZW5kIG9mIHBvc2l4X19nZXRmaW5hbHBhdGhuYW1lICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9fZ2V0ZmlsZWluZm9ybWF0aW9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBIQU5ETEUgaEZpbGU7Ci0gICAgQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gaW5mbzsKLSAgICBpbnQgZmQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6X2dldGZpbGVpbmZvcm1hdGlvbiIsICZmZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLQotICAgIGhGaWxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7Ci0gICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLQotICAgIGlmICghR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoaEZpbGUsICZpbmZvKSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgTlVMTCk7Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaWlpIiwgaW5mby5kd1ZvbHVtZVNlcmlhbE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5uRmlsZUluZGV4SGlnaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5uRmlsZUluZGV4TG93KTsKLX0KLQogUHlEb2NfU1RSVkFSKHBvc2l4X19pc2Rpcl9fZG9jX18sCiAiUmV0dXJuIHRydWUgaWYgdGhlIHBhdGhuYW1lIHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnkuIik7CiAKQEAgLTM5ODUsNiArNDAzMSw1NSBAQAogICAgIGVsc2UKICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogfQorCitQeURvY19TVFJWQVIocG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lX19kb2NfXywKKyJSZXR1cm4gdm9sdW1lIG1vdW50IHBvaW50IG9mIHRoZSBzcGVjaWZpZWQgcGF0aC4iKTsKKworLyogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGlzbW91bnQgb24gd2luZG93cyAqLworc3RhdGljIFB5T2JqZWN0ICoKK3Bvc2l4X19nZXR2b2x1bWVwYXRobmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnBvLCAqcmVzdWx0OworICAgIHdjaGFyX3QgKnBhdGgsICptb3VudHBhdGg9TlVMTDsKKyAgICBzaXplX3QgYnVmbGVuOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0dm9sdW1lcGF0aG5hbWUiLCAmcG8pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwYXRoID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocG8sICZidWZsZW4pOworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGJ1ZmxlbiArPSAxOworCisgICAgLyogVm9sdW1lIHBhdGggc2hvdWxkIGJlIHNob3J0ZXIgdGhhbiBlbnRpcmUgcGF0aCAqLworICAgIGJ1ZmxlbiA9IFB5X01BWChidWZsZW4sIE1BWF9QQVRIKTsKKworICAgIGlmIChidWZsZW4gPiBEV09SRF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJwYXRoIHRvbyBsb25nIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1vdW50cGF0aCA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGJ1ZmxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgaWYgKG1vdW50cGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBHZXRWb2x1bWVQYXRoTmFtZVcocGF0aCwgbW91bnRwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKGJ1Zmxlbiwgc2l6ZV90LCBEV09SRCkpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkgeworICAgICAgICByZXN1bHQgPSB3aW4zMl9lcnJvcl9vYmplY3QoIl9nZXR2b2x1bWVwYXRobmFtZSIsIHBvKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vdW50cGF0aCwgd2NzbGVuKG1vdW50cGF0aCkpOworCitleGl0OgorICAgIFB5TWVtX0ZyZWUobW91bnRwYXRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLyogZW5kIG9mIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZSAqLworCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiBQeURvY19TVFJWQVIocG9zaXhfbWtkaXJfX2RvY19fLApAQCAtNDAwOSw2ICs0MTA0LDcgQEAKICAgICBpbnQgcmVzdWx0OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJta2RpciI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aSRPJjpta2RpciIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAogI2lmZGVmIEhBVkVfTUtESVJBVApAQCAtNDAyOCw3ICs0MTI0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJta2RpciIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZQpAQCAtNDA0NSw3ICs0MTQxLDcgQEAKICNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigibWtkaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC00MTYzLDYgKzQyNTksOCBAQAogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKICAgICBtZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWU7CiAgICAgc3RyY3B5KGZvcm1hdCwgIk8mTyZ8JE8mTyY6Iik7CiAgICAgc3RyY2F0KGZvcm1hdCwgZnVuY3Rpb25fbmFtZSk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCBmb3JtYXQsIGtleXdvcmRzLApAQCAtNDE5Niw3ICs0Mjk0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KGZ1bmN0aW9uX25hbWUsIGRzdC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZzcmMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00MjExLDcgKzQzMDksNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTQyNzUsNiArNDM3Myw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJtZGlyIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6cm1kaXIiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICNpZmRlZiBIQVZFX1VOTElOS0FUCkBAIC00MzAzLDcgKzQ0MDIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInJtZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDQzMSw2ICs0NTMwLDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidW5saW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6dW5saW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9VTkxJTktBVApAQCAtNDQ1OSw3ICs0NTU5LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJ1bmxpbmsiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00NzYyLDYgKzQ4NjIsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ1dGltZSI7CiAgICAgbWVtc2V0KCZ1dGltZSwgMCwgc2l6ZW9mKHV0aW1lX3QpKTsKICNpZiBVVElNRV9IQVZFX0ZECiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CkBAIC00ODU3LDE4ICs0OTU4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHdpbjMyX2Vycm9yX29iamVjdCgidXRpbWUiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgaWYgKHV0aW1lLm5vdykgewotICAgICAgICBTWVNURU1USU1FIG5vdzsKLSAgICAgICAgR2V0U3lzdGVtVGltZSgmbm93KTsKLSAgICAgICAgaWYgKCFTeXN0ZW1UaW1lVG9GaWxlVGltZSgmbm93LCAmbXRpbWUpIHx8Ci0gICAgICAgICAgICAhU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJmF0aW1lKSkgewotICAgICAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKyAgICAgICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJm10aW1lKTsKKyAgICAgICAgYXRpbWUgPSBtdGltZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHRpbWVfdF90b19GSUxFX1RJTUUodXRpbWUuYXRpbWVfcywgdXRpbWUuYXRpbWVfbnMsICZhdGltZSk7CkBAIC00ODc5LDcgKzQ5NzUsNyBAQAogICAgICAgICAgICBhcyB0aGF0IG1heSBjb25mdXNlIHRoZSB1c2VyIGludG8gYmVsaWV2aW5nIHRoYXQKICAgICAgICAgICAgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIGZpbGUsIHdoZW4gaXQgYWxzbwogICAgICAgICAgICBjb3VsZCBiZSB0aGUgdGltZSBzdGFtcCB0aGF0IGdpdmVzIGEgcHJvYmxlbS4gKi8KLSAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwpAQCAtNDk2Miw4ICs1MDU4LDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICAgICAqb3V0ID0gUHlNZW1fTWFsbG9jKHNpemUrMSk7Ci0gICAgaWYgKCEqb3V0KQorICAgIGlmICghKm91dCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgbWVtY3B5KCpvdXQsIFB5Qnl0ZXNfQXNTdHJpbmcoYnl0ZXMpLCBzaXplKzEpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgcmV0dXJuIDE7CkBAIC00OTkxLDggKzUwODksMTAgQEAKICAgICB9CiAgICAgZW52YyA9IDA7CiAgICAga2V5cyA9IFB5TWFwcGluZ19LZXlzKGVudik7CisgICAgaWYgKCFrZXlzKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHZhbHMgPSBQeU1hcHBpbmdfVmFsdWVzKGVudik7Ci0gICAgaWYgKCFrZXlzIHx8ICF2YWxzKQorICAgIGlmICghdmFscykKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5TGlzdF9DaGVjayhrZXlzKSB8fCAhUHlMaXN0X0NoZWNrKHZhbHMpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MDEzLDEwICs1MTEzLDYgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIC8qIE9taXQgUHNldWRvLUVudiBWYXJzIHRoYXQgV291bGQgQ29uZnVzZSBQcm9ncmFtcyBpZiBQYXNzZWQgT24gKi8KLSAgICAgICAgaWYgKHN0cmljbXAoaywgIkJFR0lOTElCUEFUSCIpICE9IDAgJiYgc3RyaWNtcChrLCAiRU5ETElCUEFUSCIpICE9IDApIHsKLSNlbmRpZgogICAgICAgICBrID0gUHlCeXRlc19Bc1N0cmluZyhrZXkyKTsKICAgICAgICAgdiA9IFB5Qnl0ZXNfQXNTdHJpbmcodmFsMik7CiAgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoa2V5MikgKyBQeUJ5dGVzX0dFVF9TSVpFKHZhbDIpICsgMjsKQEAgLTUwMzIsOSArNTEyOCw2IEBACiAgICAgICAgIGVudmxpc3RbZW52YysrXSA9IHA7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkyKTsKICAgICAgICAgUHlfREVDUkVGKHZhbDIpOwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICBQeV9ERUNSRUYodmFscyk7CiAgICAgUHlfREVDUkVGKGtleXMpOwpAQCAtNTE2MCw2ICs1MjUzLDcgQEAKICAgICAgICBsaWtlIHBvc2l4LmVudmlyb24uICovCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImV4ZWN2ZSI7CiAjaWZkZWYgSEFWRV9GRVhFQ1ZFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTUxOTksNyArNTI5Myw3IEBACiAKICAgICAvKiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGRlZmluaXRlbHkgYW4gZXJyb3IgKi8KIAotICAgIHBhdGhfcG9zaXhfZXJyb3IoImV4ZWN2ZSIsICZwYXRoKTsKKyAgICBwYXRoX2Vycm9yKCZwYXRoKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTI3NSwxOCArNTM2OSwxMiBAQAogICAgIH0KICAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbHNlCiAgICAgaWYgKG1vZGUgPT0gX09MRF9QX09WRVJMQVkpCiAgICAgICAgIG1vZGUgPSBfUF9PVkVSTEFZOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNwYXdudmFsID0gX3NwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwogICAgIFB5X0RFQ1JFRihvcGF0aCk7CkBAIC01Mjk0LDExICs1MzgyLDcgQEAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMIiwgKFBZX0xPTkdfTE9ORykgc3Bhd252YWwpOwotI2VuZGlmCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIH0KIAogCkBAIC01Mzc0LDI3ICs1NDU4LDE3IEBACiAgICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsXzE7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudmUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2VuZGlmCiAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgICh2b2lkKSBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotI2Vsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTQwNiwxODMgKzU0ODAsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qIE9TLzIgc3VwcG9ydHMgc3Bhd252cCAmIHNwYXdudnBlIG5hdGl2ZWx5ICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwX19kb2NfXywKLSJzcGF3bnZwKG1vZGUsIGZpbGUsIGFyZ3MpXG5cblwKLUV4ZWN1dGUgdGhlIHByb2dyYW0gJ2ZpbGUnIGluIGEgbmV3IHByb2Nlc3MsIHVzaW5nIHRoZSBlbnZpcm9ubWVudFxuXAotc2VhcmNoIHBhdGggdG8gZmluZCB0aGUgZmlsZS5cblwKLVxuXAotICAgIG1vZGU6IG1vZGUgb2YgcHJvY2VzcyBjcmVhdGlvblxuXAotICAgIGZpbGU6IGV4ZWN1dGFibGUgZmlsZSBuYW1lXG5cCi0gICAgYXJnczogdHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKLSAgICBQeU9iamVjdCAqYXJndjsKLSAgICBjaGFyICoqYXJndmxpc3Q7Ci0gICAgaW50IG1vZGUsIGksIGFyZ2M7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0KLSAgICAvKiBzcGF3bnZwIGhhcyB0aHJlZSBhcmd1bWVudHM6IChtb2RlLCBwYXRoLCBhcmd2KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPOnNwYXdudnAiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cCgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpIHsKLSAgICAgICAgICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBpKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgc3Bhd252YWwgPSBzcGF3bnZwKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0KLSAgICBpZiAoc3Bhd252YWwgPT0gLTEpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotfQotCi0KLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwZV9fZG9jX18sCi0ic3Bhd252cGUobW9kZSwgZmlsZSwgYXJncywgZW52KVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2YgYXJndW1lbnRzXG5cCi0gICAgZW52OiBkaWN0aW9uYXJ5IG9mIHN0cmluZ3MgbWFwcGluZyB0byBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3YsICplbnY7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGNoYXIgKiplbnZsaXN0OwotICAgIFB5T2JqZWN0ICpyZXM9TlVMTDsKLSAgICBpbnQgbW9kZTsKLSAgICBQeV9zc2l6ZV90IGFyZ2MsIGksIGVudmM7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0gICAgaW50IGxhc3RhcmcgPSAwOwotCi0gICAgLyogc3Bhd252cGUgaGFzIGZvdXIgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiwgZW52KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIGFuZCBlbnYgaXMgYSBkaWN0aW9uYXJ5Ci0gICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpZXRPTzpzcGF3bnZwZSIsICZtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmFyZ3YsICZlbnYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7Ci0gICAgaWYgKFB5TGlzdF9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlMaXN0X1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeUxpc3RfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlUdXBsZV9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzcGF3bnZwZSgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBpZiAoIVB5TWFwcGluZ19DaGVjayhlbnYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMyBtdXN0IGJlIGEgbWFwcGluZyBvYmplY3QiKTsKLSAgICAgICAgZ290byBmYWlsXzA7Ci0gICAgfQotCi0gICAgYXJndmxpc3QgPSBQeU1lbV9ORVcoY2hhciAqLCBhcmdjKzEpOwotICAgIGlmIChhcmd2bGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIGlmICghZnNjb252ZXJ0X3N0cmR1cCgoKmdldGl0ZW0pKGFyZ3YsIGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ3ZsaXN0W2ldKSkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdGFyZyA9IGk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxfMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBsYXN0YXJnID0gYXJnYzsKLSAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7Ci0KLSAgICBlbnZsaXN0ID0gcGFyc2VfZW52bGlzdChlbnYsICZlbnZjKTsKLSAgICBpZiAoZW52bGlzdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWxfMTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2Vsc2UKLSAgICBzcGF3bnZhbCA9IF9zcGF3bnZwZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotCi0gICAgd2hpbGUgKC0tZW52YyA+PSAwKQotICAgICAgICBQeU1lbV9ERUwoZW52bGlzdFtlbnZjXSk7Ci0gICAgUHlNZW1fREVMKGVudmxpc3QpOwotICBmYWlsXzE6Ci0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGxhc3RhcmcpOwotICBmYWlsXzA6Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICByZXR1cm4gcmVzOwotfQotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KIAogCkBAIC02MDg1LDcgKzU5ODIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X29wZW5wdHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0gICAgaW50IG1hc3Rlcl9mZCwgc2xhdmVfZmQ7CisgICAgaW50IG1hc3Rlcl9mZCA9IC0xLCBzbGF2ZV9mZCA9IC0xOwogI2lmbmRlZiBIQVZFX09QRU5QVFkKICAgICBjaGFyICogc2xhdmVfbmFtZTsKICNlbmRpZgpAQCAtNjA5OCwzNyArNTk5NSw1NiBAQAogCiAjaWZkZWYgSEFWRV9PUEVOUFRZCiAgICAgaWYgKG9wZW5wdHkoJm1hc3Rlcl9mZCwgJnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKICNlbGlmIGRlZmluZWQoSEFWRV9fR0VUUFRZKQogICAgIHNsYXZlX25hbWUgPSBfZ2V0cHR5KCZtYXN0ZXJfZmQsIE9fUkRXUiwgMDY2NiwgMCk7CiAgICAgaWYgKHNsYXZlX25hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSKTsKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNlbHNlCiAgICAgbWFzdGVyX2ZkID0gb3BlbihERVZfUFRZX0ZJTEUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBtYXN0ZXIgKi8KICAgICBpZiAobWFzdGVyX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICAgICBzaWdfc2F2ZWQgPSBQeU9TX3NldHNpZyhTSUdDSExELCBTSUdfREZMKTsKKwogICAgIC8qIGNoYW5nZSBwZXJtaXNzaW9uIG9mIHNsYXZlICovCiAgICAgaWYgKGdyYW50cHQobWFzdGVyX2ZkKSA8IDApIHsKICAgICAgICAgUHlPU19zZXRzaWcoU0lHQ0hMRCwgc2lnX3NhdmVkKTsKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CiAgICAgfQorCiAgICAgLyogdW5sb2NrIHNsYXZlICovCiAgICAgaWYgKHVubG9ja3B0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7CisKICAgICBzbGF2ZV9uYW1lID0gcHRzbmFtZShtYXN0ZXJfZmQpOyAvKiBnZXQgbmFtZSBvZiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHNsYXZlX2ZkID0gb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gc2xhdmUgKi8KKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIHNsYXZlX2ZkID0gX1B5X29wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKwogI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKEhBVkVfREVWX1BUQykKICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAicHRlbSIpOyAvKiBwdXNoIHB0ZW0gKi8KICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAibGR0ZXJtIik7IC8qIHB1c2ggbGR0ZXJtICovCkBAIC02MTQwLDYgKzYwNTYsMTYgQEAKIAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbWFzdGVyX2ZkLCBzbGF2ZV9mZCk7CiAKK3Bvc2l4X2Vycm9yOgorICAgIHBvc2l4X2Vycm9yKCk7CisjaWYgZGVmaW5lZChIQVZFX09QRU5QVFkpIHx8IGRlZmluZWQoSEFWRV9fR0VUUFRZKQorZXJyb3I6CisjZW5kaWYKKyAgICBpZiAobWFzdGVyX2ZkICE9IC0xKQorICAgICAgICBjbG9zZShtYXN0ZXJfZmQpOworICAgIGlmIChzbGF2ZV9mZCAhPSAtMSkKKyAgICAgICAgY2xvc2Uoc2xhdmVfZmQpOworICAgIHJldHVybiBOVUxMOwogfQogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkgfHwgZGVmaW5lZChIQVZFX0RFVl9QVE1YKSAqLwogCkBAIC02NjMyLDIzICs2NTU4LDggQEAKICAgICBpbnQgc2lnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9JTlRSIHx8IHNpZyA9PSBYQ1BUX1NJR05BTF9CUkVBSykgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIGlmICgocmMgPSBEb3NTZW5kU2lnbmFsRXhjZXB0aW9uKHBpZCwgc2lnKSkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIH0gZWxzZSBpZiAoc2lnID09IFhDUFRfU0lHTkFMX0tJTExQUk9DKSB7Ci0gICAgICAgIEFQSVJFVCByYzsKLSAgICAgICAgaWYgKChyYyA9IERvc0tpbGxQcm9jZXNzKERLUF9QUk9DRVNTLCBwaWQpKSAhPSBOT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiBvczJfZXJyb3IocmMpOwotCi0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOyAvKiBVbnJlY29nbml6ZWQgU2lnbmFsIFJlcXVlc3RlZCAqLwotI2Vsc2UKICAgICBpZiAoa2lsbChwaWQsIHNpZykgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotI2VuZGlmCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNjY4NiwxNiArNjU5NywxNyBAQAogd2luMzJfa2lsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBEV09SRCBwaWQsIHNpZywgZXJyOworICAgIHBpZF90IHBpZDsKKyAgICBEV09SRCBzaWcsIGVycjsKICAgICBIQU5ETEUgaGFuZGxlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJrazpraWxsIiwgJnBpZCwgJnNpZykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIms6a2lsbCIsICZwaWQsICZzaWcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIENvbnNvbGUgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIGEgY29tbW9uIGNvbnNvbGUgY2FuIGJlIHNlbnQgQ1RSTCtDIG9yCiAgICAgICAgQ1RSTCtCUkVBSyBldmVudHMsIHByb3ZpZGVkIHRoZXkgaGFuZGxlIHNhaWQgZXZlbnRzLiAqLwogICAgIGlmIChzaWcgPT0gQ1RSTF9DX0VWRU5UIHx8IHNpZyA9PSBDVFJMX0JSRUFLX0VWRU5UKSB7Ci0gICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCBwaWQpID09IDApIHsKKyAgICAgICAgaWYgKEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudChzaWcsIChEV09SRClwaWQpID09IDApIHsKICAgICAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKICAgICAgICAgfQpAQCAtNjcwNSw3ICs2NjE3LDcgQEAKIAogICAgIC8qIElmIHRoZSBzaWduYWwgaXMgb3V0c2lkZSBvZiB3aGF0IEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudCBjYW4gdXNlLAogICAgICAgIGF0dGVtcHQgdG8gb3BlbiBhbmQgdGVybWluYXRlIHRoZSBwcm9jZXNzLiAqLwotICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIHBpZCk7CisgICAgaGFuZGxlID0gT3BlblByb2Nlc3MoUFJPQ0VTU19BTExfQUNDRVNTLCBGQUxTRSwgKERXT1JEKXBpZCk7CiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKQEAgLTcxMTEsNyArNzAyMyw3IEBACiAgICAgUHlfaW50cHRyX3QgcGlkOwogICAgIGludCBzdGF0dXMsIG9wdGlvbnM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTp3YWl0cGlkIiwgJnBpZCwgJm9wdGlvbnMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBwaWQgPSBfY3dhaXQoJnN0YXR1cywgcGlkLCBvcHRpb25zKTsKQEAgLTcxMjAsNyArNzAzMiw3IEBACiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogCiAgICAgLyogc2hpZnQgdGhlIHN0YXR1cyBsZWZ0IGEgYnl0ZSBzbyB0aGlzIGlzIG1vcmUgbGlrZSB0aGUgUE9TSVggd2FpdHBpZCAqLwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOaSIsIFB5TG9uZ19Gcm9tUGlkKHBpZCksIHN0YXR1cyA8PCA4KTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSICJpIiwgcGlkLCBzdGF0dXMgPDwgOCk7CiB9CiAjZW5kaWYgLyogSEFWRV9XQUlUUElEIHx8IEhBVkVfQ1dBSVQgKi8KIApAQCAtNzE3MSw2ICs3MDgzLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVhZGxpbmsiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpyZWFkbGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9SRUFETElOS0FUCkBAIC03MTkxLDcgKzcxMDQsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJyZWFkbGluayIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTcyMjcsOCArNzE0MCw5IEBACiAvKiBHcmFiIENyZWF0ZVN5bWJvbGljTGlua1cgZHluYW1pY2FsbHkgZnJvbSBrZXJuZWwzMiAqLwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rVykoTFBXU1RSLCBMUFdTVFIsIERXT1JEKSA9IE5VTEw7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKShMUFNUUiwgTFBTVFIsIERXT1JEKSA9IE5VTEw7CisKIHN0YXRpYyBpbnQKLWNoZWNrX0NyZWF0ZVN5bWJvbGljTGluaygpCitjaGVja19DcmVhdGVTeW1ib2xpY0xpbmsodm9pZCkKIHsKICAgICBISU5TVEFOQ0UgaEtlcm5lbDMyOwogICAgIC8qIG9ubHkgcmVjaGVjayAqLwpAQCAtNzI0Miw1NSArNzE1Niw1NyBAQAogICAgIHJldHVybiAoUHlfQ3JlYXRlU3ltYm9saWNMaW5rVyAmJiBQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKTsKIH0KIAotdm9pZCBfZGlybmFtZVcoV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lVyhXQ0hBUiAqcGF0aCkKK3sKICAgICBXQ0hBUiAqcHRyOwogCiAgICAgLyogd2FsayB0aGUgcGF0aCBmcm9tIHRoZSBlbmQgdW50aWwgYSBiYWNrc2xhc2ggaXMgZW5jb3VudGVyZWQgKi8KLSAgICBmb3IocHRyID0gcGF0aCArIHdjc2xlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKQotICAgIHsKLSAgICAgICAgaWYoKnB0ciA9PSAqTCJcXCIgfHwgKnB0ciA9PSAqTCIvIikgeworICAgIGZvcihwdHIgPSBwYXRoICsgd2NzbGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gTCdcXCcgfHwgKnB0ciA9PSBMJy8nKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAgKnB0ciA9IDA7CiB9CiAKLXZvaWQgX2Rpcm5hbWVBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lQShjaGFyICpwYXRoKQorewogICAgIGNoYXIgKnB0cjsKIAogICAgIC8qIHdhbGsgdGhlIHBhdGggZnJvbSB0aGUgZW5kIHVudGlsIGEgYmFja3NsYXNoIGlzIGVuY291bnRlcmVkICovCi0gICAgZm9yKHB0ciA9IHBhdGggKyBzdHJsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkKLSAgICB7Ci0gICAgICAgIGlmKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykgeworICAgIGZvcihwdHIgPSBwYXRoICsgc3RybGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgICpwdHIgPSAwOwogfQogCi1pbnQgX2lzX2Fic1coV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNXKGNvbnN0IFdDSEFSICpwYXRoKQorewogICAgIHJldHVybiBwYXRoWzBdID09IEwnXFwnIHx8IHBhdGhbMF0gPT0gTCcvJyB8fCBwYXRoWzFdID09IEwnOic7CiAKIH0KIAotaW50IF9pc19hYnNBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNBKGNvbnN0IGNoYXIgKnBhdGgpCit7CiAgICAgcmV0dXJuIHBhdGhbMF0gPT0gJ1xcJyB8fCBwYXRoWzBdID09ICcvJyB8fCBwYXRoWzFdID09ICc6JzsKIAogfQogCi12b2lkIF9qb2luVyhXQ0hBUiAqZGVzdF9wYXRoLCBjb25zdCBXQ0hBUiAqcm9vdCwgY29uc3QgV0NIQVIgKnJlc3QpIHsKLSAgICAvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLwotICAgIGludCByb290X2xlbjsKKy8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCitzdGF0aWMgdm9pZAorX2pvaW5XKFdDSEFSICpkZXN0X3BhdGgsIGNvbnN0IFdDSEFSICpyb290LCBjb25zdCBXQ0hBUiAqcmVzdCkKK3sKKyAgICBzaXplX3Qgcm9vdF9sZW47CiAKLSAgICBpZihfaXNfYWJzVyhyZXN0KSkgeworICAgIGlmIChfaXNfYWJzVyhyZXN0KSkgewogICAgICAgICB3Y3NjcHkoZGVzdF9wYXRoLCByZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcyOTksMTcgKzcyMTUsMTkgQEAKIAogICAgIHdjc2NweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7Ci0gICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAqTCJcXCI7Ci0gICAgICAgIHJvb3RfbGVuICs9IDE7CisgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSBMJ1xcJzsKKyAgICAgICAgcm9vdF9sZW4rKzsKICAgICB9CiAgICAgd2NzY3B5KGRlc3RfcGF0aCtyb290X2xlbiwgcmVzdCk7CiB9CiAKLXZvaWQgX2pvaW5BKGNoYXIgKmRlc3RfcGF0aCwgY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcmVzdCkgewotICAgIC8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCi0gICAgaW50IHJvb3RfbGVuOworLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KK3N0YXRpYyB2b2lkCitfam9pbkEoY2hhciAqZGVzdF9wYXRoLCBjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpyZXN0KQoreworICAgIHNpemVfdCByb290X2xlbjsKIAotICAgIGlmKF9pc19hYnNBKHJlc3QpKSB7CisgICAgaWYgKF9pc19hYnNBKHJlc3QpKSB7CiAgICAgICAgIHN0cmNweShkZXN0X3BhdGgsIHJlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzMxOSwxNCArNzIzNywxNSBAQAogICAgIHN0cmNweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7CiAgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAnXFwnOwotICAgICAgICByb290X2xlbiArPSAxOworICAgICAgICByb290X2xlbisrOwogICAgIH0KICAgICBzdHJjcHkoZGVzdF9wYXRoK3Jvb3RfbGVuLCByZXN0KTsKIH0KIAotaW50IF9jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQogewotICAgIC8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCiAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBzcmNfaW5mbzsKICAgICBXQ0hBUiBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgV0NIQVIgc3JjX3Jlc29sdmVkW01BWF9QQVRIXSA9IEwiIjsKQEAgLTczNDIsMTggKzcyNjEsMTkgQEAKICAgICApOwogfQogCi1pbnQgX2NoZWNrX2RpckEoY2hhciAqc3JjLCBjaGFyICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJBKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKIHsKLSAgICAvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CiAgICAgY2hhciBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgY2hhciBzcmNfcmVzb2x2ZWRbTUFYX1BBVEhdID0gIiI7CiAKICAgICAvKiBkZXN0X3BhcmVudCA9IG9zLnBhdGguZGlybmFtZShkZXN0KSAqLwogICAgIHN0cmNweShkZXN0X3BhcmVudCwgZGVzdCk7Ci0gICAgX2Rpcm5hbWVXKGRlc3RfcGFyZW50KTsKKyAgICBfZGlybmFtZUEoZGVzdF9wYXJlbnQpOwogICAgIC8qIHNyY19yZXNvbHZlZCA9IG9zLnBhdGguam9pbihkZXN0X3BhcmVudCwgc3JjKSAqLwotICAgIF9qb2luVyhzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOworICAgIF9qb2luQShzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOwogICAgIHJldHVybiAoCiAgICAgICAgIEdldEZpbGVBdHRyaWJ1dGVzRXhBKHNyY19yZXNvbHZlZCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmc3JjX2luZm8pCiAgICAgICAgICYmIHNyY19pbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkKQEAgLTczNzksOCArNzI5OSwxMCBAQAogI2VuZGlmCiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gInN5bWxpbmsiOwogICAgIHNyYy5hcmd1bWVudF9uYW1lID0gInNyYyI7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKICAgICBkc3QuYXJndW1lbnRfbmFtZSA9ICJkc3QiOwogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNzQzMyw3ICs3MzU1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJzeW1saW5rIiwgc3JjLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTc0NDksNyArNzM3MSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigic3ltbGluayIsICZkc3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZzcmMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC03NjExLDMxICs3NTMzLDcgQEAKIHRpbWVzLiAgVGhlIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBuYW1lZCB0dXBsZSB3aXRoIHRoZXNlIGZpZWxkczpcblwKICAgKHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWUsIGVsYXBzZWRfdGltZSkiKTsKIAotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLXN0YXRpYyBsb25nCi1zeXN0ZW1fdXB0aW1lKHZvaWQpCi17Ci0gICAgVUxPTkcgICAgIHZhbHVlID0gMDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBEb3NRdWVyeVN5c0luZm8oUVNWX01TX0NPVU5ULCBRU1ZfTVNfQ09VTlQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3RpbWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQotewotICAgIC8qIEN1cnJlbnRseSBPbmx5IFVwdGltZSBpcyBQcm92aWRlZCAtLSBPdGhlcnMgTGF0ZXIgKi8KLSAgICByZXR1cm4gYnVpbGRfdGltZXNfcmVzdWx0KAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc191dGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19zdGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19jdXRpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKTAgLyogdC50bXNfY3N0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlzeXN0ZW1fdXB0aW1lKCkgLyAxMDAwKTsKLX0KLSNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7CkBAIC03NjU3LDcgKzc1NTUsNyBAQAogICAgICAgICAoZG91YmxlKTAsCiAgICAgICAgIChkb3VibGUpMCk7CiB9Ci0jZWxzZSAvKiBOZWl0aGVyIFdpbmRvd3Mgbm9yIE9TLzIgKi8KKyNlbHNlIC8qIE5vdCBXaW5kb3dzICovCiAjZGVmaW5lIE5FRURfVElDS1NfUEVSX1NFQ09ORAogc3RhdGljIGxvbmcgdGlja3NfcGVyX3NlY29uZCA9IC0xOwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc3NzcsNiArNzY3NSwxMCBAQAogCiAvKiBGdW5jdGlvbnMgYWN0aW5nIG9uIGZpbGUgZGVzY3JpcHRvcnMgKi8KIAorI2lmZGVmIE9fQ0xPRVhFQworZXh0ZXJuIGludCBfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VuZGlmCisKIFB5RG9jX1NUUlZBUihwb3NpeF9vcGVuX19kb2NfXywKICJvcGVuKHBhdGgsIGZsYWdzLCBtb2RlPTBvNzc3LCAqLCBkaXJfZmQ9Tm9uZSlcblxuXAogT3BlbiBhIGZpbGUgZm9yIGxvdyBsZXZlbCBJTy4gIFJldHVybnMgYSBmaWxlIGhhbmRsZSAoaW50ZWdlcikuXG5cCkBAIC03Nzk2LDggKzc2OTgsMTQgQEAKICAgICBpbnQgZmQ7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAibW9kZSIsICJkaXJfZmQiLCBOVUxMfTsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJl9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZWxpZiAhZGVmaW5lZChNU19XSU5ET1dTKQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gIm9wZW4iOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXxpJE8mOm9wZW4iLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAmZmxhZ3MsICZtb2RlLApAQCAtNzgwOSw2ICs3NzE3LDEyIEBACiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VsaWYgZGVmaW5lZChPX0NMT0VYRUMpCisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2VuZGlmCisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChwYXRoLndpZGUpCkBAIC03ODI0LDE2ICs3NzM4LDE3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChmZCA9PSAtMSkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgLyogZm9yY2UgdXNlIG9mIHBvc2l4X2Vycm9yIGhlcmUgZm9yIGV4YWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgIGlmIChwYXRoLndpZGUpCi0gICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9lcnJvcigpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigib3BlbiIsICZwYXRoKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgub2JqZWN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAorI2lmbmRlZiBNU19XSU5ET1dTCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogCiBleGl0OgpAQCAtNzg5MCwxMyArNzgwNSwxNCBAQAogcG9zaXhfZHVwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQ7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZHVwIiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBmZCA9IGR1cChmZCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBmZCA9IF9QeV9kdXAoZmQpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKIH0KIApAQCAtNzkwNiwxNiArNzgyMiw4MiBAQAogRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvci4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2R1cDIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgaW50IGZkLCBmZDIsIHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmR1cDIiLCAmZmQsICZmZDIpKQorICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJmZCIsICJmZDIiLCAiaW5oZXJpdGFibGUiLCBOVUxMfTsKKyAgICBpbnQgZmQsIGZkMjsKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworICAgIGludCByZXM7CisjaWYgZGVmaW5lZChIQVZFX0RVUDMpICYmIFwKKyAgICAhKGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpKQorICAgIC8qIGR1cDMoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI3KyBhbmQgZ2xpYmMgMi45ICovCisgICAgaW50IGR1cDNfd29ya3MgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaWl8aTpkdXAyIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLCAmZmQyLCAmaW5oZXJpdGFibGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmICghX1B5VmVyaWZ5X2ZkX2R1cDIoZmQsIGZkMikpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgLyogQ2hhcmFjdGVyIGZpbGVzIGxpa2UgY29uc29sZSBjYW5ub3QgYmUgbWFrZSBub24taW5oZXJpdGFibGUgKi8KKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoZmQyLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUDJGRF9DTE9FWEVDKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoIWluaGVyaXRhYmxlKQorICAgICAgICByZXMgPSBmY250bChmZCwgRl9EVVAyRkRfQ0xPRVhFQywgZmQyKTsKKyAgICBlbHNlCisgICAgICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyNlbHNlCisKKyNpZmRlZiBIQVZFX0RVUDMKKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIGR1cDNfd29ya3MgIT0gMCkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGR1cDMoZmQsIGZkMiwgT19DTE9FWEVDKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzID09IC0xKQorICAgICAgICAgICAgICAgIGR1cDNfd29ya3MgPSAoZXJybm8gIT0gRU5PU1lTKTsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlIHx8IGR1cDNfd29ya3MgPT0gMCkKKyAgICB7CisjZW5kaWYKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgICAgIGlmICghaW5oZXJpdGFibGUgJiYgX1B5X3NldF9pbmhlcml0YWJsZShmZDIsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisjaWZkZWYgSEFWRV9EVVAzCisgICAgfQorI2VuZGlmCisKKyNlbmRpZgorCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNzk1OSw3ICs3OTQxLDcgQEAKIHBvc2l4X2xzZWVrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQsIGhvdzsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIFBZX0xPTkdfTE9ORyBwb3MsIHJlczsKICNlbHNlCiAgICAgb2ZmX3QgcG9zLCByZXM7CkBAIC03OTg3LDcgKzc5NjksNyBAQAogICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIGhvdyk7CiAjZWxzZQogICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIGhvdyk7CkBAIC04MTkzLDcgKzgxNzUsNyBAQAogICAgIH0KICAgICBsZW4gPSBwYnVmLmxlbjsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgbGVuID0gSU5UX01BWDsKICAgICBzaXplID0gd3JpdGUoZmQsIHBidWYuYnVmLCAoaW50KWxlbik7CkBAIC04MjMwLDEyICs4MjEyLDEzIEBACiAgICAgb2ZmX3Qgc2J5dGVzOwogICAgIHN0cnVjdCBzZl9oZHRyIHNmOwogICAgIGludCBmbGFncyA9IDA7Ci0gICAgc2YuaGVhZGVycyA9IE5VTEw7Ci0gICAgc2YudHJhaWxlcnMgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJvdXQiLCAiaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0IiwgImNvdW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlcnMiLCAidHJhaWxlcnMiLCAiZmxhZ3MiLCBOVUxMfTsKIAorICAgIHNmLmhlYWRlcnMgPSBOVUxMOworICAgIHNmLnRyYWlsZXJzID0gTlVMTDsKKwogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgImlpTyZPJnxPT2k6c2VuZGZpbGUiLAogICAgICAgICBrZXl3b3JkcywgJm91dCwgJmluLCBfcGFyc2Vfb2ZmX3QsICZvZmZzZXQsIF9wYXJzZV9vZmZfdCwgJnNieXRlcywKQEAgLTgzNjgsNyArODM1MSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzICE9IDApIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiZnN0YXQiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAjZW5kaWYKQEAgLTg0MDEsMzUgKzgzODQsNjkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9waXBlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgSEZJTEUgcmVhZCwgd3JpdGU7Ci0gICAgQVBJUkVUIHJjOwotCi0gICAgcmMgPSBEb3NDcmVhdGVQaXBlKCAmcmVhZCwgJndyaXRlLCA0MDk2KTsKLSAgICBpZiAocmMgIT0gTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBvczJfZXJyb3IocmMpOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCByZWFkLCB3cml0ZSk7Ci0jZWxzZQotI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaW50IGZkc1syXTsKLSAgICBpbnQgcmVzOwotICAgIHJlcyA9IHBpcGUoZmRzKTsKLSAgICBpZiAocmVzICE9IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZmRzWzBdLCBmZHNbMV0pOwotI2Vsc2UgLyogTVNfV0lORE9XUyAqLworI2lmZGVmIE1TX1dJTkRPV1MKICAgICBIQU5ETEUgcmVhZCwgd3JpdGU7Ci0gICAgaW50IHJlYWRfZmQsIHdyaXRlX2ZkOworICAgIFNFQ1VSSVRZX0FUVFJJQlVURVMgYXR0cjsKICAgICBCT09MIG9rOwotICAgIG9rID0gQ3JlYXRlUGlwZSgmcmVhZCwgJndyaXRlLCBOVUxMLCAwKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoIkNyZWF0ZVBpcGUiLCBOVUxMKTsKLSAgICByZWFkX2ZkID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdClyZWFkLCAwKTsKLSAgICB3cml0ZV9mZCA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3Qpd3JpdGUsIDEpOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgcmVhZF9mZCwgd3JpdGVfZmQpOwotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KKyNlbHNlCisgICAgaW50IHJlczsKICNlbmRpZgorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGF0dHIubkxlbmd0aCA9IHNpemVvZihhdHRyKTsKKyAgICBhdHRyLmxwU2VjdXJpdHlEZXNjcmlwdG9yID0gTlVMTDsKKyAgICBhdHRyLmJJbmhlcml0SGFuZGxlID0gRkFMU0U7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgb2sgPSBDcmVhdGVQaXBlKCZyZWFkLCAmd3JpdGUsICZhdHRyLCAwKTsKKyAgICBpZiAob2spIHsKKyAgICAgICAgZmRzWzBdID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdClyZWFkLCBfT19SRE9OTFkpOworICAgICAgICBmZHNbMV0gPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXdyaXRlLCBfT19XUk9OTFkpOworICAgICAgICBpZiAoZmRzWzBdID09IC0xIHx8IGZkc1sxXSA9PSAtMSkgeworICAgICAgICAgICAgQ2xvc2VIYW5kbGUocmVhZCk7CisgICAgICAgICAgICBDbG9zZUhhbmRsZSh3cml0ZSk7CisgICAgICAgICAgICBvayA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyNlbHNlCisKKyNpZmRlZiBIQVZFX1BJUEUyCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJlcyA9IHBpcGUyKGZkcywgT19DTE9FWEVDKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJlcyAhPSAwICYmIGVycm5vID09IEVOT1NZUykKKyAgICB7CisjZW5kaWYKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBwaXBlKGZkcyk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZHNbMF0sIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1swXSk7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzFdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkc1sxXSwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzBdKTsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMV0pOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgSEFWRV9QSVBFMgorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHJlcyAhPSAwKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworI2VuZGlmIC8qICFNU19XSU5ET1dTICovCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7CiB9CiAjZW5kaWYgIC8qIEhBVkVfUElQRSAqLwogCkBAIC04NzI4LDYgKzg3NDUsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImxlbmd0aCIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ0cnVuY2F0ZSI7CiAjaWZkZWYgSEFWRV9GVFJVTkNBVEUKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtODc0NSw3ICs4NzYzLDcgQEAKICAgICAgICAgcmVzID0gdHJ1bmNhdGUocGF0aC5uYXJyb3csIGxlbmd0aCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmVzdWx0ID0gcGF0aF9wb3NpeF9lcnJvcigidHJ1bmNhdGUiLCAmcGF0aCk7CisgICAgICAgIHJlc3VsdCA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgIGVsc2UgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJlc3VsdCA9IFB5X05vbmU7CkBAIC05MTY4LDYgKzkxODYsMTAgQEAKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDgsIFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3QuZl9mbGFnKSk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCA5LCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0LmZfbmFtZW1heCkpOwogI2VuZGlmCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXR1cm4gdjsKIH0KQEAgLTkyMTcsNiArOTIzOSw3IEBACiAgICAgc3RydWN0IHN0YXR2ZnMgc3Q7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInN0YXR2ZnMiOwogI2lmZGVmIEhBVkVfRlNUQVRWRlMKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtOTI0Myw3ICs5MjY2LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJzdGF0dmZzIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtOTQ4MCw2ICs5NTAzLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJuYW1lIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInBhdGhjb25mIjsKICNpZmRlZiBIQVZFX0ZQQVRIQ09ORgogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC05NTAwLDcgKzk1MjQsNyBAQAogICAgICAgICAgICAgLyogY291bGQgYmUgYSBwYXRoIG9yIG5hbWUgcHJvYmxlbSAqLwogICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF9wb3NpeF9lcnJvcigicGF0aGNvbmYiLCAmcGF0aCk7CisgICAgICAgICAgICByZXN1bHQgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcobGltaXQpOwpAQCAtOTY4Miw3ICs5NzA2LDcgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBpbnQgbmFtZTsKICAgICBjaGFyIGJ1ZmZlclsyNTVdOwotICAgIGludCBsZW47CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6Y29uZnN0ciIsIGNvbnZfY29uZnN0cl9jb25mbmFtZSwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTk2OTksNyArOTcyMyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKHVuc2lnbmVkIGludClsZW4gPj0gc2l6ZW9mKGJ1ZmZlcikpIHsKKyAgICBpZiAobGVuID49IHNpemVvZihidWZmZXIpKSB7CiAgICAgICAgIGNoYXIgKmJ1ZiA9IFB5TWVtX01hbGxvYyhsZW4pOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMjI5LDcgKzEwMjUzLDcgQEAKICAgICBpbnQgbmFtZTsKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpzeXNjb25mIiwgY29udl9zeXNjb25mX2NvbmZuYW1lLCAmbmFtZSkpIHsKLSAgICAgICAgaW50IHZhbHVlOworICAgICAgICBsb25nIHZhbHVlOwogCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgdmFsdWUgPSBzeXNjb25mKG5hbWUpOwpAQCAtMTA1NTksNiArMTA1ODMsOCBAQAogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImdldHhhdHRyIjsKKyAgICBhdHRyaWJ1dGUuZnVuY3Rpb25fbmFtZSA9ICJnZXR4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpnZXR4YXR0ciIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCkBAIC0xMDU3NSw3ICsxMDYwMSw3IEBACiAgICAgICAgIHN0YXRpYyBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplc1tdID0gezEyOCwgWEFUVFJfU0laRV9NQVgsIDB9OwogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemVzW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlcl9zaXplKSB7Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJnZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmZmVyX3NpemUpOwpAQCAtMTA1OTcsNyArMTA2MjMsNyBAQAogICAgICAgICAgICAgYnVmZmVyID0gTlVMTDsKICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFUkFOR0UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJnZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAKQEAgLTEwNjM2LDYgKzEwNjYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInNldHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOwogICAgIG1lbXNldCgmdmFsdWUsIDAsIHNpemVvZih2YWx1ZSkpOwpAQCAtMTA2NjMsNyArMTA2OTAsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJzZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTEwNjk3LDcgKzEwNzI0LDkgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJhdHRyaWJ1dGUiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJlbW92ZXhhdHRyIjsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOworICAgIGF0dHJpYnV0ZS5mdW5jdGlvbl9uYW1lID0gInJlbW92ZXhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfCRwOnJlbW92ZXhhdHRyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkcywKQEAgLTEwNzE5LDcgKzEwNzQ4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigicmVtb3ZleGF0dHIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0xMDc1NSw2ICsxMDc4NCw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxpc3R4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgcGF0aC5mZCA9IC0xOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJiRwOmxpc3R4YXR0ciIsIGtleXdvcmRzLApAQCAtMTA3NzMsNyArMTA4MDMsNyBAQAogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemVzW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgICAvKiBFUkFOR0UgKi8KLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImxpc3R4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyID0gUHlNZW1fTUFMTE9DKGJ1ZmZlcl9zaXplKTsKQEAgLTEwNzk3LDcgKzEwODI3LDcgQEAKICAgICAgICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aF9lcnJvcigibGlzdHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDk3NSwxNCArMTEwMDUsMTQ1IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChURVJNU0laRV9VU0VfQ09OSU8pIHx8IGRlZmluZWQoVEVSTVNJWkVfVVNFX0lPQ1RMKSAqLwogCitQeURvY19TVFJWQVIocG9zaXhfY3B1X2NvdW50X19kb2NfXywKKyJjcHVfY291bnQoKSAtPiBpbnRlZ2VyXG5cblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSwgb3IgTm9uZSBpZiB0aGlzIHZhbHVlIGNhbm5vdCBiZVxuXAorZXN0YWJsaXNoZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9jcHVfY291bnQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IG5jcHUgPSAwOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBTWVNURU1fSU5GTyBzeXNpbmZvOworICAgIEdldFN5c3RlbUluZm8oJnN5c2luZm8pOworICAgIG5jcHUgPSBzeXNpbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOworI2VsaWYgZGVmaW5lZChfX2hwdXgpCisgICAgbmNwdSA9IG1wY3RsKE1QQ19HRVROVU1TUFVTLCBOVUxMLCBOVUxMKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKF9TQ19OUFJPQ0VTU09SU19PTkxOKQorICAgIG5jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKyNlbGlmIGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgXAorICAgICAgZGVmaW5lZChfX09wZW5CU0RfXykgICB8fCBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19OZXRCU0RfXykgICAgfHwgXAorICAgICAgZGVmaW5lZChfX0FQUExFX18pCisgICAgaW50IG1pYlsyXTsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKG5jcHUpOworICAgIG1pYlswXSA9IENUTF9IVzsKKyAgICBtaWJbMV0gPSBIV19OQ1BVOworICAgIGlmIChzeXNjdGwobWliLCAyLCAmbmNwdSwgJmxlbiwgTlVMTCwgMCkgIT0gMCkKKyAgICAgICAgbmNwdSA9IDA7CisjZW5kaWYKKyAgICBpZiAobmNwdSA+PSAxKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG5jcHUpOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihnZXRfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJnZXRfaW5oZXJpdGFibGUoZmQpIC0+IGJvb2xcbiIgXAorICAgICJcbiIgXAorICAgICJHZXQgdGhlIGNsb3NlLW9uLWV4ZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmZDsKKyAgICBpbnQgaW5oZXJpdGFibGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Z2V0X2luaGVyaXRhYmxlIiwgJmZkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgaW5oZXJpdGFibGUgPSBfUHlfZ2V0X2luaGVyaXRhYmxlKGZkKTsKKyAgICBpZiAoaW5oZXJpdGFibGUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGluaGVyaXRhYmxlKTsKK30KKworUHlEb2NfU1RSVkFSKHNldF9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgInNldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmZCwgaW5oZXJpdGFibGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOnNldF9pbmhlcml0YWJsZSIsICZmZCwgJmluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCBOVUxMKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisKKyNpZmRlZiBNU19XSU5ET1dTCitQeURvY19TVFJWQVIoZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgImdldF9oYW5kbGVfaW5oZXJpdGFibGUoZmQpIC0+IGJvb2xcbiIgXAorICAgICJcbiIgXAorICAgICJHZXQgdGhlIGNsb3NlLW9uLWV4ZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRfaGFuZGxlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiOmdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCAmaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIUdldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpaGFuZGxlLCAmZmxhZ3MpKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGZsYWdzICYgSEFORExFX0ZMQUdfSU5IRVJJVCk7Cit9CisKK1B5RG9jX1NUUlZBUihzZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAic2V0X2hhbmRsZV9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRfaGFuZGxlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOnNldF9oYW5kbGVfaW5oZXJpdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSloYW5kbGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIGZsYWdzKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmICAgLyogTVNfV0lORE9XUyAqLworCisKIAogc3RhdGljIFB5TWV0aG9kRGVmIHBvc2l4X21ldGhvZHNbXSA9IHsKLSAgICB7ImFjY2VzcyIsICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9hY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfYWNjZXNzX19kb2NfX30sCi0jaWZkZWYgSEFWRV9UVFlOQU1FCi0gICAgeyJ0dHluYW1lIiwgICAgICAgICBwb3NpeF90dHluYW1lLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3R0eW5hbWVfX2RvY19ffSwKLSNlbmRpZgorCisgICAgT1NfU1RBVF9NRVRIT0RERUYKKyAgICBPU19BQ0NFU1NfTUVUSE9EREVGCisgICAgT1NfVFRZTkFNRV9NRVRIT0RERUYKKwogICAgIHsiY2hkaXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2NoZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X2NoZGlyX19kb2NfX30sCkBAIC0xMTAyMCwxMiArMTExODEsMTAgQEAKICNpZmRlZiBIQVZFX0NURVJNSUQKICAgICB7ImN0ZXJtaWQiLCAgICAgICAgIHBvc2l4X2N0ZXJtaWQsIE1FVEhfTk9BUkdTLCBwb3NpeF9jdGVybWlkX19kb2NfX30sCiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dFVENXRAogICAgIHsiZ2V0Y3dkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2dldGN3ZF91bmljb2RlLAogICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRjd2RfX2RvY19ffSwKICAgICB7ImdldGN3ZGIiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9nZXRjd2RfYnl0ZXMsCiAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGN3ZGJfX2RvY19ffSwKLSNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9MSU5LKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgeyJsaW5rIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfbGluaywKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCkBAIC0xMTA2OCw5ICsxMTIyNyw2IEBACiAgICAgeyJybWRpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfcm1kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfcm1kaXJfX2RvY19ffSwKLSAgICB7InN0YXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9zdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3N0YXRfX2RvY19ffSwKICAgICB7InN0YXRfZmxvYXRfdGltZXMiLCBzdGF0X2Zsb2F0X3RpbWVzLCBNRVRIX1ZBUkFSR1MsIHN0YXRfZmxvYXRfdGltZXNfX2RvY19ffSwKICNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykKICAgICB7InN5bWxpbmsiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9zeW1saW5rLApAQCAtMTExMDUsMTAgKzExMjYxLDYgQEAKICNpZmRlZiBIQVZFX1NQQVdOVgogICAgIHsic3Bhd252IiwgICAgICAgICAgcG9zaXhfc3Bhd252LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudl9fZG9jX199LAogICAgIHsic3Bhd252ZSIsICAgICAgICAgcG9zaXhfc3Bhd252ZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZlX19kb2NfX30sCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICB7InNwYXdudnAiLCAgICAgICAgIHBvc2l4X3NwYXdudnAsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252cF9fZG9jX199LAotICAgIHsic3Bhd252cGUiLCAgICAgICAgcG9zaXhfc3Bhd252cGUsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252cGVfX2RvY19ffSwKLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmIC8qIEhBVkVfU1BBV05WICovCiAjaWZkZWYgSEFWRV9GT1JLMQogICAgIHsiZm9yazEiLCAgICAgICBwb3NpeF9mb3JrMSwgTUVUSF9OT0FSR1MsIHBvc2l4X2ZvcmsxX19kb2NfX30sCkBAIC0xMTI1Niw3ICsxMTQwOCw4IEBACiAgICAgeyJjbG9zZXJhbmdlIiwgICAgICBwb3NpeF9jbG9zZXJhbmdlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2Nsb3NlcmFuZ2VfX2RvY19ffSwKICAgICB7ImRldmljZV9lbmNvZGluZyIsIGRldmljZV9lbmNvZGluZywgTUVUSF9WQVJBUkdTLCBkZXZpY2VfZW5jb2RpbmdfX2RvY19ffSwKICAgICB7ImR1cCIsICAgICAgICAgICAgIHBvc2l4X2R1cCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9kdXBfX2RvY19ffSwKLSAgICB7ImR1cDIiLCAgICAgICAgICAgIHBvc2l4X2R1cDIsIE1FVEhfVkFSQVJHUywgcG9zaXhfZHVwMl9fZG9jX199LAorICAgIHsiZHVwMiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2R1cDIsCisgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBwb3NpeF9kdXAyX19kb2NfX30sCiAjaWZkZWYgSEFWRV9MT0NLRgogICAgIHsibG9ja2YiLCAgICAgICAgICAgcG9zaXhfbG9ja2YsIE1FVEhfVkFSQVJHUywgcG9zaXhfbG9ja2ZfX2RvY19ffSwKICNlbmRpZgpAQCAtMTEzODcsOSArMTE1NDAsOSBAQAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICB7Il9nZXRmdWxscGF0aG5hbWUiLCAgICAgICAgcG9zaXhfX2dldGZ1bGxwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7Il9nZXRmaW5hbHBhdGhuYW1lIiwgICAgICAgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAgeyJfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgICAgIHBvc2l4X19nZXRmaWxlaW5mb3JtYXRpb24sIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAgeyJfaXNkaXIiLCAgICAgICAgICAgICAgICAgIHBvc2l4X19pc2RpciwgTUVUSF9WQVJBUkdTLCBwb3NpeF9faXNkaXJfX2RvY19ffSwKICAgICB7Il9nZXRkaXNrdXNhZ2UiLCAgICAgICAgICAgd2luMzJfX2dldGRpc2t1c2FnZSwgTUVUSF9WQVJBUkdTLCB3aW4zMl9fZ2V0ZGlza3VzYWdlX19kb2NfX30sCisgICAgeyJfZ2V0dm9sdW1lcGF0aG5hbWUiLCAgICAgIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19ffSwKICNlbmRpZgogI2lmZGVmIEhBVkVfR0VUTE9BREFWRwogICAgIHsiZ2V0bG9hZGF2ZyIsICAgICAgcG9zaXhfZ2V0bG9hZGF2ZywgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGxvYWRhdmdfX2RvY19ffSwKQEAgLTExNDI1LDY5ICsxMTU3OCwyMCBAQAogI2lmIGRlZmluZWQoVEVSTVNJWkVfVVNFX0NPTklPKSB8fCBkZWZpbmVkKFRFUk1TSVpFX1VTRV9JT0NUTCkKICAgICB7ImdldF90ZXJtaW5hbF9zaXplIiwgZ2V0X3Rlcm1pbmFsX3NpemUsIE1FVEhfVkFSQVJHUywgdGVybXNpemVfX2RvY19ffSwKICNlbmRpZgorICAgIHsiY3B1X2NvdW50IiwgKFB5Q0Z1bmN0aW9uKXBvc2l4X2NwdV9jb3VudCwKKyAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9jcHVfY291bnRfX2RvY19ffSwKKyAgICB7ImdldF9pbmhlcml0YWJsZSIsIHBvc2l4X2dldF9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBnZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKyAgICB7InNldF9pbmhlcml0YWJsZSIsIHBvc2l4X3NldF9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBzZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgeyJnZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgcG9zaXhfZ2V0X2hhbmRsZV9pbmhlcml0YWJsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBnZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfX30sCisgICAgeyJzZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgcG9zaXhfc2V0X2hhbmRsZV9pbmhlcml0YWJsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBzZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfX30sCisjZW5kaWYKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKIAotc3RhdGljIGludAotaW5zKFB5T2JqZWN0ICptb2R1bGUsIGNoYXIgKnN5bWJvbCwgbG9uZyB2YWx1ZSkKLXsKLSAgICByZXR1cm4gUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobW9kdWxlLCBzeW1ib2wsIHZhbHVlKTsKLX0KLQotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0vKiBJbnNlcnQgUGxhdGZvcm0tU3BlY2lmaWMgQ29uc3RhbnQgVmFsdWVzIChTdHJpbmdzICYgTnVtYmVycykgb2YgQ29tbW9uIFVzZSAqLwotc3RhdGljIGludCBpbnNlcnR2YWx1ZXMoUHlPYmplY3QgKm1vZHVsZSkKLXsKLSAgICBBUElSRVQgICAgcmM7Ci0gICAgVUxPTkcgICAgIHZhbHVlc1tRU1ZfTUFYKzFdOwotICAgIFB5T2JqZWN0ICp2OwotICAgIGNoYXIgICAgICp2ZXIsIHRtcFs1MF07Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBEb3NRdWVyeVN5c0luZm8oMUwsIFFTVl9NQVgsICZ2YWx1ZXNbMV0sIHNpemVvZihVTE9ORykgKiBRU1ZfTUFYKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIG9zMl9lcnJvcihyYyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1lbWluc3RhbGxlZCIsIHZhbHVlc1tRU1ZfVE9UUEhZU01FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtZW1rZXJuZWwiLCAgICB2YWx1ZXNbUVNWX1RPVFJFU01FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtZW12aXJ0dWFsIiwgICB2YWx1ZXNbUVNWX1RPVEFWQUlMTUVNXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1heHBhdGhsZW4iLCAgIHZhbHVlc1tRU1ZfTUFYX1BBVEhfTEVOR1RIXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1heG5hbWVsZW4iLCAgIHZhbHVlc1tRU1ZfTUFYX0NPTVBfTEVOR1RIXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgInJldmlzaW9uIiwgICAgIHZhbHVlc1tRU1ZfVkVSU0lPTl9SRVZJU0lPTl0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJ0aW1lc2xpY2UiLCAgICB2YWx1ZXNbUVNWX01JTl9TTElDRV0pKSByZXR1cm4gLTE7Ci0KLSAgICBzd2l0Y2ggKHZhbHVlc1tRU1ZfVkVSU0lPTl9NSU5PUl0pIHsKLSAgICBjYXNlIDA6ICB2ZXIgPSAiMi4wMCI7IGJyZWFrOwotICAgIGNhc2UgMTA6IHZlciA9ICIyLjEwIjsgYnJlYWs7Ci0gICAgY2FzZSAxMTogdmVyID0gIjIuMTEiOyBicmVhazsKLSAgICBjYXNlIDMwOiB2ZXIgPSAiMy4wMCI7IGJyZWFrOwotICAgIGNhc2UgNDA6IHZlciA9ICI0LjAwIjsgYnJlYWs7Ci0gICAgY2FzZSA1MDogdmVyID0gIjUuMDAiOyBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeU9TX3NucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksCi0gICAgICAgICAgICAgICAgICAgICAgIiVkLSVkIiwgdmFsdWVzW1FTVl9WRVJTSU9OX01BSk9SXSwKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbUVNWX1ZFUlNJT05fTUlOT1JdKTsKLSAgICAgICAgdmVyID0gJnRtcFswXTsKLSAgICB9Ci0KLSAgICAvKiBBZGQgSW5kaWNhdG9yIG9mIHRoZSBWZXJzaW9uIG9mIHRoZSBPcGVyYXRpbmcgU3lzdGVtICovCi0gICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG1vZHVsZSwgInZlcnNpb24iLCB0bXApIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogQWRkIEluZGljYXRvciBvZiBXaGljaCBEcml2ZSB3YXMgVXNlZCB0byBCb290IHRoZSBTeXN0ZW0gKi8KLSAgICB0bXBbMF0gPSAnQScgKyB2YWx1ZXNbUVNWX0JPT1RfRFJJVkVdIC0gMTsKLSAgICB0bXBbMV0gPSAnOic7Ci0gICAgdG1wWzJdID0gJ1wwJzsKLQotICAgIHJldHVybiBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtb2R1bGUsICJib290ZHJpdmUiLCB0bXApOwotfQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKQogc3RhdGljIGludAogZW5hYmxlX3N5bWxpbmsoKQpAQCAtMTE1MTgsNDAxICsxMTYyMiwzODEgQEAKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKSAqLwogCiBzdGF0aWMgaW50Ci1hbGxfaW5zKFB5T2JqZWN0ICpkKQorYWxsX2lucyhQeU9iamVjdCAqbSkKIHsKICNpZmRlZiBGX09LCi0gICAgaWYgKGlucyhkLCAiRl9PSyIsIChsb25nKUZfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSX09LCi0gICAgaWYgKGlucyhkLCAiUl9PSyIsIChsb25nKVJfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXX09LCi0gICAgaWYgKGlucyhkLCAiV19PSyIsIChsb25nKVdfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBYX09LCi0gICAgaWYgKGlucyhkLCAiWF9PSyIsIChsb25nKVhfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBOR1JPVVBTX01BWAotICAgIGlmIChpbnMoZCwgIk5HUk9VUFNfTUFYIiwgKGxvbmcpTkdST1VQU19NQVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5HUk9VUFNfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgVE1QX01BWAotICAgIGlmIChpbnMoZCwgIlRNUF9NQVgiLCAobG9uZylUTVBfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUTVBfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV0NPTlRJTlVFRAotICAgIGlmIChpbnMoZCwgIldDT05USU5VRUQiLCAobG9uZylXQ09OVElOVUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXQ09OVElOVUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV05PSEFORwotICAgIGlmIChpbnMoZCwgIldOT0hBTkciLCAobG9uZylXTk9IQU5HKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXTk9IQU5HKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV1VOVFJBQ0VECi0gICAgaWYgKGlucyhkLCAiV1VOVFJBQ0VEIiwgKGxvbmcpV1VOVFJBQ0VEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXVU5UUkFDRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JET05MWQotICAgIGlmIChpbnMoZCwgIk9fUkRPTkxZIiwgKGxvbmcpT19SRE9OTFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkRPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19XUk9OTFkKLSAgICBpZiAoaW5zKGQsICJPX1dST05MWSIsIChsb25nKU9fV1JPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1dST05MWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUkRXUgotICAgIGlmIChpbnMoZCwgIk9fUkRXUiIsIChsb25nKU9fUkRXUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SRFdSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OREVMQVkKLSAgICBpZiAoaW5zKGQsICJPX05ERUxBWSIsIChsb25nKU9fTkRFTEFZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05ERUxBWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9OQkxPQ0sKLSAgICBpZiAoaW5zKGQsICJPX05PTkJMT0NLIiwgKGxvbmcpT19OT05CTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT05CTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQVBQRU5ECi0gICAgaWYgKGlucyhkLCAiT19BUFBFTkQiLCAobG9uZylPX0FQUEVORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BUFBFTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RTWU5DCi0gICAgaWYgKGlucyhkLCAiT19EU1lOQyIsIChsb25nKU9fRFNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRFNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JTWU5DCi0gICAgaWYgKGlucyhkLCAiT19SU1lOQyIsIChsb25nKU9fUlNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUlNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NZTkMKLSAgICBpZiAoaW5zKGQsICJPX1NZTkMiLCAobG9uZylPX1NZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9DVFRZCi0gICAgaWYgKGlucyhkLCAiT19OT0NUVFkiLCAobG9uZylPX05PQ1RUWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0NUVFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0NSRUFUCi0gICAgaWYgKGlucyhkLCAiT19DUkVBVCIsIChsb25nKU9fQ1JFQVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQ1JFQVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYQ0wKLSAgICBpZiAoaW5zKGQsICJPX0VYQ0wiLCAobG9uZylPX0VYQ0wpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhDTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVFJVTkMKLSAgICBpZiAoaW5zKGQsICJPX1RSVU5DIiwgKGxvbmcpT19UUlVOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UUlVOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQklOQVJZCi0gICAgaWYgKGlucyhkLCAiT19CSU5BUlkiLCAobG9uZylPX0JJTkFSWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19CSU5BUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RFWFQKLSAgICBpZiAoaW5zKGQsICJPX1RFWFQiLCAobG9uZylPX1RFWFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVEVYVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fWEFUVFIKLSAgICBpZiAoaW5zKGQsICJPX1hBVFRSIiwgKGxvbmcpT19YQVRUUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19YQVRUUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTEFSR0VGSUxFCi0gICAgaWYgKGlucyhkLCAiT19MQVJHRUZJTEUiLCAobG9uZylPX0xBUkdFRklMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19MQVJHRUZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NITE9DSwotICAgIGlmIChpbnMoZCwgIk9fU0hMT0NLIiwgKGxvbmcpT19TSExPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0hMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWExPQ0sKLSAgICBpZiAoaW5zKGQsICJPX0VYTE9DSyIsIChsb25nKU9fRVhMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhFQwotICAgIGlmIChpbnMoZCwgIk9fRVhFQyIsIChsb25nKU9fRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TRUFSQ0gKLSAgICBpZiAoaW5zKGQsICJPX1NFQVJDSCIsIChsb25nKU9fU0VBUkNIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NFQVJDSCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIE9fUEFUSAorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1BBVEgpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RUWV9JTklUCi0gICAgaWYgKGlucyhkLCAiT19UVFlfSU5JVCIsIChsb25nKU9fVFRZX0lOSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVFRZX0lOSVQpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBPX1RNUEZJTEUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UTVBGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19QUk9DRVNTCi0gICAgaWYgKGlucyhkLCAiUFJJT19QUk9DRVNTIiwgKGxvbmcpUFJJT19QUk9DRVNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1BST0NFU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1BHUlAKLSAgICBpZiAoaW5zKGQsICJQUklPX1BHUlAiLCAobG9uZylQUklPX1BHUlApKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fUEdSUCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fVVNFUgotICAgIGlmIChpbnMoZCwgIlBSSU9fVVNFUiIsIChsb25nKVBSSU9fVVNFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19VU0VSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19DTE9FWEVDCi0gICAgaWYgKGlucyhkLCAiT19DTE9FWEVDIiwgKGxvbmcpT19DTE9FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0FDQ01PREUKLSAgICBpZiAoaW5zKGQsICJPX0FDQ01PREUiLCAobG9uZylPX0FDQ01PREUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQUNDTU9ERSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAKICNpZmRlZiBTRUVLX0hPTEUKLSAgICBpZiAoaW5zKGQsICJTRUVLX0hPTEUiLCAobG9uZylTRUVLX0hPTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNFRUtfSE9MRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNFRUtfREFUQQotICAgIGlmIChpbnMoZCwgIlNFRUtfREFUQSIsIChsb25nKVNFRUtfREFUQSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0VFS19EQVRBKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIE1TIFdpbmRvd3MgKi8KICNpZmRlZiBPX05PSU5IRVJJVAogICAgIC8qIERvbid0IGluaGVyaXQgaW4gY2hpbGQgcHJvY2Vzc2VzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9JTkhFUklUIiwgKGxvbmcpT19OT0lOSEVSSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9JTkhFUklUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgX09fU0hPUlRfTElWRUQKICAgICAvKiBPcHRpbWl6ZSBmb3Igc2hvcnQgbGlmZSAoa2VlcCBpbiBtZW1vcnkpLiAqLwogICAgIC8qIE1TIGZvcmdvdCB0byBkZWZpbmUgdGhpcyBvbmUgd2l0aCBhIG5vbi11bmRlcnNjb3JlIGZvcm0gdG9vLiAqLwotICAgIGlmIChpbnMoZCwgIk9fU0hPUlRfTElWRUQiLCAobG9uZylfT19TSE9SVF9MSVZFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9fU0hPUlRfTElWRUQiLCBfT19TSE9SVF9MSVZFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVEVNUE9SQVJZCiAgICAgLyogQXV0b21hdGljYWxseSBkZWxldGUgd2hlbiBsYXN0IGhhbmRsZSBpcyBjbG9zZWQuICovCi0gICAgaWYgKGlucyhkLCAiT19URU1QT1JBUlkiLCAobG9uZylPX1RFTVBPUkFSWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19URU1QT1JBUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JBTkRPTQogICAgIC8qIE9wdGltaXplIGZvciByYW5kb20gYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fUkFORE9NIiwgKGxvbmcpT19SQU5ET00pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkFORE9NKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TRVFVRU5USUFMCiAgICAgLyogT3B0aW1pemUgZm9yIHNlcXVlbnRpYWwgYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fU0VRVUVOVElBTCIsIChsb25nKU9fU0VRVUVOVElBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TRVFVRU5USUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEdOVSBleHRlbnNpb25zLiAqLwogI2lmZGVmIE9fQVNZTkMKICAgICAvKiBTZW5kIGEgU0lHSU8gc2lnbmFsIHdoZW5ldmVyIGlucHV0IG9yIG91dHB1dAogICAgICAgIGJlY29tZXMgYXZhaWxhYmxlIG9uIGZpbGUgZGVzY3JpcHRvciAqLwotICAgIGlmIChpbnMoZCwgIk9fQVNZTkMiLCAobG9uZylPX0FTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19ESVJFQ1QKICAgICAvKiBEaXJlY3QgZGlzayBhY2Nlc3MuICovCi0gICAgaWYgKGlucyhkLCAiT19ESVJFQ1QiLCAobG9uZylPX0RJUkVDVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19ESVJFQ1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RJUkVDVE9SWQogICAgIC8qIE11c3QgYmUgYSBkaXJlY3RvcnkuICAgICAgKi8KLSAgICBpZiAoaW5zKGQsICJPX0RJUkVDVE9SWSIsIChsb25nKU9fRElSRUNUT1JZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RJUkVDVE9SWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9GT0xMT1cKICAgICAvKiBEbyBub3QgZm9sbG93IGxpbmtzLiAgICAgICovCi0gICAgaWYgKGlucyhkLCAiT19OT0ZPTExPVyIsIChsb25nKU9fTk9GT0xMT1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9GT0xMT1cpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PTElOS1MKICAgICAvKiBGYWlscyBpZiBsaW5rIGNvdW50IG9mIHRoZSBuYW1lZCBmaWxlIGlzIGdyZWF0ZXIgdGhhbiAxICovCi0gICAgaWYgKGlucyhkLCAiT19OT0xJTktTIiwgKGxvbmcpT19OT0xJTktTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PTElOS1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PQVRJTUUKICAgICAvKiBEbyBub3QgdXBkYXRlIHRoZSBhY2Nlc3MgdGltZS4gKi8KLSAgICBpZiAoaW5zKGQsICJPX05PQVRJTUUiLCAobG9uZylPX05PQVRJTUUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9BVElNRSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogVGhlc2UgY29tZSBmcm9tIHN5c2V4aXRzLmggKi8KICNpZmRlZiBFWF9PSwotICAgIGlmIChpbnMoZCwgIkVYX09LIiwgKGxvbmcpRVhfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09LICovCiAjaWZkZWYgRVhfVVNBR0UKLSAgICBpZiAoaW5zKGQsICJFWF9VU0FHRSIsIChsb25nKUVYX1VTQUdFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9VU0FHRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9VU0FHRSAqLwogI2lmZGVmIEVYX0RBVEFFUlIKLSAgICBpZiAoaW5zKGQsICJFWF9EQVRBRVJSIiwgKGxvbmcpRVhfREFUQUVSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfREFUQUVSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9EQVRBRVJSICovCiAjaWZkZWYgRVhfTk9JTlBVVAotICAgIGlmIChpbnMoZCwgIkVYX05PSU5QVVQiLCAobG9uZylFWF9OT0lOUFVUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT0lOUFVUKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PSU5QVVQgKi8KICNpZmRlZiBFWF9OT1VTRVIKLSAgICBpZiAoaW5zKGQsICJFWF9OT1VTRVIiLCAobG9uZylFWF9OT1VTRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PVVNFUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1VTRVIgKi8KICNpZmRlZiBFWF9OT0hPU1QKLSAgICBpZiAoaW5zKGQsICJFWF9OT0hPU1QiLCAobG9uZylFWF9OT0hPU1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PSE9TVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT0hPU1QgKi8KICNpZmRlZiBFWF9VTkFWQUlMQUJMRQotICAgIGlmIChpbnMoZCwgIkVYX1VOQVZBSUxBQkxFIiwgKGxvbmcpRVhfVU5BVkFJTEFCTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1VOQVZBSUxBQkxFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1VOQVZBSUxBQkxFICovCiAjaWZkZWYgRVhfU09GVFdBUkUKLSAgICBpZiAoaW5zKGQsICJFWF9TT0ZUV0FSRSIsIChsb25nKUVYX1NPRlRXQVJFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9TT0ZUV0FSRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9TT0ZUV0FSRSAqLwogI2lmZGVmIEVYX09TRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfT1NFUlIiLCAobG9uZylFWF9PU0VSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfT1NFUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT1NFUlIgKi8KICNpZmRlZiBFWF9PU0ZJTEUKLSAgICBpZiAoaW5zKGQsICJFWF9PU0ZJTEUiLCAobG9uZylFWF9PU0ZJTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09TRklMRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PU0ZJTEUgKi8KICNpZmRlZiBFWF9DQU5UQ1JFQVQKLSAgICBpZiAoaW5zKGQsICJFWF9DQU5UQ1JFQVQiLCAobG9uZylFWF9DQU5UQ1JFQVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0NBTlRDUkVBVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9DQU5UQ1JFQVQgKi8KICNpZmRlZiBFWF9JT0VSUgotICAgIGlmIChpbnMoZCwgIkVYX0lPRVJSIiwgKGxvbmcpRVhfSU9FUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0lPRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0lPRVJSICovCiAjaWZkZWYgRVhfVEVNUEZBSUwKLSAgICBpZiAoaW5zKGQsICJFWF9URU1QRkFJTCIsIChsb25nKUVYX1RFTVBGQUlMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9URU1QRkFJTCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9URU1QRkFJTCAqLwogI2lmZGVmIEVYX1BST1RPQ09MCi0gICAgaWYgKGlucyhkLCAiRVhfUFJPVE9DT0wiLCAobG9uZylFWF9QUk9UT0NPTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfUFJPVE9DT0wpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfUFJPVE9DT0wgKi8KICNpZmRlZiBFWF9OT1BFUk0KLSAgICBpZiAoaW5zKGQsICJFWF9OT1BFUk0iLCAobG9uZylFWF9OT1BFUk0pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PUEVSTSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1BFUk0gKi8KICNpZmRlZiBFWF9DT05GSUcKLSAgICBpZiAoaW5zKGQsICJFWF9DT05GSUciLCAobG9uZylFWF9DT05GSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0NPTkZJRykpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9DT05GSUcgKi8KICNpZmRlZiBFWF9OT1RGT1VORAotICAgIGlmIChpbnMoZCwgIkVYX05PVEZPVU5EIiwgKGxvbmcpRVhfTk9URk9VTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PVEZPVU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PVEZPVU5EICovCiAKICAgICAvKiBzdGF0dmZzICovCiAjaWZkZWYgU1RfUkRPTkxZCi0gICAgaWYgKGlucyhkLCAiU1RfUkRPTkxZIiwgKGxvbmcpU1RfUkRPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9SRE9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogU1RfUkRPTkxZICovCiAjaWZkZWYgU1RfTk9TVUlECi0gICAgaWYgKGlucyhkLCAiU1RfTk9TVUlEIiwgKGxvbmcpU1RfTk9TVUlEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT1NVSUQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogU1RfTk9TVUlEICovCiAKICAgICAvKiBGcmVlQlNEIHNlbmRmaWxlKCkgY29uc3RhbnRzICovCiAjaWZkZWYgU0ZfTk9ESVNLSU8KLSAgICBpZiAoaW5zKGQsICJTRl9OT0RJU0tJTyIsIChsb25nKVNGX05PRElTS0lPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9OT0RJU0tJTykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNGX01OT1dBSVQKLSAgICBpZiAoaW5zKGQsICJTRl9NTk9XQUlUIiwgKGxvbmcpU0ZfTU5PV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfTU5PV0FJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNGX1NZTkMKLSAgICBpZiAoaW5zKGQsICJTRl9TWU5DIiwgKGxvbmcpU0ZfU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciBwb3NpeF9mYWR2aXNlICovCiAjaWZkZWYgUE9TSVhfRkFEVl9OT1JNQUwKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX05PUk1BTCIsIChsb25nKVBPU0lYX0ZBRFZfTk9STUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX05PUk1BTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfU0VRVUVOVElBTAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfU0VRVUVOVElBTCIsIChsb25nKVBPU0lYX0ZBRFZfU0VRVUVOVElBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9SQU5ET00KLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX1JBTkRPTSIsIChsb25nKVBPU0lYX0ZBRFZfUkFORE9NKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1JBTkRPTSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfTk9SRVVTRQotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfTk9SRVVTRSIsIChsb25nKVBPU0lYX0ZBRFZfTk9SRVVTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9OT1JFVVNFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9XSUxMTkVFRAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfV0lMTE5FRUQiLCAobG9uZylQT1NJWF9GQURWX1dJTExORUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1dJTExORUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9ET05UTkVFRAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfRE9OVE5FRUQiLCAobG9uZylQT1NJWF9GQURWX0RPTlRORUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX0RPTlRORUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIHdhaXRpZCAqLwogI2lmIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKEhBVkVfV0FJVElEKQotICAgIGlmIChpbnMoZCwgIlBfUElEIiwgKGxvbmcpUF9QSUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9QR0lEIiwgKGxvbmcpUF9QR0lEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfQUxMIiwgKGxvbmcpUF9BTEwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfUElEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQX1BHSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfQUxMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV0VYSVRFRAotICAgIGlmIChpbnMoZCwgIldFWElURUQiLCAobG9uZylXRVhJVEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXRVhJVEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV05PV0FJVAotICAgIGlmIChpbnMoZCwgIldOT1dBSVQiLCAobG9uZylXTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXTk9XQUlUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV1NUT1BQRUQKLSAgICBpZiAoaW5zKGQsICJXU1RPUFBFRCIsIChsb25nKVdTVE9QUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXU1RPUFBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9FWElURUQKLSAgICBpZiAoaW5zKGQsICJDTERfRVhJVEVEIiwgKGxvbmcpQ0xEX0VYSVRFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0VYSVRFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9EVU1QRUQKLSAgICBpZiAoaW5zKGQsICJDTERfRFVNUEVEIiwgKGxvbmcpQ0xEX0RVTVBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0RVTVBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9UUkFQUEVECi0gICAgaWYgKGlucyhkLCAiQ0xEX1RSQVBQRUQiLCAobG9uZylDTERfVFJBUFBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX1RSQVBQRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfQ09OVElOVUVECi0gICAgaWYgKGlucyhkLCAiQ0xEX0NPTlRJTlVFRCIsIChsb25nKUNMRF9DT05USU5VRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9DT05USU5VRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3IgbG9ja2YgKi8KICNpZmRlZiBGX0xPQ0sKLSAgICBpZiAoaW5zKGQsICJGX0xPQ0siLCAobG9uZylGX0xPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVExPQ0sKLSAgICBpZiAoaW5zKGQsICJGX1RMT0NLIiwgKGxvbmcpRl9UTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9UTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVUxPQ0sKLSAgICBpZiAoaW5zKGQsICJGX1VMT0NLIiwgKGxvbmcpRl9VTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9VTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVEVTVAotICAgIGlmIChpbnMoZCwgIkZfVEVTVCIsIChsb25nKUZfVEVTVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9URVNUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NQQVdOVgotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKGlucyhkLCAiUF9XQUlUIiwgKGxvbmcpUF9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9XQUlUIiwgKGxvbmcpUF9OT1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9PVkVSTEFZIiwgKGxvbmcpUF9PVkVSTEFZKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVCVUciLCAobG9uZylQX0RFQlVHKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfU0VTU0lPTiIsIChsb25nKVBfU0VTU0lPTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFVEFDSCIsIChsb25nKVBfREVUQUNIKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUE0iLCAobG9uZylQX1BNKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVGQVVMVCIsIChsb25nKVBfREVGQVVMVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX01JTklNSVpFIiwgKGxvbmcpUF9NSU5JTUlaRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX01BWElNSVpFIiwgKGxvbmcpUF9NQVhJTUlaRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0ZVTExTQ1JFRU4iLCAobG9uZylQX0ZVTExTQ1JFRU4pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9XSU5ET1dFRCIsIChsb25nKVBfV0lORE9XRUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9GT1JFR1JPVU5EIiwgKGxvbmcpUF9GT1JFR1JPVU5EKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfQkFDS0dST1VORCIsIChsb25nKVBfQkFDS0dST1VORCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PQ0xPU0UiLCAobG9uZylQX05PQ0xPU0UpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1NFU1NJT04iLCAobG9uZylQX05PU0VTU0lPTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1FVT1RFIiwgKGxvbmcpUF9RVU9URSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1RJTERFIiwgKGxvbmcpUF9USUxERSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1VOUkVMQVRFRCIsIChsb25nKVBfVU5SRUxBVEVEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVCVUdERVNDIiwgKGxvbmcpUF9ERUJVR0RFU0MpKSByZXR1cm4gLTE7Ci0jZWxzZQotICAgIGlmIChpbnMoZCwgIlBfV0FJVCIsIChsb25nKV9QX1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVQiLCAobG9uZylfUF9OT1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9PVkVSTEFZIiwgKGxvbmcpX09MRF9QX09WRVJMQVkpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVRPIiwgKGxvbmcpX1BfTk9XQUlUTykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFVEFDSCIsIChsb25nKV9QX0RFVEFDSCkpIHJldHVybiAtMTsKLSNlbmRpZgorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9XQUlUIiwgX1BfV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfTk9XQUlUIiwgX1BfTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9PVkVSTEFZIiwgX09MRF9QX09WRVJMQVkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX05PV0FJVE8iLCBfUF9OT1dBSVRPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9ERVRBQ0giLCBfUF9ERVRBQ0gpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU0NIRURfSAotICAgIGlmIChpbnMoZCwgIlNDSEVEX09USEVSIiwgKGxvbmcpU0NIRURfT1RIRVIpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiU0NIRURfRklGTyIsIChsb25nKVNDSEVEX0ZJRk8pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiU0NIRURfUlIiLCAobG9uZylTQ0hFRF9SUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfT1RIRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0ZJRk8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1JSKSkgcmV0dXJuIC0xOwogI2lmZGVmIFNDSEVEX1NQT1JBRElDCi0gICAgaWYgKGlucyhkLCAiU0NIRURfU1BPUkFESUMiLCAobG9uZylTQ0hFRF9TUE9SQURJQykgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9TUE9SQURJQykgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfQkFUQ0gKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9CQVRDSCIsIChsb25nKVNDSEVEX0JBVENIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9CQVRDSCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0lETEUKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JRExFIiwgKGxvbmcpU0NIRURfSURMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfSURMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1JFU0VUX09OX0ZPUksKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9SRVNFVF9PTl9GT1JLIiwgKGxvbmcpU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1NZUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1NZUyIsIChsb25nKVNDSEVEX1NZUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfU1lTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfSUEKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JQSIsIChsb25nKVNDSEVEX0lBKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9JQSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0ZTUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZTUyIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfRlgKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GWCIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDSEVEX0ZYIiwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFVTRV9YQVRUUlMKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9DUkVBVEUiLCAobG9uZylYQVRUUl9DUkVBVEUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfUkVQTEFDRSIsIChsb25nKVhBVFRSX1JFUExBQ0UpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfU0laRV9NQVgiLCAobG9uZylYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfQ1JFQVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9SRVBMQUNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgUlRMRF9MQVpZCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTEFaWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9MQVpZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT1cKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9XKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9HTE9CQUwKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9HTE9CQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfR0xPQkFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9MT0NBTAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0RFTEVURQotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0xPQUQKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT0xPQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9MT0FEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9ERUVQQklORAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIGlmIChpbnNlcnR2YWx1ZXMoZCkpIHJldHVybiAtMTsKLSNlbmRpZgogICAgIHJldHVybiAwOwogfQogCkBAIC0xMTkyMSwxMCArMTIwMDUsNiBAQAogI2RlZmluZSBJTklURlVOQyBQeUluaXRfbnQKICNkZWZpbmUgTU9ETkFNRSAibnQiCiAKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0jZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9vczIKLSNkZWZpbmUgTU9ETkFNRSAib3MyIgotCiAjZWxzZQogI2RlZmluZSBJTklURlVOQyBQeUluaXRfcG9zaXgKICNkZWZpbmUgTU9ETkFNRSAicG9zaXgiCkBAIC0xMjExMiwxOSArMTIxOTIsMjMgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgICAgICB3YWl0aWRfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi53YWl0aWRfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAotICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc3RhdF9yZXN1bHQiOworICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSAib3Muc3RhdF9yZXN1bHQiOyAvKiBzZWUgaXNzdWUgIzE5MjA5ICovCiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzddLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbOF0ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s5XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRSZXN1bHRUeXBlLCAmc3RhdF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdFJlc3VsdFR5cGUsICZzdGF0X3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgc3RydWN0c2VxX25ldyA9IFN0YXRSZXN1bHRUeXBlLnRwX25ldzsKICAgICAgICAgU3RhdFJlc3VsdFR5cGUudHBfbmV3ID0gc3RhdHJlc3VsdF9uZXc7CiAKLSAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnN0YXR2ZnNfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdFZGU1Jlc3VsdFR5cGUsICZzdGF0dmZzX3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gIm9zLnN0YXR2ZnNfcmVzdWx0IjsgLyogc2VlIGlzc3VlICMxOTIwOSAqLworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRWRlNSZXN1bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR2ZnNfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2lmZGVmIE5FRURfVElDS1NfUEVSX1NFQ09ORAogIyAgaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX0NMS19UQ0spCiAgICAgICAgIHRpY2tzX3Blcl9zZWNvbmQgPSBzeXNjb25mKF9TQ19DTEtfVENLKTsKQEAgLTEyMTM3LDEyICsxMjIyMSwxNSBAQAogCiAjaWYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFBBUkFNKSB8fCBkZWZpbmVkKEhBVkVfU0NIRURfU0VUU0NIRURVTEVSKQogICAgICAgICBzY2hlZF9wYXJhbV9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc2NoZWRfcGFyYW0iOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTY2hlZFBhcmFtVHlwZSwgJnNjaGVkX3BhcmFtX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNjaGVkUGFyYW1UeXBlLCAmc2NoZWRfcGFyYW1fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFNjaGVkUGFyYW1UeXBlLnRwX25ldyA9IHNjaGVkX3BhcmFtX25ldzsKICNlbmRpZgogCiAgICAgICAgIC8qIGluaXRpYWxpemUgVGVybWluYWxTaXplX2luZm8gKi8KLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGVybWluYWxTaXplVHlwZSwgJlRlcm1pbmFsU2l6ZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUZXJtaW5hbFNpemVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRlcm1pbmFsU2l6ZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmV2FpdGlkUmVzdWx0VHlwZSk7CkBAIC0xMjE2MCwxMSArMTIyNDcsMTMgQEAKICNlbmRpZgogCiAgICAgdGltZXNfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi50aW1lc19yZXN1bHQiOwotICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKTsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidGltZXNfcmVzdWx0IiwgKFB5T2JqZWN0ICopJlRpbWVzUmVzdWx0VHlwZSk7CiAKICAgICB1bmFtZV9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnVuYW1lX3Jlc3VsdCI7Ci0gICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ1bmFtZV9yZXN1bHQiLCAoUHlPYmplY3QgKikmVW5hbWVSZXN1bHRUeXBlKTsKIAogI2lmZGVmIF9fQVBQTEVfXwpAQCAtMTIyNDIsNyArMTIzMzEsNiBAQAogICAgIGluaXRpYWxpemVkID0gMTsKIAogICAgIHJldHVybiBtOwotCiB9CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wd2Rtb2R1bGUuYyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKaW5kZXggMjg1ZmQ5Yy4uOTkwOTQwMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCkBAIC0xNjgsMTIgKzE2OCw4IEBACiAgICAgc3RydWN0IHBhc3N3ZCAqcDsKICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmICgocCA9IGdldHB3dWlkKDApKSAhPSBOVUxMKSB7Ci0jZWxzZQogICAgIHNldHB3ZW50KCk7CiAgICAgd2hpbGUgKChwID0gZ2V0cHdlbnQoKSkgIT0gTlVMTCkgewotI2VuZGlmCiAgICAgICAgIFB5T2JqZWN0ICp2ID0gbWtwd2VudChwKTsKICAgICAgICAgaWYgKHYgPT0gTlVMTCB8fCBQeUxpc3RfQXBwZW5kKGQsIHYpICE9IDApIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYodik7CkBAIC0yMjAsOCArMjE2LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFB3ZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RQd2RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopICZTdHJ1Y3RQd2RUeXBlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHlleHBhdC5jIGIvTW9kdWxlcy9weWV4cGF0LmMKaW5kZXggN2U1MWQzNS4uM2Y1MWMxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weWV4cGF0LmMKKysrIGIvTW9kdWxlcy9weWV4cGF0LmMKQEAgLTEwLDYgKzEwLDkgQEAKIAogI2RlZmluZSBGSVhfVFJBQ0UKIAorc3RhdGljIFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgRXhwYXRNZW1vcnlIYW5kbGVyID0geworICAgIFB5T2JqZWN0X01hbGxvYywgUHlPYmplY3RfUmVhbGxvYywgUHlPYmplY3RfRnJlZX07CisKIGVudW0gSGFuZGxlclR5cGVzIHsKICAgICBTdGFydEVsZW1lbnQsCiAgICAgRW5kRWxlbWVudCwKQEAgLTQwNCw2ICs0MDcsMTAgQEAKIG15X0NoYXJhY3RlckRhdGFIYW5kbGVyKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBYTUxfQ2hhciAqZGF0YSwgaW50IGxlbikKIHsKICAgICB4bWxwYXJzZW9iamVjdCAqc2VsZiA9ICh4bWxwYXJzZW9iamVjdCAqKSB1c2VyRGF0YTsKKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpCiAgICAgICAgIGNhbGxfY2hhcmFjdGVyX2hhbmRsZXIoc2VsZiwgZGF0YSwgbGVuKTsKICAgICBlbHNlIHsKQEAgLTQzOCw2ICs0NDUsOSBAQAogICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyLCAqcnYsICphcmdzOwogICAgICAgICBpbnQgaSwgbWF4OwogCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLyogU2V0IG1heCB0byB0aGUgbnVtYmVyIG9mIHNsb3RzIGZpbGxlZCBpbiBhdHRzW107IG1heC8yIGlzCkBAIC01MjEsNiArNTMxLDggQEAKICAgICBJTklUIFwKIFwKICAgICBpZiAoaGF2ZV9oYW5kbGVyKHNlbGYsIE5BTUUpKSB7IFwKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIFwKKyAgICAgICAgICAgIHJldHVybiBSRVRVUk47IFwKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKSBcCiAgICAgICAgICAgICByZXR1cm4gUkVUVVJOOyBcCiAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlIFBBUkFNX0ZPUk1BVCA7XApAQCAtNjM1LDYgKzY0Nyw5IEBACiAgICAgICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0ICptb2RlbG9iaiwgKm5hbWVvYmo7CiAKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKQogICAgICAgICAgICAgZ290byBmaW5hbGx5OwogICAgICAgICBtb2RlbG9iaiA9IGNvbnZfY29udGVudF9tb2RlbChtb2RlbCwgKGNvbnZfc3RyaW5nX3RvX3VuaWNvZGUpKTsKQEAgLTgyMCw3ICs4MzUsOCBAQAogICAgICAgICBzICs9IE1BWF9DSFVOS19TSVpFOwogICAgICAgICBzbGVuIC09IE1BWF9DSFVOS19TSVpFOwogICAgIH0KLSAgICByYyA9IFhNTF9QYXJzZShzZWxmLT5pdHNlbGYsIHMsIHNsZW4sIGlzRmluYWwpOworICAgIGFzc2VydChNQVhfQ0hVTktfU0laRSA8IElOVF9NQVggJiYgc2xlbiA8IElOVF9NQVgpOworICAgIHJjID0gWE1MX1BhcnNlKHNlbGYtPml0c2VsZiwgcywgKGludClzbGVuLCBpc0ZpbmFsKTsKIAogZG9uZToKICAgICBpZiAodmlldy5idWYgIT0gTlVMTCkKQEAgLTEwMDIsNyArMTAxOCw3IEBACiAgICAgUHlPYmplY3RfR0NfVHJhY2sobmV3X3BhcnNlcik7CiAKICAgICBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gbWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgaWYgKG5ld19wYXJzZXItPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMTksNyArMTAzNSw3IEBACiAgICAgZm9yIChpID0gMDsgaGFuZGxlcl9pbmZvW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogICAgICAgICAvKiBkbyBub3RoaW5nICovOwogCi0gICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBtYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CisgICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CiAgICAgaWYgKCFuZXdfcGFyc2VyLT5oYW5kbGVycykgewogICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTEyNywxNCArMTE0MywxOSBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgdW5zaWduZWQgaW50IGtpbmQ7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisKICAgICBpZiAodGVtcGxhdGVfYnVmZmVyWzFdID09IDApIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdGVtcGxhdGVfYnVmZmVyW2ldID0gaTsKICAgICB9CiAKICAgICB1ID0gUHlVbmljb2RlX0RlY29kZSgoY2hhciopIHRlbXBsYXRlX2J1ZmZlciwgMjU2LCBuYW1lLCAicmVwbGFjZSIpOwotICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKQorICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKSB7CisgICAgICAgIFB5X1hERUNSRUYodSk7CiAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgIH0KIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KSAhPSAyNTYpIHsKICAgICAgICAgUHlfREVDUkVGKHUpOwpAQCAtMTE4MCwyOCArMTIwMSwyNiBAQAogICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKICAgICBzZWxmLT5uc19wcmVmaXhlcyA9IDA7CiAgICAgc2VsZi0+aGFuZGxlcnMgPSBOVUxMOwotICAgIGlmIChuYW1lc3BhY2Vfc2VwYXJhdG9yICE9IE5VTEwpIHsKLSAgICAgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZU5TKGVuY29kaW5nLCAqbmFtZXNwYWNlX3NlcGFyYXRvcik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlKGVuY29kaW5nKTsKLSAgICB9Ci0jaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQotICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQotICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKLSAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCi0gICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQucHJlZml4KTsKLSNlbmRpZgogICAgIHNlbGYtPmludGVybiA9IGludGVybjsKICAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICAvKiBuYW1lc3BhY2Vfc2VwYXJhdG9yIGlzIGVpdGhlciBOVUxMIG9yIGNvbnRhaW5zIG9uZSBjaGFyICsgXDAgKi8KKyAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5nLCAmRXhwYXRNZW1vcnlIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3NlcGFyYXRvcik7CiAgICAgaWYgKHNlbGYtPml0c2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiWE1MX1BhcnNlckNyZWF0ZSBmYWlsZWQiKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisjaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQorICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQorICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKKyAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCisgICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQuZXhwYXQuaGFzaHNhbHQpOworI2VuZGlmCiAgICAgWE1MX1NldFVzZXJEYXRhKHNlbGYtPml0c2VsZiwgKHZvaWQgKilzZWxmKTsKICAgICBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihzZWxmLT5pdHNlbGYsCiAgICAgICAgICAgICAgICAgICAoWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIpIFB5VW5rbm93bkVuY29kaW5nSGFuZGxlciwgTlVMTCk7CkBAIC0xMjA5LDcgKzEyMjgsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIHNlbGYtPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIHNlbGYtPmhhbmRsZXJzID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOwogICAgIGlmICghc2VsZi0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEyMzYsMTEgKzEyNTUsMTEgQEAKICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW2ldID0gTlVMTDsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShzZWxmLT5oYW5kbGVycyk7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+aGFuZGxlcnMpOwogICAgICAgICBzZWxmLT5oYW5kbGVycyA9IE5VTEw7CiAgICAgfQogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbnRlcm4pOwpAQCAtMTQ0MCw3ICsxNDU5LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGIpIHsKICAgICAgICAgICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKHNlbGYtPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQ1MSw3ICsxNDcwLDcgQEAKICAgICAgICAgZWxzZSBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTUxMyw5ICsxNTMyLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBmcmVlIGV4aXN0aW5nIGJ1ZmZlciAqLwotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgIH0KLSAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhuZXdfYnVmZmVyX3NpemUpOworICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19idWZmZXJfc2l6ZSk7CiAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weXRob24uYyBiL01vZHVsZXMvcHl0aG9uLmMKaW5kZXggZjc4MWQ5YS4uOTgxMWMwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weXRob24uYworKysgYi9Nb2R1bGVzL3B5dGhvbi5jCkBAIC0yMyw5ICsyMywxMiBAQAogICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOwogICAgIGludCBpLCByZXM7CiAgICAgY2hhciAqb2xkbG9jOworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgZnBfZXhjZXB0X3QgbTsKKyNlbmRpZgogCi0gICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOwotICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSooYXJnYysxKSk7CisgICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiAoYXJnYysxKSk7CisgICAgYXJndl9jb3B5MiA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIHJldHVybiAxOwpAQCAtMzcsMTcgKzQwLDIxIEBACiAgICAgICogZXhjZXB0aW9ucyBieSBkZWZhdWx0LiAgSGVyZSB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgICovCiAjaWZkZWYgX19GcmVlQlNEX18KLSAgICBmcF9leGNlcHRfdCBtOwotCiAgICAgbSA9IGZwZ2V0bWFzaygpOwogICAgIGZwc2V0bWFzayhtICYgfkZQX1hfT0ZMKTsKICNlbmRpZgotICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZyZWUob2xkbG9jKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOwpAQCAtNTgsMTMgKzY1LDEzIEBACiAgICAgYXJndl9jb3B5MlthcmdjXSA9IGFyZ3ZfY29weVthcmdjXSA9IE5VTEw7CiAKICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgIGZyZWUob2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmVzID0gUHlfTWFpbihhcmdjLCBhcmd2X2NvcHkpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgcmV0dXJuIHJlczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDA5NmM2ZDEuLmYyNTVhODcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTYsNiArNiw3IEBACiAKIC8qIFN0YW5kYXJkIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTc2LDYgKzc3LDU1IEBACiAgICAoc2VlIGlzc3VlICMxNzI4OSBmb3IgdGhlIG1vdGl2YXRpb24pLiAqLwogc3RhdGljIGNoYXIgKmNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2s7CisgIFB5T2JqZWN0ICpzdGFydHVwX2hvb2s7CisgIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vazsKKyAgUHlPYmplY3QgKmNvbXBsZXRlcjsKKyAgUHlPYmplY3QgKmJlZ2lkeDsKKyAgUHlPYmplY3QgKmVuZGlkeDsKK30gcmVhZGxpbmVzdGF0ZTsKKworCisjZGVmaW5lIHJlYWRsaW5lX3N0YXRlKG8pICgocmVhZGxpbmVzdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG8pKQorCitzdGF0aWMgaW50CityZWFkbGluZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGVyKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5iZWdpZHgpOworICAgUHlfQ0xFQVIoc3RhdGUtPmVuZGlkeCk7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZGxpbmVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5zdGFydHVwX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRlcik7CisgICAgUHlfVklTSVQoc3RhdGUtPmJlZ2lkeCk7CisgICAgUHlfVklTSVQoc3RhdGUtPmVuZGlkeCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkbGluZV9mcmVlKHZvaWQgKm0pCit7CisgICAgcmVhZGxpbmVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiByZWFkbGluZW1vZHVsZTsKKworI2RlZmluZSByZWFkbGluZXN0YXRlX2dsb2JhbCAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJnJlYWRsaW5lbW9kdWxlKSkpCisKKwogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg2LDEyICsxMzYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogTWFrZSBhIGNvcHkgLS0gcmxfcGFyc2VfYW5kX2JpbmQoKSBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KICAgICAvKiBCZXJuYXJkIEhlcnpvZyAqLwotICAgIGNvcHkgPSBtYWxsb2MoMSArIHN0cmxlbihzKSk7CisgICAgY29weSA9IFB5TWVtX01hbGxvYygxICsgc3RybGVuKHMpKTsKICAgICBpZiAoY29weSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzdHJjcHkoY29weSwgcyk7CiAgICAgcmxfcGFyc2VfYW5kX2JpbmQoY29weSk7Ci0gICAgZnJlZShjb3B5KTsgLyogRnJlZSB0aGUgY29weSAqLworICAgIFB5TWVtX0ZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjUyLDIzICszMDIsMjEgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHNwZWNpZnkgaG9vayBmdW5jdGlvbnMgaW4gUHl0aG9uICovCiAKLXN0YXRpYyBQeU9iamVjdCAqY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKnN0YXJ0dXBfaG9vayA9IE5VTEw7CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCi1zdGF0aWMgUHlPYmplY3QgKnByZV9pbnB1dF9ob29rID0gTlVMTDsKKwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IHNldF9ob29rKCJjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiwKLSAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOworICAgICAgICAgICAgICAgICAgICAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOwogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogICAgIC8qIFdlIGNhbm5vdCBzZXQgdGhpcyBob29rIGdsb2JhbGx5LCBzaW5jZSBpdCByZXBsYWNlcyB0aGUKICAgICAgICBkZWZhdWx0IGNvbXBsZXRpb24gZGlzcGxheS4gKi8KICAgICBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID0KLSAgICAgICAgY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CisgICAgICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID8KICNpZiBkZWZpbmVkKF9STF9GVU5DVElPTl9UWVBFREVGKQogICAgICAgICAocmxfY29tcGRpc3BfZnVuY190ICopb25fY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA6IDA7CiAjZWxzZQpAQCAtMjg5LDcgKzMzNyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3N0YXJ0dXBfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmc3RhcnR1cF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInN0YXJ0dXBfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+c3RhcnR1cF9ob29rLCBhcmdzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19zZXRfc3RhcnR1cF9ob29rLApAQCAtMzA2LDcgKzM1NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3ByZV9pbnB1dF9ob29rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnByZV9pbnB1dF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3ByZV9pbnB1dF9ob29rLApAQCAtMzIxLDEwICszNjksMTAgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIHdvcmQgY29tcGxldGVyIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRlciA9IE5VTEw7CiAKLXN0YXRpYyBQeU9iamVjdCAqYmVnaWR4ID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqZW5kaWR4ID0gTlVMTDsKKworCisKIAogCiAvKiBHZXQgdGhlIGNvbXBsZXRpb24gdHlwZSBmb3IgdGhlIHNjb3BlIG9mIHRoZSB0YWItY29tcGxldGlvbiAqLwpAQCAtMzQ0LDggKzM5Miw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2JlZ2lkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihiZWdpZHgpOwotICAgIHJldHVybiBiZWdpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9iZWdpZHgsCkBAIC0zNTgsOCArNDA2LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZW5kaWR4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgUHlfSU5DUkVGKGVuZGlkeCk7Ci0gICAgcmV0dXJuIGVuZGlkeDsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHg7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2VuZGlkeCwKQEAgLTUyNCw3ICs1NzIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJmNvbXBsZXRlciwgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJjb21wbGV0ZXIiLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X2NvbXBsZXRlciwKQEAgLTUzOCwxMSArNTg2LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2NvbXBsZXRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSAgICBpZiAoY29tcGxldGVyID09IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSAgICBQeV9JTkNSRUYoY29tcGxldGVyKTsKLSAgICByZXR1cm4gY29tcGxldGVyOworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyKTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcjsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfY29tcGxldGVyLApAQCAtNzQ2LDkgKzc5NCw2IEBACiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaWYgKGZ1bmMgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqcjsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKLSNlbmRpZgogICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsIE5VTEwpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTc2NSw5ICs4MTAsNiBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeV9YREVDUkVGKHIpOwogICAgICAgZG9uZToKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC03NzYsMTQgKzgxOCwzMCBAQAogc3RhdGljIGludAogb25fc3RhcnR1cF9ob29rKHZvaWQpCiB7Ci0gICAgcmV0dXJuIG9uX2hvb2soc3RhcnR1cF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCiBzdGF0aWMgaW50CiBvbl9wcmVfaW5wdXRfaG9vayh2b2lkKQogewotICAgIHJldHVybiBvbl9ob29rKHByZV9pbnB1dF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnByZV9pbnB1dF9ob29rKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcjsKIH0KICNlbmRpZgogCkBAIC04MTAsNyArODY4LDcgQEAKICAgICAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKG0sIGksIHMpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAorICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic09pIiwgbWF0Y2hlc1swXSwgbSwgbWF4X2xlbmd0aCk7CiAKICAgICBQeV9ERUNSRUYobSk7IG09TlVMTDsKQEAgLTg0MCwxMyArODk4LDEzIEBACiBvbl9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGF0ZSkKIHsKICAgICBjaGFyICpyZXN1bHQgPSBOVUxMOwotICAgIGlmIChjb21wbGV0ZXIgIT0gTlVMTCkgeworICAgIGlmIChyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKnI7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKICAgICAgICAgcmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fb3ZlciA9IDE7Ci0gICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29tcGxldGVyLCAic2kiLCB0ZXh0LCBzdGF0ZSk7CisgICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKHIgPT0gUHlfTm9uZSkgewpAQCAtODc5LDI0ICs5MzcsMzIgQEAKIHN0YXRpYyBjaGFyICoqCiBmbGV4X2NvbXBsZXRlKGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIHsKKyAgICBjaGFyICoqcmVzdWx0OworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZW5kaWYKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fQVBQRU5EX0NIQVJBQ1RFUgogICAgIHJsX2NvbXBsZXRpb25fYXBwZW5kX2NoYXJhY3RlciA9J1wwJzsKICNlbmRpZgogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9TVVBQUkVTU19BUFBFTkQKICAgICBybF9jb21wbGV0aW9uX3N1cHByZXNzX2FwcGVuZCA9IDA7CiAjZW5kaWYKLSAgICBQeV9YREVDUkVGKGJlZ2lkeCk7Ci0gICAgUHlfWERFQ1JFRihlbmRpZHgpOwotICAgIGJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3RhcnQpOwotICAgIGVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgZW5kKTsKLSAgICByZXR1cm4gY29tcGxldGlvbl9tYXRjaGVzKHRleHQsICpvbl9jb21wbGV0aW9uKTsKKyAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIFB5X1hERUNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3RhcnQpOworICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVuZCk7CisgICAgcmVzdWx0ID0gY29tcGxldGlvbl9tYXRjaGVzKHRleHQsICpvbl9jb21wbGV0aW9uKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKIC8qIEhlbHBlciB0byBpbml0aWFsaXplIEdOVSByZWFkbGluZSBwcm9wZXJseS4gKi8KIAogc3RhdGljIHZvaWQKLXNldHVwX3JlYWRsaW5lKHZvaWQpCitzZXR1cF9yZWFkbGluZShyZWFkbGluZXN0YXRlICptb2Rfc3RhdGUpCiB7CiAjaWZkZWYgU0FWRV9MT0NBTEUKICAgICBjaGFyICpzYXZlZF9sb2NhbGUgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKSk7CkBAIC05MjYsMTAgKzk5Miw2IEBACiAgICAgdXNpbmdfaGlzdG9yeSgpOwogCiAgICAgcmxfcmVhZGxpbmVfbmFtZSA9ICJweXRob24iOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogQWxsb3cgJGlmIHRlcm09IGluIC5pbnB1dHJjIHRvIHdvcmsgKi8KLSAgICBybF90ZXJtaW5hbF9uYW1lID0gZ2V0ZW52KCJURVJNIik7Ci0jZW5kaWYKICAgICAvKiBGb3JjZSByZWJpbmQgb2YgVEFCIHRvIGluc2VydC10YWIgKi8KICAgICBybF9iaW5kX2tleSgnXHQnLCBybF9pbnNlcnQpOwogICAgIC8qIEJpbmQgYm90aCBFU0MtVEFCIGFuZCBFU0MtRVNDIHRvIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uICovCkBAIC05NDgsOCArMTAxMCw4IEBACiAgICAgICAgIHN0cmR1cCgiIFx0XG5gfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsPD4vPyIpOwogICAgICAgICAvKiBBbGwgbm9uYWxwaGFudW1zIGV4Y2VwdCAnLicgKi8KIAotICAgIGJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7Ci0gICAgZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICBtb2Rfc3RhdGUtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgbW9kX3N0YXRlLT5lbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOwogICAgIC8qIEluaXRpYWxpemUgKGFsbG93cyAuaW5wdXRyYyB0byBvdmVycmlkZSkKICAgICAgKgogICAgICAqIFhYWDogQSBidWcgaW4gdGhlIHJlYWRsaW5lLTIuMiBsaWJyYXJ5IGNhdXNlcyBhIG1lbW9yeSBsZWFrCkBAIC05ODEsNyArMTA0Myw3IEBACiBleHRlcm4gUHlUaHJlYWRTdGF0ZSogX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAKIHN0YXRpYyBjaGFyICoKLXJlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQorcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNvbnN0IGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCiB7CiAgICAgY2hhciAqIG5vdF9kb25lX3JlYWRpbmcgPSAiIjsKICAgICBmZF9zZXQgc2VsZWN0c2V0OwpAQCAtMTA4Myw3ICsxMTQ1LDcgQEAKIAogCiBzdGF0aWMgY2hhciAqCi1jYWxsX3JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorY2FsbF9yZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbjsKICAgICBjaGFyICpwLCAqcTsKQEAgLTExMTQsNyArMTE3Niw3IEBACiAKICAgICAvKiBXZSBnb3QgYW4gRU9GLCByZXR1cm4gYSBlbXB0eSBzdHJpbmcuICovCiAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBwID0gUHlNZW1fTWFsbG9jKDEpOworICAgICAgICBwID0gUHlNZW1fUmF3TWFsbG9jKDEpOwogICAgICAgICBpZiAocCAhPSBOVUxMKQogICAgICAgICAgICAgKnAgPSAnXDAnOwogICAgICAgICBSRVNUT1JFX0xPQ0FMRShzYXZlZF9sb2NhbGUpCkBAIC0xMTQyLDcgKzEyMDQsNyBAQAogICAgIC8qIENvcHkgdGhlIG1hbGxvYydlZCBidWZmZXIgaW50byBhIFB5TWVtX01hbGxvYydlZCBvbmUgYW5kCiAgICAgICAgcmVsZWFzZSB0aGUgb3JpZ2luYWwuICovCiAgICAgcSA9IHA7Ci0gICAgcCA9IFB5TWVtX01hbGxvYyhuKzIpOworICAgIHAgPSBQeU1lbV9SYXdNYWxsb2MobisyKTsKICAgICBpZiAocCAhPSBOVUxMKSB7CiAgICAgICAgIHN0cm5jcHkocCwgcSwgbik7CiAgICAgICAgIHBbbl0gPSAnXG4nOwpAQCAtMTE2OCwxMiArMTIzMCwxMiBAQAogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAicmVhZGxpbmUiLAogICAgIGRvY19tb2R1bGUsCi0gICAgLTEsCisgICAgc2l6ZW9mKHJlYWRsaW5lc3RhdGUpLAogICAgIHJlYWRsaW5lX21ldGhvZHMsCiAgICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAorICAgIHJlYWRsaW5lX3RyYXZlcnNlLAorICAgIHJlYWRsaW5lX2NsZWFyLAorICAgIHJlYWRsaW5lX2ZyZWUKIH07CiAKIApAQCAtMTE4MSw2ICsxMjQzLDcgQEAKIFB5SW5pdF9yZWFkbGluZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIHJlYWRsaW5lc3RhdGUgKm1vZF9zdGF0ZTsKIAogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmIChzdHJuY21wKHJsX2xpYnJhcnlfdmVyc2lvbiwgbGliZWRpdF92ZXJzaW9uX3RhZywgc3RybGVuKGxpYmVkaXRfdmVyc2lvbl90YWcpKSA9PSAwKSB7CkBAIC0xMTk3LDcgKzEyNjAsOCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbW9kX3N0YXRlID0gKHJlYWRsaW5lc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUobSk7CiAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IGNhbGxfcmVhZGxpbmU7Ci0gICAgc2V0dXBfcmVhZGxpbmUoKTsKKyAgICBzZXR1cF9yZWFkbGluZShtb2Rfc3RhdGUpOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZXNvdXJjZS5jIGIvTW9kdWxlcy9yZXNvdXJjZS5jCmluZGV4IGIyOTRhOGMuLmMxMmNlMzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVzb3VyY2UuYworKysgYi9Nb2R1bGVzL3Jlc291cmNlLmMKQEAgLTEwNiw2ICsxMDYsNDQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50CitweTJybGltaXQoUHlPYmplY3QgKmN1cm9iaiwgUHlPYmplY3QgKm1heG9iaiwgc3RydWN0IHJsaW1pdCAqcmxfb3V0KQoreworI2lmICFkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZyhtYXhvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAvKiBUaGUgbGltaXRzIGFyZSBwcm9iYWJseSBiaWdnZXIgdGhhbiBhIGxvbmcgKi8KKyAgICBybF9vdXQtPnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZ0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZ0xvbmcobWF4b2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IHJsX291dC0+cmxpbV9jdXIgJiBSTElNX0lORklOSVRZOworICAgIHJsX291dC0+cmxpbV9tYXggPSBybF9vdXQtPnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKKyAgICByZXR1cm4gMDsKKworfQorCitzdGF0aWMgUHlPYmplY3QqCitybGltaXQycHkoc3RydWN0IHJsaW1pdCBybCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcmVzb3VyY2VfZ2V0cmxpbWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTEyNiwxNSArMTY0LDcgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQotICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworICAgIHJldHVybiBybGltaXQycHkocmwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTY2LDI1ICsxOTYsMTAgQEAKICAgICBjdXJvYmogPSBQeVR1cGxlX0dFVF9JVEVNKGxpbWl0cywgMCk7CiAgICAgbWF4b2JqID0gUHlUdXBsZV9HRVRfSVRFTShsaW1pdHMsIDEpOwogCi0jaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKLSAgICBybC5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKLSAgICBpZiAocmwucmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmIChweTJybGltaXQoY3Vyb2JqLCBtYXhvYmosICZybCkgPCAwKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nKG1heG9iaik7Ci0gICAgaWYgKHJsLnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSNlbHNlCi0gICAgLyogVGhlIGxpbWl0cyBhcmUgcHJvYmFibHkgYmlnZ2VyIHRoYW4gYSBsb25nICovCi0gICAgcmwucmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nTG9uZyhjdXJvYmopOwotICAgIGlmIChybC5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nTG9uZyhtYXhvYmopOwotICAgIGlmIChybC5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0jZW5kaWYKKyAgICB9CiAKLSAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fY3VyICYgUkxJTV9JTkZJTklUWTsKLSAgICBybC5ybGltX21heCA9IHJsLnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKICAgICBpZiAoc2V0cmxpbWl0KHJlc291cmNlLCAmcmwpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTIwNSw2ICsyMjAsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2lmZGVmIEhBVkVfUFJMSU1JVAorc3RhdGljIFB5T2JqZWN0ICoKK3Jlc291cmNlX3BybGltaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHN0cnVjdCBybGltaXQgb2xkX2xpbWl0LCBuZXdfbGltaXQ7CisgICAgaW50IHJlc291cmNlLCByZXR2YWw7CisgICAgcGlkX3QgcGlkOworICAgIFB5T2JqZWN0ICpjdXJvYmo9TlVMTCwgKm1heG9iaj1OVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIml8KE9PKTpwcmxpbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpZCwgJnJlc291cmNlLCAmY3Vyb2JqLCAmbWF4b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocmVzb3VyY2UgPCAwIHx8IHJlc291cmNlID49IFJMSU1fTkxJTUlUUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJlc291cmNlIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY3Vyb2JqICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHB5MnJsaW1pdChjdXJvYmosIG1heG9iaiwgJm5ld19saW1pdCkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBwcmxpbWl0KHBpZCwgcmVzb3VyY2UsICZuZXdfbGltaXQsICZvbGRfbGltaXQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dmFsID0gcHJsaW1pdChwaWQsIHJlc291cmNlLCBOVUxMLCAmb2xkX2xpbWl0KTsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50IGxpbWl0IGV4Y2VlZHMgbWF4aW11bSBsaW1pdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmxpbWl0MnB5KG9sZF9saW1pdCk7Cit9CisjZW5kaWYgLyogSEFWRV9QUkxJTUlUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXNvdXJjZV9nZXRwYWdlc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTIyOSw2ICsyODYsOSBAQAogcmVzb3VyY2VfbWV0aG9kc1tdID0gewogICAgIHsiZ2V0cnVzYWdlIiwgICAgcmVzb3VyY2VfZ2V0cnVzYWdlLCAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRybGltaXQiLCAgICByZXNvdXJjZV9nZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKKyNpZmRlZiBIQVZFX1BSTElNSVQKKyAgICB7InBybGltaXQiLCAgICAgIHJlc291cmNlX3BybGltaXQsICAgICBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRybGltaXQiLCAgICByZXNvdXJjZV9zZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldHBhZ2VzaXplIiwgIHJlc291cmNlX2dldHBhZ2VzaXplLCBNRVRIX05PQVJHU30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMjYzLDgwICszMjMsMTA1IEBACiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KICAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFB5RXhjX09TRXJyb3IpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFJVc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ydXNhZ2VfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFJVc2FnZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3J1c2FnZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBQeV9JTkNSRUYoJlN0cnVjdFJVc2FnZVR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3J1c2FnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCopICZTdHJ1Y3RSVXNhZ2VUeXBlKTsKIAogICAgIC8qIGluc2VydCBjb25zdGFudHMgKi8KICNpZmRlZiBSTElNSVRfQ1BVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9DUFUiLCBSTElNSVRfQ1BVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ1BVKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0ZTSVpFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9GU0laRSIsIFJMSU1JVF9GU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0ZTSVpFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0RBVEEiLCBSTElNSVRfREFUQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0RBVEEpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfU1RBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NUQUNLIiwgUkxJTUlUX1NUQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1RBQ0spOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfQ09SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQ09SRSIsIFJMSU1JVF9DT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ09SRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9OT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05PRklMRSIsIFJMSU1JVF9OT0ZJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX09GSUxFIiwgUkxJTUlUX09GSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfVk1FTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfVk1FTSIsIFJMSU1JVF9WTUVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfVk1FTSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9BUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQVMiLCBSTElNSVRfQVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9BUyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9SU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1JTUyIsIFJMSU1JVF9SU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SU1MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTlBST0MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05QUk9DIiwgUkxJTUlUX05QUk9DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBST0MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTUVNTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTUVNTE9DSyIsIFJMSU1JVF9NRU1MT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTUVNTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9TQlNJWkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NCU0laRSIsIFJMSU1JVF9TQlNJWkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TQlNJWkUpOwogI2VuZGlmCiAKKy8qIExpbnV4IHNwZWNpZmljICovCisjaWZkZWYgUkxJTUlUX01TR1FVRVVFCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX01TR1FVRVVFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05JQ0UKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTklDRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9SVFBSSU8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfUlRQUklPKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1JUVElNRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SVFRJTUUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfU0lHUEVORElORworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TSUdQRU5ESU5HKTsKKyNlbmRpZgorCisvKiB0YXJnZXQgKi8KICNpZmRlZiBSVVNBR0VfU0VMRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfU0VMRiIsIFJVU0FHRV9TRUxGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfU0VMRik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9DSElMRFJFTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfQ0hJTERSRU4iLCBSVVNBR0VfQ0hJTERSRU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9DSElMRFJFTik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9CT1RICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9CT1RIIiwgUlVTQUdFX0JPVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9CT1RIKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX1RIUkVBRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfVEhSRUFEIiwgUlVTQUdFX1RIUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX1RIUkVBRCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwppbmRleCA2MDNhMmI2Li42MjkxYTJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKQEAgLTQ3LDExICs0Nyw2IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8dXRpbHMuaD4KLSNlbmRpZgotCiAjaWZkZWYgTVNfV0lORE9XUwogIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KICMgIGluY2x1ZGUgPHdpbnNvY2suaD4KQEAgLTMwNCw5ICsyOTksOSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXQgPSBQeVR1cGxlX1BhY2soMywgaWZkbGlzdCwgb2ZkbGlzdCwgZWZkbGlzdCk7CiAKLSAgICAgICAgUHlfREVDUkVGKGlmZGxpc3QpOwotICAgICAgICBQeV9ERUNSRUYob2ZkbGlzdCk7Ci0gICAgICAgIFB5X0RFQ1JFRihlZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihpZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihvZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihlZmRsaXN0KTsKICAgICB9CiAKICAgZmluYWxseToKQEAgLTY4OSw2ICs2ODQsMTMgQEAKIAogc3RhdGljIFB5VHlwZU9iamVjdCBkZXZwb2xsX1R5cGU7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZXZwb2xsX2Vycl9jbG9zZWQodm9pZCkKK3sKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGRldnBvbGwgb2JqZWN0Iik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgZGV2cG9sbF9mbHVzaChkZXZwb2xsT2JqZWN0ICpzZWxmKQogewogICAgIGludCBzaXplLCBuOwpAQCAtNzI5LDYgKzczMSw5IEBACiAgICAgUHlPYmplY3QgKm87CiAgICAgaW50IGZkLCBldmVudHMgPSBQT0xMSU4gfCBQT0xMUFJJIHwgUE9MTE9VVDsKIAorICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGk6cmVnaXN0ZXIiLCAmbywgJmV2ZW50cykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNzkzLDYgKzc5OCw5IEBACiB7CiAgICAgaW50IGZkOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBmZCA9IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IoIG8gKTsKICAgICBpZiAoZmQgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODIyLDYgKzgzMCw5IEBACiAgICAgbG9uZyB0aW1lb3V0OwogICAgIFB5T2JqZWN0ICp2YWx1ZSwgKm51bTEsICpudW0yOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJwb2xsIiwgMCwgMSwgJnRvdXQpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTkwMCw2ICs5MTEsNjAgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludAorZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGludCBzYXZlX2Vycm5vID0gMDsKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA+PSAwKSB7CisgICAgICAgIGludCBmZCA9IHNlbGYtPmZkX2RldnBvbGw7CisgICAgICAgIHNlbGYtPmZkX2RldnBvbGwgPSAtMTsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoY2xvc2UoZmQpIDwgMCkKKyAgICAgICAgICAgIHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisgICAgcmV0dXJuIHNhdmVfZXJybm87Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfY2xvc2UoZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBlcnJubyA9IGRldnBvbGxfaW50ZXJuYWxfY2xvc2Uoc2VsZik7CisgICAgaWYgKGVycm5vIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGRldnBvbGxfY2xvc2VfZG9jLAorImNsb3NlKCkgLT4gTm9uZVxuXAorXG5cCitDbG9zZSB0aGUgZGV2cG9sbCBmaWxlIGRlc2NyaXB0b3IuIEZ1cnRoZXIgb3BlcmF0aW9ucyBvbiB0aGUgZGV2cG9sbFxuXAorb2JqZWN0IHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitkZXZwb2xsX2dldF9jbG9zZWQoZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIFB5X1JFVFVSTl9UUlVFOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOworfQorCitzdGF0aWMgUHlPYmplY3QqCitkZXZwb2xsX2ZpbGVubyhkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+ZmRfZGV2cG9sbCk7Cit9CisKK1B5RG9jX1NUUlZBUihkZXZwb2xsX2ZpbGVub19kb2MsCisiZmlsZW5vKCkgLT4gaW50XG5cCitcblwKK1JldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yLiIpOworCiBzdGF0aWMgUHlNZXRob2REZWYgZGV2cG9sbF9tZXRob2RzW10gPSB7CiAgICAgeyJyZWdpc3RlciIsICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9yZWdpc3RlciwKICAgICAgTUVUSF9WQVJBUkdTLCAgZGV2cG9sbF9yZWdpc3Rlcl9kb2N9LApAQCAtOTA5LDkgKzk3NCwxOSBAQAogICAgICBNRVRIX08sICAgICAgICBkZXZwb2xsX3VucmVnaXN0ZXJfZG9jfSwKICAgICB7InBvbGwiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX3BvbGwsCiAgICAgIE1FVEhfVkFSQVJHUywgIGRldnBvbGxfcG9sbF9kb2N9LAorICAgIHsiY2xvc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfY2xvc2UsICAgIE1FVEhfTk9BUkdTLAorICAgICBkZXZwb2xsX2Nsb3NlX2RvY30sCisgICAgeyJmaWxlbm8iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9maWxlbm8sICAgIE1FVEhfTk9BUkdTLAorICAgICBkZXZwb2xsX2ZpbGVub19kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCitzdGF0aWMgUHlHZXRTZXREZWYgZGV2cG9sbF9nZXRzZXRsaXN0W10gPSB7CisgICAgeyJjbG9zZWQiLCAoZ2V0dGVyKWRldnBvbGxfZ2V0X2Nsb3NlZCwgTlVMTCwKKyAgICAgIlRydWUgaWYgdGhlIGRldnBvbGwgb2JqZWN0IGlzIGNsb3NlZCJ9LAorICAgIHswfSwKK307CisKIHN0YXRpYyBkZXZwb2xsT2JqZWN0ICoKIG5ld0RldlBvbGxPYmplY3Qodm9pZCkKIHsKQEAgLTkyOSw3ICsxMDA0LDcgQEAKICAgICAqLwogICAgIGxpbWl0X3Jlc3VsdCA9IGdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmbGltaXQpOwogICAgIGlmIChsaW1pdF9yZXN1bHQgIT0gLTEpCi0gICAgICAgIGZkX2RldnBvbGwgPSBvcGVuKCIvZGV2L3BvbGwiLCBPX1JEV1IpOworICAgICAgICBmZF9kZXZwb2xsID0gX1B5X29wZW4oIi9kZXYvcG9sbCIsIE9fUkRXUik7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChsaW1pdF9yZXN1bHQgPT0gLTEpIHsKQEAgLTk2NSwxMiArMTA0MCw4IEBACiBzdGF0aWMgdm9pZAogZGV2cG9sbF9kZWFsbG9jKGRldnBvbGxPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGNsb3NlKHNlbGYtPmZkX2RldnBvbGwpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KKyAgICAodm9pZClkZXZwb2xsX2ludGVybmFsX2Nsb3NlKHNlbGYpOwogICAgIFB5TWVtX0RFTChzZWxmLT5mZHMpOwotCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC0xMDA2LDYgKzEwNzcsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBkZXZwb2xsX21ldGhvZHMsICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGRldnBvbGxfZ2V0c2V0bGlzdCwgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KIH07CiAjZW5kaWYgIC8qIEhBVkVfU1lTX0RFVlBPTExfSCAqLwogCkBAIC0xMDg5LDcgKzExNjIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHB5ZXBvbGxfZXJyX2Nsb3NlZCh2b2lkKQogewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZXBvbGwgZmQiKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGVwb2xsIG9iamVjdCIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMTIxLDYgKzExOTQsNyBAQAogICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgSEFWRV9FUE9MTF9DUkVBVEUxCisgICAgICAgIGZsYWdzIHw9IEVQT0xMX0NMT0VYRUM7CiAgICAgICAgIGlmIChmbGFncykKICAgICAgICAgICAgIHNlbGYtPmVwZmQgPSBlcG9sbF9jcmVhdGUxKGZsYWdzKTsKICAgICAgICAgZWxzZQpAQCAtMTEzNiw2ICsxMjEwLDE0IEBACiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisjaWZuZGVmIEhBVkVfRVBPTExfQ1JFQVRFMQorICAgIGlmIChmZCA9PSAtMSAmJiBfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmVwZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKQEAgLTEzNzcsNyArMTQ1OSw2IEBACiAKICAgICBldnMgPSBQeU1lbV9OZXcoc3RydWN0IGVwb2xsX2V2ZW50LCBtYXhldmVudHMpOwogICAgIGlmIChldnMgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE0MTYsNiArMTQ5NywyNCBAQAogaW4gc2Vjb25kcyAoYXMgZmxvYXQpLiAtMSBtYWtlcyBwb2xsIHdhaXQgaW5kZWZpbml0ZWx5LlxuXAogVXAgdG8gbWF4ZXZlbnRzIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorcHllcG9sbF9lbnRlcihweUVwb2xsX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaWYgKHNlbGYtPmVwZmQgPCAwKQorICAgICAgICByZXR1cm4gcHllcG9sbF9lcnJfY2xvc2VkKCk7CisKKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWVwb2xsX2V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKworICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX2Nsb3NlLCBOVUxMKTsKK30KKwogc3RhdGljIFB5TWV0aG9kRGVmIHB5ZXBvbGxfbWV0aG9kc1tdID0gewogICAgIHsiZnJvbWZkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfZnJvbWZkLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0NMQVNTLCBweWVwb2xsX2Zyb21mZF9kb2N9LApAQCAtMTQzMSw2ICsxNTMwLDEwIEBACiAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgcHllcG9sbF91bnJlZ2lzdGVyX2RvY30sCiAgICAgeyJwb2xsIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9wb2xsLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgIHB5ZXBvbGxfcG9sbF9kb2N9LAorICAgIHsiX19lbnRlcl9fIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2VudGVyLCAgICAgTUVUSF9OT0FSR1MsCisgICAgIE5VTEx9LAorICAgIHsiX19leGl0X18iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfZXhpdCwgICAgIE1FVEhfVkFSQVJHUywKKyAgICAgTlVMTH0sCiAgICAge05VTEwsICAgICAgTlVMTH0sCiB9OwogCkBAIC0xNzU5LDcgKzE4NjIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGtxdWV1ZV9xdWV1ZV9lcnJfY2xvc2VkKHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBrcXVldWUgZmQiKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGtxdWV1ZSBvYmplY3QiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTgwMSwxMyArMTkwNCwxOSBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzZWxmLT5rcWZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgoga3F1ZXVlX3F1ZXVlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLQogICAgIGlmICgoYXJncyAhPSBOVUxMICYmIFB5T2JqZWN0X1NpemUoYXJncykpIHx8CiAgICAgICAgICAgICAgICAgICAgIChrd2RzICE9IE5VTEwgJiYgUHlPYmplY3RfU2l6ZShrd2RzKSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0yMTc5LDcgKzIyODgsNyBAQAogI3VuZGVmIFBJUEVfQlVGCiAjZGVmaW5lIFBJUEVfQlVGIDUxMgogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJUEVfQlVGIiwgUElQRV9CVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJUEVfQlVGKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX1BPTEwpICYmICFkZWZpbmVkKEhBVkVfQlJPS0VOX1BPTEwpCkBAIC0yMTk0LDI3ICsyMzAzLDI3IEBACiAjZW5kaWYKICAgICAgICAgaWYgKFB5VHlwZV9SZWFkeSgmcG9sbF9UeXBlKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExJTiIsIFBPTExJTik7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUFJJIiwgUE9MTFBSSSk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMT1VUIiwgUE9MTE9VVCk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMRVJSIiwgUE9MTEVSUik7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMSFVQIiwgUE9MTEhVUCk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMTlZBTCIsIFBPTExOVkFMKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTElOKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFBSSSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExPVVQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMRVJSKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTEhVUCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExOVkFMKTsKIAogI2lmZGVmIFBPTExSRE5PUk0KLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExSRE5PUk0iLCBQT0xMUkROT1JNKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFJETk9STSk7CiAjZW5kaWYKICNpZmRlZiBQT0xMUkRCQU5ECi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUkRCQU5EIiwgUE9MTFJEQkFORCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExSREJBTkQpOwogI2VuZGlmCiAjaWZkZWYgUE9MTFdSTk9STQotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFdSTk9STSIsIFBPTExXUk5PUk0pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMV1JOT1JNKTsKICNlbmRpZgogI2lmZGVmIFBPTExXUkJBTkQKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExXUkJBTkQiLCBQT0xMV1JCQU5EKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFdSQkFORCk7CiAjZW5kaWYKICNpZmRlZiBQT0xMTVNHCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMTVNHIiwgUE9MTE1TRyk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExNU0cpOwogI2VuZGlmCiAgICAgfQogI2VuZGlmIC8qIEhBVkVfUE9MTCAqLwpAQCAtMjIzMiwyNSArMjM0MSwyNSBAQAogICAgIFB5X0lOQ1JFRigmcHlFcG9sbF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVwb2xsIiwgKFB5T2JqZWN0ICopICZweUVwb2xsX1R5cGUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMSU4iLCBFUE9MTElOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExPVVQiLCBFUE9MTE9VVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUFJJIiwgRVBPTExQUkkpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEVSUiIsIEVQT0xMRVJSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExIVVAiLCBFUE9MTEhVUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMRVQiLCBFUE9MTEVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTElOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExQUkkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEhVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExFVCk7CiAjaWZkZWYgRVBPTExPTkVTSE9UCiAgICAgLyogS2VybmVsIDIuNi4yKyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE9ORVNIT1QiLCBFUE9MTE9ORVNIT1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMT05FU0hPVCk7CiAjZW5kaWYKICAgICAvKiBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExfUkRIVVAiLCBFUE9MTFJESFVQKTsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExSRE5PUk0iLCBFUE9MTFJETk9STSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUkRCQU5EIiwgRVBPTExSREJBTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFdSTk9STSIsIEVQT0xMV1JOT1JNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExXUkJBTkQiLCBFUE9MTFdSQkFORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMTVNHIiwgRVBPTExNU0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUkROT1JNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFJEQkFORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExXUk5PUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMV1JCQU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE1TRyk7CiAKICNpZmRlZiBFUE9MTF9DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMX0NMT0VYRUMiLCBFUE9MTF9DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTF9DTE9FWEVDKTsKICNlbmRpZgogI2VuZGlmIC8qIEhBVkVfRVBPTEwgKi8KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGExbW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTFtb2R1bGUuYwppbmRleCBkMGYzMThkLi5iNDRmZTE4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTFtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTFtb2R1bGUuYwpAQCAtOTIsMTAgKzkyLDYgQEAKICAgICAgKHkpWzRdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbNV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgICBcCiAgICAgICh5KVs2XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbN10gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KIAotI2lmbmRlZiBNSU4KLSAgICNkZWZpbmUgTUlOKHgsIHkpICggKCh4KTwoeSkpPyh4KTooeSkgKQotI2VuZGlmCi0KIAogLyogU0hBMSBtYWNyb3MgKi8KIApAQCAtMjIwLDkgKzIxNiw5IEBACiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IFNIQTFfQkxPQ0tTSVpFOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBTSEExX0JMT0NLU0laRTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgbiA9IE1JTihpbmxlbiwgKFB5X3NzaXplX3QpKFNIQTFfQkxPQ0tTSVpFIC0gc2hhMS0+Y3VybGVuKSk7CisgICAgICAgICAgIG4gPSBQeV9NSU4oaW5sZW4sIChQeV9zc2l6ZV90KShTSEExX0JMT0NLU0laRSAtIHNoYTEtPmN1cmxlbikpOwogICAgICAgICAgICBtZW1jcHkoc2hhMS0+YnVmICsgc2hhMS0+Y3VybGVuLCBpbiwgKHNpemVfdCluKTsKLSAgICAgICAgICAgc2hhMS0+Y3VybGVuICAgKz0gbjsKKyAgICAgICAgICAgc2hhMS0+Y3VybGVuICAgKz0gKFNIQTFfSU5UMzIpbjsKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gbjsKICAgICAgICAgICAgaW5sZW4gICAgICAgICAgLT0gbjsKICAgICAgICAgICAgaWYgKHNoYTEtPmN1cmxlbiA9PSBTSEExX0JMT0NLU0laRSkgewpAQCAtNDE1LDcgKzQxMSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogU0hBMV9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEExIiwgNCk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMSIsIDQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTQ4LDggKzU0NCwxNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc2hhMSh2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMXR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTF0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGExbW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9zaGExbW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMXR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMVR5cGUiLCAoUHlPYmplY3QgKikmU0hBMXR5cGUpOworICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKaW5kZXggOWY2YjQxNi4uYjA1YmZjMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCkBAIC0yMSwxMyArMjEsNiBAQAogI2luY2x1ZGUgImhhc2hsaWIuaCIKIAogCi0vKiBFbmRpYW5uZXNzIHRlc3RpbmcgYW5kIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFRlc3RFbmRpYW5uZXNzKHZhcmlhYmxlKSB7aW50IGk9MTsgdmFyaWFibGU9UENUX0JJR19FTkRJQU47XAotICAgICAgICBpZiAoKigoY2hhciopJmkpPT0xKSB2YXJpYWJsZT1QQ1RfTElUVExFX0VORElBTjt9Ci0KLSNkZWZpbmUgUENUX0xJVFRMRV9FTkRJQU4gMQotI2RlZmluZSBQQ1RfQklHX0VORElBTiAwCi0KIC8qIFNvbWUgdXNlZnVsIHR5cGVzICovCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBTSEFfQllURTsKQEAgLTUwLDcgKzQzLDYgQEAKICAgICBTSEFfSU5UMzIgZGlnZXN0WzhdOyAgICAgICAgICAgICAgICAvKiBNZXNzYWdlIGRpZ2VzdCAqLwogICAgIFNIQV9JTlQzMiBjb3VudF9sbywgY291bnRfaGk7ICAgICAgIC8qIDY0LWJpdCBiaXQgY291bnQgKi8KICAgICBTSEFfQllURSBkYXRhW1NIQV9CTE9DS1NJWkVdOyAgICAgICAvKiBTSEEgZGF0YSBidWZmZXIgKi8KLSAgICBpbnQgRW5kaWFubmVzczsKICAgICBpbnQgbG9jYWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bnByb2Nlc3NlZCBhbW91bnQgaW4gZGF0YSAqLwogICAgIGludCBkaWdlc3RzaXplOwogfSBTSEFvYmplY3Q7CkBAIC01OCwxMyArNTAsMTEgQEAKIC8qIFdoZW4gcnVuIG9uIGEgbGl0dGxlLWVuZGlhbiBDUFUgd2UgbmVlZCB0byBwZXJmb3JtIGJ5dGUgcmV2ZXJzYWwgb24gYW4KICAgIGFycmF5IG9mIGxvbmd3b3Jkcy4gKi8KIAotc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDMyICpidWZmZXIsIGludCBieXRlQ291bnQsIGludCBFbmRpYW5uZXNzKQorI2lmIFBZX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQzMiAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50KQogewogICAgIFNIQV9JTlQzMiB2YWx1ZTsKIAotICAgIGlmICggRW5kaWFubmVzcyA9PSBQQ1RfQklHX0VORElBTiApCi0gICAgICAgIHJldHVybjsKLQogICAgIGJ5dGVDb3VudCAvPSBzaXplb2YoKmJ1ZmZlcik7CiAgICAgd2hpbGUgKGJ5dGVDb3VudC0tKSB7CiAgICAgICAgIHZhbHVlID0gKmJ1ZmZlcjsKQEAgLTczLDEwICs2MywxMCBAQAogICAgICAgICAqYnVmZmVyKysgPSAoIHZhbHVlIDw8IDE2ICkgfCAoIHZhbHVlID4+IDE2ICk7CiAgICAgfQogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIFNIQWNvcHkoU0hBb2JqZWN0ICpzcmMsIFNIQW9iamVjdCAqZGVzdCkKIHsKLSAgICBkZXN0LT5FbmRpYW5uZXNzID0gc3JjLT5FbmRpYW5uZXNzOwogICAgIGRlc3QtPmxvY2FsID0gc3JjLT5sb2NhbDsKICAgICBkZXN0LT5kaWdlc3RzaXplID0gc3JjLT5kaWdlc3RzaXplOwogICAgIGRlc3QtPmNvdW50X2xvID0gc3JjLT5jb3VudF9sbzsKQEAgLTEzMSw3ICsxMjEsOSBAQAogICAgICAgICBTSEFfSU5UMzIgU1s4XSwgV1s2NF0sIHQwLCB0MTsKIAogICAgIG1lbWNweShXLCBzaGFfaW5mby0+ZGF0YSwgc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSk7Ci0gICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpLCBzaGFfaW5mby0+RW5kaWFubmVzcyk7CisjaWYgUFlfTElUVExFX0VORElBTgorICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSk7CisjZW5kaWYKIAogICAgIGZvciAoaSA9IDE2OyBpIDwgNjQ7ICsraSkgewogICAgICAgICAgICAgICAgIFdbaV0gPSBHYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBHYW1tYTAoV1tpIC0gMTVdKSArIFdbaSAtIDE2XTsKQEAgLTIyOCw3ICsyMjAsNiBAQAogc3RhdGljIHZvaWQKIHNoYV9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IDB4NkEwOUU2NjdMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSAweEJCNjdBRTg1TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gMHgzQzZFRjM3Mkw7CkBAIC0yNDYsNyArMjM3LDYgQEAKIHN0YXRpYyB2b2lkCiBzaGEyMjRfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSAweGMxMDU5ZWQ4TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gMHgzNjdjZDUwN0w7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IDB4MzA3MGRkMTdMOwpAQCAtMjg0LDcgKzI3NCw3IEBACiAgICAgICAgIG1lbWNweSgoKFNIQV9CWVRFICopIHNoYV9pbmZvLT5kYXRhKSArIHNoYV9pbmZvLT5sb2NhbCwgYnVmZmVyLCBpKTsKICAgICAgICAgY291bnQgLT0gaTsKICAgICAgICAgYnVmZmVyICs9IGk7Ci0gICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSBpOworICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gKGludClpOwogICAgICAgICBpZiAoc2hhX2luZm8tPmxvY2FsID09IFNIQV9CTE9DS1NJWkUpIHsKICAgICAgICAgICAgIHNoYV90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgICAgICB9CkBAIC0yOTksNyArMjg5LDcgQEAKICAgICAgICAgc2hhX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgfQogICAgIG1lbWNweShzaGFfaW5mby0+ZGF0YSwgYnVmZmVyLCBjb3VudCk7Ci0gICAgc2hhX2luZm8tPmxvY2FsID0gY291bnQ7CisgICAgc2hhX2luZm8tPmxvY2FsID0gKGludCljb3VudDsKIH0KIAogLyogZmluaXNoIGNvbXB1dGluZyB0aGUgU0hBIGRpZ2VzdCAqLwpAQCAtNTExLDkgKzUwMSw5IEBACiBTSEEyNTZfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7CiAgICAgaWYgKCgoU0hBb2JqZWN0ICopc2VsZiktPmRpZ2VzdHNpemUgPT0gMzIpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTI1NiIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGEyNTYiLCA2KTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTIyNCIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGEyMjQiLCA2KTsKIH0KIAogc3RhdGljIFB5R2V0U2V0RGVmIFNIQV9nZXRzZXRlcnNbXSA9IHsKQEAgLTcxNiwxMSArNzA2LDIzIEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGEyNTYodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJlNIQTIyNHR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTIyNHR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfVFlQRSgmU0hBMjU2dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMjU2dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhMjU2bW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9zaGEyNTZtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEyMjR0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTIyNFR5cGUiLCAoUHlPYmplY3QgKikmU0hBMjI0dHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEyNTZ0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTI1NlR5cGUiLCAoUHlPYmplY3QgKikmU0hBMjU2dHlwZSk7CisgICAgcmV0dXJuIG07CisKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCmluZGV4IDU1MzZmZDUuLjQ3YzU3ZTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYwpAQCAtMjIsMTMgKzIyLDYgQEAKIAogI2lmZGVmIFBZX0xPTkdfTE9ORyAvKiBJZiBubyBQWV9MT05HX0xPTkcsIGRvbid0IGNvbXBpbGUgYW55dGhpbmchICovCiAKLS8qIEVuZGlhbm5lc3MgdGVzdGluZyBhbmQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgVGVzdEVuZGlhbm5lc3ModmFyaWFibGUpIHtpbnQgaT0xOyB2YXJpYWJsZT1QQ1RfQklHX0VORElBTjtcCi0gICAgICAgIGlmICgqKChjaGFyKikmaSk9PTEpIHZhcmlhYmxlPVBDVF9MSVRUTEVfRU5ESUFOO30KLQotI2RlZmluZSBQQ1RfTElUVExFX0VORElBTiAxCi0jZGVmaW5lIFBDVF9CSUdfRU5ESUFOIDAKLQogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNIQV9CWVRFOwpAQCAtNTIsNyArNDUsNiBAQAogICAgIFNIQV9JTlQ2NCBkaWdlc3RbOF07ICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZGlnZXN0ICovCiAgICAgU0hBX0lOVDMyIGNvdW50X2xvLCBjb3VudF9oaTsgICAgICAgLyogNjQtYml0IGJpdCBjb3VudCAqLwogICAgIFNIQV9CWVRFIGRhdGFbU0hBX0JMT0NLU0laRV07ICAgICAgIC8qIFNIQSBkYXRhIGJ1ZmZlciAqLwotICAgIGludCBFbmRpYW5uZXNzOwogICAgIGludCBsb2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVucHJvY2Vzc2VkIGFtb3VudCBpbiBkYXRhICovCiAgICAgaW50IGRpZ2VzdHNpemU7CiB9IFNIQW9iamVjdDsKQEAgLTYwLDEzICs1MiwxMSBAQAogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCi1zdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UNjQgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCwgaW50IEVuZGlhbm5lc3MpCisjaWYgUFlfTElUVExFX0VORElBTgorc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDY0ICpidWZmZXIsIGludCBieXRlQ291bnQpCiB7CiAgICAgU0hBX0lOVDY0IHZhbHVlOwogCi0gICAgaWYgKCBFbmRpYW5uZXNzID09IFBDVF9CSUdfRU5ESUFOICkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYnl0ZUNvdW50IC89IHNpemVvZigqYnVmZmVyKTsKICAgICB3aGlsZSAoYnl0ZUNvdW50LS0pIHsKICAgICAgICAgdmFsdWUgPSAqYnVmZmVyOwpAQCAtODMsMTAgKzczLDEwIEBACiAgICAgICAgICAgICAgICAgYnVmZmVyKys7CiAgICAgfQogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIFNIQWNvcHkoU0hBb2JqZWN0ICpzcmMsIFNIQW9iamVjdCAqZGVzdCkKIHsKLSAgICBkZXN0LT5FbmRpYW5uZXNzID0gc3JjLT5FbmRpYW5uZXNzOwogICAgIGRlc3QtPmxvY2FsID0gc3JjLT5sb2NhbDsKICAgICBkZXN0LT5kaWdlc3RzaXplID0gc3JjLT5kaWdlc3RzaXplOwogICAgIGRlc3QtPmNvdW50X2xvID0gc3JjLT5jb3VudF9sbzsKQEAgLTE0MSw3ICsxMzEsOSBAQAogICAgIFNIQV9JTlQ2NCBTWzhdLCBXWzgwXSwgdDAsIHQxOwogCiAgICAgbWVtY3B5KFcsIHNoYV9pbmZvLT5kYXRhLCBzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKLSAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSksIHNoYV9pbmZvLT5FbmRpYW5uZXNzKTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKKyNlbmRpZgogCiAgICAgZm9yIChpID0gMTY7IGkgPCA4MDsgKytpKSB7CiAgICAgICAgICAgICAgICAgV1tpXSA9IEdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIEdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdOwpAQCAtMjU0LDcgKzI0Niw2IEBACiBzdGF0aWMgdm9pZAogc2hhNTEyX2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gUHlfVUxMKDB4NmEwOWU2NjdmM2JjYzkwOCk7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IFB5X1VMTCgweGJiNjdhZTg1ODRjYWE3M2IpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSBQeV9VTEwoMHgzYzZlZjM3MmZlOTRmODJiKTsKQEAgLTI3Miw3ICsyNjMsNiBAQAogc3RhdGljIHZvaWQKIHNoYTM4NF9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IFB5X1VMTCgweGNiYmI5ZDVkYzEwNTllZDgpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSBQeV9VTEwoMHg2MjlhMjkyYTM2N2NkNTA3KTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gUHlfVUxMKDB4OTE1OTAxNWEzMDcwZGQxNyk7CkBAIC0zMTAsNyArMzAwLDcgQEAKICAgICAgICAgbWVtY3B5KCgoU0hBX0JZVEUgKikgc2hhX2luZm8tPmRhdGEpICsgc2hhX2luZm8tPmxvY2FsLCBidWZmZXIsIGkpOwogICAgICAgICBjb3VudCAtPSBpOwogICAgICAgICBidWZmZXIgKz0gaTsKLSAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IGk7CisgICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSAoaW50KWk7CiAgICAgICAgIGlmIChzaGFfaW5mby0+bG9jYWwgPT0gU0hBX0JMT0NLU0laRSkgewogICAgICAgICAgICAgc2hhNTEyX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgICAgIH0KQEAgLTMyNSw3ICszMTUsNyBAQAogICAgICAgICBzaGE1MTJfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICB9CiAgICAgbWVtY3B5KHNoYV9pbmZvLT5kYXRhLCBidWZmZXIsIGNvdW50KTsKLSAgICBzaGFfaW5mby0+bG9jYWwgPSBjb3VudDsKKyAgICBzaGFfaW5mby0+bG9jYWwgPSAoaW50KWNvdW50OwogfQogCiAvKiBmaW5pc2ggY29tcHV0aW5nIHRoZSBTSEEgZGlnZXN0ICovCkBAIC01NzcsOSArNTY3LDkgQEAKIFNIQTUxMl9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgICBpZiAoKChTSEFvYmplY3QgKilzZWxmKS0+ZGlnZXN0c2l6ZSA9PSA2NCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBNTEyIiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTUxMiIsIDYpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMzg0IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTM4NCIsIDYpOwogfQogCiBzdGF0aWMgUHlHZXRTZXREZWYgU0hBX2dldHNldGVyc1tdID0gewpAQCAtNzgyLDEzICs3NzIsMjQgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NoYTUxMih2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMzg0dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMzg0dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9UWVBFKCZTSEE1MTJ0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEE1MTJ0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGE1MTJtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTUxMm1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTM4NHR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMzg0VHlwZSIsIChQeU9iamVjdCAqKSZTSEEzODR0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTUxMnR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBNTEyVHlwZSIsIChQeU9iamVjdCAqKSZTSEE1MTJ0eXBlKTsKKyAgICByZXR1cm4gbTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwppbmRleCBmYmUxYmI3Li45YTBlOGUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKQEAgLTksNyArOSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5kb3dzLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgogI2lmZGVmIEhBVkVfUFJPQ0VTU19ICiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2VuZGlmCkBAIC0zNywxMSArMzcsNiBAQAogI2RlZmluZSBTSUdfRVJSICgoUHlPU19zaWdoYW5kbGVyX3QpKC0xKSkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE5TSUcgMTIKLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZW5kaWYKLQogI2lmbmRlZiBOU0lHCiAjIGlmIGRlZmluZWQoX05TSUcpCiAjICBkZWZpbmUgTlNJRyBfTlNJRyAgICAgICAgICAgIC8qIEZvciBCU0QvU3lzViAqLwpAQCAtNzgsMTAgKzczLDYgQEAKICAgIGEgd29ya2luZyBpbXBsZW1lbnRhdGlvbiB0aGF0IHdvcmtzIGluIGFsbCB0aHJlZSBjYXNlcyAtLSB0aGUKICAgIGhhbmRsZXIgaWdub3JlcyBzaWduYWxzIGlmIGdldHBpZCgpIGlzbid0IHRoZSBzYW1lIGFzIGluIHRoZSBtYWluCiAgICB0aHJlYWQuICBYWFggVGhpcyBpcyBhIGhhY2suCi0KLSAgIEdOVSBwdGggaXMgYSB1c2VyLXNwYWNlIHRocmVhZGluZyBsaWJyYXJ5LCBhbmQgYXMgc3VjaCwgYWxsIHRocmVhZHMKLSAgIHJ1biB3aXRoaW4gdGhlIHNhbWUgcHJvY2Vzcy4gSW4gdGhpcyBjYXNlLCBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcKLSAgIHRocmVhZCBpcyBub3QgdGhlIG1haW5fdGhyZWFkLCBzZW5kIHRoZSBzaWduYWwgdG8gdGhlIG1haW5fdGhyZWFkLgogKi8KIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0xODAsMTUgKzE3MSwzMSBAQAogICAgIHJldHVybiBQeUVycl9DaGVja1NpZ25hbHMoKTsKIH0KIAorc3RhdGljIGludAorcmVwb3J0X3dha2V1cF9lcnJvcih2b2lkICpkYXRhKQoreworICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CisgICAgZXJybm8gPSAoaW50KSAoUHlfaW50cHRyX3QpIGRhdGE7CisgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJFeGNlcHRpb24gaWdub3JlZCB3aGVuIHRyeWluZyB0byB3cml0ZSB0byB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwgd2FrZXVwIGZkOlxuIik7CisgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgIGVycm5vID0gc2F2ZV9lcnJubzsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQKIHRyaXBfc2lnbmFsKGludCBzaWdfbnVtKQogewogICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKyAgICBpbnQgcmMgPSAwOwogCiAgICAgSGFuZGxlcnNbc2lnX251bV0udHJpcHBlZCA9IDE7CiAgICAgaWYgKHdha2V1cF9mZCAhPSAtMSkgewogICAgICAgICBieXRlID0gKHVuc2lnbmVkIGNoYXIpc2lnX251bTsKLSAgICAgICAgd3JpdGUod2FrZXVwX2ZkLCAmYnl0ZSwgMSk7CisgICAgICAgIHdoaWxlICgocmMgPSB3cml0ZSh3YWtldXBfZmQsICZieXRlLCAxKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgICBpZiAocmMgPT0gLTEpCisgICAgICAgICAgICBQeV9BZGRQZW5kaW5nQ2FsbChyZXBvcnRfd2FrZXVwX2Vycm9yLCAodm9pZCAqKSAoUHlfaW50cHRyX3QpIGVycm5vKTsKICAgICB9CiAgICAgaWYgKGlzX3RyaXBwZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMywxMyArMjEwLDYgQEAKIHsKICAgICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOwogCi0jaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChXSVRIX1BUSCkKLSAgICBpZiAoUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpICE9IG1haW5fdGhyZWFkKSB7Ci0gICAgICAgIHB0aF9yYWlzZSgqKHB0aF90ICopIG1haW5fdGhyZWFkLCBzaWdfbnVtKTsKLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgLyogU2VlIE5PVEVTIHNlY3Rpb24gYWJvdmUgKi8KICAgICBpZiAoZ2V0cGlkKCkgPT0gbWFpbl9waWQpCkBAIC0yMzEsNyArMjMxLDYgQEAKICAgICAgKiBtYWtlcyB0aGlzIHRydWUuICBTZWUgYWxzbyBpc3N1ZTgzNTQuICovCiAgICAgUHlPU19zZXRzaWcoc2lnX251bSwgc2lnbmFsX2hhbmRsZXIpOwogI2VuZGlmCi0gICAgfQogCiAgICAgLyogSXNzdWUgIzEwMzExOiBhc3luY2hyb25vdXNseSBleGVjdXRpbmcgc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBub3QKICAgICAgICBtdXRhdGUgZXJybm8gdW5kZXIgdGhlIGZlZXQgb2YgdW5zdXNwZWN0aW5nIEMgY29kZS4gKi8KQEAgLTk4Myw5ICs5ODIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICNpZiBkZWZpbmVkKEhBVkVfU0lHV0FJVElORk8pIHx8IGRlZmluZWQoSEFWRV9TSUdUSU1FRFdBSVQpCi0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU2lnaW5mb1R5cGUsICZzdHJ1Y3Rfc2lnaW5mb19kZXNjKTsKLQorICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTaWdpbmZvVHlwZSwgJnN0cnVjdF9zaWdpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlNpZ2luZm9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInN0cnVjdF9zaWdpbmZvIiwgKFB5T2JqZWN0KikgJlNpZ2luZm9UeXBlKTsKICAgICBpbml0aWFsaXplZCA9IDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwppbmRleCAzYmRkYWE1Li41YmE3ZjRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogTW9kdWxlIGludGVyZmFjZToKIAotLSBzb2NrZXQuZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIHNvY2tldCBzcGVjaWZpYyBlcnJvcnMKKy0gc29ja2V0LmVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBzb2NrZXQgc3BlY2lmaWMgZXJyb3JzLCBhbGlhcyBmb3IgT1NFcnJvcgogLSBzb2NrZXQuZ2FpZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIGdldGFkZHJpbmZvL2dldG5hbWVpbmZvIGVycm9ycywKICAgICBhIHN1YmNsYXNzIG9mIHNvY2tldC5lcnJvcgogLSBzb2NrZXQuaGVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBnZXRob3N0YnkqIGVycm9ycywKQEAgLTk1LDE4ICs5NSwxNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotCiAvKiBTb2NrZXQgb2JqZWN0IGRvY3VtZW50YXRpb24gKi8KIFB5RG9jX1NUUlZBUihzb2NrX2RvYywKLSJzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkgLT4gc29ja2V0IG9iamVjdFxuXAorInNvY2tldChmYW1pbHk9QUZfSU5FVCwgdHlwZT1TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmlsZW5vPU5vbmUpIC0+IHNvY2tldCBvYmplY3RcblwKIFxuXAogT3BlbiBhIHNvY2tldCBvZiB0aGUgZ2l2ZW4gdHlwZS4gIFRoZSBmYW1pbHkgYXJndW1lbnQgc3BlY2lmaWVzIHRoZVxuXAogYWRkcmVzcyBmYW1pbHk7IGl0IGRlZmF1bHRzIHRvIEFGX0lORVQuICBUaGUgdHlwZSBhcmd1bWVudCBzcGVjaWZpZXNcblwKIHdoZXRoZXIgdGhpcyBpcyBhIHN0cmVhbSAoU09DS19TVFJFQU0sIHRoaXMgaXMgdGhlIGRlZmF1bHQpXG5cCiBvciBkYXRhZ3JhbSAoU09DS19ER1JBTSkgc29ja2V0LiAgVGhlIHByb3RvY29sIGFyZ3VtZW50IGRlZmF1bHRzIHRvIDAsXG5cCiBzcGVjaWZ5aW5nIHRoZSBkZWZhdWx0IHByb3RvY29sLiAgS2V5d29yZCBhcmd1bWVudHMgYXJlIGFjY2VwdGVkLlxuXAorVGhlIHNvY2tldCBpcyBjcmVhdGVkIGFzIG5vbi1pbmhlcml0YWJsZS5cblwKIFxuXAogQSBzb2NrZXQgb2JqZWN0IHJlcHJlc2VudHMgb25lIGVuZHBvaW50IG9mIGEgbmV0d29yayBjb25uZWN0aW9uLlxuXAogXG5cCkBAIC0xMTcsNyArMTE1LDcgQEAKIGNsb3NlKCkgLS0gY2xvc2UgdGhlIHNvY2tldFxuXAogY29ubmVjdChhZGRyKSAtLSBjb25uZWN0IHRoZSBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzc1xuXAogY29ubmVjdF9leChhZGRyKSAtLSBjb25uZWN0LCByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIGFuIGV4Y2VwdGlvblxuXAotX2R1cCgpIC0tIHJldHVybiBhIG5ldyBzb2NrZXQgZmQgZHVwbGljYXRlZCBmcm9tIGZpbGVubygpXG5cCitkdXAoKSAtLSByZXR1cm4gYSBuZXcgc29ja2V0IGZkIGR1cGxpY2F0ZWQgZnJvbSBmaWxlbm8oKVxuXAogZmlsZW5vKCkgLS0gcmV0dXJuIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yXG5cCiBnZXRwZWVybmFtZSgpIC0tIHJldHVybiByZW1vdGUgYWRkcmVzcyBbKl1cblwKIGdldHNvY2tuYW1lKCkgLS0gcmV0dXJuIGxvY2FsIGFkZHJlc3NcblwKQEAgLTIyMywxMyArMjIxLDYgQEAKICNlbmRpZgogCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotIyBkZWZpbmUgIElOQ0xfRE9TCi0jIGRlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSMgZGVmaW5lICBJTkNMX05PUE1BUEkKLSMgaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19zZ2kpICYmIF9DT01QSUxFUl9WRVJTSU9OPjcwMCAmJiAhX1NHSUFQSQogLyogbWFrZSBzdXJlIHRoYXQgdGhlIHJlZW50cmFudCAoZ2V0aG9zdGJ5YWRkcl9yIGV0YykKICAgIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgY29ycmVjdGx5IGlmIGNvbXBpbGluZyB3aXRoCkBAIC0yODYsMTIgKzI3Nyw3IEBACiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogCiAvKiBIZWFkZXJzIG5lZWRlZCBmb3IgaW5ldF9udG9hKCkgYW5kIGluZXRfYWRkcigpICovCi0jIGlmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19WQUNQUCkKLSMgIGluY2x1ZGUgPG5ldGRiLmg+Ci10eXBlZGVmIHNpemVfdCBzb2NrbGVuX3Q7Ci0jIGVsc2UKICMgICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSMgZW5kaWYKIAogIyAgaW5jbHVkZSA8ZmNudGwuaD4KIApAQCAtMzcxLDIyICszNTcsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi0vKiBPbiBXaW5kb3dzIGEgc29ja2V0IGlzIHJlYWxseSBhIGhhbmRsZSBub3QgYW4gZmQgKi8KLXN0YXRpYyBTT0NLRVQKLWR1cF9zb2NrZXQoU09DS0VUIGhhbmRsZSkKLXsKLSAgICBXU0FQUk9UT0NPTF9JTkZPIGluZm87Ci0KLSAgICBpZiAoV1NBRHVwbGljYXRlU29ja2V0KGhhbmRsZSwgR2V0Q3VycmVudFByb2Nlc3NJZCgpLCAmaW5mbykpCi0gICAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsKLQotICAgIHJldHVybiBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLCBGUk9NX1BST1RPQ09MX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICBGUk9NX1BST1RPQ09MX0lORk8sICZpbmZvLCAwLCBXU0FfRkxBR19PVkVSTEFQUEVEKTsKLX0KICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2Vzb2NrZXQKLSNlbHNlCi0vKiBPbiBVbml4IHdlIGNhbiB1c2UgZHVwIHRvIGR1cGxpY2F0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgc29ja2V0Ki8KLSNkZWZpbmUgZHVwX3NvY2tldChmZCkgZHVwKGZkKQogI2VuZGlmCiAKICNpZmRlZiBNU19XSU4zMgpAQCAtMzk1LDExICszNjYsNiBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIFNPQ0tFVENMT1NFIHNvY2xvc2UKLSNkZWZpbmUgTk9fRFVQIC8qIFNvY2tldHMgYXJlIE5vdCBBY3R1YWwgRmlsZSBIYW5kbGVzIHVuZGVyIE9TLzIgKi8KLSNlbmRpZgotCiAjaWZuZGVmIFNPQ0tFVENMT1NFCiAjZGVmaW5lIFNPQ0tFVENMT1NFIGNsb3NlCiAjZW5kaWYKQEAgLTQ1OSw2ICs0MjUsMTAgQEAKICNkZWZpbmUgSU5WQUxJRF9TT0NLRVQgKC0xKQogI2VuZGlmCiAKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUgKC0xKQorI2VuZGlmCisKIC8qIFhYWCBUaGVyZSdzIGEgcHJvYmxlbSBoZXJlOiAqc3RhdGljKiBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlCiAgICBhIFB5IHByZWZpeCAob3IgdXNlIENhcGl0YWxpemVkV29yZHMpLiAgTGF0ZXIuLi4gKi8KIApAQCAtNTE5LDYgKzQ4OSwxMSBAQAogICAgIChlcnJubyA9PSBleHBlY3RlZCkKICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworLyogRG9lcyBXU0FTb2NrZXQoKSBzdXBwb3J0IHRoZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCBmbGFnPyAqLworc3RhdGljIGludCBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gLTE7CisjZW5kaWYKKwogLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXJyb3IgYWNjb3JkaW5nIHRvIGVycm5vCiAgICBhbmQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIGZyb20gYSBmdW5jdGlvbi4gKi8KIApAQCAtNTM0LDQyICs1MDksNiBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgZXJyX25vKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNvY2tfZXJybm8oKSAhPSBOT19FUlJPUikgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIFVMT05HICBtc2dsZW47Ci0gICAgICAgIGNoYXIgb3V0YnVmWzEwMF07Ci0gICAgICAgIGludCBteWVycm9yY29kZSA9IHNvY2tfZXJybm8oKTsKLQotICAgICAgICAvKiBSZXRyaWV2ZSBzb2NrZXQtcmVsYXRlZCBlcnJvciBtZXNzYWdlIGZyb20gTVBUTi5NU0cgZmlsZSAqLwotICAgICAgICByYyA9IERvc0dldE1lc3NhZ2UoTlVMTCwgMCwgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ZXJyb3Jjb2RlIC0gU09DQkFTRUVSUiArIDI2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1wdG4ubXNnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2dsZW4pOwotICAgICAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotCi0gICAgICAgICAgICAvKiBPUy8yIGRvZXNuJ3QgZ3VhcmFudGVlIGEgdGVybWluYXRvciAqLwotICAgICAgICAgICAgb3V0YnVmW21zZ2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgaWYgKHN0cmxlbihvdXRidWYpID4gMCkgewotICAgICAgICAgICAgICAgIC8qIElmIG5vbi1lbXB0eSBtc2csIHRyaW0gQ1JMRiAqLwotICAgICAgICAgICAgICAgIGNoYXIgKmxhc3RjID0gJm91dGJ1Zlsgc3RybGVuKG91dGJ1ZiktMSBdOwotICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0YyA+IG91dGJ1ZiAmJgotICAgICAgICAgICAgICAgICAgICAgICBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpsYXN0YykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICAgICAgICAgICAgICAgICAgKmxhc3RjLS0gPSAnXDAnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHYgPSBQeV9CdWlsZFZhbHVlKCIoaXMpIiwgbXllcnJvcmNvZGUsIG91dGJ1Zik7Ci0gICAgICAgICAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQogCkBAIC02NTgsMjAgKzU5NywxNyBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmbmRlZiBNU19XSU5ET1dTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgYmxvY2sgPSAhYmxvY2s7Ci0gICAgaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKGNhZGRyX3QpJmJsb2NrLCBzaXplb2YoYmxvY2spKTsKLSNlbGlmIGRlZmluZWQoX19WTVMpCisjaWYgZGVmaW5lZChfX1ZNUykKICAgICBibG9jayA9ICFibG9jazsKICAgICBpb2N0bChzLT5zb2NrX2ZkLCBGSU9OQklPLCAodW5zaWduZWQgaW50ICopJmJsb2NrKTsKLSNlbHNlICAvKiAhUFlPU19PUzIgJiYgIV9fVk1TICovCisjZWxzZSAgLyogIV9fVk1TICovCiAgICAgZGVsYXlfZmxhZyA9IGZjbnRsKHMtPnNvY2tfZmQsIEZfR0VURkwsIDApOwogICAgIGlmIChibG9jaykKICAgICAgICAgZGVsYXlfZmxhZyAmPSAofk9fTk9OQkxPQ0spOwogICAgIGVsc2UKICAgICAgICAgZGVsYXlfZmxhZyB8PSBPX05PTkJMT0NLOwogICAgIGZjbnRsKHMtPnNvY2tfZmQsIEZfU0VURkwsIGRlbGF5X2ZsYWcpOwotI2VuZGlmIC8qICFQWU9TX09TMiAqLworI2VuZGlmIC8qICFfX1ZNUyAqLwogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwogICAgIGJsb2NrID0gIWJsb2NrOwogICAgIGlvY3Rsc29ja2V0KHMtPnNvY2tfZmQsIEZJT05CSU8sICh1X2xvbmcqKSZibG9jayk7CkBAIC04NTUsOCArNzkxLDYgQEAKIHsKICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CiAgICAgaW50IGVycm9yOwotICAgIGludCBkMSwgZDIsIGQzLCBkNDsKLSAgICBjaGFyIGNoOwogCiAgICAgbWVtc2V0KCh2b2lkICopIGFkZHJfcmV0LCAnXDAnLCBzaXplb2YoKmFkZHJfcmV0KSk7CiAgICAgaWYgKG5hbWVbMF0gPT0gJ1wwJykgewpAQCAtOTA1LDcgKzgzOSwxMCBAQAogICAgICAgICBmcmVlYWRkcmluZm8ocmVzKTsKICAgICAgICAgcmV0dXJuIHNpejsKICAgICB9Ci0gICAgaWYgKG5hbWVbMF0gPT0gJzwnICYmIHN0cmNtcChuYW1lLCAiPGJyb2FkY2FzdD4iKSA9PSAwKSB7CisgICAgLyogc3BlY2lhbC1jYXNlIGJyb2FkY2FzdCAtIGluZXRfYWRkcigpIGJlbG93IGNhbiByZXR1cm4gSU5BRERSX05PTkUgZm9yCisgICAgICogdGhpcyAqLworICAgIGlmIChzdHJjbXAobmFtZSwgIjI1NS4yNTUuMjU1LjI1NSIpID09IDAgfHwKKyAgICAgICAgc3RyY21wKG5hbWUsICI8YnJvYWRjYXN0PiIpID09IDApIHsKICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47CiAgICAgICAgIGlmIChhZiAhPSBBRl9JTkVUICYmIGFmICE9IEFGX1VOU1BFQykgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCkBAIC05MjEsMjAgKzg1OCw1MyBAQAogICAgICAgICBzaW4tPnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CiAgICAgICAgIHJldHVybiBzaXplb2Yoc2luLT5zaW5fYWRkcik7CiAgICAgfQotICAgIGlmIChzc2NhbmYobmFtZSwgIiVkLiVkLiVkLiVkJWMiLCAmZDEsICZkMiwgJmQzLCAmZDQsICZjaCkgPT0gNCAmJgotICAgICAgICAwIDw9IGQxICYmIGQxIDw9IDI1NSAmJiAwIDw9IGQyICYmIGQyIDw9IDI1NSAmJgotICAgICAgICAwIDw9IGQzICYmIGQzIDw9IDI1NSAmJiAwIDw9IGQ0ICYmIGQ0IDw9IDI1NSkgewotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLSAgICAgICAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfcmV0OwotICAgICAgICBzaW4tPnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKAotICAgICAgICAgICAgKChsb25nKSBkMSA8PCAyNCkgfCAoKGxvbmcpIGQyIDw8IDE2KSB8Ci0gICAgICAgICAgICAoKGxvbmcpIGQzIDw8IDgpIHwgKChsb25nKSBkNCA8PCAwKSk7Ci0gICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisKKyAgICAvKiBhdm9pZCBhIG5hbWUgcmVzb2x1dGlvbiBpbiBjYXNlIG9mIG51bWVyaWMgYWRkcmVzcyAqLworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisgICAgLyogY2hlY2sgZm9yIGFuIElQdjQgYWRkcmVzcyAqLworICAgIGlmIChhZiA9PSBBRl9VTlNQRUMgfHwgYWYgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBuYW1lLCAmc2luLT5zaW5fYWRkcikgPiAwKSB7CisgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCi0gICAgICAgIHNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKKyAgICAgICAgICAgIHNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CiAgICAgfQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgLyogY2hlY2sgZm9yIGFuIElQdjYgYWRkcmVzcyAtIGlmIHRoZSBhZGRyZXNzIGNvbnRhaW5zIGEgc2NvcGUgSUQsIHdlCisgICAgICogZmFsbGJhY2sgdG8gZ2V0YWRkcmluZm8oKSwgd2hpY2ggY2FuIGhhbmRsZSB0cmFuc2xhdGlvbiBmcm9tIGludGVyZmFjZQorICAgICAqIG5hbWUgdG8gaW50ZXJmYWNlIGluZGV4ICovCisgICAgaWYgKChhZiA9PSBBRl9VTlNQRUMgfHwgYWYgPT0gQUZfSU5FVDYpICYmICFzdHJjaHIobmFtZSwgJyUnKSkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHJfcmV0OworICAgICAgICBtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBuYW1lLCAmc2luLT5zaW42X2FkZHIpID4gMCkgeworICAgICAgICAgICAgc2luLT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICAgICAgICBzaW4tPnNpbjZfbGVuID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRU5BQkxFX0lQVjYgKi8KKyNlbHNlIC8qIEhBVkVfSU5FVF9QVE9OICovCisgICAgLyogY2hlY2sgZm9yIGFuIElQdjQgYWRkcmVzcyAqLworICAgIGlmIChhZiA9PSBBRl9JTkVUIHx8IGFmID09IEFGX1VOU1BFQykgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKChzaW4tPnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihuYW1lKSkgIT0gSU5BRERSX05PTkUpIHsKKyAgICAgICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgICAgICAgIHNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogSEFWRV9JTkVUX1BUT04gKi8KKworICAgIC8qIHBlcmZvcm0gYSBuYW1lIHJlc29sdXRpb24gKi8KICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKICAgICBoaW50cy5haV9mYW1pbHkgPSBhZjsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xMzI5LDExICsxMjk5LDcgQEAKICAgICAgICAgfQogICAgICAgICBhZGRyLT5zdW5fZmFtaWx5ID0gcy0+c29ja19mYW1pbHk7CiAgICAgICAgIG1lbWNweShhZGRyLT5zdW5fcGF0aCwgcGF0aCwgbGVuKTsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICAqbGVuX3JldCA9IHNpemVvZigqYWRkcik7Ci0jZWxzZQogICAgICAgICAqbGVuX3JldCA9IGxlbiArIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpOwotI2VuZGlmCiAgICAgICAgIHJldHZhbCA9IDE7CiAgICAgdW5peF9vdXQ6CiAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKQEAgLTE2NTgsNiArMTYyNCw4IEBACiAgICAgY2FzZSBBRl9DQU46CiAgICAgICAgIHN3aXRjaCAocy0+c29ja19wcm90bykgewogICAgICAgICBjYXNlIENBTl9SQVc6CisgICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLworICAgICAgICBjYXNlIENBTl9CQ006CiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9jYW4gKmFkZHI7CiAgICAgICAgICAgICBQeU9iamVjdCAqaW50ZXJmYWNlTmFtZTsKQEAgLTIwMTYsNiArMTk4NCwxMSBAQAogICAgIFB5T2JqZWN0ICphZGRyID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKICAgICBpbnQgdGltZW91dDsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgLyogYWNjZXB0NCgpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjgrIGFuZCBnbGliYyAyLjEwICovCisgICAgc3RhdGljIGludCBhY2NlcHQ0X3dvcmtzID0gLTE7CisjZW5kaWYKKwogICAgIGlmICghZ2V0c29ja2FkZHJsZW4ocywgJmFkZHJsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtZW1zZXQoJmFkZHJidWYsIDAsIGFkZHJsZW4pOwpAQCAtMjAyNCwxMCArMTk5NywyNCBAQAogICAgICAgICByZXR1cm4gc2VsZWN0X2Vycm9yKCk7CiAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQorCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgeworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgIT0gMCkgeworICAgICAgICAgICAgbmV3ZmQgPSBhY2NlcHQ0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfQ0xPRVhFQyk7CisgICAgICAgICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQgJiYgYWNjZXB0NF93b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8qIE9uIExpbnV4IG9sZGVyIHRoYW4gMi42LjI4LCBhY2NlcHQ0KCkgZmFpbHMgd2l0aCBFTk9TWVMgKi8KKyAgICAgICAgICAgICAgICBhY2NlcHQ0X3dvcmtzID0gKGVycm5vICE9IEVOT1NZUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgPT0gMCkKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbHNlCiAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbmRpZgogICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCkBAIC0yMDQwLDYgKzIwMjcsMjUgQEAKICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCiAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpbmV3ZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICB9CisjZWxzZQorCisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIGlmICghYWNjZXB0NF93b3JrcykKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobmV3ZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBzb2NrID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKHNvY2sgPT0gTlVMTCkgewogICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CkBAIC0yNjEzLDggKzI2MTksMTUgQEAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpCisgICAgaWYgKCF0aW1lb3V0KSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG91dGxlbiA9IHJlY3Yocy0+c29ja19mZCwgY2J1ZiwgKGludClsZW4sIGZsYWdzKTsKKyNlbHNlCiAgICAgICAgIG91dGxlbiA9IHJlY3Yocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncyk7CisjZW5kaWYKKyAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKQEAgLTI4MjAsMTQgKzI4MzMsMTEgQEAKICAgICBtZW1zZXQoJmFkZHJidWYsIDAsIGFkZHJsZW4pOwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgewotI2lmbmRlZiBNU19XSU5ET1dTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pOwotI2Vsc2UKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCAoaW50KWxlbiwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmYWRkcmJ1ZiwgJmFkZHJsZW4pOwotI2VuZGlmCiAjZWxzZQogICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKQEAgLTMzMDUsMTIgKzMzMTUsMTcgQEAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDEsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpCisgICAgaWYgKCF0aW1lb3V0KSB7CiAjaWZkZWYgX19WTVMKICAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKKyNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncyk7CiAjZWxzZQogICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwogI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKQEAgLTMzNjAsNiArMzM3NSwxMCBAQAogICAgICAgICBpZiAoIXRpbWVvdXQpIHsKICNpZmRlZiBfX1ZNUwogICAgICAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKKyNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKyAgICAgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncyk7CiAjZWxzZQogICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgpAQCAtMzQ1NCw4ICszNDczLDE3IEBACiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQotICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisgICAgaWYgKCF0aW1lb3V0KSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisjZWxzZQorICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKKyNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewpAQCAtMzk0OCw2ICszOTc2LDEyIEBACiAKIC8qIEluaXRpYWxpemUgYSBuZXcgc29ja2V0IG9iamVjdC4gKi8KIAorI2lmZGVmIFNPQ0tfQ0xPRVhFQworLyogc29ja2V0KCkgYW5kIHNvY2tldHBhaXIoKSBmYWlsIHdpdGggRUlOVkFMIG9uIExpbnV4IGtlcm5lbCBvbGRlcgorICogdGhhbiAyLjYuMjcgaWYgU09DS19DTE9FWEVDIGZsYWcgaXMgc2V0IGluIHRoZSBzb2NrZXQgdHlwZS4gKi8KK3N0YXRpYyBpbnQgc29ja19jbG9leGVjX3dvcmtzID0gLTE7CisjZW5kaWYKKwogLypBUkdTVVNFRCovCiBzdGF0aWMgaW50CiBzb2NrX2luaXRvYmooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKQEAgLTM5NTcsNiArMzk5MSwxMyBAQAogICAgIFNPQ0tFVF9UIGZkID0gSU5WQUxJRF9TT0NLRVQ7CiAgICAgaW50IGZhbWlseSA9IEFGX0lORVQsIHR5cGUgPSBTT0NLX1NUUkVBTSwgcHJvdG8gPSAwOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJmYW1pbHkiLCAidHlwZSIsICJwcm90byIsICJmaWxlbm8iLCAwfTsKKyNpZm5kZWYgTVNfV0lORE9XUworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmc29ja19jbG9leGVjX3dvcmtzOworI2Vsc2UKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorI2VuZGlmCiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ8aWlpTzpzb2NrZXQiLCBrZXl3b3JkcywKQEAgLTQwMDEsMTQgKzQwNDIsNzQgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIC8qIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gKi8KKyNpZm5kZWYgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQKKyNkZWZpbmUgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQgMHg4MAorI2VuZGlmCisKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgaWYgKHN1cHBvcnRfd3NhX25vX2luaGVyaXQpIHsKKyAgICAgICAgICAgIGZkID0gV1NBU29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NBX0ZMQUdfT1ZFUkxBUFBFRCB8IFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUKTsKKyAgICAgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgNyBvciBXaW5kb3dzIDIwMDggUjIgd2l0aG91dCBTUDEgb3IgdGhlIGhvdGZpeCAqLworICAgICAgICAgICAgICAgIHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAwOworICAgICAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIH0KICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKICAgICAgICAgICAgIHNldF9lcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdXBwb3J0X3dzYV9ub19pbmhlcml0KSB7CisgICAgICAgICAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgICAgICAgICAgY2xvc2Vzb2NrZXQoZmQpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgLyogVU5JWCAqLworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgIT0gMCkgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlIHwgU09DS19DTE9FWEVDLCBwcm90byk7CisgICAgICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIExpbnV4IG9sZGVyIHRoYW4gMi42LjI3IGRvZXMgbm90IHN1cHBvcnQgU09DS19DTE9FWEVDICovCisgICAgICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIH0KKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgICAgIHNldF9lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgICAgIFNPQ0tFVENMT1NFKGZkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIGluaXRfc29ja29iamVjdChzLCBmZCwgZmFtaWx5LCB0eXBlLCBwcm90byk7CiAKQEAgLTQ1NzQsMTYgKzQ2NzUsMzYgQEAKIHsKICAgICBTT0NLRVRfVCBmZCwgbmV3ZmQ7CiAgICAgUHlPYmplY3QgKm5ld2Zkb2JqOwotCisjaWZkZWYgTVNfV0lORE9XUworICAgIFdTQVBST1RPQ09MX0lORk8gaW5mbzsKKyNlbmRpZgogCiAgICAgZmQgPSBQeUxvbmdfQXNTb2NrZXRfdChmZG9iaik7CiAgICAgaWYgKGZkID09IChTT0NLRVRfVCkoLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbmV3ZmQgPSBkdXBfc29ja2V0KGZkKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKFdTQUR1cGxpY2F0ZVNvY2tldChmZCwgR2V0Q3VycmVudFByb2Nlc3NJZCgpLCAmaW5mbykpCisgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKKworICAgIG5ld2ZkID0gV1NBU29ja2V0KEZST01fUFJPVE9DT0xfSU5GTywgRlJPTV9QUk9UT0NPTF9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgIEZST01fUFJPVE9DT0xfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAmaW5mbywgMCwgV1NBX0ZMQUdfT1ZFUkxBUFBFRCk7CiAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQogICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CiAKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpbmV3ZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgIGNsb3Nlc29ja2V0KG5ld2ZkKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbHNlCisgICAgLyogT24gVU5JWCwgZHVwIGNhbiBiZSB1c2VkIHRvIGR1cGxpY2F0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgc29ja2V0ICovCisgICAgbmV3ZmQgPSBfUHlfZHVwKGZkKTsKKyAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmCisKICAgICBuZXdmZG9iaiA9IFB5TG9uZ19Gcm9tU29ja2V0X3QobmV3ZmQpOwogICAgIGlmIChuZXdmZG9iaiA9PSBOVUxMKQogICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CkBAIC00NjExLDYgKzQ3MzIsMTIgQEAKICAgICBTT0NLRVRfVCBzdlsyXTsKICAgICBpbnQgZmFtaWx5LCB0eXBlID0gU09DS19TVFJFQU0sIHByb3RvID0gMDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJnNvY2tfY2xvZXhlY193b3JrczsKKyNlbHNlCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKyAgICBpbnQgcmV0OwogCiAjaWYgZGVmaW5lZChBRl9VTklYKQogICAgIGZhbWlseSA9IEFGX1VOSVg7CkBAIC00NjIwLDkgKzQ3NDcsMzggQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpaWk6c29ja2V0cGFpciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYW1pbHksICZ0eXBlLCAmcHJvdG8pKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIC8qIENyZWF0ZSBhIHBhaXIgb2Ygc29ja2V0IGZkcyAqLwotICAgIGlmIChzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSwgcHJvdG8sIHN2KSA8IDApCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgIT0gMCkgeworICAgICAgICByZXQgPSBzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSB8IFNPQ0tfQ0xPRVhFQywgcHJvdG8sIHN2KTsKKyAgICAgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgaWYgKHJldCA+PSAwKSB7CisgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGVycm5vID09IEVJTlZBTCkgeworICAgICAgICAgICAgICAgIC8qIExpbnV4IG9sZGVyIHRoYW4gMi42LjI3IGRvZXMgbm90IHN1cHBvcnQgU09DS19DTE9FWEVDICovCisgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMDsKKyAgICAgICAgICAgICAgICByZXQgPSBzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSwgcHJvdG8sIHN2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpOworICAgIH0KKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJldCA8IDApCiAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHN2WzBdLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc3ZbMV0sIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgIGdvdG8gZmluYWxseTsKKwogICAgIHMwID0gbmV3X3NvY2tvYmplY3Qoc3ZbMF0sIGZhbWlseSwgdHlwZSwgcHJvdG8pOwogICAgIGlmIChzMCA9PSBOVUxMKQogICAgICAgICBnb3RvIGZpbmFsbHk7CkBAIC00NjQ0LDcgKzQ4MDAsNyBAQAogfQogCiBQeURvY19TVFJWQVIoc29ja2V0cGFpcl9kb2MsCi0ic29ja2V0cGFpcihbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKSAtPiAoc29ja2V0IG9iamVjdCwgc29ja2V0IG9iamVjdClcblwKKyJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlIFssIHByb3RvXV1dKSAtPiAoc29ja2V0IG9iamVjdCwgc29ja2V0IG9iamVjdClcblwKIFxuXAogQ3JlYXRlIGEgcGFpciBvZiBzb2NrZXQgb2JqZWN0cyBmcm9tIHRoZSBzb2NrZXRzIHJldHVybmVkIGJ5IHRoZSBwbGF0Zm9ybVxuXAogc29ja2V0cGFpcigpIGZ1bmN0aW9uLlxuXApAQCAtNDc3OCw5ICs0OTM0LDYgQEAKIHN0YXRpYyBQeU9iamVjdCoKIHNvY2tldF9pbmV0X2F0b24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotI2lmbmRlZiBJTkFERFJfTk9ORQotI2RlZmluZSBJTkFERFJfTk9ORSAoLTEpCi0jZW5kaWYKICNpZmRlZiBIQVZFX0lORVRfQVRPTgogICAgIHN0cnVjdCBpbl9hZGRyIGJ1ZjsKICNlbmRpZgpAQCAtNDgyMiw3ICs0OTc1LDcgQEAKICAgICAvKiBzcGVjaWFsLWNhc2UgdGhpcyBhZGRyZXNzIGFzIGluZXRfYWRkciBtaWdodCByZXR1cm4gSU5BRERSX05PTkUKICAgICAgKiBmb3IgdGhpcyAqLwogICAgIGlmIChzdHJjbXAoaXBfYWRkciwgIjI1NS4yNTUuMjU1LjI1NSIpID09IDApIHsKLSAgICAgICAgcGFja2VkX2FkZHIgPSAweEZGRkZGRkZGOworICAgICAgICBwYWNrZWRfYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CiAgICAgfSBlbHNlIHsKIAogICAgICAgICBwYWNrZWRfYWRkciA9IGluZXRfYWRkcihpcF9hZGRyKTsKQEAgLTQ4NzAsNyArNTAyMyw3IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGluZXRfbnRvYShwYWNrZWRfYWRkcikpOwogfQogCi0jaWZkZWYgSEFWRV9JTkVUX1BUT04KKyNpZiBkZWZpbmVkKEhBVkVfSU5FVF9QVE9OKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAKIFB5RG9jX1NUUlZBUihpbmV0X3B0b25fZG9jLAogImluZXRfcHRvbihhZiwgaXApIC0+IHBhY2tlZCBJUCBhZGRyZXNzIHN0cmluZ1xuXApAQCAtNDg3OCw2ICs1MDMxLDEwIEBACiBDb252ZXJ0IGFuIElQIGFkZHJlc3MgZnJvbSBzdHJpbmcgZm9ybWF0IHRvIGEgcGFja2VkIHN0cmluZyBzdWl0YWJsZVxuXAogZm9yIHVzZSB3aXRoIGxvdy1sZXZlbCBuZXR3b3JrIGZ1bmN0aW9ucy4iKTsKIAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0lORVRfUFRPTgorCiBzdGF0aWMgUHlPYmplY3QgKgogc29ja2V0X2luZXRfcHRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC00ODg1LDcgKzUwNDIsNyBAQAogICAgIGNoYXIqIGlwOwogICAgIGludCByZXR2YWw7CiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBjaGFyIHBhY2tlZFtNQVgoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXTsKKyAgICBjaGFyIHBhY2tlZFtQeV9NQVgoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXTsKICNlbHNlCiAgICAgY2hhciBwYWNrZWRbc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKV07CiAjZW5kaWYKQEAgLTQ5MjIsMTIgKzUwNzksNTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogfQorI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorCitzdGF0aWMgUHlPYmplY3QgKgorc29ja2V0X2luZXRfcHRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGFmOworICAgIGNoYXIqIGlwOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICBJTlQgcmV0LCBzaXplOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpczppbmV0X3B0b24iLCAmYWYsICZpcCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2l6ZSA9IHNpemVvZihhZGRyKTsKKyAgICByZXQgPSBXU0FTdHJpbmdUb0FkZHJlc3NBKGlwLCBhZiwgTlVMTCwgKExQU09DS0FERFIpJmFkZHIsICZzaXplKTsKKworICAgIGlmIChyZXQpIHsKKyAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgaWYoYWYgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiopJmFkZHI7CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyICopJihhZGRyNC0+c2luX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkcjQtPnNpbl9hZGRyKSk7CisgICAgfSBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikgeworICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSYoYWRkci5zaW42X2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHIuc2luNl9hZGRyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsICJ1bmtub3duIGFkZHJlc3MgZmFtaWx5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfSU5FVF9QVE9OKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAKIFB5RG9jX1NUUlZBUihpbmV0X250b3BfZG9jLAogImluZXRfbnRvcChhZiwgcGFja2VkX2lwKSAtPiBzdHJpbmcgZm9ybWF0dGVkIElQIGFkZHJlc3NcblwKIFxuXAogQ29udmVydCBhIHBhY2tlZCBJUCBhZGRyZXNzIG9mIHRoZSBnaXZlbiBmYW1pbHkgdG8gc3RyaW5nIGZvcm1hdC4iKTsKIAorI2VuZGlmCisKKworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCiBzdGF0aWMgUHlPYmplY3QgKgogc29ja2V0X2luZXRfbnRvcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC00OTM2LDcgKzUxMzMsNyBAQAogICAgIGludCBsZW47CiAgICAgY29uc3QgY2hhciogcmV0dmFsOwogI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgY2hhciBpcFtNQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOworICAgIGNoYXIgaXBbUHlfTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKICNlbHNlCiAgICAgY2hhciBpcFtJTkVUX0FERFJTVFJMRU4gKyAxXTsKICNlbmRpZgpAQCAtNDk4MSw2ICs1MTc4LDcwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKyNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKworc3RhdGljIFB5T2JqZWN0ICoKK3NvY2tldF9pbmV0X250b3AoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBhZjsKKyAgICBjaGFyKiBwYWNrZWQ7CisgICAgaW50IGxlbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgICAgRFdPUkQgYWRkcmxlbiwgcmV0LCByZXRsZW47CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjaGFyIGlwW1B5X01BWChJTkVUX0FERFJTVFJMRU4sIElORVQ2X0FERFJTVFJMRU4pICsgMV07CisjZWxzZQorICAgIGNoYXIgaXBbSU5FVF9BRERSU1RSTEVOICsgMV07CisjZW5kaWYKKworICAgIC8qIEd1YXJhbnRlZSBOVUwtdGVybWluYXRpb24gZm9yIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCkgYmVsb3cgKi8KKyAgICBtZW1zZXQoKHZvaWQgKikgJmlwWzBdLCAnXDAnLCBzaXplb2YoaXApKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXkjOmluZXRfbnRvcCIsICZhZiwgJnBhY2tlZCwgJmxlbikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICogYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFkZHI7CisKKyAgICAgICAgaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBsZW5ndGggb2YgcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICAgICAgYWRkcjQtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBtZW1jcHkoJihhZGRyNC0+c2luX2FkZHIpLCBwYWNrZWQsIHNpemVvZihhZGRyNC0+c2luX2FkZHIpKTsKKyAgICAgICAgYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgIH0gZWxzZSBpZiAoYWYgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgImludmFsaWQgbGVuZ3RoIG9mIHBhY2tlZCBJUCBhZGRyZXNzIHN0cmluZyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgbWVtY3B5KCYoYWRkci5zaW42X2FkZHIpLCBwYWNrZWQsIHNpemVvZihhZGRyLnNpbjZfYWRkcikpOworICAgICAgICBhZGRybGVuID0gc2l6ZW9mKGFkZHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgInVua25vd24gYWRkcmVzcyBmYW1pbHkgJWQiLCBhZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldGxlbiA9IHNpemVvZihpcCk7CisgICAgcmV0ID0gV1NBQWRkcmVzc1RvU3RyaW5nQSgoc3RydWN0IHNvY2thZGRyKikmYWRkciwgYWRkcmxlbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwLCAmcmV0bGVuKTsKKworICAgIGlmIChyZXQpIHsKKyAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoaXApOworICAgIH0KK30KKwogI2VuZGlmIC8qIEhBVkVfSU5FVF9QVE9OICovCiAKIC8qIFB5dGhvbiBpbnRlcmZhY2UgdG8gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCkuICovCkBAIC01MDAyLDcgKzUyNjMsNyBAQAogICAgIFB5T2JqZWN0ICphbGwgPSAoUHlPYmplY3QgKilOVUxMOwogICAgIFB5T2JqZWN0ICppZG5hID0gTlVMTDsKIAotICAgIGZhbWlseSA9IHNvY2t0eXBlID0gcHJvdG9jb2wgPSBmbGFncyA9IDA7CisgICAgc29ja3R5cGUgPSBwcm90b2NvbCA9IGZsYWdzID0gMDsKICAgICBmYW1pbHkgPSBBRl9VTlNQRUM7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT098aWlpaTpnZXRhZGRyaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bmFtZXMsICZob2JqLCAmcG9iaiwgJmZhbWlseSwgJnNvY2t0eXBlLApAQCAtNTQ0Nyw3ICs1NzA4LDcgQEAKICAgICAgTUVUSF9WQVJBUkdTLCBpbmV0X2F0b25fZG9jfSwKICAgICB7ImluZXRfbnRvYSIsICAgICAgICAgICAgICAgc29ja2V0X2luZXRfbnRvYSwKICAgICAgTUVUSF9WQVJBUkdTLCBpbmV0X250b2FfZG9jfSwKLSNpZmRlZiBIQVZFX0lORVRfUFRPTgorI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKICAgICB7ImluZXRfcHRvbiIsICAgICAgICAgICAgICAgc29ja2V0X2luZXRfcHRvbiwKICAgICAgTUVUSF9WQVJBUkdTLCBpbmV0X3B0b25fZG9jfSwKICAgICB7ImluZXRfbnRvcCIsICAgICAgICAgICAgICAgc29ja2V0X2luZXRfbnRvcCwKQEAgLTU1MjIsMzIgKzU3ODMsNiBAQAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogCi0jaWZkZWYgUFlPU19PUzIKLSNkZWZpbmUgT1NfSU5JVF9ERUZJTkVECi0KLS8qIEFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIE9TLzIgKi8KLQotc3RhdGljIGludAotb3NfaW5pdCh2b2lkKQotewotI2lmbmRlZiBQWUNDX0dDQwotICAgIGludCByYyA9IHNvY2tfaW5pdCgpOwotCi0gICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgcmV0dXJuIDE7IC8qIFN1Y2Nlc3MgKi8KLSAgICB9Ci0KLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJPUy8yIFRDUC9JUCBFcnJvciMgJWQiLCBzb2NrX2Vycm5vKCkpOwotCi0gICAgcmV0dXJuIDA7ICAvKiBGYWlsdXJlICovCi0jZWxzZQotICAgIC8qIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBzb2NrZXRzIHdpdGggR0NDL0VNWCAqLwotICAgIHJldHVybiAxOyAvKiBTdWNjZXNzICovCi0jZW5kaWYKLX0KLQotI2VuZGlmIC8qIFBZT1NfT1MyICovCi0KIAogI2lmbmRlZiBPU19JTklUX0RFRklORUQKIHN0YXRpYyBpbnQKQEAgLTU2MDQsNiArNTgzOSwxNiBAQAogICAgIGlmICghb3NfaW5pdCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9PSAtMSkgeworICAgICAgICBEV09SRCB2ZXJzaW9uID0gR2V0VmVyc2lvbigpOworICAgICAgICBEV09SRCBtYWpvciA9IChEV09SRClMT0JZVEUoTE9XT1JEKHZlcnNpb24pKTsKKyAgICAgICAgRFdPUkQgbWlub3IgPSAoRFdPUkQpSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7CisgICAgICAgIC8qIG5lZWQgV2luZG93cyA3IFNQMSwgMjAwOCBSMiBTUDEgb3IgbGF0ZXIgKi8KKyAgICAgICAgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IChtYWpvciA+PSA2ICYmIG1pbm9yID49IDEpOworICAgIH0KKyNlbmRpZgorCiAgICAgUHlfVFlQRSgmc29ja190eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzb2NrZXRtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCkBAIC01NjU3LDE4NCArNTkwMiwxODcgQEAKIAogICAgIC8qIEFkZHJlc3MgZmFtaWxpZXMgKHdlIG9ubHkgc3VwcG9ydCBBRl9JTkVUIGFuZCBBRl9VTklYKSAqLwogI2lmZGVmIEFGX1VOU1BFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9VTlNQRUMiLCBBRl9VTlNQRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1VOU1BFQyk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVCIsIEFGX0lORVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQpOwogI2lmZGVmIEFGX0lORVQ2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQ2IiwgQUZfSU5FVDYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQ2KTsKICNlbmRpZiAvKiBBRl9JTkVUNiAqLwogI2lmIGRlZmluZWQoQUZfVU5JWCkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVU5JWCIsIEFGX1VOSVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1VOSVgpOwogI2VuZGlmIC8qIEFGX1VOSVggKi8KICNpZmRlZiBBRl9BWDI1CiAgICAgLyogQW1hdGV1ciBSYWRpbyBBWC4yNSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BWDI1IiwgQUZfQVgyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVgyNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JUFgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSVBYIiwgQUZfSVBYKTsgLyogTm92ZWxsIElQWCAqLworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lQWCk7IC8qIE5vdmVsbCBJUFggKi8KICNlbmRpZgogI2lmZGVmIEFGX0FQUExFVEFMSwogICAgIC8qIEFwcGxldGFsayBERFAgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVBQTEVUQUxLIiwgQUZfQVBQTEVUQUxLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BUFBMRVRBTEspOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUUk9NCiAgICAgLyogQW1hdGV1ciByYWRpbyBOZXRST00gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUUk9NIiwgQUZfTkVUUk9NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRST00pOwogI2VuZGlmCiAjaWZkZWYgQUZfQlJJREdFCiAgICAgLyogTXVsdGlwcm90b2NvbCBicmlkZ2UgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQlJJREdFIiwgQUZfQlJJREdFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9CUklER0UpOwogI2VuZGlmCiAjaWZkZWYgQUZfQVRNUFZDCiAgICAgLyogQVRNIFBWQ3MgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVRNUFZDIiwgQUZfQVRNUFZDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BVE1QVkMpOwogI2VuZGlmCiAjaWZkZWYgQUZfQUFMNQogICAgIC8qIFJlc2VydmVkIGZvciBXZXJuZXIncyBBVE0gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQUFMNSIsIEFGX0FBTDUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FBTDUpOwogI2VuZGlmCiAjaWZkZWYgQUZfWDI1CiAgICAgLyogUmVzZXJ2ZWQgZm9yIFguMjUgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9YMjUiLCBBRl9YMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1gyNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JTkVUNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUNiIsIEFGX0lORVQ2KTsgLyogSVAgdmVyc2lvbiA2ICovCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSU5FVDYpOyAvKiBJUCB2ZXJzaW9uIDYgKi8KICNlbmRpZgogI2lmZGVmIEFGX1JPU0UKICAgICAvKiBBbWF0ZXVyIFJhZGlvIFguMjUgUExQICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JPU0UiLCBBRl9ST1NFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ST1NFKTsKICNlbmRpZgogI2lmZGVmIEFGX0RFQ25ldAogICAgIC8qIFJlc2VydmVkIGZvciBERUNuZXQgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ERUNuZXQiLCBBRl9ERUNuZXQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0RFQ25ldCk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRCRVVJCiAgICAgLyogUmVzZXJ2ZWQgZm9yIDgwMi4yTExDIHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUQkVVSSIsIEFGX05FVEJFVUkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVEJFVUkpOwogI2VuZGlmCiAjaWZkZWYgQUZfU0VDVVJJVFkKICAgICAvKiBTZWN1cml0eSBjYWxsYmFjayBwc2V1ZG8gQUYgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU0VDVVJJVFkiLCBBRl9TRUNVUklUWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU0VDVVJJVFkpOwogI2VuZGlmCiAjaWZkZWYgQUZfS0VZCiAgICAgLyogUEZfS0VZIGtleSBtYW5hZ2VtZW50IEFQSSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9LRVkiLCBBRl9LRVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0tFWSk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRMSU5LCiAgICAgLyogICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVExJTksiLCBBRl9ORVRMSU5LKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ST1VURSIsIE5FVExJTktfUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVExJTkspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfUk9VVEUpOwogI2lmZGVmIE5FVExJTktfU0tJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1NLSVAiLCBORVRMSU5LX1NLSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfU0tJUCk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1cxCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVzEiLCBORVRMSU5LX1cxKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1cxKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1VTRVJTT0NLIiwgTkVUTElOS19VU0VSU09DSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfRklSRVdBTEwiLCBORVRMSU5LX0ZJUkVXQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1VTRVJTT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0ZJUkVXQUxMKTsKICNpZmRlZiBORVRMSU5LX1RDUERJQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19UQ1BESUFHIiwgTkVUTElOS19UQ1BESUFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1RDUERJQUcpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19ORkxPRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX05GTE9HIiwgTkVUTElOS19ORkxPRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ORkxPRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1hGUk0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19YRlJNIiwgTkVUTElOS19YRlJNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1hGUk0pOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19BUlBECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfQVJQRCIsIE5FVExJTktfQVJQRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19BUlBEKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfUk9VVEU2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfUk9VVEU2IiwgTkVUTElOS19ST1VURTYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfUk9VVEU2KTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0lQNl9GVyIsIE5FVExJTktfSVA2X0ZXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0lQNl9GVyk7CiAjaWZkZWYgTkVUTElOS19ETlJUTVNHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfRE5SVE1TRyIsIE5FVExJTktfRE5SVE1TRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ETlJUTVNHKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfVEFQQkFTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1RBUEJBU0UiLCBORVRMSU5LX1RBUEJBU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVEFQQkFTRSk7CiAjZW5kaWYKICNlbmRpZiAvKiBBRl9ORVRMSU5LICovCiAjaWZkZWYgQUZfUk9VVEUKICAgICAvKiBBbGlhcyB0byBlbXVsYXRlIDQuNEJTRCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ST1VURSIsIEFGX1JPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ST1VURSk7CisjZW5kaWYKKyNpZmRlZiBBRl9MSU5LCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTElOSyk7CiAjZW5kaWYKICNpZmRlZiBBRl9BU0gKICAgICAvKiBBc2ggKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVNIIiwgQUZfQVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BU0gpOwogI2VuZGlmCiAjaWZkZWYgQUZfRUNPTkVUCiAgICAgLyogQWNvcm4gRWNvbmV0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0VDT05FVCIsIEFGX0VDT05FVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfRUNPTkVUKTsKICNlbmRpZgogI2lmZGVmIEFGX0FUTVNWQwogICAgIC8qIEFUTSBTVkNzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FUTVNWQyIsIEFGX0FUTVNWQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVRNU1ZDKTsKICNlbmRpZgogI2lmZGVmIEFGX1NOQQogICAgIC8qIExpbnV4IFNOQSBQcm9qZWN0IChudXR0ZXJzISkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU05BIiwgQUZfU05BKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9TTkEpOwogI2VuZGlmCiAjaWZkZWYgQUZfSVJEQQogICAgIC8qIElSREEgc29ja2V0cyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JUkRBIiwgQUZfSVJEQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSVJEQSk7CiAjZW5kaWYKICNpZmRlZiBBRl9QUFBPWAogICAgIC8qIFBQUG9YIHNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUFBQT1giLCBBRl9QUFBPWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUFBQT1gpOwogI2VuZGlmCiAjaWZkZWYgQUZfV0FOUElQRQogICAgIC8qIFdhbnBpcGUgQVBJIFNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfV0FOUElQRSIsIEFGX1dBTlBJUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1dBTlBJUEUpOwogI2VuZGlmCiAjaWZkZWYgQUZfTExDCiAgICAgLyogTGludXggTExDICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0xMQyIsIEFGX0xMQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTExDKTsKICNlbmRpZgogCiAjaWZkZWYgVVNFX0JMVUVUT09USAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9CTFVFVE9PVEgiLCBBRl9CTFVFVE9PVEgpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX0wyQ0FQIiwgQlRQUk9UT19MMkNBUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fSENJIiwgQlRQUk9UT19IQ0kpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSENJIiwgU09MX0hDSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQkxVRVRPT1RIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX0wyQ0FQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX0hDSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0hDSSk7CiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX0ZJTFRFUiIsIEhDSV9GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9GSUxURVIpOwogI2VuZGlmCiAjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX1RJTUVfU1RBTVAiLCBIQ0lfVElNRV9TVEFNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSENJX1RJTUVfU1RBTVApOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9EQVRBX0RJUiIsIEhDSV9EQVRBX0RJUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fU0NPIiwgQlRQUk9UT19TQ08pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9EQVRBX0RJUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19TQ08pOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fUkZDT01NIiwgQlRQUk9UT19SRkNPTU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fUkZDT01NKTsKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiQkRBRERSX0FOWSIsICIwMDowMDowMDowMDowMDowMCIpOwogICAgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJCREFERFJfTE9DQUwiLCAiMDA6MDA6MDA6RkY6RkY6RkYiKTsKICNlbmRpZgogCiAjaWZkZWYgQUZfQ0FOCiAgICAgLyogQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQ0FOIiwgQUZfQ0FOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9DQU4pOwogI2VuZGlmCiAjaWZkZWYgUEZfQ0FOCiAgICAgLyogQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfQ0FOIiwgUEZfQ0FOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9DQU4pOwogI2VuZGlmCiAKIC8qIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKi8KICNpZmRlZiBBRl9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUkRTIiwgQUZfUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9SRFMpOwogI2VuZGlmCiAjaWZkZWYgUEZfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX1JEUyIsIFBGX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfUkRTKTsKICNlbmRpZgogCiAvKiBLZXJuZWwgZXZlbnQgbWVzc2FnZXMgKi8KICNpZmRlZiBQRl9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfU1lTVEVNIiwgUEZfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9TWVNURU0pOwogI2VuZGlmCiAjaWZkZWYgQUZfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NZU1RFTSIsIEFGX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU1lTVEVNKTsKICNlbmRpZgogCiAjaWZkZWYgQUZfUEFDS0VUCkBAIC01ODY2LDEzNCArNjExNCwxMjkgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9MSU5VWF9USVBDX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVElQQyIsIEFGX1RJUEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1RJUEMpOwogCiAgICAgLyogZm9yIGFkZHJlc3NlcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfTkFNRVNFUSIsIFRJUENfQUREUl9OQU1FU0VRKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX05BTUUiLCBUSVBDX0FERFJfTkFNRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9JRCIsIFRJUENfQUREUl9JRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX05BTUVTRVEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9OQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfSUQpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfWk9ORV9TQ09QRSIsIFRJUENfWk9ORV9TQ09QRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ0xVU1RFUl9TQ09QRSIsIFRJUENfQ0xVU1RFUl9TQ09QRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTk9ERV9TQ09QRSIsIFRJUENfTk9ERV9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19aT05FX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NMVVNURVJfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfTk9ERV9TQ09QRSk7CiAKICAgICAvKiBmb3Igc2V0c29ja29wdCgpICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9USVBDIiwgU09MX1RJUEMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0lNUE9SVEFOQ0UiLCBUSVBDX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NSQ19EUk9QUEFCTEUiLCBUSVBDX1NSQ19EUk9QUEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0RFU1RfRFJPUFBBQkxFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19ERVNUX0RST1BQQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ09OTl9USU1FT1VUIiwgVElQQ19DT05OX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9USVBDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1JDX0RST1BQQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19ERVNUX0RST1BQQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DT05OX1RJTUVPVVQpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTE9XX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0xPV19JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19NRURJVU1fSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfTUVESVVNX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0hJR0hfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfSElHSF9JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0xPV19JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX01FRElVTV9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0hJR0hfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKTsKIAogICAgIC8qIGZvciBzdWJzY3JpcHRpb25zICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCX1BPUlRTIiwgVElQQ19TVUJfUE9SVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9TRVJWSUNFIiwgVElQQ19TVUJfU0VSVklDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJfUE9SVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX1NFUlZJQ0UpOwogI2lmZGVmIFRJUENfU1VCX0NBTkNFTAogICAgIC8qIGRvZXNuJ3Qgc2VlbSB0byBiZSBhdmFpbGFibGUgZXZlcnl3aGVyZSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9DQU5DRUwiLCBUSVBDX1NVQl9DQU5DRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX0NBTkNFTCk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19XQUlUX0ZPUkVWRVIiLCBUSVBDX1dBSVRfRk9SRVZFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfUFVCTElTSEVEIiwgVElQQ19QVUJMSVNIRUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1dJVEhEUkFXTiIsIFRJUENfV0lUSERSQVdOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJTQ1JfVElNRU9VVCIsIFRJUENfU1VCU0NSX1RJTUVPVVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NGR19TUlYiLCBUSVBDX0NGR19TUlYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1RPUF9TUlYiLCBUSVBDX1RPUF9TUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfV0FJVF9GT1JFVkVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1BVQkxJU0hFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19XSVRIRFJBV04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCU0NSX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ0ZHX1NSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19UT1BfU1JWKTsKICNlbmRpZgogCiAgICAgLyogU29ja2V0IHR5cGVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfU1RSRUFNIiwgU09DS19TVFJFQU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX0RHUkFNIiwgU09DS19ER1JBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19TVFJFQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfREdSQU0pOwogLyogV2UgaGF2ZSBpbmNvbXBsZXRlIHNvY2tldCBzdXBwb3J0LiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1JBVyIsIFNPQ0tfUkFXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19TRVFQQUNLRVQiLCBTT0NLX1NFUVBBQ0tFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfU0VRUEFDS0VUKTsKICNpZiBkZWZpbmVkKFNPQ0tfUkRNKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1JETSIsIFNPQ0tfUkRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1JETSk7CiAjZW5kaWYKICNpZmRlZiBTT0NLX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19DTE9FWEVDIiwgU09DS19DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX0NMT0VYRUMpOwogI2VuZGlmCiAjaWZkZWYgU09DS19OT05CTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX05PTkJMT0NLIiwgU09DS19OT05CTE9DSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19OT05CTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmICBTT19ERUJVRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19ERUJVRyIsIFNPX0RFQlVHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19ERUJVRyk7CiAjZW5kaWYKICNpZmRlZiAgU09fQUNDRVBUQ09OTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19BQ0NFUFRDT05OIiwgU09fQUNDRVBUQ09OTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQUNDRVBUQ09OTik7CiAjZW5kaWYKICNpZmRlZiAgU09fUkVVU0VBRERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JFVVNFQUREUiIsIFNPX1JFVVNFQUREUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkVVU0VBRERSKTsKICNlbmRpZgogI2lmZGVmIFNPX0VYQ0xVU0lWRUFERFJVU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRVhDTFVTSVZFQUREUlVTRSIsIFNPX0VYQ0xVU0lWRUFERFJVU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0VYQ0xVU0lWRUFERFJVU0UpOwogI2VuZGlmCiAKICNpZmRlZiAgU09fS0VFUEFMSVZFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0tFRVBBTElWRSIsIFNPX0tFRVBBTElWRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fS0VFUEFMSVZFKTsKICNlbmRpZgogI2lmZGVmICBTT19ET05UUk9VVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRE9OVFJPVVRFIiwgU09fRE9OVFJPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19ET05UUk9VVEUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0JST0FEQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19CUk9BRENBU1QiLCBTT19CUk9BRENBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0JST0FEQ0FTVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fVVNFTE9PUEJBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fVVNFTE9PUEJBQ0siLCBTT19VU0VMT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fVVNFTE9PUEJBQ0spOwogI2VuZGlmCiAjaWZkZWYgIFNPX0xJTkdFUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19MSU5HRVIiLCBTT19MSU5HRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0xJTkdFUik7CiAjZW5kaWYKICNpZmRlZiAgU09fT09CSU5MSU5FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX09PQklOTElORSIsIFNPX09PQklOTElORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fT09CSU5MSU5FKTsKICNlbmRpZgogI2lmZGVmICBTT19SRVVTRVBPUlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkVVU0VQT1JUIiwgU09fUkVVU0VQT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SRVVTRVBPUlQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NOREJVRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRCVUYiLCBTT19TTkRCVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NOREJVRik7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWQlVGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVkJVRiIsIFNPX1JDVkJVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWQlVGKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRMT1dBVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRMT1dBVCIsIFNPX1NORExPV0FUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRMT1dBVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWTE9XQVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWTE9XQVQiLCBTT19SQ1ZMT1dBVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWTE9XQVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NORFRJTUVPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NORFRJTUVPIiwgU09fU05EVElNRU8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NORFRJTUVPKTsKICNlbmRpZgogI2lmZGVmICBTT19SQ1ZUSU1FTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZUSU1FTyIsIFNPX1JDVlRJTUVPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SQ1ZUSU1FTyk7CiAjZW5kaWYKICNpZmRlZiAgU09fRVJST1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRVJST1IiLCBTT19FUlJPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRVJST1IpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fVFlQRSIsIFNPX1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1RZUEUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NFVEZJQgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TRVRGSUIiLCBTT19TRVRGSUIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NFVEZJQik7CiAjZW5kaWYKICNpZmRlZiAgU09fUEFTU0NSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUEFTU0NSRUQiLCBTT19QQVNTQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUEFTU0NSRUQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1BFRVJDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1BFRVJDUkVEIiwgU09fUEVFUkNSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BFRVJDUkVEKTsKICNlbmRpZgogI2lmZGVmICBMT0NBTF9QRUVSQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0NBTF9QRUVSQ1JFRCIsIExPQ0FMX1BFRVJDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NBTF9QRUVSQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgU09fQklORFRPREVWSUNFCiAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQklORFRPREVWSUNFKTsKQEAgLTYwMDEsMzEyICs2MjQ0LDMzMCBAQAogCiAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yICJsaXN0ZW4iICovCiAjaWZkZWYgIFNPTUFYQ09OTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT01BWENPTk4iLCBTT01BWENPTk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTUFYQ09OTik7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT01BWENPTk4iLCA1KTsgLyogQ29tbW9uIHZhbHVlICovCiAjZW5kaWYKIAogICAgIC8qIEFuY2lsbGlhcnkgbWVzc2FnZSB0eXBlcyAqLwogI2lmZGVmICBTQ01fUklHSFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9SSUdIVFMiLCBTQ01fUklHSFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fUklHSFRTKTsKICNlbmRpZgogI2lmZGVmICBTQ01fQ1JFREVOVElBTFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX0NSRURFTlRJQUxTIiwgU0NNX0NSRURFTlRJQUxTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fQ1JFREVOVElBTFMpOwogI2VuZGlmCiAjaWZkZWYgIFNDTV9DUkVEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fQ1JFRFMiLCBTQ01fQ1JFRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDTV9DUkVEUyk7CiAjZW5kaWYKIAogICAgIC8qIEZsYWdzIGZvciBzZW5kLCByZWN2ICovCiAjaWZkZWYgIE1TR19PT0IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX09PQiIsIE1TR19PT0IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19PT0IpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19QRUVLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19QRUVLIiwgTVNHX1BFRUspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19QRUVLKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRE9OVFJPVVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19ET05UUk9VVEUiLCBNU0dfRE9OVFJPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRE9OVFJPVVRFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRE9OVFdBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0RPTlRXQUlUIiwgTVNHX0RPTlRXQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRE9OVFdBSVQpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FT1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VPUiIsIE1TR19FT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FT1IpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19UUlVOQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfVFJVTkMiLCBNU0dfVFJVTkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19UUlVOQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NUUlVOQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ1RSVU5DIiwgTVNHX0NUUlVOQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NUUlVOQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX1dBSVRBTEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1dBSVRBTEwiLCBNU0dfV0FJVEFMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX1dBSVRBTEwpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19CVEFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19CVEFHIiwgTVNHX0JUQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19CVEFHKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRVRBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRVRBRyIsIE1TR19FVEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRVRBRyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX05PU0lHTkFMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19OT1NJR05BTCIsIE1TR19OT1NJR05BTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX05PU0lHTkFMKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTk9USUZJQ0FUSU9OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19OT1RJRklDQVRJT04iLCBNU0dfTk9USUZJQ0FUSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTk9USUZJQ0FUSU9OKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ01TR19DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DTVNHX0NMT0VYRUMiLCBNU0dfQ01TR19DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ01TR19DTE9FWEVDKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRVJSUVVFVUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VSUlFVRVVFIiwgTVNHX0VSUlFVRVVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRVJSUVVFVUUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DT05GSVJNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DT05GSVJNIiwgTVNHX0NPTkZJUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DT05GSVJNKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTU9SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTU9SRSIsIE1TR19NT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTU9SRSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VPRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRU9GIiwgTVNHX0VPRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VPRik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0JDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19CQ0FTVCIsIE1TR19CQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0JDQVNUKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTUNBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX01DQVNUIiwgTVNHX01DQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTUNBU1QpOworI2VuZGlmCisjaWZkZWYgTVNHX0ZBU1RPUEVOCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0ZBU1RPUEVOKTsKICNlbmRpZgogCiAgICAgLyogUHJvdG9jb2wgbGV2ZWwgYW5kIG51bWJlcnMsIHVzYWJsZSBmb3IgW2dzXWV0c29ja29wdCAqLwogI2lmZGVmICBTT0xfU09DS0VUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9TT0NLRVQiLCBTT0xfU09DS0VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfU09DS0VUKTsKICNlbmRpZgogI2lmZGVmICBTT0xfSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQIiwgU09MX0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfSVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQIiwgMCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0lQWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSVBYIiwgU09MX0lQWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0lQWCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0FYMjUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0FYMjUiLCBTT0xfQVgyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0FYMjUpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9BVEFMSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQVRBTEsiLCBTT0xfQVRBTEspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9BVEFMSyk7CiAjZW5kaWYKICNpZmRlZiAgU09MX05FVFJPTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfTkVUUk9NIiwgU09MX05FVFJPTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX05FVFJPTSk7CiAjZW5kaWYKICNpZmRlZiAgU09MX1JPU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1JPU0UiLCBTT0xfUk9TRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1JPU0UpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9UQ1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RDUCIsIFNPTF9UQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9UQ1ApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RDUCIsIDYpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9VRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1VEUCIsIFNPTF9VRFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9VRFApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1VEUCIsIDE3KTsKICNlbmRpZgogI2lmZGVmIFNPTF9DQU5fQkFTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQ0FOX0JBU0UiLCBTT0xfQ0FOX0JBU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9DQU5fQkFTRSk7CiAjZW5kaWYKICNpZmRlZiBTT0xfQ0FOX1JBVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQ0FOX1JBVyIsIFNPTF9DQU5fUkFXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBVyIsIENBTl9SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9DQU5fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VGRl9GTEFHIiwgQ0FOX0VGRl9GTEFHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JUUl9GTEFHIiwgQ0FOX1JUUl9GTEFHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VSUl9GTEFHIiwgQ0FOX0VSUl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRUZGX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SVFJfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VSUl9GTEFHKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fU0ZGX01BU0siLCBDQU5fU0ZGX01BU0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRUZGX01BU0siLCBDQU5fRUZGX01BU0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRVJSX01BU0siLCBDQU5fRVJSX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9TRkZfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VGRl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRVJSX01BU0spOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9MSU5VWF9DQU5fUkFXX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19GSUxURVIiLCBDQU5fUkFXX0ZJTFRFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfRVJSX0ZJTFRFUiIsIENBTl9SQVdfRVJSX0ZJTFRFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfTE9PUEJBQ0siLCBDQU5fUkFXX0xPT1BCQUNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19SRUNWX09XTl9NU0dTIiwgQ0FOX1JBV19SRUNWX09XTl9NU0dTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19FUlJfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0xPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX1JFQ1ZfT1dOX01TR1MpOworI2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9DQU5fQkNNX0gKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fQkNNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TRVRVUCIsIFRYX1NFVFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9ERUxFVEUiLCBUWF9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1JFQUQiLCBUWF9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TRU5EIiwgVFhfU0VORCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfU0VUVVAiLCBSWF9TRVRVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfREVMRVRFIiwgUlhfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9SRUFEIiwgUlhfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU1RBVFVTIiwgVFhfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9FWFBJUkVEIiwgVFhfRVhQSVJFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfU1RBVFVTIiwgUlhfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9USU1FT1VUIiwgUlhfVElNRU9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfQ0hBTkdFRCIsIFJYX0NIQU5HRUQpOwogI2VuZGlmCiAjaWZkZWYgU09MX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfUkRTIiwgU09MX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1JEUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ0FOQ0VMX1NFTlRfVE8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NBTkNFTF9TRU5UX1RPIiwgUkRTX0NBTkNFTF9TRU5UX1RPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ0FOQ0VMX1NFTlRfVE8pOwogI2VuZGlmCiAjaWZkZWYgUkRTX0dFVF9NUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfR0VUX01SIiwgUkRTX0dFVF9NUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0dFVF9NUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfRlJFRV9NUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfRlJFRV9NUiIsIFJEU19GUkVFX01SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfRlJFRV9NUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkVDVkVSUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkVDVkVSUiIsIFJEU19SRUNWRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkVDVkVSUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ09OR19NT05JVE9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DT05HX01PTklUT1IiLCBSRFNfQ09OR19NT05JVE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ09OR19NT05JVE9SKTsKICNlbmRpZgogI2lmZGVmIFJEU19HRVRfTVJfRk9SX0RFU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0dFVF9NUl9GT1JfREVTVCIsIFJEU19HRVRfTVJfRk9SX0RFU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19HRVRfTVJfRk9SX0RFU1QpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUCIsIElQUFJPVE9fSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUCIsIDApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0hPUE9QVFMiLCBJUFBST1RPX0hPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JQ01QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUCIsIElQUFJPVE9fSUNNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JQ01QKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUCIsIDEpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUdNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lHTVAiLCBJUFBST1RPX0lHTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUdNUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19HR1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19HR1AiLCBJUFBST1RPX0dHUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19HR1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjQiLCBJUFBST1RPX0lQVjQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNiIsIElQUFJPVE9fSVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUElQIiwgSVBQUk9UT19JUElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQSVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVENQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVENQIiwgSVBQUk9UT19UQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVENQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVENQIiwgNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FR1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FR1AiLCBJUFBST1RPX0VHUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FR1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUFVQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUFVQIiwgSVBQUk9UT19QVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUFVQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1VEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1VEUCIsIElQUFJPVE9fVURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1VEUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1VEUCIsIDE3KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lEUCIsIElQUFJPVE9fSURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lEUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19IRUxMTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0hFTExPIiwgSVBQUk9UT19IRUxMTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19IRUxMTyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19ORAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX05EIiwgSVBQUk9UT19ORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19ORCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19UUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RQIiwgSVBQUk9UT19UUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19UUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNiIsIElQUFJPVE9fSVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1JPVVRJTkcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19ST1VUSU5HIiwgSVBQUk9UT19ST1VUSU5HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JPVVRJTkcpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRlJBR01FTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19GUkFHTUVOVCIsIElQUFJPVE9fRlJBR01FTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRlJBR01FTlQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUlNWUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JTVlAiLCBJUFBST1RPX1JTVlApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUlNWUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19HUkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19HUkUiLCBJUFBST1RPX0dSRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19HUkUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRVNQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRVNQIiwgSVBQUk9UT19FU1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRVNQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0FICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fQUgiLCBJUFBST1RPX0FIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0FIKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX01PQklMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX01PQklMRSIsIElQUFJPVE9fTU9CSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX01PQklMRSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JQ01QVjYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JQ01QVjYiLCBJUFBST1RPX0lDTVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JQ01QVjYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTk9ORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX05PTkUiLCBJUFBST1RPX05PTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTk9ORSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19EU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRFNUT1BUUyIsIElQUFJPVE9fRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19EU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1hUUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1hUUCIsIElQUFJPVE9fWFRQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1hUUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FT04KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FT04iLCBJUFBST1RPX0VPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FT04pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUElNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUElNIiwgSVBQUk9UT19QSU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUElNKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQQ09NUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQQ09NUCIsIElQUFJPVE9fSVBDT01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQQ09NUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19WUlJQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVlJSUCIsIElQUFJPVE9fVlJSUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19WUlJQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1NDVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19TQ1RQIiwgSVBQUk9UT19TQ1RQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1NDVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fQklQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fQklQIiwgSVBQUk9UT19CSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fQklQKTsKICNlbmRpZgogLyoqLwogI2lmZGVmICBJUFBST1RPX1JBVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JBVyIsIElQUFJPVE9fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JBVyk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JBVyIsIDI1NSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19NQVgiLCBJUFBST1RPX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19NQVgpOwogI2VuZGlmCiAKICNpZmRlZiAgU1lTUFJPVE9fQ09OVFJPTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTWVNQUk9UT19DT05UUk9MIiwgU1lTUFJPVE9fQ09OVFJPTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1lTUFJPVE9fQ09OVFJPTCk7CiAjZW5kaWYKIAogICAgIC8qIFNvbWUgcG9ydCBjb25maWd1cmF0aW9uICovCiAjaWZkZWYgIElQUE9SVF9SRVNFUlZFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfUkVTRVJWRUQiLCBJUFBPUlRfUkVTRVJWRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUE9SVF9SRVNFUlZFRCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfUkVTRVJWRUQiLCAxMDI0KTsKICNlbmRpZgogI2lmZGVmICBJUFBPUlRfVVNFUlJFU0VSVkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9VU0VSUkVTRVJWRUQiLCBJUFBPUlRfVVNFUlJFU0VSVkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBPUlRfVVNFUlJFU0VSVkVEKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9VU0VSUkVTRVJWRUQiLCA1MDAwKTsKICNlbmRpZgogCiAgICAgLyogU29tZSByZXNlcnZlZCBJUCB2LjQgYWRkcmVzc2VzICovCiAjaWZkZWYgIElOQUREUl9BTlkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FOWSIsIElOQUREUl9BTlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9BTlkpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FOWSIsIDB4MDAwMDAwMDApOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9CUk9BRENBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0JST0FEQ0FTVCIsIElOQUREUl9CUk9BRENBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9CUk9BRENBU1QpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0JST0FEQ0FTVCIsIDB4ZmZmZmZmZmYpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9MT09QQkFDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTE9PUEJBQ0siLCBJTkFERFJfTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9MT09QQkFDSyk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTE9PUEJBQ0siLCAweDdGMDAwMDAxKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfVU5TUEVDX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9VTlNQRUNfR1JPVVAiLCBJTkFERFJfVU5TUEVDX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfVU5TUEVDX0dST1VQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9VTlNQRUNfR1JPVVAiLCAweGUwMDAwMDAwKTsKICNlbmRpZgpAQCAtNjMxNywzNTQgKzY1NzgsMzUzIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTExIT1NUU19HUk9VUCIsIDB4ZTAwMDAwMDEpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9NQVhfTE9DQUxfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX01BWF9MT0NBTF9HUk9VUCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5BRERSX01BWF9MT0NBTF9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX01BWF9MT0NBTF9HUk9VUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTUFYX0xPQ0FMX0dST1VQIiwgMHhlMDAwMDBmZik7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX05PTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX05PTkUiLCBJTkFERFJfTk9ORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX05PTkUpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX05PTkUiLCAweGZmZmZmZmZmKTsKICNlbmRpZgogCiAgICAgLyogSVB2NCBbZ3NdZXRzb2Nrb3B0IG9wdGlvbnMgKi8KICNpZmRlZiAgSVBfT1BUSU9OUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9PUFRJT05TIiwgSVBfT1BUSU9OUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfT1BUSU9OUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfSERSSU5DTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9IRFJJTkNMIiwgSVBfSERSSU5DTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfSERSSU5DTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVE9TCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RPUyIsIElQX1RPUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVE9TKTsKICNlbmRpZgogI2lmZGVmICBJUF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVFRMIiwgSVBfVFRMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZPUFRTIiwgSVBfUkVDVk9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWUkVUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWUkVUT1BUUyIsIElQX1JFQ1ZSRVRPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWUkVUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVkRTVEFERFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVkRTVEFERFIiLCBJUF9SRUNWRFNUQUREUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVkRTVEFERFIpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVUT1BUUyIsIElQX1JFVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9JRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfSUYiLCBJUF9NVUxUSUNBU1RfSUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9JRik7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfVFRMIiwgSVBfTVVMVElDQVNUX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX0xPT1AiLCBJUF9NVUxUSUNBU1RfTE9PUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQX0FERF9NRU1CRVJTSElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0FERF9NRU1CRVJTSElQIiwgSVBfQUREX01FTUJFUlNISVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0FERF9NRU1CRVJTSElQKTsKICNlbmRpZgogI2lmZGVmICBJUF9EUk9QX01FTUJFUlNISVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfRFJPUF9NRU1CRVJTSElQIiwgSVBfRFJPUF9NRU1CRVJTSElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9EUk9QX01FTUJFUlNISVApOwogI2VuZGlmCiAjaWZkZWYgIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQX01BWF9NRU1CRVJTSElQUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NQVhfTUVNQkVSU0hJUFMiLCBJUF9NQVhfTUVNQkVSU0hJUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01BWF9NRU1CRVJTSElQUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVFJBTlNQQVJFTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVFJBTlNQQVJFTlQiLCBJUF9UUkFOU1BBUkVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVFJBTlNQQVJFTlQpOwogI2VuZGlmCiAKICAgICAvKiBJUHY2IFtnc11ldHNvY2tvcHQgb3B0aW9ucywgZGVmaW5lZCBpbiBSRkMyNTUzICovCiAjaWZkZWYgIElQVjZfSk9JTl9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0pPSU5fR1JPVVAiLCBJUFY2X0pPSU5fR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSk9JTl9HUk9VUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9MRUFWRV9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0xFQVZFX0dST1VQIiwgSVBWNl9MRUFWRV9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9MRUFWRV9HUk9VUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfSE9QUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X01VTFRJQ0FTVF9IT1BTIiwgSVBWNl9NVUxUSUNBU1RfSE9QUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfSE9QUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfSUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfSUYiLCBJUFY2X01VTFRJQ0FTVF9JRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfSUYpOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfTE9PUCIsIElQVjZfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfVU5JQ0FTVF9IT1BTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVU5JQ0FTVF9IT1BTIiwgSVBWNl9VTklDQVNUX0hPUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVU5JQ0FTVF9IT1BTKTsKICNlbmRpZgogICAgIC8qIEFkZGl0aW9uYWwgSVBWNiBzb2NrZXQgb3B0aW9ucywgZGVmaW5lZCBpbiBSRkMgMzQ5MyAqLwogI2lmZGVmIElQVjZfVjZPTkxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVjZPTkxZIiwgSVBWNl9WNk9OTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVjZPTkxZKTsKICNlbmRpZgogICAgIC8qIEFkdmFuY2VkIElQVjYgc29ja2V0IG9wdGlvbnMsIGZyb20gUkZDIDM1NDIgKi8KICNpZmRlZiBJUFY2X0NIRUNLU1VNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfQ0hFQ0tTVU0iLCBJUFY2X0NIRUNLU1VNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0NIRUNLU1VNKTsKICNlbmRpZgogI2lmZGVmIElQVjZfRE9OVEZSQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9ET05URlJBRyIsIElQVjZfRE9OVEZSQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfRE9OVEZSQUcpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9EU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfRFNUT1BUUyIsIElQVjZfRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9EU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfSE9QTElNSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9IT1BMSU1JVCIsIElQVjZfSE9QTElNSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSE9QTElNSVQpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9IT1BPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSE9QT1BUUyIsIElQVjZfSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9IT1BPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfTkVYVEhPUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X05FWFRIT1AiLCBJUFY2X05FWFRIT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTkVYVEhPUCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1BBVEhNVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9QQVRITVRVIiwgSVBWNl9QQVRITVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1BBVEhNVFUpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9QS1RJTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUEtUSU5GTyIsIElQVjZfUEtUSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9QS1RJTkZPKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkRTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWRFNUT1BUUyIsIElQVjZfUkVDVkRTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkRTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWSE9QTElNSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWSE9QTElNSVQiLCBJUFY2X1JFQ1ZIT1BMSU1JVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWSE9QTElNSVQpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZIT1BPUFRTIiwgSVBWNl9SRUNWSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZQS1RJTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlBLVElORk8iLCBJUFY2X1JFQ1ZQS1RJTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZQS1RJTkZPKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlJUSERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlJUSERSIiwgSVBWNl9SRUNWUlRIRFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlJUSERSKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlRDTEFTUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZUQ0xBU1MiLCBJUFY2X1JFQ1ZUQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlRDTEFTUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFIiLCBJUFY2X1JUSERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFJEU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFJEU1RPUFRTIiwgSVBWNl9SVEhEUkRTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFJEU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFJfVFlQRV8wCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFJfVFlQRV8wIiwgSVBWNl9SVEhEUl9UWVBFXzApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFJfVFlQRV8wKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlBBVEhNVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWUEFUSE1UVSIsIElQVjZfUkVDVlBBVEhNVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlBBVEhNVFUpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9UQ0xBU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9UQ0xBU1MiLCBJUFY2X1RDTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9UQ0xBU1MpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9VU0VfTUlOX01UVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1VTRV9NSU5fTVRVIiwgSVBWNl9VU0VfTUlOX01UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9VU0VfTUlOX01UVSk7CiAjZW5kaWYKIAogICAgIC8qIFRDUCBvcHRpb25zICovCiAjaWZkZWYgIFRDUF9OT0RFTEFZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9OT0RFTEFZIiwgVENQX05PREVMQVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9OT0RFTEFZKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfTUFYU0VHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9NQVhTRUciLCBUQ1BfTUFYU0VHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTUFYU0VHKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfQ09SSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfQ09SSyIsIFRDUF9DT1JLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfQ09SSyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBJRExFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQSURMRSIsIFRDUF9LRUVQSURMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBJRExFKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUElOVFZMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQSU5UVkwiLCBUQ1BfS0VFUElOVFZMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUElOVFZMKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUENOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUENOVCIsIFRDUF9LRUVQQ05UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUENOVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1NZTkNOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfU1lOQ05UIiwgVENQX1NZTkNOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1NZTkNOVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0xJTkdFUjIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0xJTkdFUjIiLCBUQ1BfTElOR0VSMik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0xJTkdFUjIpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9ERUZFUl9BQ0NFUFQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0RFRkVSX0FDQ0VQVCIsIFRDUF9ERUZFUl9BQ0NFUFQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9ERUZFUl9BQ0NFUFQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9XSU5ET1dfQ0xBTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1dJTkRPV19DTEFNUCIsIFRDUF9XSU5ET1dfQ0xBTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9XSU5ET1dfQ0xBTVApOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9JTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9JTkZPIiwgVENQX0lORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9JTkZPKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfUVVJQ0tBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1FVSUNLQUNLIiwgVENQX1FVSUNLQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfUVVJQ0tBQ0spOwogI2VuZGlmCi0KKyNpZmRlZiAgVENQX0ZBU1RPUEVOCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0ZBU1RPUEVOKTsKKyNlbmRpZgogCiAgICAgLyogSVBYIG9wdGlvbnMgKi8KICNpZmRlZiAgSVBYX1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBYX1RZUEUiLCBJUFhfVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBYX1RZUEUpOwogI2VuZGlmCiAKIC8qIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKi8KICNpZmRlZiBSRFNfQ01TR19SRE1BX0FSR1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9BUkdTIiwgUkRTX0NNU0dfUkRNQV9BUkdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX0FSR1MpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9ERVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfREVTVCIsIFJEU19DTVNHX1JETUFfREVTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9ERVNUKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfTUFQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfTUFQIiwgUkRTX0NNU0dfUkRNQV9NQVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfTUFQKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfU1RBVFVTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfU1RBVFVTIiwgUkRTX0NNU0dfUkRNQV9TVEFUVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfU1RBVFVTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfVVBEQVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfVVBEQVRFIiwgUkRTX0NNU0dfUkRNQV9VUERBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfVVBEQVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1JFQURXUklURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9SRUFEV1JJVEUiLCBSRFNfUkRNQV9SRUFEV1JJVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1JFQURXUklURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9GRU5DRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9GRU5DRSIsIFJEU19SRE1BX0ZFTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9GRU5DRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9JTlZBTElEQVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0lOVkFMSURBVEUiLCBSRFNfUkRNQV9JTlZBTElEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9JTlZBTElEQVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1VTRV9PTkNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1VTRV9PTkNFIiwgUkRTX1JETUFfVVNFX09OQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1VTRV9PTkNFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX0RPTlRXQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0RPTlRXQUlUIiwgUkRTX1JETUFfRE9OVFdBSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX0RPTlRXQUlUKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX05PVElGWV9NRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9OT1RJRllfTUUiLCBSRFNfUkRNQV9OT1RJRllfTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX05PVElGWV9NRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9TSUxFTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfU0lMRU5UIiwgUkRTX1JETUFfU0lMRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9TSUxFTlQpOwogI2VuZGlmCiAKICAgICAvKiBnZXR7YWRkcixuYW1lfWluZm8gcGFyYW1ldGVycyAqLwogI2lmZGVmIEVBSV9BRERSRkFNSUxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9BRERSRkFNSUxZIiwgRUFJX0FERFJGQU1JTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9BRERSRkFNSUxZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9BR0FJTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQUdBSU4iLCBFQUlfQUdBSU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9BR0FJTik7CiAjZW5kaWYKICNpZmRlZiBFQUlfQkFERkxBR1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0JBREZMQUdTIiwgRUFJX0JBREZMQUdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQkFERkxBR1MpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0ZBSUwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0ZBSUwiLCBFQUlfRkFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0ZBSUwpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0ZBTUlMWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfRkFNSUxZIiwgRUFJX0ZBTUlMWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0ZBTUlMWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTUVNT1JZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9NRU1PUlkiLCBFQUlfTUVNT1JZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTUVNT1JZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9OT0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX05PREFUQSIsIEVBSV9OT0RBVEEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9OT0RBVEEpOwogI2VuZGlmCiAjaWZkZWYgRUFJX05PTkFNRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTk9OQU1FIiwgRUFJX05PTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX05PTkFNRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfT1ZFUkZMT1cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX09WRVJGTE9XIiwgRUFJX09WRVJGTE9XKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfT1ZFUkZMT1cpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NFUlZJQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NFUlZJQ0UiLCBFQUlfU0VSVklDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NFUlZJQ0UpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NPQ0tUWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TT0NLVFlQRSIsIEVBSV9TT0NLVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NPQ0tUWVBFKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NZU1RFTSIsIEVBSV9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TWVNURU0pOwogI2VuZGlmCiAjaWZkZWYgRUFJX0JBREhJTlRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9CQURISU5UUyIsIEVBSV9CQURISU5UUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0JBREhJTlRTKTsKICNlbmRpZgogI2lmZGVmIEVBSV9QUk9UT0NPTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfUFJPVE9DT0wiLCBFQUlfUFJPVE9DT0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9QUk9UT0NPTCk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9NQVgiLCBFQUlfTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTUFYKTsKICNlbmRpZgogI2lmZGVmIEFJX1BBU1NJVkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfUEFTU0lWRSIsIEFJX1BBU1NJVkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1BBU1NJVkUpOwogI2VuZGlmCiAjaWZkZWYgQUlfQ0FOT05OQU1FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0NBTk9OTkFNRSIsIEFJX0NBTk9OTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQ0FOT05OQU1FKTsKICNlbmRpZgogI2lmZGVmIEFJX05VTUVSSUNIT1NUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX05VTUVSSUNIT1NUIiwgQUlfTlVNRVJJQ0hPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX05VTUVSSUNIT1NUKTsKICNlbmRpZgogI2lmZGVmIEFJX05VTUVSSUNTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX05VTUVSSUNTRVJWIiwgQUlfTlVNRVJJQ1NFUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX05VTUVSSUNTRVJWKTsKICNlbmRpZgogI2lmZGVmIEFJX01BU0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfTUFTSyIsIEFJX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX01BU0spOwogI2VuZGlmCiAjaWZkZWYgQUlfQUxMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0FMTCIsIEFJX0FMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQUxMKTsKICNlbmRpZgogI2lmZGVmIEFJX1Y0TUFQUEVEX0NGRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9WNE1BUFBFRF9DRkciLCBBSV9WNE1BUFBFRF9DRkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1Y0TUFQUEVEX0NGRyk7CiAjZW5kaWYKICNpZmRlZiBBSV9BRERSQ09ORklHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0FERFJDT05GSUciLCBBSV9BRERSQ09ORklHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9BRERSQ09ORklHKTsKICNlbmRpZgogI2lmZGVmIEFJX1Y0TUFQUEVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1Y0TUFQUEVEIiwgQUlfVjRNQVBQRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1Y0TUFQUEVEKTsKICNlbmRpZgogI2lmZGVmIEFJX0RFRkFVTFQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfREVGQVVMVCIsIEFJX0RFRkFVTFQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0RFRkFVTFQpOwogI2VuZGlmCiAjaWZkZWYgTklfTUFYSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9NQVhIT1NUIiwgTklfTUFYSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTUFYSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9NQVhTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX01BWFNFUlYiLCBOSV9NQVhTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9NQVhTRVJWKTsKICNlbmRpZgogI2lmZGVmIE5JX05PRlFETgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OT0ZRRE4iLCBOSV9OT0ZRRE4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05PRlFETik7CiAjZW5kaWYKICNpZmRlZiBOSV9OVU1FUklDSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OVU1FUklDSE9TVCIsIE5JX05VTUVSSUNIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OVU1FUklDSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9OQU1FUkVRRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OQU1FUkVRRCIsIE5JX05BTUVSRVFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OQU1FUkVRRCk7CiAjZW5kaWYKICNpZmRlZiBOSV9OVU1FUklDU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OVU1FUklDU0VSViIsIE5JX05VTUVSSUNTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OVU1FUklDU0VSVik7CiAjZW5kaWYKICNpZmRlZiBOSV9ER1JBTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9ER1JBTSIsIE5JX0RHUkFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9ER1JBTSk7CiAjZW5kaWYKIAogICAgIC8qIHNodXRkb3duKCkgcGFyYW1ldGVycyAqLwogI2lmZGVmIFNIVVRfUkQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIFNIVVRfUkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfUkQpOwogI2VsaWYgZGVmaW5lZChTRF9SRUNFSVZFKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgU0RfUkVDRUlWRSk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgMCk7CiAjZW5kaWYKICNpZmRlZiBTSFVUX1dSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCBTSFVUX1dSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1dSKTsKICNlbGlmIGRlZmluZWQoU0RfU0VORCkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIFNEX1NFTkQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIDEpOwogI2VuZGlmCiAjaWZkZWYgU0hVVF9SRFdSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkRXUiIsIFNIVVRfUkRXUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9SRFdSKTsKICNlbGlmIGRlZmluZWQoU0RfQk9USCkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRFdSIiwgU0RfQk9USCk7CiAjZWxzZQpAQCAtNjY4NCwxNCArNjk0NCwxNCBAQAogICAgICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWVzW2ldLCB0bXApOwogICAgICAgICB9CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT0ZGIiwgUkNWQUxMX09GRik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9PTiIsIFJDVkFMTF9PTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9TT0NLRVRMRVZFTE9OTFkiLCBSQ1ZBTExfU09DS0VUTEVWRUxPTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfT0ZGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9TT0NLRVRMRVZFTE9OTFkpOwogI2lmZGVmIFJDVkFMTF9JUExFVkVMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9JUExFVkVMIiwgUkNWQUxMX0lQTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9JUExFVkVMKTsKICNlbmRpZgogI2lmZGVmIFJDVkFMTF9NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX01BWCIsIFJDVkFMTF9NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9NQVgpOwogI2VuZGlmCiAjZW5kaWYgLyogX01TVENQSVBfICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmggYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCmluZGV4IDA0MzU4NzguLmI4M2Y5YWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaApAQCAtOCw3ICs4LDcgQEAKICMgICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjIGVuZGlmCiAjIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSMgaWYgIShkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IChkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfVkFDUFApKSkKKyMgaWYgIWRlZmluZWQoX19DWUdXSU5fXykKICMgIGluY2x1ZGUgPG5ldGluZXQvdGNwLmg+CiAjIGVuZGlmCiAKQEAgLTgwLDYgKzgwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvY2FuL3Jhdy5oPgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorI2luY2x1ZGUgPGxpbnV4L2Nhbi9iY20uaD4KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9TWVNfU1lTX0RPTUFJTl9ICiAjaW5jbHVkZSA8c3lzL3N5c19kb21haW4uaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwppbmRleCAxOTRhZTE5Li42OGVhMWI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwpAQCAtMjYsMjIgKzI2LDI0IEBACiAjaWYgZGVmaW5lZChIQVZFX0dFVFNQTkFNKSB8fCBkZWZpbmVkKEhBVkVfR0VUU1BFTlQpCiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIHN0cnVjdF9zcHdkX3R5cGVfZmllbGRzW10gPSB7Ci0gICAgeyJzcF9uYW0iLCAibG9naW4gbmFtZSJ9LAotICAgIHsic3BfcHdkIiwgImVuY3J5cHRlZCBwYXNzd29yZCJ9LAorICAgIHsic3BfbmFtcCIsICJsb2dpbiBuYW1lIn0sCisgICAgeyJzcF9wd2RwIiwgImVuY3J5cHRlZCBwYXNzd29yZCJ9LAogICAgIHsic3BfbHN0Y2hnIiwgImRhdGUgb2YgbGFzdCBjaGFuZ2UifSwKICAgICB7InNwX21pbiIsICJtaW4gI2RheXMgYmV0d2VlbiBjaGFuZ2VzIn0sCiAgICAgeyJzcF9tYXgiLCAibWF4ICNkYXlzIGJldHdlZW4gY2hhbmdlcyJ9LAogICAgIHsic3Bfd2FybiIsICIjZGF5cyBiZWZvcmUgcHcgZXhwaXJlcyB0byB3YXJuIHVzZXIgYWJvdXQgaXQifSwKLSAgICB7InNwX2luYWN0IiwgIiNkYXlzIGFmdGVyIHB3IGV4cGlyZXMgdW50aWwgYWNjb3VudCBpcyBibG9ja2VkIn0sCi0gICAgeyJzcF9leHBpcmUiLCAiI2RheXMgc2luY2UgMTk3MC0wMS0wMSB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkIn0sCisgICAgeyJzcF9pbmFjdCIsICIjZGF5cyBhZnRlciBwdyBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQifSwKKyAgICB7InNwX2V4cGlyZSIsICIjZGF5cyBzaW5jZSAxOTcwLTAxLTAxIHdoZW4gYWNjb3VudCBleHBpcmVzIn0sCiAgICAgeyJzcF9mbGFnIiwgInJlc2VydmVkIn0sCisgICAgeyJzcF9uYW0iLCAibG9naW4gbmFtZTsgZGVwcmVjYXRlZCJ9LCAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisgICAgeyJzcF9wd2QiLCAiZW5jcnlwdGVkIHBhc3N3b3JkOyBkZXByZWNhdGVkIn0sIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgICB7MH0KIH07CiAKIFB5RG9jX1NUUlZBUihzdHJ1Y3Rfc3B3ZF9fZG9jX18sCiAic3B3ZC5zdHJ1Y3Rfc3B3ZDogUmVzdWx0cyBmcm9tIGdldHNwKigpIHJvdXRpbmVzLlxuXG5cCiBUaGlzIG9iamVjdCBtYXkgYmUgYWNjZXNzZWQgZWl0aGVyIGFzIGEgOS10dXBsZSBvZlxuXAotICAoc3BfbmFtLHNwX3B3ZCxzcF9sc3RjaGcsc3BfbWluLHNwX21heCxzcF93YXJuLHNwX2luYWN0LHNwX2V4cGlyZSxzcF9mbGFnKVxuXAorICAoc3BfbmFtcCxzcF9wd2RwLHNwX2xzdGNoZyxzcF9taW4sc3BfbWF4LHNwX3dhcm4sc3BfaW5hY3Qsc3BfZXhwaXJlLHNwX2ZsYWcpXG5cCiBvciB2aWEgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIGFzIG5hbWVkIGluIHRoZSBhYm92ZSB0dXBsZS4iKTsKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRGVzYyBzdHJ1Y3Rfc3B3ZF90eXBlX2Rlc2MgPSB7CkBAIC04Niw2ICs4OCw4IEBACiAgICAgU0VUSShzZXRJbmRleCsrLCBwLT5zcF9pbmFjdCk7CiAgICAgU0VUSShzZXRJbmRleCsrLCBwLT5zcF9leHBpcmUpOwogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfZmxhZyk7CisgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5zcF9uYW1wKTsgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3Igc3BfbmFtICovCisgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5zcF9wd2RwKTsgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3Igc3BfcHdkICovCiAKICN1bmRlZiBTRVRTCiAjdW5kZWYgU0VUSQpAQCAtMTk2LDkgKzIwMCwxMSBAQAogICAgIG09UHlNb2R1bGVfQ3JlYXRlKCZzcHdkbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RTcHdkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3Nwd2RfdHlwZV9kZXNjKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0U3B3ZFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3Nwd2RfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSAmU3RydWN0U3B3ZFR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3Nwd2QiLCAoUHlPYmplY3QgKikgJlN0cnVjdFNwd2RUeXBlKTsKICAgICBpbml0aWFsaXplZCA9IDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZS5oIGIvTW9kdWxlcy9zcmUuaAppbmRleCAwYThmMGNmLi42MjFlMmQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NyZS5oCisrKyBiL01vZHVsZXMvc3JlLmgKQEAgLTMxLDkgKzMxLDcgQEAKICAgICBQeU9iamVjdCogcGF0dGVybjsgLyogcGF0dGVybiBzb3VyY2UgKG9yIE5vbmUpICovCiAgICAgaW50IGZsYWdzOyAvKiBmbGFncyB1c2VkIHdoZW4gY29tcGlsaW5nIHBhdHRlcm4gc291cmNlICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplOyAvKiBwYXR0ZXJuIGNoYXJzaXplIChvciAtMSkgKi8KLSAgICBpbnQgY2hhcnNpemU7Ci0gICAgUHlfYnVmZmVyIHZpZXc7CisgICAgaW50IGlzYnl0ZXM7IC8qIHBhdHRlcm4gdHlwZSAoMSAtIGJ5dGVzLCAwIC0gc3RyaW5nLCAtMSAtIE5vbmUpICovCiAgICAgLyogcGF0dGVybiBjb2RlICovCiAgICAgUHlfc3NpemVfdCBjb2Rlc2l6ZTsKICAgICBTUkVfQ09ERSBjb2RlWzFdOwpAQCAtNzMsOSArNzEsOCBAQAogICAgIC8qIGF0dHJpYnV0ZXMgZm9yIHRoZSBtYXRjaCBvYmplY3QgKi8KICAgICBQeU9iamVjdCogc3RyaW5nOwogICAgIFB5X3NzaXplX3QgcG9zLCBlbmRwb3M7Ci0gICAgLyogY2hhcmFjdGVyIHNpemUgKi8KLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZTsgLyoga2luZCBvZiB0aGluZzogMSAtIGJ5dGVzLCAyLzQgLSB1bmljb2RlICovCi0gICAgaW50IGNoYXJzaXplOworICAgIGludCBpc2J5dGVzOworICAgIGludCBjaGFyc2l6ZTsgLyogY2hhcmFjdGVyIHNpemUgKi8KICAgICAvKiByZWdpc3RlcnMgKi8KICAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKICAgICBQeV9zc2l6ZV90IGxhc3RtYXJrOwpAQCAtODksNiArODYsNyBAQAogICAgIFNSRV9SRVBFQVQgKnJlcGVhdDsKICAgICAvKiBob29rcyAqLwogICAgIFNSRV9UT0xPV0VSX0hPT0sgbG93ZXI7CisgICAgaW50IG1hdGNoX2FsbDsKIH0gU1JFX1NUQVRFOwogCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaCBiL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCmluZGV4IDEzYzg5NTguLjU5NDBkNWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCisrKyBiL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCkBAIC04MSw2ICs4MSw4IEBACiAjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAxNgogI2RlZmluZSBTUkVfRkxBR19VTklDT0RFIDMyCiAjZGVmaW5lIFNSRV9GTEFHX1ZFUkJPU0UgNjQKKyNkZWZpbmUgU1JFX0ZMQUdfREVCVUcgMTI4CisjZGVmaW5lIFNSRV9GTEFHX0FTQ0lJIDI1NgogI2RlZmluZSBTUkVfSU5GT19QUkVGSVggMQogI2RlZmluZSBTUkVfSU5GT19MSVRFUkFMIDIKICNkZWZpbmUgU1JFX0lORk9fQ0hBUlNFVCA0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZV9saWIuaCBiL01vZHVsZXMvc3JlX2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODY2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3NyZV9saWIuaApAQCAtMCwwICsxLDEzNDMgQEAKKy8qCisgKiBTZWNyZXQgTGFicycgUmVndWxhciBFeHByZXNzaW9uIEVuZ2luZQorICoKKyAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBlbmdpbmUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMSBieSBTZWNyZXQgTGFicyBBQi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU2VlIHRoZSBfc3JlLmMgZmlsZSBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kIHJlZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFN0cmluZyBtYXRjaGluZyBlbmdpbmUgKi8KKworLyogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzLCB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0dGluZ3MgKi8KKworTE9DQUwoaW50KQorU1JFKGF0KShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ0hBUiogcHRyLCBTUkVfQ09ERSBhdCkKK3sKKyAgICAvKiBjaGVjayBpZiBwb2ludGVyIGlzIGF0IGdpdmVuIHBvc2l0aW9uICovCisKKyAgICBQeV9zc2l6ZV90IHRoaXNwLCB0aGF0cDsKKworICAgIHN3aXRjaCAoYXQpIHsKKworICAgIGNhc2UgU1JFX0FUX0JFR0lOTklORzoKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfU1RSSU5HOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcpOworCisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX0xJTkU6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyB8fAorICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgcHRyWy0xXSkpOworCisgICAgY2FzZSBTUkVfQVRfRU5EOgorICAgICAgICByZXR1cm4gKCgodm9pZCopIChwdHIrMSkgPT0gc3RhdGUtPmVuZCAmJgorICAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clswXSkpIHx8CisgICAgICAgICAgICAgICAgKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQpKTsKKworICAgIGNhc2UgU1JFX0FUX0VORF9MSU5FOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQgfHwKKyAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clswXSkpOworCisgICAgY2FzZSBTUkVfQVRfRU5EX1NUUklORzoKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKTsKKworICAgIGNhc2UgU1JFX0FUX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9OT05fQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX0xPQ19CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9MT0NfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX1VOSV9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9VTklfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitMT0NBTChpbnQpCitTUkUoY2hhcnNldCkoU1JFX0NPREUqIHNldCwgU1JFX0NPREUgY2gpCit7CisgICAgLyogY2hlY2sgaWYgY2hhcmFjdGVyIGlzIGEgbWVtYmVyIG9mIHRoZSBnaXZlbiBzZXQgKi8KKworICAgIGludCBvayA9IDE7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHN3aXRjaCAoKnNldCsrKSB7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfRkFJTFVSRToKKyAgICAgICAgICAgIHJldHVybiAhb2s7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSBzZXRbMF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0Kys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKKyAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCisgICAgICAgICAgICBpZiAoc3JlX2NhdGVnb3J5KHNldFswXSwgKGludCkgY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0hBUlNFVDoKKyAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAqLworICAgICAgICAgICAgaWYgKGNoIDwgMjU2ICYmCisgICAgICAgICAgICAgICAgKHNldFtjaC9TUkVfQ09ERV9CSVRTXSAmICgxdSA8PCAoY2ggJiAoU1JFX0NPREVfQklUUy0xKSkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gMjU2L1NSRV9DT0RFX0JJVFM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9SQU5HRToKKyAgICAgICAgICAgIC8qIDxSQU5HRT4gPGxvd2VyPiA8dXBwZXI+ICovCisgICAgICAgICAgICBpZiAoc2V0WzBdIDw9IGNoICYmIGNoIDw9IHNldFsxXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05FR0FURToKKyAgICAgICAgICAgIG9rID0gIW9rOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKKyAgICAgICAgICAgIC8qIDxCSUdDSEFSU0VUPiA8YmxvY2tjb3VudD4gPDI1NiBibG9ja2luZGljZXM+IDxibG9ja3M+ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgY291bnQsIGJsb2NrOworICAgICAgICAgICAgY291bnQgPSAqKHNldCsrKTsKKworICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMHUpCisgICAgICAgICAgICAgICAgYmxvY2sgPSAoKHVuc2lnbmVkIGNoYXIqKXNldClbY2ggPj4gOF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmxvY2sgPSAtMTsKKyAgICAgICAgICAgIHNldCArPSAyNTYvc2l6ZW9mKFNSRV9DT0RFKTsKKyAgICAgICAgICAgIGlmIChibG9jayA+PTAgJiYKKyAgICAgICAgICAgICAgICAoc2V0WyhibG9jayAqIDI1NiArIChjaCAmIDI1NSkpL1NSRV9DT0RFX0JJVFNdICYKKyAgICAgICAgICAgICAgICAgICAgKDF1IDw8IChjaCAmIChTUkVfQ09ERV9CSVRTLTEpKSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCArPSBjb3VudCAqICgyNTYvU1JFX0NPREVfQklUUyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBpbnRlcm5hbCBlcnJvciAtLSB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCBpdAorICAgICAgICAgICAgICAgaGVyZSwgc28gbGV0J3MganVzdCBwcmV0ZW5kIGl0IGRpZG4ndCBtYXRjaC4uLiAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0xPQ0FMKFB5X3NzaXplX3QpIFNSRShtYXRjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pOworCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKGNvdW50KShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBTUkVfQ09ERSBjaHI7CisgICAgU1JFX0NIQVIgYzsKKyAgICBTUkVfQ0hBUiogcHRyID0gKFNSRV9DSEFSICopc3RhdGUtPnB0cjsKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICAvKiBhZGp1c3QgZW5kICovCisgICAgaWYgKG1heGNvdW50IDwgZW5kIC0gcHRyICYmIG1heGNvdW50ICE9IFNSRV9NQVhSRVBFQVQpCisgICAgICAgIGVuZCA9IHB0ciArIG1heGNvdW50OworCisgICAgc3dpdGNoIChwYXR0ZXJuWzBdKSB7CisKKyAgICBjYXNlIFNSRV9PUF9JTjoKKyAgICAgICAgLyogcmVwZWF0ZWQgc2V0ICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIElOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBTUkUoY2hhcnNldCkocGF0dGVybiArIDIsICpwdHIpKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfQU5ZOgorICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWVxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9JU19MSU5FQlJFQUsoKnB0cikpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgorICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICBza2lwIHRvIHRoZSBlbmQgb2YgdGhlIHRhcmdldAorICAgICAgICAgICBzdHJpbmcsIGFuZCBiYWNrdHJhY2sgZnJvbSB0aGVyZSAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllfQUxMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgcHRyID0gZW5kOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgYyA9IChTUkVfQ0hBUikgY2hyOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBjaHIpCisgICAgICAgICAgICA7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciA9PSBjKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6CisgICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoKnB0cikgPT0gY2hyKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6CisgICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICBjID0gKFNSRV9DSEFSKSBjaHI7CisjaWYgU0laRU9GX1NSRV9DSEFSIDwgNAorICAgICAgICBpZiAoKFNSRV9DT0RFKSBjICE9IGNocikKKyAgICAgICAgICAgIHB0ciA9IGVuZDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9IGMpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6CisgICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcigqcHRyKSAhPSBjaHIpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiByZXBlYXRlZCBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4gKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgU1VCUEFUVEVSTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlICgoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyIDwgZW5kKSB7CisgICAgICAgICAgICBpID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybik7CisgICAgICAgICAgICBpZiAoaSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAorICAgICAgICAgICAgICAgKFNSRV9DSEFSKikgc3RhdGUtPnB0ciAtIHB0cikpOworICAgICAgICByZXR1cm4gKFNSRV9DSEFSKikgc3RhdGUtPnB0ciAtIHB0cjsKKyAgICB9CisKKyAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCisgICAgICAgICAgIHB0ciAtIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIpKTsKKyAgICByZXR1cm4gcHRyIC0gKFNSRV9DSEFSKikgc3RhdGUtPnB0cjsKK30KKworI2lmIDAgLyogbm90IHVzZWQgaW4gdGhpcyByZWxlYXNlICovCitMT0NBTChpbnQpCitTUkUoaW5mbykoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgLyogY2hlY2sgaWYgYW4gU1JFX09QX0lORk8gYmxvY2sgbWF0Y2hlcyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICByZXR1cm5zIHRoZSBudW1iZXIgb2YgU1JFX0NPREUgb2JqZWN0cyB0byBza2lwIGlmIHN1Y2Nlc3NmdWwsIDAKKyAgICAgICBpZiBubyBtYXRjaCAqLworCisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiopIHN0YXRlLT5lbmQ7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiopIHN0YXRlLT5wdHI7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgLyogY2hlY2sgbWluaW1hbCBsZW5ndGggKi8KKyAgICBpZiAocGF0dGVyblszXSAmJiBlbmQgLSBwdHIgPCBwYXR0ZXJuWzNdKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGNoZWNrIGtub3duIHByZWZpeCAqLworICAgIGlmIChwYXR0ZXJuWzJdICYgU1JFX0lORk9fUFJFRklYICYmIHBhdHRlcm5bNV0gPiAxKSB7CisgICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuWzVdOyBpKyspCisgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBwdHJbaV0gIT0gcGF0dGVybls3ICsgaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwYXR0ZXJuWzBdICsgMiAqIHBhdHRlcm5bNl07CisgICAgfQorICAgIHJldHVybiBwYXR0ZXJuWzBdOworfQorI2VuZGlmCisKKy8qIFRoZSBtYWNyb3MgYmVsb3cgc2hvdWxkIGJlIHVzZWQgdG8gcHJvdGVjdCByZWN1cnNpdmUgU1JFKG1hdGNoKSgpCisgKiBjYWxscyB0aGF0ICpmYWlsZWQqIGFuZCBkbyAqbm90KiByZXR1cm4gaW1tZWRpYXRlbHkgKElPVywgdGhvc2UKKyAqIHRoYXQgd2lsbCBiYWNrdHJhY2spLiBFeHBsYWluaW5nOgorICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCB0cnVlOiB0aGF0J3MgdXN1YWxseSBhIHN1Y2Nlc3MKKyAqICAgKGJlc2lkZXMgYXR5cGljYWwgY2FzZXMgbGlrZSBBU1NFUlRfTk9UKSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8KKyAqICAgcmVhc29uIHRvIHJlc3RvcmUgbGFzdG1hcms7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlIGJ1dCB0aGUgY3VycmVudCBTUkUobWF0Y2gpKCkKKyAqICAgaXMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXI6IElmIHRoZSBjdXJyZW50IFNSRShtYXRjaCkoKSBpcyB0aGUKKyAqICAgdG9wIGZ1bmN0aW9uIG9mIHRoZSByZWN1cnNpb24sIHJldHVybmluZyBmYWxzZSB3aWxsIGJlIGEgbWF0Y2hpbmcKKyAqICAgZmFpbHVyZSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGxhc3RtYXJrIGlzIHBvaW50aW5nIHRvLgorICogICBJZiBpdCdzICpub3QqIHRoZSB0b3AgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYSByZWN1cnNpdmUgU1JFKG1hdGNoKSgpCisgKiAgIGZhaWx1cmUgYnkgaXRzZWxmLCBhbmQgdGhlIGNhbGxpbmcgU1JFKG1hdGNoKSgpIHdpbGwgaGF2ZSB0byBkZWFsCisgKiAgIHdpdGggdGhlIGZhaWx1cmUgYnkgdGhlIHNhbWUgcnVsZXMgZXhwbGFpbmVkIGhlcmUgKGl0IHdpbGwgcmVzdG9yZQorICogICBsYXN0bWFyayBieSBpdHNlbGYgaWYgbmVjZXNzYXJ5KTsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGNvbnRpbnVlIHRoZQorICogICBvdXRzaWRlICdmb3InIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIHdoZW4gYnJlYWtpbmcsIHNpbmNlIHRoZSBuZXh0CisgKiAgIE9QIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyazsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGJlIGNhbGxlZCBhZ2FpbgorICogICBpbnNpZGUgYSBsb2NhbCBmb3Ivd2hpbGUgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgYmV0d2VlbiBlYWNoCisgKiAgIGxvb3AgaXRlcmF0aW9uLCBzaW5jZSB0aGUgcmVjdXJzaXZlIFNSRShtYXRjaCkoKSBjb3VsZCBkbyBhbnl0aGluZywKKyAqICAgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyay4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgdGhlIGRpc2N1c3Npb24gYXQgU0YgcGF0Y2ggIzcxMjkwMC4KKyAqLworI2RlZmluZSBMQVNUTUFSS19TQVZFKCkgICAgIFwKKyAgICBkbyB7IFwKKyAgICAgICAgY3R4LT5sYXN0bWFyayA9IHN0YXRlLT5sYXN0bWFyazsgXAorICAgICAgICBjdHgtPmxhc3RpbmRleCA9IHN0YXRlLT5sYXN0aW5kZXg7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBMQVNUTUFSS19SRVNUT1JFKCkgIFwKKyAgICBkbyB7IFwKKyAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gY3R4LT5sYXN0bWFyazsgXAorICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gY3R4LT5sYXN0aW5kZXg7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFVFVSTl9FUlJPUihpKSBkbyB7IHJldHVybiBpOyB9IHdoaWxlKDApCisjZGVmaW5lIFJFVFVSTl9GQUlMVVJFIGRvIHsgcmV0ID0gMDsgZ290byBleGl0OyB9IHdoaWxlKDApCisjZGVmaW5lIFJFVFVSTl9TVUNDRVNTIGRvIHsgcmV0ID0gMTsgZ290byBleGl0OyB9IHdoaWxlKDApCisKKyNkZWZpbmUgUkVUVVJOX09OX0VSUk9SKGkpIFwKKyAgICBkbyB7IGlmIChpIDwgMCkgUkVUVVJOX0VSUk9SKGkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRVRVUk5fT05fU1VDQ0VTUyhpKSBcCisgICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID4gMCkgUkVUVVJOX1NVQ0NFU1M7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFVFVSTl9PTl9GQUlMVVJFKGkpIFwKKyAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPT0gMCkgUkVUVVJOX0ZBSUxVUkU7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0ZZKHgpICN4CisKKyNkZWZpbmUgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdHlwZSwgcHRyKSBcCitkbyB7IFwKKyAgICBhbGxvY19wb3MgPSBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlOyBcCisgICAgVFJBQ0UoKCJhbGxvY2F0aW5nICVzIGluICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgU0ZZKHR5cGUpLCBhbGxvY19wb3MsIHNpemVvZih0eXBlKSkpOyBcCisgICAgaWYgKHNpemVvZih0eXBlKSA+IHN0YXRlLT5kYXRhX3N0YWNrX3NpemUgLSBhbGxvY19wb3MpIHsgXAorICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZW9mKHR5cGUpKTsgXAorICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCisgICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCisgICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOyBcCisgICAgfSBcCisgICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaythbGxvY19wb3MpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplb2YodHlwZSk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIHR5cGUsIHB0ciwgcG9zKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImxvb2tpbmcgdXAgJXMgYXQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgU0ZZKHR5cGUpLCBwb3MpKTsgXAorICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srcG9zKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIGRhdGEsIHNpemUpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgiY29weSBkYXRhIGluICVwIHRvICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgc2l6ZSkpOyBcCisgICAgaWYgKHNpemUgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSkgeyBcCisgICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplKTsgXAorICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCisgICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCisgICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOyBcCisgICAgfSBcCisgICAgbWVtY3B5KHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIGRhdGEsIHNpemUpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBkYXRhLCBzaXplLCBkaXNjYXJkKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImNvcHkgZGF0YSB0byAlcCBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKKyAgICBtZW1jcHkoZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKTsgXAorICAgIGlmIChkaXNjYXJkKSBcCisgICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImRpc2NhcmQgZGF0YSBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKKyAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBEQVRBX1BVU0goeCkgXAorICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSkpCisjZGVmaW5lIERBVEFfUE9QKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSksIDEpCisjZGVmaW5lIERBVEFfUE9QX0RJU0NBUkQoeCkgXAorICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemVvZigqKHgpKSkKKyNkZWZpbmUgREFUQV9BTExPQyh0LHApIFwKKyAgICBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0LCBwKQorI2RlZmluZSBEQVRBX0xPT0tVUF9BVCh0LHAscG9zKSBcCisgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsdCxwLHBvcykKKworI2RlZmluZSBNQVJLX1BVU0gobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgaSA9IGxhc3RtYXJrOyAvKiBjdHgtPmxhc3RtYXJrIG1heSBjaGFuZ2UgaWYgcmVhbGxvY2F0ZWQgKi8gXAorICAgICAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIHN0YXRlLT5tYXJrLCAoaSsxKSpzaXplb2Yodm9pZCopKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUFSS19QT1BfS0VFUChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAwKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QX0RJU0NBUkQobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKikpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBKVU1QX05PTkUgICAgICAgICAgICAwCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzEgICAgIDEKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMiAgICAgMgorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8zICAgICAzCisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzEgICAgIDQKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMiAgICAgNQorI2RlZmluZSBKVU1QX01JTl9VTlRJTF8zICAgICA2CisjZGVmaW5lIEpVTVBfUkVQRUFUICAgICAgICAgIDcKKyNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzEgICAgOAorI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMiAgICA5CisjZGVmaW5lIEpVTVBfTUlOX1JFUEVBVF9PTkUgIDEwCisjZGVmaW5lIEpVTVBfQlJBTkNIICAgICAgICAgIDExCisjZGVmaW5lIEpVTVBfQVNTRVJUICAgICAgICAgIDEyCisjZGVmaW5lIEpVTVBfQVNTRVJUX05PVCAgICAgIDEzCisKKyNkZWZpbmUgRE9fSlVNUFgoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuLCBtYXRjaGFsbCkgXAorICAgIERBVEFfQUxMT0MoU1JFKG1hdGNoX2NvbnRleHQpLCBuZXh0Y3R4KTsgXAorICAgIG5leHRjdHgtPmxhc3RfY3R4X3BvcyA9IGN0eF9wb3M7IFwKKyAgICBuZXh0Y3R4LT5qdW1wID0ganVtcHZhbHVlOyBcCisgICAgbmV4dGN0eC0+cGF0dGVybiA9IG5leHRwYXR0ZXJuOyBcCisgICAgbmV4dGN0eC0+bWF0Y2hfYWxsID0gbWF0Y2hhbGw7IFwKKyAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCisgICAgY3R4ID0gbmV4dGN0eDsgXAorICAgIGdvdG8gZW50cmFuY2U7IFwKKyAgICBqdW1wbGFiZWw6IFwKKyAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCisKKyNkZWZpbmUgRE9fSlVNUChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4pIFwKKyAgICBET19KVU1QWChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4sIGN0eC0+bWF0Y2hfYWxsKQorCisjZGVmaW5lIERPX0pVTVAwKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAorICAgIERPX0pVTVBYKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybiwgMCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X3NzaXplX3QgbGFzdF9jdHhfcG9zOworICAgIFB5X3NzaXplX3QganVtcDsKKyAgICBTUkVfQ0hBUiogcHRyOworICAgIFNSRV9DT0RFKiBwYXR0ZXJuOworICAgIFB5X3NzaXplX3QgY291bnQ7CisgICAgUHlfc3NpemVfdCBsYXN0bWFyazsKKyAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKKyAgICB1bmlvbiB7CisgICAgICAgIFNSRV9DT0RFIGNocjsKKyAgICAgICAgU1JFX1JFUEVBVCogcmVwOworICAgIH0gdTsKKyAgICBpbnQgbWF0Y2hfYWxsOworfSBTUkUobWF0Y2hfY29udGV4dCk7CisKKy8qIGNoZWNrIGlmIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAgcmV0dXJucyA8MCBmb3IKKyAgIGVycm9yLCAwIGZvciBmYWlsdXJlLCBhbmQgMSBmb3Igc3VjY2VzcyAqLworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShtYXRjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBhbGxvY19wb3MsIGN0eF9wb3MgPSAtMTsKKyAgICBQeV9zc2l6ZV90IGksIHJldCA9IDA7CisgICAgUHlfc3NpemVfdCBqdW1wOworICAgIHVuc2lnbmVkIGludCBzaWdjb3VudD0wOworCisgICAgU1JFKG1hdGNoX2NvbnRleHQpKiBjdHg7CisgICAgU1JFKG1hdGNoX2NvbnRleHQpKiBuZXh0Y3R4OworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RU5URVJcbiIsIHBhdHRlcm4sIHN0YXRlLT5wdHIpKTsKKworICAgIERBVEFfQUxMT0MoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgpOworICAgIGN0eC0+bGFzdF9jdHhfcG9zID0gLTE7CisgICAgY3R4LT5qdW1wID0gSlVNUF9OT05FOworICAgIGN0eC0+cGF0dGVybiA9IHBhdHRlcm47CisgICAgY3R4LT5tYXRjaF9hbGwgPSBzdGF0ZS0+bWF0Y2hfYWxsOworICAgIGN0eF9wb3MgPSBhbGxvY19wb3M7CisKK2VudHJhbmNlOgorCisgICAgY3R4LT5wdHIgPSAoU1JFX0NIQVIgKilzdGF0ZS0+cHRyOworCisgICAgaWYgKGN0eC0+cGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgeworICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLworICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gLi4uICovCisgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bM10gJiYgKFB5X3VpbnRwdHJfdCkoZW5kIC0gY3R4LT5wdHIpIDwgY3R4LT5wYXR0ZXJuWzNdKSB7CisgICAgICAgICAgICBUUkFDRSgoInJlamVjdCAoZ290ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgY2hhcnMsICIKKyAgICAgICAgICAgICAgICAgICAibmVlZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwKKyAgICAgICAgICAgICAgICAgICBlbmQgLSBjdHgtPnB0ciwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblszXSkpOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXSArIDE7CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICArK3NpZ2NvdW50OworICAgICAgICBpZiAoKDAgPT0gKHNpZ2NvdW50ICYgMHhmZmYpKSAmJiBQeUVycl9DaGVja1NpZ25hbHMoKSkKKyAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSU5URVJSVVBURUQpOworCisgICAgICAgIHN3aXRjaCAoKmN0eC0+cGF0dGVybisrKSB7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUFSSzoKKyAgICAgICAgICAgIC8qIHNldCBtYXJrICovCisgICAgICAgICAgICAvKiA8TUFSSz4gPGdpZD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1BUksgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgaWYgKGkgJiAxKQorICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBpLzIgKyAxOworICAgICAgICAgICAgaWYgKGkgPiBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAvKiBzdGF0ZS0+bGFzdG1hcmsgaXMgdGhlIGhpZ2hlc3QgdmFsaWQgaW5kZXggaW4gdGhlCisgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmsgYXJyYXkuICBJZiBpdCBpcyBpbmNyZWFzZWQgYnkgbW9yZSB0aGFuIDEsCisgICAgICAgICAgICAgICAgICAgdGhlIGludGVydmVuaW5nIG1hcmtzIG11c3QgYmUgc2V0IHRvIE5VTEwgdG8gc2lnbmFsCisgICAgICAgICAgICAgICAgICAgdGhhdCB0aGVzZSBtYXJrcyBoYXZlIG5vdCBiZWVuIGVuY291bnRlcmVkLiAqLworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaiA9IHN0YXRlLT5sYXN0bWFyayArIDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBpKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFya1tqKytdID0gTlVMTDsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUtPm1hcmtbaV0gPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGxpdGVyYWwgc3RyaW5nICovCisgICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBjdHgtPnB0clswXSAhPSBjdHgtPnBhdHRlcm5bMF0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIHRoYXQgaXMgbm90IGxpdGVyYWwgY2hhcmFjdGVyICovCisgICAgICAgICAgICAvKiA8Tk9UX0xJVEVSQUw+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIGN0eC0+cHRyWzBdID09IGN0eC0+cGF0dGVyblswXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX1NVQ0NFU1M6CisgICAgICAgICAgICAvKiBlbmQgb2YgcGF0dGVybiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U1VDQ0VTU1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKCFjdHgtPm1hdGNoX2FsbCB8fCBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSB7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVQ6CisgICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiAqLworICAgICAgICAgICAgLyogPEFUPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFUICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoIVNSRShhdCkoc3RhdGUsIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6CisgICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBjYXRlZ29yeSAqLworICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfENBVEVHT1JZICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIXNyZV9jYXRlZ29yeShjdHgtPnBhdHRlcm5bMF0sIGN0eC0+cHRyWzBdKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FOWToKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIChleGNlcHQgYSBuZXdsaW5lKSAqLworICAgICAgICAgICAgLyogPEFOWT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCBTUkVfSVNfTElORUJSRUFLKGN0eC0+cHRyWzBdKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgorICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKi8KKyAgICAgICAgICAgIC8qIDxBTllfQUxMPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZX0FMTFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9JTjoKKyAgICAgICAgICAgIC8qIG1hdGNoIHNldCBtZW1iZXIgKG9yIG5vbl9tZW1iZXIpICovCisgICAgICAgICAgICAvKiA8SU4+IDxza2lwPiA8c2V0PiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5cbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4gKyAxLCAqY3R4LT5wdHIpKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUxfSUdOT1JFICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpICE9IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgPT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCisgICAgICAgICAgICAgICAgfHwgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4rMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSlzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0pVTVA6CisgICAgICAgIGNhc2UgU1JFX09QX0lORk86CisgICAgICAgICAgICAvKiBqdW1wIGZvcndhcmQgKi8KKyAgICAgICAgICAgIC8qIDxKVU1QPiA8b2Zmc2V0PiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9CUkFOQ0g6CisgICAgICAgICAgICAvKiBhbHRlcm5hdGlvbiAqLworICAgICAgICAgICAgLyogPEJSQU5DSD4gPDA9c2tpcD4gY29kZSA8SlVNUD4gLi4uIDxOVUxMPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIE1BUktfUFVTSChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgIGZvciAoOyBjdHgtPnBhdHRlcm5bMF07IGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9MSVRFUkFMICYmCisgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSkgKmN0eC0+cHRyICE9IGN0eC0+cGF0dGVyblsyXSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0lOICYmCisgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMywgKFNSRV9DT0RFKSAqY3R4LT5wdHIpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9CUkFOQ0gsIGp1bXBfYnJhbmNoLCBjdHgtPnBhdHRlcm4rMSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0tFRVAoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVF9PTkU6CisgICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWF4aW1pemluZyByZWdleHApICovCisKKyAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcworICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQorICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAorICAgICAgICAgICAgICAgdXNlIHRoZSBNQVhfUkVQRUFUIG9wZXJhdG9yICovCisKKyAgICAgICAgICAgIC8qIDxSRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOworCisgICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IGVuZCAtIGN0eC0+cHRyKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOyAvKiBjYW5ub3QgbWF0Y2ggKi8KKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzJdKTsKKyAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKKyAgICAgICAgICAgIGN0eC0+cHRyICs9IGN0eC0+Y291bnQ7CisKKyAgICAgICAgICAgIC8qIHdoZW4gd2UgYXJyaXZlIGhlcmUsIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgIG1hdGNoZXMsIGFuZCBjdHgtPnB0ciBwb2ludHMgdG8gdGhlIHRhaWwgb2YgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgc3RyaW5nLiAgY2hlY2sgaWYgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2hlcywKKyAgICAgICAgICAgICAgIGFuZCBiYWNrdHJhY2sgaWYgbm90LiAqLworCisgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUyAmJgorICAgICAgICAgICAgICAgICghY3R4LT5tYXRjaF9hbGwgfHwgY3R4LT5wdHIgPT0gc3RhdGUtPmVuZCkpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9MSVRFUkFMKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBzdGFydHMgd2l0aCBhIGxpdGVyYWwuIHNraXAgcG9zaXRpb25zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gY2Fubm90IHBvc3NpYmx5IG1hdGNoICovCisgICAgICAgICAgICAgICAgY3R4LT51LmNociA9IGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF0rMV07CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8ICpjdHgtPnB0ciAhPSBjdHgtPnUuY2hyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKworICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8yLCBqdW1wX3JlcGVhdF9vbmVfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NSU5fUkVQRUFUX09ORToKKyAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtaW5pbWl6aW5nIHJlZ2V4cCkgKi8KKworICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCisgICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5CisgICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCisgICAgICAgICAgICAgICB1c2UgdGhlIE1JTl9SRVBFQVQgb3BlcmF0b3IgKi8KKworICAgICAgICAgICAgLyogPE1JTl9SRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1JFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiBlbmQgLSBjdHgtPnB0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQorICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KKyAgICAgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzFdKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgIC8qIGRpZG4ndCBtYXRjaCBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyAqLworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgbWluaW11bSBtYXRjaGVzIG9mIHJlcGVhdCAqLworICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7CisgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTICYmCisgICAgICAgICAgICAgICAgKCFjdHgtPm1hdGNoX2FsbCB8fCBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSkgeworICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUCisgICAgICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y291bnQgPD0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9SRVBFQVRfT05FLGp1bXBfbWluX3JlcGVhdF9vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgMSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IDEpOworICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVQ6CisgICAgICAgICAgICAvKiBjcmVhdGUgcmVwZWF0IGNvbnRleHQuICBhbGwgdGhlIGhhcmQgd29yayBpcyBkb25lCisgICAgICAgICAgICAgICBieSB0aGUgVU5USUwgb3BlcmF0b3IgKE1BWF9VTlRJTCwgTUlOX1VOVElMKSAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxVTlRJTD4gdGFpbCAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7CisKKyAgICAgICAgICAgIC8qIGluc3RhbGwgbmV3IHJlcGVhdCBjb250ZXh0ICovCisgICAgICAgICAgICBjdHgtPnUucmVwID0gKFNSRV9SRVBFQVQqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKCpjdHgtPnUucmVwKSk7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSAtMTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4gPSBjdHgtPnBhdHRlcm47CisgICAgICAgICAgICBjdHgtPnUucmVwLT5wcmV2ID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gTlVMTDsKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFULCBqdW1wX3JlcGVhdCwgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKKyAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUoY3R4LT51LnJlcCk7CisKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX01BWF9VTlRJTDoKKyAgICAgICAgICAgIC8qIG1heGltaXppbmcgcmVwZWF0ICovCisgICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1BWF9VTlRJTD4gdGFpbCAqLworCisgICAgICAgICAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkZWFsIHdpdGggemVyby13aWR0aAorICAgICAgICAgICAgICAgbWF0Y2hlcyBpbiBoZXJlLi4uICovCisKKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVhfVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50KSk7CisKKyAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8xLCBqdW1wX21heF91bnRpbF8xLAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXSB8fAorICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyICE9IGN0eC0+dS5yZXAtPmxhc3RfcHRyKSB7CisgICAgICAgICAgICAgICAgLyogd2UgbWF5IGhhdmUgZW5vdWdoIG1hdGNoZXMsIGJ1dCBpZiB3ZSBjYW4KKyAgICAgICAgICAgICAgICAgICBtYXRjaCBhbm90aGVyIGl0ZW0sIGRvIHNvICovCisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKyAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCisgICAgICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMiwganVtcF9tYXhfdW50aWxfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTUFSS19QT1AoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY2Fubm90IG1hdGNoIG1vcmUgcmVwZWF0ZWQgaXRlbXMgaGVyZS4gIG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgICAgICAgIHRhaWwgbWF0Y2hlcyAqLworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzMsIGp1bXBfbWF4X3VudGlsXzMsIGN0eC0+cGF0dGVybik7CisgICAgICAgICAgICBSRVRVUk5fT05fU1VDQ0VTUyhyZXQpOworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NSU5fVU5USUw6CisgICAgICAgICAgICAvKiBtaW5pbWl6aW5nIHJlcGVhdCAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNSU5fVU5USUw+IHRhaWwgKi8KKworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7CisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7CisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICVwXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQsIGN0eC0+dS5yZXAtPnBhdHRlcm4pKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzEsIGp1bXBfbWluX3VudGlsXzEsCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKworICAgICAgICAgICAgLyogc2VlIGlmIHRoZSB0YWlsIG1hdGNoZXMgKi8KKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OworICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8yLCBqdW1wX21pbl91bnRpbF8yLCBjdHgtPnBhdHRlcm4pOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworCisgICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0KKyAgICAgICAgICAgICAgICAmJiBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdICE9IFNSRV9NQVhSRVBFQVQpIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9PSBjdHgtPnUucmVwLT5sYXN0X3B0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCisgICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMyxqdW1wX21pbl91bnRpbF8zLAorICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6CisgICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRiAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICpjdHgtPnB0ciAhPSAqcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0lHTk9SRToKKyAgICAgICAgICAgIC8qIG1hdGNoIGJhY2tyZWZlcmVuY2UgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0lHTk9SRSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgIT0gc3RhdGUtPmxvd2VyKCpwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0VYSVNUUzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0VYSVNUUyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIC8qIDxHUk9VUFJFRl9FWElTVFM+IDxncm91cD4gPHNraXA+IGNvZGV5ZXMgPEpVTVA+IGNvZGVubyAuLi4gKi8KKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUOgorICAgICAgICAgICAgLyogYXNzZXJ0IHN1YnBhdHRlcm4gKi8KKyAgICAgICAgICAgIC8qIDxBU1NFUlQ+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlQgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHIgLSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICBpZiAoc3RhdGUtPnB0ciA8IHN0YXRlLT5iZWdpbm5pbmcpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBET19KVU1QMChKVU1QX0FTU0VSVCwganVtcF9hc3NlcnQsIGN0eC0+cGF0dGVybisyKTsKKyAgICAgICAgICAgIFJFVFVSTl9PTl9GQUlMVVJFKHJldCk7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUX05PVDoKKyAgICAgICAgICAgIC8qIGFzc2VydCBub3Qgc3VicGF0dGVybiAqLworICAgICAgICAgICAgLyogPEFTU0VSVF9OT1Q+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlRfTk9UICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblsxXSkpOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyIC0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgaWYgKHN0YXRlLT5wdHIgPj0gc3RhdGUtPmJlZ2lubmluZykgeworICAgICAgICAgICAgICAgIERPX0pVTVAwKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6CisgICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOworICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7CisgICAganVtcCA9IGN0eC0+anVtcDsKKyAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7CisgICAgaWYgKGN0eF9wb3MgPT0gLTEpCisgICAgICAgIHJldHVybiByZXQ7CisgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworCisgICAgc3dpdGNoIChqdW1wKSB7CisgICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMjoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMjsKKyAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8zOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8zOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzI7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMzsKKyAgICAgICAgY2FzZSBKVU1QX0JSQU5DSDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYnJhbmNoOworICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzE6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzE7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMTsKKyAgICAgICAgY2FzZSBKVU1QX1JFUEVBVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0OworICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8xOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzE7CisgICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMjsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9SRVBFQVRfT05FOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fUkVQRUFUX09ORVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl9yZXBlYXRfb25lOworICAgICAgICBjYXNlIEpVTVBfQVNTRVJUOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnQ7CisgICAgICAgIGNhc2UgSlVNUF9BU1NFUlRfTk9UOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRfTk9UXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0X25vdDsKKyAgICAgICAgY2FzZSBKVU1QX05PTkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVRVUk4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCByZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7IC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworfQorCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKHNlYXJjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5zdGFydDsKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IHN0YXR1cyA9IDA7CisgICAgUHlfc3NpemVfdCBwcmVmaXhfbGVuID0gMDsKKyAgICBQeV9zc2l6ZV90IHByZWZpeF9za2lwID0gMDsKKyAgICBTUkVfQ09ERSogcHJlZml4ID0gTlVMTDsKKyAgICBTUkVfQ09ERSogY2hhcnNldCA9IE5VTEw7CisgICAgU1JFX0NPREUqIG92ZXJsYXAgPSBOVUxMOworICAgIGludCBmbGFncyA9IDA7CisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgeworICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLworICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gPDQ9bWF4PiA8NT1wcmVmaXggaW5mbz4gICovCisKKyAgICAgICAgZmxhZ3MgPSBwYXR0ZXJuWzJdOworCisgICAgICAgIGlmIChwYXR0ZXJuWzNdID4gMSkgeworICAgICAgICAgICAgLyogYWRqdXN0IGVuZCBwb2ludCAoYnV0IG1ha2Ugc3VyZSB3ZSBsZWF2ZSBhdCBsZWFzdCBvbmUKKyAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGVyZSwgc28gbGl0ZXJhbCBzZWFyY2ggd2lsbCB3b3JrKSAqLworICAgICAgICAgICAgZW5kIC09IHBhdHRlcm5bM10gLSAxOworICAgICAgICAgICAgaWYgKGVuZCA8PSBwdHIpCisgICAgICAgICAgICAgICAgZW5kID0gcHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fUFJFRklYKSB7CisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4ICovCisgICAgICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLworICAgICAgICAgICAgcHJlZml4X2xlbiA9IHBhdHRlcm5bNV07CisgICAgICAgICAgICBwcmVmaXhfc2tpcCA9IHBhdHRlcm5bNl07CisgICAgICAgICAgICBwcmVmaXggPSBwYXR0ZXJuICsgNzsKKyAgICAgICAgICAgIG92ZXJsYXAgPSBwcmVmaXggKyBwcmVmaXhfbGVuIC0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIFNSRV9JTkZPX0NIQVJTRVQpCisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KKyAgICAgICAgICAgIC8qIDxjaGFyc2V0PiAqLworICAgICAgICAgICAgY2hhcnNldCA9IHBhdHRlcm4gKyA1OworCisgICAgICAgIHBhdHRlcm4gKz0gMSArIHBhdHRlcm5bMV07CisgICAgfQorCisgICAgVFJBQ0UoKCJwcmVmaXggPSAlcCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgICAgIHByZWZpeCwgcHJlZml4X2xlbiwgcHJlZml4X3NraXApKTsKKyAgICBUUkFDRSgoImNoYXJzZXQgPSAlcFxuIiwgY2hhcnNldCkpOworCisjaWYgZGVmaW5lZChVU0VfRkFTVF9TRUFSQ0gpCisgICAgaWYgKHByZWZpeF9sZW4gPiAxKSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXguICB1c2UgdGhlIG92ZXJsYXAKKyAgICAgICAgICAgdGFibGUgdG8gc2tpcCBmb3J3YXJkIGFzIGZhc3QgYXMgd2UgcG9zc2libHkgY2FuICovCisgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7CisKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBlbmQgLSBwdHIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVmaXhfbGVuOyBpKyspCisgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKShTUkVfQ0hBUikgcHJlZml4W2ldICE9IHByZWZpeFtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIFNSRV9DSEFSIGMgPSAoU1JFX0NIQVIpIHByZWZpeFswXTsKKyAgICAgICAgICAgIHdoaWxlICgqcHRyKysgIT0gYykgeworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoKnB0ciA9PSAoU1JFX0NIQVIpIHByZWZpeFtpXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKytpICE9IHByZWZpeF9sZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBmb3VuZCBhIHBvdGVudGlhbCBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggU0NBTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHIgLSAocHJlZml4X2xlbiAtIHByZWZpeF9za2lwIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgeworICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKKyAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgU1JFX0NIQVIgYyA9IChTUkVfQ0hBUikgcGF0dGVyblsxXTsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gcGF0dGVyblsxXSkKKyAgICAgICAgICAgIHJldHVybiAwOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisjZW5kaWYKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAgd2hpbGUgKCpwdHIgIT0gYykgeworICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9ICsrcHRyOworICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiArIDIpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjaGFyc2V0KSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLworICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkUoY2hhcnNldCkoY2hhcnNldCwgKnB0cikpCisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBDSEFSU0VUXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7CisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICB3aGlsZSAocHRyIDw9IGVuZCkgeworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHIgPSBwdHIrKzsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisjdW5kZWYgU1JFX0NIQVIKKyN1bmRlZiBTSVpFT0ZfU1JFX0NIQVIKKyN1bmRlZiBTUkUKKworLyogdmltOnRzPTQ6c3c9NDpldAorKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwppbmRleCAzN2RmODJkLi5jZGI0ZmZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCkBAIC0xMSwxMiArMTEsMTIgQEAKICAgICBQeU9iamVjdCAqdDsKIAogICAgIGNoYXIgKnN0cjsKLSAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqc3RhcnRzdHI7CiAgICAgaW50IHN0YXJ0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzc3M6c3ltdGFibGUiLCAmc3RyLCAmZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0cikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTyZzOnN5bXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ciwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLCAmc3RhcnRzdHIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc3RyY21wKHN0YXJ0c3RyLCAiZXhlYyIpID09IDApCiAgICAgICAgIHN0YXJ0ID0gUHlfZmlsZV9pbnB1dDsKQEAgLTI3LDkgKzI3LDExIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAic3ltdGFibGUoKSBhcmcgMyBtdXN0IGJlICdleGVjJyBvciAnZXZhbCcgb3IgJ3NpbmdsZSciKTsKKyAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgaWYgKHN0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHQgPSAoUHlPYmplY3QgKilzdC0+c3RfdG9wOwpAQCAtNjksMzAgKzcxLDMwIEBACiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3ltdGFibGVtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJVU0UiLCBVU0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfR0xPQkFMIiwgREVGX0dMT0JBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9MT0NBTCIsIERFRl9MT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9QQVJBTSIsIERFRl9QQVJBTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFIiwgREVGX0ZSRUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRV9DTEFTUyIsIERFRl9GUkVFX0NMQVNTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0lNUE9SVCIsIERFRl9JTVBPUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfQk9VTkQiLCBERUZfQk9VTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0dMT0JBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0xPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfUEFSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9GUkVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfRlJFRV9DTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0lNUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0JPVU5EKTsKIAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX0ZVTkNUSU9OIiwgRnVuY3Rpb25CbG9jayk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfQ0xBU1MiLCBDbGFzc0Jsb2NrKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9NT0RVTEUiLCBNb2R1bGVCbG9jayk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX0lNUE9SVF9TVEFSIiwgT1BUX0lNUE9SVF9TVEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX1RPUExFVkVMIiwgT1BUX1RPUExFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPUFRfSU1QT1JUX1NUQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9QVF9UT1BMRVZFTCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9DQUwiLCBMT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9FWFBMSUNJVCIsIEdMT0JBTF9FWFBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9JTVBMSUNJVCIsIEdMT0JBTF9JTVBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkZSRUUiLCBGUkVFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0VMTCIsIENFTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBHTE9CQUxfRVhQTElDSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEdMT0JBTF9JTVBMSUNJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRlJFRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0VMTCk7CiAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfT0ZGIiwgU0NPUEVfT0ZGU0VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfTUFTSyIsIFNDT1BFX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDT1BFX01BU0spOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKaW5kZXggOGI4NzdjZi4uOWQ3OWVlYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCkBAIC0yNzgsNDQgKzI3OCw0NCBAQAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCiAKICAgICAvKiBQcmlvcml0aWVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19FTUVSRyIsICAgICAgIExPR19FTUVSRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BTEVSVCIsICAgICAgIExPR19BTEVSVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUklUIiwgICAgICAgIExPR19DUklUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0VSUiIsICAgICAgICAgTE9HX0VSUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19XQVJOSU5HIiwgTE9HX1dBUk5JTkcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTk9USUNFIiwgIExPR19OT1RJQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfSU5GTyIsICAgICAgICBMT0dfSU5GTyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19ERUJVRyIsICAgICAgIExPR19ERUJVRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0VNRVJHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQUxFUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DUklUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfV0FSTklORyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05PVElDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0lORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19ERUJVRyk7CiAKICAgICAvKiBvcGVubG9nKCkgb3B0aW9uIGZsYWdzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19QSUQiLCAgICAgICAgIExPR19QSUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ09OUyIsICAgICAgICBMT0dfQ09OUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OREVMQVkiLCAgTE9HX05ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1BJRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NPTlMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OREVMQVkpOwogI2lmZGVmIExPR19PREVMQVkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX09ERUxBWSIsICBMT0dfT0RFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfT0RFTEFZKTsKICNlbmRpZgogI2lmZGVmIExPR19OT1dBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05PV0FJVCIsICBMT0dfTk9XQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTk9XQUlUKTsKICNlbmRpZgogI2lmZGVmIExPR19QRVJST1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1BFUlJPUiIsICBMT0dfUEVSUk9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfUEVSUk9SKTsKICNlbmRpZgogCiAgICAgLyogRmFjaWxpdGllcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfS0VSTiIsICAgICAgICBMT0dfS0VSTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19VU0VSIiwgICAgICAgIExPR19VU0VSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX01BSUwiLCAgICAgICAgTE9HX01BSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfREFFTU9OIiwgIExPR19EQUVNT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQVVUSCIsICAgICAgICBMT0dfQVVUSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MUFIiLCAgICAgICAgIExPR19MUFIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwwIiwgIExPR19MT0NBTDApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwxIiwgIExPR19MT0NBTDEpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwyIiwgIExPR19MT0NBTDIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwzIiwgIExPR19MT0NBTDMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw0IiwgIExPR19MT0NBTDQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw1IiwgIExPR19MT0NBTDUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw2IiwgIExPR19MT0NBTDYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw3IiwgIExPR19MT0NBTDcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19LRVJOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfVVNFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX01BSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19EQUVNT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BVVRIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTFBSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwwKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwxKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwyKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwzKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw3KTsKIAogI2lmbmRlZiBMT0dfU1lTTE9HCiAjZGVmaW5lIExPR19TWVNMT0cgICAgICAgICAgICAgIExPR19EQUVNT04KQEAgLTMzMCwxMyArMzMwLDEzIEBACiAjZGVmaW5lIExPR19DUk9OICAgICAgICAgICAgICAgIExPR19EQUVNT04KICNlbmRpZgogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19TWVNMT0ciLCAgTE9HX1NZU0xPRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUk9OIiwgICAgICAgIExPR19DUk9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1VVQ1AiLCAgICAgICAgTE9HX1VVQ1ApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTkVXUyIsICAgICAgICBMT0dfTkVXUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1NZU0xPRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NST04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19VVUNQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTkVXUyk7CiAKICNpZmRlZiBMT0dfQVVUSFBSSVYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FVVEhQUklWIiwgICAgTE9HX0FVVEhQUklWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQVVUSFBSSVYpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGltZW1vZHVsZS5jIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKaW5kZXggNDJlYzM2Ni4uZDM4NzhiOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy90aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKQEAgLTM3LDE2ICszNyw2IEBACiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogI2VuZGlmIC8qICFfX1dBVENPTUNfXyB8fCBfX1FOWF9fICovCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0VSUk9SUwotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX0FQUExFX18pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNlbmRpZgpAQCAtNTQzLDYgKzUzMywyNiBAQAogICAgLyogd2NzZnRpbWUoKSBkb2Vzbid0IGZvcm1hdCBjb3JyZWN0bHkgdGltZSB6b25lcywgc2VlIGlzc3VlICMxMDY1MyAqLwogIyAgdW5kZWYgSEFWRV9XQ1NGVElNRQogI2VuZGlmCisjZGVmaW5lIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyBcCisiQ29tbW9ubHkgdXNlZCBmb3JtYXQgY29kZXM6XG5cCitcblwKKyVZICBZZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLlxuXAorJW0gIE1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDEyXS5cblwKKyVkICBEYXkgb2YgdGhlIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDMxXS5cblwKKyVIICBIb3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCwyM10uXG5cCislTSAgTWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDU5XS5cblwKKyVTICBTZWNvbmQgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNjFdLlxuXAorJXogIFRpbWUgem9uZSBvZmZzZXQgZnJvbSBVVEMuXG5cCislYSAgTG9jYWxlJ3MgYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLlxuXAorJUEgIExvY2FsZSdzIGZ1bGwgd2Vla2RheSBuYW1lLlxuXAorJWIgIExvY2FsZSdzIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUuXG5cCislQiAgTG9jYWxlJ3MgZnVsbCBtb250aCBuYW1lLlxuXAorJWMgIExvY2FsZSdzIGFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24uXG5cCislSSAgSG91ciAoMTItaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMTJdLlxuXAorJXAgIExvY2FsZSdzIGVxdWl2YWxlbnQgb2YgZWl0aGVyIEFNIG9yIFBNLlxuXAorXG5cCitPdGhlciBjb2RlcyBtYXkgYmUgYXZhaWxhYmxlIG9uIHlvdXIgcGxhdGZvcm0uICBTZWUgZG9jdW1lbnRhdGlvbiBmb3JcblwKK3RoZSBDIGxpYnJhcnkgc3RyZnRpbWUgZnVuY3Rpb24uXG4iCiAKICNpZmRlZiBIQVZFX1NUUkZUSU1FCiAjaWZkZWYgSEFWRV9XQ1NGVElNRQpAQCAtNjQwLDYgKzY1MCwxOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CisjZWxpZiAoZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKHN1bikpICYmIGRlZmluZWQoSEFWRV9XQ1NGVElNRSkKKyAgICBmb3Iob3V0YnVmID0gd2NzY2hyKGZtdCwgJyUnKTsKKyAgICAgICAgb3V0YnVmICE9IE5VTEw7CisgICAgICAgIG91dGJ1ZiA9IHdjc2NocihvdXRidWYrMiwgJyUnKSkKKyAgICB7CisgICAgICAgIC8qIElzc3VlICMxOTYzNDogT24gQUlYLCB3Y3NmdGltZSgieSIsICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgcmV0dXJucyAiMC8iIGluc3RlYWQgb2YgIjk5IiAqLworICAgICAgICBpZiAob3V0YnVmWzFdID09IEwneScgJiYgYnVmLnRtX3llYXIgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0ICV5IHJlcXVpcmVzIHllYXIgPj0gMTkwMCBvbiBBSVgiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQogI2VuZGlmCiAKICAgICBmbXRsZW4gPSB0aW1lX3N0cmxlbihmbXQpOwpAQCAtNjk0LDEzICs3MTcsMTMgQEAKIAogI3VuZGVmIHRpbWVfY2hhcgogI3VuZGVmIGZvcm1hdF90aW1lCi0KIFB5RG9jX1NUUlZBUihzdHJmdGltZV9kb2MsCiAic3RyZnRpbWUoZm9ybWF0WywgdHVwbGVdKSAtPiBzdHJpbmdcblwKIFxuXAogQ29udmVydCBhIHRpbWUgdHVwbGUgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCiBTZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2Rlcy4gV2hlbiB0aGUgdGltZSB0dXBsZVxuXAotaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLiIpOworaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAjZW5kaWYgLyogSEFWRV9TVFJGVElNRSAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzIzLDcgKzc0Niw5IEBACiAic3RycHRpbWUoc3RyaW5nLCBmb3JtYXQpIC0+IHN0cnVjdF90aW1lXG5cCiBcblwKIFBhcnNlIGEgc3RyaW5nIHRvIGEgdGltZSB0dXBsZSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgc3BlY2lmaWNhdGlvbi5cblwKLVNlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzIChzYW1lIGFzIHN0cmZ0aW1lKCkpLiIpOworU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMgKHNhbWUgYXNcblwKK3N0cmZ0aW1lKCkpLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBfYXNjdGltZShzdHJ1Y3QgdG0gKnRpbWVwdHIpCkBAIC04MDIsNyArODI3LDE2IEBACiAgICAgdHQgPSBta3RpbWUoJmJ1Zik7CiAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dCB0bV93ZGF5CiAgICAgICogY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KLSAgICBpZiAodHQgPT0gKHRpbWVfdCkoLTEpICYmIGJ1Zi50bV93ZGF5ID09IC0xKSB7CisgICAgaWYgKHR0ID09ICh0aW1lX3QpKC0xKQorI2lmbmRlZiBfQUlYCisgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQKKyAgICAgICAgICogdG1fd2RheSBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLworICAgICAgICAmJiBidWYudG1fd2RheSA9PSAtMQorI2Vsc2UKKyAgICAgICAgLyogb24gQUlYLCB0bV93ZGF5IGlzIGFsd2F5cyBzZXRzLCBldmVuIG9uIGVycm9yICovCisjZW5kaWYKKyAgICAgICApCisgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJta3RpbWUgYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODM3LDYgKzg3MSw4IEBACiAgICAgLyogUmVzZXQgdGltZXpvbmUsIGFsdHpvbmUsIGRheWxpZ2h0IGFuZCB0em5hbWUgKi8KICAgICBQeUluaXRfdGltZXpvbmUobSk7CiAgICAgUHlfREVDUkVGKG0pOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKQEAgLTEyNzMsMTkgKzEzMDksMTEgQEAKICNpZiBkZWZpbmVkKEhBVkVfVFpOQU1FKSAmJiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgICAgUHlPYmplY3QgKm90ejAsICpvdHoxOwogICAgIHR6c2V0KCk7Ci0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGltZXpvbmUiLCBfdGltZXpvbmUpOwotI2Vsc2UgLyogIVBZT1NfT1MyICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgInRpbWV6b25lIiwgdGltZXpvbmUpOwotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjaWZkZWYgSEFWRV9BTFRaT05FCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCBhbHR6b25lKTsKICNlbHNlCi0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIF90aW1lem9uZS0zNjAwKTsKLSNlbHNlIC8qICFQWU9TX09TMiAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgdGltZXpvbmUtMzYwMCk7Ci0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJkYXlsaWdodCIsIGRheWxpZ2h0KTsKICAgICBvdHowID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZSh0em5hbWVbMF0sICJzdXJyb2dhdGVlc2NhcGUiKTsKQEAgLTE0NjgsOCArMTQ5Niw5IEBACiAgICAgUHlJbml0X3RpbWV6b25lKG0pOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RUaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3RpbWVfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RUaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfdGltZV90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICB3aW52ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih3aW52ZXIpOwpAQCAtMTU4MSw3ICsxNjEwLDcgQEAKICAgICAgICAgICAgIERXT1JEIHJjOwogICAgICAgICAgICAgSEFORExFIGhJbnRlcnJ1cHRFdmVudCA9IF9QeU9TX1NpZ2ludEV2ZW50KCk7CiAgICAgICAgICAgICBSZXNldEV2ZW50KGhJbnRlcnJ1cHRFdmVudCk7Ci0gICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMpOworICAgICAgICAgICAgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMsIEZBTFNFKTsKICAgICAgICAgICAgIGlmIChyYyA9PSBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwogICAgICAgICAgICAgICAgIGVycm5vID0gRUlOVFI7CkBAIC0xNTkxLDE1ICsxNjIwLDYgQEAKICAgICAgICAgfQogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgLyogVGhpcyBTbGVlcCAqSVMqIEludGVycnVwdGFibGUgYnkgRXhjZXB0aW9ucyAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoRG9zU2xlZXAoc2VjcyAqIDEwMDApICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZWxzZQogICAgIC8qIFhYWCBDYW4ndCBpbnRlcnJ1cHQgdGhpcyBzbGVlcCAqLwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGEuYyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwppbmRleCBmNGQzNjA4Li5lY2EwMDU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCkBAIC0xNyw2ICsxNywxMiBAQAogI2luY2x1ZGUgInVjbmhhc2guaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAorLypbY2xpbmljXQorbW9kdWxlIHVuaWNvZGVkYXRhCitjbGFzcyB1bmljb2RlZGF0YS5VQ0QKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCiAvKiBjaGFyYWN0ZXIgcHJvcGVydGllcyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xMDcsMjQgKzExMyw2MSBAQAogCiAvKiAtLS0gTW9kdWxlIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19fLAotImRlY2ltYWwodW5pY2hyWywgZGVmYXVsdF0pXG5cCi1cblwKLVJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNoclxuXAotYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWZcblwKLW5vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuIik7CisvKltjbGluaWNdCisKK3VuaWNvZGVkYXRhLlVDRC5kZWNpbWFsCisKKyAgICB1bmljaHI6IG9iamVjdCh0eXBlPSdzdHInKQorICAgIGRlZmF1bHQ6IG9iamVjdD1OVUxMCisgICAgLworCitDb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGludG8gaXRzIGVxdWl2YWxlbnQgZGVjaW1hbCB2YWx1ZS4KKworUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyCithcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZgorbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX19kb2NfXywKKyJkZWNpbWFsKHVuaWNociwgZGVmYXVsdD1Ob25lKVxuIgorIkNvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLlxuIgorIlxuIgorIlJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNoclxuIgorImFzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmXG4iCisibm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfREVDSU1BTF9NRVRIT0RERUYgICAgXAorICAgIHsiZGVjaW1hbCIsIChQeUNGdW5jdGlvbil1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfZGVjaW1hbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW5pY2hyLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp2OwotICAgIFB5T2JqZWN0ICpkZWZvYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp1bmljaHI7CisgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPIXxPOmRlY2ltYWwiLAorICAgICAgICAmUHlVbmljb2RlX1R5cGUsICZ1bmljaHIsICZkZWZhdWx0X3ZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoc2VsZiwgdW5pY2hyLCBkZWZhdWx0X3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfaW1wbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVuaWNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgY2hlY2tzdW06IDk1NzZmYTU1ZjRlYTBiZTgyOTY4YWYzOWRjOWQwMjgzZTYzNGJlZWJdKi8KK3sKKyAgICBQeVVuaWNvZGVPYmplY3QgKnYgPSAoUHlVbmljb2RlT2JqZWN0ICopdW5pY2hyOwogICAgIGludCBoYXZlX29sZCA9IDA7CiAgICAgbG9uZyByYzsKICAgICBQeV9VQ1M0IGM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86ZGVjaW1hbCIsICZQeVVuaWNvZGVfVHlwZSwgJnYsICZkZWZvYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBjID0gZ2V0dWNoYXIodik7CiAgICAgaWYgKGMgPT0gKFB5X1VDUzQpLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTQ1LDE0ICsxODgsMTQgQEAKICAgICBpZiAoIWhhdmVfb2xkKQogICAgICAgICByYyA9IFB5X1VOSUNPREVfVE9ERUNJTUFMKGMpOwogICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgaWYgKGRlZm9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChkZWZhdWx0X3ZhbHVlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYSBkZWNpbWFsIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZvYmopOwotICAgICAgICAgICAgcmV0dXJuIGRlZm9iajsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmMpOwpAQCAtMTI1MCw3ICsxMjkzLDcgQEAKIC8qIFhYWCBBZGQgZG9jIHN0cmluZ3MuICovCiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bmljb2RlZGF0YV9mdW5jdGlvbnNbXSA9IHsKLSAgICB7ImRlY2ltYWwiLCB1bmljb2RlZGF0YV9kZWNpbWFsLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19ffSwKKyAgICBVTklDT0RFREFUQV9VQ0RfREVDSU1BTF9NRVRIT0RERUYKICAgICB7ImRpZ2l0IiwgdW5pY29kZWRhdGFfZGlnaXQsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfZGlnaXRfX2RvY19ffSwKICAgICB7Im51bWVyaWMiLCB1bmljb2RlZGF0YV9udW1lcmljLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX251bWVyaWNfX2RvY19ffSwKICAgICB7ImNhdGVnb3J5IiwgdW5pY29kZWRhdGFfY2F0ZWdvcnksIE1FVEhfVkFSQVJHUywKQEAgLTEzMjcsNyArMTM3MCw2IEBACiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSB0aGVcblwKIFVuaWNvZGVEYXRhIEZpbGUgRm9ybWF0ICIgVU5JREFUQV9WRVJTSU9OICIuIik7CiAKLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB1bmljb2RlZGF0YW1vZHVsZSA9IHsKICAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAogICAgICAgICAidW5pY29kZWRhdGEiLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCmluZGV4IDVkNWRjYTguLmVjMTFmYTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKQEAgLTEsNiArMSw2IEBACiAvKiB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAzLjIgKi8KIAotI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMS4wIgorI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMy4wIgogLyogYSBsaXN0IG9mIHVuaXF1ZSBkYXRhYmFzZSByZWNvcmRzICovCiBjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0gewogICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKQEAgLTEyMCw2ICsxMjAsNyBAQAogICAgIHs0LCAzMCwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMSwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMiwgMTQsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezE5LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7MTksIDAsIDUsIDAsIDUsIDEwfSwKICAgICB7MTgsIDAsIDUsIDAsIDUsIDB9LApAQCAtMTM2LDcgKzEzNyw2IEBACiAgICAgezE5LCAwLCA1LCAwLCA1LCAxMzZ9LAogICAgIHs3LCAwLCA5LCAwLCA1LCAwfSwKICAgICB7MzAsIDAsIDUsIDAsIDUsIDB9LAotICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezQsIDM2LCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDAsIDE0LCAwLCA1LCAwfSwKICAgICB7NywgMCwgNCwgMCwgNSwgMH0sCkBAIC0xNzcsNiArMTc3LDcgQEAKICAgICB7MTksIDAsIDEsIDAsIDUsIDgwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAwfSwKICAgICB7OCwgMCwgMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezUsIDksIDEsIDAsIDUsIDB9LAogICAgIHs0LCAxLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDIzNCwgMTQsIDAsIDUsIDB9LApAQCAtMTkwLDcgKzE5MSw2IEBACiAgICAgezI5LCAwLCAxOSwgMCwgNSwgMTcwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAxNzB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDEzNn0sCi0gICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezE0LCAwLCAxLCAwLCA1LCAwfSwKICAgICB7MTQsIDAsIDQsIDAsIDUsIDB9LAogICAgIHsyMSwgMCwgMTksIDAsIDQsIDB9LApAQCAtMjEzLDYgKzIxMywxMCBAQAogICAgIHsyNiwgMCwgMTEsIDAsIDUsIDEzNn0sCiAgICAgezIwLCAwLCAxOSwgMCwgNSwgMH0sCiAgICAgezI3LCAwLCAxMywgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMCwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMiwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMywgMCwgNSwgMH0sCiAgICAgezksIDAsIDksIDAsIDUsIDEzNn0sCiAgICAgezI3LCAwLCAxMCwgMCwgNSwgMTM2fSwKICAgICB7MjcsIDAsIDE5LCAwLCA1LCAxMzZ9LApAQCAtNjM4LDYgKzY0MiwxMCBAQAogICAgICJTIiwKICAgICAiV1MiLAogICAgICJPTiIsCisgICAgIkxSSSIsCisgICAgIlJMSSIsCisgICAgIkZTSSIsCisgICAgIlBESSIsCiAgICAgTlVMTAogfTsKIGNvbnN0IGNoYXIgKl9QeVVuaWNvZGVfRWFzdEFzaWFuV2lkdGhOYW1lc1tdID0gewpAQCAtMTI3MywzNSArMTI4MSwzNSBAQAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEwNywgMTA3LCAxMDcsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDgsIDEwOCwgCiAgICAgMTA4LCAxMDgsIDEwOCwgMCwgNzgsIDc4LCAxMDksIDExMCwgMTEwLCAxMTEsIDExMiwgMTEzLCAyNiwgMjYsIDgxLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMTE0LCAxMTUsIDExNiwgMTEzLCAwLCAwLCAxMTMsIDExMywgMTE3LCAxMTcsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExOSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMjAsIAotICAgIDEyMSwgMTIyLCAxMTQsIDExNSwgMTE2LCAxMjMsIDEyNCwgMTI1LCAxMjUsIDEyNiwgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgODYsIDgxLCA4MSwgODYsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTEwLCAKLSAgICAxMjgsIDEyOCwgMTEzLCAxMTcsIDExNywgMTI5LCAxMTcsIDExNywgMTE3LCAxMTcsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExOCwgMTE3LCAxMTgsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE4LCAxMTMsIDExNywgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDExOSwgMTE5LCA4MSwgODEsIDI2LCA4NiwgODEsIDgxLCA4NiwgCi0gICAgMTE3LCAxMTcsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTE3LCAxMTcsIAotICAgIDExNywgMTMyLCAxMzIsIDExNywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDEzMywgMTE3LCAxMzQsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAxMTQsIDExNSwgMTE2LCAxMTMsIDExNywgMCwgMTEzLCAxMTMsIDExOCwgMTE4LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMjAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTIxLCAKKyAgICAxMjIsIDEyMywgMTE0LCAxMTUsIDExNiwgMTI0LCAxMjUsIDEyNiwgMTI2LCAxMjcsIDg2LCA4MSwgODEsIDgxLCA4MSwgODEsIAorICAgIDg2LCA4MSwgODEsIDg2LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDExMCwgCisgICAgMTI5LCAxMjksIDExMywgMTE4LCAxMTgsIDEzMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTksIDExOCwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOSwgMTEzLCAxMTgsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKKyAgICAxMDgsIDI2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCAxMjAsIDEyMCwgODEsIDgxLCAyNiwgODYsIDgxLCA4MSwgODYsIAorICAgIDExOCwgMTE4LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDExOCwgMTE4LCAKKyAgICAxMTgsIDEzMywgMTMzLCAxMTgsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCisgICAgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMTcsIDExOCwgMTM0LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgCiAgICAgODYsIDg2LCA4NiwgODEsIDg2LCA4NiwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODEsIDg2LCA4MSwgODYsIDgxLCA4NiwgCi0gICAgODEsIDgxLCAwLCAwLCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCAKKyAgICA4MSwgODEsIDAsIDAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIAogICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDgxLCAKQEAgLTEzMTQsMTEgKzEzMjIsMTEgQEAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCA4NiwgODYsIDg2LCAKICAgICAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNywgMCwgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOCwgMCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCAKLSAgICA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDEyMCwgMTIxLCAxMjIsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIxLCAxMjIsIDEyMywgODEsIDgxLCA4MSwgCiAgICAgODYsIDgxLCA4MSwgODYsIDg2LCA4MSwgODEsIDgxLCA4MSwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgCkBAIC0xNDQ0LDQxICsxNDUyLDQwIEBACiAgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAogICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKLSAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIAotICAgIDgxLCA4MSwgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA4MSwgODEsIAorICAgIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNDk4LDE1ICsxNTA1LDE2IEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAwLCAKLSAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxNzIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTYzLCAxNjQsIDAsIDAsIDAsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIAogICAgIDE0MiwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTUyMSw3ICsxNTI5LDcgQEAKICAgICA4MywgNTMsIDgzLCA4MywgODMsIDg1LCA0OCwgODEsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAogICAgIDE1MywgMTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA4NCwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzUsIDEzNSwgMTM1LCAxNzIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzgsIDEzOCwgMTM1LCAxMzUsIDEzNSwgMTc0LCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNTUwLDcgKzE1NTgsNyBAQAogICAgIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgxLCA4NiwgMTM5LCAxMzksIDEzOSwgMCwgMCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MSwgODYsIDEzOSwgMTM5LCAxMzUsIDAsIDAsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM5LCAxMzUsIApAQCAtMTU2NiwxNyArMTU3NCwxNyBAQAogICAgIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIDE0NiwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQ3LCAxMzUsIDE0NywgMTM5LCAxMzksIDE0NywgMTQ3LCAxMzUsIDE0NywgMTc1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgODMsIAogICAgIDgzLCA4MywgODMsIDgzLCA4MywgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4NiwgODEsIAogICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDEzNSwgCiAgICAgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDE3NCwgMTQyLCAxMzksIDEzOSwgNDgsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzUsIDE0MiwgMTM5LCAxMzksIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzNSwgMTM1LCAxMzUsIDE3NCwgMTc0LCAwLCAwLCAwLCAKKyAgICAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNzUsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCkBAIC0xNTg4LDggKzE1OTYsOCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAotICAgIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODMsIDE3NSwgODYsIDg2LCA4NiwgODYsIDg2LCAKLSAgICA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4MSwgMTM5LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDQ4LCAKKyAgICA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgzLCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4NiwgCisgICAgODEsIDgxLCA4NiwgODYsIDg2LCA4NiwgODEsIDEzOSwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgODYsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgODEsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIApAQCAtMTYwMiw5ICsxNjEwLDkgQEAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDgxLCA4MSwgODYsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDgxLCAxNzYsIDE3NywgODYsIDE3OCwgODEsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgODEsIDE3NywgMTc4LCA4NiwgMTc5LCA4MSwgODEsIDgxLCA4MSwgCiAgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc5LCA4NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwLCA4NiwgCiAgICAgODEsIDg2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjEzLDcgKzE2MjEsNyBAQAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxODAsIDQ3LCA0NywgNDQsIDQ3LCAKKyAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCAzNSwgMTgxLCA0NywgNDcsIDQ0LCA0NywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjI1LDY1ICsxNjMzLDY1IEBACiAgICAgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCA0MywgMCwgMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCAwLCAzOCwgMCwgMzgsIDAsIDM4LCAwLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgCi0gICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIAotICAgIDQzLCAxODEsIDQzLCAxODEsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIAotICAgIDE4MiwgNTgsIDE4MSwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIAotICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MSwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIDAsIDc2LCA3NiwgCi0gICAgNzYsIDQzLCA0MywgNDMsIDE4MSwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgMzgsIDc2LCAxODQsIDE4NCwgCi0gICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIDE4NCwgNTgsIDAsIDE4NSwgMTg1LCAKLSAgICAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODcsIDE4NywgMTg3LCAxODgsIDE4OSwgCisgICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIAorICAgIDQzLCAxODIsIDQzLCAxODIsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIAorICAgIDE4MywgNTgsIDE4MiwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIAorICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MiwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIDAsIDc2LCA3NiwgCisgICAgNzYsIDQzLCA0MywgNDMsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMzgsIDc2LCAxODUsIDE4NSwgCisgICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIDE4NSwgNTgsIDAsIDE4NiwgMTg2LCAKKyAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxNzQsIDE3NCwgMTc0LCAxODgsIDE4OSwgCiAgICAgMTkwLCAxOTEsIDg0LCAxOTAsIDE5MCwgMTkwLCAyMiwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5MywgMTk0LCAxOTUsIAogICAgIDE5NiwgMjIsIDIyLCAyMiwgMTM4LCAxOTcsIDE5NywgMTk3LCAyMiwgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgCiAgICAgMjA0LCAyMSwgMjA1LCAxMTAsIDIwNSwgMjA2LCAyMDcsIDIyLCAxOTIsIDE5MiwgMTM4LCAyOCwgMzYsIDIyLCAxOTIsIAogICAgIDEzOCwgMTk3LCAyMDgsIDIwOCwgMTM4LCAxMzgsIDEzOCwgMjA5LCAxNjMsIDE2NCwgMTkyLCAxOTIsIDE5MiwgMTM4LCAKICAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDc4LCAxMzgsIDIwOCwgMTM4LCAxMzgsIDE5MiwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxODYsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAyMTAsIDUxLCAwLCAwLCAzNCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMSwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxMCwgMzQsIDM0LCAzNCwgMzQsIDIxMCwgMjEwLCAyMTAsIDIxMCwgCi0gICAgMjEwLCAyMTEsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMCwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjE2LCAyMTcsIDg1LCA4NSwgCi0gICAgMjMsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDE3NSwgMTc1LCA4MSwgODEsIAotICAgIDgxLCA4MSwgMTc1LCAxNzUsIDE3NSwgODEsIDgxLCA4MiwgODIsIDgyLCA4MiwgODEsIDgyLCA4MiwgODIsIDE3NSwgMTc1LCAKLSAgICA4MSwgODYsIDgxLCAxNzUsIDE3NSwgODYsIDg2LCA4NiwgODYsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMTgsIDIxOCwgNDksIDIxOSwgMjYsIDIxOSwgMjE4LCA0OSwgMjYsIDIxOSwgMzUsIDQ5LCA0OSwgCi0gICAgNDksIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDYsIDI2LCA0OSwgMjE5LCAyNiwgNzgsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMjYsIAotICAgIDI2LCAyMTgsIDIxOSwgMjE5LCAyNiwgNDksIDI2LCAyMjAsIDI2LCA0OSwgMjYsIDE4MywgMjIwLCA0OSwgNDksIDIyMSwgCi0gICAgMzUsIDQ5LCA0OSwgNDQsIDQ5LCAzNSwgMTU2LCAxNTYsIDE1NiwgMTU2LCAzNSwgMjYsIDIxOCwgMzUsIDM1LCA0OSwgNDksIAotICAgIDIyMiwgNzgsIDc4LCA3OCwgNzgsIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMjYsIDc4LCAyNiwgMjYsIDQ3LCA4MCwgMjIzLCAKLSAgICAyMjMsIDIyMywgMzcsIDM3LCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAzNywgMzcsIDM3LCAzNywgMjIzLCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI1LCAKLSAgICAyMjUsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNSwgCi0gICAgMjI1LCAyMjUsIDIyNSwgMTczLCAxNzMsIDE3MywgNDQsIDQ3LCAxNzMsIDE3MywgMTczLCAxNzMsIDM3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjI2LCAyMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyNiwgMjYsIDI2LCAyNiwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4NywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDAsIDIxMCwgMjExLCAyMTIsIAorICAgIDIxMywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMjE0LCA1MSwgMCwgMCwgMzQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgCisgICAgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMTQsIDM0LCAzNCwgMzQsIDM0LCAyMTQsIDIxNCwgMjE0LCAKKyAgICAyMTQsIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDAsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAorICAgIDUxLCA1MSwgNTEsIDUxLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDIyMCwgMjIxLCA4NSwgCisgICAgODUsIDIzLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgMTc2LCAxNzYsIAorICAgIDgxLCA4MSwgODEsIDgxLCAxNzYsIDE3NiwgMTc2LCA4MSwgODEsIDgyLCA4MiwgODIsIDgyLCA4MSwgODIsIDgyLCA4MiwgCisgICAgMTc2LCAxNzYsIDgxLCA4NiwgODEsIDE3NiwgMTc2LCA4NiwgODYsIDg2LCA4NiwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMiwgMjIyLCA0OSwgMjIzLCAyNiwgMjIzLCAyMjIsIDQ5LCAyNiwgMjIzLCAzNSwgCisgICAgNDksIDQ5LCA0OSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0NiwgMjYsIDQ5LCAyMjMsIDI2LCA3OCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAyNiwgMjYsIDIyMiwgMjIzLCAyMjMsIDI2LCA0OSwgMjYsIDIyNCwgMjYsIDQ5LCAyNiwgMTg0LCAyMjQsIDQ5LCA0OSwgCisgICAgMjI1LCAzNSwgNDksIDQ5LCA0NCwgNDksIDM1LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDM1LCAyNiwgMjIyLCAzNSwgMzUsIDQ5LCAKKyAgICA0OSwgMjI2LCA3OCwgNzgsIDc4LCA3OCwgNDksIDM1LCAzNSwgMzUsIDM1LCAyNiwgNzgsIDI2LCAyNiwgNDcsIDgwLCAyMjcsIAorICAgIDIyNywgMjI3LCAzNywgMzcsIDIyNywgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDM3LCAzNywgMzcsIDM3LCAyMjcsIDIyOCwgCisgICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMjksIAorICAgIDIyOSwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjI5LCAKKyAgICAyMjksIDIyOSwgMjI5LCAxNzMsIDE3MywgMTczLCA0NCwgNDcsIDE3MywgMTczLCAxNzMsIDE3MywgMzcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyMzAsIDIzMCwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMwLCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjcsIDIyNiwgMjI2LCAyNiwgMjYsIDQwLCAyNiwgNDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMSwgMjMwLCAyMzAsIDI2LCAyNiwgNDAsIDI2LCA0MCwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDQwLCAyMjgsIDIyOSwgMjI5LCAyMzAsIDc4LCA3OCwgNDAsIDIyOSwgMjMwLCAKLSAgICAyMjgsIDIyOSwgMjMwLCAyMjgsIDc4LCA0MCwgNzgsIDIyOSwgMjMxLCAyMzIsIDc4LCAyMjksIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgMjI5LCAyMjgsIDIyOCwgMjI5LCA0MCwgMjI5LCAyMjksIDIyOCwgMjI4LCA0MCwgMjMwLCA0MCwgMjMwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgMjI5LCAyMzMsIDIyMiwgMjI5LCAyMjIsIDIyMiwgMjI4LCAyMjgsIDIyOCwgNDAsIDQwLCA0MCwgNDAsIDc4LCAyMjgsIAotICAgIDc4LCAyMjgsIDIyOSwgMjI5LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOSwgCi0gICAgMjMwLCAyMjgsIDIyOCwgMjI5LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOSwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMzQsIDQwLCAyMzAsIDc4LCAyMjksIDIyOSwgMjI5LCAyMjksIDIyOCwgCi0gICAgMjI4LCAyMjksIDIyOSwgNzgsIDIyNiwgMjM0LCAyMzQsIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAKLSAgICAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOSwgMjI5LCAyMzAsIDIzMCwgCi0gICAgMjI5LCAyMjksIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAKLSAgICA0MCwgNzgsIDc4LCAyMjgsIDQwLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNDAsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOSwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIAotICAgIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgMjMwLCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCAyMjgsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzUsIDIzNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNDAsIDIzMiwgMjMzLCAyMzMsIDIzNCwgNzgsIDc4LCA0MCwgMjMzLCAyMzQsIAorICAgIDIzMiwgMjMzLCAyMzQsIDIzMiwgNzgsIDQwLCA3OCwgMjMzLCAyMzUsIDIzNiwgNzgsIDIzMywgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICAyMzMsIDIzMiwgMjMyLCAyMzMsIDQwLCAyMzMsIDIzMywgMjMyLCAyMzIsIDQwLCAyMzQsIDQwLCAyMzQsIDQwLCA0MCwgNDAsIAorICAgIDQwLCAyMzMsIDIzNywgMjI2LCAyMzMsIDIyNiwgMjI2LCAyMzIsIDIzMiwgMjMyLCA0MCwgNDAsIDQwLCA0MCwgNzgsIDIzMiwgCisgICAgNzgsIDIzMiwgMjMzLCAyMzMsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMzLCAKKyAgICAyMzQsIDIzMiwgMjMyLCAyMzMsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMzLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzOCwgNDAsIDIzNCwgNzgsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMyLCAKKyAgICAyMzIsIDIzMywgMjMzLCA3OCwgMjMwLCAyMzgsIDIzOCwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMyLCAyMzIsIAorICAgIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMzLCAyMzMsIDIzNCwgMjM0LCAKKyAgICAyMzMsIDIzMywgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIAorICAgIDQwLCA3OCwgNzgsIDIzMiwgNDAsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA0MCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMzLCA3OCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzIsIDIzMiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzOSwgMjQwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTcwMywxNCArMTcxMSwxNCBAQAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMjMsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKLSAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCi0gICAgMjM4LCAyMzgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKKyAgICAzNCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjI3LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCisgICAgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAorICAgIDI0MiwgMjQyLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCkBAIC0xNzQ1LDE0ICsxNzUzLDE0IEBACiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAKLSAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMTYzLCAxNjQsIDE2MywgMTY0LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAogICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKICAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMTYzLCAxNjQsIDc4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMiwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMTYzLCAxNjQsIDc4LCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTc2OSwzMCArMTc3NywzMCBAQAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDE2MywgMTY0LCA5LCAxMCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIAotICAgIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgMTYzLCAxNjQsIDE2MywgMTY0LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyMiwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgNzgsIDIyOCwgNzgsIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgCisgICAgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjI2LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCA3OCwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIAotICAgIDIyMiwgMjEyLCAyMTIsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIzOSwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDc4LCAyMjgsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIAorICAgIDIyNiwgMjE2LCAyMTYsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDI0MywgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCAyMzIsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKQEAgLTE4MzgsMTA1ICsxODQ2LDEwNSBAQAogICAgIDEzOCwgNTIsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDg0LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMjQyLCAyNDMsIDI0MywgMjQzLCAKLSAgICAyNDAsIDI0NCwgMTcwLCAyNDUsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgCi0gICAgMjQwLCAyNDAsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTAsIAotICAgIDI0MCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjUxLCAyNTIsIDI1MywgMjU0LCAKLSAgICAyNTUsIDI1NSwgMjQ4LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQxLCAyNDAsIDI1NiwgMjU2LCAyNTYsIDI0NCwgCi0gICAgMTcwLCAyNDMsIDI0MCwgMjYsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIAotICAgIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgCi0gICAgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAyNDYsIDI0NywgMjQ3LCAyNDcsIAorICAgIDI0NCwgMjQ4LCAxNzAsIDI0OSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAKKyAgICAyNDQsIDI0NCwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NCwgCisgICAgMjQ0LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNTUsIDI1NiwgMjU3LCAyNTgsIAorICAgIDI1OSwgMjU5LCAyNTIsIDI0OCwgMjQ4LCAyNDgsIDI0OCwgMjQ4LCAyNDUsIDI0NCwgMjYwLCAyNjAsIDI2MCwgMjQ4LCAKKyAgICAxNzAsIDI0NywgMjQ0LCAyNiwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgCisgICAgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDI1NywgMTcwLCAxNzAsIDAsIDAsIDI1OCwgMjU4LCAyNTksIDI1OSwgMjQ0LCAyNjAsIDI2MSwgCi0gICAgMjQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIAotICAgIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMTcwLCAwLCAwLCAyNjIsIDI2MiwgMjYzLCAyNjMsIDI0OCwgMjY0LCAyNjUsIAorICAgIDI1MiwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDI1NywgMTcwLCAxNzAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjQzLCAyNDQsIDI0NCwgMjYwLCAyNjEsIDAsIDAsIDAsIDAsIAorICAgIDI2MSwgMTcwLCAxNzAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjQ3LCAyNDgsIDI0OCwgMjY0LCAyNjUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDAsIDI2MiwgMjYyLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjMsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMTcwLCAxNzAsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMCwgMjY2LCAyNjYsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMCwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjQxLCAyNjYsIDI2NiwgCi0gICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI2MiwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAotICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDAsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI0NSwgMjcwLCAyNzAsIAorICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNjYsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKQEAgLTE5NjIsNyArMTk3MCw3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjQ0LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk3MSwxMSArMTk3OSwxMSBAQAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNTMsIDUzLCA1MywgNTMsIAogICAgIDUzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCAxMzgsIDEzOCwgCkBAIC0xOTk5LDcgKzIwMDcsNyBAQAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ0LCA0NywgNDQsIAotICAgIDQ3LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUyLCAyNjcsIDI2NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTIsIDI3MSwgMjcxLCA0NCwgNDcsIDQ0LCAKICAgICA0NywgMCwgNDQsIDQ3LCA0NCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NywgNDQsIAogICAgIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDA4LDcgKzIwMTYsNyBAQAogICAgIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgMTQyLCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM5LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgODAsIDgwLCA4NSwgMjIxLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCA4MCwgODAsIDg1LCAyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDAsIDAsIDAsIDAsIApAQCAtMjAyNCwxMyArMjAzMiwxMyBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDg2LCAKICAgICA4NiwgODYsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgCiAgICAgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc0LCA4MywgODMsIAorICAgIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzksIDE3NSwgODMsIDgzLCAKICAgICA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDYwLDQ5NyArMjA2OCw0OTYgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgODMsIDEzOSwgCiAgICAgMTQyLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMTcwLCAxNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAxNzAsIDI3MCwgMjcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzEsIDI3MiwgMjcxLCAyNzMsIDI3MywgMjczLCAyNzMsIAotICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyMTEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAKLSAgICAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMCwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDAsIDI3MSwgMCwgMjcxLCAyNzEsIAotICAgIDAsIDI3MSwgMjcxLCAwLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzMsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAyNzQsIAorICAgIDAsIDAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3NCwgMjc0LCAKICAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCi0gICAgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDE5NSwgMjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDE3MCwgMTcwLCAyNzQsIDE3MCwgMjc0LCAxNzAsIDE3MCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMTcwLCAyNzQsIDI3NCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDAsIDAsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMjc2LCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc4LCAyNzksIAotICAgIDI3NywgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI3NywgMjgwLCAyODAsIDI4MSwgMjgxLCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgCi0gICAgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI0MywgMjQzLCAyNzgsIDI3OSwgMjc3LCAyNzcsIAotICAgIDI3NywgMjc3LCAyODEsIDI4MSwgMjgxLCAyODIsIDI3NywgMjgyLCAwLCAyNzcsIDI4MiwgMjc3LCAyNzcsIDI4MCwgMjgzLCAKLSAgICAyODQsIDI4MywgMjg0LCAyODMsIDI4NCwgMjg1LCAyNzcsIDI3NywgMjg2LCAyODcsIDI4OCwgMjg4LCAyODksIDAsIDI3NywgCi0gICAgMjkwLCAyODUsIDI3NywgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTE3LCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDE4NywgMCwgMjkxLCAyOTEsIDI5MiwgMjkzLCAyOTIsIDI5MSwgCi0gICAgMjkxLCAyOTQsIDI5NSwgMjkxLCAyOTYsIDI5NywgMjk4LCAyOTcsIDI5NywgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIAotICAgIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTcsIDI5MSwgMzAwLCAzMDEsIDMwMCwgMjkxLCAyOTEsIDMwMiwgMzAyLCAKLSAgICAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgCi0gICAgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAyOTQsIDI5MSwgMjk1LCAzMDMsIAotICAgIDMwNCwgMzAzLCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKLSAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCi0gICAgMjk0LCAzMDEsIDI5NSwgMzAxLCAyOTQsIDI5NSwgMzA2LCAzMDcsIDMwOCwgMzA2LCAzMDYsIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzEwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMTAsIDMxMCwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAwLCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAwLCAwLCAwLCAyOTMsIDI5MywgMzAxLCAzMDMsIDMxMSwgMjkzLCAyOTMsIDAsIDMxMiwgMzEzLCAzMTMsIDMxMywgMzEzLCAKLSAgICAzMTIsIDMxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0LCAzMTQsIDMxNCwgMjYsIDMwLCAwLCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzUsIDI3NiwgMjc1LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgCisgICAgMjc3LCAyNzcsIDI3NywgMjc3LCAyMTUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIAorICAgIDI3NSwgMjc1LCAyNzUsIDI3NSwgMCwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDAsIDI3NSwgMCwgMjc1LCAyNzUsIDAsIAorICAgIDI3NSwgMjc1LCAwLCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzcsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAyNzgsIDI3OCwgCisgICAgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTk1LCAyNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMjgwLCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgyLCAyODMsIDI4MSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MSwgCisgICAgMjg0LCAyODQsIDI4NSwgMjg1LCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIAorICAgIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI0NywgMjQ3LCAyODIsIDI4MywgMjgxLCAyODEsIDI4MSwgMjgxLCAKKyAgICAyODUsIDI4NSwgMjg1LCAyODYsIDI4MSwgMjg2LCAwLCAyODEsIDI4NiwgMjgxLCAyODEsIDI4NCwgMjg3LCAyODgsIDI4NywgCisgICAgMjg4LCAyODcsIDI4OCwgMjg5LCAyODEsIDI4MSwgMjkwLCAyOTEsIDI5MiwgMjkyLCAyOTMsIDAsIDI4MSwgMjk0LCAyODksIAorICAgIDI4MSwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTE4LCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDE3NCwgMCwgMjk1LCAyOTUsIDI5NiwgMjk3LCAyOTYsIDI5NSwgMjk1LCAyOTgsIAorICAgIDI5OSwgMjk1LCAzMDAsIDMwMSwgMzAyLCAzMDEsIDMwMSwgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAKKyAgICAzMDMsIDMwMywgMzAzLCAzMDEsIDI5NSwgMzA0LCAzMDUsIDMwNCwgMjk1LCAyOTUsIDMwNiwgMzA2LCAzMDYsIDMwNiwgCisgICAgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIAorICAgIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAyOTgsIDI5NSwgMjk5LCAzMDcsIDMwOCwgMzA3LCAKKyAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCisgICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMjk4LCAzMDUsIAorICAgIDI5OSwgMzA1LCAyOTgsIDI5OSwgMzEwLCAzMTEsIDMxMiwgMzEwLCAzMTAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTQsIDMxNCwgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAwLCAyOTcsIAorICAgIDI5NywgMzA1LCAzMDcsIDMxNSwgMjk3LCAyOTcsIDAsIDMxNiwgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTYsIDMxNiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAzMTgsIDMxOCwgMjYsIDMwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgODMsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDAsIDAsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDQsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDAsIDAsIDAsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzUsIDg2LCAxMzUsIDgxLCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDgxLCAxNzUsIAotICAgIDg2LCAwLCAwLCAwLCAwLCAxNDIsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMzE2LCAzMTYsIDEwNCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAKLSAgICAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgCi0gICAgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMCwgMTM5LCAxMzUsIAotICAgIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTQyLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAotICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKLSAgICAxNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAKLSAgICAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTQyLCAxNDEsIDgzLCA4MywgCi0gICAgMTg4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzOSwgMTM1LCAxNTAsIDE1MCwgMTM1LCAxMzUsIDEzNSwgMTQyLCAxNDIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc0LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNzQsIDE0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIAotICAgIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDgzLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAxMDcsIDAsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMTA3LCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMCwgMTA0LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgCisgICAgMzIwLCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA3LCAxMzUsIDEzNSwgMTM1LCAwLCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMTM1LCA4NiwgMTM1LCA4MSwgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCA4MSwgMTc2LCA4NiwgMCwgMCwgMCwgMCwgMTQyLCAKKyAgICAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0LCAxMDQsIAorICAgIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMCwgMzIwLCAKKyAgICAxMDQsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDAsIDEzOSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE0MiwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCisgICAgODMsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKKyAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIDE4OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzNSwgMTUwLCAxNTAsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCAKKyAgICA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDgzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIAorICAgIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNDUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKICAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCiAgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzOSwgMTM5LCAxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDAsIDAsIAorICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKLSAgICAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTksIDMxOSwgCi0gICAgMTc1LCAxNzUsIDE3NSwgODAsIDgwLCA4MCwgMzIwLCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODAsIDgwLCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDg2LCA4NiwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIAotICAgIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTgsIDMxOCwgCi0gICAgMzE4LCAzMTgsIDMxOCwgMzE4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIzLCAzMjMsIDE3NiwgMTc2LCAxNzYsIDgwLCA4MCwgODAsIAorICAgIDMyNCwgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA4NiwgCisgICAgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCA4MCwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODEsIAotICAgIDgxLCA4MSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MSwgODEsIDgxLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAwLCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMCwgCisgICAgNDksIDQ5LCAwLCAwLCA0OSwgMCwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCisgICAgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgCi0gICAgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAwLCAKLSAgICAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAKKyAgICAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAwLCAwLCAwLCAwLCAxMzEsIDAsIDEzMSwgCisgICAgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAKKyAgICAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMzIzLCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDIxOCwgMjE4LCAwLCAwLCAwLCAwLCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMjM3LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI3LCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDIyMiwgMjIyLCAwLCAwLCAwLCAwLCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMjQxLCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMjY4LCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIApAQCAtMjU2MCw3NyArMjU2Nyw3NiBAQAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKQEAgLTI2NDMsMTcgKzI2NDksMTcgQEAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMCwgCi0gICAgMCwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMCwgMCwgCiB9OwogCiAvKiBkZWNvbXBvc2l0aW9uIGRhdGEgKi8KQEAgLTUxNzgsNyArNTE4NCw2IEBACiAJeyAyNTUsIDcsIDgsIDI1NSwgMCB9LAogCXsgMjU1LCA3LCA5LCAyNTUsIDAgfSwKIAl7IDEsIDUsIDI1NSwgMjU1LCAwIH0sCi0JeyAxNSwgMTQsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDEwLCAyNTUsIDI1NSwgMCB9LAogCXsgMTgsIDI1NSwgMjU1LCAyNTUsIDAgfSwKIAl7IDE5LCAyNTUsIDI1NSwgMjU1LCAwIH0sCkBAIC01MTkxLDYgKzUxOTYsNyBAQAogCXsgMjU1LCAyNTUsIDksIDI1NSwgMCB9LAogCXsgMTksIDMwLCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCA4LCAyNTUsIDI1NSwgMCB9LAorCXsgMjU1LCAyNywgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjIsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDIzLCAyNTUsIDI1NSwgMCB9LAogCXsgOSwgMjU1LCAyNTUsIDI1NSwgMCB9LApAQCAtNTIwNSw4ICs1MjExLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5nZXNfM18yXzBfaW5kZXhbXSA9IHsKICAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAKICAgICAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyLCAyLCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIAotICAgIDM2LCAyLCAyLCAyLCAzNywgMzgsIDIsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIAotICAgIDUxLCAyLCA1MiwgMiwgMiwgNTMsIDU0LCA1NSwgNTYsIDU3LCAyLCAyLCA1OCwgNTksIDYwLCAyLCAyLCA2MSwgNjIsIDYzLCAKKyAgICAzNiwgMiwgMiwgMiwgMzcsIDM4LCAyLCAzOSwgMiwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIAorICAgIDUwLCAyLCA1MSwgMiwgMiwgNTIsIDUzLCA1NCwgNTUsIDU2LCAyLCA1NywgNTgsIDU5LCA2MCwgMiwgMiwgNjEsIDYyLCA2MywgCiAgICAgNjQsIDY1LCA2NSwgMiwgMiwgMiwgMiwgNjYsIDIsIDY3LCA2OCwgNjksIDcwLCA3MSwgMiwgMiwgMiwgNzIsIDczLCA3NCwgCiAgICAgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDIsIDIsIDIsIDIsIDIsIDIsIDgyLCAyLCAyLCAyLCAyLCAyLCA4MywgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjE3LDggKzUyMjMsOCBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTQsIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NiwgNTAsIDUwLCAKLSAgICA5NywgOTgsIDUwLCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk0LCA5NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTYsIDQ5LCA0OSwgCisgICAgOTcsIDk4LCA0OSwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyMjksMTMgKzUyMzUsMTMgQEAKICAgICAxMTksIDEyMCwgMTIxLCAxMjIsIDIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAyLCAyLCAyLCAyLCAyLCAyLCAxMjgsIDIsIAogICAgIDEyOSwgMTMwLCAxMzEsIDIsIDEzMiwgMiwgMTMzLCAyLCAyLCAyLCAxMzQsIDIsIDIsIDIsIDEzNSwgMTM2LCAxMzcsIDEzOCwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTM5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNDAsIDIsIDE0MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAotICAgIDUwLCAxNDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE0MCwgMiwgMTQxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDE0MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMTQ0LCAxNDUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTI2Miw5ICs1MjY4LDkgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OCwgNTAsIDE3OSwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNzgsIDQ5LCAxNzksIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTUwNSw3ICs1NTExLDcgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTU2MjcsNyArNTYzMyw3IEBACiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01Nzg3LDcwOSArNTc5MywyNjcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDQsIDAsIDAsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDEsIDEsIDAsIDAsIDAsIAorICAgIDQsIDM1LCA4LCA2LCA3LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDksIAogICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NSwgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDQsIDAsIDAsIDM3LCAzOCwgMzksIDQwLCAKLSAgICA0MSwgNDIsIDEsIDEsIDAsIDAsIDAsIDQsIDM2LCA4LCA2LCA3LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCAxLCAxLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NSwgCi0gICAgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKLSAgICAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDAsIAotICAgIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTY0OTcsMTUgKzYwNjEsMjAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC02NTE1LDMzICs2MDg0LDQ3MCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhbmdlX3JlY29yZCogZ2V0X2NoYW5nZV8zXzJfMChQeV9VQ1M0IG4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKaW5kZXggMzgzODg4Mi4uN2NjYjEyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaApAQCAtNiw3ICs2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxleGljb25bXSA9IHsKICAgICA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgODcsIDczLCA4NCwgMjAwLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3NiwgCiAgICAgMTk3LCA4MywgNzcsIDY1LCA3NiwgMjA0LCA4MywgNzMsIDcxLCAyMDYsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDIwNCwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjcsIDc0LCAyMDMsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA3NywgCisgICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDY3LCA3NCwgMjAzLCA3NywgCiAgICAgNjUsIDg0LCA3MiwgNjksIDc3LCA2NSwgODQsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA4OSwgODAsIDg0LCA3MywgNjUsIAogICAgIDIwNiwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgMjAwLCA2NywgNzksIDc3LCA4MCwgNjUsIDg0LCA3MywgCiAgICAgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDY3LCA4NSwgNzgsIDY5LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA4MywgODksIDc3LCAKQEAgLTI3LDI0ICsyNywyNCBAQAogICAgIDc1LCA2NSwgNzgsIDE5MywgMTk0LCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgMjEwLCA2OCwgNzksIDIxMiwgNzUsIAogICAgIDY1LCA3OCwgNzEsIDg4LCAyMDEsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4NCwgNzMsIDY2LCA2OSwgCiAgICAgODQsIDY1LCAyMDYsIDc5LCAxOTgsIDczLCA3OCwgNzMsIDg0LCA3MywgNjUsIDIwNCwgNzcsIDY5LCA2OSwgMjA1LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgODksIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDc1LCA3MiwgNzcsIDY5LCAKLSAgICAyMTAsIDg1LCAxMjgsIDg3LCA3MiwgNzMsIDg0LCAxOTcsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgNzMsIDEyOCwgCi0gICAgNjUsIDgyLCA4MiwgNzksIDg3LCAxMjgsIDc5LCAxMjgsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDc3LCA2NSwgODIsIDc1LCAKLSAgICAxMjgsIDg5LCA2OSwgMjAwLCA2NSwgODIsIDgyLCA3OSwgMjE1LCA2NywgNzksIDgwLCA4NCwgNzMsIDE5NSwgODAsIDcyLCAKLSAgICA2NSwgODMsIDY5LCA0NSwgMTk3LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIDIwNiwgNjgsIDY5LCA4NiwgNjUsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMjAxLCA2NiwgNzYsIDY1LCA2NywgMjAzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDkwLCA2OSwgMTk2LCAKLSAgICA4NCwgNzIsIDY1LCAyMDUsIDc0LCA3OSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgNjYsIDc5LCAyMTYsIDcyLCA2OSwgNjYsIDgyLCA2OSwgCi0gICAgMjE1LCA3NywgNzMsIDY1LCAyMDcsIDgwLCA3NiwgODUsIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCAKLSAgICA2OCwgMjExLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA2OCwgODIsIDY1LCA4NywgNzMsIDc4LCA3MSwgCi0gICAgMjExLCA2NywgNzIsIDc5LCA4MywgNjksIDc5LCA3OCwgMTk5LCA3MiwgNjUsIDc2LCA3MCwgODcsIDczLCA2OCwgODQsIAorICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgNzcsIDg5LCA2NSwgNzgsIDc3LCA2NSwgMjEwLCA4NSwgMTI4LCA3NSwgCisgICAgNzIsIDc3LCA2OSwgMjEwLCA4NywgNzIsIDczLCA4NCwgMTk3LCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA2NywgNjUsIDgyLCAKKyAgICA4MiwgNzMsIDY5LCAyMTAsIDczLCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA4OSwgNjksIDIwMCwgNzksIDEyOCwgCisgICAgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDgwLCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NywgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgNzMsIDY1LCAyMDYsIDY4LCA2OSwgODYsIAorICAgIDY1LCA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgNjYsIDc2LCA2NSwgNjcsIDIwMywgODQsIDczLCA3NiwgMTk3LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA5MCwgNjksIAorICAgIDE5NiwgODQsIDcyLCA2NSwgMjA1LCA3NCwgNzksIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgCisgICAgNzksIDc1LCA2OSwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDY2LCA3OSwgMjE2LCA3MiwgNjksIDY2LCAKKyAgICA4MiwgNjksIDIxNSwgNzcsIDczLCA2NSwgMjA3LCA4MCwgNzYsIDg1LCAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIAorICAgIDY1LCA4MiwgNjgsIDIxMSwgNzEsIDY5LCA3OSwgODIsIDcxLCA3MywgNjUsIDIwNiwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgCisgICAgNzEsIDIxMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzIsIDY1LCA3NiwgNzAsIDg3LCA3MywgNjgsIDg0LCAKICAgICAyMDAsIDY2LCA2NSwgNzYsIDczLCA3OCwgNjksIDgzLCAxOTcsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDIxMywgODQsIDg3LCAKICAgICA3OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTYsIAotICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNzMsIDE5NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzksIDEyOCwgNjUsIDc2LCA2OSwgMTk4LCA4NCwgODcsIDIwNywgCi0gICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAyMTIsIDc5LCA4NiwgNjksIAotICAgIDIxMCwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAorICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNjUsIDc2LCA2OSwgMTk4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgMTI4LCA4NCwgODcsIDIwNywgCisgICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNzksIDg2LCA2OSwgMjEwLCA2NywgNzksIDc4LCA4MywgNzksIDc4LCA2NSwgNzgsIAorICAgIDIxMiwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAogICAgIDIxNSwgNzIsIDY1LCAyMDAsIDc5LCA3OCwgMTk3LCA2OCwgNzksIDg3LCAyMDYsIDcyLCA3MywgNzEsIDIwMCwgNzAsIDg1LCAKICAgICA3NiwgNzYsIDg3LCA3MywgNjgsIDg0LCAyMDAsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDY5LCA4MSwgODUsIAogICAgIDY1LCAyMDQsIDg0LCA2NSwgMTk5LCA2NiwgNjUsIDgyLCAxMjgsIDY4LCA3OSwgNzcsIDczLCA3OCwgMjA3LCA3OCwgODUsIApAQCAtNjUsNDkgKzY1LDQ5IEBACiAgICAgNzYsIDg1LCAxOTcsIDgzLCA3MiwgNjUsIDgyLCA2NSwgNjgsIDE5MywgODMsIDczLCA3OCwgNzIsIDY1LCA3NiwgMTkzLCAKICAgICA3NSwgNjUsIDEyOCwgODIsIDg1LCA3OCwgNzMsIDE5NSwgODMsIDY1LCA4NSwgODIsIDY1LCA4MywgNzIsIDg0LCA4MiwgCiAgICAgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDY5LCA4MywgNjksIDgyLCA2OSwgMjEyLCAKLSAgICA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgNzEsIDg1LCA4MiwgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzcsIDY1LCAxMjgsIAotICAgIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCA2OSwgNjksIDg0LCA2OSwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgCi0gICAgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgCi0gICAgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAKLSAgICAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgMTk1LCA3MiwgNjUsIDc3LCA5MCwgMTkzLCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAxMjgsIAotICAgIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCA3NiwgCi0gICAgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIDkwLCAKLSAgICA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgODUsIAotICAgIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAxMjgsIAotICAgIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCA5MCwgCi0gICAgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIDEyOCwgCi0gICAgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODAsIAotICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIAotICAgIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAxMjgsIAotICAgIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCA5MCwgCi0gICAgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIDc0LCAKLSAgICAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgNjUsIAotICAgIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCA4NSwgCi0gICAgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCA2NSwgCi0gICAgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCA3OSwgCi0gICAgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCA2OSwgCi0gICAgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIDgyLCAKLSAgICAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgMTI4LCAKLSAgICA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIDIwMSwgCi0gICAgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDkwLCAKLSAgICA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgNjksIAotICAgIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgOTAsIAotICAgIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCA3MiwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIDcyLCAKLSAgICA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgMTI4LCAKLSAgICA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAxMjgsIAotICAgIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCA2OSwgCi0gICAgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCA2NSwgCi0gICAgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIDEyOCwgCi0gICAgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIDcyLCAKLSAgICAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIDY5LCAKLSAgICA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgOTAsIAotICAgIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgOTAsIAotICAgIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKKyAgICA3MiwgNjUsIDc3LCA5MCwgMTkzLCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIAorICAgIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc3LCA2NSwgMTI4LCA3NywgNjUsIDg5LCA2OSwgMjAzLCA3NywgCisgICAgNjksIDY5LCA4NCwgNjksIDIwMSwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzAsIDczLCA4NiwgNjksIAorICAgIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIAorICAgIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgCisgICAgMTk1LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAKKyAgICAxMjgsIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCAKKyAgICA3NiwgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIAorICAgIDg4LCAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIAorICAgIDkwLCA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgCisgICAgODUsIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAKKyAgICAxMjgsIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCAKKyAgICA5MCwgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIAorICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgCisgICAgODAsIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgCisgICAgOTAsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAKKyAgICAxMjgsIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCAKKyAgICA5MCwgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIAorICAgIDc0LCAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgCisgICAgNjUsIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAKKyAgICAxMjgsIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCAKKyAgICA4NSwgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCAKKyAgICA2NSwgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCAKKyAgICA3OSwgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCAKKyAgICA2OSwgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIAorICAgIDgyLCAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgCisgICAgMTI4LCA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIAorICAgIDIwMSwgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDkwLCA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgCisgICAgNjksIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgCisgICAgOTAsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCAKKyAgICA3MiwgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIAorICAgIDcyLCA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgCisgICAgMTI4LCA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAKKyAgICAxMjgsIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCAKKyAgICA2OSwgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCAKKyAgICA2NSwgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIAorICAgIDEyOCwgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIAorICAgIDcyLCAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIAorICAgIDY5LCA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgCisgICAgOTAsIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgCisgICAgOTAsIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKICAgICAxMjgsIDkwLCA2NSwgODIsIDgxLCA2NSwgMTI4LCA5MCwgNjUsIDgxLCA2OSwgMTk4LCA5MCwgNjUsIDc3LCA4OCwgMTI4LCAKICAgICA5MCwgNjUsIDIwNCwgOTAsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDY1LCA3MywgMjA2LCA5MCwgNjUsIDczLCAxMjgsIDkwLCAKICAgICA2NSwgNzIsIDEyOCwgOTAsIDY1LCAyMDAsIDkwLCA2NSwgNzEsIDEyOCwgOTAsIDY1LCA2OSwgNzAsIDEyOCwgOTAsIDQ4LCAKQEAgLTUyNSw3OSArNTI1LDc5IEBACiAgICAgODQsIDg1LCA4NCwgODQsIDg5LCAxMjgsIDg0LCA4NSwgODQsIDY5LCA4OSwgNjUsIDgzLCA2NSwgODQsIDEyOCwgODQsIDg1LCAKICAgICA4NCwgMTI4LCA4NCwgODUsIDgyLCA4OCwgMTI4LCA4NCwgODUsIDgyLCA4NSwgMTI4LCA4NCwgODUsIDgyLCA4NCwgNzYsIAogICAgIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc5LCA1MCwgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIDY5LCAKLSAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDY2LCA2NSwgNzgsIAotICAgIDEyOCwgODQsIDg1LCA4MiwgMTI4LCA4NCwgODUsIDgwLCAxMjgsIDg0LCA4NSwgNzksIDg4LCAxMjgsIDg0LCA4NSwgNzksIAotICAgIDg0LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIDEyOCwgODQsIDg1LCA3OCwgNzgsIDg5LCAxMjgsIAotICAgIDg0LCA4NSwgNzcsIDY5LCA4NCwgNjksIDgzLCAxMjgsIDg0LCA4NSwgNzcsIDY1LCA2OSwgMTI4LCA4NCwgODUsIDc3LCAKLSAgICAxMjgsIDg0LCA4NSwgNzYsIDczLCA4MCwgMTI4LCA4NCwgODUsIDc1LCA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAxMjgsIAotICAgIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCA4NSwgCi0gICAgNzEsIDE3OCwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDg0LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA4NCwgODUsIDY1LCAKLSAgICA2OSwgMTI4LCA4NCwgMjEzLCA4NCwgODQsIDg1LCA4NSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCAKLSAgICA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODQsIDg0LCA4NCwgNjUsIDEyOCwgODQsIDg0LCA4MywgODUsIDEyOCwgODQsIDg0LCA4MywgNzksIDEyOCwgODQsIAotICAgIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgCi0gICAgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzMsIDczLCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDg1LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCA3OSwgMTI4LCAKLSAgICA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCA4NCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIAotICAgIDg0LCA3MiwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNzIsIDEyOCwgODQsIDg0LCA2OSwgCi0gICAgNzIsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDIwMCwgODQsIDg0LCA2OSwgNzIsIDEyOCwgODQsIDg0LCAKLSAgICA2OSwgMjAwLCA4NCwgODQsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODQsIAotICAgIDg0LCA2NSwgODUsIDEyOCwgODQsIDg0LCA2NSwgNzMsIDEyOCwgODQsIDg0LCA2NSwgNjUsIDEyOCwgODQsIDg0LCA1MCwgCi0gICAgMTI4LCA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODMsIDg3LCA2NSwgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4MywgCi0gICAgODMsIDY5LCAxMjgsIDg0LCA4MywgODMsIDY1LCAxMjgsIDg0LCA4MywgNzIsIDg1LCA3MSwgODMsIDEyOCwgODQsIDgzLCAKLSAgICA3MiwgNzksIDc5LCA3NSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDIwMywgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIAotICAgIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgMTk5LCA4NCwgODMsIDcyLCA2OSwgMTI4LCA4NCwgCi0gICAgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCAKLSAgICA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAxMjgsIDg0LCA4MywgNjUsIDY1LCAxMjgsIAotICAgIDg0LCA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCA4NCwgODIsIDg1LCA4NCwgNzIsIDEyOCwgCi0gICAgODQsIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIDg0LCA2OSwgMTk2LCA4NCwgODIsIDg1LCAKLSAgICA3NywgODAsIDY5LCA4NCwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgODIsIDg1LCA2NywgNzUsIDEyOCwgODQsIAotICAgIDgyLCA3OSwgODAsIDczLCA2NywgNjUsIDIwNCwgODQsIDgyLCA3OSwgODAsIDcyLCA4OSwgMTI4LCA4NCwgODIsIDc5LCA3NywgCi0gICAgNzMsIDc1LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAotICAgIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCAKLSAgICA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDIwNiwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc2LCAKLSAgICA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc2LCA3NiwgNjksIDg5LCA2NiwgODUsIDgzLCAxMjgsIAotICAgIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODQsIDgyLCA3OSwgNjksIDkwLCA2OSwgNzgsIDczLCAKLSAgICA2NSwgMjA2LCA4NCwgODIsIDczLCA4NSwgNzcsIDgwLCA3MiwgMTI4LCA4NCwgODIsIDczLCA4NCwgNzksIDIxMSwgODQsIAotICAgIDgyLCA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA3MywgNzcsIDc5LCAKLSAgICA4NSwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzksIDY4LCAxMjgsIAotICAgIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDc5LCAKLSAgICAyMDYsIDg0LCA4MiwgNzMsIDczLCA4MywgNjUsIDgwLCAxMjgsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIAotICAgIDIxMSwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDc4LCAKLSAgICAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3NiwgNzMsIAotICAgIDY1LCA4NCwgMTk3LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCA4NCwgMTI4LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCAKLSAgICAyMTIsIDg0LCA4MiwgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIAotICAgIDY1LCAyMTAsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDg0LCA4MiwgCi0gICAgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODIsIDczLCA2NSwgNzgsIAotICAgIDcxLCA3NiwgNjksIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDE5NywgODQsIDgyLCA3MywgNjUsIDEyOCwgCi0gICAgODQsIDgyLCA3MywgMTI4LCA4NCwgODIsIDY5LCA4MywgNzMsIDc2LCA3NiwgNzksIDEyOCwgODQsIDgyLCA2OSwgNzgsIDY4LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDc4LCAxOTYsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTEsIDEyOCwgODQsIAotICAgIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MCwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4MiwgNjksIDE5NywgODQsIDgyLCA2OSwgNjUsIDY4LCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDg0LCA4MiwgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIDEyOCwgCi0gICAgODQsIDgyLCA2NSwgNzgsIDgzLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4MCwgNzksIAotICAgIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgMjEyLCA4NCwgODIsIDY1LCA3OCwgCi0gICAgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgODMsIAotICAgIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3NywgODcsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA3NywgMTI4LCA4NCwgCi0gICAgODIsIDY1LCAyMDUsIDg0LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3MywgMjA2LCA4NCwgODIsIDY1LCAKLSAgICA3MywgNzYsIDczLCA3OCwgMTk5LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCA2NywgMTI4LCA4NCwgODIsIDY1LCA3MCwgNzAsIAotICAgIDczLCAxOTUsIDg0LCA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA4MiwgCi0gICAgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDEyOCwgODQsIDc5LCA4OCwgMTI4LCA4NCwgNzksIDg3LCA2OSwgODIsIDEyOCwgCi0gICAgODQsIDc5LCA4NSwgODIsIDc4LCA3OSwgNzMsIDIxMSwgODQsIDc5LCA4NCwgNjUsIDIwNCwgODQsIDc5LCA4NCwgMTI4LCAKLSAgICA4NCwgNzksIDgyLCA4NCwgNzksIDczLCA4MywgMTk3LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgODMsIDEyOCwgODQsIAotICAgIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDIxMSwgODQsIDc5LCA4MiwgNjcsIDcyLCAxMjgsIDg0LCA3OSwgODEsIDEyOCwgCi0gICAgODQsIDc5LCA4MCwgNjYsIDY1LCA4MiwgMTI4LCA4NCwgNzksIDgwLCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA2OSwgMTk2LCAKLSAgICA4NCwgNzksIDgwLCAxMjgsIDg0LCA3OSwgMjA4LCA4NCwgNzksIDc5LCA4NCwgNzIsIDEyOCwgODQsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIDc5LCA3OCwgCi0gICAgNzEsIDg1LCAxOTcsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTYsIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1NSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU0LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTMsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDY5LCA0NSwgNTAsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgMTI4LCAKLSAgICA4NCwgNzksIDc4LCA2NSwgMjA0LCA4NCwgNzksIDc3LCA4MCwgNzMsIDEyOCwgODQsIDc5LCA3NywgNjUsIDg0LCA3OSwgCi0gICAgMTI4LCA4NCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzUsIDg5LCAyMDcsIDg0LCA3OSwgNzMsIDc2LCAKLSAgICA2OSwgODQsIDEyOCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgODQsIAotICAgIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAKKyAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDc1LCA3MywgODMsIAorICAgIDIwMCwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgCisgICAgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgODQsIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCAKKyAgICA3NywgNjUsIDY5LCAxMjgsIDg0LCA4NSwgNzcsIDEyOCwgODQsIDg1LCA3NiwgNzMsIDgwLCAxMjgsIDg0LCA4NSwgNzUsIAorICAgIDg3LCA2OSwgNzgsIDg0LCA3MywgODMsIDEyOCwgODQsIDg1LCA3NSwgMTI4LCA4NCwgODUsIDcxLCA4MiwgNzMsIDIwMywgCisgICAgODQsIDg1LCA3MSwgNTAsIDEyOCwgODQsIDg1LCA3MSwgMTc4LCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgODQsIDg1LCAKKyAgICA2NSwgNjksIDgwLCAxMjgsIDg0LCA4NSwgNjUsIDY5LCAxMjgsIDg0LCAyMTMsIDg0LCA4NCwgODUsIDg1LCAxMjgsIDg0LCAKKyAgICA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIAorICAgIDg1LCAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgMTI4LCA4NCwgODQsIDg0LCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgCisgICAgMTI4LCA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgCisgICAgODQsIDg0LCA4MywgNjksIDEyOCwgODQsIDg0LCA4MywgNjUsIDEyOCwgODQsIDg0LCA3OSwgNzksIDEyOCwgODQsIDg0LCAKKyAgICA3MywgNzMsIDEyOCwgODQsIDg0LCA3MywgMTI4LCA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCA3MiwgODUsIAorICAgIDEyOCwgODQsIDg0LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIAorICAgIDg0LCA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCAKKyAgICA4NCwgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjUsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgODQsIDY1LCA4NSwgMTI4LCA4NCwgODQsIDY1LCA3MywgMTI4LCA4NCwgCisgICAgODQsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDUwLCAxMjgsIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4MywgODcsIDY1LCAKKyAgICAxMjgsIDg0LCA4MywgODYsIDEyOCwgODQsIDgzLCA4MywgNjksIDEyOCwgODQsIDgzLCA4MywgNjUsIDEyOCwgODQsIDgzLCAKKyAgICA3MiwgODUsIDcxLCA4MywgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgCisgICAgMjAzLCA4NCwgODMsIDcyLCA2OSwgODMsIDEyOCwgODQsIDgzLCA3MiwgNjksIDcxLCAxMjgsIDg0LCA4MywgNzIsIDY5LCAKKyAgICAxOTksIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCAKKyAgICA4NCwgODMsIDY1LCA2OCwgNzMsIDEyOCwgODQsIDgzLCA2NSwgNjgsIDIwMSwgODQsIDgzLCA2NSwgNjUsIDY4LCA3MywgODksIAorICAgIDEyOCwgODQsIDgzLCA2NSwgNjUsIDEyOCwgODQsIDgzLCAxOTMsIDg0LCA4MiwgODksIDY2LCA3NiwgNzMsIDc5LCAyMDYsIAorICAgIDg0LCA4MiwgODUsIDg0LCA3MiwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNzUsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDY3LCA2NSwgCisgICAgODQsIDY5LCAxOTYsIDg0LCA4MiwgODUsIDc3LCA4MCwgNjksIDg0LCAxMjgsIDg0LCA4MiwgODUsIDY5LCAxMjgsIDg0LCAKKyAgICA4MiwgODUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA2NSwgMjA0LCA4NCwgODIsIDc5LCA4MCwgNzIsIAorICAgIDg5LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgCisgICAgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDg0LCAKKyAgICA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzYsIDc2LCAKKyAgICA2OSwgODksIDY2LCA4NSwgODMsIDEyOCwgODQsIDgyLCA3OSwgNzUsIDg1LCA4NCwgNjUsIDgzLCA4NCwgMjAxLCA4NCwgODIsIAorICAgIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDg0LCA4MiwgNzMsIDg1LCA3NywgODAsIDcyLCAxMjgsIDg0LCA4MiwgCisgICAgNzMsIDg0LCA3OSwgMjExLCA4NCwgODIsIDczLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCAKKyAgICA3MywgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIAorICAgIDgwLCA3OSwgNjgsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDE5NywgCisgICAgODQsIDgyLCA3MywgNzksIDIwNiwgODQsIDgyLCA3MywgNzMsIDgzLCA2NSwgODAsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCAKKyAgICA2NSwgNzcsIDc3LCA3OSwgMjExLCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNzMsIDcxLCA3OSwgODIsIAorICAgIDcxLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MCwgCisgICAgNzksIDc2LCA3MywgNjUsIDg0LCAxOTcsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA4MiwgNzMsIDY4LCAKKyAgICA2OSwgNzgsIDIxMiwgODQsIDgyLCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIAorICAgIDg1LCA3NiwgNjUsIDIxMCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgCisgICAgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4MiwgNzMsIAorICAgIDY1LCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4NCwgODIsIDczLCA2NSwgCisgICAgMTI4LCA4NCwgODIsIDczLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4NCwgODIsIDY5LCAKKyAgICA3OCwgNjgsIDEyOCwgODQsIDgyLCA2OSwgNzgsIDE5NiwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MSwgCisgICAgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCAKKyAgICA0NSwgNDksIDEyOCwgODQsIDgyLCA2OSwgNjksIDEyOCwgODQsIDgyLCA2OSwgMTk3LCA4NCwgODIsIDY5LCA2NSwgNjgsIAorICAgIDczLCA3OCwgNzEsIDEyOCwgODQsIDgyLCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgODAsIDY5LCA5MCwgNzMsIDg1LCA3NywgCisgICAgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA4NCwgODIsIDY1LCA3OCwgODMsIDgwLCAKKyAgICA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCAyMTIsIDg0LCA4MiwgNjUsIAorICAgIDc4LCA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCAKKyAgICA4MywgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc3LCA4NywgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDc3LCAxMjgsIAorICAgIDg0LCA4MiwgNjUsIDIwNSwgODQsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDczLCAyMDYsIDg0LCA4MiwgCisgICAgNjUsIDczLCA3NiwgNzMsIDc4LCAxOTksIDg0LCA4MiwgNjUsIDcwLCA3MCwgNzMsIDY3LCAxMjgsIDg0LCA4MiwgNjUsIDcwLCAKKyAgICA3MCwgNzMsIDE5NSwgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODQsIAorICAgIDgyLCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgNzksIDg4LCAxMjgsIDg0LCA3OSwgODcsIDY5LCA4MiwgCisgICAgMTI4LCA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDg0LCA3OSwgNzMsIDgzLCAxOTcsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgCisgICAgMTI4LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgNzksIDgyLCA2NywgNzIsIDEyOCwgODQsIDc5LCAKKyAgICA4MSwgMTI4LCA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIAorICAgIDY5LCAxOTYsIDg0LCA3OSwgODAsIDEyOCwgODQsIDc5LCAyMDgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIAorICAgIDc5LCA3OCwgMTI4LCA4NCwgNzksIDc4LCA3OSwgODMsIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA4NCwgCisgICAgNzksIDc4LCA3MSwgODUsIDE5NywgODQsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NiwgMTI4LCAKKyAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA1MywgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgCisgICAgODQsIDc5LCA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzcsIDgwLCA3MywgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIAorICAgIDc5LCAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3NSwgODksIDIwNywgODQsIDc5LCA3MywgCisgICAgNzYsIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCAKKyAgICA4NCwgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIAogICAgIDEyOCwgODQsIDc2LCA4NiwgMTI4LCA4NCwgNzYsIDg1LCAxMjgsIDg0LCA3NiwgNzksIDEyOCwgODQsIDc2LCA3MywgMTI4LCAKICAgICA4NCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgODQsIDc2LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDg1LCAxMjgsIAogICAgIDg0LCA3NiwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3MywgMTI4LCA4NCwgCkBAIC03OTYsNDA5ICs3OTYsNDEwIEBACiAgICAgNjksIDg0LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA4MywgODUsIDY1LCAKICAgICAxMjgsIDgzLCAyMTMsIDgzLCA4NCwgODgsIDEyOCwgODMsIDg0LCA4NywgNjUsIDEyOCwgODMsIDg0LCA4NSwgNjgsIDg5LCAKICAgICAxMjgsIDgzLCA4NCwgODUsIDY3LCA3NSwgNDUsIDc5LCA4NSwgMjEyLCA4MywgODQsIDgzLCAxMjgsIDgzLCA4NCwgODIsIAotICAgIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIAotICAgIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAKLSAgICAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIAotICAgIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgCi0gICAgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCAKLSAgICA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIAotICAgIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIAotICAgIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgCi0gICAgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCAKLSAgICA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIAotICAgIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIAotICAgIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAotICAgIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgCi0gICAgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCAKLSAgICA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIAotICAgIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgCi0gICAgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIAotICAgIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgCi0gICAgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCAKLSAgICA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAKLSAgICAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCAKLSAgICA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIAotICAgIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgCi0gICAgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIAotICAgIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgCi0gICAgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKLSAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgCi0gICAgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCAKLSAgICA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIAotICAgIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgCi0gICAgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgCi0gICAgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCAKLSAgICA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIAotICAgIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCAKLSAgICA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCAKLSAgICA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIAotICAgIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgCi0gICAgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCAKLSAgICA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgCi0gICAgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIAotICAgIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAKLSAgICAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA4MywgODAsIAotICAgIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgCi0gICAgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCAKLSAgICA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIAotICAgIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgCi0gICAgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAKLSAgICAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIAotICAgIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIAotICAgIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgCi0gICAgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCAKLSAgICA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIAotICAgIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIAotICAgIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgCi0gICAgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCAKLSAgICA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIAotICAgIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIAotICAgIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgCi0gICAgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAKLSAgICA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIAotICAgIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAKLSAgICAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCAKLSAgICA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIAotICAgIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgCi0gICAgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAKLSAgICAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIAotICAgIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgCi0gICAgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAKLSAgICAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgCi0gICAgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCAKLSAgICA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIAotICAgIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgCi0gICAgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCAKLSAgICA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCAKLSAgICA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCAKLSAgICA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCAKLSAgICA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCAKLSAgICA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCAKLSAgICA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCi0gICAgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgCi0gICAgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIAotICAgIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIAotICAgIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIAotICAgIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgCi0gICAgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCAKLSAgICA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIAotICAgIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAKLSAgICAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIAotICAgIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgCi0gICAgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCAKLSAgICA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIAotICAgIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgCi0gICAgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCAKLSAgICA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCAKLSAgICA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIAotICAgIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgCi0gICAgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAKLSAgICAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIAotICAgIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIAotICAgIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgCi0gICAgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCAKLSAgICA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgCi0gICAgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCAKLSAgICA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIAotICAgIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAKLSAgICAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIAotICAgIDcyLCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgCi0gICAgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIAotICAgIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCAKLSAgICA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgCi0gICAgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgCi0gICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIAotICAgIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCAyMTIsIDgzLCA3MiwgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgCi0gICAgODMsIDcyLCA3OSwgNzksIDg0LCA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAKLSAgICAxMjgsIDgzLCA3MiwgNzksIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgMTk3LCA4MywgNzIsIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIAotICAgIDY1LCA3NiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgCi0gICAgNzIsIDczLCA4MiwgMjEyLCA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDIxMCwgODMsIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIAotICAgIDg0LCAyMDcsIDgzLCA3MiwgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgCi0gICAgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAKLSAgICAxOTMsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIAotICAgIDcyLCA3MywgNjgsIDEyOCwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIAotICAgIDgzLCA3MiwgNjksIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgODUsIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCAKLSAgICA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgCi0gICAgODMsIDcyLCA3MywgNzEsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIAotICAgIDgzLCA3MiwgNjksIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIAotICAgIDY1LCA4NCwgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIAotICAgIDgzLCA3MiwgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODYsIDczLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCAKLSAgICA2NSwgODQsIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIAotICAgIDgyLCA4MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODIsIDUwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgCi0gICAgNzcsIDgyLCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIAotICAgIDE5NiwgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgNjgsIDY4LCAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAKLSAgICAxMjgsIDgzLCA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCAKLSAgICA2NSwgMjE1LCA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCAKLSAgICA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgCi0gICAgNzgsIDg0LCAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIAotICAgIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDY5LCA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCAKLSAgICA3MCwgNzksIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIAotICAgIDg1LCA3MywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgCi0gICAgNjksIDgyLCA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAKLSAgICAyMTEsIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIAotICAgIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgCi0gICAgNzksIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCAKLSAgICA4NSwgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgCi0gICAgMTI4LCA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIAotICAgIDIxMiwgODMsIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgCi0gICAgNzMsIDc4LCA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCAKLSAgICA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIAotICAgIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCAKLSAgICA3NiwgMTk3LCA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIAotICAgIDc5LCA3MywgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKLSAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIAotICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAotICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCAKLSAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKLSAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIAotICAgIDE5MywgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIAotICAgIDgzLCA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCisgICAgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAorICAgIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCAKKyAgICA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgCisgICAgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgCisgICAgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIAorICAgIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgCisgICAgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIAorICAgIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgCisgICAgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCAKKyAgICA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIAorICAgIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgCisgICAgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgCisgICAgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIAorICAgIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgCisgICAgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCAKKyAgICA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIAorICAgIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgCisgICAgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgCisgICAgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCAKKyAgICA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgCisgICAgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgCisgICAgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCAKKyAgICA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIAorICAgIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIAorICAgIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgCisgICAgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAKKyAgICAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCAKKyAgICA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIAorICAgIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIAorICAgIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgCisgICAgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIAorICAgIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgCisgICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCAKKyAgICA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCAKKyAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgCisgICAgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIAorICAgIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgCisgICAgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCAKKyAgICA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAorICAgIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgCisgICAgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIAorICAgIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgCisgICAgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIAorICAgIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgCisgICAgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIAorICAgIDY1LCA3NiwgMTI4LCA4MywgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIAorICAgIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgCisgICAgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCAKKyAgICA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIAorICAgIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgCisgICAgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCAKKyAgICA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIAorICAgIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIAorICAgIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgCisgICAgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIAorICAgIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgCisgICAgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIAorICAgIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgCisgICAgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCAKKyAgICA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCAKKyAgICA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCAKKyAgICA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIAorICAgIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgCisgICAgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgCisgICAgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIAorICAgIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgCisgICAgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCAKKyAgICA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIAorICAgIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgCisgICAgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIAorICAgIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgCisgICAgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCAKKyAgICA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIAorICAgIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAKKyAgICA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCAKKyAgICA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIAorICAgIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCAKKyAgICA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKKyAgICA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgCisgICAgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCisgICAgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIAorICAgIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgCisgICAgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIAorICAgIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIAorICAgIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgCisgICAgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAKKyAgICAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIAorICAgIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCAKKyAgICA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgCisgICAgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgCisgICAgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCAKKyAgICA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIAorICAgIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgCisgICAgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCAKKyAgICA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCAKKyAgICA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIAorICAgIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgCisgICAgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAKKyAgICAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCAKKyAgICA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIAorICAgIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgCisgICAgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCAKKyAgICA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIAorICAgIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgCisgICAgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgCisgICAgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCAKKyAgICA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgCisgICAgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAKKyAgICAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIDcyLCA3OSwgODQsIDEyOCwgODMsIAorICAgIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgCisgICAgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAKKyAgICA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgCisgICAgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIAorICAgIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgCisgICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIAorICAgIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKKyAgICA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAorICAgIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAyMTIsIDgzLCA3MiwgCisgICAgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgODMsIDcyLCA3OSwgNzksIDg0LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAxMjgsIDgzLCA3MiwgNzksIAorICAgIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCA3OSwgMTk3LCA4MywgNzIsIAorICAgIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIDY1LCA3NiwgNjUsIDY1LCAKKyAgICAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgNzIsIDczLCA4MiwgMjEyLCAKKyAgICA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCA3MiwgNzMsIDIxMCwgODMsIAorICAgIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIDg0LCAyMDcsIDgzLCA3MiwgCisgICAgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgNzMsIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxOTMsIDgzLCA3MiwgNzMsIAorICAgIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIDcyLCA3MywgNjgsIDEyOCwgCisgICAgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIDgzLCA3MiwgNjksIDg4LCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODUsIAorICAgIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgCisgICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgNzEsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDgzLCA3MiwgNjksIAorICAgIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIDcyLCA2OSwgCisgICAgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIDY1LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIDgzLCA3MiwgCisgICAgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCA2NSwgODQsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIDgyLCA4MCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDUwLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgNzcsIDgyLCAKKyAgICA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgCisgICAgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCAKKyAgICAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAxMjgsIDgzLCAKKyAgICA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCA2NSwgMjE1LCAKKyAgICA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCA2OSwgODgsIAorICAgIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIDgyLCA2NSwgCisgICAgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCAKKyAgICAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgODMsIDY5LCAKKyAgICA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCA3MCwgNzksIAorICAgIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIDg1LCA3MywgCisgICAgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgNjksIDgyLCAKKyAgICA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAyMTEsIAorICAgIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCA4NSwgCisgICAgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgMTI4LCAKKyAgICA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIDIxMiwgODMsIAorICAgIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgNzMsIDc4LCAKKyAgICA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCA3MywgNjcsIAorICAgIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIDc3LCA3MywgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCAKKyAgICA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIDc5LCA3MywgCisgICAgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA0OCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAorICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDksIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIAorICAgIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTIsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgCisgICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAorICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUzLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCisgICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIDE5MywgCisgICAgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCiAgICAgMTI4LCA4MywgNjksIDY5LCAyMDYsIDgzLCA2OSwgNjksIDY4LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNjksIDY5LCAKICAgICA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgMjA0LCA4MywgNjksIDY3LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgNjcsIAogICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDY5LCA2NywgODIsIDY5LCA4NCwgCkBAIC0xMjkyLDI3MzEgKzEyOTMsMjczMyBAQAogICAgIDY3LCAyMDMsIDgyLCA3OSwgNjcsIDEyOCwgODIsIDc5LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA3OSwgNjUsIDgzLCA4NCwgCiAgICAgNjksIDE5NiwgODIsIDc5LCA2NSwgODIsIDEyOCwgODIsIDc5LCA2NSwgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgCiAgICAgODIsIDc4LCA3OSwgNzksIDc4LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA3OCwgNjUsIDIwNSwgODIsIDc3LCAKLSAgICA4NCwgMTI4LCA4MiwgNzYsIDc5LCAxMjgsIDgyLCA3NiwgNzcsIDEyOCwgODIsIDc2LCA2OSwgMTI4LCA4MiwgNzQsIDY5LCAKLSAgICAyMTEsIDgyLCA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNzMsIDg0LCAKLSAgICA4NSwgNjUsIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCA3MywgODQsIDgzLCA3MywgCi0gICAgMTI4LCA4MiwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIDEyOCwgODIsIDczLCA4MiwgNjUsIDEyOCwgCi0gICAgODIsIDczLCA4MCwgMTI4LCA4MiwgNzMsIDc4LCA3MSwgMjExLCA4MiwgNzMsIDc4LCA3MCwgNzksIDgyLCA5MCwgNjUsIDc4LCAKLSAgICA2OCwgNzksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzcsIDcxLCA2NiwgNjUsIDEyOCwgODIsIDczLCA3NSwgODIsIAotICAgIDczLCA3NSwgMTI4LCA4MiwgNzMsIDcxLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgCi0gICAgODIsIDY4LCA4MywgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCAKLSAgICA0NSwgODQsIDc5LCA0NSwgNzYsIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIAotICAgIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgODIsIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgCi0gICAgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgODMsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgCi0gICAgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAotICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCAKLSAgICA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIAotICAgIDg0LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgyLCA3MywgNjksIDg1LCAyMDQsIDgyLCA3MywgNjksIDc2LCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDY5LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgMTI4LCA4MiwgNzMsIDY3LCA2OSwgMTI4LCAKLSAgICA4MiwgNzMsIDY3LCAxOTcsIDgyLCA3MywgNjYsIDY2LCA3OSwgNzgsIDEyOCwgODIsIDczLCA2NSwgMjA0LCA4MiwgNzIsIAotICAgIDc5LCA4NCwgNzMsIDE5NSwgODIsIDcyLCA3OSwgMTI4LCA4MiwgNzIsIDIwNywgODIsIDcyLCA2NSwgMTI4LCA4MiwgNzEsIAotICAgIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MiwgNzEsIDg5LCA2NSwgNzgsIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgCi0gICAgNjksIDg2LCA3OSwgNzYsIDg2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA4NiwgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDczLCA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgCi0gICAgODIsIDgzLCA2OSwgNjgsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDE5NiwgODIsIDY5LCA4NiwgNjksIDgyLCAKLSAgICA4MywgMTk3LCA4MiwgNjksIDg1LCA4OCwgMTI4LCA4MiwgNjksIDg1LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCAyMDYsIDgyLCA2OSwgODQsIDgyLCA3OSwgNzAsIDc2LCA2OSwgMjE2LCA4MiwgCi0gICAgNjksIDg0LCA4MiwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDg0LCA3OSwgODIsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDg1LCAKLSAgICA4MCwgNzMsIDc4LCA4NSwgODMsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3OSwgNzksIDc3LCAxMjgsIDgyLCA2OSwgODMsIAotICAgIDg0LCA4MiwgNzMsIDY3LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MywgODQsIDEyOCwgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgCi0gICAgODMsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgNzYsIDg1LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDgzLCA3MywgODMsIDg0LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDgzLCA3MywgNjgsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDIwMCwgODIsIDY5LCA4MiwgNjksIDc4LCA3MSwgCi0gICAgNzEsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgyLCA2OSwgNzUsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgwLCA4MiwgNjksIDgzLCAKLSAgICA2OSwgNzgsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3NywgNjksIDc4LCAyMTIsIDgyLCA2OSwgODAsIAotICAgIDcyLCAxMjgsIDgyLCA2OSwgODAsIDY5LCA4NCwgNzMsIDg0LCA3MywgNzksIDIwNiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgCi0gICAgNjksIDE5NiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCAKLSAgICA4MCwgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjksIDgwLCA2NSwgMTI4LCA4MiwgNjksIDgwLCAxOTMsIDgyLCA2OSwgNzgsIAotICAgIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc4LCAxMjgsIDgyLCA2OSwgMjA2LCA4MiwgNjksIDc3LCA4NSwgCi0gICAgMTI4LCA4MiwgNjksIDc3LCA2OSwgNjgsIDg5LCAxMjgsIDgyLCA2OSwgNzYsIDczLCA3MSwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MiwgNjksIDc2LCA3MywgNjksIDg2LCA2OSwgMTk2LCA4MiwgNjksIDc2LCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgCi0gICAgNjksIDc2LCA2NSwgNjUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAxOTksIDgyLCA2OSwgNzMsIDE5NiwgODIsIDY5LCAKLSAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MiwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUxLCAxMjgsIAotICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDEyOCwgCi0gICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgMjExLCA4MiwgNjksIDcxLCA3MywgODMsIDg0LCA2OSwgODIsIDY5LCAxOTYsIDgyLCAKLSAgICA2OSwgNzEsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzEsIDczLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIAotICAgIDczLCA2NSwgMTI4LCA4MiwgNjksIDcwLCA3OSwgODIsIDc3LCA2OSwgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgODIsIDY5LCA2OCwgODUsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCAKLSAgICA2NywgODksIDY3LCA3NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIAotICAgIDg0LCA3MywgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIAotICAgIDc2LCAxOTcsIDgyLCA2OSwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDY3LCA3OSwgCi0gICAgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCAKLSAgICA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIDE5NywgODIsIDY5LCA2NywgNjksIDczLCA4NiwgNjksIAotICAgIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgCi0gICAgODIsIDEyOCwgODIsIDY5LCA2NSwgNzIsIDc3LCA4NSwgNzUsIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCAKLSAgICA2OCwgMjA3LCA4MiwgNjgsIDY5LCAyMDQsIDgyLCA2NiwgNjUsIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCAKLSAgICA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODIsIDY1LCA4NCwgNzIsIDE5MywgODIsIDY1LCA4NCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIAotICAgIDgzLCA4NywgNjUsIDY4LCA3MywgMTI4LCA4MiwgNjUsIDgzLCA3OSwgODUsIDIwNCwgODIsIDY1LCA4MywgNzIsIDY1LCAKLSAgICAxMjgsIDgyLCA2NSwgODEsIDEyOCwgODIsIDY1LCA4MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIAotICAgIDE5NywgODIsIDY1LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA3OCwgMTI4LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIAotICAgIDY2LCA2NSwgODQsIDEyOCwgODIsIDY1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODIsIDY1LCA3NSwgNjUsIDY1LCA4MiwgCi0gICAgNjUsIDY1LCA3OCwgODMsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY1LCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNjUsIDczLCAKLSAgICA4MywgNjksIDE5NiwgODIsIDY1LCA3MywgNzgsIDY2LCA3OSwgODcsIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgODksIAotICAgIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgMjE3LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA4MiwgNjUsIDczLCA2OCwgCi0gICAgMjA3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgODIsIDY1LCA3MiwgNzcsIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIAotICAgIDIwMCwgODIsIDY1LCA3MiwgMTI4LCA4MiwgNjUsIDcwLCA2OSwgMTI4LCA4MiwgNjUsIDY5LCA3NywgMTI4LCA4MiwgNjUsIAotICAgIDY4LCA3MywgNzksIDY1LCA2NywgODQsIDczLCA4NiwgMTk3LCA4MiwgNjUsIDY4LCA3MywgNzksIDEyOCwgODIsIDY1LCA2OCwgCi0gICAgNzMsIDIwNywgODIsIDY1LCA2OCwgMjAxLCA4MiwgNjUsIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIDY3LCA4MSwgCi0gICAgODUsIDY5LCAyMTIsIDgyLCA2NSwgNjcsIDczLCA3OCwgNzEsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCA4NCwgMTI4LCAKLSAgICA4MiwgNjUsIDY2LCA2NiwgNzMsIDIxMiwgODIsIDY1LCA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIAotICAgIDUxLCAxMjgsIDgyLCA2NSwgNTAsIDEyOCwgODIsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNTcsIDEyOCwgODIsIAotICAgIDQ4LCA1MCwgNTYsIDEyOCwgODIsIDQ4LCA1MCwgNTUsIDEyOCwgODIsIDQ4LCA1MCwgNTQsIDEyOCwgODIsIDQ4LCA1MCwgCi0gICAgNTMsIDEyOCwgODIsIDQ4LCA1MCwgNTIsIDEyOCwgODIsIDQ4LCA1MCwgNTEsIDEyOCwgODIsIDQ4LCA1MCwgNTAsIDEyOCwgCi0gICAgODIsIDQ4LCA1MCwgNDksIDEyOCwgODIsIDQ4LCA1MCwgNDgsIDEyOCwgODIsIDQ4LCA0OSwgNTcsIDEyOCwgODIsIDQ4LCAKLSAgICA0OSwgNTYsIDEyOCwgODIsIDQ4LCA0OSwgNTUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDgyLCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDgyLCA0OCwgNDksIDUzLCAxMjgsIDgyLCA0OCwgNDksIDUyLCAxMjgsIDgyLCA0OCwgNDksIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDksIDUwLCAxMjgsIDgyLCA0OCwgNDksIDQ5LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA4MiwgCi0gICAgNDgsIDQ5LCA0OCwgMTI4LCA4MiwgNDgsIDQ4LCA1NywgMTI4LCA4MiwgNDgsIDQ4LCA1NiwgMTI4LCA4MiwgNDgsIDQ4LCAKLSAgICA1NSwgMTI4LCA4MiwgNDgsIDQ4LCA1NCwgMTI4LCA4MiwgNDgsIDQ4LCA1MywgMTI4LCA4MiwgNDgsIDQ4LCA1MiwgMTI4LCAKLSAgICA4MiwgNDgsIDQ4LCA1MSwgNjYsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgMTI4LCA4MiwgNDgsIDQ4LCA0OSwgMTI4LCA4MiwgCi0gICAgNDUsIDY3LCA4MiwgNjksIDE5NywgODEsIDg5LCA4OCwgMTI4LCA4MSwgODksIDg1LCAxMjgsIDgxLCA4OSwgODQsIDEyOCwgCi0gICAgODEsIDg5LCA4MiwgODgsIDEyOCwgODEsIDg5LCA4MiwgMTI4LCA4MSwgODksIDgwLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgCi0gICAgODEsIDg5LCA3MywgMTI4LCA4MSwgODksIDY5LCA2OSwgMTI4LCA4MSwgODksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAKLSAgICAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCAxMjgsIDgxLCA4NywgNzMsIDEyOCwgODEsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgODEsIDg3LCA2OSwgMTI4LCA4MSwgODcsIDY1LCA2NSwgMTI4LCA4MSwgODcsIDY1LCAxMjgsIDgxLCA4NSwgODgsIDEyOCwgCi0gICAgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCAxMjgsIDgxLCA4NSwgODQsIDEyOCwgCi0gICAgODEsIDg1LCA4MywgNzIsIDgzLCA3MiwgNjUsIDg5LCA2NSwgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDgyLCAKLSAgICAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIDg1LCA3OSwgODgsIDEyOCwgODEsIDg1LCA3OSwgODQsIDE5NywgODEsIDg1LCAKLSAgICA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIAotICAgIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCA3NSwgMTI4LCA4MSwgODUsIDczLCA3OCwgODQsIDY5LCA4MywgODMsIDY5LCA3OCwgCi0gICAgNjcsIDY5LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2OSwgODMsIDczLCA3NywgMTkzLCA4MSwgODUsIDczLCAKLSAgICA3OCwgNjcsIDg1LCA3OCwgODgsIDEyOCwgODEsIDg1LCA3MywgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDgxLCA4NSwgNzMsIAotICAgIDc2LCA3NiwgMTI4LCA4MSwgODUsIDczLCA2NywgMjAzLCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzAsIDEyOCwgODEsIAotICAgIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDIwNiwgODEsIDg1LCA2OSwgNjksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDY5LCAKLSAgICAyMDYsIDgxLCA4NSwgNjksIDEyOCwgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgMTI4LCA4MSwgODUsIDY1LCA4NCwgNjksIAotICAgIDgyLCA3OCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MSwgODUsIDY1LCA4MiwgCi0gICAgODQsIDY5LCA4MiwgMjExLCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAKLSAgICAyMTAsIDgxLCA4NSwgNjUsIDc4LCA4NCwgNzMsIDg0LCAyMTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgODUsIDgwLCA3NiwgCi0gICAgMTk3LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgODQsIDEyOCwgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIAotICAgIDIxMiwgODEsIDg1LCA2NSwgNjgsIDEyOCwgODEsIDg1LCA2NSwgMTk2LCA4MSwgODUsIDY1LCAxMjgsIDgxLCA4NSwgMTI4LCAKLSAgICA4MSwgMjA4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCA3OSwgODQsIDEyOCwgODEsIDc5LCA4MCwgNzIsIDEyOCwgODEsIDc5LCAKLSAgICA4MCwgNjUsIDEyOCwgODEsIDc5LCA4MCwgMTI4LCA4MSwgNzksIDc5LCAxMjgsIDgxLCA3OSwgMjA3LCA4MSwgNzksIDcwLCAKLSAgICAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgNzksIDY1LCAxMjgsIDgxLCA3OSwgMTI4LCA4MSwgNzgsIDEyOCwgODEsIDczLCA4OCwgCi0gICAgMTI4LCA4MSwgNzMsIDg0LCA4MywgNjUsIDEyOCwgODEsIDczLCA4NCwgMTI4LCA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgCi0gICAgNzMsIDEyOCwgODEsIDczLCA2OSwgODgsIDEyOCwgODEsIDczLCA2OSwgODQsIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgODEsIDczLCA2OSwgMTI4LCA4MSwgNzMsIDEyOCwgODEsIDcyLCA4NywgNzMsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAKLSAgICAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCAKLSAgICA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MiwgNzksIDEyOCwgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCAKLSAgICA4MSwgNzIsIDY5LCAxMjgsIDgxLCA3MiwgNjUsIDY1LCAxMjgsIDgxLCA3MiwgNjUsIDEyOCwgODEsIDcxLCA2NSwgMTI4LCAKLSAgICA4MSwgNjksIDg0LCA2NSwgNzgsIDY1LCAxMjgsIDgxLCA2OSwgNjksIDEyOCwgODEsIDY5LCAxMjgsIDgxLCA2NSwgODUsIAotICAgIDEyOCwgODEsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDgxLCA2NSwgODIsIDc4LCA2OSwgMjE3LCA4MSwgNjUsIDgyLCAxMjgsIAotICAgIDgxLCA2NSwgODEsIDEyOCwgODEsIDY1LCA4MCwgNzIsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgMTI4LCA4MSwgCi0gICAgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCA3NiwgMTkzLCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIAotICAgIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDcwLCAxMjgsIDgxLCA2NSwgMTk4LCA4MSwgNjUsIDY4LCA3NywgNjUsIAotICAgIDEyOCwgODEsIDY1LCA2NSwgNzMsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjUsIDcwLCAxMjgsIAotICAgIDgxLCA0OCwgNDgsIDU1LCAxMjgsIDgxLCA0OCwgNDgsIDU0LCAxMjgsIDgxLCA0OCwgNDgsIDUzLCAxMjgsIDgxLCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDgxLCA0OCwgNDgsIDUxLCAxMjgsIDgxLCA0OCwgNDgsIDUwLCAxMjgsIDgxLCA0OCwgNDgsIDQ5LCAKLSAgICAxMjgsIDgwLCA5MCwgMTI4LCA4MCwgODksIDg4LCAxMjgsIDgwLCA4OSwgODQsIDEyOCwgODAsIDg5LCA4MiwgODgsIDEyOCwgCi0gICAgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDgwLCAxMjgsIDgwLCA4OSwgMTI4LCA4MCwgODcsIDc5LCA4OSwgMTI4LCA4MCwgCi0gICAgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCA3MywgMTI4LCA4MCwgCi0gICAgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCA2NSwgNjUsIDEyOCwgCi0gICAgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgODUsIDg4LCAxMjgsIDgwLCA4NSwgODUsIDg0LCAxMjgsIDgwLCA4NSwgCi0gICAgODUsIDEyOCwgODAsIDg1LCA4NCwgODIsIDY5LCA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDg0LCAKLSAgICAxMjgsIDgwLCA4NSwgMjEyLCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgODAsIAotICAgIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgCi0gICAgODUsIDgyLCA4MywgNjksIDEyOCwgODAsIDg1LCA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDc4LCA2NSwgNzcsIDY1LCAKLSAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIDEyOCwgODAsIDg1LCA4MiwgNzMsIDcwLCA4OSwgMTI4LCA4MCwgODUsIAotICAgIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIDg1LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA4NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCAKLSAgICA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODUsIDc3LCA4MCwgMTI4LCA4MCwgODUsIDc3LCAxMjgsIAotICAgIDgwLCA4NSwgNjksIDEyOCwgODAsIDg1LCA2NiwgNzYsIDczLCAxOTUsIDgwLCA4NSwgNjUsIDgxLCAxMjgsIDgwLCA4NSwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCA0OSwgMTI4LCA4MCwgODUsIDEyOCwgODAsIDg0LCA3MiwgCi0gICAgNjUsIDcyLCAxOTMsIDgwLCA4NCwgNjksIDEyOCwgODAsIDgzLCA3MywgNzYsIDIwMSwgODAsIDgzLCA3MywgNzAsIDczLCAKLSAgICA4MywgODQsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgCi0gICAgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIAotICAgIDgzLCA4NCwgNzksIDIwNiwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCAKLSAgICA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDgwLCA4MywgMTI4LCA4MCwgODIsIDc5LCA4NiwgNjksIDEyOCwgODAsIDgyLCAKLSAgICA3OSwgODQsIDc5LCA4NiwgNjUsIDgyLCA4OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgNzksIDIxMSwgODAsIDgyLCA3OSwgODQsIAotICAgIDY5LCA2NywgODQsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgODAsIAotICAgIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCA3OSwgCi0gICAgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCAKLSAgICA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIAotICAgIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCi0gICAgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDc5LCAKLSAgICA3MCwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODAsIDgyLCA3OSwgNjgsIDg1LCA2NywgODQsIDEyOCwgODAsIDgyLCA3OSwgNjgsIAotICAgIDg1LCA2NywgMjEyLCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCAKLSAgICAxOTcsIDgwLCA4MiwgNzMsIDg2LCA2NSwgNjcsIDIxNywgODAsIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIAotICAgIDg0LCA4MiwgMTkzLCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgCi0gICAgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAKLSAgICAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIAotICAgIDgzLCA2OSwgODQsIDEyOCwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgCi0gICAgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA3OCwgNzUsIDcyLCA2NSwgMTI4LCA4MCwgODIsIDY5LCA3MCwgCi0gICAgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNjksIDY3LCA3MywgODAsIDczLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDY5LCAKLSAgICA2NywgNjksIDY4LCA3MywgNzgsIDE5OSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIAotICAgIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgCi0gICAgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAKLSAgICAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIAotICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgCi0gICAgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIAotICAgIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCAKLSAgICA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAKLSAgICAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIDc2LCA4NCwgODIsIDIxNywgODAsIDc5LCA4NSwgNjcsIAotICAgIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA4MCwgCi0gICAgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA3OSwgODMsIDg0LCAKLSAgICA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNzksIDgzLCA4NCwgMTI4LCA4MCwgNzksIAotICAgIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgCi0gICAgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDgwLCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA4MCwgMTI4LCA4MCwgNzksIDIwOCwgODAsIDc5LCA3OSwgNjgsIDc2LCA2OSwgMTI4LCAKLSAgICA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCA3OSwgMTI4LCA4MCwgNzksIDIwNiwgODAsIDc5LCA3NywgNzcsIAotICAgIDY5LCA2OSwgMTI4LCA4MCwgNzksIDc3LCA3NywgNjksIDE5NywgODAsIDc5LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA4MCwgCi0gICAgNzksIDc2LCA3MywgNjcsIDE5NywgODAsIDc5LCA3NiwgMjAxLCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc2LCAKLSAgICAxOTcsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIAotICAgIDgwLCA3OSwgNzMsIDc4LCA4NCwgMjExLCA4MCwgNzksIDczLCA3OCwgODQsIDc5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCAKLSAgICA3OSwgNzMsIDc4LCAyMTIsIDgwLCA3OSwgNjksIDg0LCA4MiwgMjE3LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIAotICAgIDc5LCA2OCwgNjUsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA2NSwgMTI4LCA4MCwgNzksIDEyOCwgODAsIDIwNywgODAsIAotICAgIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgwLCA3NiwgODUsIDg0LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgCi0gICAgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3NiwgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIAotICAgIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIAotICAgIDgwLCA3NiwgODUsIDcxLCAxMjgsIDgwLCA3NiwgODUsIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgCi0gICAgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2OCwgMTI4LCAKLSAgICA4MCwgNzYsIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIAotICAgIDY1LCA3OCwgNjksIDEyOCwgODAsIDc2LCA2NSwgNzgsIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgCi0gICAgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCAKLSAgICA2OCwgNjksIDIxMCwgODAsIDc2LCA2NSwgNjcsIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIAotICAgIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3MywgCi0gICAgODcsIDgyLCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCAKLSAgICA3MCwgNzksIDgyLCAyMDMsIDgwLCA3MywgODQsIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCA3NiwgMTI4LCA4MCwgNzMsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgCi0gICAgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA4MCwgNzMsIDgwLCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA4MCwgNzMsIAotICAgIDgwLCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgCi0gICAgMjA0LCA4MCwgNzMsIDc4LCA2OSwgNjUsIDgwLCA4MCwgNzYsIDY5LCAxMjgsIDgwLCA3MywgNzgsIDE5NywgODAsIDczLCAKLSAgICA3OCwgNjUsIDgyLCA2NiwgNzksIDgyLCA2NSwgODMsIDEyOCwgODAsIDczLCA3NiwgNzYsIDEyOCwgODAsIDczLCA3NiwgCi0gICAgMTk3LCA4MCwgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCAKLSAgICA3NSwgNzksIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDE5OSwgODAsIDczLCA2OSwgODgsIDEyOCwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3MywgNjksIAotICAgIDg1LCAyMDgsIDgwLCA3MywgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY5LCA4NCwgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODEsIDEyOCwgODAsIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCA3MywgNjksIDEyOCwgCi0gICAgODAsIDczLCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCAKLSAgICA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIAotICAgIDIwMSwgODAsIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIDcyLCA4NSwgCi0gICAgMjEwLCA4MCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgNzIsIDc5LCAKLSAgICA3OCwgNjksIDgzLCAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgNzMsIDY3LCA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIAotICAgIDEyOCwgODAsIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIAotICAgIDc4LCA4NCwgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCA3OSwgODMsIDc5LCA4MCwgNzIsIDY5LCA4MiwgMjExLCA4MCwgCi0gICAgNzIsIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODQsIAotICAgIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MywgNzMsIDc5LCAKLSAgICA4MywgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzIsIAotICAgIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKLSAgICAyMDAsIDgwLCA3MiwgNzMsIDEyOCwgODAsIDcyLCAyMDEsIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNjksIDEyOCwgCi0gICAgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTQsIDgwLCA3MiwgNjUsIDgyLCAKLSAgICA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIAotICAgIDcyLCA2NSwgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgCi0gICAgODAsIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCAKLSAgICA3MiwgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg1LCAKLSAgICA4NCwgNjUsIDY5LCAxMjgsIDgwLCA2OSwgODUsIDg0LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDc5LCA3NSwgNzksIAotICAgIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzMsIDEyOCwgODAsIDY5LCA4NCwgCi0gICAgNjUsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNjksIDE5NiwgODAsIDY5LCA4MywgNzksIAotICAgIDEyOCwgODAsIDY5LCA4MywgMjA3LCA4MCwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIAotICAgIDgwLCA2OSwgMjExLCA4MCwgNjksIDgyLCA4NCwgNzIsIDIwNywgODAsIDY5LCA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIAotICAgIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY5LCA4MiwgCi0gICAgODMsIDY5LCA4NiwgNjksIDgyLCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIAotICAgIDc2LCA2NSwgODIsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgCi0gICAgNjksIDgyLCA3NywgNzMsIDg0LCA4NCwgNjksIDE5NiwgODAsIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCAKLSAgICA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgCi0gICAgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNzksIDgyLCA3NywgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDcwLCAKLSAgICA2OSwgNjcsIDg0LCA4NSwgMjA1LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgODAsIDY5LCA4MiwgNzAsIAotICAgIDY5LCA2NywgODQsIDE5MywgODAsIDY5LCA4MiwgNjcsIDg1LCA4MywgODMsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY5LCA4MCwgNjksIDIxMiwgODAsIDY5LCAKLSAgICA3OSwgODIsIDg0LCAyMDAsIDgwLCA2OSwgNzksIDgwLCA3NiwgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIAotICAgIDc3LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgCi0gICAgNzEsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIDEyOCwgODAsIDY5LCA3OCwgODMsIDczLCA4NiwgMTk3LCAKLSAgICA4MCwgNjksIDc4LCA3OCwgMjE3LCA4MCwgNjksIDc4LCA3MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA4NSwgNzMsIAotICAgIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNzgsIDY5LCA4NCwgODIsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA2NywgNzMsIDc2LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgMjA2LCA4MCwgNjksIDczLCA4NCwgNzIsIDEyOCwgODAsIAotICAgIDY5LCA3MiwgNjksIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCAyMDAsIDgwLCA2OSwgNzIsIDEyOCwgODAsIDY5LCAyMDAsIAotICAgIDgwLCA2OSwgNjksIDkwLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgwLCAKLSAgICAxMjgsIDgwLCA2OSwgNjksIDc3LCAxMjgsIDgwLCA2OSwgNjksIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIAotICAgIDczLCA2NSwgNzgsIDgzLCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCAxMjgsIDgwLCA2OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNjksIDY4LCAKLSAgICA2NSwgMjA0LCA4MCwgNjksIDY1LCA2NywgNzIsIDEyOCwgODAsIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIAotICAgIDY3LCAxOTcsIDgwLCA2OCwgNzAsIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIAotICAgIDEyOCwgODAsIDY1LCA4OSwgNjksIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA4OSwgMTI4LCA4MCwgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgCi0gICAgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCAKLSAgICA3OCwgMTI4LCA4MCwgNjUsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIAotICAgIDgwLCA2NSwgODQsIDY1LCA3NSwgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgCi0gICAgNjUsIDgzLCA4NSwgODEsIDEyOCwgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCAKLSAgICA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgCi0gICAgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgCi0gICAgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgODMsIDY5LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIAotICAgIDgyLCA4NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgCi0gICAgNzMsIDIwOCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIAotICAgIDY5LCAxOTYsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgCi0gICAgODAsIDY1LCA4MiwgMjEyLCA4MCwgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCAKLSAgICA4NCwgNzMsIDcxLCA3NywgNjksIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIAotICAgIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCAKLSAgICA4MywgNzMsIDIxMSwgODAsIDY1LCA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIAotICAgIDc2LCA2OSwgNzYsIDc5LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIAotICAgIDczLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgCi0gICAgNjUsIDc2LCA2OSwgODMsIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCAKLSAgICA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgMjAwLCA4MCwgNjUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAKLSAgICAxMjgsIDgwLCA2NSwgODAsIDY5LCA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIAotICAgIDY1LCA4MCwgMTI4LCA4MCwgNjUsIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDg5LCA3MywgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA4OSwgNjUsIDc4LCA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA4NCwgNzMsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA3MSwgODIsIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgCi0gICAgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCAKLSAgICA4OSwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIAotICAgIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCAKLSAgICA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCAKLSAgICA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIAotICAgIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgCi0gICAgMTI4LCA4MCwgNjUsIDc2LCA4NSwgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc2LCAyMDUsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIAotICAgIDEyOCwgODAsIDY1LCA3NiwgNjksIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgCi0gICAgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIAotICAgIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgCi0gICAgNjUsIDIwMywgODAsIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCAKLSAgICA4MiwgNjUsIDEyOCwgODAsIDY1LCA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIAotICAgIDY1LCA4NiwgMjAxLCA4MCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIAotICAgIDgwLCA2NSwgNjgsIDc3LCAxOTMsIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgCi0gICAgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIAotICAgIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgCi0gICAgNjUsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCAKLSAgICA0OCwgNDksIDQ5LCAxMjgsIDgwLCA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIAotICAgIDU2LCAxMjgsIDgwLCA0OCwgNDgsIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIAotICAgIDgwLCA0OCwgNDgsIDUyLCAxMjgsIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCAKLSAgICA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIAotICAgIDEyOCwgNzksIDg4LCA3MywgMTkzLCA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIAotICAgIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgCi0gICAgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCAKLSAgICA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIAotICAgIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgCi0gICAgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIAotICAgIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgCi0gICAgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgCi0gICAgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCAKLSAgICA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIAotICAgIDc4LCA2NSwgMjA0LCA3OSwgODIsIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgCi0gICAgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCAKLSAgICA4MiwgNzUsIDcyLCA3OSwgMjA2LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIAotICAgIDc4LCAxMjgsIDc5LCA4MiwgNjksIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgCi0gICAgNjgsIDY5LCAyMTAsIDc5LCA4MiwgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCAKLSAgICA4MCwgODQsIDczLCA3OSwgMjA2LCA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIAotICAgIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgCi0gICAgODAsIDc5LCA4MywgNzMsIDc4LCAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCAKLSAgICA2NywgNzIsIDg1LCA4MywgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIAotICAgIDY1LCA4NCwgNzksIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgCi0gICAgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCAKLSAgICA3MywgNzgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIAotICAgIDc4LCA0NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCAKLSAgICA5MCwgNjksIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIAotICAgIDc3LCA4NSwgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNzksIDc4LCA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCAKLSAgICA4MiwgMTI4LCA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIAotICAgIDc5LCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKLSAgICAxOTcsIDc5LCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIAotICAgIDgzLCA4MywgNzMsIDc5LCAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgCi0gICAgNzksIDIwNiwgNzksIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCAKLSAgICA3OSwgNzgsIDEyOCwgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIAotICAgIDY4LCAxMjgsIDc5LCA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIAotICAgIDc5LCA3NCwgNzMsIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgCi0gICAgNzksIDcyLCA3NywgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCAKLSAgICA3NSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIAotICAgIDY3LCA2OSwgODIsIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgCi0gICAgNzksIDcwLCA3MCwgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgCi0gICAgNzksIDY4LCAxOTYsIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAKLSAgICAxMjgsIDc5LCA2NywgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCAKLSAgICA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCAKLSAgICA3NiwgNzMsIDEyOCwgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIAotICAgIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgCi0gICAgNjUsIDg5LCAxMjgsIDc5LCA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3OSwgMTkzLCA3OSwgNDgsIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIAotICAgIDc5LCA0OCwgNTIsIDU1LCAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgCi0gICAgNTIsIDUyLCAxMjgsIDc5LCA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAKLSAgICAxMjgsIDc5LCA0OCwgNTIsIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDU1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1MywgMTI4LCA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCAKLSAgICA1MSwgNTEsIDEyOCwgNzksIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgCi0gICAgMTI4LCA3OSwgNDgsIDUwLCA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCAKLSAgICA0OCwgNTAsIDUyLCAxMjgsIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIAotICAgIDQ5LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OSwgNTQsIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzksIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIAotICAgIDY3LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgCi0gICAgNDgsIDEyOCwgNzksIDQ4LCA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OCwgNTQsIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIAotICAgIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDc5LCA0OCwgNDgsIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCAKLSAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIAotICAgIDc5LCA0NSwgNzMsIDEyOCwgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgCi0gICAgNzgsIDkwLCA4OSwgMTI4LCA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA4NSwgODIsIDEyOCwgNzgsIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIAotICAgIDg4LCAxMjgsIDc4LCA5MCwgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDc4LCA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA2OSwgODUsIDc3LCAxMjgsIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDkwLCA2NSwgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIAotICAgIDE5MywgNzgsIDg5LCA4NywgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIAotICAgIDg5LCA4NSwgODQsIDEyOCwgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAKLSAgICAxMjgsIDc4LCA4OSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCAKLSAgICA4OSwgNzksIDc5LCAxMjgsIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIAotICAgIDEyOCwgNzgsIDg5LCA3MywgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIAotICAgIDczLCAyMTEsIDc4LCA4OSwgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgCi0gICAgNzksIDEyOCwgNzgsIDg5LCA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAKLSAgICA4NCwgMTI4LCA3OCwgODksIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3OCwgODksIDIwMSwgNzgsIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCAKLSAgICA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIAotICAgIDEyOCwgNzgsIDg5LCAxOTYsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIAotICAgIDczLCAxMjgsIDc4LCA4OSwgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgCi0gICAgNjUsIDY1LCAxMjgsIDc4LCA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDg3LCA3MywgMTI4LCA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgCi0gICAgNzgsIDg3LCAxMjgsIDc4LCA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgCi0gICAgODUsIDEyOCwgNzgsIDg1LCA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgCi0gICAgNzgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDc4LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCAKLSAgICA4NSwgNzgsIDg1LCAyMTgsIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIAotICAgIDg1LCA3OCwgNjUsIDg2LCA3MywgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgCi0gICAgODIsIDIwNywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIAotICAgIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgCi0gICAgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgCi0gICAgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCAKLSAgICA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDUwLCA1MCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgCi0gICAgODUsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIAotICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIAotICAgIDg1LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAKLSAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgMjEzLCAKLSAgICA3OCwgODQsIDc5LCA4MSwgODAsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA2NiwgNjUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc3LCAxMjgsIDc4LCA4NCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgCi0gICAgNjksIDY5LCAxMjgsIDc4LCA4NCwgNjUsIDgwLCAxMjgsIDc4LCA4NCwgNjUsIDIwOCwgNzgsIDg0LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDgzLCA4NSwgNzksIDIxMiwgNzgsIDgzLCA4NSwgNzgsIDEyOCwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzgsIDgzLCAKLSAgICA3OSwgNzcsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4NCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDgwLCAxMjgsIAotICAgIDc4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA4NSwgODQsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDIxMiwgCi0gICAgNzgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNzMsIDY5LCAKLSAgICA2OSwgMTI4LCA3OCwgODMsIDcyLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjUsIDgxLCAxMjgsIDc4LCA4MywgNzIsIAotICAgIDY1LCAxMjgsIDc4LCA4MywgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA4MywgNjksIDc4LCAxMjgsIDc4LCA4MywgCi0gICAgNjUsIDEyOCwgNzgsIDgyLCA4OSwgODgsIDEyOCwgNzgsIDgyLCA4OSwgODQsIDEyOCwgNzgsIDgyLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDc4LCA4MiwgODksIDgyLCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDEyOCwgNzgsIDgyLCAKLSAgICA4NSwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODQsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODUsIAotICAgIDgyLCAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA3OSwgODgsIDEyOCwgNzgsIAotICAgIDgyLCA3OSwgODAsIDEyOCwgNzgsIDgyLCA3OSwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4NCwgCi0gICAgMTI4LCA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgCi0gICAgNjUsIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDc5LCA4OSwgMTI4LCA3OCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA3OSwgODYsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIAotICAgIDEyOCwgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgCi0gICAgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCAKLSAgICA4NCwgNjksIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIAotICAgIDg0LCA2NywgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgCi0gICAgMjEyLCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCAKLSAgICA4MiwgODQsIDcyLCA2OSwgODIsIDIwNiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIAotICAgIDc4LCA3OSwgMjEwLCA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIAotICAgIDc4LCA3OSwgNzgsIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA4MCwgNzksIDg0LCAKLSAgICA2NSwgNjYsIDc2LCAxOTcsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIAotICAgIDQ1LCA2NiwgODIsIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgCi0gICAgNzUsIDcyLCA4NSwgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCAKLSAgICA2NiwgODIsIDY5LCA2NSwgMjAzLCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzksIAotICAgIDc5LCAxMjgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY5LCAxMjgsIDc4LCAKLSAgICA3OCwgNzgsIDY1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDEyOCwgNzgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgCi0gICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCAKLSAgICA3MywgMTI4LCA3OCwgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCAKLSAgICA3OCwgNzgsIDY2LCA4MywgODAsIDEyOCwgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgCi0gICAgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCAKLSAgICA0OCwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA3NiwgMTI4LCA3OCwgNzUsIDc5LCA3NywgMTI4LCA3OCwgNzUsIAotICAgIDIwNywgNzgsIDc1LCA3MywgNzgsIDY4LCA3MywgMTI4LCA3OCwgNzUsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg5LCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCAKLSAgICA4OSwgODIsIDEyOCwgNzgsIDc0LCA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCAKLSAgICA3OCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODEsIDY1LCAxMjgsIAotICAgIDc4LCA3NCwgODUsIDgwLCAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg1LCA2OSwgODEsIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIAotICAgIDEyOCwgNzgsIDc0LCA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIAotICAgIDczLCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgNjksIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgMTI4LCA3OCwgNzQsIDIwMSwgNzgsIDc0LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA4NCwgMTI4LCAKLSAgICA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNjUsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIAotICAgIDc0LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCAxOTcsIDc4LCA3NCwgCi0gICAgNjksIDEyOCwgNzgsIDc0LCA2NSwgODEsIDEyOCwgNzgsIDc0LCA2NSwgODAsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAKLSAgICA3NiwgNzMsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjUsIDY1LCAxMjgsIDc4LCA3MywgODgsIAotICAgIDEyOCwgNzgsIDczLCA4NCwgODIsIDY5LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgCi0gICAgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIAotICAgIDY4LCA2NSwgMTc4LCA3OCwgNzMsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDEyOCwgNzgsIDczLCAKLSAgICA3MiwgODMsIDcyLCA4NiwgNjUsIDgzLCA2NSwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA3NywgNzMsIDc4LCAxMjgsIAotICAgIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDY5LCA4MywgNzIsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc4LCA3MywgCi0gICAgNzEsIDcyLCAyMTIsIDc4LCA3MywgNzEsIDcxLCA2NSwgNzIsIDczLCA4NCwgNjUsIDEyOCwgNzgsIDczLCA2OSwgODgsIAotICAgIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzgsIDczLCA2OSwgCi0gICAgODUsIDc4LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA2NSwgNzgsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIAotICAgIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCAKLSAgICA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgMjA2LCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCAxMjgsIDc4LCAKLSAgICA3MywgNjYsIDEyOCwgNzgsIDczLCA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCAKLSAgICA3MiwgNzQsIDY1LCAxMjgsIDc4LCA3MiwgMTI4LCA3OCwgNzEsIDg5LCA2OSwgMTI4LCA3OCwgNzEsIDg2LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDg1LCA4NSwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIAotICAgIDc4LCA3MSwgODUsIDc5LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCAKLSAgICAxMjgsIDc4LCA3MSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgNzksIDg1LCAxMjgsIDc4LCA3MSwgNzksIDIxMywgNzgsIDcxLCAKLSAgICA3OSwgODQsIDEyOCwgNzgsIDcxLCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgNzksIDY5LCAyMDAsIAotICAgIDc4LCA3MSwgMjA3LCA3OCwgNzEsIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDg3LCA2NSwgNjksIDc4LCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAotICAgIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA2OSwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKLSAgICAxOTcsIDc4LCA3MSwgNzUsIDczLCA3OCwgNjgsIDIwMSwgNzgsIDcxLCA3NSwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgxLCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgNjUsIDc3LCA3MywgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgCi0gICAgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzIsIDY1LCAxMjgsIDc4LCA3MSwgNzEsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCAKLSAgICA3MSwgNzEsIDg1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIAotICAgIDgxLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgMjA5LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgCi0gICAgNzEsIDg1LCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2OSwgNjksIDg0LCAKLSAgICAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIDgzLCA3MiwgNjUsIDE5NywgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgCi0gICAgMjA2LCA3OCwgNzEsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgCi0gICAgNzgsIDcxLCA3MSwgNzMsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCAKLSAgICA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDIxMywgNzgsIAotICAgIDcxLCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA2OSwgCi0gICAgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCAKLSAgICA4MCwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgCi0gICAgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDg1LCA4MiwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCA3NiwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NSwgCi0gICAgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgCi0gICAgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIDc4LCA3MSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDEyOCwgNzgsIDcxLCAKLSAgICA2NSwgNzMsIDEyOCwgNzgsIDcxLCA2NSwgNzIsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgMTkzLCAKLSAgICA3OCwgNzAsIDEyOCwgNzgsIDY5LCA4OCwgMjEyLCA3OCwgNjksIDg4LCAxMjgsIDc4LCA2OSwgODcsIDgzLCA4MCwgNjUsIAotICAgIDgwLCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4NywgMTI4LCA3OCwgCi0gICAgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCAKLSAgICA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgCi0gICAgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgCi0gICAgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCAKLSAgICA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIAotICAgIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3OCwgCi0gICAgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIDY4LCAKLSAgICA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCAKLSAgICA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc4LCA2OCwgNzksIAotICAgIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAKLSAgICAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCA2OCwgNzMsIDY4LCA2NSwgMTI4LCA3OCwgNjgsIDczLCA2NSwgODEsIAotICAgIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4NCwgCi0gICAgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCAKLSAgICA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCA2NSwgNzcsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDc4LCA3MSwgCi0gICAgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjgsIDY1LCAxOTMsIDc4LCAKLSAgICA2NiwgODksIDg4LCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIDc4LCA2NiwgODksIDgyLCA4OCwgMTI4LCA3OCwgNjYsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgNjYsIDg5LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIAotICAgIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgMTI4LCA3OCwgCi0gICAgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgNzksIDg0LCAKLSAgICAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgNzksIDEyOCwgNzgsIDY2LCA3MywgODgsIDEyOCwgNzgsIDY2LCAKLSAgICA3MywgODQsIDEyOCwgNzgsIDY2LCA3MywgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgNzMsIAotICAgIDY5LCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgMTI4LCA3OCwgNjYsIDczLCAxMjgsIDc4LCA2NiwgNzIsIDEyOCwgNzgsIAotICAgIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgNzgsIDY2LCA2NSwgODAsIDEyOCwgNzgsIDY2LCA2NSwgCi0gICAgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCAxMjgsIDc4LCA2NSwgODgsIDczLCAKLSAgICA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIAotICAgIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgCi0gICAgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCAKLSAgICA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgODIsIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgCi0gICAgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCAKLSAgICA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIAotICAgIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIAotICAgIDY1LCA3NSwgMTI4LCA3OCwgNjUsIDczLCA4MiwgMTkzLCA3OCwgNjUsIDczLCAyMDQsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCA2NSwgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgCi0gICAgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjksIDEyOCwgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgCi0gICAgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIAotICAgIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIAotICAgIDQ1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA0OSwgMTI4LCA3OCwgNDgsIDUyLCA0OCwgCi0gICAgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MiwgMTI4LCA3OCwgNDgsIAotICAgIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIDQ4LCA1MSwgCi0gICAgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCA0OCwgNTAsIDUxLCAxMjgsIDc4LCA0OCwgNTAsIAotICAgIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA0OCwgNDksIDU3LCAxMjgsIAotICAgIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDQ4LCAKLSAgICA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDQ4LCA0OSwgNDksIAotICAgIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIAotICAgIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDQ4LCA0OCwgCi0gICAgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgNDksIDEyOCwgCi0gICAgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAyMTcsIDc3LCA4OSwgODgsIDEyOCwgNzcsIDg5LCAKLSAgICA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA3NywgODksIDgwLCAxMjgsIDc3LCA4OSwgNjUsIAotICAgIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAKLSAgICAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCAKLSAgICA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgCi0gICAgODYsIDgzLCAxMjgsIDc3LCA4NiwgNzksIDgwLCAxMjgsIDc3LCA4NiwgNzMsIDEyOCwgNzcsIDg2LCA2OSwgODUsIDY1LCAKLSAgICA2OSwgNzgsIDcxLCA2NSwgNzcsIDEyOCwgNzcsIDg2LCAxMjgsIDc3LCAyMTQsIDc3LCA4NSwgODgsIDEyOCwgNzcsIDg1LCAKLSAgICA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgCi0gICAgMTkzLCA3NywgODUsIDg1LCAxMjgsIDc3LCA4NSwgODQsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgCi0gICAgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA4MiwgNzksIDc5LCA3NywgMTI4LCA3NywgODUsIDgzLCA3MiwgNTEsIAotICAgIDEyOCwgNzcsIDg1LCA4MywgNzIsIDE3OSwgNzcsIDg1LCA4MywgNzIsIDEyOCwgNzcsIDg1LCA4MywgMjAwLCA3NywgODUsIAotICAgIDgyLCA4OCwgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgODIsIDY4LCA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCAKLSAgICA2NSwgNzcsIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCAKLSAgICA3NywgODUsIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIAotICAgIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgCi0gICAgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAKLSAgICA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgCi0gICAgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCAKLSAgICA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgNzMsIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIAotICAgIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgCi0gICAgODUsIDcxLCA4MywgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgMTk5LCA3NywgODUsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgNjcsIDcyLCAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCAKLSAgICA3OCwgMTI4LCA3NywgODUsIDY1LCA2OSwgMTI4LCA3NywgODUsIDQ1LCA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIAotICAgIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIDY1LCAxMjgsIDc3LCA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIAotICAgIDg4LCAxMjgsIDc3LCA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIDY5LCAxOTYsIDc3LCA3OSwgODUsIDg0LCA3MiwgCi0gICAgMTI4LCA3NywgNzksIDg1LCA4NCwgMjAwLCA3NywgNzksIDg1LCA4MywgNjksIDEyOCwgNzcsIDc5LCA4NSwgODMsIDE5NywgCi0gICAgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA4MywgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIAotICAgIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzcsIDc5LCA4NSwgNzgsIDIxMiwgNzcsIDc5LCA4NSwgCi0gICAgNzgsIDY4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA3OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzcsIDc5LCAKLSAgICA4NCwgMTI4LCA3NywgNzksIDgyLCA4NCwgODUsIDg1LCA3NywgMTI4LCA3NywgNzksIDgyLCA4NCwgNjUsIDgyLCAxMjgsIAotICAgIDc3LCA3OSwgODIsIDgwLCA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNzcsIDc5LCA4MiwgNzgsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzcsIDc5LCA4MCwgMTI4LCA3NywgNzksIDc5LCA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIAotICAgIDc3LCA3OSwgNzksIDc4LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIDc5LCA3OSwgNzcsIDgwLCA4NSwgODEsIDEyOCwgCi0gICAgNzcsIDc5LCA3OSwgNzcsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDc5LCA3OSwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzMsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIAotICAgIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgCi0gICAgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA3NywgNzksIDc4LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNzcsIAotICAgIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgCi0gICAgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgNzgsIDc1LCA2OSwgODksIDEyOCwgNzcsIDc5LCAKLSAgICA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCA3OSwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIAotICAgIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIAotICAgIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKLSAgICAxMjgsIDc3LCA3OSwgNjgsIDY5LCAxMjgsIDc3LCA3OSwgNjYsIDczLCA3NiwgMTk3LCA3NywgNzksIDY1LCAxMjgsIDc3LCAKLSAgICAyMDcsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OCwgNjUsIDgzLCAxMjgsIDc3LCA3NywgODMsIDgwLCAxMjgsIDc3LCAKLSAgICA3NywgMTI4LCA3NywgMjA1LCA3NywgNzYsIDY1LCAxMjgsIDc3LCA3NiwgMTI4LCA3NywgNzUsIDgwLCA2NSwgODIsIDY1LCAKLSAgICAyMDksIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIDczLCAKLSAgICA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIAotICAgIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgCi0gICAgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCAKLSAgICA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNzMsIDc4LCA3MywgNjgsIDczLCA4MywgNjcsIAotICAgIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY2LCA4NSwgODMsIDEyOCwgNzcsIDczLCA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgCi0gICAgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCAKLSAgICA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgMTI4LCAKLSAgICA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIAotICAgIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAotICAgIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgCi0gICAgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA3MywgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCAKLSAgICA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgNzcsIDczLCAxOTYsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDY3LCA3OSwgODAsIAotICAgIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCAKLSAgICAyMDcsIDc3LCA3MywgNjcsIDIxMCwgNzcsIDcyLCA5MCwgMTI4LCA3NywgNzIsIDY1LCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCA3NywgNzEsIDg1LCAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIAotICAgIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgNzksIDEyOCwgNzcsIDcxLCAyMDcsIAotICAgIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDczLCA2OSwgMTI4LCA3NywgNzEsIDY5LCA4OCwgMTI4LCA3NywgCi0gICAgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAKLSAgICA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzAsIDg1LCA3NywgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIAotICAgIDY2LCA3MywgMTI4LCA3NywgNzEsIDY2LCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3NywgCi0gICAgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgODEsIAotICAgIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgMTI4LCA3NywgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgCi0gICAgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNzAsIDc5LCA3OCwgCi0gICAgMTI4LCA3NywgNzAsIDc5LCAyMDYsIDc3LCA3MCwgNzksIDEyOCwgNzcsIDcwLCA3MywgODksIDY1LCA4MSwgMTI4LCA3NywgCi0gICAgNzAsIDczLCA2OSwgNjksIDEyOCwgNzcsIDcwLCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4MSwgMTI4LCAKLSAgICA3NywgNzAsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA3MCwgNjUsIDY1LCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgCi0gICAgMTI4LCA3NywgNjksIDg4LCAxMjgsIDc3LCA2OSwgODUsIDIxMiwgNzcsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgCi0gICAgNzgsIDc0LCA3OSwgNzcsIDc4LCA2OCwgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgMTI4LCA3NywgNjksIDg0LCAKLSAgICA4MiwgNzksIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgCi0gICAgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAKLSAgICAxMjgsIDc3LCA2OSwgODQsIDY5LCA3NSwgMTI4LCA3NywgNjksIDg0LCA2OSwgNzEsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIAotICAgIDc2LCAxMjgsIDc3LCA2OSwgODQsIDE5MywgNzcsIDY5LCA4MywgODMsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA2OSwgCi0gICAgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2NSwgNzEsIDE5NywgNzcsIDY5LCA4MywgNzksIAotICAgIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgNzcsIDY5LCA4MiwgNzksIDczLCA4NCwgCi0gICAgNzMsIDE5NSwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCAKLSAgICA4MiwgNzMsIDY4LCA3MywgNjUsIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIAotICAgIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgCi0gICAgNjksIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCAKLSAgICA3NywgNjYsIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIAotICAgIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgCi0gICAgNzcsIDY5LCAyMDUsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCA3NiwgNzMsIDc1LCAxMjgsIDc3LCAKLSAgICA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCA3NywgNjksIDcxLCA2NSwgODAsIAotICAgIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgCi0gICAgODUsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDc3LCAKLSAgICAxMjgsIDc3LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDc3LCAxMjgsIDc3LCA2OSwgNjgsIAotICAgIDczLCA4NSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY3LCA2NSwgCi0gICAgMjA0LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAKLSAgICAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIAotICAgIDY4LCA4NSwgMjA2LCA3NywgMTk2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgNzIsIDY1LCAyMDYsIDc3LCAxOTUsIDc3LCAKLSAgICA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIDg1LCA3OSwgMTI4LCA3NywgNjYsIDg1LCA2OSwgMTI4LCA3NywgNjYsIAotICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA3NywgCi0gICAgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAxMjgsIDc3LCA2NiwgNzMsIDIxMiwgNzcsIDY2LCA3MywgODIsIDczLCAKLSAgICA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NiwgNjksIAotICAgIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDc3LCAxMjgsIDc3LCA2NiwgNjksIDgyLCA2NSwgNjksIDEyOCwgCi0gICAgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDc1LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAKLSAgICAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCA2NSwgODEsIDEyOCwgNzcsIDY2LCA2NSwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA2NSwgNzUsIDY5LCA4NCwgMTI4LCA3NywgNjYsIAotICAgIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAxOTMsIDc3LCA2NiwgMTkzLCA3NywgNjYsIDUyLCAxMjgsIDc3LCA2NiwgNTEsIAotICAgIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDEyOCwgNzcsIDE5NCwgNzcsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA4OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODgsIDEyOCwgNzcsIAotICAgIDY1LCA4NSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCA3NywgNjUsIDg0LCA4MiwgNzMsIDg4LCAKLSAgICAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIDY1LCA4NCwgMTI4LCA3NywgNjUsIAotICAgIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgODMsIDgzLCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3NSwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNzAsIAotICAgIDY1LCA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIDY3LCA4NSwgNzYsIDczLCA3OCwgCi0gICAgMTk3LCA3NywgNjUsIDgyLCA4OSwgMTI4LCA3NywgNjUsIDgyLCA4NSwgNzUsIDg1LCAxMjgsIDc3LCA2NSwgODIsIDg0LCAKLSAgICA4OSwgODIsIDczLCAxOTMsIDc3LCA2NSwgODIsIDgyLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgODIsIDgyLCA3MywgNjUsIAotICAgIDcxLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA2OSwgODIsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MiwgMTI4LCA3NywgCi0gICAgNjUsIDgyLCA3NSwgNDUsIDUxLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTAsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCAKLSAgICA0OSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNzIsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIAotICAgIDY1LCA4NCwgNzksIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCAKLSAgICA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIAotICAgIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCA2NSwgODIsIDEyOCwgNzcsIDY1LCA4MSwgCi0gICAgNjUsIDcwLCAxMjgsIDc3LCA2NSwgODEsIDEyOCwgNzcsIDY1LCA4MCwgNzYsIDE5NywgNzcsIDY1LCA4MCwgNzMsIDgxLCAKLSAgICAxMjgsIDc3LCA2NSwgMjA4LCA3NywgNjUsIDc5LCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCAKLSAgICA2NSwgNzgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAxMjgsIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDc2LCA3MywgCi0gICAgNzgsIDE5OSwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgMTk1LCA3NywgNjUsIDc4LCA2NywgNzIsIDIxMywgNzcsIDY1LCAKLSAgICA3OCwgNjUsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDc3LCA2NSwgNzYsIDg0LCA2OSwgODMsIDE5NywgNzcsIDY1LCA3NiwgNjksIAotICAgIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzcsIDY1LCA3NiwgMTk3LCA3NywgNjUsIDc2LCA2NSwgCi0gICAgNzUsIDc5LCAyMDYsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDY1LCAxMjgsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIAotICAgIDE5MywgNzcsIDY1LCA3MywgOTAsIDY5LCAxMjgsIDc3LCA2NSwgNzMsIDg5LCA2NSwgNzcsIDc5LCA3NSwgMTI4LCA3NywgCi0gICAgNjUsIDczLCA4NCwgNjUsIDczLCA3NSwgNzIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDgyLCA4NSwgMTI4LCA3NywgNjUsIDczLCAKLSAgICA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgNjUsIDczLCA3NywgNjUsIDc2LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MywgNzYsIAotICAgIDY2LCA3OSwgMjE2LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgNjUsIDczLCA2OCwgNjksIDc4LCAKLSAgICAxMjgsIDc3LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCA3NywgNjUsIDcyLCA3MiwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDY1LCA3NSwgCi0gICAgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNzcsIDY1LCA3MiwgMTI4LCAKLSAgICA3NywgNjUsIDcxLCA3OCwgNzMsIDcwLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNjksIDgzLCA3MywgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA3NCwgNjksIDg0LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA4NiwgCi0gICAgNjksIDg1LCA4OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzUsIDgwLCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDcxLCAKLSAgICA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3NywgNjYsIDY1LCAxMjgsIDc3LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NSwgNjksIDc2LCA2OSwgNjksIDEyOCwgCi0gICAgNzcsIDY1LCA2OSwgNzUsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDY1LCA2OCwgODksIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDg1LCAKLSAgICAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCA3NywgNjUsIDY4LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIAotICAgIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCi0gICAgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NSwgNjcsIAotICAgIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDIwNiwgCi0gICAgNzcsIDY1LCA2NywgNzIsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY1LCA2NSwgODksIDg5LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCAKLSAgICA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAxMjgsIDc3LCA0OCwgNTIsIAotICAgIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCA3NywgNDgsIDUxLCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIDUxLCA1MywgMTI4LCA3NywgCi0gICAgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc3LCAKLSAgICA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIAotICAgIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCA3NywgNDgsIDUwLCA1NiwgCi0gICAgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIDQ4LCA1MCwgNTQsIDEyOCwgCi0gICAgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgMTI4LCA3NywgNDgsIAotICAgIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCA3NywgNDgsIDQ5LCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDY1LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MywgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzIsIDEyOCwgNzcsIAotICAgIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjksIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjYsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCA0OCwgNDksIDQ5LCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIDQ4LCA1NywgMTI4LCA3NywgCi0gICAgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgMTI4LCA3NywgNDgsIDQ4LCAKLSAgICA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIAotICAgIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NSwgCi0gICAgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCA4OSwgODgsIDEyOCwgNzYsIAotICAgIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCA4OSwgODAsIDEyOCwgNzYsIAotICAgIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIDEyOCwgNzYsIDg3LCA3OSwgCi0gICAgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIDczLCAxMjgsIDc2LCA4NywgCi0gICAgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIDg4LCAxMjgsIDc2LCA4NSwgCi0gICAgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3NiwgODUsIDgwLCAxMjgsIDc2LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDc2LCA4NSwgNzksIDEyOCwgCi0gICAgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgNzYsIDg1LCAyMDUsIDc2LCAKLSAgICA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgODUsIDgyLCAxMjgsIDc2LCA4NSwgNzIsIAotICAgIDEyOCwgNzYsIDg1LCA3MSwgNzEsIDY1LCA3MSwgNjksIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDc2LCAxMjgsIDc2LCA4NSwgCi0gICAgNzEsIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA4NSwgNTEsIDEyOCwgCi0gICAgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgNzYsIDgyLCA3OSwgMTI4LCA3NiwgODIsIDc3LCAxMjgsIDc2LCA4MiwgCi0gICAgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCAKLSAgICA3NiwgNzksIDg4LCAxMjgsIDc2LCA3OSwgODcsIDY5LCA4MiwgNjksIDE5NiwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzYsIAotICAgIDc5LCA4NywgNDUsIDE4NSwgNzYsIDc5LCA4NiwgMTk3LCA3NiwgNzksIDg1LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA4NSwgCi0gICAgNjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDc2LCA3OSwgODUsIDY4LCA3NiwgMjE3LCA3NiwgNzksIDg0LCAKLSAgICA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NCwgMTI4LCA3NiwgNzksIDgyLCA4MiwgODksIDEyOCwgNzYsIDc5LCA4MiwgODIsIAotICAgIDY1LCA3MywgNzgsIDY5LCAxMjgsIDc2LCA3OSwgODEsIDEyOCwgNzYsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCA4NCwgCi0gICAgMTI4LCA3NiwgNzksIDc5LCA4MCwgNjksIDE5NiwgNzYsIDc5LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgMjA4LCA3NiwgCi0gICAgNzksIDc5LCA3OCwgMTI4LCA3NiwgNzksIDc5LCAyMDMsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgODMsIDg1LCAKLSAgICA3NywgMTI4LCA3NiwgNzksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDE5MywgNzYsIDc5LCA3OCwgNzEsIAotICAgIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODksIDgyLCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKLSAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCA3OSwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgCi0gICAgNzIsIDQ1LCA3OSwgODMsIDIxMSwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzcsIAotICAgIDY1LCA2OCwgMjEwLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCAKLSAgICA2NSwgNzYsIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzYsIAotICAgIDc5LCA3NywgNzcsIDY1LCA2OSwgMTI4LCA3NiwgNzksIDc3LCAxMjgsIDc2LCA3OSwgMjA1LCA3NiwgNzksIDc2LCA3NiwgCi0gICAgNzMsIDgwLCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3NiwgNzYsIDEyOCwgNzYsIDc5LCA3MSwgMjEwLCA3NiwgNzksIDcxLCAKLSAgICA3OSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNzksIDcxLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NiwgNzksIDcxLCAxMjgsIAotICAgIDc2LCA3OSwgNjgsIDY5LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzksIDc3LCA3OSwgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzUsIDczLCA3OCwgNzEsIDQ1LCA4MywgNzIsIDczLCA3MCwgMjEyLCA3NiwgNzksIAotICAgIDY3LCAyMDMsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OCwgMTI4LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc5LCA3OSwgCi0gICAgMTI4LCA3NiwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3NiwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNzksIDc5LCAKLSAgICAxMjgsIDc2LCA3NiwgNzYsIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDczLCA3MywgMTI4LCA3NiwgNzYsIDc2LCA3MywgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCA2OSwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDg1LCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDY1LCA3MywgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgMTI4LCA3NiwgNzQsIDg1LCA2OCwgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCAKLSAgICA3NCwgMTI4LCA3NiwgNzMsIDg4LCAxMjgsIDc2LCA3MywgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCAKLSAgICA3MywgODQsIDg0LCA3NiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNjksIDIxMCwgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIAotICAgIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIAotICAgIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCA4MCwgODMsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgCi0gICAgNzgsIDE5OSwgNzYsIDczLCA3OCwgMjAzLCA3NiwgNzMsIDc4LCA3MSwgODMsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKLSAgICA4MywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgMjExLCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAxMjgsIDc2LCA3MywgNzgsIAotICAgIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIAotICAgIDc3LCA3NywgODUsIDEyOCwgNzYsIDczLCA3NywgNzcsIDIxMywgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMTk2LCA3NiwgCi0gICAgNzMsIDc3LCA3MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCAKLSAgICA3NywgNjksIDEyOCwgNzYsIDczLCA3NywgNjYsIDIxMywgNzYsIDczLCA3NiwgODksIDEyOCwgNzYsIDczLCA3NiwgNzMsIAotICAgIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzYsIDczLCA3MSwgNzIsIDg0LCA3MiwgNzksIDg1LCA4MywgNjksIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCAKLSAgICA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAxMjgsIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCA3MywgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIAotICAgIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NiwgNjksIDgyLCA4NCwgODksIDEyOCwgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgCi0gICAgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAotICAgIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCA5MCwgNzIsIAotICAgIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIDg2LCA2OSwgMjA0LCA3NiwgNjksIDg1LCA3NywgMTI4LCA3NiwgNjksIAotICAgIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgMTI4LCA3NiwgCi0gICAgNjksIDIxMywgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgODMsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgMTI4LCAKLSAgICA3NiwgNjksIDIxMiwgNzYsIDY5LCA4MywgODMsIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgNzgsIAotICAgIDEyOCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgCi0gICAgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCA3OSwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCA4MiwgCi0gICAgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDIwMCwgNzYsIDY5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAKLSAgICAxOTMsIDc2LCA2OSwgNzcsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIDY5LCA3NiwgNjksIAotICAgIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIAotICAgIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIAotICAgIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIDIxMiwgCi0gICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCAKLSAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCA3OSwgCi0gICAgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDc2LCAKLSAgICA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgCi0gICAgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCA3NiwgNjksIDY5LCA4MiwgNjUsIDY5LCA4NywgNjUsIDEyOCwgNzYsIDY5LCAKLSAgICA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc2LCA2OSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNzYsIAotICAgIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgMTk4LCA3NiwgCi0gICAgNjksIDY1LCA2OCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgMTk2LCAKLSAgICA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjgsIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIDY1LCAKLSAgICA5MCwgMjE3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgODcsIAotICAgIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIDc2LCA2NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIAotICAgIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4NCwgNzMsIDc1LCAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgCi0gICAgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCAKLSAgICA2NSwgMjA0LCA3NiwgNjUsIDgyLCA3MSwgNjksIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAxMjgsIDc2LCA2NSwgODIsIAotICAgIDcxLCAxOTcsIDc2LCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDEyOCwgNzYsIAotICAgIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgNzYsIDY1LCA3OCwgNzEsIDg1LCA2NSwgNzEsIDE5NywgNzYsIDY1LCA3OCwgCi0gICAgNjksIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCAKLSAgICA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2NSwgNzcsIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIAotICAgIDY1LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgCi0gICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgNzYsIDY1LCAyMDQsIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCAKLSAgICA3MSwgODksIDY1LCA3OSwgMTI4LCA3NiwgNjUsIDc0LCA2NSwgNzgsIDg5LCA2NSwgNzYsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIAotICAgIDIwMSwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgMTI4LCA3NiwgNjUsIDcyLCAxMjgsIDc2LCA2NSwgNzEsIDg1LCA4MywgCi0gICAgMTI4LCA3NiwgNjUsIDcxLCAyMTMsIDc2LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMjEwLCA3NiwgCi0gICAgNjUsIDcxLCA2NSwgNjYsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDE5NCwgNzYsIDY1LCA2OSwgODYsIDEyOCwgNzYsIDY1LCAKLSAgICA2OSwgMTI4LCA3NiwgNjUsIDY4LCAyMTcsIDc2LCA2NSwgNjcsIDc1LCAxMjgsIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCAKLSAgICA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNjYsIAotICAgIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDc2LCA2NSwgCi0gICAgNjYsIDY1LCA4NCwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCAxMjgsIDc2LCAKLSAgICA2NSwgNjUsIDc3LCA4NSwgMTI4LCA3NiwgNjUsIDY1LCA3NywgMTI4LCA3NiwgNjUsIDY1LCA3MywgMTI4LCA3NiwgNDgsIAotICAgIDQ4LCA1NCwgNjUsIDEyOCwgNzYsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgCi0gICAgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3NSwgODksIDg1LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIAotICAgIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIDc2LCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIAotICAgIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCA2NSwgODQsIDcyLCA3OSwgMjExLCA3NSwgODksIDY1LCA2NSwgMTI4LCA3NSwgCi0gICAgODksIDY1LCAxMjgsIDc1LCA4OCwgODcsIDczLCAxMjgsIDc1LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDg3LCAKLSAgICA2OSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNjUsIDEyOCwgNzUsIDg4LCA4NSwgMTI4LCAKLSAgICA3NSwgODgsIDc5LCAxMjgsIDc1LCA4OCwgNzMsIDEyOCwgNzUsIDg4LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA2OSwgMTI4LCAKLSAgICA3NSwgODgsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDY1LCAxMjgsIDc1LCA4NywgODUsIDUxLCA0OSwgNTYsIDEyOCwgNzUsIAotICAgIDg3LCA3OSwgNzksIDEyOCwgNzUsIDg3LCA3OSwgMTI4LCA3NSwgODcsIDczLCA3MywgMTI4LCA3NSwgODcsIDczLCAxMjgsIAotICAgIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4NywgNjksIDEyOCwgNzUsIDg3LCA2NSwgODksIDEyOCwgNzUsIDg3LCA2NSwgCi0gICAgNjksIDg0LCAxMjgsIDc1LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgCi0gICAgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIDEyOCwgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgCi0gICAgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCAKLSAgICA3MywgODIsIDc5LCAxMjgsIDc1LCA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDc1LCA4NSwgODIsIDEyOCwgNzUsIDg1LCAyMTAsIDc1LCA4NSwgODEsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgMjA4LCA3NSwgODUsIDc5LCA3NywgMTI4LCA3NSwgODUsIDc5LCAxMjgsIAotICAgIDc1LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA4NSwgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc1LCA4NSwgCi0gICAgNzYsIDEyOCwgNzUsIDg1LCAyMDQsIDc1LCA4NSwgNjksIDg0LCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA1MiwgCi0gICAgMTI4LCA3NSwgODUsIDE4MCwgNzUsIDg1LCA1MSwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg0LCAxMjgsIDc1LCA4MywgODMsIAotICAgIDg1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA4NSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgNzksIDEyOCwgNzUsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgNzUsIDgzLCA4MywgNzMsIDczLCAxMjgsIDc1LCA4MywgODMsIDczLCAxMjgsIDc1LCA4MywgODMsIDY5LCAKLSAgICA2OSwgMTI4LCA3NSwgODMsIDgzLCA2OSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIAotICAgIDczLCAxMjgsIDc1LCA4MywgODMsIDY1LCA2NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODMsIDgzLCAxMjgsIAotICAgIDc1LCA4MywgNzMsIDEyOCwgNzUsIDgyLCA2OSwgNzcsIDY1LCA4MywgODQsIDczLCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgCi0gICAgNzcsIDc5LCA4OSwgODAsIDc5LCA4MiwgODIsIDc5LCA3OSwgNzgsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIAotICAgIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAKLSAgICAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDE5MywgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODAsIDc5LCA4MSwgMTI4LCAKLSAgICA3NSwgODAsIDc5LCA3OSwgMTI4LCA3NSwgODAsIDc5LCAxMjgsIDc1LCA4MCwgNzMsIDEyOCwgNzUsIDgwLCA2OSwgODUsIAotICAgIDg4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgODIsIDY1LCA4MSwgCi0gICAgMTI4LCA3NSwgODAsIDY1LCA3OCwgMTI4LCA3NSwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIDc5LCA4NiwgCi0gICAgODUsIDg1LCAxMjgsIDc1LCA3OSwgODQsIDc5LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDc5LCAKLSAgICA4MiwgNzksIDc4LCA3MywgODMsIDEyOCwgNzUsIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc1LCA3OSwgODIsIDY1LCA3OCwgNzMsIAotICAgIDE5NSwgNzUsIDc5LCA4MSwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA3OSwgCi0gICAgODAsIDEyOCwgNzUsIDc5LCA3OSwgODAsIDc5LCAxMjgsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIDg0LCAxMjgsIDc1LCAKLSAgICA3OSwgNzksIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIAotICAgIDc3LCAxOTMsIDc1LCA3OSwgNzcsIDIwMSwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgNjUsIDEyOCwgNzUsIDc5LCA3NywgCi0gICAgNjYsIDg1LCA4NiwgMTkzLCA3NSwgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDc1LCA3OSwgMTI4LCA3NSwgNzksIDc1LCAKLSAgICAxMjgsIDc1LCA3OSwgMjAzLCA3NSwgNzksIDczLCAxMjgsIDc1LCA3OSwgMjAxLCA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgCi0gICAgNzEsIDcyLCA3OSwgNzcsIDEyOCwgNzUsIDc5LCA2OSwgODQsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCAKLSAgICA3OSwgNjUsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzUsIAotICAgIDc4LCA3MywgNzAsIDY5LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIAotICAgIDczLCA4NCwgNzksIDc4LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAKLSAgICAxOTMsIDc1LCA3NiwgNjUsIDEyOCwgNzUsIDc2LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNzUsIDczLCAxMjgsIDc1LCA3NSwgNjksIDY5LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgCi0gICAgNzUsIDEyOCwgNzUsIDc0LCA2OSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgCi0gICAgNzksIDc1LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCAKLSAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIAotICAgIDc1LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCi0gICAgNzUsIDczLCA4OSwgNjksIDc5LCAyMDMsIDc1LCA3MywgODgsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCAKLSAgICA4MywgNzMsIDc4LCAxOTksIDc1LCA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIAotICAgIDc3LCA1MywgMTI4LCA3NSwgNzMsIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgCi0gICAgNjUsIDc2LCAxMjgsIDc1LCA3MywgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCAKLSAgICA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIAotICAgIDc1LCA3MywgODIsIDc5LCAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MSwgMTI4LCA3NSwgCi0gICAgNzMsIDgwLCAxMjgsIDc1LCA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDc4LCAKLSAgICA2OCwgNjksIDgyLCA3MSwgNjUsIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzcsIDc5LCA3OCwgNzksIDEyOCwgNzUsIAotICAgIDczLCA3MywgMTI4LCA3NSwgNzMsIDcyLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIAotICAgIDc1LCA3MywgNjksIDY5LCA3NywgMTI4LCA3NSwgNzMsIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIAotICAgIDc1LCA3MywgNjcsIDc1LCAxMjgsIDc1LCA3MiwgOTAsIDEyOCwgNzUsIDcyLCA4NywgNjUsIDczLCAxMjgsIDc1LCA3MiwgCi0gICAgODUsIDY5LCA3OCwgNDUsIDc2LCA4NSwgMTk3LCA3NSwgNzIsIDg1LCA2OSwgMjA2LCA3NSwgNzIsIDg1LCA2OCwgNjUsIDc3LCAKLSAgICAxMjgsIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCAKLSAgICA3MiwgNzksIDc4LCAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIAotICAgIDIwNywgNzUsIDcyLCA3NywgMjEzLCA3NSwgNzIsIDczLCA4NCwgMTI4LCA3NSwgNzIsIDczLCA3OCwgODksIDY1LCAxMjgsIAotICAgIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDIwMCwgNzUsIDcyLCA3MywgMTI4LCA3NSwgNzIsIDcyLCA3OSwgMTI4LCA3NSwgCi0gICAgNzIsIDcyLCA2NSwgMTI4LCA3NSwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNzUsIDcyLCAKLSAgICA2OSwgNjksIDEyOCwgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzIsIDY1LCA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIAotICAgIDc1LCA3MiwgNjUsIDgyLCAxMjgsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDE5MywgNzUsIDcyLCA2NSwgNzgsIDEyOCwgNzUsIDcyLCA2NSwgNzcsIDg0LCAyMDEsIDc1LCAKLSAgICA3MiwgNjUsIDc1LCA2NSwgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA2NSwgNzIsIAotICAgIDEyOCwgNzUsIDcyLCA2NSwgMjAwLCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzEsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIAotICAgIDY1LCA4MCwgMTI4LCA3NSwgNjksIDg5LCA2NywgNjUsIDIwOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAKLSAgICAxMjgsIDc1LCA2OSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODksIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODMsIAotICAgIDcyLCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgODAsIDg1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA3OSwgMjEyLCA3NSwgNjksIDg1LCA3NywgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA3NSwgNjksIDg1LCA4NCwgNzgsIDY4LCA2NSwgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDY1LCA2OSwgODQsIDc3LCA2OSwgODUsIDc4LCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODIsIDczLCAxMjgsIDc1LCA2OSwgCi0gICAgODQsIDg0LCAyMDEsIDc1LCA2OSwgODMsIDcyLCA1MCwgMTI4LCA3NSwgNjksIDgyLCA2OSwgODQsIDEyOCwgNzUsIDY5LCAKLSAgICA3OSwgODcsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIAotICAgIDc3LCA2NSwgODQsIDE5MywgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA3NSwgNjksIDc4LCA2NSwgODQsIDEyOCwgCi0gICAgNzUsIDY5LCA3OCwgMTI4LCA3NSwgNjksIDIwNiwgNzUsIDY5LCA3NywgODAsIDg1LCA3NiwgMTI4LCA3NSwgNjksIDc3LCAKLSAgICA4MCwgODUsIDIwNCwgNzUsIDY5LCA3NywgODAsIDc2LCA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIAotICAgIDY5LCA3NywgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgCi0gICAgNjksIDc2LCA4NiwgNzMsIDIwNiwgNzUsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDc1LCAKLSAgICA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MCwgODUsIDc2LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIAotICAgIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA3NSwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY3LCA2NSwgNzYsIDEyOCwgCi0gICAgNzUsIDY2LCAxMjgsIDc1LCA2NSwgOTAsIDY1LCA3NSwgMjAwLCA3NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKLSAgICA3NSwgNjUsIDg5LCA2NSwgMjAwLCA3NSwgNjUsIDg4LCAxMjgsIDc1LCA2NSwgODcsIDczLCAxMjgsIDc1LCA2NSwgODYsIAotICAgIDg5LCA3NSwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgNzUsIDY1LCA4NSwgCi0gICAgMTI4LCA3NSwgNjUsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICA4NCwgNzIsIDY1LCA3NSwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2NSwgODQsIAotICAgIDY1LCA4NiwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCAKLSAgICA3OCwgMTkzLCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIAotICAgIDIwNiwgNzUsIDY1LCA4MywgODIsIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA2NSwgODMsIDc1LCA2NSwgCi0gICAgNzYsIDEyOCwgNzUsIDY1LCA4MywgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODMsIDcyLCA3NywgNzMsIDgyLCAyMDEsIDc1LCAKLSAgICA2NSwgODIsIDgzLCA3MiwgNjUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDgyLCAyMDcsIDc1LCA2NSwgODIsIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgCi0gICAgODIsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDgwLCAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIAotICAgIDc1LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNjUsIDc3LCA1MiwgMTI4LCA3NSwgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAKLSAgICAxMjgsIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCAKLSAgICA2NSwgNzMsIDg0LCA3MiwgMjAxLCA3NSwgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDIwMSwgNzUsIDY1LCA3MCwgNjUsIDEyOCwgNzUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDE5OCwgNzUsIDY1LCA2OCwgNTMsIAotICAgIDEyOCwgNzUsIDY1LCA2OCwgMTgxLCA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIAotICAgIDY4LCAxNzksIDc1LCA2NSwgNjgsIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIAotICAgIDY2LCAxMjgsIDc1LCA2NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgCi0gICAgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIDc1LCA2NSwgMTc4LCA3NSwgNDgsIDQ4LCA1NiwgMTI4LCA3NSwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3NSwgNDgsIDQ4LCA1NCwgMTI4LCA3NSwgNDgsIDQ4LCA1MywgMTI4LCA3NSwgNDgsIDQ4LCA1MiwgMTI4LCA3NSwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3NSwgNDgsIDQ4LCA1MCwgMTI4LCA3NSwgNDgsIDQ4LCA0OSwgMTI4LCA3NCwgODcsIDY1LCAKLSAgICAxMjgsIDc0LCA4NSwgODUsIDEyOCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgODUsIDgzLCA4NCwgNzMsIDcwLCA3MywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NCwgODUsIDgwLCA3MywgODQsIDY5LCA4MiwgMTI4LCA3NCwgODUsIDc5LCA4NCwgCi0gICAgMTI4LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgODUsIDc4LCA3OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgMTI4LCA3NCwgCi0gICAgODUsIDc2LCA4OSwgMTI4LCA3NCwgODUsIDY5LCA4NSwgNzMsIDEyOCwgNzQsIDg1LCA2OCwgODUsIDc2LCAxMjgsIDc0LCAKLSAgICA4NSwgNjgsIDcxLCA2OSwgMTI4LCA3NCwgODUsIDY4LCA2OSwgNzksIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIAotICAgIDc0LCA3OSwgODksIDc5LCA4NSwgMjExLCA3NCwgNzksIDg5LCAxMjgsIDc0LCA3OSwgODYsIDY5LCAxMjgsIDc0LCA3OSwgCi0gICAgMjEyLCA3NCwgNzksIDc4LCA3MSwgMTI4LCA3NCwgNzksIDc4LCAxOTMsIDc0LCA3OSwgNzUsIDY5LCA4MiwgMTI4LCA3NCwgCi0gICAgNzksIDczLCA3OCwgNjksIDY4LCAxMjgsIDc0LCA3OSwgNzMsIDc4LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc0LCAKLSAgICA4OSwgODgsIDEyOCwgNzQsIDc0LCA4OSwgODQsIDEyOCwgNzQsIDc0LCA4OSwgODAsIDEyOCwgNzQsIDc0LCA4OSwgMTI4LCAKLSAgICA3NCwgNzQsIDg1LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIAotICAgIDc0LCA4NSwgODIsIDEyOCwgNzQsIDc0LCA4NSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc0LCA3NCwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgNzksIDg4LCAKLSAgICAxMjgsIDc0LCA3NCwgNzksIDg0LCAxMjgsIDc0LCA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCAKLSAgICA3MywgODgsIDEyOCwgNzQsIDc0LCA3MywgODQsIDEyOCwgNzQsIDc0LCA3MywgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzQsIDc0LCA3MywgCi0gICAgNjksIDEyOCwgNzQsIDc0LCA3MywgMTI4LCA3NCwgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3NCwgCi0gICAgNjUsIDEyOCwgNzQsIDczLCA3NiwgMTI4LCA3NCwgNzMsIDczLCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCAKLSAgICA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NCwgNzMsIDY1LCAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIAotICAgIDEyOCwgNzQsIDcyLCA2NSwgNzgsIDEyOCwgNzQsIDcyLCA2NSwgNzcsIDEyOCwgNzQsIDcyLCA2NSwgNjUsIDEyOCwgNzQsIAotICAgIDcyLCA2NSwgMTI4LCA3NCwgNjksIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIDc2LCA2OSwgNzcsIDEyOCwgCi0gICAgNzQsIDY5LCA4MiwgNjUsIDIwNiwgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNjksIDcyLCAKLSAgICAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCAKLSAgICA3NCwgNjksIDY1LCA3OCwgODMsIDEyOCwgNzQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIAotICAgIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc0LCA2NSwgODUsIDEyOCwgNzQsIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgCi0gICAgNzgsIDY5LCA4MywgMTk3LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDEyOCwgNzQsIDY1LCA3OCwgODUsIDY1LCA4MiwgODksIAotICAgIDEyOCwgNzQsIDY1LCA3NiwgNzYsIDY1LCA3NCwgNjUsIDc2LCA2NSwgNzYsIDc5LCA4NSwgNzIsIDc5LCA4NSwgMTI4LCA3NCwgCi0gICAgNjUsIDczLCAxMjgsIDc0LCA2NSwgNzIsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCAKLSAgICA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIAotICAgIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDIwMiwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgCi0gICAgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgMTkzLCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3MywgOTAsIDY1LCA3NSwgNjUsIDg5LCAKLSAgICAxOTMsIDczLCA4OSwgNjksIDc1LCAxMjgsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIAotICAgIDEyOCwgNzMsIDg1LCAxMjgsIDczLCA4NCwgMjExLCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIAotICAgIDg0LCA2OSwgNzcsIDEyOCwgNzMsIDgzLCA4MywgNzIsIDY1LCA4MiwgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgCi0gICAgODMsIDc5LCAyMDYsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCA2NSwgNzUsIDczLCAKLSAgICAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgNDUsIDY3LCA3OSwgCi0gICAgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCA2OSwgMTk2LCAKLSAgICA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIDE5MywgNzMsIAotICAgIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgODMsIDczLCA2NiwgCi0gICAgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCAKLSAgICAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIDE5NywgNzMsIDc4LCA4NCwgODIsIDc5LCA2OCwgODUsIDY3LCA2OSwgODIsIAotICAgIDEyOCwgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3MywgCi0gICAgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzksIDY3LCA3NSwgCi0gICAgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCAKLSAgICA3NiwgNjUsIDY3LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAotICAgIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgCi0gICAgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCA2OSwgNzgsIDg0LCAKLSAgICA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIDY3LCA2OSwgNzgsIDY3LCA2OSwgCi0gICAgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDIxMCwgCi0gICAgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgNzMsIDEyOCwgNzMsIDc4LCAKLSAgICA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDcxLCA4NywgNjUsIAotICAgIDkwLCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNzAsIDc2LCA4NSwgCi0gICAgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDg5LCAxMjgsIDczLCA3OCwgNzAsIDczLCAKLSAgICA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc4LCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDIxMiwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3MywgNzgsIDY4LCA3MywgCi0gICAgNjcsIDY1LCA4NCwgNzksIDIxMCwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNzMsIDc4LCA2OCwgNzMsIDY1LCAyMDYsIDczLCAKLSAgICA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3MywgNzgsIDY4LCA2OSwgODAsIDY5LCA3OCwgNjgsIDY5LCA3OCwgMjEyLCA3MywgNzgsIAotICAgIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMjExLCA3MywgCi0gICAgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDEyOCwgNzMsIDc4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgMTk3LCAKLSAgICA3MywgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIDE5OSwgNzMsIAotICAgIDc4LCA2NywgNzIsIDEyOCwgNzMsIDc4LCA2NiwgNzksIDIxNiwgNzMsIDc4LCA2NSwgODAsIDEyOCwgNzMsIDc4LCA0NSwgCi0gICAgNjUsIDc2LCA2NSwgNzAsIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc3LCA4MCwgNjksIDgyLCAKLSAgICA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgNzMsIAotICAgIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA3MywgNzcsIDc4LCAxMjgsIDczLCA3NywgNzMsIDgzLCA2OSwgCi0gICAgNzksIDIxMSwgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIDczLCA3NywgNzMsIDc4LCAxMjgsIDczLCA3NywgNzMsIDIwNiwgCi0gICAgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIAotICAgIDgyLCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNjgsIDczLCA2NSwgCi0gICAgODIsIDcxLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA2NSwgNzEsIDE5NywgNzMsIDc2LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3NiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIAotICAgIDc2LCA4NSwgODQsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgCi0gICAgNTEsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDIxMywgNzMsIDc2LCAKLSAgICA1MCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDE5MywgNzMsIDc0LCAxMjgsIDczLCAKLSAgICA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3MSwgNzMsIDEyOCwgNzMsIDcxLCAyMDEsIDczLCA3MSwgNzEsIAotICAgIDg3LCA4MywgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDczLCAKLSAgICA2OSwgODUsIDY3LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAotICAgIDczLCA2OSwgODUsIDc4LCAxOTksIDczLCA2OCwgNzYsIDY5LCAxMjgsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDczLCA2OCwgCi0gICAgNzMsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NywgNDgsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY4LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2NywgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY4LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NSwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDU0LCA2OCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ5LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA0OCwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNzAsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDY5LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNTAsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1NCwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTMsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1NywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTAsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCA1MiwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA3MCwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjgsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU3LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTMsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUxLCA2NywgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNjgsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MCwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNDksIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCA4NSwgMTI4LCA3MywgCi0gICAgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCAKLSAgICA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCA0NSwgODksIDgyLCAxMjgsIAotICAgIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA1MywgCi0gICAgMTI4LCA3MywgNDgsIDQ5LCA1MiwgMTI4LCA3MywgNDgsIDQ5LCA1MSwgMTI4LCA3MywgNDgsIDQ5LCA1MCwgMTI4LCA3MywgCi0gICAgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDczLCAKLSAgICA0OCwgNDksIDQ4LCAxMjgsIDczLCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1NywgMTI4LCA3MywgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA3MywgNDgsIDQ4LCA1NSwgMTI4LCA3MywgNDgsIDQ4LCA1NCwgMTI4LCA3MywgNDgsIDQ4LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDEyOCwgNzMsIDQ4LCA0OCwgNTIsIDEyOCwgNzMsIDQ4LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDQ4LCA0OCwgNTAsIDEyOCwgNzMsIDQ4LCA0OCwgNDksIDEyOCwgNzMsIDQ1LCA4OSwgODUsIDEyOCwgNzMsIDQ1LCAKLSAgICA4OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCAxMjgsIDczLCA0NSwgODksIAotICAgIDY1LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDczLCA0NSwgODksIDY1LCAxMjgsIDczLCA0NSwgCi0gICAgNzksIDQ1LCA3MywgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgNjksIDg1LCAxMjgsIDczLCA0NSwgNjYsIDY5LCAKLSAgICA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgNzMsIDQ1LCA2NSwgMTI4LCA3MiwgOTAsIAotICAgIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA5MCwgODAsIDEyOCwgNzIsIDkwLCA5MCwgCi0gICAgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgODQsIDEyOCwgNzIsIDkwLCA3MSwgCi0gICAgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDcyLCA4OSwgODAsIDc5LCA2OCwgNzMsIDY1LCAKLSAgICA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzIsIAotICAgIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCAKLSAgICAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIDg3LCA3MSwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgCi0gICAgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDc5LCA4MCwgMTI4LCA3MiwgCi0gICAgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDg4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgNzIsIDg4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgODgsIDY1LCA4OCwgMTI4LCA3MiwgODgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAxMjgsIDcyLCA4NywgODUsIDEyOCwgNzIsIDg3LCA2NSwgCi0gICAgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzIsIDg1LCA4MiwgNjUsIDc4LCAKLSAgICAxMjgsIDcyLCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIDcyLCA4NSwgNzgsIAotICAgIDY4LCA4MiwgNjksIDE5NiwgNzIsIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgCi0gICAgNjUsIDIwNiwgNzIsIDg1LCA3NiwgNTAsIDEyOCwgNzIsIDg1LCA3MywgNzMsIDg0LCA3OSwgMTI4LCA3MiwgODUsIDY2LCAKLSAgICA1MCwgMTI4LCA3MiwgODUsIDY2LCAxNzgsIDcyLCA4NSwgNjYsIDEyOCwgNzIsIDg1LCA2NSwgODIsIDY1LCA2OCwgNjgsIAotICAgIDc5LCAxMjgsIDcyLCA4NCwgODMsIDEyOCwgNzIsIDg0LCA3NCwgMTI4LCA3MiwgODIsIDg5LCA4NiwgNzgsIDczLCAxOTMsIAotICAgIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4MCwgNjUsIDEyOCwgNzIsIDgwLCAxMjgsIDcyLCA3OSwgODUsIDgzLCAxOTcsIAotICAgIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCAKLSAgICAyMTEsIDcyLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA3OSwgODUsIDIxMCwgNzIsIDc5LCA4NCwgNjksIDc2LCAxMjgsIDcyLCAKLSAgICA3OSwgODQsIDY1LCAxMjgsIDcyLCA3OSwgODMsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA4MywgNjksIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgODMsIDE5NywgNzIsIDc5LCA4MiwgNzgsIDgzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA3NiwgMjE3LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1NCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgCi0gICAgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIAotICAgIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OSwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgCi0gICAgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIAotICAgIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKLSAgICA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MiwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgCi0gICAgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIAotICAgIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCAKLSAgICA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OCwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1NCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA3MywgMTI4LCA3MiwgNzksIDgyLCAxOTMsIDcyLCA3OSwgNzksIAotICAgIDgyLCA4NSwgMTI4LCA3MiwgNzksIDc5LCA4MCwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCA3MiwgNzksIDc5LCA3NSwgCi0gICAgNjksIDE5NiwgNzIsIDc5LCA3OCwgNjksIDg5LCA2NiwgNjksIDY5LCAxMjgsIDcyLCA3OSwgNzgsIDY5LCAyMTcsIDcyLCAKLSAgICA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgCi0gICAgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzksIDc2LCAKLSAgICA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgNzIsIDc5LCA3MywgMTI4LCAKLSAgICA3MiwgNzksIDY3LCA3MiwgNzksIDEyOCwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIDg0LCAxMjgsIDcyLCA3OCwgCi0gICAgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDc4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCA3MiwgNzgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIDg4LCAxMjgsIDcyLCA3NywgCi0gICAgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCA3MiwgNzcsIDg5LCAKLSAgICAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIDgyLCA4OCwgMTI4LCAKLSAgICA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzIsIAotICAgIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDEyOCwgNzIsIDc3LCA3OSwgCi0gICAgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA3OSwgMTI4LCA3MiwgCi0gICAgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAxMjgsIDcyLCA3NywgNzMsIAotICAgIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgNzcsIDY1LCA4NCwgMTI4LCA3MiwgNzcsIAotICAgIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgODksIDg4LCAxMjgsIDcyLCA3NiwgODksIDg0LCAxMjgsIAotICAgIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIDg5LCA4MCwgMTI4LCA3MiwgCi0gICAgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCA3NiwgODUsIDEyOCwgNzIsIAotICAgIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA3OSwgMTI4LCA3MiwgNzYsIDczLCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODgsIDEyOCwgCi0gICAgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCA3NiwgNzMsIDEyOCwgNzIsIDc2LCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIDc2LCA2OSwgMTI4LCA3MiwgNzYsIDY1LCA4OCwgMTI4LCAKLSAgICA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCAxMjgsIDcyLCA3NSwgMTI4LCAKLSAgICA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgNzksIDgyLCA3MywgMTk1LCA3MiwgNzMsIDgyLCA3MywgODEsIAotICAgIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MywgODAsIDY5LCA2OSwgMTk2LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgyLCA2OSwgCi0gICAgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzIsIDczLCA3MSwgNzIsIDQ1LCA3MiwgNjksIDY5LCA3NiwgNjksIAotICAgIDE5NiwgNzIsIDczLCA2OSwgODgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgNjksIDg1LCAyMDAsIDcyLCAKLSAgICA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDcyLCA3MywgMTk1LCA3MiwgNzMsIDY5LCAxMjgsIDcyLCA3MywgNjgsIAotICAgIDczLCA3OCwgMTk5LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNzIsIDczLCA2OCwgNjksIDEyOCwgNzIsIDczLCA2NiwgCi0gICAgNzMsIDgzLCA2NywgODUsIDgzLCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgODUsIDEyOCwgNzIsIDcyLCAKLSAgICA3MywgMTI4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA3MiwgNzIsIDY5LCAxMjgsIDcyLCA3MiwgNjUsIDY1LCAxMjgsIDcyLCAKLSAgICA3MSwgMTI4LCA3MiwgNjksIDg4LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDgyLCA2NSwgCi0gICAgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA3MiwgNjksIDgyLCA4NSwgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2OSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNzMsIAotICAgIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA2OSwgODMsIDEyOCwgNzIsIDY5LCA4MiwgNjksIDEyOCwgCi0gICAgNzIsIDY5LCA4MiwgNjYsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIDc4LCA3MSwgMTI4LCAKLSAgICA3MiwgNjksIDc4LCAxOTksIDcyLCA2OSwgNzcsIDgwLCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgODQsIDEyOCwgNzIsIAotICAgIDY5LCA3NiwgNzcsIDY5LCAyMTIsIDcyLCA2OSwgNzYsIDIwNSwgNzIsIDY5LCA3NiwgNzMsIDY3LCA3OSwgODAsIDg0LCA2OSwgCi0gICAgODIsIDEyOCwgNzIsIDY5LCA3NSwgODUsIDg0LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjksIDczLCA4MywgNjksIDczLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDg2LCA4OSwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCA3NiwgMjE3LCA3MiwgNjksIAotICAgIDY1LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgMjA2LCA3MiwgNjksIDY1LCA4MiwgODQsIDgzLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDgyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3MiwgNjksIDY1LCA4MiwgODQsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODIsIDIxMiwgNzIsIDY5LCA2NSwgODIsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAKLSAgICAyMDQsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIAotICAgIDc5LCA3OCwgMTk3LCA3MiwgNjksIDY1LCA2OCwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgNjUsIDgzLCAKLSAgICAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCA2NSwgODUsIAotICAgIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIDY1LCA4NCwgCi0gICAgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjcsIDcyLCA3MywgNzgsIDE5OSwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgNzIsIDY1LCAKLSAgICA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDEyOCwgCi0gICAgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcyLCAKLSAgICA2NSwgODIsIDE5NiwgNzIsIDY1LCA4MCwgODAsIDIxNywgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCA3MiwgNjUsIAotICAgIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDIxMSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgMTI4LCA3MiwgNjUsIDc4LCAKLSAgICA2OCwgNjYsIDY1LCA3MSwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDY1LCA3NywgOTAsIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDgzLCA4NCwgNjksIDIxMCwgNzIsIDY1LCA3NywgCi0gICAgNzcsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIDIxMCwgNzIsIDY1LCA3NywgNjYsIDg1LCA4MiwgNzEsIDY5LCAKLSAgICA4MiwgMTI4LCA3MiwgNjUsIDc2LCA4MSwgNjUsIDEyOCwgNzIsIDY1LCA3NiwgNzksIDEyOCwgNzIsIDY1LCA3NiwgNzAsIAotICAgIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIDY5LCA4MiwgCi0gICAgNjgsIDEyOCwgNzIsIDY1LCA3NiwgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2NSwgNzMsIDgyLCA2NywgODUsIDg0LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA2NSwgNzEsIDc2LCA2NSwgCi0gICAgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA3MiwgNjUsIDcwLCAKLSAgICA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjUsIAotICAgIDY1LCA3NywgMTI4LCA3MiwgNjUsIDE5MywgNzIsIDY1LCA0NSwgNzIsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU2LCAxMjgsIAotICAgIDcyLCA0OCwgNDgsIDU1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNDgsIDQ4LCA1MywgMTI4LCA3MiwgNDgsIDQ4LCA1MiwgMTI4LCA3MiwgNDgsIDQ4LCA1MSwgMTI4LCA3MiwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNDgsIDQ4LCA0OSwgMTI4LCA3MiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzEsIDg5LCA4NSwgMTI4LCAKLSAgICA3MSwgODksIDc5LCA3OCwgMTI4LCA3MSwgODksIDc5LCAxMjgsIDcxLCA4OSwgNzMsIDEyOCwgNzEsIDg5LCA3MCwgMjEzLCAKLSAgICA3MSwgODksIDY5LCA2OSwgMTI4LCA3MSwgODksIDY1LCA4MywgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCA3MSwgODksIAotICAgIDY1LCAxMjgsIDcxLCA4OSwgMTI4LCA3MSwgODcsIDg1LCAxMjgsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDg3LCA2OSwgNjksIAotICAgIDEyOCwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgODcsIDY1LCAxMjgsIDcxLCA4NiwgMTI4LCAKLSAgICA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDcxLCA4NSwgODIsIDg1LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA2NSwgNzcsIAotICAgIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4NSwgNzgsIDg1LCAxMjgsIDcxLCA4NSwgCi0gICAgNzgsIDIxMywgNzEsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3MywgODQsIDY1LCA4MiwgMTI4LCA3MSwgCi0gICAgODUsIDE5OSwgNzEsIDg1LCA2OSwgNzIsIDEyOCwgNzEsIDg1LCA2OSwgMjAwLCA3MSwgODUsIDY4LCAxMjgsIDcxLCA4NSwgCi0gICAgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIDgzLCA3NywgNjUsIDc4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDY4LCAKLSAgICA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgCi0gICAgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTkzLCA3MSwgODUsIDE3OCwgNzEsIDg0LCA2OSwgCi0gICAgMjEwLCA3MSwgODMsIDg1LCA3NywgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4MiwgMjEzLCA3MSwgODIsIDc5LCA4NywgCi0gICAgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDgyLCA3OSwgNzgsIDg0LCA3MiwgNzMsIDgzLCAKLSAgICA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MSwgODIsIDczLCA3OCwgNzgsIDczLCA3OCwgMTk5LCA3MSwgODIsIDczLCA3NywgNjUsIAotICAgIDY3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY5LCAKLSAgICAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIAotICAgIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDIwNiwgCi0gICAgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgMjEyLCA3MSwgODIsIDY1LCA4NiwgNjksIDg5LCAKLSAgICA2NSwgODIsIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3MSwgODIsIAotICAgIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIAotICAgIDgyLCA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCA2NSwgODAsIDY5LCA4MywgCi0gICAgMTI4LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDcxLCA4MiwgNjUsIDY4LCAKLSAgICA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgNjUsIDY3LCAxOTcsIAotICAgIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCA3MSwgNzksIDgyLCA4NCwgCi0gICAgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODMsIDg5LCAKLSAgICA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgNzEsIAotICAgIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgNzksIDE5NiwgNzEsIDc5LCA3OCwgNzEsIDEyOCwgNzEsIAotICAgIDc5LCA3NiwgNjgsIDEyOCwgNzEsIDc5LCA3NSwgMTI4LCA3MSwgNzksIDczLCA3OCwgMTk5LCA3MSwgNzksIDY2LCA3NiwgCi0gICAgNzMsIDc4LCAxMjgsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCA3OSwgNjUsIDIwNCwgNzEsIDc5LCA2NSwgMTI4LCA3MSwgCi0gICAgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3MSwgNzYsIDc5LCAKLSAgICA4NywgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIDIwNCwgNzEsIDc2LCA3OSwgNjYsIDE5NywgNzEsIAotICAgIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgNjksIDczLCA2NywgMjAwLCA3MSwgNzYsIDY1LCA3MSwgCi0gICAgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3NCwgNjksIDEyOCwgNzEsIDczLCA4OCwgMTI4LCA3MSwgCi0gICAgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MywgODMsIDIwMCwgNzEsIDczLCA4MywgNjUsIDc2LCAKLSAgICAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA3MywgODIsIDc2LCAxMjgsIDcxLCA3MywgODIsIAotICAgIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCA4MiwgMTc4LCA3MSwgNzMsIAotICAgIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgNzEsIDczLCA3NywgCi0gICAgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgMTI4LCA3MSwgCi0gICAgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjYsIDc5LCA4NSwgMjExLCA3MSwgNzMsIDY2LCA2NSwgMTI4LCAKLSAgICA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MiwgODcsIDY1LCAxMjgsIDcxLCAKLSAgICA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCA3MiwgODUsIDEyOCwgNzEsIAotICAgIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAxMjgsIDcxLCA3MiwgNzksIDEyOCwgNzEsIDcyLCA3MywgCi0gICAgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDc4LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIAotICAgIDcyLCA2OSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg0LCAxMjgsIDcxLCA3MiwgNjksIDY5LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCAKLSAgICA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAxMjgsIDcxLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIAotICAgIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCA4NSwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgNjgsIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDc3LCA2NSwgNjksIAotICAgIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDcxLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDcxLCA3MSwgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzEsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDEyOCwgNzEsIDcxLCA3OSwgODgsIDEyOCwgNzEsIDcxLCA3OSwgCi0gICAgODQsIDEyOCwgNzEsIDcxLCA3OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgODgsIDEyOCwgNzEsIDcxLCA3MywgODQsIDEyOCwgCi0gICAgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgMTI4LCAKLSAgICA3MSwgNzEsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIAotICAgIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCA3MSwgNjksIDg0LCAxOTMsIAotICAgIDcxLCA2OSwgODMsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgCi0gICAgODQsIDczLCA3OCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCA2OSwgODMsIDcyLCA1MCwgMTI4LCAKLSAgICA3MSwgNjksIDgyLCA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIDc3LCA2NSwgMjA2LCA3MSwgNjksIAotICAgIDgyLCA2OSwgODMsIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA3MSwgNjksIDc4LCAKLSAgICA4NCwgNzYsIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcxLCA2OSwgNzgsIDczLCA3NSwgCi0gICAgMjAxLCA3MSwgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCAKLSAgICA3NywgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDIwNSwgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjksIDY4LCA2OSwgMTI4LCA3MSwgNjksIDY2LCAyMDcsIDcxLCA2OSwgNjYsIDE5MywgNzEsIDY5LCA2NSwgCi0gICAgODIsIDEyOCwgNzEsIDY5LCA2NSwgMjEwLCA3MSwgNjgsIDY1LCA3OCwgMTI4LCA3MSwgNjcsIDczLCA3MSwgMTI4LCA3MSwgCi0gICAgNjcsIDY1LCAyMDYsIDcxLCA2NiwgNzksIDc4LCAxMjgsIDcxLCA2NiwgNzMsIDY5LCAxOTcsIDcxLCA2NiwgNjksIDg1LCAKLSAgICA4OCwgMTI4LCA3MSwgNjYsIDY5LCA4NCwgMTI4LCA3MSwgNjYsIDY1LCA4OSwgNzMsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIAotICAgIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgCi0gICAgODQsIDg0LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCAKLSAgICA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgCi0gICAgNjUsIDc4LCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIAotICAgIDEyOCwgNzEsIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCA4MiwgNjgsIDY5LCA3OCwgMTI4LCA3MSwgCi0gICAgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgNzEsIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCAKLSAgICA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIAotICAgIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2OSwgMTI4LCA3MSwgNjUsIDc3LCAxOTcsIDcxLCA2NSwgCi0gICAgNzcsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCAKLSAgICA3MSwgMTI4LCA3MSwgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIDY5LCA4NCwgODQsIDY1LCA0NSwgODAsIAotICAgIDczLCA3NiwgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgNjUsIDY4LCAxMjgsIDcxLCA2NSwgCi0gICAgMTk2LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MSwgCi0gICAgNjUsIDE3OCwgNzEsIDQ4LCA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgNzEsIDQ4LCA1MywgNTAsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MywgNDksIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCA1MiwgNTcsIDEyOCwgNzEsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzEsIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIDcxLCA0OCwgNTIsIDUxLCA2NSwgCi0gICAgMTI4LCA3MSwgNDgsIDUyLCA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgNDgsIDUyLCA0OSwgMTI4LCA3MSwgCi0gICAgNDgsIDUyLCA0OCwgMTI4LCA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCA1NiwgMTI4LCA3MSwgNDgsIDUxLCAKLSAgICA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIAotICAgIDU0LCAxMjgsIDcxLCA0OCwgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIDcxLCA0OCwgNTEsIDUxLCAxMjgsIAotICAgIDcxLCA0OCwgNTEsIDUwLCAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgNTEsIDQ4LCAxMjgsIDcxLCA0OCwgCi0gICAgNTAsIDU3LCAxMjgsIDcxLCA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCA3MSwgNDgsIDUwLCA1MiwgMTI4LCAKLSAgICA3MSwgNDgsIDUwLCA1MSwgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIDUwLCA0OSwgMTI4LCA3MSwgNDgsIAotICAgIDUwLCA0OCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgNTcsIDEyOCwgNzEsIDQ4LCA0OSwgCi0gICAgNTYsIDEyOCwgNzEsIDQ4LCA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgNzEsIDQ4LCA0OSwgNTMsIDEyOCwgCi0gICAgNzEsIDQ4LCA0OSwgNTIsIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCA0OSwgNTAsIDEyOCwgNzEsIDQ4LCAKLSAgICA0OSwgNDksIDY1LCAxMjgsIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIDQ4LCAxMjgsIDcxLCA0OCwgNDgsIAotICAgIDU3LCAxMjgsIDcxLCA0OCwgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCAKLSAgICAxMjgsIDcxLCA0OCwgNDgsIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCA0OCwgNDgsIDUxLCAxMjgsIDcxLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIDEyOCwgNzAsIDg5LCA4NCwgMTI4LCAKLSAgICA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg3LCA3MywgMTI4LCA3MCwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA3MCwgODcsIDY5LCAxMjgsIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcwLCA4NywgNjUsIDEyOCwgNzAsIDg2LCA4MywgNTEsIAotICAgIDEyOCwgNzAsIDg2LCA4MywgNTAsIDEyOCwgNzAsIDg2LCA4MywgNDksIDEyOCwgNzAsIDg1LCA4OCwgMTI4LCA3MCwgODUsIAotICAgIDg0LCAxMjgsIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIDg1LCA4MiwgODgsIDEyOCwgNzAsIAotICAgIDg1LCA4MCwgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDcwLCA4NSwgNzYsIDc2LCA3OCwgNjksIDgzLCAKLSAgICA4MywgMTI4LCA3MCwgODUsIDc2LCAyMDQsIDcwLCA4NSwgNzQsIDczLCAxMjgsIDcwLCA4NSwgNjksIDg0LCAxMjgsIDcwLCAKLSAgICA4NSwgNjksIDIwNCwgNzAsIDg1LCA2OSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgODIsIDE5MywgNzAsIDgyLCA3OSwgODcsIAotICAgIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgCi0gICAgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCAKLSAgICA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIAotICAgIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgCi0gICAgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCAKLSAgICA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIAotICAgIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgCi0gICAgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCAKLSAgICA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIAotICAgIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgCi0gICAgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIAotICAgIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgCi0gICAgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCAKLSAgICA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIAotICAgIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAKLSAgICAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgCi0gICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgCi0gICAgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCAKLSAgICA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIAotICAgIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIAotICAgIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAKLSAgICAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIAotICAgIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgCi0gICAgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCAKLSAgICA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIAotICAgIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgCi0gICAgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCAKLSAgICA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIAotICAgIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgCi0gICAgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCAKLSAgICA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIAotICAgIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgCi0gICAgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCAKLSAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIAotICAgIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgCi0gICAgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKLSAgICAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIAotICAgIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgCi0gICAgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCAKLSAgICA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIAotICAgIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgCi0gICAgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCAKLSAgICA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCAKLSAgICA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCi0gICAgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKLSAgICAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIAotICAgIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAKLSAgICAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCAKLSAgICA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIAotICAgIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgCi0gICAgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIAotICAgIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgCi0gICAgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCAKLSAgICA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIAotICAgIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgCi0gICAgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAKLSAgICAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIAotICAgIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgCi0gICAgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCAKLSAgICA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAotICAgIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgCi0gICAgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCAKLSAgICA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCAKLSAgICA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIAotICAgIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgCi0gICAgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCAKLSAgICA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIAotICAgIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgCi0gICAgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIAotICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgCi0gICAgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCAKLSAgICA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIAotICAgIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgCi0gICAgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAotICAgIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgCi0gICAgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIAotICAgIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgCi0gICAgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAKLSAgICAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIAotICAgIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCAKLSAgICA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAKLSAgICAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIAotICAgIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgCi0gICAgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIAotICAgIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgCi0gICAgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCAKLSAgICA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgCi0gICAgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgCi0gICAgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCAKLSAgICA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAKLSAgICAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIDg3LCA2OSwgMTI4LCA2OSwgODYsIAotICAgIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDg1LCA4MiwgCi0gICAgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIAotICAgIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgMjE3LCA2OSwgODUsIDgyLCAKLSAgICAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDc5LCAxMjgsIDY5LCAKLSAgICA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIDEyOCwgNjksIAotICAgIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCA2OSwgCi0gICAgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgODIsIDc4LCA3MywgODQsIDg5LCAKLSAgICAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAxMjgsIDY5LCA4MywgODQsIAotICAgIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIDY5LCAxOTYsIDY5LCA4MywgCi0gICAgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgMTc4LCA2OSwgODMsIDcyLCAKLSAgICA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAxMjgsIDY5LCA4MywgNjUsIAotICAgIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIDY2LCA2NSwgODIsIDgyLCA2OSwgCi0gICAgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgODIsIDcxLCAxMjgsIDY5LCA4MiwgCi0gICAgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAKLSAgICAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIAotICAgIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgCi0gICAgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCAKLSAgICA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgCi0gICAgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCAKLSAgICA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCAKLSAgICA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIAotICAgIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgCi0gICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAKLSAgICA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIAotICAgIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAKLSAgICAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIAotICAgIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgCi0gICAgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIAotICAgIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAKLSAgICAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNjksIDc4LCA2OCwgNjksIAotICAgIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA4MywgMTI4LCA2OSwgCi0gICAgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDczLCA3OCwgMTk5LCAKLSAgICA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIAotICAgIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDg0LCA3MywgMTk1LCA2OSwgCi0gICAgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCA2OCwgNjksIDgyLCA4OSwgMTI4LCAKLSAgICA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIDczLCA4MywgNzIsIDc3LCA2OSwgCi0gICAgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDc2LCA4NCwgMTI4LCAKLSAgICA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA3MywgODMsIDEyOCwgNjksIAotICAgIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDEyOCwgNjksIDc2LCAKLSAgICA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIAotICAgIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgCi0gICAgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCAKLSAgICA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIAotICAgIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIAotICAgIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgCi0gICAgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgCi0gICAgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCAKLSAgICA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIAotICAgIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIAotICAgIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgCi0gICAgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIAotICAgIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgCi0gICAgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCAKLSAgICA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIAotICAgIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIAotICAgIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgCi0gICAgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIAotICAgIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgCi0gICAgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIAotICAgIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIAotICAgIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIAotICAgIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgCi0gICAgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgCi0gICAgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIAotICAgIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIAotICAgIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgCi0gICAgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAKLSAgICAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgCi0gICAgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgCi0gICAgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgCi0gICAgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgCi0gICAgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCAKLSAgICA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIAotICAgIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgCi0gICAgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCAKLSAgICA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIAotICAgIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIAotICAgIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgCi0gICAgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCAKLSAgICA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIAotICAgIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgCi0gICAgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCAKLSAgICA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAotICAgIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIAotICAgIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAotICAgIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgCi0gICAgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCAKLSAgICA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIAotICAgIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgCi0gICAgMTI4LCA2OCwgNzksIDczLCA4NCwgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIAotICAgIDY4LCA3OSwgNjgsIDY5LCA3NSwgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgCi0gICAgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIAotICAgIDY5LCAxOTcsIDY4LCA3OSwgNjUsIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCAKLSAgICA3NiwgODUsIDEyOCwgNjgsIDc2LCA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCAKLSAgICA2OCwgNzYsIDcyLCA2NSwgMTI4LCA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCAKLSAgICA2OCwgNzUsIDY1LCA4MiwgMTI4LCA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIAotICAgIDc0LCA2OSwgODIsIDg2LCAxMjgsIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgCi0gICAgMjE3LCA2OCwgNzMsIDg2LCA3OSwgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIAotICAgIDY4LCAxOTcsIDY4LCA3MywgODYsIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAKLSAgICAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIAotICAgIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgCi0gICAgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCAKLSAgICA4MywgODAsIDY5LCA4MiwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIAotICAgIDc3LCA3OSwgODUsIDEyOCwgNjgsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgCi0gICAgODUsIDc5LCA4NSwgMjExLCA2OCwgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgMTk2LCA2OCwgNzMsIDgzLCA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDg0LCA3NiwgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgCi0gICAgNzMsIDgwLCA4NCwgNjksIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCAKLSAgICA3OCwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIAotICAgIDY2LCA2NSwgMjEyLCA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgCi0gICAgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgNDUsIDUwLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgCi0gICAgNjgsIDczLCA3NywgNzMsIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIAotICAgIDczLCAxOTMsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgCi0gICAgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIAotICAgIDc5LCAyMTEsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgCi0gICAgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCAKLSAgICA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIAotICAgIDIxMSwgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgCi0gICAgODQsIDIxNywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCAKLSAgICA3MCwgNjksIDgyLCA2OSwgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCAKLSAgICA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCAKLSAgICA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIAotICAgIDY1LCA4MywgODQsIDc5LCA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgCi0gICAgNzcsIDc5LCA3OCwgNjgsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCAKLSAgICA2OSwgMjEwLCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIAotICAgIDczLCA3NSwgMTkzLCA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgCi0gICAgNjUsIDc2LCAxMjgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCAKLSAgICA3MywgOTAsIDY5LCAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIAotICAgIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgCi0gICAgNzksIDEyOCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgCi0gICAgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCAKLSAgICA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIAotICAgIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgCi0gICAgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCAKLSAgICA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCAKLSAgICA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIAotICAgIDg4LCA3MywgNjUsIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgCi0gICAgNjksIDc4LCA4NCwgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCAKLSAgICA3MywgNzEsIDc4LCAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgCi0gICAgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCAKLSAgICA4MiwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIAotICAgIDgyLCA4NCwgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgCi0gICAgODQsIDczLCA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCAKLSAgICA3OCwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIAotICAgIDY5LCA3OCwgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgCi0gICAgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCAKLSAgICA2OCwgNjksIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIAotICAgIDgyLCAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgCi0gICAgNzcsIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCAKLSAgICA3MywgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAorICAgIDg0LCAxMjgsIDgyLCA3NiwgNzksIDEyOCwgODIsIDc2LCA3NywgMTI4LCA4MiwgNzYsIDczLCAxMjgsIDgyLCA3NiwgNjksIAorICAgIDEyOCwgODIsIDc0LCA2OSwgMjExLCA4MiwgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIAorICAgIDEyOCwgODIsIDczLCA4NCwgODUsIDY1LCA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgCisgICAgNzMsIDg0LCA4MywgNzMsIDEyOCwgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgODIsIDY1LCAxMjgsIDgyLCA3MywgODAsIDEyOCwgODIsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzAsIAorICAgIDc5LCA4MiwgOTAsIDY1LCA3OCwgNjgsIDc5LCAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzMsIDc3LCA3MSwgNjYsIDY1LCAKKyAgICAxMjgsIDgyLCA3MywgNzUsIDgyLCA3MywgNzUsIDEyOCwgODIsIDczLCA3MSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODIsIAorICAgIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAKKyAgICAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCAKKyAgICA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCAKKyAgICA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgCisgICAgNzYsIDQ1LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAorICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIAorICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAKKyAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCAKKyAgICA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCAKKyAgICA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MiwgNzMsIDY5LCAKKyAgICA4NSwgMjA0LCA4MiwgNzMsIDY5LCA3NiwgMTI4LCA4MiwgNzMsIDY5LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgNzcsIAorICAgIDEyOCwgODIsIDczLCA2NywgNjksIDEyOCwgODIsIDczLCA2NywgMTk3LCA4MiwgNzMsIDY2LCA2NiwgNzksIDc4LCAxMjgsIAorICAgIDgyLCA3MywgNjUsIDIwNCwgODIsIDcyLCA3OSwgODQsIDczLCAxOTUsIDgyLCA3MiwgNzksIDEyOCwgODIsIDcyLCAyMDcsIAorICAgIDgyLCA3MiwgNjUsIDEyOCwgODIsIDcxLCA4OSwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODIsIDcxLCA4OSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIDY5LCA4NiwgNzksIDc2LCA4NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgODYsIAorICAgIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgCisgICAgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAKKyAgICAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCA4NSwgMTI4LCAKKyAgICA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg0LCA4MiwgNzksIAorICAgIDcwLCA3NiwgNjksIDIxNiwgODIsIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4NCwgNzksIDgyLCA4NCwgCisgICAgMTI4LCA4MiwgNjksIDgzLCA4NSwgODAsIDczLCA3OCwgODUsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzksIDc5LCAKKyAgICA3NywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIDg0LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgCisgICAgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCAKKyAgICAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgNzgsIAorICAgIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCA2OSwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCA3MiwgMTI4LCA4MiwgNjksIDgwLCA2OSwgODQsIDczLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDY5LCAxOTYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgODIsIAorICAgIDY5LCA4MCwgNjksIDY1LCAyMTIsIDgyLCA2OSwgODAsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA4MCwgNjUsIDEyOCwgCisgICAgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgMTI4LCAKKyAgICA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIDEyOCwgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgNjksIAorICAgIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCA3NiwgCisgICAgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCAKKyAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgCisgICAgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTIsIDEyOCwgODIsIDY5LCAKKyAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MSwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUwLCAxMjgsIAorICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDIxMSwgODIsIDY5LCA3MSwgCisgICAgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgNjksIDcxLCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDcxLCAKKyAgICA3MywgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCA3MywgNjUsIDEyOCwgODIsIDY5LCA3MCwgNzksIDgyLCA3NywgNjksIAorICAgIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgCisgICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCAKKyAgICA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCA4NCwgNzMsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIAorICAgIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAKKyAgICAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4MiwgNjksIDY3LCA4MiwgNjksIDY1LCA4NCwgNzMsIAorICAgIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDc5LCA4MiwgCisgICAgNjgsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA3OSwgODIsIDE5NiwgODIsIDY5LCA2NywgNjksIDgwLCA4NCwgNzMsIDg2LCAKKyAgICAxOTcsIDgyLCA2OSwgNjcsIDY5LCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgNDUsIAorICAgIDUwLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAKKyAgICAxMjgsIDgyLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MiwgNjgsIDIwNywgODIsIDY4LCA2OSwgMjA0LCA4MiwgNjYsIDY1LCAKKyAgICA4MywgMTkzLCA4MiwgNjUsIDg5LCA4MywgMTI4LCA4MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIAorICAgIDg0LCA3MywgNzksIDEyOCwgODIsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDcyLCAxOTMsIDgyLCA2NSwgCisgICAgODQsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDEyOCwgODIsIDY1LCA4MywgODcsIDY1LCA2OCwgNzMsIDEyOCwgODIsIDY1LCAKKyAgICA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDgxLCAxMjgsIDgyLCA2NSwgODAsIAorICAgIDczLCA4MywgNzcsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgCisgICAgNzgsIDEyOCwgODIsIDY1LCA3NywgMjExLCA4MiwgNjUsIDc3LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCAKKyAgICA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzUsIDY1LCA2NSwgODIsIDY1LCA2NSwgNzgsIDgzLCA2NSwgODksIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDY1LCA3MywgODMsIDY5LCAxOTYsIDgyLCA2NSwgNzMsIDc4LCA2NiwgCisgICAgNzksIDg3LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDg5LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIAorICAgIDIxNywgODIsIDY1LCA3MywgNzYsIDEyOCwgODIsIDY1LCA3MywgNjgsIDIwNywgODIsIDY1LCA3MywgNjgsIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAyMDAsIDgyLCA2NSwgNzIsIDEyOCwgODIsIDY1LCA3MCwgCisgICAgNjksIDEyOCwgODIsIDY1LCA2OSwgNzcsIDEyOCwgODIsIDY1LCA2OCwgNzMsIDc5LCA2NSwgNjcsIDg0LCA3MywgODYsIAorICAgIDE5NywgODIsIDY1LCA2OCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgNjgsIDczLCAyMDcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIAorICAgIDY1LCA2OCwgMTI4LCA4MiwgNjUsIDE5NiwgODIsIDY1LCA2NywgODEsIDg1LCA2OSwgMjEyLCA4MiwgNjUsIDY3LCA3MywgCisgICAgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgODQsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCAyMTIsIDgyLCAKKyAgICA2NSwgNjYsIDEyOCwgODIsIDY1LCA2NSwgNzMsIDEyOCwgODIsIDY1LCA1MSwgMTI4LCA4MiwgNjUsIDUwLCAxMjgsIDgyLCAKKyAgICA2NSwgNDUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIAorICAgIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCAKKyAgICA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCAKKyAgICA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgCisgICAgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgCisgICAgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgCisgICAgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgCisgICAgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgCisgICAgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgCisgICAgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCAKKyAgICA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgCisgICAgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgODMsIDgzLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MSwgODUsIDczLCAKKyAgICA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIAorICAgIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgCisgICAgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDcwLCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAKKyAgICA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA2OSwgMjA2LCA4MSwgODUsIDY5LCAxMjgsIAorICAgIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgODEsIDg1LCA2NSwgODQsIDY5LCA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgCisgICAgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCAKKyAgICA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgMjEwLCA4MSwgODUsIDY1LCA3OCwgODQsIAorICAgIDczLCA4NCwgMjE3LCA4MSwgODUsIDY1LCA2OCwgODIsIDg1LCA4MCwgNzYsIDE5NywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgCisgICAgNzgsIDg0LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCAyMTIsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCAKKyAgICA4NSwgNjUsIDE5NiwgODEsIDg1LCA2NSwgMTI4LCA4MSwgODUsIDEyOCwgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgCisgICAgNzksIDg0LCAxMjgsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDgxLCA3OSwgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgCisgICAgODEsIDc5LCA3OSwgMTI4LCA4MSwgNzksIDIwNywgODEsIDc5LCA3MCwgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgCisgICAgMTI4LCA4MSwgNzksIDEyOCwgODEsIDc4LCAxMjgsIDgxLCA3MywgODgsIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIAorICAgIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCA4MCwgMTI4LCA4MSwgNzMsIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIAorICAgIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIAorICAgIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCA3MiwgODcsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgCisgICAgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDcyLCA4NywgNjUsIDEyOCwgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCAKKyAgICAxMjgsIDgxLCA3MiwgNzMsIDEyOCwgODEsIDcyLCA2OSwgNjksIDEyOCwgODEsIDcyLCA2OSwgMTI4LCA4MSwgNzIsIDY1LCAKKyAgICA2NSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIDgxLCA3MSwgNjUsIDEyOCwgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCAKKyAgICA4MSwgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgNjUsIDg1LCAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCAKKyAgICA4MSwgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCA4MiwgMTI4LCA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIAorICAgIDcyLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgCisgICAgNzYsIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCAKKyAgICA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgNzcsIDY1LCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCAKKyAgICA2NSwgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCA3MCwgMTI4LCA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIDQ4LCA1MywgMTI4LCA4MSwgNDgsIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgCisgICAgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgMTI4LCA4MSwgNDgsIDQ4LCA0OSwgMTI4LCA4MCwgOTAsIDEyOCwgODAsIDg5LCA4OCwgCisgICAgMTI4LCA4MCwgODksIDg0LCAxMjgsIDgwLCA4OSwgODIsIDg4LCAxMjgsIDgwLCA4OSwgODIsIDEyOCwgODAsIDg5LCA4MCwgCisgICAgMTI4LCA4MCwgODksIDEyOCwgODAsIDg3LCA3OSwgODksIDEyOCwgODAsIDg3LCA3OSwgNzksIDEyOCwgODAsIDg3LCA3OSwgCisgICAgMTI4LCA4MCwgODcsIDIwNywgODAsIDg3LCA3MywgNzMsIDEyOCwgODAsIDg3LCA3MywgMTI4LCA4MCwgODcsIDY5LCA2OSwgCisgICAgMTI4LCA4MCwgODcsIDY5LCAxMjgsIDgwLCA4NywgNjUsIDY1LCAxMjgsIDgwLCA4NywgMTI4LCA4MCwgODYsIDEyOCwgODAsIAorICAgIDg1LCA4OCwgMTI4LCA4MCwgODUsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDg1LCAxMjgsIDgwLCA4NSwgODQsIDgyLCA2OSwgCisgICAgNzAsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDIxMiwgODAsIDg1LCAKKyAgICA4MywgNzIsIDgwLCA3MywgNzgsIDEyOCwgODAsIDg1LCA4MywgNzIsIDgwLCA3MywgNzUsIDY1LCAxMjgsIDgwLCA4NSwgODMsIAorICAgIDcyLCA3MywgNzgsIDE5OSwgODAsIDg1LCA4MiwgODgsIDEyOCwgODAsIDg1LCA4MiwgODMsIDY5LCAxMjgsIDgwLCA4NSwgCisgICAgODIsIDgwLCA3NiwgMTk3LCA4MCwgODUsIDgyLCA3OCwgNjUsIDc3LCA2NSwgMTI4LCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAKKyAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA3MCwgODksIDEyOCwgODAsIDg1LCA4MiwgMTI4LCA4MCwgODUsIDgxLCAxMjgsIDgwLCAKKyAgICA4NSwgODAsIDEyOCwgODAsIDg1LCA3OSwgODgsIDEyOCwgODAsIDg1LCA3OSwgODAsIDEyOCwgODAsIDg1LCA3OSwgMTI4LCAKKyAgICA4MCwgODUsIDc4LCA3MSwgNjUsIDY1LCA3NywgMTI4LCA4MCwgODUsIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIAorICAgIDg1LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgCisgICAgODAsIDg1LCA3NywgODAsIDEyOCwgODAsIDg1LCA3NywgMTI4LCA4MCwgODUsIDY5LCAxMjgsIDgwLCA4NSwgNjYsIDc2LCAKKyAgICA3MywgMTk1LCA4MCwgODUsIDY1LCA4MSwgMTI4LCA4MCwgODUsIDY1LCA2OSwgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCAKKyAgICA4NSwgNDksIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIDY1LCA3MiwgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCAKKyAgICA4MywgNzMsIDc2LCAyMDEsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgCisgICAgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIAorICAgIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCA3MywgCisgICAgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIAorICAgIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgCisgICAgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MCwgODIsIDc5LCAKKyAgICA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgCisgICAgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCAKKyAgICA4MiwgNzksIDgwLCA2OSwgODIsIDg0LCAyMTcsIDgwLCA4MiwgNzksIDgwLCA2OSwgNzYsIDc2LCA2OSwgMjEwLCA4MCwgODIsIAorICAgIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgNzYsIDc5LCA3OCwgNzEsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDc2LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDE5NywgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCAKKyAgICA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIDgzLCAxMjgsIAorICAgIDgwLCA4MiwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgCisgICAgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgODYsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgMTk3LCA4MCwgODIsIDczLCA4NiwgNjUsIDY3LCAyMTcsIAorICAgIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCA4NCwgODIsIDE5MywgODAsIDgyLCA3MywgNzgsIDg0LCAKKyAgICA4MywgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIDEyOCwgODAsIDgyLCA3MywgNzgsIDIxMiwgODAsIDgyLCA3MywgNzgsIAorICAgIDY3LCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc3LCA2OSwgMTI4LCA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgCisgICAgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDY5LCA4MywgNjksIDg0LCAxMjgsIDgwLCA4MiwgNjksIDgzLCAKKyAgICA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgCisgICAgNzksIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCAKKyAgICA2OSwgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCA2OSwgNzAsIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNzMsIAorICAgIDgwLCA3MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA4MiwgCisgICAgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMjExLCA4MCwgODIsIDY5LCAKKyAgICA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIAorICAgIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgCisgICAgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCAKKyAgICA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDc4LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIAorICAgIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgCisgICAgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgCisgICAgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgNjUsIDEyOCwgODAsIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIAorICAgIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgNzksIDg3LCA2OSwgODIsIDEyOCwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgCisgICAgNjksIDE5NiwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDg1LCAKKyAgICA3NiwgODQsIDgyLCAyMTcsIDgwLCA3OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzksIDg0LCA2NSwgODQsIDc5LCAxMjgsIAorICAgIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIDE5NywgODAsIDc5LCAyMTIsIDgwLCA3OSwgODMsIDg0LCA4MCwgNzksIDgzLCA3MywgCisgICAgODQsIDczLCA3OSwgMjA2LCA4MCwgNzksIDgzLCA4NCwgNjYsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIAorICAgIDIwNCwgODAsIDc5LCA4MywgODQsIDEyOCwgODAsIDc5LCA4MywgMjEyLCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCAKKyAgICA2OSwgNjcsIDg0LCA4NSwgMjExLCA4MCwgNzksIDgwLCA4MCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIAorICAgIDc5LCAyMDgsIDgwLCA3OSwgNzksIDY4LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgCisgICAgNzksIDEyOCwgODAsIDc5LCAyMDYsIDgwLCA3OSwgNzcsIDc3LCA2OSwgNjksIDEyOCwgODAsIDc5LCA3NywgNzcsIDY5LCAKKyAgICAxOTcsIDgwLCA3OSwgNzYsIDczLCA4MywgNzIsIDEyOCwgODAsIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIAorICAgIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3NiwgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgCisgICAgNjksIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCA3MywgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCAKKyAgICA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIAorICAgIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgCisgICAgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCAKKyAgICA3OSwgNjUsIDEyOCwgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCAKKyAgICA4MCwgNzYsIDg1LCA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIAorICAgIDg1LCA4MywgMTI4LCA4MCwgNzYsIDg1LCA4MiwgNjUsIDc2LCAxMjgsIDgwLCA3NiwgODUsIDc3LCA2OSwgMTk2LCA4MCwgCisgICAgNzYsIDg1LCA3NywgMTI4LCA4MCwgNzYsIDg1LCA3NSwgMTI4LCA4MCwgNzYsIDg1LCA3MSwgMTI4LCA4MCwgNzYsIDg1LCAKKyAgICAxMjgsIDgwLCA3NiwgNzksIDg3LCAxMjgsIDgwLCA3NiwgNzksIDgwLCA3MiwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIAorICAgIDcyLCA4MiwgNzksIDc4LCAxMjgsIDgwLCA3NiwgNjgsIDEyOCwgODAsIDc2LCA2NSwgODksIDczLCA3OCwgMTk5LCA4MCwgCisgICAgNzYsIDY1LCA4MywgODQsIDczLCA2NywgODMsIDEyOCwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDgwLCA3NiwgNjUsIDc4LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDc4LCA2NywgMjAzLCA4MCwgNzYsIDY1LCA3NSwgMTI4LCA4MCwgNzYsIDY1LCA3MSwgNzMsIAorICAgIDc5LCAyMTEsIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzIsIDc5LCA3NiwgNjgsIDY5LCAyMTAsIDgwLCA3NiwgNjUsIDY3LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDEyOCwgODAsIDczLCA5MCwgOTAsIDczLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzMsIAorICAgIDkwLCA5MCwgNjUsIDEyOCwgODAsIDczLCA4OCwgMTI4LCA4MCwgNzMsIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgCisgICAgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgODMsIDg0LCA3OSwgNzYsIDEyOCwgODAsIDczLCA4MywgNjksIDc2LCA2OSwgNzIsIDEyOCwgODAsIAorICAgIDczLCA4MywgNjcsIDY5LCA4MywgMTI4LCA4MCwgNzMsIDgyLCA3MywgNzEsIDEyOCwgODAsIDczLCA4MiwgNzMsIDE5OSwgCisgICAgODAsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgODAsIDczLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNzMsIDgwLCAKKyAgICA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgODAsIDczLCA4MCwgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIAorICAgIDgwLCA3MywgODAsIDEyOCwgODAsIDczLCA3OCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODAsIDczLCA3OCwgNjksIDY1LCA4MCwgCisgICAgODAsIDc2LCA2OSwgMTI4LCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MywgNzgsIDY1LCA4MiwgNjYsIDc5LCA4MiwgNjUsIDgzLCAKKyAgICAxMjgsIDgwLCA3MywgNzYsIDc2LCAxMjgsIDgwLCA3MywgNzYsIDE5NywgODAsIDczLCA3NiwgNjcsIDgyLCA3OSwgMjE1LCAKKyAgICA4MCwgNzMsIDc1LCA4NSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNzUsIDc5LCAxMjgsIDgwLCA3MywgNzEsIDEyOCwgODAsIAorICAgIDczLCAxOTksIDgwLCA3MywgNjksIDg4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgCisgICAgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCisgICAgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIAorICAgIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgwLCA3MywgCisgICAgNjksIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgMjA4LCA4MCwgNzMsIDY5LCA4NCwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODQsIDEyOCwgODAsIDczLCA2OSwgNjksIDgxLCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDY3LCA2OSwgMTI4LCA4MCwgNzMsIDY5LCAxMjgsIDgwLCA3MywgNjcsIDc1LCA2OSwgODQsIDEyOCwgODAsIAorICAgIDczLCA2NywgNzUsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgCisgICAgNzcsIDE5MywgODAsIDczLCA2NSwgNzgsIDc5LCAxMjgsIDgwLCAyMDEsIDgwLCA3MiwgODcsIDY1LCAxMjgsIDgwLCA3MiwgCisgICAgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3MiwgODUsIDIxMCwgODAsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCAKKyAgICA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDcyLCA3OSwgNzgsIDY5LCA4MywgMTI4LCA4MCwgNzIsIDc5LCA2OSwgNzgsIAorICAgIDczLCA2NywgNzMsIDY1LCAyMDYsIDgwLCA3MiwgNzksIDY1LCAxMjgsIDgwLCA3MiwgNzksIDEyOCwgODAsIDcyLCAyMDcsIAorICAgIDgwLCA3MiwgNzgsIDY1LCA2OSwgMjAzLCA4MCwgNzIsIDczLCA3OCwgODQsIDcyLCA4NSwgMTI4LCA4MCwgNzIsIDczLCA3NiwgCisgICAgNzksIDgzLCA3OSwgODAsIDcyLCA2OSwgODIsIDIxMSwgODAsIDcyLCA3MywgNzYsIDczLCA4MCwgODAsIDczLCA3OCwgMTk3LCAKKyAgICA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MiwgCisgICAgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgMjAwLCA4MCwgNzIsIDczLCAxMjgsIDgwLCA3MiwgMjAxLCAKKyAgICA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDY5LCAxMjgsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5OCwgODAsIAorICAgIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk0LCA4MCwgNzIsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgCisgICAgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCA3MiwgNjUsIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCAKKyAgICA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIDgwLCAxOTMsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIAorICAgIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIAorICAgIDEyOCwgODAsIDY5LCA4NSwgODgsIDEyOCwgODAsIDY5LCA4NSwgODQsIDY1LCA2OSwgMTI4LCA4MCwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCAKKyAgICA2OSwgODQsIDY1LCA4MywgODQsIDczLCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIAorICAgIDY1LCA3NiwgNzYsIDY5LCAxOTYsIDgwLCA2OSwgODMsIDc5LCAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgCisgICAgNzIsIDUwLCAxMjgsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIDcyLCAKKyAgICAyMDcsIDgwLCA2OSwgODIsIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIAorICAgIDc4LCA2NSwgMjA0LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgMjA2LCA4MCwgCisgICAgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA2OSwgODYsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDgwLCAKKyAgICA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgCisgICAgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIDY5LCA4MiwgNzcsIDczLCA4NCwgODQsIDY5LCAxOTYsIDgwLCAKKyAgICA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgCisgICAgNzMsIDEyOCwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDIwMSwgODAsIDY5LCA4MiwgNzAsIDc5LCAKKyAgICA4MiwgNzcsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgODAsIDY5LCA4MiwgNzAsIAorICAgIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgCisgICAgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDY3LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAKKyAgICAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIDgwLCA2OSwgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIDc5LCA4MCwgNzYsIAorICAgIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgODMsIDY5LCA3NywgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAKKyAgICAxMjgsIDgwLCA2OSwgNzgsIDgzLCA3MywgODYsIDE5NywgODAsIDY5LCA3OCwgNzgsIDIxNywgODAsIDY5LCA3OCwgNzMsIAorICAgIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA3MSwgODUsIDczLCA3OCwgMTI4LCA4MCwgNjksIDc4LCA3MSwgNzUsIDY1LCA3NiwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgNjcsIDczLCAKKyAgICA3NiwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIAorICAgIDIwNiwgODAsIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgCisgICAgMjAwLCA4MCwgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA2OSwgCisgICAgODMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MCwgMTI4LCA4MCwgNjksIDY5LCA3NywgMTI4LCA4MCwgNjksIDY5LCAKKyAgICAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCA4MywgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIAorICAgIDg0LCA4MiwgNzMsIDY1LCA3OCwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgCisgICAgNjksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDY5LCA2OCwgNjUsIDIwNCwgODAsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgwLCAKKyAgICA2OSwgNjUsIDY3LCA2OSwgMTI4LCA4MCwgNjksIDY1LCA2NywgMTk3LCA4MCwgNjgsIDczLCAxMjgsIDgwLCA2OCwgNzAsIAorICAgIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIDEyOCwgODAsIDY1LCA4OSwgNjksIAorICAgIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODAsIDY1LCA4OSwgMTI4LCA4MCwgCisgICAgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgNjUsIDg2LCA3MywgODksIDY1LCAKKyAgICA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA4MCwgNjUsIAorICAgIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIDgwLCA2NSwgODQsIDY1LCA3NSwgCisgICAgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDgzLCA4NSwgODEsIDEyOCwgCisgICAgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIAorICAgIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCAKKyAgICA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgCisgICAgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgODMsIDY5LCAKKyAgICA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIDgyLCA4NSwgNzcsIDEyOCwgODAsIAorICAgIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY1LCA4MiwgCisgICAgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgwLCA2NSwgODIsIAorICAgIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgODAsIDY1LCA4MiwgMjEyLCA4MCwgCisgICAgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCA4NCwgNzMsIDcxLCA3NywgNjksIAorICAgIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgCisgICAgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDIxMSwgODAsIDY1LCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDczLCAxMjgsIDgwLCA2NSwgODIsIAorICAgIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAKKyAgICAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4MCwgNjUsIDgyLCA2NSwgCisgICAgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAKKyAgICA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIDY1LCA4MCwgMTI4LCA4MCwgNjUsIAorICAgIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA3MywgCisgICAgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc4LCAKKyAgICA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4NCwgNzMsIAorICAgIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgCisgICAgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODIsIAorICAgIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgCisgICAgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCA4OSwgNjUsIDgyLCAxMjgsIDgwLCAKKyAgICA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgCisgICAgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCAKKyAgICA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIDc1LCA2NSwgNzIsIDEyOCwgODAsIAorICAgIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgCisgICAgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCAKKyAgICA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIDY5LCA3OCwgNzEsIDEyOCwgODAsIAorICAgIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgMTI4LCA4MCwgNjUsIDc2LCA4NSwgCisgICAgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCAyMDUsIDgwLCAKKyAgICA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIDEyOCwgODAsIDY1LCA3NiwgNjksIAorICAgIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgCisgICAgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgNjUsIDIwMywgODAsIDY1LCA3MywgCisgICAgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODAsIDY1LCAKKyAgICA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIDY1LCA4NiwgMjAxLCA4MCwgNjUsIAorICAgIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIDgwLCA2NSwgNjgsIDc3LCAxOTMsIAorICAgIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgNjUsIDY4LCAxMjgsIDgwLCA2NSwgCisgICAgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAxMjgsIDgwLCA2NSwgNjUsIDg0LCAKKyAgICA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIDY1LCA2NSwgODIsIDY1LCA2OSwgCisgICAgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDY1LCA0NSwgODAsIDczLCAKKyAgICA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCA0OCwgNDksIDQ5LCAxMjgsIDgwLCAKKyAgICA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIDU2LCAxMjgsIDgwLCA0OCwgNDgsIAorICAgIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIDgwLCA0OCwgNDgsIDUyLCAxMjgsIAorICAgIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgCisgICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAKKyAgICAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIDEyOCwgNzksIDg4LCA3MywgMTkzLCAKKyAgICA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIAorICAgIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCAKKyAgICA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIAorICAgIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIAorICAgIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAKKyAgICAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIAorICAgIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIAorICAgIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAKKyAgICAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA3OSwgODIsIAorICAgIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgCisgICAgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCA4MiwgNzUsIDcyLCA3OSwgMjA2LCAKKyAgICA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCAxMjgsIDc5LCA4MiwgNjksIAorICAgIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNjgsIDY5LCAyMTAsIDc5LCA4MiwgCisgICAgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCA4MCwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDc4LCAKKyAgICAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCA2NywgNzIsIDg1LCA4MywgCisgICAgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgCisgICAgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIAorICAgIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCA5MCwgNjksIAorICAgIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIDc3LCA4NSwgCisgICAgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDc4LCAKKyAgICA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDc5LCA3OCwgCisgICAgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAKKyAgICAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDIwNiwgNzksIAorICAgIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIDY4LCAxMjgsIDc5LCAKKyAgICA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIDc5LCA3NCwgNzMsIAorICAgIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgNzksIDcyLCA3NywgCisgICAgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCA3NSwgMTI4LCA3OSwgCisgICAgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgODIsIAorICAgIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgNzksIDcwLCA3MCwgCisgICAgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgNzksIDY4LCAxOTYsIAorICAgIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAxMjgsIDc5LCA2NywgCisgICAgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCA2NywgNjcsIDc2LCAKKyAgICA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIDY2LCA2OSwgNzYsIDg1LCAKKyAgICA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgNjUsIDg5LCAxMjgsIDc5LCAKKyAgICA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgMTkzLCA3OSwgNDgsIAorICAgIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIDc5LCA0OCwgNTIsIDU1LCAKKyAgICAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgNTIsIDUyLCAxMjgsIDc5LCAKKyAgICA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAxMjgsIDc5LCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY2LCAKKyAgICAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgNDgsIDUxLCA1MywgMTI4LCAKKyAgICA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgMTI4LCA3OSwgNDgsIDUwLCAKKyAgICA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgNDgsIDUwLCA1MywgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIDQ5LCAxMjgsIDc5LCA0OCwgCisgICAgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgNzksIDQ4LCA0OSwgNTQsIAorICAgIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCA0OSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY3LCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIAorICAgIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA0OCwgCisgICAgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAxMjgsIDc5LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCA0OCwgNDgsIDQ5LCA2NSwgCisgICAgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIDc5LCA0NSwgNzMsIDEyOCwgCisgICAgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgMTI4LCA3OCwgOTAsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgNzgsIDkwLCA4OSwgMTI4LCAKKyAgICA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDEyOCwgNzgsIAorICAgIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA5MCwgCisgICAgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIDc5LCA4OCwgMTI4LCA3OCwgCisgICAgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgMTI4LCA3OCwgOTAsIDczLCAKKyAgICA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIAorICAgIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIAorICAgIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIDEyOCwgNzgsIDkwLCA2NSwgCisgICAgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIDE5MywgNzgsIDg5LCA4NywgCisgICAgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIDg5LCA4NSwgODQsIDEyOCwgCisgICAgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4MCwgMTI4LCAKKyAgICA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAxMjgsIDc4LCA4OSwgNzksIAorICAgIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgNzksIDc5LCAxMjgsIAorICAgIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIDEyOCwgNzgsIDg5LCA3MywgCisgICAgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIDczLCAyMTEsIDc4LCA4OSwgCisgICAgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgNzksIDEyOCwgNzgsIDg5LCAKKyAgICA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgODksIAorICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCA3OCwgODksIDIwMSwgNzgsIAorICAgIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCA3OCwgODksIDY5LCA3MiwgCisgICAgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIAorICAgIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIDczLCAxMjgsIDc4LCA4OSwgCisgICAgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIDc4LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgNzgsIDg3LCA3MywgMTI4LCAKKyAgICA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgNzgsIDg3LCAxMjgsIDc4LCAKKyAgICA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDg1LCAKKyAgICA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgNzgsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4NSwgNzksIAorICAgIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIAorICAgIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgCisgICAgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIDg1LCA3NywgCisgICAgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCAKKyAgICA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIAorICAgIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIAorICAgIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgCisgICAgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDksIDE3NywgNzgsIDg1LCA0OCwgNTAsIDUwLCAKKyAgICA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MSwgCisgICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTUsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTIsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNzgsIDg0LCA4NSwgODUsIDEyOCwgNzgsIDg0LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCAyMTMsIDc4LCA4NCwgCisgICAgNzksIDgxLCA4MCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNzMsIDY5LCAxOTcsIDc4LCA4NCwgNjksIDg1LCA3OCwgNzEsIDY2LCAKKyAgICA2NSwgMTI4LCA3OCwgODQsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA2OSwgNjksIAorICAgIDEyOCwgNzgsIDg0LCA2NSwgODAsIDEyOCwgNzgsIDg0LCA2NSwgMjA4LCA3OCwgODQsIDY1LCA2NSwgMTI4LCA3OCwgODMsIAorICAgIDg1LCA3OSwgMjEyLCA3OCwgODMsIDg1LCA3OCwgMTI4LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3OCwgODMsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODAsIDEyOCwgNzgsIDgzLCAKKyAgICA3MywgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgMjEyLCA3OCwgODMsIAorICAgIDcyLCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4MywgNzIsIDg1LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA3MywgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgODEsIDEyOCwgNzgsIDgzLCA3MiwgNjUsIAorICAgIDEyOCwgNzgsIDgzLCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2NSwgCisgICAgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIDEyOCwgCisgICAgNzgsIDgyLCA4OSwgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIDg1LCAKKyAgICA4OCwgMTI4LCA3OCwgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODIsIAorICAgIDEyOCwgNzgsIDgyLCA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgODIsIAorICAgIDc5LCA4MCwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAxMjgsIAorICAgIDc4LCA4MiwgNjksIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCA2NSwgCisgICAgODQsIDEyOCwgNzgsIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCA3OSwgCisgICAgODgsIDEyOCwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgMTI4LCAKKyAgICA3OCwgNzksIDg0LCA2OSwgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCA3OSwgODQsIAorICAgIDY5LCA3MiwgNjksIDY1LCAxOTYsIDc4LCA3OSwgODQsIDY5LCA2NiwgNzksIDc5LCA3NSwgMTI4LCA3OCwgNzksIDg0LCA2OSwgCisgICAgNjYsIDc5LCA3OSwgMjAzLCA3OCwgNzksIDg0LCA2OSwgMTI4LCA3OCwgNzksIDg0LCAxOTcsIDc4LCA3OSwgODQsIDY3LCAKKyAgICA3MiwgNjksIDE5NiwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDEyOCwgNzgsIDc5LCAyMTIsIDc4LCAKKyAgICA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgNzIsIAorICAgIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIDIwNCwgNzgsIDc5LCAyMTAsIAorICAgIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc5LCA3OCwgCisgICAgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIAorICAgIDE5NywgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDY2LCA4MiwgCisgICAgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCA3NSwgNzIsIDg1LCAKKyAgICA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIAorICAgIDY1LCAyMDMsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIAorICAgIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDczLCA3MywgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA3MywgMTI4LCA3OCwgNzgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjUsIAorICAgIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNjUsIDEyOCwgNzgsIDc4LCA3OCwgMTI4LCA3OCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgNzksIDEyOCwgCisgICAgNzgsIDc4LCA3MSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIDczLCAxMjgsIDc4LCAKKyAgICA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIDc4LCA3OCwgNjYsIAorICAgIDgzLCA4MCwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NywgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgCisgICAgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc2LCAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgMjA3LCA3OCwgNzUsIAorICAgIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODksIDg4LCAKKyAgICAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgMTI4LCAKKyAgICA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODUsIAorICAgIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgNzgsIDc0LCA4NSwgCisgICAgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDY5LCAKKyAgICA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIDc5LCA4OCwgMTI4LCAKKyAgICA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgMTI4LCA3OCwgNzQsIAorICAgIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDgwLCAxMjgsIAorICAgIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCA3MywgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCAKKyAgICA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3NCwgNjksIAorICAgIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCA2OSwgMTI4LCA3OCwgCisgICAgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDc2LCA3MywgMTI4LCAKKyAgICA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDczLCA4OCwgMTI4LCA3OCwgNzMsIAorICAgIDg0LCA4MiwgNjksIDEyOCwgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIDc4LCA3MywgODIsIDg1LCA3MSwgODUsIDEyOCwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3OCwgNzMsIDc4LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA4OSwgMTI4LCAKKyAgICA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAxMjgsIDc4LCA3MywgNzgsIAorICAgIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OCwgCisgICAgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgNjgsIDY1LCAxNzgsIDc4LCAKKyAgICA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIAorICAgIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgMTI4LCA3OCwgNzMsIDcyLCA4MywgNzIsIDg2LCA2NSwgCisgICAgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCAKKyAgICA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzgsIAorICAgIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgCisgICAgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKKyAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc4LCA3MywgNjksIAorICAgIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIDczLCA2NiwgMTI4LCA3OCwgNzMsIAorICAgIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDcyLCA3NCwgNjUsIDEyOCwgNzgsIAorICAgIDcyLCAxMjgsIDc4LCA3MSwgODksIDY5LCAxMjgsIDc4LCA3MSwgODYsIDY5LCAxMjgsIDc4LCA3MSwgODUsIDg1LCAxMjgsIAorICAgIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDEyOCwgCisgICAgNzgsIDcxLCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3OSwgODgsIAorICAgIDEyOCwgNzgsIDcxLCA3OSwgODUsIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgNzgsIDcxLCAyMDcsIDc4LCA3MSwgCisgICAgNzUsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAorICAgIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgCisgICAgMjAxLCA3OCwgNzEsIDc1LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCAKKyAgICA3NSwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIAorICAgIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIAorICAgIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgCisgICAgNjUsIDEyOCwgNzgsIDcxLCA3MSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIAorICAgIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA3NywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgODUsIAorICAgIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAyMDYsIDc4LCA3MSwgNzEsIDg1LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3MywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDcxLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMjEzLCA3OCwgNzEsIDcxLCA2OSwgNzgsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgCisgICAgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODUsIDgyLCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIAorICAgIDc2LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIAorICAgIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDcxLCA2NSwgODEsIDEyOCwgNzgsIDcxLCA2NSwgODAsIDEyOCwgNzgsIDcxLCA2NSwgCisgICAgNzgsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCA3OCwgNzEsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCAKKyAgICA3MiwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIDc4LCA3MCwgMTI4LCA3OCwgNjksIDg4LCAKKyAgICAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgODMsIDgwLCA2NSwgODAsIDY5LCA4MiwgMTI4LCA3OCwgNjksIAorICAgIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCAxMjgsIDc4LCA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgCisgICAgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg0LCAxMjgsIDc4LCA2OSwgMjEyLCA3OCwgNjksIDgzLCAKKyAgICA4NCwgNjksIDE5NiwgNzgsIDY5LCA4MSwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY5LCA4MCwgODQsIDg1LCA3OCwgNjksIAorICAgIDEyOCwgNzgsIDY5LCA4MCwgMTI4LCA3OCwgNjksIDc5LCAxMjgsIDc4LCA2OSwgMjA3LCA3OCwgNjksIDc4LCA2NSwgNzgsIAorICAgIDc5LCAxMjgsIDc4LCA2OSwgNzgsIDEyOCwgNzgsIDY5LCA3NiwgMTI4LCA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIAorICAgIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2NywgCisgICAgNzUsIDg0LCA3MywgNjksIDEyOCwgNzgsIDY5LCA2NiwgNjksIDc4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDc4LCAKKyAgICA2OCwgODUsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc4LCA2OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjgsIAorICAgIDg1LCA4MiwgMTI4LCA3OCwgNjgsIDg1LCA4MCwgMTI4LCA3OCwgNjgsIDg1LCA3OCwgMTI4LCA3OCwgNjgsIDIxMywgNzgsIAorICAgIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgCisgICAgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzgsIDY4LCA3OSwgNzcsIDY2LCA4NSwgMTI4LCA3OCwgNjgsIDc5LCAKKyAgICA3NiwgMTk3LCA3OCwgNjgsIDczLCA4OCwgMTI4LCA3OCwgNjgsIDczLCA4NCwgMTI4LCA3OCwgNjgsIDczLCA4MSwgMTI4LCAKKyAgICA3OCwgNjgsIDczLCA4MCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY4LCA3MywgNjksIDEyOCwgNzgsIAorICAgIDY4LCA3MywgNjgsIDY1LCAxMjgsIDc4LCA2OCwgNzMsIDY1LCA4MSwgMTI4LCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3OCwgCisgICAgNjgsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA2NSwgNjksIDgyLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIDY4LCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCAKKyAgICA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCA3NywgMTI4LCA3OCwgNjgsIDY1LCA2NSwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA2OCwgCisgICAgNjUsIDY1LCAxMjgsIDc4LCA2OCwgNjUsIDE5MywgNzgsIDY2LCA4OSwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODQsIDEyOCwgCisgICAgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIDc4LCAKKyAgICA2NiwgODksIDEyOCwgNzgsIDY2LCA4NSwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODQsIDEyOCwgNzgsIDY2LCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAxMjgsIDc4LCA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDEyOCwgNzgsIAorICAgIDY2LCA3OSwgODgsIDEyOCwgNzgsIDY2LCA3OSwgODQsIDEyOCwgNzgsIDY2LCA3OSwgODAsIDEyOCwgNzgsIDY2LCA3OSwgCisgICAgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCA3OCwgCisgICAgNjYsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY2LCA3MywgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCAxMjgsIDc4LCAKKyAgICA2NiwgNzMsIDEyOCwgNzgsIDY2LCA3MiwgMTI4LCA3OCwgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCAKKyAgICA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDY1LCAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAorICAgIDc4LCA2NSwgODksIDEyOCwgNzgsIDY1LCA4OCwgNzMsIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgCisgICAgODQsIDcyLCA4MywgMTI4LCA3OCwgNjUsIDg1LCA2OCwgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCAKKyAgICA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIAorICAgIDcyLCA3MywgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc4LCA2NSwgCisgICAgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzgsIDY1LCAKKyAgICA4MiwgMTI4LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCA2NSwgNzksIDIxMSwgNzgsIDY1LCA3OCwgODMsIDY1LCA3OCwgNjUsIAorICAgIDgxLCAxMjgsIDc4LCA2NSwgNzgsIDcxLCA3NywgNzksIDc4LCA4NCwgNzIsIDc5LCAxMjgsIDc4LCA2NSwgNzgsIDY4LCAKKyAgICAxMjgsIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgNzcsIDY5LCAxMjgsIDc4LCA2NSwgNzcsIDE5NywgNzgsIDY1LCAKKyAgICA3NywgNTAsIDEyOCwgNzgsIDY1LCA3NywgMTI4LCA3OCwgNjUsIDc1LCAxMjgsIDc4LCA2NSwgNzMsIDgyLCAxOTMsIDc4LCAKKyAgICA2NSwgNzMsIDIwNCwgNzgsIDY1LCA3MSwgODIsIDIwMSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIAorICAgIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2OSwgMTI4LCAKKyAgICA3OCwgNjUsIDY2LCA3NiwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIAorICAgIDY1LCA2NSwgNzUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCA2NSwgCisgICAgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA2NSwgNDUsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDUwLCAxMjgsIDc4LCA0OCwgCisgICAgNTIsIDQ5LCAxMjgsIDc4LCA0OCwgNTIsIDQ4LCAxMjgsIDc4LCA0OCwgNTEsIDU3LCAxMjgsIDc4LCA0OCwgNTEsIDU2LCAKKyAgICAxMjgsIDc4LCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgMTI4LCA3OCwgNDgsIDUxLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIAorICAgIDc4LCA0OCwgNTEsIDUyLCAxMjgsIDc4LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgMTI4LCA3OCwgCisgICAgNDgsIDUxLCA1MCwgMTI4LCA3OCwgNDgsIDUxLCA0OSwgMTI4LCA3OCwgNDgsIDUxLCA0OCwgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA1NywgMTI4LCA3OCwgNDgsIDUwLCA1NiwgMTI4LCA3OCwgNDgsIDUwLCA1NSwgMTI4LCA3OCwgNDgsIDUwLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDEyOCwgNzgsIDQ4LCA1MCwgNTIsIDEyOCwgNzgsIAorICAgIDQ4LCA1MCwgNTEsIDEyOCwgNzgsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNzgsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDY2LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAKKyAgICA2NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3OCwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNDgsIDQ4LCA1NywgCisgICAgMTI4LCA3OCwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgCisgICAgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNDgsIDQ4LCAKKyAgICA1MCwgMTI4LCA3OCwgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzgsIDQ1LCA2NSwgODIsIAorICAgIDIxNywgNzcsIDg5LCA4OCwgMTI4LCA3NywgODksIDg0LCAxMjgsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIAorICAgIDc3LCA4OSwgODAsIDEyOCwgNzcsIDg5LCA2NSwgMTI4LCA3NywgODksIDE5MywgNzcsIDg5LCAxMjgsIDc3LCAyMTcsIDc3LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc3LCA4NywgNzksIDEyOCwgNzcsIDg3LCA3MywgNzMsIDEyOCwgNzcsIDg3LCA3MywgMTI4LCAKKyAgICA3NywgODcsIDY5LCA2OSwgMTI4LCA3NywgODcsIDY5LCAxMjgsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NywgNjUsIAorICAgIDEyOCwgNzcsIDg3LCAxMjgsIDc3LCAyMTUsIDc3LCA4NiwgODMsIDEyOCwgNzcsIDg2LCA3OSwgODAsIDEyOCwgNzcsIDg2LCAKKyAgICA3MywgMTI4LCA3NywgODYsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNzEsIDY1LCA3NywgMTI4LCA3NywgODYsIDEyOCwgNzcsIAorICAgIDIxNCwgNzcsIDg1LCA4OCwgMTI4LCA3NywgODUsIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgCisgICAgNzcsIDg1LCA4NSwgODIsIDY4LCA3MiwgNjUsIDc0LCAxOTMsIDc3LCA4NSwgODUsIDEyOCwgNzcsIDg1LCA4NCwgMTI4LCAKKyAgICA3NywgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgNzIsIDgyLCA3OSwgNzksIAorICAgIDc3LCAxMjgsIDc3LCA4NSwgODMsIDcyLCA1MSwgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgCisgICAgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgCisgICAgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDY1LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCAKKyAgICA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIDY1LCA3NywgMTI4LCA3NywgODUsIDgwLCAxMjgsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDc3LCA4NSwgNzksIDc3LCA2NSwgCisgICAgNjksIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCAKKyAgICA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIAorICAgIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgCisgICAgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIAorICAgIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCA3MywgCisgICAgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAKKyAgICAxOTksIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCAKKyAgICA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNDUsIAorICAgIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgNjUsIDEyOCwgNzcsIAorICAgIDc5LCA4OSwgNjUsIDczLCAxMjgsIDc3LCA3OSwgODgsIDEyOCwgNzcsIDc5LCA4NiwgNzMsIDE5NywgNzcsIDc5LCA4NiwgCisgICAgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAxMjgsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCA3OSwgODUsIDgzLCAKKyAgICA2OSwgMTI4LCA3NywgNzksIDg1LCA4MywgMTk3LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDgzLCAxMjgsIAorICAgIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgMjA2LCA3NywgCisgICAgNzksIDg1LCA3OCwgMjEyLCA3NywgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDE5NiwgNzcsIDc5LCAKKyAgICA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIDg0LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA4NSwgODUsIDc3LCAxMjgsIAorICAgIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCAKKyAgICA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIDc3LCA3OSwgNzksIAorICAgIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMjA2LCA3NywgCisgICAgNzksIDc5LCA3NywgODAsIDg1LCA4MSwgMTI4LCA3NywgNzksIDc5LCA3NywgNjksIDg1LCA4NCwgMTI4LCA3NywgNzksIDc5LCAKKyAgICAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MywgNjksIDY5LCA3OCwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzIsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgODQsIDIwMCwgNzcsIDc5LCA3OCwgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDgzLCA4NCwgCisgICAgNjUsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgyLCAKKyAgICA2NSwgNzMsIDc2LCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgNzksIDc4LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NywgNzksIDc4LCA3OSwgCisgICAgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDc5LCAKKyAgICA3OCwgNzUsIDY5LCA4OSwgMTI4LCA3NywgNzksIDc4LCA3NSwgNjksIDIxNywgNzcsIDc5LCA3OCwgNzMsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgNzcsIDc5LCA3OCwgNjksIDIxNywgNzcsIDc5LCA3OCwgCisgICAgMTI4LCA3NywgNzksIDIwNiwgNzcsIDc5LCA3NiwgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCA3NywgCisgICAgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCA2OCwgNjksIDgzLCA4NCwgODksIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKKyAgICA4MywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDEyOCwgNzcsIDc5LCA2NiwgNzMsIAorICAgIDc2LCAxOTcsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIDIwNywgNzcsIDc4LCA4OSwgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIAorICAgIDEyOCwgNzcsIDc3LCA4MywgODAsIDEyOCwgNzcsIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgNzcsIDc2LCAKKyAgICAxMjgsIDc3LCA3NSwgODAsIDY1LCA4MiwgNjUsIDIwOSwgNzcsIDczLCA4OCwgMTI4LCA3NywgNzMsIDg0LCAxMjgsIDc3LCAKKyAgICA3MywgODMsIDgyLCA2NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDc3LCA3MywgODIsIAorICAgIDczLCAxMjgsIDc3LCA3MywgODIsIDY5LCA2OCwgMTI4LCA3NywgNzMsIDgwLCAxMjgsIDc3LCA3MywgNzgsIDg5LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDg1LCA4MywgNDUsIDc5LCA4MiwgNDUsIDgwLCA3NiwgODUsIDIxMSwgNzcsIDczLCA3OCwgODUsIDgzLCAKKyAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCA4MywgMTI4LCA3NywgCisgICAgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIAorICAgIDc2LCA3NSwgMjE3LCA3NywgNzMsIDc2LCAxMjgsIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgNzMsIDY5LCAKKyAgICA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgCisgICAgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3NywgCisgICAgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCAKKyAgICA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA3NywgNzMsIAorICAgIDE5NiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNjcsIDc5LCA4MCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDc5LCA4MCwgCisgICAgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDIwNywgNzcsIDczLCA2NywgMjEwLCA3NywgNzIsIDkwLCAKKyAgICAxMjgsIDc3LCA3MiwgNjUsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAKKyAgICAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCAKKyAgICA3NywgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIAorICAgIDc3LCA3MSwgODUsIDEyOCwgNzcsIDcxLCA3OSwgODgsIDEyOCwgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgCisgICAgODAsIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgNzEsIDIwNywgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgCisgICAgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNjksIDg4LCAxMjgsIDc3LCA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgCisgICAgNzcsIDcxLCA2NiwgODUsIDEyOCwgNzcsIDcxLCA2NiwgNzksIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3MCwgODUsIDc3LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA4NSwgNzgsIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNjksIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgCisgICAgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCA4MSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCAxMjgsIDc3LCAKKyAgICA3MSwgNjUsIDg4LCAxMjgsIDc3LCA3MSwgNjUsIDg0LCAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIAorICAgIDEyOCwgNzcsIDcxLCAxMjgsIDc3LCA3MCwgNzksIDc4LCAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCAKKyAgICA3NywgNzAsIDczLCA4OSwgNjUsIDgxLCAxMjgsIDc3LCA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgNzcsIDcwLCA2OSwgODUsIDgxLCAxMjgsIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgCisgICAgNjUsIDEyOCwgNzcsIDY5LCA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgCisgICAgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCAKKyAgICA2OSwgODUsIDc4LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA3NywgNjksIDg0LCA4MiwgNzMsIDY1LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCAKKyAgICA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIAorICAgIDY5LCA3MSwgMTI4LCA3NywgNjksIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgCisgICAgNjksIDc4LCA3MywgNjUsIDIwNiwgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY1LCAKKyAgICA3MSwgMTk3LCA3NywgNjksIDgzLCA3OSwgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCAKKyAgICA3NywgNjksIDgyLCA3OSwgNzMsIDg0LCA3MywgMTk1LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgODIsIAorICAgIDc1LCA3MiwgMTkzLCA3NywgNjksIDgyLCA3MywgNjgsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDc3LCA2OSwgODIsIDczLCAKKyAgICAxMjgsIDc3LCA2OSwgODIsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCA4OSwgMTI4LCA3NywgNjksIAorICAgIDgyLCA2NywgODUsIDgyLCAyMTcsIDc3LCA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgCisgICAgNjksIDc3LCA3OSwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIDc3LCAKKyAgICA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgNzIsIAorICAgIDEyOCwgNzcsIDY5LCA3NywgMTI4LCA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDY4LCA3MywgMTk1LCA3NywgNjksIAorICAgIDc2LCA3MywgNzUsIDEyOCwgNzcsIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAKKyAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgCisgICAgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCAKKyAgICA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIAorICAgIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDIxMiwgCisgICAgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDE5NiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDY5LCAKKyAgICA2NSwgODMsIDg1LCA4MiwgMTk3LCA3NywgNjgsIDg1LCAyMDYsIDc3LCAxOTYsIDc3LCA2NywgNzIsIDIxMywgNzcsIDY3LCAKKyAgICA3MiwgNjUsIDIwNiwgNzcsIDE5NSwgNzcsIDY2LCA4NSwgNzksIDgxLCAxMjgsIDc3LCA2NiwgODUsIDc5LCAxMjgsIDc3LCAKKyAgICA2NiwgODUsIDY5LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCAxMjgsIAorICAgIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgODQsIDEyOCwgNzcsIDY2LCA3MywgCisgICAgMjEyLCA3NywgNjYsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA3MywgMTI4LCA3NywgNjYsIDY5LCAKKyAgICA4NSwgODgsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgNzcsIDEyOCwgNzcsIAorICAgIDY2LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgNzUsIDY5LCA2OSwgCisgICAgODQsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA4MSwgMTI4LCA3NywgCisgICAgNjYsIDY1LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NiwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAKKyAgICA3NSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNjUsIDE5MywgNzcsIDY2LCAxOTMsIDc3LCAKKyAgICA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgMTI4LCA3NywgMTk0LCA3NywgCisgICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgNjUsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgCisgICAgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCAKKyAgICA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODMsIDcyLCA3MCwgNjUsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgCisgICAgNjcsIDg1LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA2NSwgODIsIDg5LCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgODQsIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgNzgsIDE5OSwgCisgICAgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCAKKyAgICA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCAKKyAgICA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIAorICAgIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgCisgICAgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgCisgICAgODMsIDg5LCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIAorICAgIDY1LCA3OCwgNjgsIDY1LCA3MywgNzYsIDczLCA3OCwgMTk5LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCAxOTUsIDc3LCA2NSwgCisgICAgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCAKKyAgICA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgNjksIDgyLCA3MywgMTI4LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIAorICAgIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgCisgICAgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgMTkzLCA3NywgNjUsIDczLCA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCAKKyAgICA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIAorICAgIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgCisgICAgMTI4LCA3NywgNjUsIDczLCA3NiwgNjYsIDc5LCAyMTYsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCAKKyAgICA2NSwgNzMsIDY4LCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgMTI4LCA3NywgNjUsIDcyLCA3NCwgNzksIDc4LCAxOTksIAorICAgIDc3LCA2NSwgNzIsIDcyLCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgCisgICAgNzIsIDY1LCA4MCwgNjUsIDc1LCA3MiwgMTI4LCA3NywgNjUsIDcyLCA2NSwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCAKKyAgICA3NywgNjUsIDcyLCAxMjgsIDc3LCA2NSwgNzEsIDc4LCA3MywgNzAsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA2OSwgODMsIAorICAgIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDc0LCA2OSwgODQsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzcsIDg2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3NSwgODAsIDY5LCA3OCwgMTI4LCAKKyAgICA3NywgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNzEsIDY2LCA3MywgCisgICAgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY1LCAKKyAgICA2OSwgNzYsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NSwgNjksIDg1LCA4MCwgMTI4LCA3NywgNjUsIDY4LCA4OSwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA2OCwgODUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAorICAgIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgCisgICAgNjcsIDgyLCA3OSwgMjA2LCA3NywgNjUsIDY3LCA3MiwgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjUsIDY1LCA4OSwgODksIDY1LCAKKyAgICA2NSwgMTI4LCA3NywgNjUsIDY1LCA3MywgMTI4LCA3NywgNjUsIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MiwgNTIsIDEyOCwgNzcsIDQ4LCA1MiwgNTEsIDEyOCwgNzcsIDQ4LCA1MiwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNDksIAorICAgIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNTIsIDQ4LCAxMjgsIDc3LCA0OCwgNTEsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTEsIDU2LCAxMjgsIDc3LCA0OCwgNTEsIDU1LCAxMjgsIDc3LCA0OCwgNTEsIDU0LCAxMjgsIDc3LCA0OCwgCisgICAgNTEsIDUzLCAxMjgsIDc3LCA0OCwgNTEsIDUyLCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NiwgMTI4LCA3NywgNDgsIDUxLCAKKyAgICA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDEyOCwgNzcsIDQ4LCA1MSwgNTAsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIAorICAgIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCAxMjgsIDc3LCA0OCwgNTEsIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1NiwgMTI4LCA3NywgNDgsIDUwLCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDUwLCA1NCwgMTI4LCA3NywgNDgsIDUwLCA1MywgMTI4LCA3NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MCwgNTIsIDEyOCwgNzcsIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIAorICAgIDUwLCAxMjgsIDc3LCA0OCwgNTAsIDQ5LCAxMjgsIDc3LCA0OCwgNTAsIDQ4LCAxMjgsIDc3LCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNDksIDU2LCAxMjgsIDc3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUzLCAxMjgsIDc3LCA0OCwgNDksIDUyLCAxMjgsIDc3LCA0OCwgNDksIDUxLCAxMjgsIDc3LCA0OCwgNDksIAorICAgIDUwLCA3MiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcwLCAxMjgsIDc3LCA0OCwgCisgICAgNDksIDUwLCA2OSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjgsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY3LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUwLCA2NiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNDksIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCAxMjgsIDc3LCA0OCwgCisgICAgNDgsIDU3LCAxMjgsIDc3LCA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgNDgsIDU1LCAxMjgsIDc3LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc3LCA0OCwgNDgsIDUzLCAxMjgsIDc3LCA0OCwgNDgsIDUyLCAxMjgsIDc3LCA0OCwgNDgsIDUxLCA2NSwgMTI4LCAKKyAgICA3NywgNDgsIDQ4LCA1MSwgMTI4LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjYsIDEyOCwgNzcsIAorICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCAxMjgsIDc2LCAyMTgsIDc2LCA4OSwgODksIDEyOCwgNzYsIAorICAgIDg5LCA4OCwgMTI4LCA3NiwgODksIDg0LCAxMjgsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDc2LCA4OSwgODIsIDEyOCwgNzYsIAorICAgIDg5LCA4MCwgMTI4LCA3NiwgODksIDY4LCA3MywgNjUsIDIwNiwgNzYsIDg5LCA2NywgNzMsIDY1LCAyMDYsIDc2LCA4OCwgCisgICAgMTI4LCA3NiwgODcsIDc5LCA3OSwgMTI4LCA3NiwgODcsIDc5LCAxMjgsIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgCisgICAgNzMsIDEyOCwgNzYsIDg3LCA2OSwgMTI4LCA3NiwgODcsIDY1LCA2NSwgMTI4LCA3NiwgODcsIDY1LCAxMjgsIDc2LCA4NSwgCisgICAgODgsIDEyOCwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgODUsIDg0LCAxMjgsIDc2LCA4NSwgODIsIDg4LCAxMjgsIDc2LCA4NSwgCisgICAgODAsIDEyOCwgNzYsIDg1LCA3OSwgODgsIDEyOCwgNzYsIDg1LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA3OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA3OSwgMTI4LCA3NiwgODUsIDc4LCA3MSwgODMsIDczLCAxMjgsIDc2LCA4NSwgNzgsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgODUsIDIwNSwgNzYsIDg1LCA3NiwgMTI4LCA3NiwgODUsIDczLCA4MywgMTI4LCA3NiwgODUsIDcyLCA4NSwgODIsIAorICAgIDEyOCwgNzYsIDg1LCA3MiwgMTI4LCA3NiwgODUsIDcxLCA3MSwgNjUsIDcxLCA2OSwgMTI4LCA3NiwgODUsIDcxLCA2NSwgCisgICAgNzYsIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDIwNCwgNzYsIDg1LCA2OSwgMTI4LCA3NiwgODUsIDY1LCA2OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA1MSwgMTI4LCA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCA3NiwgODIsIDc5LCAxMjgsIDc2LCA4MiwgCisgICAgNzcsIDEyOCwgNzYsIDgyLCA3MywgMTI4LCA3NiwgODIsIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDE5NywgNzYsIDc5LCA4OCwgMTI4LCA3NiwgNzksIDg3LCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDc2LCA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODYsIDE5NywgNzYsIAorICAgIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc2LCA3OSwgODUsIDY4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA3NiwgCisgICAgNzksIDg1LCA2OCwgNzYsIDIxNywgNzYsIDc5LCA4NCwgODUsIDgzLCAxMjgsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDc5LCAKKyAgICA4MiwgODIsIDg5LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgxLCAxMjgsIAorICAgIDc2LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA3OSwgODAsIDY5LCAxOTYsIDc2LCA3OSwgCisgICAgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDIwOCwgNzYsIDc5LCA3OSwgNzgsIDEyOCwgNzYsIDc5LCA3OSwgMjAzLCA3NiwgCisgICAgNzksIDc5LCAxMjgsIDc2LCA3OSwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCAKKyAgICA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDg5LCA4MiwgCisgICAgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgCisgICAgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAorICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKKyAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCA3OSwgNzcsIDc3LCA2NSwgNjksIDEyOCwgNzYsIDc5LCA3NywgCisgICAgMTI4LCA3NiwgNzksIDIwNSwgNzYsIDc5LCA3NiwgNzYsIDczLCA4MCwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzYsIDc2LCAKKyAgICAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCA3MSwgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3MSwgMTI4LCA3NiwgNzksIDY4LCA2OSwgODMsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgNjcsIDc5LCA3NywgNzksIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc1LCA3MywgNzgsIAorICAgIDcxLCA0NSwgODMsIDcyLCA3MywgNzAsIDIxMiwgNzYsIDc5LCA2NywgMjAzLCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA4NiwgCisgICAgNjksIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDc5LCA2NSwgMTI4LCA3NiwgNzgsIDEyOCwgCisgICAgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCAKKyAgICA3NiwgNzYsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA3MywgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNjksIDY5LCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNzMsIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNjUsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDEyOCwgNzYsIDc0LCA4NSwgNjgsIAorICAgIDczLCA3NCwgNjksIDEyOCwgNzYsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDEyOCwgNzYsIDczLCA4OCwgMTI4LCA3NiwgNzMsIAorICAgIDg3LCA3OCwgMTI4LCA3NiwgNzMsIDg2LCA4MiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNzYsIDE5NywgNzYsIDczLCA4NCwgCisgICAgODQsIDY5LCAyMTAsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCA3MywgODQsIDEyOCwgNzYsIDczLCA4MywgMjEzLCA3NiwgCisgICAgNzMsIDgyLCAxOTMsIDc2LCA3MywgODEsIDg1LCA3MywgMTk2LCA3NiwgNzMsIDgxLCAxMjgsIDc2LCA3MywgODAsIDgzLCAKKyAgICA4NCwgNzMsIDY3LCA3NSwgMTI4LCA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIAorICAgIDczLCA3OCwgNzEsIDgzLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgCisgICAgNzYsIDczLCA3OCwgNjksIDQ1LCA1NywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKKyAgICA0NSwgNTEsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIAorICAgIDc2LCA3MywgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDE5NiwgNzYsIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgNzcsIDY5LCAxMjgsIDc2LCA3MywgNzcsIDY2LCAyMTMsIAorICAgIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgNzYsIDczLCA4NCwgNzIsIDEyOCwgNzYsIDczLCA3NiwgMTI4LCA3NiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIAorICAgIDY5LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNzMsIDcwLCA2OSwgMTI4LCA3NiwgNzMsIDY5LCA4OCwgCisgICAgMTI4LCA3NiwgNzMsIDY5LCA4NCwgMTI4LCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3NiwgNzMsIDY5LCA2OSwgMTI4LCA3NiwgCisgICAgNzMsIDY5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIDczLCA2NiwgODIsIDY1LCAxMjgsIDc2LCA3MywgNjYsIDY5LCAKKyAgICA4MiwgODQsIDg5LCAxMjgsIDc2LCA3MywgNjUsIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA3NiwgNzIsIDczLCA3MywgCisgICAgMTI4LCA3NiwgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDcyLCAKKyAgICA2NSwgNjUsIDEyOCwgNzYsIDcyLCAxMjgsIDc2LCA2OSwgOTAsIDcyLCAxMjgsIDc2LCA2OSwgODgsIDEyOCwgNzYsIDY5LCAKKyAgICA4NiwgNjksIDIwNCwgNzYsIDY5LCA4NSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgNjksIAorICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc2LCA2OSwgODUsIDEyOCwgNzYsIDY5LCAyMTMsIDc2LCA2OSwgODQsIDg0LCA2OSwgCisgICAgODIsIDgzLCAxMjgsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDEyOCwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgMjEwLCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIAorICAgIDcyLCA2NSwgMjA2LCA3NiwgNjksIDgwLCAxMjgsIDc2LCA2OSwgNzksIDgwLCA2NSwgODIsIDY4LCAxMjgsIDc2LCA2OSwgCisgICAgNzksIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NiwgNjksIDc4LCA3MywgODMsIAorICAgIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAKKyAgICAyMDAsIDc2LCA2OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgCisgICAgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgNzcsIDc3LCA2NSwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgCisgICAgNzYsIDY5LCA3MSwgODMsIDEyOCwgNzYsIDY5LCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAKKyAgICAyMTEsIDc2LCA2OSwgNzEsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgNjksIAorICAgIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCAKKyAgICA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzIsIAorICAgIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIAorICAgIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA3MCwgODQsIDEyOCwgCisgICAgNzYsIDY5LCA2OSwgODIsIDY1LCA2OSwgODcsIDY1LCAxMjgsIDc2LCA2OSwgNjksIDc1LCAxMjgsIDc2LCA2OSwgNjksIDY5LCAKKyAgICA2OSwgMTI4LCA3NiwgNjksIDY4LCA3MSwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAorICAgIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNjUsIDE5OCwgNzYsIDY5LCA2NSwgNjgsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDY1LCA2OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDE5NiwgNzYsIDY4LCA2NSwgNzgsIDEyOCwgNzYsIDY4LCAKKyAgICA1MCwgMTI4LCA3NiwgNjcsIDIwMSwgNzYsIDY3LCAxOTcsIDc2LCA2NSwgOTAsIDIxNywgNzYsIDY1LCA4OSwgNjUsIDc4LCAKKyAgICA3OCwgNjUsIDEyOCwgNzYsIDY1LCA4OCwgMTI4LCA3NiwgNjUsIDg3LCAxMjgsIDc2LCA2NSwgMjE1LCA3NiwgNjUsIDg1LCAKKyAgICA3NiwgNjUsIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA2NSwgODQsIDczLCA3NSwgMTI4LCA3NiwgNjUsIDg0LCA2OSwgODIsIDY1LCAyMDQsIDc2LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAKKyAgICAyMTAsIDc2LCA2NSwgODIsIDcxLCA2OSwgMTI4LCA3NiwgNjUsIDgyLCA3MSwgMTk3LCA3NiwgNjUsIDgxLCAxMjgsIDc2LCAKKyAgICA2NSwgODAsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCAxMjgsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIAorICAgIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAxOTcsIDc2LCA2NSwgNzgsIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc3LCA2OSwgCisgICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCAKKyAgICA2OSwgMTI4LCA3NiwgNjUsIDc3LCAxOTcsIDc2LCA2NSwgNzcsIDY4LCA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCAKKyAgICA3NiwgNjUsIDc3LCA2NiwgNjgsIDE5MywgNzYsIDY1LCA3NywgNjUsIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIAorICAgIDc2LCA2NSwgMjA0LCA3NiwgNjUsIDc1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgCisgICAgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzYsIDY1LCA3MiwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIAorICAgIDcxLCA2NSwgODIsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDIxMCwgNzYsIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgCisgICAgNzEsIDY1LCAxOTQsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2OCwgMjE3LCA3NiwgCisgICAgNjUsIDY3LCA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCA3MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA3NiwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCA2NSwgCisgICAgNzgsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIDY1LCAKKyAgICA2NSwgNzcsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc2LCA0OCwgNDgsIAorICAgIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgCisgICAgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIDg5LCAKKyAgICA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgNjUsIAorICAgIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgNjUsIDEyOCwgNzUsIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA3MywgCisgICAgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAKKyAgICAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCAKKyAgICA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIAorICAgIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIAorICAgIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIDc1LCA4NywgNjUsIDY5LCA4NCwgMTI4LCA3NSwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIAorICAgIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgCisgICAgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgODUsIDgyLCAKKyAgICA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCA3NSwgODUsIDgyLCAxMjgsIDc1LCA4NSwgMjEwLCAKKyAgICA3NSwgODUsIDgxLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgNzksIAorICAgIDIwOCwgNzUsIDg1LCA3OSwgNzcsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIAorICAgIDc4LCA2OCwgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgCisgICAgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNTIsIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgCisgICAgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIDgzLCA4NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgCisgICAgODUsIDEyOCwgNzUsIDgzLCA4MywgNzksIDc5LCAxMjgsIDc1LCA4MywgODMsIDc5LCAxMjgsIDc1LCA4MywgODMsIDczLCAKKyAgICA3MywgMTI4LCA3NSwgODMsIDgzLCA3MywgMTI4LCA3NSwgODMsIDgzLCA2OSwgNjksIDEyOCwgNzUsIDgzLCA4MywgNjksIAorICAgIDEyOCwgNzUsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDY1LCA3MywgMTI4LCA3NSwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDEyOCwgNzUsIDgzLCA4MywgMTI4LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgCisgICAgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIAorICAgIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIAorICAgIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDgwLCA3OSwgODEsIDEyOCwgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIAorICAgIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgCisgICAgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDgyLCA2NSwgODEsIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgCisgICAgNzUsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIAorICAgIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgCisgICAgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIAorICAgIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc3LCAKKyAgICAyMDEsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIAorICAgIDc5LCA3NywgNjYsIDIxMywgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgMTI4LCA3NSwgNzksIDIwMywgNzUsIAorICAgIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIDcxLCA3MiwgNzksIDc3LCAxMjgsIAorICAgIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDc2LCA2NSwgMTI4LCA3NSwgNzksIDY1LCAxMjgsIDc1LCA3OCwgCisgICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc1LCA3OCwgNzMsIDcwLCA2OSwgMTI4LCAKKyAgICA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCA3MywgODQsIDc5LCA3OCwgMTI4LCAKKyAgICA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgMTkzLCA3NSwgNzYsIDY1LCAxMjgsIAorICAgIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIDc1LCA3MywgMTI4LCA3NSwgNzUsIAorICAgIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIDc1LCAxMjgsIDc1LCA3NCwgNjksIAorICAgIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzUsIDczLCA4OSwgCisgICAgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgCisgICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzUsIDczLCAKKyAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgODMsIDczLCA3OCwgMTk5LCA3NSwgCisgICAgNzMsIDgzLCA4MywgMTI4LCA3NSwgNzMsIDgzLCAyMTEsIDc1LCA3MywgODMsIDczLCA3NywgNTMsIDEyOCwgNzUsIDczLCAKKyAgICA4MywgNzMsIDc3LCAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIDY1LCA3NiwgMTI4LCA3NSwgNzMsIAorICAgIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCAKKyAgICA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgCisgICAgMTI4LCA3NSwgNzMsIDgyLCA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODEsIDEyOCwgNzUsIDczLCA4MCwgMTI4LCA3NSwgCisgICAgNzMsIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3OCwgNjgsIDY5LCA4MiwgNzEsIDY1LCAKKyAgICA4MiwgODQsIDY5LCA3OCwgMTI4LCA3NSwgNzMsIDc3LCA3OSwgNzgsIDc5LCAxMjgsIDc1LCA3MywgNzMsIDEyOCwgNzUsIAorICAgIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCA3NSwgNzMsIDY5LCA2OSwgCisgICAgNzcsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3MywgMTk2LCA3NSwgNzMsIDY3LCA3NSwgCisgICAgMTI4LCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MiwgODcsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDg1LCA2OSwgNzgsIDQ1LCAKKyAgICA3NiwgODUsIDE5NywgNzUsIDcyLCA4NSwgNjksIDIwNiwgNzUsIDcyLCA4NSwgNjgsIDY1LCA3NywgMTI4LCA3NSwgNzIsIAorICAgIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCA3OSwgMjEyLCA3NSwgNzIsIDc5LCA3OCwgCisgICAgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDEyOCwgNzUsIDcyLCAyMDcsIDc1LCA3MiwgCisgICAgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNzgsIDg5LCA2NSwgMTI4LCA3NSwgNzIsIDczLCAKKyAgICA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNzksIDEyOCwgNzUsIDcyLCA3MiwgNjUsIAorICAgIDEyOCwgNzUsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDc1LCA3MiwgNjksIDczLCAxMjgsIDc1LCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDc1LCA3MiwgNjksIDEyOCwgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCA3NSwgNzIsIDY1LCA4MiwgCisgICAgMTI4LCA3NSwgNzIsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAxOTMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc3LCA4NCwgMjAxLCA3NSwgNzIsIDY1LCA3NSwgNjUsIAorICAgIDgzLCA4MywgNzMsIDY1LCAyMDYsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAxMjgsIDc1LCA3MiwgCisgICAgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgODAsIDEyOCwgCisgICAgNzUsIDY5LCA4OSwgNjcsIDY1LCAyMDgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3NSwgNjksIDg4LCAKKyAgICAxMjgsIDc1LCA2OSwgODUsIDg5LCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIAorICAgIDgwLCAxMjgsIDc1LCA2OSwgODUsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgwLCA4NSwgODEsIDEyOCwgCisgICAgNzUsIDY5LCA4NSwgNzksIDIxMiwgNzUsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY5LCA4NSwgODQsIDc4LCAKKyAgICA2OCwgNjUsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDg0LCA3NywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDgyLCA3MywgMTI4LCA3NSwgNjksIDg0LCA4NCwgMjAxLCA3NSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDc1LCA2OSwgNzksIDg3LCAxMjgsIDc1LCAKKyAgICA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCAxOTMsIAorICAgIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDE5MywgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIDc1LCA2OSwgNzgsIDEyOCwgCisgICAgNzUsIDY5LCAyMDYsIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIDEyOCwgNzUsIDY5LCA3NywgODAsIDg1LCAyMDQsIDc1LCAKKyAgICA2OSwgNzcsIDgwLCA3NiwgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCA2OSwgNzcsIDgwLCA3MiwgODIsIAorICAgIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NiwgODYsIDczLCAKKyAgICAyMDYsIDc1LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgNjksIDcyLCAxMjgsIDc1LCAKKyAgICA2OSwgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCA2OSwgNjksIDgwLCA3MywgNzgsIAorICAgIDE5OSwgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIDc1LCA2NiwgMTI4LCA3NSwgNjUsIAorICAgIDkwLCA2NSwgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4OSwgNjUsIDIwMCwgCisgICAgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCA4OSwgNzUsIDY1LCAxMjgsIDc1LCAKKyAgICA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODUsIDEyOCwgNzUsIDY1LCA4NCwgNzksIAorICAgIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgODQsIDcyLCA2NSwgNzUsIDE5MywgCisgICAgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDE5MywgNzUsIDY1LCAKKyAgICA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgNzUsIDY1LCA4MywgCisgICAgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAyMDYsIDc1LCA2NSwgODMsIDgyLCAKKyAgICA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODMsIAorICAgIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgCisgICAgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCA4MiwgMjA3LCA3NSwgNjUsIDgyLCAKKyAgICA2OSwgMjA2LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDgyLCA2NSwgNzgsIDEyOCwgNzUsIAorICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKKyAgICA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgCisgICAgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIAorICAgIDg1LCA3OCwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDgwLCA4MCwgCisgICAgMTkzLCA3NSwgNjUsIDgwLCA3OSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgNzYsIDEyOCwgCisgICAgNzUsIDY1LCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgMTI4LCAKKyAgICA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NywgNTIsIDEyOCwgNzUsIAorICAgIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCA3NywgMTI4LCA3NSwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc1LCA2NSwgCisgICAgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDc1LCAxMjgsIDc1LCA2NSwgMjAzLCA3NSwgNjUsIDczLCA4NCwgNzIsIDIwMSwgCisgICAgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAyMDEsIDc1LCA2NSwgNzAsIDY1LCAKKyAgICAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgCisgICAgNzUsIDY1LCA2OCwgNTIsIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCA2OCwgMTc5LCA3NSwgNjUsIDY4LCAKKyAgICA1MCwgMTI4LCA3NSwgNjUsIDY4LCAxMjgsIDc1LCA2NSwgNjYsIDE5MywgNzUsIDY1LCA2NiwgMTI4LCA3NSwgNjUsIDY1LCAKKyAgICA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCAKKyAgICA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIDEyOCwgNzUsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIDQ4LCA0OCwgNTEsIDEyOCwgNzUsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgMTI4LCA3NCwgODUsIDg1LCAxMjgsIAorICAgIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIDEyOCwgNzQsIDg1LCA3OSwgODAsIAorICAgIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIDg1LCA3NiwgODksIDEyOCwgNzQsIAorICAgIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgODUsIDY4LCA3MSwgNjksIDEyOCwgCisgICAgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCA3NCwgNzksIDg5LCA3OSwgODUsIAorICAgIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDg2LCA2OSwgMTI4LCA3NCwgNzksIDIxMiwgNzQsIDc5LCA3OCwgNzEsIAorICAgIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDY5LCA2OCwgCisgICAgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgODksIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgNzQsIDc0LCA4NSwgODgsIDEyOCwgCisgICAgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDgyLCAxMjgsIDc0LCAKKyAgICA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIAorICAgIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDc5LCA4NCwgCisgICAgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgNzMsIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3NCwgNzQsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAxMjgsIDc0LCA3NCwgNzMsIAorICAgIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIDY1LCAxMjgsIDc0LCA3MywgNzYsIAorICAgIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgCisgICAgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAxMjgsIDc0LCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDc0LCA3MiwgNjUsIDc3LCAxMjgsIDc0LCA3MiwgNjUsIDY1LCAxMjgsIDc0LCA3MiwgNjUsIDEyOCwgNzQsIDY5LCAKKyAgICA4NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCA3NiwgNjksIDc3LCAxMjgsIDc0LCA2OSwgODIsIDY1LCAyMDYsIAorICAgIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgMTI4LCA3NCwgNjksIDIwMCwgNzQsIAorICAgIDY5LCA3MSwgNzksIDcxLCA2NSwgNzgsIDEyOCwgNzQsIDY5LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA2NSwgNzgsIDgzLCAKKyAgICAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCisgICAgMTI4LCA3NCwgNjUsIDg1LCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIDc4LCA2OSwgODMsIDE5NywgCisgICAgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCAKKyAgICA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCA3MywgMTI4LCA3NCwgNjUsIAorICAgIDcyLCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjcsIDc1LCA0NSwgNzksIDQ1LCA3NiwgNjUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA3OCwgMTI4LCA3NCwgNjUsIDY3LCAyMDMsIDc0LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCAKKyAgICA2OSwgMTk2LCAyMDIsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIAorICAgIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgMTkzLCA3MywgODksIDY5LCA3NSwgCisgICAgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDczLCA4NSwgMTI4LCA3MywgCisgICAgODQsIDIxMSwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA4NCwgNjksIDc3LCAxMjgsIDczLCAKKyAgICA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIAorICAgIDc5LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgODMsIDY5LCA3OCwgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgCisgICAgNjUsIDc1LCA3MywgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA3OSwgNzgsIAorICAgIDQ1LCA2NywgNzksIDgwLCA4MCwgNjksIDIxMCwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgCisgICAgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAKKyAgICAxOTMsIDczLCA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIAorICAgIDgzLCA3MywgNjYsIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA2OSwgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODQsIDgyLCA3OSwgNjgsIDg1LCAKKyAgICA2NywgNjksIDgyLCAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIAorICAgIDY1LCA2NiwgNzMsIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIAorICAgIDY3LCA4NCwgNzMsIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIAorICAgIDc5LCA2NywgNzUsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgCisgICAgODQsIDY5LCA4MiwgNzYsIDY1LCA2NywgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCAKKyAgICA4NCwgNjksIDgyLCA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIAorICAgIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAorICAgIDcxLCA4MiwgNjUsIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgCisgICAgNjksIDc4LCA4NCwgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCAKKyAgICA3MywgNzksIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIAorICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDczLCA3OCwgODAsIDg1LCAyMTIsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAKKyAgICAyMTAsIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDczLCAxMjgsIDczLCAKKyAgICA3OCwgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA3MSwgODcsIAorICAgIDY1LCA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDcwLCA3NiwgCisgICAgODUsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA3MywgNzgsIDcwLCAKKyAgICA3MywgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3OCwgNjgsIAorICAgIDczLCA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgCisgICAgNzMsIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCAKKyAgICA3MywgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIAorICAgIDc4LCA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgCisgICAgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIAorICAgIDE5NywgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAKKyAgICAxOTksIDczLCA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCAKKyAgICA3OCwgNDUsIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIAorICAgIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAKKyAgICAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3OCwgMTI4LCA3MywgNzcsIAorICAgIDczLCA4MywgNjksIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgCisgICAgNzcsIDczLCAyMDYsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCAKKyAgICA4NCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIAorICAgIDY4LCA3MywgNjUsIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDczLCA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIAorICAgIDc3LCA3NywgODUsIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDczLCA3NiwgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCAKKyAgICA3NCwgMTI4LCA3MywgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCAKKyAgICA3MywgNzEsIDcxLCA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKKyAgICA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKKyAgICA3MSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgCisgICAgODUsIDgwLCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCAKKyAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgCisgICAgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIAorICAgIDY3LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgCisgICAgMTI4LCA3MywgNjgsIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTcsIDQ4LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU2LCA2OCwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTUsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU1LCA1NCwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA0OSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA2OSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUzLCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUwLCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MCwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUzLCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDUxLCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1MSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDY4LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUyLCA2OSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1MCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjcsIDcyLCA3OSwgODUsIAorICAgIDEyOCwgNzMsIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgODMsIDEyOCwgCisgICAgNzMsIDY3LCA3MiwgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCA2NywgNDUsIAorICAgIDg5LCA4MiwgMTI4LCA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgCisgICAgNzMsIDQ4LCA0OSwgNTMsIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgNzMsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCA0OCwgNDksIAorICAgIDQ4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgNzMsIDQ4LCA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgNzMsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAxMjgsIDczLCAKKyAgICA0OCwgNDgsIDUxLCAxMjgsIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCA0NSwgODksIAorICAgIDg1LCAxMjgsIDczLCA0NSwgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgCisgICAgMTI4LCA3MywgNDUsIDg5LCA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDg5LCAKKyAgICA2NSwgMTI4LCA3MywgNDUsIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCAKKyAgICA3MywgNDUsIDY2LCA2OSwgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA0NSwgNjUsIAorICAgIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAxMjgsIAorICAgIDcyLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDg0LCAxMjgsIAorICAgIDcyLCA5MCwgNzEsIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCA3MiwgODksIDgwLCA3OSwgCisgICAgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzIsIDg5LCA4MCwgCisgICAgNzIsIDY5LCA3OCwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgNzEsIDEyOCwgNzIsIDg4LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIAorICAgIDg4LCA4NSwgNzksIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA3OSwgCisgICAgODAsIDEyOCwgNzIsIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgODgsIDczLCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA4OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAxMjgsIDcyLCA4OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDg4LCA2NSwgODQsIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCA3MiwgODcsIDg1LCAxMjgsIAorICAgIDcyLCA4NywgNjUsIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcyLCA4NSwgCisgICAgODIsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCAKKyAgICA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIAorICAgIDcyLCA4NSwgNzcsIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgCisgICAgNzIsIDg1LCA2NiwgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCAKKyAgICA2NSwgNjgsIDY4LCA3OSwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIAorICAgIDc4LCA3MywgMTkzLCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIAorICAgIDg1LCA4MywgMTk3LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgCisgICAgNzYsIDY1LCA4MywgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCAKKyAgICA3NiwgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTQsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAorICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCAKKyAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgCisgICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKKyAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCisgICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNDksIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIAorICAgIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCAKKyAgICA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgCisgICAgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgMTkzLCA3MiwgNzksIDc5LCA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgCisgICAgNzIsIDc5LCA3OSwgNzUsIDY5LCAxOTYsIDcyLCA3OSwgNzgsIDY5LCA4OSwgNjYsIDY5LCA2OSwgMTI4LCA3MiwgNzksIDc4LCAKKyAgICA2OSwgMjE3LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCA2NywgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIAorICAgIDcyLCA2OSwgODQsIDczLCAxOTUsIDcyLCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIDE5OSwgCisgICAgNzIsIDc5LCA3NiwgNjUsIDc3LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNzUsIDY1LCAxMjgsIDcyLCAKKyAgICA3OSwgNzMsIDEyOCwgNzIsIDc5LCA2NywgNzIsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OCwgODUsIAorICAgIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDc5LCA4NCwgCisgICAgMTI4LCA3MiwgNzgsIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIDczLCAxMjgsIDcyLCA3OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIDc4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDc4LCA2NSwgODQsIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCA2NSwgMTI4LCA3MiwgNzcsIDg5LCA4OCwgCisgICAgMTI4LCA3MiwgNzcsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIDEyOCwgNzIsIDc3LCA4OSwgODAsIDEyOCwgCisgICAgNzIsIDc3LCA4OSwgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDcyLCA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIAorICAgIDcyLCA3NywgNzksIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgCisgICAgNzksIDEyOCwgNzIsIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIDEyOCwgNzIsIDc3LCA3MywgODAsIDEyOCwgCisgICAgNzIsIDc3LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgODgsIDEyOCwgNzIsIDc3LCA2NSwgODQsIAorICAgIDEyOCwgNzIsIDc3LCA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgMTI4LCA3MiwgNzYsIAorICAgIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDEyOCwgNzIsIDc2LCA4OSwgCisgICAgODAsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgCisgICAgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCA4NSwgODAsIDEyOCwgNzIsIDc2LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIAorICAgIDc2LCA3MywgODgsIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgODAsIDEyOCwgNzIsIDc2LCA3MywgCisgICAgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIDEyOCwgNzIsIDc2LCAKKyAgICA2NSwgODgsIDEyOCwgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCAKKyAgICA3MiwgNzUsIDEyOCwgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MywgODQsIDc5LCA4MiwgNzMsIDE5NSwgNzIsIAorICAgIDczLCA4MiwgNzMsIDgxLCAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODMsIDgwLCA2OSwgNjksIDE5NiwgNzIsIDczLCA3MSwgCisgICAgNzIsIDQ1LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCAxODUsIDcyLCA3MywgNzEsIDcyLCA0NSwgNzIsIAorICAgIDY5LCA2OSwgNzYsIDY5LCAxOTYsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgMjAwLCA3MiwgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCA3MiwgNzMsIDE5NSwgNzIsIDczLCA2OSwgCisgICAgMTI4LCA3MiwgNzMsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAKKyAgICAxMjgsIDcyLCA3MywgNjYsIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA3MiwgNzIsIDg3LCA2NSwgMTI4LCA3MiwgNzIsIAorICAgIDg1LCAxMjgsIDcyLCA3MiwgNzMsIDEyOCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNzIsIDcyLCA2OSwgMTI4LCA3MiwgNzIsIAorICAgIDY1LCA2NSwgMTI4LCA3MiwgNzEsIDEyOCwgNzIsIDY5LCA4OCwgNzMsIDcwLCA3OSwgODIsIDIwNSwgNzIsIDY5LCA4OCwgCisgICAgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDg0LCAKKyAgICA4NSwgMTI4LCA3MiwgNjksIDgyLCA4NSwgMTI4LCA3MiwgNjksIDgyLCA3NywgNzMsIDg0LCA3MywgNjUsIDIwNiwgNzIsIAorICAgIDY5LCA4MiwgNzcsIDczLCA3OSwgNzgsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNjksIDgzLCAxMjgsIDcyLCA2OSwgCisgICAgODIsIDY5LCAxMjgsIDcyLCA2OSwgODIsIDY2LCAxMjgsIDcyLCA2OSwgODIsIDY1LCA2OSwgODUsIDIwNSwgNzIsIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzIsIDY5LCA3OCwgMTk5LCA3MiwgNjksIDc3LCA4MCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIAorICAgIDg0LCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgMjEyLCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzYsIDczLCA2NywgCisgICAgNzksIDgwLCA4NCwgNjksIDgyLCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY5LCAKKyAgICA3MywgODMsIDY5LCA3MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgNzYsIAorICAgIDIxNywgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCA2NSwgCisgICAgODIsIDg0LCA4MywgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzIsIDY5LCAKKyAgICA2NSwgODIsIDg0LCAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCA0NSwgNjksIAorICAgIDg2LCA3MywgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgCisgICAgODMsIDg0LCA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgNjksIDY1LCAKKyAgICA2OCwgNzMsIDc4LCA3MSwgMTI4LCA3MiwgNjYsIDY1LCA4MywgNjUsIDQ1LCA2OSwgODMsIDY1LCA4MywgMTkzLCA3MiwgNjYsIAorICAgIDY1LCA4MywgMTkzLCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCA3MiwgCisgICAgNjUsIDg1LCA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDcyLCAKKyAgICA2NSwgODQsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDcyLCA2NSwgODQsIDY1LCAxOTgsIAorICAgIDcyLCA2NSwgODMsIDY5LCAyMTAsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDIwNiwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCAKKyAgICAxMjgsIDcyLCA2NSwgODIsIDc1LCA3NiwgNjksIDY1LCAyMDYsIDcyLCA2NSwgODIsIDY4LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MiwgNjUsIDgyLCAxOTYsIDcyLCA2NSwgODAsIDgwLCAyMTcsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIDIwNywgCisgICAgNzIsIDY1LCA3OCwgNzEsIDkwLCA3MiwgNzksIDIxMywgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAyMTEsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDEyOCwgNzIsIAorICAgIDY1LCA3OCwgNjgsIDY2LCA2NSwgNzEsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgNDUsIDY1LCA3NSwgCisgICAgNjUsIDg0LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA4MywgODQsIDY5LCAyMTAsIDcyLCAKKyAgICA2NSwgNzcsIDc3LCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIDY2LCA4NSwgODIsIAorICAgIDcxLCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NiwgODEsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDc5LCAxMjgsIDcyLCA2NSwgCisgICAgNzYsIDcwLCA0NSwgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDcyLCA2NSwgNzYsIDY2LCAKKyAgICA2OSwgODIsIDY4LCAxMjgsIDcyLCA2NSwgNzYsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgCisgICAgMTI4LCA3MiwgNjUsIDczLCA4MiwgNjcsIDg1LCA4NCwgMTI4LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA3MiwgNjUsIDcxLCAKKyAgICA3NiwgNjUsIDIxOCwgNzIsIDY1LCA3MSwgNzYsIDEyOCwgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgNjUsIDEyOCwgNzIsIAorICAgIDY1LCA3MCwgODUsIDc1LCA3MiwgMTI4LCA3MiwgNjUsIDY5LCA3MSwgMjA0LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgCisgICAgNzIsIDY1LCA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzIsIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgNTIsIDEyOCwgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgNzIsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgCisgICAgODUsIDEyOCwgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgCisgICAgNzAsIDIxMywgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2NSwgODMsIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDg5LCA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCA4NSwgMTI4LCA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgCisgICAgNjksIDY5LCAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCisgICAgODYsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCAKKyAgICA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgMTI4LCA3MSwgODUsIDc4LCA4NSwgCisgICAgMTI4LCA3MSwgODUsIDc4LCAyMTMsIDcxLCA4NSwgMjA1LCA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgNzMsIDg0LCA2NSwgCisgICAgODIsIDEyOCwgNzEsIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIDg1LCA2OCwgCisgICAgMTI4LCA3MSwgODUsIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA4MywgNzcsIDY1LCA3OCwgMTI4LCA3MSwgODUsIDY1LCAKKyAgICA4MiwgNjgsIDY5LCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgMTk2LCA3MSwgODUsIAorICAgIDY1LCA4MiwgNjgsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY1LCA3OCwgMjAxLCA3MSwgODUsIDE5MywgNzEsIDg1LCAxNzgsIAorICAgIDcxLCA4NCwgNjksIDIxMCwgNzEsIDgzLCA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIAorICAgIDgyLCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgCisgICAgNzIsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzEsIDgyLCA3MywgNzgsIDc4LCA3MywgNzgsIDE5OSwgNzEsIDgyLCAKKyAgICA3MywgNzcsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNjksIDcxLCA3OSwgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIAorICAgIDY5LCA2OSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgCisgICAgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIAorICAgIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgNjUsIDIxMiwgNzEsIDgyLCA2NSwgCisgICAgODYsIDY5LCA4OSwgNjUsIDgyLCAxOTYsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIAorICAgIDEyOCwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDg2LCAxOTcsIDcxLCA4MiwgNjUsIDg0LCA2OSwgODIsIDEyOCwgNzEsIDgyLCA2NSwgODMsIAorICAgIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAyMTEsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNjksIDc3LCAxOTcsIDcxLCA4MiwgCisgICAgNjUsIDgwLCA2OSwgODMsIDEyOCwgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDcxLCA4MiwgNjUsIDczLCA3OCwgMTI4LCAKKyAgICA3MSwgODIsIDY1LCA2OCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA3MSwgODIsIAorICAgIDY1LCA2NywgMTk3LCA3MSwgODAsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCA3MiwgNzcsIDczLCA3NSwgNzksIDIwNiwgCisgICAgNzEsIDc5LCA4MiwgODQsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCA3MSwgNzksIDgyLCAKKyAgICA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIAorICAgIDcxLCA3OSwgODIsIDcxLCA3MywgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCA3MSwgNzksIDc5LCAxOTYsIDcxLCA3OSwgCisgICAgNzgsIDcxLCAxMjgsIDcxLCA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgNzEsIDc5LCA3MywgNzgsIDE5OSwgCisgICAgNzEsIDc5LCA2NiwgNzYsIDczLCA3OCwgMTI4LCA3MSwgNzksIDY1LCA3NiwgMTI4LCA3MSwgNzksIDY1LCAyMDQsIDcxLCAKKyAgICA3OSwgNjUsIDEyOCwgNzEsIDc4LCA4OSwgNzMsIDgzLCAxMjgsIDcxLCA3OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgNzYsIDc5LCA4NCwgODQsIDY1LCAyMDQsIDcxLCA3NiwgCisgICAgNzksIDY2LCAxOTcsIDcxLCA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCA3MSwgNzYsIDY5LCA3MywgNjcsIAorICAgIDIwMCwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIAorICAgIDcxLCA3MywgODgsIDEyOCwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIAorICAgIDcxLCA3MywgODMsIDY1LCA3NiwgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA3NiwgCisgICAgMTI4LCA3MSwgNzMsIDgyLCA1MSwgMTI4LCA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgCisgICAgODIsIDE3OCwgNzEsIDczLCA4MCwgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAKKyAgICAxMjgsIDcxLCA3MywgNzcsIDY5LCAyMDQsIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzEsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNjYsIDY2LCA3OSwgODUsIDIxMSwgNzEsIAorICAgIDczLCA2NiwgNjUsIDEyOCwgNzEsIDczLCA1MiwgMTI4LCA3MSwgNzMsIDE4MCwgNzEsIDcyLCA5MCwgMTI4LCA3MSwgNzIsIAorICAgIDg3LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgCisgICAgNzIsIDg1LCAxMjgsIDcxLCA3MiwgNzksIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCA4NCwgMTI4LCA3MSwgNzIsIDc5LCAKKyAgICAxMjgsIDcxLCA3MiwgNzMsIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDcxLCAKKyAgICA3MiwgNjksIDg1LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzEsIAorICAgIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDgyLCA2NSwgNjksIDEyOCwgCisgICAgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NCwgMTI4LCAKKyAgICA3MSwgNzIsIDY5LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCAxMjgsIDcxLCA3MiwgMTk3LCA3MSwgNzIsIDY1LCA4OSwgNzgsIAorICAgIDEyOCwgNzEsIDcyLCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA4MCwgMTI4LCA3MSwgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA3MSwgNzIsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIDEyOCwgNzEsIDcyLCAKKyAgICA2NSwgNzMsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDczLCAyMDYsIDcxLCA3MiwgNjUsIDY4LCAxMjgsIDcxLCA3MiwgNjUsIAorICAgIDY1LCA3NywgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDczLCAxMjgsIDcxLCA3MSwgCisgICAgODcsIDY5LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDcxLCAKKyAgICA4NywgNjUsIDEyOCwgNzEsIDcxLCA4NSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODQsIDEyOCwgNzEsIDcxLCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgCisgICAgODQsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgODUsIDc5LCAxMjgsIDcxLCA3MSwgNzksIDg4LCAKKyAgICAxMjgsIDcxLCA3MSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDg4LCAxMjgsIDcxLCAKKyAgICA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzEsIAorICAgIDcxLCA3MywgNjksIDEyOCwgNzEsIDcxLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA2OSwgODQsIDEyOCwgNzEsIDcxLCA2OSwgCisgICAgODAsIDEyOCwgNzEsIDcxLCA2NSwgODgsIDEyOCwgNzEsIDcxLCA2NSwgODQsIDEyOCwgNzEsIDcxLCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDY5LCA4NCwgMTkzLCA3MSwgNjksIDgzLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgNzgsIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgMjA2LCA3MSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzEsIDY5LCA4MiwgODMsIDcyLCA2NSwgODksIDczLCA3NywgMTI4LCA3MSwgNjksIDgyLCAKKyAgICA3NywgNjUsIDIwNiwgNzEsIDY5LCA4MiwgNjksIDgzLCA3MiwgMTI4LCA3MSwgNjksIDgyLCA2OSwgODMsIDIwMCwgNzEsIAorICAgIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCAKKyAgICA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3OCwgODQsIDc2LCAxOTcsIDcxLCA2OSwgNzgsIDczLCA4NCwgNzMsIDg2LCA2OSwgCisgICAgMTI4LCA3MSwgNjksIDc4LCA3MywgNzUsIDIwMSwgNzEsIDY5LCA3OCwgNjksIDgyLCA3MywgMTk1LCA3MSwgNjksIDc3LCAKKyAgICA3MywgNzgsIDczLCAxMjgsIDcxLCA2OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDY5LCAyMDUsIAorICAgIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIDEyOCwgNzEsIDY5LCA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCA3MSwgCisgICAgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCA2OSwgNjUsIDIxMCwgNzEsIDY4LCA2NSwgNzgsIDEyOCwgCisgICAgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIDY3LCA2NSwgMjA2LCA3MSwgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjYsIDczLCAKKyAgICA2OSwgMTk3LCA3MSwgNjYsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDY2LCA2OSwgODQsIDEyOCwgNzEsIDY2LCA2NSwgODksIAorICAgIDczLCAxMjgsIDcxLCA2NiwgNjUsIDc1LCA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgCisgICAgNjUsIDg5LCA2NSwgNzgsIDg1LCA3NSwgNzMsIDg0LCA4NCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzEsIDY1LCA4OSwgMTI4LCA3MSwgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgODQsIDEyOCwgNzEsIDY1LCA4NCwgCisgICAgNzIsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzEsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgNzEsIDY1LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA4MywgNzIsIDg1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcxLCA2NSwgCisgICAgODIsIDY4LCA2OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAxOTYsIDcxLCAKKyAgICA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCA3MSwgNjUsIAorICAgIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIDcxLCA2NSwgNzcsIDc3LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjksIDEyOCwgCisgICAgNzEsIDY1LCA3NywgMTk3LCA3MSwgNjUsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCAKKyAgICA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCA3MSwgNjUsIDE5OCwgNzEsIDY1LCAKKyAgICA2OSwgODQsIDg0LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIAorICAgIDY1LCA2OCwgMTI4LCA3MSwgNjUsIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgNjUsIAorICAgIDY1LCA3MCwgODUsIDEyOCwgNzEsIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIDcxLCA0OCwgNTMsIDUxLCAxMjgsIAorICAgIDcxLCA0OCwgNTMsIDUwLCAxMjgsIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgCisgICAgNTIsIDU3LCAxMjgsIDcxLCA0OCwgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAxMjgsIDcxLCA0OCwgNTIsIDU0LCAKKyAgICAxMjgsIDcxLCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCA3MSwgNDgsIDUyLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUyLCA1MSwgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIAorICAgIDQ4LCA1MiwgNDksIDEyOCwgNzEsIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgCisgICAgNTYsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCAKKyAgICA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCA3MSwgNDgsIDUxLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1MSwgMTI4LCA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIDUxLCA0OSwgMTI4LCA3MSwgNDgsIAorICAgIDUxLCA0OCwgMTI4LCA3MSwgNDgsIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgMTI4LCA3MSwgNDgsIDUwLCA1NSwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgCisgICAgNzEsIDQ4LCA1MCwgNTIsIDEyOCwgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCA1MCwgNTAsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MCwgNDksIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCAxMjgsIDcxLCA0OCwgNDksIAorICAgIDU3LCAxMjgsIDcxLCA0OCwgNDksIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIDcxLCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDcxLCA0OCwgNDksIDUzLCAxMjgsIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgNDksIDUxLCAxMjgsIDcxLCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDcxLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgMTI4LCA3MSwgNDgsIDQ5LCAKKyAgICA0OCwgMTI4LCA3MSwgNDgsIDQ4LCA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjYsIAorICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCA2NSwgCisgICAgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3MSwgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCA0OSwgMTI4LCA3MCwgODksIDg4LCAKKyAgICAxMjgsIDcwLCA4OSwgODQsIDEyOCwgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4NywgNzMsIDEyOCwgCisgICAgNzAsIDg3LCA2OSwgNjksIDEyOCwgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MCwgODcsIDY1LCAKKyAgICAxMjgsIDcwLCA4NiwgODMsIDUxLCAxMjgsIDcwLCA4NiwgODMsIDUwLCAxMjgsIDcwLCA4NiwgODMsIDQ5LCAxMjgsIDcwLCAKKyAgICA4NSwgODgsIDEyOCwgNzAsIDg1LCA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODUsIDgzLCAxOTMsIDcwLCAKKyAgICA4NSwgODIsIDg4LCAxMjgsIDcwLCA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIAorICAgIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MCwgCisgICAgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDc0LCA3MywgMTI4LCAKKyAgICA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIDEyOCwgNzAsIDg0LCA3MiwgNzksIAorICAgIDgyLCAxOTMsIDcwLCA4MywgNzMsIDEyOCwgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgCisgICAgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCAKKyAgICA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIAorICAgIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgCisgICAgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCAKKyAgICA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIAorICAgIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgCisgICAgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCAKKyAgICA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIAorICAgIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgCisgICAgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCAKKyAgICA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIAorICAgIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgCisgICAgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCAKKyAgICA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIAorICAgIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCAKKyAgICA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIAorICAgIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAKKyAgICAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIAorICAgIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgCisgICAgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgCisgICAgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgCisgICAgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIAorICAgIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgCisgICAgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCAKKyAgICA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIAorICAgIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgCisgICAgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIAorICAgIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgCisgICAgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCAKKyAgICA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIAorICAgIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIAorICAgIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgCisgICAgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAKKyAgICAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCAKKyAgICA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIAorICAgIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAKKyAgICAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCAKKyAgICA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIAorICAgIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgCisgICAgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIAorICAgIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCisgICAgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKKyAgICA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIAorICAgIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgCisgICAgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKKyAgICA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIAorICAgIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgCisgICAgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAKKyAgICAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIAorICAgIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCAKKyAgICA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIAorICAgIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgCisgICAgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIAorICAgIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgCisgICAgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgCisgICAgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCAKKyAgICA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIAorICAgIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgCisgICAgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCAKKyAgICA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIAorICAgIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgCisgICAgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCAKKyAgICA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIAorICAgIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAKKyAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIAorICAgIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgCisgICAgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCAKKyAgICA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgCisgICAgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCAKKyAgICA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIAorICAgIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgCisgICAgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCAKKyAgICA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCAKKyAgICA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgCisgICAgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIAorICAgIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIAorICAgIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgCisgICAgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCAKKyAgICA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIAorICAgIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIAorICAgIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgCisgICAgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCAKKyAgICA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgCisgICAgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCAKKyAgICA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIAorICAgIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgCisgICAgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCAKKyAgICA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgCisgICAgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCAKKyAgICA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIAorICAgIDg3LCA2OSwgMTI4LCA2OSwgODYsIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCAKKyAgICA3MCwgODIsIDczLCA2NywgNjUsIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgCisgICAgMjE3LCA2OSwgODUsIDgyLCAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgCisgICAgNDUsIDc5LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCAKKyAgICA0NSwgNjksIDEyOCwgNjksIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIAorICAgIDg0LCA2NSwgMTI4LCA2OSwgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgCisgICAgODIsIDc4LCA3MywgODQsIDg5LCAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAKKyAgICAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIAorICAgIDY5LCAxOTYsIDY5LCA4MywgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgCisgICAgMTc4LCA2OSwgODMsIDcyLCA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAKKyAgICAxMjgsIDY5LCA4MywgNjUsIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIAorICAgIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgCisgICAgODIsIDcxLCAxMjgsIDY5LCA4MiwgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIAorICAgIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKKyAgICAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIAorICAgIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAKKyAgICAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIAorICAgIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCAKKyAgICA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIAorICAgIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIAorICAgIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgCisgICAgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCAKKyAgICA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIAorICAgIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgCisgICAgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCAKKyAgICA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgCisgICAgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgCisgICAgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCAKKyAgICA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIAorICAgIDEyOCwgNjksIDc4LCA2OCwgNjksIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA4MywgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCAKKyAgICA3OSwgODMsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIAorICAgIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgCisgICAgNjUsIDg0LCA3MywgMTk1LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCAKKyAgICA2OCwgNjksIDgyLCA4OSwgMTI4LCA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIAorICAgIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgCisgICAgNjksIDc2LCA4NCwgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCAKKyAgICA3MywgODMsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIAorICAgIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCAKKyAgICA2OSwgNzgsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgCisgICAgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgCisgICAgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCAKKyAgICA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIAorICAgIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgCisgICAgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCAKKyAgICA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIAorICAgIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKKyAgICAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIAorICAgIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCAKKyAgICA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIAorICAgIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIAorICAgIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIAorICAgIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgCisgICAgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCAKKyAgICA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIAorICAgIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIAorICAgIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgCisgICAgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCAKKyAgICA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIAorICAgIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIAorICAgIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgCisgICAgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgCisgICAgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIAorICAgIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIAorICAgIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgCisgICAgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCAKKyAgICA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIAorICAgIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgCisgICAgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgCisgICAgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgCisgICAgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgCisgICAgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCAKKyAgICA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIAorICAgIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgCisgICAgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCAKKyAgICA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIAorICAgIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgCisgICAgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgCisgICAgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCAKKyAgICA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIAorICAgIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgCisgICAgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCAKKyAgICA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIAorICAgIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCisgICAgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIAorICAgIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCAKKyAgICA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIAorICAgIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgCisgICAgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCAKKyAgICA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgMTI4LCA2OCwgNzksIDczLCA4NCwgCisgICAgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIDY4LCA3OSwgNjgsIDY5LCA3NSwgCisgICAgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKKyAgICA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCAxOTcsIDY4LCA3OSwgNjUsIAorICAgIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDc2LCAKKyAgICA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA2OCwgNzYsIDcyLCA2NSwgMTI4LCAKKyAgICA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCA2OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIDc0LCA2OSwgODIsIDg2LCAxMjgsIAorICAgIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgMjE3LCA2OCwgNzMsIDg2LCA3OSwgCisgICAgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCAKKyAgICA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIAorICAgIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAxOTcsIDY4LCA3MywgODYsIAorICAgIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgCisgICAgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCAKKyAgICA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgNjgsIAorICAgIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgODUsIDc5LCA4NSwgMjExLCA2OCwgCisgICAgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA2OCwgNzMsIDgzLCAKKyAgICA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgCisgICAgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDgwLCA4NCwgNjksIAorICAgIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgCisgICAgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgMjEyLCAKKyAgICA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUwLCAKKyAgICAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgNjgsIDczLCA3NywgNzMsIAorICAgIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgCisgICAgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCAKKyAgICA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIAorICAgIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgCisgICAgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgCisgICAgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCAKKyAgICA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgCisgICAgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCAKKyAgICA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIAorICAgIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgCisgICAgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCAKKyAgICA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIAorICAgIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCA2OSwgMjEwLCA2OCwgCisgICAgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgMTkzLCAKKyAgICA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDc2LCAxMjgsIAorICAgIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIAorICAgIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzksIDEyOCwgNjgsIAorICAgIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3MiwgCisgICAgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY5LCAKKyAgICAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgCisgICAgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAKKyAgICAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCA2OCwgNjksIDg5LCAKKyAgICA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIDg4LCA3MywgNjUsIAorICAgIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCA3MywgNzEsIDc4LCAKKyAgICAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDY5LCAKKyAgICA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MiwgNjksIAorICAgIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgODQsIDczLCAKKyAgICA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIAorICAgIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIDY5LCA3OCwgCisgICAgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgNzgsIDY1LCAKKyAgICA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCA2OCwgNjksIAorICAgIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCAKKyAgICAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIAorICAgIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCA3MywgCisgICAgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAogICAgIDE5NywgNjgsIDY5LCA3NSwgNjUsIDEyOCwgNjgsIDY5LCA3NSwgMTI4LCA2OCwgNjksIDczLCAxMjgsIDY4LCA2OSwgNzIsIAogICAgIDczLCAxMjgsIDY4LCA2OSwgNzEsIDgyLCA2OSwgMTk3LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgCiAgICAgMTI4LCA2OCwgNjksIDcwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCA3OCwgNjksIDgzLCAyMTEsIDY4LCA2OSwgNjksIDgyLCAKQEAgLTQ1NDcsOTYgKzQ1NTAsOTYgQEAKICAgICA3MywgNzksIDIwNiwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDY1LCA3NiwgODQsIDY1LCAxMjgsIAogICAgIDY1LCA3NiwgODAsIDcyLCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA3MiwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgCiAgICAgNzgsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNjUsIDc2LCA4MCwgNjUsIAotICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCA3NiwgNzYsIDczLCA2NSwgCi0gICAgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIDY1LCA3NiwgNzUsIDY1LCAKLSAgICA3NiwgNzMsIDQ1LCA1MCwgMTI4LCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCAxMjgsIDY1LCA3NiwgNzMsIDcxLCA3OCwgNjksIAotICAgIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCA3OCwgMTI4LCA2NSwgNzYsIDczLCA2OSwgCi0gICAgMjA2LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIDY5LCA4NSwgMjEyLCA2NSwgCi0gICAgNzYsIDY5LCA4MiwgODQsIDEyOCwgNjUsIDc2LCA2OSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgNjksIDc3LCA2NiwgNzMsIDY3LCAKLSAgICAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIDEyOCwgNjUsIDc2LCA2NSwgODksIAotICAgIDcyLCAxOTcsIDY1LCA3NiwgNjUsIDgyLCAyMDUsIDY1LCA3NiwgNjUsIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDQ1LCA3NiwgCi0gICAgNjUsIDc1LCA4NSwgNzgsIDY1LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCA3NiwgODMsIDc1LCA2NSwgNjYsIAotICAgIDEyOCwgNjUsIDc1LCA4MywgNjUsIDEyOCwgNjUsIDc1LCA3MiwgNzcsIDczLCA3NywgNzMsIDE5NSwgNjUsIDc1LCA2NiwgCi0gICAgNjUsIDIxMCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NSwgNjUsIDgyLCAxOTMsIDY1LCA3MywgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDczLCA4NCwgNzksIDIwNiwgNjUsIAotICAgIDczLCA4MiwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDY1LCA3MywgNzgsIDIxMywgNjUsIDczLCA3OCwgNzgsIDEyOCwgCi0gICAgNjUsIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIDcyLCA4NiwgODUsIDgzLCAKLSAgICAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgNzIsIDY1LCA3OCwgMTk5LCAKLSAgICA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCA3MSwgODUsIDc4LCA3MSwgCi0gICAgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAKLSAgICAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgMTI4LCA2NSwgNzAsIAotICAgIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA3MCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2OSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4MywgNjcsIDg1LCA3NiwgNjUsIDgwLCAKLSAgICA3MywgODUsIDgzLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA2OSwgODMsIDEyOCwgNjUsIDY5LCA4MiwgNzMsIAotICAgIDY1LCAyMDQsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNjUsIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCA2NSwgNjksIDcxLCAKLSAgICAxMjgsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIDY1LCA2OSwgNjgsIAotICAgIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgMTI4LCA2NSwgCi0gICAgNjgsIDg2LCA2NSwgNzgsIDg0LCA2NSwgNzEsIDY5LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCAKLSAgICA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIDY5LCAxOTYsIAotICAgIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgNjUsIDIwMywgCi0gICAgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgNjksIAotICAgIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgODQsIDE5NywgCi0gICAgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIDE5NywgNjUsIDY3LCAKLSAgICA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgNjksIDY4LCA3MSwgCi0gICAgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDY3LCAKLSAgICA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgNDUsIAotICAgIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAxMjgsIDY1LCA2NywgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIDgzLCA3NywgNjUsIAotICAgIDIwNCwgNjUsIDY2LCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgNjUsIDgzLCA3MywgCi0gICAgNjUsIDIwNiwgNjUsIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2NiwgNjUsIDcwLCAKLSAgICA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjUsIAotICAgIDg5LCAxMjgsIDY1LCA2NSwgODcsIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIDY1LCA2NSwgNjYsIAotICAgIDY1LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OSwgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCAKLSAgICA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIAotICAgIDUwLCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAxMjgsIDY1LCA2NSwgCi0gICAgNDgsIDUwLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ4LCAxMjgsIDY1LCAKLSAgICA2NSwgNDgsIDQ5LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU1LCAxMjgsIAotICAgIDY1LCA2NSwgNDgsIDQ5LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUyLCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDksIAotICAgIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NSwgMTI4LCAKLSAgICA2NSwgNjUsIDQ4LCA0OCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCA1NCwgNTcsIAotICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIDEyOCwgNjUsIAotICAgIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIDQ4LCA1NCwgCi0gICAgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgNTcsIDEyOCwgCi0gICAgNjUsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MywgNTMsIDEyOCwgNjUsIDQ4LCA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCA1MywgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIDEyOCwgNjUsIAotICAgIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIDQ4LCA1MiwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAKLSAgICA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCAxMjgsIAotICAgIDY1LCA0OCwgNTEsIDU3LCAxMjgsIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIDY1LCA0OCwgCi0gICAgNTEsIDU0LCAxMjgsIDY1LCA0OCwgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgNTEsIDUxLCAKLSAgICAxMjgsIDY1LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTIsIAotICAgIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0NSwgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgODUsIDEyOCwgCi0gICAgNDUsIDc1LCA3MiwgODksIDg1LCAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCA5MCwgODUsIAotICAgIDE5NiwgNDUsIDY3LCA3MiwgNjUsIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAorICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzcsIDEyOCwgNjUsIDc2LCA3NiwgNzksIDEyOCwgNjUsIAorICAgIDc2LCA3NiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIDc2LCA3NiwgNjUsIDIwMCwgCisgICAgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgNDUsIDUwLCAxMjgsIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDEyOCwgNjUsIDc2LCAKKyAgICA3MywgNzEsIDc4LCA2OSwgMTk2LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc2LCA3MywgNjksIDc4LCAxMjgsIAorICAgIDY1LCA3NiwgNzMsIDY5LCAyMDYsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIDY1LCA3NiwgCisgICAgNjksIDg1LCAyMTIsIDY1LCA3NiwgNjksIDgyLCA4NCwgMTI4LCA2NSwgNzYsIDY5LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCAKKyAgICA2OSwgNzcsIDY2LCA3MywgNjcsIDEyOCwgNjUsIDc2LCA2OSwgNzAsIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgCisgICAgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDE5NywgNjUsIDc2LCA2NSwgODIsIDIwNSwgNjUsIDc2LCA2NSwgODAsIDcyLCAKKyAgICAxMjgsIDY1LCA3NiwgNDUsIDc2LCA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgNjUsIDc1LCA4NCwgNzMsIDY5LCA4MywgNjksIAorICAgIDc2LCA4MywgNzUsIDY1LCA2NiwgMTI4LCA2NSwgNzUsIDgzLCA2NSwgMTI4LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgCisgICAgMTk1LCA2NSwgNzUsIDY2LCA2NSwgMjEwLCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDE5MywgCisgICAgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDczLCA4NiwgNzMsIDc2LCA3MywgMjAzLCA2NSwgNzMsIDg0LCAKKyAgICA3OSwgMjA2LCA2NSwgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgNjUsIDczLCA3OCwgMjEzLCA2NSwgNzMsIAorICAgIDc4LCA3OCwgMTI4LCA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgCisgICAgNzIsIDg2LCA4NSwgODMsIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCAKKyAgICA3MiwgNjUsIDc4LCAxOTksIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIAorICAgIDcxLCA4NSwgNzgsIDcxLCAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCAKKyAgICA3OCwgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIAorICAgIDczLCA2NywgNjUsIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAKKyAgICAxMjgsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgNjUsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgCisgICAgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIDEyOCwgNjUsIDY5LCA4MywgMTI4LCAKKyAgICA2NSwgNjksIDgyLCA3MywgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIAorICAgIDc2LCA2NSwgMTI4LCA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIDEyOCwgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIAorICAgIDY1LCA2OSwgNzEsIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgNjksIDEyOCwgCisgICAgNjUsIDY5LCA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAKKyAgICAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgNjksIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIAorICAgIDEyOCwgNjUsIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgCisgICAgNjksIDE5NiwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgMjExLCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCAKKyAgICA2NSwgMjAzLCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIAorICAgIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCAKKyAgICA4NCwgMTk3LCA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgCisgICAgMTk3LCA2NSwgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCAKKyAgICA2OSwgNjgsIDcxLCA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDY1LCA2NywgNjcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCA2NywgNjksIDgwLCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgCisgICAgNzgsIDg0LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCAyMTIsIDY1LCA2NywgNjUsIDY4LCA2OSwgNzcsIDIxNywgNjUsIDY2LCA4OSwgCisgICAgODMsIDc3LCA2NSwgMjA0LCA2NSwgNjYsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2NiwgNzUsIDcyLCAKKyAgICA2NSwgODMsIDczLCA2NSwgMjA2LCA2NSwgNjYsIDY2LCA4MiwgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIAorICAgIDY2LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY2LCAxNzgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDY1LCA2NSwgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgCisgICAgNjUsIDY1LCA2NiwgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNTEsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNTAsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNTAsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIAorICAgIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA0OSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA2NSwgNjUsIDQ4LCA0OCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIAorICAgIDY1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDgsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA0OSwgMTI4LCA2NSwgNDgsIDU1LCA0OCwgMTI4LCA2NSwgNDgsIAorICAgIDU0LCA1NywgMTI4LCA2NSwgNDgsIDU0LCA1NiwgMTI4LCA2NSwgNDgsIDU0LCA1NSwgMTI4LCA2NSwgNDgsIDU0LCA1NCwgCisgICAgMTI4LCA2NSwgNDgsIDU0LCA1MywgMTI4LCA2NSwgNDgsIDU0LCA1MiwgMTI4LCA2NSwgNDgsIDU0LCA1MSwgMTI4LCA2NSwgCisgICAgNDgsIDU0LCA1MCwgMTI4LCA2NSwgNDgsIDU0LCA0OSwgMTI4LCA2NSwgNDgsIDU0LCA0OCwgMTI4LCA2NSwgNDgsIDUzLCAKKyAgICA1NywgMTI4LCA2NSwgNDgsIDUzLCA1NiwgMTI4LCA2NSwgNDgsIDUzLCA1NSwgMTI4LCA2NSwgNDgsIDUzLCA1NCwgMTI4LCAKKyAgICA2NSwgNDgsIDUzLCA1MywgMTI4LCA2NSwgNDgsIDUzLCA1MiwgMTI4LCA2NSwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNDgsIAorICAgIDUzLCA1MCwgMTI4LCA2NSwgNDgsIDUzLCA0OSwgMTI4LCA2NSwgNDgsIDUzLCA0OCwgMTI4LCA2NSwgNDgsIDUyLCA1NywgCisgICAgMTI4LCA2NSwgNDgsIDUyLCA1NiwgMTI4LCA2NSwgNDgsIDUyLCA1NSwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgCisgICAgNDgsIDUyLCA1MywgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTMsIDEyOCwgNjUsIDQ4LCA1MiwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTEsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAxMjgsIDY1LCA0OCwgNTIsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDUyLCA1MCwgMTI4LCA2NSwgNDgsIDUyLCA0OSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgCisgICAgNDgsIDEyOCwgNjUsIDQ4LCA1MSwgNTcsIDEyOCwgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgCisgICAgNjUsIDQ4LCA1MSwgNTQsIDEyOCwgNjUsIDQ4LCA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MSwgNTEsIDEyOCwgNjUsIDQ4LCA1MSwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDQ5LCA1MiwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgCisgICAgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNjUsIDQ1LCA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCAKKyAgICA4NSwgMTI4LCA0NSwgNzUsIDcyLCA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIAorICAgIDkwLCA4NSwgMTk2LCA0NSwgNjcsIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGxleGljb25fb2Zmc2V0W10gPSB7Ci0gICAgMCwgMCwgNiwgMTAsIDE4LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ0LCA1MCwgNjIsIDcwLCA4MCwgOTMsIDEwMiwgMTA4LCAKKyAgICAwLCAwLCA2LCAxMCwgMTgsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDcsIDUwLCA2MiwgNzAsIDgwLCA5MywgMTAyLCAxMDgsIAogICAgIDExMywgMTIxLCAxMzAsIDEzNSwgMTQwLCAxNDMsIDE0NywgMTUzLCAxNTgsIDE2MywgMTcxLCAxNzgsIDE4NiwgMTkxLCAKICAgICAxOTQsIDIwMCwgMjA4LCAyMTUsIDIyNSwgMjMwLCAyMzcsIDI0NiwgMjQ5LCAyNTQsIDI1NywgMjYzLCAyNjcsIDI3MiwgCiAgICAgMjgxLCAyODgsIDI5NSwgMzAxLCAzMTAsIDMxNSwgMzIxLCAzMjcsIDMzNSwgMTQ0LCAzNDEsIDM0OSwgMzUwLCAzNTgsIAotICAgIDM2MSwgMzY3LCAzNjksIDM3NSwgMzgyLCAzODQsIDM5MSwgMzk1LCA0MDMsIDQxMCwgNDE1LCA0MTcsIDQyMiwgNDI5LCAKLSAgICA0MzEsIDI5OSwgNDM3LCA0MzksIDQ0NCwgNDQ5LCA0NTIsIDQ1NywgNDYzLCA0NzAsIDQ3OSwgNDg5LCA0OTQsIDQ5OCwgCisgICAgMzYxLCAzNjcsIDM2OSwgMzc1LCAzODIsIDM4NCwgMzkxLCAzOTUsIDQwMywgNDEwLCA0MTIsIDQxNywgNDIyLCA0MjcsIAorICAgIDQzNCwgNDM2LCAyOTksIDQ0MiwgNDQ1LCA0NDcsIDQ1MiwgNDU3LCA0NjMsIDQ3MCwgNDc5LCA0ODksIDQ5NCwgNDk4LCAKICAgICA1MDUsIDUxOCwgNTIyLCA1MzEsIDUzOCwgNTQ1LCA1NDgsIDU1NCwgNTU4LCA1NjIsIDU3MiwgNTgwLCA1ODgsIDU5NiwgCi0gICAgNjA1LCA2MTMsIDYxOCwgNjE5LCA2MjMsIDYzMSwgNjM4LCA2NDgsIDY1OSwgNjYzLCA2NjYsIDY3MCwgNjczLCAzNDgsIAotICAgIDY3OCwgNjg3LCA2OTEsIDY5NywgNzAzLCA3MDUsIDcwOCwgNzExLCA3MTQsIDcxOCwgNzIyLCA3MzEsIDczOSwgNzQ0LCAKKyAgICA2MDUsIDYxMywgNjE4LCA2MTksIDYyMywgNjMxLCA2MzgsIDY0OCwgNjUyLCA2NjMsIDY2NywgNjcwLCA2NzMsIDY3OCwgCisgICAgMzQ4LCA2ODIsIDY5MSwgNjk3LCA3MDMsIDcwNSwgNzA4LCA3MTEsIDcxNCwgNzE4LCA3MjIsIDczMSwgNzM5LCA3NDQsIAogICAgIDc0NywgNzUxLCA3NTcsIDc2NCwgNzcxLCA3NzYsIDc4NSwgNzk0LCA4MDEsIDgwNSwgODE4LCA4MjcsIDgzNSwgODQxLCAKICAgICA1NTcsIDg1MCwgODYwLCA4NjcsIDg3MywgODc5LCA4ODYsIDg5NCwgODk4LCA3NDksIDkwNiwgOTE1LCA1MDMsIDkyMywgCiAgICAgOTI4LCA5MzQsIDE3LCA5NDMsIDk0OCwgOTUxLCA5NTUsIDk1OSwgOTY2LCA5NjksIDk3NiwgOTgwLCA5ODgsIDk5MiwgCi0gICAgMTAwMCwgMTAwNCwgMTAwNywgMTAxNCwgMTAyMSwgMTkyLCAxMDI0LCAxMDI5LCAxMDM5LCAxMDQ4LCAxMDU1LCAxMDYxLCAKLSAgICAxMDY5LCAxMDcyLCAxMDc3LCAxMDgzLCAxMDkxLCAxMDk3LCAxMTAyLCAxMTA1LCAxMTA4LCAxMTEsIDExMTMsIDExMTcsIAotICAgIDExMjMsIDExMjksIDExMzIsIDExMzgsIDExNDIsIDExNDcsIDExNTMsIDExNTgsIDExNjgsIDExNzIsIDExNzUsIDExNzgsIAorICAgIDEwMDAsIDEwMDQsIDEwMDcsIDEwMTQsIDEwMjEsIDE5MiwgMTAyNCwgMTAyOSwgMTAzOSwgMTA0OCwgMTA1NSwgMTA2MCwgCisgICAgMTA2NiwgMTA3MiwgMTA4MCwgMTA4MywgMTA4OCwgMTA5NCwgMTEwMiwgMTEwNywgMTExMCwgMTExMywgMTExLCAxMTE4LCAKKyAgICAxMTIyLCAxMTI4LCAxMTM0LCAxMTM3LCAxMTQzLCAxMTQ3LCAxMTUyLCAxMTU4LCAxMTY4LCAxMTcyLCAxMTc1LCAxMTc4LCAKICAgICAxMTg3LCAxMTkxLCAxMTk0LCAxMTk5LCAxMjA0LCAxMjEwLCAxMjE1LCAxMjIwLCAxMjI1LCAxMjI5LCAxMjM0LCAxMjQwLCAKICAgICAxMjQ1LCAxMjUwLCAxMjU0LCAxMjYwLCAxMjY1LCAxMjcwLCAxMjc1LCAxMjc5LCAxMjg0LCAxMjg5LCAxMjk0LCAxMzAwLCAKICAgICAxMzA2LCAxMzEyLCAxMzE3LCAxMzIxLCAxMzI2LCAxMzMxLCAxMzM2LCAxMzQwLCAxMzQ1LCAxMzUwLCAxMzU1LCAxMzYwLCAKQEAgLTQ2NTAsNyArNDY1Myw3IEBACiAgICAgMTY2NSwgMTY3MCwgMTY3NSwgMTY3OSwgMTY4MiwgMTY4NywgMTY5MiwgMTY5NywgMTcwMiwgMTcwOCwgMTcxMywgMTcxNywgCiAgICAgMTMyMiwgMTcyMCwgMTcyNSwgMTczMCwgMTMyNywgMTczNCwgMTczOCwgMTc0NSwgMTMzMiwgMTc1MiwgMTMzNywgMTc1NiwgCiAgICAgMTc1OCwgMTc2MywgMTc2OSwgMTM0MSwgMTc3NCwgMTc4MywgMTM0NiwgMTc4OCwgMTc5NCwgMTM1MSwgMTc5OSwgMTgwNCwgCi0gICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTE1NiwgMTgzNiwgMTg0MiwgCisgICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTA1OCwgMTgzNiwgMTg0MiwgCiAgICAgMTg0OCwgMTg1NCwgMTg2MCwgMTg2NiwgMTg3MiwgMTg3OCwgMTg4NCwgMTg4OSwgMTg5NSwgMTkwMSwgMTkwNywgMTkxMywgCiAgICAgMTkxOSwgMTkyNSwgMTkzMSwgMTkzNywgMTk0MywgMTk0OCwgMTk1MywgMTk1OCwgMTk2MywgMTk2OCwgMTk3MywgMTk3OCwgCiAgICAgMTk4MywgMTk4OCwgMTk5MywgMTk5OSwgMjAwNCwgMjAxMCwgMjAxNSwgMjAyMSwgMjAyNywgMjAzMiwgMjAzOCwgMjA0NCwgCkBAIC00Njc3LDcgKzQ2ODAsNyBAQAogICAgIDMyNDEsIDMyNDUsIDMyNDgsIDMyNjEsIDMyNjUsIDMyNjksIDMyNzMsIDMyNzcsIDMyODEsIDMyODQsIDMyODgsIDMyOTIsIAogICAgIDMyOTcsIDMzMDEsIDMzMDYsIDMzMTEsIDMzMTYsIDMzMjAsIDMzMjMsIDMzMjYsIDMzMzIsIDMzMzYsIDMzNDAsIDMzNDMsIAogICAgIDMzNDcsIDMzNTEsIDMzNTQsIDMzNjAsIDMzNjUsIDMzNzAsIDMzNzYsIDMzODEsIDMzODYsIDMzOTIsIDMzOTgsIDM0MDMsIAotICAgIDM0MDgsIDM0MTMsIDExMTUsIDU0NywgMzQxOCwgMzQyMSwgMzQyNiwgMzQzMCwgMzQzMywgMzQzNywgMzQ0MiwgMzQ0NywgCisgICAgMzQwOCwgMzQxMywgMTEyMCwgNTQ3LCAzNDE4LCAzNDIxLCAzNDI2LCAzNDMwLCAzNDMzLCAzNDM3LCAzNDQyLCAzNDQ3LCAKICAgICAzNDUxLCAzNDU2LCAzNDYwLCAzNDY1LCAzNDY5LCAzNDczLCAzNDc5LCAzNDg1LCAzNDg4LCAzNDkxLCAzNDk3LCAzNTA0LCAKICAgICAzNTExLCAzNTE3LCAzNTI0LCAzNTI5LCAzNTMzLCAzNTQwLCAzNTQ3LCAzNTUyLCAzNTU2LCAzNTY2LCAzNTcwLCAzNTc0LCAKICAgICAzNTc5LCAzNTg0LCAzNTk0LCAyMTA3LCAzNTk5LCAzNjAzLCAzNjA2LCAzNjEyLCAzNjE3LCAzNjIzLCAzNjI5LCAzNjM0LCAKQEAgLTQ3MjYsNyArNDcyOSw3IEBACiAgICAgNjY4MywgNjY5OCwgNjcxMywgNjcyOCwgNjc0MywgNjc1OCwgNjc3MywgNjc4OCwgNjgwMywgNjgxOCwgNjgzMywgNjg0OCwgCiAgICAgNjg2MywgNjg3OCwgNjg5MywgNjkwOCwgNjkyMywgNjkzOCwgNjk1MywgNjk2OCwgNjk4MywgNjk5OCwgNzAxMywgNzAyOCwgCiAgICAgNzAzNywgNzA0NiwgNzA1MSwgNzA1NywgNzA2NywgNzA3MSwgNzA3NiwgNzA4MSwgNzA4OSwgNzA5MywgNzA5NiwgNzEwMCwgCi0gICAgMjk3NSwgNzEwMywgNzEwOCwgMjk4LCA0NDIsIDcxMTQsIDcxMjIsIDcxMjYsIDcxMzAsIDcxMzMsIDcxMzcsIDcxNDMsIAorICAgIDI5NzUsIDcxMDMsIDcxMDgsIDI5OCwgNDI1LCA3MTE0LCA3MTIyLCA3MTI2LCA3MTMwLCA3MTMzLCA3MTM3LCA3MTQzLCAKICAgICA3MTQ3LCA3MTU1LCA3MTYxLCA3MTY2LCA3MTczLCA3MTgwLCA3MTg2LCA3MTkxLCA3MTk4LCA3MjA0LCA3MjEyLCA3MjE2LCAKICAgICA3MjIxLCA3MjMzLCA3MjQ0LCA3MjUxLCA3MjU1LCA3MjU5LCA3MjY1LCAzMjMzLCA3MjY5LCA3Mjc1LCA3MjgwLCA3Mjg1LCAKICAgICA3MjkwLCA3Mjk2LCA3MzAxLCA3MzA2LCA3MzExLCA3MzE2LCA3MzIyLCA3MzI3LCA3MzMyLCA3MzM4LCA3MzQzLCA3MzQ5LCAKQEAgLTQ3NTUsNzI1MiArNDc1OCw3MjUwIEBACiAgICAgODY0NSwgODY0OSwgODY1MywgODY1OCwgODY2NSwgODY3NiwgODY4NCwgODY5NCwgODcwMCwgODcwNywgODcxMiwgODcxNiwgCiAgICAgODcyNywgODc0MCwgODc1MSwgODc2NCwgODc3NSwgODc4NywgODc5OSwgODgxMSwgODgyNCwgODgzNywgODg0NCwgODg1MCwgCiAgICAgODg2NCwgODg3MSwgODg3NywgODg4MSwgODg4NiwgODg5MCwgODg5NywgODkwNSwgODkwOSwgODkxNSwgODkxOSwgODkyNSwgCi0gICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgNzY4LCAKLSAgICA4OTkzLCA4OTk3LCA5MDAyLCA5MDA3LCA5MDEyLCA5MDE2LCA5MDIyLCA5MDMwLCA5MDM2LCA5MDQwLCA5MDQ2LCA5MDU2LCAKLSAgICA5MDYwLCA5MDY2LCA5MDcxLCA5MDc1LCA5MDgxLCA5MDg3LCAyMTYxLCA5MDkyLCA5MDk0LCA5MDk5LCA5MTA3LCA5MTE2LCAKLSAgICA5MTIwLCA5MTI2LCA5MTMxLCA5MTM2LCA5MTQxLCA5MTQ2LCA5MTUyLCA5MTU3LCA5MTYyLCA0MDA2LCA5MTY3LCA5MTcyLCAKLSAgICA5MTc2LCA5MTgyLCA5MTg3LCA5MTkzLCA5MTk4LCA5MjAzLCA5MjA5LCA5MjE0LCA5MTIxLCA5MjIwLCA5MjI0LCA5MjMxLCAKLSAgICA5MjM3LCA5MjQyLCA5MjQ2LCA2MTgzLCA5MjUxLCA5MjYwLCA5MjY1LCA5MjcwLCA4MjE4LCA4MjI1LCA5Mjc1LCAyODUzLCAKLSAgICA5Mjc5LCA5Mjg0LCA5Mjg5LCA5MTMyLCA5MjkzLCA5Mjk4LCA5MTM3LCA5MTQyLCA5MzAzLCA5MzEwLCA5MzE3LCA5MzIzLCAKLSAgICA5MzI5LCA5MzM1LCA5MzQwLCA5MzQ1LCA5MzUwLCA5MTQ3LCA5MTUzLCA5MzU2LCA5MzYyLCA5MzY3LCA5Mzc1LCA5MTU4LCAKLSAgICA5MzgwLCA5OTAsIDkzODMsIDkzOTEsIDkzOTcsIDk0MDMsIDk0MTIsIDk0MjAsIDk0MjUsIDk0MzEsIDk0MzksIDk0NDYsIAotICAgIDk0NjEsIDk0NzgsIDk0OTcsIDk1MDYsIDk1MTQsIDk1MjksIDk1NDAsIDk1NTAsIDk1NjAsIDk1NjgsIDk1NzQsIDk1ODYsIAotICAgIDk1OTUsIDk2MDMsIDk2MTAsIDk2MTcsIDk2MjMsIDk2MjgsIDk2MzYsIDk2NDYsIDk2NTMsIDk2NjMsIDk2NzMsIDk2ODMsIAotICAgIDk2OTEsIDk2OTgsIDk3MDcsIDk3MTcsIDk3MzEsIDk3NDYsIDk3NTUsIDk3NjMsIDk3NjgsIDk3NzIsIDk3ODEsIDk3ODcsIAotICAgIDk3OTIsIDk4MDIsIDk4MTIsIDk4MjIsIDk4MjcsIDk4MzEsIDk4NDAsIDk4NDUsIDk4NTUsIDk4NjYsIDk4NzksIDk4ODcsIAotICAgIDk5MDAsIDk5MTIsIDk5MjAsIDk5MjUsIDk5MjksIDk5MzUsIDk5NDAsIDk5NDgsIDk5NTYsIDk5NjMsIDk5NjgsIDk5NzYsIAotICAgIDk5ODIsIDk5ODUsIDk5ODksIDk5OTUsIDEwMDAzLCAxMDAwOCwgMTAwMTIsIDEwMDIwLCAxMDAyOSwgMTAwMzcsIDEwMDQzLCAKLSAgICAxMDA0NywgMTAwNTQsIDEwMDY1LCAxMDA2OSwgMTAwNzIsIDEwMDc4LCA5MTYzLCAxMDA4MywgMTAwODksIDEwMDk2LCAKLSAgICAxMDEwMiwgMTAxMDcsIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCi0gICAgMTAxNjgsIDk0NzQsIDEwMTczLCAxMDE3OSwgMTAxODYsIDEwMTkzLCAxMDE5OCwgMTAyMDUsIDEwMjE0LCAxMDIxOCwgCi0gICAgMTAyMzAsIDgyNTYsIDEwMjM0LCAxMDIzNywgMTAyNDEsIDEwMjQ1LCAxMDI0OSwgMTAyNTMsIDEwMjU5LCAxMDI2NSwgCi0gICAgMTAyNzAsIDEwMjc2LCAxMDI4MSwgMTAyODYsIDEwMjkyLCAxMDI5NywgMTAzMDIsIDg5NTIsIDEwMzA3LCAxMDMxMSwgCi0gICAgMTAzMTUsIDEwMzE5LCAxMDMyNCwgMTAzMjksIDEwMzM3LCAxMDM0MywgMTAzNDcsIDEwMzUxLCAxMDM1OCwgMTAzNjMsIAotICAgIDEwMzcxLCAxMDM3NiwgMTAzODAsIDEwMzgzLCAxMDM4OSwgMTAzOTYsIDEwNDAwLCAxMDQwMywgMTA0MDgsIDEwNDEyLCAKLSAgICA0MDQ1LCAxMDQxOCwgMTA0MjcsIDM2LCAxMDQzNSwgMTA0NDEsIDEwNDQ2LCA4OTY3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2MywgMTA0NzgsIDEwNDk3LCAxMDUwOSwgMTA1MjIsIDEwNTM1LCAxMDU0OCwgMTA1NjIsIDEwNTc1LCAxMDU5MCwgCi0gICAgMTA1OTcsIDkxNjgsIDEwNjAzLCAxMDYxNywgMTA2MjIsIDEwNjI4LCAxMDYzMywgMTA2NDEsIDEwNjQ2LCA4MDQwLCAKLSAgICAxMDY1MSwgMTA2NTQsIDEwNjYxLCAxMDY2NiwgMTA2NzAsIDI4NTgsIDk5OCwgMTA2NzYsIDEwNjgwLCAxMDY4NiwgMTA2OTIsIAotICAgIDEwNjk3LCAxMDcwMywgMTA3MDgsIDkxNzcsIDEwNzE0LCAxMDcyMCwgMTA3MjUsIDEwNzMwLCAxMDczOCwgMTA3NDQsIAotICAgIDEwNzU3LCAxMDc2NSwgMTA3NzIsIDkxODMsIDEwNzc4LCAxMDc4NiwgMTA3OTQsIDEwODAxLCAxMDgxNCwgMTA4MjYsIAotICAgIDEwODM2LCAxMDg0NCwgMTA4NTEsIDEwODU4LCAxMDg2NywgMTA4NzYsIDEwODg0LCAxMDg5MSwgMTA4OTYsIDEwOTAyLCAKLSAgICA5MTg4LCAxMDkwNywgMTA5MTMsIDkxOTQsIDEwOTE4LCAxMDkyMSwgMTA5MjgsIDEwOTM0LCAxMDk0NywgODY2OSwgMTA5NTgsIAotICAgIDEwOTY0LCAxMDk3MywgMTA5ODEsIDEwOTg4LCAxMDk5NCwgMTEwMDAsIDExMDA1LCAxMTAwOSwgMTEwMTQsIDEwNDcwLCAKLSAgICAxMTAyMCwgOTE5OSwgMTEwMjcsIDExMDMyLCAxMTAzOSwgMTEwNDUsIDExMDUxLCAxMTA1NiwgMTEwNjQsIDExMDcyLCAKLSAgICAxMTA3OSwgMTEwODMsIDExMDk3LCAxMTEwNywgMTExMTIsIDExMTE2LCAxMTEyNywgMTExMzMsIDExMTM4LCAxMTE0MywgCi0gICAgOTIwNCwgOTIxMCwgMTExNDcsIDExMTUwLCAxMTE1NSwgMTExNjcsIDExMTc0LCAxMTE3OSwgMTExODMsIDExMTg4LCAKLSAgICAxMTE5MiwgMTExOTksIDExMjA1LCA5MjE1LCA5MTIyLCAxMTIxMiwgMjg2MywgOCwgMTEyMTksIDExMjI0LCAxMTIyOCwgCi0gICAgMTEyMzQsIDExMjQyLCAxMTI1MiwgMTEyNTcsIDExMjYyLCAxMTI2OSwgMTEyNzYsIDExMjgwLCAxMTI5MSwgMTEzMDEsIAotICAgIDExMzEwLCAxMTMyMiwgMTEzMjcsIDExMzMxLCAxMTMzOSwgMTEzNTMsIDExMzU3LCAxMTM2MCwgMTEzNjgsIDExMzc1LCAKLSAgICAxMTM4MywgMTEzODcsIDExMzk4LCAxMTQwMiwgMTE0MDksIDExNDE0LCAxMTQxOCwgMTE0MjQsIDExNDI5LCAxMTQzMywgCi0gICAgMTE0MzksIDExNDQ0LCAxMTQ1NSwgMTE0NTksIDExNDYyLCAxMTQ2OCwgMTE0NzMsIDExNDc5LCAxMTQ4NSwgMTE0OTIsIAotICAgIDExNTAzLCAxMTUxMywgMTE1MjMsIDExNTMyLCAxMTUzOSwgMTE1NDgsIDkyMjUsIDkyMzIsIDkyMzgsIDkyNDMsIDExNTU0LCAKLSAgICAxMTU2MCwgOTI0NywgMTE1NjYsIDExNTY5LCAxMTU3NiwgMTE1ODEsIDExNTk2LCAxMTYxMiwgMTE2MjcsIDExNjM1LCAKLSAgICAxMTY0MSwgMTE2NDYsIDgzOCwgNDIwLCAxMTY1MSwgMTE2NTksIDExNjY2LCAxMTY3MiwgMTE2NzcsIDExNjgyLCA5MjUyLCAKLSAgICAxMTY4NCwgMTE2ODgsIDExNjkzLCAxMTY5NywgMTE3MDcsIDExNzEyLCAxMTcxNiwgMTE3MjUsIDExNzI5LCAxMTczMiwgCi0gICAgOTI2MSwgMTE3MzksIDExNzQyLCAxMTc1MCwgMTE3NTcsIDExNzY1LCAxMTc2OSwgMTE3NzYsIDExNzg1LCAxMTc4OCwgCi0gICAgMTE3OTIsIDExNzk2LCAxMTgwMiwgMTE4MDYsIDExODEwLCAxMTgxNCwgMTE4MjAsIDExODMwLCAxMTgzNCwgMTE4NDIsIAotICAgIDExODQ2LCAxMTg1MywgMTE4NTcsIDExODYyLCAxMTg2NiwgMTE4NzMsIDExODc5LCAxMTg4NywgMTE4OTMsIDExODk4LCAKLSAgICAxMTkwOCwgMTE5MTMsIDExOTE4LCAxMTkyMiwgMTE5MzAsIDM5MDUsIDExOTM4LCAxMTk0MywgOTI2NiwgMTE5NDcsIAotICAgIDExOTUxLCAxMTk1NCwgMTE5NjIsIDExOTY5LCAxMTk3MywgNTk5MSwgMTE5NzcsIDExOTgyLCAxMTk4NiwgMTE5OTcsIAotICAgIDEyMDA3LCAxMjAxMiwgMTIwMTgsIDEyMDIyLCAxMjAyNSwgMTIwMzMsIDEyMDM4LCAxMjA0MywgMTIwNTAsIDEyMDU1LCAKLSAgICA5MjcxLCAxMjA2MCwgMTIwNjQsIDEyMDcxLCAxNzIyLCA2MTQ1LCAxMjA3NiwgMTIwODEsIDEyMDg2LCAxMjA5MSwgMTIwOTcsIAotICAgIDEyMTAyLCAxMjEwOCwgMTIxMTMsIDEyMTE4LCAxMjEyMywgMTIxMjgsIDEyMTMzLCAxMjEzOCwgMTIxNDMsIDEyMTQ4LCAKLSAgICAxMjE1MywgMTIxNTgsIDEyMTYzLCAxMjE2OCwgMTIxNzMsIDEyMTc4LCAxMjE4MywgMTIxODgsIDEyMTk0LCAxMjE5OSwgCi0gICAgMTIyMDQsIDEyMjA5LCAxMjIxNCwgMTIyMTksIDEyMjI1LCAxMjIzMCwgMTIyMzUsIDEyMjQxLCAxMjI0NiwgMTIyNTIsIAotICAgIDEyMjU3LCAxMjI2MywgMTIyNjgsIDEyMjczLCAxMjI3OCwgMTIyODMsIDEyMjg5LCAxMjI5NCwgMTIyOTksIDEyMzA0LCAKLSAgICA3MzcsIDEzOSwgMTIzMTIsIDEyMzE2LCAxMjMyMSwgMTIzMjYsIDEyMzMwLCAxMjMzNCwgMTIzMzgsIDEyMzQzLCAxMjM0NywgCi0gICAgMTIzNTIsIDEyMzU2LCAxMjM1OSwgMTIzNjMsIDEyMzY3LCAxMjM3MywgMTIzNzgsIDEyMzg4LCAxMjM5NCwgMTI0MDIsIAotICAgIDEyNDA2LCAxMjQxMCwgMTI0MTcsIDEyNDI1LCAxMjQzNCwgMTI0NDUsIDEyNDUyLCAxMjQ1OSwgMTI0NjMsIDEyNDcyLCAKLSAgICAxMjQ4MSwgMTI0ODksIDEyNDk4LCAxMjUwNywgMTI1MTYsIDEyNTI1LCAxMjUzNSwgMTI1NDUsIDEyNTU1LCAxMjU2NSwgCi0gICAgMTI1NzUsIDEyNTg0LCAxMjU5NCwgMTI2MDQsIDEyNjE0LCAxMjYyNCwgMTI2MzQsIDEyNjQ0LCAxMjY1NCwgMTI2NjMsIAotICAgIDEyNjczLCAxMjY4MywgMTI2OTMsIDEyNzAzLCAxMjcxMywgMTI3MjMsIDEyNzMyLCAxMjc0MiwgMTI3NTIsIDEyNzYyLCAKLSAgICAxMjc3MiwgMTI3ODIsIDEyNzkyLCAxMjgwMiwgMTI4MTIsIDEyODIyLCAxMjgzMSwgMTI4NDEsIDEyODUxLCAxMjg2MSwgCi0gICAgMTI4NzEsIDEyODgxLCAxMjg5MSwgMTI5MDEsIDEyOTExLCAxMjkyMSwgMTI5MzEsIDEyOTQwLCAxMjU2LCAxMjk0NiwgCi0gICAgMTI5NDksIDEyOTUzLCAxMjk1OCwgMTI5NjUsIDEyOTcxLCAxMjk3NiwgMTI5ODAsIDEyOTg1LCAxMjk5NCwgMTMwMDIsIAotICAgIDEzMDA3LCAxMzAxMSwgMTMwMTUsIDEzMDIxLCAxMzAyNiwgMTMwMzIsIDkyODAsIDEzMDM3LCAxMzA0MiwgMTMwNTEsIAotICAgIDkyODUsIDEzMDU2LCAxMzA1OSwgMTMwNjUsIDEzMDczLCA5MjkwLCAxMzA4MCwgMTMwODQsIDEzMDg4LCAxMzA5MiwgCi0gICAgMTMxMDIsIDEzMTA4LCAxMzExNCwgMTMxMTksIDEzMTI4LCAxMzEzNiwgMTMxNDMsIDEzMTUwLCAxMzE1NSwgMTMxNjIsIAotICAgIDEzMTY3LCAxMzE3MSwgMTMxNzQsIDEzMTg1LCAxMzE5NSwgMTMyMDQsIDEzMjEyLCAxMzIyMywgMTMyMzUsIDEzMjQ1LCAKLSAgICAxMzI1MCwgMTMyNTQsIDEzMjU5LCAxMzI2NCwgMTMyNjgsIDEzMjc0LCAxMzI4MiwgMTMyODksIDEzMzAwLCAxMzMwNSwgCi0gICAgMTMzMTUsIDEzMzE5LCAxMzMyMiwgMTMzMjksIDEzMzM5LCAxMzM0OCwgMTMzNTUsIDEzMzU5LCAxMzM2NiwgMTMzNzIsIAotICAgIDEzMzc3LCAxMzM4MiwgMTMzODYsIDEzMzk1LCAxMzQwMCwgMTM0MDYsIDEzNDEwLCAxMzQxNSwgMTM0MTksIDEzNDI4LCAKLSAgICAxMzQzNiwgMTM0NDQsIDEzNDUxLCAxMzQ1OSwgMTM0NzEsIDEzNDgyLCAxMzQ5MiwgMTM0OTksIDEzNTA1LCAxMzUxNCwgCi0gICAgMTM1MjUsIDEzNTM0LCAxMzU0NiwgMTM1NTgsIDEzNTcwLCAxMzU4MCwgMTM1ODksIDEzNTk4LCAxMzYwNiwgMTM2MTMsIAotICAgIDEzNjIyLCAxMzYzMCwgMTM2MzQsIDEzNjQwLCAxMzY0NiwgMTM2NTEsIDc3NTMsIDEzNjU1LCAxMzY1NywgMTM2NjEsIAotICAgIDEzNjY2LCAxMzY3MiwgMTM2ODEsIDEzNjg1LCAxMzY5MywgMTM3MDAsIDEzNzA5LCAxMzcxOCwgMTM3MjcsIDEzNzM2LCAKLSAgICAxMzc0NSwgMTM3NTQsIDEzNzYzLCAxMzc3MiwgMTM3ODIsIDEzNzkyLCAxMzgwMSwgMTM4MDcsIDEzODE0LCAxMzgyMSwgCi0gICAgMTM4MjcsIDEzODQxLCAxMzg0OCwgMTM4NTYsIDEzODY1LCAxMzg3MSwgMTM4ODAsIDEzODg5LCAxMzkwMCwgMTM5MTAsIAotICAgIDEzOTE4LCAxMzkyNSwgMTM5MzMsIDEzOTQyLCAxMzk1NSwgMTM5NjMsIDEzOTcwLCAxMzk4MywgMTM5ODksIDEzOTk1LCAKLSAgICAxNDAwNSwgMTQwMTQsIDE0MDIzLCAxNDAyOCwgMTQwMzIsIDE0MDM4LCAxNDA0NCwgMTQwNTEsIDg5NjYsIDE0MDU2LCAKLSAgICAxNDA2MSwgMTQwNjgsIDE0MDczLCAxMjM2OSwgMTQwNzgsIDE0MDg2LCAxNDA5MiwgMTQwOTcsIDE0MTA1LCAxNDExMywgCi0gICAgMTQxMjAsIDE0MTI4LCAxNDEzNCwgMTQxNDIsIDE0MTUwLCAxNDE1NiwgMTQxNjEsIDE0MTY3LCAxNDE3NCwgMTQxODAsIAotICAgIDE0MTg1LCAxNDE4OSwgMTQyMDAsIDE0MjA4LCAxNDIxNCwgMTQyMTksIDE0MjI4LCAxNDIzNCwgMTQyMzksIDE0MjQ4LCAKLSAgICAxNDI2MiwgMzg1MywgMTQyNjYsIDE0MjcxLCAxNDI3NiwgMTQyODIsIDE0Mjg3LCAxNDI5MiwgMTQyOTYsIDE0MzAxLCAKLSAgICAxNDMwNiwgMTQzMTEsIDc3NTIsIDE0MzE2LCAxNDMyMSwgMTQzMjYsIDE0MzMxLCAxNDMzNiwgMTQzNDAsIDE0MzQ1LCAKLSAgICAxNDM1MCwgMTQzNTUsIDE0MzYwLCAxNDM2NiwgMTQzNzIsIDE0Mzc3LCAxNDM4MSwgMTQzODYsIDE0MzkxLCAxNDM5NiwgCi0gICAgOTI5NCwgMTQ0MDEsIDE0NDA2LCAxNDQxMSwgMTQ0MTYsIDE0NDIxLCAxNDQzOCwgMTQ0NTYsIDE0NDY4LCAxNDQ4MSwgCi0gICAgMTQ0OTgsIDE0NTE0LCAxNDUzMSwgMTQ1NDEsIDE0NTYwLCAxNDU3MSwgMTQ1ODIsIDE0NTkzLCAxNDYwNCwgMTQ2MTYsIAotICAgIDE0NjI3LCAxNDYzOCwgMTQ2NTUsIDE0NjY2LCAxNDY3NywgMTQ2ODIsIDkyOTksIDE0Njg3LCAxNDY5MSwgMjM4MSwgCi0gICAgMTQ2OTUsIDE0Njk4LCAxNDcwNCwgMTQ3MTIsIDE0NzIwLCAxNDcyNSwgMTQ3MzMsIDE0NzQxLCAxNDc0OCwgMTQ3NTMsIAotICAgIDE0NzU5LCAxNDc2NiwgMTQ3NzQsIDE0NzgxLCAxNDc5MywgMTQ4MDEsIDE0ODA2LCAxMTU5MCwgMTQ4MTIsIDE0ODIxLCAKLSAgICAxNDgzMCwgMTQ4MzgsIDE0ODQ1LCAxNDg1MSwgMTQ4NTksIDE0ODY2LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5NCwgCi0gICAgMTQ5MDIsIDE0OTEyLCAxNDkxOSwgMTQ5MjUsIDE0OTMzLCAxNDkzOSwgMTQ5NDcsIDE0OTU0LCAxNDk2NywgMTQ5NzQsIAotICAgIDE0OTgzLCAxNDk5MiwgMTUwMDEsIDE1MDA5LCAxNTAxOSwgMTUwMjYsIDE1MDMxLCAzNTYwLCAxNTAzOCwgMTUwNDMsIAotICAgIDEzNzIsIDE1MDQ3LCAxNDMxNywgMTUwNTEsIDE1MDU3LCAxNTA2MSwgMTUwNjksIDE1MDgxLCAxNTA4NiwgMTUwOTMsIAotICAgIDE1MDk5LCAxNTEwNCwgMTUxMTEsIDE0MzIyLCAxNTExNSwgMTUxMTksIDE1MTIzLCAxNDMyNywgMTUxMjcsIDE0MzMyLCAKLSAgICAxNTEzMSwgMTUxMzgsIDE1MTQzLCAxNTE0NywgMTUxNTQsIDE1MTU4LCAxNTE2NiwgMTUxNzMsIDE1MTc3LCAxNTE4NCwgCi0gICAgMTUyMDEsIDE1MjEwLCAxNTIxNCwgMTUyMTcsIDE1MjI1LCAxNTIzMSwgMTUyMzYsIDM2MzgsIDE1MjQwLCAxNTI0MiwgCi0gICAgMTUyNTAsIDE1MjU3LCAxNTI2NywgMTUyNzksIDE1Mjg0LCAxNTI5MCwgMTUyOTUsIDE1Mjk5LCAxNTMwNSwgMTUzMTAsIAotICAgIDE1MzE2LCAxNTMxOSwgMTUzMjYsIDE1MzM0LCAxNTM0MSwgMTUzNDcsIDE1MzUzLCAxNTM1OCwgMTUzNjUsIDE1MzcxLCAKLSAgICAxNTM3NiwgMTUzODMsIDE1Mzg3LCAxNTM5MywgMTUzOTcsIDE1NDA0LCAxNTQxMCwgMTU0MTYsIDE1NDI0LCAxNTQzMCwgCi0gICAgMTU0MzUsIDE1NDQxLCAxNTQ0OSwgMTU0NTcsIDE1NDYzLCAxNTQ2OSwgMTU0NzQsIDE1NDgxLCAxNTQ4NiwgMTU0OTAsIAotICAgIDE1NDk2LCAxNTUwMSwgMTU1MDgsIDE1NTEzLCAxNTUxOSwgMTU1MjIsIDE1NTI4LCAxNTUzNCwgMTU1MzcsIDE1NTQxLCAKLSAgICAxNTU1MywgMTU1NTksIDE1NTY0LCAxNTU3MSwgMTU1NzcsIDE1NTgzLCAxNTU5NCwgMTU2MDQsIDE1NjEzLCAxNTYyMSwgCi0gICAgMTU2MjgsIDE1NjM5LCAxNTY0OSwgMTU2NTksIDE1NjY3LCAxNTY3MCwgMTQzNDYsIDE1Njc1LCAxNTY4MCwgMTQzNTEsIAotICAgIDE0NDg2LCAxNTY4OCwgMTU3MDEsIDE1NzE2LCAxNTcyNywgMTQ1MDMsIDE1NzQ1LCAxNTc1OCwgMTU3NzEsIDE1NzgyLCAKLSAgICAxMDQ4NSwgMTU3OTMsIDE1ODA2LCAxNTgyNSwgMTU4MzYsIDE1ODQ3LCAxNTg1OCwgMjY0OSwgMTU4NzEsIDE1ODc1LCAKLSAgICAxNTg4MywgMTU4OTgsIDE1OTEzLCAxNTkyNCwgMTU5MzEsIDE1OTM3LCAxNTk0NSwgMTU5NDksIDE1OTU1LCAxNTk1OCwgCi0gICAgMTU5NjgsIDE1OTc2LCAxNTk4MywgMTU5OTEsIDE2MDAxLCAxNjAwNiwgMTYwMTMsIDE2MDE4LCAxNjAyNSwgMTYwMzYsIAotICAgIDE2MDQ2LCAxNjA1MiwgMTYwNTcsIDE2MDYyLCAxNDM1NiwgMTYwNjYsIDE2MDcyLCAxNjA3OCwgMTYwODMsIDE2MDg4LCAKLSAgICAxNjA5MywgMTYwOTcsIDE0MzYxLCAxNDM2NywgMTYxMDEsIDE0MzczLCAxNjEwNiwgMTYxMTQsIDE2MTIzLCAxNjEzMCwgCi0gICAgOTE0MywgMTYxMzQsIDE2MTM2LCAxNjE0MSwgMTYxNDYsIDE2MTUyLCAxNjE1NywgMTYxNjIsIDE2MTY3LCAxNjE3MiwgCi0gICAgMTYxNzYsIDE2MTgyLCAxNjE4OCwgMTYxOTMsIDE2MTk5LCAxNjIwNCwgMTYyMDksIDE2MjE1LCAxNjIyMCwgMTYyMjUsIAotICAgIDE2MjMwLCAxNjIzNSwgMTYyNDEsIDE2MjQ2LCAxNjI1MSwgMTYyNTcsIDE2MjYzLCAxNjI2OCwgMTYyNzMsIDE2MjgwLCAKLSAgICAxNjI4NiwgMTYyOTcsIDE2MzA0LCAxNjMwOSwgMTYzMTMsIDE2MzE3LCAxNjMyMCwgMTYzMjgsIDE2MzMzLCAxNjM0MCwgCi0gICAgMTYzNDcsIDE2MzUzLCAxNjM1OCwgMTYzNjMsIDE2MzcwLCAxNjM4MCwgMTYzODUsIDE2MzkyLCAxNjM5OCwgMTY0MDgsIAotICAgIDE2NDE4LCAxNjQzMiwgMTY0NDYsIDE2NDYwLCAxNjQ3NCwgMTY0ODksIDE2NTA0LCAxNjUyMSwgMTY1MzksIDE2NTUyLCAKLSAgICAxNjU1OCwgMTY1NjMsIDE2NTY4LCAxNjU3MiwgMTY1NzcsIDE2NTg1LCAxNjU5MSwgMTY1OTYsIDE2NjAxLCAxNjYwNSwgCi0gICAgMTY2MTAsIDE2NjE0LCAxNjYxOSwgMTY2MjMsIDE2NjM0LCAxNjY0MCwgMTY2NDUsIDE2NjUwLCAxNjY1NywgMTY2NjIsIAotICAgIDE2NjY2LCAxNjY3MSwgMTY2NzYsIDE2NjgyLCAxNjY4OSwgMTY2OTUsIDE2NzAwLCAxNjcwNCwgMTY3MTAsIDE2NzE1LCAKLSAgICAxNjcyMCwgMTY3MjQsIDE2NzMwLCAxNjczNSwgMTY3NDAsIDE2NzQ3LCAxNjc1MiwgMTMxMDQsIDE2NzU2LCAxNjc2MSwgCi0gICAgMTY3NjUsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg5LCAxNjc5OSwgMTY4MDcsIDE2ODE0LCAxNjgxOSwgMTY4MjMsIAotICAgIDE2ODMyLCAxNjg0MCwgMTY4NDcsIDE2ODU0LCAxNjg2MCwgMTY4NjYsIDE2ODcxLCAxNjg3NiwgMTY4ODIsIDE2ODg3LCAKLSAgICAxNjg5MywgMTY4OTgsIDE2OTA0LCAxNjkxMCwgMTY5MTcsIDE2OTIzLCAxNjkyOCwgMTY5MzMsIDkzNDEsIDE2OTQyLCAKLSAgICAxNjk0NSwgMTY5NTEsIDE2OTU2LCAxNjk2MSwgMTY5NzEsIDE2OTc4LCAxNjk4NCwgMTY5ODksIDE2OTk0LCAxNzAwMCwgCi0gICAgMTcwMDUsIDE3MDExLCAxNzAxNiwgMTcwMjIsIDE3MDI4LCAxNzAzMywgMTcwNDEsIDE3MDQ4LCAxNzA1MywgMTcwNTgsIAotICAgIDE3MDY0LCAxNzA2OSwgMTcwNzMsIDE3MDgyLCAxNzA5MywgMTcxMDAsIDE3MTA1LCAxNzExMywgMTcxMTksIDE3MTI2LCAKLSAgICAxNzEzMiwgMTcxMzcsIDE3MTQxLCAxNzE0NywgMTcxNTIsIDE3MTU3LCAxNzE2MiwgMTQ0MCwgNzc3NywgMjg3NywgMTcxNjYsIAotICAgIDE3MTcwLCAxNzE3NCwgMTcxNzgsIDE3MTgyLCAxNzE4NiwgMTcxODksIDE3MTk2LCAxNzIwNCwgMTQzODcsIDE3MjExLCAKLSAgICAxNzIyMSwgMTcyMjksIDE3MjM2LCAxNzI0NCwgMTcyNTQsIDE3MjYzLCAxNzI3NiwgMTcyODEsIDE3Mjg2LCAxNzI5NCwgCi0gICAgMTczMDEsIDEzMjAwLCAxMzIwOSwgMTczMDgsIDE3MzE4LCAxNzMzMywgMTczMzksIDE3MzQ2LCAxNzM1MywgMTczNTksIAotICAgIDE3MzY3LCAxNzM3NywgMTczODcsIDE0MzkyLCAxNzM5NiwgMTc0MDIsIDE3NDA4LCAxNzQxNiwgMTc0MjQsIDE3NDI5LCAKLSAgICAxNzQzOCwgMTc0NDYsIDE3NDU4LCAxNzQ2OCwgMTc0NzgsIDE3NDg4LCAxNzQ5NywgMTc1MDksIDE3NTE5LCAxNzUyOSwgCi0gICAgMTc1NDAsIDE3NTQ1LCAxNzU1NywgMTc1NjksIDE3NTgxLCAxNzU5MywgMTc2MDUsIDE3NjE3LCAxNzYyOSwgMTc2NDEsIAotICAgIDE3NjUzLCAxNzY2NSwgMTc2NzYsIDE3Njg4LCAxNzcwMCwgMTc3MTIsIDE3NzI0LCAxNzczNiwgMTc3NDgsIDE3NzYwLCAKLSAgICAxNzc3MiwgMTc3ODQsIDE3Nzk2LCAxNzgwNywgMTc4MTksIDE3ODMxLCAxNzg0MywgMTc4NTUsIDE3ODY3LCAxNzg3OSwgCi0gICAgMTc4OTEsIDE3OTAzLCAxNzkxNSwgMTc5MjcsIDE3OTM4LCAxNzk1MCwgMTc5NjIsIDE3OTc0LCAxNzk4NiwgMTc5OTgsIAotICAgIDE4MDEwLCAxODAyMiwgMTgwMzQsIDE4MDQ2LCAxODA1OCwgMTgwNjksIDE4MDgxLCAxODA5MywgMTgxMDUsIDE4MTE3LCAKLSAgICAxODEyOSwgMTgxNDEsIDE4MTUzLCAxODE2NSwgMTgxNzcsIDE4MTg5LCAxODIwMCwgMTgyMTIsIDE4MjI0LCAxODIzNiwgCi0gICAgMTgyNDgsIDE4MjYwLCAxODI3MiwgMTgyODQsIDE4Mjk2LCAxODMwOCwgMTgzMjAsIDE4MzMxLCAxODM0MywgMTgzNTUsIAotICAgIDE4MzY3LCAxODM3OSwgMTgzOTEsIDE4NDAzLCAxODQxNSwgMTg0MjcsIDE4NDM5LCAxODQ1MSwgMTg0NjIsIDE4NDc0LCAKLSAgICAxODQ4NiwgMTg0OTgsIDE4NTEwLCAxODUyMywgMTg1MzYsIDE4NTQ5LCAxODU2MiwgMTg1NzUsIDE4NTg4LCAxODYwMSwgCi0gICAgMTg2MTMsIDE4NjI2LCAxODYzOSwgMTg2NTIsIDE4NjY1LCAxODY3OCwgMTg2OTEsIDE4NzA0LCAxODcxNywgMTg3MzAsIAotICAgIDE4NzQzLCAxODc1NSwgMTg3NjgsIDE4NzgxLCAxODc5NCwgMTg4MDcsIDE4ODIwLCAxODgzMywgMTg4NDYsIDE4ODU5LCAKLSAgICAxODg3MiwgMTg4ODUsIDE4ODk3LCAxODkxMCwgMTg5MjMsIDE4OTM2LCAxODk0OSwgMTg5NjIsIDE4OTc1LCAxODk4OCwgCi0gICAgMTkwMDEsIDE5MDE0LCAxOTAyNywgMTkwMzksIDE5MDUyLCAxOTA2NSwgMTkwNzgsIDE5MDkxLCAxOTEwNCwgMTkxMTcsIAotICAgIDE5MTMwLCAxOTE0MywgMTkxNTYsIDE5MTY5LCAxOTE4MSwgMTkxOTQsIDE5MjA3LCAxOTIyMCwgMTkyMzMsIDE5MjQ2LCAKLSAgICAxOTI1OSwgMTkyNzIsIDE5Mjg1LCAxOTI5OCwgMTkzMTEsIDE5MzIzLCAxOTMzNCwgMTkzNDcsIDE5MzYwLCAxOTM3MywgCi0gICAgMTkzODYsIDE5Mzk5LCAxOTQxMiwgMTk0MjUsIDE5NDM4LCAxOTQ1MSwgMTk0NjQsIDE5NDc2LCAxOTQ4OSwgMTk1MDIsIAotICAgIDE5NTE1LCAxOTUyOCwgMTk1NDEsIDE5NTU0LCAxOTU2NywgMTk1ODAsIDE5NTkzLCAxOTYwNiwgMTk2MTgsIDE5NjMxLCAKLSAgICAxOTY0NCwgMTk2NTcsIDE5NjcwLCAxOTY4MywgMTk2OTYsIDE5NzA5LCAxOTcyMiwgMTk3MzUsIDE5NzQ4LCAxOTc2MCwgCi0gICAgMTk3NzMsIDE5Nzg2LCAxOTc5OSwgMTk4MTIsIDE5ODI1LCAxOTgzOCwgMTk4NTEsIDE5ODY0LCAxOTg3NywgMTk4OTAsIAotICAgIDE5OTAyLCAxOTkxNSwgMTk5MjgsIDE5OTQxLCAxOTk1NCwgMTk5NjcsIDE5OTgwLCAxOTk5MywgMjAwMDYsIDIwMDE5LCAKLSAgICAyMDAzMiwgMjAwNDQsIDIwMDU3LCAyMDA3MCwgMjAwODMsIDIwMDk2LCAyMDEwOSwgMjAxMjIsIDIwMTM1LCAyMDE0OCwgCi0gICAgMjAxNjEsIDIwMTc0LCAyMDE4NiwgMjAxOTksIDIwMjEyLCAyMDIyNSwgMjAyMzgsIDIwMjUxLCAyMDI2NCwgMjAyNzcsIAotICAgIDIwMjkwLCAyMDMwMywgMjAzMTYsIDIwMzI4LCAyMDM0MSwgMjAzNTQsIDIwMzY3LCAyMDM4MCwgMjAzOTMsIDIwNDA2LCAKLSAgICAyMDQxOSwgMjA0MzIsIDIwNDQ1LCAyMDQ1OCwgMjA0NzAsIDIwNDgzLCAyMDQ5NiwgMjA1MDksIDIwNTIyLCAyMDUzNSwgCi0gICAgMjA1NDgsIDIwNTYxLCAyMDU3NCwgMjA1ODcsIDIwNjAwLCAyMDYxMiwgMjA2MjUsIDIwNjM4LCAyMDY1MSwgMjA2NjQsIAotICAgIDIwNjc3LCAyMDY5MCwgMjA3MDMsIDIwNzE2LCAyMDcyOSwgMjA3NDIsIDIwNzU0LCAyMDc2NSwgMjA3NzMsIDIwNzgxLCAKLSAgICAyMDc4OCwgMjA3OTQsIDIwNzk4LCAyMDgwNCwgMjA4MTAsIDIwODE4LCAyMDgyNCwgMjA4MjksIDIwODMzLCAyMDg0MiwgCi0gICAgOTE0OCwgMjA4NTMsIDIwODYwLCAyMDg2OCwgMjA4NzUsIDIwODgyLCAxMDk0MSwgMjA4ODksIDIwODk4LCAyMDkwMywgCi0gICAgMjA5MDgsIDc4MDUsIDIwOTE1LCAyMDkyMCwgMjA5MjMsIDIwOTI4LCAyMDkzNiwgMjA5NDMsIDIwOTUwLCAyMDk1NywgCi0gICAgMjA5NjMsIDIwOTcyLCAyMDk4MSwgMjA5ODcsIDIwOTk2LCAyMTAwMCwgMjEwMDYsIDIxMDExLCAyMTAyMSwgMjEwMjgsIAotICAgIDIxMDM0LCAyMTA0MiwgMjEwNDgsIDIxMDU1LCAyMTA2NSwgMjEwNzQsIDIxMDc4LCAyMTA4NSwgMjEwODksIDIxMDk0LCAKLSAgICAyMTEwMCwgMjExMDgsIDIxMTEyLCAyMTEyMiwgMTQ0MDIsIDIxMTMxLCAyMTEzNywgMjExNDEsIDIxMTUwLCAxNDQwNywgCi0gICAgMjExNTYsIDIxMTYzLCAyMTE3NCwgMjExODIsIDIxMTkxLCAyMTE5OSwgODkzMSwgMjEyMDcsIDIxMjEyLCAyMTIxOCwgCi0gICAgMjEyMjMsIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDk2MzIsIDIxMjQwLCAyMTI0OCwgMjEyNTUsIDIxMjY0LCAyMTI3MSwgCi0gICAgMjEyNzgsIDEwODcxLCAyMTI4NSwgMjEyOTEsIDIxMjk1LCAyMTMwMSwgMjEzMDgsIDIxMzE0LCAyMTMyMiwgMjEzMjgsIAotICAgIDIxMzM1LCAyMTM0MSwgMjEzNDcsIDIxMzU2LCAyMTM2MCwgMjEzNjgsIDIxMzc3LCAyMTM4NCwgMjEzODksIDIxMzkzLCAKLSAgICAyMTQwNCwgMjE0MDksIDIxNDE0LCAyMTQxOSwgMjE0MzIsIDc5OTUsIDIxNDM2LCAyMTQ0MiwgMjE0NTAsIDIxNDU0LCAKLSAgICAyMTQ2MSwgMjE0NzAsIDIxNDc1LCAxNDY3OCwgMjE0ODMsIDIxNDg3LCAyMTQ5OSwgMjE1MDQsIDIxNTA4LCAyMTUxMSwgCi0gICAgMjE1MTcsIDIxNTIzLCAyMTUyOCwgMjE1MzIsIDIxNTM1LCAyMTU0NiwgMjE1NTEsIDkzNzYsIDIxNTU4LCAyMTU2MywgCi0gICAgOTM4MSwgMjE1NjgsIDIxNTczLCAyMTU3OCwgMjE1ODMsIDIxNTg4LCAyMTU5MywgMjE1OTgsIDIxNjAzLCAyMTYwOCwgCi0gICAgMjE2MTMsIDIxNjE4LCAyMTYyMywgMjE2MjksIDIxNjM0LCAyMTYzOSwgMjE2NDQsIDIxNjQ5LCAyMTY1NCwgMjE2NTksIAotICAgIDIxNjY0LCAyMTY2OSwgMjE2NzQsIDIxNjgwLCAyMTY4NiwgMjE2OTEsIDIxNjk2LCAyMTcwMSwgMjE3MDYsIDIxNzExLCAKLSAgICAyMTcxNiwgMjE3MjEsIDIxNzI2LCAyMTczMSwgMjE3MzcsIDIxNzQyLCAyMTc0NywgMjE3NTIsIDIxNzU4LCAyMTc2NCwgCi0gICAgMjE3NjksIDIxNzc0LCAyMTc3OSwgMjE3ODQsIDIxNzg5LCAyMTc5NCwgMjE3OTksIDIxODA0LCAyMTgxMCwgMjE4MTUsIAotICAgIDIxODIwLCAyMTgyNSwgMjE4MzAsIDIxODM2LCAyMTg0MSwgMjE4NDYsIDIxODUwLCAxMzY4LCAxMjksIDIxODU4LCAyMTg2MiwgCi0gICAgMjE4NjYsIDIxODcwLCAyMTg3NSwgMjE4NzksIDEzMTEwLCAxMjQ2OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMjE4OTcsIAotICAgIDIxOTAxLCAyMTkwNiwgMjE5MTAsIDIxOTE2LCAyMTkyMSwgMjE5MjUsIDIxOTI5LCAyMTkzNywgMjE5NDEsIDIxOTQ1LCAKLSAgICAyMTk1MCwgMjE5NTUsIDIxOTU5LCAyMTk2NSwgMjE5NzAsIDIxOTc0LCAyMTk3OSwgMjE5ODQsIDIxOTg4LCAyMTk5NSwgCi0gICAgMjIwMDIsIDIyMDA5LCAyMjAxMywgMjIwMTcsIDIyMDIyLCAyMjAyNiwgMjIwMjksIDIyMDM1LCAyMjA0OCwgMjIwNTMsIAotICAgIDIyMDYyLCAyMjA2NywgOTQyMSwgMjIwNzIsIDIyMDc1LCAyNzEyLCAyNzE3LCAyMjA3OSwgMjIwODUsIDIyMDkxLCA3MjA5LCAKLSAgICAyMjA5NiwgMjIxMDEsIDIyMTA2LCAyMjExMiwgMjIxMTcsIDEzODk2LCAyMjEyMiwgMjIxMjcsIDIyMTMyLCAyMjEzNywgCi0gICAgMjIxNDMsIDIyMTQ4LCAyMjE1MywgMjIxNTksIDIyMTY0LCAyMjE2OCwgMjIxNzMsIDIyMTc4LCAyMjE4MywgMjIxODgsIAotICAgIDIyMTkyLCAyMjE5NywgMjIyMDEsIDIyMjA2LCAyMjIxMSwgMjIyMTYsIDIyMjIxLCAyMjIyNSwgMjIyMzAsIDIyMjM0LCAKLSAgICAyMjIzOSwgMjIyNDQsIDIyMjQ5LCAyMjI1NCwgMjg4NiwgMjIxNjksIDIyMjU4LCAyMjI2NiwgMjIyNzMsIDk3MjYsIAotICAgIDIyMjg1LCAyMjI5MywgMjIxNzQsIDIyMzAwLCAyMjMwNSwgMjIzMTMsIDIyMTc5LCAyMjMxOCwgMjIzMjMsIDIyMzMxLCAKLSAgICAyMjMzNiwgMjIxODQsIDIyMzQxLCAyMjM0NiwgMjIzNTAsIDIyMzU2LCAyMjM2NCwgMjIzNjcsIDIyMzc0LCAyMjM3OCwgCi0gICAgMjIzODIsIDIyMzg4LCAyMjM5NSwgMjI0MDAsIDg5NTgsIDE3MjcsIDE3MzIsIDIyNDA0LCAyMjQxMCwgMjI0MTYsIDIyNDIxLCAKLSAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTIsIDIyNDU4LCAyMjQ2NSwgCi0gICAgMjI0NzMsIDIyNDc5LCAyMjQ4NSwgMjI0OTAsIDIyNDk1LCAyMjQ5OSwgMTM4MTYsIDEzODIzLCAyMjUwNCwgMjI1MTYsIAotICAgIDIyNTE5LCAyMjUyNiwgMTYzNDksIDIyNTMzLCAyMjU0MSwgMjI1NTIsIDIyNTYxLCAyMjU3NCwgMjI1ODQsIDIyNTk4LCAKLSAgICAyMjYxMCwgMjI2MjQsIDIyNjM2LCAyMjY0NiwgMjI2NTgsIDIyNjY0LCAyMjY3OSwgMjI3MDMsIDIyNzIxLCAyMjc0MCwgCi0gICAgMjI3NTMsIDIyNzY3LCAyMjc4NSwgMjI4MDEsIDIyODE4LCAyMjgzNiwgMjI4NDcsIDIyODY2LCAyMjg4MywgMjI5MDMsIAotICAgIDIyOTIxLCAyMjkzMywgMjI5NDcsIDIyOTYxLCAyMjk3MywgMjI5OTAsIDIzMDA5LCAyMzAyNywgMjMwMzksIDIzMDU3LCAKLSAgICAyMzA3NiwgMTQ1NDYsIDIzMDg5LCAyMzEwOSwgMjMxMjEsIDEwNTE2LCAyMzEzMywgMjMxMzgsIDIzMTQzLCAyMzE0OCwgCi0gICAgMjMxNTQsIDIzMTU5LCAyMzE2MywgMjMxNzAsIDIzOTgsIDIzMTc0LCAyMzE4MCwgMjMxODQsIDIzMTg3LCAyMzE5MSwgCi0gICAgMjMxOTksIDIzMjA1LCAyMjIwMiwgMjMyMDksIDIzMjE4LCAyMzIyOSwgMjMyMzUsIDIzMjQxLCAyMzI1MCwgMjMyNTgsIAotICAgIDIzMjY1LCAyMzI3MCwgMjMyNzQsIDIzMjgxLCAyMzI4NywgMjMyOTYsIDIzMzA0LCAyMzMxMSwgMjMzMjEsIDIzMzMwLCAKLSAgICAyMzM0MCwgMjMzNDUsIDIzMzU0LCAyMzM2MywgMjMzNzQsIDIzMzg1LCAzOTYzLCAyMzM5NSwgMjMzOTksIDIzNDA5LCAKLSAgICAyMzQxNywgMjM0MjcsIDIzNDM4LCAyMzQ0MywgMjM0NTMsIDIzNDYxLCAyMzQ2OCwgMjM0NzQsIDIzNDgxLCAyMzQ4NiwgCi0gICAgMjIyMTIsIDIzNDkwLCAyMzQ5OSwgMjM1MDMsIDIzNTA2LCAyMzUxMSwgMjM1MTgsIDIzNTI3LCAyMzUzNSwgMjM1NDMsIAotICAgIDIzNTUzLCAyMzU2MiwgMjM1NjgsIDIzNTc0LCAyMjIxNywgMjIyMjIsIDIzNTc4LCAyMzU4OCwgMjM1OTgsIDIzNjA4LCAKLSAgICAyMzYxNiwgMjM2MjMsIDIzNjMzLCAyMzY0MSwgMjM2NDksIDIzNjU1LCAyMzY2MywgOTMwLCAyMzY3MiwgMTQ3MzcsIDU0MiwgCi0gICAgMjM2ODYsIDIzNjk1LCAyMzcwMywgMjM3MTQsIDIzNzI1LCAyMzczNSwgMjM3NDQsIDIzNzU2LCAyMzc2NSwgMjM3NzQsIAotICAgIDIzNzgwLCAyMzc4OSwgMjM3OTgsIDIzODA4LCAyMzgxNiwgMjM4MjQsIDkzNTMsIDIzODMwLCAyMzgzMywgMjM4MzcsIAotICAgIDIzODQyLCAyMzg0NywgOTg0MSwgMjIyMzUsIDIyMjQwLCAyMzg1NSwgMjM4NjEsIDIzODY3LCAyMzg3MiwgMjM4NzcsIAotICAgIDIzODgxLCAyMzg4OSwgMjM4OTUsIDIzOTAxLCAyMzkwNSwgMzUyNSwgMjM5MTMsIDIzOTE4LCAyMzkyMywgMjM5MjcsIAotICAgIDIzOTMxLCA5OTIxLCAyMzkzOCwgMjM5NDYsIDIzOTYwLCAyMzk2NywgMjM5NzMsIDk5MzAsIDk5MzYsIDIzOTgxLCAyMzk4OSwgCi0gICAgMjM5OTYsIDI0MDAxLCAyNDAwNiwgMjIyNDUsIDI0MDEyLCAyNDAyMywgMjQwMjcsIDI0MDMyLCAyNjAxLCAyNDAzNywgCi0gICAgMjQwNDgsIDI0MDU0LCAyNDA1OSwgMjQwNjMsIDI0MDY3LCAyNDA3MCwgMjQwNzcsIDI0MDg0LCAyNDA5MSwgMjQwOTcsIAotICAgIDI0MTAxLCAyMjI1MCwgMjQxMDYsIDI0MTEwLCAyNDExNCwgMTAzNywgMjQxMTksIDI0MTI0LCAyNDEyOSwgMjQxMzQsIAotICAgIDI0MTM5LCAyNDE0NCwgMjQxNDksIDI0MTU0LCAyNDE1OSwgMjQxNjQsIDI0MTY5LCAyNDE3NCwgMjQxNzksIDI0MTg0LCAKLSAgICAyNDE5MCwgMjQxOTUsIDI0MjAwLCAyNDIwNSwgMjQyMTAsIDI0MjE1LCAyNDIyMCwgMjQyMjYsIDI0MjMxLCAyNDIzNiwgCi0gICAgMjQyNDEsIDI0MjQ2LCAyNDI1MSwgMjQyNTYsIDI0MjYxLCAyNDI2NywgMjQyNzMsIDI0Mjc4LCAyNDI4NCwgMjQyODksIAotICAgIDI0Mjk0LCA1LCAyNDMwMCwgMjQzMDQsIDI0MzA4LCAyNDMxMiwgMjQzMTcsIDI0MzIxLCAyNDMyNSwgMjQzMjksIDI0MzMzLCAKLSAgICAyNDMzOCwgMjQzNDIsIDI0MzQ3LCAyNDM1MSwgMjQzNTQsIDI0MzU4LCAyNDM2MywgMjQzNjcsIDI0MzcyLCAyNDM3NiwgCi0gICAgMjQzODAsIDI0Mzg0LCAyNDM4OSwgMjQzOTMsIDI0Mzk3LCAyNDQwNywgMjQ0MTIsIDI0NDE2LCAyNDQyMCwgMjQ0MjUsIAotICAgIDI0NDMwLCAyNDQzOSwgMjQ0NDQsIDI0NDQ5LCAyNDQ1MywgMjQ0NTcsIDI0NDcwLCAyNDQ4MiwgMjQ0OTEsIDI0NTAwLCAKLSAgICAyNDUwNiwgMjQ1MTEsIDI0NTE1LCAyNDUxOSwgMjQ1MjksIDI0NTM4LCAyNDU0NiwgMjQ1NTIsIDI0NTU3LCAyNDU2MSwgCi0gICAgMjQ1NjgsIDI0NTc4LCAyNDU4NywgMjQ1OTUsIDI0NjAzLCAyNDYxMCwgMjQ2MTgsIDI0NjI3LCAyNDYzNiwgMjQ2NDQsIAotICAgIDI0NjQ5LCAyNDY1MywgMjQ2NTcsIDI0NjYwLCAyNDY2MiwgMjQ2NjYsIDI0NjcwLCAyNDY3NSwgMjQ2ODAsIDI0Njg0LCAKLSAgICAyNDY4OCwgMjQ2OTEsIDI0Njk1LCAyNDY5OCwgMjQ3MDIsIDI0NzA1LCAyNDcwOCwgMjQ3MTIsIDI0NzE4LCAyNDcyMiwgCi0gICAgMjQ3MjYsIDI0NzMwLCAyNDczNSwgMjQ3NDAsIDI0NzQ1LCAyNDc0OSwgMjQ3NTIsIDI0NzU3LCAyNDc2MywgMjQ3NjgsIAotICAgIDI0Nzc0LCAyNDc3OSwgMjQ3ODMsIDI0Nzg3LCAyNDc5MSwgMjQ3OTYsIDI0ODAwLCAyNDgwNSwgMjQ4MDksIDI0ODEzLCAKLSAgICAyNDgyMCwgMjQ4MjQsIDI0ODI3LCAyNDgzMSwgMjQ4MzcsIDI0ODQzLCAyNDg0NywgMjQ4NTEsIDI0ODU2LCAyNDg2MywgCi0gICAgMjQ4NjksIDI0ODczLCAyNDg4MiwgMjQ4ODYsIDI0ODkwLCAyNDg5MywgMjQ4OTksIDI0OTA0LCAyNDkxMCwgMTQ4OSwgCi0gICAgMTc5MSwgMjQ5MTUsIDI0OTIwLCAyNDkyNSwgMjQ5MzAsIDI0OTM1LCAyNDk0MCwgMjQ5NDUsIDIxNDgsIDIxOTQsIDI0OTUwLCAKLSAgICAyNDk1MywgMjQ5NTcsIDI0OTYxLCAyNDk2NiwgMjQ5NzAsIDI0OTc0LCAyNDk3NywgMjQ5ODIsIDI0OTg3LCAyNDk5MSwgCi0gICAgMjQ5OTQsIDI0OTk5LCAyNTAwMywgMjUwMDgsIDI1MDEyLCAxNDc0OSwgMjUwMTcsIDI1MDIwLCAyNTAyMywgMjUwMjcsIAotICAgIDI1MDMyLCAyNTAzNiwgMjUwNDksIDI1MDUzLCAyNTA1NiwgMjUwNjQsIDI1MDczLCAyNTA4MCwgMjUwODUsIDI1MDkxLCAKLSAgICAyNTA5NywgMjUxMDUsIDI1MTEyLCAyNTExOSwgMjUxMjMsIDI1MTI3LCAyNTEzMSwgMjUxMzYsIDI1MTQxLCAyNTE0NSwgCi0gICAgMjUxNTMsIDI1MTU4LCAyNTE3MCwgMjUxODEsIDI1MTg2LCAyNTE5MCwgMjUxOTQsIDI1MjAwLCAyNTIwNSwgMjUyMTAsIAotICAgIDI1MjE0LCAyNTIxOCwgMjUyMjEsIDI1MjI3LCA3OTE1LCAyMzE2LCAyNTIzMSwgMjUyMzYsIDI1MjUyLCA5NDY4LCAyNTI3MiwgCi0gICAgMjUyODEsIDI1Mjk3LCAyNTMwMSwgMjUzMDQsIDI1MzEwLCAyNTMyMCwgMjUzMjYsIDI1MzM1LCAyNTM1MCwgMjUzNjIsIAotICAgIDI1MzczLCAyNTM4MSwgMjUzOTAsIDI1Mzk2LCAyNTQwNSwgMjU0MTUsIDI1NDI2LCAyNTQzNywgMjU0NDYsIDI1NDUzLCAKLSAgICAyNTQ2MiwgMjU0NzAsIDI1NDc3LCAyNTQ4NSwgMjU0OTIsIDI1NDk5LCAyNTUxMiwgMjU1MTksIDI1NTI1LCAyNTUzMCwgCi0gICAgMjU1MzksIDI1NTQ1LCAyNTU1MCwgMjU1NTgsIDI1NTY1LCAyMzQxOSwgMjU1NzcsIDI1NTg5LCAyNTYwMywgMjU2MTEsIAotICAgIDI1NjE4LCAyNTYzMCwgMjU2MzksIDI1NjQ4LCAyNTY1NiwgMjU2NjQsIDI1NjcyLCAyNTY3OSwgMjU2ODgsIDI1Njk2LCAKLSAgICAyNTcwNiwgMjU3MTUsIDI1NzI1LCAyNTczNCwgMjU3NDMsIDI1NzUxLCAyNTc1NiwgMjU3NjAsIDI1NzYzLCAyNTc2NywgCi0gICAgMjU3NzEsIDI1Nzc1LCAyNTc3OSwgMjU3ODMsIDI1Nzg5LCAyNTc5NSwgMjU4MDMsIDE0Nzk0LCAyNTgxMCwgMjU4MTUsIAotICAgIDI1ODIyLCAyNTgyOCwgMjU4MzUsIDE0ODAyLCAyNTg0MiwgMjU4NDUsIDI1ODU3LCAyNTg2NSwgMjU4NzEsIDI1ODc2LCAKLSAgICAyNTg4MCwgOTg3MSwgMjU4OTEsIDI1OTAxLCAyNTkxMCwgMjU5MTcsIDI1OTIxLCAxNDgwNywgMjU5MjQsIDI1OTMxLCAKLSAgICAyNTkzNSwgMjU5NDEsIDI1OTQ0LCAyNTk1MSwgMjU5NTcsIDI1OTY0LCAyNTk3MCwgMjU5NzQsIDI1OTc5LCAyNTk4MywgCi0gICAgMjU5OTIsIDI1OTk5LCAyNjAwNSwgNzk1NiwgMjYwMTIsIDI2MDIwLCAyNjAyNywgMjYwMzMsIDI2MDM4LCAyNjA0NCwgCi0gICAgMjYwNTAsIDI2MDU4LCAyNjA2MiwgMjYwNjUsIDI2MDY3LCAyNTc2OCwgMjYwNzYsIDI2MDgyLCAyNjA5MiwgMjYwOTcsIAotICAgIDI2MTA0LCAyNjExMCwgMjYxMTUsIDI2MTIwLCAyNjEyNSwgMjYxMjksIDI2MTM0LCAyNjE0MSwgMjYxNTAsIDI2MTU0LCAKLSAgICAyNjE2MSwgMjYxNzAsIDI2MTc2LCAyNjE4MSwgMjYxODcsIDI2MTkyLCAyNjE5OSwgMjYyMTAsIDI2MjE1LCAyNjIxOSwgCi0gICAgMjYyMjksIDI2MjM1LCAyNjIzOSwgMjYyNDQsIDI2MjU0LCAyNjI2MywgMjYyNjcsIDI2Mjc0LCAyNjI4MiwgMjYyODksIAotICAgIDI2Mjk1LCAyNjMwMCwgMjYzMDgsIDI2MzE1LCAyNjMyNywgMjYzMzYsIDI2MzQwLCAxMzA0NiwgMjYzNDgsIDI2MzU4LCAKLSAgICAyNjM2MiwgMjUwNjAsIDI2MzczLCAyNjM3OCwgMjYzODIsIDI2Mzg5LCAyNjM5NiwgMjE5NjEsIDI1NjkzLCAyNjQwMSwgCi0gICAgMjY0MDUsIDI2NDA4LCAyMjg1MywgMjY0MTMsIDI2NDI3LCAyNjQ0MywgMjY0NjEsIDI2NDgwLCAyNjQ5NywgMjY1MTUsIAotICAgIDIyODcyLCAyNjUzMiwgMjY1NTIsIDIyODg5LCAyNjU2NCwgMjY1NzYsIDE1NzMyLCAyNjU4OCwgMjI5MDksIDI2NjAyLCAKLSAgICAyNjYxNCwgMTA1MjksIDI2NjI4LCAyNjYzMywgMjY2MzgsIDI2NjQzLCAyNjY0OSwgMjY2NTUsIDI2NjYxLCAyNjY2NSwgCi0gICAgMjY2NzIsIDI2Njc3LCAyNjY4NywgMjY2OTMsIDEwMTc2LCAyNjY5OSwgMjY3MDEsIDI2NzA2LCAyNjcxNCwgMjY3MTgsIAotICAgIDI2MTM3LCAyNjcyNCwgMjY3MzEsIDExNTE3LCAxMTUyNywgMjY3MzgsIDI2NzQ4LCAyNjc1MywgMjY3NTcsIDI2NzYwLCAKLSAgICAyNjc2NiwgMjY3NzQsIDI2Nzg2LCAyNjc5NiwgMjY4MTIsIDI2ODI1LCAyNjgzOSwgMTU3NTAsIDI2ODUzLCAyNjg2MCwgCi0gICAgMjY4NjQsIDI2ODY3LCAyNjg3MiwgMjY4NzYsIDI2ODgzLCAyNjg5MCwgMjY5MDAsIDI2OTA1LCAyNjkxMCwgMjY5MTUsIAotICAgIDI2OTIzLCAyNjkzMSwgMjY5NDAsIDI2OTQ1LCA5NTY1LCAyNjk0OSwgMjY5NTIsIDI2OTU1LCAyNjk2MCwgMjY5NjcsIAotICAgIDI2OTcyLCAyNjk4OCwgMjY5OTYsIDI3MDA0LCA5NDE2LCAyNzAxMiwgMjcwMTcsIDI3MDIxLCAyNzAyNywgMjcwMzMsIAotICAgIDI3MDM2LCAyNzA0MiwgMjcwNTQsIDI3MDYyLCAyNzA2OSwgMjcwNzUsIDI3MDgyLCAyNzA5MywgMjcxMDcsIDI3MTIwLCAKLSAgICAyNzEyOSwgMjcxMzgsIDI3MTUwLCAyNzE2MSwgMjcxNzEsIDI3MTgwLCAyNzE4OSwgMjcxOTcsIDI3MjA4LCA3OTM4LCAKLSAgICAyNzIxNSwgMjcyMjEsIDI3MjI2LCAyNzIzMiwgMjcyMzksIDI3MjQ5LCAyNzI1OSwgMjcyNjgsIDI3Mjc0LCAyNzI4MSwgCi0gICAgMjcyODYsIDI3MjkzLCAyNzMwMSwgMjczMDksIDI3MzIxLCA2MjQ2LCAyNzMyOCwgMjczMzcsIDI3MzQ1LCAyNzM1MSwgCi0gICAgMjczNTcsIDI3MzYyLCAyNzM2NiwgMjczNjksIDI3Mzc1LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5NiwgMjc0MDgsIAotICAgIDI3NDE5LCAyNzQyOCwgMjc0MzYsIDE0OTM0LCAyNzQ0MSwgMjc0NDcsIDI3NDUzLCAxMTUxMCwgODYzNSwgMjc0NTgsIAotICAgIDI3NDYyLCAyNzQ2NSwgMjc0NjgsIDI3NDc0LCAyNzQ4MiwgMjc0OTAsIDI3NDk0LCAyNzQ5OCwgMjc1MDMsIDI3NTA2LCAKLSAgICAyNzUxNSwgMjc1MTksIDI3NTI3LCAyNzUzOCwgMjc1NDIsIDI3NTQ4LCAyNzU1NCwgMjc1NTgsIDI3NTY0LCAyNzU3MiwgCi0gICAgMjc1OTQsIDI3NjE4LCAyNzYyNSwgMjc2MzIsIDI3NjM4LCAyNzY0NiwgMjc2NTIsIDI3NjU3LCAyNzY2OCwgMjc2ODYsIAotICAgIDI3NjkzLCAyNzcwMSwgMjc3MDUsIDI3NzE0LCAyNzcyNywgMjc3MzUsIDI3NzQ3LCAyNzc1OCwgMjc3NjgsIDI3NzgyLCAKLSAgICAyNzc5MSwgMjc3OTksIDI3ODExLCA5NDg1LCAyNzgyMiwgMjc4MzMsIDI3ODQ1LCAyNzg1NSwgMjc4NjQsIDI3ODY5LCAKLSAgICAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5NiwgMjc5MDAsIDI3OTAzLCAyNzkwNiwgMjc5MTQsIDI3OTIyLCAyNzkzMSwgCi0gICAgMjc5NDEsIDI3OTUwLCAyNzk1NiwgMjc5NzAsIDI2NjMsIDI3OTkyLCAyODAwMywgMjgwMTIsIDI4MDIyLCAyODAzNCwgCi0gICAgMjgwNDMsIDI4MDUyLCAyODA2MiwgMjgwNzAsIDI4MDc4LCAyODA4NywgMjgwOTIsIDI4MTAzLCAyODEwOCwgMjgxMTksIAotICAgIDI4MTIzLCAyODEzMywgMjgxNDIsIDI4MTUwLCAyODE2MCwgMjgxNzAsIDI4MTc4LCAyODE4NywgMjgxOTQsIDI4MjAyLCAKLSAgICAyODIwOSwgMjgyMTgsIDI4MjIyLCAyODIzMCwgMjgyMzcsIDI4MjQ1LCAyODI1MiwgMjgyNjMsIDI4Mjc4LCAyODI4NSwgCi0gICAgMjgyOTEsIDI4MzAxLCAyODMxMCwgMjgzMTYsIDI4MzIwLCAyODMyNywgMjgzMzEsIDE0MDE4LCAyODMzNywgMjgzNDEsIAotICAgIDI4MzQ2LCAyODM1MywgMjgzNTcsIDI4MzYxLCAyODM2OSwgMjgzNzcsIDI4MzgzLCAyODM5MiwgMjgzOTksIDI4NDA0LCAKLSAgICAyODQwOSwgMjg0MTksIDIzNDg4LCAyODQyMywgMjg0MjYsIDI4NDMxLCAyODQzNiwgMjg0NDEsIDI4NDQ2LCAyODQ1MSwgCi0gICAgMjg0NTYsIDI4NDYxLCAyODQ2NiwgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODgsIDEyMTgsIDcwNCwgMjg0OTMsIDI4NTAyLCAKLSAgICAyMzY0LCAyODUwOSwgMjg1MTQsIDI4NTE4LCAyODUyNCwgMTI2NywgNTQ2LCAzMTgsIDI4NTI5LCAyODUzOCwgMjg1NDYsIAotICAgIDI4NTU1LCAyODU2MywgMjg1NzQsIDI4NTgzLCAyODU5MSwgMjg1OTUsIDI4NTk4LCAyODYwNiwgMjg2MTQsIDI4NjE5LCAKLSAgICAxNDc2MiwgMjg2MjUsIDI4NjMxLCAyODYzNywgNTg3MiwgMjg2NDIsIDI4NjQ2LCAyODY1MiwgMjg2NTYsIDI4NjYzLCAKLSAgICAxNDU1LCAyODY2OSwgMjg2NzYsIDk1NzIsIDI4NjgwLCAyODY5MCwgMjg2OTgsIDI4NzA0LCAyODcxMywgMjg3MjEsIAotICAgIDI4NzI3LCAyODczNSwgMjg3NDIsIDExMTAzLCAyODc0OCwgMjg3NTUsIDI4NzYwLCAyODc2NywgMTQ5NiwgMjE0NywgCi0gICAgMjg3NzMsIDI4Nzc5LCAyODc4NiwgMjg3OTcsIDI4ODA4LCAyODgxNiwgMjg4MjMsIDI4ODMzLCAyODg0MiwgMjg4NTAsIAotICAgIDI4ODU5LCAyODg2NiwgMjg4NzMsIDI4ODg2LCAyODg5NywgMTI3MiwgMjg5MTYsIDI4OTIxLCAyODkyOSwgMzU3NSwgCi0gICAgMjg5MzMsIDI4OTM4LCAyODk0MiwgMTQ1OSwgMjQ2ODksIDI4OTUyLCAyODk1NiwgMjg5NjEsIDI4OTY1LCAzNDkzLCAKLSAgICAyODk3MSwgMjg5NzksIDI4OTg2LCAyODk5NywgMjkwMDUsIDI5MDEzLCAzNTc2LCAyNzksIDI5MDE4LCAyOTAyNiwgMjkwMzQsIAotICAgIDI5MDQxLCAyOTA0NywgMjkwNTIsIDIyMTYsIDI5MDU5LCAyOTA2NSwgMjU5NzUsIDI2MjA1LCAyOTA3MSwgMTA2LCAyOTA3NSwgCi0gICAgMjkwNzksIDI5MDg1LCA2MTUsIDkzMjEsIDI5MDkwLCAyOTA5NywgMjkxMDMsIDIzMjcsIDI5MTA3LCAyOTExMSwgMTUxNzQsIAotICAgIDI5MTE0LCAyOTExOSwgMjkxMjYsIDI5MTMyLCAyOTEzNywgMjkxNDUsIDI5MTUyLCAyOTE1OCwgMjIzMzgsIDI5MTYyLCAKLSAgICAyOTE2NiwgMzY0NiwgMTY2MTIsIDI5MTcwLCAyOTE3NSwgMjkxNzgsIDI5MTg2LCAyOTE5NCwgMjkxOTksIDI5MjAyLCAKLSAgICAyOTIwOSwgMjkyMTksIDI5MjMxLCAyOTIzNiwgMjkyNDAsIDI5MjQ4LCAyOTI1NSwgMjkyNjEsIDI5MjY4LCAyOTI3NSwgCi0gICAgMjkyNzgsIDI5MjgyLCAyOTI4NiwgMTQ2MywgMjkyOTYsIDI5Mjk4LCAyOTMwMywgMjkzMDksIDI5MzE1LCAyOTMyMCwgCi0gICAgMjkzMjUsIDI5MzMwLCAyOTMzNSwgMjkzNDAsIDI5MzQ1LCAyOTM1MCwgMjkzNTUsIDI5MzYwLCAyOTM2NSwgMjkzNzAsIAotICAgIDI5Mzc1LCAyOTM4MCwgMjkzODUsIDI5MzkxLCAyOTM5NywgMjk0MDMsIDI5NDA5LCAyOTQxNCwgMjk0MTksIDI5NDI0LCAKLSAgICAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MiwgMjk0NjcsIDI5NDcyLCAyOTQ3NywgCi0gICAgMjk0ODIsIDI5NDg4LCAyOTQ5MywgMjk0OTksIDI5NTA0LCAyOTUwOSwgMjk1MTQsIDI5NTE5LCAyOTUyNSwgMjk1MzAsIAotICAgIDI5NTM2LCAyOTU0MSwgMjk1NDYsIDI5NTUxLCAyOTU1NiwgMjk1NjEsIDI5NTY2LCAyOTU3MSwgMjk1NzYsIDI5NTgxLCAKLSAgICAyOTU4NywgMjk1OTMsIDI5NTk5LCAyOTYwNCwgMjk2MDksIDI5NjE0LCAyOTYxOSwgMjk2MjUsIDI5NjMxLCAyOTYzNywgCi0gICAgMjk2NDMsIDI5NjQ5LCAyOTY1NSwgMjk2NjAsIDI5NjY2LCAyOTY3MSwgMjk2NzYsIDI5NjgxLCAyOTY4NiwgMjk2OTIsIAotICAgIDI0NDMsIDI5Njk3LCAyNDUwLCAyNDU3LCAyNzU0LCAyOTcwMiwgMjQ2MywgMjQ3MywgMjk3MDgsIDI5NzEyLCAyOTcxNywgCi0gICAgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzgsIDI5NzQyLCAyOTc0NywgMjk3NTMsIDI5NzU4LCAyOTc2MywgMjk3NjgsIAotICAgIDI5Nzc0LCAyOTc3OSwgMjk3ODMsIDI5Nzg3LCAyOTc5MiwgMjk3OTcsIDI5ODAyLCAyOTgwNywgMjk4MTIsIDI5ODE4LCAKLSAgICAyOTgyNCwgMjk4MjksIDI5ODMzLCAyOTgzOCwgMjk4NDQsIDI5ODQ4LCAyOTg1MywgMjk4NTgsIDI5ODYzLCAyOTg2OCwgCi0gICAgMjk4NzIsIDI5ODc1LCAyOTg4MCwgMjk4ODUsIDI5ODkwLCAyOTg5NSwgMjk5MDAsIDI5OTA2LCAyOTkxMiwgMjk5MTcsIAotICAgIDI5OTIyLCAyOTkyNiwgMjk5MzEsIDI5OTM2LCAyOTk0MSwgMjk5NDYsIDI5OTUxLCAyOTk1NSwgMjk5NjAsIDI5OTY1LCAKLSAgICAyOTk3MCwgMjk5NzQsIDI5OTc4LCAyOTk4MiwgMjk5ODcsIDI5OTk1LCAzMDAwMCwgMzAwMDYsIDMwMDEyLCAzMDAxOCwgCi0gICAgMzAwMjMsIDMwMDI3LCAzMDAzMCwgMzAwMzUsIDMwMDQwLCAzMDA0NCwgMzAwNDksIDMwMDUzLCAzMDA1OCwgMzAwNjIsIAotICAgIDMwMDY1LCAzMDA3MCwgMTcyODksIDMwMDc1LCAzMDA4MCwgMzAwODUsIDMwMDkzLCAyMTI2NywgMjg2NzMsIDkwMTksIAotICAgIDMwMDk4LCAzMDEwMywgMzAxMDcsIDMwMTEyLCAzMDExNiwgMzAxMjAsIDMwMTI1LCAzMDEyOSwgMzAxMzIsIDMwMTM1LCAKLSAgICAzMDEzOSwgMzAxNDQsIDMwMTQ4LCAzMDE1NiwgMzAxNjAsIDMwMTYzLCAzMDE2OCwgMzAxNzIsIDMwMTc2LCAzMDE4MSwgCi0gICAgMzAxODYsIDMwMTkwLCAzMDE5NiwgMzAyMDEsIDMwMjA2LCAzMDIxMywgMzAyMjAsIDMwMjI0LCAzMDIyNywgMzAyMzMsIAotICAgIDMwMjQyLCAzMDI0OSwgMzAyNTcsIDMwMjY0LCAzMDI2OCwgMzAyNzMsIDMwMjc3LCAzMDI4MSwgMzAyODcsIDMwMjkzLCAKLSAgICAzMDI5NywgMzAzMDMsIDMwMzA4LCAzMDMxMywgMzAzMjAsIDMwMzI2LCAzMDMzMiwgMzAzMzgsIDMwMzQ0LCAzMDM1MSwgCi0gICAgMzAzNTcsIDMwMzYzLCAzMDM2OSwgMzAzNzUsIDMwMzgxLCAzMDM4NywgMzAzOTMsIDMwNDAwLCAzMDQwNiwgMzA0MTMsIAotICAgIDMwNDE5LCAzMDQyNSwgMzA0MzEsIDMwNDM3LCAzMDQ0MywgMzA0NDksIDMwNDU1LCAzMDQ2MSwgMzA0NjcsIDExNDExLCAKLSAgICAzMDQ3MywgMzA0NzgsIDMwNDgzLCAzMDQ4NiwgMzA0OTQsIDMwNDk5LCAzMDUwOCwgMzA1MTQsIDMwNTE5LCAzMDUyNCwgCi0gICAgMzA1MjksIDMwNTMzLCAzMDUzOCwgMzA1NDMsIDMwNTQ4LCAzMDU1MywgMzA1NTgsIDMwNTY1LCAzMDU3MiwgMzA1NzgsIAotICAgIDMwNTg0LCAzMDU4OSwgMTYyOTAsIDMwNTk2LCAzMDYwMiwgMzA2MDksIDMwNjE1LCAzMDYyMSwgMzA2MjYsIDMwNjM0LCAKLSAgICAzMDYzOSwgMTYwNjksIDMwNjQzLCAzMDY0OCwgMzA2NTMsIDMwNjU5LCAzMDY2NCwgMzA2NjksIDMwNjczLCAzMDY3OCwgCi0gICAgMzA2ODMsIDMwNjg5LCAzMDY5NCwgMzA2OTksIDMwNzAzLCAzMDcwOCwgMzA3MTMsIDMwNzE3LCAzMDcyMiwgMzA3MjcsIAotICAgIDMwNzMyLCAzMDczNiwgMzA3NDEsIDMwNzQ2LCAzMDc1MSwgMzA3NTUsIDMwNzU5LCAxNTI4MCwgMzA3NjMsIDMwNzcyLCAKLSAgICAzMDc3OCwgMzA3ODQsIDMwNzkzLCAzMDgwMSwgMzA4MTAsIDMwODE4LCAzMDgyMywgMzA4MjcsIDMwODM0LCAzMDg0MCwgCi0gICAgMzA4NDQsIDMwODQ3LCAzMDg1MiwgMzA4NjEsIDMwODY5LCAzMDg3NCwgMTQ5NSwgMzA4ODAsIDMwODgzLCAzMDg4NywgCi0gICAgMjI0MTEsIDIyNDE3LCAzMDg5MywgMzA4OTcsIDMwOTA4LCAzMDkxOSwgMzA5MzAsIDMwOTQyLCAzMDk0OSwgMzA5NTYsIAotICAgIDMwOTYxLCAzMDk2NSwgNTkwOSwgNzU1LCAyMTI2NiwgMzA5NzMsIDMwOTc4LCAzMDk4MiwgMzA5ODcsIDMwOTkxLCAzMDk5NywgCi0gICAgMzEwMDIsIDMxMDA4LCAzMTAxMywgMzEwMTksIDMxMDI0LCAzMTAzMCwgMzEwMzUsIDMxMDQxLCAzMTA0NywgMzEwNTMsIAotICAgIDMxMDU4LCAzMTAxNCwgMzEwMjAsIDMxMDYyLCAzMTA2NywgMzEwNzMsIDMxMDc4LCAzMTA4NCwgMzEwODksIDMxMDk1LCAKLSAgICAzMTEwMCwgMzEwMjUsIDEwNDE0LCAzMTEwNCwgMzEwMzYsIDMxMDQyLCAzMTA0OCwgMjgzMSwgMzQyMywgMzExMTAsIAotICAgIDMxMTEzLCAzMTExOSwgMzExMjUsIDMxMTMxLCAzMTEzOCwgMzExNDQsIDMxMTUwLCAzMTE1NiwgMzExNjIsIDMxMTY4LCAKLSAgICAzMTE3NCwgMzExODAsIDMxMTg2LCAzMTE5MiwgMzExOTgsIDMxMjA0LCAzMTIxMCwgMzEyMTcsIDMxMjIzLCAzMTIyOSwgCi0gICAgMzEyMzUsIDMxMjQxLCAzMTI0NywgMzEyNTAsIDMxMjU1LCAzMTI1OCwgMzEyNjUsIDMxMjczLCAzMTI3OCwgMzEyODMsIAotICAgIDMxMjg5LCAzMTI5NCwgMzEyOTksIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNSwgMzEzMzAsIDMxMzM2LCAKLSAgICAzMTM0MSwgMzEzNDcsIDMxMzUzLCAzMTM1NywgMzEzNjIsIDMxMzY3LCAzMTM3MiwgMzEzNzcsIDMxMzgxLCAzMTM4NiwgCi0gICAgMzEzOTEsIDMxMzk2LCAzMTQwMiwgMzE0MDgsIDMxNDE0LCAzMTQyMCwgMzE0MjUsIDMxNDI5LCAzMTQzMiwgMzE0MzgsIAotICAgIDMxNDQ0LCAzMTQ1MywgMzE0NjEsIDMxNDY4LCAzMTQ3MywgMzE0NzcsIDMxNDgxLCAzMTQ4NiwgMTUxMzMsIDMxNDkxLCAKLSAgICAzMTQ5OSwgMzE1MDUsIDM2ODMsIDEzNzcsIDMxNTEwLCAzMTUxNCwgODAwNSwgMzE1MjAsIDMxNTI2LCAzMTUzMywgODAxNCwgCi0gICAgMzE1MzcsIDMxNTQzLCAzMTU1MCwgMzE1NTYsIDMxNTY1LCAzMTU3MywgMzE1ODUsIDMxNTg5LCAzMTU5NiwgMzE2MDIsIAotICAgIDMxNjA2LCAzMTYwOSwgMzE2MTgsIDMxNjI2LCAzMTAxNSwgMzE2MzEsIDMxNjQxLCAzMTY1MSwgMzE2NjEsIDMxNjY3LCAKLSAgICAzMTY3MiwgMzE2ODIsIDMxNjg3LCAzMTcwMCwgMzE3MTQsIDMxNzI1LCAzMTczNywgMzE3NDksIDMxNzYzLCAzMTc3NiwgCi0gICAgMzE3ODgsIDMxODAwLCAxNDU4NywgMzE4MTQsIDMxODE5LCAzMTgyNCwgMzE4MjgsIDMxODMyLCAzMTgzNiwgMTc4MCwgCi0gICAgMjcxNTksIDMxODQwLCAzMTg0NSwgMzEwNjMsIDMxODUwLCAzMTg1MywgMzE4NTgsIDMxODYzLCAzMTg2OCwgMzE4NzQsIAotICAgIDMxODgwLCAxMDA5MSwgMzE4ODUsIDMxODkyLCAxNTY4NCwgMzE4OTgsIDMxOTAzLCAzMTkwOCwgMzE5MTIsIDMxOTE3LCAKLSAgICAzMTkyMiwgMzEwNjgsIDMxOTI3LCAzMTkzMiwgMzE5MzcsIDMxOTQzLCAzMTA3NCwgMzE5NDgsIDMxOTUxLCAzMTk1OCwgCi0gICAgMzE5NjYsIDMxOTcyLCAzMTk3OCwgMzE5ODQsIDMxOTk1LCAzMjAwMCwgMzIwMDcsIDMyMDE0LCAzMjAyMSwgMzIwMjksIAotICAgIDMyMDM4LCAzMjA0NywgMzIwNTMsIDMyMDU5LCAzMjA2NywgMzEwNzksIDMyMDcyLCAzMjA3OCwgMzIwODQsIDMxMDg1LCAKLSAgICAzMjA4OSwgMzIwOTQsIDMyMTAyLCAzMjExMCwgMzIxMTYsIDMyMTIzLCAzMjEyOSwgMzIxMzYsIDMyMTQzLCAzMjE0OSwgCi0gICAgMzIxNTcsIDMyMTY3LCAzMjE3NCwgMzIxNzksIDMyMTg1LCAzMjE5MCwgMzIxOTUsIDMyMjAyLCAzMjIxMSwgMzIyMTksIAotICAgIDMyMjI0LCAzMjIzMCwgMzIyMzcsIDMyMjQ1LCAzMjI1MSwgMzIyNTYsIDMyMjYyLCAzMjI3MSwgMjc5MzYsIDMyMjc4LCAKLSAgICAzMjI4MiwgMzIyODcsIDMyMjk2LCAzMjMwMSwgMzIzMDYsIDMyMzExLCAxMjM5OCwgMzIzMTksIDMyMzI0LCAzMjMyOSwgCi0gICAgMzIzMzQsIDMyMzM4LCAzMjM0MywgMzIzNDgsIDMyMzU1LCAzMjM2MCwgMzIzNjUsIDMyMzcwLCAzMTA5MCwgMjEyMDMsIAotICAgIDMyMzc2LCAyNTE5LCAyNDQsIDMyMzc5LCAzMjM4MiwgMzIzODYsIDMyMzkwLCAzMjQwMCwgMzI0MDgsIDMyNDEyLCAzMjQxOSwgCi0gICAgMzI0MjYsIDMyNDMwLCAzMjQzMywgMzI0MzksIDMyNDQ3LCAzMjQ1NSwgMzI0NTksIDMyNDYzLCAzMjQ2NiwgMzI0NzMsIAotICAgIDMyNDc3LCAzMjQ4MSwgMzI0ODgsIDMyNDk2LCAzMTAyNiwgMzI1MDMsIDMyNTExLCAxMDE1MSwgNjYwLCAzMDgsIDMyNTIzLCAKLSAgICAzMjUyOCwgMzI1MzMsIDMyNTM5LCAzMjU0NCwgMzI1NDksIDM3MDQsIDMyNTU0LCAzMjU1NywgMzI1NjIsIDMyNTY3LCAKLSAgICAzMjU3MiwgMzI1NzcsIDMyNTgyLCAzMjU4OSwgMjI1MTIsIDMyNTk0LCAzMjU5OSwgMzI2MDQsIDMyNjA5LCAzMjYxNCwgCi0gICAgMzI2MjAsIDMyNjI1LCAzMjYzMSwgMzEyNjEsIDMyNjM3LCAzMjY0MiwgMzI2NDgsIDMyNjU0LCAzMjY2NCwgMzI2NjksIAotICAgIDMyNjc0LCAzMjY3OCwgMzI2ODMsIDMyNjg4LCAzMjY5MywgMzI2OTgsIDMyNzExLCAzMjcxNiwgMjIyODksIDE2NjkyLCAKLSAgICAzNzEwLCAzMjcyMCwgMzI3MjUsIDMyNzMwLCAzMjczNiwgMzI3NDEsIDMyNzQ2LCAzMjc1MCwgMzI3NTUsIDMyNzYwLCAKLSAgICAzMjc2NiwgMzI3NzEsIDMyNzc2LCAxMzgyLCAzMjc4MCwgMzI3ODUsIDMyNzkwLCAzMjc5NSwgMzI3OTksIDMyODA0LCAKLSAgICAzMjgwOSwgMzI4MTQsIDMyODIwLCAzMjgyNiwgMzI4MzEsIDMyODM1LCAzMjgzOSwgMzI4NDQsIDMyODQ5LCAzMjg1NCwgCi0gICAgMzI4NTgsIDMyODY2LCAzMjg3MCwgMzI4NzYsIDMyODgwLCAzMjg4NywgMTY0ODUsIDMxMDM3LCAzMjg5MywgMzI5MDAsIAotICAgIDMyOTA4LCAzMjkxNSwgMzI5MjEsIDMyOTM0LCAzMjk0NiwgMzI5NTIsIDMyOTU2LCAyNzczLCAzMjk2MCwgMzI5NjQsIAotICAgIDMyNDY4LCAzMjk3MywgMzI5ODQsIDMyOTg5LCAzMjk5NCwgMzI5OTksIDMzMDAzLCAzMzAwOCwgMjI0MjIsIDMzMDEyLCAKLSAgICAzMzAxNiwgMzMwMjEsIDMxMDQzLCAyMTI4NywgMzMwMjUsIDMzMDMwLCAzMzAzNiwgMzMwNDEsIDMzMDQ1LCAzMzA0OSwgCi0gICAgMzMwNTIsIDMzMDU2LCAzMzA2MiwgMzMwNzMsIDMzMDg1LCAzMTA0OSwgMzMwOTAsIDMzMDkzLCAzMzA5NywgMzQ3LCAKLSAgICAzMzEwMiwgMzMxMDcsIDMzMTEyLCAzMzExNywgMzMxMjIsIDMzMTI3LCAzMzEzMywgMzMxMzgsIDMzMTQzLCAzMzE0OSwgCi0gICAgMzMxNTQsIDMzMTYwLCAzMzE2NSwgMzMxNzEsIDMzMTc2LCAzMzE4MSwgMzMxODYsIDMzMTkxLCAzMzE5NiwgMzMyMDEsIAotICAgIDMzMjA2LCAzMzIxMSwgMzMyMTcsIDMzMjIyLCAzMzIyNywgMzMyMzIsIDMzMjM3LCAzMzI0MiwgMzMyNDcsIDMzMjUyLCAKLSAgICAzMzI1OCwgMzMyNjQsIDMzMjY5LCAzMzI3NCwgMzMyNzksIDMzMjg0LCAzMzI4OSwgMzMyOTQsIDMzMjk5LCAzMzMwNCwgCi0gICAgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAzMzM0OSwgMzMzNTQsIAotICAgIDMzMzYwLCAzMTMsIDI2LCAzMzM2NSwgMzMzNjksIDMzMzczLCAzMzM4MSwgMzMzODUsIDMzMzg5LCAzMzM5MiwgMzMzOTUsIAotICAgIDMzMzk3LCAzMzQwMiwgMzM0MDYsIDMzNDExLCAzMzQxNSwgMzM0MjAsIDMzNDI0LCAzMzQyOSwgMzM0MzMsIDMzNDM2LCAKLSAgICAzMzQzOCwgMzM0NDIsIDMzNDQ3LCAzMzQ1MSwgMzM0NjIsIDMzNDY1LCAzMzQ2NywgMzM0NzEsIDMzNDgzLCAzMzQ5MiwgCi0gICAgMzM0OTYsIDMzNTAwLCAzMzUwNiwgMzM1MTEsIDMzNTIwLCAzMzUyNiwgMzM1MzEsIDMzNTM2LCAzMzU0MCwgMzM1NDUsIAotICAgIDMzNTUyLCAzMzU1NywgMzM1NjMsIDMzNTY4LCAzMzU3MiwgMzM1NzksIDI1NzAxLCAyNTcxMSwgMzM1ODMsIDMzNTg4LCAKLSAgICAzMzU5MywgMzM1OTgsIDMzNjA1LCAzMzYwOSwgMzM2MTYsIDgxMTMsIDMzNjIyLCAzMzYzMSwgMzM2MzksIDMzNjU0LCAKLSAgICAzMzY2OCwgMzM2NzYsIDMzNjg3LCAzMzY5NiwgMzM3MDEsIDcyMjcsIDMzNzExLCAzMzcxNiwgMzM3MjEsIDMzNzI1LCAKLSAgICAzMzcyOCwgMzM3MzIsIDMzNzM3LCAzMzc0MSwgMzM3NDgsIDMzNzUzLCAzMzc1OCwgODkxMiwgMzM3NjgsIDMzNzcwLCAKLSAgICAzMzc3MywgMzM3NzcsIDMzNzgzLCAzMzc4NywgMzM3OTIsIDMzNzk3LCAzMzgwMywgMzM4MDgsIDMzODE0LCAzMzgxOSwgCi0gICAgMzM4MjksIDMzODM4LCAzMzg0NiwgMzM4NTEsIDMzODU3LCAzMzg2MiwgMzM4NjksIDMzODczLCAzMzg4MSwgMzM4ODgsIAotICAgIDMzOTAxLCAzMzkwOSwgMzM5MTMsIDMzOTIzLCAzMzkyOCwgMzM5MzIsIDMzOTQwLCAzMzk0OCwgMzM5NTIsIDMzOTYxLCAKLSAgICAzMzk2NywgMzM5NzIsIDMzOTgwLCAzMzk5MCwgMzM5OTksIDM0MDA4LCAzNDAxNywgMzQwMjgsIDM0MDM2LCAzNDA0NywgCi0gICAgMzQwNTYsIDM0MDYzLCAzNDA2OSwgMzQwNzQsIDM0MDg1LCAzNDA5MCwgMzQwOTQsIDM0MDk3LCAzNDEwMSwgMzQxMDksIAotICAgIDM0MTE1LCAzNDEyMywgMzQxMzAsIDM0MTM2LCAzNDE0MSwgMzQxNDcsIDI0MTgsIDM0MTUxLCAzNDE1MywgMzQxNTgsIAotICAgIDM0MTYzLCAzNDE2OCwgMzQxNzEsIDM0MTczLCAzNDE3NywgMzQxODAsIDM0MTg3LCAzNDE5MSwgOTg4NCwgMzQxOTUsIAotICAgIDM0MjAxLCAzNDIxMSwgMzQyMTYsIDM0MjIyLCAzNDIyNiwgMzQyMzEsIDM0MjQ0LCAyNjA4NywgMzQyNTAsIDM0MjU5LCAKLSAgICAxNzQ2MiwgMzQyNjYsIDM0Mjc1LCAzMTY0NywgMzQyODMsIDM0Mjg4LCAzNDI5MiwgMzQzMDAsIDM0MzA3LCAzNDMxMiwgCi0gICAgMzQzMTYsIDM0MzIxLCAzNDMyNSwgMzQzMzMsIDM0MzM5LCAzNDM0NSwgMzQzNTAsIDM0MzU0LCAzNDM1NywgMzQzNjIsIAotICAgIDM0Mzc1LCAzNDM5MSwgMjI5NzksIDM0NDA4LCAzNDQyMCwgMzQ0MzcsIDM0NDQ5LCAzNDQ2MywgMjI5OTYsIDIzMDE1LCAKLSAgICAzNDQ3NSwgMzQ0ODcsIDI2ODAsIDM0NTAxLCAzNDUwNiwgMzQ1MTEsIDM0NTE2LCAzNDUyMCwgMzQ1MjcsIDM0NTM5LCAKLSAgICAzNDU0NSwgMzQ1NDgsIDM0NTU5LCAzNDU3MCwgMzQ1NzUsIDMyMDY0LCA2OTUsIDM0NTc5LCAzNDU4MywgMzQ1ODcsIAotICAgIDM0NTkwLCAzNDU5NSwgMzQ2MDAsIDM0NjA2LCAzNDYxMSwgMzQ2MTYsIDM0NjIyLCAzNDYyOCwgMzQ2MzMsIDM0NjM3LCAKLSAgICAzNDY0MiwgMzQ2NDcsIDM0NjUyLCAzNDY1NiwgMzQ2NTksIDM0NjY1LCAzNDY3MCwgMzQ2NzUsIDM0NjgwLCAzNDY4NCwgCi0gICAgMzQ2ODksIDM0Njk1LCAzNDcwMywgMjYzMjAsIDM0NzA4LCAzNDcxMywgMzQ3MjAsIDM0NzI2LCAzNDczMiwgMzQ3MzcsIAotICAgIDM0NzQ1LCAyMjUyMSwgMzQ3NTIsIDM0NzU3LCAzNDc2MiwgMzQ3NjcsIDM0NzcxLCAzNDc3NCwgMzQ3NzksIDM0NzgzLCAKLSAgICAzNDc4NywgMzQ3OTQsIDM0ODAwLCAzNDgwNiwgMzQ4MTIsIDM0ODE5LCAzNDgyNCwgMzQ4MzAsIDMzOTQzLCAzNDgzNCwgCi0gICAgMzQ4MzgsIDM0ODQzLCAzNDg1NiwgMzQ4NjEsIDM0ODY3LCAzNDg3NSwgMzQ4ODIsIDM0ODkwLCAzNDkwMCwgMzQ5MDYsIAotICAgIDM0OTEyLCAzNDkxOCwgMzQ5MjIsIDM0OTMxLCAzNDkzOSwgMzQ5NDYsIDM0OTUxLCAzNDk1NiwgMTA0MzcsIDM0OTYxLCAKLSAgICAzNDk2OSwgMzQ5NzYsIDM0OTgyLCAzNDk5MiwgMzQ5OTcsIDM1MDAzLCAzNTAxMSwgMzYwOCwgMzUwMTgsIDM1MDI1LCAKLSAgICAzNjE0LCAzNTAyOSwgMzUwMzQsIDM1MDQ1LCAzNTA1MiwgMzUwNTgsIDM1MDY3LCAzNTA3MSwgNDAxNSwgMzUwNzQsIAotICAgIDM1MDgxLCAzNTA4NywgMzUwOTMsIDM1MTAxLCAzNTExMSwgMjkwNDIsIDM1MTE4LCAzNTEyNiwgMzUxMzEsIDM1MTM3LCAKLSAgICAzNTE0MiwgMjU5NDcsIDM1MTQ4LCAzNTE1NSwgMzUxNjEsIDM1MTcwLCAyMzY2MCwgMzUxNzcsIDM1MTgyLCAzNTE4NiwgCi0gICAgMzUxOTQsIDM1MjAyLCA5NjAwLCA1ODk1LCAzNTIwOSwgMzUyMTMsIDM1MjE1LCAzNTIxOSwgMzUyMjQsIDM1MjI2LCAKLSAgICAzNTIzMiwgMzUyMzcsIDM1MjQyLCAzNTI0OSwgMzI1ODUsIDM1MjU1LCAzNTI2MCwgMzUyNjQsIDM1MjY5LCAzNTI3MywgCi0gICAgMzUyODIsIDM1Mjg2LCAzNTI5MiwgMzUyOTksIDM1MzA1LCAzNTMxMiwgMzUzMTcsIDM1MzI2LCAzNTMzMSwgMzUzMzUsIAotICAgIDM1MzQwLCAzNTM0NywgMzUzNTUsIDM1MzYzLCAzNTM2OCwgMjEzNDMsIDM1MzcyLCAzNTM3NSwgMzUzNzksIDM1MzgzLCAKLSAgICAzNTM4NywgMzUzOTAsIDM1MzkyLCAzNTQwMCwgMzU0MDQsIDM1NDExLCAzNTQxNSwgMzU0MTksIDM1NDI3LCAzNTQzNCwgCi0gICAgMzU0NDQsIDM1NDQ4LCAzNTQ1MiwgMzU0NjAsIDM1NDY4LCAzNTQ3NCwgMzU0NzksIDM1NDg4LCAxMzM1MCwgMzU0OTQsIAotICAgIDM1NTAzLCAzNTUwOCwgMzU1MTUsIDM1NTIzLCAzNTUzMSwgMzU1MzksIDM1NTQ2LCAzNTU1MywgMzU1NjAsIDM1NTY3LCAKLSAgICAzNTU3NCwgMzU1NzksIDM1NTg1LCAzNTYwMiwgMzU2MTAsIDM1NjIwLCAzNTYyOCwgMzU2MzUsIDQwNywgMzU2MzksIAotICAgIDM1NjQ1LCAzNTY0OSwgMzU2NTQsIDMzNjkyLCAzNTY2MCwgMzU2NjMsIDM1NjY3LCAzNTY3NSwgMzYxOSwgMzU2ODMsIAotICAgIDM1Njg5LCAzNTY5NSwgMzU3MDQsIDM1NzE0LCAzNTcyMSwgMzU3MjcsIDM2MjUsIDM2MzEsIDM1NzM2LCAzNTc0MywgCi0gICAgMzU3NTEsIDM1NzU2LCAzNTc2MCwgMzU3NjcsIDM1Nzc1LCAzNTc4MiwgMzU3ODgsIDM1Nzk3LCAzNTgwNywgMzU4MTMsIAotICAgIDM1ODIxLCAzNTgzMCwgMzU4MzcsIDM1ODQ1LCAzNTg1MiwgMjIwMTksIDM1ODU2LCAzNTg2MywgMzU4NjksIDM1ODc5LCAKLSAgICAzNTg4OCwgMzU4OTksIDM1OTAzLCAzNTkxMywgMzU5MTksIDM1OTI2LCAzNTkzNCwgMzU5NDMsIDM1OTUyLCAzNTk2MiwgCi0gICAgMzU5NzMsIDM1OTgwLCAzNTk4NSwgMzU5OTIsIDMwMjksIDM2MDAwLCAzNjAwNiwgMzYwMTEsIDM2MDE3LCAzNjAyMywgCi0gICAgMzYwMjgsIDM2MDQxLCAzNjA1NCwgMzYwNjcsIDM2MDc0LCAzNjA4MCwgMzYwODgsIDM2MDk2LCAzNjEwMSwgMzYxMDUsIAotICAgIDE0NjksIDM2MTA5LCAzNjExNCwgMzYxMTksIDM2MTI0LCAzNjEyOSwgMzYxMzUsIDM2MTQwLCAzNjE0NSwgMzYxNTAsIAotICAgIDM2MTU1LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NiwgMzYxODIsIDM2MTg3LCAzNjE5MiwgMzYxOTgsIDM2MjAzLCAKLSAgICAzNjIwOCwgMzYyMTMsIDM2MjE5LCAzNjIyNCwgMzYyMjksIDM2MjM0LCAzNjIzOSwgMzYyNDUsIDM2MjUwLCAzNjI1NSwgCi0gICAgMzYyNjEsIDM2MjY2LCAzNjI3MSwgMzYyNzYsIDM2MjgxLCAzNjI4NiwgMzYyOTIsIDM2Mjk3LCAzNjMwMywgMzYzMDgsIAotICAgIDM2MzE0LCAzNjMxOSwgMzYzMjQsIDM2MzI5LCAzNjMzNSwgMzYzNDEsIDM2MzQ3LCAzNjM1MywgMzYzNTksIDM2MzY1LCAKLSAgICAzNjM3MSwgMzYzNzcsIDM2MzgyLCAzNjM4NywgMzYzOTMsIDM2Mzk4LCAzNjQwMywgMzY0MDgsIDM2NDEzLCAzNjQxOCwgCi0gICAgMzY0MjMsIDM2NDI4LCAzNjQzNCwgMzY0MzksIDM2NDQ0LCAzNjQ1MCwgMzY0NTYsIDEwMSwgMzY0NjEsIDM2NDYzLCAKLSAgICAzNjQ2NywgMzY0NzEsIDM2NDc1LCAzNjQ4MCwgMzY0ODQsIDk1MjEsIDM2NDg4LCAzNjQ5NCwgMTc0MSwgNjI4MCwgMzY1MDAsIAotICAgIDM2NTAzLCAzNjUwOCwgMzY1MTIsIDM2NTE3LCAzNjUyMSwgMzY1MjUsIDM2NTMwLCAxMDIzOCwgMzY1MzQsIDM2NTM4LCAKLSAgICAzNjU0MiwgMzY1NDYsIDE1MzcyLCAzNjU1MSwgMzY1NTUsIDM2NTYwLCAzNjU2NSwgMzY1NzAsIDM2NTc0LCAzNjU4MSwgCi0gICAgMjYxMTEsIDM2NTg3LCAzNjU5MCwgMzY1OTQsIDM2NTk5LCAzNjYwNSwgMzY2MDksIDM2NjE3LCAzNjYyMywgMzY2MjgsIAotICAgIDM2NjMyLCAzNjYzOCwgMzY2NDIsIDM2NjQ2LCAzNDYyLCAzNDY3LCAyOTIzNCwgMzY2NDksIDM2NjUzLCAzNjY1NywgCi0gICAgMzY2NjEsIDM2NjY5LCAzNjY3NiwgMzY2ODAsIDM2Njg3LCAzNjY5MiwgMzE3LCAzNjY5NywgMzY3MDEsIDM2NzA3LCAKLSAgICAzNjcxOSwgMzY3MjUsIDM2NzMxLCAzNjczNSwgMzY3NDEsIDM2NzUwLCAzNjc1NCwgMzY3NTgsIDM2NzYzLCAzNjc2OSwgCi0gICAgMzY3NzQsIDM2Nzc4LCAzNjc4MywgMzY3ODcsIDM2NzkxLCAzNjc5OCwgMzY4MDQsIDM2ODA5LCAzNjgyNCwgMzY4MzksIAotICAgIDM2ODU0LCAzNjg3MCwgMzY4ODgsIDEwMTg4LCAzNjkwMiwgMzY5MDksIDM2OTEzLCAzNjkxNiwgMzY5MjUsIDM2OTMwLCAKLSAgICAzNjkzNCwgMzY5NDIsIDMzODk0LCAzNjk1MCwgMzY5NTQsIDM2OTY0LCAzNjk3NSwgMjkyMDQsIDM2OTg4LCAzNjk5MiwgCi0gICAgMzcwMDEsIDM3MDA5LCA5Nzc4LCAxNDkwMCwgMzcwMTMsIDIyNDM0LCAzNzAxNiwgMzAxNTIsIDM3MDIxLCA5Nzc3LCAKLSAgICAzNzAyNiwgMzcwMzIsIDM3MDM3LCAzNzA0MywgMzcwNDgsIDM3MDU0LCAzNzA1OSwgMzcwNjUsIDM3MDcwLCAzNzA3NiwgCi0gICAgMzcwODIsIDM3MDg4LCAzNzA5MywgMzcwNDksIDM3MDU1LCAzNzA2MCwgMzcwNjYsIDM3MDcxLCAzNzA3NywgMzcwODMsIAotICAgIDgxMjYsIDM4NzQsIDM3MDk3LCAzNzEwNSwgMzcxMDksIDM3MTEyLCAzNzExNiwgMzcxMjEsIDM3MTI2LCAzNzEzMiwgCi0gICAgMzcxMzgsIDM3MTQzLCAzNzE0NywgMjU5NTksIDM3MTUxLCAzNzE1NSwgMzcxNjEsIDM3MTY1LCA5MDQyLCAzNzE3NCwgCi0gICAgMzcxODEsIDM3MTg1LCAxMTg2OCwgMzcxOTIsIDM3MTk4LCAzNzIwMywgMzcyMTAsIDM3MjE3LCAzNzIyNCwgMjg1NTAsIAotICAgIDgwNDksIDM3MjMxLCAzNzIzOCwgMzcyNDUsIDM3MjUxLCAzNzI1NiwgMzcyNjMsIDM3Mjc0LCAzNzI4MCwgMzcyODUsIAotICAgIDM3MjkwLCAzNzI5NSwgMzczMDIsIDM3MDUwLCAzNzMwNiwgMzczMTYsIDM3MzI3LCAzNzMzMywgMzczMzgsIDM3MzQzLCAKLSAgICAzNzM0OCwgMzczNTMsIDM3MzU4LCAzNzM2MiwgMzczNjYsIDM3MzcyLCAzNzM4MCwgMjMxOSwgODY1LCAxMDI1NCwgMTAyNjYsIAotICAgIDEwMjcxLCAxMDI3NywgMzczODksIDEwMjgyLCAxMDI4NywgMTAyOTMsIDM3Mzk0LCAzNzQwNCwgMzc0MDgsIDEwMjk4LCAKLSAgICAzNzQxMywgMTY4OTAsIDM3NDE2LCAzNzQyMSwgMzc0MjUsIDM3NDMwLCAzNzQzNSwgMzc0NDIsIDM3NDQ5LCAzNzQ1MywgCi0gICAgMzc0NTYsIDM3NDY0LCAxMDIwMSwgMzc0NzEsIDM3NDc0LCAzNzQ4MCwgMzc0OTAsIDU5MjksIDM3NDk5LCAzNzUwMywgCi0gICAgMzc1MTEsIDM3NTE1LCAzNzUyNSwgMzc1MzEsIDM3NTQyLCAzNzU0OCwgMzc1NTQsIDM3NTU5LCAzNzU2NSwgMzc1NzEsIAotICAgIDM3NTc3LCAzNzU4MiwgMzc1ODUsIDM3NTkyLCAzNzU5OCwgMzc2MDMsIDM3NjEwLCAzNzYxNywgMzc2MjEsIDM3NjMxLCAKLSAgICAzNzY0NCwgMzc2NTMsIDM3NjYyLCAzNzY3MywgMzc2ODYsIDM3Njk3LCAzNzcwNiwgMzc3MTcsIDM3NzIyLCAzNzczMSwgCi0gICAgMzc3MzYsIDEwMzAzLCAzNzc0MiwgMzc3NDksIDM3NzU3LCAzNzc2MiwgMzc3NjYsIDM3NzczLCAzNzc4MCwgMzgyOSwgMTYsIAotICAgIDM3Nzg0LCAzNzc4OSwgMTY3NDQsIDM3NzkzLCAzNzc5NiwgMzc3OTksIDI4MDU2LCAzNzgwMywgMjg1NTksIDM3ODExLCAKLSAgICAzNzgxNSwgMzc4MTksIDM3ODIyLCAzNzgyOCwgMzcwNzIsIDM3ODM0LCAzNzg0MiwgMzc4NDgsIDM3ODU1LCAyODAzOSwgCi0gICAgMzc4NTksIDI4MjMzLCAzNzg2MywgMzc4NzIsIDM3ODc4LCAzNzg4NCwgMzc4ODksIDM3ODkzLCAzNzg5OSwgMzc5MDMsIAotICAgIDM3OTExLCAzNzkxOSwgMjYxNzcsIDM3OTI1LCAzNzkzMiwgMzc5MzgsIDM3OTQzLCAzNzk0OCwgMzc5NTIsIDM3OTU4LCAKLSAgICAzNzk2MywgMzc5NjksIDQwNTYsIDc5MSwgMzc5NzYsIDM3OTgwLCAzNzk4MywgMTUyNjIsIDM3OTk1LCAzNTgyNiwgMzgwMDYsIAotICAgIDM4MDA5LCAzODAxNiwgMzgwMjAsIDM4MDI2LCAzODAzMCwgMzgwMzYsIDM4MDQxLCAzODA0NywgMzgwNTIsIDM4MDU3LCAKLSAgICAzODA2MSwgMzgwNjUsIDM4MDcwLCAzODA3NSwgMzgwODUsIDM4MDkxLCAzODEwNCwgMzgxMTAsIDM4MTE2LCAzODEyMywgCi0gICAgMzgxMjgsIDM4MTM0LCAzODEzOSwgMTY2MzAsIDE0NzIsIDEwMTksIDMxMTkzLCAzMTE5OSwgMzgxNDQsIDMxMjA1LCAKLSAgICAzMTIxOCwgMzEyMjQsIDMxMjMwLCAzODE1MCwgMzEyMzYsIDMxMjQyLCAzODE1NiwgMzgxNjIsIDIyLCAzODE3MCwgMzgxNzcsIAotICAgIDM4MTgxLCAzODE4NSwgMzgxOTMsIDMxOTUzLCAzODE5NywgMzgyMDEsIDM4MjA4LCAzODIxMywgMzgyMTcsIDM4MjIyLCAKLSAgICAzODIyOCwgMzgyMzMsIDM4MjM5LCAzODI0NCwgMzgyNDgsIDM4MjUyLCAzODI1NiwgMzgyNjEsIDM4MjY1LCAzODI3MCwgCi0gICAgMzgyNzQsIDM4MjgxLCAzODI4NiwgMzgyOTAsIDM4Mjk1LCAzODI5OSwgMzgzMDQsIDM4MzA4LCAzODMxMywgMzgzMTksIAotICAgIDE1NDgyLCAxNTQ4NywgMzgzMjQsIDM4MzI4LCAzODMzMSwgMzgzMzUsIDIxMTcwLCAzODM0MCwgMzgzNDQsIDM4MzUwLCAKLSAgICAzODM1NywgMzgzNjIsIDM4MzcyLCAzODM3NywgMzgzODUsIDM4Mzg5LCAzODM5MiwgMzE5NjgsIDM4Mzk2LCA0MTA5LCAKLSAgICAzODQwMSwgMzg0MDYsIDM4NDEwLCAzODQxNSwgMzg0MTksIDM4NDI0LCAxMzM2OCwgMzg0MzUsIDM4NDM5LCAzODQ0MiwgCi0gICAgMzg0NDcsIDM4NDUxLCAzODQ1NSwgMzg0NTgsIDM4NDYyLCA4MTQ1LCAxMzM4NCwgMzg0NjUsIDM4NDY4LCAzODQ3NCwgCi0gICAgMzg0NzksIDM4NDg1LCAzODQ5MCwgMzg0OTYsIDM4NTAxLCAzODUwNywgMzg1MTIsIDM4NTE4LCAzODUyNCwgMzg1MzAsIAotICAgIDM4NTM1LCAzODUzOSwgMzg1NDMsIDM4NTUyLCAzODU2OCwgMzg1ODQsIDM4NTk0LCAyNzk0NiwgMzg2MDEsIDM4NjA1LCAKLSAgICAzODYxMCwgMzg2MTUsIDM4NjE5LCAzODYyMywgMzU5NDcsIDM4NjI5LCAzODYzNCwgMzg2MzgsIDM4NjQ1LCAzODY1MCwgCi0gICAgMzg2NTQsIDM4NjU4LCAyNjk3OSwgMzg2NjQsIDIxNDM4LCAzODY2OSwgMzg2NzYsIDM4Njg0LCAzODY5MCwgMzg2OTcsIAotICAgIDM4NzA1LCAzODcxMSwgMzg3MTUsIDM4NzIxLCAzODcyOSwgMzg3MzMsIDM4NzQyLCA5NTAyLCAzODc1MCwgMzg3NTQsIAotICAgIDM4NzYyLCAzODc2OSwgMzg3NzQsIDM4Nzc5LCAzODc4MywgMzg3ODYsIDM4NzkwLCAzODc5MywgMzg3OTcsIDM4ODA0LCAKLSAgICAzODgwOSwgMzg4MTUsIDI2Mzk4LCAzMTI1NiwgMzg4MTksIDM4ODI2LCAzODgzMiwgMzg4MzgsIDM4ODQzLCAzODg0NiwgCi0gICAgMzg4NDgsIDM4ODU1LCAzODg2MiwgMzg4NjgsIDM4ODcyLCAzODg3NSwgMzg4NzksIDM4ODgzLCAzODg4NywgMzg4OTIsIAotICAgIDM4ODk2LCAzODkwMCwgMzg5MDMsIDM4OTA3LCAzODkyMSwgMjMwNDUsIDM4OTQwLCAzODk1MywgMzg5NjYsIDM4OTc5LCAKLSAgICAyMzA2MywgMzg5OTQsIDEwNDkwLCAzOTAwOSwgMzkwMTUsIDM5MDE5LCAzOTAyMywgMzkwMzAsIDM5MDM1LCAzOTAzOSwgCi0gICAgMzkwNDYsIDM5MDUyLCAzOTA1NywgMzkwNjMsIDM5MDczLCAzOTA4NSwgMzkwOTYsIDM5MTAxLCAzOTEwOCwgMzkxMTIsIAotICAgIDM5MTE2LCAzOTExOSwgMTU4NzgsIDM2NzcsIDM5MTI3LCAxNTUwOSwgMzkxNDAsIDM5MTQ3LCAzOTE1MSwgMzkxNTUsIAotICAgIDM5MTYwLCAzOTE2NSwgMzkxNzEsIDM5MTc1LCAzOTE3OSwgMzkxODIsIDc3NDIsIDE1NTIwLCAzOTE4NywgMzkxOTEsIAotICAgIDM5MTk3LCAzOTIwNiwgMzkyMTEsIDM5MjE4LCAzNTgwMywgMzkyMjQsIDM5MjI5LCAzOTIzMywgMzkyMzgsIDM5MjQ1LCAKLSAgICAzOTI0OSwgMzkyNTIsIDM5MjU2LCAzOTI2MSwgMTQ1NTIsIDM5MjY4LCAzOTI3NSwgMTA2NiwgMzkyNzksIDM5Mjg0LCAKLSAgICAzOTI4OSwgMzkyOTUsIDM5MzAwLCAzOTMwNSwgMzkzMDksIDM5MzE5LCAzOTMyNCwgMzkzMzAsIDM5MzM1LCAzOTM0MSwgCi0gICAgMzkzNDYsIDM5MzUyLCAzOTM2MiwgMzkzNjcsIDM5MzcyLCAzOTM3NiwgNzIyOSwgNzI0MSwgMzkzODEsIDM5Mzg0LCAKLSAgICAzOTM5MSwgMzkzOTcsIDM0MDU5LCAzNDA2NiwgMzk0MDYsIDM5NDEwLCAzMjAxNiwgMzk0MTgsIDM5NDI5LCAzOTQzNywgCi0gICAgMzU5OTUsIDM5NDQ0LCAzOTQ0OSwgMzk0NTQsIDM5NDY1LCAzOTQ3MiwgMzk0ODMsIDMyMDQwLCAyMTQ0NCwgMzk0OTEsIAotICAgIDczNSwgMzk0OTYsIDM5NTAyLCAyODAzMCwgMzk1MDgsIDM5NTEzLCAzOTUyMywgMzk1MzIsIDM5NTM5LCAzOTU0NSwgCi0gICAgMzk1NDksIDM5NTUyLCAzOTU1OSwgMzk1NjUsIDM5NTcyLCAzOTU3OCwgMzk1ODgsIDM5NTk2LCAzOTYwMiwgMzk2MDgsIAotICAgIDM5NjEzLCAzOTYxNywgMzk2MjQsIDM5NjMwLCAzOTYzNywgMzg4ODgsIDUzNSwgMTM4MDUsIDM5NjQzLCAzOTY0OCwgCi0gICAgMzk2NTEsIDM5NjU3LCAzOTY2NSwgMTM5NiwgMzk2NzAsIDM5Njc0LCAzOTY3OSwgMzk2ODYsIDM5NjkyLCAzOTY5NiwgCi0gICAgMzk3MDAsIDM5NzA1LCAzOTcxNCwgMzk3MjEsIDM5NzMxLCAzOTczNywgMjgwNzQsIDM5NzU0LCAzOTc2MywgMzk3NzEsIAotICAgIDM5Nzc3LCAzOTc4MiwgMzk3ODksIDM5Nzk1LCAzOTgwMywgMzk4MTIsIDM5ODIwLCAzOTgyNCwgMzk4MjksIDM5ODM3LCAKLSAgICAzMjA0OSwgMzk4NDMsIDM5ODYyLCAxNTgxMSwgMzk4NzYsIDM5ODkyLCAzOTkwNiwgMzk5MTIsIDM5OTE3LCAzOTkyMiwgCi0gICAgMzk5MjcsIDM5OTMzLCAzMjA1NSwgMzk5MzgsIDM5OTQ1LCAzOTk1MCwgMzk5NTQsIDM0NSwgMjkzNiwgMzk5NjEsIDM5OTY2LCAKLSAgICAzOTk3MSwgMjczMDUsIDM5NzkyLCAzOTk3NSwgMzk5ODAsIDM5OTg4LCAzOTk5MiwgMzk5OTUsIDQwMDAxLCA0MDAwNywgCi0gICAgNDAwMTEsIDI4MTI5LCA0MDAxNCwgNDAwMTksIDQwMDIzLCA0MDAyNiwgNDAwMzEsIDQwMDM1LCA0MDA0MCwgNDAwNDUsIAotICAgIDQwMDQ5LCA0MDA1NCwgNDAwNTgsIDQwMDYyLCAyMTE2NiwgMjExNzcsIDQwMDY2LCA0MDA3MSwgNDAwNzcsIDI2OTM2LCAKLSAgICA0MDA4MiwgNDAwODYsIDIxMjUzLCAxNjA1OSwgNDAwODksIDQwMDk0LCA0MDA5OSwgNDAxMDQsIDQwMTA5LCA0MDExNCwgCi0gICAgNDAxMTksIDQwMTI0LCA0NDcsIDQzLCAzMTI3NCwgMzEyNzksIDMxMjg0LCAzMTI5MCwgMzEyOTUsIDMxMzAwLCA0MDEyOSwgCi0gICAgMzEzMDQsIDQwMTMzLCA0MDEzNywgNDAxNDEsIDMxMzA5LCAzMTMxNSwgNDAxNTUsIDMxMzI2LCAzMTMzMSwgNDAxNjMsIAotICAgIDQwMTY4LCAzMTMzNywgNDAxNzMsIDQwMTc4LCA0MDE4MywgNDAxODgsIDQwMTk0LCA0MDIwMCwgNDAyMDYsIDMxMzU0LCAKLSAgICA0MDIxOSwgNDAyMjUsIDMxMzU4LCA0MDIyOSwgMzEzNjMsIDQwMjM0LCAzMTM2OCwgMzEzNzMsIDQwMjM3LCA0MDI0MiwgCi0gICAgNDAyNDYsIDMwOTIzLCA0MDI1MiwgMTM1OTIsIDQwMjU5LCA0MDI2NCwgMzEzNzgsIDQwMjY4LCA0MDI3MywgNDAyNzgsIAotICAgIDQwMjgzLCA0MDI4NywgNDAyOTIsIDQwMjk3LCA0MDMwMywgNDAzMDgsIDQwMzEzLCA0MDMxOSwgNDAzMjUsIDQwMzMwLCAKLSAgICA0MDMzNCwgNDAzMzksIDQwMzQ0LCA0MDM0OSwgNDAzNTMsIDQwMzU4LCA0MDM2MywgNDAzNjgsIDQwMzc0LCA0MDM4MCwgCi0gICAgNDAzODYsIDQwMzkxLCA0MDM5NSwgNDA0MDAsIDQwNDA0LCAzMTM4MiwgMzEzODcsIDMxMzkyLCA0MDQwOCwgNDA0MTIsIAotICAgIDQwNDE2LCAzMTM5NywgMzE0MDMsIDMxNDA5LCAzMTQyMSwgNDA0MjgsIDI1OTk2LCA0MDQzMiwgNDA0MzYsIDQwNDQxLCAKLSAgICA0MDQ0NiwgNDA0NTEsIDQwNDU2LCA0MDQ2MCwgNDA0NjQsIDQwNDc0LCA0MDQ3OSwgNDA0ODQsIDQwNDg4LCA0MDQ5MiwgCi0gICAgNDA0OTUsIDQwNTAzLCAzMTQ2OSwgNDA1MDgsIDE0NzksIDQwNTE0LCA0MDUyMiwgNDA1MzEsIDQwNTM1LCA0MDUzOSwgCi0gICAgNDA1NDcsIDQwNTUzLCA0MDU2MSwgNDA1NzcsIDQwNTgxLCA0MDU4NSwgNDA1OTAsIDQwNjA1LCAzMTUwNiwgMTc0OSwgCi0gICAgMTIwNDgsIDQwNjA5LCAxMzc4LCA0MDYyMSwgNDA2MjIsIDQwNjMwLCA0MDYzNywgNDA2NDIsIDQwNjQ5LCA0MDY1NCwgCi0gICAgOTM3MiwgMTExNCwgMTAzMjUsIDQwNjYxLCA0MDY2NiwgNDA2NjksIDQwNjcyLCA0MDY4MSwgMTI4NiwgNDA2ODYsIDM5MDM2LCAKLSAgICA0MDY5MywgNDA2OTgsIDIyNDg2LCAyNTU3LCA0MDcwMiwgMTA3MzQsIDQwNzEyLCA0MDcxOCwgMjMzNywgMjM0NywgNDA3MjcsIAotICAgIDQwNzM2LCA0MDc0NiwgNDA3NTcsIDMyOTMsIDM0MjEyLCAxMDM3NywgMzgwNywgMTY2NjgsIDEyOTEsIDQwNzYyLCA0MDc3MCwgCi0gICAgNDA3NzcsIDQwNzgyLCA0MDc4NiwgNDA3OTAsIDIzODU4LCAxMDQwNCwgNDA3OTgsIDQwODA3LCA0MDgxNiwgNDA4MjQsIAotICAgIDQwODMxLCA0MDg0MiwgNDA4NDcsIDQwODYwLCA0MDg3MywgNDA4ODUsIDQwODk3LCA0MDkwOSwgNDA5MjIsIDQwOTMzLCAKLSAgICA0MDk0NCwgNDA5NTQsIDQwOTYyLCA0MDk3MCwgNDA5ODIsIDQwOTk0LCA0MTAwNSwgNDEwMTQsIDQxMDIyLCA0MTAyOSwgCi0gICAgNDEwNDEsIDQxMDQ4LCA0MTA1NywgNDEwNjQsIDQxMDc3LCA0MTA4MiwgNDEwOTIsIDQxMDk3LCA0MTEwMywgNDExMDgsIAotICAgIDM3MTgyLCA0MTExMiwgNDExMTksIDQxMTIzLCA0MTEzMCwgNDExMzgsIDI1MTgsIDQxMTQ1LCA0MTE1NiwgNDExNjYsIAotICAgIDQxMTc1LCA0MTE4MywgNDExOTMsIDQxMjAxLCA0MTIxMSwgNDEyMjAsIDQxMjI1LCA0MTIzMSwgNDEyMzcsIDM3MDksIAotICAgIDQxMjQ4LCA0MTI1OCwgNDEyNjcsIDQxMjc2LCA0MTI4NiwgNDEyOTQsIDQxMzAzLCA0MTMwOCwgNDEzMTMsIDQxMzE4LCAKLSAgICAxNzA1LCAzNywgNDEzMjYsIDQxMzM0LCA0MTM0NSwgNDEzNTYsIDE2MzQzLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MywgCi0gICAgNDEzODgsIDQxMzkyLCA0MTQwMywgNDE0MTMsIDQxNDIyLCA0MTQzMywgMTY3MTcsIDE2NzIyLCA0MTQzOCwgNDE0NDcsIAotICAgIDQxNDUyLCA0MTQ2MiwgNDE0NjcsIDQxNDc1LCA0MTQ4MywgNDE0OTAsIDQxNDk2LCA3MDc4LCAyMjgsIDQxNTAwLCA0MTUwNiwgCi0gICAgNDE1MTEsIDQxNTE0LCAyMTE3LCAzOTE1MiwgNDE1MjIsIDQxNTI2LCA0MTUyOSwgMTUxMiwgNDE1MzUsIDEzOTY3LCAxMjk2LCAKLSAgICA0MTU0MCwgNDE1NTMsIDQxNTY3LCAyNjQzLCA0MTU4NSwgNDE1OTcsIDQxNjA5LCAyNjU3LCAyNjc0LCA0MTYyMywgNDE2MzYsIAotICAgIDI2ODksIDQxNjUwLCA0MTY2MiwgMjcwNCwgNDE2NzYsIDEzMDIsIDEzMDgsIDEzMTQsIDEwNjUyLCA0MTY4MSwgNDE2ODYsIAotICAgIDQxNjkxLCA0MTY5NSwgNDE3MTAsIDQxNzI1LCA0MTc0MCwgNDE3NTUsIDQxNzcwLCA0MTc4NSwgNDE4MDAsIDQxODE1LCAKLSAgICA0MTgzMCwgNDE4NDUsIDQxODYwLCA0MTg3NSwgNDE4OTAsIDQxOTA1LCA0MTkyMCwgNDE5MzUsIDQxOTUwLCA0MTk2NSwgCi0gICAgNDE5ODAsIDQxOTk1LCA0MjAxMCwgNDIwMjUsIDQyMDQwLCA0MjA1NSwgNDIwNzAsIDQyMDg1LCA0MjEwMCwgNDIxMTUsIAotICAgIDQyMTMwLCA0MjE0NSwgNDIxNjAsIDQyMTc1LCA0MjE5MCwgNDIyMDUsIDQyMjIwLCA0MjIzNSwgNDIyNTAsIDQyMjY1LCAKLSAgICA0MjI4MCwgNDIyOTUsIDQyMzEwLCA0MjMyNSwgNDIzNDAsIDQyMzU1LCA0MjM3MCwgNDIzODUsIDQyNDAwLCA0MjQxNSwgCi0gICAgNDI0MzAsIDQyNDQ1LCA0MjQ2MCwgNDI0NzUsIDQyNDkwLCA0MjUwNSwgNDI1MjAsIDQyNTM1LCA0MjU1MCwgNDI1NjUsIAotICAgIDQyNTgwLCA0MjU5NSwgNDI2MTAsIDQyNjI1LCA0MjY0MCwgNDI2NTUsIDQyNjcwLCA0MjY4NSwgNDI3MDAsIDQyNzE1LCAKLSAgICA0MjczMCwgNDI3NDUsIDQyNzYwLCA0Mjc3NSwgNDI3OTAsIDQyODA1LCA0MjgyMCwgNDI4MzUsIDQyODUwLCA0Mjg2NSwgCi0gICAgNDI4ODAsIDQyODk1LCA0MjkxMCwgNDI5MjUsIDQyOTQwLCA0Mjk1NSwgNDI5NzAsIDQyOTg1LCA0MzAwMCwgNDMwMTUsIAotICAgIDQzMDMwLCA0MzA0NSwgNDMwNjAsIDQzMDc1LCA0MzA5MCwgNDMxMDUsIDQzMTIwLCA0MzEzNSwgNDMxNTAsIDQzMTY1LCAKLSAgICA0MzE4MCwgNDMxOTUsIDQzMjEwLCA0MzIyNSwgNDMyNDAsIDQzMjU1LCA0MzI3MCwgNDMyODUsIDQzMzAwLCA0MzMxNSwgCi0gICAgNDMzMzAsIDQzMzQ1LCA0MzM2MCwgNDMzNzUsIDQzMzkwLCA0MzQwNSwgNDM0MjAsIDQzNDM1LCA0MzQ1MCwgNDM0NjUsIAotICAgIDQzNDgwLCA0MzQ5NSwgNDM1MTAsIDQzNTI1LCA0MzU0MCwgNDM1NTUsIDQzNTcwLCA0MzU4NSwgNDM2MDAsIDQzNjE1LCAKLSAgICA0MzYzMCwgNDM2NDUsIDQzNjYwLCA0MzY3NSwgNDM2OTAsIDQzNzA1LCA0MzcyMCwgNDM3MzUsIDQzNzUwLCA0Mzc2NSwgCi0gICAgNDM3ODAsIDQzNzk1LCA0MzgxMCwgNDM4MjUsIDQzODQwLCA0Mzg1NSwgNDM4NzAsIDQzODg1LCA0MzkwMCwgNDM5MTUsIAotICAgIDQzOTMwLCA0Mzk0NSwgNDM5NjAsIDQzOTc1LCA0Mzk5MCwgNDQwMDUsIDQ0MDIwLCA0NDAzNSwgNDQwNTAsIDQ0MDY1LCAKLSAgICA0NDA4MCwgNDQwOTUsIDQ0MTEwLCA0NDEyNSwgNDQxNDAsIDQ0MTU1LCA0NDE3MCwgNDQxODUsIDQ0MjAwLCA0NDIxNSwgCi0gICAgNDQyMzAsIDQ0MjQ1LCA0NDI2MCwgNDQyNzUsIDQ0MjkwLCA0NDMwNSwgNDQzMjAsIDQ0MzM1LCA0NDM1MCwgNDQzNjUsIAotICAgIDQ0MzgwLCA0NDM5NSwgNDQ0MTAsIDQ0NDI1LCA0NDQ0MCwgNDQ0NTUsIDQ0NDcwLCA0NDQ4NSwgNDQ1MDAsIDQ0NTE1LCAKLSAgICA0NDUzMCwgNDQ1NDUsIDQ0NTYwLCA0NDU3NSwgNDQ1OTAsIDQ0NjA1LCA0NDYyMCwgNDQ2MzUsIDQ0NjUwLCA0NDY2NSwgCi0gICAgNDQ2ODAsIDQ0Njk1LCA0NDcxMCwgNDQ3MjUsIDQ0NzQwLCA0NDc1NSwgNDQ3NzAsIDQ0Nzg1LCA0NDgwMCwgNDQ4MTUsIAotICAgIDQ0ODMwLCA0NDg0NSwgNDQ4NjAsIDQ0ODc1LCA0NDg5MCwgNDQ5MDUsIDQ0OTIwLCA0NDkzNSwgNDQ5NTAsIDQ0OTY1LCAKLSAgICA0NDk4MCwgNDQ5OTUsIDQ1MDEwLCA0NTAyNSwgNDUwNDAsIDQ1MDU1LCA0NTA3MCwgNDUwODUsIDQ1MTAwLCA0NTExNSwgCi0gICAgNDUxMzAsIDQ1MTQ1LCA0NTE2MCwgNDUxNzUsIDQ1MTkwLCA0NTIwNSwgNDUyMjAsIDQ1MjM1LCA0NTI1MCwgNDUyNjUsIAotICAgIDQ1MjgwLCA0NTI5NSwgNDUzMTAsIDQ1MzI1LCA0NTM0MCwgNDUzNTUsIDQ1MzcwLCA0NTM4NSwgNDU0MDAsIDQ1NDE1LCAKLSAgICA0NTQzMCwgNDU0NDUsIDQ1NDYwLCA0NTQ3NSwgNDU0OTAsIDQ1NTA1LCA0NTUyMCwgNDU1MzUsIDQ1NTUwLCA0NTU2NSwgCi0gICAgNDU1ODAsIDQ1NTk1LCA0NTYxMCwgNDU2MjUsIDQ1NjQwLCA0NTY1NSwgNDU2NzAsIDQ1Njg1LCA0NTcwMCwgNDU3MTUsIAotICAgIDQ1NzMwLCA0NTc0NSwgNDU3NjAsIDQ1Nzc1LCA0NTc5MCwgNDU4MDUsIDQ1ODIwLCA0NTgzNSwgNDU4NTAsIDQ1ODY1LCAKLSAgICA0NTg4MCwgNDU4OTUsIDQ1OTEwLCA0NTkyNSwgNDU5NDAsIDQ1OTU1LCA0NTk3MCwgNDU5ODUsIDQ2MDAwLCA0NjAxNSwgCi0gICAgNDYwMzAsIDQ2MDQ1LCA0NjA2MCwgNDYwNzUsIDQ2MDkwLCA0NjEwNSwgNDYxMjAsIDQ2MTM1LCA0NjE1MCwgNDYxNjUsIAotICAgIDQ2MTgwLCA0NjE5NSwgNDYyMTAsIDQ2MjI1LCA0NjI0MCwgNDYyNTUsIDQ2MjcwLCA0NjI4NSwgNDYzMDAsIDQ2MzE1LCAKLSAgICA0NjMzMCwgNDYzNDUsIDQ2MzYwLCA0NjM3NSwgNDYzOTAsIDQ2NDA1LCA0NjQyMCwgNDY0MzUsIDQ2NDUwLCA0NjQ2NSwgCi0gICAgNDY0ODAsIDQ2NDk1LCA0NjUxMCwgNDY1MjUsIDQ2NTQwLCA0NjU1NSwgNDY1NzAsIDQ2NTg1LCA0NjYwMCwgNDY2MTUsIAotICAgIDQ2NjMwLCA0NjY0NSwgNDY2NjAsIDQ2Njc1LCA0NjY5MCwgNDY3MDUsIDQ2NzIwLCA0NjczNSwgNDY3NTAsIDQ2NzY1LCAKLSAgICA0Njc4MCwgNDY3OTUsIDQ2ODEwLCA0NjgyNSwgNDY4NDAsIDQ2ODU1LCA0Njg3MCwgNDY4ODUsIDQ2OTAwLCA0NjkxNSwgCi0gICAgNDY5MzAsIDQ2OTQ1LCA0Njk2MCwgNDY5NzUsIDQ2OTkwLCA0NzAwNSwgNDcwMjAsIDQ3MDM1LCA0NzA1MCwgNDcwNjUsIAotICAgIDQ3MDgwLCA0NzA5NSwgNDcxMTAsIDQ3MTI1LCA0NzE0MCwgNDcxNTUsIDQ3MTcwLCA0NzE4NSwgNDcyMDAsIDQ3MjE1LCAKLSAgICA0NzIzMCwgNDcyNDUsIDQ3MjYwLCA0NzI3NSwgNDcyOTAsIDQ3MzA1LCA0NzMyMCwgNDczMzUsIDQ3MzUwLCA0NzM2NSwgCi0gICAgNDczODAsIDQ3Mzk1LCA0NzQxMCwgNDc0MjUsIDQ3NDQwLCA0NzQ1NSwgNDc0NzAsIDQ3NDg1LCA0NzUwMCwgNDc1MTUsIAotICAgIDQ3NTMwLCA0NzU0NSwgNDc1NjAsIDQ3NTc1LCA0NzU5MCwgNDc2MDUsIDQ3NjIwLCA0NzYzNSwgNDc2NTAsIDQ3NjY1LCAKLSAgICA0NzY4MCwgNDc2OTUsIDQ3NzEwLCA0NzcyNSwgNDc3NDAsIDQ3NzU1LCA0Nzc3MCwgNDc3ODUsIDQ3ODAwLCA0NzgxNSwgCi0gICAgNDc4MzAsIDQ3ODQ1LCA0Nzg2MCwgNDc4NzUsIDQ3ODkwLCA0NzkwNSwgNDc5MjAsIDQ3OTM1LCA0Nzk1MCwgNDc5NjUsIAotICAgIDQ3OTgwLCA0Nzk5NSwgNDgwMTAsIDQ4MDI1LCA0ODA0MCwgNDgwNTUsIDQ4MDcwLCA0ODA4NSwgNDgxMDAsIDQ4MTE1LCAKLSAgICA0ODEzMCwgNDgxNDUsIDQ4MTYwLCA0ODE3NSwgNDgxOTAsIDQ4MjA1LCA0ODIyMCwgNDgyMzUsIDQ4MjUwLCA0ODI2NSwgCi0gICAgNDgyODAsIDQ4Mjk1LCA0ODMxMCwgNDgzMjUsIDQ4MzQwLCA0ODM1NSwgNDgzNzAsIDQ4Mzg1LCA0ODQwMCwgNDg0MTUsIAotICAgIDQ4NDMwLCA0ODQ0NSwgNDg0NjAsIDQ4NDc1LCA0ODQ5MCwgNDg1MDUsIDQ4NTIwLCA0ODUzNSwgNDg1NTAsIDQ4NTY1LCAKLSAgICA0ODU4MCwgNDg1OTUsIDQ4NjEwLCA0ODYyNSwgNDg2NDAsIDQ4NjU1LCA0ODY3MCwgNDg2ODUsIDQ4NzAwLCA0ODcxNSwgCi0gICAgNDg3MzAsIDQ4NzQ1LCA0ODc2MCwgNDg3NzUsIDQ4NzkwLCA0ODgwNSwgNDg4MjAsIDQ4ODM1LCA0ODg1MCwgNDg4NjUsIAotICAgIDQ4ODgwLCA0ODg5NSwgNDg5MTAsIDQ4OTI1LCA0ODk0MCwgNDg5NTUsIDQ4OTcwLCA0ODk4NSwgNDkwMDAsIDQ5MDE1LCAKLSAgICA0OTAzMCwgNDkwNDUsIDQ5MDYwLCA0OTA3NSwgNDkwOTAsIDQ5MTA1LCA0OTEyMCwgNDkxMzUsIDQ5MTUwLCA0OTE2NSwgCi0gICAgNDkxODAsIDQ5MTk1LCA0OTIxMCwgNDkyMjUsIDQ5MjQwLCA0OTI1NSwgNDkyNzAsIDQ5Mjg1LCA0OTMwMCwgNDkzMTUsIAotICAgIDQ5MzMwLCA0OTM0NSwgNDkzNjAsIDQ5Mzc1LCA0OTM5MCwgNDk0MDUsIDQ5NDIwLCA0OTQzNSwgNDk0NTAsIDQ5NDY1LCAKLSAgICA0OTQ4MCwgNDk0OTUsIDQ5NTExLCA0OTUyNywgNDk1NDMsIDQ5NTU5LCA0OTU3NSwgNDk1OTEsIDQ5NjA3LCA0OTYyMywgCi0gICAgNDk2MzksIDQ5NjU1LCA0OTY3MSwgNDk2ODcsIDQ5NzAzLCA0OTcxOSwgNDk3MzUsIDQ5NzUxLCA0OTc2NywgNDk3ODMsIAotICAgIDQ5Nzk5LCA0OTgxNSwgNDk4MzEsIDQ5ODQ3LCA0OTg2MywgNDk4NzksIDQ5ODk1LCA0OTkxMSwgNDk5MjcsIDQ5OTQzLCAKLSAgICA0OTk1OSwgNDk5NzUsIDQ5OTkxLCA1MDAwNywgNTAwMjMsIDUwMDM5LCA1MDA1NSwgNTAwNzEsIDUwMDg3LCA1MDEwMywgCi0gICAgNTAxMTksIDUwMTM1LCA1MDE1MSwgNTAxNjcsIDUwMTgzLCA1MDE5OSwgNTAyMTUsIDUwMjMxLCA1MDI0NywgNTAyNjMsIAotICAgIDUwMjc5LCA1MDI5NSwgNTAzMTEsIDUwMzI3LCA1MDM0MywgNTAzNTksIDUwMzc1LCA1MDM5MSwgNTA0MDcsIDUwNDIzLCAKLSAgICA1MDQzOSwgNTA0NTUsIDUwNDcxLCA1MDQ4NywgNTA1MDMsIDUwNTE5LCA1MDUzNSwgNTA1NTEsIDUwNTY3LCA1MDU4MywgCi0gICAgNTA1OTksIDUwNjE1LCA1MDYzMSwgNTA2NDcsIDUwNjYzLCA1MDY3OSwgNTA2OTUsIDUwNzExLCA1MDcyNywgNTA3NDMsIAotICAgIDUwNzU5LCA1MDc3NSwgNTA3OTEsIDUwODA3LCA1MDgyMywgNTA4MzksIDUwODU1LCA1MDg3MSwgNTA4ODcsIDUwOTAzLCAKLSAgICA1MDkxOSwgNTA5MzUsIDUwOTUxLCA1MDk2NywgNTA5ODMsIDUwOTk5LCA1MTAxNSwgNTEwMzEsIDUxMDQ3LCA1MTA2MywgCi0gICAgNTEwNzksIDUxMDk1LCA1MTExMSwgNTExMjcsIDUxMTQzLCA1MTE1OSwgNTExNzUsIDUxMTkxLCA1MTIwNywgNTEyMjMsIAotICAgIDUxMjM5LCA1MTI1NSwgNTEyNzEsIDUxMjg3LCA1MTMwMywgNTEzMTksIDUxMzM1LCA1MTM1MSwgNTEzNjcsIDUxMzgzLCAKLSAgICA1MTM5OSwgNTE0MTUsIDUxNDMxLCA1MTQ0NywgNTE0NjMsIDUxNDc5LCA1MTQ5NSwgNTE1MTEsIDUxNTI3LCA1MTU0MywgCi0gICAgNTE1NTksIDUxNTc1LCA1MTU5MSwgNTE2MDcsIDUxNjIzLCA1MTYzOSwgNTE2NTUsIDUxNjcxLCA1MTY4NywgNTE3MDMsIAotICAgIDUxNzE5LCA1MTczNSwgNTE3NTEsIDUxNzY3LCA1MTc4MywgNTE3OTksIDUxODE1LCA1MTgzMSwgNTE4NDcsIDUxODYzLCAKLSAgICA1MTg3OSwgNTE4OTUsIDUxOTExLCA1MTkyNywgNTE5NDMsIDUxOTU5LCA1MTk3NSwgNTE5OTEsIDUyMDA3LCA1MjAyMywgCi0gICAgNTIwMzksIDUyMDU1LCA1MjA3MSwgNTIwODcsIDUyMTAzLCA1MjExOSwgNTIxMzUsIDUyMTUxLCA1MjE2NywgNTIxODMsIAotICAgIDUyMTk5LCA1MjIxNSwgNTIyMzEsIDUyMjQ3LCA1MjI2MywgNTIyNzksIDUyMjk1LCA1MjMxMSwgNTIzMjcsIDUyMzQzLCAKLSAgICA1MjM1OSwgNTIzNzUsIDUyMzkxLCA1MjQwNywgNTI0MjMsIDUyNDM5LCA1MjQ1NSwgNTI0NzEsIDUyNDg3LCA1MjUwMywgCi0gICAgNTI1MTksIDUyNTM1LCA1MjU1MSwgNTI1NjcsIDUyNTgzLCA1MjU5OSwgNTI2MTUsIDUyNjMxLCA1MjY0NywgNTI2NjMsIAotICAgIDUyNjc5LCA1MjY5NSwgNTI3MTEsIDUyNzI3LCA1Mjc0MywgNTI3NTksIDUyNzc1LCA1Mjc5MSwgNTI4MDcsIDUyODIzLCAKLSAgICA1MjgzOSwgNTI4NTUsIDUyODcxLCA1Mjg4NywgNTI5MDMsIDUyOTE5LCA1MjkzNSwgNTI5NTEsIDUyOTY3LCA1Mjk4MywgCi0gICAgNTI5OTksIDUzMDE1LCA1MzAzMSwgNTMwNDcsIDUzMDYzLCA1MzA3OSwgNTMwOTUsIDUzMTExLCA1MzEyNywgNTMxNDMsIAotICAgIDUzMTU5LCA1MzE3NSwgNTMxOTEsIDUzMjA3LCA1MzIyMywgNTMyMzksIDUzMjU1LCA1MzI3MSwgNTMyODcsIDUzMzAzLCAKLSAgICA1MzMxOSwgNTMzMzUsIDUzMzUxLCA1MzM2NywgNTMzODMsIDUzMzk5LCA1MzQxNSwgNTM0MzEsIDUzNDQ3LCA1MzQ2MywgCi0gICAgNTM0NzksIDUzNDk1LCA1MzUxMSwgNTM1MjcsIDUzNTQzLCA1MzU1OSwgNTM1NzUsIDUzNTkxLCA1MzYwNywgNTM2MjMsIAotICAgIDUzNjM5LCA1MzY1NSwgNTM2NzEsIDUzNjg3LCA1MzcwMywgNTM3MTksIDUzNzM1LCA1Mzc1MSwgNTM3NjcsIDUzNzgzLCAKLSAgICA1Mzc5OSwgNTM4MTUsIDUzODMxLCA1Mzg0NywgNTM4NjMsIDUzODc5LCA1Mzg5NSwgNTM5MTEsIDUzOTI3LCA1Mzk0MywgCi0gICAgNTM5NTksIDUzOTc1LCA1Mzk5MSwgNTQwMDcsIDU0MDIzLCA1NDAzOSwgNTQwNTUsIDU0MDcxLCA1NDA4NywgNTQxMDMsIAotICAgIDU0MTE5LCA1NDEzNSwgNTQxNTEsIDU0MTY3LCA1NDE4MywgNTQxOTksIDU0MjE1LCA1NDIzMSwgNTQyNDcsIDU0MjYzLCAKLSAgICA1NDI3OSwgNTQyOTUsIDU0MzExLCA1NDMyNywgNTQzNDMsIDU0MzU5LCA1NDM3NSwgNTQzOTEsIDU0NDA3LCA1NDQyMywgCi0gICAgNTQ0MzksIDU0NDU1LCA1NDQ3MSwgNTQ0ODcsIDU0NTAzLCA1NDUxOSwgNTQ1MzUsIDU0NTUxLCA1NDU2NywgNTQ1ODMsIAotICAgIDU0NTk5LCA1NDYxNSwgNTQ2MzEsIDU0NjQ3LCA1NDY2MywgNTQ2NzksIDU0Njk1LCA1NDcxMSwgNTQ3MjcsIDU0NzQzLCAKLSAgICA1NDc1OSwgNTQ3NzUsIDU0NzkxLCA1NDgwNywgNTQ4MjMsIDU0ODM5LCA1NDg1NSwgNTQ4NzEsIDU0ODg3LCA1NDkwMywgCi0gICAgNTQ5MTksIDU0OTM1LCA1NDk1MSwgNTQ5NjcsIDU0OTgzLCA1NDk5OSwgNTUwMTUsIDU1MDMxLCA1NTA0NywgNTUwNjMsIAotICAgIDU1MDc5LCA1NTA5NSwgNTUxMTEsIDU1MTI3LCA1NTE0MywgNTUxNTksIDU1MTc1LCA1NTE5MSwgNTUyMDcsIDU1MjIzLCAKLSAgICA1NTIzOSwgNTUyNTUsIDU1MjcxLCA1NTI4NywgNTUzMDMsIDU1MzE5LCA1NTMzNSwgNTUzNTEsIDU1MzY3LCA1NTM4MywgCi0gICAgNTUzOTksIDU1NDE1LCA1NTQzMSwgNTU0NDcsIDU1NDYzLCA1NTQ3OSwgNTU0OTUsIDU1NTExLCA1NTUyNywgNTU1NDMsIAotICAgIDU1NTU5LCA1NTU3NSwgNTU1OTEsIDU1NjA3LCA1NTYyMywgNTU2MzksIDU1NjU1LCA1NTY3MSwgNTU2ODcsIDU1NzAzLCAKLSAgICA1NTcxOSwgNTU3MzUsIDU1NzUxLCA1NTc2NywgNTU3ODMsIDU1Nzk5LCA1NTgxNSwgNTU4MzEsIDU1ODQ3LCA1NTg2MywgCi0gICAgNTU4NzksIDU1ODk1LCA1NTkxMSwgNTU5MjcsIDU1OTQzLCA1NTk1OSwgNTU5NzUsIDU1OTkxLCA1NjAwNywgNTYwMjMsIAotICAgIDU2MDM5LCA1NjA1NSwgNTYwNzEsIDU2MDg3LCA1NjEwMywgNTYxMTksIDU2MTM1LCA1NjE1MSwgNTYxNjcsIDU2MTgzLCAKLSAgICA1NjE5OSwgNTYyMTUsIDU2MjMxLCA1NjI0NywgNTYyNjMsIDU2Mjc5LCA1NjI5NSwgNTYzMTEsIDU2MzI3LCA1NjM0MywgCi0gICAgNTYzNTksIDU2Mzc1LCA1NjM5MSwgNTY0MDcsIDU2NDIzLCA1NjQzOSwgNTY0NTUsIDU2NDcxLCA1NjQ4NywgNTY1MDMsIAotICAgIDU2NTE5LCA1NjUzNSwgNTY1NTEsIDU2NTY3LCA1NjU4MywgNTY1OTksIDU2NjE1LCA1NjYzMSwgNTY2NDcsIDU2NjYzLCAKLSAgICA1NjY3OSwgNTY2OTUsIDU2NzExLCA1NjcyNywgNTY3NDMsIDU2NzU5LCA1Njc3NSwgNTY3OTEsIDU2ODA3LCA1NjgyMywgCi0gICAgNTY4MzksIDU2ODU1LCA1Njg3MSwgNTY4ODcsIDU2OTAzLCA1NjkxOSwgNTY5MzUsIDU2OTUxLCA1Njk2NywgNTY5ODMsIAotICAgIDU2OTk5LCA1NzAxNSwgNTcwMzEsIDU3MDQ3LCA1NzA2MywgNTcwNzksIDU3MDk1LCA1NzExMSwgNTcxMjcsIDU3MTQzLCAKLSAgICA1NzE1OSwgNTcxNzUsIDU3MTkxLCA1NzIwNywgNTcyMjMsIDU3MjM5LCA1NzI1NSwgNTcyNzEsIDU3Mjg3LCA1NzMwMywgCi0gICAgNTczMTksIDU3MzM1LCA1NzM1MSwgNTczNjcsIDU3MzgzLCA1NzM5OSwgNTc0MTUsIDU3NDMxLCA1NzQ0NywgNTc0NjMsIAotICAgIDU3NDc5LCA1NzQ5NSwgNTc1MTEsIDU3NTI3LCA1NzU0MywgNTc1NTksIDU3NTc1LCA1NzU5MSwgNTc2MDcsIDU3NjIzLCAKLSAgICA1NzYzOSwgNTc2NTUsIDU3NjcxLCA1NzY4NywgNTc3MDMsIDU3NzE5LCA1NzczNSwgNTc3NTEsIDU3NzY3LCA1Nzc4MywgCi0gICAgNTc3OTksIDU3ODE1LCA1NzgzMSwgNTc4NDcsIDU3ODYzLCA1Nzg3OSwgNTc4OTUsIDU3OTExLCA1NzkyNywgNTc5NDMsIAotICAgIDU3OTU5LCA1Nzk3NSwgNTc5OTEsIDU4MDA3LCA1ODAyMywgNTgwMzksIDU4MDU1LCA1ODA3MSwgNTgwODcsIDU4MTAzLCAKLSAgICA1ODExOSwgNTgxMzUsIDU4MTUxLCA1ODE2NywgNTgxODIsIDE2NzQ5LCA1ODE5MSwgNTgxOTcsIDU4MjAzLCA1ODIxMywgCi0gICAgNTgyMjEsIDE0ODgxLCAxNTQzMiwgOTk1MywgNTgyMzQsIDE1MjAsIDU4MjQyLCAzNzYxLCAyNzQxNSwgNzE4MywgNTgyNDgsIAotICAgIDU4MjUzLCA1ODI1OCwgNTgyNjMsIDU4MjY4LCA1ODI3NCwgNTgyNzksIDU4Mjg1LCA1ODI5MCwgNTgyOTYsIDU4MzAxLCAKLSAgICA1ODMwNiwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMyLCA1ODMzNywgNTgzNDIsIDU4MzQ3LCA1ODM1MiwgCi0gICAgNTgzNTcsIDU4MzYzLCA1ODM2OCwgNTgzNzQsIDU4MzgxLCAyNTYxLCA1ODM4NiwgNTgzOTIsIDg1MjYsIDU4Mzk2LCAKLSAgICA1ODQwMSwgNTg0MDgsIDU4NDE2LCA0MCwgNTg0MjAsIDU4NDI2LCA1ODQzMSwgNTg0MzYsIDU4NDQwLCA1ODQ0NSwgNTg0NDksIAotICAgIDU4NDUzLCAxMDY3NywgNTg0NTcsIDU4NDY3LCA1ODQ4MCwgNTg0OTEsIDU4NTA0LCA1ODUxMSwgNTg1MTcsIDU4NTIyLCAKLSAgICA1ODUyOCwgNTg1MzQsIDU4NTQwLCA1ODU0NSwgNTg1NTAsIDU4NTU1LCA1ODU2MCwgNTg1NjQsIDU4NTY5LCA1ODU3NCwgCi0gICAgNTg1NzksIDU4NTg1LCA1ODU5MSwgNTg1OTcsIDU4NjAyLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCA1ODYyMCwgNTg2MjUsIAotICAgIDU4NjMwLCA1ODYzNSwgNTg2MzksIDEwNjkzLCAxMDcwNCwgMTA3MDksIDE1NjMsIDU4NjQzLCAxNTY4LCA1ODY0OSwgCi0gICAgMTYyMjYsIDU4NjUyLCA1ODY1OCwgMTU5OSwgNTg2NjQsIDE2MDUsIDE2MTEsIDEwNzM5LCA1ODY2OSwgNTg2NzcsIDU4Njg0LCAKLSAgICA1ODY4OCwgNTg2OTQsIDU4Njk5LCAzMDk1MiwgNTg3MDQsIDU4NzExLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCAxNjE2LCAKLSAgICAxNjMxOCwgNTg3MzMsIDU4NzM3LCAxNjMyOSwgMTEyMCwgNTg3NDEsIDU4NzQ4LCA1ODc1MywgNTg3NTcsIDE2MzU0LCAKLSAgICAxNjIwLCAzNzMyMSwgNTg3NjAsIDU4NzY1LCA1ODc3NSwgNTg3ODQsIDU4Nzg5LCA1ODc5MywgNTg3OTksIDE2MjUsIAotICAgIDM5MjMwLCA1ODgwNCwgNTg4MTMsIDU4ODE5LCA1ODgyNCwgMTA4OTcsIDEwOTAzLCA1ODgzMCwgNTg4NDIsIDU4ODU5LCAKLSAgICA1ODg3NiwgNTg4OTMsIDU4OTEwLCA1ODkyNywgNTg5NDQsIDU4OTYxLCA1ODk3OCwgNTg5OTUsIDU5MDEyLCA1OTAyOSwgCi0gICAgNTkwNDYsIDU5MDYzLCA1OTA4MCwgNTkwOTcsIDU5MTE0LCA1OTEzMSwgNTkxNDgsIDU5MTY1LCA1OTE4MiwgNTkxOTksIAotICAgIDU5MjE2LCA1OTIzMywgNTkyNTAsIDU5MjY3LCA1OTI4NCwgNTkzMDEsIDU5MzE4LCA1OTMzNSwgNTkzNTIsIDU5MzY5LCAKLSAgICA1OTM4NiwgNTk0MDMsIDU5NDIwLCA1OTQzNywgNTk0NTQsIDU5NDcxLCA1OTQ4OCwgNTk1MDUsIDU5NTIyLCA1OTUzOSwgCi0gICAgNTk1NTYsIDU5NTczLCA1OTU5MCwgNTk2MDcsIDU5NjI0LCA1OTY0MSwgNTk2NTgsIDU5Njc1LCA1OTY4NiwgNTk2OTEsIAotICAgIDE2MzAsIDU5Njk1LCA1OTcwMSwgNTk3MDYsIDU5NzExLCA5MzE5LCAxNjM1LCA1OTcxNywgNTk3MjYsIDI3NzEwLCA1OTczMSwgCi0gICAgNTk3NDIsIDU5NzUyLCA1OTc1NywgNTk3NjQsIDU5NzcwLCA1OTc3NSwgNTk3ODAsIDE2NjA2LCA1OTc4NCwgMTA5MTQsIAotICAgIDE2NDAsIDEwOTE5LCA1OTc5MCwgNTk3OTUsIDU5ODAxLCA1OTgwNiwgNTk4MTEsIDU5ODE2LCA1OTgyMSwgNTk4MjYsIAotICAgIDU5ODMxLCA1OTgzNiwgNTk4NDIsIDU5ODQ4LCA1OTg1NCwgNTk4NTksIDU5ODYzLCA1OTg2OCwgNTk4NzMsIDU5ODc3LCAKLSAgICA1OTg4MiwgNTk4ODcsIDU5ODkyLCA1OTg5NiwgNTk5MDEsIDU5OTA3LCA1OTkxMiwgNTk5MTcsIDU5OTIxLCA1OTkyNiwgCi0gICAgNTk5MzEsIDU5OTM3LCA1OTk0MiwgNTk5NDcsIDU5OTUzLCA1OTk1OSwgNTk5NjQsIDU5OTY4LCA1OTk3MywgNTk5NzgsIAotICAgIDU5OTgzLCA1OTk4NywgNTk5OTIsIDU5OTk3LCA2MDAwMiwgNjAwMDgsIDYwMDE0LCA2MDAxOSwgNjAwMjMsIDYwMDI3LCAKLSAgICA2MDAzMiwgNjAwMzcsIDYwMDQyLCAyOTEwOCwgNjAwNDYsIDYwMDUxLCA2MDA1NiwgNjAwNjIsIDYwMDY3LCA2MDA3MiwgCi0gICAgNjAwNzYsIDYwMDgxLCA2MDA4NiwgNjAwOTIsIDYwMDk3LCA2MDEwMiwgNjAxMDgsIDYwMTE0LCA2MDExOSwgNjAxMjMsIAotICAgIDYwMTI4LCA2MDEzMywgNjAxMzcsIDYwMTQyLCA2MDE0NywgNjAxNTIsIDYwMTU4LCA2MDE2NCwgNjAxNjksIDYwMTczLCAKLSAgICA2MDE3OCwgNjAxODMsIDYwMTg3LCA2MDE5MiwgNjAxOTcsIDYwMjAyLCA2MDIwNiwgNjAyMDksIDMxNjE0LCA2MDIxNCwgCi0gICAgNjAyMjIsIDE2NjcyLCAzNjYzLCAxMTAxMCwgNjAyMjgsIDYwMjM4LCA2MDI1MywgMTEwMTUsIDYwMjY0LCA2MDI2OSwgCi0gICAgNjAyODAsIDYwMjkyLCA2MDMwNCwgNjAzMTYsIDI2OTUsIDYwMzI4LCA2MDMzMywgNjAzNDUsIDYwMzQ5LCA2MDM1NSwgCi0gICAgNjAzNjEsIDYwMzY2LCAxNjUyLCAxMDY3LCA2MDM3NSwgNjAzODAsIDM5MjgwLCA2MDM4NCwgNjAzODgsIDYwMzkzLCAKLSAgICA2MDM5NywgMTY3NTcsIDYwNDAyLCA2MDQwNSwgNjA0MTMsIDYwNDIxLCAxNjU2LCAxMTA0MCwgMTEwNDYsIDE2NjEsIAotICAgIDYwNDI5LCA2MDQzNiwgNjA0NDEsIDYwNDUwLCA2MDQ2MCwgNjA0NjcsIDYwNDcyLCA2MDQ3NywgMTY2NiwgNjA0ODQsIAotICAgIDYwNDg5LCAxNjg3MiwgNjA0OTMsIDYwNDk4LCA2MDUwNSwgNjA1MTEsIDYwNTE1LCA2MDUyNiwgNjA1MzYsIDE2ODk0LCAKLSAgICA5MjI3LCA5MjM0LCAxNjcxLCA2MDU0MywgNjA1NDksIDYwNTU3LCA2MDU2NCwgNjA1NzAsIDYwNTc3LCA2MDU4OSwgNjA1OTUsIAotICAgIDYwNjAwLCA2MDYxMiwgNjA2MjMsIDYwNjMyLCA2MDY0MiwgMzc0MCwgMzA3ODgsIDMwNzk3LCAxNjkzNCwgMTY3NiwgMTY4MCwgCi0gICAgNjA2NTAsIDYwNjYxLCA2MDY2NiwgMTY4MywgNjA2NzQsIDYwNjc5LCAxNjk4NSwgNjA2OTEsIDYwNjk3LCA2MDcwMiwgCi0gICAgNjA3MTAsIDE2ODgsIDYwNzE1LCA2MDcyMCwgNjA3MjgsIDYwNzM2LCA2MDc0MywgNjA3NTIsIDYwNzYwLCA2MDc2OSwgCi0gICAgMTY5MywgNjA3NzMsIDE2OTgsIDYwNzc4LCA2MDc4NSwgMTcwNTksIDYwNzkzLCA2MDc5OSwgNjA4MDQsIDYwODEyLCAKLSAgICA2MDgxOSwgNjA4MjcsIDIyNTU3LCA2MDgzMiwgMTExNzUsIDYwODQxLCA2MDg0NywgNjA4NTQsIDYwODYxLCA2MDg2NywgCi0gICAgNjA4NzcsIDYwODgzLCA2MDg4OCwgNjA4OTksIDYwOTA0LCA2MDkxMiwgMTExODQsIDExMTg5LCA2MDkyMCwgNjA5MjYsIAotICAgIDYwOTM0LCAzODA1LCAxNzEwMSwgMzkzNjgsIDYwOTM5LCA2MDk0NSwgNjA5NTAsIDYwOTU4LCA2MDk2NSwgMTIwMjksIAotICAgIDYwOTcwLCA2MDk3NiwgMTcwOSwgNjA5ODEsIDYwOTg0LCAxMTI3LCA2MDk5MCwgNjA5OTUsIDYxMDAwLCA2MTAwNiwgCi0gICAgNjEwMTEsIDYxMDE2LCA2MTAyMSwgNjEwMjYsIDYxMDMxLCA2MTAzNiwgMTcxOCwgOSwgNjEwNDIsIDYxMDQ2LCA2MTA1MSwgCi0gICAgNjEwNTUsIDYxMDU5LCA2MTA2MywgMzE4NTQsIDYxMDY4LCA2MTA3MywgNjEwNzgsIDYxMDgyLCA2MTA4NSwgNjEwODksIAotICAgIDYxMDkzLCA2MTA5OCwgNjExMDIsIDYxMTA3LCA2MTExMSwgMzQ1OTEsIDM0NTk2LCAzNDYwMSwgNjExMTQsIDYxMTIxLCAKLSAgICA2MTEyNywgMzkwODksIDYxMTM3LCAzNDYwNywgMzIxMTIsIDMxODY5LCAzMTg3NSwgMzQ2MjMsIDMxODgxLCA2MTE0MiwgCi0gICAgNjExNDcsIDMyMTQ1LCA2MTE1MSwgNjExNTQsIDYxMTU4LCA2MTE2NSwgNjExNjgsIDYxMTczLCA2MTE3NywgNjExODEsIAotICAgIDYxMTg0LCA2MTE5NCwgNjEyMDYsIDYxMjEzLCA2MTIxOSwgNjEyMjYsIDMzNTQ4LCA2MTIyOSwgODU0MywgODc3LCA2MTIzMiwgCi0gICAgNjEyMzYsIDYxMjQxLCAzNjkwLCA2MTI0NSwgNjEyNDgsIDEzNjI1LCA2MTI1NSwgNjEyNjIsIDYxMjc1LCA2MTI4MywgCi0gICAgNjEyOTIsIDYxMzAxLCA2MTMwNiwgNjEzMTYsIDYxMzI5LCA2MTM0MSwgNjEzNDgsIDYxMzUzLCA2MTM2MiwgNjEzNzUsIAotICAgIDM2MDM1LCA2MTM5MywgNjEzOTgsIDYxNDA1LCA2MTQxMSwgNjUyLCA2MTQxNiwgNjE0MjQsIDYxNDMxLCAyNzI1NCwgNjI3LCAKLSAgICA2MTQzNywgNjE0NDMsIDYxNDUzLCA2MTQ1OSwgNjE0NjQsIDMxODk5LCA2MDAzLCAzMTkxMywgNjE0NjgsIDYxNDc4LCAKLSAgICA2MTQ4MywgNjE0OTMsIDYxNTA4LCA2MTUxNCwgNjE1MjAsIDMxOTIzLCA2MTUyNSwgMzEwNjksIDYxNTI5LCA2MTUzNCwgCi0gICAgNjE1MzksIDYxNTQzLCA2MTU0OCwgMTY5MzcsIDYxNTU1LCA2MTU2MCwgNjE1NjQsIDYwNDQsIDMxOTQ5LCA2MTU2OCwgCi0gICAgNjE1NzQsIDMxMiwgNjE1ODQsIDYxNTkxLCA2MTU5OCwgNjE2MDMsIDYxNjEyLCA1ODc2OSwgNjE2MTgsIDYxNjI2LCAKLSAgICA2MTYzMCwgNjE2MzQsIDYxNjM4LCA2MTY0MiwgNjE2NDcsIDYxNjUxLCA2MTY1NywgNjE2NjUsIDYxNjcwLCA2MTY3NSwgCi0gICAgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTIsIDYxNjk4LCA2MTcwNCwgNjE3MDksIDYxNzEzLCAzMjA3MywgNjE3MTgsIAotICAgIDMyMDc5LCAzMjA4NSwgNjE3MjMsIDYxNzI5LCA2MTczNiwgNjE3NDEsIDYxNzQ1LCAzMTA4NiwgMTY1OTksIDYxNzQ4LCAKLSAgICA2MTc1MiwgNjE3NTcsIDYxNzY0LCA2MTc3MCwgNjE3NzQsIDYxNzc5LCAzODc5OSwgNjE3ODUsIDYxNzg5LCA2MTc5MywgCi0gICAgNjE3OTgsIDYxODA0LCA2MTgxMCwgNjE4MjIsIDYxODMxLCA2MTg0MSwgNjE4NDcsIDYxODU0LCA2MTg1OSwgNjE4NjQsIAotICAgIDYxODY4LCA2MTg3MSwgNjE4NzcsIDYxODg0LCA2MTg4OSwgNjE4OTQsIDYxOTAxLCA2MTkwOCwgNjE5MTQsIDYxOTE5LCAKLSAgICA2MTkyNCwgNjE5MzIsIDMyMDkwLCAyNDIzLCA2MTkzNywgNjE5NDIsIDYxOTQ4LCA2MTk1MywgNjE5NTksIDYxOTY0LCAKLSAgICA2MTk2OSwgNjE5NzQsIDYxOTgwLCAzMjExMSwgNjE5ODUsIDYxOTkxLCA2MTk5NywgNjIwMDMsIDMyMTc1LCA2MjAwOCwgCi0gICAgNjIwMTMsIDYyMDE4LCAzMjE4NiwgNjIwMjMsIDYyMDI4LCA2MjAzMywgNjIwMzksIDYyMDQ1LCAzMjE5MSwgNjIwNTAsIAotICAgIDYyMDU1LCA2MjA2MCwgMzIyNDYsIDMyMjUyLCA2MjA2NSwgNjIwNzAsIDMyMjU3LCA2MjA3NSwgMjc5MzcsIDMyMjc5LCAKLSAgICAzMjI4MywgNjIwODAsIDYyMDU2LCA2MjA4NCwgNjIwOTIsIDYyMDk4LCA2MjEwNiwgNjIxMTMsIDYyMTE5LCA2MjEyOSwgCi0gICAgNjIxMzUsIDYyMTQyLCAxMDYyNCwgMzIyOTcsIDYyMTQ4LCA2MjE2MSwgNjIxNzAsIDYyMTc2LCA2MjE4NSwgNjIxOTEsIAotICAgIDIzNDk1LCA2MjE5OCwgNjIyMDUsIDYyMjE1LCAzMjI0NywgNjIyMTgsIDYyMjI1LCA2MjIzMCwgNjIyMzQsIDYyMjM4LCAKLSAgICA2MjI0MywgNjEyMCwgNjIyNDcsIDYyMjUyLCA2MjI1NywgMzQ2ODUsIDM0NjkwLCA2MjI2MSwgMzQ3MDQsIDYyMjY2LCAKLSAgICAzNDcwOSwgNjIyNzEsIDYyMjc3LCAzNDcyMSwgMzQ3MjcsIDM0NzMzLCA2MjI4MiwgNjIyODgsIDIyNTIyLCA2MjI5OSwgCi0gICAgNjIzMDIsIDYyMzE0LCA2MjMyMiwgMzIzMjAsIDYyMzI2LCA2MjMzNSwgNjIzNDUsIDYyMzU0LCAzMjMzMCwgNjIzNTksIAotICAgIDYyMzY2LCA2MjM3NSwgNjIzODEsIDYyMzg5LCA2MjM5NiwgNjA5NSwgNDM5NywgNjI0MDEsIDMyMjU4LCA2MjQwNywgCi0gICAgNjI0MTAsIDYyNDE2LCA2MjQyMywgNjI0MjgsIDYyNDMzLCAyMzQwNSwgNjI0MzcsIDYyNDQzLCA2MjQ0OSwgNjI0NTQsIAotICAgIDYyNDU5LCA2MjQ2MywgNjI0NjksIDYyNDc1LCAzMzQ1OCwgODYzLCAzNTY5OCwgMzY2MTksIDM2NjI1LCAzMjM2NiwgCi0gICAgNjI0ODAsIDYyNDg0LCA2MjQ4OCwgNjI0OTEsIDYyNTA0LCA2MjUxMCwgNjI1MTQsIDYyNTE3LCA2MjUyMiwgMzM3NjEsIAotICAgIDYyNTI2LCAzMTA5MSwgMjEyNzQsIDYyNTMyLCA2MDI0LCA2MDMyLCA5MDY4LCA2MjUzNSwgNjI1NDAsIDYyNTQ1LCA2MjU1MCwgCi0gICAgNjI1NTUsIDYyNTYwLCA2MjU2NSwgNjI1NzAsIDYyNTc1LCA2MjU4MCwgNjI1ODYsIDYyNTkxLCA2MjU5NiwgNjI2MDIsIAotICAgIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIyLCA2MjYyNywgNjI2MzIsIDYyNjM4LCA2MjY0MywgNjI2NDksIDYyNjU0LCAKLSAgICA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NCwgNjI2NzksIDYyNjg0LCA2MjY4OSwgNjI2OTQsIDYyNjk5LCA2MjcwNSwgCi0gICAgNjI3MTAsIDYyNzE1LCA2MjcyMCwgNjI3MjUsIDYyNzMwLCA2MjczNSwgNjI3NDEsIDYyNzQ2LCA2Mjc1MSwgNjI3NTYsIAotICAgIDYyNzYxLCA2Mjc2NiwgNjI3NzEsIDYyNzc2LCA2Mjc4MSwgNjI3ODYsIDYyNzkyLCA2Mjc5NywgNjI4MDIsIDYyODA3LCAKLSAgICA2MjgxMiwgNjI4MTgsIDYyODI0LCA2MjgyOSwgNjI4MzUsIDYyODQwLCA2Mjg0NSwgNjI4NTAsIDYyODU1LCA2Mjg2MCwgCi0gICAgMTUxMywgMjQ1LCA2Mjg2NSwgNjI4NjksIDYyODczLCA2Mjg3NywgMjUxMTYsIDYyODgxLCA2Mjg4NSwgNjI4OTAsIDYyODk0LCAKLSAgICA2Mjg5OSwgNjI5MDMsIDYyOTA4LCA2MjkxMywgNjI5MTgsIDYyOTIyLCA2MjkyNiwgNjI5MzEsIDYyOTM1LCAxMzM2MiwgCi0gICAgNjI5NDAsIDYyOTQ0LCA2Mjk1MSwgNjI5NjEsIDE1MTkzLCA2Mjk3MCwgNjI5NzksIDYyOTgzLCA2Mjk4OCwgNjI5OTMsIAotICAgIDYyOTk3LCAyNDkwNywgMzAxOSwgNjMwMDEsIDE3MzUwLCA2MzAwNywgNjMwMTYsIDYzMDI0LCA2MzAzMCwgNjMwNDIsIAotICAgIDYzMDU0LCA2MzA1OCwgNjMwNjMsIDYzMDY3LCA2MzA3MywgNjMwNzksIDYzMDg0LCA2MzA5NCwgNjMxMDQsIDYzMTEwLCAKLSAgICA2MzExNSwgNjMxMTksIDYzMTI0LCA2MzEzMCwgNjMxMzksIDYzMTQ4LCA2MzE1NiwgMTU1NDcsIDYzMTYwLCA2MzE2OSwgCi0gICAgNjMxNzcsIDYzMTg5LCA2MzIwMCwgNjMyMTEsIDYzMjIwLCA2MzIyNCwgNjMyMzMsIDYzMjQzLCA2MzI1MSwgNjMyNTcsIAotICAgIDYzMjYyLCA2MzI2OCwgNjMyNzMsIDk4LCAzMDkwMCwgNjMyODQsIDI2MjQ5LCAyNjI1OSwgNjMyOTAsIDYzMjk3LCA2MzMwMywgCi0gICAgNjMzMDcsIDYzMzE3LCA2MzMyOCwgNjMzMzYsIDYzMzQ1LCA2MzM1MCwgNjMzNTUsIDYzMzU5LCAxNzMwNCwgNjMzNjcsIAotICAgIDYzMzcxLCA2MzM3NywgNjMzODcsIDYzMzk0LCA2MzQwMCwgMzQ3ODQsIDYzNDA2LCA2MzQwOCwgNjM0MTEsIDYzNDE1LCAKLSAgICA2MzQyNSwgNjM0MzEsIDYzNDM4LCAxMzMwOCwgNjM0NDUsIDYzNDUxLCA2MzQ2MCwgNjM0NjksIDYzNDc1LCA2MzQ4MSwgCi0gICAgNjM0ODcsIDYzNDkyLCA2MzQ5OSwgNjM1MDYsIDYzNTEyLCA2MzUyNSwgNjM1MzQsIDYzNTQzLCA2MzU0OCwgNjM1NTIsIAotICAgIDYzNTU4LCA2MzU2NSwgNjM1NzIsIDYzNTc5LCA2MzU4NiwgNjM1OTMsIDYzNTk4LCA2MzYwMiwgNjM2MDYsIDYzNjA5LCAKLSAgICA2MzYxOSwgNjM2MjMsIDYzNjM1LCA2MzY0NCwgNjM2NDgsIDYzNjUzLCA2MzY1NywgNjM2NjMsIDYzNjY4LCA2MzY3NSwgCi0gICAgNjM2ODQsIDYzNjkyLCA2MzcwMCwgNjM3MDUsIDYzNzA5LCA2MzcxNCwgNjM3MTksIDYzNzI5LCA2MzczNywgNjM3NDIsIAotICAgIDYzNzQ2LCA2Mzc1MCwgNjM3NTYsIDYzNzY4LCA2Mzc3NiwgNjM3ODYsIDYzNzkzLCA2Mzc5OSwgNjM4MDQsIDYzODA4LCAKLSAgICA2MzgxMiwgNjM4MTYsIDYzODI1LCA2MzgzNCwgNjM4NDMsIDYzODQ5LCA2Mzg1NSwgNjM4NjEsIDYzODY2LCA2Mzg3MywgCi0gICAgNjM4NzksIDYzODg3LCA2Mzg5NCwgMTI0NTYsIDYzOTAwLCA2MzkwNiwgNjM5MTAsIDE0MjMxLCA2MzkxNCwgNjM5MTksIAotICAgIDYzOTI5LCA2MzkzOCwgNjM5NDQsIDYzOTUwLCA2Mzk1OCwgNjM5NjUsIDYzOTY5LCA2Mzk3MywgNjM5NzksIDYzOTg3LCAKLSAgICA2Mzk5NCwgNjQwMDAsIDY0MDExLCA2NDAxNSwgNjQwMTksIDY0MDIzLCA2NDAyNiwgNjQwMzIsIDY0MDM3LCA2NDA0MSwgCi0gICAgNjQwNDUsIDY0MDU0LCA2NDA2MiwgNjQwNjksIDY0MDc1LCA2NDA4MiwgMjQwMjksIDM4ODQxLCA2NDA4NywgNjQwOTUsIAotICAgIDY0MDk5LCA2NDEwMywgNjQxMDYsIDY0MTE0LCA2NDEyMSwgNjQxMjcsIDY0MTM2LCA2NDE0NCwgNjQxNTAsIDY0MTU1LCAKLSAgICA2NDE1OSwgNjQxNjQsIDY0MTY4LCA2NDE3MiwgNjQxNzcsIDY0MTg2LCA2NDE5MCwgNjQxOTcsIDY0MjA0LCA2NDIxMCwgCi0gICAgNjQyMTgsIDY0MjI0LCA2NDIzNSwgNjQyNDMsIDY0MjQ5LCAyMjY1MiwgNjQyNTgsIDY0MjY1LCA2NDI3MiwgNjQyNzksIAotICAgIDY0Mjg2LCA2NDI5MywgNDE4NzAsIDEzMTQ2LCA2NDMwMCwgNjQzMDcsIDY0MzEyLCAzNDgyMCwgNjIxNywgNjQzMTgsIAotICAgIDY0MzIzLCA2NDMyOCwgNjQzMzQsIDY0MzQwLCA2NDM0NiwgNjQzNTEsIDY0MzU2LCA2NDM2MSwgNjQzNjYsIDY0MzcyLCAKLSAgICA2NDM3NywgNjQzODMsIDY0Mzg4LCA2NDM5NCwgNjQzOTksIDY0NDA0LCA2NDQwOSwgNjQ0MTQsIDY0NDE5LCA2NDQyNCwgCi0gICAgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDYsIDY0NDUxLCA2NDQ1NiwgNjQ0NjEsIDY0NDY2LCA2NDQ3MSwgNjQ0NzYsIAotICAgIDY0NDgyLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCA2NDUxNywgNjQ1MjIsIDY0NTI3LCAKLSAgICA2NDUzMiwgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgNjQ1NjgsIDY0NTczLCA2NDU3OCwgCi0gICAgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIDY0NjE5LCA2NDYyNCwgNjQ2MjksIAotICAgIDY0NjM0LCA2NDYzOSwgNjQ2NDQsIDY0NjUwLCAxODM0LCAyMjQsIDM3NDE3LCA2NDY1NSwgNjQ2NTgsIDY0NjYzLCA2NDY2NywgCi0gICAgNjQ2NzAsIDY0Njc1LCA2MzY5NiwgNjQ2ODYsIDY0Njk2LCA2NDcwMywgNjQ3MTksIDY0NzI4LCA2NDczOCwgNjQ3NDgsIAotICAgIDY0NzU2LCA2NDc3MCwgNjQ3NzgsIDY0NzgyLCA2NDc4NSwgNjQ3OTIsIDY0Nzk4LCA2NDgwOSwgNjQ4MjEsIDY0ODMyLCAKLSAgICA2NDg0MSwgNjQ4NDgsIDEyOTcsIDIzMjk0LCA2NDg1OCwgMjU5MCwgNjQ4NjIsIDY0ODcxLCAxMTMzLCAxNzI3NywgMzgwNTQsIAotICAgIDY0ODc5LCA2NDg4NywgNjQ5MDEsIDY0OTE0LCA2NDkxOCwgNjQ5MjMsIDY0OTI4LCA2NDkzMywgNjQ5MzksIDY0OTQ1LCAKLSAgICA2NDk1MCwgODUzNSwgNjQ5NTUsIDY0OTU5LCA2NDk2NywgMTEwNDEsIDY0OTcyLCA2NDk3OCwgNjQ5ODcsIDE3MjEsIAotICAgIDExMDUzLCA3MzYsIDY0OTkxLCA2NTAwMCwgNjUwMTAsIDI3MDEzLCA2NTAxOSwgNjUwMjUsIDE2ODQ5LCA2NTAzMSwgCi0gICAgNjUwMzUsIDM5NjQsIDExMzg0LCA2NTA0MSwgNjUwNDgsIDYwNjU2LCA2NTA1MiwgNjUwNTYsIDM5ODgsIDE4OSwgMTQxNDYsIAotICAgIDY1MDYyLCA2NTA3NCwgNjUwNzgsIDY1MDg0LCAyNzczMCwgNjUwODgsIDExMzcyLCAyNzMwLCA0LCA2NTA5MywgNjUxMDMsIAotICAgIDY1MTA5LCA2NTEyMCwgNjUxMjcsIDY1MTMzLCA2NTEzOSwgNjUxNDcsIDY1MTU0LCA2NTE2MCwgNjUxNzAsIDY1MTgwLCAKLSAgICA2NTE5MCwgMjM0ODIsIDEzMDksIDY1MTk5LCA2NTIwMywgNjUyMDcsIDY1MjEzLCA2NTIxNywgMjc1MywgMjc1OSwgODUzMiwgCi0gICAgMjI2NCwgNjUyMjEsIDY1MjI1LCA2NTIzNCwgNjUyNDIsIDY1MjUzLCA2NTI2MSwgNjUyNjksIDY1Mjc1LCA2NTI4MCwgCi0gICAgNjUyOTEsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDk2ODcsIDY1MzIxLCA2NTMyOSwgNjUzMzMsIDY1MzM3LCA2NTM0MSwgCi0gICAgNjUzNTMsIDI4MTE1LCA2NTM2MCwgNjUzNzAsIDY1Mzc2LCA2NTM4MiwgOTc4OSwgNjUzOTIsIDY1NDAzLCA2NTQxMywgCi0gICAgNjU0MjIsIDY1NDI2LCA2NTQzMywgMTEzNSwgMTE3MCwgNjU0NDMsIDY1NDQ4LCA2NTQ1NiwgNjU0NjQsIDY1NDc1LCAKLSAgICA2NTQ4MiwgNjU0OTYsIDE0MDc1LCAzOTMsIDY1NTA2LCA2NTUxMCwgNjU1MTgsIDY1NTI3LCA2NTUzNSwgNjU1NDEsIAotICAgIDY1NTU1LCA2NTU2MiwgNjU1NjgsIDY1NTc3LCA2NTU4NCwgNjU1OTQsIDY1NjAyLCAzODEyLCAxNTYsIDY1NjEwLCA2NTYyMSwgCi0gICAgNjU2MjUsIDY1NjM3LCAyNzkyOCwgMTYxLCA2NTY0MywgNjU2NDgsIDY1NjUyLCA2NTY1OSwgNjU2NjUsIDY1NjczLCAKLSAgICA2NTY4MCwgODgxOCwgNjU2ODcsIDY1Njk2LCA2NTcwNCwgMzg3OCwgNjU3MTcsIDgxOTksIDY1NzIxLCAyNzk4LCA0NTAsIAotICAgIDY1NzI2LCA2NTczOSwgNjU3NDQsIDE4MzMsIDY2OCwgNjU3NDgsIDM4OTUsIDY1NzU2LCA2NTc2MiwgNjU3NjYsIDkzMSwgCi0gICAgNjU3NzYsIDY1Nzg1LCA2NTc5MCwgMTQ5MTUsIDE0OTIyLCA0NTIzMiwgNjU3OTQsIDM4MjIsIDEzMDM0LCA2NTgwMiwgCi0gICAgNjU4MDksIDIzNTM4LCA2NTgxMywgNjU4MjAsIDY1ODI2LCA2NTgzMSwgNjU4MzYsIDE0OTM1LCAzNzIsIDY1ODQxLCAKLSAgICA2NTg1MywgNjU4NTksIDY1ODY3LCAyODEwLCAxNzUzLCA2NTg3NSwgNjU4NzcsIDY1ODgyLCA2NTg4NywgNjU4OTIsIAotICAgIDY1ODk4LCA2NTkwMywgNjU5MDgsIDY1OTEzLCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzNCwgNjU5MzksIDY1OTQ0LCAKLSAgICA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc0LCA2NTk4MCwgNjU5ODUsIDY1OTkwLCA2NTk5NSwgCi0gICAgNjYwMDEsIDY2MDA2LCA2NjAxMiwgNjYwMTcsIDY2MDIyLCA2NjAyNywgNjYwMzIsIDY2MDM3LCA2NjA0MiwgNjYwNDcsIAotICAgIDY2MDUzLCA2NjA1OCwgNjYwNjQsIDY2MDY5LCA2NjA3NCwgNjYwNzksIDY2MDg0LCA2NjA4OSwgNjYwOTQsIDY2MDk5LCAKLSAgICA2NjEwNCwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTI5LCA2NjEzMywgNjYxMzgsIDY2MTQyLCA2NjE0NywgCi0gICAgNjYxNTIsIDY2MTU4LCA2NjE2MywgNjYxNjcsIDY2MTcyLCA2NjE3NiwgNjYxNzksIDY2MTgxLCA2NjE4NSwgNjYxODgsIAotICAgIDY2MTkzLCA2NjE5NywgNjYyMDEsIDY2MjA1LCA2NjIwOSwgNjYyMTgsIDY2MjIyLCAzMjUyNCwgNjYyMjUsIDMyNTI5LCAKLSAgICA2NjIzMiwgNjYyMzcsIDMyNTM0LCA2NjI0NiwgNjYyNTUsIDMyNTQwLCA2NjI2MCwgMzI1NDUsIDY2MjY5LCA2NjI3NCwgCi0gICAgMTE1NzEsIDY2Mjc4LCA2NjI4MywgNjYyODgsIDMyNTUwLCA2NjI5MiwgNDAxOTYsIDY2Mjk2LCA2NjI5OSwgNjYzMDMsIAotICAgIDgyMTEsIDY2MzA5LCA2NjMxNCwgNjYzMTgsIDM3MDUsIDMyNTU1LCA2NjMyMSwgNjYzMjUsIDY2MzI4LCA2NjMzMywgCi0gICAgNjYzMzcsIDY2MzQzLCA2NjM1MSwgNjYzNjQsIDY2MzczLCA2NjM3OSwgNjYzODQsIDY2MzkwLCA2NjM5NCwgNjY0MDAsIAotICAgIDY2NDA4LCA2NjQxMywgNjY0MTcsIDY2NDI0LCA2NjQzMCwgNjY0MzgsIDY2NDQ3LCA2NjQ1NSwgMzI1NTgsIDY2NDYyLCAKLSAgICA2NjQ3MiwgNjY0ODEsIDY2NDk0LCA2NjQ5OSwgNjY1MDQsIDY2NTEzLCA2NjUxOSwgNjY1MjYsIDY2NTM3LCA2NjU0OSwgCi0gICAgNjY1NTYsIDY2NTY1LCA2NjU3NCwgNjY1ODMsIDY2NTkwLCA2NjU5NiwgNjY2MDMsIDY2NjExLCA2NjYxOCwgNjY2MjYsIAotICAgIDY2NjM1LCA2NjY0MywgNjY2NTAsIDY2NjU4LCA2NjY2NywgNjY2NzUsIDY2Njg0LCA2NjY5NCwgNjY3MDMsIDY2NzExLCAKLSAgICA2NjcxOCwgNjY3MjYsIDY2NzM1LCA2Njc0MywgNjY3NTIsIDY2NzYyLCA2Njc3MSwgNjY3NzksIDY2Nzg4LCA2Njc5OCwgCi0gICAgNjY4MDcsIDY2ODE3LCA2NjgyOCwgNjY4MzgsIDY2ODQ3LCA2Njg1NSwgNjY4NjIsIDY2ODcwLCA2Njg3OSwgNjY4ODcsIAotICAgIDY2ODk2LCA2NjkwNiwgNjY5MTUsIDY2OTIzLCA2NjkzMiwgNjY5NDIsIDY2OTUxLCA2Njk2MSwgNjY5NzIsIDY2OTgyLCAKLSAgICA2Njk5MSwgNjY5OTksIDY3MDA4LCA2NzAxOCwgNjcwMjcsIDY3MDM3LCA2NzA0OCwgNjcwNTgsIDY3MDY3LCA2NzA3NywgCi0gICAgNjcwODgsIDY3MDk4LCA2NzEwOSwgNjcxMjEsIDY3MTMyLCA2NzE0MiwgNjcxNTEsIDY3MTU5LCA2NzE2NiwgNjcxNzQsIAotICAgIDY3MTgzLCA2NzE5MSwgNjcyMDAsIDY3MjEwLCA2NzIxOSwgNjcyMjcsIDY3MjM2LCA2NzI0NiwgNjcyNTUsIDY3MjY1LCAKLSAgICA2NzI3NiwgNjcyODYsIDY3Mjk1LCA2NzMwMywgNjczMTIsIDY3MzIyLCA2NzMzMSwgNjczNDEsIDY3MzUyLCA2NzM2MiwgCi0gICAgNjczNzEsIDY3MzgxLCA2NzM5MiwgNjc0MDIsIDY3NDEzLCA2NzQyNSwgNjc0MzYsIDY3NDQ2LCA2NzQ1NSwgNjc0NjMsIAotICAgIDY3NDcyLCA2NzQ4MiwgNjc0OTEsIDY3NTAxLCA2NzUxMiwgNjc1MjIsIDY3NTMxLCA2NzU0MSwgNjc1NTIsIDY3NTYyLCAKLSAgICA2NzU3MywgNjc1ODUsIDY3NTk2LCA2NzYwNiwgNjc2MTUsIDY3NjI1LCA2NzYzNiwgNjc2NDYsIDY3NjU3LCA2NzY2OSwgCi0gICAgNjc2ODAsIDY3NjkwLCA2NzcwMSwgNjc3MTMsIDY3NzI0LCA2NzczNiwgNjc3NDksIDY3NzYxLCA2Nzc3MiwgNjc3ODIsIAotICAgIDY3NzkxLCA2Nzc5OSwgNjc4MDYsIDY3ODE0LCA2NzgyMywgNjc4MzEsIDY3ODQwLCA2Nzg1MCwgNjc4NTksIDY3ODY3LCAKLSAgICA2Nzg3NiwgNjc4ODYsIDY3ODk1LCA2NzkwNSwgNjc5MTYsIDY3OTI2LCA2NzkzNSwgNjc5NDMsIDY3OTUyLCA2Nzk2MiwgCi0gICAgNjc5NzEsIDY3OTgxLCA2Nzk5MiwgNjgwMDIsIDY4MDExLCA2ODAyMSwgNjgwMzIsIDY4MDQyLCA2ODA1MywgNjgwNjUsIAotICAgIDY4MDc2LCA2ODA4NiwgNjgwOTUsIDY4MTAzLCA2ODExMiwgNjgxMjIsIDY4MTMxLCA2ODE0MSwgNjgxNTIsIDY4MTYyLCAKLSAgICA2ODE3MSwgNjgxODEsIDY4MTkyLCA2ODIwMiwgNjgyMTMsIDY4MjI1LCA2ODIzNiwgNjgyNDYsIDY4MjU1LCA2ODI2NSwgCi0gICAgNjgyNzYsIDY4Mjg2LCA2ODI5NywgNjgzMDksIDY4MzIwLCA2ODMzMCwgNjgzNDEsIDY4MzUzLCA2ODM2NCwgNjgzNzYsIAotICAgIDY4Mzg5LCA2ODQwMSwgNjg0MTIsIDY4NDIyLCA2ODQzMSwgNjg0MzksIDY4NDQ4LCA2ODQ1OCwgNjg0NjcsIDY4NDc3LCAKLSAgICA2ODQ4OCwgNjg0OTgsIDY4NTA3LCA2ODUxNywgNjg1MjgsIDY4NTM4LCA2ODU0OSwgNjg1NjEsIDY4NTcyLCA2ODU4MiwgCi0gICAgNjg1OTEsIDY4NjAxLCA2ODYxMiwgNjg2MjIsIDY4NjMzLCA2ODY0NSwgNjg2NTYsIDY4NjY2LCA2ODY3NywgNjg2ODksIAotICAgIDY4NzAwLCA2ODcxMiwgNjg3MjUsIDY4NzM3LCA2ODc0OCwgNjg3NTgsIDY4NzY3LCA2ODc3NywgNjg3ODgsIDY4Nzk4LCAKLSAgICA2ODgwOSwgNjg4MjEsIDY4ODMyLCA2ODg0MiwgNjg4NTMsIDY4ODY1LCA2ODg3NiwgNjg4ODgsIDY4OTAxLCA2ODkxMywgCi0gICAgNjg5MjQsIDY4OTM0LCA2ODk0NSwgNjg5NTcsIDY4OTY4LCA2ODk4MCwgNjg5OTMsIDY5MDA1LCA2OTAxNiwgNjkwMjgsIAotICAgIDY5MDQxLCA2OTA1MywgNjkwNjYsIDY5MDgwLCA2OTA5MywgNjkxMDUsIDY5MTE2LCA2OTEyNiwgNjkxMzUsIDY5MTQzLCAKLSAgICA2OTE1MCwgNjkxNTUsIDgwNTgsIDY5MTYyLCAzMjU2OCwgNjkxNjcsIDY5MTcyLCAzMjU3MywgNjkxNzgsIDIwOTE2LCAKLSAgICAzMjU3OCwgNjkxODMsIDY5MTg5LCA2OTE5NywgNjkyMDMsIDY5MjA5LCA2OTIxNiwgNjkyMjMsIDY5MjI4LCA2OTIzMiwgCi0gICAgNjkyMzUsIDY5MjM5LCA2OTI0OCwgNjkyNTQsIDY5MjY2LCA2OTI3NywgNjkyODEsIDMwODEsIDgwMzMsIDY5Mjg2LCAKLSAgICA2OTI4OSwgNjkyOTEsIDY5Mjk1LCA2OTI5OSwgNjkzMDMsIDY5MzA5LCA2OTMxNCwgMjU5MjcsIDY5MzE5LCA2OTMyMywgCi0gICAgNjkzMjYsIDY5MzMxLCA2OTMzNSwgNjkzNDIsIDY5MzQ4LCA2OTM1MiwgNjE3MCwgNjkzNTYsIDMyNTk1LCA2OTM2MSwgCi0gICAgNjkzNjgsIDY5Mzc3LCA2OTM4NSwgNjkzOTYsIDY5NDA0LCA2OTQxMiwgNjk0MTksIDY5NDI2LCA2OTQzMiwgNjk0NDMsIAotICAgIDMyNjAwLCA2OTQ0OCwgNjk0NTksIDY5NDcxLCA2OTQ3OSwgNjk0OTAsIDY5NDk5LCA2OTUxMCwgNjk1MTUsIDY5NTIzLCAKLSAgICAyNTU2LCA2OTUyOCwgMzQyNzAsIDY5NTQxLCA2OTU0NSwgNjk1NTcsIDY5NTY1LCA2OTU3MCwgNjk1NzgsIDE3NDcyLCAKLSAgICA2OTU4OSwgNjk1OTUsIDY5NjAyLCA2OTYxMCwgNjk2MTYsIDMyNjEwLCA2OTYyMSwgMzkxNCwgNTgyMTcsIDY5NjI4LCAKLSAgICA2OTYzMSwgNjk2MzksIDY5NjUyLCA2OTY2NSwgNjk2NzgsIDY5NjkxLCA2OTY5OCwgNjk3MDksIDY5NzE4LCA0MTY4NywgCi0gICAgNDE2OTIsIDY5NzIzLCA2OTcyNywgNjk3MzUsIDY5NzQyLCA2OTc1MSwgNjk3NTksIDY5NzY1LCA2OTc3NCwgNjk3ODIsIAotICAgIDY5NzkwLCA2OTc5NCwgNjk4MDMsIDY5ODEyLCA2OTgyMiwgNjk4MzUsIDY5ODQ4LCA2OTg1OCwgMzI2MTUsIDY5ODY0LCAKLSAgICA2OTg3MSwgNjk4NzcsIDMyNjIxLCA2OTg4MiwgNjk4ODUsIDY5ODg5LCA2OTg5NywgNjk5MDYsIDQxNDI1LCA2OTkxNCwgCi0gICAgNjk5MjMsIDY5OTMxLCA2OTkzOCwgNjk5NDYsIDY5OTU2LCA2OTk2NSwgNjk5NzQsIDY5OTgzLCA2OTk5MSwgNzAwMDIsIAotICAgIDcwMDEyLCA5MzU5LCAyMTU1NCwgNzAwMjEsIDcwMDI2LCA3MDAzMSwgNzAwMzUsIDcwMDM5LCA3MDA0NCwgNzAwNTAsIAotICAgIDcwMDU1LCA3MDA2MCwgNzAwNjYsIDcwMDcxLCA3MDA3NiwgMjE1MTksIDcwMDgxLCA3MDA4OCwgNzAwOTYsIDcwMTA0LCAKLSAgICA3MDEwOSwgNzAxMTYsIDcwMTIzLCA3MDEyOCwgNzAxMzIsIDcwMTM2LCA3MDE0NCwgNzAxNTIsIDMyNjM4LCA3MDE1OCwgCi0gICAgNzAxNjQsIDcwMTc2LCA3MDE4MiwgNzAxODYsIDcwMTkzLCA3MDE5OCwgNzAyMDksIDcwMjE5LCA3MDIyOSwgNzAyNDEsIAotICAgIDcwMjQ3LCA3MDI1NywgNzAyNjcsIDMyNjY1LCA3MDI3NiwgNzAyODUsIDcwMjkxLCA3MDMwMywgNzAzMTQsIDcwMzIxLCAKLSAgICA3MDMyNiwgNzAzMzAsIDcwMzM4LCA3MDM0NCwgNzAzNDksIDcwMzU0LCA3MDM2MSwgNzAzNjksIDcwMzgxLCA3MDM5MSwgCi0gICAgNzA0MDAsIDcwNDA5LCA3MDQxNiwgMzQxMzIsIDIzODM0LCA3MDQyMiwgNzA0MjcsIDcwNDMxLCA3MDQzNSwgNzA0NDAsIAotICAgIDcwNDQ2LCA3MDQ1NywgNzA0NzAsIDcwNDc1LCA3MDQ4MiwgMzI2NzAsIDcwNDg3LCA3MDQ5OSwgNzA1MDgsIDcwNTE4LCAKLSAgICA3MDUyOSwgNzA1NDIsIDcwNTQ5LCA3MDU1OCwgNzA1NjcsIDcwNTc1LCA3MDU4MCwgNzA1ODYsIDEwNTgsIDcwNTkxLCAKLSAgICA3MDU5NiwgNzA2MDEsIDcwNjA2LCA3MDYxMiwgNzA2MTcsIDcwNjIyLCA3MDYyOCwgNzA2MzQsIDcwNjM5LCA3MDY0MywgCi0gICAgNzA2NDgsIDcwNjUzLCA3MDY1OCwgNTg3MjksIDcwNjYzLCA3MDY2OCwgNzA2NzMsIDcwNjc4LCA3MDY4NCwgNzA2OTAsIAotICAgIDcwNjk1LCA3MDY5OSwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MjAsIDcwNzI1LCA3MDczMSwgNzA3MzYsIDcwNzQxLCAKLSAgICA3MDc0NiwgNzA3NTEsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzc1LCA3MDc4MCwgNzA3ODUsIDcwNzkwLCA3MDc5NSwgCi0gICAgNzA3OTksIDcwODA2LCA3MDgxMiwgMTcxMjIsIDE3MTI5LCA3MDgxNywgNzA4MjEsIDcwODI1LCA3MDgyOSwgNzA4MzMsIAotICAgIDQ1NDg3LCA3MDgzNywgNzA3NjcsIDcwODM5LCA3MDg0OSwgMzI2NzksIDcwODUyLCA3MDg2MSwgNzA4NjcsIDYxNDMsIAotICAgIDMyNjg0LCA3MDg3MSwgNzA4NzcsIDcwODgyLCA3MDg4OCwgNzA4OTMsIDcwODk3LCA3MDkwNCwgNzA5MDksIDcwOTE5LCAKLSAgICA3MDkyOCwgNzA5MzIsIDcwOTM4LCA3MDk0NCwgNzA5NTAsIDcwOTU0LCA3MDk2MiwgNzA5NjksIDcwOTc3LCA3MDk4NSwgCi0gICAgMzI2ODksIDcwOTkyLCA3MDk5NSwgNzEwMDIsIDcxMDA4LCA3MTAxMywgNzEwMTcsIDcxMDIzLCA3MTAzMCwgNzEwMzUsIAotICAgIDcxMDM5LCA3MTA0OCwgNzEwNTYsIDcxMDYyLCA3MTA2NywgMzI2OTQsIDcxMDc0LCA3MTA4MSwgNzEwODcsIDcxMDkyLCAKLSAgICA3MTA5OCwgNzExMDUsIDcxMTExLCAyMTI4MSwgMjc0MzgsIDcxMTE3LCA3MTEyMiwgNzExMjgsIDcxMTQwLCA3MDgwMCwgCi0gICAgNzA4MDcsIDIxNDU3LCA3MTE1MCwgNzExNTUsIDcxMTYyLCA3MTE2OCwgNzExNzUsIDcxMTgxLCA3MTE5MiwgNzExOTcsIAotICAgIDkxMDMsIDcxMjA1LCA3MTIwOCwgNzEyMTQsIDcxMjE4LCA3MTIyMiwgNzEyMjUsIDcxMjMxLCAzMjQ0MywgNjE5NCwgOTY0LCAKLSAgICAxMzQxMiwgNzEyMzgsIDcxMjQ0LCA3MTI1MCwgNzEyNTYsIDcxMjYyLCA3MTI2OCwgNzEyNzQsIDcxMjgwLCA3MTI4NiwgCi0gICAgNzEyOTEsIDcxMjk2LCA3MTMwMSwgNzEzMDYsIDcxMzExLCA3MTMxNiwgNzEzMjEsIDcxMzI2LCA3MTMzMSwgNzEzMzYsIAotICAgIDcxMzQxLCA3MTM0NiwgNzEzNTEsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzczLCA3MTM3OCwgNzEzODMsIDcxMzg5LCAKLSAgICA3MTM5NSwgNzE0MDEsIDcxNDA3LCA3MTQxMywgNzE0MTksIDcxNDI1LCA3MTQzMSwgNzE0MzcsIDcxNDQyLCA3MTQ0NywgCi0gICAgNzE0NTMsIDcxNDU4LCA3MTQ2MywgNzE0NjksIDcxNDc0LCA3MTQ3OSwgNzE0ODQsIDcxNDg5LCA3MTQ5NCwgNzE0OTksIAotICAgIDcxNTA0LCA3MTUwOSwgNzE1MTQsIDcxNTE5LCA3MTUyNCwgNzE1MjksIDcxNTM1LCA3MTU0MCwgNzE1NDUsIDcxNTUwLCAKLSAgICA3MTU1NiwgNzE1NjEsIDcxNTY2LCA3MTU3MSwgNzE1NzYsIDcxNTgyLCA3MTU4NywgNzE1OTIsIDcxNTk3LCA3MTYwMiwgCi0gICAgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjIsIDcxNjI3LCA3MTYzMiwgNzE2MzcsIDcxNjQyLCA3MTY0NywgNzE2NTIsIAotICAgIDcxNjU3LCA3MTY2MiwgNzE2NjcsIDcxNjcyLCA3MTY3NywgNzE2ODMsIDcxNjg4LCA3MTY5MywgNzE2OTgsIDcxNzAzLCAKLSAgICA3MTcwOCwgNzE3MTMsIDcxNzE4LCAxODY0LCAxNDIsIDcxNzIzLCA3MTcyNywgNzE3MzEsIDcxNzM2LCA3MTc0NCwgNzE3NDgsIAotICAgIDcxNzU1LCA3MTc2MywgNzE3NjcsIDcxNzgwLCA3MTc4OCwgNzE3OTIsIDcxNzk1LCA3MTgwMCwgNzE4MDQsIDcxODA5LCAKLSAgICA3MTgxMywgNzE4MjEsIDcxODI1LCAyMDkyNCwgNzE4MzAsIDcxODM0LCA2MDkzMCwgNzE4MzgsIDcxODQxLCA3MTg0OSwgCi0gICAgNzE4NTcsIDcxODY1LCA3MTg3MCwgNzE4NzcsIDcxODgzLCA3MTg4OSwgNzE4OTQsIDcxOTAxLCA3MTkwNiwgNzE5MTQsIAotICAgIDY0OTA2LCA3MTkyMSwgNzE5MjYsIDcxOTMxLCA3MTkzNSwgMTE2MzgsIDcxOTM5LCA3MTk0NCwgNzE5NDksIDcxOTUzLCAKLSAgICA3MTk1NiwgNzE5NjIsIDcxOTY2LCA3MTk3NiwgNzE5ODUsIDcxOTg4LCA3MTk5MiwgNzE5OTksIDcyMDEyLCA3MjAxOCwgCi0gICAgNzIwMjYsIDcyMDM3LCA3MjA0OCwgNzIwNTksIDcyMDcwLCA3MjA3OSwgNzIwODUsIDcyMDk0LCA3MjEwMiwgNzIxMTIsIAotICAgIDcyMTI1LCA3MjEzMiwgNzIxNDMsIDcyMTQ5LCA3MjE1NCwgNzIxNTksIDcyMTY1LCA3MjE3MSwgNzIxODEsIDcyMTkwLCAKLSAgICA3MDQ4OSwgNzIxOTgsIDcyMjA0LCA3MjIxMiwgNzIyMTgsIDcyMjI2LCA3MjIyOSwgNzIyMzMsIDcyMjM3LCA3MjI0MCwgCi0gICAgNzIyNDYsIDcyMjUyLCA3MjI2MCwgNzIyNzIsIDcyMjg0LCA3MjI5MSwgNzIyOTUsIDcyMzA2LCA3MjMxNCwgNzIzMjEsIAotICAgIDcyMzMzLCA3MjM0MSwgNzIzNDksIDcyMzU2LCA3MjM2MiwgNzIzNzIsIDcyMzgxLCA3MjM4NiwgNzIzOTYsIDcyNDA1LCAKLSAgICA0MDc1MSwgNzI0MTIsIDcyNDE2LCA3MjQyMSwgNzI0MjksIDcyNDM2LCA3MjQ0MiwgNzI0NDYsIDcyNDU2LCA3MjQ2NywgCi0gICAgNzI0NzUsIDcyNDgyLCA3MjQ5NCwgNzI1MDYsIDcyNTE1LCA2OTUzMSwgNzI1MjIsIDcyNTMzLCA3MjU0NywgNzI1NTUsIAotICAgIDcyNTY1LCA3MjU3MiwgNzI1ODAsIDcyNTkyLCA3MjYwMSwgNzI2MDksIDcyNjE5LCA3MjYzMCwgNzI2NDIsIDcyNjUxLCAKLSAgICA3MjY2MSwgNzI2NjgsIDcyNjc3LCA3MjY5MiwgNzI3MDAsIDcyNzEwLCA3MjcxOSwgNzI3MjcsIDcyNzQwLCA3Mjc1NSwgCi0gICAgNzI3NTksIDcyNzY4LCA3Mjc4MCwgNzI3OTEsIDcyODAyLCA3MjgxMywgNzI4MjMsIDcyODM0LCA3Mjg0MiwgNzI4NDgsIAotICAgIDcyODU4LCA3Mjg2NiwgNzI4NzIsIDI5MDA3LCA3Mjg3NywgNzI4ODMsIDcyODg4LCA3Mjg5NSwgOTcwMSwgMTc0OTIsIAotICAgIDcyOTAxLCA3MjkxMCwgNzI5MTUsIDcyOTE5LCA3MjkyNiwgNzI5MzIsIDcyOTM3LCA3Mjk0MiwgNzI5NTAsIDcyOTU4LCAKLSAgICA3Mjk2MiwgNzI5NjUsIDcyOTY4LCA3Mjk3MCwgNzI5NzcsIDcyOTgzLCA3Mjk5NCwgNzI5OTksIDczMDAzLCA3MzAxMCwgCi0gICAgNzMwMTYsIDczMDIxLCA3MzAyOSwgNjU0MDUsIDY1NDE1LCA3MzAzNSwgNzMwNDIsIDczMDUyLCAxMDYxMSwgNzMwNTksIAotICAgIDczMDY0LCAyOTIwMywgNzMwNzMsIDczMDc4LCA3MzA4NSwgNzMwOTUsIDczMTAzLCA3MzExMSwgNzMxMjAsIDczMTI2LCAKLSAgICA3MzEzMiwgNzMxMzksIDczMTQ2LCA3MzE1MSwgNzMxNTUsIDczMTYzLCA3MzE2OCwgNzMxNzMsIDczMTgxLCA3MzE4OCwgCi0gICAgNzMxOTMsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjE1LCA3MTc3NSwgNzMyMjQsIDczMjI4LCA3MzIzNCwgNzMyNDUsIAotICAgIDczMjU1LCAxNzUwMSwgNzMyNjYsIDczMjc0LCAxNzUxMywgNzMyODEsIDczMjg1LCA3MzI5NCwgMjczMjQsIDczMzAxLCAKLSAgICA3MzMwNSwgNzMzMTAsIDczMzI3LCA3MzMzOSwgMTA1NjksIDczMzUxLCA3MzM1NiwgNzMzNjEsIDczMzY2LCAyMDk5NywgCi0gICAgNzMzNzAsIDczMzc1LCA3MzM4MCwgNzMzODYsIDczMzkxLCA1ODQ2LCAyMTAwMSwgNzMzOTYsIDczNDAxLCA3MzQwNywgCi0gICAgNzM0MTQsIDczNDE5LCA3MzQyNCwgNzM0MzAsIDczNDM2LCA3MzQ0MiwgNzM0NDcsIDczNDUzLCA3MzQ1NywgNzM0NzEsIAotICAgIDczNDc5LCA3MzQ4NywgNzM0OTMsIDczNDk4LCA3MzUwNSwgNzM1MTUsIDczNTI0LCA3MzUyOSwgNzM1MzQsIDczNTQyLCAKLSAgICA3MzU0NywgNzM1NTMsIDczNTU4LCA3MzU2NywgNTk3ODYsIDczNTcyLCA3MzU3NSwgNzM1OTMsIDczNjEyLCA3MzYyNSwgCi0gICAgNzM2MzksIDczNjU1LCA3MzY2MiwgNzM2NjksIDczNjc1LCA3MzY4MiwgNzM2ODcsIDczNjkzLCA3MzY5OSwgNzM3MDcsIAotICAgIDczNzEzLCA3MzcxOCwgNzM3MjMsIDczNzM5LCAxMDU4MiwgNzM3NTMsIDczNzYwLCA3Mzc2OCwgNzM3NzQsIDczNzc4LCAKLSAgICA3Mzc4MSwgNzM3ODYsIDczNzkxLCA3Mzc5OCwgNzM4MDMsIDczODEyLCA3MzgxNywgNzM4MjMsIDczODMyLCA3Mzg0MSwgCi0gICAgNzM4NDYsIDczODUwLCA3Mzg1OCwgNzM4NjcsIDExNjY3LCA3Mzg3NiwgNzM4ODQsIDczODg5LCA3Mzg5NSwgMTE2NzgsIAotICAgIDczOTAwLCA3MzkwMywgNzM5MDgsIDczOTE4LCA3MzkyNywgNzM5MzIsIDczOTM4LCA3Mzk0MywgNzM5NTEsIDczOTU4LCAKLSAgICA3Mzk2OSwgNzM5NzksIDczOTg0LCA2NDgzNCwgNzM5ODksIDczOTk1LCA3NDAwMCwgNzQwMDcsIDc0MDE2LCA3NDAyNCwgCi0gICAgNzQwMzAsIDc0MDM2LCA3NDA0MywgNzQwNDksIDc0MDUzLCAxNjk0NywgMzA1NSwgNzQwNTgsIDc0MDYyLCA3NDA2NiwgCi0gICAgNzQwNzIsIDc0MDgxLCA3NDA4NywgNzQwOTQsIDc0MDk4LCA3NDExOSwgNzQxNDEsIDc0MTU3LCA3NDE3NCwgNzQxOTMsIAotICAgIDc0MjAyLCA3NDIxMiwgNzQyMTksIDc0MjI2LCAyNzIxMSwgNzQyMzIsIDc0MjM2LCA3NDI0NCwgNzQyNTYsIDc0MjYyLCAKLSAgICA3NDI3MCwgNzQyNzQsIDc0MjgyLCA3NDI4OSwgNzQyOTMsIDc0Mjk5LCA3NDMwNSwgNzQzMTAsIDM1NjMsIDQxODg3LCAKLSAgICA3NDMxNiwgNzQzMjAsIDc0MzI0LCA3NDMyOCwgNzQzMzMsIDc0MzM4LCA3NDM0MywgNzQzNDksIDc0MzU1LCA3NDM2MSwgCi0gICAgNzQzNjgsIDc0Mzc0LCA3NDM4MSwgNzQzODcsIDc0MzkzLCA3NDM5OCwgNzQ0MDQsIDc0NDA5LCA3NDQxMywgNzQ0MTgsIAotICAgIDc0NDIyLCA3NDQyNywgNDE5MDIsIDc0NDMxLCA3NDQzNiwgNzQ0NDQsIDc0NDQ4LCA3NDQ1MywgNzQ0NjAsIDc0NDY5LCAKLSAgICA3NDQ3NSwgNzQ0NzksIDc0NDg2LCA3NDQ5MCwgNzQ0OTMsIDc0NTAwLCA3NDUwOSwgNzQ1MTQsIDc0NTE4LCA3NDUyNiwgCi0gICAgNzQ1MzUsIDc0NTM5LCA3NDU0NywgNzQ1NTMsIDc0NTU4LCA3NDU2MywgNzQ1NjksIDc0NTc1LCA3NDU4MCwgNzQ1ODQsIAotICAgIDc0NTkwLCA3NDU5NSwgNzQ1OTksIDc0NjAzLCA3NDYwNiwgNzQ2MTEsIDc0NjE5LCA3NDYyOSwgNzQ2MzQsIDM5Mzg3LCAKLSAgICA3NDY0MiwgNzQ2NTQsIDc0NjU4LCA3NDY2NCwgNzQ2NzYsIDc0Njg3LCA3NDY5NCwgNzQ3MDAsIDc0NzA3LCA3NDcxOSwgCi0gICAgNzQ3MjYsIDc0NzMyLCAyMTA3NSwgNzQ3MzYsIDc0NzQyLCA3NDc0OSwgNzQ3NTUsIDc0NzYxLCA3NDc2NiwgNzQ3NzEsIAotICAgIDc0Nzc2LCA3NDc4NSwgNzAzMywgNzQ3OTAsIDE2NDEzLCA3NDc5NiwgNzQ4MDAsIDc0ODA0LCA3NDgwOCwgNzQ4MTYsIAotICAgIDc0ODI1LCA3NDgyOSwgNzQ4MzYsIDc0ODQ1LCA3NDg1OCwgNzQ4NjQsIDc0NDIzLCAzMDA2NywgNzQ4NjksIDc0ODcxLCAKLSAgICA3NDg3NiwgNzQ4ODEsIDc0ODg2LCA3NDg5MSwgNzQ4OTYsIDc0OTAxLCA3NDkwNiwgNzQ5MTEsIDc0OTE2LCA3NDkyMSwgCi0gICAgNzQ5MjYsIDc0OTMxLCA3NDkzNiwgNzQ5NDEsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCA3NDk2NywgNzQ5NzIsIAotICAgIDc0OTc3LCA3NDk4MiwgNzQ5ODcsIDc0OTkzLCA3NDk5OSwgNzUwMDUsIDc1MDEwLCA3NTAxNSwgNzUwMjcsIDc1MDMyLCAKLSAgICAxODcwLCA0OSwgNzUwMzcsIDc1MDQyLCAzMjcyMSwgNzUwNDYsIDMyNzI2LCAzMjczMSwgMzI3MzcsIDMyNzQyLCA3NTA1MCwgCi0gICAgMzI3NDcsIDIyMDcwLCA3NTA3MiwgNzUwNzYsIDc1MDgwLCA3NTA4NSwgNzUwODksIDMyNzUxLCA3NTA5MywgNzUxMDEsIAotICAgIDMyNzU2LCA3NTEwOCwgNzUxMTEsIDc1MTE2LCA3NTEyMCwgOTUzNiwgNzUxMjksIDMyNzYxLCAyMTkzMiwgNzUxMzIsIAotICAgIDc1MTM2LCAxNDI4LCA3NTE0MSwgMzI3NzIsIDc1MTQ0LCA3NTE0OSwgMjU3MjAsIDI1NzMwLCAzNTIzMywgNzUxNTQsIAotICAgIDc1MTU5LCA3NTE2NCwgNzUxNjksIDc1MTc1LCA3NTE4MCwgNzUxODksIDc1MTk0LCA3NTIwMSwgNzUyMDcsIDc1MjEyLCAKLSAgICA3NTIxNywgNzUyMjIsIDc1MjMyLCA3NTI0MSwgNzUyNDYsIDc1MjU0LCA3NTI1OCwgNzUyNjYsIDMyNTg2LCAzNzI4OCwgCi0gICAgNzUyNzMsIDc1Mjc5LCA3NTI4NCwgNzUyODksIDEyMDA5LCA3NTI5NCwgNzUzMDAsIDc1MzA1LCA3NTMxMiwgNzUzMTgsIAotICAgIDc1MzIzLCA3NTMzMSwgNzUzNDEsIDc1MzUxLCA3NTM1NywgNzUzNjIsIDc1MzY4LCAxNzUyMywgNzUzNzUsIDM2MDQ4LCAKLSAgICA3NTM4OCwgNzUzOTMsIDc1Mzk5LCAzMDk2OCwgNzU0MTIsIDc1NDE4LCA3NTQyMiwgNzU0MzEsIDc1NDM4LCA3NTQ0NCwgCi0gICAgNzU0NTIsIDc1NDYxLCA3NTQ2OCwgNzU0NzQsIDc1NDc3LCA3NTQ4MSwgMjU4NjEsIDc1NDg1LCA3NTQ5MiwgNzU0OTgsIAotICAgIDc1NTA2LCA3NTUxMSwgMjM5NzcsIDc1NTE3LCA3NTUyMCwgNzU1MjgsIDc1NTM2LCA3NTU1MCwgNzU1NTcsIDc1NTYzLCAKLSAgICA3NTU3MCwgNzU1NzYsIDMyNzg2LCA3NTU4MCwgNzU1ODcsIDc1NTk1LCA3NTYwMywgNzU2MDksIDMyNzkxLCA3NTYxNywgCi0gICAgNzU2MjMsIDc1NjI4LCA3NTYzOCwgNzU2NDQsIDc1NjUzLCAzMDgwNSwgMzQ2OTEsIDc1NjYxLCA3NTY2NiwgNzU2NzEsIAotICAgIDc1Njc1LCA3NTY4MCwgNzU2ODQsIDc1NjkyLCAxNDkwNywgMzk0MDAsIDc1Njk3LCA3NTcwMiwgMzI3OTYsIDYyMjMyLCAKLSAgICA3NTcwNiwgNzU3MTEsIDc1NzE1LCA3NTcyNCwgNzU3MzIsIDc1NzM4LCA3NTc0MywgNzU3NDksIDc1NzU2LCA3NTc2MiwgCi0gICAgNzU3NjcsIDc1NzcyLCA3NTc4MSwgNzU3OTMsIDc1ODA4LCAzMzA1OCwgNzU4MTQsIDE2NTMyLCAzMjgwMCwgNzU4MTgsIAotICAgIDc1ODI1LCAyNDA4NywgNzU4MzEsIDc1ODM4LCA3NTg0NywgNzU4NTQsIDc1ODYzLCA3NTg2OSwgNzU4NzQsIDc1ODgyLCAKLSAgICA3NTg4OCwgMzI4MTAsIDc1ODkzLCA3NTkwMiwgNzQ2ODIsIDc1OTExLCA3NTkxOCwgNzU5MjQsIDc1OTMwLCA3NTk0MCwgCi0gICAgNzU5NDgsIDc1OTU1LCA3NTk1OSwgMzI4MTUsIDc1OTYyLCAzMjgyMSwgMzI4MjcsIDc1OTY3LCA3NTk3NSwgNzU5ODMsIAotICAgIDc1OTkzLCA3NjAwMiwgNzYwMTAsIDc2MDE3LCA3NjAyNywgMzI4MzIsIDc2MDMxLCA3NjAzMywgNzYwMzcsIDc2MDQyLCAKLSAgICA3NjA0NiwgNzYwNTAsIDc2MDU2LCA3NjA2MSwgNzYwNjUsIDc2MDc2LCA3NjA4MSwgNzYwODYsIDMwNjAsIDc2MDkwLCAKLSAgICA3NjA5NywgNzYxMDEsIDc2MTEwLCA3NjExOCwgNzYxMjUsIDc2MTMwLCA3NjEzNSwgNjIyNzgsIDc2MTM5LCA3NjE0MiwgCi0gICAgNzYxNDgsIDc2MTU2LCA3NjE2MiwgNzYxNjYsIDc2MTcxLCA3NjE3OCwgNzYxODMsIDc2MTg5LCAzNDcyMiwgNzYxOTQsIAotICAgIDc2MTk3LCA3NjIwMiwgNzYyMDYsIDc2MjExLCA3NjIxNiwgNzYyMjAsIDc2MjI4LCA3NjIzMiwgMjU3MzksIDI1NzQ4LCAKLSAgICA3NjIzOCwgNzYyNDQsIDc2MjUwLCA3NjI1NSwgNzYyNTksIDc2MjYyLCA3NjI3MiwgNzYyODEsIDc2Mjg2LCA3NjI5MiwgCi0gICAgNzYyOTksIDc2MzA1LCA3NjMwOSwgNzYzMTcsIDc2MzIyLCAzNDcyOCwgNzYzMjYsIDc2MzM0LCA3NjM0MCwgNzYzNDcsIAotICAgIDc2MzUyLCA3NjM1NiwgNzYzNjEsIDU4NDAzLCAzNDczNCwgNzYzNjcsIDc2MzcyLCA3NjM3NiwgNzYzODEsIDc2Mzg2LCAKLSAgICA3NjM5MSwgNzYzOTUsIDc2NDAwLCA3NjQwNSwgNzY0MTEsIDc2NDE2LCA3NjQyMSwgNzY0MjcsIDc2NDMzLCA3NjQzOCwgCi0gICAgNzY0NDIsIDc2NDQ3LCA3NjQ1MiwgNzY0NTcsIDc2NDYxLCAyNDA4NiwgNzY0NjYsIDc2NDcxLCA3NjQ3NywgNzY0ODMsIAotICAgIDc2NDg5LCA3NjQ5NCwgNzY0OTgsIDc2NTAzLCA3NjUwOCwgNzY1MTMsIDc2NTE3LCA3NjUyMiwgNzY1MjcsIDc2NTMyLCAKLSAgICA3NjUzNywgNzY1NDEsIDMyODQwLCA3NjU0OSwgNzY1NTMsIDc2NTYxLCA3NjU2OSwgNzY1ODAsIDc2NTg1LCA3NjU4OSwgCi0gICAgMjIzODQsIDc2NTk0LCA3NjYwMCwgNzY2MTAsIDc2NjE3LCA3NjYyMiwgNzY2MzEsIDc2NjM2LCA3NjY0MCwgNzY2NDUsIAotICAgIDc2NjUzLCA3NjY2MSwgNzY2NjgsIDY1MDY4LCA3NjY3NCwgNzY2ODIsIDc2Njg5LCA3NjcwMCwgNzY3MDYsIDc2NzEwLCAKLSAgICA3NjcxNiwgMzI4NTAsIDc2NzE5LCA3NjcyNiwgNzY3MzQsIDc2NzM5LCAzOTU5MSwgNzY3NDMsIDc2NzQ4LCA3Njc1NSwgCi0gICAgNzY3NjAsIDg5ODUsIDc2NzY0LCA3Njc3MiwgNzY3NzksIDc2Nzg2LCA3Njc5MiwgNzY4MDYsIDYzMzQwLCA3NjgxNCwgCi0gICAgNzY4MjAsIDc2ODI0LCA3NjgyNywgNzY4MzUsIDc2ODQyLCA3Njg0NywgNzY4NjAsIDc2ODY3LCA3Njg3MSwgNzY4NzgsIAotICAgIDc2ODgzLCA2MDgyMywgNzY4ODgsIDc2ODkxLCA3Njg5OCwgNzY5MDQsIDc2OTA4LCA3NjkxNiwgNzY5MjUsIDc2OTM1LCAKLSAgICA3Njk0NSwgNzY5NTQsIDc2OTYyLCA3Njk3MywgNzY5NzgsIDc2OTgyLCA3Njk4NywgNzY5OTEsIDM1MzY0LCA3Njk5OSwgCi0gICAgMjEzNDQsIDM1MzczLCA3NzAwNCwgNzcwMDksIDc3MDE0LCA3NzAxOSwgNzcwMjQsIDc3MDI5LCA3NzAzNCwgNzcwMzgsIAotICAgIDc3MDQzLCA3NzA0OCwgNzcwNTMsIDc3MDU4LCA3NzA2MywgNzcwNjgsIDc3MDcyLCA3NzA3NywgNzcwODIsIDc3MDg2LCAKLSAgICA3NzA5MCwgNzcwOTQsIDc3MDk4LCA3NzEwMywgNzcxMDgsIDc3MTEyLCA3NzExNywgNzcxMjEsIDc3MTI1LCA3NzEzMCwgCi0gICAgNzcxMzUsIDc3MTQwLCA3NzE0NSwgNzcxNDksIDc3MTU0LCA3NzE1OSwgNzcxNjMsIDc3MTY4LCA3NzE3MywgNzcxNzgsIAotICAgIDc3MTgzLCA3NzE4OCwgNzcxOTMsIDc3MTk4LCA3NzIwMywgNzcyMDgsIDc3MjEzLCA3NzIxOCwgNzcyMjMsIDc3MjI4LCAKLSAgICA3NzIzMywgNzcyMzgsIDc3MjQzLCA3NzI0OCwgNzcyNTMsIDc3MjU4LCA3NzI2MywgNzcyNjcsIDc3MjcyLCA3NzI3NywgCi0gICAgNzcyODIsIDc3Mjg3LCA3NzI5MiwgNzcyOTcsIDc3MzAyLCA3NzMwNywgNzczMTIsIDc3MzE3LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMxLCA3NzMzNSwgNzczNDAsIDc3MzQ1LCA3NzM1MCwgNzczNTUsIDc3MzYwLCA3NzM2NSwgNzczNzAsIDc3Mzc1LCAKLSAgICA3NzM4MCwgNzczODQsIDc3Mzg4LCA3NzM5MywgNzczOTgsIDc3NDAyLCA3NzQwNywgNzc0MTIsIDc3NDE2LCA3NzQyMSwgCi0gICAgNzc0MjYsIDc3NDMxLCA3NzQzNiwgNzc0NDAsIDc3NDQ1LCA3NzQ1MCwgNzc0NTQsIDc3NDU5LCA3NzQ2MywgNzc0NjcsIAotICAgIDc3NDcxLCA3NzQ3NSwgNzc0ODAsIDc3NDg0LCA3NzQ4OCwgNzc0OTIsIDc3NDk2LCA3NzUwMCwgNzc1MDQsIDc3NTA4LCAKLSAgICA3NzUxMiwgNzc1MTYsIDc3NTIxLCA3NzUyNiwgNzc1MzEsIDc3NTM2LCA3NzU0MSwgNzc1NDYsIDc3NTUxLCA3NzU1NiwgCi0gICAgNzc1NjEsIDc3NTY2LCA3NzU3MCwgNzc1NzQsIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NSwgNzc1OTksIAotICAgIDc3NjA0LCA3NzYwOCwgNzc2MTMsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMxLCA3NzYzNSwgNzc2MzksIDc3NjQzLCAKLSAgICA3NzY0NywgNzc2NTEsIDc3NjU1LCA3NzY1OSwgNzc2NjMsIDc3NjY3LCA3NzY3MSwgNzc2NzUsIDc3Njc5LCA3NzY4MywgCi0gICAgNzc2ODcsIDc3NjkyLCA3NzY5NywgNzc3MDEsIDc3NzA1LCA3NzcwOSwgNzc3MTMsIDc3NzE3LCA3NzcyMSwgNzc3MjYsIAotICAgIDc3NzMwLCA3NzczNCwgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU1LCA3Nzc1OSwgNzc3NjQsIDc3NzY4LCAKLSAgICA3Nzc3MiwgNzc3NzYsIDc3NzgwLCA3Nzc4NCwgNzc3ODgsIDc3NzkyLCA3Nzc5NiwgNzc4MDAsIDc3ODA0LCA3NzgwOCwgCisgICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgODk5NiwgCisgICAgNzY4LCA5MDAwLCA5MDA0LCA5MDA5LCA5MDE0LCA5MDE5LCA5MDIzLCA5MDI5LCA5MDM3LCA5MDQzLCA5MDQ3LCA5MDUzLCAKKyAgICA5MDYzLCA5MDY3LCA5MDczLCA5MDc4LCA5MDgyLCA5MDg4LCA5MDk0LCAyMTYxLCA5MDk5LCA5MTAxLCA5MTA2LCA5MTE0LCAKKyAgICA5MTIzLCA5MTI3LCA5MTMzLCA5MTM4LCA5MTQzLCA5MTQ4LCA5MTUzLCA5MTU5LCA5MTY0LCA5MTY5LCA0MDA2LCA5MTc0LCAKKyAgICA5MTc5LCA5MTgzLCA5MTg5LCA5MTk0LCA5MjAwLCA5MjA1LCA5MjEwLCA5MjE2LCA5MjIxLCA5MTI4LCA5MjI3LCA5MjMxLCAKKyAgICA5MjM4LCA5MjQ0LCA5MjQ5LCA5MjUzLCA2MTgzLCA5MjU4LCA5MjY3LCA5MjcyLCA5Mjc3LCA4MjE4LCA4MjI1LCA5MjgyLCAKKyAgICAyODUzLCA5Mjg2LCA5MjkxLCA5Mjk2LCA5MTM5LCA5MzAwLCA5MzA1LCA5MTQ0LCA5MTQ5LCA5MzEwLCA5MzE3LCA5MzI0LCAKKyAgICA5MzMwLCA5MzM2LCA5MzQyLCA5MzQ3LCA5MzUyLCA5MzU3LCA5MTU0LCA5MTYwLCA5MzYzLCA5MzY5LCA5Mzc0LCA5MzgyLCAKKyAgICA5MTY1LCA5Mzg3LCA5OTAsIDkzOTAsIDkzOTgsIDk0MDQsIDk0MTAsIDk0MTksIDk0MjcsIDk0MzIsIDk0MzgsIDk0NDYsIAorICAgIDk0NTMsIDk0NjgsIDk0ODUsIDk1MDQsIDk1MTMsIDk1MjEsIDk1MzYsIDk1NDcsIDk1NTcsIDk1NjcsIDk1NzUsIDk1ODEsIAorICAgIDk1OTMsIDk2MDIsIDk2MTAsIDk2MTcsIDk2MjQsIDk2MzAsIDk2MzUsIDk2NDMsIDk2NTMsIDk2NjAsIDk2NzAsIDk2ODAsIAorICAgIDk2OTAsIDk2OTgsIDk3MDUsIDk3MTQsIDk3MjQsIDk3MzgsIDk3NTMsIDk3NjIsIDk3NzAsIDk3NzUsIDk3NzksIDk3ODgsIAorICAgIDk3OTQsIDk3OTksIDk4MDksIDk4MTksIDk4MjksIDk4MzQsIDk4MzgsIDk4NDcsIDk4NTIsIDk4NjIsIDk4NzMsIDk4ODYsIAorICAgIDk4OTQsIDk5MDcsIDk5MTksIDk5MjcsIDk5MzIsIDk5MzYsIDk5NDIsIDk5NDcsIDk5NTUsIDk5NjMsIDk5NzAsIDk5NzUsIAorICAgIDk5ODMsIDk5ODksIDk5OTIsIDk5OTYsIDEwMDAyLCAxMDAxMCwgMTAwMTUsIDEwMDE5LCAxMDAyNywgMTAwMzYsIDEwMDQ0LCAKKyAgICAxMDA1MCwgMTAwNTQsIDEwMDYxLCAxMDA3MiwgMTAwNzYsIDEwMDc5LCAxMDA4NSwgOTE3MCwgMTAwOTAsIDEwMDk2LCAKKyAgICAxMDEwMywgMTAxMDksIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCisgICAgMTAxNzAsIDEwMTc1LCA5NDgxLCAxMDE4MCwgMTAxODYsIDEwMTkzLCAxMDIwMCwgMTAyMDUsIDEwMjEyLCAxMDIyMSwgCisgICAgMTAyMjUsIDEwMjM3LCA4MjU2LCAxMDI0MSwgMTAyNDQsIDEwMjQ4LCAxMDI1MiwgMTAyNTYsIDEwMjYwLCAxMDI2NiwgCisgICAgMTAyNzIsIDEwMjc3LCAxMDI4MywgMTAyODgsIDEwMjkzLCAxMDI5OSwgMTAzMDQsIDEwMzA5LCA4OTUyLCAxMDMxNCwgCisgICAgMTAzMTgsIDEwMzIyLCAxMDMyNiwgMTAzMzEsIDEwMzM2LCAxMDM0NCwgMTAzNTAsIDEwMzU0LCAxMDM1OCwgMTAzNjUsIAorICAgIDEwMzcwLCAxMDM3OCwgMTAzODMsIDEwMzg3LCAxMDM5MCwgMTAzOTYsIDEwNDAzLCAxMDQwNywgMTA0MTAsIDEwNDE1LCAKKyAgICAxMDQxOSwgNDA0NSwgMTA0MjUsIDEwNDM0LCAzNiwgMTA0NDIsIDEwNDQ4LCAxMDQ1MywgODk2NywgMTA0NTgsIDEwNDYzLCAKKyAgICAxMDQ2NywgMTA0NzAsIDEwNDg1LCAxMDUwNCwgMTA1MTYsIDEwNTI5LCAxMDU0MiwgMTA1NTUsIDEwNTY5LCAxMDU4MiwgCisgICAgMTA1OTcsIDEwNjA0LCA5MTc1LCAxMDYxMCwgMTA2MjQsIDEwNjI5LCAxMDYzNSwgMTA2NDAsIDEwNjQ4LCAxMDY1MywgCisgICAgODA0MCwgMTA2NTgsIDEwNjYxLCAxMDY2OCwgMTA2NzMsIDEwNjc3LCAyODU4LCA5OTgsIDEwNjgzLCAxMDY4NywgMTA2OTMsIAorICAgIDEwNjk5LCAxMDcwNCwgMTA3MTAsIDEwNzE1LCA5MTg0LCAxMDcyMSwgMTA3MjcsIDEwNzMyLCAxMDczNywgMTA3NDUsIAorICAgIDEwNzUxLCAxMDc2NCwgMTA3NzIsIDEwNzc5LCA5MTkwLCAxMDc4NSwgMTA3OTMsIDEwODAxLCAxMDgwOCwgMTA4MjEsIAorICAgIDEwODMzLCAxMDg0MywgMTA4NTEsIDEwODU4LCAxMDg2NSwgMTA4NzQsIDEwODgzLCAxMDg5MSwgMTA4OTgsIDEwOTAzLCAKKyAgICAxMDkwOSwgOTE5NSwgMTA5MTQsIDEwOTIwLCA5MjAxLCAxMDkyNSwgMTA5MjgsIDEwOTM1LCAxMDk0MSwgMTA5NTQsIDg2NjksIAorICAgIDEwOTY1LCAxMDk3MSwgMTA5ODAsIDEwOTg4LCAxMDk5NSwgMTEwMDEsIDExMDA3LCAxMTAxMiwgMTEwMTYsIDExMDIxLCAKKyAgICAxMDQ3NywgMTEwMjcsIDkyMDYsIDExMDM0LCAxMTAzOSwgMTEwNDYsIDExMDUyLCAxMTA1OCwgMTEwNjMsIDExMDcxLCAKKyAgICAxMTA3OSwgMTEwODYsIDExMDkwLCAxMTEwNCwgMTExMTQsIDExMTE5LCAxMTEyMywgMTExMzQsIDExMTQwLCAxMTE0NSwgCisgICAgMTExNTAsIDkyMTEsIDkyMTcsIDExMTU0LCAxMTE1NywgMTExNjIsIDExMTc0LCAxMTE4MSwgMTExODYsIDExMTkwLCAKKyAgICAxMTE5NSwgMTExOTksIDExMjA2LCAxMTIxMiwgOTIyMiwgOTEyOSwgMTEyMTksIDI4NjMsIDgsIDExMjI2LCAxMTIzMSwgCisgICAgMTEyMzUsIDExMjQxLCAxMTI0OSwgMTEyNTksIDExMjY0LCAxMTI2OSwgMTEyNzYsIDExMjgzLCAxMTI4NywgMTEyOTgsIAorICAgIDExMzA4LCAxMTMxNywgMTEzMjksIDExMzM0LCAxMTMzOCwgMTEzNDYsIDExMzYwLCAxMTM2NCwgMTEzNjcsIDExMzc1LCAKKyAgICAxMTM4MiwgMTEzOTAsIDExMzk0LCAxMTQwNSwgMTE0MDksIDExNDE2LCAxMTQyMSwgMTE0MjUsIDExNDMxLCAxMTQzNiwgCisgICAgMTE0NDAsIDExNDQ2LCAxMTQ1MSwgMTE0NjIsIDExNDY2LCAxMTQ2OSwgMTE0NzUsIDExNDgwLCAxMTQ4NiwgMTE0OTIsIAorICAgIDExNDk5LCAxMTUxMCwgMTE1MjAsIDExNTMwLCAxMTUzOSwgMTE1NDYsIDExNTU1LCA5MjMyLCA5MjM5LCA5MjQ1LCA5MjUwLCAKKyAgICAxMTU2MSwgMTE1NjcsIDkyNTQsIDExNTczLCAxMTU3NiwgMTE1ODMsIDExNTg4LCAxMTYwMywgMTE2MTksIDExNjM0LCAKKyAgICAxMTY0MiwgMTE2NDgsIDExNjUzLCA4MzgsIDQyMCwgMTE2NTgsIDExNjY2LCAxMTY3MywgMTE2NzksIDExNjg0LCAxMTY4OSwgCisgICAgOTI1OSwgMTE2OTEsIDExNjk1LCAxMTcwMCwgMTE3MDQsIDExNzE0LCAxMTcxOSwgMTE3MjMsIDExNzMyLCAxMTczNiwgCisgICAgMTE3MzksIDkyNjgsIDExNzQ2LCAxMTc0OSwgMTE3NTcsIDExNzY0LCAxMTc3MiwgMTE3NzYsIDExNzgzLCAxMTc5MiwgCisgICAgMTE3OTUsIDExNzk5LCAxMTgwMywgMTE4MDksIDExODEzLCAxMTgxNywgMTE4MjEsIDExODI3LCAxMTgzNywgMTE4NDEsIAorICAgIDExODQ5LCAxMTg1MywgMTE4NjAsIDExODY0LCAxMTg2OSwgMTE4NzMsIDExODgwLCAxMTg4NiwgMTE4OTQsIDExOTAwLCAKKyAgICAxMTkwNSwgMTE5MTUsIDExOTIwLCAxMTkyNSwgMTE5MjksIDExOTM3LCAzOTA1LCAxMTk0NSwgMTE5NTAsIDkyNzMsIAorICAgIDExOTU0LCAxMTk1OCwgMTE5NjEsIDExOTY5LCAxMTk3NiwgMTE5ODAsIDU5OTEsIDExOTg0LCAxMTk4OSwgMTE5OTMsIAorICAgIDEyMDA0LCAxMjAxNCwgMTIwMTksIDEyMDI1LCAxMjAyOSwgMTIwMzIsIDEyMDQwLCAxMjA0NSwgMTIwNTAsIDEyMDU3LCAKKyAgICAxMjA2MiwgOTI3OCwgMTIwNjcsIDEyMDcxLCAxMjA3OCwgMTcyMiwgNjE0NSwgMTIwODMsIDEyMDg4LCAxMjA5MywgMTIwOTgsIAorICAgIDEyMTA0LCAxMjEwOSwgMTIxMTUsIDEyMTIwLCAxMjEyNSwgMTIxMzAsIDEyMTM1LCAxMjE0MCwgMTIxNDUsIDEyMTUwLCAKKyAgICAxMjE1NSwgMTIxNjAsIDEyMTY1LCAxMjE3MCwgMTIxNzUsIDEyMTgwLCAxMjE4NSwgMTIxOTAsIDEyMTk1LCAxMjIwMSwgCisgICAgMTIyMDYsIDEyMjExLCAxMjIxNiwgMTIyMjEsIDEyMjI2LCAxMjIzMiwgMTIyMzcsIDEyMjQyLCAxMjI0OCwgMTIyNTMsIAorICAgIDEyMjU5LCAxMjI2NCwgMTIyNzAsIDEyMjc1LCAxMjI4MCwgMTIyODUsIDEyMjkwLCAxMjI5NiwgMTIzMDEsIDEyMzA2LCAKKyAgICAxMjMxMSwgNzM3LCAxMzksIDEyMzE5LCAxMjMyMywgMTIzMjgsIDEyMzMzLCAxMjMzNywgMTIzNDEsIDEyMzQ1LCAxMjM1MCwgCisgICAgMTIzNTQsIDEyMzU5LCAxMjM2MywgMTIzNjYsIDEyMzcwLCAxMjM3NCwgMTIzODAsIDEyMzg1LCAxMjM5NSwgMTI0MDEsIAorICAgIDEyNDA5LCAxMjQxMywgMTI0MTcsIDEyNDI0LCAxMjQzMiwgMTI0NDEsIDEyNDUyLCAxMjQ1OSwgMTI0NjYsIDEyNDcwLCAKKyAgICAxMjQ3OSwgMTI0ODgsIDEyNDk2LCAxMjUwNSwgMTI1MTQsIDEyNTIzLCAxMjUzMiwgMTI1NDIsIDEyNTUyLCAxMjU2MiwgCisgICAgMTI1NzIsIDEyNTgyLCAxMjU5MSwgMTI2MDEsIDEyNjExLCAxMjYyMSwgMTI2MzEsIDEyNjQxLCAxMjY1MSwgMTI2NjEsIAorICAgIDEyNjcwLCAxMjY4MCwgMTI2OTAsIDEyNzAwLCAxMjcxMCwgMTI3MjAsIDEyNzMwLCAxMjczOSwgMTI3NDksIDEyNzU5LCAKKyAgICAxMjc2OSwgMTI3NzksIDEyNzg5LCAxMjc5OSwgMTI4MDksIDEyODE5LCAxMjgyOSwgMTI4MzgsIDEyODQ4LCAxMjg1OCwgCisgICAgMTI4NjgsIDEyODc4LCAxMjg4OCwgMTI4OTgsIDEyOTA4LCAxMjkxOCwgMTI5MjgsIDEyOTM4LCAxMjk0NywgMTI1NiwgCisgICAgMTI5NTMsIDEyOTU2LCAxMjk2MCwgMTI5NjUsIDEyOTcyLCAxMjk3OCwgMTI5ODMsIDEyOTg3LCAxMjk5MiwgMTMwMDEsIAorICAgIDEzMDA5LCAxMzAxNCwgMTMwMTgsIDEzMDIyLCAxMzAyOCwgMTMwMzMsIDEzMDM5LCA5Mjg3LCAxMzA0NCwgMTMwNDksIAorICAgIDEzMDU4LCA5MjkyLCAxMzA2MywgMTMwNjYsIDEzMDcyLCAxMzA4MCwgOTI5NywgMTMwODcsIDEzMDkxLCAxMzA5NSwgCisgICAgMTMwOTksIDEzMTA5LCAxMzExNSwgMTMxMjEsIDEzMTI2LCAxMzEzNSwgMTMxNDMsIDEzMTUwLCAxMzE1NywgMTMxNjIsIAorICAgIDEzMTY5LCAxMzE3NCwgMTMxNzgsIDEzMTgxLCAxMzE5MiwgMTMyMDIsIDEzMjExLCAxMzIxOSwgMTMyMzAsIDEzMjQyLCAKKyAgICAxMzI1MiwgMTMyNTcsIDEzMjYxLCAxMzI2NiwgMTMyNzEsIDEzMjc1LCAxMzI4MSwgMTMyODksIDEzMjk2LCAxMzMwNywgCisgICAgMTMzMTIsIDEzMzIyLCAxMzMyNiwgMTMzMjksIDEzMzM2LCAxMzM0NiwgMTMzNTUsIDEzMzYyLCAxMzM2NiwgMTMzNzMsIAorICAgIDEzMzc5LCAxMzM4NCwgMTMzODksIDEzMzkzLCAxMzQwMiwgMTM0MDcsIDEzNDEzLCAxMzQxNywgMTM0MjIsIDEzNDI2LCAKKyAgICAxMzQzNSwgMTM0NDMsIDEzNDUxLCAxMzQ1OCwgMTM0NjYsIDEzNDc4LCAxMzQ4OSwgMTM0OTksIDEzNTA2LCAxMzUxMiwgCisgICAgMTM1MjEsIDEzNTMyLCAxMzU0MSwgMTM1NTMsIDEzNTY1LCAxMzU3NywgMTM1ODcsIDEzNTk2LCAxMzYwNSwgMTM2MTMsIAorICAgIDEzNjIwLCAxMzYyOSwgMTM2MzcsIDEzNjQxLCAxMzY0NywgMTM2NTMsIDEzNjU4LCA3NzUzLCAxMzY2MiwgMTM2NjQsIAorICAgIDEzNjY4LCAxMzY3MywgMTM2NzksIDEzNjg4LCAxMzY5MiwgMTM2OTgsIDEzNzA2LCAxMzcxMywgMTM3MjIsIDEzNzMxLCAKKyAgICAxMzc0MCwgMTM3NDksIDEzNzU4LCAxMzc2NywgMTM3NzYsIDEzNzg1LCAxMzc5NSwgMTM4MDUsIDEzODE0LCAxMzgyMCwgCisgICAgMTM4MjcsIDEzODM0LCAxMzg0MCwgMTM4NTQsIDEzODYxLCAxMzg2OSwgMTM4NzgsIDEzODg0LCAxMzg5MywgMTM5MDIsIAorICAgIDEzOTEzLCAxMzkyMywgMTM5MzEsIDEzOTM4LCAxMzk0NiwgMTM5NTUsIDEzOTY4LCAxMzk3NiwgMTM5ODMsIDEzOTk2LCAKKyAgICAxNDAwMiwgMTQwMDgsIDE0MDE4LCAxNDAyNywgMTQwMzYsIDE0MDQxLCAxNDA0NSwgMTQwNTEsIDE0MDU3LCAxNDA2NCwgCisgICAgODk2NiwgMTQwNjksIDE0MDc0LCAxNDA4MSwgMTQwODYsIDEyMzc2LCAxNDA5MSwgMTQwOTksIDE0MTA1LCAxNDExMCwgCisgICAgMTQxMTgsIDE0MTI2LCAxNDEzMywgMTQxNDEsIDE0MTQ3LCAxNDE1NSwgMTQxNjMsIDE0MTY5LCAxNDE3NCwgMTQxODAsIAorICAgIDE0MTg3LCAxNDE5MywgMTQxOTgsIDE0MjAyLCAxNDIxMywgMTQyMjEsIDE0MjI3LCAxNDIzMiwgMTQyNDEsIDE0MjQ3LCAKKyAgICAxNDI1MiwgMTQyNjEsIDE0Mjc1LCAzODUzLCAxNDI3OSwgMTQyODQsIDE0Mjg5LCAxNDI5NSwgMTQzMDAsIDE0MzA1LCAKKyAgICAxNDMwOSwgMTQzMTQsIDE0MzE5LCAxNDMyNCwgNzc1MiwgMTQzMjksIDE0MzM0LCAxNDMzOSwgMTQzNDQsIDE0MzQ5LCAKKyAgICAxNDM1MywgMTQzNTgsIDE0MzYzLCAxNDM2OCwgMTQzNzMsIDE0Mzc5LCAxNDM4NSwgMTQzOTAsIDE0Mzk0LCAxNDM5OSwgCisgICAgMTQ0MDQsIDE0NDA5LCA5MzAxLCAxNDQxNCwgMTQ0MTksIDE0NDI0LCAxNDQyOSwgMTQ0MzQsIDE0NDUxLCAxNDQ2OSwgCisgICAgMTQ0ODEsIDE0NDk0LCAxNDUxMSwgMTQ1MjcsIDE0NTQ0LCAxNDU1NCwgMTQ1NzMsIDE0NTg0LCAxNDU5NSwgMTQ2MDYsIAorICAgIDE0NjE3LCAxNDYyOSwgMTQ2NDAsIDE0NjUxLCAxNDY2OCwgMTQ2NzksIDE0NjkwLCAxNDY5NSwgOTMwNiwgMTQ3MDAsIAorICAgIDE0NzA0LCAyMzgxLCAxNDcwOCwgMTQ3MTEsIDE0NzE3LCAxNDcyNSwgMTQ3MzMsIDE0NzM4LCAxNDc0NiwgMTQ3NTQsIAorICAgIDE0NzYxLCAxNDc2NiwgMTQ3NzIsIDE0Nzc5LCAxNDc4NywgMTQ3OTQsIDE0ODA2LCAxNDgxNCwgMTQ4MTksIDExNTk3LCAKKyAgICAxNDgyNSwgMTQ4MzQsIDE0ODQzLCAxNDg1MSwgMTQ4NTgsIDE0ODY0LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5MiwgCisgICAgMTQ4OTgsIDE0OTA3LCAxNDkxNSwgMTQ5MjUsIDE0OTMyLCAxNDkzOCwgMTQ5NDYsIDE0OTUyLCAxNDk2MCwgMTQ5NjcsIAorICAgIDE0OTgwLCAxNDk4NywgMTQ5OTYsIDE1MDA1LCAxNTAxNCwgMTUwMjIsIDE1MDMyLCAxNTAzOSwgMTUwNDQsIDM1NjAsIAorICAgIDE1MDUxLCAxNTA1NiwgMTM3MiwgMTUwNjAsIDE0MzMwLCAxNTA2NCwgMTUwNzAsIDE1MDc0LCAxNTA4MiwgMTUwOTQsIAorICAgIDE1MDk5LCAxNTEwNiwgMTUxMTIsIDE1MTE3LCAxNTEyNCwgMTQzMzUsIDE1MTI4LCAxNTEzMiwgMTUxMzYsIDE0MzQwLCAKKyAgICAxNTE0MCwgMTQzNDUsIDE1MTQ0LCAxNTE1MSwgMTUxNTYsIDE1MTYwLCAxNTE2NywgMTUxNzEsIDE1MTc5LCAxNTE4NiwgCisgICAgMTUxOTAsIDE1MTk3LCAxNTIxNCwgMTUyMjMsIDE1MjI3LCAxNTIzMCwgMTUyMzgsIDE1MjQ0LCAxNTI0OSwgMzYzOCwgCisgICAgMTUyNTMsIDE1MjU1LCAxNTI2MywgMTUyNzAsIDE1MjgwLCAxNTI5MiwgMTUyOTcsIDE1MzAzLCAxNTMwOCwgMTUzMTIsIAorICAgIDE1MzE4LCAxNTMyMywgMTUzMjksIDE1MzMyLCAxNTMzOSwgMTUzNDcsIDE1MzU0LCAxNTM2MCwgMTUzNjYsIDE1MzcxLCAKKyAgICAxNTM3OCwgMTUzODQsIDE1Mzg5LCAxNTM5NiwgMTU0MDAsIDE1NDA2LCAxNTQxMCwgMTU0MTcsIDE1NDIzLCAxNTQyOSwgCisgICAgMTU0MzcsIDE1NDQzLCAxNTQ0OCwgMTU0NTQsIDE1NDYyLCAxNTQ3MCwgMTU0NzYsIDE1NDgyLCAxNTQ4NywgMTU0OTQsIAorICAgIDE1NDk5LCAxNTUwMywgMTU1MDksIDE1NTE0LCAxNTUyMSwgMTU1MjYsIDE1NTMyLCAxNTUzNSwgMTU1NDEsIDE1NTQ3LCAKKyAgICAxNTU1MCwgMTU1NTQsIDE1NTY2LCAxNTU3MiwgMTU1NzcsIDE1NTg0LCAxNTU5MCwgMTU1OTYsIDE1NjA3LCAxNTYxNywgCisgICAgMTU2MjYsIDE1NjM0LCAxNTY0MSwgMTU2NTIsIDE1NjYyLCAxNTY3MiwgMTU2ODAsIDE1NjgzLCAxNDM1OSwgMTU2ODgsIAorICAgIDE1NjkzLCAxNDM2NCwgMTQ0OTksIDE1NzAxLCAxNTcxNCwgMTU3MjksIDE1NzQwLCAxNDUxNiwgMTU3NTgsIDE1NzcxLCAKKyAgICAxNTc4NCwgMTU3OTUsIDEwNDkyLCAxNTgwNiwgMTU4MTksIDE1ODM4LCAxNTg0OSwgMTU4NjAsIDE1ODcxLCAyNjQ5LCAKKyAgICAxNTg4NCwgMTU4ODgsIDE1ODk2LCAxNTkxMSwgMTU5MjYsIDE1OTM3LCAxNTk0NCwgMTU5NTAsIDE1OTU4LCAxNTk2MiwgCisgICAgMTU5NjgsIDE1OTcxLCAxNTk4MSwgMTU5ODksIDE1OTk2LCAxNjAwNCwgMTYwMTQsIDE2MDE5LCAxNjAyNiwgMTYwMzEsIAorICAgIDE2MDM4LCAxNjA0OSwgMTYwNTksIDE2MDY1LCAxNjA3MCwgMTYwNzUsIDE0MzY5LCAxNjA3OSwgMTYwODUsIDE2MDkxLCAKKyAgICAxNjA5NiwgMTYxMDEsIDE2MTA2LCAxNjExMCwgMTQzNzQsIDE0MzgwLCAxNjExNCwgMTQzODYsIDE2MTE5LCAxNjEyNywgCisgICAgMTYxMzYsIDE2MTQzLCA5MTUwLCAxNjE0NywgMTYxNDksIDE2MTU0LCAxNjE1OSwgMTYxNjUsIDE2MTcwLCAxNjE3NSwgCisgICAgMTYxODAsIDE2MTg1LCAxNjE4OSwgMTYxOTUsIDE2MjAxLCAxNjIwNiwgMTYyMTIsIDE2MjE3LCAxNjIyMiwgMTYyMjgsIAorICAgIDE2MjMzLCAxNjIzOCwgMTYyNDMsIDE2MjQ4LCAxNjI1NCwgMTYyNTksIDE2MjY0LCAxNjI3MCwgMTYyNzYsIDE2MjgxLCAKKyAgICAxNjI4NiwgMTYyOTMsIDE2Mjk5LCAxNjMxMCwgMTYzMTcsIDE2MzIyLCAxNjMyNiwgMTYzMzAsIDE2MzMzLCAxNjM0MSwgCisgICAgMTYzNDYsIDE2MzUzLCAxNjM2MCwgMTYzNjYsIDE2MzcxLCAxNjM3NiwgMTYzODMsIDE2MzkzLCAxNjM5OCwgMTY0MDUsIAorICAgIDE2NDExLCAxNjQyMSwgMTY0MzEsIDE2NDQ1LCAxNjQ1OSwgMTY0NzMsIDE2NDg3LCAxNjUwMiwgMTY1MTcsIDE2NTM0LCAKKyAgICAxNjU1MiwgMTY1NjUsIDE2NTcxLCAxNjU3NiwgMTY1ODEsIDE2NTg1LCAxNjU5MCwgMTY1OTgsIDE2NjA0LCAxNjYwOSwgCisgICAgMTY2MTQsIDE2NjE4LCAxNjYyMywgMTY2MjcsIDE2NjMyLCAxNjYzNiwgMTY2NDcsIDE2NjUzLCAxNjY1OCwgMTY2NjMsIAorICAgIDE2NjcwLCAxNjY3NSwgMTY2NzksIDE2Njg0LCAxNjY4OSwgMTY2OTUsIDE2NzAyLCAxNjcwOCwgMTY3MTMsIDE2NzE3LCAKKyAgICAxNjcyMywgMTY3MjgsIDE2NzMzLCAxNjczNywgMTY3NDMsIDE2NzQ4LCAxNjc1MywgMTY3NjAsIDE2NzY1LCAxMzExMSwgCisgICAgMTY3NjksIDE2Nzc0LCAxNjc3OCwgMTY3ODMsIDE2Nzg5LCAxNjc5NSwgMTY4MDIsIDE2ODEyLCAxNjgyMCwgMTY4MjcsIAorICAgIDE2ODMyLCAxNjgzNiwgMTY4NDUsIDE2ODUzLCAxNjg2MCwgMTY4NjcsIDE2ODczLCAxNjg3OSwgMTY4ODQsIDE2ODg5LCAKKyAgICAxNjg5NSwgMTY5MDAsIDE2OTA2LCAxNjkxMSwgMTY5MTcsIDE2OTIzLCAxNjkzMCwgMTY5MzYsIDE2OTQxLCAxNjk0NiwgCisgICAgOTM0OCwgMTY5NTUsIDE2OTU4LCAxNjk2NCwgMTY5NjksIDE2OTc0LCAxNjk4NCwgMTY5OTEsIDE2OTk3LCAxNzAwMiwgCisgICAgMTcwMDcsIDE3MDEzLCAxNzAxOCwgMTcwMjQsIDE3MDI5LCAxNzAzNSwgMTcwNDEsIDE3MDQ2LCAxNzA1NCwgMTcwNjEsIAorICAgIDE3MDY2LCAxNzA3MSwgMTcwNzcsIDE3MDgyLCAxNzA4NiwgMTcwOTUsIDE3MTA2LCAxNzExMywgMTcxMTgsIDE3MTI2LCAKKyAgICAxNzEzMiwgMTcxMzksIDE3MTQ1LCAxNzE1MCwgMTcxNTQsIDE3MTYwLCAxNzE2NSwgMTcxNzAsIDE3MTc1LCAxNDQwLCAKKyAgICA3Nzc3LCAyODc3LCAxNzE3OSwgMTcxODMsIDE3MTg3LCAxNzE5MSwgMTcxOTUsIDE3MTk5LCAxNzIwMiwgMTcyMDksIAorICAgIDE3MjE3LCAxNDQwMCwgMTcyMjQsIDE3MjM0LCAxNzI0MiwgMTcyNDksIDE3MjU3LCAxNzI2NywgMTcyNzYsIDE3Mjg5LCAKKyAgICAxNzI5NCwgMTcyOTksIDE3MzA3LCAxNzMxNCwgMTMyMDcsIDEzMjE2LCAxNzMyMSwgMTczMzEsIDE3MzQ2LCAxNzM1MiwgCisgICAgMTczNTksIDE3MzY2LCAxNzM3MiwgMTczODAsIDE3MzkwLCAxNzQwMCwgMTQ0MDUsIDE3NDA5LCAxNzQxNSwgMTc0MjEsIAorICAgIDE3NDI5LCAxNzQzNywgMTc0NDIsIDE3NDUxLCAxNzQ1OSwgMTc0NzEsIDE3NDgxLCAxNzQ5MSwgMTc1MDEsIDE3NTEwLCAKKyAgICAxNzUyMiwgMTc1MzIsIDE3NTQyLCAxNzU1MywgMTc1NTgsIDE3NTcwLCAxNzU4MiwgMTc1OTQsIDE3NjA2LCAxNzYxOCwgCisgICAgMTc2MzAsIDE3NjQyLCAxNzY1NCwgMTc2NjYsIDE3Njc4LCAxNzY4OSwgMTc3MDEsIDE3NzEzLCAxNzcyNSwgMTc3MzcsIAorICAgIDE3NzQ5LCAxNzc2MSwgMTc3NzMsIDE3Nzg1LCAxNzc5NywgMTc4MDksIDE3ODIwLCAxNzgzMiwgMTc4NDQsIDE3ODU2LCAKKyAgICAxNzg2OCwgMTc4ODAsIDE3ODkyLCAxNzkwNCwgMTc5MTYsIDE3OTI4LCAxNzk0MCwgMTc5NTEsIDE3OTYzLCAxNzk3NSwgCisgICAgMTc5ODcsIDE3OTk5LCAxODAxMSwgMTgwMjMsIDE4MDM1LCAxODA0NywgMTgwNTksIDE4MDcxLCAxODA4MiwgMTgwOTQsIAorICAgIDE4MTA2LCAxODExOCwgMTgxMzAsIDE4MTQyLCAxODE1NCwgMTgxNjYsIDE4MTc4LCAxODE5MCwgMTgyMDIsIDE4MjEzLCAKKyAgICAxODIyNSwgMTgyMzcsIDE4MjQ5LCAxODI2MSwgMTgyNzMsIDE4Mjg1LCAxODI5NywgMTgzMDksIDE4MzIxLCAxODMzMywgCisgICAgMTgzNDQsIDE4MzU2LCAxODM2OCwgMTgzODAsIDE4MzkyLCAxODQwNCwgMTg0MTYsIDE4NDI4LCAxODQ0MCwgMTg0NTIsIAorICAgIDE4NDY0LCAxODQ3NSwgMTg0ODcsIDE4NDk5LCAxODUxMSwgMTg1MjMsIDE4NTM2LCAxODU0OSwgMTg1NjIsIDE4NTc1LCAKKyAgICAxODU4OCwgMTg2MDEsIDE4NjE0LCAxODYyNiwgMTg2MzksIDE4NjUyLCAxODY2NSwgMTg2NzgsIDE4NjkxLCAxODcwNCwgCisgICAgMTg3MTcsIDE4NzMwLCAxODc0MywgMTg3NTYsIDE4NzY4LCAxODc4MSwgMTg3OTQsIDE4ODA3LCAxODgyMCwgMTg4MzMsIAorICAgIDE4ODQ2LCAxODg1OSwgMTg4NzIsIDE4ODg1LCAxODg5OCwgMTg5MTAsIDE4OTIzLCAxODkzNiwgMTg5NDksIDE4OTYyLCAKKyAgICAxODk3NSwgMTg5ODgsIDE5MDAxLCAxOTAxNCwgMTkwMjcsIDE5MDQwLCAxOTA1MiwgMTkwNjUsIDE5MDc4LCAxOTA5MSwgCisgICAgMTkxMDQsIDE5MTE3LCAxOTEzMCwgMTkxNDMsIDE5MTU2LCAxOTE2OSwgMTkxODIsIDE5MTk0LCAxOTIwNywgMTkyMjAsIAorICAgIDE5MjMzLCAxOTI0NiwgMTkyNTksIDE5MjcyLCAxOTI4NSwgMTkyOTgsIDE5MzExLCAxOTMyNCwgMTkzMzYsIDE5MzQ3LCAKKyAgICAxOTM2MCwgMTkzNzMsIDE5Mzg2LCAxOTM5OSwgMTk0MTIsIDE5NDI1LCAxOTQzOCwgMTk0NTEsIDE5NDY0LCAxOTQ3NywgCisgICAgMTk0ODksIDE5NTAyLCAxOTUxNSwgMTk1MjgsIDE5NTQxLCAxOTU1NCwgMTk1NjcsIDE5NTgwLCAxOTU5MywgMTk2MDYsIAorICAgIDE5NjE5LCAxOTYzMSwgMTk2NDQsIDE5NjU3LCAxOTY3MCwgMTk2ODMsIDE5Njk2LCAxOTcwOSwgMTk3MjIsIDE5NzM1LCAKKyAgICAxOTc0OCwgMTk3NjEsIDE5NzczLCAxOTc4NiwgMTk3OTksIDE5ODEyLCAxOTgyNSwgMTk4MzgsIDE5ODUxLCAxOTg2NCwgCisgICAgMTk4NzcsIDE5ODkwLCAxOTkwMywgMTk5MTUsIDE5OTI4LCAxOTk0MSwgMTk5NTQsIDE5OTY3LCAxOTk4MCwgMTk5OTMsIAorICAgIDIwMDA2LCAyMDAxOSwgMjAwMzIsIDIwMDQ1LCAyMDA1NywgMjAwNzAsIDIwMDgzLCAyMDA5NiwgMjAxMDksIDIwMTIyLCAKKyAgICAyMDEzNSwgMjAxNDgsIDIwMTYxLCAyMDE3NCwgMjAxODcsIDIwMTk5LCAyMDIxMiwgMjAyMjUsIDIwMjM4LCAyMDI1MSwgCisgICAgMjAyNjQsIDIwMjc3LCAyMDI5MCwgMjAzMDMsIDIwMzE2LCAyMDMyOSwgMjAzNDEsIDIwMzU0LCAyMDM2NywgMjAzODAsIAorICAgIDIwMzkzLCAyMDQwNiwgMjA0MTksIDIwNDMyLCAyMDQ0NSwgMjA0NTgsIDIwNDcxLCAyMDQ4MywgMjA0OTYsIDIwNTA5LCAKKyAgICAyMDUyMiwgMjA1MzUsIDIwNTQ4LCAyMDU2MSwgMjA1NzQsIDIwNTg3LCAyMDYwMCwgMjA2MTMsIDIwNjI1LCAyMDYzOCwgCisgICAgMjA2NTEsIDIwNjY0LCAyMDY3NywgMjA2OTAsIDIwNzAzLCAyMDcxNiwgMjA3MjksIDIwNzQyLCAyMDc1NSwgMjA3NjcsIAorICAgIDIwNzc4LCAyMDc4NiwgMjA3OTQsIDIwODAxLCAyMDgwNywgMjA4MTEsIDIwODE3LCAyMDgyMywgMjA4MzEsIDIwODM3LCAKKyAgICAyMDg0MiwgMjA4NDYsIDIwODU1LCA5MTU1LCAyMDg2NiwgMjA4NzMsIDIwODgxLCAyMDg4OCwgMjA4OTUsIDEwOTQ4LCAKKyAgICAyMDkwMiwgMjA5MTEsIDIwOTE2LCAyMDkyMSwgNzgwNSwgMjA5MjgsIDIwOTMzLCAyMDkzNiwgMjA5NDEsIDIwOTQ5LCAKKyAgICAyMDk1NiwgMjA5NjMsIDIwOTcwLCAyMDk3NiwgMjA5ODUsIDIwOTk0LCAyMTAwMCwgMjEwMDksIDIxMDEzLCAyMTAxOSwgCisgICAgMjEwMjQsIDIxMDM0LCAyMTA0MSwgMjEwNDcsIDIxMDU1LCAyMTA2MSwgMjEwNjgsIDIxMDc4LCAyMTA4NywgMjEwOTEsIAorICAgIDIxMDk4LCAyMTEwMiwgMjExMDcsIDIxMTEzLCAyMTEyMSwgMjExMjUsIDIxMTM1LCAxNDQxNSwgMjExNDQsIDIxMTUwLCAKKyAgICAyMTE1NCwgMjExNjMsIDE0NDIwLCAyMTE2OSwgMjExNzYsIDIxMTg3LCAyMTE5NSwgMjEyMDQsIDIxMjEyLCA4OTMxLCAKKyAgICAyMTIyMCwgMjEyMjUsIDIxMjMxLCAyMTIzNiwgMjEyNDAsIDIxMjQ0LCAyMTI0OCwgOTYzOSwgMjEyNTMsIDIxMjYxLCAKKyAgICAyMTI2OCwgMjEyNzcsIDIxMjg0LCAyMTI5MSwgMTA4NzgsIDIxMjk4LCAyMTMwNCwgMjEzMDgsIDIxMzE0LCAyMTMyMSwgCisgICAgMjEzMjcsIDIxMzM1LCAyMTM0MSwgMjEzNDgsIDIxMzU0LCAyMTM2MCwgMjEzNjksIDIxMzczLCAyMTM4MSwgMjEzOTAsIAorICAgIDIxMzk3LCAyMTQwMiwgMjE0MDYsIDIxNDE3LCAyMTQyMiwgMjE0MjcsIDIxNDMyLCAyMTQ0NSwgNzk5NSwgMjE0NDksIAorICAgIDIxNDU1LCAyMTQ2MywgMjE0NjcsIDIxNDc0LCAyMTQ4MywgMjE0ODgsIDE0NjkxLCAyMTQ5NiwgMjE1MDAsIDIxNTEyLCAKKyAgICAyMTUxNywgMjE1MjEsIDIxNTI0LCAyMTUzMCwgMjE1MzYsIDIxNTQxLCAyMTU0NSwgMjE1NDgsIDIxNTU5LCAyMTU2NCwgCisgICAgOTM4MywgMjE1NzEsIDIxNTc2LCA5Mzg4LCAyMTU4MSwgMjE1ODYsIDIxNTkxLCAyMTU5NiwgMjE2MDEsIDIxNjA2LCAKKyAgICAyMTYxMSwgMjE2MTYsIDIxNjIxLCAyMTYyNiwgMjE2MzEsIDIxNjM2LCAyMTY0MiwgMjE2NDcsIDIxNjUyLCAyMTY1NywgCisgICAgMjE2NjIsIDIxNjY3LCAyMTY3MiwgMjE2NzcsIDIxNjgyLCAyMTY4NywgMjE2OTMsIDIxNjk5LCAyMTcwNCwgMjE3MDksIAorICAgIDIxNzE0LCAyMTcxOSwgMjE3MjQsIDIxNzI5LCAyMTczNCwgMjE3MzksIDIxNzQ0LCAyMTc1MCwgMjE3NTUsIDIxNzYwLCAKKyAgICAyMTc2NSwgMjE3NzEsIDIxNzc3LCAyMTc4MiwgMjE3ODcsIDIxNzkyLCAyMTc5NywgMjE4MDIsIDIxODA3LCAyMTgxMiwgCisgICAgMjE4MTcsIDIxODIzLCAyMTgyOCwgMjE4MzMsIDIxODM4LCAyMTg0MywgMjE4NDksIDIxODU0LCAyMTg1OSwgMjE4NjMsIAorICAgIDEzNjgsIDEyOSwgMjE4NzEsIDIxODc1LCAyMTg3OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMTMxMTcsIDEyNDc2LCAyMTg5NiwgCisgICAgMjE5MDEsIDIxOTA1LCAyMTkxMCwgMjE5MTQsIDIxOTE5LCAyMTkyMywgMjE5MjksIDIxOTM0LCAyMTkzOCwgMjE5NDIsIAorICAgIDIxOTUwLCAyMTk1NCwgMjE5NTgsIDIxOTYzLCAyMTk2OCwgMjE5NzIsIDIxOTc4LCAyMTk4MywgMjE5ODcsIDIxOTkyLCAKKyAgICAyMTk5NywgMjIwMDEsIDIyMDA4LCAyMjAxNSwgMjIwMjIsIDIyMDI2LCAyMjAzMCwgMjIwMzUsIDIyMDM5LCAyMjA0MiwgCisgICAgMjIwNDgsIDIyMDYxLCAyMjA2NiwgMjIwNzUsIDIyMDgwLCA5NDI4LCAyMjA4NSwgMjIwODgsIDI3MTIsIDI3MTcsIDIyMDkyLCAKKyAgICAyMjA5OCwgMjIxMDQsIDcyMDksIDIyMTA5LCAyMjExNCwgMjIxMTksIDIyMTI1LCAyMjEzMCwgMTM5MDksIDIyMTM1LCAKKyAgICAyMjE0MCwgMjIxNDUsIDIyMTUwLCAyMjE1NiwgMjIxNjEsIDIyMTY2LCAyMjE3MiwgMjIxNzcsIDIyMTgxLCAyMjE4NiwgCisgICAgMjIxOTEsIDIyMTk2LCAyMjIwMSwgMjIyMDUsIDIyMjEwLCAyMjIxNCwgMjIyMTksIDIyMjI0LCAyMjIyOSwgMjIyMzQsIAorICAgIDIyMjM4LCAyMjI0MywgMjIyNDcsIDIyMjUyLCAyMjI1NywgMjIyNjIsIDIyMjY3LCAyODg2LCAyMjE4MiwgMjIyNzEsIAorICAgIDIyMjc5LCAyMjI4NiwgOTczMywgMjIyOTgsIDIyMzA2LCAyMjE4NywgMjIzMTMsIDIyMzE4LCAyMjMyNiwgMjIxOTIsIAorICAgIDIyMzMxLCAyMjMzNiwgMjIzNDQsIDIyMzQ5LCAyMjE5NywgMjIzNTQsIDIyMzU5LCAyMjM2MywgMjIzNjksIDIyMzc3LCAKKyAgICAyMjM4MCwgMjIzODcsIDIyMzkxLCAyMjM5NSwgMjI0MDEsIDIyNDA4LCAyMjQxMywgODk1OCwgMTcyNywgMTczMiwgMjI0MTcsIAorICAgIDIyNDIzLCAyMjQyOSwgMjI0MzQsIDIyNDM4LCAyMjQ0MiwgMjI0NDYsIDIyNDUwLCAyMjQ1NCwgMjI0NTgsIDIyNDYyLCAKKyAgICAyMjQ2NiwgMjI0NjksIDIyNDc1LCAyMjQ4MiwgMjI0OTAsIDIyNDk2LCAyMjUwMiwgMjI1MDcsIDIyNTEyLCAyMjUxNiwgCisgICAgMTM4MjksIDEzODM2LCAyMjUyMSwgMjI1MzMsIDIyNTM2LCAyMjU0MywgMTYzNjIsIDIyNTUwLCAyMjU1OCwgMjI1NjksIAorICAgIDIyNTc4LCAyMjU5MSwgMjI2MDEsIDIyNjE1LCAyMjYyNywgMjI2NDEsIDIyNjUzLCAyMjY2MywgMjI2NzUsIDIyNjgxLCAKKyAgICAyMjY5NiwgMjI3MjAsIDIyNzM4LCAyMjc1NywgMjI3NzAsIDIyNzg0LCAyMjgwMiwgMjI4MTgsIDIyODM1LCAyMjg1MywgCisgICAgMjI4NjQsIDIyODgzLCAyMjkwMCwgMjI5MjAsIDIyOTM4LCAyMjk1MCwgMjI5NjQsIDIyOTc4LCAyMjk5MCwgMjMwMDcsIAorICAgIDIzMDI2LCAyMzA0NCwgMjMwNTYsIDIzMDc0LCAyMzA5MywgMTQ1NTksIDIzMTA2LCAyMzEyNiwgMjMxMzgsIDEwNTIzLCAKKyAgICAyMzE1MCwgMjMxNTUsIDIzMTYwLCAyMzE2NSwgMjMxNzEsIDIzMTc2LCAyMzE4MCwgMjMxODcsIDIzOTgsIDIzMTkxLCAKKyAgICAyMzE5NywgMjMyMDEsIDIzMjA0LCAyMzIwOCwgMjMyMTYsIDIzMjIyLCAyMjIxNSwgMjMyMjYsIDIzMjM1LCAyMzI0NiwgCisgICAgMjMyNTIsIDIzMjU4LCAyMzI2NywgMjMyNzUsIDIzMjgyLCAyMzI4NywgMjMyOTEsIDIzMjk4LCAyMzMwNCwgMjMzMTMsIAorICAgIDIzMzIxLCAyMzMyOCwgMjMzMzgsIDIzMzQ3LCAyMzM1NywgMjMzNjIsIDIzMzcxLCAyMzM4MCwgMjMzOTEsIDIzNDAyLCAKKyAgICAzOTYzLCAyMzQxMiwgMjM0MTYsIDIzNDI2LCAyMzQzNCwgMjM0NDQsIDIzNDU1LCAyMzQ2MCwgMjM0NzAsIDIzNDc4LCAKKyAgICAyMzQ4NSwgMjM0OTEsIDIzNDk4LCAyMzUwMywgMjIyMjUsIDIzNTA3LCAyMzUxNiwgMjM1MjAsIDIzNTIzLCAyMzUyOCwgCisgICAgMjM1MzUsIDIzNTQ0LCAyMzU1MiwgMjM1NjAsIDIzNTcwLCAyMzU3OSwgMjM1ODUsIDIzNTkxLCAyMjIzMCwgMjIyMzUsIAorICAgIDIzNTk1LCAyMzYwNSwgMjM2MTUsIDIzNjI1LCAyMzYzMywgMjM2NDAsIDIzNjUwLCAyMzY1OCwgMjM2NjYsIDIzNjcyLCAKKyAgICAyMzY4MCwgOTMwLCAyMzY4OSwgMTQ3NTAsIDU0MiwgMjM3MDMsIDIzNzEyLCAyMzcyMCwgMjM3MzEsIDIzNzQyLCAyMzc1MiwgCisgICAgMjM3NjEsIDIzNzczLCAyMzc4MiwgMjM3OTEsIDIzNzk3LCAyMzgwNiwgMjM4MTUsIDIzODI1LCAyMzgzMywgMjM4NDEsIAorICAgIDkzNjAsIDIzODQ3LCAyMzg1MCwgMjM4NTQsIDIzODU5LCAyMzg2NCwgOTg0OCwgMjIyNDgsIDIyMjUzLCAyMzg3MiwgCisgICAgMjM4NzgsIDIzODg0LCAyMzg4OSwgMjM4OTQsIDIzODk4LCAyMzkwNiwgMjM5MTIsIDIzOTE4LCAyMzkyMiwgMzUyNSwgCisgICAgMjM5MzAsIDIzOTM1LCAyMzk0MCwgMjM5NDQsIDIzOTQ4LCA5OTI4LCAyMzk1NSwgMjM5NjMsIDIzOTc3LCAyMzk4NCwgCisgICAgMjM5OTAsIDk5MzcsIDk5NDMsIDIzOTk4LCAyNDAwNiwgMjQwMTMsIDI0MDE4LCAyNDAyMywgMjIyNTgsIDI0MDI5LCAKKyAgICAyNDA0MCwgMjQwNDQsIDI0MDQ5LCAyNjAxLCAyNDA1NCwgMjQwNjUsIDI0MDcxLCAyNDA3NiwgMjQwODAsIDI0MDg0LCAKKyAgICAyNDA4NywgMjQwOTQsIDI0MTAxLCAyNDEwOCwgMjQxMTQsIDI0MTE4LCAyMjI2MywgMjQxMjMsIDI0MTI3LCAyNDEzMSwgCisgICAgMTAzNywgMjQxMzYsIDI0MTQxLCAyNDE0NiwgMjQxNTEsIDI0MTU2LCAyNDE2MSwgMjQxNjYsIDI0MTcxLCAyNDE3NiwgCisgICAgMjQxODEsIDI0MTg2LCAyNDE5MSwgMjQxOTYsIDI0MjAxLCAyNDIwNywgMjQyMTIsIDI0MjE3LCAyNDIyMiwgMjQyMjcsIAorICAgIDI0MjMyLCAyNDIzNywgMjQyNDMsIDI0MjQ4LCAyNDI1MywgMjQyNTgsIDI0MjYzLCAyNDI2OCwgMjQyNzMsIDI0Mjc4LCAKKyAgICAyNDI4NCwgMjQyOTAsIDI0Mjk1LCAyNDMwMSwgMjQzMDYsIDI0MzExLCA1LCAyNDMxNywgMjQzMjEsIDI0MzI1LCAyNDMyOSwgCisgICAgMjQzMzQsIDI0MzM4LCAyNDM0MiwgMjQzNDYsIDI0MzUwLCAyNDM1NSwgMjQzNTksIDI0MzY0LCAyNDM2OCwgMjQzNzEsIAorICAgIDI0Mzc1LCAyNDM4MCwgMjQzODQsIDI0Mzg5LCAyNDM5MywgMjQzOTcsIDI0NDAxLCAyNDQwNiwgMjQ0MTAsIDI0NDE0LCAKKyAgICAyNDQyNCwgMjQ0MjksIDI0NDMzLCAyNDQzNywgMjQ0NDIsIDI0NDQ3LCAyNDQ1NiwgMjQ0NjEsIDI0NDY2LCAyNDQ3MCwgCisgICAgMjQ0NzQsIDI0NDg3LCAyNDQ5OSwgMjQ1MDgsIDI0NTE3LCAyNDUyMywgMjQ1MjgsIDI0NTMyLCAyNDUzNiwgMjQ1NDYsIAorICAgIDI0NTU1LCAyNDU2MywgMjQ1NjksIDI0NTc0LCAyNDU3OCwgMjQ1ODUsIDI0NTk1LCAyNDYwNCwgMjQ2MTIsIDI0NjIwLCAKKyAgICAyNDYyNywgMjQ2MzUsIDI0NjQ0LCAyNDY1MywgMjQ2NjEsIDI0NjY2LCAyNDY3MCwgMjQ2NzQsIDI0Njc3LCAyNDY3OSwgCisgICAgMjQ2ODMsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAxLCAyNDcwNSwgMjQ3MDgsIDI0NzEyLCAyNDcxNSwgMjQ3MTksIAorICAgIDI0NzIyLCAyNDcyNSwgMjQ3MjksIDI0NzM1LCAyNDczOSwgMjQ3NDMsIDI0NzQ3LCAyNDc1MiwgMjQ3NTcsIDI0NzYyLCAKKyAgICAyNDc2NiwgMjQ3NjksIDI0Nzc0LCAyNDc4MCwgMjQ3ODUsIDI0NzkxLCAyNDc5NiwgMjQ4MDAsIDI0ODA0LCAyNDgwOCwgCisgICAgMjQ4MTMsIDI0ODE3LCAyNDgyMiwgMjQ4MjYsIDI0ODMwLCAyNDgzNywgMjQ4NDEsIDI0ODQ0LCAyNDg0OCwgMjQ4NTQsIAorICAgIDI0ODYwLCAyNDg2NCwgMjQ4NjgsIDI0ODczLCAyNDg4MCwgMjQ4ODYsIDI0ODkwLCAyNDg5OSwgMjQ5MDMsIDI0OTA3LCAKKyAgICAyNDkxMCwgMjQ5MTYsIDI0OTIxLCAyNDkyNywgMTQ4OSwgMTc5MSwgMjQ5MzIsIDI0OTM3LCAyNDk0MiwgMjQ5NDcsIAorICAgIDI0OTUyLCAyNDk1NywgMjQ5NjIsIDIxNDgsIDIxOTQsIDI0OTY3LCAyNDk3MCwgMjQ5NzQsIDI0OTc4LCAyNDk4MywgCisgICAgMjQ5ODcsIDI0OTkxLCAyNDk5NCwgMjQ5OTksIDI1MDA0LCAyNTAwOCwgMjUwMTEsIDI1MDE2LCAyNTAyMCwgMjUwMjUsIAorICAgIDI1MDI5LCAxNDc2MiwgMjUwMzQsIDI1MDM3LCAyNTA0MCwgMjUwNDQsIDI1MDQ5LCAyNTA1MywgMjUwNjYsIDI1MDcwLCAKKyAgICAyNTA3MywgMjUwODEsIDI1MDkwLCAyNTA5NywgMjUxMDIsIDI1MTA4LCAyNTExNCwgMjUxMjIsIDI1MTI5LCAyNTEzNiwgCisgICAgMjUxNDAsIDI1MTQ0LCAyNTE0OCwgMjUxNTMsIDI1MTU4LCAyNTE2MiwgMjUxNzAsIDI1MTc1LCAyNTE4NywgMjUxOTgsIAorICAgIDI1MjAzLCAyNTIwNywgMjUyMTEsIDI1MjE3LCAyNTIyMiwgMjUyMjcsIDI1MjMxLCAyNTIzNSwgMjUyMzgsIDI1MjQ0LCAKKyAgICA3OTE1LCAyMzE2LCAyNTI0OCwgMjUyNTMsIDI1MjY5LCA5NDc1LCAyNTI4OSwgMjUyOTgsIDI1MzE0LCAyNTMxOCwgMjUzMjEsIAorICAgIDI1MzI3LCAyNTMzNywgMjUzNDMsIDI1MzUyLCAyNTM2NywgMjUzNzksIDI1MzkwLCAyNTM5OCwgMjU0MDcsIDI1NDEzLCAKKyAgICAyNTQyMiwgMjU0MzIsIDI1NDQzLCAyNTQ1NCwgMjU0NjMsIDI1NDcwLCAyNTQ3OSwgMjU0ODcsIDI1NDk0LCAyNTUwMiwgCisgICAgMjU1MDksIDI1NTE2LCAyNTUyOSwgMjU1MzYsIDI1NTQyLCAyNTU0NywgMjU1NTYsIDI1NTYyLCAyNTU2NywgMjU1NzUsIAorICAgIDI1NTgyLCAyMzQzNiwgMjU1OTQsIDI1NjA2LCAyNTYyMCwgMjU2MjgsIDI1NjM1LCAyNTY0NywgMjU2NTYsIDI1NjY1LCAKKyAgICAyNTY3MywgMjU2ODEsIDI1Njg5LCAyNTY5NiwgMjU3MDUsIDI1NzEzLCAyNTcyMywgMjU3MzIsIDI1NzQyLCAyNTc1MSwgCisgICAgMjU3NjAsIDI1NzY4LCAyNTc3MywgMjU3NzcsIDI1NzgwLCAyNTc4NCwgMjU3ODgsIDI1NzkyLCAyNTc5NiwgMjU4MDAsIAorICAgIDI1ODA2LCAyNTgxMiwgMjU4MjAsIDE0ODA3LCAyNTgyNywgMjU4MzIsIDI1ODM5LCAyNTg0NSwgMjU4NTIsIDE0ODE1LCAKKyAgICAyNTg1OSwgMjU4NjIsIDI1ODc0LCAyNTg4MiwgMjU4ODgsIDI1ODkzLCAyNTg5NywgOTg3OCwgMjU5MDgsIDI1OTE4LCAKKyAgICAyNTkyNywgMjU5MzQsIDI1OTM4LCAxNDgyMCwgMjU5NDEsIDI1OTQ4LCAyNTk1MiwgMjU5NTgsIDI1OTYxLCAyNTk2OCwgCisgICAgMjU5NzQsIDI1OTgxLCAyNTk4NywgMjU5OTEsIDI1OTk2LCAyNjAwMCwgMjYwMDksIDI2MDE2LCAyNjAyMiwgNzk1NiwgCisgICAgMjYwMjksIDI2MDM3LCAyNjA0NCwgMjYwNTAsIDI2MDU1LCAyNjA2MSwgMjYwNjcsIDI2MDc1LCAyNjA3OSwgMjYwODIsIAorICAgIDI2MDg0LCAyNTc4NSwgMjYwOTMsIDI2MDk5LCAyNjEwOSwgMjYxMTQsIDI2MTIxLCAyNjEyNywgMjYxMzIsIDI2MTM3LCAKKyAgICAyNjE0MiwgMjYxNDYsIDI2MTUxLCAyNjE1OCwgMjYxNjcsIDI2MTcxLCAyNjE3OCwgMjYxODcsIDI2MTkzLCAyNjE5OCwgCisgICAgMjYyMDQsIDI2MjA5LCAyNjIxNiwgMjYyMjcsIDI2MjMyLCAyNjIzNiwgMjYyNDYsIDI2MjUyLCAyNjI1NiwgMjYyNjEsIAorICAgIDI2MjcxLCAyNjI4MCwgMjYyODQsIDI2MjkxLCAyNjI5OSwgMjYzMDYsIDI2MzEyLCAyNjMxNywgMjYzMjUsIDI2MzMyLCAKKyAgICAyNjM0NCwgMjYzNTMsIDI2MzU3LCAxMzA1MywgMjYzNjUsIDI2Mzc1LCAyNjM3OSwgMjUwNzcsIDI2MzkwLCAyNjM5NSwgCisgICAgMjYzOTksIDI2NDA2LCAyNjQxMywgMjE5NzQsIDI1NzEwLCAyNjQxOCwgMjY0MjIsIDI2NDI1LCAyMjg3MCwgMjY0MzAsIAorICAgIDI2NDQ0LCAyNjQ2MCwgMjY0NzgsIDI2NDk3LCAyNjUxNCwgMjY1MzIsIDIyODg5LCAyNjU0OSwgMjY1NjksIDIyOTA2LCAKKyAgICAyNjU4MSwgMjY1OTMsIDE1NzQ1LCAyNjYwNSwgMjI5MjYsIDI2NjE5LCAyNjYzMSwgMTA1MzYsIDI2NjQ1LCAyNjY1MCwgCisgICAgMjY2NTUsIDI2NjYwLCAyNjY2NiwgMjY2NzIsIDI2Njc4LCAyNjY4MiwgMjY2ODksIDI2Njk0LCAyNjcwNCwgMjY3MTAsIAorICAgIDEwMTgzLCAyNjcxNiwgMjY3MTgsIDI2NzIzLCAyNjczMSwgMjY3MzUsIDI2MTU0LCAyNjc0MSwgMjY3NDgsIDExNTI0LCAKKyAgICAxMTUzNCwgMjY3NTUsIDI2NzY1LCAyNjc3MCwgMjY3NzQsIDI2Nzc3LCAyNjc4MywgMjY3OTEsIDI2ODAzLCAyNjgxMywgCisgICAgMjY4MjksIDI2ODQyLCAyNjg1NiwgMTU3NjMsIDI2ODcwLCAyNjg3NywgMjY4ODEsIDI2ODg0LCAyNjg4OSwgMjY4OTMsIAorICAgIDI2OTAwLCAyNjkwNywgMjY5MTcsIDI2OTIyLCAyNjkyNywgMjY5MzIsIDI2OTQwLCAyNjk0OCwgMjY5NTcsIDI2OTYyLCAKKyAgICA5NTcyLCAyNjk2NiwgMjY5NjksIDI2OTcyLCAyNjk3NywgMjY5ODQsIDI2OTg5LCAyNzAwNSwgMjcwMTMsIDI3MDIxLCAKKyAgICA5NDIzLCAyNzAyOSwgMjcwMzQsIDI3MDM4LCAyNzA0NCwgMjcwNTAsIDI3MDUzLCAyNzA1OSwgMjcwNzEsIDI3MDc5LCAKKyAgICAyNzA4NiwgMjcwOTIsIDI3MDk5LCAyNzExMCwgMjcxMjQsIDI3MTM3LCAyNzE0NiwgMjcxNTUsIDI3MTY3LCAyNzE3OCwgCisgICAgMjcxODgsIDI3MTk3LCAyNzIwNiwgMjcyMTQsIDI3MjI1LCA3OTM4LCAyNzIzMiwgMjcyMzgsIDI3MjQzLCAyNzI0OSwgCisgICAgMjcyNTYsIDI3MjY2LCAyNzI3NiwgMjcyODUsIDI3MjkxLCAyNzI5OCwgMjczMDMsIDI3MzEwLCAyNzMxOCwgMjczMjYsIAorICAgIDI3MzM4LCA2MjQ2LCAyNzM0NSwgMjczNTQsIDI3MzYyLCAyNzM2OCwgMjczNzQsIDI3Mzc5LCAyNzM4MywgMjczODYsIAorICAgIDI3MzkyLCAyNzM5OSwgMjc0MDQsIDI3NDA5LCAyNzQxMywgMjc0MjUsIDI3NDM2LCAyNzQ0NSwgMjc0NTMsIDE0OTQ3LCAKKyAgICAyNzQ1OCwgMjc0NjQsIDI3NDcwLCAxMTUxNywgODYzNSwgMjc0NzUsIDI3NDc5LCAyNzQ4MywgMjc0ODYsIDI3NDg5LCAKKyAgICAyNzQ5NSwgMjc1MDMsIDI3NTExLCAyNzUxNSwgMjc1MTksIDI3NTI0LCAyNzUyNywgMjc1MzYsIDI3NTQwLCAyNzU0OCwgCisgICAgMjc1NTksIDI3NTYzLCAyNzU2OSwgMjc1NzUsIDI3NTc5LCAyNzU4NSwgMjc1OTMsIDI3NjE1LCAyNzYzOSwgMjc2NDYsIAorICAgIDI3NjUzLCAyNzY1OSwgMjc2NjcsIDI3NjczLCAyNzY3OCwgMjc2ODksIDI3NzA3LCAyNzcxNCwgMjc3MjIsIDI3NzI2LCAKKyAgICAyNzczNSwgMjc3NDgsIDI3NzU2LCAyNzc2OCwgMjc3NzksIDI3Nzg5LCAyNzgwMywgMjc4MTIsIDI3ODIwLCAyNzgzMiwgCisgICAgOTQ5MiwgMjc4NDMsIDI3ODU0LCAyNzg2NiwgMjc4NzYsIDI3ODg1LCAyNzg5MCwgMjc4OTQsIDI3OTAyLCAyNzkxMiwgCisgICAgMjc5MTcsIDI3OTIxLCAyNzkyNCwgMjc5MjcsIDI3OTM1LCAyNzk0MywgMjc5NTIsIDI3OTYyLCAyNzk3MSwgMjc5NzcsIAorICAgIDI3OTkxLCAyNjYzLCAyODAxMywgMjgwMjQsIDI4MDMzLCAyODA0MywgMjgwNTUsIDI4MDY0LCAyODA3MywgMjgwODMsIAorICAgIDI4MDkxLCAyODA5OSwgMjgxMDgsIDI4MTEzLCAyODEyNCwgMjgxMjksIDI4MTQwLCAyODE0NCwgMjgxNTQsIDI4MTYzLCAKKyAgICAyODE3MSwgMjgxODEsIDI4MTkxLCAyODE5OSwgMjgyMDgsIDI4MjE1LCAyODIyMywgMjgyMzAsIDI4MjM5LCAyODI0MywgCisgICAgMjgyNTEsIDI4MjU4LCAyODI2NiwgMjgyNzMsIDI4Mjg0LCAyODI5OSwgMjgzMDYsIDI4MzEyLCAyODMyMiwgMjgzMzEsIAorICAgIDI4MzM3LCAyODM0MSwgMjgzNDgsIDI4MzUyLCAxNDAzMSwgMjgzNTgsIDI4MzYyLCAyODM2NywgMjgzNzQsIDI4Mzc4LCAKKyAgICAyODM4MiwgMjgzOTAsIDI4Mzk4LCAyODQwNCwgMjg0MTMsIDI4NDIwLCAyODQyNSwgMjg0MzAsIDI4NDQwLCAyMzUwNSwgCisgICAgMjg0NDQsIDI4NDQ3LCAyODQ1MiwgMjg0NTcsIDI4NDYyLCAyODQ2NywgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODcsIAorICAgIDI4NDkzLCAyODQ5OCwgMjg1MDMsIDI4NTA5LCAxMjE4LCA3MDQsIDI4NTE0LCAyODUyMywgMjM2NCwgMjg1MzAsIDI4NTM1LCAKKyAgICAyODUzOSwgMjg1NDUsIDEyNjcsIDU0NiwgMzE4LCAyODU1MCwgMjg1NTksIDI4NTY3LCAyODU3NiwgMjg1ODQsIDI4NTk1LCAKKyAgICAyODYwNCwgMjg2MTIsIDI4NjE2LCAyODYxOSwgMjg2MjcsIDI4NjM1LCAyODY0MCwgMTQ3NzUsIDI4NjQ2LCAyODY1MiwgCisgICAgMjg2NTgsIDU4NzIsIDI4NjYzLCAyODY2NywgMjg2NzMsIDI4Njc3LCAyODY4NCwgMTQ1NSwgMjg2OTAsIDI4Njk3LCA5NTc5LCAKKyAgICAyODcwMSwgMjg3MTEsIDI4NzE5LCAyODcyNSwgMjg3MzQsIDI4NzQyLCAyODc0OCwgMjg3NTYsIDI4NzYzLCAxMTExMCwgCisgICAgMjg3NjksIDI4Nzc2LCAyODc4MSwgMjg3ODgsIDE0OTYsIDIxNDcsIDI4Nzk0LCAyODgwMCwgMjg4MDcsIDI4ODE4LCAKKyAgICAyODgyOSwgMjg4MzcsIDI4ODQ0LCAyODg1NCwgMjg4NjMsIDI4ODcxLCAyODg4MCwgMjg4ODcsIDI4ODk0LCAyODkwNywgCisgICAgMjg5MTgsIDEyNzIsIDI4OTM3LCAyODk0MiwgMjg5NTAsIDM1NzUsIDI4OTU0LCAyODk1OSwgMjg5NjMsIDE0NTksIDI0NzA2LCAKKyAgICAyODk3MywgMjg5NzcsIDI4OTgyLCAyODk4NiwgMzQ5MywgMjg5OTIsIDI5MDAwLCAyOTAwNywgMjkwMTgsIDI5MDI2LCAKKyAgICAyOTAzNCwgMzU3NiwgMjc5LCAyOTAzOSwgMjkwNDcsIDI5MDU1LCAyOTA2MiwgMjkwNjgsIDI5MDczLCAyMjE2LCAyOTA4MCwgCisgICAgMjkwODYsIDI1OTkyLCAyNjIyMiwgMjkwOTIsIDEwNiwgMjkwOTYsIDI5MTAwLCAyOTEwNiwgNjE1LCA5MzI4LCAyOTExMSwgCisgICAgMjkxMTgsIDI5MTI0LCAyMzI3LCAyOTEyOCwgMjkxMzIsIDE1MTg3LCAyOTEzNSwgMjkxNDAsIDI5MTQ3LCAyOTE1MywgCisgICAgMjkxNTgsIDI5MTY2LCAyOTE3MywgMjkxNzksIDIyMzUxLCAyOTE4MywgMjkxODcsIDM2NDYsIDE2NjI1LCAyOTE5MSwgCisgICAgMjkxOTYsIDI5MTk5LCAyOTIwNywgMjkyMTUsIDI5MjIwLCAyOTIyMywgMjkyMzAsIDI5MjQwLCAyOTI1MiwgMjkyNTcsIAorICAgIDI5MjYxLCAyOTI2OSwgMjkyNzYsIDI5MjgyLCAyOTI4OSwgMjkyOTYsIDI5Mjk5LCAyOTMwMywgMjkzMDcsIDE0NjMsIAorICAgIDI5MzE3LCAyOTMxOSwgMjkzMjQsIDI5MzMwLCAyOTMzNiwgMjkzNDEsIDI5MzQ2LCAyOTM1MSwgMjkzNTYsIDI5MzYxLCAKKyAgICAyOTM2NiwgMjkzNzEsIDI5Mzc2LCAyOTM4MSwgMjkzODYsIDI5MzkxLCAyOTM5NiwgMjk0MDEsIDI5NDA2LCAyOTQxMiwgCisgICAgMjk0MTgsIDI5NDI0LCAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MSwgMjk0NjYsIAorICAgIDI5NDcyLCAyOTQ3NywgMjk0ODMsIDI5NDg4LCAyOTQ5MywgMjk0OTgsIDI5NTAzLCAyOTUwOSwgMjk1MTQsIDI5NTIwLCAKKyAgICAyOTUyNSwgMjk1MzAsIDI5NTM1LCAyOTU0MCwgMjk1NDYsIDI5NTUxLCAyOTU1NywgMjk1NjIsIDI5NTY3LCAyOTU3MiwgCisgICAgMjk1NzcsIDI5NTgyLCAyOTU4NywgMjk1OTIsIDI5NTk3LCAyOTYwMiwgMjk2MDgsIDI5NjE0LCAyOTYyMCwgMjk2MjUsIAorICAgIDI5NjMwLCAyOTYzNSwgMjk2NDAsIDI5NjQ2LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY3MCwgMjk2NzYsIDI5NjgxLCAKKyAgICAyOTY4NywgMjk2OTIsIDI5Njk3LCAyOTcwMiwgMjk3MDcsIDI5NzEzLCAyNDQzLCAyOTcxOCwgMjQ1MCwgMjQ1NywgMjc1NCwgCisgICAgMjk3MjMsIDI0NjMsIDI0NzMsIDI5NzI5LCAyOTczMywgMjk3MzgsIDI5NzQzLCAyOTc0OSwgMjk3NTQsIDI5NzU5LCAKKyAgICAyOTc2MywgMjk3NjgsIDI5Nzc0LCAyOTc3OSwgMjk3ODQsIDI5Nzg5LCAyOTc5NSwgMjk4MDAsIDI5ODA0LCAyOTgwOCwgCisgICAgMjk4MTMsIDI5ODE4LCAyOTgyMywgMjk4MjgsIDI5ODMzLCAyOTgzOSwgMjk4NDUsIDI5ODUwLCAyOTg1NCwgMjk4NTksIAorICAgIDI5ODY1LCAyOTg2OSwgMjk4NzQsIDI5ODc5LCAyOTg4NCwgMjk4ODksIDI5ODkzLCAyOTg5NiwgMjk5MDEsIDI5OTA2LCAKKyAgICAyOTkxMSwgMjk5MTYsIDI5OTIxLCAyOTkyNywgMjk5MzMsIDI5OTM4LCAyOTk0MywgMjk5NDcsIDI5OTUyLCAyOTk1NywgCisgICAgMjk5NjIsIDI5OTY3LCAyOTk3MiwgMjk5NzYsIDI5OTgxLCAyOTk4NiwgMjk5OTEsIDI5OTk1LCAyOTk5OSwgMzAwMDMsIAorICAgIDMwMDA4LCAzMDAxNiwgMzAwMjEsIDMwMDI3LCAzMDAzMywgMzAwMzksIDMwMDQ0LCAzMDA0OCwgMzAwNTEsIDMwMDU2LCAKKyAgICAzMDA2MSwgMzAwNjUsIDMwMDcwLCAzMDA3NCwgMzAwNzksIDMwMDgzLCAzMDA4NiwgMzAwOTEsIDE3MzAyLCAzMDA5NiwgCisgICAgMzAxMDEsIDMwMTA2LCAzMDExNCwgMjEyODAsIDI4Njk0LCA5MDI2LCAzMDExOSwgMzAxMjQsIDMwMTI4LCAzMDEzMywgCisgICAgMzAxMzcsIDMwMTQxLCAzMDE0NiwgMzAxNTAsIDMwMTUzLCAzMDE1NiwgMzAxNjAsIDMwMTY1LCAzMDE2OSwgMzAxNzcsIAorICAgIDMwMTgxLCAzMDE4NCwgMzAxODksIDMwMTkzLCAzMDE5NywgMzAyMDIsIDMwMjA3LCAzMDIxMSwgMzAyMTcsIDMwMjIyLCAKKyAgICAzMDIyNywgMzAyMzQsIDMwMjQxLCAzMDI0NSwgMzAyNDgsIDMwMjU0LCAzMDI2MywgMzAyNzAsIDMwMjc4LCAzMDI4NSwgCisgICAgMzAyODksIDMwMjk0LCAzMDI5OCwgMzAzMDIsIDMwMzA4LCAzMDMxNCwgMzAzMTgsIDMwMzI0LCAzMDMyOSwgMzAzMzQsIAorICAgIDMwMzM4LCAzMDM0NSwgMzAzNTEsIDMwMzU3LCAzMDM2MywgMzAzNjksIDMwMzc2LCAzMDM4MiwgMzAzODgsIDMwMzk0LCAKKyAgICAzMDQwMCwgMzA0MDYsIDMwNDEyLCAzMDQxOCwgMzA0MjUsIDMwNDMxLCAzMDQzOCwgMzA0NDQsIDMwNDUwLCAzMDQ1NiwgCisgICAgMzA0NjIsIDMwNDY4LCAzMDQ3NCwgMzA0ODAsIDMwNDg2LCAzMDQ5MiwgMTE0MTgsIDMwNDk4LCAzMDUwMywgMzA1MDgsIAorICAgIDMwNTExLCAzMDUxOSwgMzA1MjQsIDMwNTMzLCAzMDUzOSwgMzA1NDQsIDMwNTQ5LCAzMDU1NCwgMzA1NTgsIDMwNTYzLCAKKyAgICAzMDU2OCwgMzA1NzMsIDMwNTc4LCAzMDU4MywgMzA1OTAsIDMwNTk3LCAzMDYwMywgMzA2MDksIDMwNjE0LCAxNjMwMywgCisgICAgMzA2MjEsIDMwNjI3LCAzMDYzNCwgMzA2NDAsIDMwNjQ2LCAzMDY1MSwgMzA2NTksIDMwNjY0LCAxNjA4MiwgMzA2NjgsIAorICAgIDMwNjczLCAzMDY3OCwgMzA2ODQsIDMwNjg5LCAzMDY5NCwgMzA2OTgsIDMwNzAzLCAzMDcwOCwgMzA3MTQsIDMwNzE5LCAKKyAgICAzMDcyNCwgMzA3MjgsIDMwNzMzLCAzMDczOCwgMzA3NDIsIDMwNzQ3LCAzMDc1MiwgMzA3NTcsIDMwNzYxLCAzMDc2NiwgCisgICAgMzA3NzEsIDMwNzc2LCAzMDc4MCwgMzA3ODQsIDE1MjkzLCAzMDc4OCwgMzA3OTcsIDMwODAzLCAzMDgwOSwgMzA4MTgsIAorICAgIDMwODI2LCAzMDgzNSwgMzA4NDMsIDMwODQ4LCAzMDg1MiwgMzA4NTksIDMwODY1LCAzMDg2OSwgMzA4NzIsIDMwODc3LCAKKyAgICAzMDg4NiwgMzA4OTQsIDMwODk5LCAxNDk1LCAzMDkwNSwgMzA5MDgsIDMwOTEyLCAyMjQyNCwgMjI0MzAsIDMwOTE4LCAKKyAgICAzMDkyMiwgMzA5MzMsIDMwOTQ0LCAzMDk1NSwgMzA5NjcsIDMwOTc0LCAzMDk4MSwgMzA5ODYsIDMwOTkwLCA1OTA5LCA3NTUsIAorICAgIDIxMjc5LCAzMDk5OCwgMzEwMDMsIDMxMDA3LCAzMTAxMiwgMzEwMTYsIDMxMDIyLCAzMTAyNywgMzEwMzMsIDMxMDM4LCAKKyAgICAzMTA0NCwgMzEwNDksIDMxMDU1LCAzMTA2MCwgMzEwNjYsIDMxMDcyLCAzMTA3OCwgMzEwODMsIDMxMDM5LCAzMTA0NSwgCisgICAgMzEwODcsIDMxMDkyLCAzMTA5OCwgMzExMDMsIDMxMTA5LCAzMTExNCwgMzExMjAsIDMxMTI1LCAzMTA1MCwgMTA0MjEsIAorICAgIDMxMTI5LCAzMTA2MSwgMzEwNjcsIDMxMDczLCAyODMxLCAzNDIzLCAzMTEzNSwgMzExMzgsIDMxMTQ0LCAzMTE1MCwgCisgICAgMzExNTYsIDMxMTYzLCAzMTE2OSwgMzExNzUsIDMxMTgxLCAzMTE4NywgMzExOTMsIDMxMTk5LCAzMTIwNSwgMzEyMTEsIAorICAgIDMxMjE3LCAzMTIyMywgMzEyMjksIDMxMjM1LCAzMTI0MiwgMzEyNDgsIDMxMjU0LCAzMTI2MCwgMzEyNjYsIDMxMjcyLCAKKyAgICAzMTI3NSwgMzEyODAsIDMxMjgzLCAzMTI5MCwgMzEyOTgsIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNCwgCisgICAgMzEzMjgsIDMxMzMzLCAzMTMzOSwgMzEzNDQsIDMxMzUwLCAzMTM1NSwgMzEzNjEsIDMxMzY2LCAzMTM3MiwgMzEzNzgsIAorICAgIDMxMzgyLCAzMTM4NywgMzEzOTIsIDMxMzk3LCAzMTQwMiwgMzE0MDYsIDMxNDExLCAzMTQxNiwgMzE0MjEsIDMxNDI3LCAKKyAgICAzMTQzMywgMzE0MzksIDMxNDQ1LCAzMTQ1MCwgMzE0NTQsIDMxNDU3LCAzMTQ2MywgMzE0NjksIDMxNDc4LCAzMTQ4NiwgCisgICAgMzE0OTMsIDMxNDk4LCAzMTUwMiwgMzE1MDYsIDMxNTExLCAxNTE0NiwgMzE1MTYsIDMxNTI0LCAzMTUzMCwgMzY4MywgCisgICAgMTM3NywgMzE1MzUsIDMxNTM5LCA4MDA1LCAzMTU0NSwgMzE1NTEsIDMxNTU4LCA4MDE0LCAzMTU2MiwgMzE1NjgsIDMxNTc1LCAKKyAgICAzMTU4MSwgMzE1OTAsIDMxNTk4LCAzMTYxMCwgMzE2MTQsIDMxNjIxLCAzMTYyNywgMzE2MzEsIDMxNjM0LCAzMTY0MywgCisgICAgMzE2NTEsIDMxMDQwLCAzMTY1NiwgMzE2NjYsIDMxNjc2LCAzMTY4NiwgMzE2OTIsIDMxNjk3LCAzMTcwNywgMzE3MTIsIAorICAgIDMxNzI1LCAzMTczOSwgMzE3NTAsIDMxNzYyLCAzMTc3NCwgMzE3ODgsIDMxODAxLCAzMTgxMywgMzE4MjUsIDE0NjAwLCAKKyAgICAzMTgzOSwgMzE4NDQsIDMxODQ5LCAzMTg1MywgMzE4NTcsIDMxODYxLCAxNzgwLCAyNzE3NiwgMzE4NjUsIDMxODcwLCAKKyAgICAzMTA4OCwgMzE4NzUsIDMxODc4LCAzMTg4MywgMzE4ODgsIDMxODkzLCAzMTg5OSwgMzE5MDUsIDEwMDk4LCAzMTkxMCwgCisgICAgMzE5MTcsIDE1Njk3LCAzMTkyMywgMzE5MjgsIDMxOTMzLCAzMTkzNywgMzE5NDIsIDMxOTQ3LCAzMTA5MywgMzE5NTIsIAorICAgIDMxOTU3LCAzMTk2MiwgMzE5NjgsIDMxMDk5LCAzMTk3MywgMzE5NzYsIDMxOTgzLCAzMTk5MSwgMzE5OTcsIDMyMDAzLCAKKyAgICAzMjAwOSwgMzIwMjAsIDMyMDI1LCAzMjAzMiwgMzIwMzksIDMyMDQ2LCAzMjA1NCwgMzIwNjMsIDMyMDcyLCAzMjA3OCwgCisgICAgMzIwODQsIDMyMDkyLCAzMTEwNCwgMzIwOTcsIDMyMTAzLCAzMjEwOSwgMzExMTAsIDMyMTE0LCAzMjExOSwgMzIxMjcsIAorICAgIDMyMTM1LCAzMjE0MSwgMzIxNDgsIDMyMTU0LCAzMjE2MSwgMzIxNjgsIDMyMTc0LCAzMjE4MiwgMzIxOTIsIDMyMTk5LCAKKyAgICAzMjIwNCwgMzIyMTAsIDMyMjE1LCAzMjIyMCwgMzIyMjcsIDMyMjM2LCAzMjI0NCwgMzIyNDksIDMyMjU1LCAzMjI2MiwgCisgICAgMzIyNzAsIDMyMjc2LCAzMjI4MSwgMzIyODcsIDMyMjk2LCAyNzk1NywgMzIzMDMsIDMyMzA3LCAzMjMxMiwgMzIzMjEsIAorICAgIDMyMzI2LCAzMjMzMSwgMzIzMzYsIDEyNDA1LCAzMjM0NCwgMzIzNDksIDMyMzU0LCAzMjM1OSwgMzIzNjMsIDMyMzY4LCAKKyAgICAzMjM3MywgMzIzODAsIDMyMzg1LCAzMjM5MCwgMzIzOTUsIDMxMTE1LCAyMTIxNiwgMzI0MDEsIDI1MTksIDI0NCwgMzI0MDQsIAorICAgIDMyNDA3LCAzMjQxMSwgMzI0MTUsIDMyNDI1LCAzMjQzMywgMzI0MzcsIDMyNDQ0LCAzMjQ1MSwgMzI0NTUsIDMyNDU4LCAKKyAgICAzMjQ2NCwgMzI0NzIsIDMyNDgwLCAzMjQ4NCwgMzI0ODgsIDMyNDkxLCAzMjQ5OCwgMzI1MDIsIDMyNTA2LCAzMjUxMywgCisgICAgMzI1MjEsIDMxMDUxLCAzMjUyOCwgMzI1MzYsIDEwMTU4LCA2NjQsIDMwOCwgMzI1NDgsIDMyNTUzLCAzMjU1OCwgMzI1NjQsIAorICAgIDMyNTY5LCAzMjU3NCwgMzcwNCwgMzI1NzksIDMyNTgyLCAzMjU4NywgMzI1OTIsIDMyNTk3LCAzMjYwMiwgMzI2MDcsIAorICAgIDMyNjE0LCAyMjUyOSwgMzI2MTksIDMyNjI0LCAzMjYyOSwgMzI2MzQsIDMyNjM5LCAzMjY0NSwgMzI2NTAsIDMyNjU2LCAKKyAgICAzMTI4NiwgMzI2NjIsIDMyNjY3LCAzMjY3MywgMzI2NzksIDMyNjg5LCAzMjY5NCwgMzI2OTksIDMyNzAzLCAzMjcwOCwgCisgICAgMzI3MTMsIDMyNzE4LCAzMjcyMywgMzI3MzYsIDMyNzQxLCAyMjMwMiwgMTY3MDUsIDM3MTAsIDMyNzQ1LCAzMjc1MCwgCisgICAgMzI3NTUsIDMyNzYxLCAzMjc2NiwgMzI3NzEsIDMyNzc1LCAzMjc4MCwgMzI3ODUsIDMyNzkxLCAzMjc5NiwgMzI4MDEsIAorICAgIDEzODIsIDMyODA1LCAzMjgxMCwgMzI4MTUsIDMyODIwLCAzMjgyNCwgMzI4MjksIDMyODM0LCAzMjgzOSwgMzI4NDUsIAorICAgIDMyODUxLCAzMjg1NiwgMzI4NjAsIDMyODY0LCAzMjg2OSwgMzI4NzQsIDMyODc5LCAzMjg4MywgMzI4OTEsIDMyODk1LCAKKyAgICAzMjkwMSwgMzI5MDUsIDMyOTEyLCAxNjQ5OCwgMzEwNjIsIDMyOTE4LCAzMjkyNSwgMzI5MzMsIDMyOTQwLCAzMjk0NiwgCisgICAgMzI5NTksIDMyOTcxLCAzMjk3NywgMzI5ODEsIDI3NzMsIDMyOTg1LCAzMjk4OSwgMzI0OTMsIDMyOTk4LCAzMzAwOSwgCisgICAgMzMwMTQsIDMzMDE5LCAzMzAyNCwgMzMwMjgsIDMzMDMzLCAyMjQzNSwgMzMwMzcsIDMzMDQxLCAzMzA0NiwgMzEwNjgsIAorICAgIDIxMzAwLCAzMzA1MCwgMzMwNTUsIDMzMDYxLCAzMzA2NiwgMzMwNzAsIDMzMDc0LCAzMzA3NywgMzMwODEsIDMzMDg3LCAKKyAgICAzMzA5OCwgMzMxMTAsIDMxMDc0LCAzMzExNSwgMzMxMTgsIDMzMTIyLCAzNDcsIDMzMTI3LCAzMzEzMiwgMzMxMzcsIAorICAgIDMzMTQyLCAzMzE0NywgMzMxNTIsIDMzMTU4LCAzMzE2MywgMzMxNjgsIDMzMTc0LCAzMzE3OSwgMzMxODUsIDMzMTkwLCAKKyAgICAzMzE5NiwgMzMyMDEsIDMzMjA2LCAzMzIxMSwgMzMyMTYsIDMzMjIxLCAzMzIyNiwgMzMyMzEsIDMzMjM2LCAzMzI0MiwgCisgICAgMzMyNDcsIDMzMjUyLCAzMzI1NywgMzMyNjIsIDMzMjY3LCAzMzI3MiwgMzMyNzcsIDMzMjgzLCAzMzI4OSwgMzMyOTQsIAorICAgIDMzMjk5LCAzMzMwNCwgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAKKyAgICAzMzM0OSwgMzMzNTQsIDMzMzU5LCAzMzM2NCwgMzMzNjksIDMzMzc0LCAzMzM3OSwgMzMzODUsIDMxMywgMjYsIDMzMzkwLCAKKyAgICAzMzM5NCwgMzMzOTgsIDMzNDA2LCAzMzQxMCwgMzM0MTQsIDMzNDE3LCAzMzQyMCwgMzM0MjIsIDMzNDI3LCAzMzQzMSwgCisgICAgMzM0MzYsIDMzNDQwLCAzMzQ0NSwgMzM0NDksIDMzNDU0LCAzMzQ1OCwgMzM0NjEsIDMzNDYzLCAzMzQ2NywgMzM0NzIsIAorICAgIDMzNDc2LCAzMzQ4NywgMzM0OTAsIDMzNDkyLCAzMzQ5NiwgMzM1MDgsIDMzNTE3LCAzMzUyMSwgMzM1MjUsIDMzNTMxLCAKKyAgICAzMzUzNiwgMzM1NDUsIDMzNTUxLCAzMzU1NiwgMzM1NjEsIDMzNTY1LCAzMzU3MCwgMzM1NzcsIDMzNTgyLCAzMzU4OCwgCisgICAgMzM1OTMsIDMzNTk3LCAzMzYwNCwgMjU3MTgsIDI1NzI4LCAzMzYwOCwgMzM2MTMsIDMzNjE4LCAzMzYyMywgMzM2MzAsIAorICAgIDMzNjM0LCAzMzY0MSwgODExMywgMzM2NDcsIDMzNjU2LCAzMzY2NCwgMzM2NzksIDMzNjkzLCAzMzcwMSwgMzM3MTIsIAorICAgIDMzNzIxLCAzMzcyNiwgNzIyNywgMzM3MzYsIDMzNzQxLCAzMzc0NiwgMzM3NTAsIDMzNzUzLCAzMzc1NywgMzM3NjIsIAorICAgIDMzNzY2LCAzMzc3MywgMzM3NzgsIDMzNzgzLCA4OTEyLCAzMzc5MywgMzM3OTUsIDMzNzk4LCAzMzgwMiwgMzM4MDgsIAorICAgIDMzODEyLCAzMzgxNywgMzM4MjIsIDMzODI4LCAzMzgzMywgMzM4MzksIDMzODQ0LCAzMzg1NCwgMzM4NjMsIDMzODcxLCAKKyAgICAzMzg3NiwgMzM4ODIsIDMzODg3LCAzMzg5NCwgMzM4OTgsIDMzOTA2LCAzMzkxMywgMzM5MjYsIDMzOTM0LCAzMzkzOCwgCisgICAgMzM5NDgsIDMzOTUzLCAzMzk1NywgMzM5NjUsIDMzOTczLCAzMzk3NywgMzM5ODYsIDMzOTkyLCAzMzk5NywgMzQwMDUsIAorICAgIDM0MDE1LCAzNDAyNCwgMzQwMzMsIDM0MDQyLCAzNDA1MywgMzQwNjEsIDM0MDcyLCAzNDA4MSwgMzQwODgsIDM0MDk0LCAKKyAgICAzNDA5OSwgMzQxMTAsIDM0MTE1LCAzNDExOSwgMzQxMjIsIDM0MTI2LCAzNDEzNCwgMzQxNDAsIDM0MTQ4LCAzNDE1NSwgCisgICAgMzQxNjEsIDM0MTY2LCAzNDE3MiwgMjQxOCwgMzQxNzYsIDM0MTc4LCAzNDE4MywgMzQxODgsIDM0MTkzLCAzNDE5NiwgCisgICAgMzQxOTgsIDM0MjAyLCAzNDIwNSwgMzQyMTIsIDM0MjE2LCA5ODkxLCAzNDIyMCwgMzQyMjYsIDM0MjM2LCAzNDI0MSwgCisgICAgMzQyNDcsIDM0MjUxLCAzNDI1NiwgMzQyNjksIDI2MTA0LCAzNDI3NSwgMzQyODQsIDE3NDc1LCAzNDI5MSwgMzQzMDAsIAorICAgIDMxNjcyLCAzNDMwOCwgMzQzMTMsIDM0MzE3LCAzNDMyNSwgMzQzMzIsIDM0MzM3LCAzNDM0MSwgMzQzNDYsIDM0MzUwLCAKKyAgICAzNDM1OCwgMzQzNjQsIDM0MzcwLCAzNDM3NSwgMzQzNzksIDM0MzgyLCAzNDM4NywgMzQ0MDAsIDM0NDE2LCAyMjk5NiwgCisgICAgMzQ0MzMsIDM0NDQ1LCAzNDQ2MiwgMzQ0NzQsIDM0NDg4LCAyMzAxMywgMjMwMzIsIDM0NTAwLCAzNDUxMiwgMjY4MCwgCisgICAgMzQ1MjYsIDM0NTMxLCAzNDUzNiwgMzQ1NDEsIDM0NTQ1LCAzNDU1MiwgMzQ1NjQsIDM0NTcwLCAzNDU3MywgMzQ1ODQsIAorICAgIDM0NTk1LCAzNDYwMCwgMzIwODksIDY5NSwgMzQ2MDQsIDM0NjA4LCAzNDYxMiwgMzQ2MTUsIDM0NjIwLCAzNDYyNSwgCisgICAgMzQ2MzEsIDM0NjM2LCAzNDY0MSwgMzQ2NDcsIDM0NjUzLCAzNDY1OCwgMzQ2NjIsIDM0NjY3LCAzNDY3MiwgMzQ2NzcsIAorICAgIDM0NjgxLCAzNDY4NCwgMzQ2OTAsIDM0Njk1LCAzNDcwMCwgMzQ3MDUsIDM0NzA5LCAzNDcxNCwgMzQ3MjAsIDM0NzI4LCAKKyAgICAyNjMzNywgMzQ3MzMsIDM0NzM4LCAzNDc0NSwgMzQ3NTEsIDM0NzU3LCAzNDc2MiwgMzQ3NzAsIDIyNTM4LCAzNDc3NywgCisgICAgMzQ3ODIsIDM0Nzg3LCAzNDc5MiwgMzQ3OTYsIDM0Nzk5LCAzNDgwNCwgMzQ4MDgsIDM0ODEyLCAzNDgxOSwgMzQ4MjUsIAorICAgIDM0ODMxLCAzNDgzNywgMzQ4NDQsIDM0ODQ5LCAzNDg1NSwgMzM5NjgsIDM0ODU5LCAzNDg2MywgMzQ4NjgsIDM0ODgxLCAKKyAgICAzNDg4NiwgMzQ4OTIsIDM0OTAwLCAzNDkwNywgMzQ5MTUsIDM0OTI1LCAzNDkzMSwgMzQ5MzcsIDM0OTQzLCAzNDk0NywgCisgICAgMzQ5NTYsIDM0OTY0LCAzNDk3MSwgMzQ5NzYsIDM0OTgxLCAxMDQ0NCwgMzQ5ODYsIDM0OTk0LCAzNTAwMSwgMzUwMDcsIAorICAgIDM1MDE3LCAzNTAyMiwgMzUwMjgsIDM1MDM2LCAzNjA4LCAzNTA0MywgMzUwNTAsIDM2MTQsIDM1MDU0LCAzNTA1OSwgCisgICAgMzUwNzAsIDM1MDc3LCAzNTA4MywgMzUwOTIsIDM1MDk2LCA0MDE1LCAzNTA5OSwgMzUxMDYsIDM1MTEyLCAzNTExOCwgCisgICAgMzUxMjYsIDM1MTM2LCAyOTA2MywgMzUxNDMsIDM1MTUxLCAzNTE1NiwgMzUxNjIsIDM1MTY3LCAyNTk2NCwgMzUxNzMsIAorICAgIDM1MTgwLCAzNTE4NiwgMzUxOTUsIDIzNjc3LCAzNTIwMiwgMzUyMDcsIDM1MjExLCAzNTIxOSwgMzUyMjcsIDk2MDcsIAorICAgIDU4OTUsIDM1MjM0LCAzNTIzOCwgMzUyNDAsIDM1MjQ0LCAzNTI0OSwgMzUyNTEsIDM1MjU3LCAzNTI2MiwgMzUyNjcsIAorICAgIDM1Mjc0LCAzMjYxMCwgMzUyODAsIDM1Mjg1LCAzNTI4OSwgMzUyOTQsIDM1Mjk4LCAzNTMwNywgMzUzMTEsIDM1MzE3LCAKKyAgICAzNTMyNCwgMzUzMzAsIDM1MzM3LCAzNTM0MiwgMzUzNTEsIDM1MzU2LCAzNTM2MCwgMzUzNjUsIDM1MzcyLCAzNTM4MCwgCisgICAgMzUzODgsIDM1MzkzLCAyMTM1NiwgMzUzOTcsIDM1NDAwLCAzNTQwNCwgMzU0MDgsIDM1NDEyLCAzNTQxNSwgMzU0MTcsIAorICAgIDM1NDI1LCAzNTQyOSwgMzU0MzYsIDM1NDQwLCAzNTQ0NCwgMzU0NTIsIDM1NDU5LCAzNTQ2OSwgMzU0NzMsIDM1NDc3LCAKKyAgICAzNTQ4NSwgMzU0OTMsIDM1NDk5LCAzNTUwNCwgMzU1MTMsIDEzMzU3LCAzNTUxOSwgMzU1MjgsIDM1NTMzLCAzNTU0MCwgCisgICAgMzU1NDgsIDM1NTU2LCAzNTU2NCwgMzU1NzEsIDM1NTc4LCAzNTU4NSwgMzU1OTIsIDM1NTk5LCAzNTYwNCwgMzU2MTAsIAorICAgIDM1NjI3LCAzNTYzNSwgMzU2NDUsIDM1NjUzLCAzNTY2MCwgNDA3LCAzNTY2NCwgMzU2NzAsIDM1Njc0LCAzNTY3OSwgCisgICAgMzM3MTcsIDM1Njg1LCAzNTY4OCwgMzU2OTIsIDM1NzAwLCAzNjE5LCAzNTcwOCwgMzU3MTQsIDM1NzIwLCAzNTcyOSwgCisgICAgMzU3MzksIDM1NzQ2LCAzNTc1MiwgMzYyNSwgMzYzMSwgMzU3NjEsIDM1NzY4LCAzNTc3NiwgMzU3ODEsIDM1Nzg1LCAKKyAgICAzNTc5MiwgMzU4MDAsIDM1ODA3LCAzNTgxMywgMzU4MjIsIDM1ODMyLCAzNTgzOCwgMzU4NDYsIDM1ODU1LCAzNTg2MiwgCisgICAgMzU4NzAsIDM1ODc3LCAyMjAzMiwgMzU4ODEsIDM1ODg4LCAzNTg5NCwgMzU5MDQsIDM1OTEzLCAzNTkyNCwgMzU5MjgsIAorICAgIDM1OTM4LCAzNTk0NCwgMzU5NTEsIDM1OTU5LCAzNTk2OCwgMzU5NzcsIDM1OTg3LCAzNTk5OCwgMzYwMDUsIDM2MDEwLCAKKyAgICAzNjAxNywgMzAyOSwgMzYwMjUsIDM2MDMxLCAzNjAzNiwgMzYwNDIsIDM2MDQ4LCAzNjA1MywgMzYwNjYsIDM2MDc5LCAKKyAgICAzNjA5MiwgMzYwOTksIDM2MTA1LCAzNjExMywgMzYxMjEsIDM2MTI2LCAzNjEzMCwgMTQ2OSwgMzYxMzQsIDM2MTM5LCAKKyAgICAzNjE0NCwgMzYxNDksIDM2MTU0LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NSwgMzYxODAsIDM2MTg1LCAzNjE5MCwgCisgICAgMzYxOTUsIDM2MjAxLCAzNjIwNywgMzYyMTIsIDM2MjE3LCAzNjIyMywgMzYyMjgsIDM2MjMzLCAzNjIzOCwgMzYyNDQsIAorICAgIDM2MjQ5LCAzNjI1NCwgMzYyNTksIDM2MjY0LCAzNjI3MCwgMzYyNzUsIDM2MjgwLCAzNjI4NiwgMzYyOTEsIDM2Mjk2LCAKKyAgICAzNjMwMSwgMzYzMDYsIDM2MzExLCAzNjMxNywgMzYzMjIsIDM2MzI4LCAzNjMzMywgMzYzMzksIDM2MzQ0LCAzNjM0OSwgCisgICAgMzYzNTQsIDM2MzYwLCAzNjM2NiwgMzYzNzIsIDM2Mzc4LCAzNjM4NCwgMzYzOTAsIDM2Mzk2LCAzNjQwMiwgMzY0MDcsIAorICAgIDM2NDEyLCAzNjQxOCwgMzY0MjMsIDM2NDI4LCAzNjQzMywgMzY0MzgsIDM2NDQzLCAzNjQ0OCwgMzY0NTMsIDM2NDU5LCAKKyAgICAzNjQ2NCwgMzY0NjksIDM2NDc1LCAzNjQ4MSwgMTAxLCAzNjQ4NiwgMzY0ODgsIDM2NDkyLCAzNjQ5NiwgMzY1MDAsIAorICAgIDM2NTA1LCAzNjUwOSwgOTUyOCwgMzY1MTMsIDM2NTE5LCAxNzQxLCA2MjgwLCAzNjUyNSwgMzY1MjgsIDM2NTMzLCAzNjUzNywgCisgICAgMzY1NDIsIDM2NTQ2LCAzNjU1MCwgMzY1NTUsIDEwMjQ1LCAzNjU1OSwgMzY1NjMsIDM2NTY3LCAzNjU3MSwgMTUzODUsIAorICAgIDM2NTc2LCAzNjU4MCwgMzY1ODUsIDM2NTkwLCAzNjU5NSwgMzY1OTksIDM2NjA2LCAyNjEyOCwgMzY2MTIsIDM2NjE1LCAKKyAgICAzNjYxOSwgMzY2MjQsIDM2NjMwLCAzNjYzNCwgMzY2NDIsIDM2NjQ4LCAzNjY1MywgMzY2NTcsIDM2NjYzLCAzNjY2NywgCisgICAgMzY2NzEsIDM0NjIsIDM0NjcsIDI5MjU1LCAzNjY3NCwgMzY2NzgsIDM2NjgyLCAzNjY4NiwgMzY2OTAsIDM2Njk4LCAKKyAgICAzNjcwNSwgMzY3MDksIDM2NzE2LCAzNjcyMSwgMzE3LCAzNjcyNiwgMzY3MzAsIDM2NzM2LCAzNjc0OCwgMzY3NTQsIAorICAgIDM2NzYwLCAzNjc2NCwgMzY3NzAsIDM2Nzc5LCAzNjc4MywgMzY3ODcsIDM2NzkyLCAzNjc5OCwgMzY4MDMsIDM2ODA3LCAKKyAgICAzNjgxMiwgMzY4MTYsIDM2ODIwLCAzNjgyNywgMzY4MzMsIDM2ODM4LCAzNjg1MywgMzY4NjgsIDM2ODgzLCAzNjg5OSwgCisgICAgMzY5MTcsIDEwMTk1LCAzNjkzMSwgMzY5MzgsIDM2OTQyLCAzNjk0NSwgMzY5NTQsIDM2OTU5LCAzNjk2MywgMzY5NzEsIAorICAgIDMzOTE5LCAzNjk3OSwgMzY5ODMsIDM2OTkzLCAzNzAwNCwgMjkyMjUsIDM3MDE3LCAzNzAyMSwgMzcwMzAsIDM3MDM4LCAKKyAgICA5Nzg1LCAxNDkxMywgMzcwNDIsIDIyNDQ3LCAzNzA0NSwgMzAxNzMsIDM3MDUwLCA5Nzg0LCAzNzA1NSwgMzcwNjEsIAorICAgIDM3MDY2LCAzNzA3MiwgMzcwNzcsIDM3MDgzLCAzNzA4OCwgMzcwOTQsIDM3MDk5LCAzNzEwNSwgMzcxMTEsIDM3MTE3LCAKKyAgICAzNzEyMiwgMzcwNzgsIDM3MDg0LCAzNzA4OSwgMzcwOTUsIDM3MTAwLCAzNzEwNiwgMzcxMTIsIDgxMjYsIDM4NzQsIAorICAgIDM3MTI2LCAzNzEzNCwgMzcxMzgsIDM3MTQxLCAzNzE0NSwgMzcxNTAsIDM3MTU1LCAzNzE2MSwgMzcxNjcsIDM3MTcyLCAKKyAgICAzNzE3NiwgMjU5NzYsIDM3MTgwLCAzNzE4NCwgMzcxOTAsIDM3MTk0LCA5MDQ5LCAzNzIwMywgMzcyMTAsIDM3MjE0LCAKKyAgICAxMTg3NSwgMzcyMjEsIDM3MjI3LCAzNzIzMiwgMzcyMzksIDM3MjQ2LCAzNzI1MywgMjg1NzEsIDgwNDksIDM3MjYwLCAKKyAgICAzNzI2NywgMzcyNzQsIDM3MjgwLCAzNzI4NSwgMzcyOTIsIDM3MzAzLCAzNzMwOSwgMzczMTQsIDM3MzE5LCAzNzMyNCwgCisgICAgMzczMzEsIDM3MDc5LCAzNzMzNSwgMzczNDUsIDM3MzU2LCAzNzM2MiwgMzczNjcsIDM3MzcyLCAzNzM3NywgMzczODIsIAorICAgIDM3Mzg3LCAzNzM5MSwgMzczOTUsIDM3NDAxLCAzNzQwOSwgMjMxOSwgODY1LCAxMDI2MSwgMTAyNzMsIDEwMjc4LCAxMDI4NCwgCisgICAgMzc0MTgsIDEwMjg5LCAxMDI5NCwgMTAzMDAsIDM3NDIzLCAzNzQzMywgMzc0MzcsIDEwMzA1LCAzNzQ0MiwgMTY5MDMsIAorICAgIDM3NDQ1LCAzNzQ1MCwgMzc0NTQsIDM3NDU5LCAzNzQ2NCwgMzc0NzEsIDM3NDc4LCAzNzQ4MiwgMzc0ODUsIDM3NDkzLCAKKyAgICAxMDIwOCwgMzc1MDAsIDM3NTAzLCAzNzUwOSwgMzc1MTksIDU5MjksIDM3NTI4LCAzNzUzMiwgMzc1NDAsIDM3NTQ0LCAKKyAgICAzNzU1NCwgMzc1NjAsIDM3NTcxLCAzNzU3NywgMzc1ODMsIDM3NTg4LCAzNzU5NCwgMzc2MDAsIDM3NjA2LCAzNzYxMSwgCisgICAgMzc2MTQsIDM3NjIxLCAzNzYyNywgMzc2MzIsIDM3NjM5LCAzNzY0NiwgMzc2NTAsIDM3NjYwLCAzNzY3MywgMzc2ODIsIAorICAgIDM3NjkxLCAzNzcwMiwgMzc3MTUsIDM3NzI2LCAzNzczNSwgMzc3NDYsIDM3NzUxLCAzNzc2MCwgMzc3NjUsIDEwMzEwLCAKKyAgICAzNzc3MSwgMzc3NzgsIDM3Nzg2LCAzNzc5MSwgMzc3OTUsIDM3ODAyLCAzNzgwOSwgMzgyOSwgMTYsIDM3ODEzLCAzNzgxOCwgCisgICAgMTY3NTcsIDM3ODIyLCAzNzgyNSwgMzc4MjgsIDI4MDc3LCAzNzgzMiwgMjg1ODAsIDM3ODQwLCAzNzg0NCwgMzc4NDgsIAorICAgIDM3ODUxLCAzNzg1NywgMzcxMDEsIDM3ODYzLCAzNzg3MSwgMzc4NzcsIDM3ODg0LCAyODA2MCwgMzc4ODgsIDI4MjU0LCAKKyAgICAzNzg5MiwgMzc5MDEsIDM3OTA3LCAzNzkxMywgMzc5MTgsIDM3OTIyLCAzNzkyOCwgMzc5MzIsIDM3OTQwLCAzNzk0OCwgCisgICAgMjYxOTQsIDM3OTU0LCAzNzk2MSwgMzc5NjcsIDM3OTcyLCAzNzk3NywgMzc5ODEsIDM3OTg3LCAzNzk5MiwgMzc5OTgsIAorICAgIDQwNTYsIDc5MSwgMzgwMDUsIDM4MDA5LCAzODAxMiwgMTUyNzUsIDM4MDI0LCAzNTg1MSwgMzgwMzUsIDM4MDM4LCAzODA0NSwgCisgICAgMzgwNDksIDM4MDU1LCAzODA1OSwgMzgwNjUsIDM4MDcwLCAzODA3NiwgMzgwODEsIDM4MDg2LCAzODA5MCwgMzgwOTQsIAorICAgIDM4MDk5LCAzODEwNCwgMzgxMTQsIDM4MTIwLCAzODEzMywgMzgxMzksIDM4MTQ1LCAzODE1MiwgMzgxNTcsIDM4MTYzLCAKKyAgICAzODE2OCwgMTY2NDMsIDE0NzIsIDEwMTksIDMxMjE4LCAzMTIyNCwgMzgxNzMsIDMxMjMwLCAzMTI0MywgMzEyNDksIAorICAgIDMxMjU1LCAzODE3OSwgMzEyNjEsIDMxMjY3LCAzODE4NSwgMzgxOTEsIDIyLCAzODE5OSwgMzgyMDYsIDM4MjEwLCAzODIxNCwgCisgICAgMzgyMjIsIDMxOTc4LCAzODIyNiwgMzgyMzAsIDM4MjM3LCAzODI0MiwgMzgyNDYsIDM4MjUxLCAzODI1NywgMzgyNjIsIAorICAgIDM4MjY4LCAzODI3MywgMzgyNzcsIDM4MjgxLCAzODI4NSwgMzgyOTAsIDM4Mjk0LCAzODI5OSwgMzgzMDMsIDM4MzEwLCAKKyAgICAzODMxNSwgMzgzMTksIDM4MzI0LCAzODMyOCwgMzgzMzMsIDM4MzM3LCAzODM0MiwgMzgzNDgsIDE1NDk1LCAxNTUwMCwgCisgICAgMzgzNTMsIDM4MzU3LCAzODM2MCwgMzgzNjQsIDIxMTgzLCAzODM2OSwgMzgzNzMsIDM4Mzc5LCAzODM4NiwgMzgzOTEsIAorICAgIDM4NDAxLCAzODQwNiwgMzg0MTQsIDM4NDE4LCAzODQyMSwgMzE5OTMsIDM4NDI1LCA0MTA5LCAzODQzMCwgMzg0MzUsIAorICAgIDM4NDM5LCAzODQ0NCwgMzg0NDgsIDM4NDUzLCAxMzM3NSwgMzg0NjQsIDM4NDY4LCAzODQ3MSwgMzg0NzYsIDM4NDgwLCAKKyAgICAzODQ4NCwgMzg0ODcsIDM4NDkxLCA4MTQ1LCAxMzM5MSwgMzg0OTQsIDM4NDk3LCAzODUwMywgMzg1MDgsIDM4NTE0LCAKKyAgICAzODUxOSwgMzg1MjUsIDM4NTMwLCAzODUzNiwgMzg1NDEsIDM4NTQ3LCAzODU1MywgMzg1NTksIDM4NTY0LCAzODU2OCwgCisgICAgMzg1NzIsIDM4NTgxLCAzODU5NywgMzg2MTMsIDM4NjIzLCAyNzk2NywgMzg2MzAsIDM4NjM0LCAzODYzOSwgMzg2NDQsIAorICAgIDM4NjQ4LCAzODY1MiwgMzU5NzIsIDM4NjU4LCAzODY2MywgMzg2NjcsIDM4Njc0LCAzODY3OSwgMzg2ODMsIDM4Njg3LCAKKyAgICAyNjk5NiwgMzg2OTMsIDIxNDUxLCAzODY5OCwgMzg3MDUsIDM4NzEzLCAzODcxOSwgMzg3MjYsIDM4NzM0LCAzODc0MCwgCisgICAgMzg3NDQsIDM4NzUwLCAzODc1OCwgMzg3NjIsIDM4NzcxLCA5NTA5LCAzODc3OSwgMzg3ODMsIDM4NzkxLCAzODc5OCwgCisgICAgMzg4MDMsIDM4ODA4LCAzODgxMiwgMzg4MTUsIDM4ODE5LCAzODgyMiwgMzg4MjYsIDM4ODMzLCAzODgzOCwgMzg4NDQsIAorICAgIDI2NDE1LCAzMTI4MSwgMzg4NDgsIDM4ODU1LCAzODg2MSwgMzg4NjcsIDM4ODcyLCAzODg3NSwgMzg4NzcsIDM4ODg0LCAKKyAgICAzODg5MSwgMzg4OTcsIDM4OTAxLCAzODkwNCwgMzg5MDgsIDM4OTEyLCAzODkxNiwgMzg5MjEsIDM4OTI1LCAzODkyOSwgCisgICAgMzg5MzIsIDM4OTM2LCAzODk1MCwgMjMwNjIsIDM4OTY5LCAzODk4MiwgMzg5OTUsIDM5MDA4LCAyMzA4MCwgMzkwMjMsIAorICAgIDEwNDk3LCAzOTAzOCwgMzkwNDQsIDM5MDQ4LCAzOTA1MiwgMzkwNTksIDM5MDY0LCAzOTA2OCwgMzkwNzUsIDM5MDgxLCAKKyAgICAzOTA4NiwgMzkwOTIsIDM5MTAyLCAzOTExNCwgMzkxMjUsIDM5MTMwLCAzOTEzNywgMzkxNDEsIDM5MTQ1LCAzOTE0OCwgCisgICAgMTU4OTEsIDM2NzcsIDM5MTU2LCAxNTUyMiwgMzkxNjksIDM5MTc2LCAzOTE4MCwgMzkxODQsIDM5MTg5LCAzOTE5NCwgCisgICAgMzkyMDAsIDM5MjA0LCAzOTIwOCwgMzkyMTEsIDc3NDIsIDE1NTMzLCAzOTIxNiwgMzkyMjAsIDM5MjI2LCAzOTIzNSwgCisgICAgMzkyNDAsIDM5MjQ3LCAzNTgyOCwgMzkyNTMsIDM5MjU4LCAzOTI2MiwgMzkyNjcsIDM5Mjc0LCAzOTI3OCwgMzkyODEsIAorICAgIDM5Mjg1LCAzOTI5MCwgMTQ1NjUsIDM5Mjk3LCAzOTMwNCwgMTA3NywgMzkzMDgsIDM5MzEzLCAzOTMxOCwgMzkzMjQsIAorICAgIDM5MzI5LCAzOTMzNCwgMzkzMzgsIDM5MzQ4LCAzOTM1MywgMzkzNTksIDM5MzY0LCAzOTM3MCwgMzkzNzUsIDM5MzgxLCAKKyAgICAzOTM5MSwgMzkzOTYsIDM5NDAxLCAzOTQwNSwgNzIyOSwgNzI0MSwgMzk0MTAsIDM5NDEzLCAzOTQyMCwgMzk0MjYsIAorICAgIDM0MDg0LCAzNDA5MSwgMzk0MzUsIDM5NDM5LCAzMjA0MSwgMzk0NDcsIDM5NDU4LCAzOTQ2NiwgMzYwMjAsIDM5NDczLCAKKyAgICAzOTQ3OCwgMzk0ODMsIDM5NDk0LCAzOTUwMSwgMzk1MTIsIDMyMDY1LCAyMTQ1NywgMzk1MjAsIDczNSwgMzk1MjUsIAorICAgIDM5NTMxLCAyODA1MSwgMzk1MzcsIDM5NTQyLCAzOTU1MiwgMzk1NjEsIDM5NTY4LCAzOTU3NCwgMzk1NzgsIDM5NTgxLCAKKyAgICAzOTU4OCwgMzk1OTQsIDM5NjAxLCAzOTYwNywgMzk2MTcsIDM5NjI1LCAzOTYzMSwgMzk2MzcsIDM5NjQyLCAzOTY0NiwgCisgICAgMzk2NTMsIDM5NjU5LCAzOTY2NiwgMzg5MTcsIDUzNSwgMTM4MTgsIDM5NjcyLCAzOTY3NywgMzk2ODAsIDM5Njg2LCAKKyAgICAzOTY5NCwgMTM5NiwgMzk2OTksIDM5NzAzLCAzOTcwOCwgMzk3MTUsIDM5NzIxLCAzOTcyNSwgMzk3MjksIDM5NzM0LCAKKyAgICAzOTc0MywgMzk3NTAsIDM5NzYwLCAzOTc2NiwgMjgwOTUsIDM5NzgzLCAzOTc5MiwgMzk4MDAsIDM5ODA2LCAzOTgxMSwgCisgICAgMzk4MTgsIDM5ODI0LCAzOTgzMiwgMzk4NDEsIDM5ODQ5LCAzOTg1MywgMzk4NTgsIDM5ODY2LCAzMjA3NCwgMzk4NzIsIAorICAgIDM5ODkxLCAxNTgyNCwgMzk5MDUsIDM5OTIxLCAzOTkzNSwgMzk5NDEsIDM5OTQ2LCAzOTk1MSwgMzk5NTYsIDM5OTYyLCAKKyAgICAzMjA4MCwgMzk5NjcsIDM5OTc0LCAzOTk3OSwgMzk5ODMsIDM0NSwgMjkzNiwgMzk5OTAsIDM5OTk1LCA0MDAwMCwgMjczMjIsIAorICAgIDM5ODIxLCA0MDAwNCwgNDAwMDksIDQwMDE3LCA0MDAyMSwgNDAwMjQsIDQwMDMwLCA0MDAzNiwgNDAwNDAsIDI4MTUwLCAKKyAgICA0MDA0MywgNDAwNDgsIDQwMDUyLCA0MDA1NSwgNDAwNjAsIDQwMDY0LCA0MDA2OSwgNDAwNzQsIDQwMDc4LCA0MDA4MywgCisgICAgNDAwODcsIDQwMDkxLCAyMTE3OSwgMjExOTAsIDQwMDk1LCA0MDEwMCwgNDAxMDYsIDI2OTUzLCA0MDExMSwgNDAxMTUsIAorICAgIDIxMjY2LCAxNjA3MiwgNDAxMTgsIDQwMTIzLCA0MDEyOCwgNDAxMzMsIDQwMTM4LCA0MDE0MywgNDAxNDgsIDQwMTUzLCAKKyAgICA0NTAsIDQ5LCAzMTI5OSwgMzEzMDQsIDMxMzA5LCAzMTMxNSwgMzEzMjAsIDMxMzI1LCA0MDE1OCwgMzEzMjksIDQwMTYyLCAKKyAgICA0MDE2NiwgNDAxNzAsIDMxMzM0LCAzMTM0MCwgNDAxODQsIDMxMzUxLCAzMTM1NiwgNDAxOTIsIDQwMTk3LCAzMTM2MiwgCisgICAgNDAyMDIsIDQwMjA3LCA0MDIxMiwgNDAyMTcsIDQwMjIzLCA0MDIyOSwgNDAyMzUsIDMxMzc5LCA0MDI0OCwgNDAyNTQsIAorICAgIDMxMzgzLCA0MDI1OCwgMzEzODgsIDQwMjYzLCAzMTM5MywgMzEzOTgsIDQwMjY2LCA0MDI3MSwgNDAyNzUsIDMwOTQ4LCAKKyAgICA0MDI4MSwgMTM1OTksIDQwMjg4LCA0MDI5MywgMzE0MDMsIDQwMjk3LCA0MDMwMiwgNDAzMDcsIDQwMzEyLCA0MDMxNiwgCisgICAgNDAzMjEsIDQwMzI2LCA0MDMzMiwgNDAzMzcsIDQwMzQyLCA0MDM0OCwgNDAzNTQsIDQwMzU5LCA0MDM2MywgNDAzNjgsIAorICAgIDQwMzczLCA0MDM3OCwgNDAzODIsIDQwMzg3LCA0MDM5MiwgNDAzOTcsIDQwNDAzLCA0MDQwOSwgNDA0MTUsIDQwNDIwLCAKKyAgICA0MDQyNCwgNDA0MjksIDQwNDMzLCAzMTQwNywgMzE0MTIsIDMxNDE3LCA0MDQzNywgNDA0NDEsIDQwNDQ1LCAzMTQyMiwgCisgICAgMzE0MjgsIDMxNDM0LCAzMTQ0NiwgNDA0NTcsIDI2MDEzLCA0MDQ2MSwgNDA0NjUsIDQwNDcwLCA0MDQ3NSwgNDA0ODAsIAorICAgIDQwNDg1LCA0MDQ4OSwgNDA0OTMsIDQwNTAzLCA0MDUwOCwgNDA1MTMsIDQwNTE3LCA0MDUyMSwgNDA1MjQsIDQwNTMyLCAKKyAgICAzMTQ5NCwgNDA1MzcsIDE0NzksIDQwNTQzLCA0MDU1MSwgNDA1NjAsIDQwNTY0LCA0MDU2OCwgNDA1NzYsIDQwNTgyLCAKKyAgICA0MDU5MCwgNDA2MDYsIDQwNjEwLCA0MDYxNCwgNDA2MTksIDQwNjM0LCAzMTUzMSwgMTc0OSwgMTIwNTUsIDQwNjM4LCAKKyAgICAxMzc4LCA0MDY1MCwgNDA2NTEsIDQwNjU5LCA0MDY2NiwgNDA2NzEsIDQwNjc4LCA0MDY4MywgOTM3OSwgMTExOSwgMTAzMzIsIAorICAgIDQwNjkwLCA0MDY5NSwgNDA2OTgsIDQwNzAxLCA0MDcxMCwgMTI4NiwgNDA3MTUsIDM5MDY1LCA0MDcyMiwgNDA3MjcsIAorICAgIDQwNzMxLCAyMjUwMywgMjU1NywgNDA3MzksIDEwNzQxLCA0MDc0OSwgNDA3NTUsIDIzMzcsIDIzNDcsIDQwNzY0LCA0MDc3MywgCisgICAgNDA3ODMsIDQwNzk0LCAzMjkzLCAzNDIzNywgMTAzODQsIDM4MDcsIDE2NjgxLCAxMjkxLCA0MDc5OSwgNDA4MDcsIDQwODE0LCAKKyAgICA0MDgxOSwgNDA4MjMsIDQwODI3LCAyMzg3NSwgMTA0MTEsIDQwODM1LCA0MDg0NCwgNDA4NTMsIDQwODYxLCA0MDg2OCwgCisgICAgNDA4NzksIDQwODg0LCA0MDg5NywgNDA5MTAsIDQwOTIyLCA0MDkzNCwgNDA5NDYsIDQwOTU5LCA0MDk3MCwgNDA5ODEsIAorICAgIDQwOTkxLCA0MDk5OSwgNDEwMDcsIDQxMDE5LCA0MTAzMSwgNDEwNDIsIDQxMDUxLCA0MTA1OSwgNDEwNjYsIDQxMDc4LCAKKyAgICA0MTA4NSwgNDEwOTQsIDQxMTAxLCA0MTExNCwgNDExMTksIDQxMTI5LCA0MTEzNCwgNDExNDAsIDQxMTQ1LCAzNzIxMSwgCisgICAgNDExNDksIDQxMTU2LCA0MTE2MCwgNDExNjcsIDQxMTc1LCAyNTE4LCA0MTE4MiwgNDExOTMsIDQxMjAzLCA0MTIxMiwgCisgICAgNDEyMjAsIDQxMjMwLCA0MTIzOCwgNDEyNDgsIDQxMjU3LCA0MTI2MiwgNDEyNjgsIDQxMjc0LCAzNzA5LCA0MTI4NSwgCisgICAgNDEyOTUsIDQxMzA0LCA0MTMxMywgNDEzMjMsIDQxMzMxLCA0MTM0MCwgNDEzNDUsIDQxMzUwLCA0MTM1NSwgMTcwNSwgMzcsIAorICAgIDQxMzYzLCA0MTM3MSwgNDEzODIsIDQxMzkzLCAxNjM1NiwgNDE0MDMsIDQxNDA3LCA0MTQxNCwgNDE0MjAsIDQxNDI1LCAKKyAgICA0MTQyOSwgNDE0NDAsIDQxNDUwLCA0MTQ1OSwgNDE0NzAsIDE2NzMwLCAxNjczNSwgNDE0NzUsIDQxNDg0LCA0MTQ4OSwgCisgICAgNDE0OTksIDQxNTA0LCA0MTUxMiwgNDE1MjAsIDQxNTI3LCA0MTUzMywgNzA3OCwgMjI4LCA0MTUzNywgNDE1NDMsIDQxNTQ4LCAKKyAgICA0MTU1MSwgMjExNywgMzkxODEsIDQxNTU5LCA0MTU2MywgNDE1NjYsIDE1MTIsIDQxNTcyLCAxMzk4MCwgMTI5NiwgNDE1NzcsIAorICAgIDQxNTkwLCA0MTYwNCwgMjY0MywgNDE2MjIsIDQxNjM0LCA0MTY0NiwgMjY1NywgMjY3NCwgNDE2NjAsIDQxNjczLCAyNjg5LCAKKyAgICA0MTY4NywgNDE2OTksIDI3MDQsIDQxNzEzLCAxMzAyLCAxMzA4LCAxMzE0LCAxMDY1OSwgNDE3MTgsIDQxNzIzLCA0MTcyOCwgCisgICAgNDE3MzIsIDQxNzQ3LCA0MTc2MiwgNDE3NzcsIDQxNzkyLCA0MTgwNywgNDE4MjIsIDQxODM3LCA0MTg1MiwgNDE4NjcsIAorICAgIDQxODgyLCA0MTg5NywgNDE5MTIsIDQxOTI3LCA0MTk0MiwgNDE5NTcsIDQxOTcyLCA0MTk4NywgNDIwMDIsIDQyMDE3LCAKKyAgICA0MjAzMiwgNDIwNDcsIDQyMDYyLCA0MjA3NywgNDIwOTIsIDQyMTA3LCA0MjEyMiwgNDIxMzcsIDQyMTUyLCA0MjE2NywgCisgICAgNDIxODIsIDQyMTk3LCA0MjIxMiwgNDIyMjcsIDQyMjQyLCA0MjI1NywgNDIyNzIsIDQyMjg3LCA0MjMwMiwgNDIzMTcsIAorICAgIDQyMzMyLCA0MjM0NywgNDIzNjIsIDQyMzc3LCA0MjM5MiwgNDI0MDcsIDQyNDIyLCA0MjQzNywgNDI0NTIsIDQyNDY3LCAKKyAgICA0MjQ4MiwgNDI0OTcsIDQyNTEyLCA0MjUyNywgNDI1NDIsIDQyNTU3LCA0MjU3MiwgNDI1ODcsIDQyNjAyLCA0MjYxNywgCisgICAgNDI2MzIsIDQyNjQ3LCA0MjY2MiwgNDI2NzcsIDQyNjkyLCA0MjcwNywgNDI3MjIsIDQyNzM3LCA0Mjc1MiwgNDI3NjcsIAorICAgIDQyNzgyLCA0Mjc5NywgNDI4MTIsIDQyODI3LCA0Mjg0MiwgNDI4NTcsIDQyODcyLCA0Mjg4NywgNDI5MDIsIDQyOTE3LCAKKyAgICA0MjkzMiwgNDI5NDcsIDQyOTYyLCA0Mjk3NywgNDI5OTIsIDQzMDA3LCA0MzAyMiwgNDMwMzcsIDQzMDUyLCA0MzA2NywgCisgICAgNDMwODIsIDQzMDk3LCA0MzExMiwgNDMxMjcsIDQzMTQyLCA0MzE1NywgNDMxNzIsIDQzMTg3LCA0MzIwMiwgNDMyMTcsIAorICAgIDQzMjMyLCA0MzI0NywgNDMyNjIsIDQzMjc3LCA0MzI5MiwgNDMzMDcsIDQzMzIyLCA0MzMzNywgNDMzNTIsIDQzMzY3LCAKKyAgICA0MzM4MiwgNDMzOTcsIDQzNDEyLCA0MzQyNywgNDM0NDIsIDQzNDU3LCA0MzQ3MiwgNDM0ODcsIDQzNTAyLCA0MzUxNywgCisgICAgNDM1MzIsIDQzNTQ3LCA0MzU2MiwgNDM1NzcsIDQzNTkyLCA0MzYwNywgNDM2MjIsIDQzNjM3LCA0MzY1MiwgNDM2NjcsIAorICAgIDQzNjgyLCA0MzY5NywgNDM3MTIsIDQzNzI3LCA0Mzc0MiwgNDM3NTcsIDQzNzcyLCA0Mzc4NywgNDM4MDIsIDQzODE3LCAKKyAgICA0MzgzMiwgNDM4NDcsIDQzODYyLCA0Mzg3NywgNDM4OTIsIDQzOTA3LCA0MzkyMiwgNDM5MzcsIDQzOTUyLCA0Mzk2NywgCisgICAgNDM5ODIsIDQzOTk3LCA0NDAxMiwgNDQwMjcsIDQ0MDQyLCA0NDA1NywgNDQwNzIsIDQ0MDg3LCA0NDEwMiwgNDQxMTcsIAorICAgIDQ0MTMyLCA0NDE0NywgNDQxNjIsIDQ0MTc3LCA0NDE5MiwgNDQyMDcsIDQ0MjIyLCA0NDIzNywgNDQyNTIsIDQ0MjY3LCAKKyAgICA0NDI4MiwgNDQyOTcsIDQ0MzEyLCA0NDMyNywgNDQzNDIsIDQ0MzU3LCA0NDM3MiwgNDQzODcsIDQ0NDAyLCA0NDQxNywgCisgICAgNDQ0MzIsIDQ0NDQ3LCA0NDQ2MiwgNDQ0NzcsIDQ0NDkyLCA0NDUwNywgNDQ1MjIsIDQ0NTM3LCA0NDU1MiwgNDQ1NjcsIAorICAgIDQ0NTgyLCA0NDU5NywgNDQ2MTIsIDQ0NjI3LCA0NDY0MiwgNDQ2NTcsIDQ0NjcyLCA0NDY4NywgNDQ3MDIsIDQ0NzE3LCAKKyAgICA0NDczMiwgNDQ3NDcsIDQ0NzYyLCA0NDc3NywgNDQ3OTIsIDQ0ODA3LCA0NDgyMiwgNDQ4MzcsIDQ0ODUyLCA0NDg2NywgCisgICAgNDQ4ODIsIDQ0ODk3LCA0NDkxMiwgNDQ5MjcsIDQ0OTQyLCA0NDk1NywgNDQ5NzIsIDQ0OTg3LCA0NTAwMiwgNDUwMTcsIAorICAgIDQ1MDMyLCA0NTA0NywgNDUwNjIsIDQ1MDc3LCA0NTA5MiwgNDUxMDcsIDQ1MTIyLCA0NTEzNywgNDUxNTIsIDQ1MTY3LCAKKyAgICA0NTE4MiwgNDUxOTcsIDQ1MjEyLCA0NTIyNywgNDUyNDIsIDQ1MjU3LCA0NTI3MiwgNDUyODcsIDQ1MzAyLCA0NTMxNywgCisgICAgNDUzMzIsIDQ1MzQ3LCA0NTM2MiwgNDUzNzcsIDQ1MzkyLCA0NTQwNywgNDU0MjIsIDQ1NDM3LCA0NTQ1MiwgNDU0NjcsIAorICAgIDQ1NDgyLCA0NTQ5NywgNDU1MTIsIDQ1NTI3LCA0NTU0MiwgNDU1NTcsIDQ1NTcyLCA0NTU4NywgNDU2MDIsIDQ1NjE3LCAKKyAgICA0NTYzMiwgNDU2NDcsIDQ1NjYyLCA0NTY3NywgNDU2OTIsIDQ1NzA3LCA0NTcyMiwgNDU3MzcsIDQ1NzUyLCA0NTc2NywgCisgICAgNDU3ODIsIDQ1Nzk3LCA0NTgxMiwgNDU4MjcsIDQ1ODQyLCA0NTg1NywgNDU4NzIsIDQ1ODg3LCA0NTkwMiwgNDU5MTcsIAorICAgIDQ1OTMyLCA0NTk0NywgNDU5NjIsIDQ1OTc3LCA0NTk5MiwgNDYwMDcsIDQ2MDIyLCA0NjAzNywgNDYwNTIsIDQ2MDY3LCAKKyAgICA0NjA4MiwgNDYwOTcsIDQ2MTEyLCA0NjEyNywgNDYxNDIsIDQ2MTU3LCA0NjE3MiwgNDYxODcsIDQ2MjAyLCA0NjIxNywgCisgICAgNDYyMzIsIDQ2MjQ3LCA0NjI2MiwgNDYyNzcsIDQ2MjkyLCA0NjMwNywgNDYzMjIsIDQ2MzM3LCA0NjM1MiwgNDYzNjcsIAorICAgIDQ2MzgyLCA0NjM5NywgNDY0MTIsIDQ2NDI3LCA0NjQ0MiwgNDY0NTcsIDQ2NDcyLCA0NjQ4NywgNDY1MDIsIDQ2NTE3LCAKKyAgICA0NjUzMiwgNDY1NDcsIDQ2NTYyLCA0NjU3NywgNDY1OTIsIDQ2NjA3LCA0NjYyMiwgNDY2MzcsIDQ2NjUyLCA0NjY2NywgCisgICAgNDY2ODIsIDQ2Njk3LCA0NjcxMiwgNDY3MjcsIDQ2NzQyLCA0Njc1NywgNDY3NzIsIDQ2Nzg3LCA0NjgwMiwgNDY4MTcsIAorICAgIDQ2ODMyLCA0Njg0NywgNDY4NjIsIDQ2ODc3LCA0Njg5MiwgNDY5MDcsIDQ2OTIyLCA0NjkzNywgNDY5NTIsIDQ2OTY3LCAKKyAgICA0Njk4MiwgNDY5OTcsIDQ3MDEyLCA0NzAyNywgNDcwNDIsIDQ3MDU3LCA0NzA3MiwgNDcwODcsIDQ3MTAyLCA0NzExNywgCisgICAgNDcxMzIsIDQ3MTQ3LCA0NzE2MiwgNDcxNzcsIDQ3MTkyLCA0NzIwNywgNDcyMjIsIDQ3MjM3LCA0NzI1MiwgNDcyNjcsIAorICAgIDQ3MjgyLCA0NzI5NywgNDczMTIsIDQ3MzI3LCA0NzM0MiwgNDczNTcsIDQ3MzcyLCA0NzM4NywgNDc0MDIsIDQ3NDE3LCAKKyAgICA0NzQzMiwgNDc0NDcsIDQ3NDYyLCA0NzQ3NywgNDc0OTIsIDQ3NTA3LCA0NzUyMiwgNDc1MzcsIDQ3NTUyLCA0NzU2NywgCisgICAgNDc1ODIsIDQ3NTk3LCA0NzYxMiwgNDc2MjcsIDQ3NjQyLCA0NzY1NywgNDc2NzIsIDQ3Njg3LCA0NzcwMiwgNDc3MTcsIAorICAgIDQ3NzMyLCA0Nzc0NywgNDc3NjIsIDQ3Nzc3LCA0Nzc5MiwgNDc4MDcsIDQ3ODIyLCA0NzgzNywgNDc4NTIsIDQ3ODY3LCAKKyAgICA0Nzg4MiwgNDc4OTcsIDQ3OTEyLCA0NzkyNywgNDc5NDIsIDQ3OTU3LCA0Nzk3MiwgNDc5ODcsIDQ4MDAyLCA0ODAxNywgCisgICAgNDgwMzIsIDQ4MDQ3LCA0ODA2MiwgNDgwNzcsIDQ4MDkyLCA0ODEwNywgNDgxMjIsIDQ4MTM3LCA0ODE1MiwgNDgxNjcsIAorICAgIDQ4MTgyLCA0ODE5NywgNDgyMTIsIDQ4MjI3LCA0ODI0MiwgNDgyNTcsIDQ4MjcyLCA0ODI4NywgNDgzMDIsIDQ4MzE3LCAKKyAgICA0ODMzMiwgNDgzNDcsIDQ4MzYyLCA0ODM3NywgNDgzOTIsIDQ4NDA3LCA0ODQyMiwgNDg0MzcsIDQ4NDUyLCA0ODQ2NywgCisgICAgNDg0ODIsIDQ4NDk3LCA0ODUxMiwgNDg1MjcsIDQ4NTQyLCA0ODU1NywgNDg1NzIsIDQ4NTg3LCA0ODYwMiwgNDg2MTcsIAorICAgIDQ4NjMyLCA0ODY0NywgNDg2NjIsIDQ4Njc3LCA0ODY5MiwgNDg3MDcsIDQ4NzIyLCA0ODczNywgNDg3NTIsIDQ4NzY3LCAKKyAgICA0ODc4MiwgNDg3OTcsIDQ4ODEyLCA0ODgyNywgNDg4NDIsIDQ4ODU3LCA0ODg3MiwgNDg4ODcsIDQ4OTAyLCA0ODkxNywgCisgICAgNDg5MzIsIDQ4OTQ3LCA0ODk2MiwgNDg5NzcsIDQ4OTkyLCA0OTAwNywgNDkwMjIsIDQ5MDM3LCA0OTA1MiwgNDkwNjcsIAorICAgIDQ5MDgyLCA0OTA5NywgNDkxMTIsIDQ5MTI3LCA0OTE0MiwgNDkxNTcsIDQ5MTcyLCA0OTE4NywgNDkyMDIsIDQ5MjE3LCAKKyAgICA0OTIzMiwgNDkyNDcsIDQ5MjYyLCA0OTI3NywgNDkyOTIsIDQ5MzA3LCA0OTMyMiwgNDkzMzcsIDQ5MzUyLCA0OTM2NywgCisgICAgNDkzODIsIDQ5Mzk3LCA0OTQxMiwgNDk0MjcsIDQ5NDQyLCA0OTQ1NywgNDk0NzIsIDQ5NDg3LCA0OTUwMiwgNDk1MTcsIAorICAgIDQ5NTMyLCA0OTU0OCwgNDk1NjQsIDQ5NTgwLCA0OTU5NiwgNDk2MTIsIDQ5NjI4LCA0OTY0NCwgNDk2NjAsIDQ5Njc2LCAKKyAgICA0OTY5MiwgNDk3MDgsIDQ5NzI0LCA0OTc0MCwgNDk3NTYsIDQ5NzcyLCA0OTc4OCwgNDk4MDQsIDQ5ODIwLCA0OTgzNiwgCisgICAgNDk4NTIsIDQ5ODY4LCA0OTg4NCwgNDk5MDAsIDQ5OTE2LCA0OTkzMiwgNDk5NDgsIDQ5OTY0LCA0OTk4MCwgNDk5OTYsIAorICAgIDUwMDEyLCA1MDAyOCwgNTAwNDQsIDUwMDYwLCA1MDA3NiwgNTAwOTIsIDUwMTA4LCA1MDEyNCwgNTAxNDAsIDUwMTU2LCAKKyAgICA1MDE3MiwgNTAxODgsIDUwMjA0LCA1MDIyMCwgNTAyMzYsIDUwMjUyLCA1MDI2OCwgNTAyODQsIDUwMzAwLCA1MDMxNiwgCisgICAgNTAzMzIsIDUwMzQ4LCA1MDM2NCwgNTAzODAsIDUwMzk2LCA1MDQxMiwgNTA0MjgsIDUwNDQ0LCA1MDQ2MCwgNTA0NzYsIAorICAgIDUwNDkyLCA1MDUwOCwgNTA1MjQsIDUwNTQwLCA1MDU1NiwgNTA1NzIsIDUwNTg4LCA1MDYwNCwgNTA2MjAsIDUwNjM2LCAKKyAgICA1MDY1MiwgNTA2NjgsIDUwNjg0LCA1MDcwMCwgNTA3MTYsIDUwNzMyLCA1MDc0OCwgNTA3NjQsIDUwNzgwLCA1MDc5NiwgCisgICAgNTA4MTIsIDUwODI4LCA1MDg0NCwgNTA4NjAsIDUwODc2LCA1MDg5MiwgNTA5MDgsIDUwOTI0LCA1MDk0MCwgNTA5NTYsIAorICAgIDUwOTcyLCA1MDk4OCwgNTEwMDQsIDUxMDIwLCA1MTAzNiwgNTEwNTIsIDUxMDY4LCA1MTA4NCwgNTExMDAsIDUxMTE2LCAKKyAgICA1MTEzMiwgNTExNDgsIDUxMTY0LCA1MTE4MCwgNTExOTYsIDUxMjEyLCA1MTIyOCwgNTEyNDQsIDUxMjYwLCA1MTI3NiwgCisgICAgNTEyOTIsIDUxMzA4LCA1MTMyNCwgNTEzNDAsIDUxMzU2LCA1MTM3MiwgNTEzODgsIDUxNDA0LCA1MTQyMCwgNTE0MzYsIAorICAgIDUxNDUyLCA1MTQ2OCwgNTE0ODQsIDUxNTAwLCA1MTUxNiwgNTE1MzIsIDUxNTQ4LCA1MTU2NCwgNTE1ODAsIDUxNTk2LCAKKyAgICA1MTYxMiwgNTE2MjgsIDUxNjQ0LCA1MTY2MCwgNTE2NzYsIDUxNjkyLCA1MTcwOCwgNTE3MjQsIDUxNzQwLCA1MTc1NiwgCisgICAgNTE3NzIsIDUxNzg4LCA1MTgwNCwgNTE4MjAsIDUxODM2LCA1MTg1MiwgNTE4NjgsIDUxODg0LCA1MTkwMCwgNTE5MTYsIAorICAgIDUxOTMyLCA1MTk0OCwgNTE5NjQsIDUxOTgwLCA1MTk5NiwgNTIwMTIsIDUyMDI4LCA1MjA0NCwgNTIwNjAsIDUyMDc2LCAKKyAgICA1MjA5MiwgNTIxMDgsIDUyMTI0LCA1MjE0MCwgNTIxNTYsIDUyMTcyLCA1MjE4OCwgNTIyMDQsIDUyMjIwLCA1MjIzNiwgCisgICAgNTIyNTIsIDUyMjY4LCA1MjI4NCwgNTIzMDAsIDUyMzE2LCA1MjMzMiwgNTIzNDgsIDUyMzY0LCA1MjM4MCwgNTIzOTYsIAorICAgIDUyNDEyLCA1MjQyOCwgNTI0NDQsIDUyNDYwLCA1MjQ3NiwgNTI0OTIsIDUyNTA4LCA1MjUyNCwgNTI1NDAsIDUyNTU2LCAKKyAgICA1MjU3MiwgNTI1ODgsIDUyNjA0LCA1MjYyMCwgNTI2MzYsIDUyNjUyLCA1MjY2OCwgNTI2ODQsIDUyNzAwLCA1MjcxNiwgCisgICAgNTI3MzIsIDUyNzQ4LCA1Mjc2NCwgNTI3ODAsIDUyNzk2LCA1MjgxMiwgNTI4MjgsIDUyODQ0LCA1Mjg2MCwgNTI4NzYsIAorICAgIDUyODkyLCA1MjkwOCwgNTI5MjQsIDUyOTQwLCA1Mjk1NiwgNTI5NzIsIDUyOTg4LCA1MzAwNCwgNTMwMjAsIDUzMDM2LCAKKyAgICA1MzA1MiwgNTMwNjgsIDUzMDg0LCA1MzEwMCwgNTMxMTYsIDUzMTMyLCA1MzE0OCwgNTMxNjQsIDUzMTgwLCA1MzE5NiwgCisgICAgNTMyMTIsIDUzMjI4LCA1MzI0NCwgNTMyNjAsIDUzMjc2LCA1MzI5MiwgNTMzMDgsIDUzMzI0LCA1MzM0MCwgNTMzNTYsIAorICAgIDUzMzcyLCA1MzM4OCwgNTM0MDQsIDUzNDIwLCA1MzQzNiwgNTM0NTIsIDUzNDY4LCA1MzQ4NCwgNTM1MDAsIDUzNTE2LCAKKyAgICA1MzUzMiwgNTM1NDgsIDUzNTY0LCA1MzU4MCwgNTM1OTYsIDUzNjEyLCA1MzYyOCwgNTM2NDQsIDUzNjYwLCA1MzY3NiwgCisgICAgNTM2OTIsIDUzNzA4LCA1MzcyNCwgNTM3NDAsIDUzNzU2LCA1Mzc3MiwgNTM3ODgsIDUzODA0LCA1MzgyMCwgNTM4MzYsIAorICAgIDUzODUyLCA1Mzg2OCwgNTM4ODQsIDUzOTAwLCA1MzkxNiwgNTM5MzIsIDUzOTQ4LCA1Mzk2NCwgNTM5ODAsIDUzOTk2LCAKKyAgICA1NDAxMiwgNTQwMjgsIDU0MDQ0LCA1NDA2MCwgNTQwNzYsIDU0MDkyLCA1NDEwOCwgNTQxMjQsIDU0MTQwLCA1NDE1NiwgCisgICAgNTQxNzIsIDU0MTg4LCA1NDIwNCwgNTQyMjAsIDU0MjM2LCA1NDI1MiwgNTQyNjgsIDU0Mjg0LCA1NDMwMCwgNTQzMTYsIAorICAgIDU0MzMyLCA1NDM0OCwgNTQzNjQsIDU0MzgwLCA1NDM5NiwgNTQ0MTIsIDU0NDI4LCA1NDQ0NCwgNTQ0NjAsIDU0NDc2LCAKKyAgICA1NDQ5MiwgNTQ1MDgsIDU0NTI0LCA1NDU0MCwgNTQ1NTYsIDU0NTcyLCA1NDU4OCwgNTQ2MDQsIDU0NjIwLCA1NDYzNiwgCisgICAgNTQ2NTIsIDU0NjY4LCA1NDY4NCwgNTQ3MDAsIDU0NzE2LCA1NDczMiwgNTQ3NDgsIDU0NzY0LCA1NDc4MCwgNTQ3OTYsIAorICAgIDU0ODEyLCA1NDgyOCwgNTQ4NDQsIDU0ODYwLCA1NDg3NiwgNTQ4OTIsIDU0OTA4LCA1NDkyNCwgNTQ5NDAsIDU0OTU2LCAKKyAgICA1NDk3MiwgNTQ5ODgsIDU1MDA0LCA1NTAyMCwgNTUwMzYsIDU1MDUyLCA1NTA2OCwgNTUwODQsIDU1MTAwLCA1NTExNiwgCisgICAgNTUxMzIsIDU1MTQ4LCA1NTE2NCwgNTUxODAsIDU1MTk2LCA1NTIxMiwgNTUyMjgsIDU1MjQ0LCA1NTI2MCwgNTUyNzYsIAorICAgIDU1MjkyLCA1NTMwOCwgNTUzMjQsIDU1MzQwLCA1NTM1NiwgNTUzNzIsIDU1Mzg4LCA1NTQwNCwgNTU0MjAsIDU1NDM2LCAKKyAgICA1NTQ1MiwgNTU0NjgsIDU1NDg0LCA1NTUwMCwgNTU1MTYsIDU1NTMyLCA1NTU0OCwgNTU1NjQsIDU1NTgwLCA1NTU5NiwgCisgICAgNTU2MTIsIDU1NjI4LCA1NTY0NCwgNTU2NjAsIDU1Njc2LCA1NTY5MiwgNTU3MDgsIDU1NzI0LCA1NTc0MCwgNTU3NTYsIAorICAgIDU1NzcyLCA1NTc4OCwgNTU4MDQsIDU1ODIwLCA1NTgzNiwgNTU4NTIsIDU1ODY4LCA1NTg4NCwgNTU5MDAsIDU1OTE2LCAKKyAgICA1NTkzMiwgNTU5NDgsIDU1OTY0LCA1NTk4MCwgNTU5OTYsIDU2MDEyLCA1NjAyOCwgNTYwNDQsIDU2MDYwLCA1NjA3NiwgCisgICAgNTYwOTIsIDU2MTA4LCA1NjEyNCwgNTYxNDAsIDU2MTU2LCA1NjE3MiwgNTYxODgsIDU2MjA0LCA1NjIyMCwgNTYyMzYsIAorICAgIDU2MjUyLCA1NjI2OCwgNTYyODQsIDU2MzAwLCA1NjMxNiwgNTYzMzIsIDU2MzQ4LCA1NjM2NCwgNTYzODAsIDU2Mzk2LCAKKyAgICA1NjQxMiwgNTY0MjgsIDU2NDQ0LCA1NjQ2MCwgNTY0NzYsIDU2NDkyLCA1NjUwOCwgNTY1MjQsIDU2NTQwLCA1NjU1NiwgCisgICAgNTY1NzIsIDU2NTg4LCA1NjYwNCwgNTY2MjAsIDU2NjM2LCA1NjY1MiwgNTY2NjgsIDU2Njg0LCA1NjcwMCwgNTY3MTYsIAorICAgIDU2NzMyLCA1Njc0OCwgNTY3NjQsIDU2NzgwLCA1Njc5NiwgNTY4MTIsIDU2ODI4LCA1Njg0NCwgNTY4NjAsIDU2ODc2LCAKKyAgICA1Njg5MiwgNTY5MDgsIDU2OTI0LCA1Njk0MCwgNTY5NTYsIDU2OTcyLCA1Njk4OCwgNTcwMDQsIDU3MDIwLCA1NzAzNiwgCisgICAgNTcwNTIsIDU3MDY4LCA1NzA4NCwgNTcxMDAsIDU3MTE2LCA1NzEzMiwgNTcxNDgsIDU3MTY0LCA1NzE4MCwgNTcxOTYsIAorICAgIDU3MjEyLCA1NzIyOCwgNTcyNDQsIDU3MjYwLCA1NzI3NiwgNTcyOTIsIDU3MzA4LCA1NzMyNCwgNTczNDAsIDU3MzU2LCAKKyAgICA1NzM3MiwgNTczODgsIDU3NDA0LCA1NzQyMCwgNTc0MzYsIDU3NDUyLCA1NzQ2OCwgNTc0ODQsIDU3NTAwLCA1NzUxNiwgCisgICAgNTc1MzIsIDU3NTQ4LCA1NzU2NCwgNTc1ODAsIDU3NTk2LCA1NzYxMiwgNTc2MjgsIDU3NjQ0LCA1NzY2MCwgNTc2NzYsIAorICAgIDU3NjkyLCA1NzcwOCwgNTc3MjQsIDU3NzQwLCA1Nzc1NiwgNTc3NzIsIDU3Nzg4LCA1NzgwNCwgNTc4MjAsIDU3ODM2LCAKKyAgICA1Nzg1MiwgNTc4NjgsIDU3ODg0LCA1NzkwMCwgNTc5MTYsIDU3OTMyLCA1Nzk0OCwgNTc5NjQsIDU3OTgwLCA1Nzk5NiwgCisgICAgNTgwMTIsIDU4MDI4LCA1ODA0NCwgNTgwNjAsIDU4MDc2LCA1ODA5MiwgNTgxMDgsIDU4MTI0LCA1ODE0MCwgNTgxNTYsIAorICAgIDU4MTcyLCA1ODE4OCwgNTgyMDQsIDU4MjE5LCAxNjc2MiwgNTgyMjgsIDU4MjM0LCA1ODI0MCwgNTgyNTAsIDU4MjU4LCAKKyAgICAxNDg5NCwgMTU0NDUsIDk5NjAsIDU4MjcxLCAxNTIwLCA1ODI3OSwgMzc2MSwgMjc0MzIsIDcxODMsIDU4Mjg1LCA1ODI5MCwgCisgICAgNTgyOTUsIDU4MzAwLCA1ODMwNSwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMzLCA1ODMzOCwgNTgzNDMsIAorICAgIDU4MzQ4LCA1ODM1MywgNTgzNTksIDU4MzY0LCA1ODM2OSwgNTgzNzQsIDU4Mzc5LCA1ODM4NCwgNTgzODksIDU4Mzk0LCAKKyAgICA1ODQwMCwgNTg0MDUsIDU4NDExLCA1ODQxOCwgMjU2MSwgNTg0MjMsIDU4NDI5LCA4NTI2LCA1ODQzMywgNTg0MzgsIAorICAgIDU4NDQ1LCA1ODQ1MywgNDAsIDU4NDU3LCA1ODQ2MywgNTg0NjgsIDU4NDczLCA1ODQ3NywgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgCisgICAgMTA2ODQsIDU4NDk0LCA1ODUwNCwgNTg1MTcsIDU4NTI4LCA1ODU0MSwgNTg1NDgsIDU4NTU0LCA1ODU1OSwgNTg1NjUsIAorICAgIDU4NTcxLCA1ODU3NywgNTg1ODIsIDU4NTg3LCA1ODU5MiwgNTg1OTcsIDU4NjAxLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCAKKyAgICA1ODYyMiwgNTg2MjgsIDU4NjM0LCA1ODYzOSwgNTg2NDMsIDU4NjQ4LCA1ODY1MywgNTg2NTcsIDU4NjYyLCA1ODY2NywgCisgICAgNTg2NzIsIDU4Njc2LCAxMDcwMCwgMTA3MTEsIDEwNzE2LCAxNTYzLCA1ODY4MCwgMTU2OCwgNTg2ODYsIDE2MjM5LCAKKyAgICA1ODY4OSwgNTg2OTUsIDE1OTksIDU4NzAxLCAxNjA1LCAxNjExLCAxMDc0NiwgNTg3MDYsIDU4NzE0LCA1ODcyMSwgNTg3MjUsIAorICAgIDU4NzMxLCA1ODczNiwgMzA5NzcsIDU4NzQxLCA1ODc0OCwgNTg3NTMsIDU4NzU3LCA1ODc2MSwgMTYxNiwgMTYzMzEsIAorICAgIDU4NzcwLCA1ODc3NCwgMTYzNDIsIDExMjUsIDU4Nzc4LCA1ODc4NSwgNTg3OTAsIDU4Nzk0LCAxNjM2NywgMTYyMCwgCisgICAgMzczNTAsIDU4Nzk3LCA1ODgwMiwgNTg4MTIsIDU4ODIxLCA1ODgyNiwgNTg4MzAsIDU4ODM2LCAxNjI1LCAzOTI1OSwgCisgICAgNTg4NDEsIDU4ODUwLCA1ODg1NiwgNTg4NjEsIDEwOTA0LCAxMDkxMCwgNTg4NjcsIDU4ODc5LCA1ODg5NiwgNTg5MTMsIAorICAgIDU4OTMwLCA1ODk0NywgNTg5NjQsIDU4OTgxLCA1ODk5OCwgNTkwMTUsIDU5MDMyLCA1OTA0OSwgNTkwNjYsIDU5MDgzLCAKKyAgICA1OTEwMCwgNTkxMTcsIDU5MTM0LCA1OTE1MSwgNTkxNjgsIDU5MTg1LCA1OTIwMiwgNTkyMTksIDU5MjM2LCA1OTI1MywgCisgICAgNTkyNzAsIDU5Mjg3LCA1OTMwNCwgNTkzMjEsIDU5MzM4LCA1OTM1NSwgNTkzNzIsIDU5Mzg5LCA1OTQwNiwgNTk0MjMsIAorICAgIDU5NDQwLCA1OTQ1NywgNTk0NzQsIDU5NDkxLCA1OTUwOCwgNTk1MjUsIDU5NTQyLCA1OTU1OSwgNTk1NzYsIDU5NTkzLCAKKyAgICA1OTYxMCwgNTk2MjcsIDU5NjQ0LCA1OTY2MSwgNTk2NzgsIDU5Njk1LCA1OTcxMiwgNTk3MjMsIDU5NzI4LCAxNjMwLCAKKyAgICA1OTczMiwgNTk3MzgsIDU5NzQzLCA1OTc0OCwgOTMyNiwgMTYzNSwgNTk3NTQsIDU5NzYzLCAyNzczMSwgNTk3NjgsIAorICAgIDU5Nzc5LCA1OTc4OSwgNTk3OTQsIDU5ODAxLCA1OTgwNywgNTk4MTIsIDU5ODE3LCAxNjYxOSwgNTk4MjEsIDEwOTIxLCAKKyAgICAxNjQwLCAxMDkyNiwgNTk4MjcsIDU5ODMyLCA1OTgzOCwgNTk4NDMsIDU5ODQ4LCA1OTg1MywgNTk4NTgsIDU5ODYzLCAKKyAgICA1OTg2OCwgNTk4NzMsIDU5ODc5LCA1OTg4NSwgNTk4OTEsIDU5ODk2LCA1OTkwMCwgNTk5MDUsIDU5OTEwLCA1OTkxNCwgCisgICAgNTk5MTksIDU5OTI0LCA1OTkyOSwgNTk5MzMsIDU5OTM4LCA1OTk0NCwgNTk5NDksIDU5OTU0LCA1OTk1OCwgNTk5NjMsIAorICAgIDU5OTY4LCA1OTk3NCwgNTk5NzksIDU5OTg0LCA1OTk5MCwgNTk5OTYsIDYwMDAxLCA2MDAwNSwgNjAwMTAsIDYwMDE1LCAKKyAgICA2MDAyMCwgNjAwMjQsIDYwMDI5LCA2MDAzNCwgNjAwMzksIDYwMDQ1LCA2MDA1MSwgNjAwNTYsIDYwMDYwLCA2MDA2NCwgCisgICAgNjAwNjksIDYwMDc0LCA2MDA3OSwgMjkxMjksIDYwMDgzLCA2MDA4OCwgNjAwOTMsIDYwMDk5LCA2MDEwNCwgNjAxMDksIAorICAgIDYwMTEzLCA2MDExOCwgNjAxMjMsIDYwMTI5LCA2MDEzNCwgNjAxMzksIDYwMTQ1LCA2MDE1MSwgNjAxNTYsIDYwMTYwLCAKKyAgICA2MDE2NSwgNjAxNzAsIDYwMTc0LCA2MDE3OSwgNjAxODQsIDYwMTg5LCA2MDE5NSwgNjAyMDEsIDYwMjA2LCA2MDIxMCwgCisgICAgNjAyMTUsIDYwMjIwLCA2MDIyNCwgNjAyMjksIDYwMjM0LCA2MDIzOSwgNjAyNDMsIDYwMjQ2LCAzMTYzOSwgNjAyNTEsIAorICAgIDYwMjU5LCAxNjY4NSwgMzY2MywgMTEwMTcsIDYwMjY1LCA2MDI3NSwgNjAyOTAsIDExMDIyLCA2MDMwMSwgNjAzMDYsIAorICAgIDYwMzE3LCA2MDMyOSwgNjAzNDEsIDYwMzUzLCAyNjk1LCA2MDM2NSwgNjAzNzAsIDYwMzgyLCA2MDM4NiwgNjAzOTIsIAorICAgIDYwMzk4LCA2MDQwMywgMTY1MiwgMTA3OCwgNjA0MTIsIDYwNDE3LCAzOTMwOSwgNjA0MjEsIDYwNDI1LCA2MDQzMCwgCisgICAgNjA0MzQsIDE2NzcwLCA2MDQzOSwgNjA0NDIsIDYwNDUwLCA2MDQ1OCwgMTY1NiwgMTEwNDcsIDExMDUzLCAxNjYxLCAKKyAgICA2MDQ2NiwgNjA0NzMsIDYwNDc4LCA2MDQ4NywgNjA0OTcsIDYwNTA0LCA2MDUwOSwgNjA1MTQsIDE2NjYsIDYwNTIxLCAKKyAgICA2MDUyNiwgMTY4ODUsIDYwNTMwLCA2MDUzNSwgNjA1NDIsIDYwNTQ4LCA2MDU1MiwgNjA1NjMsIDYwNTczLCAxNjkwNywgCisgICAgOTIzNCwgOTI0MSwgMTY3MSwgNjA1ODAsIDYwNTg2LCA2MDU5NCwgNjA2MDEsIDYwNjA3LCA2MDYxNCwgNjA2MjYsIDYwNjMyLCAKKyAgICA2MDYzNywgNjA2NDksIDYwNjYwLCA2MDY2OSwgNjA2NzksIDM3NDAsIDMwODEzLCAzMDgyMiwgMTY5NDcsIDE2NzYsIDE2ODAsIAorICAgIDYwNjg3LCA2MDY5OCwgNjA3MDMsIDE2ODMsIDYwNzExLCA2MDcxNiwgMTY5OTgsIDYwNzI4LCA2MDczNCwgNjA3MzksIAorICAgIDYwNzQ3LCAxNjg4LCA2MDc1MiwgNjA3NTcsIDYwNzY1LCA2MDc3MywgNjA3ODAsIDYwNzg5LCA2MDc5NywgNjA4MDYsIAorICAgIDE2OTMsIDYwODEwLCAxNjk4LCA2MDgxNSwgNjA4MjIsIDE3MDcyLCA2MDgzMCwgNjA4MzYsIDYwODQxLCA2MDg0OSwgCisgICAgNjA4NTYsIDYwODY0LCAyMjU3NCwgNjA4NjksIDExMTgyLCA2MDg3OCwgNjA4ODQsIDYwODkxLCA2MDg5OCwgNjA5MDQsIAorICAgIDYwOTE0LCA2MDkyMCwgNjA5MjUsIDYwOTM2LCA2MDk0MSwgNjA5NDksIDExMTkxLCAxMTE5NiwgNjA5NTcsIDYwOTYzLCAKKyAgICA2MDk3MSwgMzgwNSwgMTcxMTQsIDM5Mzk3LCA2MDk3NiwgNjA5ODIsIDYwOTg3LCA2MDk5NSwgNjEwMDIsIDEyMDM2LCAKKyAgICA2MTAwNywgNjEwMTMsIDE3MDksIDYxMDE4LCA2MTAyMSwgMTEzMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDMsIAorICAgIDYxMDQ4LCA2MTA1MywgNjEwNTgsIDYxMDYzLCA2MTA2OCwgNjEwNzMsIDE3MTgsIDksIDYxMDc5LCA2MTA4MywgNjEwODgsIAorICAgIDYxMDkyLCA2MTA5NiwgNjExMDAsIDMxODc5LCA2MTEwNSwgNjExMTAsIDYxMTE1LCA2MTExOSwgNjExMjIsIDYxMTI2LCAKKyAgICA2MTEzMCwgNjExMzUsIDYxMTM5LCA2MTE0NCwgNjExNDgsIDM0NjE2LCAzNDYyMSwgMzQ2MjYsIDYxMTUxLCA2MTE1OCwgCisgICAgNjExNjQsIDM5MTE4LCA2MTE3NCwgMzQ2MzIsIDMyMTM3LCAzMTg5NCwgMzE5MDAsIDM0NjQ4LCAzMTkwNiwgNjExNzksIAorICAgIDYxMTg0LCAzMjE3MCwgNjExODgsIDYxMTkxLCA2MTE5NSwgNjEyMDIsIDYxMjA1LCA2MTIxMCwgNjEyMTQsIDYxMjE4LCAKKyAgICA2MTIyMSwgNjEyMzEsIDYxMjQzLCA2MTI1MCwgNjEyNTYsIDYxMjYzLCAzMzU3MywgNjEyNjYsIDg1NDMsIDg3NywgNjEyNjksIAorICAgIDYxMjczLCA2MTI3OCwgMzY5MCwgNjEyODIsIDYxMjg1LCAxMzYzMiwgNjEyOTIsIDYxMjk5LCA2MTMxMiwgNjEzMjAsIAorICAgIDYxMzI5LCA2MTMzOCwgNjEzNDMsIDYxMzUzLCA2MTM2NiwgNjEzNzgsIDYxMzg1LCA2MTM5MCwgNjEzOTksIDYxNDEyLCAKKyAgICAzNjA2MCwgNjE0MzAsIDYxNDM1LCA2MTQ0MiwgNjE0NDgsIDY1NiwgNjE0NTMsIDYxNDYxLCA2MTQ2OCwgMjcyNzEsIDYyNywgCisgICAgNjE0NzQsIDYxNDgwLCA2MTQ5MCwgNjE0OTYsIDYxNTAxLCAzMTkyNCwgNjAwMywgMzE5MzgsIDYxNTA1LCA2MTUxNSwgCisgICAgNjE1MjAsIDYxNTMwLCA2MTU0NSwgNjE1NTEsIDYxNTU3LCAzMTk0OCwgNjE1NjIsIDMxMDk0LCA2MTU2NiwgNjE1NzEsIAorICAgIDYxNTc2LCA2MTU4MCwgNjE1ODUsIDE2OTUwLCA2MTU5MiwgNjE1OTcsIDYxNjAxLCA2MDQ0LCAzMTk3NCwgNjE2MDUsIAorICAgIDYxNjExLCAzMTIsIDYxNjIxLCA2MTYyOCwgNjE2MzUsIDYxNjQwLCA2MTY0OSwgNTg4MDYsIDYxNjU1LCA2MTY2MywgCisgICAgNjE2NjcsIDYxNjcxLCA2MTY3NSwgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTQsIDYxNzAyLCA2MTcwNywgNjE3MTIsIAorICAgIDYxNzE2LCA2MTcyMSwgNjE3MjUsIDYxNzI5LCA2MTczNSwgNjE3NDEsIDYxNzQ2LCA2MTc1MCwgMzIwOTgsIDYxNzU1LCAKKyAgICAzMjEwNCwgMzIxMTAsIDYxNzYwLCA2MTc2NiwgNjE3NzMsIDYxNzc4LCA2MTc4MiwgMzExMTEsIDE2NjEyLCA2MTc4NSwgCisgICAgNjE3ODksIDYxNzk0LCA2MTgwMSwgNjE4MDcsIDYxODExLCA2MTgxNiwgMzg4MjgsIDYxODIyLCA2MTgyNiwgNjE4MzAsIAorICAgIDYxODM1LCA2MTg0MSwgNjE4NDcsIDYxODU5LCA2MTg2OCwgNjE4NzgsIDYxODg0LCA2MTg5MSwgNjE4OTYsIDYxOTAxLCAKKyAgICA2MTkwNSwgNjE5MDgsIDYxOTE0LCA2MTkyMSwgNjE5MjYsIDYxOTMxLCA2MTkzOCwgNjE5NDUsIDYxOTUxLCA2MTk1NiwgCisgICAgNjE5NjEsIDYxOTY5LCAzMjExNSwgMjQyMywgNjE5NzQsIDYxOTc5LCA2MTk4NSwgNjE5OTAsIDYxOTk2LCA2MjAwMSwgCisgICAgNjIwMDYsIDYyMDExLCA2MjAxNywgMzIxMzYsIDYyMDIyLCA2MjAyOCwgNjIwMzQsIDYyMDQwLCAzMjIwMCwgNjIwNDUsIAorICAgIDYyMDUwLCA2MjA1NSwgMzIyMTEsIDYyMDYwLCA2MjA2NSwgNjIwNzAsIDYyMDc2LCA2MjA4MiwgMzIyMTYsIDYyMDg3LCAKKyAgICA2MjA5MiwgNjIwOTcsIDMyMjcxLCAzMjI3NywgNjIxMDIsIDYyMTA3LCAzMjI4MiwgNjIxMTIsIDI3OTU4LCAzMjMwNCwgCisgICAgMzIzMDgsIDYyMTE3LCA2MjA5MywgNjIxMjEsIDYyMTI5LCA2MjEzNSwgNjIxNDMsIDYyMTUwLCA2MjE1NiwgNjIxNjYsIAorICAgIDYyMTcyLCA2MjE3OSwgMTA2MzEsIDMyMzIyLCA2MjE4NSwgNjIxOTgsIDYyMjA3LCA2MjIxMywgNjIyMjIsIDYyMjI4LCAKKyAgICAyMzUxMiwgNjIyMzUsIDYyMjQyLCA2MjI1MiwgMzIyNzIsIDYyMjU1LCA2MjI2MiwgNjIyNjcsIDYyMjcxLCA2MjI3NSwgCisgICAgNjIyODAsIDYxMjAsIDYyMjg0LCA2MjI4OSwgNjIyOTQsIDM0NzEwLCAzNDcxNSwgNjIyOTgsIDM0NzI5LCA2MjMwMywgCisgICAgMzQ3MzQsIDYyMzA4LCA2MjMxNCwgMzQ3NDYsIDM0NzUyLCAzNDc1OCwgNjIzMTksIDYyMzI1LCAyMjUzOSwgNjIzMzYsIAorICAgIDYyMzM5LCA2MjM1MSwgNjIzNTksIDMyMzQ1LCA2MjM2MywgNjIzNzIsIDYyMzgyLCA2MjM5MSwgMzIzNTUsIDYyMzk2LCAKKyAgICA2MjQwMywgNjI0MTIsIDYyNDE4LCA2MjQyNiwgNjI0MzMsIDYwOTUsIDQzOTcsIDYyNDM4LCAzMjI4MywgNjI0NDQsIAorICAgIDYyNDQ3LCA2MjQ1MywgNjI0NjAsIDYyNDY1LCA2MjQ3MCwgMjM0MjIsIDYyNDc0LCA2MjQ4MCwgNjI0ODYsIDYyNDkxLCAKKyAgICA2MjQ5NiwgNjI1MDAsIDYyNTA2LCA2MjUxMiwgMzM0ODMsIDg2MywgMzU3MjMsIDM2NjQ0LCAzNjY1MCwgMzIzOTEsIAorICAgIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI4LCA2MjU0MSwgNjI1NDcsIDYyNTUxLCA2MjU1NCwgNjI1NTksIDMzNzg2LCAKKyAgICA2MjU2MywgMzExMTYsIDIxMjg3LCA2MjU2OSwgNjAyNCwgNjAzMiwgOTA3NSwgNjI1NzIsIDYyNTc3LCA2MjU4MiwgNjI1ODcsIAorICAgIDYyNTkyLCA2MjU5NywgNjI2MDIsIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIzLCA2MjYyOCwgNjI2MzMsIDYyNjM5LCAKKyAgICA2MjY0NCwgNjI2NDksIDYyNjU0LCA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NSwgNjI2ODAsIDYyNjg2LCA2MjY5MSwgCisgICAgNjI2OTYsIDYyNzAxLCA2MjcwNiwgNjI3MTEsIDYyNzE2LCA2MjcyMSwgNjI3MjYsIDYyNzMxLCA2MjczNiwgNjI3NDIsIAorICAgIDYyNzQ3LCA2Mjc1MiwgNjI3NTcsIDYyNzYyLCA2Mjc2NywgNjI3NzIsIDYyNzc4LCA2Mjc4MywgNjI3ODgsIDYyNzkzLCAKKyAgICA2Mjc5OCwgNjI4MDMsIDYyODA4LCA2MjgxMywgNjI4MTgsIDYyODIzLCA2MjgyOSwgNjI4MzQsIDYyODM5LCA2Mjg0NCwgCisgICAgNjI4NDksIDYyODU1LCA2Mjg2MSwgNjI4NjYsIDYyODcyLCA2Mjg3NywgNjI4ODIsIDYyODg3LCA2Mjg5MiwgNjI4OTcsIAorICAgIDE1MTMsIDI0NSwgNjI5MDIsIDYyOTA2LCA2MjkxMCwgNjI5MTQsIDI1MTMzLCA2MjkxOCwgNjI5MjIsIDYyOTI3LCA2MjkzMSwgCisgICAgNjI5MzYsIDYyOTQwLCA2Mjk0NSwgNjI5NTAsIDYyOTU1LCA2Mjk1OSwgNjI5NjMsIDYyOTY4LCA2Mjk3MiwgMTMzNjksIAorICAgIDYyOTc3LCA2Mjk4MSwgNjI5ODgsIDYyOTk4LCAxNTIwNiwgNjMwMDcsIDYzMDE2LCA2MzAyMCwgNjMwMjUsIDYzMDMwLCAKKyAgICA2MzAzNCwgMjQ5MjQsIDMwMTksIDYzMDM4LCA2MzA0NCwgMTczNjMsIDYzMDQ4LCA2MzA1NywgNjMwNjUsIDYzMDcxLCAKKyAgICA2MzA4MywgNjMwOTUsIDYzMDk5LCA2MzEwNCwgNjMxMDgsIDYzMTE0LCA2MzEyMCwgNjMxMjUsIDYzMTM1LCA2MzE0NSwgCisgICAgNjMxNTEsIDYzMTU2LCA2MzE2MCwgNjMxNjUsIDYzMTcxLCA2MzE4MCwgNjMxODksIDYzMTk3LCAxNTU2MCwgNjMyMDEsIAorICAgIDYzMjEwLCA2MzIxOCwgNjMyMzAsIDYzMjQxLCA2MzI1MiwgNjMyNjEsIDYzMjY1LCA2MzI3NCwgNjMyODQsIDYzMjkyLCAKKyAgICA2MzI5OCwgNjMzMDMsIDYzMzA5LCA2MzMxNCwgOTgsIDMwOTI1LCA2MzMyNSwgMjYyNjYsIDI2Mjc2LCA2MzMzMSwgNjMzMzgsIAorICAgIDYzMzQ0LCA2MzM0OCwgNjMzNTgsIDYzMzY5LCA2MzM3NywgNjMzODYsIDYzMzkxLCA2MzM5NiwgNjM0MDAsIDE3MzE3LCAKKyAgICA2MzQwOCwgNjM0MTIsIDYzNDE4LCA2MzQyOCwgNjM0MzUsIDYzNDQxLCAzNDgwOSwgNjM0NDcsIDYzNDQ5LCA2MzQ1MiwgCisgICAgNjM0NTYsIDYzNDY2LCA2MzQ3MiwgNjM0NzksIDEzMzE1LCA2MzQ4NiwgNjM0OTIsIDYzNTAxLCA2MzUxMCwgNjM1MTYsIAorICAgIDYzNTIyLCA2MzUyOCwgNjM1MzMsIDYzNTQwLCA2MzU0NywgNjM1NTMsIDYzNTY2LCA2MzU3NSwgNjM1ODQsIDYzNTg5LCAKKyAgICA2MzU5MywgNjM1OTksIDYzNjA2LCA2MzYxMywgNjM2MjAsIDYzNjI3LCA2MzYzNCwgNjM2MzksIDYzNjQzLCA2MzY0NywgCisgICAgNjM2NTAsIDYzNjYwLCA2MzY2NCwgNjM2NzYsIDYzNjg1LCA2MzY4OSwgNjM2OTQsIDYzNjk4LCA2MzcwNCwgNjM3MDksIAorICAgIDYzNzE2LCA2MzcyNSwgNjM3MzMsIDYzNzQxLCA2Mzc0NiwgNjM3NTAsIDYzNzU1LCA2Mzc2MCwgNjM3NzAsIDYzNzc4LCAKKyAgICA2Mzc4MywgNjM3ODcsIDYzNzkxLCA2Mzc5NywgNjM4MDksIDYzODE3LCA2MzgyNywgNjM4MzQsIDYzODQwLCA2Mzg0NSwgCisgICAgNjM4NDksIDYzODUzLCA2Mzg1NywgNjM4NjYsIDYzODc1LCA2Mzg4NCwgNjM4OTAsIDYzODk2LCA2MzkwMiwgNjM5MDcsIAorICAgIDYzOTE0LCA2MzkyMCwgNjM5MjgsIDYzOTM1LCAxMjQ2MywgNjM5NDEsIDYzOTQ3LCA2Mzk1MSwgMTQyNDQsIDYzOTU1LCAKKyAgICA2Mzk2MCwgNjM5NzAsIDYzOTc5LCA2Mzk4NSwgNjM5OTEsIDYzOTk5LCA2NDAwNiwgNjQwMTAsIDY0MDE0LCA2NDAyMCwgCisgICAgNjQwMjgsIDY0MDM1LCA2NDA0MSwgNjQwNTIsIDY0MDU2LCA2NDA2MCwgNjQwNjQsIDY0MDY3LCA2NDA3MywgNjQwNzgsIAorICAgIDY0MDgyLCA2NDA4NiwgNjQwOTUsIDY0MTAzLCA2NDExMCwgNjQxMTYsIDY0MTIzLCAyNDA0NiwgMzg4NzAsIDY0MTI4LCAKKyAgICA2NDEzNiwgNjQxNDAsIDY0MTQ0LCA2NDE0NywgNjQxNTUsIDY0MTYyLCA2NDE2OCwgNjQxNzcsIDY0MTg1LCA2NDE5MSwgCisgICAgNjQxOTYsIDY0MjAwLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxOCwgNjQyMjcsIDY0MjMxLCA2NDIzOCwgNjQyNDUsIAorICAgIDY0MjUxLCA2NDI1OSwgNjQyNjUsIDY0Mjc2LCA2NDI4NCwgNjQyOTAsIDIyNjY5LCA2NDI5OSwgNjQzMDYsIDY0MzEzLCAKKyAgICA2NDMyMCwgNjQzMjcsIDY0MzM0LCA0MTkwNywgMTMxNTMsIDY0MzQxLCA2NDM0OCwgNjQzNTMsIDM0ODQ1LCA2MjE3LCAKKyAgICA2NDM1OSwgNjQzNjQsIDY0MzY5LCA2NDM3NSwgNjQzODEsIDY0Mzg3LCA2NDM5MiwgNjQzOTcsIDY0NDAyLCA2NDQwNywgCisgICAgNjQ0MTMsIDY0NDE4LCA2NDQyNCwgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDUsIDY0NDUwLCA2NDQ1NSwgNjQ0NjAsIAorICAgIDY0NDY1LCA2NDQ3MCwgNjQ0NzYsIDY0NDgxLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCAKKyAgICA2NDUxNywgNjQ1MjMsIDY0NTI4LCA2NDUzMywgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgCisgICAgNjQ1NjgsIDY0NTczLCA2NDU3OSwgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIAorICAgIDY0NjE5LCA2NDYyNSwgNjQ2MzAsIDY0NjM1LCA2NDY0MCwgNjQ2NDUsIDY0NjUwLCA2NDY1NSwgNjQ2NjAsIDY0NjY1LCAKKyAgICA2NDY3MCwgNjQ2NzUsIDY0NjgwLCA2NDY4NSwgNjQ2OTEsIDE4MzQsIDIyNCwgMzc0NDYsIDY0Njk2LCA2NDY5OSwgNjQ3MDQsIAorICAgIDY0NzA4LCA2NDcxMSwgNjQ3MTYsIDYzNzM3LCA2NDcyNywgNjQ3MzcsIDY0NzQ0LCA2NDc2MCwgNjQ3NjksIDY0Nzc5LCAKKyAgICA2NDc4OSwgNjQ3OTcsIDY0ODExLCA2NDgxOSwgNjQ4MjMsIDY0ODI2LCA2NDgzMywgNjQ4MzksIDY0ODUwLCA2NDg2MiwgCisgICAgNjQ4NzMsIDY0ODgyLCA2NDg4OSwgMTI5NywgMjMzMTEsIDY0ODk5LCAyNTkwLCA2NDkwMywgNjQ5MTIsIDExMzgsIDE3MjkwLCAKKyAgICAzODA4MywgNjQ5MjAsIDY0OTI4LCA2NDk0MiwgNjQ5NTUsIDY0OTU5LCA2NDk2NCwgNjQ5NjksIDY0OTc0LCA2NDk4MCwgCisgICAgNjQ5ODYsIDY0OTkxLCA4NTM1LCA2NDk5NiwgNjUwMDAsIDY1MDA4LCAxMTA0OCwgNjUwMTMsIDY1MDE5LCA2NTAyOCwgCisgICAgMTcyMSwgMTEwNjAsIDczNiwgNjUwMzIsIDY1MDQxLCA2NTA1MSwgMjcwMzAsIDY1MDYwLCA2NTA2NiwgMTY4NjIsIDY1MDcyLCAKKyAgICA2NTA3NiwgMzk2NCwgMTEzOTEsIDY1MDgyLCA2NTA4OSwgNjA2OTMsIDY1MDkzLCA2NTA5NywgMzk4OCwgMTg5LCAxNDE1OSwgCisgICAgNjUxMDMsIDY1MTE1LCA2NTExOSwgNjUxMjUsIDI3NzUxLCA2NTEyOSwgMTEzNzksIDI3MzAsIDQsIDY1MTM0LCA2NTE0NCwgCisgICAgNjUxNTAsIDY1MTYxLCA2NTE2OCwgNjUxNzQsIDY1MTgwLCA2NTE4OCwgNjUxOTUsIDY1MjAxLCA2NTIxMSwgNjUyMjEsIAorICAgIDY1MjMxLCAyMzQ5OSwgMTMwOSwgNjUyNDAsIDY1MjQ0LCA2NTI0OCwgNjUyNTQsIDY1MjU4LCAyNzUzLCAyNzU5LCA4NTMyLCAKKyAgICAyMjY0LCA2NTI2MiwgNjUyNjYsIDY1Mjc1LCA2NTI4MywgNjUyOTQsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDY1MzIxLCAKKyAgICA2NTMzMiwgNjUzNDMsIDY1MzUxLCA2NTM1NywgOTY5NCwgNjUzNjIsIDY1MzcwLCA2NTM3NCwgNjUzNzgsIDY1MzgyLCAKKyAgICA2NTM5NCwgMjgxMzYsIDY1NDAxLCA2NTQxMSwgNjU0MTcsIDY1NDIzLCA5Nzk2LCA2NTQzMywgNjU0NDQsIDY1NDU0LCAKKyAgICA2NTQ2MywgNjU0NjcsIDY1NDc0LCAxMTQwLCAxMTcwLCA2NTQ4NCwgNjU0ODksIDY1NDk3LCA2NTUwNSwgNjU1MTYsIAorICAgIDY1NTIzLCA2NTUzNywgMTQwODgsIDM5MywgNjU1NDcsIDY1NTUxLCA2NTU1OSwgNjU1NjgsIDY1NTc2LCA2NTU4MiwgCisgICAgNjU1OTYsIDY1NjAzLCA2NTYwOSwgNjU2MTgsIDY1NjI1LCA2NTYzNSwgNjU2NDMsIDM4MTIsIDE1NiwgNjU2NTEsIDY1NjYyLCAKKyAgICA2NTY2NiwgNjU2NzgsIDI3OTQ5LCAxNjEsIDY1Njg0LCA2NTY4OSwgNjU2OTMsIDY1NzAwLCA2NTcwNiwgNjU3MTQsIAorICAgIDY1NzIxLCA4ODE4LCA2NTcyOCwgNjU3MzcsIDY1NzQ1LCAzODc4LCA2NTc1OCwgODE5OSwgNjU3NjIsIDI3OTgsIDQ0MywgCisgICAgNjU3NjcsIDY1NzgwLCA2NTc4NSwgMTgzMywgNjUwLCA2NTc4OSwgMzg5NSwgNjU3OTcsIDY1ODAzLCA2NTgwNywgOTMxLCAKKyAgICA2NTgxNywgNjU4MjYsIDY1ODMxLCAxNDkyOCwgMTQ5MzUsIDQ1MjY5LCA2NTgzNSwgMzgyMiwgMTMwNDEsIDY1ODQzLCAKKyAgICA2NTg1MCwgMjM1NTUsIDY1ODU0LCA2NTg2MSwgNjU4NjcsIDY1ODcyLCA2NTg3NywgMTQ5NDgsIDM3MiwgNjU4ODIsIAorICAgIDY1ODk0LCA2NTkwMCwgNjU5MDgsIDI4MTAsIDE3NTMsIDY1OTE2LCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzMywgCisgICAgNjU5MzksIDY1OTQ0LCA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc1LCA2NTk4MCwgNjU5ODUsIAorICAgIDY1OTkwLCA2NTk5NSwgNjYwMDAsIDY2MDA1LCA2NjAxMCwgNjYwMTUsIDY2MDIxLCA2NjAyNiwgNjYwMzEsIDY2MDM2LCAKKyAgICA2NjA0MiwgNjYwNDcsIDY2MDUzLCA2NjA1OCwgNjYwNjMsIDY2MDY4LCA2NjA3MywgNjYwNzgsIDY2MDgzLCA2NjA4OCwgCisgICAgNjYwOTQsIDY2MDk5LCA2NjEwNSwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTMwLCA2NjEzNSwgNjYxNDAsIAorICAgIDY2MTQ1LCA2NjE1MSwgNjYxNTYsIDY2MTYxLCA2NjE2NiwgNjYxNzAsIDY2MTc0LCA2NjE3OSwgNjYxODMsIDY2MTg4LCAKKyAgICA2NjE5MywgNjYxOTksIDY2MjA0LCA2NjIwOCwgNjYyMTMsIDY2MjE3LCA2NjIyMCwgNjYyMjIsIDY2MjI2LCA2NjIyOSwgCisgICAgNjYyMzQsIDY2MjM4LCA2NjI0MiwgNjYyNDYsIDY2MjUwLCA2NjI1OSwgNjYyNjMsIDMyNTQ5LCA2NjI2NiwgMzI1NTQsIAorICAgIDY2MjczLCA2NjI3OCwgMzI1NTksIDY2Mjg3LCA2NjI5NiwgMzI1NjUsIDY2MzAxLCAzMjU3MCwgNjYzMTAsIDY2MzE1LCAKKyAgICAxMTU3OCwgNjYzMTksIDY2MzI0LCA2NjMyOSwgMzI1NzUsIDY2MzMzLCA0MDIyNSwgNjYzMzcsIDY2MzQwLCA2NjM0NCwgCisgICAgODIxMSwgNjYzNTAsIDY2MzU1LCA2NjM1OSwgMzcwNSwgMzI1ODAsIDY2MzYyLCA2NjM2NiwgNjYzNjksIDY2Mzc0LCAKKyAgICA2NjM3OCwgNjYzODQsIDY2MzkyLCA2NjQwNSwgNjY0MTQsIDY2NDIwLCA2NjQyNSwgNjY0MzEsIDY2NDM1LCA2NjQ0MSwgCisgICAgNjY0NDksIDY2NDU0LCA2NjQ1OCwgNjY0NjUsIDY2NDcxLCA2NjQ3OSwgNjY0ODgsIDY2NDk2LCAzMjU4MywgNjY1MDMsIAorICAgIDY2NTEzLCA2NjUyMiwgNjY1MzUsIDY2NTQwLCA2NjU0NSwgNjY1NTQsIDY2NTYwLCA2NjU2NywgNjY1NzgsIDY2NTkwLCAKKyAgICA2NjU5NywgNjY2MDYsIDY2NjE1LCA2NjYyNCwgNjY2MzEsIDY2NjM3LCA2NjY0NCwgNjY2NTIsIDY2NjU5LCA2NjY2NywgCisgICAgNjY2NzYsIDY2Njg0LCA2NjY5MSwgNjY2OTksIDY2NzA4LCA2NjcxNiwgNjY3MjUsIDY2NzM1LCA2Njc0NCwgNjY3NTIsIAorICAgIDY2NzU5LCA2Njc2NywgNjY3NzYsIDY2Nzg0LCA2Njc5MywgNjY4MDMsIDY2ODEyLCA2NjgyMCwgNjY4MjksIDY2ODM5LCAKKyAgICA2Njg0OCwgNjY4NTgsIDY2ODY5LCA2Njg3OSwgNjY4ODgsIDY2ODk2LCA2NjkwMywgNjY5MTEsIDY2OTIwLCA2NjkyOCwgCisgICAgNjY5MzcsIDY2OTQ3LCA2Njk1NiwgNjY5NjQsIDY2OTczLCA2Njk4MywgNjY5OTIsIDY3MDAyLCA2NzAxMywgNjcwMjMsIAorICAgIDY3MDMyLCA2NzA0MCwgNjcwNDksIDY3MDU5LCA2NzA2OCwgNjcwNzgsIDY3MDg5LCA2NzA5OSwgNjcxMDgsIDY3MTE4LCAKKyAgICA2NzEyOSwgNjcxMzksIDY3MTUwLCA2NzE2MiwgNjcxNzMsIDY3MTgzLCA2NzE5MiwgNjcyMDAsIDY3MjA3LCA2NzIxNSwgCisgICAgNjcyMjQsIDY3MjMyLCA2NzI0MSwgNjcyNTEsIDY3MjYwLCA2NzI2OCwgNjcyNzcsIDY3Mjg3LCA2NzI5NiwgNjczMDYsIAorICAgIDY3MzE3LCA2NzMyNywgNjczMzYsIDY3MzQ0LCA2NzM1MywgNjczNjMsIDY3MzcyLCA2NzM4MiwgNjczOTMsIDY3NDAzLCAKKyAgICA2NzQxMiwgNjc0MjIsIDY3NDMzLCA2NzQ0MywgNjc0NTQsIDY3NDY2LCA2NzQ3NywgNjc0ODcsIDY3NDk2LCA2NzUwNCwgCisgICAgNjc1MTMsIDY3NTIzLCA2NzUzMiwgNjc1NDIsIDY3NTUzLCA2NzU2MywgNjc1NzIsIDY3NTgyLCA2NzU5MywgNjc2MDMsIAorICAgIDY3NjE0LCA2NzYyNiwgNjc2MzcsIDY3NjQ3LCA2NzY1NiwgNjc2NjYsIDY3Njc3LCA2NzY4NywgNjc2OTgsIDY3NzEwLCAKKyAgICA2NzcyMSwgNjc3MzEsIDY3NzQyLCA2Nzc1NCwgNjc3NjUsIDY3Nzc3LCA2Nzc5MCwgNjc4MDIsIDY3ODEzLCA2NzgyMywgCisgICAgNjc4MzIsIDY3ODQwLCA2Nzg0NywgNjc4NTUsIDY3ODY0LCA2Nzg3MiwgNjc4ODEsIDY3ODkxLCA2NzkwMCwgNjc5MDgsIAorICAgIDY3OTE3LCA2NzkyNywgNjc5MzYsIDY3OTQ2LCA2Nzk1NywgNjc5NjcsIDY3OTc2LCA2Nzk4NCwgNjc5OTMsIDY4MDAzLCAKKyAgICA2ODAxMiwgNjgwMjIsIDY4MDMzLCA2ODA0MywgNjgwNTIsIDY4MDYyLCA2ODA3MywgNjgwODMsIDY4MDk0LCA2ODEwNiwgCisgICAgNjgxMTcsIDY4MTI3LCA2ODEzNiwgNjgxNDQsIDY4MTUzLCA2ODE2MywgNjgxNzIsIDY4MTgyLCA2ODE5MywgNjgyMDMsIAorICAgIDY4MjEyLCA2ODIyMiwgNjgyMzMsIDY4MjQzLCA2ODI1NCwgNjgyNjYsIDY4Mjc3LCA2ODI4NywgNjgyOTYsIDY4MzA2LCAKKyAgICA2ODMxNywgNjgzMjcsIDY4MzM4LCA2ODM1MCwgNjgzNjEsIDY4MzcxLCA2ODM4MiwgNjgzOTQsIDY4NDA1LCA2ODQxNywgCisgICAgNjg0MzAsIDY4NDQyLCA2ODQ1MywgNjg0NjMsIDY4NDcyLCA2ODQ4MCwgNjg0ODksIDY4NDk5LCA2ODUwOCwgNjg1MTgsIAorICAgIDY4NTI5LCA2ODUzOSwgNjg1NDgsIDY4NTU4LCA2ODU2OSwgNjg1NzksIDY4NTkwLCA2ODYwMiwgNjg2MTMsIDY4NjIzLCAKKyAgICA2ODYzMiwgNjg2NDIsIDY4NjUzLCA2ODY2MywgNjg2NzQsIDY4Njg2LCA2ODY5NywgNjg3MDcsIDY4NzE4LCA2ODczMCwgCisgICAgNjg3NDEsIDY4NzUzLCA2ODc2NiwgNjg3NzgsIDY4Nzg5LCA2ODc5OSwgNjg4MDgsIDY4ODE4LCA2ODgyOSwgNjg4MzksIAorICAgIDY4ODUwLCA2ODg2MiwgNjg4NzMsIDY4ODgzLCA2ODg5NCwgNjg5MDYsIDY4OTE3LCA2ODkyOSwgNjg5NDIsIDY4OTU0LCAKKyAgICA2ODk2NSwgNjg5NzUsIDY4OTg2LCA2ODk5OCwgNjkwMDksIDY5MDIxLCA2OTAzNCwgNjkwNDYsIDY5MDU3LCA2OTA2OSwgCisgICAgNjkwODIsIDY5MDk0LCA2OTEwNywgNjkxMjEsIDY5MTM0LCA2OTE0NiwgNjkxNTcsIDY5MTY3LCA2OTE3NiwgNjkxODQsIAorICAgIDY5MTkxLCA2OTE5NiwgODA1OCwgNjkyMDMsIDMyNTkzLCA2OTIwOCwgNjkyMTMsIDMyNTk4LCA2OTIxOSwgMjA5MjksIAorICAgIDMyNjAzLCA2OTIyNCwgNjkyMzAsIDY5MjM4LCA2OTI0NCwgNjkyNTAsIDY5MjU3LCA2OTI2NCwgNjkyNjksIDY5MjczLCAKKyAgICA2OTI3NiwgNjkyODAsIDY5Mjg5LCA2OTI5NSwgNjkzMDcsIDY5MzE4LCA2OTMyMiwgMzA4MSwgODAzMywgNjkzMjcsIAorICAgIDY5MzMwLCA2OTMzMiwgNjkzMzYsIDY5MzQwLCA2OTM0NCwgNjkzNTAsIDY5MzU1LCAyNTk0NCwgNjkzNjAsIDY5MzY0LCAKKyAgICA2OTM2NywgNjkzNzIsIDY5Mzc2LCA2OTM4MywgNjkzODksIDY5MzkzLCA2MTcwLCA2OTM5NywgMzI2MjAsIDY5NDAyLCAKKyAgICA2OTQwOSwgNjk0MTgsIDY5NDI2LCA2OTQzNywgNjk0NDUsIDY5NDUzLCA2OTQ2MCwgNjk0NjcsIDY5NDczLCA2OTQ4NCwgCisgICAgMzI2MjUsIDY5NDg5LCA2OTUwMCwgNjk1MTIsIDY5NTIwLCA2OTUzMSwgNjk1NDAsIDY5NTUxLCA2OTU1NiwgNjk1NjQsIAorICAgIDI1NTYsIDY5NTY5LCAzNDI5NSwgNjk1ODIsIDY5NTg2LCA2OTU5OCwgNjk2MDYsIDY5NjExLCA2OTYxOSwgMTc0ODUsIAorICAgIDY5NjMwLCA2OTYzNiwgNjk2NDMsIDY5NjUxLCA2OTY1NywgMzI2MzUsIDY5NjYyLCAzOTE0LCA1ODI1NCwgNjk2NjksIAorICAgIDY5NjcyLCA2OTY4MCwgNjk2OTMsIDY5NzA2LCA2OTcxOSwgNjk3MzIsIDY5NzM5LCA2OTc1MCwgNjk3NTksIDQxNzI0LCAKKyAgICA0MTcyOSwgNjk3NjQsIDY5NzY4LCA2OTc3NiwgNjk3ODMsIDY5NzkyLCA2OTgwMCwgNjk4MDYsIDY5ODE1LCA2OTgyMywgCisgICAgNjk4MzEsIDY5ODM1LCA2OTg0NCwgNjk4NTMsIDY5ODYzLCA2OTg3NiwgNjk4ODksIDY5ODk5LCAzMjY0MCwgNjk5MDUsIAorICAgIDY5OTEyLCA2OTkxOCwgMzI2NDYsIDY5OTIzLCA2OTkyNiwgNjk5MzAsIDY5OTM4LCA2OTk0NywgNDE0NjIsIDY5OTU1LCAKKyAgICA2OTk2NCwgNjk5NzIsIDY5OTc5LCA2OTk4NywgNjk5OTcsIDcwMDA2LCA3MDAxNSwgNzAwMjQsIDcwMDMyLCA3MDA0MywgCisgICAgNzAwNTMsIDkzNjYsIDIxNTY3LCA3MDA2MiwgNzAwNjcsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg1LCA3MDA5MSwgCisgICAgNzAwOTYsIDcwMTAxLCA3MDEwNywgNzAxMTIsIDcwMTE3LCAyMTUzMiwgNzAxMjIsIDcwMTI5LCA3MDEzNywgNzAxNDUsIAorICAgIDcwMTUwLCA3MDE1NywgNzAxNjQsIDcwMTY5LCA3MDE3MywgNzAxNzcsIDcwMTg1LCA3MDE5MywgMzI2NjMsIDcwMTk5LCAKKyAgICA3MDIwNSwgNzAyMTcsIDcwMjIzLCA3MDIyNywgNzAyMzQsIDcwMjM5LCA3MDI1MCwgNzAyNjAsIDcwMjcwLCA3MDI4MiwgCisgICAgNzAyODgsIDcwMjk4LCA3MDMwOCwgMzI2OTAsIDcwMzE3LCA3MDMyNiwgNzAzMzIsIDcwMzQ0LCA3MDM1NSwgNzAzNjIsIAorICAgIDcwMzY3LCA3MDM3MSwgNzAzNzksIDcwMzg1LCA3MDM5MCwgNzAzOTUsIDcwNDAyLCA3MDQxMCwgNzA0MjIsIDcwNDMyLCAKKyAgICA3MDQ0MSwgNzA0NTAsIDcwNDU3LCAzNDE1NywgMjM4NTEsIDcwNDYzLCA3MDQ2OCwgNzA0NzIsIDcwNDc2LCA3MDQ4MSwgCisgICAgNzA0ODcsIDcwNDk4LCA3MDUxMSwgNzA1MTYsIDcwNTIzLCAzMjY5NSwgNzA1MjgsIDcwNTQwLCA3MDU0OSwgNzA1NTksIAorICAgIDcwNTcwLCA3MDU4MywgNzA1OTAsIDcwNTk5LCA3MDYwOCwgNzA2MTYsIDcwNjIxLCA3MDYyNywgMTA2OSwgNzA2MzIsIAorICAgIDcwNjM3LCA3MDY0MiwgNzA2NDcsIDcwNjUzLCA3MDY1OCwgNzA2NjMsIDcwNjY5LCA3MDY3NSwgNzA2ODAsIDcwNjg0LCAKKyAgICA3MDY4OSwgNzA2OTQsIDcwNjk5LCA1ODc2NiwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MTksIDcwNzI1LCA3MDczMSwgCisgICAgNzA3MzYsIDcwNzQwLCA3MDc0NSwgNzA3NTAsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzcyLCA3MDc3NywgNzA3ODIsIAorICAgIDcwNzg3LCA3MDc5MiwgNzA3OTYsIDcwODAyLCA3MDgwNywgNzA4MTYsIDcwODIxLCA3MDgyNiwgNzA4MzEsIDcwODM2LCAKKyAgICA3MDg0MCwgNzA4NDcsIDcwODUzLCAxNzEzNSwgMTcxNDIsIDcwODU4LCA3MDg2MiwgNzA4NjYsIDcwODcwLCA3MDg3NCwgCisgICAgNDU1MjQsIDcwODc4LCA3MDgwOCwgNzA4ODAsIDcwODkwLCAzMjcwNCwgNzA4OTMsIDcwOTAyLCA3MDkwOCwgNjE0MywgCisgICAgMzI3MDksIDcwOTEyLCA3MDkxOCwgNzA5MjMsIDcwOTI5LCA3MDkzNCwgNzA5MzgsIDcwOTQ1LCA3MDk1MCwgNzA5NjAsIAorICAgIDcwOTY5LCA3MDk3MywgNzA5NzksIDcwOTg1LCA3MDk5MSwgNzA5OTUsIDcxMDAzLCA3MTAxMCwgNzEwMTgsIDcxMDI2LCAKKyAgICAzMjcxNCwgNzEwMzMsIDcxMDM2LCA3MTA0MywgNzEwNDksIDcxMDU0LCA3MTA1OCwgNzEwNjQsIDcxMDcxLCA3MTA3NiwgCisgICAgNzEwODAsIDcxMDg5LCA3MTA5NywgNzExMDMsIDcxMTA4LCAzMjcxOSwgNzExMTUsIDcxMTIyLCA3MTEyOCwgNzExMzMsIAorICAgIDcxMTM5LCA3MTE0NiwgNzExNTIsIDIxMjk0LCAyNzQ1NSwgNzExNTgsIDcxMTYzLCA3MTE2OSwgNzExODEsIDcwODQxLCAKKyAgICA3MDg0OCwgMjE0NzAsIDcxMTkxLCA3MTE5NiwgNzEyMDMsIDcxMjA5LCA3MTIxNiwgNzEyMjIsIDcxMjMzLCA3MTIzOCwgCisgICAgOTExMCwgNzEyNDYsIDcxMjQ5LCA3MTI1NSwgNzEyNTksIDcxMjYzLCA3MTI2NiwgNzEyNzIsIDMyNDY4LCA2MTk0LCA5NjQsIAorICAgIDEzNDE5LCA3MTI3OSwgNzEyODUsIDcxMjkxLCA3MTI5NywgNzEzMDMsIDcxMzA5LCA3MTMxNSwgNzEzMjEsIDcxMzI3LCAKKyAgICA3MTMzMiwgNzEzMzcsIDcxMzQyLCA3MTM0NywgNzEzNTIsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzcyLCA3MTM3NywgCisgICAgNzEzODIsIDcxMzg3LCA3MTM5MiwgNzEzOTgsIDcxNDAzLCA3MTQwOCwgNzE0MTQsIDcxNDE5LCA3MTQyNCwgNzE0MzAsIAorICAgIDcxNDM2LCA3MTQ0MiwgNzE0NDgsIDcxNDU0LCA3MTQ2MCwgNzE0NjYsIDcxNDcyLCA3MTQ3OCwgNzE0ODMsIDcxNDg4LCAKKyAgICA3MTQ5NCwgNzE0OTksIDcxNTA0LCA3MTUxMCwgNzE1MTUsIDcxNTIwLCA3MTUyNSwgNzE1MzAsIDcxNTM1LCA3MTU0MCwgCisgICAgNzE1NDUsIDcxNTUwLCA3MTU1NSwgNzE1NjAsIDcxNTY1LCA3MTU3MCwgNzE1NzYsIDcxNTgxLCA3MTU4NiwgNzE1OTEsIAorICAgIDcxNTk3LCA3MTYwMiwgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjMsIDcxNjI4LCA3MTYzMywgNzE2MzgsIDcxNjQzLCAKKyAgICA3MTY0OCwgNzE2NTMsIDcxNjU4LCA3MTY2MywgNzE2NjgsIDcxNjczLCA3MTY3OCwgNzE2ODMsIDcxNjg4LCA3MTY5MywgCisgICAgNzE2OTgsIDcxNzAzLCA3MTcwOCwgNzE3MTMsIDcxNzE4LCA3MTcyNCwgNzE3MjksIDcxNzM0LCA3MTczOSwgNzE3NDQsIAorICAgIDcxNzQ5LCA3MTc1NCwgNzE3NTksIDE4NjQsIDE0MiwgNzE3NjQsIDcxNzY4LCA3MTc3MiwgNzE3NzcsIDcxNzg1LCA3MTc4OSwgCisgICAgNzE3OTYsIDcxODA0LCA3MTgwOCwgNzE4MjEsIDcxODI5LCA3MTgzMywgNzE4MzYsIDcxODQxLCA3MTg0NSwgNzE4NTAsIAorICAgIDcxODU0LCA3MTg2MiwgNzE4NjYsIDIwOTM3LCA3MTg3MSwgNzE4NzUsIDYwOTY3LCA3MTg3OSwgNzE4ODIsIDcxODkwLCAKKyAgICA3MTg5OCwgNzE5MDYsIDcxOTExLCA3MTkxOCwgNzE5MjQsIDcxOTMwLCA3MTkzNSwgNzE5NDIsIDcxOTQ3LCA3MTk1NSwgCisgICAgNjQ5NDcsIDcxOTYyLCA3MTk2NywgNzE5NzIsIDcxOTc2LCAxMTY0NSwgNzE5ODAsIDcxOTg1LCA3MTk5MCwgNzE5OTQsIAorICAgIDcxOTk3LCA3MjAwMywgNzIwMDcsIDcyMDE3LCA3MjAyNiwgNzIwMjksIDcyMDMzLCA3MjA0MCwgNzIwNTMsIDcyMDU5LCAKKyAgICA3MjA2NywgNzIwNzgsIDcyMDg5LCA3MjEwMCwgNzIxMTEsIDcyMTIwLCA3MjEyNiwgNzIxMzUsIDcyMTQzLCA3MjE1MywgCisgICAgNzIxNjYsIDcyMTczLCA3MjE4NCwgNzIxOTAsIDcyMTk1LCA3MjIwMCwgNzIyMDYsIDcyMjEyLCA3MjIyMiwgNzIyMzEsIAorICAgIDcwNTMwLCA3MjIzOSwgNzIyNDUsIDcyMjUzLCA3MjI1OSwgNzIyNjcsIDcyMjcwLCA3MjI3NCwgNzIyNzgsIDcyMjgxLCAKKyAgICA3MjI4NywgNzIyOTMsIDcyMzAxLCA3MjMxMywgNzIzMjUsIDcyMzMyLCA3MjMzNiwgNzIzNDcsIDcyMzU1LCA3MjM2MiwgCisgICAgNzIzNzQsIDcyMzgyLCA3MjM5MCwgNzIzOTcsIDcyNDAzLCA3MjQxMywgNzI0MjIsIDcyNDI3LCA3MjQzNywgNzI0NDYsIAorICAgIDQwNzg4LCA3MjQ1MywgNzI0NTcsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDgzLCA3MjQ4NywgNzI0OTcsIDcyNTA4LCAKKyAgICA3MjUxNiwgNzI1MjMsIDcyNTM1LCA3MjU0NywgNzI1NTYsIDY5NTcyLCA3MjU2MywgNzI1NzQsIDcyNTg4LCA3MjU5NiwgCisgICAgNzI2MDYsIDcyNjEzLCA3MjYyMSwgNzI2MzMsIDcyNjQyLCA3MjY1MCwgNzI2NjAsIDcyNjcxLCA3MjY4MywgNzI2OTIsIAorICAgIDcyNzAyLCA3MjcwOSwgNzI3MTgsIDcyNzMzLCA3Mjc0MSwgNzI3NTEsIDcyNzYwLCA3Mjc2OCwgNzI3ODEsIDcyNzk2LCAKKyAgICA3MjgwMCwgNzI4MDksIDcyODIxLCA3MjgzMiwgNzI4NDMsIDcyODU0LCA3Mjg2NCwgNzI4NzUsIDcyODgzLCA3Mjg4OSwgCisgICAgNzI4OTksIDcyOTA3LCA3MjkxMywgMjkwMjgsIDcyOTE4LCA3MjkyNCwgNzI5MjksIDcyOTM2LCA5NzA4LCAxNzUwNSwgCisgICAgNzI5NDIsIDcyOTUxLCA3Mjk1NiwgNzI5NjAsIDcyOTY3LCA3Mjk3MywgNzI5NzgsIDcyOTgzLCA3Mjk5MSwgNzI5OTksIAorICAgIDczMDAzLCA3MzAwNiwgNzMwMDksIDczMDExLCA3MzAxOCwgNzMwMjQsIDczMDM1LCA3MzA0MCwgNzMwNDQsIDczMDUxLCAKKyAgICA3MzA1NywgNzMwNjIsIDczMDcwLCA2NTQ0NiwgNjU0NTYsIDczMDc2LCA3MzA4MywgNzMwOTMsIDEwNjE4LCA3MzEwMCwgCisgICAgNzMxMDUsIDI5MjI0LCA3MzExNCwgNzMxMTksIDczMTI2LCA3MzEzNiwgNzMxNDQsIDczMTUyLCA3MzE2MSwgNzMxNjcsIAorICAgIDczMTczLCA3MzE4MCwgNzMxODcsIDczMTkyLCA3MzE5NiwgNzMyMDQsIDczMjA5LCA3MzIxNCwgNzMyMjIsIDczMjI5LCAKKyAgICA3MzIzNCwgNzMyNDAsIDczMjQzLCA3MzI0NywgNzMyNTYsIDcxODE2LCA3MzI2NSwgNzMyNjksIDczMjc1LCA3MzI4NiwgCisgICAgNzMyOTYsIDE3NTE0LCA3MzMwNywgNzMzMTUsIDE3NTI2LCA3MzMyMiwgNzMzMjYsIDczMzM1LCAyNzM0MSwgNzMzNDIsIAorICAgIDczMzQ2LCA3MzM1MSwgNzMzNjgsIDczMzgwLCAxMDU3NiwgNzMzOTIsIDczMzk3LCA3MzQwMiwgNzM0MDcsIDIxMDEwLCAKKyAgICA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgNzM0MzIsIDU4NDYsIDIxMDE0LCA3MzQzNywgNzM0NDIsIDczNDQ4LCAKKyAgICA3MzQ1NSwgNzM0NjAsIDczNDY1LCA3MzQ3MSwgNzM0NzcsIDczNDgzLCA3MzQ4OCwgNzM0OTQsIDczNDk4LCA3MzUxMiwgCisgICAgNzM1MjAsIDczNTI4LCA3MzUzNCwgNzM1MzksIDczNTQ2LCA3MzU1NiwgNzM1NjUsIDczNTcwLCA3MzU3NSwgNzM1ODMsIAorICAgIDczNTg4LCA3MzU5NCwgNzM1OTksIDczNjA4LCA1OTgyMywgNzM2MTMsIDczNjE2LCA3MzYzNCwgNzM2NTMsIDczNjY2LCAKKyAgICA3MzY4MCwgNzM2OTYsIDczNzAzLCA3MzcxMCwgNzM3MTYsIDczNzIzLCA3MzcyOCwgNzM3MzQsIDczNzQwLCA3Mzc0OCwgCisgICAgNzM3NTQsIDczNzU5LCA3Mzc2NCwgNzM3ODAsIDEwNTg5LCA3Mzc5NCwgNzM4MDEsIDczODA5LCA3MzgxNSwgNzM4MTksIAorICAgIDczODIyLCA3MzgyNywgNzM4MzIsIDczODM5LCA3Mzg0NCwgNzM4NTMsIDczODU4LCA3Mzg2NCwgNzM4NzMsIDczODgyLCAKKyAgICA3Mzg4NywgNzM4OTEsIDczODk5LCA3MzkwOCwgMTE2NzQsIDczOTE3LCA3MzkyNSwgNzM5MzAsIDczOTM2LCAxMTY4NSwgCisgICAgNzM5NDEsIDczOTQ0LCA3Mzk0OSwgNzM5NTksIDczOTY4LCA3Mzk3MywgNzM5NzksIDczOTg0LCA3Mzk5MiwgNzM5OTksIAorICAgIDc0MDEwLCA3NDAyMCwgNzQwMjUsIDY0ODc1LCA3NDAzMCwgNzQwMzYsIDc0MDQxLCA3NDA0OCwgNzQwNTcsIDc0MDY1LCAKKyAgICA3NDA3MSwgNzQwNzcsIDc0MDg0LCA3NDA5MCwgNzQwOTQsIDE2OTYwLCAzMDU1LCA3NDA5OSwgNzQxMDMsIDc0MTA3LCAKKyAgICA3NDExMywgNzQxMjIsIDc0MTI4LCA3NDEzNSwgNzQxMzksIDc0MTYwLCA3NDE4MiwgNzQxOTgsIDc0MjE1LCA3NDIzNCwgCisgICAgNzQyNDMsIDc0MjUzLCA3NDI2MCwgNzQyNjcsIDI3MjI4LCA3NDI3MywgNzQyNzcsIDc0Mjg1LCA3NDI5NywgNzQzMDMsIAorICAgIDc0MzExLCA3NDMxNSwgNzQzMjMsIDc0MzMwLCA3NDMzNCwgNzQzNDAsIDc0MzQ2LCA3NDM1MSwgMzU2MywgNDE5MjQsIAorICAgIDc0MzU3LCA3NDM2MSwgNzQzNjUsIDc0MzY5LCA3NDM3NCwgNzQzNzksIDc0Mzg0LCA3NDM5MCwgNzQzOTYsIDc0NDAyLCAKKyAgICA3NDQwOSwgNzQ0MTUsIDc0NDIyLCA3NDQyOCwgNzQ0MzQsIDc0NDM5LCA3NDQ0NSwgNzQ0NTAsIDc0NDU0LCA3NDQ1OSwgCisgICAgNzQ0NjMsIDc0NDY4LCA0MTkzOSwgNzQ0NzIsIDc0NDc3LCA3NDQ4NSwgNzQ0ODksIDc0NDk0LCA3NDUwMSwgNzQ1MTAsIAorICAgIDc0NTE2LCA3NDUyMCwgNzQ1MjcsIDc0NTMxLCA3NDUzNCwgNzQ1NDEsIDc0NTUwLCA3NDU1NSwgNzQ1NTksIDc0NTY3LCAKKyAgICA3NDU3NiwgNzQ1ODAsIDc0NTg4LCA3NDU5NCwgNzQ1OTksIDc0NjA0LCA3NDYxMCwgNzQ2MTYsIDc0NjIxLCA3NDYyNSwgCisgICAgNzQ2MzEsIDc0NjM2LCA3NDY0MCwgNzQ2NDQsIDc0NjQ3LCA3NDY1MiwgNzQ2NjAsIDc0NjcwLCA3NDY3NSwgMzk0MTYsIAorICAgIDc0NjgzLCA3NDY5NSwgNzQ2OTksIDc0NzA1LCA3NDcxNywgNzQ3MjgsIDc0NzM1LCA3NDc0MSwgNzQ3NDgsIDc0NzYwLCAKKyAgICA3NDc2NywgNzQ3NzMsIDIxMDg4LCA3NDc3NywgNzQ3ODMsIDc0NzkwLCA3NDc5NiwgNzQ4MDIsIDc0ODA3LCA3NDgxMiwgCisgICAgNzQ4MTcsIDc0ODI2LCA3MDMzLCA3NDgzMSwgMTY0MjYsIDc0ODM3LCA3NDg0MSwgNzQ4NDUsIDc0ODQ5LCA3NDg1NywgCisgICAgNzQ4NjYsIDc0ODcwLCA3NDg3NywgNzQ4ODYsIDc0ODk5LCA3NDkwNSwgNzQ0NjQsIDMwMDg4LCA3NDkxMCwgNzQ5MTIsIAorICAgIDc0OTE3LCA3NDkyMiwgNzQ5MjcsIDc0OTMyLCA3NDkzNywgNzQ5NDIsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCAKKyAgICA3NDk2NywgNzQ5NzIsIDc0OTc3LCA3NDk4MiwgNzQ5ODgsIDc0OTkzLCA3NDk5OCwgNzUwMDMsIDc1MDA4LCA3NTAxMywgCisgICAgNzUwMTgsIDc1MDIzLCA3NTAyOCwgNzUwMzQsIDc1MDQwLCA3NTA0NiwgNzUwNTEsIDc1MDU2LCA3NTA2OCwgNzUwNzMsIAorICAgIDE4NzAsIDQ2LCA3NTA3OCwgNzUwODMsIDMyNzQ2LCA3NTA4NywgMzI3NTEsIDMyNzU2LCAzMjc2MiwgMzI3NjcsIDc1MDkxLCAKKyAgICAzMjc3MiwgMjIwODMsIDc1MTEzLCA3NTExNywgNzUxMjEsIDc1MTI2LCA3NTEzMCwgMzI3NzYsIDc1MTM0LCA3NTE0MiwgCisgICAgMzI3ODEsIDc1MTQ5LCA3NTE1MiwgNzUxNTcsIDc1MTYxLCA5NTQzLCA3NTE3MCwgMzI3ODYsIDIxOTQ1LCA3NTE3MywgCisgICAgNzUxNzcsIDE0MjgsIDc1MTgyLCAzMjc5NywgNzUxODUsIDc1MTkwLCAyNTczNywgMjU3NDcsIDM1MjU4LCA3NTE5NSwgCisgICAgNzUyMDAsIDc1MjA1LCA3NTIxMCwgNzUyMTYsIDc1MjIxLCA3NTIzMCwgNzUyMzUsIDc1MjQyLCA3NTI0OCwgNzUyNTMsIAorICAgIDc1MjU4LCA3NTI2MywgNzUyNzMsIDc1MjgyLCA3NTI4NywgNzUyOTUsIDc1Mjk5LCA3NTMwNywgMzI2MTEsIDM3MzE3LCAKKyAgICA3NTMxNCwgNzUzMjAsIDc1MzI1LCA3NTMzMCwgMTIwMTYsIDc1MzM1LCA3NTM0MSwgNzUzNDYsIDc1MzUzLCA3NTM1OSwgCisgICAgNzUzNjQsIDc1MzcyLCA3NTM4MiwgNzUzOTIsIDc1Mzk4LCA3NTQwMywgNzU0MDksIDE3NTM2LCA3NTQxNiwgMzYwNzMsIAorICAgIDc1NDI5LCA3NTQzNCwgNzU0NDAsIDMwOTkzLCA3NTQ1MywgNzU0NTksIDc1NDYzLCA3NTQ3MiwgNzU0NzksIDc1NDg1LCAKKyAgICA3NTQ5MywgNzU1MDIsIDc1NTA5LCA3NTUxNSwgNzU1MTgsIDc1NTIyLCAyNTg3OCwgNzU1MjYsIDc1NTMzLCA3NTUzOSwgCisgICAgNzU1NDcsIDc1NTUyLCAyMzk5NCwgNzU1NTgsIDc1NTYxLCA3NTU2OSwgNzU1NzcsIDc1NTkxLCA3NTU5OCwgNzU2MDQsIAorICAgIDc1NjExLCA3NTYxNywgMzI4MTEsIDc1NjIxLCA3NTYyOCwgNzU2MzYsIDc1NjQ0LCA3NTY1MCwgMzI4MTYsIDc1NjU4LCAKKyAgICA3NTY2NCwgNzU2NjksIDc1Njc5LCA3NTY4NSwgNzU2OTQsIDMwODMwLCAzNDcxNiwgNzU3MDIsIDc1NzA3LCA3NTcxMiwgCisgICAgNzU3MTYsIDc1NzIxLCA3NTcyNSwgNzU3MzMsIDE0OTIwLCAzOTQyOSwgNzU3MzgsIDc1NzQzLCAzMjgyMSwgNjIyNjksIAorICAgIDc1NzQ3LCA3NTc1MiwgNzU3NTYsIDc1NzY1LCA3NTc3MywgNzU3NzksIDc1Nzg0LCA3NTc5MCwgNzU3OTcsIDc1ODAzLCAKKyAgICA3NTgwOCwgNzU4MTMsIDc1ODIyLCA3NTgzNCwgNzU4NDksIDMzMDgzLCA3NTg1NSwgMTY1NDUsIDMyODI1LCA3NTg1OSwgCisgICAgNzU4NjYsIDI0MTA0LCA3NTg3MiwgNzU4NzksIDc1ODg4LCA3NTg5NSwgNzU5MDQsIDc1OTEwLCA3NTkxNSwgNzU5MjMsIAorICAgIDc1OTI5LCAzMjgzNSwgNzU5MzQsIDc1OTQzLCA3NDcyMywgNzU5NTIsIDc1OTU5LCA3NTk2NSwgNzU5NzEsIDc1OTgxLCAKKyAgICA3NTk4OSwgNzU5OTYsIDc2MDAwLCAzMjg0MCwgNzYwMDMsIDMyODQ2LCAzMjg1MiwgNzYwMDgsIDc2MDE2LCA3NjAyNCwgCisgICAgNzYwMzQsIDc2MDQzLCA3NjA1MSwgNzYwNTgsIDc2MDY4LCAzMjg1NywgNzYwNzIsIDc2MDc0LCA3NjA3OCwgNzYwODMsIAorICAgIDc2MDg3LCA3NjA5MSwgNzYwOTcsIDc2MTAyLCA3NjEwNiwgNzYxMTcsIDc2MTIyLCA3NjEyNywgMzA2MCwgNzYxMzEsIAorICAgIDc2MTM4LCA3NjE0MiwgNzYxNTEsIDc2MTU5LCA3NjE2NiwgNzYxNzEsIDc2MTc2LCA2MjMxNSwgNzYxODAsIDc2MTgzLCAKKyAgICA3NjE4OSwgNzYxOTcsIDc2MjAzLCA3NjIwNywgNzYyMTIsIDc2MjE5LCA3NjIyNCwgNzYyMzAsIDM0NzQ3LCA3NjIzNSwgCisgICAgNzYyMzgsIDc2MjQzLCA3NjI0NywgNzYyNTIsIDc2MjU3LCA3NjI2MSwgNzYyNjksIDc2MjczLCAyNTc1NiwgMjU3NjUsIAorICAgIDc2Mjc5LCA3NjI4NSwgNzYyOTEsIDc2Mjk2LCA3NjMwMCwgNzYzMDMsIDc2MzEzLCA3NjMyMiwgNzYzMjcsIDc2MzMzLCAKKyAgICA3NjM0MCwgNzYzNDYsIDc2MzUwLCA3NjM1OCwgNzYzNjMsIDM0NzUzLCA3NjM2NywgNzYzNzUsIDc2MzgxLCA3NjM4OCwgCisgICAgNzYzOTMsIDc2Mzk3LCA3NjQwMiwgNTg0NDAsIDM0NzU5LCA3NjQwOCwgNzY0MTMsIDc2NDE3LCA3NjQyMiwgNzY0MjcsIAorICAgIDc2NDMyLCA3NjQzNiwgNzY0NDEsIDc2NDQ2LCA3NjQ1MiwgNzY0NTcsIDc2NDYyLCA3NjQ2OCwgNzY0NzQsIDc2NDc5LCAKKyAgICA3NjQ4MywgNzY0ODgsIDc2NDkzLCA3NjQ5OCwgNzY1MDIsIDI0MTAzLCA3NjUwNywgNzY1MTIsIDc2NTE4LCA3NjUyNCwgCisgICAgNzY1MzAsIDc2NTM1LCA3NjUzOSwgNzY1NDQsIDc2NTQ5LCA3NjU1NCwgNzY1NTgsIDc2NTYzLCA3NjU2OCwgNzY1NzMsIAorICAgIDc2NTc4LCA3NjU4MiwgMzI4NjUsIDc2NTkwLCA3NjU5NCwgNzY2MDIsIDc2NjEwLCA3NjYyMSwgNzY2MjYsIDc2NjMwLCAKKyAgICAyMjM5NywgNzY2MzUsIDc2NjQxLCA3NjY1MSwgNzY2NTgsIDc2NjYzLCA3NjY3MiwgNzY2NzcsIDc2NjgxLCA3NjY4NiwgCisgICAgNzY2OTQsIDc2NzAyLCA3NjcwOSwgNjUxMDksIDc2NzE1LCA3NjcyMywgNzY3MzAsIDc2NzQxLCA3Njc0NywgNzY3NTEsIAorICAgIDc2NzU3LCAzMjg3NSwgNzY3NjAsIDc2NzY3LCA3Njc3NSwgNzY3ODAsIDM5NjIwLCA3Njc4NCwgNzY3ODksIDc2Nzk2LCAKKyAgICA3NjgwMSwgODk5MiwgNzY4MDUsIDc2ODEzLCA3NjgyMCwgNzY4MjcsIDc2ODMzLCA3Njg0NywgNjMzODEsIDc2ODU1LCAKKyAgICA3Njg2MSwgNzY4NjUsIDc2ODY4LCA3Njg3NiwgNzY4ODMsIDc2ODg4LCA3NjkwMSwgNzY5MDgsIDc2OTEyLCA3NjkxOSwgCisgICAgNzY5MjQsIDYwODYwLCA3NjkyOSwgNzY5MzIsIDc2OTM5LCA3Njk0NSwgNzY5NDksIDc2OTU3LCA3Njk2NiwgNzY5NzYsIAorICAgIDc2OTg2LCA3Njk5NSwgNzcwMDMsIDc3MDE0LCA3NzAxOSwgNzcwMjMsIDc3MDI4LCA3NzAzMiwgMzUzODksIDc3MDQwLCAKKyAgICAyMTM1NywgMzUzOTgsIDc3MDQ1LCA3NzA1MCwgNzcwNTUsIDc3MDYwLCA3NzA2NSwgNzcwNzAsIDc3MDc1LCA3NzA3OSwgCisgICAgNzcwODQsIDc3MDg5LCA3NzA5NCwgNzcwOTksIDc3MTA0LCA3NzEwOSwgNzcxMTMsIDc3MTE4LCA3NzEyMywgNzcxMjcsIAorICAgIDc3MTMxLCA3NzEzNSwgNzcxMzksIDc3MTQ0LCA3NzE0OSwgNzcxNTMsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIDc3MTcxLCAKKyAgICA3NzE3NiwgNzcxODEsIDc3MTg2LCA3NzE5MCwgNzcxOTUsIDc3MjAwLCA3NzIwNCwgNzcyMDksIDc3MjE0LCA3NzIxOSwgCisgICAgNzcyMjQsIDc3MjI5LCA3NzIzNCwgNzcyMzksIDc3MjQ0LCA3NzI0OSwgNzcyNTQsIDc3MjU5LCA3NzI2NCwgNzcyNjksIAorICAgIDc3Mjc0LCA3NzI3OSwgNzcyODQsIDc3Mjg5LCA3NzI5NCwgNzcyOTksIDc3MzA0LCA3NzMwOCwgNzczMTMsIDc3MzE4LCAKKyAgICA3NzMyMywgNzczMjgsIDc3MzMzLCA3NzMzOCwgNzczNDMsIDc3MzQ4LCA3NzM1MywgNzczNTgsIDc3MzYzLCA3NzM2NywgCisgICAgNzczNzIsIDc3Mzc2LCA3NzM4MSwgNzczODYsIDc3MzkxLCA3NzM5NiwgNzc0MDEsIDc3NDA2LCA3NzQxMSwgNzc0MTYsIAorICAgIDc3NDIxLCA3NzQyNSwgNzc0MjksIDc3NDM0LCA3NzQzOSwgNzc0NDMsIDc3NDQ4LCA3NzQ1MywgNzc0NTcsIDc3NDYyLCAKKyAgICA3NzQ2NywgNzc0NzIsIDc3NDc3LCA3NzQ4MSwgNzc0ODYsIDc3NDkxLCA3NzQ5NSwgNzc1MDAsIDc3NTA0LCA3NzUwOCwgCisgICAgNzc1MTIsIDc3NTE2LCA3NzUyMSwgNzc1MjUsIDc3NTI5LCA3NzUzMywgNzc1MzcsIDc3NTQxLCA3NzU0NSwgNzc1NDksIAorICAgIDc3NTUzLCA3NzU1NywgNzc1NjIsIDc3NTY3LCA3NzU3MiwgNzc1NzcsIDc3NTgyLCA3NzU4NywgNzc1OTIsIDc3NTk3LCAKKyAgICA3NzYwMiwgNzc2MDcsIDc3NjExLCA3NzYxNSwgNzc2MTksIDc3NjIzLCA3NzYyNywgNzc2MzEsIDc3NjM2LCA3NzY0MCwgCisgICAgNzc2NDUsIDc3NjQ5LCA3NzY1NCwgNzc2NTksIDc3NjYzLCA3NzY2NywgNzc2NzIsIDc3Njc2LCA3NzY4MCwgNzc2ODQsIAorICAgIDc3Njg4LCA3NzY5MiwgNzc2OTYsIDc3NzAwLCA3NzcwNCwgNzc3MDgsIDc3NzEyLCA3NzcxNiwgNzc3MjAsIDc3NzI0LCAKKyAgICA3NzcyOCwgNzc3MzMsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NywgCisgICAgNzc3NzEsIDc3Nzc1LCA3Nzc3OSwgNzc3ODMsIDc3Nzg3LCA3Nzc5MSwgNzc3OTYsIDc3ODAwLCA3NzgwNSwgNzc4MDksIAogICAgIDc3ODEzLCA3NzgxNywgNzc4MjEsIDc3ODI1LCA3NzgyOSwgNzc4MzMsIDc3ODM3LCA3Nzg0MSwgNzc4NDUsIDc3ODQ5LCAKLSAgICA3Nzg1MywgNzc4NTcsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc1LCA3Nzg4MCwgNzc4ODQsIDc3ODg4LCA3Nzg5MiwgCi0gICAgNzc4OTYsIDc3OTAwLCA3NzkwNCwgNzc5MDgsIDc3OTEyLCA3NzkxNywgNzc5MjEsIDc3OTI2LCA3NzkzMCwgNzc5MzUsIAotICAgIDc3OTM5LCA3Nzk0NCwgNzc5NDgsIDc3OTU0LCA3Nzk1OSwgNzc5NjMsIDc3OTY4LCA3Nzk3MiwgNzc5NzcsIDc3OTgxLCAKLSAgICA3Nzk4NiwgNzc5OTAsIDc3OTk1LCAxNTIxLCA3Nzk5OSwgMjgyNCwgMTc1OSwgMTc2NCwgNzgwMDMsIDc4MDA3LCAyODI4LCAKLSAgICA3ODAxMSwgMTM5NywgNzgwMTYsIDEzNDIsIDc4MDIwLCAyODQwLCA3ODAyNCwgNzgwMzEsIDc4MDM4LCA3ODA1MiwgMjg0NCwgCi0gICAgNzEzMSwgNzgwNjEsIDc4MDY5LCA3ODA3NiwgNzgwODcsIDc4MDk2LCA3ODEwMywgNzgxMTUsIDc4MTI4LCA3ODE0MSwgCi0gICAgNzgxNTIsIDc4MTU3LCA3ODE2NCwgNzgxNzYsIDc4MTgwLCAyODQ4LCAxMTc0MCwgNzgxOTAsIDc4MTk1LCA3ODIwNCwgCi0gICAgNzgyMTQsIDI4NTIsIDc4MjE5LCA3ODIyMywgNzgyMjgsIDc4MjM1LCA3ODI0MSwgNzgyNDksIDc4MjYxLCAxMzQ3LCAKLSAgICAxMzAzNSwgNzgyNzEsIDc4Mjc1LCA3ODI4MSwgNzgyOTUsIDc4MzA3LCA3ODMxOSwgNzgzMjksIDc4MzM4LCA3ODM0NywgCi0gICAgNzgzNTYsIDc4MzY0LCA3ODM3NSwgNzgzODMsIDQwNTEsIDc4MzkzLCA3ODQwNCwgNzg0MTMsIDc4NDE5LCA3ODQzNCwgCi0gICAgNzg0NDEsIDc4NDQ3LCAzNTQ4OSwgNzg0NTIsIDI4NzYsIDEzMDM5LCA3ODQ1NiwgNzg0NjMsIDg5MzAsIDc4NDcyLCAyODgxLCAKLSAgICAzMjMzNiwgNzg0NzgsIDYwNTcyLCA3ODQ4NSwgNzg0OTEsIDc4NTAyLCA3ODUwOCwgNzg1MTUsIDc4NTIxLCA3ODUyOSwgCi0gICAgNzg1MzYsIDc4NTQyLCA3ODU1MiwgNzg1NjEsIDc4NTcyLCA3ODU3OSwgNzg1ODUsIDc4NTk1LCA3ODYwMywgNzg2MDksIAotICAgIDc4NjI0LCA3ODYzMCwgNzg2MzUsIDc4NjQyLCA3ODY0NSwgNzg2NTEsIDc4NjU4LCA3ODY2NCwgNzg2NzIsIDc4NjgxLCAKLSAgICA3ODY4OSwgNzg2OTUsIDc4NzA0LCA0MTQyNywgNzg3MTgsIDc4NzIzLCA3ODcyOSwgMTQ3NDQsIDc4NzM0LCA3ODc0NywgCi0gICAgNzg3NTYsIDc4NzY0LCA3ODc3MSwgNzg3NzUsIDc4Nzc5LCA3ODc4MiwgNzg3ODksIDc4Nzk2LCA3ODgwNCwgNzg4MTIsIAotICAgIDc4ODIxLCA3ODgyOSwgMTQ2NzEsIDc4ODM3LCA3ODg0MiwgNzg4NDYsIDc4ODU4LCA3ODg2NSwgNzg4NzQsIDc0OCwgCi0gICAgNzg4ODQsIDc4ODkzLCA3ODkwNCwgMjg5NywgNzg5MDgsIDc4OTEyLCA3ODkxOCwgNzg5MzEsIDc4OTQzLCA3ODk1MywgCi0gICAgNzg5NjIsIDc4OTc0LCAyNjM1MiwgNzg5ODUsIDc4OTkzLCA3OTAwMiwgNzkwMTMsIDc5MDI0LCA3OTAzNCwgNzkwNDQsIAotICAgIDc5MDUzLCA3OTA2MSwgMTEzMDUsIDc5MDY4LCA3OTA3MiwgNzkwNzUsIDc5MDgwLCA3OTA4NSwgNzkwODksIDc5MDk1LCAKLSAgICAxMzUyLCAxMTgxMSwgNzkxMDIsIDc5MTEzLCA3OTEyMiwgNzkxMzAsIDc5MTM5LCA3OTE0NywgNzkxNjMsIDc5MTc0LCAKLSAgICA3OTE4MywgNzkxOTEsIDc5MjAzLCA3OTIxNCwgNzkyMzAsIDc5MjQwLCA3OTI2MSwgNzkyNzQsIDc5MjgyLCA3OTI4OSwgCi0gICAgMTQ4NTUsIDc5MzAyLCA3OTMwNywgNzkzMTMsIDU5MDgsIDc5MzE5LCA3OTMyMiwgNzkzMjksIDc5MzM5LCA4MTc2LCAKLSAgICA3OTM0NiwgNzkzNTEsIDc5MzU2LCA3OTM2MSwgNzkzNjksIDc5Mzc4LCA3OTM4NiwgOTc0OSwgOTc1OCwgNzkzOTEsIAotICAgIDc5NDAyLCA3OTQwNywgNzk0MTMsIDI5MTMsIDI5MTgsIDc5NDE5LCAxMDg3MiwgNzk0MjUsIDc5NDMyLCA3OTQzOSwgCi0gICAgNzk0NTIsIDIyNTEsIDY4LCA3OTQ1NywgNzk0NjIsIDc5NDcyLCA3OTQ3OCwgNzk0ODcsIDc5NDk1LCA3OTUwNSwgNzk1MDksIAotICAgIDc5NTE0LCA3OTUxOCwgNzk1MzAsIDI5NDEsIDc5NTM4LCA3OTU0NiwgNzk1NTEsIDc5NTYyLCA3OTU3MywgNzk1ODIsIAotICAgIDc5NTg3LCA3OTU5MywgNzk1OTgsIDc5NjA4LCA3OTYxOCwgNzk2MjMsIDc5NjI5LCA3OTYzNCwgNzk2NDMsIDIxMzk3LCAKLSAgICA3OTY0NywgNDEyOCwgMjAsIDc5NjUyLCA3OTY2MSwgNzk2NjgsIDc5Njc1LCA3OTY4MSwgNzk2ODcsIDg2NCwgNzk2OTIsIAotICAgIDc5Njk3LCA2MDkwMCwgNzk3MDIsIDc5NzA3LCA3OTcxMywgNzk3MTksIDc5NzI3LCA3OTczMiwgNzk3MzksIDc5NzQ1LCAKLSAgICA3OTc1MCwgMzgwMDEsIDQxMzIxLCA3OTc1NiwgMjk0NSwgMzIsIDc5NzY2LCA3OTc3OSwgNzk3ODQsIDc5NzkyLCA3OTc5NywgCi0gICAgNzk4MDMsIDI5NjcsIDI4Mjg5LCA3OTgwOCwgNzk4MTYsIDc5ODIzLCA3OTgyOCwgNTg2NDUsIDYxOTAzLCA3OTgzNywgCi0gICAgNzk4NDEsIDE3MDQsIDE4MTMsIDc5ODQ2LCA3OTg1MSwgNzk4NTgsIDE4MTcsIDI0NywgNzk4NjUsIDc5ODcxLCAyOTg5LCAKLSAgICA3OTg3NiwgNzk4ODEsIDc5ODg4LCAxODIxLCA3OTg5MywgNzk4OTksIDc5OTA0LCA3OTkxNiwgNjExOSwgNzk5MjYsIDE4MjgsIAotICAgIDc5OTMyLCA3OTkzNywgNzk5NDQsIDc5OTUxLCA3OTk2NiwgNzk5NzMsIDc5OTg0LCA3OTk5MiwgMjYxOCwgNzk5OTYsIAotICAgIDgwMDA4LCA4MDAxMywgODAwMTcsIDgwMDIzLCAyODExNCwgMjI1NiwgODAwMjcsIDgwMDM4LCA4MDA0MiwgODAwNDYsIAotICAgIDgwMDUyLCA4MDA1NiwgODAwNjUsIDgwMDY5LCA4MDA4MCwgODAwODQsIDIzMDIsIDMyMTY1LCA4MDA4OCwgODAwOTgsIAotICAgIDMwODAsIDkzNjQsIDgwMTA2LCA4MDExMSwgODAxMTUsIDgwMTI0LCA4MDEzMSwgODAxMzcsIDMwNTAsIDE3MTM5LCA4MDE0MSwgCi0gICAgODAxNTQsIDgwMTcyLCA4MDE3NywgODAxODUsIDgwMTkzLCA4MDIwMywgOTk3OCwgMTMxNDcsIDgwMjE1LCA4MDIyOCwgCi0gICAgODAyMzUsIDgwMjQyLCA4MDI1OCwgODAyNjUsIDgwMjcxLCAxMDk1LCA4MDI3OCwgODAyODUsIDgwMjk1LCA4MDMwNCwgCi0gICAgODAzMTYsIDQyMjkxLCA4MDMyNCwgMzA2NCwgMTIwMjMsIDgwMzI3LCA4MDMzNSwgODAzMzksIDc4MjMxLCAzMDY4LCAKLSAgICA4MDM0MywgMjExNzgsIDEyMDM5LCAzNzU2LCA4MDM0NywgMzA3NCwgODAzNTEsIDgwMzYxLCA4MDM2NywgODAzNzMsIAotICAgIDgwMzc5LCA4MDM4NSwgODAzOTEsIDgwMzk3LCA4MDQwMywgODA0MDksIDgwNDE1LCA4MDQyMSwgODA0MjcsIDgwNDMzLCAKLSAgICA4MDQzOSwgODA0NDUsIDgwNDUxLCA4MDQ1NywgODA0NjMsIDgwNDY5LCA4MDQ3NSwgODA0ODEsIDgwNDg3LCA4MDQ5MywgCi0gICAgODA0OTksIDgwNTA1LCA4MDUxMSwgODA1MTgsIDgwNTI1LCA4MDUzMSwgODA1MzcsIDgwNTQzLCA4MDU0OSwgODA1NTUsIAotICAgIDgwNTYxLCAxMzU3LCAxNjA0OSwgMTIwNjEsIDgwNTY3LCA4MDU3MiwgODA1NzcsIDgwNTgyLCA4MDU4NywgODA1OTIsIAotICAgIDgwNTk3LCA4MDYwMiwgODA2MDcsIDgwNjEyLCA4MDYxNywgODA2MjIsIDgwNjI3LCA4MDYzMiwgODA2MzcsIDgwNjQyLCAKLSAgICA4MDY0NywgODA2NTIsIDgwNjU3LCA4MDY2MiwgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODIsIDgwNjg3LCA4MDY5MiwgCi0gICAgODA2OTgsIDgwNzAzLCA4MDcwOCwgODA3MTQsIDgwNzE5LCA4MDcyNSwgODA3MzAsIDgwNzM1LCA4MDc0MSwgODA3NDYsIAotICAgIDgwNzUxLCA4MDc1NiwgODA3NjEsIDgwNzY2LCA4MDc3MSwgODA3NzYsIDgwNzgxLCA4MDM2MiwgODAzNjgsIDgwMzc0LCAKLSAgICA4MDM4MCwgODAzODYsIDgwMzkyLCA4MDM5OCwgODA0MDQsIDgwNDEwLCA4MDQxNiwgODA0MjIsIDgwNDI4LCA4MDQzNCwgCi0gICAgODA0NDAsIDgwNDQ2LCA4MDc4NywgODA0NTIsIDgwNDU4LCA4MDQ2NCwgODA3OTMsIDgwNDcwLCA4MDQ3NiwgODA0ODIsIAotICAgIDgwNDg4LCA4MDQ5NCwgODA1MDAsIDgwNTA2LCA4MDUyNiwgODA3OTksIDgwODA1LCA4MDUzMiwgODA4MTEsIDgwNTM4LCAKLSAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MiwgMzA5MSwgMzA5NiwgODA4MTcsIDgwODIyLCA4MDgyNSwgODA4MzEsIAotICAgIDgwODM3LCA4MDg0NCwgODA4NDksIDgwODU0LCAyMzA3LCAKKyAgICA3Nzg1NCwgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgNzc4ODIsIDc3ODg2LCA3Nzg5MCwgCisgICAgNzc4OTQsIDc3ODk4LCA3NzkwMywgNzc5MDcsIDc3OTExLCA3NzkxNiwgNzc5MjEsIDc3OTI1LCA3NzkyOSwgNzc5MzMsIAorICAgIDc3OTM3LCA3Nzk0MSwgNzc5NDUsIDc3OTQ5LCA3Nzk1MywgNzc5NTgsIDc3OTYyLCA3Nzk2NywgNzc5NzEsIDc3OTc2LCAKKyAgICA3Nzk4MCwgNzc5ODUsIDc3OTg5LCA3Nzk5NSwgNzgwMDAsIDc4MDA0LCA3ODAwOSwgNzgwMTMsIDc4MDE4LCA3ODAyMiwgCisgICAgNzgwMjcsIDc4MDMxLCA3ODAzNiwgMTUyMSwgNzgwNDAsIDI4MjQsIDE3NTksIDE3NjQsIDc4MDQ0LCA3ODA0OCwgMjgyOCwgCisgICAgNzgwNTIsIDEzOTcsIDc4MDU3LCAxMzQyLCA3ODA2MSwgMjg0MCwgNzgwNjUsIDc4MDcyLCA3ODA3OSwgNzgwOTMsIDI4NDQsIAorICAgIDcxMzEsIDc4MTAyLCA3ODExMCwgNzgxMTcsIDc4MTI4LCA3ODEzNywgNzgxNDQsIDc4MTU2LCA3ODE2OSwgNzgxODIsIAorICAgIDc4MTkzLCA3ODE5OCwgNzgyMDUsIDc4MjE3LCA3ODIyMSwgMjg0OCwgMTE3NDcsIDc4MjMxLCA3ODIzNiwgNzgyNDUsIAorICAgIDc4MjU1LCAyODUyLCA3ODI2MCwgNzgyNjQsIDc4MjY5LCA3ODI3NiwgNzgyODIsIDc4MjkwLCA3ODMwMiwgMTM0NywgCisgICAgMTMwNDIsIDc4MzEyLCA3ODMxNiwgNzgzMjIsIDc4MzM2LCA3ODM0OCwgNzgzNjAsIDc4MzcwLCA3ODM3OSwgNzgzODgsIAorICAgIDc4Mzk3LCA3ODQwNSwgNzg0MTYsIDc4NDI0LCA0MDUxLCA3ODQzNCwgNzg0NDUsIDc4NDU0LCA3ODQ2MCwgNzg0NzUsIAorICAgIDc4NDgyLCA3ODQ4OCwgMzU1MTQsIDc4NDkzLCAyODc2LCAxMzA0NiwgNzg0OTcsIDc4NTA0LCA4OTMwLCA3ODUxMywgMjg4MSwgCisgICAgMzIzNjEsIDc4NTE5LCA2MDYwOSwgNzg1MjYsIDc4NTMyLCA3ODU0MywgNzg1NDksIDc4NTU2LCA3ODU2MiwgNzg1NzAsIAorICAgIDc4NTc3LCA3ODU4MywgNzg1OTMsIDc4NjAyLCA3ODYxMywgNzg2MjAsIDc4NjI2LCA3ODYzNiwgNzg2NDQsIDc4NjUwLCAKKyAgICA3ODY2NSwgNzg2NzEsIDc4Njc2LCA3ODY4MywgNzg2ODYsIDc4NjkyLCA3ODY5OSwgNzg3MDUsIDc4NzEzLCA3ODcyMiwgCisgICAgNzg3MzAsIDc4NzM2LCA3ODc0NSwgNDE0NjQsIDc4NzU5LCA3ODc2NCwgNzg3NzAsIDE0NzU3LCA3ODc3NSwgNzg3ODgsIAorICAgIDc4Nzk3LCA3ODgwNSwgNzg4MTIsIDc4ODE2LCA3ODgyMCwgNzg4MjMsIDc4ODMwLCA3ODgzNywgNzg4NDUsIDc4ODUzLCAKKyAgICA3ODg2MiwgNzg4NzAsIDE0Njg0LCA3ODg3OCwgNzg4ODMsIDc4ODg3LCA3ODg5OSwgNzg5MDYsIDc4OTE1LCA3NDgsIAorICAgIDc4OTI1LCA3ODkzNCwgNzg5NDUsIDI4OTcsIDc4OTQ5LCA3ODk1MywgNzg5NTksIDc4OTcyLCA3ODk4NCwgNzg5OTQsIAorICAgIDc5MDAzLCA3OTAxNSwgMjYzNjksIDc5MDI2LCA3OTAzNCwgNzkwNDMsIDc5MDU0LCA3OTA2NSwgNzkwNzUsIDc5MDg1LCAKKyAgICA3OTA5NCwgNzkxMDIsIDExMzEyLCA3OTEwOSwgNzkxMTMsIDc5MTE2LCA3OTEyMSwgNzkxMjYsIDc5MTMwLCA3OTEzNiwgCisgICAgMTM1MiwgMTE4MTgsIDc5MTQzLCA3OTE1NCwgNzkxNjMsIDc5MTcxLCA3OTE4MCwgNzkxODgsIDc5MjA0LCA3OTIxNSwgCisgICAgNzkyMjQsIDc5MjMyLCA3OTI0NCwgNzkyNTUsIDc5MjcxLCA3OTI4MSwgNzkzMDIsIDc5MzE1LCA3OTMyMywgNzkzMzAsIAorICAgIDE0ODY4LCA3OTM0MywgNzkzNDgsIDc5MzU0LCA1OTA4LCA3OTM2MCwgNzkzNjMsIDc5MzcwLCA3OTM4MCwgODE3NiwgCisgICAgNzkzODcsIDc5MzkyLCA3OTM5NywgNzk0MDIsIDc5NDEwLCA3OTQxOSwgNzk0MjcsIDk3NTYsIDk3NjUsIDc5NDMyLCAKKyAgICA3OTQ0MywgNzk0NDgsIDc5NDU0LCAyOTEzLCAyOTE4LCA3OTQ2MCwgMTA4NzksIDc5NDY2LCA3OTQ3MywgNzk0ODAsIAorICAgIDc5NDkzLCAyMjUxLCA2OCwgNzk0OTgsIDc5NTAzLCA3OTUxMywgNzk1MTksIDc5NTI4LCA3OTUzNiwgNzk1NDYsIDc5NTUwLCAKKyAgICA3OTU1NSwgNzk1NTksIDc5NTcxLCAyOTQxLCA3OTU3OSwgNzk1ODcsIDc5NTkyLCA3OTYwMywgNzk2MTQsIDc5NjIzLCAKKyAgICA3OTYyOCwgNzk2MzQsIDc5NjM5LCA3OTY0OSwgNzk2NTksIDc5NjY0LCA3OTY3MCwgNzk2NzQsIDc5Njc5LCA3OTY4OCwgCisgICAgMjE0MTAsIDc5NjkyLCA0MTI4LCAyMCwgNzk2OTcsIDc5NzA2LCA3OTcxMywgNzk3MjAsIDc5NzI2LCA3OTczMiwgODY0LCAKKyAgICA3OTczNywgNzk3NDIsIDYwOTM3LCA3OTc0NywgNzk3NTIsIDc5NzU4LCA3OTc2NCwgNzk3NzIsIDc5Nzc3LCA3OTc4NCwgCisgICAgNzk3OTAsIDc5Nzk1LCAzODAzMCwgNDEzNTgsIDc5ODAxLCAyOTQ1LCAzMiwgNzk4MTEsIDc5ODI0LCA3OTgyOSwgNzk4MzcsIAorICAgIDc5ODQyLCA3OTg0OCwgMjk2NywgMjgzMTAsIDc5ODUzLCA3OTg2MSwgNzk4NjgsIDc5ODczLCA1ODY4MiwgNjE5NDAsIAorICAgIDc5ODgyLCA3OTg4NiwgMTcwNCwgMTgxMywgNzk4OTEsIDc5ODk2LCA3OTkwMywgMTgxNywgMjQ3LCA3OTkxMCwgNzk5MTYsIAorICAgIDI5ODksIDc5OTIxLCA3OTkyNiwgNzk5MzMsIDE4MjEsIDc5OTM4LCA3OTk0NCwgNzk5NDksIDc5OTYxLCA2MTE5LCA3OTk3MSwgCisgICAgMTgyOCwgNzk5NzcsIDc5OTgyLCA3OTk4OSwgNzk5OTYsIDgwMDExLCA4MDAxOCwgODAwMjksIDgwMDM3LCAyNjE4LCAKKyAgICA4MDA0MSwgODAwNTMsIDgwMDU4LCA4MDA2MiwgODAwNjgsIDI4MTM1LCAyMjU2LCA4MDA3MiwgODAwODMsIDgwMDg3LCAKKyAgICA4MDA5MSwgODAwOTcsIDgwMTAxLCA4MDExMCwgODAxMTQsIDgwMTI1LCA4MDEyOSwgMjMwMiwgMzIxOTAsIDgwMTMzLCAKKyAgICA4MDE0MywgMzA4MCwgOTM3MSwgODAxNTEsIDgwMTU2LCA4MDE2MCwgODAxNjksIDgwMTc2LCA4MDE4MiwgMzA1MCwgMTcxNTIsIAorICAgIDgwMTg2LCA4MDE5OSwgODAyMTcsIDgwMjIyLCA4MDIzMCwgODAyMzgsIDgwMjQ4LCA5OTg1LCAxMzE1NCwgODAyNjAsIAorICAgIDgwMjczLCA4MDI4MCwgODAyODcsIDgwMzAzLCA4MDMxMCwgODAzMTYsIDEwNjQsIDgwMzIzLCA4MDMzMCwgODAzNDAsIAorICAgIDgwMzQ5LCA4MDM2MSwgNDIzMjgsIDgwMzY5LCAzMDY0LCAxMjAzMCwgODAzNzIsIDgwMzgwLCA4MDM4NCwgNzgyNzIsIAorICAgIDMwNjgsIDgwMzg4LCAyMTE5MSwgMTIwNDYsIDM3NTYsIDgwMzkyLCAzMDc0LCA4MDM5NiwgODA0MDYsIDgwNDEyLCA4MDQxOCwgCisgICAgODA0MjQsIDgwNDMwLCA4MDQzNiwgODA0NDIsIDgwNDQ4LCA4MDQ1NCwgODA0NjAsIDgwNDY2LCA4MDQ3MiwgODA0NzgsIAorICAgIDgwNDg0LCA4MDQ5MCwgODA0OTYsIDgwNTAyLCA4MDUwOCwgODA1MTQsIDgwNTIwLCA4MDUyNiwgODA1MzIsIDgwNTM4LCAKKyAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MywgODA1NzAsIDgwNTc2LCA4MDU4MiwgODA1ODgsIDgwNTk0LCA4MDYwMCwgCisgICAgODA2MDYsIDEzNTcsIDE2MDYyLCAxMjA2OCwgODA2MTIsIDgwNjE3LCA4MDYyMiwgODA2MjcsIDgwNjMyLCA4MDYzNywgCisgICAgODA2NDIsIDgwNjQ3LCA4MDY1MiwgODA2NTcsIDgwNjYyLCA4MDY2NywgODA2NzIsIDgwNjc3LCA4MDY4MiwgODA2ODcsIAorICAgIDgwNjkyLCA4MDY5NywgODA3MDIsIDgwNzA3LCA4MDcxMiwgODA3MTcsIDgwNzIyLCA4MDcyNywgODA3MzIsIDgwNzM3LCAKKyAgICA4MDc0MywgODA3NDgsIDgwNzUzLCA4MDc1OSwgODA3NjQsIDgwNzcwLCA4MDc3NSwgODA3ODAsIDgwNzg2LCA4MDc5MSwgCisgICAgODA3OTYsIDgwODAxLCA4MDgwNiwgODA4MTEsIDgwODE2LCA4MDgyMSwgODA4MjYsIDgwNDA3LCA4MDQxMywgODA0MTksIAorICAgIDgwNDI1LCA4MDQzMSwgODA0MzcsIDgwNDQzLCA4MDQ0OSwgODA0NTUsIDgwNDYxLCA4MDQ2NywgODA0NzMsIDgwNDc5LCAKKyAgICA4MDQ4NSwgODA0OTEsIDgwODMyLCA4MDQ5NywgODA1MDMsIDgwNTA5LCA4MDgzOCwgODA1MTUsIDgwNTIxLCA4MDUyNywgCisgICAgODA1MzMsIDgwNTM5LCA4MDU0NSwgODA1NTEsIDgwNTcxLCA4MDg0NCwgODA4NTAsIDgwNTc3LCA4MDg1NiwgODA1ODMsIAorICAgIDgwNTg5LCA4MDU5NSwgODA2MDEsIDgwNjA3LCAzMDkxLCAzMDk2LCA4MDg2MiwgODA4NjcsIDgwODcwLCA4MDg3NiwgCisgICAgODA4ODIsIDgwODg5LCA4MDg5NCwgODA4OTksIDIzMDcsIAogfTsKIAogLyogY29kZS0+bmFtZSBwaHJhc2Vib29rICovCiAjZGVmaW5lIHBocmFzZWJvb2tfc2hpZnQgNwogI2RlZmluZSBwaHJhc2Vib29rX3Nob3J0IDIwOQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va1tdID0gewotICAgIDAsIDIxOSwgMTgsIDI0NSwgMzEsIDc4LCAyMjMsIDI1NCwgNzgsIDU0LCA1MCwgMjQ3LCAxMzIsIDUwLCAyMjUsIDE4MiwgCi0gICAgNTAsIDI1NCwgMTI2LCAyNTQsIDU3LCA0MywgMjI2LCAzLCA0NCwgMjI2LCAzLCAyNTMsIDIxNiwgOTYsIDUwLCAyNDksIAotICAgIDIxOSwgMjQwLCAxNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjE5LCA0NiwgMjEsIDIxMCwgODYsIDIxLCAxMTAsIDIxLCAKLSAgICAxMDUsIDIxLCAxNTgsIDIxLCAxNjEsIDIxLCAxODksIDIxLCAxOTQsIDIxLCAxOTgsIDIxLCAxOTUsIDIxLCAyMDAsIDI0OSwgCi0gICAgMjI2LCAyMjAsIDE1MCwgMjMzLCAxNSwgNTAsIDI0NSwgOTgsIDUwLCAyNDIsIDEzMCwgNTAsIDIyNCwgMTMsIDc4LCAyNDksIAotICAgIDIxNywgMjUzLCAyMDYsIDcsIDYsIDEsIDYxLCA3LCA2LCAxLCAyNTMsIDE1OCwgNywgNiwgMSwgMjUxLCA2NiwgNywgNiwgMSwgCi0gICAgMjQ5LCA2MCwgNywgNiwgMSwgNzUsIDcsIDYsIDEsIDI0NSwgNiwgNywgNiwgMSwgMjQzLCAyMDIsIDcsIDYsIDEsIDI0MiwgCi0gICAgNjAsIDcsIDYsIDEsIDczLCA3LCA2LCAxLCAyMzUsIDE0NCwgNywgNiwgMSwgMjM1LCAyMywgNywgNiwgMSwgMTU2LCA3LCA2LCAKLSAgICAxLCAxOTMsIDcsIDYsIDEsIDIzMCwgMjUsIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyMjYsIDEwNSwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgNywgNiwgMSwgMTUzLCA3LCA2LCAxLCAyMjIsIDkxLCA3LCA2LCAxLCAyMTcsIDE1MiwgNywgNiwgMSwgNzAsIDcsIDYsIAotICAgIDEsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTIsIDk4LCA3LCA2LCAxLCAyMTEsIDE3OCwgNywgNiwgMSwgMjExLCAxMTcsIDcsIAotICAgIDYsIDEsIDIxMCwgMTU5LCA0MywgNDIsIDEyNywgMjIzLCA1MCwgMjE5LCA0NiwgNDQsIDQyLCAxMjcsIDI1MCwgMzEsIDI1NSwgCi0gICAgMTQsIDEyMSwgMjMyLCAyMTMsIDI0MiwgMTM3LCAyNTUsIDE0LCA3LCA0LCAxLCA2MSwgNywgNCwgMSwgMjUzLCAxNTgsIDcsIAotICAgIDQsIDEsIDI1MSwgNjYsIDcsIDQsIDEsIDI0OSwgNjAsIDcsIDQsIDEsIDc1LCA3LCA0LCAxLCAyNDUsIDYsIDcsIDQsIDEsIAotICAgIDI0MywgMjAyLCA3LCA0LCAxLCAyNDIsIDYwLCA3LCA0LCAxLCA3MywgNywgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIzNSwgCi0gICAgMjMsIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTkzLCA3LCA0LCAxLCAyMzAsIDI1LCA3LCA0LCAxLCA3NiwgNywgNCwgMSwgCi0gICAgMjI2LCAxMDUsIDcsIDQsIDEsIDIyNCwgOTYsIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MSwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDcsIDQsIDEsIDcwLCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgOTksIDEyNywgNjcsIDIzMiwgMjEzLCA0NCwgCi0gICAgMjQ5LCA5OSwgMTI3LCAxODIsIDIyOCwgNzMsIDIxOSwgMTgsIDIzNSwgMTkzLCAyNDUsIDMxLCA3OCwgMjUwLCAxNzYsIDUwLCAKLSAgICAyMjQsIDIyOCwgNTAsIDI0OSwgOTgsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxMzUsIDEzMCwgMjIxLCAxNzMsIDUwLCAyNDgsIAotICAgIDEsIDI0OSwgMTYzLCA1MCwgMjQ0LCAxMzYsIDIyNiwgMTU0LCAyMzUsIDIzOCwgMjMzLCA0MiwgNTIsIDI1NCwgMTEwLCAKLSAgICAyMjMsIDI1NCwgNzgsIDIyOCwgNTIsIDUwLCAyMTksIDUyLCAyNDAsIDE2OCwgMjIzLCAxMDIsIDUwLCAyMzEsIDIzMiwgCi0gICAgMjQ4LCA3MSwgNTAsIDIyNSwgMjEsIDUwLCAyMTgsIDIzLCAxMDUsIDIxOCwgMjMsIDE1OCwgMjU1LCAzLCAyNTUsIDE0LCAKLSAgICAyMzAsIDIyOCwgNTAsIDIyNSwgNjgsIDUwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDI1MCwgMTgzLCAyMTgsIDIzLCAxMTAsIAotICAgIDIzMSwgMTQ4LCAyMjYsIDE1NCwgMjM1LCAyMzgsIDIyMiwgMjQ3LCA1MiwgMjU0LCAxMTAsIDIyMywgMjU0LCA3OCwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEzNCwgMjI0LCAxOSwgMjM1LCAxOTMsIDIyNCwgMTMsIDc4LCA3LCA2LCAxLCAxMTUsIDIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAxMTUsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMTE1LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA2LCAxLCAyNTQsIDI0MywgNywgNiwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDMwLCA3LCA2LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDUsIDU5LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxODIsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMTgyLCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgMSwgMjMwLCA4NCwgNTAsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzAsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MSwgNywgNCwgMSwgMjIwLCA3NiwgMjIyLCA5MSwgNywgNCwgMSwgMTE1LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMTE1LCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMjU0LCAyNDMsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDE0MiwgCi0gICAgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQ1LCA1OSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDE4MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDEsIDI0NywgMTY5LCA1MCwgNywgNCwgMSwgMTQ0LCAKLSAgICAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxNDIsIDcsIDQsIDEsIAotICAgIDIxNiwgMTUxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA0LCAKLSAgICAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAyNTEsIAotICAgIDY3LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjUxLCA2NywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDksIAotICAgIDYxLCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAotICAgIDIyNCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTAsIAotICAgIDMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgCi0gICAgMzAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDkxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI0MCwgMTU0LCAKLSAgICAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAKLSAgICAyMjQsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDU5LCA0OCwgNywgNCwgCi0gICAgMSwgMjQ3LCAxMTksIDczLCA3LCA2LCAyNywgMjM2LCAzMSwgNywgNCwgMjcsIDIzNiwgMzEsIDcsIDYsIDEsIDIzNSwgMTQ1LCAKLSAgICAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjUwLCAxODMsIAotICAgIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzMsIDIzOSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIAotICAgIDE0MiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMjYsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjUwLCAKLSAgICAyMzQsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzAsIDI2LCAyMjQsIDIwNCwgMjUxLCA3OCwgCi0gICAgMjU0LCA1NywgNywgNiwgMSwgMjQ1LCAxMzgsIDcsIDQsIDEsIDI0NSwgMTM4LCA3LCA2LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDI1MSwgMTQ2LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNiwgMjcsIAotICAgIDIyNiwgMjM0LCA3LCA0LCAyNywgMjI2LCAyMzQsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAxNDIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgCi0gICAgMTgzLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjIyLCA5MiwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMTgzLCA3LCAKLSAgICA0LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMiwgCi0gICAgOTIsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyNTAsIDE4MywgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDE4MiwgCi0gICAgNywgNCwgMSwgMTA0LCAyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM0LCA0OCwgNywgNiwgMSwgMTA0LCAyLCA1MiwgMTQyLCAKLSAgICA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjI2LCAyMjQsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgCi0gICAgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAKLSAgICAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgCi0gICAgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgMjE2LCAxMSwgNywgNCwgCi0gICAgMSwgNTcsIDIsIDIxNiwgMTEsIDcsIDYsIDEsIDEzOCwgMTk0LCA3LCA0LCAxLCAxMzgsIDE5NCwgNywgNiwgMSwgMjA0LCAKLSAgICA3NiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxMDMsIDcsIDYsIDEsIDI1NCwgCi0gICAgMjE5LCAyNDksIDYwLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIAotICAgIDQsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNTQsIDcsIDYsIDEsIDIyMywgNDksIAotICAgIDc1LCA3LCA2LCAxLCAyMjEsIDE5NSwgNywgNiwgMSwgMjA0LCA3NSwgNywgNiwgMSwgMjQ1LCA3LCAyLCAxMDMsIDcsIDQsIAotICAgIDEsIDI0NSwgNywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDEwNywgNywgNCwgMSwgCi0gICAgMjQwLCAyMDEsIDcsIDYsIDEsIDIzNSwgMTg1LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDYsIDEsIDIzNSwgMjQsIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjM1LCAyNCwgMiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTMwLCA3LCA0LCAxLCAKLSAgICAyMzMsIDEwMCwgMiwgOTEsIDcsIDYsIDEsIDIxNSwgOTQsIDE5MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNywgCi0gICAgNCwgMSwgMjMwLCAyNiwgMiwgMTk5LCA0NCwgMjMzLCAzNiwgNywgNiwgMSwgMTQ0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAyMjYsIDIxOSwgNywgNCwgCi0gICAgMSwgMjI2LCAyMTksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDEsIAotICAgIDIxMCwgMjE0LCA3LCA2LCAxLCAxMzgsIDEwNSwgNywgNCwgMSwgMTM4LCAxMDUsIDcsIDYsIDEsIDI0NSwgNzUsIDcsIDEsIAotICAgIDIyMywgNDksIDI0NSwgNzYsIDIzMiwgMTIzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjI2LCA2NiwgMTAzLCA3LCA2LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMTAzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMTAzLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAKLSAgICAyMTQsIDE1NywgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNiwgMSwgMjExLCAxMTgsIDIsIDEwMywgNywgNCwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDEwMywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIAotICAgIDYsIDEsIDI0NSwgOCwgNywgNiwgMSwgMjQ1LCA5LCAyMjMsIDQ4LCA3LCA0LCAxLCAyNDUsIDksIDIyMywgNDgsIDcsIDQsIAotICAgIDEsIDI0NSwgOSwgMiwgMjE3LCA3NywgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgMSwgMTM4LCAxODksIDcsIDQsIDEsIDEzOCwgCi0gICAgMTg5LCA3LCAxLCAyMzUsIDE5MywgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIAotICAgIDI0OCwgNDcsIDI1MCwgMTEsIDcsIDEsIDIzMywgNzcsIDI1MCwgMTEsIDcsIDEsIDI1NCwgMTM3LCAyNTAsIDExLCA3LCAxLCAKLSAgICAyMjMsIDU1LCAyNTAsIDExLCA3LCA2LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNCwgCi0gICAgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMyLCAKLSAgICAxODgsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjMyLCAxODgsIDcsIDYsIDEsIAotICAgIDIyOCwgMTg2LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjI4LCAxODYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgCi0gICAgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDc1LCA3LCA2LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMjMxLCAyMzIsIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDkxLCA3LCA0LCAKLSAgICAxLCAyNDMsIDIwMywgMiwgOTEsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjI2LCAyMjUsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyMjYsIDIyNSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDI0NiwgMzksIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAKLSAgICAyNDYsIDM5LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyNDAsIDE5OSwgNywgNiwgMSwgMjExLCAxODEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMzAsIAotICAgIDI2LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgCi0gICAgMjIyLCAyMzQsIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTYwLCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDE0NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCAKLSAgICA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMDQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjIyLCAKLSAgICA5MiwgMiwgMjQ5LCAyMjAsIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgCi0gICAgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxMCwgCi0gICAgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MiwgNjEsIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxOTksIDQ0LCAyMzMsIDM2LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAKLSAgICAyNDksIDEwMCwgNywgNiwgMSwgMjI2LCAxMzQsIDcsIDQsIDEsIDIyNiwgMTM0LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE1LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIAotICAgIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0OSwgCi0gICAgMTAwLCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDQsIDcsIDQsIDEsIDI0OCwgMTQzLCAyNDcsIDIyMCwgNywgNCwgMSwgCi0gICAgMjI0LCAzMSwgMjQ3LCAyMjAsIDcsIDYsIDEsIDExNSwgMiwgOTEsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyNTEsIDY3LCAyLCA5MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDEzMCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI0NywgCi0gICAgMjU1LCA5MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyMTcsIDI1MCwgMjE3LCA3NywgNywgNiwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCA0LCAxLCAyNDIsIDE4MCwgMjE4LCAKLSAgICAxMjksIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCA2LCAxLCAyMzUsIDE0NSwgMiwgOTEsIDcsIDQsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNCwgMSwgCi0gICAgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDkxLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgOTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCA2MSwgNywgNCwgMSwgMjU0LCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCA0LCAxLCA1NywgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc2LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjE3LCA3NywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCA3NSwgNywgNCwgMSwgCi0gICAgMjIxLCAxOTUsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIAotICAgIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIDIwNCwgMTYwLCAyLCAxMDMsIDcsIDQsIDEsIDI1MCwgMCwgMjIzLCA0OSwgCi0gICAgMjA0LCA3NSwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMTE5LCAyNDMsIDIwMiwgNywgMSwgNCwgNiwgMjQzLCAyMDIsIDcsIDQsIDEsIDI0MywgMTA3LCA3LCA0LCAxLCAKLSAgICAyMjMsIDE1MSwgMjQwLCAyNDgsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMjQxLCAyMDgsIDIsIDEwMywgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE4NSwgCi0gICAgNywgMSwgNCwgNiwgNzMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjUyLCA0MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjMzLCAxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCAxOTMsIDcsIDQsIDEsIDIxNSwgOTQsIDIzMiwgNTAsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjMyLCAKLSAgICA1MCwgMiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjMsIDU1LCAKLSAgICAxMDMsIDcsIDEsIDQsIDYsIDIzMCwgMjUsIDcsIDQsIDEsIDI1MiwgMTM0LCA3NiwgNywgMSwgNCwgNiwgMjI2LCAyMzQsIDcsIAotICAgIDQsIDEsIDI1MCwgMCwgMjI2LCAyMDEsIDcsIDQsIDEsIDIyNSwgMTMzLCA3LCA0LCAxLCAyMTUsIDk0LCAxNTMsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAKLSAgICAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4NywgNywgNCwgMSwgMjIzLCA0OSwgMjIzLCAyMjQsIDIsIDI0NCwgODcsIDcsIAotICAgIDEsIDQsIDYsIDE1MywgNywgMSwgNCwgNiwgMjM1LCAxOTMsIDE1MywgNywgNCwgMSwgMjIyLCA5MiwgMiwgMTAzLCA3LCA0LCAKLSAgICAxLCAyNDUsIDc1LCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCA3LCA0LCAxLCAKLSAgICAyMTgsIDIzMSwgMjIzLCA0OSwgMjQ1LCA3NSwgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgCi0gICAgOTQsIDIxNywgMTUyLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAxMDQsIDEzMCwgNywgCi0gICAgNCwgMSwgMjE0LCAxNTcsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCAKLSAgICA0LCAxLCAyMTUsIDk0LCAyMTIsIDk4LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTEsIDExNywgNywgMSwgNCwgNiwgMjExLCAxMTcsIAotICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDksIDEwMCwgNywgNCwgCi0gICAgMSwgMjQ1LCA4LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI0OSwgMTAwLCA3LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIyNSwgMTM5LCAyMTMsIDEzNSwgMjQzLCAyNDksIDcsIDEsIDIzNSwgMTkzLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIxOCwgMTEwLCAyNTEsIDY2LCA3LCAxLCAyNTEsIDI0NiwgMjUwLCAxMSwgNywgMSwgNCwgNiwgMjUzLCAxNTgsIDcsIDQsIAotICAgIDEsIDI1MCwgMCwgMjA0LCA3NSwgNywgMSwgNCwgNiwgMjQzLCAyMDMsIDIsIDEwMywgNywgMSwgNCwgNiwgMjQyLCA2MCwgNywgCi0gICAgNCwgMSwgMjM1LCAxNDUsIDIsIDI0OSwgMTI3LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzUsIDIzLCA3LCAxLCA0LCA2LCAxNTYsIAotICAgIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDEwMywgNywgMSwgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjIzLCA0OSwgCi0gICAgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgNCwgMSwgMjQ2LCA0MCwgMjQ3LCAyMjAsIDcsIDQsIDEsIDI0OCwgMjYsIAotICAgIDI0NywgMjIwLCA3LCA0LCAxLCAyNDYsIDQwLCAyNDcsIDIyMSwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgMTg1LCAKLSAgICAyNDcsIDIyMCwgNywgNCwgMSwgMjE2LCAyMzUsIDI0NywgMjIwLCA3LCA0LCAxLCAyMTcsIDI5LCAyNDcsIDIyMSwgMiwgCi0gICAgMjQ5LCAxMDAsIDcsIDQsIDEsIDI0NCwgMTM0LCAyNDcsIDIyMCwgNywgNCwgMSwgMjMyLCAxMDAsIDI0NywgMjIwLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUxLCAyNDcsIDIyMCwgNywgMSwgMjUxLCAyNDYsIDIyNSwgMTgxLCA3LCAxLCAyNTEsIDI1NCwgMjI1LCAxODEsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgODcsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgCi0gICAgODgsIDIyLCAyMTcsIDc3LCA1OCwgMSwgNCwgMjQyLCA2MCwgNTgsIDEsIDQsIDI0MiwgNjEsIDIsIDEwMywgNTgsIDEsIDQsIAotICAgIDIzNSwgMTQ0LCA1OCwgMSwgNCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjIzLCAKLSAgICAyMjQsIDIsIDEwMywgNTgsIDEsIDQsIDYsIDIzNSwgMTkzLCAxNTMsIDU4LCAxLCA0LCAyMTIsIDk4LCA1OCwgMSwgNCwgCi0gICAgMjExLCAxMTcsIDU4LCAxLCAyMjQsIDE5MCwgNTgsIDEsIDUyLCAyMjQsIDE5MCwgNTgsIDEsIDIxNSwgOTQsIDI0OSwgMjE5LCAKLSAgICA1OCwgMSwgMjU0LCA1NywgNTgsIDEsIDIyMywgNDksIDI0OSwgMjE5LCA1OCwgMSwgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAKLSAgICAxLCA0MywgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDIyMywgNDksIDI0MiwgCi0gICAgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDQzLCAyNTMsIDI0OSwgNTgsIDEsIDQ0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMCwgMjUzLCAKLSAgICAyNDksIDU4LCAxLCAxMjQsIDI1MywgMjQ5LCA1OCwgMSwgMjUwLCAzMSwgMjU1LCAxNCwgMjUwLCAyMzQsIDU4LCAxLCA2NywgCi0gICAgMjMyLCAyMTMsIDU4LCAxLCAyMzEsIDIzMiwgNTgsIDEsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDI0MiwgMTM3LCAyNTUsIAotICAgIDE0LCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTMsIDU4LCAxLCAxMjEsIDIzMSwgMjMyLCA1OCwgMSwgMTIxLCAyNDIsIDEzNywgCi0gICAgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjE1LCAyMjIsIDI0OSwgMjI2LCA1OCwgMSwgCi0gICAgMTYzLCAyMTUsIDIyMiwgMjQ5LCAyMjYsIDU4LCAxLCAyNTAsIDE3MywgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAyNTAsIAotICAgIDE3MywgNDMsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAxMjAsIDIxNywgODcsIDU4LCAxLCAxMjQsIDIxNywgODcsIDU4LCAxLCAKLSAgICA5NiwgNTAsIDU4LCAxLCAyMzAsIDE4MiwgNTAsIDI1MSwgMTQ2LCA1OSwgNDgsIDIyMiwgMjM0LCA0OCwgMjI2LCAyMjQsIDQsIAotICAgIDE4MiwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDIyMywgMzYsIDEwMywgNTgsIDEsIDI0OSwgMTMxLCAyNTUsIDE0LCAKLSAgICA1OCwgMSwgNCwgMjQzLCAxMDcsIDU4LCAxLCA0LCAxNTYsIDU4LCAxLCA0LCAyMjIsIDkxLCA1OCwgMSwgNCwgMjExLCAxNzgsIAotICAgIDU4LCAxLCA0LCAyMjMsIDQ5LCAyNDIsIDE4MCwgMjE4LCAxMjksIDU4LCAxLCAyNDUsIDIwLCAxMzgsIDEzMCwgNTgsIDEsIAotICAgIDEyNSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDEzOCwgMTMwLCA1OCwgMSwgCi0gICAgMjQ1LCAxOSwgMTM4LCAxMzAsIDU4LCAxLCAyMTAsIDI1NCwgMjQ4LCA0NCwgMTM4LCA3OCwgNTgsIDEsIDIxMSwgNzAsIAotICAgIDI0OCwgNDQsIDEzOCwgNzgsIDU4LCAxLCAyMTMsIDEzMywgNTgsIDEsIDIxNCwgMTg2LCA1OCwgMSwgNTIsIDI1NCwgNTcsIAotICAgIDU4LCAxLCAxMjEsIDEyNCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDEyMCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDQzLCAKLSAgICAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgNDQsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCAyMjIsIDIzMywgNTgsIDEsIDIzMCwgCi0gICAgMjI0LCAyNDIsIDEzNywgMjU1LCAxNCwgNTgsIDEsIDIzMCwgMjI0LCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDU4LCAxLCAKLSAgICAyMzAsIDIyNCwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMTgyLCA1OCwgMSwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjI2LCA1OCwgMSwgMjUyLCA1OCwgMTI1LCAyMTYsIDMwLCA1OCwgMSwgMjQ1LCAxNDMsIDEyNSwgMjE2LCAzMCwgNTgsIDEsIAotICAgIDI1MiwgNTgsIDEyMSwgMjE2LCAzMCwgNTgsIDEsIDI0NSwgMTQzLCAxMjEsIDIxNiwgMzAsIDU4LCAxLCAyMjAsIDU0LCA1OCwgCi0gICAgMSwgMjA0LCAyMjAsIDU0LCA1OCwgMSwgMTIxLCA0MywgNzQsIDM4LCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgMzgsIDI1MCwgMzEsIDI1NSwgMTQsIDM4LCAxODIsIDM4LCAyMzEsIDIzMiwgMzgsIDIyNiwgMTE5LCAzOCwgCi0gICAgMjUxLCAxNDYsIDM4LCA1OSwgNDgsIDM4LCAyNDgsIDEsIDM4LCAyNDEsIDUyLCA0OCwgMzgsIDIyMiwgMjM0LCA0OCwgMzgsIAotICAgIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyNTAsIDIzNCwgMzgsIDY3LCAyMzIsIDIxNCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgCi0gICAgMjE0LCA0OCwgMzgsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1MCwgMjU1LCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQ2LCAKLSAgICAzOCwgMjE1LCA5NCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjIzLCA0OSwgMjQ5LCAyMjAsIDQ4LCAKLSAgICAzOCwgMjQ5LCAyMjAsIDc3LCAyMjIsIDI1MSwgMzgsIDI0MiwgMTM3LCAyNTUsIDE1LCA1MSwgMzgsIDI1NSwgMywgMjU1LCAKLSAgICAxNSwgNTEsIDM4LCA0MywgMjE3LCA4OCwgNTEsIDM4LCA0NCwgMjE3LCA4OCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDQ4LCAKLSAgICAzOCwgMjQwLCAyNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAxMjAsIDIxNywgODgsIDUxLCAzOCwgMTI0LCAKLSAgICAyMTcsIDg4LCA1MSwgMzgsIDk2LCA1LCA1MSwgMzgsIDIzMCwgMTgyLCA1LCA1MSwgMzgsIDIyNiwgNjQsIDI0MSwgNTIsIAotICAgIDUxLCAzOCwgMjIzLCA1NSwgMjQxLCA1MiwgNTEsIDM4LCA1OSwgNTEsIDM4LCAyNDgsIDIsIDUxLCAzOCwgMjIyLCAyMzQsIAotICAgIDUxLCAzOCwgMjQ5LCAyMjAsIDUxLCAzOCwgMjUwLCAxODMsIDM4LCAyMjYsIDIyNCwgMzgsIDY3LCAyMzIsIDIxNCwgNTEsIAotICAgIDM4LCAyNTEsIDE0MCwgNTEsIDM4LCAyMzUsIDE5MywgNTIsIDI1NCwgMjQsIDUxLCAzOCwgMjUwLCAyMzUsIDUxLCAzOCwgCi0gICAgMjUwLCAzMSwgMjU1LCAxNSwgNTEsIDM4LCAyNTEsIDE0NywgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDcsIDUxLCAzOCwgCi0gICAgMjE2LCA4OSwgNTEsIDM4LCAyMzEsIDIzMywgNTEsIDM4LCAxMjEsIDIzMiwgMjEzLCAzOCwgNTIsIDEyMSwgMjMyLCAyMTMsIAotICAgIDM4LCAyMTYsIDg5LCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTgsIDEwMywgMjI2LCAxMjAsIDM4LCAxOTksIDIxOCwgCi0gICAgMTAzLCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDE5OSwgMjE5LCA0NywgMjI2LCAKLSAgICAxMjAsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDAsIDUxLCAzOCwgNDIsIDUxLCAKLSAgICAzOCwgMjIxLCAxODAsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAzOCwgNjcsIDE4MiwgMzgsIDUyLCAyMjYsIDExOSwgMzgsIAotICAgIDI0MiwgMTM3LCAxMzgsIDc4LCAzOCwgMjU1LCAzLCAxMzgsIDc4LCAzOCwgMjYsIDIyNSwgMTc1LCAzOCwgMjYsIDIzNCwgMiwgCi0gICAgMzgsIDI2LCAyNDcsIDI1MiwgMjE2LCAxOCwgMzgsIDI2LCAyMTAsIDIxOSwgMzgsIDI1MSwgMTQwLCA0OCwgMzgsIDI0NSwgCi0gICAgOTgsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIxNCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDUxLCAzOCwgMjI4LCA1MiwgCi0gICAgMjE2LCA4OSwgNDgsIDM4LCAyNDEsIDU4LCA0OCwgMzgsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgNDIsIDQ4LCAzOCwgNDMsIDQ0LCAKLSAgICA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgMjQyLCAxNDIsIDIzNSwgNjMsIDM4LCA0NCwgMjUzLCAyNTAsIAotICAgIDQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgMjQ0LCAxMzEsIDM4LCAyMTEsIDE3OSwgNTEsIDM4LCA0MywgCi0gICAgMjUzLCAyNTAsIDUxLCAzOCwgNDQsIDI1MywgMjUwLCA1MSwgMzgsIDQ0LCAyNTMsIDI1MCwgMjIsIDEyMCwgMjUzLCAyNTAsIAotICAgIDUxLCAzOCwgNDQsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgNTksIDc3LCAyMjIsIDI1MSwgMzgsIDI1MywgMjE3LCA1MSwgCi0gICAgMzgsIDUyLCAyMjIsIDIzNCwgNTEsIDM4LCAyMTAsIDM1LCA0OCwgMzgsIDUyLCAyNTEsIDE0NywgNTEsIDM4LCA1MiwgMjUxLCAKLSAgICAxNDYsIDM4LCA1MiwgMjMxLCAyMzIsIDM4LCA1MiwgMjMxLCAyMzMsIDUxLCAzOCwgNTIsIDE4MiwgMzgsIDUyLCAyMzUsIAotICAgIDE5MywgMjUxLCAxNDYsIDM4LCA1MiwgOTcsIDgwLCA1MSwgMzgsIDcsIDQsIDEsIDYxLCAzOCwgNywgNCwgMSwgNzUsIDM4LCAKLSAgICA3LCA0LCAxLCA3MywgMzgsIDcsIDQsIDEsIDc2LCAzOCwgNywgNCwgMSwgNzAsIDM4LCA3LCA0LCAxLCAyNTEsIDY2LCAzOCwgCi0gICAgNywgNCwgMSwgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjAsIDM4LCA3LCA0LCAxLCAxOTMsIDM4LCA3LCA0LCAxLCAKLSAgICAxNTMsIDM4LCA3LCA0LCAxLCAyMTcsIDE1MiwgMzgsIDcsIDQsIDEsIDIxNCwgMTA1LCAzOCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDI2LCA2LCAxLCAyNDEsIDE5NiwgMjYsIDQsIDEsIDI0MSwgMTk2LCAyNiwgNiwgMSwgMjU0LCAyMywgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDIzLCAyMjEsIDI0NiwgMjYsIDIyNywgMTk4LCA1MCwgMjYsIDIzMiwgMTA4LCAyMjcsIDE5OCwgNTAsIAotICAgIDI2LCA2LCAxLCAyMjYsIDUxLCAyNDcsIDIyNywgMjYsIDQsIDEsIDIyNiwgNTEsIDI0NywgMjI3LCAyNiwgMjEwLCAyMTksIAotICAgIDI2LCA0LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA0LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAKLSAgICAxNzgsIDg3LCAyNiwgNCwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDIyNCwgMTMsIAotICAgIDc4LCAyNiwgMjE2LCAxOCwgMjYsIDI0NywgMjUyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNiwgMTgsIAotICAgIDI2LCAyNTQsIDk3LCAyMTcsIDIsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMTYsIAotICAgIDE4LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNTQsIDE0MywgMjYsIDYsIDEsIAotICAgIDI1MiwgMjYsIDI2LCA2LCAxLCAyNDMsIDEwNywgMjYsIDYsIDEsIDI0OCwgNTQsIDI2LCA2LCAxLCAyNDUsIDEwMCwgMjYsIAotICAgIDYsIDEsIDIxMCwgODUsIDI2LCA2LCAxLCAyNDUsIDYzLCAyNiwgNiwgMSwgMjE2LCAxNzksIDI2LCA2LCAxLCAyMzUsIDE4NSwgCi0gICAgMjYsIDYsIDEsIDIzNCwgMjIyLCAyNiwgNiwgMSwgMjMzLCA5OCwgMjYsIDYsIDEsIDIzMCwgMTAyLCAyNiwgNiwgMSwgMjI3LCAKLSAgICAyMzcsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMTk5LCAyNiwgNiwgMSwgMjI1LCAxMDgsIDI2LCA2LCAKLSAgICAxLCAyMjMsIDM3LCAyNiwgNiwgMSwgMjE5LCAxNzcsIDI2LCA2LCAxLCAyMTcsIDQxLCAyNiwgNiwgMSwgMjE0LCAxNTcsIAotICAgIDI2LCA2LCAxLCAyMjUsIDEzMywgMjYsIDYsIDEsIDI1MCwgMTEwLCAyNiwgNiwgMSwgMjI0LCAxNjEsIDI2LCA2LCAxLCAKLSAgICAyMjYsIDIwMSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIAotICAgIDI1MSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyNDUsIDY0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ3LCAyNTIsIDIyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjU0LCAxNDMsIDI2LCA0LCAxLCAyNTIsIDI2LCAyNiwgCi0gICAgNCwgMSwgMjQzLCAxMDcsIDI2LCA0LCAxLCAyNDgsIDU0LCAyNiwgNCwgMSwgMjQ1LCAxMDAsIDI2LCA0LCAxLCAyMTAsIDg1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2MywgMjYsIDQsIDEsIDIxNiwgMTc5LCAyNiwgNCwgMSwgMjM1LCAxODUsIDI2LCA0LCAxLCAyMzQsIAotICAgIDIyMiwgMjYsIDQsIDEsIDIzMywgOTgsIDI2LCA0LCAxLCAyMzAsIDEwMiwgMjYsIDQsIDEsIDIyNywgMjM3LCAyNiwgNCwgMSwgCi0gICAgMjExLCAxNTcsIDI2LCA0LCAxLCAyMjYsIDE5OSwgMjYsIDQsIDEsIDIyNSwgMTA4LCAyNiwgNCwgMSwgMjIzLCAzNywgMjYsIAotICAgIDQsIDEsIDQwLCAyMTksIDE3NywgMjYsIDQsIDEsIDIxOSwgMTc3LCAyNiwgNCwgMSwgMjE3LCA0MSwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU3LCAyNiwgNCwgMSwgMjI1LCAxMzMsIDI2LCA0LCAxLCAyNTAsIDExMCwgMjYsIDQsIDEsIDIyNCwgMTYxLCAyNiwgNCwgCi0gICAgMSwgMjI2LCAyMDEsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTEsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAKLSAgICAyNTEsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgMTgsIDI2LCA2LCAyMzQsIDI0NywgODcsIDI2LCAyNTIsIDI3LCA4NywgMjYsIAotICAgIDIxNiwgMTgwLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNTUsIDMsIDIyLCAKLSAgICAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDgsIDIsIDIyLCAyNDEsIDUyLCA4NywgMjYsIDIyNSwgMTM0LCA4NywgCi0gICAgMjYsIDIyNSwgMTA5LCA4NywgMjYsIDIzNCwgMjQ3LCA4NywgMjYsIDEsIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDQsIDEsIAotICAgIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDEsIDIxOCwgMTM3LCAyNiwgNCwgMSwgMjE4LCAxMzcsIDI2LCAxLCAyNDcsIDIyNywgCi0gICAgMjYsIDQsIDEsIDI0NywgMjI3LCAyNiwgMSwgMjM0LCA2LCAyNiwgNCwgMSwgMjM0LCA2LCAyNiwgMSwgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyMjEsIDI0NiwgODEsIDYsIDEsIDIyMCwgNTUsIDgxLCA0LCAxLCAyMjAsIDU1LCA4MSwgNiwgMSwgMjQ0LCAxNDAsIAotICAgIDgxLCA0LCAxLCAyNDQsIDE0MCwgODEsIDYsIDEsIDIzNCwgMTE3LCA4MSwgNCwgMSwgMjM0LCAxMTcsIDgxLCA2LCAxLCAKLSAgICAyNDEsIDQ1LCA4MSwgNCwgMSwgMjQxLCA0NSwgODEsIDYsIDEsIDI0MywgMTAyLCA4MSwgNCwgMSwgMjQzLCAxMDIsIDgxLCAKLSAgICA2LCAxLCAyMjAsIDIyLCA4MSwgNCwgMSwgMjIwLCAyMiwgODEsIDYsIDEsIDI0OCwgNjksIDgxLCA0LCAxLCAyNDgsIDY5LCAKLSAgICAyNiwgMjM0LCAyMjMsIDg3LCAyNiwgMjIzLCAzOCwgODcsIDI2LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCAxLCAyMTAsIAotICAgIDIyNCwgMjYsIDYsIDIxNiwgMTgwLCA4NywgMjYsIDIzMiwgODMsIDI0NSwgMTAxLCA4NywgMjYsIDIyMywgNDksIDIzMiwgCi0gICAgODMsIDI0NSwgMTAxLCA4NywgMjYsIDYsIDEsIDIyMCwgNywgMjYsIDQsIDEsIDIyMCwgNywgMjYsIDYsIDIzMiwgODMsIAotICAgIDIxOSwgMTc4LCA4NywgMjYsIDYsIDEsIDIyMSwgMjQzLCAyNiwgNCwgMSwgMjIxLCAyNDMsIDI2LCAyMjMsIDM4LCAyLCAKLSAgICAyMTgsIDEwMywgODcsIDI2LCA2LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA2LCAyNDYsIDExOCwgCi0gICAgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgCi0gICAgMzMsIDYsIDEsIDIzNiwgNjEsIDIsIDI0MiwgMTM2LCAzMywgNiwgMSwgMjM1LCAxODksIDMzLCA2LCAxLCAyNDcsIDE2MiwgCi0gICAgMzMsIDYsIDEsIDI0MiwgMTg3LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjAsIDMzLCA2LCAxLCAyNDYsIDM2LCAzMywgCi0gICAgNiwgMSwgMjUxLCA3NiwgNzMsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEyNiwgMzMsIDYsIDEsIDIzMiwgCi0gICAgMTg3LCAzMywgNiwgMSwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMTUsIDE3NCwgMzMsIDYsIDEsIDIzNCwgNDgsIDMzLCA2LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgMjQyLCAxMzYsIDMzLCA2LCAxLCAyMTksIDI1MSwgNzAsIDMzLCA2LCAxLCAyNDYsIDMyLCAzMywgNiwgCi0gICAgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDc1LCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIDIzNiwgMzMsIDYsIAotICAgIDEsIDI0OCwgOTAsIDMzLCA2LCAxLCAyMzYsIDYwLCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIDIxMCwgOTQsIDMzLCAKLSAgICA2LCAxLCA3MywgMzMsIDYsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTc0LCAzMywgCi0gICAgNiwgMSwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyNDUsIDE1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgMjI1LCAyMjEsIDMzLCAKLSAgICA2LCAxLCAyNDUsIDkyLCAzMywgNiwgMSwgMjQ1LCA4MiwgMzMsIDYsIDEsIDIxNywgMjIsIDMzLCA2LCAxLCA3MCwgMzMsIDYsIAotICAgIDEsIDI0NSwgMjAyLCAzMywgNiwgMSwgMTYyLCAzMywgNiwgMSwgMjE1LCAxNzgsIDMzLCA2LCAxLCAyNTAsIDEzMSwgMzMsIAotICAgIDYsIDEsIDIyMCwgMTAyLCAzMywgNiwgMSwgMjIwLCA2NSwgMzMsIDYsIDEsIDI0MiwgMywgNTAsIDMzLCA2LCAxLCAyMTEsIAotICAgIDI3LCAzMywgNiwgMSwgMjE5LCA1MiwgNTAsIDMzLCA2LCAxLCA3NSwgMzMsIDYsIDEsIDIxMCwgMjEyLCAzMywgNiwgMSwgCi0gICAgMTkxLCAzMywgNCwgMSwgNjEsIDMzLCA0LCAxLCAyNTIsIDc1LCAzMywgNCwgMSwgMjEzLCAyNTUsIDMzLCA0LCAxLCAyNDIsIAotICAgIDIzNiwgMzMsIDQsIDEsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMzYsIDYwLCAzMywgNCwgMSwgMjEwLCA3NCwgMzMsIDQsIDEsIAotICAgIDIxMCwgOTQsIDMzLCA0LCAxLCA3MywgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDQsIDEsIDE3NiwgMzMsIDQsIDEsIAotICAgIDI0NSwgMTc0LCAzMywgNCwgMSwgMjQ1LCAxNTksIDMzLCA0LCAxLCAyNDUsIDE1MCwgMzMsIDQsIDEsIDc2LCAzMywgNCwgMSwgCi0gICAgMjI1LCAyMjEsIDMzLCA0LCAxLCAyNDUsIDkyLCAzMywgNCwgMSwgMjQ1LCA4MiwgMzMsIDQsIDEsIDIxNywgMjIsIDMzLCA0LCAKLSAgICAxLCA3MCwgMzMsIDQsIDEsIDI0NSwgMjAyLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAKLSAgICAyNTAsIDEzMSwgMzMsIDQsIDEsIDIyMCwgMTAyLCAzMywgNCwgMSwgMjIwLCA2NSwgMzMsIDQsIDEsIDI0MiwgMywgNTAsIAotICAgIDMzLCA0LCAxLCAyMTEsIDI3LCAzMywgNCwgMSwgMjE5LCA1MiwgNTAsIDMzLCA0LCAxLCA3NSwgMzMsIDQsIDEsIDIxMCwgCi0gICAgMjEyLCAzMywgNCwgMSwgMTkxLCAzMywgNCwgMSwgMjM2LCA2MSwgMiwgMjQyLCAxMzYsIDMzLCA0LCAxLCAyMzUsIDE4OSwgCi0gICAgMzMsIDQsIDEsIDI0NywgMTYyLCAzMywgNCwgMSwgMjQyLCAxODcsIDMzLCA0LCAxLCAyMTQsIDIwMiwgMjM2LCA2MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTEsIDc2LCA3MywgMzMsIDQsIDEsIDIxMSwgOCwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTI2LCAzMywgNCwgMSwgMjMyLCAxODcsIDMzLCA0LCAxLCAyMjgsIDE3OCwgMzMsIDQsIDEsIDIxNSwgMTc0LCAzMywgNCwgCi0gICAgMSwgMjM0LCA0OCwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDIsIDEzNiwgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzIsIDMzLCA2LCAxLCAyMjYsIDIwMSwgMzMsIDQsIDEsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjExLCA1OSwgCi0gICAgMzMsIDQsIDEsIDIxMSwgNTksIDMzLCA2LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA0LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA2LCAKLSAgICAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgCi0gICAgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjMzLCAyMzMsIDMzLCA0LCAxLCAyMzMsIDIzMywgMzMsIDYsIDEsIDIyNCwgMTYxLCAzMywgNCwgMSwgMjI0LCAxNjEsIDMzLCAKLSAgICA2LCAxLCAyNDQsIDgyLCAzMywgNCwgMSwgMjQ0LCA4MiwgMzMsIDYsIDEsIDIzNSwgMTQ2LCAzMywgNCwgMSwgMjM1LCAxNDYsIAotICAgIDMzLCA2LCAxLCAyMzUsIDE0NywgMiwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCAzMywgNCwgMSwgMjM1LCAxNDcsIDIsIDUyLCAKLSAgICAyNDIsIDEzNywgMjU1LCAxNCwgMzMsIDYsIDEsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyMjIsIAotICAgIDE4NSwgMjI2LCAyMDEsIDMzLCA0LCAxLCAyMjIsIDE4NSwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAKLSAgICA2NSwgMzMsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDY1LCAzMywgNiwgMSwgMjI2LCAxNDAsIDMzLCA0LCAxLCAyMjYsIAotICAgIDE0MCwgMzMsIDYsIDEsIDIzNCwgNiwgMzMsIDQsIDEsIDIzNCwgNiwgMzMsIDIxNiwgMTQ2LCA1MCwgMzgsIDMzLCAyMTYsIAotICAgIDY1LCAzOCwgMzMsIDIyNiwgNjUsIDM4LCAzMywgMjQ4LCAxNTQsIDIyNSwgMTgsIDM4LCAzMywgMjI0LCAxNTUsIDIyNSwgCi0gICAgMTgsIDM4LCAzMywgMjI1LCAzLCAzOCwgMzMsIDI0MCwgMjExLCAyMTYsIDE0NiwgNTAsIDM4LCAzMywgMjMwLCAxOTEsIDUwLCAKLSAgICAzMywgNiwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNCwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNiwgMSwgCi0gICAgMjQ1LCA5MywgMiwgMjE2LCAxMTQsIDMzLCA0LCAxLCAyNDUsIDkzLCAyLCAyMTYsIDExNCwgMzMsIDYsIDEsIDI0MiwgMjM3LCAKLSAgICAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTQsIDE1NiwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCA5MSwgCi0gICAgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgCi0gICAgMSwgMjQyLCAyMzcsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgCi0gICAgMjEwLCA3NSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMSwgMjM1LCAxMywgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDI0OCwgMzksIAotICAgIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAKLSAgICAyMzUsIDEzLCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDkxLCAzMywgNiwgMSwgMjUyLCAxMjQsIDE3NiwgMzMsIDQsIAotICAgIDEsIDI1MiwgMTI0LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMjcsIDI0NSwgMTUxLCAyNDIsIDIzNiwgMzMsIDQsIDI3LCAyNDUsIDE1MSwgMjQyLCAyMzYsIAotICAgIDMzLCA2LCAxLCAyMjUsIDIyMiwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDIyNSwgMjIyLCAyLCAyMzAsIDIyNCwgCi0gICAgMTAzLCAzMywgNiwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNCwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNiwgMSwgMjQ1LCA4MywgCi0gICAgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgODMsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTcsIDIzLCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNCwgMSwgMjE3LCAyMywgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxOCwgMTIxLCA3MCwgMzMsIDQsIDEsIDIxOCwgCi0gICAgMTIxLCA3MCwgMzMsIDYsIDEsIDIxOCwgMTIxLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgMjE4LCAxMjEsIDEwNCwgMiwgOTEsIAotICAgIDMzLCA2LCAxLCAyNDIsIDQ5LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDI3LCAKLSAgICAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDQsIDI3LCAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgNjcsIDkxLCAKLSAgICAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzMsIDMzLCA0LCAxLCAyMjAsIDMzLCAzMywgCi0gICAgNiwgMSwgMjU1LCAyMCwgMjUwLCAxMzEsIDMzLCA0LCAxLCAyNTUsIDIwLCAyNTAsIDEzMSwgMzMsIDYsIDEsIDI1NSwgMjAsIAotICAgIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjU1LCAyMCwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCAxLCAKLSAgICAyMjYsIDU4LCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE0NiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTc1LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMTAzLCAKLSAgICAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgCi0gICAgMjQ1LCAxNTEsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyMzQsIDEyNywgMjUwLCAxMzEsIDMzLCA0LCAxLCAyMzQsIDEyNywgCi0gICAgMjUwLCAxMzEsIDMzLCA2LCAxLCAyNDUsIDE2MCwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDI0NSwgMTYwLCAyLCAyMTcsIDc3LCAKLSAgICAzMywgNCwgMSwgMjI2LCA1OCwgMzMsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCAzMywgNiwgMSwgMTE1LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxMTUsIDIsIDI0OCwgMSwgMzMsIDYsIDI3LCAxMTUsIAotICAgIDIzNiwgNjAsIDMzLCA0LCAyNywgMTE1LCAyMzYsIDYwLCAzMywgNiwgMSwgMjM2LCA2MSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAKLSAgICAxLCAyMzYsIDYxLCAyLCAyNTEsIDE0NiwgMzMsIDYsIDEsIDIyMSwgMTk1LCAzMywgNCwgMSwgMjIxLCAxOTUsIDMzLCA2LCAKLSAgICAxLCAyMjEsIDE5NiwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjIxLCAxOTYsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgNzUsIAotICAgIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDI1NSwgMjAsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTUsIAotICAgIDIwLCAyNDYsIDM2LCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgCi0gICAgMjMyLCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDMzLCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjUyLCAxMzQsIDc2LCAzMywgCi0gICAgNCwgMSwgMjUyLCAxMzQsIDc2LCAzMywgNiwgMSwgMjUyLCAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjUyLCAKLSAgICAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCAzMywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNDgsIDEsIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIAotICAgIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgCi0gICAgMjQ4LCAxLCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIAotICAgIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgCi0gICAgMzMsIDYsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNDksIAotICAgIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDE0LCAyNDgsIDkwLCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjQ4LCA5MCwgMzMsIDYsIDEsIDIzNCwgMTQsIDI0NywgMTYyLCAzMywgNCwgMSwgMjM0LCAxNCwgMjQ3LCAKLSAgICAxNjIsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAxNCwgMjEwLCAyNywgMzMsIDYsIDEsIAotICAgIDIzNCwgMTQsIDI0NiwgMzAsIDMzLCA0LCAxLCAyMzQsIDE0LCAyNDYsIDMwLCAzMywgNiwgMSwgMjM0LCAxNCwgMjMyLCAKLSAgICAxODcsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMzIsIDE4NywgMzMsIDYsIDEsIDIzNCwgMTQsIDIyOCwgMTc4LCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTksIDEwOSwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxOSwgCi0gICAgMTA5LCAzMywgNiwgMSwgMjM0LCAxNCwgMjE2LCA2MCwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxNiwgNjAsIDMzLCA2LCAxLCAKLSAgICAyMjMsIDQ5LCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA0OSwgMjEwLCA5NCwgMzMsIDYsIDEsIDI0NSwgMTc1LCAyLCAxMDMsIAotICAgIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMTAzLCAzMywgNiwgMSwgMjMyLCAyNTQsIDMzLCA0LCAxLCAyMzIsIDI1NCwgMzMsIAotICAgIDYsIDEsIDIyMywgMzksIDMzLCA0LCAxLCAyMjMsIDM5LCAzMywgNiwgMSwgMjExLCA5MiwgMzMsIDQsIDEsIDIxMSwgOTIsIAotICAgIDMzLCA2LCAxLCAyMjQsIDg4LCAzMywgNCwgMSwgMjI0LCA4OCwgMzMsIDYsIDEsIDIxMiwgMjIsIDMzLCA0LCAxLCAyMTIsIAotICAgIDIyLCAzMywgNiwgMSwgMjU0LCAxNjYsIDE3NiwgMzMsIDQsIDEsIDI1NCwgMTY2LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE3NSwgCi0gICAgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjQ1LCAKLSAgICAxNTEsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIAotICAgIDIyNSwgMjIyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjI1LCAyMjIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMjAsIDM0LCAKLSAgICAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjIwLCAzNCwgMiwgMjQ4LCAzOSwgMTUwLCA2LCAxLCAyNTMsIDE2NCwgMTUwLCA2LCAKLSAgICAxLCAyNTIsIDM5LCAxNTAsIDYsIDEsIDI0MiwgMjAzLCAxNTAsIDYsIDEsIDI0OCwgMjIxLCAxNTAsIDYsIDEsIDI0NSwgCi0gICAgMjEzLCAxNTAsIDYsIDEsIDIxMCwgMTE2LCAxNTAsIDYsIDEsIDI0NSwgMTk3LCAxNTAsIDYsIDEsIDI0NSwgNjUsIDE1MCwgCi0gICAgNiwgMSwgMTExLCAxNTAsIDYsIDEsIDIxMCwgNzQsIDE1MCwgNiwgMSwgMjM1LCAyMjcsIDE1MCwgNiwgMSwgMjMyLCAxOTAsIAotICAgIDE1MCwgNiwgMSwgMjExLCAxNjAsIDE1MCwgNiwgMSwgMjUxLCAzMywgMTUwLCA2LCAxLCAyMzQsIDE2NSwgMTUwLCA2LCAxLCAKLSAgICAyNDEsIDY4LCAxNTAsIDYsIDEsIDIzNSwgMTQxLCAxNTAsIDYsIDEsIDI0MiwgMjQ2LCAxNTAsIDYsIDEsIDI1MCwgMTI2LCAKLSAgICAxNTAsIDYsIDEsIDIzMSwgNTgsIDE1MCwgNiwgMSwgMjExLCA4LCAxNTAsIDYsIDEsIDIyOCwgMzksIDE1MCwgNiwgMSwgCi0gICAgMjIwLCAxMDIsIDE1MCwgNiwgMSwgMjEzLCAxMzgsIDE1MCwgNiwgMSwgMjUwLCAxNTcsIDE1MCwgNiwgMSwgMjI1LCAyMDUsIAotICAgIDE1MCwgNiwgMSwgMjM1LCAxMTAsIDE1MCwgNiwgMSwgMjA1LCAxNTAsIDYsIDEsIDIyMSwgMTYxLCAxNTAsIDYsIDEsIDIxMywgCi0gICAgMTc5LCAxNTAsIDYsIDEsIDIxNiwgNjIsIDE1MCwgNiwgMSwgMjIzLCA5NSwgMTUwLCA2LCAxLCAyNDksIDIzOCwgMTUwLCA2LCAKLSAgICAxLCAyMTAsIDI0OSwgMTUwLCA2LCAxLCAyMjUsIDQ2LCAxNTAsIDYsIDEsIDIzNCwgMTc2LCAxNTAsIDYsIDEsIDIyNiwgCi0gICAgMjIyLCAxNTAsIDYsIDEsIDI0NCwgMTQyLCAxNTAsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzMywgMTUwLCAyNTQsIDU3LCAKLSAgICAxNTAsIDI0NSwgMTU0LCA3OCwgMTUwLCAyNDUsIDMxLCA3OCwgMTUwLCAyNDksIDIxOSwgMTUwLCAyMjQsIDEzLCA3OCwgCi0gICAgMTUwLCAyNTUsIDIxLCA3OCwgMTUwLCA0LCAxLCAyNTMsIDE2NCwgMTUwLCA0LCAxLCAyNTIsIDM5LCAxNTAsIDQsIDEsIAotICAgIDI0MiwgMjAzLCAxNTAsIDQsIDEsIDI0OCwgMjIxLCAxNTAsIDQsIDEsIDI0NSwgMjEzLCAxNTAsIDQsIDEsIDIxMCwgMTE2LCAKLSAgICAxNTAsIDQsIDEsIDI0NSwgMTk3LCAxNTAsIDQsIDEsIDI0NSwgNjUsIDE1MCwgNCwgMSwgMTExLCAxNTAsIDQsIDEsIDIxMCwgCi0gICAgNzQsIDE1MCwgNCwgMSwgMjM1LCAyMjcsIDE1MCwgNCwgMSwgMjMyLCAxOTAsIDE1MCwgNCwgMSwgMjExLCAxNjAsIDE1MCwgCi0gICAgNCwgMSwgMjUxLCAzMywgMTUwLCA0LCAxLCAyMzQsIDE2NSwgMTUwLCA0LCAxLCAyNDEsIDY4LCAxNTAsIDQsIDEsIDIzNSwgCi0gICAgMTQxLCAxNTAsIDQsIDEsIDI0MiwgMjQ2LCAxNTAsIDQsIDEsIDI1MCwgMTI2LCAxNTAsIDQsIDEsIDIzMSwgNTgsIDE1MCwgCi0gICAgNCwgMSwgMjExLCA4LCAxNTAsIDQsIDEsIDIyOCwgMzksIDE1MCwgNCwgMSwgMjIwLCAxMDIsIDE1MCwgNCwgMSwgMjEzLCAKLSAgICAxMzgsIDE1MCwgNCwgMSwgMjUwLCAxNTcsIDE1MCwgNCwgMSwgMjI1LCAyMDUsIDE1MCwgNCwgMSwgMjM1LCAxMTAsIDE1MCwgCi0gICAgNCwgMSwgMjA1LCAxNTAsIDQsIDEsIDIyMSwgMTYxLCAxNTAsIDQsIDEsIDIxMywgMTc5LCAxNTAsIDQsIDEsIDIxNiwgNjIsIAotICAgIDE1MCwgNCwgMSwgMjIzLCA5NSwgMTUwLCA0LCAxLCAyNDksIDIzOCwgMTUwLCA0LCAxLCAyMTAsIDI0OSwgMTUwLCA0LCAxLCAKLSAgICAyMjUsIDQ2LCAxNTAsIDQsIDEsIDIzNCwgMTc2LCAxNTAsIDQsIDEsIDIyNiwgMjIyLCAxNTAsIDQsIDEsIDI0NCwgMTQyLCAKLSAgICAxNTAsIDQsIDI3LCAyNDUsIDIxNCwgMjEwLCAyNDksIDE1MCwgMjQzLCAyMjksIDIxOCwgMTI5LCAxNTAsIDI0MCwgMTY4LCAKLSAgICAxNTAsIDI0NiwgOTUsIDUwLCA5NCwgMjU1LCAxNSwgMjQ1LCA1NywgOTQsIDI1NSwgMTUsIDIyMSwgMTYyLCA5NCwgMjU1LCAKLSAgICAxNSwgMjIwLCA4OCwgOTQsIDI1NSwgMTUsIDIxMCwgMTA0LCAyMjQsIDcxLCA5NCwgMjU1LCAxNSwgMjEwLCAxMDQsIDI0MywgCi0gICAgMTI1LCA5NCwgMjU1LCAxNSwgMjE2LCA3NSwgOTQsIDI1NSwgMTUsIDIyMywgNDcsIDk0LCAyNTUsIDE1LCAyMTAsIDEwMywgCi0gICAgOTQsIDI1NSwgMTUsIDIyNSwgMjQ1LCA5NCwgMjU1LCAxNSwgMjExLCAyMCwgOTQsIDI1NSwgMTUsIDIxNiwgMjE0LCA5NCwgCi0gICAgMjU1LCAxNSwgMjQzLCA0MSwgOTQsIDI1NSwgMTUsIDI0MywgNDIsIDIzMCwgNjksIDk0LCAyNTUsIDE1LCAyNDMsIDM5LCAKLSAgICA5NCwgMjU1LCAxNSwgMjI0LCA3MiwgMjI2LCAxNiwgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyNDMsIDU2LCA5NCwgMjU1LCAKLSAgICAxNSwgMjI1LCAyMjYsIDk0LCAyNTUsIDE1LCAyNTMsIDIwMCwgMjQyLCA0MSwgOTQsIDI1NSwgMTUsIDIzMCwgNzksIDk0LCAKLSAgICAyNTUsIDE1LCAyMzEsIDIwOCwgOTQsIDI1NSwgMTUsIDIzMSwgNDksIDk0LCAyNTUsIDE1LCAyMzEsIDUwLCAyMzQsIDE3NywgCi0gICAgOTQsIDI1NSwgMTUsIDI0OCwgMTYzLCA5NCwgMjU1LCAxNSwgMjI0LCA4MywgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyMjQsIAotICAgIDY3LCA5NCwgMjU1LCAxNSwgMjExLCAzMCwgMjUyLCA0MCwgMjEwLCAyMzAsIDk0LCAyNTUsIDE1LCAyMjYsIDIwNywgOTQsIAotICAgIDI1NSwgMTUsIDIzNiwgMTksIDk0LCAyNTUsIDE1LCAyNDgsIDcwLCA5NCwgMjU1LCAxNSwgMjEwLCAzMywgOTQsIDE2NCwgCi0gICAgMjMxLCAxNDMsIDI1MCwgMzUsIDk0LCAyMjUsIDExLCAyMjAsIDM2LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyMSwgMTYyLCAKLSAgICA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNSwgMjM5LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNCwgNzYsIDk0LCAyMjUsIAotICAgIDExLCAyNDEsIDE1OCwgOTQsIDIyNSwgMTEsIDIxNSwgMTc2LCA5NCwgMjI1LCAxMSwgMjIxLCAxNjIsIDk0LCAyMjUsIDExLCAKLSAgICAyMjUsIDIzOSwgOTQsIDIyNSwgMTEsIDIyNCwgNzYsIDk0LCAyMjUsIDExLCAyNDEsIDYxLCA5NCwgMjI1LCAxMSwgMjQxLCAKLSAgICA2MiwgMjQxLCAyNTIsIDMxLCAyMTQsIDMsIDk0LCAyMjUsIDExLCAyMjQsIDE3LCA5NCwgMjI1LCAxMSwgMjQ4LCAyMDgsIAotICAgIDE3NywgMjMxLCAxNzEsIDk0LCAyMjUsIDExLCAyMzEsIDM4LCA5NCwgMjI0LCAxNDEsIDIzMSwgMTY4LCA5NCwgMjI1LCAxMSwgCi0gICAgMjIzLCAxNjksIDk0LCAyMjQsIDE0MSwgMjI1LCAyNDcsIDk0LCAyMjUsIDExLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIAotICAgIDIyNSwgMTEsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDIyNCwgMTQxLCAyMTksIDUzLCAyMjUsIDI0MSwgOTQsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0NywgMTIwLCA5NCwgMTY0LCAyMzIsIDEwOCwgMjQ3LCAxMjAsIDk0LCAyMjQsIDE0MSwgMjI3LCAxOTUsIAotICAgIDI0MiwgNDAsIDk0LCAyMjUsIDExLCAyMjQsIDc3LCAyMjQsIDcxLCA5NCwgMSwgMjU0LCAxNzAsIDk0LCAxLCAyNTIsIDI4LCAKLSAgICA5NCwgMSwgMjQyLCAyMDEsIDk0LCAxLCAyNDgsIDE4OSwgOTQsIDEsIDI0MSwgMjM4LCA5NCwgMSwgMjE0LCAzLCA5NCwgMSwgCi0gICAgMjEwLCA5NywgOTQsIDEsIDI0MSwgMTk3LCA5NCwgMSwgMjE2LCAyMzAsIDk0LCAxLCAyMTAsIDIzMywgOTQsIDEsIDQwLCAKLSAgICAyMzQsIDI1MCwgOTQsIDEsIDIzNCwgMjUwLCA5NCwgMSwgMjMzLCA5NCwgOTQsIDEsIDQwLCAyMzEsIDY1LCA5NCwgMSwgCi0gICAgMjMxLCA2NSwgOTQsIDEsIDQwLCAyMjcsIDE5NCwgOTQsIDEsIDIyNywgMTk0LCA5NCwgMSwgMjIxLCAyNDksIDk0LCAxLCAKLSAgICAyNTMsIDE2MiwgOTQsIDEsIDQwLCAyMjUsIDIyMSwgOTQsIDEsIDIyNSwgMjIxLCA5NCwgMSwgNDAsIDIxNSwgMTc5LCA5NCwgCi0gICAgMSwgMjE1LCAxNzksIDk0LCAxLCAyMjQsIDM5LCA5NCwgMSwgMjIzLCA2NywgOTQsIDEsIDIyMCwgMjAsIDk0LCAxLCAyMTcsIAotICAgIDM4LCA5NCwgMjcsIDIxMSwgNiwgNTIsIDIxNCwgMywgOTQsIDI3LCAyMTEsIDYsIDIxNCwgNCwgMjEwLCAyMzMsIDk0LCAyNywgCi0gICAgMjExLCA2LCA1MiwgMjEwLCAyMzMsIDk0LCAyMjQsIDE0MSwgMjQzLCA0MSwgOTQsIDIyNCwgMTQxLCAyNDMsIDM5LCAxMCwgCi0gICAgNTQsIDUwLCAxMCwgNSwgMjIxLCAyNDIsIDEwLCAyNDQsIDMwLCAyMzEsIDE1NCwgMTAsIDUsIDIyMiwgMjMsIDEwLCA1LCAKLSAgICAyMjEsIDI0NSwgMjU0LCAzNywgMjQ5LCAxMDksIDIyMiwgMTkzLCAyNTQsIDM3LCAyNDQsIDQsIDIyMiwgMTkzLCAxMCwgCi0gICAgMjIzLCAxMzQsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMzAsIDE5MywgNTAsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMTYsIDI0OCwgCi0gICAgMjE2LCAxNDgsIDUwLCAyNTQsIDIyMSwgNTAsIDEwLCAyNDksIDIxOSwgMTAsIDI0OCwgMTUwLCAyMjAsIDEzNywgMTAsIAotICAgIDIyNSwgMTMsIDIxMywgMjQxLCA1MCwgMTAsIDUsIDIzMCwgMTc0LCAxMCwgNSwgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0NSwgCi0gICAgMTAsIDUsIDI1NCwgMTcyLCAyNTMsIDIyMSwgMTAsIDUsIDIyMywgMTY3LCAyNTQsIDE3MSwgMTAsIDUsIDIyMywgMTc1LCAKLSAgICAyNTQsIDE1MiwgMjU0LCAxMDQsIDEwLCA1LCAyMTcsIDcwLCAxMCwgNCwgMTI1LCAyMTcsIDgwLCAxMCwgNCwgMTI1LCAyNywgCi0gICAgMTEyLCAyLCAyMzMsIDEwMywgMiwgMjExLCA0MywgMTAsIDQsIDEyNSwgMjEwLCAxMDgsIDEwLCA0LCAyNDQsIDE2NSwgMTAsIAotICAgIDQsIDI0OCwgMTg0LCAxMCwgNCwgMjM0LCAyMDUsIDEwLCAyMjAsIDE1MCwgMTAsIDIxNSwgMjExLCA1OSwgMjI0LCAxNDEsIAotICAgIDc4LCAxMCwgMjI0LCAxMywgNzgsIDEwLCAxLCAyMzQsIDIwOSwgMjExLCA0MywgMTAsIDEsIDI0MiwgMTksIDEwLCAxLCAKLSAgICAxMTIsIDIsIDIzMSwgMjI4LCA0OCwgMTAsIDEsIDExMiwgMiwgMjAyLCA0OCwgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNDgsIAotICAgIDEwLCAxLCAxMTIsIDIsIDIwMiwgNTEsIDEwLCAxLCA3OSwgMiwgMjAyLCA0OCwgMTAsIDEsIDI1NCwgMTcwLCAxMCwgMSwgCi0gICAgMjUyLCA1NCwgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjQsIDEwLCAxLCAyMTcsIDcsIDEwLCAxLCAyMTYsIDE5MiwgMTAsIDEsIAotICAgIDIzNSwgMTIzLCAxMCwgMSwgMjQyLCAzNywgMTAsIDEsIDIzNCwgMTI5LCAxMCwgMSwgMjQ4LCAxOTUsIDEwLCAxLCAyMTYsIAotICAgIDIwMiwgMTAsIDEsIDIyMywgOTUsIDEwLCAxLCAyMTAsIDEwOCwgMTAsIDEsIDIyMSwgMTY2LCAxMCwgMSwgMjIwLCA1OSwgCi0gICAgMTAsIDEsIDIyMiwgMjYsIDEwLCAxLCAyNDgsIDIxNiwgMTAsIDEsIDIxNywgODAsIDEwLCAxLCAyMTAsIDExMSwgMTAsIDEsIAotICAgIDI1NCwgMTk2LCAxMCwgMSwgMjQyLCAyNDQsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAKLSAgICAxNzUsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDc5LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDEzNCwgMTcwLCA0OCwgMTAsIAotICAgIDIxNywgNDMsIDEwLCAxLCAyNDQsIDE0MiwgMTAsIDEsIDIyNCwgODEsIDEwLCAxLCAyMzQsIDI1MCwgMTAsIDEsIDIzMywgCi0gICAgMTAyLCAxMCwgMSwgMjMxLCA3OCwgMTAsIDEsIDIyOCwgNjIsIDEwLCAxLCAyNDEsIDIxOCwgMTAsIDEsIDIxMiwgMzAsIDEwLCAKLSAgICAxLCAxMTIsIDIzMSwgMTkyLCAxMCwgMSwgMjExLCA0MywgMTAsIDI0NCwgMTYzLCAxMCwgMjQ4LCAxODIsIDEwLCAyMzQsIAotICAgIDIwMywgMTAsIDI0NCwgMTY1LCAxMCwgMjQ4LCAxODQsIDEwLCAyMzQsIDIwNSwgMTAsIDIyMCwgOTMsIDEwLCAyMTgsIDQ1LCAKLSAgICAxMCwgMjMxLCAyMjYsIDQ4LCAxMCwgMjAyLCA0OCwgMTAsIDIwMiwgNTEsIDEwLCAyMTgsIDY1LCAyNTQsIDE3MCwgMTAsIAotICAgIDIzNSwgMTkzLCAyNDgsIDE4NCwgMTAsIDE2NCwgMjI4LCA2MywgMjQyLCAyMTgsIDEwLCAyMDksIDI1NSwgMTAsIDI1LCA1LCAKLSAgICA0LCAyMTQsIDEwNiwgNDgsIDEwLCAyNSwgNSwgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA0OCwgMTAsIDI1LCA1LCA1OSwgNTEsIAotICAgIDEwLCAyMjMsIDQ5LCAyNDgsIDE4NCwgMTAsIDI0NCwgMTY2LCAyLCAxMTMsIDI0NywgMTE4LCAxMCwgMjEyLCAzMiwgMjAyLCAKLSAgICA1MSwgMjU0LCAzNywgMjEsIDIxMCwgODYsIDI1NCwgMzcsIDIxLCAxMTAsIDI1NCwgMzcsIDIxLCAxMDUsIDI1NCwgMzcsIAotICAgIDIxLCAxNTgsIDI1NCwgMzcsIDIxLCAxNjEsIDI1NCwgMzcsIDIxLCAxODksIDI1NCwgMzcsIDIxLCAxOTQsIDI1NCwgMzcsIAotICAgIDIxLCAxOTgsIDI1NCwgMzcsIDIxLCAxOTUsIDI1NCwgMzcsIDIxLCAyMDAsIDEwLCAyMjUsIDE4MiwgNTAsIDEwLCAyNDgsIAotICAgIDgzLCAyMjAsIDEzNywgMTAsIDIxNiwgMTQ2LCAyMjAsIDEzNywgMTAsIDI0NCwgODEsIDIyNSwgOSwgMjE4LCAxNTYsIDEwLCAKLSAgICAxLCAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDEsIDI0NywgMTE5LCAyMjQsIDgxLCAxMCwgMSwgMjE4LCAyMywgMjU0LCAxNzAsIAotICAgIDEwLCAxLCAxMTIsIDIxMiwgNDYsIDEwLCAxLCAxMTIsIDIsIDIxMiwgMzIsIDIwMiwgNDgsIDEwLCAxLCAxMTIsIDIsIDIxMiwgCi0gICAgMzIsIDIwMiwgNTEsIDEwLCAxLCAxMjUsIDI0MiwgMTksIDEwLCAxLCAxMjUsIDIwMiwgMjU0LCAxNzAsIDEwLCAxLCAxMjUsIAotICAgIDIwMiwgMjEyLCAzMCwgMTAsIDEsIDEwNCwgMiwgMjAyLCA0OCwgMTAsIDEsIDEyNSwgMjAyLCAyMTEsIDQzLCAxMCwgMSwgCi0gICAgMjE1LCAxNDgsIDEwLCAxLCAyMTUsIDE0NiwgMTAsIDEsIDI1MiwgNjQsIDEwLCAxLCAyMTcsIDgsIDIsIDIyMiwgMjMzLCAKLSAgICAxMCwgMSwgMjE3LCA4LCAyLCAxMzQsIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjI1LCAyMDUsIDEwLCAxLCAyMTcsIDUsIAotICAgIDEwLCAxLCAyNTIsIDUyLCAxMCwgMSwgMTIyLCAyLCAyMDIsIDQ4LCAxMCwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCAKLSAgICAxMCwgMSwgMjI3LCAxNTMsIDEwLCAxLCAyNDYsIDQzLCAxMCwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIAotICAgIDI2LCAxMCwgMSwgMjE3LCAyNCwgMTAsIDEsIDI0OCwgMTMwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDIyMiwgMjMzLCAxMCwgMSwgCi0gICAgMjQ4LCAxOTYsIDIsIDU5LCA1MSwgMTAsIDEsIDI0OCwgMTk2LCAyLCA1OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAKLSAgICAxLCAyNDgsIDIwMSwgMTAsIDEsIDI0OCwgMTMyLCAxMCwgMSwgMjQ2LCA3MCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAxMzQsIAotICAgIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDE3MSwgCi0gICAgMTAsIDEsIDIyMywgOTYsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMjMsIAotICAgIDk2LCAyLCA1OSwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIzNSwgMTIwLCAKLSAgICAxMCwgMSwgMjIzLCA5NiwgMiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCA1OSwgMjUyLCA0MywgMjIsIAotICAgIDU5LCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTM0LCAxNzAsIAotICAgIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDI3LCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyMjIsIAotICAgIDI3LCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgCi0gICAgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCAyMzAsIAotICAgIDEwOSwgNTEsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDUxLCAxMCwgMSwgMjEzLCAyNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgCi0gICAgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjI1LCAyMDMsIDEwLCAxLCAyMjQsIDgyLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjQsIDgyLCAKLSAgICAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzQsIDE3NCwgMTAsIDEsIDIxNywgMjUwLCAyMzQsIDI1MCwgMTAsIDEsIDIzNCwgCi0gICAgMjUxLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIzNCwgMjUxLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjksIDc5LCAxMCwgMSwgMjM0LCAKLSAgICAyNTEsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0MywgMTIyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDIyMiwgMjMzLCAxMCwgCi0gICAgMSwgMjI5LCAyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0MiwgMTAxLCAxMCwgMSwgMjQzLCAKLSAgICAxMjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCA1OSwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDEzNCwgCi0gICAgMTcwLCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE4LCAxMCwgMSwgMjIyLCAKLSAgICAyMTQsIDEwLCAxLCAyMjgsIDYzLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIyOCwgNjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MSwgMTAsIDEsIDIxNywgMjcsIDIsIDU5LCA0OCwgMTAsIDEsIDI0MSwgMjE5LCAyLCA3OSwgCi0gICAgNDgsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzEsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDIsIDIwMiwgNDgsIDEwLCAKLSAgICAxLCAyMTcsIDgsIDIzMSwgMTY1LCAyNDIsIDE3MSwgMTAsIDEsIDIxMiwgMzEsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjM0LCAKLSAgICA3MywgMjI2LCAyMzQsIDEwLCAxLCAyMjYsIDIzNCwgMTAsIDEsIDcwLCAxMCwgMSwgMjEwLCAyMTIsIDEwLCAxLCAyMzQsIAotICAgIDczLCAyMTAsIDIxMiwgMTAsIDEsIDIxMiwgMzEsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIxMywgMjU1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDIxMSwgNDMsIDEwLCAxLCA3OSwgMiwgMjE3LCA3NywgMTAsIDEsIDc5LCAyLCA0LCAyMTQsIDEwNSwgMTAsIAotICAgIDEsIDIxMiwgMzEsIDIsIDU5LCA0OCwgMTAsIDEsIDc1LCAxMCwgMSwgNzksIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDc5LCAKLSAgICAyNTIsIDEzMiwgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjAyLCA0OCwgMTAsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTAsIDEsIAotICAgIDI1NCwgMjQzLCAxMCwgNCwgMTI1LCAyNywgMjIyLCAyNywgMiwgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTIsIDEwLCA0LCAKLSAgICAxMjUsIDI3LCAyMjQsIDgyLCAyLCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MiwgMTAsIDQsIDEyNSwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDQsIDEyNSwgMjMzLCAxMDMsIDI1NCwgMTcwLCAxMCwgNCwgMTI1LCAyMzUsIDEyMywgMTAsIDQsIDEyNSwgMTM0LCAKLSAgICAyNDcsIDExOCwgMTAsIDQsIDEyNSwgMjIxLCAxNjYsIDEwLCAyNDUsIDE0MywgNjQsIDI1MywgMTY2LCAxMCwgMjE4LCAxNTIsIAotICAgIDY0LCAyMjIsIDEzOCwgMjQ1LCAxNzUsIDI0MSwgMTU1LCAxMCwgNCwgMTI1LCAyMjIsIDE4MywgMjEwLCA4NiwgMTAsIDQsIAotICAgIDEyNSwgMjE0LCAxNTksIDIyMywgMTE1LCAyMTAsIDg2LCAxMCwgNCwgMTI1LCAyNDcsIDExOSwgMjQxLCAyMzYsIDY0LCAKLSAgICAyMzQsIDEyOSwgMTAsIDQsIDEyNSwgNjYsIDUzLCAxNywgMTAsIDQsIDEyMSwgMjIxLCAxNjYsIDEwLCA0LCAxMjUsIDIzMSwgCi0gICAgMjI3LCAxMCwgNCwgMjEyLCAzMCwgMTAsIDQsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIAotICAgIDIyOCwgNjIsIDEwLCAyMjUsIDQxLCA2NCwgMjIyLCAxMywgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTIxLCAyMTgsIDEyOSwgCi0gICAgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTI1LCAyMTgsIDEyOSwgMTAsIDIyMiwgMTgzLCAxMjUsIDIxOCwgMTMwLCAyLCAKLSAgICAyNDQsIDEwNCwgMjUwLCAxNzQsIDEwLCA0LCAxMjEsIDIzMSwgNzgsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjM1LCAxOTMsIAotICAgIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEwNSwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDE1OCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE2MSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE4OSwgCi0gICAgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5NCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5OCwgMjQ1LCAyMiwgMjU0LCAzNywgCi0gICAgMjEsIDE5NSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDIwMCwgMTAsIDEsIDIyMCwgNjAsIDIsIDU5LCA1MSwgMTAsIDEsIAotICAgIDI0OCwgMjE3LCAyLCA1OSwgNTEsIDEwLCAxLCAyNDIsIDI0NSwgMiwgNTksIDUxLCAxMCwgNSwgMjE5LCAxNTgsIDI1NCwgCi0gICAgMTI2LCAxMCwgNSwgMjE5LCAxNTgsIDIyNCwgMjM1LCAyMzEsIDU4LCAxMCwgMSwgMjQxLCAyMTksIDIsIDIzNSwgMTkzLCAKLSAgICAyMTQsIDEwNSwgMTg4LCAyNDUsIDE0MywgNjQsIDIyNiwgMTQsIDE4OCwgMjE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxODgsIDIxOCwgNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTg4LCAyMTgsIDE5LCAyNDksIDIyNiwgMTg4LCAyMTgsIDY3LCAKLSAgICAyNDksIDIyNiwgMTg4LCAyMDMsIDI0OSwgMjI2LCAxODgsIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAyNDksIAotICAgIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDIxOCwgMTksIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAKLSAgICAyMTgsIDY3LCAyNDksIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDI0OSwgMTgwLCAxODgsIDI0MiwgMSwgMjI2LCAKLSAgICAyNTAsIDE4OCwgMjQyLCAxLCAyMzEsIDM2LCAxODgsIDI0MiwgMSwgMjUzLCAyMTgsIDE4OCwgMjU1LCAyMSwgNzgsIDE4OCwgCi0gICAgMSwgMjU0LCAxNzQsIDE4OCwgMSwgMjE4LCAyMywgMjU0LCAxNzQsIDE4OCwgMSwgMjUyLCAyNSwgMTg4LCAxLCAyNDMsIAotICAgIDExMywgMTg4LCAxLCAyNDMsIDExNCwgMjQzLCA5MSwgMTg4LCAxLCAyNDgsIDE5MiwgMTg4LCAxLCAyNDcsIDExOSwgMjQ4LCAKLSAgICAxOTMsIDIyMiwgMjI5LCAxODgsIDEsIDI0MSwgMjM4LCAxODgsIDEsIDIxMiwgMzAsIDE4OCwgMSwgMjEwLCAxMDgsIDE4OCwgCi0gICAgMSwgMjQxLCAxOTUsIDE4OCwgMSwgMjE2LCAyMjYsIDE4OCwgMSwgMjE2LCAyMjcsIDI0MywgOTEsIDE4OCwgMSwgMjEwLCAKLSAgICAxOTksIDE4OCwgMSwgMjEwLCAyMDAsIDI0MSwgMjM4LCAxODgsIDEsIDIzNCwgMjI1LCAxODgsIDEsIDIzMywgMTAxLCAxODgsIAotICAgIDEsIDIzMCwgMTkwLCAxODgsIDEsIDIyNywgMTk0LCAxODgsIDEsIDIyMCwgMTQzLCAxODgsIDEsIDQwLCAyMjAsIDE0MywgCi0gICAgMTg4LCAxLCA3NSwgMTg4LCAxLCAyMjUsIDIyMSwgMTg4LCAxLCAyMjMsIDQ5LCAyMjUsIDIyMSwgMTg4LCAxLCAyMjIsIDI0LCAKLSAgICAxODgsIDEsIDIyNCwgNzUsIDE4OCwgMSwgMjIyLCAyMjksIDE4OCwgMSwgMjIwLCAyMCwgMTg4LCAxLCAyMTcsIDM2LCAxODgsIAotICAgIDEsIDIyNSwgMTY5LCAyNTIsIDEyLCAxODgsIDEsIDIyNSwgMTY5LCAyNDIsIDI0MiwgMTg4LCAxLCAyMjUsIDE2OSwgMjQ4LCAKLSAgICAyMCwgMTg4LCAyMjQsIDE1MSwgNDgsIDE4OCwgMjI0LCAxNTEsIDUxLCAxODgsIDIyNCwgMTUxLCAyNDYsIDExNywgMTg4LCAKLSAgICAyMTAsIDE3LCA0OCwgMTg4LCAyMTAsIDE3LCA1MSwgMTg4LCAyMTAsIDE3LCAyNDYsIDExNywgMTg4LCAyMjMsIDEzMSwgNDgsIAotICAgIDE4OCwgMjIzLCAxMzEsIDUxLCAxODgsIDI0NiwgMTE4LCAyMTAsIDI0LCAyNDEsIDQ0LCAxODgsIDI0NiwgMTE4LCAyMTAsIAotICAgIDI0LCAyNTQsIDEwNSwgMTg4LCAyNDEsIDI0MSwgNDgsIDE4OCwgMjQxLCAyNDEsIDUxLCAxODgsIDI0MSwgMjQwLCAyNDYsIAotICAgIDExNywgMTg4LCAyNDUsIDc5LCA0OCwgMTg4LCAyNDUsIDc5LCA1MSwgMTg4LCAyMjIsIDEwNywgMTg4LCAyNDQsIDEzNiwgCi0gICAgMjQ3LCAxMjAsIDE4OCwgMjIzLCAyNDgsIDE4OCwgMjIyLCAxMzQsIDE4OCwgMTEzLCA2NywgMTcwLCA0OCwgMTg4LCAxMTMsIAotICAgIDY3LCAxNzAsIDUxLCAxODgsIDEzNCwgMTcwLCA0OCwgMTg4LCAxMzQsIDE3MCwgNTEsIDE4OCwgMjI2LCAyNDgsIDIzMiwgCi0gICAgMjE0LCA0OCwgMTg4LCAyMjYsIDI0OCwgMjMyLCAyMTQsIDUxLCAxODgsIDIzMCwgNTYsIDE4OCwgMjUyLCAxMzEsIDE4OCwgCi0gICAgMSwgMjE5LCA0OSwgMjEwLCA4MCwgMTg4LCAxLCAyMTksIDQ5LCAyMzQsIDEyMiwgMTg4LCAxLCAyMTksIDQ5LCAyNDQsIAotICAgIDE1NCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyNDAsIDI1MCwgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAKLSAgICA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAyNTIsIDQzLCAyMiwgMTEzLCAxNzAsIAotICAgIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAKLSAgICAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAxMjIsIDIsIAotICAgIDExMywgMTcwLCA0OCwgMTAsIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgMjQ4LCAKLSAgICAxOTYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgCi0gICAgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDkxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIAotICAgIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIAotICAgIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIAotICAgIDQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTQzLCAyLCAxMzQsIDE3MCwgMjI1LCAKLSAgICA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCAyMzQsIDE3NSwgMiwgNTksIDQ4LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDEzNCwgCi0gICAgMTcwLCA0OCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCA2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMSwgNjYsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIAotICAgIDIyOCwgNjMsIDIsIDQsIDIxNywgODAsIDEwLCAxLCAyMjgsIDYzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCAxMzAsIDEwLCAxLCAyMjMsIDk2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgCi0gICAgMjAyLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMTIyLCAyLCA0LCAKLSAgICAxMCwgMSwgMjE3LCA4MSwgNTEsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgCi0gICAgMTAsIDEsIDIyMSwgMTY3LCAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIAotICAgIDgxLCA0OCwgMTAsIDEsIDExMiwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAxMTIsIDIsIDI0NSwgCi0gICAgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMTEzLCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIDExLCA1MSwgMTAsIDEsIDIxMiwgMzEsIDIsIAotICAgIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDEzNCwgNDgsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIDEyMiwgMiwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDI0NCwgMTEsIDUxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIAotICAgIDExLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDEwLCAxLCAyMzQsIDI1MSwgMiwgMTEzLCAKLSAgICAxNzAsIDQ4LCAyMTYsIDIwNSwgMSwgMjQyLCA0NiwgMjE2LCAyMDUsIDEsIDIyMCwgNjgsIDIxNiwgMjA1LCAxLCAyMjgsIAotICAgIDYxLCAyMTYsIDIwNSwgMSwgMjIzLCAxODQsIDIxNiwgMjA1LCAxLCAyNTIsIDE4OSwgMjE2LCAyMDUsIDEsIDIzMiwgMjUxLCAKLSAgICAyMTYsIDIwNSwgMSwgMjM1LCA4LCAyMTYsIDIwNSwgMSwgMjU0LCAxNTksIDIxNiwgMjA1LCAxLCAyMTQsIDI1LCAyMTYsIAotICAgIDIwNSwgMSwgMjMxLCA3NywgMjE2LCAyMDUsIDEsIDI0NCwgMTk0LCAyMTYsIDIwNSwgMSwgMjQ4LCAyMywgMjE2LCAyMDUsIAotICAgIDEsIDIxNiwgMjA3LCAyMTYsIDIwNSwgMSwgMjMzLCAxMzEsIDIxNiwgMjA1LCAxLCAyNDMsIDEzMSwgMjE2LCAyMDUsIDEsIAotICAgIDI0MiwgMTc3LCAyMTYsIDIwNSwgMSwgMjIxLCAxNjUsIDIxNiwgMjA1LCAxLCAyNDgsIDE0OCwgMjE2LCAyMDUsIDEsIDIxMCwgCi0gICAgMTAwLCAyMTYsIDIwNSwgMSwgMjE3LCAzNywgMjE2LCAyMDUsIDEsIDIxMSwgMTAzLCAyMTYsIDIwNSwgMSwgMjI1LCAyMzMsIAotICAgIDIxNiwgMjA1LCAxLCAyMzUsIDEyOCwgMjE2LCAyMDUsIDEsIDI1MCwgMTM0LCAyMTYsIDIwNSwgMSwgMjE1LCAxNTUsIDIxNiwgCi0gICAgMjA1LCAxLCAyNDEsIDE4OCwgMjE2LCAyMDUsIDEsIDIzNCwgMTMxLCAyMTYsIDIwNSwgMSwgMjE2LCAyMDYsIDIxNiwgMjA1LCAKLSAgICAxLCAyMTAsIDExNSwgMjE2LCAyMDUsIDEsIDIyMCwgNTgsIDIxNiwgMjA1LCAxLCAyMjIsIDMwLCAyMTYsIDIwNSwgMSwgCi0gICAgMjQ4LCAyMTksIDIxNiwgMjA1LCAxLCAxMTEsIDIxNiwgMjA1LCAxLCAyMTAsIDIzLCAyMTYsIDIwNSwgMSwgMjU0LCAxOTMsIAotICAgIDIxNiwgMjA1LCAxLCAyNDIsIDI0MywgMjE2LCAyMDUsIDEsIDIyNCwgODUsIDIxNiwgMjA1LCAxLCAyMTIsIDYzLCAyMTYsIAotICAgIDIwNSwgMjU1LCAyMiwgMjE2LCAyMDUsIDI1NSwgMzgsIDIxNiwgMjA1LCAyNDAsIDExNCwgMjE2LCAyMDUsIDI0NSwgMjA4LCAKLSAgICAyMTYsIDIwNSwgMjE0LCAyMjIsIDIxNiwgMjA1LCAyMjYsIDE4MiwgMjE2LCAyMDUsIDI0NSwgMjE2LCAyMTYsIDIwNSwgCi0gICAgMjQ1LCAxNiwgMjE2LCAyMDUsIDIyNiwgMjQ3LCAyMTYsIDIwNSwgMjI2LCAyNTUsIDIxNiwgMjA1LCAyMTgsIDQ1LCAyMTYsIAotICAgIDIwNSwgMSwgMjI5LCAyMjUsIDIyOCwgMTM3LCAyMSwgMjEwLCA4NiwgMjI4LCAxMzcsIDIxLCAxMTAsIDIyOCwgMTM3LCAyMSwgCi0gICAgMTA1LCAyMjgsIDEzNywgMjEsIDE1OCwgMjI4LCAxMzcsIDIxLCAxNjEsIDIyOCwgMTM3LCAyMSwgMTg5LCAyMjgsIDEzNywgCi0gICAgMjEsIDE5NCwgMjI4LCAxMzcsIDIxLCAxOTgsIDIyOCwgMTM3LCAyMSwgMTk1LCAyMjgsIDEzNywgMjEsIDIwMCwgMjI4LCAKLSAgICAxMzcsIDEsIDYxLCAyMjgsIDEzNywgMSwgMjQ1LCAyMDksIDIyOCwgMTM3LCAxLCA3MywgMjI4LCAxMzcsIDEsIDc1LCAyMjgsIAotICAgIDEzNywgMSwgNzAsIDIyOCwgMTM3LCAxLCAyMjYsIDE4MywgMjI4LCAxMzcsIDEsIDc2LCAyMjgsIDEzNywgMSwgMjQ4LCAKLSAgICAyMDksIDIyOCwgMTM3LCAxLCAyMzAsIDI1LCAyMjgsIDEzNywgMSwgMjUyLCAxOTEsIDIyOCwgMTM3LCAxLCAxOTAsIDIyOCwgCi0gICAgMTM3LCAxLCAyMTcsIDEwNSwgMjI4LCAxMzcsIDEsIDIzNSwgMTQxLCAyMjgsIDEzNywgMSwgMjUwLCAxNTcsIDIyOCwgMTM3LCAKLSAgICAxLCAyNDgsIDIyMSwgMjI4LCAxMzcsIDEsIDIwNSwgMjI4LCAxMzcsIDEsIDIyMiwgMTc5LCAyMjgsIDEzNywgMSwgMjA2LCAKLSAgICAyMjgsIDEzNywgMSwgMjQzLCA3OSwgMjI4LCAxMzcsIDEsIDI0NCwgMTk2LCAyMjgsIDEzNywgMSwgMTc2LCAyMjgsIDEzNywgCi0gICAgMSwgMjMzLCAxMzUsIDIyOCwgMTM3LCAxLCAyMjksIDIyOSwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAxODQsIDIyOCwgMTM3LCAKLSAgICAxLCAyMjcsIDE2NSwgMjI4LCAxMzcsIDEsIDE5NywgMjI4LCAxMzcsIDEsIDE2MiwgMjI4LCAxMzcsIDEsIDIxMiwgNjUsIAotICAgIDIyOCwgMTM3LCAxLCAxOTEsIDIyOCwgMTM3LCAxLCAyMjcsIDE2NiwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAKLSAgICAyMzUsIDE0MSwgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIDI1MCwgMTU3LCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgMjA1LCAyMjgsIAotICAgIDEzNywgMzgsIDIxOSwgMjUxLCAxMjUsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjE5LCAyNTEsIDEyMSwgMjE2LCAzMCwgCi0gICAgMjI4LCAxMzcsIDM4LCAyMTksIDI1MSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAyNDgsIDM4LCAKLSAgICAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTI1LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTIxLCAyMTYsIAotICAgIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjI5LCAxOTMsIDc4LCAKLSAgICAyMjgsIDEzNywgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTM3LCAxMjUsIDEzOCwgMjU0LCA1NywgMjI4LCAxMzcsIDEyMSwgCi0gICAgMTM4LCAyNTQsIDU3LCAyMjgsIDEzNywgMTYsIDIyNiwgMTg0LCAyNDgsIDUwLCAyMjgsIDEzNywgMTYsIDI0MywgNzgsIAotICAgIDIyOCwgMTM3LCAyNDksIDIxOSwgMjI4LCAxMzcsIDI0NSwgMzEsIDc4LCAyMjgsIDEzNywgMjMzLCAxMDgsIDIyMSwgMjUyLCAKLSAgICAxLCAyNTQsIDE3NiwgMjIxLCAyNTIsIDEsIDI1MSwgMjI4LCAyMjEsIDI1MiwgMSwgMjQzLCAxMTIsIDIyMSwgMjUyLCAxLCAKLSAgICAyNDgsIDE5NCwgMjIxLCAyNTIsIDEsIDIzNSwgMTUyLCAyMjEsIDI1MiwgMSwgMjUyLCAxODksIDIyMSwgMjUyLCAxLCAyMTAsIAotICAgIDg5LCAyMjEsIDI1MiwgMSwgMjM1LCAxNjAsIDIyMSwgMjUyLCAxLCAyMTYsIDY3LCAyMjEsIDI1MiwgMSwgMjEwLCAxODIsIAotICAgIDIyMSwgMjUyLCAxLCAyMzUsIDksIDIyMSwgMjUyLCAxLCAyMzMsIDEyOCwgMjIxLCAyNTIsIDEsIDIzMCwgMTkwLCAyMjEsIAotICAgIDI1MiwgMSwgMjI3LCAxOTQsIDIyMSwgMjUyLCAxLCAyMTksIDE1NiwgMjIxLCAyNTIsIDEsIDIzNSwgMjU1LCAyMjEsIDI1MiwgCi0gICAgMSwgMjQ0LCAxMjEsIDIyMSwgMjUyLCAxLCAyMTUsIDE4MSwgMjIxLCAyNTIsIDEsIDIyNCwgMTAsIDIyMSwgMjUyLCAxLCAKLSAgICAyMjIsIDIyOSwgMjIxLCAyNTIsIDEsIDIyMCwgODUsIDIyMSwgMjUyLCAxLCAyMTcsIDEwMCwgMjIxLCAyNTIsIDE2NCwgCi0gICAgMjM1LCAyNTUsIDIyMSwgMjUyLCAxNjQsIDIzNSwgMjU0LCAyMjEsIDI1MiwgMTY0LCAyMjYsIDI0MywgMjIxLCAyNTIsIAotICAgIDE2NCwgMjQ4LCAyMDcsIDIyMSwgMjUyLCA1OCwgMSwgMjQ1LCAxMDUsIDIxMCwgMTgyLCAyMjEsIDI1MiwgMTY0LCAyNDUsIAotICAgIDEwNSwgMjEwLCAxODIsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3NSwgMjIxLCAyNTIsIDI1LCA1LCA3NSwgMjIxLCAyNTIsIAotICAgIDI1LCA1LCAyMjYsIDExOCwgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAyMjYsIDExOCwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA2MSwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCA2MSwgMjIxLCAyNTIsIDU4LCAxLCAyMTksIDI1MSwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMjE5LCAyNTEsIAotICAgIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzAsIDIyMSwgMjUyLCAyNSwgNSwgNzAsIDIyMSwgMjUyLCA1OCwgMSwgNzMsIAotICAgIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3NiwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCAyMTgsIDQ1LCAyMjEsIDI1MiwgMTY0LCAyMjksIDkyLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyOSwgOTIsIAotICAgIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAyMTgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMTQsIDIyMSwgMjUyLCAKLSAgICAyMjQsIDE0MSwgMjUyLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjUzLCAyMDEsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjIwLCA4LCAyMjEsIDI1MiwgMjU1LCAyMSwgNzgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjMxLCA2OCwgMjI0LCA0NSwgMjIxLCAKLSAgICAyNTIsIDIyNCwgMTQxLCAyMTAsIDMxLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyNCwgNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjEwLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjE1LCA5MCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDksIDIyMSwgCi0gICAgMjUyLCAyMjQsIDE0MSwgMjE5LCA1MywgMjMxLCAxNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMDAsIDIzMSwgMTgyLCAKLSAgICAxLCAyNDIsIDI0LCAyMzEsIDE4MiwgMSwgMjU1LCAyNSwgMjMxLCAxODIsIDEsIDI1NCwgMjE2LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCAyNTUsIDIzMSwgMTgyLCAxLCAyNTQsIDIwOSwgMjMxLCAxODIsIDEsIDIxNCwgMTI0LCAyMzEsIDE4MiwgMSwgMjUzLCAKLSAgICAxNjAsIDIzMSwgMTgyLCAxLCAyMzUsIDE2MCwgMjMxLCAxODIsIDEsIDI1MywgMTk4LCAyMzEsIDE4MiwgMSwgMjU0LCAxODEsIAotICAgIDIzMSwgMTgyLCAxLCAyNTQsIDE4NiwgMjMxLCAxODIsIDEsIDI1NCwgMTc4LCAyMzEsIDE4MiwgMSwgMjU0LCAxMzYsIDIzMSwgCi0gICAgMTgyLCAxLCAyNTQsIDEyMywgMjMxLCAxODIsIDEsIDI1MywgMjM3LCAyMzEsIDE4MiwgMSwgMjM1LCAyNTUsIDIzMSwgMTgyLCAKLSAgICAxLCAyNTQsIDcyLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDgsIDIzMSwgMTgyLCAxLCAyNTQsIDQ1LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCA0MSwgMjMxLCAxODIsIDEsIDI1MywgMjMxLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDYsIDIzMSwgMTgyLCAxLCAyNDYsIAotICAgIDU1LCAyMzEsIDE4MiwgMSwgMjM1LCAyLCAyMzEsIDE4MiwgMSwgMjU0LCAxOTYsIDIzMSwgMTgyLCAyNTQsIDIyMiwgNzgsIAotICAgIDIzMSwgMTgyLCAyMTMsIDEzNiwgNzgsIDIzMSwgMTgyLCAyNDMsIDUzLCA3OCwgMjMxLCAxODIsIDIyNCwgMTQwLCAxMCwgMSwgCi0gICAgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAKLSAgICAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAKLSAgICAxLCAyMjQsIDgyLCAyLCA1OSwgNTEsIDEwLCAxLCAyMzMsIDEwMywgMiwgNTIsIDEzMCwgMTAsIDEsIDY2LCAyLCAxMzQsIAotICAgIDE3MCwgNDgsIDEwLCAxLCA3OSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCAyMDIsIDQ4LCAxMCwgMSwgNzksIDIsIDExMywgCi0gICAgMTcwLCAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjMyLCAxMjMsIDEwLCAxLCAyMTIsIDMxLCAyLCAKLSAgICA1OSwgMjExLCAyMzEsIDEwLCAxLCAyMjIsIDIwMSwgMjExLCA0MywgMTAsIDI0OSwgOTksIDI0NCwgMTY1LCAxMCwgMjQ5LCAKLSAgICA5OSwgMjQ4LCAxODQsIDEwLCAyNDksIDk5LCAyMzQsIDIwNSwgMTAsIDI0OSwgOTksIDI0NCwgMTYzLCAxMCwgMjQ5LCA5OSwgCi0gICAgMjQ4LCAxODIsIDEwLCAyNDksIDk5LCAyMzQsIDIwMywgMTAsIDEzOCwgMTIzLCA1OSwgNDgsIDEwLCAxMzgsIDExMywgMTcwLCAKLSAgICA0OCwgMTAsIDEzOCwgMjMyLCAxMjQsIDQ4LCAxMCwgMTM4LCAxMjMsIDU5LCA1MSwgMTAsIDEzOCwgMTEzLCAxNzAsIDUxLCAKLSAgICAxMCwgMTM4LCAyMzIsIDEyNCwgNTEsIDEwLCAyMDQsIDI0NCwgMTYzLCAxMCwgMjA0LCAyNDgsIDE4MiwgMTAsIDIwNCwgCi0gICAgMjM0LCAyMDMsIDEwLCA0LCAxMjUsIDIxMiwgMzAsIDEwLCAyNDQsIDE2NiwgMiwgMjIyLCAyMzMsIDEwLCAyNDQsIDE2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMjM0LCAyMDYsIDIsIDU5LCA1MSwgMTAsIDQzLCAyNTMsIDI1MCwgNDgsIDEwLCA0NCwgMjUzLCAKLSAgICAyNTAsIDQ4LCAxMCwgNDMsIDI1MywgMjUwLCA1MSwgMTAsIDQ0LCAyNTMsIDI1MCwgNTEsIDEwLCA1MiwgNDQsIDI1MywgCi0gICAgMjUwLCA0OCwgMTAsIDUyLCA0NCwgMjUzLCAyNTAsIDc3LCAyLCAyNDcsIDEyMCwgMTAsIDQ0LCAyNTMsIDI1MCwgNzcsIDIsIAotICAgIDI0NywgMTIwLCAxMCwgMjQ4LCAxODUsIDIsIDI0NywgMTIwLCA4NCwgNSwgMjM1LCAxOTMsIDI1MCwgMjU1LCA4NCwgNSwgCi0gICAgMjUwLCAyNTUsIDg0LCA1LCAyNTQsIDc1LCA4NCwgNSwgMjEzLCAxNDcsIDg0LCAxLCAyMTksIDI1MSwgNjEsIDg0LCAxLCAKLSAgICA2MSwgODQsIDEsIDI1NSwgNzMsIDg0LCAxLCA3MywgODQsIDEsIDIzNiwgMzMsIDg0LCAxLCA3MCwgODQsIDEsIDIxNCwgCi0gICAgMTE4LCA4NCwgMSwgMTQ5LCAxNTMsIDg0LCAxLCAxNDksIDE1NiwgODQsIDEsIDI1MSwgMiwgNzUsIDg0LCAxLCAyMTksIAotICAgIDI1MSwgNzUsIDg0LCAxLCA3NSwgODQsIDEsIDI1NCwgMjAxLCA4NCwgMSwgMjUxLCAyLCA3NiwgODQsIDEsIDIxOSwgMjUxLCAKLSAgICA3NiwgODQsIDEsIDc2LCA4NCwgMSwgMjUzLCAxOTIsIDg0LCAxLCAxNzYsIDg0LCAxLCAyMzQsIDEzMiwgODQsIDEsIDI0MywgCi0gICAgMTM1LCA4NCwgMSwgMjQyLCAyNDksIDg0LCAxLCAyMjksIDc3LCA4NCwgMSwgMjUxLCAzMywgODQsIDEsIDI1MCwgMTU3LCAKLSAgICA4NCwgMSwgMjM1LCAxNDEsIDg0LCAxLCAyMzUsIDExNCwgODQsIDEsIDIyNywgMTY1LCA4NCwgMSwgMjE1LCAxNTYsIDg0LCAKLSAgICAxLCAyMTUsIDE0NCwgODQsIDEsIDI0OCwgMTM1LCA4NCwgMSwgMjQ4LCAxMTksIDg0LCAxLCAyMjgsIDExMCwgODQsIDEsIAotICAgIDIxNywgMTA1LCA4NCwgMSwgMjE2LCAyMDgsIDg0LCAxLCAyNDgsIDIyMSwgODQsIDEsIDI0OCwgMjUsIDg0LCAxLCAxOTcsIAotICAgIDg0LCAxLCAyMjgsIDkyLCA4NCwgMSwgMTkwLCA4NCwgMSwgMjI1LCAxNDcsIDg0LCAxLCAyNTIsIDE5MSwgODQsIDEsIDI1MiwgCi0gICAgMTgsIDg0LCAxLCAxODQsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMDUsIDg0LCAxLCAyMjIsIDE3OSwgODQsIDEsIDIzMywgMTM1LCAKLSAgICA4NCwgMSwgMjMyLCAxODQsIDg0LCAxLCAyMzIsIDE3NSwgODQsIDEsIDIxNCwgMjcsIDg0LCAxLCAyMjAsIDEwMiwgODQsIDEsIAotICAgIDIxOCwgMjIzLCA4NCwgMSwgMjA2LCA4NCwgMSwgMTYyLCA4NCwgMjUsIDUsIDIyNiwgMjM0LCA4NCwgMjUsIDUsIDIyNiwgCi0gICAgMTgxLCA4NCwgNSwgMjI3LCAyMDUsIDg0LCA1LCAyNTMsIDE3NSwgODQsIDI1LCA1LCAyNTUsIDczLCA4NCwgMjUsIDUsIDczLCAKLSAgICA4NCwgMjUsIDUsIDIzNiwgMzMsIDg0LCAyNSwgNSwgNzAsIDg0LCAyNSwgNSwgMjE0LCAxMTgsIDg0LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTMsIDg0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgODQsIDI1LCA1LCAyNTEsIDIsIDc1LCA4NCwgMjUsIDUsIDIxOSwgCi0gICAgMjUxLCA3NSwgODQsIDI1LCA1LCA3NSwgODQsIDI1LCA1LCAyNTQsIDIwMSwgODQsIDI1LCA1LCAyNTEsIDIsIDc2LCA4NCwgCi0gICAgMjUsIDUsIDIxOSwgMjUxLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTMsIDE5MiwgODQsIDUsIDIxMywgMTUyLCAKLSAgICA4NCwgMjUsIDUsIDIyNCwgMTg1LCA3NSwgODQsIDI1LCA1LCAyNTMsIDE3MSwgODQsIDIyNiwgMjA0LCA4NCwgMjE4LCAxMTEsIAotICAgIDUsIDIxNCwgMjE2LCA4NCwgMjE4LCAxMTEsIDUsIDI1NCwgNzcsIDg0LCAyNDIsIDEzNywgMjU1LCAxNCwgODQsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgODQsIDI1LCA1LCAyNTEsIDIsIDE5OSwgNzUsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAKLSAgICAxMTcsIDg0LCAxLCAyMjQsIDg4LCA4NCwgMSwgMjM0LCAxMTUsIDg0LCAxLCAyNDIsIDIyNiwgODQsIDEsIDIxMCwgMTE2LCAKLSAgICA4NCwgMSwgMjQ4LCAxMjQsIDg0LCAxLCAyMjMsIDM5LCA4NCwgMSwgMjQ0LCAxOTYsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIAotICAgIDE0OSwgMjIyLCAxODAsIDg0LCAxLCAxNDksIDIzMiwgMTg1LCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgCi0gICAgMjMyLCAxODUsIDg0LCAyNDgsIDE3OCwgODQsIDUyLCAyNDgsIDE3OCwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMCwgCi0gICAgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIDE2MSwgODQsIDIxLCAxODksIDg0LCAyMSwgMTk0LCA4NCwgMjEsIAotICAgIDE5OCwgODQsIDIxLCAxOTUsIDg0LCAyMSwgMjAwLCA4NCwgMjU1LCAyMSwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTcsIDI0NywgCi0gICAgMTIwLCA4NCwgMSwgMjUxLCAyLCA2MSwgODQsIDEsIDIyNiwgMjM0LCA4NCwgMSwgMjI2LCAxODEsIDg0LCAxLCAyNTMsIAotICAgIDE3MSwgODQsIDEsIDIxNCwgMjE0LCA4NCwgMSwgMjE0LCAxMTcsIDg0LCAxLCAyMTAsIDgyLCA4NCwgMSwgMTE0LCAxOTEsIAotICAgIDg0LCAxLCAyNDMsIDI5LCA4NCwgMSwgMjM1LCA5NiwgODQsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgODQsIDEsIDI0OCwgCi0gICAgMTI1LCA4NCwgMSwgMjUyLCAxMTEsIDE0NiwgNSwgMjUwLCAyNTUsIDE0NiwgNSwgMjU0LCA3NSwgMTQ2LCA1LCAyMTMsIAotICAgIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDczLCAxNDYsIDEsIDczLCAxNDYsIDEsIDIzNiwgMzMsIDE0NiwgMSwgCi0gICAgNzAsIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzUsIAotICAgIDE0NiwgMSwgMjU0LCAyMDEsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjUzLCAxOTIsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgCi0gICAgMTMyLCAxNDYsIDEsIDI0MywgMTM1LCAxNDYsIDEsIDI0MiwgMjQ5LCAxNDYsIDEsIDIyOSwgNzcsIDE0NiwgMSwgMjUxLCAKLSAgICAzMywgMTQ2LCAxLCAyNTAsIDE1NywgMTQ2LCAxLCAyMzUsIDE0MSwgMTQ2LCAxLCAyMzUsIDExNCwgMTQ2LCAxLCAyMjcsIAotICAgIDE2NSwgMTQ2LCAxLCAyMTUsIDE1NiwgMTQ2LCAxLCAyMTUsIDE0NCwgMTQ2LCAxLCAyNDgsIDEzNSwgMTQ2LCAxLCAyNDgsIAotICAgIDExOSwgMTQ2LCAxLCAyMjgsIDExMCwgMTQ2LCAxLCAyMTcsIDEwNSwgMTQ2LCAxLCAyMTYsIDIwOCwgMTQ2LCAxLCAyNDgsIAotICAgIDIyMSwgMTQ2LCAxLCAyNDgsIDI1LCAxNDYsIDEsIDE5NywgMTQ2LCAxLCAxOTAsIDE0NiwgMSwgMjI1LCAxNDcsIDE0NiwgMSwgCi0gICAgMjUyLCAxOTEsIDE0NiwgMSwgMjUyLCAxOCwgMTQ2LCAxLCAxODQsIDE0NiwgMSwgMTkxLCAxNDYsIDEsIDIwNSwgMTQ2LCAxLCAKLSAgICAyMzMsIDEzNSwgMTQ2LCAxLCAyMjAsIDEwMiwgMTQ2LCAxLCAyMTgsIDIyMywgMTQ2LCAxLCAyMDYsIDE0NiwgMSwgMTYyLCAKLSAgICAxNDYsIDUsIDIyNywgMjA1LCAxNDYsIDUsIDI1MywgMTc1LCAxNDYsIDI1LCA1LCAyNTUsIDczLCAxNDYsIDI1LCA1LCA3MywgCi0gICAgMTQ2LCAyNSwgNSwgMjM2LCAzMywgMTQ2LCAyNSwgNSwgNzAsIDE0NiwgMjUsIDUsIDIxNCwgMTE4LCAxNDYsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMTQ2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ2LCAyNSwgNSwgNzUsIDE0NiwgMjUsIDUsIDI1NCwgCi0gICAgMjAxLCAxNDYsIDI1LCA1LCA3NiwgMTQ2LCAyNSwgNSwgMjUzLCAxOTIsIDE0NiwgNSwgMjEzLCAxNTIsIDE0NiwgMSwgMjM0LCAKLSAgICAxMjQsIDIxNywgMTA1LCAxNDYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMTQ2LCAxLCAyMjIsIDE3OSwgMTQ2LCAxLCAyMjMsIAotICAgIDM5LCAxNDYsIDEsIDIxMCwgMTY4LCAxNDYsIDEsIDE0OSwgMjIyLCAxODAsIDE0NiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTQ2LCAKLSAgICAyNSwgNSwgMTQ5LCAxNTYsIDE0NiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE0NiwgMjEsIDIxMCwgODYsIDE0NiwgMjEsIAotICAgIDExMCwgMTQ2LCAyMSwgMTA1LCAxNDYsIDIxLCAxNTgsIDE0NiwgMjEsIDE2MSwgMTQ2LCAyMSwgMTg5LCAxNDYsIDIxLCAKLSAgICAxOTQsIDE0NiwgMjEsIDE5OCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAyMDAsIDE0NiwgMSwgMjIzLCAxODgsIDIsIDIzMCwgCi0gICAgMjI0LCAyNDcsIDI1NCwgMTQ2LCAxLCAyMjMsIDE4OCwgMiwgMjMyLCAxMDgsIDI0NywgMjU0LCAxNDYsIDIyMiwgMTE4LCAKLSAgICA3OCwgMTQ2LCAyMjIsIDExOCwgNTAsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDExMCwgMTQ2LCAyNDksIDk4LCAyMjcsIAotICAgIDE5NywgMTA1LCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxNTgsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDE2MSwgMTQ2LCAKLSAgICAyNDksIDk4LCAyMjcsIDE5NywgMTIzLCAyMzMsIDE2LCAyMTYsIDIwMSwgMjE2LCAxOTYsIDI0OCwgNDgsIDE0NiwgMjQ5LCAKLSAgICA5OCwgMjQ4LCA0OSwgMjE5LCAxMTksIDE0NiwgMjM1LCAxNjEsIDE0NiwgMjQzLCAxMDMsIDc4LCAxODMsIDUsIDI1NCwgCi0gICAgMjU0LCAyNTEsIDI0MywgMTgzLCA1LCAyNTEsIDI0MywgMTgzLCA1LCAyMTMsIDE0NywgMTgzLCAxLCA2MSwgMTgzLCAxLCAKLSAgICAyNTUsIDczLCAxODMsIDEsIDczLCAxODMsIDEsIDIzNiwgMzMsIDE4MywgMSwgNzAsIDE4MywgMSwgMjE0LCAxMTgsIDE4MywgCi0gICAgMSwgMjQ1LCAyMDksIDE4MywgMSwgMjU0LCAyMDEsIDE4MywgMSwgMjI2LCAxODMsIDE4MywgMSwgMjUzLCAxOTIsIDE4MywgCi0gICAgMSwgMTc2LCAxODMsIDEsIDIzNCwgMTMyLCAxODMsIDEsIDI0MywgMTM1LCAxODMsIDEsIDI0MiwgMjQ5LCAxODMsIDEsIAotICAgIDIyOSwgNzcsIDE4MywgMSwgMjUxLCAzMywgMTgzLCAxLCAyNTAsIDE1NywgMTgzLCAxLCAyMzUsIDE0MSwgMTgzLCAxLCAKLSAgICAyMzUsIDExNCwgMTgzLCAxLCAyMjcsIDE2NSwgMTgzLCAxLCAyMTUsIDE1NiwgMTgzLCAxLCAyMTUsIDE0NCwgMTgzLCAxLCAKLSAgICAyNDgsIDEzNSwgMTgzLCAxLCAyNDgsIDExOSwgMTgzLCAxLCAyMjgsIDExMCwgMTgzLCAxLCAyMTcsIDEwNSwgMTgzLCAxLCAKLSAgICAyMTYsIDIwOCwgMTgzLCAxLCAyNDgsIDIyMSwgMTgzLCAxLCAyNDgsIDI1LCAxODMsIDEsIDE5NywgMTgzLCAxLCAxOTAsIAotICAgIDE4MywgMSwgMjI1LCAxNDcsIDE4MywgMSwgMjUyLCAxOTEsIDE4MywgMSwgMjUyLCAxOCwgMTgzLCAxLCAxODQsIDE4MywgMSwgCi0gICAgMTkxLCAxODMsIDEsIDIwNSwgMTgzLCAxLCAyMzMsIDEzNSwgMTgzLCAxLCAyMzIsIDE4NCwgMTgzLCAxLCAyMTQsIDI3LCAKLSAgICAxODMsIDEsIDIyMCwgMTAyLCAxODMsIDEsIDIwNiwgMTgzLCAxLCAxNjIsIDE4MywgNSwgMjI3LCAyMDUsIDE4MywgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE4MywgMjUsIDUsIDczLCAxODMsIDI1LCA1LCAyMzYsIDMzLCAxODMsIDI1LCA1LCA3MCwgMTgzLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE4MywgMjUsIDUsIDI0NSwgMjA5LCAxODMsIDI1LCA1LCAyNTQsIDIwMSwgMTgzLCAyNSwgNSwgMjI2LCAKLSAgICAxODMsIDE4MywgMjUsIDUsIDI1MywgMTkyLCAxODMsIDUsIDIxMywgMTUyLCAxODMsIDUsIDIxNCwgMjE4LCAxODMsIDEsIAotICAgIDIzNCwgMTE1LCAxODMsIDEsIDI0MiwgMjI2LCAxODMsIDEsIDIxMCwgMTE2LCAxODMsIDEsIDIyMiwgMTc5LCAxODMsIDEsIAotICAgIDI0NCwgMTk2LCAxODMsIDIxLCAyMTAsIDg2LCAxODMsIDIxLCAxMTAsIDE4MywgMjEsIDEwNSwgMTgzLCAyMSwgMTU4LCAKLSAgICAxODMsIDIxLCAxNjEsIDE4MywgMjEsIDE4OSwgMTgzLCAyMSwgMTk0LCAxODMsIDIxLCAxOTgsIDE4MywgMjEsIDE5NSwgCi0gICAgMTgzLCAyMSwgMjAwLCAxODMsIDIxNiwgNzQsIDE4MywgMjU0LCAyNTMsIDE4MywgMjM1LCAxNzgsIDE4MywgMjE0LCAxNDYsIAotICAgIDE4MywgMjQ1LCAxODEsIDIyNiwgMTg4LCAxODMsIDUsIDIxMSwgNzgsIDE3MSwgNSwgMjUwLCAyNTUsIDE3MSwgNSwgMjU0LCAKLSAgICA3NSwgMTcxLCA1LCAyMTMsIDE0NywgMTcxLCAxLCA2MSwgMTcxLCAxLCAyNTUsIDczLCAxNzEsIDEsIDczLCAxNzEsIDEsIAotICAgIDIzNiwgMzMsIDE3MSwgMSwgNzAsIDE3MSwgMSwgMjE0LCAxMTgsIDE3MSwgMSwgMTQ5LCAxNTMsIDE3MSwgMSwgMTQ5LCAKLSAgICAxNTYsIDE3MSwgMjUsIDI1MSwgMiwgNzUsIDE3MSwgMSwgNzUsIDE3MSwgMSwgMjU0LCAyMDEsIDE3MSwgMjUsIDI1MSwgMiwgCi0gICAgNzYsIDE3MSwgMSwgNzYsIDE3MSwgMSwgMjUzLCAxOTIsIDE3MSwgMSwgMTc2LCAxNzEsIDEsIDIzNCwgMTMyLCAxNzEsIDEsIAotICAgIDI0MywgMTM1LCAxNzEsIDEsIDI0MiwgMjQ5LCAxNzEsIDEsIDIyOSwgNzcsIDE3MSwgMSwgMjUxLCAzMywgMTcxLCAxLCAKLSAgICAyNTAsIDE1NywgMTcxLCAxLCAyMzUsIDE0MSwgMTcxLCAxLCAyMzUsIDExNCwgMTcxLCAxLCAyMjcsIDE2NSwgMTcxLCAxLCAKLSAgICAyMTUsIDE1NiwgMTcxLCAxLCAyMTUsIDE0NCwgMTcxLCAxLCAyNDgsIDEzNSwgMTcxLCAxLCAyNDgsIDExOSwgMTcxLCAxLCAKLSAgICAyMjgsIDExMCwgMTcxLCAxLCAyMTcsIDEwNSwgMTcxLCAxLCAyMTYsIDIwOCwgMTcxLCAxLCAyNDgsIDIyMSwgMTcxLCAxLCAKLSAgICAyNDgsIDI1LCAxNzEsIDEsIDE5NywgMTcxLCAxLCAxOTAsIDE3MSwgMSwgMjI1LCAxNDcsIDE3MSwgMSwgMjUyLCAxOTEsIAotICAgIDE3MSwgMSwgMjUyLCAxOCwgMTcxLCAxLCAxODQsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIwNSwgMTcxLCAxLCAyMzMsIDEzNSwgCi0gICAgMTcxLCAxLCAyMzIsIDE4NCwgMTcxLCAxLCAyMTQsIDI3LCAxNzEsIDEsIDIyMCwgMTAyLCAxNzEsIDEsIDIxOCwgMjIzLCAKLSAgICAxNzEsIDEsIDIwNiwgMTcxLCAxLCAxNjIsIDE3MSwgNSwgMjI3LCAyMDUsIDE3MSwgNSwgMjUzLCAxNzUsIDE3MSwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE3MSwgMjUsIDUsIDczLCAxNzEsIDI1LCA1LCAyMzYsIDMzLCAxNzEsIDI1LCA1LCA3MCwgMTcxLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE3MSwgMjUsIDUsIDE0OSwgMTUzLCAxNzEsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNzEsIDI1LCA1LCAKLSAgICAyNTEsIDIsIDc1LCAxNzEsIDI1LCA1LCA3NSwgMTcxLCAyNSwgNSwgMjU0LCAyMDEsIDE3MSwgMjUsIDUsIDI1MSwgMiwgNzYsIAotICAgIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTMsIDE5MiwgMTcxLCA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwNCwgCi0gICAgMTcxLCAxLCAxNDksIDIyMiwgMTgwLCAxNzEsIDEsIDE0OSwgMjMyLCAxODUsIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIAotICAgIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIDIxLCAxMTAsIDE3MSwgMjEsIDEwNSwgMTcxLCAKLSAgICAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE4OSwgMTcxLCAyMSwgMTk0LCAxNzEsIDIxLCAxOTgsIDE3MSwgMjEsIAotICAgIDE5NSwgMTcxLCAyMSwgMjAwLCAxNzEsIDI1NSwgMjEsIDUwLCAxNzEsIDIyMiwgMTE4LCA1MCwgMTU3LCA1LCAyNTAsIDI1NSwgCi0gICAgMTU3LCA1LCAyNTQsIDc1LCAxNTcsIDUsIDIxMywgMTQ3LCAxNTcsIDEsIDYxLCAxNTcsIDEsIDI1NSwgNzMsIDE1NywgMSwgCi0gICAgNzMsIDE1NywgMSwgMjM2LCAzMywgMTU3LCAxLCA3MCwgMTU3LCAxLCAyMTQsIDExOCwgMTU3LCAxLCAxNDksIDE1MywgMTU3LCAKLSAgICAxLCAxNDksIDE1NiwgMTU3LCAxLCA3NSwgMTU3LCAxLCAyNTQsIDIwMSwgMTU3LCAxLCA3NiwgMTU3LCAxLCAyNTMsIDE5MiwgCi0gICAgMTU3LCAxLCAxNzYsIDE1NywgMSwgMjM0LCAxMzIsIDE1NywgMSwgMjQzLCAxMzUsIDE1NywgMSwgMjQyLCAyNDksIDE1NywgCi0gICAgMSwgMjI5LCA3NywgMTU3LCAxLCAyNTEsIDMzLCAxNTcsIDEsIDI1MCwgMTU3LCAxNTcsIDEsIDIzNSwgMTQxLCAxNTcsIDEsIAotICAgIDIzNSwgMTE0LCAxNTcsIDEsIDIyNywgMTY1LCAxNTcsIDEsIDIxNSwgMTU2LCAxNTcsIDEsIDIxNSwgMTQ0LCAxNTcsIDEsIAotICAgIDI0OCwgMTM1LCAxNTcsIDEsIDI0OCwgMTE5LCAxNTcsIDEsIDIyOCwgMTEwLCAxNTcsIDEsIDIxNywgMTA1LCAxNTcsIDEsIAotICAgIDIxNiwgMjA4LCAxNTcsIDEsIDI0OCwgMjIxLCAxNTcsIDEsIDI0OCwgMjUsIDE1NywgMSwgMTk3LCAxNTcsIDEsIDE5MCwgCi0gICAgMTU3LCAxLCAyMjUsIDE0NywgMTU3LCAxLCAyNTIsIDE5MSwgMTU3LCAxLCAyNTIsIDE4LCAxNTcsIDEsIDE4NCwgMTU3LCAxLCAKLSAgICAxOTEsIDE1NywgMSwgMjA1LCAxNTcsIDEsIDIzMywgMTM1LCAxNTcsIDEsIDIzMiwgMTg0LCAxNTcsIDEsIDIxNCwgMjcsIAotICAgIDE1NywgMSwgMjIwLCAxMDIsIDE1NywgMSwgMjE4LCAyMjMsIDE1NywgMSwgMjA2LCAxNTcsIDEsIDE2MiwgMTU3LCA1LCAKLSAgICAyMjcsIDIwNSwgMTU3LCA1LCAyNTMsIDE3NSwgMTU3LCAyNSwgNSwgMjU1LCA3MywgMTU3LCAyNSwgNSwgNzMsIDE1NywgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE1NywgMjUsIDUsIDcwLCAxNTcsIDI1LCA1LCAyMTQsIDExOCwgMTU3LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE1NywgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE1NywgMjUsIDUsIDc1LCAxNTcsIDI1LCA1LCAyNTQsIDIwMSwgMTU3LCAyNSwgCi0gICAgNSwgNzYsIDE1NywgMjUsIDUsIDI1MywgMTkyLCAxNTcsIDUsIDIxMywgMTUyLCAxNTcsIDI1NCwgMjAyLCAyMzMsIDIzLCAKLSAgICA3OCwgMTU3LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDE1NywgMSwgMjIyLCAxNzksIDE1NywgMSwgMjIzLCAzOSwgMTU3LCAKLSAgICAxLCAyMTAsIDE2OCwgMTU3LCAxLCAxNDksIDIyMiwgMTgwLCAxNTcsIDEsIDE0OSwgMjMyLCAxODUsIDE1NywgMjUsIDUsIAotICAgIDE0OSwgMTU2LCAxNTcsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNTcsIDIxLCAyMTAsIDg2LCAxNTcsIDIxLCAxMTAsIDE1NywgCi0gICAgMjEsIDEwNSwgMTU3LCAyMSwgMTU4LCAxNTcsIDIxLCAxNjEsIDE1NywgMjEsIDE4OSwgMTU3LCAyMSwgMTk0LCAxNTcsIDIxLCAKLSAgICAxOTgsIDE1NywgMjEsIDE5NSwgMTU3LCAyMSwgMjAwLCAxNTcsIDIzNSwgMTYxLCAxNTcsIDEsIDIxMiwgNjUsIDE1NywgCi0gICAgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDE1NywgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDE1NywgMjQ0LCAyLCAxMzQsIDIyNCwgCi0gICAgMTksIDE1NywgMjQ0LCAyLCAxMjMsIDIxOSwgMTE3LCAxNTcsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMTU3LCAyNDQsIDIsIAotICAgIDEzNCwgMjE5LCAxMTYsIDM2LCA1LCAyNTQsIDc1LCAzNiwgNSwgMjEzLCAxNDcsIDM2LCAxLCA2MSwgMzYsIDEsIDI1NSwgCi0gICAgNzMsIDM2LCAxLCA3MywgMzYsIDEsIDIzNiwgMzMsIDM2LCAxLCA3MCwgMzYsIDEsIDIxNCwgMTE4LCAzNiwgMSwgNzUsIDM2LCAKLSAgICAxLCAyNDUsIDIwOSwgMzYsIDEsIDI1NCwgMjAxLCAzNiwgMSwgNzYsIDM2LCAxLCAyMjYsIDE4MywgMzYsIDEsIDI1MywgCi0gICAgMTkyLCAzNiwgMSwgMTc2LCAzNiwgMSwgMjI5LCA3NywgMzYsIDEsIDI1MSwgMzMsIDM2LCAxLCAyMzUsIDE0MSwgMzYsIDEsIAotICAgIDIyNywgMTY1LCAzNiwgMSwgMjE1LCAxNTYsIDM2LCAxLCAyMjgsIDExMCwgMzYsIDEsIDIxNywgMTA1LCAzNiwgMSwgMTk3LCAKLSAgICAzNiwgMSwgMjI4LCA5MiwgMzYsIDEsIDE5MCwgMzYsIDEsIDE4NCwgMzYsIDEsIDE5MSwgMzYsIDEsIDIwNSwgMzYsIDEsIAotICAgIDIyMiwgMTc5LCAzNiwgMSwgMjMzLCAxMzUsIDM2LCAxLCAyMzIsIDE4NCwgMzYsIDEsIDIzMiwgMTc1LCAzNiwgMSwgMjE0LCAKLSAgICAyNywgMzYsIDEsIDIyMCwgMTAyLCAzNiwgMSwgMjE4LCAyMjMsIDM2LCAxLCAyMDYsIDM2LCAxLCAxNjIsIDM2LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMzYsIDI1LCA1LCA3MywgMzYsIDI1LCA1LCAyMzYsIDMzLCAzNiwgMjUsIDUsIDcwLCAzNiwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAzNiwgMjUsIDUsIDc1LCAzNiwgMjUsIDUsIDI0NSwgMjA5LCAzNiwgMjUsIDUsIDI1NCwgMjAxLCAzNiwgCi0gICAgMjUsIDUsIDc2LCAzNiwgMjUsIDUsIDIyNiwgMTgzLCAzNiwgMjUsIDUsIDI1MywgMTkyLCAzNiwgNSwgMjEzLCAxNTIsIDM2LCAKLSAgICAyMjYsIDIwNCwgMzYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMzYsIDIxLCAyMTAsIDg2LCAzNiwgMjEsIDExMCwgMzYsIAotICAgIDIxLCAxMDUsIDM2LCAyMSwgMTU4LCAzNiwgMjEsIDE2MSwgMzYsIDIxLCAxODksIDM2LCAyMSwgMTk0LCAzNiwgMjEsIDE5OCwgCi0gICAgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMjAwLCAzNiwgNTQsIDIxNiwgMjQ3LCAzNiwgNTQsIDEyMywgMjQwLCAyMTAsIDM2LCAKLSAgICA1NCwgMTIzLCAyMTYsIDE0NywgMzYsIDI0OCwgMTQ2LCA1MCwgMzYsIDIzMCwgMTM1LCA1MCwgMzYsIDIxMSwgNDUsIDUwLCAKLSAgICAzNiwgMjQ4LCA4NywgNTAsIDM2LCAyNDksIDEzOSwgNTAsIDM2LCAyNTMsIDIzOCwgNzcsIDUwLCAzNiwgMjIyLCAxMTgsIAotICAgIDUwLCAzNiwgNTQsIDUwLCAxNDgsIDUsIDI1MCwgMjU1LCAxNDgsIDUsIDI1NCwgNzUsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgCi0gICAgMSwgNjEsIDE0OCwgMSwgMjU1LCA3MywgMTQ4LCAxLCA3MywgMTQ4LCAxLCAyMzYsIDMzLCAxNDgsIDEsIDcwLCAxNDgsIDEsIAotICAgIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgMTU2LCAxNDgsIDEsIDc1LCAxNDgsIDEsIDI0NSwgCi0gICAgMjA5LCAxNDgsIDEsIDI1NCwgMjAxLCAxNDgsIDEsIDc2LCAxNDgsIDEsIDIyNiwgMTgzLCAxNDgsIDEsIDI1MywgMTkyLCAKLSAgICAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzMiwgMTQ4LCAxLCAyNDMsIDEzNSwgMTQ4LCAxLCAyNDIsIDI0OSwgMTQ4LCAKLSAgICAxLCAyMjksIDc3LCAxNDgsIDEsIDI1MSwgMzMsIDE0OCwgMSwgMjUwLCAxNTcsIDE0OCwgMSwgMjM1LCAxNDEsIDE0OCwgMSwgCi0gICAgMjM1LCAxMTQsIDE0OCwgMSwgMjI3LCAxNjUsIDE0OCwgMSwgMjE1LCAxNTYsIDE0OCwgMSwgMjE1LCAxNDQsIDE0OCwgMSwgCi0gICAgMjQ4LCAxMzUsIDE0OCwgMSwgMjQ4LCAxMTksIDE0OCwgMSwgMjI4LCAxMTAsIDE0OCwgMSwgMjE3LCAxMDUsIDE0OCwgMSwgCi0gICAgMjE2LCAyMDgsIDE0OCwgMSwgMjQ4LCAyMjEsIDE0OCwgMSwgMjQ4LCAyNSwgMTQ4LCAxLCAxOTcsIDE0OCwgMSwgMTkwLCAKLSAgICAxNDgsIDEsIDIyNSwgMTQ3LCAxNDgsIDEsIDI1MiwgMTkxLCAxNDgsIDEsIDI1MiwgMTgsIDE0OCwgMSwgMTg0LCAxNDgsIDEsIAotICAgIDE5MSwgMTQ4LCAxLCAyMDUsIDE0OCwgMSwgMjIyLCAxNzksIDE0OCwgMSwgMjMzLCAxMzUsIDE0OCwgMSwgMjMyLCAxODQsIAotICAgIDE0OCwgMSwgMjE0LCAyNywgMTQ4LCAxLCAyMjAsIDEwMiwgMTQ4LCAxLCAyMTgsIDIyMywgMTQ4LCAxLCAyMDYsIDE0OCwgMSwgCi0gICAgMTYyLCAxNDgsIDUsIDI1MywgMTc1LCAxNDgsIDI1LCA1LCAyNTUsIDczLCAxNDgsIDI1LCA1LCA3MywgMTQ4LCAyNSwgNSwgCi0gICAgMjM2LCAzMywgMTQ4LCAyNSwgNSwgNzAsIDE0OCwgMjUsIDUsIDIxNCwgMTE4LCAxNDgsIDI1LCA1LCAxNDksIDE1MywgMTQ4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ4LCAyNSwgNSwgNzUsIDE0OCwgMjUsIDUsIDI0NSwgMjA5LCAxNDgsIDI1LCA1LCAKLSAgICAyNTQsIDIwMSwgMTQ4LCAyNSwgNSwgNzYsIDE0OCwgMjUsIDUsIDIyNiwgMTgzLCAxNDgsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTQ4LCA1LCAyMTMsIDE1MiwgMTQ4LCAyMzMsIDIzLCA3OCwgMTQ4LCAyNTQsIDIwMiwgMjMzLCAyMywgNzgsIDE0OCwgMSwgCi0gICAgMjE1LCAxODMsIDE0OCwgMSwgMjQ2LCAzOCwgMTQ4LCAxLCAxNDksIDIyMiwgMTgwLCAxNDgsIDEsIDE0OSwgMjMyLCAxODUsIAotICAgIDE0OCwgMjUsIDUsIDE0OSwgMTU2LCAxNDgsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNDgsIDIxLCAyMTAsIDg2LCAxNDgsIAotICAgIDIxLCAxMTAsIDE0OCwgMjEsIDEwNSwgMTQ4LCAyMSwgMTU4LCAxNDgsIDIxLCAxNjEsIDE0OCwgMjEsIDE4OSwgMTQ4LCAyMSwgCi0gICAgMTk0LCAxNDgsIDIxLCAxOTgsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMjAwLCAxNDgsIDI0NCwgMiwgMjEsIDIxMCwgODcsIAotICAgIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAzMSwgMjI2LCAyMzcsIDIyNCwgCi0gICAgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDExMywgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAKLSAgICAyNDQsIDIsIDIxLCAxMzQsIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAKLSAgICAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTEzLCAzMSwgMjQ1LCA0MiwgMjI0LCAKLSAgICAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTM0LCAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgCi0gICAgNSwgMjE1LCA4NCwgMTY1LCA1LCAyNTQsIDc1LCAxNjUsIDUsIDIxMywgMTQ3LCAxNjUsIDEsIDYxLCAxNjUsIDEsIDI1NSwgCi0gICAgNzMsIDE2NSwgMSwgNzMsIDE2NSwgMSwgMjM2LCAzMywgMTY1LCAxLCA3MCwgMTY1LCAxLCAyMTQsIDExOCwgMTY1LCAxLCAKLSAgICAxNDksIDE1MywgMTY1LCAxLCAxNDksIDE1NiwgMTY1LCAxLCA3NSwgMTY1LCAxLCAyNDUsIDIwOSwgMTY1LCAxLCAyNTQsIAotICAgIDIwMSwgMTY1LCAxLCA3NiwgMTY1LCAxLCAyMjYsIDE4MywgMTY1LCAxLCAyNTMsIDE5MiwgMTY1LCAxLCAxNzYsIDE2NSwgMSwgCi0gICAgMjM0LCAxMzIsIDE2NSwgMSwgMjQzLCAxMzUsIDE2NSwgMSwgMjQyLCAyNDksIDE2NSwgMSwgMjI5LCA3NywgMTY1LCAxLCAKLSAgICAyNTEsIDMzLCAxNjUsIDEsIDI1MCwgMTU3LCAxNjUsIDEsIDIzNSwgMTQxLCAxNjUsIDEsIDIzNSwgMTE0LCAxNjUsIDEsIAotICAgIDIyNywgMTY1LCAxNjUsIDEsIDIxNSwgMTU2LCAxNjUsIDEsIDIxNSwgMTQ0LCAxNjUsIDEsIDI0OCwgMTM1LCAxNjUsIDEsIAotICAgIDI0OCwgMTE5LCAxNjUsIDEsIDIyOCwgMTEwLCAxNjUsIDEsIDIxNywgMTA1LCAxNjUsIDEsIDIxNiwgMjA4LCAxNjUsIDEsIAotICAgIDI0OCwgMjIxLCAxNjUsIDEsIDI0OCwgMjUsIDE2NSwgMSwgMTk3LCAxNjUsIDEsIDE5MCwgMTY1LCAxLCAyMjUsIDE0NywgCi0gICAgMTY1LCAxLCAyNTIsIDE5MSwgMTY1LCAxLCAyNTIsIDE4LCAxNjUsIDEsIDE4NCwgMTY1LCAxLCAxOTEsIDE2NSwgMSwgMjA1LCAKLSAgICAxNjUsIDEsIDIyMiwgMTc5LCAxNjUsIDEsIDIzMywgMTM1LCAxNjUsIDEsIDIzMiwgMTg0LCAxNjUsIDEsIDIxNCwgMjcsIAotICAgIDE2NSwgMSwgMjIwLCAxMDIsIDE2NSwgMSwgMjE4LCAyMjMsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAKLSAgICAyMjcsIDIwNSwgMTY1LCA1LCAyNTMsIDE3NSwgMTY1LCAyNSwgNSwgMjU1LCA3MywgMTY1LCAyNSwgNSwgNzMsIDE2NSwgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE2NSwgMjUsIDUsIDcwLCAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE2NSwgMjUsIDUsIDc1LCAxNjUsIDI1LCA1LCAyNDUsIDIwOSwgMTY1LCAyNSwgCi0gICAgNSwgMjU0LCAyMDEsIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyMjYsIDE4MywgMTY1LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgMjMzLCAyMywgNzgsIDE2NSwgMjU0LCAyMDIsIDIzMywgMjMsIDc4LCAxNjUsIDEsIAotICAgIDI0NCwgMTk2LCAxNjUsIDEsIDE0OSwgMjIyLCAxODAsIDE2NSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTY1LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMCwgMTY1LCAyMSwgCi0gICAgMTA1LCAxNjUsIDIxLCAxNTgsIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTg5LCAxNjUsIDIxLCAxOTQsIDE2NSwgMjEsIAotICAgIDE5OCwgMTY1LCAyMSwgMTk1LCAxNjUsIDIxLCAyMDAsIDE2NSwgNSwgMjM1LCAxMDIsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgCi0gICAgNSwgMjU0LCA3NSwgMTM2LCA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDczLCAxMzYsIDEsIDczLCAKLSAgICAxMzYsIDEsIDIzNiwgMzMsIDEzNiwgMSwgNzAsIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgCi0gICAgMTQ5LCAxNTYsIDEzNiwgMSwgNzUsIDEzNiwgMSwgMjQ1LCAyMDksIDEzNiwgMSwgMjU0LCAyMDEsIDEzNiwgMSwgNzYsIAotICAgIDEzNiwgMSwgMjI2LCAxODMsIDEzNiwgMSwgMjUzLCAxOTIsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTMyLCAxMzYsIAotICAgIDEsIDI0MywgMTM1LCAxMzYsIDEsIDI0MiwgMjQ5LCAxMzYsIDEsIDIyOSwgNzcsIDEzNiwgMSwgMjUxLCAzMywgMTM2LCAxLCAKLSAgICAyNTAsIDE1NywgMTM2LCAxLCAyMzUsIDE0MSwgMTM2LCAxLCAyMzUsIDExNCwgMTM2LCAxLCAyMjcsIDE2NSwgMTM2LCAxLCAKLSAgICAyMTUsIDE1NiwgMTM2LCAxLCAyMTUsIDE0NCwgMTM2LCAxLCAyNDgsIDEzNSwgMTM2LCAxLCAyNDgsIDExOSwgMTM2LCAxLCAKLSAgICAyMjgsIDExMCwgMTM2LCAxLCAyMTcsIDEwNSwgMTM2LCAxLCAyMTYsIDIwOCwgMTM2LCAxLCAyNDgsIDIyMSwgMTM2LCAxLCAKLSAgICAyNDgsIDI1LCAxMzYsIDEsIDE5NywgMTM2LCAxLCAyMjgsIDkyLCAxMzYsIDEsIDE5MCwgMTM2LCAxLCAyMjUsIDE0NywgCi0gICAgMTM2LCAxLCAyNTIsIDE5MSwgMTM2LCAxLCAyNTIsIDE4LCAxMzYsIDEsIDE4NCwgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjA1LCAKLSAgICAxMzYsIDEsIDIyMiwgMTc5LCAxMzYsIDEsIDIzMywgMTM1LCAxMzYsIDEsIDIzMiwgMTg0LCAxMzYsIDEsIDIzMiwgMTc1LCAKLSAgICAxMzYsIDEsIDIxNCwgMjcsIDEzNiwgMSwgMjIwLCAxMDIsIDEzNiwgMSwgMjE4LCAyMjMsIDEzNiwgMSwgMjA2LCAxMzYsIDEsIAotICAgIDE2MiwgMTM2LCAxLCAyMTUsIDEyNSwgMTM2LCA1LCAyNTMsIDE3NSwgMTM2LCAyNSwgNSwgMjU1LCA3MywgMTM2LCAyNSwgNSwgCi0gICAgNzMsIDEzNiwgMjUsIDUsIDIzNiwgMzMsIDEzNiwgMjUsIDUsIDcwLCAxMzYsIDI1LCA1LCAyMTQsIDExOCwgMTM2LCAyNSwgCi0gICAgNSwgMTQ5LCAxNTMsIDEzNiwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDEzNiwgMjUsIDUsIDc1LCAxMzYsIDI1LCA1LCAyNDUsIAotICAgIDIwOSwgMTM2LCAyNSwgNSwgMjU0LCAyMDEsIDEzNiwgMjUsIDUsIDc2LCAxMzYsIDI1LCA1LCAyMjYsIDE4MywgMTM2LCAyNSwgCi0gICAgNSwgMjUzLCAxOTIsIDEzNiwgNSwgMjEzLCAxNTIsIDEzNiwgMSwgNTksIDIyMywgNzMsIDEzNiwgMjUzLCAxOTMsIDIzMywgCi0gICAgMjMsIDc4LCAxMzYsIDEsIDE0OSwgMjIyLCAxODAsIDEzNiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTM2LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDEzNiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDEzNiwgMjEsIDIxMCwgODYsIDEzNiwgMjEsIDExMCwgMTM2LCAyMSwgCi0gICAgMTA1LCAxMzYsIDIxLCAxNTgsIDEzNiwgMjEsIDE2MSwgMTM2LCAyMSwgMTg5LCAxMzYsIDIxLCAxOTQsIDEzNiwgMjEsIAotICAgIDE5OCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAyMDAsIDEzNiwgNTQsIDIxNiwgMjQ3LCAxMzYsIDU0LCAxMjMsIDI0MCwgCi0gICAgMjEwLCAxMzYsIDU0LCAxMjMsIDIxNiwgMTQ3LCAxMzYsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAxMzYsIDI0NCwgMiwgMTIzLCAKLSAgICAyNDIsIDI3LCAxMzYsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAxMzYsIDI0OCwgMTUwLCA3OCwgMTM2LCAxLCAyNTAsIDk5LCAKLSAgICAyMjgsIDExMSwgMTM2LCAxLCAyNTAsIDk5LCAyMzAsIDI1LCAxMzYsIDEsIDI1MCwgOTksIDIyMiwgMTgwLCAxMzYsIDEsIAotICAgIDI1MCwgOTksIDE1NiwgMTM2LCAxLCAyNTAsIDk5LCAyMzIsIDE4NSwgMTM2LCAxLCAyNTAsIDk5LCAyMzUsIDIzLCAxNzUsIAotICAgIDUsIDI1NCwgNzQsIDE3NSwgNSwgMjEzLCAxNDYsIDE3NSwgMSwgMjUzLCAxNjUsIDE3NSwgMSwgMjU1LCAyNywgMTc1LCAxLCAKLSAgICAyNTQsIDIyMywgMTc1LCAxLCAyNTQsIDIzOCwgMTc1LCAxLCAyMzUsIDE1MSwgMTc1LCAxLCAyMzYsIDMyLCAxNzUsIDEsIAotICAgIDIxNCwgMTEwLCAxNzUsIDEsIDIxNCwgMTEyLCAxNzUsIDEsIDIzNSwgMTczLCAxNzUsIDEsIDIzNSwgMTc0LCAxNzUsIDEsIAotICAgIDIzNiwgMTgsIDE3NSwgMSwgMjM2LCAyMCwgMTc1LCAxLCAyNDUsIDE3LCAxNzUsIDEsIDI0NSwgMjA0LCAxNzUsIDEsIDI1NCwgCi0gICAgMTg4LCAxNzUsIDEsIDIyNiwgMTA4LCAxNzUsIDEsIDIyNiwgMTc3LCAxNzUsIDEsIDI1MywgMTc4LCAxNzUsIDEsIDI1NCwgCi0gICAgMTQ2LCAyMzQsIDE4NywgMTc1LCAxLCAyMzEsIDIwOSwgMjM0LCAxODcsIDE3NSwgMSwgMjU0LCAxNDYsIDI0MywgODIsIAotICAgIDE3NSwgMSwgMjMxLCAyMDksIDI0MywgODIsIDE3NSwgMSwgMjM0LCAyMjksIDIyOSwgMjIyLCAxNzUsIDEsIDIyMSwgMjM2LCAKLSAgICAyNDMsIDgyLCAxNzUsIDEsIDI1NCwgMTQ2LCAyNTAsIDIxNiwgMTc1LCAxLCAyMzEsIDIwOSwgMjUwLCAyMTYsIDE3NSwgMSwgCi0gICAgMjU0LCAxNDYsIDIzNSwgMTI3LCAxNzUsIDEsIDIzMSwgMjA5LCAyMzUsIDEyNywgMTc1LCAxLCAyMTcsIDk4LCAyMjksIAotICAgIDIyMiwgMTc1LCAxLCAyMTcsIDk4LCAyMjEsIDIzNSwgMjI5LCAyMjMsIDE3NSwgMSwgMjIxLCAyMzYsIDIzNSwgMTI3LCAKLSAgICAxNzUsIDEsIDI1NCwgMTQ2LCAyMTUsIDE1MiwgMTc1LCAxLCAyMzEsIDIwOSwgMjE1LCAxNTIsIDE3NSwgMSwgMjU0LCAxNDYsIAotICAgIDI0OCwgMTI2LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDEyNiwgMTc1LCAxLCAyMzAsIDUzLCAyMjksIDE4MCwgMTc1LCAxLCAKLSAgICAyMjEsIDIzNiwgMjQ4LCAxMjYsIDE3NSwgMSwgMjU0LCAxNDYsIDIxNywgMzAsIDE3NSwgMSwgMjMxLCAyMDksIDIxNywgMzAsIAotICAgIDE3NSwgMSwgMjU0LCAxNDYsIDI0OCwgMTQ0LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDE0NCwgMTc1LCAxLCAyNDgsIDE3NCwgCi0gICAgMjI5LCAxODAsIDE3NSwgMSwgMjIxLCAyMzYsIDI0OCwgMTQ0LCAxNzUsIDEsIDI1NCwgMTQ2LCAyMjUsIDIyOCwgMTc1LCAxLCAKLSAgICAyMzEsIDIwOSwgMjI1LCAyMjgsIDE3NSwgMSwgMjU0LCAxNDYsIDI1MiwgMTEyLCAxNzUsIDEsIDIzMSwgMjA5LCAyNTIsIAotICAgIDExMiwgMTc1LCAxLCAyMzEsIDEzMSwgMTc1LCAxLCAyNTQsIDEzMSwgMjUyLCAxMTIsIDE3NSwgMSwgMjExLCA1MSwgMTc1LCAKLSAgICAxLCAyMjMsIDEzMywgMTc1LCAxLCAyNDgsIDE3NCwgMjMzLCA2NywgMTc1LCAxLCAyMTQsIDEsIDE3NSwgMSwgMjE3LCA5OCwgCi0gICAgMjIxLCAyMTAsIDE3NSwgMSwgMjMwLCA1MywgMjIxLCAyMTAsIDE3NSwgMSwgMjQ4LCAxNzQsIDIyMSwgMjEwLCAxNzUsIDEsIAotICAgIDI0MSwgMjQyLCAxNzUsIDEsIDIzMCwgNTMsIDIzMywgNjcsIDE3NSwgMSwgMjQ0LCAxNTYsIDE3NSwgNSwgMjU0LCAxNzcsIAotICAgIDE3NSwgMjUsIDUsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjU0LCAyNDAsIDE3NSwgMjUsIDUsIDI0NywgCi0gICAgMjI4LCAyNTQsIDI0MCwgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDIzNSwgMTcwLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjM1LCAKLSAgICAxNzAsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyMjYsIDg4LCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjI2LCA4OCwgMTc1LCAKLSAgICAyNSwgNSwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIDIzNCwgMTUsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMzQsIDE1LCAxNzUsIAotICAgIDI1LCA1LCAyMzQsIDE3LCAyNDgsIDY3LCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAyNTQsIDIzMywgMTc1LCAyNSwgCi0gICAgNSwgMjM0LCAxNiwgMjQyLCA0NywgMjQ3LCAyMjgsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAKLSAgICAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIAotICAgIDI0NywgMjI4LCAyNDMsIDgxLCAxNzUsIDIyNCwgMTQxLCAyMzMsIDIwNywgMTY4LCAxMzUsIDIzNCwgMjksIDIzNCwgMjQ2LCAKLSAgICAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgMTI4LCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgOTksIDE2OCwgMTM1LCAyMzQsIAotICAgIDEwNiwgMjM0LCA5NSwgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDEwMywgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMjMsIDE1NCwgCi0gICAgMTY4LCAxMzUsIDIyOSwgNSwgMjI4LCAyNDgsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NywgMTY4LCAxMzUsIDI1MCwgCi0gICAgODcsIDI1MCwgOTUsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NiwgMTY4LCAxMzUsIDIxOSwgNTksIDIxOSwgNTgsIAotICAgIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDgzLCAxNjgsIDEzNSwgMjEwLCAyNDUsIDIxMCwgMjUyLCAxNjgsIDEzNSwgMjQ3LCAKLSAgICAxNDYsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE2LCA0MiwgMjI1LCAyMzgsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAyMDAsIAotICAgIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI5LCAyMDEsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI1LCAxMTEsIDE2OCwgMTM1LCAKLSAgICAyMjgsIDc1LCAyMjksIDk4LCAxNjgsIDEzNSwgMjQ3LCAxNDYsIDI0OCwgNjgsIDE2OCwgMTM1LCAyMTYsIDQyLCAyMTcsIAotICAgIDU1LCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMTMxLCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMjA0LCAxNjgsIDEzNSwgCi0gICAgMjE2LCAxNTcsIDIxNiwgMTU0LCAxNjgsIDEzNSwgMjI4LCA3NSwgMjI3LCAyMzcsIDE2OCwgMTM1LCAyNTEsIDIwNiwgMjUyLCAKLSAgICAxNjQsIDE2OCwgMTM1LCAyMjUsIDE3LCAyMjUsIDQyLCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyNSwgMTEzLCAxNjgsIDEzNSwgCi0gICAgMjQ0LCA0NCwgMjQ0LCAxOTYsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjI1LCAxNDEsIDE2OCwgMTM1LCAyNDQsIDQ0LCAyNDQsIAotICAgIDE3MywgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjEsIDI0NywgMTY4LCAxMzUsIDIzMCwgMTYyLCAxODQsIDE2OCwgMTM1LCAKLSAgICAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjEyLCAyMjIsIDEzOSwgMTY4LCAxMzUsIDIyMiwgMTQwLCAxNjgsIAotICAgIDEzNSwgMjMyLCAxNTcsIDIzMiwgMjA2LCAxNjgsIDEzNSwgMjMyLCA5OCwgMTY4LCAxMzUsIDIxMSwgMjI4LCAyMTIsIDYxLCAKLSAgICAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCA2LCAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCAxMTQsIDE2OCwgMTM1LCAyMTksIAotICAgIDU5LCAyMTgsIDgyLCAxNjgsIDEzNSwgMjQxLCA2OSwgMjQxLCAxNTksIDE2OCwgMTM1LCAyMzIsIDE1NywgMjUwLCA2OCwgCi0gICAgMTY4LCAxMzUsIDE0NCwgMjU0LCAxMTUsIDE2OCwgMTM1LCAyNDEsIDY5LCAyMjgsIDcwLCAxNjgsIDEzNSwgMjI2LCA2OCwgCi0gICAgMTY4LCAxMzUsIDIyMSwgMjMwLCA2MSwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyNDIsIDE3LCAxNjgsIDEzNSwgMjIxLCAyMzAsIAotICAgIDI1NSwgNzMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAxMzYsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzMsIDE2OCwgMTM1LCAKLSAgICAyMjEsIDIzMCwgMjM2LCAzMywgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDIxNCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIAotICAgIDIxMiwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3MCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDExOCwgMTY4LCAxMzUsIDIyNSwgCi0gICAgMTI0LCAxNjgsIDI0OSwgOTgsIDE2LCAyNTIsIDE2NSwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NSwgMTY4LCAxMzUsIDIyMSwgCi0gICAgMjMwLCAyNTQsIDI0MywgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NiwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDIwMiwgMjMxLCAKLSAgICAxOTgsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAyMDIsIDIzMSwgMTk5LCAxNjgsIDEzNSwgMjMzLCAxMDYsIDE2OCwgCi0gICAgMTM1LCAyMzEsIDE5NSwgMTY4LCAxMzUsIDIzMSwgMTk2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDI0NSwgMTgwLCAxNjgsIAotICAgIDEzNSwgMjMxLCAyMDQsIDIxNiwgMTU2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDIxNSwgMjI4LCAxNjgsIDEzNSwgMjMxLCAKLSAgICAyMDQsIDI1MCwgMTM1LCAxNjgsIDEzNSwgMjE2LCAxOTgsIDE2OCwgMTM1LCAyMjgsIDIwNSwgMTY4LCAxMzUsIDIxMSwgNzMsIAotICAgIDE2OCwgMTM1LCAyNDQsIDM1LCAxNjgsIDIxLCAyMTAsIDg2LCAxNjgsIDIxLCAxMTAsIDE2OCwgMjEsIDEwNSwgMTY4LCAyMSwgCi0gICAgMTU4LCAxNjgsIDIxLCAxNjEsIDE2OCwgMjEsIDE4OSwgMTY4LCAyMSwgMTk0LCAxNjgsIDIxLCAxOTgsIDE2OCwgMjEsIAotICAgIDE5NSwgMTY4LCAyMSwgMjAwLCAxNjgsIDEzNSwgMjU0LCAxMTEsIDE2OCwgMTM1LCAyMzQsIDEwNCwgMjA5LCAyMDksIDEsIAotICAgIDIzNCwgMjgsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNiwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIzNCwgMTA2LCAyMTcsIDYyLCAKLSAgICAyMDksIDIwOSwgMSwgMjI5LCA0LCAyMDksIDIwOSwgMSwgMjQ5LCAyMzgsIDIwOSwgMjA5LCAxLCAyMTksIDU5LCAyMTcsIAotICAgIDYyLCAyMDksIDIwOSwgMSwgMjI3LCAxMzQsIDIwOSwgMjA5LCAxLCAyNDcsIDE0NSwgMjA5LCAyMDksIDEsIDExMSwgMjA5LCAKLSAgICAyMDksIDEsIDIxNiwgMTU3LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjE2LCAxNTcsIDIxNywgNjIsIDIwOSwgMjA5LCAxLCAKLSAgICAyMjgsIDc0LCAyMDksIDIwOSwgMSwgMjUxLCAyMDUsIDIwOSwgMjA5LCAxLCAyMjUsIDE2LCAyMDksIDIwOSwgMSwgMjI1LCAKLSAgICAxMjIsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTcsIDYyLCAyMDksIDIwOSwgMSwgMjI1LCAxMjIsIDIxNywgCi0gICAgNjIsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjMwLCAxNjEsIDIwOSwgMjA5LCAxLCAKLSAgICAyMTAsIDI0NCwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIDIwNiwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIAotICAgIDEyMSwgMjA5LCAyMDksIDEsIDIxMSwgMjI3LCAyMDksIDIwOSwgMSwgMjE5LCA1OSwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIAotICAgIDI0MSwgNjksIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCA3NiwgMjA5LCAyMDksIDEsIDI0MSwgNjksIDIxNywgNjIsIDIwOSwgCi0gICAgMjA5LCAyNDUsIDE2MywgMjA5LCAyMDksIDI1LCA1LCA2MSwgMjA5LCAyMDksIDI1LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzQsIAotICAgIDIwOSwgMjA5LCAyNSwgNSwgMjU1LCA3MywgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDEzNiwgMjA5LCAyMDksIDI1LCA1LCA3MywgCi0gICAgMjA5LCAyMDksIDI1LCA1LCAyMzYsIDMzLCAyMDksIDIwOSwgMjUsIDUsIDIxMSwgMTE3LCAyMDksIDIwOSwgMjUsIDUsIAotICAgIDIxMCwgMTY5LCAyMDksIDIwOSwgMjUsIDUsIDcwLCAyMDksIDIwOSwgMjUsIDUsIDIxNCwgMTE4LCAyMDksIDIwOSwgMjUsIAotICAgIDUsIDIzMSwgMjA0LCAyMzQsIDEzLCAyMDksIDIwOSwgMjIwLCAxNDUsIDUsIDIzMiwgMTU2LCAyMDksIDIwOSwgMjIwLCAKLSAgICAxNDUsIDUsIDIyNywgMTM0LCAyMDksIDIwOSwgMjUsIDUsIDc1LCAyMDksIDIwOSwgMjUsIDUsIDI0NSwgMTk1LCAyMDksIAotICAgIDIwOSwgMjUsIDUsIDc2LCAyMDksIDIwOSwgMjUsIDUsIDI1MywgMTY3LCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMjAxLCAKLSAgICAyMDksIDIwOSwgMjM0LCAyOSwgMjMzLCAxMzUsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA0LCAyNDUsIDE4MCwgMjA5LCAyMDksIAotICAgIDEzOCwgMjMxLCAyMDQsIDIxNiwgMTU2LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwNCwgMjE2LCAxMTcsIDIwOSwgMjA5LCAKLSAgICAxMzgsIDIzMSwgMjA0LCAyNTAsIDIyMywgMjA5LCAyMDksIDI1MSwgNCwgNzgsIDIwOSwgMjA5LCAyMjgsIDIxNCwgMjA5LCAKLSAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMCwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCi0gICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxODksIDIwOSwgMjA5LCAyMSwgMTk0LCAyMDksIDIwOSwgCi0gICAgMjEsIDE5OCwgMjA5LCAyMDksIDIxLCAxOTUsIDIwOSwgMjA5LCAyMSwgMjAwLCAyMDksIDIwOSwgMjQxLCA2OSwgMjI4LCAKLSAgICA3NCwgMjA5LCAyMDksIDI0MSwgNjksIDIzMCwgMTYxLCAyMDksIDIwOSwgMSwgMjM0LCAxMDcsIDI0MiwgMTc0LCAyMDksIAotICAgIDIwOSwgMSwgMjM0LCAxMDcsIDIyNywgMTM0LCA2MywgMywgMjI2LCAyMDQsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIAotICAgIDIzMCwgMjQ4LCAyMTUsIDE4OSwgNjEsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyNTUsIDE1OSwgCi0gICAgMjIyLCAyMTYsIDI1MiwgNzcsIDE4NCwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgMjMwLCAyNDgsIDI1NSwgMTU5LCAKLSAgICAyNDIsIDExNSwgMjE1LCAxNzMsIDE4NCwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNDgsIDIzMSwgOTMsIDE4NCwgNjMsIAotICAgIDE2NCwgMjQ5LCAyNTIsIDIxMSwgMCwgMjMwLCAyNDgsIDIyMCwgMTA5LCAxODQsIDYzLCAxNjQsIDI1MCwgMjM5LCAyMTEsIAotICAgIDAsIDIzMCwgMjQ4LCAyMjUsIDExMiwgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMTEsIDAsIDIzMCwgMjQ4LCAyMTUsIDE3MywgCi0gICAgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMjEsIDIwOCwgMjIwLCA5NSwgNjMsIDE2NCwgMjUxLCAxMjgsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDcsIDYzLCAxNjQsIDI1MSwgMjIzLCAyMjAsIDMsIDIxMSwgMCwgMjMwLCAyNDcsIDYzLCAxNjQsIDIzNSwgMTk3LCAyMTUsIAotICAgIDE3MiwgNjMsIDE2NCwgMjQ4LCA2MSwgMjE1LCAxNzMsIDI1MSwgMTI3LCA2MywgMTY0LCAyMjAsIDk1LCA2MywgMTY0LCAKLSAgICAyMjcsIDEzOSwgMjIwLCA5NSwgNjMsIDE2NCwgMjE1LCAxNzMsIDIyMCwgOTUsIDYzLCAxNjQsIDIyNywgMTM5LCAyMTUsIAotICAgIDE3MywgMjIwLCA5NSwgNjMsIDE2NCwgMjIyLCAyMzYsIDI1MCwgMTIyLCAyMTgsIDIzNiwgMjIwLCA5NSwgNjMsIDE2NCwgCi0gICAgMjIzLCA0MiwgMjQyLCAxNDYsIDIyMCwgOTUsIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDIzMSwgCi0gICAgOTIsIDE5OSwgMjUxLCA3LCA2MywgMTY0LCAyNDIsIDExNSwgMjE1LCAxNzIsIDYzLCAyMzIsIDE0NCwgNSwgMjUwLCAxNTUsIAotICAgIDIyMiwgMTQzLCA2MywgMjMyLCAxNDQsIDUsIDIzMiwgMjUyLCAyMjIsIDE0MywgNjMsIDI1MywgMjEyLCA1LCAyMjAsIDEwNSwgCi0gICAgMjQzLCA2NSwgMjU1LCAxNjQsIDIyMiwgMTQzLCA2MywgMjUzLCAyMTIsIDUsIDI1NSwgMTYxLCAxOTAsIDYzLCAyNTMsIAotICAgIDIxMiwgNSwgMjIxLCAxODIsIDIxNSwgMTY4LCA2MywgNSwgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDMsIDY0LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDIsIDE3NiwgNjMsIDUsIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQyLCAxMTYsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MywgNjQsIDYzLCA1LCAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTc2LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyMjMsIDEzMCwgMjI5LCAyMTgsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTAsIDYzLCAKLSAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTg5LCA2MywgMjEsIDE5NCwgNjMsIDIxLCAxOTgsIAotICAgIDYzLCAyMSwgMTk1LCA2MywgMjEsIDIwMCwgNjMsIDIxLCAxNjMsIDExMCwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKLSAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE4OSwgNjMsIDIxLCAxNjMsIDE5NCwgNjMsIDIxLCAKLSAgICAxNjMsIDE5OCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAxNjMsIDIwMCwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKLSAgICAxNjQsIDI1MSwgMTMwLCAyMjIsIDE0MywgNjMsIDE2NCwgMjI5LCA2OCwgMjUxLCA2OCwgMjI3LCAxNDksIDIxMCwgMjUsIAotICAgIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDI1MSwgNjksIDIzMCwgMjAyLCAyNTEsIDcsIDYzLCAKLSAgICAxNjQsIDIyOSwgNjgsIDI1MSwgNjgsIDIyMCwgMTA2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjUwLCAxMzIsIDIzMCwgMjQ3LCAKLSAgICA2MywgMTY0LCAyMTUsIDE4NCwgMjU1LCAxNjAsIDYzLCAxNjQsIDI0MiwgMTAwLCAyMjIsIDE0NCwgMjQyLCA2MywgNjMsIAotICAgIDE2NCwgMjQyLCAxMDAsIDIyMiwgMTQ0LCAyNDIsIDY5LCA2MywgMTY0LCAyNTQsIDExNiwgMjM0LCAxMjMsIDI0MiwgNjMsIAotICAgIDYzLCAxNjQsIDI1NCwgMTE2LCAyMzQsIDEyMywgMjQyLCA2OSwgNjMsIDUsIDIxMSwgNjUsIDIxNSwgMTcxLCA2MywgNSwgCi0gICAgMjMxLCAxNjcsIDIxNSwgMTcxLCA2MywgMSwgMTc2LCA2MywgMSwgMjM0LCAxMzIsIDYzLCAxLCAyNDMsIDEzNSwgNjMsIDEsIAotICAgIDI0MiwgMjQ5LCA2MywgMSwgMjI5LCA3NywgNjMsIDEsIDI1MSwgMzMsIDYzLCAxLCAyNTAsIDE1NywgNjMsIDEsIDIzNSwgCi0gICAgMTQxLCA2MywgMSwgMjI3LCAxNjUsIDYzLCAxLCAyMTUsIDE1NiwgNjMsIDEsIDIxNSwgMTQ0LCA2MywgMSwgMjQ4LCAxMzUsIAotICAgIDYzLCAxLCAyNDgsIDExOSwgNjMsIDEsIDIyOCwgMTEwLCA2MywgMSwgMjE3LCAxMDUsIDYzLCAxLCAyMTYsIDIwOCwgNjMsIAotICAgIDEsIDI0OCwgMjIxLCA2MywgMSwgMjQ4LCAyNSwgNjMsIDEsIDE5NywgNjMsIDEsIDE5MCwgNjMsIDEsIDIyNSwgMTQ3LCA2MywgCi0gICAgMSwgMjUyLCAxOTEsIDYzLCAxLCAyNTIsIDE4LCA2MywgMSwgMTg0LCA2MywgMSwgMjE1LCAxODMsIDYzLCAxLCAyMTUsIAotICAgIDE3NSwgNjMsIDEsIDI0NiwgMzgsIDYzLCAxLCAyNDYsIDMzLCA2MywgMSwgMjEyLCA2NSwgNjMsIDEsIDIxMCwgODIsIDYzLCAKLSAgICAxLCAyMTAsIDExNiwgNjMsIDEsIDI1NSwgMTY2LCA2MywgMSwgMTkxLCA2MywgMSwgMjA1LCA2MywgMSwgMjMzLCAxMzUsIAotICAgIDYzLCAxLCAyMjAsIDEwMiwgNjMsIDEsIDIxOCwgMjIzLCA2MywgMSwgMjA2LCA2MywgMSwgMTYyLCA2MywgMSwgNjEsIDYzLCAKLSAgICAxLCAyMzMsIDIzMSwgNjMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDEsIDIzNCwgNDYsIDYzLCAxLCAyMjIsIDE3OSwgNjMsIAotICAgIDI1LCA1LCAyNTUsIDczLCA2MywgMjUsIDUsIDczLCA2MywgMjUsIDUsIDIzNiwgMzMsIDYzLCAyNSwgNSwgNzAsIDYzLCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDYzLCAyNSwgNSwgMTQ5LCAxNTMsIDYzLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgNjMsIDI1LCA1LCAKLSAgICAxNDksIDE1NiwgNjMsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCA2MywgMjUsIDUsIDc1LCA2MywgMjUsIDUsIDI0NSwgMjA5LCAKLSAgICA2MywgMjUsIDUsIDc2LCA2MywgMjUsIDUsIDIyNiwgMTgzLCA2MywgNSwgMjIyLCAyMjEsIDIxOCwgODQsIDIyOSwgNzgsIAotICAgIDIyMiwgMjExLCA2MywgNSwgMjIyLCAyMTYsIDI1MiwgNzYsIDYzLCAyNSwgNSwgMjIzLCA0OSwgNzMsIDYzLCAyNSwgNSwgCi0gICAgMjIzLCA0OSwgMjM2LCAzMywgNjMsIDUsIDIyNywgMTQ5LCAyMTAsIDI2LCAyMjksIDIyNiwgMjQ4LCAyMjEsIDYzLCA1LCAKLSAgICAyMTksIDcxLCAyMzMsIDYwLCA2MywgMTY0LCAyNDIsIDI5LCA2MywgMTY0LCAyMjYsIDU3LCA2MywgNSwgMjMzLCA2MywgCi0gICAgMjIyLCAxNDMsIDYzLCA1LCAyMTEsIDcwLCAyMjIsIDE0MywgNjMsIDUsIDIzMywgNjQsIDIxNSwgMTg0LCAyNTEsIDcsIDYzLCAKLSAgICA1LCAyMzEsIDk1LCAyNTEsIDcsIDYzLCA1LCAyNDIsIDExOSwgMjUxLCA4LCAyMjMsIDQwLCA2MywgNSwgMjQyLCAxMTksIAotICAgIDIzMSwgODUsIDIyMywgNDAsIDYzLCA1LCAyMzUsIDE5MywgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgMjMzLCAKLSAgICA2NCwgMjE1LCAxODQsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIAotICAgIDIzNSwgMTkzLCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCAxLCAxNzYsIDYzLCAyMTgsIDczLCAxLCAyMzQsIDEzMiwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI0MywgMTM1LCA2MywgMjE4LCA3MywgMSwgMjQyLCAyNDksIDYzLCAyMTgsIDczLCAxLCAyMjksIAotICAgIDc3LCA2MywgMjE4LCA3MywgMSwgMjUxLCAzMywgNjMsIDIxOCwgNzMsIDEsIDI1MCwgMTU3LCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjM1LCAxNDEsIDYzLCAyMTgsIDczLCAxLCAyMjcsIDE2NSwgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTU2LCA2MywgMjE4LCAKLSAgICA3MywgMSwgMjE1LCAxNDQsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMTE5LCA2MywgCi0gICAgMjE4LCA3MywgMSwgMjI4LCAxMTAsIDYzLCAyMTgsIDczLCAxLCAyMTcsIDEwNSwgNjMsIDIxOCwgNzMsIDEsIDIxNiwgMjA4LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjQ4LCAyMjEsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDI1LCA2MywgMjE4LCA3MywgMSwgMTk3LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMTkwLCA2MywgMjE4LCA3MywgMSwgMjI1LCAxNDcsIDYzLCAyMTgsIDczLCAxLCAyNTIsIDE5MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI1MiwgMTgsIDYzLCAyMTgsIDczLCAxLCAxODQsIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE4MywgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTc1LCA2MywgMjE4LCA3MywgMSwgMjQ2LCAzOCwgNjMsIDIxOCwgNzMsIDEsIDI0NiwgCi0gICAgMzMsIDYzLCAyMTgsIDczLCAxLCAyMTIsIDY1LCA2MywgMjE4LCA3MywgMSwgMjEwLCA4MiwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIxMCwgMTE2LCA2MywgMjE4LCA3MywgMSwgMjU1LCAxNjYsIDYzLCAyMTgsIDczLCAxLCAxOTEsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMDUsIDYzLCAyMTgsIDczLCAxLCAyMzMsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDIyMCwgMTAyLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjE4LCAyMjMsIDYzLCAyMTgsIDczLCAxLCAyMDYsIDYzLCAyMTgsIDczLCAxLCAxNjIsIDYzLCAyMTgsIDczLCAxLCA2MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIzMywgMjMxLCA2MywgMjE4LCA3MywgMSwgMjQ0LCA3NywgMjEyLCA2NSwgNjMsIDIxOCwgNzMsIAotICAgIDEsIDI0NCwgNzcsIDE5MSwgNjMsIDIxOCwgNzMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDIzMywgMjE4LCAyMjIsIDE0MSwgCi0gICAgMjM0LCAxMzIsIDYzLCAyMzMsIDIxOCwgMjIyLCAxNDEsIDIzNCwgMTMzLCAyNTEsIDY5LCAyMzAsIDIwMiwgMjUxLCA3LCAKLSAgICA2MywgMjUwLCAyNTIsIDUsIDExNCwgMjUyLCA3MCwgNjMsIDI1MCwgMjUyLCA1LCAxOTIsIDI1MiwgNzAsIDYzLCAyNTAsIAotICAgIDI1MiwgNSwgMjUwLCAyNTMsIDIxNywgMjAsIDYzLCAyNTAsIDI1MiwgNSwgMjIxLCAyMDcsIDI1NSwgMTY1LCA2MywgMTYsIAotICAgIDI0NiwgOTEsIDI1MSwgMTI1LCA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMiwgNjMsIDE2LCAyMjYsIDc3LCAyNDMsIDYzLCAKLSAgICA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMywgMjIzLCA0MiwgMjQyLCAxNDUsIDYzLCAxNiwgMjI1LCAxMTIsIDE5MCwgNjMsIAotICAgIDE2LCAyMjgsIDU5LCAyNTEsIDEyNSwgNjMsIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgMjI3LCAxMzksIDI1NSwgMTYyLCA2MywgCi0gICAgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAyNDIsIDExNywgMjU1LCAxNjIsIDYzLCAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIAotICAgIDI1MSwgNjksIDI1NSwgMTYyLCA2MywgNSwgMjIzLCAxMzAsIDIyOSwgMjE5LCAyMjMsIDEzMCwgMjQ3LCAxNTgsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTE2LCA2MywgMTY0LCAyNTEsIDEyOSwgMjIwLCAzLCAyNDIsIDIxNSwgMjMwLCAKLSAgICAyNDgsIDIyMywgNDEsIDYzLCAxNjQsIDIzMCwgMTYzLCAyMTEsIDAsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgNjMsIAotICAgIDE2NCwgMjI3LCAxMzksIDIxNSwgMTcyLCA2MywgMTY0LCA2NSwgMjUxLCAxNTIsIDIyMiwgMjEzLCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ4LCAyMzEsIDkzLCAxODQsIDYzLCAxNjQsIDI0OSwgMjUyLCAyNTEsIDE1MiwgMjIyLCAyMTMsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDgsIDIyMCwgMTA5LCAxODQsIDIyMiwgMjUwLCAyMTcsIDI1NSwgNTAsIDIzMywgNDUsIDIxNywgMjU1LCA1MCwgMjIyLCAKLSAgICAyNTAsIDIxNywgMjU1LCA1LCAyLCAyNDcsIDExOCwgMjMzLCA0NSwgMjE3LCAyNTUsIDUsIDIsIDI0NywgMTE4LCA2MywgCi0gICAgMTY0LCAyMzMsIDU1LCAyMzEsIDk2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjE1LCAyNTAsIDIzMSwgOTYsIDIyMiwgMTQzLCAKLSAgICA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAxMzIsIDY4LCAxLCAyNDMsIDEzNSwgNjgsIDEsIDI0MiwgMjQ5LCA2OCwgMSwgCi0gICAgMjI5LCA3NywgNjgsIDEsIDI1MSwgMzMsIDY4LCAxLCAyNTAsIDE1NywgNjgsIDEsIDIzNSwgMTQxLCA2OCwgMSwgMjM1LCAKLSAgICAxMTQsIDY4LCAxLCAyMjcsIDE2NSwgNjgsIDEsIDIyOCwgNzYsIDY4LCAxLCAyMTUsIDE1NiwgNjgsIDEsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjQ4LCAxMzUsIDY4LCAxLCAyNDgsIDExOSwgNjgsIDEsIDIyOCwgMTEwLCA2OCwgMSwgMjE3LCAxMDUsIDY4LCAKLSAgICAxLCAyMTYsIDIwOCwgNjgsIDEsIDI0OCwgMjIxLCA2OCwgMSwgMjQ4LCAyNSwgNjgsIDEsIDE5NywgNjgsIDEsIDE5MCwgNjgsIAotICAgIDEsIDIyNSwgMTQ3LCA2OCwgMSwgMjUyLCAxOTEsIDY4LCAxLCAyNTIsIDE4LCA2OCwgMSwgMTg0LCA2OCwgMSwgMTkxLCA2OCwgCi0gICAgMSwgMjA1LCA2OCwgMSwgMjMzLCAxMzUsIDY4LCAxLCAyMTIsIDY1LCA2OCwgMSwgMjA2LCA2OCwgMSwgMTYyLCA2OCwgMSwgCi0gICAgMjMyLCAxODQsIDY4LCAxLCA2MSwgNjgsIDEsIDIyMCwgODYsIDYxLCA2OCwgMSwgNzMsIDY4LCAxLCAyMzYsIDMzLCA2OCwgCi0gICAgMSwgNzAsIDY4LCAxLCAyMTQsIDExOCwgNjgsIDEsIDc1LCA2OCwgMSwgMjMwLCAxNTEsIDc1LCA2OCwgMSwgNzYsIDY4LCAxLCAKLSAgICAyNTMsIDE5MiwgNjgsIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCA2OCwgMjUsIDUsIDI1NSwgNzMsIDY4LCAyNSwgNSwgNzMsIAotICAgIDY4LCAyNSwgNSwgMjM2LCAzMywgNjgsIDI1LCA1LCA3MCwgNjgsIDI1LCA1LCAyMTQsIDExOCwgNjgsIDI1LCA1LCA3NSwgCi0gICAgNjgsIDI1LCA1LCAyNTQsIDIwMSwgNjgsIDI1LCA1LCAyMzAsIDE1MSwgMjM2LCAzMywgNjgsIDI1LCA1LCAyMzAsIDE1MSwgCi0gICAgNzYsIDY4LCAyNSwgNSwgMTYwLCA0OCwgNjgsIDUsIDI1NCwgNzUsIDY4LCA1LCA1OSwgNTEsIDY4LCA1LCAyMTMsIDE0NywgCi0gICAgNjgsIDUsIDIxMywgMTUyLCA2OCwgNSwgMjUzLCAyMzUsIDY4LCAxMTYsIDUsIDE0NywgMTkxLCA2OCwgMTE2LCA1LCAxNDcsIAotICAgIDIwNSwgNjgsIDExNiwgNSwgMTQ3LCAyMTIsIDY1LCA2OCwgMTE2LCA1LCAxNDcsIDE2MiwgNjgsIDEsIDI0MiwgMTMyLCAKLSAgICAyMDYsIDY4LCAyMSwgMjEwLCA4NiwgNjgsIDIxLCAxMTAsIDY4LCAyMSwgMTA1LCA2OCwgMjEsIDE1OCwgNjgsIDIxLCAxNjEsIAotICAgIDY4LCAyMSwgMTg5LCA2OCwgMjEsIDE5NCwgNjgsIDIxLCAxOTgsIDY4LCAyMSwgMTk1LCA2OCwgMjEsIDIwMCwgNjgsIDUsIAotICAgIDIzMiwgMTkyLCAyMjEsIDE3MiwgNjgsIDUsIDIyMSwgMTcyLCA2OCwgMTYsIDIzMiwgMTUzLCA2OCwgMTYsIDI0OSwgMjEzLCAKLSAgICA2OCwgMTYsIDI1NCwgMjIwLCA2OCwgMTYsIDI0MywgNDgsIDY4LCAxLCAyMjAsIDEwMiwgNjgsIDEsIDIxOCwgMjIzLCA2OCwgCi0gICAgMSwgMTQ5LCAxNTMsIDY4LCAxLCAxNDksIDIyMiwgMTgwLCA2OCwgMSwgMTQ5LCAxNTYsIDY4LCAxLCAxNDksIDIzMiwgMTg1LCAKLSAgICA2OCwgMjUsIDUsIDE0OSwgMTUzLCA2OCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDY4LCAyNSwgNSwgMTQ5LCAxNTYsIDY4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgNjgsIDEsIDIzMCwgMTUxLCAyMjksIDc3LCA2OCwgMSwgMjMwLCAxNTEsIDIzNSwgCi0gICAgMTE0LCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTExLCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTA2LCA2OCwgMTE2LCA1LCAKLSAgICAyMzAsIDE1MSwgMTQ3LCAxOTcsIDY4LCAxMTYsIDUsIDIzMCwgMTUxLCAxNDcsIDE4NCwgNjgsIDExNiwgNSwgMjMwLCAxNTEsIAotICAgIDE0NywgMjMzLCAxMzUsIDY4LCAxLCAyMjAsIDEwOCwgMjM0LCAyMTMsIDIyMCwgMTAyLCA2OCwgMjUsIDUsIDIyMCwgMTA4LCAKLSAgICAyMzQsIDIxMywgMjQ1LCA1NSwgNjgsIDEzOCwgMTY0LCAyMjAsIDEwOCwgMjM0LCAyMTMsIDI0MSwgMjQ3LCA2OCwgMTM4LCAKLSAgICAxNjQsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjM0LCAxODMsIDIyNSwgMTIxLCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgCi0gICAgMjM0LCAyMTMsIDIxNiwgMjA4LCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIyNCwgMTE0LCA2OCwgMjUsIAotICAgIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyNDUsIDU1LCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgCi0gICAgMjEzLCAyMTQsIDIxNCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI5LCA2OCwgNSwgMjEyLCA3LCAKLSAgICAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyNywgCi0gICAgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI2LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAKLSAgICAyMTMsIDIxNiwgMjUsIDY4LCAxLCAyNDUsIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMjgsIDExMCwgNjgsIDEsIDI0NSwgCi0gICAgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxMCwgMTc2LCA2OCwgMSwgMjQ1LCAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgCi0gICAgMjQyLCAyMTcsIDY4LCAyNSwgNSwgMjQzLCA1OSwgMjM0LCAyMTMsIDczLCA2OCwgMjUsIDUsIDIzNCwgMTg4LCAyMjYsIAotICAgIDIzNCwgNjgsIDI1LCA1LCAyMzQsIDE4OCwgNzAsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDI0NSwgMjA5LCA2OCwgMSwgMjIwLCAKLSAgICA4NiwgMTc2LCA2OCwgMSwgMjIwLCA4NiwgMjM0LCAxMzIsIDY4LCAxLCAyMjAsIDg2LCAyNDMsIDEzNSwgNjgsIDEsIDIyMCwgCi0gICAgODYsIDI1MSwgMzMsIDY4LCAxLCAyMjAsIDg2LCAyMTAsIDExNiwgNjgsIDEsIDIyMCwgODYsIDIyNywgMTY1LCA2OCwgMSwgCi0gICAgMjIwLCA4NiwgMjQ4LCAyMjEsIDY4LCAxLCAyMjAsIDg2LCAxOTcsIDY4LCAxLCAyMjAsIDg2LCAyMjUsIDE0NywgNjgsIDEsIAotICAgIDIyMCwgODYsIDI0NCwgMTk2LCA2OCwgMSwgMjIwLCA4NiwgMjUyLCAxOTEsIDY4LCAxLCAyMjAsIDg2LCAyMTYsIDIwOCwgCi0gICAgNjgsIDEsIDIyMCwgODYsIDE2MiwgNjgsIDExNiwgNSwgMjIwLCA4NiwgMTQ3LCAyMTIsIDY1LCA2OCwgMjUsIDUsIDIyMCwgCi0gICAgODYsIDI1NSwgNzMsIDY4LCAyNSwgNSwgMjIwLCA4NiwgNzUsIDY4LCAyNSwgNSwgMjIwLCA4NiwgMTYwLCA0OCwgNjgsIDI1LCAKLSAgICA1LCAyMjAsIDg2LCA0MCwgMjExLCAxMTcsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAKLSAgICAyNywgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjUsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI0LCA2OCwgNSwgMjIwLCA4NiwgCi0gICAgMjQ5LCAxNTIsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg2LCAyNDksIDE1MiwgMjE2LCAyNywgNjgsIDUsIDIyMCwgODYsIAotICAgIDI0OSwgMTUyLCAyNDUsIDE1MywgMjE2LCAzMCwgNjgsIDEsIDIyMiwgMTI4LCAyMjYsIDYzLCAyNDQsIDE5NiwgNjgsIDUsIAotICAgIDIyMiwgMTI4LCAyMjYsIDYzLCAyMTYsIDI1LCA2OCwgMjIwLCA4NiwgMjEsIDIxMCwgODYsIDY4LCAyMjAsIDg2LCAyMSwgCi0gICAgMTEwLCA2OCwgMjIwLCA4NiwgMjEsIDEwNSwgNjgsIDIyMCwgODYsIDIxLCAxNTgsIDY4LCAyMjAsIDg2LCAyMSwgMTYxLCAKLSAgICA2OCwgMjIwLCA4NiwgMjEsIDE4OSwgNjgsIDIyMCwgODYsIDIxLCAxOTQsIDY4LCAyMjAsIDg2LCAyMSwgMTk4LCA2OCwgCi0gICAgMjIwLCA4NiwgMjEsIDE5NSwgNjgsIDIyMCwgODYsIDIxLCAyMDAsIDY4LCA1LCAyMzQsIDEyNiwgMjE2LCAyOSwgNjgsIDUsIAotICAgIDIzNCwgMTI2LCAyMTYsIDI3LCA2OCwgMjUsIDUsIDI1NCwgMTkwLCA2MSwgNjgsIDI1LCA1LCAyNTQsIDE5MCwgMjU0LCAKLSAgICAyMDEsIDY4LCAxNiwgMjIwLCA4NiwgMTEwLCA2OCwgMTYsIDIyMCwgODYsIDI0NSwgMzAsIDk4LCA2LCAxLCAyNTQsIDEyMywgCi0gICAgOTgsIDYsIDEsIDI1MiwgMTUyLCA5OCwgNiwgMSwgMjQzLCAxMDYsIDk4LCA2LCAxLCAyNDcsIDEyOCwgOTgsIDYsIDEsIAotICAgIDI0NSwgMTUwLCA5OCwgNiwgMSwgMjEzLCAxNjAsIDk4LCA2LCAxLCAyMTAsIDg5LCA5OCwgNiwgMSwgMjE3LCA2MCwgOTgsIAotICAgIDYsIDEsIDIzNSwgMjU1LCA5OCwgNiwgMSwgMjM0LCAyMzQsIDk4LCA2LCAxLCAyMzMsIDgxLCA5OCwgNiwgMSwgMjMxLCAKLSAgICAxODUsIDk4LCA2LCAxLCAyMjksIDE5NSwgOTgsIDYsIDEsIDIyNiwgMTk2LCA5OCwgNiwgMSwgMjI2LCAxNywgOTgsIDYsIDEsIAotICAgIDIxMCwgNzgsIDk4LCA2LCAxLCAyMjMsIDE3MSwgOTgsIDYsIDEsIDIyMSwgMjQzLCA5OCwgNiwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDYsIDEsIDIxNCwgMTkwLCA5OCwgNiwgMSwgMjI1LCAxNDAsIDk4LCA2LCAxLCAyMzQsIDEyMSwgOTgsIDYsIDEsIDI0MiwgCi0gICAgMjQxLCA5OCwgNiwgMSwgMjI0LCA3MywgOTgsIDYsIDEsIDIyMCwgMjAsIDk4LCA2LCAxLCAyNTAsIDk3LCA5OCwgNiwgMSwgCi0gICAgMjUxLCA3LCA5OCwgNiwgMSwgMjM1LCAxMDAsIDk4LCA2LCAxLCAyNTAsIDQwLCA5OCwgNiwgMSwgMjUwLCAxNDMsIDk4LCA2LCAKLSAgICAxLCAyMTEsIDE2MywgOTgsIDYsIDEsIDIzNSwgMTExLCA5OCwgNiwgMSwgMjQyLCA0MywgOTgsIDYsIDEsIDI0MSwgMjM4LCAKLSAgICA5OCwgNiwgMSwgMjQxLCAxNzUsIDk4LCA2LCAxLCAyMTIsIDIyLCA5OCwgNiwgMSwgMjQyLCA0LCA5OCwgNiwgMSwgMjQxLCAKLSAgICA2NSwgOTgsIDYsIDEsIDIxMCwgMjQ2LCA5OCwgNiwgMSwgMjU0LCAyMzIsIDk4LCAxLCAyNTQsIDEyMywgOTgsIDEsIDI1MiwgCi0gICAgMTUyLCA5OCwgMSwgMjQzLCAxMDYsIDk4LCAxLCAyNDcsIDEyOCwgOTgsIDEsIDI0NSwgMTUwLCA5OCwgMSwgMjEzLCAxNjAsIAotICAgIDk4LCAxLCAyMTAsIDg5LCA5OCwgMSwgMjE3LCA2MCwgOTgsIDEsIDIzNSwgMjU1LCA5OCwgMSwgMjM0LCAyMzQsIDk4LCAxLCAKLSAgICAyMzMsIDgxLCA5OCwgMSwgMjMxLCAxODUsIDk4LCAxLCAyMjksIDE5NSwgOTgsIDEsIDIyNiwgMTk2LCA5OCwgMSwgMjI2LCAKLSAgICAxNywgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3MSwgOTgsIDEsIDIyMSwgMjQzLCA5OCwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDAsIDk4LCAxLCAyMzQsIDEyMSwgOTgsIDEsIDI0MiwgMjQxLCA5OCwgMSwgCi0gICAgMjI0LCA3MywgOTgsIDEsIDIyMCwgMjAsIDk4LCAxLCAyNTAsIDk3LCA5OCwgMSwgMjUxLCA3LCA5OCwgMSwgMjM1LCAxMDAsIAotICAgIDk4LCAxLCAyNTAsIDQwLCA5OCwgMSwgMjUwLCAxNDMsIDk4LCAxLCAyMTEsIDE2MywgOTgsIDEsIDIzNSwgMTExLCA5OCwgMSwgCi0gICAgMjQyLCA0MywgOTgsIDEsIDI0MSwgMjM4LCA5OCwgMSwgMjQxLCAxNzUsIDk4LCAxLCAyMTIsIDIyLCA5OCwgMSwgMjQyLCA0LCAKLSAgICA5OCwgMSwgMjQxLCA2NSwgOTgsIDEsIDI0NCwgMTIxLCA5OCwgMSwgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE2NSwgOTgsIDEsIAotICAgIDIxNSwgOTQsIDI0MywgMTA2LCA5OCwgMSwgMjU0LCAxOTYsIDk4LCAyMjYsIDE1LCAyMjAsIDEzNywgNTgsIDEsIDk4LCAKLSAgICAyMjksIDE5NSwgOTgsIDEsIDI1NCwgMjMyLCA5OCwgMSwgMjQyLCAzLCA1MCwgOTgsIDEsIDIzMywgMTI3LCA1MCwgMjQsIAotICAgIDEwMCwgMjM0LCA1OCwgMjQsIDEwMCwgMjE4LCAyMTUsIDI0LCAxMDAsIDIyOCwgMjI2LCAyNCwgMTAwLCAyMTYsIDEwMSwgCi0gICAgMjQsIDEwMCwgMjE4LCAyMDQsIDI0LCAxMDAsIDIyMywgMjYsIDI0LCAxMDAsIDIzMCwgMjE3LCAyNCwgMTAwLCAyMjUsIDk1LCAKLSAgICAyNCwgMTAwLCAyMTgsIDIxMiwgMjQsIDEwMCwgMjE5LCAxNDgsIDI0LCAxMDAsIDIxOCwgMjA5LCAyNCwgMTAwLCAyMzYsIAotICAgIDU2LCAyNCwgMTAwLCAyNTAsIDQ2LCAyNCwgMTAwLCAyMTgsIDIxOSwgMjQsIDEwMCwgMjUwLCAxMDYsIDI0LCAxMDAsIDIzNCwgCi0gICAgMTEwLCAyNCwgMTAwLCAyMTYsIDE3MywgMjQsIDEwMCwgMjI1LCAxMzEsIDI0LCAxMDAsIDI0MSwgMTcyLCAyNCwgMTAwLCAKLSAgICAyMjgsIDIyMiwgMjQsIDEwMCwgMjE4LCAyMTMsIDI0LCAxMDAsIDIyOCwgMjE2LCAyNCwgMTAwLCAyMjgsIDIyMCwgMjQsIAotICAgIDEwMCwgMjE2LCA5OCwgMjQsIDEwMCwgMjIzLCAxNCwgMjQsIDEwMCwgMjE4LCAyMTEsIDI0LCAxMDAsIDIyMywgMjQsIDI0LCAKLSAgICAxMDAsIDIzNCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIxMCwgMjQsIDEwMCwgMjM0LCAyMjEsIDI0LCAxMDAsIDIyNSwgOTAsIAotICAgIDI0LCAxMDAsIDIyNSwgODgsIDI0LCAxMDAsIDIyNSwgNzYsIDI0LCAxMDAsIDIyNSwgODQsIDI0LCAxMDAsIDIyNSwgODIsIAotICAgIDI0LCAxMDAsIDIyNSwgNzksIDI0LCAxMDAsIDIyNSwgODEsIDI0LCAxMDAsIDIyNSwgNzgsIDI0LCAxMDAsIDIyNSwgODMsIAotICAgIDI0LCAxMDAsIDIyNSwgOTMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgNzcsIDI0LCAxMDAsIDIyNSwgODcsIAotICAgIDI0LCAxMDAsIDIzNCwgMjE5LCAyNCwgMTAwLCAyMzQsIDIxNywgMjQsIDEwMCwgMjE5LCAxNDEsIDI0LCAxMDAsIDIxOSwgCi0gICAgMTM5LCAyNCwgMTAwLCAyMTksIDEzMSwgMjQsIDEwMCwgMjE5LCAxMzQsIDI0LCAxMDAsIDIxOSwgMTQwLCAyNCwgMTAwLCAKLSAgICAyMTksIDEzNiwgMjQsIDEwMCwgMjE5LCAxMzUsIDI0LCAxMDAsIDIxOSwgMTMzLCAyNCwgMTAwLCAyMTksIDE0NCwgMjQsIAotICAgIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ3LCAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzIsIAotICAgIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIDE0NSwgMjQsIDEwMCwgMjUwLCA5MCwgMjQsIDEwMCwgMjUwLCA4OCwgCi0gICAgMjQsIDEwMCwgMjUwLCAxNjgsIDI0LCAxMDAsIDI1MCwgMTY2LCAyNCwgMTAwLCAyMjYsIDMyLCAyNCwgMTAwLCAyMzYsIDUxLCAKLSAgICAyNCwgMTAwLCAyMzYsIDQyLCAyNCwgMTAwLCAyMzYsIDUwLCAyNCwgMTAwLCAyMzYsIDQ3LCAyNCwgMTAwLCAyMzYsIDQ1LCAKLSAgICAyNCwgMTAwLCAyMzYsIDQ5LCAyNCwgMTAwLCAyMTgsIDIxNiwgMjQsIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1NSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0MywgMjQsIDEwMCwgMjM2LCA0OCwgMjQsIDEwMCwgMjExLCAyNiwgMjQsIDEwMCwgMjUwLCA0NSwgCi0gICAgMjQsIDEwMCwgMjUwLCA5MSwgMjQsIDEwMCwgMjUwLCA4OSwgMjQsIDEwMCwgMjUwLCAxNjksIDI0LCAxMDAsIDI1MCwgMTY3LCAKLSAgICAyNCwgMTAwLCAyNTAsIDEwNCwgMjQsIDEwMCwgMjUwLCAxMDUsIDI0LCAxMDAsIDI1MCwgOTIsIDI0LCAxMDAsIDI1MCwgCi0gICAgMTcwLCAyNCwgMTAwLCAyMjUsIDEyOSwgMjQsIDEwMCwgMjM0LCAyMjAsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKLSAgICAyMTEsIDMyLCAyNCwgMTAwLCAyMzQsIDQ5LCAyNCwgMTAwLCAyMjgsIDIxOCwgMjQsIDEwMCwgMjI4LCAyMjQsIDI0LCAxMDAsIAotICAgIDIyOCwgMjIzLCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyNDQsIDEwMywgMjQsIDE0MywgMjQ0LCAxMDMsIDI0LCAKLSAgICAxNDMsIDYxLCAyNCwgMTQzLCAyNTQsIDI0MywgMjQsIDE0MywgMTkxLCAyNCwgMTQzLCAyMTEsIDkyLCAyNCwgMTQzLCAyNDUsIAotICAgIDExNywgMjQsIDE0MywgNzUsIDI0LCAxNDMsIDIxMSwgMzYsIDI0LCAxNDMsIDIxMSwgNDcsIDI0LCAxNDMsIDc2LCAyNCwgCi0gICAgMTQzLCAyMTIsIDY1LCAyNCwgMTQzLCAyMTIsIDYyLCAyNCwgMTQzLCAyMjYsIDIzNCwgMjQsIDE0MywgMjEwLCAyNDQsIDI0LCAKLSAgICAxNDMsIDcwLCAyNCwgMTQzLCAyMTIsIDExLCAyNCwgMTQzLCAyMTIsIDIyLCAyNCwgMTQzLCAyMTEsIDI1MCwgMjQsIDE0MywgCi0gICAgMjEwLCAyMTIsIDI0LCAxNDMsIDI0NSwgNTUsIDI0LCAxNDMsIDIxMSwgOCwgMjQsIDE0MywgNzMsIDI0LCAxNDMsIDI1NSwgCi0gICAgMTU3LCAyNCwgMTQzLCAyNTUsIDE1NiwgMjQsIDE0MywgMjExLCAxMDYsIDI0LCAxNDMsIDIxMSwgMTA0LCAyNCwgMTQzLCAKLSAgICAyNDUsIDExNSwgMjQsIDE0MywgMjQ1LCAxMTQsIDI0LCAxNDMsIDI0NSwgMTE2LCAyNCwgMTQzLCAyMTEsIDM1LCAyNCwgCi0gICAgMTQzLCAyMTEsIDM0LCAyNCwgMTQzLCAyMjcsIDg0LCAyNCwgMTQzLCAyMjcsIDg1LCAyNCwgMTQzLCAyMjcsIDc4LCAyNCwgCi0gICAgMTQzLCAyMjcsIDgzLCAyNCwgMTQzLCAyMjcsIDgxLCAyNCwgMTQzLCAyMTAsIDIzOCwgMjQsIDE0MywgMjEwLCAyMzcsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjM2LCAyNCwgMTQzLCAyMTAsIDIzOSwgMjQsIDE0MywgMjEwLCAyNDAsIDI0LCAxNDMsIDIxNSwgMzAsIAotICAgIDI0LCAxNDMsIDIxNSwgMjksIDI0LCAxNDMsIDIxNSwgMjcsIDI0LCAxNDMsIDIxNSwgMjQsIDI0LCAxNDMsIDIxNSwgMjUsIAotICAgIDI0LCAxNDMsIDIxMCwgMjExLCAyNCwgMTQzLCAyMTAsIDIwOCwgMjQsIDE0MywgMjEwLCAyMDksIDI0LCAxNDMsIDIxMCwgCi0gICAgMjAzLCAyNCwgMTQzLCAyMTAsIDIwNCwgMjQsIDE0MywgMjEwLCAyMDUsIDI0LCAxNDMsIDIxMCwgMjA3LCAyNCwgMTQzLCAKLSAgICAyNDUsIDQ5LCAyNCwgMTQzLCAyNDUsIDUxLCAyNCwgMTQzLCAyMTEsIDcsIDI0LCAxNDMsIDI0MCwgMTUzLCAyNCwgMTQzLCAKLSAgICAyNDAsIDE0NSwgMjQsIDE0MywgMjQwLCAxNDgsIDI0LCAxNDMsIDI0MCwgMTQ2LCAyNCwgMTQzLCAyNDAsIDE1MCwgMjQsIAotICAgIDE0MywgMjQwLCAxNTIsIDI0LCAxNDMsIDI1NCwgMzQsIDI0LCAxNDMsIDI1NCwgMzEsIDI0LCAxNDMsIDI1NCwgMjksIDI0LCAKLSAgICAxNDMsIDI1NCwgMzAsIDI0LCAxNDMsIDIxOCwgMjIwLCAyNCwgMTQzLCAyNTUsIDE1OCwgMjQsIDE0MywgMjExLCAxMDUsIAotICAgIDI0LCAxNDMsIDIxMSwgMzMsIDI0LCAxNDMsIDIyNywgODAsIDI0LCAxNDMsIDIyNywgNzksIDI0LCA5MCwgMjM0LCA1OCwgCi0gICAgMjQsIDkwLCAyMTgsIDIxNSwgMjQsIDkwLCAyMzQsIDUxLCAyNCwgOTAsIDIyOCwgMjI2LCAyNCwgOTAsIDIyOCwgMjI0LCAKLSAgICAyNCwgOTAsIDIyOCwgMjIzLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIyMywgMjYsIDI0LCA5MCwgMjIzLCAyMSwgMjQsIAotICAgIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCA2LCAyNCwgOTAsIDIyMywgMSwgMjQsIDkwLCAKLSAgICAyMjMsIDEyLCAyNCwgOTAsIDIyMywgMjQsIDI0LCA5MCwgMjMwLCAyMTcsIDI0LCA5MCwgMjI1LCA5NSwgMjQsIDkwLCAyMjUsIAotICAgIDg0LCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOCwgMjA5LCAyNCwgOTAsIDIzNiwgNTYsIDI0LCA5MCwgMjUwLCA0NiwgCi0gICAgMjQsIDkwLCAyNTAsIDEwNiwgMjQsIDkwLCAyMzQsIDExMCwgMjQsIDkwLCAyMTYsIDE3MywgMjQsIDkwLCAyMjUsIDEzMSwgCi0gICAgMjQsIDkwLCAyNDEsIDE3MiwgMjQsIDkwLCAyMzQsIDUyLCAyNCwgOTAsIDIzNCwgNTAsIDI0LCA5MCwgMjI4LCAyMjIsIDI0LCAKLSAgICA5MCwgMjI4LCAyMTYsIDI0LCA5MCwgMjI4LCAyMTgsIDI0LCA5MCwgMjI4LCAyMjEsIDI0LCA5MCwgMjI4LCAyMTcsIDI0LCAKLSAgICA5MCwgMjE2LCA5OCwgMjQsIDkwLCAyMTYsIDk1LCAyNCwgOTAsIDIyMywgMTksIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAKLSAgICAyMjMsIDAsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgMjIzLCAxNiwgMjQsIDkwLCAyMjMsIAotICAgIDE1LCAyNCwgOTAsIDIyMywgOCwgMjQsIDkwLCAyMjMsIDEwLCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjIzLCAzLCAyNCwgCi0gICAgOTAsIDIyMywgMTMsIDI0LCA5MCwgMjIzLCAyMiwgMjQsIDkwLCAyMjIsIDI1NCwgMjQsIDkwLCAyMzAsIDIxMywgMjQsIDkwLCAKLSAgICAyMzAsIDIwOCwgMjQsIDkwLCAyMzAsIDIxMCwgMjQsIDkwLCAyMzAsIDIwNywgMjQsIDkwLCAyMzAsIDIwNSwgMjQsIDkwLCAKLSAgICAyMzAsIDIxMSwgMjQsIDkwLCAyMzAsIDIxNiwgMjQsIDkwLCAyMzAsIDIxNCwgMjQsIDkwLCAyMzQsIDIyMSwgMjQsIDkwLCAKLSAgICAyMjUsIDg2LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjI1LCA5MiwgMjQsIDkwLCAyMzQsIDIxOSwgMjQsIDkwLCAyMTksIAotICAgIDE0MSwgMjQsIDkwLCAyMTksIDEzMSwgMjQsIDkwLCAyMTksIDEzNCwgMjQsIDkwLCAyMTksIDEzNiwgMjQsIDkwLCAyMjYsIAotICAgIDMyLCAyNCwgOTAsIDIzNiwgNTEsIDI0LCA5MCwgMjM2LCA0NCwgMjQsIDkwLCAyMTgsIDIxNiwgMjQsIDkwLCAyMzYsIDUyLCAKLSAgICAyNCwgOTAsIDIxMSwgMjYsIDI0LCA5MCwgMjExLCAyMiwgMjQsIDkwLCAyMTEsIDIzLCAyNCwgOTAsIDIyNSwgMTI5LCAyNCwgCi0gICAgOTAsIDIzNCwgMjIwLCAyNCwgOTAsIDI0MSwgMTcwLCAyNCwgOTAsIDI0MSwgMTY4LCAyNCwgOTAsIDI0MSwgMTcxLCAyNCwgCi0gICAgOTAsIDI0MSwgMTY5LCAyNCwgOTAsIDIxMSwgMzIsIDI0LCA5MCwgMjM0LCA1NCwgMjQsIDkwLCAyMzQsIDUzLCAyNCwgOTAsIAotICAgIDIzNCwgNTcsIDI0LCA5MCwgMjM0LCA1NSwgMjQsIDkwLCAyMzQsIDU2LCAyNCwgOTAsIDIxOCwgMjEzLCAyOSwgMywgMTYyLCAKLSAgICAyOSwgMywgMjQwLCAyMjIsIDI5LCAzLCAyNDEsIDE4MCwgMjksIDMsIDI0MiwgNDYsIDI5LCAzLCAyNDEsIDIyMCwgMjksIDMsIAotICAgIDI0MSwgMjM4LCAyOSwgMywgMjQxLCA2OCwgMjksIDMsIDI0MSwgNjcsIDI5LCAzLCAyMzMsIDEzNSwgMjksIDMsIDIzMiwgCi0gICAgOTgsIDI5LCAzLCAyMzIsIDI0MSwgMjksIDMsIDIzMywgMTM0LCAyOSwgMywgMjMzLCA1MCwgMjksIDMsIDIzMywgNTgsIDI5LCAKLSAgICAzLCAyMzIsIDE1NiwgMjksIDMsIDIzMiwgNzAsIDI5LCAzLCAyNDEsIDE4OSwgMjksIDMsIDI0MSwgMTgzLCAyOSwgMywgCi0gICAgMjQxLCAxODUsIDI5LCAzLCAyNDEsIDE4OCwgMjksIDMsIDI0MSwgMTg2LCAyOSwgMywgMjQxLCAxODcsIDI5LCAzLCAyNDEsIAotICAgIDE4NCwgMjksIDMsIDI0MSwgMTgyLCAyOSwgMywgMTg0LCAyOSwgMywgMjMwLCAxMDIsIDI5LCAzLCAyMzAsIDIzMCwgMjksIAotICAgIDMsIDIzMSwgMjM3LCAyOSwgMywgMjMxLCA4MCwgMjksIDMsIDIzMSwgOTEsIDI5LCAzLCAyMzAsIDE2MSwgMjksIDMsIDIzMCwgCi0gICAgNDIsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjE3LCAxNTksIDI5LCAzLCAyMTcsIDE2MiwgCi0gICAgMjksIDMsIDIxNywgMTYwLCAyOSwgMywgMjE3LCAxNjEsIDI5LCAzLCAyMTcsIDE1OCwgMjksIDMsIDIxNywgMTU2LCAyOSwgCi0gICAgMywgMjA1LCAyOSwgMywgMjIyLCAxNDAsIDI5LCAzLCAyMjMsIDM1LCAyOSwgMywgMjIzLCAxODQsIDI5LCAzLCAyMjMsIAotICAgIDEwOCwgMjksIDMsIDIyMywgMTI4LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMjIsIDEwOSwgMjksIDMsIDIwNiwgMjksIAotICAgIDMsIDIxOCwgODMsIDI5LCAzLCAyMTksIDE5MSwgMjksIDMsIDIyMiwgMzEsIDI5LCAzLCAyMjEsIDE3MCwgMjksIDMsIDIyMSwgCi0gICAgMTgxLCAyOSwgMywgMjE5LCA1OCwgMjksIDMsIDIxNywgMjUzLCAyOSwgMywgMjIwLCAxMDIsIDI5LCAzLCAyMTksIDIyNSwgCi0gICAgMjksIDMsIDIyMCwgMzIsIDI5LCAzLCAyMjAsIDk4LCAyOSwgMywgMjIwLCA2MSwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAKLSAgICAyMjAsIDcsIDI5LCAzLCAyMTksIDIwOCwgMjksIDMsIDIyNCwgODgsIDI5LCAzLCAyMjQsIDMwLCAyOSwgMywgMjI0LCA1MywgCi0gICAgMjksIDMsIDIyNCwgODcsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2OSwgMjksIDMsIDIyNCwgNDIsIDI5LCAzLCAKLSAgICAyMjQsIDQxLCAyOSwgMywgMjIzLCAyNDIsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjQxLCAyOSwgMywgMjIzLCAKLSAgICAyMzksIDI5LCAzLCAyMjMsIDI0MCwgMjksIDMsIDIyNCwgNjUsIDI5LCAzLCAyMjQsIDU5LCAyOSwgMywgMjI0LCA2MSwgMjksIAotICAgIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDYyLCAyOSwgMywgMjI0LCA2MywgMjksIDMsIDIyNCwgNjAsIDI5LCAzLCAyMjQsIAotICAgIDU4LCAyOSwgMywgMjI0LCA1NCwgMjksIDMsIDIyNCwgNTcsIDI5LCAzLCAyMjQsIDU1LCAyOSwgMywgMjI0LCA1NiwgMjksIAotICAgIDMsIDI1MiwgMTkxLCAyOSwgMywgMjUxLCAxMjUsIDI5LCAzLCAyNTIsIDYsIDI5LCAzLCAyNTIsIDE4OSwgMjksIDMsIDI1MiwgCi0gICAgNjYsIDI5LCAzLCAyNTIsIDc1LCAyOSwgMywgMjUxLCAyMDUsIDI5LCAzLCAyNTEsIDgzLCAyOSwgMywgMjE0LCAyNywgMjksIAotICAgIDMsIDIxMiwgMTE2LCAyOSwgMywgMjEzLCAxNzYsIDI5LCAzLCAyMTQsIDI2LCAyOSwgMywgMjEzLCAyNTAsIDI5LCAzLCAKLSAgICAyMTMsIDI1NSwgMjksIDMsIDIxMywgMTM4LCAyOSwgMywgMjEyLCAxMDcsIDI5LCAzLCAyMTcsIDEwNSwgMjksIDMsIDIxNSwgCi0gICAgMTE4LCAyOSwgMywgMjE2LCAxMTcsIDI5LCAzLCAyMTcsIDEwMSwgMjksIDMsIDIxNywgMTEsIDI5LCAzLCAyMTcsIDIyLCAKLSAgICAyOSwgMywgMTExLCAyOSwgMywgMjE1LCA4MCwgMjksIDMsIDI1MSwgMzMsIDI5LCAzLCAyNDksIDExMiwgMjksIDMsIDI1MCwgCi0gICAgNTEsIDI5LCAzLCAyNTEsIDMyLCAyOSwgMywgMjUwLCAxODIsIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI0OSwgMjM4LCAKLSAgICAyOSwgMywgMjQ5LCA4MSwgMjksIDMsIDIxMSwgMTY1LCAyOSwgMywgMjExLCAxNDEsIDI5LCAzLCAyMTEsIDE1NywgMjksIDMsIAotICAgIDIxMSwgMTY0LCAyOSwgMywgMjExLCAxNjEsIDI5LCAzLCAyMTEsIDE2MiwgMjksIDMsIDIxMSwgMTQ4LCAyOSwgMywgMjExLCAKLSAgICAxNDcsIDI5LCAzLCAyMTEsIDEzNiwgMjksIDMsIDIxMSwgMTMyLCAyOSwgMywgMjExLCAxMzUsIDI5LCAzLCAyMTEsIDEzMywgCi0gICAgMjksIDMsIDIxMSwgMTM0LCAyOSwgMywgMTk3LCAyOSwgMywgMjI3LCAyMzcsIDI5LCAzLCAyMjgsIDIzMywgMjksIDMsIAotICAgIDIyOSwgMjI1LCAyOSwgMywgMjI5LCAxMDMsIDI5LCAzLCAyMjksIDEwNywgMjksIDMsIDIyOCwgNzQsIDI5LCAzLCAyMjcsIAotICAgIDE3NCwgMjksIDMsIDIyNywgMTY1LCAyOSwgMywgMjI3LCAxMjgsIDI5LCAzLCAyMjcsIDE0OCwgMjksIDMsIDIyNywgMTY0LCAKLSAgICAyOSwgMywgMjI3LCAxNTUsIDI5LCAzLCAyMjcsIDE1NiwgMjksIDMsIDIyNywgMTM0LCAyOSwgMywgMjI3LCAxMTksIDI5LCAKLSAgICAzLCAyNDIsIDE4MCwgNjEsIDI5LCAzLCAyNDIsIDE4MCwgNzAsIDI5LCAzLCAyNDIsIDE4MCwgNzMsIDI5LCAzLCAyNDIsIAotICAgIDE4MCwgMjU1LCA3MywgMjksIDMsIDI0MiwgMTgwLCAyNDUsIDIwOSwgMjksIDMsIDI0MiwgMTgwLCA3NSwgMjksIDMsIDI0MiwgCi0gICAgMTgwLCA3NiwgMjksIDMsIDI0MiwgMTgwLCAyMTIsIDY1LCAyOSwgMywgMTc2LCAyOSwgMywgMjMzLCAyMTcsIDI5LCAzLCAKLSAgICAyMzQsIDkyLCAyOSwgMywgMjM1LCAxMCwgMjksIDMsIDIzNCwgMTgxLCAyOSwgMywgMjM0LCAxODIsIDI5LCAzLCAyMzQsIAotICAgIDI4LCAyOSwgMywgMjM0LCAyNywgMjksIDMsIDIzMywgMTgyLCAyOSwgMywgMjMzLCAxNzYsIDI5LCAzLCAyMzMsIDE4MSwgCi0gICAgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzgsIDI5LCAzLCAyMzMsIDE3MSwgMjksIDMsIDIzMywgMTY1LCAyOSwgCi0gICAgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE3MCwgMjksIDMsIDIzMywgMTY4LCAyOSwgMywgMjMzLCAxNjksIDI5LCAzLCAKLSAgICAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjAsIDI5LCAzLCAyMzMsIDE2MywgMjksIDMsIDIzMywgCi0gICAgMTYxLCAyOSwgMywgMjMzLCAxNjIsIDI5LCAzLCAyMTIsIDY1LCAyOSwgMywgMjExLCAxOTUsIDI5LCAzLCAyMTEsIDI1MCwgCi0gICAgMjksIDMsIDIxMiwgNjQsIDI5LCAzLCAyMTIsIDE3LCAyOSwgMywgMjEyLCAyMiwgMjksIDMsIDIxMSwgMjI3LCAyOSwgMywgCi0gICAgMjExLCAyMjYsIDI5LCAzLCAyMjUsIDEzOSwgNjEsIDI5LCAzLCAyMjUsIDEzOSwgNzAsIDI5LCAzLCAyMjUsIDEzOSwgNzMsIAotICAgIDI5LCAzLCAyMjUsIDEzOSwgMjU1LCA3MywgMjksIDMsIDIyNSwgMTM5LCAyNDUsIDIwOSwgMjksIDMsIDIyNSwgMTM5LCA3NSwgCi0gICAgMjksIDMsIDIyNSwgMTM5LCA3NiwgMjksIDMsIDIxMCwgMTE2LCAyOSwgMywgMjEwLCAxMywgMjksIDMsIDIxMCwgNDQsIDI5LCAKLSAgICAzLCAyMTAsIDExNSwgMjksIDMsIDIxMCwgOTIsIDI5LCAzLCAyMTAsIDk0LCAyOSwgMywgMjEwLCAyMywgMjksIDMsIDIxMCwgCi0gICAgMCwgMjksIDMsIDIxMCwgODIsIDI5LCAzLCAyMTAsIDYyLCAyOSwgMywgMjEwLCA2OSwgMjksIDMsIDIxMCwgODEsIDI5LCAzLCAKLSAgICAyMTAsIDczLCAyOSwgMywgMjEwLCA3NCwgMjksIDMsIDIxMCwgNjcsIDI5LCAzLCAyMTAsIDUzLCAyOSwgMywgMTkxLCAyOSwgCi0gICAgMywgMjEwLCAyMTIsIDI5LCAzLCAyMTEsIDgsIDI5LCAzLCAyMTEsIDEwMywgMjksIDMsIDIxMSwgNDQsIDI5LCAzLCAyMTEsIAotICAgIDQ3LCAyOSwgMywgMjEwLCAyNDQsIDI5LCAzLCAyMTAsIDIzNSwgMjksIDMsIDI0OCwgMjIxLCAyOSwgMywgMjQ2LCA3OCwgCi0gICAgMjksIDMsIDI0OCwgMywgMjksIDMsIDI0OCwgMjIwLCAyOSwgMywgMjQ4LCA3NywgMjksIDMsIDI0OCwgOTAsIDI5LCAzLCAKLSAgICAyNDcsIDE0NSwgMjksIDMsIDI0NiwgNDcsIDI5LCAzLCAyNDgsIDEzNSwgMjksIDMsIDI0OCwgMTAwLCAyOSwgMywgMjQ4LCAKLSAgICAxMTIsIDI5LCAzLCAyNDgsIDEzNCwgMjksIDMsIDI0OCwgMTIyLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEwNSwgCi0gICAgMjksIDMsIDI0OCwgOTEsIDI5LCAzLCAyMzUsIDE0MSwgMjksIDMsIDIzNSwgNTEsIDI5LCAzLCAyMzUsIDEwOCwgMjksIDMsIAotICAgIDIzNSwgMTQwLCAyOSwgMywgMjM1LCAxMjQsIDI5LCAzLCAyMzUsIDEyNiwgMjksIDMsIDIzNSwgNjgsIDI5LCAzLCAyMzUsIAotICAgIDMxLCAyOSwgMywgMjQzLCAxMzUsIDI5LCAzLCAyNDIsIDExMywgMjksIDMsIDI0MiwgMjE0LCAyOSwgMywgMjQzLCAxMzIsIAotICAgIDI5LCAzLCAyNDMsIDU1LCAyOSwgMywgMjQzLCA2MiwgMjksIDMsIDI0MiwgMTc0LCAyOSwgMywgMjQyLCAxNzMsIDI5LCAzLCAKLSAgICAyNDIsIDc4LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzcsIDI5LCAzLCAyNDIsIDc1LCAyOSwgMywgMjQyLCA3NiwgCi0gICAgMjksIDMsIDI0MywgMjksIDI5LCAzLCAyNDMsIDksIDI5LCAzLCAyNDMsIDE5LCAyOSwgMywgMjQzLCAyOCwgMjksIDMsIAotICAgIDI0MywgMjMsIDI5LCAzLCAyNDMsIDI0LCAyOSwgMywgMjQzLCAxMywgMjksIDMsIDI0MiwgMjU0LCAyOSwgMywgMjE2LCAKLSAgICAyMDgsIDI5LCAzLCAyMTYsIDEzNiwgMjksIDMsIDIxNiwgMTc1LCAyOSwgMywgMjE2LCAyMDcsIDI5LCAzLCAyMTYsIDE5NCwgCi0gICAgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyMTYsIDEyOCwgMjksIDMsIDI1MCwgMTU3LCAyOSwgCi0gICAgMywgMjUwLCA2OSwgMjksIDMsIDI1MCwgMTEwLCAyOSwgMywgMjUwLCAxNTYsIDI5LCAzLCAyNTAsIDEyOCwgMjksIDMsIAotICAgIDI1MCwgMTMxLCAyOSwgMywgMjUwLCA4NiwgMjksIDMsIDI1MCwgNTgsIDI5LCAzLCAyMjUsIDE0NywgMjksIDMsIDIyNSwgCi0gICAgMTE0LCAyOSwgMywgMjI1LCAxMzMsIDI5LCAzLCAyMjUsIDE0NiwgMjksIDMsIDIyNSwgMTM1LCAyOSwgMywgMjI1LCAxMzYsIAotICAgIDI5LCAzLCAyMjUsIDEyMSwgMjksIDMsIDIyNSwgMTEwLCAyOSwgMywgMjE1LCAxODMsIDI5LCAzLCAyMTUsIDE2MywgMjksIAotICAgIDMsIDIxNSwgMTY3LCAyOSwgMywgMjE1LCAxODIsIDI5LCAzLCAyMTUsIDE3NywgMjksIDMsIDIxNSwgMTc4LCAyOSwgMywgCi0gICAgMjE1LCAxNjYsIDI5LCAzLCAyMTUsIDE2MSwgMjksIDMsIDIxNSwgMzksIDI5LCAzLCAyMTUsIDMxLCAyOSwgMywgMjE1LCAKLSAgICAzNSwgMjksIDMsIDIxNSwgMzgsIDI5LCAzLCAyMTUsIDM2LCAyOSwgMywgMjE1LCAzNywgMjksIDMsIDIxNSwgMzMsIDI5LCAKLSAgICAzLCAyMTUsIDMyLCAyOSwgMywgMjQ0LCAxOTYsIDI5LCAzLCAyNDMsIDIzNCwgMjksIDMsIDI0NCwgMTIxLCAyOSwgMywgCi0gICAgMjQ0LCAxOTUsIDI5LCAzLCAyNDQsIDE0NywgMjksIDMsIDI0NCwgMTU0LCAyOSwgMywgMjQ0LCA0MywgMjksIDMsIDI0MywgCi0gICAgMjEzLCAyOSwgMywgMTkwLCAyOSwgMywgMjI0LCAxNTAsIDI5LCAzLCAyMjUsIDEwOCwgMjksIDMsIDIyNiwgODksIDI5LCAzLCAKLSAgICAyMjUsIDIxMSwgMjksIDMsIDIyNSwgMjIxLCAyOSwgMywgMjI1LCAxNiwgMjksIDMsIDIyNCwgMTE0LCAyOSwgMywgMjIyLCAKLSAgICA5OSwgMjksIDMsIDIzMCwgMzEsIDI5LCAzLCAyNDMsIDIwNywgMjksIDM4LCAyNDMsIDUzLCAyMiwgMjUsIDIzMywgMjMsIAotICAgIDc4LCAyOSwgMzgsIDI1LCAyMzMsIDIzLCA3OCwgMjksIDM4LCAyNDMsIDUzLCA3OCwgMjksIDIyMSwgMTczLCA3OCwgMjksIAotICAgIDIxMSwgMjA4LCAyOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyOSwgMjQ5LCAyMTksIDI5LCAyMjAsIDE1MCwgMjksIDI0OSwgCi0gICAgMjI2LCAyOSwgMjI0LCAxOTksIDI0OSwgMjI2LCAyOSwgMjI0LCAxMywgNzgsIDI5LCAyMjYsIDE1LCAyMjAsIDEzNywgMjksIAotICAgIDIxLCAxMTAsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAxNjEsIDI5LCAyMSwgMTg5LCAyOSwgMjEsIDE5NCwgCi0gICAgMjksIDIxLCAxOTgsIDI5LCAyMSwgMTk1LCAyOSwgMjEsIDIwMCwgMjksIDU0LCAyMTYsIDI0NywgMjksIDU0LCAyMTUsIDczLCAKLSAgICAyOSwgNTQsIDIxNiwgMTYyLCAyOSwgNTQsIDI0NCwgMTUsIDI5LCA1NCwgMjQ0LCAxMTQsIDI5LCA1NCwgMjE5LCAxMTEsIAotICAgIDI5LCA1NCwgMjIwLCAxMTYsIDI5LCA1NCwgMjQ1LCAxODQsIDI5LCA1NCwgMjI4LCAxOTUsIDI5LCA1NCwgMjQwLCAyMTAsIAotICAgIDI5LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyOSwgMywgMjIxLCAxNzcsIDIzMCwgNDIsIDI5LCAzLCAyMzAsIDM4LCAyOSwgCi0gICAgMywgMjMwLCAzOSwgMjksIDMsIDIzMCwgNDAsIDI5LCAzLCAyMjEsIDE3NywgMjUxLCA4MywgMjksIDMsIDI1MSwgODAsIDI5LCAKLSAgICAzLCAyNTEsIDgxLCAyOSwgMywgMjUxLCA4MiwgMjksIDMsIDIyMSwgMTc3LCAyNDMsIDIxMywgMjksIDMsIDI0MywgMjA5LCAKLSAgICAyOSwgMywgMjQzLCAyMTAsIDI5LCAzLCAyNDMsIDIxMSwgMjksIDMsIDIyMSwgMTc3LCAyMjQsIDExNCwgMjksIDMsIDIyNCwgCi0gICAgMTEwLCAyOSwgMywgMjI0LCAxMTEsIDI5LCAzLCAyMjQsIDExMiwgMjksIDIxNiwgMzEsIDE2NCwgMjEwLCAyNDcsIDI5LCAKLSAgICAyMTYsIDMxLCAxNjQsIDI0OCwgNDEsIDI5LCAyMTYsIDMxLCAxNjQsIDIyMiwgMjM4LCAyOSwgMjE2LCAzMSwgMTY0LCAyMTksIAotICAgIDI1MSwgMjIyLCAyMzgsIDI5LCAyMTYsIDMxLCAxNjQsIDI0NywgMjM1LCAyOSwgMjE2LCAzMSwgMTY0LCAyMzQsIDE2NCwgCi0gICAgMjksIDIxNiwgMzEsIDE2NCwgMjUwLCA5NCwgMjksIDIxNiwgMzEsIDE2NCwgMjQxLCAxNzcsIDI5LCAyMTYsIDMxLCAxNjQsIAotICAgIDI0OCwgNDAsIDI5LCAyMTYsIDMxLCAxNjQsIDIzMywgMTk0LCAxNjksIDEsIDYxLCAxNjksIDEsIDc1LCAxNjksIDEsIDczLCAKLSAgICAxNjksIDEsIDc2LCAxNjksIDEsIDcwLCAxNjksIDEsIDIxNCwgMTA1LCAxNjksIDEsIDI0MywgMTM1LCAxNjksIDEsIDE3NiwgCi0gICAgMTY5LCAxLCAyNDMsIDYyLCAxNjksIDEsIDI0MiwgMjE0LCAxNjksIDEsIDI0MiwgMTc0LCAxNjksIDEsIDI0MiwgMTEzLCAKLSAgICAxNjksIDEsIDI0MiwgNzksIDE2OSwgMSwgMTYyLCAxNjksIDEsIDI0MSwgMjM4LCAxNjksIDEsIDI0MSwgMTgwLCAxNjksIDEsIAotICAgIDI0MSwgNjgsIDE2OSwgMSwgMjQwLCAyMjIsIDE2OSwgMSwgMjQwLCAyMDEsIDE2OSwgMSwgMjMzLCAxMzUsIDE2OSwgMSwgCi0gICAgMjMzLCA1OCwgMTY5LCAxLCAyMzIsIDI0MSwgMTY5LCAxLCAyMzIsIDE1NiwgMTY5LCAxLCAyMzIsIDk4LCAxNjksIDEsIAotICAgIDIzMiwgNzEsIDE2OSwgMSwgMTg0LCAxNjksIDEsIDIzMSwgOTEsIDE2OSwgMSwgMjMwLCAyMzAsIDE2OSwgMSwgMjMwLCAKLSAgICAxNjEsIDE2OSwgMSwgMjMwLCAxMDIsIDE2OSwgMSwgMTk3LCAxNjksIDEsIDI0MSwgOTAsIDE2OSwgMSwgMjI5LCAyMTMsIAotICAgIDE2OSwgMSwgMjI5LCAxMDcsIDE2OSwgMSwgMjI4LCAyMzMsIDE2OSwgMSwgMjI4LCA3NCwgMTY5LCAxLCAyMjcsIDIzNywgCi0gICAgMTY5LCAxLCAyMjcsIDE3NiwgMTY5LCAxLCAyMjQsIDI5LCAxNjksIDEsIDIyNCwgMTYsIDE2OSwgMSwgMjI0LCA5LCAxNjksIAotICAgIDEsIDIyNCwgMSwgMTY5LCAxLCAyMjMsIDI0NiwgMTY5LCAxLCAyMjMsIDI0NCwgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCAKLSAgICA5MSwgMTY5LCAxLCAyMjEsIDE4MSwgMTY5LCAxLCAyMTksIDE5MSwgMTY5LCAxLCAyMTksIDU4LCAxNjksIDEsIDIxOCwgODMsIAotICAgIDE2OSwgMSwgMjE4LCAyLCAxNjksIDEsIDI0OCwgMjIxLCAxNjksIDEsIDIxNywgMTA1LCAxNjksIDEsIDI0OCwgOTAsIDE2OSwgCi0gICAgMSwgMjE3LCAyMiwgMTY5LCAxLCAyNDgsIDMsIDE2OSwgMSwgMjE2LCAxMTcsIDE2OSwgMSwgMjQ3LCAxNDUsIDE2OSwgMSwgCi0gICAgMjQ2LCA3OCwgMTY5LCAxLCAyNDYsIDUwLCAxNjksIDEsIDI0NywgMTU2LCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCAKLSAgICA1OCwgMTY5LCAxLCAyMTYsIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTYsIDQ0LCAKLSAgICAxNjksIDEsIDIxNSwgMTgzLCAxNjksIDEsIDIxNSwgMTc4LCAxNjksIDEsIDIxNSwgMTY3LCAxNjksIDEsIDIxNSwgMTY2LCAKLSAgICAxNjksIDEsIDIxNSwgMTYzLCAxNjksIDEsIDIxNSwgMTYyLCAxNjksIDEsIDIxMiwgNjUsIDE2OSwgMSwgMjEyLCAyMiwgCi0gICAgMTY5LCAxLCAyMTEsIDI1MCwgMTY5LCAxLCAyMTEsIDIyNywgMTY5LCAxLCAyMTEsIDE5NSwgMTY5LCAxLCAyMTEsIDE4MywgCi0gICAgMTY5LCAxLCAxOTEsIDE2OSwgMSwgMjExLCA0NywgMTY5LCAxLCAyMTEsIDgsIDE2OSwgMSwgMjEwLCAyNDQsIDE2OSwgMSwgCi0gICAgMjEwLCAyMTIsIDE2OSwgMSwgMjEwLCAxNzcsIDE4LCAxOSwgMjQwLCAxNjgsIDE4LCAxOSwgNzUsIDE4LCAxOSwgMjU1LCAKLSAgICAzNywgMTgsIDE5LCA3MywgMTgsIDE5LCAyMzYsIDMzLCAxOCwgMTksIDc2LCAxOCwgMTksIDIyNiwgMTgzLCAxOCwgMTksIAotICAgIDIxMSwgMTE2LCAyMjYsIDE4MywgMTgsIDE5LCA3MiwgMjQ1LCAyMDksIDE4LCAxOSwgNzIsIDczLCAxOCwgMTksIDYxLCAxOCwgCi0gICAgMTksIDI1NSwgNzMsIDE4LCAxOSwgMjEyLCAyMiwgMTgsIDE5LCAxNTksIDIxMiwgMjIsIDE4LCAxOSwgMjExLCAyNTAsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTEsIDI1MCwgMTgsIDE5LCAyMTEsIDI0MiwgMTgsIDE5LCAxNTksIDIxMSwgMjQyLCAxOCwgMTksIDIxMSwgCi0gICAgMjI3LCAxOCwgMTksIDE1OSwgMjExLCAyMjcsIDE4LCAxOSwgMjExLCAyMTUsIDE4LCAxOSwgMTU5LCAyMTEsIDIxNSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjExLCAyMTUsIDE4LCAxOSwgMjEyLCA2NSwgMTgsIDE5LCAxNTksIDIxMiwgNjUsIDE4LCAxOSwgCi0gICAgMjEyLCA2NCwgMTgsIDE5LCAxNTksIDIxMiwgNjQsIDE4LCAxOSwgMjI5LCAxOTAsIDIxMiwgNjQsIDE4LCAxOSwgMjU0LCAKLSAgICAyMDEsIDE4LCAxOSwgMjExLCAxMTYsIDIxMiwgOTgsIDE4LCAxOSwgMjQyLCAxODAsIDIxOCwgMTI5LCAxOCwgMTksIDQwLCAKLSAgICAxNDIsIDE4LCAxOSwgNDAsIDI0MiwgMTM2LCAxOCwgMTksIDQwLCAyNTEsIDE3NSwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCAKLSAgICA0MCwgMjE2LCAxNCwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgNDQsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIAotICAgIDIyMiwgMjMzLCAxOCwgMTksIDQwLCA1MiwgMTQyLCAxOCwgMTksIDQwLCA1MiwgMjE5LCAyNTEsIDY3LCAyMTgsIDkwLCAxOCwgCi0gICAgMTksIDQwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDE4LCAxOSwgNDAsIDIxOSwgMjUxLCAyMDMsIDkxLCAxOCwgMTksIDQwLCAKLSAgICAyMjUsIDIyLCAxOCwgMTksIDQwLCAxMjQsIDIxNywgODcsIDE4LCAxOSwgMjQ1LCAxNTAsIDE4LCAxOSwgMjM1LCAyNTUsIAotICAgIDE4LCAxOSwgMjI2LCAxOTYsIDE4LCAxOSwgMjU0LCAxMjMsIDE4LCAxOSwgMjI1LCAyMjEsIDE4LCAxOSwgMjI2LCA4NywgCi0gICAgMTgsIDE5LCAyMjUsIDEwOCwgMTgsIDE5LCAyMjUsIDcxLCAxOCwgMTksIDIyNSwgMTYsIDE4LCAxOSwgMjI0LCAyNDksIDE4LCAKLSAgICAxOSwgMjExLCAxMTYsIDIyNCwgMjQ5LCAxOCwgMTksIDcyLCAyNDEsIDIyMCwgMTgsIDE5LCA3MiwgMjQxLCAxODAsIDE4LCAKLSAgICAxOSwgMTkwLCAxOCwgMTksIDIyNiwgODksIDE4LCAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIAotICAgIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAKLSAgICAxMDksIDE4LCAxOSwgMjI0LCAxMDcsIDE4LCAxOSwgMTU5LCAyMjQsIDEwNywgMTgsIDE5LCAyMjQsIDEwNiwgMTgsIDE5LCAKLSAgICAxNTksIDIyNCwgMTA2LCAxOCwgMTksIDIyNCwgMTE0LCAxOCwgMTksIDE1OSwgMjI0LCAxMTQsIDE4LCAxOSwgMjI0LCAxMTMsIAotICAgIDE4LCAxOSwgMTU5LCAyMjQsIDExMywgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAxMTMsIDE4LCAxOSwgMjI2LCAxMDUsIDE4LCAKLSAgICAxOSwgMTU5LCAyMjYsIDEwNSwgMTgsIDE5LCA3MiwgMjQyLCA2MCwgMTgsIDE5LCAyMTcsIDIyLCAxOCwgMTksIDIxNywgOTksIAotICAgIDE4LCAxOSwgMjE2LCAxMTcsIDE4LCAxOSwgMjE2LCAxMDMsIDE4LCAxOSwgMTExLCAxOCwgMTksIDIxNiwgMTcsIDE4LCAxOSwgCi0gICAgMjExLCAxMTYsIDIxNiwgMTcsIDE4LCAxOSwgNzIsIDI0OCwgNzcsIDE4LCAxOSwgNzIsIDI0OCwgMywgMTgsIDE5LCAyMTcsIAotICAgIDEwNSwgMTgsIDE5LCAyMTcsIDEwMSwgMTgsIDE5LCAyMTUsIDc4LCAxOCwgMTksIDE1OSwgMjE1LCA3OCwgMTgsIDE5LCAKLSAgICAyMTUsIDYyLCAxOCwgMTksIDE1OSwgMjE1LCA2MiwgMTgsIDE5LCAyMTUsIDYxLCAxOCwgMTksIDE1OSwgMjE1LCA2MSwgMTgsIAotICAgIDE5LCAxMDUsIDE4LCAxOSwgMTU5LCAxMDUsIDE4LCAxOSwgMjE1LCA1NCwgMTgsIDE5LCAxNTksIDIxNSwgNTQsIDE4LCAxOSwgCi0gICAgMjE1LCA4MCwgMTgsIDE5LCAxNTksIDIxNSwgODAsIDE4LCAxOSwgMjE1LCA3OSwgMTgsIDE5LCAxNTksIDIxNSwgNzksIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxNSwgNzksIDE4LCAxOSwgMjE3LCAxNTIsIDE4LCAxOSwgMjE1LCAxNTEsIDE4LCAxOSwgMjE1LCAKLSAgICAxMzUsIDE4LCAxOSwgMjE1LCAxMzMsIDE4LCAxOSwgMjE1LCAxNTYsIDE4LCAxOSwgMjM0LCAxODIsIDE4LCAxOSwgMjM1LCAKLSAgICA3LCAxOCwgMTksIDIzNCwgOTIsIDE4LCAxOSwgMjM0LCA4MywgMTgsIDE5LCAyMzQsIDI4LCAxOCwgMTksIDIzNCwgMTAsIAotICAgIDE4LCAxOSwgMjExLCAxMTYsIDIzNCwgMTAsIDE4LCAxOSwgMTc2LCAxOCwgMTksIDIzNSwgMTAsIDE4LCAxOSwgMjMzLCAKLSAgICAxNzgsIDE4LCAxOSwgMTU5LCAyMzMsIDE3OCwgMTgsIDE5LCAyMzMsIDE3NiwgMTgsIDE5LCAxNTksIDIzMywgMTc2LCAxOCwgCi0gICAgMTksIDIzMywgMTc1LCAxOCwgMTksIDE1OSwgMjMzLCAxNzUsIDE4LCAxOSwgMjMzLCAxNzQsIDE4LCAxOSwgMTU5LCAyMzMsIAotICAgIDE3NCwgMTgsIDE5LCAyMzMsIDE3MywgMTgsIDE5LCAxNTksIDIzMywgMTczLCAxOCwgMTksIDIzMywgMTgyLCAxOCwgMTksIAotICAgIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MSwgMTgsIDE5LCAyMjksIDE5MCwgCi0gICAgMjMzLCAxODEsIDE4LCAxOSwgMjM1LCAyMywgMTgsIDE5LCAyMzMsIDE4MywgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDE3NiwgCi0gICAgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDg0LCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgMjMsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAKLSAgICAyNDgsIDE4LCAxOSwgMjUwLCAxOTAsIDE4LCAxOSwgMjUxLCAzMSwgMTgsIDE5LCAyNTAsIDUxLCAxOCwgMTksIDI1MCwgNDEsIAotICAgIDE4LCAxOSwgMjQ5LCAyMzgsIDE4LCAxOSwgMjQ5LCAxNzQsIDE4LCAxOSwgMjExLCAxMTYsIDI0OSwgMTc0LCAxOCwgMTksIAotICAgIDI1MSwgMzMsIDE4LCAxOSwgMjUxLCAzMiwgMTgsIDE5LCAyNDksIDc5LCAxOCwgMTksIDE1OSwgMjQ5LCA3OSwgMTgsIDE5LCAKLSAgICAyNDksIDc3LCAxOCwgMTksIDE1OSwgMjQ5LCA3NywgMTgsIDE5LCAyNDksIDc2LCAxOCwgMTksIDE1OSwgMjQ5LCA3NiwgMTgsIAotICAgIDE5LCAyNDksIDc1LCAxOCwgMTksIDE1OSwgMjQ5LCA3NSwgMTgsIDE5LCAyNDksIDc0LCAxOCwgMTksIDE1OSwgMjQ5LCA3NCwgCi0gICAgMTgsIDE5LCAyNDksIDgxLCAxOCwgMTksIDE1OSwgMjQ5LCA4MSwgMTgsIDE5LCAyNDksIDgwLCAxOCwgMTksIDE1OSwgMjQ5LCAKLSAgICA4MCwgMTgsIDE5LCAyMjksIDE5MCwgMjQ5LCA4MCwgMTgsIDE5LCAyNTEsIDY2LCAxOCwgMTksIDIyMSwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyMzEsIDkxLCAxOCwgMTksIDIzMSwgMjM2LCAxOCwgMTksIDIzMCwgMjMwLCAxOCwgMTksIDIzMCwgCi0gICAgMjAxLCAxOCwgMTksIDIzMCwgMTYxLCAxOCwgMTksIDIzMCwgMTMyLCAxOCwgMTksIDIxMSwgMTE2LCAyMzAsIDEzMiwgMTgsIAotICAgIDE5LCAxODQsIDE4LCAxOSwgMjMxLCAyMzcsIDE4LCAxOSwgMjMwLCA0MCwgMTgsIDE5LCAxNTksIDIzMCwgNDAsIDE4LCAxOSwgCi0gICAgMjMwLCAzOCwgMTgsIDE5LCAxNTksIDIzMCwgMzgsIDE4LCAxOSwgMjMwLCAzNywgMTgsIDE5LCAxNTksIDIzMCwgMzcsIDE4LCAKLSAgICAxOSwgMjMwLCAzNiwgMTgsIDE5LCAxNTksIDIzMCwgMzYsIDE4LCAxOSwgMjMwLCAzNSwgMTgsIDE5LCAxNTksIDIzMCwgMzUsIAotICAgIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAxNTksIDIzMCwgNDIsIDE4LCAxOSwgMjMwLCA0MSwgMTgsIDE5LCAxNTksIDIzMCwgCi0gICAgNDEsIDE4LCAxOSwgMjI5LCAxOTAsIDIzMCwgNDEsIDE4LCAxOSwgMTkzLCAxOCwgMTksIDE1OSwgMTkzLCAxOCwgMTksIAotICAgIDIzMCwgMjM0LCAxOCwgMTksIDI1MywgMjA1LCAxOTMsIDE4LCAxOSwgMjIxLCAyMDksIDE5MywgMTgsIDE5LCAyMjksIDEwNywgCi0gICAgMTgsIDE5LCAyMjksIDIyNCwgMTgsIDE5LCAyMjgsIDIzMywgMTgsIDE5LCAyMjgsIDIwOCwgMTgsIDE5LCAyMjgsIDc0LCAKLSAgICAxOCwgMTksIDIyOCwgNjQsIDE4LCAxOSwgMjExLCAxMTYsIDIyOCwgNjQsIDE4LCAxOSwgMTk3LCAxOCwgMTksIDIyOSwgCi0gICAgMjI1LCAxOCwgMTksIDIyNywgMTcyLCAxOCwgMTksIDE1OSwgMjI3LCAxNzIsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgCi0gICAgMTU5LCAyMjcsIDE3NCwgMTgsIDE5LCAyMjcsIDE3MywgMTgsIDE5LCAxNTksIDIyNywgMTczLCAxOCwgMTksIDIyOSwgMTkwLCAKLSAgICAyMjcsIDE3MywgMTgsIDE5LCAyMzAsIDI1LCAxOCwgMTksIDcyLCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIAotICAgIDIzMywgNTgsIDE4LCAxOSwgMjMzLCAxMzMsIDE4LCAxOSwgMjMyLCAyNDEsIDE4LCAxOSwgMjMyLCAyMjcsIDE4LCAxOSwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgMjMyLCAxMjcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMiwgMTI3LCAxOCwgMTksIDIzMywgMTM1LCAKLSAgICAxOCwgMTksIDIzMywgMTM0LCAxOCwgMTksIDIzMiwgNjgsIDE4LCAxOSwgMTU5LCAyMzIsIDY4LCAxOCwgMTksIDIzMiwgNjcsIAotICAgIDE4LCAxOSwgMTU5LCAyMzIsIDY3LCAxOCwgMTksIDIzMiwgNjYsIDE4LCAxOSwgMTU5LCAyMzIsIDY2LCAxOCwgMTksIDIzMiwgCi0gICAgNjUsIDE4LCAxOSwgMTU5LCAyMzIsIDY1LCAxOCwgMTksIDIzMiwgNjQsIDE4LCAxOSwgMTU5LCAyMzIsIDY0LCAxOCwgMTksIAotICAgIDIzMiwgNzAsIDE4LCAxOSwgMTU5LCAyMzIsIDcwLCAxOCwgMTksIDIzMiwgNjksIDE4LCAxOSwgMTU5LCAyMzIsIDY5LCAxOCwgCi0gICAgMTksIDE1NiwgMTgsIDE5LCAxNTksIDE1NiwgMTgsIDE5LCAxNDcsIDE1NiwgMTgsIDE5LCAyMjEsIDE4MSwgMTgsIDE5LCAKLSAgICAyMjIsIDI5LCAxOCwgMTksIDIxOSwgMTkxLCAxOCwgMTksIDIxOSwgMTc1LCAxOCwgMTksIDIxOSwgNTgsIDE4LCAxOSwgCi0gICAgMjE5LCA0MCwgMTgsIDE5LCAyMTEsIDExNiwgMjE5LCA0MCwgMTgsIDE5LCAyMDYsIDE4LCAxOSwgMjIyLCAzMSwgMTgsIDE5LCAKLSAgICAyMTcsIDI0OSwgMTgsIDE5LCAxNTksIDIxNywgMjQ5LCAxOCwgMTksIDIxNywgMjQzLCAxOCwgMTksIDE1OSwgMjE3LCAyNDMsIAotICAgIDE4LCAxOSwgMjE3LCAyNDIsIDE4LCAxOSwgMTU5LCAyMTcsIDI0MiwgMTgsIDE5LCAyMTcsIDIzOCwgMTgsIDE5LCAxNTksIAotICAgIDIxNywgMjM4LCAxOCwgMTksIDIxNywgMjM3LCAxOCwgMTksIDE1OSwgMjE3LCAyMzcsIDE4LCAxOSwgMjE3LCAyNTMsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTcsIDI1MywgMTgsIDE5LCAyMTcsIDI1MiwgMTgsIDE5LCAxNTksIDIxNywgMjUyLCAxOCwgMTksIDIyOSwgCi0gICAgMTkwLCAyMTcsIDI1MiwgMTgsIDE5LCAyMjIsIDkxLCAxOCwgMTksIDI1MywgMjA1LCAyMjIsIDkxLCAxOCwgMTksIDIxNywgCi0gICAgMjU0LCAxOCwgMTksIDI1MSwgMjE4LCAyMjIsIDkxLCAxOCwgMTksIDIzMCwgMTI3LCAyMTksIDEwOCwgMTgsIDE5LCAyMjksIAotICAgIDE5MCwgMjE5LCA5OSwgMTgsIDE5LCAyMjksIDE5MCwgMjIyLCA4OSwgMTgsIDE5LCAyMjksIDE5MCwgMjE4LCAyMzUsIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxOCwgODYsIDE4LCAxOSwgMjI5LCAxOTAsIDIxOSwgOTgsIDE4LCAxOSwgMjI5LCAxOTAsIDIyMSwgCi0gICAgMTg0LCAxOCwgMTksIDIyMCwgNjMsIDE4LCAxOSwgMjIwLCAzMiwgMTgsIDE5LCAyMjAsIDI3LCAxOCwgMTksIDIyMCwgNywgCi0gICAgMTgsIDE5LCAyMjAsIDEsIDE4LCAxOSwgMjIwLCAxMDIsIDE4LCAxOSwgMjIwLCA5OCwgMTgsIDE5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAxNTksIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAKLSAgICAyMDQsIDE4LCAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIwMywgMTgsIDE5LCAxNTksIDIxOSwgMjAzLCAxOCwgCi0gICAgMTksIDIxOSwgMjAyLCAxOCwgMTksIDE1OSwgMjE5LCAyMDIsIDE4LCAxOSwgMjE5LCAyMDgsIDE4LCAxOSwgMTU5LCAyMTksIAotICAgIDIwOCwgMTgsIDE5LCAyMTksIDIwNywgMTgsIDE5LCAxNTksIDIxOSwgMjA3LCAxOCwgMTksIDIyMCwgMTA0LCAxOCwgMTksIAotICAgIDIxMSwgNDcsIDE4LCAxOSwgMjExLCAxMDEsIDE4LCAxOSwgMjExLCA4LCAxOCwgMTksIDIxMCwgMjU1LCAxOCwgMTksIDIxMCwgCi0gICAgMjQ0LCAxOCwgMTksIDIxMCwgMjI5LCAxOCwgMTksIDIxMSwgMTE2LCAyMTAsIDIyOSwgMTgsIDE5LCAxOTEsIDE4LCAxOSwgCi0gICAgMjExLCAxMDMsIDE4LCAxOSwgMjEwLCAxNzQsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NCwgMTgsIDE5LCAyMTAsIDE3MywgMTgsIAotICAgIDE5LCAxNTksIDIxMCwgMTczLCAxOCwgMTksIDIxMCwgMTcyLCAxOCwgMTksIDE1OSwgMjEwLCAxNzIsIDE4LCAxOSwgMjEwLCAKLSAgICAxNzEsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MSwgMTgsIDE5LCAyMTAsIDE3MCwgMTgsIDE5LCAxNTksIDIxMCwgMTcwLCAxOCwgCi0gICAgMTksIDIxMCwgMTc2LCAxOCwgMTksIDE1OSwgMjEwLCAxNzYsIDE4LCAxOSwgMjEwLCAxNzUsIDE4LCAxOSwgMTU5LCAyMTAsIAotICAgIDE3NSwgMTgsIDE5LCAyMjksIDE5MCwgMjEwLCAxNzUsIDE4LCAxOSwgMjExLCAxMTcsIDE4LCAxOSwgMjUyLCA0LCAyMTEsIAotICAgIDExNywgMTgsIDE5LCAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjA5LCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMjgsIAotICAgIDE4LCAxOSwgMjIzLCAyMjMsIDIyMywgMTI4LCAxOCwgMTksIDE1OSwgMjMzLCA1OCwgMTgsIDE5LCAyMjMsIDE4MywgMTgsIAotICAgIDE5LCAyMjMsIDM1LCAxOCwgMTksIDIyMiwgMjM5LCAxOCwgMTksIDIyMiwgMjExLCAxOCwgMTksIDIyMiwgMTk3LCAxOCwgCi0gICAgMTksIDE1OSwgMjMyLCAxNTYsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg0LCAxOCwgMTksIDE1OSwgMjMzLCAxMzUsIAotICAgIDE4LCAxOSwgMjIyLCAxMDgsIDE4LCAxOSwgMTU5LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIAotICAgIDE4LCAxOSwgMTQ3LCAxNTMsIDE4LCAxOSwgMjQ0LCAxNTQsIDE4LCAxOSwgMjQ0LCAxOTMsIDE4LCAxOSwgMjQ0LCAxMjEsIAotICAgIDE4LCAxOSwgMjQ0LCAxMDgsIDE4LCAxOSwgMjQ0LCA0MywgMTgsIDE5LCAyNDQsIDM0LCAxOCwgMTksIDI0NCwgMTk2LCAxOCwgCi0gICAgMTksIDI0NCwgMTk1LCAxOCwgMTksIDI0MywgMjEyLCAxOCwgMTksIDE1OSwgMjQzLCAyMTIsIDE4LCAxOSwgMjQ1LCA2LCAKLSAgICAxOCwgMTksIDIxNiwgMTk1LCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMTc1LCAxOCwgMTksIAotICAgIDIzMCwgMjMsIDIxNiwgMTc1LCAxOCwgMTksIDIxNiwgMTcxLCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTcxLCAxOCwgMTksIAotICAgIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMTUzLCAxOCwgMTksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjA3LCAxOCwgMTksIAotICAgIDIxNiwgMTI3LCAxOCwgMTksIDE1OSwgMjE2LCAxMjcsIDE4LCAxOSwgMjE2LCAyMTAsIDE4LCAxOSwgMjE1LCAxNDIsIDE4LCAKLSAgICAxOSwgMjE1LCAxNDAsIDE4LCAxOSwgMjE1LCAxMzksIDE4LCAxOSwgMjE1LCAxNDQsIDE4LCAxOSwgMjE1LCAxNDUsIDE4LCAKLSAgICAxOSwgMjE1LCA1MiwgMTgsIDE5LCAyMTUsIDUxLCAxOCwgMTksIDIxNSwgNTAsIDE4LCAxOSwgMjE1LCA1MywgMTgsIDE5LCAKLSAgICAyMjcsIDE5MywgMjQxLCAyMzgsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgMTgwLCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIAotICAgIDE2MSwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA2OCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA1MywgMTgsIDE5LCAyMjcsIAotICAgIDE5MywgMTYyLCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDQ2LCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDYwLCAxOCwgMTksIAotICAgIDIyNywgMTkyLCAyNDIsIDYwLCAxOCwgMTksIDI0MSwgMTU0LCAxOCwgMTksIDIyNCwgODQsIDE4LCAxOSwgMjI0LCA1MywgCi0gICAgMTgsIDE5LCAyMjQsIDQ4LCAxOCwgMTksIDIyNCwgNDIsIDE4LCAxOSwgMjI0LCAzNywgMTgsIDE5LCAyMjQsIDg4LCAxOCwgCi0gICAgMTksIDIyNCwgODcsIDE4LCAxOSwgMjI0LCA5NiwgMTgsIDE5LCAyMTYsIDU1LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCi0gICAgMjE2LCA1MiwgMTgsIDE5LCAyMTYsIDU2LCAxOCwgMTksIDE1OSwgMjIzLCAxMjgsIDE4LCAxOSwgMTU5LCAyMjMsIDM1LCAKLSAgICAxOCwgMTksIDE1OSwgMjIyLCAyMTEsIDE4LCAxOSwgMTU5LCAyMDUsIDE4LCAxOSwgMjI5LCA3NSwgMTgsIDE5LCAyMjksIAotICAgIDI3LCAxOCwgMTksIDIyOSwgMjMsIDE4LCAxOSwgMjI5LCA0LCAxOCwgMTksIDIyOCwgMjU1LCAxOCwgMTksIDIyOSwgNzcsIAotICAgIDE4LCAxOSwgMjI5LCA3NiwgMTgsIDE5LCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMTAzLCAxOCwgMTksIDIyMSwgMjA5LCAKLSAgICAyMjAsIDYzLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDMyLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDcsIDE4LCAxOSwgCi0gICAgMjIxLCAyMDksIDIyMCwgMTAyLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE5NSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKLSAgICAxNzUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTU2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIwOCwgMTgsIDE5LCAyMTEsIAotICAgIDIxMywgMjE2LCAyMTAsIDE4LCAxOSwgMjMyLCAyNDgsIDE4LCAxOSwgMjMyLCAyNDcsIDE4LCAxOSwgMjMyLCAyNDYsIDE4LCAKLSAgICAxOSwgMjMyLCAyNDUsIDE4LCAxOSwgMjMyLCAyNTQsIDE4LCAxOSwgMjMyLCAyNTMsIDE4LCAxOSwgMjMyLCAyNTUsIDE4LCAKLSAgICAxOSwgMjE2LCAyMDksIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE3NSwgMTgsIDE5LCAyMTYsIDIwOSwgCi0gICAgMjE2LCAxNzEsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE1MywgMTgsIDE5LCAKLSAgICAyMTYsIDIwOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMjA3LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyNTQsIDE4OSwgMjUzLCAxNTgsIDE4LCAxOSwgMjUxLCAyMTgsIDc1LCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICA3MywgMTgsIDE5LCAyNTEsIDIxOCwgNzYsIDE4LCAxOSwgMjUxLCAyMTgsIDYxLCAxOCwgMTksIDI1MSwgMjE4LCAyMTIsIAotICAgIDIyLCAxOCwgMTksIDI1MSwgMjE4LCAyMTEsIDI1MCwgMTgsIDE5LCAyNTEsIDIxOCwgMjExLCAyMjcsIDE4LCAxOSwgMjUxLCAKLSAgICAyMTgsIDIxMiwgNjUsIDE4LCAxOSwgMjUxLCAyMTgsIDIyOSwgMTA3LCAxOCwgMTksIDI1MSwgMjE4LCAyMjgsIDIzMywgMTgsIAotICAgIDE5LCAyNTEsIDIxOCwgMjI4LCA3NCwgMTgsIDE5LCAyNTEsIDIxOCwgMTk3LCAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDE4MiwgCi0gICAgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCA5MiwgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCAyOCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMTc2LCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDIzOCwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCAxODAsIDE4LCAxOSwgMjIxLCAKLSAgICAyMDksIDI0MSwgNjgsIDE4LCAxOSwgMjIxLCAyMDksIDE2MiwgMTgsIDE5LCA3MiwgMjQyLCAyMjAsIDE4LCAxOSwgNzIsIAotICAgIDI0MiwgMjI0LCAxOCwgMTksIDcyLCAyNDIsIDIzNiwgMTgsIDE5LCA3MiwgMjQyLCAyMzUsIDE4LCAxOSwgNzIsIDI0MiwgCi0gICAgMjI1LCAxOCwgMTksIDcyLCAyNDIsIDI0OSwgMTgsIDE5LCA3MiwgMjIyLCAxNDAsIDE4LCAxOSwgNzIsIDIyMiwgMjExLCAKLSAgICAxOCwgMTksIDcyLCAyMjMsIDEyOCwgMTgsIDE5LCA3MiwgMjIzLCAxMDgsIDE4LCAxOSwgNzIsIDIyMywgMzUsIDE4LCAxOSwgCi0gICAgNzIsIDIwNSwgMTgsIDE5LCA3MiwgMjExLCAxOTUsIDE4LCAxOSwgNzIsIDIxMSwgMjI3LCAxOCwgMTksIDcyLCAyMTIsIDIyLCAKLSAgICAxOCwgMTksIDcyLCAyMTIsIDE3LCAxOCwgMTksIDcyLCAyMTEsIDI1MCwgMTgsIDE5LCA3MiwgMjEyLCA2NSwgMTgsIDE5LCAKLSAgICA3MiwgMjQwLCAxOTQsIDE4LCAxOSwgNzIsIDI0MCwgMTk1LCAxOCwgMTksIDcyLCAyNDAsIDE5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjQwLCAxOTcsIDE4LCAxOSwgNzIsIDI0MCwgMTk2LCAxOCwgMTksIDcyLCAyNDAsIDIwMCwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICAxMzYsIDE4LCAxOSwgNzIsIDIxNiwgMTU2LCAxOCwgMTksIDcyLCAyMTYsIDE5NSwgMTgsIDE5LCA3MiwgMjE2LCAxOTQsIAotICAgIDE4LCAxOSwgNzIsIDIxNiwgMTc1LCAxOCwgMTksIDcyLCAyMTYsIDIwOCwgMTgsIDE5LCA3MiwgMjE1LCAxMjMsIDE4LCAxOSwgCi0gICAgNzIsIDIxNSwgMTMzLCAxOCwgMTksIDcyLCAyMTUsIDE1MSwgMTgsIDE5LCA3MiwgMjE1LCAxNTAsIDE4LCAxOSwgNzIsIAotICAgIDIxNSwgMTM1LCAxOCwgMTksIDcyLCAyMTUsIDE1NiwgMTgsIDE5LCA3MiwgMjI0LCAxNTAsIDE4LCAxOSwgNzIsIDIyNSwgCi0gICAgMTYsIDE4LCAxOSwgNzIsIDIyNSwgMjIxLCAxOCwgMTksIDcyLCAyMjUsIDIxMSwgMTgsIDE5LCA3MiwgMjI1LCAxMDgsIDE4LCAKLSAgICAxOSwgNzIsIDE5MCwgMTgsIDE5LCA3MiwgMjI2LCAxMDUsIDE4LCAxOSwgNzIsIDI0MiwgMTEzLCAxOCwgMTksIDcyLCAyNDIsIAotICAgIDE3NCwgMTgsIDE5LCA3MiwgMjQzLCA2MiwgMTgsIDE5LCA3MiwgMjQzLCA1NSwgMTgsIDE5LCA3MiwgMjQyLCAyMTQsIDE4LCAKLSAgICAxOSwgNzIsIDI0MywgMTM1LCAxOCwgMTksIDcyLCAyMzQsIDEwMCwgMTgsIDE5LCA3MiwgMjM0LCAxMDUsIDE4LCAxOSwgNzIsIAotICAgIDIzNCwgMTE5LCAxOCwgMTksIDcyLCAyMzQsIDExOCwgMTgsIDE5LCA3MiwgMjM0LCAxMTIsIDE4LCAxOSwgNzIsIDIzNCwgCi0gICAgMTMyLCAxOCwgMTksIDcyLCAyMzQsIDQxLCAxOCwgMTksIDcyLCAyMzQsIDQyLCAxOCwgMTksIDcyLCAyMzQsIDQ1LCAxOCwgCi0gICAgMTksIDcyLCAyMzQsIDQ0LCAxOCwgMTksIDcyLCAyMzQsIDQzLCAxOCwgMTksIDcyLCAyMzQsIDQ2LCAxOCwgMTksIDcyLCAKLSAgICAyMzQsIDQ3LCAxOCwgMTksIDcyLCAyMjcsIDIzNywgMTgsIDE5LCA3MiwgMjI4LCA3NCwgMTgsIDE5LCA3MiwgMjI5LCAxMDcsIAotICAgIDE4LCAxOSwgNzIsIDIyOSwgMTAzLCAxOCwgMTksIDcyLCAyMjgsIDIzMywgMTgsIDE5LCA3MiwgMTk3LCAxOCwgMTksIDcyLCAKLSAgICAyMzAsIDEwMiwgMTgsIDE5LCA3MiwgMjMwLCAxNjEsIDE4LCAxOSwgNzIsIDIzMSwgOTEsIDE4LCAxOSwgNzIsIDIzMSwgODAsIAotICAgIDE4LCAxOSwgNzIsIDIzMCwgMjMwLCAxOCwgMTksIDcyLCAxODQsIDE4LCAxOSwgNzIsIDIxMCwgMjEyLCAxOCwgMTksIDcyLCAKLSAgICAyMTAsIDI0NCwgMTgsIDE5LCA3MiwgMjExLCA0NywgMTgsIDE5LCA3MiwgMjExLCA0NCwgMTgsIDE5LCA3MiwgMjExLCA4LCAKLSAgICAxOCwgMTksIDcyLCAxOTEsIDE4LCAxOSwgNzIsIDIzNSwgNTEsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgNTEsIDE4LCAxOSwgCi0gICAgNzIsIDIzNSwgNjgsIDE4LCAxOSwgNzIsIDIzNSwgMTI2LCAxOCwgMTksIDcyLCAyMzUsIDEyNCwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICAxMDgsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgMTA4LCAxOCwgMTksIDcyLCAyMzUsIDE0MSwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICA4MSwgMTgsIDE5LCA3MiwgMjM1LCA4NSwgMTgsIDE5LCA3MiwgMjM1LCA5NSwgMTgsIDE5LCA3MiwgMjM1LCA5NCwgMTgsIAotICAgIDE5LCA3MiwgMjM1LCA5MywgMTgsIDE5LCA3MiwgMjM1LCA5NiwgMTgsIDE5LCA3MiwgMjMyLCA5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgNzIsIDIzMywgNTgsIDE4LCAxOSwgNzIsIDIzMywgNTAsIDE4LCAxOSwgNzIsIDIzMiwgMjQxLCAKLSAgICAxOCwgMTksIDcyLCAyMzMsIDEzNSwgMTgsIDE5LCA3MiwgMjQ3LCAxNDksIDE4LCAxOSwgNzIsIDI0NywgMTUwLCAxOCwgMTksIAotICAgIDcyLCAyNDcsIDE1NSwgMTgsIDE5LCA3MiwgMjQ3LCAxNTQsIDE4LCAxOSwgNzIsIDI0NywgMTUxLCAxOCwgMTksIDcyLCAKLSAgICAyNDcsIDE1NiwgMTgsIDE5LCA3MiwgMjMyLCAyNDQsIDE4LCAxOSwgNzIsIDIzMiwgMjQ2LCAxOCwgMTksIDcyLCAyMzIsIAotICAgIDI1MCwgMTgsIDE5LCA3MiwgMjMyLCAyNDksIDE4LCAxOSwgNzIsIDIzMiwgMjQ4LCAxOCwgMTksIDcyLCAyMzIsIDI1NCwgCi0gICAgMTgsIDE5LCA3MiwgMjE2LCA1MCwgMTgsIDE5LCA3MiwgMjE2LCA1MiwgMTgsIDE5LCA3MiwgMjE2LCA1NSwgMTgsIDE5LCAKLSAgICA3MiwgMjE2LCA1NCwgMTgsIDE5LCA3MiwgMjE2LCA1MywgMTgsIDE5LCA3MiwgMjE2LCA1NiwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICA0NSwgMTgsIDE5LCA3MiwgMjE2LCA0NiwgMTgsIDE5LCA3MiwgMjE2LCA1OCwgMTgsIDE5LCA3MiwgMjE2LCA1NywgMTgsIAotICAgIDE5LCA3MiwgMjE2LCA0NywgMTgsIDE5LCA3MiwgMjE2LCA1OSwgMTgsIDE5LCA3MiwgMjEwLCAxMywgMTgsIDE5LCA3MiwgCi0gICAgMjEwLCAyMywgMTgsIDE5LCA3MiwgMjEwLCA5NCwgMTgsIDE5LCA3MiwgMjEwLCA5MiwgMTgsIDE5LCA3MiwgMjEwLCA0NCwgCi0gICAgMTgsIDE5LCA3MiwgMjEwLCAxMTYsIDE4LCAxOSwgNzIsIDIxMCwgMTU5LCAxOCwgMTksIDcyLCA2NSwgMjEwLCAxNTksIDE4LCAKLSAgICAxOSwgNzIsIDI0NiwgMjgsIDE4LCAxOSwgNzIsIDI0NiwgMjksIDE4LCAxOSwgNzIsIDI0NiwgMzYsIDE4LCAxOSwgNzIsIAotICAgIDI0NiwgMzUsIDE4LCAxOSwgNzIsIDI0NiwgMzEsIDE4LCAxOSwgNzIsIDI0NiwgMzgsIDE4LCAxOSwgNzIsIDIxOCwgODMsIAotICAgIDE4LCAxOSwgNzIsIDIxOSwgNTgsIDE4LCAxOSwgNzIsIDIyMSwgMTgxLCAxOCwgMTksIDcyLCAyMjEsIDE3MCwgMTgsIDE5LCAKLSAgICA3MiwgMjE5LCAxOTEsIDE4LCAxOSwgNzIsIDIwNiwgMTgsIDE5LCA3MiwgMjE5LCAyMjUsIDE4LCAxOSwgNzIsIDIyMCwgNywgCi0gICAgMTgsIDE5LCA3MiwgMjIwLCA2MywgMTgsIDE5LCA3MiwgMjIwLCA2MSwgMTgsIDE5LCA3MiwgMjIwLCAzMiwgMTgsIDE5LCAKLSAgICA3MiwgMjIwLCAxMDIsIDE4LCAxOSwgNzIsIDIyMCwgMTA0LCAxOCwgMTksIDcyLCAyMTUsIDE2MywgMTgsIDE5LCA3MiwgCi0gICAgMjE1LCAxNjYsIDE4LCAxOSwgNzIsIDIxNSwgMTc4LCAxOCwgMTksIDcyLCAyMTUsIDE3NywgMTgsIDE5LCA3MiwgMjE1LCAKLSAgICAxNjcsIDE4LCAxOSwgNzIsIDIxNSwgMTgzLCAxOCwgMTksIDcyLCAyNTAsIDY5LCAxOCwgMTksIDcyLCAyNTAsIDg2LCAxOCwgCi0gICAgMTksIDcyLCAyNTAsIDEzMSwgMTgsIDE5LCA3MiwgMjUwLCAxMjgsIDE4LCAxOSwgNzIsIDI1MCwgMTEwLCAxOCwgMTksIDcyLCAKLSAgICAyNTAsIDE1NywgMTgsIDE5LCA3MiwgMjE1LCAxMjYsIDE4LCAxOSwgNzIsIDIxNSwgMTI3LCAxOCwgMTksIDcyLCAyMTUsIAotICAgIDEzMCwgMTgsIDE5LCA3MiwgMjE1LCAxMjksIDE4LCAxOSwgNzIsIDIxNSwgMTI4LCAxOCwgMTksIDcyLCAyMTUsIDEzMSwgCi0gICAgMTgsIDE5LCAyNTAsIDExMSwgNTAsIDE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxOCwgMTksIDIyNCwgODAsIDE4LCAKLSAgICAxOSwgMjI5LCA3MywgMTgsIDE5LCAyMjgsIDEwMCwgMTgsIDE5LCAyMjgsIDk5LCAxOCwgMTksIDIyOCwgOTgsIDE4LCAxOSwgCi0gICAgMjI4LCA5NywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwMSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjUsIAotICAgIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI0LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMywgMTgsIDE5LCAyMTEsIDIxMywgCi0gICAgMjE2LCAxMjIsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIxLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyOCwgMTgsIDE5LCAKLSAgICAyMTEsIDIxMywgMjE2LCAxMjcsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIDIxMCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMjEyLCA5OCwgMjI2LCAyMjYsIDIxOSwgMTksIDc4LCAyMjYsIDIyNiwgMSwgMjUyLCA0OCwgMjI2LCAyMjYsIDEsIDIzMiwgCi0gICAgODcsIDIyNiwgMjI2LCAxLCAyNDQsIDE1MSwgMjI2LCAyMjYsIDEsIDIyMiwgMTUsIDIyNiwgMjI2LCAxLCAyMjgsIDE5MywgCi0gICAgMjI2LCAyMjYsIDEsIDIxNCwgMjI2LCAyMjYsIDIyNiwgMSwgMjQ4LCAxOTcsIDIyNiwgMjI2LCAxLCAyMTYsIDgwLCAyMjYsIAotICAgIDIyNiwgMSwgMjQ5LCAyMjksIDIyNiwgMjI2LCAxLCAyNTAsIDE4MCwgMjI2LCAyMjYsIDEsIDIzMCwgOTEsIDIyNiwgMjI2LCAKLSAgICAxLCAyNDIsIDE1NiwgMjI2LCAyMjYsIDEsIDIyOSwgNjMsIDIyNiwgMjI2LCAxLCAyMTgsIDEyMiwgMjI2LCAyMjYsIDEsIAotICAgIDIyMiwgMTM1LCAyMjYsIDIyNiwgMSwgMjU0LCAxOTgsIDIyNiwgMjI2LCAxLCAyMjYsIDE4NywgMjI2LCAyMjYsIDEsIDIxNCwgCi0gICAgMTUwLCAyMjYsIDIyNiwgMSwgMjQ1LCAyMzEsIDIyNiwgMjI2LCAxLCAyMzUsIDE4OCwgMjI2LCAyMjYsIDEsIDI0NSwgMjMyLCAKLSAgICAyMjYsIDIyNiwgMSwgMjI2LCAxNTgsIDIyNiwgMjI2LCAxLCAyMTQsIDIwNiwgMjI2LCAyMjYsIDEsIDIzNiwgMzksIDIyNiwgCi0gICAgMjI2LCAxLCAyNDUsIDIyOSwgMjI2LCAyMjYsIDEsIDIyNSwgMjAyLCAyMjYsIDIyNiwgMjQ0LCAxNTAsIDc4LCAyMjYsIAotICAgIDIyNiwgMjIzLCA0OSwgMjQ0LCAxNTAsIDc4LCAxNzgsIDEsIDI0NCwgMTQxLCAyNDQsIDEzMywgMjQ0LCAxNTUsIDI0NSwgNiwgCi0gICAgMTc4LCAxLCAyMTQsIDEwNSwgMTc4LCAxLCAyMTQsIDEzNSwgMjE0LCAxNTEsIDcwLCAxNzgsIDEsIDIxMCwgMjE0LCAxNzgsIAotICAgIDEsIDIxMSwgMTE3LCAxNzgsIDEsIDIxMiwgOTgsIDE3OCwgMSwgMjE2LCAxMzAsIDIxNiwgMTI5LCAyMTYsIDE1MSwgMTc4LCAKLSAgICAxLCAyNDUsIDU5LCAxNzgsIDEsIDI1NCwgOTMsIDYxLCAxNzgsIDEsIDIyNiwgMTQzLCA3NiwgMTc4LCAxLCAyNTUsIDE3LCAKLSAgICA2MSwgMTc4LCAxLCAyNTQsIDIyNywgMTc4LCAxLCAyMzIsIDEzMywgNzYsIDE3OCwgMSwgMjE5LCAyNDQsIDc2LCAxNzgsIDEsIAotICAgIDc2LCAxNzgsIDEsIDIyNiwgMjM0LCAxNzgsIDEsIDIyNiwgMTk2LCAxNzgsIDEsIDIyMywgMTY0LCAyMjMsIDE3NywgMjIzLCAKLSAgICA5NCwgMTUzLCAxNzgsIDEsIDIzNCwgMTkzLCAxNzgsIDEsIDI1MCwgMTc3LCAxNzgsIDEsIDIzNCwgMTk0LCAyMzUsIDIzLCAKLSAgICAxNzgsIDEsIDI0MywgMjAyLCAxNzgsIDEsIDI0NSwgMTM4LCAxNzgsIDEsIDI0MywgNTgsIDI0MiwgNjYsIDI0MywgMjAyLCAKLSAgICAxNzgsIDEsIDI0MywgOTYsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgMzgsIAotICAgIDI0MiwgNjAsIDE3OCwgMSwgMjQyLCA0MiwgMjQyLCA2MCwgMTc4LCAxLCAyMzIsIDEzNSwgMjQyLCA2MCwgMTc4LCAxLCAKLSAgICAyMTksIDI0NywgMjQyLCA2MCwgMTc4LCAxLCAyMjksIDE4NSwgMjI3LCAxNTcsIDIyOSwgMTg2LCAyMzAsIDI1LCAxNzgsIDEsIAotICAgIDIxOSwgMjQ1LCAyMzAsIDI1LCAxNzgsIDEsIDI0NiwgMTE1LCAxNzgsIDEsIDIzNSwgMTY4LCAyMzUsIDE3MiwgMjM1LCAKLSAgICAxNjIsIDczLCAxNzgsIDEsIDc1LCAxNzgsIDEsIDIzNSwgMTE3LCAyMzUsIDE0NCwgMTc4LCAxLCAyNDMsIDQzLCAxNzgsIDEsIAotICAgIDIzMiwgMTM2LCAyNTQsIDI0MywgMTc4LCAxLCAyMTksIDI0OSwgNjEsIDE3OCwgMSwgMjM1LCAxNTQsIDI0NSwgMTEzLCAKLSAgICAxNzgsIDEsIDIyNSwgMTY0LCAyMjUsIDE4NiwgMjI2LCAxMDUsIDE3OCwgMSwgMjU0LCAxNjMsIDI0NSwgMTExLCAxNzgsIDEsIAotICAgIDIxOSwgMjQsIDIyMiwgOTEsIDE3OCwgMSwgMjE5LCAxNzksIDIzMiwgMTMyLCAyMjIsIDkxLCAxNzgsIDEsIDIxOSwgMjQzLCAKLSAgICAyMjIsIDkxLCAxNzgsIDEsIDI1MSwgNjYsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgMjE2LCA2MywgMjE2LCA3MywgCi0gICAgMjE1LCA0MSwgMjE3LCAxNTIsIDE3OCwgMSwgMjE5LCAyNDIsIDIxNywgMTUyLCAxNzgsIDEsIDI0OSwgNjAsIDE3OCwgMSwgCi0gICAgMjUyLCAzMSwgMjUyLCAzNCwgMjUxLCAyMjQsIDI1MywgMTU4LCAxNzgsIDEsIDIxOSwgMjQ4LCAyNTMsIDE1OCwgMTc4LCAxLCAKLSAgICAyNDYsIDExNCwgMTc4LCAxLCAyMjYsIDE3MSwgMTc4LCAxLCAyNDUsIDE5NiwgMjQ1LCAxOTgsIDc1LCAxNzgsIDEsIDIzMSwgCi0gICAgMTc4LCAyMzEsIDE4NiwgMTkzLCAxNzgsIDEsIDIzMiwgMTM0LCAxOTMsIDE3OCwgMSwgMjE5LCAyNDYsIDE5MywgMTc4LCAxLCAKLSAgICAyMzMsIDczLCAyMzMsIDExNCwgMjMyLCAxNDMsIDE1NiwgMTc4LCAxLCAyNDYsIDExNiwgMTc4LCAxLCAyMzUsIDIzMCwgCi0gICAgMTc4LCAxLCAyMzUsIDIzMSwgMTc4LCAxLCAyNDgsIDIxMCwgMjQ4LCAyMTUsIDI0OSwgNjAsIDE3OCwgMSwgMjI2LCAxMzgsIAotICAgIDI0NSwgNTgsIDc2LCAxNzgsIDEsIDI0NSwgMjI3LCAxNzgsIDEsIDIzNSwgMTg3LCAxNzgsIDEsIDI0OSwgNzgsIDE3OCwgMSwgCi0gICAgMjUxLCAxNywgMTc4LCAxLCAyNTAsIDE4OSwgMTc4LCAxLCAyMTgsIDE2MSwgMTc4LCAxLCAyMzIsIDEzMSwgMTc4LCAxLCAKLSAgICAyMTksIDI0MSwgMTc4LCAxLCAyNDAsIDExMCwgMTc4LCAxLCAyMjQsIDk2LCAxNzgsIDEsIDIxMSwgMTc4LCAxNzgsIDIxOSwgCi0gICAgMTU1LCAyMjQsIDE0MCwgMTc4LCAyMzAsIDg1LCAyMjQsIDE0MCwgMTc4LCAyNDksIDEzMSwgMjI0LCAxNDAsIDE3OCwgMjU0LCAKLSAgICA2LCA4NywgMTc4LCAyMTUsIDgyLCA4NywgMTc4LCAyNTIsIDQ2LCA4NywgMjE3LCA4MywgMSwgNjEsIDIxNywgODMsIDEsIAotICAgIDczLCAyMTcsIDgzLCAxLCA3MCwgMjE3LCA4MywgMSwgMTc2LCAyMTcsIDgzLCAxLCAyNDMsIDEzNSwgMjE3LCA4MywgMSwgCi0gICAgMjI5LCA3NywgMjE3LCA4MywgMSwgMjE3LCAxMDUsIDIxNywgODMsIDEsIDI0OCwgMjIxLCAyMTcsIDgzLCAxLCAxOTcsIAotICAgIDIxNywgODMsIDEsIDE5MCwgMjE3LCA4MywgMSwgMjUyLCAxOTEsIDIxNywgODMsIDEsIDE4NCwgMjE3LCA4MywgMSwgMTkxLCAKLSAgICAyMTcsIDgzLCAxLCAyMzMsIDEzNSwgMjE3LCA4MywgMSwgMjEyLCA2NSwgMjE3LCA4MywgMSwgMjA2LCAyMTcsIDgzLCAxLCAKLSAgICAxNjIsIDIxNywgODMsIDI1LCA1LCA3MywgMjE3LCA4MywgMjUsIDUsIDcwLCAyMTcsIDgzLCA1LCAyMTMsIDE1MiwgMjQyLCAKLSAgICA3LCAxLCA2MSwgMjQyLCA3LCAxLCA3MywgMjQyLCA3LCAxLCA3MCwgMjQyLCA3LCAxLCAxNzYsIDI0MiwgNywgMSwgMjQzLCAKLSAgICAxMzUsIDI0MiwgNywgMSwgMjI5LCA3NywgMjQyLCA3LCAxLCAyMTcsIDEwNSwgMjQyLCA3LCAxLCAyNDgsIDIyMSwgMjQyLCAKLSAgICA3LCAxLCAxOTcsIDI0MiwgNywgMSwgMTkwLCAyNDIsIDcsIDEsIDI1MiwgMTkxLCAyNDIsIDcsIDEsIDE4NCwgMjQyLCA3LCAKLSAgICAxLCAxOTEsIDI0MiwgNywgMSwgMjA1LCAyNDIsIDcsIDEsIDIzMywgMTM1LCAyNDIsIDcsIDEsIDIxMiwgNjUsIDI0MiwgNywgCi0gICAgMSwgMjA2LCAyNDIsIDcsIDEsIDE2MiwgMjQyLCA3LCAyNSwgNSwgNzMsIDI0MiwgNywgMjUsIDUsIDcwLCAyNDIsIDcsIDUsIAotICAgIDIyNiwgNDksIDIyNSwgMTI2LCAyMTksIDE1NSwgMjI0LCAxNDAsIDIyNSwgMTI2LCA1MiwgMjI0LCAxNDAsIDI1MSwgMTIwLCAKLSAgICAxLCA2MSwgMjUxLCAxMjAsIDEsIDczLCAyNTEsIDEyMCwgMSwgNzAsIDI1MSwgMTIwLCAxLCAxNzYsIDI1MSwgMTIwLCAxLCAKLSAgICAyNDMsIDEzNSwgMjUxLCAxMjAsIDEsIDIyOSwgNzcsIDI1MSwgMTIwLCAxLCAyMTcsIDEwNSwgMjUxLCAxMjAsIDEsIDI0OCwgCi0gICAgMjIxLCAyNTEsIDEyMCwgMSwgMTk3LCAyNTEsIDEyMCwgMSwgMTkwLCAyNTEsIDEyMCwgMSwgMjUyLCAxOTEsIDI1MSwgMTIwLCAKLSAgICAxLCAxODQsIDI1MSwgMTIwLCAxLCAxOTEsIDI1MSwgMTIwLCAxLCAyMDUsIDI1MSwgMTIwLCAxLCAyMzMsIDEzNSwgMjUxLCAKLSAgICAxMjAsIDEsIDIxMiwgNjUsIDI1MSwgMTIwLCAxLCAyMDYsIDI1MSwgMTIwLCAxLCAxNjIsIDI1MSwgMTIwLCAyNSwgNSwgNzMsIAotICAgIDI1MSwgMTIwLCAyNSwgNSwgNzAsIDIxNywgODIsIDEsIDYxLCAyMTcsIDgyLCAxLCA3MywgMjE3LCA4MiwgMSwgNzAsIDIxNywgCi0gICAgODIsIDEsIDE3NiwgMjE3LCA4MiwgMSwgMjQzLCAxMzUsIDIxNywgODIsIDEsIDIyOSwgNzcsIDIxNywgODIsIDEsIDIxNywgCi0gICAgMTA1LCAyMTcsIDgyLCAxLCAyNDgsIDIyMSwgMjE3LCA4MiwgMSwgMTk3LCAyMTcsIDgyLCAxLCAxOTAsIDIxNywgODIsIDEsIAotICAgIDI1MiwgMTkxLCAyMTcsIDgyLCAxLCAxODQsIDIxNywgODIsIDEsIDE5MSwgMjE3LCA4MiwgMSwgMjMzLCAxMzUsIDIxNywgCi0gICAgODIsIDEsIDIxMiwgNjUsIDIxNywgODIsIDEsIDIwNiwgMjE3LCA4MiwgMjUsIDUsIDczLCAyMTcsIDgyLCAyNSwgNSwgNzAsIAotICAgIDY5LCAxLCAxNzYsIDY5LCAxLCAyMzQsIDEzMiwgNjksIDEsIDIzNCwgMjgsIDY5LCAxLCAyMzQsIDEwNSwgNjksIDEsIDIyOSwgCi0gICAgNCwgNjksIDEsIDI1MSwgMzMsIDY5LCAxLCAyNTAsIDE1NywgNjksIDEsIDI0OSwgMjM4LCA2OSwgMSwgMjUwLCA4NiwgNjksIAotICAgIDEsIDIyNywgMTM0LCA2OSwgMSwgMjQ4LCAyMjEsIDY5LCAxLCAyMTUsIDE0NCwgNjksIDEsIDI0NywgMTQ1LCA2OSwgMSwgCi0gICAgMjE1LCAxMzksIDY5LCAxLCAyMjgsIDgwLCA2OSwgMSwgMjE3LCAxMDUsIDY5LCAxLCAyMTYsIDIwOCwgNjksIDEsIDExMSwgCi0gICAgNjksIDEsIDIxNiwgMTU2LCA2OSwgMSwgMjI4LCA3NCwgNjksIDEsIDI1MiwgMTkxLCA2OSwgMSwgMjI1LCAxNDcsIDY5LCAxLCAKLSAgICAyMjUsIDE2LCA2OSwgMSwgMjI1LCAxMjEsIDY5LCAxLCAyMzAsIDE2MSwgNjksIDEsIDIxMCwgMjQ0LCA2OSwgMSwgMjIyLCAKLSAgICAyMTEsIDY5LCAxLCAyMzIsIDE1NiwgNjksIDEsIDIxMywgMTM4LCA2OSwgMSwgMjIwLCAxMDIsIDY5LCAxLCAyMTgsIDE4NCwgCi0gICAgNjksIDEsIDIwNiwgNjksIDEsIDE2MiwgNjksIDEsIDIzMywgMTM1LCA2OSwgMSwgMjI0LCA4OCwgNjksIDIzNSwgMjQzLCAKLSAgICAyNSwgMjI0LCA3NCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA4NywgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA1MywgNjksIAotICAgIDIzNSwgMjQzLCAyNSwgMjI0LCA0OCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzMCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAKLSAgICAyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjMsIDI0NiwgNjksIDIzNSwgMjQzLCAyNSwgMjIzLCAyNDUsIDY5LCAyMzUsIDI0MywgCi0gICAgMjUsIDIyMiwgMTAwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjIsIDkzLCA2OSwgMjM1LCAyNDMsIDI1LCAyMzIsIDYyLCA2OSwgCi0gICAgMjM1LCAyNDMsIDI1LCAyMzIsIDUyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDY5LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIAotICAgIDgwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDM4LCAyMTUsIDQ5LCAxMTAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzgsIAotICAgIDIxNSwgNDksIDEwNSwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA3MCwgNjksIDI1LCAyMzUsIDIyOSwgMjU0LCA0NSwgNjksIAotICAgIDI1LCAyMzUsIDIyOSwgMjU1LCA3MywgNjksIDI1LCA1LCAyNTUsIDczLCA2OSwgMjUsIDUsIDczLCA2OSwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDY5LCAyNSwgNSwgMjExLCAxMTcsIDY5LCAyNSwgNSwgMjEwLCAxNjksIDY5LCAyNSwgNSwgNzAsIDY5LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDY5LCAyNSwgNSwgMjE0LCAyMjksIDY5LCAyNSwgNSwgMjI2LCAyMzQsIDY5LCAyNSwgNSwgMTkxLCA2OSwgCi0gICAgMjUsIDUsIDIzNiwgNjAsIDY5LCAyNSwgNSwgNzUsIDY5LCAyNSwgNSwgMjU0LCAyNDMsIDY5LCAyNSwgNSwgMjU0LCAyMDEsIAotICAgIDY5LCAyNSwgNSwgMjI2LCAxODMsIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDY5LCA1LCAyMjgsIDIwNiwgNjksIDUsIDIyMywgCi0gICAgMTI2LCA2OSwgNSwgMjEwLCAxODAsIDY5LCA1LCAyMzAsIDUyLCA2OSwgNSwgMjE1LCAyMTMsIDY5LCA1LCAyNTIsIDE0MywgCi0gICAgNjksIDUsIDIyMiwgMjA2LCA2OSwgNSwgMjE2LCA0MCwgNjksIDUsIDIzNCwgMjQxLCA2OSwgNSwgMjU0LCAyMDMsIDY5LCA1LCAKLSAgICAyMjEsIDI0NCwgMjIxLCAyMzgsIDY5LCA1LCAyMTMsIDE0OSwgNjksIDUsIDI0OSwgMjMyLCA2OSwgNSwgMjUyLCAxMTcsIAotICAgIDY5LCA1LCAyMzQsIDEyNSwgNjksIDUsIDI1MiwgMTM3LCA2OSwgNSwgMjUxLCA5LCAyMjUsIDcyLCAyMzMsIDE4NywgNjksIAotICAgIDUsIDIzMywgMzAsIDIxNiwgMTcsIDY5LCA1LCAyNTIsIDIwLCA2OSwgNSwgMjI1LCAxMjMsIDIzMCwgOTksIDY5LCA1LCAKLSAgICAyMzQsIDksIDY5LCAyNDksIDk4LCAxNiwgMjIzLCAyOCwgNjksIDUsIDI1MywgMTc0LCA2OSwgNSwgMjUzLCAxOTUsIDY5LCAKLSAgICAyMSwgMjEwLCA4NiwgNjksIDIxLCAxMTAsIDY5LCAyMSwgMTA1LCA2OSwgMjEsIDE1OCwgNjksIDIxLCAxNjEsIDY5LCAyMSwgCi0gICAgMTg5LCA2OSwgMjEsIDE5NCwgNjksIDIxLCAxOTgsIDY5LCAyMSwgMTk1LCA2OSwgMjEsIDIwMCwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjE5LCA0MywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjMwLCA3MSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI1LCA3MSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjUyLCA0OSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjUxLCAxMDMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjE1LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjQsIDIwOSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMDcsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNCwgMjEzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIxMSwgODMsIDI1MSwgMjM2LCAKLSAgICA4MywgMjQ1LCAxNjMsIDgzLCAyNDksIDIxOSwgODMsIDI0MywgMjI5LCAyMTgsIDEyOSwgODMsIDI0OSwgMjI2LCA4MywgCi0gICAgMjQ0LCAxMSwgMjQ3LCAxMTgsIDgzLCAyMTYsIDM5LCAyMTksIDUyLCAyNDAsIDE2OCwgODMsIDIxOSwgMTkwLCAzLCAyNTEsIAotICAgIDE3MiwgMjMxLCAxNTQsIDgzLCAyMzEsIDE4MywgMjQ5LCAyMTksIDgzLCAyMzEsIDE4MywgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MywgMjI4LCAxOTEsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxMTAsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgCi0gICAgMTU3LCAxMDUsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxNTgsIDgzLCAyNSwgMjIwLCAxMzcsIDgzLCAyMSwgMjEwLCAKLSAgICA4NiwgODMsIDIxLCAxMTAsIDgzLCAyMSwgMTA1LCA4MywgMjEsIDE1OCwgODMsIDIxLCAxNjEsIDgzLCAyMSwgMTg5LCA4MywgCi0gICAgMjEsIDE5NCwgODMsIDIxLCAxOTgsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDIwMCwgODMsIDEsIDYxLCA4MywgMSwgNzUsIDgzLCAKLSAgICAxLCA3MywgODMsIDEsIDc2LCA4MywgMSwgNzAsIDgzLCAxLCAyMjYsIDIzNCwgODMsIDEsIDIxNCwgMjE0LCA4MywgMSwgCi0gICAgMjQ1LCAyMDksIDgzLCAxLCAxOTcsIDgzLCAxLCAyNTQsIDExNSwgODMsIDEsIDI1MiwgMTkxLCA4MywgMSwgMTkwLCA4MywgCi0gICAgMSwgMjI0LCA4OCwgODMsIDEsIDI0MywgMTM1LCA4MywgMSwgMTg0LCA4MywgMSwgMjMzLCAxMzUsIDgzLCAxLCAyMDYsIDgzLCAKLSAgICAxLCAyMjAsIDEwMiwgODMsIDEsIDIxNywgMTA1LCA4MywgMSwgMjQ4LCAyMjEsIDgzLCAxLCAyNTAsIDE1NywgODMsIDEsIAotICAgIDIzNSwgMTQxLCA4MywgMSwgMTkxLCA4MywgMSwgMjA1LCA4MywgMSwgMjEyLCA2NSwgODMsIDEsIDI0NCwgMTk2LCA4MywgMSwgCi0gICAgMTc2LCA4MywgMSwgMjM0LCAxMzIsIDgzLCAxLCAyMTUsIDE4MywgODMsIDEsIDIxMCwgMTE2LCA4MywgMSwgMjQyLCA0NiwgCi0gICAgODMsIDEsIDIxMCwgMTYsIDgzLCAxLCAyMzIsIDI1NCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExMCwgODMsIDEsIAotICAgIDIxNiwgMzksIDE5OSwgMjUsIDUwLCA4MywgMSwgMjE2LCAzOSwgNzUsIDgzLCAxLCAyMTYsIDM5LCA3MywgODMsIDEsIDIxNiwgCi0gICAgMzksIDc2LCA4MywgMSwgMjE2LCAzOSwgNzAsIDgzLCAxLCAyMTYsIDM5LCAyMjYsIDIzNCwgODMsIDEsIDIxNiwgMzksIAotICAgIDIxNCwgMjE0LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxMTUsIDgzLCAxLCAyMTYsIDM5LCAyNTIsIDE5MSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE5MCwgODMsIDEsIDIxNiwgMzksIDIyNCwgODgsIDgzLCAxLCAyMTYsIDM5LCAyNDMsIDEzNSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE4NCwgODMsIDEsIDIxNiwgMzksIDIxNywgMTA1LCA4MywgMSwgMjE2LCAzOSwgMjQ4LCAyMjEsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAyNTAsIDE1NywgODMsIDEsIDIxNiwgMzksIDIzNSwgMTQxLCA4MywgMSwgMjE2LCAzOSwgMjE1LCAxODMsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAxOTEsIDgzLCAxLCAyMTYsIDM5LCAyMTIsIDY1LCA4MywgMSwgMjE2LCAzOSwgMTc2LCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMjQzLCAxMzIsIDgzLCAxLCAyMTYsIDM5LCAyNDIsIDQ2LCA4MywgMSwgMjE2LCAzOSwgMjM1LCAxMDcsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAyMjgsIDIzMSwgODMsIDEsIDIxNiwgMzksIDI0NiwgMzgsIDgzLCAxLCAyMTksIDE5MCwgNzUsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgNzMsIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNTIsIDgzLCAxLCAyMTksIDE5MCwgMjE0LCAyMTQsIDgzLCAKLSAgICAxLCAyMTksIDE5MCwgNzAsIDgzLCAxLCAyMTksIDE5MCwgMjU0LCAxMTUsIDgzLCAxLCAyMTksIDE5MCwgMTc2LCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDI0MywgMTM1LCA4MywgMSwgMjE5LCAxOTAsIDE2MiwgODMsIDEsIDIxOSwgMTkwLCAxOTAsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjIwLCAxMDIsIDgzLCAxLCAyMTksIDE5MCwgMjE3LCAxMDUsIDgzLCAxLCAyMTksIDE5MCwgMjQ4LCAyMjEsIAotICAgIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNDEsIDgzLCAxLCAyMTksIDE5MCwgMjQ0LCAxOTYsIDgzLCAxLCAyMTksIDE5MCwgCi0gICAgMjQzLCAxMzIsIDgzLCAxLCAyMTksIDE5MCwgMjQyLCA0NiwgODMsIDEsIDIxOSwgMTkwLCAyMTUsIDE4MywgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyMTAsIDExNiwgODMsIDEsIDIxOSwgMTkwLCAyMjMsIDE4NCwgODMsIDEsIDIxOSwgMTkwLCAyNTAsIDE1NywgCi0gICAgODMsIDEsIDIxOSwgMTkwLCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDczLCA4MywgMSwgMjMxLCAxODMsIDE3NiwgODMsIAotICAgIDEsIDIzMSwgMTgzLCAyMDUsIDgzLCAxLCAyMzEsIDE4MywgMjQ0LCAxOTYsIDgzLCAxLCAyMzEsIDE4MywgMjEwLCA4MiwgCi0gICAgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjU0LCA3NiwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTMsIAotICAgIDE0OCwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDE4NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzNSwgMTkzLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTYyLCAKLSAgICAyNDMsIDExNiwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDEzNCwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIAotICAgIDE2MiwgMjQzLCAxMTYsIDYxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCA3MywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMTc2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjksIDc3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyNTEsIDMzLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTUsIDE1NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE1LCAxNDQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMTM1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMjgsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDI0OCwgMjIxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxOTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyNSwgCi0gICAgMTQ3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTgsIDIyMywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICA4MiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1NCwgCi0gICAgMjA5LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIxNiwgMzksIDI1NCwgCi0gICAgMTYyLCAyNDMsIDExNiwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0MiwgMjQ5LCAKLSAgICA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI5LCA3NywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgCi0gICAgMjQzLCAxMTYsIDI1MSwgMzMsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzUsIDExNCwgODMsIDEsIAotICAgIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNSwgMTU2LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAxMTksIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIzMSwgCi0gICAgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMjUsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTgsIDIyMywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OSwgNzIsIDgzLCAxLCAyMzEsIDE4MywgCi0gICAgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgNzAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgCi0gICAgMTkxLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjUyLCAxOCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAyMTEsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzIsIDI1NCwgMTgsIDE5LCAKLSAgICAyMjYsIDEwOSwgMTgsIDE5LCAyNTMsIDE2NywgMTgsIDE5LCAyNTUsIDI4LCAxOCwgMTksIDIxMiwgMjUsIDE4LCAxOSwgCi0gICAgMjI0LCAyMjEsIDE4LCAxOSwgMjI1LCAyMjksIDE4LCAxOSwgMjI0LCAxMDUsIDE4LCAxOSwgMjE3LCAzMSwgMTgsIDE5LCAKLSAgICAyMzQsIDE4OSwgMTgsIDE5LCAyMzMsIDE3OSwgMTgsIDE5LCAyMzEsIDEzMiwgMTgsIDE5LCAyMjgsIDM3LCAxOCwgMTksIAotICAgIDIyOSwgMTgxLCAxOCwgMTksIDIzMywgNjgsIDE4LCAxOSwgMjE5LCAyMiwgMTgsIDE5LCAyMjEsIDIxMSwgMTgsIDE5LCAKLSAgICAyMTksIDIzMiwgMTgsIDE5LCAyMjAsIDY2LCAxOCwgMTksIDIxOSwgMjAxLCAxOCwgMTksIDIxMCwgMjIwLCAxOCwgMTksIAotICAgIDIxMSwgNTIsIDE4LCAxOSwgMjIzLCAxMzQsIDE4LCAxOSwgMjI3LCAxNzEsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTcxLCAKLSAgICAxOCwgMTksIDIyNywgMTcwLCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE3MCwgMTgsIDE5LCAyMjcsIDE2OSwgMTgsIDE5LCAKLSAgICAyMjYsIDIxNiwgMjI3LCAxNjksIDE4LCAxOSwgMjI3LCAxNjgsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTY4LCAxOCwgMTksIAotICAgIDIyMiwgMTA1LCAxOCwgMTksIDIyMiwgMTA0LCAxOCwgMTksIDIyMiwgMTAzLCAxOCwgMTksIDIyMiwgMTAyLCAxOCwgMTksIAotICAgIDIyMiwgMTAxLCAxOCwgMTksIDIyMiwgMTA5LCAxOCwgMTksIDIyNiwgMjE2LCAyMjYsIDEwNSwgMTgsIDE5LCAyMjYsIDIxNiwgCi0gICAgMjE3LCAxNTIsIDE4LCAxOSwgMjI2LCAyMTYsIDIzNSwgMjMsIDE4LCAxOSwgMjI2LCAyMTYsIDI1MSwgNjYsIDE4LCAxOSwgCi0gICAgMjI2LCAyMTYsIDE5MywgMTgsIDE5LCAyMjYsIDIxNiwgMjMwLCAyNSwgMTgsIDE5LCAyMjYsIDIxNiwgMjIyLCA5MSwgMTgsIAotICAgIDE5LCAyMjYsIDIxNiwgMjIwLCAxMDQsIDE4LCAxOSwgMjQ1LCAyMTksIDIxMiwgOTgsIDE4LCAxOSwgMjEyLCA3LCAyMTIsIAotICAgIDk4LCAxOCwgMTksIDQwLCA0LCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgMjIzLCAxNTcsIDI0NywgMTIwLCAxOCwgMTksIDIyMywgCi0gICAgMjIzLCAyMjIsIDEwNiwgMTgsIDE5LCAxNTksIDIzMiwgMTI3LCAxOCwgMTksIDE1OSwgMjMzLCAxMzQsIDE4LCAxOSwgMjE2LCAKLSAgICAxMjYsIDE4LCAxOSwgMjE2LCAxMjgsIDE4LCAxOSwgMjE1LCAxMzYsIDE4LCAxOSwgMjE1LCAxMzgsIDE4LCAxOSwgMjE1LCAKLSAgICAxNDMsIDE4LCAxOSwgMjE2LCA0OSwgMTgsIDE5LCAyMTYsIDUxLCAxOCwgMTksIDIyMSwgMjA5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjIwLCAxLCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDUzLCAxOCwgMTksIDcyLCAyNDIsIDczLCAxOCwgCi0gICAgMTksIDcyLCAyNDgsIDUyLCAyNDMsIDU1LCAxOCwgMTksIDcyLCAyNDMsIDEzMiwgMTgsIDE5LCA3MiwgMjQyLCA3OCwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjM1LCAzMywgMTgsIDE5LCA3MiwgMjM1LCAzMSwgMTgsIDE5LCAyNTIsIDY4LCAyNDgsIDUyLCAKLSAgICAxNTYsIDE4LCAxOSwgMjUyLCA2OCwgMjQ4LCA1MiwgMTUzLCAxOCwgMTksIDcyLCAyNDgsIDQ3LCAyMjIsIDkxLCAyMzIsIAotICAgIDIyMywgMjEzLCAxMjIsIDIzMywgMTAsIDIzMiwgMjIzLCAxLCAxNzYsIDIzMiwgMjIzLCAxLCAyMzQsIDEzMiwgMjMyLCAKLSAgICAyMjMsIDEsIDI0MywgMTM1LCAyMzIsIDIyMywgMSwgMjQyLCAyNDksIDIzMiwgMjIzLCAxLCAyMjksIDc3LCAyMzIsIDIyMywgCi0gICAgMSwgMjUxLCAzMywgMjMyLCAyMjMsIDEsIDI1MCwgMTU3LCAyMzIsIDIyMywgMSwgMjM1LCAxNDEsIDIzMiwgMjIzLCAxLCAKLSAgICAyMzUsIDExNCwgMjMyLCAyMjMsIDEsIDIxMSwgNzEsIDIzMiwgMjIzLCAxLCAyMTcsIDEwNSwgMjMyLCAyMjMsIDEsIDIxNiwgCi0gICAgMjA4LCAyMzIsIDIyMywgMSwgMjQ4LCAyMjEsIDIzMiwgMjIzLCAxLCAyNDgsIDI1LCAyMzIsIDIyMywgMSwgMTk3LCAyMzIsIAotICAgIDIyMywgMSwgMTkwLCAyMzIsIDIyMywgMSwgMjI1LCAxNDcsIDIzMiwgMjIzLCAxLCAyNTIsIDE5MSwgMjMyLCAyMjMsIDEsIAotICAgIDI1MiwgMTgsIDIzMiwgMjIzLCAxLCAxODQsIDIzMiwgMjIzLCAxLCAxOTEsIDIzMiwgMjIzLCAxLCAyMDUsIDIzMiwgMjIzLCAKLSAgICAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDEsIDIxMiwgNjUsIDIzMiwgMjIzLCAxLCAyMjAsIDEwMiwgMjMyLCAyMjMsIDEsIAotICAgIDIxOCwgMjIzLCAyMzIsIDIyMywgMSwgMjA2LCAyMzIsIDIyMywgMSwgMTYyLCAyMzIsIDIyMywgMjUsIDUsIDYxLCAyMzIsIAotICAgIDIyMywgMjUsIDUsIDczLCAyMzIsIDIyMywgMjUsIDUsIDcwLCAyMzIsIDIyMywgMjUsIDUsIDI0NSwgMjA5LCAyMzIsIDIyMywgCi0gICAgMjUsIDUsIDI1NCwgMjAxLCAyMzIsIDIyMywgMjUsIDUsIDIyNiwgMTgzLCAyMzIsIDIyMywgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAyMzIsIDIyMywgMjUsIDUsIDc1LCAyMzIsIDIyMywgMjUsIDUsIDc2LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMTkxLCAyMzIsIAotICAgIDIyMywgMjE4LCA3MywgMSwgMjA1LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMjEyLCA2NSwgMjMyLCAyMjMsIDQsIDEsIDE3NiwgCi0gICAgMjMyLCAyMjMsIDQsIDEsIDIyOSwgNzcsIDIzMiwgMjIzLCA0LCAxLCAyNTQsIDc1LCAyMzIsIDIyMywgNCwgMSwgMjE3LCAKLSAgICAxMDUsIDIzMiwgMjIzLCA0LCAxLCAxOTcsIDIzMiwgMjIzLCA0LCAxLCAxOTAsIDIzMiwgMjIzLCA0LCAxLCAxODQsIDIzMiwgCi0gICAgMjIzLCA0LCAxLCAyMDUsIDIzMiwgMjIzLCA0LCAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDUsIDIzMCwgODksIDIzMiwgMjIzLCAKLSAgICA1LCAyMzQsIDE3MSwgMjMyLCAyMjMsIDUsIDIyMiwgMzIsIDIzMiwgMjIzLCA1LCAyMzIsIDEyNywgMjMyLCAyMjMsIDI0NSwgCi0gICAgMzEsIDc4LCAyMzIsIDIyMywgMjI0LCAxMywgNzgsIDIzMiwgMjIzLCAyMSwgMjEwLCA4NiwgMjMyLCAyMjMsIDIxLCAxMTAsIAotICAgIDIzMiwgMjIzLCAyMSwgMTA1LCAyMzIsIDIyMywgMjEsIDE1OCwgMjMyLCAyMjMsIDIxLCAxNjEsIDIzMiwgMjIzLCAyMSwgCi0gICAgMTg5LCAyMzIsIDIyMywgMjEsIDE5NCwgMjMyLCAyMjMsIDIxLCAxOTgsIDIzMiwgMjIzLCAyMSwgMTk1LCAyMzIsIDIyMywgCi0gICAgMjEsIDIwMCwgMzksIDIzMywgNTksIDEsIDE3NiwgMzksIDIzMywgNTksIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjI5LCA3NywgMzksIDIzMywgNTksIDEsIDIxNSwgMTgzLCAzOSwgMjMzLCA1OSwgMSwgMjA2LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTkxLCAzOSwgMjMzLCA1OSwgMSwgMjE3LCAxMDUsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDIwOCwgMzksIDIzMywgNTksIDEsIAotICAgIDIzMywgMTM1LCAzOSwgMjMzLCA1OSwgMSwgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjI1LCAxNDcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxODQsIDM5LCAyMzMsIDU5LCAxLCAyNDQsIDE5NiwgMzksIDIzMywgNTksIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxNjIsIDM5LCAyMzMsIDU5LCAxLCAyMjQsIDg4LCAzOSwgMjMzLCA1OSwgMSwgMjM0LCAxMzIsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMTUsIDE3NSwgMzksIDIzMywgNTksIDEsIDE5NywgMzksIDIzMywgNTksIDEsIDYxLCAzOSwgMjMzLCA1OSwgMSwgNzMsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyNDUsIDIwOSwgMzksIDIzMywgNTksIDEsIDI0NSwgMTk3LCAzOSwgMjMzLCA1OSwgMSwgNzAsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMjYsIDE4MywgMzksIDIzMywgNTksIDEsIDc2LCAzOSwgMjMzLCA1OSwgMSwgMjE0LCAyMTQsIAotICAgIDM5LCAyMzMsIDU5LCAxLCA3NSwgMzksIDIzMywgNTksIDEsIDI1MywgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjU0LCAyMDEsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI4LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNywgMzksIDIzMywgNTksIDEsIDIxNiwgCi0gICAgMjYsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI1LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNCwgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjUsIDIyNCwgODgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjQsIDg4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDc3LCAxNjYsIDM5LCAKLSAgICAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyMjksIDc3LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE1LCAxODMsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTUsIDE4MywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA1LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTcsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTIxLCAyMTcsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNiwgMjA4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk3LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNDcsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE0NywgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMTk2LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTM1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjQ0LCAxOTYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxMzUsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyMSwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDI1MiwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAKLSAgICAyMjEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTg0LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE4NCwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE4LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDIxOCwgODIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAyMTksIDIzOSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA3MywgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCAzMywgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzAsIDE2NiwgMzksIDE3MywgMjUsIAotICAgIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNDMsIDE2NiwgCi0gICAgMzksIDE3MywgMjUsIDUsIDc2LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTMsIDE2NywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAyOCwgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTA5LCAxNjYsIDM5LCAKLSAgICAxNzMsIDI1LCA1LCAyMjYsIDI1MywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAyMTAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIzNSwgMTUyLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMTQsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjI5LCA3OSwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjMwLCAyNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMTkzLCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDQwLCAyMzUsIDIzLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNDksIDYwLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNTMsIDE1OCwgCi0gICAgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNTcsIDE2NiwgMzksIDE3MywgCi0gICAgMjEsIDIxMCwgODYsIDE2NiwgMzksIDE3MywgMjEsIDExMCwgMTY2LCAzOSwgMTczLCAyMSwgMTA1LCAxNjYsIDM5LCAxNzMsIAotICAgIDIxLCAxNTgsIDE2NiwgMzksIDE3MywgMjEsIDE2MSwgMTY2LCAzOSwgMTczLCAyMSwgMTg5LCAxNjYsIDM5LCAxNzMsIDIxLCAKLSAgICAxOTQsIDE2NiwgMzksIDE3MywgMjEsIDE5OCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAyMDAsIAotICAgIDE2NiwgMzksIDE3MywgODksIDIxLCAxMTAsIDE2NiwgMzksIDE3MywgNSwgMjMzLCAxMjAsIDE2NiwgMzksIDE3MywgNSwgCi0gICAgMjMzLCAxMTksIDY5LCAxNiwgMjI1LCAyMzYsIDY5LCAxNiwgMjMwLCA3MiwgMjM0LCAyNSwgNjksIDE2LCAyMjUsIDcyLCAKLSAgICAyMzQsIDI1LCA2OSwgMTYsIDI1MiwgNTAsIDIzNCwgMjUsIDY5LCAxNiwgMjUxLCAxMDQsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTYsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTAsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMDgsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjI0LCAyMTQsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTIsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzMsIAotICAgIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjksIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjgsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjQ4LCAxNzEsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjcsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjE1LCA4NywgNjksIDE2LCAyMzAsIDcyLCAyMjIsIDIwNSwgNjksIDE2LCAyMjUsIDcyLCAyMjIsIDIwNSwgCi0gICAgNjksIDE2LCAyNTIsIDUwLCAyMjIsIDIwNSwgNjksIDE2LCAyNTEsIDEwNCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTYsIAotICAgIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEwLCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIwOCwgMjIyLCAyMDUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTQsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEyLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE3MywgMjIyLCAKLSAgICAyMDUsIDY5LCAxNiwgMjQ4LCAxNjksIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY4LCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIAotICAgIDE3MSwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY3LCAyMjIsIDIwNSwgCi0gICAgMjUxLCAxMjEsIDEsIDE3NiwgMjUxLCAxMjEsIDEsIDI0MywgMTM1LCAyNTEsIDEyMSwgMSwgMjI5LCA3NywgMjUxLCAxMjEsIAotICAgIDEsIDIyOSwgMjIsIDI1MSwgMTIxLCAxLCAxOTAsIDI1MSwgMTIxLCAxLCAyNTIsIDE5MSwgMjUxLCAxMjEsIDEsIDE4NCwgCi0gICAgMjUxLCAxMjEsIDEsIDIzMCwgMTA1LCAyNTEsIDEyMSwgMSwgMjE3LCAxMDUsIDI1MSwgMTIxLCAxLCAyNDgsIDIyMSwgMjUxLCAKLSAgICAxMjEsIDEsIDE5NywgMjUxLCAxMjEsIDEsIDIyOCwgMzYsIDI1MSwgMTIxLCAxLCAyNTEsIDMzLCAyNTEsIDEyMSwgMSwgCi0gICAgMjM1LCAxNDEsIDI1MSwgMTIxLCAxLCAyMjcsIDE2NSwgMjUxLCAxMjEsIDEsIDIyNywgMTU4LCAyNTEsIDEyMSwgMSwgMTkxLCAKLSAgICAyNTEsIDEyMSwgMSwgMjA1LCAyNTEsIDEyMSwgMSwgMjMzLCAxMzUsIDI1MSwgMTIxLCAxLCAyMTQsIDI3LCAyNTEsIDEyMSwgCi0gICAgMSwgMjA2LCAyNTEsIDEyMSwgMSwgNjEsIDI1MSwgMTIxLCAxLCAxNjIsIDI1MSwgMTIxLCAyNSwgNSwgNzMsIDI1MSwgMTIxLCAKLSAgICAyNSwgNSwgNzAsIDI1MSwgMTIxLCAyNSwgNSwgNzUsIDI1MSwgMTIxLCAyNSwgNSwgNzYsIDI1MSwgMTIxLCAyNSwgNSwgCi0gICAgMjU0LCAyNDMsIDI1MSwgMTIxLCAyMjYsIDYwLCAyNTEsIDEyMSwgMjQ1LCAxNDMsIDY0LCAyMjEsIDE3MiwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDE3NiwgMzksIDg5LCAxLCAxMjUsIDIzNCwgMTMyLCAzOSwgODksIDEsIDEyNSwgMjMzLCAxNzEsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAxNzYsIDM5LCA4OSwgMSwgMTIxLCAyMzMsIDE3MSwgMzksIDg5LCAxLCAxMjEsIDIzNCwgMTMyLCAzOSwgODksIDEsIAotICAgIDIyOSwgNzcsIDM5LCA4OSwgMSwgMTI1LCAyNTEsIDMzLCAzOSwgODksIDEsIDEyNSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAyNTEsIDMzLCAzOSwgODksIDEsIDEyMSwgMjA2LCAzOSwgODksIDEsIDEyMSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMjI3LCAxNjUsIDM5LCA4OSwgMSwgMjIzLCAxNDAsIDM5LCA4OSwgMSwgMTI1LCAyMjMsIDEzOCwgMzksIDg5LCAxLCAyNDgsIAotICAgIDIyMSwgMzksIDg5LCAxLCAxMjEsIDIyMywgMTM4LCAzOSwgODksIDEsIDIyMywgMTQ5LCAzOSwgODksIDEsIDEyNSwgMjE3LCAKLSAgICAxMDUsIDM5LCA4OSwgMSwgMTI1LCAyMTYsIDIwOCwgMzksIDg5LCAxLCAxMjEsIDIxNywgMTA1LCAzOSwgODksIDEsIDEyMSwgCi0gICAgMjE2LCAyMDgsIDM5LCA4OSwgMSwgMTk3LCAzOSwgODksIDEsIDI1MiwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkwLCAzOSwgCi0gICAgODksIDEsIDEyNSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTI1LCAyNDQsIDE5NiwgMzksIDg5LCAxLCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxLCAxMjEsIDI0NCwgMTk2LCAzOSwgODksIDEsIDEyMSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTg0LCAzOSwgODksIAotICAgIDEsIDEyMSwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkxLCAzOSwgODksIDEsIDIwNSwgMzksIDg5LCAxLCAyMjIsIDEzNywgCi0gICAgMzksIDg5LCAxLCAyMzMsIDEzNSwgMzksIDg5LCAxLCAyMzIsIDkzLCAzOSwgODksIDEsIDIxMiwgNjUsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAyMjAsIDEwMiwgMzksIDg5LCAxLCAxMjUsIDIxOCwgMjIzLCAzOSwgODksIDEsIDEyNSwgMjA2LCAzOSwgODksIDEsIAotICAgIDEyNSwgMTYyLCAzOSwgODksIDEsIDIzMiwgMTg0LCAzOSwgODksIDEsIDYxLCAzOSwgODksIDEsIDEyMSwgMTYyLCAzOSwgCi0gICAgODksIDEsIDczLCAzOSwgODksIDEsIDIzNiwgMzMsIDM5LCA4OSwgMSwgNzAsIDM5LCA4OSwgMSwgMjE0LCAxMTgsIDM5LCAKLSAgICA4OSwgMSwgMjQ1LCAyMDksIDM5LCA4OSwgMSwgMjI2LCAxODMsIDM5LCA4OSwgMSwgMjMzLCAxMjAsIDM5LCA4OSwgMSwgCi0gICAgMjQyLCAxMzIsIDIwNiwgMzksIDg5LCAxMTYsIDUsIDE0NywgMjA1LCAzOSwgODksIDExNiwgNSwgMTQ3LCAyMzMsIDEzNSwgCi0gICAgMzksIDg5LCAxMTYsIDUsIDIzMywgMTM2LCAyMTcsIDU4LCAyMzMsIDEwOSwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAKLSAgICAyMzEsIDIzMywgMTA5LCAzOSwgODksIDExNiwgNSwgNDAsIDIyOSwgNzcsIDM5LCA4OSwgMTE2LCA1LCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxMTYsIDUsIDEyNSwgMjIzLCAxMzksIDE3NywgMTIxLCAxOTAsIDM5LCA4OSwgMTE2LCA1LCAxODQsIDM5LCA4OSwgCi0gICAgMTE2LCA1LCAyNTIsIDE5MSwgMzksIDg5LCAxMTYsIDUsIDIwNiwgMzksIDg5LCA1LCAyMjIsIDEwLCAzOSwgODksIDI1LCA1LCAKLSAgICA2MSwgMzksIDg5LCAyNSwgNSwgMjMxLCAyMDQsIDIyMSwgMjI2LCAzOSwgODksIDI1LCA1LCAyNTUsIDczLCAzOSwgODksIAotICAgIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCAzOSwgODksIDI1LCA1LCA3MywgMzksIDg5LCAyNSwgNSwgMjM2LCAzMywgMzksIAotICAgIDg5LCAyNSwgNSwgMjE0LCAyMTQsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE3LCAzOSwgODksIDI1LCA1LCA3MCwgMzksIDg5LCAKLSAgICAyNSwgNSwgMjE0LCAxMTgsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgODksIDI1LCA1LCAyMjcsIDEsIDUxLCAzOSwgODksIAotICAgIDI1LCA1LCAyMjYsIDEwOSwgMzksIDg5LCAyNSwgNSwgNzUsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjQzLCAzOSwgODksIDI1LCAKLSAgICA1LCAyMjYsIDE4MywgMzksIDg5LCAyNSwgNSwgMjU0LCAyMDEsIDM5LCA4OSwgMjUsIDUsIDg5LCAyNTQsIDIwMSwgMzksIAotICAgIDg5LCAyNSwgNSwgMjI3LCAxLCA0OCwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgCi0gICAgMzksIDg5LCA1LCAyMTYsIDI4LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgMjcsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAKLSAgICAyNiwgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIDI1LCAzOSwgODksIDUsIDIyMywgMTg4LCAyNDIsIDQ1LCAzOSwgODksIDUsIAotICAgIDIzMSwgMjA0LCAyMjEsIDI1MywgMzksIDg5LCA1LCAyMzQsIDk2LCAyMzQsIDIxNSwgMzksIDg5LCAzOCwgMjQ5LCAxMTUsIAotICAgIDI0NywgMTIwLCAzOSwgODksIDI0MSwgNDYsIDIxLCAyMTAsIDg2LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxMTAsIDM5LCA4OSwgCi0gICAgMjQxLCA0NiwgMjEsIDEwNSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTU4LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxNjEsIDM5LCAKLSAgICA4OSwgMjQxLCA0NiwgMjEsIDE4OSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk0LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTgsIAotICAgIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5NSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMjAwLCAzOSwgODksIDg5LCAyMSwgMjEwLCAKLSAgICA4NiwgMzksIDg5LCA4OSwgMjEsIDExMCwgMzksIDg5LCA4OSwgMjEsIDEwNSwgMzksIDg5LCA4OSwgMjEsIDE1OCwgMzksIAotICAgIDg5LCA4OSwgMjEsIDE2MSwgMzksIDg5LCA4OSwgMjEsIDE4OSwgMzksIDg5LCA4OSwgMjEsIDE5NCwgMzksIDg5LCA4OSwgCi0gICAgMjEsIDE5OCwgMzksIDg5LCA4OSwgMjEsIDE5NSwgMzksIDg5LCA4OSwgMjEsIDIwMCwgMzksIDg5LCA1LCAyMTEsIDI0OSwgCi0gICAgMzksIDg5LCA1LCAyMTEsIDI0OCwgMzksIDg5LCA1LCAyMjEsIDIxNSwgMzksIDg5LCA1LCAyMzQsIDE2MCwgMzksIDg5LCA1LCAKLSAgICAyNDAsIDIzMiwgMzksIDg5LCA1LCAyNDcsIDEzNCwgMzksIDg5LCA1LCAyMjMsIDQ5LCAyMjIsIDE4NywgMjIzLCAxNDksIAotICAgIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIxMSwgNzIsIDM5LCA4OSwgNSwgMjM1LCA2LCAzOSwgODksIDUsIDIzNSwgNSwgMzksIAotICAgIDg5LCA1LCAyMjEsIDIyMiwgMzksIDg5LCA1LCAyMjEsIDIyMSwgMzksIDg5LCA1LCAyNDIsIDksIDM5LCA4OSwgNSwgMjUxLCAKLSAgICAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjIzLCAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjUxLCAxLCAxMDIsIDUsIDI1MCwgCi0gICAgMTg2LCAxMDIsIDUsIDIxOCwgMTUsIDEwMiwgNSwgMjUxLCAyMzMsIDEwMiwgMSwgMjU0LCAxODQsIDEwMiwgMSwgMjU0LCAKLSAgICAxODUsIDIxNywgMTMsIDEwMiwgMSwgMjM2LCAyOSwgMTAyLCAxLCAyMzYsIDMwLCAyMTcsIDEzLCAxMDIsIDEsIDIxNCwgCi0gICAgMjAzLCAxMDIsIDEsIDIxNCwgMjA0LCAyMTcsIDEzLCAxMDIsIDEsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDEsIDIyMywgCi0gICAgMTg4LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIDI0LCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIAotICAgIDI1LCAyMTcsIDEzLCAxMDIsIDEsIDI0NSwgMTc5LCAxMDIsIDEsIDI1NCwgMTk5LCAxMDIsIDEsIDIyNiwgMjEyLCAxMDIsIAotICAgIDEsIDIyNiwgMjEzLCAyMTcsIDEzLCAxMDIsIDEsIDE3NiwgMTAyLCAxLCAyMzUsIDEzLCAyMzEsIDIwNywgMTAyLCAxLCAKLSAgICAyNDMsIDEzNSwgMTAyLCAxLCAyNDMsIDEzNiwgMjQyLCAxNjEsIDEwMiwgMSwgMjI5LCA3NywgMTAyLCAxLCAyNTEsIDMzLCAKLSAgICAxMDIsIDEsIDI1MSwgMzQsIDIzMywgMTIzLCAxMDIsIDEsIDIzNSwgMTQxLCAxMDIsIDEsIDIzNSwgMTQyLCAyMzUsIDExOCwgCi0gICAgMTAyLCAxLCAyMjcsIDE2NSwgMTAyLCAxLCAyMTcsIDEwNiwgMjMzLCA3NiwgMTAyLCAxLCAyMTcsIDEwNiwgMjMwLCA2NywgCi0gICAgMjMxLCAyMDcsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMCwgNjcsIDI1NCwgMTQ1LCAxMDIsIDEsIDI0OCwgMjIyLCAyMzAsIDY3LCAKLSAgICAyMzEsIDIwNywgMTAyLCAxLCAyMjksIDIyOSwgMjIzLCAxNTIsIDEwMiwgMSwgMjE3LCAxMDUsIDEwMiwgMSwgMjE3LCAxMDYsIAotICAgIDIxNywgMzUsIDEwMiwgMSwgMjQ4LCAyMjEsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMSwgMjI1LCAxMDIsIDEsIDE5NywgMTAyLCAKLSAgICAxLCAxOTAsIDEwMiwgMSwgMjI2LCA5MCwgMjM0LCAyMjYsIDEwMiwgMSwgMjUyLCAxOTEsIDEwMiwgMSwgMjUyLCAxOTIsIAotICAgIDIzNCwgMTcyLCAxMDIsIDEsIDE4NCwgMTAyLCAxLCAxOTEsIDEwMiwgMSwgMjA1LCAxMDIsIDEsIDIzMywgMTM1LCAxMDIsIAotICAgIDEsIDIxMiwgNjUsIDEwMiwgMSwgMjIyLCAzNCwgMjIyLCAyMCwgMTAyLCAxLCAyMjIsIDM0LCAyMjEsIDIzMywgMTAyLCAxLCAKLSAgICAyMDYsIDEwMiwgMSwgMTYyLCAxMDIsIDUsIDIyMywgNzAsIDEwMiwgMjUsIDUsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNCwgCi0gICAgMTk5LCAxMDIsIDI1LCA1LCAyMTQsIDIwMCwgMjIxLCAyMjksIDEwMiwgMjUsIDUsIDIxOCwgNDcsIDEwMiwgMjUsIDUsIAotICAgIDIxOCwgNDgsIDIzNiwgMjEsIDEwMiwgMjUsIDUsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDI1LCA1LCAyMjMsIDE4OCwgCi0gICAgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjMzLCAxMzYsIDIzMywgMjQsIDEwMiwgMjUsIDUsIDIzMywgMTM2LCAKLSAgICAyMzMsIDI1LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY1LCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDc5LCAxMDIsIAotICAgIDI1LCA1LCAyMTcsIDY2LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDI1LCAKLSAgICA1LCAyMjUsIDE4NCwgMTAyLCAyNSwgNSwgMjI1LCAxODUsIDIxNywgMTMsIDEwMiwgMjU0LCAyNTAsIDI1NCwgMjQ5LCAxMDIsIAotICAgIDEsIDIzNCwgMjUxLCAyMjEsIDIyOCwgMTAyLCAxLCAyMzQsIDEwMiwgMjIxLCAyMjgsIDEwMiwgMSwgMjE1LCAzNCwgMjIxLCAKLSAgICAyMjgsIDEwMiwgMSwgMjQ1LCAyMDMsIDIyMSwgMjI4LCAxMDIsIDEsIDIxNCwgMCwgMjIxLCAyMjgsIDEwMiwgMSwgMjEwLCAKLSAgICAxMDcsIDIyMSwgMjI4LCAxMDIsIDEsIDI1MywgMjA5LCAyMjEsIDIyOCwgMTAyLCAyMSwgMjEwLCA4NiwgMTAyLCAyMSwgCi0gICAgMTEwLCAxMDIsIDIxLCAxMDUsIDEwMiwgMjEsIDE1OCwgMTAyLCAyMSwgMTYxLCAxMDIsIDIxLCAxODksIDEwMiwgMjEsIAotICAgIDE5NCwgMTAyLCAyMSwgMTk4LCAxMDIsIDIxLCAxOTUsIDEwMiwgMjEsIDIwMCwgMTAyLCAyMjYsIDI5LCAxMDIsIDIyNiwgCi0gICAgNTUsIDEwMiwgMjExLCAyMzgsIDEwMiwgMjUwLCAyMzYsIDIyNiwgNDgsIDEwMiwgMjUwLCAyMzYsIDIxOSwgMTcyLCAxMDIsIAotICAgIDI1MCwgMjM2LCAyMjYsIDIsIDEwMiwgMjI2LCA1NCwgMTAyLCAyOCwgMTYsIDI0NywgMTI2LCAxMDIsIDI4LCAxNiwgMjQ4LCAKLSAgICA1MSwgMTAyLCAyOCwgMTYsIDI0NiwgNjQsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NiwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAKLSAgICAyMTgsIDE1LCAxMDIsIDI4LCAxNiwgMjQ3LCAyMDUsIDEwMiwgMjgsIDE2LCAyNDgsIDIxNCwgMTAyLCAyOCwgMTYsIDI0OCwgCi0gICAgMzMsIDEwMiwgMjgsIDE2LCAyNDgsIDE5OCwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAyNDMsIDU3LCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDIxNywgOSwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0MSwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE2NywgMTAyLCAKLSAgICAyOCwgMTYsIDM4LCAyMzQsIDE2OSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIAotICAgIDE2OCwgMiwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzAsIDIsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDI1MiwgMzcsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNjUsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjA0LCAyNDYsIAotICAgIDc0LCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDIwNCwgMjQ4LCAyMTIsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjUwLCAwLCAKLSAgICAyMTUsIDExMSwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyNTAsIDAsIDIxNywgNzMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAKLSAgICAyMDQsIDIyNiwgNDMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAyMDQsIDIyNCwgMTM5LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgCi0gICAgMjUwLCAwLCAyMjUsIDM4LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgMjUwLCAwLCAyMjUsIDI2LCAxMDIsIDI4LCAxNiwgMjMzLCAKLSAgICA0NCwgMjA0LCAyMjUsIDYxLCAyMDcsIDUsIDIyNiwgMjYsIDIwNywgNSwgMjI2LCAzOSwgMjA3LCA1LCAyMjYsIDM1LCAyMDcsIAotICAgIDEsIDYxLCAyMDcsIDEsIDczLCAyMDcsIDEsIDcwLCAyMDcsIDEsIDI1NCwgMjQzLCAyMDcsIDEsIDc2LCAyMDcsIDEsIDc1LCAKLSAgICAyMDcsIDEsIDI0NSwgNTUsIDIwNywgMSwgMTc2LCAyMDcsIDEsIDIyNCwgODgsIDIwNywgMSwgMjQzLCAxMzUsIDIwNywgMSwgCi0gICAgMjI5LCA3NywgMjA3LCAxLCAyNTEsIDMzLCAyMDcsIDEsIDIzNSwgMTQxLCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIAotICAgIDIyNywgMTY1LCAyMDcsIDEsIDIxNywgMTA1LCAyMDcsIDEsIDI0OCwgMjIxLCAyMDcsIDEsIDE5NywgMjA3LCAxLCAxOTAsIAotICAgIDIwNywgMSwgMjQ0LCAxOTYsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAyNTIsIDE5MSwgMjA3LCAxLCAxODQsIDIwNywgMSwgCi0gICAgMTkxLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDEzNSwgMjA3LCAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAKLSAgICAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE2LCA1LCAyMjYsIDUyLCAyMDcsIDExNiwgNSwgMjI2LCAyOCwgMjA3LCAKLSAgICAxMTYsIDUsIDIyNiwgMjUsIDIwNywgMjUsIDUsIDIyNiwgNDIsIDIwNywgMjUsIDUsIDIyNiwgMjQsIDIwNywgMjUsIDUsIAotICAgIDIyNiwgNDYsIDIwNywgMjUsIDUsIDIyNiwgMzQsIDIwNywgMjUsIDUsIDIyNiwgNTMsIDIwNywgMjUsIDUsIDIyNiwgNDQsIAotICAgIDIwNywgNSwgMjI2LCA1NiwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAxMTYsIDUsIDIyNSwgMjQ4LCAxODQsIDIwNywgMTE2LCAKLSAgICA1LCAyMjUsIDI0OCwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzMiwgMjA3LCAxLCAyMTcsIDIzMSwgMjA3LCAyMSwgMjEwLCAKLSAgICA4NiwgMjA3LCAyMSwgMTEwLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxODksIAotICAgIDIwNywgMjEsIDE5NCwgMjA3LCAyMSwgMTk4LCAyMDcsIDIxLCAxOTUsIDIwNywgMjEsIDIwMCwgMjA3LCAyNTMsIDE3NSwgCi0gICAgMjA3LCAxLCAyMjMsIDUyLCAyMDcsIDEsIDIzMywgNywgMjA3LCAxLCAyNTIsIDE4LCAyMDcsIDEsIDQwLCAyMzUsIDIzLCAKLSAgICAyMDcsIDEsIDQwLCAxOTMsIDI1MiwgMTIwLCAxLCA2MSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCA2MSwgMjUyLCAxMjAsIDEsIAotICAgIDE2MiwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAxNjIsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMTYyLCAyNTIsIDEyMCwgMSwgCi0gICAgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAyMzQsIDIxMiwgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAxOTAsIDI1MiwgMTIwLCAxLCAKLSAgICAyMTksIDE2NCwgMTkwLCAyNTIsIDEyMCwgMSwgMTk3LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDE5NywgMjUyLCAxMjAsIDEsIAotICAgIDIxMiwgNjUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjEyLCA2NSwgMjUyLCAxMjAsIDEsIDIyNiwgNjcsIDIxMiwgNjUsIAotICAgIDI1MiwgMTIwLCAxLCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIzNSwgCi0gICAgMTQxLCAyNTIsIDEyMCwgMSwgMjQ4LCAyMjEsIDI1MiwgMTIwLCAxLCAyMDUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjA1LCAKLSAgICAyNTIsIDEyMCwgMSwgMTg0LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDE4NCwgMjUyLCAxMjAsIDEsIDIxOSwgMjYsIDIxNywgCi0gICAgMTA1LCAyNTIsIDEyMCwgMSwgMjI4LCA1NSwgMjE3LCAxMDUsIDI1MiwgMTIwLCAxLCAyMDYsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjA2LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDIwNiwgMjUyLCAxMjAsIDEsIDE5MSwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAxOTEsIDI1MiwgMTIwLCAxLCAyMjksIDc3LCAyNTIsIDEyMCwgMSwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMjcsIDE2NSwgMjUyLCAxMjAsIDEsIDI1MSwgMzMsIDI1MiwgMTIwLCAxLCAKLSAgICAyMjksIDE0OCwgMjUyLCAxMjAsIDEsIDIzMSwgMTI0LCAyNTIsIDEyMCwgMSwgNzMsIDI1MiwgMTIwLCAxLCA3MCwgMjUyLCAKLSAgICAxMjAsIDUsIDIxNiwgMzMsIDI1MiwgMTIwLCAyNSwgNSwgNzUsIDI1MiwgMTIwLCAyNSwgNSwgMjI2LCA2NywgNzUsIDI1MiwgCi0gICAgMTIwLCAyNSwgNSwgMjQ1LCAyMDksIDI1MiwgMTIwLCAyNSwgNSwgNzMsIDI1MiwgMTIwLCAyNSwgNSwgMjM0LCAyMTIsIDczLCAKLSAgICAyNTIsIDEyMCwgMjUsIDUsIDc2LCAyNTIsIDEyMCwgMjUsIDUsIDIzNCwgMjEyLCA3NiwgMjUyLCAxMjAsIDI1LCA1LCA3MCwgCi0gICAgMjUyLCAxMjAsIDI1LCA1LCAxMDQsIDMxLCAyMTksIDE2NCwgMjA2LCAyNTIsIDEyMCwgMTE2LCA1LCAyMjksIDc5LCAyNTIsIAotICAgIDEyMCwgMTE2LCA1LCAyNDIsIDYwLCAyNTIsIDEyMCwgMjI2LCAzNywgMjUyLCAxMjAsIDIyNiwgMzMsIDI1MiwgMTIwLCAxNiwgCi0gICAgMjUxLCAyNDEsIDIyOSwgMjI5LCAyMzEsIDM3LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjUsIDY0LCAyNTIsIDEyMCwgCi0gICAgMTYsIDI1MSwgMjQxLCAyMzUsIDQ4LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjYsIDM3LCAxOTYsIDEsIDE3NiwgMTk2LCAKLSAgICAxLCAyMzQsIDM5LCAxOTYsIDEsIDIzNCwgMTMyLCAxOTYsIDEsIDI0MywgMTM1LCAxOTYsIDEsIDI0MiwgMTg2LCAxOTYsIDEsIAotICAgIDIyOSwgNzcsIDE5NiwgMSwgMjUxLCAzMywgMTk2LCAxLCAyNTAsIDE1NywgMTk2LCAxLCAyMzUsIDE0MSwgMTk2LCAxLCAKLSAgICAyMjcsIDE2NSwgMTk2LCAxLCAyMTcsIDEwNSwgMTk2LCAxLCAyMTYsIDIwOCwgMTk2LCAxLCAyNDgsIDIyMSwgMTk2LCAxLCAKLSAgICAxOTcsIDE5NiwgMSwgMTkwLCAxOTYsIDEsIDIyNSwgNDIsIDE5NiwgMSwgMjI1LCAxNDcsIDE5NiwgMSwgMjQ0LCAxOTYsIAotICAgIDE5NiwgMSwgMjQ0LCA3NSwgMTk2LCAxLCAyNTIsIDE5MSwgMTk2LCAxLCAyNTEsIDIyMiwgMTk2LCAxLCAxODQsIDE5NiwgMSwgCi0gICAgMjMwLCAxNjgsIDE5NiwgMSwgMjE1LCAxODMsIDE5NiwgMSwgMjE1LCAxNzUsIDE5NiwgMSwgMjQ2LCAzOCwgMTk2LCAxLCAKLSAgICAxOTEsIDE5NiwgMSwgMjA1LCAxOTYsIDEsIDIzMywgMTM1LCAxOTYsIDEsIDE2MiwgMTk2LCAxLCAyNDEsIDE1MywgMTk2LCAKLSAgICAxLCAyMTQsIDI3LCAxOTYsIDEsIDIwNiwgMTk2LCAxLCAyMjAsIDEwMiwgMTk2LCAxLCAyMTIsIDY1LCAxOTYsIDEsIDYxLCAKLSAgICAxOTYsIDIxOCwgNzMsIDEsIDE5MSwgMTk2LCAyMTgsIDczLCAxLCAyMDUsIDE5NiwgMjUsIDUsIDI1NSwgNzMsIDE5NiwgMjUsIAotICAgIDUsIDczLCAxOTYsIDI1LCA1LCA3NiwgMTk2LCAyNSwgNSwgMjI2LCAxODMsIDE5NiwgMjUsIDUsIDcwLCAxOTYsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTk2LCAyNSwgNSwgNzUsIDE5NiwgMTE2LCA1LCAyMzUsIDIzLCAxOTYsIDExNiwgNSwgMTkzLCAxOTYsIAotICAgIDExNiwgNSwgMTU2LCAxOTYsIDExNiwgNSwgMjMwLCAyNSwgMTk2LCAxMTYsIDUsIDIyNiwgMTA1LCAxOTYsIDExNiwgNSwgCi0gICAgMTUzLCAxOTYsIDExNiwgNSwgMjE3LCAxNTIsIDE5NiwgMTE2LCA1LCAyMjcsIDE0MiwgMTk2LCAxMTYsIDUsIDIzNCwgMjMwLCAKLSAgICAxOTYsIDUsIDIyMywgMTUwLCAxOTYsIDUsIDIyNywgMjA1LCAxOTYsIDIyNCwgMTQxLCAyMTcsIDEwMywgMTk2LCAyMjQsIAotICAgIDE0MSwgMjI3LCAxNTIsIDIxNiwgMTIwLCAyMTcsIDEwMywgMTk2LCAyMjQsIDE0MSwgMjUwLCAxNjQsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDIxNSwgMTcwLCAyNTAsIDE2NCwgMTk2LCAyMjQsIDE0MSwgMjE1LCAxNjksIDE5NiwgMjEsIDIxMCwgODYsIDE5NiwgCi0gICAgMjEsIDExMCwgMTk2LCAyMSwgMTA1LCAxOTYsIDIxLCAxNTgsIDE5NiwgMjEsIDE2MSwgMTk2LCAyMSwgMTg5LCAxOTYsIDIxLCAKLSAgICAxOTQsIDE5NiwgMjEsIDE5OCwgMTk2LCAyMSwgMTk1LCAxOTYsIDIxLCAyMDAsIDE5NiwgMSwgMjE1LCAxNTYsIDE5NiwgMSwgCi0gICAgMjE1LCAxNDQsIDE5NiwgMSwgMjQ4LCAxMzUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDIxMCwgODYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMjEsIDExMCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTA1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAKLSAgICAxNTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE2MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTg5LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDIxLCAxOTQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE5OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgCi0gICAgMTk1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAyMDAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAxMzUsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjUzLCAyMDYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAyMTYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjU0LCAxMTUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAxNzgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjMzLCAxMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAzNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAKLSAgICAyNTUsIDM2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAyOSwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDI0MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzUsIDE3MSwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyMzYsIDM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzNSwgMTkwLCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIzNSwgMTc5LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgOTgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjE0LCAyMjEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAyMTksIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgCi0gICAgMjE0LCAxNjgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAxMTEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAKLSAgICA1OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDEwOCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDIxMiwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDE1MCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDg2LCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgMTU2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTM3LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIyNiwgMjUyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTI1LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIyNiwgMjIyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIzMCwgMTAzLCAyMTUsIDEyMSwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAyNDMsIDEzMCwgMjE1LCAxMjIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjMwLCAxMDEsIDIxNSwgMTIyLCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDIyMywgOTIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI1LCAxNDUsIDIyNiwgMjEwLCAyNTAsIDEwMywgCi0gICAgMjU0LCAyMDgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAxNDEsIDIzMCwgOTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAKLSAgICAxNDEsIDUyLCAyMzAsIDk4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjE4LCA4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIAotICAgIDI0MSwgMjI2LCAzOCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIyNCwgMTI5LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgCi0gICAgMjUxLCAxOSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIzMywgOCwgMjIxLCAyMjUsIDIwNywgMjI0LCAxNDEsIDI1MSwgCi0gICAgMjQxLCAyMzUsIDEzLCAyMjEsIDIyNSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDI0OCwgMjIyLCAyMjEsIDIyNSwgMjA3LCAKLSAgICAyMjQsIDE0MSwgMjUxLCAyNDEsIDI1MiwgMTkyLCAyMjEsIDIyNSwgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTAsIDIxMywgCi0gICAgMjUyLCAxMzgsIDIyMCwgNzcsIDIxMywgMjUyLCAxMzgsIDIyNCwgMTk4LCAyMTMsIDI1MiwgNSwgMjI4LCAyMDksIDIxMywgCi0gICAgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIDIyMiwgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIxMywgMjM1LCAKLSAgICAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgCi0gICAgMjExLCA4MCwgMjM0LCAxOTgsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDI1MSwgMiwgNTEsIDIxMywgMjUyLCAKLSAgICAxMzgsIDIxMSwgODAsIDIzNCwgMTk4LCAyMzUsIDI0MywgMjE4LCAxLCAyMjEsIDE5NywgMjEzLCAyNTIsIDEzOCwgNTIsIAotICAgIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjE1LCAyMTEsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjM0LCAxOTgsIDI1NCwgCi0gICAgNzcsIDIxMywgMjUyLCAxMzgsIDU5LCA1MSwgMjEzLCAyNTIsIDEzOCwgMTEzLCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAKLSAgICAxMzQsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIDIyMiwgMjQwLCAyMzQsIDIwOSwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAKLSAgICAyNTIsIDEzOCwgMjUzLCAyMDQsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE4LCAwLCAyMTMsIAotICAgIDI1MiwgNSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgMjIzLCA0OSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAKLSAgICAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgNzcsIDIxMywgMjUyLCA1LCAyMjMsIDQ5LCAyMTMsIDE0OCwgMjU0LCA3NywgCi0gICAgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTQsIDIxNywgMiwgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIAotICAgIDc4LCAyLCAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjU0LCA5MSwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDI1MiwgCi0gICAgMTY2LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjE0LCAyMCwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDIxNCwgMjEsIDIsIAotICAgIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyMTYsIDY4LCAyMTMsIDI1MiwgNSwgMjQxLCAxOTEsIDE5OSwgMjU0LCA3NSwgMjEzLCAKLSAgICAyNTIsIDUsIDE5OSwgMjU0LCA3NSwgMjEzLCAyNTIsIDUsIDIyMiwgMTQyLCAxOTksIDI1NCwgNzUsIDIxMywgMjUyLCA1LCAKLSAgICAyNTQsIDc2LCAyMTQsIDIyMywgMjMwLCA5MCwgMjEzLCAyNTIsIDUsIDI1NCwgMjAsIDIxMywgMjUyLCA1LCAyMjIsIDE4NywgCi0gICAgMjU0LCAyMCwgMjEzLCAyNTIsIDEzOCwgMjUxLCAyLCA0OCwgMjEzLCAyNTIsIDUsIDIzNSwgMTAyLCAyMTMsIDI1MiwgNSwgCi0gICAgMjE0LCAxNjEsIDcsIDEsIDQsIDYsIDYxLCA3LCAxLCA0LCA2LCAyNTQsIDI0MywgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAKLSAgICAyNDMsIDcsIDEsIDQsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNywgMSwgNCwgNiwgMjUxLCA2NiwgNywgMSwgNCwgNiwgCi0gICAgMjQ5LCA2MCwgNywgMSwgNCwgNiwgMjQ1LCA1OSwgNywgMSwgNCwgNiwgNzUsIDcsIDQsIDEsIDIxNSwgOTQsIDIwNCwgNzUsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDczLCA3LCAxLCA0LCA2LCAyMzUsIDE0NCwgNywgMSwgNCwgNiwgMjM1LCAyMywgNywgMSwgNCwgCi0gICAgNiwgMjMzLCAxNDksIDIsIDkxLCA3LCAxLCA0LCA2LCAxOTMsIDcsIDEsIDQsIDYsIDIyMywgNDksIDIzMCwgMjUsIDcsIDEsIAotICAgIDQsIDYsIDc2LCA3LCAxLCA0LCA2LCAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCAKLSAgICAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgMjI2LCAyMzQsIDcsIDEsIAotICAgIDQsIDYsIDIyNiwgMTM0LCA3LCA0LCAxLCAyMTYsIDE0LCAxNjMsIDc2LCA3LCA0LCAxLCAyNTEsIDE3NSwgMTYzLCA3NiwgNywgCi0gICAgMSwgNCwgNiwgMjI2LCAxMDUsIDcsIDEsIDQsIDYsIDIyMywgNDksIDE1MywgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTUzLCA3LCAKLSAgICAxLCA0LCA2LCAyMTcsIDE1MiwgNywgMSwgNCwgNiwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCA3MCwgNywgNCwgMSwgMjE5LCAKLSAgICAxODcsIDI0OCwgMCwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCAyMTUsIDk0LCAxOTMsIDcsIDEsIDQsIDYsIDIxNCwgMTA1LCAKLSAgICA3LCAxLCA0LCA2LCAyMTIsIDk4LCA3LCAxLCA0LCA2LCAyMTAsIDE1OSwgNywgMSwgNCwgNiwgMjQ1LCA4LCA3LCAxLCAyMTMsIAotICAgIDEzNSwgMjMzLCA4MiwgMjE4LCAyNTAsIDcsIDEsIDI1NCwgMTk2LCAyNiwgMSwgNCwgNiwgMjQzLCAxMDcsIDI2LCAxLCA0LCAKLSAgICA2LCAyMzMsIDk4LCAyNiwgMSwgNCwgNiwgMjI1LCAxMDgsIDI2LCAxLCA0LCA2LCAyMjMsIDM3LCAyNiwgMSwgNCwgNiwgCi0gICAgMjI0LCAxNjEsIDMzLCAxLCA0LCA2LCAyNDUsIDE3NCwgNTgsIDEsIDYsIDYxLCA1OCwgMSwgNiwgMjU0LCAyNDMsIDU4LCAxLCAKLSAgICA2LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI0OSwgNjAsIDU4LCAxLCA2LCAKLSAgICA3NSwgNTgsIDEsIDYsIDIyMywgNDksIDc1LCA1OCwgMSwgNiwgMjQzLCAyMDIsIDU4LCAxLCA2LCAyNDIsIDYwLCA1OCwgMSwgCi0gICAgNiwgNzMsIDU4LCAxLCA2LCAyMzUsIDE0NCwgNTgsIDEsIDYsIDIzNSwgMjMsIDU4LCAxLCA2LCAxNTYsIDU4LCAxLCA2LCAKLSAgICAxOTMsIDU4LCAxLCA2LCAyMzAsIDI1LCA1OCwgMSwgNiwgMjIzLCA0OSwgMjMwLCAyNSwgNTgsIDEsIDYsIDc2LCA1OCwgMSwgCi0gICAgNiwgMjI2LCAxMzQsIDU4LCAxLCA2LCAyMjYsIDEwNSwgNTgsIDEsIDYsIDE1MywgNTgsIDEsIDYsIDIxNywgMTUyLCA1OCwgCi0gICAgMSwgNiwgNzAsIDU4LCAxLCA2LCAyMTIsIDk4LCA1OCwgMSwgNCwgNjEsIDU4LCAxLCA0LCAyMTUsIDk0LCA2MSwgNTgsIDEsIAotICAgIDQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAyNDMsIDU4LCAxLCA0LCAyNTMsIDE1OCwgNTgsIDEsIDQsIAotICAgIDI0OSwgNjAsIDU4LCAxLCA0LCA3NSwgNTgsIDEsIDQsIDIyMSwgMTk1LCA1OCwgMSwgNCwgMjA0LCA3NSwgNTgsIDEsIDQsIAotICAgIDIxNSwgOTQsIDIwNCwgNzUsIDU4LCAxLCA0LCAyNDMsIDIwMiwgNTgsIDEsIDQsIDIxNSwgOTQsIDczLCA1OCwgMSwgNCwgCi0gICAgMjM1LCAyMywgNTgsIDEsIDQsIDE5MywgNTgsIDEsIDQsIDI0NSwgMTM4LCA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMDQsIAotICAgIDc2LCA1OCwgMSwgNCwgMjE2LCAxNCwgMTYzLCA3NiwgNTgsIDEsIDQsIDI1MSwgMTc1LCAxNjMsIDc2LCA1OCwgMSwgNCwgCi0gICAgMjI2LCAxMDUsIDU4LCAxLCA0LCAyMTcsIDE1MiwgNTgsIDEsIDQsIDcwLCA1OCwgMSwgNCwgMjE5LCAxODcsIDcwLCA1OCwgCi0gICAgMSwgNCwgMjE1LCA5NCwgMTkzLCA1OCwgMSwgNCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyNTQsIDE5NiwgNTgsIDEsIDQsIAotICAgIDI1MiwgMjYsIDU4LCAxLCA0LCAyNiwgMjQzLCAxMDcsIDU4LCAxLCA0LCAyNDgsIDU0LCA1OCwgMSwgNCwgMjYsIDIyNSwgCi0gICAgMTMzLCA1OCwgMSwgNCwgMjUwLCAxMTAsIDcsIDIxOCwgNjUsIDQsIDEsIDczLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTMsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDcwLCA3LCAyMTgsIDY1LCA0LCAxLCAyMTQsIDEwNSwgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MiwgCi0gICAgMjYsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNDMsIDEwNywgMjYsIDIxOCwgNjUsIDQsIDEsIDIyMywgMzcsIDI2LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMjUsIDEzMywgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MCwgMTEwLCA3LCA0LCAxLCAyMTQsIDIxNCwgNywgNCwgMSwgCi0gICAgNTcsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0NSwgCi0gICAgNywgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMyLCA1MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMwLCAKLSAgICAyNiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4OCwgMjIsIDIzMCwgMjI0LCAxODIsIAotICAgIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMzAsIDIyNCwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjE1LCA5NCwgMjQzLCAyMDIsIDU4LCAxLCAKLSAgICAzMywgMjQ1LCAxNTAsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNCwgMSwgMjE2LCAyMTEsIDIsIDIxOCwgCi0gICAgMTA3LCA3LCA0LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTg2LCAyLCA5MSwgNywgNCwgMSwgMjI2LCAKLSAgICAxMDYsIDIsIDkxLCA3LCA0LCA2LCAxLCAxMDQsIDIsIDkxLCA3LCA0LCAxLCAyMTQsIDE1OCwgMiwgOTEsIDcsIDQsIDEsIAotICAgIDU3LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3LCAKLSAgICAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMyLCA1MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAxMTUsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjU0LCAxNDQsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjQxLCA1MiwgMjIsIDIxNywgNzcsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCAyMDQsIDE2MCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAKLSAgICAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDEwNCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDksIDIsIDIyMywgNTUsIAotICAgIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjUxLCA2NiwgNTgsIDEsIDQsIDI1MSwgNjcsIAotICAgIDIsIDI0OSwgMTAwLCA1OCwgMSwgNCwgMjQ1LCA1OSwgNTgsIDEsIDQsIDIyMywgNDksIDIwNCwgNzUsIDU4LCAxLCA0LCAKLSAgICAyNDUsIDYsIDU4LCAxLCA0LCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDkxLCA1OCwgMSwgNCwgMTE5LCAyNDMsIDIwMiwgNTgsIAotICAgIDEsIDQsIDIxNSwgOTQsIDI0MiwgNjAsIDU4LCAxLCA0LCAyNDAsIDE1NCwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE4NSwgCi0gICAgNTgsIDEsIDQsIDYsIDczLCA1OCwgMSwgNCwgNiwgMjQwLCAxNTQsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxNDUsIDIsIAotICAgIDI0OSwgMTI3LCA1OCwgMSwgNCwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDIzMywgMTQ5LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCA2LCAxNTYsIDU4LCAxLCA0LCAyMzIsIDUwLCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIAotICAgIDk0LCAyMzIsIDUwLCAyLCAxOTksIDIzMywgMzYsIDU4LCAxLCA0LCAyMzAsIDI2LCAyLCA0MywgMTAzLCA1OCwgMSwgNCwgCi0gICAgMjMwLCAyNiwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgNiwgMjMwLCAyNSwgNTgsIDEsIDQsIDI1MiwgMTM0LCA3NiwgCi0gICAgNTgsIDEsIDQsIDIyNSwgMTMzLCA1OCwgMSwgNCwgMjIyLCA5MiwgMiwgMTAzLCA1OCwgMSwgNCwgMjQ1LCA3NSwgNTgsIDEsIAotICAgIDQsIDIxNywgMTUzLCAyLCAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCAxMDQsIDEzMCwgNTgsIDEsIDQsIDIxNCwgMTU3LCA1OCwgCi0gICAgMSwgNCwgNiwgNzAsIDU4LCAxLCA0LCAyMTQsIDEwNiwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjE0LCAxMDUsIDU4LCAKLSAgICAxLCA0LCAyMTAsIDE1OSwgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCAyMTAsIDE2MCwgCi0gICAgMiwgMjQ5LCAxMDAsIDU4LCAxLCA0LCAyNDUsIDgsIDU4LCAxLCA0LCAyMTYsIDE3OSwgMzgsIDI0NiwgMTE4LCAyNDIsIAotICAgIDEzNywgMjU1LCAxNCwgMzgsIDI0NiwgMTE4LCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyMTksIDY5LCA1MSwgMzgsIDIxOCwgNiwgCi0gICAgNzgsIDM4LCAyMzEsIDIzMSwgMzgsIDI0MiwgMTM0LCAzOCwgMjMxLCAyMjksIDM4LCAyNTUsIDEsIDM4LCAyNDIsIDEzNSwgCi0gICAgMzgsIDI1NSwgMiwgMzgsIDcsIDQsIDEsIDIyMywgMjI0LCA1MSwgMzgsIDI1MSwgMTQ1LCAzOCwgMjMxLCAyMzAsIDM4LCAKLSAgICA1MiwgMjUwLCAzMSwgNDgsIDM4LCAyMjYsIDIyNSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTcyLCA1MSwgMzgsIAotICAgIDIxNCwgMTUxLCA0OCwgMzgsIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNjMsIDIwNCwgMTE1LCA0OCwgMzgsIAotICAgIDcsIDQsIDEsIDI1NCwgMjQzLCAzOCwgNywgNCwgMSwgMjU0LCA3MywgMzgsIDcsIDQsIDEsIDI1MywgMTc2LCAzOCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMjUwLCAxODMsIDM4LCA3LCA0LCAxLCAyMzUsIDIxMywgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0NSwgCi0gICAgNTksIDM4LCA3LCA0LCAxLCAyNDMsIDIwMiwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjAyLCAzOCwgNywgNCwgMSwgMjM1LCAKLSAgICAyMywgMzgsIDcsIDQsIDEsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5MywgMzgsIDcsIDQsIAotICAgIDEsIDIzMCwgMjUsIDM4LCA3LCAxLCA0LCA2LCAyMzAsIDI1LCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIyMiwgMTg2LCAzOCwgNywgNCwgMSwgMjIyLCA5MSwgMzgsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgMzgsIAotICAgIDcsIDQsIDEsIDIxMCwgMTU5LCAzOCwgNTIsIDIzNSwgMTkzLCAyNTEsIDE0NywgNTEsIDM4LCAyNTQsIDE0OCwgMTI4LCAKLSAgICAyMTYsIDQyLCA1MSwgMzgsIDQzLCAyNTMsIDI1MCwgNDgsIDM4LCA0NCwgMjUzLCAyNTAsIDIyLCAxMjQsIDI1MywgMjUwLCAKLSAgICA1MSwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDUxLCA3LCA2LCAKLSAgICAxLCA1NywgMiwgNTksIDQ4LCA3LCA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAKLSAgICAxLCA1NywgMiwgNTksIDUxLCA3LCA2LCAxLCA1NywgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMTQsIAotICAgIDUxLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4NCwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjUwLCAKLSAgICAxODQsIDIyLCAxNDIsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgNTksIDQ4LCAKLSAgICA3LCA2LCAxLCAyNDksIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDI0OSwgNjEsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAzMSwgCi0gICAgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAKLSAgICAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMywgCi0gICAgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAKLSAgICA1MSwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE4NCwgMjIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMTg0LCAyMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDI0NSwgNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDUsIAotICAgIDcsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAKLSAgICAyNDIsIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgCi0gICAgMjQ4LCAxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMTgzLCA3LCA0LCAKLSAgICAxLCAyNDIsIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUxLCAxNDcsIDUxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCAyNTEsIDE0NywgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAxNDIsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDE0MiwgNywgNiwgMSwgMjM1LCAyNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgCi0gICAgNTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMzEsIDUxLCAKLSAgICA3LCA2LCAxLCAyMzIsIDUwLCAyLCAxNDIsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDE0MiwgNywgNiwgMSwgMjMyLCA1MCwgMiwgCi0gICAgNTksIDQ4LCA3LCA0LCAxLCAyMzIsIDUwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDU5LCA1MSwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA1OSwgNTEsIDcsIDYsIAotICAgIDEsIDIzMCwgMjYsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzAsIDI2LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDIxNiwgODksIDIyLCAyNDgsIDEsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDI0OCwgMSwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDYsIAotICAgIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA1OSwgCi0gICAgNDgsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAKLSAgICA1OSwgNTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgCi0gICAgNCwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKLSAgICAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTUsIDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1NSwgMywgCi0gICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzUsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIAotICAgIDIsIDI1MCwgMjM1LCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgMjUyLCA0MywgMjIsIDU5LCA0OCwgNywgCi0gICAgNCwgMSwgMjIyLCA5MiwgMiwgNTksIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUzLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCA1MSwgNywgCi0gICAgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAKLSAgICAyNDgsIDEsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDgsIDEsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxODIsIAotICAgIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxODIsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNCwgCi0gICAgMTA2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDIsIAotICAgIDEzNiwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDYsIDEsIDIxMiwgCi0gICAgOTksIDIsIDI0OCwgMSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTIsIAotICAgIDk5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCA1OSwgCi0gICAgNDgsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgCi0gICAgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDExNSwgMiwgNDQsIDE2MywgMjIyLCAyMzMsIDcsIDQsIDEsIDE5OSwgCi0gICAgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxOTksIDIyMiwgOTIsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMTk5LCAKLSAgICAyMjIsIDkyLCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc2LCAyMjIsIDkxLCA3LCA0LCAxLCAyNDgsIDU0LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIAotICAgIDcsIDQsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAKLSAgICAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIAotICAgIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAKLSAgICAyNTEsIDE0NywgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMjQxLCA1MiwgNDgsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgCisgICAgMCwgMjE5LCAyMCwgMjQ1LCAzOSwgNzksIDIyNCwgMSwgNzksIDU0LCA1MCwgMjQ3LCAxNDAsIDUwLCAyMjUsIDE4NSwgNTAsIAorICAgIDI1NCwgMTM0LCAyNTQsIDY1LCA0MywgMjI2LCA3LCA0NCwgMjI2LCA3LCAyNTMsIDIyNCwgOTYsIDUwLCAyNDksIDIyNywgCisgICAgMjQwLCAxNzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjE5LCA0OCwgMjEsIDIxMCwgODYsIDIxLCAxMTEsIDIxLCAxMDUsIDIxLCAKKyAgICAxNTgsIDIxLCAxNjEsIDIxLCAxOTAsIDIxLCAxOTUsIDIxLCAxOTksIDIxLCAxOTYsIDIxLCAyMDEsIDI0OSwgMjM0LCAyMjAsIAorICAgIDE1MiwgMjMzLCAyMSwgNTAsIDI0NSwgMTA2LCA1MCwgMjQyLCAxMzcsIDUwLCAyMjQsIDE2LCA3OSwgMjQ5LCAyMjUsIDI1MywgCisgICAgMjE0LCA3LCA2LCAxLCA2MSwgNywgNiwgMSwgMjUzLCAxNjYsIDcsIDYsIDEsIDI1MSwgNzQsIDcsIDYsIDEsIDI0OSwgNjgsIAorICAgIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyNDUsIDE0LCA3LCA2LCAxLCAyNDMsIDIwOSwgNywgNiwgMSwgMjQyLCA2NywgNywgNiwgCisgICAgMSwgNzQsIDcsIDYsIDEsIDIzNSwgMTUwLCA3LCA2LCAxLCAyMzUsIDI5LCA3LCA2LCAxLCAxNTYsIDcsIDYsIDEsIDE5NCwgCisgICAgNywgNiwgMSwgMjMwLCAzMCwgNywgNiwgMSwgNzgsIDcsIDYsIDEsIDIyNiwgMTA5LCA3LCA2LCAxLCAyMjQsIDk5LCA3LCA2LCAKKyAgICAxLCAxNTMsIDcsIDYsIDEsIDIyMiwgOTMsIDcsIDYsIDEsIDIxNywgMTUzLCA3LCA2LCAxLCA2OSwgNywgNiwgMSwgMjE0LCAKKyAgICAxMDUsIDcsIDYsIDEsIDIxMiwgOTgsIDcsIDYsIDEsIDIxMSwgMTc4LCA3LCA2LCAxLCAyMTEsIDExNywgNywgNiwgMSwgCisgICAgMjEwLCAxNTksIDQzLCA0MiwgMTI3LCAyMjMsIDUzLCAyMTksIDQ4LCA0NCwgNDIsIDEyNywgMjUwLCAzOSwgMjU1LCAyMywgCisgICAgMTIxLCAyMzIsIDIxOSwgMjQyLCAxNDQsIDI1NSwgMjMsIDcsIDQsIDEsIDYxLCA3LCA0LCAxLCAyNTMsIDE2NiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgNywgNCwgMSwgMjQ5LCA2OCwgNywgNCwgMSwgNzYsIDcsIDQsIDEsIDI0NSwgMTQsIDcsIDQsIDEsIAorICAgIDI0MywgMjA5LCA3LCA0LCAxLCAyNDIsIDY3LCA3LCA0LCAxLCA3NCwgNywgNCwgMSwgMjM1LCAxNTAsIDcsIDQsIDEsIDIzNSwgCisgICAgMjksIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTk0LCA3LCA0LCAxLCAyMzAsIDMwLCA3LCA0LCAxLCA3OCwgNywgNCwgMSwgCisgICAgMjI2LCAxMDksIDcsIDQsIDEsIDIyNCwgOTksIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MywgNywgNCwgMSwgMjE3LCAKKyAgICAxNTMsIDcsIDQsIDEsIDY5LCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAorICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgMTA3LCAxMjcsIDY3LCAyMzIsIDIxOSwgCisgICAgNDQsIDI0OSwgMTA3LCAxMjcsIDE4NCwgMjI4LCA3OCwgMjE5LCAyMCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCAyNTAsIAorICAgIDE4NCwgNTAsIDIyNCwgMjMxLCA1MCwgMjQ5LCAxMDYsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxNDMsIDEzMCwgMjIxLCAKKyAgICAxNzUsIDUwLCAyNDgsIDksIDI0OSwgMTcxLCA1MCwgMjQ0LCAxNDQsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjMzLCA0OCwgNTIsIAorICAgIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAyMjgsIDU3LCA1MCwgMjE5LCA1NCwgMjQwLCAxNzUsIDIyMywgMTA1LCA1MCwgMjMxLCAKKyAgICAyMzcsIDI0OCwgNzksIDUwLCAyMjUsIDI0LCA1MCwgMjE4LCAyNCwgMTA1LCAyMTgsIDI0LCAxNTgsIDI1NSwgMTIsIDI1NSwgCisgICAgMjMsIDIzMCwgMjMzLCA1MCwgMjI1LCA3MSwgNTAsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjUwLCAxOTEsIDIxOCwgMjQsIAorICAgIDExMSwgMjMxLCAxNTMsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjIyLCAyNTAsIDUyLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgCisgICAgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMjM1LCAyMDAsIDIyNCwgMTYsIDc5LCA3LCA2LCAxLCAxMTYsIDIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDE4NCwgNywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDcsIDYsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA2LCAxLCAKKyAgICAyNTQsIDI1MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxNDMsIDcsIDYsIAorICAgIDEsIDE2MCwgMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCA5LCA3LCA2LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyNDUsIDY3LCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE0NCwgMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMjMwLCA4OSwgCisgICAgNTAsIDcsIDYsIDEsIDE0NCwgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgCisgICAgMTQyLCA3LCA2LCAxLCAyMTYsIDE1MiwgNywgNCwgMSwgMjIwLCA3OCwgMjIyLCA5MywgNywgNCwgMSwgMTE2LCAyLCAyNDIsIAorICAgIDE0MywgNywgNCwgMSwgMTE2LCAyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTE2LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgCisgICAgMjU0LCAyNTIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgNywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjQ1LCA2NywgNywgNCwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNDQsIDIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDksIDI0NywgMTc3LCAKKyAgICA1MCwgNywgNCwgMSwgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAxNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIxNiwgMTUyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgCisgICAgMjUwLCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgNTksIDQ4LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc1LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNTEsIDc1LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDI1MCwgCisgICAgMjQyLCA3LCA2LCAxLCAyNDksIDY5LCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgCisgICAgMjMxLCAyMzcsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgCisgICAgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDI0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIAorICAgIDI0MywgMjEwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDE4NCwgNywgNCwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MSwgMTU0LCA3LCAKKyAgICA2LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ3LCAxMjcsIDc0LCA3LCA2LCAyNywgMjM2LCAzOCwgNywgNCwgMjcsIAorICAgIDIzNiwgMzgsIDcsIDYsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAzOCwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIAorICAgIDI0NSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAKKyAgICAxNTUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIAorICAgIDI0NywgMTI4LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDMxLCAKKyAgICAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDE5MSwgNywgCisgICAgNiwgMSwgMjMwLCAzMSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzAsIAorICAgIDMxLCAyMjQsIDIwNywgMjUxLCA4NiwgMjU0LCA2NSwgNywgNiwgMSwgMjQ1LCAxNDYsIDcsIDQsIDEsIDI0NSwgMTQ2LCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxNDQsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNTIsIDE0MiwgNywgNiwgMjcsIDIyNiwgMjM4LCA3LCA0LCAyNywgMjI2LCAyMzgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgCisgICAgMjIzLCAyMjcsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTcsIDE1NCwgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDkxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDE4NCwgNywgNCwgMSwgMTA0LCAyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM3LCA0OCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIAorICAgIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMiwgOTksIAorICAgIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzOCwgCisgICAgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAKKyAgICAxNjAsIDIsIDE0MiwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDIwMCwgMjIyLCA5MywgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgCisgICAgMjE2LCAxMiwgNywgNCwgMSwgNTcsIDIsIDIxNiwgMTIsIDcsIDYsIDEsIDEzOCwgMTk1LCA3LCA0LCAxLCAxMzgsIDE5NSwgCisgICAgNywgNiwgMSwgMjA0LCA3OCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAxMDMsIDcsIAorICAgIDYsIDEsIDI1NCwgMjI4LCAyNDksIDY4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjksIDIsIAorICAgIDIxNiwgMTIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIxNiwgMTIsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNjIsIDcsIDYsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA2LCAxLCAyMjEsIDE5NywgNywgNiwgMSwgMjA0LCA3NiwgNywgNiwgMSwgMjQ1LCAxNSwgMiwgCisgICAgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgCisgICAgMTE0LCA3LCA0LCAxLCAyNDAsIDIwOCwgNywgNiwgMSwgMjM1LCAxOTIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA5MSwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMTAzLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxMDMsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAxMzAsIDcsIDQsIDEsIDIzMywgMTA2LCAyLCA5MSwgNywgNiwgMSwgMjE1LCA5NCwgMTk0LCA3LCA2LCAxLCAyMzAsIDMxLCAKKyAgICAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA2LCAxLCAxNDQsIDIsIDIzMCwgCisgICAgMjI5LCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDYsIDEsIAorICAgIDIyNiwgMjIzLCA3LCA0LCAxLCAyMjYsIDIyMywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDEwMywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDEwMywgNywgMSwgMjEwLCAyMTQsIDcsIDYsIDEsIDEzOCwgMTA1LCA3LCA0LCAxLCAxMzgsIDEwNSwgNywgNiwgCisgICAgMSwgMjQ1LCA4MywgNywgMSwgMjIzLCA1MiwgMjQ1LCA4NCwgMjMyLCAxMjksIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjYsIAorICAgIDcwLCAxMDMsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDYsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDEwNCwgMiwgCisgICAgMjQwLCAyNTUsIDcsIDYsIDEsIDIxNCwgMTU3LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA2LCAxLCAyMTEsIAorICAgIDExOCwgMiwgMTAzLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTAzLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNiwgMSwgMjQ1LCAxNiwgNywgNiwgMSwgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgCisgICAgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjE3LCA3OCwgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgCisgICAgMSwgMTM4LCAxOTAsIDcsIDQsIDEsIDEzOCwgMTkwLCA3LCAxLCAyMzUsIDIwMCwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCAKKyAgICA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIDI0OCwgNTUsIDI1MCwgMTksIDcsIDEsIDIzMywgODMsIDI1MCwgMTksIDcsIDEsIAorICAgIDI1NCwgMTQ1LCAyNTAsIDE5LCA3LCAxLCAyMjMsIDU4LCAyNTAsIDE5LCA3LCA2LCAxLCAyNDYsIDQ4LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNiwgMSwgMjQ5LCA2OSwgMiwgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDYsIDQ4LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNiwgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIyOCwgMTkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgCisgICAgNCwgMSwgMjI4LCAxOTEsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIAorICAgIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgCisgICAgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgNzYsIAorICAgIDcsIDYsIDEsIDExNiwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDI0OCwgMTAsIDIyLCAKKyAgICAyMzEsIDIzNywgNywgNiwgMSwgMTE2LCAyLCA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCA1OSwgNzIsIAorICAgIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjU0LCAyNTMsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDkxLCA3LCA2LCAxLCAyNDMsIAorICAgIDIxMCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA0LCAKKyAgICAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI5LCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjI2LCAyMjksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjQ1LCAxNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDI0NSwgMTcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0NiwgNDcsIAorICAgIDcsIDYsIDEsIDI0OSwgNjksIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAyNDYsIDQ3LCA3LCA2LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDIwNiwgNywgNiwgMSwgMjExLCAxODEsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDIsIDE0MywgNywgNiwgMSwgCisgICAgMTE2LCAyLCAyMjIsIDIzNywgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDcyLCAyMiwgMTQyLCA3LCAKKyAgICA2LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgCisgICAgMTA1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDUyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjM1LCAyMDAsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxMTYsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIAorICAgIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDE0NCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAKKyAgICA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxMCwgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyNDksIDEwOCwgNywgNiwgMSwgMjI2LCAxMzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjMxLCAyMzcsIDcsIAorICAgIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE0NCwgMiwgCisgICAgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjExLCAxMTgsIAorICAgIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OSwgCisgICAgMTA4LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjQ4LCAxNTEsIDI0NywgMjI4LCA3LCA0LCAxLCAyMjQsIDM0LCAyNDcsIDIyOCwgNywgNiwgMSwgMTE2LCAyLCA5MSwgCisgICAgNywgNiwgMSwgMjUxLCA3NSwgMiwgOTEsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDkxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMTMwLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjE3LCAyNTEsIAorICAgIDIxNywgNzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgNywgNiwgMSwgMjQyLCAxODcsIDIxOCwgCisgICAgMTMxLCA3LCA0LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIAorICAgIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCAKKyAgICA2LCAxLCAyMzUsIDE1MSwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCAxMDAsIDIsIAorICAgIDI0MSwgNTksIDIxNywgNzgsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDEsIDU5LCAyMTcsIDc4LCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCA5MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDYxLCA3LCA0LCAxLCAyNTQsIDE1MSwgNywgNCwgMSwgMjE1LCAKKyAgICA5NCwgMjU0LCAxNTEsIDcsIDQsIDEsIDU3LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzgsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIAorICAgIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDQsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA0LCAxLCAyMjEsIDE5NywgNywgNCwgMSwgMjIxLCAxOTgsIDIsIDEwMywgNywgNCwgMSwgCisgICAgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCAxNjAsIDIsIDEwMywgCisgICAgNywgNCwgMSwgMjUwLCA4LCAyMjMsIDUyLCAyMDQsIDc2LCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTEsIDIsIDkxLCA3LCAKKyAgICA0LCAxLCAyNDMsIDIxMCwgMiwgMTAzLCA3LCA0LCAxLCAxMTksIDI0MywgMjA5LCA3LCAxLCA0LCA2LCAyNDMsIDIwOSwgNywgCisgICAgNCwgMSwgMjQzLCAxMTQsIDcsIDQsIDEsIDIyMywgMTU0LCAyNDAsIDI1NSwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2NywgCisgICAgNywgNCwgMSwgMjQyLCA2OCwgMiwgMTAzLCA3LCA0LCAxLCAyNDEsIDIxNSwgMiwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTkyLCA3LCAxLCA0LCA2LCA3NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTIsIDQ5LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCAKKyAgICA3LCA0LCAxLCAyMzMsIDcsIDcsIDQsIDEsIDIxNSwgOTQsIDE5NCwgNywgNCwgMSwgMjE1LCA5NCwgMjMyLCA1NSwgMiwgCisgICAgMjAwLCAyMzMsIDQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDcsIAorICAgIDQsIDEsIDIzMCwgMzEsIDIsIDIyMywgNTgsIDEwMywgNywgMSwgNCwgNiwgMjMwLCAzMCwgNywgNCwgMSwgMjUyLCAxNDIsIAorICAgIDc4LCA3LCAxLCA0LCA2LCAyMjYsIDIzOCwgNywgNCwgMSwgMjUwLCA4LCAyMjYsIDIwNSwgNywgNCwgMSwgMjI1LCAxMzYsIAorICAgIDcsIDQsIDEsIDIxNSwgOTQsIDE1MywgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDEwMywgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk1LCA3LCA0LCAxLCAyMjMsIDUyLCAKKyAgICAyMjMsIDIyNywgMiwgMjQ0LCA5NSwgNywgMSwgNCwgNiwgMTUzLCA3LCAxLCA0LCA2LCAyMzUsIDIwMCwgMTUzLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAxMDMsIDcsIDQsIDEsIDI0NSwgODMsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MSwgMiwgCisgICAgMjE4LCAxMDUsIDIyLCAxMDMsIDcsIDQsIDEsIDIxOCwgMjMzLCAyMjMsIDUyLCAyNDUsIDgzLCA3LCA0LCAxLCAyNDUsIDg0LCAKKyAgICAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjE1LCA5NCwgMjE3LCAxNTMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAKKyAgICAxMDMsIDcsIDQsIDEsIDEwNCwgMTMwLCA3LCA0LCAxLCAyMTQsIDE1NywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgCisgICAgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxNSwgOTQsIDIxMiwgOTgsIDcsIDQsIDEsIDIxNSwgOTQsIAorICAgIDIxMSwgMTE3LCA3LCAxLCA0LCA2LCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDUsIDE2LCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyNDksIAorICAgIDEwOCwgNywgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCAxLCAyMjUsIDE0MiwgMjEzLCAxMzUsIDI0NCwgMSwgNywgMSwgCisgICAgMjM1LCAyMDAsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgMSwgMjE4LCAxMTIsIDI1MSwgNzQsIDcsIDEsIDI1MSwgMjU0LCAKKyAgICAyNTAsIDE5LCA3LCAxLCA0LCA2LCAyNTMsIDE2NiwgNywgNCwgMSwgMjUwLCA4LCAyMDQsIDc2LCA3LCAxLCA0LCA2LCAyNDMsIAorICAgIDIxMCwgMiwgMTAzLCA3LCAxLCA0LCA2LCAyNDIsIDY3LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDcsIDQsIAorICAgIDEsIDIxNSwgOTQsIDIzNSwgMjksIDcsIDEsIDQsIDYsIDE1NiwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDEwMywgNywgMSwgCisgICAgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgMSwgMjIzLCA1MiwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgCisgICAgNCwgMSwgMjQ2LCA0OCwgMjQ3LCAyMjgsIDcsIDQsIDEsIDI0OCwgMzQsIDI0NywgMjI4LCA3LCA0LCAxLCAyNDYsIDQ4LCAKKyAgICAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIxNSwgMTg2LCAyNDcsIDIyOCwgNywgNCwgMSwgMjE2LCAyMzYsIAorICAgIDI0NywgMjI4LCA3LCA0LCAxLCAyMTcsIDMwLCAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NCwgMTQyLCAKKyAgICAyNDcsIDIyOCwgNywgNCwgMSwgMjMyLCAxMDUsIDI0NywgMjI4LCA3LCA0LCAxLCAyMzIsIDU2LCAyNDcsIDIyOCwgNywgMSwgCisgICAgMjUxLCAyNTQsIDIyNSwgMTg0LCA3LCAxLCAyNTIsIDYsIDIyNSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAKKyAgICAyNDQsIDk1LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAyNDQsIDk2LCAyMiwgMjE3LCA3OCwgNTgsIDEsIDQsIAorICAgIDI0MiwgNjcsIDU4LCAxLCA0LCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA0LCAyMzUsIDE1MCwgNTgsIDEsIDQsIDE1MywgCisgICAgNTgsIDEsIDQsIDIxNSwgOTQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAxMDMsIDU4LCAxLCA0LCA2LCAKKyAgICAyMzUsIDIwMCwgMTUzLCA1OCwgMSwgNCwgMjEyLCA5OCwgNTgsIDEsIDQsIDIxMSwgMTE3LCA1OCwgMSwgMjI0LCAxOTMsIAorICAgIDU4LCAxLCA1MiwgMjI0LCAxOTMsIDU4LCAxLCAyMTUsIDk0LCAyNDksIDIyNywgNTgsIDEsIDI1NCwgNjUsIDU4LCAxLCAKKyAgICAyMjMsIDUyLCAyNDksIDIyNywgNTgsIDEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzYsIAorICAgIDU4LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCAyMjMsIDUyLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCA0MywgCisgICAgMjU0LCAxLCA1OCwgMSwgNDQsIDI1NCwgMSwgNTgsIDEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTI0LCAyNTQsIDEsIDU4LCAxLCAKKyAgICAyNTAsIDM5LCAyNTUsIDIzLCAyNTAsIDI0MiwgNTgsIDEsIDY3LCAyMzIsIDIxOSwgNTgsIDEsIDIzMSwgMjM3LCA1OCwgMSwgCisgICAgMjU1LCAxMiwgMjU1LCAyMywgNTgsIDEsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTksIDU4LCAKKyAgICAxLCAxMjEsIDIzMSwgMjM3LCA1OCwgMSwgMTIxLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDEyMSwgMjU1LCAxMiwgCisgICAgMjU1LCAyMywgNTgsIDEsIDIxNSwgMjIzLCAyNDksIDIzNCwgNTgsIDEsIDE2MywgMjE1LCAyMjMsIDI0OSwgMjM0LCA1OCwgCisgICAgMSwgMjUwLCAxODEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgMjUwLCAxODEsIDQzLCAxNjMsIDIyMiwgMjM2LCA1OCwgCisgICAgMSwgMTIwLCAyMTcsIDg4LCA1OCwgMSwgMTI0LCAyMTcsIDg4LCA1OCwgMSwgOTYsIDUwLCA1OCwgMSwgMjMwLCAxODcsIDUwLCAKKyAgICAyNTEsIDE1NCwgNTksIDQ4LCAyMjIsIDIzNywgNDgsIDIyNiwgMjI4LCA0LCAxODQsIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCAKKyAgICA1OCwgMSwgMjIzLCAzOSwgMTAzLCA1OCwgMSwgMjQ5LCAxMzksIDI1NSwgMjMsIDU4LCAxLCA0LCAyNDMsIDExNCwgNTgsIDEsIAorICAgIDQsIDE1NiwgNTgsIDEsIDQsIDIyMiwgOTMsIDU4LCAxLCA0LCAyMTEsIDE3OCwgNTgsIDEsIDQsIDIyMywgNTIsIDI0MiwgCisgICAgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDI0NSwgMjgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDIzMCwgMjMwLCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDIxMCwgMjU0LCAyNDgsIDUyLCAxMzgsIDc5LCA1OCwgMSwgMjExLCA3MCwgMjQ4LCA1MiwgMTM4LCA3OSwgNTgsIDEsIAorICAgIDIxMywgMTMzLCA1OCwgMSwgMjE0LCAxODYsIDU4LCAxLCA1MiwgMjU0LCA2NSwgNTgsIDEsIDEyMSwgMTI0LCAyNTQsIDEsIAorICAgIDU4LCAxLCAxMjEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTIxLCA0MywgMjU0LCAxLCA1OCwgMSwgMTIxLCA0NCwgMjU0LCAxLCAKKyAgICA1OCwgMSwgMTIxLCAyMjIsIDIzNiwgNTgsIDEsIDIzMCwgMjI5LCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDIzMCwgCisgICAgMjI5LCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAyMzAsIDIyOSwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDU4LCAxLCAKKyAgICAxMjEsIDE4NCwgNTgsIDEsIDIyMywgMTYwLCAyNDksIDIzNCwgNTgsIDEsIDI1MiwgNjYsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDI0NSwgMTUxLCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAyNTIsIDY2LCAxMjEsIDIxNiwgMzEsIDU4LCAxLCAyNDUsIDE1MSwgCisgICAgMTIxLCAyMTYsIDMxLCA1OCwgMSwgMjIwLCA1NiwgNTgsIDEsIDIwNCwgMjIwLCA1NiwgNTgsIDEsIDEyMSwgNDMsIDc1LCAKKyAgICAzOCwgMjQyLCAxNDQsIDI1NSwgMjMsIDM4LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjUwLCAzOSwgMjU1LCAyMywgMzgsIAorICAgIDE4NCwgMzgsIDIzMSwgMjM3LCAzOCwgMjI2LCAxMjMsIDM4LCAyNTEsIDE1NCwgMzgsIDU5LCA0OCwgMzgsIDI0OCwgOSwgCisgICAgMzgsIDI0MSwgNTksIDQ4LCAzOCwgMjIyLCAyMzcsIDQ4LCAzOCwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyNTAsIAorICAgIDI0MiwgMzgsIDY3LCAyMzIsIDIyMCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgMjIwLCA0OCwgMzgsIDUyLCAyNDIsIDE0NCwgCisgICAgMjU1LCAyMywgMzgsIDI1MSwgNywgMzgsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDIxNSwgOTQsIDI0OSwgMjI4LCA0OCwgCisgICAgMzgsIDI0OSwgMjI4LCA0OCwgMzgsIDIyMywgNTIsIDI0OSwgMjI4LCA0OCwgMzgsIDI0OSwgMjI4LCA3MiwgMjIyLCAyNTQsIAorICAgIDM4LCAyNDIsIDE0NCwgMjU1LCAyNCwgNTEsIDM4LCAyNTUsIDEyLCAyNTUsIDI0LCA1MSwgMzgsIDQzLCAyMTcsIDg5LCA1MSwgCisgICAgMzgsIDQ0LCAyMTcsIDg5LCA1MSwgMzgsIDQzLCAyNTQsIDExOCwgNDgsIDM4LCAyNDAsIDI1NSwgMzgsIDQzLCAxNjMsIAorICAgIDIyMiwgMjM3LCA1MSwgMzgsIDEyMCwgMjE3LCA4OSwgNTEsIDM4LCAxMjQsIDIxNywgODksIDUxLCAzOCwgOTYsIDUsIDUxLCAKKyAgICAzOCwgMjMwLCAxODcsIDUsIDUxLCAzOCwgMjI2LCA2OCwgMjQxLCA1OSwgNTEsIDM4LCAyMjMsIDU4LCAyNDEsIDU5LCA1MSwgCisgICAgMzgsIDU5LCA1MSwgMzgsIDI0OCwgMTAsIDUxLCAzOCwgMjIyLCAyMzcsIDUxLCAzOCwgMjQ5LCAyMjgsIDUxLCAzOCwgMjUwLCAKKyAgICAxOTEsIDM4LCAyMjYsIDIyOCwgMzgsIDY3LCAyMzIsIDIyMCwgNTEsIDM4LCAyNTEsIDE0OCwgNTEsIDM4LCAyMzUsIDIwMCwgCisgICAgNTIsIDI1NCwgMzIsIDUxLCAzOCwgMjUwLCAyNDMsIDUxLCAzOCwgMjUwLCAzOSwgMjU1LCAyNCwgNTEsIDM4LCAyNTEsIAorICAgIDE1NSwgNTEsIDM4LCAyMzUsIDIwMCwgMjUxLCAxNTUsIDUxLCAzOCwgMjE2LCA5MCwgNTEsIDM4LCAyMzEsIDIzOCwgNTEsIAorICAgIDM4LCAxMjEsIDIzMiwgMjE5LCAzOCwgNTIsIDEyMSwgMjMyLCAyMTksIDM4LCAyMTYsIDkwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDM4LCAyMDAsIDIxOCwgMTA1LCAyMjYsIDEyNCwgMzgsIDIxOSwgMjUzLCAyMTksIAorICAgIDQ5LCAyMjYsIDEyNCwgMzgsIDIwMCwgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNTEsIDM4LCAKKyAgICAyMzUsIDIwMCwgMjUxLCAxNDgsIDUxLCAzOCwgNDIsIDUxLCAzOCwgMjIxLCAxODIsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAKKyAgICAzOCwgNjcsIDE4NCwgMzgsIDUyLCAyMjYsIDEyMywgMzgsIDI0MiwgMTQ0LCAxMzgsIDc5LCAzOCwgMjU1LCAxMiwgMTM4LCAKKyAgICA3OSwgMzgsIDI2LCAyMjUsIDE3OCwgMzgsIDI2LCAyMzQsIDgsIDM4LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAzOCwgMjYsIAorICAgIDIxMCwgMjE5LCAzOCwgMjUxLCAxNDgsIDQ4LCAzOCwgMjQ1LCAxMDYsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIyMCwgCisgICAgNTEsIDM4LCA0MywgMjU0LCAxMTgsIDUxLCAzOCwgMjI4LCA1NywgMjE2LCA5MCwgNDgsIDM4LCAyNDEsIDY1LCA0OCwgMzgsIAorICAgIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDQ4LCAzOCwgNDMsIDQ0LCA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgCisgICAgMjQyLCAxNDksIDIzNSwgNjksIDM4LCA0NCwgMjU0LCAyLCA0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM3LCA0OCwgMzgsIAorICAgIDI0NCwgMTM5LCAzOCwgMjExLCAxNzksIDUxLCAzOCwgNDMsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMjU0LCAyLCA1MSwgMzgsIAorICAgIDQ0LCAyNTQsIDIsIDIyLCAxMjAsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNDgsIDM4LCA1OSwgNzIsIAorICAgIDIyMiwgMjU0LCAzOCwgMjUzLCAyMjUsIDUxLCAzOCwgNTIsIDIyMiwgMjM3LCA1MSwgMzgsIDIxMCwgMzUsIDQ4LCAzOCwgCisgICAgNTIsIDI1MSwgMTU1LCA1MSwgMzgsIDUyLCAyNTEsIDE1NCwgMzgsIDUyLCAyMzEsIDIzNywgMzgsIDUyLCAyMzEsIDIzOCwgCisgICAgNTEsIDM4LCA1MiwgMTg0LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDUyLCA5NywgODAsIDUxLCAzOCwgNywgCisgICAgNCwgMSwgNjEsIDM4LCA3LCA0LCAxLCA3NiwgMzgsIDcsIDQsIDEsIDc0LCAzOCwgNywgNCwgMSwgNzgsIDM4LCA3LCA0LCAxLCAKKyAgICA2OSwgMzgsIDcsIDQsIDEsIDI1MSwgNzQsIDM4LCA3LCA0LCAxLCAyNDksIDY4LCAzOCwgNywgNCwgMSwgMjQyLCA2NywgMzgsIAorICAgIDcsIDQsIDEsIDE5NCwgMzgsIDcsIDQsIDEsIDE1MywgMzgsIDcsIDQsIDEsIDIxNywgMTUzLCAzOCwgNywgNCwgMSwgMjE0LCAKKyAgICAxMDUsIDM4LCA3LCA0LCAxLCAyMTEsIDE3OCwgMjYsIDYsIDEsIDI0MSwgMjAzLCAyNiwgNCwgMSwgMjQxLCAyMDMsIDI2LCAKKyAgICA2LCAxLCAyNTQsIDMxLCAyMjEsIDI0OCwgMjYsIDQsIDEsIDI1NCwgMzEsIDIyMSwgMjQ4LCAyNiwgMjI3LCAyMDIsIDUwLCAKKyAgICAyNiwgMjMyLCAxMTQsIDIyNywgMjAyLCA1MCwgMjYsIDYsIDEsIDIyNiwgNTUsIDI0NywgMjM1LCAyNiwgNCwgMSwgMjI2LCAKKyAgICA1NSwgMjQ3LCAyMzUsIDI2LCAyMTAsIDIxOSwgMjYsIDQsIDIyMywgNTIsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDQsIAorICAgIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA0LCAyMjMsIDUyLCAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAyNiwgMjI0LCAxNiwgNzksIDI2LCAyMTYsIDE5LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAyNiwgNiwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCAyNTQsIDEwNSwgMjE3LCAzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIxNiwgCisgICAgMTksIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxNiwgMTksIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE2LCAxOSwgMjYsIDYsIDEsIAorICAgIDI1NCwgMTUxLCAyNiwgNiwgMSwgMjUyLCAzNCwgMjYsIDYsIDEsIDI0MywgMTE0LCAyNiwgNiwgMSwgMjQ4LCA2MiwgMjYsIAorICAgIDYsIDEsIDI0NSwgMTA4LCAyNiwgNiwgMSwgMjEwLCA4NSwgMjYsIDYsIDEsIDI0NSwgNzEsIDI2LCA2LCAxLCAyMTYsIDE4MCwgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkyLCAyNiwgNiwgMSwgMjM0LCAyMjgsIDI2LCA2LCAxLCAyMzMsIDEwNCwgMjYsIDYsIDEsIAorICAgIDIzMCwgMTA3LCAyNiwgNiwgMSwgMjI3LCAyNDIsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjAzLCAyNiwgCisgICAgNiwgMSwgMjI1LCAxMTEsIDI2LCA2LCAxLCAyMjMsIDQwLCAyNiwgNiwgMSwgMjE5LCAxNzksIDI2LCA2LCAxLCAyMTcsIDQyLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTcsIDI2LCA2LCAxLCAyMjUsIDEzNiwgMjYsIDYsIDEsIDI1MCwgMTE4LCAyNiwgNiwgMSwgCisgICAgMjI0LCAxNjQsIDI2LCA2LCAxLCAyMjYsIDIwNSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDMsIDI2LCA2LCAxLCAKKyAgICAyMTQsIDE1OCwgMiwgMjQ4LCAzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNDUsIDEwOSwgCisgICAgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjE2LCAKKyAgICAxOSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjU0LCAxNTEsIDI2LCAKKyAgICA0LCAxLCAyNTIsIDM0LCAyNiwgNCwgMSwgMjQzLCAxMTQsIDI2LCA0LCAxLCAyNDgsIDYyLCAyNiwgNCwgMSwgMjQ1LCAxMDgsIAorICAgIDI2LCA0LCAxLCAyMTAsIDg1LCAyNiwgNCwgMSwgMjQ1LCA3MSwgMjYsIDQsIDEsIDIxNiwgMTgwLCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTIsIDI2LCA0LCAxLCAyMzQsIDIyOCwgMjYsIDQsIDEsIDIzMywgMTA0LCAyNiwgNCwgMSwgMjMwLCAxMDcsIDI2LCA0LCAKKyAgICAxLCAyMjcsIDI0MiwgMjYsIDQsIDEsIDIxMSwgMTU3LCAyNiwgNCwgMSwgMjI2LCAyMDMsIDI2LCA0LCAxLCAyMjUsIDExMSwgCisgICAgMjYsIDQsIDEsIDIyMywgNDAsIDI2LCA0LCAxLCA0MCwgMjE5LCAxNzksIDI2LCA0LCAxLCAyMTksIDE3OSwgMjYsIDQsIDEsIAorICAgIDIxNywgNDIsIDI2LCA0LCAxLCAyMTQsIDE1NywgMjYsIDQsIDEsIDIyNSwgMTM2LCAyNiwgNCwgMSwgMjUwLCAxMTgsIDI2LCAKKyAgICA0LCAxLCAyMjQsIDE2NCwgMjYsIDQsIDEsIDIyNiwgMjA1LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMywgMjYsIDQsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDMsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgMTksIDI2LCA2LCAyMzQsIDI1MywgODcsIDI2LCAKKyAgICAyNTIsIDM1LCA4NywgMjYsIDIxNiwgMTgxLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDU5LCA4NywgMjYsIDIxNCwgCisgICAgMTU4LCAyLCAyNTUsIDEyLCAyMiwgMjQxLCA1OSwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQ4LCAxMCwgMjIsIDI0MSwgNTksIAorICAgIDg3LCAyNiwgMjI1LCAxMzcsIDg3LCAyNiwgMjI1LCAxMTIsIDg3LCAyNiwgMjM0LCAyNTMsIDg3LCAyNiwgMSwgMjU0LCAzMSwgCisgICAgMjM0LCAxMiwgMjYsIDQsIDEsIDI1NCwgMzEsIDIzNCwgMTIsIDI2LCAxLCAyMTgsIDEzOSwgMjYsIDQsIDEsIDIxOCwgMTM5LCAKKyAgICAyNiwgMSwgMjQ3LCAyMzUsIDI2LCA0LCAxLCAyNDcsIDIzNSwgMjYsIDEsIDIzNCwgMTIsIDI2LCA0LCAxLCAyMzQsIDEyLCAKKyAgICAyNiwgMSwgMjIxLCAyNDgsIDI2LCA0LCAxLCAyMjEsIDI0OCwgODEsIDYsIDEsIDIyMCwgNTcsIDgxLCA0LCAxLCAyMjAsIAorICAgIDU3LCA4MSwgNiwgMSwgMjQ0LCAxNDgsIDgxLCA0LCAxLCAyNDQsIDE0OCwgODEsIDYsIDEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgCisgICAgMjM0LCAxMjMsIDgxLCA2LCAxLCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQxLCA1MiwgODEsIDYsIDEsIDI0MywgMTA5LCA4MSwgCisgICAgNCwgMSwgMjQzLCAxMDksIDgxLCA2LCAxLCAyMjAsIDI0LCA4MSwgNCwgMSwgMjIwLCAyNCwgODEsIDYsIDEsIDI0OCwgNzcsIAorICAgIDgxLCA0LCAxLCAyNDgsIDc3LCAyNiwgMjM0LCAyMjksIDg3LCAyNiwgMjIzLCA0MSwgODcsIDI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDI2LCAxLCAyMTAsIDIyNCwgMjYsIDYsIDIxNiwgMTgxLCA4NywgMjYsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgCisgICAgMjYsIDIyMywgNTIsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgMjYsIDYsIDEsIDIyMCwgOSwgMjYsIDQsIDEsIDIyMCwgOSwgCisgICAgMjYsIDYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIDEsIDIyMSwgMjQ1LCAyNiwgNCwgMSwgMjIxLCAyNDUsIDI2LCAKKyAgICAyMjMsIDQxLCAyLCAyMTgsIDEwNSwgODcsIDI2LCA2LCAyMjMsIDUyLCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAKKyAgICAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgMjIzLCA1MiwgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMzMsIDYsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAzMywgNiwgMSwgMjM1LCAxOTYsIDMzLCA2LCAxLCAKKyAgICAyNDcsIDE3MCwgMzMsIDYsIDEsIDI0MiwgMTk0LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA2LCAxLCAyNDYsIAorICAgIDQ0LCAzMywgNiwgMSwgMjUxLCA4NCwgNzQsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEzMiwgMzMsIDYsIAorICAgIDEsIDIzMiwgMTkzLCAzMywgNiwgMSwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMTUsIDE3NSwgMzMsIDYsIDEsIDIzNCwgNTQsIAorICAgIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCA2LCAxLCAyMTksIDI1MywgNjksIDMzLCA2LCAxLCAyNDYsIAorICAgIDQwLCAzMywgNiwgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDgzLCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIAorICAgIDI0MywgMzMsIDYsIDEsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMzYsIDY3LCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTQsIDMzLCA2LCAxLCA3NCwgMzMsIDYsIDEsIDIxOSwgMjUzLCA3NCwgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgyLCAzMywgNiwgMSwgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyNDUsIDE1OCwgMzMsIDYsIDEsIDc4LCAzMywgNiwgMSwgCisgICAgMjI1LCAyMjQsIDMzLCA2LCAxLCAyNDUsIDEwMCwgMzMsIDYsIDEsIDI0NSwgOTAsIDMzLCA2LCAxLCAyMTcsIDIzLCAzMywgCisgICAgNiwgMSwgNjksIDMzLCA2LCAxLCAyNDUsIDIxMCwgMzMsIDYsIDEsIDE2MiwgMzMsIDYsIDEsIDIxNSwgMTc5LCAzMywgNiwgCisgICAgMSwgMjUwLCAxMzksIDMzLCA2LCAxLCAyMjAsIDEwNCwgMzMsIDYsIDEsIDIyMCwgNjcsIDMzLCA2LCAxLCAyNDIsIDEwLCAKKyAgICA1MCwgMzMsIDYsIDEsIDIxMSwgMjcsIDMzLCA2LCAxLCAyMTksIDU0LCA1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgCisgICAgMjEwLCAyMTIsIDMzLCA2LCAxLCAxOTIsIDMzLCA0LCAxLCA2MSwgMzMsIDQsIDEsIDI1MiwgODMsIDMzLCA0LCAxLCAyMTMsIAorICAgIDI1NSwgMzMsIDQsIDEsIDI0MiwgMjQzLCAzMywgNCwgMSwgMjQ4LCA5OCwgMzMsIDQsIDEsIDIzNiwgNjcsIDMzLCA0LCAxLCAKKyAgICAyMTAsIDc0LCAzMywgNCwgMSwgMjEwLCA5NCwgMzMsIDQsIDEsIDc0LCAzMywgNCwgMSwgMjE5LCAyNTMsIDc0LCAzMywgNCwgCisgICAgMSwgMTc2LCAzMywgNCwgMSwgMjQ1LCAxODIsIDMzLCA0LCAxLCAyNDUsIDE2NywgMzMsIDQsIDEsIDI0NSwgMTU4LCAzMywgCisgICAgNCwgMSwgNzgsIDMzLCA0LCAxLCAyMjUsIDIyNCwgMzMsIDQsIDEsIDI0NSwgMTAwLCAzMywgNCwgMSwgMjQ1LCA5MCwgMzMsIAorICAgIDQsIDEsIDIxNywgMjMsIDMzLCA0LCAxLCA2OSwgMzMsIDQsIDEsIDI0NSwgMjEwLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgCisgICAgMjE1LCAxNzksIDMzLCA0LCAxLCAyNTAsIDEzOSwgMzMsIDQsIDEsIDIyMCwgMTA0LCAzMywgNCwgMSwgMjIwLCA2NywgMzMsIAorICAgIDQsIDEsIDI0MiwgMTAsIDUwLCAzMywgNCwgMSwgMjExLCAyNywgMzMsIDQsIDEsIDIxOSwgNTQsIDUwLCAzMywgNCwgMSwgCisgICAgNzYsIDMzLCA0LCAxLCAyMTAsIDIxMiwgMzMsIDQsIDEsIDE5MiwgMzMsIDQsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAKKyAgICAzMywgNCwgMSwgMjM1LCAxOTYsIDMzLCA0LCAxLCAyNDcsIDE3MCwgMzMsIDQsIDEsIDI0MiwgMTk0LCAzMywgNCwgMSwgCisgICAgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA0LCAxLCAyNDYsIDQ0LCAzMywgNCwgMSwgMjUxLCA4NCwgNzQsIDMzLCA0LCAxLCAKKyAgICAyMTEsIDgsIDMzLCA0LCAxLCAyMzUsIDEzMiwgMzMsIDQsIDEsIDIzMiwgMTkzLCAzMywgNCwgMSwgMjI4LCAxODMsIDMzLCAKKyAgICA0LCAxLCAyMTUsIDE3NSwgMzMsIDQsIDEsIDIzNCwgNTQsIDMzLCA0LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCAKKyAgICA0LCAxLCAyMTksIDI1MywgNjksIDMzLCA0LCAxLCAyNDYsIDQwLCAzMywgNiwgMSwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyMjYsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIxMSwgNTksIDMzLCA0LCAxLCAyMTEsIDU5LCAzMywgNiwgMSwgMjM1LCAxOTAsIDc2LCAzMywgNCwgCisgICAgMSwgMjM1LCAxOTAsIDc2LCAzMywgNiwgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjMyLCAxOTgsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjM1LCAxOTAsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUyLCAxLCAyMTAsIDE4MywgCisgICAgMzMsIDYsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzMsIDIzOSwgMzMsIDQsIDEsIDIzMywgMjM5LCAzMywgNiwgMSwgMjI0LCAxNjQsIDMzLCA0LCAKKyAgICAxLCAyMjQsIDE2NCwgMzMsIDYsIDEsIDI0NCwgOTAsIDMzLCA0LCAxLCAyNDQsIDkwLCAzMywgNiwgMSwgMjM1LCAxNTIsIAorICAgIDMzLCA0LCAxLCAyMzUsIDE1MiwgMzMsIDYsIDEsIDIzNSwgMTUzLCAyLCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE1MywgMiwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzMywgNiwgMSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMTQsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDQsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDY2LCAzMywgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgNjYsIDMzLCA2LCAxLCAyMjYsIAorICAgIDE0NCwgMzMsIDQsIDEsIDIyNiwgMTQ0LCAzMywgNiwgMSwgMjM0LCAxMiwgMzMsIDQsIDEsIDIzNCwgMTIsIDMzLCAyMTYsIAorICAgIDE0NywgNTAsIDM4LCAzMywgMjE2LCA2NiwgMzgsIDMzLCAyMjYsIDY5LCAzOCwgMzMsIDI0OCwgMTYyLCAyMjUsIDIxLCAzOCwgCisgICAgMzMsIDIyNCwgMTU4LCAyMjUsIDIxLCAzOCwgMzMsIDIyNSwgNiwgMzgsIDMzLCAyNDAsIDIxOCwgMjE2LCAxNDcsIDUwLCAKKyAgICAzOCwgMzMsIDIzMCwgMTk2LCA1MCwgMzMsIDYsIDEsIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDYsIDEsIDIyMCwgMTQ4LCA1MCwgMzMsIDQsIDEsIDIyMCwgCisgICAgMTQ4LCA1MCwgMzMsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDExNSwgMzMsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIAorICAgIDExNSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgCisgICAgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAKKyAgICAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyMTAsIAorICAgIDc1LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgCisgICAgNDcsIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgMjQ4LCA0NywgMzMsIDQsIAorICAgIDEsIDIzNSwgMTksIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDE5LCAKKyAgICAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTksIDIsIDkxLCAzMywgNiwgMSwgCisgICAgMjUyLCAxMzIsIDE3NiwgMzMsIDQsIDEsIDI1MiwgMTMyLCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1OSwgMiwgMjQ4LCA0NywgCisgICAgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyNDgsIDQ3LCAzMywgNiwgMjcsIDI0NSwgMTU5LCAyNDIsIDI0MywgMzMsIDQsIDI3LCAKKyAgICAyNDUsIDE1OSwgMjQyLCAyNDMsIDMzLCA2LCAxLCAyMjUsIDIyNSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDIyNSwgCisgICAgMjI1LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjU1LCAyOSwgMTYyLCAzMywgNCwgMSwgMjU1LCAyOSwgMTYyLCAKKyAgICAzMywgNiwgMSwgMjQ1LCA5MSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0NSwgOTEsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI0LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxOCwgMTIzLCAKKyAgICA2OSwgMzMsIDQsIDEsIDIxOCwgMTIzLCA2OSwgMzMsIDYsIDEsIDIxOCwgMTIzLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgCisgICAgMjE4LCAxMjMsIDEwNCwgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDU2LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQyLCA1NiwgCisgICAgMiwgMjQ4LCA0NywgMzMsIDYsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgMzMsIDQsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgCisgICAgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyNTAsIDE0MCwgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzUsIAorICAgIDMzLCA0LCAxLCAyMjAsIDM1LCAzMywgNiwgMSwgMjU1LCAyOSwgMjUwLCAxMzksIDMzLCA0LCAxLCAyNTUsIDI5LCAyNTAsIAorICAgIDEzOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjU1LCAyOSwgMjUwLCAKKyAgICAxNDAsIDIsIDI0OCwgNDcsIDMzLCAxLCAyMjYsIDYyLCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNTQsIDMzLCA0LCAKKyAgICAxLCAyMTAsIDc1LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTksIDIsIAorICAgIDEwMywgMzMsIDYsIDEsIDI0NSwgMTgzLCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIxNywgNzgsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTU5LCAKKyAgICAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDIxNywgNzgsIDMzLCA2LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIAorICAgIDMzLCA0LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIDMzLCA2LCAxLCAyNDUsIDE2OCwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDI0NSwgMTY4LCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjI2LCA2MiwgMzMsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDMzLCAKKyAgICA0LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMTYsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDI3LCAxMTYsIDIzNiwgNjcsIDMzLCA0LCAyNywgMTE2LCAyMzYsIDY3LCAzMywgNiwgMSwgMjM2LCA2OCwgCisgICAgMiwgMjUxLCAxNTQsIDMzLCA0LCAxLCAyMzYsIDY4LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIyMSwgMTk3LCAzMywgNCwgCisgICAgMSwgMjIxLCAxOTcsIDMzLCA2LCAxLCAyMjEsIDE5OCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjIxLCAxOTgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI0NiwgCisgICAgNDQsIDMzLCA0LCAxLCAyNTUsIDI5LCAyNDYsIDQ0LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDI0MCwgCisgICAgMTYxLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNiwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNCwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNiwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgCisgICAgMjQ4LCA5LCAzMywgNCwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgCisgICAgMjM3LCAzMywgNiwgMSwgMTA0LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgCisgICAgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDIsIAorICAgIDI0NCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIDEwNSwgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIAorICAgIDEwNSwgMjIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIAorICAgIDYsIDEsIDI0MiwgNTYsIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA1NiwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDgsIAorICAgIDk4LCAzMywgNCwgMSwgMjM0LCAyMCwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NywgMTcwLCAzMywgNCwgMSwgCisgICAgMjM0LCAyMCwgMjQ3LCAxNzAsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAyMCwgMjEwLCAKKyAgICAyNywgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NiwgMzgsIDMzLCA0LCAxLCAyMzQsIDIwLCAyNDYsIDM4LCAzMywgNiwgMSwgCisgICAgMjM0LCAyMCwgMjMyLCAxOTMsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMzIsIDE5MywgMzMsIDYsIDEsIDIzNCwgMjAsIDIyOCwgCisgICAgMTgzLCAzMywgNCwgMSwgMjM0LCAyMCwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTksIDExMSwgMzMsIDQsIDEsIAorICAgIDIzNCwgMjAsIDIxOSwgMTExLCAzMywgNiwgMSwgMjM0LCAyMCwgMjE2LCA2MSwgMzMsIDQsIDEsIDIzNCwgMjAsIDIxNiwgCisgICAgNjEsIDMzLCA2LCAxLCAyMjMsIDUyLCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA1MiwgMjEwLCA5NCwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgzLCAyLCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMTAzLCAzMywgNiwgMSwgMjMzLCA0LCAzMywgNCwgMSwgCisgICAgMjMzLCA0LCAzMywgNiwgMSwgMjIzLCA0MiwgMzMsIDQsIDEsIDIyMywgNDIsIDMzLCA2LCAxLCAyMTEsIDkyLCAzMywgNCwgCisgICAgMSwgMjExLCA5MiwgMzMsIDYsIDEsIDIyNCwgOTEsIDMzLCA0LCAxLCAyMjQsIDkxLCAzMywgNiwgMSwgMjEyLCAyMiwgMzMsIAorICAgIDQsIDEsIDIxMiwgMjIsIDMzLCA2LCAxLCAyNTQsIDE3NSwgMTc2LCAzMywgNCwgMSwgMjU0LCAxNzUsIDE3NiwgMzMsIDYsIAorICAgIDEsIDI0NSwgMTgzLCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyMzAsIDIyOSwgMTAzLCAKKyAgICAzMywgNiwgMSwgMjI1LCAyMjUsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjUsIDIyNSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDIyMCwgMzYsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjAsIDM2LCAyLCAyNDgsIDQ3LCAxNTAsIDYsIDEsIDI1MywgMTcyLCAKKyAgICAxNTAsIDYsIDEsIDI1MiwgNDcsIDE1MCwgNiwgMSwgMjQyLCAyMTAsIDE1MCwgNiwgMSwgMjQ4LCAyMjksIDE1MCwgNiwgMSwgCisgICAgMjQ1LCAyMjEsIDE1MCwgNiwgMSwgMjEwLCAxMTYsIDE1MCwgNiwgMSwgMjQ1LCAyMDUsIDE1MCwgNiwgMSwgMjQ1LCA3MywgCisgICAgMTUwLCA2LCAxLCAxMTIsIDE1MCwgNiwgMSwgMjEwLCA3NCwgMTUwLCA2LCAxLCAyMzUsIDIzNCwgMTUwLCA2LCAxLCAyMzIsIAorICAgIDE5NiwgMTUwLCA2LCAxLCAyMTEsIDE2MCwgMTUwLCA2LCAxLCAyNTEsIDQxLCAxNTAsIDYsIDEsIDIzNCwgMTcxLCAxNTAsIAorICAgIDYsIDEsIDI0MSwgNzUsIDE1MCwgNiwgMSwgMjM1LCAxNDcsIDE1MCwgNiwgMSwgMjQyLCAyNTMsIDE1MCwgNiwgMSwgMjUwLCAKKyAgICAxMzQsIDE1MCwgNiwgMSwgMjMxLCA2MywgMTUwLCA2LCAxLCAyMTEsIDgsIDE1MCwgNiwgMSwgMjI4LCA0NCwgMTUwLCA2LCAKKyAgICAxLCAyMjAsIDEwNCwgMTUwLCA2LCAxLCAyMTMsIDEzOCwgMTUwLCA2LCAxLCAyNTAsIDE2NSwgMTUwLCA2LCAxLCAyMjUsIAorICAgIDIwOCwgMTUwLCA2LCAxLCAyMzUsIDExNiwgMTUwLCA2LCAxLCAyMDUsIDE1MCwgNiwgMSwgMjIxLCAxNjMsIDE1MCwgNiwgMSwgCisgICAgMjEzLCAxNzksIDE1MCwgNiwgMSwgMjE2LCA2MywgMTUwLCA2LCAxLCAyMjMsIDk4LCAxNTAsIDYsIDEsIDI0OSwgMjQ2LCAKKyAgICAxNTAsIDYsIDEsIDIxMCwgMjQ5LCAxNTAsIDYsIDEsIDIyNSwgNDksIDE1MCwgNiwgMSwgMjM0LCAxODIsIDE1MCwgNiwgMSwgCisgICAgMjI2LCAyMjYsIDE1MCwgNiwgMSwgMjQ0LCAxNTAsIDE1MCwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjM2LCAxNTAsIDI1NCwgCisgICAgNjUsIDE1MCwgMjQ1LCAxNjIsIDc5LCAxNTAsIDI0NSwgMzksIDc5LCAxNTAsIDI0OSwgMjI3LCAxNTAsIDIyNCwgMTYsIDc5LCAKKyAgICAxNTAsIDI1NSwgMzAsIDc5LCAxNTAsIDQsIDEsIDI1MywgMTcyLCAxNTAsIDQsIDEsIDI1MiwgNDcsIDE1MCwgNCwgMSwgCisgICAgMjQyLCAyMTAsIDE1MCwgNCwgMSwgMjQ4LCAyMjksIDE1MCwgNCwgMSwgMjQ1LCAyMjEsIDE1MCwgNCwgMSwgMjEwLCAxMTYsIAorICAgIDE1MCwgNCwgMSwgMjQ1LCAyMDUsIDE1MCwgNCwgMSwgMjQ1LCA3MywgMTUwLCA0LCAxLCAxMTIsIDE1MCwgNCwgMSwgMjEwLCAKKyAgICA3NCwgMTUwLCA0LCAxLCAyMzUsIDIzNCwgMTUwLCA0LCAxLCAyMzIsIDE5NiwgMTUwLCA0LCAxLCAyMTEsIDE2MCwgMTUwLCAKKyAgICA0LCAxLCAyNTEsIDQxLCAxNTAsIDQsIDEsIDIzNCwgMTcxLCAxNTAsIDQsIDEsIDI0MSwgNzUsIDE1MCwgNCwgMSwgMjM1LCAKKyAgICAxNDcsIDE1MCwgNCwgMSwgMjQyLCAyNTMsIDE1MCwgNCwgMSwgMjUwLCAxMzQsIDE1MCwgNCwgMSwgMjMxLCA2MywgMTUwLCAKKyAgICA0LCAxLCAyMTEsIDgsIDE1MCwgNCwgMSwgMjI4LCA0NCwgMTUwLCA0LCAxLCAyMjAsIDEwNCwgMTUwLCA0LCAxLCAyMTMsIAorICAgIDEzOCwgMTUwLCA0LCAxLCAyNTAsIDE2NSwgMTUwLCA0LCAxLCAyMjUsIDIwOCwgMTUwLCA0LCAxLCAyMzUsIDExNiwgMTUwLCAKKyAgICA0LCAxLCAyMDUsIDE1MCwgNCwgMSwgMjIxLCAxNjMsIDE1MCwgNCwgMSwgMjEzLCAxNzksIDE1MCwgNCwgMSwgMjE2LCA2MywgCisgICAgMTUwLCA0LCAxLCAyMjMsIDk4LCAxNTAsIDQsIDEsIDI0OSwgMjQ2LCAxNTAsIDQsIDEsIDIxMCwgMjQ5LCAxNTAsIDQsIDEsIAorICAgIDIyNSwgNDksIDE1MCwgNCwgMSwgMjM0LCAxODIsIDE1MCwgNCwgMSwgMjI2LCAyMjYsIDE1MCwgNCwgMSwgMjQ0LCAxNTAsIAorICAgIDE1MCwgNCwgMjcsIDI0NSwgMjIyLCAyMTAsIDI0OSwgMTUwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE1MCwgMjQwLCAxNzUsIAorICAgIDE1MCwgMjQ2LCAxMDMsIDUwLCA5NCwgMjU1LCAyNCwgMjQ1LCA2NSwgOTQsIDI1NSwgMjQsIDIyMSwgMTY0LCA5NCwgMjU1LCAKKyAgICAyNCwgMjIwLCA5MCwgOTQsIDI1NSwgMjQsIDIxMCwgMTA0LCAyMjQsIDc0LCA5NCwgMjU1LCAyNCwgMjEwLCAxMDQsIDI0MywgCisgICAgMTMyLCA5NCwgMjU1LCAyNCwgMjE2LCA3NiwgOTQsIDI1NSwgMjQsIDIyMywgNTAsIDk0LCAyNTUsIDI0LCAyMTAsIDEwMywgCisgICAgOTQsIDI1NSwgMjQsIDIyNSwgMjQ5LCA5NCwgMjU1LCAyNCwgMjExLCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjE1LCA5NCwgCisgICAgMjU1LCAyNCwgMjQzLCA0OCwgOTQsIDI1NSwgMjQsIDI0MywgNDksIDIzMCwgNzQsIDk0LCAyNTUsIDI0LCAyNDMsIDQ2LCAKKyAgICA5NCwgMjU1LCAyNCwgMjI0LCA3NSwgMjI2LCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyNDMsIDYzLCA5NCwgMjU1LCAKKyAgICAyNCwgMjI1LCAyMzAsIDk0LCAyNTUsIDI0LCAyNTMsIDIwOCwgMjQyLCA0OCwgOTQsIDI1NSwgMjQsIDIzMCwgODQsIDk0LCAKKyAgICAyNTUsIDI0LCAyMzEsIDIxMywgOTQsIDI1NSwgMjQsIDIzMSwgNTQsIDk0LCAyNTUsIDI0LCAyMzEsIDU1LCAyMzQsIDE4MywgCisgICAgOTQsIDI1NSwgMjQsIDI0OCwgMTcxLCA5NCwgMjU1LCAyNCwgMjI0LCA4NiwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyMjQsIAorICAgIDcwLCA5NCwgMjU1LCAyNCwgMjExLCAzMCwgMjUyLCA0OCwgMjEwLCAyMzAsIDk0LCAyNTUsIDI0LCAyMjYsIDIxMSwgOTQsIAorICAgIDI1NSwgMjQsIDIzNiwgMjYsIDk0LCAyNTUsIDI0LCAyNDgsIDc4LCA5NCwgMjU1LCAyNCwgMjEwLCAzMywgOTQsIDE2NCwgCisgICAgMjMxLCAxNDgsIDI1MCwgNDMsIDk0LCAyMjUsIDE0LCAyMjAsIDM4LCA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjEsIDE2NCwgCisgICAgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjI1LCAyNDMsIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAKKyAgICAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIxNSwgMTc3LCA5NCwgMjI1LCAxNCwgMjIxLCAxNjQsIDk0LCAyMjUsIDE0LCAyMjUsIAorICAgIDI0MywgOTQsIDIyNSwgMTQsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAyNDEsIDY4LCA5NCwgMjI1LCAxNCwgMjQxLCA2OSwgCisgICAgMjQyLCAzLCAzMSwgMjE0LCAzLCA5NCwgMjI1LCAxNCwgMjI0LCAyMCwgOTQsIDIyNSwgMTQsIDI0OCwgMjE2LCAxNzcsIAorICAgIDIzMSwgMTc2LCA5NCwgMjI1LCAxNCwgMjMxLCA0MywgOTQsIDIyNCwgMTQ0LCAyMzEsIDE3MywgOTQsIDIyNSwgMTQsIDIyMywgCisgICAgMTcyLCA5NCwgMjI0LCAxNDQsIDIyNSwgMjUxLCA5NCwgMjI1LCAxNCwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAyMjUsIDE0LCAKKyAgICAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjI1LCAyNDUsIDk0LCAxNjQsIDIxNCwgMTYwLCAKKyAgICAyNDcsIDEyOCwgOTQsIDE2NCwgMjMyLCAxMTQsIDI0NywgMTI4LCA5NCwgMjI0LCAxNDQsIDIyNywgMTk5LCAyNDIsIDQ3LCAKKyAgICA5NCwgMjI1LCAxNCwgMjI0LCA4MCwgMjI0LCA3NCwgOTQsIDEsIDI1NCwgMTc5LCA5NCwgMSwgMjUyLCAzNiwgOTQsIDEsIAorICAgIDI0MiwgMjA4LCA5NCwgMSwgMjQ4LCAxOTcsIDk0LCAxLCAyNDEsIDI0NSwgOTQsIDEsIDIxNCwgMywgOTQsIDEsIDIxMCwgCisgICAgOTcsIDk0LCAxLCAyNDEsIDIwNCwgOTQsIDEsIDIxNiwgMjMxLCA5NCwgMSwgMjEwLCAyMzMsIDk0LCAxLCA0MCwgMjM1LCAwLCAKKyAgICA5NCwgMSwgMjM1LCAwLCA5NCwgMSwgMjMzLCAxMDAsIDk0LCAxLCA0MCwgMjMxLCA3MCwgOTQsIDEsIDIzMSwgNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI3LCAxOTgsIDk0LCAxLCAyMjcsIDE5OCwgOTQsIDEsIDIyMSwgMjUxLCA5NCwgMSwgMjUzLCAxNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI1LCAyMjQsIDk0LCAxLCAyMjUsIDIyNCwgOTQsIDEsIDQwLCAyMTUsIDE4MCwgOTQsIDEsIDIxNSwgMTgwLCAKKyAgICA5NCwgMSwgMjI0LCA0MiwgOTQsIDEsIDIyMywgNzAsIDk0LCAxLCAyMjAsIDIyLCA5NCwgMSwgMjE3LCAzOSwgOTQsIDI3LCAKKyAgICAyMTEsIDYsIDUyLCAyMTQsIDMsIDk0LCAyNywgMjExLCA2LCAyMTQsIDQsIDIxMCwgMjMzLCA5NCwgMjcsIDIxMSwgNiwgNTIsIAorICAgIDIxMCwgMjMzLCA5NCwgMjI0LCAxNDQsIDI0MywgNDgsIDk0LCAyMjQsIDE0NCwgMjQzLCA0NiwgOSwgNTQsIDUwLCA5LCA1LCAKKyAgICAyMjEsIDI0NCwgOSwgMjQ0LCAzOCwgMjMxLCAxNTksIDksIDUsIDIyMiwgMjUsIDksIDUsIDIyMSwgMjQ3LCAyNTQsIDQ1LCAKKyAgICAyNDksIDExNywgMjIyLCAxOTUsIDI1NCwgNDUsIDI0NCwgMTIsIDIyMiwgMTk1LCA5LCAyMjMsIDEzNywgMjU0LCA0NSwgCisgICAgMjI1LCAxODYsIDIzMCwgMTk4LCA1MCwgMjU0LCA0NSwgMjI1LCAxODYsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgNTAsIDI1NCwgCisgICAgMjMwLCA1MCwgOSwgMjQ5LCAyMjcsIDksIDI0OCwgMTU4LCAyMjAsIDEzOSwgOSwgMjI1LCAxNiwgMjEzLCAyNDEsIDUwLCA5LCAKKyAgICA1LCAyMzAsIDE3OSwgOSwgNSwgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCA0NSwgOSwgNSwgMjU0LCAxODEsIDI1MywgMjI5LCAKKyAgICA5LCA1LCAyMjMsIDE3MCwgMjU0LCAxODAsIDksIDUsIDIyMywgMTc4LCAyNTQsIDE2MSwgMjU0LCAxMTIsIDksIDUsIDIxNywgCisgICAgNzEsIDksIDQsIDEyNSwgMjE3LCA4MSwgOSwgNCwgMTI1LCAyNywgMTA5LCAyLCAyMzMsIDEwOSwgMiwgMjExLCA0MywgOSwgCisgICAgNCwgMTI1LCAyMTAsIDEwOCwgOSwgNCwgMjQ0LCAxNzMsIDksIDQsIDI0OCwgMTkyLCA5LCA0LCAyMzQsIDIxMSwgOSwgMjIwLCAKKyAgICAxNTIsIDksIDEsIDc5LCA5LCAyMTUsIDIxMiwgNTksIDIyNCwgMTQ0LCA3OSwgOSwgMjI0LCAxNiwgNzksIDksIDEsIDIzNCwgCisgICAgMjE1LCAyMTEsIDQzLCA5LCAxLCAyNDIsIDI2LCA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA0OCwgOSwgMSwgMTA5LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDE4MiwgNTEsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyNTQsIDE3OSwgOSwgMSwgMjUyLCA2MiwgOSwgMSwgMjE3LCA5LCAyMzEsIDE2OSwgOSwgMSwgCisgICAgMjE3LCA4LCA5LCAxLCAyMTYsIDE5MywgOSwgMSwgMjM1LCAxMjksIDksIDEsIDI0MiwgNDQsIDksIDEsIDIzNCwgMTM1LCA5LCAKKyAgICAxLCAyNDgsIDIwMywgOSwgMSwgMjE2LCAyMDMsIDksIDEsIDIyMywgOTgsIDksIDEsIDIxMCwgMTA4LCA5LCAxLCAyMjEsIAorICAgIDE2OCwgOSwgMSwgMjIwLCA2MSwgOSwgMSwgMjIyLCAyOCwgOSwgMSwgMjQ4LCAyMjQsIDksIDEsIDIxNywgODEsIDksIDEsIAorICAgIDIxMCwgMTExLCA5LCAxLCAyNTQsIDIwNSwgOSwgMSwgMjQyLCAyNTEsIDksIDEsIDIzNCwgMTgxLCAyLCAxMTMsIDE3MCwgCisgICAgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjM1LCAyMDAsIAorICAgIDIxNCwgMTA1LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAKKyAgICAxMzQsIDE3MCwgNDgsIDksIDIxNywgNDQsIDksIDEsIDI0NCwgMTUwLCA5LCAxLCAyMjQsIDg0LCA5LCAxLCAyMzUsIDAsIDksIAorICAgIDEsIDIzMywgMTA4LCA5LCAxLCAyMzEsIDgzLCA5LCAxLCAyMjgsIDY3LCA5LCAxLCAyNDEsIDIyNSwgOSwgMSwgMjEyLCAzMCwgCisgICAgOSwgMSwgMTA5LCAyMzEsIDE5NywgOSwgMSwgMjExLCA0MywgOSwgMjQ0LCAxNzEsIDksIDI0OCwgMTkwLCA5LCAyMzQsIAorICAgIDIwOSwgOSwgMjQ0LCAxNzMsIDksIDI0OCwgMTkyLCA5LCAyMzQsIDIxMSwgOSwgMjIwLCA5NSwgOSwgMjE4LCA0NiwgOSwgCisgICAgMjMxLCAyMzEsIDQ4LCA5LCAxODIsIDQ4LCA5LCAxODIsIDUxLCA5LCAyMTgsIDY2LCAyNTQsIDE3OSwgOSwgMjM1LCAyMDAsIAorICAgIDI0OCwgMTkyLCA5LCAxNjQsIDIyOCwgNjgsIDI0MiwgMjI1LCA5LCAyMDksIDI1NSwgOSwgMjUsIDUsIDQsIDIxNCwgMTA2LCAKKyAgICA0OCwgOSwgMjUsIDUsIDIzNSwgMjAwLCA0LCAyMTQsIDEwNiwgNDgsIDksIDI1LCA1LCA1OSwgNTEsIDksIDIyMywgNTIsIAorICAgIDI0OCwgMTkyLCA5LCAyNDQsIDE3NCwgMiwgMTEzLCAyNDcsIDEyNiwgOSwgMjEyLCAzMiwgMTgyLCA1MSwgMjU0LCA0NSwgCisgICAgMjEsIDIxMCwgODYsIDI1NCwgNDUsIDIxLCAxMTEsIDI1NCwgNDUsIDIxLCAxMDUsIDI1NCwgNDUsIDIxLCAxNTgsIDI1NCwgCisgICAgNDUsIDIxLCAxNjEsIDI1NCwgNDUsIDIxLCAxOTAsIDI1NCwgNDUsIDIxLCAxOTUsIDI1NCwgNDUsIDIxLCAxOTksIDI1NCwgCisgICAgNDUsIDIxLCAxOTYsIDI1NCwgNDUsIDIxLCAyMDEsIDksIDIyNSwgMTg1LCA1MCwgOSwgMjQ4LCA5MSwgMjIwLCAxMzksIDksIAorICAgIDIxNiwgMTQ3LCAyMjAsIDEzOSwgOSwgMjQ0LCA4OSwgMjI1LCAxMiwgMjE4LCAxNTgsIDksIDEsIDI0NywgMTI3LCAyNTIsIAorICAgIDYyLCA5LCAxLCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMSwgMjE4LCAyNCwgMjU0LCAxNzksIDksIDEsIDEwOSwgMjEyLCA0NiwgCisgICAgOSwgMSwgMTA5LCAyLCAyMTIsIDMyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDIxMiwgMzIsIDE4MiwgNTEsIDksIDEsIAorICAgIDEyNSwgMjQyLCAyNiwgOSwgMSwgMTI1LCAxODIsIDI1NCwgMTc5LCA5LCAxLCAxMjUsIDE4MiwgMjEyLCAzMCwgOSwgMSwgCisgICAgMTA0LCAyLCAxODIsIDQ4LCA5LCAxLCAxMjUsIDE4MiwgMjExLCA0MywgOSwgMSwgMjE1LCAxNDksIDksIDEsIDIxNSwgMTQ3LCAKKyAgICA5LCAxLCAyNTIsIDcyLCA5LCAxLCAyMTcsIDksIDIsIDIyMiwgMjM2LCA5LCAxLCAyMTcsIDksIDIsIDEzNCwgMTcwLCA3MiwgCisgICAgMjQ2LCAxMTEsIDksIDEsIDIyNSwgMjA4LCA5LCAxLCAyMTcsIDYsIDksIDEsIDI1MiwgNjAsIDksIDEsIDEyMiwgMiwgMTgyLCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCA5LCAxLCAyMjcsIDE1NywgOSwgMSwgMjQ2LCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIxNywgMjcsIDksIDEsIDIxNywgMjUsIDksIDEsIDI0OCwgMTM4LCA5LCAxLCAKKyAgICAyNDgsIDIwNCwgMiwgMjIyLCAyMzYsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgNTEsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgCisgICAgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA5LCA5LCAxLCAyNDgsIDE0MCwgOSwgMSwgMjQ2LCA3OCwgCisgICAgOSwgMSwgMjQ4LCAyMDQsIDIsIDEzNCwgMTcwLCA3MiwgMjQ2LCAxMTEsIDksIDEsIDI0OCwgMjA0LCAyLCAyNDQsIDE5LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjIsIDE3MywgOSwgMSwgMjIzLCA5OSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIyMywgOTksIDIsIAorICAgIDIyMiwgMjM2LCA5LCAxLCAyMjMsIDk5LCAyLCA1OSwgNTEsIDksIDEsIDIyMywgOTksIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgCisgICAgMSwgMjIzLCA5OSwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjM1LCAxMjYsIDksIDEsIDIyMywgOTksIDIsIDI0NCwgMTksIDE3MCwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjIxLCAxNjksIAorICAgIDIsIDEzNCwgMTcwLCAyNTIsIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMjIsIDI5LCAyLCAxMTMsIDE3MCwgNTEsIAorICAgIDksIDEsIDIyMiwgMjksIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjE3LCA4MiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDEsIDI0NCwgMTUxLCAyLCAKKyAgICA1OSwgMjMwLCAxMTQsIDUxLCA5LCAxLCAyNDQsIDE1MSwgMiwgNTksIDUxLCA5LCAxLCAyMTMsIDI0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNTEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjI1LCAyMDYsIDksIDEsIDIyNCwgODUsIDIsIDU5LCA0OCwgOSwgMSwgCisgICAgMjI0LCA4NSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzQsIDE4MCwgOSwgMSwgMjE3LCAyNTEsIDIzNSwgMCwgOSwgMSwgCisgICAgMjM1LCAxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM1LCAxLCAyLCA1OSwgNDgsIDksIDEsIDIyOSwgODQsIDksIDEsIDIzNSwgCisgICAgMSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyNDMsIDEyOSwgOSwgMSwgMjQzLCAxMzAsIDIsIDIyMiwgMjM2LCA5LCAxLCAKKyAgICAyMjksIDcsIDksIDEsIDI0MywgMTMwLCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDI0MiwgMTA4LCA5LCAxLCAyNDMsIDEzMCwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIzMywgMTA5LCAyLCA1OSwgCisgICAgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNTEsIDksIAorICAgIDEsIDIyOCwgNjgsIDIsIDU5LCA1MSwgOSwgMSwgMjI4LCA2OCwgMjQyLCAyMjUsIDksIDEsIDIyMiwgMjE2LCA5LCAxLCAKKyAgICAyMjgsIDY4LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjI4LCA2OCwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDEsIDIyNiwgCisgICAgMjQ3LCAxNDksIDksIDEsIDIxNywgMjgsIDIsIDU5LCA0OCwgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCA0OCwgOSwgMSwgMjQxLCAKKyAgICAyMjYsIDI0MiwgMTc4LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDIsIDE4MiwgNDgsIDksIDEsIDIxNywgOSwgMjMxLCAKKyAgICAxNzAsIDI0MiwgMTc4LCA5LCAxLCAyMTIsIDMxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzgsIDksIDEsIAorICAgIDIyNiwgMjM4LCA5LCAxLCA2OSwgOSwgMSwgMjEwLCAyMTIsIDksIDEsIDIzNCwgNzksIDIxMCwgMjEyLCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDIxMywgMjU1LCA5LCAxLCAyNDQsIDE3NiwgMjExLCA0MywgOSwgMSwgNzcsIAorICAgIDIsIDIxNywgNzgsIDksIDEsIDc3LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjEyLCAzMSwgMiwgNTksIDQ4LCA5LCAxLCA3NiwgCisgICAgOSwgMSwgNzcsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgNzcsIDI1MiwgMTQwLCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIAorICAgIDE4MiwgNDgsIDksIDI0MywgMjM2LCAyMTgsIDEzMSwgOSwgMSwgMjU0LCAyNTIsIDksIDQsIDEyNSwgMjcsIDIyMiwgMjksIAorICAgIDIsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk3LCA5LCA0LCAxMjUsIDI3LCAyMjQsIDg1LCAyLCAyMzMsIDEwOSwgMiwgCisgICAgMTA5LCAyMzEsIDE5NywgOSwgNCwgMTI1LCA2NiwgNjUsIDE3LCA5LCA0LCAxMjUsIDIzMywgMTA5LCAyNTQsIDE3OSwgOSwgCisgICAgNCwgMTI1LCAyMzUsIDEyOSwgOSwgNCwgMTI1LCAxMzQsIDI0NywgMTI2LCA5LCA0LCAxMjUsIDIyMSwgMTY4LCA5LCAyNDUsIAorICAgIDE1MSwgNjQsIDI1MywgMTc0LCA5LCAyMTgsIDE1NCwgNjQsIDIyMiwgMTQwLCAyNDUsIDE4MywgMjQxLCAxNjIsIDksIDQsIAorICAgIDEyNSwgMjIyLCAxODUsIDIxMCwgODYsIDksIDQsIDEyNSwgMjE0LCAxNTksIDIyMywgMTE4LCAyMTAsIDg2LCA5LCA0LCAKKyAgICAxMjUsIDI0NywgMTI3LCAyNDEsIDI0MywgNjQsIDIzNCwgMTM1LCA5LCA0LCAxMjUsIDY2LCA1MywgMTcsIDksIDQsIDEyMSwgCisgICAgMjIxLCAxNjgsIDksIDQsIDEyNSwgMjMxLCAyMzIsIDksIDQsIDIxMiwgMzAsIDksIDQsIDIxMSwgNDMsIDksIDQsIDEyNSwgCisgICAgMjExLCA0MywgOSwgNCwgMTI1LCAyMjgsIDY3LCA5LCAyMjUsIDQ0LCA2NCwgMjIyLCAxNSwgOSwgMjQ1LCAxNjAsIDI1MCwgCisgICAgMTgzLCAxMjEsIDIxOCwgMTMxLCA5LCAyNDUsIDE2MCwgMjUwLCAxODMsIDEyNSwgMjE4LCAxMzEsIDksIDIyMiwgMTg1LCAKKyAgICAxMjUsIDIxOCwgMTMyLCAyLCAyNDQsIDExMiwgMjUwLCAxODIsIDksIDQsIDEyMSwgMjMxLCA4MywgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgOSwgMSwgMjIzLCA5OSwgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMjEwLCA4NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIAorICAgIDEwNSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE1OCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE2MSwgMjQ1LCAzMCwgMjU0LCAKKyAgICA0NSwgMjEsIDE5MCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5NSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5OSwgMjQ1LCAKKyAgICAzMCwgMjU0LCA0NSwgMjEsIDE5NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDIwMSwgOSwgMSwgMjIwLCA2MiwgMiwgNTksIAorICAgIDUxLCA5LCAxLCAyNDgsIDIyNSwgMiwgNTksIDUxLCA5LCAxLCAyNDIsIDI1MiwgMiwgNTksIDUxLCA5LCA1LCAyMTksIDE2MCwgCisgICAgMjU0LCAxMzQsIDksIDUsIDIxOSwgMTYwLCAyMjQsIDIzOCwgMjMxLCA2MywgOSwgMSwgMjQxLCAyMjYsIDIsIDIzNSwgMjAwLCAKKyAgICAyMTQsIDEwNSwgMTgzLCAyNDUsIDE1MSwgNjQsIDIyNiwgMTgsIDE4MywgMjE4LCAyMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAKKyAgICAxODMsIDIxOCwgNjgsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTgzLCAyMTgsIDIwLCAyNDksIDIzNCwgMTgzLCAyMTgsIDY4LCAKKyAgICAyNDksIDIzNCwgMTgzLCAyMDMsIDI0OSwgMjM0LCAxODMsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAyNDksIAorICAgIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDIxOCwgMjAsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAKKyAgICAyMTgsIDY4LCAyNDksIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDI0OSwgMTg4LCAxODMsIDI0MiwgOCwgMjI2LCAKKyAgICAyNTQsIDE4MywgMjQyLCA4LCAyMzEsIDQxLCAxODMsIDI0MiwgOCwgMjUzLCAyMjYsIDE4MywgMjU1LCAzMCwgNzksIDE4MywgCisgICAgMSwgMjU0LCAxODMsIDE4MywgMSwgMjE4LCAyNCwgMjU0LCAxODMsIDE4MywgMSwgMjUyLCAzMywgMTgzLCAxLCAyNDMsIAorICAgIDEyMCwgMTgzLCAxLCAyNDMsIDEyMSwgMjQzLCA5OCwgMTgzLCAxLCAyNDgsIDIwMCwgMTgzLCAxLCAyNDcsIDEyNywgMjQ4LCAKKyAgICAyMDEsIDIyMiwgMjMyLCAxODMsIDEsIDI0MSwgMjQ1LCAxODMsIDEsIDIxMiwgMzAsIDE4MywgMSwgMjEwLCAxMDgsIDE4MywgCisgICAgMSwgMjQxLCAyMDIsIDE4MywgMSwgMjE2LCAyMjcsIDE4MywgMSwgMjE2LCAyMjgsIDI0MywgOTgsIDE4MywgMSwgMjEwLCAKKyAgICAxOTksIDE4MywgMSwgMjEwLCAyMDAsIDI0MSwgMjQ1LCAxODMsIDEsIDIzNCwgMjMxLCAxODMsIDEsIDIzMywgMTA3LCAxODMsIAorICAgIDEsIDIzMCwgMTk1LCAxODMsIDEsIDIyNywgMTk4LCAxODMsIDEsIDIyMCwgMTQ1LCAxODMsIDEsIDQwLCAyMjAsIDE0NSwgCisgICAgMTgzLCAxLCA3NiwgMTgzLCAxLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjMsIDUyLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjIsIDI2LCAKKyAgICAxODMsIDEsIDIyNCwgNzgsIDE4MywgMSwgMjIyLCAyMzIsIDE4MywgMSwgMjIwLCAyMiwgMTgzLCAxLCAyMTcsIDM3LCAxODMsIAorICAgIDEsIDIyNSwgMTcyLCAyNTIsIDIwLCAxODMsIDEsIDIyNSwgMTcyLCAyNDIsIDI0OSwgMTgzLCAxLCAyMjUsIDE3MiwgMjQ4LCAKKyAgICAyOCwgMTgzLCAyMjQsIDE1NCwgNDgsIDE4MywgMjI0LCAxNTQsIDUxLCAxODMsIDIyNCwgMTU0LCAyNDYsIDEyNSwgMTgzLCAKKyAgICAyMTAsIDE3LCA0OCwgMTgzLCAyMTAsIDE3LCA1MSwgMTgzLCAyMTAsIDE3LCAyNDYsIDEyNSwgMTgzLCAyMjMsIDEzNCwgNDgsIAorICAgIDE4MywgMjIzLCAxMzQsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIDI0LCAyNDEsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIAorICAgIDI0LCAyNTQsIDExMywgMTgzLCAyNDEsIDI0OCwgNDgsIDE4MywgMjQxLCAyNDgsIDUxLCAxODMsIDI0MSwgMjQ3LCAyNDYsIAorICAgIDEyNSwgMTgzLCAyNDUsIDg3LCA0OCwgMTgzLCAyNDUsIDg3LCA1MSwgMTgzLCAyMjIsIDEwOSwgMTgzLCAyNDQsIDE0NCwgCisgICAgMjQ3LCAxMjgsIDE4MywgMjIzLCAyNTEsIDE4MywgMjIyLCAxMzYsIDE4MywgMTEzLCA2NywgMTcwLCA0OCwgMTgzLCAxMTMsIAorICAgIDY3LCAxNzAsIDUxLCAxODMsIDEzNCwgMTcwLCA0OCwgMTgzLCAxMzQsIDE3MCwgNTEsIDE4MywgMjI2LCAyNTIsIDIzMiwgCisgICAgMjIwLCA0OCwgMTgzLCAyMjYsIDI1MiwgMjMyLCAyMjAsIDUxLCAxODMsIDIzMCwgNjEsIDE4MywgMjUyLCAxMzksIDE4MywgCisgICAgMSwgMjE5LCA1MSwgMjEwLCA4MCwgMTgzLCAxLCAyMTksIDUxLCAyMzQsIDEyOCwgMTgzLCAxLCAyMTksIDUxLCAyNDQsIAorICAgIDE2MiwgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDI0MSwgMSwgNTEsIDksIDEsIDI1MiwgNjMsIDIsIDU5LCAyNTIsIAorICAgIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCAKKyAgICA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDI1MiwgNTEsIDIyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDI1MiwgNjMsIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyNTIsIDYzLCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMTIyLCAyLCAxMTMsIAorICAgIDE3MCwgNDgsIDksIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA0LCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyMjMsIDk5LCAyLCA5MSwgOSwgMSwgMjIxLCAxNjksIDIsIDI0NCwgMTksIAorICAgIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMzQsIDE3MCwgCisgICAgMjI1LCAxMCwgMjQ2LCAxMTIsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgCisgICAgMjQ0LCAxNTEsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjQ0LCAxNTEsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIAorICAgIDE1MywgNTEsIDksIDEsIDIzNCwgMTgxLCAyLCA1OSwgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNDgsIDksIAorICAgIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCA5LCAxLCA2NiwgMiwgNTksIDQ4LCA5LCAKKyAgICAxLCA2NiwgMiwgNTksIDUxLCA5LCAxLCAyMjgsIDY4LCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIAorICAgIDIxNywgODEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTMwLCA5LCAxLCAKKyAgICAyMjMsIDk5LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAxODIsIDQ4LCA5LCAxLCAyMjEsIAorICAgIDE2OSwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAyNDcsIDEyNiwgOSwgMSwgMjIxLCAxNjksIDIsIDQsIDksIDEsIAorICAgIDIxNywgODIsIDIyLCAxMTMsIDI0NywgMTI2LCA5LCAxLCAyMjMsIDk5LCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAKKyAgICAyNDcsIDEyNiwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIAorICAgIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIAorICAgIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgCisgICAgMjQ0LCAxOSwgNTEsIDksIDEsIDIxMiwgMzEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNTEsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIAorICAgIDksIDEsIDIzNSwgMSwgMiwgMTEzLCAxNzAsIDQ4LCAyMTYsIDIwNiwgMSwgMjQyLCA1MywgMjE2LCAyMDYsIDEsIDIyMCwgCisgICAgNzAsIDIxNiwgMjA2LCAxLCAyMjgsIDY2LCAyMTYsIDIwNiwgMSwgMjIzLCAxODcsIDIxNiwgMjA2LCAxLCAyNTIsIDE5NywgCisgICAgMjE2LCAyMDYsIDEsIDIzMywgMSwgMjE2LCAyMDYsIDEsIDIzNSwgMTQsIDIxNiwgMjA2LCAxLCAyNTQsIDE2OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxNCwgMjUsIDIxNiwgMjA2LCAxLCAyMzEsIDgyLCAyMTYsIDIwNiwgMSwgMjQ0LCAyMDIsIDIxNiwgMjA2LCAKKyAgICAxLCAyNDgsIDMxLCAyMTYsIDIwNiwgMSwgMjE2LCAyMDgsIDIxNiwgMjA2LCAxLCAyMzMsIDEzNywgMjE2LCAyMDYsIDEsIAorICAgIDI0MywgMTM4LCAyMTYsIDIwNiwgMSwgMjQyLCAxODQsIDIxNiwgMjA2LCAxLCAyMjEsIDE2NywgMjE2LCAyMDYsIDEsIDI0OCwgCisgICAgMTU2LCAyMTYsIDIwNiwgMSwgMjEwLCAxMDAsIDIxNiwgMjA2LCAxLCAyMTcsIDM4LCAyMTYsIDIwNiwgMSwgMjExLCAxMDMsIAorICAgIDIxNiwgMjA2LCAxLCAyMjUsIDIzNywgMjE2LCAyMDYsIDEsIDIzNSwgMTM0LCAyMTYsIDIwNiwgMSwgMjUwLCAxNDIsIDIxNiwgCisgICAgMjA2LCAxLCAyMTUsIDE1NiwgMjE2LCAyMDYsIDEsIDI0MSwgMTk1LCAyMTYsIDIwNiwgMSwgMjM0LCAxMzcsIDIxNiwgMjA2LCAKKyAgICAxLCAyMTYsIDIwNywgMjE2LCAyMDYsIDEsIDIxMCwgMTE1LCAyMTYsIDIwNiwgMSwgMjIwLCA2MCwgMjE2LCAyMDYsIDEsIAorICAgIDIyMiwgMzIsIDIxNiwgMjA2LCAxLCAyNDgsIDIyNywgMjE2LCAyMDYsIDEsIDExMiwgMjE2LCAyMDYsIDEsIDIxMCwgMjMsIAorICAgIDIxNiwgMjA2LCAxLCAyNTQsIDIwMiwgMjE2LCAyMDYsIDEsIDI0MiwgMjUwLCAyMTYsIDIwNiwgMSwgMjI0LCA4OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxMiwgNjMsIDIxNiwgMjA2LCAyNTUsIDMxLCAyMTYsIDIwNiwgMjU1LCA0NywgMjE2LCAyMDYsIDI0MCwgCisgICAgMTIxLCAyMTYsIDIwNiwgMjQ1LCAyMTYsIDIxNiwgMjA2LCAyMTQsIDIyMiwgMjE2LCAyMDYsIDIyNiwgMTg2LCAyMTYsIAorICAgIDIwNiwgMjQ1LCAyMjQsIDIxNiwgMjA2LCAyNDUsIDI0LCAyMTYsIDIwNiwgMjI2LCAyNTEsIDIxNiwgMjA2LCAyMjcsIDMsIAorICAgIDIxNiwgMjA2LCAyMTgsIDQ2LCAyMTYsIDIwNiwgMSwgMjI5LCAyMzAsIDIyOCwgMTQyLCAyMSwgMjEwLCA4NiwgMjI4LCAKKyAgICAxNDIsIDIxLCAxMTEsIDIyOCwgMTQyLCAyMSwgMTA1LCAyMjgsIDE0MiwgMjEsIDE1OCwgMjI4LCAxNDIsIDIxLCAxNjEsIAorICAgIDIyOCwgMTQyLCAyMSwgMTkwLCAyMjgsIDE0MiwgMjEsIDE5NSwgMjI4LCAxNDIsIDIxLCAxOTksIDIyOCwgMTQyLCAyMSwgCisgICAgMTk2LCAyMjgsIDE0MiwgMjEsIDIwMSwgMjI4LCAxNDIsIDEsIDYxLCAyMjgsIDE0MiwgMSwgMjQ1LCAyMTcsIDIyOCwgMTQyLCAKKyAgICAxLCA3NCwgMjI4LCAxNDIsIDEsIDc2LCAyMjgsIDE0MiwgMSwgNjksIDIyOCwgMTQyLCAxLCAyMjYsIDE4NywgMjI4LCAxNDIsIAorICAgIDEsIDc4LCAyMjgsIDE0MiwgMSwgMjQ4LCAyMTcsIDIyOCwgMTQyLCAxLCAyMzAsIDMwLCAyMjgsIDE0MiwgMSwgMjUyLCAKKyAgICAxOTksIDIyOCwgMTQyLCAxLCAxOTEsIDIyOCwgMTQyLCAxLCAyMTcsIDEwNiwgMjI4LCAxNDIsIDEsIDIzNSwgMTQ3LCAyMjgsIAorICAgIDE0MiwgMSwgMjUwLCAxNjUsIDIyOCwgMTQyLCAxLCAyNDgsIDIyOSwgMjI4LCAxNDIsIDEsIDIwNSwgMjI4LCAxNDIsIDEsIAorICAgIDIyMiwgMTgxLCAyMjgsIDE0MiwgMSwgMjA2LCAyMjgsIDE0MiwgMSwgMjQzLCA4NiwgMjI4LCAxNDIsIDEsIDI0NCwgMjA0LCAKKyAgICAyMjgsIDE0MiwgMSwgMTc2LCAyMjgsIDE0MiwgMSwgMjMzLCAxNDEsIDIyOCwgMTQyLCAxLCAyMjksIDIzNCwgMjExLCAyMjMsIAorICAgIDIyOCwgMTQyLCAxLCAxODYsIDIyOCwgMTQyLCAxLCAyMjcsIDE2OSwgMjI4LCAxNDIsIDEsIDE5OCwgMjI4LCAxNDIsIDEsIAorICAgIDE2MiwgMjI4LCAxNDIsIDEsIDIxMiwgNjUsIDIyOCwgMTQyLCAxLCAxOTIsIDIyOCwgMTQyLCAxLCAyMjcsIDE3MCwgMjExLCAKKyAgICAyMjMsIDIyOCwgMTQyLCAxLCAyMzUsIDY3LCAyMzUsIDE0NywgMjI4LCAxNDIsIDEsIDIzNSwgNjcsIDI1MCwgMTY1LCAyMjgsIAorICAgIDE0MiwgMSwgMjM1LCA2NywgMjA1LCAyMjgsIDE0MiwgMzgsIDIxOSwgMjUzLCAxMjUsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgCisgICAgMjE5LCAyNTMsIDEyMSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMTksIDI1MywgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjAwLCAyNDgsIDQ2LCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMTI1LCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIwMCwgMTIxLCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjI5LCAxOTgsIDc5LCAyMjgsIDE0MiwgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTQyLCAxMjUsIDEzOCwgMjU0LCAKKyAgICA2NSwgMjI4LCAxNDIsIDEyMSwgMTM4LCAyNTQsIDY1LCAyMjgsIDE0MiwgMTYsIDIyNiwgMTg4LCAyNDgsIDU4LCAyMjgsIAorICAgIDE0MiwgMTYsIDI0MywgODUsIDIyOCwgMTQyLCAyNDksIDIyNywgMjI4LCAxNDIsIDI0NSwgMzksIDc5LCAyMjgsIDE0MiwgCisgICAgMjMzLCAxMTQsIDIyMSwgMjU0LCAxLCAyNTQsIDE4NSwgMjIxLCAyNTQsIDEsIDI1MSwgMjM2LCAyMjEsIDI1NCwgMSwgMjQzLCAKKyAgICAxMTksIDIyMSwgMjU0LCAxLCAyNDgsIDIwMiwgMjIxLCAyNTQsIDEsIDIzNSwgMTU4LCAyMjEsIDI1NCwgMSwgMjUyLCAxOTcsIAorICAgIDIyMSwgMjU0LCAxLCAyMTAsIDg5LCAyMjEsIDI1NCwgMSwgMjM1LCAxNjYsIDIyMSwgMjU0LCAxLCAyMTYsIDY4LCAyMjEsIAorICAgIDI1NCwgMSwgMjEwLCAxODIsIDIyMSwgMjU0LCAxLCAyMzUsIDE1LCAyMjEsIDI1NCwgMSwgMjMzLCAxMzQsIDIyMSwgMjU0LCAKKyAgICAxLCAyMzAsIDE5NSwgMjIxLCAyNTQsIDEsIDIyNywgMTk4LCAyMjEsIDI1NCwgMSwgMjE5LCAxNTgsIDIyMSwgMjU0LCAxLCAKKyAgICAyMzYsIDYsIDIyMSwgMjU0LCAxLCAyNDQsIDEyOSwgMjIxLCAyNTQsIDEsIDIxNSwgMTgyLCAyMjEsIDI1NCwgMSwgMjI0LCAKKyAgICAxMywgMjIxLCAyNTQsIDEsIDIyMiwgMjMyLCAyMjEsIDI1NCwgMSwgMjIwLCA4NywgMjIxLCAyNTQsIDEsIDIxNywgMTAxLCAKKyAgICAyMjEsIDI1NCwgMTY0LCAyMzYsIDYsIDIyMSwgMjU0LCAxNjQsIDIzNiwgNSwgMjIxLCAyNTQsIDE2NCwgMjI2LCAyNDcsIAorICAgIDIyMSwgMjU0LCAxNjQsIDI0OCwgMjE1LCAyMjEsIDI1NCwgNTgsIDEsIDI0NSwgMTEzLCAyMTAsIDE4MiwgMjIxLCAyNTQsIAorICAgIDE2NCwgMjQ1LCAxMTMsIDIxMCwgMTgyLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzYsIDIyMSwgMjU0LCAyNSwgNSwgNzYsIAorICAgIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCAyNTUsIDgyLCAyMjEsIAorICAgIDI1NCwgMjUsIDUsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgCisgICAgNjEsIDIyMSwgMjU0LCAyNSwgNSwgNjEsIDIyMSwgMjU0LCA1OCwgMSwgMjE5LCAyNTMsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIAorICAgIDIxOSwgMjUzLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDY5LCAyMjEsIDI1NCwgMjUsIDUsIDY5LCAyMjEsIDI1NCwgCisgICAgNTgsIDEsIDc0LCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzQsIDIyMSwgMjU0LCAyNSwgNSwgNzQsIDIyMSwgMjU0LCAyNSwgCisgICAgNSwgNzgsIDIyMSwgMjU0LCAyNSwgNSwgMjE4LCA0NiwgMjIxLCAyNTQsIDE2NCwgMjI5LCA5NywgMjIxLCAyNTQsIDIyNCwgCisgICAgMTQ0LCAyMjksIDk3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMjI3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMTIyLCAKKyAgICAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MiwgMTIyLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MywgMjA5LCAyMjEsIDI1NCwgCisgICAgMjI0LCAxNDQsIDIyMCwgMTAsIDIyMSwgMjU0LCAyNTUsIDMwLCA3OSwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMzEsIDczLCAKKyAgICAyMjQsIDQ4LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxMCwgMzEsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjI0LCA0OCwgMjIxLCAKKyAgICAyNTQsIDIyNCwgMTQ0LCAyMTAsIDExNCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTUsIDkwLCAyMjEsIDI1NCwgMjI0LCAxNDQsIAorICAgIDI1NCwgMTcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjMxLCAxNTAsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAKKyAgICAxMDgsIDIzMSwgMTg3LCAxLCAyNDIsIDMxLCAyMzEsIDE4NywgMSwgMjU1LCAzNCwgMjMxLCAxODcsIDEsIDI1NCwgMjI1LCAKKyAgICAyMzEsIDE4NywgMSwgMjU1LCA4LCAyMzEsIDE4NywgMSwgMjU0LCAyMTgsIDIzMSwgMTg3LCAxLCAyMTQsIDEyNCwgMjMxLCAKKyAgICAxODcsIDEsIDI1MywgMTY4LCAyMzEsIDE4NywgMSwgMjM1LCAxNjYsIDIzMSwgMTg3LCAxLCAyNTMsIDIwNiwgMjMxLCAxODcsIAorICAgIDEsIDI1NCwgMTkwLCAyMzEsIDE4NywgMSwgMjU0LCAxOTUsIDIzMSwgMTg3LCAxLCAyNTQsIDE4NywgMjMxLCAxODcsIDEsIAorICAgIDI1NCwgMTQ0LCAyMzEsIDE4NywgMSwgMjU0LCAxMzEsIDIzMSwgMTg3LCAxLCAyNTMsIDI0NSwgMjMxLCAxODcsIDEsIDIzNiwgCisgICAgNiwgMjMxLCAxODcsIDEsIDI1NCwgODAsIDIzMSwgMTg3LCAxLCAyNTMsIDIxNiwgMjMxLCAxODcsIDEsIDI1NCwgNTMsIAorICAgIDIzMSwgMTg3LCAxLCAyNTQsIDQ5LCAyMzEsIDE4NywgMSwgMjUzLCAyMzksIDIzMSwgMTg3LCAxLCAyNTMsIDIxNCwgMjMxLCAKKyAgICAxODcsIDEsIDI0NiwgNjMsIDIzMSwgMTg3LCAxLCAyMzUsIDgsIDIzMSwgMTg3LCAxLCAyNTQsIDIwNSwgMjMxLCAxODcsIAorICAgIDI1NCwgMjMxLCA3OSwgMjMxLCAxODcsIDIxMywgMTM2LCA3OSwgMjMxLCAxODcsIDI0MywgNjAsIDc5LCAyMzEsIDE4NywgCisgICAgMjI0LCAxNDMsIDksIDEsIDI1MiwgNjMsIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDIxNywgODIsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNTEsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjQsIDg1LCAyLCA1OSwgNTEsIDksIDEsIDIzMywgMTA5LCAyLCA1MiwgMTMwLCA5LCAxLCA2NiwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCA3NywgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCAxODIsIDQ4LCA5LCAxLCA3NywgCisgICAgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDIzMiwgMTI5LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCA1OSwgMjExLCAyMzEsIDksIDEsIDIyMiwgMjAzLCAyMTEsIDQzLCA5LCAyNDksIDEwNywgMjQ0LCAxNzMsIDksIAorICAgIDI0OSwgMTA3LCAyNDgsIDE5MiwgOSwgMjQ5LCAxMDcsIDIzNCwgMjExLCA5LCAyNDksIDEwNywgMjQ0LCAxNzEsIDksIDI0OSwgCisgICAgMTA3LCAyNDgsIDE5MCwgOSwgMjQ5LCAxMDcsIDIzNCwgMjA5LCA5LCAxMzgsIDEyMywgNTksIDQ4LCA5LCAxMzgsIDExMywgCisgICAgMTcwLCA0OCwgOSwgMTM4LCAyMzIsIDEzMCwgNDgsIDksIDEzOCwgMTIzLCA1OSwgNTEsIDksIDEzOCwgMTEzLCAxNzAsIDUxLCAKKyAgICA5LCAxMzgsIDIzMiwgMTMwLCA1MSwgOSwgMjA0LCAyNDQsIDE3MSwgOSwgMjA0LCAyNDgsIDE5MCwgOSwgMjA0LCAyMzQsIAorICAgIDIwOSwgOSwgNCwgMTI1LCAyMTIsIDMwLCA5LCAyNDQsIDE3NCwgMiwgMjIyLCAyMzYsIDksIDI0NCwgMTc0LCAyLCA1OSwgCisgICAgNDgsIDksIDIzNCwgMjEyLCAyLCA1OSwgNTEsIDksIDQzLCAyNTQsIDIsIDQ4LCA5LCA0NCwgMjU0LCAyLCA0OCwgOSwgNDMsIAorICAgIDI1NCwgMiwgNTEsIDksIDQ0LCAyNTQsIDIsIDUxLCA5LCA1MiwgNDQsIDI1NCwgMiwgNDgsIDksIDUyLCA0NCwgMjU0LCAyLCAKKyAgICA3MiwgMiwgMjQ3LCAxMjgsIDksIDQ0LCAyNTQsIDIsIDcyLCAyLCAyNDcsIDEyOCwgOSwgMjQ4LCAxOTMsIDIsIDI0NywgCisgICAgMTI4LCA4NCwgNSwgMjM1LCAyMDAsIDI1MSwgNywgODQsIDUsIDI1MSwgNywgODQsIDUsIDI1NCwgODMsIDg0LCA1LCAyMTMsIAorICAgIDE0NywgODQsIDEsIDIxOSwgMjUzLCA2MSwgODQsIDEsIDYxLCA4NCwgMSwgMjU1LCA4MiwgODQsIDEsIDc0LCA4NCwgMSwgCisgICAgMjM2LCA0MCwgODQsIDEsIDY5LCA4NCwgMSwgMjE0LCAxMTgsIDg0LCAxLCAxNDksIDE1MywgODQsIDEsIDE0OSwgMTU2LCAKKyAgICA4NCwgMSwgMjUxLCAxMCwgNzYsIDg0LCAxLCAyMTksIDI1MywgNzYsIDg0LCAxLCA3NiwgODQsIDEsIDI1NCwgMjEwLCA4NCwgCisgICAgMSwgMjUxLCAxMCwgNzgsIDg0LCAxLCAyMTksIDI1MywgNzgsIDg0LCAxLCA3OCwgODQsIDEsIDI1MywgMjAwLCA4NCwgMSwgCisgICAgMTc2LCA4NCwgMSwgMjM0LCAxMzgsIDg0LCAxLCAyNDMsIDE0MiwgODQsIDEsIDI0MywgMCwgODQsIDEsIDIyOSwgODIsIDg0LCAKKyAgICAxLCAyNTEsIDQxLCA4NCwgMSwgMjUwLCAxNjUsIDg0LCAxLCAyMzUsIDE0NywgODQsIDEsIDIzNSwgMTIwLCA4NCwgMSwgCisgICAgMjI3LCAxNjksIDg0LCAxLCAyMTUsIDE1NywgODQsIDEsIDIxNSwgMTQ1LCA4NCwgMSwgMjQ4LCAxNDMsIDg0LCAxLCAyNDgsIAorICAgIDEyNywgODQsIDEsIDIyOCwgMTE1LCA4NCwgMSwgMjE3LCAxMDYsIDg0LCAxLCAyMTYsIDIwOSwgODQsIDEsIDI0OCwgMjI5LCAKKyAgICA4NCwgMSwgMjQ4LCAzMywgODQsIDEsIDE5OCwgODQsIDEsIDIyOCwgOTcsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMjUsIDE1MCwgCisgICAgODQsIDEsIDI1MiwgMTk5LCA4NCwgMSwgMjUyLCAyNiwgODQsIDEsIDE4NiwgODQsIDEsIDE5MiwgODQsIDEsIDIwNSwgODQsIAorICAgIDEsIDIyMiwgMTgxLCA4NCwgMSwgMjMzLCAxNDEsIDg0LCAxLCAyMzIsIDE5MCwgODQsIDEsIDIzMiwgMTgxLCA4NCwgMSwgCisgICAgMjE0LCAyNywgODQsIDEsIDIyMCwgMTA0LCA4NCwgMSwgMjE4LCAyMjUsIDg0LCAxLCAyMDYsIDg0LCAxLCAxNjIsIDg0LCAKKyAgICAyNSwgNSwgMjI2LCAyMzgsIDg0LCAyNSwgNSwgMjI2LCAxODUsIDg0LCA1LCAyMjcsIDIwOSwgODQsIDUsIDI1MywgMTgzLCAKKyAgICA4NCwgMjUsIDUsIDI1NSwgODIsIDg0LCAyNSwgNSwgNzQsIDg0LCAyNSwgNSwgMjM2LCA0MCwgODQsIDI1LCA1LCA2OSwgODQsIAorICAgIDI1LCA1LCAyMTQsIDExOCwgODQsIDI1LCA1LCAxNDksIDE1MywgODQsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA4NCwgMjUsIAorICAgIDUsIDI1MSwgMTAsIDc2LCA4NCwgMjUsIDUsIDIxOSwgMjUzLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgODQsIDI1LCA1LCAyNTEsIDEwLCA3OCwgODQsIDI1LCA1LCAyMTksIDI1MywgNzgsIDg0LCAyNSwgNSwgNzgsIDg0LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDg0LCA1LCAyMTMsIDE1MiwgODQsIDI1LCA1LCAyMjQsIDE4OCwgNzYsIDg0LCAyNSwgNSwgCisgICAgMjUzLCAxNzksIDg0LCAyMjYsIDIwOCwgODQsIDIxOCwgMTEzLCA1LCAyMTQsIDIxNiwgODQsIDIxOCwgMTEzLCA1LCAyNTQsIAorICAgIDg1LCA4NCwgMjQyLCAxNDQsIDI1NSwgMjMsIDg0LCAyNTUsIDEyLCAyNTUsIDIzLCA4NCwgMjUsIDUsIDI1MSwgMTAsIDIwMCwgCisgICAgNzYsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAxMTcsIDg0LCAxLCAyMjQsIDkxLCA4NCwgMSwgMjM0LCAKKyAgICAxMjEsIDg0LCAxLCAyNDIsIDIzMywgODQsIDEsIDIxMCwgMTE2LCA4NCwgMSwgMjQ4LCAxMzIsIDg0LCAxLCAyMjMsIDQyLCAKKyAgICA4NCwgMSwgMjQ0LCAyMDQsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIDE0OSwgMjIyLCAxODIsIDg0LCAxLCAxNDksIDIzMiwgCisgICAgMTkxLCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDg0LCAyNDgsIDE4NiwgODQsIDUyLCAKKyAgICAyNDgsIDE4NiwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMSwgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIAorICAgIDE2MSwgODQsIDIxLCAxOTAsIDg0LCAyMSwgMTk1LCA4NCwgMjEsIDE5OSwgODQsIDIxLCAxOTYsIDg0LCAyMSwgMjAxLCA4NCwgCisgICAgMjU1LCAzMCwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTksIDI0NywgMTI4LCA4NCwgMSwgMjUxLCAxMCwgNjEsIDg0LCAxLCAKKyAgICAyMjYsIDIzOCwgODQsIDEsIDIyNiwgMTg1LCA4NCwgMSwgMjUzLCAxNzksIDg0LCAxLCAyMTQsIDIxNCwgODQsIDEsIDIxNCwgCisgICAgMTE3LCA4NCwgMSwgMjEwLCA4MiwgODQsIDEsIDExNCwgMTkyLCA4NCwgMSwgMjQzLCAzNiwgODQsIDEsIDIzNSwgMTAyLCAKKyAgICA4NCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA4NCwgMSwgMjQ4LCAxMzMsIDg0LCAxLCAyNTIsIDExOSwgMTQ2LCA1LCAyNTEsIAorICAgIDcsIDE0NiwgNSwgMjU0LCA4MywgMTQ2LCA1LCAyMTMsIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDgyLCAxNDYsIAorICAgIDEsIDc0LCAxNDYsIDEsIDIzNiwgNDAsIDE0NiwgMSwgNjksIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIAorICAgIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjU0LCAyMTAsIDE0NiwgMSwgNzgsIDE0NiwgMSwgMjUzLCAKKyAgICAyMDAsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgMTM4LCAxNDYsIDEsIDI0MywgMTQyLCAxNDYsIDEsIDI0MywgMCwgCisgICAgMTQ2LCAxLCAyMjksIDgyLCAxNDYsIDEsIDI1MSwgNDEsIDE0NiwgMSwgMjUwLCAxNjUsIDE0NiwgMSwgMjM1LCAxNDcsIAorICAgIDE0NiwgMSwgMjM1LCAxMjAsIDE0NiwgMSwgMjI3LCAxNjksIDE0NiwgMSwgMjE1LCAxNTcsIDE0NiwgMSwgMjE1LCAxNDUsIAorICAgIDE0NiwgMSwgMjQ4LCAxNDMsIDE0NiwgMSwgMjQ4LCAxMjcsIDE0NiwgMSwgMjI4LCAxMTUsIDE0NiwgMSwgMjE3LCAxMDYsIAorICAgIDE0NiwgMSwgMjE2LCAyMDksIDE0NiwgMSwgMjQ4LCAyMjksIDE0NiwgMSwgMjQ4LCAzMywgMTQ2LCAxLCAxOTgsIDE0NiwgMSwgCisgICAgMTkxLCAxNDYsIDEsIDIyNSwgMTUwLCAxNDYsIDEsIDI1MiwgMTk5LCAxNDYsIDEsIDI1MiwgMjYsIDE0NiwgMSwgMTg2LCAKKyAgICAxNDYsIDEsIDE5MiwgMTQ2LCAxLCAyMDUsIDE0NiwgMSwgMjMzLCAxNDEsIDE0NiwgMSwgMjIwLCAxMDQsIDE0NiwgMSwgCisgICAgMjE4LCAyMjUsIDE0NiwgMSwgMjA2LCAxNDYsIDEsIDE2MiwgMTQ2LCA1LCAyMjcsIDIwOSwgMTQ2LCA1LCAyNTMsIDE4MywgCisgICAgMTQ2LCAyNSwgNSwgMjU1LCA4MiwgMTQ2LCAyNSwgNSwgNzQsIDE0NiwgMjUsIDUsIDIzNiwgNDAsIDE0NiwgMjUsIDUsIDY5LCAKKyAgICAxNDYsIDI1LCA1LCAyMTQsIDExOCwgMTQ2LCAyNSwgNSwgMTQ5LCAxNTMsIDE0NiwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE0NiwgMjUsIDUsIDc2LCAxNDYsIDI1LCA1LCAyNTQsIDIxMCwgMTQ2LCAyNSwgNSwgNzgsIDE0NiwgMjUsIDUsIDI1MywgCisgICAgMjAwLCAxNDYsIDUsIDIxMywgMTUyLCAxNDYsIDEsIDIzNCwgMTMwLCAyMTcsIDEwNiwgMTQ2LCAyNTMsIDIwMSwgMjMzLCAKKyAgICAyOSwgNzksIDE0NiwgMSwgMjIyLCAxODEsIDE0NiwgMSwgMjIzLCA0MiwgMTQ2LCAxLCAyMTAsIDE2OCwgMTQ2LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNDYsIDEsIDE0OSwgMjMyLCAxOTEsIDE0NiwgMjUsIDUsIDE0OSwgMTU2LCAxNDYsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNDYsIDIxLCAyMTAsIDg2LCAxNDYsIDIxLCAxMTEsIDE0NiwgMjEsIDEwNSwgMTQ2LCAyMSwgMTU4LCAKKyAgICAxNDYsIDIxLCAxNjEsIDE0NiwgMjEsIDE5MCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAxOTksIDE0NiwgMjEsIDE5NiwgCisgICAgMTQ2LCAyMSwgMjAxLCAxNDYsIDEsIDIyMywgMTkxLCAyLCAyMzAsIDIyOSwgMjQ4LCA2LCAxNDYsIDEsIDIyMywgMTkxLCAyLCAKKyAgICAyMzIsIDExNCwgMjQ4LCA2LCAxNDYsIDIyMiwgMTIwLCA3OSwgMTQ2LCAyMjIsIDEyMCwgNTAsIDE0NiwgMjQ5LCAxMDYsIAorICAgIDIyNywgMjAxLCAxMTEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMDUsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAKKyAgICAxNTgsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxNjEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMjMsIDIzMywgMjIsIAorICAgIDIxNiwgMjAyLCAyMTYsIDE5NywgMjQ4LCA1NiwgMTQ2LCAyNDksIDEwNiwgMjQ4LCA1NywgMjE5LCAxMjEsIDE0NiwgMjM1LCAKKyAgICAxNjcsIDE0NiwgMjQzLCAxMTAsIDc5LCAxODUsIDUsIDI1NSwgNywgMjUxLCAyNTEsIDE4NSwgNSwgMjUxLCAyNTEsIDE4NSwgCisgICAgNSwgMjEzLCAxNDcsIDE4NSwgMSwgNjEsIDE4NSwgMSwgMjU1LCA4MiwgMTg1LCAxLCA3NCwgMTg1LCAxLCAyMzYsIDQwLCAKKyAgICAxODUsIDEsIDY5LCAxODUsIDEsIDIxNCwgMTE4LCAxODUsIDEsIDI0NSwgMjE3LCAxODUsIDEsIDI1NCwgMjEwLCAxODUsIDEsIAorICAgIDIyNiwgMTg3LCAxODUsIDEsIDI1MywgMjAwLCAxODUsIDEsIDE3NiwgMTg1LCAxLCAyMzQsIDEzOCwgMTg1LCAxLCAyNDMsIAorICAgIDE0MiwgMTg1LCAxLCAyNDMsIDAsIDE4NSwgMSwgMjI5LCA4MiwgMTg1LCAxLCAyNTEsIDQxLCAxODUsIDEsIDI1MCwgMTY1LCAKKyAgICAxODUsIDEsIDIzNSwgMTQ3LCAxODUsIDEsIDIzNSwgMTIwLCAxODUsIDEsIDIyNywgMTY5LCAxODUsIDEsIDIxNSwgMTU3LCAKKyAgICAxODUsIDEsIDIxNSwgMTQ1LCAxODUsIDEsIDI0OCwgMTQzLCAxODUsIDEsIDI0OCwgMTI3LCAxODUsIDEsIDIyOCwgMTE1LCAKKyAgICAxODUsIDEsIDIxNywgMTA2LCAxODUsIDEsIDIxNiwgMjA5LCAxODUsIDEsIDI0OCwgMjI5LCAxODUsIDEsIDI0OCwgMzMsIAorICAgIDE4NSwgMSwgMTk4LCAxODUsIDEsIDE5MSwgMTg1LCAxLCAyMjUsIDE1MCwgMTg1LCAxLCAyNTIsIDE5OSwgMTg1LCAxLCAKKyAgICAyNTIsIDI2LCAxODUsIDEsIDE4NiwgMTg1LCAxLCAxOTIsIDE4NSwgMSwgMjA1LCAxODUsIDEsIDIzMywgMTQxLCAxODUsIDEsIAorICAgIDIzMiwgMTkwLCAxODUsIDEsIDIxNCwgMjcsIDE4NSwgMSwgMjIwLCAxMDQsIDE4NSwgMSwgMjA2LCAxODUsIDEsIDE2MiwgCisgICAgMTg1LCA1LCAyMjcsIDIwOSwgMTg1LCAyNSwgNSwgMjU1LCA4MiwgMTg1LCAyNSwgNSwgNzQsIDE4NSwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE4NSwgMjUsIDUsIDY5LCAxODUsIDI1LCA1LCAyMTQsIDExOCwgMTg1LCAyNSwgNSwgMjQ1LCAyMTcsIDE4NSwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxODUsIDI1LCA1LCAyMjYsIDE4NywgMTg1LCAyNSwgNSwgMjUzLCAyMDAsIDE4NSwgNSwgMjEzLCAKKyAgICAxNTIsIDE4NSwgNSwgMjE0LCAyMTgsIDE4NSwgMSwgMjM0LCAxMjEsIDE4NSwgMSwgMjQyLCAyMzMsIDE4NSwgMSwgMjEwLCAKKyAgICAxMTYsIDE4NSwgMSwgMjIyLCAxODEsIDE4NSwgMSwgMjQ0LCAyMDQsIDE4NSwgMjEsIDIxMCwgODYsIDE4NSwgMjEsIDExMSwgCisgICAgMTg1LCAyMSwgMTA1LCAxODUsIDIxLCAxNTgsIDE4NSwgMjEsIDE2MSwgMTg1LCAyMSwgMTkwLCAxODUsIDIxLCAxOTUsIAorICAgIDE4NSwgMjEsIDE5OSwgMTg1LCAyMSwgMTk2LCAxODUsIDIxLCAyMDEsIDE4NSwgMjE2LCA3NSwgMTg1LCAyNTUsIDYsIDE4NSwgCisgICAgMjM1LCAxODUsIDE4NSwgMjE0LCAxNDYsIDE4NSwgMjQ1LCAxODksIDIyNiwgMTkyLCAxODUsIDUsIDIxMSwgNzgsIDE3MSwgCisgICAgNSwgMjUxLCA3LCAxNzEsIDUsIDI1NCwgODMsIDE3MSwgNSwgMjEzLCAxNDcsIDE3MSwgMSwgNjEsIDE3MSwgMSwgMjU1LCAKKyAgICA4MiwgMTcxLCAxLCA3NCwgMTcxLCAxLCAyMzYsIDQwLCAxNzEsIDEsIDY5LCAxNzEsIDEsIDIxNCwgMTE4LCAxNzEsIDEsIAorICAgIDE0OSwgMTUzLCAxNzEsIDEsIDE0OSwgMTU2LCAxNzEsIDI1LCAyNTEsIDEwLCA3NiwgMTcxLCAxLCA3NiwgMTcxLCAxLCAKKyAgICAyNTQsIDIxMCwgMTcxLCAyNSwgMjUxLCAxMCwgNzgsIDE3MSwgMSwgNzgsIDE3MSwgMSwgMjUzLCAyMDAsIDE3MSwgMSwgCisgICAgMTc2LCAxNzEsIDEsIDIzNCwgMTM4LCAxNzEsIDEsIDI0MywgMTQyLCAxNzEsIDEsIDI0MywgMCwgMTcxLCAxLCAyMjksIDgyLCAKKyAgICAxNzEsIDEsIDI1MSwgNDEsIDE3MSwgMSwgMjUwLCAxNjUsIDE3MSwgMSwgMjM1LCAxNDcsIDE3MSwgMSwgMjM1LCAxMjAsIAorICAgIDE3MSwgMSwgMjI3LCAxNjksIDE3MSwgMSwgMjE1LCAxNTcsIDE3MSwgMSwgMjE1LCAxNDUsIDE3MSwgMSwgMjQ4LCAxNDMsIAorICAgIDE3MSwgMSwgMjQ4LCAxMjcsIDE3MSwgMSwgMjI4LCAxMTUsIDE3MSwgMSwgMjE3LCAxMDYsIDE3MSwgMSwgMjE2LCAyMDksIAorICAgIDE3MSwgMSwgMjQ4LCAyMjksIDE3MSwgMSwgMjQ4LCAzMywgMTcxLCAxLCAxOTgsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIyNSwgCisgICAgMTUwLCAxNzEsIDEsIDI1MiwgMTk5LCAxNzEsIDEsIDI1MiwgMjYsIDE3MSwgMSwgMTg2LCAxNzEsIDEsIDE5MiwgMTcxLCAxLCAKKyAgICAyMDUsIDE3MSwgMSwgMjMzLCAxNDEsIDE3MSwgMSwgMjMyLCAxOTAsIDE3MSwgMSwgMjE0LCAyNywgMTcxLCAxLCAyMjAsIAorICAgIDEwNCwgMTcxLCAxLCAyMTgsIDIyNSwgMTcxLCAxLCAyMDYsIDE3MSwgMSwgMTYyLCAxNzEsIDUsIDIyNywgMjA5LCAxNzEsIAorICAgIDUsIDI1MywgMTgzLCAxNzEsIDI1LCA1LCAyNTUsIDgyLCAxNzEsIDI1LCA1LCA3NCwgMTcxLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTcxLCAyNSwgNSwgNjksIDE3MSwgMjUsIDUsIDIxNCwgMTE4LCAxNzEsIDI1LCA1LCAxNDksIDE1MywgMTcxLCAyNSwgNSwgCisgICAgMTQ5LCAyMjIsIDE4MiwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzYsIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzgsIDE3MSwgMjUsIDUsIDc4LCAxNzEsIDI1LCA1LCAyNTMsIDIwMCwgMTcxLCAKKyAgICA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwOCwgMTcxLCAxLCAxNDksIDIyMiwgMTgyLCAxNzEsIDEsIDE0OSwgMjMyLCAxOTEsIAorICAgIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIAorICAgIDIxLCAxMTEsIDE3MSwgMjEsIDEwNSwgMTcxLCAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE5MCwgMTcxLCAyMSwgCisgICAgMTk1LCAxNzEsIDIxLCAxOTksIDE3MSwgMjEsIDE5NiwgMTcxLCAyMSwgMjAxLCAxNzEsIDI1NSwgMzAsIDUwLCAxNzEsIAorICAgIDIyMiwgMTIwLCA1MCwgMTU3LCA1LCAyNTEsIDcsIDE1NywgNSwgMjU0LCA4MywgMTU3LCA1LCAyMTMsIDE0NywgMTU3LCAxLCAKKyAgICA2MSwgMTU3LCAxLCAyNTUsIDgyLCAxNTcsIDEsIDc0LCAxNTcsIDEsIDIzNiwgNDAsIDE1NywgMSwgNjksIDE1NywgMSwgCisgICAgMjE0LCAxMTgsIDE1NywgMSwgMTQ5LCAxNTMsIDE1NywgMSwgMTQ5LCAxNTYsIDE1NywgMSwgNzYsIDE1NywgMSwgMjU0LCAKKyAgICAyMTAsIDE1NywgMSwgNzgsIDE1NywgMSwgMjUzLCAyMDAsIDE1NywgMSwgMTc2LCAxNTcsIDEsIDIzNCwgMTM4LCAxNTcsIDEsIAorICAgIDI0MywgMTQyLCAxNTcsIDEsIDI0MywgMCwgMTU3LCAxLCAyMjksIDgyLCAxNTcsIDEsIDI1MSwgNDEsIDE1NywgMSwgMjUwLCAKKyAgICAxNjUsIDE1NywgMSwgMjM1LCAxNDcsIDE1NywgMSwgMjM1LCAxMjAsIDE1NywgMSwgMjI3LCAxNjksIDE1NywgMSwgMjE1LCAKKyAgICAxNTcsIDE1NywgMSwgMjE1LCAxNDUsIDE1NywgMSwgMjQ4LCAxNDMsIDE1NywgMSwgMjQ4LCAxMjcsIDE1NywgMSwgMjI4LCAKKyAgICAxMTUsIDE1NywgMSwgMjE3LCAxMDYsIDE1NywgMSwgMjE2LCAyMDksIDE1NywgMSwgMjQ4LCAyMjksIDE1NywgMSwgMjQ4LCAKKyAgICAzMywgMTU3LCAxLCAxOTgsIDE1NywgMSwgMTkxLCAxNTcsIDEsIDIyNSwgMTUwLCAxNTcsIDEsIDI1MiwgMTk5LCAxNTcsIDEsIAorICAgIDI1MiwgMjYsIDE1NywgMSwgMTg2LCAxNTcsIDEsIDE5MiwgMTU3LCAxLCAyMDUsIDE1NywgMSwgMjMzLCAxNDEsIDE1NywgMSwgCisgICAgMjMyLCAxOTAsIDE1NywgMSwgMjE0LCAyNywgMTU3LCAxLCAyMjAsIDEwNCwgMTU3LCAxLCAyMTgsIDIyNSwgMTU3LCAxLCAKKyAgICAyMDYsIDE1NywgMSwgMTYyLCAxNTcsIDUsIDIyNywgMjA5LCAxNTcsIDUsIDI1MywgMTgzLCAxNTcsIDI1LCA1LCAyNTUsIAorICAgIDgyLCAxNTcsIDI1LCA1LCA3NCwgMTU3LCAyNSwgNSwgMjM2LCA0MCwgMTU3LCAyNSwgNSwgNjksIDE1NywgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxNTcsIDI1LCA1LCAxNDksIDE1MywgMTU3LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTU3LCAyNSwgNSwgNzYsIAorICAgIDE1NywgMjUsIDUsIDI1NCwgMjEwLCAxNTcsIDI1LCA1LCA3OCwgMTU3LCAyNSwgNSwgMjUzLCAyMDAsIDE1NywgNSwgMjEzLCAKKyAgICAxNTIsIDE1NywgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNTcsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTU3LCAxLCAyMjIsIAorICAgIDE4MSwgMTU3LCAxLCAyMjMsIDQyLCAxNTcsIDEsIDIxMCwgMTY4LCAxNTcsIDEsIDE0OSwgMjIyLCAxODIsIDE1NywgMSwgCisgICAgMTQ5LCAyMzIsIDE5MSwgMTU3LCAyNSwgNSwgMTQ5LCAxNTYsIDE1NywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE1NywgMjEsIAorICAgIDIxMCwgODYsIDE1NywgMjEsIDExMSwgMTU3LCAyMSwgMTA1LCAxNTcsIDIxLCAxNTgsIDE1NywgMjEsIDE2MSwgMTU3LCAyMSwgCisgICAgMTkwLCAxNTcsIDIxLCAxOTUsIDE1NywgMjEsIDE5OSwgMTU3LCAyMSwgMTk2LCAxNTcsIDIxLCAyMDEsIDE1NywgMjM1LCAKKyAgICAxNjcsIDE1NywgMSwgMjEyLCA2NSwgMTU3LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDE1NywgMjQ0LCAxMCwgMTIzLCAyNDIsIAorICAgIDM0LCAxNTcsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTU3LCAyNDQsIDEwLCAxMjMsIDIxOSwgMTE5LCAxNTcsIDI0NCwgCisgICAgMTAsIDEyMywgMjQ1LCAxOTYsIDE1NywgMjQ0LCAxMCwgMTM0LCAyMTksIDExOCwgMzYsIDUsIDI1NCwgODMsIDM2LCA1LCAKKyAgICAyMTMsIDE0NywgMzYsIDEsIDYxLCAzNiwgMSwgMjU1LCA4MiwgMzYsIDEsIDc0LCAzNiwgMSwgMjM2LCA0MCwgMzYsIDEsIAorICAgIDY5LCAzNiwgMSwgMjE0LCAxMTgsIDM2LCAxLCA3NiwgMzYsIDEsIDI0NSwgMjE3LCAzNiwgMSwgMjU0LCAyMTAsIDM2LCAxLCAKKyAgICA3OCwgMzYsIDEsIDIyNiwgMTg3LCAzNiwgMSwgMjUzLCAyMDAsIDM2LCAxLCAxNzYsIDM2LCAxLCAyMjksIDgyLCAzNiwgMSwgCisgICAgMjUxLCA0MSwgMzYsIDEsIDIzNSwgMTQ3LCAzNiwgMSwgMjI3LCAxNjksIDM2LCAxLCAyMTUsIDE1NywgMzYsIDEsIDIyOCwgCisgICAgMTE1LCAzNiwgMSwgMjE3LCAxMDYsIDM2LCAxLCAxOTgsIDM2LCAxLCAyMjgsIDk3LCAzNiwgMSwgMTkxLCAzNiwgMSwgMTg2LCAKKyAgICAzNiwgMSwgMTkyLCAzNiwgMSwgMjA1LCAzNiwgMSwgMjIyLCAxODEsIDM2LCAxLCAyMzMsIDE0MSwgMzYsIDEsIDIzMiwgCisgICAgMTkwLCAzNiwgMSwgMjMyLCAxODEsIDM2LCAxLCAyMTQsIDI3LCAzNiwgMSwgMjIwLCAxMDQsIDM2LCAxLCAyMTgsIDIyNSwgCisgICAgMzYsIDEsIDIwNiwgMzYsIDEsIDE2MiwgMzYsIDI1LCA1LCAyNTUsIDgyLCAzNiwgMjUsIDUsIDc0LCAzNiwgMjUsIDUsIAorICAgIDIzNiwgNDAsIDM2LCAyNSwgNSwgNjksIDM2LCAyNSwgNSwgMjE0LCAxMTgsIDM2LCAyNSwgNSwgNzYsIDM2LCAyNSwgNSwgCisgICAgMjQ1LCAyMTcsIDM2LCAyNSwgNSwgMjU0LCAyMTAsIDM2LCAyNSwgNSwgNzgsIDM2LCAyNSwgNSwgMjI2LCAxODcsIDM2LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDM2LCA1LCAyMTMsIDE1MiwgMzYsIDIyNiwgMjA4LCAzNiwgMjUzLCAyMDEsIDIzMywgMjksIAorICAgIDc5LCAzNiwgMjEsIDIxMCwgODYsIDM2LCAyMSwgMTExLCAzNiwgMjEsIDEwNSwgMzYsIDIxLCAxNTgsIDM2LCAyMSwgMTYxLCAKKyAgICAzNiwgMjEsIDE5MCwgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMTk5LCAzNiwgMjEsIDE5NiwgMzYsIDIxLCAyMDEsIDM2LCA1NCwgCisgICAgMjE2LCAyNDgsIDM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMzYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAzNiwgMjQ4LCAxNTQsIDUwLCAKKyAgICAzNiwgMjMwLCAxNDAsIDUwLCAzNiwgMjExLCA0NSwgNTAsIDM2LCAyNDgsIDk1LCA1MCwgMzYsIDI0OSwgMTQ3LCA1MCwgMzYsIAorICAgIDI1MywgMjQ2LCA3MiwgNTAsIDM2LCAyMjIsIDEyMCwgNTAsIDM2LCA1NCwgNTAsIDE0OCwgNSwgMjUxLCA3LCAxNDgsIDUsIAorICAgIDI1NCwgODMsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgMSwgNjEsIDE0OCwgMSwgMjU1LCA4MiwgMTQ4LCAxLCA3NCwgMTQ4LCAKKyAgICAxLCAyMzYsIDQwLCAxNDgsIDEsIDY5LCAxNDgsIDEsIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgCisgICAgMTU2LCAxNDgsIDEsIDc2LCAxNDgsIDEsIDI0NSwgMjE3LCAxNDgsIDEsIDI1NCwgMjEwLCAxNDgsIDEsIDc4LCAxNDgsIDEsIAorICAgIDIyNiwgMTg3LCAxNDgsIDEsIDI1MywgMjAwLCAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzOCwgMTQ4LCAxLCAyNDMsIAorICAgIDE0MiwgMTQ4LCAxLCAyNDMsIDAsIDE0OCwgMSwgMjI5LCA4MiwgMTQ4LCAxLCAyNTEsIDQxLCAxNDgsIDEsIDI1MCwgMTY1LCAKKyAgICAxNDgsIDEsIDIzNSwgMTQ3LCAxNDgsIDEsIDIzNSwgMTIwLCAxNDgsIDEsIDIyNywgMTY5LCAxNDgsIDEsIDIxNSwgMTU3LCAKKyAgICAxNDgsIDEsIDIxNSwgMTQ1LCAxNDgsIDEsIDI0OCwgMTQzLCAxNDgsIDEsIDI0OCwgMTI3LCAxNDgsIDEsIDIyOCwgMTE1LCAKKyAgICAxNDgsIDEsIDIxNywgMTA2LCAxNDgsIDEsIDIxNiwgMjA5LCAxNDgsIDEsIDI0OCwgMjI5LCAxNDgsIDEsIDI0OCwgMzMsIAorICAgIDE0OCwgMSwgMTk4LCAxNDgsIDEsIDE5MSwgMTQ4LCAxLCAyMjUsIDE1MCwgMTQ4LCAxLCAyNTIsIDE5OSwgMTQ4LCAxLCAKKyAgICAyNTIsIDI2LCAxNDgsIDEsIDE4NiwgMTQ4LCAxLCAxOTIsIDE0OCwgMSwgMjA1LCAxNDgsIDEsIDIyMiwgMTgxLCAxNDgsIDEsIAorICAgIDIzMywgMTQxLCAxNDgsIDEsIDIzMiwgMTkwLCAxNDgsIDEsIDIxNCwgMjcsIDE0OCwgMSwgMjIwLCAxMDQsIDE0OCwgMSwgCisgICAgMjE4LCAyMjUsIDE0OCwgMSwgMjA2LCAxNDgsIDEsIDE2MiwgMTQ4LCA1LCAyNTMsIDE4MywgMTQ4LCAyNSwgNSwgMjU1LCAKKyAgICA4MiwgMTQ4LCAyNSwgNSwgNzQsIDE0OCwgMjUsIDUsIDIzNiwgNDAsIDE0OCwgMjUsIDUsIDY5LCAxNDgsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTMsIDE0OCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDE0OCwgMjUsIDUsIDc2LCAKKyAgICAxNDgsIDI1LCA1LCAyNDUsIDIxNywgMTQ4LCAyNSwgNSwgMjU0LCAyMTAsIDE0OCwgMjUsIDUsIDc4LCAxNDgsIDI1LCA1LCAKKyAgICAyMjYsIDE4NywgMTQ4LCAyNSwgNSwgMjUzLCAyMDAsIDE0OCwgNSwgMjEzLCAxNTIsIDE0OCwgMjMzLCAyOSwgNzksIDE0OCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNDgsIDEsIDIxNSwgMTg0LCAxNDgsIDEsIDI0NiwgNDYsIDE0OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTQ4LCAxLCAxNDksIDIzMiwgMTkxLCAxNDgsIDI1LCA1LCAxNDksIDE1NiwgMTQ4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTQ4LCAyMSwgMjEwLCA4NiwgMTQ4LCAyMSwgMTExLCAxNDgsIDIxLCAxMDUsIDE0OCwgMjEsIDE1OCwgCisgICAgMTQ4LCAyMSwgMTYxLCAxNDgsIDIxLCAxOTAsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMTk5LCAxNDgsIDIxLCAxOTYsIAorICAgIDE0OCwgMjEsIDIwMSwgMTQ4LCAyNDQsIDEwLCAyMSwgMjEwLCA4NywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgCisgICAgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAKKyAgICAxMTMsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDEzNCwgMzEsIDIyNiwgCisgICAgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAKKyAgICAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDExMywgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIAorICAgIDIxLCAxMzQsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCA1LCAyMTUsIDg0LCAxNjUsIDUsIDI1NCwgCisgICAgODMsIDE2NSwgNSwgMjEzLCAxNDcsIDE2NSwgMSwgNjEsIDE2NSwgMSwgMjU1LCA4MiwgMTY1LCAxLCA3NCwgMTY1LCAxLCAKKyAgICAyMzYsIDQwLCAxNjUsIDEsIDY5LCAxNjUsIDEsIDIxNCwgMTE4LCAxNjUsIDEsIDE0OSwgMTUzLCAxNjUsIDEsIDE0OSwgCisgICAgMTU2LCAxNjUsIDEsIDc2LCAxNjUsIDEsIDI0NSwgMjE3LCAxNjUsIDEsIDI1NCwgMjEwLCAxNjUsIDEsIDc4LCAxNjUsIDEsIAorICAgIDIyNiwgMTg3LCAxNjUsIDEsIDI1MywgMjAwLCAxNjUsIDEsIDE3NiwgMTY1LCAxLCAyMzQsIDEzOCwgMTY1LCAxLCAyNDMsIAorICAgIDE0MiwgMTY1LCAxLCAyNDMsIDAsIDE2NSwgMSwgMjI5LCA4MiwgMTY1LCAxLCAyNTEsIDQxLCAxNjUsIDEsIDI1MCwgMTY1LCAKKyAgICAxNjUsIDEsIDIzNSwgMTQ3LCAxNjUsIDEsIDIzNSwgMTIwLCAxNjUsIDEsIDIyNywgMTY5LCAxNjUsIDEsIDIxNSwgMTU3LCAKKyAgICAxNjUsIDEsIDIxNSwgMTQ1LCAxNjUsIDEsIDI0OCwgMTQzLCAxNjUsIDEsIDI0OCwgMTI3LCAxNjUsIDEsIDIyOCwgMTE1LCAKKyAgICAxNjUsIDEsIDIxNywgMTA2LCAxNjUsIDEsIDIxNiwgMjA5LCAxNjUsIDEsIDI0OCwgMjI5LCAxNjUsIDEsIDI0OCwgMzMsIAorICAgIDE2NSwgMSwgMTk4LCAxNjUsIDEsIDE5MSwgMTY1LCAxLCAyMjUsIDE1MCwgMTY1LCAxLCAyNTIsIDE5OSwgMTY1LCAxLCAKKyAgICAyNTIsIDI2LCAxNjUsIDEsIDE4NiwgMTY1LCAxLCAxOTIsIDE2NSwgMSwgMjA1LCAxNjUsIDEsIDIyMiwgMTgxLCAxNjUsIDEsIAorICAgIDIzMywgMTQxLCAxNjUsIDEsIDIzMiwgMTkwLCAxNjUsIDEsIDIxNCwgMjcsIDE2NSwgMSwgMjIwLCAxMDQsIDE2NSwgMSwgCisgICAgMjE4LCAyMjUsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAyMjcsIDIwOSwgMTY1LCA1LCAyNTMsIDE4MywgCisgICAgMTY1LCAyNSwgNSwgMjU1LCA4MiwgMTY1LCAyNSwgNSwgNzQsIDE2NSwgMjUsIDUsIDIzNiwgNDAsIDE2NSwgMjUsIDUsIDY5LCAKKyAgICAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyNDUsIDIxNywgMTY1LCAyNSwgNSwgMjU0LCAyMTAsIDE2NSwgMjUsIDUsIAorICAgIDc4LCAxNjUsIDI1LCA1LCAyMjYsIDE4NywgMTY1LCAyNSwgNSwgMjUzLCAyMDAsIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgCisgICAgMjMzLCAyOSwgNzksIDE2NSwgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNjUsIDEsIDI0NCwgMjA0LCAxNjUsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE2NSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTY1LCAyNSwgNSwgMTQ5LCAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMSwgMTY1LCAyMSwgMTA1LCAxNjUsIDIxLCAxNTgsIAorICAgIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTkwLCAxNjUsIDIxLCAxOTUsIDE2NSwgMjEsIDE5OSwgMTY1LCAyMSwgMTk2LCAKKyAgICAxNjUsIDIxLCAyMDEsIDE2NSwgNSwgMjM1LCAxMDgsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgNSwgMjU0LCA4MywgMTM2LCAKKyAgICA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDgyLCAxMzYsIDEsIDc0LCAxMzYsIDEsIDIzNiwgNDAsIAorICAgIDEzNiwgMSwgNjksIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgMTQ5LCAxNTYsIDEzNiwgMSwgCisgICAgNzYsIDEzNiwgMSwgMjQ1LCAyMTcsIDEzNiwgMSwgMjU0LCAyMTAsIDEzNiwgMSwgNzgsIDEzNiwgMSwgMjI2LCAxODcsIAorICAgIDEzNiwgMSwgMjUzLCAyMDAsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTM4LCAxMzYsIDEsIDI0MywgMTQyLCAxMzYsIAorICAgIDEsIDI0MywgMCwgMTM2LCAxLCAyMjksIDgyLCAxMzYsIDEsIDI1MSwgNDEsIDEzNiwgMSwgMjUwLCAxNjUsIDEzNiwgMSwgCisgICAgMjM1LCAxNDcsIDEzNiwgMSwgMjM1LCAxMjAsIDEzNiwgMSwgMjI3LCAxNjksIDEzNiwgMSwgMjE1LCAxNTcsIDEzNiwgMSwgCisgICAgMjE1LCAxNDUsIDEzNiwgMSwgMjQ4LCAxNDMsIDEzNiwgMSwgMjQ4LCAxMjcsIDEzNiwgMSwgMjI4LCAxMTUsIDEzNiwgMSwgCisgICAgMjE3LCAxMDYsIDEzNiwgMSwgMjE2LCAyMDksIDEzNiwgMSwgMjQ4LCAyMjksIDEzNiwgMSwgMjQ4LCAzMywgMTM2LCAxLCAKKyAgICAxOTgsIDEzNiwgMSwgMjI4LCA5NywgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjI1LCAxNTAsIDEzNiwgMSwgMjUyLCAxOTksIAorICAgIDEzNiwgMSwgMjUyLCAyNiwgMTM2LCAxLCAxODYsIDEzNiwgMSwgMTkyLCAxMzYsIDEsIDIwNSwgMTM2LCAxLCAyMjIsIDE4MSwgCisgICAgMTM2LCAxLCAyMzMsIDE0MSwgMTM2LCAxLCAyMzIsIDE5MCwgMTM2LCAxLCAyMzIsIDE4MSwgMTM2LCAxLCAyMTQsIDI3LCAKKyAgICAxMzYsIDEsIDIyMCwgMTA0LCAxMzYsIDEsIDIxOCwgMjI1LCAxMzYsIDEsIDIwNiwgMTM2LCAxLCAxNjIsIDEzNiwgMSwgCisgICAgMjE1LCAxMjYsIDEzNiwgNSwgMjUzLCAxODMsIDEzNiwgMjUsIDUsIDI1NSwgODIsIDEzNiwgMjUsIDUsIDc0LCAxMzYsIDI1LCAKKyAgICA1LCAyMzYsIDQwLCAxMzYsIDI1LCA1LCA2OSwgMTM2LCAyNSwgNSwgMjE0LCAxMTgsIDEzNiwgMjUsIDUsIDE0OSwgMTUzLCAKKyAgICAxMzYsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMzYsIDI1LCA1LCA3NiwgMTM2LCAyNSwgNSwgMjQ1LCAyMTcsIDEzNiwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxMzYsIDI1LCA1LCA3OCwgMTM2LCAyNSwgNSwgMjI2LCAxODcsIDEzNiwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAxMzYsIDUsIDIxMywgMTUyLCAxMzYsIDEsIDU5LCAyMjMsIDc2LCAxMzYsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTM2LCAKKyAgICAxLCAxNDksIDIyMiwgMTgyLCAxMzYsIDEsIDE0OSwgMjMyLCAxOTEsIDEzNiwgMjUsIDUsIDE0OSwgMTU2LCAxMzYsIDI1LCAKKyAgICA1LCAxNDksIDIzMiwgMTkxLCAxMzYsIDIxLCAyMTAsIDg2LCAxMzYsIDIxLCAxMTEsIDEzNiwgMjEsIDEwNSwgMTM2LCAyMSwgCisgICAgMTU4LCAxMzYsIDIxLCAxNjEsIDEzNiwgMjEsIDE5MCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAxOTksIDEzNiwgMjEsIAorICAgIDE5NiwgMTM2LCAyMSwgMjAxLCAxMzYsIDU0LCAyMTYsIDI0OCwgMTM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMTM2LCA1NCwgCisgICAgMTIzLCAyMTYsIDE0OCwgMTM2LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDEzNiwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAKKyAgICAxMzYsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTM2LCAyNDgsIDE1OCwgNzksIDEzNiwgMSwgMjUwLCAxMDcsIDIyOCwgCisgICAgMTE2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzAsIDMwLCAxMzYsIDEsIDI1MCwgMTA3LCAyMjIsIDE4MiwgMTM2LCAxLCAyNTAsIAorICAgIDEwNywgMTU2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzIsIDE5MSwgMTM2LCAxLCAyNTAsIDEwNywgMjM1LCAyOSwgMTc1LCA1LCAKKyAgICAyNTQsIDgyLCAxNzUsIDUsIDIxMywgMTQ2LCAxNzUsIDEsIDI1MywgMTczLCAxNzUsIDEsIDI1NSwgMzYsIDE3NSwgMSwgCisgICAgMjU0LCAyMzIsIDE3NSwgMSwgMjU0LCAyNDcsIDE3NSwgMSwgMjM1LCAxNTcsIDE3NSwgMSwgMjM2LCAzOSwgMTc1LCAxLCAKKyAgICAyMTQsIDExMCwgMTc1LCAxLCAyMTQsIDExMiwgMTc1LCAxLCAyMzUsIDE4MCwgMTc1LCAxLCAyMzUsIDE4MSwgMTc1LCAxLCAKKyAgICAyMzYsIDI1LCAxNzUsIDEsIDIzNiwgMjcsIDE3NSwgMSwgMjQ1LCAyNSwgMTc1LCAxLCAyNDUsIDIxMiwgMTc1LCAxLCAyNTQsIAorICAgIDE5NywgMTc1LCAxLCAyMjYsIDExMiwgMTc1LCAxLCAyMjYsIDE4MSwgMTc1LCAxLCAyNTMsIDE4NiwgMTc1LCAxLCAyNTQsIAorICAgIDE1NCwgMjM0LCAxOTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIzNCwgMTkzLCAxNzUsIDEsIDI1NCwgMTU0LCAyNDMsIDg5LCAKKyAgICAxNzUsIDEsIDIzMSwgMjE0LCAyNDMsIDg5LCAxNzUsIDEsIDIzNCwgMjM1LCAyMjksIDIyNywgMTc1LCAxLCAyMjEsIDIzOCwgCisgICAgMjQzLCA4OSwgMTc1LCAxLCAyNTQsIDE1NCwgMjUwLCAyMjQsIDE3NSwgMSwgMjMxLCAyMTQsIDI1MCwgMjI0LCAxNzUsIDEsIAorICAgIDI1NCwgMTU0LCAyMzUsIDEzMywgMTc1LCAxLCAyMzEsIDIxNCwgMjM1LCAxMzMsIDE3NSwgMSwgMjE3LCA5OSwgMjI5LCAKKyAgICAyMjcsIDE3NSwgMSwgMjE3LCA5OSwgMjIxLCAyMzcsIDIyOSwgMjI4LCAxNzUsIDEsIDIyMSwgMjM4LCAyMzUsIDEzMywgCisgICAgMTc1LCAxLCAyNTQsIDE1NCwgMjE1LCAxNTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIxNSwgMTUzLCAxNzUsIDEsIDI1NCwgMTU0LCAKKyAgICAyNDgsIDEzNCwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxMzQsIDE3NSwgMSwgMjMwLCA1OCwgMjI5LCAxODUsIDE3NSwgMSwgCisgICAgMjIxLCAyMzgsIDI0OCwgMTM0LCAxNzUsIDEsIDI1NCwgMTU0LCAyMTcsIDMxLCAxNzUsIDEsIDIzMSwgMjE0LCAyMTcsIDMxLCAKKyAgICAxNzUsIDEsIDI1NCwgMTU0LCAyNDgsIDE1MiwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjQ4LCAxODIsIAorICAgIDIyOSwgMTg1LCAxNzUsIDEsIDIyMSwgMjM4LCAyNDgsIDE1MiwgMTc1LCAxLCAyNTQsIDE1NCwgMjI1LCAyMzIsIDE3NSwgMSwgCisgICAgMjMxLCAyMTQsIDIyNSwgMjMyLCAxNzUsIDEsIDI1NCwgMTU0LCAyNTIsIDEyMCwgMTc1LCAxLCAyMzEsIDIxNCwgMjUyLCAKKyAgICAxMjAsIDE3NSwgMSwgMjMxLCAxMzYsIDE3NSwgMSwgMjU0LCAxMzksIDI1MiwgMTIwLCAxNzUsIDEsIDIxMSwgNTEsIDE3NSwgCisgICAgMSwgMjIzLCAxMzYsIDE3NSwgMSwgMjQ4LCAxODIsIDIzMywgNzMsIDE3NSwgMSwgMjE0LCAxLCAxNzUsIDEsIDIxNywgOTksIAorICAgIDIyMSwgMjEyLCAxNzUsIDEsIDIzMCwgNTgsIDIyMSwgMjEyLCAxNzUsIDEsIDI0OCwgMTgyLCAyMjEsIDIxMiwgMTc1LCAxLCAKKyAgICAyNDEsIDI0OSwgMTc1LCAxLCAyMzAsIDU4LCAyMzMsIDczLCAxNzUsIDEsIDI0NCwgMTY0LCAxNzUsIDUsIDI1NCwgMTg2LCAKKyAgICAxNzUsIDI1LCA1LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDI1NCwgMjQ5LCAxNzUsIDI1LCA1LCAyNDcsIAorICAgIDIzNiwgMjU0LCAyNDksIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyMzUsIDE3NywgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIzNSwgCisgICAgMTc3LCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjI2LCA5MiwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIyNiwgOTIsIDE3NSwgCisgICAgMjUsIDUsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAyMzQsIDIxLCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjM0LCAyMSwgMTc1LCAKKyAgICAyNSwgNSwgMjM0LCAyMywgMjQ4LCA3NSwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgMjU0LCAyNDIsIDE3NSwgMjUsIAorICAgIDUsIDIzNCwgMjIsIDI0MiwgNTQsIDI0NywgMjM2LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgCisgICAgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAKKyAgICAyNDcsIDIzNiwgMjQzLCA4OCwgMTc1LCAyMjQsIDE0NCwgMjMzLCAyMTMsIDE2OCwgMTM1LCAyMzQsIDM1LCAyMzQsIDI1MiwgCisgICAgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEzNCwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwNSwgMTY4LCAxMzUsIAorICAgIDIzNCwgMTEyLCAyMzQsIDEwMSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwOSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAKKyAgICAyMjMsIDE1NywgMTY4LCAxMzUsIDIyOSwgMTAsIDIyOCwgMjUzLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCAxNTUsIDE2OCwgCisgICAgMTM1LCAyNTAsIDk1LCAyNTAsIDEwMywgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE5LCA2MSwgCisgICAgMjE5LCA2MCwgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgOTEsIDE2OCwgMTM1LCAyMTAsIDI0NSwgMjEwLCAyNTIsIDE2OCwgCisgICAgMTM1LCAyNDcsIDE1NCwgMjUwLCAxNjIsIDE2OCwgMTM1LCAyMTYsIDQzLCAyMjUsIDI0MiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAKKyAgICAyMTYsIDIwMSwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjksIDIwNiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjUsIDExNCwgCisgICAgMTY4LCAxMzUsIDIyOCwgODAsIDIyOSwgMTAzLCAxNjgsIDEzNSwgMjQ3LCAxNTQsIDI0OCwgNzYsIDE2OCwgMTM1LCAyMTYsIAorICAgIDQzLCAyMTcsIDU2LCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTMyLCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMjA1LCAKKyAgICAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTU1LCAxNjgsIDEzNSwgMjI4LCA4MCwgMjI3LCAyNDIsIDE2OCwgMTM1LCAyNTEsIAorICAgIDIxNCwgMjUyLCAxNzIsIDE2OCwgMTM1LCAyMjUsIDIwLCAyMjUsIDQ1LCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyNSwgMTE2LCAKKyAgICAxNjgsIDEzNSwgMjQ0LCA1MiwgMjQ0LCAyMDQsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjI1LCAxNDQsIDE2OCwgMTM1LCAyNDQsIAorICAgIDUyLCAyNDQsIDE4MSwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjEsIDI0OSwgMTY4LCAxMzUsIDIzMCwgMTY3LCAxODYsIDE2OCwgCisgICAgMTM1LCAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjE0LCAyMjIsIDE0MSwgMTY4LCAxMzUsIDIyMiwgMTQyLCAKKyAgICAxNjgsIDEzNSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAxNjgsIDEzNSwgMjMyLCAxMDMsIDE2OCwgMTM1LCAyMTEsIDIyOCwgCisgICAgMjEyLCA2MSwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgOCwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgMTE2LCAxNjgsIAorICAgIDEzNSwgMjE5LCA2MSwgMjE4LCA4MywgMTY4LCAxMzUsIDI0MSwgNzYsIDI0MSwgMTY2LCAxNjgsIDEzNSwgMjMyLCAxNjMsIAorICAgIDI1MCwgNzYsIDE2OCwgMTM1LCAxNDQsIDI1NCwgMTIzLCAxNjgsIDEzNSwgMjQxLCA3NiwgMjI4LCA3NSwgMTY4LCAxMzUsIAorICAgIDIyNiwgNzIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQyLCAyNCwgMTY4LCAxMzUsIAorICAgIDIyMSwgMjMyLCAyNTUsIDgyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgMTQ0LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc0LCAKKyAgICAxNjgsIDEzNSwgMjIxLCAyMzIsIDIzNiwgNDAsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAyMTQsIDE2OCwgMTM1LCAyMjEsIAorICAgIDIzMiwgMjE0LCAyMTIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjksIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAxMTgsIDE2OCwgCisgICAgMTM1LCAyMjUsIDEyNywgMTY4LCAyNDksIDEwNiwgMTYsIDI1MiwgMTczLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc2LCAxNjgsIAorICAgIDEzNSwgMjIxLCAyMzIsIDI1NCwgMjUyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc4LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgCisgICAgMjExLCAyMzEsIDIwMywgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIDIxMSwgMjMxLCAyMDQsIDE2OCwgMTM1LCAyMzMsIAorICAgIDExMiwgMTY4LCAxMzUsIDIzMSwgMjAwLCAxNjgsIDEzNSwgMjMxLCAyMDEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQ1LCAKKyAgICAxODgsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE1LCAyMjksIDE2OCwgCisgICAgMTM1LCAyMzEsIDIwOSwgMjUwLCAxNDMsIDE2OCwgMTM1LCAyMTYsIDE5OSwgMTY4LCAxMzUsIDIyOCwgMjEwLCAxNjgsIAorICAgIDEzNSwgMjExLCA3MywgMTY4LCAxMzUsIDI0NCwgNDMsIDE2OCwgMjEsIDIxMCwgODYsIDE2OCwgMjEsIDExMSwgMTY4LCAyMSwgCisgICAgMTA1LCAxNjgsIDIxLCAxNTgsIDE2OCwgMjEsIDE2MSwgMTY4LCAyMSwgMTkwLCAxNjgsIDIxLCAxOTUsIDE2OCwgMjEsIAorICAgIDE5OSwgMTY4LCAyMSwgMTk2LCAxNjgsIDIxLCAyMDEsIDE2OCwgMTM1LCAyNTQsIDExOSwgMTY4LCAxMzUsIDIzNCwgMTEwLCAKKyAgICAyMDksIDIwOSwgMSwgMjM0LCAzNCwgMjA5LCAyMDksIDEsIDIzNCwgMTEyLCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjM0LCAKKyAgICAxMTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjksIDksIDIwOSwgMjA5LCAxLCAyNDksIDI0NiwgMjA5LCAyMDksIDEsIAorICAgIDIxOSwgNjEsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjcsIDEzOCwgMjA5LCAyMDksIDEsIDI0NywgMTUzLCAyMDksIDIwOSwgCisgICAgMSwgMTEyLCAyMDksIDIwOSwgMSwgMjE2LCAxNTgsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMTYsIDE1OCwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDEsIDIyOCwgNzksIDIwOSwgMjA5LCAxLCAyNTEsIDIxMywgMjA5LCAyMDksIDEsIDIyNSwgMTksIDIwOSwgCisgICAgMjA5LCAxLCAyMjUsIDEyNSwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAKKyAgICAyMjUsIDEyNSwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMzAsIDE2NiwgCisgICAgMjA5LCAyMDksIDEsIDIxMCwgMjQ0LCAyMDksIDIwOSwgMSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAyMDksIDIwOSwgMSwgMjMyLCAKKyAgICAxNjMsIDIzMiwgMTI3LCAyMDksIDIwOSwgMSwgMjExLCAyMjcsIDIwOSwgMjA5LCAxLCAyMTksIDYxLCAyMTgsIDM2LCAyMDksIAorICAgIDIwOSwgMSwgMjQxLCA3NiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDc4LCAyMDksIDIwOSwgMSwgMjQxLCA3NiwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDI0NSwgMTcxLCAyMDksIDIwOSwgMjUsIDUsIDYxLCAyMDksIDIwOSwgMjUsIDUsIDIzMSwgMjA5LCAyMzQsIAorICAgIDI0MCwgMjA5LCAyMDksIDI1LCA1LCAyNTUsIDgyLCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMTQ0LCAyMDksIDIwOSwgMjUsIAorICAgIDUsIDc0LCAyMDksIDIwOSwgMjUsIDUsIDIzNiwgNDAsIDIwOSwgMjA5LCAyNSwgNSwgMjExLCAxMTcsIDIwOSwgMjA5LCAyNSwgCisgICAgNSwgMjEwLCAxNjksIDIwOSwgMjA5LCAyNSwgNSwgNjksIDIwOSwgMjA5LCAyNSwgNSwgMjE0LCAxMTgsIDIwOSwgMjA5LCAKKyAgICAyNSwgNSwgMjMxLCAyMDksIDIzNCwgMTksIDIwOSwgMjA5LCAyMjAsIDE0NywgNSwgMjMyLCAxNjIsIDIwOSwgMjA5LCAyMjAsIAorICAgIDE0NywgNSwgMjI3LCAxMzgsIDIwOSwgMjA5LCAyNSwgNSwgNzYsIDIwOSwgMjA5LCAyNSwgNSwgMjQ1LCAyMDMsIDIwOSwgCisgICAgMjA5LCAyNSwgNSwgNzgsIDIwOSwgMjA5LCAyNSwgNSwgMjUzLCAxNzUsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIwOSwgMjA5LCAyMzQsIDM1LCAyMzMsIDE0MSwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDksIDI0NSwgMTg4LCAyMDksIDIwOSwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA5LCAyMTYsIDExOCwgMjA5LCAyMDksIAorICAgIDEzOCwgMjMxLCAyMDksIDI1MCwgMjMxLCAyMDksIDIwOSwgMjUxLCAxMiwgNzksIDIwOSwgMjA5LCAyMjgsIDIxOSwgMjA5LCAKKyAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMSwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCisgICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxOTAsIDIwOSwgMjA5LCAyMSwgMTk1LCAyMDksIDIwOSwgCisgICAgMjEsIDE5OSwgMjA5LCAyMDksIDIxLCAxOTYsIDIwOSwgMjA5LCAyMSwgMjAxLCAyMDksIDIwOSwgMjQxLCA3NiwgMjI4LCAKKyAgICA3OSwgMjA5LCAyMDksIDI0MSwgNzYsIDIzMCwgMTY2LCAyMDksIDIwOSwgMSwgMjM0LCAxMTMsIDI0MiwgMTgxLCAyMDksIAorICAgIDIwOSwgMSwgMjM0LCAxMTMsIDIyNywgMTM4LCA2MywgMywgMjI2LCAyMDgsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIAorICAgIDIzMCwgMjUzLCAyMTUsIDE5MCwgNjEsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIDIzMCwgMjUzLCAyNTUsIDE2OCwgCisgICAgMjIyLCAyMTgsIDI1MiwgODUsIDE4NiwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgMjMwLCAyNTMsIDI1NSwgMTY4LCAKKyAgICAyNDIsIDEyMiwgMjE1LCAxNzQsIDE4NiwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNTMsIDIzMSwgOTgsIDE4NiwgNjMsIAorICAgIDE2NCwgMjUwLCA0LCAyMTEsIDAsIDIzMCwgMjUzLCAyMjAsIDExMSwgMTg2LCA2MywgMTY0LCAyNTAsIDI0NywgMjExLCAwLCAKKyAgICAyMzAsIDI1MywgMjI1LCAxMTUsIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjExLCAwLCAyMzAsIDI1MywgMjE1LCAxNzQsIAorICAgIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjIxLCAyMTAsIDIyMCwgOTcsIDYzLCAxNjQsIDI1MSwgMTM2LCAyMTEsIDAsIDIzMCwgCisgICAgMjUyLCA2MywgMTY0LCAyNTEsIDIzMSwgMjIwLCA1LCAyMTEsIDAsIDIzMCwgMjUyLCA2MywgMTY0LCAyMzUsIDIwNCwgMjE1LCAKKyAgICAxNzMsIDYzLCAxNjQsIDI0OCwgNjksIDIxNSwgMTc0LCAyNTEsIDEzNSwgNjMsIDE2NCwgMjIwLCA5NywgNjMsIDE2NCwgCisgICAgMjI3LCAxNDMsIDIyMCwgOTcsIDYzLCAxNjQsIDIxNSwgMTc0LCAyMjAsIDk3LCA2MywgMTY0LCAyMjcsIDE0MywgMjE1LCAKKyAgICAxNzQsIDIyMCwgOTcsIDYzLCAxNjQsIDIyMiwgMjM5LCAyNTAsIDEzMCwgMjE4LCAyMzgsIDIyMCwgOTcsIDYzLCAxNjQsIAorICAgIDIyMywgNDUsIDI0MiwgMTUzLCAyMjAsIDk3LCA2MywgMTY0LCAyNTAsIDI0NywgMjU1LCAxNzIsIDIyMiwgMTQ2LCAyMzEsIAorICAgIDk3LCAyMDAsIDI1MSwgMTUsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTUsIDE3MywgNjMsIDIzMiwgMTUwLCA1LCAyNTAsIDE2MywgCisgICAgMjIyLCAxNDUsIDYzLCAyMzIsIDE1MCwgNSwgMjMzLCAyLCAyMjIsIDE0NSwgNjMsIDI1MywgMjIwLCA1LCAyMjAsIDEwNywgCisgICAgMjQzLCA3MiwgMjU1LCAxNzMsIDIyMiwgMTQ1LCA2MywgMjUzLCAyMjAsIDUsIDI1NSwgMTcwLCAxOTEsIDYzLCAyNTMsIAorICAgIDIyMCwgNSwgMjIxLCAxODQsIDIxNSwgMTY5LCA2MywgNSwgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDMsIDcxLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDIsIDE4MywgNjMsIDUsIDIyMywgMTMzLCAyNDcsIDE2NywgMjQyLCAxMjMsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MywgNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MiwgMTgzLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyMjMsIDEzMywgMjI5LCAyMjMsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTEsIDYzLCAKKyAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTkwLCA2MywgMjEsIDE5NSwgNjMsIDIxLCAxOTksIAorICAgIDYzLCAyMSwgMTk2LCA2MywgMjEsIDIwMSwgNjMsIDIxLCAxNjMsIDExMSwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKKyAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE5MCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAKKyAgICAxNjMsIDE5OSwgNjMsIDIxLCAxNjMsIDE5NiwgNjMsIDIxLCAxNjMsIDIwMSwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKKyAgICAxNjQsIDI1MSwgMTM4LCAyMjIsIDE0NSwgNjMsIDE2NCwgMjI5LCA3MywgMjUxLCA3NiwgMjI3LCAxNTMsIDIxMCwgMjUsIAorICAgIDYzLCAxNjQsIDI1MCwgMjQ3LCAyNTUsIDE3MiwgMjIyLCAxNDYsIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIDE1LCA2MywgCisgICAgMTY0LCAyMjksIDczLCAyNTEsIDc2LCAyMjAsIDEwOCwgMjIyLCAxNDUsIDYzLCAxNjQsIDI1MCwgMTQwLCAyMzAsIDI1MiwgCisgICAgNjMsIDE2NCwgMjE1LCAxODUsIDI1NSwgMTY5LCA2MywgMTY0LCAyNDIsIDEwNywgMjIyLCAxNDYsIDI0MiwgNzAsIDYzLCAKKyAgICAxNjQsIDI0MiwgMTA3LCAyMjIsIDE0NiwgMjQyLCA3NiwgNjMsIDE2NCwgMjU0LCAxMjQsIDIzNCwgMTI5LCAyNDIsIDcwLCAKKyAgICA2MywgMTY0LCAyNTQsIDEyNCwgMjM0LCAxMjksIDI0MiwgNzYsIDYzLCA1LCAyMTEsIDY1LCAyMTUsIDE3MiwgNjMsIDUsIAorICAgIDIzMSwgMTcyLCAyMTUsIDE3MiwgNjMsIDEsIDE3NiwgNjMsIDEsIDIzNCwgMTM4LCA2MywgMSwgMjQzLCAxNDIsIDYzLCAxLCAKKyAgICAyNDMsIDAsIDYzLCAxLCAyMjksIDgyLCA2MywgMSwgMjUxLCA0MSwgNjMsIDEsIDI1MCwgMTY1LCA2MywgMSwgMjM1LCAxNDcsIAorICAgIDYzLCAxLCAyMjcsIDE2OSwgNjMsIDEsIDIxNSwgMTU3LCA2MywgMSwgMjE1LCAxNDUsIDYzLCAxLCAyNDgsIDE0MywgNjMsIAorICAgIDEsIDI0OCwgMTI3LCA2MywgMSwgMjI4LCAxMTUsIDYzLCAxLCAyMTcsIDEwNiwgNjMsIDEsIDIxNiwgMjA5LCA2MywgMSwgCisgICAgMjQ4LCAyMjksIDYzLCAxLCAyNDgsIDMzLCA2MywgMSwgMTk4LCA2MywgMSwgMTkxLCA2MywgMSwgMjI1LCAxNTAsIDYzLCAxLCAKKyAgICAyNTIsIDE5OSwgNjMsIDEsIDI1MiwgMjYsIDYzLCAxLCAxODYsIDYzLCAxLCAyMTUsIDE4NCwgNjMsIDEsIDIxNSwgMTc2LCAKKyAgICA2MywgMSwgMjQ2LCA0NiwgNjMsIDEsIDI0NiwgNDEsIDYzLCAxLCAyMTIsIDY1LCA2MywgMSwgMjEwLCA4MiwgNjMsIDEsIAorICAgIDIxMCwgMTE2LCA2MywgMSwgMjU1LCAxNzUsIDYzLCAxLCAxOTIsIDYzLCAxLCAyMDUsIDYzLCAxLCAyMzMsIDE0MSwgNjMsIAorICAgIDEsIDIyMCwgMTA0LCA2MywgMSwgMjE4LCAyMjUsIDYzLCAxLCAyMDYsIDYzLCAxLCAxNjIsIDYzLCAxLCA2MSwgNjMsIDEsIAorICAgIDIzMywgMjM3LCA2MywgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMSwgMjM0LCA1MiwgNjMsIDEsIDIyMiwgMTgxLCA2MywgMjUsIAorICAgIDUsIDI1NSwgODIsIDYzLCAyNSwgNSwgNzQsIDYzLCAyNSwgNSwgMjM2LCA0MCwgNjMsIDI1LCA1LCA2OSwgNjMsIDI1LCA1LCAKKyAgICAyMTQsIDExOCwgNjMsIDI1LCA1LCAxNDksIDE1MywgNjMsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2MywgMjUsIDUsIDE0OSwgCisgICAgMTU2LCA2MywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDYzLCAyNSwgNSwgNzYsIDYzLCAyNSwgNSwgMjQ1LCAyMTcsIDYzLCAKKyAgICAyNSwgNSwgNzgsIDYzLCAyNSwgNSwgMjI2LCAxODcsIDYzLCA1LCAyMjIsIDIyNCwgMjE4LCA4NSwgMjI5LCA4MywgMjIyLCAKKyAgICAyMTMsIDYzLCA1LCAyMjIsIDIxOCwgMjUyLCA4NCwgNjMsIDI1LCA1LCAyMjMsIDUyLCA3NCwgNjMsIDI1LCA1LCAyMjMsIAorICAgIDUyLCAyMzYsIDQwLCA2MywgNSwgMjI3LCAxNTMsIDIxMCwgMjYsIDIyOSwgMjMxLCAyNDgsIDIyOSwgNjMsIDUsIDIxOSwgCisgICAgNzMsIDIzMywgNjYsIDYzLCAxNjQsIDI0MiwgMzYsIDYzLCAxNjQsIDIyNiwgNjEsIDYzLCA1LCAyMzMsIDY5LCAyMjIsIAorICAgIDE0NSwgNjMsIDUsIDIxMSwgNzAsIDIyMiwgMTQ1LCA2MywgNSwgMjMzLCA3MCwgMjE1LCAxODUsIDI1MSwgMTUsIDYzLCA1LCAKKyAgICAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDUsIDI0MiwgMTI2LCAyNTEsIDE2LCAyMjMsIDQzLCA2MywgNSwgMjQyLCAxMjYsIAorICAgIDIzMSwgOTAsIDIyMywgNDMsIDYzLCA1LCAyMzUsIDIwMCwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCA1LCAKKyAgICAyMzMsIDcwLCAyMTUsIDE4NSwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDUsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCAKKyAgICA3NCwgNSwgMjM1LCAyMDAsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgMSwgMTc2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjM0LCAxMzgsIDYzLCAyMTgsIDc0LCAxLCAyNDMsIDE0MiwgNjMsIDIxOCwgNzQsIDEsIDI0MywgMCwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIyOSwgODIsIDYzLCAyMTgsIDc0LCAxLCAyNTEsIDQxLCA2MywgMjE4LCA3NCwgMSwgMjUwLCAxNjUsIDYzLCAyMTgsIAorICAgIDc0LCAxLCAyMzUsIDE0NywgNjMsIDIxOCwgNzQsIDEsIDIyNywgMTY5LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNTcsIDYzLCAKKyAgICAyMTgsIDc0LCAxLCAyMTUsIDE0NSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMTQzLCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAxMjcsIAorICAgIDYzLCAyMTgsIDc0LCAxLCAyMjgsIDExNSwgNjMsIDIxOCwgNzQsIDEsIDIxNywgMTA2LCA2MywgMjE4LCA3NCwgMSwgMjE2LCAKKyAgICAyMDksIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDIyOSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMzMsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAxOTgsIDYzLCAyMTgsIDc0LCAxLCAxOTEsIDYzLCAyMTgsIDc0LCAxLCAyMjUsIDE1MCwgNjMsIDIxOCwgNzQsIDEsIDI1MiwgCisgICAgMTk5LCA2MywgMjE4LCA3NCwgMSwgMjUyLCAyNiwgNjMsIDIxOCwgNzQsIDEsIDE4NiwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgCisgICAgMTg0LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNzYsIDYzLCAyMTgsIDc0LCAxLCAyNDYsIDQ2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjQ2LCA0MSwgNjMsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDYzLCAyMTgsIDc0LCAxLCAyMTAsIDgyLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjEwLCAxMTYsIDYzLCAyMTgsIDc0LCAxLCAyNTUsIDE3NSwgNjMsIDIxOCwgNzQsIDEsIDE5MiwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIwNSwgNjMsIDIxOCwgNzQsIDEsIDIzMywgMTQxLCA2MywgMjE4LCA3NCwgMSwgMjIwLCAxMDQsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMTgsIDIyNSwgNjMsIDIxOCwgNzQsIDEsIDIwNiwgNjMsIDIxOCwgNzQsIDEsIDE2MiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDYxLCA2MywgMjE4LCA3NCwgMSwgMjMzLCAyMzcsIDYzLCAyMTgsIDc0LCAxLCAyNDQsIDg1LCAyMTIsIDY1LCA2MywgMjE4LCAKKyAgICA3NCwgMSwgMjQ0LCA4NSwgMTkyLCA2MywgMjE4LCA3NCwgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMjMzLCAyMjQsIDIyMiwgCisgICAgMTQzLCAyMzQsIDEzOCwgNjMsIDIzMywgMjI0LCAyMjIsIDE0MywgMjM0LCAxMzksIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIAorICAgIDE1LCA2MywgMjUxLCA0LCA1LCAxMTQsIDI1MiwgNzgsIDYzLCAyNTEsIDQsIDUsIDE5MywgMjUyLCA3OCwgNjMsIDI1MSwgNCwgCisgICAgNSwgMjUxLCA1LCAyMTcsIDIxLCA2MywgMjUxLCA0LCA1LCAyMjEsIDIwOSwgMjU1LCAxNzQsIDYzLCAxNiwgMjQ2LCA5OSwgCisgICAgMjUxLCAxMzMsIDYzLCAxNiwgMjIzLCAxMzIsIDIyMiwgMjI1LCA2MywgMTYsIDIyNiwgODEsIDI0MywgNzAsIDYzLCAxNiwgCisgICAgMjIzLCAxMzIsIDIyMiwgMjI2LCAyMjMsIDQ1LCAyNDIsIDE1MiwgNjMsIDE2LCAyMjUsIDExNSwgMTkxLCA2MywgMTYsIAorICAgIDIyOCwgNjQsIDI1MSwgMTMzLCA2MywgMTYsIDIyOCwgNjQsIDI1MSwgMTM0LCAyMjcsIDE0MywgMjU1LCAxNzEsIDYzLCAxNiwgCisgICAgMjI4LCA2NCwgMjUxLCAxMzQsIDI0MiwgMTI0LCAyNTUsIDE3MSwgNjMsIDE2LCAyMjgsIDY0LCAyNTEsIDEzNCwgMjUxLCAKKyAgICA3NywgMjU1LCAxNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDIyMywgMTMzLCAyNDcsIDE2NiwgNjMsIDUsIDIyMywgCisgICAgMTMzLCAyMjksIDIyNCwgMjQyLCAxMjMsIDYzLCAxNjQsIDI1MSwgMTM3LCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgNjMsIDE2NCwgMjMwLCAxNjgsIDIxMSwgMCwgMjQyLCAyMjIsIDIzMCwgMjUzLCAyMjMsIDQ0LCA2MywgMTY0LCAKKyAgICAyMjcsIDE0MywgMjE1LCAxNzMsIDYzLCAxNjQsIDY1LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIAorICAgIDIzMSwgOTgsIDE4NiwgNjMsIDE2NCwgMjUwLCA0LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIDIyMCwgCisgICAgMTExLCAxODYsIDIyMiwgMjUzLCAyMTgsIDAsIDUwLCAyMzMsIDUxLCAyMTgsIDAsIDUwLCAyMjIsIDI1MywgMjE4LCAwLCA1LCAKKyAgICAyLCAyNDcsIDEyNiwgMjMzLCA1MSwgMjE4LCAwLCA1LCAyLCAyNDcsIDEyNiwgNjMsIDE2NCwgMjMzLCA2MSwgMjMxLCAxMDEsIAorICAgIDIyMiwgMTQ1LCA2MywgMTY0LCAyMTUsIDI1MSwgMjMxLCAxMDEsIDIyMiwgMTQ1LCA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAKKyAgICAxMzgsIDY4LCAxLCAyNDMsIDE0MiwgNjgsIDEsIDI0MywgMCwgNjgsIDEsIDIyOSwgODIsIDY4LCAxLCAyNTEsIDQxLCA2OCwgCisgICAgMSwgMjUwLCAxNjUsIDY4LCAxLCAyMzUsIDE0NywgNjgsIDEsIDIzNSwgMTIwLCA2OCwgMSwgMjI3LCAxNjksIDY4LCAxLCAKKyAgICAyMjgsIDgxLCA2OCwgMSwgMjE1LCAxNTcsIDY4LCAxLCAyMTUsIDE0NSwgNjgsIDEsIDI0OCwgMTQzLCA2OCwgMSwgMjQ4LCAKKyAgICAxMjcsIDY4LCAxLCAyMjgsIDExNSwgNjgsIDEsIDIxNywgMTA2LCA2OCwgMSwgMjE2LCAyMDksIDY4LCAxLCAyNDgsIDIyOSwgCisgICAgNjgsIDEsIDI0OCwgMzMsIDY4LCAxLCAxOTgsIDY4LCAxLCAxOTEsIDY4LCAxLCAyMjUsIDE1MCwgNjgsIDEsIDI1MiwgMTk5LCAKKyAgICA2OCwgMSwgMjUyLCAyNiwgNjgsIDEsIDE4NiwgNjgsIDEsIDE5MiwgNjgsIDEsIDIwNSwgNjgsIDEsIDIzMywgMTQxLCA2OCwgCisgICAgMSwgMjEyLCA2NSwgNjgsIDEsIDIwNiwgNjgsIDEsIDE2MiwgNjgsIDEsIDIzMiwgMTkwLCA2OCwgMSwgNjEsIDY4LCAxLCAKKyAgICAyMjAsIDg4LCA2MSwgNjgsIDEsIDc0LCA2OCwgMSwgMjM2LCA0MCwgNjgsIDEsIDY5LCA2OCwgMSwgMjE0LCAxMTgsIDY4LCAKKyAgICAxLCA3NiwgNjgsIDEsIDIzMCwgMTU2LCA3NiwgNjgsIDEsIDc4LCA2OCwgMSwgMjUzLCAyMDAsIDY4LCAyNSwgNSwgMjE3LCAKKyAgICA2NSwgMjU1LCA4MiwgNjgsIDI1LCA1LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDc0LCA2OCwgMjUsIDUsIDIzNiwgNDAsIDY4LCAKKyAgICAyNSwgNSwgNjksIDY4LCAyNSwgNSwgMjE0LCAxMTgsIDY4LCAyNSwgNSwgNzYsIDY4LCAyNSwgNSwgMjU0LCAyMTAsIDY4LCAKKyAgICAyNSwgNSwgMjMwLCAxNTYsIDIzNiwgNDAsIDY4LCAyNSwgNSwgMjMwLCAxNTYsIDc4LCA2OCwgMjUsIDUsIDE2MCwgNDgsIAorICAgIDY4LCA1LCAyNTQsIDgzLCA2OCwgNSwgNTksIDUxLCA2OCwgNSwgMjEzLCAxNDcsIDY4LCA1LCAyMTMsIDE1MiwgNjgsIDUsIAorICAgIDI1MywgMjQzLCA2OCwgMTE3LCA1LCAxNDcsIDE5MiwgNjgsIDExNywgNSwgMTQ3LCAyMDUsIDY4LCAxMTcsIDUsIDE0NywgCisgICAgMjEyLCA2NSwgNjgsIDExNywgNSwgMTQ3LCAxNjIsIDY4LCAxLCAyNDIsIDEzOSwgMjA2LCA2OCwgMjEsIDIxMCwgODYsIDY4LCAKKyAgICAyMSwgMTExLCA2OCwgMjEsIDEwNSwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTYxLCA2OCwgMjEsIDE5MCwgNjgsIDIxLCAxOTUsIAorICAgIDY4LCAyMSwgMTk5LCA2OCwgMjEsIDE5NiwgNjgsIDIxLCAyMDEsIDY4LCA1LCAyMzIsIDE5OCwgMjIxLCAxNzQsIDY4LCA1LCAKKyAgICAyMjEsIDE3NCwgNjgsIDE2LCAyMzIsIDE1OSwgNjgsIDE2LCAyNDksIDIyMSwgNjgsIDE2LCAyNTQsIDIyOSwgNjgsIDE2LCAKKyAgICAyNDMsIDU1LCA2OCwgMSwgMjIwLCAxMDQsIDY4LCAxLCAyMTgsIDIyNSwgNjgsIDEsIDE0OSwgMTUzLCA2OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgNjgsIDEsIDE0OSwgMTU2LCA2OCwgMSwgMTQ5LCAyMzIsIDE5MSwgNjgsIDI1LCA1LCAxNDksIDE1MywgNjgsIAorICAgIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2OCwgMjUsIDUsIDE0OSwgMTU2LCA2OCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDY4LCAKKyAgICAxLCAyMzAsIDE1NiwgMjI5LCA4MiwgNjgsIDEsIDIzMCwgMTU2LCAyMzUsIDEyMCwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIAorICAgIDExOSwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIDExNCwgNjgsIDExNywgNSwgMjMwLCAxNTYsIDE0NywgMTk4LCA2OCwgMTE3LCAKKyAgICA1LCAyMzAsIDE1NiwgMTQ3LCAxODYsIDY4LCAxMTcsIDUsIDIzMCwgMTU2LCAxNDcsIDIzMywgMTQxLCA2OCwgMSwgMjIwLCAKKyAgICAxMTAsIDIzNCwgMjE5LCAyMjAsIDEwNCwgNjgsIDI1LCA1LCAyMjAsIDExMCwgMjM0LCAyMTksIDI0NSwgNjMsIDY4LCAxMzgsIAorICAgIDE2NCwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyNDEsIDI1NCwgNjgsIDEzOCwgMTY0LCAyMjAsIDExMCwgMjM0LCAyMTksIDIzNCwgCisgICAgMTg5LCAyMjUsIDEyNCwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDIwOSwgNjgsIDEsIDIxMiwgCisgICAgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMjQsIDExNywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgCisgICAgMjQ1LCA2MywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE0LCAyMTQsIDY4LCA1LCAyMTIsIDcsIAorICAgIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAzMCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI5LCAKKyAgICA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIAorICAgIDIxOSwgMjE2LCAyNywgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI2LCA2OCwgMSwgMjQ1LCAKKyAgICAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjI4LCAxMTUsIDY4LCAxLCAyNDUsIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAKKyAgICAyMTAsIDE3NiwgNjgsIDEsIDI0NSwgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIDI0MiwgMjI0LCA2OCwgMjUsIDUsIDI0MywgCisgICAgNjYsIDIzNCwgMjE5LCA3NCwgNjgsIDI1LCA1LCAyMzQsIDE5NCwgMjI2LCAyMzgsIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDY5LCAKKyAgICA2OCwgMjUsIDUsIDIzNCwgMTk0LCAyNDUsIDIxNywgNjgsIDEsIDIyMCwgODgsIDE3NiwgNjgsIDEsIDIyMCwgODgsIDIzNCwgCisgICAgMTM4LCA2OCwgMSwgMjIwLCA4OCwgMjQzLCAxNDIsIDY4LCAxLCAyMjAsIDg4LCAyNTEsIDQxLCA2OCwgMSwgMjIwLCA4OCwgCisgICAgMjEwLCAxMTYsIDY4LCAxLCAyMjAsIDg4LCAyMjcsIDE2OSwgNjgsIDEsIDIyMCwgODgsIDI0OCwgMjI5LCA2OCwgMSwgMjIwLCAKKyAgICA4OCwgMTk4LCA2OCwgMSwgMjIwLCA4OCwgMjI1LCAxNTAsIDY4LCAxLCAyMjAsIDg4LCAyNDQsIDIwNCwgNjgsIDEsIDIyMCwgCisgICAgODgsIDI1MiwgMTk5LCA2OCwgMSwgMjIwLCA4OCwgMjE2LCAyMDksIDY4LCAxLCAyMjAsIDg4LCAxNjIsIDY4LCAxMTcsIDUsIAorICAgIDIyMCwgODgsIDE0NywgMjEyLCA2NSwgNjgsIDI1LCA1LCAyMjAsIDg4LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDIyMCwgODgsIAorICAgIDc2LCA2OCwgMjUsIDUsIDIyMCwgODgsIDE2MCwgNDgsIDY4LCAyNSwgNSwgMjIwLCA4OCwgNDAsIDIxMSwgMTE3LCA2OCwgNSwgCisgICAgMjIwLCA4OCwgMjE2LCAyOSwgNjgsIDUsIDIyMCwgODgsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyMTYsIDI2LCA2OCwgCisgICAgNSwgMjIwLCA4OCwgMjE2LCAyNSwgNjgsIDUsIDIyMCwgODgsIDI0OSwgMTYwLCAyMTYsIDI5LCA2OCwgNSwgMjIwLCA4OCwgCisgICAgMjQ5LCAxNjAsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyNDksIDE2MCwgMjQ1LCAxNjEsIDIxNiwgMzEsIDY4LCAxLCAKKyAgICAyMjIsIDEzMCwgMjI2LCA2NywgMjQ0LCAyMDQsIDY4LCA1LCAyMjIsIDEzMCwgMjI2LCA2NywgMjE2LCAyNiwgNjgsIDIyMCwgCisgICAgODgsIDIxLCAyMTAsIDg2LCA2OCwgMjIwLCA4OCwgMjEsIDExMSwgNjgsIDIyMCwgODgsIDIxLCAxMDUsIDY4LCAyMjAsIDg4LCAKKyAgICAyMSwgMTU4LCA2OCwgMjIwLCA4OCwgMjEsIDE2MSwgNjgsIDIyMCwgODgsIDIxLCAxOTAsIDY4LCAyMjAsIDg4LCAyMSwgCisgICAgMTk1LCA2OCwgMjIwLCA4OCwgMjEsIDE5OSwgNjgsIDIyMCwgODgsIDIxLCAxOTYsIDY4LCAyMjAsIDg4LCAyMSwgMjAxLCAKKyAgICA2OCwgNSwgMjM0LCAxMzIsIDIxNiwgMzAsIDY4LCA1LCAyMzQsIDEzMiwgMjE2LCAyOCwgNjgsIDI1LCA1LCAyNTQsIDE5OSwgCisgICAgNjEsIDY4LCAyNSwgNSwgMjU0LCAxOTksIDI1NCwgMjEwLCA2OCwgMTYsIDIyMCwgODgsIDExMSwgNjgsIDE2LCAyMjAsIDg4LCAKKyAgICAyNDUsIDM4LCA5OCwgNiwgMSwgMjU0LCAxMzEsIDk4LCA2LCAxLCAyNTIsIDE2MCwgOTgsIDYsIDEsIDI0MywgMTEzLCA5OCwgCisgICAgNiwgMSwgMjQ3LCAxMzYsIDk4LCA2LCAxLCAyNDUsIDE1OCwgOTgsIDYsIDEsIDIxMywgMTYwLCA5OCwgNiwgMSwgMjEwLCAKKyAgICA4OSwgOTgsIDYsIDEsIDIxNywgNjEsIDk4LCA2LCAxLCAyMzYsIDYsIDk4LCA2LCAxLCAyMzQsIDI0MCwgOTgsIDYsIDEsIAorICAgIDIzMywgODcsIDk4LCA2LCAxLCAyMzEsIDE5MCwgOTgsIDYsIDEsIDIyOSwgMjAwLCA5OCwgNiwgMSwgMjI2LCAyMDAsIDk4LCAKKyAgICA2LCAxLCAyMjYsIDIxLCA5OCwgNiwgMSwgMjEwLCA3OCwgOTgsIDYsIDEsIDIyMywgMTc0LCA5OCwgNiwgMSwgMjIxLCAyNDUsIAorICAgIDk4LCA2LCAxLCAyMTcsIDUxLCA5OCwgNiwgMSwgMjE0LCAxOTAsIDk4LCA2LCAxLCAyMjUsIDE0MywgOTgsIDYsIDEsIDIzNCwgCisgICAgMTI3LCA5OCwgNiwgMSwgMjQyLCAyNDgsIDk4LCA2LCAxLCAyMjQsIDc2LCA5OCwgNiwgMSwgMjIwLCAyMiwgOTgsIDYsIDEsIAorICAgIDI1MCwgMTA1LCA5OCwgNiwgMSwgMjUxLCAxNSwgOTgsIDYsIDEsIDIzNSwgMTA2LCA5OCwgNiwgMSwgMjUwLCA0OCwgOTgsIAorICAgIDYsIDEsIDI1MCwgMTUxLCA5OCwgNiwgMSwgMjExLCAxNjMsIDk4LCA2LCAxLCAyMzUsIDExNywgOTgsIDYsIDEsIDI0MiwgCisgICAgNTAsIDk4LCA2LCAxLCAyNDEsIDI0NSwgOTgsIDYsIDEsIDI0MSwgMTgyLCA5OCwgNiwgMSwgMjEyLCAyMiwgOTgsIDYsIDEsIAorICAgIDI0MiwgMTEsIDk4LCA2LCAxLCAyNDEsIDcyLCA5OCwgNiwgMSwgMjEwLCAyNDYsIDk4LCA2LCAxLCAyNTQsIDI0MSwgOTgsIAorICAgIDEsIDI1NCwgMTMxLCA5OCwgMSwgMjUyLCAxNjAsIDk4LCAxLCAyNDMsIDExMywgOTgsIDEsIDI0NywgMTM2LCA5OCwgMSwgCisgICAgMjQ1LCAxNTgsIDk4LCAxLCAyMTMsIDE2MCwgOTgsIDEsIDIxMCwgODksIDk4LCAxLCAyMTcsIDYxLCA5OCwgMSwgMjM2LCA2LCAKKyAgICA5OCwgMSwgMjM0LCAyNDAsIDk4LCAxLCAyMzMsIDg3LCA5OCwgMSwgMjMxLCAxOTAsIDk4LCAxLCAyMjksIDIwMCwgOTgsIDEsIAorICAgIDIyNiwgMjAwLCA5OCwgMSwgMjI2LCAyMSwgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3NCwgOTgsIDEsIDIyMSwgCisgICAgMjQ1LCA5OCwgMSwgMjE3LCA1MSwgOTgsIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDMsIDk4LCAxLCAyMzQsIDEyNywgCisgICAgOTgsIDEsIDI0MiwgMjQ4LCA5OCwgMSwgMjI0LCA3NiwgOTgsIDEsIDIyMCwgMjIsIDk4LCAxLCAyNTAsIDEwNSwgOTgsIDEsIAorICAgIDI1MSwgMTUsIDk4LCAxLCAyMzUsIDEwNiwgOTgsIDEsIDI1MCwgNDgsIDk4LCAxLCAyNTAsIDE1MSwgOTgsIDEsIDIxMSwgCisgICAgMTYzLCA5OCwgMSwgMjM1LCAxMTcsIDk4LCAxLCAyNDIsIDUwLCA5OCwgMSwgMjQxLCAyNDUsIDk4LCAxLCAyNDEsIDE4MiwgCisgICAgOTgsIDEsIDIxMiwgMjIsIDk4LCAxLCAyNDIsIDExLCA5OCwgMSwgMjQxLCA3MiwgOTgsIDEsIDI0NCwgMTI5LCA5OCwgMSwgCisgICAgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE3MywgOTgsIDEsIDIxNSwgOTQsIDI0MywgMTEzLCA5OCwgMSwgMjU0LCAyMDUsIDk4LCAKKyAgICAyMjYsIDE5LCAyMjAsIDEzOSwgNTgsIDEsIDk4LCAyMjksIDIwMCwgOTgsIDEsIDI1NCwgMjQxLCA5OCwgMSwgMjQyLCAxMCwgCisgICAgNTAsIDk4LCAxLCAyMzMsIDEzMywgNTAsIDI0LCAxMDAsIDIzNCwgNjQsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIzMSwgMjQsIDEwMCwgMjE2LCAxMDIsIDI0LCAxMDAsIDIxOCwgMjA2LCAyNCwgMTAwLCAyMjMsIDI5LCAyNCwgCisgICAgMTAwLCAyMzAsIDIyMiwgMjQsIDEwMCwgMjI1LCA5OCwgMjQsIDEwMCwgMjE4LCAyMTQsIDI0LCAxMDAsIDIxOSwgMTUwLCAKKyAgICAyNCwgMTAwLCAyMTgsIDIxMSwgMjQsIDEwMCwgMjM2LCA2MywgMjQsIDEwMCwgMjUwLCA1NCwgMjQsIDEwMCwgMjE4LCAyMjEsIAorICAgIDI0LCAxMDAsIDI1MCwgMTE0LCAyNCwgMTAwLCAyMzQsIDExNiwgMjQsIDEwMCwgMjE2LCAxNzQsIDI0LCAxMDAsIDIyNSwgCisgICAgMTM0LCAyNCwgMTAwLCAyNDEsIDE3OSwgMjQsIDEwMCwgMjI4LCAyMjcsIDI0LCAxMDAsIDIxOCwgMjE1LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIyMSwgMjQsIDEwMCwgMjI4LCAyMjUsIDI0LCAxMDAsIDIxNiwgOTksIDI0LCAxMDAsIDIyMywgMTcsIDI0LCAxMDAsIAorICAgIDIxOCwgMjEzLCAyNCwgMTAwLCAyMjMsIDI3LCAyNCwgMTAwLCAyMzQsIDIyNCwgMjQsIDEwMCwgMjMwLCAyMTUsIDI0LCAKKyAgICAxMDAsIDIzNCwgMjI3LCAyNCwgMTAwLCAyMjUsIDkzLCAyNCwgMTAwLCAyMjUsIDkxLCAyNCwgMTAwLCAyMjUsIDc5LCAyNCwgCisgICAgMTAwLCAyMjUsIDg3LCAyNCwgMTAwLCAyMjUsIDg1LCAyNCwgMTAwLCAyMjUsIDgyLCAyNCwgMTAwLCAyMjUsIDg0LCAyNCwgCisgICAgMTAwLCAyMjUsIDgxLCAyNCwgMTAwLCAyMjUsIDg2LCAyNCwgMTAwLCAyMjUsIDk2LCAyNCwgMTAwLCAyMjUsIDk3LCAyNCwgCisgICAgMTAwLCAyMjUsIDgwLCAyNCwgMTAwLCAyMjUsIDkwLCAyNCwgMTAwLCAyMzQsIDIyNSwgMjQsIDEwMCwgMjM0LCAyMjMsIDI0LCAKKyAgICAxMDAsIDIxOSwgMTQzLCAyNCwgMTAwLCAyMTksIDE0MSwgMjQsIDEwMCwgMjE5LCAxMzMsIDI0LCAxMDAsIDIxOSwgMTM2LCAKKyAgICAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzgsIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIAorICAgIDEzNSwgMjQsIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ4LCAyNCwgMTAwLCAyMTksIDE0OSwgMjQsIDEwMCwgCisgICAgMjE5LCAxNDQsIDI0LCAxMDAsIDIxOSwgMTM0LCAyNCwgMTAwLCAyMTksIDEzOSwgMjQsIDEwMCwgMjE5LCAxNDcsIDI0LCAKKyAgICAxMDAsIDI1MCwgOTgsIDI0LCAxMDAsIDI1MCwgOTYsIDI0LCAxMDAsIDI1MCwgMTc2LCAyNCwgMTAwLCAyNTAsIDE3NCwgMjQsIAorICAgIDEwMCwgMjI2LCAzNiwgMjQsIDEwMCwgMjM2LCA1OCwgMjQsIDEwMCwgMjM2LCA0OSwgMjQsIDEwMCwgMjM2LCA1NywgMjQsIAorICAgIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1MiwgMjQsIDEwMCwgMjM2LCA1NiwgMjQsIDEwMCwgMjE4LCAyMTgsIDI0LCAKKyAgICAxMDAsIDIzNiwgNjEsIDI0LCAxMDAsIDIzNiwgNjIsIDI0LCAxMDAsIDIzNiwgNTAsIDI0LCAxMDAsIDIzNiwgNTUsIDI0LCAKKyAgICAxMDAsIDIxMSwgMjYsIDI0LCAxMDAsIDI1MCwgNTMsIDI0LCAxMDAsIDI1MCwgOTksIDI0LCAxMDAsIDI1MCwgOTcsIDI0LCAKKyAgICAxMDAsIDI1MCwgMTc3LCAyNCwgMTAwLCAyNTAsIDE3NSwgMjQsIDEwMCwgMjUwLCAxMTIsIDI0LCAxMDAsIDI1MCwgMTEzLCAKKyAgICAyNCwgMTAwLCAyNTAsIDEwMCwgMjQsIDEwMCwgMjUwLCAxNzgsIDI0LCAxMDAsIDIyNSwgMTMyLCAyNCwgMTAwLCAyMzQsIAorICAgIDIyNiwgMjQsIDEwMCwgMjE4LCAyMTksIDI0LCAxMDAsIDIxMSwgMzIsIDI0LCAxMDAsIDIzNCwgNTUsIDI0LCAxMDAsIDIyOCwgCisgICAgMjIzLCAyNCwgMTAwLCAyMjgsIDIyOSwgMjQsIDEwMCwgMjI4LCAyMjgsIDI0LCAxMDAsIDIxNiwgOTYsIDI0LCAxMDAsIAorICAgIDI0NCwgMTExLCAyNCwgMTQzLCAyNDQsIDExMSwgMjQsIDE0MywgNjEsIDI0LCAxNDMsIDI1NCwgMjUyLCAyNCwgMTQzLCAKKyAgICAxOTIsIDI0LCAxNDMsIDIxMSwgOTIsIDI0LCAxNDMsIDI0NSwgMTI1LCAyNCwgMTQzLCA3NiwgMjQsIDE0MywgMjExLCAzNiwgCisgICAgMjQsIDE0MywgMjExLCA0NywgMjQsIDE0MywgNzgsIDI0LCAxNDMsIDIxMiwgNjUsIDI0LCAxNDMsIDIxMiwgNjIsIDI0LCAKKyAgICAxNDMsIDIyNiwgMjM4LCAyNCwgMTQzLCAyMTAsIDI0NCwgMjQsIDE0MywgNjksIDI0LCAxNDMsIDIxMiwgMTEsIDI0LCAxNDMsIAorICAgIDIxMiwgMjIsIDI0LCAxNDMsIDIxMSwgMjUwLCAyNCwgMTQzLCAyMTAsIDIxMiwgMjQsIDE0MywgMjQ1LCA2MywgMjQsIDE0MywgCisgICAgMjExLCA4LCAyNCwgMTQzLCA3NCwgMjQsIDE0MywgMjU1LCAxNjYsIDI0LCAxNDMsIDI1NSwgMTY1LCAyNCwgMTQzLCAyMTEsIAorICAgIDEwNiwgMjQsIDE0MywgMjExLCAxMDQsIDI0LCAxNDMsIDI0NSwgMTIzLCAyNCwgMTQzLCAyNDUsIDEyMiwgMjQsIDE0MywgCisgICAgMjQ1LCAxMjQsIDI0LCAxNDMsIDIxMSwgMzUsIDI0LCAxNDMsIDIxMSwgMzQsIDI0LCAxNDMsIDIyNywgODgsIDI0LCAxNDMsIAorICAgIDIyNywgODksIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIyNywgODcsIDI0LCAxNDMsIDIyNywgODUsIDI0LCAxNDMsIAorICAgIDIxMCwgMjM4LCAyNCwgMTQzLCAyMTAsIDIzNywgMjQsIDE0MywgMjEwLCAyMzYsIDI0LCAxNDMsIDIxMCwgMjM5LCAyNCwgCisgICAgMTQzLCAyMTAsIDI0MCwgMjQsIDE0MywgMjE1LCAzMCwgMjQsIDE0MywgMjE1LCAyOSwgMjQsIDE0MywgMjE1LCAyNywgMjQsIAorICAgIDE0MywgMjE1LCAyNCwgMjQsIDE0MywgMjE1LCAyNSwgMjQsIDE0MywgMjEwLCAyMTEsIDI0LCAxNDMsIDIxMCwgMjA4LCAyNCwgCisgICAgMTQzLCAyMTAsIDIwOSwgMjQsIDE0MywgMjEwLCAyMDMsIDI0LCAxNDMsIDIxMCwgMjA0LCAyNCwgMTQzLCAyMTAsIDIwNSwgCisgICAgMjQsIDE0MywgMjEwLCAyMDcsIDI0LCAxNDMsIDI0NSwgNTcsIDI0LCAxNDMsIDI0NSwgNTksIDI0LCAxNDMsIDIxMSwgNywgCisgICAgMjQsIDE0MywgMjQwLCAxNjAsIDI0LCAxNDMsIDI0MCwgMTUyLCAyNCwgMTQzLCAyNDAsIDE1NSwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTMsIDI0LCAxNDMsIDI0MCwgMTU3LCAyNCwgMTQzLCAyNDAsIDE1OSwgMjQsIDE0MywgMjU0LCA0MiwgMjQsIDE0MywgCisgICAgMjU0LCAzOSwgMjQsIDE0MywgMjU0LCAzNywgMjQsIDE0MywgMjU0LCAzOCwgMjQsIDE0MywgMjE4LCAyMjIsIDI0LCAxNDMsIAorICAgIDI1NSwgMTY3LCAyNCwgMTQzLCAyMTEsIDEwNSwgMjQsIDE0MywgMjExLCAzMywgMjQsIDE0MywgMjI3LCA4NCwgMjQsIDE0MywgCisgICAgMjI3LCA4MywgMjQsIDkwLCAyMzQsIDY0LCAyNCwgOTAsIDIxOCwgMjE3LCAyNCwgOTAsIDIzNCwgNTcsIDI0LCA5MCwgMjI4LCAKKyAgICAyMzEsIDI0LCA5MCwgMjI4LCAyMjksIDI0LCA5MCwgMjI4LCAyMjgsIDI0LCA5MCwgMjE2LCAxMDIsIDI0LCA5MCwgMjIzLCAKKyAgICAyOSwgMjQsIDkwLCAyMjMsIDI0LCAyNCwgOTAsIDIyMywgMjEsIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAyMjMsIDksIAorICAgIDI0LCA5MCwgMjIzLCA0LCAyNCwgOTAsIDIyMywgMTUsIDI0LCA5MCwgMjIzLCAyNywgMjQsIDkwLCAyMzAsIDIyMiwgMjQsIAorICAgIDkwLCAyMjUsIDk4LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjE5LCAxNTAsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgCisgICAgMjM2LCA2MywgMjQsIDkwLCAyNTAsIDU0LCAyNCwgOTAsIDI1MCwgMTE0LCAyNCwgOTAsIDIzNCwgMTE2LCAyNCwgOTAsIAorICAgIDIxNiwgMTc0LCAyNCwgOTAsIDIyNSwgMTM0LCAyNCwgOTAsIDI0MSwgMTc5LCAyNCwgOTAsIDIzNCwgNTgsIDI0LCA5MCwgCisgICAgMjM0LCA1NiwgMjQsIDkwLCAyMjgsIDIyNywgMjQsIDkwLCAyMjgsIDIyMSwgMjQsIDkwLCAyMjgsIDIyMywgMjQsIDkwLCAKKyAgICAyMjgsIDIyNiwgMjQsIDkwLCAyMjgsIDIyMiwgMjQsIDkwLCAyMTYsIDk5LCAyNCwgOTAsIDIxNiwgOTYsIDI0LCA5MCwgCisgICAgMjIzLCAyMiwgMjQsIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgMywgMjQsIDkwLCAyMjMsIDIsIDI0LCA5MCwgMjE4LCAKKyAgICAyMTMsIDI0LCA5MCwgMjIzLCAxOSwgMjQsIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCAxMywgCisgICAgMjQsIDkwLCAyMjMsIDI2LCAyNCwgOTAsIDIyMywgNiwgMjQsIDkwLCAyMjMsIDE2LCAyNCwgOTAsIDIyMywgMjUsIDI0LCAKKyAgICA5MCwgMjIzLCAxLCAyNCwgOTAsIDIzMCwgMjE4LCAyNCwgOTAsIDIzMCwgMjEzLCAyNCwgOTAsIDIzMCwgMjE1LCAyNCwgOTAsIAorICAgIDIzMCwgMjEyLCAyNCwgOTAsIDIzMCwgMjEwLCAyNCwgOTAsIDIzMCwgMjE2LCAyNCwgOTAsIDIzMCwgMjIxLCAyNCwgOTAsIAorICAgIDIzMCwgMjE5LCAyNCwgOTAsIDIzNCwgMjI3LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjI1LCA5MCwgMjQsIDkwLCAKKyAgICAyMjUsIDk1LCAyNCwgOTAsIDIzNCwgMjI1LCAyNCwgOTAsIDIxOSwgMTQzLCAyNCwgOTAsIDIxOSwgMTMzLCAyNCwgOTAsIAorICAgIDIxOSwgMTM2LCAyNCwgOTAsIDIxOSwgMTM4LCAyNCwgOTAsIDIyNiwgMzYsIDI0LCA5MCwgMjM2LCA1OCwgMjQsIDkwLCAKKyAgICAyMzYsIDUxLCAyNCwgOTAsIDIxOCwgMjE4LCAyNCwgOTAsIDIzNiwgNTksIDI0LCA5MCwgMjExLCAyNiwgMjQsIDkwLCAyMTEsIAorICAgIDIyLCAyNCwgOTAsIDIxMSwgMjMsIDI0LCA5MCwgMjI1LCAxMzIsIDI0LCA5MCwgMjM0LCAyMjYsIDI0LCA5MCwgMjQxLCAKKyAgICAxNzcsIDI0LCA5MCwgMjQxLCAxNzUsIDI0LCA5MCwgMjQxLCAxNzgsIDI0LCA5MCwgMjQxLCAxNzYsIDI0LCA5MCwgMjExLCAKKyAgICAzMiwgMjQsIDkwLCAyMzQsIDYwLCAyNCwgOTAsIDIzNCwgNTksIDI0LCA5MCwgMjM0LCA2MywgMjQsIDkwLCAyMzQsIDYxLCAKKyAgICAyNCwgOTAsIDIzNCwgNjIsIDI0LCA5MCwgMjE4LCAyMTUsIDI5LCAzLCAxNjIsIDI5LCAzLCAyNDAsIDIyOSwgMjksIDMsIAorICAgIDI0MSwgMTg3LCAyOSwgMywgMjQyLCA1MywgMjksIDMsIDI0MSwgMjI3LCAyOSwgMywgMjQxLCAyNDUsIDI5LCAzLCAyNDEsIAorICAgIDc1LCAyOSwgMywgMjQxLCA3NCwgMjksIDMsIDIzMywgMTQxLCAyOSwgMywgMjMyLCAxMDMsIDI5LCAzLCAyMzIsIDI0NywgCisgICAgMjksIDMsIDIzMywgMTQwLCAyOSwgMywgMjMzLCA1NiwgMjksIDMsIDIzMywgNjQsIDI5LCAzLCAyMzIsIDE2MiwgMjksIDMsIAorICAgIDIzMiwgNzUsIDI5LCAzLCAyNDEsIDE5NiwgMjksIDMsIDI0MSwgMTkwLCAyOSwgMywgMjQxLCAxOTIsIDI5LCAzLCAyNDEsIAorICAgIDE5NSwgMjksIDMsIDI0MSwgMTkzLCAyOSwgMywgMjQxLCAxOTQsIDI5LCAzLCAyNDEsIDE5MSwgMjksIDMsIDI0MSwgMTg5LCAKKyAgICAyOSwgMywgMTg2LCAyOSwgMywgMjMwLCAxMDcsIDI5LCAzLCAyMzAsIDIzNSwgMjksIDMsIDIzMSwgMjQyLCAyOSwgMywgCisgICAgMjMxLCA4NSwgMjksIDMsIDIzMSwgOTYsIDI5LCAzLCAyMzAsIDE2NiwgMjksIDMsIDIzMCwgNDcsIDI5LCAzLCAyMTcsIAorICAgIDE2NCwgMjksIDMsIDIxNywgMTU4LCAyOSwgMywgMjE3LCAxNjAsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTYxLCAKKyAgICAyOSwgMywgMjE3LCAxNjIsIDI5LCAzLCAyMTcsIDE1OSwgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjA1LCAyOSwgMywgCisgICAgMjIyLCAxNDIsIDI5LCAzLCAyMjMsIDM4LCAyOSwgMywgMjIzLCAxODcsIDI5LCAzLCAyMjMsIDExMSwgMjksIDMsIDIyMywgCisgICAgMTMxLCAyOSwgMywgMjIyLCAyMTMsIDI5LCAzLCAyMjIsIDExMSwgMjksIDMsIDIwNiwgMjksIDMsIDIxOCwgODQsIDI5LCAzLCAKKyAgICAyMTksIDE5MywgMjksIDMsIDIyMiwgMzMsIDI5LCAzLCAyMjEsIDE3MiwgMjksIDMsIDIyMSwgMTgzLCAyOSwgMywgMjE5LCAKKyAgICA2MCwgMjksIDMsIDIxNywgMjU0LCAyOSwgMywgMjIwLCAxMDQsIDI5LCAzLCAyMTksIDIyNywgMjksIDMsIDIyMCwgMzQsIAorICAgIDI5LCAzLCAyMjAsIDEwMCwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAyMjAsIDY1LCAyOSwgMywgMjIwLCA5LCAyOSwgMywgCisgICAgMjE5LCAyMTAsIDI5LCAzLCAyMjQsIDkxLCAyOSwgMywgMjI0LCAzMywgMjksIDMsIDIyNCwgNTYsIDI5LCAzLCAyMjQsIDkwLCAKKyAgICAyOSwgMywgMjI0LCA3MSwgMjksIDMsIDIyNCwgNzIsIDI5LCAzLCAyMjQsIDQ1LCAyOSwgMywgMjI0LCA0NCwgMjksIDMsIAorICAgIDIyMywgMjQ1LCAyOSwgMywgMjIzLCAyNDEsIDI5LCAzLCAyMjMsIDI0NCwgMjksIDMsIDIyMywgMjQyLCAyOSwgMywgMjIzLCAKKyAgICAyNDMsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2MiwgMjksIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDY3LCAyOSwgCisgICAgMywgMjI0LCA2NSwgMjksIDMsIDIyNCwgNjYsIDI5LCAzLCAyMjQsIDYzLCAyOSwgMywgMjI0LCA2MSwgMjksIDMsIDIyNCwgCisgICAgNTcsIDI5LCAzLCAyMjQsIDYwLCAyOSwgMywgMjI0LCA1OCwgMjksIDMsIDIyNCwgNTksIDI5LCAzLCAyNTIsIDE5OSwgMjksIAorICAgIDMsIDI1MSwgMTMzLCAyOSwgMywgMjUyLCAxNCwgMjksIDMsIDI1MiwgMTk3LCAyOSwgMywgMjUyLCA3NCwgMjksIDMsIDI1MiwgCisgICAgODMsIDI5LCAzLCAyNTEsIDIxMywgMjksIDMsIDI1MSwgOTEsIDI5LCAzLCAyMTQsIDI3LCAyOSwgMywgMjEyLCAxMTYsIDI5LCAKKyAgICAzLCAyMTMsIDE3NiwgMjksIDMsIDIxNCwgMjYsIDI5LCAzLCAyMTMsIDI1MCwgMjksIDMsIDIxMywgMjU1LCAyOSwgMywgCisgICAgMjEzLCAxMzgsIDI5LCAzLCAyMTIsIDEwNywgMjksIDMsIDIxNywgMTA2LCAyOSwgMywgMjE1LCAxMTksIDI5LCAzLCAyMTYsIAorICAgIDExOCwgMjksIDMsIDIxNywgMTAyLCAyOSwgMywgMjE3LCAxMiwgMjksIDMsIDIxNywgMjMsIDI5LCAzLCAxMTIsIDI5LCAzLCAKKyAgICAyMTUsIDgwLCAyOSwgMywgMjUxLCA0MSwgMjksIDMsIDI0OSwgMTIwLCAyOSwgMywgMjUwLCA1OSwgMjksIDMsIDI1MSwgNDAsIAorICAgIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjQ5LCAyNDYsIDI5LCAzLCAyNDksIDg5LCAyOSwgMywgCisgICAgMjExLCAxNjUsIDI5LCAzLCAyMTEsIDE0MSwgMjksIDMsIDIxMSwgMTU3LCAyOSwgMywgMjExLCAxNjQsIDI5LCAzLCAyMTEsIAorICAgIDE2MSwgMjksIDMsIDIxMSwgMTYyLCAyOSwgMywgMjExLCAxNDgsIDI5LCAzLCAyMTEsIDE0NywgMjksIDMsIDIxMSwgMTM2LCAKKyAgICAyOSwgMywgMjExLCAxMzIsIDI5LCAzLCAyMTEsIDEzNSwgMjksIDMsIDIxMSwgMTMzLCAyOSwgMywgMjExLCAxMzQsIDI5LCAKKyAgICAzLCAxOTgsIDI5LCAzLCAyMjcsIDI0MiwgMjksIDMsIDIyOCwgMjM4LCAyOSwgMywgMjI5LCAyMzAsIDI5LCAzLCAyMjksIAorICAgIDEwOCwgMjksIDMsIDIyOSwgMTEyLCAyOSwgMywgMjI4LCA3OSwgMjksIDMsIDIyNywgMTc4LCAyOSwgMywgMjI3LCAxNjksIAorICAgIDI5LCAzLCAyMjcsIDEzMiwgMjksIDMsIDIyNywgMTUyLCAyOSwgMywgMjI3LCAxNjgsIDI5LCAzLCAyMjcsIDE1OSwgMjksIAorICAgIDMsIDIyNywgMTYwLCAyOSwgMywgMjI3LCAxMzgsIDI5LCAzLCAyMjcsIDEyMywgMjksIDMsIDI0MiwgMTg3LCA2MSwgMjksIAorICAgIDMsIDI0MiwgMTg3LCA2OSwgMjksIDMsIDI0MiwgMTg3LCA3NCwgMjksIDMsIDI0MiwgMTg3LCAyNTUsIDgyLCAyOSwgMywgCisgICAgMjQyLCAxODcsIDI0NSwgMjE3LCAyOSwgMywgMjQyLCAxODcsIDc2LCAyOSwgMywgMjQyLCAxODcsIDc4LCAyOSwgMywgMjQyLCAKKyAgICAxODcsIDIxMiwgNjUsIDI5LCAzLCAxNzYsIDI5LCAzLCAyMzMsIDIyMywgMjksIDMsIDIzNCwgOTgsIDI5LCAzLCAyMzUsIAorICAgIDE2LCAyOSwgMywgMjM0LCAxODcsIDI5LCAzLCAyMzQsIDE4OCwgMjksIDMsIDIzNCwgMzQsIDI5LCAzLCAyMzQsIDMzLCAyOSwgCisgICAgMywgMjMzLCAxODgsIDI5LCAzLCAyMzMsIDE4MiwgMjksIDMsIDIzMywgMTg3LCAyOSwgMywgMjMzLCAxODMsIDI5LCAzLCAKKyAgICAyMzMsIDE4NCwgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzEsIDI5LCAzLCAyMzMsIDE3MywgMjksIDMsIDIzMywgCisgICAgMTc2LCAyOSwgMywgMjMzLCAxNzQsIDI5LCAzLCAyMzMsIDE3NSwgMjksIDMsIDIzMywgMTcyLCAyOSwgMywgMjMzLCAxNzAsIAorICAgIDI5LCAzLCAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY5LCAyOSwgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE2OCwgMjksIAorICAgIDMsIDIxMiwgNjUsIDI5LCAzLCAyMTEsIDE5NSwgMjksIDMsIDIxMSwgMjUwLCAyOSwgMywgMjEyLCA2NCwgMjksIDMsIDIxMiwgCisgICAgMTcsIDI5LCAzLCAyMTIsIDIyLCAyOSwgMywgMjExLCAyMjcsIDI5LCAzLCAyMTEsIDIyNiwgMjksIDMsIDIyNSwgMTQyLCAKKyAgICA2MSwgMjksIDMsIDIyNSwgMTQyLCA2OSwgMjksIDMsIDIyNSwgMTQyLCA3NCwgMjksIDMsIDIyNSwgMTQyLCAyNTUsIDgyLCAKKyAgICAyOSwgMywgMjI1LCAxNDIsIDI0NSwgMjE3LCAyOSwgMywgMjI1LCAxNDIsIDc2LCAyOSwgMywgMjI1LCAxNDIsIDc4LCAyOSwgCisgICAgMywgMjEwLCAxMTYsIDI5LCAzLCAyMTAsIDEzLCAyOSwgMywgMjEwLCA0NCwgMjksIDMsIDIxMCwgMTE1LCAyOSwgMywgMjEwLCAKKyAgICA5MiwgMjksIDMsIDIxMCwgOTQsIDI5LCAzLCAyMTAsIDIzLCAyOSwgMywgMjEwLCAwLCAyOSwgMywgMjEwLCA4MiwgMjksIDMsIAorICAgIDIxMCwgNjIsIDI5LCAzLCAyMTAsIDY5LCAyOSwgMywgMjEwLCA4MSwgMjksIDMsIDIxMCwgNzMsIDI5LCAzLCAyMTAsIDc0LCAKKyAgICAyOSwgMywgMjEwLCA2NywgMjksIDMsIDIxMCwgNTMsIDI5LCAzLCAxOTIsIDI5LCAzLCAyMTAsIDIxMiwgMjksIDMsIDIxMSwgCisgICAgOCwgMjksIDMsIDIxMSwgMTAzLCAyOSwgMywgMjExLCA0NCwgMjksIDMsIDIxMSwgNDcsIDI5LCAzLCAyMTAsIDI0NCwgMjksIAorICAgIDMsIDIxMCwgMjM1LCAyOSwgMywgMjQ4LCAyMjksIDI5LCAzLCAyNDYsIDg2LCAyOSwgMywgMjQ4LCAxMSwgMjksIDMsIDI0OCwgCisgICAgMjI4LCAyOSwgMywgMjQ4LCA4NSwgMjksIDMsIDI0OCwgOTgsIDI5LCAzLCAyNDcsIDE1MywgMjksIDMsIDI0NiwgNTUsIDI5LCAKKyAgICAzLCAyNDgsIDE0MywgMjksIDMsIDI0OCwgMTA4LCAyOSwgMywgMjQ4LCAxMjAsIDI5LCAzLCAyNDgsIDE0MiwgMjksIDMsIAorICAgIDI0OCwgMTMwLCAyOSwgMywgMjQ4LCAxMzEsIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgOTksIDI5LCAzLCAyMzUsIAorICAgIDE0NywgMjksIDMsIDIzNSwgNTcsIDI5LCAzLCAyMzUsIDExNCwgMjksIDMsIDIzNSwgMTQ2LCAyOSwgMywgMjM1LCAxMzAsIAorICAgIDI5LCAzLCAyMzUsIDEzMiwgMjksIDMsIDIzNSwgNzQsIDI5LCAzLCAyMzUsIDM3LCAyOSwgMywgMjQzLCAxNDIsIDI5LCAzLCAKKyAgICAyNDIsIDEyMCwgMjksIDMsIDI0MiwgMjIxLCAyOSwgMywgMjQzLCAxMzksIDI5LCAzLCAyNDMsIDYyLCAyOSwgMywgMjQzLCAKKyAgICA2OSwgMjksIDMsIDI0MiwgMTgxLCAyOSwgMywgMjQyLCAxODAsIDI5LCAzLCAyNDIsIDg1LCAyOSwgMywgMjQyLCA4MSwgMjksIAorICAgIDMsIDI0MiwgODQsIDI5LCAzLCAyNDIsIDgyLCAyOSwgMywgMjQyLCA4MywgMjksIDMsIDI0MywgMzYsIDI5LCAzLCAyNDMsIAorICAgIDE2LCAyOSwgMywgMjQzLCAyNiwgMjksIDMsIDI0MywgMzUsIDI5LCAzLCAyNDMsIDMwLCAyOSwgMywgMjQzLCAzMSwgMjksIAorICAgIDMsIDI0MywgMjAsIDI5LCAzLCAyNDMsIDUsIDI5LCAzLCAyMTYsIDIwOSwgMjksIDMsIDIxNiwgMTM3LCAyOSwgMywgMjE2LCAKKyAgICAxNzYsIDI5LCAzLCAyMTYsIDIwOCwgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxOTYsIDI5LCAzLCAyMTYsIDE1NywgCisgICAgMjksIDMsIDIxNiwgMTI5LCAyOSwgMywgMjUwLCAxNjUsIDI5LCAzLCAyNTAsIDc3LCAyOSwgMywgMjUwLCAxMTgsIDI5LCAzLCAKKyAgICAyNTAsIDE2NCwgMjksIDMsIDI1MCwgMTM2LCAyOSwgMywgMjUwLCAxMzksIDI5LCAzLCAyNTAsIDk0LCAyOSwgMywgMjUwLCAKKyAgICA2NiwgMjksIDMsIDIyNSwgMTUwLCAyOSwgMywgMjI1LCAxMTcsIDI5LCAzLCAyMjUsIDEzNiwgMjksIDMsIDIyNSwgMTQ5LCAKKyAgICAyOSwgMywgMjI1LCAxMzgsIDI5LCAzLCAyMjUsIDEzOSwgMjksIDMsIDIyNSwgMTI0LCAyOSwgMywgMjI1LCAxMTMsIDI5LCAKKyAgICAzLCAyMTUsIDE4NCwgMjksIDMsIDIxNSwgMTY0LCAyOSwgMywgMjE1LCAxNjgsIDI5LCAzLCAyMTUsIDE4MywgMjksIDMsIAorICAgIDIxNSwgMTc4LCAyOSwgMywgMjE1LCAxNzksIDI5LCAzLCAyMTUsIDE2NywgMjksIDMsIDIxNSwgMTYyLCAyOSwgMywgMjE1LCAKKyAgICAzOSwgMjksIDMsIDIxNSwgMzEsIDI5LCAzLCAyMTUsIDM1LCAyOSwgMywgMjE1LCAzOCwgMjksIDMsIDIxNSwgMzYsIDI5LCAKKyAgICAzLCAyMTUsIDM3LCAyOSwgMywgMjE1LCAzMywgMjksIDMsIDIxNSwgMzIsIDI5LCAzLCAyNDQsIDIwNCwgMjksIDMsIDI0MywgCisgICAgMjQxLCAyOSwgMywgMjQ0LCAxMjksIDI5LCAzLCAyNDQsIDIwMywgMjksIDMsIDI0NCwgMTU1LCAyOSwgMywgMjQ0LCAxNjIsIAorICAgIDI5LCAzLCAyNDQsIDUxLCAyOSwgMywgMjQzLCAyMjAsIDI5LCAzLCAxOTEsIDI5LCAzLCAyMjQsIDE1MywgMjksIDMsIDIyNSwgCisgICAgMTExLCAyOSwgMywgMjI2LCA5MywgMjksIDMsIDIyNSwgMjE0LCAyOSwgMywgMjI1LCAyMjQsIDI5LCAzLCAyMjUsIDE5LCAKKyAgICAyOSwgMywgMjI0LCAxMTcsIDI5LCAzLCAyMjIsIDEwMSwgMjksIDMsIDIzMCwgMzYsIDI5LCAzLCAyNDMsIDIxNCwgMjksIAorICAgIDM4LCAyNDMsIDYwLCAyMiwgMjUsIDIzMywgMjksIDc5LCAyOSwgMzgsIDI1LCAyMzMsIDI5LCA3OSwgMjksIDM4LCAyNDMsIAorICAgIDYwLCA3OSwgMjksIDIyMSwgMTc1LCA3OSwgMjksIDIxMSwgMjA4LCAyOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyOSwgMjQ5LCAKKyAgICAyMjcsIDI5LCAyMjAsIDE1MiwgMjksIDI0OSwgMjM0LCAyOSwgMjI0LCAyMDIsIDI0OSwgMjM0LCAyOSwgMjI0LCAxNiwgNzksIAorICAgIDI5LCAyMjYsIDE5LCAyMjAsIDEzOSwgMjksIDIxLCAxMTEsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAKKyAgICAxNjEsIDI5LCAyMSwgMTkwLCAyOSwgMjEsIDE5NSwgMjksIDIxLCAxOTksIDI5LCAyMSwgMTk2LCAyOSwgMjEsIDIwMSwgMjksIAorICAgIDU0LCAyMTYsIDI0OCwgMjksIDU0LCAyMTUsIDczLCAyOSwgNTQsIDIxNiwgMTYzLCAyOSwgNTQsIDI0NCwgMjMsIDI5LCA1NCwgCisgICAgMjQ0LCAxMjIsIDI5LCA1NCwgMjE5LCAxMTMsIDI5LCA1NCwgMjIwLCAxMTgsIDI5LCA1NCwgMjQ1LCAxOTIsIDI5LCA1NCwgCisgICAgMjI4LCAyMDAsIDI5LCA1NCwgMjQwLCAyMTcsIDI5LCA1NCwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyOSwgMywgMjIxLCAxNzksIAorICAgIDIzMCwgNDcsIDI5LCAzLCAyMzAsIDQzLCAyOSwgMywgMjMwLCA0NCwgMjksIDMsIDIzMCwgNDUsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjUxLCA5MSwgMjksIDMsIDI1MSwgODgsIDI5LCAzLCAyNTEsIDg5LCAyOSwgMywgMjUxLCA5MCwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyNDMsIDIyMCwgMjksIDMsIDI0MywgMjE2LCAyOSwgMywgMjQzLCAyMTcsIDI5LCAzLCAyNDMsIDIxOCwgMjksIDMsIDIyMSwgCisgICAgMTc5LCAyMjQsIDExNywgMjksIDMsIDIyNCwgMTEzLCAyOSwgMywgMjI0LCAxMTQsIDI5LCAzLCAyMjQsIDExNSwgMjksIAorICAgIDIxNiwgMzIsIDE2NCwgMjEwLCAyNDcsIDI5LCAyMTYsIDMyLCAxNjQsIDI0OCwgNDksIDI5LCAyMTYsIDMyLCAxNjQsIDIyMiwgCisgICAgMjQxLCAyOSwgMjE2LCAzMiwgMTY0LCAyMTksIDI1MywgMjIyLCAyNDEsIDI5LCAyMTYsIDMyLCAxNjQsIDI0NywgMjQzLCAKKyAgICAyOSwgMjE2LCAzMiwgMTY0LCAyMzQsIDE3MCwgMjksIDIxNiwgMzIsIDE2NCwgMjUwLCAxMDIsIDI5LCAyMTYsIDMyLCAxNjQsIAorICAgIDI0MSwgMTg0LCAyOSwgMjE2LCAzMiwgMTY0LCAyNDgsIDQ4LCAyOSwgMjE2LCAzMiwgMTY0LCAyMzMsIDIwMCwgMTY5LCAxLCAKKyAgICA2MSwgMTY5LCAxLCA3NiwgMTY5LCAxLCA3NCwgMTY5LCAxLCA3OCwgMTY5LCAxLCA2OSwgMTY5LCAxLCAyMTQsIDEwNSwgCisgICAgMTY5LCAxLCAyNDMsIDE0MiwgMTY5LCAxLCAxNzYsIDE2OSwgMSwgMjQzLCA2OSwgMTY5LCAxLCAyNDIsIDIyMSwgMTY5LCAxLCAKKyAgICAyNDIsIDE4MSwgMTY5LCAxLCAyNDIsIDEyMCwgMTY5LCAxLCAyNDIsIDg2LCAxNjksIDEsIDE2MiwgMTY5LCAxLCAyNDEsIAorICAgIDI0NSwgMTY5LCAxLCAyNDEsIDE4NywgMTY5LCAxLCAyNDEsIDc1LCAxNjksIDEsIDI0MCwgMjI5LCAxNjksIDEsIDI0MCwgCisgICAgMjA4LCAxNjksIDEsIDIzMywgMTQxLCAxNjksIDEsIDIzMywgNjQsIDE2OSwgMSwgMjMyLCAyNDcsIDE2OSwgMSwgMjMyLCAKKyAgICAxNjIsIDE2OSwgMSwgMjMyLCAxMDMsIDE2OSwgMSwgMjMyLCA3NiwgMTY5LCAxLCAxODYsIDE2OSwgMSwgMjMxLCA5NiwgCisgICAgMTY5LCAxLCAyMzAsIDIzNSwgMTY5LCAxLCAyMzAsIDE2NiwgMTY5LCAxLCAyMzAsIDEwNywgMTY5LCAxLCAxOTgsIDE2OSwgCisgICAgMSwgMjQxLCA5NywgMTY5LCAxLCAyMjksIDIxOCwgMTY5LCAxLCAyMjksIDExMiwgMTY5LCAxLCAyMjgsIDIzOCwgMTY5LCAxLCAKKyAgICAyMjgsIDc5LCAxNjksIDEsIDIyNywgMjQyLCAxNjksIDEsIDIyNywgMTgwLCAxNjksIDEsIDIyNCwgMzIsIDE2OSwgMSwgCisgICAgMjI0LCAxOSwgMTY5LCAxLCAyMjQsIDEyLCAxNjksIDEsIDIyNCwgNCwgMTY5LCAxLCAyMjMsIDI0OSwgMTY5LCAxLCAyMjMsIAorICAgIDI0NywgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCA5MywgMTY5LCAxLCAyMjEsIDE4MywgMTY5LCAxLCAyMTksIDE5MywgCisgICAgMTY5LCAxLCAyMTksIDYwLCAxNjksIDEsIDIxOCwgODQsIDE2OSwgMSwgMjE4LCAzLCAxNjksIDEsIDI0OCwgMjI5LCAxNjksIAorICAgIDEsIDIxNywgMTA2LCAxNjksIDEsIDI0OCwgOTgsIDE2OSwgMSwgMjE3LCAyMywgMTY5LCAxLCAyNDgsIDExLCAxNjksIDEsIAorICAgIDIxNiwgMTE4LCAxNjksIDEsIDI0NywgMTUzLCAxNjksIDEsIDI0NiwgODYsIDE2OSwgMSwgMjQ2LCA1OCwgMTY5LCAxLCAKKyAgICAyNDcsIDE2NCwgMTY5LCAxLCAyMTYsIDYwLCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCA0OCwgMTY5LCAxLCAyMTYsIAorICAgIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTUsIDE4NCwgMTY5LCAxLCAyMTUsIDE3OSwgCisgICAgMTY5LCAxLCAyMTUsIDE2OCwgMTY5LCAxLCAyMTUsIDE2NywgMTY5LCAxLCAyMTUsIDE2NCwgMTY5LCAxLCAyMTUsIDE2MywgCisgICAgMTY5LCAxLCAyMTIsIDY1LCAxNjksIDEsIDIxMiwgMjIsIDE2OSwgMSwgMjExLCAyNTAsIDE2OSwgMSwgMjExLCAyMjcsIAorICAgIDE2OSwgMSwgMjExLCAxOTUsIDE2OSwgMSwgMjExLCAxODMsIDE2OSwgMSwgMTkyLCAxNjksIDEsIDIxMSwgNDcsIDE2OSwgMSwgCisgICAgMjExLCA4LCAxNjksIDEsIDIxMCwgMjQ0LCAxNjksIDEsIDIxMCwgMjEyLCAxNjksIDEsIDIxMCwgMTc3LCAxOCwgMTksIAorICAgIDI0MCwgMTc1LCAxOCwgMTksIDc2LCAxOCwgMTksIDI1NSwgNDYsIDE4LCAxOSwgNzQsIDE4LCAxOSwgMjM2LCA0MCwgMTgsIAorICAgIDE5LCA3OCwgMTgsIDE5LCAyMjYsIDE4NywgMTgsIDE5LCAyMTEsIDExNiwgMjI2LCAxODcsIDE4LCAxOSwgNzMsIDI0NSwgCisgICAgMjE3LCAxOCwgMTksIDczLCA3NCwgMTgsIDE5LCA2MSwgMTgsIDE5LCAyNTUsIDgyLCAxOCwgMTksIDIxMiwgMjIsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTIsIDIyLCAxOCwgMTksIDIxMSwgMjUwLCAxOCwgMTksIDE1OSwgMjExLCAyNTAsIDE4LCAxOSwgMjExLCAKKyAgICAyNDIsIDE4LCAxOSwgMTU5LCAyMTEsIDI0MiwgMTgsIDE5LCAyMTEsIDIyNywgMTgsIDE5LCAxNTksIDIxMSwgMjI3LCAxOCwgCisgICAgMTksIDIxMSwgMjE1LCAxOCwgMTksIDE1OSwgMjExLCAyMTUsIDE4LCAxOSwgMjI5LCAxOTUsIDIxMSwgMjE1LCAxOCwgMTksIAorICAgIDIxMiwgNjUsIDE4LCAxOSwgMTU5LCAyMTIsIDY1LCAxOCwgMTksIDIxMiwgNjQsIDE4LCAxOSwgMTU5LCAyMTIsIDY0LCAxOCwgCisgICAgMTksIDIyOSwgMTk1LCAyMTIsIDY0LCAxOCwgMTksIDI1NCwgMjEwLCAxOCwgMTksIDIxMSwgMTE2LCAyMTIsIDk4LCAxOCwgCisgICAgMTksIDI0MiwgMTg3LCAyMTgsIDEzMSwgMTgsIDE5LCA0MCwgMTQyLCAxOCwgMTksIDQwLCAyNDIsIDE0MywgMTgsIDE5LCAKKyAgICA0MCwgMjUxLCAxODMsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDIxNiwgMTUsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgCisgICAgNDAsIDQ0LCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgNTIsIDE0MiwgMTgsIDE5LCAKKyAgICA0MCwgNTIsIDIxOSwgMjUzLCA2NywgMjE4LCA5MiwgMTgsIDE5LCA0MCwgMjMwLCAyMjksIDI0NywgMTI4LCAxOCwgMTksIAorICAgIDQwLCAyMTksIDI1MywgMjAzLCA5MSwgMTgsIDE5LCA0MCwgMjI1LCAyNSwgMTgsIDE5LCA0MCwgMTI0LCAyMTcsIDg4LCAxOCwgCisgICAgMTksIDI0NSwgMTU4LCAxOCwgMTksIDIzNiwgNiwgMTgsIDE5LCAyMjYsIDIwMCwgMTgsIDE5LCAyNTQsIDEzMSwgMTgsIDE5LCAKKyAgICAyMjUsIDIyNCwgMTgsIDE5LCAyMjYsIDkxLCAxOCwgMTksIDIyNSwgMTExLCAxOCwgMTksIDIyNSwgNzQsIDE4LCAxOSwgCisgICAgMjI1LCAxOSwgMTgsIDE5LCAyMjQsIDI1MiwgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAyNTIsIDE4LCAxOSwgNzMsIDI0MSwgCisgICAgMjI3LCAxOCwgMTksIDczLCAyNDEsIDE4NywgMTgsIDE5LCAxOTEsIDE4LCAxOSwgMjI2LCA5MywgMTgsIDE5LCAyMjQsIAorICAgIDExNSwgMTgsIDE5LCAxNTksIDIyNCwgMTE1LCAxOCwgMTksIDIyNCwgMTEzLCAxOCwgMTksIDE1OSwgMjI0LCAxMTMsIDE4LCAKKyAgICAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgCisgICAgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAxMDksIDE4LCAxOSwgMjI0LCAxMTcsIDE4LCAxOSwgCisgICAgMTU5LCAyMjQsIDExNywgMTgsIDE5LCAyMjQsIDExNiwgMTgsIDE5LCAxNTksIDIyNCwgMTE2LCAxOCwgMTksIDIxMSwgMTE2LCAKKyAgICAyMjQsIDExNiwgMTgsIDE5LCAyMjYsIDEwOSwgMTgsIDE5LCAxNTksIDIyNiwgMTA5LCAxOCwgMTksIDczLCAyNDIsIDY3LCAKKyAgICAxOCwgMTksIDIxNywgMjMsIDE4LCAxOSwgMjE3LCAxMDAsIDE4LCAxOSwgMjE2LCAxMTgsIDE4LCAxOSwgMjE2LCAxMDQsIAorICAgIDE4LCAxOSwgMTEyLCAxOCwgMTksIDIxNiwgMTgsIDE4LCAxOSwgMjExLCAxMTYsIDIxNiwgMTgsIDE4LCAxOSwgNzMsIDI0OCwgCisgICAgODUsIDE4LCAxOSwgNzMsIDI0OCwgMTEsIDE4LCAxOSwgMjE3LCAxMDYsIDE4LCAxOSwgMjE3LCAxMDIsIDE4LCAxOSwgMjE1LCAKKyAgICA3OCwgMTgsIDE5LCAxNTksIDIxNSwgNzgsIDE4LCAxOSwgMjE1LCA2MiwgMTgsIDE5LCAxNTksIDIxNSwgNjIsIDE4LCAxOSwgCisgICAgMjE1LCA2MSwgMTgsIDE5LCAxNTksIDIxNSwgNjEsIDE4LCAxOSwgMTA1LCAxOCwgMTksIDE1OSwgMTA1LCAxOCwgMTksIAorICAgIDIxNSwgNTQsIDE4LCAxOSwgMTU5LCAyMTUsIDU0LCAxOCwgMTksIDIxNSwgODAsIDE4LCAxOSwgMTU5LCAyMTUsIDgwLCAxOCwgCisgICAgMTksIDIxNSwgNzksIDE4LCAxOSwgMTU5LCAyMTUsIDc5LCAxOCwgMTksIDIyOSwgMTk1LCAyMTUsIDc5LCAxOCwgMTksIAorICAgIDIxNywgMTUzLCAxOCwgMTksIDIxNSwgMTUyLCAxOCwgMTksIDIxNSwgMTM2LCAxOCwgMTksIDIxNSwgMTM0LCAxOCwgMTksIAorICAgIDIxNSwgMTU3LCAxOCwgMTksIDIzNCwgMTg4LCAxOCwgMTksIDIzNSwgMTMsIDE4LCAxOSwgMjM0LCA5OCwgMTgsIDE5LCAKKyAgICAyMzQsIDg5LCAxOCwgMTksIDIzNCwgMzQsIDE4LCAxOSwgMjM0LCAxNiwgMTgsIDE5LCAyMTEsIDExNiwgMjM0LCAxNiwgMTgsIAorICAgIDE5LCAxNzYsIDE4LCAxOSwgMjM1LCAxNiwgMTgsIDE5LCAyMzMsIDE4NCwgMTgsIDE5LCAxNTksIDIzMywgMTg0LCAxOCwgCisgICAgMTksIDIzMywgMTgyLCAxOCwgMTksIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIAorICAgIDE4MSwgMTgsIDE5LCAyMzMsIDE4MCwgMTgsIDE5LCAxNTksIDIzMywgMTgwLCAxOCwgMTksIDIzMywgMTc5LCAxOCwgMTksIAorICAgIDE1OSwgMjMzLCAxNzksIDE4LCAxOSwgMjMzLCAxODgsIDE4LCAxOSwgMTU5LCAyMzMsIDE4OCwgMTgsIDE5LCAyMzMsIDE4NywgCisgICAgMTgsIDE5LCAxNTksIDIzMywgMTg3LCAxOCwgMTksIDIyOSwgMTk1LCAyMzMsIDE4NywgMTgsIDE5LCAyMzUsIDI5LCAxOCwgCisgICAgMTksIDIzMywgMTg5LCAxOCwgMTksIDIxOSwgMjksIDIzNCwgMTgyLCAxOCwgMTksIDIxOSwgMjksIDIzNCwgOTAsIDE4LCAKKyAgICAxOSwgMjE5LCAyOSwgMjM0LCAyOSwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDI1NCwgMTgsIDE5LCAyNTAsIDE5OCwgMTgsIAorICAgIDE5LCAyNTEsIDM5LCAxOCwgMTksIDI1MCwgNTksIDE4LCAxOSwgMjUwLCA0OSwgMTgsIDE5LCAyNDksIDI0NiwgMTgsIDE5LCAKKyAgICAyNDksIDE4MiwgMTgsIDE5LCAyMTEsIDExNiwgMjQ5LCAxODIsIDE4LCAxOSwgMjUxLCA0MSwgMTgsIDE5LCAyNTEsIDQwLCAKKyAgICAxOCwgMTksIDI0OSwgODcsIDE4LCAxOSwgMTU5LCAyNDksIDg3LCAxOCwgMTksIDI0OSwgODUsIDE4LCAxOSwgMTU5LCAyNDksIAorICAgIDg1LCAxOCwgMTksIDI0OSwgODQsIDE4LCAxOSwgMTU5LCAyNDksIDg0LCAxOCwgMTksIDI0OSwgODMsIDE4LCAxOSwgMTU5LCAKKyAgICAyNDksIDgzLCAxOCwgMTksIDI0OSwgODIsIDE4LCAxOSwgMTU5LCAyNDksIDgyLCAxOCwgMTksIDI0OSwgODksIDE4LCAxOSwgCisgICAgMTU5LCAyNDksIDg5LCAxOCwgMTksIDI0OSwgODgsIDE4LCAxOSwgMTU5LCAyNDksIDg4LCAxOCwgMTksIDIyOSwgMTk1LCAKKyAgICAyNDksIDg4LCAxOCwgMTksIDI1MSwgNzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIxNiwgMjExLCAxOCwgMTksIDIzMSwgOTYsIAorICAgIDE4LCAxOSwgMjMxLCAyNDEsIDE4LCAxOSwgMjMwLCAyMzUsIDE4LCAxOSwgMjMwLCAyMDYsIDE4LCAxOSwgMjMwLCAxNjYsIAorICAgIDE4LCAxOSwgMjMwLCAxMzcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMCwgMTM3LCAxOCwgMTksIDE4NiwgMTgsIDE5LCAyMzEsIAorICAgIDI0MiwgMTgsIDE5LCAyMzAsIDQ1LCAxOCwgMTksIDE1OSwgMjMwLCA0NSwgMTgsIDE5LCAyMzAsIDQzLCAxOCwgMTksIDE1OSwgCisgICAgMjMwLCA0MywgMTgsIDE5LCAyMzAsIDQyLCAxOCwgMTksIDE1OSwgMjMwLCA0MiwgMTgsIDE5LCAyMzAsIDQxLCAxOCwgMTksIAorICAgIDE1OSwgMjMwLCA0MSwgMTgsIDE5LCAyMzAsIDQwLCAxOCwgMTksIDE1OSwgMjMwLCA0MCwgMTgsIDE5LCAyMzAsIDQ3LCAxOCwgCisgICAgMTksIDE1OSwgMjMwLCA0NywgMTgsIDE5LCAyMzAsIDQ2LCAxOCwgMTksIDE1OSwgMjMwLCA0NiwgMTgsIDE5LCAyMjksIAorICAgIDE5NSwgMjMwLCA0NiwgMTgsIDE5LCAxOTQsIDE4LCAxOSwgMTU5LCAxOTQsIDE4LCAxOSwgMjMwLCAyMzksIDE4LCAxOSwgCisgICAgMjUzLCAyMTMsIDE5NCwgMTgsIDE5LCAyMjEsIDIxMSwgMTk0LCAxOCwgMTksIDIyOSwgMTEyLCAxOCwgMTksIDIyOSwgMjI5LCAKKyAgICAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIDIyOCwgMjEzLCAxOCwgMTksIDIyOCwgNzksIDE4LCAxOSwgMjI4LCA2OSwgMTgsIAorICAgIDE5LCAyMTEsIDExNiwgMjI4LCA2OSwgMTgsIDE5LCAxOTgsIDE4LCAxOSwgMjI5LCAyMzAsIDE4LCAxOSwgMjI3LCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMjcsIDE3NiwgMTgsIDE5LCAyMjcsIDE3OCwgMTgsIDE5LCAxNTksIDIyNywgMTc4LCAxOCwgMTksIAorICAgIDIyNywgMTc3LCAxOCwgMTksIDE1OSwgMjI3LCAxNzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIyNywgMTc3LCAxOCwgMTksIDIzMCwgCisgICAgMzAsIDE4LCAxOSwgNzMsIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAyNDMsIDE4LCAxOSwgMjMzLCA2NCwgMTgsIDE5LCAyMzMsIAorICAgIDEzOSwgMTgsIDE5LCAyMzIsIDI0NywgMTgsIDE5LCAyMzIsIDIzMywgMTgsIDE5LCAyMzIsIDE2MiwgMTgsIDE5LCAyMzIsIAorICAgIDEzMywgMTgsIDE5LCAyMTEsIDExNiwgMjMyLCAxMzMsIDE4LCAxOSwgMjMzLCAxNDEsIDE4LCAxOSwgMjMzLCAxNDAsIDE4LCAKKyAgICAxOSwgMjMyLCA3MywgMTgsIDE5LCAxNTksIDIzMiwgNzMsIDE4LCAxOSwgMjMyLCA3MiwgMTgsIDE5LCAxNTksIDIzMiwgNzIsIAorICAgIDE4LCAxOSwgMjMyLCA3MSwgMTgsIDE5LCAxNTksIDIzMiwgNzEsIDE4LCAxOSwgMjMyLCA3MCwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgNzAsIDE4LCAxOSwgMjMyLCA2OSwgMTgsIDE5LCAxNTksIDIzMiwgNjksIDE4LCAxOSwgMjMyLCA3NSwgMTgsIDE5LCAxNTksIAorICAgIDIzMiwgNzUsIDE4LCAxOSwgMjMyLCA3NCwgMTgsIDE5LCAxNTksIDIzMiwgNzQsIDE4LCAxOSwgMTU2LCAxOCwgMTksIDE1OSwgCisgICAgMTU2LCAxOCwgMTksIDE0NywgMTU2LCAxOCwgMTksIDIyMSwgMTgzLCAxOCwgMTksIDIyMiwgMzEsIDE4LCAxOSwgMjE5LCAKKyAgICAxOTMsIDE4LCAxOSwgMjE5LCAxNzcsIDE4LCAxOSwgMjE5LCA2MCwgMTgsIDE5LCAyMTksIDQyLCAxOCwgMTksIDIxMSwgCisgICAgMTE2LCAyMTksIDQyLCAxOCwgMTksIDIwNiwgMTgsIDE5LCAyMjIsIDMzLCAxOCwgMTksIDIxNywgMjUwLCAxOCwgMTksIAorICAgIDE1OSwgMjE3LCAyNTAsIDE4LCAxOSwgMjE3LCAyNDQsIDE4LCAxOSwgMTU5LCAyMTcsIDI0NCwgMTgsIDE5LCAyMTcsIDI0MywgCisgICAgMTgsIDE5LCAxNTksIDIxNywgMjQzLCAxOCwgMTksIDIxNywgMjM5LCAxOCwgMTksIDE1OSwgMjE3LCAyMzksIDE4LCAxOSwgCisgICAgMjE3LCAyMzgsIDE4LCAxOSwgMTU5LCAyMTcsIDIzOCwgMTgsIDE5LCAyMTcsIDI1NCwgMTgsIDE5LCAxNTksIDIxNywgMjU0LCAKKyAgICAxOCwgMTksIDIxNywgMjUzLCAxOCwgMTksIDE1OSwgMjE3LCAyNTMsIDE4LCAxOSwgMjI5LCAxOTUsIDIxNywgMjUzLCAxOCwgCisgICAgMTksIDIyMiwgOTMsIDE4LCAxOSwgMjUzLCAyMTMsIDIyMiwgOTMsIDE4LCAxOSwgMjE3LCAyNTUsIDE4LCAxOSwgMjUxLCAKKyAgICAyMjYsIDIyMiwgOTMsIDE4LCAxOSwgMjMwLCAxMzIsIDIxOSwgMTEwLCAxOCwgMTksIDIyOSwgMTk1LCAyMTksIDEwMSwgMTgsIAorICAgIDE5LCAyMjksIDE5NSwgMjIyLCA5MSwgMTgsIDE5LCAyMjksIDE5NSwgMjE4LCAyMzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOCwgCisgICAgODcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOSwgMTAwLCAxOCwgMTksIDIyOSwgMTk1LCAyMjEsIDE4NiwgMTgsIDE5LCAyMjAsIAorICAgIDY1LCAxOCwgMTksIDIyMCwgMzQsIDE4LCAxOSwgMjIwLCAyOSwgMTgsIDE5LCAyMjAsIDksIDE4LCAxOSwgMjIwLCAzLCAxOCwgCisgICAgMTksIDIyMCwgMTA0LCAxOCwgMTksIDIyMCwgMTAwLCAxOCwgMTksIDIxOSwgMjA4LCAxOCwgMTksIDE1OSwgMjE5LCAyMDgsIAorICAgIDE4LCAxOSwgMjE5LCAyMDcsIDE4LCAxOSwgMTU5LCAyMTksIDIwNywgMTgsIDE5LCAyMTksIDIwNiwgMTgsIDE5LCAxNTksIAorICAgIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAyMDQsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIxMCwgMTgsIDE5LCAxNTksIDIxOSwgMjEwLCAxOCwgMTksIDIxOSwgCisgICAgMjA5LCAxOCwgMTksIDE1OSwgMjE5LCAyMDksIDE4LCAxOSwgMjIwLCAxMDYsIDE4LCAxOSwgMjExLCA0NywgMTgsIDE5LCAKKyAgICAyMTEsIDEwMSwgMTgsIDE5LCAyMTEsIDgsIDE4LCAxOSwgMjEwLCAyNTUsIDE4LCAxOSwgMjEwLCAyNDQsIDE4LCAxOSwgCisgICAgMjEwLCAyMjksIDE4LCAxOSwgMjExLCAxMTYsIDIxMCwgMjI5LCAxOCwgMTksIDE5MiwgMTgsIDE5LCAyMTEsIDEwMywgMTgsIAorICAgIDE5LCAyMTAsIDE3NCwgMTgsIDE5LCAxNTksIDIxMCwgMTc0LCAxOCwgMTksIDIxMCwgMTczLCAxOCwgMTksIDE1OSwgMjEwLCAKKyAgICAxNzMsIDE4LCAxOSwgMjEwLCAxNzIsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MiwgMTgsIDE5LCAyMTAsIDE3MSwgMTgsIDE5LCAKKyAgICAxNTksIDIxMCwgMTcxLCAxOCwgMTksIDIxMCwgMTcwLCAxOCwgMTksIDE1OSwgMjEwLCAxNzAsIDE4LCAxOSwgMjEwLCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMTAsIDE3NiwgMTgsIDE5LCAyMTAsIDE3NSwgMTgsIDE5LCAxNTksIDIxMCwgMTc1LCAxOCwgMTksIAorICAgIDIyOSwgMTk1LCAyMTAsIDE3NSwgMTgsIDE5LCAyMTEsIDExNywgMTgsIDE5LCAyNTIsIDEyLCAyMTEsIDExNywgMTgsIDE5LCAKKyAgICAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjExLCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMzEsIDE4LCAxOSwgMjIzLCAKKyAgICAyMjYsIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjMzLCA2NCwgMTgsIDE5LCAyMjMsIDE4NiwgMTgsIDE5LCAyMjMsIDM4LCAKKyAgICAxOCwgMTksIDIyMiwgMjQyLCAxOCwgMTksIDIyMiwgMjEzLCAxOCwgMTksIDIyMiwgMTk5LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxNjIsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg3LCAxOCwgMTksIDE1OSwgMjMzLCAxNDEsIDE4LCAxOSwgMjIyLCAKKyAgICAxMTAsIDE4LCAxOSwgMTU5LCAyMjIsIDExMCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIDE4LCAxOSwgMTQ3LCAKKyAgICAxNTMsIDE4LCAxOSwgMjQ0LCAxNjIsIDE4LCAxOSwgMjQ0LCAyMDEsIDE4LCAxOSwgMjQ0LCAxMjksIDE4LCAxOSwgMjQ0LCAKKyAgICAxMTYsIDE4LCAxOSwgMjQ0LCA1MSwgMTgsIDE5LCAyNDQsIDQyLCAxOCwgMTksIDI0NCwgMjA0LCAxOCwgMTksIDI0NCwgCisgICAgMjAzLCAxOCwgMTksIDI0MywgMjE5LCAxOCwgMTksIDE1OSwgMjQzLCAyMTksIDE4LCAxOSwgMjQ1LCAxNCwgMTgsIDE5LCAKKyAgICAyMTYsIDE5NiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE5NiwgMTgsIDE5LCAyMTYsIDE3NiwgMTgsIDE5LCAyMzAsIDI4LCAKKyAgICAyMTYsIDE3NiwgMTgsIDE5LCAyMTYsIDE3MiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDE1NywgCisgICAgMTgsIDE5LCAyMTYsIDE1NCwgMTgsIDE5LCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDEyOCwgCisgICAgMTgsIDE5LCAxNTksIDIxNiwgMTI4LCAxOCwgMTksIDIxNiwgMjExLCAxOCwgMTksIDIxNSwgMTQzLCAxOCwgMTksIDIxNSwgCisgICAgMTQxLCAxOCwgMTksIDIxNSwgMTQwLCAxOCwgMTksIDIxNSwgMTQ1LCAxOCwgMTksIDIxNSwgMTQ2LCAxOCwgMTksIDIxNSwgCisgICAgNTIsIDE4LCAxOSwgMjE1LCA1MSwgMTgsIDE5LCAyMTUsIDUwLCAxOCwgMTksIDIxNSwgNTMsIDE4LCAxOSwgMjI3LCAxOTcsIAorICAgIDI0MSwgMjQ1LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDE4NywgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCAxNjgsIDE4LCAxOSwgCisgICAgMjI3LCAxOTcsIDI0MSwgNzUsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgNjAsIDE4LCAxOSwgMjI3LCAxOTcsIDE2MiwgMTgsIAorICAgIDE5LCAyMjcsIDE5NywgMjQyLCA1MywgMTgsIDE5LCAyMjcsIDE5NywgMjQyLCA2NywgMTgsIDE5LCAyMjcsIDE5NiwgMjQyLCAKKyAgICA2NywgMTgsIDE5LCAyNDEsIDE2MSwgMTgsIDE5LCAyMjQsIDg3LCAxOCwgMTksIDIyNCwgNTYsIDE4LCAxOSwgMjI0LCA1MSwgCisgICAgMTgsIDE5LCAyMjQsIDQ1LCAxOCwgMTksIDIyNCwgNDAsIDE4LCAxOSwgMjI0LCA5MSwgMTgsIDE5LCAyMjQsIDkwLCAxOCwgCisgICAgMTksIDIyNCwgOTksIDE4LCAxOSwgMjE2LCA1NiwgMTgsIDE5LCAyMTYsIDU0LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCisgICAgMjE2LCA1NywgMTgsIDE5LCAxNTksIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjIzLCAzOCwgMTgsIDE5LCAxNTksIDIyMiwgCisgICAgMjEzLCAxOCwgMTksIDE1OSwgMjA1LCAxOCwgMTksIDIyOSwgODAsIDE4LCAxOSwgMjI5LCAzMiwgMTgsIDE5LCAyMjksIDI4LCAKKyAgICAxOCwgMTksIDIyOSwgOSwgMTgsIDE5LCAyMjksIDQsIDE4LCAxOSwgMjI5LCA4MiwgMTgsIDE5LCAyMjksIDgxLCAxOCwgMTksIAorICAgIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAxMDgsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgNjUsIDE4LCAxOSwgMjIxLCAyMTEsIAorICAgIDIyMCwgMzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgOSwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCAxMDQsIDE4LCAxOSwgCisgICAgMjExLCAyMTMsIDIxNiwgMTk2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE3NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjA5LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIxMSwgMTgsIDE5LCAyMzIsIAorICAgIDI1NCwgMTgsIDE5LCAyMzIsIDI1MywgMTgsIDE5LCAyMzIsIDI1MiwgMTgsIDE5LCAyMzIsIDI1MSwgMTgsIDE5LCAyMzMsIAorICAgIDQsIDE4LCAxOSwgMjMzLCAzLCAxOCwgMTksIDIzMywgNSwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxOTYsIDE4LCAxOSwgCisgICAgMjE2LCAyMTAsIDIxNiwgMTc2LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTU0LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIAorICAgIDIxMCwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMjExLCAxOCwgMTksIDI1NCwgMTk4LCAyNTMsIDE2NiwgCisgICAgMTgsIDE5LCAyNTEsIDIyNiwgNzYsIDE4LCAxOSwgMjUxLCAyMjYsIDc0LCAxOCwgMTksIDI1MSwgMjI2LCA3OCwgMTgsIDE5LCAKKyAgICAyNTEsIDIyNiwgNjEsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgMjIsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMSwgMjUwLCAxOCwgCisgICAgMTksIDI1MSwgMjI2LCAyMTEsIDIyNywgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA2NSwgMTgsIDE5LCAyNTEsIDIyNiwgMjI5LCAKKyAgICAxMTIsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOCwgMjM4LCAxOCwgMTksIDI1MSwgMjI2LCAyMjgsIDc5LCAxOCwgMTksIDI1MSwgCisgICAgMjI2LCAxOTgsIDE4LCAxOSwgMjUxLCAyMjYsIDIzNCwgMTg4LCAxOCwgMTksIDI1MSwgMjI2LCAyMzQsIDk4LCAxOCwgMTksIAorICAgIDI1MSwgMjI2LCAyMzQsIDM0LCAxOCwgMTksIDI1MSwgMjI2LCAxNzYsIDE4LCAxOSwgMjIxLCAyMTEsIDI0MSwgMjQ1LCAxOCwgCisgICAgMTksIDIyMSwgMjExLCAyNDEsIDE4NywgMTgsIDE5LCAyMjEsIDIxMSwgMjQxLCA3NSwgMTgsIDE5LCAyMjEsIDIxMSwgMTYyLCAKKyAgICAxOCwgMTksIDczLCAyNDIsIDIyNywgMTgsIDE5LCA3MywgMjQyLCAyMzEsIDE4LCAxOSwgNzMsIDI0MiwgMjQzLCAxOCwgMTksIAorICAgIDczLCAyNDIsIDI0MiwgMTgsIDE5LCA3MywgMjQyLCAyMzIsIDE4LCAxOSwgNzMsIDI0MywgMCwgMTgsIDE5LCA3MywgMjIyLCAKKyAgICAxNDIsIDE4LCAxOSwgNzMsIDIyMiwgMjEzLCAxOCwgMTksIDczLCAyMjMsIDEzMSwgMTgsIDE5LCA3MywgMjIzLCAxMTEsIAorICAgIDE4LCAxOSwgNzMsIDIyMywgMzgsIDE4LCAxOSwgNzMsIDIwNSwgMTgsIDE5LCA3MywgMjExLCAxOTUsIDE4LCAxOSwgNzMsIAorICAgIDIxMSwgMjI3LCAxOCwgMTksIDczLCAyMTIsIDIyLCAxOCwgMTksIDczLCAyMTIsIDE3LCAxOCwgMTksIDczLCAyMTEsIDI1MCwgCisgICAgMTgsIDE5LCA3MywgMjEyLCA2NSwgMTgsIDE5LCA3MywgMjQwLCAyMDEsIDE4LCAxOSwgNzMsIDI0MCwgMjAyLCAxOCwgMTksIAorICAgIDczLCAyNDAsIDIwNSwgMTgsIDE5LCA3MywgMjQwLCAyMDQsIDE4LCAxOSwgNzMsIDI0MCwgMjAzLCAxOCwgMTksIDczLCAKKyAgICAyNDAsIDIwNywgMTgsIDE5LCA3MywgMjE2LCAxMzcsIDE4LCAxOSwgNzMsIDIxNiwgMTU3LCAxOCwgMTksIDczLCAyMTYsIAorICAgIDE5NiwgMTgsIDE5LCA3MywgMjE2LCAxOTUsIDE4LCAxOSwgNzMsIDIxNiwgMTc2LCAxOCwgMTksIDczLCAyMTYsIDIwOSwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxMjQsIDE4LCAxOSwgNzMsIDIxNSwgMTM0LCAxOCwgMTksIDczLCAyMTUsIDE1MiwgMTgsIDE5LCAKKyAgICA3MywgMjE1LCAxNTEsIDE4LCAxOSwgNzMsIDIxNSwgMTM2LCAxOCwgMTksIDczLCAyMTUsIDE1NywgMTgsIDE5LCA3MywgCisgICAgMjI0LCAxNTMsIDE4LCAxOSwgNzMsIDIyNSwgMTksIDE4LCAxOSwgNzMsIDIyNSwgMjI0LCAxOCwgMTksIDczLCAyMjUsIAorICAgIDIxNCwgMTgsIDE5LCA3MywgMjI1LCAxMTEsIDE4LCAxOSwgNzMsIDE5MSwgMTgsIDE5LCA3MywgMjI2LCAxMDksIDE4LCAxOSwgCisgICAgNzMsIDI0MiwgMTIwLCAxOCwgMTksIDczLCAyNDIsIDE4MSwgMTgsIDE5LCA3MywgMjQzLCA2OSwgMTgsIDE5LCA3MywgMjQzLCAKKyAgICA2MiwgMTgsIDE5LCA3MywgMjQyLCAyMjEsIDE4LCAxOSwgNzMsIDI0MywgMTQyLCAxOCwgMTksIDczLCAyMzQsIDEwNiwgMTgsIAorICAgIDE5LCA3MywgMjM0LCAxMTEsIDE4LCAxOSwgNzMsIDIzNCwgMTI1LCAxOCwgMTksIDczLCAyMzQsIDEyNCwgMTgsIDE5LCA3MywgCisgICAgMjM0LCAxMTgsIDE4LCAxOSwgNzMsIDIzNCwgMTM4LCAxOCwgMTksIDczLCAyMzQsIDQ3LCAxOCwgMTksIDczLCAyMzQsIDQ4LCAKKyAgICAxOCwgMTksIDczLCAyMzQsIDUxLCAxOCwgMTksIDczLCAyMzQsIDUwLCAxOCwgMTksIDczLCAyMzQsIDQ5LCAxOCwgMTksIAorICAgIDczLCAyMzQsIDUyLCAxOCwgMTksIDczLCAyMzQsIDUzLCAxOCwgMTksIDczLCAyMjcsIDI0MiwgMTgsIDE5LCA3MywgMjI4LCAKKyAgICA3OSwgMTgsIDE5LCA3MywgMjI5LCAxMTIsIDE4LCAxOSwgNzMsIDIyOSwgMTA4LCAxOCwgMTksIDczLCAyMjgsIDIzOCwgMTgsIAorICAgIDE5LCA3MywgMTk4LCAxOCwgMTksIDczLCAyMzAsIDEwNywgMTgsIDE5LCA3MywgMjMwLCAxNjYsIDE4LCAxOSwgNzMsIDIzMSwgCisgICAgOTYsIDE4LCAxOSwgNzMsIDIzMSwgODUsIDE4LCAxOSwgNzMsIDIzMCwgMjM1LCAxOCwgMTksIDczLCAxODYsIDE4LCAxOSwgCisgICAgNzMsIDIxMCwgMjEyLCAxOCwgMTksIDczLCAyMTAsIDI0NCwgMTgsIDE5LCA3MywgMjExLCA0NywgMTgsIDE5LCA3MywgMjExLCAKKyAgICA0NCwgMTgsIDE5LCA3MywgMjExLCA4LCAxOCwgMTksIDczLCAxOTIsIDE4LCAxOSwgNzMsIDIzNSwgNTcsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDIzNSwgNTcsIDE4LCAxOSwgNzMsIDIzNSwgNzQsIDE4LCAxOSwgNzMsIDIzNSwgMTMyLCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDEzMCwgMTgsIDE5LCA3MywgMjM1LCAxMTQsIDE4LCAxOSwgMjIxLCAyMTEsIDIzNSwgMTE0LCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDE0NywgMTgsIDE5LCA3MywgMjM1LCA4NywgMTgsIDE5LCA3MywgMjM1LCA5MSwgMTgsIDE5LCA3MywgMjM1LCAxMDEsIAorICAgIDE4LCAxOSwgNzMsIDIzNSwgMTAwLCAxOCwgMTksIDczLCAyMzUsIDk5LCAxOCwgMTksIDczLCAyMzUsIDEwMiwgMTgsIDE5LCAKKyAgICA3MywgMjMyLCAxMDMsIDE4LCAxOSwgNzMsIDIzMiwgMTYyLCAxOCwgMTksIDczLCAyMzMsIDY0LCAxOCwgMTksIDczLCAyMzMsIAorICAgIDU2LCAxOCwgMTksIDczLCAyMzIsIDI0NywgMTgsIDE5LCA3MywgMjMzLCAxNDEsIDE4LCAxOSwgNzMsIDI0NywgMTU3LCAxOCwgCisgICAgMTksIDczLCAyNDcsIDE1OCwgMTgsIDE5LCA3MywgMjQ3LCAxNjMsIDE4LCAxOSwgNzMsIDI0NywgMTYyLCAxOCwgMTksIDczLCAKKyAgICAyNDcsIDE1OSwgMTgsIDE5LCA3MywgMjQ3LCAxNjQsIDE4LCAxOSwgNzMsIDIzMiwgMjUwLCAxOCwgMTksIDczLCAyMzIsIAorICAgIDI1MiwgMTgsIDE5LCA3MywgMjMzLCAwLCAxOCwgMTksIDczLCAyMzIsIDI1NSwgMTgsIDE5LCA3MywgMjMyLCAyNTQsIDE4LCAKKyAgICAxOSwgNzMsIDIzMywgNCwgMTgsIDE5LCA3MywgMjE2LCA1MSwgMTgsIDE5LCA3MywgMjE2LCA1MywgMTgsIDE5LCA3MywgCisgICAgMjE2LCA1NiwgMTgsIDE5LCA3MywgMjE2LCA1NSwgMTgsIDE5LCA3MywgMjE2LCA1NCwgMTgsIDE5LCA3MywgMjE2LCA1NywgCisgICAgMTgsIDE5LCA3MywgMjE2LCA0NiwgMTgsIDE5LCA3MywgMjE2LCA0NywgMTgsIDE5LCA3MywgMjE2LCA1OSwgMTgsIDE5LCAKKyAgICA3MywgMjE2LCA1OCwgMTgsIDE5LCA3MywgMjE2LCA0OCwgMTgsIDE5LCA3MywgMjE2LCA2MCwgMTgsIDE5LCA3MywgMjEwLCAKKyAgICAxMywgMTgsIDE5LCA3MywgMjEwLCAyMywgMTgsIDE5LCA3MywgMjEwLCA5NCwgMTgsIDE5LCA3MywgMjEwLCA5MiwgMTgsIAorICAgIDE5LCA3MywgMjEwLCA0NCwgMTgsIDE5LCA3MywgMjEwLCAxMTYsIDE4LCAxOSwgNzMsIDIxMCwgMTU5LCAxOCwgMTksIDczLCAKKyAgICA2NSwgMjEwLCAxNTksIDE4LCAxOSwgNzMsIDI0NiwgMzYsIDE4LCAxOSwgNzMsIDI0NiwgMzcsIDE4LCAxOSwgNzMsIDI0NiwgCisgICAgNDQsIDE4LCAxOSwgNzMsIDI0NiwgNDMsIDE4LCAxOSwgNzMsIDI0NiwgMzksIDE4LCAxOSwgNzMsIDI0NiwgNDYsIDE4LCAKKyAgICAxOSwgNzMsIDIxOCwgODQsIDE4LCAxOSwgNzMsIDIxOSwgNjAsIDE4LCAxOSwgNzMsIDIyMSwgMTgzLCAxOCwgMTksIDczLCAKKyAgICAyMjEsIDE3MiwgMTgsIDE5LCA3MywgMjE5LCAxOTMsIDE4LCAxOSwgNzMsIDIwNiwgMTgsIDE5LCA3MywgMjE5LCAyMjcsIAorICAgIDE4LCAxOSwgNzMsIDIyMCwgOSwgMTgsIDE5LCA3MywgMjIwLCA2NSwgMTgsIDE5LCA3MywgMjIwLCA2MywgMTgsIDE5LCA3MywgCisgICAgMjIwLCAzNCwgMTgsIDE5LCA3MywgMjIwLCAxMDQsIDE4LCAxOSwgNzMsIDIyMCwgMTA2LCAxOCwgMTksIDczLCAyMTUsIAorICAgIDE2NCwgMTgsIDE5LCA3MywgMjE1LCAxNjcsIDE4LCAxOSwgNzMsIDIxNSwgMTc5LCAxOCwgMTksIDczLCAyMTUsIDE3OCwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxNjgsIDE4LCAxOSwgNzMsIDIxNSwgMTg0LCAxOCwgMTksIDczLCAyNTAsIDc3LCAxOCwgMTksIAorICAgIDczLCAyNTAsIDk0LCAxOCwgMTksIDczLCAyNTAsIDEzOSwgMTgsIDE5LCA3MywgMjUwLCAxMzYsIDE4LCAxOSwgNzMsIDI1MCwgCisgICAgMTE4LCAxOCwgMTksIDczLCAyNTAsIDE2NSwgMTgsIDE5LCA3MywgMjE1LCAxMjcsIDE4LCAxOSwgNzMsIDIxNSwgMTI4LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDEzMSwgMTgsIDE5LCA3MywgMjE1LCAxMzAsIDE4LCAxOSwgNzMsIDIxNSwgMTI5LCAxOCwgMTksIAorICAgIDczLCAyMTUsIDEzMiwgMTgsIDE5LCAyNTAsIDExOSwgNTAsIDE4LCAxOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxOCwgMTksIAorICAgIDIyNCwgODMsIDE4LCAxOSwgMjI5LCA3OCwgMTgsIDE5LCAyMjgsIDEwNSwgMTgsIDE5LCAyMjgsIDEwNCwgMTgsIDE5LCAKKyAgICAyMjgsIDEwMywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwNywgMTgsIDE5LCAyMjgsIDEwNiwgMTgsIDE5LCAKKyAgICAyMTEsIDIxMywgMjE2LCAxMjYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAorICAgIDEyNCwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjMsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIyLCAxOCwgMTksIDIxMSwgCisgICAgMjEzLCAyMTYsIDEyOSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjgsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIAorICAgIDIxMSwgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA5OCwgMjI2LCAyMzAsIDIxOSwgMjEsIDc5LCAyMjYsIDIzMCwgMSwgMjUyLCAKKyAgICA1NiwgMjI2LCAyMzAsIDEsIDIzMiwgOTIsIDIyNiwgMjMwLCAxLCAyNDQsIDE1OSwgMjI2LCAyMzAsIDEsIDIyMiwgMTcsIAorICAgIDIyNiwgMjMwLCAxLCAyMjgsIDE5OCwgMjI2LCAyMzAsIDEsIDIxNCwgMjI2LCAyMjYsIDIzMCwgMSwgMjQ4LCAyMDUsIDIyNiwgCisgICAgMjMwLCAxLCAyMTYsIDgxLCAyMjYsIDIzMCwgMSwgMjQ5LCAyMzcsIDIyNiwgMjMwLCAxLCAyNTAsIDE4OCwgMjI2LCAyMzAsIAorICAgIDEsIDIzMCwgOTYsIDIyNiwgMjMwLCAxLCAyNDIsIDE2MywgMjI2LCAyMzAsIDEsIDIyOSwgNjgsIDIyNiwgMjMwLCAxLCAKKyAgICAyMTgsIDEyNCwgMjI2LCAyMzAsIDEsIDIyMiwgMTM3LCAyMjYsIDIzMCwgMSwgMjU0LCAyMDcsIDIyNiwgMjMwLCAxLCAyMjYsIAorICAgIDE5MSwgMjI2LCAyMzAsIDEsIDIxNCwgMTUwLCAyMjYsIDIzMCwgMSwgMjQ1LCAyMzksIDIyNiwgMjMwLCAxLCAyMzUsIDE5NSwgCisgICAgMjI2LCAyMzAsIDEsIDI0NSwgMjQwLCAyMjYsIDIzMCwgMSwgMjI2LCAxNjIsIDIyNiwgMjMwLCAxLCAyMTQsIDIwNiwgMjI2LCAKKyAgICAyMzAsIDEsIDIzNiwgNDYsIDIyNiwgMjMwLCAxLCAyNDUsIDIzNywgMjI2LCAyMzAsIDEsIDIyNSwgMjA1LCAyMjYsIDIzMCwgCisgICAgMjQ0LCAxNTgsIDc5LCAyMjYsIDIzMCwgMjIzLCA1MiwgMjQ0LCAxNTgsIDc5LCAxNzgsIDEsIDI0NCwgMTQ5LCAyNDQsIAorICAgIDE0MSwgMjQ0LCAxNjMsIDI0NSwgMTQsIDE3OCwgMSwgMjE0LCAxMDUsIDE3OCwgMSwgMjE0LCAxMzUsIDIxNCwgMTUxLCA2OSwgCisgICAgMTc4LCAxLCAyMTAsIDIxNCwgMTc4LCAxLCAyMTEsIDExNywgMTc4LCAxLCAyMTIsIDk4LCAxNzgsIDEsIDIxNiwgMTMxLCAKKyAgICAyMTYsIDEzMCwgMjE2LCAxNTIsIDE3OCwgMSwgMjQ1LCA2NywgMTc4LCAxLCAyNTQsIDEwMSwgNjEsIDE3OCwgMSwgMjI2LCAKKyAgICAxNDcsIDc4LCAxNzgsIDEsIDI1NSwgMjYsIDYxLCAxNzgsIDEsIDI1NCwgMjM2LCAxNzgsIDEsIDIzMiwgMTM5LCA3OCwgCisgICAgMTc4LCAxLCAyMTksIDI0NiwgNzgsIDE3OCwgMSwgNzgsIDE3OCwgMSwgMjI2LCAyMzgsIDE3OCwgMSwgMjI2LCAyMDAsIAorICAgIDE3OCwgMSwgMjIzLCAxNjcsIDIyMywgMTgwLCAyMjMsIDk3LCAxNTMsIDE3OCwgMSwgMjM0LCAxOTksIDE3OCwgMSwgMjUwLCAKKyAgICAxODUsIDE3OCwgMSwgMjM0LCAyMDAsIDIzNSwgMjksIDE3OCwgMSwgMjQzLCAyMDksIDE3OCwgMSwgMjQ1LCAxNDYsIDE3OCwgCisgICAgMSwgMjQzLCA2NSwgMjQyLCA3MywgMjQzLCAyMDksIDE3OCwgMSwgMjQzLCAxMDMsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgCisgICAgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgNDUsIDI0MiwgNjcsIDE3OCwgMSwgMjQyLCA0OSwgMjQyLCA2NywgMTc4LCAxLCAKKyAgICAyMzIsIDE0MSwgMjQyLCA2NywgMTc4LCAxLCAyMTksIDI0OSwgMjQyLCA2NywgMTc4LCAxLCAyMjksIDE5MCwgMjI3LCAxNjEsIAorICAgIDIyOSwgMTkxLCAyMzAsIDMwLCAxNzgsIDEsIDIxOSwgMjQ3LCAyMzAsIDMwLCAxNzgsIDEsIDI0NiwgMTIzLCAxNzgsIDEsIAorICAgIDIzNSwgMTc1LCAyMzUsIDE3OSwgMjM1LCAxNjgsIDc0LCAxNzgsIDEsIDc2LCAxNzgsIDEsIDIzNSwgMTIzLCAyMzUsIDE1MCwgCisgICAgMTc4LCAxLCAyNDMsIDUwLCAxNzgsIDEsIDIzMiwgMTQyLCAyNTQsIDI1MiwgMTc4LCAxLCAyMTksIDI1MSwgNjEsIDE3OCwgCisgICAgMSwgMjM1LCAxNjAsIDI0NSwgMTIxLCAxNzgsIDEsIDIyNSwgMTY3LCAyMjUsIDE4OSwgMjI2LCAxMDksIDE3OCwgMSwgMjU0LCAKKyAgICAxNzIsIDI0NSwgMTE5LCAxNzgsIDEsIDIxOSwgMjYsIDIyMiwgOTMsIDE3OCwgMSwgMjE5LCAxODEsIDIzMiwgMTM4LCAyMjIsIAorICAgIDkzLCAxNzgsIDEsIDIxOSwgMjQ1LCAyMjIsIDkzLCAxNzgsIDEsIDI1MSwgNzQsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgCisgICAgMjE2LCA2NCwgMjE2LCA3NCwgMjE1LCA0MSwgMjE3LCAxNTMsIDE3OCwgMSwgMjE5LCAyNDQsIDIxNywgMTUzLCAxNzgsIDEsIAorICAgIDI0OSwgNjgsIDE3OCwgMSwgMjUyLCAzOSwgMjUyLCA0MiwgMjUxLCAyMzIsIDI1MywgMTY2LCAxNzgsIDEsIDIxOSwgMjUwLCAKKyAgICAyNTMsIDE2NiwgMTc4LCAxLCAyNDYsIDEyMiwgMTc4LCAxLCAyMjYsIDE3NSwgMTc4LCAxLCAyNDUsIDIwNCwgMjQ1LCAyMDYsIAorICAgIDc2LCAxNzgsIDEsIDIzMSwgMTgzLCAyMzEsIDE5MSwgMTk0LCAxNzgsIDEsIDIzMiwgMTQwLCAxOTQsIDE3OCwgMSwgMjE5LCAKKyAgICAyNDgsIDE5NCwgMTc4LCAxLCAyMzMsIDc5LCAyMzMsIDEyMCwgMjMyLCAxNDksIDE1NiwgMTc4LCAxLCAyNDYsIDEyNCwgCisgICAgMTc4LCAxLCAyMzUsIDIzNywgMTc4LCAxLCAyMzUsIDIzOCwgMTc4LCAxLCAyNDgsIDIxOCwgMjQ4LCAyMjMsIDI0OSwgNjgsIAorICAgIDE3OCwgMSwgMjI2LCAxNDIsIDI0NSwgNjYsIDc4LCAxNzgsIDEsIDI0NSwgMjM1LCAxNzgsIDEsIDIzNSwgMTk0LCAxNzgsIAorICAgIDEsIDI0OSwgODYsIDE3OCwgMSwgMjUxLCAyNSwgMTc4LCAxLCAyNTAsIDE5NywgMTc4LCAxLCAyMTgsIDE2MywgMTc4LCAxLCAKKyAgICAyMzIsIDEzNywgMTc4LCAxLCAyMTksIDI0MywgMTc4LCAxLCAyNDAsIDExNywgMTc4LCAxLCAyMjQsIDk5LCAxNzgsIDEsIAorICAgIDIxMSwgMTc4LCAxNzgsIDIxOSwgMTU3LCAyMjQsIDE0MywgMTc4LCAyMzAsIDkwLCAyMjQsIDE0MywgMTc4LCAyNDksIDEzOSwgCisgICAgMjI0LCAxNDMsIDE3OCwgMjU0LCAxNCwgODcsIDE3OCwgMjE1LCA4MiwgODcsIDE3OCwgMjUyLCA1NCwgODcsIDIxNywgODQsIAorICAgIDEsIDYxLCAyMTcsIDg0LCAxLCA3NCwgMjE3LCA4NCwgMSwgNjksIDIxNywgODQsIDEsIDE3NiwgMjE3LCA4NCwgMSwgMjQzLCAKKyAgICAxNDIsIDIxNywgODQsIDEsIDIyOSwgODIsIDIxNywgODQsIDEsIDIxNywgMTA2LCAyMTcsIDg0LCAxLCAyNDgsIDIyOSwgCisgICAgMjE3LCA4NCwgMSwgMTk4LCAyMTcsIDg0LCAxLCAxOTEsIDIxNywgODQsIDEsIDI1MiwgMTk5LCAyMTcsIDg0LCAxLCAxODYsIAorICAgIDIxNywgODQsIDEsIDE5MiwgMjE3LCA4NCwgMSwgMjMzLCAxNDEsIDIxNywgODQsIDEsIDIxMiwgNjUsIDIxNywgODQsIDEsIAorICAgIDIwNiwgMjE3LCA4NCwgMSwgMTYyLCAyMTcsIDg0LCAyNSwgNSwgNzQsIDIxNywgODQsIDI1LCA1LCA2OSwgMjE3LCA4NCwgNSwgCisgICAgMjEzLCAxNTIsIDI0MiwgMTQsIDEsIDYxLCAyNDIsIDE0LCAxLCA3NCwgMjQyLCAxNCwgMSwgNjksIDI0MiwgMTQsIDEsIAorICAgIDE3NiwgMjQyLCAxNCwgMSwgMjQzLCAxNDIsIDI0MiwgMTQsIDEsIDIyOSwgODIsIDI0MiwgMTQsIDEsIDIxNywgMTA2LCAKKyAgICAyNDIsIDE0LCAxLCAyNDgsIDIyOSwgMjQyLCAxNCwgMSwgMTk4LCAyNDIsIDE0LCAxLCAxOTEsIDI0MiwgMTQsIDEsIDI1MiwgCisgICAgMTk5LCAyNDIsIDE0LCAxLCAxODYsIDI0MiwgMTQsIDEsIDE5MiwgMjQyLCAxNCwgMSwgMjA1LCAyNDIsIDE0LCAxLCAyMzMsIAorICAgIDE0MSwgMjQyLCAxNCwgMSwgMjEyLCA2NSwgMjQyLCAxNCwgMSwgMjA2LCAyNDIsIDE0LCAxLCAxNjIsIDI0MiwgMTQsIDI1LCAKKyAgICA1LCA3NCwgMjQyLCAxNCwgMjUsIDUsIDY5LCAyNDIsIDE0LCA1LCAyMjYsIDUzLCAyMjUsIDEyOSwgMjE5LCAxNTcsIDIyNCwgCisgICAgMTQzLCAyMjUsIDEyOSwgNTIsIDIyNCwgMTQzLCAyNTEsIDEyOCwgMSwgNjEsIDI1MSwgMTI4LCAxLCA3NCwgMjUxLCAxMjgsIAorICAgIDEsIDY5LCAyNTEsIDEyOCwgMSwgMTc2LCAyNTEsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MSwgMTI4LCAxLCAyMjksIDgyLCAKKyAgICAyNTEsIDEyOCwgMSwgMjE3LCAxMDYsIDI1MSwgMTI4LCAxLCAyNDgsIDIyOSwgMjUxLCAxMjgsIDEsIDE5OCwgMjUxLCAxMjgsIAorICAgIDEsIDE5MSwgMjUxLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTEsIDEyOCwgMSwgMTg2LCAyNTEsIDEyOCwgMSwgMTkyLCAyNTEsIAorICAgIDEyOCwgMSwgMjA1LCAyNTEsIDEyOCwgMSwgMjMzLCAxNDEsIDI1MSwgMTI4LCAxLCAyMTIsIDY1LCAyNTEsIDEyOCwgMSwgCisgICAgMjA2LCAyNTEsIDEyOCwgMSwgMTYyLCAyNTEsIDEyOCwgMjUsIDUsIDc0LCAyNTEsIDEyOCwgMjUsIDUsIDY5LCAyMTcsIDgzLCAKKyAgICAxLCA2MSwgMjE3LCA4MywgMSwgNzQsIDIxNywgODMsIDEsIDY5LCAyMTcsIDgzLCAxLCAxNzYsIDIxNywgODMsIDEsIDI0MywgCisgICAgMTQyLCAyMTcsIDgzLCAxLCAyMjksIDgyLCAyMTcsIDgzLCAxLCAyMTcsIDEwNiwgMjE3LCA4MywgMSwgMjQ4LCAyMjksIAorICAgIDIxNywgODMsIDEsIDE5OCwgMjE3LCA4MywgMSwgMTkxLCAyMTcsIDgzLCAxLCAyNTIsIDE5OSwgMjE3LCA4MywgMSwgMTg2LCAKKyAgICAyMTcsIDgzLCAxLCAxOTIsIDIxNywgODMsIDEsIDIzMywgMTQxLCAyMTcsIDgzLCAxLCAyMTIsIDY1LCAyMTcsIDgzLCAxLCAKKyAgICAyMDYsIDIxNywgODMsIDI1LCA1LCA3NCwgMjE3LCA4MywgMjUsIDUsIDY5LCA3MCwgMSwgMTc2LCA3MCwgMSwgMjM0LCAxMzgsIAorICAgIDcwLCAxLCAyMzQsIDM0LCA3MCwgMSwgMjM0LCAxMTEsIDcwLCAxLCAyMjksIDksIDcwLCAxLCAyNTEsIDQxLCA3MCwgMSwgCisgICAgMjUwLCAxNjUsIDcwLCAxLCAyNDksIDI0NiwgNzAsIDEsIDI1MCwgOTQsIDcwLCAxLCAyMjcsIDEzOCwgNzAsIDEsIDI0OCwgCisgICAgMjI5LCA3MCwgMSwgMjE1LCAxNDUsIDcwLCAxLCAyNDcsIDE1MywgNzAsIDEsIDIxNSwgMTQwLCA3MCwgMSwgMjI4LCA4NSwgCisgICAgNzAsIDEsIDIxNywgMTA2LCA3MCwgMSwgMjE2LCAyMDksIDcwLCAxLCAxMTIsIDcwLCAxLCAyMTYsIDE1NywgNzAsIDEsIAorICAgIDIyOCwgNzksIDcwLCAxLCAyNTIsIDE5OSwgNzAsIDEsIDIyNSwgMTUwLCA3MCwgMSwgMjI1LCAxOSwgNzAsIDEsIDIyNSwgCisgICAgMTI0LCA3MCwgMSwgMjMwLCAxNjYsIDcwLCAxLCAyMTAsIDI0NCwgNzAsIDEsIDIyMiwgMjEzLCA3MCwgMSwgMjMyLCAxNjIsIAorICAgIDcwLCAxLCAyMTMsIDEzOCwgNzAsIDEsIDIyMCwgMTA0LCA3MCwgMSwgMjE4LCAxODYsIDcwLCAxLCAyMDYsIDcwLCAxLCAKKyAgICAxNjIsIDcwLCAxLCAyMzMsIDE0MSwgNzAsIDEsIDIyNCwgOTEsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNzcsIDcwLCAyMzUsIAorICAgIDI1MCwgMjUsIDIyNCwgOTAsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTYsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTEsIAorICAgIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgMzMsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNSwgNzAsIDIzNSwgMjUwLCAyNSwgCisgICAgMjIzLCAyNDksIDcwLCAyMzUsIDI1MCwgMjUsIDIyMywgMjQ4LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjIsIDEwMiwgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgMjIyLCA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCA2NywgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCAKKyAgICA1NywgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA3MiwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA4MywgNzAsIDIzNSwgMjUwLCAKKyAgICAyNSwgMjI0LCA0MSwgMjE1LCA0OSwgMTExLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDQxLCAyMTUsIDQ5LCAxMDUsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDIyNCwgNzMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NCwgNTMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NSwgCisgICAgODIsIDcwLCAyNSwgNSwgMjU1LCA4MiwgNzAsIDI1LCA1LCA3NCwgNzAsIDI1LCA1LCAyMzYsIDQwLCA3MCwgMjUsIDUsIAorICAgIDIxMSwgMTE3LCA3MCwgMjUsIDUsIDIxMCwgMTY5LCA3MCwgMjUsIDUsIDY5LCA3MCwgMjUsIDUsIDIxNCwgMTE4LCA3MCwgCisgICAgMjUsIDUsIDIxNCwgMjI5LCA3MCwgMjUsIDUsIDIyNiwgMjM4LCA3MCwgMjUsIDUsIDE5MiwgNzAsIDI1LCA1LCAyMzYsIDY3LCAKKyAgICA3MCwgMjUsIDUsIDc2LCA3MCwgMjUsIDUsIDI1NCwgMjUyLCA3MCwgMjUsIDUsIDI1NCwgMjEwLCA3MCwgMjUsIDUsIDIyNiwgCisgICAgMTg3LCA3MCwgMjUsIDUsIDI1MywgMjAwLCA3MCwgNSwgMjI4LCAyMTEsIDcwLCA1LCAyMjMsIDEyOSwgNzAsIDUsIDIxMCwgCisgICAgMTgwLCA3MCwgNSwgMjMwLCA1NywgNzAsIDUsIDIxNSwgMjE0LCA3MCwgNSwgMjUyLCAxNTEsIDcwLCA1LCAyMjIsIDIwOCwgCisgICAgNzAsIDUsIDIxNiwgNDEsIDcwLCA1LCAyMzQsIDI0NywgNzAsIDUsIDI1NCwgMjEyLCA3MCwgNSwgMjIxLCAyNDYsIDIyMSwgCisgICAgMjQwLCA3MCwgNSwgMjEzLCAxNDksIDcwLCA1LCAyNDksIDI0MCwgNzAsIDUsIDI1MiwgMTI1LCA3MCwgNSwgMjM0LCAxMzEsIAorICAgIDcwLCA1LCAyNTIsIDE0NSwgNzAsIDUsIDI1MSwgMTcsIDIyNSwgNzUsIDIzMywgMTkzLCA3MCwgNSwgMjMzLCAzNiwgMjE2LCAKKyAgICAxOCwgNzAsIDUsIDI1MiwgMjgsIDcwLCA1LCAyMjUsIDEyNiwgMjMwLCAxMDQsIDcwLCA1LCAyMzQsIDE1LCA3MCwgMjQ5LCAKKyAgICAxMDYsIDE2LCAyMjMsIDMxLCA3MCwgNSwgMjUzLCAxODIsIDcwLCA1LCAyNTMsIDIwMywgNzAsIDIxLCAyMTAsIDg2LCA3MCwgCisgICAgMjEsIDExMSwgNzAsIDIxLCAxMDUsIDcwLCAyMSwgMTU4LCA3MCwgMjEsIDE2MSwgNzAsIDIxLCAxOTAsIDcwLCAyMSwgMTk1LCAKKyAgICA3MCwgMjEsIDE5OSwgNzAsIDIxLCAxOTYsIDcwLCAyMSwgMjAxLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMTksIAorICAgIDQ1LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMzAsIDc2LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjUsIAorICAgIDc0LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTIsIDU3LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTEsIAorICAgIDExMSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTgsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgCisgICAgMjEyLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxMCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAKKyAgICAyMTYsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjE0LCA4MywgMjUxLCAyNDQsIDgzLCAyNDUsIDE3MSwgODMsIAorICAgIDI0OSwgMjI3LCA4MywgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MywgMjQ5LCAyMzQsIDgzLCAyNDQsIDE5LCAyNDcsIDEyNiwgCisgICAgODMsIDIxNiwgNDAsIDIxOSwgNTQsIDI0MCwgMTc1LCA4MywgMjE5LCAxOTIsIDMsIDI1MSwgMTgwLCAyMzEsIDE1OSwgODMsIAorICAgIDIzMSwgMTg4LCAyNDksIDIyNywgODMsIDIzMSwgMTg4LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgzLCAyMjgsIDE5NiwgODMsIAorICAgIDI0NCwgNSwgNDUsIDIyMSwgMTU5LCAxMTEsIDgzLCAyNDQsIDUsIDQ1LCAyMjEsIDE1OSwgMTA1LCA4MywgMjQ0LCA1LCA0NSwgCisgICAgMjIxLCAxNTksIDE1OCwgODMsIDI1LCAyMjAsIDEzOSwgODMsIDIxLCAyMTAsIDg2LCA4MywgMjEsIDExMSwgODMsIDIxLCAKKyAgICAxMDUsIDgzLCAyMSwgMTU4LCA4MywgMjEsIDE2MSwgODMsIDIxLCAxOTAsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDE5OSwgODMsIAorICAgIDIxLCAxOTYsIDgzLCAyMSwgMjAxLCA4MywgMSwgNjEsIDgzLCAxLCA3NiwgODMsIDEsIDc0LCA4MywgMSwgNzgsIDgzLCAxLCAKKyAgICA2OSwgODMsIDEsIDIyNiwgMjM4LCA4MywgMSwgMjE0LCAyMTQsIDgzLCAxLCAyNDUsIDIxNywgODMsIDEsIDE5OCwgODMsIDEsIAorICAgIDI1NCwgMTIzLCA4MywgMSwgMjUyLCAxOTksIDgzLCAxLCAxOTEsIDgzLCAxLCAyMjQsIDkxLCA4MywgMSwgMjQzLCAxNDIsIAorICAgIDgzLCAxLCAxODYsIDgzLCAxLCAyMzMsIDE0MSwgODMsIDEsIDIwNiwgODMsIDEsIDIyMCwgMTA0LCA4MywgMSwgMjE3LCAKKyAgICAxMDYsIDgzLCAxLCAyNDgsIDIyOSwgODMsIDEsIDI1MCwgMTY1LCA4MywgMSwgMjM1LCAxNDcsIDgzLCAxLCAxOTIsIDgzLCAKKyAgICAxLCAyMDUsIDgzLCAxLCAyMTIsIDY1LCA4MywgMSwgMjQ0LCAyMDQsIDgzLCAxLCAxNzYsIDgzLCAxLCAyMzQsIDEzOCwgODMsIAorICAgIDEsIDIxNSwgMTg0LCA4MywgMSwgMjEwLCAxMTYsIDgzLCAxLCAyNDIsIDUzLCA4MywgMSwgMjEwLCAxNiwgODMsIDEsIDIzMywgCisgICAgNCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExOCwgODMsIDEsIDIxNiwgNDAsIDIwMCwgMjUsIDUwLCA4MywgMSwgCisgICAgMjE2LCA0MCwgNzYsIDgzLCAxLCAyMTYsIDQwLCA3NCwgODMsIDEsIDIxNiwgNDAsIDc4LCA4MywgMSwgMjE2LCA0MCwgNjksIAorICAgIDgzLCAxLCAyMTYsIDQwLCAyMjYsIDIzOCwgODMsIDEsIDIxNiwgNDAsIDIxNCwgMjE0LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxMjMsIDgzLCAxLCAyMTYsIDQwLCAyNTIsIDE5OSwgODMsIDEsIDIxNiwgNDAsIDE5MSwgODMsIDEsIDIxNiwgNDAsIDIyNCwgCisgICAgOTEsIDgzLCAxLCAyMTYsIDQwLCAyNDMsIDE0MiwgODMsIDEsIDIxNiwgNDAsIDE4NiwgODMsIDEsIDIxNiwgNDAsIDIxNywgCisgICAgMTA2LCA4MywgMSwgMjE2LCA0MCwgMjQ4LCAyMjksIDgzLCAxLCAyMTYsIDQwLCAyNTAsIDE2NSwgODMsIDEsIDIxNiwgNDAsIAorICAgIDIzNSwgMTQ3LCA4MywgMSwgMjE2LCA0MCwgMjE1LCAxODQsIDgzLCAxLCAyMTYsIDQwLCAxOTIsIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyMTIsIDY1LCA4MywgMSwgMjE2LCA0MCwgMTc2LCA4MywgMSwgMjE2LCA0MCwgMjQzLCAxMzksIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyNDIsIDUzLCA4MywgMSwgMjE2LCA0MCwgMjM1LCAxMTMsIDgzLCAxLCAyMTYsIDQwLCAyMjgsIDIzNiwgODMsIDEsIDIxNiwgCisgICAgNDAsIDI0NiwgNDYsIDgzLCAxLCAyMTksIDE5MiwgNzYsIDgzLCAxLCAyMTksIDE5MiwgNzQsIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjM1LCAxNTgsIDgzLCAxLCAyMTksIDE5MiwgMjE0LCAyMTQsIDgzLCAxLCAyMTksIDE5MiwgNjksIDgzLCAxLCAyMTksIAorICAgIDE5MiwgMjU0LCAxMjMsIDgzLCAxLCAyMTksIDE5MiwgMTc2LCA4MywgMSwgMjE5LCAxOTIsIDI0MywgMTQyLCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDE2MiwgODMsIDEsIDIxOSwgMTkyLCAxOTEsIDgzLCAxLCAyMTksIDE5MiwgMjIwLCAxMDQsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMjE3LCAxMDYsIDgzLCAxLCAyMTksIDE5MiwgMjQ4LCAyMjksIDgzLCAxLCAyMTksIDE5MiwgMjM1LCAxNDcsIAorICAgIDgzLCAxLCAyMTksIDE5MiwgMjQ0LCAyMDQsIDgzLCAxLCAyMTksIDE5MiwgMjQzLCAxMzksIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjQyLCA1MywgODMsIDEsIDIxOSwgMTkyLCAyMTUsIDE4NCwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDExNiwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAyMjMsIDE4NywgODMsIDEsIDIxOSwgMTkyLCAyNTAsIDE2NSwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDgyLCAKKyAgICA4MywgMSwgMjMxLCAxODgsIDc0LCA4MywgMSwgMjMxLCAxODgsIDE3NiwgODMsIDEsIDIzMSwgMTg4LCAyMDUsIDgzLCAxLCAKKyAgICAyMzEsIDE4OCwgMjQ0LCAyMDQsIDgzLCAxLCAyMzEsIDE4OCwgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMjU0LCA4NCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTMsIDE0OCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNDgsIDE5NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIzNSwgMjAwLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUyLCAxNjMsIDgzLCAxLCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDEzNCwgMjUyLCAxNjMsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDYxLCA4MywgMSwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCA3NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMTc2LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMjksIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMTUsIDE1NywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE1LCAxNDUsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI0OCwgMTQzLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMjgsIDExNSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjI5LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAxOTEsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIyNSwgMTUwLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMTgsIDIyNSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1NCwgMjE4LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDIxNiwgNDAsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0MywgMCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIyOSwgODIsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjMxLCAKKyAgICAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjM1LCAxMjAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAyMTUsIDE1NywgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMTI3LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIAorICAgIDMzLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE4LCAyMjUsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyNDksIDgwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAxNjMsIDY5LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAxNjMsIDE5MiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI1MiwgMjYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjE5LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjMzLCA0LCAxOCwgMTksIDIyNiwgMTEzLCAxOCwgMTksIDI1MywgMTc1LCAxOCwgMTksIAorICAgIDI1NSwgMzcsIDE4LCAxOSwgMjEyLCAyNSwgMTgsIDE5LCAyMjQsIDIyNCwgMTgsIDE5LCAyMjUsIDIzMywgMTgsIDE5LCAKKyAgICAyMjQsIDEwOCwgMTgsIDE5LCAyMTcsIDMyLCAxOCwgMTksIDIzNCwgMTk1LCAxOCwgMTksIDIzMywgMTg1LCAxOCwgMTksIAorICAgIDIzMSwgMTM3LCAxOCwgMTksIDIyOCwgNDIsIDE4LCAxOSwgMjI5LCAxODYsIDE4LCAxOSwgMjMzLCA3NCwgMTgsIDE5LCAKKyAgICAyMTksIDI0LCAxOCwgMTksIDIyMSwgMjEzLCAxOCwgMTksIDIxOSwgMjM0LCAxOCwgMTksIDIyMCwgNjgsIDE4LCAxOSwgCisgICAgMjE5LCAyMDMsIDE4LCAxOSwgMjEwLCAyMjAsIDE4LCAxOSwgMjExLCA1MiwgMTgsIDE5LCAyMjMsIDEzNywgMTgsIDE5LCAKKyAgICAyMjcsIDE3NSwgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzUsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgMjI2LCAyMjAsIAorICAgIDIyNywgMTc0LCAxOCwgMTksIDIyNywgMTczLCAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3MywgMTgsIDE5LCAyMjcsIDE3MiwgCisgICAgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzIsIDE4LCAxOSwgMjIyLCAxMDcsIDE4LCAxOSwgMjIyLCAxMDYsIDE4LCAxOSwgCisgICAgMjIyLCAxMDUsIDE4LCAxOSwgMjIyLCAxMDQsIDE4LCAxOSwgMjIyLCAxMDMsIDE4LCAxOSwgMjIyLCAxMTEsIDE4LCAxOSwgCisgICAgMjI2LCAyMjAsIDIyNiwgMTA5LCAxOCwgMTksIDIyNiwgMjIwLCAyMTcsIDE1MywgMTgsIDE5LCAyMjYsIDIyMCwgMjM1LCAKKyAgICAyOSwgMTgsIDE5LCAyMjYsIDIyMCwgMjUxLCA3NCwgMTgsIDE5LCAyMjYsIDIyMCwgMTk0LCAxOCwgMTksIDIyNiwgMjIwLCAKKyAgICAyMzAsIDMwLCAxOCwgMTksIDIyNiwgMjIwLCAyMjIsIDkzLCAxOCwgMTksIDIyNiwgMjIwLCAyMjAsIDEwNiwgMTgsIDE5LCAKKyAgICAyNDUsIDIyNywgMjEyLCA5OCwgMTgsIDE5LCAyMTIsIDcsIDIxMiwgOTgsIDE4LCAxOSwgNDAsIDQsIDIyMiwgMjM2LCAxOCwgCisgICAgMTksIDQwLCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDE4LCAxOSwgMjIzLCAyMjYsIDIyMiwgMTA4LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxMzMsIDE4LCAxOSwgMTU5LCAyMzMsIDE0MCwgMTgsIDE5LCAyMTYsIDEyNywgMTgsIDE5LCAyMTYsIDEyOSwgMTgsIDE5LCAKKyAgICAyMTUsIDEzNywgMTgsIDE5LCAyMTUsIDEzOSwgMTgsIDE5LCAyMTUsIDE0NCwgMTgsIDE5LCAyMTYsIDUwLCAxOCwgMTksIAorICAgIDIxNiwgNTIsIDE4LCAxOSwgMjIxLCAyMTEsIDIxOSwgMjA4LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDMsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDI0MSwgNjAsIDE4LCAxOSwgNzMsIDI0MiwgODAsIDE4LCAxOSwgNzMsIDI0OCwgNjAsIDI0MywgNjIsIDE4LCAKKyAgICAxOSwgNzMsIDI0MywgMTM5LCAxOCwgMTksIDczLCAyNDIsIDg1LCAxOCwgMTksIDIyMSwgMjExLCAyMzUsIDM5LCAxOCwgMTksIAorICAgIDczLCAyMzUsIDM3LCAxOCwgMTksIDI1MiwgNzYsIDI0OCwgNjAsIDE1NiwgMTgsIDE5LCAyNTIsIDc2LCAyNDgsIDYwLCAKKyAgICAxNTMsIDE4LCAxOSwgNzMsIDI0OCwgNTUsIDIyMiwgOTMsIDIzMiwgMjI5LCAyMTMsIDEyMiwgMjMzLCAxNiwgMjMyLCAyMjksIAorICAgIDEsIDE3NiwgMjMyLCAyMjksIDEsIDIzNCwgMTM4LCAyMzIsIDIyOSwgMSwgMjQzLCAxNDIsIDIzMiwgMjI5LCAxLCAyNDMsIAorICAgIDAsIDIzMiwgMjI5LCAxLCAyMjksIDgyLCAyMzIsIDIyOSwgMSwgMjUxLCA0MSwgMjMyLCAyMjksIDEsIDI1MCwgMTY1LCAKKyAgICAyMzIsIDIyOSwgMSwgMjM1LCAxNDcsIDIzMiwgMjI5LCAxLCAyMzUsIDEyMCwgMjMyLCAyMjksIDEsIDIxMSwgNzEsIDIzMiwgCisgICAgMjI5LCAxLCAyMTcsIDEwNiwgMjMyLCAyMjksIDEsIDIxNiwgMjA5LCAyMzIsIDIyOSwgMSwgMjQ4LCAyMjksIDIzMiwgMjI5LCAKKyAgICAxLCAyNDgsIDMzLCAyMzIsIDIyOSwgMSwgMTk4LCAyMzIsIDIyOSwgMSwgMTkxLCAyMzIsIDIyOSwgMSwgMjI1LCAxNTAsIAorICAgIDIzMiwgMjI5LCAxLCAyNTIsIDE5OSwgMjMyLCAyMjksIDEsIDI1MiwgMjYsIDIzMiwgMjI5LCAxLCAxODYsIDIzMiwgMjI5LCAKKyAgICAxLCAxOTIsIDIzMiwgMjI5LCAxLCAyMDUsIDIzMiwgMjI5LCAxLCAyMzMsIDE0MSwgMjMyLCAyMjksIDEsIDIxMiwgNjUsIAorICAgIDIzMiwgMjI5LCAxLCAyMjAsIDEwNCwgMjMyLCAyMjksIDEsIDIxOCwgMjI1LCAyMzIsIDIyOSwgMSwgMjA2LCAyMzIsIDIyOSwgCisgICAgMSwgMTYyLCAyMzIsIDIyOSwgMjUsIDUsIDYxLCAyMzIsIDIyOSwgMjUsIDUsIDc0LCAyMzIsIDIyOSwgMjUsIDUsIDY5LCAKKyAgICAyMzIsIDIyOSwgMjUsIDUsIDI0NSwgMjE3LCAyMzIsIDIyOSwgMjUsIDUsIDI1NCwgMjEwLCAyMzIsIDIyOSwgMjUsIDUsIAorICAgIDIyNiwgMTg3LCAyMzIsIDIyOSwgMjUsIDUsIDI1MywgMjAwLCAyMzIsIDIyOSwgMjUsIDUsIDc2LCAyMzIsIDIyOSwgMjUsIAorICAgIDUsIDc4LCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMTkyLCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMjA1LCAyMzIsIDIyOSwgCisgICAgMjE4LCA3NCwgMSwgMjEyLCA2NSwgMjMyLCAyMjksIDQsIDEsIDE3NiwgMjMyLCAyMjksIDQsIDEsIDIyOSwgODIsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAyNTQsIDgzLCAyMzIsIDIyOSwgNCwgMSwgMjE3LCAxMDYsIDIzMiwgMjI5LCA0LCAxLCAxOTgsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAxOTEsIDIzMiwgMjI5LCA0LCAxLCAxODYsIDIzMiwgMjI5LCA0LCAxLCAyMDUsIDIzMiwgMjI5LCA0LCAxLCAKKyAgICAyMzMsIDE0MSwgMjMyLCAyMjksIDUsIDIzMCwgOTQsIDIzMiwgMjI5LCA1LCAyMzQsIDE3NywgMjMyLCAyMjksIDUsIDIyMiwgCisgICAgMzQsIDIzMiwgMjI5LCA1LCAyMzIsIDEzMywgMjMyLCAyMjksIDI0NSwgMzksIDc5LCAyMzIsIDIyOSwgMjI0LCAxNiwgNzksIAorICAgIDIzMiwgMjI5LCAyMSwgMjEwLCA4NiwgMjMyLCAyMjksIDIxLCAxMTEsIDIzMiwgMjI5LCAyMSwgMTA1LCAyMzIsIDIyOSwgCisgICAgMjEsIDE1OCwgMjMyLCAyMjksIDIxLCAxNjEsIDIzMiwgMjI5LCAyMSwgMTkwLCAyMzIsIDIyOSwgMjEsIDE5NSwgMjMyLCAKKyAgICAyMjksIDIxLCAxOTksIDIzMiwgMjI5LCAyMSwgMTk2LCAyMzIsIDIyOSwgMjEsIDIwMSwgMzksIDIzMywgNjUsIDEsIDE3NiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA2NSwgMSwgMjI5LCA4MiwgMzksIDIzMywgNjUsIDEsIDIxNSwgCisgICAgMTg0LCAzOSwgMjMzLCA2NSwgMSwgMjA2LCAzOSwgMjMzLCA2NSwgMSwgMTkyLCAzOSwgMjMzLCA2NSwgMSwgMjE3LCAxMDYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDIwOSwgMzksIDIzMywgNjUsIDEsIDIzMywgMTQxLCAzOSwgMjMzLCA2NSwgMSwgMTkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjI1LCAxNTAsIDM5LCAyMzMsIDY1LCAxLCAxODYsIDM5LCAyMzMsIDY1LCAxLCAyNDQsIDIwNCwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDY1LCAxLCAxNjIsIDM5LCAyMzMsIDY1LCAxLCAyMjQsIDkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjM0LCAxMzgsIDM5LCAyMzMsIDY1LCAxLCAyMTUsIDE3NiwgMzksIDIzMywgNjUsIDEsIDE5OCwgCisgICAgMzksIDIzMywgNjUsIDEsIDYxLCAzOSwgMjMzLCA2NSwgMSwgNzQsIDM5LCAyMzMsIDY1LCAxLCAyNDUsIDIxNywgMzksIAorICAgIDIzMywgNjUsIDEsIDI0NSwgMjA1LCAzOSwgMjMzLCA2NSwgMSwgNjksIDM5LCAyMzMsIDY1LCAxLCAyMjYsIDE4NywgMzksIAorICAgIDIzMywgNjUsIDEsIDc4LCAzOSwgMjMzLCA2NSwgMSwgMjE0LCAyMTQsIDM5LCAyMzMsIDY1LCAxLCA3NiwgMzksIDIzMywgCisgICAgNjUsIDEsIDI1MywgMTk4LCAzOSwgMjMzLCA2NSwgMSwgMjU0LCAyMTAsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI5LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgMjE2LCAyOCwgMzksIDIzMywgNjUsIDEsIDIxNiwgMjcsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyNCwgOTEsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAyMjQsIDkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIAorICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgCisgICAgMjE1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTIsIDE2NiwgMzksIAorICAgIDE3MywgMSwgMTIxLCAyMTUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAorICAgIDE5MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDksIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAxOTgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTcsIDEwNiwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDIxNiwgMjA5LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkxLCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxODYsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE1MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NiwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMjA0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjUsIDIzMywgMTQxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ0LCAyMDQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKKyAgICAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxNDEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyOSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI1MiwgMTk5LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAyMjksIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIAorICAgIDE5OSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyNSwgMjE4LCA4MywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxOCwgODMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAKKyAgICAyMTksIDI0MSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA4MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgNjksIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCAKKyAgICA1LCA3NiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNTIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDc4LCAxNjYsIDM5LCAKKyAgICAxNzMsIDI1LCA1LCAyMjcsIDQsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKKyAgICAyNTMsIDE3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAzNywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTEzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDEsIDE2NiwgMzksIDE3MywgCisgICAgMjUsIDUsIDIxNCwgMjEwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzUsIDE1OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjE0LCAKKyAgICAxMDUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIyOSwgODQsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzMCwgMzAsIDE2NiwgMzksIAorICAgIDE3MywgMSwgNDAsIDE5NCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjM1LCAyOSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjQ5LCAKKyAgICA2OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjUzLCAxNjYsIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE2MywgMTY2LCAzOSwgCisgICAgMTczLCAxMzgsIDIzMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDIxLCAyMTAsIDg2LCAxNjYsIDM5LCAxNzMsIDIxLCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjEsIDEwNSwgMTY2LCAzOSwgMTczLCAyMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDIxLCAxNjEsIDE2NiwgCisgICAgMzksIDE3MywgMjEsIDE5MCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTksIDE2NiwgMzksIAorICAgIDE3MywgMjEsIDE5NiwgMTY2LCAzOSwgMTczLCAyMSwgMjAxLCAxNjYsIDM5LCAxNzMsIDg5LCAyMSwgMTExLCAxNjYsIDM5LCAKKyAgICAxNzMsIDUsIDIzMywgMTI2LCAxNjYsIDM5LCAxNzMsIDUsIDIzMywgMTI1LCA3MCwgMTYsIDIyNSwgMjQwLCA3MCwgMTYsIAorICAgIDIzMCwgNzcsIDIzNCwgMzEsIDcwLCAxNiwgMjI1LCA3NSwgMjM0LCAzMSwgNzAsIDE2LCAyNTIsIDU4LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI1MSwgMTEyLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE5LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjEzLCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDIyNCwgMjExLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE3LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgCisgICAgMjE1LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTgxLCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc3LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI0OCwgMTc2LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc5LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc4LCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDI0OCwgMTc1LCAyMzQsIDMxLCA3MCwgMTYsIDIxNSwgODcsIDcwLCAxNiwgMjMwLCA3NywgMjIyLCAKKyAgICAyMDcsIDcwLCAxNiwgMjI1LCA3NSwgMjIyLCAyMDcsIDcwLCAxNiwgMjUyLCA1OCwgMjIyLCAyMDcsIDcwLCAxNiwgMjUxLCAKKyAgICAxMTIsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE5LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxMywgMjIyLCAyMDcsIAorICAgIDcwLCAxNiwgMjI0LCAyMTEsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE3LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxNSwgCisgICAgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxODEsIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc3LCAyMjIsIDIwNywgNzAsIDE2LCAKKyAgICAyNDgsIDE3NiwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzksIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc4LCAyMjIsIAorICAgIDIwNywgNzAsIDE2LCAyNDgsIDE3NSwgMjIyLCAyMDcsIDI1MSwgMTI5LCAxLCAxNzYsIDI1MSwgMTI5LCAxLCAyNDMsIDE0MiwgCisgICAgMjUxLCAxMjksIDEsIDIyOSwgODIsIDI1MSwgMTI5LCAxLCAyMjksIDI3LCAyNTEsIDEyOSwgMSwgMTkxLCAyNTEsIDEyOSwgCisgICAgMSwgMjUyLCAxOTksIDI1MSwgMTI5LCAxLCAxODYsIDI1MSwgMTI5LCAxLCAyMzAsIDExMCwgMjUxLCAxMjksIDEsIDIxNywgCisgICAgMTA2LCAyNTEsIDEyOSwgMSwgMjQ4LCAyMjksIDI1MSwgMTI5LCAxLCAxOTgsIDI1MSwgMTI5LCAxLCAyMjgsIDQxLCAyNTEsIAorICAgIDEyOSwgMSwgMjUxLCA0MSwgMjUxLCAxMjksIDEsIDIzNSwgMTQ3LCAyNTEsIDEyOSwgMSwgMjI3LCAxNjksIDI1MSwgMTI5LCAKKyAgICAxLCAyMjcsIDE2MiwgMjUxLCAxMjksIDEsIDE5MiwgMjUxLCAxMjksIDEsIDIwNSwgMjUxLCAxMjksIDEsIDIzMywgMTQxLCAKKyAgICAyNTEsIDEyOSwgMSwgMjE0LCAyNywgMjUxLCAxMjksIDEsIDIwNiwgMjUxLCAxMjksIDEsIDYxLCAyNTEsIDEyOSwgMSwgCisgICAgMTYyLCAyNTEsIDEyOSwgMjUsIDUsIDc0LCAyNTEsIDEyOSwgMjUsIDUsIDY5LCAyNTEsIDEyOSwgMjUsIDUsIDc2LCAyNTEsIAorICAgIDEyOSwgMjUsIDUsIDc4LCAyNTEsIDEyOSwgMjUsIDUsIDI1NCwgMjUyLCAyNTEsIDEyOSwgMjI2LCA2NCwgMjUxLCAxMjksIAorICAgIDI0NSwgMTUxLCA2NCwgMjIxLCAxNzQsIDM5LCA4OSwgMSwgMTI1LCAxNzYsIDM5LCA4OSwgMSwgMTI1LCAyMzQsIDEzOCwgCisgICAgMzksIDg5LCAxLCAxMjUsIDIzMywgMTc3LCAzOSwgODksIDEsIDEyMSwgMTc2LCAzOSwgODksIDEsIDEyMSwgMjMzLCAxNzcsIAorICAgIDM5LCA4OSwgMSwgMTIxLCAyMzQsIDEzOCwgMzksIDg5LCAxLCAyMjksIDgyLCAzOSwgODksIDEsIDEyNSwgMjUxLCA0MSwgCisgICAgMzksIDg5LCAxLCAxMjUsIDI1MCwgMTY1LCAzOSwgODksIDEsIDEyMSwgMjUxLCA0MSwgMzksIDg5LCAxLCAxMjEsIDIwNiwgCisgICAgMzksIDg5LCAxLCAxMjEsIDI1MCwgMTY1LCAzOSwgODksIDEsIDIyNywgMTY5LCAzOSwgODksIDEsIDIyMywgMTQzLCAzOSwgCisgICAgODksIDEsIDEyNSwgMjIzLCAxNDEsIDM5LCA4OSwgMSwgMjQ4LCAyMjksIDM5LCA4OSwgMSwgMTIxLCAyMjMsIDE0MSwgMzksIAorICAgIDg5LCAxLCAyMjMsIDE1MiwgMzksIDg5LCAxLCAxMjUsIDIxNywgMTA2LCAzOSwgODksIDEsIDEyNSwgMjE2LCAyMDksIDM5LCAKKyAgICA4OSwgMSwgMTIxLCAyMTcsIDEwNiwgMzksIDg5LCAxLCAxMjEsIDIxNiwgMjA5LCAzOSwgODksIDEsIDE5OCwgMzksIDg5LCAKKyAgICAxLCAyNTIsIDE5OSwgMzksIDg5LCAxLCAxMjUsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDIyNSwgMTUwLCAzOSwgODksIDEsIAorICAgIDEyNSwgMjQ0LCAyMDQsIDM5LCA4OSwgMSwgMTIxLCAxOTEsIDM5LCA4OSwgMSwgMTIxLCAyNDQsIDIwNCwgMzksIDg5LCAxLCAKKyAgICAxMjEsIDIyNSwgMTUwLCAzOSwgODksIDEsIDE4NiwgMzksIDg5LCAxLCAxMjEsIDE5MiwgMzksIDg5LCAxLCAxMjUsIDE5MiwgCisgICAgMzksIDg5LCAxLCAyMDUsIDM5LCA4OSwgMSwgMjIyLCAxMzksIDM5LCA4OSwgMSwgMjMzLCAxNDEsIDM5LCA4OSwgMSwgMjMyLCAKKyAgICA5OCwgMzksIDg5LCAxLCAyMTIsIDY1LCAzOSwgODksIDEsIDEyNSwgMjIwLCAxMDQsIDM5LCA4OSwgMSwgMTI1LCAyMTgsIAorICAgIDIyNSwgMzksIDg5LCAxLCAxMjUsIDIwNiwgMzksIDg5LCAxLCAxMjUsIDE2MiwgMzksIDg5LCAxLCAyMzIsIDE5MCwgMzksIAorICAgIDg5LCAxLCA2MSwgMzksIDg5LCAxLCAxMjEsIDE2MiwgMzksIDg5LCAxLCA3NCwgMzksIDg5LCAxLCAyMzYsIDQwLCAzOSwgCisgICAgODksIDEsIDY5LCAzOSwgODksIDEsIDIxNCwgMTE4LCAzOSwgODksIDEsIDI0NSwgMjE3LCAzOSwgODksIDEsIDIyNiwgMTg3LCAKKyAgICAzOSwgODksIDEsIDIzMywgMTI2LCAzOSwgODksIDEsIDI0MiwgMTM5LCAyMDYsIDM5LCA4OSwgMTE3LCA1LCAxNDcsIDIwNSwgCisgICAgMzksIDg5LCAxMTcsIDUsIDE0NywgMjMzLCAxNDEsIDM5LCA4OSwgMTE3LCA1LCAyMzMsIDE0MiwgMjE3LCA1OSwgMjMzLCAKKyAgICAxMTUsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIzNCwgMjM3LCAyMzMsIDExNSwgMzksIDg5LCAxMTcsIDUsIDQwLCAyMjksIAorICAgIDgyLCAzOSwgODksIDExNywgNSwgMTIxLCAxOTEsIDM5LCA4OSwgMTE3LCA1LCAxMjUsIDIyMywgMTQyLCAxNzcsIDEyMSwgCisgICAgMTkxLCAzOSwgODksIDExNywgNSwgMTg2LCAzOSwgODksIDExNywgNSwgMjUyLCAxOTksIDM5LCA4OSwgMTE3LCA1LCAyMDYsIAorICAgIDM5LCA4OSwgNSwgMjIyLCAxMiwgMzksIDg5LCAyNSwgNSwgNjEsIDM5LCA4OSwgMjUsIDUsIDIzMSwgMjA5LCAyMjEsIDIyOCwgCisgICAgMzksIDg5LCAyNSwgNSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgMjE3LCA2NSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgCisgICAgNzQsIDM5LCA4OSwgMjUsIDUsIDIzNiwgNDAsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMjE0LCAzOSwgODksIDI1LCA1LCAyMTQsIAorICAgIDExNywgMzksIDg5LCAyNSwgNSwgNjksIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE4LCAzOSwgODksIDI1LCA1LCA3OCwgMzksIAorICAgIDg5LCAyNSwgNSwgMjI3LCA1LCA1MSwgMzksIDg5LCAyNSwgNSwgMjI2LCAxMTMsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgCisgICAgODksIDI1LCA1LCAyNTQsIDI1MiwgMzksIDg5LCAyNSwgNSwgMjI2LCAxODcsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAzOSwgODksIDI1LCA1LCA4OSwgMjU0LCAyMTAsIDM5LCA4OSwgMjUsIDUsIDIyNywgNSwgNDgsIDM5LCA4OSwgNSwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgODksIDUsIDIxNiwgMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgMzksIDg5LCA1LCAyMzQsIAorICAgIDEwMywgMjE2LCAyOCwgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNywgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNiwgCisgICAgMzksIDg5LCA1LCAyMjMsIDE5MSwgMjQyLCA1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjIxLCAyNTUsIDM5LCA4OSwgNSwgCisgICAgMjM0LCAxMDIsIDIzNCwgMjIxLCAzOSwgODksIDM4LCAyNDksIDEyMywgMjQ3LCAxMjgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIAorICAgIDIxMCwgODYsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDExMSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTA1LCAzOSwgODksIDI0MSwgCisgICAgNTMsIDIxLCAxNTgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE2MSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTkwLCAzOSwgODksIAorICAgIDI0MSwgNTMsIDIxLCAxOTUsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5OSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTk2LCAzOSwgCisgICAgODksIDI0MSwgNTMsIDIxLCAyMDEsIDM5LCA4OSwgODksIDIxLCAyMTAsIDg2LCAzOSwgODksIDg5LCAyMSwgMTExLCAzOSwgCisgICAgODksIDg5LCAyMSwgMTA1LCAzOSwgODksIDg5LCAyMSwgMTU4LCAzOSwgODksIDg5LCAyMSwgMTYxLCAzOSwgODksIDg5LCAKKyAgICAyMSwgMTkwLCAzOSwgODksIDg5LCAyMSwgMTk1LCAzOSwgODksIDg5LCAyMSwgMTk5LCAzOSwgODksIDg5LCAyMSwgMTk2LCAKKyAgICAzOSwgODksIDg5LCAyMSwgMjAxLCAzOSwgODksIDUsIDIxMSwgMjQ5LCAzOSwgODksIDUsIDIxMSwgMjQ4LCAzOSwgODksIDUsIAorICAgIDIyMSwgMjE3LCAzOSwgODksIDUsIDIzNCwgMTY2LCAzOSwgODksIDUsIDI0MCwgMjM5LCAzOSwgODksIDUsIDI0NywgMTQyLCAKKyAgICAzOSwgODksIDUsIDIyMywgNTIsIDIyMiwgMTg5LCAyMjMsIDE1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjExLCA3MiwgMzksIAorICAgIDg5LCA1LCAyMzUsIDEyLCAzOSwgODksIDUsIDIzNSwgMTEsIDM5LCA4OSwgNSwgMjIxLCAyMjQsIDM5LCA4OSwgNSwgMjIxLCAKKyAgICAyMjMsIDM5LCA4OSwgNSwgMjQyLCAxNiwgMzksIDg5LCA1LCAyNTEsIDM4LCAxMDIsIDUsIDIxNCwgMjAwLCAyMjMsIDMzLCAKKyAgICAxMDIsIDUsIDIxNCwgMjAwLCAyNTEsIDksIDEwMiwgNSwgMjUwLCAxOTQsIDEwMiwgNSwgMjE4LCAxNiwgMTAyLCA1LCAyNTEsIAorICAgIDI0MSwgMTAyLCAxLCAyNTQsIDE5MywgMTAyLCAxLCAyNTQsIDE5NCwgMjE3LCAxNCwgMTAyLCAxLCAyMzYsIDM2LCAxMDIsIAorICAgIDEsIDIzNiwgMzcsIDIxNywgMTQsIDEwMiwgMSwgMjE0LCAyMDMsIDEwMiwgMSwgMjE0LCAyMDQsIDIxNywgMTQsIDEwMiwgMSwgCisgICAgMjIzLCAxOTEsIDIyMywgODIsIDEwMiwgMSwgMjIzLCAxOTEsIDIyMywgODMsIDIxNywgMTQsIDEwMiwgMSwgMjMzLCAxNDIsIAorICAgIDIzMywgMzAsIDEwMiwgMSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMSwgMjQ1LCAxODcsIDEwMiwgMSwgCisgICAgMjU0LCAyMDgsIDEwMiwgMSwgMjI2LCAyMTYsIDEwMiwgMSwgMjI2LCAyMTcsIDIxNywgMTQsIDEwMiwgMSwgMTc2LCAxMDIsIAorICAgIDEsIDIzNSwgMTksIDIzMSwgMjEyLCAxMDIsIDEsIDI0MywgMTQyLCAxMDIsIDEsIDI0MywgMTQzLCAyNDIsIDE2OCwgMTAyLCAKKyAgICAxLCAyMjksIDgyLCAxMDIsIDEsIDI1MSwgNDEsIDEwMiwgMSwgMjUxLCA0MiwgMjMzLCAxMjksIDEwMiwgMSwgMjM1LCAxNDcsIAorICAgIDEwMiwgMSwgMjM1LCAxNDgsIDIzNSwgMTI0LCAxMDIsIDEsIDIyNywgMTY5LCAxMDIsIDEsIDIxNywgMTA3LCAyMzMsIDgyLCAKKyAgICAxMDIsIDEsIDIxNywgMTA3LCAyMzAsIDcyLCAyMzEsIDIxMiwgMTAyLCAxLCAyNDgsIDIzMCwgMjMwLCA3MiwgMjU0LCAxNTMsIAorICAgIDEwMiwgMSwgMjQ4LCAyMzAsIDIzMCwgNzIsIDIzMSwgMjEyLCAxMDIsIDEsIDIyOSwgMjM0LCAyMjMsIDE1NSwgMTAyLCAxLCAKKyAgICAyMTcsIDEwNiwgMTAyLCAxLCAyMTcsIDEwNywgMjE3LCAzNiwgMTAyLCAxLCAyNDgsIDIyOSwgMTAyLCAxLCAyNDgsIDIzMCwgCisgICAgMjMxLCAyMzAsIDEwMiwgMSwgMTk4LCAxMDIsIDEsIDE5MSwgMTAyLCAxLCAyMjYsIDk0LCAyMzQsIDIzMiwgMTAyLCAxLCAKKyAgICAyNTIsIDE5OSwgMTAyLCAxLCAyNTIsIDIwMCwgMjM0LCAxNzgsIDEwMiwgMSwgMTg2LCAxMDIsIDEsIDE5MiwgMTAyLCAxLCAKKyAgICAyMDUsIDEwMiwgMSwgMjMzLCAxNDEsIDEwMiwgMSwgMjEyLCA2NSwgMTAyLCAxLCAyMjIsIDM2LCAyMjIsIDIyLCAxMDIsIDEsIAorICAgIDIyMiwgMzYsIDIyMSwgMjM1LCAxMDIsIDEsIDIwNiwgMTAyLCAxLCAxNjIsIDEwMiwgNSwgMjIzLCA3MywgMTAyLCAyNSwgNSwgCisgICAgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE0LCAxOTksIDEwMiwgMjUsIDUsIDIxNCwgMjAwLCAyMjEsIDIzMSwgMTAyLCAyNSwgCisgICAgNSwgMjE4LCA0OCwgMTAyLCAyNSwgNSwgMjE4LCA0OSwgMjM2LCAyOCwgMTAyLCAyNSwgNSwgMjIzLCAxOTEsIDIyMywgODIsIAorICAgIDEwMiwgMjUsIDUsIDIyMywgMTkxLCAyMjMsIDgzLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMzMsIDE0MiwgMjMzLCAzMCwgCisgICAgMTAyLCAyNSwgNSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDEwMiwgMjUsIDUsIAorICAgIDIxNywgNjcsIDIyMywgODIsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIyMywgCisgICAgODMsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIyNSwgMTg3LCAxMDIsIDI1LCA1LCAyMjUsIDE4OCwgMjE3LCAxNCwgMTAyLCAKKyAgICAyNTUsIDMsIDI1NSwgMiwgMTAyLCAxLCAyMzUsIDEsIDIyMSwgMjMwLCAxMDIsIDEsIDIzNCwgMTA4LCAyMjEsIDIzMCwgCisgICAgMTAyLCAxLCAyMTUsIDM0LCAyMjEsIDIzMCwgMTAyLCAxLCAyNDUsIDIxMSwgMjIxLCAyMzAsIDEwMiwgMSwgMjE0LCAwLCAKKyAgICAyMjEsIDIzMCwgMTAyLCAxLCAyMTAsIDEwNywgMjIxLCAyMzAsIDEwMiwgMSwgMjUzLCAyMTcsIDIyMSwgMjMwLCAxMDIsIAorICAgIDIxLCAyMTAsIDg2LCAxMDIsIDIxLCAxMTEsIDEwMiwgMjEsIDEwNSwgMTAyLCAyMSwgMTU4LCAxMDIsIDIxLCAxNjEsIDEwMiwgCisgICAgMjEsIDE5MCwgMTAyLCAyMSwgMTk1LCAxMDIsIDIxLCAxOTksIDEwMiwgMjEsIDE5NiwgMTAyLCAyMSwgMjAxLCAxMDIsIAorICAgIDIyNiwgMzMsIDEwMiwgMjI2LCA1OSwgMTAyLCAyMTEsIDIzOCwgMTAyLCAyNTAsIDI0NCwgMjI2LCA1MiwgMTAyLCAyNTAsIAorICAgIDI0NCwgMjE5LCAxNzQsIDEwMiwgMjUwLCAyNDQsIDIyNiwgNiwgMTAyLCAyMjYsIDU4LCAxMDIsIDI4LCAxNiwgMjQ3LCAKKyAgICAxMzQsIDEwMiwgMjgsIDE2LCAyNDgsIDU5LCAxMDIsIDI4LCAxNiwgMjQ2LCA3MiwgMTAyLCAyOCwgMTYsIDI0OCwgMTg0LCAKKyAgICAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIDIxOCwgMTYsIDEwMiwgMjgsIDE2LCAyNDcsIDIxMywgMTAyLCAyOCwgMTYsIDI0OCwgCisgICAgMjIyLCAxMDIsIDI4LCAxNiwgMjQ4LCA0MSwgMTAyLCAyOCwgMTYsIDI0OCwgMjA2LCAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIAorICAgIDI0MywgNjQsIDEwMiwgMjgsIDE2LCAzOCwgMjE3LCAxMCwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0OSwgMTAyLCAyOCwgCisgICAgMTYsIDM4LCAyMzQsIDE3MywgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyOCwgCisgICAgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NCwgMiwgMjM1LCAxMjgsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzYsIDIsIAorICAgIDIzNSwgMTI4LCAxMDIsIDI4LCAxNiwgMzgsIDI1MiwgNDUsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNzIsIDEwMiwgMjgsIAorICAgIDE2LCAyMjIsIDI1MiwgMjA0LCAyNDYsIDgyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNTIsIDIwNCwgMjQ4LCAyMjAsIDEwMiwgCisgICAgMjgsIDE2LCAyMjIsIDI1MiwgMjUwLCA4LCAyMTUsIDExMiwgMTAyLCAyOCwgMTYsIDIyMiwgMjUyLCAyNTAsIDgsIDIxNywgCisgICAgNzQsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNiwgNDcsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNCwgCisgICAgMTQyLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAyMjUsIDQxLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAKKyAgICAyMjUsIDI5LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjUsIDY0LCAyMDcsIDUsIDIyNiwgMzAsIDIwNywgNSwgCisgICAgMjI2LCA0MywgMjA3LCA1LCAyMjYsIDM5LCAyMDcsIDEsIDYxLCAyMDcsIDEsIDc0LCAyMDcsIDEsIDY5LCAyMDcsIDEsIAorICAgIDI1NCwgMjUyLCAyMDcsIDEsIDc4LCAyMDcsIDEsIDc2LCAyMDcsIDEsIDI0NSwgNjMsIDIwNywgMSwgMTc2LCAyMDcsIDEsIAorICAgIDIyNCwgOTEsIDIwNywgMSwgMjQzLCAxNDIsIDIwNywgMSwgMjI5LCA4MiwgMjA3LCAxLCAyNTEsIDQxLCAyMDcsIDEsIDIzNSwgCisgICAgMTQ3LCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIDIyNywgMTY5LCAyMDcsIDEsIDIxNywgMTA2LCAyMDcsIDEsIDI0OCwgCisgICAgMjI5LCAyMDcsIDEsIDE5OCwgMjA3LCAxLCAxOTEsIDIwNywgMSwgMjQ0LCAyMDQsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAKKyAgICAyNTIsIDE5OSwgMjA3LCAxLCAxODYsIDIwNywgMSwgMTkyLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDE0MSwgMjA3LCAKKyAgICAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE3LCA1LCAyMjYsIAorICAgIDU2LCAyMDcsIDExNywgNSwgMjI2LCAzMiwgMjA3LCAxMTcsIDUsIDIyNiwgMjksIDIwNywgMjUsIDUsIDIyNiwgNDYsIDIwNywgCisgICAgMjUsIDUsIDIyNiwgMjgsIDIwNywgMjUsIDUsIDIyNiwgNTAsIDIwNywgMjUsIDUsIDIyNiwgMzgsIDIwNywgMjUsIDUsIAorICAgIDIyNiwgNTcsIDIwNywgMjUsIDUsIDIyNiwgNDgsIDIwNywgNSwgMjI2LCA2MCwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAKKyAgICAxMTcsIDUsIDIyNSwgMjUyLCAxODYsIDIwNywgMTE3LCA1LCAyMjUsIDI1MiwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzOCwgCisgICAgMjA3LCAxLCAyMTcsIDIzMiwgMjA3LCAyMSwgMjEwLCA4NiwgMjA3LCAyMSwgMTExLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIAorICAgIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxOTAsIDIwNywgMjEsIDE5NSwgMjA3LCAyMSwgMTk5LCAyMDcsIDIxLCAKKyAgICAxOTYsIDIwNywgMjEsIDIwMSwgMjA3LCAyNTMsIDE4MywgMjA3LCAxLCAyMjMsIDU1LCAyMDcsIDEsIDIzMywgMTMsIDIwNywgCisgICAgMSwgMjUyLCAyNiwgMjA3LCAxLCA0MCwgMjM1LCAyOSwgMjA3LCAxLCA0MCwgMTk0LCAyNTIsIDEyOCwgMSwgNjEsIDI1MiwgCisgICAgMTI4LCAxLCAyMTksIDE2NiwgNjEsIDI1MiwgMTI4LCAxLCAxNjIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTYyLCAyNTIsIAorICAgIDEyOCwgMSwgMjMxLCAxODYsIDE2MiwgMjUyLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTIsIDEyOCwgMSwgMjM0LCAyMTgsIDI1MiwgCisgICAgMTk5LCAyNTIsIDEyOCwgMSwgMTkxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE5MSwgMjUyLCAxMjgsIDEsIDE5OCwgMjUyLCAKKyAgICAxMjgsIDEsIDIzMSwgMTg2LCAxOTgsIDI1MiwgMTI4LCAxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIxMiwgCisgICAgNjUsIDI1MiwgMTI4LCAxLCAyMjYsIDcxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAKKyAgICAyMTksIDE2NiwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAyMzUsIDE0NywgMjUyLCAxMjgsIDEsIDI0OCwgMjI5LCAyNTIsIAorICAgIDEyOCwgMSwgMjA1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNSwgMjUyLCAxMjgsIDEsIDE4NiwgMjUyLCAxMjgsIDEsIAorICAgIDIxOSwgMTY2LCAxODYsIDI1MiwgMTI4LCAxLCAyMTksIDI4LCAyMTcsIDEwNiwgMjUyLCAxMjgsIDEsIDIyOCwgNjAsIDIxNywgCisgICAgMTA2LCAyNTIsIDEyOCwgMSwgMjA2LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNiwgMjUyLCAxMjgsIDEsIDIzMSwgMTg2LCAKKyAgICAyMDYsIDI1MiwgMTI4LCAxLCAxOTIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTkyLCAyNTIsIDEyOCwgMSwgMjI5LCA4MiwgCisgICAgMjUyLCAxMjgsIDEsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjI3LCAKKyAgICAxNjksIDI1MiwgMTI4LCAxLCAyNTEsIDQxLCAyNTIsIDEyOCwgMSwgMjI5LCAxNTMsIDI1MiwgMTI4LCAxLCAyMzEsIDEyOSwgCisgICAgMjUyLCAxMjgsIDEsIDc0LCAyNTIsIDEyOCwgMSwgNjksIDI1MiwgMTI4LCA1LCAyMTYsIDM0LCAyNTIsIDEyOCwgMjUsIDUsIAorICAgIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDIyNiwgNzEsIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDI0NSwgMjE3LCAyNTIsIDEyOCwgCisgICAgMjUsIDUsIDc0LCAyNTIsIDEyOCwgMjUsIDUsIDIzNCwgMjE4LCA3NCwgMjUyLCAxMjgsIDI1LCA1LCA3OCwgMjUyLCAxMjgsIAorICAgIDI1LCA1LCAyMzQsIDIxOCwgNzgsIDI1MiwgMTI4LCAyNSwgNSwgNjksIDI1MiwgMTI4LCAyNSwgNSwgMTA0LCAzMSwgMjE5LCAKKyAgICAxNjYsIDIwNiwgMjUyLCAxMjgsIDExNywgNSwgMjI5LCA4NCwgMjUyLCAxMjgsIDExNywgNSwgMjQyLCA2NywgMjUyLCAxMjgsIAorICAgIDIyNiwgNDEsIDI1MiwgMTI4LCAyMjYsIDM3LCAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjksIDIzNCwgMjMxLCA0MiwgCisgICAgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjI1LCA2NywgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjM1LCA1NCwgMjUyLCAKKyAgICAxMjgsIDE2LCAyNTEsIDI0OSwgMjI2LCA0MSwgMTk3LCAxLCAxNzYsIDE5NywgMSwgMjM0LCA0NSwgMTk3LCAxLCAyMzQsIAorICAgIDEzOCwgMTk3LCAxLCAyNDMsIDE0MiwgMTk3LCAxLCAyNDIsIDE5MywgMTk3LCAxLCAyMjksIDgyLCAxOTcsIDEsIDI1MSwgCisgICAgNDEsIDE5NywgMSwgMjUwLCAxNjUsIDE5NywgMSwgMjM1LCAxNDcsIDE5NywgMSwgMjI3LCAxNjksIDE5NywgMSwgMjE3LCAKKyAgICAxMDYsIDE5NywgMSwgMjE2LCAyMDksIDE5NywgMSwgMjQ4LCAyMjksIDE5NywgMSwgMTk4LCAxOTcsIDEsIDE5MSwgMTk3LCAKKyAgICAxLCAyMjUsIDQ1LCAxOTcsIDEsIDIyNSwgMTUwLCAxOTcsIDEsIDI0NCwgMjA0LCAxOTcsIDEsIDI0NCwgODMsIDE5NywgMSwgCisgICAgMjUyLCAxOTksIDE5NywgMSwgMjUxLCAyMzAsIDE5NywgMSwgMTg2LCAxOTcsIDEsIDIzMCwgMTczLCAxOTcsIDEsIDIxNSwgCisgICAgMTg0LCAxOTcsIDEsIDIxNSwgMTc2LCAxOTcsIDEsIDI0NiwgNDYsIDE5NywgMSwgMTkyLCAxOTcsIDEsIDIwNSwgMTk3LCAxLCAKKyAgICAyMzMsIDE0MSwgMTk3LCAxLCAxNjIsIDE5NywgMSwgMjQxLCAxNjAsIDE5NywgMSwgMjE0LCAyNywgMTk3LCAxLCAyMDYsIAorICAgIDE5NywgMSwgMjIwLCAxMDQsIDE5NywgMSwgMjEyLCA2NSwgMTk3LCAxLCA2MSwgMTk3LCAyMTgsIDc0LCAxLCAxOTIsIDE5NywgCisgICAgMjE4LCA3NCwgMSwgMjA1LCAxOTcsIDI1LCA1LCAyNTUsIDgyLCAxOTcsIDI1LCA1LCA3NCwgMTk3LCAyNSwgNSwgNzgsIAorICAgIDE5NywgMjUsIDUsIDIyNiwgMTg3LCAxOTcsIDI1LCA1LCA2OSwgMTk3LCAyNSwgNSwgMjE0LCAxMTgsIDE5NywgMjUsIDUsIAorICAgIDc2LCAxOTcsIDExNywgNSwgMjM1LCAyOSwgMTk3LCAxMTcsIDUsIDE5NCwgMTk3LCAxMTcsIDUsIDE1NiwgMTk3LCAxMTcsIAorICAgIDUsIDIzMCwgMzAsIDE5NywgMTE3LCA1LCAyMjYsIDEwOSwgMTk3LCAxMTcsIDUsIDE1MywgMTk3LCAxMTcsIDUsIDIxNywgCisgICAgMTUzLCAxOTcsIDExNywgNSwgMjI3LCAxNDYsIDE5NywgMTE3LCA1LCAyMzQsIDIzNiwgMTk3LCA1LCAyMjMsIDE1MywgMTk3LCAKKyAgICA1LCAyMjcsIDIwOSwgMTk3LCAyMjQsIDE0NCwgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDIyNywgMTU2LCAyMTYsIDEyMSwgCisgICAgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDI1MCwgMTcyLCAxOTcsIDIyNCwgMTQ0LCAyMTUsIDE3MSwgMjUwLCAxNzIsIAorICAgIDE5NywgMjI0LCAxNDQsIDIxNSwgMTcwLCAxOTcsIDIxLCAyMTAsIDg2LCAxOTcsIDIxLCAxMTEsIDE5NywgMjEsIDEwNSwgCisgICAgMTk3LCAyMSwgMTU4LCAxOTcsIDIxLCAxNjEsIDE5NywgMjEsIDE5MCwgMTk3LCAyMSwgMTk1LCAxOTcsIDIxLCAxOTksIAorICAgIDE5NywgMjEsIDE5NiwgMTk3LCAyMSwgMjAxLCAxOTcsIDEsIDIxNSwgMTU3LCAxOTcsIDEsIDIxNSwgMTQ1LCAxOTcsIDEsIAorICAgIDI0OCwgMTQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAyMTAsIDg2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxMTEsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDEwNSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIxLCAxNjEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5MCwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk1LCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTksIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5NiwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMSwgMjAxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI1MywgMjE0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMjI1LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgCisgICAgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMTg3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQwLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgNDQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCA0NSwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyNTUsIDQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgMzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgCisgICAgMSwgMjMyLCAyNDcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxNzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM2LCAKKyAgICA0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE5NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE4NiwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzIsIDEwMywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIyMSwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIxOSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDE2OCwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyMTQsIDExMSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDY0LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDEsIDI0NSwgMTE2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgMjIwLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI0NSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgOTQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMyLCAKKyAgICAxNjIsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAxNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI3LCAwLCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMTI5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMjI2LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDIzMCwgMTA4LCAyMTUsIDEyMiwgMjI2LCAyMTQsIDI1MCwgMTExLCAyNDMsIDEzNywgMjE1LCAxMjMsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjMwLCAxMDYsIDIxNSwgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyMywgOTUsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMjI1LCAxNDgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjU0LCAyMTcsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjI0LCAxNDQsIDIzMCwgMTAzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyNCwgMTQ0LCA1MiwgMjMwLCAxMDMsIDIwNywgCisgICAgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMTgsIDksIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMjYsIDQyLCAyMDcsIDIyNCwgCisgICAgMTQ0LCAyNTEsIDI0OSwgMjI0LCAxMzIsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyNTEsIDI3LCAyMDcsIDIyNCwgMTQ0LCAKKyAgICAyNTEsIDI0OSwgMjMzLCAxNCwgMjIxLCAyMjcsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMzUsIDE5LCAyMjEsIDIyNywgCisgICAgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDI0OCwgMjMwLCAyMjEsIDIyNywgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIAorICAgIDI1MiwgMjAwLCAyMjEsIDIyNywgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTYsIDIxMywgMjUyLCAxMzgsIDIyMCwgNzksIDIxMywgCisgICAgMjUyLCAxMzgsIDIyNCwgMjAxLCAyMTMsIDI1MiwgNSwgMjI4LCAyMTQsIDIxMywgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIAorICAgIDIyNywgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIyMiwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM0LCAyMDQsIAorICAgIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MSwgMTAsIDUxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAKKyAgICAyMzQsIDIwNCwgMjM1LCAyNTAsIDIxOCwgMiwgMjIxLCAxOTksIDIxMywgMjUyLCAxMzgsIDUyLCAyMTgsIDEsIDIxMywgCisgICAgMjUyLCAxMzgsIDIxNSwgMjEyLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjA0LCAyNTQsIDg1LCAyMTMsIDI1MiwgCisgICAgMTM4LCA1OSwgNTEsIDIxMywgMjUyLCAxMzgsIDExMywgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMTM0LCAxNzAsIDUxLCAKKyAgICAyMTMsIDI1MiwgMTM4LCAyMjIsIDI0MywgMjM0LCAyMTUsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MywgCisgICAgMjEyLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxOCwgMSwgMjEzLCAyNTIsIDUsIDIxMywgCisgICAgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIDIyMywgNTIsIDIxMywgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIAorICAgIDIxMywgMTQ4LCAyNTQsIDg1LCAyMTMsIDI1MiwgNSwgMjIzLCA1MiwgMjEzLCAxNDgsIDI1NCwgODUsIDIxMywgMjUyLCA1LCAKKyAgICAyMTMsIDE0OCwgMjE0LCAyMTcsIDIsIDIxNywgNzgsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCA4NiwgMiwgMjE3LCAKKyAgICA3OCwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDI1NCwgOTksIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyNTIsIDE3NCwgMjEzLCAKKyAgICAyNTIsIDUsIDI1NCwgODQsIDIxNCwgMjAsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIDIxLCAyLCAyMTcsIDc4LCAyMTMsIAorICAgIDI1MiwgNSwgMjE2LCA2OSwgMjEzLCAyNTIsIDUsIDI0MSwgMTk4LCAyMDAsIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMDAsIAorICAgIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMjIsIDE0NCwgMjAwLCAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAKKyAgICAyMjMsIDIzMCwgOTUsIDIxMywgMjUyLCA1LCAyNTQsIDI4LCAyMTMsIDI1MiwgNSwgMjIyLCAxODksIDI1NCwgMjgsIDIxMywgCisgICAgMjUyLCAxMzgsIDI1MSwgMTAsIDQ4LCAyMTMsIDI1MiwgNSwgMjM1LCAxMDgsIDIxMywgMjUyLCA1LCAyMTQsIDE2MSwgNywgCisgICAgMSwgNCwgNiwgNjEsIDcsIDEsIDQsIDYsIDI1NCwgMjUyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIDI1MiwgNywgMSwgNCwgCisgICAgNiwgMjUyLCAxNDIsIDI1MywgMTY2LCA3LCAxLCA0LCA2LCAyNTEsIDc0LCA3LCAxLCA0LCA2LCAyNDksIDY4LCA3LCAxLCA0LCAKKyAgICA2LCAyNDUsIDY3LCA3LCAxLCA0LCA2LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgMjA0LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgCisgICAgNzQsIDcsIDEsIDQsIDYsIDIzNSwgMTUwLCA3LCAxLCA0LCA2LCAyMzUsIDI5LCA3LCAxLCA0LCA2LCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDEsIDQsIDYsIDE5NCwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMjMwLCAzMCwgNywgMSwgNCwgNiwgNzgsIDcsIDEsIAorICAgIDQsIDYsIDIwNCwgNzgsIDcsIDQsIDEsIDIxOSwgMTg5LCA3OCwgNywgNCwgMSwgMjE5LCAxODksIDIwNCwgNzgsIDcsIDQsIAorICAgIDEsIDIxOSwgMTg5LCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjI2LCAKKyAgICAxMzgsIDcsIDQsIDEsIDIxNiwgMTUsIDE2MywgNzgsIDcsIDQsIDEsIDI1MSwgMTgzLCAxNjMsIDc4LCA3LCAxLCA0LCA2LCAKKyAgICAyMjYsIDEwOSwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMTUzLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxNTMsIDcsIDEsIDQsIDYsIAorICAgIDIxNywgMTUzLCA3LCAxLCA0LCA2LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgMjQ4LCAKKyAgICA4LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDIxNSwgOTQsIDE5NCwgNywgMSwgNCwgNiwgMjE0LCAxMDUsIDcsIDEsIDQsIDYsIAorICAgIDIxMiwgOTgsIDcsIDEsIDQsIDYsIDIxMCwgMTU5LCA3LCAxLCA0LCA2LCAyNDUsIDE2LCA3LCAxLCAyMTMsIDEzNSwgMjMzLCAKKyAgICA4OCwgMjE4LCAyNTIsIDcsIDEsIDI1NCwgMjA1LCAyNiwgMSwgNCwgNiwgMjQzLCAxMTQsIDI2LCAxLCA0LCA2LCAyMzMsIAorICAgIDEwNCwgMjYsIDEsIDQsIDYsIDIyNSwgMTExLCAyNiwgMSwgNCwgNiwgMjIzLCA0MCwgMjYsIDEsIDQsIDYsIDIyNCwgMTY0LCAKKyAgICAzMywgMSwgNCwgNiwgMjQ1LCAxODIsIDU4LCAxLCA2LCA2MSwgNTgsIDEsIDYsIDI1NCwgMjUyLCA1OCwgMSwgNiwgMjUzLCAKKyAgICAxNjYsIDU4LCAxLCA2LCAyNTIsIDE0MiwgMjUzLCAxNjYsIDU4LCAxLCA2LCAyNDksIDY4LCA1OCwgMSwgNiwgNzYsIDU4LCAKKyAgICAxLCA2LCAyMjMsIDUyLCA3NiwgNTgsIDEsIDYsIDI0MywgMjA5LCA1OCwgMSwgNiwgMjQyLCA2NywgNTgsIDEsIDYsIDc0LCAKKyAgICA1OCwgMSwgNiwgMjM1LCAxNTAsIDU4LCAxLCA2LCAyMzUsIDI5LCA1OCwgMSwgNiwgMTU2LCA1OCwgMSwgNiwgMTk0LCA1OCwgCisgICAgMSwgNiwgMjMwLCAzMCwgNTgsIDEsIDYsIDIyMywgNTIsIDIzMCwgMzAsIDU4LCAxLCA2LCA3OCwgNTgsIDEsIDYsIDIyNiwgCisgICAgMTM4LCA1OCwgMSwgNiwgMjI2LCAxMDksIDU4LCAxLCA2LCAxNTMsIDU4LCAxLCA2LCAyMTcsIDE1MywgNTgsIDEsIDYsIDY5LCAKKyAgICA1OCwgMSwgNiwgMjEyLCA5OCwgNTgsIDEsIDQsIDYxLCA1OCwgMSwgNCwgMjE1LCA5NCwgNjEsIDU4LCAxLCA0LCAyNTQsIAorICAgIDE1MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMjUyLCA1OCwgMSwgNCwgMjUzLCAxNjYsIDU4LCAxLCA0LCAyNDksIDY4LCAKKyAgICA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMjEsIDE5NywgNTgsIDEsIDQsIDIwNCwgNzYsIDU4LCAxLCA0LCAyMTUsIDk0LCAKKyAgICAyMDQsIDc2LCA1OCwgMSwgNCwgMjQzLCAyMDksIDU4LCAxLCA0LCAyMTUsIDk0LCA3NCwgNTgsIDEsIDQsIDIzNSwgMjksIAorICAgIDU4LCAxLCA0LCAxOTQsIDU4LCAxLCA0LCAyNDUsIDE0NiwgNTgsIDEsIDQsIDc4LCA1OCwgMSwgNCwgMjA0LCA3OCwgNTgsIAorICAgIDEsIDQsIDIxNiwgMTUsIDE2MywgNzgsIDU4LCAxLCA0LCAyNTEsIDE4MywgMTYzLCA3OCwgNTgsIDEsIDQsIDIyNiwgMTA5LCAKKyAgICA1OCwgMSwgNCwgMjE3LCAxNTMsIDU4LCAxLCA0LCA2OSwgNTgsIDEsIDQsIDIxOSwgMTg5LCA2OSwgNTgsIDEsIDQsIDIxNSwgCisgICAgOTQsIDE5NCwgNTgsIDEsIDQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjU0LCAyMDUsIDU4LCAxLCA0LCAyNTIsIDM0LCA1OCwgCisgICAgMSwgNCwgMjYsIDI0MywgMTE0LCA1OCwgMSwgNCwgMjQ4LCA2MiwgNTgsIDEsIDQsIDI2LCAyMjUsIDEzNiwgNTgsIDEsIDQsIAorICAgIDI1MCwgMTE4LCA3LCAyMTgsIDY2LCA0LCAxLCA3NCwgNywgMjE4LCA2NiwgNCwgMSwgMTUzLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA2OSwgNywgMjE4LCA2NiwgNCwgMSwgMjE0LCAxMDUsIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTIsIDM0LCAyNiwgMjE4LCA2NiwgCisgICAgNCwgMSwgMjQzLCAxMTQsIDI2LCAyMTgsIDY2LCA0LCAxLCAyMjMsIDQwLCAyNiwgMjE4LCA2NiwgNCwgMSwgMjI1LCAxMzYsIAorICAgIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTAsIDExOCwgNywgNCwgMSwgMjE0LCAyMTQsIDcsIDQsIDEsIDU3LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk2LCAyMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIyLCA5NCwgCisgICAgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxMCwgMTYwLCAKKyAgICAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDMsIDIwOSwgNTgsIDEsIDMzLCAyNDUsIDE1OCwgNywgNCwgCisgICAgMSwgMjM1LCAyMjAsIDI0MywgMjA5LCA3LCA0LCAxLCAyMTYsIDIxMiwgMiwgMjE4LCAxMDksIDcsIDQsIDYsIDEsIDI0MCwgCisgICAgMTYxLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxOTMsIDIsIDkxLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgOTEsIDcsIDQsIDYsIAorICAgIDEsIDEwNCwgMiwgOTEsIDcsIDQsIDEsIDIxNCwgMTU4LCAyLCA5MSwgNywgNCwgMSwgNTcsIDIsIDIyNiwgNzAsIDEwMywgNywgCisgICAgNCwgMSwgMjQ5LCA2OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIAorICAgIDEsIDI0MywgMjEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjMyLCA1NSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMzAsIDMxLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIyMywgMjI3LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjQ1LCA4NCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMTEsIDE3OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjU0LCAxNTIsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ5LCAKKyAgICA2OSwgMiwgMjQxLCA1OSwgMjIsIDIxNywgNzgsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMDQsIAorICAgIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMjEsIDE5OCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDg0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMTUsIAorICAgIDk0LCAyNTQsIDE1MSwgNTgsIDEsIDQsIDI1MSwgNzQsIDU4LCAxLCA0LCAyNTEsIDc1LCAyLCAyNDksIDEwOCwgNTgsIDEsIAorICAgIDQsIDI0NSwgNjcsIDU4LCAxLCA0LCAyMjMsIDUyLCAyMDQsIDc2LCA1OCwgMSwgNCwgMjQ1LCAxNCwgNTgsIDEsIDQsIDI0NywgCisgICAgMTI3LCAyMzUsIDE1MSwgMiwgOTEsIDU4LCAxLCA0LCAxMTksIDI0MywgMjA5LCA1OCwgMSwgNCwgMjE1LCA5NCwgMjQyLCAKKyAgICA2NywgNTgsIDEsIDQsIDI0MCwgMTYxLCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTkyLCA1OCwgMSwgNCwgNiwgNzQsIDU4LCAKKyAgICAxLCA0LCA2LCAyNDAsIDE2MSwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDU4LCAxLCA0LCAyMzMsIAorICAgIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNTgsIDEsIDQsIDYsIAorICAgIDE1NiwgNTgsIDEsIDQsIDIzMiwgNTUsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIzMiwgNTUsIDIsIDIwMCwgMjMzLCAKKyAgICA0MiwgNTgsIDEsIDQsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDU4LCAxLCA0LCAyMzAsIDMxLCAyLCAyMjMsIDU4LCAxMDMsIAorICAgIDU4LCAxLCA0LCA2LCAyMzAsIDMwLCA1OCwgMSwgNCwgMjUyLCAxNDIsIDc4LCA1OCwgMSwgNCwgMjI1LCAxMzYsIDU4LCAxLCAKKyAgICA0LCAyMjIsIDk0LCAyLCAxMDMsIDU4LCAxLCA0LCAyNDUsIDgzLCA1OCwgMSwgNCwgMjE3LCAxNTQsIDIsIDIyNiwgNzAsIAorICAgIDEwMywgNTgsIDEsIDQsIDEwNCwgMTMwLCA1OCwgMSwgNCwgMjE0LCAxNTcsIDU4LCAxLCA0LCA2LCA2OSwgNTgsIDEsIDQsIAorICAgIDIxNCwgMTA2LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDIxMCwgMTU5LCA1OCwgMSwgCisgICAgNCwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyNDksIDEwOCwgNTgsIDEsIDQsIAorICAgIDI0NSwgMTYsIDU4LCAxLCA0LCAyMTYsIDE4MCwgMzgsIDI0NiwgMTI2LCAyNDIsIDE0NCwgMjU1LCAyMywgMzgsIDI0NiwgCisgICAgMTI2LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjE5LCA3MSwgNTEsIDM4LCAyMTgsIDcsIDc5LCAzOCwgMjMxLCAyMzYsIDM4LCAKKyAgICAyNDIsIDE0MSwgMzgsIDIzMSwgMjM0LCAzOCwgMjU1LCAxMCwgMzgsIDI0MiwgMTQyLCAzOCwgMjU1LCAxMSwgMzgsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCA1MSwgMzgsIDI1MSwgMTUzLCAzOCwgMjMxLCAyMzUsIDM4LCA1MiwgMjUwLCAzOSwgNDgsIDM4LCAKKyAgICAyMjYsIDIyOSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTc5LCA1MSwgMzgsIDIxNCwgMTUxLCA0OCwgMzgsIAorICAgIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNzEsIDIwNCwgMTE2LCA0OCwgMzgsIDcsIDQsIDEsIDI1NCwgMjUyLCAKKyAgICAzOCwgNywgNCwgMSwgMjU0LCA4MSwgMzgsIDcsIDQsIDEsIDI1MywgMTg0LCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMjUwLCAKKyAgICAxOTEsIDM4LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgMzgsIDcsIDQsIDEsIDI0NSwgNjcsIDM4LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIwOSwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjA5LCAzOCwgNywgNCwgMSwgMjM1LCAyOSwgMzgsIDcsIDQsIDEsIAorICAgIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5NCwgMzgsIDcsIDQsIDEsIDIzMCwgMzAsIDM4LCAKKyAgICA3LCAxLCA0LCA2LCAyMzAsIDMwLCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgMjIzLCAyMjcsIDIyMiwgCisgICAgMTg4LCAzOCwgNywgNCwgMSwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIxMCwgCisgICAgMTU5LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NSwgNTEsIDM4LCAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCA1MSwgMzgsIAorICAgIDQzLCAyNTQsIDIsIDQ4LCAzOCwgNDQsIDI1NCwgMiwgMjIsIDEyNCwgMjU0LCAyLCA1MSwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyMjIsIDIzNywgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDUxLCA3LCA2LCAxLCA1NywgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAxLCA1NywgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyNTEsIAorICAgIDc1LCAyLCAyNTAsIDE5MiwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTIsIDIyLCAxNDIsIDcsIDYsIAorICAgIDEsIDI0OSwgNjksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMTkxLCA3LCA0LCAKKyAgICAxLCAyNDksIDY5LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDI0OSwgCisgICAgNjksIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMTYwLCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAyMTYsIDkwLCAKKyAgICA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE5MiwgMjIsIDI1MSwgMTU0LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMTkyLCAKKyAgICAyMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0NSwgMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ1LCAxNSwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyMzEsIDIzNywgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDU5LCAKKyAgICA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDksIDcsIDQsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNTEsIDE1NSwgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MSwgCisgICAgMTU1LCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjE2LCAKKyAgICA5MCwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgCisgICAgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgMTQyLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxNDIsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzUsIDMwLCAKKyAgICAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDU5LCAyNTIsIDUxLCAKKyAgICAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgCisgICAgMjMyLCA1NSwgMiwgMTQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxNDIsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMjMyLCA1NSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMzIsIDU1LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMiwgCisgICAgNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgCisgICAgOTAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAKKyAgICAyMiwgMjQ4LCA5LCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyNDgsIDksIDcsIDYsIDEsIDE0NCwgMiwgMjMxLCAKKyAgICAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIAorICAgIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMTQyLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMTQyLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjMsIAorICAgIDIyNywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgNTksIAorICAgIDUxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMjIzLCAyMjcsIAorICAgIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCAKKyAgICA5NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDU5LCA1MSwgCisgICAgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgCisgICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTQsIAorICAgIDIsIDI1MCwgMjQzLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjIyLCA5NCwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCisgICAgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAKKyAgICAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIAorICAgIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA2LCAxLCAxMDQsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIAorICAgIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgCisgICAgMjIsIDI0OCwgOSwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDI0OCwgOSwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDE4NCwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMiwgOTksIDIsIAorICAgIDI0MiwgMTQzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMjEyLCA5OSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxNzksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxNzksIDIsIAorICAgIDU5LCA0OCwgNywgNiwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNCwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNiwgCisgICAgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAxNjAsIAorICAgIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCAKKyAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMiwgOTksIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMjExLCAKKyAgICAxMTgsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA0NCwgMTYzLCAyMjIsIDIzNiwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc4LCAyMjIsIDkzLCA3LCA0LCAxLCAyNDgsIDYyLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyNTEsIDE1NSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgCiAgICAgNTEsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTYwLCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTYwLCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgCi0gICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKLSAgICAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgCi0gICAgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0MSwgNTIsIDQ4LCA3LCAKLSAgICA0LCAxLCAyNDAsIDE1NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCA1OSwgCi0gICAgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgCi0gICAgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIAotICAgIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDQsIAotICAgIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTEsIAotICAgIDExOCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNiwgCi0gICAgMSwgMjMwLCAyMjMsIDIzMiwgMTg1LCA3LCA0LCAxLCAyMzAsIDIyMywgMjMyLCAxODUsIDcsIDYsIDEsIDIzMCwgMjIzLCAKLSAgICAyMTQsIDEwNSwgNywgNCwgMSwgMjMwLCAyMjMsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjMsIDcsIAotICAgIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyMywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgCi0gICAgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNCwgCi0gICAgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIAotICAgIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxMywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgCi0gICAgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIAotICAgIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIAotICAgIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIAotICAgIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAKLSAgICAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgCi0gICAgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjUsIDE3NSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIAotICAgIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIAotICAgIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjI2LCAyMDAsIAotICAgIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIAotICAgIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKLSAgICAyMTQsIDE1OCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1MywgMjYsIDYsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgCi0gICAgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjQsIDE1NCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAKLSAgICAxMDEsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMjYsIDExMCwgMjYsIAotICAgIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIAotICAgIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAKLSAgICAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAKLSAgICAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIAotICAgIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIAotICAgIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIAotICAgIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAKLSAgICAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgCi0gICAgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgCi0gICAgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMzEsIDIzMiwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAxMTEsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NiwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNjcsIDI2LCAyMzQsIDIsIDI2LCAyMjQsIDE2NywgMjYsIDIyNCwgCi0gICAgMTU0LCAyNiwgMjI1LCAxNzUsIDI2LCAyNDcsIDI1MiwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNDUsIAotICAgIDY0LCAyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDEwMSwgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE2NywgMjYsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgCi0gICAgMjYsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAKLSAgICAxODYsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIzMSwgMjMyLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIAotICAgIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIyNiwgMTEwLCAyNiwgCi0gICAgNCwgMSwgMjM1LCAxODYsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjI1LCAKLSAgICAxNzUsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjMxLCAyMzIsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjYsIDExMCwgMjYsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjMyLCAyNiwgNCwgCi0gICAgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjIzLCAzOCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjMsIDM4LCAyLCAyNDgsIAotICAgIDE1MywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyMjMsIDM4LCAyLCAyNDgsIDE1MywgMjYsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDI0NywgCi0gICAgMjUyLCAyMiwgMjI2LCAxMTAsIDI2LCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjYsIDExMSwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTY3LCAyNiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1MywgCi0gICAgMjQ1LCAxNTEsIDIyNCwgMjcsIDI0NSwgMTYwLCAyMjQsIDI3LCAyNDUsIDE1MSwgMjE5LCAxOCwgMjQ1LCAxNjAsIDIxOSwgCi0gICAgMTgsIDIxNiwgMTQxLCAyMTksIDE4LCAyNDQsIDksIDIxOSwgMTgsIDIxOSwgMTIzLCAyMTksIDE4LCAyNDQsIDExMiwgMjE5LCAKLSAgICAxOCwgMjI0LCAxNDEsIDIxOSwgMTgsIDIxNiwgMTcwLCAyMTksIDE4LCAyNDIsIDM1LCAyMTksIDE4LCAyMTAsIDg3LCAyMTEsIAotICAgIDI0NSwgMjE5LCAxOCwgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNjcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMzUsIDYzLCAKLSAgICAyMzMsIDM4LCA3OCwgMjIyLCAyNDMsIDc4LCAyNDAsIDE2OCwgMjI4LCA2OCwgMjQwLCAxNjgsIDI0NCwgMTEyLCAyNDgsIAotICAgIDE1NiwgMjQ1LCAxNTEsIDI0OCwgMTU2LCAyNDUsIDE2MCwgMjQ4LCAxNTYsIDIwMywgMTMwLCA1MiwgNjcsIDIzMiwgMjEzLCAKLSAgICA1MiwgMTIxLCAyMzIsIDIxMywgNDMsIDIxOSwgMTU1LCAyMjMsIDI1NCwgNzgsIDQ0LCAyMTksIDE1NSwgMjIzLCAyNTQsIAotICAgIDc4LCAyMTksIDE1NSwgMjMyLCAxMDksIDIyMywgMjU0LCA3OCwgMjE5LCAxNTUsIDI0MSwgMTYzLCAyMjMsIDI1NCwgNzgsIAotICAgIDQzLCA1MiwgMjIzLCAyNTQsIDc4LCA0NCwgNTIsIDIyMywgMjU0LCA3OCwgNTIsIDIzMiwgMTA5LCAyMjMsIDI1NCwgNzgsIAotICAgIDUyLCAyNDEsIDE2MywgMjIzLCAyNTQsIDc4LCAyNDgsIDIwNSwgNTIsIDI0OCwgMjA1LCAyNTEsIDExMywgMjE1LCAyMjIsIAotICAgIDI1MSwgMTEzLCAxMjMsIDU5LCAyMzMsIDU2LCAxMTMsIDU5LCAyMzMsIDU2LCAyMDMsIDI0NSwgMTYzLCAyNDAsIDE2NiwgCi0gICAgMjI1LCAxMCwgMjMyLCAyMTQsIDIyMCwgMTM3LCAyMjYsIDE1LCAyMjAsIDEzNywgMjMzLCAzOCwgMjQ1LCAxNTgsIDIyMiwgCi0gICAgMjQzLCAyNDUsIDE1OCwgMjI0LCAyNDYsIDI0NywgMTk2LCAyNDQsIDE5LCAyMzMsIDM4LCAyMjYsIDExNywgMjIyLCAyNDMsIAotICAgIDIyNiwgMTE3LCAyMjksIDE5NCwgMjI4LCA3MywgMjE5LCAxOCwgMjI1LCAxODMsIDIzMCwgMTkzLCA1MCwgMjI1LCAxODMsIAotICAgIDIxNiwgMjQ4LCAyMTYsIDE0OCwgNTAsIDIyNCwgMTkwLCA1MiwgMjI0LCAxOTAsIDIxNSwgMjExLCAyMjQsIDE5MCwgMjIzLCAKLSAgICA0OSwgMjI0LCAxOTAsIDIyMywgNDksIDUyLCAyMjQsIDE5MCwgMjIzLCA0OSwgMjE1LCAyMTEsIDIyNCwgMTkwLCAyNTAsIAotICAgIDIzOCwgMjE5LCAxNTUsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgNzgsIDIxOSwgMTU1LCAyMjIsIDI0NywgMjU0LCAKLSAgICAxMTAsIDIyMywgMjU0LCA3OCwgMjIzLCAxMDcsIDc4LCA1MiwgMjQ1LCAzMSwgNzgsIDIzNSwgMjAxLCAyMjYsIDExOSwgCi0gICAgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTEsIDI1MCwgMjM5LCAyMzUsIDIxNiwgMjI1LCAxMCwgMjUzLCAyMTQsIDI0MCwgMTY5LCAKLSAgICAyNTEsIDExMywgMjQ0LCAyLCAyMTksIDk1LCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMjQsIDcsIDQ0LCA0MiwgMjUxLCAxNTgsIAotICAgIDIsIDIyNCwgNywgNTIsIDIyNCwgMTMsIDc4LCAyMjQsIDEzLCAyNDUsIDMxLCA3OCwgMjQ1LCAzMSwgMjI0LCAxMywgNzgsIAotICAgIDIxNiwgNzAsIDUsIDI0NSwgNjUsIDIyMywgNDksIDIyNSwgNjgsIDUwLCA4NSwgMTQwLCAyNTEsIDExMywgODUsIDk3LCAKLSAgICAyNTEsIDExMywgMTIxLCAyNTMsIDIxNiwgMjIzLCA0OSwgMjIwLCAxNTAsIDI1MCwgMSwgMjE0LCAxNjMsIDExMywgMjUzLCAKLSAgICAyMTUsIDI1NCwgMTU4LCAyMTMsIDE4OCwgMjQ5LCAyMTcsIDIzMCwgMTgyLCA1MCwgMjE3LCAyMzQsIDI0OCwgMTU2LCAyMzUsIAotICAgIDE5MywgMjE0LCAxODAsIDI0NCwgNTIsIDIyNCwgMTQxLCA3OCwgMTM0LCA1OSwgMjI0LCAxNDAsIDIyNCwgMjQsIDIyNCwgCi0gICAgMTkwLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCAyMjQsIDE0MCwgMTEzLCA1OSwgMjI0LCAxNDAsIAotICAgIDI0NCwgMTEsIDU5LCA3OCwgMjQ2LCAxMTgsIDI0OSwgMTMwLCAyMTUsIDIyMSwgNjcsIDI0NCwgMTEsIDI0NywgMTE4LCAKLSAgICAyMzEsIDgyLCAxMSwgMjE5LCAxOCwgMjExLCAyMDksIDIzNSwgNjMsIDI0MywgMjI3LCAyNTQsIDUyLCAyMzUsIDE5MSwgCi0gICAgMjE2LCA4NSwgMjM1LCAxOTEsIDIyMCwgMTM3LCAyMzUsIDE5MSwgMjI1LCAyMiwgMjM1LCAyMjgsIDIxNywgMTgyLCAyMTcsIAotICAgIDI1MSwgMjU1LCA1LCAyMTcsIDE4MiwgMjE3LCAyNTEsIDIzNSwgMjI4LCAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjU1LCA1LCAKLSAgICAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjI5LCAxODksIDIxLCAyMjAsIDgxLCAyMjgsIDY5LCAyMSwgMjIwLCA4MSwgMjE4LCAKLSAgICAyMywgMjEwLCA4NiwgMjE4LCAyMywgNywgNCwgMSwgNzMsIDIxOCwgMjMsIDE2MSwgMjE4LCAyMywgMTg5LCAyMTgsIDIzLCAKLSAgICAxOTQsIDIxOCwgMjMsIDE5OCwgMjE4LCAyMywgMTk1LCAyMTgsIDIzLCAyMDAsIDIxOCwgMjMsIDk2LCA1MCwgMjE4LCAyMywgCi0gICAgMjMwLCAxODEsIDIxOCwgMjMsIDI0NSwgOTgsIDUwLCAyMTgsIDIzLCA0MywgMjI2LCAzLCAyMTgsIDIzLCA0NCwgMjI2LCAzLCAKLSAgICAyMTgsIDIzLCA3LCA0LCAxLCAyMzAsIDI1LCAyMTgsIDY1LCAyMTAsIDg2LCAyMTgsIDY1LCAxMTAsIDIxOCwgNjUsIDEwNSwgCi0gICAgMjE4LCA2NSwgMTU4LCAyMTgsIDY1LCAxNjEsIDIxOCwgNjUsIDE4OSwgMjE4LCA2NSwgMTk0LCAyMTgsIDY1LCAxOTgsIAotICAgIDIxOCwgNjUsIDE5NSwgMjE4LCA2NSwgMjAwLCAyMTgsIDY1LCA5NiwgNTAsIDIxOCwgNjUsIDIzMCwgMTgxLCAyMTgsIDY1LCAKLSAgICAyNDUsIDk4LCA1MCwgMjE4LCA2NSwgNDMsIDIyNiwgMywgMjE4LCA2NSwgNDQsIDIyNiwgMywgNywgMjE4LCA2NSwgNCwgMSwgCi0gICAgNjEsIDcsIDIxOCwgNjUsIDQsIDEsIDc1LCA3LCAyMTgsIDY1LCA0LCAxLCA3NiwgNywgMjE4LCA2NSwgNCwgMSwgMjExLCAKLSAgICAxNzgsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMSwgMTk1LCA3LCAyMTgsIDY1LCA0LCAxLCAyNDIsIDYwLCA3LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMzUsIDIzLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTYsIDcsIDIxOCwgNjUsIDQsIDEsIDE5MywgNywgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjMwLCAyNSwgNywgMjE4LCA2NSwgNCwgMSwgMjI2LCAxMDUsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMiwgOTEsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDIxNywgMTUyLCAyNDUsIDQ2LCA1MCwgMjQ5LCAyMjcsIDUwLCAyNDksIDExNywgNTAsIDI0MywgCi0gICAgMjUxLCAyNDMsIDI1NCwgNTAsIDIzMiwgMTk4LCA1MCwgMjMwLCAxOTQsIDUwLCAyMjksIDIxMCwgNTAsIDIyNSwgMTYyLCAKLSAgICA1MCwgMjIyLCAxMTgsIDUwLCAyMTEsIDIxNywgNTAsIDE2NiwgMjIwLCA0OSwgNTAsIDI0NywgMTI3LCA1MCwgMjQ1LCA0NywgCi0gICAgNTAsIDIzNCwgNzYsIDUwLCAyMTUsIDExMiwgNTAsIDI0NiwgMTAxLCA1MCwgMjQzLCA0MCwgMjI1LCAxOTMsIDUwLCAyMjUsIAotICAgIDE2MCwgNTAsIDI0MiwgMTA5LCA1MCwgMjUzLCAxODIsIDUwLCAyNDAsIDIyOCwgNTAsIDI1MCwgMTg1LCA1MCwgMjMyLCAKLSAgICAxOTEsIDIxNiwgMywgNTAsIDIxOSwgMCwgNTAsIDIxNiwgMjQ1LCA1MCwgMjM1LCAyNDEsIDIyMiwgMTE4LCA1MCwgMzgsIAotICAgIDQzLCAyNDEsIDI1NSwgNDgsIDM4LCA0NCwgMjQxLCAyNTUsIDQ4LCAzOCwgMTk5LCA2NywgMjMyLCAyMTQsIDIyNiwgMTIwLCAKLSAgICAzOCwgMjE5LCAyNTEsIDY3LCAyMzIsIDIxNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCA4MCwgNDgsIDM4LCAyNTAsIDIsIAotICAgIDgwLCA0OCwgMzgsIDQzLCA4MCwgNDgsIDM4LCA0NCwgODAsIDQ4LCAzOCwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMjUwLCAKLSAgICAyLCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAxMzQsIDE3MCwgNDgsIAotICAgIDM4LCAyNDQsIDExLCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNDYsIDI1MCwgMzUsIDM4LCAyNDUsIDE0NiwgMjE4LCAyMzQsIDM4LCAKLSAgICAyNDUsIDE0NiwgMjQ3LCAyNDgsIDM4LCAyNDUsIDE0NiwgMjUwLCAzNiwgMjUyLCAxODAsIDM4LCA0MywgNDQsIDgwLCA0OCwgCi0gICAgMzgsIDI0NSwgMTQ2LCAyMjEsIDE4OCwgMzgsIDI0NSwgMTQ2LCAyMzQsIDEzNSwgMzgsIDI0NSwgMTQ2LCAyMTQsIDE1NSwgCi0gICAgMjI1LCA3LCAyMTUsIDIyNSwgMzgsIDIyMywgNTAsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgNTIsIDY3LCAyMTgsIDEwMywgCi0gICAgMjI2LCAxMjAsIDM4LCAyNTQsIDk4LCA4NywgMzgsIDIxNSwgMjExLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIAotICAgIDE0MCwgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyMCwgMzgsIDE5OSwgNTIsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgOTcsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIDM4LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDMsIDM4LCA0MywgODAsIDUxLCAzOCwgNDQsIDgwLCA1MSwgMzgsIDI1MywgMjE3LCA0OCwgMjU1LCAxMSwgMjI2LCAyMzEsIAotICAgIDI1NCwgMjUxLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjE4LCA3NCwgMTM5LCA2LCAyNTEsIDY2LCAyNDgsIDcxLCAyNTAsIDE3OCwgCi0gICAgMjUwLCAxNzUsIDIzMiwgMjE0LCA4NywgMjUwLCAyNDAsIDIyNiwgMjMxLCAyNTEsIDI2LCAyMTQsIDE4OSwgMjQ1LCA0OCwgCi0gICAgMjQ5LCAxOTEsIDIyMSwgMTg1LCAyNDgsIDcxLCAyNDQsIDE3OSwgMTE5LCA0LCAyNDMsIDIwMiwgMTE5LCA2LCAyNDIsIDYwLCAKLSAgICAyNTEsIDIxOSwgNiwgMjQyLCA2MCwgMTM5LCA2LCAyNDIsIDYwLCAyMjUsIDM3LCAyNDksIDE5MSwgMjI1LCAzNywgMjQ5LCAKLSAgICAxOTIsIDExNywgMTEzLCAyMjUsIDEwOCwgMTE5LCA2LCA3MywgMjUxLCAyMTksIDYsIDczLCAxMTksIDYsIDE1NiwgMTE5LCAKLSAgICA0LCAxNTYsIDIzMywgMTQ5LCA1NywgMjUyLCAxNDEsIDg3LCAxMzksIDYsIDIzMCwgMjUsIDIyNywgMTk2LCA1MCwgMjE5LCAKLSAgICAzMSwgMjIzLCAxMTksIDI0OSwgMTYyLCAxMTksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNCwgCi0gICAgOTYsIDExOSwgNiwgMTUzLCAyNTEsIDIxOSwgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTYsIDIxNywgNzEsIDIyMywgCi0gICAgNjIsIDIyMCwgMTMyLCA3OCwgMjE3LCAxLCA1MCwgMjE1LCAyNTMsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgCi0gICAgMTU5LCAyMjYsIDEzMywgNTAsIDIyNiwgMjIxLCA1MCwgMjM1LCAxOTMsIDIyNiwgMjIxLCA1MCwgMjUxLCAyMTksIDYsIAotICAgIDIxMCwgMTU5LCAyMTUsIDk0LCAyNiwgNCwgMSwgMjM1LCAxODUsIDIzNCwgMTczLCA1MCwgMjU0LCAxMDcsIDUwLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAyNTEsIDIxOSwgNiwgMjUxLCA2NiwgMjQ1LCA2OCwgODcsIDExOSwgNCwgNzUsIDExOSwgNiwgNzUsIAotICAgIDExOSwgNiwgMjQ1LCA2LCAyMTUsIDk0LCA2LCAyNDUsIDYsIDExOSwgNiwgMTkzLCAxMTksIDQsIDc2LCAxMTIsIDg3LCAKLSAgICAyNTIsIDI5LCA4NywgMjQyLCAyMDIsIDg3LCAyNDgsIDE5MCwgODcsIDIzNSwgMjMyLCAyMTksIDI5LCAyMjIsIDE4NywgNiwgCi0gICAgMjI0LCA5NiwgMjQ0LCAxODIsIDUwLCAxMzksIDQsIDIyNSwgMTA4LCAxMzksIDQsIDI0MywgMTA3LCAxMzksIDYsIDI0MywgCi0gICAgMTA3LCAxMzksIDYsIDIyNSwgMTA4LCAxMzksIDIzMCwgMjQsIDIxOCwgNDAsIDIxNSwgOTQsIDM1LCA2LCAyNDMsIDIwMiwgCi0gICAgMjE1LCA5NCwgMzUsIDYsIDE1NiwgMjIzLCA0OSwgMzUsIDYsIDE1NiwgMjE1LCA5NCwgMzUsIDYsIDIxMSwgMTE3LCAxMzksIAotICAgIDMyLCA2LCAyNDksIDYwLCAxMzksIDMyLCA0LCAyNDksIDYwLCAxMzksIDMyLCA0LCA3NSwgMTM5LCAzMiwgNCwgNzMsIDEzOSwgCi0gICAgMzIsIDQsIDIzNSwgMTQ0LCAyMjQsIDE3MCwgMjMyLCAyMTMsIDIxNSwgOTQsIDI1NCwgMTI2LCAyMjUsIDE4MywgNTAsIAotICAgIDI1NCwgMTgwLCAyMTUsIDk0LCA0LCAyNDUsIDYsIDE2LCAzMSwgMjIxLCAyNTIsIDIxOSwgMjksIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEyMywgMjIwLCAxMTgsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjI4LCAxOTQsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgCi0gICAgMjE2LCAyNDEsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjE2LCAxNjgsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjE2LCAKLSAgICAxNjYsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQ0LCAxMTcsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjQ0LCAxMTYsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEzNCwgMjQ0LCAxMTYsIDIxMiwgMTE0LCAyNDQsIDIsIDI0NCwgMTEsIDI0NCwgMTE2LCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIxOSwgMTE1LCAyMTIsIDExNCwgMjQ0LCAyLCAyNDQsIDgxLCAyMTksIDExMywgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMjEyLCAxMTQsIDI0NCwgMiwgMTM0LCAyNDUsIDE4NiwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMjQ0LCA4MSwgMjQ1LCAxODYsIDIxMiwgMTE0LCAyNDQsIDIsIDIyMCwgMTIyLCAyNDUsIDE4NiwgCi0gICAgMjQ0LCAyLCAyMjcsIDE5NywgMTEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIAotICAgIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE2MSwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAxODksIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5OCwgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAxOTUsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjAwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjQ0LCAxMTQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAKLSAgICAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCA0LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDE2MSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxODksIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCA0LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDE5OCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjAwLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCA0LCAKLSAgICAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTQsIDQsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAyNDAsIDIxMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDgsIAotICAgIDI1MSwgNjcsIDI0OSwgNjAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIyMywgNDksIDEyMywgMjQwLCAyMTAsIDcsIAotICAgIDQsIDEsIDIyMywgNDksIDI1MSwgNjYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE5LCAxMjUsIDIzMywgNzgsIDE3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE1LCAyNDUsIDIyNiwgMTcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTUsIDIxNiwgCi0gICAgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTEsIDIxNiwgMTQ3LCAyMTIsIDExNCwgMjQ0LCAyLCAyMTAsIAotICAgIDg3LCAyMTYsIDE2NiwgMTQwLCA3NCwgMjE0LCAxNTMsIDc0LCA5NywgNzQsIDI0NiwgMTA0LCA3NCwgNDMsIDQ0LCA3NCwgCi0gICAgMTIwLCAxMjQsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMTQwLCA4MCwgMiwgOTEsIDk3LCA4MCwgMiwgOTEsIDE0MCwgMjEyLCAKLSAgICAzNiwgNzQsIDk3LCAyMTIsIDM2LCA3NCwgMTQwLCAxMTMsIDI0MSwgMjM0LCA3NCwgMjE0LCAxNTMsIDExMywgMjQxLCAyMzQsIAotICAgIDc0LCA5NywgMTEzLCAyNDEsIDIzNCwgNzQsIDI0NiwgMTA0LCAxMTMsIDI0MSwgMjM0LCA3NCwgMTQwLCA4MCwgMiwgMjE3LCAKLSAgICA3NywgOTcsIDgwLCAyLCAyMTcsIDc3LCAxNDAsIDgwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgODAsIDI0MywgMjQzLCAKLSAgICAxMzAsIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyNDMsIDI0MywgMTMwLCAxMjAsIDEyNCwgODAsIDIsIAotICAgIDI1MiwgMTI3LCAxNDAsIDgwLCAyLCAxMDMsIDk3LCA4MCwgMiwgMTAzLCAxNDAsIDgwLCAyLCAyMzIsIDEyMywgOTcsIDgwLCAKLSAgICAyLCAyMzIsIDEyMywgNDMsIDQ0LCAyMTIsIDM2LCA3NCwgNDMsIDQ0LCA4MCwgMiwgOTEsIDI0NiwgMTA0LCAyMTAsIDM1LCAKLSAgICA3NCwgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc3LCAyMzMsIDM3LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzcsIDIyMiwgCi0gICAgMjQxLCAyNDYsIDEwNCwgODAsIDIsIDIxNiwgNzcsIDIzMywgMzcsIDI0NiwgMTA0LCA4MCwgMiwgMjE2LCA3NywgMjIyLCAKLSAgICAyNDEsIDk3LCA4MCwgMiwgMjQ5LCAxNjEsIDI0NiwgMTAzLCAyNDYsIDEwNCwgODAsIDIsIDI0OSwgMTYxLCAyMzMsIDM3LCAKLSAgICAyNTQsIDg4LCAyMTYsIDE0LCAyMjAsIDE1MywgNzQsIDI1MCwgMiwgMjE2LCAxNCwgMjIwLCAxNTMsIDc0LCAyMjgsIDU2LCAKLSAgICAyMTIsIDksIDgwLCAyMTYsIDQyLCAxOTksIDEzMCwgMTQwLCA4MCwgMjE2LCA0MiwgMjUyLCAxNDEsIDExNywgOTcsIDgwLCAKLSAgICAyMTYsIDQyLCAxMzAsIDI1NCwgODgsIDIwNCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjA0LCAyNTAsIDM2LCA3NCwgMTQwLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIxNCwgMTUyLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIAotICAgIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAyMzMsIDM3LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMTQsIDE1MiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMjQ2LCAxMDMsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAyMzMsIDM3LCA5NywgODAsIDExNywgMTQwLCA3NCwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAKLSAgICAyNDYsIDEwNCwgNzQsIDE0MCwgODAsIDExNywgOTcsIDc0LCAxNDAsIDIyNiwgNzAsIDI1MywgMjQ3LCAyMTQsIDE1MywgCi0gICAgMjI2LCA3MCwgMjUzLCAyNDcsIDk3LCAyMjYsIDcwLCAyNTMsIDI0NywgMjQ2LCAxMDQsIDIyNiwgNzAsIDI1MywgMjQ3LCAKLSAgICAxNDAsIDI0MSwgMjU1LCAxMTcsIDk3LCAyNDEsIDI1NCwgOTcsIDI0MSwgMjU1LCAxMTcsIDE0MCwgMjQxLCAyNTQsIDE0MCwgCi0gICAgNTIsIDgwLCAyLCA5MSwgNDMsIDQ0LCA1MiwgODAsIDIsIDkxLCA5NywgNTIsIDgwLCAyLCA5MSwgMTQwLCA1MiwgNzQsIAotICAgIDIxNCwgMTUzLCA1MiwgNzQsIDk3LCA1MiwgNzQsIDI0NiwgMTA0LCA1MiwgNzQsIDQzLCA0NCwgNTIsIDc0LCAxMjAsIDEyNCwgCi0gICAgNTIsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDUyLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA1MiwgNzQsIDE0MCwgMjE1LCAyMTEsIDc0LCA5NywgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDIxOCwgMjMwLCA3NCwgOTcsIDIxOCwgMjMwLCA3NCwgMjE0LCAxNTMsIDgwLCAyLCA1MiwgOTEsIDI0NiwgCi0gICAgMTA0LCA4MCwgMiwgNTIsIDkxLCAxNDAsIDI0OCwgMTU1LCA3NCwgMjE0LCAxNTMsIDI0OCwgMTU1LCA3NCwgOTcsIDI0OCwgCi0gICAgMTU1LCA3NCwgMjQ2LCAxMDQsIDI0OCwgMTU1LCA3NCwgMTQwLCA4MCwgMjE2LCA0MiwgMTMwLCA5NywgODAsIDIxNiwgNDIsIAotICAgIDEzMCwgMTQwLCA3MSwgNzQsIDIxNCwgMTUzLCA3MSwgNzQsIDk3LCA3MSwgNzQsIDI0NiwgMTA0LCA3MSwgNzQsIDIxNCwgCi0gICAgMTUzLCA3MSwgODAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAyMjUsIDIxNCwgMjE0LCAKLSAgICAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIDIyNSwgMjE1LCAyLCAyMDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIAotICAgIDIyNSwgMjE1LCAyLCA2NywgMTMwLCAyMTQsIDE1MywgNzEsIDUyLCA3NCwgMjE0LCAxNTMsIDcxLCA1MiwgODAsIDIyNiwgCi0gICAgMTk3LCAyMjUsIDIxNCwgOTcsIDcxLCA4MCwgMjQzLCAyNDMsIDIxMiwgNTYsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIxNiwgCi0gICAgNDIsIDI0OSwgMTYwLCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIDIxNiwgNDIsIDI0OSwgMTYwLCAxMjAsIDEyNCwgNzEsIDc0LCAKLSAgICA0NCwgODAsIDIsIDQsIDI1MCwgMzUsIDI0NiwgMTA0LCA4MCwgMTQwLCA2NCwgMjE0LCAxNTMsIDc0LCAxMzQsIDk3LCAyNTMsIAotICAgIDI0NywgMTQwLCA4MCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNjcsIDkxLCAxNDAsIAotICAgIDgwLCAyLCA1MiwgNjcsIDkxLCA5NywgODAsIDIsIDUyLCA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgCi0gICAgMjI2LCAxNzMsIDc0LCA5NywgMjI2LCAxNzMsIDc0LCA0MywgNDQsIDIyNiwgMTczLCA3NCwgMzEsIDI1NCwgMTU0LCAyNDksIAotICAgIDIxNCwgMjI1LCAyNTMsIDI0NywgMjMzLCAyMTYsIDE4NywgMjQ1LCAyNywgMjE2LCAxODcsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDUsIDI4LCAyNDUsIDE1MiwgMjIwLCAxMjcsIDIzNSwgMjQ1LCAyMjksIDIyMSwgMjQ1LCAxNzAsIDIyNiwgMjMxLCAyMjgsIAotICAgIDUyLCAyNTQsIDEyNCwgMjQ1LCAxNzAsIDIyNiwgMjMxLCA0LCAyNDUsIDE3MCwgMjI2LCAyMzEsIDI0OSwgMTg2LCAyNTMsIAotICAgIDIzOCwgMjMxLCA2MiwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjMxLCA2MiwgNCwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMzEsIDYyLCAyNDUsIDE0MywgNjQsIDIyNCwgMTcyLCAyMzAsIDI0LCAyMjQsIDE4MCwgMjMwLCAKLSAgICAyNCwgMjQ5LCAxNjUsIDIzMCwgMjQsIDIxOCwgNDAsIDIzMCwgMTgyLCA1MCwgMjMwLCAxODAsIDUwLCA1OSwgMjI1LCAyMiwgCi0gICAgMjQ3LCAxNjksIDIxOSwgOTUsIDIyMCwgMTI4LCAyMzAsIDE4MSwgMjUzLCAyMTcsIDIyNiwgMTY3LCAyMjIsIDIzNCwgMjI2LCAKLSAgICAxNjcsIDI1MSwgMTE0LCAyMjYsIDE2NywgNDIsIDIyMiwgMTkzLCAyNDksIDEwOSwgMjIyLCAxOTMsIDI0NCwgNCwgMjIyLCAKLSAgICAxOTMsIDIyNCwgMTY4LCAxMTEsIDIzNSwgMjM0LCA0NCwgMjU0LCAxMDksIDI1NCwgMTA5LCAyMzEsIDg4LCAyNTQsIDEwOSwgCi0gICAgMjE4LCAyNTUsIDI1NCwgMTA5LCAyNDcsIDE3MSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0NywgMTc0LCAyMjYsIDgsIDExMSwgCi0gICAgMjI4LCA1MiwgMjI2LCA4LCAxMTEsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMzUsIDE5OCwgCi0gICAgMjE0LCAxNzUsIDIzNSwgMjExLCA1MiwgMjM1LCAyMTEsIDIxNSwgMjExLCAyMzUsIDIxMSwgMjQ5LCAxODIsIDIzNSwgMjExLCAKLSAgICAyMTgsIDEzLCAyMzUsIDIxMSwgMjEzLCAxMjksIDIzNSwgMjExLCAyNTAsIDIsIDIzNSwgMjExLCAyNTAsIDIsIDI0OSwgCi0gICAgMTgyLCAyMzUsIDIxMSwgMjU0LCA4OCwgMjQ5LCAxODIsIDIzNSwgMjExLCAyMTYsIDE4NiwgMjUyLCA2NywgMjIzLCAxMzcsIAotICAgIDIyNCwgMTY5LCA1OSwgMjMwLCAxODEsIDI0NSwgMzMsIDI0MywgNDYsIDIyNCwgMTY5LCAyNDEsIDU3LCAyMTYsIDg5LCAKLSAgICAyMjYsIDE2NywgMjIzLCA0OSwgMTgyLCAyMzUsIDE5MywgMjMzLCA2NSwgMjIyLCA5MSwgMjE5LCAxNTcsIDIxMiwgMzUsIAotICAgIDIxMSwgMjAwLCAyMjQsIDE4MCwgMjI4LCA1MiwgMTgyLCAyMzAsIDE4MiwgMTgyLCAyNTMsIDIxMCwgMTI4LCAxMTEsIDIyOCwgCi0gICAgNTIsIDI1MywgMjEwLCAxMjgsIDExMSwgMjU0LCA0OCwgMTI4LCAxMTEsIDI1NCwgNDgsIDI1MSwgODgsIDIyOCwgNTIsIAotICAgIDI1NSwgNCwgMTI4LCAxMTEsIDIyOSwgMTAwLCAyNTQsIDQ4LCAyMjgsIDU5LCAyNTUsIDQsIDEyOCwgMTExLCAyNTQsIDE0OCwgCi0gICAgMTI4LCAxMTEsIDIyOCwgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjU0LCAxNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjE1LCAKLSAgICAyMTEsIDE4MiwgMjU0LCAxNTUsIDEyOCwgMTExLCAyNDUsIDk0LCAxMTEsIDI0MywgNDUsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAyMzQsIDI1MiwgMjMsIDI1NCwgNTAsIDIxNiwgMTk2LCAyMzIsIDIyMSwgMjQzLCA0NSwgMTI4LCAxMTEsIDI1NCwgNDgsIAotICAgIDEyOCwgMjE2LCA0MiwgMTc3LCAyMTYsIDE5NiwgMjM2LCAxNSwgMjI2LCAyMzEsIDIzNiwgMTUsIDY0LCAxNzcsIDI1NCwgCi0gICAgNDgsIDEyOCwgMTExLCAyNDksIDIyNywgMjQ1LCA5NywgMjQ1LCA5OCwgMjQ5LCAyMjYsIDIyMiwgMjM0LCAyMzYsIDAsIAotICAgIDEyOCwgMTExLCAyMjIsIDIzNCwgMTI4LCAxMTEsIDI0OSwgMTU0LCAxMTEsIDI0NSwgNjcsIDI0NSwgOTYsIDExMSwgMjE4LCAKLSAgICAxNTcsIDI0NSwgOTcsIDI0OCwgNTUsIDEyOCwgMTExLCAxMjgsIDIxNiwgNDIsIDI1MSwgNzgsIDI0OCwgNzIsIDIzMSwgODgsIAotICAgIDI1MSwgNzcsIDIyNCwgMTEsIDEyOCwgMTExLCAyMjgsIDUyLCAxMjgsIDExMSwgMjQwLCAxMDQsIDExMSwgMjI4LCA1MiwgCi0gICAgMjQwLCAxMDQsIDExMSwgMjE4LCAxMDksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAxMjgsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMTI4LCAxMTEsIDIzMywgMTUsIDExNywgMTI4LCAxMTEsIDI0MiwgMTMwLCAxMTcsIDEyOCwgMTExLCAyMzMsIDE1LCAKLSAgICAyNTEsIDg4LCAyMjgsIDUyLCAxMjgsIDExMSwgMjQyLCAxMzAsIDI1MSwgODgsIDIyOCwgNTIsIDEyOCwgMTExLCAyMzAsIAotICAgIDk3LCAyMzMsIDE0LCAyMzAsIDk3LCAyNDIsIDEyOSwgMjUyLCAyMywgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMjgsIDUyLCAKLSAgICAyMzMsIDE0LCAyMjgsIDUyLCAyNDIsIDEyOSwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDEyOCwgMTExLCAyMjksIAotICAgIDEwMCwgMjQyLCAxMzAsIDIyOCwgNTksIDEyOCwgMTExLCAyMzMsIDE1LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgCi0gICAgMjQyLCAxMzAsIDIyOCwgNTksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDE3NywgCi0gICAgMjMzLCAxNCwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDI0MiwgMTI5LCAyMjksIDEwMCwgMjQyLCAxMzAsIDIyOCwgCi0gICAgNTksIDIzMywgMTQsIDIyNCwgMjAyLCAyMTgsIDU1LCAyMjQsIDIwMywgMTc3LCAxMjgsIDExMSwgMjE4LCA1NiwgMTc3LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDE3NywgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAxMzgsIDIyOCwgNTIsIDIyNCwgMjA1LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1NywgMjE4LCA2NCwgMjI2LCAyMzEsIAotICAgIDIxOCwgMjIsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgNjQsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgCi0gICAgMjIsIDIyNiwgMjMxLCAyMTgsIDY0LCA2NCwgMTc3LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDE3NywgMTI4LCAxMTEsIAotICAgIDIyOSwgMTAwLCAxMTUsIDIxOCwgNjQsIDY0LCAyMjgsIDU5LCAxMjgsIDExMSwgMjI5LCAxMDAsIDExNSwgMjE4LCAyMiwgCi0gICAgNjQsIDIyOCwgNTksIDEyOCwgMTExLCAyMTgsIDY0LCA2NCwgMiwgMjI4LCA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCAyLCAKLSAgICAyMjgsIDUyLCAxMjgsIDExMSwgMjMwLCA4MSwgMjMwLCA4MiwgMjMwLCA4MywgMjMwLCA4MiwgMjE0LCAxNzUsIDQyLCAyMzYsIAotICAgIDE1LCAyMjYsIDIzMSwgNDIsIDIyNiwgMTUwLCAyMjYsIDIzMSwgNDIsIDIzNiwgMTUsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgCi0gICAgMjI2LCAxNTAsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgMjUwLCAyNTEsIDQyLCAyNDksIDEwMiwgMzcsIDIyNSwgMjIsIDM3LCAKLSAgICAyMzAsIDE4MSwgMzcsIDIxNiwgODUsIDM3LCAyNDcsIDE2OSwgMjE5LCA5NSwgMzcsIDU5LCAyMjYsIDE2NywgMzcsIDIyMiwgCi0gICAgMjM0LCAyMjYsIDE2NywgMzcsIDI1MywgMjE3LCAyMjYsIDE2NywgMzcsIDI0NSwgOTcsIDM3LCAyNDgsIDE1NiwgOTIsIAotICAgIDIyNSwgMjIsIDkyLCAyMzAsIDE4MSwgOTIsIDIxNiwgODUsIDkyLCA1OSwgMjI2LCAxNjcsIDQ0LCAyMTcsIDg3LCA0MywgCi0gICAgMjE3LCA4NywgMTI0LCAyMTcsIDg3LCAxMjAsIDIxNywgODcsIDI1MywgMjIwLCAyMzAsIDE1NiwgMjE1LCAxOTEsIDI0NCwgCi0gICAgMjUsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDQsIDIxNSwgCi0gICAgOTMsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIDE2MywgMjI4LCA1MiwgMjE1LCAxOTEsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDQsIDI2LCAyMjksIDEwMiwgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQ0LCAyMTUsIDkzLCAyMjQsIDIwMywgMjE0LCAxODQsIAotICAgIDIyMywgOTEsIDIxOCwgNTYsIDIxNCwgMTg0LCAyMjMsIDkxLCAyMjgsIDU3LCAyMTgsIDc3LCAyMjYsIDIzMSwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDU3LCAyMTgsIDc3LCA2NCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ5LCAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc3LCAxNzcsIDEyOCwgMTExLCAyMjYsIDE1MCwgMjI2LCAyMzEsIAotICAgIDIzNiwgMTUsIDIyNiwgMjMxLCAyMzAsIDg3LCAyNDEsIDIwMCwgMjQ5LCAxOTYsIDIzMSwgMTM3LCAyMzUsIDIwOCwgMjExLCAKLSAgICAxNDUsIDIyOSwgMjAyLCAyMjgsIDU4LCA0NCwgMjU0LCAxMTAsIDIsIDI1NCwgMjUsIDQ0LCAyMTUsIDIyNSwgMjMwLCAyNCwgCi0gICAgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzAsIDI0LCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIzMCwgMjQsIDIzNSwgMTk4LCAyMzAsIAotICAgIDI0LCAyMTQsIDE3NSwgMjQ3LCAyNDksIDIyNiwgMTY3LCA1OSwgMjI2LCAxNjcsIDIxOCwgMTU3LCAyMjYsIDE2NywgMjQ3LCAKLSAgICAxNjksIDIxNiwgODUsIDI1MSwgMTY0LCA0MywgMjI4LCA1NywgMjQ0LCAxODEsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDQsIAotICAgIDIyOCwgNTcsIDI0NCwgMTgxLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQzLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQ0LCAyMjAsIAotICAgIDE0OSwgMjI0LCAxODAsIDIyMywgNDksIDIxNiwgODksIDI0NSwgOTcsIDI0OSwgOTksIDIzMiwgMTQ2LCAyMjYsIDE1OCwgCi0gICAgMjQ5LCA5OSwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjE4LCA2MywgNTIsIDIxOCwgMjEsIDUyLCAyMzUsIDE5OCwgNTIsIAotICAgIDIxNCwgMTc1LCAyMjUsIDQ3LCAxMjgsIDIyLCAyMjYsIDgsIDExMSwgMjMzLCAxNSwgMiwgMjQ3LCAxMjAsIDI0MiwgMTMwLCAKLSAgICAyLCAyNDcsIDEyMCwgMjEzLCAxODcsIDIzMCwgOTcsIDIzMywgMTQsIDIxMywgMTg3LCAyMzAsIDk3LCAyNDIsIDEyOSwgCi0gICAgMjMzLCAxNSwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgCi0gICAgMTQsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyMjQsIDIwMiwgMTI4LCAyMTYsIDQyLCAxNzcsIDIxOCwgNTUsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIAotICAgIDIwNiwgMTc3LCAyNDUsIDk5LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1OCwgMTc3LCAyNDUsIDk5LCAyMjgsIDUyLCA0MiwgCi0gICAgMjM2LCAxNSwgNjQsIDE3NywgMTI4LCAxMTEsIDIyOCwgNTIsIDQyLCAyMjYsIDE1MCwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAKLSAgICAyMzYsIDE1LCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIDExMSwgNDIsIDIyNiwgMTUwLCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIAotICAgIDExMSwgMjMzLCAxNSwgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyNDIsIDEzMCwgMjUxLCA4OCwgMjI4LCA1MiwgCi0gICAgMjQ1LCA5NCwgMTExLCAyMjQsIDIwMywgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAyNTEsIDg4LCAKLSAgICAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIyOCwgNTIsIDIyOCwgNTcsIDIxOCwgNzcsIDIyNiwgMjMxLCAyNDcsIDEzOCwgCi0gICAgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDUyLCAyMjgsIDU3LCAyMTgsIDc3LCAKLSAgICA2NCwgMTc3LCAxMjgsIDExMSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCAKLSAgICA3NywgMTc3LCAyNDUsIDk5LCA2NywgMjQ1LCAxNjMsIDIzMCwgMjIyLCAyMDMsIDI0NSwgMTYzLCAxMjAsIDQ0LCAyNDcsIAotICAgIDI1NSwgMjQ1LCAxNjMsIDEyNCwgNDQsIDI0NywgMjU1LCAyNDUsIDE2MywgMjQ1LCAxNzAsIDY0LCAyLCAxOTksIDIwMywgCi0gICAgOTEsIDI0NSwgMTcwLCA2NCwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCA0LCAKLSAgICAyNDUsIDE3MCwgNjQsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgMjQ1LCAxNzAsIAotICAgIDY0LCAyLCA1OSwgNDgsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIDQsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIAotICAgIDI0NSwgMTcwLCA2NCwgMiwgMjE0LCAxODMsIDI0NSwgMTcwLCA2NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTAsIDI0OSwgMTg2LCAKLSAgICAyLCAxOTksIDIwMywgOTEsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgCi0gICAgOTEsIDQsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDI0OSwgCi0gICAgMTg2LCAyLCAyMjYsIDEyMywgNCwgMjQ5LCAxODYsIDIsIDIyNiwgMTIzLCAyMTAsIDE2MCwgMTg3LCAyNTIsIDE3MywgMjMxLCAKLSAgICA2MSwgMjQ3LCAyNTAsIDUwLCAyNDUsIDE3MiwgNzQsIDI0MCwgMjM0LCAxMjAsIDI1MywgMjQ5LCAxMjQsIDI1MywgMjQ5LCAKLSAgICAyMjQsIDE3NSwgMjI1LCAxNjUsIDIxMiwgMzIsIDIzMiwgMjEzLCA0MywgMjUwLCAxODEsIDQ0LCAyNTAsIDE4MSwgNDMsIAotICAgIDI0NCwgNTcsIDQ0LCAyNDQsIDU3LCAyNTEsIDE3NSwgNDQsIDI0OSwgMTMyLCAyNTEsIDE3NSwgNDMsIDI0OSwgMTMyLCAKLSAgICAyMTYsIDE0LCA0NCwgMjQ5LCAxMzIsIDIxNiwgMTQsIDQzLCAyNDksIDEzMiwgMjIzLCA0OSwgMjI4LCA1MiwgNTAsIDQyLCAKLSAgICAyMzIsIDEwNCwgMjU0LCAyNSwgMjIxLCAxNjQsIDIyMSwgMTcxLCAyMTcsIDEsIDIyMywgMTIwLCAyMjQsIDI0MSwgMjM1LCAKLSAgICAyMzgsIDIxMywgMTY1LCAyMTgsIDIzNCwgMjI1LCA0MSwgNjQsIDIzNSwgMjA3LCA1MCwgMjE1LCA5NCwgMjI4LCA1MiwgNTAsIAotICAgIDIxMiwgNDIsIDI0MCwgMjM2LCAyMTYsIDE0LCA0MywgMjQ5LCAxNjAsIDIxNiwgMTQsIDQ0LCAyNDksIDE2MCwgMjUxLCAKLSAgICAxNzUsIDQzLCAyNDksIDE2MCwgMjUxLCAxNzUsIDQ0LCAyNDksIDE2MCwgMjE2LCAxNCwgMTYzLCAyMzUsIDIxMSwgMjUxLCAKLSAgICAxNzUsIDE2MywgMjM1LCAyMTEsIDI0MywgMjQwLCAyMTksIDc1LCAxMjAsIDI1MywgMjUwLCAyNTIsIDI0LCAxMTMsIDIwMywgCi0gICAgMjUyLCAxMjksIDIyNiwgMTYwLCAyMzQsIDEzOCwgMjQ1LCA5MCwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyMTEsIAotICAgIDE3OSwgMjM2LCAwLCAxMTUsIDIyMywgMTE3LCAyNTEsIDE2MywgMjM0LCAxMzcsIDIzMywgNDIsIDI1NCwgMTEwLCAxMjcsIAotICAgIDIyMiwgMjQ3LCAyNTQsIDExMCwgMTI3LCAyNDUsIDkwLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjMzLCA0NiwgMjUyLCAzNSwgCi0gICAgMjIyLCAyMzMsIDI0OSwgNzAsIDI1NCwgMTU1LCAyNTQsIDEsIDIxNywgMTgxLCAyMTYsIDQsIDIyMiwgMTIzLCAyNDcsIAotICAgIDIxNSwgMjI2LCAxNTEsIDI0OSwgMTk4LCAyMTcsIDUyLCAyMTksIDg2LCAyNDksIDE1MSwgMjQ5LCAxNTAsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjQwLCAxNTEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE4LCAyMjgsIDIyNCwgMjcsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIAotICAgIDE3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIDI0OCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI1MCwgMzUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjUwLCAzNiwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjM1LCA1NiwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMTksIDk2LCAxMzAsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUyLCAxODEsIDEzMCwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMTksIDk1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDI1MiwgMTgwLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIzMywgMTQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjQyLCAxMjksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTQwLCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDk3LCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDE0MCwgNzQsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgOTcsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDI1MiwgMTgwLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjQ4LCA1NSwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMTI0LCAyNTAsIDIzOCwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDgsIDU0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgCi0gICAgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTQsIDE1MywgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMTQsIDE1MywgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMjYsIDEyMywgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIDY2LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAxMjAsIDI1MCwgMjM4LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OCwgNjUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0NiwgMTA0LCAyMTQsIDE5LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NiwgMTA0LCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjMsIAotICAgIDI1MywgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCA1NSwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ3LCAyNDksIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIzNSwgNTcsIDIxNCwgMTgzLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgCi0gICAgMjIwLCA1LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMywgMjUzLCAyMjQsIDI3LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI1MCwgMzYsIDIxOCwgMTU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OSwgMjI2LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgCi0gICAgNjYsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTgsIDE1NywgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDIzNSwgNTcsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyNDgsIDEsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMTI0LCAyMjAsIDUsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDQzLCAyMjAsIDUsIAotICAgIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxNiwgODksIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNDIsIDEzMCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OSwgMjIwLCAxMzAsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ4LCA2NiwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxMCwgMzQsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMjE4LCAxMzYsIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjAsIDE1MSwgMjE0LCAxODMsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjI4LCA1MiwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAyMjQsIDEyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjUwLCAyMzksIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAxMjAsIDI1MCwgMjM5LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjM1LCAxODUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjIzLCAzNywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNTQsIDE0NCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ1LCAxMDEsIDIxNCwgMTgzLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIzNSwgMTg2LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMiwgMjE0LCAKLSAgICAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjU0LCAxNDMsIDIyOCwgNTIsIDI1MCwgMTMwLCA3OCwgNDQsIDI1NCwgCi0gICAgMTEwLCAyLCAyNDYsIDEwNCwgMjEwLCAzNSwgNzQsIDIxOSwgMjM1LCAyMDQsIDI1MSwgMTYzLCAyNTIsIDQ1LCA4NywgNjcsIAotICAgIDIzMiwgMjE0LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNSwgMjE2LCA4NywgMjQ5LCAxODMsIDIxNCwgMTgxLCA4NywgCi0gICAgMjQ3LCAxODksIDIxNCwgMTgxLCA4NywgMjQ1LCAxNTQsIDg3LCAyNDksIDIxMCwgODcsIDcxLCA0MiwgMiwgMjUwLCAxNzUsIAotICAgIDY3LCAyMzIsIDIxMywgMjQ1LCAxMzAsIDg3LCAyNTQsIDEzOSwgMjM0LCAxMzksIDg3LCAyNDEsIDIxMywgODcsIDM3LCAKLSAgICAyMDMsIDI1MiwgMTQxLCAyLCAyMjgsIDUwLCAzNywgMjE1LCAyMjYsIDI0NiwgMTA2LCAyNTEsIDEzNSwgMjUwLCAzNiwgMiwgCi0gICAgMjI4LCA1NCwgNzQsIDIxNCwgMTc5LCA4NywgMjMwLCAxMzcsIDg3LCAyNDAsIDE2NCwgODcsIDIyNiwgMTc0LCAyNDIsIDU5LCAKLSAgICA4NywgMjI2LCAxNzQsIDIzMywgMTQ3LCA4NywgMjI1LCAyNDQsIDg3LCAyMjUsIDI0MywgODcsIDI0NywgMTk3LCAyNDksIAotICAgIDk3LCAxNiwgMjQ0LCAyMCwgMTA1LCAyMTksIDUwLCA4NywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI3LCAyNDgsIAotICAgIDgzLCAyMjAsIDEzOCwgMjM0LCAxMzksIDg3LCAyMjQsIDE5MiwgMjI2LCA3NSwgMjI5LCA4MiwgMjI2LCA3NSwgMjI0LCAKLSAgICAxODgsIDIyMSwgMTg5LCA4NywgMjUwLCAxNywgMjIxLCAxODksIDg3LCA0MywgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCA0MywgCi0gICAgMjI2LCA0LCAyNDUsIDIxLCA0MywgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0NCwgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCAKLSAgICA0NCwgMjI2LCA0LCAyNDUsIDIxLCA0NCwgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0MywgNDIsIDI1MSwgMTU4LCAyMTQsIAotICAgIDE2MCwgMjQ5LCAxNjAsIDQzLCA0MiwgMjUxLCAxNTgsIDI0NSwgMjEsIDQzLCA0MiwgMjUxLCAxNTgsIDIzMiwgMTA4LCAKLSAgICAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMjE0LCAxNjAsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyNDUsIAotICAgIDIxLCA0NCwgNDIsIDI1MSwgMTU4LCAyMzIsIDEwOCwgMjQ5LCAxNjAsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjE0LCAKLSAgICAxNjAsIDEwMywgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQzLCAyNDksIDk5LCAyNTEsIAotICAgIDE1OCwgMjMyLCAxMDgsIDEwMywgMjQ5LCA5OSwgMjUxLCAxNTgsIDI0NSwgMjEsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgCi0gICAgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQ0LCAyNDksIDk5LCAKLSAgICAyNTEsIDE1OCwgMjMyLCAxMDgsIDEwMywgMjM1LCAyMTIsIDI0NSwgMjEsIDIwMywgMjMyLCAyMTQsIDI0NSwgMjEsIDIxNCwgCi0gICAgMTYwLCA0MywgMTc3LCAyMzIsIDEwOCwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjEsIDE3MiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAxNzcsIDIzMiwgMTA4LCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyMSwgMTcyLCAyMTgsIDQxLCAyMTYsIDEzLCAyMTgsIAotICAgIDQxLCAyNTEsIDE3NCwgMjE2LCAxNCwgNDIsIDEyNywgMjUxLCAxNzUsIDQyLCAxMjcsIDI1MSwgMTc1LCA0MiwgMjUxLCAKLSAgICAxNTgsIDExNywgMjE2LCAxNCwgNDIsIDEyNywgMzQsIDE2LCAyNTEsIDE3NCwgNDMsIDY3LCA5MywgMjMyLCAyMTMsIDQ0LCAKLSAgICA2NywgOTMsIDIzMiwgMjEzLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIxMiwgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMTEsIDIwMywgCi0gICAgMjIxLCAyMDUsIDIzMiwgMjEwLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIwOSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAKLSAgICAyMTYsIDE0LCAyMjIsIDI1MSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyNTEsIDE3NSwgMjIyLCAyNTEsIDI0OCwgNDYsIAotICAgIDE2LCAxOTIsIDY3LCAyLCAyNTAsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDI1MCwgMzUsIDI0OCwgCi0gICAgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDIwMywgMiwgMjUwLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIsIDIxNSwgMjI1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAKLSAgICAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxMiwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIAotICAgIDEyNCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyNDEsIDQ0LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyNDEsIDQ0LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxNiwgMTQsIDIzMywgNDYsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgCi0gICAgMjUxLCAxNzUsIDIzMywgNDYsIDQyLCAyNDQsIDMyLCAyMjMsIDU0LCA4NywgMjQ1LCAxODIsIDg3LCA2NywgMjMyLCAyMTQsIAotICAgIDI0NSwgMjEsIDIzMSwgMzMsIDI1MSwgMTQ2LCAyMzEsIDMzLCAxOTksIDExNywgMjE5LCAyNTAsIDIzMSwgMzMsIDIxOSwgCi0gICAgMjUxLCAxMTcsIDIzMiwgMTM3LCAyMzEsIDMzLCAxOTksIDExNywgMTEzLCAyMTksIDIzNywgMjMxLCAzMywgMTEzLCAyMTksIAotICAgIDIzOCwgMTE3LCAyMzIsIDEzNywgMjMxLCAzMywgMTEzLCAyMTksIDIzOCwgMjM1LCA2NCwgMjMxLCAzMywgMjE1LCAyMDgsIAotICAgIDIzMSwgMzMsIDIxNiwgMjIzLCAyMzEsIDMzLCAyMjUsIDE4OCwgMjQ1LCAyMjQsIDI0MiwgMTIyLCAyNDMsIDIxOSwgMjE2LCAKLSAgICAxNCwgMjI2LCAzLCAyNTEsIDE3NSwgMjI2LCAzLCAyMTYsIDE0LCAyNDksIDk5LCAxMjcsIDI1MSwgMTc1LCAyNDksIDk5LCAKLSAgICAxMjcsIDIxNiwgMTQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNTEsIDE3NSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDcxLCAKLSAgICAyMTUsIDIzOSwgMjUyLCAzNSwgMjIyLCAyMzQsIDIsIDI1MCwgMzUsIDIxOCwgMTIwLCAyNDQsIDY0LCAyNTUsIDE3LCAyNDksIAotICAgIDk2LCAyNDUsIDE3MSwgMjM1LCAxOTgsIDI0OCwgODMsIDI0NSwgMjQsIDg3LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNSwgCi0gICAgODUsIDIzMywgNDIsIDUyLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYyLCA1MiwgMjE1LCAyMjUsIDg1LCAyNDYsIDEwNSwgNTIsIAotICAgIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIzMywgNDIsIDUyLCAyMTUsIAotICAgIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIyMiwgMjQ3LCAyMTUsIDIyNiwgMiwgNTIsIDY3LCAxMzAsIDI1NCwgMTczLCAyNTAsIAotICAgIDMsIDIxOCwgMTI2LCAyMTYsIDg2LCAyNTAsIDMsIDI0MCwgMjM3LCAyLCAyNDQsIDUwLCAyMjEsIDI0MSwgMTYsIDMxLCAKLSAgICAyMjcsIDIwMiwgMTYsIDMxLCAyMTgsIDE1MiwgNjQsIDI0MSwgMjMzLCAxNiwgMzEsIDIxOCwgMTUyLCA2NCwgMjE2LCAyMTIsIAotICAgIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTYsIDIxMiwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNSwgMjQzLCAxNiwgMzEsIAotICAgIDI0NSwgMTMyLCAxNiwgMzEsIDI1NSwgNywgMTYsIDMxLCAyNTIsIDQ0LCAxNiwgMzEsIDI1MiwgMTc5LCAxNiwgMzEsIDIwMywgCi0gICAgMjE3LCA4OSwgMTYsIDMxLCAyMzIsIDIxNCwgMjQ0LCAxNDUsIDE2LCAzMSwgNjcsIDIxNywgODksIDE2LCAzMSwgMjQ0LCAKLSAgICAyMCwgMjQ0LCAxNDUsIDE2LCAzMSwgMjUwLCAyMzAsIDIyMywgNTMsIDE2LCAzMSwgMjIwLCAyOCwgMjI2LCAxMzAsIDE2LCAKLSAgICAzMSwgMjIwLCAyOCwgMjM1LCAyNTUsIDE2LCAzMSwgMjQ4LCAxNTEsIDIzMiwgMjA0LCAyNDUsIDc3LCAxNiwgMzEsIDI0OCwgCi0gICAgMzEsIDI0OSwgMTc4LCAxMTAsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDEwNSwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIAotICAgIDE3OCwgMTU4LCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgMTc4LCAxNjEsIDE2LCAzMSwgMTUyLCAyNTUsIDcsIDE2LCAzMSwgCi0gICAgMjE3LCAxNzcsIDIzNiwgNjIsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0NCwgMjUxLCAyMTMsIDE2LCAzMSwgMjUxLCAKLSAgICA1LCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjMxLCA4MSwgMTYsIDMxLCAyMTgsIDYxLCAxNiwgMzEsIDI0NSwgNzcsIDE2LCAKLSAgICAzMSwgMjQ0LCAxMDcsIDIyMCwgMTM3LCAxNiwgMzEsIDI0MiwgMTIxLCAyMjAsIDEzNywgMTYsIDMxLCAyMjMsIDEyMSwgCi0gICAgMjIwLCAxMzcsIDE2LCAzMSwgMjE0LCAxNzQsIDIyMCwgMTM3LCAxNiwgMzEsIDIxOSwgMTgsIDE2LCAzMSwgMjQ4LCA2MywgCi0gICAgMjUxLCAyMTYsIDg3LCAyMDQsIDI1MSwgMTYzLCAxNiwgMzEsIDIyOSwgODUsIDE2LCAzMSwgMjQ4LCA2NCwgMjQ0LCAyMCwgCi0gICAgMTA1LCAxNiwgMzEsIDIxOCwgNjIsIDI0NCwgMjAsIDEwNSwgMjI2LCAyNDEsIDEwMywgMjI2LCAyNDEsIDI1MCwgMTUyLCAKLSAgICAyMjYsIDI0MSwgMjQ0LCAyMywgMjI2LCAyNDEsIDIzNSwgMTkzLCAyNDQsIDIzLCAyMjYsIDI0MSwgMjUyLCA0MiwgMjUxLCAKLSAgICAxMjQsIDIyNiwgMjQxLCAyNTEsIDE3MCwgMjE2LCAxMTEsIDIyNiwgMjQxLCAyNTEsIDE1NSwgMjUyLCAxNDYsIDI0MCwgCi0gICAgMTAzLCAyMjYsIDI0MSwgMjU0LCAxMjcsIDY0LCAyNTAsIDEyOSwgMjI2LCAyNDEsIDI0OCwgMTU2LCAyMjYsIDI0MSwgMjQ5LCAKLSAgICA4NywgMjU1LCAxMSwgMjI3LCAyMDAsIDIyNiwgMjQxLCA1MiwgMjUyLCAxODAsIDM3LCAyMSwgMTEwLCAzNywgMjEsIDEwNSwgCi0gICAgMzcsIDIxLCAxNTgsIDM3LCAyMSwgMTYxLCAzNywgMjEsIDE4OSwgMzcsIDIxLCAxOTQsIDM3LCAyMSwgMTk4LCAzNywgMjEsIAotICAgIDE5NSwgMzcsIDIxLCAyMDAsIDM3LCA1NCwgMjE2LCAyNDcsIDM3LCA1NCwgMjQ1LCAxNjcsIDM3LCA1NCwgMjE1LCA3NiwgCi0gICAgMzcsIDU0LCAyMTYsIDE2NCwgMzcsIDU0LCAyNDQsIDUsIDM3LCA1NCwgMjQ0LCAxMTgsIDM3LCA1NCwgMjE5LCAxMTksIDM3LCAKLSAgICA1NCwgMjIwLCAxMTksIDM3LCA1NCwgMjQ1LCAxOTAsIDM3LCA1NCwgMjI4LCAxOTcsIDM3LCA1NCwgMjE1LCA3MywgODgsIAotICAgIDIxLCAxMTAsIDg4LCAyMSwgMTA1LCA4OCwgMjEsIDE1OCwgODgsIDIxLCAxNjEsIDg4LCAyMSwgMTg5LCA4OCwgMjEsIDE5NCwgCi0gICAgODgsIDIxLCAxOTgsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDIwMCwgODgsIDU0LCAyMTYsIDI0NywgODgsIDU0LCAyNDUsIAotICAgIDE2NywgODgsIDU0LCAyMTUsIDc2LCA4OCwgNTQsIDIxNiwgMTY0LCA4OCwgNTQsIDI0NCwgNSwgODgsIDU0LCAyNDQsIDExOCwgCi0gICAgODgsIDU0LCAyMTksIDExOSwgODgsIDU0LCAyMjAsIDExOSwgODgsIDU0LCAyNDUsIDE5MCwgODgsIDU0LCAyMjgsIDE5NywgCi0gICAgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAxMTMsIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgMjEsIDEzNCwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjQ0LCAxMSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgCi0gICAgMjQ0LCA4MSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjE5LCAxMjUsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIyMCwgCi0gICAgMTIyLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyNDUsIDE5MywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjI4LCAyMDAsIAotICAgIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNiwgMjQ4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyNDUsIDE2OCwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCA1NCwgMjE1LCA3NywgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjE2LCAxNjUsIDI0MywgMjI5LCAKLSAgICAyMTgsIDEyOSwgNTQsIDI0NCwgNiwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjQ0LCAxMTksIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgNTQsIDIxOSwgMTIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMjAsIDEyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA1NCwgMjQ1LCAxOTEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIyOCwgMTk4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAKLSAgICAyMTUsIDc0LCAyNDMsIDIyOSwgMjE4LCAxMjksIDg4LCA3LCA0LCAxLCA2MSwgODgsIDcsIDQsIDEsIDI1MywgMTU4LCA4OCwgCi0gICAgNywgNCwgMSwgMjUxLCA2NiwgODgsIDcsIDQsIDEsIDI0OSwgNjAsIDg4LCA3LCA0LCAxLCA3NSwgODgsIDcsIDQsIDEsIAotICAgIDI0NSwgNiwgODgsIDcsIDQsIDEsIDI0MywgMjAyLCA4OCwgNywgNCwgMSwgMjQyLCA2MCwgODgsIDcsIDQsIDEsIDczLCA4OCwgCi0gICAgNywgNCwgMSwgMjM1LCAxNDQsIDg4LCA3LCA0LCAxLCAyMzUsIDIzLCA4OCwgNywgNCwgMSwgMTU2LCA4OCwgNywgNCwgMSwgCi0gICAgMTkzLCA4OCwgNywgNCwgMSwgMjMwLCAyNSwgODgsIDcsIDQsIDEsIDc2LCA4OCwgNywgNCwgMSwgMjI2LCAxMDUsIDg4LCA3LCAKLSAgICA0LCAxLCAyMjQsIDk2LCA4OCwgNywgNCwgMSwgMTUzLCA4OCwgNywgNCwgMSwgMjIyLCA5MSwgODgsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCA4OCwgNywgNCwgMSwgNzAsIDg4LCA3LCA0LCAxLCAyMTQsIDEwNSwgODgsIDcsIDQsIDEsIDIxMiwgOTgsIDg4LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgODgsIDcsIDQsIDEsIDIxMSwgMTE3LCA4OCwgNywgNCwgMSwgMjEwLCAxNTksIDM3LCA3LCA2LCAKLSAgICAxLCA2MSwgMzcsIDcsIDYsIDEsIDI1MywgMTU4LCAzNywgNywgNiwgMSwgMjUxLCA2NiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDM3LCA3LCA2LCAxLCA3NSwgMzcsIDcsIDYsIDEsIDI0NSwgNiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAzNywgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgMzcsIDcsIDYsIDEsIDczLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIDM3LCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTkzLCAzNywgNywgNiwgMSwgMjMwLCAyNSwgMzcsIDcsIDYsIDEsIAotICAgIDc2LCAzNywgNywgNiwgMSwgMjI2LCAxMDUsIDM3LCA3LCA2LCAxLCAyMjQsIDk2LCAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgMzcsIDcsIDYsIDEsIDIxNywgMTUyLCAzNywgNywgNiwgMSwgNzAsIDM3LCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIDcsIDQsIDEsIDI1MywgMTU4LCAzNywgNywgNCwgCi0gICAgMSwgMjUxLCA2NiwgMzcsIDcsIDQsIDEsIDI0OSwgNjAsIDM3LCA3LCA0LCAxLCA3NSwgMzcsIDcsIDQsIDEsIDI0NSwgNiwgCi0gICAgMzcsIDcsIDQsIDEsIDI0MywgMjAyLCAzNywgNywgNCwgMSwgMjQyLCA2MCwgMzcsIDcsIDQsIDEsIDczLCAzNywgNywgNCwgCi0gICAgMSwgMjM1LCAxNDQsIDM3LCA3LCA0LCAxLCAyMzUsIDIzLCAzNywgNywgNCwgMSwgMTU2LCAzNywgNywgNCwgMSwgMTkzLCAKLSAgICAzNywgNywgNCwgMSwgMjMwLCAyNSwgMzcsIDcsIDQsIDEsIDc2LCAzNywgNywgNCwgMSwgMjI2LCAxMDUsIDM3LCA3LCA0LCAKLSAgICAxLCAyMjQsIDk2LCAzNywgNywgNCwgMSwgMTUzLCAzNywgNywgNCwgMSwgMjIyLCA5MSwgMzcsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCAzNywgNywgNCwgMSwgNzAsIDM3LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDQsIDEsIDIxMiwgOTgsIDM3LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTE3LCAzNywgNywgNCwgMSwgMjEwLCAxNTksIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMTUyLCAzNywgNTQsIDI0NSwgMTY3LCAxNTIsIDM3LCA1NCwgMjE1LCA3NiwgMTUyLCAzNywgNTQsIDIxNiwgCi0gICAgMTY0LCAxNTIsIDM3LCA1NCwgMjQ0LCA1LCAxNTIsIDM3LCA1NCwgMjQ0LCAxMTgsIDE1MiwgMzcsIDU0LCAyMTksIDExOSwgCi0gICAgMTUyLCAzNywgNTQsIDIyMCwgMTE5LCAxNTIsIDM3LCA1NCwgMjQ1LCAxOTAsIDE1MiwgMzcsIDU0LCAyMjgsIDE5NywgMTUyLCAKLSAgICAzNywgNTQsIDIxNSwgNzMsIDUyLCAzNywgMjEsIDExMCwgNTIsIDM3LCAyMSwgMTA1LCA1MiwgMzcsIDIxLCAxNTgsIDUyLCAKLSAgICAzNywgMjEsIDE2MSwgNTIsIDM3LCAyMSwgMTg5LCA1MiwgMzcsIDIxLCAxOTQsIDUyLCAzNywgMjEsIDE5OCwgNTIsIDM3LCAKLSAgICAyMSwgMTk1LCA1MiwgMzcsIDIxLCAyMDAsIDUyLCAzNywgNTQsIDIxNiwgMjQ3LCAxNTIsIDM3LCAyMSwgMjEwLCA4NiwgOTMsIAotICAgIDk5LCAxOTIsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjEzLCAyMzksIDkzLCA5OSwgCi0gICAgMTE0LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIAotICAgIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjEzLCAyMzksIAotICAgIDkzLCA5OSwgMTE0LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDE5MiwgMjI0LCAyNCwgMjQ4LCAKLSAgICAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyMjQsIDI0LCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIyNCwgCi0gICAgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIyNCwgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAKLSAgICAxOTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgCi0gICAgMTE0LCAyMiwgNDQsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjQsIAotICAgIDIyLCAyMzMsIDQ2LCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgCi0gICAgNDMsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDIzMiwgCi0gICAgMjMwLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAyMzMsIDQ2LCA5MywgCi0gICAgOTksIDEyMCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDExNCwgMTIwLCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgNjcsIAotICAgIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDQ0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDE5MiwgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDEyNCwgMjQxLCAKLSAgICAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIAotICAgIDY3LCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxMTQsIDIyLCA0MywgMjMyLCAyMzAsIAotICAgIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0MywgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQzLCAxMjQsIAotICAgIDI0MSwgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMTI0LCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCAxMjQsIAotICAgIDIzMiwgMjMwLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDIwMywgCi0gICAgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCAxMjQsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIDIyLCAKLSAgICA0NCwgMTI0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAKLSAgICAyNDEsIDQ0LCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIAotICAgIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgCi0gICAgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgCi0gICAgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDY3LCAKLSAgICAyMiwgMjQxLCA0NCwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgCi0gICAgNDMsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgCi0gICAgMjIsIDEyNCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDEyMCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICA2NywgMTE0LCAyMiwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgCi0gICAgOTMsIDk5LCA0NCwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTI0LCAxMTQsIDIyLCAKLSAgICA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICAxMjQsIDE5MiwgMjIsIDEyMCwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDEyNCwgMjAzLCAyNDEsIAotICAgIDIyMSwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDY3LCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAyMiwgNDQsIDY3LCAKLSAgICAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjQxLCAKLSAgICA0NCwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjEzLCAKLSAgICAyMzksIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDUyLCAyNDEsIDQ0LCA5MywgOTksIAotICAgIDUyLCAyMTMsIDIzOSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIAotICAgIDIyLCA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMjE5LCAxNTUsIAotICAgIDIyLCA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCAKLSAgICA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCAKLSAgICA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDQsIAotICAgIDIxOSwgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDQzLCAKLSAgICAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjMzLCA0NiwgCi0gICAgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAyMiwgMjAzLCAyMTksIAotICAgIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIAotICAgIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgMjAzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDIwMywgMjE5LCAKLSAgICAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyNCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyMCwgCi0gICAgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDI0NywgCi0gICAgMjU1LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDIsIDIzMiwgMTA4LCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIAotICAgIDIxNCwgMTYwLCA0MywgMjE2LCA0MiwgMjMyLCAxMDgsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIDI0OSwgCi0gICAgMTMwLCA5MywgOTksIDE5MiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDIxNCwgMTYzLCA5MywgOTksIDE5MiwgMjIyLCAyNTEsIAotICAgIDkzLCA5OSwgMTkyLCAyNDYsIDEwNiwgOTMsIDk5LCAxMTQsIDIzMywgNDYsIDkzLCA5OSwgMTE0LCAyMTQsIDE2MywgOTMsIAotICAgIDk5LCAxMTQsIDIyMiwgMjUxLCA5MywgOTksIDExNCwgMjQ2LCAxMDYsIDkzLCA5OSwgMTkyLCA0MywgMjIsIDExNCwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAxMTQsIDI0NiwgMTA2LCA5MywgOTksIDExNCwgNDMsIDIyLCAxOTIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMTkyLCAyNDYsIDEwNiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMTMsIDIzMiwgCi0gICAgMTA4LCAxMjMsIDI0NSwgMTg5LCAyNTEsIDIxMywgMjMyLCAxMDgsIDEyMywgMjI0LCAyMiwgMjUxLCAyMTMsIDIzMiwgMTA4LCAKLSAgICAxMzQsIDI0NSwgMTg3LCAyNTEsIDIxMywgMjMyLCAxMDgsIDE2MywgMjUxLCAyMTMsIDIzMiwgMTA4LCAyNDQsIDgxLCAyNDUsIAotICAgIDE4NywgMjUxLCAyMTMsIDIzMiwgMTA4LCAxMzQsIDIyNCwgMjAsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMjIwLCAxMjIsIDI0NSwgCi0gICAgMTg3LCAyNTEsIDIxMywgMjQzLCAyMjksIDI1MSwgMjEzLCA0MywgMjIwLCAxMjIsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIAotICAgIDEzNCwgMjI0LCAyMCwgMjUxLCAyMTMsIDQzLCAyNDQsIDgxLCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxNjMsIDI1MSwgCi0gICAgMjEzLCA0MywgMTM0LCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxMjMsIDIyNCwgMjIsIDI1MSwgMjEzLCA0MywgMTIzLCAKLSAgICAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxNjMsIDI1MSwgMjEzLCAxOTIsIDIyMCwgOTIsIDIzMSwgODIsIDIyMCwgOTIsIAotICAgIDI0OCwgMTYyLCAyMjAsIDkyLCAyMTQsIDE2MCwgMTIzLCAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxMjMsIDI0NSwgMTg5LCAKLSAgICAyNTEsIDIxMywgMjI0LCAyNiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAKLSAgICAyNiwgMjE0LCAxNjAsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgMTA4LCA0MywgMjIsIDIzMiwgCi0gICAgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAKLSAgICAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIAotICAgIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgMjIyLCAKLSAgICAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgNDQsIAotICAgIDIyLCAyMzIsIDEwOCwgNDMsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDg1LCAyMTgsIDIzNCwgNzEsIDIxOCwgMjM0LCA3MSwgCi0gICAgNDIsIDIsIDIyMiwgMTgzLCAyNDksIDE1OSwgNzEsIDQyLCAyNDksIDE4NywgODUsIDQsIDIxOCwgMjM0LCA0MiwgMiwgMjAzLCAKLSAgICAyNDQsIDEwNSwgNDIsIDIsIDY3LCAyNDQsIDEwNSwgNDIsIDIsIDIyNiwgMTQ0LCAyNDksIDEyNiwgMjQ0LCAxMDUsIDQyLCAKLSAgICAyLCAyMTQsIDE2MCwgNDMsIDIxNiwgNDIsIDIzMiwgMTA4LCA0NCwgMjQ0LCAxMDUsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDIxNiwgNDIsIDIzMiwgMTA4LCA0MywgMjQ0LCAxMDUsIDQyLCAyLCAyNDcsIDI1NSwgMjQ5LCAxMjYsIDI0NCwgMTA1LCA4NSwgCi0gICAgNCwgMjE4LCAyMzQsIDcxLCA0LCAyMTgsIDIzNCwgODUsIDIyMywgMTE2LCA3MSwgMjIzLCAxMTYsIDg1LCA2NywgMjIzLCAKLSAgICAxMTYsIDcxLCA2NywgMjIzLCAxMTYsIDg1LCAyMjYsIDYsIDcxLCAyMjYsIDYsIDg1LCAyMTQsIDE2MiwgMjE1LCAyMjUsIAotICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MiwgNCwgMjE1LCAyMjUsIDcxLCAyMTQsIDE2MiwgNCwgMjE1LCAKLSAgICAyMjUsIDg1LCAyMjIsIDI0NywgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgNCwgCi0gICAgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgNCwgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgMjI1LCA4LCA3MSwgMjIyLCAyNDcsIAotICAgIDIyNSwgOCwgODUsIDI0NiwgMTA1LCAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCAyMTUsIDIyNSwgODUsIDI0NiwgMTA1LCA0LCAKLSAgICAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCA0LCAyMTUsIDIyNSwgODUsIDIzMywgNDIsIDIxNSwgMjI1LCA3MSwgMjMzLCA0MiwgCi0gICAgMjE1LCAyMjUsIDg1LCAyMzMsIDQyLCA0LCAyMTUsIDIyNSwgNzEsIDIzMywgNDIsIDQsIDIxNSwgMjI1LCA4NSwgMjMzLCAKLSAgICA0MiwgMjI1LCA4LCA3MSwgMjMzLCA0MiwgMjI1LCA4LCA4NSwgMjQ3LCAyNDgsIDcxLCAyNDcsIDI0OCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyNDksIDE4NywgODUsIDQsIDI0NywgMjQ4LCAyNDQsIDg5LCAyMzIsIDEwNCwgNzEsIDI1MCwgMzUsIDI0NiwgMTE4LCAKLSAgICAyNTAsIDM1LCAyNTAsIDM2LCAyLCA2NywgMjQ0LCAxMDUsIDI1MSwgMTExLCA4NSwgMjUwLCAzNSwgMjUwLCAzNiwgMiwgNDMsIAotICAgIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMzIsIDEwOCwgMTYzLCAKLSAgICAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjI0LCAyNiwgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDI1NCwgMTU1LCAyNTEsIDg4LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjYsIAotICAgIDI1MSwgMjIxLCA0MywgMTYzLCA4NSwgMjUwLCAzNSwgNDQsIDE2MywgODUsIDI1MCwgMzUsIDIzNSwgMTk0LCAyNTEsIDExMywgCi0gICAgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMTQsIDE2MCwgMTYzLCAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIzMiwgMTA4LCAKLSAgICAxNjMsIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjE0LCAxNjAsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIAotICAgIDE2MCwgNDQsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAKLSAgICAyNSwgMjMyLCAxMDgsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIDE2MCwgMTYzLCAyNTAsIDM1LCAyMzIsIAotICAgIDEwOCwgMTYzLCAyNTAsIDM1LCA4NSwgMjMyLCAxMDgsIDQ0LCAyMTUsIDIyNSwgODUsIDIzMiwgMTA4LCA0MywgMjE1LCAKLSAgICAyMjUsIDg1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNSwgNzEsIDI1MSwgCi0gICAgMTEzLCA0MiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIxNCwgMTYwLCAKLSAgICA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMzIsIDEwOCwgNDQsIDI0NywgMjU1LCAxNjMsIDI1MSwgCi0gICAgMjIxLCA3MSwgNDIsIDIsIDY3LCAyNTEsIDIzMiwgMjMyLCAyMTMsIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDI0NywgCi0gICAgMTIwLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQ0LCAKLSAgICAxNjMsIDI1MSwgMjIxLCAyMzMsIDg1LCAyNTAsIDM1LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIAotICAgIDQyLCAyLCAyMzIsIDEwOCwgNDMsIDIyNCwgMjUsIDcxLCA0MiwgMiwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI1LCA3MSwgNDIsIAotICAgIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgCi0gICAgMzYsIDIsIDIzMiwgMTA4LCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNSwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjMyLCAxMDgsIDQzLCAyMTUsIDIyNSwgNzEsIDIzMSwgODIsIDIxOCwgMjM0LCA4NSwgMjMxLCA4MiwgCi0gICAgMjE4LCAyMzQsIDcxLCAyMzEsIDgyLCA0LCAyMTgsIDIzNCwgODUsIDIzMSwgODIsIDQsIDIxOCwgMjM0LCAyMzIsIDEwOCwgCi0gICAgNDQsIDIxNSwgMjI1LCA4NSwgMjE4LCAzOCwgMiwgMjIzLCAxMzIsIDI0OSwgMjQ3LCAyMTQsIDE5NCwgMjE5LCA2MCwgMjQ5LCAKLSAgICAyMjIsIDg1LCAyMTgsIDE1NiwgNzEsIDIxOCwgMTU2LCAyMzIsIDIyOCwgMjE2LCAxMzIsIDIxOCwgMzcsIDI1MywgMjM0LCAKLSAgICAyMjgsIDcxLCAyNDgsIDM4LCAyMjgsIDcxLCAyNDksIDE5NSwgMjI2LCAxNjMsIDg1LCAyMTcsIDAsIDcxLCAyMTcsIDAsIAotICAgIDI1MiwgMTU2LCAyNTEsIDE2MywgMjUyLCAxNTYsIDkzLCAyLCAyNTAsIDEyOSwgMjUyLCAxNTYsIDkzLCAyLCAyMTEsIDE3OCwgCi0gICAgMjIxLCAyNTQsIDIxNCwgMTk1LCAyLCAyMjMsIDE2MCwgMjQ2LCA4NCwgMjQwLCAyNDMsIDI1MiwgMjIsIDcxLCAyMjAsIDIsIAotICAgIDIyNSwgMTAxLCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgMjIwLCA4NywgMjIzLCA0OSwgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgCi0gICAgMjI4LCAyNTEsIDExMywgODUsIDQzLCAyMjUsIDcsIDIzNSwgMjQyLCA4NSwgNDQsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCAKLSAgICA0MywgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDEyMCwgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDQ0LCAyMjUsIDcsIDIzNSwgCi0gICAgMjQyLCA3MSwgMTI0LCAyMjUsIDcsIDIzNSwgMjQyLCAyMTksIDEwMSwgMjIsIDI0OSwgMTI5LCAyNTAsIDIxOSwgNTAsIAotICAgIDIyMywgMTcyLCA1MCwgMjUxLCAyMzksIDUwLCAyNTEsIDI1LCAyNTQsIDEwMiwgMjI2LCAxNDUsIDI0OSwgMTMwLCAyNTAsIAotICAgIDExMSwgMjIzLCAzNywgMjQ5LCAxMzEsIDY0LCAyMzIsIDExOCwgMjQ5LCAxMzEsIDY0LCAyMzUsIDExNiwgMjE4LCAxNTcsIAotICAgIDIyLCAyNDksIDEzNiwgMjQ0LCAxNjgsIDg3LCAyNTQsIDI0OCwgMjIwLCA4OSwgMjQyLCAyMiwgMjIsIDIxOSwgMTg5LCAKLSAgICAyMjUsIDIyMCwgODcsIDIxMCwgMjU0LCAyMTEsIDY5LCAyMTUsIDIxNSwgMzEsIDI0MSwgMjIzLCAyMTUsIDIxNSwgMzEsIAotICAgIDIzMywgMTA3LCAyMTUsIDIxNSwgMzEsIDI0NCwgOTYsIDIxNSwgMjE1LCAzMSwgMjE2LCAxMzMsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjExLCAyMzksIDIxNSwgMjE1LCAzMSwgMjEyLCA0MCwgMjE1LCAyMTUsIDMxLCAyMzAsIDExNSwgMjE1LCAyMTUsIDMxLCAKLSAgICAyNDUsIDIyMywgMjEyLCAxLCA2NCwgMjQ4LCAxOCwgNzEsIDI0MywgMjM5LCAyNDQsIDE5MCwgNzEsIDIxOSwgNzQsIDI0NCwgCi0gICAgMTkwLCA4NSwgMjE5LCA3NCwgMjQ0LCAxOTAsIDcxLCAyMTgsIDM4LCAyLCAyMjMsIDEzMiwgMjQ0LCA5MiwgMjI0LCAyMiwgCi0gICAgMjMwLCAxMjgsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgMTI4LCAyMzEsIDU0LCAyNDQsIDEzOCwgNTAsIDI0NSwgMjIzLCAKLSAgICAyMzEsIDE5MCwgNTAsIDIzNSwgMzgsIDIyMSwgMjIwLCAyMTQsIDE0NSwgMjI5LCA5MywgMjI1LCAyMCwgMjU0LCAxMiwgCi0gICAgMjE3LCA0MCwgMjQzLCA1MiwgMjUxLCAzLCAyMzMsIDE5LCAyMTMsIDE1MCwgMjMyLCAyMzgsIDIyMSwgMTkxLCAyMjIsIDE5LCAKLSAgICAyNTAsIDI0OCwgMjU0LCA0MiwgMjI1LCA1MiwgNzEsIDI1MCwgMTE3LCAyMzQsIDc4LCA3MSwgMjUwLCAxMTcsIDIyNCwgMTQsIAotICAgIDcxLCAyNTAsIDExNywgMjIyLCAxOTUsIDcxLCAyNTAsIDExNywgMjUxLCAyMzEsIDcxLCAyNTAsIDExNywgMjM0LCAzMCwgCi0gICAgNzEsIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDI1MCwgMTE3LCAyMzQsIDc4LCA4NSwgMjUwLCAxMTcsIDIyNCwgMTQsIDg1LCAKLSAgICAyNTAsIDExNywgMjIyLCAxOTUsIDg1LCAyNTAsIDExNywgMjUxLCAyMzEsIDg1LCAyNTAsIDExNywgMjM0LCAzMCwgODUsIAotICAgIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDIxOSwgMTYsIDIxOCwgNTAsIDcxLCAyNDEsIDIyOCwgMjE4LCA1MCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyMTgsIDUwLCA4NSwgMjQ5LCAyNDUsIDIxOCwgNTAsIDcxLCAyMTksIDE2LCAyMTgsIDUwLCA4NSwgMjQxLCAyMjgsIAotICAgIDIxOCwgNTAsIDg1LCAyNDcsIDI0OSwgMjE4LCA1MCwgNzEsIDI0OSwgMjQ1LCAyMTgsIDUwLCAyNDAsIDI0MywgMjE4LCAKLSAgICAyMzgsIDIyNCwgMjIsIDIyOCwgNDcsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyNTIsIDczLCAyNDUsIDE4OSwgMjI4LCA0MiwgCi0gICAgMjUyLCA3MywgMjE5LCAxMTgsIDIyOCwgNDIsIDIzMCwgNTcsIDI0NCwgNjYsIDUwLCAyMzAsIDU3LCAyMjksIDE4OCwgNTAsIAotICAgIDIzMCwgNTcsIDIyMCwgNzYsIDUwLCAyMTIsIDksIDE4OCwgMjQ5LCAxMzAsIDI0NSwgMjIwLCAxODgsIDI0OSwgMTMwLCAKLSAgICAyMTQsIDE3MSwgMjIzLCAxMTIsIDg3LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ4LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ3LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ2LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ1LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ0LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQzLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQyLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyNDMsIDUwLCAyMzEsIDEzOCwgODUsIDIxNCwgMTcxLCAyMjMsIDExMiwgODcsIDIyMywgMTEzLCAyMjYsIDIwLCA4NywgCi0gICAgMjI1LCAyNTIsIDIyNiwgMjAsIDg3LCAyMjUsIDE3NCwgMjI2LCAyMCwgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDEsIAotICAgIDI0NCwgMTg5LCAyNDcsIDI0MSwgMjQ0LCAxODgsIDI0NywgMjQxLCAyNDQsIDE4NywgMjQ3LCAyNDEsIDI0NCwgMTg2LCAKLSAgICAyNDcsIDI0MSwgMjQ0LCAxODUsIDI0NywgMjQxLCAyNDQsIDE4NCwgNzEsIDI1MCwgMzYsIDIsIDU5LCAyMjIsIDI1MSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDExMywgMjQ3LCAxMTgsIDg1LCAyNTAsIDM2LCAyLCA3MSwgNTksIDIyMiwgMjUxLCA4NSwgMjUwLCAzNiwgCi0gICAgMiwgMTEzLCA3MSwgMjQ3LCAxMTgsIDIzMCwgMTQyLCAzMSwgMjExLCA2OSwgMjMwLCAxNDIsIDMxLCAyMTAsIDI1MywgMjQ3LCAKLSAgICAyMjQsIDMxLCAyNDIsIDEzMSwgMjExLCA2OSwgMjQ3LCAyMjQsIDMxLCAyMzMsIDEzLCAyMTAsIDI1MywgMjQ3LCAyMjQsIAotICAgIDMxLCAyMzMsIDEzLCAyMTEsIDY5LCAyNDcsIDIyNCwgMzEsIDI0MiwgMTMxLCAyMTAsIDI1MywgNzEsIDI0NCwgNzMsIDg1LCAKLSAgICAyNDQsIDczLCAyNDIsIDIyLCAyMiwgMjI1LCAxMDQsIDI1NCwgMTIwLCAyNDksIDEyOCwgMjE3LCAyMzUsIDIxOCwgMTY0LCAKLSAgICA2NCwgMjU0LCAyMjYsIDIyMSwgMjA2LCAyNTQsIDE2OSwgMjQ0LCA1MSwgMjQzLCA2MCwgMjE4LCAxNjQsIDY0LCAyNDEsIAotICAgIDIwMiwgMjUzLCAxOTksIDg3LCAyNDQsIDYyLCAyMjYsIDEyNiwgNzEsIDIxOCwgMTU2LCAxMzQsIDIzMiwgMjA4LCAyNDksIAotICAgIDE3NSwgMjIyLCAyNTEsIDEzNCwgMjMyLCAyMDgsIDI0OSwgMTc1LCAyMzMsIDQ2LCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIAotICAgIDEzMCwgNTAsIDI0NiwgMTEwLCAyNDQsIDEzOCwgNTAsIDI0NiwgMTEwLCAyMzEsIDE5MCwgNTAsIDIzNSwgMjAzLCAyNDQsIAotICAgIDEzOCwgMjIsIDIzMSwgMTkwLCA1MCwgMjMxLCAxOTAsIDIyLCAyNDQsIDEzOCwgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgCi0gICAgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgMjIsIDIzMSwgMTkwLCAyMiwgMjQ0LCAxMzgsIDUwLCA2NywgMjMxLCAxOTAsIAotICAgIDIsIDIxOCwgMTAzLCA1MCwgMjAzLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIDUwLCAyMzEsIDgyLCA3MSwgMjUwLCAzNSwgCi0gICAgMjMxLCA4MiwgODUsIDI1MCwgMzUsIDIzMSwgODIsIDQsIDcxLCAyNTAsIDM1LCAyMzEsIDE1MywgODcsIDI0NywgMTY3LCAKLSAgICA4NywgMjE0LCAxNjksIDIyNSwgMjUxLCA4NywgMjQ5LCAyMzEsIDI0MywgMjI0LCAyMTQsIDE0MSwgMjI5LCA4OCwgMjUwLCAKLSAgICAxNjEsIDIyNiwgNjEsIDIzNSwgNDQsIDIxMywgMTg1LCAyNTAsIDkzLCA4NSwgMjMwLCAxMjksIDIzMiwgMjI1LCAyMjAsIAotICAgIDExMiwgMjIwLCAxNDcsIDIyNCwgNSwgMjIwLCAxMzAsIDIxOSwgNTUsIDI1MiwgMTU5LCAyNTIsIDEyNiwgOTIsIDIzNCwgCi0gICAgMTM4LCA3MSwgMjQ2LCA5MywgMjMxLCAxODUsIDcxLCAyNDYsIDkzLCAyMzQsIDc4LCA4NSwgMjQ2LCA5MywgMjMxLCAxODUsIAotICAgIDg1LCAyNDYsIDkzLCAyMzQsIDc4LCAyMTksIDYxLCAyMTEsIDIzMCwgMjE5LCA2NCwgMjE4LCAzOCwgMjUyLCA1MSwgMjQ5LCAKLSAgICAyNDcsIDIyMywgMTU5LCA4NSwgMjE5LCA2MCwgMjE2LCAxMzQsIDI0OSwgMjQ4LCAyMiwgMjIzLCAxNTksIDIxNSwgOTQsIAotICAgIDcxLCAyMjAsIDIsIDIyNSwgMTAxLCAyMTUsIDk0LCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgNzEsIDI0NywgMjQ5LCAyMzYsIAotICAgIDAsIDIxOCwgMjM0LCAyNDksIDEyNSwgMjMzLCA5MSwgMjQ3LCAxOTMsIDI1MCwgMjQ0LCAyMjYsIDE2NiwgMjI1LCAxMDQsIAotICAgIDI1MCwgMjQ1LCAyMTksIDg4LCAyNDEsIDIxMiwgMiwgNzEsIDI0OSwgMTMwLCAzNywgMjQ5LCAxMjUsIDIzMywgOTEsIDI1MCwgCi0gICAgMTUzLCAyMjgsIDc1LCAyNDUsIDEyNCwgMjU0LCAxNDEsIDIyNiwgMTkxLCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDcxLCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICA0MywgMjMzLCA5MiwgMjMxLCA1MywgNzEsIDQzLCAyMzMsIDkyLCAyMzEsIDUzLCAyNDYsIDg5LCAyMTksIDgyLCA1MCwgCi0gICAgMTE0LCA3MSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA0MywgMjUwLCAwLCAyNDUsIDEyNCwgOTIsIDIyMSwgMjU0LCAyNDQsIAotICAgIDE3NSwgMjQ3LCAyNTUsIDIzNiwgMCwgNzEsIDI1MCwgMzYsIDIzNiwgMCwgODUsIDIxOCwgMjM0LCA4NSwgMjE1LCAxOTIsIAotICAgIDIyMywgNjAsIDQzLCAyNDUsIDEyMywgMjIzLCA2MCwgNDMsIDI0NSwgMTIyLCAyNTMsIDIxMSwgMTYsIDMxLCAyMTQsIDE0NSwgCi0gICAgMTE0LCAyNTAsIDM2LCAyLCAyMTgsIDEwMywgMjIsIDExMywgMTcwLCA0OCwgMjI1LCAxODksIDIyMiwgMjQ4LCAyMzUsIAotICAgIDIwNSwgMjI1LCAxODksIDIzMywgNDMsIDIzNSwgMjA1LCAyMjUsIDE4OSwgMjM1LCAxOTMsIDIyNSwgMTg5LCA4NSwgMjQ5LCAKLSAgICAxMzEsIDIyNiwgMTk3LCAyMjAsIDI5LCAyMjAsIDE3LCAyMTksIDIyOSwgMjUwLCA2MSwgMjUwLCAyMjYsIDI0MSwgMTU3LCAKLSAgICAyMTksIDEyNiwgMjQzLCA2MSwgMjExLCAyMzAsIDI0MCwgMjIwLCAyNDMsIDYxLCAyLCAyNDIsIDEyLCAyMzEsIDE3MywgMTYsIAotICAgIDMxLCAyMzIsIDIyOSwgMjMwLCAxMTUsIDIxNCwgMTk1LCAyMjYsIDE5NywgMjQyLCAxMjIsIDI0NCwgMTIsIDI0NCwgNzQsIAotICAgIDIzNiwgMCwgMjQxLCA1OSwgMjQ0LCAxMjksIDIyMiwgMTQsIDQyLCAyNDQsIDExLCAyNDksIDE1OSwgMjE5LCAxMDQsIDI0MCwgCi0gICAgMTEyLCAyMTksIDEwNywgMjI1LCAxNjgsIDIsIDI1MiwgMTU5LCAyMTYsIDI0MiwgMjM1LCAxMzEsIDI1MiwgMTQ2LCA4NywgCi0gICAgMjQxLCAyMzEsIDI0MiwgMTMzLCA4NywgMjQzLCAyMzIsIDIyNCwgMTQyLCAyNDksIDEwMywgMjI2LCAxOTcsIDg1LCAyMTgsIAotICAgIDIzNCwgNzEsIDI0NCwgNzQsIDIsIDIwMywgMjMwLCAyMjQsIDg1LCAyMTgsIDEwNCwgMjE0LCAxNjAsIDI1MSwgMjE3LCAKLSAgICAyMjEsIDE5MywgODUsIDIyMSwgMTkzLCAyMzIsIDEwOCwgMjUxLCAyMTcsIDIyMSwgMTkzLCA3MSwgMjIxLCAxOTMsIDcxLCAKLSAgICAxMTQsIDI1MCwgMTMwLCA3OCwgMjE3LCAxLCAyMzIsIDE1NCwgNTAsIDIxNywgNTMsIDI0NiwgODgsIDI1NCwgMTkxLCAyNDUsIAotICAgIDExOSwgMjIzLCAxNTcsIDI0NCwgODUsIDIyMywgMTU3LCAyNDIsIDE1LCAyMTMsIDE3NCwgMjQyLCAxNSwgMjExLCAxOTgsIAotICAgIDI0MiwgMTUsIDIzMiwgMTA4LCA0NCwgMjI1LCAxOTgsIDIyNSwgMTk4LCAyMTQsIDE2MCwgNDQsIDIyNSwgMTk4LCA3MSwgCi0gICAgMjI4LCAyMzAsIDg1LCAyMjgsIDIzMCwgMjUwLCAxMzAsIDc4LCAxMTQsIDI1MCwgMTMwLCA3OCwgMjMwLCA4NCwgMjExLCAKLSAgICAxNzgsIDExNCwgMjMwLCA4NCwgMjExLCAxNzgsIDI1MiwgMTU2LCAyMTEsIDE3OCwgMTE0LCAyNTIsIDE1NiwgMjExLCAxNzgsIAotICAgIDIyNiwgMTI2LCAyNiwgMjQ5LCAxMzAsIDExNCwgMjYsIDI0OSwgMTMwLCAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgMTE0LCAKLSAgICAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgNywgMjQ5LCAxMzAsIDIyMCwgOTEsIDcxLCA3LCAyNDksIDEzMCwgMjI2LCAxMjYsIAotICAgIDcsIDI0OSwgMTMwLCAyMzEsIDE4NywgMjQ5LCAxMzAsIDIxOCwgMTU3LCA2NCwgMjQ4LCAxNDksIDI0NCwgMTEsIDIxNywgCi0gICAgMTUsIDI1MywgMjE2LCAyNDQsIDExLCAyNTIsIDE1NywgMjUzLCAyMTYsIDExNCwgMjQ0LCAxMSwgMjUyLCAxNTcsIDI1MywgCi0gICAgMjE2LCAyNDQsIDExLCAyNDksIDI0MywgMjUzLCAyMTYsIDg1LCAyNDQsIDExLCAyMjUsIDksIDIxOCwgMTU2LCA3MSwgMjQ0LCAKLSAgICAxMSwgMjI1LCA5LCAyMTgsIDE1NiwgMjE5LCAxMSwgMjE4LCAxMTEsIDIyNiwgMTI2LCA3MSwgMjE4LCAxNTYsIDM3LCA3MSwgCi0gICAgMjE4LCAxNTYsIDIwNCwgMjUwLCAxNzUsIDg1LCAyMTgsIDE1NiwgODUsIDI1MCwgMTc1LCA3MSwgMjE4LCAxNTYsIDIyNiwgCi0gICAgMTI2LCA4NSwgMjE4LCAxNTYsIDExNCwgMjI2LCAxMjYsIDg1LCAyMTgsIDE1NiwgMjI1LCA2MCwgMjE4LCAxNTYsIDIyMCwgCi0gICAgOTEsIDcxLCAyMTgsIDE1NiwgMTE0LCAyNTMsIDIxNiwgMjA0LCAyNTAsIDE3NSwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTgsIAotICAgIDI0NCwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjI1LCA2MCwgCi0gICAgMjE4LCAxNTYsIDIxOSwgMTI1LCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjIzLCAxMTQsIDg1LCAKLSAgICAyMTgsIDE1NiwgMTE0LCAyNDUsIDE5MywgMjI1LCA5LCAyMjMsIDExNCwgODUsIDIxOCwgMTU2LCAyMTUsIDc3LCAyMjUsIDksIAotICAgIDg1LCAyMTgsIDE1NiwgMjE5LCAxMjAsIDIyNSwgOSwgMjUzLCAyMTYsIDIxNywgMTUsIDI1MywgMjE2LCAyMDQsIDI1MCwgCi0gICAgMTc1LCAyMTcsIDE1LCAyNTMsIDIxNiwgMTE0LCAyMTcsIDE1LCAyNTMsIDIxNiwgMjE5LCAxMjUsIDIyNSwgMTU3LCA4NSwgCi0gICAgMjIsIDcxLCAyNDQsIDU0LCA4NSwgMjQ0LCA1NCwgNzEsIDI0NCwgNTQsIDI0NSwgMTkzLCAyMjUsIDE1NywgMjI2LCAxMjYsIAotICAgIDg1LCAyNDQsIDU0LCAzNywgMjA0LCAyNTAsIDE3NSwgMjQ1LCAxOTMsIDIyNSwgOSwgMjE4LCAxNTYsIDExNCwgMjE3LCAxNSwgCi0gICAgMjI1LCA2MCwgMjUzLCAyMTYsIDIxOSwgNjIsIDIxNiwgMTA1LCAyMTUsIDIxOCwgMjE5LCA2MiwgMTE0LCAyNTAsIDExNCwgCi0gICAgMjE5LCA2MiwgMjE5LCAxMywgMTE0LCAyMTksIDEzLCAyNTIsIDE1NywgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTcsIDE1LCAKLSAgICAyMjQsIDE3MSwgMjUzLCAyMTYsIDExNCwgMjQ1LCAxOTMsIDIxNywgMTUsIDIyNCwgMTcxLCAyNTMsIDIxNiwgMjQ5LCAxMzEsIAotICAgIDc4LCAyMjAsIDkxLCA3MSwgMjUwLCAzNSwgMTUyLCA5MiwgMjQ5LCAxMzEsIDc4LCAyMzIsIDEwOCwgNDQsIDI0NiwgODYsIAotICAgIDcxLCAyMTgsIDIzNCwgMjE0LCAxNjAsIDQ0LCAyNDYsIDg2LCA3MSwgMjE4LCAyMzQsIDIzMiwgMTA4LCA0NCwgMjIwLCA5MSwgCi0gICAgNzEsIDIxOCwgMjM0LCAyMTQsIDE2MCwgNDQsIDIyMCwgOTEsIDcxLCAyMTgsIDIzNCwgODUsIDIyNCwgMTMsIDE2NCwgMjI2LCAKLSAgICAxNDcsIDcxLCAyMjQsIDEzLCAxNjQsIDIyNiwgMTQ3LCA3MSwgMjQ1LCAzMSwgMTY0LCAyMjYsIDE0NywgODUsIDI0NywgCi0gICAgMjQ5LCAyMzAsIDE4MiwgNzEsIDIxMSwgMTc4LCAxMTQsIDI0NSwgMzEsIDE2NCwgODcsIDE5MiwgNjcsIDEzMCwgMjMxLCAKLSAgICA4MiwgNjcsIDEzMCwgMTE0LCA2NywgMTMwLCAxMTQsIDIxOSwgMTU1LCAyMTUsIDk0LCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMjE5LCAxNTUsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCA1MiwgCi0gICAgMjE1LCA5NCwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDUyLCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMTIxLCAyMTksIDE1NSwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAKLSAgICAxMTQsIDEyMSwgNTIsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMjQ5LCA5MSwgMjE4LCAxNDAsIDIyNiwgCi0gICAgMTUsIDUsIDIyNiwgMTQ3LCAxMTQsIDI0NSwgMzEsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjQxLCAyMjgsIDI0NSwgMzEsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgODUsIDI0MSwgMjI3LCAyMjIsIDE4NywgMTE0LCA4NSwgMjQxLCAyMjgsIDI1MSwgMTEzLCAKLSAgICAyNDQsIDU1LCAyNDEsIDIyNywgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgMjI4LCAyNTEsIDExMywgMjMxLCA4MiwgNDMsIAotICAgIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDQ0LCAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyNDQsIDYzLCA0MywgCi0gICAgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjQ0LCA2MywgNDQsIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDIzMywgCi0gICAgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDIzMSwgODIsIDIyMiwgMjQ3LCAyNTQsIDExMCwgMjUxLCAxNTgsIAotICAgIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCAyMjIsIDI0NywgCi0gICAgMjU0LCAxMTAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAKLSAgICAxNDcsIDExNCwgMjIyLCAyNDcsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDE5MiwgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMjUxLCAxNTgsIDIyNiwgMTQ3LCAxOTIsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU4LCAyMjYsIDE0NywgCi0gICAgMjMxLCA4MiwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjYsIDE0NywgMjMxLCA4MiwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAKLSAgICAyMjYsIDE0NywgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIAotICAgIDIwNCwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgCi0gICAgMTg5LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE5NCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxOTgsIDI0NywgMjA0LCAKLSAgICAxNTIsIDM3LCAyMSwgMTk1LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDIwMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDU0LCAyMTYsIAotICAgIDI0NywgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDExMCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDM3LCAKLSAgICAzNSwgMjEsIDE1OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE4OSwgMjQ3LCAKLSAgICAyMDQsIDM3LCAzNSwgMjEsIDE5NCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE5OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIAotICAgIDE5NSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDIwMCwgMjQ3LCAyMDQsIDM3LCAzNSwgNTQsIDIxNiwgMjQ3LCAyNDcsIDIwNCwgCi0gICAgMTUyLCAzNywgMzUsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDE1MiwgMzcsIAotICAgIDM1LCAyMSwgMTU4LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIAotICAgIDE4OSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk0LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTgsIDI0NywgCi0gICAgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMjAwLCAyNDcsIDIwNCwgMTUyLCAKLSAgICAzNywgMzUsIDU0LCAyMTYsIDI0NywgMTE0LCAyMTEsIDI0NiwgOTcsIDc0LCAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4MiwgCi0gICAgNTAsIDExNCwgMjQ3LCAxNjksIDUwLCAxMTQsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMTE0LCA5NywgNzQsIDExNCwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDc0LCAyNDYsIDk4LCAyMjUsIDExLCA5NywgNzQsIDExNCwgMjIyLCAxODQsIDk3LCA3NCwgMjE1LCAKLSAgICAyMjQsIDk3LCA3NCwgMTE0LCAyMTUsIDIyNCwgOTcsIDc0LCAyNDgsIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgMTE0LCAyNDgsIAotICAgIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgODUsIDk3LCA3NCwgMjE2LCAxNDQsIDIxNiwgMTIsIDk3LCAyNTMsIDI0OSwgMjE2LCAKLSAgICAxNDQsIDI1MSwgMTczLCA5NywgMjUzLCAyNDksIDg1LCA5NywgMjUzLCAyNDksIDExNCwgODUsIDI0OSwgOTEsIDI0NiwgCi0gICAgMTA0LCAyMiwgOTcsIDc0LCAxMTQsIDg1LCAyNDksIDkxLCAyMTQsIDE1MywgMjIsIDk3LCA3NCwgMjE4LCAyMzEsIDg1LCAKLSAgICA5NywgNzQsIDExNCwgMjQ5LCAyMDYsIDg1LCA5NywgNzQsIDIyMiwgMjQ2LCA3MSwgOTcsIDc0LCAyMzMsIDQxLCA3MSwgOTcsIAotICAgIDc0LCAyNTIsIDE4MywgMjIwLCA5MSwgNzEsIDk3LCA3NCwgMjQzLCAyNDEsIDIyMCwgOTEsIDcxLCA5NywgNzQsIDExNCwgCi0gICAgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAxMTQsIDIxNCwgMTYwLCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMjI4LCAKLSAgICA0OSwgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAyNDksIDk5LCAyMzIsIDEyMywgMjI4LCA0OSwgMjE0LCAxNjAsIAotICAgIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAzNywgMTE0LCA3MSwgOTcsIDc0LCAyMTEsIDI1MiwgOTcsIDc0LCAyNTEsIDIyMCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyNTEsIDIyMCwgOTcsIDc0LCAyNTEsIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAxMTQsIDI1MSwgMjIwLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDExNCwgMjUxLCAyMjAsIDk3LCA3NCwgMTE0LCAyNTEsIAotICAgIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMTcsIDE3LCA5NywgNzQsIDExNCwgMjE3LCAxNiwgOTcsIDc0LCAyMTIsIAotICAgIDE4LCA5NywgNzQsIDExNCwgMjEyLCAxOCwgOTcsIDc0LCAyMjYsIDE3MiwgOTcsIDc0LCA1MiwgMjQ5LCA5OSwgMjMyLCAKLSAgICAxMjMsIDEzNCwgMjQ3LCAyMTQsIDI1NCwgMTA5LCA3MSwgMjE1LCAyMjYsIDI0OSwgMTg3LCA0LCA3MSwgMjE1LCAyMjUsIAotICAgIDIyNSwgMTcxLCAyMDQsIDIxOCwgNjMsIDIwNCwgMjE4LCAyMSwgNDMsIDIyMiwgOTAsIDI1MiwgMTczLCAyNDgsIDYwLCA0NCwgCi0gICAgMjIyLCA5MCwgMjUyLCAxNzMsIDI0OCwgNjAsIDE3NywgMiwgNTksIDIzNSwgMjE1LCAyMjMsIDUwLCAyMTksIDQ3LCAyMjQsIAotICAgIDIwMSwgMjE4LCA2MywgMjE4LCAyMiwgMjI0LCAyMDEsIDIxOSwgNDYsIDY3LCAyNTIsIDE0MSwgMiwgMjAzLCA5MSwgMTEsIAotICAgIDIyMiwgMjI4LCAyNDcsIDI1NCwgMTk5LCAyNDcsIDE2OCwgMTEsIDI0NCwgMTc1LCAyNDcsIDI1NCwgOTIsIDIzMiwgMTQ2LCAKLSAgICAyNTQsIDExOCwgOTIsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgNzEsIDI0NywgMjQ5LCAyLCAyNTAsIDE3MywgMjQ3LCAxMjAsIAotICAgIDIyLCAyLCAyNDcsIDEyMCwgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjE0LCAxNTIsIDIzMiwgMTA4LCA0NCwgMjQ5LCAKLSAgICAxNjEsIDIsIDI0NywgMTIwLCAyMTQsIDE2MCwgNDMsIDI0OSwgMTYxLCAyLCAyNDcsIDEyMCwgNDMsIDIyNiwgMTI4LCAyMzUsIAotICAgIDY2LCA0NCwgMjI2LCAxMjgsIDIzNSwgNjYsIDI0MywgMjI5LCAyMjYsIDEyOCwgMjM1LCA2NiwgMjMzLCA4NSwgMTIwLCAKLSAgICAyMTcsIDg3LCAyMzMsIDg1LCAxMjQsIDIxNywgODcsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIDkzLCA0MywgMjIsIDQ0LCAyMTcsIAotICAgIDg3LCA0MywgMjMwLCA4NywgMTk5LCA0NCwgMjE3LCA4NywgMTk5LCA0MywgMjE3LCA4NywgMTIwLCAyMTcsIDg4LCAyLCAKLSAgICAyNTAsIDM2LCA0OCwgMjMyLCAxMDUsIDI0NywgMTczLCAyNTEsIDc4LCAyMDMsIDIyMiwgMTMzLCA3MSwgMjQ5LCAyMDUsIAotICAgIDI0NywgMjQ4LCA3MSwgMjQ5LCAyMDUsIDI0NywgMjQ5LCAyLCAxNDAsIDIxNiwgMTE0LCA3MSwgMjQ5LCAyMDUsIDI0NywgCi0gICAgMjQ5LCAyLCA5NywgMjE2LCAxMTQsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNCwgNzEsIDQyLCAyLCA5NywgMjE2LCAxMTQsIAotICAgIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTAsIDEyNywgMTEsIDQ0LCAKLSAgICAyNTQsIDExMCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgCi0gICAgNDMsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDExLCA0MywgCi0gICAgMjQ0LCA2MywgMjI2LCAzLCAxMSwgNDQsIDI0NCwgNjMsIDIyNiwgMywgMjE0LCAxNTMsIDIyNCwgMjQsIDc0LCAyNDYsIAotICAgIDEwNCwgMjI0LCAyNCwgNzQsIDI1NCwgODgsIDI0MywgOTgsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDI0MywgOTgsIDI1MCwgCi0gICAgMzYsIDc0LCA0NCwgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgNzQsIDE5OSwgOTcsIDc0LCAxOTksIDQzLCA0NCwgCi0gICAgNzQsIDE5OSwgMTQwLCA1MiwgNzQsIDE5OSwgOTcsIDUyLCA3NCwgMTk5LCA0MywgNDQsIDUyLCA3NCwgMTk5LCAxNDAsIDgwLCAKLSAgICAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTk5LCAxNDAsIDUyLCA4MCwgMjQzLCAyNDMsIAotICAgIDEzMCwgMTk5LCA5NywgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCAyMTgsIDIzMCwgNzQsIDQ2LCA0NywgMjUxLCAKLSAgICAyMTUsIDQ2LCA0NywgMjQ3LCAxMTcsIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODEsIDQ2LCA0NywgMjQ3LCA1MiwgNDYsIDQ3LCAyNDYsIDI0NCwgNDYsIDQ3LCAyNDcsIDExNSwgNDYsIDQ3LCAyNDYsIAotICAgIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIAotICAgIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIDE2NCwgCi0gICAgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAxNDgsIDQ2LCAKLSAgICA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgMTc5LCA0NiwgNDcsIAotICAgIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAxMjUsIDQ2LCA0NywgCi0gICAgMjQ2LCAyNTIsIDQ2LCA0NywgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDE1NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgMjQ2LCAxNDAsIDQ2LCA0NywgCi0gICAgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgMTcxLCA0NiwgNDcsIAotICAgIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgCi0gICAgMjQ3LCAzLCA0NiwgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAKLSAgICAzNCwgNDYsIDQ3LCAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIAotICAgIDQ2LCA0NywgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgCi0gICAgNDcsIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTIxLCA0NiwgNDcsIDI0NiwgMjQ4LCA0NiwgCi0gICAgNDcsIDI0NiwgMTg0LCA0NiwgNDcsIDI0NywgNTUsIDQ2LCA0NywgMjQ2LCAxNTIsIDQ2LCA0NywgMjQ3LCAyMywgNDYsIDQ3LCAKLSAgICAyNDYsIDIxNSwgNDYsIDQ3LCAyNDcsIDg2LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIDI0NywgNywgNDYsIDQ3LCAyNDYsIAotICAgIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgMzgsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxMjgsIDQ2LCA0NywgMjQ2LCAyNTUsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTEsIDQ2LCA0NywgMjQ3LCA2MiwgNDYsIDQ3LCAyNDYsIDE1OSwgNDYsIDQ3LCAyNDcsIDMwLCA0NiwgNDcsIDI0NiwgCi0gICAgMjIyLCA0NiwgNDcsIDI0NywgOTMsIDQ2LCA0NywgMjQ2LCAxNDMsIDQ2LCA0NywgMjQ3LCAxNCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwNiwgNDYsIDQ3LCAyNDcsIDc3LCA0NiwgNDcsIDI0NiwgMTc0LCA0NiwgNDcsIDI0NywgNDUsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzcsIDQ2LCA0NywgMjQ3LCAxMDgsIDQ2LCA0NywgMjQ2LCAxMjQsIDQ2LCA0NywgMjQ2LCAyNTEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDE1NSwgNDYsIDQ3LCAyNDcsIDI2LCA0NiwgNDcsIDI0NiwgCi0gICAgMjE4LCA0NiwgNDcsIDI0NywgODksIDQ2LCA0NywgMjQ2LCAxMzksIDQ2LCA0NywgMjQ3LCAxMCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwMiwgNDYsIDQ3LCAyNDcsIDczLCA0NiwgNDcsIDI0NiwgMTcwLCA0NiwgNDcsIDI0NywgNDEsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzMsIDQ2LCA0NywgMjQ3LCAxMDQsIDQ2LCA0NywgMjQ2LCAxMzEsIDQ2LCA0NywgMjQ3LCAyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTk0LCA0NiwgNDcsIDI0NywgNjUsIDQ2LCA0NywgMjQ2LCAxNjIsIDQ2LCA0NywgMjQ3LCAzMywgNDYsIDQ3LCAyNDYsIAotICAgIDIyNSwgNDYsIDQ3LCAyNDcsIDk2LCA0NiwgNDcsIDI0NiwgMTQ2LCA0NiwgNDcsIDI0NywgMTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDksIDQ2LCA0NywgMjQ3LCA4MCwgNDYsIDQ3LCAyNDYsIDE3NywgNDYsIDQ3LCAyNDcsIDQ4LCA0NiwgNDcsIDI0NiwgCi0gICAgMjQwLCA0NiwgNDcsIDI0NywgMTExLCA0NiwgNDcsIDI0NiwgMTE5LCA0NiwgNDcsIDI0NiwgMjQ2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTgyLCA0NiwgNDcsIDI0NywgNTMsIDQ2LCA0NywgMjQ2LCAxNTAsIDQ2LCA0NywgMjQ3LCAyMSwgNDYsIDQ3LCAyNDYsIAotICAgIDIxMywgNDYsIDQ3LCAyNDcsIDg0LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAyNDYsIDE5NywgCi0gICAgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgMjQ2LCAyMjgsIDQ2LCAKLSAgICA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDEyNiwgNDYsIDQ3LCAyNDYsIDI1MywgNDYsIDQ3LCAyNDYsIDE4OSwgNDYsIAotICAgIDQ3LCAyNDcsIDYwLCA0NiwgNDcsIDI0NiwgMTU3LCA0NiwgNDcsIDI0NywgMjgsIDQ2LCA0NywgMjQ2LCAyMjAsIDQ2LCA0NywgCi0gICAgMjQ3LCA5MSwgNDYsIDQ3LCAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIAotICAgIDI0NywgNzUsIDQ2LCA0NywgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAKLSAgICAyNDcsIDEwNiwgNDYsIDQ3LCAyNDYsIDEyMiwgNDYsIDQ3LCAyNDYsIDI0OSwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAKLSAgICAyNDcsIDU2LCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgMjQ2LCAyMTYsIDQ2LCA0NywgCi0gICAgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDEzNywgNDYsIDQ3LCAyNDcsIDgsIDQ2LCA0NywgMjQ2LCAyMDAsIDQ2LCA0NywgMjQ3LCAKLSAgICA3MSwgNDYsIDQ3LCAyNDYsIDE2OCwgNDYsIDQ3LCAyNDcsIDM5LCA0NiwgNDcsIDI0NiwgMjMxLCA0NiwgNDcsIDI0NywgCi0gICAgMTAyLCA0NiwgNDcsIDI0NiwgMTI5LCA0NiwgNDcsIDI0NywgMCwgNDYsIDQ3LCAyNDYsIDE5MiwgNDYsIDQ3LCAyNDcsIDYzLCAKLSAgICA0NiwgNDcsIDI0NiwgMTYwLCA0NiwgNDcsIDI0NywgMzEsIDQ2LCA0NywgMjQ2LCAyMjMsIDQ2LCA0NywgMjQ3LCA5NCwgNDYsIAotICAgIDQ3LCAyNDYsIDE0NCwgNDYsIDQ3LCAyNDcsIDE1LCA0NiwgNDcsIDI0NiwgMjA3LCA0NiwgNDcsIDI0NywgNzgsIDQ2LCA0NywgCi0gICAgMjQ2LCAxNzUsIDQ2LCA0NywgMjQ3LCA0NiwgNDYsIDQ3LCAyNDYsIDIzOCwgNDYsIDQ3LCAyNDcsIDEwOSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEyMCwgNDYsIDQ3LCAyNDYsIDI0NywgNDYsIDQ3LCAyNDYsIDE4MywgNDYsIDQ3LCAyNDcsIDU0LCA0NiwgNDcsIAotICAgIDI0NiwgMTUxLCA0NiwgNDcsIDI0NywgMjIsIDQ2LCA0NywgMjQ2LCAyMTQsIDQ2LCA0NywgMjQ3LCA4NSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIAotICAgIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgCi0gICAgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIAotICAgIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTIzLCA0NiwgNDcsIDI0NiwgMjUwLCA0NiwgNDcsIDI0NiwgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTQsIDQ2LCA0NywgMjQ3LCAyNSwgNDYsIDQ3LCAyNDYsIDIxNywgNDYsIDQ3LCAyNDcsIDg4LCA0NiwgNDcsIDI0NiwgCi0gICAgMTM4LCA0NiwgNDcsIDI0NywgOSwgNDYsIDQ3LCAyNDYsIDIwMSwgNDYsIDQ3LCAyNDcsIDcyLCA0NiwgNDcsIDI0NiwgMTY5LCAKLSAgICA0NiwgNDcsIDI0NywgNDAsIDQ2LCA0NywgMjQ2LCAyMzIsIDQ2LCA0NywgMjQ3LCAxMDMsIDQ2LCA0NywgMjQ2LCAxMzAsIAotICAgIDQ2LCA0NywgMjQ3LCAxLCA0NiwgNDcsIDI0NiwgMTkzLCA0NiwgNDcsIDI0NywgNjQsIDQ2LCA0NywgMjQ2LCAxNjEsIDQ2LCAKLSAgICA0NywgMjQ3LCAzMiwgNDYsIDQ3LCAyNDYsIDIyNCwgNDYsIDQ3LCAyNDcsIDk1LCA0NiwgNDcsIDI0NiwgMTQ1LCA0NiwgNDcsIAotICAgIDI0NywgMTYsIDQ2LCA0NywgMjQ2LCAyMDgsIDQ2LCA0NywgMjQ3LCA3OSwgNDYsIDQ3LCAyNDYsIDE3NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDQ3LCA0NiwgNDcsIDI0NiwgMjM5LCA0NiwgNDcsIDI0NywgMTEwLCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCAKLSAgICA2NywgOTEsIDQzLCA0NCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTQwLCAKLSAgICA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCA4MCwgMiwgMjAzLCAKLSAgICA5MSwgMjE0LCAxNTMsIDgwLCAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTEsIDc0LCAyNDYsIDEwNCwgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDUyLCAyNDgsIDE1NywgNzQsIDk3LCA1MiwgMjQ4LCAxNTcsIDc0LCAxNDAsIDIxNSwgMjExLCAyNDgsIDE1NywgCi0gICAgNzQsIDk3LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCA5NywgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgOTcsIAotICAgIDgwLCAyLCAyNDYsIDExOCwgMjE4LCAxMzksIDIxNCwgMTUzLCA4MCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgODAsIDIxNiwgCi0gICAgNDIsIDEzMCwgOTcsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCAKLSAgICA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc3LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1MywgMjUxLCA5NywgMjUzLCAyNTEsIAotICAgIDE0MCwgNTIsIDI1MywgMjUxLCA5NywgNTIsIDI1MywgMjUxLCAxNDAsIDgwLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDk3LCAKLSAgICA4MCwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCAxNDAsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIAotICAgIDI0OCwgOTcsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgMjI4LCA1NiwgMjEyLCA5LCAKLSAgICAyMiwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgMjIsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyLCAxMDMsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA4MCwgMiwgMTAzLCAyMTksIDI4LCAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIyLCAKLSAgICAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjIsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAyMiwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA4MCwgMjIsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDI0NCwgMTc1LCAyNDcsIDI1NCwgCi0gICAgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjIyLCAyMjgsIDI0NywgMjU0LCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIAotICAgIDI0OSwgMTI1LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjQ5LCAxMjUsIDIxOSwgCi0gICAgMjgsIDI0NSwgMjIwLCA3NCwgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAyMjIsIDIyOCwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCAKLSAgICA4MCwgMjQ5LCAxMjUsIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDI0OSwgMTI1LCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzQsIDIxMiwgMzYsIDgwLCAyMjUsIDcsIDI0NywgMTk1LCAyMjIsIDI1MSwgODAsIDIyNSwgNywgCi0gICAgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyMTQsIDE1MiwgODAsIDIyNSwgNywgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyNDYsIAotICAgIDEwMywgODAsIDIyNSwgNywgMjQ2LCAxMDQsIDIxNiwgMTg4LCAyNDksIDkwLCAyMzMsIDM3LCA4MCwgMjI1LCA3LCAyNDYsIAotICAgIDEwNCwgMjE2LCAxODgsIDI0OSwgOTAsIDIyMiwgMjQxLCAyMjIsIDI0NCwgMjU0LCAyNiwgMjUwLCAyLCA3NCwgMjMzLCA0MCwgCi0gICAgMjU0LCAyNiwgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1NCwgODgsIDc0LCAyNTEsIDE3NSwgMjU0LCAyNiwgCi0gICAgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1MCwgMiwgODAsIDIsIDIzMCwgMTgxLCAyMTYsIDE0LCAyNTQsIDI2LCAKLSAgICAyNTQsIDg4LCA4MCwgMiwgMjI1LCAyMiwgMjMyLCAxMDgsIDQ0LCAyMjAsIDE1MiwgMjUwLCAyLCA3NCwgMjMyLCAxMDgsIAotICAgIDQzLCAyMjAsIDE1MiwgMjU0LCA4OCwgNzQsIDI1NCwgODgsIDI1MCwgMCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjUwLCAwLCAKLSAgICAyNTAsIDM2LCA3NCwgOTcsIDgwLCA3NywgMjE5LCAyNTEsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAyMTksIDI1MSwgOTcsIAotICAgIDc0LCAyMTksIDI1MSwgOTcsIDgwLCA3NywgMTQwLCA3NCwgOTcsIDgwLCAyLCA5NiwgNTEsIDE0MCwgODAsIDIsIDk2LCA1MSwgCi0gICAgOTcsIDgwLCAyMTYsIDEzOSwgMjExLCAxNzgsIDQzLCA0NCwgODAsIDIxNiwgMTM5LCA0LCAyNTAsIDM1LCAyMTQsIDE1MywgCi0gICAgMjE1LCA1OCwgODAsIDI0MywgMjQzLCA0LCAyNTAsIDM1LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDQsIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxNDAsIDI0MSwgMjU1LCAKLSAgICAyLCAyNTIsIDEzOSwgMTIwLCAyMTYsIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjE2LCA0MiwgCi0gICAgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyMTYsIAotICAgIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjE2LCA0MiwgMTMwLCAyMTQsIDE1MywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgCi0gICAgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyNDMsIDI0MywgMTMwLCA5NywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQ0LCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjQzLCAyNDMsIDEzMCwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjQzLCAyNDMsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMTI0LCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjQzLCAyNDMsIAotICAgIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjQxLCAyNTUsIAotICAgIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDYsIDIxNCwgMTUzLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIAotICAgIDI1MSwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDYsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMjIsIDI1MSwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIxNCwgMTYzLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjQ2LCAxMDYsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMTQsIDE2MywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDI0NiwgMTA2LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjUyLCA0MywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNTIsIAotICAgIDQzLCAxOTksIDI0OCwgMTU2LCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjQ2LCAKLSAgICAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNTEsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI1MSwgNDQsIDUyLCA4MCwgMiwgCi0gICAgMjIyLCAxODMsIDI0MSwgMjM1LCAyNDUsIDk4LCA1LCA3NywgOTcsIDc0LCAyMTYsIDg5LCAyMjYsIDE2OCwgNzcsIDk3LCAKLSAgICA3NCwgMTQwLCA4MCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA5NywgODAsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIAotICAgIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMzMsIDE1LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgMjE2LCAxMzksIDIzMywgCi0gICAgMTQsIDI0MiwgMTMwLCA3NywgOTcsIDc0LCAyMTgsIDY0LCA3NywgOTcsIDc0LCAxNDAsIDgwLCAyMTYsIDEzOSwgMjE4LCAKLSAgICA2MywgMjE4LCAyMiwgNzcsIDE0MCwgNzQsIDQzLCAyNDQsIDkxLCAyMTcsIDc3LCA0NCwgMjQ0LCA5MSwgMjE3LCA3NywgCi0gICAgMTIwLCAyNDQsIDkxLCAyMTcsIDc3LCAxMjQsIDI0NCwgOTEsIDIxNywgNzcsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIAotICAgIDI0OCwgNjAsIDIxMCwgMTYwLCAxODcsIDIxOCwgMjQyLCAyMTAsIDE2MCwgMTg3LCAyMTUsIDQ5LCAyNDksIDIyNiwgNDMsIAotICAgIDcxLCAyNDksIDk5LCAxMjcsIDQ0LCA3MSwgMjQ5LCA5OSwgMTI3LCA0MywgNzEsIDIyNiwgMywgNDQsIDcxLCAyMjYsIDMsIAotICAgIDIxMCwgMTYwLCAxODcsIDQzLCAyMzYsIDE1LCAxMjcsIDIxMCwgMTYwLCAxODcsIDQ0LCAyMzYsIDE1LCAxMjcsIDIxMCwgCi0gICAgMTYwLCAxODcsIDQzLCAyNTEsIDI0MiwgMTI3LCAyMTAsIDE2MCwgMTg3LCA0NCwgMjUxLCAyNDIsIDEyNywgNDMsIDQyLCAKLSAgICAyNTEsIDE1OCwgMiwgMjE0LCAxODMsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNCwgMTgzLCA0MywgNDIsIDI1MSwgMTU4LCAKLSAgICAyLCAyMTYsIDExNSwgMjM2LCAwLCAyMTYsIDE0LCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIAotICAgIDIzNiwgMCwgMjUxLCAxNzUsIDI0OSwgMTYwLCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgMjM2LCAwLCAyNTEsIAotICAgIDE3NSwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDIxNiwgMTQsIDI0OSwgMTYwLCAKLSAgICA0MywgMjU0LCAxMTAsIDI1MSwgMTU4LCAyLCAyNDcsIDEyMCwgNDQsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMiwgMjQ3LCAxMjAsIAotICAgIDQzLCAyNTQsIDI2LCAyMzMsIDE1LCAxMjcsIDQ0LCAyNTQsIDI2LCAyNDIsIDEzMCwgMTI3LCA1MiwgNDMsIDI1NCwgMjYsIAotICAgIDI0MiwgMTMwLCAxMjcsIDUyLCA0NCwgMjU0LCAyNiwgMjMzLCAxNSwgMTI3LCA0MywgODUsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0NCwgODUsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNDYsIDExOCwgMjQ0LCAxMzUsIDY3LCAyMTAsIDM1LCAyMzIsIAotICAgIDIxMywgMjMxLCA4OCwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyMzMsIDQ2LCA0NCwgMjU0LCAxMTAsIDIxNCwgMTIsIDIsIDIxOCwgCi0gICAgMjM0LCAyMzEsIDg4LCA0NCwgMjU0LCAxMTAsIDIsIDI0NywgMTIwLCAyNTQsIDExMCwgMiwgMjIyLCA5MiwgMjM1LCAyMTUsIAotICAgIDI1NSwgMywgMjU0LCAxMDksIDIxOCwgMjU1LCAyNTQsIDExMCwgMjI2LCAxNzAsIDIzMywgNDYsIDIxOCwgMjU1LCAyNTQsIAotICAgIDExMCwgMjI2LCAxNzAsIDIxNCwgMTYzLCAyMTUsIDk0LCAyNTQsIDEwOSwgMjIzLCA0OSwgMjU0LCAxMDksIDI1NCwgMTEwLCAKLSAgICAyLCAyMTQsIDE4MywgMjIzLCA0OSwgMjU0LCAxMTAsIDIsIDIxNCwgMTgzLCAyMjYsIDI0OCwgMjU0LCAxMTAsIDIyNiwgCi0gICAgMTcwLCAyMTQsIDE2MywgMjI2LCAyNDgsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjQ2LCAxMDYsIDIzMSwgODgsIDI1NCwgMTEwLCAKLSAgICAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjIyLCAyNTEsIDIzMSwgODgsIAotICAgIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjMzLCA0NiwgCi0gICAgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjQsIDIyLCAKLSAgICAyMjIsIDI1MSwgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCAKLSAgICA3LCAxMjQsIDIyLCAyMzMsIDQ2LCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIAotICAgIDgwLCAyMjUsIDcsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAKLSAgICAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDMsIDIyLCAyMTQsIDE2MywgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgCi0gICAgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0NCwgMjIsIDI0NiwgMTA2LCAyMzEsIDg4LCAyNTQsIAotICAgIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQzLCAyMiwgMjQ2LCAxMDYsIDIyMywgCi0gICAgNDksIDI0NSwgMTUyLCAyMjAsIDEyNywgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCAyMjYsIDEyMywgMjQ1LCAxNTIsIDIyMCwgCi0gICAgMTI4LCAyLCA0LCAyNTAsIDM2LCA0OCwgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE1MiwgMjIwLCAKLSAgICAxMjgsIDIsIDQzLCA4MCwgNDgsIDI1MCwgMzYsIDIsIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgNywgMzcsIAotICAgIDIyMywgNTAsIDIxOSwgNDYsIDM3LCAyMjUsIDE3MSwgMjUwLCAzNiwgMjQ3LCAxNzMsIDI1MSwgNzgsIDIwMywgMjUyLCAKLSAgICAxNDEsIDIyLCAyMTYsIDE0LCAxNjMsIDI0NywgMTczLCAyNTEsIDc4LCA2NywgMTMwLCAyNTAsIDM2LCAyLCAyMTgsIDI0LCAKLSAgICAyMTEsIDE3OCwgMzcsIDI1NCwgODcsIDI0NywgMTY5LCA1MCwgMTIwLCA4MCwgMjE2LCAxMzksIDI1MCwgMzUsIDM3LCA3MSwgCi0gICAgMjUxLCAxMTMsIDM3LCAyNTEsIDExMywgMzcsIDIzMywgMTQsIDM3LCAyNDIsIDEyOSwgMjUwLCAzNiwgMiwgNCwgMjUwLCAKLSAgICAzNiwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyNTAsIDM2LCAyLCAxMTMsIDIwMywgMjE4LCA5MSwgMjE2LCA0MiwgCi0gICAgMjE2LCAxOTYsIDIyMiwgMjUxLCA5MiwgMjIyLCAyMjgsIDI0NywgMjU1LCAyMTksIDk1LCA5MiwgMjQ0LCAxNzUsIDI0NywgCi0gICAgMjU1LCAyMTksIDk1LCA5MiwgMjUzLCAyMTYsIDkyLCA0LCAyNTAsIDM1LCA5MiwgMjE4LCAyMzQsIDExMywgMjM1LCA2NSwgCi0gICAgMjE4LCAyMzIsIDIxNSwgMjI2LCAyLCA1OSwgNDgsIDIxNSwgMjI2LCAyLCAyMTQsIDE4MywgMjIyLCA5MiwgMjM2LCAwLCAKLSAgICAyMTUsIDIyNSwgMjE1LCAyMjYsIDIsIDIyMCwgMTM0LCAyNTMsIDIwNywgMjUxLCAxNzQsIDQ0LCAyMTUsIDIyNiwgNzcsIAotICAgIDQzLCAyMTUsIDIyNSwgNDMsIDIxNSwgMjI2LCAyNTIsIDMwLCA2NywgMTMwLCA2NywgMjUyLCAxNDEsIDI1MiwgMzAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjUxLCAxNjUsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNTEsIDE2NSwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIAotICAgIDg1LCAyNTEsIDE2NCwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAzMCwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDcxLCAKLSAgICAyNDAsIDIzNiwgODUsIDI0MCwgMjM2LCA0MywgMjExLCAyNDQsIDI0NCwgMTM1LCA0NCwgMjExLCAyNDQsIDI0NCwgMTM1LCAKLSAgICA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgNDQsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDIzNSwgMjQ4LCAyMzUsIAotICAgIDIzNCwgMjE2LCAxMTIsIDExNywgMjM1LCAyMzQsIDIzNSwgMjM1LCAyMjksIDEwMiwgMiwgNjcsIDEzMCwgMjQ2LCAxMTIsIAotICAgIDIzMCwgODcsIDQyLCAyLCAyNDksIDE4MSwgMjI2LCAxMjcsIDIzNSwgMjQ2LCAyNTMsIDIzNywgMjE5LCAyMTksIDIyNCwgCi0gICAgMTgwLCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA3LCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA4LCAyLCAKLSAgICAyMTYsIDg5LCA0OCwgMjQwLCAxMDQsIDIxNiwgNDIsIDIyLCAyMTksIDk3LCAyMjYsIDcsIDI0MiwgMTgzLCAyMTgsIDE1NSwgCi0gICAgMjE2LCAxODUsIDI0NiwgMTA1LCAyMTUsIDIyNiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI0NiwgMTA1LCAyMTUsIDIyNiwgCi0gICAgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDg1LCAyNDcsIDI0OSwgMiwgMTI0LCA3NCwgODUsIDIzMiwgMTA0LCA3MSwgMjUwLCAKLSAgICAzNiwgMiwgMTI0LCA3NCwgODUsIDI1MCwgMzYsIDIsIDEyNCwgNzQsIDI0NSwgODUsIDcxLCAyMTgsIDIzNCwgMjQ1LCA4NSwgCi0gICAgODUsIDIxOCwgMjM0LCAyNDUsIDg1LCA3MSwgMjQ3LCAyNDgsIDI0NSwgODUsIDg1LCAyNDcsIDI0OCwgMjQ1LCA4NSwgNzEsIAotICAgIDI1MCwgMzUsIDI0NSwgODUsIDg1LCAyNTAsIDM1LCAyMjIsIDEzMiwgMjIzLCA1MCwgMjE5LCA0NywgMjI2LCAxNjcsIDIxOSwgCi0gICAgNDcsIDIsIDIyNiwgMTIzLCAyMjMsIDUwLCAyMTksIDQ3LCAyLCAyMDMsIDkxLCAyNTEsIDI0OSwgMjE5LCA0NiwgMjUxLCAKLSAgICAyNDksIDIyMywgNTAsIDIxOSwgNDYsIDUyLCAyMjUsIDIyLCAyMTUsIDIxMSwgMjI1LCAyMiwgMjMzLCA0MiwgMjQ5LCA5MSwgCi0gICAgMjU0LCAxMTAsIDEyNywgMjIyLCAyNDcsIDI0OSwgOTEsIDI1NCwgMTEwLCAxMjcsIDIxNiwgNzgsIDIzMCwgMTc5LCAyMzAsIAotICAgIDI0LCAzNywgNTksIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgOTYsIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgMzAsIDIyNiwgCi0gICAgMTY3LCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAxNjgsIDIsIDI0NywgMTIwLCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAKLSAgICAxNjgsIDIsIDIyNSwgMjIsIDIzMCwgMjQsIDQyLCAyMzUsIDE5OSwgMjI2LCAxNjcsIDIzMCwgMjQsIDQyLCAyMTQsIDE3NiwgCi0gICAgMjI2LCAxNjcsIDExMywgMjMyLCAxNDYsIDIyLCAyMjYsIDE2NywgMTEzLCAyMzIsIDE0NiwgMTc3LCAyMjYsIDE2NywgMjMwLCAKLSAgICAyNCwgMzAsIDIyNiwgMTY3LCAyMzAsIDE1NCwgMTEzLCAyMTgsIDQzLCAyMTgsIDQxLCAyLCAyMzUsIDIxMSwgMjI0LCAyNCwgCi0gICAgMjM1LCAyMTIsIDIyNiwgMTY3LCAyNDQsIDk5LCAyMjUsIDI1NSwgMjM1LCAyMTEsIDIzNSwgMjEyLCAyLCA1MiwgOTEsIAotICAgIDIzNSwgMjEyLCAyNTMsIDE3MywgMiwgMjE5LCA5NSwgMjUwLCAzMiwgMjQzLCAyMjYsIDI1NCwgODgsIDIzNSwgMjA5LCAKLSAgICAyMzIsIDIxNCwgMjM1LCAyMTAsIDIsIDIyMywgMTE1LCAyMjUsIDIzNywgMjU0LCAyLCAyMjUsIDEsIDIzMiwgMjE0LCAyMzUsIAotICAgIDIxMCwgMiwgMjIwLCAxNTIsIDIyNSwgMjM3LCAyNTQsIDIsIDIyNSwgMSwgMjMyLCAyMTQsIDIzNSwgMjEwLCAyMjgsIDUyLCAKLSAgICAyMzUsIDI1MCwgMjE2LCAxOTYsIDIyNSwgMSwgMjM1LCAyMTIsIDI1NCwgMiwgMTE1LCAyMjUsIDExLCAyMjYsIDE2NywgCi0gICAgMjI0LCAxOCwgMjM1LCAyMTIsIDIyNiwgMTY3LCAyMzUsIDIxMiwgMiwgMTQwLCA4MCwgMiwgMTAzLCAyMzUsIDIxMiwgMiwgCi0gICAgMzAsIDUwLCAyMzUsIDIxMiwgMiwgMjM1LCAxOTgsIDIzNSwgMjEyLCAyLCAyMTQsIDE3NSwgMjM1LCAyMTIsIDIsIDIyNiwgCi0gICAgMTIzLCAyMzUsIDIxMiwgMiwgMjE0LCAxODMsIDIzNSwgNjYsIDIzMywgODUsIDQzLCAyMTUsIDIyNiwgMjI2LCAxNjcsIAotICAgIDIxMCwgMTYwLCAxODcsIDIyMSwgMjAxLCAyNDksIDIwOSwgMjEwLCAxNjAsIDE4NywgMjIxLCAyMDEsIDIyNSwgNTYsIDIxMCwgCi0gICAgMTYwLCAxODcsIDIyMSwgMjAxLCAyMjQsIDE3NiwgOTYsIDUsIDIsIDQsIDI1MCwgMzYsIDQ4LCA5NiwgNSwgMiwgMjUwLCAKLSAgICAzMSwgMjU1LCAxNSwgNDgsIDk2LCA1LCAyLCAyMTYsIDg5LCA0OCwgOTYsIDUsIDIsIDU5LCA1MSwgOTYsIDUsIDIsIDIxNiwgCi0gICAgODksIDUxLCA5NiwgNSwgMiwgMjE4LCA2NSwgMTA1LCA5NiwgNSwgMiwgODUsIDIxNSwgMjI1LCAyMzAsIDE4MiwgNSwgMiwgCi0gICAgMjQ5LCAyMjAsIDQ4LCAyMzAsIDE4MiwgNSwgMiwgNTksIDUxLCAyMzAsIDE4MiwgNSwgMiwgMjQ0LCAxNzUsIDI0NywgMTE4LCAKLSAgICAyMzAsIDE4MiwgNSwgMiwgMjIyLCAyMjgsIDI0NywgMTE4LCA5NiwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCA5NiwgCi0gICAgNSwgMjM2LCAwLCA0NCwgMTYzLCAyNTAsIDM1LCAyMTMsIDI1NCwgMTc3LCAyNDksIDEzMSwgMjI0LCAxODAsIDIzMCwgODQsIAotICAgIDUsIDIsIDU5LCA0OCwgMjMwLCA4NCwgNSwgMiwgMjE0LCAxODMsIDIyMCwgMTQ5LCAyMjQsIDE4MSwgMiwgMjUxLCAxNzUsIAotICAgIDI0OSwgMjU1LCAyMTksIDc3LCAyMjQsIDE4MCwgMjMwLCA4NCwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCAyMzAsIAotICAgIDg0LCA1LCAyMzYsIDAsIDQ0LCAxNjMsIDI1MCwgMzUsIDM3LCAyMzAsIDg0LCA1LCAyLCAyNTAsIDMxLCAyNTUsIDE0LCAKLSAgICAyMzAsIDg0LCA1LCAyMzYsIDAsIDUyLCAyNTAsIDM1LCAzNywgMjQ3LCAxNjksIDUwLCA5NiwgNSwgMjM2LCAwLCAyMTUsIAotICAgIDIyNSwgMjMwLCAxODIsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzMCwgODQsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzNSwgCi0gICAgMjA2LCAyMjQsIDE4MCwgMjIyLCAyNDIsIDIzNSwgMjA2LCAyMjQsIDE4MCwgMjEwLCAxNjAsIDE4NywgMjIzLCA5MCwgMjQ5LCAKLSAgICAyMDksIDI1NCwgMTM0LCAxNzcsIDI0OSwgMTY1LCAyMzUsIDE5OSwgMiwgMjQ3LCAxMjAsIDIxNCwgMTc2LCAyLCAyMzAsIAotICAgIDE4MiwgNTAsIDIxNCwgMTc2LCAyLCAyMjYsIDEyMywgMjM1LCAxOTksIDIsIDIyNiwgMTIzLCAyMzUsIDE5OSwgMiwgMjMyLCAKLSAgICAxNDYsIDI1NCwgMTE4LCAyMTQsIDE3NiwgMiwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMTQsIDE3NiwgNzcsIDIzNSwgMTk4LCAKLSAgICAyMzUsIDE5OSwgNzcsIDIxNCwgMTc1LCAyMTQsIDE3NiwgNzcsIDI1MiwgMTQxLCA3NywgMjM1LCAxOTgsIDIzNSwgMTk5LCAKLSAgICA3NywgMjUyLCAxNDEsIDc3LCAyMTQsIDE3NSwgMjE0LCAxNzYsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMTQsIDE3NSwgCi0gICAgMjM1LCAxOTksIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMzUsIDE5OCwgMjUwLCAwLCAyMTQsIDE3NiwgMiwgMjIwLCAKLSAgICAxMzMsIDI1MCwgMCwgMjM1LCAxOTksIDIsIDIyMCwgMTMzLCA1MiwgNDIsIDIzNSwgMTk4LCA1MiwgNDIsIDIxNCwgMTc1LCAKLSAgICAyNTAsIDAsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNCwgMjIsIDIxOSwgNzcsIDIyNCwgMTgwLCAyMzIsIDE0NiwgMjIsIDIsIAotICAgIDU5LCA0OCwgMjMyLCAxNDYsIDE3NywgMiwgNTksIDQ4LCA1MiwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjMyLCAxNDYsIAotICAgIDIyNiwgMTU4LCAxMTMsIDIzNSwgMjAwLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDExMywgMjM1LCAyMDAsIDIzMiwgMTQ2LCAKLSAgICAyMjYsIDE1OCwgMjE5LCA4NSwgMjMzLCA4NSwgMjI2LCAxNTgsIDIxOSwgODUsIDIzMywgODUsIDI1NCwgMTE4LCAyMzIsIAotICAgIDE0NiwgMTc3LCAyMjYsIDEyMSwgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzIsIDE0NiwgMjIsIDIsIDIzMCwgMjI0LCAyMTgsIAotICAgIDEzOSwgMjMyLCAxNDYsIDE3NywgMiwgMjMwLCAyMjQsIDIxOCwgMTM5LCAyMzIsIDE0NiwgMjIsIDIsIDIwMywgMjQ4LCAKLSAgICAxNTYsIDIzMiwgMTQ2LCAxNzcsIDIsIDIwMywgMjQ4LCAxNTYsIDIzMiwgMTQ2LCAyMiwgMiwgNTIsIDIyNiwgMTIzLCAyMzIsIAotICAgIDE0NiwgMjIsIDIsIDIxNCwgMTgzLCAyMzIsIDE0NiwgMjIsIDIsIDUyLCAyMTQsIDE4MywgNCwgMjEzLCAyNTEsIDIsIDIxNCwgCi0gICAgMTgzLCAyMzIsIDE0NiwgMTc3LCAyLCA1MiwgMjI2LCAxMjMsIDIzMiwgMTQ2LCAxNzcsIDIsIDUyLCAyMTQsIDE4MywgMjEwLCAKLSAgICAxNjAsIDE4NywgMjQ3LCAxMjksIDI1NCwgNzksIDIxMCwgMTYwLCAxODcsIDIyMywgMTQ4LCAyNTQsIDc5LCAyNDUsIDk4LCAKLSAgICA1LCAyLCA1OSwgNTEsIDI0MCwgMTA0LCAyLCA1OSwgNDgsIDIxNSwgMjExLCAyMDMsIDI1MiwgMTQxLCAyLCA1MiwgNjcsIAotICAgIDkxLCAyMTUsIDIxMSwgMjAzLCAyNTIsIDE0MSwgMiwgMjE1LCAyMTEsIDY3LCA5MSwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIAotICAgIDU5LCA0OCwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIDIyMiwgMjI4LCAyNDcsIDExOCwgMjE5LCAxNjIsIDIzMCwgMTgyLCAKLSAgICAyMTksIDE2MSwgMjQ5LCAxOTksIDIsIDU5LCA0OCwgMjQ1LCA5OCwgMiwgMjUzLCAyMTYsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgCi0gICAgNDIsIDIsIDI1MCwgMzEsIDI1NSwgMTQsIDI1NCwgNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjQ1LCA5OCwgNSwgNzcsIDk2LCAKLSAgICA1MCwgOTYsIDUsIDc3LCAyNDUsIDk4LCA1MCwgMjQ1LCA5OCwgNSwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA1MiwgMjQ5LCAKLSAgICAyMjcsIDI0NSwgOTksIDExMywgMjQ5LCAxOTQsIDI0NSwgOTgsIDIxOSwgMTc2LCAxMzQsIDI0OSwgMTk0LCAyNDUsIDk4LCAKLSAgICAyMTksIDE3NiwgMjQ1LCA5OCwgNSwgMiwgMTEzLCAxNzAsIDc3LCAyMiwgMTEzLCAxNzAsIDUxLCAyNDUsIDk0LCAyLCAyNDQsIAotICAgIDExLCAxNzAsIDQ4LCAyMzMsIDE1LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMjQyLCAxMzAsIDIsIDI1MCwgMzYsIDIzNSwgCi0gICAgMjE1LCAyMzMsIDE1LCAyLCAyMjQsIDEzLCAxNjQsIDQ4LCAyNDIsIDEzMCwgMiwgMjI0LCAxMywgMTY0LCA0OCwgMjMzLCAKLSAgICAxNSwgMTc3LCAyMTksIDk3LCAxMjgsIDExMSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAxMTEsIDIzMywgMTUsIAotICAgIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgMjM1LCAyMTUsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgCi0gICAgMjE2LCA0MiwgMiwgNTksIDIzNSwgMjE1LCAyMzMsIDE1LCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAKLSAgICAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjMzLCAxNSwgMTc3LCAyMTksIDk3LCAKLSAgICAxMjgsIDIxNiwgNDIsIDIsIDU5LCA3NywgMjIyLCAyNTEsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgCi0gICAgMiwgNTksIDc3LCAyMzMsIDQ2LCAyMzMsIDE1LCAxNzcsIDI1NCwgNDksIDI0MiwgMTMwLCAxNzcsIDI1NCwgNDksIDIzMywgCi0gICAgMTUsIDIyLCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MiwgMTMwLCAyMiwgMjE5LCAxNTMsIDIyOCwgNTIsIAotICAgIDEyOCwgMTExLCAyMzMsIDE1LCAyMiwgMjI4LCA1MiwgMjU0LCA0OSwgMjQyLCAxMzAsIDIyLCAyMjgsIDUyLCAyNTQsIDQ5LCAKLSAgICAyMzMsIDE1LCA3NywgMjQ2LCAxMTEsIDEyOCwgNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAxMjgsIAotICAgIDc3LCAyMzMsIDE0LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDE3NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDE2MiwgCi0gICAgMTc3LCAyNDUsIDk5LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDc3LCAyMTksIAotICAgIDE2MiwgNzcsIDIzMywgMTQsIDIzMywgMTUsIDc3LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAyNDUsIDk5LCAyNDIsIDEzMCwgCi0gICAgNzcsIDIzMywgMTUsIDc3LCAyNDYsIDExMSwgMjQ1LCA5OSwgMjMzLCAxNSwgNzcsIDIxOSwgOTcsIDEyOCwgNzcsIDI0MiwgCi0gICAgMTMwLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDk3LCAxMjgsIDc3LCAyMzMsIDE1LCA3NywgCi0gICAgMjE5LCA5NywgMjQ1LCA5OSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDIxOSwgOTcsIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTUsIDIsIDU5LCAyMzUsIDIxNSwgCi0gICAgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTMwLCAyLCA1OSwgMjM1LCAyMTUsIDI0NiwgMTExLCAxMjgsIAotICAgIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjQ2LCAxMTEsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMjQ2LCAxMTEsIAotICAgIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyNDYsIDExMSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAKLSAgICAxNzcsIDI0MiwgMTI5LCAyMTksIDE2MiwgMTc3LCAyMzMsIDE0LCAyMTksIDE2MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCAxNjIsIAotICAgIDc3LCAyMzMsIDE1LCA3NywgMjQ1LCA5OCwgNTAsIDIxOSwgMTYyLCA3NywgMjQyLCAxMzAsIDc3LCAyNDUsIDk4LCA1MCwgCi0gICAgNTIsIDIyOSwgOTEsIDIzMywgMTQsIDUyLCAyMjksIDkxLCAyNDIsIDEyOSwgNTIsIDIyOSwgOTEsIDIzMywgMTUsIDIsIAotICAgIDIxNCwgMTgzLCAyNDIsIDEzMCwgMjI2LCAxMjEsIDIzMywgMTQsIDI0MiwgMTMwLCAyNTIsIDMwLCAyMzMsIDE0LCAyMzMsIAotICAgIDE1LCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDI0MiwgMTMwLCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDIzMywgCi0gICAgMTUsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MywgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDI0MiwgMTMwLCAyNTAsIDAsIAotICAgIDI1MSwgNzgsIDI0OSwgOTMsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyMTksIDc4LCAyMTYsIDIwMCwgMjMzLCA4MywgMjE2LCAKLSAgICAyMDAsIDIxOSwgNzgsIDIxNiwgMjAxLCAxNzcsIDEyOCwgMTExLCAyMzMsIDgzLCAyMTYsIDIwMSwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ1LCA5OCwgNSwgMiwgMjUxLCAxMDgsIDQ4LCAyMjQsIDIwMywgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjE4LCAKLSAgICA1NiwgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIAotICAgIDIxOCwgNTYsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgCi0gICAgNTYsIDc3LCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDIyOCwgCi0gICAgNTIsIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDI1NCwgMTQ4LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyMjgsIAotICAgIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDUyLCAyMjQsIDIwMiwgNTIsIDIxOCwgNTUsIDIxOCwgNjQsIDIsIDI0NywgMTIwLCAKLSAgICAyMTgsIDIyLCAyLCAyNDcsIDEyMCwgMjE4LCA2NCwgMiwgOTYsIDUsIDUxLCAyMTgsIDIyLCAyLCA5NiwgNSwgNTEsIDIxOCwgCi0gICAgNjQsIDIsIDIzMCwgODQsIDUsIDUxLCAyMTgsIDIyLCAyLCAyMzAsIDg0LCA1LCA1MSwgMjE4LCA2NCwgNjQsIDE3NywgMTI4LCAKLSAgICAyMTYsIDQyLCAyLCA1OSwgNDgsIDIxOCwgMjIsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMTgsIDY0LCAKLSAgICA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDIyLCA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDY0LCA2NCwgNzcsIDIxNiwgCi0gICAgODksIDIyNiwgMTY3LCAyMTgsIDIyLCA2NCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCAyMTgsIDY0LCA2NCwgNzcsIDI1NCwgCi0gICAgMTQ4LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNjQsIDY0LCA3NywgMjI4LCAKLSAgICA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCA3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAKLSAgICAxNjcsIDQyLCA0NCwgMjA0LCA5MywgMjI2LCAxNjcsIDI1MCwgMCwgMjE4LCA2MywgMjUwLCAwLCAyMTgsIDIxLCAyNTAsIDAsIAotICAgIDIxOCwgNjQsIDE3NywgMTI4LCAxMTEsIDI1MCwgMCwgMjE4LCAyMiwgMTc3LCAxMjgsIDExMSwgMjE4LCA2NCwgNzcsIDIxOCwgCi0gICAgMjEsIDIxOCwgMjIsIDc3LCAyMTgsIDYzLCAyMTgsIDY0LCA3NywgMjE4LCA2MywgMjE4LCAyMiwgNzcsIDIxOCwgMjEsIAotICAgIDIxOCwgMjIsIDI1MiwgMzAsIDIxOCwgNjMsIDIxOCwgMjIsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyNTEsIDc4LCAyNDgsIAotICAgIDE1NywgMiwgMjE4LCA2MywgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjQ2LCAxMDMsIDIyNSwgNDgsIDIsIDIxNywgMTIsIAotICAgIDIxNiwgMTMsIDIxNSwgMjQwLCAyMzUsIDE5OCwgMjQ0LCAyMSwgMjI4LCA2NSwgMjE5LCAyNTEsIDQzLCAyMTcsIDg3LCAKLSAgICAyMTksIDI1MSwgMTI0LCAyMTcsIDg3LCAyMTksIDI1MSwgMTIwLCAyMTcsIDg3LCAyMjUsIDE3MiwgMiwgMjIyLCA5MSwgNjcsIAotICAgIDI1MiwgMTQxLCAyMTUsIDIxMSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAKLSAgICAxNDEsIDUyLCA0MywgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQzLCAyMTUsIDkzLCAxOTksIDI0OCwgMTU3LCAKLSAgICAyNDMsIDI0MywgNDMsIDIzMSwgNjMsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUxLCAxMjQsIDIxNywgODgsIDIsIDIyNiwgCi0gICAgMTIzLCAyMTksIDI1MSwgMTIwLCAyMTcsIDg4LCAyLCAyMTQsIDE4MywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4OCwgNzcsIAotICAgIDIxOSwgMjUxLCAxMjQsIDIxNywgODcsIDUyLCAxMjQsIDIxNywgODcsIDUyLCAxMjAsIDIxNywgODcsIDUyLCAyMTgsIDEwMywgCi0gICAgMjI4LCA1MiwgNTAsIDIyMywgNDksIDUyLCAyMTgsIDEwMywgMjI4LCA1MiwgNTAsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDcsIAotICAgIDE3NSwgMiwgMjIzLCA0OSwgMjI5LCAxMDEsIDIxOSwgOTUsIDY3LCAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNDgsIDY3LCAKLSAgICAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNTEsIDEyNCwgMjE3LCA4OCwgMiwgMjUwLCAzNiwgNTEsIDIyNiwgOCwgMiwgMjAzLCAKLSAgICA5MSwgMjI2LCA4LCAyLCAyMTYsIDg5LCAyMjYsIDE2NywgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgMjUxLCAyNDQsIDIyMywgCi0gICAgOTEsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDIsIDIwMywgOTEsIDIxNSwgMjExLCAyNDksIDIyNywgMjI2LCAxNjcsIAotICAgIDIxNSwgMjExLCAyMjksIDkxLCAyMzMsIDE0LCAyMTUsIDIxMSwgMjI5LCA5MSwgMjQyLCAxMjksIDI0NiwgMTExLCAyMTksIAotICAgIDk3LCAyMzMsIDE1LCAxNzcsIDEyOCwgMTExLCAyNDYsIDExMSwgMjE5LCA5NywgMjQyLCAxMzAsIDE3NywgMTI4LCAxMTEsIAotICAgIDIxNSwgMjExLCAyMTksIDQ3LCAyNTEsIDI0NCwgMjIzLCA5MSwgMjMzLCA4NSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgCi0gICAgMjI2LCAxNjcsIDUyLCAyMTksIDQ3LCAyMjYsIDE2NywgNzEsIDY3LCAxMzAsIDIzMCwgMjQsIDcxLCA2NywgMTMwLCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzEsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDcxLCA3NCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDcxLCA3NCwgCi0gICAgMjE5LCAyOCwgMjEyLCA5LCA3MSwgNzQsIDQzLCA0NCwgNzEsIDc0LCAxNDAsIDg1LCA3NCwgMjE0LCAxNTMsIDg1LCA3NCwgCi0gICAgMjQ2LCAxMDQsIDg1LCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDg1LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA4NSwgNzQsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA4NSwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgODUsIDc0LCA0MywgNDQsIDg1LCA3NCwgMTIwLCAKLSAgICAxMjQsIDg1LCA3NCwgOTcsIDgwLCAyLCAyMTYsIDc3LCAyNDYsIDEwMywgOTcsIDgwLCAyLCAyMTYsIDc3LCAyMTQsIDE1MiwgCi0gICAgMTQwLCA4MCwgMiwgMjE2LCA3NywgMjQ2LCAxMDMsIDE0MCwgODAsIDIsIDIxNiwgNzcsIDIxNCwgMTUyLCA0MiwgMiwgMjE2LCAKLSAgICAxNCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIzMiwgMTA4LCA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIAotICAgIDI0NywgMjQ5LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgCi0gICAgMiwgMjE2LCAxNCwgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCAyNDYsIAotICAgIDExOCwgMjE4LCAyMzQsIDg1LCAyMzMsIDg1LCAyMTgsIDIzNCwgNzEsIDIzMywgODUsIDIxOCwgMjM0LCA4NSwgMjEzLCAKLSAgICAxODcsIDQsIDIxOCwgMjM0LCA3MSwgMjEzLCAxODcsIDQsIDIxOCwgMjM0LCA4NSwgMjI1LCAxOTAsIDcxLCAyMjUsIDE5MCwgCi0gICAgNzEsIDI0MSwgMTkzLCA4NSwgMjQxLCAxOTMsIDIwMywgODUsIDI0MSwgMTkzLCA4NSwgMjMzLCA4NSwgMjUwLCAzNSwgODUsIAotICAgIDIzMSwgODIsIDI0NywgMjQ4LCA3MSwgMjMxLCA4MiwgMjQ3LCAyNDgsIDg1LCAyMzEsIDgyLCAyMzIsIDEwNCwgNzEsIDIzMSwgCi0gICAgODIsIDIzMiwgMTA0LCA4NSwgNCwgMjQ3LCAyNDgsIDg1LCA0LCAyMzIsIDEwNCwgNzEsIDQsIDIzMiwgMTA0LCA4NSwgMjAzLCAKLSAgICAyNDUsIDE2NCwgNzEsIDIwMywgMjQ1LCAxNjQsIDg1LCA2NywgMjQ1LCAxNjQsIDcxLCA2NywgMjQ1LCAxNjQsIDQzLCA4MCwgCi0gICAgMiwgNCwgMjUwLCAzNSwgMTM0LCAxNDAsIDI1MywgMjQ3LCA0MywgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgMjE4LCAKLSAgICAyMzAsIDc0LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIAotICAgIDE0MCwgMjE1LCA1OCwgODAsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgCi0gICAgMTQwLCA4MCwgMiwgMjQ2LCAxMTgsIDIxOCwgMTM5LCAxNDAsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDE0MCwgODAsIAotICAgIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzcsIDE0MCwgMjE1LCA1OCwgCi0gICAgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgCi0gICAgMTQwLCA4MCwgMjE2LCAxMzksIDIxMSwgMTc4LCAyMTIsIDM2LCA4MCwgMjI1LCA3LCAyNDcsIDE5NSwgMjMzLCA0NiwgMjQ1LCAKLSAgICA5OCwgNSwgNzcsIDE0MCwgNzQsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY4LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIAotICAgIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgOTcsIDgwLCAyMTYsIDEzOSwgMjQyLCAxMjksIDk3LCA4MCwgMjE2LCAKLSAgICAxMzksIDIxOCwgMjEsIDE0MCwgMjI0LCAyNCwgNzQsIDk3LCAyMjQsIDI0LCA3NCwgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCA5NywgNzQsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAxNDAsIDgwLCA3NywgMjIzLCA1MCwgCi0gICAgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY3LCA3MSwgMjMxLCA4MiwgCi0gICAgMjE4LCAxNTYsIDg1LCA0LCAyMTgsIDE1NiwgNzEsIDQsIDIxOCwgMTU2LCA4NSwgMjIyLCAyNDcsIDIyNSwgMTkwLCA3MSwgCi0gICAgMjIyLCAyNDcsIDIyNSwgMTkwLCAxMTQsIDIzMywgODUsIDI1MCwgMzUsIDExNCwgMjI2LCAxMjQsIDIsIDIyNiwgMTI0LCAKLSAgICAyMzUsIDIxNSwgMTE0LCAyNTAsIDM2LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMTE0LCAyNTAsIDM1LCAxMTQsIDM3LCAyMjEsIAotICAgIDI1NCwgMTQ1LCA2LCAxLCAyNTMsIDE1OSwgMTQ1LCA2LCAxLCAyNTEsIDExNywgMTQ1LCA2LCAxLCAyMTMsIDI1MywgMTQ1LCAKLSAgICA2LCAxLCAyNDIsIDE4NSwgMTQ1LCA2LCAxLCAyNDcsIDE0MCwgMTQ1LCA2LCAxLCAyMTEsIDIxLCAxNDUsIDYsIDEsIDIxMCwgCi0gICAgNjgsIDE0NSwgNiwgMSwgMjQ2LCAzNCwgMTQ1LCA2LCAxLCAyMTAsIDkxLCAxNDUsIDYsIDEsIDIzNSwgMTQ4LCAxNDUsIDYsIAotICAgIDEsIDY1LCAyMzUsIDE0OCwgMTQ1LCA2LCAxLCA3MywgMTQ1LCA2LCAxLCAyNDcsIDE2MCwgMTQ1LCA2LCAxLCAyMzQsIDI0MCwgCi0gICAgMTQ1LCA2LCAxLCAyMzIsIDE4NiwgMTQ1LCA2LCAxLCAyMzAsIDI5LCAxNDUsIDYsIDEsIDIyOSwgMTkxLCAxNDUsIDYsIDEsIAotICAgIDIyNiwgMTg1LCAxNDUsIDYsIDEsIDIyNSwgNCwgMTQ1LCA2LCAxLCAyMjIsIDIyNywgMTQ1LCA2LCAxLCAyMTksIDgzLCAKLSAgICAxNDUsIDYsIDEsIDIxNSwgODEsIDE0NSwgNiwgMSwgMjE0LCAyMDEsIDE0NSwgNiwgMSwgMjQzLCAyNDYsIDE0NSwgNiwgMSwgCi0gICAgMjQxLCAxOTksIDE0NSwgNiwgMSwgMjI2LCAxMzUsIDE0NSwgNiwgMSwgMjI1LCAyMjEsIDE0NSwgNiwgMSwgMjE5LCAyMjgsIAotICAgIDE0NSwgNiwgMSwgMjE1LCAxNjcsIDE0NSwgNiwgMSwgMjUwLCA3NSwgMTQ1LCA2LCAxLCAyMjAsIDEwMiwgMTQ1LCA2LCAxLCAKLSAgICAyMTEsIDI3LCAxNDUsIDYsIDEsIDIxMSwgMjksIDE0NSwgNiwgMSwgMjExLCA1NywgMTQ1LCA2LCAxLCAyMTgsIDI1MywgCi0gICAgMTYyLCAxNDUsIDYsIDEsIDIxMCwgMjEyLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTg0LCAKLSAgICAyLCAyMTcsIDc3LCAxNDUsIDYsIDEsIDIxMCwgMjQ0LCAxNDUsIDYsIDEsIDIzNSwgMTg0LCA0LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjM1LCAxODQsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNDQsIDgyLCAxNDUsIDYsIDEsIDIzNSwgMTQ2LCAxNDUsIDYsIDEsIDIxOSwgMjI3LCAxNDUsIDYsIDEsIDIxNSwgCi0gICAgMjAyLCA2MSwgMTQ1LCA2LCAxLCAyMzMsIDc1LCAyMzAsIDI5LCAxNDUsIDQsIDEsIDI1MywgMTU5LCAxNDUsIDQsIDEsIAotICAgIDI1MSwgMTE3LCAxNDUsIDQsIDEsIDIxMywgMjUzLCAxNDUsIDQsIDEsIDI0MiwgMTg1LCAxNDUsIDQsIDEsIDI0NywgMTQwLCAKLSAgICAxNDUsIDQsIDEsIDIxMSwgMjEsIDE0NSwgNCwgMSwgMjEwLCA2OCwgMTQ1LCA0LCAxLCAyNDYsIDM0LCAxNDUsIDQsIDEsIAotICAgIDIxMCwgOTEsIDE0NSwgNCwgMSwgMjM1LCAxNDgsIDE0NSwgNCwgMSwgNjUsIDIzNSwgMTQ4LCAxNDUsIDQsIDEsIDczLCAKLSAgICAxNDUsIDQsIDEsIDI0NywgMTYwLCAxNDUsIDQsIDEsIDIzNCwgMjQwLCAxNDUsIDQsIDEsIDIzMiwgMTg2LCAxNDUsIDQsIDEsIAotICAgIDIzMCwgMjksIDE0NSwgNCwgMSwgMjI5LCAxOTEsIDE0NSwgNCwgMSwgMjI2LCAxODUsIDE0NSwgNCwgMSwgMjI1LCA0LCAKLSAgICAxNDUsIDQsIDEsIDIyMiwgMjI3LCAxNDUsIDQsIDEsIDIxOSwgODMsIDE0NSwgNCwgMSwgMjE1LCA4MSwgMTQ1LCA0LCAxLCAKLSAgICAyMTQsIDIwMSwgMTQ1LCA0LCAxLCAyNDMsIDI0NiwgMTQ1LCA0LCAxLCAyNDEsIDE5OSwgMTQ1LCA0LCAxLCAyMjYsIDEzNSwgCi0gICAgMTQ1LCA0LCAxLCAyMjUsIDIyMSwgMTQ1LCA0LCAxLCAyMTksIDIyOCwgMTQ1LCA0LCAxLCAyMTUsIDE2NywgMTQ1LCA0LCAxLCAKLSAgICAyNTAsIDc1LCAxNDUsIDQsIDEsIDIyMCwgMTAyLCAxNDUsIDQsIDEsIDIxMSwgMjcsIDE0NSwgNCwgMSwgMjExLCAyOSwgCi0gICAgMTQ1LCA0LCAxLCAyMTEsIDU3LCAxNDUsIDQsIDEsIDIxOCwgMjUzLCAxNjIsIDE0NSwgNCwgMSwgMjEwLCAyMTIsIDE0NSwgCi0gICAgNCwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzcsIDE0NSwgNCwgMSwgMjEwLCAKLSAgICAyNDQsIDE0NSwgNCwgMSwgMjM1LCAxODQsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgCi0gICAgMTQ1LCA0LCAxLCAyMzUsIDE4NCwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI0NCwgODIsIDE0NSwgNCwgMSwgCi0gICAgMjM1LCAxNDYsIDE0NSwgNCwgMSwgMjE5LCAyMjcsIDE0NSwgNCwgMSwgMjE1LCAyMDIsIDYxLCAxNDUsIDQsIDEsIDIzMywgCi0gICAgNzUsIDIzMCwgMjksIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA1MiwgMTMwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTIsIAotICAgIDEzMCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAxODIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDExNSwgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDcsIAotICAgIDI1NSwgOTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIAotICAgIDYsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDIxMCwgCi0gICAgMTYwLCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjU0LCAxNDMsIDcsIDYsIAotICAgIDEsIDIzMiwgNTAsIDIsIDEwMywgNywgNiwgMSwgMjE1LCA5NCwgNjEsIDcsIDYsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCAKLSAgICA0LCAxLCAyMTQsIDEwNiwgMiwgNDQsIDEwMywgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTIsIDk5LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDksIDEwMCwgNywgNiwgMSwgMTYzLCAyNDIsIDYwLCA3LCA0LCAxLCAKLSAgICAxNjMsIDI0MiwgNjAsIDcsIDQsIDEsIDIxNywgNzUsIDIyNSwgMTMzLCA3LCA0LCAxLCAxNjAsIDIsIDIyOCwgNTAsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAxNDQsIDIsIDEyMSwgMjIyLCAyMzQsIDIzNSwgCi0gICAgMjE1LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCA3NSwgNywgMjE4LCA2NSwgNCwgMSwgMjM1LCAxNDQsIDU4LCAxLCA2LCAyMTQsIAotICAgIDEwNSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIAotICAgIDI1MCwgMjE3LCA3NywgODEsIDYsIDEsIDI1NCwgMTY0LCA4MSwgNCwgMSwgMjU0LCAxNjQsIDgxLCA2LCAxLCAyMTMsIDE3MywgCi0gICAgODEsIDQsIDEsIDIxMywgMTczLCA4MSwgNiwgMSwgMjQzLCAxMDcsIDgxLCA0LCAxLCAyNDMsIDEwNywgODEsIDYsIDEsIAotICAgIDI0OCwgMTkxLCA4MSwgNCwgMSwgMjQ4LCAxOTEsIDgxLCA2LCAxLCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0NSwgMTk0LCA4MSwgCi0gICAgNiwgMSwgMjE5LCAzMywgODEsIDQsIDEsIDIxOSwgMzMsIDgxLCA2LCAxLCAyMTAsIDEwMSwgODEsIDQsIDEsIDIxMCwgMTAxLCAKLSAgICA4MSwgNiwgMSwgMjQxLCAyNDgsIDgxLCA0LCAxLCAyNDEsIDI0OCwgODEsIDYsIDEsIDIxNiwgMTc3LCA4MSwgNCwgMSwgCi0gICAgMjE2LCAxNzcsIDgxLCA2LCAxLCAyNDAsIDExNiwgODEsIDQsIDEsIDI0MCwgMTE2LCA4MSwgNiwgMSwgMjM0LCAyMjcsIDgxLCAKLSAgICA0LCAxLCAyMzQsIDIyNywgODEsIDYsIDEsIDIzMywgNzIsIDgxLCA0LCAxLCAyMzMsIDcyLCA4MSwgNiwgMSwgMjMwLCAyMzAsIAotICAgIDgxLCA0LCAxLCAyMzAsIDIzMCwgODEsIDYsIDEsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjI4LCAyMzMsIDgxLCA2LCAxLCAKLSAgICAyMzMsIDIzMywgODEsIDQsIDEsIDIzMywgMjMzLCA4MSwgNiwgMSwgNzYsIDgxLCA0LCAxLCA3NiwgODEsIDYsIDEsIDIyNSwgCi0gICAgMTA4LCA4MSwgNCwgMSwgMjI1LCAxMDgsIDgxLCA2LCAxLCAyMjIsIDIxMSwgODEsIDQsIDEsIDIyMiwgMjExLCA4MSwgNiwgCi0gICAgMSwgMjE5LCAxNjUsIDgxLCA0LCAxLCAyMTksIDE2NSwgODEsIDYsIDEsIDIxNywgNDEsIDgxLCA0LCAxLCAyMTcsIDQxLCAKLSAgICA4MSwgNiwgMSwgMjE0LCAyMjksIDgxLCA0LCAxLCAyMTQsIDIyOSwgODEsIDYsIDEsIDI0NCwgMTIxLCA4MSwgNCwgMSwgCi0gICAgMjQ0LCAxMjEsIDgxLCA2LCAxLCAyMzQsIDExMiwgODEsIDQsIDEsIDIzNCwgMTEyLCA4MSwgNiwgMSwgMjI0LCAxNjEsIDgxLCAKLSAgICA0LCAxLCAyMjQsIDE2MSwgODEsIDYsIDEsIDIyNiwgMTc4LCA4MSwgNCwgMSwgMjI2LCAxNzgsIDgxLCA2LCAxLCAyNDcsIAotICAgIDI1MywgMjU0LCAxNzAsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjU0LCAxNzAsIDgxLCA2LCAxLCA1NSwgODEsIDI1NCwgMTk2LCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDE5NiwgODEsIDYsIDEsIDI0OSwgMTE1LCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0OSwgCi0gICAgMTE1LCAyNDUsIDE5NCwgODEsIDYsIDEsIDI0NywgMjUzLCAyMzQsIDIyNywgODEsIDQsIDEsIDI0NywgMjUzLCAyMzQsIAotICAgIDIyNywgODEsIDYsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDQsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDYsIAotICAgIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDQsIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMjI2LCAxNzgsIDgxLCA0LCAxLCA1NSwgODEsIDIyNiwgMTc4LCA4MSwgNiwgMSwgMjIxLCAyNDYsIDgxLCA0LCAxLCAyMjEsIAotICAgIDI0NiwgODEsIDYsIDEsIDI0OSwgMTI4LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMjgsIDIyMCwgNTUsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDIyMCwgNTUsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgNTUsIDgxLCA2LCAxLCA1NSwgODEsIDI0NSwgNzUsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0NSwgNzUsIDgxLCA2LCAxLCAyNTQsIDE4MiwgMjM0LCAxMTcsIDgxLCA0LCAxLCAyNTQsIAotICAgIDE4MiwgMjM0LCAxMTcsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjQxLCA0NSwgODEsIDQsIDEsIDI0NywgMjUzLCAyNDEsIDQ1LCAKLSAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNiwgMSwgNTUsIDgxLCAKLSAgICAxNjIsIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTQ4LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE0OCwgCi0gICAgMTYyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIxNywgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMTcsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDI0MSwgMjUxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDI1MSwgODEsIDYsIDEsIDU1LCA4MSwgMjQzLCAxMDIsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0MywgMTAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDcsIDE2MywgODEsIDQsIDEsIDU1LCA4MSwgCi0gICAgMjQ3LCAxNjMsIDgxLCA2LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA2LCAxLCAKLSAgICA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA2LCAxLCA1NSwgCi0gICAgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA2LCAxLCA1NSwgMjI3LCAKLSAgICAyMDgsIDIyNywgMTQ4LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjcsIDE0OCwgODEsIDYsIDEsIDU1LCAyMjcsIDIwOCwgCi0gICAgMjEyLCAzNywgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjEyLCAzNywgODEsIDE2LCAyMzQsIDI0NiwgODEsIDE2LCAyMzAsIAotICAgIDIzMSwgMjIyLCAyMTEsIDgxLCAxNiwgMjI1LCAxMDksIDIyMiwgMjExLCA4MSwgMTYsIDIxOCwgMTQ3LCA4MSwgMTYsIDIxNywgCi0gICAgNDIsIDIyMiwgMjExLCA4MSwgMTYsIDIzNCwgMTEzLCAyMjIsIDIxMSwgODEsIDE2LCAyMjAsIDIzLCAyMTksIDE2NSwgODEsIAotICAgIDYsIDEsIDI0OSwgMTE1LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDIyMCwgNTUsIDgxLCA2LCAxLCAyNDksIDExNSwgCi0gICAgMjQzLCAxMDIsIDgxLCA0LCAxLCAyNDksIDExNSwgMjQzLCAxMDIsIDgxLCAzOCwgMjI4LCAyMzQsIDQ4LCA4MSwgMzgsIAotICAgIDIxOCwgMjQ3LCAyNTMsIDIyNCwgODEsIDM4LCAyMTgsIDI0NywgMjMzLCAyMSwgODEsIDYsIDEsIDI1MSwgMTk5LCAyMzQsIAotICAgIDExNywgODEsIDQsIDEsIDI1MSwgMTk5LCAyMzQsIDExNywgODEsIDU1LCAyMjcsIDIwOCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MSwgNTUsIDIyNywgMjA4LCAyNDcsIDE5NywgMjI0LCAxMywgNzgsIDgxLCA1NSwgMjI3LCAyMDgsIDIzNSwgMjM3LCAyMjQsIAotICAgIDEzLCA3OCwgODEsIDU1LCAyMjcsIDIwOCwgMjEzLCAyNDEsIDI0NywgMTcyLCA4MSwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIAotICAgIDgxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDgxLCAyMzAsIDEyNCwgMjQ3LCAxNzIsIDk4LCA0LCAxLCAyNTQsIDEyMywgOTgsIAotICAgIDQsIDEsIDI1MiwgMTUyLCA5OCwgNCwgMSwgMjQzLCAxMDYsIDk4LCA0LCAxLCAyNDcsIDEyOCwgOTgsIDQsIDEsIDI0NSwgCi0gICAgMTUwLCA5OCwgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MCwgOTgsIDQsIDEsIAotICAgIDIzNSwgMjU1LCA5OCwgNCwgMSwgMjM0LCAyMzQsIDk4LCA0LCAxLCAyMzMsIDgxLCA5OCwgNCwgMSwgMjMxLCAxODUsIDk4LCAKLSAgICA0LCAxLCAyMjksIDE5NSwgOTgsIDQsIDEsIDIyNiwgMTk2LCA5OCwgNCwgMSwgMjI2LCAxNywgOTgsIDQsIDEsIDIxMCwgNzgsIAotICAgIDk4LCA0LCAxLCAyMjMsIDE3MSwgOTgsIDQsIDEsIDIyMSwgMjQzLCA5OCwgNCwgMSwgMjE3LCA1MCwgOTgsIDQsIDEsIDIxNCwgCi0gICAgMTkwLCA5OCwgNCwgMSwgMjI1LCAxNDAsIDk4LCA0LCAxLCAyMzQsIDEyMSwgOTgsIDQsIDEsIDI0MiwgMjQxLCA5OCwgNCwgCi0gICAgMSwgMjI0LCA3MywgOTgsIDQsIDEsIDIyMCwgMjAsIDk4LCA0LCAxLCAyNTAsIDk3LCA5OCwgNCwgMSwgMjUxLCA3LCA5OCwgCi0gICAgNCwgMSwgMjM1LCAxMDAsIDk4LCA0LCAxLCAyNTAsIDQwLCA5OCwgNCwgMSwgMjUwLCAxNDMsIDk4LCA0LCAxLCAyMTEsIAotICAgIDE2MywgOTgsIDQsIDEsIDIzNSwgMTExLCA5OCwgNCwgMSwgMjQyLCA0MywgOTgsIDQsIDEsIDI0MSwgMjM4LCA5OCwgNCwgMSwgCi0gICAgMjQxLCAxNzUsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCA0LCA5OCwgNCwgMSwgMjQxLCA2NSwgOTgsIDQsIAotICAgIDEsIDIxMCwgMjQ2LCA5OCwgNCwgMSwgMjU0LCAyMzIsIDIxNiwgMTA4LCAxLCAxOTEsIDIxNiwgMTA4LCAxLCAyMTEsIDk5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA5OCwgMjE2LCAxMDgsIDEsIDIxMSwgODgsIDIxNiwgMTA4LCAxLCAyMTEsIDg2LCAyMTYsIAotICAgIDEwOCwgMSwgMjUyLCAzMiwgMjU1LCAxNiwgMjExLCA4MSwgMjE2LCAxMDgsIDEsIDIxMSwgODEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDk2LCAyMTYsIDEwOCwgMSwgMjExLCA5MywgMjE2LCAxMDgsIDEsIDIxMSwgOTUsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDk0LCAyMTYsIDEwOCwgMSwgMjExLCAxMiwgMjE2LCAxMDgsIDEsIDIxMSwgOTAsIDIxNiwgMTA4LCAxLCAyMTEsIDc5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNzksIDIxNiwgMTA4LCAxLCAyMTEsIDc2LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDI1MiwgMzIsIDI1NSwgMTYsIDIxMSwgODQsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDIxMSwgODMsIDIxNiwgMTA4LCAxLCAyMTEsIDEwMywgMjE2LCAxMDgsIDEsIDIxMSwgNzcsIAotICAgIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA3NywgMjE2LCAxMDgsIDEsIDIxMSwgNjYsIDIxNiwgMTA4LCAxLCAyMTUsIAotICAgIDExNSwgMjExLCA2NiwgMjE2LCAxMDgsIDEsIDIxMSwgOCwgMjE2LCAxMDgsIDEsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAKLSAgICAyNTQsIDIwNywgMjExLCA0OSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgMjExLCA3NSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgNzQsIDIxNiwgMTA4LCAxLCAyMTEsIDcxLCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgCi0gICAgODUsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA2OSwgMjE2LCAxMDgsIDEsIDIxMSwgNjcsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTAsIDIxMiwgMjE2LCAxMDgsIDEsIDIxMSwgNjQsIDIxNiwgMTA4LCAxLCAyMTEsIDYzLCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NywgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDg3LCAyMTYsIDEwOCwgMSwgMjUzLCAxNjMsIDIxMSwgODcsIDIxNiwgCi0gICAgMTA4LCAxLCAyMTEsIDYyLCAyMTYsIDEwOCwgMSwgMjExLCA2MCwgMjE2LCAxMDgsIDEsIDIxMSwgNjEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDU5LCAyMTYsIDEwOCwgMSwgMjExLCA1OCwgMjE2LCAxMDgsIDEsIDIxMSwgOTcsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDU2LCAyMTYsIDEwOCwgMSwgMjExLCA1NCwgMjE2LCAxMDgsIDEsIDIxMSwgNTMsIDIxNiwgMTA4LCAxLCAyMTEsIDUyLCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA1MCwgMjE2LCAxMDgsIDEsIDIxNywgMzQsIDIxMSwgNTAsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDQ4LCAyMTYsIDEwOCwgMSwgMjExLCA0NywgMjE2LCAxMDgsIDEsIDIxMCwgMjQ0LCAyMTYsIDEwOCwgNTgsIDEsIDIzMywgCi0gICAgMTI2LCA3OCwgMjE2LCAxMDgsIDIyMCwgMTM4LCA3OCwgMjE2LCAxMDgsIDExNiwgMjM1LCA2MywgMjksIDMsIDIzMiwgMTU1LCAKLSAgICAyOSwgMywgMjMwLCAxNjAsIDI5LCAzLCAyMjIsIDIwOSwgMjksIDMsIDIxOSwgNTcsIDI5LCAzLCAyMjAsIDYsIDI5LCAzLCAKLSAgICAyNTEsIDIwNCwgMjksIDMsIDIxNiwgNDEsIDI5LCAzLCAyNDksIDIzNywgMjksIDMsIDIyOCwgNzIsIDI5LCAzLCAyMjcsIAotICAgIDEzMywgMjksIDMsIDI0MiwgMTgwLCAyMjcsIDAsIDI5LCAzLCAyMTAsIDIyLCAyOSwgMywgMjQ3LCAxNDMsIDI5LCAzLCAKLSAgICAyNDgsIDEwNCwgMjksIDMsIDIzNSwgNjcsIDI5LCAzLCAyMTYsIDE1NSwgMjksIDMsIDI1MCwgODUsIDI5LCAzLCAyMjUsIAotICAgIDEyMCwgMjksIDMsIDIyNSwgMTUsIDI5LCAzLCAyNDIsIDI1NSwgMjksIDMsIDI0MiwgMjUxLCAyOSwgMywgMjQyLCAyNTIsIAotICAgIDI5LCAzLCAyNDIsIDI1MywgMjksIDMsIDIxOCwgMjIzLCAyOSwgMywgMjE4LCAxNzksIDI5LCAzLCAyMTgsIDE5MiwgMjksIAotICAgIDMsIDIxOCwgMjIyLCAyOSwgMywgMjE4LCAxOTYsIDI5LCAzLCAyMTgsIDE5NywgMjksIDMsIDIxOCwgMTg0LCAyOSwgMywgCi0gICAgMjUwLCAyMTMsIDI5LCAzLCAyNTAsIDE5MiwgMjksIDMsIDI1MCwgMTk0LCAyOSwgMywgMjUwLCAyMTIsIDI5LCAzLCAyNTAsIAotICAgIDIxMCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAxOTMsIDI5LCAzLCAyMDksIDI0MywgMjksIDMsIDIwOSwgMjIxLCAKLSAgICAyOSwgMywgMjA5LCAyMzQsIDI5LCAzLCAyMDksIDI0MiwgMjksIDMsIDIwOSwgMjM3LCAyOSwgMywgMjA5LCAyMzgsIDI5LCAKLSAgICAzLCAyMDksIDIyNiwgMjksIDMsIDI1MCwgMjA4LCAyOSwgMywgMjUwLCAxOTUsIDI5LCAzLCAyNTAsIDE5NywgMjksIDMsIAotICAgIDI1MCwgMjA3LCAyOSwgMywgMjUwLCAyMDUsIDI5LCAzLCAyNTAsIDIwNiwgMjksIDMsIDI1MCwgMTk2LCAyOSwgMywgMjIzLCAKLSAgICAyMzYsIDI5LCAzLCAyMjMsIDIyNiwgMjksIDMsIDIyMywgMjMyLCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzMywgCi0gICAgMjksIDMsIDIyMywgMjM0LCAyOSwgMywgMjIzLCAyMzEsIDI5LCAzLCAyMzMsIDE1OSwgMjksIDMsIDIzMywgMTUxLCAyOSwgCi0gICAgMywgMjMzLCAxNTQsIDI5LCAzLCAyMzMsIDE1OCwgMjksIDMsIDIzMywgMTU1LCAyOSwgMywgMjMzLCAxNTYsIDI5LCAzLCAKLSAgICAyMzMsIDE1MiwgMjksIDMsIDIxMSwgMTMwLCAyOSwgMywgMjExLCAxMjAsIDI5LCAzLCAyMTEsIDEyNiwgMjksIDMsIDIxMSwgCi0gICAgMTI5LCAyOSwgMywgMjExLCAxMjcsIDI5LCAzLCAyMTEsIDEyOCwgMjksIDMsIDIxMSwgMTI1LCAyOSwgMywgMjQyLCA3MSwgCi0gICAgMjksIDMsIDI0MiwgNjIsIDI5LCAzLCAyNDIsIDY1LCAyOSwgMywgMjQyLCA3MCwgMjksIDMsIDI0MiwgNjcsIDI5LCAzLCAKLSAgICAyNDIsIDY4LCAyOSwgMywgMjQyLCA2NCwgMzgsIDMzLCAxLCAyNTIsIDc1LCAzOCwgMzMsIDEsIDIxMywgMjU1LCAzOCwgMzMsIAotICAgIDEsIDI0MiwgMjM2LCAzOCwgMzMsIDEsIDI0OCwgOTAsIDM4LCAzMywgMSwgMjEwLCA3NCwgMzgsIDMzLCAxLCAyMTAsIDk0LCAKLSAgICAzOCwgMzMsIDEsIDE3NiwgMzgsIDMzLCAxLCAyNDUsIDE3NCwgMzgsIDMzLCAxLCAyNDUsIDE1OSwgMzgsIDMzLCAxLCAyNDUsIAotICAgIDE1MCwgMzgsIDMzLCAxLCA3NiwgMzgsIDMzLCAxLCAyMjUsIDIyMSwgMzgsIDMzLCAxLCAyNDUsIDkyLCAzOCwgMzMsIDEsIAotICAgIDI0NSwgODIsIDM4LCAzMywgMSwgMjE3LCAyMiwgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzgsIDM4LCAzMywgCi0gICAgMSwgMjUwLCAxMzEsIDM4LCAzMywgMSwgMjIwLCAxMDIsIDM4LCAzMywgMSwgMjIwLCA2NSwgMzgsIDMzLCAxLCAyNDQsIDgyLCAKLSAgICAzOCwgMzMsIDEsIDI0NSwgODEsIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2MCwgMzgsIDMzLCAxLCAyNDcsIAotICAgIDE2MSwgMzgsIDMzLCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAotICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE4MywgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzgsIDMzLCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCA0NCwgMjU0LCAKLSAgICAxMTAsIDIxOCwgNjAsIDIzMSwgMTU0LCA0NCwgMjU0LCAxMTAsIDI0NiwgMTE4LCAyMTgsIDYwLCAyMzEsIDE1NCwgNDMsIAotICAgIDIxOCwgNjAsIDEyNywgNDQsIDIxOCwgNjAsIDEyNywgNDMsIDI0NiwgMTE4LCAyMTgsIDYwLCAxMjcsIDQ0LCAyNDYsIDExOCwgCi0gICAgMjE4LCA2MCwgMTI3LCAyMjMsIDE1NywgMjM1LCAyMDIsIDIzMSwgMTU0LCAyMjMsIDE1NywgMjQ2LCAxMTgsIDIzNSwgMjAyLCAKLSAgICAyMzEsIDE1NCwgMjQ2LCAxMTgsIDIxNSwgMjQxLCAyMzEsIDE1NCwgNDMsIDIxNSwgMjQxLCAxMjcsIDQ0LCAyMTUsIDI0MSwgCi0gICAgMTI3LCAyMjMsIDE1NywgMjE4LCAyMzQsIDQzLCAyMjMsIDE1NywgMjI2LCAxOTgsIDEyNywgNDQsIDIyMywgMTU3LCAyMjYsIAotICAgIDE5OCwgMTI3LCAyNDUsIDIxMCwgMjQ5LCAxNTgsIDIyNiwgMTMsIDI0NCwgMjIsIDIyNiwgMTMsIDIyMywgNDksIDI0NCwgCi0gICAgMjIsIDIyNiwgMTMsIDI0MCwgMTY1LCAyNDYsIDExOCwgMjI2LCAyNTEsIDI0NiwgMTA0LCAyNTQsIDExOSwgMjE0LCAxNTMsIAotICAgIDI1NCwgMTE5LCAyNDYsIDExOCwgMjIyLCAyNDcsIDI1NCwgMTA5LCA1MiwgMjI2LCAyNDgsIDI0MCwgMTY4LCAyMzUsIDE5MywgCi0gICAgMjM1LCAyMDEsIDIyNiwgNTksIDI1MSwgMTU0LCAyNDAsIDE2OSwgMiwgMjQ4LCAxLCAyMTYsIDg5LCAyLCAyMjIsIDIzNCwgCi0gICAgNDgsIDQzLCAxMjEsIDIyNiwgNSwgMTI3LCA0NCwgMTIxLCAyMjYsIDUsIDEyNywgMjE2LCA4OSwgMiwgNTksIDQ4LCAyMTYsIAotICAgIDg5LCAyLCA1OSwgNTEsIDQzLCA2NywgMjUyLCAxNDEsIDIsIDIyNCwgNywgNDQsIDY3LCAyNTIsIDE0MSwgMiwgMjI0LCA3LCAKLSAgICAyMTYsIDE0LCA0MywgMTYzLCAxMjcsIDIxNiwgMTQsIDQ0LCAxNjMsIDEyNywgMjUxLCAxNzUsIDQzLCAxNjMsIDEyNywgCi0gICAgMjUxLCAxNzUsIDQ0LCAxNjMsIDEyNywgNDMsIDIxOSwgMTg3LCAxMDQsIDEyNywgNDQsIDIxOSwgMTg3LCAxMDQsIDEyNywgCi0gICAgNDMsIDUyLCAyMjYsIDMsIDQ0LCA1MiwgMjI2LCAzLCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgMTIzLCAKLSAgICA1OSwgMTE3LCAxMTMsIDE3MCwgMjI0LCAxNDAsIDkyLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCA3OCwgCi0gICAgMjIzLCA0OSwgMjI0LCAxMywgNzgsIDY3LCAxODIsIDIyMiwgMjM0LCAyMjUsIDEwLCAyMTEsIDIwOSwgMjIwLCAxMzgsIAotICAgIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjE1LCA5NCwgMjQ5LCAyMTksIDIyMywgMTU3LCAyNDcsIDEyMCwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjE5LCAyMTUsIDk0LCAyMjAsIDE1MCwgMjQ4LCAyMDYsIDIsIDQzLCAyNDIsIDEwOCwgMjQ4LCAyMDYsIDIsIDQ0LCAyNDIsIAotICAgIDEwOCwgMjE1LCA5NCwgMjQ4LCAyMDUsIDIxNiwgMTQsIDE2MywgMjIxLCAxNzMsIDUwLCAyMTUsIDU5LCAyNDgsIDE1NiwgCi0gICAgMjE2LCAxNDMsIDI0OCwgMTU2LCA5LCAzNCwgMjIzLCA3NiwgOSwgMzQsIDI1MCwgMTAsIDksIDM0LCAyMjEsIDE3NiwgMTEwLCAKLSAgICA5LCAzNCwgMjIxLCAxNzYsIDEwNSwgOSwgMzQsIDIyMSwgMTc2LCAxNTgsIDksIDM0LCAyMjUsIDE2NywgOSwgMzQsIDI1MSwgCi0gICAgMTYzLCA5LCAzNCwgMjE3LCA5MiwgOSwgMzQsIDIzNCwgMzMsIDExMCwgOSwgMzQsIDIzNCwgMzMsIDEwNSwgOSwgMzQsIAotICAgIDI0NywgMTcwLCA5LCAzNCwgMjIxLCAxNzksIDksIDM0LCA0LCAxMTAsIDksIDM0LCA0LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAKLSAgICAxMTAsIDksIDM0LCAyMzMsIDk3LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAxNTgsIDksIDM0LCAyMzMsIDk3LCAxNjEsIDksIAotICAgIDM0LCAyMTksIDY4LCA5LCAzNCwgMjE2LCAxNDUsIDksIDM0LCAyMTksIDY2LCAxMTAsIDksIDM0LCAyMTksIDY2LCAxMDUsIAotICAgIDksIDM0LCAyNDEsIDIyOCwgMTEwLCA5LCAzNCwgMjQxLCAyMjgsIDEwNSwgOSwgMzQsIDI0MiwgMTUsIDksIDM0LCAyMjMsIAotICAgIDE0NywgOSwgMzQsIDI1MCwgODIsIDksIDM0LCAyMTgsIDM3LCA5LCAzNCwgMjMwLCAxMjgsIDksIDM0LCAyNDgsIDg4LCA5LCAKLSAgICAzNCwgMjMwLCAxMjAsIDksIDM0LCAyNTAsIDI1LCA5LCAzNCwgMjEyLCA0MSwgMTEwLCA5LCAzNCwgMjEyLCA0MSwgMTA1LCAKLSAgICA5LCAzNCwgMjQ0LCA5NiwgOSwgMzQsIDIyNSwgMjMyLCAxMTAsIDksIDM0LCAyMjUsIDIzMiwgMTA1LCA5LCAzNCwgMjE5LCAKLSAgICAxNjAsIDE2MywgMjE1LCAyMzYsIDIxNSwgMTg4LCA5LCAzNCwgMjQ5LCAxNDUsIDksIDM0LCAyNDcsIDEzNiwgOSwgMzQsIAotICAgIDIzNSwgMTM3LCA5LCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIDI1MCwgOSwgMzQsIDI0NSwgMTUsIDksIDM0LCAyMTgsIDI0OSwgCi0gICAgMTEwLCA5LCAzNCwgMjE4LCAyNDksIDEwNSwgOSwgMzQsIDI1MiwgMTU0LCA5LCAzNCwgMjE5LCAxNjcsIDksIDM0LCAyNTEsIAotICAgIDYzLCAyMTksIDE2NywgOSwgMzQsIDIyOSwgOTAsIDExMCwgOSwgMzQsIDIyOSwgOTAsIDEwNSwgOSwgMzQsIDIyOSwgOTAsIAotICAgIDE1OCwgOSwgMzQsIDIyOSwgOTAsIDE2MSwgOSwgMzQsIDIzMSwgNDYsIDksIDM0LCAyMjAsIDU3LCA5LCAzNCwgMjIzLCAKLSAgICAxNTMsIDksIDM0LCAyNDUsIDM3LCA5LCAzNCwgMjI2LCAyMDksIDksIDM0LCAyNTEsIDEzMywgMTEwLCA5LCAzNCwgMjUxLCAKLSAgICAxMzMsIDEwNSwgOSwgMzQsIDIzMSwgODYsIDksIDM0LCAyMzAsIDEyMywgOSwgMzQsIDI0MiwgMTQwLCAxMTAsIDksIDM0LCAKLSAgICAyNDIsIDE0MCwgMTA1LCA5LCAzNCwgMjQyLCAxNDAsIDE1OCwgOSwgMzQsIDIxNiwgMTA2LCA5LCAzNCwgMjQ5LCAyNDksIDksIAotICAgIDM0LCAyMTIsIDksIDExMCwgOSwgMzQsIDIxMiwgOSwgMTA1LCA5LCAzNCwgMjUxLCA2MywgMjIxLCAxNzAsIDksIDM0LCAKLSAgICAyMTksIDE2MCwgMjQwLCAyNDgsIDksIDM0LCAyNDAsIDI0OCwgOSwgMzQsIDI1MSwgNjMsIDIxOSwgMiwgOSwgMzQsIDI1MSwgCi0gICAgNjMsIDIyMCwgNTIsIDksIDM0LCAyNDQsIDMyLCA5LCAzNCwgMjUxLCA2MywgMjUwLCAyMjgsIDksIDM0LCAyMTksIDE2MCwgCi0gICAgMjEyLCA1NywgOSwgMzQsIDIxMiwgNTgsIDExMCwgOSwgMzQsIDIxMiwgNTgsIDEwNSwgOSwgMzQsIDI1MCwgMjcsIDksIDM0LCAKLSAgICAyNTEsIDYzLCAyNDIsIDE2NiwgOSwgMzQsIDE5OSwgMTEwLCA5LCAzNCwgMTk5LCAxMDUsIDksIDM0LCAyNTEsIDYzLCAyMzIsIAotICAgIDEzNywgOSwgMzQsIDI1MSwgNjMsIDI0MywgODgsIDksIDM0LCAyMzAsIDExOSwgMTEwLCA5LCAzNCwgMjMwLCAxMTksIDEwNSwgCi0gICAgOSwgMzQsIDIyMywgMTU5LCA5LCAzNCwgMjUxLCAyMDcsIDksIDM0LCAyNTEsIDYzLCAyMTcsIDU2LCAyMzMsIDUyLCA5LCAKLSAgICAzNCwgMjUxLCA2MywgMjMzLCA1MywgOSwgMzQsIDI1MSwgNjMsIDIxMSwgMjM5LCA5LCAzNCwgMjUxLCA2MywgMjQ0LCA0NiwgCi0gICAgOSwgMzQsIDI0NSwgMjE4LCAxMTAsIDksIDM0LCAyNDUsIDIxOCwgMTA1LCA5LCAzNCwgMjQ1LCAyMTgsIDE1OCwgOSwgMzQsIAotICAgIDI1MSwgNjMsIDI0NSwgMjE3LCA5LCAzNCwgMjQxLCAyMzUsIDksIDM0LCAyNTEsIDYzLCAyNDAsIDI0NSwgOSwgMzQsIDI1MSwgCi0gICAgMTk0LCA5LCAzNCwgMjQyLCAyMjIsIDksIDM0LCAyNTEsIDYzLCAyNDQsIDkwLCA5LCAzNCwgMjUxLCA2MywgMjUxLCAyMzcsIAotICAgIDksIDM0LCAyNTEsIDYzLCAyMjIsIDEsIDksIDM0LCAyMTksIDE2MCwgMjEyLCAyLCA5LCAzNCwgMjE5LCAxNjAsIDIxMSwgCi0gICAgNDEsIDksIDM0LCAyNTEsIDYzLCAyNDMsIDI0NCwgOSwgMzQsIDIzNSwgMTQzLCAyNDUsIDQxLCA5LCAzNCwgMjUxLCA2MywgCi0gICAgMjQ1LCA0MSwgOSwgMzQsIDIzNSwgMTQzLCAyMTYsIDE1LCA5LCAzNCwgMjUxLCA2MywgMjE2LCAxNSwgOSwgMzQsIDIzNSwgCi0gICAgMTQzLCAyNDYsIDk2LCA5LCAzNCwgMjUxLCA2MywgMjQ2LCA5NiwgOSwgMzQsIDIxNSwgOTEsIDksIDM0LCAyMzUsIDE0MywgCi0gICAgMjE1LCA5MSwgOSwgMzQsIDI1MSwgNjMsIDIxNSwgOTEsIDYwLCAzNCwgMTEwLCA2MCwgMzQsIDIzMiwgMjEzLCA2MCwgMzQsIAotICAgIDI0NywgMTIwLCA2MCwgMzQsIDIxOSwgOTUsIDYwLCAzNCwgMjIxLCAxNzUsIDYwLCAzNCwgMTAzLCA2MCwgMzQsIDEwNSwgCi0gICAgNjAsIDM0LCAyMzIsIDIzNywgNjAsIDM0LCAyMzEsIDE4NSwgNjAsIDM0LCAyMzMsIDMzLCA2MCwgMzQsIDI0NSwgMTI5LCAKLSAgICA2MCwgMzQsIDE5NSwgNjAsIDM0LCAxMjQsIDI1MSwgMTYzLCA2MCwgMzQsIDI0OSwgMTQ3LCA2MCwgMzQsIDI0MCwgMTExLCAKLSAgICA2MCwgMzQsIDIxNywgOTIsIDYwLCAzNCwgMjA0LCAyNTEsIDE2MywgNjAsIDM0LCAyMzQsIDMyLCA2MCwgMzQsIDIyNCwgCi0gICAgMjI0LCA2MCwgMzQsIDIxMSwgMjAyLCA2MCwgMzQsIDIxOCwgMjQzLCA2MCwgMzQsIDQ0LCAyMDQsIDI1MSwgMTYzLCA2MCwgCi0gICAgMzQsIDI0MSwgMTc2LCAyNDUsIDE0NSwgNjAsIDM0LCAyMTYsIDI0NywgNjAsIDM0LCAyNDcsIDE3MCwgNjAsIDM0LCAyMjEsIAotICAgIDE3OSwgNjAsIDM0LCAyNTAsIDEwLCA2MCwgMzQsIDIyNCwgMTgyLCA2MCwgMzQsIDI1NCwgMjE1LCA2MCwgMzQsIDIzMCwgCi0gICAgMTEwLCA2MCwgMzQsIDI0NSwgMTQ1LCA2MCwgMzQsIDI0NSwgMjIzLCA2MCwgMzQsIDIyMSwgMjAwLCA2MCwgMzQsIDI0MiwgCi0gICAgMTc0LCA2MCwgMzQsIDI0MiwgMTc1LCAyMTksIDgxLCA2MCwgMzQsIDI0NSwgNDAsIDYwLCAzNCwgMjUxLCAyNDgsIDYwLCAKLSAgICAzNCwgMjExLCAyMjEsIDYwLCAzNCwgMjUwLCAxMDEsIDYwLCAzNCwgMjIyLCAxOTYsIDYwLCAzNCwgMjM1LCAyNTEsIDYwLCAKLSAgICAzNCwgMjE5LCA3OSwgNjAsIDM0LCAyMzMsIDk2LCA2MCwgMzQsIDI0OSwgMTU2LCA2MCwgMzQsIDIxOCwgMjM3LCA2MCwgMzQsIAotICAgIDIzMCwgMTE1LCA2MCwgMzQsIDIyMiwgMjI0LCA2MCwgMzQsIDIxMSwgMjA2LCA2MCwgMzQsIDIyNiwgMTkwLCA2MCwgMzQsIAotICAgIDIxNSwgOTcsIDYwLCAzNCwgMjQ2LCA4MCwgNjAsIDM0LCAyMTksIDI1MSwgMjE2LCAxNDUsIDYwLCAzNCwgMjQ2LCAxMTgsIAotICAgIDI1MCwgMTAsIDYwLCAzNCwgMTk5LCAyMTgsIDEwOCwgNjAsIDM0LCAxMTMsIDI0MiwgMTAsIDYwLCAzNCwgMjIwLCAwLCA2MCwgCi0gICAgMzQsIDI1MSwgMTY5LCA2MCwgMzQsIDIxOSwgNjUsIDYwLCAzNCwgMjUxLCAxMzcsIDYwLCAzNCwgMjE4LCAxMzgsIDYwLCAKLSAgICAzNCwgMjQxLCAyMjcsIDYwLCAzNCwgMjQyLCAyOCwgNjAsIDM0LCAyNDcsIDEyMywgNjAsIDM0LCAyNDIsIDE1LCA2MCwgMzQsIAotICAgIDI1MSwgMTU0LCA2MCwgMzQsIDIyMywgMTQ3LCA2MCwgMzQsIDIyMSwgMTg3LCA2MCwgMzQsIDI0NywgMTk5LCA2MCwgMzQsIAotICAgIDI1MywgMTY4LCA2MCwgMzQsIDIxOCwgMjM0LCA2MCwgMzQsIDIyOCwgNTEsIDYwLCAzNCwgMjE4LCAzNywgNjAsIDM0LCAKLSAgICAyMjEsIDIxMSwgNjAsIDM0LCAyMzAsIDEyOCwgNjAsIDM0LCAyMTUsIDIzNSwgNjAsIDM0LCAyMzMsIDEyMiwgNjAsIDM0LCAKLSAgICAyMTgsIDEyOSwgNjAsIDM0LCAyNDgsIDg4LCA2MCwgMzQsIDIxMiwgMjEsIDYwLCAzNCwgMjQ3LCAxNDYsIDIyOCwgNTEsIAotICAgIDYwLCAzNCwgMjQ5LCAyMTUsIDYwLCAzNCwgMjQzLCAyMjIsIDYwLCAzNCwgMjUwLCAyMSwgNjAsIDM0LCAyMTgsIDE0MiwgCi0gICAgNjAsIDM0LCAyMTIsIDQwLCA2MCwgMzQsIDI0NCwgOTYsIDYwLCAzNCwgMjUwLCAxOCwgNjAsIDM0LCAyNDQsIDE2MSwgNjAsIAotICAgIDM0LCA1MiwgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNiwgMjE1LCAxODgsIDYwLCAzNCwgMjE5LCA4OSwgNjAsIAotICAgIDM0LCAyNDQsIDE3MSwgNjAsIDM0LCAyNDksIDE0NSwgNjAsIDM0LCAyNDcsIDEzNiwgNjAsIDM0LCAyMjQsIDE3OSwgNjAsIAotICAgIDM0LCAyMzUsIDEzNywgNjAsIDM0LCAyMzEsIDY3LCA2MCwgMzQsIDIxNiwgODgsIDYwLCAzNCwgMjE3LCAyNDUsIDYwLCAzNCwgCi0gICAgMjMyLCAyMzEsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjAsIDYwLCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIAotICAgIDI1MCwgNjAsIDM0LCAyMTksIDE4OCwgNjAsIDM0LCAyNDYsIDExOCwgMjE2LCAyNDIsIDYwLCAzNCwgMjExLCAyNTMsIDYwLCAKLSAgICAzNCwgMjE5LCAxMDMsIDYwLCAzNCwgMjQ3LCAxODcsIDYwLCAzNCwgMjQ1LCAxNSwgNjAsIDM0LCAyMTksIDUsIDYwLCAzNCwgCi0gICAgNzQsIDYwLCAzNCwgMjE4LCAxMzEsIDYwLCAzNCwgMjE4LCAyNDgsIDYwLCAzNCwgMjE1LCAyNTUsIDYwLCAzNCwgMjQyLCAKLSAgICAxNDcsIDYwLCAzNCwgMjUwLCAyMTgsIDYwLCAzNCwgMjE4LCAxNjAsIDYwLCAzNCwgMjUyLCAxNTQsIDYwLCAzNCwgMjIzLCAKLSAgICAzMSwgNjAsIDM0LCAyMTksIDE2NywgNjAsIDM0LCAyMzUsIDEzMCwgNjAsIDM0LCAyMjksIDg5LCA2MCwgMzQsIDIyMCwgNTcsIAotICAgIDYwLCAzNCwgMjQ0LCAxNDksIDYwLCAzNCwgMjI2LCAyMDksIDYwLCAzNCwgMjU0LCAxMTgsIDYwLCAzNCwgMjI1LCAyOSwgCi0gICAgNjAsIDM0LCAyNDUsIDIyNywgNjAsIDM0LCAyNTEsIDEzMiwgNjAsIDM0LCAyMzEsIDg2LCA2MCwgMzQsIDIzMCwgMTgzLCAKLSAgICA2MCwgMzQsIDIyMCwgMTU2LCA2MCwgMzQsIDI1MywgMjUyLCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxNiwgMTksIAotICAgIDYwLCAzNCwgMjI2LCAxNjUsIDYwLCAzNCwgMjUxLCAyMDEsIDYwLCAzNCwgMjE4LCAxMjcsIDYwLCAzNCwgMjQ5LCAyMjUsIAotICAgIDYwLCAzNCwgMjQyLCAxMzksIDYwLCAzNCwgMjE2LCAxMDYsIDYwLCAzNCwgMjM1LCAyMTcsIDYwLCAzNCwgMjUxLCAyMTEsIAotICAgIDYwLCAzNCwgMjEyLCA1OCwgMjQ1LCAxNDUsIDYwLCAzNCwgMjQ5LCAyNDksIDYwLCAzNCwgMjEyLCA4LCA2MCwgMzQsIDIyMSwgCi0gICAgMTcwLCA2MCwgMzQsIDI0MCwgMjQ4LCA2MCwgMzQsIDIxOSwgMiwgNjAsIDM0LCAyMTQsIDIyLCA2MCwgMzQsIDI1MiwgNzIsIAotICAgIDYwLCAzNCwgMjI1LCA3MywgNjAsIDM0LCAyNTIsIDE3NCwgNjAsIDM0LCAyMjAsIDUyLCA2MCwgMzQsIDIyMywgMTEwLCA2MCwgCi0gICAgMzQsIDIyMiwgMTI2LCA2MCwgMzQsIDI0NCwgMzIsIDYwLCAzNCwgMjUxLCAyMDAsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAKLSAgICAzNCwgMjUxLCAyMjYsIDYwLCAzNCwgMjMwLCAxMjUsIDYwLCAzNCwgMjEyLCA1NywgNjAsIDM0LCAyNTAsIDI3LCA2MCwgMzQsIAotICAgIDIxMSwgMjM2LCA2MCwgMzQsIDI0NywgMTgwLCA2MCwgMzQsIDIxMywgMTYxLCA2MCwgMzQsIDI0MiwgMTY2LCA2MCwgMzQsIAotICAgIDIzMiwgMTM3LCA2MCwgMzQsIDI0MywgODgsIDYwLCAzNCwgMjMwLCAxMTgsIDYwLCAzNCwgMjE5LCA5NCwgNjAsIDM0LCAKLSAgICAyMTksIDI1MSwgMjE3LCA3NiwgMjUxLCAyMzcsIDYwLCAzNCwgMjIzLCAxNTksIDYwLCAzNCwgMjUxLCAyMDcsIDYwLCAzNCwgCi0gICAgMjExLCAxOTcsIDYwLCAzNCwgMjQ0LCAxOTAsIDYwLCAzNCwgMjMzLCA1MiwgNjAsIDM0LCAyMTcsIDU2LCAyMzMsIDUyLCAKLSAgICA2MCwgMzQsIDIzMywgNDgsIDYwLCAzNCwgMjE5LCAzMCwgNjAsIDM0LCAyMzMsIDUzLCA2MCwgMzQsIDIxMSwgMjM5LCA2MCwgCi0gICAgMzQsIDI0NCwgNDYsIDYwLCAzNCwgMjQ1LCAyMTcsIDYwLCAzNCwgMjQxLCAyMzUsIDYwLCAzNCwgMjQ0LCAwLCA2MCwgMzQsIAotICAgIDI0MCwgMjQ1LCA2MCwgMzQsIDI1MSwgMTk0LCA2MCwgMzQsIDIxNywgNjMsIDYwLCAzNCwgMjQyLCAzNCwgNjAsIDM0LCAKLSAgICAyNDQsIDExMywgNjAsIDM0LCAyMjIsIDI4LCAyMTEsIDIzNiwgNjAsIDM0LCAyNTAsIDIyMCwgNjAsIDM0LCAyNDIsIDIyMiwgCi0gICAgNjAsIDM0LCAyNDQsIDkwLCA2MCwgMzQsIDI1MSwgMjM3LCA2MCwgMzQsIDIyMiwgMSwgNjAsIDM0LCAyNDgsIDc0LCA2MCwgCi0gICAgMzQsIDIxMiwgMiwgNjAsIDM0LCAyNDEsIDIxMCwgNjAsIDM0LCAyMTEsIDQxLCA2MCwgMzQsIDIzMCwgMTkyLCA2MCwgMzQsIAotICAgIDI1MSwgMjIxLCA2MCwgMzQsIDI0NSwgMTU1LCA2MCwgMzQsIDI0MywgMjQ0LCA2MCwgMzQsIDIxNSwgMjA5LCA2MCwgMzQsIAotICAgIDI0NiwgODIsIDYwLCAzNCwgMjIzLCAxNDEsIDYwLCAzNCwgMjI4LCA1MywgNjAsIDM0LCAyNDUsIDQxLCA2MCwgMzQsIDIxNiwgCi0gICAgMTUsIDYwLCAzNCwgMjQ2LCA5NiwgNjAsIDM0LCAyMTUsIDkxLCA2MCwgMzQsIDI0NCwgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAKLSAgICA0MywgMjE2LCA0MiwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCA3NywgMjE2LCA0MiwgNTEsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCA0MywgMjE2LCA0MiwgMjMwLCAyMjQsIDIyLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDc3LCAyMTYsIDQyLCAKLSAgICAyMzAsIDIyNCwgMjIsIDUxLCAxMDksIDI0OCwgMzcsIDEzNSwgMjQzLCAyMjksIDIxOCwgMTAsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNTEsIAotICAgIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgCi0gICAgMTEsIDI0MywgMjQzLCAyMTQsIDE2MCwgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAKLSAgICAyMTQsIDE2MCwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMyLCAxMDgsIDIzMywgCi0gICAgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMjYsIDEyMiwgMTA5LCAyMTksIDE4LCAxMDksIDI0OSwgMjE5LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjQ3LCAxNzcsIDc4LCAyMzUsIDEzMSwgMjM1LCAyMzYsIDIxOCwgMTU5LCA4NywgMTA5LCAyMzUsIAotICAgIDE1OCwgNzgsIDEwOSwgMjQ5LCAyNTIsIDc4LCAxMDksIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTAsIDEyNywgNDQsIDI1NCwgCi0gICAgMTEwLCAxMjcsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCA0MywgMjQ5LCAxNjEsIAotICAgIDEyNywgNDQsIDI0OSwgMTYxLCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjEsIDEyNywgNDQsIDcxLCAyNDksIDE2MSwgMTI3LCA0MywgCi0gICAgODUsIDIzMywgMjAsIDEyNywgNDQsIDg1LCAyMzMsIDIwLCAxMjcsIDIyNCwgMjM3LCA3OCwgMjQzLCAzMiwgNzgsIDQzLCAKLSAgICAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0MywgNzEsIDIzMywgMjAsIDEyNywgNDQsIAotICAgIDcxLCAyMzMsIDIwLCAxMjcsIDQzLCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE1NiwgMjIzLCA0OSwgNTIsIAotICAgIDIyNCwgMTkxLCAyMjMsIDI1NCwgNzgsIDUyLCAyMjQsIDE5MSwgMjIzLCAyNTQsIDc4LCAxMjEsIDUyLCAyMjQsIDE5MSwgCi0gICAgMjIzLCAyNTQsIDc4LCAyMjQsIDIzNywgMTY0LCAyNDQsIDE5MCwgMjQyLCA4LCAyMjcsIDE5OCwgMTEwLCAyNDIsIDgsIAotICAgIDIyNywgMTk4LCAxMDUsIDI0MiwgOCwgMjI3LCAxOTgsIDE1OCwgMjQyLCA4LCAyMjcsIDE5OCwgMTYxLCAyNDIsIDgsIDIyNywgCi0gICAgMTk4LCAxODksIDI0MiwgOCwgMjI3LCAxOTgsIDE5NCwgMjQyLCA4LCAyMjcsIDE5OCwgMTk4LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAxOTUsIDI0MiwgOCwgMjI3LCAxOTgsIDIwMCwgMTA5LCAyMzMsIDMsIDEzOCwgNzgsIDEwOSwgMjIyLCAyMjgsIDEzOCwgNzgsIAotICAgIDEwOSwgMjQ4LCA0NCwgMTM4LCA3OCwgMTA5LCAyNDUsIDEyOCwgMTM4LCA3OCwgMjQsIDIxOSwgMTU1LCA1OSwgMTM4LCA3OCwgCi0gICAgMjQsIDUyLCA1OSwgMTM4LCA3OCwgMjEyLCAzMiwgMjQ4LCAxNTYsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgNzgsIDY3LCAKLSAgICAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDE2NCwgMjE0LCAKLSAgICAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMTY0LCAyMzIsIDEwOCwgMjQyLCAyNywgMzcsIDIyNCwgCi0gICAgMjM3LCA3OCwgMTA5LCAyMTcsIDMsIDIzMiwgMjE0LCAyNDQsIDE0NiwgMjIwLCAxMzgsIDg3LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAyMTYsIDI0NywgMjQyLCA4LCAyMjcsIDE5OCwgMjE1LCA3MywgMjQyLCA4LCAyMjcsIDE5OCwgMjE2LCAxNjIsIDY3LCAxMDksIAotICAgIDIzNSwgMTU4LCA3OCwgMjMxLCAxNDAsIDc4LCAyMjUsIDI1NSwgMjU0LCAxNDAsIDc4LCAxMDksIDQ1LCAyMzUsIDIzOCwgCi0gICAgMTA5LCAxNjMsIDI0NCwgMTA2LCAyMTksIDE4LCAxNDEsIDEsIDQsIDYxLCAxNDEsIDEsIDYxLCAxNDEsIDEsIDQsIDczLCAKLSAgICAxNDEsIDEsIDczLCAxNDEsIDEsIDQsIDcwLCAxNDEsIDEsIDcwLCAxNDEsIDEsIDQsIDc1LCAxNDEsIDEsIDc1LCAxNDEsIDEsIAotICAgIDQsIDc2LCAxNDEsIDEsIDc2LCAxNDEsIDEsIDE3NiwgMTQxLCAxLCAyNDMsIDEzNSwgMTQxLCAxLCAyMzQsIDkyLCAxNDEsIAotICAgIDEsIDI0MiwgMjE0LCAxNDEsIDEsIDIzMywgMjE3LCAxNDEsIDEsIDI0MiwgMTEzLCAxNDEsIDEsIDIzNCwgMTgyLCAxNDEsIAotICAgIDEsIDI0MywgNjIsIDE0MSwgMSwgMjM0LCAyOCwgMTQxLCAxLCAyNDIsIDE3NCwgMTQxLCAxLCAyMDYsIDE0MSwgMSwgMjEwLCAKLSAgICAxMTYsIDE0MSwgMSwgMjE5LCAxOTEsIDE0MSwgMSwgMjEwLCA0NCwgMTQxLCAxLCAyMTgsIDgzLCAxNDEsIDEsIDIxMCwgMTMsIAotICAgIDE0MSwgMSwgMjIxLCAxODEsIDE0MSwgMSwgMjEwLCA5NCwgMTQxLCAxLCAyMTksIDU4LCAxNDEsIDEsIDIxMCwgMjMsIDE0MSwgCi0gICAgMSwgMjE3LCAxMDUsIDE0MSwgMSwgMjQ4LCAyMjEsIDE0MSwgMSwgMjE2LCAxMTcsIDE0MSwgMSwgMjQ4LCAzLCAxNDEsIDEsIAotICAgIDQsIDIxNSwgMTE4LCAxNDEsIDEsIDIxNSwgMTE4LCAxNDEsIDEsIDI0NiwgNzgsIDE0MSwgMSwgMjE3LCAyMiwgMTQxLCAxLCAKLSAgICAyNDgsIDkwLCAxNDEsIDEsIDExMSwgMTQxLCAxLCAyNDcsIDE0NSwgMTQxLCAxLCAxOTcsIDE0MSwgMSwgMjI4LCAyMzMsIAotICAgIDE0MSwgMSwgMjI3LCAyMzcsIDE0MSwgMSwgMjI5LCAxMDcsIDE0MSwgMSwgMjI4LCA3NCwgMTQxLCAxLCAxNjIsIDE0MSwgMSwgCi0gICAgMjUyLCAxOTEsIDE0MSwgMSwgMTkwLCAxNDEsIDEsIDI0MSwgMTgwLCAxNDEsIDEsIDI1MiwgNiwgMTQxLCAxLCAyMjUsIAotICAgIDEwOCwgMTQxLCAxLCAyNDAsIDIyMiwgMTQxLCAxLCAyNTEsIDEyNSwgMTQxLCAxLCAyMjQsIDE1MCwgMTQxLCAxLCAyNDEsIAotICAgIDIzOCwgMTQxLCAxLCAyNTIsIDc1LCAxNDEsIDEsIDIyNSwgMjIxLCAxNDEsIDEsIDI0MSwgNjgsIDE0MSwgMSwgMjUxLCAKLSAgICAyMDUsIDE0MSwgMSwgMjI1LCAxNiwgMTQxLCAxLCAxODQsIDE0MSwgMSwgMjMwLCAyMzAsIDE0MSwgMSwgMjMwLCAxMDIsIAotICAgIDE0MSwgMSwgMjMxLCA5MSwgMTQxLCAxLCAyMzAsIDE2MSwgMTQxLCAxLCA0LCAxOTEsIDE0MSwgMSwgMTkxLCAxNDEsIDEsIAotICAgIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAxNDEsIDEsIDIxMCwgMjQ0LCAKLSAgICAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM1LCAxNDEsIDEsIDIyMiwgMTQwLCAxNDEsIDEsIDIyMywgMTI4LCAxNDEsIDEsIAotICAgIDIyMiwgMjExLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAyMTEsIDI1MCwgMTQxLCAxLCAKLSAgICAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMjUsIDE0MSwgMSwgMjEyLCAxMTYsIDE0MSwgMSwgNCwgCi0gICAgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTgyLCAzOCwgMjM0LCAyMDEsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMzgsIDIzNCwgCi0gICAgMjAxLCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAKLSAgICAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDE0MSwgMjM1LCAxNTgsIDc4LCAxNDEsIDIxMywgMTM1LCAyMzUsIDE1OCwgNzgsIAotICAgIDE0MSwgMjQ3LCAyMjEsIDIxMCwgMjI1LCAyMzQsIDIwMSwgNTIsIDI0MCwgMTY4LCA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgCi0gICAgNTYsIDEsIDQsIDczLCA1NiwgMSwgNzMsIDU2LCAxLCA0LCA3MCwgNTYsIDEsIDcwLCA1NiwgMSwgNCwgNzUsIDU2LCAxLCAKLSAgICA3NSwgNTYsIDEsIDQsIDc2LCA1NiwgMSwgNzYsIDU2LCAxLCAxNzYsIDU2LCAxLCAyNDMsIDEzNSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDU2LCAxLCAyNDIsIDIxNCwgNTYsIDEsIDIzMywgMjE3LCA1NiwgMSwgMjQyLCAxMTMsIDU2LCAxLCAyMzQsIDE4MiwgNTYsIAotICAgIDEsIDI0MywgNjIsIDU2LCAxLCAyMzQsIDI4LCA1NiwgMSwgMjQyLCAxNzQsIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgCi0gICAgNTYsIDEsIDIxOSwgMTkxLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgODMsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgCi0gICAgMjIxLCAxODEsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA1OCwgNTYsIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIAotICAgIDEwNSwgNTYsIDEsIDI0OCwgMjIxLCA1NiwgMSwgMjE2LCAxMTcsIDU2LCAxLCAyNDgsIDMsIDU2LCAxLCA0LCAyMTUsIDExOCwgCi0gICAgNTYsIDEsIDIxNSwgMTE4LCA1NiwgMSwgMjQ2LCA3OCwgNTYsIDEsIDIxNywgMjIsIDU2LCAxLCAyNDgsIDkwLCA1NiwgMSwgCi0gICAgMTExLCA1NiwgMSwgMjQ3LCAxNDUsIDU2LCAxLCAxOTcsIDU2LCAxLCAyMjgsIDIzMywgNTYsIDEsIDIyNywgMjM3LCA1NiwgCi0gICAgMSwgMjI5LCAxMDcsIDU2LCAxLCAyMjgsIDc0LCA1NiwgMSwgMTYyLCA1NiwgMSwgMjUyLCAxOTEsIDU2LCAxLCAxOTAsIDU2LCAKLSAgICAxLCAyNDEsIDE4MCwgNTYsIDEsIDI1MiwgNiwgNTYsIDEsIDIyNSwgMTA4LCA1NiwgMSwgMjQwLCAyMjIsIDU2LCAxLCAyNTEsIAotICAgIDEyNSwgNTYsIDEsIDIyNCwgMTUwLCA1NiwgMSwgMjQxLCAyMzgsIDU2LCAxLCAyNTIsIDc1LCA1NiwgMSwgMjI1LCAyMjEsIAotICAgIDU2LCAxLCAyNDEsIDY4LCA1NiwgMSwgMjUxLCAyMDUsIDU2LCAxLCAyMjUsIDE2LCA1NiwgMSwgMTg0LCA1NiwgMSwgMjMwLCAKLSAgICAyMzAsIDU2LCAxLCAyMzAsIDEwMiwgNTYsIDEsIDIzMSwgOTEsIDU2LCAxLCAyMzAsIDE2MSwgNTYsIDEsIDQsIDE5MSwgNTYsIAotICAgIDEsIDE5MSwgNTYsIDEsIDQsIDIxMCwgMjEyLCA1NiwgMSwgMjEwLCAyMTIsIDU2LCAxLCA0LCAyMTAsIDI0NCwgNTYsIDEsIAotICAgIDIxMCwgMjQ0LCA1NiwgMSwgMjA1LCA1NiwgMSwgMjIzLCAzNSwgNTYsIDEsIDIyMiwgMTQwLCA1NiwgMSwgMjIzLCAxMjgsIAotICAgIDU2LCAxLCAyMjIsIDIxMSwgNTYsIDEsIDQsIDIxMiwgNjUsIDU2LCAxLCAyMTIsIDY1LCA1NiwgMSwgMjExLCAyNTAsIDU2LCAKLSAgICAxLCAyMTIsIDIyLCA1NiwgMSwgMjExLCAyMjcsIDU2LCAxLCAyMzAsIDI1LCA1NiwgMSwgMjEyLCAxMTYsIDU2LCAxLCA0LCAKLSAgICAxNzYsIDU2LCAxLCA0LCAyMzQsIDE4MiwgNTYsIDEsIDIxNCwgMjcsIDU2LCAxLCAyMTMsIDE3NiwgNTYsIDEsIDIxMywgCi0gICAgMjU1LCA1NiwgMSwgMjEzLCAxMzgsIDU2LCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNCwgMjAxLCAyMjQsIDE3MywgMjE5LCAKLSAgICAzMSwgNzgsIDU2LCAyMzUsIDE1OCwgNzgsIDU2LCAyMTMsIDEzNSwgMjM1LCAxNTgsIDc4LCA1NiwgMjQ3LCAyMjEsIDIzMywgCi0gICAgMjU1LCAyNTEsIDE4NCwgMSwgMjUzLCAxNTgsIDI1MSwgMTg0LCAxLCAyMjYsIDEwNSwgMjUxLCAxODQsIDEsIDE5MywgMjUxLCAKLSAgICAxODQsIDEsIDI0NSwgNiwgMjUxLCAxODQsIDEsIDI0OSwgNjAsIDI1MSwgMTg0LCAxLCAyMTcsIDE1MiwgMjUxLCAxODQsIDEsIAotICAgIDIzMCwgMjUsIDI1MSwgMTg0LCAxLCAxNTYsIDI1MSwgMTg0LCAxLCAyNDMsIDIwMiwgMjUxLCAxODQsIDEsIDIzNSwgMjMsIAotICAgIDI1MSwgMTg0LCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjM1LCAxNDQsIDI1MSwgMTg0LCAxLCAyMjQsIDk2LCAyNTEsIAotICAgIDE4NCwgMSwgMjExLCAxNzgsIDI1MSwgMTg0LCAxLCAyMTAsIDgzLCAyNTEsIDE4NCwgMSwgMjUwLCAxNTgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMjAsIDEwNCwgMjUxLCAxODQsIDEsIDE1MywgMjUxLCAxODQsIDEsIDIxMCwgMTU5LCAyNTEsIDE4NCwgMSwgMjUxLCAKLSAgICA2NiwgMjUxLCAxODQsIDEsIDIyMiwgOTEsIDI1MSwgMTg0LCAxLCA2MSwgMjUxLCAxODQsIDEsIDc2LCAyNTEsIDE4NCwgMSwgCi0gICAgNzUsIDI1MSwgMTg0LCAxLCAyNDUsIDE5NywgMjUxLCAxODQsIDEsIDI1NCwgMjAxLCAyNTEsIDE4NCwgMSwgMjQ1LCAxOTUsIAotICAgIDI1MSwgMTg0LCAxLCAyNTMsIDE5MiwgMjUxLCAxODQsIDEsIDIyNiwgMTM0LCAyNTEsIDE4NCwgMSwgMjU0LCAxMjMsIDI1MSwgCi0gICAgMTg0LCAxLCAyNDUsIDE1MCwgMjUxLCAxODQsIDEsIDI1NCwgMTE1LCAyNTEsIDE4NCwgMSwgMjQ1LCAxMzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyNDUsIDkyLCAyNTEsIDE4NCwgMSwgNzMsIDI1MSwgMTg0LCAxLCA3MCwgMjUxLCAxODQsIDEsIDIzNSwgMTU2LCAyNTEsIAotICAgIDE4NCwgMSwgMjE0LCAxMDUsIDI1MSwgMTg0LCAxLCAyMjksIDc5LCAyNTEsIDE4NCwgMSwgMjQyLCAxNzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMzYsIDM0LCAyNCwgMSwgMjM0LCA1OCwgMjQsIDEsIDIxOCwgMjE1LCAyNCwgMSwgMjM0LCA1MSwgMjQsIDEsIDIyOCwgCi0gICAgMjI2LCAyNCwgMSwgMjI4LCAyMjQsIDI0LCAxLCAyMjgsIDIyMywgMjQsIDEsIDIxNiwgMTAxLCAyNCwgMSwgMjE4LCAyMDQsIAotICAgIDI0LCAxLCAyMjMsIDI2LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTgsIDI0LCAxLCAyMjMsIDExLCAyNCwgMSwgCi0gICAgMjIzLCA2LCAyNCwgMSwgMjIzLCAxLCAyNCwgMSwgMjIzLCAxMiwgMjQsIDEsIDIyMywgMjQsIDI0LCAxLCAyMzAsIDIxNywgCi0gICAgMjQsIDEsIDIyNSwgOTUsIDI0LCAxLCAyMTgsIDIxMiwgMjQsIDEsIDIyNSwgODQsIDI0LCAxLCAyMTksIDE0OCwgMjQsIDEsIAotICAgIDIxOCwgMjA5LCAyNCwgMSwgMjM2LCA1NiwgMjQsIDEsIDI1MCwgNDYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDI1MCwgCi0gICAgMTA2LCAyNCwgMSwgMjM0LCAxMTAsIDI0LCAxLCAyMTYsIDE3MywgMjQsIDEsIDIyNSwgMTMxLCAyNCwgMSwgMjQxLCAxNzIsIAotICAgIDI0LCAxLCA2MSwgMjQsIDEsIDI1NCwgMjQzLCAyNCwgMSwgMTkxLCAyNCwgMSwgMjExLCA5MiwgMjQsIDEsIDI0NSwgMTE3LCAKLSAgICAyNCwgMSwgNzUsIDI0LCAxLCAyMTEsIDM2LCAyNCwgMSwgMjExLCA0NywgMjQsIDEsIDc2LCAyNCwgMSwgMjEyLCA2NSwgMjQsIAotICAgIDEsIDIxMiwgNjIsIDI0LCAxLCAyMjYsIDIzNCwgMjQsIDEsIDIxMCwgMjQ0LCAyNCwgMSwgNzAsIDI0LCAxLCAyMTIsIDExLCAKLSAgICAyNCwgMSwgMjEyLCAyMiwgMjQsIDEsIDIxMSwgMjUwLCAyNCwgMSwgMjEwLCAyMTIsIDI0LCAxLCAyNDUsIDU1LCAyNCwgMSwgCi0gICAgMjExLCA4LCAyNCwgMSwgNzMsIDI0LCAyNDQsIDEwMywgMjQsIDEsIDIxOCwgMjEzLCAyNCwgMSwgMjI4LCAyMTYsIDI0LCAxLCAKLSAgICAyMjgsIDIxOCwgMjQsIDEsIDIyOCwgMjIxLCAyNCwgMSwgMjIzLCAxOSwgMjQsIDEsIDIyMywgMCwgMjQsIDEsIDIyMywgOCwgCi0gICAgMjQsIDEsIDIyMywgMTMsIDI0LCAxLCAyMjIsIDI1NCwgMjQsIDEsIDIzMCwgMjEwLCAyNCwgMSwgMjMwLCAyMDcsIDI0LCAxLCAKLSAgICAyMzAsIDIxMSwgMjQsIDEsIDIzNCwgMjIxLCAyNCwgMSwgMjI1LCA5MCwgMjQsIDEsIDIyNSwgNzYsIDI0LCAxLCAyMjUsIAotICAgIDgyLCAyNCwgMSwgMjI1LCA3OSwgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc3LCAyNCwgMSwgMjM0LCAyMTksIDI0LCAKLSAgICAxLCAyMzQsIDIxNywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzksIDI0LCAxLCAyMTksIDEzMSwgMjQsIDEsIAotICAgIDIxOSwgMTM2LCAyNCwgMSwgMjE5LCAxNDYsIDI0LCAxLCAyMjYsIDMyLCAyNCwgMSwgMjE4LCAyMTYsIDI0LCAxLCAyMTEsIAotICAgIDI2LCAyNCwgMSwgMjExLCAyMiwgMjQsIDEsIDIxMSwgMjMsIDI0LCAxLCAyMzQsIDIyMCwgMjQsIDEsIDIxOCwgMjE3LCAyNCwgCi0gICAgMSwgMjExLCAzMiwgMjQsIDEsIDIxMCwgMjM4LCAyNCwgMSwgMjEwLCAyMzcsIDI0LCAxLCAyMTAsIDI0MCwgMjQsIDEsIAotICAgIDIxMCwgMjAzLCAyNCwgMSwgMjEwLCAyMDQsIDI0LCAxLCAyMTAsIDIwNywgMjQsIDEsIDI1NCwgMzQsIDI0LCAxLCAyNTQsIAotICAgIDI4LCAxMDksIDI1NCwgOTksIDIzMiwgMjAzLCA3OCwgMTA5LCAyNTQsIDk5LCAyMjMsIDUwLCA3OCwgMTA5LCAyNTQsIDk5LCAKLSAgICAxMjMsIDc4LCAxMDksIDI1NCwgOTksIDExMywgNzgsIDEwOSwgMjU0LCA5OSwgMTM0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIAotICAgIDExLCA3OCwgMTA5LCAyNTQsIDk5LCAyMTYsIDE0LCA3OCwgMTA5LCAyNTQsIDk5LCAyMzAsIDIyNCwgNzgsIDEwOSwgMjU0LCAKLSAgICA5OSwgMjUxLCAxNzUsIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgOTIsIDc4LCAxMDksIDI1NCwgOTksIDIyMSwgMTc2LCA3OCwgCi0gICAgMTA5LCAyNTQsIDk5LCAyMTYsIDE2OSwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCA0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDEsIAotICAgIDIyNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ1LCAyMjQsIDc4LCAxMDksIDI1NCwgOTksIDIzMSwgMTg2LCA3OCwgMjUxLCAKLSAgICAxODQsIDEsIDI1MSwgMTI1LCAyNTEsIDE4NCwgMSwgMjEwLCA0NCwgMjUxLCAxODQsIDEsIDIzNSwgMTA4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjQyLCAxMTMsIDI1MSwgMTg0LCAxLCAyNDUsIDIwOSwgMjUxLCAxODQsIDEsIDI0NSwgMTM1LCAyNTEsIDE4NCwgMSwgCi0gICAgMjI2LCAxODMsIDI1MSwgMTg0LCAxLCAyMjYsIDE4NywgMjUxLCAxODQsIDEsIDIzNSwgMTc5LCAyNTEsIDE4NCwgMSwgMjU0LCAKLSAgICAxMDEsIDI1MSwgMTg0LCAxLCAyMzUsIDIyNCwgMjUxLCAxODQsIDEsIDIxNCwgMTY4LCAyNTEsIDE4NCwgMSwgMjM2LCAxNiwgCi0gICAgMjUxLCAxODQsIDEsIDIyOSwgNTcsIDI1MSwgMTg0LCAxLCAyNTQsIDE5NSwgMjUxLCAxODQsIDEsIDI1MywgMTg3LCAyNTEsIAotICAgIDE4NCwgMSwgMjU0LCAxMzYsIDI1MSwgMTg0LCAxLCAyMjYsIDIwNCwgMjUxLCAxODQsIDEsIDIyNiwgMTg5LCAyNTEsIDE4NCwgCi0gICAgMSwgMjM1LCAyMjEsIDI1MSwgMTg0LCA0MCwgMSwgMjI2LCAxMDUsIDI1MSwgMTg0LCA0MCwgMSwgMjE3LCAxNTIsIDI1MSwgCi0gICAgMTg0LCA0MCwgMSwgMjM1LCAyMywgMjUxLCAxODQsIDQwLCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjQyLCAyNTAsIAotICAgIDI1MSwgMTg0LCAxLCAyMzIsIDI1NSwgMjUxLCAxODQsIDEsIDIwOSwgMjUwLCA5LCAyMTgsIDEwMywgMjE3LCAxNTIsIDksIAotICAgIDIxOCwgMTAzLCAyMTIsIDQsIDksIDIxOCwgMTAzLCAyMTEsIDE1OCwgOSwgMjE4LCAxMDMsIDI1MSwgNzksIDksIDIxOCwgCi0gICAgMTAzLCAyMTcsIDI1NCwgOSwgMjE4LCAxMDMsIDI0MCwgMTU4LCA5LCAyMTgsIDEwMywgMjQwLCAxNjIsIDksIDIxOCwgMTAzLCAKLSAgICAyNDAsIDIzMSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU5LCA5LCAyMTgsIDEwMywgMjE3LCAxNTUsIDksIDIxOCwgMTAzLCAyNDAsIAotICAgIDE2MSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU3LCA5LCAyMTgsIDEwMywgMjQwLCAyMjksIDksIDIxOCwgMTAzLCAyNDAsIDE2MCwgCi0gICAgOSwgMjE4LCAxMDMsIDI0MCwgMTU2LCA5LCAyMTgsIDEwMywgMjMwLCAyNSwgOSwgMjE4LCAxMDMsIDI0MiwgNjAsIDksIAotICAgIDIxOCwgMTAzLCAyMjIsIDkxLCA5LCAyMTgsIDEwMywgMjI2LCAxMDUsIDksIDIxOCwgMTAzLCAyMTksIDIxLCA5LCAyMTgsIAotICAgIDEwMywgMjQ5LCA2MCwgOSwgMjE4LCAxMDMsIDI0MCwgMTYzLCA5LCAyMTgsIDEwMywgMjQxLCAxOTAsIDksIDIxOCwgMTAzLCAKLSAgICAyMTcsIDE2NCwgOSwgMjE4LCAxMDMsIDIxNywgMjMzLCA5LCAyMTgsIDEwMywgMjE4LCAxNjgsIDksIDIxOCwgMTAzLCAyMjAsIAotICAgIDExMCwgOSwgMjE4LCAxMDMsIDIyNSwgMjI0LCA5LCAyMTgsIDEwMywgMjI0LCA5OCwgOSwgMjE4LCAxMDMsIDIxNiwgNDMsIAotICAgIDksIDIxOCwgMTAzLCAyMTcsIDE1NCwgOSwgMjE4LCAxMDMsIDIxNywgMjQ0LCA5LCAyMTgsIDEwMywgMjQwLCAxNzAsIDksIAotICAgIDIxOCwgMTAzLCAyNDAsIDE1NSwgOSwgMjE4LCAxMDMsIDIyNSwgMTQ5LCA5LCAyMTgsIDEwMywgMjI0LCA5NiwgNTYsIDEsIAotICAgIDQsIDIzMywgMjE3LCA1NiwgMSwgNCwgMjE5LCAxOTEsIDU2LCAxLCA0LCAyMTgsIDgzLCA1NiwgMSwgNCwgMTExLCA1NiwgMSwgCi0gICAgNCwgMjI3LCAyMzcsIDU2LCAxLCA0LCAxNjIsIDU2LCAxLCA0LCAyNDEsIDE4MCwgNTYsIDEsIDQsIDI0MCwgMjIyLCA1NiwgCi0gICAgMSwgNCwgMjQxLCAyMzgsIDU2LCAxLCA0LCAyNDEsIDY4LCA1NiwgMSwgNCwgMjMwLCAxMDIsIDU2LCAxLCA0LCAyMDUsIDU2LCAKLSAgICAxLCA0LCAyMjMsIDM1LCA1NiwgMSwgNCwgMjIyLCAxNDAsIDU2LCAxLCA0LCAyMjMsIDEyOCwgNTYsIDEsIDQsIDIyMiwgCi0gICAgMjExLCA4OCwgMjQsIDIzNCwgNTgsIDg4LCAyNCwgMjI4LCAyMjYsIDg4LCAyNCwgMjE2LCAxMDEsIDg4LCAyNCwgMjIzLCAKLSAgICAyNiwgODgsIDI0LCAyMzAsIDIxNywgODgsIDI0LCAyMjUsIDk1LCA4OCwgMjQsIDIxOSwgMTQ4LCA4OCwgMjQsIDIzNiwgNTYsIAotICAgIDg4LCAyNCwgMjUwLCA0NiwgODgsIDI0LCAyNTAsIDEwNiwgODgsIDI0LCAyMzQsIDExMCwgODgsIDI0LCAyMTYsIDE3MywgCi0gICAgODgsIDI0LCAyMjUsIDEzMSwgODgsIDI0LCAyNDEsIDE3MiwgODgsIDI0LCAyMzQsIDU5LCA2MSwgODgsIDI0LCAyMjgsIAotICAgIDIyNywgNjEsIDg4LCAyNCwgMjE2LCAxMDIsIDYxLCA4OCwgMjQsIDIyMywgMjcsIDYxLCA4OCwgMjQsIDIzMCwgMjE4LCA2MSwgCi0gICAgODgsIDI0LCAyMjUsIDk2LCA2MSwgODgsIDI0LCAyMTksIDE0OSwgNjEsIDg4LCAyNCwgMjM2LCA1NywgNjEsIDg4LCAyNCwgCi0gICAgMjUwLCA0NywgNjEsIDg4LCAyNCwgMjUwLCAxMDcsIDYxLCA4OCwgMjQsIDIzNCwgMTExLCA2MSwgODgsIDI0LCAyMTYsIAotICAgIDE3NCwgNjEsIDg4LCAyNCwgMjI1LCAxMzIsIDYxLCA4OCwgMjQsIDI0MSwgMTczLCA2MSwgODgsIDI0LCAyNTAsIDQ3LCA3MCwgCi0gICAgODgsIDIzNCwgMywgMTM1LCAyMjYsIDIxNywgODgsIDIzNCwgMywgMTM1LCAxNDQsIDI0MCwgMjIyLCA4OCwgMTU0LCAxMTAsIAotICAgIDg4LCAxNTQsIDEwNSwgODgsIDE1NCwgMTU4LCA4OCwgMTU0LCAxNjEsIDg4LCAxNTQsIDE4OSwgODgsIDE1NCwgMTk0LCA4OCwgCi0gICAgMTU0LCAxOTgsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMjAwLCA4OCwgMTU0LCAyMTYsIDI0NywgODgsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDg4LCAxNTQsIDI0NCwgOTYsIDg4LCAxNTQsIDIxMiwgNDAsIDg4LCAxNTQsIDIxMSwgMjE0LCA4OCwgMTU0LCAyMzEsIAotICAgIDM5LCA4OCwgMTU0LCAyNDUsIDIyMywgODgsIDE1NCwgMjE4LCAzNywgODgsIDE1NCwgMjE4LCAxMzIsIDg4LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCA4OCwgMTU0LCAyMTksIDU0LCA4OCwgMTU0LCAyMjksIDIwNCwgODgsIDE1NCwgMjE5LCA0LCA4OCwgMTU0LCAyNDQsIAotICAgIDEwMiwgODgsIDE1NCwgMjQ5LCAyMDAsIDg4LCAxNTQsIDIzMywgMTI1LCA4OCwgMTU0LCAyMjMsIDcxLCA4OCwgMTU0LCAKLSAgICAyNTEsIDE1LCA4OCwgMTU0LCAyMTgsIDg3LCA4OCwgMTU0LCAyMTgsIDIwLCA4OCwgMTU0LCAyNDUsIDEyNywgODgsIDE1NCwgCi0gICAgMjIzLCA2MywgODgsIDE1NCwgMjU0LCAxNTAsIDg4LCAxNTQsIDI0NCwgMTI4LCA4OCwgMTU0LCAyMjMsIDYxLCA4OCwgMTU0LCAKLSAgICAyMjAsIDE1NiwgODgsIDE1NCwgMjIzLCAxMjcsIDM3LCAxNTQsIDIyNCwgMTIsIDM3LCAxNTQsIDIzNCwgODAsIDM3LCAxNTQsIAotICAgIDIyMSwgMTk4LCAzNywgMTU0LCAyMzMsIDI1NSwgMzcsIDU0LCAyMTYsIDI0OCwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgCi0gICAgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIxNiwgMTYzLCAyMjYsIDE5NywgODUsIAotICAgIDIxOCwgMjM0LCAzNywgNTQsIDI0NCwgMTYsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ0LCAxMTUsIDIyNiwgCi0gICAgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjE5LCAxMTIsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjIwLCAKLSAgICAxMTcsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ1LCAxODUsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIAotICAgIDIyNSwgMjUxLCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTAsIDM3LCA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgCi0gICAgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgMjE1LCA3NCwgMTg5LCAzNywgNTQsIDIxNSwgNzQsIAotICAgIDE5NCwgMzcsIDU0LCAyMTUsIDc0LCAxOTgsIDM3LCA1NCwgMjE1LCA3NCwgMTk1LCAzNywgNTQsIDIxNSwgNzQsIDIwMCwgCi0gICAgMzcsIDU0LCAyMTYsIDE2MiwgMzcsIDU0LCAyMTYsIDE2MywgMTEwLCAzNywgNTQsIDIxNiwgMTYzLCAxMDUsIDM3LCA1NCwgCi0gICAgMjE2LCAxNjMsIDE1OCwgMzcsIDU0LCAyMTYsIDE2MywgMTYxLCAzNywgNTQsIDIxNiwgMTYzLCAxODksIDM3LCAyNCwgMjM0LCAKLSAgICA1OCwgMzcsIDI0LCAyMjgsIDIyNiwgMzcsIDI0LCAyMTYsIDEwMSwgMzcsIDI0LCAyMjMsIDI2LCAzNywgMjQsIDIzMCwgCi0gICAgMjE3LCAzNywgMjQsIDIyNSwgOTUsIDM3LCAyNCwgMjE5LCAxNDgsIDM3LCAyNCwgMjM2LCA1NiwgMzcsIDI0LCAyNTAsIDQ2LCAKLSAgICAzNywgMjQsIDI1MCwgMTA2LCAzNywgMjQsIDIzNCwgMTEwLCAzNywgMjQsIDIxNiwgMTczLCAzNywgMjQsIDIyNSwgMTMxLCAKLSAgICAzNywgMjQsIDI0MSwgMTcyLCAzNywgMjQsIDIzNCwgNTksIDYxLCAzNywgMjQsIDIyOCwgMjI3LCA2MSwgMzcsIDI0LCAyMTYsIAotICAgIDEwMiwgNjEsIDM3LCAyNCwgMjIzLCAyNywgNjEsIDM3LCAyNCwgMjMwLCAyMTgsIDYxLCAzNywgMjQsIDIyNSwgOTYsIDYxLCAKLSAgICAzNywgMjQsIDIxOSwgMTQ5LCA2MSwgMzcsIDI0LCAyMzYsIDU3LCA2MSwgMzcsIDI0LCAyNTAsIDQ3LCA2MSwgMzcsIDI0LCAKLSAgICAyNTAsIDEwNywgNjEsIDM3LCAyNCwgMjM0LCAxMTEsIDYxLCAzNywgMjQsIDIxNiwgMTc0LCA2MSwgMzcsIDI0LCAyMjUsIAotICAgIDEzMiwgNjEsIDM3LCAyNCwgMjQxLCAxNzMsIDYxLCAzNywgMjM0LCAzLCAxMzUsIDI1MCwgMTQ4LCAzNywgMjM0LCAzLCAKLSAgICAxMzUsIDIzNSwgNDcsIDM3LCAyNCwgMjM2LCA1NywgNzAsIDIzNCwgMywgMjE4LCAxNTksIDg3LCAzNywgMTU0LCAxMTAsIAotICAgIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAxNTQsIDE4OSwgMzcsIDE1NCwgMTk0LCAzNywgCi0gICAgMTU0LCAxOTgsIDM3LCAxNTQsIDE5NSwgMzcsIDE1NCwgMjAwLCAzNywgMTU0LCAyMTYsIDI0NywgMzcsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDM3LCAxNTQsIDI0NCwgOTYsIDM3LCAxNTQsIDIxMiwgNDAsIDM3LCAxNTQsIDIxMSwgMjE0LCAzNywgMTU0LCAyMzEsIAotICAgIDM5LCAzNywgMTU0LCAyNDUsIDIyMywgMzcsIDE1NCwgMjE4LCAzNywgMzcsIDE1NCwgMjE4LCAxMzIsIDM3LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCAzNywgMTU0LCAyMTksIDU0LCAzNywgMTU0LCAyMjksIDIwNCwgMzcsIDE1NCwgMjE5LCA0LCAzNywgMTU0LCAyNDQsIAotICAgIDEwMiwgMzcsIDE1NCwgMjQ5LCAyMDAsIDM3LCAxNTQsIDIzMywgMTI1LCAzNywgMTU0LCAyMjEsIDE3NCwgMzcsIDE1NCwgCi0gICAgMjMxLCAxODksIDM3LCAxNTQsIDI0NCwgMTM3LCAzNywgMTU0LCAyMTgsIDQ5LCAzNywgMTU0LCAyNDUsIDM0LCAzNywgMTU0LCAKLSAgICAyMjQsIDE4NywgMzcsIDE1NCwgMjUzLCAxOTYsIDM3LCAxNTQsIDIzNSwgMTU5LCAzNywgMTU0LCAyMjMsIDYxLCAzNywgCi0gICAgMTU0LCAyNDksIDE2NCwgMzcsIDE1NCwgMjQ5LCAxNTUsIDM3LCAxNTQsIDI0MSwgMTY1LCAzNywgMTU0LCAyNTAsIDE3NCwgCi0gICAgMzcsIDE1NCwgMjMyLCAxMTAsIDM3LCAxNTQsIDIzMywgNDYsIDM3LCAxNTQsIDIyMiwgMjUxLCAzNywgMTU0LCAyMzEsIDgzLCAKLSAgICAzNywgMTU0LCAyMjMsIDg3LCAzNywgMTU0LCAyMTgsIDg3LCAzNywgMTU0LCAyMTgsIDIwLCAzNywgMTU0LCAyNDUsIDEyNywgCi0gICAgMzcsIDE1NCwgMjIzLCA2MywgMzcsIDE1NCwgMjU0LCAxNTAsIDM3LCAxNTQsIDIyOCwgMjEyLCAzNywgNTQsIDIxNiwgMTYzLCAKLSAgICAxOTQsIDM3LCA1NCwgMjE2LCAxNjMsIDE5OCwgMzcsIDU0LCAyMTYsIDE2MywgMTk1LCAzNywgNTQsIDIxNiwgMTYzLCAyMDAsIAotICAgIDM3LCA1NCwgMjQ0LCAxNSwgMzcsIDU0LCAyNDQsIDE2LCAxMTAsIDM3LCA1NCwgMjQ0LCAxNiwgMTA1LCAzNywgNTQsIDI0NCwgCi0gICAgMTYsIDE1OCwgMzcsIDU0LCAyNDQsIDE2LCAxNjEsIDM3LCA1NCwgMjQ0LCAxNiwgMTg5LCAzNywgNTQsIDI0NCwgMTYsIAotICAgIDE5NCwgMzcsIDU0LCAyNDQsIDE2LCAxOTgsIDM3LCA1NCwgMjQ0LCAxNiwgMTk1LCAzNywgNTQsIDI0NCwgMTYsIDIwMCwgCi0gICAgMzcsIDU0LCAyNDQsIDExNCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjM1LCAxMzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0NCwgMTQ4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzEsIDE2MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjU0LCA0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjMxLCAxMzIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzNSwgNDUsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDIzNSwgNDYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI1MywgMTg4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjAsIAotICAgIDEzNiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjI2LCAyMzksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyOCwgNDAsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgODUsIDQyLCAyNDEsIDE5MCwgNDIsIDI0NSwgODgsIDQyLCAyNDUsIDQzLCAyMzIsIAotICAgIDIxOSwgMjMyLCAyNDAsIDUwLCAzNywgNTYsIDYxLCAzNywgNTYsIDczLCAzNywgNTYsIDcwLCAzNywgNTYsIDc1LCAzNywgCi0gICAgNTYsIDc2LCAzNywgNTYsIDE3NiwgMzcsIDU2LCAyMzQsIDkyLCAzNywgNTYsIDIzMywgMjE3LCAzNywgNTYsIDIzNCwgMTgyLCAKLSAgICAzNywgNTYsIDIzNCwgMjgsIDM3LCA1NiwgMjA2LCAzNywgNTYsIDIxOSwgMTkxLCAzNywgNTYsIDIxOCwgODMsIDM3LCA1NiwgCi0gICAgMjIxLCAxODEsIDM3LCA1NiwgMjE5LCA1OCwgMzcsIDU2LCAyMTcsIDEwNSwgMzcsIDU2LCAyMTYsIDExNywgMzcsIDU2LCAKLSAgICAyMTUsIDExOCwgMzcsIDU2LCAyMTcsIDIyLCAzNywgNTYsIDExMSwgMzcsIDU2LCAxOTcsIDM3LCA1NiwgMjI4LCAyMzMsIAotICAgIDM3LCA1NiwgMjI3LCAyMzcsIDM3LCA1NiwgMjI5LCAxMDcsIDM3LCA1NiwgMjI4LCA3NCwgMzcsIDU2LCAxNjIsIDM3LCA1NiwgCi0gICAgMjQxLCAxODAsIDM3LCA1NiwgMjQwLCAyMjIsIDM3LCA1NiwgMjQxLCAyMzgsIDM3LCA1NiwgMjQxLCA2OCwgMzcsIDU2LCAKLSAgICAxODQsIDM3LCA1NiwgMjMwLCAyMzAsIDM3LCA1NiwgMjMwLCAxMDIsIDM3LCA1NiwgMjMxLCA5MSwgMzcsIDU2LCAyMzAsIAotICAgIDE2MSwgMzcsIDU2LCAxOTEsIDM3LCA1NiwgMjEwLCAyMTIsIDM3LCA1NiwgMjEwLCAyNDQsIDM3LCA1NiwgMjA1LCAzNywgCi0gICAgNTYsIDIyMywgMzUsIDM3LCA1NiwgMjIyLCAxNDAsIDM3LCA1NiwgMjIzLCAxMjgsIDM3LCA1NiwgMjIyLCAyMTEsIDM3LCAKLSAgICA1NiwgMjEyLCA2NSwgMzcsIDU2LCAyMTEsIDI1MCwgMzcsIDU2LCAyMTIsIDIyLCAzNywgNTYsIDIxMSwgMjI3LCA0MiwgCi0gICAgMjU0LCA3MSwgNDIsIDI1MywgMjM5LCA0MiwgMjU0LCA5NSwgNDIsIDI1NSwgMzEsIDQyLCAyMzUsIDIyNiwgNDIsIDIzNSwgCi0gICAgMTk2LCA0MiwgMjE0LCAxNjYsIDQyLCAyNDUsIDY2LCA0MiwgMjQ1LCAyMDYsIDQyLCAyMjYsIDE4NiwgNDIsIDIyNiwgMTgwLCAKLSAgICA0MiwgMjM0LCAyNDUsIDQyLCAyMzQsIDIxNCwgNDIsIDIzNCwgMjExLCA0MiwgMjQzLCA5MiwgNDIsIDI0MywgMTAxLCA0MiwgCi0gICAgMjQyLCAyMDQsIDQyLCAyNDIsIDIwMCwgNDIsIDIzMywgMTUwLCA0MiwgMjQyLCAxOTMsIDQyLCAyMzQsIDcyLCA0MiwgMjM0LCAKLSAgICA3MSwgNDIsIDIzNCwgNzAsIDQyLCAyMzQsIDY5LCA0MiwgMjQyLCA4NiwgNDIsIDI0MiwgODUsIDQyLCAyMzMsIDE5MywgNDIsIAotICAgIDIzMywgMTk1LCA0MiwgMjM0LCAxNzgsIDQyLCAyMzQsIDEsIDQyLCAyMzQsIDgsIDQyLCAyMjIsIDE2LCA0MiwgMjIxLCAKLSAgICAyMzcsIDQyLCAyMTksIDEyOSwgNDIsIDIyMCwgMTQxLCA0MiwgMjIwLCAxNDAsIDQyLCAyNDgsIDIxOCwgNDIsIDI0OCwgMzYsIAotICAgIDQyLCAyNDcsIDEyMSwgNDIsIDIxNiwgMzIsIDQyLCAyMjksIDIwMCwgNDIsIDIyOCwgNDEsIDQyLCAyNDIsIDMyLCA0MiwgCi0gICAgMjI2LCA4NCwgNDIsIDIyNiwgODMsIDQyLCAyNTIsIDE4OCwgNDIsIDIyNSwgMTA1LCA0MiwgMjI1LCA2OSwgNDIsIDIyNSwgCi0gICAgNzAsIDQyLCAyNTEsIDIzNCwgNDIsIDI0MCwgMjIxLCA0MiwgMjQwLCAyMTcsIDQyLCAyNTEsIDkxLCA0MiwgMjQwLCAyMDQsIAotICAgIDQyLCAyNDEsIDIxNSwgNDIsIDIyNSwgMTU5LCA0MiwgMjI1LCAxOTQsIDQyLCAyNDEsIDE5OCwgNDIsIDIyNSwgMTkxLCA0MiwgCi0gICAgMjI1LCAyMDcsIDQyLCAyNTIsIDYxLCA0MiwgMjI1LCA2LCA0MiwgMjUxLCAxODAsIDQyLCAyNDEsIDU2LCA0MiwgMjI0LCAKLSAgICAyNTAsIDQyLCAyNDEsIDQ4LCA0MiwgMjQxLCA1MCwgNDIsIDIzMSwgMjAxLCA0MiwgMjMxLCAxOTcsIDQyLCAyMzEsIDIwNiwgCi0gICAgNDIsIDIzMSwgMTUwLCA0MiwgMjMxLCAxNzUsIDQyLCAyMzAsIDE5NywgNDIsIDIzMCwgMTc2LCA0MiwgMjMwLCAxNzUsIDQyLCAKLSAgICAyMzEsIDc0LCA0MiwgMjMxLCA3MSwgNDIsIDIzMSwgNzUsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAKLSAgICAyMDEsIDQyLCAyMjIsIDIyNiwgNDIsIDIyMiwgMjMwLCA0MiwgMjIyLCAxMTcsIDQyLCAyMjIsIDExMSwgNDIsIDIyMywgODUsIAotICAgIDQyLCAyMjMsIDgyLCA0MiwgMjEyLCAzOCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxMCwgODYsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMDUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNjEsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxODksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTQsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMDAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTYsIDI0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NSwgMTY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgCi0gICAgMjE1LCA3NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNiwgMTY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDAsIDIzOSwgMjQ0LCA1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ0LCAxMTgsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDI0MCwgMjM5LCAyMTksIDExOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIyMCwgMTE5LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ1LCAxOTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMjgsIAotICAgIDE5NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgCi0gICAgMjM5LCAyMTUsIDY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA2MywgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQwLCAyMzksIDIxNSwgNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDY5LCA0MiwgMjQwLCAKLSAgICAyMzAsIDQyLCAyNDgsIDIyMSwgNDIsIDI1MywgMTkyLCA0MiwgMTMwLCA0MiwgMjI2LCAxMjUsIDQyLCAyMjUsIDIyNSwgNDIsIAotICAgIDI0NywgMTQ3LCA0MiwgMjQ3LCAxNDgsIDIxOCwgMjMzLCA0MiwgMjQ3LCAxNDgsIDI0OSwgMTA4LCA0MiwgMjM1LCAxNTYsIAotICAgIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjQxLCAyMTYsIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCAxNzQsIDQyLCAKLSAgICAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCA3NCwgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyMzEsIDcwLCA0MiwgMjQ5LCAxNTcsIAotICAgIDQyLCAyMjYsIDkwLCAyNTQsIDEyNSwgNDIsIDE5NywgNDIsIDIzMCwgMTAzLCA2MSwgNDIsIDE4NCwgNDIsIDE3NiwgNDIsIAotICAgIDIzNCwgMTg1LCA0MiwgMjMxLCAxMjksIDQyLCAyNDMsIDgwLCA0MiwgMjUxLCAxOCwgNDIsIDIzNCwgMTg0LCA0MiwgMjI1LCAKLSAgICAxNTAsIDQyLCAyMjksIDgxLCA0MiwgMjMwLCAxMDMsIDI0NSwgNiwgNDIsIDIzMCwgMTAzLCAyNDMsIDIwMiwgNDIsIDIzMSwgCi0gICAgMTUsIDQyLCAyMzQsIDEzNCwgNDIsIDI0MCwgMTYzLCA0MiwgMjM0LCA5NCwgNDIsIDIzMCwgMjMyLCA0MiwgMjQyLCAyMTYsIAotICAgIDQyLCAyMTYsIDExOSwgNDIsIDIzMCwgMTAzLCAxNTYsIDQyLCAyMzAsIDE2OSwgNDIsIDI0NywgMTU3LCA0MiwgMjM0LCA0MCwgCi0gICAgNDIsIDI0NCwgNDUsIDQyLCAyMjgsIDExMiwgNDIsIDIzMCwgMTAzLCAxOTMsIDQyLCAyMzAsIDE2NiwgNDIsIDI0OSwgMjM5LCAKLSAgICA0MiwgMjM0LCAzNCwgNDIsIDIzMCwgMTY3LCAyMTgsIDIzMywgNDIsIDI0OSwgMjQwLCAyMTgsIDIzMywgNDIsIDIzMiwgNTAsIAotICAgIDIxOCwgMjMzLCA0MiwgMjM0LCAzNSwgMjE4LCAyMzMsIDQyLCAyMzAsIDE2NywgMjQ5LCAxMDgsIDQyLCAyNDksIDI0MCwgCi0gICAgMjQ5LCAxMDgsIDQyLCAyMzIsIDUwLCAyNDksIDEwOCwgNDIsIDIzNCwgMzUsIDI0OSwgMTA4LCA0MiwgMjMyLCA1MCwgMTE3LCAKLSAgICAyMjIsIDkxLCA0MiwgMjMyLCA1MCwgMTE3LCAyMjIsIDkyLCAyMTgsIDIzMywgNDIsIDE5MCwgNDIsIDIzMywgMjUxLCA0MiwgCi0gICAgMjMwLCAxMDUsIDQyLCAyNDIsIDE1MSwgNDIsIDIyMywgMTc2LCA0MiwgMjIzLCAxNzcsIDExNywgMjIyLCA5MSwgNDIsIAotICAgIDIyMywgMTc3LCAxMTcsIDIyMiwgOTIsIDIxOCwgMjMzLCA0MiwgMjI0LCAxNjIsIDQyLCAyMjgsIDEzLCA0MiwgMjMwLCAKLSAgICAxMDMsIDIyMiwgOTEsIDQyLCAyMzAsIDEwNCwgNDIsIDIyNCwgMTE2LCA0MiwgMjI3LCAxNzYsIDQyLCAyMzAsIDEwMywgCi0gICAgMjE0LCAxMDUsIDQyLCAyMzAsIDQ5LCA0MiwgMjMzLCAxODUsIDQyLCAyMzAsIDUwLCAyMzEsIDc0LCA0MiwgMjI0LCAxMTUsIAotICAgIDQyLCAyMjcsIDE3NSwgNDIsIDIzMCwgMTAzLCAyMTIsIDk4LCA0MiwgMjMwLCA0MywgNDIsIDIzMywgMTgzLCA0MiwgMjMwLCAKLSAgICA0NCwgMjMxLCA3NCwgNDIsIDIzNSwgMjQsIDIyNiwgMjIwLCA0MiwgMjMyLCA1MCwgMjI2LCAyMjAsIDQyLCAyNTQsIDEzNiwgCi0gICAgNDIsIDI1MSwgMTYwLCA0MiwgMjUwLCAyMTQsIDQyLCAyNTAsIDE5MSwgNDIsIDI1MSwgNjcsIDExNywgMjM0LCAxMzQsIDQyLCAKLSAgICAyNDksIDIzOCwgNDIsIDI0OCwgMTQyLCA0MiwgMjQyLCA3MiwgNDIsIDE2MiwgNDIsIDI0MCwgMjMxLCA0MiwgMjM1LCAyNTUsIAotICAgIDQyLCAyMzQsIDQ3LCA0MiwgMjM0LCAzNSwgMjUwLCAyNTAsIDQyLCAyMzMsIDIxOSwgNDIsIDIzMiwgMTU5LCA0MiwgMjMyLCAKLSAgICAxNTgsIDQyLCAyMzIsIDE0NywgNDIsIDIzMiwgNjMsIDQyLCAyMzEsIDEzMCwgMjE5LCA3OSwgNDIsIDIzMCwgMTk2LCA0MiwgCi0gICAgMjMwLCAxNTIsIDQyLCAyMjUsIDE0OCwgNDIsIDIyNSwgMTksIDQyLCAyMjQsIDIxOSwgNDIsIDIyNCwgMjE3LCA0MiwgMjE4LCAKLSAgICAyMjcsIDQyLCAyMTgsIDIsIDQyLCAyMTIsIDI0LCA0MiwgMjE0LCAxMDYsIDExNywgMTkzLCA0MiwgMTE1LCAxMTcsIDE5MywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDExMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDEwNSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE1OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE2MSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE4OSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NCwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIwMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgCi0gICAgMjQ3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ1LCAxNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDc2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjQsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0OCwgMTQ2LCAyNDQsIDUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDQsIDExOCwgMTA5LCAyMTcsIAotICAgIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxOSwgMTE5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjIwLCAxMTksIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDUsIDE5MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIAotICAgIDIyOCwgMTk3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA3MywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQ4LCAxNDYsIDIxNSwgNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDYzLCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjksIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDcwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCAKLSAgICA2NSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDcyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2OCwgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQ4LCAxNDYsIDIxNiwgMTYyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjEsIDQyLCAyNDMsIAotICAgIDExOCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ5LCAxNDAsIDI0MSwgMjIzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMjMsIDEyMiwgMjQ1LCAyMjMsIDI0MSwgMTkyLCAzMSwgMjQ3LCAyMzEsIDI1MywgMjA3LCAyMTYsIDE5NiwgMjUyLCA1NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTAsIDIyMywgMjQ0LCAzOCwgMjQxLCAxOTIsIDMxLCAyMTIsIDU5LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0OSwgMjAzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTQsIDMsIDI0MSwgMTkyLCAzMSwgMjQxLCA2MCwgMjE2LCAzOCwgCi0gICAgMjQxLCAxOTIsIDMxLCA0LCAyMTcsIDYxLCAyNDEsIDE5MiwgMzEsIDIxNSwgMjM3LCAyNDEsIDE5MiwgMzEsIDIyNSwgMjE5LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxOCwgMTU4LCAyNDEsIDE5MiwgMzEsIDI0NCwgMTM5LCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAKLSAgICAyMjQsIDI0MCwgMjQxLCAxOTIsIDMxLCAyMzAsIDE1NSwgMjQxLCAxOTIsIDMxLCAyNDUsIDEyNiwgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDQsIDM5LCAyNDEsIDE5MiwgMzEsIDIxMSwgMjA3LCAyMjYsIDE5NywgMjE2LCAxOTYsIDI0OCwgODYsIDI0MSwgMTkyLCAKLSAgICAzMSwgMjU0LCA1MSwgMjQxLCAxOTIsIDMxLCAyNDksIDE4NSwgMjQxLCAxOTIsIDMxLCAyNTEsIDIyNywgMjE2LCAxMzgsIAotICAgIDI0MSwgMTkyLCAzMSwgMjQyLCAxNDksIDI0MSwgMTkyLCAzMSwgMjE4LCAyNDUsIDI1NCwgNzAsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjIzLCA1MywgMjQxLCAxOTIsIDMxLCAyMzUsIDIyMCwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjE3LCA2MSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzAsIDExMSwgMjQ5LCAxNTksIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIyNCwgMTk3LCAyNDEsIDE5MiwgCi0gICAgMzEsIDIxNiwgMTk2LCAyNTUsIDE4LCAyMTIsIDQwLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTAsIDgsIDI0NCwgOTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjM1LCAyMzMsIDI0MSwgMTkyLCAzMSwgMjQ2LCA1NywgMjQxLCAxOTIsIDMxLCAyMjMsIDU2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMjQsIDIyNCwgMjQxLCAxOTIsIDMxLCAyMjQsIDE3NywgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDgsIDE2MSwgNjQsIDIxNiwgMTk2LCAyMzIsIDIzMCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ0LCAxNzQsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI2LCAxNjMsIDI0MSwgMTkyLCAzMSwgMjI2LCAyNDQsIDI0MSwgMTkyLCAzMSwgMjQ4LCA1OSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyNDgsIDc5LCAyNDEsIDE5MiwgMzEsIDIzNSwgMjQ3LCAyNDEsIDE5MiwgMzEsIDI1MSwgMTQ5LCAyNDEsIAotICAgIDE5MiwgMzEsIDI0OSwgMjIxLCAyMTYsIDQyLCAyMzEsIDc2LCAyNDEsIDE5MiwgMzEsIDI0MywgODcsIDIxNiwgMzgsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI0LCAxMjUsIDIxNCwgMTU0LCAyNDEsIDE5MiwgMzEsIDIyNiwgMTYyLCAyNDEsIDE5MiwgMzEsIDIxNiwgCi0gICAgMTk2LCAyMTIsIDEzLCAyNDEsIDE5MiwgMzEsIDIyMywgNDUsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MCwgMjIwLCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTMsIDI1NSwgMjE2LCAxMzMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIzNCwgCi0gICAgMTc5LCAyMTgsIDEzNCwgMjMwLCAxMTUsIDI0MSwgMTkyLCAzMSwgMjQ4LCAzMiwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjMxLCAxNTIsIDIzMSwgMjAyLCAyNDEsIDE5MiwgMzEsIDI1NSwgMTksIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIxMiwgCi0gICAgNTQsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0MywgNDcsIDIxMSwgMjM5LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMzUsIDUyLCAyMzMsIDEwNywgMjQxLCAxOTIsIDMxLCAyNDcsIDE4NCwgMjQxLCAxOTIsIDMxLCAyMzIsIDIyMCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzUsIDIyMywgMjE1LCAxODcsIDI0MSwgMTkyLCAzMSwgNCwgMjI0LCAxOTcsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjU0LCAyMTcsIDI0OSwgMjEyLCAyNDEsIDE5MiwgMzEsIDI1MiwgNTksIDI0OSwgMjEyLCA4LCAzLCAyMzUsIDE2MCwgOCwgCi0gICAgMywgMjM1LCAxNTMsIDgsIDMsIDczLCA4LCAzLCAyMzUsIDE4MiwgOCwgMywgMjM2LCA1OCwgOCwgMywgMjM2LCA0MSwgOCwgCi0gICAgMywgMjM2LCA2MCwgOCwgMywgMjM2LCA1OSwgOCwgMywgMjUzLCAyMDYsIDgsIDMsIDI1MywgMTY5LCA4LCAzLCA2MSwgOCwgCi0gICAgMywgMjU0LCA3MiwgOCwgMywgMjE0LCAxNjQsIDgsIDMsIDIxNCwgMTY3LCA4LCAzLCAyMTQsIDE2NSwgOCwgMywgMjI2LCAKLSAgICAxNDAsIDgsIDMsIDIyNiwgMTE0LCA4LCAzLCA3NiwgOCwgMywgMjI2LCAxNzUsIDgsIDMsIDI0NSwgMzUsIDgsIDMsIDc1LCAKLSAgICA4LCAzLCAyMTEsIDE5NSwgOCwgMywgMjUxLCAyMjgsIDgsIDMsIDI1MSwgMjI1LCA4LCAzLCAyNTIsIDYsIDgsIDMsIDI1MSwgCi0gICAgMjM4LCA4LCAzLCAyNTEsIDI1MSwgOCwgMywgMjUxLCAyNTAsIDgsIDMsIDI1MSwgMjUzLCA4LCAzLCAyNTEsIDI1MiwgOCwgCi0gICAgMywgMjUyLCAxMjEsIDgsIDMsIDI1MiwgMTEzLCA4LCAzLCAyNTIsIDE5MSwgOCwgMywgMjUyLCAxNDIsIDgsIDMsIDI1MSwgCi0gICAgMTAxLCA4LCAzLCAyNTEsIDEwNSwgOCwgMywgMjUxLCAxMDIsIDgsIDMsIDI1MSwgMTc5LCA4LCAzLCAyNTEsIDE2MywgOCwgCi0gICAgMywgMjUxLCAyMDUsIDgsIDMsIDI1MSwgMTg1LCA4LCAzLCAyNTIsIDIxLCA4LCAzLCAyNTIsIDc1LCA4LCAzLCAyNTIsIDMzLCAKLSAgICA4LCAzLCAyNTEsIDg3LCA4LCAzLCAyNTEsIDg0LCA4LCAzLCAyNTEsIDEyNSwgOCwgMywgMjUxLCAxMDAsIDgsIDMsIDI1MSwgCi0gICAgOTQsIDgsIDMsIDI1MSwgOTgsIDgsIDMsIDI1MSwgNzIsIDgsIDMsIDI1MSwgNzAsIDgsIDMsIDI1MSwgNzcsIDgsIDMsIAotICAgIDI1MSwgNzUsIDgsIDMsIDI1MSwgNzMsIDgsIDMsIDI1MSwgNzQsIDgsIDMsIDIyNSwgNDksIDgsIDMsIDIyNSwgNDUsIDgsIAotICAgIDMsIDIyNSwgMTA4LCA4LCAzLCAyMjUsIDU5LCA4LCAzLCAyMjUsIDc1LCA4LCAzLCAyMjUsIDEwMiwgOCwgMywgMjI1LCA5OCwgCi0gICAgOCwgMywgMjI1LCAyNDAsIDgsIDMsIDIyNSwgMjMwLCA4LCAzLCAxOTAsIDgsIDMsIDIyNiwgMjEsIDgsIDMsIDIyNCwgMTM1LCAKLSAgICA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMzYsIDgsIDMsIDIyNCwgMjMzLCA4LCAzLCAyMjQsIDIyMiwgOCwgMywgCi0gICAgMjI1LCAxNiwgOCwgMywgMjI0LCAyNDUsIDgsIDMsIDIyNCwgMTIxLCA4LCAzLCAyMjQsIDExNywgOCwgMywgMjI0LCAxNTAsIAotICAgIDgsIDMsIDIyNCwgMTM0LCA4LCAzLCAyMjQsIDEyNiwgOCwgMywgMjI0LCAxMzIsIDgsIDMsIDIyNCwgMTAwLCA4LCAzLCAKLSAgICAyMjQsIDk5LCA4LCAzLCAyMjQsIDEwNCwgOCwgMywgMjI0LCAxMDMsIDgsIDMsIDIyNCwgMTAxLCA4LCAzLCAyMjQsIDEwMiwgCi0gICAgOCwgMywgMjUyLCA5NiwgOCwgMywgMjUyLCA5NSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgOTcsIDgsIDMsIDI1MiwgCi0gICAgOTksIDgsIDMsIDI1MiwgOTgsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDEwMCwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIAotICAgIDI1MiwgMTA3LCA4LCAzLCAyNTIsIDExMSwgOCwgMywgMjUyLCAxMDksIDgsIDMsIDI1MiwgODcsIDgsIDMsIDI1MiwgODksIAotICAgIDgsIDMsIDI1MiwgODgsIDgsIDMsIDI1MiwgOTIsIDgsIDMsIDI1MiwgOTEsIDgsIDMsIDI1MiwgOTQsIDgsIDMsIDI1MiwgCi0gICAgOTMsIDgsIDMsIDI1MiwgMTAzLCA4LCAzLCAyNTIsIDEwNiwgOCwgMywgMjUyLCAxMDQsIDgsIDMsIDI1MiwgODMsIDgsIDMsIAotICAgIDI1MiwgODIsIDgsIDMsIDI1MiwgOTAsIDgsIDMsIDI1MiwgODYsIDgsIDMsIDI1MiwgODQsIDgsIDMsIDI1MiwgODUsIDgsIAotICAgIDMsIDI1MiwgNzksIDgsIDMsIDI1MiwgNzgsIDgsIDMsIDI1MiwgODEsIDgsIDMsIDI1MiwgODAsIDgsIDMsIDIyOSwgMTY5LCAKLSAgICA4LCAzLCAyMjksIDE2OCwgOCwgMywgMjI5LCAxNzQsIDgsIDMsIDIyOSwgMTcwLCA4LCAzLCAyMjksIDE3MSwgOCwgMywgCi0gICAgMjI5LCAxNzMsIDgsIDMsIDIyOSwgMTcyLCA4LCAzLCAyMjksIDE3NywgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc5LCAKLSAgICA4LCAzLCAyMjksIDE3OCwgOCwgMywgMjI5LCAxNjUsIDgsIDMsIDIyOSwgMTY0LCA4LCAzLCAyMjksIDE2NywgOCwgMywgCi0gICAgMjI5LCAxNjYsIDgsIDMsIDIyOSwgMTU4LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTYxLCAKLSAgICA4LCAzLCAyMjksIDE1OSwgOCwgMywgMjI5LCAxNjAsIDgsIDMsIDIyOSwgMTUyLCA4LCAzLCAyMjksIDE1MSwgOCwgMywgCi0gICAgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTU1LCA4LCAzLCAyMjksIDE1MywgOCwgMywgMjI5LCAxNTQsIDgsIDMsIDI0MSwgMTEwLCAKLSAgICA4LCAzLCAyNDEsIDEwOSwgOCwgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTExLCA4LCAzLCAyNDEsIDExMiwgOCwgMywgCi0gICAgMjQxLCAxMTQsIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTcsIDgsIDMsIDI0MSwgMTIwLCAKLSAgICA4LCAzLCAyNDEsIDExOSwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgMTAzLCA4LCAzLCAyNDEsIDEwMiwgOCwgMywgCi0gICAgMjQxLCAxMDYsIDgsIDMsIDI0MSwgMTA1LCA4LCAzLCAyNDEsIDEwOCwgOCwgMywgMjQxLCAxMDcsIDgsIDMsIDI0MSwgOTcsIAotICAgIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgMTA0LCA4LCAzLCAyNDEsIDEwMCwgOCwgMywgMjQxLCA5OCwgOCwgMywgMjQxLCAKLSAgICA5OSwgOCwgMywgMjQxLCA5MSwgOCwgMywgMjQxLCA5NSwgOCwgMywgMjQxLCA5NCwgOCwgMywgMjQxLCA5MiwgOCwgMywgCi0gICAgMjQxLCA5MywgOCwgMywgMjMwLCAxNzIsIDgsIDMsIDIzMCwgMTcxLCA4LCAzLCAyMzAsIDIzMCwgOCwgMywgMjMwLCAxNzgsIAotICAgIDgsIDMsIDIzMCwgMjAzLCA4LCAzLCAyMzAsIDIyMSwgOCwgMywgMjMwLCAyMTksIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAKLSAgICAyMzEsIDEzNCwgOCwgMywgMTg0LCA4LCAzLCAyMzEsIDE3MiwgOCwgMywgMjMwLCA3NCwgOCwgMywgMjMwLCA3MywgOCwgMywgCi0gICAgMjMwLCA3NywgOCwgMywgMjMwLCA3NSwgOCwgMywgMjMwLCAxMjEsIDgsIDMsIDIzMCwgMTA3LCA4LCAzLCAyMzAsIDE2MSwgCi0gICAgOCwgMywgMjMwLCAxMjYsIDgsIDMsIDIzMSwgMjYsIDgsIDMsIDIzMSwgOTEsIDgsIDMsIDIzMCwgNTUsIDgsIDMsIDIzMCwgCi0gICAgNTEsIDgsIDMsIDIzMCwgMTAyLCA4LCAzLCAyMzAsIDcwLCA4LCAzLCAyMzAsIDYzLCA4LCAzLCAyMzAsIDY4LCA4LCAzLCAKLSAgICAyMzAsIDI4LCA4LCAzLCAyMzAsIDI3LCA4LCAzLCAyMzAsIDMzLCA4LCAzLCAyMzAsIDMwLCA4LCAzLCAyNDQsIDgzLCA4LCAKLSAgICAzLCAyNDQsIDc4LCA4LCAzLCAyNDQsIDEyMSwgOCwgMywgMjQ0LCA5OCwgOCwgMywgMjQ0LCAxNjcsIDgsIDMsIDI0NCwgCi0gICAgMTU4LCA4LCAzLCAyNDQsIDE5NiwgOCwgMywgMjQ0LCAxNzAsIDgsIDMsIDI0NCwgMywgOCwgMywgMjQ0LCA0MywgOCwgMywgCi0gICAgMjQ0LCAyNywgOCwgMywgMjQzLCAyMTgsIDgsIDMsIDI0MywgMjE3LCA4LCAzLCAyNDMsIDIzNCwgOCwgMywgMjQzLCAyMjMsIAotICAgIDgsIDMsIDI0MywgMjIxLCA4LCAzLCAyNDMsIDIyMiwgOCwgMywgMjQzLCAyMDUsIDgsIDMsIDI0MywgMjA0LCA4LCAzLCAKLSAgICAyNDMsIDIwOCwgOCwgMywgMjQzLCAyMDYsIDgsIDMsIDIxMywgMTQ0LCA4LCAzLCAyMTMsIDEzOSwgOCwgMywgMjEzLCAxNzYsIAotICAgIDgsIDMsIDIxMywgMTUzLCA4LCAzLCAyMTMsIDE2NiwgOCwgMywgMjEzLCAxNjMsIDgsIDMsIDIxMywgMTY4LCA4LCAzLCAKLSAgICAyMTMsIDE2NywgOCwgMywgMjE0LCA3LCA4LCAzLCAyMTQsIDIsIDgsIDMsIDIxNCwgMjcsIDgsIDMsIDIxNCwgMTgsIDgsIDMsIAotICAgIDIxMywgMTI1LCA4LCAzLCAyMTMsIDEyMSwgOCwgMywgMjEzLCAxMzgsIDgsIDMsIDIxMywgMTI2LCA4LCAzLCAyMTMsIDE3OCwgCi0gICAgOCwgMywgMjEzLCAyNDQsIDgsIDMsIDIxMiwgMTEwLCA4LCAzLCAyMTIsIDEwOCwgOCwgMywgMjEyLCAxMTYsIDgsIDMsIAotICAgIDIxMiwgMTEzLCA4LCAzLCAyMTIsIDExMSwgOCwgMywgMjEyLCAxMTIsIDgsIDMsIDIxMiwgMTAyLCA4LCAzLCAyMTIsIDEwMSwgCi0gICAgOCwgMywgMjEyLCAxMDYsIDgsIDMsIDIxMiwgMTA1LCA4LCAzLCAyMTIsIDEwMywgOCwgMywgMjEyLCAxMDQsIDgsIDMsIAotICAgIDI0NywgMTc4LCA4LCAzLCAyNDcsIDE2NiwgOCwgMywgMjQ4LCAzLCA4LCAzLCAyNDcsIDIwMywgOCwgMywgMjQ3LCAyMzYsIAotICAgIDgsIDMsIDI0NywgMjQwLCA4LCAzLCAyNDcsIDIzOSwgOCwgMywgMjQ4LCAxNTIsIDgsIDMsIDI0OCwgMTQ3LCA4LCAzLCAKLSAgICAyNDgsIDIyMSwgOCwgMywgMjQ4LCAxNzIsIDgsIDMsIDI0NiwgNjIsIDgsIDMsIDI0NiwgNjMsIDgsIDMsIDI0NywgMTIwLCAKLSAgICA4LCAzLCAyNDYsIDEwMiwgOCwgMywgMjQ3LCAxNDUsIDgsIDMsIDI0NywgMTIyLCA4LCAzLCAyNDgsIDMwLCA4LCAzLCAyNDgsIAotICAgIDkwLCA4LCAzLCAyNDgsIDQ1LCA4LCAzLCAyNDYsIDUzLCA4LCAzLCAyNDYsIDUxLCA4LCAzLCAyNDYsIDc4LCA4LCAzLCAKLSAgICAyNDYsIDYxLCA4LCAzLCAyNDYsIDU2LCA4LCAzLCAyNDYsIDU5LCA4LCAzLCAyMTYsIDY3LCA4LCAzLCAyMTYsIDYxLCA4LCAKLSAgICAzLCAyMTYsIDExNywgOCwgMywgMjE2LCA3NiwgOCwgMywgMjE2LCAxMDksIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTYsIAotICAgIDExMCwgOCwgMywgMjE3LCA0NiwgOCwgMywgMjE3LCAzMywgOCwgMywgMjE3LCAxMDUsIDgsIDMsIDIxNywgNTQsIDgsIDMsIAotICAgIDIxNSwgMTAyLCA4LCAzLCAyMTUsIDEwMSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNSwgMTAzLCA4LCAzLCAyMTYsIDUsIAotICAgIDgsIDMsIDIxNiwgMSwgOCwgMywgMTExLCA4LCAzLCAyMTYsIDEzLCA4LCAzLCAyMTYsIDIxMywgOCwgMywgMjE3LCAyMiwgOCwgCi0gICAgMywgMjE2LCAyMzcsIDgsIDMsIDIxNSwgODgsIDgsIDMsIDIxNSwgODMsIDgsIDMsIDIxNSwgMTE4LCA4LCAzLCAyMTUsIAotICAgIDEwMCwgOCwgMywgMjE1LCA4OSwgOCwgMywgMjE1LCA5OCwgOCwgMywgMjQ4LCAxMDcsIDgsIDMsIDI0OCwgMTA2LCA4LCAzLCAKLSAgICAyNDgsIDExMiwgOCwgMywgMjQ4LCAxMDgsIDgsIDMsIDI0OCwgMTA5LCA4LCAzLCAyNDgsIDExMSwgOCwgMywgMjQ4LCAxMTAsIAotICAgIDgsIDMsIDI0OCwgMTI4LCA4LCAzLCAyNDgsIDEyNywgOCwgMywgMjQ4LCAxMzUsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAKLSAgICAyNDgsIDk3LCA4LCAzLCAyNDgsIDk5LCA4LCAzLCAyNDgsIDk4LCA4LCAzLCAyNDgsIDEwMiwgOCwgMywgMjQ4LCAxMDEsIDgsIAotICAgIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwMywgOCwgMywgMjQ4LCAxMjAsIDgsIDMsIDI0OCwgMTIzLCA4LCAzLCAyNDgsIAotICAgIDEyMSwgOCwgMywgMjQ4LCA5MywgOCwgMywgMjQ4LCA5MiwgOCwgMywgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgOTYsIDgsIDMsIAotICAgIDI0OCwgOTQsIDgsIDMsIDI0OCwgOTUsIDgsIDMsIDIyOSwgMTI2LCA4LCAzLCAyMjksIDEyNSwgOCwgMywgMjI5LCAxMzMsIAotICAgIDgsIDMsIDIyOSwgMTI4LCA4LCAzLCAyMjksIDEyOSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTQyLCA4LCAzLCAKLSAgICAyMjksIDE0MSwgOCwgMywgMjI5LCAxNDgsIDgsIDMsIDIyOSwgMTQzLCA4LCAzLCAyMjksIDExOCwgOCwgMywgMjI5LCAxMTcsIAotICAgIDgsIDMsIDIyOSwgMTI0LCA4LCAzLCAyMjksIDExOSwgOCwgMywgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTQwLCA4LCAzLCAKLSAgICAyMjksIDEzOCwgOCwgMywgMjI5LCAxMTAsIDgsIDMsIDIyOSwgMTA5LCA4LCAzLCAyMjksIDExNSwgOCwgMywgMjI5LCAxMTMsIAotICAgIDgsIDMsIDIyOSwgMTExLCA4LCAzLCAyMjksIDExMiwgOCwgMywgMjQxLCA3NywgOCwgMywgMjQxLCA3NiwgOCwgMywgMjQxLCAKLSAgICA4MywgOCwgMywgMjQxLCA3OCwgOCwgMywgMjQxLCA4MCwgOCwgMywgMjQxLCA3OSwgOCwgMywgMjQxLCA4MiwgOCwgMywgCi0gICAgMjQxLCA4MSwgOCwgMywgMjQxLCA4OCwgOCwgMywgMjQxLCA4NywgOCwgMywgMjQxLCA5MCwgOCwgMywgMjQxLCA4OSwgOCwgCi0gICAgMywgMjQxLCA3MSwgOCwgMywgMjQxLCA3MiwgOCwgMywgMjQxLCA3NCwgOCwgMywgMjQxLCA3MywgOCwgMywgMjQxLCA3NSwgCi0gICAgOCwgMywgMjQxLCA4NCwgOCwgMywgMjQxLCA4NiwgOCwgMywgMjQxLCA4NSwgOCwgMywgMjQxLCA3MCwgOCwgMywgMjI4LCAKLSAgICAxODksIDgsIDMsIDIyOCwgMTg3LCA4LCAzLCAyMjgsIDIzMywgOCwgMywgMjI4LCAxOTIsIDgsIDMsIDIyOCwgMjE1LCA4LCAKLSAgICAzLCAyMjgsIDIyOSwgOCwgMywgMjI4LCAyMjgsIDgsIDMsIDIyOSwgMTgzLCA4LCAzLCAxOTcsIDgsIDMsIDIyOSwgMTk3LCAKLSAgICA4LCAzLCAyMjcsIDE4NiwgOCwgMywgMjI3LCAxODgsIDgsIDMsIDIyNywgMTg3LCA4LCAzLCAyMjgsIDUxLCA4LCAzLCAyMjgsIAotICAgIDM4LCA4LCAzLCAyMjgsIDc0LCA4LCAzLCAyMjgsIDYwLCA4LCAzLCAyMjksIDgzLCA4LCAzLCAyMjksIDEwNywgOCwgMywgCi0gICAgMjI5LCA5NCwgOCwgMywgMjI3LCAxODEsIDgsIDMsIDIyNywgMTc3LCA4LCAzLCAyMjcsIDIzNywgOCwgMywgMjI3LCAxODUsIAotICAgIDgsIDMsIDIyNywgMTgzLCA4LCAzLCAyMjcsIDE4NCwgOCwgMywgMjQxLCAxNDEsIDgsIDMsIDI0MSwgMTQwLCA4LCAzLCAKLSAgICAyNDEsIDE0NiwgOCwgMywgMjQxLCAxNDIsIDgsIDMsIDI0MSwgMTQzLCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgMjQxLCAxNDQsIAotICAgIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTUyLCA4LCAzLCAKLSAgICAyNDEsIDEzMywgOCwgMywgMjQxLCAxMzUsIDgsIDMsIDI0MSwgMTM0LCA4LCAzLCAyNDEsIDEzNywgOCwgMywgMjQxLCAxMzksIAotICAgIDgsIDMsIDI0MSwgMTM4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNDksIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAKLSAgICAyNDEsIDEyOSwgOCwgMywgMjQxLCAxMjgsIDgsIDMsIDI0MSwgMTM2LCA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjQxLCAxMzAsIAotICAgIDgsIDMsIDI0MSwgMTMxLCA4LCAzLCAyNDEsIDEyMywgOCwgMywgMjQxLCAxMjIsIDgsIDMsIDI0MSwgMTI3LCA4LCAzLCAKLSAgICAyNDEsIDEyNiwgOCwgMywgMjQxLCAxMjQsIDgsIDMsIDI0MSwgMTI1LCA4LCAzLCAyMzIsIDE5NSwgOCwgMywgMjMyLCAxODksIAotICAgIDgsIDMsIDIzMiwgMjQxLCA4LCAzLCAyMzIsIDIwMiwgOCwgMywgMjMyLCAyMzMsIDgsIDMsIDIzMiwgMjMyLCA4LCAzLCAKLSAgICAyMzIsIDIzNiwgOCwgMywgMjMyLCAyMzQsIDgsIDMsIDIzMywgNzksIDgsIDMsIDIzMywgNjksIDgsIDMsIDIzMywgMTM1LCAKLSAgICA4LCAzLCAyMzMsIDg4LCA4LCAzLCAyMzIsIDc5LCA4LCAzLCAyMzIsIDc4LCA4LCAzLCAyMzIsIDgxLCA4LCAzLCAyMzIsIAotICAgIDgwLCA4LCAzLCAyMzIsIDExNiwgOCwgMywgMjMyLCAxMDYsIDgsIDMsIDIzMiwgMTU2LCA4LCAzLCAyMzIsIDEyMCwgOCwgMywgCi0gICAgMjMzLCAyLCA4LCAzLCAyMzMsIDU4LCA4LCAzLCAyMzMsIDE3LCA4LCAzLCAyMzIsIDc0LCA4LCAzLCAyMzIsIDcyLCA4LCAzLCAKLSAgICAyMzIsIDk4LCA4LCAzLCAyMzIsIDc3LCA4LCAzLCAyMzIsIDc1LCA4LCAzLCAyMzIsIDc2LCA4LCAzLCAyMzIsIDU0LCA4LCAKLSAgICAzLCAyMzIsIDUzLCA4LCAzLCAyMzIsIDYyLCA4LCAzLCAyMzIsIDU3LCA4LCAzLCAyMzIsIDU1LCA4LCAzLCAyMzIsIDU2LCAKLSAgICA4LCAzLCAyNDIsIDE4OSwgOCwgMywgMjQyLCAxODgsIDgsIDMsIDI0MiwgMjE0LCA4LCAzLCAyNDIsIDE5OSwgOCwgMywgCi0gICAgMjQyLCAyMDYsIDgsIDMsIDI0MiwgMjA1LCA4LCAzLCAyNDIsIDIwOCwgOCwgMywgMjQyLCAyMDcsIDgsIDMsIDI0MywgODksIAotICAgIDgsIDMsIDI0MywgODQsIDgsIDMsIDI0MywgMTM1LCA4LCAzLCAyNDMsIDk5LCA4LCAzLCAyNDIsIDkxLCA4LCAzLCAyNDIsIAotICAgIDkwLCA4LCAzLCAyNDIsIDkzLCA4LCAzLCAyNDIsIDkyLCA4LCAzLCAyNDIsIDE1NCwgOCwgMywgMjQyLCAxNTIsIDgsIDMsIAotICAgIDI0MiwgMTc0LCA4LCAzLCAyNDIsIDE2MiwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCA2MiwgOCwgCi0gICAgMywgMjQzLCA0NCwgOCwgMywgMjQyLCA4MSwgOCwgMywgMjQyLCA4MCwgOCwgMywgMjQyLCAxMTMsIDgsIDMsIDI0MiwgODksIAotICAgIDgsIDMsIDI0MiwgODIsIDgsIDMsIDI0MiwgODgsIDgsIDMsIDIzNCwgNjEsIDgsIDMsIDIzNCwgNjAsIDgsIDMsIDIzNCwgCi0gICAgOTIsIDgsIDMsIDIzNCwgNzUsIDgsIDMsIDIzNCwgODUsIDgsIDMsIDIzNCwgODgsIDgsIDMsIDIzNCwgODYsIDgsIDMsIAotICAgIDIzNCwgMjAyLCA4LCAzLCAyMzQsIDE5MCwgOCwgMywgMTc2LCA4LCAzLCAyMzQsIDIyOCwgOCwgMywgMjMzLCAyMDAsIDgsIAotICAgIDMsIDIzMywgMjA1LCA4LCAzLCAyMzMsIDIwMiwgOCwgMywgMjM0LCAwLCA4LCAzLCAyMzMsIDI1MiwgOCwgMywgMjM0LCAyOCwgCi0gICAgOCwgMywgMjM0LCA3LCA4LCAzLCAyMzQsIDE1NiwgOCwgMywgMjM0LCAxNDAsIDgsIDMsIDIzNCwgMTgyLCA4LCAzLCAyMzQsIAotICAgIDE1OSwgOCwgMywgMjMzLCAxODksIDgsIDMsIDIzMywgMTg2LCA4LCAzLCAyMzMsIDIxNywgOCwgMywgMjMzLCAxOTksIDgsIAotICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDE5NiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgOCwgMywgMjQzLCAxOSwgCi0gICAgOCwgMywgMjQzLCAxNiwgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAKLSAgICAyNSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCA2LCA4LCAzLCAyNDMsIDUsIDgsIDMsIDI0MywgCi0gICAgOCwgOCwgMywgMjQzLCA3LCA4LCAzLCAyNDMsIDExLCA4LCAzLCAyNDMsIDEwLCA4LCAzLCAyNDMsIDEzLCA4LCAzLCAyNDMsIAotICAgIDEyLCA4LCAzLCAyNDMsIDIxLCA4LCAzLCAyNDMsIDIwLCA4LCAzLCAyNDMsIDI0LCA4LCAzLCAyNDMsIDIyLCA4LCAzLCAKLSAgICAyNDMsIDEsIDgsIDMsIDI0MywgMCwgOCwgMywgMjQzLCA5LCA4LCAzLCAyNDMsIDQsIDgsIDMsIDI0MywgMiwgOCwgMywgCi0gICAgMjQzLCAzLCA4LCAzLCAyMzAsIDI0OSwgOCwgMywgMjMwLCAyNTAsIDgsIDMsIDIzMSwgMTIsIDgsIDMsIDIzMSwgMTEsIDgsIAotICAgIDMsIDIzMSwgMTQsIDgsIDMsIDIzMSwgMTMsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0MiwgOCwgMywgMjMwLCAKLSAgICAyNDEsIDgsIDMsIDIzMCwgMjQ1LCA4LCAzLCAyMzAsIDI0NCwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAKLSAgICAzLCAyMzAsIDI1MSwgOCwgMywgMjMwLCAyNTMsIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDIzNiwgOCwgMywgMjMwLCAKLSAgICAyMzUsIDgsIDMsIDIzMCwgMjQzLCA4LCAzLCAyMzAsIDIzOSwgOCwgMywgMjMwLCAyMzcsIDgsIDMsIDIzMCwgMjM4LCA4LCAKLSAgICAzLCAyNDAsIDE4MCwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTg2LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgMjQwLCAKLSAgICAxODMsIDgsIDMsIDI0MCwgMTgyLCA4LCAzLCAyNDAsIDE4NSwgOCwgMywgMjQwLCAxODQsIDgsIDMsIDI0MCwgMTkxLCA4LCAKLSAgICAzLCAyNDAsIDE5MCwgOCwgMywgMjQwLCAxOTMsIDgsIDMsIDI0MCwgMTkyLCA4LCAzLCAyNDAsIDE3MiwgOCwgMywgMjQwLCAKLSAgICAxNzEsIDgsIDMsIDI0MCwgMTc0LCA4LCAzLCAyNDAsIDE3MywgOCwgMywgMjQwLCAxNzYsIDgsIDMsIDI0MCwgMTc1LCA4LCAKLSAgICAzLCAyNDAsIDE3OCwgOCwgMywgMjQwLCAxNzcsIDgsIDMsIDI0MCwgMTg3LCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgMjQwLCAKLSAgICAxODgsIDgsIDMsIDIyOSwgMjQsIDgsIDMsIDIyOSwgMjYsIDgsIDMsIDIyOSwgMjUsIDgsIDMsIDIyOSwgNjcsIDgsIDMsIAotICAgIDIyOSwgNjUsIDgsIDMsIDIyOSwgNzcsIDgsIDMsIDIyOSwgNzAsIDgsIDMsIDIyOCwgMjQzLCA4LCAzLCAyMjgsIDI0MiwgOCwgCi0gICAgMywgMjI4LCAyNDQsIDgsIDMsIDIyOCwgMjUyLCA4LCAzLCAyMjgsIDI0OSwgOCwgMywgMjI5LCA0LCA4LCAzLCAyMjgsIAotICAgIDI1NCwgOCwgMywgMjI5LCA1OCwgOCwgMywgMjI5LCA2NCwgOCwgMywgMjI5LCA2MCwgOCwgMywgMjQxLCAxNTYsIDgsIDMsIAotICAgIDI0MSwgMTY2LCA4LCAzLCAyNDEsIDE3NSwgOCwgMywgMjQxLCAyNTEsIDgsIDMsIDI0MSwgMjQzLCA4LCAzLCAxNjIsIDgsIAotICAgIDMsIDI0MiwgNiwgOCwgMywgMjQwLCAyMDYsIDgsIDMsIDI0MCwgMjA1LCA4LCAzLCAyNDAsIDIwOCwgOCwgMywgMjQwLCAKLSAgICAyMDcsIDgsIDMsIDI0MCwgMjQyLCA4LCAzLCAyNDAsIDIzMywgOCwgMywgMjQxLCA2OCwgOCwgMywgMjQxLCA0NywgOCwgMywgCi0gICAgMjQxLCAxOTQsIDgsIDMsIDI0MSwgMjM4LCA4LCAzLCAyNDEsIDIwNiwgOCwgMywgMjEyLCA0MywgOCwgMywgMjEyLCAyOCwgCi0gICAgOCwgMywgMjEyLCA2NSwgOCwgMywgMjEyLCA1MSwgOCwgMywgMjExLCAxODUsIDgsIDMsIDIxMSwgMTg3LCA4LCAzLCAyMTEsIAotICAgIDE4NiwgOCwgMywgMjExLCAyMDMsIDgsIDMsIDIxMSwgMjI3LCA4LCAzLCAyMTEsIDIxMCwgOCwgMywgMjEyLCA1LCA4LCAzLCAKLSAgICAyMTIsIDIyLCA4LCAzLCAyMTIsIDEwLCA4LCAzLCAyMTAsIDMwLCA4LCAzLCAyMTAsIDI5LCA4LCAzLCAyMTAsIDQ0LCA4LCAKLSAgICAzLCAyMTAsIDMyLCA4LCAzLCAyMTAsIDM3LCA4LCAzLCAyMTAsIDM5LCA4LCAzLCAyMTAsIDM4LCA4LCAzLCAyMTAsIDEwMiwgCi0gICAgOCwgMywgMjEwLCA5OSwgOCwgMywgMjEwLCAxMTYsIDgsIDMsIDIxMCwgMTA1LCA4LCAzLCAyMTAsIDYsIDgsIDMsIDIxMCwgCi0gICAgOCwgOCwgMywgMjEwLCA3LCA4LCAzLCAyMTAsIDE5LCA4LCAzLCAyMTAsIDE4LCA4LCAzLCAyMTAsIDIzLCA4LCAzLCAyMTAsIAotICAgIDIwLCA4LCAzLCAyMTAsIDg0LCA4LCAzLCAyMTAsIDk0LCA4LCAzLCAyMTAsIDg4LCA4LCAzLCAyMTAsIDIsIDgsIDMsIDIxMCwgCi0gICAgMSwgOCwgMywgMjEwLCAxMywgOCwgMywgMjEwLCA1LCA4LCAzLCAyMTAsIDMsIDgsIDMsIDIxMCwgNCwgOCwgMywgMjA5LCAKLSAgICAyNDUsIDgsIDMsIDIwOSwgMjQ0LCA4LCAzLCAyMDksIDI1MCwgOCwgMywgMjA5LCAyNDgsIDgsIDMsIDIwOSwgMjQ2LCA4LCAKLSAgICAzLCAyMDksIDI0NywgOCwgMywgMjUwLCAyOCwgOCwgMywgMjUwLCAyNCwgOCwgMywgMjUwLCA1MSwgOCwgMywgMjUwLCAzNywgCi0gICAgOCwgMywgMjUwLCA0OCwgOCwgMywgMjUwLCA0MiwgOCwgMywgMjUwLCA1MCwgOCwgMywgMjUwLCA0OSwgOCwgMywgMjUwLCAKLSAgICAyMjQsIDgsIDMsIDI1MCwgMjE3LCA4LCAzLCAyNTEsIDMzLCA4LCAzLCAyNTAsIDI1MSwgOCwgMywgMjQ5LCAxMDQsIDgsIDMsIAotICAgIDI0OSwgMTA2LCA4LCAzLCAyNDksIDEwNSwgOCwgMywgMjQ5LCAxNTMsIDgsIDMsIDI0OSwgMTQ0LCA4LCAzLCAyNDksIDIzOCwgCi0gICAgOCwgMywgMjQ5LCAxNjksIDgsIDMsIDI1MCwgMTYwLCA4LCAzLCAyNTAsIDE5MCwgOCwgMywgMjUwLCAxNjUsIDgsIDMsIAotICAgIDI0OSwgODQsIDgsIDMsIDI0OSwgODIsIDgsIDMsIDI0OSwgMTEyLCA4LCAzLCAyNDksIDEwMiwgOCwgMywgMjQ5LCA4OSwgOCwgCi0gICAgMywgMjQ5LCAxMDEsIDgsIDMsIDI0OSwgNjMsIDgsIDMsIDI0OSwgNjIsIDgsIDMsIDI0OSwgNzMsIDgsIDMsIDI0OSwgNjksIAotICAgIDgsIDMsIDI0OSwgNjQsIDgsIDMsIDI0OSwgNjYsIDgsIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAKLSAgICAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAKLSAgICAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAKLSAgICAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAKLSAgICAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAKLSAgICAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAKLSAgICAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAKLSAgICAxMDQsIDgsIDMsIDIyNywgMTAzLCA4LCAzLCAyMjcsIDEwOSwgOCwgMywgMjI3LCAxMDUsIDgsIDMsIDIyNywgMTA2LCA4LCAKLSAgICAzLCAyMjcsIDEwOCwgOCwgMywgMjI3LCAxMDcsIDgsIDMsIDIyNywgMTE0LCA4LCAzLCAyMjcsIDExMywgOCwgMywgMjI3LCAKLSAgICAxMTcsIDgsIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk3LCA4LCAzLCAyMjcsIDk4LCA4LCAzLCAyMjcsIDEwMSwgOCwgMywgCi0gICAgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCA5MiwgOCwgMywgMjI3LCAxMDAsIAotICAgIDgsIDMsIDIyNywgOTYsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIyNywgOTQsIDgsIDMsIDIyNywgODcsIDgsIDMsIDIyNywgCi0gICAgODYsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgODgsIDgsIDMsIDIyNywgODksIDgsIDMsIAotICAgIDIxOSwgMTI3LCA4LCAzLCAxOTQsIDgsIDMsIDIxOSwgMTkxLCA4LCAzLCAyMTksIDEzMCwgOCwgMywgMjE5LCAxODMsIDgsIAotICAgIDMsIDIxOSwgMTg2LCA4LCAzLCAyMTksIDE4NCwgOCwgMywgMjIxLCAyMjYsIDgsIDMsIDIyMSwgMjE0LCA4LCAzLCAyMDYsIAotICAgIDgsIDMsIDIyMSwgMjM0LCA4LCAzLCAyMTgsIDI4LCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTgsIDI5LCA4LCAzLCAyMTksIAotICAgIDM0LCA4LCAzLCAyMTksIDIzLCA4LCAzLCAyMTksIDU4LCA4LCAzLCAyMTksIDM4LCA4LCAzLCAyMjAsIDExNCwgOCwgMywgCi0gICAgMjIxLCAxODEsIDgsIDMsIDIyMCwgMTM5LCA4LCAzLCAyMTgsIDUsIDgsIDMsIDIxOCwgMywgOCwgMywgMjE4LCA4MywgOCwgCi0gICAgMywgMjE4LCAyNywgOCwgMywgMjE4LCA5LCA4LCAzLCAyMTgsIDE3LCA4LCAzLCAyMTcsIDE2NiwgOCwgMywgMjE3LCAxNjUsIAotICAgIDgsIDMsIDIxNywgMjMyLCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE3LCAxNjgsIDgsIDMsIDIxNywgMTcyLCA4LCAzLCAKLSAgICAyMTgsIDE4NiwgOCwgMywgMjE4LCAxODUsIDgsIDMsIDIxOCwgMTkyLCA4LCAzLCAyMTgsIDE4NywgOCwgMywgMjE4LCAxODksIAotICAgIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MCwgOCwgMywgMjE4LCAyMDAsIDgsIDMsIDIxOCwgMTk4LCA4LCAzLCAKLSAgICAyMTgsIDIyMywgOCwgMywgMjE4LCAyMDEsIDgsIDMsIDIxOCwgMTgxLCA4LCAzLCAyMTgsIDE4MCwgOCwgMywgMjE4LCAxODQsIAotICAgIDgsIDMsIDIxOCwgMTgyLCA4LCAzLCAyMTgsIDE5NCwgOCwgMywgMjE4LCAxOTcsIDgsIDMsIDIxOCwgMTk1LCA4LCAzLCAKLSAgICAyMTgsIDE3NywgOCwgMywgMjE4LCAxNzUsIDgsIDMsIDIxOCwgMTc5LCA4LCAzLCAyMTgsIDE3OCwgOCwgMywgMjE4LCAxNzAsIAotICAgIDgsIDMsIDIxOCwgMTY5LCA4LCAzLCAyMTgsIDE3NCwgOCwgMywgMjE4LCAxNzMsIDgsIDMsIDIxOCwgMTcxLCA4LCAzLCAKLSAgICAyMTgsIDE3MiwgOCwgMywgMjEwLCA3NywgOCwgMywgMjEwLCA3NiwgOCwgMywgMjEwLCA4MiwgOCwgMywgMjEwLCA3OSwgOCwgCi0gICAgMywgMjEwLCA1OSwgOCwgMywgMjEwLCA2MSwgOCwgMywgMjEwLCA2MCwgOCwgMywgMjEwLCA2NCwgOCwgMywgMjEwLCA2MywgCi0gICAgOCwgMywgMjEwLCA2NywgOCwgMywgMjEwLCA2NSwgOCwgMywgMjEwLCA3MSwgOCwgMywgMjEwLCA3MCwgOCwgMywgMjEwLCAKLSAgICA3NCwgOCwgMywgMjEwLCA3MiwgOCwgMywgMjEwLCA1NSwgOCwgMywgMjEwLCA1NCwgOCwgMywgMjEwLCA2MiwgOCwgMywgCi0gICAgMjEwLCA1OCwgOCwgMywgMjEwLCA1NiwgOCwgMywgMjEwLCA1NywgOCwgMywgMjEwLCA0NywgOCwgMywgMjEwLCA0NiwgOCwgCi0gICAgMywgMjEwLCA1MSwgOCwgMywgMjEwLCA1MCwgOCwgMywgMjEwLCA0OCwgOCwgMywgMjEwLCA0OSwgOCwgMywgMjUwLCAxMzYsIAotICAgIDgsIDMsIDI1MCwgMTMzLCA4LCAzLCAyNTAsIDE1NywgOCwgMywgMjUwLCAxNDQsIDgsIDMsIDI1MCwgNjUsIDgsIDMsIDI1MCwgCi0gICAgNjQsIDgsIDMsIDI1MCwgNjcsIDgsIDMsIDI1MCwgNjYsIDgsIDMsIDI1MCwgNzksIDgsIDMsIDI1MCwgNzgsIDgsIDMsIAotICAgIDI1MCwgODYsIDgsIDMsIDI1MCwgODEsIDgsIDMsIDI1MCwgMTE1LCA4LCAzLCAyNTAsIDExMywgOCwgMywgMjUwLCAxMzEsIAotICAgIDgsIDMsIDI1MCwgMTIxLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDY5LCA4LCAzLCAyNTAsIDYzLCA4LCAzLCAyNTAsIAotICAgIDYwLCA4LCAzLCAyNTAsIDYyLCA4LCAzLCAyNTAsIDUzLCA4LCAzLCAyNTAsIDUyLCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAKLSAgICAyNTAsIDU2LCA4LCAzLCAyNTAsIDU0LCA4LCAzLCAyNTAsIDU1LCA4LCAzLCAyMjIsIDE3NSwgOCwgMywgMjIyLCAxNzksIDgsIAotICAgIDMsIDIyMiwgMTU4LCA4LCAzLCAyMjIsIDE1OSwgOCwgMywgMjIyLCAxNjIsIDgsIDMsIDIyMiwgMTYxLCA4LCAzLCAyMjIsIAotICAgIDE2NSwgOCwgMywgMjIyLCAxNjMsIDgsIDMsIDIyMiwgMTY5LCA4LCAzLCAyMjIsIDE2OCwgOCwgMywgMjIyLCAxNzQsIDgsIAotICAgIDMsIDIyMiwgMTcwLCA4LCAzLCAyMjIsIDE1NCwgOCwgMywgMjIyLCAxNTIsIDgsIDMsIDIyMiwgMTYwLCA4LCAzLCAyMjIsIAotICAgIDE1NywgOCwgMywgMjIyLCAxNTUsIDgsIDMsIDIyMiwgMTU2LCA4LCAzLCAyMjIsIDE0NywgOCwgMywgMjIyLCAxNDYsIDgsIAotICAgIDMsIDIyMiwgMTUxLCA4LCAzLCAyMjIsIDE1MCwgOCwgMywgMjIyLCAxNDgsIDgsIDMsIDIyMiwgMTQ5LCA4LCAzLCAyMjgsIAotICAgIDM0LCA4LCAzLCAyMjgsIDMzLCA4LCAzLCAyMjgsIDM2LCA4LCAzLCAyMjgsIDM1LCA4LCAzLCAyMjgsIDI2LCA4LCAzLCAKLSAgICAyMjgsIDI4LCA4LCAzLCAyMjgsIDI3LCA4LCAzLCAyMjgsIDMwLCA4LCAzLCAyMjgsIDI5LCA4LCAzLCAyMjgsIDMyLCA4LCAKLSAgICAzLCAyMjgsIDMxLCA4LCAzLCAyMjgsIDIxLCA4LCAzLCAyMjgsIDIwLCA4LCAzLCAyMjgsIDI1LCA4LCAzLCAyMjgsIDI0LCAKLSAgICA4LCAzLCAyMjgsIDIyLCA4LCAzLCAyMjgsIDIzLCA4LCAzLCAyMjgsIDE1LCA4LCAzLCAyMjgsIDE0LCA4LCAzLCAyMjgsIAotICAgIDE5LCA4LCAzLCAyMjgsIDE4LCA4LCAzLCAyMjgsIDE2LCA4LCAzLCAyMjgsIDE3LCA4LCAzLCAyMjAsIDcyLCA4LCAzLCAKLSAgICAyMjAsIDY3LCA4LCAzLCAyMjAsIDEwMiwgOCwgMywgMjIwLCA4MywgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMjE3LCAKLSAgICA4LCAzLCAyMTksIDIxNiwgOCwgMywgMjE5LCAyMzYsIDgsIDMsIDIxOSwgMjMzLCA4LCAzLCAyMjAsIDcsIDgsIDMsIDIxOSwgCi0gICAgMjU0LCA4LCAzLCAyMjAsIDQyLCA4LCAzLCAyMjAsIDM1LCA4LCAzLCAyMjAsIDYzLCA4LCAzLCAyMjAsIDUwLCA4LCAzLCAKLSAgICAyMTksIDIxMSwgOCwgMywgMjE5LCAyMDksIDgsIDMsIDIxOSwgMjI1LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTIsIAotICAgIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDE5NCwgOCwgMywgMjE5LCAxOTMsIDgsIDMsIDIxOSwgMjAwLCA4LCAzLCAKLSAgICAyMTksIDE5NywgOCwgMywgMjE5LCAxOTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAzLCAyMjMsIDE0MSwgOCwgMywgMjIzLCAxMzUsIAotICAgIDgsIDMsIDIwNSwgOCwgMywgMjIzLCAxNDcsIDgsIDMsIDIyMiwgMTIwLCA4LCAzLCAyMjIsIDEyMiwgOCwgMywgMjIyLCAKLSAgICAxMjEsIDgsIDMsIDIyMiwgMTg4LCA4LCAzLCAyMjIsIDE4MSwgOCwgMywgMjIyLCAyMTEsIDgsIDMsIDIyMiwgMTkyLCA4LCAKLSAgICAzLCAyMjMsIDQzLCA4LCAzLCAyMjMsIDEyOCwgOCwgMywgMjIzLCA4MSwgOCwgMywgMjIyLCAxMTMsIDgsIDMsIDIyMiwgCi0gICAgMTEwLCA4LCAzLCAyMjIsIDE0MCwgOCwgMywgMjIyLCAxMTksIDgsIDMsIDIyMiwgMTE1LCA4LCAzLCAyMjIsIDExNiwgOCwgCi0gICAgMywgMjIyLCA5NSwgOCwgMywgMjIyLCA5NCwgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTYsIAotICAgIDgsIDMsIDIyMiwgOTcsIDgsIDMsIDIzNSwgOTgsIDgsIDMsIDIzNSwgOTcsIDgsIDMsIDIzNSwgMTA4LCA4LCAzLCAyMzUsIAotICAgIDk5LCA4LCAzLCAyMzUsIDEwNCwgOCwgMywgMjM1LCAxMDMsIDgsIDMsIDIzNSwgMTA2LCA4LCAzLCAyMzUsIDEwNSwgOCwgMywgCi0gICAgMjM1LCA0MSwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCA0MiwgOCwgMywgMjM1LCA1NiwgOCwgCi0gICAgMywgMjM1LCA1NCwgOCwgMywgMjM1LCA2OCwgOCwgMywgMjM1LCA1OCwgOCwgMywgMjM1LCAzNCwgOCwgMywgMjM1LCAzMiwgCi0gICAgOCwgMywgMjM1LCA1MSwgOCwgMywgMjM1LCAzOSwgOCwgMywgMjM1LCAzNiwgOCwgMywgMjM1LCAzNywgOCwgMywgMjM1LCAKLSAgICAyNiwgOCwgMywgMjM1LCAyNSwgOCwgMywgMjM1LCAzMCwgOCwgMywgMjM1LCAyOSwgOCwgMywgMjM1LCAyNywgOCwgMywgCi0gICAgMjM1LCAyOCwgOCwgMywgMjI0LCA0NiwgOCwgMywgMjI0LCA0NCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA0NywgOCwgCi0gICAgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCA1MSwgOCwgMywgMjIzLCAyNTUsIAotICAgIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAyMjQsIDEsIDgsIDMsIDIyNCwgMCwgOCwgMywgMjI0LCAzMywgOCwgMywgMjI0LCAzMiwgCi0gICAgOCwgMywgMjI0LCA0MiwgOCwgMywgMjI0LCAzNiwgOCwgMywgMjIzLCAyNDcsIDgsIDMsIDIyMywgMjQzLCA4LCAzLCAyMjQsIAotICAgIDMwLCA4LCAzLCAyMjMsIDI1MSwgOCwgMywgMjIzLCAyNDksIDgsIDMsIDIyMywgMjUwLCA4LCAzLCAyMjMsIDIyNywgOCwgMywgCi0gICAgMjIzLCAyMjUsIDgsIDMsIDIyMywgMjM3LCA4LCAzLCAyMjMsIDIzMCwgOCwgMywgMjIzLCAyMjgsIDgsIDMsIDIyMywgMjI5LCAKLSAgICA4LCAzLCAyMzUsIDg3LCA4LCAzLCAyMzUsIDg2LCA4LCAzLCAyMzUsIDkzLCA4LCAzLCAyMzUsIDg4LCA4LCAzLCAyMzUsIAotICAgIDkwLCA4LCAzLCAyMzUsIDg5LCA4LCAzLCAyMzUsIDkyLCA4LCAzLCAyMzUsIDkxLCA4LCAzLCAyMzUsIDc4LCA4LCAzLCAKLSAgICAyMzUsIDgwLCA4LCAzLCAyMzUsIDc5LCA4LCAzLCAyMzUsIDgzLCA4LCAzLCAyMzUsIDgyLCA4LCAzLCAyMzUsIDg1LCA4LCAKLSAgICAzLCAyMzUsIDg0LCA4LCAzLCAyMzUsIDc0LCA4LCAzLCAyMzUsIDczLCA4LCAzLCAyMzUsIDgxLCA4LCAzLCAyMzUsIDc3LCAKLSAgICA4LCAzLCAyMzUsIDc1LCA4LCAzLCAyMzUsIDc2LCA4LCAzLCAyMzUsIDcwLCA4LCAzLCAyMzUsIDY5LCA4LCAzLCAyMzUsIAotICAgIDcyLCA4LCAzLCAyMzUsIDcxLCA4LCAzLCAyMjgsIDE2MiwgOCwgMywgMjI4LCAxNjEsIDgsIDMsIDIyOCwgMTY5LCA4LCAzLCAKLSAgICAyMjgsIDE2MywgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTY0LCA4LCAzLCAyMjgsIDE2OCwgOCwgMywgMjI4LCAxNjYsIAotICAgIDgsIDMsIDIyOCwgMTUxLCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIDIyOCwgMTU2LCA4LCAzLCAKLSAgICAyMjgsIDE2MCwgOCwgMywgMjI4LCAxNTgsIDgsIDMsIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE1NSwgOCwgMywgMjI4LCAxNTAsIAotICAgIDgsIDMsIDIyOCwgMTQ3LCA4LCAzLCAyMjgsIDE0OCwgOCwgMywgMjI4LCAxNDEsIDgsIDMsIDIyOCwgMTQwLCA4LCAzLCAKLSAgICAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNDQsIDgsIDMsIDIyOCwgMTQyLCA4LCAzLCAyMjgsIDE0MywgOCwgMywgMjI3LCAxMzcsIAotICAgIDgsIDMsIDIyNywgMTM2LCA4LCAzLCAyMjcsIDE0OCwgOCwgMywgMjI3LCAxNDEsIDgsIDMsIDIyNywgMTQ1LCA4LCAzLCAKLSAgICAyMjcsIDE0NCwgOCwgMywgMjI3LCAxNDcsIDgsIDMsIDIyNywgMTQ2LCA4LCAzLCAyMjcsIDEyNCwgOCwgMywgMjI3LCAxMjYsIAotICAgIDgsIDMsIDIyNywgMTI1LCA4LCAzLCAyMjcsIDEzMCwgOCwgMywgMjI3LCAxMjksIDgsIDMsIDIyNywgMTM0LCA4LCAzLCAKLSAgICAyMjcsIDEzMSwgOCwgMywgMjI3LCAxMjIsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIDEyOCwgOCwgMywgMjI3LCAxMjMsIAotICAgIDgsIDMsIDIxMSwgMTUwLCA4LCAzLCAyMTEsIDE0OSwgOCwgMywgMjExLCAxNTcsIDgsIDMsIDIxMSwgMTUyLCA4LCAzLCAKLSAgICAyMTEsIDE1NCwgOCwgMywgMjExLCAxNTMsIDgsIDMsIDIxMSwgMTU2LCA4LCAzLCAyMTEsIDE1NSwgOCwgMywgMjExLCAxMzksIAotICAgIDgsIDMsIDIxMSwgMTQwLCA4LCAzLCAyMTEsIDE0NCwgOCwgMywgMjExLCAxNDMsIDgsIDMsIDIxMSwgMTQ4LCA4LCAzLCAKLSAgICAyMTEsIDE0NiwgOCwgMywgMjExLCAxMjEsIDgsIDMsIDIxMSwgMTE5LCA4LCAzLCAyMTEsIDEzMSwgOCwgMywgMjExLCAxMjQsIAotICAgIDgsIDMsIDIxMSwgMTIyLCA4LCAzLCAyMTEsIDEyMywgOCwgMywgMjEwLCAyNTAsIDgsIDMsIDIxMCwgMjQ4LCA4LCAzLCAKLSAgICAyMTEsIDgsIDgsIDMsIDIxMCwgMjUxLCA4LCAzLCAyMTEsIDIsIDgsIDMsIDIxMSwgMSwgOCwgMywgMjExLCA1LCA4LCAzLCAKLSAgICAyMTEsIDMsIDgsIDMsIDIxMCwgMTkxLCA4LCAzLCAyMTAsIDE5MCwgOCwgMywgMjEwLCAxOTQsIDgsIDMsIDIxMCwgMTkyLCAKLSAgICA4LCAzLCAyMTAsIDIyNCwgOCwgMywgMjEwLCAyMjEsIDgsIDMsIDIxMCwgMjQ0LCA4LCAzLCAyMTAsIDIyOCwgOCwgMywgCi0gICAgMjEwLCAxODIsIDgsIDMsIDIxMCwgMTc4LCA4LCAzLCAyMTAsIDIxMiwgOCwgMywgMjEwLCAxODksIDgsIDMsIDIxMCwgMTg1LCAKLSAgICA4LCAzLCAyMTAsIDE4NiwgOCwgMywgMjEwLCAxNjIsIDgsIDMsIDIxMCwgMTYxLCA4LCAzLCAyMTAsIDE2OSwgOCwgMywgCi0gICAgMjEwLCAxNjUsIDgsIDMsIDIxMCwgMTYzLCA4LCAzLCAyMTAsIDE2NCwgOCwgMzQsIDIyNCwgMzMsIDgsIDM0LCAyMzIsIAotICAgIDI0MSwgOCwgMzQsIDIzNCwgNjEsIDgsIDM0LCAyMjcsIDE0MSwgOCwgMzQsIDI0OSwgNjksIDgsIDM0LCAyMTgsIDE5MiwgOCwgCi0gICAgMzQsIDI0MywgMTIsIDgsIDM0LCAyNDMsIDQ0LCA4LCAzNCwgMjMwLCAyMzAsIDgsIDM0LCAyNDAsIDE4MCwgOCwgMzQsIAotICAgIDIzMiwgNTYsIDgsIDM0LCAyNTIsIDgzLCA4LCAzNCwgMjMwLCAxMjYsIDgsIDM0LCAyMTAsIDI0NCwgOCwgMzQsIDIyNCwgCi0gICAgMTIxLCA4LCAzNCwgMjQwLCAxNzQsIDgsIDM0LCAyMTcsIDQ2LCA4LCAzNCwgMjQzLCAxMzUsIDgsIDM0LCAyMTAsIDUsIDgsIAotICAgIDM0LCAyNDksIDYzLCA4LCAzNCwgMjQ4LCA5NSwgOCwgMzQsIDI1MSwgOTgsIDgsIDM0LCAyNDMsIDgsIDgsIDM0LCAyMjcsIAotICAgIDEzMSwgOCwgMzQsIDIxNSwgMTE4LCA4LCAzNCwgMjI2LCAxNzUsIDgsIDM0LCAyMzUsIDc0LCA4LCAzNCwgMjEwLCAxOSwgOCwgCi0gICAgMzQsIDIyNCwgMTAwLCA4LCAzNCwgMjQxLCAxMDgsIDgsIDM0LCAyMTAsIDI1MCwgOCwgMzQsIDIxMiwgMTEyLCA4LCAzNCwgCi0gICAgMjE5LCAyMDAsIDgsIDM0LCAyMTMsIDI0NCwgOCwgMzQsIDIxMCwgMTE2LCA4LCAzNCwgMjM1LCA2OCwgOCwgMzQsIDIyNywgCi0gICAgOTYsIDgsIDM0LCAyMzUsIDcyLCA4LCAzNCwgMjQyLCAxNTQsIDgsIDM0LCAyMzUsIDkyLCA4LCAzNCwgMjExLCAyMjcsIDgsIAotICAgIDM0LCAyNDYsIDc4LCA4LCAzNCwgMjE5LCAyMTMsIDgsIDM0LCAyMzIsIDIzNiwgOCwgMzQsIDI0OSwgNzMsIDgsIDM0LCAKLSAgICAyNDksIDEwNSwgOCwgMzQsIDI1MCwgMzcsIDgsIDM0LCAyNDAsIDE3NywgOCwgMzQsIDIyMCwgNzIsIDgsIDM0LCAyMTAsIDQsIAotICAgIDgsIDM0LCAyMTksIDI1NCwgOCwgMzQsIDI1MCwgMTMxLCA4LCAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3MywgOCwgCi0gICAgMzQsIDIzNCwgMTgyLCAyMzIsIDE5NiwgMSwgMjUyLCAxOTEsIDIzMiwgMTk2LCAxLCAxOTAsIDIzMiwgMTk2LCAxLCAyMjUsIAotICAgIDE0NywgMjMyLCAxOTYsIDEsIDI0OCwgMjIxLCAyMzIsIDE5NiwgMSwgMjE3LCAxMDUsIDIzMiwgMTk2LCAxLCAyMTYsIDIwOCwgCi0gICAgMjMyLCAxOTYsIDEsIDI0MywgMTM1LCAyMzIsIDE5NiwgMSwgMTc2LCAyMzIsIDE5NiwgMSwgMjM0LCAxMzIsIDIzMiwgMTk2LCAKLSAgICAxLCAyMzUsIDE0MSwgMjMyLCAxOTYsIDEsIDI1MSwgMzMsIDIzMiwgMTk2LCAxLCAyNTAsIDE1NywgMjMyLCAxOTYsIDEsIAotICAgIDI0NiwgMzgsIDIzMiwgMTk2LCAxLCAyMTUsIDE4MywgMjMyLCAxOTYsIDEsIDIxNSwgMTc1LCAyMzIsIDE5NiwgMSwgMTg0LCAKLSAgICAyMzIsIDE5NiwgMSwgMTk3LCAyMzIsIDE5NiwgMSwgMjMzLCAxMzUsIDIzMiwgMTk2LCAxLCAyMDYsIDIzMiwgMTk2LCAxLCAKLSAgICAyMTAsIDgyLCAyMzIsIDE5NiwgMSwgMjEwLCAxMTYsIDIzMiwgMTk2LCAxLCAyMjksIDc3LCAyMzIsIDE5NiwgMSwgMTYyLCAKLSAgICAyMzIsIDE5NiwgMSwgMjExLCAxNjUsIDIzMiwgMTk2LCAxLCAyNDEsIDE4OSwgMjMyLCAxOTYsIDEsIDI0NCwgMTk2LCAyMzIsIAotICAgIDE5NiwgMSwgMjEyLCA2NSwgMjMyLCAxOTYsIDEsIDIyMCwgMTAyLCAyMzIsIDE5NiwgMSwgMTkxLCAyMzIsIDE5NiwgMSwgCi0gICAgMjQyLCAyNDksIDIzMiwgMTk2LCAxLCA2MSwgMjMyLCAxOTYsIDEsIDI1NCwgMjQzLCAyMzIsIDE5NiwgMSwgNzUsIDIzMiwgCi0gICAgMTk2LCAxLCAyNDUsIDU1LCAyMzIsIDE5NiwgMSwgNzMsIDIzMiwgMTk2LCAxLCA3NiwgMjMyLCAxOTYsIDEsIDcwLCAyMzIsIAotICAgIDE5NiwgMSwgMjE0LCAyMTQsIDIzMiwgMTk2LCAxLCAyMTQsIDIwOCwgMjMyLCAxOTYsIDEsIDIyNiwgMjM0LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAyMTYsIDExNywgMjMyLCAxOTYsIDEsIDEzOCwgMjI5LCAyMjksIDIyNSwgMTYsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDI0OSwgNzIsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDI1MSwgMjA1LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAxOTcsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDIzNSwgMTE1LCAyMzIsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDI0OSwgMjE5LCAyMzIsIDE5NiwgMjI0LCAxNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDMsIDI0NSwgMjA5LCAKLSAgICA0MSwgMywgMjQ1LCAyMDUsIDQxLCAzLCAyNDEsIDIyMCwgNDEsIDMsIDIxMiwgMTcsIDQxLCAzLCAyMTIsIDE2LCA0MSwgMywgCi0gICAgMjI1LCAyMTEsIDQxLCAzLCAyNTIsIDEzLCA0MSwgMywgMjUyLCA2NiwgNDEsIDMsIDIzMSwgMTE2LCA0MSwgMywgMjMzLCAKLSAgICAyNDcsIDQxLCAzLCAyMzEsIDYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCAxNDcsIDQxLCAzLCAyMTMsIDI1MCwgNDEsIAotICAgIDMsIDIxNywgMTEsIDQxLCAzLCAyMTYsIDE5NCwgNDEsIDMsIDI0OCwgMTYsIDQxLCAzLCAyNDgsIDEzLCA0MSwgMywgMjMzLCAKLSAgICA1MCwgNDEsIDMsIDIyMywgMTA4LCA0MSwgMywgMjQ4LCA3NywgNDEsIDMsIDIyOSwgMTM5LCA0MSwgMywgMjIxLCAxNzAsIAotICAgIDQxLCAzLCAyMjAsIDYxLCA0MSwgMywgMjEwLCA5MiwgNDEsIDMsIDIxMCwgNzMsIDQxLCAzLCAyNTAsIDE4MiwgNDEsIDMsIAotICAgIDIzNSwgMTI0LCA0MSwgMywgMjI4LCAxNzYsIDQxLCAzLCAyMTEsIDQ0LCA0MSwgMywgMjM0LCAxODEsIDQxLCAzLCAyMjksIAotICAgIDUxLCA0MSwgMywgMjQzLCA1NSwgNDEsIDMsIDIzMSwgODAsIDQxLCAzLCAyMjksIDEwMywgNDEsIDMsIDIyNywgMTU1LCA0MSwgCi0gICAgMywgNzMsIDQxLCAzLCAyMzUsIDI1NSwgNDEsIDMsIDI0MSwgMTgwLCA0MSwgMywgMjQxLCAxNjAsIDQxLCAzLCAyMTEsIAotICAgIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgMjI1LCAxMDgsIDQxLCAzLCAyNTIsIDExLCA0MSwgMywgMjUyLCA2LCA0MSwgCi0gICAgMywgMjMxLCAxMDksIDQxLCAzLCAyMzMsIDI0NCwgNDEsIDMsIDIzMSwgMywgNDEsIDMsIDI0MywgNzEsIDQxLCAzLCAyNDQsIAotICAgIDEyMSwgNDEsIDMsIDIxMywgMTc2LCA0MSwgMywgMjE2LCAxMTcsIDQxLCAzLCAyMTYsIDE3NSwgNDEsIDMsIDI0OCwgOCwgCi0gICAgNDEsIDMsIDI0OCwgMTIsIDQxLCAzLCAyMzIsIDI0MSwgNDEsIDMsIDIyMywgMzUsIDQxLCAzLCAyNDgsIDMsIDQxLCAzLCAKLSAgICAyMjksIDEzMywgNDEsIDMsIDIxOSwgMTkxLCA0MSwgMywgMjIwLCAzMiwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIAotICAgIDY5LCA0MSwgMywgMjUwLCA1MSwgNDEsIDMsIDIzNSwgMTA4LCA0MSwgMywgMjI4LCAxNjksIDQxLCAzLCAyMTEsIDgsIDQxLCAKLSAgICAzLCAyMzQsIDkyLCA0MSwgMywgMjI5LCA0MywgNDEsIDMsIDI0MiwgMjE0LCA0MSwgMywgMjMwLCAyMzAsIDQxLCAzLCAyMjgsIAotICAgIDIzMywgNDEsIDMsIDIyNywgMTQ4LCA0MSwgMywgNjEsIDQxLCAzLCAyNTQsIDEyMywgNDEsIDMsIDIyOSwgNzIsIDQxLCAzLCAKLSAgICAxNjIsIDQxLCAzLCAyNDIsIDE4LCA0MSwgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTAsIDQxLCAzLCAKLSAgICAyNTIsIDE4LCA0MSwgMywgMjUyLCAxOTEsIDQxLCAzLCAyMzEsIDEyNCwgNDEsIDMsIDIzMywgMjUxLCA0MSwgMywgMjMzLCAKLSAgICAyNTAsIDQxLCAzLCAyMzEsIDEwLCA0MSwgMywgMjQzLCA3OSwgNDEsIDMsIDI0NCwgMTk2LCA0MSwgMywgMjE0LCAyNywgNDEsIAotICAgIDMsIDIxNywgMTA1LCA0MSwgMywgMjE2LCAyMDgsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAxNSwgNDEsIDMsIDIzMywgCi0gICAgMTM1LCA0MSwgMywgMjA1LCA0MSwgMywgMjQ4LCAyMjEsIDQxLCAzLCAyMjksIDE0OCwgNDEsIDMsIDIwNiwgNDEsIDMsIAotICAgIDIyMCwgMTAyLCA0MSwgMywgMjEwLCAxMTYsIDQxLCAzLCAyMTAsIDgyLCA0MSwgMywgMjUxLCAzMywgNDEsIDMsIDIzNSwgCi0gICAgMTQxLCA0MSwgMywgMjI4LCAxODUsIDQxLCAzLCAxOTEsIDQxLCAzLCAxNzYsIDQxLCAzLCAyMzQsIDIzNCwgNDEsIDMsIAotICAgIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDEzNSwgNDEsIDMsIDE4NCwgNDEsIDMsIDE5NywgNDEsIDMsIDIyNywgMTY1LCA0MSwgMywgCi0gICAgMjI2LCAxODMsIDQxLCAzLCAyMjYsIDE3OSwgNDEsIDMsIDI0MSwgNTMsIDQxLCAzLCAyMTEsIDIxNSwgNDEsIDMsIDIxMSwgCi0gICAgMjExLCA0MSwgMywgMjI0LCAyNDksIDQxLCAzLCAyNTIsIDksIDQxLCAzLCAyNTEsIDE5MywgNDEsIDMsIDIzMSwgMTA0LCAKLSAgICA0MSwgMywgMjMzLCAyNDIsIDQxLCAzLCAyMzAsIDI1NSwgNDEsIDMsIDI0MywgNjcsIDQxLCAzLCAyNDQsIDM0LCA0MSwgMywgCi0gICAgMjEzLCAxMjcsIDQxLCAzLCAyMTYsIDE3LCA0MSwgMywgMjE2LCAxNTMsIDQxLCAzLCAyNDgsIDYsIDQxLCAzLCAyNDgsIDEwLCAKLSAgICA0MSwgMywgMjMyLCAxMjcsIDQxLCAzLCAyMjIsIDE5NywgNDEsIDMsIDI0NywgMTI1LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAKLSAgICAzLCAyMTksIDQwLCA0MSwgMywgMjIwLCAxLCA0MSwgMywgMjEwLCAyMSwgNDEsIDMsIDIxMCwgNjYsIDQxLCAzLCAyNDksIAotICAgIDE3NCwgNDEsIDMsIDIzNSwgNTksIDQxLCAzLCAyMjgsIDE1OSwgNDEsIDMsIDIxMCwgMjI5LCA0MSwgMywgMjM0LCAxMCwgCi0gICAgNDEsIDMsIDIyOSwgNDEsIDQxLCAzLCAyNDIsIDE2NCwgNDEsIDMsIDIzMCwgMTMyLCA0MSwgMywgMjI4LCA2NCwgNDEsIDMsIAotICAgIDIyNywgMTMyLCA0MSwgMywgNzAsIDQxLCAzLCAyMTQsIDE5MCwgNDEsIDMsIDI0MCwgMjIyLCA0MSwgMywgMjQwLCAyMTIsIAotICAgIDQxLCAzLCAyMTEsIDE5NSwgNDEsIDMsIDIxMSwgMTg5LCA0MSwgMywgMjI0LCAxNTAsIDQxLCAzLCAyNTIsIDgsIDQxLCAzLCAKLSAgICAyNTEsIDEyNSwgNDEsIDMsIDIzMSwgMTAzLCA0MSwgMywgMjMzLCAyNDAsIDQxLCAzLCAyMzAsIDI1NCwgNDEsIDMsIDI0MywgCi0gICAgNjYsIDQxLCAzLCAyNDMsIDIzNCwgNDEsIDMsIDIxMiwgMTE2LCA0MSwgMywgMjE1LCAxMTgsIDQxLCAzLCAyMTYsIDEzNiwgCi0gICAgNDEsIDMsIDI0OCwgNCwgNDEsIDMsIDI0OCwgOSwgNDEsIDMsIDIzMiwgOTgsIDQxLCAzLCAyMjIsIDE0MCwgNDEsIDMsIAotICAgIDI0NiwgNzgsIDQxLCAzLCAyMjksIDExNSwgNDEsIDMsIDIxOCwgODMsIDQxLCAzLCAyMTksIDIyNSwgNDEsIDMsIDIxMCwgCi0gICAgMTMsIDQxLCAzLCAyMTAsIDYyLCA0MSwgMywgMjQ5LCAxMTIsIDQxLCAzLCAyMzUsIDUxLCA0MSwgMywgMjI4LCAxNTUsIDQxLCAKLSAgICAzLCAyMTAsIDIxMiwgNDEsIDMsIDIzMywgMjE3LCA0MSwgMywgMjI5LCA0MCwgNDEsIDMsIDI0MiwgMTEzLCA0MSwgMywgCi0gICAgMjMwLCAxMDIsIDQxLCAzLCAyMjcsIDIzNywgNDEsIDMsIDIyNywgMTI4LCA0MSwgMywgNzYsIDQxLCAzLCAyMjYsIDE5NiwgCi0gICAgNDEsIDMsIDIyOSwgMCwgNDEsIDMsIDI0MSwgNjgsIDQxLCAzLCAyNDEsIDU2LCA0MSwgMywgMjExLCAyMjcsIDQxLCAzLCAKLSAgICAyMTEsIDIxNiwgNDEsIDMsIDIyNSwgMTYsIDQxLCAzLCAyNTIsIDEwLCA0MSwgMywgMjUxLCAyMDUsIDQxLCAzLCAyMzEsIAotICAgIDEwNSwgNDEsIDMsIDIzMywgMjQzLCA0MSwgMywgMjMxLCAxLCA0MSwgMywgMjQzLCA2OSwgNDEsIDMsIDI0MywgNjgsIDQxLCAKLSAgICAzLCAyNDQsIDQzLCA0MSwgMywgMjEzLCAxMzgsIDQxLCAzLCAxMTEsIDQxLCAzLCAyMTYsIDE1NiwgNDEsIDMsIDI0OCwgNywgCi0gICAgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMzIsIDE1NiwgNDEsIDMsIDIyMiwgMjExLCA0MSwgMywgMjQ3LCAxNDUsIDQxLCAzLCAKLSAgICAyMjksIDEyNCwgNDEsIDMsIDIxOSwgNTgsIDQxLCAzLCAyMjAsIDcsIDQxLCAzLCAyMTAsIDIzLCA0MSwgMywgMjEwLCA2NywgCi0gICAgNDEsIDMsIDI0OSwgMjM4LCA0MSwgMywgMjM1LCA2OCwgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyNDQsIDQxLCAzLCAKLSAgICAyMzQsIDI4LCA0MSwgMywgMjI5LCA0MiwgNDEsIDMsIDI0MiwgMTc0LCA0MSwgMywgMjMwLCAxNjEsIDQxLCAzLCAyMjgsIAotICAgIDc0LCA0MSwgMywgMjI3LCAxMzQsIDQxLCAzLCA3NSwgNDEsIDMsIDI0NSwgMTUwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIAotICAgIDI0MSwgMjM4LCA0MSwgMywgMjQxLCAyMDksIDQxLCAzLCAyMTIsIDIyLCA0MSwgMywgMjEyLCAxMiwgNDEsIDMsIDIyNSwgCi0gICAgMjIxLCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDI1MiwgNzUsIDQxLCAzLCAyMzEsIDExNywgNDEsIDMsIDIzMywgMjQ4LCAKLSAgICA0MSwgMywgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDcsIDQxLCAzLCAyNDMsIDc2LCA0MSwgMywgMjQzLCA3NCwgNDEsIDMsIAotICAgIDI0NCwgMTU0LCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIDIyLCA0MSwgMywgMjE2LCAxOTUsIDQxLCAzLCAyNDgsIAotICAgIDE3LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDIzMywgNTgsIDQxLCAzLCAyMjMsIDEyOCwgNDEsIDMsIDI0OCwgOTAsIDQxLCAKLSAgICAzLCAyMjksIDE0MCwgNDEsIDMsIDIyMSwgMTgxLCA0MSwgMywgMjIwLCA2MywgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIAotICAgIDc0LCA0MSwgMywgMjUwLCAxOTAsIDQxLCAzLCAyMzUsIDEyNiwgNDEsIDMsIDIyOCwgMTc4LCA0MSwgMywgMjExLCA0NywgCi0gICAgNDEsIDMsIDIzNCwgMTgyLCA0MSwgMywgMjI5LCA1MiwgNDEsIDMsIDIyOSwgNDgsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCi0gICAgMjQzLCA1MSwgNDEsIDMsIDIzMSwgOTEsIDQxLCAzLCAyMjksIDEwNywgNDEsIDMsIDIyNywgMTU2LCA0MSwgMywgMjI5LCAKLSAgICA3OSwgNDEsIDMsIDIzMywgMjIsIDQxLCAyNDksIDIxOSwgNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDIyNCwgMTMsIAotICAgIDc4LCA0MSwgMywgMjI5LCAxMjMsIDI0NCwgMTk2LCA0MSwgMywgMjI5LCAxMjMsIDE3NiwgNDEsIDMsIDIyOSwgMTIzLCAKLSAgICAyMTksIDQwLCA0MSwgMTYsIDI0NCwgMTQ0LCA0MSwgMTYsIDIzNCwgMTgwLCA0MSwgMTYsIDIxNiwgODEsIDQxLCAxNiwgCi0gICAgMjI4LCAyMDgsIDQxLCAxNiwgMjUyLCAxNDcsIDQxLCAxNiwgMjQ0LCAxOTUsIDQxLCAxNiwgMjE3LCAxMDEsIDQxLCAxNiwgCi0gICAgMjQ4LCAxNzYsIDQxLCAxNiwgMjQ3LCAxMjQsIDQxLCAxNiwgMjMzLCAyMDYsIDQxLCAxNiwgMjE2LCAyMSwgNDEsIDE2LCAKLSAgICAyNDcsIDE0NCwgNDEsIDE2LCAyMzUsIDYwLCA0MSwgMjEsIDIxMCwgODYsIDQxLCAyMSwgMTEwLCA0MSwgMjEsIDEwNSwgNDEsIAotICAgIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE4OSwgNDEsIDIxLCAxOTQsIDQxLCAyMSwgMTk4LCA0MSwgMjEsIDE5NSwgCi0gICAgNDEsIDIxLCAyMDAsIDQxLCAzLCAyMjksIDEyMywgMTg0LCA0MSwgMywgMjI5LCAxMjMsIDI0NywgMTQ1LCAzMywgNiwgMSwgCi0gICAgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAxLCAyNDYsIDM0LCAzMywgNCwgMSwgMjQ2LCAzNCwgMzMsIDYsIAotICAgIDEsIDIyMywgNDksIDI0NiwgMzYsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyNDYsIDM2LCAzMywgNiwgMSwgMjM1LCAxODUsIDMzLCAKLSAgICA0LCAxLCAyMzUsIDE4NSwgMzMsIDYsIDEsIDI0NywgMTYxLCAzMywgNCwgMSwgMjQ3LCAxNjEsIDMzLCA2LCAxLCAyMzAsIAotICAgIDE0MCwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDEzNiwgMjI2LCAKLSAgICAyMDEsIDMzLCA0LCAxLCAyNTEsIDEzNiwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjksIDg3LCAyMTEsIDMxLCAzMywgNCwgMSwgCi0gICAgMjI5LCA4NywgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI1MiwgMTg1LCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAKLSAgICAyOCwgMiwgMjUyLCAxODUsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTgzLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA0OSwgMjEwLCAyMTIsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyMTAsIDIxMiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDQsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDYsIDEsIDI1MCwgMCwgMjMyLCAKLSAgICAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIxNCwgCi0gICAgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIxNCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIAotICAgIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgNiwgMSwgMjIzLCA0OSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAyMjMsIAotICAgIDQ5LCAyMTUsIDE3OCwgMzMsIDYsIDEsIDIxOSwgNTIsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDgsIDkwLCAzMywgCi0gICAgNiwgMSwgMjE5LCA1MiwgMjQ1LCAxNzQsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDUsIDE3NCwgMzMsIDYsIDEsIDIxOSwgNTIsIAotICAgIDI0NSwgMTU5LCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyMzAsIDE0NCwgNzYsIDMzLCA0LCAxLCAKLSAgICAyMzAsIDE0NCwgNzYsIDMzLCA2LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA0LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA2LCAxLCAKLSAgICA1MiwgMjMwLCAxNDQsIDc2LCAzMywgNCwgMSwgNTIsIDIzMCwgMTQ0LCA3NiwgMzMsIDEsIDIzMCwgODYsIDc2LCAzOCwgMzMsIAotICAgIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ4LCAyMzAsIDE5MSwgNTAsIDM4LCAzMywgMjQwLCAyMTEsIDIzMCwgMTkxLCA1MCwgCi0gICAgMzgsIDMzLCAyMTYsIDE0OCwgMjMwLCAxOTEsIDUwLCAyMTksIDkzLCAyNTMsIDIxNiwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgCi0gICAgMjM2LCA2MCwgMzgsIDMzLCAxLCA3MywgMzgsIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNzAsIDM4LCAzMywgMSwgMjQyLCAKLSAgICAzLCA1MCwgMzgsIDMzLCAxLCAyMTEsIDI3LCAzOCwgMzMsIDEsIDIxOSwgNTIsIDUwLCAzOCwgMzMsIDEsIDIyNiwgMjAxLCAKLSAgICAzOCwgMzMsIDIzNCwgMTkyLCAzOCwgMzMsIDIyNSwgMjI3LCAzMywgMjM0LCAxOTIsIDMzLCAyMjUsIDIyNywgMzMsIDYsIDEsIAotICAgIDI0NiwgNDYsIDMzLCA0LCAxLCAyNDYsIDQ2LCAzMywgNiwgMSwgMjQ2LCAyNywgMzMsIDQsIDEsIDI0NiwgMjcsIDMzLCA2LCAKLSAgICAxLCAyMTAsIDUyLCAzMywgNCwgMSwgMjEwLCA1MiwgMzMsIDYsIDEsIDI1MCwgMjA2LCAzMywgNCwgMSwgMjUwLCAyMDYsIAotICAgIDMzLCA2LCAxLCAyNDYsIDI1LCAzMywgNCwgMSwgMjQ2LCAyNSwgMzMsIDYsIDEsIDIxNywgMjMsIDIsIDIzMCwgMjI0LCAKLSAgICAxMDMsIDMzLCA0LCAxLCAyMTcsIDIzLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjE1LCA3OCwgMzMsIDQsIDEsIAotICAgIDIxNSwgNzgsIDMzLCA2LCAxLCAyMTUsIDE2MCwgMzMsIDQsIDEsIDIxNSwgMTYwLCAzMywgNiwgMSwgMjE1LCAxNjQsIDMzLCAKLSAgICA0LCAxLCAyMTUsIDE2NCwgMzMsIDYsIDEsIDIxNywgMjgsIDMzLCA0LCAxLCAyMTcsIDI4LCAzMywgNiwgMSwgMjQwLCAxOTgsIAotICAgIDMzLCA0LCAxLCAyNDAsIDE5OCwgMzMsIDYsIDEsIDIxOSwgMjA2LCAzMywgNCwgMSwgMjE5LCAyMDYsIDM4LCAzMywgMSwgCi0gICAgMjM1LCAxODMsIDc1LCAyMCwgMSwgNjEsIDIwLCAxLCAxNzYsIDIwLCAxLCA3MCwgMjAsIDEsIDIzMywgMjE3LCAyMCwgMSwgCi0gICAgMjQ1LCAyMDksIDIwLCAxLCAyMjMsIDEwOCwgMjAsIDEsIDIxNywgODYsIDIwLCAxLCA3NiwgMjAsIDEsIDIyNywgMTQ4LCAKLSAgICAyMCwgMSwgNzMsIDIwLCAxLCAyMzMsIDEzNSwgMjAsIDEsIDE5MCwgMjAsIDEsIDIyMiwgMjM5LCAyMCwgMSwgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIzMywgNDksIDIwLCAxLCAyMzEsIDc5LCAyMCwgMSwgMjE3LCAxMDEsIDIwLCAxLCAyMjksIDE0NiwgMjAsIDEsIAotICAgIDIyOCwgMTgzLCAyMCwgMSwgMTkzLCAyMCwgMSwgMjE4LCA0LCAyMCwgMSwgMjMwLCAxMDIsIDIwLCAxLCAyMjAsIDI3LCAyMCwgCi0gICAgMSwgMjE5LCAxOTEsIDIwLCAxLCAyMjAsIDM3LCAyMCwgMSwgMjIwLCAxMjMsIDIwLCAxLCAyMzMsIDE1NSwgMjAsIDEsIAotICAgIDIzNCwgMTU2LCAyMCwgMSwgMjI3LCAyMDksIDIwLCAxLCAyMjcsIDIzNywgMjAsIDEsIDIyOCwgMTU0LCAyMCwgMSwgMjEwLCAKLSAgICAyMjYsIDIwLCAxLCAyMTksIDIyNSwgMjAsIDEsIDIxMCwgMTg3LCAyMCwgMSwgMTkxLCAyMCwgMSwgMjI4LCA5LCAyMCwgMSwgCi0gICAgMjM0LCAxNDIsIDIwLCAxLCAyMjUsIDE1MSwgMjAsIDEsIDIyOCwgMTc2LCAyMCwgMSwgMjI3LCAyNDYsIDIwLCAxLCAyMjQsIAotICAgIDE0NCwgMjAsIDEsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAyMTEsIDIwLCAxLCAyNDQsIDE0NywgMjAsIDEsIDIyMiwgMTQwLCAKLSAgICAyMCwgMSwgMjMyLCA5OCwgMjAsIDEsIDIzMCwgMjMwLCAyMCwgMSwgMjI4LCAyMzMsIDIwLCAxLCAyMjMsIDUxLCAyMCwgMSwgCi0gICAgMjIzLCAxNzEsIDIwLCAxLCAyMzQsIDE2NSwgMjAsIDEsIDIyOSwgNywgMjAsIDEsIDIyOSwgNTYsIDIwLCAxLCAyMjksIDc3LCAKLSAgICAyMCwgMSwgMjIwLCA3LCAyMCwgMSwgMjI0LCAxNDcsIDIwLCAxLCAyNDMsIDIzNCwgMjAsIDEsIDI0NCwgMzcsIDIwLCAxLCAKLSAgICAyMTIsIDY1LCAyMCwgMSwgMTk3LCAyMCwgMSwgMjMyLCAyNDEsIDIwLCAxLCAyMjUsIDEwOCwgMjAsIDEsIDIzMiwgMTE5LCAKLSAgICAyMCwgMSwgMjM0LCAyOCwgMjAsIDEsIDIzMSwgMTE0LCAyMCwgMSwgMjIzLCA4MywgMjAsIDEsIDIzMSwgNTgsIDIwLCAxLCAKLSAgICAxODQsIDIwLCAxLCAyMTYsIDExNywgMjAsIDEsIDIzNCwgOTIsIDIwLCAxLCAyMzAsIDE2MSwgMjAsIDEsIDIzMSwgMTIyLCAKLSAgICAyMCwgMSwgMjE2LCAyMzAsIDIwLCAxLCAyMzMsIDI1MSwgMjAsIDEsIDIxNiwgMjQ3LCAyMCwgMSwgMjI3LCAyMzgsIDIwLCAKLSAgICAxLCAyMjEsIDI1MSwgMjAsIDEsIDI0NCwgMTkyLCAyMCwgMSwgMjMzLCAyNTMsIDIwLCAxLCAyMzQsIDI0LCAyMCwgMzgsIAotICAgIDE2NCwgMjM0LCA1LCAyMCwgMzgsIDE2NCwgMjE1LCAxMTAsIDIwLCAyMjgsIDE4MiwgMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMjAsIDI0OSwgMjI2LCAyMCwgMjQ5LCAyMTksIDIwLCAyMjAsIDE1MCwgMjAsIDIyNCwgMTMsIDc4LCA1OCwgMSwgMjUwLCAKLSAgICA5NiwgMTM4LCAyMTAsIDI1NCwgMjI1LCA2MSwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgMjI1LCA2MSwgNTgsIDEsIAotICAgIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyMCwgODQsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIDIyMCwgODQsIAotICAgIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAKLSAgICAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjIyLCAxNDAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIAotICAgIDIxMSwgNzAsIDIyMiwgMTQwLCA1OCwgMSwgMjQ1LCAyMCwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIAotICAgIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDExOCwgCi0gICAgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDIwLCAyNDYsIDExOCwgCi0gICAgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgCi0gICAgMjI1LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjAsIDIzMywgCi0gICAgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAyMzMsIDM5LCAKLSAgICAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDU5LCA2NywgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTUsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAKLSAgICAyMzIsIDEwOCwgNDQsIDI0OSwgMTYxLCAyNTQsIDEwOSwgNTgsIDEsIDIyMywgMTU3LCAxMjAsIDc0LCA1OCwgMSwgMjIzLCAKLSAgICAxNTcsIDEyNCwgNzQsIDU4LCAxLCAyMjMsIDE1NywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMjMsIDE1NywgMjM1LCAxOTMsIAotICAgIDI0NSwgMzEsIDc4LCA1OCwgMSwgMTIxLCAyMzUsIDE5MywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMTgsIDExMSwgMjIsIDEyNSwgCi0gICAgMjE2LCAzMCwgNTgsIDEsIDIxOCwgMTExLCAyMiwgMTIxLCAyMTYsIDMwLCA3LCA2LCAxLCAyNDUsIDE5OSwgMjU0LCAxNzAsIAotICAgIDcsIDQsIDEsIDI0NSwgMTk5LCAyNTQsIDE3MCwgNywgNiwgMSwgMjQ1LCAxOTksIDI1NCwgMTk2LCA3LCA0LCAxLCAyNDUsIAotICAgIDE5OSwgMjU0LCAxOTYsIDcsIDYsIDEsIDI0MSwgMjA3LCA3LCA0LCAxLCAyNDEsIDIwNywgNywgNiwgMSwgMjE1LCA0MCwgNywgCi0gICAgNCwgMSwgMjE1LCA0MCwgNywgNiwgMSwgMjE1LCAyMjksIDcsIDQsIDEsIDIxNSwgMjI5LCA3LCA2LCAxLCAyNDksIDExMCwgCi0gICAgNywgNCwgMSwgMjQ5LCAxMTAsIDcsIDYsIDEsIDI0OSwgMTExLCAyLCAyNDksIDIxOSwgNywgNCwgMSwgMjQ5LCAxMTEsIDIsIAotICAgIDI0OSwgMjE5LCA3LCAxLCA0LCA2LCAyNDUsIDYsIDcsIDEsIDQsIDYsIDIyMiwgOTEsIDcsIDYsIDEsIDI1NSwgNzMsIDcsIAotICAgIDQsIDEsIDI1NSwgNzMsIDcsIDYsIDEsIDI1NCwgNzMsIDcsIDQsIDEsIDI1NCwgNzMsIDcsIDYsIDEsIDI1MywgMTkyLCA3LCAKLSAgICA0LCAxLCAyNTMsIDE5MiwgNywgNiwgMSwgMjUzLCAxNzYsIDcsIDQsIDEsIDI1MywgMTc2LCA3LCA2LCAxLCAyNTMsIDE3NywgCi0gICAgMiwgMjAzLCAxMzAsIDcsIDQsIDEsIDI1MywgMTc3LCAyLCAyMDMsIDEzMCwgNywgNiwgMSwgMjUzLCAxNjcsIDcsIDQsIDEsIAotICAgIDI1MywgMTY3LCA3LCA2LCAxLCAyMjMsIDQ5LCAyNTEsIDY3LCAyLCAyNDcsIDEyMCwgNywgNCwgMSwgMjIzLCA0OSwgMjUxLCAKLSAgICA2NywgMiwgMjQ3LCAxMjAsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjM1LCAyNCwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIxOCwgMTAzLCAyMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyMTgsIDEwMywgCi0gICAgMjIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNCwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNiwgCi0gICAgMSwgMjMzLCAxNDksIDIsIDEyNSwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA0LCAxLCAxNDQsIDIsIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA0LCAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA2LCAxLCAyMjYsIDE4MywgNywgNCwgCi0gICAgMSwgMjI2LCAxODMsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIAotICAgIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyNDQsIDUzLCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjQ0LCA1MywgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMjI5LCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAyMjksIDIxNywgNzcsIDcsIDYsIDEsIDIyNCwgOTcsIDIsIDIxOCwgMTAzLCAKLSAgICAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjI0LCA5NywgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCAKLSAgICA2LCAxLCAyMjQsIDk3LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIyMiwgMTg2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMjIyLCAxODYsIDcsIDYsIDEsIDIyMiwgMTMwLCAKLSAgICAyMjIsIDE4NiwgNywgNCwgMSwgMjIyLCAxMzAsIDIyMiwgMTg2LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIAotICAgIDkxLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAyMTIsIDEwNiwgNywgNCwgMSwgMjEyLCAKLSAgICAxMDYsIDcsIDYsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNCwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MiwgMiwgOTEsIDcsIDQsIDEsIDIxNiwgMTUyLCAyLCA5MSwgNywgNiwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgCi0gICAgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAKLSAgICAzOSwgNywgNiwgMSwgMjEzLCAyNDUsIDcsIDQsIDEsIDIxMywgMjQ1LCA3LCA2LCAxLCAyNDUsIDY1LCA3LCA0LCAxLCAyNDUsIAotICAgIDY1LCA3LCA2LCAxLCAyMzUsIDE3MSwgNywgNCwgMSwgMjM1LCAxNzEsIDcsIDYsIDEsIDI0OSwgMjA3LCA3LCA0LCAxLCAKLSAgICAyNDksIDIwNywgNTgsIDEsIDIxNCwgMTMzLCA3LCA0LCAxLCAyNDYsIDY5LCA3LCA0LCAxLCAyMzIsIDg0LCA3LCA0LCAxLCAKLSAgICAyMzAsIDgwLCA3LCA0LCAxLCAyMjcsIDIwMSwgNywgNCwgMSwgMjIyLCAxMjksIDcsIDEsIDQsIDYsIDIyMiwgMTI5LCA3LCAKLSAgICA0LCAxLCAyMTUsIDEwOCwgNywgNCwgMSwgMjE0LCAxOTcsIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDksIDYwLCA3LCA0LCAxLCAKLSAgICAyMzUsIDIxMywgMjQ5LCA2MCwgNywgNiwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgNywgNCwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgCi0gICAgNywgNiwgMSwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAKLSAgICAxNTYsIDcsIDYsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjEzLCAKLSAgICAyMjIsIDkxLCA3LCA0LCAxLCAyMzUsIDIxMywgMjIyLCA5MSwgNywgNiwgMSwgMjM1LCAyMTMsIDIxNywgMTUyLCA3LCA0LCAKLSAgICAxLCAyMzUsIDIxMywgMjE3LCAxNTIsIDU4LCAxLCAxMjEsIDI1MCwgMzEsIDI1NSwgMTQsIDU4LCAxLCAyNDksIDIyNiwgNTgsIAotICAgIDEsIDIxOSwgMjUxLCAyNDUsIDk4LCA1MCwgNywgNiwgMSwgMjIxLCAyNTUsIDcsIDQsIDEsIDIyMSwgMjU1LCA3LCA2LCAxLCAKLSAgICAyMTUsIDk0LCAyNDIsIDYwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMjQxLCA1MiwgMjIsIDI1MiwgNDEsIDcsIAotICAgIDYsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDI1MSwgCi0gICAgNjcsIDIsIDEzMCwgNywgNCwgMSwgMjUxLCA2NywgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCAKLSAgICA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIAotICAgIDQsIDEsIDIzNSwgMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAKLSAgICAxLCAyMzAsIDI2LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgMSwgCi0gICAgMjIyLCA5MiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDYxLCAyLCAKLSAgICA5MSwgNTgsIDEsIDQsIDI3LCAyMjYsIDIzNCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTkzLCA3LCAyNDUsIDEwMywgMSwgCi0gICAgMjIzLCA0OSwgMjQ1LCA2LCA3LCAyNDUsIDEwMywgMSwgMjIzLCA0OSwgMjI2LCAxMDUsIDcsIDI0NSwgMTAzLCAxLCAyMzUsIAotICAgIDE5MywgMTkzLCA3LCAyNDUsIDEwMywgMSwgMjQwLCAxNTQsIDIzMiwgMTI5LCA3LCAyNDUsIDEwMywgMSwgMjU0LCAyMywgCi0gICAgMTkzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDczLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDUsIDI0NiwgNDgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzAsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzUsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzYsIDIxNywgMjMwLCAyMjksIDIxNCwgNSwgMjQxLCAyNTMsIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjM0LCAyOCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzQsIDEwNSwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAyNDIsIDE3NCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDIsIDIyNCwgMjE3LCAyMzAsIDIyOSwgMjE0LCA1LCAKLSAgICAyNTQsIDc1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OSwgMjM4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI1MCwgODYsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM1LCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzUsIDEwOSwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzMywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzOSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNDgsIDEwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDgsIDExNCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAxMTEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE2LCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ3LCAKLSAgICAxNDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ4LCA3LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyOCwgNzQsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMSwgMjI1LCAxNiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjUsIDEyMSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNTEsIDIwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNTIsIDEwLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDIzMCwgMTYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMjExLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIAotICAgIDIzMiwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMTY1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxOSwgCi0gICAgNTgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQxLCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNjEsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDczLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA3MCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAyNSwgNSwgNzUsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDIyNiwgMTgzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIAotICAgIDIyNSwgMTIsIDIzMSwgMTU4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU3LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDIyNSwgMTIsIDIzMSwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU1LCAyMjgsIDU2LCAKLSAgICAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjQyLCAyNywgCi0gICAgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIAotICAgIDIxOSwgMTE3LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAyMjgsIDU2LCAyMzUsIDI0MCwgCi0gICAgMjQ0LCAyLCAxMzQsIDIxOSwgMTE2LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjI0LCAyMiwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAKLSAgICAyMjUsIDQwLCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyMiwgMTE4LCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyNCwgMjMsIAotICAgIDc4LCAyMjUsIDE0NCwgMSwgMTc2LCAyMjUsIDE0NCwgMSwgMjM0LCAxMzIsIDIyNSwgMTQ0LCAxLCAyNDMsIDEzNSwgMjI1LCAKLSAgICAxNDQsIDEsIDIyOSwgNzcsIDIyNSwgMTQ0LCAxLCAyNTEsIDMzLCAyMjUsIDE0NCwgMSwgMjUwLCAxNTcsIDIyNSwgMTQ0LCAKLSAgICAxLCAyMzUsIDE0MSwgMjI1LCAxNDQsIDEsIDIyNywgMTY1LCAyMjUsIDE0NCwgMSwgMjE3LCAxMDUsIDIyNSwgMTQ0LCAxLCAKLSAgICAyMTYsIDIwOCwgMjI1LCAxNDQsIDEsIDI0OCwgMjIxLCAyMjUsIDE0NCwgMSwgMTk3LCAyMjUsIDE0NCwgMSwgMTkwLCAyMjUsIAotICAgIDE0NCwgMSwgMjI1LCAxNDcsIDIyNSwgMTQ0LCAxLCAyNTIsIDE5MSwgMjI1LCAxNDQsIDEsIDE4NCwgMjI1LCAxNDQsIDEsIAotICAgIDIxNSwgMTgzLCAyMjUsIDE0NCwgMSwgMjE1LCAxNzUsIDIyNSwgMTQ0LCAxLCAyNDYsIDM4LCAyMjUsIDE0NCwgMSwgMjEyLCAKLSAgICA2NSwgMjI1LCAxNDQsIDEsIDIxMCwgODIsIDIyNSwgMTQ0LCAxLCAyMTAsIDExNiwgMjI1LCAxNDQsIDEsIDQsIDYxLCAyMjUsIAotICAgIDE0NCwgMSwgMTkxLCAyMjUsIDE0NCwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgMjMzLCAxMzUsIDIyNSwgMTQ0LCAxLCAyMjAsIAotICAgIDEwMiwgMjI1LCAxNDQsIDEsIDIwNiwgMjI1LCAxNDQsIDEsIDE2MiwgMjI1LCAxNDQsIDEsIDYxLCAyMjUsIDE0NCwgMSwgCi0gICAgNzMsIDIyNSwgMTQ0LCAxLCA3MCwgMjI1LCAxNDQsIDEsIDc1LCAyMjUsIDE0NCwgMSwgNzYsIDIyNSwgMTQ0LCAxLCAyMjQsIAotICAgIDg4LCAyMjUsIDE0NCwgMSwgMjExLCAxNjUsIDIyNSwgMTQ0LCAxLCAyNDQsIDE5NiwgMjI1LCAxNDQsIDEsIDI0MywgMjksIAotICAgIDIyNSwgMTQ0LCAxLCAyNDUsIDIwOSwgMjI1LCAxNDQsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDIyNSwgMTQ0LCAyMTgsIDczLCAKLSAgICAxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTUsIDE1NiwgMjI1LCAxNDQsIDEsIDIxNSwgMTQ0LCAyMjUsIDE0NCwgMSwgMjQ4LCAKLSAgICAxMzUsIDIyNSwgMTQ0LCAxLCAyMjgsIDExMCwgMjI1LCAxNDQsIDEsIDI1NCwgMTQxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTMsIAotICAgIDEzNCwgMjIwLCAxMDIsIDIyNSwgMTQ0LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NCwgMSwgMjUzLCAyMjMsIDI0NCwgCi0gICAgMTk2LCAyMjUsIDE0NCwgMjE4LCA3MywgMSwgMjA1LCAyMjUsIDE0NCwgMjE4LCAyNSwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgCi0gICAgMjUwLCAyNTUsIDIyNSwgMTQ0LCAyMTksIDE1NSwgMjQxLCAyMzYsIDc4LCAyMjUsIDE0NCwgNTIsIDI0MSwgMjM2LCA3OCwgCi0gICAgMjI1LCAxNDQsIDE2NCwgMjIwLCA5NSwgMjI1LCAxNDQsIDE2NCwgNTIsIDIyMCwgOTUsIDE3OSwgNSwgMjU0LCA3NSwgMTc5LCAKLSAgICA1LCAyMTMsIDE0NywgMTc5LCAxLCA2MSwgMTc5LCAxLCAyNTUsIDczLCAxNzksIDEsIDczLCAxNzksIDEsIDIzNiwgMzMsIAotICAgIDE3OSwgMSwgNzAsIDE3OSwgMSwgMjE0LCAxMTgsIDE3OSwgMSwgMTQ5LCAxNTMsIDE3OSwgMSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc5LCAxLCAxNDksIDE1NiwgMTc5LCAxLCAxNDksIDIzMiwgMTg1LCAxNzksIDEsIDc1LCAxNzksIDEsIDI0NSwgMjA5LCAKLSAgICAxNzksIDEsIDI1NCwgMjAxLCAxNzksIDEsIDc2LCAxNzksIDEsIDIyNiwgMTgzLCAxNzksIDEsIDI1MywgMTkyLCAxNzksIDEsIAotICAgIDE3NiwgMTc5LCAxLCAyMzQsIDEzMiwgMTc5LCAxLCAyNDMsIDEzNSwgMTc5LCAxLCAyNDIsIDI0OSwgMTc5LCAxLCAyMjksIAotICAgIDc3LCAxNzksIDEsIDI1MSwgMzMsIDE3OSwgMSwgMjUwLCAxNTcsIDE3OSwgMSwgMjM1LCAxNDEsIDE3OSwgMSwgMjM1LCAKLSAgICAxMTQsIDE3OSwgMSwgMjI3LCAxNjUsIDE3OSwgMSwgMjE1LCAxNTYsIDE3OSwgMSwgMjE1LCAxNDQsIDE3OSwgMSwgMjQ4LCAKLSAgICAxMzUsIDE3OSwgMSwgMjQ4LCAxMTksIDE3OSwgMSwgMjI4LCAxMTAsIDE3OSwgMSwgMjE3LCAxMDUsIDE3OSwgMSwgMjE2LCAKLSAgICAyMDgsIDE3OSwgMSwgMjQ4LCAyMjEsIDE3OSwgMSwgMjQ4LCAyNSwgMTc5LCAxLCAxOTcsIDE3OSwgMSwgMTkwLCAxNzksIDEsIAotICAgIDIyNSwgMTQ3LCAxNzksIDEsIDI1MiwgMTkxLCAxNzksIDEsIDI1MiwgMTgsIDE3OSwgMSwgMTg0LCAxNzksIDEsIDE5MSwgCi0gICAgMTc5LCAxLCAyMDUsIDE3OSwgMSwgMjMzLCAxMzUsIDE3OSwgMSwgMjE0LCAyNywgMTc5LCAxLCAyMjAsIDEwMiwgMTc5LCAxLCAKLSAgICAyMTgsIDIyMywgMTc5LCAxLCAyMDYsIDE3OSwgMSwgMTYyLCAxNzksIDEsIDIzMiwgMTg0LCAxNzksIDExNiwgNSwgMjQyLCAKLSAgICA0NCwgMTc5LCAyNSwgNSwgMjU1LCA3MywgMTc5LCAyNSwgNSwgNzMsIDE3OSwgMjUsIDUsIDIzNiwgMzMsIDE3OSwgMjUsIDUsIAotICAgIDcwLCAxNzksIDI1LCA1LCAyMTQsIDExOCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTMsIDE3OSwgMjUsIDUsIDE0OSwgMjIyLCAKLSAgICAxODAsIDE3OSwgMjUsIDUsIDE0OSwgMTU2LCAxNzksIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzksIDI1LCA1LCA3NSwgCi0gICAgMTc5LCAyNSwgNSwgMjQ1LCAyMDksIDE3OSwgMjUsIDUsIDI1NCwgMjAxLCAxNzksIDI1LCA1LCA3NiwgMTc5LCAyNSwgNSwgCi0gICAgMjI2LCAxODMsIDE3OSwgMjUsIDUsIDI1MywgMTkyLCAxNzksIDUsIDIxMywgMTUyLCAxNzksIDI0OCwgMTc4LCAxNzksIDUyLCAKLSAgICAyNDgsIDE3OCwgMTc5LCAyMSwgMjEwLCA4NiwgMTc5LCAyMSwgMTEwLCAxNzksIDIxLCAxMDUsIDE3OSwgMjEsIDE1OCwgCi0gICAgMTc5LCAyMSwgMTYxLCAxNzksIDIxLCAxODksIDE3OSwgMjEsIDE5NCwgMTc5LCAyMSwgMTk4LCAxNzksIDIxLCAxOTUsIAotICAgIDE3OSwgMjEsIDIwMCwgMzgsIDg0LCAyMSwgMjEwLCA4NiwgMzgsIDg0LCAyMSwgMTEwLCAzOCwgODQsIDIxLCAxMDUsIDM4LCAKLSAgICA4NCwgMjEsIDE1OCwgMzgsIDg0LCAyMSwgMTYxLCAzOCwgODQsIDIxLCAxODksIDM4LCA4NCwgMjEsIDE5NCwgMzgsIDg0LCAKLSAgICAyMSwgMTk4LCAzOCwgODQsIDIxLCAxOTUsIDM4LCA4NCwgMjEsIDIwMCwgMzgsIDg0LCAxLCA2MSwgMzgsIDg0LCAxLCA3MCwgCi0gICAgMzgsIDg0LCAxLCAxNzYsIDM4LCA4NCwgMSwgMTk3LCAzOCwgODQsIDEsIDE5MCwgMzgsIDg0LCAxLCAyMDUsIDM4LCA4NCwgCi0gICAgMSwgMjEzLCAxNzYsIDM4LCA4NCwgNSwgMjUzLCAxNzUsIDg0LCA1LCAyMTksIDE3LCAyNTAsIDI1NSwgODQsIDUsIDI1MSwgCi0gICAgMCwgMjEzLCAxNTIsIDg0LCA1LCA1MiwgMjUxLCAwLCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgMCwgMTA1LCA4NCwgNSwgMjUxLCAKLSAgICAwLCAxNTgsIDg0LCA1LCAyNTEsIDAsIDI1MywgMTc1LCA4NCwgNSwgMjI0LCAxMjQsIDg0LCAyNDMsIDEwMCwgMjQ0LCAxMDMsIAotICAgIDg0LCAyNTAsIDIzOCwgODQsIDI0MSwgMjMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAyMTAsIDg2LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDIxLCAxMTAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgCi0gICAgMTU4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxNjEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE4OSwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAyMSwgMTk0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxOTgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIAotICAgIDE5NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMjAwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE3NiwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCAyMzQsIDEzMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDMsIDEzNSwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAxLCAyMjksIDc3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIwNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjAsIAotICAgIDEwMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTAsIDExNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjcsIDE2NSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTcsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDAsIDIyNiwgMjM0LCAKLSAgICAxODgsIDIzMiwgMjQyLCAxLCAxOTcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTkwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIyNSwgMTQ3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE4NCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDgsIDIyMSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNTIsIDE5MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMDUsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgMTkxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIzMywgMTM1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIxMiwgNjUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE2LCAyMDgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTYyLCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNCwgMjcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjUxLCAzMywgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCA2MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDIzNCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICA3MywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDE4MywgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgMjE0LCAyMTQsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3MCwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAyNSwgMjQ1LCAyMDksIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgCi0gICAgMjI1LCAzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIDI1MSwgMTIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAyNTEsIAotICAgIDEzLCAyMjUsIDMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDUsIDI0OSwgNzcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgNSwgMjE5LCAKLSAgICAxOTksIDIyMywgOTMsIDEsIDE3NiwgMjIzLCA5MywgMSwgMjQzLCAxMzUsIDIyMywgOTMsIDEsIDIyOSwgNzcsIDIyMywgOTMsIAotICAgIDEsIDIxNywgMTA1LCAyMjMsIDkzLCAxLCAyNDgsIDIyMSwgMjIzLCA5MywgMSwgMTk3LCAyMjMsIDkzLCAxLCAxOTAsIDIyMywgCi0gICAgOTMsIDEsIDI1MiwgMTkxLCAyMjMsIDkzLCAxLCAxODQsIDIyMywgOTMsIDEsIDI1MSwgMzMsIDIyMywgOTMsIDEsIDIzNSwgCi0gICAgMTQxLCAyMjMsIDkzLCAxLCAyMjcsIDE2NSwgMjIzLCA5MywgMSwgMjA2LCAyMjMsIDkzLCAxLCAyMDUsIDIyMywgOTMsIDEsIAotICAgIDIzMywgMTM1LCAyMjMsIDkzLCAxLCAxOTEsIDIyMywgOTMsIDEsIDIxMiwgNjUsIDIyMywgOTMsIDEsIDE2MiwgMjIzLCA5MywgCi0gICAgMSwgMjMxLCAxMjQsIDIyMywgOTMsIDEsIDIyOSwgNTYsIDIyMywgOTMsIDEsIDIyOSwgMTQ4LCAyMjMsIDkzLCAxLCAyMjcsIAotICAgIDEzNSwgMjIzLCA5MywgMSwgNjEsIDIyMywgOTMsIDI1LCA1LCA3MywgMjIzLCA5MywgMjUsIDUsIDcwLCAyMjMsIDkzLCAyNSwgCi0gICAgNSwgNzUsIDIyMywgOTMsIDI1LCA1LCAyNTQsIDIwMSwgMjIzLCA5MywgMjUsIDUsIDc2LCAyMjMsIDkzLCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDIyMywgOTMsIDI1LCA1LCAyNDUsIDU1LCAyMjMsIDkzLCAyNSwgNSwgMjQ1LCAyMzMsIDIyMywgOTMsIDExNiwgNSwgCi0gICAgMjI5LCA3OSwgMjIzLCA5MywgMTE2LCA1LCAyMzAsIDI1LCAyMjMsIDkzLCAxMTYsIDUsIDE1MywgMjIzLCA5MywgMTE2LCA1LCAKLSAgICAyNDIsIDYwLCAyMjMsIDkzLCAyMTMsIDE1MiwgMjIzLCA5MywgMjIxLCAxNzMsIDc4LCAyNCwgMTAwLCAyMTYsIDk3LCAyNCwgCi0gICAgMTAwLCAyMTYsIDk2LCAyNCwgMTAwLCAyMTYsIDk0LCAyNCwgMTAwLCAyMTYsIDk5LCAyNCwgMTAwLCAyMjMsIDIxLCAyNCwgCi0gICAgMTAwLCAyMjMsIDUsIDI0LCAxMDAsIDIyMywgMCwgMjQsIDEwMCwgMjIzLCAyLCAyNCwgMTAwLCAyMjMsIDE4LCAyNCwgMTAwLCAKLSAgICAyMjMsIDExLCAyNCwgMTAwLCAyMjMsIDQsIDI0LCAxMDAsIDIyMywgMjMsIDI0LCAxMDAsIDIyMywgNiwgMjQsIDEwMCwgCi0gICAgMjIzLCAyNSwgMjQsIDEwMCwgMjIzLCAyMiwgMjQsIDEwMCwgMjMwLCAyMTMsIDI0LCAxMDAsIDIzMCwgMjA0LCAyNCwgMTAwLCAKLSAgICAyMzAsIDIwNywgMjQsIDEwMCwgMjI1LCA4MCwgMjQsIDEwMCwgMjI1LCA5MSwgMjQsIDEwMCwgMjI1LCA5MiwgMjQsIDEwMCwgCi0gICAgMjE4LCAyMDcsIDI0LCAxMDAsIDIzNiwgNDYsIDI0LCAxMDAsIDIzNiwgNTMsIDI0LCAxMDAsIDIxOCwgMjE4LCAyNCwgMTAwLCAKLSAgICAyMTgsIDIwNSwgMjQsIDEwMCwgMjI1LCAxMzAsIDI0LCAxMDAsIDI0MSwgMTY3LCAyNCwgMTAwLCAyMTgsIDIwMiwgMTU1LCAKLSAgICA1LCAyMjYsIDI3LCAxNTUsIDUsIDI1MCwgMTg3LCAxNTUsIDUsIDIzMywgNjYsIDE1NSwgNSwgMjExLCAyNDMsIDE1NSwgMSwgCi0gICAgNjEsIDE1NSwgMSwgMjQwLCAxNTQsIDIzNCwgMTkxLCAxNTUsIDEsIDczLCAxNTUsIDEsIDIzNiwgMzMsIDE1NSwgMSwgNzAsIAotICAgIDE1NSwgMSwgMjI2LCA5MCwgMjUwLCAxNjMsIDE1NSwgMSwgMjI5LCA3OCwgMjMzLCAyOCwgMTU1LCAxLCAyMjksIDc4LCAKLSAgICAyMzMsIDI5LCAyMjMsIDE0MiwgMTU1LCAxLCA3NSwgMTU1LCAxLCAyNTQsIDIwMSwgMTU1LCAxLCA3NiwgMTU1LCAxLCAxNzYsIAotICAgIDE1NSwgMSwgMjM1LCAxMywgMjIxLCAyMjgsIDE1NSwgMSwgMjM1LCAxMywgMjMwLCA2NiwgMTU1LCAxLCAyNDMsIDEzNSwgCi0gICAgMTU1LCAxLCAyNDMsIDEzNiwgMjMwLCA2NiwgMTU1LCAxLCAyMjksIDc3LCAxNTUsIDEsIDI1MSwgMzMsIDE1NSwgMSwgMjUxLCAKLSAgICAzNCwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIDE0MSwgMTU1LCAxLCAyMjcsIDE2NiwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIAotICAgIDE0MiwgMjMxLCAyMDcsIDE1NSwgMSwgMjI3LCAxNjUsIDE1NSwgMSwgMjE1LCAxNTYsIDE1NSwgMSwgMjE1LCAxNTcsIDIzMSwgCi0gICAgMjA3LCAxNTUsIDEsIDI0OCwgMTM1LCAxNTUsIDEsIDI0OCwgMTM2LCAyMzEsIDIwNywgMTU1LCAxLCAyMjksIDIyOSwgMjMwLCAKLSAgICA2NiwgMTU1LCAxLCAyMTcsIDEwNSwgMTU1LCAxLCAyMTcsIDEwNiwgMjMwLCA2NiwgMTU1LCAxLCAyNDgsIDIyMSwgMTU1LCAKLSAgICAxLCAyNDgsIDIyMiwgMjMxLCAyMDcsIDE1NSwgMSwgMTk3LCAxNTUsIDEsIDE5MCwgMTU1LCAxLCAyMjYsIDkwLCAyMzAsIAotICAgIDY2LCAxNTUsIDEsIDI1MiwgMTkxLCAxNTUsIDEsIDI1MiwgMTkyLCAyMzAsIDY2LCAxNTUsIDEsIDE4NCwgMTU1LCAxLCAKLSAgICAxOTEsIDE1NSwgMSwgMjA1LCAxNTUsIDEsIDIyMywgMTg4LCAyNTQsIDIxMCwgMTU1LCAxLCAyMzMsIDEzNSwgMTU1LCAxLCAKLSAgICAyMTIsIDY1LCAxNTUsIDEsIDIyMiwgMzQsIDIzMCwgNjYsIDE1NSwgMSwgMjIyLCAzNCwgMjMxLCAyMDcsIDE1NSwgMSwgCi0gICAgMjA2LCAxNTUsIDEsIDE2MiwgMTU1LCA1LCAyNTAsIDE4OCwgMjE2LCAyNTAsIDE1NSwgMjUsIDUsIDIxNywgNDcsIDE1NSwgCi0gICAgMjUsIDUsIDIxNiwgMzUsIDE1NSwgMjUsIDUsIDIxMSwgMTkwLCAxNTUsIDI1LCA1LCAyMTEsIDE5MSwgMjMxLCA2OSwgMTU1LCAKLSAgICAyNSwgNSwgMjE4LCA0NywgMTU1LCAyNSwgNSwgMjE4LCA0OCwgMjMxLCA1NywgMTU1LCAyNSwgNSwgMjE3LCA2NSwgMTU1LCAKLSAgICAyNSwgNSwgMjQ3LCAxOTQsIDIzMCwgNjUsIDE1NSwgMjUsIDUsIDIyNSwgMTg0LCAxNTUsIDExNiwgNSwgMjM0LCAxNTgsIAotICAgIDE1NSwgMTE2LCA1LCAyMjUsIDE5NiwgMTU1LCAxMTYsIDUsIDI1MSwgMTksIDE1NSwgMjI2LCA0MCwgMTU1LCA0MywgMjIzLCAKLSAgICA2OSwgMTU1LCA0NCwgMjIzLCA2OSwgMTU1LCAyMjYsIDc5LCAyNTQsIDExNywgMTU1LCAyMjYsIDc5LCAyMzEsIDIyNCwgCi0gICAgMTU1LCAyMjYsIDc5LCAyMzIsIDg4LCAxNTUsIDIyNiwgNzksIDIxMSwgMjM4LCAxNTUsIDIyNiwgNzksIDIyNiwgNDEsIAotICAgIDE1NSwgMjI2LCA3OSwgMjMyLCAyMDUsIDE1NSwgMjI2LCA3OSwgMjMyLCA4MiwgMTU1LCAyMjYsIDc5LCAyNTQsIDI0OSwgCi0gICAgMTU1LCAyMjYsIDc5LCAyNTQsIDI1MCwgMjU0LCAyNDksIDE1NSwgMjI2LCA3OSwgMjI1LCA1MSwgMTU1LCAyMTUsIDk0LCAKLSAgICAyMjYsIDc5LCAyMjUsIDUxLCAxNTUsIDIyNiwgMzYsIDE1NSwgMjEsIDIxMCwgODYsIDE1NSwgMjEsIDExMCwgMTU1LCAyMSwgCi0gICAgMTA1LCAxNTUsIDIxLCAxNTgsIDE1NSwgMjEsIDE2MSwgMTU1LCAyMSwgMTg5LCAxNTUsIDIxLCAxOTQsIDE1NSwgMjEsIAotICAgIDE5OCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAyMDAsIDE1NSwgMjI2LCA3OSwgMjE2LCA2OSwgMjE1LCAxMDYsIDE1NSwgCi0gICAgMjI2LCA3OSwgMjM1LCAxNjcsIDE3MiwgMSwgNjEsIDE3MiwgMSwgNzMsIDE3MiwgMSwgNzAsIDE3MiwgMSwgNzUsIDE3MiwgCi0gICAgMSwgMjU0LCAyMDEsIDE3MiwgMSwgNzYsIDE3MiwgMSwgMTc2LCAxNzIsIDEsIDIzNCwgMTMyLCAxNzIsIDEsIDI0MywgMTM1LCAKLSAgICAxNzIsIDEsIDI0MiwgMjQ5LCAxNzIsIDEsIDIyOCwgMjQ1LCAxNzIsIDEsIDIyOSwgNzcsIDE3MiwgMSwgMjUwLCAxNTcsIAotICAgIDE3MiwgMSwgMjUwLCAxMTIsIDE3MiwgMSwgMjM1LCAxNDEsIDE3MiwgMSwgMjM1LCAxMTQsIDE3MiwgMSwgMjI4LCAyMzUsIAotICAgIDE3MiwgMSwgMjI4LCAyMzcsIDE3MiwgMSwgMjI4LCAyMzYsIDE3MiwgMSwgMjE3LCAxMDUsIDE3MiwgMSwgMjE2LCAyMDgsIAotICAgIDE3MiwgMSwgMjQ4LCAyMjEsIDE3MiwgMSwgMjQ4LCAyNSwgMTcyLCAxLCAyMjcsIDIwNywgMTcyLCAxLCAxOTcsIDE3MiwgMSwgCi0gICAgMjQ4LCAxMzUsIDE3MiwgMSwgMTkwLCAxNzIsIDEsIDIyNCwgMjIwLCAxNzIsIDEsIDIyNSwgMTQ3LCAxNzIsIDEsIDI1MiwgCi0gICAgMTkxLCAxNzIsIDEsIDI1MiwgMTgsIDE3MiwgMSwgMjMwLCA5NSwgMTcyLCAxLCAxODQsIDE3MiwgMSwgMjUyLCAxMTEsIAotICAgIDE3MiwgMSwgMTkxLCAxNzIsIDEsIDIwNSwgMTcyLCAxLCAyMzMsIDEzNSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgCi0gICAgMjIzLCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIDE3MiwgMjUsIDUsIDI1NSwgNzMsIDE3MiwgMjUsIDUsIDczLCAxNzIsIAotICAgIDI1LCA1LCAyMzYsIDMzLCAxNzIsIDI1LCA1LCAyNDUsIDE5NSwgMTcyLCAyNSwgNSwgNzAsIDE3MiwgMjUsIDUsIDIyNiwgCi0gICAgMjM0LCAxNzIsIDI1LCA1LCA3NiwgMTcyLCAyNSwgNSwgMjU0LCAyMDEsIDE3MiwgMjUsIDUsIDI1MywgMTkyLCAxNzIsIDI1LCAKLSAgICA1LCAyMTQsIDIxNCwgMTcyLCAxMTYsIDUsIDE5MSwgMTcyLCAxMTYsIDUsIDIwNSwgMTcyLCAxMTYsIDUsIDIzMywgMTM1LCAKLSAgICAxNzIsIDExNiwgNSwgMjEyLCA2NSwgMTcyLCAxLCA0MCwgMjM1LCAyMywgMTcyLCAxLCA0MCwgMjQzLCAyMDIsIDE3MiwgMSwgCi0gICAgNDAsIDIyOSwgNzksIDE3MiwgMTE2LCA1LCA0MCwgMjI5LCA3OSwgMTcyLCAxLCA0MCwgMjUwLCAxNTgsIDE3MiwgMSwgNDAsIAotICAgIDIxNywgMTUyLCAxNzIsIDEsIDQwLCAyMzAsIDI1LCAxNzIsIDEsIDQwLCAyMjYsIDEwNSwgMTcyLCAxLCA0MCwgMjExLCAKLSAgICAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyNiwgMTcyLCAxMTYsIDUsIAotICAgIDQwLCAxOTMsIDE3MiwgMTE2LCA1LCA0MCwgMjQyLCA2MCwgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTEwLCAxNzIsIAotICAgIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAyMSwgMTYxLCAxNzIsIDIxLCAxODksIDE3MiwgMjEsIDE5NCwgMTcyLCAyMSwgCi0gICAgMTk4LCAxNzIsIDIxLCAxOTUsIDE3MiwgMjEsIDIwMCwgMTcyLCAyMjQsIDE0MSwgMjE4LCAyNTEsIDE3MiwgMjI0LCAxNDEsIAotICAgIDI0OCwgMTc4LCAxNzIsIDIyNCwgMTQxLCA1MiwgMjQ4LCAxNzgsIDE3MiwgMjI0LCAxNDEsIDIxNSwgMjExLCAyNDgsIDE3OCwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyNDMsIDEzNSwgNjgsIDEsIDIzNCwgMTI2LCAyNTEsIDMzLCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI1MCwgMTU3LCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTQxLCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTE0LCA2OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyNywgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTU2LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTM1LCA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTE5LCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI0OCwgMjUsIDY4LCAxLCAyMzQsIDEyNiwgMTk3LCA2OCwgMSwgMjM0LCAxMjYsIDIwNiwgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAxNjIsIDY4LCAxLCAyMzQsIDEyNiwgMjQxLCAxODksIDY4LCAxLCAyMzQsIDEyNiwgMjQ0LCAxOTYsIDY4LCA1OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyMywgMTA5LCA2OCwgMSwgMjM0LCAxMjYsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxMCwgMTE2LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDIwNSwgNjgsIDIzMiwgMTQ1LCAyMzQsIDEyNiwgMjI2LCAyNTMsIDY4LCAyMzIsIDE0NSwgCi0gICAgMjM0LCAxMjYsIDIyNCwgNDMsIDY4LCAyMzIsIDE0NSwgMjM0LCAxMjYsIDI0MSwgMTIxLCA2OCwgMTYsIDI1NCwgMTkwLCAKLSAgICAyNDUsIDMwLCA2OCwgMTYsIDI1NCwgMTkwLCAxMTAsIDY4LCAxNiwgMjU0LCAxOTAsIDEwNSwgNjgsIDEsIDI1NCwgMTkwLCAKLSAgICAyMDUsIDY4LCA1LCAyMjYsIDIzLCAyMzQsIDIxMywgMjE2LCAzMCwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDI4LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIzNCwgMjgsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMDUsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAKLSAgICAxMDUsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyNSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyMSwgMjI5LCA0LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyOSwgNCwgMzksIDIwOCwgMSwgMTIxLCAyNDksIDIzOCwgMzksIDIwOCwgMSwgMTI1LCAyNDksIAotICAgIDIzOCwgMzksIDIwOCwgMSwgMTIxLCAyNTAsIDg2LCAzOSwgMjA4LCAxLCAxMjUsIDI1MCwgODYsIDM5LCAyMDgsIDEsIDEyMSwgCi0gICAgMjE5LCA1OCwgMzksIDIwOCwgMSwgMTI1LCAyMTksIDU4LCAzOSwgMjA4LCAxLCAxMjEsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAxMjEsIDI0NywgMTQ1LCAzOSwgMjA4LCAxLCAxMjUsIDI0NywgMTQ1LCAzOSwgCi0gICAgMjA4LCAxLCAxMjEsIDExMSwgMzksIDIwOCwgMSwgMTI1LCAxMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjE2LCAxNTYsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjE2LCAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjI4LCA3NCwgMzksIDIwOCwgMSwgMTI1LCAyMjgsIAotICAgIDc0LCAzOSwgMjA4LCAxLCAxMjEsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAxMjUsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDIyNSwgMTYsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxNiwgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDEyMSwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjUsIDEyMSwgMzksIDIwOCwgMSwgMTIxLCAyNDQsIDQzLCAzOSwgMjA4LCAxLCAxMjUsIDI0NCwgCi0gICAgNDMsIDM5LCAyMDgsIDEsIDEyMSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIDEyNSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyNSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyMSwgMjIyLCAyMTEsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjIyLCAyMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjMyLCAxNTYsIDM5LCAyMDgsIDEsIDEyNSwgMjMyLCAKLSAgICAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQxLCA2OCwgMzksIDIwOCwgMSwgMTI1LCAyNDEsIDY4LCAzOSwgMjA4LCAxLCAxMjEsIDc2LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDc2LCAzOSwgMjA4LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCAyMDgsIDI1LCAyNTUsIDczLCAzOSwgMjA4LCAyNSwgCi0gICAgNzMsIDM5LCAyMDgsIDI1LCAyMTQsIDIxNCwgMzksIDIwOCwgMjUsIDcwLCAzOSwgMjA4LCAyNSwgNzUsIDM5LCAyMDgsIDI1LCAKLSAgICA3NiwgMzksIDIwOCwgMjMxLCAyMDQsIDIzNCwgMTA4LCAzOSwgMjA4LCAyNSwgMjQwLCAxMTksIDM5LCAyMDgsIDI1LCAyMTQsIAotICAgIDIxMywgMzksIDIwOCwgMjUsIDIxNCwgMjI5LCAzOSwgMjA4LCAyNSwgMjUzLCAxOTAsIDM5LCAyMDgsIDI1LCAyNTMsIDE2NywgCi0gICAgMzksIDIwOCwgMjUsIDI1NCwgMTIzLCAzOSwgMjA4LCAyNSwgMjU0LCAxMzYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIAotICAgIDI0NSwgMTgwLCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMjcsIDIwNiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjE2LCAKLSAgICAxNTYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIxOSwgNDIsIDM5LCAyMDgsIDE2LCAyMzQsIDEzLCAzOSwgMjA4LCAxNiwgCi0gICAgMjI3LCAyMDYsIDM5LCAyMDgsIDE2LCAyMjEsIDI1MywgMzksIDIwOCwgMTYsIDI0MSwgNjksIDI0MSwgNjQsIDM5LCAyMDgsIAotICAgIDE2LCAyMzQsIDIyLCAyMzQsIDIxLCAxODYsIDE4NSwgMSwgNzUsIDE4NiwgMTg1LCAxLCA3NiwgMTg2LCAxODUsIDEsIDI1MCwgCi0gICAgMTU3LCAxODYsIDE4NSwgMSwgMjI3LCAxNjUsIDE4NiwgMTg1LCAxLCAyMTUsIDE1NiwgMTg2LCAxODUsIDEsIDIxNSwgMTQ0LCAKLSAgICAxODYsIDE4NSwgMSwgMjQ4LCAxMzUsIDE4NiwgMTg1LCAxLCAyNDgsIDExOSwgMTg2LCAxODUsIDEsIDIyOCwgMTEwLCAxODYsIAotICAgIDE4NSwgMSwgMjIwLCAxMDIsIDE4NiwgMTg1LCAxLCAyMTgsIDIyMywgMTg2LCAxODUsIDI1LCA1LCAyMzYsIDMzLCAxODYsIAotICAgIDE4NSwgMjUsIDUsIDIxNCwgMTE4LCAxODYsIDE4NSwgMjUsIDUsIDI1NSwgMzcsIDE4NiwgMTg1LCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDE4NiwgMTg1LCAyNSwgNSwgMjU1LCAzMCwgMTg2LCAxODUsIDI1MCwgMTI1LCAxODYsIDE4NSwgMjU0LCAyMDYsIAotICAgIDIzNCwgOTgsIDE4NiwgMTg1LCAyNTQsIDEwMywgMTg2LCAxODUsIDMsIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjExLCAKLSAgICAyMDksIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjUsIDUsIDIxMywgMTQ3LCAxODYsIDE4NSwgMjEzLCAxNTIsIDI5LCAzLCAKLSAgICAyMTUsIDEzNywgMjksIDMsIDIxNSwgMTQwLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MSwgMjksIDMsIDIxNSwgCi0gICAgMTQyLCAyOSwgMywgMjE1LCAxMzksIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgMTE1LCAyOSwgMywgMjQ4LCAxMTgsIAotICAgIDI5LCAzLCAyNDgsIDExNiwgMjksIDMsIDI0OCwgMTE3LCAyOSwgMywgMjQ4LCAxMTQsIDI5LCAzLCAyNDYsIDI4LCAyOSwgMywgCi0gICAgMjQ2LCAzMSwgMjksIDMsIDI0NiwgMzcsIDI5LCAzLCAyNDYsIDM1LCAyOSwgMywgMjQ2LCAzNiwgMjksIDMsIDI0NiwgMjksIAotICAgIDI5LCAzLCAyNTAsIDIwNCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjUwLCAyMDAsIDI5LCAzLCAyNTAsIDIwMywgMjksIAotICAgIDMsIDI1MCwgMjAxLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDE5OSwgMjksIDMsIDI1MiwgMTExLCAyOSwgMywgCi0gICAgMjUyLCA5MCwgMjksIDMsIDI1MiwgMTAyLCAyOSwgMywgMjUyLCAxMTAsIDI5LCAzLCAyNTIsIDEwNSwgMjksIDMsIDI1MiwgCi0gICAgMTA2LCAyOSwgMywgMjUyLCA5NCwgMTg2LCAxODUsIDEsIDIzNCwgMTksIDE4NiwgMTg1LCAxLCAyMjEsIDI1MywgMTg2LCAKLSAgICAxODUsIDEsIDIzMywgMTA5LCAxODYsIDE4NSwgMSwgMjMwLCAxNzIsIDE4NiwgMTg1LCAxLCAxOTAsIDE4NiwgMTg1LCAxLCAKLSAgICAxOTcsIDE4NiwgMTg1LCAxLCAyNTAsIDEwMiwgMTg2LCAxODUsIDEsIDIxNiwgOTAsIDE4NiwgMTg1LCAxLCAyMzQsIDEwMSwgCi0gICAgMTg2LCAxODUsIDEsIDIyOCwgMjUwLCAxODYsIDE4NSwgMSwgMjE2LCAxNTAsIDE4NiwgMTg1LCAxLCAyMTIsIDYwLCAxODYsIAotICAgIDE4NSwgMSwgMjExLCA2OSwgMTg2LCAxODUsIDEsIDI0MCwgMjE2LCAxODYsIDE4NSwgMSwgMjE0LCAxOTAsIDE4NiwgMTg1LCAKLSAgICAxLCA3MywgMTg2LCAxODUsIDEsIDIyNSwgMTQyLCAxODYsIDE4NSwgMSwgMjUzLCAyMDIsIDE4NiwgMTg1LCAxLCAyNDIsIAotICAgIDE2NywgMTg2LCAxODUsIDEsIDIzNSwgMTEyLCAxODYsIDE4NSwgMSwgMjIzLCAxNjYsIDE4NiwgMTg1LCAxLCAyNTIsIDE5MSwgCi0gICAgMTg2LCAxODUsIDEsIDIzNSwgMTAwLCAxODYsIDE4NSwgMSwgMjQ3LCAyMTksIDE4NiwgMTg1LCAxLCAyNDIsIDIyMSwgMTg2LCAKLSAgICAxODUsIDEsIDI0OCwgNSwgMTg2LCAxODUsIDEsIDI1MiwgMTYsIDE4NiwgMTg1LCAxLCAyMzQsIDIwLCAyMzIsIDEyOCwgCi0gICAgMTg2LCAxODUsIDEsIDIzMywgMTEwLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIzMCwgMTczLCAyMzIsIDEyOCwgMTg2LCAKLSAgICAxODUsIDEsIDIyNiwgOTAsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjI5LCAyMjksIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgCi0gICAgMjE2LCA5MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMjgsIDI1MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyNDAsIAotICAgIDE1NCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAyNSwgNSwgMjI2LCAxOTUsIDE4NiwgMTg1LCAyNSwgNSwgMjM1LCAyNTMsIDE4NiwgCi0gICAgMTg1LCAyNSwgNSwgMjU0LCAxMjIsIDE4NiwgMTg1LCAyNSwgNSwgMjExLCAzOCwgMTg2LCAxODUsIDI1LCA1LCAyMTksIDMyLCAKLSAgICAxODYsIDE4NSwgMjUsIDUsIDIxNCwgMTg3LCAxODYsIDE4NSwgMjUsIDUsIDI1MCwgMTIzLCAxODYsIDE4NSwgMjUsIDUsIAotICAgIDIyNywgMTkxLCAxODYsIDE4NSwgMjUwLCAxMjQsIDE4NiwgMTg1LCAyMzIsIDg1LCAyMzUsIDE1MCwgMTg2LCAxODUsIDI1NCwgCi0gICAgNDYsIDIzNSwgMTUwLCAxODYsIDE4NSwgMjEsIDIxMCwgODYsIDE4NiwgMTg1LCAyMSwgMTEwLCAxODYsIDE4NSwgMjEsIAotICAgIDEwNSwgMTg2LCAxODUsIDIxLCAxNTgsIDE4NiwgMTg1LCAyMSwgMTYxLCAxODYsIDE4NSwgMjEsIDE4OSwgMTg2LCAxODUsIAotICAgIDIxLCAxOTQsIDE4NiwgMTg1LCAyMSwgMTk4LCAxODYsIDE4NSwgMjEsIDE5NSwgMTg2LCAxODUsIDIxLCAyMDAsIDI0LCAKLSAgICAxNDMsIDIyNywgNzcsIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIAotICAgIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgCi0gICAgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCA1NCwgMjQsIDE0MywgMjQ1LCA1MiwgMjQsIDE0MywgMjQ1LCA1MywgMjQsIAotICAgIDE0MywgMjQ1LCA1MCwgMjQsIDE0MywgMjQwLCAxNDQsIDI0LCAxNDMsIDI0MCwgMTQzLCAyNCwgMTQzLCAyNDAsIDE0MSwgCi0gICAgMjQsIDE0MywgMjQwLCAxNDIsIDI0LCAxNDMsIDI0MCwgMTQ3LCAyNCwgMTQzLCAyNDAsIDE0MCwgMjQsIDE0MywgMjQwLCAKLSAgICAxMzksIDI0LCAxNDMsIDI0MCwgMTQ5LCAyNCwgMTQzLCAyNTQsIDMzLCAyNCwgMTQzLCAyNTQsIDMyLCAyNCwgOTAsIDIyOCwgCi0gICAgMjE5LCAyNCwgOTAsIDIyOCwgMjI1LCAyNCwgOTAsIDIxOCwgMjA0LCAyNCwgOTAsIDIxOCwgMjAzLCAyNCwgOTAsIDIxNiwgCi0gICAgOTYsIDI0LCA5MCwgMjE2LCA5NCwgMjQsIDkwLCAyMTYsIDkzLCAyNCwgOTAsIDIxNiwgOTksIDI0LCA5MCwgMjE2LCAxMDAsIAotICAgIDI0LCA5MCwgMjE2LCA5MiwgMjQsIDkwLCAyMjMsIDUsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMTgsIDIxMCwgMjQsIAotICAgIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgNywgMjQsIDkwLCAyMjMsIDksIDI0LCA5MCwgMjIyLCAyNTIsIDI0LCA5MCwgCi0gICAgMjIyLCAyNTMsIDI0LCA5MCwgMjM0LCAyMTgsIDI0LCA5MCwgMjMwLCAyMTIsIDI0LCA5MCwgMjMwLCAyMDYsIDI0LCA5MCwgCi0gICAgMjE4LCAyMTQsIDI0LCA5MCwgMjMwLCAyMDksIDI0LCA5MCwgMjMwLCAyMTUsIDI0LCA5MCwgMjI1LCA3NiwgMjQsIDkwLCAKLSAgICAyMjUsIDg1LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjI1LCA3OSwgMjQsIDkwLCAyMjUsIAotICAgIDkzLCAyNCwgOTAsIDIyNSwgOTQsIDI0LCA5MCwgMjE5LCAxNDAsIDI0LCA5MCwgMjE5LCAxNDMsIDI0LCA5MCwgMjE4LCAKLSAgICAyMDgsIDI0LCA5MCwgMjE4LCAyMDYsIDI0LCA5MCwgMjE5LCAxMzgsIDI0LCA5MCwgMjE5LCAxNDYsIDI0LCA5MCwgMjE5LCAKLSAgICAxNDcsIDI0LCA5MCwgMjE5LCAxMzIsIDI0LCA5MCwgMjE5LCAxNDUsIDI0LCA5MCwgMjI2LCAzMCwgMjQsIDkwLCAyMjYsIAotICAgIDMxLCAyNCwgOTAsIDIxMSwgMjQsIDI0LCA5MCwgMjExLCAyNSwgMjQsIDkwLCAyNTAsIDQ0LCAyNCwgOTAsIDI1MCwgNDMsIAotICAgIDI0LCA5MCwgMjE4LCAyMTksIDI0LCA5MCwgMjI1LCAxMjgsIDI0LCA5MCwgMjI1LCAxMjcsIDksIDE0LCAyMzgsIDI0LCA5LCAKLSAgICAxNCwgMjM4LCAyMywgOSwgMTQsIDIzOCwgMjIsIDksIDE0LCAyMzgsIDIxLCA5LCAxNCwgMjM4LCAyMCwgOSwgMTQsIDIzOCwgCi0gICAgMTksIDksIDE0LCAyMzgsIDE4LCA5LCAxNCwgMjM4LCAxNywgOSwgMTQsIDIzOCwgMTYsIDksIDE0LCAyMzgsIDE1LCA5LCAKLSAgICAxNCwgMjM4LCAxNCwgOSwgMTQsIDIzOCwgMTMsIDksIDE0LCAyMzgsIDEyLCA5LCAxNCwgMjM4LCAxMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAsIDksIDE0LCAyMzgsIDksIDksIDE0LCAyMzgsIDgsIDksIDE0LCAyMzgsIDcsIDksIDE0LCAyMzgsIDYsIDksIDE0LCAKLSAgICAyMzgsIDUsIDksIDE0LCAyMzgsIDQsIDksIDE0LCAyMzgsIDMsIDksIDE0LCAyMzgsIDIsIDksIDE0LCAyMzgsIDEsIDksIAotICAgIDE0LCAyMzgsIDAsIDksIDE0LCAyMzcsIDI1NSwgOSwgMTQsIDIzNywgMjU0LCA5LCAxNCwgMjM3LCAyNTMsIDksIDE0LCAKLSAgICAyMzcsIDI1MiwgOSwgMTQsIDIzNywgMjUxLCA5LCAxNCwgMjM3LCAyNTAsIDksIDE0LCAyMzcsIDI0OSwgOSwgMTQsIDIzNywgCi0gICAgMjQ4LCA5LCAxNCwgMjM3LCAyNDcsIDksIDE0LCAyMzcsIDI0NiwgOSwgMTQsIDIzNywgMjQ1LCA5LCAxNCwgMjM3LCAyNDQsIAotICAgIDksIDE0LCAyMzcsIDI0MywgOSwgMTQsIDIzNywgMjQyLCA5LCAxNCwgMjM3LCAyNDEsIDksIDE0LCAyMzcsIDI0MCwgOSwgCi0gICAgMTQsIDIzNywgMjM5LCA5LCAxNCwgMjM3LCAyMzgsIDksIDE0LCAyMzcsIDIzNywgOSwgMTQsIDIzNywgMjM2LCA5LCAxNCwgCi0gICAgMjM3LCAyMzUsIDksIDE0LCAyMzcsIDIzNCwgOSwgMTQsIDIzNywgMjMzLCA5LCAxNCwgMjM3LCAyMzIsIDksIDE0LCAyMzcsIAotICAgIDIzMSwgOSwgMTQsIDIzNywgMjMwLCA5LCAxNCwgMjM3LCAyMjksIDksIDE0LCAyMzcsIDIyOCwgOSwgMTQsIDIzNywgMjI3LCAKLSAgICA5LCAxNCwgMjM3LCAyMjYsIDksIDE0LCAyMzcsIDIyNSwgOSwgMTQsIDIzNywgMjI0LCA5LCAxNCwgMjM3LCAyMjMsIDksIAotICAgIDE0LCAyMzcsIDIyMiwgOSwgMTQsIDIzNywgMjIxLCA5LCAxNCwgMjM3LCAyMjAsIDksIDE0LCAyMzcsIDIxOSwgOSwgMTQsIAotICAgIDIzNywgMjE4LCA5LCAxNCwgMjM3LCAyMTcsIDksIDE0LCAyMzcsIDIxNiwgOSwgMTQsIDIzNywgMjE1LCA5LCAxNCwgMjM3LCAKLSAgICAyMTQsIDksIDE0LCAyMzcsIDIxMywgOSwgMTQsIDIzNywgMjEyLCA5LCAxNCwgMjM3LCAyMTEsIDksIDE0LCAyMzcsIDIxMCwgCi0gICAgOSwgMTQsIDIzNywgMjA5LCA5LCAxNCwgMjM3LCAyMDgsIDksIDE0LCAyMzcsIDIwNywgOSwgMTQsIDIzNywgMjA2LCA5LCAKLSAgICAxNCwgMjM3LCAyMDUsIDksIDE0LCAyMzcsIDIwNCwgOSwgMTQsIDIzNywgMjAzLCA5LCAxNCwgMjM3LCAyMDIsIDksIDE0LCAKLSAgICAyMzcsIDIwMSwgOSwgMTQsIDIzNywgMjAwLCA5LCAxNCwgMjM3LCAxOTksIDksIDE0LCAyMzcsIDE5OCwgOSwgMTQsIDIzNywgCi0gICAgMTk3LCA5LCAxNCwgMjM3LCAxOTYsIDksIDE0LCAyMzcsIDE5NSwgOSwgMTQsIDIzNywgMTk0LCA5LCAxNCwgMjM3LCAxOTMsIAotICAgIDksIDE0LCAyMzcsIDE5MiwgOSwgMTQsIDIzNywgMTkxLCA5LCAxNCwgMjM3LCAxOTAsIDksIDE0LCAyMzcsIDE4OSwgOSwgCi0gICAgMTQsIDIzNywgMTg4LCA5LCAxNCwgMjM3LCAxODcsIDksIDE0LCAyMzcsIDE4NiwgOSwgMTQsIDIzNywgMTg1LCA5LCAxNCwgCi0gICAgMjM3LCAxODQsIDksIDE0LCAyMzcsIDE4MywgOSwgMTQsIDIzNywgMTgyLCA5LCAxNCwgMjM3LCAxODEsIDksIDE0LCAyMzcsIAotICAgIDE4MCwgOSwgMTQsIDIzNywgMTc5LCA5LCAxNCwgMjM3LCAxNzgsIDksIDE0LCAyMzcsIDE3NywgOSwgMTQsIDIzNywgMTc2LCAKLSAgICA5LCAxNCwgMjM3LCAxNzUsIDksIDE0LCAyMzcsIDE3NCwgOSwgMTQsIDIzNywgMTczLCA5LCAxNCwgMjM3LCAxNzIsIDksIAotICAgIDE0LCAyMzcsIDE3MSwgOSwgMTQsIDIzNywgMTcwLCA5LCAxNCwgMjM3LCAxNjksIDksIDE0LCAyMzcsIDE2OCwgOSwgMTQsIAotICAgIDIzNywgMTY3LCA5LCAxNCwgMjM3LCAxNjYsIDksIDE0LCAyMzcsIDE2NSwgOSwgMTQsIDIzNywgMTY0LCA5LCAxNCwgMjM3LCAKLSAgICAxNjMsIDksIDE0LCAyMzcsIDE2MiwgOSwgMTQsIDIzNywgMTYxLCA5LCAxNCwgMjM3LCAxNjAsIDksIDE0LCAyMzcsIDE1OSwgCi0gICAgOSwgMTQsIDIzNywgMTU4LCA5LCAxNCwgMjM3LCAxNTcsIDksIDE0LCAyMzcsIDE1NiwgOSwgMTQsIDIzNywgMTU1LCA5LCAKLSAgICAxNCwgMjM3LCAxNTQsIDksIDE0LCAyMzcsIDE1MywgOSwgMTQsIDIzNywgMTUyLCA5LCAxNCwgMjM3LCAxNTEsIDksIDE0LCAKLSAgICAyMzcsIDE1MCwgOSwgMTQsIDIzNywgMTQ5LCA5LCAxNCwgMjM3LCAxNDgsIDksIDE0LCAyMzcsIDE0NywgOSwgMTQsIDIzNywgCi0gICAgMTQ2LCA5LCAxNCwgMjM3LCAxNDUsIDksIDE0LCAyMzcsIDE0NCwgOSwgMTQsIDIzNywgMTQzLCA5LCAxNCwgMjM3LCAxNDIsIAotICAgIDksIDE0LCAyMzcsIDE0MSwgOSwgMTQsIDIzNywgMTQwLCA5LCAxNCwgMjM3LCAxMzksIDksIDE0LCAyMzcsIDEzOCwgOSwgCi0gICAgMTQsIDIzNywgMTM3LCA5LCAxNCwgMjM3LCAxMzYsIDksIDE0LCAyMzcsIDEzNSwgOSwgMTQsIDIzNywgMTM0LCA5LCAxNCwgCi0gICAgMjM3LCAxMzMsIDksIDE0LCAyMzcsIDEzMiwgOSwgMTQsIDIzNywgMTMxLCA5LCAxNCwgMjM3LCAxMzAsIDksIDE0LCAyMzcsIAotICAgIDEyOSwgOSwgMTQsIDIzNywgMTI4LCA5LCAxNCwgMjM3LCAxMjcsIDksIDE0LCAyMzcsIDEyNiwgOSwgMTQsIDIzNywgMTI1LCAKLSAgICA5LCAxNCwgMjM3LCAxMjQsIDksIDE0LCAyMzcsIDEyMywgOSwgMTQsIDIzNywgMTIyLCA5LCAxNCwgMjM3LCAxMjEsIDksIAotICAgIDE0LCAyMzcsIDEyMCwgOSwgMTQsIDIzNywgMTE5LCA5LCAxNCwgMjM3LCAxMTgsIDksIDE0LCAyMzcsIDExNywgOSwgMTQsIAotICAgIDIzNywgMTE2LCA5LCAxNCwgMjM3LCAxMTUsIDksIDE0LCAyMzcsIDExNCwgOSwgMTQsIDIzNywgMTEzLCA5LCAxNCwgMjM3LCAKLSAgICAxMTIsIDksIDE0LCAyMzcsIDExMSwgOSwgMTQsIDIzNywgMTEwLCA5LCAxNCwgMjM3LCAxMDksIDksIDE0LCAyMzcsIDEwOCwgCi0gICAgOSwgMTQsIDIzNywgMTA3LCA5LCAxNCwgMjM3LCAxMDYsIDksIDE0LCAyMzcsIDEwNSwgOSwgMTQsIDIzNywgMTA0LCA5LCAKLSAgICAxNCwgMjM3LCAxMDMsIDksIDE0LCAyMzcsIDEwMiwgOSwgMTQsIDIzNywgMTAxLCA5LCAxNCwgMjM3LCAxMDAsIDksIDE0LCAKLSAgICAyMzcsIDk5LCA5LCAxNCwgMjM3LCA5OCwgOSwgMTQsIDIzNywgOTcsIDksIDE0LCAyMzcsIDk2LCA5LCAxNCwgMjM3LCA5NSwgCi0gICAgOSwgMTQsIDIzNywgOTQsIDksIDE0LCAyMzcsIDkzLCA5LCAxNCwgMjM3LCA5MiwgOSwgMTQsIDIzNywgOTEsIDksIDE0LCAKLSAgICAyMzcsIDkwLCA5LCAxNCwgMjM3LCA4OSwgOSwgMTQsIDIzNywgODgsIDksIDE0LCAyMzcsIDg3LCA5LCAxNCwgMjM3LCA4NiwgCi0gICAgOSwgMTQsIDIzNywgODUsIDksIDE0LCAyMzcsIDg0LCA5LCAxNCwgMjM3LCA4MywgOSwgMTQsIDIzNywgODIsIDksIDE0LCAKLSAgICAyMzcsIDgxLCA5LCAxNCwgMjM3LCA4MCwgOSwgMTQsIDIzNywgNzksIDksIDE0LCAyMzcsIDc4LCA5LCAxNCwgMjM3LCA3NywgCi0gICAgOSwgMTQsIDIzNywgNzYsIDksIDE0LCAyMzcsIDc1LCA5LCAxNCwgMjM3LCA3NCwgOSwgMTQsIDIzNywgNzMsIDksIDE0LCAKLSAgICAyMzcsIDcyLCA5LCAxNCwgMjM3LCA3MSwgOSwgMTQsIDIzNywgNzAsIDksIDE0LCAyMzcsIDY5LCA5LCAxNCwgMjM3LCA2OCwgCi0gICAgOSwgMTQsIDIzNywgNjcsIDksIDE0LCAyMzcsIDY2LCA5LCAxNCwgMjM3LCA2NSwgOSwgMTQsIDIzNywgNjQsIDksIDE0LCAKLSAgICAyMzcsIDYzLCA5LCAxNCwgMjM3LCA2MiwgOSwgMTQsIDIzNywgNjEsIDksIDE0LCAyMzcsIDYwLCA5LCAxNCwgMjM3LCA1OSwgCi0gICAgOSwgMTQsIDIzNywgNTgsIDksIDE0LCAyMzcsIDU3LCA5LCAxNCwgMjM3LCA1NiwgOSwgMTQsIDIzNywgNTUsIDksIDE0LCAKLSAgICAyMzcsIDU0LCA5LCAxNCwgMjM3LCA1MywgOSwgMTQsIDIzNywgNTIsIDksIDE0LCAyMzcsIDUxLCA5LCAxNCwgMjM3LCA1MCwgCi0gICAgOSwgMTQsIDIzNywgNDksIDksIDE0LCAyMzcsIDQ4LCA5LCAxNCwgMjM3LCA0NywgOSwgMTQsIDIzNywgNDYsIDksIDE0LCAKLSAgICAyMzcsIDQ1LCA5LCAxNCwgMjM3LCA0NCwgOSwgMTQsIDIzNywgNDMsIDksIDE0LCAyMzcsIDQyLCA5LCAxNCwgMjM3LCA0MSwgCi0gICAgOSwgMTQsIDIzNywgNDAsIDksIDE0LCAyMzcsIDM5LCA5LCAxNCwgMjM3LCAzOCwgOSwgMTQsIDIzNywgMzcsIDksIDE0LCAKLSAgICAyMzcsIDM2LCA5LCAxNCwgMjM3LCAzNSwgOSwgMTQsIDIzNywgMzQsIDksIDE0LCAyMzcsIDMzLCA5LCAxNCwgMjM3LCAzMiwgCi0gICAgOSwgMTQsIDIzNywgMzEsIDksIDE0LCAyMzcsIDMwLCA5LCAxNCwgMjM3LCAyOSwgOSwgMTQsIDIzNywgMjgsIDksIDE0LCAKLSAgICAyMzcsIDI3LCA5LCAxNCwgMjM3LCAyNiwgOSwgMTQsIDIzNywgMjUsIDksIDE0LCAyMzcsIDI0LCA5LCAxNCwgMjM3LCAyMywgCi0gICAgOSwgMTQsIDIzNywgMjIsIDksIDE0LCAyMzcsIDIxLCA5LCAxNCwgMjM3LCAyMCwgOSwgMTQsIDIzNywgMTksIDksIDE0LCAKLSAgICAyMzcsIDE4LCA5LCAxNCwgMjM3LCAxNywgOSwgMTQsIDIzNywgMTYsIDksIDE0LCAyMzcsIDE1LCA5LCAxNCwgMjM3LCAxNCwgCi0gICAgOSwgMTQsIDIzNywgMTMsIDksIDE0LCAyMzcsIDEyLCA5LCAxNCwgMjM3LCAxMSwgOSwgMTQsIDIzNywgMTAsIDksIDE0LCAKLSAgICAyMzcsIDksIDksIDE0LCAyMzcsIDgsIDksIDE0LCAyMzcsIDcsIDksIDE0LCAyMzcsIDYsIDksIDE0LCAyMzcsIDUsIDksIAotICAgIDE0LCAyMzcsIDQsIDksIDE0LCAyMzcsIDMsIDksIDE0LCAyMzcsIDIsIDksIDE0LCAyMzcsIDEsIDksIDE0LCAyMzcsIDAsIAotICAgIDksIDE0LCAyMzYsIDI1NSwgOSwgMTQsIDIzNiwgMjU0LCA5LCAxNCwgMjM2LCAyNTMsIDksIDE0LCAyMzYsIDI1MiwgOSwgCi0gICAgMTQsIDIzNiwgMjUxLCA5LCAxNCwgMjM2LCAyNTAsIDksIDE0LCAyMzYsIDI0OSwgOSwgMTQsIDIzNiwgMjQ4LCA5LCAxNCwgCi0gICAgMjM2LCAyNDcsIDksIDE0LCAyMzYsIDI0NiwgOSwgMTQsIDIzNiwgMjQ1LCA5LCAxNCwgMjM2LCAyNDQsIDksIDE0LCAyMzYsIAotICAgIDI0MywgOSwgMTQsIDIzNiwgMjQyLCA5LCAxNCwgMjM2LCAyNDEsIDksIDE0LCAyMzYsIDI0MCwgOSwgMTQsIDIzNiwgMjM5LCAKLSAgICA5LCAxNCwgMjM2LCAyMzgsIDksIDE0LCAyMzYsIDIzNywgOSwgMTQsIDIzNiwgMjM2LCA5LCAxNCwgMjM2LCAyMzUsIDksIAotICAgIDE0LCAyMzYsIDIzNCwgOSwgMTQsIDIzNiwgMjMzLCA5LCAxNCwgMjM2LCAyMzIsIDksIDE0LCAyMzYsIDIzMSwgOSwgMTQsIAotICAgIDIzNiwgMjMwLCA5LCAxNCwgMjM2LCAyMjksIDksIDE0LCAyMzYsIDIyOCwgOSwgMTQsIDIzNiwgMjI3LCA5LCAxNCwgMjM2LCAKLSAgICAyMjYsIDksIDE0LCAyMzYsIDIyNSwgOSwgMTQsIDIzNiwgMjI0LCA5LCAxNCwgMjM2LCAyMjMsIDksIDE0LCAyMzYsIDIyMiwgCi0gICAgOSwgMTQsIDIzNiwgMjIxLCA5LCAxNCwgMjM2LCAyMjAsIDksIDE0LCAyMzYsIDIxOSwgOSwgMTQsIDIzNiwgMjE4LCA5LCAKLSAgICAxNCwgMjM2LCAyMTcsIDksIDE0LCAyMzYsIDIxNiwgOSwgMTQsIDIzNiwgMjE1LCA5LCAxNCwgMjM2LCAyMTQsIDksIDE0LCAKLSAgICAyMzYsIDIxMywgOSwgMTQsIDIzNiwgMjEyLCA5LCAxNCwgMjM2LCAyMTEsIDksIDE0LCAyMzYsIDIxMCwgOSwgMTQsIDIzNiwgCi0gICAgMjA5LCA5LCAxNCwgMjM2LCAyMDgsIDksIDE0LCAyMzYsIDIwNywgOSwgMTQsIDIzNiwgMjA2LCA5LCAxNCwgMjM2LCAyMDUsIAotICAgIDksIDE0LCAyMzYsIDIwNCwgOSwgMTQsIDIzNiwgMjAzLCA5LCAxNCwgMjM2LCAyMDIsIDksIDE0LCAyMzYsIDIwMSwgOSwgCi0gICAgMTQsIDIzNiwgMjAwLCA5LCAxNCwgMjM2LCAxOTksIDksIDE0LCAyMzYsIDE5OCwgOSwgMTQsIDIzNiwgMTk3LCA5LCAxNCwgCi0gICAgMjM2LCAxOTYsIDksIDE0LCAyMzYsIDE5NSwgOSwgMTQsIDIzNiwgMTk0LCA5LCAxNCwgMjM2LCAxOTMsIDksIDE0LCAyMzYsIAotICAgIDE5MiwgOSwgMTQsIDIzNiwgMTkxLCA5LCAxNCwgMjM2LCAxOTAsIDksIDE0LCAyMzYsIDE4OSwgOSwgMTQsIDIzNiwgMTg4LCAKLSAgICA5LCAxNCwgMjM2LCAxODcsIDksIDE0LCAyMzYsIDE4NiwgOSwgMTQsIDIzNiwgMTg1LCA5LCAxNCwgMjM2LCAxODQsIDksIAotICAgIDE0LCAyMzYsIDE4MywgOSwgMTQsIDIzNiwgMTgyLCA5LCAxNCwgMjM2LCAxODEsIDksIDE0LCAyMzYsIDE4MCwgOSwgMTQsIAotICAgIDIzNiwgMTc5LCA5LCAxNCwgMjM2LCAxNzgsIDksIDE0LCAyMzYsIDE3NywgOSwgMTQsIDIzNiwgMTc2LCA5LCAxNCwgMjM2LCAKLSAgICAxNzUsIDksIDE0LCAyMzYsIDE3NCwgOSwgMTQsIDIzNiwgMTczLCA5LCAxNCwgMjM2LCAxNzIsIDksIDE0LCAyMzYsIDE3MSwgCi0gICAgOSwgMTQsIDIzNiwgMTcwLCA5LCAxNCwgMjM2LCAxNjksIDksIDE0LCAyMzYsIDE2OCwgOSwgMTQsIDIzNiwgMTY3LCA5LCAKLSAgICAxNCwgMjM2LCAxNjYsIDksIDE0LCAyMzYsIDE2NSwgOSwgMTQsIDIzNiwgMTY0LCA5LCAxNCwgMjM2LCAxNjMsIDksIDE0LCAKLSAgICAyMzYsIDE2MiwgOSwgMTQsIDIzNiwgMTYxLCA5LCAxNCwgMjM2LCAxNjAsIDksIDE0LCAyMzYsIDE1OSwgOSwgMTQsIDIzNiwgCi0gICAgMTU4LCA5LCAxNCwgMjM2LCAxNTcsIDksIDE0LCAyMzYsIDE1NiwgOSwgMTQsIDIzNiwgMTU1LCA5LCAxNCwgMjM2LCAxNTQsIAotICAgIDksIDE0LCAyMzYsIDE1MywgOSwgMTQsIDIzNiwgMTUyLCA5LCAxNCwgMjM2LCAxNTEsIDksIDE0LCAyMzYsIDE1MCwgOSwgCi0gICAgMTQsIDIzNiwgMTQ5LCA5LCAxNCwgMjM2LCAxNDgsIDksIDE0LCAyMzYsIDE0NywgOSwgMTQsIDIzNiwgMTQ2LCA5LCAxNCwgCi0gICAgMjM2LCAxNDUsIDksIDE0LCAyMzYsIDE0NCwgOSwgMTQsIDIzNiwgMTQzLCA5LCAxNCwgMjM2LCAxNDIsIDksIDE0LCAyMzYsIAotICAgIDE0MSwgOSwgMTQsIDIzNiwgMTQwLCA5LCAxNCwgMjM2LCAxMzksIDksIDE0LCAyMzYsIDEzOCwgOSwgMTQsIDIzNiwgMTM3LCAKLSAgICA5LCAxNCwgMjM2LCAxMzYsIDksIDE0LCAyMzYsIDEzNSwgOSwgMTQsIDIzNiwgMTM0LCA5LCAxNCwgMjM2LCAxMzMsIDksIAotICAgIDE0LCAyMzYsIDEzMiwgOSwgMTQsIDIzNiwgMTMxLCA5LCAxNCwgMjM2LCAxMzAsIDksIDE0LCAyMzYsIDEyOSwgOSwgMTQsIAotICAgIDIzNiwgMTI4LCA5LCAxNCwgMjM2LCAxMjcsIDksIDE0LCAyMzYsIDEyNiwgOSwgMTQsIDIzNiwgMTI1LCA5LCAxNCwgMjM2LCAKLSAgICAxMjQsIDksIDE0LCAyMzYsIDEyMywgOSwgMTQsIDIzNiwgMTIyLCA5LCAxNCwgMjM2LCAxMjEsIDksIDE0LCAyMzYsIDEyMCwgCi0gICAgOSwgMTQsIDIzNiwgMTE5LCA5LCAxNCwgMjM2LCAxMTgsIDksIDE0LCAyMzYsIDExNywgOSwgMTQsIDIzNiwgMTE2LCA5LCAKLSAgICAxNCwgMjM2LCAxMTUsIDksIDE0LCAyMzYsIDExNCwgOSwgMTQsIDIzNiwgMTEzLCA5LCAxNCwgMjM2LCAxMTIsIDksIDE0LCAKLSAgICAyMzYsIDExMSwgOSwgMTQsIDIzNiwgMTEwLCA5LCAxNCwgMjM2LCAxMDksIDksIDE0LCAyMzYsIDEwOCwgOSwgMTQsIDIzNiwgCi0gICAgMTA3LCA5LCAxNCwgMjM2LCAxMDYsIDksIDE0LCAyMzYsIDEwNSwgOSwgMTQsIDIzNiwgMTA0LCA5LCAxNCwgMjM2LCAxMDMsIAotICAgIDksIDE0LCAyMzYsIDEwMiwgOSwgMTQsIDIzNiwgMTAxLCA5LCAxNCwgMjM2LCAxMDAsIDksIDE0LCAyMzYsIDk5LCA5LCAxNCwgCi0gICAgMjM2LCA5OCwgOSwgMTQsIDIzNiwgOTcsIDksIDE0LCAyMzYsIDk2LCA5LCAxNCwgMjM2LCA5NSwgOSwgMTQsIDIzNiwgOTQsIAotICAgIDksIDE0LCAyMzYsIDkzLCA5LCAxNCwgMjM2LCA5MiwgOSwgMTQsIDIzNiwgOTEsIDksIDE0LCAyMzYsIDkwLCA5LCAxNCwgCi0gICAgMjM2LCA4OSwgOSwgMTQsIDIzNiwgODgsIDksIDE0LCAyMzYsIDg3LCA5LCAxNCwgMjM2LCA4NiwgOSwgMTQsIDIzNiwgODUsIAotICAgIDksIDE0LCAyMzYsIDg0LCA5LCAxNCwgMjM2LCA4MywgOSwgMTQsIDIzNiwgODIsIDksIDE0LCAyMzYsIDgxLCA5LCAxNCwgCi0gICAgMjM2LCA4MCwgOSwgMTQsIDIzNiwgNzksIDksIDE0LCAyMzYsIDc4LCA5LCAxNCwgMjM2LCA3NywgOSwgMTQsIDIzNiwgNzYsIAotICAgIDksIDE0LCAyMzYsIDc1LCA5LCAxNCwgMjM2LCA3NCwgOSwgMTQsIDIzNiwgNzMsIDksIDE0LCAyMzYsIDcyLCA5LCAxNCwgCi0gICAgMjM2LCA3MSwgOSwgMTQsIDIzNiwgNzAsIDksIDE0LCAyMzYsIDY5LCA5LCAxNCwgMjM2LCA2OCwgOSwgMTQsIDIzNiwgNjcsIAotICAgIDksIDE0LCAyMzYsIDY2LCA5LCAxNCwgMjM2LCA2NSwgNywgNCwgMjcsIDI0NCwgMTI1LCA3LCA0LCAyNywgMjQ0LCAxMjEsIAotICAgIDcsIDQsIDI3LCAyNDQsIDc2LCA3LCA0LCAyNywgMjQ0LCAxMjQsIDcsIDQsIDI3LCAyNDQsIDEyMywgNywgNCwgMjcsIDE5OSwgCi0gICAgMjIyLCA5MiwgMjE3LCAxNTIsIDcsIDQsIDI3LCAyMTgsIDE2OCwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjI4LCAzOSwgMTUwLCAKLSAgICA0LCAyNywgMjMxLCA1OSwgMjQ1LCAyMTMsIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIzNSwgMjI3LCAxNTAsIDQsIDI3LCAyMTMsIAotICAgIDE4MCwgMjI4LCAzOSwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjExLCAxNjAsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQxLCAKLSAgICAxNTgsIDk0LCAyMjUsIDExLCAyMzUsIDUwLCAyMTQsIDExLCA5NCwgMjcsIDIxMSwgNiwgMjEwLCAyMzQsIDIxMCwgMjM0LCAKLSAgICAyMjUsIDIzOSwgOTQsIDEsIDI1NCwgMTM5LCAyNTMsIDE2MiwgOTQsIDEsIDIxMSwgMjQ3LCAyNTQsIDE3MCwgOTQsIDEsIAotICAgIDIxMSwgMjQ3LCAyNDgsIDE4OSwgOTQsIDEsIDIxMSwgMjQ3LCAyNDEsIDIzOCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzQsIDI1MCwgCi0gICAgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDk0LCA5NCwgMSwgMjExLCAyNDcsIDQwLCAyMzEsIDY1LCA5NCwgMSwgMjExLCAyNDcsIAotICAgIDIyMywgNjcsIDk0LCAxLCAyMTEsIDI0NywgMjE3LCAzOCwgOTQsIDEsIDI1NCwgMTM5LCA5NiwgNTAsIDk0LCAxLCAyMjAsIAotICAgIDIxLCAyLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIDEsIDIyMCwgMjEsIDIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIAotICAgIDIyMCwgMjEsIDIsIDI0OCwgMjA4LCAyMiwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAxLCAyMjAsIDIxLCAyLCAyNDgsIDIwOCwgCi0gICAgMjIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIDExMiwgMiwgMjI1LCAyMzksIDk0LCAxLCAxMTIsIDIsIDIyNCwgNzYsIAotICAgIDk0LCAxLCAxMTIsIDIsIDIzMSwgMTcxLCA5NCwgMSwgMjUyLCAyOSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDIsIDIwMiwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyNDgsIDE5MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDEsIDIzOSwgMiwgMjMxLCAxNzEsIDk0LCAKLSAgICAxLCAyMTQsIDQsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjEwLCA5OCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTYsIDIzMSwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCA0MCwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCAKLSAgICA5NCwgMSwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjMzLCA5NSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMzEsIAotICAgIDY2LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNywgMTk1LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMSwgMjUwLCAyLCAyNDgsIAotICAgIDIwNywgOTQsIDEsIDQwLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAKLSAgICAxLCAyMTUsIDE4MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjQsIDQwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMywgNjgsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjIwLCAyMSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTcsIDM5LCAyLCAyNDgsIDIwNywgOTQsIAotICAgIDEsIDIxNCwgNCwgMiwgMjQxLCA2MSwgOTQsIDEsIDI1MiwgMjksIDIsIDIyMywgMTY5LCA5NCwgMSwgMjM0LCAyNTEsIDIsIAotICAgIDIyMywgMTY5LCA5NCwgMSwgMjI1LCAyMjIsIDIsIDIyMywgMTY5LCA5NCwgMjcsIDExMiwgMjMzLCA5NCwgMTAsIDEsIDExMiwgCi0gICAgMjEyLCA0NywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyMTIsIDQ3LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA1MywgMTcsIDEwLCAKLSAgICAxLCAyNTIsIDY1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIDY1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjI1LCAyMDYsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA2LCA0MCwgMTcsIDEwLCAxLCAyMjUsIDIwNiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjI1LCAyMDYsIDE0NywgMTcsIDEwLCAxLCAyNTIsIDUzLCA1MywgMTcsIDEwLCAxLCAyNTIsIDUzLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNTIsIDUzLCA2NSwgMTcsIDEwLCAxLCAyNTIsIDUzLCAxNDcsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ3LCA0MCwgMTcsIDEwLCAxLCAyMTUsIDE0NywgNjUsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDE0NywgCi0gICAgMTcsIDEwLCAxLCAyMTcsIDYsIDUzLCAxNywgMTAsIDEsIDIxNywgNiwgNDAsIDE3LCAxMCwgMSwgMjE3LCA2LCA2NSwgMTcsIAotICAgIDEwLCAxLCAyMTcsIDYsIDE0NywgMTcsIDEwLCAxLCAyMTUsIDE0OSwgNTMsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDQwLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ5LCA2NSwgMTcsIDEwLCAxLCAyMTUsIDE0OSwgMTQ3LCAxNywgMTAsIDEsIDIxMywgMjQ5LCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNDAsIDE3LCAxMCwgMSwgMjEzLCAyNDksIDY1LCAxNywgMTAsIDEsIDIxMywgMjQ5LCAKLSAgICAxNDcsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA0LCA0MCwgMTcsIDEwLCAxLCAyMjUsIAotICAgIDIwNCwgNjUsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDE0NywgMTcsIDEwLCAxLCAyNDYsIDQ0LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDYsIDQ0LCA0MCwgMTcsIDEwLCAxLCAyNDYsIDQ0LCA2NSwgMTcsIDEwLCAxLCAyNDYsIDQ0LCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjI3LCAxNTQsIDUzLCAxNywgMTAsIDEsIDIyNywgMTU0LCA0MCwgMTcsIDEwLCAxLCAyMjcsIDE1NCwgNjUsIDE3LCAxMCwgCi0gICAgMSwgMjI3LCAxNTQsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDI3LCA1MywgMTcsIDEwLCAxLCAyMTcsIDI3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMTcsIDI3LCA2NSwgMTcsIDEwLCAxLCAyMTcsIDI3LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjE3LCAyNSwgNDAsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNjUsIDE3LCAxMCwgMSwgMjE3LCAyNSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0OCwgMTMzLCA1MywgMTcsIDEwLCAxLCAyNDgsIDEzMywgNDAsIDE3LCAxMCwgMSwgMjQ4LCAyMDIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDI0OCwgMjAyLCA0MCwgMTcsIDEwLCAxLCAyNDYsIDcxLCA1MywgMTcsIDEwLCAxLCAyNDYsIDcxLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNDgsIDEzMSwgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxMzEsIDQwLCAxNywgMTAsIDEsIDIzNSwgMTIxLCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMzUsIDEyMSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAxNzIsIDUzLCAxNywgMTAsIDEsIDIyMiwgMTcyLCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDQwLCAxNywgMTAsIDEsIDIzNCwgCi0gICAgMTc1LCA2NSwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgMTQ3LCAxNywgMTAsIDEsIDI0MywgMTIzLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDMsIDEyMywgNDAsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDY1LCAxNywgMTAsIDEsIDI0MywgMTIzLCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQyLCAxMDIsIDUzLCAxNywgMTAsIDEsIDI0MiwgMTAyLCA0MCwgMTcsIDEwLCAxLCAyNDIsIDEwMiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjQyLCAxMDIsIDE0NywgMTcsIDEwLCAxLCAyMjksIDMsIDUzLCAxNywgMTAsIDEsIDIyOSwgMywgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjI5LCAzLCA2NSwgMTcsIDEwLCAxLCAyMjksIDMsIDE0NywgMTcsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOSwgCi0gICAgNTMsIDE3LCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTksIDQwLCAxNywgMTAsIDEsIDIyMiwgMjE1LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDIxNSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDY1LCAxNywgMTAsIDEsIDIyMiwgMjE1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDIsIDE3MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQ3LCAxNDIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0NywgMTQyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCA1MywgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDQwLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgCi0gICAgMiwgMjAyLCA3NywgNTMsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxNiwgNTksIAotICAgIDQ4LCAxMCwgMTYsIDU5LCA1MSwgMTAsIDE2LCAxMTMsIDE3MCwgNDgsIDEwLCAxNiwgMTEzLCAxNzAsIDUxLCAxMCwgMTYsIAotICAgIDEzNCwgMTcwLCA0OCwgMTAsIDE2LCAxMzQsIDE3MCwgNTEsIDEwLCAxNiwgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIAotICAgIDQ4LCAxMCwgMTYsIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA1MSwgMTAsIDE2LCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgCi0gICAgMTYsIDI0NCwgMTEsIDE3MCwgNTEsIDEwLCAxNiwgNTIsIDY3LCAyNTIsIDE0MSwgNTEsIDEwLCAxNiwgMTEzLCAxNzAsIAotICAgIDIxMywgMTg5LCA0OCwgMTAsIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDUxLCAxMCwgMTYsIDIyMiwgMjMzLCAxMCwgMTYsIAotICAgIDQsIDIxNywgODEsIDQ4LCAxMCwgMTYsIDQsIDIxNywgODEsIDUxLCAxMCwgMSwgMjI5LCA4MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjI5LCA4MCwgNDAsIDE3LCAxMCwgMSwgMjI5LCA4MCwgNjUsIDE3LCAxMCwgMSwgMjI5LCA4MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDEwNCwgNTMsIDE3LCAxMCwgMSwgMTA0LCA0MCwgMTcsIDEwLCAxLCAyMjYsIDIzNSwgNTMsIDE3LCAxMCwgMSwgMjI2LCAKLSAgICAyMzUsIDQwLCAxNywgMTAsIDEsIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAxLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMSwgCi0gICAgMTA0LCAyLCAyMDIsIDc3LCA1MywgMTcsIDEwLCAxLCAyMTQsIDAsIDUzLCAxNywgMTAsIDEsIDIxNCwgMCwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCA3MywgMjI2LCAyMzUsIDUzLCAxNywgMTAsIDEsIDIzNCwgNzMsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMzQsIDczLCAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMSwgMjM0LCA3MywgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDEsIAotICAgIDE2MCwgNTMsIDE3LCAxMCwgMSwgMTYwLCA0MCwgMTcsIDEwLCAxLCAxNjAsIDY1LCAxNywgMTAsIDEsIDE2MCwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIxNCwgMjA3LCAyMzQsIDE4NiwgMjM0LCA3MywgMTEyLCAyMzEsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE0LCAKLSAgICAyMDcsIDIzNCwgMTg2LCAyMzQsIDczLCAxMTIsIDIzMSwgMTkzLCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMiwgMzEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMjEyLCAzMSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMDQsIDUzLCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMiwgMTA0LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA1MywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIAotICAgIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDQwLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA2NSwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIAotICAgIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDUzLCAxNywgMTAsIDEsIDI0NCwgMTY4LCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMjIsIAotICAgIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDI1MiwgNTUsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgCi0gICAgNTUsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIAotICAgIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIAotICAgIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDUzLCAxNywgMTAsIAotICAgIDI3LCAxNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMjIsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMjcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgCi0gICAgMjE3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyNDgsIAotICAgIDIxNywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAKLSAgICA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDE1MSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDEyMiwgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIyNCwgODIsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyNCwgODIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjM0LCAKLSAgICAyNTEsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMzQsIDI1MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjMzLCAxMDMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyOCwgNjMsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgCi0gICAgNjMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDEsIAotICAgIDIxOSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMTUxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAyMDMsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMywgOTYsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0OCwgMTgzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAKLSAgICAyMDQsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIAotICAgIDI0OCwgMTg1LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAyMDYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAKLSAgICAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgCi0gICAgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTYsIDE5MywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMjgsIDYzLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE2LCAxOTMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAKLSAgICAxMDMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMjMsIDk2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjUyLCA1NSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMTcsIAotICAgIDgsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgCi0gICAgMTMwLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAKLSAgICAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjQ0LCAxNDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyNDQsIAotICAgIDE0MywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIAotICAgIDgyLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzNCwgCi0gICAgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCA2NSwgCi0gICAgMTcsIDEwLCAyNywgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgMjE4LCAKLSAgICAyMywgMTEyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE2LCAxOTMsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA2MCwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCAxNDcsIAotICAgIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIDE0NywgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjQxLCAyMTksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAKLSAgICAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDgsIDE4NSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDk0LCAyLCAyMzQsIDIwNiwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTEyLCAyMzEsIDE5MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIAotICAgIDYwLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgCi0gICAgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjE3LCAKLSAgICA4MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjU0LCAxOTcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjIzLCA5NiwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjIzLCA5NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMTIyLCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxMCwgMTEyLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAxMTIsIDIsIDI0NCwgMTY0LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMTEyLCAyLCAyNDQsIDE2NCwgNTMsIDE3LCAyMjYsIDE0NiwgNDMsIDIyNiwgMywgMjI2LCAxNDYsIDQ0LCAyMjYsIDMsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIDE1MSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgCi0gICAgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgOCwgMiwgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxMjIsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAKLSAgICAxNjcsIDIsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgMTIyLCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDI3LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAKLSAgICAyLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAKLSAgICAxMzAsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgODEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIAotICAgIDY2LCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAKLSAgICA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgCi0gICAgMTQzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgMiwgNjYsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgCi0gICAgMTAzLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDE1MSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCAyLCAyMzQsIDEzMCwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDE1MSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgCi0gICAgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIAotICAgIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgCi0gICAgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNTIsIAotICAgIDU1LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNjYsIDIsIDY2LCA2NSwgCi0gICAgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjIsIDQsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgCi0gICAgNSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgNzgsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgNSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI1NCwgMTUzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAxODMsIDUzLCAxNywgMTAsIDI3LCAyMzAsIDE1MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMiwgNSwgNTMsIDE3LCAxMCwgMjcsIDIyMywgMTQzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAKLSAgICAxNzIsIDUzLCAxNywgMTAsIDI3LCAyMTIsIDQ5LCA1MywgMTcsIDEwLCAyNywgMjIyLCA0LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0OCwgMTAsIDI3LCAyMzUsIDEzNCwgMjIzLCAzNCwgNTAsIDEwLCAyNywgMjUxLCAKLSAgICAyMzAsIDI1NCwgMzksIDI1NCwgNDAsIDQ1LCAyMjEsIDE1NiwgNDUsIDIyMSwgNDUsIDQ1LCAyMjAsIDIzMywgNDUsIDIyMCwgCi0gICAgMjIyLCA0NSwgMjIwLCAyMTEsIDQ1LCAyMjAsIDIwMCwgNDUsIDIyMCwgMTg5LCA0NSwgMjIwLCAxNzgsIDQ1LCAyMjAsIAotICAgIDE2NywgNDUsIDIyMSwgMTU1LCA0NSwgMjIxLCAxNDQsIDQ1LCAyMjEsIDEzMywgNDUsIDIyMSwgMTIyLCA0NSwgMjIxLCAKLSAgICAxMTEsIDQ1LCAyMjEsIDEwMCwgNDUsIDIyMSwgODksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0OSwgMjE5LCAyMjQsIAotICAgIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0OSwgMjE5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ5LCAyMjYsIDIyNCwgMTk0LCAyNDQsIDIwLCAKLSAgICAzMSwgNjcsIDIyMCwgMTUwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDMxLCA3OCwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMjI0LCAxMywgNzgsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA3MSwgMjMzLCAyMCwgMTI3LCAKLSAgICAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDIzMywgMjAsIDI1MSwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgCi0gICAgMzEsIDY3LCAyMDMsIDI0NSwgMTYzLCAzOCwgMjcsIDQzLCAyNDIsIDI3LCAzOCwgMjcsIDQ0LCAyNDIsIDI3LCAzOCwgNTIsIAotICAgIDIxNiwgODksIDQzLCAyNDIsIDI3LCAzOCwgNTIsIDIxNiwgODksIDQ0LCAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQzLCAKLSAgICAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQ0LCAyNDIsIDI3LCAzOCwgMjQ5LCAxOTcsIDIzMSwgMjMyLCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCAxMTMsIDU5LCAyMzMsIDU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDE2MCwgCi0gICAgMjQ4LCAxNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMTUxLCAyNDgsIDE1NiwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMTIxLCAyMzIsIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjEyLCAzMiwgMTIxLCAyMzIsIAotICAgIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgCi0gICAgNDQsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgNDQsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgODUsIAotICAgIDIzMywgMjAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAKLSAgICAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyNDksIAotICAgIDE2MSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNzEsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjEsIDEyNywgMjIwLCAxMzEsIDI0NywgMTIwLCA3MSwgMjIwLCAxMzEsIAotICAgIDI0NywgMTIwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCAKLSAgICA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTU1LCAyMjYsIDExOSwgMjUwLCAxNzIsIDIyNiwgMTE5LCAyMTIsIDMyLCAyMjYsIAotICAgIDExOSwgNTIsIDIxMiwgMzIsIDIyNiwgMTE5LCAyNDgsIDE1NSwgMTIxLCAyMzIsIDIxMywgMjUwLCAxNzIsIDEyMSwgMjMyLCAKLSAgICAyMTMsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTMsIDQsIDI0OSwgMjE5LCA0LCAxMDksIDI0OSwgMjE5LCA0LCAyNDMsIDIyOSwgCi0gICAgMjE4LCAxMjksIDQsIDIyMCwgMTUwLCA0LCAyNDksIDIyNiwgNCwgMjI0LCAxMywgNzgsIDQsIDI0NSwgMzEsIDc4LCA0LCAKLSAgICAyNDUsIDE2MCwgMjQ4LCAxNTYsIDQsIDQzLCAyMjYsIDMsIDQsIDQ0LCAyMjYsIDMsIDQsIDQzLCAyNDksIDk5LCAxMjcsIDQsIAotICAgIDQ0LCAyNDksIDk5LCAxMjcsIDQsIDQzLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNCwgNDQsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0LCA1NCwgNTAsIDQsIDI1NCwgMTI2LCA0LCAyNTMsIDIxNiwgNCwgOTYsIDUwLCA0LCAyNDAsIDE2NywgNCwgMjMzLCAKLSAgICAxNSwgNTAsIDQsIDI0MiwgMTMwLCA1MCwgNCwgMjQ1LCA5OCwgNTAsIDQsIDIyMywgNTAsIDIxOSwgNDYsIDQsIDI0NywgCi0gICAgMTMyLCA1MCwgNCwgMjI1LCAxODIsIDUwLCA0LCAyNDksIDIxNywgMjUzLCAyMDYsIDEwLCAyNDQsIDE2NCwgNTMsIDE3LCAKLSAgICAxMCwgMjE3LCA0NCwgMiwgMjQ0LCAxNjQsIDQ4LCAxMCwgMjQ4LCAxODMsIDUzLCAxNywgMTAsIDIxNywgNzgsIDI0NCwgMSwgCi0gICAgMTAsIDIzNCwgMjA0LCA1MywgMTcsIDEwLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjQ0LCAxNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNDgsIDE4NSwgNTMsIDE3LCAxMCwgMjQ4LCAxODUsIDE0NywgMTcsIDEwLCAyMzQsIDIwNiwgNTMsIDE3LCAxMCwgMjM0LCAKLSAgICAyMDYsIDE0NywgMTcsIDEwLCAyMjAsIDk0LCA1MywgMTcsIDEwLCAyMjAsIDk0LCAxNDcsIDE3LCAxMCwgMjE4LCA0NiwgNTMsIAotICAgIDE3LCAxMCwgMjE4LCA0NiwgMTQ3LCAxNywgMTAsIDEsIDIwMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMzEsIDIyOCwgCi0gICAgNzcsIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNzcsIAotICAgIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNTMsIAotICAgIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDUzLCAKLSAgICAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA0MCwgMTcsIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNTMsIDE3LCAKLSAgICAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA2NSwgMTcsIDEwLCAxLCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMTQ3LCAxNywgMTAsIDEsIDExMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCA0MCwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCA1MywgMTcsIDEwLCAxLCAyNTIsIDU1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDU1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgNTMsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE3LCA4LCA1MywgMTcsIDEwLCAxLCAyMTcsIDgsIDQwLCAxNywgMTAsIDEsIDIxNywgOCwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjE3LCA4LCAxNDcsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMTkzLCA0MCwgCi0gICAgMTcsIDEwLCAxLCAyMTYsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDE0NywgMTcsIDEwLCAxLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDEsIDE1MSwgNDAsIDE3LCAxMCwgMSwgMTUxLCA2NSwgMTcsIDEwLCAxLCAxNTEsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDEsIDEyMiwgNDAsIDE3LCAxMCwgMSwgMTIyLCA2NSwgMTcsIDEwLCAxLCAxMjIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDEsIDIzNCwgMTMwLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDEzMCwgMTQ3LCAxNywgMTAsIDEsIDI0OCwgMTk2LCA1MywgMTcsIDEwLCAxLCAyNDgsIDE5NiwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE2LCAyMDMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMjAzLCA0MCwgMTcsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICA1MywgMTcsIDEwLCAxLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAxLCAyMTAsIDEwOSwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMDksIAotICAgIDQwLCAxNywgMTAsIDEsIDIyMSwgMTY3LCA1MywgMTcsIDEwLCAxLCAyMjEsIDE2NywgNDAsIDE3LCAxMCwgMSwgMjIxLCAKLSAgICAxNjcsIDY1LCAxNywgMTAsIDEsIDIyMSwgMTY3LCAxNDcsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjIwLCA2MCwgNDAsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNjUsIDE3LCAxMCwgMSwgMjIwLCA2MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDUzLCAxNywgMTAsIDEsIDIyMiwgMjcsIDQwLCAxNywgMTAsIDEsIDIyMiwgMjcsIDY1LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDE0NywgMTcsIDEwLCAxLCAyNDgsIDIxNywgNTMsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0OCwgMjE3LCA2NSwgMTcsIDEwLCAxLCAyNDgsIDIxNywgMTQ3LCAxNywgMTAsIDEsIDIxNywgODEsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNywgODEsIDQwLCAxNywgMTAsIDEsIDIxNywgODEsIDY1LCAxNywgMTAsIDEsIDIxNywgODEsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMTAsIDExMiwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDQwLCAxNywgMTAsIDEsIDIxMCwgMTEyLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMTAsIDExMiwgMTQ3LCAxNywgMTAsIDEsIDI1NCwgMTk3LCA1MywgMTcsIDEwLCAxLCAyNTQsIDE5NywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDY1LCAxNywgMTAsIDEsIDI1NCwgMTk3LCAxNDcsIDE3LCAxMCwgMSwgMjQyLCAKLSAgICAyNDUsIDUzLCAxNywgMTAsIDEsIDI0MiwgMjQ1LCA0MCwgMTcsIDEwLCAxLCAyNDIsIDI0NSwgNjUsIDE3LCAxMCwgMSwgCi0gICAgMjQyLCAyNDUsIDE0NywgMTcsIDEwLCAxLCAyNDQsIDE0MywgNTMsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0NCwgMTQzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE0MywgMTQ3LCAxNywgMTAsIDEsIDIyNCwgODIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIyNCwgODIsIDQwLCAxNywgMTAsIDEsIDIyNCwgODIsIDY1LCAxNywgMTAsIDEsIDIyNCwgODIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDI1MSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDQwLCAxNywgMTAsIDEsIDIzNCwgMjUxLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDI1MSwgMTQ3LCAxNywgMTAsIDEsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDY1LCAxNywgMTAsIDEsIDIzMywgMTAzLCAxNDcsIDE3LCAxMCwgMSwgNjYsIDUzLCAKLSAgICAxNywgMTAsIDEsIDY2LCA0MCwgMTcsIDEwLCAxLCA2NiwgNjUsIDE3LCAxMCwgMSwgNjYsIDE0NywgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCA1MywgMTcsIDEwLCAxLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAxLCAyMjgsIDYzLCA2NSwgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCAxNDcsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAxLCAyMTIsIDMxLCA1MywgMTcsIDEwLCAKLSAgICAxLCAyMTIsIDMxLCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA0MCwgMTcsIDEwLCAxLCA3OSwgNTMsIDE3LCAxMCwgMSwgNzksIDQwLCAxNywgMTAsIDEsIDc5LCA2NSwgMTcsIDEwLCAxLCAKLSAgICA3OSwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAKLSAgICAyMDIsIDc3LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIAotICAgIDIwMiwgMjUyLCA0MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgMTEyLCA0MCwgMTcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDczLCAyMTksIDE4LCAxMjYsIDI0NSwgMzEsIDc4LCAKLSAgICAxMjYsIDIyMywgMjU0LCA3OCwgMTI2LCA1NCwgNTAsIDEyNiwgMjQ3LCAxMzIsIDUwLCAxMjYsIDIyNSwgMTgyLCA1MCwgCi0gICAgMTI2LCAyNTQsIDEyNiwgMTI2LCAyNTQsIDU3LCAxMjYsIDQzLCAyMjYsIDMsIDEyNiwgNDQsIDIyNiwgMywgMTI2LCAyNTMsIAotICAgIDIxNiwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMTksIDEyNiwgMjQwLCAxNjcsIDEyNiwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxMjYsIDIxOSwgNDYsIDEyNiwgMjEsIDIxMCwgODYsIDEyNiwgMjEsIDExMCwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIAotICAgIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTg5LCAxMjYsIDIxLCAxOTQsIDEyNiwgMjEsIDE5OCwgMTI2LCAyMSwgMTk1LCAKLSAgICAxMjYsIDIxLCAyMDAsIDEyNiwgMjQ5LCAyMjYsIDEyNiwgMjIwLCAxNTAsIDEyNiwgMjMzLCAxNSwgNTAsIDEyNiwgMjQ1LCAKLSAgICA5OCwgNTAsIDEyNiwgMjQyLCAxMzAsIDUwLCAxMjYsIDIyNCwgMTMsIDc4LCAxMjYsIDI0OSwgMjE3LCAyNTMsIDIwNiwgCi0gICAgMTI2LCA3LCA2LCAxLCA2MSwgMTI2LCA3LCA2LCAxLCAyNTMsIDE1OCwgMTI2LCA3LCA2LCAxLCAyNTEsIDY2LCAxMjYsIDcsIAotICAgIDYsIDEsIDI0OSwgNjAsIDEyNiwgNywgNiwgMSwgNzUsIDEyNiwgNywgNiwgMSwgMjQ1LCA2LCAxMjYsIDcsIDYsIDEsIDI0MywgCi0gICAgMjAyLCAxMjYsIDcsIDYsIDEsIDI0MiwgNjAsIDEyNiwgNywgNiwgMSwgNzMsIDEyNiwgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDEyNiwgNywgNiwgMSwgMjM1LCAyMywgMTI2LCA3LCA2LCAxLCAxNTYsIDEyNiwgNywgNiwgMSwgMTkzLCAxMjYsIDcsIDYsIAotICAgIDEsIDIzMCwgMjUsIDEyNiwgNywgNiwgMSwgNzYsIDEyNiwgNywgNiwgMSwgMjI2LCAxMDUsIDEyNiwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgMTI2LCA3LCA2LCAxLCAxNTMsIDEyNiwgNywgNiwgMSwgMjIyLCA5MSwgMTI2LCA3LCA2LCAxLCAyMTcsIDE1MiwgCi0gICAgMTI2LCA3LCA2LCAxLCA3MCwgMTI2LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjYsIDcsIAotICAgIDYsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDYsIDEsIDIxMSwgMTE3LCAxMjYsIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCAKLSAgICA0MiwgMTI3LCAxMjYsIDIyMywgNTAsIDIxOSwgNDYsIDEyNiwgNDQsIDQyLCAxMjcsIDEyNiwgMjUwLCAzMSwgMjU1LCAxNCwgCi0gICAgMTI2LCAxMjEsIDIzMiwgMjEzLCAxMjYsIDI0MiwgMTM3LCAyNTUsIDE0LCAxMjYsIDcsIDQsIDEsIDYxLCAxMjYsIDcsIDQsIAotICAgIDEsIDI1MywgMTU4LCAxMjYsIDcsIDQsIDEsIDI1MSwgNjYsIDEyNiwgNywgNCwgMSwgMjQ5LCA2MCwgMTI2LCA3LCA0LCAxLCAKLSAgICA3NSwgMTI2LCA3LCA0LCAxLCAyNDUsIDYsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDIsIDEyNiwgNywgNCwgMSwgMjQyLCA2MCwgCi0gICAgMTI2LCA3LCA0LCAxLCA3MywgMTI2LCA3LCA0LCAxLCAyMzUsIDE0NCwgMTI2LCA3LCA0LCAxLCAyMzUsIDIzLCAxMjYsIDcsIAotICAgIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAxLCAxOTMsIDEyNiwgNywgNCwgMSwgMjMwLCAyNSwgMTI2LCA3LCA0LCAxLCA3NiwgCi0gICAgMTI2LCA3LCA0LCAxLCAyMjYsIDEwNSwgMTI2LCA3LCA0LCAxLCAyMjQsIDk2LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCAKLSAgICA0LCAxLCAyMjIsIDkxLCAxMjYsIDcsIDQsIDEsIDIxNywgMTUyLCAxMjYsIDcsIDQsIDEsIDcwLCAxMjYsIDcsIDQsIDEsIAotICAgIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgCi0gICAgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgOTksIDEyNywgMTI2LCA2NywgMjMyLCAKLSAgICAyMTMsIDEyNiwgNDQsIDI0OSwgOTksIDEyNywgMTI2LCAxODIsIDEyNiwgNDMsIDcxLCAyMjYsIDMsIDEyNiwgNDQsIDcxLCAKLSAgICAyMjYsIDMsIDEwMSwgMTA5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEwMSwgNDMsIDI0OSwgMTYxLCAxMjcsIDEwMSwgNDQsIAotICAgIDI0OSwgMTYxLCAxMjcsIDEwMSwgMTA5LCAyNDksIDIxOSwgMTAxLCA1NiwgMjMwLCAyMjQsIDI0NywgMTIwLCAxMDEsIDU2LCAKLSAgICAxLCAyMTEsIDIyNywgMTAxLCA1NiwgMSwgNCwgNjEsIDEwMSwgNTYsIDEsIDQsIDczLCAxMDEsIDU2LCAxLCA0LCA3MCwgCi0gICAgMTAxLCA1NiwgMSwgNCwgNzUsIDEwMSwgNTYsIDEsIDQsIDc2LCAxMDEsIDU2LCAxLCA0LCAxOTEsIDEwMSwgNTYsIDEsIDQsIAotICAgIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCA0LCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgNCwgMjE1LCAxMTgsIDEwMSwgMjM0LCAKLSAgICAyMDEsIDIyNCwgMTczLCAyMTksIDMxLCA3OCwgMTAxLCA1NiwgMSwgNjEsIDEwMSwgNTYsIDEsIDczLCAxMDEsIDU2LCAxLCAKLSAgICA3MCwgMTAxLCA1NiwgMSwgNzUsIDEwMSwgNTYsIDEsIDc2LCAxMDEsIDU2LCAxLCAxNzYsIDEwMSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDEwMSwgNTYsIDEsIDIzMywgMjE3LCAxMDEsIDU2LCAxLCAyMzQsIDE4MiwgMTAxLCA1NiwgMSwgMjM0LCAyOCwgMTAxLCA1NiwgCi0gICAgMSwgMjA2LCAxMDEsIDU2LCAxLCAyMTksIDE5MSwgMTAxLCA1NiwgMSwgMjE4LCA4MywgMTAxLCA1NiwgMSwgMjIxLCAxODEsIAotICAgIDEwMSwgNTYsIDEsIDIxOSwgNTgsIDEwMSwgNTYsIDEsIDIxNywgMTA1LCAxMDEsIDU2LCAxLCAyMTYsIDExNywgMTAxLCA1NiwgCi0gICAgMSwgMjE1LCAxMTgsIDEwMSwgNTYsIDEsIDIxNywgMjIsIDEwMSwgNTYsIDEsIDExMSwgMTAxLCA1NiwgMSwgMTk3LCAxMDEsIAotICAgIDU2LCAxLCAyMjgsIDIzMywgMTAxLCA1NiwgMSwgMjI3LCAyMzcsIDEwMSwgNTYsIDEsIDIyOSwgMTA3LCAxMDEsIDU2LCAxLCAKLSAgICAyMjgsIDc0LCAxMDEsIDU2LCAxLCAxNjIsIDEwMSwgNTYsIDEsIDI0MSwgMTgwLCAxMDEsIDU2LCAxLCAyNDAsIDIyMiwgCi0gICAgMTAxLCA1NiwgMSwgMjQxLCAyMzgsIDEwMSwgNTYsIDEsIDI0MSwgNjgsIDEwMSwgNTYsIDEsIDE4NCwgMTAxLCA1NiwgMSwgCi0gICAgMjMwLCAyMzAsIDEwMSwgNTYsIDEsIDIzMCwgMTAyLCAxMDEsIDU2LCAxLCAyMzEsIDkxLCAxMDEsIDU2LCAxLCAyMzAsIAotICAgIDE2MSwgMTAxLCA1NiwgMSwgMTkxLCAxMDEsIDU2LCAxLCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgMjEwLCAyNDQsIDEwMSwgCi0gICAgNTYsIDEsIDIwNSwgMTAxLCA1NiwgMSwgMjIzLCAzNSwgMTAxLCA1NiwgMSwgMjIyLCAxNDAsIDEwMSwgNTYsIDEsIDIyMywgCi0gICAgMTI4LCAxMDEsIDU2LCAxLCAyMjIsIDIxMSwgMTAxLCA1NiwgMSwgMjEyLCA2NSwgMTAxLCA1NiwgMSwgMjMwLCAyNSwgMTAxLCAKLSAgICA1NiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAxMDEsIDU2LCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDEwMSwgMjQsIDI0NCwgCi0gICAgMTAzLCAxMDEsIDI0LCAxLCAyMzQsIDU4LCAxMDEsIDI0LCAxLCAyMTgsIDIxNSwgMTAxLCAyNCwgMSwgMjM0LCA1MSwgMTAxLCAKLSAgICAyNCwgMSwgMjI4LCAyMjYsIDEwMSwgMjQsIDEsIDIyOCwgMjI0LCAxMDEsIDI0LCAxLCAyMjgsIDIyMywgMTAxLCAyNCwgMSwgCi0gICAgMjE2LCAxMDEsIDEwMSwgMjQsIDEsIDIxOCwgMjA0LCAxMDEsIDI0LCAxLCAyMjMsIDI2LCAxMDEsIDI0LCAxLCAyMjMsIDIxLCAKLSAgICAxMDEsIDI0LCAxLCAyMjMsIDE4LCAxMDEsIDI0LCAxLCAyMjMsIDExLCAxMDEsIDI0LCAxLCAyMjMsIDYsIDEwMSwgMjQsIDEsIAotICAgIDIyMywgMSwgMTAxLCAyNCwgMSwgMjIzLCAxMiwgMTAxLCAyNCwgMSwgMjIzLCAyNCwgMTAxLCAyNCwgMSwgMjMwLCAyMTcsIAotICAgIDEwMSwgMjQsIDEsIDIyNSwgOTUsIDEwMSwgMjQsIDEsIDIxOCwgMjEyLCAxMDEsIDI0LCAxLCAyMjUsIDg0LCAxMDEsIDI0LCAKLSAgICAxLCAyMTksIDE0OCwgMTAxLCAyNCwgMSwgMjE4LCAyMDksIDEwMSwgMjQsIDEsIDIzNiwgNTYsIDEwMSwgMjQsIDEsIDI1MCwgCi0gICAgNDYsIDEwMSwgMjQsIDEsIDIxOCwgMjE5LCAxMDEsIDI0LCAxLCAyNTAsIDEwNiwgMTAxLCAyNCwgMSwgMjM0LCAxMTAsIAotICAgIDEwMSwgMjQsIDEsIDIxNiwgMTczLCAxMDEsIDI0LCAxLCAyMjUsIDEzMSwgMTAxLCAyNCwgMSwgMjQxLCAxNzIsIDEwMSwgCi0gICAgMjQsIDEsIDYxLCAxMDEsIDI0LCAxLCAyNTQsIDI0MywgMTAxLCAyNCwgMSwgMTkxLCAxMDEsIDI0LCAxLCAyMTEsIDkyLCAKLSAgICAxMDEsIDI0LCAxLCAyNDUsIDExNywgMTAxLCAyNCwgMSwgNzUsIDEwMSwgMjQsIDEsIDIxMSwgMzYsIDEwMSwgMjQsIDEsIAotICAgIDIxMSwgNDcsIDEwMSwgMjQsIDEsIDc2LCAxMDEsIDI0LCAxLCAyMTIsIDY1LCAxMDEsIDI0LCAxLCAyMTIsIDYyLCAxMDEsIAotICAgIDI0LCAxLCAyMjYsIDIzNCwgMTAxLCAyNCwgMSwgMjEwLCAyNDQsIDEwMSwgMjQsIDEsIDcwLCAxMDEsIDI0LCAxLCAyMTIsIAotICAgIDExLCAxMDEsIDI0LCAxLCAyMTIsIDIyLCAxMDEsIDI0LCAxLCAyMTEsIDI1MCwgMTAxLCAyNCwgMSwgMjEwLCAyMTIsIDEwMSwgCi0gICAgMjQsIDEsIDI0NSwgNTUsIDEwMSwgMjQsIDEsIDIxMSwgOCwgMTAxLCAyNCwgMSwgNzMsIDEyNiwgMjUwLCAxNzYsIDUwLCAKLSAgICAxMjYsIDIyNCwgMjI4LCA1MCwgMTI2LCAyMjgsIDUyLCA1MCwgMTI2LCAyMzEsIDIzMiwgMTI2LCAyNTEsIDEzNSwgMTMwLCAKLSAgICAxMjYsIDIxMSwgNDAsIDUwLCAxMjYsIDIxMSwgMjE3LCA1MCwgMTAxLCAyNDQsIDE4LCAxOTIsIDIxMywgMjM5LCAxMDEsIAotICAgIDE0MCwgNzQsIDEwMSwgMjE0LCAxNTMsIDc0LCAxMDEsIDk3LCA3NCwgMTAxLCAyNDYsIDEwNCwgNzQsIDEwMSwgODUsIDIxOCwgCi0gICAgMjM0LCAxMDEsIDcxLCAyNTAsIDM1LCAyMzUsIDIwNCwgMjU0LCA5OSwgMjU0LCAxMjAsIDIzNSwgMjA0LCAyNTQsIDk5LCAKLSAgICAyMjAsIDEzNywgMjM1LCAyMDQsIDI1NCwgOTksIDIxNiwgMjM2LCAyMjYsIDI0OSwgMjIzLCA3MiwgMjUwLCAxNDIsIDIyMywgCi0gICAgNzIsIDI1MCwgMTQyLCA2MiwgNTcsIDMsIDI1MywgMTQyLCA2MSwgNjIsIDU3LCAzLCAyNTMsIDExMSwgNzUsIDYyLCA1NywgCi0gICAgMywgMjUzLCAxMjAsIDczLCA2MiwgNTcsIDMsIDI1MywgODgsIDc2LCA2MiwgNTcsIDMsIDI1MywgMTM4LCA3MCwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDE1NywgMjQ4LCAyMjEsIDYyLCA1NywgMywgMjUzLCAxMDQsIDI0OCwgOTAsIDYyLCA1NywgMywgMjUzLCAxNDQsIAotICAgIDI0OCwgMywgNjIsIDU3LCAzLCAyNTMsIDEzNCwgMjQ3LCAxNDUsIDYyLCA1NywgMywgMjUzLCA5OCwgMjQ2LCA3OCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDkyLCAyMzUsIDE0MSwgNjIsIDU3LCAzLCAyNTMsIDEwMywgMjM1LCAxMjYsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMTMsIDIzNSwgNjgsIDYyLCA1NywgMywgMjUzLCA4NCwgMjM1LCA1MSwgNjIsIDU3LCAzLCAyNTMsIDcyLCAxNzYsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMDUsIDIzNCwgMTgyLCA2MiwgNTcsIDMsIDI1MywgODIsIDIzNCwgOTIsIDYyLCA1NywgMywgMjUzLCAKLSAgICA3OSwgMjM0LCAyOCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAyMzMsIDIxNywgNjIsIDU3LCAzLCAyNTMsIDY5LCAxODQsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMzUsIDIzMSwgOTEsIDYyLCA1NywgMywgMjUzLCA3NiwgMjMwLCAyMzAsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMzMsIDIzMCwgMTYxLCA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMzAsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDE0NiwgMTk3LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgMTI0LCAyMjksIDEwNywgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI4LCAyMzMsIDYyLCA1NywgMywgCi0gICAgMjUzLCA5NywgMjI4LCA3NCwgNjIsIDU3LCAzLCAyNTMsIDk0LCAyMjcsIDIzNywgNjIsIDU3LCAzLCAyNTMsIDE1MywgMTkwLCAKLSAgICA2MiwgNTcsIDMsIDI1MywgNzcsIDIyNSwgMjIxLCA2MiwgNTcsIDMsIDI1MywgMTEwLCAyMjUsIDEwOCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDEzNywgMjI1LCAxNiwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMjQsIDE1MCwgNjIsIDU3LCAzLCAyNTMsIDEzMiwgCi0gICAgMjI0LCA4OCwgNjIsIDU3LCAzLCAyNTMsIDcxLCAyMjQsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDUzLCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTE2LCAyMjQsIDQyLCA2MiwgNTcsIDMsIDI1MywgODksIDIwNSwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgCi0gICAgMjIzLCAxMjgsIDYyLCA1NywgMywgMjUzLCA5NiwgMjIzLCAzNSwgNjIsIDU3LCAzLCAyNTMsIDE1NSwgMjIyLCAyMTEsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMjIsIDIyMiwgMTQwLCA2MiwgNTcsIDMsIDI1MywgMTE3LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDAsIAotICAgIDIyMSwgMTgxLCA2MiwgNTcsIDMsIDI1MywgMTA4LCAyMTksIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjE5LCA1OCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDkxLCAyMTgsIDgzLCA2MiwgNTcsIDMsIDI1MywgOTAsIDIxNywgMTA1LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTUxLCAyMTcsIDIyLCA2MiwgNTcsIDMsIDI1MywgMTEyLCAyMTYsIDExNywgNjIsIDU3LCAzLCAyNTMsIDE0OSwgCi0gICAgMTExLCA2MiwgNTcsIDMsIDI1MywgODAsIDIxNSwgMTE4LCA2MiwgNTcsIDMsIDI1MywgOTUsIDIxMiwgNjUsIDYyLCA1NywgCi0gICAgMywgMjUzLCA3NCwgMjEyLCAyMiwgNjIsIDU3LCAzLCAyNTMsIDEwOSwgMjExLCAyNTAsIDYyLCA1NywgMywgMjUzLCAxMDcsIAotICAgIDIxMSwgMjI3LCA2MiwgNTcsIDMsIDI1MywgMTMxLCAyMTAsIDExNiwgNjIsIDU3LCAzLCAyNTMsIDc1LCAyMTAsIDk0LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTI4LCAyMTAsIDIzLCA2MiwgNTcsIDMsIDI1MywgMTIzLCAyNTUsIDc1LCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTA2LCAyNTUsIDc0LCA2MiwgNTcsIDMsIDI1MywgNjUsIDI1MywgMTkyLCA2MiwgNTcsIDMsIDI1MywgNzgsIDI0NiwgNDYsIAotICAgIDYyLCA1NywgMywgMjUzLCA2MSwgMjQ2LCA0NSwgNjIsIDU3LCAzLCAyNTMsIDEwMSwgMjI3LCAxNzQsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxMTksIDIyNCwgMTQ4LCA2MiwgNTcsIDMsIDI1MywgODcsIDIyNCwgMTUyLCA2MiwgNTcsIDMsIDI1MywgNzMsIAotICAgIDIyMywgMTg2LCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMjMsIDE4NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjIsIDIxMCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDgzLCAyMTcsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDYzLCAyMTUsIDc4LCA2MiwgNTcsIDMsIAotICAgIDI1MywgNjAsIDEwNSwgNjIsIDU3LCAxNiwgMjUzLCAxMzAsIDYyLCA1NywgMTYsIDI1MywgMTI5LCA2MiwgNTcsIDE2LCAKLSAgICAyNTMsIDEyNiwgNjIsIDU3LCAxNiwgMjUzLCAxMTQsIDYyLCA1NywgMTYsIDI1MywgMTAyLCA2MiwgNTcsIDE2LCAyNTMsIAotICAgIDEwMCwgNjIsIDU3LCAxNiwgMjUzLCA5MywgNjIsIDU3LCAxNiwgMjUzLCA4NiwgNjIsIDU3LCAxNiwgMjUzLCA4NSwgNjIsIAotICAgIDU3LCAxNiwgMjUzLCA3MCwgNjIsIDU3LCAxNiwgMjUzLCA2NywgNjIsIDU3LCAxNiwgMjUzLCA2NiwgNjIsIDU3LCAxNiwgCi0gICAgMjUzLCA2NCwgNjIsIDU3LCAxNiwgMjUzLCA2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTksIDIzMSwgMTg1LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCA1OCwgMjExLCAyMjEsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyNDgsIDc0LCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICA1NiwgMjQ1LCA5NSwgNjIsIDU3LCAxMDYsIDI1MywgNTUsIDIzMSwgMTU5LCA2MiwgNTcsIDEwNiwgMjUzLCA1NCwgMjE4LCAKLSAgICAxNjIsIDYyLCA1NywgMTA2LCAyNTMsIDUzLCAyNDUsIDM3LCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjIzLCAxNTMsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDUxLCAyMjAsIDYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MCwgMjQxLCAyMzcsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDQ5LCAyMTksIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCA0OCwgMjUxLCAyMDMsIDYyLCA1NywgMTA2LCAyNTMsIDQ3LCAKLSAgICAyNDksIDE0NSwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDI1MSwgMTE1LCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjEyLCAyLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCA0NCwgMjUyLCAxMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQzLCAyMjYsIDIwNSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgNDIsIDIxOCwgMjU0LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjQ5LCA2OCwgNjIsIDU3LCAyMzAsIDE0MiwgCi0gICAgMjUzLCA0MCwgMjM0LCAyMjQsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzksIDIzNCwgMjMyLCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICAzOCwgMjI2LCAyMTgsIDYyLCA1NywgMTA2LCAyNTMsIDM3LCAyMTEsIDIzNiwgNjIsIDU3LCAxMDYsIDI1MywgMzYsIDYyLCAKLSAgICA1NywgMjMwLCAxNDIsIDI1MywgMzUsIDI1NCwgMTcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzQsIDIzMSwgNTIsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDMzLCAyNTEsIDEzNCwgNjIsIDU3LCAxMDYsIDI1MywgMzIsIDI0MiwgMTY2LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAzMSwgNjIsIDU3LCAxMDYsIDI1MywgMzAsIDIxMSwgMjEyLCA2MiwgNTcsIDEwNiwgMjUzLCAyOSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgMjgsIDYyLCA1NywgMTA2LCAyNTMsIDI3LCAyNDAsIDI0OCwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAyMiwgMjE1LCAKLSAgICA5MiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIDEwNiwgMjUzLCAxOSwgCi0gICAgMjQ5LCAyNTAsIDYyLCA1NywgMTA2LCAyNTMsIDE4LCA2MiwgNTcsIDEwNiwgMjUzLCAxNywgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgMTYsIDI0MywgOTMsIDYyLCA1NywgMTA2LCAyNTMsIDE1LCAyNTQsIDQsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCAxMywgNjIsIDU3LCAxMDYsIDI1MywgMTIsIDYyLCA1NywgMTA2LCAyNTMsIDExLCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAxMCwgNjIsIDU3LCAxMDYsIDI1MywgOSwgNjIsIDU3LCAxMDYsIDI1MywgOCwgNjIsIDU3LCAxMDYsIDI1MywgNywgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgNiwgNjIsIDU3LCAxMDYsIDI1MywgNSwgMjMwLCAxMzQsIDYyLCA1NywgMTA2LCAyNTMsIDQsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDMsIDIxNSwgMjM1LCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDYyLCA1NywgMTA2LCAyNTIsIDI1NCwgNjIsIAotICAgIDU3LCAxMDYsIDI1MiwgMjUzLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyNTIsIDI1MSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MiwgMjUwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyNTIsIDI0OCwgNjIsIDU3LCAxMDYsIAotICAgIDI1MiwgMjQ3LCAyNDEsIDIxMSwgNjIsIDU3LCAxMDYsIDI1MiwgMjI2LCAyNDQsIDI4LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMjMsIDI1MiwgMTE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTgsIDIxOSwgNSwgNjIsIDU3LCAxMDYsIDI1MiwgMjE3LCA3NCwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDIxNywgMjM2LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMTQsIDYyLCA1NywgMTA2LCAyNTIsIDIxMywgNjIsIDU3LCAxMDYsIDI1MiwgMjEyLCAyMTEsIDI1NCwgMjUwLCAxMzksIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIxMSwgMjUwLCAxMzksIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgMjUwLCAxNDAsIDI0MywgCi0gICAgMjU1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDksIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA4LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUyLCAyMDcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MiwgMjA2LCAyNDcsIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAyNTIsIDIwMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjAxLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUyLCAyMDAsIDYyLCA1NywgMTA2LCAyNTIsIDE5OSwgMjQ4LCAxNTksIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMTk3LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTYsIDYyLCA1NywgMTA2LCAyNTIsIDE5NSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMTk0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMjMsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyNDQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyNDIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzQsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyMzEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyMjksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjQsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjEsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMjAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTksIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAxOTMsIDI1NCwgMjM2LCAyMTEsIDIwOSwgMjIwLCAKLSAgICAxMzgsIDIzMiwgMjEzLCAyNTQsIDIzNiwgMjExLCAyMDksIDIyMCwgMTM4LCAyNDcsIDEyMCwgMjU0LCAyMzYsIDI1MCwgCi0gICAgMTMwLCA3OCwgMjU0LCAyMzYsIDU0LCAxMTAsIDI1NCwgMjM2LCA1NCwgMTA1LCAyNTQsIDIzNiwgNTQsIDE1OCwgMjU0LCAKLSAgICAyMzYsIDU0LCAxNjEsIDI1NCwgMjM2LCA1NCwgMTg5LCAyNTQsIDIzNiwgNTQsIDE5NCwgMjU0LCAyMzYsIDU0LCAxOTgsIAotICAgIDI1NCwgMjM2LCA1NCwgMTk1LCAyNTQsIDIzNiwgNTQsIDIwMCwgMjU0LCAyMzYsIDU0LCAyMTYsIDI0NywgMjU0LCAyMzYsIAotICAgIDU0LCAyMTUsIDczLCAyNTQsIDIzNiwgNTQsIDIxNiwgMTYyLCAyNTQsIDIzNiwgNTQsIDI0NCwgMTUsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ0LCAxMTQsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMTEsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTYsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ1LCAxODQsIDI1NCwgMjM2LCA1NCwgMjI4LCAxOTUsIDI1NCwgMjM2LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjU0LCAyMzYsIAotICAgIDU0LCAxMTMsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEzNCwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMSwgCi0gICAgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMjUsIDI0MCwgCi0gICAgMjEwLCAyNTQsIDIzNiwgNTQsIDIyMCwgMTIyLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDUsIDE5MywgMjQwLCAyMTAsIAotICAgIDI1NCwgMjM2LCA1NCwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEyMywgMjE2LCAxNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMTEzLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAxMzQsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTEsIAotICAgIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgODEsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxOSwgMTI1LCAyMTYsIAotICAgIDE0NywgMjU0LCAyMzYsIDU0LCAyMjAsIDEyMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ1LCAxOTMsIDIxNiwgMTQ3LCAKLSAgICAyNTQsIDIzNiwgNTQsIDIyOCwgMjAwLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDI1NCwgCi0gICAgMjM2LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE2LCAxNjMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDI0NCwgMTYsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTE1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAKLSAgICAyMTksIDExMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTcsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NSwgCi0gICAgMTg1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMjgsIDE5NiwgMjE2LCAxNDcsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNTIsIAotICAgIDEyOCwgMjE0LCAxNzMsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAxNCwgCi0gICAgMjIxLCAxNzYsIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIDE0LCAyMTYsIDE2OSwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgCi0gICAgMTQsIDI0NCwgNCwgMjE4LCA1OSwgMjU0LCAyMzYsIDI0NiwgODEsIDIzMSwgOTAsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgCi0gICAgMjM2LCAyMzIsIDE5OSwgMjMxLCA5MCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIzMSwgOTAsIDIyMSwgMTc2LCAKLSAgICAyMTgsIDU5LCAyNTQsIDIzNiwgMjMxLCA5MCwgMjE2LCAxNjksIDIxOCwgNTksIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIyNCwgMjEsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MiwgMjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDI0NiwgMTAwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTg5LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTQsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxNiwgCi0gICAgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAKLSAgICA4MSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIAotICAgIDE5NCwgMjQ0LCAxMTUsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MCwgMjExLCAyMTcsIDY3LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIxNiwgMTQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE2LCAxNDgsIDIxNywgNjcsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjQwLCAyMTEsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxOCwgMTUwLCAKLSAgICAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyMTYsIDE0OCwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIAotICAgIDI0OCwgMjE2LCAxNDgsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMzAsIDE2NCwgMjYsIDI1NSwgNiwgMjQxLCAyMDUsIDEyMywgCi0gICAgMjI1LCAzMSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDExMCwgMjYsIDI1NSwgNiwgMjQxLCAyMDEsIDExMCwgMjYsIDI1NSwgCi0gICAgNiwgMjQ1LCAxMDQsIDEwNSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEwNSwgMjYsIDI1NSwgNiwgMjQ5LCA2NSwgMTEzLCAKLSAgICAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyNDUsIDEwNCwgMTEzLCAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMTg5LCAKLSAgICAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyMTYsIDI0OCwgMjU0LCAxNDEsIAotICAgIDE3LCAyNiwgMjU1LCA2LCAyNDEsIDIwMSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIzMSwgNDEsIDIxNiwgMjQ3LCAyNiwgCi0gICAgMjU1LCA2LCAyMTYsIDE4MSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyMTYsIDE2MiwgMjYsIDI1NSwgNiwgCi0gICAgMjE1LCAyMDMsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCAxMTUsIDI1NCwgMTQxLCAxNywgMjYsIAotICAgIDI1NSwgNiwgMjQxLCAyMDEsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIAotICAgIDIxNiwgMTgxLCAxMjMsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTM0LCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgCi0gICAgMjQ1LCAxMDQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAKLSAgICAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUwLCAyMjcsIDI0NCwgODEsIDI0MCwgCi0gICAgMjEwLCAyNiwgMjU1LCA2LCAyMjksIDE4MiwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMjMsIAotICAgIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCA4MSwgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDI0OCwgNTcsIAotICAgIDI0NCwgODEsIDIzMCwgMTY0LCAyNiwgMjU1LCA2LCAyMTgsIDExOCwgMjQ0LCAxMTUsIDIzMCwgMTY0LCAyNiwgMTIzLCAKLSAgICAxNjMsIDUwLCAyNiwgMTIzLCAxNjMsIDUsIDI1NCwgMTQxLCAxNywgMjYsIDExMywgMjE2LCAxNjcsIDUwLCAyNiwgMTM0LCAKLSAgICAyMjQsIDIwLCA1MCwgMjYsIDIxMSwgNDUsIDUwLCAyNiwgMjE3LCA2OCwgNTAsIDI2LCAyNDYsIDEwMSwgNTAsIDI2LCAyMjYsIAotICAgIDI0NiwgNTAsIDI2LCAxMTMsIDIyNiwgMjQ1LCA1MCwgMjYsIDEzNCwgMjI2LCAyNDUsIDUwLCAyNiwgMjQ0LCAxMSwgMjI2LCAKLSAgICAyNDUsIDUwLCAyNiwgMjQ0LCA4MSwgMjI2LCAyNDUsIDUwLCAyNiwgMjMxLCAzNSwgNTAsIDI2LCAyMzMsIDE1NywgMjUyLCAKLSAgICAxMjgsIDUwLCAyNiwgMjMyLCAxOTQsIDUwLCAyNiwgMjI2LCAxMzEsIDUwLCAyNiwgMjExLCAxNTksIDUwLCAyNiwgMjUzLCAKLSAgICAyNDMsIDUwLCAyNiwgMjU0LCAwLCA1MCwgMjYsIDI0MiwgMTQ0LCA1MCwgMjYsIDIxNSwgMTg2LCAyNTIsIDEyOCwgNTAsIAotICAgIDI2LCAyMTAsIDg3LCA1MCwgMjIyLCAxOTgsIDIyMCwgMTEzLCA1MCwgMjIyLCAxOTgsIDIxNCwgMTg1LCA1MCwgMjIyLCAKLSAgICAxOTgsIDIyMCwgMTQyLCA1MCwgMjIyLCAxOTgsIDIyMCwgMTExLCA1MCwgMjIyLCAxOTgsIDI0NywgMjEzLCAyMjAsIDExMSwgCi0gICAgNTAsIDIyMiwgMTk4LCAyMTksIDE2OCwgNTAsIDIyMiwgMTk4LCAyNDgsIDUzLCA1MCwgMjIyLCAxOTgsIDIyNCwgNiwgNTAsIAotICAgIDIyMiwgMTk4LCAyMjAsIDEyOSwgNTAsIDIyMiwgMTk4LCAyNDYsIDYwLCA1MCwgMjIyLCAxOTgsIDI1MywgMjM4LCA1MCwgCi0gICAgMjIyLCAxOTgsIDI1MCwgMTcxLCA1MCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDIxMywgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMjUsIDI0LCAyNDEsIDIzNSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTcsIDQ1LCAyNDEsIDIzNSwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDI0NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDEwMSwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyMTEsIDIyMSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDEsIDIxMSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyNDMsIDg1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNiwgMTE2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDc0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MSwgMTY5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMjksIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQ5LCAyNDQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjMxLCAxODQsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjMxLCAxMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIxLCAyMTYsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjMyLCAyMzcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUxLCAxODgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjUwLCAyMzEsIDIyNSwgMzUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ3LCAxMzMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgCi0gICAgNSwgMjQ5LCAyMjMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE5LCA4NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDksIAotICAgIDIyNCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTIsIDYzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMTYsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQwLCAyNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQxLCAxNzgsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjUxLCAxMTIsIDIzMywgMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAyMjQsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjIzLCAxNTMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ1LCAyMzAsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjQ2LCAxMDcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE1LCAxMDUsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjUyLCA2NiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDM2LCAyMTUsIDIzNSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMTMsIDE1OSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjYsIDE4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDIyMiwgMTkwLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIzMiwgMjI0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNiwgCi0gICAgMTE1LCAyNTIsIDE4NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDQsIDQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDI0MiwgMTM4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxOCwgMTE5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDQsIDI1MywgCi0gICAgMTY4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxMiwgMzIsIDI1MiwgMTQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDM4LCAKLSAgICAyMjYsIDI0OCwgOTEsIDIzMiwgNjAsIDEsIDYxLCAyMzIsIDYwLCAxLCA3NSwgMjMyLCA2MCwgMSwgMjUzLCAxNTgsIDIzMiwgCi0gICAgNjAsIDEsIDI1MiwgMTksIDIzMiwgNjAsIDEsIDI0MywgMjAyLCAyMzIsIDYwLCAxLCAyNDksIDYwLCAyMzIsIDYwLCAxLCAKLSAgICA3MywgMjMyLCA2MCwgMSwgMjEyLCA5OCwgMjMyLCA2MCwgMSwgMjEwLCAxNTksIDIzMiwgNjAsIDEsIDIxNiwgMjEwLCAyMzIsIAotICAgIDYwLCAxLCAyMzUsIDE0NCwgMjMyLCA2MCwgMSwgMjM1LCAyMywgMjMyLCA2MCwgMSwgMjI0LCA5NiwgMjMyLCA2MCwgMSwgCi0gICAgMTU2LCAyMzIsIDYwLCAxLCAxOTMsIDIzMiwgNjAsIDEsIDIzMCwgMjUsIDIzMiwgNjAsIDEsIDIzMCwgMTY2LCAyMzIsIDYwLCAKLSAgICAxLCAyMjgsIDExMSwgMjMyLCA2MCwgMSwgNzAsIDIzMiwgNjAsIDEsIDIyNiwgMTA1LCAyMzIsIDYwLCAxLCAyMzQsIDQ3LCAKLSAgICAyMzIsIDYwLCAxLCAxNTMsIDIzMiwgNjAsIDEsIDIyMiwgOTEsIDIzMiwgNjAsIDEsIDIxNywgMTUyLCAyMzIsIDYwLCAxLCAKLSAgICAyMTUsIDE1OSwgMjMyLCA2MCwgMSwgMjU0LCAxMjMsIDIzMiwgNjAsIDEsIDI0NSwgMTUwLCAyMzIsIDYwLCAxLCAyNDIsIAotICAgIDYwLCAyMzIsIDYwLCAxLCAyMTEsIDE3OCwgMjUwLCAyMzcsIDEsIDYxLCAyNTAsIDIzNywgMSwgMjI2LCA5MSwgMjUwLCAKLSAgICAyMzcsIDEsIDI0OSwgNjAsIDI1MCwgMjM3LCAxLCAxNTYsIDI1MCwgMjM3LCAxLCAyMTQsIDExNiwgMjUwLCAyMzcsIDEsIAotICAgIDE1MywgMjUwLCAyMzcsIDEsIDIzMywgNjIsIDI1MCwgMjM3LCAxLCAyNTUsIDc1LCAyNTAsIDIzNywgMSwgMjI0LCA5NiwgCi0gICAgMjUwLCAyMzcsIDEsIDI1MywgMTU4LCAyNTAsIDIzNywgMSwgMTkzLCAyNTAsIDIzNywgMSwgNzYsIDI1MCwgMjM3LCAxLCAKLSAgICAyNDgsIDIyMywgMjUwLCAyMzcsIDEsIDIxNywgMTUyLCAyNTAsIDIzNywgMSwgMjIwLCAxMDQsIDI1MCwgMjM3LCAxLCAyMjAsIAotICAgIDEwMywgMjUwLCAyMzcsIDEsIDIyMiwgOTEsIDI1MCwgMjM3LCAxLCAyNTEsIDY1LCAyNTAsIDIzNywgMSwgNzAsIDI1MCwgCi0gICAgMjM3LCAxLCAyMjgsIDExMSwgMjUwLCAyMzcsIDEsIDIxMSwgMTc4LCAyNTAsIDIzNywgMSwgMjMwLCAyNSwgMjUwLCAyMzcsIAotICAgIDEsIDIxNSwgMTU4LCAyNTAsIDIzNywgMSwgMjI2LCAxMDUsIDI1MCwgMjM3LCAxLCAyMTgsIDIyNiwgMjUwLCAyMzcsIDEsIAotICAgIDczLCAyNTAsIDIzNywgMSwgNzUsIDI1MCwgMjM3LCAxLCAyMTQsIDExMywgMjUwLCAyMzcsIDEsIDIzNSwgMjMsIDI1MCwgCi0gICAgMjM3LCAxLCAyMzUsIDE0LCAyNTAsIDIzNywgMSwgMjI5LCAxNTAsIDI1MCwgMjM3LCAxLCAyMTQsIDExOCwgMjUwLCAyMzcsIAotICAgIDEsIDI0MywgMjAyLCAyNTAsIDIzNywgMSwgMjQzLCAxMzcsIDI1MCwgMjM3LCAxLCAyMTgsIDE2OCwgMjUwLCAyMzcsIDEsIAotICAgIDIxOCwgMTY3LCAyNTAsIDIzNywgMSwgMjI5LCA3OSwgMjUwLCAyMzcsIDEsIDIzNiwgMzMsIDI1MCwgMjM3LCAxLCAyNTEsIAotICAgIDY0LCAyNTAsIDIzNywgMSwgMjE1LCAxNTksIDI1MCwgMjM3LCAxLCAyMTQsIDExNSwgMjUwLCAyMzcsIDEsIDIyMiwgMTgwLCAKLSAgICAyNTAsIDIzNywgMSwgMjMxLCAxMjksIDI1MCwgMjM3LCAxLCAyMzEsIDEyOCwgMjUwLCAyMzcsIDEsIDIzMSwgMTI3LCAyNTAsIAotICAgIDIzNywgMSwgMjMxLCAxMjYsIDI1MCwgMjM3LCAxLCAyMzMsIDYxLCAyNTAsIDIzNywgMSwgMjQ1LCAyMzQsIDI1MCwgMjM3LCAKLSAgICAxLCAyMTQsIDExNCwgNTUsIDMyLCAxLCA2MSwgNTUsIDMyLCAxLCAyNTIsIDc1LCA1NSwgMzIsIDEsIDIzNCwgMTgyLCA1NSwgCi0gICAgMzIsIDEsIDI0OCwgOTAsIDU1LCAzMiwgMSwgNzUsIDU1LCAzMiwgMSwgMjEzLCAyNTUsIDU1LCAzMiwgMSwgMjEwLCA5NCwgCi0gICAgNTUsIDMyLCAxLCAyNDEsIDIzOCwgNTUsIDMyLCAxLCAyMTYsIDE5NSwgNTUsIDMyLCAxLCA3MywgNTUsIDMyLCAxLCAxNzYsIAotICAgIDU1LCAzMiwgMSwgMjQ1LCAxNzQsIDU1LCAzMiwgMSwgMjQ1LCAxNTksIDU1LCAzMiwgMSwgMjQ1LCAxNTAsIDU1LCAzMiwgMSwgCi0gICAgMjQ1LCA3NSwgNTUsIDMyLCAxLCA3NiwgNTUsIDMyLCAxLCAyMjUsIDIyMSwgNTUsIDMyLCAxLCAyMjAsIDYzLCA1NSwgMzIsIAotICAgIDEsIDIzMywgMjE3LCA1NSwgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjQ1LCA4MiwgNTUsIDMyLCAxLCAyMTcsIDIyLCAKLSAgICA1NSwgMzIsIDEsIDcwLCA1NSwgMzIsIDEsIDI0NSwgMTc3LCA1NSwgMzIsIDEsIDIyNSwgMTM2LCA1NSwgMzIsIDEsIDIzNCwgCi0gICAgMTE5LCA1NSwgMzIsIDEsIDI0NSwgMjAyLCA1NSwgMzIsIDEsIDI0NSwgODQsIDU1LCAzMiwgMSwgMjUwLCAxMzEsIDU1LCAKLSAgICAzMiwgMSwgMjM2LCAzMywgNTUsIDMyLCAxLCAyMTQsIDExOCwgNTUsIDMyLCAyMjcsIDE5OCwgMTEwLCA1NSwgMzIsIDIyNywgCi0gICAgMTk4LCAxODksIDU1LCAzMiwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA1NSwgMzIsIDIyNywgMTk4LCAyNDQsIDExNCwgMjQyLCAKLSAgICAxNTMsIDEsIDI1NCwgMjA0LCAyNDIsIDE1MywgMSwgMjUyLCAxNjMsIDI0MiwgMTUzLCAxLCAyNDIsIDIxMSwgMjQyLCAxNTMsIAotICAgIDEsIDI0OCwgMjA0LCAyNDIsIDE1MywgMSwgMjU0LCAyMDAsIDI0MiwgMTUzLCAxLCAyMjQsIDc5LCAyNDIsIDE1MywgMSwgCi0gICAgMjM1LCAxNTUsIDI0MiwgMTUzLCAxLCAyNDIsIDM5LCAyNDIsIDE1MywgMSwgMjE2LCAxNTgsIDI0MiwgMTUzLCAxLCAyNDUsIAotICAgIDE4MywgMjQyLCAxNTMsIDEsIDIzMywgMTkwLCAyNDIsIDE1MywgMSwgMjMzLCAxMTMsIDI0MiwgMTUzLCAxLCAyMzEsIDE3OSwgCi0gICAgMjQyLCAxNTMsIDEsIDIyOSwgMTg0LCAyNDIsIDE1MywgMSwgMjM1LCAxMTksIDI0MiwgMTUzLCAxLCAyMTQsIDEzNiwgMjQyLCAKLSAgICAxNTMsIDEsIDIyNiwgNjksIDI0MiwgMTUzLCAxLCAyMjgsIDE5NSwgMjQyLCAxNTMsIDEsIDIyMywgMTY1LCAyNDIsIDE1MywgCi0gICAgMSwgMjIxLCAyMTgsIDI0MiwgMTUzLCAxLCAyMTcsIDQsIDI0MiwgMTUzLCAxLCAyMTEsIDIzNCwgMjQyLCAxNTMsIDEsIAotICAgIDI0NCwgMTc4LCAyNDIsIDE1MywgMSwgMjM2LCAzNywgMjQyLCAxNTMsIDEsIDI0MCwgMTk5LCAyNDIsIDE1MywgMSwgMjI2LCAKLSAgICAxMzksIDI0MiwgMTUzLCAxLCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIxNCwgMjA5LCAxLCAyNTQsIDE0NywgMjE0LCAyMDksIDEsIAotICAgIDI1MiwgMjYsIDIxNCwgMjA5LCAxLCAyNDMsIDEwOCwgMjE0LCAyMDksIDEsIDIzNCwgMTMyLCAyMTQsIDIwOSwgMSwgMjQ4LCAKLSAgICA1NCwgMjE0LCAyMDksIDEsIDI0MSwgNjgsIDIxNCwgMjA5LCAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIAotICAgIDIxNCwgMjA5LCAxLCAyNDAsIDI0MSwgMjE0LCAyMDksIDEsIDIxNiwgMjMwLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgCi0gICAgMjA5LCAxLCAyMzQsIDI1MCwgMjE0LCAyMDksIDEsIDIyMCwgMjAsIDIxNCwgMjA5LCAxLCAyMzMsIDk4LCAyMTQsIDIwOSwgCi0gICAgMSwgMjMxLCA2NSwgMjE0LCAyMDksIDEsIDI0OCwgMjEsIDIxNCwgMjA5LCAxLCAyMjcsIDE5NCwgMjE0LCAyMDksIDEsIAotICAgIDIxMCwgMTMsIDIxNCwgMjA5LCAxLCAyMjEsIDI0OCwgMjE0LCAyMDksIDEsIDI1NCwgMTk2LCAyMTQsIDIwOSwgMSwgMjI0LCAKLSAgICAxNTAsIDIxNCwgMjA5LCAxLCAyMjIsIDI1LCAyMTQsIDIwOSwgMSwgMjI0LCAzNSwgMjE0LCAyMDksIDEsIDIyMywgMTQ0LCAKLSAgICAyMTQsIDIwOSwgMSwgMjE2LCAxOTksIDIxNCwgMjA5LCAxLCAyNDIsIDI0NCwgMjE0LCAyMDksIDEsIDExMSwgMjE0LCAyMDksIAotICAgIDEsIDczLCAyMTQsIDIwOSwgMSwgNzAsIDIxNCwgMjA5LCAxLCAyMTgsIDE3OSwgMjE0LCAyMDksIDIxMSwgMjA5LCAyNDcsIAotICAgIDE3MiwgNTUsIDIyNSwgMTY5LCA1LCA2MSwgNTUsIDIyNSwgMTY5LCA1LCA3MywgNTUsIDIyNSwgMTY5LCA1LCA3MCwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAxNzYsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAyMTcsIDU1LCAyMjUsIDE2OSwgNSwgMjQzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjQyLCAxMTMsIDU1LCAyMjUsIDE2OSwgNSwgMjExLCAxNjUsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjUxLCAzMywgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDE0MSwgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDEwOCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTcsIDEwNSwgNTUsIDIyNSwgMTY5LCA1LCAyMTUsIDExOCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIyMSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDMsIDU1LCAyMjUsIDE2OSwgNSwgMjQ2LCA3OCwgNTUsIDIyNSwgMTY5LCA1LCAyMTYsIAotICAgIDIwOCwgNTUsIDIyNSwgMTY5LCA1LCAxOTAsIDU1LCAyMjUsIDE2OSwgNSwgMjUyLCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjQ0LCAxOTYsIDU1LCAyMjUsIDE2OSwgNSwgMTk3LCA1NSwgMjI1LCAxNjksIDUsIDIyNywgMjM3LCA1NSwgMjI1LCAxNjksIAotICAgIDUsIDE4NCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDIzMCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDEwMiwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgMjE0LCAyNywgNTUsIDIyNSwgMTY5LCA1LCAyMTMsIDE3NiwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAyMDUsIDU1LCAyMjUsIDE2OSwgNSwgMjIyLCAxNDAsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjA2LCA1NSwgMjI1LCAxNjksIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNjksIDUsIDIyMCwgCi0gICAgMTAyLCA1NSwgMjI1LCAxNjksIDUsIDIxOCwgMjIzLCA1NSwgMjI1LCAxNjksIDUsIDE2MiwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNTMsIDE4NiwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NSwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIwMCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDE5OSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNTIsIDE3MCwgNTUsIDIyNSwgMTY5LCA1LCAyNTEsIDg1LCA1NSwgMjI1LCAxNjksIDIxMSwgCi0gICAgMjA5LCAyNDcsIDE3MiwgNTUsIDIyNSwgMTY5LCA1NCwgMTEwLCA1NSwgMjI1LCAxNjksIDU0LCAxMDUsIDU1LCAyMjUsIAotICAgIDE2OSwgNTQsIDIxNiwgMjQ3LCA1NSwgMjI1LCAxNjksIDU0LCAyMTUsIDczLCA1NSwgMjI1LCAxNjksIDU0LCAyNDAsIDIxMCwgCi0gICAgMTgxLCA2LCAxLCAxOTksIDczLCAxODEsIDYsIDEsIDE5OSwgNzUsIDE4MSwgNiwgMSwgMTk5LCA2MSwgMTgxLCA2LCAxLCAKLSAgICAxOTksIDI1NCwgMjA5LCAxODEsIDYsIDEsIDE5OSwgNzYsIDE4MSwgNiwgMSwgMTk5LCAyMjYsIDE4MywgMTgxLCA2LCAxLCAKLSAgICAyMTksIDI1MSwgNzMsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc1LCAxODEsIDYsIDEsIDIxOSwgMjUxLCA2MSwgMTgxLCA2LCAKLSAgICAxLCAyMTksIDI1MSwgMjU0LCAyMDksIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUxLCAyMjYsIAotICAgIDE4MywgMTgxLCA2LCAxLCAyNTMsIDE2NywgMTgxLCA2LCAxLCAyMjYsIDExNiwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCAKLSAgICA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjAsIDE4MSwgNiwgMSwgMjI1LCAyMTEsIDE4MSwgNiwgMSwgMjUyLCAKLSAgICA2NiwgMTgxLCA2LCAxLCAyMTcsIDExLCAxODEsIDYsIDEsIDI0OCwgNzcsIDE4MSwgNiwgMSwgMjUwLCAxMjgsIDE4MSwgNiwgCi0gICAgMSwgMjM1LCAxMjQsIDE4MSwgNiwgMSwgMjM0LCAxODksIDE4MSwgNiwgMSwgMjQzLCA4MywgMTgxLCA2LCAxLCAyNDUsIAotICAgIDIwMiwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAyNDUsIDU5LCAxODEsIDYsIDEsIDIxNiwgMTk0LCAxODEsIAotICAgIDYsIDEsIDI0NSwgODIsIDE4MSwgNiwgMSwgMjEwLCA5MiwgMTgxLCA2LCAxLCAyNDUsIDc1LCAxODEsIDYsIDEsIDIxMCwgCi0gICAgNzMsIDE4MSwgNiwgMSwgMjQ1LCA5MiwgMTgxLCA2LCAxLCAyNDUsIDE3NCwgMTgxLCA2LCAxLCAyNDUsIDE1OSwgMTgxLCA2LCAKLSAgICAxLCAyNDUsIDE1MCwgMTgxLCA2LCAxLCAyNDUsIDEzOCwgMTgxLCA2LCAxLCAyMjYsIDIxOSwgMTgxLCA2LCAxLCAyNDUsIAotICAgIDM4LCAxODEsIDQsIDEsIDE5OSwgNzMsIDE4MSwgNCwgMSwgMTk5LCA3NSwgMTgxLCA0LCAxLCAxOTksIDYxLCAxODEsIDQsIAotICAgIDEsIDE5OSwgMjU0LCAyMDksIDE4MSwgNCwgMSwgMTk5LCA3NiwgMTgxLCA0LCAxLCAxOTksIDIyNiwgMTgzLCAxODEsIDQsIAotICAgIDEsIDIxOSwgMjUxLCA3MywgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzUsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDYxLCAxODEsIAotICAgIDQsIDEsIDIxOSwgMjUxLCAyNTQsIDIwOSwgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzYsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIAotICAgIDIyNiwgMTgzLCAxODEsIDQsIDEsIDI1MywgMTY3LCAxODEsIDQsIDEsIDIyNiwgMTE2LCAxODEsIDQsIDEsIDIxMSwgMTk1LCAKLSAgICAxODEsIDQsIDEsIDIxMSwgNDQsIDE4MSwgNCwgMSwgMjQyLCA2MCwgMTgxLCA0LCAxLCAyMjUsIDIxMSwgMTgxLCA0LCAxLCAKLSAgICAyNTIsIDY2LCAxODEsIDQsIDEsIDIxNywgMTEsIDE4MSwgNCwgMSwgMjQ4LCA3NywgMTgxLCA0LCAxLCAyNTAsIDEyOCwgCi0gICAgMTgxLCA0LCAxLCAyMzUsIDEyNCwgMTgxLCA0LCAxLCAyMzQsIDE4OSwgMTgxLCA0LCAxLCAyNDMsIDgzLCAxODEsIDQsIDEsIAotICAgIDI0NSwgMjAyLCAxODEsIDQsIDEsIDIxMywgMjUwLCAxODEsIDQsIDEsIDI0NSwgNTksIDE4MSwgNCwgMSwgMjE2LCAxOTQsIAotICAgIDE4MSwgNCwgMSwgMjQ1LCA4MiwgMTgxLCA0LCAxLCAyMTAsIDkyLCAxODEsIDQsIDEsIDI0NSwgNzUsIDE4MSwgNCwgMSwgCi0gICAgMjEwLCA3MywgMTgxLCA0LCAxLCAyNDUsIDkyLCAxODEsIDQsIDEsIDI0NSwgMTc0LCAxODEsIDQsIDEsIDI0NSwgMTU5LCAKLSAgICAxODEsIDQsIDEsIDI0NSwgMTUwLCAxODEsIDQsIDEsIDI0NSwgMTM4LCAxODEsIDQsIDEsIDIyNiwgMjE5LCAxODEsIDQsIDEsIAotICAgIDI0NSwgMzgsIDIyMCwgNjksIDEsIDIyNSwgMjA5LCAyMjAsIDY5LCAxLCAyMTYsIDUsIDIyMCwgNjksIDEsIDIzNCwgOTEsIAotICAgIDIyMCwgNjksIDEsIDI0NCwgMTQ3LCAyMjAsIDY5LCAxLCAyMTYsIDE3MiwgMjIwLCA2OSwgMSwgMjE5LCA1OCwgMjIwLCA2OSwgCi0gICAgMSwgMjE4LCAxNCwgMjIwLCA2OSwgMSwgMjUwLCA2MSwgMjIwLCA2OSwgMSwgMjExLCA0NiwgMjIwLCA2OSwgMSwgMjQwLCAKLSAgICAyMDksIDIyMCwgNjksIDEsIDI1MiwgNSwgMjIwLCA2OSwgMSwgMjQ4LCA4OSwgMjIwLCA2OSwgMSwgMjQzLCAxMjEsIDIyMCwgCi0gICAgNjksIDEsIDIxMywgMTIzLCAyMjAsIDY5LCAxLCAyMTYsIDE3NiwgMjIwLCA2OSwgMSwgMjEwLCAyMSwgMjIwLCA2OSwgMSwgCi0gICAgMjMxLCA4OSwgMjIwLCA2OSwgMSwgMjM1LCA0OSwgMjIwLCA2OSwgMSwgMjExLCAyMjUsIDIyMCwgNjksIDEsIDI0MiwgNDgsIAotICAgIDIyMCwgNjksIDEsIDIzMiwgMTQyLCAyMjAsIDY5LCAxLCAyMzAsIDE4OSwgMjIwLCA2OSwgMSwgMjM2LCA0MCwgMjIwLCA2OSwgCi0gICAgMSwgMjQ1LCAyMDEsIDIyMCwgNjksIDEsIDI1MywgMjMxLCAyMjAsIDY5LCAxLCAyNTQsIDI0NywgMjIwLCA2OSwgMSwgMjI2LCAKLSAgICAxOTYsIDIyMCwgNjksIDEsIDIxMSwgMjEyLCAyMjAsIDY5LCAxLCAyMjYsIDEzMCwgMjIwLCA2OSwgMSwgMjU0LCAyMDksIAotICAgIDIyMCwgNjksIDEsIDIyMiwgMjA4LCAyMjAsIDY5LCAxLCAyMjcsIDE5NCwgMjIwLCA2OSwgMSwgMjQ1LCAyMTcsIDIyMCwgCi0gICAgNjksIDEsIDI1NCwgMjE0LCAyMjAsIDY5LCAxLCAyNDAsIDExMSwgMjIwLCA2OSwgMSwgMjE0LCAxNjMsIDIyMCwgNjksIDEsIAotICAgIDIyNiwgMjU0LCAyMjAsIDY5LCAxLCAyMjYsIDE3NiwgMjIwLCA2OSwgMSwgMjI2LCAyMTgsIDIyMCwgNjksIDEsIDI1MywgCi0gICAgMTcwLCAyMjAsIDY5LCAxLCAyNTQsIDE5LCAyMjAsIDY5LCAxLCAyMjYsIDE1OCwgMjIwLCA2OSwgMSwgMjU0LCAxOTIsIAotICAgIDIyMCwgNjksIDEsIDI0NSwgODYsIDIyMCwgNjksIDEsIDI1MywgMjUzLCAyMjAsIDY5LCAxLCAyNDUsIDIyNywgMjIwLCA2OSwgCi0gICAgMSwgMjQwLCAxMTgsIDIyMCwgNjksIDEsIDIxMSwgMTMsIDIyNiwgMTQxLCAxLCAyNTQsIDE3MCwgMjI2LCAxNDEsIDEsIAotICAgIDI1MiwgMTkxLCAyMjYsIDE0MSwgMSwgMjE3LCAxMDUsIDIyNiwgMTQxLCAxLCAyMzUsIDE0MSwgMjI2LCAxNDEsIDEsIDIxMSwgCi0gICAgMTY1LCAyMjYsIDE0MSwgMSwgMjM0LCAxMzIsIDIyNiwgMTQxLCAxLCAyNDgsIDc2LCAyMjYsIDE0MSwgMSwgMjA1LCAyMjYsIAotICAgIDE0MSwgMSwgMjA2LCAyMjYsIDE0MSwgMSwgMjIwLCAyNiwgMjI2LCAxNDEsIDEsIDI0OCwgMjUsIDIyNiwgMTQxLCAxLCAKLSAgICAyNTAsIDIxNSwgMjI2LCAxNDEsIDEsIDI0MywgMTM1LCAyMjYsIDE0MSwgMSwgMjQ0LCAxOTYsIDIyNiwgMTQxLCAxLCAyMjQsIAotICAgIDg2LCAyMjYsIDE0MSwgMSwgMjM1LCA5LCAyMjYsIDE0MSwgMSwgMjMzLCAxMzAsIDIyNiwgMTQxLCAxLCAyMzAsIDIwMCwgCi0gICAgMjI2LCAxNDEsIDEsIDIyNywgMTc4LCAyMjYsIDE0MSwgMSwgMjEyLCAzMCwgMjI2LCAxNDEsIDEsIDE2MiwgMjI2LCAxNDEsIAotICAgIDEsIDE5MSwgMjI2LCAxNDEsIDEsIDYxLCAyMjYsIDE0MSwgMSwgNzUsIDIyNiwgMTQxLCAxLCA3MywgMjI2LCAxNDEsIDEsIAotICAgIDc2LCAyMjYsIDE0MSwgMSwgNzAsIDIyNiwgMTQxLCAxLCAyNTUsIDczLCAyMjYsIDE0MSwgMSwgMjQ1LCAyMDksIDIyNiwgCi0gICAgMTQxLCAxLCAyMjYsIDE4MywgMjI2LCAxNDEsIDIxLCAyMTAsIDg2LCAyMjYsIDE0MSwgMjEsIDExMCwgMjI2LCAxNDEsIDIxLCAKLSAgICAxMDUsIDIyNiwgMTQxLCAyMSwgMTU4LCAyMjYsIDE0MSwgMjEsIDE2MSwgMjI2LCAxNDEsIDIxLCAxODksIDIyNiwgMTQxLCAKLSAgICAyMSwgMTk0LCAyMjYsIDE0MSwgMjEsIDE5OCwgMjI2LCAxNDEsIDIxLCAxOTUsIDIyNiwgMTQxLCAyMSwgMjAwLCAyNDksIAotICAgIDY3LCAzLCA2MSwgMjQ5LCA2NywgMywgNzUsIDI0OSwgNjcsIDMsIDczLCAyNDksIDY3LCAzLCA3NiwgMjQ5LCA2NywgMywgCi0gICAgNzAsIDI0OSwgNjcsIDMsIDIzNSwgMTQxLCAyNDksIDY3LCAzLCAyMzUsIDY4LCAyNDksIDY3LCAzLCAxNzYsIDI0OSwgNjcsIAotICAgIDMsIDIzNCwgMTgyLCAyNDksIDY3LCAzLCAyMzQsIDkyLCAyNDksIDY3LCAzLCAyMzQsIDI4LCAyNDksIDY3LCAzLCAyMzMsIAotICAgIDIxNywgMjQ5LCA2NywgMywgMjMzLCAxMzUsIDI0OSwgNjcsIDMsIDIzMywgNTgsIDI0OSwgNjcsIDMsIDIzMiwgMjQxLCAKLSAgICAyNDksIDY3LCAzLCAyMzIsIDE1NiwgMjQ5LCA2NywgMywgMjMyLCA5OCwgMjQ5LCA2NywgMywgMTg0LCAyNDksIDY3LCAzLCAKLSAgICAyMzEsIDkxLCAyNDksIDY3LCAzLCAyMzAsIDIzMCwgMjQ5LCA2NywgMywgMjMwLCAxNjEsIDI0OSwgNjcsIDMsIDIzMCwgCi0gICAgMTAyLCAyNDksIDY3LCAzLCAxOTcsIDI0OSwgNjcsIDMsIDIyOSwgMTA3LCAyNDksIDY3LCAzLCAyMjgsIDIzMywgMjQ5LCAKLSAgICA2NywgMywgMjI4LCA3NCwgMjQ5LCA2NywgMywgMjI3LCAyMzcsIDI0OSwgNjcsIDMsIDE5MCwgMjQ5LCA2NywgMywgMjI1LCAKLSAgICAyMjEsIDI0OSwgNjcsIDMsIDIyNSwgMTA4LCAyNDksIDY3LCAzLCAyMjUsIDE2LCAyNDksIDY3LCAzLCAyMjQsIDE1MCwgCi0gICAgMjQ5LCA2NywgMywgMjA1LCAyNDksIDY3LCAzLCAyMjMsIDEyOCwgMjQ5LCA2NywgMywgMjIzLCAzNSwgMjQ5LCA2NywgMywgCi0gICAgMjIyLCAyMTEsIDI0OSwgNjcsIDMsIDIyMiwgMTQwLCAyNDksIDY3LCAzLCAyMDYsIDI0OSwgNjcsIDMsIDIyMSwgMTgxLCAKLSAgICAyNDksIDY3LCAzLCAyMTksIDE5MSwgMjQ5LCA2NywgMywgMjE5LCA1OCwgMjQ5LCA2NywgMywgMjE4LCA4MywgMjQ5LCA2NywgCi0gICAgMywgMjE3LCAxMDUsIDI0OSwgNjcsIDMsIDIxNywgMjIsIDI0OSwgNjcsIDMsIDIxNiwgMTE3LCAyNDksIDY3LCAzLCAxMTEsIAotICAgIDI0OSwgNjcsIDMsIDIxNSwgMTE4LCAyNDksIDY3LCAzLCAyMTIsIDY1LCAyNDksIDY3LCAzLCAyMTIsIDIyLCAyNDksIDY3LCAKLSAgICAzLCAyMTEsIDI1MCwgMjQ5LCA2NywgMywgMjExLCAyMjcsIDI0OSwgNjcsIDMsIDIxMSwgMTY1LCAyNDksIDY3LCAzLCAyMTEsIAotICAgIDE2MiwgMjQ5LCA2NywgMywgMjEwLCAxMTYsIDI0OSwgNjcsIDMsIDIxMCwgMjMsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjU0LCAKLSAgICAxNjgsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjUyLCAyNSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDIsIDIwMSwgMjM2LCAxLCAKLSAgICAyNTQsIDI3LCAxLCAyNDgsIDE4OCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDEsIDIzOCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAKLSAgICAyMTIsIDMwLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxMCwgOTcsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQxLCAxOTUsIDIzNiwgCi0gICAgMSwgMjU0LCAyNywgMSwgMjE2LCAyMjYsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjEwLCAyMzIsIDIzNiwgMSwgMjU0LCAyNywgCi0gICAgMSwgMjM0LCAyMjUsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjMzLCA5MywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMzEsIDY1LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNywgMTk0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMSwgMjQ5LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDEsIDI1MywgMTYyLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNSwgMjIxLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMiwgCi0gICAgMjQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI0LCAzNCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjMsIDY3LCAyMzYsIDEsIAotICAgIDI1NCwgMjcsIDEsIDIyMCwgMjAsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjE3LCAzNiwgMjM2LCAxLCAyNTQsIDI3LCAyMjEsIAotICAgIDE3MywgNTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDExMCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTA1LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDU0LCAxNTgsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNiwgMjQ3LCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTUsIDczLCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDIyNSwgMTE5LCAxLCAyNTQsIDE2NSwgMjI1LCAxMTksIAotICAgIDEsIDI1MiwgMjgsIDIyNSwgMTE5LCAxLCAyNDMsIDEwOSwgMjI1LCAxMTksIDEsIDI0OCwgNTYsIDIyNSwgMTE5LCAxLCAKLSAgICAyNDEsIDIzOCwgMjI1LCAxMTksIDEsIDIxMiwgMzcsIDIyNSwgMTE5LCAxLCAyMTAsIDExMCwgMjI1LCAxMTksIDEsIDI0MSwgCi0gICAgMTk3LCAyMjUsIDExOSwgMSwgMjE2LCAyMzAsIDIyNSwgMTE5LCAxLCAyMTAsIDIzMywgMjI1LCAxMTksIDEsIDIzNCwgMjUwLCAKLSAgICAyMjUsIDExOSwgMSwgMjMzLCA5OSwgMjI1LCAxMTksIDEsIDIzMSwgNjUsIDIyNSwgMTE5LCAxLCAyMjcsIDE5NCwgMjI1LCAKLSAgICAxMTksIDEsIDIyMCwgMTQ0LCAyMjUsIDExOSwgMSwgMjU0LCAxOTYsIDIyNSwgMTE5LCAxLCAyMjUsIDIyMSwgMjI1LCAxMTksIAotICAgIDEsIDIyMiwgMjUsIDIyNSwgMTE5LCAxLCAyMjQsIDM5LCAyMjUsIDExOSwgMSwgMjIyLCAxODksIDIyNSwgMTE5LCAxLCAKLSAgICAyMjAsIDIwLCAyMjUsIDExOSwgMSwgMjE3LCA0MSwgMjI1LCAxMTksIDU0LCAxMTAsIDIyNSwgMTE5LCA1NCwgMjE2LCAyNDcsIAotICAgIDIyNSwgMTE5LCA1NCwgMjE1LCA3MywgMjI1LCAxMTksIDU0LCAxMjMsIDI0MCwgMjEwLCAyMjUsIDExOSwgNTQsIDEwNSwgCi0gICAgMjI1LCAxMTksIDU0LCAxNTgsIDIyNSwgMTE5LCAyMTEsIDIwOSwgMjIwLCAxMzcsIDIzMiwgNTksIDEsIDYxLCAyMzIsIDU5LCAKLSAgICAxLCAyNTMsIDE1OCwgMjMyLCA1OSwgMSwgMjQzLCAyMDIsIDIzMiwgNTksIDEsIDI0OSwgNjAsIDIzMiwgNTksIDEsIDc1LCAKLSAgICAyMzIsIDU5LCAxLCAyMTQsIDEwNSwgMjMyLCA1OSwgMSwgNzMsIDIzMiwgNTksIDEsIDIxMSwgMTE3LCAyMzIsIDU5LCAxLCAKLSAgICAyMzUsIDIzLCAyMzIsIDU5LCAxLCAxNTYsIDIzMiwgNTksIDEsIDE5MywgMjMyLCA1OSwgMSwgMjMwLCAyNSwgMjMyLCA1OSwgCi0gICAgMSwgNzYsIDIzMiwgNTksIDEsIDE1MywgMjMyLCA1OSwgMSwgMjE4LCAyMjYsIDIzMiwgNTksIDEsIDIxNywgMTUyLCAyMzIsIAotICAgIDU5LCAxLCA3MCwgMjMyLCA1OSwgMSwgMjQ1LCA2LCAyMzIsIDU5LCAxLCAyMjQsIDk2LCAyMzIsIDU5LCAxLCAyMjIsIDkxLCAKLSAgICAyMzIsIDU5LCAxLCAyMTUsIDE1OSwgMjMyLCA1OSwgMSwgMjU0LCAxMjMsIDIzMiwgNTksIDEsIDI0NSwgMTUwLCAyMzIsIAotICAgIDU5LCAxLCAyMzIsIDYyLCAyMzIsIDU5LCAxLCAyMjgsIDExMSwgMjMyLCA1OSwgMSwgMjUxLCA2NiwgMjMyLCA1OSwgMjE1LCAKLSAgICAyMjIsIDc4LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA3NSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDczLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNzYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTEsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjUyLCAxOTEsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyNTIsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDE4NCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5NywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyOSwgMjI4LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjksIDEwNiwgMjMxLCA0OCwgMjQxLCAxNzQsIAotICAgIDEsIDIwNSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyMywgMTg3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjMzLCAxMzUsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMzQsIDEzMiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0MSwgMTg5LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjIyLCAzMywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTc2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI0LCA4OCwgMjMxLCAKLSAgICA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAxMDQsIDIzMSwgNDgsIDI0MSwgCi0gICAgMTc0LCAxLCAyMTcsIDIyLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAyMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDExMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0OCwgMjIxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTcwLCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTY5LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA2MSwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgNzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDczLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA3NiwgMjMxLCA0OCwgCi0gICAgMjQ5LCA5NCwgMSwgMTkxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTIsIAotICAgIDE5MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTkwLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxODQsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDE5NywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIwNSwgMjMxLCAKLSAgICA0OCwgMjQ5LCA5NCwgMSwgMjMzLCAxMzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIzNCwgMTMyLCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCAyNDEsIDE4OSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTQsIDIzLCAKLSAgICAyMDYsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxNzYsIDIzMSwgNDgsIAotICAgIDI0OSwgOTQsIDEsIDIyNCwgODgsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAKLSAgICAyMTcsIDIyLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxMTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI0OCwgMjIxLCAyMzEsIAotICAgIDQ4LCAyNDksIDk0LCAyMzIsIDE0NSwgMjIyLCAyMTcsIDIzMSwgNDgsIDI0OSwgOTQsIDIzMiwgMTQ1LCAyMzYsIDYsIDIzNCwgCi0gICAgMTIwLCAxLCA2MSwgMjM0LCAxMjAsIDI1LCA1LCA3MywgMjM0LCAxMjAsIDI1LCA1LCA3MCwgMjM0LCAxMjAsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMjM0LCAxMjAsIDI1LCA1LCA3NSwgMjM0LCAxMjAsIDI1LCA1LCA3NiwgMjM0LCAxMjAsIDI1LCAyMzMsIAotICAgIDIzLCA3OCwgMjM0LCAxMjAsIDUsIDUyLCAyMjIsIDIzNCwgNTEsIDIzNCwgMTIwLCA1LCAyNTQsIDc1LCAyMzQsIDEyMCwgNSwgCi0gICAgMjEzLCAxNDcsIDIzNCwgMTIwLCAxLCAxNzYsIDIzNCwgMTIwLCAxLCAyMzQsIDEzMiwgMjM0LCAxMjAsIDEsIDI0MywgMTM1LCAKLSAgICAyMzQsIDEyMCwgMSwgMjQyLCAyNDksIDIzNCwgMTIwLCAxLCAyNTEsIDMzLCAyMzQsIDEyMCwgMSwgMjUwLCAxNTcsIDIzNCwgCi0gICAgMTIwLCAxLCAyMzUsIDE0MSwgMjM0LCAxMjAsIDEsIDIyNywgMTY1LCAyMzQsIDEyMCwgMSwgMjE1LCAxNTYsIDIzNCwgMTIwLCAKLSAgICAxLCAyMTUsIDE0NCwgMjM0LCAxMjAsIDEsIDI0OCwgMTM1LCAyMzQsIDEyMCwgMSwgMjQ4LCAxMTksIDIzNCwgMTIwLCAxLCAKLSAgICAyMjgsIDExMCwgMjM0LCAxMjAsIDEsIDIxNywgMTA1LCAyMzQsIDEyMCwgMSwgMjE2LCAyMDgsIDIzNCwgMTIwLCAxLCAyNDgsIAotICAgIDIyMSwgMjM0LCAxMjAsIDEsIDI0OCwgMjUsIDIzNCwgMTIwLCAxLCAxOTcsIDIzNCwgMTIwLCAxLCAxOTAsIDIzNCwgMTIwLCAKLSAgICAxLCAyMjUsIDE0NywgMjM0LCAxMjAsIDEsIDI1MiwgMTkxLCAyMzQsIDEyMCwgMSwgMjUyLCAxOCwgMjM0LCAxMjAsIDEsIAotICAgIDE4NCwgMjM0LCAxMjAsIDEsIDE5MSwgMjM0LCAxMjAsIDEsIDIwNSwgMjM0LCAxMjAsIDEsIDIzMywgMTM1LCAyMzQsIDEyMCwgCi0gICAgMSwgMjE0LCAyNywgMjM0LCAxMjAsIDEsIDIyMCwgMTAyLCAyMzQsIDEyMCwgMSwgMjE4LCAyMjMsIDIzNCwgMTIwLCAxLCAKLSAgICAyMDYsIDIzNCwgMTIwLCAxLCAyMTAsIDExNiwgMjM0LCAxMjAsIDEsIDE2MiwgMjM0LCAxMjAsIDEsIDIzNCwgNDYsIDIzNCwgCi0gICAgMTIwLCAxLCAyMTUsIDEyNCwgMjM0LCAxMjAsIDUsIDI1MiwgMTQxLCA0OCwgMjM0LCAxMjAsIDUsIDI1MCwgMjIxLCAyMzQsIAotICAgIDEyMCwgNSwgNTksIDUxLCAyMzQsIDEyMCwgMjEzLCAxNTIsIDIzNCwgMTIwLCAyMSwgMTEwLCAyMzQsIDEyMCwgMjEsIDEwNSwgCi0gICAgMjM0LCAxMjAsIDIxLCAxNTgsIDIzNCwgMTIwLCAyMSwgMTYxLCAyMzQsIDEyMCwgNTQsIDIxNiwgMjQ3LCAyMzQsIDEyMCwgCi0gICAgNTQsIDIxNSwgNzMsIDIzNCwgMTIwLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM0LCAxMjAsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0NywgMTIwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDQsIDI1MCwgMzUsIDIzNCwgMTIwLCAKLSAgICAyMjQsIDE0MSwgMjUwLCAzNSwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDksIDEzNywgMTMwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIAotICAgIDIzMSwgMTgwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0OCwgMTc4LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDUyLCAyNDgsIDE3OCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyMzIsIDIwNywgNTUsIDIxOSwgCi0gICAgMjgsIDI1NCwgMzgsIDEsIDI0MSwgMjM4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMzLCA5MywgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDI0MSwgMTk1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMxLCA2NSwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDIyNCwgMzQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgCi0gICAgMSwgMjIwLCAyMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMywgNjcsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAKLSAgICAyNTIsIDI1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE3LCAzNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgCi0gICAgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjM0LCAyMjUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjcsIAotICAgIDE5NCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzNCwgMTE2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIyLCAyNCwgCi0gICAgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgMjQ5LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ0LCAxNTQsIDU1LCAKLSAgICAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNTQsIDE3MCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI1MywgMTYxLCA1NSwgCi0gICAgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAyMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0MiwgMjAxLCA1NSwgMjE5LCAKLSAgICAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAxODgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDIsIDIzOCwgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDIxNiwgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDI0OCwgMTksIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIAotICAgIDEsIDIxNiwgMTk3LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE2LCAxNzgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCA1NCwgCi0gICAgMTEwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgNTQsIDI0NCwgMTE0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMTMyLCAyMzUsIAotICAgIDIzOCwgMjUzLCAxNzIsIDEsIDYxLCAyNTMsIDE3MiwgMSwgMjU1LCA3MywgMjUzLCAxNzIsIDEsIDI1NCwgNzMsIDI1MywgCi0gICAgMTcyLCAxLCAyNTUsIDMyLCAyNTMsIDE3MiwgMSwgMjU0LCAxMjMsIDI1MywgMTcyLCAxLCAyNTUsIDMzLCAyNTMsIDE3MiwgCi0gICAgMSwgMjU0LCAyNDMsIDI1MywgMTcyLCAxLCAyNTQsIDIzOSwgMjUzLCAxNzIsIDEsIDc1LCAyNTMsIDE3MiwgMSwgMjQ1LCAKLSAgICAyMDksIDI1MywgMTcyLCAxLCA3NiwgMjUzLCAxNzIsIDEsIDIyNiwgMTgzLCAyNTMsIDE3MiwgMSwgNzMsIDI1MywgMTcyLCAKLSAgICAxLCAyMzYsIDMzLCAyNTMsIDE3MiwgMSwgNzAsIDI1MywgMTcyLCAxLCAyMTQsIDExOCwgMjUzLCAxNzIsIDEsIDIzNCwgCi0gICAgMTgyLCAyNTMsIDE3MiwgMSwgMjExLCAxNjIsIDI1MywgMTcyLCAxLCAyMTEsIDEyOCwgMjUzLCAxNzIsIDEsIDIxMSwgMTM3LCAKLSAgICAyNTMsIDE3MiwgMSwgMjQzLCA2MiwgMjUzLCAxNzIsIDEsIDI0MywgMjQsIDI1MywgMTcyLCAxLCAyNDIsIDIzNiwgMjUzLCAKLSAgICAxNzIsIDEsIDI1MCwgMTkwLCAyNTMsIDE3MiwgMSwgMjM1LCAxMjYsIDI1MywgMTcyLCAxLCAyMTcsIDIyLCAyNTMsIDE3MiwgCi0gICAgMSwgMjE2LCAxOTUsIDI1MywgMTcyLCAxLCAyNDgsIDkwLCAyNTMsIDE3MiwgMSwgMjQ4LCAxNywgMjUzLCAxNzIsIDEsIAotICAgIDIxNSwgMTUxLCAyNTMsIDE3MiwgMSwgMjI1LCAyMjEsIDI1MywgMTcyLCAxLCAyNDQsIDE1NCwgMjUzLCAxNzIsIDEsIDI1MiwgCi0gICAgNzUsIDI1MywgMTcyLCAxLCAyNTIsIDE0LCAyNTMsIDE3MiwgMSwgMjI5LCA2NCwgMjUzLCAxNzIsIDEsIDIyOCwgMjM5LCAKLSAgICAyNTMsIDE3MiwgMSwgMjI4LCAyNDAsIDI1MywgMTcyLCAxLCAyMjksIDEwNywgMjUzLCAxNzIsIDEsIDIyNywgMTU2LCAyNTMsIAotICAgIDE3MiwgMSwgMjI4LCAxMDUsIDI1MywgMTcyLCAxLCAyMzEsIDkxLCAyNTMsIDE3MiwgMSwgMjQxLCAxMTYsIDI1MywgMTcyLCAKLSAgICAxLCAyMTAsIDE2NiwgMjUzLCAxNzIsIDEsIDIxMSwgNDcsIDI1MywgMTcyLCAxLCAyMTMsIDI1NSwgMjUzLCAxNzIsIDEsIAotICAgIDIyMywgMTI4LCAyNTMsIDE3MiwgMSwgMjMzLCA1OCwgMjUzLCAxNzIsIDEsIDIyMSwgMTgxLCAyNTMsIDE3MiwgMSwgMjEwLCAKLSAgICA5NCwgMjUzLCAxNzIsIDEsIDIyMCwgNjMsIDI1MywgMTcyLCAxLCAyMTAsIDc0LCAyNTMsIDE3MiwgMSwgMjE5LCAxOTgsIAotICAgIDI1MywgMTcyLCAxLCAyMTgsIDE5MywgMjUzLCAxNzIsIDEsIDI0MSwgMjM4LCAyNTMsIDE3MiwgMjU1LCAyMSwgNzgsIDIxNiwgCi0gICAgNzksIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCA0LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIAotICAgIDE0MCwgMjMzLCA4NSwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDIzMywgODUsIDEyMywgNTksIDExNywgCi0gICAgMTEzLCAxNzAsIDIyNCwgMTQwLCAyMzMsIDg1LCAxMTMsIDIyMiwgMjMyLCAxMTcsIDEyMywgMjIyLCAyMzQsIDIyNCwgMTQwLCAKLSAgICAyMzMsIDg1LCAxMjMsIDIyMiwgMjM0LCAxMTcsIDExMywgMjIyLCAyMzIsIDIyNCwgMTQwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIAotICAgIDEsIDI1NCwgMTY4LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI1MiwgMjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQyLCAKLSAgICAyMDEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQ4LCAxODgsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQxLCAyMzgsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjEyLCAzMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTAsIDk3LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNiwgMjI2LCAyMzUsIDIxOCwgMjI1LCAKLSAgICAyNTQsIDEsIDIxMCwgMjMyLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIzNCwgMjI1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIAotICAgIDIzMywgOTMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjMxLCA2NSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjcsIDE5NCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjEsIDI0OSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNTMsIDE2MiwgMjM1LCAKLSAgICAyMTgsIDIyNSwgMjU0LCAxLCAyMjUsIDIyMSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDIyNCwgMzQsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIzLCA2NywgMjM1LCAyMTgsIDIyNSwgMjU0LCAKLSAgICAxLCAyMjAsIDIwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDExMCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTA1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjUsIAotICAgIDI1NCwgNTQsIDE2MSwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMjE2LCAyNDcsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDIxNSwgNzMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDEyMywgMjE2LCAxNDcsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNTQsIDE2OCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI1MiwgCi0gICAgMjUsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDIsIDIwMSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0OCwgMTg4LCAyMzUsIAotICAgIDIxOCwgMjI2LCA3MiwgMSwgMjQxLCAyMzgsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTIsIDI5LCAyMzUsIDIxOCwgMjI2LCAKLSAgICA3MiwgMSwgMjEwLCA5NywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgCi0gICAgMjE2LCAyMjYsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzNCwgMjI1LCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjMzLCA5MywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzMSwgNjQsIDIzNSwgMjE4LCAKLSAgICAyMjYsIDcyLCAxLCAyMjcsIDE5NCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMSwgMjQ5LCAyMzUsIDIxOCwgMjI2LCA3MiwgCi0gICAgMSwgMjI1LCAyMjEsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIwLCAKLSAgICAyMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTEwLCAyMzUsIDIxOCwgCi0gICAgMjI2LCA3MiwgNTQsIDEwNSwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTYxLCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNiwgMjQ3LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNSwgNzMsIDIzNSwgCi0gICAgMjE4LCAyMjYsIDcyLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNjEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDI0MywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDczLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCA3MywgNTUsIDIwMSwgMSwgCi0gICAgMjExLCAzNywgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA3NiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMjM0LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDIzNCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NSwgMjUsIDU1LCAyMDEsIDEsIAotICAgIDIxMSwgMzcsIDI1NSwgMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDI0MiwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAyNDIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIxNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMTYsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzcsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNTQsIDI1NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyNTUsIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDI0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgCi0gICAgMTIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDE2NywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAxNjcsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjQsIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNTQsIDIzNSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyMjYsIDIzMywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAyMzMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDE3OCwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAxNzgsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgMTYxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxNTksIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDEyMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjMyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDIzMiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDEzMSwgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTQ3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDE0NywgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI0NSwgMTE4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDExOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAxMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEzOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzEsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEwOCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTc1LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQwLCAxMTMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDIxNSwgNTUsIDIwMSwgMSwgMjExLCAKLSAgICAzNywgMjQ1LCAyMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDQ1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDQ1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjM1LCAxODEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIzNSwgMTgxLCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNTksIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMTU5LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDI1NCwgMjMwLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAyMzcsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyOCwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMjMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDIzMSwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyNTMsIDIwNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAyMDYsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNSwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE0MCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI1MiwgMTI1LCAyMjIsIDEyNywgMjEsIDExMCwgMjIyLCAxMjcsIDIxLCAxMDUsIDIyMiwgMTI3LCAKLSAgICAyMSwgMTU4LCAyMjIsIDEyNywgMjEsIDE2MSwgMjIyLCAxMjcsIDIxLCAxODksIDIyMiwgMTI3LCAyMSwgMTk0LCAyMjIsIAotICAgIDEyNywgMjEsIDE5OCwgMjIyLCAxMjcsIDIxLCAxOTUsIDIyMiwgMTI3LCAyMSwgMjAwLCAyMjIsIDEyNywgNTQsIDIxNiwgCi0gICAgMjQ3LCAyMjIsIDEyNywgNTQsIDIxNSwgNzMsIDIyMiwgMTI3LCA1NCwgMjE2LCAxNjIsIDIyMiwgMTI3LCA1NCwgMjQ0LCAKLSAgICAxNSwgMjIyLCAxMjcsIDU0LCAyNDQsIDExNCwgMjIyLCAxMjcsIDU0LCAyMTksIDExMSwgMjIyLCAxMjcsIDU0LCAyMjAsIAotICAgIDExNiwgMjIyLCAxMjcsIDU0LCAyNDUsIDE4NCwgMjIyLCAxMjcsIDU0LCAyMjgsIDE5NSwgMjIyLCAxMjcsIDU0LCAxMjMsIAotICAgIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDExMywgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMTM0LCAyNDAsIDIxMCwgMjIyLCAKLSAgICAxMjcsIDU0LCAyNDQsIDExLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjIyLCAxMjcsIAotICAgIDU0LCAyMTksIDEyNSwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjIwLCAxMjIsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIAotICAgIDI0NSwgMTkzLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIyMiwgMTI3LCAyNDQsIDIsIAotICAgIDEyMywgMjQyLCAyNywgMjIyLCAxMjcsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMjIsIDEyNywgMjQ0LCAyLCAxMjMsIDIxNiwgCi0gICAgMTY4LCAyMjIsIDEyNywgMjQ0LCAyLCAxMTMsIDIxNiwgMTY2LCAxMTgsIDUsIDI1MCwgMjU1LCAxMTgsIDUsIDI1NCwgNzUsIAotICAgIDExOCwgNSwgMjEzLCAxNDcsIDExOCwgNSwgMjM1LCAxMDIsIDExOCwgNSwgMjE0LCAxNjEsIDExOCwgMSwgNjEsIDExOCwgMSwgCi0gICAgMjU1LCA3MywgMTE4LCAxLCA3MywgMTE4LCAxLCAyMzYsIDMzLCAxMTgsIDEsIDcwLCAxMTgsIDEsIDIxNCwgMTE4LCAxMTgsIAotICAgIDEsIDE0OSwgMTUzLCAxMTgsIDEsIDE0OSwgMjIyLCAxODAsIDExOCwgMSwgMTQ5LCAxNTYsIDExOCwgMSwgMTQ5LCAyMzIsIAotICAgIDE4NSwgMTE4LCAxLCA3NSwgMTE4LCAxLCAyNTQsIDIwMSwgMTE4LCAxLCA3NiwgMTE4LCAxLCAyNTMsIDE5MiwgMTE4LCAxLCAKLSAgICAxNzYsIDExOCwgMSwgMjM0LCAxMzIsIDExOCwgMSwgMjQzLCAxMzUsIDExOCwgMSwgMjQyLCAyNDksIDExOCwgMSwgMjI5LCAKLSAgICA3NywgMTE4LCAxLCAyNTEsIDMzLCAxMTgsIDEsIDI1MCwgMTU3LCAxMTgsIDEsIDIzNSwgMTQxLCAxMTgsIDEsIDIzNSwgCi0gICAgMTE0LCAxMTgsIDEsIDIyNywgMTY1LCAxMTgsIDEsIDIxNSwgMTU2LCAxMTgsIDEsIDIxNSwgMTQ0LCAxMTgsIDEsIDI0OCwgCi0gICAgMTM1LCAxMTgsIDEsIDI0OCwgMTE5LCAxMTgsIDEsIDIyOCwgMTEwLCAxMTgsIDEsIDIxNywgMTA1LCAxMTgsIDEsIDIxNiwgCi0gICAgMjA4LCAxMTgsIDEsIDI0OCwgMjIxLCAxMTgsIDEsIDI0OCwgMjUsIDExOCwgMSwgMTk3LCAxMTgsIDEsIDE5MCwgMTE4LCAxLCAKLSAgICAyMjUsIDE0NywgMTE4LCAxLCAyNTIsIDE5MSwgMTE4LCAxLCAyNTIsIDE4LCAxMTgsIDEsIDE4NCwgMTE4LCAxLCAxOTEsIAotICAgIDExOCwgMSwgMjA1LCAxMTgsIDEsIDIzMywgMTM1LCAxMTgsIDEsIDIxNCwgMjcsIDExOCwgMSwgMjIwLCAxMDIsIDExOCwgMSwgCi0gICAgMjE4LCAyMjMsIDExOCwgMSwgMjA2LCAxMTgsIDEsIDE2MiwgMTE4LCAxLCAyMzIsIDE4NCwgMTE4LCAxLCA1NSwgMzYsIAotICAgIDIzMiwgMTc1LCAxMTgsIDEsIDU1LCAzNiwgMjIyLCAxNzksIDExOCwgMSwgNTUsIDM2LCAyMjgsIDkyLCAxMTgsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxMTgsIDI1LCA1LCAyNTIsIDE1LCAyNTUsIDczLCAxMTgsIDI1LCA1LCA3MywgMTE4LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgMTE4LCAyNSwgNSwgNzAsIDExOCwgMjUsIDUsIDIxNCwgMTE4LCAxMTgsIDI1LCA1LCAxNDksIDE1MywgMTE4LCAyNSwgCi0gICAgNSwgMTQ5LCAyMjIsIDE4MCwgMTE4LCAyNSwgNSwgMTQ5LCAxNTYsIDExOCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDExOCwgCi0gICAgMjUsIDUsIDc1LCAxMTgsIDI1LCA1LCAyNTQsIDIwMSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxMTgsIDIxMywgMTUyLCAxMTgsIDI0OCwgMTc4LCAxMTgsIDUyLCAyNDgsIDE3OCwgMTE4LCAyMjQsIDE0MSwgMjQ3LCAxMjAsIAotICAgIDExOCwgMjI0LCAxNDEsIDUyLCAyNDcsIDEyMCwgMTE4LCAyMjQsIDE0MSwgMjMyLCAyMTMsIDExOCwgMjI0LCAxNDEsIDI0OSwgCi0gICAgMTM3LCAxMzAsIDExOCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAxMTgsIDU0LCAxMTAsIDExOCwgNTQsIDEwNSwgMTE4LCA1NCwgCi0gICAgMTU4LCAxMTgsIDU0LCAxNjEsIDExOCwgNTQsIDE4OSwgMTE4LCA1NCwgMTk0LCAxMTgsIDU0LCAxOTgsIDExOCwgNTQsIAotICAgIDE5NSwgMTE4LCA1NCwgMjAwLCAxMTgsIDU0LCAyMTYsIDI0NywgMTE4LCA1NCwgMjE1LCA3MywgMTE4LCA1NCwgMjE2LCAKLSAgICAxNjIsIDExOCwgNTQsIDI0NCwgMTUsIDExOCwgNTQsIDI0NCwgMTE0LCAxMTgsIDU0LCAyMTksIDExMSwgMTE4LCA1NCwgCi0gICAgMjIwLCAxMTYsIDExOCwgNTQsIDI0NSwgMTg0LCAxMTgsIDU0LCAyMjgsIDE5NSwgMTE4LCA1NCwgMTIzLCAyNDAsIDIxMCwgCi0gICAgMTE4LCA1NCwgMTIzLCAyMTYsIDE0NywgMTE4LCAyMSwgMjEwLCA4NiwgMTE4LCAyMSwgMTEwLCAxMTgsIDIxLCAxMDUsIAotICAgIDExOCwgMjEsIDE1OCwgMTE4LCAyMSwgMTYxLCAxMTgsIDIxLCAxODksIDExOCwgMjEsIDE5NCwgMTE4LCAyMSwgMTk4LCAKLSAgICAxMTgsIDIxLCAxOTUsIDExOCwgMjEsIDIwMCwgMjM0LCAyNDQsIDUsIDI1MCwgMjU1LCAyMzQsIDI0NCwgNSwgMjU0LCA3NSwgCi0gICAgMjM0LCAyNDQsIDUsIDIxMywgMTQ3LCAyMzQsIDI0NCwgMSwgNjEsIDIzNCwgMjQ0LCAxLCAyNTUsIDczLCAyMzQsIDI0NCwgCi0gICAgMSwgNzMsIDIzNCwgMjQ0LCAxLCAyMzYsIDMzLCAyMzQsIDI0NCwgMSwgNzAsIDIzNCwgMjQ0LCAxLCAyMTQsIDExOCwgMjM0LCAKLSAgICAyNDQsIDEsIDc1LCAyMzQsIDI0NCwgMSwgMjU0LCAyMDEsIDIzNCwgMjQ0LCAxLCA3NiwgMjM0LCAyNDQsIDEsIDI1MywgCi0gICAgMTkyLCAyMzQsIDI0NCwgMSwgMTc2LCAyMzQsIDI0NCwgMSwgMjM0LCAxMzIsIDIzNCwgMjQ0LCAxLCAyNDMsIDEzNSwgMjM0LCAKLSAgICAyNDQsIDEsIDI0MiwgMjQ5LCAyMzQsIDI0NCwgMSwgMjI5LCA3NywgMjM0LCAyNDQsIDEsIDI1MSwgMzMsIDIzNCwgMjQ0LCAKLSAgICAxLCAyNTAsIDE1NywgMjM0LCAyNDQsIDEsIDIzNSwgMTQxLCAyMzQsIDI0NCwgMSwgMjM1LCAxMTQsIDIzNCwgMjQ0LCAxLCAKLSAgICAyMjcsIDE2NSwgMjM0LCAyNDQsIDEsIDIxNSwgMTU2LCAyMzQsIDI0NCwgMSwgMjE1LCAxNDQsIDIzNCwgMjQ0LCAxLCAyNDgsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDI0OCwgMTI0LCAyMzQsIDI0NCwgMSwgMjQ4LCAxMTksIDIzNCwgMjQ0LCAxLCAyMjMsIDM5LCAKLSAgICAyMzQsIDI0NCwgMSwgMjI4LCAxMTAsIDIzNCwgMjQ0LCAxLCAyMTcsIDEwNSwgMjM0LCAyNDQsIDEsIDIxNiwgMjA4LCAyMzQsIAotICAgIDI0NCwgMSwgMjQ4LCAyMjEsIDIzNCwgMjQ0LCAxLCAyNDgsIDI1LCAyMzQsIDI0NCwgMSwgMTk3LCAyMzQsIDI0NCwgMSwgCi0gICAgMTkwLCAyMzQsIDI0NCwgMSwgMjI1LCAxNDcsIDIzNCwgMjQ0LCAxLCAyNTIsIDE5MSwgMjM0LCAyNDQsIDEsIDI1MiwgMTgsIAotICAgIDIzNCwgMjQ0LCAxLCAxODQsIDIzNCwgMjQ0LCAxLCAxOTEsIDIzNCwgMjQ0LCAxLCAyMDUsIDIzNCwgMjQ0LCAxLCAyMzMsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDIxNCwgMjcsIDIzNCwgMjQ0LCAxLCAyMjAsIDEwMiwgMjM0LCAyNDQsIDEsIDIxOCwgMjIzLCAKLSAgICAyMzQsIDI0NCwgMSwgMjA2LCAyMzQsIDI0NCwgMSwgMTYyLCAyMzQsIDI0NCwgMjUsIDUsIDI1NSwgNzMsIDIzNCwgMjQ0LCAKLSAgICAyNSwgNSwgNzMsIDIzNCwgMjQ0LCAyNSwgNSwgMjM2LCAzMywgMjM0LCAyNDQsIDI1LCA1LCA3MCwgMjM0LCAyNDQsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgMjM0LCAyNDQsIDI1LCA1LCA3NSwgMjM0LCAyNDQsIDI1LCA1LCAyNTQsIDIwMSwgMjM0LCAyNDQsIAotICAgIDI1LCA1LCA3NiwgMjM0LCAyNDQsIDI1LCA1LCAyNTMsIDE5MiwgMjM0LCAyNDQsIDUsIDIxMywgMTUyLCAyMzQsIDI0NCwgNSwgCi0gICAgMjI3LCAyMDUsIDIzNCwgMjQ0LCAyNTUsIDIxLCA1MCwgMjM0LCAyNDQsIDI0NSwgMTIxLCA1MCwgMjM0LCAyNDQsIDU0LCAKLSAgICA1MCwgMjM0LCAyNDQsIDIyMSwgMTczLCA3OCwgMjM0LCAyNDQsIDUyLCAyMjEsIDE3MywgNzgsIDIzNCwgMjQ0LCAyNDgsIAotICAgIDE3OCwgMjM0LCAyNDQsIDUyLCAyNDgsIDE3OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjIyLCAxOCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjE3LCA4MCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjUyLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI1MSwgCi0gICAgMjMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0OCwgMjAzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDMsIDEyMCwgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMTAsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyOSwgNzQsIDIxOSwgMzYsIDIxOSwgNDQsIAotICAgIDEsIDIzMywgMTEyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjksIDIxMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyNCwgCi0gICAgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI2LCA3MywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjExLCA4NCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjIzLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0MiwgMzcsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzNCwgCi0gICAgMjQ4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzUsIDEzNiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI3LCAxNjIsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDEsIDI1NCwgMjA5LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDIwNywgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjM2LCAzNCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyMDgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNiwgCi0gICAgMjIyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDE5NywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMjMsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDIxLCAyMTAsIDg2LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTEwLCAyMTksIDM2LCAyMTksIDQ0LCAKLSAgICAyMSwgMTA1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTU4LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTYxLCAyMTksIDM2LCAKLSAgICAyMTksIDQ0LCAyMSwgMTg5LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk0LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk4LCAKLSAgICAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMjAwLCAyNTAsIDE1MSwgNSwgMjUwLCAKLSAgICAyNTUsIDI1MCwgMTUxLCA1LCAyNTQsIDc1LCAyNTAsIDE1MSwgNSwgMjEzLCAxNDcsIDI1MCwgMTUxLCAxLCAyNTUsIDczLCAKLSAgICAyNTAsIDE1MSwgMSwgNzMsIDI1MCwgMTUxLCAxLCA3MCwgMjUwLCAxNTEsIDEsIDc1LCAyNTAsIDE1MSwgMSwgMjM1LCAxMCwgCi0gICAgMjUwLCAxNTEsIDEsIDIzNCwgMTMxLCAyNTAsIDE1MSwgMSwgMjQzLCAxMzIsIDI1MCwgMTUxLCAxLCAyNDIsIDI0OCwgMjUwLCAKLSAgICAxNTEsIDEsIDIyOSwgNzYsIDI1MCwgMTUxLCAxLCAyNTEsIDMyLCAyNTAsIDE1MSwgMSwgMjUwLCAxNTYsIDI1MCwgMTUxLCAKLSAgICAxLCAyMzUsIDE0MCwgMjUwLCAxNTEsIDEsIDIzNSwgMTEzLCAyNTAsIDE1MSwgMSwgMjI3LCAxNjQsIDI1MCwgMTUxLCAxLCAKLSAgICAyMTUsIDE1NSwgMjUwLCAxNTEsIDEsIDIxNSwgMTQzLCAyNTAsIDE1MSwgMSwgMjQ4LCAxMzQsIDI1MCwgMTUxLCAxLCAyNDgsIAotICAgIDExOCwgMjUwLCAxNTEsIDEsIDIyOCwgMTA5LCAyNTAsIDE1MSwgMSwgMjE3LCAxMDEsIDI1MCwgMTUxLCAxLCAyMTYsIDIwNywgCi0gICAgMjUwLCAxNTEsIDEsIDI0OCwgMjIwLCAyNTAsIDE1MSwgMSwgMjQ4LCAyNCwgMjUwLCAxNTEsIDEsIDIyOSwgMjI1LCAyNTAsIAotICAgIDE1MSwgMSwgMjI2LCA4OSwgMjUwLCAxNTEsIDEsIDIyNSwgMTQ2LCAyNTAsIDE1MSwgMSwgMjUyLCAxODksIDI1MCwgMTUxLCAKLSAgICAxLCAyNTIsIDE3LCAyNTAsIDE1MSwgMSwgMjMxLCAyMzcsIDI1MCwgMTUxLCAxLCAyMTAsIDE2NywgMjUwLCAxNTEsIDEsIAotICAgIDIxMSwgMTAzLCAyNTAsIDE1MSwgMSwgMjIzLCAxODQsIDI1MCwgMTUxLCAxLCAyMzMsIDEzNCwgMjUwLCAxNTEsIDEsIDIxMiwgCi0gICAgNjQsIDI1MCwgMTUxLCAxLCAyMjIsIDMxLCAyNTAsIDE1MSwgMSwgMjQyLCA0NiwgMjUwLCAxNTEsIDI1LCA1LCA2MSwgMjUwLCAKLSAgICAxNTEsIDI1LCA1LCA3MywgMjUwLCAxNTEsIDI1LCA1LCAyMzYsIDMzLCAyNTAsIDE1MSwgMjUsIDUsIDcwLCAyNTAsIDE1MSwgCi0gICAgMjUsIDUsIDIxNCwgMTE4LCAyNTAsIDE1MSwgMjUsIDUsIDc1LCAyNTAsIDE1MSwgMjUsIDUsIDI1NCwgMjAxLCAyNTAsIAotICAgIDE1MSwgMjUsIDUsIDc2LCAyNTAsIDE1MSwgMjUsIDUsIDI1MywgMTkyLCAyNTAsIDE1MSwgMjUsIDUsIDIyNiwgMjE5LCAKLSAgICAyNTAsIDE1MSwgMTQ0LCA3OCwgMjUwLCAxNTEsIDI1MywgMTkzLCA3OCwgMjUwLCAxNTEsIDIxMywgMTUyLCAyNTAsIDE1MSwgCi0gICAgMjMxLCAyMzUsIDI1MCwgMTUxLCAyMSwgMjEwLCA4NiwgMjUwLCAxNTEsIDIxLCAxMTAsIDI1MCwgMTUxLCAyMSwgMTA1LCAKLSAgICAyNTAsIDE1MSwgMjEsIDE1OCwgMjUwLCAxNTEsIDIxLCAxNjEsIDI1MCwgMTUxLCAyMSwgMTg5LCAyNTAsIDE1MSwgMjEsIAotICAgIDE5NCwgMjUwLCAxNTEsIDIxLCAxOTgsIDI1MCwgMTUxLCAyMSwgMTk1LCAyNTAsIDE1MSwgMjEsIDIwMCwgMjUwLCAxNTEsIAotICAgIDIyMSwgMTczLCA3OCwgMjUwLCAxNTEsIDI0OCwgMTc4LCAyNTAsIDE1MSwgNTIsIDI0OCwgMTc4LCAyNTAsIDE1MSwgMjI0LCAKLSAgICAxMywgNzgsIDE3NCwgNSwgMjUwLCAyNTUsIDE3NCwgNSwgMjU0LCA3NSwgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgCi0gICAgMTc0LCAxLCAyNTUsIDczLCAxNzQsIDEsIDczLCAxNzQsIDEsIDIzNiwgMzMsIDE3NCwgMSwgNzAsIDE3NCwgMSwgMjE0LCAKLSAgICAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAKLSAgICAxNDksIDIzMiwgMTg1LCAxNzQsIDEsIDc1LCAxNzQsIDEsIDI1NCwgMjAxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1MywgCi0gICAgMTkyLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzMiwgMTc0LCAxLCAyNDMsIDEzNSwgMTc0LCAxLCAyNDIsIDI0OSwgCi0gICAgMTc0LCAxLCAyMjksIDc3LCAxNzQsIDEsIDI1MSwgMzMsIDE3NCwgMSwgMjUwLCAxNTcsIDE3NCwgMSwgMjM1LCAxNDEsIAotICAgIDE3NCwgMSwgMjM1LCAxMTQsIDE3NCwgMSwgMjI3LCAxNjUsIDE3NCwgMSwgMjE1LCAxNTYsIDE3NCwgMSwgMjE1LCAxNDQsIAotICAgIDE3NCwgMSwgMjQ4LCAxMzUsIDE3NCwgMSwgMjQ4LCAxMTksIDE3NCwgMSwgMjI4LCAxMTAsIDE3NCwgMSwgMjE3LCAxMDUsIAotICAgIDE3NCwgMSwgMjE2LCAyMDgsIDE3NCwgMSwgMjQ4LCAyMjEsIDE3NCwgMSwgMjQ4LCAyNSwgMTc0LCAxLCAxOTcsIDE3NCwgMSwgCi0gICAgMTkwLCAxNzQsIDEsIDIyNSwgMTQ3LCAxNzQsIDEsIDI1MiwgMTkxLCAxNzQsIDEsIDI1MiwgMTgsIDE3NCwgMSwgMTg0LCAKLSAgICAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMDUsIDE3NCwgMSwgMjMzLCAxMzUsIDE3NCwgMSwgMjMyLCAxODQsIDE3NCwgMSwgCi0gICAgMjE0LCAyNywgMTc0LCAxLCAyMjAsIDEwMiwgMTc0LCAxLCAyMTgsIDIyMywgMTc0LCAxLCAyMDYsIDE3NCwgMSwgMTYyLCAKLSAgICAxNzQsIDI1LCA1LCAyNTUsIDczLCAxNzQsIDI1LCA1LCA3MywgMTc0LCAyNSwgNSwgMjM2LCAzMywgMTc0LCAyNSwgNSwgNzAsIAotICAgIDE3NCwgMjUsIDUsIDIxNCwgMTE4LCAxNzQsIDI1LCA1LCAxNDksIDE1MywgMTc0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc0LCAyNSwgNSwgMTQ5LCAxNTYsIDE3NCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3NCwgMjUsIDUsIDc1LCAxNzQsIDI1LCAKLSAgICA1LCAyNTQsIDIwMSwgMTc0LCAyNSwgNSwgNzYsIDE3NCwgMjUsIDUsIDI1MywgMTkyLCAxNzQsIDUsIDIxMywgMTUyLCAxNzQsIAotICAgIDUsIDI1MywgMTc1LCAxNzQsIDUsIDIzNSwgMTAyLCAxNzQsIDUsIDIxNCwgMTYxLCAxNzQsIDIyNiwgMjA0LCAxNzQsIDI0OCwgCi0gICAgMTc4LCAxNzQsIDUyLCAyNDgsIDE3OCwgMTc0LCAyNTUsIDIxLCA1MCwgMTc0LCAyMjAsIDEzNywgMTc0LCAyMSwgMjEwLCAKLSAgICA4NiwgMTc0LCAyMSwgMTEwLCAxNzQsIDIxLCAxMDUsIDE3NCwgMjEsIDE1OCwgMTc0LCAyMSwgMTYxLCAxNzQsIDIxLCAxODksIAotICAgIDE3NCwgMjEsIDE5NCwgMTc0LCAyMSwgMTk4LCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDIwMCwgMjE3LCA2OSwgMSwgNjEsIAotICAgIDIxNywgNjksIDEsIDI1NSwgNzMsIDIxNywgNjksIDEsIDczLCAyMTcsIDY5LCAxLCAyMzYsIDMzLCAyMTcsIDY5LCAxLCA3MCwgCi0gICAgMjE3LCA2OSwgMSwgMjE0LCAxMTgsIDIxNywgNjksIDEsIDc1LCAyMTcsIDY5LCAxLCAyNTQsIDIwMSwgMjE3LCA2OSwgMSwgCi0gICAgNzYsIDIxNywgNjksIDEsIDI1MywgMTkyLCAyMTcsIDY5LCAxLCAxNzYsIDIxNywgNjksIDEsIDIzNCwgMTMyLCAyMTcsIDY5LCAKLSAgICAxLCAyNDMsIDEzNSwgMjE3LCA2OSwgMSwgMjQyLCAyNDksIDIxNywgNjksIDEsIDIyOSwgNzcsIDIxNywgNjksIDEsIDI1MSwgCi0gICAgMzMsIDIxNywgNjksIDEsIDI1MCwgMTU3LCAyMTcsIDY5LCAxLCAyMzUsIDE0MSwgMjE3LCA2OSwgMSwgMjM1LCAxMTQsIAotICAgIDIxNywgNjksIDEsIDIyNywgMTY1LCAyMTcsIDY5LCAxLCAyMTUsIDE1NiwgMjE3LCA2OSwgMSwgMjE1LCAxNDQsIDIxNywgCi0gICAgNjksIDEsIDI0OCwgMTM1LCAyMTcsIDY5LCAxLCAyNDgsIDExOSwgMjE3LCA2OSwgMSwgMjI4LCAxMTAsIDIxNywgNjksIDEsIAotICAgIDIxNywgMTA1LCAyMTcsIDY5LCAxLCAyMTYsIDIwOCwgMjE3LCA2OSwgMSwgMjQ4LCAyMjEsIDIxNywgNjksIDEsIDI0OCwgCi0gICAgMjUsIDIxNywgNjksIDEsIDE5NywgMjE3LCA2OSwgMSwgMTkwLCAyMTcsIDY5LCAxLCAyMjUsIDE0NywgMjE3LCA2OSwgMSwgCi0gICAgMjUyLCAxOTEsIDIxNywgNjksIDEsIDI1MiwgMTgsIDIxNywgNjksIDEsIDE4NCwgMjE3LCA2OSwgMSwgMTkxLCAyMTcsIDY5LCAKLSAgICAxLCAyMDUsIDIxNywgNjksIDEsIDIzMywgMTM1LCAyMTcsIDY5LCAxLCAyMTQsIDI3LCAyMTcsIDY5LCAxLCAyMjAsIDEwMiwgCi0gICAgMjE3LCA2OSwgMSwgMjA2LCAyMTcsIDY5LCAxLCAxNjIsIDIxNywgNjksIDEsIDIyMiwgMTc5LCAyMTcsIDY5LCA1LCAyNTQsIAotICAgIDc1LCAyMTcsIDY5LCA1LCAyMTMsIDE0NywgMjE3LCA2OSwgMjUsIDUsIDI1NSwgNzMsIDIxNywgNjksIDI1LCA1LCA3MywgCi0gICAgMjE3LCA2OSwgMjUsIDUsIDIzNiwgMzMsIDIxNywgNjksIDI1LCA1LCA3MCwgMjE3LCA2OSwgMjUsIDUsIDIxNCwgMTE4LCAKLSAgICAyMTcsIDY5LCAyNSwgNSwgNzUsIDIxNywgNjksIDI1LCA1LCAyNTQsIDIwMSwgMjE3LCA2OSwgMjUsIDUsIDc2LCAyMTcsIAotICAgIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDIxNywgNjksIDUsIDIxMywgMTUyLCAyMTcsIDY5LCA1LCAyMjcsIDIwNSwgMjE3LCA2OSwgCi0gICAgMjEsIDIxMCwgODYsIDIxNywgNjksIDIxLCAxMTAsIDIxNywgNjksIDIxLCAxMDUsIDIxNywgNjksIDIxLCAxNTgsIDIxNywgCi0gICAgNjksIDIxLCAxNjEsIDIxNywgNjksIDIxLCAxODksIDIxNywgNjksIDIxLCAxOTQsIDIxNywgNjksIDIxLCAxOTgsIDIxNywgCi0gICAgNjksIDIxLCAxOTUsIDIxNywgNjksIDIxLCAyMDAsIDE1LCA1LCA2MSwgMTUsIDUsIDExNSwgMzAsIDYxLCAxNSwgNSwgMTE1LCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAxMTUsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAxMTUsIDMwLCAxNjIsIAotICAgIDE1LCA1LCAxMTUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMTE1LCAzMCwgMjMzLCAxMTYsIDI0MiwgOTQsIDE1LCA1LCAxMTUsIAotICAgIDMwLCAyMzAsIDYxLCAxNSwgNSwgMTE1LCAzMCwgMjIyLCAyMSwgMTUsIDUsIDI1NSwgNzUsIDE1LCA1LCAyNTUsIDI1LCAxNSwgCi0gICAgNSwgMjU1LCAyNiwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNTUsIDI2LCAzMCwgMjQzLCAxMTgsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjU1LCAyNiwgMzAsIDE2MiwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjU1LCAyNiwgCi0gICAgMzAsIDIzNiwgOSwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzMsIDExNywgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMjAsIDQ4LCAKLSAgICAxNSwgNSwgMjU1LCAyNiwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjU1LCAyNiwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI1NSwgMjMsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMjAsIAotICAgIDEwMCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjU0LCAyNTUsIDE1LCA1LCAyNTQsIDE4NiwgMTUsIAotICAgIDUsIDI1NCwgMTg3LCAzMCwgMjQ1LCA4NywgMTUsIDUsIDI1NCwgMTg3LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkwLCAxNSwgCi0gICAgNSwgMjU0LCAxNzgsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNDcsIAotICAgIDIxNiwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjQyLCAxOTAsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDE2MiwgMTUsIDUsIDI1NCwgCi0gICAgMTc5LCAzMCwgMjM0LCAyNTUsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjU0LCAxNzUsIDE1LCA1LCAyNTQsIDE2OCwgCi0gICAgMTUsIDUsIDI1NCwgMTMyLCAxNSwgNSwgMjU0LCAxMzMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjU0LCAxMjMsIDE1LCA1LCAKLSAgICAyNTQsIDEyNCwgMTE3LCAyNTQsIDEyMywgMTUsIDUsIDI1NCwgMTI0LCAxMzQsIDIxNiwgODUsIDE1LCA1LCAyNTQsIDEyNCwgCi0gICAgOTYsIDIyOSwgMjE3LCAyMjYsIDE2NCwgMjU0LCAxMjQsIDk2LCAyMjksIDIxNiwgMTUsIDUsIDI1NCwgMTI0LCA5NiwgMjI5LCAKLSAgICAyMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjU0LCA5NCwgMTUsIDUsIDI1NCwgNjcsIDE1LCA1LCAyNTQsIDM1LCAxNSwgNSwgCi0gICAgMjU0LCAzNiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjU0LCA4LCAxNSwgNSwgMjUzLCAyMzYsIDE1LCA1LCAyNTMsIDIzMSwgCi0gICAgMTUsIDUsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDI1MywgMjMyLCAyMzUsIDMsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDIxNSwgMTE0LCAxMTcsIDIxNSwgMTE0LCAyMTUsIDExNCwgMTE3LCAKLSAgICAyMTUsIDExNCwgMjI2LCAyMSwgMTUsIDUsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMxLCAxNSwgNSwgCi0gICAgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDI0OSwgMTI1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIAotICAgIDIzMiwgMTE3LCAyNTMsIDIzMSwgMTUsIDUsIDI1MywgMjI5LCAxNSwgNSwgMjUzLCAyMjYsIDE1LCA1LCAyNTIsIDE5MSwgCi0gICAgMTUsIDUsIDI1MiwgMTc2LCAxNSwgNSwgMjUyLCAxNzEsIDE1LCA1LCAyNTIsIDE2NywgMTUsIDUsIDI1MiwgMTYxLCAxNSwgCi0gICAgNSwgMjUyLCAxNjIsIDExNywgMjUyLCAxNjEsIDE1LCA1LCAyNTIsIDE2MCwgMTUsIDUsIDEzMCwgMTUsIDUsIDI1MiwgMTQwLCAKLSAgICAxNSwgNSwgMjUyLCA2LCAxNSwgNSwgMjUyLCA3LCAzMCwgNjEsIDE1LCA1LCAyNTIsIDcsIDMwLCAyNDMsIDk2LCAxNSwgNSwgCi0gICAgMjUyLCA3LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMjYsIDExNywgMjUxLCAKLSAgICAxMjYsIDI1NSwgMjUsIDE1LCA1LCAyNTEsIDEyNiwgMTE3LCAyNTEsIDEyNiwgMjE0LCAxOTAsIDE1LCA1LCAyNTEsIDEyNiwgCi0gICAgMjQ5LCAxMjUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMDksIDE1LCA1LCAyNTEsIDExMCwgMTE3LCAyNTEsIDEwOSwgMTUsIAotICAgIDUsIDI1MSwgOTgsIDE1LCA1LCAyNTEsIDk3LCAxNSwgNSwgMjQ4LCAyMjEsIDE1LCA1LCAyNDgsIDIxMiwgMTUsIDUsIDI0OCwgCi0gICAgMjEzLCAyMzQsIDY2LCAzMCwgMTE1LCA5NiwgMjMxLCAxNDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI1NCwgCi0gICAgMTMyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAKLSAgICAzMCwgMjUyLCA2LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIAotICAgIDY2LCAzMCwgMjQzLCAxMzYsIDk2LCAyMzEsIDE0NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQyLCAyMTQsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAKLSAgICAyNDIsIDEwMywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMTYyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIAotICAgIDMwLCAyMzUsIDE3OSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjM1LCAxODAsIDk2LCAyMzIsIDk4LCAxNSwgNSwgCi0gICAgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMzLCAxMzUsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgCi0gICAgOTksIDk2LCAyMzEsIDE0NiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCA4NCwgMTUsIDUsIDI0OCwgMjEzLCAKLSAgICAyMzQsIDY2LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIyNiwgMjIsIDk2LCAyMjYsIAotICAgIDIxLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTksIDE5MSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgCi0gICAgMjE3LCA3MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAyMzEsIDk2LCAyNDIsIDE5NywgMTUsIDUsIAotICAgIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyNDgsIDE4NywgMTUsIDUsIDI0OCwgMTY2LCAxNSwgNSwgCi0gICAgMjQ4LCAxNjUsIDE1LCA1LCAyNDgsIDE2NCwgMTUsIDUsIDI0OCwgMywgMTUsIDUsIDI0NywgMjQyLCAxNSwgNSwgMjQ3LCAKLSAgICAyMTcsIDE1LCA1LCAyNDcsIDIxOCwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDcsIDIxNiwgMTUsIDUsIDI0NywgMjA2LCAxNSwgCi0gICAgNSwgMjQ3LCAyMDcsIDIzNCwgMjA4LCAxMDQsIDI0MiwgOTUsIDI0NywgMTg3LCAxNSwgNSwgMjQ3LCAxODcsIDE1LCA1LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMTE3LCAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI0NiwgNzksIDIyMCwgNDUsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NywgMzAsIDI0NSwgNzIsIDE1LCA1LCAKLSAgICAyNDYsIDc1LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgNzMsIDE1LCA1LCAyNDYsIDcyLCAxNSwgNSwgMjQ2LCA2OCwgCi0gICAgMTUsIDUsIDI0NiwgNjYsIDE1LCA1LCAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgMjQ2LCA2NywgMjQyLCA5NSwgMjQyLCAKLSAgICA5NCwgMTUsIDUsIDI0NiwgNjUsIDE1LCA1LCAyNDYsIDU4LCAxNSwgNSwgNzUsIDE1LCA1LCAxNjAsIDMwLCAyMjYsIDIxLCAKLSAgICAxNSwgNSwgMTYwLCAxMTcsIDE2MCwgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDUsIDIzNCwgMTUsIDUsIAotICAgIDI0NSwgMjM1LCAzMCwgMTE1LCA5NiwgMjQyLCA0OSwgOTYsIDI0OCwgMjIxLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjIyLCA4LCAxNSwgNSwgCi0gICAgMjQ1LCAyMzUsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCA3MCwgMTUsIDUsIDI0NSwgMjExLCAxNSwgNSwgCi0gICAgMjQ1LCAyMDAsIDE1LCA1LCAyNDUsIDE3NCwgMTUsIDUsIDI0NSwgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyNDMsIAotICAgIDEwNCwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyMzEsIAotICAgIDkxLCAxNSwgNSwgMjQ1LCAxNTEsIDI0OSwgMTI1LCAyNDUsIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAyMjYsIDE2NCwgMjQ1LCAKLSAgICAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMjE4LCAyMzMsIDE1LCA1LCAyNDUsIDg5LCAxNSwgNSwgMjQ1LCA4NywgMTUsIDUsIAotICAgIDI0NSwgNzIsIDE1LCA1LCAyNDUsIDEwLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDYxLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgCi0gICAgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgOTYsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAKLSAgICAyNDUsIDExLCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDYsIDY3LCAyNDIsIDk1LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjQ1LCAxMSwgMzAsIDE2MiwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDIsIDQ5LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgCi0gICAgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjM0LCAyMDgsIDIxOCwgMjMzLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMjE1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzMywgMTM1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjMyLCAyNDEsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIzMCwgMTUsIAotICAgIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzYsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjQ4LCAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDExNSwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjU1LCAyNCwgMjE2LCAyNDAsIDk2LCAyMTcsIDkzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTQsIDEyMywgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUzLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MywgMjMwLCA5NiwgMjQzLCAKLSAgICAxMTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTIsIDE0MSwgOTYsIAotICAgIDIwNSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OSwgOTYsIDIwNSwgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ4LCAyMjEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0OCwgMywgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQ3LCAyMTgsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDYsIDc2LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDUsIDE3NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ1LCAxNzUsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMjE0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDIxMiwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQyLCAyMTMsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAxOTgsIDk2LCAyMTgsIAotICAgIDgzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDQ5LCA5NiwgMjMyLCA5OSwgOTYsIDI0NSwgNzIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0MiwgMzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMzEsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQxLCAxODEsIDk2LCAyMzIsIDI0MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQwLCAyMTgsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNSwgMTY2LCA5NiwgMjQwLCAKLSAgICAyMjMsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIzNCwgMjA3LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDg5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDkwLCA5NiwgCi0gICAgMjMzLCAxMDQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzMywgMjE2LCA5NiwgMjU0LCAxMjMsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDE5MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjIyLCA4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2MywgMTUsIAotICAgIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2NCwgOTYsIDIxNSwgOTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgMzAsIDE1LCAKLSAgICA1LCAyNDMsIDEzNCwgMzAsIDIxOCwgNDMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNywgNzIsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDcwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE0LCAyMjAsIDk2LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQzLCAxMzQsIDExNywgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEyOCwgMTUsIDUsIDI0MywgCi0gICAgMTI5LCAyNDksIDEyNSwgMjQzLCAxMjgsIDE1LCA1LCAyNDMsIDEyNiwgMTUsIDUsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAKLSAgICAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAyNDMsIDExOCwgMTUsIDUsIDI0MywgMTE5LCAyNDMsIDEyNywgMTE3LCAKLSAgICAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMjQzLCAxMTcsIDE1LCA1LCAyNDMsIDExNSwgMTUsIDUsIAotICAgIDI0MywgMTA2LCAxNSwgNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEwNSwgCi0gICAgMTE3LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgMTA1LCAyNDksIDEyNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDk2LCAxNSwgCi0gICAgNSwgMjQzLCA5NSwgMTUsIDUsIDI0MywgOTAsIDE1LCA1LCAyNDMsIDM2LCAxNSwgNSwgMjQzLCAzNywgMzAsIDIzMywgMTk2LCAKLSAgICAxNSwgNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxNSwgMzAsIDc1LCAxNSwgNSwgMjQyLCAyMTUsIDMwLCA3MCwgMTUsIDUsIAotICAgIDI0MiwgMjE1LCAyNDksIDEyNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjEzLCAxMTcsIDI0MiwgCi0gICAgMjEyLCAxNSwgNSwgMjQyLCAyMTMsIDI0OSwgMTI1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjA5LCAxNSwgNSwgMjQyLCAKLSAgICAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTk1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAxMTUsIAotICAgIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDE5NiwgCi0gICAgMzAsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDIzMiwgOTksIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIAotICAgIDMwLCAxOTAsIDE1LCA1LCAyNDIsIDE5MiwgMTUsIDUsIDI0MiwgMTkwLCAxNSwgNSwgMjQyLCAxOTEsIDI0OSwgMTI1LCAKLSAgICAyNDIsIDE5MCwgMTUsIDUsIDI0MiwgMTkxLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDIsIDE5MSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyNDIsIDE5MSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDExMywgMTUsIDUsIDI0MiwgMTE0LCAyNDksIDEyNSwgCi0gICAgMjQyLCAxMTMsIDE1LCA1LCAyNDIsIDExMSwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDIsIAotICAgIDExMiwgMzAsIDIzNCwgMjQzLCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIyMiwgOSwgOTYsIDIxNSwgMTEzLCAxNSwgNSwgMjQyLCAxMTIsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDIsIDEwMywgMTUsIDUsIDI0MiwgMTA0LCAzMCwgMTE1LCA5NiwgMjMzLCAxOTYsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIAotICAgIDIzMywgMTk2LCAxNSwgNSwgMjQyLCAxMDQsIDExNywgMjQyLCAxMDQsIDIzMiwgOTEsIDE1LCA1LCAyNDIsIDk4LCAxNSwgNSwgCi0gICAgMjQyLCA5NiwgMTUsIDUsIDI0MiwgOTcsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQyLCA4OCwgMTUsIDUsIDI0MiwgODcsIDE1LCAKLSAgICA1LCAyNDIsIDg0LCAxNSwgNSwgMjQyLCA4MywgMTUsIDUsIDE2MiwgMTUsIDUsIDI0MiwgNDksIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjQyLCA0OSwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMzAsIDE1LCA1LCAyNDEsIDE4MCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjUzLCAyMzEsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgCi0gICAgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjQ3LCAxODcsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI0MywgMTI2LCAxNSwgNSwgMjQxLCAKLSAgICAxODEsIDMwLCAyMzQsIDgxLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDI0MSwgMTgxLCAzMCwgNzAsIDE1LCA1LCAyNDAsIDIyMiwgMTUsIDUsIDI0MCwgMjE4LCAxNSwgCi0gICAgNSwgMjQwLCAyMTksIDMwLCAyNTQsIDEyMywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjQyLCAzMCwgMTUsIDUsIDI0MCwgMjE5LCAKLSAgICAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDIzMiwgMTk3LCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyMTQsIAotICAgIDIxOSwgMTUsIDUsIDI0MCwgMjE1LCAxNSwgNSwgNzMsIDE1LCA1LCAyNDAsIDE1NCwgNjEsIDE1LCA1LCAyNDAsIDExNSwgCi0gICAgMTUsIDUsIDIzNiwgNjMsIDE1LCA1LCAyMzYsIDY0LCAxMTcsIDIzNiwgNjQsIDI1MSwgOTgsIDE1LCA1LCAyMzYsIDY0LCAKLSAgICAxMTcsIDIzNiwgNjQsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAzOCwgMTUsIDUsIDIzNiwgMzUsIDE1LCA1LCAyMzYsIDM2LCAKLSAgICAyNDcsIDI0MiwgMTUsIDUsIDIzNiwgMzYsIDIyMywgMzUsIDE1LCA1LCAyMzYsIDM2LCAxMTcsIDIzNiwgMzYsIDIyMCwgMTQsIAotICAgIDExNywgMjIwLCAxNCwgMjE0LCAyMjAsIDExNywgMjE0LCAyMTksIDE1LCA1LCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjM2LCAyNywgMTUsIDUsIDIzNiwgMjgsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMzYsIDI2LCAxNSwgNSwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjM2LCAxNywgMjQ5LCAxMjUsIDIzNiwgMTYsIAotICAgIDE1LCA1LCAyMzYsIDE3LCAyMjYsIDE2NCwgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAKLSAgICA5LCAxNSwgNSwgMjM1LCAyNTUsIDE1LCA1LCAyMzUsIDE3OSwgMTUsIDUsIDIzNSwgMTY1LCAxNSwgNSwgMTc2LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NCwgMjU1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NSwgCi0gICAgMCwgOTYsIDIzMywgMjE1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgCi0gICAgMTc2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDEzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQ1LCA4NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDUsIDcyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTE4LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjM1LCAxMywgCi0gICAgMzAsIDI0MywgOTcsIDk2LCAyMjAsIDEwMSwgOTYsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMjE0LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMTkxLCA5NiwgMjIxLCAyMzEsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjQyLCAxOTEsIDI0OSwgMTI1LCAyNDIsIDE5MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDExMywgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDg3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMzUsIDEzLCAKLSAgICAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDkyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgODksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMyLCAyNDEsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIDkxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgCi0gICAgOTIsIDk2LCAyNDYsIDc4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgOTIsIDk2LCAyNDIsIDIxNCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzEsIDkyLCA5NiwgMjE3LCAyMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzAsIDIzMSwgOTYsIDIyNywgMTg5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyNSwgMTA4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMiwgCi0gICAgMTQwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMjAsIDEwMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMCwgCi0gICAgMzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAxODIsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjE4LCA1MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTcsIDUwLCAxNSwgNSwgMjM1LCAxMywgMzAsIAotICAgIDcwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjE5LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDIxNCwgMTkzLCAzMCwgMTkwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDExLCAxNSwgNSwgMjM1LCAxMiwgMjQ5LCAxMjUsIDIzNSwgMTEsIDE1LCAKLSAgICA1LCAyMzUsIDQsIDE1LCA1LCAyMzUsIDEsIDE1LCA1LCAyMzQsIDI1NSwgMTUsIDUsIDIzNCwgMjU0LCAxNSwgNSwgMjM0LCAKLSAgICAyNTIsIDE1LCA1LCAyMzQsIDI1MywgMTE3LCAyMzQsIDI1MiwgMTUsIDUsIDIzNCwgMjQyLCAxNSwgNSwgMjM0LCAyNDMsIAotICAgIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjM0LCAyMzgsIDE1LCA1LCAyMzQsIDIzOSwgMzAsIDI1MiwgMTc2LCAxNSwgCi0gICAgNSwgMjM0LCAyMzksIDI0OSwgMTI1LCAyMzQsIDIzOCwgMTUsIDUsIDIzNCwgMjM2LCAxNSwgNSwgMjM0LCAyMzUsIDE1LCA1LCAKLSAgICAyMzQsIDIwNywgMTUsIDUsIDIzNCwgMjA4LCAyMzMsIDExOCwgMzAsIDEwNCwgMTE3LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgCi0gICAgNSwgMjM0LCAyMDgsIDExNywgMjM0LCAyMDgsIDIzMywgMTE4LCAzMCwgMTA0LCAxMTcsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCAKLSAgICA1LCAyMzQsIDE1NywgMTUsIDUsIDIzNCwgOTIsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzQsIAotICAgIDkzLCAzMCwgNzAsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzQsIDg5LCAxNSwgNSwgMjM0LCA4MSwgCi0gICAgMTUsIDUsIDIzNCwgNjgsIDE1LCA1LCAyMzQsIDY3LCAxNSwgNSwgMjM0LCA2NSwgMTUsIDUsIDIzNCwgNjYsIDExNywgMjM0LCAKLSAgICA2NSwgMTUsIDUsIDIzMywgMjE3LCAxNSwgNSwgMjMzLCAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIzMCwgMjMzLCAKLSAgICAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAyMTMsIDE1LCAKLSAgICA1LCAyMzMsIDIxNCwgMjE0LCAxMiwgMTcsIDE1LCA1LCAyMzMsIDIxMiwgMTUsIDUsIDIzMywgMjA5LCAxNSwgNSwgMjMzLCAKLSAgICAyMTAsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIDIwOCwgMTUsIDUsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxOTcsIDIyNiwgCi0gICAgMTY0LCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTkxLCAxNSwgNSwgMjMzLCAxNzIsIDE1LCA1LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTE1LCA5NiwgMjQ4LCAKLSAgICAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDExNSwgOTYsIDI0MywgOTYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDExNSwgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjU0LCAxMjMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MiwgNiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQ4LCAKLSAgICAxNjYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0NSwgMTUwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDI0MiwgMTA0LCA5NiwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjQyLCAzMCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjM2LCAxNywgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNywgOTYsIDIzMiwgOTgsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNCwgODEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDIwOSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAyMTAsIAotICAgIDk2LCAyNDEsIDE4MSwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjMyLCAxOTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgODYsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIyMCwgNjQsIDk2LCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDk2LCAKLSAgICAyNDUsIDg3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyMTksIDIyMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE5LCAyMjQsIDk2LCAyMTksIDIyMywgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCA4NCwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjE3LCA3MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCAyMywgOTYsIDExNSwgOTYsIDIxOCwgODQsIDk2LCAxOTcsIAotICAgIDE1LCA1LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAKLSAgICAyMzEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAyMTgsIDIzMywgMTUsIDUsIDIzMywgMTE1LCAxNSwgNSwgMjMzLCAxMTYsIDMwLCAyMjAsIDYzLCAxNSwgNSwgCi0gICAgMjMzLCAxMTYsIDMwLCAyMjAsIDY0LCA5NiwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE2LCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAKLSAgICAxMTYsIDI0MiwgOTUsIDExNywgMjMzLCAxMTYsIDI0MiwgOTUsIDIyMCwgNjMsIDE1LCA1LCAyMzMsIDExMSwgMTUsIDUsIAotICAgIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTAyLCAxNSwgNSwgMjMzLCAKLSAgICAxMDMsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTAzLCAzMCwgMjMzLCAxOTcsIDk2LCAyMjIsIDE0MCwgMTUsIDUsIAotICAgIDIzMiwgMjQxLCAxNSwgNSwgMjMyLCAyMjYsIDE1LCA1LCAyMzIsIDIxNiwgMTUsIDUsIDIzMiwgMTk3LCAxNSwgNSwgMjMyLCAKLSAgICA5OCwgMTUsIDUsIDIzMiwgOTksIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgCi0gICAgMjU0LCAxNzgsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQ1LCA3MiwgMTUsIAotICAgIDUsIDIzMiwgOTcsIDMwLCAyNDUsIDczLCAyMTYsIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzYsIAotICAgIDE2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNSwgMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDI1NSwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzUsIDAsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzMywgMTM2LCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIyNywgMjM3LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIxOSwgMTkyLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjE5LCAxNzQsIDk2LCAyNTEsIDEyNSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMTUsIDExMywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDIxNiwgMjM5LCAxNSwgNSwgMjMyLCA5NywgMjQ5LCAxMjUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjYsIAotICAgIDE2NCwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIxOCwgMjMzLCAxNSwgNSwgMjMyLCA5NywgMjIwLCA0NSwgMTUsIDUsIAotICAgIDIzMiwgOTUsIDE1LCA1LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgMTE3LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgCi0gICAgMjI2LCAxNjQsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAyMjAsIDQ1LCAxNSwgNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgCi0gICAgODYsIDE1LCA1LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAKLSAgICAyMzIsIDg1LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAxODQsIDE1LCA1LCAyMzEsIDIzOSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyMzEsIDIzOSwgMjQyLCA5NCwgMTUsIDUsIDIzMSwgMjM4LCAxNSwgNSwgMjMxLCAyMTAsIDE1LCA1LCAyMzEsIAotICAgIDE2NiwgMTUsIDUsIDIzMSwgMTQ3LCAxNSwgNSwgMjMxLCAxNDYsIDE1LCA1LCAyMzEsIDkxLCAxNSwgNSwgMjMxLCA0NywgCi0gICAgMTUsIDUsIDIzMCwgMjMwLCAxNSwgNSwgMjMwLCAxODgsIDE1LCA1LCAyMzAsIDEwMiwgMTUsIDUsIDIzMCwgMTAzLCAxMTcsIAotICAgIDIzMCwgMTAyLCAxNSwgNSwgMjMwLCA5MywgMTUsIDUsIDIzMCwgOTQsIDI0MiwgOTQsIDE1LCA1LCAyMzAsIDc4LCAxNSwgNSwgCi0gICAgMjMwLCA2NCwgMTUsIDUsIDIzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjMzLCAKLSAgICAxOTYsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMzAsIDYyLCAxMTcsIDIzMCwgNjEsIDE1LCA1LCAKLSAgICAyMzAsIDYyLCAxMTcsIDIzMCwgNjIsIDMwLCAxMTUsIDk2LCAxOTcsIDE1LCA1LCAyMzAsIDYyLCAyNDksIDEyNSwgMjMwLCAKLSAgICA2MSwgMTUsIDUsIDIzMCwgNTksIDE1LCA1LCAyMzAsIDYwLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYwLCAzMCwgMTE1LCA5NiwgCi0gICAgMjQ4LCAzLCAxNSwgNSwgMjMwLCA2MCwgMzAsIDI0OCwgMywgMTUsIDUsIDIzMCwgNjAsIDI0MiwgOTQsIDE1LCA1LCAxOTcsIAotICAgIDE1LCA1LCAyMjksIDIyNywgMTUsIDUsIDIyOSwgMjE2LCAxNSwgNSwgMjI5LCAyMTcsIDIzNSwgMTkyLCAxNSwgNSwgMjI5LCAKLSAgICAyMTcsIDMwLCAyMTksIDIyNiwgMjE2LCAyMzksIDE1LCA1LCAyMjksIDIxNywgMjI2LCAxNjQsIDIyOSwgMjE2LCAxNSwgNSwgCi0gICAgMjI5LCAyMTUsIDE1LCA1LCAyMjksIDIwOCwgMjI3LCAxODAsIDE1LCA1LCAyMjksIDIwNywgMTUsIDUsIDIyOSwgMjA2LCAKLSAgICAxNSwgNSwgMjI5LCAxMDcsIDE1LCA1LCAyMjksIDEwOCwgMzAsIDYxLCAxNSwgNSwgMjI5LCAxMDgsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIyOSwgMTA4LCAyMjAsIDQ1LCAxNSwgNSwgMjI4LCAyMzMsIDE1LCA1LCAyMjgsIDIzNCwgMzAsIDc1LCAxNSwgCi0gICAgNSwgMjI4LCAyMzIsIDE1LCA1LCAyMjgsIDIwMywgMTUsIDUsIDIyOCwgMjA0LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjI4LCAyMDQsIDMwLCAyNDMsIDk3LCA5NiwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjI4LCAyMDEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgCi0gICAgMjAyLCAzMCwgMjUzLCAyMzIsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAKLSAgICAyMjgsIDIwMiwgMzAsIDIzMSwgOTIsIDk2LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyOSwgCi0gICAgMTA3LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2MywgMTUsIDUsIAotICAgIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDExNSwgMjU0LCAxMjMsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIAotICAgIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDI1MywgMjMyLCA5NiwgMjUzLCAyMzEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgCi0gICAgMTI2LCAxNSwgNSwgMjI4LCAxOTAsIDE1LCA1LCAyMjcsIDIzNywgMTUsIDUsIDIyNywgMjEwLCAxNSwgNSwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgCi0gICAgMjMxLCAxNDcsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAKLSAgICAxMTYsIDMwLCAyMjIsIDksIDExNywgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjI3LCAxOTUsIAotICAgIDIzMywgMTE2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5NSwgMjE2LCAyMzksIDE1LCA1LCAyMjcsIDE5NSwgMTE3LCAKLSAgICAyMjcsIDE5NCwgMTUsIDUsIDIyNywgMTk1LCAyNDksIDEyNSwgMjI3LCAxOTQsIDE1LCA1LCAyMjcsIDE5NSwgMjQ5LCAxMjUsIAotICAgIDIyNywgMTk1LCAyMzMsIDExNiwgMTE3LCAyMzMsIDExNSwgMTUsIDUsIDIyNywgMTg5LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgCi0gICAgMjQsIDMwLCAyNTMsIDIyNiwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjI3LCAxOTAsIAotICAgIDI1NSwgMjQsIDMwLCAyNDYsIDc0LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyNDIsIDEwMywgMTUsIDUsIDIyNywgCi0gICAgMTkwLCAyNTUsIDI0LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjM0LCAKLSAgICAyNTUsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIAotICAgIDMwLCAyMjksIDEwNywgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjE5LCAxNzEsIDE1LCA1LCAyMjcsIDE5MCwgCi0gICAgMjU1LCAyNCwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTAsIDIzNCwgNjYsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMjcsIAotICAgIDE5MCwgMjM0LCA2NiwgMzAsIDI1MiwgNywgNzAsIDE1LCA1LCAxOTAsIDE1LCA1LCAyMjYsIDgwLCAxNSwgNSwgMjI2LCA0NywgCi0gICAgMTUsIDUsIDIyNiwgMjEsIDE1LCA1LCAyMjUsIDE2MSwgMTUsIDUsIDIyNSwgMTA4LCAxNSwgNSwgMjI1LCAxMDksIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjU1LCAyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjUyLCA2LCAxNSwgNSwgCi0gICAgMjI1LCAxMDksIDMwLCAyNTEsIDEyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDczLCAKLSAgICAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNDAsIDExNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzAsIDE1LCA1LCAyMjUsIDEwOSwgCi0gICAgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMDksIDI0OSwgMTI1LCAyMjUsIDEwOCwgMTUsIDUsIDIyNSwgNTMsIDE1LCA1LCAKLSAgICAyMjUsIDU0LCAzMCwgMjM0LCAyMzgsIDE1LCA1LCAyMjUsIDU0LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMjUsIDU0LCAzMCwgCi0gICAgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU0LCAyMjYsIDE2NCwgMjI1LCA1MywgMTUsIDUsIDIwNSwgMTUsIDUsIDIyMywgMTgyLCAKLSAgICAxNSwgNSwgMjIzLCAzNSwgMTUsIDUsIDIyMiwgMTQwLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAyMiwgMjI3LCAxODAsIAotICAgIDE1LCA1LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDI0NiwgNzgsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjQ2LCA3NiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAxNjIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgCi0gICAgMjM0LCAyNDIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMyLCA4NCwgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyMiwgMjIsIAotICAgIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjIwLCAzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTcsIDkzLCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjI1LCAxNSwgNSwgMjIyLCAyMiwgCi0gICAgMzAsIDIxNCwgMTk3LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTUwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTI2LCAKLSAgICAxNSwgNSwgMjIyLCAyMiwgMTE3LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMjQyLCA5NCwgMTUsIDUsIDIyMiwgOCwgMTUsIAotICAgIDUsIDIyMiwgOSwgMjMzLCAxMTgsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIyMSwgMjM5LCAxNSwgNSwgMjIxLCAyMzEsIDE1LCAKLSAgICA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMTAxLCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDI0MiwgMTkwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMjksIAotICAgIDEwNywgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjE5LCAyMjMsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIxNSwgOTgsIDE1LCA1LCAKLSAgICAyMjAsIDEwMSwgMzAsIDcwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIyMCwgOTksIDE1LCAKLSAgICA1LCAyMjAsIDk3LCAxNSwgNSwgMjIwLCA3OCwgMTUsIDUsIDIyMCwgNjMsIDE1LCA1LCAyMjAsIDY0LCAyNDAsIDIyMiwgMTUsIAotICAgIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjE3LCA5NCwgMTE3LCAyMTcsIDk0LCAyNDMsIDk3LCAxMTcsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyMjAsIDU2LCAxNSwgNSwgMjIwLCA1MSwgMTUsIDUsIDIyMCwgNDgsIDE1LCA1LCAyMjAsIDQ3LCAxNSwgCi0gICAgNSwgMjIwLCA0NCwgMTUsIDUsIDIyMCwgMzAsIDE1LCA1LCAyMjAsIDMxLCAzMCwgNjEsIDE1LCA1LCAyMjAsIDMxLCAzMCwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIyMCwgMjQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUyLCAKLSAgICAxNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUxLCAxMDksIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjQ3LCAyMDYsIDE1LCA1LCAKLSAgICAyMjAsIDI1LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjIwLCAyNSwgMzAsIAotICAgIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMzLCAxOTEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMyLCAKLSAgICA4NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzAsIDkzLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyMCwgCi0gICAgMTgsIDE1LCA1LCAyMjAsIDEzLCAxNSwgNSwgMjIwLCAxNCwgMjE2LCAyMzksIDE1LCA1LCAyMjAsIDE0LCAxMTcsIDIyMCwgCi0gICAgMTQsIDI1MSwgOTksIDExNywgMjUxLCA5OCwgMTUsIDUsIDIyMCwgOSwgMTUsIDUsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAKLSAgICAyMjYsIDExNywgMjM1LCAxOTMsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAyMjMsIDE1LCA1LCAyMTksIDIyMiwgMTUsIDUsIAotICAgIDIxOSwgMTkxLCAxNSwgNSwgMjE5LCAxOTIsIDI0MiwgOTQsIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgwLCAxNSwgCi0gICAgNSwgMjE5LCAxODEsIDExNywgMjE5LCAxODEsIDIxOSwgMjIzLCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTksIDE3MSwgCi0gICAgMTUsIDUsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDg0LCAxMTcsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDU0LCAxNSwgNSwgMjE4LCAKLSAgICA1MywgMTUsIDUsIDIxOCwgNTEsIDE1LCA1LCAyMTgsIDQzLCAxNSwgNSwgMjE4LCA0MiwgMTUsIDUsIDIxOCwgMTcsIDE1LCAKLSAgICA1LCAyMTgsIDE2LCAxNSwgNSwgMjE3LCAxMDUsIDE1LCA1LCAyMTcsIDEwNiwgMjUzLCAyMTYsIDE1LCA1LCAyMTcsIDEwNiwgCi0gICAgMzAsIDI0MSwgMTgwLCAxNSwgNSwgMjE3LCAxMDYsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNywgMTA2LCAyNDIsIDk0LCAKLSAgICAxNSwgNSwgMjE3LCA5MywgMTUsIDUsIDIxNywgOTQsIDExNywgMjE3LCA5NCwgMjI4LCAyMzQsIDExNywgMjI4LCAyMzQsIAotICAgIDI0NywgMTg4LCAxMTcsIDI0NywgMTg3LCAxNSwgNSwgMjE3LCA5NCwgMjE4LCAyMzMsIDE1LCA1LCAyMTcsIDg0LCAxNSwgNSwgCi0gICAgMTI5LCAzMCwgMjUyLCA2LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAxMjksIDMwLCAyMjAsIDYzLCAxNSwgCi0gICAgNSwgMTI5LCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAxMjksIDMwLCAyMTUsIDExMywgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjE3LCA3MiwgMTUsIDUsIDIxNywgNTAsIDE1LCA1LCAyMTcsIDIyLCAxNSwgNSwgMjE3LCAyMywgMjQyLCA5NCwgCi0gICAgMTUsIDUsIDIxNiwgMTE3LCAxNSwgNSwgMjE2LCAxMTgsIDIxNiwgMjM5LCAxNSwgNSwgMjE2LCA5MCwgMTUsIDUsIDIxNiwgCi0gICAgNzIsIDE1LCA1LCAyMTYsIDczLCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNiwgNzMsIDExNywgMjE2LCA3MiwgMTUsIDUsIAotICAgIDIxNiwgNzMsIDExNywgMjE2LCA3MywgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIxNSwgMTE4LCAxNSwgNSwgMjE1LCAxMTMsIDE1LCA1LCAyMTUsIDExMSwgMTUsIDUsIDIxNSwgMTA4LCAxNSwgCi0gICAgNSwgMjE1LCA5OCwgMTUsIDUsIDIxNSwgOTksIDExNywgMjE1LCA5OSwgMjEwLCAxMTcsIDExNywgMjEwLCAxMTYsIDE1LCA1LCAKLSAgICA3MCwgMTUsIDUsIDEwNCwgMjQyLCAxMDMsIDE1LCA1LCAxMDQsIDEwNCwgNzAsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAyMjYsIAotICAgIDkwLCAxMTcsIDIyNiwgOTAsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDIxOCwgMTgsIAotICAgIDExNywgMjE4LCAxNywgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDEwNCwgMjIzLCA0OSwgMTE3LCAxMDQsIDIyMywgNDgsIDE1LCAKLSAgICA1LCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMjI1LCAxNSwgNSwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIDIyMCwgMjMzLCAxOTEsIAotICAgIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNCwgCi0gICAgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIAotICAgIDEwNCwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMjIwLCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDUsIDE1LCA1LCAKLSAgICAyMTQsIDIyMCwgMjIwLCA0NiwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTk4LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTIsIDk2LCAyNDgsIDIyMSwgMTUsIAotICAgIDUsIDIxNCwgMTk4LCAzMCwgMjIwLCAxMDAsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDcwLCAxNSwgNSwgMjE0LCAxOTYsIDE1LCAKLSAgICA1LCAyMTQsIDE5MiwgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MCwgMTUsIAotICAgIDUsIDIxNCwgMTkwLCAxNSwgNSwgMjE0LCAxOTEsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAKLSAgICAyNDksIDEyNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjIwLCA0NSwgMTUsIDUsIDIxNCwgMTQ4LCAxNSwgNSwgCi0gICAgMjE0LCAxNDksIDMwLCAxMTUsIDk2LCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNSwgOTYsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTQ5LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgCi0gICAgMjI3LCAxOTQsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgCi0gICAgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MiwgNiwgMTUsIDUsIDIxNCwgMTQ3LCAKLSAgICAxNSwgNSwgMjE0LCAxNDQsIDE1LCA1LCAyMTQsIDE0MywgMTUsIDUsIDIxNCwgMTM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjUzLCAyMjYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEzMCwgMTUsIDUsIDIxNCwgCi0gICAgMTQwLCAzMCwgMjQ2LCA2OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgMTE4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgOTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MiwgMTEzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAKLSAgICAyMTQsIDE0MCwgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDIzNSwgMTY1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg0LCAxNSwgCi0gICAgNSwgMjE0LCAxNDAsIDMwLCAyMzAsIDE4OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTgsIAotICAgIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTAzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNzAsIAotICAgIDE1LCA1LCAyMTQsIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjE3LCAKLSAgICAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNCwgCi0gICAgMTIyLCAxNSwgNSwgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIAotICAgIDE1LCA1LCAyMTQsIDEwOSwgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIAotICAgIDIxMCwgMTE3LCAyMTYsIDIzOSwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjEwLCAxMTMsIAotICAgIDE1LCA1LCAyMTAsIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE3LCAKLSAgICAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDMsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjEwLCAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIAotICAgIDUsIDIxMCwgMTIsIDMwLCA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAKLSAgICAyMzEsIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MywgMjMxLCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMjAsIAotICAgIDEyMiwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI1MywgCi0gICAgMjMxLCAxNSwgMTMyLCA1LCAxMzQsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNDcsIDE4NywgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjIwLCAKLSAgICAxMjIsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDcsIAotICAgIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgNzAsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDcwLCAxNSwgMTMyLCA1LCAyMTksIAotICAgIDEyNSwgNzAsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCA3MCwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDcwLCAxNSwgMTMyLCA1LCAKLSAgICAyMjgsIDIwMCwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDM4LCAxNSwgCi0gICAgMTMyLCA1LCAxMzQsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgODEsIAotICAgIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjQzLCAzOCwgCi0gICAgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDExMywgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDM1LCAxNSwgCi0gICAgMTMyLCA1LCAyNDQsIDExLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMTMsIAotICAgIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc5LCAyMTQsIDEyLCAxNywgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgCi0gICAgMjE5LCAxMjUsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgCi0gICAgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3MywgMTUsIAotICAgIDEzMiwgNSwgMTEzLCAyMjAsIDczLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NCwgCi0gICAgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIyMCwgNzMsIAotICAgIDE1LCAxMzIsIDUsIDIyMCwgNzksIDMwLCAyNDMsIDExOSwgOTYsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjAsIDc5LCAzMCwgCi0gICAgMjQzLCAxMTksIDk2LCAyMzAsIDE4OCwgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMTMsIDI1MSwgCi0gICAgOTUsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDk2LCAyMTQsIDEyLCAxNywgMTUsIAotICAgIDEzMiwgNSwgMjQ0LCAxMSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyNDUsIDc0LCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjAsIDI0NSwgNzEsIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxNSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAKLSAgICAyMTgsIDYxLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxOCwgMjUzLCAxNTgsIDE1LCAKLSAgICAxMzIsIDUsIDIxOSwgMTI1LCAyMTQsIDEyLCAyNDQsIDIwLCAyNTMsIDIyOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgCi0gICAgMTIsIDI0NCwgMjAsIDIzNiwgOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMTAsIDYxLCAKLSAgICAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAxMCwgMjUzLCAxNTgsIDE1LCAxMzIsIDUsIAotICAgIDI0NSwgMTkzLCAyMTQsIDEyLCAyNDQsIDIwLCAyMTQsIDEyMSwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDIxNCwgMTIsIDI0NCwgCi0gICAgMjAsIDIxNCwgMTIwLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNCwgMTUsIDEzMiwgCi0gICAgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjMsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAKLSAgICAyNDQsIDIwLCAyMzYsIDIyLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNSwgNjEsIAotICAgIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjMyLCAyMTYsIDIzOSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTMsIDIzMiwgCi0gICAgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDEyMywgMjUyLCAKLSAgICAxNTAsIDE1LCAxMzIsIDUsIDExMywgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDEzNCwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIAotICAgIDI0NCwgMTEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAKLSAgICAxMzIsIDUsIDIyOCwgMjEwLCAxNSwgMTMyLCA1LCAyMjgsIDIxMSwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDcwLCAxNSwgCi0gICAgMTMyLCA1LCAxMTMsIDI0NSwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNjksIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAKLSAgICAxMTMsIDIxNiwgMTY3LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjE5LCAxMTQsIDI0NywgMTg3LCAxNSwgCi0gICAgMTMyLCA1LCAxMjMsIDIxNiwgMTY5LCAyMTQsIDEyLCAyNDQsIDIwLCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2NywgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgNjEsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCAxODksIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDIyNCwgMjIsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMTksIDEyMywgMjE5LCAxMTUsIDE1LCAxMzIsIAotICAgIDUsIDU1LCAyNTMsIDIxOSwgMTIzLCAyMjQsIDIxLCAxNSwgMjI0LCAxNDEsIDUsIDU1LCAyNTMsIDIxOSwgMjExLCAyMDksIAotICAgIDI0NywgMTcyLCAxNSwgMjI0LCAxNDEsIDUsIDY3LCAyNDksIDIyNiwgMTUsIDIyNCwgMTQxLCA1LCAyNDcsIDI1NSwgMjQ5LCAKLSAgICAyMjYsIDE1LCAyMjQsIDE0MSwgNSwgMjQ3LCAyNTUsIDIxNSwgMjIxLCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTU0LCAxMiwgMTMsIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTUwLCAxMiwgMTMsIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTQ2LCAxMiwgMTMsIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTQyLCAxMiwgMTMsIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM4LCAxMiwgMTMsIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM0LCAxMiwgMTMsIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTMwLCAxMiwgMTMsIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTI2LCAxMiwgMTMsIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTIyLCAxMiwgMTMsIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE4LCAxMiwgMTMsIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE0LCAxMiwgMTMsIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgCi0gICAgMTEwLCAxMiwgMTMsIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTA2LCAxMiwgMTMsIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTAyLCAxMiwgMTMsIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCAKLSAgICA5OCwgMTIsIDEzLCAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAKLSAgICAxMiwgMTMsIDI1NSwgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAKLSAgICAxMywgMjU1LCA4OSwgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAKLSAgICAyNTUsIDg1LCAxMiwgMTMsIDI1NSwgODQsIDEyLCAxMywgMjU1LCA4MywgMTIsIDEzLCAyNTUsIDgyLCAxMiwgMTMsIDI1NSwgCi0gICAgODEsIDEyLCAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgCi0gICAgMTIsIDEzLCAyNTUsIDc2LCAxMiwgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU0LCAxMiwgMTMsIDI1MywgMTUyLCAKLSAgICAxMiwgMTMsIDI1MywgMTUwLCAxMiwgMTMsIDI1MywgMTQ4LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MywgMTQ1LCAKLSAgICAxMiwgMTMsIDI1MywgMTQzLCAxMiwgMTMsIDI1MywgMTQxLCAxMiwgMTMsIDI1MywgMTM5LCAxMiwgMTMsIDI1MSwgNjIsIAotICAgIDEyLCAxMywgMjUxLCA2MSwgMTIsIDEzLCAyNTEsIDYwLCAxMiwgMTMsIDI1MSwgNTksIDEyLCAxMywgMjUxLCA1OCwgMTIsIAotICAgIDEzLCAyNTEsIDU3LCAxMiwgMTMsIDI1MSwgNTYsIDEyLCAxMywgMjUxLCA1NSwgMTIsIDEzLCAyNTEsIDU0LCAxMiwgMTMsIAotICAgIDI1MSwgNTMsIDEyLCAxMywgMjUxLCA1MiwgMTIsIDEzLCAyNTEsIDUxLCAxMiwgMTMsIDI1MSwgNTAsIDEyLCAxMywgMjUxLCAKLSAgICA0OSwgMTIsIDEzLCAyNTEsIDQ4LCAxMiwgMTMsIDI1MSwgNDcsIDEyLCAxMywgMjUxLCA0NiwgMTIsIDEzLCAyNTEsIDQ1LCAKLSAgICAxMiwgMTMsIDI1MSwgNDQsIDEyLCAxMywgMjUxLCA0MywgMTIsIDEzLCAyNTEsIDQyLCAxMiwgMTMsIDI1MSwgNDEsIDEyLCAKLSAgICAxMywgMjUxLCA0MCwgMTIsIDEzLCAyNTEsIDM5LCAxMiwgMTMsIDI1MSwgMzgsIDEyLCAxMywgMjUxLCAzNywgMTIsIDEzLCAKLSAgICAyNTEsIDM2LCAxMiwgMTMsIDI1MSwgMzUsIDEyLCAxMywgMjQ5LCA1OSwgMTIsIDEzLCAyNDksIDU4LCAxMiwgMTMsIDI0OSwgCi0gICAgNTcsIDEyLCAxMywgMjQ5LCA1NiwgMTIsIDEzLCAyNDksIDU1LCAxMiwgMTMsIDI0OSwgNTQsIDEyLCAxMywgMjQ5LCA1MywgCi0gICAgMTIsIDEzLCAyNDksIDUyLCAxMiwgMTMsIDI0OSwgNTEsIDEyLCAxMywgMjQ5LCA1MCwgMTIsIDEzLCAyNDksIDQ5LCAxMiwgCi0gICAgMTMsIDI0OSwgNDgsIDEyLCAxMywgMjQ5LCA0NywgMTIsIDEzLCAyNDksIDQ2LCAxMiwgMTMsIDI0OSwgNDUsIDEyLCAxMywgCi0gICAgMjQ5LCA0NCwgMTIsIDEzLCAyNDksIDQzLCAxMiwgMTMsIDI0OSwgNDIsIDEyLCAxMywgMjQ5LCA0MSwgMTIsIDEzLCAyNDksIAotICAgIDQwLCAxMiwgMTMsIDI0OSwgMzksIDEyLCAxMywgMjQ5LCAzOCwgMTIsIDEzLCAyNDksIDM3LCAxMiwgMTMsIDI0OSwgMzYsIAotICAgIDEyLCAxMywgMjQ5LCAzNSwgMTIsIDEzLCAyNDksIDM0LCAxMiwgMTMsIDI0OSwgMzMsIDEyLCAxMywgMjQ5LCAzMiwgMTIsIAotICAgIDEzLCAyNDksIDMxLCAxMiwgMTMsIDI0OSwgMzAsIDEyLCAxMywgMjQ5LCAyOSwgMTIsIDEzLCAyNDksIDI4LCAxMiwgMTMsIAotICAgIDI0OSwgMjcsIDEyLCAxMywgMjQ5LCAyNiwgMTIsIDEzLCAyNDksIDI1LCAxMiwgMTMsIDI0OSwgMjQsIDEyLCAxMywgMjQ5LCAKLSAgICAyMywgMTIsIDEzLCAyNDksIDIyLCAxMiwgMTMsIDI0OSwgMjEsIDEyLCAxMywgMjQ5LCAyMCwgMTIsIDEzLCAyNDksIDE5LCAKLSAgICAxMiwgMTMsIDI0OSwgMTgsIDEyLCAxMywgMjQ5LCAxNywgMTIsIDEzLCAyNDksIDE2LCAxMiwgMTMsIDI0OSwgMTUsIDEyLCAKLSAgICAxMywgMjQ5LCAxNCwgMTIsIDEzLCAyNDksIDEzLCAxMiwgMTMsIDI0OSwgMTIsIDEyLCAxMywgMjQ5LCAxMSwgMTIsIDEzLCAKLSAgICAyNDksIDEwLCAxMiwgMTMsIDI0OSwgOSwgMTIsIDEzLCAyNDksIDgsIDEyLCAxMywgMjQ5LCA3LCAxMiwgMTMsIDI0OSwgNiwgCi0gICAgMTIsIDEzLCAyNDksIDUsIDEyLCAxMywgMjQ5LCA0LCAxMiwgMTMsIDI0OSwgMywgMTIsIDEzLCAyNDksIDIsIDEyLCAxMywgCi0gICAgMjQ5LCAxLCAxMiwgMTMsIDI0OSwgMCwgMTIsIDEzLCAyNDgsIDI1NSwgMTIsIDEzLCAyNDgsIDI1NCwgMTIsIDEzLCAyNDgsIAotICAgIDI1MywgMTIsIDEzLCAyNDgsIDI1MiwgMTIsIDEzLCAyNDgsIDI1MSwgMTIsIDEzLCAyNDgsIDI1MCwgMTIsIDEzLCAyNDgsIAotICAgIDI0OSwgMTIsIDEzLCAyNDgsIDI0OCwgMTIsIDEzLCAyNDgsIDI0NywgMTIsIDEzLCAyNDgsIDI0NiwgMTIsIDEzLCAyNDgsIAotICAgIDI0NSwgMTIsIDEzLCAyNDgsIDI0NCwgMTIsIDEzLCAyNDgsIDI0MywgMTIsIDEzLCAyNDgsIDI0MiwgMTIsIDEzLCAyNDgsIAotICAgIDI0MSwgMTIsIDEzLCAyNDgsIDI0MCwgMTIsIDEzLCAyNDgsIDIzOSwgMTIsIDEzLCAyNDgsIDIzOCwgMTIsIDEzLCAyNDgsIAotICAgIDIzNywgMTIsIDEzLCAyNDgsIDIzNiwgMTIsIDEzLCAyNDgsIDIzNSwgMTIsIDEzLCAyNDgsIDIzNCwgMTIsIDEzLCAyNDgsIAotICAgIDIzMywgMTIsIDEzLCAyNDgsIDIzMiwgMTIsIDEzLCAyNDgsIDIzMSwgMTIsIDEzLCAyNDgsIDIzMCwgMTIsIDEzLCAyNDgsIAotICAgIDIyOSwgMTIsIDEzLCAyNDgsIDIyOCwgMTIsIDEzLCAyNDgsIDIyNywgMTIsIDEzLCAyNDgsIDIyNiwgMTIsIDEzLCAyNDgsIAotICAgIDIyNSwgMTIsIDEzLCAyNDgsIDIyNCwgMTIsIDEzLCAyNDYsIDIzLCAxMiwgMTMsIDI0NiwgMjIsIDEyLCAxMywgMjQ2LCAyMSwgCi0gICAgMTIsIDEzLCAyNDYsIDIwLCAxMiwgMTMsIDI0NiwgMTksIDEyLCAxMywgMjQ2LCAxOCwgMTIsIDEzLCAyNDYsIDE3LCAxMiwgCi0gICAgMTMsIDI0NiwgMTYsIDEyLCAxMywgMjQ2LCAxNSwgMTIsIDEzLCAyNDYsIDE0LCAxMiwgMTMsIDI0NiwgMTMsIDEyLCAxMywgCi0gICAgMjQ2LCAxMiwgMTIsIDEzLCAyNDYsIDExLCAxMiwgMTMsIDI0NiwgMTAsIDEyLCAxMywgMjQ2LCA5LCAxMiwgMTMsIDI0NiwgCi0gICAgOCwgMTIsIDEzLCAyNDYsIDcsIDEyLCAxMywgMjQ2LCA2LCAxMiwgMTMsIDI0NiwgNSwgMTIsIDEzLCAyNDYsIDQsIDEyLCAKLSAgICAxMywgMjQ2LCAzLCAxMiwgMTMsIDI0NiwgMiwgMTIsIDEzLCAyNDYsIDEsIDEyLCAxMywgMjQ2LCAwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjU1LCAxMiwgMTMsIDI0NSwgMjU0LCAxMiwgMTMsIDI0NSwgMjUzLCAxMiwgMTMsIDI0NSwgMjUyLCAxMiwgMTMsIDI0NSwgCi0gICAgMjUxLCAxMiwgMTMsIDI0NSwgMjUwLCAxMiwgMTMsIDI0NSwgMjQ5LCAxMiwgMTMsIDI0NSwgMjQ4LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQ3LCAxMiwgMTMsIDI0NSwgMjQ2LCAxMiwgMTMsIDI0NSwgMjQ1LCAxMiwgMTMsIDI0NSwgMjQ0LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQzLCAxMiwgMTMsIDI0NSwgMjQyLCAxMiwgMTMsIDI0NSwgMjQxLCAxMiwgMTMsIDI0NSwgMjQwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjM5LCAxMiwgMTMsIDI0NSwgMjM4LCAxMiwgMTMsIDI0NSwgMjM3LCAxMiwgMTMsIDI0NSwgMjM2LCAxMiwgMTMsIDI0NSwgCi0gICAgNSwgMTIsIDEzLCAyNDUsIDQsIDEyLCAxMywgMjQ1LCAzLCAxMiwgMTMsIDI0NSwgMiwgMTIsIDEzLCAyNDUsIDEsIDEyLCAKLSAgICAxMywgMjQ1LCAwLCAxMiwgMTMsIDI0NCwgMjU1LCAxMiwgMTMsIDI0NCwgMjU0LCAxMiwgMTMsIDI0NCwgMjUzLCAxMiwgMTMsIAotICAgIDI0NCwgMjUyLCAxMiwgMTMsIDI0NCwgMjUxLCAxMiwgMTMsIDI0NCwgMjUwLCAxMiwgMTMsIDI0NCwgMjQ5LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ4LCAxMiwgMTMsIDI0NCwgMjQ3LCAxMiwgMTMsIDI0NCwgMjQ2LCAxMiwgMTMsIDI0NCwgMjQ1LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ0LCAxMiwgMTMsIDI0NCwgMjQzLCAxMiwgMTMsIDI0NCwgMjQyLCAxMiwgMTMsIDI0NCwgMjQxLCAxMiwgMTMsIAotICAgIDI0NCwgMjQwLCAxMiwgMTMsIDI0NCwgMjM5LCAxMiwgMTMsIDI0NCwgMjM4LCAxMiwgMTMsIDI0NCwgMjM3LCAxMiwgMTMsIAotICAgIDI0NCwgMjM2LCAxMiwgMTMsIDI0NCwgMjM1LCAxMiwgMTMsIDI0NCwgMjM0LCAxMiwgMTMsIDI0NCwgMjMzLCAxMiwgMTMsIAotICAgIDI0NCwgMjMyLCAxMiwgMTMsIDI0NCwgMjMxLCAxMiwgMTMsIDI0NCwgMjMwLCAxMiwgMTMsIDI0NCwgMjI5LCAxMiwgMTMsIAotICAgIDI0NCwgMjI4LCAxMiwgMTMsIDI0NCwgMjI3LCAxMiwgMTMsIDI0NCwgMjI2LCAxMiwgMTMsIDI0NCwgMjI1LCAxMiwgMTMsIAotICAgIDI0NCwgMjI0LCAxMiwgMTMsIDI0NCwgMjIzLCAxMiwgMTMsIDI0NCwgMjIyLCAxMiwgMTMsIDI0NCwgMjIxLCAxMiwgMTMsIAotICAgIDI0NCwgMjIwLCAxMiwgMTMsIDI0NCwgMjE5LCAxMiwgMTMsIDI0NCwgMjE4LCAxMiwgMTMsIDI0NCwgMjE3LCAxMiwgMTMsIAotICAgIDI0NCwgMjE2LCAxMiwgMTMsIDI0NCwgMjE1LCAxMiwgMTMsIDI0NCwgMjE0LCAxMiwgMTMsIDI0NCwgMjEzLCAxMiwgMTMsIAotICAgIDI0NCwgMjEyLCAxMiwgMTMsIDI0NCwgMjExLCAxMiwgMTMsIDI0NCwgMjEwLCAxMiwgMTMsIDI0NCwgMjA5LCAxMiwgMTMsIAotICAgIDI0NCwgMjA4LCAxMiwgMTMsIDI0NCwgMjA3LCAxMiwgMTMsIDI0NCwgMjA2LCAxMiwgMTMsIDI0NCwgMjA1LCAxMiwgMTMsIAotICAgIDI0NCwgMjA0LCAxMiwgMTMsIDI0NCwgMjAzLCAxMiwgMTMsIDI0NCwgMjAyLCAxMiwgMTMsIDI0NCwgMjAxLCAxMiwgMTMsIAotICAgIDI0NCwgMjAwLCAxMiwgMTMsIDI0NCwgMTk5LCAxMiwgMTMsIDI0NCwgMTk4LCAxMiwgMTMsIDI0NCwgMTk3LCAxMiwgMTMsIAorICAgIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDE4NCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDU5LCAKKyAgICA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIAorICAgIDAsIDIyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgCisgICAgMCwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgCisgICAgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIAorICAgIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMjExLCAxMTgsIAorICAgIDIsIDU5LCA1MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDQsIAorICAgIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDYsIDEsIDIzMCwgMjI4LCAyMzIsIDE5MSwgNywgNCwgMSwgMjMwLCAyMjgsIDIzMiwgCisgICAgMTkxLCA3LCA2LCAxLCAyMzAsIDIyOCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIzMCwgMjI4LCAyMTQsIDEwNSwgNywgNiwgMSwgCisgICAgMjExLCAxMTgsIDIsIDIzMiwgMTI5LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgCisgICAgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIAorICAgIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU3LCAKKyAgICAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIAorICAgIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCAKKyAgICA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDI0NSwgCisgICAgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIAorICAgIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MSwgMjYsIAorICAgIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgCisgICAgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU3LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAKKyAgICAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA0LCAKKyAgICAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCisgICAgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIAorICAgIDE2MSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIAorICAgIDEwOSwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIAorICAgIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA0LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgCisgICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDQsIDEsIDI0NSwgNzIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAKKyAgICAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAKKyAgICAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIAorICAgIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIAorICAgIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAKKyAgICAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIAorICAgIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAKKyAgICAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIAorICAgIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAKKyAgICAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjE0LCAKKyAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIAorICAgIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTMsIDEyMCwgMjYsIDYsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyMzEsIDIzNywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTcwLCAyNiwgMjM0LCA4LCAyNiwgMjI0LCAKKyAgICAxNzAsIDI2LCAyMjQsIDE1NywgMjYsIDIyNSwgMTc4LCAyNiwgMjQ4LCA0LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDI0NSwgNzIsIDIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjUsIDE3OCwgMjYsIAorICAgIDQsIDEsIDI0NSwgNzIsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTcwLCAyNiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMTQsIDEzLCAyNiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjYsIDExNCwgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMzEsIDIzNywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIDI2LCA0LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIyMywgNDEsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjIzLCA0MSwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIyMywgNDEsIDIsIDI0OCwgMTYxLCAyNiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgNCwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIAorICAgIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA2LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyMjQsIDE3MCwgMjYsIDIyNiwgMTE0LCAyNiwgMjQ4LCAxNjEsIDI0NSwgMTU5LCAyMjQsIDMwLCAKKyAgICAyNDUsIDE2OCwgMjI0LCAzMCwgMjQ1LCAxNTksIDIxOSwgMjAsIDI0NSwgMTY4LCAyMTksIDIwLCAyMTYsIDE0MiwgMjE5LCAKKyAgICAyMCwgMjQ0LCAxNywgMjE5LCAyMCwgMjE5LCAxMjUsIDIxOSwgMjAsIDI0NCwgMTIwLCAyMTksIDIwLCAyMjQsIDE0NCwgCisgICAgMjE5LCAyMCwgMjE2LCAxNzEsIDIxOSwgMjAsIDI0MiwgNDIsIDIxOSwgMjAsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMTksIDIwLCAKKyAgICAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA3MiwgMjEwLCA4NywgMjExLCAyNDUsIDIzNSwgNjksIDIzMywgNDQsIDc5LCAyMjIsIAorICAgIDI0NiwgNzksIDI0MCwgMTc1LCAyMjgsIDczLCAyNDAsIDE3NSwgMjQ0LCAxMjAsIDI0OCwgMTY0LCAyNDUsIDE1OSwgMjQ4LCAKKyAgICAxNjQsIDI0NSwgMTY4LCAyNDgsIDE2NCwgMjAzLCAxMzAsIDUyLCA2NywgMjMyLCAyMTksIDUyLCAxMjEsIDIzMiwgMjE5LCAKKyAgICA0MywgMjE5LCAxNTcsIDIyNCwgMSwgNzksIDQ0LCAyMTksIDE1NywgMjI0LCAxLCA3OSwgMjE5LCAxNTcsIDIzMiwgMTE1LCAKKyAgICAyMjQsIDEsIDc5LCAyMTksIDE1NywgMjQxLCAxNzAsIDIyNCwgMSwgNzksIDQzLCA1MiwgMjI0LCAxLCA3OSwgNDQsIDUyLCAKKyAgICAyMjQsIDEsIDc5LCA1MiwgMjMyLCAxMTUsIDIyNCwgMSwgNzksIDUyLCAyNDEsIDE3MCwgMjI0LCAxLCA3OSwgMjQ4LCAyMTMsIAorICAgIDUyLCAyNDgsIDIxMywgMjUxLCAxMjEsIDIxNSwgMjIzLCAyNTEsIDEyMSwgMTIzLCA1OSwgMjMzLCA2MiwgMTEzLCA1OSwgCisgICAgMjMzLCA2MiwgMjAzLCAyNDUsIDE3MSwgMjQwLCAxNzMsIDIyNSwgMTMsIDIzMiwgMjIwLCAyMjAsIDEzOSwgMjI2LCAxOSwgCisgICAgMjIwLCAxMzksIDIzMywgNDQsIDI0NSwgMTY2LCAyMjIsIDI0NiwgMjQ1LCAxNjYsIDIyNCwgMjQ5LCAyNDcsIDIwNCwgMjQ0LCAKKyAgICAyNywgMjMzLCA0NCwgMjI2LCAxMjEsIDIyMiwgMjQ2LCAyMjYsIDEyMSwgMjI5LCAxOTksIDIyOCwgNzgsIDIxOSwgMjAsIAorICAgIDIyNSwgMTg2LCAyMzAsIDE5OCwgNTAsIDIyNSwgMTg2LCAyMTYsIDI0OSwgMjE2LCAxNDksIDUwLCAyMjQsIDE5MywgNTIsIAorICAgIDIyNCwgMTkzLCAyMTUsIDIxMiwgMjI0LCAxOTMsIDIyMywgNTIsIDIyNCwgMTkzLCAyMjMsIDUyLCA1MiwgMjI0LCAxOTMsIAorICAgIDIyMywgNTIsIDIxNSwgMjEyLCAyMjQsIDE5MywgMjUwLCAyNDYsIDIxOSwgMTU3LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjI0LCAKKyAgICAxLCA3OSwgMjE5LCAxNTcsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgMjIzLCAxMTAsIDc5LCA1MiwgMjQ1LCAKKyAgICAzOSwgNzksIDIzNSwgMjA4LCAyMjYsIDEyMywgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTIsIDI1MCwgMjQ3LCAyMzUsIDIyMywgCisgICAgMjI1LCAxMywgMjUzLCAyMjIsIDI0MCwgMTc2LCAyNTEsIDEyMSwgMjQ0LCAxMCwgMjE5LCA5NywgNDMsIDQyLCAyNTEsIAorICAgIDE2NiwgMiwgMjI0LCAxMCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjI0LCAxMCwgNTIsIDIyNCwgMTYsIDc5LCAyMjQsIDE2LCAKKyAgICAyNDUsIDM5LCA3OSwgMjQ1LCAzOSwgMjI0LCAxNiwgNzksIDIxNiwgNzEsIDUsIDI0NSwgNzMsIDIyMywgNTIsIDIyNSwgNzEsIAorICAgIDUwLCA4NSwgMTQwLCAyNTEsIDEyMSwgODUsIDk3LCAyNTEsIDEyMSwgMTIxLCAyNTMsIDIyNCwgMjIzLCA1MiwgMjIwLCAKKyAgICAxNTIsIDI1MCwgOSwgMjE0LCAxNjMsIDExMywgMjUzLCAyMjMsIDI1NCwgMTY3LCAyMTMsIDE4OCwgMjQ5LCAyMjUsIDIzMCwgCisgICAgMTg3LCA1MCwgMjE3LCAyMzUsIDI0OCwgMTY0LCAyMzUsIDIwMCwgMjE0LCAxODAsIDI0NCwgNjAsIDIyNCwgMTQ0LCA3OSwgCisgICAgMTM0LCA1OSwgMjI0LCAxNDMsIDIyNCwgMjcsIDIyNCwgMTkzLCAyNDQsIDE5LCA1OSwgMjI0LCAxNDMsIDI0NCwgODksIDU5LCAKKyAgICAyMjQsIDE0MywgMTEzLCA1OSwgMjI0LCAxNDMsIDI0NCwgMTksIDU5LCA3OSwgMjQ2LCAxMjYsIDI0OSwgMTM4LCAyMTUsIAorICAgIDIyMiwgNjcsIDI0NCwgMTksIDI0NywgMTI2LCAyMzEsIDg3LCAxMSwgMjE5LCAyMCwgMjExLCAyMDksIDIzNSwgNjksIDI0MywgCisgICAgMjM0LCAyNTQsIDYwLCAyMzUsIDE5OCwgMjE2LCA4NiwgMjM1LCAxOTgsIDIyMCwgMTM5LCAyMzUsIDE5OCwgMjI1LCAyNSwgCisgICAgMjMzLCA0NCwgMjM1LCAxNzEsIDIyMiwgMjQ2LCAyMzUsIDE3MSwgMjQ0LCAxMDAsIDIxOCwgOTEsIDIzNSwgMTcxLCAyMjQsIAorICAgIDI0OSwgMjQ3LCAyMDQsIDIzNSwgMTcxLCAyMzUsIDIzNSwgMjE3LCAxODMsIDIxNywgMjUyLCAyNTUsIDE0LCAyMTcsIDE4MywgCisgICAgMjE3LCAyNTIsIDIzNSwgMjM1LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAyNTUsIDE0LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAKKyAgICAyMjksIDE5NCwgMjEsIDIyMCwgODMsIDIyOCwgNzQsIDIxLCAyMjAsIDgzLCAyMTgsIDI0LCAyMTAsIDg2LCAyMTgsIDI0LCAKKyAgICA3LCA0LCAxLCA3NCwgMjE4LCAyNCwgMTYxLCAyMTgsIDI0LCAxOTAsIDIxOCwgMjQsIDE5NSwgMjE4LCAyNCwgMTk5LCAyMTgsIAorICAgIDI0LCAxOTYsIDIxOCwgMjQsIDIwMSwgMjE4LCAyNCwgOTYsIDUwLCAyMTgsIDI0LCAyMzAsIDE4NiwgMjE4LCAyNCwgMjQ1LCAKKyAgICAxMDYsIDUwLCAyMTgsIDI0LCA0MywgMjI2LCA3LCAyMTgsIDI0LCA0NCwgMjI2LCA3LCAyMTgsIDI0LCA3LCA0LCAxLCAyMzAsIAorICAgIDMwLCAyMTgsIDY2LCAyMTAsIDg2LCAyMTgsIDY2LCAxMTEsIDIxOCwgNjYsIDEwNSwgMjE4LCA2NiwgMTU4LCAyMTgsIDY2LCAKKyAgICAxNjEsIDIxOCwgNjYsIDE5MCwgMjE4LCA2NiwgMTk1LCAyMTgsIDY2LCAxOTksIDIxOCwgNjYsIDE5NiwgMjE4LCA2NiwgCisgICAgMjAxLCAyMTgsIDY2LCA5NiwgNTAsIDIxOCwgNjYsIDIzMCwgMTg2LCAyMTgsIDY2LCAyNDUsIDEwNiwgNTAsIDIxOCwgNjYsIAorICAgIDQzLCAyMjYsIDcsIDIxOCwgNjYsIDQ0LCAyMjYsIDcsIDcsIDIxOCwgNjYsIDQsIDEsIDYxLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA3NiwgNywgMjE4LCA2NiwgNCwgMSwgNzgsIDcsIDIxOCwgNjYsIDQsIDEsIDIxMSwgMTc4LCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICAyMjEsIDE5NywgNywgMjE4LCA2NiwgNCwgMSwgMjQyLCA2NywgNywgMjE4LCA2NiwgNCwgMSwgMjM1LCAyOSwgNywgMjE4LCAKKyAgICA2NiwgNCwgMSwgMTU2LCA3LCAyMTgsIDY2LCA0LCAxLCAxOTQsIDcsIDIxOCwgNjYsIDQsIDEsIDIzMCwgMzAsIDcsIDIxOCwgCisgICAgNjYsIDQsIDEsIDIyNiwgMTA5LCA3LCAyMTgsIDY2LCA0LCAxLCAyMjIsIDkzLCA3LCAyMTgsIDY2LCA0LCAxLCAyMTcsIAorICAgIDE1MywgMjQ1LCA1NCwgNTAsIDI0OSwgMjM1LCA1MCwgMjQ5LCAxMjUsIDUwLCAyNDQsIDMsIDI0NCwgNiwgNTAsIDIzMiwgCisgICAgMjA0LCA1MCwgMjMwLCAxOTksIDUwLCAyMjksIDIxNSwgNTAsIDIyNSwgMTY1LCA1MCwgMjIyLCAxMjAsIDUwLCAyMTEsIAorICAgIDIxNywgNTAsIDE2NiwgMjIwLCA1MSwgNTAsIDI0NywgMTM1LCA1MCwgMjQ1LCA1NSwgNTAsIDIzNCwgODIsIDUwLCAyMTUsIAorICAgIDExMywgNTAsIDI0NiwgMTA5LCA1MCwgMjQzLCA0NywgMjI1LCAxOTYsIDUwLCAyMjUsIDE2MywgNTAsIDI0MiwgMTE2LCA1MCwgCisgICAgMjUzLCAxOTAsIDUwLCAyNDAsIDIzNSwgNTAsIDI1MCwgMTkzLCA1MCwgMjMyLCAxOTcsIDIxNiwgNCwgNTAsIDIxOSwgMiwgCisgICAgNTAsIDIxNiwgMjQ2LCA1MCwgMjM1LCAyNDgsIDIyMiwgMTIwLCA1MCwgMjE1LCA5NywgMjMyLCAyMDQsIDUwLCAzOCwgNDMsIAorICAgIDI0MiwgNiwgNDgsIDM4LCA0NCwgMjQyLCA2LCA0OCwgMzgsIDIwMCwgNjcsIDIzMiwgMjIwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCA2NywgMjMyLCAyMjAsIDIyNiwgMTI0LCAzOCwgMjU0LCA5NiwgODAsIDQ4LCAzOCwgMjUwLCAxMCwgODAsIDQ4LCAKKyAgICAzOCwgNDMsIDgwLCA0OCwgMzgsIDQ0LCA4MCwgNDgsIDM4LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAyNTAsIDEwLCAyMjIsIAorICAgIDIzNywgMjI2LCAxMjQsIDM4LCAyNTQsIDk2LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAxMzQsIDE3MCwgNDgsIDM4LCAKKyAgICAyNDQsIDE5LCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDMsIDM4LCAyNDUsIDE1NCwgMjE4LCAyMzYsIDM4LCAyNDUsIAorICAgIDE1NCwgMjQ4LCAwLCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDQsIDI1MiwgMTg4LCAzOCwgNDMsIDQ0LCA4MCwgNDgsIDM4LCAKKyAgICAyNDUsIDE1NCwgMjIxLCAxOTAsIDM4LCAyNDUsIDE1NCwgMjM0LCAxNDEsIDM4LCAyNDUsIDE1NCwgMjE0LCAxNTUsIDIyNSwgCisgICAgMTAsIDIxNSwgMjI2LCAzOCwgMjIzLCA1MywgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA1MiwgNjcsIDIxOCwgMTA1LCAyMjYsIAorICAgIDEyNCwgMzgsIDI1NCwgMTA2LCA4NywgMzgsIDIxNSwgMjEyLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIDE0OCwgCisgICAgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyNCwgMzgsIDIwMCwgNTIsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAzOCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMzgsIDQzLCAKKyAgICA4MCwgNTEsIDM4LCA0NCwgODAsIDUxLCAzOCwgMjUzLCAyMjUsIDQ4LCAyNTUsIDIwLCAyMjYsIDIzNSwgMjU1LCA0LCAyMTYsIAorICAgIDQzLCAyMTYsIDE5NywgMjE4LCA3NSwgMTM5LCA2LCAyNTEsIDc0LCAyNDgsIDc5LCAyNTAsIDE4NiwgMjUwLCAxODMsIDIzMiwgCisgICAgMjIwLCA4NywgMjUwLCAyNDgsIDIyNiwgMjM1LCAyNTEsIDM0LCAyMTQsIDE4OSwgMjQ1LCA1NiwgMjQ5LCAxOTksIDIyMSwgCisgICAgMTg3LCAyNDgsIDc5LCAyNDQsIDE4NywgMTE5LCA0LCAyNDMsIDIwOSwgMTE5LCA2LCAyNDIsIDY3LCAyNTEsIDIyNywgNiwgCisgICAgMjQyLCA2NywgMTM5LCA2LCAyNDIsIDY3LCAyMjUsIDQwLCAyNDksIDE5OSwgMjI1LCA0MCwgMjQ5LCAyMDAsIDExNSwgMTEzLCAKKyAgICAyMjUsIDExMSwgMTE5LCA2LCA3NCwgMjUxLCAyMjcsIDYsIDc0LCAxMTksIDYsIDE1NiwgMTE5LCA0LCAxNTYsIDIzMywgCisgICAgMTU1LCA1NywgMjUyLCAxNDksIDg3LCAxMzksIDYsIDIzMCwgMzAsIDIyNywgMjAwLCA1MCwgMjE5LCAzMywgMjIzLCAxMjIsIAorICAgIDI0OSwgMTcwLCAxMTksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNCwgOTksIDExOSwgNiwgCisgICAgMTUzLCAyNTEsIDIyNywgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTksIDIxNywgNzIsIDIyMywgNjUsIDIyMCwgMTM0LCAKKyAgICA3OSwgMjE3LCAyLCA1MCwgMjE1LCAyNTQsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgMTU5LCAyMjYsIDEzNywgCisgICAgNTAsIDIyNiwgMjI1LCA1MCwgMjM1LCAyMDAsIDIyNiwgMjI1LCA1MCwgMjUxLCAyMjcsIDYsIDIxMCwgMTU5LCAyMTUsIDk0LCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTIsIDIzNCwgMTc5LCA1MCwgMjU0LCAxMTUsIDUwLCAxMTksIDYsIDI1MywgMTY2LCAyNTEsIAorICAgIDIyNywgNiwgMjUxLCA3NCwgMjQ1LCA3NiwgODcsIDExOSwgNCwgNzYsIDExOSwgNiwgNzYsIDExOSwgNiwgMjQ1LCAxNCwgCisgICAgMjE1LCA5NCwgNiwgMjQ1LCAxNCwgMTE5LCA2LCAxOTQsIDExOSwgNCwgNzgsIDEwOSwgODcsIDI1MiwgMzcsIDg3LCAyNDIsIAorICAgIDIwOSwgODcsIDI0OCwgMTk4LCA4NywgMjM1LCAyMzksIDIxOSwgMzEsIDIyMiwgMTg5LCA2LCAyMjQsIDk5LCAyNDQsIDE5MCwgCisgICAgNTAsIDEzOSwgNCwgMjI1LCAxMTEsIDEzOSwgNCwgMjQzLCAxMTQsIDEzOSwgNiwgMjQzLCAxMTQsIDEzOSwgNiwgMjI1LCAKKyAgICAxMTEsIDEzOSwgMjMwLCAyOSwgMjE4LCA0MSwgMjE1LCA5NCwgMzUsIDYsIDI0MywgMjA5LCAyMTUsIDk0LCAzNSwgNiwgCisgICAgMTU2LCAyMjMsIDUyLCAzNSwgNiwgMTU2LCAyMTUsIDk0LCAzNSwgNiwgMjExLCAxMTcsIDEzOSwgMzIsIDYsIDI0OSwgNjgsIAorICAgIDEzOSwgMzIsIDQsIDI0OSwgNjgsIDEzOSwgMzIsIDQsIDc2LCAxMzksIDMyLCA0LCA3NCwgMTM5LCAzMiwgNCwgMjM1LCAKKyAgICAxNTAsIDIyNCwgMTczLCAyMzIsIDIxOSwgMjE1LCA5NCwgMjU0LCAxMzQsIDIyNSwgMTg2LCA1MCwgMjU0LCAxODksIDIxNSwgCisgICAgOTQsIDQsIDI0NSwgMTQsIDE2LCAzMSwgMjIxLCAyNTQsIDIxOSwgMzEsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyMCwgCisgICAgMTIwLCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjgsIDE5OSwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjE2LCAyNDIsIAorICAgIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIxNiwgMTY5LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTEzLCAyMTYsIDE2NywgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEyMywgMjQ0LCAxMjUsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMTMsIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTM0LCAyNDQsIDEyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgMTksIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyMTksIDExNywgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgODksIDIxOSwgMTE1LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyNDUsIDE5NiwgMjEyLCAxMTQsIDI0NCwgMTAsIDEzNCwgMjQ1LCAxOTQsIDIxMiwgMTE0LCAyNDQsIAorICAgIDEwLCAyNDQsIDg5LCAyNDUsIDE5NCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIyMCwgMTI0LCAyNDUsIDE5NCwgMjQ0LCAxMCwgCisgICAgMjI3LCAyMDEsIDExMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDE1OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxNjEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTksIDIyMiwgMjAwLCAyMjcsIDIwMiwgCisgICAgMTk2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIwMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgMjIyLCAyMDAsIAorICAgIDIyNywgMjAyLCAyNDUsIDE3NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgCisgICAgMTIyLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAKKyAgICAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDQsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE1OCwgNCwgMjIyLCAyMDAsIDIyNywgCisgICAgMjAyLCAxNjEsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgNCwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxOTksIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIAorICAgIDIwMSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDUsIDE3NSwgNCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIyLCA0LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIAorICAgIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAKKyAgICAyNTEsIDc1LCAyNDksIDY4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAKKyAgICAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMjMsIDUyLCAxMjMsIDI0MCwgMjE3LCA3LCAKKyAgICA0LCAxLCAyMjMsIDUyLCAyNTEsIDc0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxOSwgMTI3LCAyMzMsIDg0LCAxNywgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMywgMjQ1LCAyMzQsIDE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIzLCAyMTYsIAorICAgIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTYsIDE0OCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIxMCwgCisgICAgODcsIDIxNiwgMTY3LCAxNDAsIDc1LCAyMTQsIDE1MywgNzUsIDk3LCA3NSwgMjQ2LCAxMTIsIDc1LCA0MywgNDQsIDc1LCAKKyAgICAxMjAsIDEyNCwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAyMTksIDMwLCAyMTIsIDksIDc1LCAxNDAsIDgwLCAyLCA5MSwgOTcsIDgwLCAyLCA5MSwgMTQwLCAyMTIsIAorICAgIDM2LCA3NSwgOTcsIDIxMiwgMzYsIDc1LCAxNDAsIDExMywgMjQxLCAyNDEsIDc1LCAyMTQsIDE1MywgMTEzLCAyNDEsIDI0MSwgCisgICAgNzUsIDk3LCAxMTMsIDI0MSwgMjQxLCA3NSwgMjQ2LCAxMTIsIDExMywgMjQxLCAyNDEsIDc1LCAxNDAsIDgwLCAyLCAyMTcsIAorICAgIDc4LCA5NywgODAsIDIsIDIxNywgNzgsIDE0MCwgODAsIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCA4MCwgMjQzLCAyNTEsIAorICAgIDEzMCwgOTcsIDgwLCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgODAsIDI0MywgMjUxLCAxMzAsIDEyMCwgMTI0LCA4MCwgMiwgCisgICAgMjUyLCAxMzUsIDE0MCwgODAsIDIsIDEwMywgOTcsIDgwLCAyLCAxMDMsIDE0MCwgODAsIDIsIDIzMiwgMTI5LCA5NywgODAsIAorICAgIDIsIDIzMiwgMTI5LCA0MywgNDQsIDIxMiwgMzYsIDc1LCA0MywgNDQsIDgwLCAyLCA5MSwgMjQ2LCAxMTIsIDIxMCwgMzUsIAorICAgIDc1LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzgsIDIzMywgNDMsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3OCwgMjIyLCAKKyAgICAyNDQsIDI0NiwgMTEyLCA4MCwgMiwgMjE2LCA3OCwgMjMzLCA0MywgMjQ2LCAxMTIsIDgwLCAyLCAyMTYsIDc4LCAyMjIsIAorICAgIDI0NCwgOTcsIDgwLCAyLCAyNDksIDE2OSwgMjQ2LCAxMTEsIDI0NiwgMTEyLCA4MCwgMiwgMjQ5LCAxNjksIDIzMywgNDMsIAorICAgIDI1NCwgOTYsIDIxNiwgMTUsIDIyMCwgMTU1LCA3NSwgMjUwLCAxMCwgMjE2LCAxNSwgMjIwLCAxNTUsIDc1LCAyMjgsIDYxLCAKKyAgICAyMTIsIDksIDgwLCAyMTYsIDQzLCAyMDAsIDEzMCwgMTQwLCA4MCwgMjE2LCA0MywgMjUyLCAxNDksIDExNSwgOTcsIDgwLCAKKyAgICAyMTYsIDQzLCAxMzAsIDI1NCwgOTYsIDIwNCwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDIwNCwgMjUwLCA0NCwgNzUsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNTIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDIxNCwgCisgICAgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI0NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIzMywgCisgICAgNDMsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE1MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAKKyAgICAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNDQsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAyMzMsIDQzLCA5NywgODAsIDExNSwgMTQwLCA3NSwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAyNDYsIDExMiwgNzUsIDE0MCwgCisgICAgODAsIDExNSwgOTcsIDc1LCAxNDAsIDIyNiwgNzQsIDI1MywgMjU1LCAyMTQsIDE1MywgMjI2LCA3NCwgMjUzLCAyNTUsIDk3LCAKKyAgICAyMjYsIDc0LCAyNTMsIDI1NSwgMjQ2LCAxMTIsIDIyNiwgNzQsIDI1MywgMjU1LCAxNDAsIDI0MiwgNiwgMTE1LCA5NywgCisgICAgMjQyLCA1LCA5NywgMjQyLCA2LCAxMTUsIDE0MCwgMjQyLCA1LCAxNDAsIDUyLCA4MCwgMiwgOTEsIDQzLCA0NCwgNTIsIDgwLCAKKyAgICAyLCA5MSwgOTcsIDUyLCA4MCwgMiwgOTEsIDE0MCwgNTIsIDc1LCAyMTQsIDE1MywgNTIsIDc1LCA5NywgNTIsIDc1LCAyNDYsIAorICAgIDExMiwgNTIsIDc1LCA0MywgNDQsIDUyLCA3NSwgMTIwLCAxMjQsIDUyLCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA1MiwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgCisgICAgNTIsIDc1LCAxNDAsIDIxNSwgMjEyLCA3NSwgOTcsIDIxNSwgMjEyLCA3NSwgMTQwLCAyMTgsIDIzMiwgNzUsIDk3LCAyMTgsIAorICAgIDIzMiwgNzUsIDIxNCwgMTUzLCA4MCwgMiwgNTIsIDkxLCAyNDYsIDExMiwgODAsIDIsIDUyLCA5MSwgMTQwLCAyNDgsIDE2MywgCisgICAgNzUsIDIxNCwgMTUzLCAyNDgsIDE2MywgNzUsIDk3LCAyNDgsIDE2MywgNzUsIDI0NiwgMTEyLCAyNDgsIDE2MywgNzUsIAorICAgIDE0MCwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAyMTYsIDQzLCAxMzAsIDE0MCwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIAorICAgIDc1LCA5NywgNzEsIDc1LCAyNDYsIDExMiwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIAorICAgIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgCisgICAgMjAzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgNjcsIDEzMCwgMjE0LCAxNTMsIDcxLCAKKyAgICA1MiwgNzUsIDIxNCwgMTUzLCA3MSwgNTIsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDk3LCA3MSwgODAsIDI0MywgMjUxLCAKKyAgICAyMTIsIDU2LCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyMTYsIDQzLCAyNDksIDE2OCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAKKyAgICAyMTYsIDQzLCAyNDksIDE2OCwgMTIwLCAxMjQsIDcxLCA3NSwgNDQsIDgwLCAyLCA0LCAyNTAsIDQzLCAyNDYsIDExMiwgODAsIAorICAgIDE0MCwgNjQsIDIxNCwgMTUzLCA3NSwgMTM0LCA5NywgMjUzLCAyNTUsIDE0MCwgODAsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAKKyAgICA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgNTIsIDY3LCA5MSwgOTcsIDgwLCAyLCA1MiwgNjcsIAorICAgIDkxLCA0MywgNDQsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIyNiwgMTc3LCA3NSwgOTcsIDIyNiwgMTc3LCA3NSwgNDMsIAorICAgIDQ0LCAyMjYsIDE3NywgNzUsIDMxLCAyNTQsIDE2MywgMjQ5LCAyMjIsIDIyNiwgMSwgMjQ3LCAyNDEsIDIxNiwgMTg4LCAKKyAgICAyNDUsIDM1LCAyMTYsIDE4OCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NSwgMzYsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjM1LCAKKyAgICAyNTIsIDIyOSwgMjI2LCAyNDUsIDE3OCwgMjI2LCAyMzUsIDIyOCwgNTcsIDI1NCwgMTMyLCAyNDUsIDE3OCwgMjI2LCAyMzUsIAorICAgIDQsIDI0NSwgMTc4LCAyMjYsIDIzNSwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMzEsIDY3LCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMzEsIDY3LCA0LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIzMSwgNjcsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjI0LCAxNzUsIDIzMCwgMjksIDIyNCwgMTgzLCAyMzAsIDI5LCAyNDksIDE3MywgMjMwLCAyOSwgMjE4LCA0MSwgCisgICAgMjMwLCAxODcsIDUwLCAyMzAsIDE4NSwgNTAsIDU5LCAyMjUsIDI1LCAyNDcsIDE3NywgMjE5LCA5NywgMjIwLCAxMzAsIAorICAgIDIzMCwgMTg2LCAyNTMsIDIyNSwgMjI2LCAxNzEsIDIyMiwgMjM3LCAyMjYsIDE3MSwgMjUxLCAxMjIsIDIyNiwgMTcxLCA0MiwgCisgICAgMjIyLCAxOTUsIDI0OSwgMTE3LCAyMjIsIDE5NSwgMjQ0LCAxMiwgMjIyLCAxOTUsIDIyNCwgMTcxLCAxMTIsIDIzNSwgMjQxLCAKKyAgICA0NCwgMjU0LCAxMTcsIDI1NCwgMTE3LCAyMzEsIDkzLCAyNTQsIDExNywgMjE5LCAxLCAyNTQsIDExNywgMjQ3LCAxNzksIAorICAgIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MiwgMjI2LCAxMiwgMTEyLCAyMjgsIDU3LCAyMjYsIDEyLCAxMTIsIDIzMiwgCisgICAgMTUyLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzUsIDIwNSwgMjE0LCAxNzUsIDIzNSwgMjE4LCA1MiwgMjM1LCAKKyAgICAyMTgsIDIxNSwgMjEyLCAyMzUsIDIxOCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyMTgsIDE0LCAyMzUsIDIxOCwgMjEzLCAxMjksIAorICAgIDIzNSwgMjE4LCAyNTAsIDEwLCAyMzUsIDIxOCwgMjUwLCAxMCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyNTQsIDk2LCAyNDksIAorICAgIDE5MCwgMjM1LCAyMTgsIDIxNiwgMTg3LCAyNTIsIDc1LCAyMjMsIDE0MCwgMjI0LCAxNzIsIDU5LCAyMzAsIDE4NiwgMjQ1LCAKKyAgICA0MSwgMjQzLCA1MywgMjI0LCAxNzIsIDI0MSwgNjQsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMjMsIDUyLCAxODQsIDIzNSwgCisgICAgMjAwLCAyMzMsIDcxLCAyMjIsIDkzLCAyMTksIDE1OSwgMjEyLCAzNSwgMjExLCAyMDAsIDIyNCwgMTgzLCAyMjgsIDU3LCAKKyAgICAxODQsIDIzMCwgMTg3LCAxODQsIDI1MywgMjE4LCAxMjgsIDExMiwgMjI4LCA1NywgMjUzLCAyMTgsIDEyOCwgMTEyLCAyNTQsIAorICAgIDU2LCAxMjgsIDExMiwgMjU0LCA1NiwgMjUxLCA5NiwgMjI4LCA1NywgMjU1LCAxMywgMTI4LCAxMTIsIDIyOSwgMTA1LCAKKyAgICAyNTQsIDU2LCAyMjgsIDY0LCAyNTUsIDEzLCAxMjgsIDExMiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMjgsIDU3LCAyNTQsIAorICAgIDE1NiwgMTI4LCAxMTIsIDI1NCwgMTU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIDIxNSwgMjEyLCAxODQsIDI1NCwgMTY0LCAKKyAgICAxMjgsIDExMiwgMjQ1LCAxMDIsIDExMiwgMjQzLCA1MiwgMjQ1LCAxMDIsIDExMiwgMjQ3LCAyNDIsIDI1MiwgMzEsIDI1NCwgCisgICAgNTgsIDIxNiwgMTk3LCAyMzIsIDIyNywgMjQzLCA1MiwgMTI4LCAxMTIsIDI1NCwgNTYsIDEyOCwgMjE2LCA0MywgMTc3LCAKKyAgICAyMTYsIDE5NywgMjM2LCAyMiwgMjI2LCAyMzUsIDIzNiwgMjIsIDY0LCAxNzcsIDI1NCwgNTYsIDEyOCwgMTEyLCAyNDksIAorICAgIDIzNSwgMjQ1LCAxMDUsIDI0NSwgMTA2LCAyNDksIDIzNCwgMjIyLCAyMzcsIDIzNiwgNywgMTI4LCAxMTIsIDIyMiwgMjM3LCAKKyAgICAxMjgsIDExMiwgMjQ5LCAxNjIsIDExMiwgMjQ1LCA3NSwgMjQ1LCAxMDQsIDExMiwgMjE4LCAxNTksIDI0NSwgMTA1LCAyNDgsIAorICAgIDYzLCAxMjgsIDExMiwgMTI4LCAyMTYsIDQzLCAyNTEsIDg2LCAyNDgsIDgwLCAyMzEsIDkzLCAyNTEsIDg1LCAyMjQsIDE0LCAKKyAgICAxMjgsIDExMiwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MCwgMTExLCAxMTIsIDIyOCwgNTcsIDI0MCwgMTExLCAxMTIsIDIxOCwgCisgICAgMTExLCAyNDUsIDEwMiwgMTEyLCAyMzMsIDIxLCAxNzcsIDEyOCwgMTEyLCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjMzLCAKKyAgICAyMSwgMTE1LCAxMjgsIDExMiwgMjQyLCAxMzcsIDExNSwgMTI4LCAxMTIsIDIzMywgMjEsIDI1MSwgOTYsIDIyOCwgNTcsIAorICAgIDEyOCwgMTEyLCAyNDIsIDEzNywgMjUxLCA5NiwgMjI4LCA1NywgMTI4LCAxMTIsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMzAsIAorICAgIDEwMiwgMjQyLCAxMzYsIDI1MiwgMzEsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDIyOCwgNTcsIDIzMywgMjAsIDIyOCwgCisgICAgNTcsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMTI4LCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgCisgICAgMjI4LCA2NCwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjQyLCAxMzcsIDE3NywgMjQ1LCAxMDIsIAorICAgIDExMiwgMjI5LCAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0NSwgMTAyLCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgMjI4LCAKKyAgICA2NCwgMjQ1LCAxMDIsIDExMiwgMjMzLCAyMSwgMTc3LCAyNDIsIDEzNiwgMjQyLCAxMzcsIDE3NywgMjMzLCAyMCwgMjI5LCAKKyAgICAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjQyLCAxMzcsIDIyOCwgNjQsIDIzMywgMjAsIAorICAgIDIyNCwgMjA1LCAyMTgsIDU2LCAyMjQsIDIwNiwgMTc3LCAxMjgsIDExMiwgMjE4LCA1NywgMTc3LCAxMjgsIDExMiwgMjI0LCAKKyAgICAyMDYsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMTc3LCAyNDUsIDEwMiwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjI0LCAyMDgsIDI0NywgMTQ2LCAyMjgsIDU3LCAyMTgsIDU4LCAyMTgsIDY1LCAyMjYsIDIzNSwgMjE4LCAyMywgMjI2LCAKKyAgICAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCA2NSwgMjI2LCAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCAyMywgMjI2LCAyMzUsIAorICAgIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMTEyLCAyMTgsIDIzLCA2NCwgMTc3LCAxMjgsIDExMiwgMjI5LCAxMDUsIDExNiwgCisgICAgMjE4LCA2NSwgNjQsIDIyOCwgNjQsIDEyOCwgMTEyLCAyMjksIDEwNSwgMTE2LCAyMTgsIDIzLCA2NCwgMjI4LCA2NCwgMTI4LCAKKyAgICAxMTIsIDIxOCwgNjUsIDY0LCAyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCAyMywgNjQsIDIsIDIyOCwgNTcsIDEyOCwgCisgICAgMTEyLCAyMzAsIDg2LCAyMzAsIDg3LCAyMzAsIDg4LCAyMzAsIDg3LCAyMTQsIDE3NSwgNDIsIDIzNiwgMjIsIDIyNiwgMjM1LCAKKyAgICA0MiwgMjI2LCAxNTQsIDIyNiwgMjM1LCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIAorICAgIDE3NywgMTI4LCAxMTIsIDQyLCAyNTEsIDMsIDQyLCAyNDksIDExMCwgMzcsIDIyNSwgMjUsIDM3LCAyMzAsIDE4NiwgMzcsIAorICAgIDIxNiwgODYsIDM3LCAyNDcsIDE3NywgMjE5LCA5NywgMzcsIDU5LCAyMjYsIDE3MSwgMzcsIDIyMiwgMjM3LCAyMjYsIDE3MSwgCisgICAgMzcsIDI1MywgMjI1LCAyMjYsIDE3MSwgMzcsIDI0NSwgMTA1LCAzNywgMjQ4LCAxNjQsIDkyLCAyMjUsIDI1LCA5MiwgMjMwLCAKKyAgICAxODYsIDkyLCAyMTYsIDg2LCA5MiwgNTksIDIyNiwgMTcxLCA0NCwgMjE3LCA4OCwgNDMsIDIxNywgODgsIDEyNCwgMjE3LCAKKyAgICA4OCwgMTIwLCAyMTcsIDg4LCAyNTMsIDIyOCwgMjMwLCAxNjEsIDIxNSwgMTkyLCAyNDQsIDMzLCAyMTUsIDIxMiwgNjcsIAorICAgIDI1MiwgMTQ5LCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQ0LCAyMTUsIDkzLCAyNDcsIDE0NiwgMjI4LCAKKyAgICA1NywgMjI0LCAxNjYsIDIyOCwgNTcsIDIxNSwgMTkyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ0LCAzNCwgMjI5LCAxMDcsIAorICAgIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0NCwgMjE1LCA5MywgMjI0LCAyMDYsIDIxNCwgMTg0LCAyMjMsIDk0LCAyMTgsIDU3LCAKKyAgICAyMTQsIDE4NCwgMjIzLCA5NCwgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjI4LCAKKyAgICA2MiwgMjE4LCA3NywgMjI4LCA2MiwgMjE4LCA3OCwgNjQsIDE3NywgMTI4LCAxMTIsIDI0OSwgMTk0LCAyNTMsIDI0NiwgCisgICAgMjI4LCA2MiwgMjE4LCA3OCwgMTc3LCAxMjgsIDExMiwgMjI2LCAxNTQsIDIyNiwgMjM1LCAyMzYsIDIyLCAyMjYsIDIzNSwgCisgICAgMjMwLCA5MiwgMjQxLCAyMDcsIDI0OSwgMjA0LCAyMzEsIDE0MiwgMjM1LCAyMTUsIDIxMSwgMTQ1LCAyMjksIDIwNywgMjI4LCAKKyAgICA2MywgNDQsIDI1NCwgMTE4LCAyLCAyNTQsIDMzLCA0NCwgMjE1LCAyMjYsIDIzMCwgMjksIDIzMiwgMTUyLCAyNTQsIDEyNiwgCisgICAgMjMwLCAyOSwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzAsIDI5LCAyMzUsIDIwNSwgMjMwLCAyOSwgMjE0LCAxNzUsIDI0OCwgCisgICAgMSwgMjI2LCAxNzEsIDU5LCAyMjYsIDE3MSwgMjE4LCAxNTksIDIyNiwgMTcxLCAyNDcsIDE3NywgMjE2LCA4NiwgMjUxLCAKKyAgICAxNzIsIDQzLCAyMjgsIDYyLCAyNDQsIDE4OSwgMjIwLCAxNTEsIDIyNCwgMTgzLCA0NCwgMjI4LCA2MiwgMjQ0LCAxODksIAorICAgIDIyMCwgMTUxLCAyMjQsIDE4MywgNDMsIDIyMCwgMTUxLCAyMjQsIDE4MywgNDQsIDIyMCwgMTUxLCAyMjQsIDE4MywgMjIzLCAKKyAgICA1MiwgMjE2LCA5MCwgMjQ1LCAxMDUsIDI0OSwgMTA3LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDI0OSwgMTA3LCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMTgsIDY0LCA1MiwgMjE4LCAyMiwgNTIsIDIzNSwgMjA1LCA1MiwgMjE0LCAxNzUsIDIyNSwgNTAsIAorICAgIDEyOCwgMjIsIDIyNiwgMTIsIDExMiwgMjMzLCAyMSwgMiwgMjQ3LCAxMjgsIDI0MiwgMTM3LCAyLCAyNDcsIDEyOCwgMjEzLCAKKyAgICAxODcsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMTMsIDE4NywgMjMwLCAxMDIsIDI0MiwgMTM2LCAyMzMsIDIxLCAxMjgsIDIxNiwgCisgICAgNDMsIDE3NywgMjQyLCAxMzYsIDI0MiwgMTM3LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjAsIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMTI4LCAyMTYsIDQzLCAxNzcsIDIyNCwgMjA1LCAKKyAgICAxMjgsIDIxNiwgNDMsIDE3NywgMjE4LCA1NiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDIyNCwgMjA5LCAxNzcsIDI0NSwgMTA3LCAKKyAgICAyNDcsIDE0NiwgMjI4LCA1NywgMjE4LCA1OSwgMTc3LCAyNDUsIDEwNywgMjI4LCA1NywgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIAorICAgIDEyOCwgMTEyLCAyMjgsIDU3LCA0MiwgMjI2LCAxNTQsIDY0LCAxNzcsIDEyOCwgMTEyLCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgCisgICAgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIDE3NywgMjI4LCA1NywgMTI4LCAxMTIsIDIzMywgMjEsIAorICAgIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDI0MiwgMTM3LCAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgCisgICAgMTEyLCAyMjQsIDIwNiwgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMjUxLCA5NiwgMjI4LCAKKyAgICA1NywgMjQ1LCAxMDIsIDExMiwgMjI4LCA1NywgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0NywgMTQ2LCAyMjgsIAorICAgIDU3LCAyNDksIDE5NiwgMjUzLCAyNDYsIDIyOCwgNjIsIDIxOCwgNzcsIDIyOCwgNTcsIDIyOCwgNjIsIDIxOCwgNzgsIDY0LCAKKyAgICAxNzcsIDEyOCwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMjgsIDYyLCAyMTgsIDc4LCAKKyAgICAxNzcsIDI0NSwgMTA3LCA2NywgMjQ1LCAxNzEsIDIzMCwgMjI3LCAyMDMsIDI0NSwgMTcxLCAxMjAsIDQ0LCAyNDgsIDcsIAorICAgIDI0NSwgMTcxLCAxMjQsIDQ0LCAyNDgsIDcsIDI0NSwgMTcxLCAyNDUsIDE3OCwgNjQsIDIsIDIwMCwgMjAzLCA5MSwgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDQsIDI0NSwgMTc4LCAKKyAgICA2NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAyNDUsIDE3OCwgNjQsIDIsIAorICAgIDU5LCA0OCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgNCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCAyMTQsIDE4MywgMjQ1LCAxNzgsIDY0LCAyLCAxMTMsIDIwMywgMjE4LCA5MiwgMjQ5LCAxOTQsIDIsIAorICAgIDIwMCwgMjAzLCA5MSwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgCisgICAgNCwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgMjQ5LCAxOTQsIAorICAgIDIsIDIyNiwgMTI3LCA0LCAyNDksIDE5NCwgMiwgMjI2LCAxMjcsIDIxMCwgMTYwLCAxODksIDI1MiwgMTgxLCAyMzEsIDY2LCAKKyAgICAyNDgsIDIsIDUwLCAyNDUsIDE4MCwgNzUsIDI0MCwgMjQxLCAxMjAsIDI1NCwgMSwgMTI0LCAyNTQsIDEsIDIyNCwgMTc4LCAKKyAgICAyMjUsIDE2OCwgMjEyLCAzMiwgMjMyLCAyMTksIDQzLCAyNTAsIDE4OSwgNDQsIDI1MCwgMTg5LCA0MywgMjQ0LCA2NSwgNDQsIAorICAgIDI0NCwgNjUsIDI1MSwgMTgzLCA0NCwgMjQ5LCAxNDAsIDI1MSwgMTgzLCA0MywgMjQ5LCAxNDAsIDIxNiwgMTUsIDQ0LCAKKyAgICAyNDksIDE0MCwgMjE2LCAxNSwgNDMsIDI0OSwgMTQwLCAyMjMsIDUyLCAyMjgsIDU3LCA1MCwgNDIsIDIzMiwgMTEwLCAyNTQsIAorICAgIDMzLCAyMjEsIDE2NiwgMjIxLCAxNzMsIDIxNywgMiwgMjIzLCAxMjMsIDIyNCwgMjQ0LCAyMzUsIDI0NSwgMjEzLCAxNjUsIAorICAgIDIxOCwgMjM2LCAyMjUsIDQ0LCA2NCwgMjM1LCAyMTQsIDUwLCAyMTUsIDk0LCAyMjgsIDU3LCA1MCwgMjEyLCA0MiwgMjQwLCAKKyAgICAyNDMsIDIxNiwgMTUsIDQzLCAyNDksIDE2OCwgMjE2LCAxNSwgNDQsIDI0OSwgMTY4LCAyNTEsIDE4MywgNDMsIDI0OSwgCisgICAgMTY4LCAyNTEsIDE4MywgNDQsIDI0OSwgMTY4LCAyMTYsIDE1LCAxNjMsIDIzNSwgMjE4LCAyNTEsIDE4MywgMTYzLCAyMzUsIAorICAgIDIxOCwgMjQzLCAyNDgsIDIxOSwgNzcsIDEyMCwgMjU0LCAyLCAyNTIsIDMyLCAxMTMsIDIwMywgMjUyLCAxMzcsIDIyNiwgCisgICAgMTY0LCAyMzQsIDE0NCwgMjQ1LCA5OCwgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCAyMTEsIDE3OSwgMjM2LCA3LCAKKyAgICAxMTYsIDIyMywgMTIwLCAyNTEsIDE3MSwgMjM0LCAxNDMsIDIzMywgNDgsIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNTQsIAorICAgIDExOCwgMTI3LCAyNDUsIDk4LCAyMTYsIDQzLCAyMTYsIDE5NywgMjMzLCA1MiwgMjUyLCA0MywgMjIyLCAyMzYsIDI0OSwgCisgICAgNzgsIDI1NCwgMTY0LCAyNTQsIDksIDIxNywgMTgyLCAyMTYsIDUsIDIyMiwgMTI1LCAyNDcsIDIyMywgMjI2LCAxNTUsIAorICAgIDI0OSwgMjA2LCAyMTcsIDUzLCAyMTksIDg4LCAyNDksIDE1OSwgMjQ5LCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQwLCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAyMzAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjI0LCAzMSwgMjQ1LCAxMDcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ3LCAxODIsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCAwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUwLCA0MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAKKyAgICAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIxOSwgOTgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTIsIDE4OSwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIyNCwgMzEsIDIxOSwgOTcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUyLCAxODgsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjMzLCAyMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDIsIDEzNiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxNDAsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgOTcsIDIxNCwgMTksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTQwLCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICA5NywgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjUyLCAxODgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMTI0LCAyMTcsIDg5LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDYzLCAyMTgsIDEzNywgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxMjQsIDI1MCwgMjQ2LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDI0OCwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyMTcsIDg5LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIxNCwgMTUzLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIxNCwgMTUzLCA3NSwgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIyNiwgMTI3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIAorICAgIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDEyMCwgMjUwLCAyNDYsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCA3MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ2LCAxMTIsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgMjQ2LCAxMTIsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMCwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjQ4LCA2MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCAxLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMzUsIDYzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMTQsIAorICAgIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIyMCwgNywgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMjQsIDAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjE4LCAxNTgsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ5LCAyMzQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyNDgsIDksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMTU5LCAKKyAgICAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjM1LCA2MywgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI1MCwgNDQsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgNDMsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE2LCA5MCwgMjQ4LCAKKyAgICA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0MiwgMTM3LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ5LCAKKyAgICAyMjgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjEwLCAzNCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDEzOCwgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIyMCwgMTUzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjgsIDU3LCAyNDUsIDEwNywgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjQsIDE1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjUwLCAKKyAgICAyNDcsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDI1MCwgMjQ3LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjM1LCAxOTIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjIzLCA0MCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjYsIAorICAgIDIwNSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTQsIDE1MiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQ1LCAxMDksIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIzNSwgMTkzLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjYsIDIwNiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjU0LCAxNTEsIDIyOCwgCisgICAgNTcsIDI1MCwgMTM4LCA3OSwgNDQsIDI1NCwgMTE4LCAyLCAyNDYsIDExMiwgMjEwLCAzNSwgNzUsIDIxOSwgMjM3LCAyMDQsIAorICAgIDI1MSwgMTcxLCAyNTIsIDUzLCA4NywgNjcsIDIzMiwgMjIwLCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIzNSwgMjIzLCA4NywgCisgICAgMjQ5LCAxOTEsIDIxNCwgMTgxLCA4NywgMjQ3LCAxOTcsIDIxNCwgMTgxLCA4NywgMjQ1LCAxNjIsIDg3LCAyNDksIDIxOCwgCisgICAgODcsIDcxLCA0MiwgMiwgMjUwLCAxODMsIDY3LCAyMzIsIDIxOSwgMjQ1LCAxMzgsIDg3LCAyNTQsIDE0NywgMjM0LCAxNDUsIAorICAgIDg3LCAyNDEsIDIyMCwgODcsIDM3LCAyMDMsIDI1MiwgMTQ5LCAyLCAyMjgsIDU1LCAzNywgMjE1LCAyMjcsIDI0NiwgMTE0LCAKKyAgICAyNTEsIDE0MywgMjUwLCA0NCwgMiwgMjI4LCA1OSwgNzUsIDIxNCwgMTc5LCA4NywgMjMwLCAxNDIsIDg3LCAyNDAsIDE3MSwgCisgICAgODcsIDIyNiwgMTc4LCAyNDIsIDY2LCA4NywgMjI2LCAxNzgsIDIzMywgMTUzLCA4NywgMjI1LCAyNDgsIDg3LCAyMjUsIAorICAgIDI0NywgODcsIDI0NywgMjA1LCAyNDksIDEwNSwgMTYsIDI0NCwgMjgsIDEwNSwgMjE5LCA1MiwgODcsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMCwgMjQ4LCA5MSwgMjIwLCAxNDAsIDIzNCwgMTQ1LCA4NywgMjI0LCAxOTUsIDIyNiwgNzksIAorICAgIDIyOSwgODcsIDIyNiwgNzksIDIyNCwgMTkxLCAyMjEsIDE5MSwgODcsIDI1MCwgMjUsIDIyMSwgMTkxLCA4NywgNDMsIDIyNiwgCisgICAgOCwgMjE0LCAxNjAsIDEwMywgNDMsIDIyNiwgOCwgMjQ1LCAyOSwgNDMsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgNDQsIAorICAgIDIyNiwgOCwgMjE0LCAxNjAsIDEwMywgNDQsIDIyNiwgOCwgMjQ1LCAyOSwgNDQsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgCisgICAgNDMsIDQyLCAyNTEsIDE2NiwgMjE0LCAxNjAsIDI0OSwgMTY4LCA0MywgNDIsIDI1MSwgMTY2LCAyNDUsIDI5LCA0MywgNDIsIAorICAgIDI1MSwgMTY2LCAyMzIsIDExNCwgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIxNCwgMTYwLCAyNDksIDE2OCwgNDQsIAorICAgIDQyLCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIDQyLCAyNTEsIDE2NiwgMjMyLCAxMTQsIDI0OSwgMTY4LCA0MywgMjQ5LCAKKyAgICAxMDcsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMTAzLCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzAsIDIyOSwgMjI1LCAxMDQsIAorICAgIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMiwgMTE0LCAxMDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIAorICAgIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMwLCAyMjksIDIyNSwgCisgICAgMTA0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzIsIDExNCwgMTAzLCAyMzUsIDIxOSwgMjQ1LCAyOSwgMjAzLCAyMzIsIAorICAgIDIyMCwgMjQ1LCAyOSwgMjE0LCAxNjAsIDQzLCAxNzcsIDIzMiwgMTE0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIAorICAgIDE3NCwgMjE0LCAxNjAsIDQ0LCAxNzcsIDIzMiwgMTE0LCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIDE3NCwgMjE4LCAKKyAgICA0MiwgMjE2LCAxNCwgMjE4LCA0MiwgMjUxLCAxODIsIDIxNiwgMTUsIDQyLCAxMjcsIDI1MSwgMTgzLCA0MiwgMTI3LCAyNTEsIAorICAgIDE4MywgNDIsIDI1MSwgMTY2LCAxMTUsIDIxNiwgMTUsIDQyLCAxMjcsIDM0LCAxNiwgMjUxLCAxODIsIDQzLCA2NywgOTMsIAorICAgIDIzMiwgMjE5LCA0NCwgNjcsIDkzLCAyMzIsIDIxOSwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTgsIDIwMywgMjIxLCAyMDcsIAorICAgIDIzMiwgMjE3LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxNiwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTUsIDI0OCwgNTQsIDE2LCAKKyAgICAxOTMsIDY3LCAyMiwgMjE2LCAxNSwgMjIyLCAyNTQsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjUxLCAxODMsIDIyMiwgCisgICAgMjU0LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMiwgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAKKyAgICAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAxMjAsIDIyLCAyMDMsIDIsIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIAorICAgIDY3LCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgCisgICAgMTYsIDE5MywgMTIwLCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTIsIDM1LCAKKyAgICAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNTQsIDE2LCAxOTMsIDEyMCwgMjIsIAorICAgIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgCisgICAgMTIwLCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTYsIDE1LCAyMzMsIDUyLCAyNDgsIDU0LCAKKyAgICAxNiwgMTkzLCA2NywgMjIsIDI1MSwgMTgzLCAyMzMsIDUyLCA0MiwgMjQ0LCA0MCwgMjIzLCA1NywgODcsIDI0NSwgMTkwLCAKKyAgICA4NywgNjcsIDIzMiwgMjIwLCAyNDUsIDI5LCAyMzEsIDM4LCAyNTEsIDE1NCwgMjMxLCAzOCwgMjAwLCAxMTUsIDIxOSwgCisgICAgMjUyLCAyMzEsIDM4LCAyMTksIDI1MywgMTE1LCAyMzIsIDE0MywgMjMxLCAzOCwgMjAwLCAxMTUsIDExMywgMjE5LCAyMzksIAorICAgIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDExNSwgMjMyLCAxNDMsIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDIzNSwgNzAsIAorICAgIDIzMSwgMzgsIDIxNSwgMjA5LCAyMzEsIDM4LCAyMTYsIDIyNCwgMjMxLCAzOCwgMjI1LCAxOTEsIDI0NSwgMjMyLCAyNDIsIAorICAgIDEyOSwgMjQzLCAyMjYsIDIxNiwgMTUsIDIyNiwgNywgMjUxLCAxODMsIDIyNiwgNywgMjE2LCAxNSwgMjQ5LCAxMDcsIDEyNywgCisgICAgMjUxLCAxODMsIDI0OSwgMTA3LCAxMjcsIDIxNiwgMTUsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyNTEsIDE4MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDcxLCAyMTUsIDI0MCwgMjUyLCA0MywgMjIyLCAyMzcsIDIsIDI1MCwgNDMsIDIxOCwgMTIyLCAyNDQsIAorICAgIDcyLCAyNTUsIDI2LCAyNDksIDEwNCwgMjQ1LCAxNzksIDIzNSwgMjA1LCAyNDgsIDkxLCAyNDUsIDMyLCA4NywgODUsIDIyMiwgCisgICAgMjUwLCA1MiwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCA1MiwgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MiwgNTIsIDIxNSwgMjI2LCAKKyAgICA4NSwgMjQ2LCAxMTMsIDUyLCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAKKyAgICAyMzMsIDQ4LCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAyMjIsIDI1MCwgMjE1LCAyMjcsIDIsIDUyLCA2NywgCisgICAgMTMwLCAyNTQsIDE4MiwgMjUwLCAxMSwgMjE4LCAxMjgsIDIxNiwgODcsIDI1MCwgMTEsIDI0MCwgMjQ0LCAyLCAyNDQsIDU4LCAKKyAgICAyMjEsIDI0MywgMTYsIDMxLCAyMjcsIDIwNiwgMTYsIDMxLCAyMTgsIDE1NCwgNjQsIDI0MSwgMjQwLCAxNiwgMzEsIDIxOCwgCisgICAgMTU0LCA2NCwgMjE2LCAyMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIAorICAgIDIxNSwgMjQ0LCAxNiwgMzEsIDI0NSwgMTQwLCAxNiwgMzEsIDI1NSwgMTYsIDE2LCAzMSwgMjUyLCA1MiwgMTYsIDMxLCAKKyAgICAyNTIsIDE4NywgMTYsIDMxLCAyMDMsIDIxNywgOTAsIDE2LCAzMSwgMjMyLCAyMjAsIDI0NCwgMTUzLCAxNiwgMzEsIDY3LCAKKyAgICAyMTcsIDkwLCAxNiwgMzEsIDI0NCwgMjgsIDI0NCwgMTUzLCAxNiwgMzEsIDI1MCwgMjM4LCAyMjMsIDU2LCAxNiwgMzEsIAorICAgIDIyMCwgMzAsIDIyNiwgMTM0LCAxNiwgMzEsIDIyMCwgMzAsIDIzNiwgNiwgMTYsIDMxLCAyNDgsIDE1OSwgMjMyLCAyMTAsIAorICAgIDI0NSwgODUsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDExMSwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTA1LCAKKyAgICAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE2MSwgMTYsIDMxLCAKKyAgICAxNTIsIDI1NSwgMTYsIDE2LCAzMSwgMjE3LCAxNzgsIDIzNiwgNjksIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTUsIDI0NSwgCisgICAgMjUxLCAyMjEsIDE2LCAzMSwgMjUxLCAxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIzMSwgODYsIDE2LCAzMSwgMjE4LCAKKyAgICA2MiwgMTYsIDMxLCAyNDUsIDg1LCAxNiwgMzEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMTYsIDMxLCAyNDIsIDEyOCwgMjIwLCAKKyAgICAxMzksIDE2LCAzMSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAxNiwgMzEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMTYsIDMxLCAyMTksIAorICAgIDIwLCAxNiwgMzEsIDI0OCwgNzEsIDI1MSwgMjI0LCA4NywgMjA0LCAyNTEsIDE3MSwgMTYsIDMxLCAyMjksIDkwLCAxNiwgCisgICAgMzEsIDI0OCwgNzIsIDI0NCwgMjgsIDEwNSwgMTYsIDMxLCAyMTgsIDYzLCAyNDQsIDI4LCAxMDUsIDIyNiwgMjQ1LCAxMDMsIAorICAgIDIyNiwgMjQ1LCAyNTAsIDE2MCwgMjI2LCAyNDUsIDI0NCwgMzEsIDIyNiwgMjQ1LCAyMzUsIDIwMCwgMjQ0LCAzMSwgMjI2LCAKKyAgICAyNDUsIDI1MiwgNTAsIDI1MSwgMTMyLCAyMjYsIDI0NSwgMjUxLCAxNzgsIDIxNiwgMTEyLCAyMjYsIDI0NSwgMjUxLCAxNjMsIAorICAgIDI1MiwgMTU0LCAyNDAsIDExMCwgMjI2LCAyNDUsIDI1NCwgMTM1LCA2NCwgMjUwLCAxMzcsIDIyNiwgMjQ1LCAyNDgsIDE2NCwgCisgICAgMjI2LCAyNDUsIDI0OSwgOTUsIDI1NSwgMjAsIDIyNywgMjA0LCAyMjYsIDI0NSwgNTIsIDI1MiwgMTg4LCAzNywgMjEsIAorICAgIDExMSwgMzcsIDIxLCAxMDUsIDM3LCAyMSwgMTU4LCAzNywgMjEsIDE2MSwgMzcsIDIxLCAxOTAsIDM3LCAyMSwgMTk1LCAzNywgCisgICAgMjEsIDE5OSwgMzcsIDIxLCAxOTYsIDM3LCAyMSwgMjAxLCAzNywgNTQsIDIxNiwgMjQ4LCAzNywgNTQsIDI0NSwgMTc1LCAKKyAgICAzNywgNTQsIDIxNSwgNzYsIDM3LCA1NCwgMjE2LCAxNjUsIDM3LCA1NCwgMjQ0LCAxMywgMzcsIDU0LCAyNDQsIDEyNiwgMzcsIAorICAgIDU0LCAyMTksIDEyMSwgMzcsIDU0LCAyMjAsIDEyMSwgMzcsIDU0LCAyNDUsIDE5OCwgMzcsIDU0LCAyMjgsIDIwMiwgMzcsIAorICAgIDU0LCAyMTUsIDczLCA4OCwgMjEsIDExMSwgODgsIDIxLCAxMDUsIDg4LCAyMSwgMTU4LCA4OCwgMjEsIDE2MSwgODgsIDIxLCAKKyAgICAxOTAsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDE5OSwgODgsIDIxLCAxOTYsIDg4LCAyMSwgMjAxLCA4OCwgNTQsIDIxNiwgCisgICAgMjQ4LCA4OCwgNTQsIDI0NSwgMTc1LCA4OCwgNTQsIDIxNSwgNzYsIDg4LCA1NCwgMjE2LCAxNjUsIDg4LCA1NCwgMjQ0LCAKKyAgICAxMywgODgsIDU0LCAyNDQsIDEyNiwgODgsIDU0LCAyMTksIDEyMSwgODgsIDU0LCAyMjAsIDEyMSwgODgsIDU0LCAyNDUsIAorICAgIDE5OCwgODgsIDU0LCAyMjgsIDIwMiwgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAKKyAgICAxMTMsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDEzNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCAxOSwgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCA4OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjE5LCAxMjcsIDI0MywgMjM2LCAKKyAgICAyMTgsIDEzMSwgMjEsIDIyMCwgMTI0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDUsIDIwMSwgMjQzLCAyMzYsIDIxOCwgCisgICAgMTMxLCAyMSwgMjI4LCAyMDUsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNiwgMjQ5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIAorICAgIDU0LCAyNDUsIDE3NiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NywgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgCisgICAgMjE2LCAxNjYsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgMTQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgCisgICAgMTI3LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTksIDEyMiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjIwLCAxMjIsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NSwgMTk5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMjgsIDIwMywgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4OCwgNywgNCwgMSwgNjEsIDg4LCA3LCAKKyAgICA0LCAxLCAyNTMsIDE2NiwgODgsIDcsIDQsIDEsIDI1MSwgNzQsIDg4LCA3LCA0LCAxLCAyNDksIDY4LCA4OCwgNywgNCwgMSwgCisgICAgNzYsIDg4LCA3LCA0LCAxLCAyNDUsIDE0LCA4OCwgNywgNCwgMSwgMjQzLCAyMDksIDg4LCA3LCA0LCAxLCAyNDIsIDY3LCAKKyAgICA4OCwgNywgNCwgMSwgNzQsIDg4LCA3LCA0LCAxLCAyMzUsIDE1MCwgODgsIDcsIDQsIDEsIDIzNSwgMjksIDg4LCA3LCA0LCAKKyAgICAxLCAxNTYsIDg4LCA3LCA0LCAxLCAxOTQsIDg4LCA3LCA0LCAxLCAyMzAsIDMwLCA4OCwgNywgNCwgMSwgNzgsIDg4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDEwOSwgODgsIDcsIDQsIDEsIDIyNCwgOTksIDg4LCA3LCA0LCAxLCAxNTMsIDg4LCA3LCA0LCAxLCAyMjIsIAorICAgIDkzLCA4OCwgNywgNCwgMSwgMjE3LCAxNTMsIDg4LCA3LCA0LCAxLCA2OSwgODgsIDcsIDQsIDEsIDIxNCwgMTA1LCA4OCwgNywgCisgICAgNCwgMSwgMjEyLCA5OCwgODgsIDcsIDQsIDEsIDIxMSwgMTc4LCA4OCwgNywgNCwgMSwgMjExLCAxMTcsIDg4LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMzcsIDcsIDYsIDEsIDYxLCAzNywgNywgNiwgMSwgMjUzLCAxNjYsIDM3LCA3LCA2LCAxLCAyNTEsIDc0LCAKKyAgICAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMzcsIDcsIDYsIDEsIDc2LCAzNywgNywgNiwgMSwgMjQ1LCAxNCwgMzcsIDcsIDYsIDEsIAorICAgIDI0MywgMjA5LCAzNywgNywgNiwgMSwgMjQyLCA2NywgMzcsIDcsIDYsIDEsIDc0LCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIAorICAgIDM3LCA3LCA2LCAxLCAyMzUsIDI5LCAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTk0LCAzNywgNywgNiwgMSwgCisgICAgMjMwLCAzMCwgMzcsIDcsIDYsIDEsIDc4LCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDM3LCA3LCA2LCAxLCAyMjQsIDk5LCAKKyAgICAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMzcsIDcsIDYsIDEsIDIxNywgMTUzLCAzNywgNywgNiwgCisgICAgMSwgNjksIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIAorICAgIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIAorICAgIDcsIDQsIDEsIDI1MywgMTY2LCAzNywgNywgNCwgMSwgMjUxLCA3NCwgMzcsIDcsIDQsIDEsIDI0OSwgNjgsIDM3LCA3LCA0LCAKKyAgICAxLCA3NiwgMzcsIDcsIDQsIDEsIDI0NSwgMTQsIDM3LCA3LCA0LCAxLCAyNDMsIDIwOSwgMzcsIDcsIDQsIDEsIDI0MiwgNjcsIAorICAgIDM3LCA3LCA0LCAxLCA3NCwgMzcsIDcsIDQsIDEsIDIzNSwgMTUwLCAzNywgNywgNCwgMSwgMjM1LCAyOSwgMzcsIDcsIDQsIAorICAgIDEsIDE1NiwgMzcsIDcsIDQsIDEsIDE5NCwgMzcsIDcsIDQsIDEsIDIzMCwgMzAsIDM3LCA3LCA0LCAxLCA3OCwgMzcsIDcsIAorICAgIDQsIDEsIDIyNiwgMTA5LCAzNywgNywgNCwgMSwgMjI0LCA5OSwgMzcsIDcsIDQsIDEsIDE1MywgMzcsIDcsIDQsIDEsIDIyMiwgCisgICAgOTMsIDM3LCA3LCA0LCAxLCAyMTcsIDE1MywgMzcsIDcsIDQsIDEsIDY5LCAzNywgNywgNCwgMSwgMjE0LCAxMDUsIDM3LCA3LCAKKyAgICA0LCAxLCAyMTIsIDk4LCAzNywgNywgNCwgMSwgMjExLCAxNzgsIDM3LCA3LCA0LCAxLCAyMTEsIDExNywgMzcsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAzNywgMjEsIDIxMCwgODYsIDE1MiwgMzcsIDU0LCAyNDUsIDE3NSwgMTUyLCAzNywgNTQsIDIxNSwgNzYsIAorICAgIDE1MiwgMzcsIDU0LCAyMTYsIDE2NSwgMTUyLCAzNywgNTQsIDI0NCwgMTMsIDE1MiwgMzcsIDU0LCAyNDQsIDEyNiwgMTUyLCAKKyAgICAzNywgNTQsIDIxOSwgMTIxLCAxNTIsIDM3LCA1NCwgMjIwLCAxMjEsIDE1MiwgMzcsIDU0LCAyNDUsIDE5OCwgMTUyLCAzNywgCisgICAgNTQsIDIyOCwgMjAyLCAxNTIsIDM3LCA1NCwgMjE1LCA3MywgNTIsIDM3LCAyMSwgMTExLCA1MiwgMzcsIDIxLCAxMDUsIDUyLCAKKyAgICAzNywgMjEsIDE1OCwgNTIsIDM3LCAyMSwgMTYxLCA1MiwgMzcsIDIxLCAxOTAsIDUyLCAzNywgMjEsIDE5NSwgNTIsIDM3LCAKKyAgICAyMSwgMTk5LCA1MiwgMzcsIDIxLCAxOTYsIDUyLCAzNywgMjEsIDIwMSwgNTIsIDM3LCA1NCwgMjE2LCAyNDgsIDE1MiwgMzcsIAorICAgIDIxLCAyMTAsIDg2LCA5MywgOTksIDE5MywgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAKKyAgICAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxMywgMjM5LCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIAorICAgIDUxLCA5MywgOTksIDExNCwgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgCisgICAgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAKKyAgICAyMjQsIDI3LCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDIyNCwgMjcsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgCisgICAgOTksIDE5MywgMjI0LCAyNywgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjI0LCAyNywgMjQ4LCAxNjUsIAorICAgIDIxMywgMjM5LCA5MywgOTksIDE5MywgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0NCwgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxOTMsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIAorICAgIDE5MywgMTIwLCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0NCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAKKyAgICA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgNjcsIDIyLCAyMjIsIAorICAgIDI1NCwgOTMsIDk5LCA2NywgMTkzLCAyMiwgNDQsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgCisgICAgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAyMiwgCisgICAgNDQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxOTMsIAorICAgIDIyLCA0NCwgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCA2NywgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAKKyAgICAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgCisgICAgMjIsIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQzLCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAKKyAgICAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgCisgICAgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIAorICAgIDEyNCwgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgNDMsIDE5MywgMjIsIDQ0LCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIAorICAgIDk5LCAxOTMsIDEyMCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQ0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDIwMywgMjQxLCAyMjgsIAorICAgIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgMTIwLCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCA0MywgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyNDEsIAorICAgIDUxLCA5MywgOTksIDE5MywgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgNjcsIDIzMiwgMjM2LCAKKyAgICA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgNjcsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxOTMsIDIyLCAyMDMsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgMTI0LCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMTIwLCAKKyAgICAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQzLCAxMjAsIDExNCwgCisgICAgMjIsIDQ0LCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQzLCAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjQsIDExNCwgMjIsIDQzLCAKKyAgICAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgMTIwLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgMTI0LCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgNjcsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDQzLCAxOTMsIDIyLCA0NCwgNjcsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgCisgICAgNTIsIDI0MSwgNTEsIDkzLCA5OSwgNTIsIDIxMywgMjM5LCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyMCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTIwLCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCA2NywgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCAKKyAgICA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDY3LCA1MiwgMjIsIDQzLCAyMTksIDE1NiwgOTMsIAorICAgIDk5LCA1MiwgNjcsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgCisgICAgOTksIDEyNCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDEyMCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgCisgICAgOTksIDUyLCAxMjAsIDIyLCAyNDEsIDUxLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCAKKyAgICA5OSwgNjcsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDE5MywgCisgICAgMjU0LCAzNCwgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAyNTQsIDM0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjU0LCAzNCwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDI1NCwgMzQsIDEyMCwgMjIsIDIyMiwgCisgICAgMjU0LCA5MywgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDMsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIAorICAgIDI0OCwgNywgMjQ5LCAxMzgsIDkzLCA5OSwgMTkzLCAyMzMsIDUyLCA5MywgOTksIDE5MywgMjE0LCAxNjMsIDkzLCA5OSwgCisgICAgMTkzLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDI0NiwgMTE0LCA5MywgOTksIDExNCwgMjMzLCA1MiwgOTMsIDk5LCAxMTQsIAorICAgIDIxNCwgMTYzLCA5MywgOTksIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAyNDYsIDExNCwgOTMsIDk5LCAxOTMsIDQzLCAKKyAgICAyMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgMjIsIDExNCwgMjQ2LCAxMTQsIDkzLCA5OSwgMTE0LCA0MywgCisgICAgMjIsIDE5MywgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAxOTMsIDI0NiwgMTE0LCAyMTQsIDE2MCwgMTYzLCAKKyAgICAyNTEsIDIyMSwgMjMyLCAxMTQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTIzLCAyMjQsIDI1LCAyNTEsIAorICAgIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTYzLCAyNTEsIDIyMSwgMjMyLCAKKyAgICAxMTQsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjI0LCAyMywgMjUxLCAyMjEsIDIzMiwgCisgICAgMTE0LCAyMjAsIDEyNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyNDMsIDIzNiwgMjUxLCAyMjEsIDQzLCAyMjAsIDEyNCwgMjQ1LCAKKyAgICAxOTUsIDI1MSwgMjIxLCA0MywgMTM0LCAyMjQsIDIzLCAyNTEsIDIyMSwgNDMsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIAorICAgIDIyMSwgNDMsIDE2MywgMjUxLCAyMjEsIDQzLCAxMzQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgNDMsIDEyMywgMjI0LCAyNSwgCisgICAgMjUxLCAyMjEsIDQzLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgNDQsIDE2MywgMjUxLCAyMjEsIDE5MywgMjIwLCA5NCwgCisgICAgMjMxLCA4NywgMjIwLCA5NCwgMjQ4LCAxNzAsIDIyMCwgOTQsIDIxNCwgMTYwLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgCisgICAgNDQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMjQsIDI5LCAyMzIsIDExNCwgMjMzLCA1MiwgMjI0LCAyOSwgMjMyLCAKKyAgICAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgMjMzLCA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgCisgICAgMjMyLCAxMTQsIDQzLCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIAorICAgIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAKKyAgICAyMzMsIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIAorICAgIDIyNCwgMjksIDIxNCwgMTYwLCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDIzMywgCisgICAgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCA0MywgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgODUsIAorICAgIDIxOCwgMjM2LCA3MSwgMjE4LCAyMzYsIDcxLCA0MiwgMiwgMjIyLCAxODUsIDI0OSwgMTY3LCA3MSwgNDIsIDI0OSwgMTk1LCAKKyAgICA4NSwgNCwgMjE4LCAyMzYsIDQyLCAyLCAyMDMsIDI0NCwgMTEzLCA0MiwgMiwgNjcsIDI0NCwgMTEzLCA0MiwgMiwgMjI2LCAKKyAgICAxNDgsIDI0OSwgMTM0LCAyNDQsIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjE2LCA0MywgMjMyLCAxMTQsIDQ0LCAyNDQsIAorICAgIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MywgMjMyLCAxMTQsIDQzLCAyNDQsIDExMywgNDIsIDIsIDI0OCwgNywgCisgICAgMjQ5LCAxMzQsIDI0NCwgMTEzLCA4NSwgNCwgMjE4LCAyMzYsIDcxLCA0LCAyMTgsIDIzNiwgODUsIDIyMywgMTE5LCA3MSwgCisgICAgMjIzLCAxMTksIDg1LCA2NywgMjIzLCAxMTksIDcxLCA2NywgMjIzLCAxMTksIDg1LCAyMjYsIDEwLCA3MSwgMjI2LCAxMCwgCisgICAgODUsIDIxNCwgMTYyLCAyMTUsIDIyNiwgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYyLCA0LCAyMTUsIAorICAgIDIyNiwgNzEsIDIxNCwgMTYyLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCAKKyAgICAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgCisgICAgMjUwLCAyMjUsIDExLCA3MSwgMjIyLCAyNTAsIDIyNSwgMTEsIDg1LCAyNDYsIDExMywgMjE1LCAyMjYsIDcxLCAyNDYsIAorICAgIDExMywgMjE1LCAyMjYsIDg1LCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDcxLCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDg1LCAKKyAgICAyMzMsIDQ4LCAyMTUsIDIyNiwgNzEsIDIzMywgNDgsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgNCwgMjE1LCAyMjYsIDcxLCAKKyAgICAyMzMsIDQ4LCA0LCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDIyNSwgMTEsIDcxLCAyMzMsIDQ4LCAyMjUsIDExLCA4NSwgCisgICAgMjQ4LCAwLCA3MSwgMjQ4LCAwLCA3MSwgMjQ4LCAxLCAyNDksIDE5NSwgODUsIDQsIDI0OCwgMCwgMjQ0LCA5NywgMjMyLCAKKyAgICAxMTAsIDcxLCAyNTAsIDQzLCAyNDYsIDEyNiwgMjUwLCA0MywgMjUwLCA0NCwgMiwgNjcsIDI0NCwgMTEzLCAyNTEsIDExOSwgCisgICAgODUsIDI1MCwgNDMsIDI1MCwgNDQsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCA0NCwgMTYzLCAyNTEsIAorICAgIDIyOSwgMjUwLCA0NCwgMiwgMjMyLCAxMTQsIDE2MywgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjksIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCAyNTQsIDE2NCwgCisgICAgMjUxLCA5NiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI5LCAyNTEsIDIyOSwgNDMsIDE2MywgODUsIDI1MCwgNDMsIDQ0LCAxNjMsIAorICAgIDg1LCAyNTAsIDQzLCAyMzUsIDIwMSwgMjUxLCAxMjEsIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjE0LCAxNjAsIDE2MywgCisgICAgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMzIsIDExNCwgMTYzLCAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIxNCwgMTYwLCAKKyAgICA0MywgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgMjE0LCAxNjAsIDQ0LCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAKKyAgICAyMzIsIDExNCwgNDQsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIDIzMiwgMTE0LCA0MywgMjI0LCAyOSwgMjUwLCA0MSwgCisgICAgMjU0LCAzMywgMjE0LCAxNjAsIDE2MywgMjUwLCA0MywgMjMyLCAxMTQsIDE2MywgMjUwLCA0MywgODUsIDIzMiwgMTE0LCAKKyAgICA0NCwgMjE1LCAyMjYsIDg1LCAyMzIsIDExNCwgNDMsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNiwgODUsIAorICAgIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjYsIDcxLCAyNTEsIDEyMSwgNDIsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCA3MSwgNDIsIDIsIDY3LCAyNTEsIDI0MCwgMjMyLCAyMTksIAorICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDI0NywgMTI4LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyMzMsIDkxLCAyNTAsIDQzLCA3MSwgNDIsIAorICAgIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDQyLCAyLCAyMzIsIDExNCwgNDMsIDIyNCwgMjgsIDcxLCA0MiwgMiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyMjQsIDI4LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIAorICAgIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIzMiwgMTE0LCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDIzMiwgMTE0LCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgMjE0LCAKKyAgICAxNjAsIDQzLCAyMTUsIDIyNiwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNiwgMjMyLCAxMTQsIDQzLCAyMTUsIDIyNiwgNzEsIAorICAgIDIzMSwgODcsIDIxOCwgMjM2LCA4NSwgMjMxLCA4NywgMjE4LCAyMzYsIDcxLCAyMzEsIDg3LCA0LCAyMTgsIDIzNiwgODUsIAorICAgIDIzMSwgODcsIDQsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIxNSwgMjI2LCA4NSwgMjE4LCAzOSwgMiwgMjIzLCAxMzUsIAorICAgIDI0OSwgMjU1LCAyMTQsIDE5NCwgMjE5LCA2MiwgMjQ5LCAyMzAsIDg1LCAyMTgsIDE1OCwgNzEsIDIxOCwgMTU4LCAyMzIsIAorICAgIDIzNCwgMjE2LCAxMzMsIDIxOCwgMzgsIDI1MywgMjQyLCAyMjgsIDc2LCAyNDgsIDQ2LCAyMjgsIDc2LCAyNDksIDIwMywgCisgICAgMjI2LCAxNjcsIDg1LCAyMTcsIDEsIDcxLCAyMTcsIDEsIDI1MiwgMTY0LCAyNTEsIDE3MSwgMjUyLCAxNjQsIDkzLCAyLCAKKyAgICAyNTAsIDEzNywgMjUyLCAxNjQsIDkzLCAyLCAyMTEsIDE3OCwgMjIyLCAwLCAyMTQsIDE5NSwgMiwgMjIzLCAxNjMsIDI0NiwgCisgICAgOTIsIDI0MCwgMjUwLCAyNTIsIDMwLCA3MSwgMjIwLCA0LCAyMjUsIDEwNCwgODUsIDIyMCwgNCwgMjI1LCAxMDQsIDIyMCwgCisgICAgODksIDIyMywgNTIsIDIyMiwgMTg5LCAyNDQsIDYzLCAyNDEsIDIzNSwgMjUxLCAxMjEsIDg1LCA0MywgMjI1LCAxMCwgMjM1LCAKKyAgICAyNDksIDg1LCA0NCwgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCA0MywgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCAxMjAsIDIyNSwgCisgICAgMTAsIDIzNSwgMjQ5LCA3MSwgNDQsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgMTI0LCAyMjUsIDEwLCAyMzUsIDI0OSwgMjE5LCAKKyAgICAxMDMsIDIyLCAyNDksIDEzNywgMjUwLCAyMjcsIDUwLCAyMjMsIDE3NSwgNTAsIDI1MSwgMjQ3LCA1MCwgMjUxLCAzMywgCisgICAgMjU0LCAxMTAsIDIyNiwgMTQ5LCAyNDksIDEzOCwgMjUwLCAxMTksIDIyMywgNDAsIDI0OSwgMTM5LCA2NCwgMjMyLCAxMjQsIAorICAgIDI0OSwgMTM5LCA2NCwgMjM1LCAxMjIsIDIxOCwgMTU5LCAyMiwgMjQ5LCAxNDQsIDI0NCwgMTc2LCA4NywgMjU1LCAxLCAKKyAgICAyMjAsIDkxLCAyNDIsIDI5LCAyMiwgMjE5LCAxOTEsIDIyNSwgMjIzLCA4NywgMjEwLCAyNTQsIDIxMSwgNjksIDIxNSwgCisgICAgMjE2LCAzMSwgMjQxLCAyMzAsIDIxNSwgMjE2LCAzMSwgMjMzLCAxMTMsIDIxNSwgMjE2LCAzMSwgMjQ0LCAxMDQsIDIxNSwgCisgICAgMjE2LCAzMSwgMjE2LCAxMzQsIDIxNSwgMjE2LCAzMSwgMjExLCAyMzksIDIxNSwgMjE2LCAzMSwgMjEyLCA0MCwgMjE1LCAKKyAgICAyMTYsIDMxLCAyMzAsIDEyMCwgMjE1LCAyMTYsIDMxLCAyNDUsIDIzMSwgMjEyLCAxLCA2NCwgMjQ4LCAyNiwgNzEsIDI0MywgCisgICAgMjQ3LCAyNDQsIDE5OCwgNzEsIDIxOSwgNzYsIDI0NCwgMTk4LCA4NSwgMjE5LCA3NiwgMjQ0LCAxOTgsIDcxLCAyMTgsIDM5LCAKKyAgICAyLCAyMjMsIDEzNSwgMjQ0LCAxMDAsIDIyNCwgMjUsIDIzMCwgMTMzLCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzMywgCisgICAgMjMxLCA1OSwgMjQ0LCAxNDYsIDUwLCAyNDUsIDIzMSwgMjMxLCAxOTUsIDUwLCAyMzUsIDQ0LCAyMjEsIDIyMiwgMjE0LCAKKyAgICAxNDUsIDIyOSwgOTgsIDIyNSwgMjMsIDI1NCwgMjAsIDIxNywgNDEsIDI0MywgNTksIDI1MSwgMTEsIDIzMywgMjUsIDIxMywgCisgICAgMTUwLCAyMzIsIDI0NCwgMjIxLCAxOTMsIDIyMiwgMjEsIDI1MSwgMCwgMjU0LCA1MCwgMjI1LCA1NSwgNzEsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA3MSwgMjUwLCAxMjUsIDIyNCwgMTcsIDcxLCAyNTAsIDEyNSwgMjIyLCAxOTcsIDcxLCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDcxLCAyNTAsIDEyNSwgMjM0LCAzNiwgNzEsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA4NSwgMjUwLCAxMjUsIDIyNCwgMTcsIDg1LCAyNTAsIDEyNSwgMjIyLCAxOTcsIDg1LCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDg1LCAyNTAsIDEyNSwgMjM0LCAzNiwgODUsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDIxOSwgMTgsIAorICAgIDIxOCwgNTEsIDcxLCAyNDEsIDIzNSwgMjE4LCA1MSwgNzEsIDI0OCwgMSwgMjE4LCA1MSwgODUsIDI0OSwgMjUzLCAyMTgsIAorICAgIDUxLCA3MSwgMjE5LCAxOCwgMjE4LCA1MSwgODUsIDI0MSwgMjM1LCAyMTgsIDUxLCA4NSwgMjQ4LCAxLCAyMTgsIDUxLCA3MSwgCisgICAgMjQ5LCAyNTMsIDIxOCwgNTEsIDI0MCwgMjUwLCAyMTgsIDI0MCwgMjI0LCAyNSwgMjI4LCA1MiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI1MiwgODEsIDI0NSwgMTk3LCAyMjgsIDQ3LCAyNTIsIDgxLCAyMTksIDEyMCwgMjI4LCA0NywgMjMwLCA2MiwgMjQ0LCAKKyAgICA3NCwgNTAsIDIzMCwgNjIsIDIyOSwgMTkzLCA1MCwgMjMwLCA2MiwgMjIwLCA3OCwgNTAsIDIxMiwgOSwgMTgzLCAyNDksIAorICAgIDEzOCwgMjQ1LCAyMjgsIDE4MywgMjQ5LCAxMzgsIDIxNCwgMTcxLCAyMjMsIDExNSwgODcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDgsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDcsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDYsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDUsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDQsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDMsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDIsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDI0MywgNTcsIDIzMSwgMTQzLCA4NSwgMjE0LCAxNzEsIDIyMywgCisgICAgMTE1LCA4NywgMjIzLCAxMTYsIDIyNiwgMjQsIDg3LCAyMjYsIDAsIDIyNiwgMjQsIDg3LCAyMjUsIDE3NywgMjI2LCAyNCwgCisgICAgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDksIDI0NCwgMTk3LCAyNDcsIDI0OSwgMjQ0LCAxOTYsIDI0NywgMjQ5LCAyNDQsIAorICAgIDE5NSwgMjQ3LCAyNDksIDI0NCwgMTk0LCAyNDcsIDI0OSwgMjQ0LCAxOTMsIDI0NywgMjQ5LCAyNDQsIDE5MiwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDU5LCAyMjIsIDI1NCwgNzEsIDI1MCwgNDQsIDIsIDExMywgMjQ3LCAxMjYsIDg1LCAyNTAsIDQ0LCAyLCA3MSwgCisgICAgNTksIDIyMiwgMjU0LCA4NSwgMjUwLCA0NCwgMiwgMTEzLCA3MSwgMjQ3LCAxMjYsIDIzMCwgMTQ3LCAzMSwgMjExLCA2OSwgCisgICAgMjMwLCAxNDcsIDMxLCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyNDIsIDEzOCwgMjExLCA2OSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyMzMsIDE5LCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyMzMsIDE5LCAyMTEsIDY5LCAyNDcsIDIzMiwgMzEsIDI0MiwgCisgICAgMTM4LCAyMTAsIDI1MywgNzEsIDI0NCwgODEsIDg1LCAyNDQsIDgxLCAyNDIsIDI5LCAyMiwgMjI1LCAxMDcsIDI1NCwgMTI4LCAKKyAgICAyNDksIDEzNiwgMjE3LCAyMzYsIDIxOCwgMTY2LCA2NCwgMjU0LCAyMzUsIDIyMSwgMjA4LCAyNTQsIDE3OCwgMjQ0LCA1OSwgCisgICAgMjQzLCA2NywgMjE4LCAxNjYsIDY0LCAyNDEsIDIwOSwgMjUzLCAyMDcsIDg3LCAyNDQsIDcwLCAyMjYsIDEzMCwgNzEsIAorICAgIDIxOCwgMTU4LCAxMzQsIDIzMiwgMjE0LCAyNDksIDE4MywgMjIyLCAyNTQsIDEzNCwgMjMyLCAyMTQsIDI0OSwgMTgzLCAKKyAgICAyMzMsIDUyLCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIDEzMCwgNTAsIDI0NiwgMTE4LCAyNDQsIDE0NiwgNTAsIDI0NiwgCisgICAgMTE4LCAyMzEsIDE5NSwgNTAsIDIzNSwgMjEwLCAyNDQsIDE0NiwgMjIsIDIzMSwgMTk1LCA1MCwgMjMxLCAxOTUsIDIyLCAKKyAgICAyNDQsIDE0NiwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgMjIsIDIzMSwgCisgICAgMTk1LCAyMiwgMjQ0LCAxNDYsIDUwLCA2NywgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCA1MCwgMjAzLCAyMzEsIDE5NSwgMiwgCisgICAgMjE4LCAxMDUsIDUwLCAyMzEsIDg3LCA3MSwgMjUwLCA0MywgMjMxLCA4NywgODUsIDI1MCwgNDMsIDIzMSwgODcsIDQsIDcxLCAKKyAgICAyNTAsIDQzLCAyMzEsIDE1OCwgODcsIDI0NywgMTc1LCA4NywgMjE0LCAxNjksIDIyNSwgMjU1LCA4NywgMjQ5LCAyMzksIAorICAgIDI0MywgMjMxLCAyMTQsIDE0MSwgMjI5LCA5MywgMjUwLCAxNjksIDIyNiwgNjUsIDIzNSwgNTAsIDIxMywgMTg1LCAyNTAsIAorICAgIDEwMSwgODUsIDIzMCwgMTM0LCAyMzIsIDIzMSwgMjIwLCAxMTQsIDIyMCwgMTQ5LCAyMjQsIDgsIDIyMCwgMTMyLCAyMTksIAorICAgIDU3LCAyNTIsIDE2NywgMjUyLCAxMzQsIDkyLCAyMzQsIDE0NCwgNzEsIDI0NiwgMTAxLCAyMzEsIDE5MCwgNzEsIDI0NiwgCisgICAgMTAxLCAyMzQsIDg0LCA4NSwgMjQ2LCAxMDEsIDIzMSwgMTkwLCA4NSwgMjQ2LCAxMDEsIDIzNCwgODQsIDIxOSwgNjMsIAorICAgIDIxMSwgMjMwLCAyMTksIDY2LCAyMTgsIDM5LCAyNTIsIDU5LCAyNDksIDI1NSwgMjIzLCAxNjIsIDg1LCAyMTksIDYyLCAKKyAgICAyMTYsIDEzNSwgMjUwLCAwLCAyMiwgMjIzLCAxNjIsIDIxNSwgOTQsIDcxLCAyMjAsIDQsIDIyNSwgMTA0LCAyMTUsIDk0LCAKKyAgICA4NSwgMjIwLCA0LCAyMjUsIDEwNCwgNzEsIDI0OCwgMSwgMjM2LCA3LCAyMTgsIDIzNiwgMjQ5LCAxMzMsIDIzMywgOTcsIAorICAgIDI0NywgMjAxLCAyNTAsIDI1MiwgMjI2LCAxNzAsIDIyNSwgMTA3LCAyNTAsIDI1MywgMjE5LCA5MCwgMjQxLCAyMTksIDIsIAorICAgIDcxLCAyNDksIDEzOCwgMzcsIDI0OSwgMTMzLCAyMzMsIDk3LCAyNTAsIDE2MSwgMjI4LCA4MCwgMjQ1LCAxMzIsIDI1NCwgCisgICAgMTQ5LCAyMjYsIDE5NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCAKKyAgICA3MSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgNDMsIDIzMywgOTgsIDIzMSwgNTgsIDcxLCA0MywgCisgICAgMjMzLCA5OCwgMjMxLCA1OCwgMjQ2LCA5NywgMjE5LCA4NCwgNTAsIDExNCwgNzEsIDI0NiwgMTEzLCAyMTUsIDIyNiwgNDMsIAorICAgIDI1MCwgOCwgMjQ1LCAxMzIsIDkyLCAyMjIsIDAsIDI0NCwgMTgzLCAyNDgsIDcsIDIzNiwgNywgNzEsIDI1MCwgNDQsIDIzNiwgCisgICAgNywgODUsIDIxOCwgMjM2LCA4NSwgMjE1LCAxOTMsIDIyMywgNjMsIDQzLCAyNDUsIDEzMSwgMjIzLCA2MywgNDMsIDI0NSwgCisgICAgMTMwLCAyNTMsIDIxOSwgMTYsIDMxLCAyMTQsIDE0NSwgMTE0LCAyNTAsIDQ0LCAyLCAyMTgsIDEwNSwgMjIsIDExMywgMTcwLCAKKyAgICA0OCwgMjI1LCAxOTIsIDIyMiwgMjUxLCAyMzUsIDIxMiwgMjI1LCAxOTIsIDIzMywgNDksIDIzNSwgMjEyLCAyMjUsIDE5MiwgCisgICAgMjM1LCAyMDAsIDIyNSwgMTkyLCA4NSwgMjQ5LCAxMzksIDIyNiwgMjAxLCAyMjAsIDMxLCAyMjAsIDE5LCAyMTksIDIzMSwgCisgICAgMjUwLCA2OSwgMjUwLCAyMzQsIDI0MSwgMTY0LCAyMTksIDEyOCwgMjQzLCA2OCwgMjExLCAyMzAsIDI0MCwgMjI3LCAyNDMsIAorICAgIDY4LCAyLCAyNDIsIDE5LCAyMzEsIDE3OCwgMTYsIDMxLCAyMzIsIDIzNSwgMjMwLCAxMjAsIDIxNCwgMTk1LCAyMjYsIDIwMSwgCisgICAgMjQyLCAxMjksIDI0NCwgMjAsIDI0NCwgODIsIDIzNiwgNywgMjQxLCA2NiwgMjQ0LCAxMzcsIDIyMiwgMTYsIDQyLCAyNDQsIAorICAgIDE5LCAyNDksIDE2NywgMjE5LCAxMDYsIDI0MCwgMTE5LCAyMTksIDEwOSwgMjI1LCAxNzEsIDIsIDI1MiwgMTY3LCAyMTYsIAorICAgIDI0MywgMjM1LCAxMzcsIDI1MiwgMTU0LCA4NywgMjQxLCAyMzgsIDI0MiwgMTQwLCA4NywgMjQzLCAyMzksIDIyNCwgMTQ1LCAKKyAgICAyNDksIDExMSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgNzEsIDI0NCwgODIsIDIsIDIwMywgMjMwLCAyMjksIDg1LCAyMTgsIAorICAgIDEwNiwgMjE0LCAxNjAsIDI1MSwgMjI1LCAyMjEsIDE5NSwgODUsIDIyMSwgMTk1LCAyMzIsIDExNCwgMjUxLCAyMjUsIDIyMSwgCisgICAgMTk1LCA3MSwgMjIxLCAxOTUsIDcxLCAxMTQsIDI1MCwgMTM4LCA3OSwgMjE3LCAyLCAyMzIsIDE2MCwgNTAsIDIxNywgNTQsIAorICAgIDI0NiwgOTYsIDI1NCwgMjAwLCAyNDUsIDEyNywgMjIzLCAxNjAsIDI0NCwgOTMsIDIyMywgMTYwLCAyNDIsIDIyLCAyMTMsIAorICAgIDE3NCwgMjQyLCAyMiwgMjExLCAxOTgsIDI0MiwgMjIsIDIzMiwgMTE0LCA0NCwgMjI1LCAyMDEsIDIyNSwgMjAxLCAyMTQsIAorICAgIDE2MCwgNDQsIDIyNSwgMjAxLCA3MSwgMjI4LCAyMzUsIDg1LCAyMjgsIDIzNSwgMjUwLCAxMzgsIDc5LCAxMTQsIDI1MCwgCisgICAgMTM4LCA3OSwgMjMwLCA4OSwgMjExLCAxNzgsIDExNCwgMjMwLCA4OSwgMjExLCAxNzgsIDI1MiwgMTY0LCAyMTEsIDE3OCwgCisgICAgMTE0LCAyNTIsIDE2NCwgMjExLCAxNzgsIDIyNiwgMTMwLCAyNiwgMjQ5LCAxMzgsIDExNCwgMjYsIDI0OSwgMTM4LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNDksIDEzOCwgMTE0LCAyMDQsIDI1MCwgMTgzLCAyNDksIDEzOCwgNywgMjQ5LCAxMzgsIDIyMCwgOTMsIAorICAgIDcxLCA3LCAyNDksIDEzOCwgMjI2LCAxMzAsIDcsIDI0OSwgMTM4LCAyMzEsIDE5MiwgMjQ5LCAxMzgsIDIxOCwgMTU5LCA2NCwgCisgICAgMjQ4LCAxNTcsIDI0NCwgMTksIDIxNywgMTYsIDI1MywgMjI0LCAyNDQsIDE5LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDExNCwgCisgICAgMjQ0LCAxOSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDQsIDE5LCAyNDksIDI1MSwgMjUzLCAyMjQsIDg1LCAyNDQsIDE5LCAKKyAgICAyMjUsIDEyLCAyMTgsIDE1OCwgNzEsIDI0NCwgMTksIDIyNSwgMTIsIDIxOCwgMTU4LCAyMTksIDEzLCAyMTgsIDExMywgCisgICAgMjI2LCAxMzAsIDcxLCAyMTgsIDE1OCwgMzcsIDcxLCAyMTgsIDE1OCwgMjA0LCAyNTAsIDE4MywgODUsIDIxOCwgMTU4LCAKKyAgICA4NSwgMjUwLCAxODMsIDcxLCAyMTgsIDE1OCwgMjI2LCAxMzAsIDg1LCAyMTgsIDE1OCwgMTE0LCAyMjYsIDEzMCwgODUsIAorICAgIDIxOCwgMTU4LCAyMjUsIDYzLCAyMTgsIDE1OCwgMjIwLCA5MywgNzEsIDIxOCwgMTU4LCAxMTQsIDI1MywgMjI0LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIxOCwgMjQ2LCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDIyNSwgNjMsIDIxOCwgMTU4LCAyMTksIDEyNywgMjI1LCAxMiwgODUsIAorICAgIDIxOCwgMTU4LCAyNDUsIDIwMSwgMjI1LCAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMTE0LCAyNDUsIDIwMSwgMjI1LCAKKyAgICAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMjE1LCA3NywgMjI1LCAxMiwgODUsIDIxOCwgMTU4LCAyMTksIDEyMiwgCisgICAgMjI1LCAxMiwgMjUzLCAyMjQsIDIxNywgMTYsIDI1MywgMjI0LCAyMDQsIDI1MCwgMTgzLCAyMTcsIDE2LCAyNTMsIDIyNCwgCisgICAgMTE0LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjE5LCAxMjcsIDIyNSwgMTYwLCA4NSwgMjIsIDcxLCAyNDQsIDYyLCA4NSwgMjQ0LCAKKyAgICA2MiwgNzEsIDI0NCwgNjIsIDI0NSwgMjAxLCAyMjUsIDE2MCwgMjI2LCAxMzAsIDg1LCAyNDQsIDYyLCAzNywgMjA0LCAyNTAsIAorICAgIDE4MywgMjQ1LCAyMDEsIDIyNSwgMTIsIDIxOCwgMTU4LCAxMTQsIDIxNywgMTYsIDIyNSwgNjMsIDI1MywgMjI0LCAyMTksIAorICAgIDY0LCAyMTYsIDEwNiwgMjE1LCAyMTksIDIxOSwgNjQsIDExNCwgMjUwLCAxMjIsIDIxOSwgNjQsIDIxOSwgMTUsIDExNCwgCisgICAgMjE5LCAxNSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjE3LCAxNiwgMjI0LCAxNzQsIDI1MywgMjI0LCAxMTQsIAorICAgIDI0NSwgMjAxLCAyMTcsIDE2LCAyMjQsIDE3NCwgMjUzLCAyMjQsIDI0OSwgMTM5LCA3OSwgMjIwLCA5MywgNzEsIDI1MCwgCisgICAgNDMsIDE1MiwgOTIsIDI0OSwgMTM5LCA3OSwgMjMyLCAxMTQsIDQ0LCAyNDYsIDk0LCA3MSwgMjE4LCAyMzYsIDIxNCwgMTYwLCAKKyAgICA0NCwgMjQ2LCA5NCwgNzEsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIyMCwgOTMsIDcxLCAyMTgsIDIzNiwgMjE0LCAxNjAsIAorICAgIDQ0LCAyMjAsIDkzLCA3MSwgMjE4LCAyMzYsIDg1LCAyMjQsIDE2LCAxNjQsIDIyNiwgMTUxLCA3MSwgMjI0LCAxNiwgMTY0LCAKKyAgICAyMjYsIDE1MSwgNzEsIDI0NSwgMzksIDE2NCwgMjI2LCAxNTEsIDg1LCAyNDgsIDEsIDIzMCwgMTg3LCA3MSwgMjExLCAxNzgsIAorICAgIDExNCwgMjQ1LCAzOSwgMTY0LCA4NywgMTkzLCA2NywgMTMwLCAyMzEsIDg3LCA2NywgMTMwLCAxMTQsIDY3LCAxMzAsIDExNCwgCisgICAgMjE5LCAxNTcsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMjE5LCAxNTcsIDI0OSwgCisgICAgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgNTIsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAKKyAgICAxNTEsIDExNCwgNTIsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMTIxLCAyMTksIDE1NywgMjQ5LCAKKyAgICAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAxMjEsIDUyLCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgCisgICAgMTUxLCAyNDksIDk5LCAyMTgsIDE0MiwgMjI2LCAxOSwgNSwgMjI2LCAxNTEsIDExNCwgMjQ1LCAzOSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMTE0LCAyNDEsIDIzNSwgMjQ1LCAzOSwgMTY0LCAyMjYsIDE1MSwgMTE0LCA4NSwgMjQxLCAyMzQsIDIyMiwgMTg5LCAKKyAgICAxMTQsIDg1LCAyNDEsIDIzNSwgMjUxLCAxMjEsIDI0NCwgNjMsIDI0MSwgMjM0LCAyMjIsIDE4OSwgMjQ0LCA2MywgMjQxLCAKKyAgICAyMzUsIDI1MSwgMTIxLCAyMzEsIDg3LCA0MywgMjI2LCA4LCAyMjYsIDE1MSwgMjMxLCA4NywgNDQsIDIyNiwgOCwgMjI2LCAKKyAgICAxNTEsIDIzMSwgODcsIDI0NCwgNzEsIDQzLCAyMjYsIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCAyNDQsIDcxLCA0NCwgMjI2LCAKKyAgICA4LCAyMjYsIDE1MSwgMjMxLCA4NywgMjMzLCA0OCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCA4NywgCisgICAgMjIyLCAyNTAsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDExNCwgMjMzLCA0OCwgMjU0LCAxMTgsIDIyNCwgMSwgCisgICAgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMzMsIAorICAgIDQ4LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxMTQsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgCisgICAgMTUxLCAxOTMsIDQzLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTkzLCA0NCwgMjE2LCA3LCAyMjAsIAorICAgIDU1LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgODcsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIAorICAgIDg3LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxMTEsIDI0NywgCisgICAgMjEyLCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAKKyAgICAxNjEsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTkwLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5NSwgMjQ3LCAyMTIsIAorICAgIDE1MiwgMzcsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTk2LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDIwMSwgCisgICAgMjQ3LCAyMTIsIDE1MiwgMzcsIDU0LCAyMTYsIDI0OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDExMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgMjEsIDEwNSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE1OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAKKyAgICAyMTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIAorICAgIDE5OSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDIwMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgNTQsIDIxNiwgMjQ4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxMTEsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgCisgICAgMjEsIDEwNSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTU4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIAorICAgIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIxMiwgCisgICAgMTUyLCAzNywgMzUsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDE1MiwgMzcsIAorICAgIDM1LCAyMSwgMjAxLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDU0LCAyMTYsIDI0OCwgMTE0LCAyMTEsIDI0NiwgOTcsIDc1LCAKKyAgICAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4NywgNTAsIDExNCwgMjQ3LCAxNzcsIDUwLCAxMTQsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMTE0LCA5NywgNzUsIDExNCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyNDYsIDEwNiwgMjI1LCAxNCwgOTcsIAorICAgIDc1LCAxMTQsIDIyMiwgMTg2LCA5NywgNzUsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjE1LCAyMjUsIDk3LCA3NSwgMjQ4LCAKKyAgICAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjQ4LCAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDg1LCA5NywgNzUsIDIxNiwgCisgICAgMTQ1LCAyMTYsIDEzLCA5NywgMjU0LCAxLCAyMTYsIDE0NSwgMjUxLCAxODEsIDk3LCAyNTQsIDEsIDg1LCA5NywgMjU0LCAxLCAKKyAgICAxMTQsIDg1LCAyNDksIDk5LCAyNDYsIDExMiwgMjIsIDk3LCA3NSwgMTE0LCA4NSwgMjQ5LCA5OSwgMjE0LCAxNTMsIDIyLCAKKyAgICA5NywgNzUsIDIxOCwgMjMzLCA4NSwgOTcsIDc1LCAxMTQsIDI0OSwgMjE0LCA4NSwgOTcsIDc1LCAyMjIsIDI0OSwgNzEsIAorICAgIDk3LCA3NSwgMjMzLCA0NywgNzEsIDk3LCA3NSwgMjUyLCAxOTEsIDIyMCwgOTMsIDcxLCA5NywgNzUsIDI0MywgMjQ5LCAKKyAgICAyMjAsIDkzLCA3MSwgOTcsIDc1LCAxMTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMTE0LCAyMTQsIDE2MCwgCisgICAgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDIyOCwgNTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMjQ5LCAxMDcsIAorICAgIDIzMiwgMTI5LCAyMjgsIDU0LCAyMTQsIDE2MCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDM3LCAxMTQsIDcxLCA5NywgNzUsIAorICAgIDIxMSwgMjUyLCA5NywgNzUsIDI1MSwgMjI4LCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDI1MSwgMjI4LCA5NywgNzUsIDI1MSwgCisgICAgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDExNCwgMjUxLCAyMjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMTE0LCAKKyAgICAyNTEsIDIyOCwgOTcsIDc1LCAxMTQsIDI1MSwgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxNywgMTgsIDk3LCA3NSwgCisgICAgMTE0LCAyMTcsIDE3LCA5NywgNzUsIDIxMiwgMTgsIDk3LCA3NSwgMTE0LCAyMTIsIDE4LCA5NywgNzUsIDIyNiwgMTc2LCAKKyAgICA5NywgNzUsIDUyLCAyNDksIDEwNywgMjMyLCAxMjksIDEzNCwgMjQ3LCAyMjIsIDI1NCwgMTE3LCA3MSwgMjE1LCAyMjcsIAorICAgIDI0OSwgMTk1LCA0LCA3MSwgMjE1LCAyMjYsIDIyNSwgMTc0LCAyMDQsIDIxOCwgNjQsIDIwNCwgMjE4LCAyMiwgNDMsIDIyMiwgCisgICAgOTIsIDI1MiwgMTgxLCAyNDgsIDY4LCA0NCwgMjIyLCA5MiwgMjUyLCAxODEsIDI0OCwgNjgsIDE3NywgMiwgNTksIDIzNSwgCisgICAgMjIyLCAyMjMsIDUzLCAyMTksIDQ5LCAyMjQsIDIwNCwgMjE4LCA2NCwgMjE4LCAyMywgMjI0LCAyMDQsIDIxOSwgNDgsIDY3LCAKKyAgICAyNTIsIDE0OSwgMiwgMjAzLCA5MSwgMTEsIDIyMiwgMjMxLCAyNDgsIDYsIDIwMCwgMjQ3LCAxNzYsIDExLCAyNDQsIDE4MywgCisgICAgMjQ4LCA2LCA5MiwgMjMyLCAxNTIsIDI1NCwgMTI2LCA5MiwgMjMyLCAxNTIsIDIyNiwgMTYyLCA3MSwgMjQ4LCAxLCAyLCAKKyAgICAyNTAsIDE4MSwgMjQ3LCAxMjgsIDIyLCAyLCAyNDcsIDEyOCwgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjE0LCAxNTIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ5LCAxNjksIDIsIDI0NywgMTI4LCAyMTQsIDE2MCwgNDMsIDI0OSwgMTY5LCAyLCAyNDcsIDEyOCwgCisgICAgNDMsIDIyNiwgMTMyLCAyMzUsIDcyLCA0NCwgMjI2LCAxMzIsIDIzNSwgNzIsIDI0MywgMjM2LCAyMjYsIDEzMiwgMjM1LCAKKyAgICA3MiwgMjMzLCA5MSwgMTIwLCAyMTcsIDg4LCAyMzMsIDkxLCAxMjQsIDIxNywgODgsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIAorICAgIDkzLCA0MywgMjIsIDQ0LCAyMTcsIDg4LCA0MywgMjMwLCA5MiwgMjAwLCA0NCwgMjE3LCA4OCwgMjAwLCA0MywgMjE3LCA4OCwgCisgICAgMTIwLCAyMTcsIDg5LCAyLCAyNTAsIDQ0LCA0OCwgMjMyLCAxMTEsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDIyMiwgMTM1LCAKKyAgICA3MSwgMjQ5LCAyMTMsIDI0OCwgMCwgNzEsIDI0OSwgMjEzLCAyNDgsIDEsIDIsIDE0MCwgMjE2LCAxMTUsIDcxLCAyNDksIAorICAgIDIxMywgMjQ4LCAxLCAyLCA5NywgMjE2LCAxMTUsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNSwgNzEsIDQyLCAyLCA5NywgCisgICAgMjE2LCAxMTUsIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTgsIAorICAgIDEyNywgMTEsIDQ0LCAyNTQsIDExOCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIAorICAgIDExOCwgMTI3LCAxMSwgNDMsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAKKyAgICAxMjcsIDExLCA0MywgMjQ0LCA3MSwgMjI2LCA3LCAxMSwgNDQsIDI0NCwgNzEsIDIyNiwgNywgMjE0LCAxNTMsIDIyNCwgMjcsIAorICAgIDc1LCAyNDYsIDExMiwgMjI0LCAyNywgNzUsIDI1NCwgOTYsIDI0MywgMTA1LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjQzLCAKKyAgICAxMDUsIDI1MCwgNDQsIDc1LCA0NCwgODAsIDIsIDM3LCAyMjUsIDI1LCAyMDAsIDE0MCwgNzUsIDIwMCwgOTcsIDc1LCAyMDAsIAorICAgIDQzLCA0NCwgNzUsIDIwMCwgMTQwLCA1MiwgNzUsIDIwMCwgOTcsIDUyLCA3NSwgMjAwLCA0MywgNDQsIDUyLCA3NSwgMjAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCAxNDAsIDUyLCA4MCwgCisgICAgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgNTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCAyMTgsIDIzMiwgNzUsIDQ2LCAKKyAgICA0NywgMjUxLCAyMjMsIDQ2LCA0NywgMjQ3LCAxMjUsIDQ2LCA0NywgMjQ2LCAyNTMsIDQ2LCA0NywgMjQ3LCAxMjQsIDQ2LCAKKyAgICA0NywgMjQ2LCAxODksIDQ2LCA0NywgMjQ3LCA2MCwgNDYsIDQ3LCAyNDYsIDI1MiwgNDYsIDQ3LCAyNDcsIDEyMywgNDYsIAorICAgIDQ3LCAyNDYsIDE1NywgNDYsIDQ3LCAyNDcsIDI4LCA0NiwgNDcsIDI0NiwgMjIwLCA0NiwgNDcsIDI0NywgOTEsIDQ2LCA0NywgCisgICAgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDI1MSwgNDYsIDQ3LCAyNDcsIDEyMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIDI0NywgNzUsIDQ2LCA0NywgCisgICAgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAyNDcsIDEwNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE1NiwgNDYsIDQ3LCAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgCisgICAgMjQ2LCAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDI1MCwgNDYsIDQ3LCAyNDcsIDEyMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIAorICAgIDE2NCwgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDgsIDQ2LCA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgCisgICAgMTc5LCA0NiwgNDcsIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDAsIDQ2LCA0NywgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgCisgICAgMTcxLCA0NiwgNDcsIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNTUsIDQ2LCA0NywgMjQ3LCAyNiwgNDYsIDQ3LCAyNDYsIDIxOCwgNDYsIDQ3LCAyNDcsIDg5LCA0NiwgNDcsIDI0NiwgCisgICAgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAyNDksIDQ2LCA0NywgMjQ3LCAxMjAsIDQ2LCA0NywgMjQ2LCAKKyAgICAxMjksIDQ2LCA0NywgMjQ3LCAwLCA0NiwgNDcsIDI0NiwgMTkyLCA0NiwgNDcsIDI0NywgNjMsIDQ2LCA0NywgMjQ2LCAxNjAsIAorICAgIDQ2LCA0NywgMjQ3LCAzMSwgNDYsIDQ3LCAyNDYsIDIyMywgNDYsIDQ3LCAyNDcsIDk0LCA0NiwgNDcsIDI0NiwgMTQ0LCA0NiwgCisgICAgNDcsIDI0NywgMTUsIDQ2LCA0NywgMjQ2LCAyMDcsIDQ2LCA0NywgMjQ3LCA3OCwgNDYsIDQ3LCAyNDYsIDE3NSwgNDYsIDQ3LCAKKyAgICAyNDcsIDQ2LCA0NiwgNDcsIDI0NiwgMjM4LCA0NiwgNDcsIDI0NywgMTA5LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIAorICAgIDI0NywgNywgNDYsIDQ3LCAyNDYsIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgCisgICAgMzgsIDQ2LCA0NywgMjQ2LCAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxNTEsIDQ2LCA0NywgMjQ3LCAKKyAgICAyMiwgNDYsIDQ3LCAyNDYsIDIxNCwgNDYsIDQ3LCAyNDcsIDg1LCA0NiwgNDcsIDI0NiwgMTgyLCA0NiwgNDcsIDI0NywgNTMsIAorICAgIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgMjQ3LCAzLCA0NiwgCisgICAgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAzNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgNDcsIAorICAgIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTM5LCA0NiwgNDcsIDI0NywgMTAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDIsIDQ2LCA0NywgMjQ3LCA3MywgNDYsIDQ3LCAyNDYsIDE3MCwgNDYsIDQ3LCAyNDcsIDQxLCA0NiwgNDcsIAorICAgIDI0NiwgMjMzLCA0NiwgNDcsIDI0NywgMTA0LCA0NiwgNDcsIDI0NiwgMTU0LCA0NiwgNDcsIDI0NywgMjUsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTcsIDQ2LCA0NywgMjQ3LCA4OCwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAyNDcsIDU2LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ4LCA0NiwgNDcsIDI0NywgMTE5LCA0NiwgNDcsIDI0NiwgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIAorICAgIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIAorICAgIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NywgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjgsIDQ2LCA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIAorICAgIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIDEzMCwgNDYsIDQ3LCAyNDcsIDEsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTMsIDQ2LCA0NywgMjQ3LCA2NCwgNDYsIDQ3LCAyNDYsIDE2MSwgNDYsIDQ3LCAyNDcsIDMyLCA0NiwgNDcsIAorICAgIDI0NiwgMjI0LCA0NiwgNDcsIDI0NywgOTUsIDQ2LCA0NywgMjQ2LCAxNDUsIDQ2LCA0NywgMjQ3LCAxNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwOCwgNDYsIDQ3LCAyNDcsIDc5LCA0NiwgNDcsIDI0NiwgMTc2LCA0NiwgNDcsIDI0NywgNDcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzksIDQ2LCA0NywgMjQ3LCAxMTAsIDQ2LCA0NywgMjQ2LCAxMzcsIDQ2LCA0NywgMjQ3LCA4LCA0NiwgNDcsIAorICAgIDI0NiwgMjAwLCA0NiwgNDcsIDI0NywgNzEsIDQ2LCA0NywgMjQ2LCAxNjgsIDQ2LCA0NywgMjQ3LCAzOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMSwgNDYsIDQ3LCAyNDcsIDEwMiwgNDYsIDQ3LCAyNDYsIDE1MiwgNDYsIDQ3LCAyNDcsIDIzLCA0NiwgNDcsIAorICAgIDI0NiwgMjE1LCA0NiwgNDcsIDI0NywgODYsIDQ2LCA0NywgMjQ2LCAxODMsIDQ2LCA0NywgMjQ3LCA1NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NiwgNDYsIDQ3LCAyNDcsIDExNywgNDYsIDQ3LCAyNDYsIDEyOCwgNDYsIDQ3LCAyNDYsIDI1NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MSwgNDYsIDQ3LCAyNDcsIDYyLCA0NiwgNDcsIDI0NiwgMTU5LCA0NiwgNDcsIDI0NywgMzAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjIsIDQ2LCA0NywgMjQ3LCA5MywgNDYsIDQ3LCAyNDYsIDE0MywgNDYsIDQ3LCAyNDcsIDE0LCA0NiwgNDcsIAorICAgIDI0NiwgMjA2LCA0NiwgNDcsIDI0NywgNzcsIDQ2LCA0NywgMjQ2LCAxNzQsIDQ2LCA0NywgMjQ3LCA0NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzNywgNDYsIDQ3LCAyNDcsIDEwOCwgNDYsIDQ3LCAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIAorICAgIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgMTUwLCA0NiwgNDcsIDI0NywgMjEsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTMsIDQ2LCA0NywgMjQ3LCA4NCwgNDYsIDQ3LCAyNDYsIDE4MSwgNDYsIDQ3LCAyNDcsIDUyLCA0NiwgNDcsIAorICAgIDI0NiwgMjQ0LCA0NiwgNDcsIDI0NywgMTE1LCA0NiwgNDcsIDI0NiwgMTMxLCA0NiwgNDcsIDI0NywgMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NCwgNDYsIDQ3LCAyNDcsIDY1LCA0NiwgNDcsIDI0NiwgMTYyLCA0NiwgNDcsIDI0NywgMzMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjUsIDQ2LCA0NywgMjQ3LCA5NiwgNDYsIDQ3LCAyNDYsIDE0NiwgNDYsIDQ3LCAyNDcsIDE3LCA0NiwgNDcsIAorICAgIDI0NiwgMjA5LCA0NiwgNDcsIDI0NywgODAsIDQ2LCA0NywgMjQ2LCAxNzcsIDQ2LCA0NywgMjQ3LCA0OCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MCwgNDYsIDQ3LCAyNDcsIDExMSwgNDYsIDQ3LCAyNDYsIDEzOCwgNDYsIDQ3LCAyNDcsIDksIDQ2LCA0NywgCisgICAgMjQ2LCAyMDEsIDQ2LCA0NywgMjQ3LCA3MiwgNDYsIDQ3LCAyNDYsIDE2OSwgNDYsIDQ3LCAyNDcsIDQwLCA0NiwgNDcsIAorICAgIDI0NiwgMjMyLCA0NiwgNDcsIDI0NywgMTAzLCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTYsIDQ2LCA0NywgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDE4NCwgNDYsIDQ3LCAyNDcsIDU1LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ3LCA0NiwgNDcsIDI0NywgMTE4LCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCA2NywgOTEsIDQzLCA0NCwgNTIsIAorICAgIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgMTQwLCA1MiwgODAsIDI0MywgMjUxLCAKKyAgICAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCA4MCwgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDgwLCAKKyAgICAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTIsIDc1LCAyNDYsIDExMiwgMjE1LCAyMTIsIDc1LCAxNDAsIDUyLCAyNDgsIAorICAgIDE2NSwgNzUsIDk3LCA1MiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDk3LCAyMTUsIDIxMiwgCisgICAgMjQ4LCAxNjUsIDc1LCA5NywgMjE1LCA1OCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgOTcsIDgwLCAyLCAyNDYsIDEyNiwgCisgICAgMjE4LCAxNDEsIDIxNCwgMTUzLCA4MCwgMjE2LCA0MywgMTMwLCAyNDYsIDExMiwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIAorICAgIDgwLCAyLCAyMTcsIDc4LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1NCwgMywgOTcsIDI1NCwgMywgMTQwLCA1MiwgMjU0LCAzLCA5NywgCisgICAgNTIsIDI1NCwgMywgMTQwLCA4MCwgMjE2LCA0MywgODUsIDI0OCwgMCwgOTcsIDgwLCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMjUyLCAxNDksIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDk3LCA4MCwgMjQzLCAyNTEsIDI1MiwgCisgICAgMTQ5LCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAyMjgsIDYxLCAyMTIsIDksIDIyLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCAyMiwgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMiwgMTAzLCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgODAsIDIsIDEwMywgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyLCAxMDMsIDIxOSwgMzAsIAorICAgIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMjIsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDgwLCAyMiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDIyLCAKKyAgICAyMTksIDMwLCAyMTIsIDksIDc1LCAyMTksIDMwLCAyMTIsIDksIDgwLCAyMiwgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjIyLCAKKyAgICAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDI0NCwgMTgzLCAyNDgsIDYsIDI0NCwgMTgzLCAyNDgsIDcsIDI0OSwgMTMzLCAyMjIsIAorICAgIDIzMSwgMjQ4LCA2LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjQ0LCAxODMsIDI0OCwgNywgMjQ5LCAKKyAgICAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjIyLCAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMjI4LCA2MSwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgCisgICAgMjEyLCA5LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjEyLCAzNiwgODAsIDIyNSwgMTAsIDI0NywgCisgICAgMjAzLCAyMjIsIDI1NCwgODAsIDIyNSwgMTAsIDk3LCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjE0LCAxNTIsIDgwLCAyMjUsIDEwLCAKKyAgICA5NywgMjE2LCAxODksIDI0OSwgOTgsIDI0NiwgMTExLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIAorICAgIDk4LCAyMzMsIDQzLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIDk4LCAyMjIsIDI0NCwgMjIyLCAKKyAgICAyNDcsIDI1NCwgMzQsIDI1MCwgMTAsIDc1LCAyMzMsIDQ2LCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAKKyAgICAzNCwgMjU0LCA5NiwgNzUsIDI1MSwgMTgzLCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAzNCwgMjUwLCAKKyAgICAxMCwgODAsIDIsIDIzMCwgMTg2LCAyMTYsIDE1LCAyNTQsIDM0LCAyNTQsIDk2LCA4MCwgMiwgMjI1LCAyNSwgMjMyLCAxMTQsIAorICAgIDQ0LCAyMjAsIDE1NCwgMjUwLCAxMCwgNzUsIDIzMiwgMTE0LCA0MywgMjIwLCAxNTQsIDI1NCwgOTYsIDc1LCAyNTQsIDk2LCAKKyAgICAyNTAsIDgsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyNTAsIDgsIDI1MCwgNDQsIDc1LCA5NywgODAsIDcyLCAyMTksIDI1MywgCisgICAgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDIxOSwgMjUzLCA5NywgNzUsIDIxOSwgMjUzLCA5NywgODAsIDcyLCAxNDAsIDc1LCAKKyAgICA5NywgODAsIDIsIDk2LCA1MSwgMTQwLCA4MCwgMiwgOTYsIDUxLCA5NywgODAsIDIxNiwgMTQwLCAyMTEsIDE3OCwgNDMsIAorICAgIDQ0LCA4MCwgMjE2LCAxNDAsIDQsIDI1MCwgNDMsIDIxNCwgMTUzLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDQsIDI1MCwgCisgICAgNDMsIDQzLCAyNTIsIDE0NywgMTIwLCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyNCwgNDQsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQzLCAyNDIsIDUsIDEyMCwgCisgICAgMjUyLCAxNDcsIDQzLCAxMjQsIDI1MiwgMTQ3LCA0NCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyMCwgNDQsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQ0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgCisgICAgMTI0LCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0MywgMTI0LCAyNTIsIDE0NywgNDMsIAorICAgIDI0MiwgNSwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDIxNiwgNDMsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDEyMCwgMjE2LCA0MywgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDIxNiwgNDMsIDEzMCwgCisgICAgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyMTYsIDQzLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgMTI0LCAyMTYsIDQzLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDIxNiwgNDMsIDEzMCwgMjE0LCAKKyAgICAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyMTYsIDQzLCAxMzAsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjE2LCA0MywgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgOTcsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDQ0LCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDI0MywgMjUxLCAxMzAsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNDMsIDI1MSwgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAKKyAgICAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDI0MywgMjUxLCAxMzAsIDI0NiwgCisgICAgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjQzLCAyNTEsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDI1MiwgMzgsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgOTcsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMjQ2LCAxMTIsIDI0MiwgNiwgCisgICAgMiwgMjUyLCAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTYzLCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNjMsIDk3LCAyNDIsIDYsIAorICAgIDIsIDI1MiwgMTQ3LCAxMjQsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAxNDAsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDIwMCwgMjQ4LCAxNjQsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNTIsIDUxLCAKKyAgICAyMDAsIDI0OCwgMTY0LCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgMjAwLCAyNDgsIDE2NCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjUyLCA1MSwgMjAwLCAyNDgsIDE2NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDI0NiwgMTEyLCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjUyLCAzOCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCA0NCwgCisgICAgNTIsIDgwLCAyLCAyMjIsIDE4NSwgMjQxLCAyNDIsIDI0NSwgMTA2LCA1LCA3MiwgOTcsIDc1LCAyMTYsIDkwLCAyMjYsIAorICAgIDE3MiwgNzIsIDk3LCA3NSwgMTQwLCA4MCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMTYsIDkwLCAKKyAgICAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMzMsIDIxLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgCisgICAgMjE2LCAxNDAsIDIzMywgMjAsIDI0MiwgMTM3LCA3MiwgOTcsIDc1LCAyMTgsIDY1LCA3MiwgOTcsIDc1LCAxNDAsIDgwLCAKKyAgICAyMTYsIDE0MCwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDE0MCwgNzUsIDQzLCAyNDQsIDk5LCAyMTcsIDc4LCA0NCwgMjQ0LCAKKyAgICA5OSwgMjE3LCA3OCwgMTIwLCAyNDQsIDk5LCAyMTcsIDc4LCAxMjQsIDI0NCwgOTksIDIxNywgNzgsIDIxNSwgMjEyLCA2NywgCisgICAgMjUyLCAxNDksIDI0OCwgNjgsIDIxMCwgMTYwLCAxODksIDIxOCwgMjQ0LCAyMTAsIDE2MCwgMTg5LCAyMTUsIDQ5LCAyNDksIAorICAgIDIzNCwgNDMsIDcxLCAyNDksIDEwNywgMTI3LCA0NCwgNzEsIDI0OSwgMTA3LCAxMjcsIDQzLCA3MSwgMjI2LCA3LCA0NCwgCisgICAgNzEsIDIyNiwgNywgMjEwLCAxNjAsIDE4OSwgNDMsIDIzNiwgMjIsIDEyNywgMjEwLCAxNjAsIDE4OSwgNDQsIDIzNiwgMjIsIAorICAgIDEyNywgMjEwLCAxNjAsIDE4OSwgNDMsIDI1MSwgMjUwLCAxMjcsIDIxMCwgMTYwLCAxODksIDQ0LCAyNTEsIDI1MCwgMTI3LCAKKyAgICA0MywgNDIsIDI1MSwgMTY2LCAyLCAyMTQsIDE4MywgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE0LCAxODMsIDQzLCA0MiwgCisgICAgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIDcsIDIxNiwgMTUsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAKKyAgICAyMTYsIDExNiwgMjM2LCA3LCAyNTEsIDE4MywgMjQ5LCAxNjgsIDQzLCA0MiwgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIAorICAgIDcsIDI1MSwgMTgzLCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgNywgMjE2LCAxNSwgCisgICAgMjQ5LCAxNjgsIDQzLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIsIDI0NywgMTI4LCA0NCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyLCAKKyAgICAyNDcsIDEyOCwgNDMsIDI1NCwgMzQsIDIzMywgMjEsIDEyNywgNDQsIDI1NCwgMzQsIDI0MiwgMTM3LCAxMjcsIDUyLCA0MywgCisgICAgMjU0LCAzNCwgMjQyLCAxMzcsIDEyNywgNTIsIDQ0LCAyNTQsIDM0LCAyMzMsIDIxLCAxMjcsIDQzLCA4NSwgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDQ0LCA4NSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDI0NiwgMTI2LCAyNDQsIDE0MywgNjcsIDIxMCwgCisgICAgMzUsIDIzMiwgMjE5LCAyMzEsIDkzLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIzMywgNTIsIDQ0LCAyNTQsIDExOCwgMjE0LCAKKyAgICAxMiwgMiwgMjE4LCAyMzYsIDIzMSwgOTMsIDQ0LCAyNTQsIDExOCwgMiwgMjQ3LCAxMjgsIDI1NCwgMTE4LCAyLCAyMjIsIAorICAgIDk0LCAyMzUsIDIyMiwgMjU1LCAxMiwgMjU0LCAxMTcsIDIxOSwgMSwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMzMsIDUyLCAKKyAgICAyMTksIDEsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjE0LCAxNjMsIDIxNSwgOTQsIDI1NCwgMTE3LCAyMjMsIDUyLCAyNTQsIAorICAgIDExNywgMjU0LCAxMTgsIDIsIDIxNCwgMTgzLCAyMjMsIDUyLCAyNTQsIDExOCwgMiwgMjE0LCAxODMsIDIyNiwgMjUyLCAKKyAgICAyNTQsIDExOCwgMjI2LCAxNzQsIDIxNCwgMTYzLCAyMjYsIDI1MiwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyNDYsIDExNCwgCisgICAgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyMCwgCisgICAgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgCisgICAgMjI1LCAxMCwgMTIwLCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIAorICAgIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyNCwgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIAorICAgIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTI0LCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIAorICAgIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgCisgICAgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCA0MywgMjIsIAorICAgIDIxNCwgMTYzLCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAKKyAgICAxMCwgNDQsIDIyLCAyNDYsIDExNCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgCisgICAgNywgODAsIDIyNSwgMTAsIDQzLCAyMiwgMjQ2LCAxMTQsIDIyMywgNTIsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCAyMjYsIDEyNywgMjQ1LCAxNjAsIDIyMCwgMTMwLCAyLCA0LCAyNTAsIDQ0LCA0OCwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE2MCwgMjIwLCAxMzAsIDIsIDQzLCA4MCwgNDgsIDI1MCwgNDQsIDIsIAorICAgIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgMTEsIDM3LCAyMjMsIDUzLCAyMTksIDQ4LCAzNywgMjI1LCAxNzQsIAorICAgIDI1MCwgNDQsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDI1MiwgMTQ5LCAyMiwgMjE2LCAxNSwgMTYzLCAyNDcsIDE4MSwgCisgICAgMjUxLCA4NiwgNjcsIDEzMCwgMjUwLCA0NCwgMiwgMjE4LCAyNSwgMjExLCAxNzgsIDM3LCAyNTQsIDk1LCAyNDcsIDE3NywgCisgICAgNTAsIDEyMCwgODAsIDIxNiwgMTQwLCAyNTAsIDQzLCAzNywgNzEsIDI1MSwgMTIxLCAzNywgMjUxLCAxMjEsIDM3LCAyMzMsIAorICAgIDIwLCAzNywgMjQyLCAxMzYsIDI1MCwgNDQsIDIsIDQsIDI1MCwgNDQsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgCisgICAgMjUwLCA0NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTMsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgOTIsIDIyMiwgMjMxLCAKKyAgICAyNDgsIDcsIDIxOSwgOTcsIDkyLCAyNDQsIDE4MywgMjQ4LCA3LCAyMTksIDk3LCA5MiwgMjUzLCAyMjQsIDkyLCA0LCAyNTAsIAorICAgIDQzLCA5MiwgMjE4LCAyMzYsIDExMywgMjM1LCA3MSwgMjE4LCAyMzQsIDIxNSwgMjI3LCAyLCA1OSwgNDgsIDIxNSwgMjI3LCAKKyAgICAyLCAyMTQsIDE4MywgMjIyLCA5NCwgMjM2LCA3LCAyMTUsIDIyNiwgMjE1LCAyMjcsIDIsIDIyMCwgMTM2LCAyNTMsIDIxNSwgCisgICAgMjUxLCAxODIsIDQ0LCAyMTUsIDIyNywgNzIsIDQzLCAyMTUsIDIyNiwgNDMsIDIxNSwgMjI3LCAyNTIsIDM4LCA2NywgMTMwLCAKKyAgICA2NywgMjUyLCAxNDksIDI1MiwgMzgsIDQ0LCAyMTUsIDIyNiwgMjUxLCAxNzMsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTEsIAorICAgIDE3MywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDg1LCAyNTEsIDE3MiwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAzMCwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDcxLCAyNDAsIDI0MywgODUsIDI0MCwgMjQzLCA0MywgMjExLCAyNDQsIDI0NCwgMTQzLCAKKyAgICA0NCwgMjExLCAyNDQsIDI0NCwgMTQzLCA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDE0MywgNDQsIDUyLCAyMTEsIDI0NCwgCisgICAgMjQ0LCAxNDMsIDIzNSwgMjU1LCAyMzUsIDI0MSwgMjE2LCAxMTMsIDExNSwgMjM1LCAyNDEsIDIzNSwgMjQyLCAyMjksIAorICAgIDEwNywgMiwgNjcsIDEzMCwgMjQ2LCAxMjAsIDIzMCwgOTIsIDQyLCAyLCAyNDksIDE4OSwgMjI2LCAxMzEsIDIzNSwgMjUzLCAKKyAgICAyNTMsIDI0NSwgMjE5LCAyMjEsIDIyNCwgMTgzLCAyNDUsIDEwNiwgNSwgMjIsIDIxOSwgOTksIDIyNiwgMTEsIDI0NSwgCisgICAgMTA2LCA1LCAyMiwgMjE5LCA5OSwgMjI2LCAxMiwgMiwgMjE2LCA5MCwgNDgsIDI0MCwgMTExLCAyMTYsIDQzLCAyMiwgMjE5LCAKKyAgICA5OSwgMjI2LCAxMSwgMjQyLCAxOTAsIDIxOCwgMTU3LCAyMTYsIDE4NiwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0MywgCisgICAgMTYzLCAyNTEsIDIyOSwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgODUsIDI0OCwgMSwgMiwgCisgICAgMTI0LCA3NSwgODUsIDIzMiwgMTEwLCA3MSwgMjUwLCA0NCwgMiwgMTI0LCA3NSwgODUsIDI1MCwgNDQsIDIsIDEyNCwgNzUsIAorICAgIDI0NSwgOTMsIDcxLCAyMTgsIDIzNiwgMjQ1LCA5MywgODUsIDIxOCwgMjM2LCAyNDUsIDkzLCA3MSwgMjQ4LCAwLCAyNDUsIAorICAgIDkzLCA4NSwgMjQ4LCAwLCAyNDUsIDkzLCA3MSwgMjUwLCA0MywgMjQ1LCA5MywgODUsIDI1MCwgNDMsIDIyMiwgMTM0LCAKKyAgICAyMjMsIDUzLCAyMTksIDQ5LCAyMjYsIDE3MSwgMjE5LCA0OSwgMiwgMjI2LCAxMjcsIDIyMywgNTMsIDIxOSwgNDksIDIsIAorICAgIDIwMywgOTEsIDI1MiwgMSwgMjE5LCA0OCwgMjUyLCAxLCAyMjMsIDUzLCAyMTksIDQ4LCA1MiwgMjI1LCAyNSwgMjE1LCAKKyAgICAyMTIsIDIyNSwgMjUsIDIzMywgNDgsIDI0OSwgOTksIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNDksIDk5LCAyNTQsIAorICAgIDExOCwgMTI3LCAyMTYsIDc5LCAyMzAsIDE4NCwgMjMwLCAyOSwgMzcsIDU5LCAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDk2LCAKKyAgICAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDMwLCAyMjYsIDE3MSwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyNDcsIAorICAgIDEyOCwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyMjUsIDI1LCAyMzAsIDI5LCA0MiwgMjM1LCAyMDYsIDIyNiwgCisgICAgMTcxLCAyMzAsIDI5LCA0MiwgMjE0LCAxNzYsIDIyNiwgMTcxLCAxMTMsIDIzMiwgMTUyLCAyMiwgMjI2LCAxNzEsIDExMywgCisgICAgMjMyLCAxNTIsIDE3NywgMjI2LCAxNzEsIDIzMCwgMjksIDMwLCAyMjYsIDE3MSwgMjMwLCAxNTksIDExMywgMjE4LCA0NCwgCisgICAgMjE4LCA0MiwgMiwgMjM1LCAyMTgsIDIyNCwgMjcsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjQ0LCAxMDcsIDIyNiwgMywgMjM1LCAKKyAgICAyMTgsIDIzNSwgMjE5LCAyLCA1MiwgOTEsIDIzNSwgMjE5LCAyNTMsIDE4MSwgMiwgMjE5LCA5NywgMjUwLCA0MCwgMjQzLCAKKyAgICAyMzMsIDI1NCwgOTYsIDIzNSwgMjE2LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMywgMTE4LCAyMjUsIDI0MSwgMjU0LCAKKyAgICAxMCwgMjI1LCA0LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMCwgMTU0LCAyMjUsIDI0MSwgMjU0LCAxMCwgMjI1LCA0LCAKKyAgICAyMzIsIDIyMCwgMjM1LCAyMTcsIDIyOCwgNTcsIDIzNiwgMSwgMjE2LCAxOTcsIDIyNSwgNCwgMjM1LCAyMTksIDI1NCwgMTAsIAorICAgIDExNiwgMjI1LCAxNCwgMjI2LCAxNzEsIDIyNCwgMjEsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjM1LCAyMTksIDIsIDE0MCwgCisgICAgODAsIDIsIDEwMywgMjM1LCAyMTksIDIsIDMwLCA1MCwgMjM1LCAyMTksIDIsIDIzNSwgMjA1LCAyMzUsIDIxOSwgMiwgMjE0LCAKKyAgICAxNzUsIDIzNSwgMjE5LCAyLCAyMjYsIDEyNywgMjM1LCAyMTksIDIsIDIxNCwgMTgzLCAyMzUsIDcyLCAyMzMsIDkxLCA0MywgCisgICAgMjE1LCAyMjcsIDIyNiwgMTcxLCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjQ5LCAyMTcsIDIxMCwgMTYwLCAxODksIAorICAgIDIyMSwgMjAzLCAyMjUsIDU5LCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjI0LCAxNzksIDk2LCA1LCAyLCA0LCAyNTAsIAorICAgIDQ0LCA0OCwgOTYsIDUsIDIsIDI1MCwgMzksIDI1NSwgMjQsIDQ4LCA5NiwgNSwgMiwgMjE2LCA5MCwgNDgsIDk2LCA1LCAyLCAKKyAgICA1OSwgNTEsIDk2LCA1LCAyLCAyMTYsIDkwLCA1MSwgOTYsIDUsIDIsIDIxOCwgNjYsIDEwNSwgOTYsIDUsIDIsIDg1LCAyMTUsIAorICAgIDIyNiwgMjMwLCAxODcsIDUsIDIsIDI0OSwgMjI4LCA0OCwgMjMwLCAxODcsIDUsIDIsIDU5LCA1MSwgMjMwLCAxODcsIDUsIAorICAgIDIsIDI0NCwgMTgzLCAyNDcsIDEyNiwgMjMwLCAxODcsIDUsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgOTYsIDUsIDIzNiwgNywgCisgICAgNDMsIDE2MywgMjUwLCA0MywgOTYsIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMjEzLCAyNTQsIDE3NywgMjQ5LCAKKyAgICAxMzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyLCA1OSwgNDgsIDIzMCwgODksIDUsIDIsIDIxNCwgMTgzLCAyMjAsIDE1MSwgCisgICAgMjI0LCAxODQsIDIsIDI1MSwgMTgzLCAyNTAsIDcsIDIxOSwgNzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDQzLCAKKyAgICAxNjMsIDI1MCwgNDMsIDIzMCwgODksIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMzcsIDIzMCwgODksIDUsIDIsIAorICAgIDI1MCwgMzksIDI1NSwgMjMsIDIzMCwgODksIDUsIDIzNiwgNywgNTIsIDI1MCwgNDMsIDM3LCAyNDcsIDE3NywgNTAsIDk2LCAKKyAgICA1LCAyMzYsIDcsIDIxNSwgMjI2LCAyMzAsIDE4NywgNSwgMjM2LCA3LCAyMTUsIDIyNiwgMjMwLCA4OSwgNSwgMjM2LCA3LCAKKyAgICAyMTUsIDIyNiwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMjIsIDI0NSwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMTAsIDE2MCwgCisgICAgMTg5LCAyMjMsIDkzLCAyNDksIDIxNywgMjU0LCAxNDIsIDE3NywgMjQ5LCAxNzMsIDIzNSwgMjA2LCAyLCAyNDcsIDEyOCwgCisgICAgMjE0LCAxNzYsIDIsIDIzMCwgMTg3LCA1MCwgMjE0LCAxNzYsIDIsIDIyNiwgMTI3LCAyMzUsIDIwNiwgMiwgMjI2LCAxMjcsIAorICAgIDIzNSwgMjA2LCAyLCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIxNCwgMTc2LCAyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIxNCwgCisgICAgMTc2LCA3MiwgMjM1LCAyMDUsIDIzNSwgMjA2LCA3MiwgMjE0LCAxNzUsIDIxNCwgMTc2LCA3MiwgMjUyLCAxNDksIDcyLCAKKyAgICAyMzUsIDIwNSwgMjM1LCAyMDYsIDcyLCAyNTIsIDE0OSwgNzIsIDIxNCwgMTc1LCAyMTQsIDE3NiwgMjUyLCAzOCwgMjIsIAorICAgIDIzNSwgNzEsIDIsIDIxNCwgMTc1LCAyMzUsIDIwNiwgMjUyLCAzOCwgMjIsIDIzNSwgNzEsIDIsIDIzNSwgMjA1LCAyNTAsIAorICAgIDgsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNSwgMjUwLCA4LCAyMzUsIDIwNiwgMiwgMjIwLCAxMzUsIDUyLCA0MiwgMjM1LCAKKyAgICAyMDUsIDUyLCA0MiwgMjE0LCAxNzUsIDI1MCwgOCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM2LCAyMiwgMjE5LCA3OSwgMjI0LCAKKyAgICAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTksIDQ4LCAyMzIsIDE1MiwgMTc3LCAyLCA1OSwgNDgsIDUyLCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDExMywgMjM1LCAyMDcsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMTEzLCAKKyAgICAyMzUsIDIwNywgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMTksIDg3LCAyMzMsIDkxLCAyMjYsIDE2MiwgMjE5LCA4NywgMjMzLCAKKyAgICA5MSwgMjU0LCAxMjYsIDIzMiwgMTUyLCAxNzcsIDIyNiwgMTI1LCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIzMiwgMTUyLCAyMiwgCisgICAgMiwgMjMwLCAyMjksIDIxOCwgMTQxLCAyMzIsIDE1MiwgMTc3LCAyLCAyMzAsIDIyOSwgMjE4LCAxNDEsIDIzMiwgMTUyLCAKKyAgICAyMiwgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDE3NywgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDIyLCAyLCAKKyAgICA1MiwgMjI2LCAxMjcsIDIzMiwgMTUyLCAyMiwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTIsIDIxNCwgMTgzLCAKKyAgICA0LCAyMTMsIDI1MSwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAxNzcsIDIsIDUyLCAyMjYsIDEyNywgMjMyLCAxNTIsIDE3NywgCisgICAgMiwgNTIsIDIxNCwgMTgzLCAyMTAsIDE2MCwgMTg5LCAyNDcsIDEzNywgMjU0LCA4NywgMjEwLCAxNjAsIDE4OSwgMjIzLCAKKyAgICAxNTEsIDI1NCwgODcsIDI0NSwgMTA2LCA1LCAyLCA1OSwgNTEsIDI0MCwgMTExLCAyLCA1OSwgNDgsIDIxNSwgMjEyLCAyMDMsIAorICAgIDI1MiwgMTQ5LCAyLCA1MiwgNjcsIDkxLCAyMTUsIDIxMiwgMjAzLCAyNTIsIDE0OSwgMiwgMjE1LCAyMTIsIDY3LCA5MSwgCisgICAgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDU5LCA0OCwgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgCisgICAgMjE5LCAxNjQsIDIzMCwgMTg3LCAyMTksIDE2MywgMjQ5LCAyMDcsIDIsIDU5LCA0OCwgMjQ1LCAxMDYsIDIsIDI1MywgMjI0LCAKKyAgICAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCAyLCAyNTAsIDM5LCAyNTUsIDIzLCAyNTQsIDU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIAorICAgIDI0NSwgMTA2LCA1LCA3MiwgOTYsIDUwLCA5NiwgNSwgNzIsIDI0NSwgMTA2LCA1MCwgMjQ1LCAxMDYsIDUsIDcyLCAyMTYsIAorICAgIDkwLCAyMjYsIDE3MSwgNTIsIDI0OSwgMjM1LCAyNDUsIDEwNywgMTEzLCAyNDksIDIwMiwgMjQ1LCAxMDYsIDIxOSwgMTc4LCAKKyAgICAxMzQsIDI0OSwgMjAyLCAyNDUsIDEwNiwgMjE5LCAxNzgsIDI0NSwgMTA2LCA1LCAyLCAxMTMsIDE3MCwgNzIsIDIyLCAxMTMsIAorICAgIDE3MCwgNTEsIDI0NSwgMTAyLCAyLCAyNDQsIDE5LCAxNzAsIDQ4LCAyMzMsIDIxLCAyLCAyNTAsIDQ0LCAyMzUsIDIyMiwgCisgICAgMjQyLCAxMzcsIDIsIDI1MCwgNDQsIDIzNSwgMjIyLCAyMzMsIDIxLCAyLCAyMjQsIDE2LCAxNjQsIDQ4LCAyNDIsIDEzNywgCisgICAgMiwgMjI0LCAxNiwgMTY0LCA0OCwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDExMiwgMjQyLCAxMzcsIDE3NywgMjE5LCAKKyAgICA5OSwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgMjM1LCAyMjIsIDI0MiwgCisgICAgMTM3LCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDIzNSwgMjIyLCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIAorICAgIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyNDIsIDEzNywgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgCisgICAgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA3MiwgMjIyLCAyNTQsIDI0MiwgMTM3LCAxNzcsIAorICAgIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDcyLCAyMzMsIDUyLCAyMzMsIDIxLCAxNzcsIDI1NCwgNTcsIDI0MiwgCisgICAgMTM3LCAxNzcsIDI1NCwgNTcsIDIzMywgMjEsIDIyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MiwgMTM3LCAKKyAgICAyMiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzMsIDIxLCAyMiwgMjI4LCA1NywgMjU0LCA1NywgMjQyLCAxMzcsIAorICAgIDIyLCAyMjgsIDU3LCAyNTQsIDU3LCAyMzMsIDIxLCA3MiwgMjQ2LCAxMTksIDEyOCwgNzIsIDI0MiwgMTM2LCAyNDIsIDEzNywgCisgICAgNzIsIDI0NiwgMTE5LCAxMjgsIDcyLCAyMzMsIDIwLCAyMzMsIDIxLCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIAorICAgIDI0MiwgMTM3LCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIDIzMywgMjEsIDcyLCAyMTksIDE2NCwgNzIsIDI0MiwgCisgICAgMTM2LCAyNDIsIDEzNywgNzIsIDIxOSwgMTY0LCA3MiwgMjMzLCAyMCwgMjMzLCAyMSwgNzIsIDI0MiwgMTM3LCA3MiwgMjQ2LCAKKyAgICAxMTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIzMywgMjEsIDcyLCAyNDYsIDExOSwgMjQ1LCAxMDcsIDIzMywgMjEsIAorICAgIDcyLCAyMTksIDk5LCAxMjgsIDcyLCAyNDIsIDEzNywgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIxOSwgCisgICAgOTksIDEyOCwgNzIsIDIzMywgMjEsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIAorICAgIDIzMywgMjAsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjEsIDIsIDU5LCAyMzUsIDIyMiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM3LCAyLCAKKyAgICA1OSwgMjM1LCAyMjIsIDI0NiwgMTE5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMjQ2LCAxMTksIDEyOCwgMjE2LCAKKyAgICA0MywgMTc3LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAyNDYsIAorICAgIDExOSwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAyMTksIDE2NCwgMTc3LCAyMzMsIDIwLCAyMTksIAorICAgIDE2NCwgMTc3LCAyNDIsIDEzNiwgMjE5LCAxNjQsIDcyLCAyMzMsIDIxLCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTksIDE2NCwgCisgICAgNzIsIDI0MiwgMTM3LCA3MiwgMjQ1LCAxMDYsIDUwLCA1MiwgMjI5LCA5NiwgMjMzLCAyMCwgNTIsIDIyOSwgOTYsIDI0MiwgCisgICAgMTM2LCA1MiwgMjI5LCA5NiwgMjMzLCAyMSwgMiwgMjE0LCAxODMsIDI0MiwgMTM3LCAyMjYsIDEyNSwgMjMzLCAyMCwgMjQyLCAKKyAgICAxMzcsIDI1MiwgMzgsIDIzMywgMjAsIDIzMywgMjEsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDAsIDI0MiwgMTM3LCAyNTAsIAorICAgIDgsIDI1MSwgODYsIDI0OSwgMTAwLCAyMzMsIDIxLCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgCisgICAgMjQ1LCAxMDcsIDI0MiwgMTM3LCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIAorICAgIDIxOSwgODAsIDIxNiwgMjAxLCAyMzMsIDg5LCAyMTYsIDIwMSwgMjE5LCA4MCwgMjE2LCAyMDIsIDE3NywgMTI4LCAxMTIsIAorICAgIDIzMywgODksIDIxNiwgMjAyLCAxNzcsIDEyOCwgMTEyLCAyNDUsIDEwNiwgNSwgMiwgMjUxLCAxMTYsIDQ4LCAyMjQsIDIwNiwgCisgICAgNzIsIDIxOSwgMTU1LCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyMTksIDE1NSwgMjQ1LCAxMDYsIDUwLCAyMjQsIAorICAgIDIwNiwgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAKKyAgICAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyNDUsIDEwNiwgNTAsIDIyNCwgCisgICAgMjA2LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAKKyAgICAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgMjI4LCAKKyAgICA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjI4LCA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCA1MiwgCisgICAgMjI0LCAyMDUsIDUyLCAyMTgsIDU2LCAyMTgsIDY1LCAyLCAyNDcsIDEyOCwgMjE4LCAyMywgMiwgMjQ3LCAxMjgsIDIxOCwgCisgICAgNjUsIDIsIDk2LCA1LCA1MSwgMjE4LCAyMywgMiwgOTYsIDUsIDUxLCAyMTgsIDY1LCAyLCAyMzAsIDg5LCA1LCA1MSwgMjE4LCAKKyAgICAyMywgMiwgMjMwLCA4OSwgNSwgNTEsIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyMTgsIAorICAgIDIzLCA2NCwgMTc3LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjE4LCA2NSwgNjQsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgCisgICAgMjMsIDY0LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDY1LCA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDY1LCA2NCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNjUsIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAxNzEsIDQyLCA0NCwgMjA0LCA5MywgCisgICAgMjI2LCAxNzEsIDI1MCwgOCwgMjE4LCA2NCwgMjUwLCA4LCAyMTgsIDIyLCAyNTAsIDgsIDIxOCwgNjUsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI1MCwgOCwgMjE4LCAyMywgMTc3LCAxMjgsIDExMiwgMjE4LCA2NSwgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDcyLCAKKyAgICAyMTgsIDY0LCAyMTgsIDY1LCA3MiwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDI1MiwgMzgsIAorICAgIDIxOCwgNjQsIDIxOCwgMjMsIDI1MiwgMzgsIDIyLCAyMzUsIDcxLCAyNTEsIDg2LCAyNDgsIDE2NSwgMiwgMjE4LCA2NCwgCisgICAgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjQ2LCAxMTEsIDIyNSwgNTEsIDIsIDIxNywgMTMsIDIxNiwgMTQsIDIxNSwgMjQxLCAKKyAgICAyMzUsIDIwNSwgMjQ0LCAyOSwgMjI4LCA3MCwgMjE5LCAyNTMsIDQzLCAyMTcsIDg4LCAyMTksIDI1MywgMTI0LCAyMTcsIAorICAgIDg4LCAyMTksIDI1MywgMTIwLCAyMTcsIDg4LCAyMjUsIDE3NSwgMiwgMjIyLCA5MywgNjcsIDI1MiwgMTQ5LCAyMTUsIDIxMiwgCisgICAgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDksIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAxNDksIDUyLCA0MywgMjE1LCAKKyAgICA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQzLCAyMTUsIDkzLCAyMDAsIDI0OCwgMTY1LCAyNDMsIDI1MSwgNDMsIDIzMSwgCisgICAgNjgsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUzLCAxMjQsIDIxNywgODksIDIsIDIyNiwgMTI3LCAyMTksIDI1MywgMTIwLCAKKyAgICAyMTcsIDg5LCAyLCAyMTQsIDE4MywgMjE5LCAyNTMsIDEyMCwgMjE3LCA4OSwgNzIsIDIxOSwgMjUzLCAxMjQsIDIxNywgODgsIAorICAgIDUyLCAxMjQsIDIxNywgODgsIDUyLCAxMjAsIDIxNywgODgsIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDIyMywgNTIsIAorICAgIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MywgMiwgMjIzLCA1MiwgMjI5LCAKKyAgICAxMDYsIDIxOSwgOTcsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNDgsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNTEsIAorICAgIDEyNCwgMjE3LCA4OSwgMiwgMjUwLCA0NCwgNTEsIDIyNiwgMTIsIDIsIDIwMywgOTEsIDIyNiwgMTIsIDIsIDIxNiwgOTAsIAorICAgIDIyNiwgMTcxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyNTEsIDI1MiwgMjIzLCA5NCwgMjE1LCAyMTIsIDY3LCAyNTIsIAorICAgIDE0OSwgMiwgMjAzLCA5MSwgMjE1LCAyMTIsIDI0OSwgMjM1LCAyMjYsIDE3MSwgMjE1LCAyMTIsIDIyOSwgOTYsIDIzMywgCisgICAgMjAsIDIxNSwgMjEyLCAyMjksIDk2LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDIzMywgMjEsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI0NiwgMTE5LCAyMTksIDk5LCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjE1LCAyMTIsIDIxOSwgNDksIDI1MSwgCisgICAgMjUyLCAyMjMsIDk0LCAyMzMsIDkxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyMjYsIDE3MSwgNTIsIDIxOSwgNDksIAorICAgIDIyNiwgMTcxLCA3MSwgNjcsIDEzMCwgMjMwLCAyOSwgNzEsIDY3LCAxMzAsIDIyOCwgNjEsIDI0NSwgMjI4LCA3MSwgNzUsIAorICAgIDIyOCwgNjEsIDIxMiwgOSwgNzEsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgNzEsIDc1LCAyMTksIDMwLCAyMTIsIDksIDcxLCAKKyAgICA3NSwgNDMsIDQ0LCA3MSwgNzUsIDE0MCwgODUsIDc1LCAyMTQsIDE1MywgODUsIDc1LCAyNDYsIDExMiwgODUsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODUsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDg1LCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDg1LCA3NSwgCisgICAgMjE5LCAzMCwgMjEyLCA5LCA4NSwgNzUsIDQzLCA0NCwgODUsIDc1LCAxMjAsIDEyNCwgODUsIDc1LCA5NywgODAsIDIsIAorICAgIDIxNiwgNzgsIDI0NiwgMTExLCA5NywgODAsIDIsIDIxNiwgNzgsIDIxNCwgMTUyLCAxNDAsIDgwLCAyLCAyMTYsIDc4LCAKKyAgICAyNDYsIDExMSwgMTQwLCA4MCwgMiwgMjE2LCA3OCwgMjE0LCAxNTIsIDQyLCAyLCAyMTYsIDE1LCAxNjMsIDI1MSwgMjI5LCAKKyAgICA0MiwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDI0OCwgNywgMTYzLCAyNTEsIAorICAgIDIyOSwgNDIsIDIsIDIzMiwgMTE0LCA0MywgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNDgsIDEsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDIxNiwgMTUsIDE2MywgMjUxLCAyMjksIAorICAgIDI0OCwgMSwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDI0NiwgMTI2LCAyMTgsIDIzNiwgODUsIDIzMywgOTEsIDIxOCwgCisgICAgMjM2LCA3MSwgMjMzLCA5MSwgMjE4LCAyMzYsIDg1LCAyMTMsIDE4NywgNCwgMjE4LCAyMzYsIDcxLCAyMTMsIDE4NywgNCwgCisgICAgMjE4LCAyMzYsIDg1LCAyMjUsIDE5MywgNzEsIDIyNSwgMTkzLCA3MSwgMjQxLCAyMDAsIDg1LCAyNDEsIDIwMCwgMjAzLCAKKyAgICA4NSwgMjQxLCAyMDAsIDg1LCAyMzMsIDkxLCAyNTAsIDQzLCA4NSwgMjMxLCA4NywgMjQ4LCAwLCA3MSwgMjMxLCA4NywgCisgICAgMjQ4LCAwLCA4NSwgMjMxLCA4NywgMjMyLCAxMTAsIDcxLCAyMzEsIDg3LCAyMzIsIDExMCwgODUsIDQsIDI0OCwgMCwgODUsIAorICAgIDQsIDIzMiwgMTEwLCA3MSwgNCwgMjMyLCAxMTAsIDg1LCAyMDMsIDI0NSwgMTcyLCA3MSwgMjAzLCAyNDUsIDE3MiwgODUsIAorICAgIDY3LCAyNDUsIDE3MiwgNzEsIDY3LCAyNDUsIDE3MiwgNDMsIDgwLCAyLCA0LCAyNTAsIDQzLCAxMzQsIDE0MCwgMjUzLCAKKyAgICAyNTUsIDQzLCA4MCwgMiwgMzcsIDIyNSwgMjUsIDIwMCwgMTQwLCAyMTgsIDIzMiwgNzUsIDE0MCwgMjE1LCA1OCwgODAsIDIsIAorICAgIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgCisgICAgMTQwLCAyMTUsIDU4LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDgwLCAyLCAyNDYsIDEyNiwgMjE4LCAxNDEsIAorICAgIDE0MCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCAKKyAgICAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCAxNDAsIAorICAgIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDgwLCAyMTYsIDE0MCwgMjExLCAxNzgsIDIxMiwgCisgICAgMzYsIDgwLCAyMjUsIDEwLCAyNDcsIDIwMywgMjMzLCA1MiwgMjQ1LCAxMDYsIDUsIDcyLCAxNDAsIDc1LCAyMjMsIDUzLCAKKyAgICAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyMjMsIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIAorICAgIDk3LCA4MCwgMjE2LCAxNDAsIDI0MiwgMTM2LCA5NywgODAsIDIxNiwgMTQwLCAyMTgsIDIyLCAxNDAsIDIyNCwgMjcsIDc1LCAKKyAgICA5NywgMjI0LCAyNywgNzUsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgOTcsIDc1LCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDI1NCwgCisgICAgMTU2LCAxMjgsIDExMiwgMTQwLCA4MCwgNzIsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyMTYsIDkwLCAyMjYsIDE3MSwgNzEsIDIzMSwgODcsIDIxOCwgMTU4LCA4NSwgNCwgMjE4LCAxNTgsIDcxLCA0LCAKKyAgICAyMTgsIDE1OCwgODUsIDIyMiwgMjUwLCAyMjUsIDE5MywgNzEsIDIyMiwgMjUwLCAyMjUsIDE5MywgMTE0LCAyMzMsIDkxLCAKKyAgICAyNTAsIDQzLCAxMTQsIDIyNiwgMTI4LCAyLCAyMjYsIDEyOCwgMjM1LCAyMjIsIDExNCwgMjUwLCA0NCwgMiwgMjUwLCA0NCwgCisgICAgMjM1LCAyMjIsIDExNCwgMjUwLCA0MywgMTE0LCAzNywgMjIyLCAwLCAxNDUsIDYsIDEsIDI1MywgMTY3LCAxNDUsIDYsIDEsIAorICAgIDI1MSwgMTI1LCAxNDUsIDYsIDEsIDIxMywgMjUzLCAxNDUsIDYsIDEsIDI0MiwgMTkyLCAxNDUsIDYsIDEsIDI0NywgMTQ4LCAKKyAgICAxNDUsIDYsIDEsIDIxMSwgMjEsIDE0NSwgNiwgMSwgMjEwLCA2OCwgMTQ1LCA2LCAxLCAyNDYsIDQyLCAxNDUsIDYsIDEsIAorICAgIDIxMCwgOTEsIDE0NSwgNiwgMSwgMjM1LCAxNTQsIDE0NSwgNiwgMSwgNjUsIDIzNSwgMTU0LCAxNDUsIDYsIDEsIDc0LCAKKyAgICAxNDUsIDYsIDEsIDI0NywgMTY4LCAxNDUsIDYsIDEsIDIzNCwgMjQ2LCAxNDUsIDYsIDEsIDIzMiwgMTkyLCAxNDUsIDYsIDEsIAorICAgIDIzMCwgMzQsIDE0NSwgNiwgMSwgMjI5LCAxOTYsIDE0NSwgNiwgMSwgMjI2LCAxODksIDE0NSwgNiwgMSwgMjI1LCA3LCAKKyAgICAxNDUsIDYsIDEsIDIyMiwgMjMwLCAxNDUsIDYsIDEsIDIxOSwgODUsIDE0NSwgNiwgMSwgMjE1LCA4MSwgMTQ1LCA2LCAxLCAKKyAgICAyMTQsIDIwMSwgMTQ1LCA2LCAxLCAyNDMsIDI1NCwgMTQ1LCA2LCAxLCAyNDEsIDIwNiwgMTQ1LCA2LCAxLCAyMjYsIDEzOSwgCisgICAgMTQ1LCA2LCAxLCAyMjUsIDIyNCwgMTQ1LCA2LCAxLCAyMTksIDIzMCwgMTQ1LCA2LCAxLCAyMTUsIDE2OCwgMTQ1LCA2LCAxLCAKKyAgICAyNTAsIDgzLCAxNDUsIDYsIDEsIDIyMCwgMTA0LCAxNDUsIDYsIDEsIDIxMSwgMjcsIDE0NSwgNiwgMSwgMjExLCAyOSwgCisgICAgMTQ1LCA2LCAxLCAyMTEsIDU3LCAxNDUsIDYsIDEsIDIxOCwgMjU1LCAxNjIsIDE0NSwgNiwgMSwgMjEwLCAyMTIsIDE0NSwgCisgICAgNiwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzgsIDE0NSwgNiwgMSwgMjEwLCAKKyAgICAyNDQsIDE0NSwgNiwgMSwgMjM1LCAxOTEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgCisgICAgNiwgMSwgMjM1LCAxOTEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjQ0LCA5MCwgMTQ1LCA2LCAxLCAyMzUsIAorICAgIDE1MiwgMTQ1LCA2LCAxLCAyMTksIDIyOSwgMTQ1LCA2LCAxLCAyMTUsIDIwMywgNjEsIDE0NSwgNiwgMSwgMjMzLCA4MSwgCisgICAgMjMwLCAzNCwgMTQ1LCA0LCAxLCAyNTMsIDE2NywgMTQ1LCA0LCAxLCAyNTEsIDEyNSwgMTQ1LCA0LCAxLCAyMTMsIDI1MywgCisgICAgMTQ1LCA0LCAxLCAyNDIsIDE5MiwgMTQ1LCA0LCAxLCAyNDcsIDE0OCwgMTQ1LCA0LCAxLCAyMTEsIDIxLCAxNDUsIDQsIDEsIAorICAgIDIxMCwgNjgsIDE0NSwgNCwgMSwgMjQ2LCA0MiwgMTQ1LCA0LCAxLCAyMTAsIDkxLCAxNDUsIDQsIDEsIDIzNSwgMTU0LCAKKyAgICAxNDUsIDQsIDEsIDY1LCAyMzUsIDE1NCwgMTQ1LCA0LCAxLCA3NCwgMTQ1LCA0LCAxLCAyNDcsIDE2OCwgMTQ1LCA0LCAxLCAKKyAgICAyMzQsIDI0NiwgMTQ1LCA0LCAxLCAyMzIsIDE5MiwgMTQ1LCA0LCAxLCAyMzAsIDM0LCAxNDUsIDQsIDEsIDIyOSwgMTk2LCAKKyAgICAxNDUsIDQsIDEsIDIyNiwgMTg5LCAxNDUsIDQsIDEsIDIyNSwgNywgMTQ1LCA0LCAxLCAyMjIsIDIzMCwgMTQ1LCA0LCAxLCAKKyAgICAyMTksIDg1LCAxNDUsIDQsIDEsIDIxNSwgODEsIDE0NSwgNCwgMSwgMjE0LCAyMDEsIDE0NSwgNCwgMSwgMjQzLCAyNTQsIAorICAgIDE0NSwgNCwgMSwgMjQxLCAyMDYsIDE0NSwgNCwgMSwgMjI2LCAxMzksIDE0NSwgNCwgMSwgMjI1LCAyMjQsIDE0NSwgNCwgMSwgCisgICAgMjE5LCAyMzAsIDE0NSwgNCwgMSwgMjE1LCAxNjgsIDE0NSwgNCwgMSwgMjUwLCA4MywgMTQ1LCA0LCAxLCAyMjAsIDEwNCwgCisgICAgMTQ1LCA0LCAxLCAyMTEsIDI3LCAxNDUsIDQsIDEsIDIxMSwgMjksIDE0NSwgNCwgMSwgMjExLCA1NywgMTQ1LCA0LCAxLCAKKyAgICAyMTgsIDI1NSwgMTYyLCAxNDUsIDQsIDEsIDIxMCwgMjEyLCAxNDUsIDQsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDQsIAorICAgIDIxMCwgMTg0LCAyLCAyMTcsIDc4LCAxNDUsIDQsIDEsIDIxMCwgMjQ0LCAxNDUsIDQsIDEsIDIzNSwgMTkxLCA0LCAyMTAsIAorICAgIDE4MywgMTQ1LCA0LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDIzNSwgMTkxLCAyNTIsIDEsIDIxMCwgMTgzLCAKKyAgICAxNDUsIDQsIDEsIDI0NCwgOTAsIDE0NSwgNCwgMSwgMjM1LCAxNTIsIDE0NSwgNCwgMSwgMjE5LCAyMjksIDE0NSwgNCwgMSwgCisgICAgMjE1LCAyMDMsIDYxLCAxNDUsIDQsIDEsIDIzMywgODEsIDIzMCwgMzQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA1MiwgMTMwLCAKKyAgICA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTIsIDEzMCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDYsIAorICAgIDEsIDIyNiwgMTEwLCAyLCA5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDExNiwgMiwgOTEsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyNDgsIDQ3LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgNDcsIDcsIAorICAgIDYsIDEsIDI1NCwgMTUxLCA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDYsIDEsIDIxNSwgOTQsIDYxLCA3LCA2LCAxLCAKKyAgICAyMTUsIDk0LCAyNTQsIDE1MSwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDQ0LCAxMDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIAorICAgIDEwMywgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ5LCAxMDgsIDcsIDYsIDEsIAorICAgIDE2MywgMjQyLCA2NywgNywgNCwgMSwgMTYzLCAyNDIsIDY3LCA3LCA0LCAxLCAyMTcsIDc2LCAyMjUsIDEzNiwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyMjgsIDU1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMTQ0LCAyLCAKKyAgICAxMjEsIDIyMiwgMjM3LCAyMzUsIDIyMiwgNywgMSwgNCwgNiwgMjE1LCA5NCwgNzYsIDcsIDIxOCwgNjYsIDQsIDEsIDIzNSwgCisgICAgMTUwLCA1OCwgMSwgNiwgMjE0LCAxMDUsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA3LCA2LCAxLCAKKyAgICAyMTAsIDE2MCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDgxLCA2LCAxLCAyNTQsIDE3MywgODEsIDQsIDEsIDI1NCwgMTczLCAKKyAgICA4MSwgNiwgMSwgMjEzLCAxNzMsIDgxLCA0LCAxLCAyMTMsIDE3MywgODEsIDYsIDEsIDI0MywgMTE0LCA4MSwgNCwgMSwgCisgICAgMjQzLCAxMTQsIDgxLCA2LCAxLCAyNDgsIDE5OSwgODEsIDQsIDEsIDI0OCwgMTk5LCA4MSwgNiwgMSwgMjQ1LCAyMDIsIDgxLCAKKyAgICA0LCAxLCAyNDUsIDIwMiwgODEsIDYsIDEsIDIxOSwgMzUsIDgxLCA0LCAxLCAyMTksIDM1LCA4MSwgNiwgMSwgMjEwLCAxMDEsIAorICAgIDgxLCA0LCAxLCAyMTAsIDEwMSwgODEsIDYsIDEsIDI0MSwgMjU1LCA4MSwgNCwgMSwgMjQxLCAyNTUsIDgxLCA2LCAxLCAKKyAgICAyMTYsIDE3OCwgODEsIDQsIDEsIDIxNiwgMTc4LCA4MSwgNiwgMSwgMjQwLCAxMjMsIDgxLCA0LCAxLCAyNDAsIDEyMywgODEsIAorICAgIDYsIDEsIDIzNCwgMjMzLCA4MSwgNCwgMSwgMjM0LCAyMzMsIDgxLCA2LCAxLCAyMzMsIDc4LCA4MSwgNCwgMSwgMjMzLCA3OCwgCisgICAgODEsIDYsIDEsIDIzMCwgMjM1LCA4MSwgNCwgMSwgMjMwLCAyMzUsIDgxLCA2LCAxLCAyMjgsIDIzOCwgODEsIDQsIDEsIAorICAgIDIyOCwgMjM4LCA4MSwgNiwgMSwgMjMzLCAyMzksIDgxLCA0LCAxLCAyMzMsIDIzOSwgODEsIDYsIDEsIDc4LCA4MSwgNCwgMSwgCisgICAgNzgsIDgxLCA2LCAxLCAyMjUsIDExMSwgODEsIDQsIDEsIDIyNSwgMTExLCA4MSwgNiwgMSwgMjIyLCAyMTMsIDgxLCA0LCAxLCAKKyAgICAyMjIsIDIxMywgODEsIDYsIDEsIDIxOSwgMTY3LCA4MSwgNCwgMSwgMjE5LCAxNjcsIDgxLCA2LCAxLCAyMTcsIDQyLCA4MSwgCisgICAgNCwgMSwgMjE3LCA0MiwgODEsIDYsIDEsIDIxNCwgMjI5LCA4MSwgNCwgMSwgMjE0LCAyMjksIDgxLCA2LCAxLCAyNDQsIAorICAgIDEyOSwgODEsIDQsIDEsIDI0NCwgMTI5LCA4MSwgNiwgMSwgMjM0LCAxMTgsIDgxLCA0LCAxLCAyMzQsIDExOCwgODEsIDYsIAorICAgIDEsIDIyNCwgMTY0LCA4MSwgNCwgMSwgMjI0LCAxNjQsIDgxLCA2LCAxLCAyMjYsIDE4MiwgODEsIDQsIDEsIDIyNiwgMTgyLCAKKyAgICA4MSwgNiwgMSwgMjQ4LCA1LCAyNTQsIDE3OSwgODEsIDQsIDEsIDI0OCwgNSwgMjU0LCAxNzksIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI1NCwgMjA1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDIwNSwgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIAorICAgIDQsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIDYsIDEsIDI0OCwgNSwgMjM0LCAyMzMsIDgxLCA0LCAxLCAyNDgsIDUsIAorICAgIDIzNCwgMjMzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyMjgsIDIzOCwgODEsIDQsIDEsIDI0OCwgNSwgMjI4LCAyMzgsIDgxLCA2LCAKKyAgICAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA0LCAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDIyNiwgMTgyLCA4MSwgNCwgMSwgNTUsIDgxLCAyMjYsIDE4MiwgODEsIDYsIDEsIDIyMSwgMjQ4LCA4MSwgNCwgMSwgMjIxLCAKKyAgICAyNDgsIDgxLCA2LCAxLCAyNDksIDEzNiwgMjIwLCA1NywgODEsIDQsIDEsIDI0OSwgMTM2LCAyMjAsIDU3LCA4MSwgNiwgMSwgCisgICAgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDUsIDgzLCAKKyAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDUsIDgzLCA4MSwgNiwgMSwgMjU0LCAxOTEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgMjU0LCAKKyAgICAxOTEsIDIzNCwgMTIzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgCisgICAgNiwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNiwgMSwgNTUsIDgxLCAxNjIsIAorICAgIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTU0LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE1NCwgMTYyLCAKKyAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMjQsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI0MiwgMiwgODEsIDQsIDEsIDU1LCA4MSwgMjQyLCAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDMsIDEwOSwgODEsIDQsIDEsIAorICAgIDU1LCA4MSwgMjQzLCAxMDksIDgxLCA2LCAxLCA1NSwgODEsIDI0NywgMTcxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDcsIDE3MSwgCisgICAgODEsIDYsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIAorICAgIDIxMiwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgCisgICAgMjI5LCAzMiwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjI5LCAzMiwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgMjI3LCAKKyAgICAxNTIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyNywgMTUyLCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCAKKyAgICA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCA4MSwgMTYsIDIzNCwgMjUyLCA4MSwgMTYsIDIzMCwgMjM2LCAyMjIsIAorICAgIDIxMywgODEsIDE2LCAyMjUsIDExMiwgMjIyLCAyMTMsIDgxLCAxNiwgMjE4LCAxNDksIDgxLCAxNiwgMjE3LCA0MywgMjIyLCAKKyAgICAyMTMsIDgxLCAxNiwgMjM0LCAxMTksIDIyMiwgMjEzLCA4MSwgMTYsIDIyMCwgMjUsIDIxOSwgMTY3LCA4MSwgNiwgMSwgCisgICAgMjQ5LCAxMjMsIDIyMCwgNTcsIDgxLCA0LCAxLCAyNDksIDEyMywgMjIwLCA1NywgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDMsIAorICAgIDEwOSwgODEsIDQsIDEsIDI0OSwgMTIzLCAyNDMsIDEwOSwgODEsIDM4LCAyMjgsIDIzOSwgNDgsIDgxLCAzOCwgMjE4LCAKKyAgICAyNDksIDI1MywgMjMyLCA4MSwgMzgsIDIxOCwgMjQ5LCAyMzMsIDI3LCA4MSwgNiwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCAKKyAgICA4MSwgNCwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCA4MSwgNTUsIDIyNywgMjEyLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAKKyAgICA1NSwgMjI3LCAyMTIsIDI0NywgMjA1LCAyMjQsIDE2LCA3OSwgODEsIDU1LCAyMjcsIDIxMiwgMjM1LCAyNDQsIDIyNCwgMTYsIAorICAgIDc5LCA4MSwgNTUsIDIyNywgMjEyLCAyMTMsIDI0MSwgMjQ3LCAxODAsIDgxLCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDgxLCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAyMzAsIDEyOSwgMjQ3LCAxODAsIDk4LCA0LCAxLCAyNTQsIDEzMSwgOTgsIDQsIDEsIAorICAgIDI1MiwgMTYwLCA5OCwgNCwgMSwgMjQzLCAxMTMsIDk4LCA0LCAxLCAyNDcsIDEzNiwgOTgsIDQsIDEsIDI0NSwgMTU4LCA5OCwgCisgICAgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MSwgOTgsIDQsIDEsIDIzNiwgNiwgCisgICAgOTgsIDQsIDEsIDIzNCwgMjQwLCA5OCwgNCwgMSwgMjMzLCA4NywgOTgsIDQsIDEsIDIzMSwgMTkwLCA5OCwgNCwgMSwgMjI5LCAKKyAgICAyMDAsIDk4LCA0LCAxLCAyMjYsIDIwMCwgOTgsIDQsIDEsIDIyNiwgMjEsIDk4LCA0LCAxLCAyMTAsIDc4LCA5OCwgNCwgMSwgCisgICAgMjIzLCAxNzQsIDk4LCA0LCAxLCAyMjEsIDI0NSwgOTgsIDQsIDEsIDIxNywgNTEsIDk4LCA0LCAxLCAyMTQsIDE5MCwgOTgsIAorICAgIDQsIDEsIDIyNSwgMTQzLCA5OCwgNCwgMSwgMjM0LCAxMjcsIDk4LCA0LCAxLCAyNDIsIDI0OCwgOTgsIDQsIDEsIDIyNCwgCisgICAgNzYsIDk4LCA0LCAxLCAyMjAsIDIyLCA5OCwgNCwgMSwgMjUwLCAxMDUsIDk4LCA0LCAxLCAyNTEsIDE1LCA5OCwgNCwgMSwgCisgICAgMjM1LCAxMDYsIDk4LCA0LCAxLCAyNTAsIDQ4LCA5OCwgNCwgMSwgMjUwLCAxNTEsIDk4LCA0LCAxLCAyMTEsIDE2MywgOTgsIAorICAgIDQsIDEsIDIzNSwgMTE3LCA5OCwgNCwgMSwgMjQyLCA1MCwgOTgsIDQsIDEsIDI0MSwgMjQ1LCA5OCwgNCwgMSwgMjQxLCAKKyAgICAxODIsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCAxMSwgOTgsIDQsIDEsIDI0MSwgNzIsIDk4LCA0LCAxLCAKKyAgICAyMTAsIDI0NiwgOTgsIDQsIDEsIDI1NCwgMjQxLCAyMTYsIDEwOSwgMSwgMTkyLCAyMTYsIDEwOSwgMSwgMjExLCA5OSwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgOTgsIDIxNiwgMTA5LCAxLCAyMTEsIDg4LCAyMTYsIDEwOSwgMSwgMjExLCA4NiwgMjE2LCAKKyAgICAxMDksIDEsIDI1MiwgNDAsIDI1NSwgMjUsIDIxMSwgODEsIDIxNiwgMTA5LCAxLCAyMTEsIDgxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA5NiwgMjE2LCAxMDksIDEsIDIxMSwgOTMsIDIxNiwgMTA5LCAxLCAyMTEsIDk1LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA5NCwgMjE2LCAxMDksIDEsIDIxMSwgMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDkwLCAyMTYsIDEwOSwgMSwgMjExLCA3OSwgCisgICAgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDc5LCAyMTYsIDEwOSwgMSwgMjExLCA3NiwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyNTIsIDQwLCAyNTUsIDI1LCAyMTEsIDg0LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyMTEsIDgzLCAyMTYsIDEwOSwgMSwgMjExLCAxMDMsIDIxNiwgMTA5LCAxLCAyMTEsIDc3LCAKKyAgICAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNzcsIDIxNiwgMTA5LCAxLCAyMTEsIDY2LCAyMTYsIDEwOSwgMSwgMjE1LCAKKyAgICAxMTYsIDIxMSwgNjYsIDIxNiwgMTA5LCAxLCAyMTEsIDgsIDIxNiwgMTA5LCAxLCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgCisgICAgMjU0LCAyMTYsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA0OSwgMjE2LCAxMDksIDEsIDIxMSwgNzUsIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDc0LCAyMTYsIDEwOSwgMSwgMjExLCA3MSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIAorICAgIDg1LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNjksIDIxNiwgMTA5LCAxLCAyMTEsIDY3LCAyMTYsIDEwOSwgMSwgCisgICAgMjEwLCAyMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDY0LCAyMTYsIDEwOSwgMSwgMjExLCA2MywgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODcsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA4NywgMjE2LCAxMDksIDEsIDI1MywgMTcxLCAyMTEsIDg3LCAyMTYsIAorICAgIDEwOSwgMSwgMjExLCA2MiwgMjE2LCAxMDksIDEsIDIxMSwgNjAsIDIxNiwgMTA5LCAxLCAyMTEsIDYxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA1OSwgMjE2LCAxMDksIDEsIDIxMSwgNTgsIDIxNiwgMTA5LCAxLCAyMTEsIDk3LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA1NiwgMjE2LCAxMDksIDEsIDIxMSwgNTQsIDIxNiwgMTA5LCAxLCAyMTEsIDUzLCAyMTYsIDEwOSwgMSwgMjExLCA1MiwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgNTAsIDIxNiwgMTA5LCAxLCAyMTcsIDM1LCAyMTEsIDUwLCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA0OCwgMjE2LCAxMDksIDEsIDIxMSwgNDcsIDIxNiwgMTA5LCAxLCAyMTAsIDI0NCwgMjE2LCAxMDksIDU4LCAxLCAyMzMsIAorICAgIDEzMiwgNzksIDIxNiwgMTA5LCAyMjAsIDE0MCwgNzksIDIxNiwgMTA5LCAxMTcsIDIzNSwgNjksIDI5LCAzLCAyMzIsIDE2MSwgCisgICAgMjksIDMsIDIzMCwgMTY1LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMTksIDU5LCAyOSwgMywgMjIwLCA4LCAyOSwgMywgCisgICAgMjUxLCAyMTIsIDI5LCAzLCAyMTYsIDQyLCAyOSwgMywgMjQ5LCAyNDUsIDI5LCAzLCAyMjgsIDc3LCAyOSwgMywgMjI3LCAKKyAgICAxMzcsIDI5LCAzLCAyNDIsIDE4NywgMjI3LCA0LCAyOSwgMywgMjEwLCAyMiwgMjksIDMsIDI0NywgMTUxLCAyOSwgMywgCisgICAgMjQ4LCAxMTIsIDI5LCAzLCAyMzUsIDczLCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyNTAsIDkzLCAyOSwgMywgMjI1LCAKKyAgICAxMjMsIDI5LCAzLCAyMjUsIDE4LCAyOSwgMywgMjQzLCA2LCAyOSwgMywgMjQzLCAyLCAyOSwgMywgMjQzLCAzLCAyOSwgMywgCisgICAgMjQzLCA0LCAyOSwgMywgMjE4LCAyMjUsIDI5LCAzLCAyMTgsIDE4MSwgMjksIDMsIDIxOCwgMTk0LCAyOSwgMywgMjE4LCAKKyAgICAyMjQsIDI5LCAzLCAyMTgsIDE5OCwgMjksIDMsIDIxOCwgMTk5LCAyOSwgMywgMjE4LCAxODYsIDI5LCAzLCAyNTAsIDIyMSwgCisgICAgMjksIDMsIDI1MCwgMjAwLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDIyMCwgMjksIDMsIDI1MCwgMjE4LCAyOSwgCisgICAgMywgMjUwLCAyMTksIDI5LCAzLCAyNTAsIDIwMSwgMjksIDMsIDIwOSwgMjQzLCAyOSwgMywgMjA5LCAyMjEsIDI5LCAzLCAKKyAgICAyMDksIDIzNCwgMjksIDMsIDIwOSwgMjQyLCAyOSwgMywgMjA5LCAyMzcsIDI5LCAzLCAyMDksIDIzOCwgMjksIDMsIDIwOSwgCisgICAgMjI2LCAyOSwgMywgMjUwLCAyMTYsIDI5LCAzLCAyNTAsIDIwMywgMjksIDMsIDI1MCwgMjA1LCAyOSwgMywgMjUwLCAyMTUsIAorICAgIDI5LCAzLCAyNTAsIDIxMywgMjksIDMsIDI1MCwgMjE0LCAyOSwgMywgMjUwLCAyMDQsIDI5LCAzLCAyMjMsIDIzOSwgMjksIAorICAgIDMsIDIyMywgMjI5LCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjM2LCAyOSwgMywgCisgICAgMjIzLCAyMzcsIDI5LCAzLCAyMjMsIDIzNCwgMjksIDMsIDIzMywgMTY1LCAyOSwgMywgMjMzLCAxNTcsIDI5LCAzLCAyMzMsIAorICAgIDE2MCwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjEsIDI5LCAzLCAyMzMsIDE2MiwgMjksIDMsIDIzMywgMTU4LCAKKyAgICAyOSwgMywgMjExLCAxMzAsIDI5LCAzLCAyMTEsIDEyMCwgMjksIDMsIDIxMSwgMTI2LCAyOSwgMywgMjExLCAxMjksIDI5LCAKKyAgICAzLCAyMTEsIDEyNywgMjksIDMsIDIxMSwgMTI4LCAyOSwgMywgMjExLCAxMjUsIDI5LCAzLCAyNDIsIDc4LCAyOSwgMywgCisgICAgMjQyLCA2OSwgMjksIDMsIDI0MiwgNzIsIDI5LCAzLCAyNDIsIDc3LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzUsIAorICAgIDI5LCAzLCAyNDIsIDcxLCAzOCwgMzMsIDEsIDI1MiwgODMsIDM4LCAzMywgMSwgMjEzLCAyNTUsIDM4LCAzMywgMSwgMjQyLCAKKyAgICAyNDMsIDM4LCAzMywgMSwgMjQ4LCA5OCwgMzgsIDMzLCAxLCAyMTAsIDc0LCAzOCwgMzMsIDEsIDIxMCwgOTQsIDM4LCAzMywgCisgICAgMSwgMTc2LCAzOCwgMzMsIDEsIDI0NSwgMTgyLCAzOCwgMzMsIDEsIDI0NSwgMTY3LCAzOCwgMzMsIDEsIDI0NSwgMTU4LCAKKyAgICAzOCwgMzMsIDEsIDc4LCAzOCwgMzMsIDEsIDIyNSwgMjI0LCAzOCwgMzMsIDEsIDI0NSwgMTAwLCAzOCwgMzMsIDEsIDI0NSwgCisgICAgOTAsIDM4LCAzMywgMSwgMjE3LCAyMywgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzksIDM4LCAzMywgMSwgCisgICAgMjUwLCAxMzksIDM4LCAzMywgMSwgMjIwLCAxMDQsIDM4LCAzMywgMSwgMjIwLCA2NywgMzgsIDMzLCAxLCAyNDQsIDkwLCAKKyAgICAzOCwgMzMsIDEsIDI0NSwgODksIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2NywgMzgsIDMzLCAxLCAyNDcsIAorICAgIDE2OSwgMzgsIDMzLCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAorICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE5MCwgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAorICAgIDI1MiwgMSwgMjEwLCAxODMsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAxODMsIDQ0LCAyNTQsIDExOCwgCisgICAgMjE4LCA2MSwgMjMxLCAxNTksIDQ0LCAyNTQsIDExOCwgMjQ2LCAxMjYsIDIxOCwgNjEsIDIzMSwgMTU5LCA0MywgMjE4LCAKKyAgICA2MSwgMTI3LCA0NCwgMjE4LCA2MSwgMTI3LCA0MywgMjQ2LCAxMjYsIDIxOCwgNjEsIDEyNywgNDQsIDI0NiwgMTI2LCAyMTgsIAorICAgIDYxLCAxMjcsIDIyMywgMTYwLCAyMzUsIDIwOSwgMjMxLCAxNTksIDIyMywgMTYwLCAyNDYsIDEyNiwgMjM1LCAyMDksIDIzMSwgCisgICAgMTU5LCAyNDYsIDEyNiwgMjE1LCAyNDIsIDIzMSwgMTU5LCA0MywgMjE1LCAyNDIsIDEyNywgNDQsIDIxNSwgMjQyLCAxMjcsIAorICAgIDIyMywgMTYwLCAyMTgsIDIzNiwgNDMsIDIyMywgMTYwLCAyMjYsIDIwMiwgMTI3LCA0NCwgMjIzLCAxNjAsIDIyNiwgMjAyLCAKKyAgICAxMjcsIDI0NSwgMjE4LCAyNDksIDE2NiwgMjI2LCAxNywgMjQ0LCAzMCwgMjI2LCAxNywgMjIzLCA1MiwgMjQ0LCAzMCwgCisgICAgMjI2LCAxNywgMjQwLCAxNzIsIDI0NiwgMTI2LCAyMjYsIDI1NSwgMjQ2LCAxMTIsIDI1NCwgMTI3LCAyMTQsIDE1MywgMjU0LCAKKyAgICAxMjcsIDI0NiwgMTI2LCAyMjIsIDI1MCwgMjU0LCAxMTcsIDUyLCAyMjYsIDI1MiwgMjQwLCAxNzUsIDIzNSwgMjAwLCAyMzUsIAorICAgIDIwOCwgMjI2LCA2MywgMjUxLCAxNjIsIDI0MCwgMTc2LCAyLCAyNDgsIDksIDIxNiwgOTAsIDIsIDIyMiwgMjM3LCA0OCwgCisgICAgNDMsIDEyMSwgMjI2LCA5LCAxMjcsIDQ0LCAxMjEsIDIyNiwgOSwgMTI3LCAyMTYsIDkwLCAyLCA1OSwgNDgsIDIxNiwgOTAsIAorICAgIDIsIDU5LCA1MSwgNDMsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgNDQsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgCisgICAgMjE2LCAxNSwgNDMsIDE2MywgMTI3LCAyMTYsIDE1LCA0NCwgMTYzLCAxMjcsIDI1MSwgMTgzLCA0MywgMTYzLCAxMjcsIAorICAgIDI1MSwgMTgzLCA0NCwgMTYzLCAxMjcsIDQzLCAyMTksIDE4OSwgMTA0LCAxMjcsIDQ0LCAyMTksIDE4OSwgMTA0LCAxMjcsIAorICAgIDQzLCA1MiwgMjI2LCA3LCA0NCwgNTIsIDIyNiwgNywgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDEyMywgCisgICAgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgMTQzLCA5MiwgMjQ0LCAxOSwgNTksIDIyNCwgMTQzLCAyNDQsIDg5LCA1OSwgNzksIAorICAgIDIyMywgNTIsIDIyNCwgMTYsIDc5LCA2NywgMTg0LCAyMjIsIDIzNywgMjI1LCAxMywgMjExLCAyMDksIDIyMCwgMTQwLCAKKyAgICAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIxNSwgOTQsIDI0OSwgMjI3LCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDIyMywgMTYwLCAyNDksIAorICAgIDIyNywgMjE1LCA5NCwgMjIwLCAxNTIsIDI0OCwgMjE0LCAyLCA0MywgMjQyLCAxMTUsIDI0OCwgMjE0LCAyLCA0NCwgMjQyLCAKKyAgICAxMTUsIDIxNSwgOTQsIDI0OCwgMjEzLCAyMTYsIDE1LCAxNjMsIDIyMSwgMTc1LCA1MCwgMjE1LCA1OSwgMjQ4LCAxNjQsIAorICAgIDIxNiwgMTQ0LCAyNDgsIDE2NCwgMTAsIDM0LCAyMjMsIDc5LCAxMCwgMzQsIDI1MCwgMTgsIDEwLCAzNCwgMjIxLCAxNzgsIAorICAgIDExMSwgMTAsIDM0LCAyMjEsIDE3OCwgMTA1LCAxMCwgMzQsIDIyMSwgMTc4LCAxNTgsIDEwLCAzNCwgMjI1LCAxNzAsIDEwLCAKKyAgICAzNCwgMjUxLCAxNzEsIDEwLCAzNCwgMjE3LCA5MywgMTAsIDM0LCAyMzQsIDM5LCAxMTEsIDEwLCAzNCwgMjM0LCAzOSwgCisgICAgMTA1LCAxMCwgMzQsIDI0NywgMTc4LCAxMCwgMzQsIDIyMSwgMTgxLCAxMCwgMzQsIDQsIDExMSwgMTAsIDM0LCA0LCAxMDUsIAorICAgIDEwLCAzNCwgMjMzLCAxMDMsIDExMSwgMTAsIDM0LCAyMzMsIDEwMywgMTA1LCAxMCwgMzQsIDIzMywgMTAzLCAxNTgsIDEwLCAKKyAgICAzNCwgMjMzLCAxMDMsIDE2MSwgMTAsIDM0LCAyMTksIDcwLCAxMCwgMzQsIDIxNiwgMTQ2LCAxMCwgMzQsIDIxOSwgNjgsIAorICAgIDExMSwgMTAsIDM0LCAyMTksIDY4LCAxMDUsIDEwLCAzNCwgMjQxLCAyMzUsIDExMSwgMTAsIDM0LCAyNDEsIDIzNSwgMTA1LCAKKyAgICAxMCwgMzQsIDI0MiwgMjIsIDEwLCAzNCwgMjIzLCAxNTAsIDEwLCAzNCwgMjUwLCA5MCwgMTAsIDM0LCAyMTgsIDM4LCAxMCwgCisgICAgMzQsIDIzMCwgMTMzLCAxMCwgMzQsIDI0OCwgOTYsIDEwLCAzNCwgMjMwLCAxMjUsIDEwLCAzNCwgMjUwLCAzMywgMTAsIDM0LCAKKyAgICAyMTIsIDQxLCAxMTEsIDEwLCAzNCwgMjEyLCA0MSwgMTA1LCAxMCwgMzQsIDI0NCwgMTA0LCAxMCwgMzQsIDIyNSwgMjM2LCAKKyAgICAxMTEsIDEwLCAzNCwgMjI1LCAyMzYsIDEwNSwgMTAsIDM0LCAyMTksIDE2MiwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIAorICAgIDEwLCAzNCwgMjQ5LCAxNTMsIDEwLCAzNCwgMjQ3LCAxNDQsIDEwLCAzNCwgMjM1LCAxNDMsIDEwLCAzNCwgMjUxLCAyMDYsIAorICAgIDY0LCAyNTAsIDIsIDEwLCAzNCwgMjQ1LCAyMywgMTAsIDM0LCAyMTgsIDI1MSwgMTExLCAxMCwgMzQsIDIxOCwgMjUxLCAKKyAgICAxMDUsIDEwLCAzNCwgMjUyLCAxNjIsIDEwLCAzNCwgMjE5LCAxNjksIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCAxNjksIDEwLCAKKyAgICAzNCwgMjI5LCA5NSwgMTExLCAxMCwgMzQsIDIyOSwgOTUsIDEwNSwgMTAsIDM0LCAyMjksIDk1LCAxNTgsIDEwLCAzNCwgCisgICAgMjI5LCA5NSwgMTYxLCAxMCwgMzQsIDIzMSwgNTEsIDEwLCAzNCwgMjIwLCA1OSwgMTAsIDM0LCAyMjMsIDE1NiwgMTAsIDM0LCAKKyAgICAyNDUsIDQ1LCAxMCwgMzQsIDIyNiwgMjEzLCAxMCwgMzQsIDI1MSwgMTQxLCAxMTEsIDEwLCAzNCwgMjUxLCAxNDEsIDEwNSwgCisgICAgMTAsIDM0LCAyMzEsIDkxLCAxMCwgMzQsIDIzMCwgMTI4LCAxMCwgMzQsIDI0MiwgMTQ3LCAxMTEsIDEwLCAzNCwgMjQyLCAKKyAgICAxNDcsIDEwNSwgMTAsIDM0LCAyNDIsIDE0NywgMTU4LCAxMCwgMzQsIDIxNiwgMTA3LCAxMCwgMzQsIDI1MCwgMSwgMTAsIAorICAgIDM0LCAyMTIsIDksIDExMSwgMTAsIDM0LCAyMTIsIDksIDEwNSwgMTAsIDM0LCAyNTEsIDcxLCAyMjEsIDE3MiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjQwLCAyNTUsIDEwLCAzNCwgMjQwLCAyNTUsIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCA0LCAxMCwgMzQsIAorICAgIDI1MSwgNzEsIDIyMCwgNTQsIDEwLCAzNCwgMjQ0LCA0MCwgMTAsIDM0LCAyNTEsIDcxLCAyNTAsIDIzNiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjEyLCA1NywgMTAsIDM0LCAyMTIsIDU4LCAxMTEsIDEwLCAzNCwgMjEyLCA1OCwgMTA1LCAxMCwgMzQsIAorICAgIDI1MCwgMzUsIDEwLCAzNCwgMjUxLCA3MSwgMjQyLCAxNzMsIDEwLCAzNCwgMjAwLCAxMTEsIDEwLCAzNCwgMjAwLCAxMDUsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjMyLCAxNDMsIDEwLCAzNCwgMjUxLCA3MSwgMjQzLCA5NSwgMTAsIDM0LCAyMzAsIDEyNCwgCisgICAgMTExLCAxMCwgMzQsIDIzMCwgMTI0LCAxMDUsIDEwLCAzNCwgMjIzLCAxNjIsIDEwLCAzNCwgMjUxLCAyMTUsIDEwLCAzNCwgCisgICAgMjUxLCA3MSwgMjE3LCA1NywgMjMzLCA1OCwgMTAsIDM0LCAyNTEsIDcxLCAyMzMsIDU5LCAxMCwgMzQsIDI1MSwgNzEsIAorICAgIDIxMSwgMjM5LCAxMCwgMzQsIDI1MSwgNzEsIDI0NCwgNTQsIDEwLCAzNCwgMjQ1LCAyMjYsIDExMSwgMTAsIDM0LCAyNDUsIAorICAgIDIyNiwgMTA1LCAxMCwgMzQsIDI0NSwgMjI2LCAxNTgsIDEwLCAzNCwgMjUxLCA3MSwgMjQ1LCAyMjUsIDEwLCAzNCwgMjQxLCAKKyAgICAyNDIsIDEwLCAzNCwgMjUxLCA3MSwgMjQwLCAyNTIsIDEwLCAzNCwgMjUxLCAyMDIsIDEwLCAzNCwgMjQyLCAyMjksIDEwLCAKKyAgICAzNCwgMjUxLCA3MSwgMjQ0LCA5OCwgMTAsIDM0LCAyNTEsIDcxLCAyNTEsIDI0NSwgMTAsIDM0LCAyNTEsIDcxLCAyMjIsIDMsIAorICAgIDEwLCAzNCwgMjE5LCAxNjIsIDIxMiwgMiwgMTAsIDM0LCAyMTksIDE2MiwgMjExLCA0MSwgMTAsIDM0LCAyNTEsIDcxLCAKKyAgICAyNDMsIDI1MiwgMTAsIDM0LCAyMzUsIDE0OSwgMjQ1LCA0OSwgMTAsIDM0LCAyNTEsIDcxLCAyNDUsIDQ5LCAxMCwgMzQsIAorICAgIDIzNSwgMTQ5LCAyMTYsIDE2LCAxMCwgMzQsIDI1MSwgNzEsIDIxNiwgMTYsIDEwLCAzNCwgMjM1LCAxNDksIDI0NiwgMTA0LCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDI0NiwgMTA0LCAxMCwgMzQsIDIxNSwgOTEsIDEwLCAzNCwgMjM1LCAxNDksIDIxNSwgOTEsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjE1LCA5MSwgNjAsIDM0LCAxMTEsIDYwLCAzNCwgMjMyLCAyMTksIDYwLCAzNCwgMjQ3LCAKKyAgICAxMjgsIDYwLCAzNCwgMjE5LCA5NywgNjAsIDM0LCAyMjEsIDE3NywgNjAsIDM0LCAxMDMsIDYwLCAzNCwgMTA1LCA2MCwgMzQsIAorICAgIDIzMiwgMjQzLCA2MCwgMzQsIDIzMSwgMTkwLCA2MCwgMzQsIDIzMywgMzksIDYwLCAzNCwgMjQ1LCAxMzcsIDYwLCAzNCwgCisgICAgMTk2LCA2MCwgMzQsIDEyNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQ5LCAxNTUsIDYwLCAzNCwgMjQwLCAxMTgsIDYwLCAzNCwgCisgICAgMjE3LCA5MywgNjAsIDM0LCAyMDQsIDI1MSwgMTcxLCA2MCwgMzQsIDIzNCwgMzgsIDYwLCAzNCwgMjI0LCAyMjcsIDYwLCAKKyAgICAzNCwgMjExLCAyMDIsIDYwLCAzNCwgMjE4LCAyNDUsIDYwLCAzNCwgNDQsIDIwNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQxLCAKKyAgICAxODMsIDI0NSwgMTUzLCA2MCwgMzQsIDIxNiwgMjQ4LCA2MCwgMzQsIDI0NywgMTc4LCA2MCwgMzQsIDIyMSwgMTgxLCA2MCwgCisgICAgMzQsIDI1MCwgMTgsIDYwLCAzNCwgMjI0LCAxODUsIDYwLCAzNCwgMjU0LCAyMjQsIDYwLCAzNCwgMjMwLCAxMTUsIDYwLCAKKyAgICAzNCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjQ1LCAyMzEsIDYwLCAzNCwgMjIxLCAyMDIsIDYwLCAzNCwgMjQyLCAxODEsIDYwLCAKKyAgICAzNCwgMjQyLCAxODIsIDIxOSwgODMsIDYwLCAzNCwgMjQ1LCA0OCwgNjAsIDM0LCAyNTIsIDAsIDYwLCAzNCwgMjExLCAyMjEsIAorICAgIDYwLCAzNCwgMjUwLCAxMDksIDYwLCAzNCwgMjIyLCAxOTgsIDYwLCAzNCwgMjM2LCAyLCA2MCwgMzQsIDIxOSwgODEsIDYwLCAKKyAgICAzNCwgMjMzLCAxMDIsIDYwLCAzNCwgMjQ5LCAxNjQsIDYwLCAzNCwgMjE4LCAyMzksIDYwLCAzNCwgMjMwLCAxMjAsIDYwLCAKKyAgICAzNCwgMjIyLCAyMjcsIDYwLCAzNCwgMjExLCAyMDYsIDYwLCAzNCwgMjI2LCAxOTQsIDYwLCAzNCwgMjE1LCA5OCwgNjAsIAorICAgIDM0LCAyNDYsIDg4LCA2MCwgMzQsIDIxOSwgMjUzLCAyMTYsIDE0NiwgNjAsIDM0LCAyNDYsIDEyNiwgMjUwLCAxOCwgNjAsIAorICAgIDM0LCAyMDAsIDIxOCwgMTEwLCA2MCwgMzQsIDExMywgMjQyLCAxNywgNjAsIDM0LCAyMjAsIDIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNzcsIDYwLCAzNCwgMjE5LCA2NywgNjAsIDM0LCAyNTEsIDE0NSwgNjAsIDM0LCAyMTgsIDE0MCwgNjAsIDM0LCAyNDEsIAorICAgIDIzNCwgNjAsIDM0LCAyNDIsIDM1LCA2MCwgMzQsIDI0NywgMTMxLCA2MCwgMzQsIDI0MiwgMjIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNjIsIDYwLCAzNCwgMjIzLCAxNTAsIDYwLCAzNCwgMjIxLCAxODksIDYwLCAzNCwgMjQ3LCAyMDcsIDYwLCAzNCwgMjUzLCAKKyAgICAxNzYsIDYwLCAzNCwgMjE4LCAyMzYsIDYwLCAzNCwgMjI4LCA1NiwgNjAsIDM0LCAyMTgsIDM4LCA2MCwgMzQsIDIyMSwgCisgICAgMjEzLCA2MCwgMzQsIDIzMCwgMTMzLCA2MCwgMzQsIDIxNSwgMjM2LCA2MCwgMzQsIDIzMywgMTI4LCA2MCwgMzQsIDIxOCwgCisgICAgMTMxLCA2MCwgMzQsIDI0OCwgOTYsIDYwLCAzNCwgMjEyLCAyMSwgNjAsIDM0LCAyNDcsIDE1NCwgMjI4LCA1NiwgNjAsIDM0LCAKKyAgICAyNDksIDIyMywgNjAsIDM0LCAyNDMsIDIyOSwgNjAsIDM0LCAyNTAsIDI5LCA2MCwgMzQsIDIxOCwgMTQ0LCA2MCwgMzQsIAorICAgIDIxMiwgNDAsIDYwLCAzNCwgMjQ0LCAxMDQsIDYwLCAzNCwgMjUwLCAyNiwgNjAsIDM0LCAyNDQsIDE2OSwgNjAsIDM0LCA1MiwgCisgICAgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIDYwLCAzNCwgMjE5LCA5MSwgNjAsIDM0LCAyNDQsIAorICAgIDE3OSwgNjAsIDM0LCAyNDksIDE1MywgNjAsIDM0LCAyNDcsIDE0NCwgNjAsIDM0LCAyMjQsIDE4MiwgNjAsIDM0LCAyMzUsIAorICAgIDE0MywgNjAsIDM0LCAyMzEsIDcyLCA2MCwgMzQsIDIxNiwgODksIDYwLCAzNCwgMjE3LCAyNDYsIDYwLCAzNCwgMjMyLCAKKyAgICAyMzcsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjgsIDYwLCAzNCwgMjUxLCAyMDYsIDY0LCAyNTAsIDIsIAorICAgIDYwLCAzNCwgMjE5LCAxOTAsIDYwLCAzNCwgMjQ2LCAxMjYsIDIxNiwgMjQzLCA2MCwgMzQsIDIxMSwgMjUzLCA2MCwgMzQsIAorICAgIDIxOSwgMTA1LCA2MCwgMzQsIDI0NywgMTk1LCA2MCwgMzQsIDI0NSwgMjMsIDYwLCAzNCwgMjE5LCA3LCA2MCwgMzQsIDc1LCAKKyAgICA2MCwgMzQsIDIxOCwgMTMzLCA2MCwgMzQsIDIxOCwgMjUwLCA2MCwgMzQsIDIxNiwgMCwgNjAsIDM0LCAyNDIsIDE1NCwgNjAsIAorICAgIDM0LCAyNTAsIDIyNiwgNjAsIDM0LCAyMTgsIDE2MiwgNjAsIDM0LCAyNTIsIDE2MiwgNjAsIDM0LCAyMjMsIDM0LCA2MCwgCisgICAgMzQsIDIxOSwgMTY5LCA2MCwgMzQsIDIzNSwgMTM2LCA2MCwgMzQsIDIyOSwgOTQsIDYwLCAzNCwgMjIwLCA1OSwgNjAsIDM0LCAKKyAgICAyNDQsIDE1NywgNjAsIDM0LCAyMjYsIDIxMywgNjAsIDM0LCAyNTQsIDEyNiwgNjAsIDM0LCAyMjUsIDMyLCA2MCwgMzQsIAorICAgIDI0NSwgMjM1LCA2MCwgMzQsIDI1MSwgMTQwLCA2MCwgMzQsIDIzMSwgOTEsIDYwLCAzNCwgMjMwLCAxODgsIDYwLCAzNCwgCisgICAgMjIwLCAxNTgsIDYwLCAzNCwgMjU0LCA0LCA2MCwgMzQsIDIzMCwgMTI4LCA2MCwgMzQsIDIxNiwgMjAsIDYwLCAzNCwgMjI2LCAKKyAgICAxNjksIDYwLCAzNCwgMjUxLCAyMDksIDYwLCAzNCwgMjE4LCAxMjksIDYwLCAzNCwgMjQ5LCAyMzMsIDYwLCAzNCwgMjQyLCAKKyAgICAxNDYsIDYwLCAzNCwgMjE2LCAxMDcsIDYwLCAzNCwgMjM1LCAyMjQsIDYwLCAzNCwgMjUxLCAyMTksIDYwLCAzNCwgMjEyLCAKKyAgICA1OCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjUwLCAxLCA2MCwgMzQsIDIxMiwgOCwgNjAsIDM0LCAyMjEsIDE3MiwgNjAsIDM0LCAKKyAgICAyNDAsIDI1NSwgNjAsIDM0LCAyMTksIDQsIDYwLCAzNCwgMjE0LCAyMiwgNjAsIDM0LCAyNTIsIDgwLCA2MCwgMzQsIDIyNSwgCisgICAgNzYsIDYwLCAzNCwgMjUyLCAxODIsIDYwLCAzNCwgMjIwLCA1NCwgNjAsIDM0LCAyMjMsIDExMywgNjAsIDM0LCAyMjIsIAorICAgIDEyOCwgNjAsIDM0LCAyNDQsIDQwLCA2MCwgMzQsIDI1MSwgMjA4LCA2MCwgMzQsIDI1MCwgMjM2LCA2MCwgMzQsIDI1MSwgCisgICAgMjM0LCA2MCwgMzQsIDIzMCwgMTMwLCA2MCwgMzQsIDIxMiwgNTcsIDYwLCAzNCwgMjUwLCAzNSwgNjAsIDM0LCAyMTEsIAorICAgIDIzNiwgNjAsIDM0LCAyNDcsIDE4OCwgNjAsIDM0LCAyMTMsIDE2MSwgNjAsIDM0LCAyNDIsIDE3MywgNjAsIDM0LCAyMzIsIAorICAgIDE0MywgNjAsIDM0LCAyNDMsIDk1LCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxOSwgOTYsIDYwLCAzNCwgMjE5LCAKKyAgICAyNTMsIDIxNywgNzcsIDI1MSwgMjQ1LCA2MCwgMzQsIDIyMywgMTYyLCA2MCwgMzQsIDI1MSwgMjE1LCA2MCwgMzQsIDIxMSwgCisgICAgMTk3LCA2MCwgMzQsIDI0NCwgMTk4LCA2MCwgMzQsIDIzMywgNTgsIDYwLCAzNCwgMjE3LCA1NywgMjMzLCA1OCwgNjAsIDM0LCAKKyAgICAyMzMsIDU0LCA2MCwgMzQsIDIxOSwgMzIsIDYwLCAzNCwgMjMzLCA1OSwgNjAsIDM0LCAyMTEsIDIzOSwgNjAsIDM0LCAyNDQsIAorICAgIDU0LCA2MCwgMzQsIDI0NSwgMjI1LCA2MCwgMzQsIDI0MSwgMjQyLCA2MCwgMzQsIDI0NCwgOCwgNjAsIDM0LCAyNDAsIDI1MiwgCisgICAgNjAsIDM0LCAyNTEsIDIwMiwgNjAsIDM0LCAyMTcsIDY0LCA2MCwgMzQsIDI0MiwgNDEsIDYwLCAzNCwgMjQ0LCAxMjEsIDYwLCAKKyAgICAzNCwgMjIyLCAzMCwgMjExLCAyMzYsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAzNCwgMjQyLCAyMjksIDYwLCAzNCwgMjQ0LCAKKyAgICA5OCwgNjAsIDM0LCAyNTEsIDI0NSwgNjAsIDM0LCAyMjIsIDMsIDYwLCAzNCwgMjQ4LCA4MiwgNjAsIDM0LCAyMTIsIDIsIAorICAgIDYwLCAzNCwgMjQxLCAyMTcsIDYwLCAzNCwgMjExLCA0MSwgNjAsIDM0LCAyMzAsIDE5NywgNjAsIDM0LCAyNTEsIDIyOSwgCisgICAgNjAsIDM0LCAyNDUsIDE2MywgNjAsIDM0LCAyNDMsIDI1MiwgNjAsIDM0LCAyMTUsIDIxMCwgNjAsIDM0LCAyNDYsIDkwLCAKKyAgICA2MCwgMzQsIDIyMywgMTQ0LCA2MCwgMzQsIDIyOCwgNTgsIDYwLCAzNCwgMjQ1LCA0OSwgNjAsIDM0LCAyMTYsIDE2LCA2MCwgCisgICAgMzQsIDI0NiwgMTA0LCA2MCwgMzQsIDIxNSwgOTEsIDYwLCAzNCwgMjQ0LCA1NiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDQzLCAKKyAgICAyMTYsIDQzLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDcyLCAyMTYsIDQzLCA1MSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDQzLCAyMTYsIDQzLCAyMzAsIDIyOSwgMjIsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgNzIsIDIxNiwgNDMsIDIzMCwgCisgICAgMjI5LCAyMiwgNTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAyNDMsIDIzNiwgMjE4LCAxMSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDIxOCwgMTIsIDI0MywgMjUxLCA0OCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCA1MSwgMTEwLCAKKyAgICAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgCisgICAgMjQzLCAyNTEsIDIxNCwgMTYwLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIxNCwgCisgICAgMTYwLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzIsIDExNCwgMjMzLCA1MiwgCisgICAgMTEwLCAyNDgsIDQ1LCAxMzUsIDIyNiwgMTI2LCAxMTAsIDIxOSwgMjAsIDExMCwgMjQ5LCAyMjcsIDExMCwgMjQzLCAyMzYsIAorICAgIDIxOCwgMTMxLCAyNDcsIDE4NSwgNzksIDIzNSwgMTM3LCAyMzUsIDI0MywgMjE4LCAxNjEsIDg3LCAxMTAsIDIzNSwgMTY0LCAKKyAgICA3OSwgMTEwLCAyNTAsIDQsIDc5LCAxMTAsIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTgsIDEyNywgNDQsIDI1NCwgMTE4LCAKKyAgICAxMjcsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgNDQsIDUyLCAyNTQsIDExOCwgMTI3LCA0MywgMjQ5LCAxNjksIDEyNywgNDQsIAorICAgIDI0OSwgMTY5LCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjksIDEyNywgNDQsIDcxLCAyNDksIDE2OSwgMTI3LCA0MywgODUsIDIzMywgCisgICAgMjYsIDEyNywgNDQsIDg1LCAyMzMsIDI2LCAxMjcsIDIyNCwgMjQwLCA3OSwgMjQzLCAzOSwgNzksIDQzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgNDQsIDcxLCAKKyAgICAyMzMsIDI2LCAxMjcsIDQzLCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIAorICAgIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE2NCwgMjIzLCA1MiwgNTIsIDIyNCwgCisgICAgMTk0LCAyMjQsIDEsIDc5LCA1MiwgMjI0LCAxOTQsIDIyNCwgMSwgNzksIDEyMSwgNTIsIDIyNCwgMTk0LCAyMjQsIDEsIDc5LCAKKyAgICAyMjQsIDI0MCwgMTY0LCAyNDQsIDE5OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDExMSwgMjQyLCAxNSwgMjI3LCAyMDIsIDEwNSwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE1OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDE2MSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5MCwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5OSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NiwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDIwMSwgMTEwLCAyMzMsIDksIDEzOCwgNzksIDExMCwgMjIyLCAyMzEsIDEzOCwgNzksIAorICAgIDExMCwgMjQ4LCA1MiwgMTM4LCA3OSwgMTEwLCAyNDUsIDEzNiwgMTM4LCA3OSwgMjQsIDIxOSwgMTU3LCA1OSwgMTM4LCA3OSwgCisgICAgMjQsIDUyLCA1OSwgMTM4LCA3OSwgMjEyLCAzMiwgMjQ4LCAxNjQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgNzksIDY3LCAKKyAgICAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDc5LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDE2NCwgCisgICAgMjE0LCAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDE2NCwgMjE0LCAKKyAgICAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMTY0LCAyMzIsIDExNCwgMjQyLCAzNCwgMzcsIDIyNCwgCisgICAgMjQwLCA3OSwgMTEwLCAyMTcsIDQsIDIzMiwgMjIwLCAyNDQsIDE1NCwgMjIwLCAxNDAsIDg3LCAyNDIsIDE1LCAyMjcsIAorICAgIDIwMiwgMjE2LCAyNDgsIDI0MiwgMTUsIDIyNywgMjAyLCAyMTUsIDczLCAyNDIsIDE1LCAyMjcsIDIwMiwgMjE2LCAxNjMsIAorICAgIDY3LCAxMTAsIDIzNSwgMTY0LCA3OSwgMjMxLCAxNDUsIDc5LCAyMjYsIDMsIDI1NCwgMTQ4LCA3OSwgMTEwLCA0NSwgMjM1LCAKKyAgICAyNDUsIDExMCwgMTYzLCAyNDQsIDExNCwgMjE5LCAyMCwgMTQxLCAxLCA0LCA2MSwgMTQxLCAxLCA2MSwgMTQxLCAxLCA0LCAKKyAgICA3NCwgMTQxLCAxLCA3NCwgMTQxLCAxLCA0LCA2OSwgMTQxLCAxLCA2OSwgMTQxLCAxLCA0LCA3NiwgMTQxLCAxLCA3NiwgCisgICAgMTQxLCAxLCA0LCA3OCwgMTQxLCAxLCA3OCwgMTQxLCAxLCAxNzYsIDE0MSwgMSwgMjQzLCAxNDIsIDE0MSwgMSwgMjM0LCAKKyAgICA5OCwgMTQxLCAxLCAyNDIsIDIyMSwgMTQxLCAxLCAyMzMsIDIyMywgMTQxLCAxLCAyNDIsIDEyMCwgMTQxLCAxLCAyMzQsIAorICAgIDE4OCwgMTQxLCAxLCAyNDMsIDY5LCAxNDEsIDEsIDIzNCwgMzQsIDE0MSwgMSwgMjQyLCAxODEsIDE0MSwgMSwgMjA2LCAKKyAgICAxNDEsIDEsIDIxMCwgMTE2LCAxNDEsIDEsIDIxOSwgMTkzLCAxNDEsIDEsIDIxMCwgNDQsIDE0MSwgMSwgMjE4LCA4NCwgCisgICAgMTQxLCAxLCAyMTAsIDEzLCAxNDEsIDEsIDIyMSwgMTgzLCAxNDEsIDEsIDIxMCwgOTQsIDE0MSwgMSwgMjE5LCA2MCwgMTQxLCAKKyAgICAxLCAyMTAsIDIzLCAxNDEsIDEsIDIxNywgMTA2LCAxNDEsIDEsIDI0OCwgMjI5LCAxNDEsIDEsIDIxNiwgMTE4LCAxNDEsIDEsIAorICAgIDI0OCwgMTEsIDE0MSwgMSwgNCwgMjE1LCAxMTksIDE0MSwgMSwgMjE1LCAxMTksIDE0MSwgMSwgMjQ2LCA4NiwgMTQxLCAxLCAKKyAgICAyMTcsIDIzLCAxNDEsIDEsIDI0OCwgOTgsIDE0MSwgMSwgMTEyLCAxNDEsIDEsIDI0NywgMTUzLCAxNDEsIDEsIDE5OCwgCisgICAgMTQxLCAxLCAyMjgsIDIzOCwgMTQxLCAxLCAyMjcsIDI0MiwgMTQxLCAxLCAyMjksIDExMiwgMTQxLCAxLCAyMjgsIDc5LCAKKyAgICAxNDEsIDEsIDE2MiwgMTQxLCAxLCAyNTIsIDE5OSwgMTQxLCAxLCAxOTEsIDE0MSwgMSwgMjQxLCAxODcsIDE0MSwgMSwgCisgICAgMjUyLCAxNCwgMTQxLCAxLCAyMjUsIDExMSwgMTQxLCAxLCAyNDAsIDIyOSwgMTQxLCAxLCAyNTEsIDEzMywgMTQxLCAxLCAKKyAgICAyMjQsIDE1MywgMTQxLCAxLCAyNDEsIDI0NSwgMTQxLCAxLCAyNTIsIDgzLCAxNDEsIDEsIDIyNSwgMjI0LCAxNDEsIDEsIAorICAgIDI0MSwgNzUsIDE0MSwgMSwgMjUxLCAyMTMsIDE0MSwgMSwgMjI1LCAxOSwgMTQxLCAxLCAxODYsIDE0MSwgMSwgMjMwLCAKKyAgICAyMzUsIDE0MSwgMSwgMjMwLCAxMDcsIDE0MSwgMSwgMjMxLCA5NiwgMTQxLCAxLCAyMzAsIDE2NiwgMTQxLCAxLCA0LCAxOTIsIAorICAgIDE0MSwgMSwgMTkyLCAxNDEsIDEsIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAKKyAgICAxNDEsIDEsIDIxMCwgMjQ0LCAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM4LCAxNDEsIDEsIDIyMiwgMTQyLCAxNDEsIDEsIAorICAgIDIyMywgMTMxLCAxNDEsIDEsIDIyMiwgMjEzLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAKKyAgICAyMTEsIDI1MCwgMTQxLCAxLCAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMzAsIDE0MSwgMSwgCisgICAgMjEyLCAxMTYsIDE0MSwgMSwgNCwgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTg4LCAzOCwgMjM0LCAyMDcsIDIxMywgMTM1LCAKKyAgICAyMTksIDMzLCA3OSwgMzgsIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMTMsIDEzNSwgCisgICAgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDE0MSwgMjM1LCAxNjQsIDc5LCAxNDEsIAorICAgIDIxMywgMTM1LCAyMzUsIDE2NCwgNzksIDE0MSwgMjQ3LCAyMjksIDIxMCwgMjI1LCAyMzQsIDIwNywgNTIsIDI0MCwgMTc1LCAKKyAgICA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgNTYsIDEsIDQsIDc0LCA1NiwgMSwgNzQsIDU2LCAxLCA0LCA2OSwgNTYsIDEsIAorICAgIDY5LCA1NiwgMSwgNCwgNzYsIDU2LCAxLCA3NiwgNTYsIDEsIDQsIDc4LCA1NiwgMSwgNzgsIDU2LCAxLCAxNzYsIDU2LCAxLCAKKyAgICAyNDMsIDE0MiwgNTYsIDEsIDIzNCwgOTgsIDU2LCAxLCAyNDIsIDIyMSwgNTYsIDEsIDIzMywgMjIzLCA1NiwgMSwgMjQyLCAKKyAgICAxMjAsIDU2LCAxLCAyMzQsIDE4OCwgNTYsIDEsIDI0MywgNjksIDU2LCAxLCAyMzQsIDM0LCA1NiwgMSwgMjQyLCAxODEsIAorICAgIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgNTYsIDEsIDIxOSwgMTkzLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgCisgICAgODQsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgMjIxLCAxODMsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA2MCwgNTYsIAorICAgIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIDEwNiwgNTYsIDEsIDI0OCwgMjI5LCA1NiwgMSwgMjE2LCAxMTgsIDU2LCAxLCAKKyAgICAyNDgsIDExLCA1NiwgMSwgNCwgMjE1LCAxMTksIDU2LCAxLCAyMTUsIDExOSwgNTYsIDEsIDI0NiwgODYsIDU2LCAxLCAyMTcsIAorICAgIDIzLCA1NiwgMSwgMjQ4LCA5OCwgNTYsIDEsIDExMiwgNTYsIDEsIDI0NywgMTUzLCA1NiwgMSwgMTk4LCA1NiwgMSwgMjI4LCAKKyAgICAyMzgsIDU2LCAxLCAyMjcsIDI0MiwgNTYsIDEsIDIyOSwgMTEyLCA1NiwgMSwgMjI4LCA3OSwgNTYsIDEsIDE2MiwgNTYsIDEsIAorICAgIDI1MiwgMTk5LCA1NiwgMSwgMTkxLCA1NiwgMSwgMjQxLCAxODcsIDU2LCAxLCAyNTIsIDE0LCA1NiwgMSwgMjI1LCAxMTEsIAorICAgIDU2LCAxLCAyNDAsIDIyOSwgNTYsIDEsIDI1MSwgMTMzLCA1NiwgMSwgMjI0LCAxNTMsIDU2LCAxLCAyNDEsIDI0NSwgNTYsIAorICAgIDEsIDI1MiwgODMsIDU2LCAxLCAyMjUsIDIyNCwgNTYsIDEsIDI0MSwgNzUsIDU2LCAxLCAyNTEsIDIxMywgNTYsIDEsIDIyNSwgCisgICAgMTksIDU2LCAxLCAxODYsIDU2LCAxLCAyMzAsIDIzNSwgNTYsIDEsIDIzMCwgMTA3LCA1NiwgMSwgMjMxLCA5NiwgNTYsIDEsIAorICAgIDIzMCwgMTY2LCA1NiwgMSwgNCwgMTkyLCA1NiwgMSwgMTkyLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDU2LCAxLCAyMTAsIDIxMiwgCisgICAgNTYsIDEsIDQsIDIxMCwgMjQ0LCA1NiwgMSwgMjEwLCAyNDQsIDU2LCAxLCAyMDUsIDU2LCAxLCAyMjMsIDM4LCA1NiwgMSwgCisgICAgMjIyLCAxNDIsIDU2LCAxLCAyMjMsIDEzMSwgNTYsIDEsIDIyMiwgMjEzLCA1NiwgMSwgNCwgMjEyLCA2NSwgNTYsIDEsIAorICAgIDIxMiwgNjUsIDU2LCAxLCAyMTEsIDI1MCwgNTYsIDEsIDIxMiwgMjIsIDU2LCAxLCAyMTEsIDIyNywgNTYsIDEsIDIzMCwgCisgICAgMzAsIDU2LCAxLCAyMTIsIDExNiwgNTYsIDEsIDQsIDE3NiwgNTYsIDEsIDQsIDIzNCwgMTg4LCA1NiwgMSwgMjE0LCAyNywgCisgICAgNTYsIDEsIDIxMywgMTc2LCA1NiwgMSwgMjEzLCAyNTUsIDU2LCAxLCAyMTMsIDEzOCwgNTYsIDIzMCwgMjI5LCAyNDcsIAorICAgIDEyOCwgMjM0LCAyMDcsIDIyNCwgMTc2LCAyMTksIDMzLCA3OSwgNTYsIDIzNSwgMTY0LCA3OSwgNTYsIDIxMywgMTM1LCAKKyAgICAyMzUsIDE2NCwgNzksIDU2LCAyNDcsIDIyOSwgMjM0LCA1LCAyNTEsIDE5MiwgMSwgMjUzLCAxNjYsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEwOSwgMjUxLCAxOTIsIDEsIDE5NCwgMjUxLCAxOTIsIDEsIDI0NSwgMTQsIDI1MSwgMTkyLCAxLCAyNDksIDY4LCAKKyAgICAyNTEsIDE5MiwgMSwgMjE3LCAxNTMsIDI1MSwgMTkyLCAxLCAyMzAsIDMwLCAyNTEsIDE5MiwgMSwgMTU2LCAyNTEsIDE5MiwgCisgICAgMSwgMjQzLCAyMDksIDI1MSwgMTkyLCAxLCAyMzUsIDI5LCAyNTEsIDE5MiwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMTUwLCAyNTEsIDE5MiwgMSwgMjI0LCA5OSwgMjUxLCAxOTIsIDEsIDIxMSwgMTc4LCAyNTEsIDE5MiwgMSwgMjEwLCAKKyAgICA4MywgMjUxLCAxOTIsIDEsIDI1MCwgMTY2LCAyNTEsIDE5MiwgMSwgMjIwLCAxMDYsIDI1MSwgMTkyLCAxLCAxNTMsIDI1MSwgCisgICAgMTkyLCAxLCAyMTAsIDE1OSwgMjUxLCAxOTIsIDEsIDI1MSwgNzQsIDI1MSwgMTkyLCAxLCAyMjIsIDkzLCAyNTEsIDE5MiwgCisgICAgMSwgNjEsIDI1MSwgMTkyLCAxLCA3OCwgMjUxLCAxOTIsIDEsIDc2LCAyNTEsIDE5MiwgMSwgMjQ1LCAyMDUsIDI1MSwgMTkyLCAKKyAgICAxLCAyNTQsIDIxMCwgMjUxLCAxOTIsIDEsIDI0NSwgMjAzLCAyNTEsIDE5MiwgMSwgMjUzLCAyMDAsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEzOCwgMjUxLCAxOTIsIDEsIDI1NCwgMTMxLCAyNTEsIDE5MiwgMSwgMjQ1LCAxNTgsIDI1MSwgMTkyLCAxLCAyNTQsIAorICAgIDEyMywgMjUxLCAxOTIsIDEsIDI0NSwgMTQ2LCAyNTEsIDE5MiwgMSwgMjQ1LCAxMDAsIDI1MSwgMTkyLCAxLCA3NCwgMjUxLCAKKyAgICAxOTIsIDEsIDY5LCAyNTEsIDE5MiwgMSwgMjM1LCAxNjIsIDI1MSwgMTkyLCAxLCAyMTQsIDEwNSwgMjUxLCAxOTIsIDEsIAorICAgIDIyOSwgODQsIDI1MSwgMTkyLCAxLCAyNDIsIDE4NSwgMjUxLCAxOTIsIDEsIDIzNiwgNDEsIDI0LCAxLCAyMzQsIDY0LCAyNCwgCisgICAgMSwgMjE4LCAyMTcsIDI0LCAxLCAyMzQsIDU3LCAyNCwgMSwgMjI4LCAyMzEsIDI0LCAxLCAyMjgsIDIyOSwgMjQsIDEsIAorICAgIDIyOCwgMjI4LCAyNCwgMSwgMjE2LCAxMDIsIDI0LCAxLCAyMTgsIDIwNiwgMjQsIDEsIDIyMywgMjksIDI0LCAxLCAyMjMsIAorICAgIDI0LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTQsIDI0LCAxLCAyMjMsIDksIDI0LCAxLCAyMjMsIDQsIDI0LCAxLCAKKyAgICAyMjMsIDE1LCAyNCwgMSwgMjIzLCAyNywgMjQsIDEsIDIzMCwgMjIyLCAyNCwgMSwgMjI1LCA5OCwgMjQsIDEsIDIxOCwgCisgICAgMjE0LCAyNCwgMSwgMjI1LCA4NywgMjQsIDEsIDIxOSwgMTUwLCAyNCwgMSwgMjE4LCAyMTEsIDI0LCAxLCAyMzYsIDYzLCAKKyAgICAyNCwgMSwgMjUwLCA1NCwgMjQsIDEsIDIxOCwgMjIxLCAyNCwgMSwgMjUwLCAxMTQsIDI0LCAxLCAyMzQsIDExNiwgMjQsIDEsIAorICAgIDIxNiwgMTc0LCAyNCwgMSwgMjI1LCAxMzQsIDI0LCAxLCAyNDEsIDE3OSwgMjQsIDEsIDYxLCAyNCwgMSwgMjU0LCAyNTIsIAorICAgIDI0LCAxLCAxOTIsIDI0LCAxLCAyMTEsIDkyLCAyNCwgMSwgMjQ1LCAxMjUsIDI0LCAxLCA3NiwgMjQsIDEsIDIxMSwgMzYsIAorICAgIDI0LCAxLCAyMTEsIDQ3LCAyNCwgMSwgNzgsIDI0LCAxLCAyMTIsIDY1LCAyNCwgMSwgMjEyLCA2MiwgMjQsIDEsIDIyNiwgCisgICAgMjM4LCAyNCwgMSwgMjEwLCAyNDQsIDI0LCAxLCA2OSwgMjQsIDEsIDIxMiwgMTEsIDI0LCAxLCAyMTIsIDIyLCAyNCwgMSwgCisgICAgMjExLCAyNTAsIDI0LCAxLCAyMTAsIDIxMiwgMjQsIDEsIDI0NSwgNjMsIDI0LCAxLCAyMTEsIDgsIDI0LCAxLCA3NCwgMjQsIAorICAgIDI0NCwgMTExLCAyNCwgMSwgMjE4LCAyMTUsIDI0LCAxLCAyMjgsIDIyMSwgMjQsIDEsIDIyOCwgMjIzLCAyNCwgMSwgMjI4LCAKKyAgICAyMjYsIDI0LCAxLCAyMjMsIDIyLCAyNCwgMSwgMjIzLCAzLCAyNCwgMSwgMjIzLCAxMSwgMjQsIDEsIDIyMywgMTYsIDI0LCAKKyAgICAxLCAyMjMsIDEsIDI0LCAxLCAyMzAsIDIxNSwgMjQsIDEsIDIzMCwgMjEyLCAyNCwgMSwgMjMwLCAyMTYsIDI0LCAxLCAyMzQsIAorICAgIDIyNywgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc5LCAyNCwgMSwgMjI1LCA4NSwgMjQsIDEsIDIyNSwgODIsIDI0LCAKKyAgICAxLCAyMjUsIDk2LCAyNCwgMSwgMjI1LCA4MCwgMjQsIDEsIDIzNCwgMjI1LCAyNCwgMSwgMjM0LCAyMjMsIDI0LCAxLCAyMTksIAorICAgIDE0MywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzMsIDI0LCAxLCAyMTksIDEzOCwgMjQsIDEsIDIxOSwgMTQ4LCAKKyAgICAyNCwgMSwgMjI2LCAzNiwgMjQsIDEsIDIxOCwgMjE4LCAyNCwgMSwgMjExLCAyNiwgMjQsIDEsIDIxMSwgMjIsIDI0LCAxLCAKKyAgICAyMTEsIDIzLCAyNCwgMSwgMjM0LCAyMjYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDIxMSwgMzIsIDI0LCAxLCAyMTAsIAorICAgIDIzOCwgMjQsIDEsIDIxMCwgMjM3LCAyNCwgMSwgMjEwLCAyNDAsIDI0LCAxLCAyMTAsIDIwMywgMjQsIDEsIDIxMCwgMjA0LCAKKyAgICAyNCwgMSwgMjEwLCAyMDcsIDI0LCAxLCAyNTQsIDQyLCAyNCwgMSwgMjU0LCAzNiwgMTEwLCAyNTQsIDEwNywgMjMyLCAyMDksIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjMsIDUzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTIzLCA3OSwgMTEwLCAyNTQsIDEwNywgCisgICAgMTEzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTM0LCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxOSwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTUsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzAsIDIyOSwgNzksIDExMCwgMjU0LCAxMDcsIDI1MSwgMTgzLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMDAsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjEsIDE3OCwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTcwLCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMiwgNzksIDExMCwgMjU0LCAxMDcsIDI0MSwgMjMxLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ1LCAyMzIsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzEsIDE5MSwgNzksIDI1MSwgMTkyLCAKKyAgICAxLCAyNTEsIDEzMywgMjUxLCAxOTIsIDEsIDIxMCwgNDQsIDI1MSwgMTkyLCAxLCAyMzUsIDExNCwgMjUxLCAxOTIsIDEsIAorICAgIDI0MiwgMTIwLCAyNTEsIDE5MiwgMSwgMjQ1LCAyMTcsIDI1MSwgMTkyLCAxLCAyNDUsIDE0MywgMjUxLCAxOTIsIDEsIDIyNiwgCisgICAgMTg3LCAyNTEsIDE5MiwgMSwgMjI2LCAxOTEsIDI1MSwgMTkyLCAxLCAyMzUsIDE4NiwgMjUxLCAxOTIsIDEsIDI1NCwgMTA5LCAKKyAgICAyNTEsIDE5MiwgMSwgMjM1LCAyMzEsIDI1MSwgMTkyLCAxLCAyMTQsIDE2OCwgMjUxLCAxOTIsIDEsIDIzNiwgMjMsIDI1MSwgCisgICAgMTkyLCAxLCAyMjksIDYyLCAyNTEsIDE5MiwgMSwgMjU0LCAyMDQsIDI1MSwgMTkyLCAxLCAyNTMsIDE5NSwgMjUxLCAxOTIsIAorICAgIDEsIDI1NCwgMTQ0LCAyNTEsIDE5MiwgMSwgMjI2LCAyMDgsIDI1MSwgMTkyLCAxLCAyMjYsIDE5MywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMjI4LCAyNTEsIDE5MiwgNDAsIDEsIDIyNiwgMTA5LCAyNTEsIDE5MiwgNDAsIDEsIDIxNywgMTUzLCAyNTEsIDE5MiwgCisgICAgNDAsIDEsIDIzNSwgMjksIDI1MSwgMTkyLCA0MCwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIDI0MywgMSwgMjUxLCAxOTIsIAorICAgIDEsIDIzMywgNSwgMjUxLCAxOTIsIDEsIDIwOSwgMjUwLCAxMCwgMjE4LCAxMDUsIDIxNywgMTUzLCAxMCwgMjE4LCAxMDUsIAorICAgIDIxMiwgNCwgMTAsIDIxOCwgMTA1LCAyMTEsIDE1OCwgMTAsIDIxOCwgMTA1LCAyNTEsIDg3LCAxMCwgMjE4LCAxMDUsIDIxNywgCisgICAgMjU1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY5LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMjM4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY2LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY0LCAxMCwgMjE4LCAxMDUsIDI0MCwgMjM2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYzLCAxMCwgMjE4LCAxMDUsIDIzMCwgMzAsIDEwLCAyMTgsIDEwNSwgMjQyLCAKKyAgICA2NywgMTAsIDIxOCwgMTA1LCAyMjIsIDkzLCAxMCwgMjE4LCAxMDUsIDIyNiwgMTA5LCAxMCwgMjE4LCAxMDUsIDIxOSwgMjMsIAorICAgIDEwLCAyMTgsIDEwNSwgMjQ5LCA2OCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE3MCwgMTAsIDIxOCwgMTA1LCAyNDEsIDE5NywgCisgICAgMTAsIDIxOCwgMTA1LCAyMTcsIDE2NSwgMTAsIDIxOCwgMTA1LCAyMTcsIDIzNCwgMTAsIDIxOCwgMTA1LCAyMTgsIDE3MCwgCisgICAgMTAsIDIxOCwgMTA1LCAyMjAsIDExMiwgMTAsIDIxOCwgMTA1LCAyMjUsIDIyOCwgMTAsIDIxOCwgMTA1LCAyMjQsIDEwMSwgCisgICAgMTAsIDIxOCwgMTA1LCAyMTYsIDQ0LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU1LCAxMCwgMjE4LCAxMDUsIDIxNywgMjQ1LCAKKyAgICAxMCwgMjE4LCAxMDUsIDI0MCwgMTc3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYyLCAxMCwgMjE4LCAxMDUsIDIyNSwgMTUyLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIyNCwgOTksIDU2LCAxLCA0LCAyMzMsIDIyMywgNTYsIDEsIDQsIDIxOSwgMTkzLCA1NiwgMSwgNCwgCisgICAgMjE4LCA4NCwgNTYsIDEsIDQsIDExMiwgNTYsIDEsIDQsIDIyNywgMjQyLCA1NiwgMSwgNCwgMTYyLCA1NiwgMSwgNCwgMjQxLCAKKyAgICAxODcsIDU2LCAxLCA0LCAyNDAsIDIyOSwgNTYsIDEsIDQsIDI0MSwgMjQ1LCA1NiwgMSwgNCwgMjQxLCA3NSwgNTYsIDEsIDQsIAorICAgIDIzMCwgMTA3LCA1NiwgMSwgNCwgMjA1LCA1NiwgMSwgNCwgMjIzLCAzOCwgNTYsIDEsIDQsIDIyMiwgMTQyLCA1NiwgMSwgNCwgCisgICAgMjIzLCAxMzEsIDU2LCAxLCA0LCAyMjIsIDIxMywgODgsIDI0LCAyMzQsIDY0LCA4OCwgMjQsIDIyOCwgMjMxLCA4OCwgMjQsIAorICAgIDIxNiwgMTAyLCA4OCwgMjQsIDIyMywgMjksIDg4LCAyNCwgMjMwLCAyMjIsIDg4LCAyNCwgMjI1LCA5OCwgODgsIDI0LCAKKyAgICAyMTksIDE1MCwgODgsIDI0LCAyMzYsIDYzLCA4OCwgMjQsIDI1MCwgNTQsIDg4LCAyNCwgMjUwLCAxMTQsIDg4LCAyNCwgCisgICAgMjM0LCAxMTYsIDg4LCAyNCwgMjE2LCAxNzQsIDg4LCAyNCwgMjI1LCAxMzQsIDg4LCAyNCwgMjQxLCAxNzksIDg4LCAyNCwgCisgICAgMjM0LCA2NSwgNjEsIDg4LCAyNCwgMjI4LCAyMzIsIDYxLCA4OCwgMjQsIDIxNiwgMTAzLCA2MSwgODgsIDI0LCAyMjMsIDMwLCAKKyAgICA2MSwgODgsIDI0LCAyMzAsIDIyMywgNjEsIDg4LCAyNCwgMjI1LCA5OSwgNjEsIDg4LCAyNCwgMjE5LCAxNTEsIDYxLCA4OCwgCisgICAgMjQsIDIzNiwgNjQsIDYxLCA4OCwgMjQsIDI1MCwgNTUsIDYxLCA4OCwgMjQsIDI1MCwgMTE1LCA2MSwgODgsIDI0LCAyMzQsIAorICAgIDExNywgNjEsIDg4LCAyNCwgMjE2LCAxNzUsIDYxLCA4OCwgMjQsIDIyNSwgMTM1LCA2MSwgODgsIDI0LCAyNDEsIDE4MCwgCisgICAgNjEsIDg4LCAyNCwgMjUwLCA1NSwgNjksIDg4LCAyMzQsIDksIDEzNSwgMjI2LCAyMjEsIDg4LCAyMzQsIDksIDEzNSwgMTQ0LCAKKyAgICAyNDAsIDIyOSwgODgsIDE1NCwgMTExLCA4OCwgMTU0LCAxMDUsIDg4LCAxNTQsIDE1OCwgODgsIDE1NCwgMTYxLCA4OCwgCisgICAgMTU0LCAxOTAsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMTk5LCA4OCwgMTU0LCAxOTYsIDg4LCAxNTQsIDIwMSwgODgsIAorICAgIDE1NCwgMjE2LCAyNDgsIDg4LCAxNTQsIDIzMCwgMTMzLCA4OCwgMTU0LCAyNDQsIDEwNCwgODgsIDE1NCwgMjEyLCA0MCwgCisgICAgODgsIDE1NCwgMjExLCAyMTQsIDg4LCAxNTQsIDIzMSwgNDQsIDg4LCAxNTQsIDI0NSwgMjMxLCA4OCwgMTU0LCAyMTgsIDM4LCAKKyAgICA4OCwgMTU0LCAyMTgsIDEzNCwgODgsIDE1NCwgMjQxLCAyNTEsIDg4LCAxNTQsIDIxOSwgNTYsIDg4LCAxNTQsIDIyOSwgCisgICAgMjA5LCA4OCwgMTU0LCAyMTksIDYsIDg4LCAxNTQsIDI0NCwgMTEwLCA4OCwgMTU0LCAyNDksIDIwOCwgODgsIDE1NCwgMjMzLCAKKyAgICAxMzEsIDg4LCAxNTQsIDIyMywgNzQsIDg4LCAxNTQsIDI1MSwgMjMsIDg4LCAxNTQsIDIxOCwgODgsIDg4LCAxNTQsIDIxOCwgCisgICAgMjEsIDg4LCAxNTQsIDI0NSwgMTM1LCA4OCwgMTU0LCAyMjMsIDY2LCA4OCwgMTU0LCAyNTQsIDE1OSwgODgsIDE1NCwgMjQ0LCAKKyAgICAxMzYsIDg4LCAxNTQsIDIyMywgNjQsIDg4LCAxNTQsIDIyMCwgMTU4LCA4OCwgMTU0LCAyMjMsIDEzMCwgMzcsIDE1NCwgCisgICAgMjI0LCAxNSwgMzcsIDE1NCwgMjM0LCA4NiwgMzcsIDE1NCwgMjIxLCAyMDAsIDM3LCAxNTQsIDIzNCwgNSwgMzcsIDU0LCAKKyAgICAyMTYsIDI0OSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDIwMSwgODUsIDIxOCwgCisgICAgMjM2LCAzNywgNTQsIDIxNiwgMTY0LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDI0NCwgMjQsIDIyNiwgMjAxLCAKKyAgICA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjQ0LCAxMjMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjE5LCAxMTQsIAorICAgIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjIwLCAxMTksIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgCisgICAgMjQ1LCAxOTMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDIyNSwgMjU1LCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTEsIDM3LCAKKyAgICA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgCisgICAgMjE1LCA3NCwgMTkwLCAzNywgNTQsIDIxNSwgNzQsIDE5NSwgMzcsIDU0LCAyMTUsIDc0LCAxOTksIDM3LCA1NCwgMjE1LCAKKyAgICA3NCwgMTk2LCAzNywgNTQsIDIxNSwgNzQsIDIwMSwgMzcsIDU0LCAyMTYsIDE2MywgMzcsIDU0LCAyMTYsIDE2NCwgMTExLCAKKyAgICAzNywgNTQsIDIxNiwgMTY0LCAxMDUsIDM3LCA1NCwgMjE2LCAxNjQsIDE1OCwgMzcsIDU0LCAyMTYsIDE2NCwgMTYxLCAzNywgCisgICAgNTQsIDIxNiwgMTY0LCAxOTAsIDM3LCAyNCwgMjM0LCA2NCwgMzcsIDI0LCAyMjgsIDIzMSwgMzcsIDI0LCAyMTYsIDEwMiwgCisgICAgMzcsIDI0LCAyMjMsIDI5LCAzNywgMjQsIDIzMCwgMjIyLCAzNywgMjQsIDIyNSwgOTgsIDM3LCAyNCwgMjE5LCAxNTAsIDM3LCAKKyAgICAyNCwgMjM2LCA2MywgMzcsIDI0LCAyNTAsIDU0LCAzNywgMjQsIDI1MCwgMTE0LCAzNywgMjQsIDIzNCwgMTE2LCAzNywgMjQsIAorICAgIDIxNiwgMTc0LCAzNywgMjQsIDIyNSwgMTM0LCAzNywgMjQsIDI0MSwgMTc5LCAzNywgMjQsIDIzNCwgNjUsIDYxLCAzNywgCisgICAgMjQsIDIyOCwgMjMyLCA2MSwgMzcsIDI0LCAyMTYsIDEwMywgNjEsIDM3LCAyNCwgMjIzLCAzMCwgNjEsIDM3LCAyNCwgMjMwLCAKKyAgICAyMjMsIDYxLCAzNywgMjQsIDIyNSwgOTksIDYxLCAzNywgMjQsIDIxOSwgMTUxLCA2MSwgMzcsIDI0LCAyMzYsIDY0LCA2MSwgCisgICAgMzcsIDI0LCAyNTAsIDU1LCA2MSwgMzcsIDI0LCAyNTAsIDExNSwgNjEsIDM3LCAyNCwgMjM0LCAxMTcsIDYxLCAzNywgMjQsIAorICAgIDIxNiwgMTc1LCA2MSwgMzcsIDI0LCAyMjUsIDEzNSwgNjEsIDM3LCAyNCwgMjQxLCAxODAsIDYxLCAzNywgMjM0LCA5LCAKKyAgICAxMzUsIDI1MCwgMTU2LCAzNywgMjM0LCA5LCAxMzUsIDIzNSwgNTMsIDM3LCAyNCwgMjM2LCA2NCwgNjksIDIzNCwgOSwgCisgICAgMjE4LCAxNjEsIDg3LCAzNywgMTU0LCAxMTEsIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAKKyAgICAxNTQsIDE5MCwgMzcsIDE1NCwgMTk1LCAzNywgMTU0LCAxOTksIDM3LCAxNTQsIDE5NiwgMzcsIDE1NCwgMjAxLCAzNywgCisgICAgMTU0LCAyMTYsIDI0OCwgMzcsIDE1NCwgMjMwLCAxMzMsIDM3LCAxNTQsIDI0NCwgMTA0LCAzNywgMTU0LCAyMTIsIDQwLCAKKyAgICAzNywgMTU0LCAyMTEsIDIxNCwgMzcsIDE1NCwgMjMxLCA0NCwgMzcsIDE1NCwgMjQ1LCAyMzEsIDM3LCAxNTQsIDIxOCwgMzgsIAorICAgIDM3LCAxNTQsIDIxOCwgMTM0LCAzNywgMTU0LCAyNDEsIDI1MSwgMzcsIDE1NCwgMjE5LCA1NiwgMzcsIDE1NCwgMjI5LCAKKyAgICAyMDksIDM3LCAxNTQsIDIxOSwgNiwgMzcsIDE1NCwgMjQ0LCAxMTAsIDM3LCAxNTQsIDI0OSwgMjA4LCAzNywgMTU0LCAyMzMsIAorICAgIDEzMSwgMzcsIDE1NCwgMjIxLCAxNzYsIDM3LCAxNTQsIDIzMSwgMTk0LCAzNywgMTU0LCAyNDQsIDE0NSwgMzcsIDE1NCwgCisgICAgMjE4LCA1MCwgMzcsIDE1NCwgMjQ1LCA0MiwgMzcsIDE1NCwgMjI0LCAxOTAsIDM3LCAxNTQsIDI1MywgMjA0LCAzNywgMTU0LCAKKyAgICAyMzUsIDE2NSwgMzcsIDE1NCwgMjIzLCA2NCwgMzcsIDE1NCwgMjQ5LCAxNzIsIDM3LCAxNTQsIDI0OSwgMTYzLCAzNywgCisgICAgMTU0LCAyNDEsIDE3MiwgMzcsIDE1NCwgMjUwLCAxODIsIDM3LCAxNTQsIDIzMiwgMTE2LCAzNywgMTU0LCAyMzMsIDUyLCAKKyAgICAzNywgMTU0LCAyMjIsIDI1NCwgMzcsIDE1NCwgMjMxLCA4OCwgMzcsIDE1NCwgMjIzLCA5MCwgMzcsIDE1NCwgMjE4LCA4OCwgCisgICAgMzcsIDE1NCwgMjE4LCAyMSwgMzcsIDE1NCwgMjQ1LCAxMzUsIDM3LCAxNTQsIDIyMywgNjYsIDM3LCAxNTQsIDI1NCwgMTU5LCAKKyAgICAzNywgMTU0LCAyMjgsIDIxNywgMzcsIDU0LCAyMTYsIDE2NCwgMTk1LCAzNywgNTQsIDIxNiwgMTY0LCAxOTksIDM3LCA1NCwgCisgICAgMjE2LCAxNjQsIDE5NiwgMzcsIDU0LCAyMTYsIDE2NCwgMjAxLCAzNywgNTQsIDI0NCwgMjMsIDM3LCA1NCwgMjQ0LCAyNCwgCisgICAgMTExLCAzNywgNTQsIDI0NCwgMjQsIDEwNSwgMzcsIDU0LCAyNDQsIDI0LCAxNTgsIDM3LCA1NCwgMjQ0LCAyNCwgMTYxLCAKKyAgICAzNywgNTQsIDI0NCwgMjQsIDE5MCwgMzcsIDU0LCAyNDQsIDI0LCAxOTUsIDM3LCA1NCwgMjQ0LCAyNCwgMTk5LCAzNywgNTQsIAorICAgIDI0NCwgMjQsIDE5NiwgMzcsIDU0LCAyNDQsIDI0LCAyMDEsIDM3LCA1NCwgMjQ0LCAxMjIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDIzNSwgMTM5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDQsIDE1NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjMxLCAKKyAgICAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI1NCwgNTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzMSwgMTM3LCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNTMsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjIwLCAxMzgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyNiwgCisgICAgMjQzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjgsIDQ1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDkzLCA0MiwgMjQxLCAKKyAgICAxOTcsIDQyLCAyNDUsIDk2LCA0MiwgMjQ1LCA1MSwgMjMyLCAyMjUsIDIzMiwgMjQ2LCA1MCwgMzcsIDU2LCA2MSwgMzcsIAorICAgIDU2LCA3NCwgMzcsIDU2LCA2OSwgMzcsIDU2LCA3NiwgMzcsIDU2LCA3OCwgMzcsIDU2LCAxNzYsIDM3LCA1NiwgMjM0LCA5OCwgCisgICAgMzcsIDU2LCAyMzMsIDIyMywgMzcsIDU2LCAyMzQsIDE4OCwgMzcsIDU2LCAyMzQsIDM0LCAzNywgNTYsIDIwNiwgMzcsIDU2LCAKKyAgICAyMTksIDE5MywgMzcsIDU2LCAyMTgsIDg0LCAzNywgNTYsIDIyMSwgMTgzLCAzNywgNTYsIDIxOSwgNjAsIDM3LCA1NiwgCisgICAgMjE3LCAxMDYsIDM3LCA1NiwgMjE2LCAxMTgsIDM3LCA1NiwgMjE1LCAxMTksIDM3LCA1NiwgMjE3LCAyMywgMzcsIDU2LCAKKyAgICAxMTIsIDM3LCA1NiwgMTk4LCAzNywgNTYsIDIyOCwgMjM4LCAzNywgNTYsIDIyNywgMjQyLCAzNywgNTYsIDIyOSwgMTEyLCAKKyAgICAzNywgNTYsIDIyOCwgNzksIDM3LCA1NiwgMTYyLCAzNywgNTYsIDI0MSwgMTg3LCAzNywgNTYsIDI0MCwgMjI5LCAzNywgNTYsIAorICAgIDI0MSwgMjQ1LCAzNywgNTYsIDI0MSwgNzUsIDM3LCA1NiwgMTg2LCAzNywgNTYsIDIzMCwgMjM1LCAzNywgNTYsIDIzMCwgCisgICAgMTA3LCAzNywgNTYsIDIzMSwgOTYsIDM3LCA1NiwgMjMwLCAxNjYsIDM3LCA1NiwgMTkyLCAzNywgNTYsIDIxMCwgMjEyLCAKKyAgICAzNywgNTYsIDIxMCwgMjQ0LCAzNywgNTYsIDIwNSwgMzcsIDU2LCAyMjMsIDM4LCAzNywgNTYsIDIyMiwgMTQyLCAzNywgNTYsIAorICAgIDIyMywgMTMxLCAzNywgNTYsIDIyMiwgMjEzLCAzNywgNTYsIDIxMiwgNjUsIDM3LCA1NiwgMjExLCAyNTAsIDM3LCA1NiwgCisgICAgMjEyLCAyMiwgMzcsIDU2LCAyMTEsIDIyNywgNDIsIDI1NCwgNzksIDQyLCAyNTMsIDI0NywgNDIsIDI1NCwgMTAzLCA0MiwgCisgICAgMjU1LCA0MCwgNDIsIDIzNSwgMjMzLCA0MiwgMjM1LCAyMDMsIDQyLCAyMTQsIDE2NiwgNDIsIDI0NSwgNzQsIDQyLCAyNDUsIAorICAgIDIxNCwgNDIsIDIyNiwgMTkwLCA0MiwgMjI2LCAxODQsIDQyLCAyMzQsIDI1MSwgNDIsIDIzNCwgMjIwLCA0MiwgMjM0LCAKKyAgICAyMTcsIDQyLCAyNDMsIDk5LCA0MiwgMjQzLCAxMDgsIDQyLCAyNDIsIDIxMSwgNDIsIDI0MiwgMjA3LCA0MiwgMjMzLCAxNTYsIAorICAgIDQyLCAyNDIsIDIwMCwgNDIsIDIzNCwgNzgsIDQyLCAyMzQsIDc3LCA0MiwgMjM0LCA3NiwgNDIsIDIzNCwgNzUsIDQyLCAKKyAgICAyNDIsIDkzLCA0MiwgMjQyLCA5MiwgNDIsIDIzMywgMTk5LCA0MiwgMjMzLCAyMDEsIDQyLCAyMzQsIDE4NCwgNDIsIDIzNCwgCisgICAgNywgNDIsIDIzNCwgMTQsIDQyLCAyMjIsIDE4LCA0MiwgMjIxLCAyMzksIDQyLCAyMTksIDEzMSwgNDIsIDIyMCwgMTQzLCAKKyAgICA0MiwgMjIwLCAxNDIsIDQyLCAyNDgsIDIyNiwgNDIsIDI0OCwgNDQsIDQyLCAyNDcsIDEyOSwgNDIsIDIxNiwgMzMsIDQyLCAKKyAgICAyMjksIDIwNSwgNDIsIDIyOCwgNDYsIDQyLCAyNDIsIDM5LCA0MiwgMjI2LCA4OCwgNDIsIDIyNiwgODcsIDQyLCAyNTIsIAorICAgIDE5NiwgNDIsIDIyNSwgMTA4LCA0MiwgMjI1LCA3MiwgNDIsIDIyNSwgNzMsIDQyLCAyNTEsIDI0MiwgNDIsIDI0MCwgMjI4LCAKKyAgICA0MiwgMjQwLCAyMjQsIDQyLCAyNTEsIDk5LCA0MiwgMjQwLCAyMTEsIDQyLCAyNDEsIDIyMiwgNDIsIDIyNSwgMTYyLCA0MiwgCisgICAgMjI1LCAxOTcsIDQyLCAyNDEsIDIwNSwgNDIsIDIyNSwgMTk0LCA0MiwgMjI1LCAyMTAsIDQyLCAyNTIsIDY5LCA0MiwgMjI1LCAKKyAgICA5LCA0MiwgMjUxLCAxODgsIDQyLCAyNDEsIDYzLCA0MiwgMjI0LCAyNTMsIDQyLCAyNDEsIDU1LCA0MiwgMjQxLCA1NywgNDIsIAorICAgIDIzMSwgMjA2LCA0MiwgMjMxLCAyMDIsIDQyLCAyMzEsIDIxMSwgNDIsIDIzMSwgMTU1LCA0MiwgMjMxLCAxODAsIDQyLCAKKyAgICAyMzAsIDIwMiwgNDIsIDIzMCwgMTgxLCA0MiwgMjMwLCAxODAsIDQyLCAyMzEsIDc5LCA0MiwgMjMxLCA3NiwgNDIsIDIzMSwgCisgICAgODAsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAyMDEsIDQyLCAyMjIsIDIyOSwgNDIsIDIyMiwgMjMzLCAKKyAgICA0MiwgMjIyLCAxMTksIDQyLCAyMjIsIDExMywgNDIsIDIyMywgODgsIDQyLCAyMjMsIDg1LCA0MiwgMjEyLCAzOCwgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxMCwgODYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMTEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNTgsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTAsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTksIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMDEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTYsIDI0OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIAorICAgIDI0NSwgMTc1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA3NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQwLCAyNDYsIDIxNiwgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjQ0LCAxMywgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQwLCAyNDYsIDI0NCwgMTI2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE5LCAxMjEsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMjAsIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDI0NSwgCisgICAgMTk4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjI4LCAyMDIsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgCisgICAgMjQ2LCAyMTUsIDczLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2NywgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQwLCAyNDYsIDIxNSwgNjMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY0LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2OSwgNDIsIDI0MCwgMjM3LCA0MiwgMjQ4LCAyMjksIDQyLCAyNTMsIDIwMCwgCisgICAgNDIsIDEzMCwgNDIsIDIyNiwgMTI5LCA0MiwgMjI1LCAyMjksIDQyLCAyNDcsIDE1NSwgNDIsIDI0NywgMTU2LCAyMTgsIAorICAgIDIzNSwgNDIsIDI0NywgMTU2LCAyNDksIDExNiwgNDIsIDIzNSwgMTYyLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDI0MSwgCisgICAgMjIzLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgMTc1LCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgNzUsIDQyLCAKKyAgICAyNDUsIDk5LCAyMjksIDIxMCwgMjMxLCA3NSwgNDIsIDI0OSwgMTY1LCA0MiwgMjI2LCA5NCwgMjU0LCAxMzMsIDQyLCAxOTgsIAorICAgIDQyLCAyMzAsIDEwOCwgNjEsIDQyLCAxODYsIDQyLCAxNzYsIDQyLCAyMzQsIDE5MSwgNDIsIDIzMSwgMTM0LCA0MiwgMjQzLCAKKyAgICA4NywgNDIsIDI1MSwgMjYsIDQyLCAyMzQsIDE5MCwgNDIsIDIyNSwgMTUzLCA0MiwgMjI5LCA4NiwgNDIsIDIzMCwgMTA4LCAKKyAgICAyNDUsIDE0LCA0MiwgMjMwLCAxMDgsIDI0MywgMjA5LCA0MiwgMjMxLCAyMCwgNDIsIDIzNCwgMTQwLCA0MiwgMjQwLCAxNzAsIAorICAgIDQyLCAyMzQsIDEwMCwgNDIsIDIzMCwgMjM3LCA0MiwgMjQyLCAyMjMsIDQyLCAyMTYsIDEyMCwgNDIsIDIzMCwgMTA4LCAKKyAgICAxNTYsIDQyLCAyMzAsIDE3NCwgNDIsIDI0NywgMTY1LCA0MiwgMjM0LCA0NiwgNDIsIDI0NCwgNTMsIDQyLCAyMjgsIDExNywgCisgICAgNDIsIDIzMCwgMTA4LCAxOTQsIDQyLCAyMzAsIDE3MSwgNDIsIDI0OSwgMjQ3LCA0MiwgMjM0LCA0MCwgNDIsIDIzMCwgMTcyLCAKKyAgICAyMTgsIDIzNSwgNDIsIDI0OSwgMjQ4LCAyMTgsIDIzNSwgNDIsIDIzMiwgNTUsIDIxOCwgMjM1LCA0MiwgMjM0LCA0MSwgCisgICAgMjE4LCAyMzUsIDQyLCAyMzAsIDE3MiwgMjQ5LCAxMTYsIDQyLCAyNDksIDI0OCwgMjQ5LCAxMTYsIDQyLCAyMzIsIDU1LCAKKyAgICAyNDksIDExNiwgNDIsIDIzNCwgNDEsIDI0OSwgMTE2LCA0MiwgMjMyLCA1NSwgMTE1LCAyMjIsIDkzLCA0MiwgMjMyLCA1NSwgCisgICAgMTE1LCAyMjIsIDk0LCAyMTgsIDIzNSwgNDIsIDE5MSwgNDIsIDIzNCwgMSwgNDIsIDIzMCwgMTEwLCA0MiwgMjQyLCAxNTgsIAorICAgIDQyLCAyMjMsIDE3OSwgNDIsIDIyMywgMTgwLCAxMTUsIDIyMiwgOTMsIDQyLCAyMjMsIDE4MCwgMTE1LCAyMjIsIDk0LCAKKyAgICAyMTgsIDIzNSwgNDIsIDIyNCwgMTY1LCA0MiwgMjI4LCAxOCwgNDIsIDIzMCwgMTA4LCAyMjIsIDkzLCA0MiwgMjMwLCAxMDksIAorICAgIDQyLCAyMjQsIDExOSwgNDIsIDIyNywgMTgwLCA0MiwgMjMwLCAxMDgsIDIxNCwgMTA1LCA0MiwgMjMwLCA1NCwgNDIsIDIzMywgCisgICAgMTkxLCA0MiwgMjMwLCA1NSwgMjMxLCA3OSwgNDIsIDIyNCwgMTE4LCA0MiwgMjI3LCAxNzksIDQyLCAyMzAsIDEwOCwgMjEyLCAKKyAgICA5OCwgNDIsIDIzMCwgNDgsIDQyLCAyMzMsIDE4OSwgNDIsIDIzMCwgNDksIDIzMSwgNzksIDQyLCAyMzUsIDMwLCAyMjYsIAorICAgIDIyNCwgNDIsIDIzMiwgNTUsIDIyNiwgMjI0LCA0MiwgMjU0LCAxNDQsIDQyLCAyNTEsIDE2OCwgNDIsIDI1MCwgMjIyLCA0MiwgCisgICAgMjUwLCAxOTksIDQyLCAyNTEsIDc1LCAxMTUsIDIzNCwgMTQwLCA0MiwgMjQ5LCAyNDYsIDQyLCAyNDgsIDE1MCwgNDIsIAorICAgIDI0MiwgNzksIDQyLCAxNjIsIDQyLCAyNDAsIDIzOCwgNDIsIDIzNiwgNiwgNDIsIDIzNCwgNTMsIDQyLCAyMzQsIDQxLCAKKyAgICAyNTEsIDIsIDQyLCAyMzMsIDIyNSwgNDIsIDIzMiwgMTY1LCA0MiwgMjMyLCAxNjQsIDQyLCAyMzIsIDE1MywgNDIsIDIzMiwgCisgICAgNjgsIDQyLCAyMzEsIDEzNSwgMjE5LCA4MSwgNDIsIDIzMCwgMjAxLCA0MiwgMjMwLCAxNTcsIDQyLCAyMjUsIDE1MSwgNDIsIAorICAgIDIyNSwgMjIsIDQyLCAyMjQsIDIyMiwgNDIsIDIyNCwgMjIwLCA0MiwgMjE4LCAyMjksIDQyLCAyMTgsIDMsIDQyLCAyMTIsIAorICAgIDI0LCA0MiwgMjE0LCAxMDYsIDExNSwgMTk0LCA0MiwgMTE2LCAxMTUsIDE5NCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDExMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDEwNSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE1OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE2MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5OSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDIwMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMjQ4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDgsIDE1NCwgMjQ1LCAxNzUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDc2LCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyNDQsIDEzLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjQ0LCAxMjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTksIAorICAgIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIyMCwgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMjQ1LCAxOTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMjgsIDIwMiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQ4LCAxNTQsIDIxNSwgNzMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY3LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjQsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgCisgICAgMjE1LCA3MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0OCwgMTU0LCAyMTUsIDY2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA3MiwgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2MywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTYyLCA0MiwgMjQzLCAxMjUsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIAorICAgIDI0OSwgMTQ4LCAyNDEsIDIzMCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjIzLCAxMjUsIDI0NSwgMjMxLCAyNDEsIDE5OSwgCisgICAgMzEsIDI0NywgMjM5LCAyNTMsIDIxNSwgMjE2LCAxOTcsIDI1MiwgNjQsIDI0MSwgMTk5LCAzMSwgMjEwLCAyMjMsIDI0NCwgCisgICAgNDYsIDI0MSwgMTk5LCAzMSwgMjEyLCA1OSwgMjQxLCAxOTksIDMxLCAyNDksIDIxMSwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCAxMSwgMjQxLCAxOTksIDMxLCAyNDEsIDY3LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDQsIDIxNywgNjIsIAorICAgIDI0MSwgMTk5LCAzMSwgMjE1LCAyMzgsIDI0MSwgMTk5LCAzMSwgMjI1LCAyMjIsIDI0MSwgMTk5LCAzMSwgMjE4LCAxNjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjQ0LCAxNDcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIyNCwgMjQzLCAyNDEsIDE5OSwgMzEsIAorICAgIDIzMCwgMTYwLCAyNDEsIDE5OSwgMzEsIDI0NSwgMTM0LCAyNDEsIDE5OSwgMzEsIDI0NCwgNDcsIDI0MSwgMTk5LCAzMSwgCisgICAgMjExLCAyMDcsIDIyNiwgMjAxLCAyMTYsIDE5NywgMjQ4LCA5NCwgMjQxLCAxOTksIDMxLCAyNTQsIDU5LCAyNDEsIDE5OSwgCisgICAgMzEsIDI0OSwgMTkzLCAyNDEsIDE5OSwgMzEsIDI1MSwgMjM1LCAyMTYsIDEzOSwgMjQxLCAxOTksIDMxLCAyNDIsIDE1NiwgCisgICAgMjQxLCAxOTksIDMxLCAyMTgsIDI0NywgMjU0LCA3OCwgMjQxLCAxOTksIDMxLCAyMjMsIDU2LCAyNDEsIDE5OSwgMzEsIAorICAgIDIzNSwgMjI3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMTcsIDYyLCAyNDEsIDE5OSwgMzEsIDIzMCwgMTE2LCAyNDksIAorICAgIDE2NywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjI0LCAyMDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1NSwgMjcsIAorICAgIDIxMiwgNDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1MCwgMTYsIDI0NCwgMTA0LCAyNDEsIDE5OSwgMzEsIDIzNSwgCisgICAgMjQwLCAyNDEsIDE5OSwgMzEsIDI0NiwgNjUsIDI0MSwgMTk5LCAzMSwgMjIzLCA1OSwgMjQxLCAxOTksIDMxLCAyNDIsIAorICAgIDEzOSwgMjI0LCAyMjcsIDI0MSwgMTk5LCAzMSwgMjI0LCAxODAsIDI0MSwgMTk5LCAzMSwgMjQ4LCAxNjksIDY0LCAyMTYsIAorICAgIDE5NywgMjMyLCAyMzYsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI0NCwgMTgyLCAyNDEsIDE5OSwgMzEsIDIyNiwgMTY3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIyNiwgMjQ4LCAyNDEsIDE5OSwgMzEsIDI0OCwgNjcsIDI0MSwgMTk5LCAzMSwgMjQ4LCA4NywgCisgICAgMjQxLCAxOTksIDMxLCAyMzUsIDI1NCwgMjQxLCAxOTksIDMxLCAyNTEsIDE1NywgMjQxLCAxOTksIDMxLCAyNDksIDIyOSwgCisgICAgMjE2LCA0MywgMjMxLCA4MSwgMjQxLCAxOTksIDMxLCAyNDMsIDk0LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDIyNCwgMTI4LCAKKyAgICAyMTQsIDE1NCwgMjQxLCAxOTksIDMxLCAyMjYsIDE2NiwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCAxMywgMjQxLCAKKyAgICAxOTksIDMxLCAyMjMsIDQ4LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTAsIDIyOCwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCA3LCAyMTYsIDEzNCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjM0LCAxODUsIDIxOCwgMTM2LCAyMzAsIAorICAgIDEyMCwgMjQxLCAxOTksIDMxLCAyNDgsIDQwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzEsIDE1NywgMjMxLCAyMDcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjU1LCAyOCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCA1NCwgMjQxLCAxOTksIDMxLCAKKyAgICAyMTYsIDE5NywgMjQzLCA1NCwgMjExLCAyMzksIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzNSwgNTgsIDIzMywgMTEzLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI0NywgMTkyLCAyNDEsIDE5OSwgMzEsIDIzMiwgMjI2LCAyNDEsIDE5OSwgMzEsIDIzNSwgMjMwLCAKKyAgICAyMTUsIDE4OCwgMjQxLCAxOTksIDMxLCA0LCAyMjQsIDIwMCwgMjQxLCAxOTksIDMxLCAyNTQsIDIyNiwgMjQ5LCAyMjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjUyLCA2NywgMjQ5LCAyMjAsIDgsIDMsIDIzNSwgMTY2LCA4LCAzLCAyMzUsIDE1OSwgOCwgMywgCisgICAgNzQsIDgsIDMsIDIzNSwgMTg5LCA4LCAzLCAyMzYsIDY1LCA4LCAzLCAyMzYsIDQ4LCA4LCAzLCAyMzYsIDY3LCA4LCAzLCAKKyAgICAyMzYsIDY2LCA4LCAzLCAyNTMsIDIxNCwgOCwgMywgMjUzLCAxNzcsIDgsIDMsIDYxLCA4LCAzLCAyNTQsIDgwLCA4LCAzLCAKKyAgICAyMTQsIDE2NCwgOCwgMywgMjE0LCAxNjcsIDgsIDMsIDIxNCwgMTY1LCA4LCAzLCAyMjYsIDE0NCwgOCwgMywgMjI2LCAxMTgsIAorICAgIDgsIDMsIDc4LCA4LCAzLCAyMjYsIDE3OSwgOCwgMywgMjQ1LCA0MywgOCwgMywgNzYsIDgsIDMsIDIxMSwgMTk1LCA4LCAzLCAKKyAgICAyNTEsIDIzNiwgOCwgMywgMjUxLCAyMzMsIDgsIDMsIDI1MiwgMTQsIDgsIDMsIDI1MSwgMjQ2LCA4LCAzLCAyNTIsIDMsIDgsIAorICAgIDMsIDI1MiwgMiwgOCwgMywgMjUyLCA1LCA4LCAzLCAyNTIsIDQsIDgsIDMsIDI1MiwgMTI5LCA4LCAzLCAyNTIsIDEyMSwgOCwgCisgICAgMywgMjUyLCAxOTksIDgsIDMsIDI1MiwgMTUwLCA4LCAzLCAyNTEsIDEwOSwgOCwgMywgMjUxLCAxMTMsIDgsIDMsIDI1MSwgCisgICAgMTEwLCA4LCAzLCAyNTEsIDE4NywgOCwgMywgMjUxLCAxNzEsIDgsIDMsIDI1MSwgMjEzLCA4LCAzLCAyNTEsIDE5MywgOCwgCisgICAgMywgMjUyLCAyOSwgOCwgMywgMjUyLCA4MywgOCwgMywgMjUyLCA0MSwgOCwgMywgMjUxLCA5NSwgOCwgMywgMjUxLCA5MiwgCisgICAgOCwgMywgMjUxLCAxMzMsIDgsIDMsIDI1MSwgMTA4LCA4LCAzLCAyNTEsIDEwMiwgOCwgMywgMjUxLCAxMDYsIDgsIDMsIAorICAgIDI1MSwgODAsIDgsIDMsIDI1MSwgNzgsIDgsIDMsIDI1MSwgODUsIDgsIDMsIDI1MSwgODMsIDgsIDMsIDI1MSwgODEsIDgsIAorICAgIDMsIDI1MSwgODIsIDgsIDMsIDIyNSwgNTIsIDgsIDMsIDIyNSwgNDgsIDgsIDMsIDIyNSwgMTExLCA4LCAzLCAyMjUsIDYyLCAKKyAgICA4LCAzLCAyMjUsIDc4LCA4LCAzLCAyMjUsIDEwNSwgOCwgMywgMjI1LCAxMDEsIDgsIDMsIDIyNSwgMjQ0LCA4LCAzLCAyMjUsIAorICAgIDIzNCwgOCwgMywgMTkxLCA4LCAzLCAyMjYsIDI1LCA4LCAzLCAyMjQsIDEzOCwgOCwgMywgMjI0LCAxNDAsIDgsIDMsIDIyNCwgCisgICAgMTM5LCA4LCAzLCAyMjQsIDIzNiwgOCwgMywgMjI0LCAyMjUsIDgsIDMsIDIyNSwgMTksIDgsIDMsIDIyNCwgMjQ4LCA4LCAzLCAKKyAgICAyMjQsIDEyNCwgOCwgMywgMjI0LCAxMjAsIDgsIDMsIDIyNCwgMTUzLCA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMjksIAorICAgIDgsIDMsIDIyNCwgMTM1LCA4LCAzLCAyMjQsIDEwMywgOCwgMywgMjI0LCAxMDIsIDgsIDMsIDIyNCwgMTA3LCA4LCAzLCAKKyAgICAyMjQsIDEwNiwgOCwgMywgMjI0LCAxMDQsIDgsIDMsIDIyNCwgMTA1LCA4LCAzLCAyNTIsIDEwNCwgOCwgMywgMjUyLCAxMDMsIAorICAgIDgsIDMsIDI1MiwgMTEwLCA4LCAzLCAyNTIsIDEwNSwgOCwgMywgMjUyLCAxMDcsIDgsIDMsIDI1MiwgMTA2LCA4LCAzLCAKKyAgICAyNTIsIDEwOSwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIDI1MiwgMTE2LCA4LCAzLCAyNTIsIDExNSwgOCwgMywgMjUyLCAxMTksIAorICAgIDgsIDMsIDI1MiwgMTE3LCA4LCAzLCAyNTIsIDk1LCA4LCAzLCAyNTIsIDk3LCA4LCAzLCAyNTIsIDk2LCA4LCAzLCAyNTIsIAorICAgIDEwMCwgOCwgMywgMjUyLCA5OSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDExMSwgOCwgMywgCisgICAgMjUyLCAxMTQsIDgsIDMsIDI1MiwgMTEyLCA4LCAzLCAyNTIsIDkxLCA4LCAzLCAyNTIsIDkwLCA4LCAzLCAyNTIsIDk4LCA4LCAKKyAgICAzLCAyNTIsIDk0LCA4LCAzLCAyNTIsIDkyLCA4LCAzLCAyNTIsIDkzLCA4LCAzLCAyNTIsIDg3LCA4LCAzLCAyNTIsIDg2LCAKKyAgICA4LCAzLCAyNTIsIDg5LCA4LCAzLCAyNTIsIDg4LCA4LCAzLCAyMjksIDE3NCwgOCwgMywgMjI5LCAxNzMsIDgsIDMsIDIyOSwgCisgICAgMTc5LCA4LCAzLCAyMjksIDE3NSwgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc4LCA4LCAzLCAyMjksIDE3NywgOCwgCisgICAgMywgMjI5LCAxODIsIDgsIDMsIDIyOSwgMTgxLCA4LCAzLCAyMjksIDE4NCwgOCwgMywgMjI5LCAxODMsIDgsIDMsIDIyOSwgCisgICAgMTcwLCA4LCAzLCAyMjksIDE2OSwgOCwgMywgMjI5LCAxNzIsIDgsIDMsIDIyOSwgMTcxLCA4LCAzLCAyMjksIDE2MywgOCwgCisgICAgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTY3LCA4LCAzLCAyMjksIDE2NiwgOCwgMywgMjI5LCAxNjQsIDgsIDMsIDIyOSwgCisgICAgMTY1LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTYxLCA4LCAzLCAyMjksIDE2MCwgOCwgCisgICAgMywgMjI5LCAxNTgsIDgsIDMsIDIyOSwgMTU5LCA4LCAzLCAyNDEsIDExNywgOCwgMywgMjQxLCAxMTYsIDgsIDMsIDI0MSwgCisgICAgMTIyLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTksIDgsIDMsIDI0MSwgMTIxLCA4LCAzLCAyNDEsIDEyMCwgOCwgCisgICAgMywgMjQxLCAxMjUsIDgsIDMsIDI0MSwgMTI0LCA4LCAzLCAyNDEsIDEyNywgOCwgMywgMjQxLCAxMjYsIDgsIDMsIDI0MSwgCisgICAgMTA4LCA4LCAzLCAyNDEsIDExMCwgOCwgMywgMjQxLCAxMDksIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExMiwgOCwgCisgICAgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTE0LCA4LCAzLCAyNDEsIDEwNCwgOCwgMywgMjQxLCAxMDMsIDgsIDMsIDI0MSwgCisgICAgMTExLCA4LCAzLCAyNDEsIDEwNywgOCwgMywgMjQxLCAxMDUsIDgsIDMsIDI0MSwgMTA2LCA4LCAzLCAyNDEsIDk4LCA4LCAzLCAKKyAgICAyNDEsIDEwMiwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgOTksIDgsIDMsIDI0MSwgMTAwLCA4LCAzLCAyMzAsIDE3NywgCisgICAgOCwgMywgMjMwLCAxNzYsIDgsIDMsIDIzMCwgMjM1LCA4LCAzLCAyMzAsIDE4MywgOCwgMywgMjMwLCAyMDgsIDgsIDMsIAorICAgIDIzMCwgMjI2LCA4LCAzLCAyMzAsIDIyNCwgOCwgMywgMjMxLCAxNDQsIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAxODYsIDgsIAorICAgIDMsIDIzMSwgMTc3LCA4LCAzLCAyMzAsIDc5LCA4LCAzLCAyMzAsIDc4LCA4LCAzLCAyMzAsIDgyLCA4LCAzLCAyMzAsIDgwLCAKKyAgICA4LCAzLCAyMzAsIDEyNiwgOCwgMywgMjMwLCAxMTIsIDgsIDMsIDIzMCwgMTY2LCA4LCAzLCAyMzAsIDEzMSwgOCwgMywgCisgICAgMjMxLCAzMSwgOCwgMywgMjMxLCA5NiwgOCwgMywgMjMwLCA2MCwgOCwgMywgMjMwLCA1NiwgOCwgMywgMjMwLCAxMDcsIDgsIAorICAgIDMsIDIzMCwgNzUsIDgsIDMsIDIzMCwgNjgsIDgsIDMsIDIzMCwgNzMsIDgsIDMsIDIzMCwgMzMsIDgsIDMsIDIzMCwgMzIsIAorICAgIDgsIDMsIDIzMCwgMzgsIDgsIDMsIDIzMCwgMzUsIDgsIDMsIDI0NCwgOTEsIDgsIDMsIDI0NCwgODYsIDgsIDMsIDI0NCwgCisgICAgMTI5LCA4LCAzLCAyNDQsIDEwNiwgOCwgMywgMjQ0LCAxNzUsIDgsIDMsIDI0NCwgMTY2LCA4LCAzLCAyNDQsIDIwNCwgOCwgCisgICAgMywgMjQ0LCAxNzgsIDgsIDMsIDI0NCwgMTEsIDgsIDMsIDI0NCwgNTEsIDgsIDMsIDI0NCwgMzUsIDgsIDMsIDI0MywgMjI1LCAKKyAgICA4LCAzLCAyNDMsIDIyNCwgOCwgMywgMjQzLCAyNDEsIDgsIDMsIDI0MywgMjMwLCA4LCAzLCAyNDMsIDIyOCwgOCwgMywgCisgICAgMjQzLCAyMjksIDgsIDMsIDI0MywgMjEyLCA4LCAzLCAyNDMsIDIxMSwgOCwgMywgMjQzLCAyMTUsIDgsIDMsIDI0MywgMjEzLCAKKyAgICA4LCAzLCAyMTMsIDE0NCwgOCwgMywgMjEzLCAxMzksIDgsIDMsIDIxMywgMTc2LCA4LCAzLCAyMTMsIDE1MywgOCwgMywgCisgICAgMjEzLCAxNjYsIDgsIDMsIDIxMywgMTYzLCA4LCAzLCAyMTMsIDE2OCwgOCwgMywgMjEzLCAxNjcsIDgsIDMsIDIxNCwgNywgCisgICAgOCwgMywgMjE0LCAyLCA4LCAzLCAyMTQsIDI3LCA4LCAzLCAyMTQsIDE4LCA4LCAzLCAyMTMsIDEyNSwgOCwgMywgMjEzLCAKKyAgICAxMjEsIDgsIDMsIDIxMywgMTM4LCA4LCAzLCAyMTMsIDEyNiwgOCwgMywgMjEzLCAxNzgsIDgsIDMsIDIxMywgMjQ0LCA4LCAKKyAgICAzLCAyMTIsIDExMCwgOCwgMywgMjEyLCAxMDgsIDgsIDMsIDIxMiwgMTE2LCA4LCAzLCAyMTIsIDExMywgOCwgMywgMjEyLCAKKyAgICAxMTEsIDgsIDMsIDIxMiwgMTEyLCA4LCAzLCAyMTIsIDEwMiwgOCwgMywgMjEyLCAxMDEsIDgsIDMsIDIxMiwgMTA2LCA4LCAKKyAgICAzLCAyMTIsIDEwNSwgOCwgMywgMjEyLCAxMDMsIDgsIDMsIDIxMiwgMTA0LCA4LCAzLCAyNDcsIDE4NiwgOCwgMywgMjQ3LCAKKyAgICAxNzQsIDgsIDMsIDI0OCwgMTEsIDgsIDMsIDI0NywgMjExLCA4LCAzLCAyNDcsIDI0NCwgOCwgMywgMjQ3LCAyNDgsIDgsIDMsIAorICAgIDI0NywgMjQ3LCA4LCAzLCAyNDgsIDE2MCwgOCwgMywgMjQ4LCAxNTUsIDgsIDMsIDI0OCwgMjI5LCA4LCAzLCAyNDgsIDE4MCwgCisgICAgOCwgMywgMjQ2LCA3MCwgOCwgMywgMjQ2LCA3MSwgOCwgMywgMjQ3LCAxMjgsIDgsIDMsIDI0NiwgMTEwLCA4LCAzLCAyNDcsIAorICAgIDE1MywgOCwgMywgMjQ3LCAxMzAsIDgsIDMsIDI0OCwgMzgsIDgsIDMsIDI0OCwgOTgsIDgsIDMsIDI0OCwgNTMsIDgsIDMsIAorICAgIDI0NiwgNjEsIDgsIDMsIDI0NiwgNTksIDgsIDMsIDI0NiwgODYsIDgsIDMsIDI0NiwgNjksIDgsIDMsIDI0NiwgNjQsIDgsIAorICAgIDMsIDI0NiwgNjcsIDgsIDMsIDIxNiwgNjgsIDgsIDMsIDIxNiwgNjIsIDgsIDMsIDIxNiwgMTE4LCA4LCAzLCAyMTYsIDc3LCAKKyAgICA4LCAzLCAyMTYsIDExMCwgOCwgMywgMjE2LCAxMTIsIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTcsIDQ3LCA4LCAzLCAyMTcsIAorICAgIDM0LCA4LCAzLCAyMTcsIDEwNiwgOCwgMywgMjE3LCA1NSwgOCwgMywgMjE1LCAxMDMsIDgsIDMsIDIxNSwgMTAyLCA4LCAzLCAKKyAgICAyMTUsIDEwNSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNiwgNiwgOCwgMywgMjE2LCAyLCA4LCAzLCAxMTIsIDgsIDMsIAorICAgIDIxNiwgMTQsIDgsIDMsIDIxNiwgMjE0LCA4LCAzLCAyMTcsIDIzLCA4LCAzLCAyMTYsIDIzOCwgOCwgMywgMjE1LCA4OCwgOCwgCisgICAgMywgMjE1LCA4MywgOCwgMywgMjE1LCAxMTksIDgsIDMsIDIxNSwgMTAxLCA4LCAzLCAyMTUsIDg5LCA4LCAzLCAyMTUsIDk5LCAKKyAgICA4LCAzLCAyNDgsIDExNSwgOCwgMywgMjQ4LCAxMTQsIDgsIDMsIDI0OCwgMTIwLCA4LCAzLCAyNDgsIDExNiwgOCwgMywgCisgICAgMjQ4LCAxMTcsIDgsIDMsIDI0OCwgMTE5LCA4LCAzLCAyNDgsIDExOCwgOCwgMywgMjQ4LCAxMzYsIDgsIDMsIDI0OCwgMTM1LCAKKyAgICA4LCAzLCAyNDgsIDE0MywgOCwgMywgMjQ4LCAxMzcsIDgsIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwNywgOCwgMywgCisgICAgMjQ4LCAxMDYsIDgsIDMsIDI0OCwgMTEwLCA4LCAzLCAyNDgsIDEwOSwgOCwgMywgMjQ4LCAxMTMsIDgsIDMsIDI0OCwgMTExLCAKKyAgICA4LCAzLCAyNDgsIDEyOCwgOCwgMywgMjQ4LCAxMzEsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAyNDgsIDEwMSwgOCwgMywgCisgICAgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgMTA4LCA4LCAzLCAyNDgsIDEwNCwgOCwgMywgMjQ4LCAxMDIsIDgsIDMsIDI0OCwgMTAzLCAKKyAgICA4LCAzLCAyMjksIDEzMSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTM4LCA4LCAzLCAyMjksIDEzMywgOCwgMywgCisgICAgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTM1LCA4LCAzLCAyMjksIDE0NywgOCwgMywgMjI5LCAxNDYsIDgsIDMsIDIyOSwgMTUzLCAKKyAgICA4LCAzLCAyMjksIDE0OCwgOCwgMywgMjI5LCAxMjMsIDgsIDMsIDIyOSwgMTIyLCA4LCAzLCAyMjksIDEyOSwgOCwgMywgCisgICAgMjI5LCAxMjQsIDgsIDMsIDIyOSwgMTM5LCA4LCAzLCAyMjksIDE0NSwgOCwgMywgMjI5LCAxNDMsIDgsIDMsIDIyOSwgMTE1LCAKKyAgICA4LCAzLCAyMjksIDExNCwgOCwgMywgMjI5LCAxMjAsIDgsIDMsIDIyOSwgMTE4LCA4LCAzLCAyMjksIDExNiwgOCwgMywgCisgICAgMjI5LCAxMTcsIDgsIDMsIDI0MSwgODQsIDgsIDMsIDI0MSwgODMsIDgsIDMsIDI0MSwgOTAsIDgsIDMsIDI0MSwgODUsIDgsIAorICAgIDMsIDI0MSwgODcsIDgsIDMsIDI0MSwgODYsIDgsIDMsIDI0MSwgODksIDgsIDMsIDI0MSwgODgsIDgsIDMsIDI0MSwgOTUsIAorICAgIDgsIDMsIDI0MSwgOTQsIDgsIDMsIDI0MSwgOTcsIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgNzgsIDgsIDMsIDI0MSwgCisgICAgNzksIDgsIDMsIDI0MSwgODEsIDgsIDMsIDI0MSwgODAsIDgsIDMsIDI0MSwgODIsIDgsIDMsIDI0MSwgOTEsIDgsIDMsIAorICAgIDI0MSwgOTMsIDgsIDMsIDI0MSwgOTIsIDgsIDMsIDI0MSwgNzcsIDgsIDMsIDIyOCwgMTk0LCA4LCAzLCAyMjgsIDE5MiwgOCwgCisgICAgMywgMjI4LCAyMzgsIDgsIDMsIDIyOCwgMTk3LCA4LCAzLCAyMjgsIDIyMCwgOCwgMywgMjI4LCAyMzQsIDgsIDMsIDIyOCwgCisgICAgMjMzLCA4LCAzLCAyMjksIDE4OCwgOCwgMywgMTk4LCA4LCAzLCAyMjksIDIwMiwgOCwgMywgMjI3LCAxOTAsIDgsIDMsIAorICAgIDIyNywgMTkyLCA4LCAzLCAyMjcsIDE5MSwgOCwgMywgMjI4LCA1NiwgOCwgMywgMjI4LCA0MywgOCwgMywgMjI4LCA3OSwgOCwgCisgICAgMywgMjI4LCA2NSwgOCwgMywgMjI5LCA4OCwgOCwgMywgMjI5LCAxMTIsIDgsIDMsIDIyOSwgOTksIDgsIDMsIDIyNywgMTg1LCAKKyAgICA4LCAzLCAyMjcsIDE4MSwgOCwgMywgMjI3LCAyNDIsIDgsIDMsIDIyNywgMTg5LCA4LCAzLCAyMjcsIDE4NywgOCwgMywgCisgICAgMjI3LCAxODgsIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTQ5LCAKKyAgICA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTIsIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1OCwgOCwgMywgCisgICAgMjQxLCAxNTcsIDgsIDMsIDI0MSwgMTYwLCA4LCAzLCAyNDEsIDE1OSwgOCwgMywgMjQxLCAxNDAsIDgsIDMsIDI0MSwgMTQyLCAKKyAgICA4LCAzLCAyNDEsIDE0MSwgOCwgMywgMjQxLCAxNDQsIDgsIDMsIDI0MSwgMTQ2LCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgCisgICAgMjQxLCAxNTQsIDgsIDMsIDI0MSwgMTU2LCA4LCAzLCAyNDEsIDE1NSwgOCwgMywgMjQxLCAxMzYsIDgsIDMsIDI0MSwgMTM1LCAKKyAgICA4LCAzLCAyNDEsIDE0MywgOCwgMywgMjQxLCAxMzksIDgsIDMsIDI0MSwgMTM3LCA4LCAzLCAyNDEsIDEzOCwgOCwgMywgCisgICAgMjQxLCAxMzAsIDgsIDMsIDI0MSwgMTI5LCA4LCAzLCAyNDEsIDEzNCwgOCwgMywgMjQxLCAxMzMsIDgsIDMsIDI0MSwgMTMxLCAKKyAgICA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjMyLCAyMDEsIDgsIDMsIDIzMiwgMTk1LCA4LCAzLCAyMzIsIDI0NywgOCwgMywgCisgICAgMjMyLCAyMDgsIDgsIDMsIDIzMiwgMjM5LCA4LCAzLCAyMzIsIDIzOCwgOCwgMywgMjMyLCAyNDIsIDgsIDMsIDIzMiwgMjQwLCAKKyAgICA4LCAzLCAyMzMsIDg1LCA4LCAzLCAyMzMsIDc1LCA4LCAzLCAyMzMsIDE0MSwgOCwgMywgMjMzLCA5NCwgOCwgMywgMjMyLCAKKyAgICA4NCwgOCwgMywgMjMyLCA4MywgOCwgMywgMjMyLCA4NiwgOCwgMywgMjMyLCA4NSwgOCwgMywgMjMyLCAxMjIsIDgsIDMsIAorICAgIDIzMiwgMTEyLCA4LCAzLCAyMzIsIDE2MiwgOCwgMywgMjMyLCAxMjYsIDgsIDMsIDIzMywgOCwgOCwgMywgMjMzLCA2NCwgOCwgCisgICAgMywgMjMzLCAyMywgOCwgMywgMjMyLCA3OSwgOCwgMywgMjMyLCA3NywgOCwgMywgMjMyLCAxMDMsIDgsIDMsIDIzMiwgODIsIAorICAgIDgsIDMsIDIzMiwgODAsIDgsIDMsIDIzMiwgODEsIDgsIDMsIDIzMiwgNTksIDgsIDMsIDIzMiwgNTgsIDgsIDMsIDIzMiwgCisgICAgNjcsIDgsIDMsIDIzMiwgNjIsIDgsIDMsIDIzMiwgNjAsIDgsIDMsIDIzMiwgNjEsIDgsIDMsIDI0MiwgMTk2LCA4LCAzLCAKKyAgICAyNDIsIDE5NSwgOCwgMywgMjQyLCAyMjEsIDgsIDMsIDI0MiwgMjA2LCA4LCAzLCAyNDIsIDIxMywgOCwgMywgMjQyLCAyMTIsIAorICAgIDgsIDMsIDI0MiwgMjE1LCA4LCAzLCAyNDIsIDIxNCwgOCwgMywgMjQzLCA5NiwgOCwgMywgMjQzLCA5MSwgOCwgMywgMjQzLCAKKyAgICAxNDIsIDgsIDMsIDI0MywgMTA2LCA4LCAzLCAyNDIsIDk4LCA4LCAzLCAyNDIsIDk3LCA4LCAzLCAyNDIsIDEwMCwgOCwgMywgCisgICAgMjQyLCA5OSwgOCwgMywgMjQyLCAxNjEsIDgsIDMsIDI0MiwgMTU5LCA4LCAzLCAyNDIsIDE4MSwgOCwgMywgMjQyLCAxNjksIAorICAgIDgsIDMsIDI0MywgNDAsIDgsIDMsIDI0MywgMzgsIDgsIDMsIDI0MywgNjksIDgsIDMsIDI0MywgNTEsIDgsIDMsIDI0MiwgCisgICAgODgsIDgsIDMsIDI0MiwgODcsIDgsIDMsIDI0MiwgMTIwLCA4LCAzLCAyNDIsIDk2LCA4LCAzLCAyNDIsIDg5LCA4LCAzLCAKKyAgICAyNDIsIDk1LCA4LCAzLCAyMzQsIDY3LCA4LCAzLCAyMzQsIDY2LCA4LCAzLCAyMzQsIDk4LCA4LCAzLCAyMzQsIDgxLCA4LCAKKyAgICAzLCAyMzQsIDkxLCA4LCAzLCAyMzQsIDk0LCA4LCAzLCAyMzQsIDkyLCA4LCAzLCAyMzQsIDIwOCwgOCwgMywgMjM0LCAxOTYsIAorICAgIDgsIDMsIDE3NiwgOCwgMywgMjM0LCAyMzQsIDgsIDMsIDIzMywgMjA2LCA4LCAzLCAyMzMsIDIxMSwgOCwgMywgMjMzLCAKKyAgICAyMDgsIDgsIDMsIDIzNCwgNiwgOCwgMywgMjM0LCAyLCA4LCAzLCAyMzQsIDM0LCA4LCAzLCAyMzQsIDEzLCA4LCAzLCAyMzQsIAorICAgIDE2MiwgOCwgMywgMjM0LCAxNDYsIDgsIDMsIDIzNCwgMTg4LCA4LCAzLCAyMzQsIDE2NSwgOCwgMywgMjMzLCAxOTUsIDgsIAorICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDIyMywgOCwgMywgMjMzLCAyMDUsIDgsIDMsIDIzMywgMTk4LCA4LCAzLCAyMzMsIAorICAgIDIwMiwgOCwgMywgMjQzLCAyMiwgOCwgMywgMjQzLCAyMSwgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAyMywgOCwgMywgCisgICAgMjQzLCAyNSwgOCwgMywgMjQzLCAyNCwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMiwgOCwgMywgMjQzLCAzNiwgOCwgCisgICAgMywgMjQzLCAzNCwgOCwgMywgMjQzLCAxMywgOCwgMywgMjQzLCAxMiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgCisgICAgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyMCwgOCwgMywgMjQzLCAxOSwgOCwgMywgMjQzLCAKKyAgICAyOCwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCA4LCA4LCAzLCAyNDMsIAorICAgIDcsIDgsIDMsIDI0MywgMTYsIDgsIDMsIDI0MywgMTEsIDgsIDMsIDI0MywgOSwgOCwgMywgMjQzLCAxMCwgOCwgMywgMjMwLCAKKyAgICAyNTQsIDgsIDMsIDIzMCwgMjU1LCA4LCAzLCAyMzEsIDE3LCA4LCAzLCAyMzEsIDE2LCA4LCAzLCAyMzEsIDE5LCA4LCAzLCAKKyAgICAyMzEsIDE4LCA4LCAzLCAyMzAsIDI0NSwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAzLCAyMzAsIDI1MCwgCisgICAgOCwgMywgMjMwLCAyNDksIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDI1MSwgOCwgMywgMjMxLCAwLCA4LCAzLCAyMzEsIAorICAgIDIsIDgsIDMsIDIzMSwgMSwgOCwgMywgMjMwLCAyNDEsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0OCwgOCwgMywgCisgICAgMjMwLCAyNDQsIDgsIDMsIDIzMCwgMjQyLCA4LCAzLCAyMzAsIDI0MywgOCwgMywgMjQwLCAxODcsIDgsIDMsIDI0MCwgMTg2LCAKKyAgICA4LCAzLCAyNDAsIDE5MywgOCwgMywgMjQwLCAxODgsIDgsIDMsIDI0MCwgMTkwLCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgCisgICAgMjQwLCAxOTIsIDgsIDMsIDI0MCwgMTkxLCA4LCAzLCAyNDAsIDE5OCwgOCwgMywgMjQwLCAxOTcsIDgsIDMsIDI0MCwgMjAwLCAKKyAgICA4LCAzLCAyNDAsIDE5OSwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTc4LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgCisgICAgMjQwLCAxODAsIDgsIDMsIDI0MCwgMTgzLCA4LCAzLCAyNDAsIDE4MiwgOCwgMywgMjQwLCAxODUsIDgsIDMsIDI0MCwgMTg0LCAKKyAgICA4LCAzLCAyNDAsIDE5NCwgOCwgMywgMjQwLCAxOTYsIDgsIDMsIDI0MCwgMTk1LCA4LCAzLCAyMjksIDI5LCA4LCAzLCAyMjksIAorICAgIDMxLCA4LCAzLCAyMjksIDMwLCA4LCAzLCAyMjksIDcyLCA4LCAzLCAyMjksIDcwLCA4LCAzLCAyMjksIDgyLCA4LCAzLCAKKyAgICAyMjksIDc1LCA4LCAzLCAyMjgsIDI0OCwgOCwgMywgMjI4LCAyNDcsIDgsIDMsIDIyOCwgMjQ5LCA4LCAzLCAyMjksIDEsIDgsIAorICAgIDMsIDIyOCwgMjU0LCA4LCAzLCAyMjksIDksIDgsIDMsIDIyOSwgMywgOCwgMywgMjI5LCA2MywgOCwgMywgMjI5LCA2OSwgOCwgCisgICAgMywgMjI5LCA2NSwgOCwgMywgMjQxLCAxNjMsIDgsIDMsIDI0MSwgMTczLCA4LCAzLCAyNDEsIDE4MiwgOCwgMywgMjQyLCAyLCAKKyAgICA4LCAzLCAyNDEsIDI1MCwgOCwgMywgMTYyLCA4LCAzLCAyNDIsIDEzLCA4LCAzLCAyNDAsIDIxMywgOCwgMywgMjQwLCAyMTIsIAorICAgIDgsIDMsIDI0MCwgMjE1LCA4LCAzLCAyNDAsIDIxNCwgOCwgMywgMjQwLCAyNDksIDgsIDMsIDI0MCwgMjQwLCA4LCAzLCAKKyAgICAyNDEsIDc1LCA4LCAzLCAyNDEsIDU0LCA4LCAzLCAyNDEsIDIwMSwgOCwgMywgMjQxLCAyNDUsIDgsIDMsIDI0MSwgMjEzLCAKKyAgICA4LCAzLCAyMTIsIDQzLCA4LCAzLCAyMTIsIDI4LCA4LCAzLCAyMTIsIDY1LCA4LCAzLCAyMTIsIDUxLCA4LCAzLCAyMTEsIAorICAgIDE4NSwgOCwgMywgMjExLCAxODcsIDgsIDMsIDIxMSwgMTg2LCA4LCAzLCAyMTEsIDIwMywgOCwgMywgMjExLCAyMjcsIDgsIAorICAgIDMsIDIxMSwgMjEwLCA4LCAzLCAyMTIsIDUsIDgsIDMsIDIxMiwgMjIsIDgsIDMsIDIxMiwgMTAsIDgsIDMsIDIxMCwgMzAsIAorICAgIDgsIDMsIDIxMCwgMjksIDgsIDMsIDIxMCwgNDQsIDgsIDMsIDIxMCwgMzIsIDgsIDMsIDIxMCwgMzcsIDgsIDMsIDIxMCwgCisgICAgMzksIDgsIDMsIDIxMCwgMzgsIDgsIDMsIDIxMCwgMTAyLCA4LCAzLCAyMTAsIDk5LCA4LCAzLCAyMTAsIDExNiwgOCwgMywgCisgICAgMjEwLCAxMDUsIDgsIDMsIDIxMCwgNiwgOCwgMywgMjEwLCA4LCA4LCAzLCAyMTAsIDcsIDgsIDMsIDIxMCwgMTksIDgsIDMsIAorICAgIDIxMCwgMTgsIDgsIDMsIDIxMCwgMjMsIDgsIDMsIDIxMCwgMjAsIDgsIDMsIDIxMCwgODQsIDgsIDMsIDIxMCwgOTQsIDgsIAorICAgIDMsIDIxMCwgODgsIDgsIDMsIDIxMCwgMiwgOCwgMywgMjEwLCAxLCA4LCAzLCAyMTAsIDEzLCA4LCAzLCAyMTAsIDUsIDgsIAorICAgIDMsIDIxMCwgMywgOCwgMywgMjEwLCA0LCA4LCAzLCAyMDksIDI0NSwgOCwgMywgMjA5LCAyNDQsIDgsIDMsIDIwOSwgMjUwLCAKKyAgICA4LCAzLCAyMDksIDI0OCwgOCwgMywgMjA5LCAyNDYsIDgsIDMsIDIwOSwgMjQ3LCA4LCAzLCAyNTAsIDM2LCA4LCAzLCAyNTAsIAorICAgIDMyLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDQ1LCA4LCAzLCAyNTAsIDU2LCA4LCAzLCAyNTAsIDUwLCA4LCAzLCAKKyAgICAyNTAsIDU4LCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAyNTAsIDIzMiwgOCwgMywgMjUwLCAyMjUsIDgsIDMsIDI1MSwgNDEsIDgsIAorICAgIDMsIDI1MSwgMywgOCwgMywgMjQ5LCAxMTIsIDgsIDMsIDI0OSwgMTE0LCA4LCAzLCAyNDksIDExMywgOCwgMywgMjQ5LCAKKyAgICAxNjEsIDgsIDMsIDI0OSwgMTUyLCA4LCAzLCAyNDksIDI0NiwgOCwgMywgMjQ5LCAxNzcsIDgsIDMsIDI1MCwgMTY4LCA4LCAKKyAgICAzLCAyNTAsIDE5OCwgOCwgMywgMjUwLCAxNzMsIDgsIDMsIDI0OSwgOTIsIDgsIDMsIDI0OSwgOTAsIDgsIDMsIDI0OSwgCisgICAgMTIwLCA4LCAzLCAyNDksIDExMCwgOCwgMywgMjQ5LCA5NywgOCwgMywgMjQ5LCAxMDksIDgsIDMsIDI0OSwgNzEsIDgsIDMsIAorICAgIDI0OSwgNzAsIDgsIDMsIDI0OSwgODEsIDgsIDMsIDI0OSwgNzcsIDgsIDMsIDI0OSwgNzIsIDgsIDMsIDI0OSwgNzQsIDgsIAorICAgIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIAorICAgIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIAorICAgIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIAorICAgIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIAorICAgIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIAorICAgIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIAorICAgIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAxMDgsIDgsIDMsIDIyNywgMTA3LCA4LCAzLCAyMjcsIAorICAgIDExMywgOCwgMywgMjI3LCAxMDksIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCAxMTEsIDgsIAorICAgIDMsIDIyNywgMTE4LCA4LCAzLCAyMjcsIDExNywgOCwgMywgMjI3LCAxMjEsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIAorICAgIDEwMSwgOCwgMywgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTA1LCA4LCAzLCAyMjcsIDEwNiwgOCwgMywgMjI3LCAxMTQsIDgsIAorICAgIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk2LCA4LCAzLCAyMjcsIDEwNCwgOCwgMywgMjI3LCAxMDAsIDgsIDMsIDIyNywgCisgICAgOTcsIDgsIDMsIDIyNywgOTgsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgOTUsIDgsIDMsIAorICAgIDIyNywgOTQsIDgsIDMsIDIyNywgOTIsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIxOSwgMTI5LCA4LCAzLCAxOTUsIDgsIDMsIAorICAgIDIxOSwgMTkzLCA4LCAzLCAyMTksIDEzMiwgOCwgMywgMjE5LCAxODUsIDgsIDMsIDIxOSwgMTg4LCA4LCAzLCAyMTksIDE4NiwgCisgICAgOCwgMywgMjIxLCAyMjgsIDgsIDMsIDIyMSwgMjE2LCA4LCAzLCAyMDYsIDgsIDMsIDIyMSwgMjM2LCA4LCAzLCAyMTgsIDI5LCAKKyAgICA4LCAzLCAyMTgsIDMxLCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTksIDM2LCA4LCAzLCAyMTksIDI1LCA4LCAzLCAyMTksIAorICAgIDYwLCA4LCAzLCAyMTksIDQwLCA4LCAzLCAyMjAsIDExNiwgOCwgMywgMjIxLCAxODMsIDgsIDMsIDIyMCwgMTQxLCA4LCAzLCAKKyAgICAyMTgsIDYsIDgsIDMsIDIxOCwgNCwgOCwgMywgMjE4LCA4NCwgOCwgMywgMjE4LCAyOCwgOCwgMywgMjE4LCAxMCwgOCwgMywgCisgICAgMjE4LCAxOCwgOCwgMywgMjE3LCAxNjcsIDgsIDMsIDIxNywgMTY2LCA4LCAzLCAyMTcsIDIzMywgOCwgMywgMjE3LCAxNzQsIAorICAgIDgsIDMsIDIxNywgMTY5LCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE4LCAxODgsIDgsIDMsIDIxOCwgMTg3LCA4LCAzLCAKKyAgICAyMTgsIDE5NCwgOCwgMywgMjE4LCAxODksIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MywgOCwgMywgMjE4LCAxOTIsIAorICAgIDgsIDMsIDIxOCwgMjAyLCA4LCAzLCAyMTgsIDIwMCwgOCwgMywgMjE4LCAyMjUsIDgsIDMsIDIxOCwgMjAzLCA4LCAzLCAKKyAgICAyMTgsIDE4MywgOCwgMywgMjE4LCAxODIsIDgsIDMsIDIxOCwgMTg2LCA4LCAzLCAyMTgsIDE4NCwgOCwgMywgMjE4LCAxOTYsIAorICAgIDgsIDMsIDIxOCwgMTk5LCA4LCAzLCAyMTgsIDE5NywgOCwgMywgMjE4LCAxNzksIDgsIDMsIDIxOCwgMTc3LCA4LCAzLCAKKyAgICAyMTgsIDE4MSwgOCwgMywgMjE4LCAxODAsIDgsIDMsIDIxOCwgMTcyLCA4LCAzLCAyMTgsIDE3MSwgOCwgMywgMjE4LCAxNzYsIAorICAgIDgsIDMsIDIxOCwgMTc1LCA4LCAzLCAyMTgsIDE3MywgOCwgMywgMjE4LCAxNzQsIDgsIDMsIDIxMCwgNzcsIDgsIDMsIDIxMCwgCisgICAgNzYsIDgsIDMsIDIxMCwgODIsIDgsIDMsIDIxMCwgNzksIDgsIDMsIDIxMCwgNTksIDgsIDMsIDIxMCwgNjEsIDgsIDMsIAorICAgIDIxMCwgNjAsIDgsIDMsIDIxMCwgNjQsIDgsIDMsIDIxMCwgNjMsIDgsIDMsIDIxMCwgNjcsIDgsIDMsIDIxMCwgNjUsIDgsIAorICAgIDMsIDIxMCwgNzEsIDgsIDMsIDIxMCwgNzAsIDgsIDMsIDIxMCwgNzQsIDgsIDMsIDIxMCwgNzIsIDgsIDMsIDIxMCwgNTUsIAorICAgIDgsIDMsIDIxMCwgNTQsIDgsIDMsIDIxMCwgNjIsIDgsIDMsIDIxMCwgNTgsIDgsIDMsIDIxMCwgNTYsIDgsIDMsIDIxMCwgCisgICAgNTcsIDgsIDMsIDIxMCwgNDcsIDgsIDMsIDIxMCwgNDYsIDgsIDMsIDIxMCwgNTEsIDgsIDMsIDIxMCwgNTAsIDgsIDMsIAorICAgIDIxMCwgNDgsIDgsIDMsIDIxMCwgNDksIDgsIDMsIDI1MCwgMTQ0LCA4LCAzLCAyNTAsIDE0MSwgOCwgMywgMjUwLCAxNjUsIAorICAgIDgsIDMsIDI1MCwgMTUyLCA4LCAzLCAyNTAsIDczLCA4LCAzLCAyNTAsIDcyLCA4LCAzLCAyNTAsIDc1LCA4LCAzLCAyNTAsIAorICAgIDc0LCA4LCAzLCAyNTAsIDg3LCA4LCAzLCAyNTAsIDg2LCA4LCAzLCAyNTAsIDk0LCA4LCAzLCAyNTAsIDg5LCA4LCAzLCAKKyAgICAyNTAsIDEyMywgOCwgMywgMjUwLCAxMjEsIDgsIDMsIDI1MCwgMTM5LCA4LCAzLCAyNTAsIDEyOSwgOCwgMywgMjUwLCA2NywgCisgICAgOCwgMywgMjUwLCA3NywgOCwgMywgMjUwLCA3MSwgOCwgMywgMjUwLCA2OCwgOCwgMywgMjUwLCA3MCwgOCwgMywgMjUwLCAKKyAgICA2MSwgOCwgMywgMjUwLCA2MCwgOCwgMywgMjUwLCA2NSwgOCwgMywgMjUwLCA2NCwgOCwgMywgMjUwLCA2MiwgOCwgMywgCisgICAgMjUwLCA2MywgOCwgMywgMjIyLCAxNzcsIDgsIDMsIDIyMiwgMTgxLCA4LCAzLCAyMjIsIDE2MCwgOCwgMywgMjIyLCAxNjEsIAorICAgIDgsIDMsIDIyMiwgMTY0LCA4LCAzLCAyMjIsIDE2MywgOCwgMywgMjIyLCAxNjcsIDgsIDMsIDIyMiwgMTY1LCA4LCAzLCAKKyAgICAyMjIsIDE3MSwgOCwgMywgMjIyLCAxNzAsIDgsIDMsIDIyMiwgMTc2LCA4LCAzLCAyMjIsIDE3MiwgOCwgMywgMjIyLCAxNTYsIAorICAgIDgsIDMsIDIyMiwgMTU0LCA4LCAzLCAyMjIsIDE2MiwgOCwgMywgMjIyLCAxNTksIDgsIDMsIDIyMiwgMTU3LCA4LCAzLCAKKyAgICAyMjIsIDE1OCwgOCwgMywgMjIyLCAxNDksIDgsIDMsIDIyMiwgMTQ4LCA4LCAzLCAyMjIsIDE1MywgOCwgMywgMjIyLCAxNTIsIAorICAgIDgsIDMsIDIyMiwgMTUwLCA4LCAzLCAyMjIsIDE1MSwgOCwgMywgMjI4LCAzOSwgOCwgMywgMjI4LCAzOCwgOCwgMywgMjI4LCAKKyAgICA0MSwgOCwgMywgMjI4LCA0MCwgOCwgMywgMjI4LCAzMSwgOCwgMywgMjI4LCAzMywgOCwgMywgMjI4LCAzMiwgOCwgMywgCisgICAgMjI4LCAzNSwgOCwgMywgMjI4LCAzNCwgOCwgMywgMjI4LCAzNywgOCwgMywgMjI4LCAzNiwgOCwgMywgMjI4LCAyNiwgOCwgCisgICAgMywgMjI4LCAyNSwgOCwgMywgMjI4LCAzMCwgOCwgMywgMjI4LCAyOSwgOCwgMywgMjI4LCAyNywgOCwgMywgMjI4LCAyOCwgCisgICAgOCwgMywgMjI4LCAyMCwgOCwgMywgMjI4LCAxOSwgOCwgMywgMjI4LCAyNCwgOCwgMywgMjI4LCAyMywgOCwgMywgMjI4LCAKKyAgICAyMSwgOCwgMywgMjI4LCAyMiwgOCwgMywgMjIwLCA3NCwgOCwgMywgMjIwLCA2OSwgOCwgMywgMjIwLCAxMDQsIDgsIDMsIAorICAgIDIyMCwgODUsIDgsIDMsIDIxOSwgMjE3LCA4LCAzLCAyMTksIDIxOSwgOCwgMywgMjE5LCAyMTgsIDgsIDMsIDIxOSwgMjM4LCAKKyAgICA4LCAzLCAyMTksIDIzNSwgOCwgMywgMjIwLCA5LCA4LCAzLCAyMjAsIDAsIDgsIDMsIDIyMCwgNDQsIDgsIDMsIDIyMCwgMzcsIAorICAgIDgsIDMsIDIyMCwgNjUsIDgsIDMsIDIyMCwgNTIsIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDIxMSwgOCwgMywgMjE5LCAKKyAgICAyMjcsIDgsIDMsIDIxOSwgMjE2LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAKKyAgICAzLCAyMTksIDE5NSwgOCwgMywgMjE5LCAyMDIsIDgsIDMsIDIxOSwgMTk5LCA4LCAzLCAyMTksIDE5NywgOCwgMywgMjE5LCAKKyAgICAxOTgsIDgsIDMsIDIyMywgMTQ0LCA4LCAzLCAyMjMsIDEzOCwgOCwgMywgMjA1LCA4LCAzLCAyMjMsIDE1MCwgOCwgMywgCisgICAgMjIyLCAxMjIsIDgsIDMsIDIyMiwgMTI0LCA4LCAzLCAyMjIsIDEyMywgOCwgMywgMjIyLCAxOTAsIDgsIDMsIDIyMiwgMTgzLCAKKyAgICA4LCAzLCAyMjIsIDIxMywgOCwgMywgMjIyLCAxOTQsIDgsIDMsIDIyMywgNDYsIDgsIDMsIDIyMywgMTMxLCA4LCAzLCAyMjMsIAorICAgIDg0LCA4LCAzLCAyMjIsIDExNSwgOCwgMywgMjIyLCAxMTIsIDgsIDMsIDIyMiwgMTQyLCA4LCAzLCAyMjIsIDEyMSwgOCwgMywgCisgICAgMjIyLCAxMTcsIDgsIDMsIDIyMiwgMTE4LCA4LCAzLCAyMjIsIDk3LCA4LCAzLCAyMjIsIDk2LCA4LCAzLCAyMjIsIDEwMiwgCisgICAgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTksIDgsIDMsIDIzNSwgMTA0LCA4LCAzLCAyMzUsIAorICAgIDEwMywgOCwgMywgMjM1LCAxMTQsIDgsIDMsIDIzNSwgMTA1LCA4LCAzLCAyMzUsIDExMCwgOCwgMywgMjM1LCAxMDksIDgsIAorICAgIDMsIDIzNSwgMTEyLCA4LCAzLCAyMzUsIDExMSwgOCwgMywgMjM1LCA0NywgOCwgMywgMjM1LCA0NiwgOCwgMywgMjM1LCA0OSwgCisgICAgOCwgMywgMjM1LCA0OCwgOCwgMywgMjM1LCA2MiwgOCwgMywgMjM1LCA2MCwgOCwgMywgMjM1LCA3NCwgOCwgMywgMjM1LCAKKyAgICA2NCwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCAzOCwgOCwgMywgMjM1LCA1NywgOCwgMywgMjM1LCA0NSwgOCwgMywgCisgICAgMjM1LCA0MiwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCAzMiwgOCwgMywgMjM1LCAzMSwgOCwgMywgMjM1LCAzNiwgOCwgCisgICAgMywgMjM1LCAzNSwgOCwgMywgMjM1LCAzMywgOCwgMywgMjM1LCAzNCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA0NywgCisgICAgOCwgMywgMjI0LCA1NiwgOCwgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCAKKyAgICA1NSwgOCwgMywgMjI0LCA1NCwgOCwgMywgMjI0LCAyLCA4LCAzLCAyMjMsIDI1NSwgOCwgMywgMjI0LCA0LCA4LCAzLCAyMjQsIAorICAgIDMsIDgsIDMsIDIyNCwgMzYsIDgsIDMsIDIyNCwgMzUsIDgsIDMsIDIyNCwgNDUsIDgsIDMsIDIyNCwgMzksIDgsIDMsIDIyMywgCisgICAgMjUwLCA4LCAzLCAyMjMsIDI0NiwgOCwgMywgMjI0LCAzMywgOCwgMywgMjIzLCAyNTQsIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAKKyAgICAyMjMsIDI1MywgOCwgMywgMjIzLCAyMzAsIDgsIDMsIDIyMywgMjI4LCA4LCAzLCAyMjMsIDI0MCwgOCwgMywgMjIzLCAyMzMsIAorICAgIDgsIDMsIDIyMywgMjMxLCA4LCAzLCAyMjMsIDIzMiwgOCwgMywgMjM1LCA5MywgOCwgMywgMjM1LCA5MiwgOCwgMywgMjM1LCAKKyAgICA5OSwgOCwgMywgMjM1LCA5NCwgOCwgMywgMjM1LCA5NiwgOCwgMywgMjM1LCA5NSwgOCwgMywgMjM1LCA5OCwgOCwgMywgCisgICAgMjM1LCA5NywgOCwgMywgMjM1LCA4NCwgOCwgMywgMjM1LCA4NiwgOCwgMywgMjM1LCA4NSwgOCwgMywgMjM1LCA4OSwgOCwgCisgICAgMywgMjM1LCA4OCwgOCwgMywgMjM1LCA5MSwgOCwgMywgMjM1LCA5MCwgOCwgMywgMjM1LCA4MCwgOCwgMywgMjM1LCA3OSwgCisgICAgOCwgMywgMjM1LCA4NywgOCwgMywgMjM1LCA4MywgOCwgMywgMjM1LCA4MSwgOCwgMywgMjM1LCA4MiwgOCwgMywgMjM1LCAKKyAgICA3NiwgOCwgMywgMjM1LCA3NSwgOCwgMywgMjM1LCA3OCwgOCwgMywgMjM1LCA3NywgOCwgMywgMjI4LCAxNjcsIDgsIDMsIAorICAgIDIyOCwgMTY2LCA4LCAzLCAyMjgsIDE3NCwgOCwgMywgMjI4LCAxNjgsIDgsIDMsIDIyOCwgMTcwLCA4LCAzLCAyMjgsIDE2OSwgCisgICAgOCwgMywgMjI4LCAxNzMsIDgsIDMsIDIyOCwgMTcxLCA4LCAzLCAyMjgsIDE1NiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIAorICAgIDIyOCwgMTYyLCA4LCAzLCAyMjgsIDE2MSwgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTYzLCA4LCAzLCAyMjgsIDE1MSwgCisgICAgOCwgMywgMjI4LCAxNjAsIDgsIDMsIDIyOCwgMTU1LCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTMsIDgsIDMsIAorICAgIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNTAsIDgsIDMsIDIyOCwgMTQ5LCA4LCAzLCAyMjgsIDE0NywgCisgICAgOCwgMywgMjI4LCAxNDgsIDgsIDMsIDIyNywgMTQxLCA4LCAzLCAyMjcsIDE0MCwgOCwgMywgMjI3LCAxNTIsIDgsIDMsIAorICAgIDIyNywgMTQ1LCA4LCAzLCAyMjcsIDE0OSwgOCwgMywgMjI3LCAxNDgsIDgsIDMsIDIyNywgMTUxLCA4LCAzLCAyMjcsIDE1MCwgCisgICAgOCwgMywgMjI3LCAxMjgsIDgsIDMsIDIyNywgMTMwLCA4LCAzLCAyMjcsIDEyOSwgOCwgMywgMjI3LCAxMzQsIDgsIDMsIAorICAgIDIyNywgMTMzLCA4LCAzLCAyMjcsIDEzOCwgOCwgMywgMjI3LCAxMzUsIDgsIDMsIDIyNywgMTI2LCA4LCAzLCAyMjcsIDEyNCwgCisgICAgOCwgMywgMjI3LCAxMzIsIDgsIDMsIDIyNywgMTI3LCA4LCAzLCAyMTEsIDE1MCwgOCwgMywgMjExLCAxNDksIDgsIDMsIAorICAgIDIxMSwgMTU3LCA4LCAzLCAyMTEsIDE1MiwgOCwgMywgMjExLCAxNTQsIDgsIDMsIDIxMSwgMTUzLCA4LCAzLCAyMTEsIDE1NiwgCisgICAgOCwgMywgMjExLCAxNTUsIDgsIDMsIDIxMSwgMTM5LCA4LCAzLCAyMTEsIDE0MCwgOCwgMywgMjExLCAxNDQsIDgsIDMsIAorICAgIDIxMSwgMTQzLCA4LCAzLCAyMTEsIDE0OCwgOCwgMywgMjExLCAxNDYsIDgsIDMsIDIxMSwgMTIxLCA4LCAzLCAyMTEsIDExOSwgCisgICAgOCwgMywgMjExLCAxMzEsIDgsIDMsIDIxMSwgMTI0LCA4LCAzLCAyMTEsIDEyMiwgOCwgMywgMjExLCAxMjMsIDgsIDMsIAorICAgIDIxMCwgMjUwLCA4LCAzLCAyMTAsIDI0OCwgOCwgMywgMjExLCA4LCA4LCAzLCAyMTAsIDI1MSwgOCwgMywgMjExLCAyLCA4LCAKKyAgICAzLCAyMTEsIDEsIDgsIDMsIDIxMSwgNSwgOCwgMywgMjExLCAzLCA4LCAzLCAyMTAsIDE5MSwgOCwgMywgMjEwLCAxOTAsIDgsIAorICAgIDMsIDIxMCwgMTk0LCA4LCAzLCAyMTAsIDE5MiwgOCwgMywgMjEwLCAyMjQsIDgsIDMsIDIxMCwgMjIxLCA4LCAzLCAyMTAsIAorICAgIDI0NCwgOCwgMywgMjEwLCAyMjgsIDgsIDMsIDIxMCwgMTgyLCA4LCAzLCAyMTAsIDE3OCwgOCwgMywgMjEwLCAyMTIsIDgsIAorICAgIDMsIDIxMCwgMTg5LCA4LCAzLCAyMTAsIDE4NSwgOCwgMywgMjEwLCAxODYsIDgsIDMsIDIxMCwgMTYyLCA4LCAzLCAyMTAsIAorICAgIDE2MSwgOCwgMywgMjEwLCAxNjksIDgsIDMsIDIxMCwgMTY1LCA4LCAzLCAyMTAsIDE2MywgOCwgMywgMjEwLCAxNjQsIDgsIAorICAgIDM0LCAyMjQsIDM2LCA4LCAzNCwgMjMyLCAyNDcsIDgsIDM0LCAyMzQsIDY3LCA4LCAzNCwgMjI3LCAxNDUsIDgsIDM0LCAKKyAgICAyNDksIDc3LCA4LCAzNCwgMjE4LCAxOTQsIDgsIDM0LCAyNDMsIDE5LCA4LCAzNCwgMjQzLCA1MSwgOCwgMzQsIDIzMCwgCisgICAgMjM1LCA4LCAzNCwgMjQwLCAxODcsIDgsIDM0LCAyMzIsIDYxLCA4LCAzNCwgMjUyLCA5MSwgOCwgMzQsIDIzMCwgMTMxLCA4LCAKKyAgICAzNCwgMjEwLCAyNDQsIDgsIDM0LCAyMjQsIDEyNCwgOCwgMzQsIDI0MCwgMTgxLCA4LCAzNCwgMjE3LCA0NywgOCwgMzQsIAorICAgIDI0MywgMTQyLCA4LCAzNCwgMjEwLCA1LCA4LCAzNCwgMjQ5LCA3MSwgOCwgMzQsIDI0OCwgMTAzLCA4LCAzNCwgMjUxLCAKKyAgICAxMDYsIDgsIDM0LCAyNDMsIDE1LCA4LCAzNCwgMjI3LCAxMzUsIDgsIDM0LCAyMTUsIDExOSwgOCwgMzQsIDIyNiwgMTc5LCAKKyAgICA4LCAzNCwgMjM1LCA4MCwgOCwgMzQsIDIxMCwgMTksIDgsIDM0LCAyMjQsIDEwMywgOCwgMzQsIDI0MSwgMTE1LCA4LCAzNCwgCisgICAgMjEwLCAyNTAsIDgsIDM0LCAyMTIsIDExMiwgOCwgMzQsIDIxOSwgMjAyLCA4LCAzNCwgMjEzLCAyNDQsIDgsIDM0LCAyMTAsIAorICAgIDExNiwgOCwgMzQsIDIzNSwgNzQsIDgsIDM0LCAyMjcsIDEwMCwgOCwgMzQsIDIzNSwgNzgsIDgsIDM0LCAyNDIsIDE2MSwgOCwgCisgICAgMzQsIDIzNSwgOTgsIDgsIDM0LCAyMTEsIDIyNywgOCwgMzQsIDI0NiwgODYsIDgsIDM0LCAyMTksIDIxNSwgOCwgMzQsIAorICAgIDIzMiwgMjQyLCA4LCAzNCwgMjQ5LCA4MSwgOCwgMzQsIDI0OSwgMTEzLCA4LCAzNCwgMjUwLCA0NSwgOCwgMzQsIDI0MCwgCisgICAgMTg0LCA4LCAzNCwgMjIwLCA3NCwgOCwgMzQsIDIxMCwgNCwgOCwgMzQsIDIyMCwgMCwgOCwgMzQsIDI1MCwgMTM5LCA4LCAKKyAgICAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3OCwgOCwgMzQsIDIzNCwgMTg4LCAyMzIsIDIwMiwgMSwgMjUyLCAxOTksIAorICAgIDIzMiwgMjAyLCAxLCAxOTEsIDIzMiwgMjAyLCAxLCAyMjUsIDE1MCwgMjMyLCAyMDIsIDEsIDI0OCwgMjI5LCAyMzIsIDIwMiwgCisgICAgMSwgMjE3LCAxMDYsIDIzMiwgMjAyLCAxLCAyMTYsIDIwOSwgMjMyLCAyMDIsIDEsIDI0MywgMTQyLCAyMzIsIDIwMiwgMSwgCisgICAgMTc2LCAyMzIsIDIwMiwgMSwgMjM0LCAxMzgsIDIzMiwgMjAyLCAxLCAyMzUsIDE0NywgMjMyLCAyMDIsIDEsIDI1MSwgNDEsIAorICAgIDIzMiwgMjAyLCAxLCAyNTAsIDE2NSwgMjMyLCAyMDIsIDEsIDI0NiwgNDYsIDIzMiwgMjAyLCAxLCAyMTUsIDE4NCwgMjMyLCAKKyAgICAyMDIsIDEsIDIxNSwgMTc2LCAyMzIsIDIwMiwgMSwgMTg2LCAyMzIsIDIwMiwgMSwgMTk4LCAyMzIsIDIwMiwgMSwgMjMzLCAKKyAgICAxNDEsIDIzMiwgMjAyLCAxLCAyMDYsIDIzMiwgMjAyLCAxLCAyMTAsIDgyLCAyMzIsIDIwMiwgMSwgMjEwLCAxMTYsIDIzMiwgCisgICAgMjAyLCAxLCAyMjksIDgyLCAyMzIsIDIwMiwgMSwgMTYyLCAyMzIsIDIwMiwgMSwgMjExLCAxNjUsIDIzMiwgMjAyLCAxLCAKKyAgICAyNDEsIDE5NiwgMjMyLCAyMDIsIDEsIDI0NCwgMjA0LCAyMzIsIDIwMiwgMSwgMjEyLCA2NSwgMjMyLCAyMDIsIDEsIDIyMCwgCisgICAgMTA0LCAyMzIsIDIwMiwgMSwgMTkyLCAyMzIsIDIwMiwgMSwgMjQzLCAwLCAyMzIsIDIwMiwgMSwgNjEsIDIzMiwgMjAyLCAxLCAKKyAgICAyNTQsIDI1MiwgMjMyLCAyMDIsIDEsIDc2LCAyMzIsIDIwMiwgMSwgMjQ1LCA2MywgMjMyLCAyMDIsIDEsIDc0LCAyMzIsIAorICAgIDIwMiwgMSwgNzgsIDIzMiwgMjAyLCAxLCA2OSwgMjMyLCAyMDIsIDEsIDIxNCwgMjE0LCAyMzIsIDIwMiwgMSwgMjE0LCAKKyAgICAyMDgsIDIzMiwgMjAyLCAxLCAyMjYsIDIzOCwgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjE2LCAxMTgsIDIzMiwgCisgICAgMjAyLCAxLCAxMzgsIDIyOSwgMjM0LCAyMjUsIDE5LCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNDksIDgwLCAyMzIsIAorICAgIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNTEsIDIxMywgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMTk4LCAyMzIsIDIwMiwgCisgICAgMSwgMTM4LCAyMzAsIDM3LCAyMzUsIDEyMSwgMjMyLCAyMDIsIDIyNCwgMTQ0LCAyNDksIDIyNywgMjMyLCAyMDIsIDIyNCwgCisgICAgMTQ0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQxLCAzLCAyNDUsIDIxNywgNDEsIDMsIDI0NSwgMjEzLCA0MSwgMywgMjQxLCAKKyAgICAyMjcsIDQxLCAzLCAyMTIsIDE3LCA0MSwgMywgMjEyLCAxNiwgNDEsIDMsIDIyNSwgMjE0LCA0MSwgMywgMjUyLCAyMSwgNDEsIAorICAgIDMsIDI1MiwgNzQsIDQxLCAzLCAyMzEsIDEyMSwgNDEsIDMsIDIzMywgMjUzLCA0MSwgMywgMjMxLCAxMSwgNDEsIDMsIDI0MywgCisgICAgODIsIDQxLCAzLCAyNDQsIDE1NSwgNDEsIDMsIDIxMywgMjUwLCA0MSwgMywgMjE3LCAxMiwgNDEsIDMsIDIxNiwgMTk1LCAKKyAgICA0MSwgMywgMjQ4LCAyNCwgNDEsIDMsIDI0OCwgMjEsIDQxLCAzLCAyMzMsIDU2LCA0MSwgMywgMjIzLCAxMTEsIDQxLCAzLCAKKyAgICAyNDgsIDg1LCA0MSwgMywgMjI5LCAxNDQsIDQxLCAzLCAyMjEsIDE3MiwgNDEsIDMsIDIyMCwgNjMsIDQxLCAzLCAyMTAsIAorICAgIDkyLCA0MSwgMywgMjEwLCA3MywgNDEsIDMsIDI1MCwgMTkwLCA0MSwgMywgMjM1LCAxMzAsIDQxLCAzLCAyMjgsIDE4MSwgCisgICAgNDEsIDMsIDIxMSwgNDQsIDQxLCAzLCAyMzQsIDE4NywgNDEsIDMsIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCisgICAgMjMxLCA4NSwgNDEsIDMsIDIyOSwgMTA4LCA0MSwgMywgMjI3LCAxNTksIDQxLCAzLCA3NCwgNDEsIDMsIDIzNiwgNiwgNDEsIAorICAgIDMsIDI0MSwgMTg3LCA0MSwgMywgMjQxLCAxNjcsIDQxLCAzLCAyMTEsIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgCisgICAgMjI1LCAxMTEsIDQxLCAzLCAyNTIsIDE5LCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDIzMSwgMTE0LCA0MSwgMywgMjMzLCAKKyAgICAyNTAsIDQxLCAzLCAyMzEsIDgsIDQxLCAzLCAyNDMsIDc4LCA0MSwgMywgMjQ0LCAxMjksIDQxLCAzLCAyMTMsIDE3NiwgNDEsIAorICAgIDMsIDIxNiwgMTE4LCA0MSwgMywgMjE2LCAxNzYsIDQxLCAzLCAyNDgsIDE2LCA0MSwgMywgMjQ4LCAyMCwgNDEsIDMsIDIzMiwgCisgICAgMjQ3LCA0MSwgMywgMjIzLCAzOCwgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMjksIDEzOCwgNDEsIDMsIDIxOSwgMTkzLCAKKyAgICA0MSwgMywgMjIwLCAzNCwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIDY5LCA0MSwgMywgMjUwLCA1OSwgNDEsIDMsIAorICAgIDIzNSwgMTE0LCA0MSwgMywgMjI4LCAxNzQsIDQxLCAzLCAyMTEsIDgsIDQxLCAzLCAyMzQsIDk4LCA0MSwgMywgMjI5LCA0OCwgCisgICAgNDEsIDMsIDI0MiwgMjIxLCA0MSwgMywgMjMwLCAyMzUsIDQxLCAzLCAyMjgsIDIzOCwgNDEsIDMsIDIyNywgMTUyLCA0MSwgCisgICAgMywgNjEsIDQxLCAzLCAyNTQsIDEzMSwgNDEsIDMsIDIyOSwgNzcsIDQxLCAzLCAxNjIsIDQxLCAzLCAyNDIsIDI1LCA0MSwgCisgICAgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTEsIDQxLCAzLCAyNTIsIDI2LCA0MSwgMywgMjUyLCAxOTksIAorICAgIDQxLCAzLCAyMzEsIDEyOSwgNDEsIDMsIDIzNCwgMSwgNDEsIDMsIDIzNCwgMCwgNDEsIDMsIDIzMSwgMTUsIDQxLCAzLCAKKyAgICAyNDMsIDg2LCA0MSwgMywgMjQ0LCAyMDQsIDQxLCAzLCAyMTQsIDI3LCA0MSwgMywgMjE3LCAxMDYsIDQxLCAzLCAyMTYsIAorICAgIDIwOSwgNDEsIDMsIDI0OCwgMzMsIDQxLCAzLCAyNDgsIDIzLCA0MSwgMywgMjMzLCAxNDEsIDQxLCAzLCAyMDUsIDQxLCAzLCAKKyAgICAyNDgsIDIyOSwgNDEsIDMsIDIyOSwgMTUzLCA0MSwgMywgMjA2LCA0MSwgMywgMjIwLCAxMDQsIDQxLCAzLCAyMTAsIDExNiwgCisgICAgNDEsIDMsIDIxMCwgODIsIDQxLCAzLCAyNTEsIDQxLCA0MSwgMywgMjM1LCAxNDcsIDQxLCAzLCAyMjgsIDE5MCwgNDEsIDMsIAorICAgIDE5MiwgNDEsIDMsIDE3NiwgNDEsIDMsIDIzNCwgMjQwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIDI0MywgMTQyLCA0MSwgMywgCisgICAgMTg2LCA0MSwgMywgMTk4LCA0MSwgMywgMjI3LCAxNjksIDQxLCAzLCAyMjYsIDE4NywgNDEsIDMsIDIyNiwgMTgzLCA0MSwgCisgICAgMywgMjQxLCA2MCwgNDEsIDMsIDIxMSwgMjE1LCA0MSwgMywgMjExLCAyMTEsIDQxLCAzLCAyMjQsIDI1MiwgNDEsIDMsIAorICAgIDI1MiwgMTcsIDQxLCAzLCAyNTEsIDIwMSwgNDEsIDMsIDIzMSwgMTA5LCA0MSwgMywgMjMzLCAyNDgsIDQxLCAzLCAyMzEsIAorICAgIDQsIDQxLCAzLCAyNDMsIDc0LCA0MSwgMywgMjQ0LCA0MiwgNDEsIDMsIDIxMywgMTI3LCA0MSwgMywgMjE2LCAxOCwgNDEsIAorICAgIDMsIDIxNiwgMTU0LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDI0OCwgMTgsIDQxLCAzLCAyMzIsIDEzMywgNDEsIDMsIDIyMiwgCisgICAgMTk5LCA0MSwgMywgMjQ3LCAxMzMsIDQxLCAzLCAyMjksIDEyNSwgNDEsIDMsIDIxOSwgNDIsIDQxLCAzLCAyMjAsIDMsIDQxLCAKKyAgICAzLCAyMTAsIDIxLCA0MSwgMywgMjEwLCA2NiwgNDEsIDMsIDI0OSwgMTgyLCA0MSwgMywgMjM1LCA2NSwgNDEsIDMsIDIyOCwgCisgICAgMTY0LCA0MSwgMywgMjEwLCAyMjksIDQxLCAzLCAyMzQsIDE2LCA0MSwgMywgMjI5LCA0NiwgNDEsIDMsIDI0MiwgMTcxLCAKKyAgICA0MSwgMywgMjMwLCAxMzcsIDQxLCAzLCAyMjgsIDY5LCA0MSwgMywgMjI3LCAxMzYsIDQxLCAzLCA2OSwgNDEsIDMsIDIxNCwgCisgICAgMTkwLCA0MSwgMywgMjQwLCAyMjksIDQxLCAzLCAyNDAsIDIxOSwgNDEsIDMsIDIxMSwgMTk1LCA0MSwgMywgMjExLCAxODksIAorICAgIDQxLCAzLCAyMjQsIDE1MywgNDEsIDMsIDI1MiwgMTYsIDQxLCAzLCAyNTEsIDEzMywgNDEsIDMsIDIzMSwgMTA4LCA0MSwgMywgCisgICAgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDMsIDQxLCAzLCAyNDMsIDczLCA0MSwgMywgMjQzLCAyNDEsIDQxLCAzLCAyMTIsIAorICAgIDExNiwgNDEsIDMsIDIxNSwgMTE5LCA0MSwgMywgMjE2LCAxMzcsIDQxLCAzLCAyNDgsIDEyLCA0MSwgMywgMjQ4LCAxNywgCisgICAgNDEsIDMsIDIzMiwgMTAzLCA0MSwgMywgMjIyLCAxNDIsIDQxLCAzLCAyNDYsIDg2LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAzLCAKKyAgICAyMTgsIDg0LCA0MSwgMywgMjE5LCAyMjcsIDQxLCAzLCAyMTAsIDEzLCA0MSwgMywgMjEwLCA2MiwgNDEsIDMsIDI0OSwgCisgICAgMTIwLCA0MSwgMywgMjM1LCA1NywgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyMTIsIDQxLCAzLCAyMzMsIDIyMywgCisgICAgNDEsIDMsIDIyOSwgNDUsIDQxLCAzLCAyNDIsIDEyMCwgNDEsIDMsIDIzMCwgMTA3LCA0MSwgMywgMjI3LCAyNDIsIDQxLCAzLCAKKyAgICAyMjcsIDEzMiwgNDEsIDMsIDc4LCA0MSwgMywgMjI2LCAyMDAsIDQxLCAzLCAyMjksIDUsIDQxLCAzLCAyNDEsIDc1LCA0MSwgCisgICAgMywgMjQxLCA2MywgNDEsIDMsIDIxMSwgMjI3LCA0MSwgMywgMjExLCAyMTYsIDQxLCAzLCAyMjUsIDE5LCA0MSwgMywgMjUyLCAKKyAgICAxOCwgNDEsIDMsIDI1MSwgMjEzLCA0MSwgMywgMjMxLCAxMTAsIDQxLCAzLCAyMzMsIDI0OSwgNDEsIDMsIDIzMSwgNiwgNDEsIAorICAgIDMsIDI0MywgNzYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCA1MSwgNDEsIDMsIDIxMywgMTM4LCA0MSwgMywgMTEyLCAKKyAgICA0MSwgMywgMjE2LCAxNTcsIDQxLCAzLCAyNDgsIDE1LCA0MSwgMywgMjQ4LCAxOSwgNDEsIDMsIDIzMiwgMTYyLCA0MSwgMywgCisgICAgMjIyLCAyMTMsIDQxLCAzLCAyNDcsIDE1MywgNDEsIDMsIDIyOSwgMTI5LCA0MSwgMywgMjE5LCA2MCwgNDEsIDMsIDIyMCwgCisgICAgOSwgNDEsIDMsIDIxMCwgMjMsIDQxLCAzLCAyMTAsIDY3LCA0MSwgMywgMjQ5LCAyNDYsIDQxLCAzLCAyMzUsIDc0LCA0MSwgCisgICAgMywgMjI4LCAxNjUsIDQxLCAzLCAyMTAsIDI0NCwgNDEsIDMsIDIzNCwgMzQsIDQxLCAzLCAyMjksIDQ3LCA0MSwgMywgMjQyLCAKKyAgICAxODEsIDQxLCAzLCAyMzAsIDE2NiwgNDEsIDMsIDIyOCwgNzksIDQxLCAzLCAyMjcsIDEzOCwgNDEsIDMsIDc2LCA0MSwgMywgCisgICAgMjQ1LCAxNTgsIDQxLCAzLCAyMjksIDY2LCA0MSwgMywgMjQxLCAyNDUsIDQxLCAzLCAyNDEsIDIxNiwgNDEsIDMsIDIxMiwgCisgICAgMjIsIDQxLCAzLCAyMTIsIDEyLCA0MSwgMywgMjI1LCAyMjQsIDQxLCAzLCAyNTIsIDIyLCA0MSwgMywgMjUyLCA4MywgNDEsIAorICAgIDMsIDIzMSwgMTIyLCA0MSwgMywgMjMzLCAyNTQsIDQxLCAzLCAyMzMsIDI1MiwgNDEsIDMsIDIzMSwgMTIsIDQxLCAzLCAKKyAgICAyNDMsIDgzLCA0MSwgMywgMjQzLCA4MSwgNDEsIDMsIDI0NCwgMTYyLCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIAorICAgIDIzLCA0MSwgMywgMjE2LCAxOTYsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAyMiwgNDEsIDMsIDIzMywgNjQsIDQxLCAKKyAgICAzLCAyMjMsIDEzMSwgNDEsIDMsIDI0OCwgOTgsIDQxLCAzLCAyMjksIDE0NSwgNDEsIDMsIDIyMSwgMTgzLCA0MSwgMywgCisgICAgMjIwLCA2NSwgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIDc0LCA0MSwgMywgMjUwLCAxOTgsIDQxLCAzLCAyMzUsIAorICAgIDEzMiwgNDEsIDMsIDIyOCwgMTgzLCA0MSwgMywgMjExLCA0NywgNDEsIDMsIDIzNCwgMTg4LCA0MSwgMywgMjI5LCA1NywgCisgICAgNDEsIDMsIDIyOSwgNTMsIDQxLCAzLCAyNDMsIDY5LCA0MSwgMywgMjQzLCA1OCwgNDEsIDMsIDIzMSwgOTYsIDQxLCAzLCAKKyAgICAyMjksIDExMiwgNDEsIDMsIDIyNywgMTYwLCA0MSwgMywgMjI5LCA4NCwgNDEsIDMsIDIzMywgMjgsIDQxLCAyNDksIDIyNywgCisgICAgNDEsIDI0MywgMjM2LCAyMTgsIDEzMSwgNDEsIDIyNCwgMTYsIDc5LCA0MSwgMywgMjI5LCAxMjgsIDI0NCwgMjA0LCA0MSwgCisgICAgMywgMjI5LCAxMjgsIDE3NiwgNDEsIDMsIDIyOSwgMTI4LCAyMTksIDQyLCA0MSwgMTYsIDI0NCwgMTUyLCA0MSwgMTYsIAorICAgIDIzNCwgMTg2LCA0MSwgMTYsIDIxNiwgODIsIDQxLCAxNiwgMjI4LCAyMTMsIDQxLCAxNiwgMjUyLCAxNTUsIDQxLCAxNiwgCisgICAgMjQ0LCAyMDMsIDQxLCAxNiwgMjE3LCAxMDIsIDQxLCAxNiwgMjQ4LCAxODQsIDQxLCAxNiwgMjQ3LCAxMzIsIDQxLCAxNiwgCisgICAgMjMzLCAyMTIsIDQxLCAxNiwgMjE2LCAyMiwgNDEsIDE2LCAyNDcsIDE1MiwgNDEsIDE2LCAyMzUsIDY2LCA0MSwgMjEsIAorICAgIDIxMCwgODYsIDQxLCAyMSwgMTExLCA0MSwgMjEsIDEwNSwgNDEsIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE5MCwgCisgICAgNDEsIDIxLCAxOTUsIDQxLCAyMSwgMTk5LCA0MSwgMjEsIDE5NiwgNDEsIDIxLCAyMDEsIDQxLCAzLCAyMjksIDEyOCwgMTg2LCAKKyAgICA0MSwgMywgMjI5LCAxMjgsIDI0NywgMTUzLCAzMywgNiwgMSwgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAKKyAgICAxLCAyNDYsIDQyLCAzMywgNCwgMSwgMjQ2LCA0MiwgMzMsIDYsIDEsIDIyMywgNTIsIDI0NiwgNDQsIDMzLCA0LCAxLCAyMjMsIAorICAgIDUyLCAyNDYsIDQ0LCAzMywgNiwgMSwgMjM1LCAxOTIsIDMzLCA0LCAxLCAyMzUsIDE5MiwgMzMsIDYsIDEsIDI0NywgMTY5LCAKKyAgICAzMywgNCwgMSwgMjQ3LCAxNjksIDMzLCA2LCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0NSwgCisgICAgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMjksIDkyLCAyMTEsIDMxLCAzMywgNCwgMSwgMjI5LCA5MiwgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIAorICAgIDI1MiwgMTkzLCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjUyLCAxOTMsIDIxMSwgMzEsIDMzLCA2LCAxLCAKKyAgICAyMzUsIDE5MCwgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA1MiwgMjEwLCAKKyAgICAyMTIsIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTAsIDIxMiwgMzMsIDYsIDEsIDIzNSwgMTkwLCA2MSwgMzMsIDQsIDEsIDIzNSwgCisgICAgMTkwLCA2MSwgMzMsIDYsIDEsIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCA4LCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIyMiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIyMiwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgCisgICAgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgCisgICAgNiwgMSwgMjIzLCA1MiwgMjE1LCAxNzksIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTUsIDE3OSwgMzMsIDYsIDEsIDIxOSwgNTQsIAorICAgIDI0OCwgOTgsIDMzLCA0LCAxLCAyMTksIDU0LCAyNDgsIDk4LCAzMywgNiwgMSwgMjE5LCA1NCwgMjQ1LCAxODIsIDMzLCA0LCAKKyAgICAxLCAyMTksIDU0LCAyNDUsIDE4MiwgMzMsIDYsIDEsIDIxOSwgNTQsIDI0NSwgMTY3LCAzMywgNCwgMSwgMjE5LCA1NCwgCisgICAgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA0LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA2LCAxLCAyNTEsIAorICAgIDI0OCwgNzgsIDMzLCA0LCAxLCAyNTEsIDI0OCwgNzgsIDMzLCA2LCAxLCA1MiwgMjMwLCAxNDksIDc4LCAzMywgNCwgMSwgCisgICAgNTIsIDIzMCwgMTQ5LCA3OCwgMzMsIDEsIDIzMCwgOTEsIDc4LCAzOCwgMzMsIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ5LCAKKyAgICAyMzAsIDE5NiwgNTAsIDM4LCAzMywgMjQwLCAyMTgsIDIzMCwgMTk2LCA1MCwgMzgsIDMzLCAyMTYsIDE0OSwgMjMwLCAxOTYsIAorICAgIDUwLCAyMTksIDk1LCAyNTMsIDIyNCwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgMjM2LCA2NywgMzgsIDMzLCAxLCA3NCwgMzgsIAorICAgIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNjksIDM4LCAzMywgMSwgMjQyLCAxMCwgNTAsIDM4LCAzMywgMSwgMjExLCAyNywgCisgICAgMzgsIDMzLCAxLCAyMTksIDU0LCA1MCwgMzgsIDMzLCAxLCAyMjYsIDIwNSwgMzgsIDMzLCAyMzQsIDE5OCwgMzgsIDMzLCAKKyAgICAyMjUsIDIzMSwgMzMsIDIzNCwgMTk4LCAzMywgMjI1LCAyMzEsIDMzLCA2LCAxLCAyNDYsIDU0LCAzMywgNCwgMSwgMjQ2LCAKKyAgICA1NCwgMzMsIDYsIDEsIDI0NiwgMzUsIDMzLCA0LCAxLCAyNDYsIDM1LCAzMywgNiwgMSwgMjEwLCA1MiwgMzMsIDQsIDEsIAorICAgIDIxMCwgNTIsIDMzLCA2LCAxLCAyNTAsIDIxNCwgMzMsIDQsIDEsIDI1MCwgMjE0LCAzMywgNiwgMSwgMjQ2LCAzMywgMzMsIAorICAgIDQsIDEsIDI0NiwgMzMsIDMzLCA2LCAxLCAyMTcsIDI0LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgCisgICAgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDIxNSwgNzgsIDMzLCA0LCAxLCAyMTUsIDc4LCAzMywgNiwgMSwgMjE1LCAxNjEsIAorICAgIDMzLCA0LCAxLCAyMTUsIDE2MSwgMzMsIDYsIDEsIDIxNSwgMTY1LCAzMywgNCwgMSwgMjE1LCAxNjUsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI5LCAzMywgNCwgMSwgMjE3LCAyOSwgMzMsIDYsIDEsIDI0MCwgMjA1LCAzMywgNCwgMSwgMjQwLCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMTksIDIwOCwgMzMsIDQsIDEsIDIxOSwgMjA4LCAzOCwgMzMsIDEsIDIzNSwgMTkwLCA3NiwgMjAsIDEsIDYxLCAKKyAgICAyMCwgMSwgMTc2LCAyMCwgMSwgNjksIDIwLCAxLCAyMzMsIDIyMywgMjAsIDEsIDI0NSwgMjE3LCAyMCwgMSwgMjIzLCAxMTEsIAorICAgIDIwLCAxLCAyMTcsIDg3LCAyMCwgMSwgNzgsIDIwLCAxLCAyMjcsIDE1MiwgMjAsIDEsIDc0LCAyMCwgMSwgMjMzLCAxNDEsIAorICAgIDIwLCAxLCAxOTEsIDIwLCAxLCAyMjIsIDI0MiwgMjAsIDEsIDIyMywgMzIsIDIwLCAxLCAyMzMsIDU1LCAyMCwgMSwgMjMxLCAKKyAgICA4NCwgMjAsIDEsIDIxNywgMTAyLCAyMCwgMSwgMjI5LCAxNTEsIDIwLCAxLCAyMjgsIDE4OCwgMjAsIDEsIDE5NCwgMjAsIDEsIAorICAgIDIxOCwgNSwgMjAsIDEsIDIzMCwgMTA3LCAyMCwgMSwgMjIwLCAyOSwgMjAsIDEsIDIxOSwgMTkzLCAyMCwgMSwgMjIwLCAzOSwgCisgICAgMjAsIDEsIDIyMCwgMTI1LCAyMCwgMSwgMjMzLCAxNjEsIDIwLCAxLCAyMzQsIDE2MiwgMjAsIDEsIDIyNywgMjEzLCAyMCwgCisgICAgMSwgMjI3LCAyNDIsIDIwLCAxLCAyMjgsIDE1OSwgMjAsIDEsIDIxMCwgMjI2LCAyMCwgMSwgMjE5LCAyMjcsIDIwLCAxLCAKKyAgICAyMTAsIDE4NywgMjAsIDEsIDE5MiwgMjAsIDEsIDIyOCwgMTQsIDIwLCAxLCAyMzQsIDE0OCwgMjAsIDEsIDIyNSwgMTU0LCAKKyAgICAyMCwgMSwgMjI4LCAxODEsIDIwLCAxLCAyMjcsIDI1MSwgMjAsIDEsIDIyNCwgMTQ3LCAyMCwgMSwgMjExLCAxOTIsIDIwLCAKKyAgICAxLCAyMjUsIDIxNCwgMjAsIDEsIDI0NCwgMTU1LCAyMCwgMSwgMjIyLCAxNDIsIDIwLCAxLCAyMzIsIDEwMywgMjAsIDEsIAorICAgIDIzMCwgMjM1LCAyMCwgMSwgMjI4LCAyMzgsIDIwLCAxLCAyMjMsIDU0LCAyMCwgMSwgMjIzLCAxNzQsIDIwLCAxLCAyMzQsIAorICAgIDE3MSwgMjAsIDEsIDIyOSwgMTIsIDIwLCAxLCAyMjksIDYxLCAyMCwgMSwgMjI5LCA4MiwgMjAsIDEsIDIyMCwgOSwgMjAsIAorICAgIDEsIDIyNCwgMTUwLCAyMCwgMSwgMjQzLCAyNDEsIDIwLCAxLCAyNDQsIDQ1LCAyMCwgMSwgMjEyLCA2NSwgMjAsIDEsIDE5OCwgCisgICAgMjAsIDEsIDIzMiwgMjQ3LCAyMCwgMSwgMjI1LCAxMTEsIDIwLCAxLCAyMzIsIDEyNSwgMjAsIDEsIDIzNCwgMzQsIDIwLCAxLCAKKyAgICAyMzEsIDExOSwgMjAsIDEsIDIyMywgODYsIDIwLCAxLCAyMzEsIDYzLCAyMCwgMSwgMTg2LCAyMCwgMSwgMjE2LCAxMTgsIAorICAgIDIwLCAxLCAyMzQsIDk4LCAyMCwgMSwgMjMwLCAxNjYsIDIwLCAxLCAyMzEsIDEyNywgMjAsIDEsIDIxNiwgMjMxLCAyMCwgMSwgCisgICAgMjM0LCAxLCAyMCwgMSwgMjE2LCAyNDgsIDIwLCAxLCAyMjcsIDI0MywgMjAsIDEsIDIyMSwgMjUzLCAyMCwgMSwgMjQ0LCAKKyAgICAyMDAsIDIwLCAxLCAyMzQsIDMsIDIwLCAxLCAyMzQsIDMwLCAyMCwgMzgsIDE2NCwgMjM0LCAxMSwgMjAsIDM4LCAxNjQsIAorICAgIDIxNSwgMTExLCAyMCwgMjI4LCAxODcsIDIwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIwLCAyNDksIDIzNCwgMjAsIDI0OSwgCisgICAgMjI3LCAyMCwgMjIwLCAxNTIsIDIwLCAyMjQsIDE2LCA3OSwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjUsIAorICAgIDY0LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI1LCA2NCwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgCisgICAgMjU0LCAyMjAsIDg2LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjIwLCA4NiwgNTgsIDEsIDI1MCwgMTA0LCAKKyAgICAxMzgsIDIxMCwgMjU0LCAyMjQsIDMzLCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI0LCAzMywgNTgsIDEsIAorICAgIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjIsIDE0MiwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyMiwgCisgICAgMTQyLCA1OCwgMSwgMjQ1LCAyOCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDEyNiwgMTM4LCAxMzAsIAorICAgIDU4LCAxLCAyMzAsIDIzMCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAyNDUsIDI3LCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI4LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAKKyAgICAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyNDYsIDEyNiwgCisgICAgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgCisgICAgMjcsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjgsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMTI1LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDEyMSwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDU5LCA2NywgCisgICAgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTcsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAyMzIsIDExNCwgNDQsIDI0OSwgCisgICAgMTY5LCAyNTQsIDExNywgNTgsIDEsIDIyMywgMTYwLCAxMjAsIDc1LCA1OCwgMSwgMjIzLCAxNjAsIDEyNCwgNzUsIDU4LCAxLCAKKyAgICAyMjMsIDE2MCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMjMsIDE2MCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCA1OCwgMSwgCisgICAgMTIxLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMTgsIDExMywgMjIsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDIxOCwgMTEzLCAyMiwgMTIxLCAyMTYsIDMxLCA3LCA2LCAxLCAyNDUsIDIwNywgMjU0LCAxNzksIDcsIDQsIDEsIDI0NSwgCisgICAgMjA3LCAyNTQsIDE3OSwgNywgNiwgMSwgMjQ1LCAyMDcsIDI1NCwgMjA1LCA3LCA0LCAxLCAyNDUsIDIwNywgMjU0LCAyMDUsIAorICAgIDcsIDYsIDEsIDI0MSwgMjE0LCA3LCA0LCAxLCAyNDEsIDIxNCwgNywgNiwgMSwgMjE1LCA0MCwgNywgNCwgMSwgMjE1LCA0MCwgCisgICAgNywgNiwgMSwgMjE1LCAyMzAsIDcsIDQsIDEsIDIxNSwgMjMwLCA3LCA2LCAxLCAyNDksIDExOCwgNywgNCwgMSwgMjQ5LCAKKyAgICAxMTgsIDcsIDYsIDEsIDI0OSwgMTE5LCAyLCAyNDksIDIyNywgNywgNCwgMSwgMjQ5LCAxMTksIDIsIDI0OSwgMjI3LCA3LCAKKyAgICAxLCA0LCA2LCAyNDUsIDE0LCA3LCAxLCA0LCA2LCAyMjIsIDkzLCA3LCA2LCAxLCAyNTUsIDgyLCA3LCA0LCAxLCAyNTUsIAorICAgIDgyLCA3LCA2LCAxLCAyNTQsIDgxLCA3LCA0LCAxLCAyNTQsIDgxLCA3LCA2LCAxLCAyNTMsIDIwMCwgNywgNCwgMSwgMjUzLCAKKyAgICAyMDAsIDcsIDYsIDEsIDI1MywgMTg0LCA3LCA0LCAxLCAyNTMsIDE4NCwgNywgNiwgMSwgMjUzLCAxODUsIDIsIDIwMywgCisgICAgMTMwLCA3LCA0LCAxLCAyNTMsIDE4NSwgMiwgMjAzLCAxMzAsIDcsIDYsIDEsIDI1MywgMTc1LCA3LCA0LCAxLCAyNTMsIAorICAgIDE3NSwgNywgNiwgMSwgMjIzLCA1MiwgMjUxLCA3NSwgMiwgMjQ3LCAxMjgsIDcsIDQsIDEsIDIyMywgNTIsIDI1MSwgNzUsIAorICAgIDIsIDI0NywgMTI4LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgOTEsIDcsIDYsIDEsIAorICAgIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIzNSwgCisgICAgMzAsIDIsIDIxOCwgMTA1LCAyMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjE4LCAxMDUsIDIyLCAyNDgsIAorICAgIDcsIDkxLCA3LCA2LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA0LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA2LCAxLCAyMzMsIDE1NSwgCisgICAgMiwgMTI1LCA5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIAorICAgIDEwNSwgMjI2LCAxMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjMyLCAxMjksIDcsIDQsIDEsIDE0NCwgMiwgMjMyLCAxMjksIDcsIDYsIDEsIDIyNiwgMTg3LCA3LCA0LCAxLCAyMjYsIAorICAgIDE4NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDI0NCwgNjEsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyNDQsIDYxLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjE4LCAyMzEsIDIxNywgNzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDIzMSwgMjE3LCA3OCwgNywgNiwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIAorICAgIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgCisgICAgMjI0LCAxMDAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMjIyLCAxODgsIDcsIDQsIDEsIDIyMywgMjI3LCAyMjIsIDE4OCwgNywgNiwgMSwgMjIyLCAxMzIsIDIyMiwgMTg4LCAKKyAgICA3LCA0LCAxLCAyMjIsIDEzMiwgMjIyLCAxODgsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTQsIDEwNiwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjEyLCAxMDYsIDcsIDQsIDEsIDIxMiwgMTA2LCA3LCA2LCAxLCAKKyAgICAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDQsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNiwgMSwgMjE2LCAxNTMsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyMTYsIDE1MywgMiwgOTEsIDcsIDYsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIDIxMywgCisgICAgMjQ1LCA3LCA0LCAxLCAyMTMsIDI0NSwgNywgNiwgMSwgMjQ1LCA3MywgNywgNCwgMSwgMjQ1LCA3MywgNywgNiwgMSwgMjM1LCAKKyAgICAxNzgsIDcsIDQsIDEsIDIzNSwgMTc4LCA3LCA2LCAxLCAyNDksIDIxNSwgNywgNCwgMSwgMjQ5LCAyMTUsIDU4LCAxLCAyMTQsIAorICAgIDEzMywgNywgNCwgMSwgMjQ2LCA3NywgNywgNCwgMSwgMjMyLCA4OSwgNywgNCwgMSwgMjMwLCA4NSwgNywgNCwgMSwgMjI3LCAKKyAgICAyMDUsIDcsIDQsIDEsIDIyMiwgMTMxLCA3LCAxLCA0LCA2LCAyMjIsIDEzMSwgNywgNCwgMSwgMjE1LCAxMDksIDcsIDQsIDEsIAorICAgIDIxNCwgMTk3LCA3LCA2LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDcsIDYsIAorICAgIDEsIDIzNSwgMjIwLCAyNDUsIDE0LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ1LCAxNCwgNywgNiwgMSwgMjM1LCAyMjAsIDI0MywgCisgICAgMjA5LCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIyMCwgMjQzLCAyMDksIDcsIDQsIDEsIDIxNSwgOTQsIDIzNSwgMjIwLCAKKyAgICAyNDMsIDIwOSwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDYsIDEsIDIzNSwgCisgICAgMjIwLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjIwLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjIwLCAyMjIsIDkzLCA3LCA0LCAxLCAKKyAgICAyMzUsIDIyMCwgMjIyLCA5MywgNywgNiwgMSwgMjM1LCAyMjAsIDIxNywgMTUzLCA3LCA0LCAxLCAyMzUsIDIyMCwgMjE3LCAKKyAgICAxNTMsIDU4LCAxLCAxMjEsIDI1MCwgMzksIDI1NSwgMjMsIDU4LCAxLCAyNDksIDIzNCwgNTgsIDEsIDIxOSwgMjUzLCAyNDUsIAorICAgIDEwNiwgNTAsIDcsIDYsIDEsIDIyMiwgMSwgNywgNCwgMSwgMjIyLCAxLCA3LCA2LCAxLCAyMTUsIDk0LCAyNDIsIDY3LCA3LCAKKyAgICA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMjQxLCA1OSwgMjIsIDI1MiwgNDksIDcsIDYsIDEsIDIzMCwgMzEsIDIsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OCwgNDcsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDEzMCwgNywgNCwgMSwgCisgICAgMjUxLCA3NSwgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDY4LCAyLCA5MSwgNTgsIDEsIAorICAgIDQsIDI3LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTk0LCA3LCAyNDUsIDExMSwgMSwgMjIzLCA1MiwgMjQ1LCAKKyAgICAxNCwgNywgMjQ1LCAxMTEsIDEsIDIyMywgNTIsIDIyNiwgMTA5LCA3LCAyNDUsIDExMSwgMSwgMjM1LCAyMDAsIDE5NCwgNywgCisgICAgMjQ1LCAxMTEsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNSwgNywgMjQ1LCAxMTEsIDEsIDI1NCwgMzEsIDE5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCA2MSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNDYsIAorICAgIDU2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDY5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDc2LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDc4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI0MiwgNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzQsIAorICAgIDM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNCwgMTExLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMTgxLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMjMxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI1NCwgODMsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQ5LCAyNDYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjUwLCA5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCAyMzUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNSwgMTE1LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDIxNSwgMTM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxNSwgMTQwLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIAorICAgIDI0OCwgMTEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0OCwgMTIyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDExMiwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTYsIDE1NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDcsIDE1MywgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDgsIDE1LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyOCwgNzksIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgMjI1LCAxOSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjUsIDEyNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAKKyAgICAyNTEsIDIxMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNTIsIDE4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMCwgCisgICAgMTY2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMjEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMiwgMTYyLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMTY3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxOSwgNjAsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQxLCA3NSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgNjEsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMjUsIDUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCA2OSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgCisgICAgNzYsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDIyNiwgMTg3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIAorICAgIDIzMSwgMTYzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgCisgICAgMTUsIDIzMSwgMTYxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYwLCAyMjgsIDYxLCAyMzUsIDI0NywgCisgICAgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAyMjgsIDYxLCAKKyAgICAyMzUsIDI0NywgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyMTksIAorICAgIDExOSwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjQ1LCAxOTYsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIAorICAgIDEwLCAxMzQsIDIxOSwgMTE4LCAyMjgsIDYxLCAyMzUsIDI0NywgMjI0LCAyNSwgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAKKyAgICAyMjUsIDQzLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyMiwgMTIwLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyNCwgMjYsIAorICAgIDc5LCAyMjUsIDE0NywgMSwgMTc2LCAyMjUsIDE0NywgMSwgMjM0LCAxMzgsIDIyNSwgMTQ3LCAxLCAyNDMsIDE0MiwgMjI1LCAKKyAgICAxNDcsIDEsIDIyOSwgODIsIDIyNSwgMTQ3LCAxLCAyNTEsIDQxLCAyMjUsIDE0NywgMSwgMjUwLCAxNjUsIDIyNSwgMTQ3LCAKKyAgICAxLCAyMzUsIDE0NywgMjI1LCAxNDcsIDEsIDIyNywgMTY5LCAyMjUsIDE0NywgMSwgMjE3LCAxMDYsIDIyNSwgMTQ3LCAxLCAKKyAgICAyMTYsIDIwOSwgMjI1LCAxNDcsIDEsIDI0OCwgMjI5LCAyMjUsIDE0NywgMSwgMTk4LCAyMjUsIDE0NywgMSwgMTkxLCAyMjUsIAorICAgIDE0NywgMSwgMjI1LCAxNTAsIDIyNSwgMTQ3LCAxLCAyNTIsIDE5OSwgMjI1LCAxNDcsIDEsIDE4NiwgMjI1LCAxNDcsIDEsIAorICAgIDIxNSwgMTg0LCAyMjUsIDE0NywgMSwgMjE1LCAxNzYsIDIyNSwgMTQ3LCAxLCAyNDYsIDQ2LCAyMjUsIDE0NywgMSwgMjEyLCAKKyAgICA2NSwgMjI1LCAxNDcsIDEsIDIxMCwgODIsIDIyNSwgMTQ3LCAxLCAyMTAsIDExNiwgMjI1LCAxNDcsIDEsIDQsIDYxLCAyMjUsIAorICAgIDE0NywgMSwgMTkyLCAyMjUsIDE0NywgMSwgMjA1LCAyMjUsIDE0NywgMSwgMjMzLCAxNDEsIDIyNSwgMTQ3LCAxLCAyMjAsIAorICAgIDEwNCwgMjI1LCAxNDcsIDEsIDIwNiwgMjI1LCAxNDcsIDEsIDE2MiwgMjI1LCAxNDcsIDEsIDYxLCAyMjUsIDE0NywgMSwgCisgICAgNzQsIDIyNSwgMTQ3LCAxLCA2OSwgMjI1LCAxNDcsIDEsIDc2LCAyMjUsIDE0NywgMSwgNzgsIDIyNSwgMTQ3LCAxLCAyMjQsIAorICAgIDkxLCAyMjUsIDE0NywgMSwgMjExLCAxNjUsIDIyNSwgMTQ3LCAxLCAyNDQsIDIwNCwgMjI1LCAxNDcsIDEsIDI0MywgMzYsIAorICAgIDIyNSwgMTQ3LCAxLCAyNDUsIDIxNywgMjI1LCAxNDcsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDIyNSwgMTQ3LCAyMTgsIDc0LCAKKyAgICAxLCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTUsIDE1NywgMjI1LCAxNDcsIDEsIDIxNSwgMTQ1LCAyMjUsIDE0NywgMSwgMjQ4LCAKKyAgICAxNDMsIDIyNSwgMTQ3LCAxLCAyMjgsIDExNSwgMjI1LCAxNDcsIDEsIDI1NCwgMTQ5LCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTMsIAorICAgIDEzNCwgMjIwLCAxMDQsIDIyNSwgMTQ3LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NywgMSwgMjUzLCAyMzEsIDI0NCwgCisgICAgMjA0LCAyMjUsIDE0NywgMjE4LCA3NCwgMSwgMjA1LCAyMjUsIDE0NywgMjE4LCAyNiwgMSwgMjA1LCAyMjUsIDE0NywgMSwgCisgICAgMjUxLCA3LCAyMjUsIDE0NywgMjE5LCAxNTcsIDI0MSwgMjQzLCA3OSwgMjI1LCAxNDcsIDUyLCAyNDEsIDI0MywgNzksIAorICAgIDIyNSwgMTQ3LCAxNjQsIDIyMCwgOTcsIDIyNSwgMTQ3LCAxNjQsIDUyLCAyMjAsIDk3LCAxNzksIDUsIDI1NCwgODMsIDE3OSwgCisgICAgNSwgMjEzLCAxNDcsIDE3OSwgMSwgNjEsIDE3OSwgMSwgMjU1LCA4MiwgMTc5LCAxLCA3NCwgMTc5LCAxLCAyMzYsIDQwLCAKKyAgICAxNzksIDEsIDY5LCAxNzksIDEsIDIxNCwgMTE4LCAxNzksIDEsIDE0OSwgMTUzLCAxNzksIDEsIDE0OSwgMjIyLCAxODIsIAorICAgIDE3OSwgMSwgMTQ5LCAxNTYsIDE3OSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTc5LCAxLCA3NiwgMTc5LCAxLCAyNDUsIDIxNywgCisgICAgMTc5LCAxLCAyNTQsIDIxMCwgMTc5LCAxLCA3OCwgMTc5LCAxLCAyMjYsIDE4NywgMTc5LCAxLCAyNTMsIDIwMCwgMTc5LCAxLCAKKyAgICAxNzYsIDE3OSwgMSwgMjM0LCAxMzgsIDE3OSwgMSwgMjQzLCAxNDIsIDE3OSwgMSwgMjQzLCAwLCAxNzksIDEsIDIyOSwgODIsIAorICAgIDE3OSwgMSwgMjUxLCA0MSwgMTc5LCAxLCAyNTAsIDE2NSwgMTc5LCAxLCAyMzUsIDE0NywgMTc5LCAxLCAyMzUsIDEyMCwgCisgICAgMTc5LCAxLCAyMjcsIDE2OSwgMTc5LCAxLCAyMTUsIDE1NywgMTc5LCAxLCAyMTUsIDE0NSwgMTc5LCAxLCAyNDgsIDE0MywgCisgICAgMTc5LCAxLCAyNDgsIDEyNywgMTc5LCAxLCAyMjgsIDExNSwgMTc5LCAxLCAyMTcsIDEwNiwgMTc5LCAxLCAyMTYsIDIwOSwgCisgICAgMTc5LCAxLCAyNDgsIDIyOSwgMTc5LCAxLCAyNDgsIDMzLCAxNzksIDEsIDE5OCwgMTc5LCAxLCAxOTEsIDE3OSwgMSwgMjI1LCAKKyAgICAxNTAsIDE3OSwgMSwgMjUyLCAxOTksIDE3OSwgMSwgMjUyLCAyNiwgMTc5LCAxLCAxODYsIDE3OSwgMSwgMTkyLCAxNzksIDEsIAorICAgIDIwNSwgMTc5LCAxLCAyMzMsIDE0MSwgMTc5LCAxLCAyMTQsIDI3LCAxNzksIDEsIDIyMCwgMTA0LCAxNzksIDEsIDIxOCwgCisgICAgMjI1LCAxNzksIDEsIDIwNiwgMTc5LCAxLCAxNjIsIDE3OSwgMSwgMjMyLCAxOTAsIDE3OSwgMTE3LCA1LCAyNDIsIDUxLCAKKyAgICAxNzksIDI1LCA1LCAyNTUsIDgyLCAxNzksIDI1LCA1LCA3NCwgMTc5LCAyNSwgNSwgMjM2LCA0MCwgMTc5LCAyNSwgNSwgNjksIAorICAgIDE3OSwgMjUsIDUsIDIxNCwgMTE4LCAxNzksIDI1LCA1LCAxNDksIDE1MywgMTc5LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTc5LCAyNSwgNSwgMTQ5LCAxNTYsIDE3OSwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3OSwgMjUsIDUsIDc2LCAxNzksIDI1LCAKKyAgICA1LCAyNDUsIDIxNywgMTc5LCAyNSwgNSwgMjU0LCAyMTAsIDE3OSwgMjUsIDUsIDc4LCAxNzksIDI1LCA1LCAyMjYsIDE4NywgCisgICAgMTc5LCAyNSwgNSwgMjUzLCAyMDAsIDE3OSwgNSwgMjEzLCAxNTIsIDE3OSwgMjQ4LCAxODYsIDE3OSwgNTIsIDI0OCwgMTg2LCAKKyAgICAxNzksIDIxLCAyMTAsIDg2LCAxNzksIDIxLCAxMTEsIDE3OSwgMjEsIDEwNSwgMTc5LCAyMSwgMTU4LCAxNzksIDIxLCAxNjEsIAorICAgIDE3OSwgMjEsIDE5MCwgMTc5LCAyMSwgMTk1LCAxNzksIDIxLCAxOTksIDE3OSwgMjEsIDE5NiwgMTc5LCAyMSwgMjAxLCAzOCwgCisgICAgODQsIDIxLCAyMTAsIDg2LCAzOCwgODQsIDIxLCAxMTEsIDM4LCA4NCwgMjEsIDEwNSwgMzgsIDg0LCAyMSwgMTU4LCAzOCwgCisgICAgODQsIDIxLCAxNjEsIDM4LCA4NCwgMjEsIDE5MCwgMzgsIDg0LCAyMSwgMTk1LCAzOCwgODQsIDIxLCAxOTksIDM4LCA4NCwgCisgICAgMjEsIDE5NiwgMzgsIDg0LCAyMSwgMjAxLCAzOCwgODQsIDEsIDYxLCAzOCwgODQsIDEsIDY5LCAzOCwgODQsIDEsIDE3NiwgCisgICAgMzgsIDg0LCAxLCAxOTgsIDM4LCA4NCwgMSwgMTkxLCAzOCwgODQsIDEsIDIwNSwgMzgsIDg0LCAxLCAyMTMsIDE3NiwgMzgsIAorICAgIDg0LCA1LCAyNTMsIDE4MywgODQsIDUsIDIxOSwgMTksIDI1MSwgNywgODQsIDUsIDI1MSwgOCwgMjEzLCAxNTIsIDg0LCA1LCAKKyAgICA1MiwgMjUxLCA4LCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgOCwgMTA1LCA4NCwgNSwgMjUxLCA4LCAxNTgsIDg0LCA1LCAyNTEsIAorICAgIDgsIDI1MywgMTgzLCA4NCwgNSwgMjI0LCAxMjcsIDg0LCAyNDMsIDEwNywgMjQ0LCAxMTEsIDg0LCAyNTAsIDI0NiwgODQsIAorICAgIDI0MSwgMjM3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAyMTAsIDg2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxMTEsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDEwNSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTU4LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDIxLCAxNjEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5MCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk1LCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5NiwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyMSwgMjAxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE3NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMzQsIAorICAgIDEzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDMsIDE0MiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjksIDgyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjAsIDEwNCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMTAsIDExNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjcsIDE2OSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyMTcsIDEwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDAsIDIzMywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICAxOTgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNSwgMTUwLCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEsIDE4NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDgsIDIyOSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyNTIsIDE5OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMDUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIzMywgMTQxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIxMiwgNjUsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMSwgMjE2LCAyMDksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTYyLCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDIxNCwgMjcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjUxLCA0MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICA2MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjYsIDIzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCA3NCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMjYsIDE4NywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjE0LCAyMTQsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjUsIDc2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCA2OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjQ1LCAKKyAgICAyMTcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDc4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjI1LCAzMywgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxMzgsIDI1MSwgMjAsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMTM4LCAyNTEsIDIxLCAyMjUsIDMzLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDUsIDI0OSwgODUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgNSwgMjE5LCAyMDEsIDIyMywgOTYsIAorICAgIDEsIDE3NiwgMjIzLCA5NiwgMSwgMjQzLCAxNDIsIDIyMywgOTYsIDEsIDIyOSwgODIsIDIyMywgOTYsIDEsIDIxNywgMTA2LCAKKyAgICAyMjMsIDk2LCAxLCAyNDgsIDIyOSwgMjIzLCA5NiwgMSwgMTk4LCAyMjMsIDk2LCAxLCAxOTEsIDIyMywgOTYsIDEsIDI1MiwgCisgICAgMTk5LCAyMjMsIDk2LCAxLCAxODYsIDIyMywgOTYsIDEsIDI1MSwgNDEsIDIyMywgOTYsIDEsIDIzNSwgMTQ3LCAyMjMsIDk2LCAKKyAgICAxLCAyMjcsIDE2OSwgMjIzLCA5NiwgMSwgMjA2LCAyMjMsIDk2LCAxLCAyMDUsIDIyMywgOTYsIDEsIDIzMywgMTQxLCAyMjMsIAorICAgIDk2LCAxLCAxOTIsIDIyMywgOTYsIDEsIDIxMiwgNjUsIDIyMywgOTYsIDEsIDE2MiwgMjIzLCA5NiwgMSwgMjMxLCAxMjksIAorICAgIDIyMywgOTYsIDEsIDIyOSwgNjEsIDIyMywgOTYsIDEsIDIyOSwgMTUzLCAyMjMsIDk2LCAxLCAyMjcsIDEzOSwgMjIzLCA5NiwgCisgICAgMSwgNjEsIDIyMywgOTYsIDI1LCA1LCA3NCwgMjIzLCA5NiwgMjUsIDUsIDY5LCAyMjMsIDk2LCAyNSwgNSwgNzYsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNTQsIDIxMCwgMjIzLCA5NiwgMjUsIDUsIDc4LCAyMjMsIDk2LCAyNSwgNSwgMjUzLCAyMDAsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNDUsIDYzLCAyMjMsIDk2LCAyNSwgNSwgMjQ1LCAyNDEsIDIyMywgOTYsIDExNywgNSwgMjI5LCA4NCwgCisgICAgMjIzLCA5NiwgMTE3LCA1LCAyMzAsIDMwLCAyMjMsIDk2LCAxMTcsIDUsIDE1MywgMjIzLCA5NiwgMTE3LCA1LCAyNDIsIDY3LCAKKyAgICAyMjMsIDk2LCAyMTMsIDE1MiwgMjIzLCA5NiwgMjIxLCAxNzUsIDc5LCAyNCwgMTAwLCAyMTYsIDk4LCAyNCwgMTAwLCAyMTYsIAorICAgIDk3LCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyMTYsIDEwMCwgMjQsIDEwMCwgMjIzLCAyNCwgMjQsIDEwMCwgMjIzLCAKKyAgICA4LCAyNCwgMTAwLCAyMjMsIDMsIDI0LCAxMDAsIDIyMywgNSwgMjQsIDEwMCwgMjIzLCAyMSwgMjQsIDEwMCwgMjIzLCAxNCwgCisgICAgMjQsIDEwMCwgMjIzLCA3LCAyNCwgMTAwLCAyMjMsIDI2LCAyNCwgMTAwLCAyMjMsIDksIDI0LCAxMDAsIDIyMywgMjgsIDI0LCAKKyAgICAxMDAsIDIyMywgMjUsIDI0LCAxMDAsIDIzMCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIwOSwgMjQsIDEwMCwgMjMwLCAyMTIsIAorICAgIDI0LCAxMDAsIDIyNSwgODMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgOTUsIDI0LCAxMDAsIDIxOCwgMjA5LCAKKyAgICAyNCwgMTAwLCAyMzYsIDUzLCAyNCwgMTAwLCAyMzYsIDYwLCAyNCwgMTAwLCAyMTgsIDIyMCwgMjQsIDEwMCwgMjE4LCAyMDcsIAorICAgIDI0LCAxMDAsIDIyNSwgMTMzLCAyNCwgMTAwLCAyNDEsIDE3NCwgMjQsIDEwMCwgMjE4LCAyMDQsIDE1NSwgNSwgMjI2LCAzMSwgCisgICAgMTU1LCA1LCAyNTAsIDE5NSwgMTU1LCA1LCAyMzMsIDcyLCAxNTUsIDUsIDIxMSwgMjQzLCAxNTUsIDEsIDYxLCAxNTUsIDEsIAorICAgIDI0MCwgMTYxLCAyMzQsIDE5NywgMTU1LCAxLCA3NCwgMTU1LCAxLCAyMzYsIDQwLCAxNTUsIDEsIDY5LCAxNTUsIDEsIDIyNiwgCisgICAgOTQsIDI1MCwgMTcxLCAxNTUsIDEsIDIyOSwgODMsIDIzMywgMzQsIDE1NSwgMSwgMjI5LCA4MywgMjMzLCAzNSwgMjIzLCAKKyAgICAxNDUsIDE1NSwgMSwgNzYsIDE1NSwgMSwgMjU0LCAyMTAsIDE1NSwgMSwgNzgsIDE1NSwgMSwgMTc2LCAxNTUsIDEsIDIzNSwgCisgICAgMTksIDIyMSwgMjMwLCAxNTUsIDEsIDIzNSwgMTksIDIzMCwgNzEsIDE1NSwgMSwgMjQzLCAxNDIsIDE1NSwgMSwgMjQzLCAKKyAgICAxNDMsIDIzMCwgNzEsIDE1NSwgMSwgMjI5LCA4MiwgMTU1LCAxLCAyNTEsIDQxLCAxNTUsIDEsIDI1MSwgNDIsIDIzMCwgNzEsIAorICAgIDE1NSwgMSwgMjM1LCAxNDcsIDE1NSwgMSwgMjI3LCAxNzAsIDIzMCwgNzEsIDE1NSwgMSwgMjM1LCAxNDgsIDIzMSwgMjEyLCAKKyAgICAxNTUsIDEsIDIyNywgMTY5LCAxNTUsIDEsIDIxNSwgMTU3LCAxNTUsIDEsIDIxNSwgMTU4LCAyMzEsIDIxMiwgMTU1LCAxLCAKKyAgICAyNDgsIDE0MywgMTU1LCAxLCAyNDgsIDE0NCwgMjMxLCAyMTIsIDE1NSwgMSwgMjI5LCAyMzQsIDIzMCwgNzEsIDE1NSwgMSwgCisgICAgMjE3LCAxMDYsIDE1NSwgMSwgMjE3LCAxMDcsIDIzMCwgNzEsIDE1NSwgMSwgMjQ4LCAyMjksIDE1NSwgMSwgMjQ4LCAyMzAsIAorICAgIDIzMSwgMjEyLCAxNTUsIDEsIDE5OCwgMTU1LCAxLCAxOTEsIDE1NSwgMSwgMjI2LCA5NCwgMjMwLCA3MSwgMTU1LCAxLCAKKyAgICAyNTIsIDE5OSwgMTU1LCAxLCAyNTIsIDIwMCwgMjMwLCA3MSwgMTU1LCAxLCAxODYsIDE1NSwgMSwgMTkyLCAxNTUsIDEsIAorICAgIDIwNSwgMTU1LCAxLCAyMjMsIDE5MSwgMjU0LCAyMTksIDE1NSwgMSwgMjMzLCAxNDEsIDE1NSwgMSwgMjEyLCA2NSwgMTU1LCAKKyAgICAxLCAyMjIsIDM2LCAyMzAsIDcxLCAxNTUsIDEsIDIyMiwgMzYsIDIzMSwgMjEyLCAxNTUsIDEsIDIwNiwgMTU1LCAxLCAxNjIsIAorICAgIDE1NSwgNSwgMjUwLCAxOTYsIDIxNiwgMjUxLCAxNTUsIDI1LCA1LCAyMTcsIDQ4LCAxNTUsIDI1LCA1LCAyMTYsIDM2LCAKKyAgICAxNTUsIDI1LCA1LCAyMTEsIDE5MCwgMTU1LCAyNSwgNSwgMjExLCAxOTEsIDIzMSwgNzQsIDE1NSwgMjUsIDUsIDIxOCwgNDgsIAorICAgIDE1NSwgMjUsIDUsIDIxOCwgNDksIDIzMSwgNjIsIDE1NSwgMjUsIDUsIDIxNywgNjYsIDE1NSwgMjUsIDUsIDI0NywgMjAyLCAKKyAgICAyMzAsIDcwLCAxNTUsIDI1LCA1LCAyMjUsIDE4NywgMTU1LCAxMTcsIDUsIDIzNCwgMTY0LCAxNTUsIDExNywgNSwgMjI1LCAKKyAgICAxOTksIDE1NSwgMTE3LCA1LCAyNTEsIDI3LCAxNTUsIDIyNiwgNDQsIDE1NSwgNDMsIDIyMywgNzIsIDE1NSwgNDQsIDIyMywgCisgICAgNzIsIDE1NSwgMjI2LCA4MywgMjU0LCAxMjUsIDE1NSwgMjI2LCA4MywgMjMxLCAyMjksIDE1NSwgMjI2LCA4MywgMjMyLCAKKyAgICA5MywgMTU1LCAyMjYsIDgzLCAyMTEsIDIzOCwgMTU1LCAyMjYsIDgzLCAyMjYsIDQ1LCAxNTUsIDIyNiwgODMsIDIzMiwgCisgICAgMjExLCAxNTUsIDIyNiwgODMsIDIzMiwgODcsIDE1NSwgMjI2LCA4MywgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDI1NSwgMywgCisgICAgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDIyNSwgNTQsIDE1NSwgMjE1LCA5NCwgMjI2LCA4MywgMjI1LCA1NCwgMTU1LCAyMjYsIAorICAgIDQwLCAxNTUsIDIxLCAyMTAsIDg2LCAxNTUsIDIxLCAxMTEsIDE1NSwgMjEsIDEwNSwgMTU1LCAyMSwgMTU4LCAxNTUsIDIxLCAKKyAgICAxNjEsIDE1NSwgMjEsIDE5MCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAxOTksIDE1NSwgMjEsIDE5NiwgMTU1LCAyMSwgCisgICAgMjAxLCAxNTUsIDIyNiwgODMsIDIxNiwgNzAsIDIxNSwgMTA3LCAxNTUsIDIyNiwgODMsIDIzNSwgMTc0LCAxNzIsIDEsIDYxLCAKKyAgICAxNzIsIDEsIDc0LCAxNzIsIDEsIDY5LCAxNzIsIDEsIDc2LCAxNzIsIDEsIDI1NCwgMjEwLCAxNzIsIDEsIDc4LCAxNzIsIDEsIAorICAgIDE3NiwgMTcyLCAxLCAyMzQsIDEzOCwgMTcyLCAxLCAyNDMsIDE0MiwgMTcyLCAxLCAyNDMsIDAsIDE3MiwgMSwgMjI4LCAKKyAgICAyNTAsIDE3MiwgMSwgMjI5LCA4MiwgMTcyLCAxLCAyNTAsIDE2NSwgMTcyLCAxLCAyNTAsIDEyMCwgMTcyLCAxLCAyMzUsIAorICAgIDE0NywgMTcyLCAxLCAyMzUsIDEyMCwgMTcyLCAxLCAyMjgsIDI0MCwgMTcyLCAxLCAyMjgsIDI0MiwgMTcyLCAxLCAyMjgsIAorICAgIDI0MSwgMTcyLCAxLCAyMTcsIDEwNiwgMTcyLCAxLCAyMTYsIDIwOSwgMTcyLCAxLCAyNDgsIDIyOSwgMTcyLCAxLCAyNDgsIAorICAgIDMzLCAxNzIsIDEsIDIyNywgMjExLCAxNzIsIDEsIDE5OCwgMTcyLCAxLCAyNDgsIDE0MywgMTcyLCAxLCAxOTEsIDE3MiwgMSwgCisgICAgMjI0LCAyMjMsIDE3MiwgMSwgMjI1LCAxNTAsIDE3MiwgMSwgMjUyLCAxOTksIDE3MiwgMSwgMjUyLCAyNiwgMTcyLCAxLCAKKyAgICAyMzAsIDEwMCwgMTcyLCAxLCAxODYsIDE3MiwgMSwgMjUyLCAxMTksIDE3MiwgMSwgMTkyLCAxNzIsIDEsIDIwNSwgMTcyLCAKKyAgICAxLCAyMzMsIDE0MSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgMjI1LCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIAorICAgIDE3MiwgMjUsIDUsIDI1NSwgODIsIDE3MiwgMjUsIDUsIDc0LCAxNzIsIDI1LCA1LCAyMzYsIDQwLCAxNzIsIDI1LCA1LCAKKyAgICAyNDUsIDIwMywgMTcyLCAyNSwgNSwgNjksIDE3MiwgMjUsIDUsIDIyNiwgMjM4LCAxNzIsIDI1LCA1LCA3OCwgMTcyLCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDE3MiwgMjUsIDUsIDI1MywgMjAwLCAxNzIsIDI1LCA1LCAyMTQsIDIxNCwgMTcyLCAxMTcsIDUsIAorICAgIDE5MiwgMTcyLCAxMTcsIDUsIDIwNSwgMTcyLCAxMTcsIDUsIDIzMywgMTQxLCAxNzIsIDExNywgNSwgMjEyLCA2NSwgMTcyLCAKKyAgICAxLCA0MCwgMjM1LCAyOSwgMTcyLCAxLCA0MCwgMjQzLCAyMDksIDE3MiwgMSwgNDAsIDIyOSwgODQsIDE3MiwgMTE3LCA1LCAKKyAgICA0MCwgMjI5LCA4NCwgMTcyLCAxLCA0MCwgMjUwLCAxNjYsIDE3MiwgMSwgNDAsIDIxNywgMTUzLCAxNzIsIDEsIDQwLCAyMzAsIAorICAgIDMwLCAxNzIsIDEsIDQwLCAyMjYsIDEwOSwgMTcyLCAxLCA0MCwgMjExLCAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCAKKyAgICA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyOCwgMTcyLCAxMTcsIDUsIDQwLCAxOTQsIDE3MiwgMTE3LCA1LCA0MCwgCisgICAgMjQyLCA2NywgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTExLCAxNzIsIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAKKyAgICAyMSwgMTYxLCAxNzIsIDIxLCAxOTAsIDE3MiwgMjEsIDE5NSwgMTcyLCAyMSwgMTk5LCAxNzIsIDIxLCAxOTYsIDE3MiwgMjEsIAorICAgIDIwMSwgMTcyLCAyMjQsIDE0NCwgMjE4LCAyNTMsIDE3MiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAxNzIsIDIyNCwgMTQ0LCA1MiwgCisgICAgMjQ4LCAxODYsIDE3MiwgMjI0LCAxNDQsIDIxNSwgMjEyLCAyNDgsIDE4NiwgNjgsIDEsIDIzNCwgMTMyLCAyNDMsIDE0MiwgCisgICAgNjgsIDEsIDIzNCwgMTMyLCAyNTEsIDQxLCA2OCwgMSwgMjM0LCAxMzIsIDI1MCwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIAorICAgIDIzNSwgMTQ3LCA2OCwgMSwgMjM0LCAxMzIsIDIzNSwgMTIwLCA2OCwgMSwgMjM0LCAxMzIsIDIyNywgMTY5LCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxNSwgMTU3LCA2OCwgMSwgMjM0LCAxMzIsIDIxNSwgMTQ1LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTQzLCAKKyAgICA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTI3LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMzMsIDY4LCAxLCAyMzQsIDEzMiwgCisgICAgMTk4LCA2OCwgMSwgMjM0LCAxMzIsIDIwNiwgNjgsIDEsIDIzNCwgMTMyLCAxNjIsIDY4LCAxLCAyMzQsIDEzMiwgMjQxLCAKKyAgICAxOTYsIDY4LCAxLCAyMzQsIDEzMiwgMjQ0LCAyMDQsIDY4LCA1OCwgMSwgMjM0LCAxMzIsIDIyMywgMTEyLCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIDIxMCwgMTE2LCA2OCwgMSwgMjM0LCAxMzIsIDIwNSwgNjgsIAorICAgIDIzMiwgMTUxLCAyMzQsIDEzMiwgMjI3LCAxLCA2OCwgMjMyLCAxNTEsIDIzNCwgMTMyLCAyMjQsIDQ2LCA2OCwgMjMyLCAKKyAgICAxNTEsIDIzNCwgMTMyLCAyNDEsIDEyOCwgNjgsIDE2LCAyNTQsIDE5OSwgMjQ1LCAzOCwgNjgsIDE2LCAyNTQsIDE5OSwgCisgICAgMTExLCA2OCwgMTYsIDI1NCwgMTk5LCAxMDUsIDY4LCAxLCAyNTQsIDE5OSwgMjA1LCA2OCwgNSwgMjI2LCAyNywgMjM0LCAKKyAgICAyMTksIDIxNiwgMzEsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAzNCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDM0LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgCisgICAgMTIwLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTIwLCAzOSwgMjA4LCAxLCAxMjEsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAxMjEsIDIyOSwgOSwgMzksIDIwOCwgMSwgMTI1LCAyMjksIDksIDM5LCAyMDgsIAorICAgIDEsIDEyMSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyNSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyMSwgMjUwLCA5NCwgCisgICAgMzksIDIwOCwgMSwgMTI1LCAyNTAsIDk0LCAzOSwgMjA4LCAxLCAxMjEsIDIxOSwgNjAsIDM5LCAyMDgsIDEsIDEyNSwgMjE5LCAKKyAgICA2MCwgMzksIDIwOCwgMSwgMTIxLCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgCisgICAgMTIxLCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTI1LCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTIxLCAxMTIsIDM5LCAyMDgsIAorICAgIDEsIDEyNSwgMTEyLCAzOSwgMjA4LCAxLCAxMjEsIDIxNiwgMTU3LCAzOSwgMjA4LCAxLCAxMjUsIDIxNiwgMTU3LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIyOCwgNzksIDM5LCAyMDgsIDEsIDEyNSwgMjI4LCA3OSwgMzksIDIwOCwgMSwgMTIxLCAyNTEsIAorICAgIDIxMywgMzksIDIwOCwgMSwgMTI1LCAyNTEsIDIxMywgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDE5LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIyNSwgMTksIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxMjQsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxMjQsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjQ0LCA1MSwgMzksIDIwOCwgMSwgMTI1LCAyNDQsIDUxLCAzOSwgMjA4LCAxLCAxMjEsIDIzMCwgCisgICAgMTY2LCAzOSwgMjA4LCAxLCAxMjUsIDIzMCwgMTY2LCAzOSwgMjA4LCAxLCAxMjEsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjEsIDIyMiwgMjEzLCAzOSwgMjA4LCAxLCAxMjUsIDIyMiwgMjEzLCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjUsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjEsIDIxMywgCisgICAgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAxMjEsIDI0MSwgNzUsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjQxLCA3NSwgMzksIDIwOCwgMSwgMTIxLCA3OCwgMzksIDIwOCwgMSwgMTI1LCA3OCwgMzksIDIwOCwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgMjA4LCAyNSwgMjU1LCA4MiwgMzksIDIwOCwgMjUsIDc0LCAzOSwgMjA4LCAyNSwgMjE0LCAKKyAgICAyMTQsIDM5LCAyMDgsIDI1LCA2OSwgMzksIDIwOCwgMjUsIDc2LCAzOSwgMjA4LCAyNSwgNzgsIDM5LCAyMDgsIDIzMSwgCisgICAgMjA5LCAyMzQsIDExNCwgMzksIDIwOCwgMjUsIDI0MCwgMTI2LCAzOSwgMjA4LCAyNSwgMjE0LCAyMTMsIDM5LCAyMDgsIDI1LCAKKyAgICAyMTQsIDIyOSwgMzksIDIwOCwgMjUsIDI1MywgMTk4LCAzOSwgMjA4LCAyNSwgMjUzLCAxNzUsIDM5LCAyMDgsIDI1LCAyNTQsIAorICAgIDEzMSwgMzksIDIwOCwgMjUsIDI1NCwgMTQ0LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA5LCAyNDUsIDE4OCwgMzksIDIwOCwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjI3LCAyMTAsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDksIDIxNiwgMTU3LCAzOSwgMjA4LCAxMzgsIAorICAgIDIzMSwgMjA5LCAyMTksIDQ0LCAzOSwgMjA4LCAxNiwgMjM0LCAxOSwgMzksIDIwOCwgMTYsIDIyNywgMjEwLCAzOSwgMjA4LCAKKyAgICAxNiwgMjIxLCAyNTUsIDM5LCAyMDgsIDE2LCAyNDEsIDc2LCAyNDEsIDcxLCAzOSwgMjA4LCAxNiwgMjM0LCAyOCwgMjM0LCAKKyAgICAyNywgMTg4LCAxODcsIDEsIDc2LCAxODgsIDE4NywgMSwgNzgsIDE4OCwgMTg3LCAxLCAyNTAsIDE2NSwgMTg4LCAxODcsIDEsIAorICAgIDIyNywgMTY5LCAxODgsIDE4NywgMSwgMjE1LCAxNTcsIDE4OCwgMTg3LCAxLCAyMTUsIDE0NSwgMTg4LCAxODcsIDEsIDI0OCwgCisgICAgMTQzLCAxODgsIDE4NywgMSwgMjQ4LCAxMjcsIDE4OCwgMTg3LCAxLCAyMjgsIDExNSwgMTg4LCAxODcsIDEsIDIyMCwgMTA0LCAKKyAgICAxODgsIDE4NywgMSwgMjE4LCAyMjUsIDE4OCwgMTg3LCAyNSwgNSwgMjM2LCA0MCwgMTg4LCAxODcsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTg4LCAxODcsIDI1LCA1LCAyNTUsIDQ2LCAxODgsIDE4NywgMjUsIDUsIDI1MywgMjAwLCAxODgsIDE4NywgMjUsIAorICAgIDUsIDI1NSwgMzksIDE4OCwgMTg3LCAyNTAsIDEzMywgMTg4LCAxODcsIDI1NCwgMjE1LCAyMzQsIDEwNCwgMTg4LCAxODcsIAorICAgIDI1NCwgMTExLCAxODgsIDE4NywgMywgMjIzLCA3NywgNzksIDE4OCwgMTg3LCAyMTEsIDIwOSwgMjIzLCA3NywgNzksIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjEzLCAxNDcsIDE4OCwgMTg3LCAyMTMsIDE1MiwgMjksIDMsIDIxNSwgMTM4LCAyOSwgMywgMjE1LCAKKyAgICAxNDEsIDI5LCAzLCAyMTUsIDE0NCwgMjksIDMsIDIxNSwgMTQyLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MCwgCisgICAgMjksIDMsIDI0OCwgMTIxLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEyNiwgMjksIDMsIDI0OCwgMTI0LCAyOSwgCisgICAgMywgMjQ4LCAxMjUsIDI5LCAzLCAyNDgsIDEyMiwgMjksIDMsIDI0NiwgMzYsIDI5LCAzLCAyNDYsIDM5LCAyOSwgMywgMjQ2LCAKKyAgICA0NSwgMjksIDMsIDI0NiwgNDMsIDI5LCAzLCAyNDYsIDQ0LCAyOSwgMywgMjQ2LCAzNywgMjksIDMsIDI1MCwgMjEyLCAyOSwgCisgICAgMywgMjUwLCAyMDYsIDI5LCAzLCAyNTAsIDIwOCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAyMDksIDI5LCAzLCAKKyAgICAyNTAsIDIxMCwgMjksIDMsIDI1MCwgMjA3LCAyOSwgMywgMjUyLCAxMTksIDI5LCAzLCAyNTIsIDk4LCAyOSwgMywgMjUyLCAKKyAgICAxMTAsIDI5LCAzLCAyNTIsIDExOCwgMjksIDMsIDI1MiwgMTEzLCAyOSwgMywgMjUyLCAxMTQsIDI5LCAzLCAyNTIsIDEwMiwgCisgICAgMTg4LCAxODcsIDEsIDIzNCwgMjUsIDE4OCwgMTg3LCAxLCAyMjEsIDI1NSwgMTg4LCAxODcsIDEsIDIzMywgMTE1LCAxODgsIAorICAgIDE4NywgMSwgMjMwLCAxNzcsIDE4OCwgMTg3LCAxLCAxOTEsIDE4OCwgMTg3LCAxLCAxOTgsIDE4OCwgMTg3LCAxLCAyNTAsIAorICAgIDExMCwgMTg4LCAxODcsIDEsIDIxNiwgOTEsIDE4OCwgMTg3LCAxLCAyMzQsIDEwNywgMTg4LCAxODcsIDEsIDIyOCwgMjU1LCAKKyAgICAxODgsIDE4NywgMSwgMjE2LCAxNTEsIDE4OCwgMTg3LCAxLCAyMTIsIDYwLCAxODgsIDE4NywgMSwgMjExLCA2OSwgMTg4LCAKKyAgICAxODcsIDEsIDI0MCwgMjIzLCAxODgsIDE4NywgMSwgMjE0LCAxOTAsIDE4OCwgMTg3LCAxLCA3NCwgMTg4LCAxODcsIDEsIAorICAgIDIyNSwgMTQ1LCAxODgsIDE4NywgMSwgMjUzLCAyMTAsIDE4OCwgMTg3LCAxLCAyNDIsIDE3NCwgMTg4LCAxODcsIDEsIDIzNSwgCisgICAgMTE4LCAxODgsIDE4NywgMSwgMjIzLCAxNjksIDE4OCwgMTg3LCAxLCAyNTIsIDE5OSwgMTg4LCAxODcsIDEsIDIzNSwgMTA2LCAKKyAgICAxODgsIDE4NywgMSwgMjQ3LCAyMjcsIDE4OCwgMTg3LCAxLCAyNDIsIDIyOCwgMTg4LCAxODcsIDEsIDI0OCwgMTMsIDE4OCwgCisgICAgMTg3LCAxLCAyNTIsIDI0LCAxODgsIDE4NywgMSwgMjM0LCAyNiwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzMsIDExNiwgCisgICAgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzAsIDE3OCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMjYsIDk0LCAyMzIsIAorICAgIDEzNCwgMTg4LCAxODcsIDEsIDIyOSwgMjM0LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIxNiwgOTIsIDIzMiwgMTM0LCAKKyAgICAxODgsIDE4NywgMSwgMjI5LCAwLCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNCwgMTg4LCAxODcsIAorICAgIDI1LCA1LCAyMjYsIDE5OSwgMTg4LCAxODcsIDI1LCA1LCAyMzYsIDQsIDE4OCwgMTg3LCAyNSwgNSwgMjU0LCAxMzAsIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjExLCAzOCwgMTg4LCAxODcsIDI1LCA1LCAyMTksIDM0LCAxODgsIDE4NywgMjUsIDUsIDIxNCwgMTg3LCAKKyAgICAxODgsIDE4NywgMjUsIDUsIDI1MCwgMTMxLCAxODgsIDE4NywgMjUsIDUsIDIyNywgMTk1LCAxODgsIDE4NywgMjUwLCAxMzIsIAorICAgIDE4OCwgMTg3LCAyMzIsIDkwLCAyMzUsIDE1NiwgMTg4LCAxODcsIDI1NCwgNTQsIDIzNSwgMTU2LCAxODgsIDE4NywgMjEsIAorICAgIDIxMCwgODYsIDE4OCwgMTg3LCAyMSwgMTExLCAxODgsIDE4NywgMjEsIDEwNSwgMTg4LCAxODcsIDIxLCAxNTgsIDE4OCwgCisgICAgMTg3LCAyMSwgMTYxLCAxODgsIDE4NywgMjEsIDE5MCwgMTg4LCAxODcsIDIxLCAxOTUsIDE4OCwgMTg3LCAyMSwgMTk5LCAKKyAgICAxODgsIDE4NywgMjEsIDE5NiwgMTg4LCAxODcsIDIxLCAyMDEsIDI0LCAxNDMsIDIyNywgODEsIDI0LCAxNDMsIDIyNywgODYsIAorICAgIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgCisgICAgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCAKKyAgICA2MiwgMjQsIDE0MywgMjQ1LCA2MCwgMjQsIDE0MywgMjQ1LCA2MSwgMjQsIDE0MywgMjQ1LCA1OCwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTEsIDI0LCAxNDMsIDI0MCwgMTUwLCAyNCwgMTQzLCAyNDAsIDE0OCwgMjQsIDE0MywgMjQwLCAxNDksIDI0LCAxNDMsIAorICAgIDI0MCwgMTU0LCAyNCwgMTQzLCAyNDAsIDE0NywgMjQsIDE0MywgMjQwLCAxNDYsIDI0LCAxNDMsIDI0MCwgMTU2LCAyNCwgCisgICAgMTQzLCAyNTQsIDQxLCAyNCwgMTQzLCAyNTQsIDQwLCAyNCwgOTAsIDIyOCwgMjI0LCAyNCwgOTAsIDIyOCwgMjMwLCAyNCwgCisgICAgOTAsIDIxOCwgMjA2LCAyNCwgOTAsIDIxOCwgMjA1LCAyNCwgOTAsIDIxNiwgOTcsIDI0LCA5MCwgMjE2LCA5NSwgMjQsIDkwLCAKKyAgICAyMTYsIDk0LCAyNCwgOTAsIDIxNiwgMTAwLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIxNiwgOTMsIDI0LCA5MCwgCisgICAgMjIzLCA4LCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMjMsIAorICAgIDEwLCAyNCwgOTAsIDIyMywgMTIsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjIzLCAwLCAyNCwgOTAsIDIzNCwgMjI0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjE3LCAyNCwgOTAsIDIzMCwgMjExLCAyNCwgOTAsIDIxOCwgMjE2LCAyNCwgOTAsIDIzMCwgMjE0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjIwLCAyNCwgOTAsIDIyNSwgNzksIDI0LCA5MCwgMjI1LCA4OCwgMjQsIDkwLCAyMjUsIDkyLCAyNCwgCisgICAgOTAsIDIxOCwgMjE0LCAyNCwgOTAsIDIyNSwgODIsIDI0LCA5MCwgMjI1LCA5NiwgMjQsIDkwLCAyMjUsIDk3LCAyNCwgOTAsIAorICAgIDIxOSwgMTQyLCAyNCwgOTAsIDIxOSwgMTQ1LCAyNCwgOTAsIDIxOCwgMjEwLCAyNCwgOTAsIDIxOCwgMjA4LCAyNCwgOTAsIAorICAgIDIxOSwgMTQwLCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOSwgMTQ5LCAyNCwgOTAsIDIxOSwgMTM0LCAyNCwgOTAsIAorICAgIDIxOSwgMTQ3LCAyNCwgOTAsIDIyNiwgMzQsIDI0LCA5MCwgMjI2LCAzNSwgMjQsIDkwLCAyMTEsIDI0LCAyNCwgOTAsIDIxMSwgCisgICAgMjUsIDI0LCA5MCwgMjUwLCA1MiwgMjQsIDkwLCAyNTAsIDUxLCAyNCwgOTAsIDIxOCwgMjIxLCAyNCwgOTAsIDIyNSwgMTMxLCAKKyAgICAyNCwgOTAsIDIyNSwgMTMwLCAxMCwgMTQsIDIzOCwgMzEsIDEwLCAxNCwgMjM4LCAzMCwgMTAsIDE0LCAyMzgsIDI5LCAxMCwgCisgICAgMTQsIDIzOCwgMjgsIDEwLCAxNCwgMjM4LCAyNywgMTAsIDE0LCAyMzgsIDI2LCAxMCwgMTQsIDIzOCwgMjUsIDEwLCAxNCwgCisgICAgMjM4LCAyNCwgMTAsIDE0LCAyMzgsIDIzLCAxMCwgMTQsIDIzOCwgMjIsIDEwLCAxNCwgMjM4LCAyMSwgMTAsIDE0LCAyMzgsIAorICAgIDIwLCAxMCwgMTQsIDIzOCwgMTksIDEwLCAxNCwgMjM4LCAxOCwgMTAsIDE0LCAyMzgsIDE3LCAxMCwgMTQsIDIzOCwgMTYsIAorICAgIDEwLCAxNCwgMjM4LCAxNSwgMTAsIDE0LCAyMzgsIDE0LCAxMCwgMTQsIDIzOCwgMTMsIDEwLCAxNCwgMjM4LCAxMiwgMTAsIAorICAgIDE0LCAyMzgsIDExLCAxMCwgMTQsIDIzOCwgMTAsIDEwLCAxNCwgMjM4LCA5LCAxMCwgMTQsIDIzOCwgOCwgMTAsIDE0LCAKKyAgICAyMzgsIDcsIDEwLCAxNCwgMjM4LCA2LCAxMCwgMTQsIDIzOCwgNSwgMTAsIDE0LCAyMzgsIDQsIDEwLCAxNCwgMjM4LCAzLCAKKyAgICAxMCwgMTQsIDIzOCwgMiwgMTAsIDE0LCAyMzgsIDEsIDEwLCAxNCwgMjM4LCAwLCAxMCwgMTQsIDIzNywgMjU1LCAxMCwgMTQsIAorICAgIDIzNywgMjU0LCAxMCwgMTQsIDIzNywgMjUzLCAxMCwgMTQsIDIzNywgMjUyLCAxMCwgMTQsIDIzNywgMjUxLCAxMCwgMTQsIAorICAgIDIzNywgMjUwLCAxMCwgMTQsIDIzNywgMjQ5LCAxMCwgMTQsIDIzNywgMjQ4LCAxMCwgMTQsIDIzNywgMjQ3LCAxMCwgMTQsIAorICAgIDIzNywgMjQ2LCAxMCwgMTQsIDIzNywgMjQ1LCAxMCwgMTQsIDIzNywgMjQ0LCAxMCwgMTQsIDIzNywgMjQzLCAxMCwgMTQsIAorICAgIDIzNywgMjQyLCAxMCwgMTQsIDIzNywgMjQxLCAxMCwgMTQsIDIzNywgMjQwLCAxMCwgMTQsIDIzNywgMjM5LCAxMCwgMTQsIAorICAgIDIzNywgMjM4LCAxMCwgMTQsIDIzNywgMjM3LCAxMCwgMTQsIDIzNywgMjM2LCAxMCwgMTQsIDIzNywgMjM1LCAxMCwgMTQsIAorICAgIDIzNywgMjM0LCAxMCwgMTQsIDIzNywgMjMzLCAxMCwgMTQsIDIzNywgMjMyLCAxMCwgMTQsIDIzNywgMjMxLCAxMCwgMTQsIAorICAgIDIzNywgMjMwLCAxMCwgMTQsIDIzNywgMjI5LCAxMCwgMTQsIDIzNywgMjI4LCAxMCwgMTQsIDIzNywgMjI3LCAxMCwgMTQsIAorICAgIDIzNywgMjI2LCAxMCwgMTQsIDIzNywgMjI1LCAxMCwgMTQsIDIzNywgMjI0LCAxMCwgMTQsIDIzNywgMjIzLCAxMCwgMTQsIAorICAgIDIzNywgMjIyLCAxMCwgMTQsIDIzNywgMjIxLCAxMCwgMTQsIDIzNywgMjIwLCAxMCwgMTQsIDIzNywgMjE5LCAxMCwgMTQsIAorICAgIDIzNywgMjE4LCAxMCwgMTQsIDIzNywgMjE3LCAxMCwgMTQsIDIzNywgMjE2LCAxMCwgMTQsIDIzNywgMjE1LCAxMCwgMTQsIAorICAgIDIzNywgMjE0LCAxMCwgMTQsIDIzNywgMjEzLCAxMCwgMTQsIDIzNywgMjEyLCAxMCwgMTQsIDIzNywgMjExLCAxMCwgMTQsIAorICAgIDIzNywgMjEwLCAxMCwgMTQsIDIzNywgMjA5LCAxMCwgMTQsIDIzNywgMjA4LCAxMCwgMTQsIDIzNywgMjA3LCAxMCwgMTQsIAorICAgIDIzNywgMjA2LCAxMCwgMTQsIDIzNywgMjA1LCAxMCwgMTQsIDIzNywgMjA0LCAxMCwgMTQsIDIzNywgMjAzLCAxMCwgMTQsIAorICAgIDIzNywgMjAyLCAxMCwgMTQsIDIzNywgMjAxLCAxMCwgMTQsIDIzNywgMjAwLCAxMCwgMTQsIDIzNywgMTk5LCAxMCwgMTQsIAorICAgIDIzNywgMTk4LCAxMCwgMTQsIDIzNywgMTk3LCAxMCwgMTQsIDIzNywgMTk2LCAxMCwgMTQsIDIzNywgMTk1LCAxMCwgMTQsIAorICAgIDIzNywgMTk0LCAxMCwgMTQsIDIzNywgMTkzLCAxMCwgMTQsIDIzNywgMTkyLCAxMCwgMTQsIDIzNywgMTkxLCAxMCwgMTQsIAorICAgIDIzNywgMTkwLCAxMCwgMTQsIDIzNywgMTg5LCAxMCwgMTQsIDIzNywgMTg4LCAxMCwgMTQsIDIzNywgMTg3LCAxMCwgMTQsIAorICAgIDIzNywgMTg2LCAxMCwgMTQsIDIzNywgMTg1LCAxMCwgMTQsIDIzNywgMTg0LCAxMCwgMTQsIDIzNywgMTgzLCAxMCwgMTQsIAorICAgIDIzNywgMTgyLCAxMCwgMTQsIDIzNywgMTgxLCAxMCwgMTQsIDIzNywgMTgwLCAxMCwgMTQsIDIzNywgMTc5LCAxMCwgMTQsIAorICAgIDIzNywgMTc4LCAxMCwgMTQsIDIzNywgMTc3LCAxMCwgMTQsIDIzNywgMTc2LCAxMCwgMTQsIDIzNywgMTc1LCAxMCwgMTQsIAorICAgIDIzNywgMTc0LCAxMCwgMTQsIDIzNywgMTczLCAxMCwgMTQsIDIzNywgMTcyLCAxMCwgMTQsIDIzNywgMTcxLCAxMCwgMTQsIAorICAgIDIzNywgMTcwLCAxMCwgMTQsIDIzNywgMTY5LCAxMCwgMTQsIDIzNywgMTY4LCAxMCwgMTQsIDIzNywgMTY3LCAxMCwgMTQsIAorICAgIDIzNywgMTY2LCAxMCwgMTQsIDIzNywgMTY1LCAxMCwgMTQsIDIzNywgMTY0LCAxMCwgMTQsIDIzNywgMTYzLCAxMCwgMTQsIAorICAgIDIzNywgMTYyLCAxMCwgMTQsIDIzNywgMTYxLCAxMCwgMTQsIDIzNywgMTYwLCAxMCwgMTQsIDIzNywgMTU5LCAxMCwgMTQsIAorICAgIDIzNywgMTU4LCAxMCwgMTQsIDIzNywgMTU3LCAxMCwgMTQsIDIzNywgMTU2LCAxMCwgMTQsIDIzNywgMTU1LCAxMCwgMTQsIAorICAgIDIzNywgMTU0LCAxMCwgMTQsIDIzNywgMTUzLCAxMCwgMTQsIDIzNywgMTUyLCAxMCwgMTQsIDIzNywgMTUxLCAxMCwgMTQsIAorICAgIDIzNywgMTUwLCAxMCwgMTQsIDIzNywgMTQ5LCAxMCwgMTQsIDIzNywgMTQ4LCAxMCwgMTQsIDIzNywgMTQ3LCAxMCwgMTQsIAorICAgIDIzNywgMTQ2LCAxMCwgMTQsIDIzNywgMTQ1LCAxMCwgMTQsIDIzNywgMTQ0LCAxMCwgMTQsIDIzNywgMTQzLCAxMCwgMTQsIAorICAgIDIzNywgMTQyLCAxMCwgMTQsIDIzNywgMTQxLCAxMCwgMTQsIDIzNywgMTQwLCAxMCwgMTQsIDIzNywgMTM5LCAxMCwgMTQsIAorICAgIDIzNywgMTM4LCAxMCwgMTQsIDIzNywgMTM3LCAxMCwgMTQsIDIzNywgMTM2LCAxMCwgMTQsIDIzNywgMTM1LCAxMCwgMTQsIAorICAgIDIzNywgMTM0LCAxMCwgMTQsIDIzNywgMTMzLCAxMCwgMTQsIDIzNywgMTMyLCAxMCwgMTQsIDIzNywgMTMxLCAxMCwgMTQsIAorICAgIDIzNywgMTMwLCAxMCwgMTQsIDIzNywgMTI5LCAxMCwgMTQsIDIzNywgMTI4LCAxMCwgMTQsIDIzNywgMTI3LCAxMCwgMTQsIAorICAgIDIzNywgMTI2LCAxMCwgMTQsIDIzNywgMTI1LCAxMCwgMTQsIDIzNywgMTI0LCAxMCwgMTQsIDIzNywgMTIzLCAxMCwgMTQsIAorICAgIDIzNywgMTIyLCAxMCwgMTQsIDIzNywgMTIxLCAxMCwgMTQsIDIzNywgMTIwLCAxMCwgMTQsIDIzNywgMTE5LCAxMCwgMTQsIAorICAgIDIzNywgMTE4LCAxMCwgMTQsIDIzNywgMTE3LCAxMCwgMTQsIDIzNywgMTE2LCAxMCwgMTQsIDIzNywgMTE1LCAxMCwgMTQsIAorICAgIDIzNywgMTE0LCAxMCwgMTQsIDIzNywgMTEzLCAxMCwgMTQsIDIzNywgMTEyLCAxMCwgMTQsIDIzNywgMTExLCAxMCwgMTQsIAorICAgIDIzNywgMTEwLCAxMCwgMTQsIDIzNywgMTA5LCAxMCwgMTQsIDIzNywgMTA4LCAxMCwgMTQsIDIzNywgMTA3LCAxMCwgMTQsIAorICAgIDIzNywgMTA2LCAxMCwgMTQsIDIzNywgMTA1LCAxMCwgMTQsIDIzNywgMTA0LCAxMCwgMTQsIDIzNywgMTAzLCAxMCwgMTQsIAorICAgIDIzNywgMTAyLCAxMCwgMTQsIDIzNywgMTAxLCAxMCwgMTQsIDIzNywgMTAwLCAxMCwgMTQsIDIzNywgOTksIDEwLCAxNCwgCisgICAgMjM3LCA5OCwgMTAsIDE0LCAyMzcsIDk3LCAxMCwgMTQsIDIzNywgOTYsIDEwLCAxNCwgMjM3LCA5NSwgMTAsIDE0LCAyMzcsIAorICAgIDk0LCAxMCwgMTQsIDIzNywgOTMsIDEwLCAxNCwgMjM3LCA5MiwgMTAsIDE0LCAyMzcsIDkxLCAxMCwgMTQsIDIzNywgOTAsIAorICAgIDEwLCAxNCwgMjM3LCA4OSwgMTAsIDE0LCAyMzcsIDg4LCAxMCwgMTQsIDIzNywgODcsIDEwLCAxNCwgMjM3LCA4NiwgMTAsIAorICAgIDE0LCAyMzcsIDg1LCAxMCwgMTQsIDIzNywgODQsIDEwLCAxNCwgMjM3LCA4MywgMTAsIDE0LCAyMzcsIDgyLCAxMCwgMTQsIAorICAgIDIzNywgODEsIDEwLCAxNCwgMjM3LCA4MCwgMTAsIDE0LCAyMzcsIDc5LCAxMCwgMTQsIDIzNywgNzgsIDEwLCAxNCwgMjM3LCAKKyAgICA3NywgMTAsIDE0LCAyMzcsIDc2LCAxMCwgMTQsIDIzNywgNzUsIDEwLCAxNCwgMjM3LCA3NCwgMTAsIDE0LCAyMzcsIDczLCAKKyAgICAxMCwgMTQsIDIzNywgNzIsIDEwLCAxNCwgMjM3LCA3MSwgMTAsIDE0LCAyMzcsIDcwLCAxMCwgMTQsIDIzNywgNjksIDEwLCAKKyAgICAxNCwgMjM3LCA2OCwgMTAsIDE0LCAyMzcsIDY3LCAxMCwgMTQsIDIzNywgNjYsIDEwLCAxNCwgMjM3LCA2NSwgMTAsIDE0LCAKKyAgICAyMzcsIDY0LCAxMCwgMTQsIDIzNywgNjMsIDEwLCAxNCwgMjM3LCA2MiwgMTAsIDE0LCAyMzcsIDYxLCAxMCwgMTQsIDIzNywgCisgICAgNjAsIDEwLCAxNCwgMjM3LCA1OSwgMTAsIDE0LCAyMzcsIDU4LCAxMCwgMTQsIDIzNywgNTcsIDEwLCAxNCwgMjM3LCA1NiwgCisgICAgMTAsIDE0LCAyMzcsIDU1LCAxMCwgMTQsIDIzNywgNTQsIDEwLCAxNCwgMjM3LCA1MywgMTAsIDE0LCAyMzcsIDUyLCAxMCwgCisgICAgMTQsIDIzNywgNTEsIDEwLCAxNCwgMjM3LCA1MCwgMTAsIDE0LCAyMzcsIDQ5LCAxMCwgMTQsIDIzNywgNDgsIDEwLCAxNCwgCisgICAgMjM3LCA0NywgMTAsIDE0LCAyMzcsIDQ2LCAxMCwgMTQsIDIzNywgNDUsIDEwLCAxNCwgMjM3LCA0NCwgMTAsIDE0LCAyMzcsIAorICAgIDQzLCAxMCwgMTQsIDIzNywgNDIsIDEwLCAxNCwgMjM3LCA0MSwgMTAsIDE0LCAyMzcsIDQwLCAxMCwgMTQsIDIzNywgMzksIAorICAgIDEwLCAxNCwgMjM3LCAzOCwgMTAsIDE0LCAyMzcsIDM3LCAxMCwgMTQsIDIzNywgMzYsIDEwLCAxNCwgMjM3LCAzNSwgMTAsIAorICAgIDE0LCAyMzcsIDM0LCAxMCwgMTQsIDIzNywgMzMsIDEwLCAxNCwgMjM3LCAzMiwgMTAsIDE0LCAyMzcsIDMxLCAxMCwgMTQsIAorICAgIDIzNywgMzAsIDEwLCAxNCwgMjM3LCAyOSwgMTAsIDE0LCAyMzcsIDI4LCAxMCwgMTQsIDIzNywgMjcsIDEwLCAxNCwgMjM3LCAKKyAgICAyNiwgMTAsIDE0LCAyMzcsIDI1LCAxMCwgMTQsIDIzNywgMjQsIDEwLCAxNCwgMjM3LCAyMywgMTAsIDE0LCAyMzcsIDIyLCAKKyAgICAxMCwgMTQsIDIzNywgMjEsIDEwLCAxNCwgMjM3LCAyMCwgMTAsIDE0LCAyMzcsIDE5LCAxMCwgMTQsIDIzNywgMTgsIDEwLCAKKyAgICAxNCwgMjM3LCAxNywgMTAsIDE0LCAyMzcsIDE2LCAxMCwgMTQsIDIzNywgMTUsIDEwLCAxNCwgMjM3LCAxNCwgMTAsIDE0LCAKKyAgICAyMzcsIDEzLCAxMCwgMTQsIDIzNywgMTIsIDEwLCAxNCwgMjM3LCAxMSwgMTAsIDE0LCAyMzcsIDEwLCAxMCwgMTQsIDIzNywgCisgICAgOSwgMTAsIDE0LCAyMzcsIDgsIDEwLCAxNCwgMjM3LCA3LCAxMCwgMTQsIDIzNywgNiwgMTAsIDE0LCAyMzcsIDUsIDEwLCAKKyAgICAxNCwgMjM3LCA0LCAxMCwgMTQsIDIzNywgMywgMTAsIDE0LCAyMzcsIDIsIDEwLCAxNCwgMjM3LCAxLCAxMCwgMTQsIDIzNywgCisgICAgMCwgMTAsIDE0LCAyMzYsIDI1NSwgMTAsIDE0LCAyMzYsIDI1NCwgMTAsIDE0LCAyMzYsIDI1MywgMTAsIDE0LCAyMzYsIAorICAgIDI1MiwgMTAsIDE0LCAyMzYsIDI1MSwgMTAsIDE0LCAyMzYsIDI1MCwgMTAsIDE0LCAyMzYsIDI0OSwgMTAsIDE0LCAyMzYsIAorICAgIDI0OCwgMTAsIDE0LCAyMzYsIDI0NywgMTAsIDE0LCAyMzYsIDI0NiwgMTAsIDE0LCAyMzYsIDI0NSwgMTAsIDE0LCAyMzYsIAorICAgIDI0NCwgMTAsIDE0LCAyMzYsIDI0MywgMTAsIDE0LCAyMzYsIDI0MiwgMTAsIDE0LCAyMzYsIDI0MSwgMTAsIDE0LCAyMzYsIAorICAgIDI0MCwgMTAsIDE0LCAyMzYsIDIzOSwgMTAsIDE0LCAyMzYsIDIzOCwgMTAsIDE0LCAyMzYsIDIzNywgMTAsIDE0LCAyMzYsIAorICAgIDIzNiwgMTAsIDE0LCAyMzYsIDIzNSwgMTAsIDE0LCAyMzYsIDIzNCwgMTAsIDE0LCAyMzYsIDIzMywgMTAsIDE0LCAyMzYsIAorICAgIDIzMiwgMTAsIDE0LCAyMzYsIDIzMSwgMTAsIDE0LCAyMzYsIDIzMCwgMTAsIDE0LCAyMzYsIDIyOSwgMTAsIDE0LCAyMzYsIAorICAgIDIyOCwgMTAsIDE0LCAyMzYsIDIyNywgMTAsIDE0LCAyMzYsIDIyNiwgMTAsIDE0LCAyMzYsIDIyNSwgMTAsIDE0LCAyMzYsIAorICAgIDIyNCwgMTAsIDE0LCAyMzYsIDIyMywgMTAsIDE0LCAyMzYsIDIyMiwgMTAsIDE0LCAyMzYsIDIyMSwgMTAsIDE0LCAyMzYsIAorICAgIDIyMCwgMTAsIDE0LCAyMzYsIDIxOSwgMTAsIDE0LCAyMzYsIDIxOCwgMTAsIDE0LCAyMzYsIDIxNywgMTAsIDE0LCAyMzYsIAorICAgIDIxNiwgMTAsIDE0LCAyMzYsIDIxNSwgMTAsIDE0LCAyMzYsIDIxNCwgMTAsIDE0LCAyMzYsIDIxMywgMTAsIDE0LCAyMzYsIAorICAgIDIxMiwgMTAsIDE0LCAyMzYsIDIxMSwgMTAsIDE0LCAyMzYsIDIxMCwgMTAsIDE0LCAyMzYsIDIwOSwgMTAsIDE0LCAyMzYsIAorICAgIDIwOCwgMTAsIDE0LCAyMzYsIDIwNywgMTAsIDE0LCAyMzYsIDIwNiwgMTAsIDE0LCAyMzYsIDIwNSwgMTAsIDE0LCAyMzYsIAorICAgIDIwNCwgMTAsIDE0LCAyMzYsIDIwMywgMTAsIDE0LCAyMzYsIDIwMiwgMTAsIDE0LCAyMzYsIDIwMSwgMTAsIDE0LCAyMzYsIAorICAgIDIwMCwgMTAsIDE0LCAyMzYsIDE5OSwgMTAsIDE0LCAyMzYsIDE5OCwgMTAsIDE0LCAyMzYsIDE5NywgMTAsIDE0LCAyMzYsIAorICAgIDE5NiwgMTAsIDE0LCAyMzYsIDE5NSwgMTAsIDE0LCAyMzYsIDE5NCwgMTAsIDE0LCAyMzYsIDE5MywgMTAsIDE0LCAyMzYsIAorICAgIDE5MiwgMTAsIDE0LCAyMzYsIDE5MSwgMTAsIDE0LCAyMzYsIDE5MCwgMTAsIDE0LCAyMzYsIDE4OSwgMTAsIDE0LCAyMzYsIAorICAgIDE4OCwgMTAsIDE0LCAyMzYsIDE4NywgMTAsIDE0LCAyMzYsIDE4NiwgMTAsIDE0LCAyMzYsIDE4NSwgMTAsIDE0LCAyMzYsIAorICAgIDE4NCwgMTAsIDE0LCAyMzYsIDE4MywgMTAsIDE0LCAyMzYsIDE4MiwgMTAsIDE0LCAyMzYsIDE4MSwgMTAsIDE0LCAyMzYsIAorICAgIDE4MCwgMTAsIDE0LCAyMzYsIDE3OSwgMTAsIDE0LCAyMzYsIDE3OCwgMTAsIDE0LCAyMzYsIDE3NywgMTAsIDE0LCAyMzYsIAorICAgIDE3NiwgMTAsIDE0LCAyMzYsIDE3NSwgMTAsIDE0LCAyMzYsIDE3NCwgMTAsIDE0LCAyMzYsIDE3MywgMTAsIDE0LCAyMzYsIAorICAgIDE3MiwgMTAsIDE0LCAyMzYsIDE3MSwgMTAsIDE0LCAyMzYsIDE3MCwgMTAsIDE0LCAyMzYsIDE2OSwgMTAsIDE0LCAyMzYsIAorICAgIDE2OCwgMTAsIDE0LCAyMzYsIDE2NywgMTAsIDE0LCAyMzYsIDE2NiwgMTAsIDE0LCAyMzYsIDE2NSwgMTAsIDE0LCAyMzYsIAorICAgIDE2NCwgMTAsIDE0LCAyMzYsIDE2MywgMTAsIDE0LCAyMzYsIDE2MiwgMTAsIDE0LCAyMzYsIDE2MSwgMTAsIDE0LCAyMzYsIAorICAgIDE2MCwgMTAsIDE0LCAyMzYsIDE1OSwgMTAsIDE0LCAyMzYsIDE1OCwgMTAsIDE0LCAyMzYsIDE1NywgMTAsIDE0LCAyMzYsIAorICAgIDE1NiwgMTAsIDE0LCAyMzYsIDE1NSwgMTAsIDE0LCAyMzYsIDE1NCwgMTAsIDE0LCAyMzYsIDE1MywgMTAsIDE0LCAyMzYsIAorICAgIDE1MiwgMTAsIDE0LCAyMzYsIDE1MSwgMTAsIDE0LCAyMzYsIDE1MCwgMTAsIDE0LCAyMzYsIDE0OSwgMTAsIDE0LCAyMzYsIAorICAgIDE0OCwgMTAsIDE0LCAyMzYsIDE0NywgMTAsIDE0LCAyMzYsIDE0NiwgMTAsIDE0LCAyMzYsIDE0NSwgMTAsIDE0LCAyMzYsIAorICAgIDE0NCwgMTAsIDE0LCAyMzYsIDE0MywgMTAsIDE0LCAyMzYsIDE0MiwgMTAsIDE0LCAyMzYsIDE0MSwgMTAsIDE0LCAyMzYsIAorICAgIDE0MCwgMTAsIDE0LCAyMzYsIDEzOSwgMTAsIDE0LCAyMzYsIDEzOCwgMTAsIDE0LCAyMzYsIDEzNywgMTAsIDE0LCAyMzYsIAorICAgIDEzNiwgMTAsIDE0LCAyMzYsIDEzNSwgMTAsIDE0LCAyMzYsIDEzNCwgMTAsIDE0LCAyMzYsIDEzMywgMTAsIDE0LCAyMzYsIAorICAgIDEzMiwgMTAsIDE0LCAyMzYsIDEzMSwgMTAsIDE0LCAyMzYsIDEzMCwgMTAsIDE0LCAyMzYsIDEyOSwgMTAsIDE0LCAyMzYsIAorICAgIDEyOCwgMTAsIDE0LCAyMzYsIDEyNywgMTAsIDE0LCAyMzYsIDEyNiwgMTAsIDE0LCAyMzYsIDEyNSwgMTAsIDE0LCAyMzYsIAorICAgIDEyNCwgMTAsIDE0LCAyMzYsIDEyMywgMTAsIDE0LCAyMzYsIDEyMiwgMTAsIDE0LCAyMzYsIDEyMSwgMTAsIDE0LCAyMzYsIAorICAgIDEyMCwgMTAsIDE0LCAyMzYsIDExOSwgMTAsIDE0LCAyMzYsIDExOCwgMTAsIDE0LCAyMzYsIDExNywgMTAsIDE0LCAyMzYsIAorICAgIDExNiwgMTAsIDE0LCAyMzYsIDExNSwgMTAsIDE0LCAyMzYsIDExNCwgMTAsIDE0LCAyMzYsIDExMywgMTAsIDE0LCAyMzYsIAorICAgIDExMiwgMTAsIDE0LCAyMzYsIDExMSwgMTAsIDE0LCAyMzYsIDExMCwgMTAsIDE0LCAyMzYsIDEwOSwgMTAsIDE0LCAyMzYsIAorICAgIDEwOCwgMTAsIDE0LCAyMzYsIDEwNywgMTAsIDE0LCAyMzYsIDEwNiwgMTAsIDE0LCAyMzYsIDEwNSwgMTAsIDE0LCAyMzYsIAorICAgIDEwNCwgMTAsIDE0LCAyMzYsIDEwMywgMTAsIDE0LCAyMzYsIDEwMiwgMTAsIDE0LCAyMzYsIDEwMSwgMTAsIDE0LCAyMzYsIAorICAgIDEwMCwgMTAsIDE0LCAyMzYsIDk5LCAxMCwgMTQsIDIzNiwgOTgsIDEwLCAxNCwgMjM2LCA5NywgMTAsIDE0LCAyMzYsIDk2LCAKKyAgICAxMCwgMTQsIDIzNiwgOTUsIDEwLCAxNCwgMjM2LCA5NCwgMTAsIDE0LCAyMzYsIDkzLCAxMCwgMTQsIDIzNiwgOTIsIDEwLCAKKyAgICAxNCwgMjM2LCA5MSwgMTAsIDE0LCAyMzYsIDkwLCAxMCwgMTQsIDIzNiwgODksIDEwLCAxNCwgMjM2LCA4OCwgMTAsIDE0LCAKKyAgICAyMzYsIDg3LCAxMCwgMTQsIDIzNiwgODYsIDEwLCAxNCwgMjM2LCA4NSwgMTAsIDE0LCAyMzYsIDg0LCAxMCwgMTQsIDIzNiwgCisgICAgODMsIDEwLCAxNCwgMjM2LCA4MiwgMTAsIDE0LCAyMzYsIDgxLCAxMCwgMTQsIDIzNiwgODAsIDEwLCAxNCwgMjM2LCA3OSwgCisgICAgMTAsIDE0LCAyMzYsIDc4LCAxMCwgMTQsIDIzNiwgNzcsIDEwLCAxNCwgMjM2LCA3NiwgMTAsIDE0LCAyMzYsIDc1LCAxMCwgCisgICAgMTQsIDIzNiwgNzQsIDEwLCAxNCwgMjM2LCA3MywgMTAsIDE0LCAyMzYsIDcyLCA3LCA0LCAyNywgMjQ0LCAxMzMsIDcsIDQsIAorICAgIDI3LCAyNDQsIDEyOSwgNywgNCwgMjcsIDI0NCwgODQsIDcsIDQsIDI3LCAyNDQsIDEzMiwgNywgNCwgMjcsIDI0NCwgMTMxLCAKKyAgICA3LCA0LCAyNywgMjAwLCAyMjIsIDk0LCAyMTcsIDE1MywgNywgNCwgMjcsIDIxOCwgMTcwLCAxNTAsIDQsIDI3LCAyMzEsIAorICAgIDY0LCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyNDUsIDIyMSwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjM1LCAKKyAgICAyMzQsIDE1MCwgNCwgMjcsIDIxMywgMTgwLCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyMTEsIDE2MCwgOTQsIDEsIAorICAgIDIxMCwgMjM0LCAyLCAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIzNSwgNTYsIDIxNCwgMTEsIDk0LCAyNywgMjExLCA2LCAKKyAgICAyMTAsIDIzNCwgMjEwLCAyMzQsIDIyNSwgMjQzLCA5NCwgMSwgMjU0LCAxNDcsIDI1MywgMTcwLCA5NCwgMSwgMjExLCAyNDcsIAorICAgIDI1NCwgMTc5LCA5NCwgMSwgMjExLCAyNDcsIDI0OCwgMTk3LCA5NCwgMSwgMjExLCAyNDcsIDI0MSwgMjQ1LCA5NCwgMSwgCisgICAgMjExLCAyNDcsIDIzNSwgMCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDEwMCwgOTQsIDEsIDIxMSwgMjQ3LCA0MCwgMjMxLCAKKyAgICA3MCwgOTQsIDEsIDIxMSwgMjQ3LCAyMjMsIDcwLCA5NCwgMSwgMjExLCAyNDcsIDIxNywgMzksIDk0LCAxLCAyNTQsIDE0NywgCisgICAgOTYsIDUwLCA5NCwgMSwgMjIwLCAyMywgMiwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyMTksIAorICAgIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyNDgsIDIxNiwgMjIsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMSwgCisgICAgMjIwLCAyMywgMiwgMjQ4LCAyMTYsIDIyLCAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAxMDksIDIsIDIyNSwgMjQzLCAKKyAgICA5NCwgMSwgMTA5LCAyLCAyMjQsIDc5LCA5NCwgMSwgMTA5LCAyLCAyMzEsIDE3NiwgOTQsIDEsIDI1MiwgMzcsIDIsIDI0OCwgCisgICAgMjE1LCA5NCwgMSwgMjQyLCAyMDksIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjQ4LCAxOTgsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjQxLCAyNDYsIDIsIDIzMSwgMTc2LCA5NCwgMSwgMjE0LCA0LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxMCwgOTgsIDIsIAorICAgIDI0OCwgMjE1LCA5NCwgMSwgMjE2LCAyMzIsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgNDAsIDIzNSwgMSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzUsIDEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMzLCAxMDEsIAorICAgIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMxLCA3MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjcsIDE5OSwgMiwgMjQ4LCAyMTUsIAorICAgIDk0LCAxLCAyMjEsIDI1MiwgMiwgMjQ4LCAyMTUsIDk0LCAxLCA0MCwgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjE1LCAxODEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjI0LCA0MywgMiwgCisgICAgMjQ4LCAyMTUsIDk0LCAxLCAyMjMsIDcxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyMCwgMjMsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgMjE3LCA0MCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTQsIDQsIDIsIDI0MSwgNjgsIDk0LCAxLCAyNTIsIDM3LCAyLCAKKyAgICAyMjMsIDE3MiwgOTQsIDEsIDIzNSwgMSwgMiwgMjIzLCAxNzIsIDk0LCAxLCAyMjUsIDIyNSwgMiwgMjIzLCAxNzIsIDk0LCAKKyAgICAyNywgMTA5LCAyMzMsIDEwMCwgOSwgMSwgMTA5LCAyMTIsIDQ3LCA1MywgMTcsIDksIDEsIDEwOSwgMjEyLCA0NywgNDAsIAorICAgIDE3LCA5LCAxLCAyNTIsIDczLCA1MywgMTcsIDksIDEsIDI1MiwgNzMsIDQwLCAxNywgOSwgMSwgMjUyLCA3MywgNjUsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDczLCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNTMsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNDAsIDE3LCAKKyAgICA5LCAxLCAyMjUsIDIwOSwgNjUsIDE3LCA5LCAxLCAyMjUsIDIwOSwgMTQ3LCAxNywgOSwgMSwgMjUyLCA2MSwgNTMsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDYxLCA0MCwgMTcsIDksIDEsIDI1MiwgNjEsIDY1LCAxNywgOSwgMSwgMjUyLCA2MSwgMTQ3LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDUzLCAxNywgOSwgMSwgMjE1LCAxNDgsIDQwLCAxNywgOSwgMSwgMjE1LCAxNDgsIDY1LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDE0NywgMTcsIDksIDEsIDIxNywgNywgNTMsIDE3LCA5LCAxLCAyMTcsIDcsIDQwLCAxNywgOSwgMSwgCisgICAgMjE3LCA3LCA2NSwgMTcsIDksIDEsIDIxNywgNywgMTQ3LCAxNywgOSwgMSwgMjE1LCAxNTAsIDUzLCAxNywgOSwgMSwgMjE1LCAKKyAgICAxNTAsIDQwLCAxNywgOSwgMSwgMjE1LCAxNTAsIDY1LCAxNywgOSwgMSwgMjE1LCAxNTAsIDE0NywgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCA1MywgMTcsIDksIDEsIDIxMywgMjQ5LCA0MCwgMTcsIDksIDEsIDIxMywgMjQ5LCA2NSwgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwNywgNTMsIDE3LCA5LCAxLCAyMjUsIDIwNywgNDAsIDE3LCA5LCAxLCAyMjUsIAorICAgIDIwNywgNjUsIDE3LCA5LCAxLCAyMjUsIDIwNywgMTQ3LCAxNywgOSwgMSwgMjQ2LCA1MiwgNTMsIDE3LCA5LCAxLCAyNDYsIAorICAgIDUyLCA0MCwgMTcsIDksIDEsIDI0NiwgNTIsIDY1LCAxNywgOSwgMSwgMjQ2LCA1MiwgMTQ3LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDUzLCAxNywgOSwgMSwgMjI3LCAxNTgsIDQwLCAxNywgOSwgMSwgMjI3LCAxNTgsIDY1LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDE0NywgMTcsIDksIDEsIDIxNywgMjgsIDUzLCAxNywgOSwgMSwgMjE3LCAyOCwgNDAsIDE3LCA5LCAxLCAyMTcsIAorICAgIDI4LCA2NSwgMTcsIDksIDEsIDIxNywgMjgsIDE0NywgMTcsIDksIDEsIDIxNywgMjYsIDUzLCAxNywgOSwgMSwgMjE3LCAyNiwgCisgICAgNDAsIDE3LCA5LCAxLCAyMTcsIDI2LCA2NSwgMTcsIDksIDEsIDIxNywgMjYsIDE0NywgMTcsIDksIDEsIDI0OCwgMTQxLCAKKyAgICA1MywgMTcsIDksIDEsIDI0OCwgMTQxLCA0MCwgMTcsIDksIDEsIDI0OCwgMjEwLCA1MywgMTcsIDksIDEsIDI0OCwgMjEwLCAKKyAgICA0MCwgMTcsIDksIDEsIDI0NiwgNzksIDUzLCAxNywgOSwgMSwgMjQ2LCA3OSwgNDAsIDE3LCA5LCAxLCAyNDgsIDEzOSwgNTMsIAorICAgIDE3LCA5LCAxLCAyNDgsIDEzOSwgNDAsIDE3LCA5LCAxLCAyMzUsIDEyNywgNTMsIDE3LCA5LCAxLCAyMzUsIDEyNywgNDAsIAorICAgIDE3LCA5LCAxLCAyMjIsIDE3NCwgNTMsIDE3LCA5LCAxLCAyMjIsIDE3NCwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNTMsIAorICAgIDE3LCA5LCAxLCAyMzQsIDE4MSwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNjUsIDE3LCA5LCAxLCAyMzQsIDE4MSwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDUzLCAxNywgOSwgMSwgMjQzLCAxMzAsIDQwLCAxNywgOSwgMSwgMjQzLCAxMzAsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDE0NywgMTcsIDksIDEsIDI0MiwgMTA5LCA1MywgMTcsIDksIDEsIDI0MiwgMTA5LCA0MCwgCisgICAgMTcsIDksIDEsIDI0MiwgMTA5LCA2NSwgMTcsIDksIDEsIDI0MiwgMTA5LCAxNDcsIDE3LCA5LCAxLCAyMjksIDgsIDUzLCAKKyAgICAxNywgOSwgMSwgMjI5LCA4LCA0MCwgMTcsIDksIDEsIDIyOSwgOCwgNjUsIDE3LCA5LCAxLCAyMjksIDgsIDE0NywgMTcsIDksIAorICAgIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA1MywgMTcsIDksIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA0MCwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCA1MywgMTcsIDksIDEsIDIyMiwgMjE3LCA0MCwgMTcsIDksIDEsIDIyMiwgMjE3LCA2NSwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCAxNDcsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIDcyLCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgCisgICAgNzIsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgCisgICAgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDY1LCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA0MCwgMTcsIAorICAgIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNjUsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDE0NywgMTcsIDksIAorICAgIDEsIDc3LCAyNTIsIDE0MSwgNTMsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIDQwLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCAKKyAgICAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxNiwgNTksIAorICAgIDQ4LCA5LCAxNiwgNTksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDQ4LCA5LCAxNiwgMTEzLCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxNiwgMTM0LCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAxNzAsIDIyNSwgMTAsIDI0NiwgMTEyLCA0OCwgOSwgCisgICAgMTYsIDEzNCwgMTcwLCAyMjUsIDEwLCAyNDYsIDExMiwgNTEsIDksIDE2LCAyNDQsIDE5LCAxNzAsIDQ4LCA5LCAxNiwgMjQ0LCAKKyAgICAxOSwgMTcwLCA1MSwgOSwgMTYsIDUyLCA2NywgMjUyLCAxNDksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgCisgICAgOSwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNTEsIDksIDE2LCAyMjIsIDIzNiwgOSwgMTYsIDQsIDIxNywgODIsIDQ4LCA5LCAKKyAgICAxNiwgNCwgMjE3LCA4MiwgNTEsIDksIDEsIDIyOSwgODUsIDUzLCAxNywgOSwgMSwgMjI5LCA4NSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjksIDg1LCA2NSwgMTcsIDksIDEsIDIyOSwgODUsIDE0NywgMTcsIDksIDEsIDEwNCwgNTMsIDE3LCA5LCAxLCAxMDQsIAorICAgIDQwLCAxNywgOSwgMSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjEwLCAyMTMsIAorICAgIDUzLCAxNywgOSwgMSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTA0LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDIxNCwgCisgICAgMCwgNTMsIDE3LCA5LCAxLCAyMTQsIDAsIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgCisgICAgMjM0LCA3OSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjEwLCAyMTMsIDUzLCAxNywgOSwgMSwgMjM0LCAKKyAgICA3OSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTYwLCA1MywgMTcsIDksIDEsIDE2MCwgNDAsIDE3LCA5LCAxLCAxNjAsIAorICAgIDY1LCAxNywgOSwgMSwgMTYwLCAxNDcsIDE3LCA5LCAxLCAyMTQsIDIwNywgMjM0LCAxOTIsIDIzNCwgNzksIDEwOSwgMjMxLCAKKyAgICAxOTgsIDY1LCAxNywgOSwgMSwgMjE0LCAyMDcsIDIzNCwgMTkyLCAyMzQsIDc5LCAxMDksIDIzMSwgMTk4LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI1NCwgMjUzLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjU0LCAyNTMsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTIsIDMxLCA1MywgMTcsIDksIDI3LCA3NywgCisgICAgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNTMsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgMjM5LCAKKyAgICA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAyMzksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyMTAsIDIxMywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA2NSwgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIAorICAgIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgNTMsIDE3LCA5LCAxLCAyNDQsIDE3NiwgCisgICAgNzcsIDQwLCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgMTQ3LCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMjIsIDUzLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgCisgICAgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIzNCwgCisgICAgMTM2LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIAorICAgIDE5OCwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCA1MywgCisgICAgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMTYsIAorICAgIDE5NCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMTYsIDE5NCwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjM0LCAxMzYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjM0LCAKKyAgICAxMzYsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgCisgICAgMTIyLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgNTMsIAorICAgIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEyMiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDIxNywgODIsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxMCwgMTEyLCAKKyAgICAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDUzLCAxNywgCisgICAgOSwgMjcsIDI0NCwgMTUxLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDQsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDc3LCA1MywgMTcsIDksIAorICAgIDI3LCAyMjQsIDg1LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjQsIAorICAgIDg1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM1LCAKKyAgICAxLCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCA1MywgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDEyMiwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgOSwgCisgICAgMjcsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTUxLCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxMDksIDIzMSwgCisgICAgMTk4LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxNTEsIDUzLCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA1MywgCisgICAgMTcsIDksIDI3LCAyMTYsIDIwNCwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAyMjMsIDk5LCAyLCAyMTgsIDI0LCAKKyAgICAxMDksIDUzLCAxNywgOSwgMjcsIDEwOSwgMjMxLCAxOTgsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDIzNCwgMjEwLCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDQsIDE3NCwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDIzNCwgMjEyLCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEwLCAxMDksIAorICAgIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIAorICAgIDI1MiwgNjMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjUyLCA2MywgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMjgsIAorICAgIDY4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjEwLCAKKyAgICAxMDksIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIyOCwgNjgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAxMDksIDQwLCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTA5LCAyMzEsIDE5OCwgMiwgCisgICAgMjE4LCAyNCwgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIxMCwgCisgICAgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxNTEsIAorICAgIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTcsIAorICAgIDksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgCisgICAgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMTIyLCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAKKyAgICAxMjIsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0NCwgCisgICAgMTUxLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjM1LCAxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIzNSwgMSwgMiwgMjMzLCAxMDksIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgCisgICAgMTA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAKKyAgICAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjM0LCAKKyAgICAxMzYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyNDEsIDIyNiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCA2NSwgMTcsIAorICAgIDksIDI3LCAyNDEsIDIyNiwgMiwgMjE4LCAyNCwgMTA5LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgCisgICAgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIAorICAgIDEwOSwgMTQ3LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDE0NywgCisgICAgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ0LCAxNzQsIDE0NywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyNDgsIDE5MywgMTQ3LCAxNywgOSwgMjcsIAorICAgIDIyMCwgOTYsIDIsIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA4MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyNTQsIDIwNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAKKyAgICAxNywgOSwgMjcsIDEyMiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMTUxLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzNCwgMTM2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDgsIDIyNSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgCisgICAgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIAorICAgIDk5LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCAKKyAgICA5OSwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIAorICAgIDI1MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMCwgNjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDEyMiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIDk5LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCA5OSwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA4MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDE0NywgMTcsIDksIDI3LCAyMjEsIAorICAgIDE2OSwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA2MiwgMiwgMTUxLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIDQwLCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIAorICAgIDUzLCAxNywgMjI2LCAxNTAsIDQzLCAyMjYsIDcsIDIyNiwgMTUwLCA0NCwgMjI2LCA3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgCisgICAgOSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCAxMjIsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAKKyAgICAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgMiwgCisgICAgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAKKyAgICAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIAorICAgIDYyLCAyLCA2NiwgMiwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgNjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0OCwgCisgICAgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIAorICAgIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjU0LCAKKyAgICAyMDYsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDY2LCA0MCwgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIAorICAgIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCAxMjIsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIAorICAgIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgCisgICAgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAKKyAgICAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIAorICAgIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDEsIAorICAgIDIyNiwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDI1MiwgNjMsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAKKyAgICAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCAKKyAgICAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjQ4LCAyMjUsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDY2LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgMiwgNzcsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgCisgICAgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDE1MSwgCisgICAgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDI1NCwgMjA2LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMiwgNiwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjI0LCA4MSwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCA5LCAyNywgCisgICAgMjU0LCAxNjIsIDUzLCAxNywgOSwgMjcsIDI1NCwgMTkyLCA1MywgMTcsIDksIDI3LCAyMzAsIDE1OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjIyLCA3LCA1MywgMTcsIDksIDI3LCAyMjMsIDE0NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAxODEsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxMiwgNDksIDUzLCAxNywgOSwgMjcsIDIyMiwgNiwgNTMsIDE3LCA5LCAyNywgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCAKKyAgICA0OCwgOSwgMjcsIDIzNSwgMTQwLCAyMjMsIDM3LCA1MCwgOSwgMjcsIDI1MSwgMjM4LCAyNTQsIDQ3LCAyNTQsIDQ4LCA0NSwgCisgICAgMjIxLCAxNTgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIwLCAyMzUsIDQ1LCAyMjAsIDIyNCwgNDUsIDIyMCwgMjEzLCA0NSwgMjIwLCAKKyAgICAyMDIsIDQ1LCAyMjAsIDE5MSwgNDUsIDIyMCwgMTgwLCA0NSwgMjIwLCAxNjksIDQ1LCAyMjEsIDE1NywgNDUsIDIyMSwgCisgICAgMTQ2LCA0NSwgMjIxLCAxMzUsIDQ1LCAyMjEsIDEyNCwgNDUsIDIyMSwgMTEzLCA0NSwgMjIxLCAxMDIsIDQ1LCAyMjEsIDkxLCAKKyAgICAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyNDksIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDksIAorICAgIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDI0OSwgMjM0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMjAsIDE1MiwgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgMjQ1LCAzOSwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIyNCwgMTYsIDc5LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgCisgICAgNDQsIDcxLCAyMzMsIDI2LCAyNTEsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjAzLCAyNDUsIDE3MSwgMzgsIAorICAgIDI3LCA0MywgMjQyLCAzNCwgMzgsIDI3LCA0NCwgMjQyLCAzNCwgMzgsIDUyLCAyMTYsIDkwLCA0MywgMjQyLCAzNCwgMzgsIAorICAgIDUyLCAyMTYsIDkwLCA0NCwgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0MywgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0NCwgCisgICAgMjQyLCAzNCwgMzgsIDI0OSwgMjA1LCAyMzEsIDIzNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEzLCA1OSwgMjMzLCAKKyAgICA2MiwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjQ1LCAxNjgsIDI0OCwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCAyNDUsIDE1OSwgMjQ4LCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDEyMSwgMjMyLCAyMTksIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIAorICAgIDQzLCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCAyNDksIDEwNywgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjQ5LCAxMDcsIDEyNywgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyNiwgCisgICAgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgODUsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIAorICAgIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgCisgICAgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCA0NCwgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDI0OSwgMTY5LCAKKyAgICAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyNDksIDE2OSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNzEsIDI0OSwgMTY5LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjksIAorICAgIDEyNywgMjIwLCAxMzMsIDI0NywgMTI4LCA3MSwgMjIwLCAxMzMsIDI0NywgMTI4LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTYzLCAyMjYsIAorICAgIDEyMywgMjUwLCAxODAsIDIyNiwgMTIzLCAyMTIsIDMyLCAyMjYsIDEyMywgNTIsIDIxMiwgMzIsIDIyNiwgMTIzLCAyNDgsIAorICAgIDE2MywgMTIxLCAyMzIsIDIxOSwgMjUwLCAxODAsIDEyMSwgMjMyLCAyMTksIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDQsIAorICAgIDI0OSwgMjI3LCA0LCAxMTAsIDI0OSwgMjI3LCA0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQsIDIyMCwgMTUyLCA0LCAyNDksIAorICAgIDIzNCwgNCwgMjI0LCAxNiwgNzksIDQsIDI0NSwgMzksIDc5LCA0LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDQsIDQzLCAyMjYsIAorICAgIDcsIDQsIDQ0LCAyMjYsIDcsIDQsIDQzLCAyNDksIDEwNywgMTI3LCA0LCA0NCwgMjQ5LCAxMDcsIDEyNywgNCwgNDMsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMTI3LCA0LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQsIDU0LCA1MCwgNCwgMjU0LCAxMzQsIDQsIAorICAgIDI1MywgMjI0LCA0LCA5NiwgNTAsIDQsIDI0MCwgMTc0LCA0LCAyMzMsIDIxLCA1MCwgNCwgMjQyLCAxMzcsIDUwLCA0LCAKKyAgICAyNDUsIDEwNiwgNTAsIDQsIDIyMywgNTMsIDIxOSwgNDgsIDQsIDI0NywgMTQwLCA1MCwgNCwgMjI1LCAxODUsIDUwLCA0LCAKKyAgICAyNDksIDIyNSwgMjUzLCAyMTQsIDksIDI0NCwgMTcyLCA1MywgMTcsIDksIDIxNywgNDUsIDIsIDI0NCwgMTcyLCA0OCwgOSwgCisgICAgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjE3LCA3OSwgMjQ0LCA5LCA5LCAyMzQsIDIxMCwgNTMsIDE3LCA5LCAyNDQsIDE3NCwgCisgICAgNTMsIDE3LCA5LCAyNDQsIDE3NCwgMTQ3LCAxNywgOSwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjQ4LCAxOTMsIDE0NywgMTcsIAorICAgIDksIDIzNCwgMjEyLCA1MywgMTcsIDksIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyMjAsIDk2LCA1MywgMTcsIDksIDIyMCwgCisgICAgOTYsIDE0NywgMTcsIDksIDIxOCwgNDcsIDUzLCAxNywgOSwgMjE4LCA0NywgMTQ3LCAxNywgOSwgMSwgMTgyLCA1MywgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA0MCwgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDEwOSwgMiwgCisgICAgMTgyLCAyNTIsIDUxLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMTgyLCAyNTIsIDUxLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA2NSwgCisgICAgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCAxNDcsIDE3LCA5LCAxLCAxMDksIDUzLCAxNywgOSwgMSwgMTA5LCA0MCwgMTcsIAorICAgIDksIDEsIDI1MiwgNjMsIDUzLCAxNywgOSwgMSwgMjUyLCA2MywgNDAsIDE3LCA5LCAxLCAyNTIsIDYzLCA2NSwgMTcsIDksIAorICAgIDEsIDI1MiwgNjMsIDE0NywgMTcsIDksIDEsIDIxNywgOSwgMjMxLCAxNzAsIDUzLCAxNywgOSwgMSwgMjE3LCA5LCAyMzEsIAorICAgIDE3MCwgNDAsIDE3LCA5LCAxLCAyMTcsIDksIDUzLCAxNywgOSwgMSwgMjE3LCA5LCA0MCwgMTcsIDksIDEsIDIxNywgOSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMTcsIDksIDE0NywgMTcsIDksIDEsIDIxNiwgMTk0LCA1MywgMTcsIDksIDEsIDIxNiwgMTk0LCAKKyAgICA0MCwgMTcsIDksIDEsIDIxNiwgMTk0LCA2NSwgMTcsIDksIDEsIDIxNiwgMTk0LCAxNDcsIDE3LCA5LCAxLCAxNTEsIDUzLCAKKyAgICAxNywgOSwgMSwgMTUxLCA0MCwgMTcsIDksIDEsIDE1MSwgNjUsIDE3LCA5LCAxLCAxNTEsIDE0NywgMTcsIDksIDEsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAxLCAxMjIsIDQwLCAxNywgOSwgMSwgMTIyLCA2NSwgMTcsIDksIDEsIDEyMiwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDUzLCAxNywgOSwgMSwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMSwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDEsIDI0OCwgMjA0LCA1MywgMTcsIDksIDEsIDI0OCwgMjA0LCA0MCwgMTcsIDksIDEsIAorICAgIDIxNiwgMjA0LCA1MywgMTcsIDksIDEsIDIxNiwgMjA0LCA0MCwgMTcsIDksIDEsIDIyMywgOTksIDUzLCAxNywgOSwgMSwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNTMsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgNTMsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNDAsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNjUsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgMTQ3LCAxNywgOSwgMSwgMjIwLCA2MiwgNTMsIDE3LCA5LCAxLCAyMjAsIDYyLCA0MCwgMTcsIDksIDEsIAorICAgIDIyMCwgNjIsIDY1LCAxNywgOSwgMSwgMjIwLCA2MiwgMTQ3LCAxNywgOSwgMSwgMjIyLCAyOSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMjIsIDI5LCA0MCwgMTcsIDksIDEsIDIyMiwgMjksIDY1LCAxNywgOSwgMSwgMjIyLCAyOSwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDQwLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDY1LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDE0NywgMTcsIDksIDEsIDIxNywgODIsIDUzLCAxNywgOSwgMSwgMjE3LCA4MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTcsIDgyLCA2NSwgMTcsIDksIDEsIDIxNywgODIsIDE0NywgMTcsIDksIDEsIDIxMCwgMTEyLCA1MywgMTcsIDksIDEsIAorICAgIDIxMCwgMTEyLCA0MCwgMTcsIDksIDEsIDIxMCwgMTEyLCA2NSwgMTcsIDksIDEsIDIxMCwgMTEyLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgNTMsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNDAsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNjUsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMTQ3LCAxNywgOSwgMSwgMjQyLCAyNTIsIDUzLCAxNywgOSwgMSwgMjQyLCAyNTIsIDQwLCAxNywgOSwgMSwgCisgICAgMjQyLCAyNTIsIDY1LCAxNywgOSwgMSwgMjQyLCAyNTIsIDE0NywgMTcsIDksIDEsIDI0NCwgMTUxLCA1MywgMTcsIDksIDEsIAorICAgIDI0NCwgMTUxLCA0MCwgMTcsIDksIDEsIDI0NCwgMTUxLCA2NSwgMTcsIDksIDEsIDI0NCwgMTUxLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyMjQsIDg1LCA1MywgMTcsIDksIDEsIDIyNCwgODUsIDQwLCAxNywgOSwgMSwgMjI0LCA4NSwgNjUsIDE3LCA5LCAxLCAyMjQsIAorICAgIDg1LCAxNDcsIDE3LCA5LCAxLCAyMzUsIDEsIDUzLCAxNywgOSwgMSwgMjM1LCAxLCA0MCwgMTcsIDksIDEsIDIzNSwgMSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMzUsIDEsIDE0NywgMTcsIDksIDEsIDIzMywgMTA5LCA1MywgMTcsIDksIDEsIDIzMywgMTA5LCAKKyAgICA0MCwgMTcsIDksIDEsIDIzMywgMTA5LCA2NSwgMTcsIDksIDEsIDIzMywgMTA5LCAxNDcsIDE3LCA5LCAxLCA2NiwgNTMsIAorICAgIDE3LCA5LCAxLCA2NiwgNDAsIDE3LCA5LCAxLCA2NiwgNjUsIDE3LCA5LCAxLCA2NiwgMTQ3LCAxNywgOSwgMSwgMjI4LCA2OCwgCisgICAgNTMsIDE3LCA5LCAxLCAyMjgsIDY4LCA0MCwgMTcsIDksIDEsIDIyOCwgNjgsIDY1LCAxNywgOSwgMSwgMjI4LCA2OCwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDEsIDIxMiwgMzEsIDUzLCAxNywgOSwgMSwgMjEyLCAzMSwgNDAsIAorICAgIDE3LCA5LCAxLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDEsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMSwgNzcsIAorICAgIDUzLCAxNywgOSwgMSwgNzcsIDQwLCAxNywgOSwgMSwgNzcsIDY1LCAxNywgOSwgMSwgNzcsIDE0NywgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIAorICAgIDIzMSwgMjMzLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCAKKyAgICAyNTIsIDUxLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDI1MiwgNTEsIDQwLCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDQwLCAxNywgMjEwLCA4NywgMjExLCAKKyAgICAyNDUsIDIyOCwgNzgsIDIxOSwgMjAsIDEyNiwgMjQ1LCAzOSwgNzksIDEyNiwgMjI0LCAxLCA3OSwgMTI2LCA1NCwgNTAsIAorICAgIDEyNiwgMjQ3LCAxNDAsIDUwLCAxMjYsIDIyNSwgMTg1LCA1MCwgMTI2LCAyNTQsIDEzNCwgMTI2LCAyNTQsIDY1LCAxMjYsIAorICAgIDQzLCAyMjYsIDcsIDEyNiwgNDQsIDIyNiwgNywgMTI2LCAyNTMsIDIyNCwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMjcsIAorICAgIDEyNiwgMjQwLCAxNzQsIDEyNiwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxMjYsIDIxOSwgNDgsIDEyNiwgMjEsIDIxMCwgODYsIAorICAgIDEyNiwgMjEsIDExMSwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTkwLCAKKyAgICAxMjYsIDIxLCAxOTUsIDEyNiwgMjEsIDE5OSwgMTI2LCAyMSwgMTk2LCAxMjYsIDIxLCAyMDEsIDEyNiwgMjQ5LCAyMzQsIAorICAgIDEyNiwgMjIwLCAxNTIsIDEyNiwgMjMzLCAyMSwgNTAsIDEyNiwgMjQ1LCAxMDYsIDUwLCAxMjYsIDI0MiwgMTM3LCA1MCwgCisgICAgMTI2LCAyMjQsIDE2LCA3OSwgMTI2LCAyNDksIDIyNSwgMjUzLCAyMTQsIDEyNiwgNywgNiwgMSwgNjEsIDEyNiwgNywgNiwgCisgICAgMSwgMjUzLCAxNjYsIDEyNiwgNywgNiwgMSwgMjUxLCA3NCwgMTI2LCA3LCA2LCAxLCAyNDksIDY4LCAxMjYsIDcsIDYsIDEsIAorICAgIDc2LCAxMjYsIDcsIDYsIDEsIDI0NSwgMTQsIDEyNiwgNywgNiwgMSwgMjQzLCAyMDksIDEyNiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTI2LCA3LCA2LCAxLCA3NCwgMTI2LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA2LCAxLCAyMzUsIDI5LCAxMjYsIDcsIAorICAgIDYsIDEsIDE1NiwgMTI2LCA3LCA2LCAxLCAxOTQsIDEyNiwgNywgNiwgMSwgMjMwLCAzMCwgMTI2LCA3LCA2LCAxLCA3OCwgCisgICAgMTI2LCA3LCA2LCAxLCAyMjYsIDEwOSwgMTI2LCA3LCA2LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDYsIDEsIDE1MywgMTI2LCA3LCAKKyAgICA2LCAxLCAyMjIsIDkzLCAxMjYsIDcsIDYsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDYsIDEsIDY5LCAxMjYsIDcsIDYsIDEsIAorICAgIDIxNCwgMTA1LCAxMjYsIDcsIDYsIDEsIDIxMiwgOTgsIDEyNiwgNywgNiwgMSwgMjExLCAxNzgsIDEyNiwgNywgNiwgMSwgCisgICAgMjExLCAxMTcsIDEyNiwgNywgNiwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDQyLCAxMjcsIDEyNiwgMjIzLCA1MywgMjE5LCAKKyAgICA0OCwgMTI2LCA0NCwgNDIsIDEyNywgMTI2LCAyNTAsIDM5LCAyNTUsIDIzLCAxMjYsIDEyMSwgMjMyLCAyMTksIDEyNiwgCisgICAgMjQyLCAxNDQsIDI1NSwgMjMsIDEyNiwgNywgNCwgMSwgNjEsIDEyNiwgNywgNCwgMSwgMjUzLCAxNjYsIDEyNiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgMTI2LCA3LCA0LCAxLCAyNDksIDY4LCAxMjYsIDcsIDQsIDEsIDc2LCAxMjYsIDcsIDQsIDEsIDI0NSwgCisgICAgMTQsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDksIDEyNiwgNywgNCwgMSwgMjQyLCA2NywgMTI2LCA3LCA0LCAxLCA3NCwgMTI2LCAKKyAgICA3LCA0LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA0LCAxLCAyMzUsIDI5LCAxMjYsIDcsIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAKKyAgICAxLCAxOTQsIDEyNiwgNywgNCwgMSwgMjMwLCAzMCwgMTI2LCA3LCA0LCAxLCA3OCwgMTI2LCA3LCA0LCAxLCAyMjYsIDEwOSwgCisgICAgMTI2LCA3LCA0LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCA0LCAxLCAyMjIsIDkzLCAxMjYsIDcsIAorICAgIDQsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDQsIDEsIDY5LCAxMjYsIDcsIDQsIDEsIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIAorICAgIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgMTA3LCAxMjcsIDEyNiwgNjcsIDIzMiwgMjE5LCAxMjYsIDQ0LCAyNDksIDEwNywgCisgICAgMTI3LCAxMjYsIDE4NCwgMTI2LCA0MywgNzEsIDIyNiwgNywgMTI2LCA0NCwgNzEsIDIyNiwgNywgMTAxLCAxMTAsIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgMTAxLCA0MywgMjQ5LCAxNjksIDEyNywgMTAxLCA0NCwgMjQ5LCAxNjksIDEyNywgMTAxLCAxMTAsIAorICAgIDI0OSwgMjI3LCAxMDEsIDU2LCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDEwMSwgNTYsIDEsIDIxMSwgMjI3LCAxMDEsIDU2LCAxLCAKKyAgICA0LCA2MSwgMTAxLCA1NiwgMSwgNCwgNzQsIDEwMSwgNTYsIDEsIDQsIDY5LCAxMDEsIDU2LCAxLCA0LCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNCwgNzgsIDEwMSwgNTYsIDEsIDQsIDE5MiwgMTAxLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDQsIAorICAgIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCA0LCAyMTUsIDExOSwgMTAxLCAyMzQsIDIwNywgMjI0LCAxNzYsIDIxOSwgMzMsIDc5LCAKKyAgICAxMDEsIDU2LCAxLCA2MSwgMTAxLCA1NiwgMSwgNzQsIDEwMSwgNTYsIDEsIDY5LCAxMDEsIDU2LCAxLCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNzgsIDEwMSwgNTYsIDEsIDE3NiwgMTAxLCA1NiwgMSwgMjM0LCA5OCwgMTAxLCA1NiwgMSwgMjMzLCAyMjMsIDEwMSwgCisgICAgNTYsIDEsIDIzNCwgMTg4LCAxMDEsIDU2LCAxLCAyMzQsIDM0LCAxMDEsIDU2LCAxLCAyMDYsIDEwMSwgNTYsIDEsIDIxOSwgCisgICAgMTkzLCAxMDEsIDU2LCAxLCAyMTgsIDg0LCAxMDEsIDU2LCAxLCAyMjEsIDE4MywgMTAxLCA1NiwgMSwgMjE5LCA2MCwgMTAxLCAKKyAgICA1NiwgMSwgMjE3LCAxMDYsIDEwMSwgNTYsIDEsIDIxNiwgMTE4LCAxMDEsIDU2LCAxLCAyMTUsIDExOSwgMTAxLCA1NiwgMSwgCisgICAgMjE3LCAyMywgMTAxLCA1NiwgMSwgMTEyLCAxMDEsIDU2LCAxLCAxOTgsIDEwMSwgNTYsIDEsIDIyOCwgMjM4LCAxMDEsIDU2LCAKKyAgICAxLCAyMjcsIDI0MiwgMTAxLCA1NiwgMSwgMjI5LCAxMTIsIDEwMSwgNTYsIDEsIDIyOCwgNzksIDEwMSwgNTYsIDEsIDE2MiwgCisgICAgMTAxLCA1NiwgMSwgMjQxLCAxODcsIDEwMSwgNTYsIDEsIDI0MCwgMjI5LCAxMDEsIDU2LCAxLCAyNDEsIDI0NSwgMTAxLCAKKyAgICA1NiwgMSwgMjQxLCA3NSwgMTAxLCA1NiwgMSwgMTg2LCAxMDEsIDU2LCAxLCAyMzAsIDIzNSwgMTAxLCA1NiwgMSwgMjMwLCAKKyAgICAxMDcsIDEwMSwgNTYsIDEsIDIzMSwgOTYsIDEwMSwgNTYsIDEsIDIzMCwgMTY2LCAxMDEsIDU2LCAxLCAxOTIsIDEwMSwgNTYsIAorICAgIDEsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgMjA1LCAxMDEsIDU2LCAxLCAyMjMsIDM4LCAKKyAgICAxMDEsIDU2LCAxLCAyMjIsIDE0MiwgMTAxLCA1NiwgMSwgMjIzLCAxMzEsIDEwMSwgNTYsIDEsIDIyMiwgMjEzLCAxMDEsIAorICAgIDU2LCAxLCAyMTIsIDY1LCAxMDEsIDU2LCAxLCAyMzAsIDMwLCAxMDEsIDU2LCAyMTMsIDEzNSwgMjE5LCAzMywgNzksIDEwMSwgCisgICAgNTYsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMTAxLCAyNCwgMjQ0LCAxMTEsIDEwMSwgMjQsIDEsIDIzNCwgNjQsIDEwMSwgCisgICAgMjQsIDEsIDIxOCwgMjE3LCAxMDEsIDI0LCAxLCAyMzQsIDU3LCAxMDEsIDI0LCAxLCAyMjgsIDIzMSwgMTAxLCAyNCwgMSwgCisgICAgMjI4LCAyMjksIDEwMSwgMjQsIDEsIDIyOCwgMjI4LCAxMDEsIDI0LCAxLCAyMTYsIDEwMiwgMTAxLCAyNCwgMSwgMjE4LCAKKyAgICAyMDYsIDEwMSwgMjQsIDEsIDIyMywgMjksIDEwMSwgMjQsIDEsIDIyMywgMjQsIDEwMSwgMjQsIDEsIDIyMywgMjEsIDEwMSwgCisgICAgMjQsIDEsIDIyMywgMTQsIDEwMSwgMjQsIDEsIDIyMywgOSwgMTAxLCAyNCwgMSwgMjIzLCA0LCAxMDEsIDI0LCAxLCAyMjMsIAorICAgIDE1LCAxMDEsIDI0LCAxLCAyMjMsIDI3LCAxMDEsIDI0LCAxLCAyMzAsIDIyMiwgMTAxLCAyNCwgMSwgMjI1LCA5OCwgMTAxLCAKKyAgICAyNCwgMSwgMjE4LCAyMTQsIDEwMSwgMjQsIDEsIDIyNSwgODcsIDEwMSwgMjQsIDEsIDIxOSwgMTUwLCAxMDEsIDI0LCAxLCAKKyAgICAyMTgsIDIxMSwgMTAxLCAyNCwgMSwgMjM2LCA2MywgMTAxLCAyNCwgMSwgMjUwLCA1NCwgMTAxLCAyNCwgMSwgMjE4LCAyMjEsIAorICAgIDEwMSwgMjQsIDEsIDI1MCwgMTE0LCAxMDEsIDI0LCAxLCAyMzQsIDExNiwgMTAxLCAyNCwgMSwgMjE2LCAxNzQsIDEwMSwgCisgICAgMjQsIDEsIDIyNSwgMTM0LCAxMDEsIDI0LCAxLCAyNDEsIDE3OSwgMTAxLCAyNCwgMSwgNjEsIDEwMSwgMjQsIDEsIDI1NCwgCisgICAgMjUyLCAxMDEsIDI0LCAxLCAxOTIsIDEwMSwgMjQsIDEsIDIxMSwgOTIsIDEwMSwgMjQsIDEsIDI0NSwgMTI1LCAxMDEsIDI0LCAKKyAgICAxLCA3NiwgMTAxLCAyNCwgMSwgMjExLCAzNiwgMTAxLCAyNCwgMSwgMjExLCA0NywgMTAxLCAyNCwgMSwgNzgsIDEwMSwgMjQsIAorICAgIDEsIDIxMiwgNjUsIDEwMSwgMjQsIDEsIDIxMiwgNjIsIDEwMSwgMjQsIDEsIDIyNiwgMjM4LCAxMDEsIDI0LCAxLCAyMTAsIAorICAgIDI0NCwgMTAxLCAyNCwgMSwgNjksIDEwMSwgMjQsIDEsIDIxMiwgMTEsIDEwMSwgMjQsIDEsIDIxMiwgMjIsIDEwMSwgMjQsIAorICAgIDEsIDIxMSwgMjUwLCAxMDEsIDI0LCAxLCAyMTAsIDIxMiwgMTAxLCAyNCwgMSwgMjQ1LCA2MywgMTAxLCAyNCwgMSwgMjExLCAKKyAgICA4LCAxMDEsIDI0LCAxLCA3NCwgMTI2LCAyNTAsIDE4NCwgNTAsIDEyNiwgMjI0LCAyMzEsIDUwLCAxMjYsIDIyOCwgNTcsIAorICAgIDUwLCAxMjYsIDIzMSwgMjM3LCAxMjYsIDI1MSwgMTQzLCAxMzAsIDEyNiwgMjExLCA0MCwgNTAsIDEyNiwgMjExLCAyMTcsIAorICAgIDUwLCAxMDEsIDI0NCwgMjYsIDE5MywgMjEzLCAyMzksIDEwMSwgMTQwLCA3NSwgMTAxLCAyMTQsIDE1MywgNzUsIDEwMSwgCisgICAgOTcsIDc1LCAxMDEsIDI0NiwgMTEyLCA3NSwgMTAxLCA4NSwgMjE4LCAyMzYsIDEwMSwgNzEsIDI1MCwgNDMsIDIzNSwgMjExLCAKKyAgICAyNTQsIDEwNywgMjU0LCAxMjgsIDIzNSwgMjExLCAyNTQsIDEwNywgMjIwLCAxMzksIDIzNSwgMjExLCAyNTQsIDEwNywgCisgICAgMjE2LCAyMzcsIDIyNiwgMjUzLCAyMjMsIDc1LCAyNTAsIDE1MCwgMjIzLCA3NSwgMjUwLCAxNTAsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxNTAsIDYxLCA2MiwgNTcsIDMsIDI1MywgMTE5LCA3NiwgNjIsIDU3LCAzLCAyNTMsIDEyOCwgNzQsIDYyLCA1NywgMywgCisgICAgMjUzLCA5NiwgNzgsIDYyLCA1NywgMywgMjUzLCAxNDYsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTY1LCAyNDgsIDIyOSwgNjIsIAorICAgIDU3LCAzLCAyNTMsIDExMiwgMjQ4LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDE1MiwgMjQ4LCAxMSwgNjIsIDU3LCAzLCAyNTMsIAorICAgIDE0MiwgMjQ3LCAxNTMsIDYyLCA1NywgMywgMjUzLCAxMDYsIDI0NiwgODYsIDYyLCA1NywgMywgMjUzLCAxMDAsIDIzNSwgCisgICAgMTQ3LCA2MiwgNTcsIDMsIDI1MywgMTExLCAyMzUsIDEzMiwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgMjM1LCA3NCwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDkyLCAyMzUsIDU3LCA2MiwgNTcsIDMsIDI1MywgODAsIDE3NiwgNjIsIDU3LCAzLCAyNTMsIDExMywgMjM0LCAKKyAgICAxODgsIDYyLCA1NywgMywgMjUzLCA5MCwgMjM0LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDg3LCAyMzQsIDM0LCA2MiwgNTcsIDMsIAorICAgIDI1MywgNzYsIDIzMywgMjIzLCA2MiwgNTcsIDMsIDI1MywgNzcsIDE4NiwgNjIsIDU3LCAzLCAyNTMsIDE0MywgMjMxLCA5NiwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDg0LCAyMzAsIDIzNSwgNjIsIDU3LCAzLCAyNTMsIDE0MSwgMjMwLCAxNjYsIDYyLCA1NywgMywgCisgICAgMjUzLCAxMzMsIDIzMCwgMTA3LCA2MiwgNTcsIDMsIDI1MywgMTU0LCAxOTgsIDYyLCA1NywgMywgMjUzLCAxMzIsIDIyOSwgCisgICAgMTEyLCA2MiwgNTcsIDMsIDI1MywgMTI2LCAyMjgsIDIzOCwgNjIsIDU3LCAzLCAyNTMsIDEwNSwgMjI4LCA3OSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDEwMiwgMjI3LCAyNDIsIDYyLCA1NywgMywgMjUzLCAxNjEsIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDg1LCAyMjUsIAorICAgIDIyNCwgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI1LCAxMTEsIDYyLCA1NywgMywgMjUzLCAxNDUsIDIyNSwgMTksIDYyLCA1NywgCisgICAgMywgMjUzLCAxMDcsIDIyNCwgMTUzLCA2MiwgNTcsIDMsIDI1MywgMTQwLCAyMjQsIDkxLCA2MiwgNTcsIDMsIDI1MywgNzksIAorICAgIDIyNCwgNzIsIDYyLCA1NywgMywgMjUzLCAxMzUsIDIyNCwgNTYsIDYyLCA1NywgMywgMjUzLCAxMjQsIDIyNCwgNDUsIDYyLCAKKyAgICA1NywgMywgMjUzLCA5NywgMjA1LCA2MiwgNTcsIDMsIDI1MywgMTI5LCAyMjMsIDEzMSwgNjIsIDU3LCAzLCAyNTMsIDEwNCwgCisgICAgMjIzLCAzOCwgNjIsIDU3LCAzLCAyNTMsIDE2MywgMjIyLCAyMTMsIDYyLCA1NywgMywgMjUzLCAxMzAsIDIyMiwgMTQyLCAKKyAgICA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDgsIDIyMSwgMTgzLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTE2LCAyMTksIDE5MywgNjIsIDU3LCAzLCAyNTMsIDE0NCwgMjE5LCA2MCwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMTgsIDg0LCAKKyAgICA2MiwgNTcsIDMsIDI1MywgOTgsIDIxNywgMTA2LCA2MiwgNTcsIDMsIDI1MywgMTU5LCAyMTcsIDIzLCA2MiwgNTcsIDMsIAorICAgIDI1MywgMTIwLCAyMTYsIDExOCwgNjIsIDU3LCAzLCAyNTMsIDE1NywgMTEyLCA2MiwgNTcsIDMsIDI1MywgODgsIDIxNSwgCisgICAgMTE5LCA2MiwgNTcsIDMsIDI1MywgMTAzLCAyMTIsIDY1LCA2MiwgNTcsIDMsIDI1MywgODIsIDIxMiwgMjIsIDYyLCA1NywgCisgICAgMywgMjUzLCAxMTcsIDIxMSwgMjUwLCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMTEsIDIyNywgNjIsIDU3LCAzLCAyNTMsIAorICAgIDEzOSwgMjEwLCAxMTYsIDYyLCA1NywgMywgMjUzLCA4MywgMjEwLCA5NCwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjEwLCAyMywgCisgICAgNjIsIDU3LCAzLCAyNTMsIDEzMSwgMjU1LCA4NCwgNjIsIDU3LCAzLCAyNTMsIDExNCwgMjU1LCA4MywgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDczLCAyNTMsIDIwMCwgNjIsIDU3LCAzLCAyNTMsIDg2LCAyNDYsIDU0LCA2MiwgNTcsIDMsIDI1MywgNjksIDI0NiwgCisgICAgNTMsIDYyLCA1NywgMywgMjUzLCAxMDksIDIyNywgMTc4LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDE1MSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDk1LCAyMjQsIDE1NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjMsIDE4OSwgNjIsIDU3LCAzLCAyNTMsIDEyMywgCisgICAgMjIzLCAxODgsIDYyLCA1NywgMywgMjUzLCA4OSwgMjIyLCAyMTIsIDYyLCA1NywgMywgMjUzLCA5MSwgMjE3LCAxMDMsIDYyLCAKKyAgICA1NywgMywgMjUzLCA3MSwgMjE1LCA3OCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAxMDUsIDYyLCA1NywgMTYsIDI1MywgMTM4LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDEzNywgNjIsIDU3LCAxNiwgMjUzLCAxMzQsIDYyLCA1NywgMTYsIDI1MywgMTIyLCA2MiwgNTcsIAorICAgIDE2LCAyNTMsIDExMCwgNjIsIDU3LCAxNiwgMjUzLCAxMDgsIDYyLCA1NywgMTYsIDI1MywgMTAxLCA2MiwgNTcsIDE2LCAKKyAgICAyNTMsIDk0LCA2MiwgNTcsIDE2LCAyNTMsIDkzLCA2MiwgNTcsIDE2LCAyNTMsIDc4LCA2MiwgNTcsIDE2LCAyNTMsIDc1LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDc0LCA2MiwgNTcsIDE2LCAyNTMsIDcyLCA2MiwgNTcsIDE2LCAyNTMsIDcwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCA2NywgMjMxLCAxOTAsIDYyLCA1NywgMTA2LCAyNTMsIDY2LCAyMTEsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNjUsIDI0OCwgODIsIDYyLCA1NywgMTA2LCAyNTMsIDY0LCAyNDUsIDEwMywgNjIsIDU3LCAxMDYsIDI1MywgNjMsIDIzMSwgCisgICAgMTY0LCA2MiwgNTcsIDEwNiwgMjUzLCA2MiwgMjE4LCAxNjQsIDYyLCA1NywgMTA2LCAyNTMsIDYxLCAyNDUsIDQ1LCA2MiwgCisgICAgNTcsIDEwNiwgMjUzLCA2MCwgMjIzLCAxNTYsIDYyLCA1NywgMTA2LCAyNTMsIDU5LCAyMjAsIDY0LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA1OCwgMjQxLCAyNDQsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyMTksIDI3LCA2MiwgNTcsIDEwNiwgMjUzLCA1NiwgCisgICAgMjUxLCAyMTEsIDYyLCA1NywgMTA2LCAyNTMsIDU1LCAyNDksIDE1MywgNjIsIDU3LCAxMDYsIDI1MywgNTQsIDI1MSwgMTIzLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCA1MywgMjEyLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjUyLCAxNDQsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDUxLCAyMjYsIDIwOSwgNjIsIDU3LCAxMDYsIDI1MywgNTAsIDIxOSwgMCwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNDksIDI0OSwgNzYsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgNDgsIDIzNCwgMjMwLCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIAorICAgIDQ3LCAyMzQsIDIzOCwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDIyNiwgMjIyLCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjExLCAKKyAgICAyMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQ0LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDQzLCAyNTQsIDI1LCA2MiwgNTcsIAorICAgIDIzMCwgMTQ3LCAyNTMsIDQyLCAyMzEsIDU3LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjUxLCAxNDIsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDQwLCAyNDIsIDE3MywgNjIsIDU3LCAxMDYsIDI1MywgMzksIDYyLCA1NywgMTA2LCAyNTMsIDM4LCAyMTEsIDIxMiwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMzcsIDYyLCA1NywgMTA2LCAyNTMsIDM2LCA2MiwgNTcsIDEwNiwgMjUzLCAzNSwgMjQwLCAKKyAgICAyNTUsIDYyLCA1NywgMTA2LCAyNTMsIDM0LCA2MiwgNTcsIDEwNiwgMjUzLCAzMywgNjIsIDU3LCAxMDYsIDI1MywgMzIsIAorICAgIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgMzAsIDIxNSwgOTIsIDYyLCA1NywgMTA2LCAyNTMsIDI5LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAyOCwgNjIsIDU3LCAxMDYsIDI1MywgMjcsIDI1MCwgMiwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgMjQzLCAxMDAsIDYyLCA1NywgMTA2LCAyNTMsIDIzLCAyNTQsIDEyLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAyMiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAxOSwgNjIsIDU3LCAxMDYsIDI1MywgMTgsIDYyLCA1NywgMTA2LCAyNTMsIDE3LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAxNiwgNjIsIDU3LCAxMDYsIDI1MywgMTUsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICAxMywgMjMwLCAxMzksIDYyLCA1NywgMTA2LCAyNTMsIDEyLCA2MiwgNTcsIDEwNiwgMjUzLCAxMSwgMjE1LCAyMzYsIDYyLCAKKyAgICA1NywgMTA2LCAyNTMsIDEwLCA2MiwgNTcsIDEwNiwgMjUzLCA5LCA2MiwgNTcsIDEwNiwgMjUzLCA4LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA3LCA2MiwgNTcsIDEwNiwgMjUzLCA2LCA2MiwgNTcsIDEwNiwgMjUzLCA1LCA2MiwgNTcsIDEwNiwgMjUzLCA0LCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAzLCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDI0MSwgMjE4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMzQsIDI0NCwgCisgICAgMzYsIDYyLCA1NywgMTA2LCAyNTIsIDIzMSwgMjUyLCAxMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyNiwgMjE5LCA3LCA2MiwgCisgICAgNTcsIDEwNiwgMjUyLCAyMjUsIDc1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyMywgMjE3LCAKKyAgICAyMzcsIDYyLCA1NywgMTA2LCAyNTIsIDIyMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjIxLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjAsIAorICAgIDIxMSwgMjU0LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgMjE5LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE4LCAyNTAsIDE0OCwgMjQ0LCA3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTcsIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDYyLCA1NywgMjMwLCAxNDcsIDI1MiwgMjE0LCAyNDcsIDIwNiwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MiwgMjEzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTIsIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MiwgMjA5LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDgsIDYyLCA1NywgMTA2LCAyNTIsIDIwNywgMjQ4LCAxNjcsIDYyLCA1NywgCisgICAgMTA2LCAyNTIsIDIwNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAKKyAgICAyNTIsIDIwMywgNjIsIDU3LCAxMDYsIDI1MiwgMjAyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMzEsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTMsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTEsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyNTAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyNDgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDQsIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDIsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjksIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMDEsIDI1NCwgMjQ1LCAyMTEsIAorICAgIDIwOSwgMjIwLCAxNDAsIDIzMiwgMjE5LCAyNTQsIDI0NSwgMjExLCAyMDksIDIyMCwgMTQwLCAyNDcsIDEyOCwgMjU0LCAKKyAgICAyNDUsIDI1MCwgMTM4LCA3OSwgMjU0LCAyNDUsIDU0LCAxMTEsIDI1NCwgMjQ1LCA1NCwgMTA1LCAyNTQsIDI0NSwgNTQsIAorICAgIDE1OCwgMjU0LCAyNDUsIDU0LCAxNjEsIDI1NCwgMjQ1LCA1NCwgMTkwLCAyNTQsIDI0NSwgNTQsIDE5NSwgMjU0LCAyNDUsIAorICAgIDU0LCAxOTksIDI1NCwgMjQ1LCA1NCwgMTk2LCAyNTQsIDI0NSwgNTQsIDIwMSwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTUsIDczLCAyNTQsIDI0NSwgNTQsIDIxNiwgMTYzLCAyNTQsIDI0NSwgNTQsIDI0NCwgMjMsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ0LCAxMjIsIDI1NCwgMjQ1LCA1NCwgMjE5LCAxMTMsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ1LCAxOTIsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDAsIDI1NCwgMjQ1LCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjU0LCAyNDUsIDU0LCAxMTMsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEzNCwgMjQwLCAyMTcsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMjQ0LCAxOSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgCisgICAgMjE5LCAxMjcsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTI0LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyNDUsIAorICAgIDIwMSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDUsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEyMywgMjE2LCAKKyAgICAxNDgsIDI1NCwgMjQ1LCA1NCwgMTEzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAxMzQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgCisgICAgNTQsIDI0NCwgMTksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgODksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIAorICAgIDIxOSwgMTI3LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjAsIDEyNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ1LCAKKyAgICAyMDEsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjA1LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OSwgCisgICAgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE2LCAxNjQsIDIxNiwgCisgICAgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMjQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMTIzLCAyMTYsIDE0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTksIDExNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTksIDIxNiwgMTQ4LCAyNTQsIAorICAgIDI0NSwgNTQsIDI0NSwgMTkzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwMSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCAKKyAgICAyMTIsIDE0LCAyNTIsIDEzNiwgMjE0LCAxNzMsIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEwMCwgMjE4LCA2MCwgMjU0LCAKKyAgICAyNDUsIDIxMiwgMTQsIDIyMSwgMTc4LCAyMTgsIDYwLCAyNTQsIDI0NSwgMjEyLCAxNCwgMjE2LCAxNzAsIDIxOCwgNjAsIAorICAgIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEyLCAyMTgsIDYwLCAyNTQsIDI0NSwgMjQ2LCA4OSwgMjMxLCA5NSwgMjQ0LCAKKyAgICAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMzIsIDIwNSwgMjMxLCA5NSwgMjQ0LCAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAKKyAgICAyMzEsIDk1LCAyMjEsIDE3OCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIzMSwgOTUsIDIxNiwgMTcwLCAyMTgsIDYwLCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjI0LCAyNCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0MiwgMzQsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDYsIDEwOCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxOTAsIDI2LCAyNTUsIAorICAgIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgCisgICAgMjE2LCAyNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAKKyAgICAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIAorICAgIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgCisgICAgMjUzLCAyMDIsIDI0NCwgODksIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIAorICAgIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgCisgICAgMjAyLCAyNDQsIDEyMywgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE4LCAxNTIsIAorICAgIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTgsIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAKKyAgICAyMDIsIDEyMywgMjE2LCAxNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgCisgICAgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNiwgMTQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgCisgICAgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjMwLCAxNjksIDI2LCAyNTUsIDE1LCAyNDEsIDIxMiwgMTIzLCAyMjUsIDM0LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDExMSwgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAxMTEsIDI2LCAyNTUsIDE1LCAyNDUsIAorICAgIDExMiwgMTA1LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDEwNSwgMjYsIDI1NSwgMTUsIDI0OSwgNzMsIDExMywgMjQ2LCAKKyAgICAxMDcsIDI2LCAyNTUsIDE1LCAyNDUsIDExMiwgMTEzLCAyNDYsIDEwNywgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAxOTAsIAorICAgIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDksIDI1NCwgCisgICAgMTQ5LCAxNywgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIzMSwgNDYsIDIxNiwgMjQ4LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMTYzLCAyNiwgCisgICAgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIzLCAyNTQsIDE0OSwgCisgICAgMTcsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCAxMjIsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTYsIDE4MiwgMTIzLCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMzQsIDI0MCwgMjE3LCAKKyAgICAyNiwgMjU1LCAxNSwgMjQ1LCAxMTIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgODksIAorICAgIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjUwLCAKKyAgICAyMzUsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjI5LCAxODcsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgCisgICAgMjU1LCAxNSwgMjE2LCAxODIsIDEyMywgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCA4OSwgMjE2LCAKKyAgICAxNDgsIDI2LCAyNTUsIDE1LCAyNDgsIDY1LCAyNDQsIDg5LCAyMzAsIDE2OSwgMjYsIDI1NSwgMTUsIDIxOCwgMTIwLCAyNDQsIAorICAgIDEyMywgMjMwLCAxNjksIDI2LCAxMjMsIDE2MywgNTAsIDI2LCAxMjMsIDE2MywgNSwgMjU0LCAxNDksIDE3LCAyNiwgMTEzLCAKKyAgICAyMTYsIDE2OCwgNTAsIDI2LCAxMzQsIDIyNCwgMjMsIDUwLCAyNiwgMjExLCA0NSwgNTAsIDI2LCAyMTcsIDY5LCA1MCwgMjYsIAorICAgIDI0NiwgMTA5LCA1MCwgMjYsIDIyNiwgMjUwLCA1MCwgMjYsIDExMywgMjI2LCAyNDksIDUwLCAyNiwgMTM0LCAyMjYsIDI0OSwgCisgICAgNTAsIDI2LCAyNDQsIDE5LCAyMjYsIDI0OSwgNTAsIDI2LCAyNDQsIDg5LCAyMjYsIDI0OSwgNTAsIDI2LCAyMzEsIDQwLCAKKyAgICA1MCwgMjYsIDIzMywgMTYzLCAyNTIsIDEzNiwgNTAsIDI2LCAyMzIsIDIwMCwgNTAsIDI2LCAyMjYsIDEzNSwgNTAsIDI2LCAKKyAgICAyMTEsIDE1OSwgNTAsIDI2LCAyNTMsIDI1MSwgNTAsIDI2LCAyNTQsIDgsIDUwLCAyNiwgMjQyLCAxNTEsIDUwLCAyNiwgCisgICAgMjE1LCAxODcsIDI1MiwgMTM2LCA1MCwgMjYsIDIxMCwgODcsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTUsIDUwLCAyMjIsIAorICAgIDIwMCwgMjE0LCAxODUsIDUwLCAyMjIsIDIwMCwgMjIwLCAxNDQsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTMsIDUwLCAyMjIsIAorICAgIDIwMCwgMjQ3LCAyMjEsIDIyMCwgMTEzLCA1MCwgMjIyLCAyMDAsIDIxOSwgMTcwLCA1MCwgMjIyLCAyMDAsIDI0OCwgNjEsIAorICAgIDUwLCAyMjIsIDIwMCwgMjI0LCA5LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTMxLCA1MCwgMjIyLCAyMDAsIDI0NiwgNjgsIDUwLCAKKyAgICAyMjIsIDIwMCwgMjUzLCAyNDYsIDUwLCAyMjIsIDIwMCwgMjUwLCAxNzksIDUwLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMjE2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyNSwgMjcsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIxNywgNDYsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjU1LCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDI1MCwgMTA5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMSwgMjIxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0MSwgMjE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MywgOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE2LCAKKyAgICAxMTcsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNzUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUxLCAxNzcsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDI1MiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyMzEsIDE4OSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzEsIDE0MSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMjEsIDIxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzIsIDI0MywgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNTEsIDE5NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzOSwgMjI1LCAzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyNDcsIDE0MSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDIzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTksIAorICAgIDg5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjMyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MiwgNzEsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDAsIDI1NSwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDEsIDE4NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTEsIDEyMCwgMjMzLCA0MiwgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjMsIDE1NiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDUsIDIzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDYsIDExNSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMTUsIDEwNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTIsIDc0LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMzksIDIxNSwgMjM2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMywgMTU5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIyNiwgMjIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjIyLCAxOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMyLCAKKyAgICAyMzAsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjI2LCAxMTksIDI1MiwgMTkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0NCwgNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQyLCAxNDUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE4LCAKKyAgICAxMjEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNCwgMjUzLCAxNzYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjEyLCAzMiwgCisgICAgMjUyLCAxNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMzgsIDIyNiwgMjUyLCA5MSwgMjMyLCA2NSwgMSwgNjEsIDIzMiwgCisgICAgNjUsIDEsIDc2LCAyMzIsIDY1LCAxLCAyNTMsIDE2NiwgMjMyLCA2NSwgMSwgMjUyLCAyNywgMjMyLCA2NSwgMSwgMjQzLCAKKyAgICAyMDksIDIzMiwgNjUsIDEsIDI0OSwgNjgsIDIzMiwgNjUsIDEsIDc0LCAyMzIsIDY1LCAxLCAyMTIsIDk4LCAyMzIsIDY1LCAKKyAgICAxLCAyMTAsIDE1OSwgMjMyLCA2NSwgMSwgMjE2LCAyMTEsIDIzMiwgNjUsIDEsIDIzNSwgMTUwLCAyMzIsIDY1LCAxLCAyMzUsIAorICAgIDI5LCAyMzIsIDY1LCAxLCAyMjQsIDk5LCAyMzIsIDY1LCAxLCAxNTYsIDIzMiwgNjUsIDEsIDE5NCwgMjMyLCA2NSwgMSwgCisgICAgMjMwLCAzMCwgMjMyLCA2NSwgMSwgMjMwLCAxNzEsIDIzMiwgNjUsIDEsIDIyOCwgMTE2LCAyMzIsIDY1LCAxLCA2OSwgMjMyLCAKKyAgICA2NSwgMSwgMjI2LCAxMDksIDIzMiwgNjUsIDEsIDIzNCwgNTMsIDIzMiwgNjUsIDEsIDE1MywgMjMyLCA2NSwgMSwgMjIyLCAKKyAgICA5MywgMjMyLCA2NSwgMSwgMjE3LCAxNTMsIDIzMiwgNjUsIDEsIDIxNSwgMTYwLCAyMzIsIDY1LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NSwgMSwgMjQ1LCAxNTgsIDIzMiwgNjUsIDEsIDI0MiwgNjcsIDIzMiwgNjUsIDEsIDIxMSwgMTc4LCAyNTAsIAorICAgIDI0NSwgMSwgNjEsIDI1MCwgMjQ1LCAxLCAyMjYsIDk1LCAyNTAsIDI0NSwgMSwgMjQ5LCA2OCwgMjUwLCAyNDUsIDEsIDE1NiwgCisgICAgMjUwLCAyNDUsIDEsIDIxNCwgMTE2LCAyNTAsIDI0NSwgMSwgMTUzLCAyNTAsIDI0NSwgMSwgMjMzLCA2OCwgMjUwLCAyNDUsIAorICAgIDEsIDI1NSwgODQsIDI1MCwgMjQ1LCAxLCAyMjQsIDk5LCAyNTAsIDI0NSwgMSwgMjUzLCAxNjYsIDI1MCwgMjQ1LCAxLCAKKyAgICAxOTQsIDI1MCwgMjQ1LCAxLCA3OCwgMjUwLCAyNDUsIDEsIDI0OCwgMjMxLCAyNTAsIDI0NSwgMSwgMjE3LCAxNTMsIDI1MCwgCisgICAgMjQ1LCAxLCAyMjAsIDEwNiwgMjUwLCAyNDUsIDEsIDIyMCwgMTA1LCAyNTAsIDI0NSwgMSwgMjIyLCA5MywgMjUwLCAyNDUsIAorICAgIDEsIDI1MSwgNzMsIDI1MCwgMjQ1LCAxLCA2OSwgMjUwLCAyNDUsIDEsIDIyOCwgMTE2LCAyNTAsIDI0NSwgMSwgMjExLCAKKyAgICAxNzgsIDI1MCwgMjQ1LCAxLCAyMzAsIDMwLCAyNTAsIDI0NSwgMSwgMjE1LCAxNTksIDI1MCwgMjQ1LCAxLCAyMjYsIDEwOSwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMjI4LCAyNTAsIDI0NSwgMSwgNzQsIDI1MCwgMjQ1LCAxLCA3NiwgMjUwLCAyNDUsIDEsIAorICAgIDIxNCwgMTEzLCAyNTAsIDI0NSwgMSwgMjM1LCAyOSwgMjUwLCAyNDUsIDEsIDIzNSwgMjAsIDI1MCwgMjQ1LCAxLCAyMjksIAorICAgIDE1NSwgMjUwLCAyNDUsIDEsIDIxNCwgMTE4LCAyNTAsIDI0NSwgMSwgMjQzLCAyMDksIDI1MCwgMjQ1LCAxLCAyNDMsIDE0NCwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMTcwLCAyNTAsIDI0NSwgMSwgMjE4LCAxNjksIDI1MCwgMjQ1LCAxLCAyMjksIDg0LCAyNTAsIAorICAgIDI0NSwgMSwgMjM2LCA0MCwgMjUwLCAyNDUsIDEsIDI1MSwgNzIsIDI1MCwgMjQ1LCAxLCAyMTUsIDE2MCwgMjUwLCAyNDUsIAorICAgIDEsIDIxNCwgMTE1LCAyNTAsIDI0NSwgMSwgMjIyLCAxODIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzNCwgMjUwLCAyNDUsIDEsIAorICAgIDIzMSwgMTMzLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzMSwgMjUwLCAyNDUsIDEsIDIzMywgCisgICAgNjcsIDI1MCwgMjQ1LCAxLCAyNDUsIDI0MiwgMjUwLCAyNDUsIDEsIDIxNCwgMTE0LCA1NSwgMzIsIDEsIDYxLCA1NSwgMzIsIAorICAgIDEsIDI1MiwgODMsIDU1LCAzMiwgMSwgMjM0LCAxODgsIDU1LCAzMiwgMSwgMjQ4LCA5OCwgNTUsIDMyLCAxLCA3NiwgNTUsIAorICAgIDMyLCAxLCAyMTMsIDI1NSwgNTUsIDMyLCAxLCAyMTAsIDk0LCA1NSwgMzIsIDEsIDI0MSwgMjQ1LCA1NSwgMzIsIDEsIDIxNiwgCisgICAgMTk2LCA1NSwgMzIsIDEsIDc0LCA1NSwgMzIsIDEsIDE3NiwgNTUsIDMyLCAxLCAyNDUsIDE4MiwgNTUsIDMyLCAxLCAyNDUsIAorICAgIDE2NywgNTUsIDMyLCAxLCAyNDUsIDE1OCwgNTUsIDMyLCAxLCAyNDUsIDgzLCA1NSwgMzIsIDEsIDc4LCA1NSwgMzIsIDEsIAorICAgIDIyNSwgMjI0LCA1NSwgMzIsIDEsIDIyMCwgNjUsIDU1LCAzMiwgMSwgMjMzLCAyMjMsIDU1LCAzMiwgMSwgMjQ1LCAxMDAsIAorICAgIDU1LCAzMiwgMSwgMjQ1LCA5MCwgNTUsIDMyLCAxLCAyMTcsIDIzLCA1NSwgMzIsIDEsIDY5LCA1NSwgMzIsIDEsIDI0NSwgCisgICAgMTg1LCA1NSwgMzIsIDEsIDIyNSwgMTM5LCA1NSwgMzIsIDEsIDIzNCwgMTI1LCA1NSwgMzIsIDEsIDI0NSwgMjEwLCA1NSwgCisgICAgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjUwLCAxMzksIDU1LCAzMiwgMSwgMjM2LCA0MCwgNTUsIDMyLCAxLCAyMTQsIAorICAgIDExOCwgNTUsIDMyLCAyMjcsIDIwMiwgMTExLCA1NSwgMzIsIDIyNywgMjAyLCAxOTAsIDU1LCAzMiwgMjI3LCAyMDIsIDIxNiwgCisgICAgMjQ4LCA1NSwgMzIsIDIyNywgMjAyLCAyNDQsIDEyMiwgMjQyLCAxNjAsIDEsIDI1NCwgMjEzLCAyNDIsIDE2MCwgMSwgMjUyLCAKKyAgICAxNzEsIDI0MiwgMTYwLCAxLCAyNDIsIDIxOCwgMjQyLCAxNjAsIDEsIDI0OCwgMjEyLCAyNDIsIDE2MCwgMSwgMjU0LCAyMDksIAorICAgIDI0MiwgMTYwLCAxLCAyMjQsIDgyLCAyNDIsIDE2MCwgMSwgMjM1LCAxNjEsIDI0MiwgMTYwLCAxLCAyNDIsIDQ2LCAyNDIsIAorICAgIDE2MCwgMSwgMjE2LCAxNTksIDI0MiwgMTYwLCAxLCAyNDUsIDE5MSwgMjQyLCAxNjAsIDEsIDIzMywgMTk2LCAyNDIsIDE2MCwgCisgICAgMSwgMjMzLCAxMTksIDI0MiwgMTYwLCAxLCAyMzEsIDE4NCwgMjQyLCAxNjAsIDEsIDIyOSwgMTg5LCAyNDIsIDE2MCwgMSwgCisgICAgMjM1LCAxMjUsIDI0MiwgMTYwLCAxLCAyMTQsIDEzNiwgMjQyLCAxNjAsIDEsIDIyNiwgNzMsIDI0MiwgMTYwLCAxLCAyMjgsIAorICAgIDIwMCwgMjQyLCAxNjAsIDEsIDIyMywgMTY4LCAyNDIsIDE2MCwgMSwgMjIxLCAyMjAsIDI0MiwgMTYwLCAxLCAyMTcsIDUsIAorICAgIDI0MiwgMTYwLCAxLCAyMTEsIDIzNCwgMjQyLCAxNjAsIDEsIDI0NCwgMTg2LCAyNDIsIDE2MCwgMSwgMjM2LCA0NCwgMjQyLCAKKyAgICAxNjAsIDEsIDI0MCwgMjA2LCAyNDIsIDE2MCwgMSwgMjI2LCAxNDMsIDI0MiwgMTYwLCAxLCAyMjgsIDIwNSwgMjQwLCAyMTcsIAorICAgIDIxNCwgMjA5LCAxLCAyNTQsIDE1NSwgMjE0LCAyMDksIDEsIDI1MiwgMzQsIDIxNCwgMjA5LCAxLCAyNDMsIDExNSwgMjE0LCAKKyAgICAyMDksIDEsIDIzNCwgMTM4LCAyMTQsIDIwOSwgMSwgMjQ4LCA2MiwgMjE0LCAyMDksIDEsIDI0MSwgNzUsIDIxNCwgMjA5LCAKKyAgICAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIDIxNCwgMjA5LCAxLCAyNDAsIDI0OCwgMjE0LCAyMDksIDEsIAorICAgIDIxNiwgMjMxLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgMjA5LCAxLCAyMzUsIDAsIDIxNCwgMjA5LCAxLCAyMjAsIAorICAgIDIyLCAyMTQsIDIwOSwgMSwgMjMzLCAxMDQsIDIxNCwgMjA5LCAxLCAyMzEsIDcwLCAyMTQsIDIwOSwgMSwgMjQ4LCAyOSwgCisgICAgMjE0LCAyMDksIDEsIDIyNywgMTk4LCAyMTQsIDIwOSwgMSwgMjEwLCAxMywgMjE0LCAyMDksIDEsIDIyMSwgMjUwLCAyMTQsIAorICAgIDIwOSwgMSwgMjU0LCAyMDUsIDIxNCwgMjA5LCAxLCAyMjQsIDE1MywgMjE0LCAyMDksIDEsIDIyMiwgMjcsIDIxNCwgMjA5LCAKKyAgICAxLCAyMjQsIDM4LCAyMTQsIDIwOSwgMSwgMjIzLCAxNDcsIDIxNCwgMjA5LCAxLCAyMTYsIDIwMCwgMjE0LCAyMDksIDEsIAorICAgIDI0MiwgMjUxLCAyMTQsIDIwOSwgMSwgMTEyLCAyMTQsIDIwOSwgMSwgNzQsIDIxNCwgMjA5LCAxLCA2OSwgMjE0LCAyMDksIAorICAgIDEsIDIxOCwgMTgxLCAyMTQsIDIwOSwgMjExLCAyMDksIDI0NywgMTgwLCA1NSwgMjI1LCAxNzIsIDUsIDYxLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDc0LCA1NSwgMjI1LCAxNzIsIDUsIDY5LCA1NSwgMjI1LCAxNzIsIDUsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMzMsIDIyMywgNTUsIDIyNSwgMTcyLCA1LCAyNDMsIDE0MiwgNTUsIDIyNSwgMTcyLCA1LCAyNDIsIDEyMCwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyMTEsIDE2NSwgNTUsIDIyNSwgMTcyLCA1LCAyNTEsIDQxLCA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTQ3LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTE0LCA1NSwgMjI1LCAxNzIsIDUsIDIxNywgMTA2LCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIxNSwgMTE5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMjI5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMTEsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjQ2LCA4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMTYsIDIwOSwgNTUsIDIyNSwgMTcyLCA1LCAxOTEsIDU1LCAKKyAgICAyMjUsIDE3MiwgNSwgMjUyLCAxOTksIDU1LCAyMjUsIDE3MiwgNSwgMjQ0LCAyMDQsIDU1LCAyMjUsIDE3MiwgNSwgMTk4LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIyNywgMjQyLCA1NSwgMjI1LCAxNzIsIDUsIDE4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIAorICAgIDIzNSwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIDEwNywgNTUsIDIyNSwgMTcyLCA1LCAxOTIsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjE0LCAyNywgNTUsIDIyNSwgMTcyLCA1LCAyMTMsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAyMDUsIDU1LCAyMjUsIDE3MiwgCisgICAgNSwgMjIyLCAxNDIsIDU1LCAyMjUsIDE3MiwgNSwgMjMzLCAxNDEsIDU1LCAyMjUsIDE3MiwgNSwgMjA2LCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNzIsIDUsIDIyMCwgMTA0LCA1NSwgMjI1LCAxNzIsIDUsIDIxOCwgMjI1LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDE2MiwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5NCwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIAorICAgIDE5MywgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5MiwgNTUsIDIyNSwgMTcyLCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTcyLCAKKyAgICA1LCAyNDgsIDIwOCwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDIwNywgNTUsIDIyNSwgMTcyLCA1LCAyNTIsIDE3OCwgNTUsIAorICAgIDIyNSwgMTcyLCA1LCAyNTEsIDkzLCA1NSwgMjI1LCAxNzIsIDIxMSwgMjA5LCAyNDcsIDE4MCwgNTUsIDIyNSwgMTcyLCA1NCwgCisgICAgMTExLCA1NSwgMjI1LCAxNzIsIDU0LCAxMDUsIDU1LCAyMjUsIDE3MiwgNTQsIDIxNiwgMjQ4LCA1NSwgMjI1LCAxNzIsIDU0LCAKKyAgICAyMTUsIDczLCA1NSwgMjI1LCAxNzIsIDU0LCAyNDAsIDIxNywgMTgxLCA2LCAxLCAyMDAsIDc0LCAxODEsIDYsIDEsIDIwMCwgCisgICAgNzYsIDE4MSwgNiwgMSwgMjAwLCA2MSwgMTgxLCA2LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDYsIDEsIDIwMCwgNzgsIAorICAgIDE4MSwgNiwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIAorICAgIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA2LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNiwgMSwgCisgICAgMjE5LCAyNTMsIDc4LCAxODEsIDYsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyNTMsIDE3NSwgMTgxLCA2LCAKKyAgICAxLCAyMjYsIDEyMCwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjcsIAorICAgIDE4MSwgNiwgMSwgMjI1LCAyMTQsIDE4MSwgNiwgMSwgMjUyLCA3NCwgMTgxLCA2LCAxLCAyMTcsIDEyLCAxODEsIDYsIDEsIAorICAgIDI0OCwgODUsIDE4MSwgNiwgMSwgMjUwLCAxMzYsIDE4MSwgNiwgMSwgMjM1LCAxMzAsIDE4MSwgNiwgMSwgMjM0LCAxOTUsIAorICAgIDE4MSwgNiwgMSwgMjQzLCA5MCwgMTgxLCA2LCAxLCAyNDUsIDIxMCwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAKKyAgICAyNDUsIDY3LCAxODEsIDYsIDEsIDIxNiwgMTk1LCAxODEsIDYsIDEsIDI0NSwgOTAsIDE4MSwgNiwgMSwgMjEwLCA5MiwgCisgICAgMTgxLCA2LCAxLCAyNDUsIDgzLCAxODEsIDYsIDEsIDIxMCwgNzMsIDE4MSwgNiwgMSwgMjQ1LCAxMDAsIDE4MSwgNiwgMSwgCisgICAgMjQ1LCAxODIsIDE4MSwgNiwgMSwgMjQ1LCAxNjcsIDE4MSwgNiwgMSwgMjQ1LCAxNTgsIDE4MSwgNiwgMSwgMjQ1LCAxNDYsIAorICAgIDE4MSwgNiwgMSwgMjI2LCAyMjMsIDE4MSwgNiwgMSwgMjQ1LCA0NiwgMTgxLCA0LCAxLCAyMDAsIDc0LCAxODEsIDQsIDEsIAorICAgIDIwMCwgNzYsIDE4MSwgNCwgMSwgMjAwLCA2MSwgMTgxLCA0LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDQsIDEsIDIwMCwgCisgICAgNzgsIDE4MSwgNCwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNCwgMSwgMjE5LCAKKyAgICAyNTMsIDc2LCAxODEsIDQsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA0LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNCwgCisgICAgMSwgMjE5LCAyNTMsIDc4LCAxODEsIDQsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyNTMsIDE3NSwgMTgxLCAKKyAgICA0LCAxLCAyMjYsIDEyMCwgMTgxLCA0LCAxLCAyMTEsIDE5NSwgMTgxLCA0LCAxLCAyMTEsIDQ0LCAxODEsIDQsIDEsIDI0MiwgCisgICAgNjcsIDE4MSwgNCwgMSwgMjI1LCAyMTQsIDE4MSwgNCwgMSwgMjUyLCA3NCwgMTgxLCA0LCAxLCAyMTcsIDEyLCAxODEsIDQsIAorICAgIDEsIDI0OCwgODUsIDE4MSwgNCwgMSwgMjUwLCAxMzYsIDE4MSwgNCwgMSwgMjM1LCAxMzAsIDE4MSwgNCwgMSwgMjM0LCAKKyAgICAxOTUsIDE4MSwgNCwgMSwgMjQzLCA5MCwgMTgxLCA0LCAxLCAyNDUsIDIxMCwgMTgxLCA0LCAxLCAyMTMsIDI1MCwgMTgxLCAKKyAgICA0LCAxLCAyNDUsIDY3LCAxODEsIDQsIDEsIDIxNiwgMTk1LCAxODEsIDQsIDEsIDI0NSwgOTAsIDE4MSwgNCwgMSwgMjEwLCAKKyAgICA5MiwgMTgxLCA0LCAxLCAyNDUsIDgzLCAxODEsIDQsIDEsIDIxMCwgNzMsIDE4MSwgNCwgMSwgMjQ1LCAxMDAsIDE4MSwgNCwgCisgICAgMSwgMjQ1LCAxODIsIDE4MSwgNCwgMSwgMjQ1LCAxNjcsIDE4MSwgNCwgMSwgMjQ1LCAxNTgsIDE4MSwgNCwgMSwgMjQ1LCAKKyAgICAxNDYsIDE4MSwgNCwgMSwgMjI2LCAyMjMsIDE4MSwgNCwgMSwgMjQ1LCA0NiwgMjIwLCA3MSwgMSwgMjI1LCAyMTIsIDIyMCwgCisgICAgNzEsIDEsIDIxNiwgNiwgMjIwLCA3MSwgMSwgMjM0LCA5NywgMjIwLCA3MSwgMSwgMjQ0LCAxNTUsIDIyMCwgNzEsIDEsIAorICAgIDIxNiwgMTczLCAyMjAsIDcxLCAxLCAyMTksIDYwLCAyMjAsIDcxLCAxLCAyMTgsIDE1LCAyMjAsIDcxLCAxLCAyNTAsIDY5LCAKKyAgICAyMjAsIDcxLCAxLCAyMTEsIDQ2LCAyMjAsIDcxLCAxLCAyNDAsIDIxNiwgMjIwLCA3MSwgMSwgMjUyLCAxMywgMjIwLCA3MSwgCisgICAgMSwgMjQ4LCA5NywgMjIwLCA3MSwgMSwgMjQzLCAxMjgsIDIyMCwgNzEsIDEsIDIxMywgMTIzLCAyMjAsIDcxLCAxLCAyMTYsIAorICAgIDE3NywgMjIwLCA3MSwgMSwgMjEwLCAyMSwgMjIwLCA3MSwgMSwgMjMxLCA5NCwgMjIwLCA3MSwgMSwgMjM1LCA1NSwgMjIwLCAKKyAgICA3MSwgMSwgMjExLCAyMjUsIDIyMCwgNzEsIDEsIDI0MiwgNTUsIDIyMCwgNzEsIDEsIDIzMiwgMTQ4LCAyMjAsIDcxLCAxLCAKKyAgICAyMzAsIDE5NCwgMjIwLCA3MSwgMSwgMjM2LCA0NywgMjIwLCA3MSwgMSwgMjQ1LCAyMDksIDIyMCwgNzEsIDEsIDI1MywgCisgICAgMjM5LCAyMjAsIDcxLCAxLCAyNTUsIDAsIDIyMCwgNzEsIDEsIDIyNiwgMjAwLCAyMjAsIDcxLCAxLCAyMTEsIDIxMiwgMjIwLCAKKyAgICA3MSwgMSwgMjI2LCAxMzQsIDIyMCwgNzEsIDEsIDI1NCwgMjE4LCAyMjAsIDcxLCAxLCAyMjIsIDIxMCwgMjIwLCA3MSwgMSwgCisgICAgMjI3LCAxOTgsIDIyMCwgNzEsIDEsIDI0NSwgMjI1LCAyMjAsIDcxLCAxLCAyNTQsIDIyMywgMjIwLCA3MSwgMSwgMjQwLCAKKyAgICAxMTgsIDIyMCwgNzEsIDEsIDIxNCwgMTYzLCAyMjAsIDcxLCAxLCAyMjcsIDIsIDIyMCwgNzEsIDEsIDIyNiwgMTgwLCAyMjAsIAorICAgIDcxLCAxLCAyMjYsIDIyMiwgMjIwLCA3MSwgMSwgMjUzLCAxNzgsIDIyMCwgNzEsIDEsIDI1NCwgMjcsIDIyMCwgNzEsIDEsIAorICAgIDIyNiwgMTYyLCAyMjAsIDcxLCAxLCAyNTQsIDIwMSwgMjIwLCA3MSwgMSwgMjQ1LCA5NCwgMjIwLCA3MSwgMSwgMjU0LCA1LCAKKyAgICAyMjAsIDcxLCAxLCAyNDUsIDIzNSwgMjIwLCA3MSwgMSwgMjQwLCAxMjUsIDIyMCwgNzEsIDEsIDIxMSwgMTMsIDIyNiwgCisgICAgMTQ1LCAxLCAyNTQsIDE3OSwgMjI2LCAxNDUsIDEsIDI1MiwgMTk5LCAyMjYsIDE0NSwgMSwgMjE3LCAxMDYsIDIyNiwgMTQ1LCAKKyAgICAxLCAyMzUsIDE0NywgMjI2LCAxNDUsIDEsIDIxMSwgMTY1LCAyMjYsIDE0NSwgMSwgMjM0LCAxMzgsIDIyNiwgMTQ1LCAxLCAKKyAgICAyNDgsIDg0LCAyMjYsIDE0NSwgMSwgMjA1LCAyMjYsIDE0NSwgMSwgMjA2LCAyMjYsIDE0NSwgMSwgMjIwLCAyOCwgMjI2LCAKKyAgICAxNDUsIDEsIDI0OCwgMzMsIDIyNiwgMTQ1LCAxLCAyNTAsIDIyMywgMjI2LCAxNDUsIDEsIDI0MywgMTQyLCAyMjYsIDE0NSwgCisgICAgMSwgMjQ0LCAyMDQsIDIyNiwgMTQ1LCAxLCAyMjQsIDg5LCAyMjYsIDE0NSwgMSwgMjM1LCAxNSwgMjI2LCAxNDUsIDEsIAorICAgIDIzMywgMTM2LCAyMjYsIDE0NSwgMSwgMjMwLCAyMDUsIDIyNiwgMTQ1LCAxLCAyMjcsIDE4MiwgMjI2LCAxNDUsIDEsIDIxMiwgCisgICAgMzAsIDIyNiwgMTQ1LCAxLCAxNjIsIDIyNiwgMTQ1LCAxLCAxOTIsIDIyNiwgMTQ1LCAxLCA2MSwgMjI2LCAxNDUsIDEsIDc2LCAKKyAgICAyMjYsIDE0NSwgMSwgNzQsIDIyNiwgMTQ1LCAxLCA3OCwgMjI2LCAxNDUsIDEsIDY5LCAyMjYsIDE0NSwgMSwgMjU1LCA4MiwgCisgICAgMjI2LCAxNDUsIDEsIDI0NSwgMjE3LCAyMjYsIDE0NSwgMSwgMjI2LCAxODcsIDIyNiwgMTQ1LCAyMSwgMjEwLCA4NiwgMjI2LCAKKyAgICAxNDUsIDIxLCAxMTEsIDIyNiwgMTQ1LCAyMSwgMTA1LCAyMjYsIDE0NSwgMjEsIDE1OCwgMjI2LCAxNDUsIDIxLCAxNjEsIAorICAgIDIyNiwgMTQ1LCAyMSwgMTkwLCAyMjYsIDE0NSwgMjEsIDE5NSwgMjI2LCAxNDUsIDIxLCAxOTksIDIyNiwgMTQ1LCAyMSwgCisgICAgMTk2LCAyMjYsIDE0NSwgMjEsIDIwMSwgMjQ5LCA3NSwgMywgNjEsIDI0OSwgNzUsIDMsIDc2LCAyNDksIDc1LCAzLCA3NCwgCisgICAgMjQ5LCA3NSwgMywgNzgsIDI0OSwgNzUsIDMsIDY5LCAyNDksIDc1LCAzLCAyMzUsIDE0NywgMjQ5LCA3NSwgMywgMjM1LCAKKyAgICA3NCwgMjQ5LCA3NSwgMywgMTc2LCAyNDksIDc1LCAzLCAyMzQsIDE4OCwgMjQ5LCA3NSwgMywgMjM0LCA5OCwgMjQ5LCA3NSwgCisgICAgMywgMjM0LCAzNCwgMjQ5LCA3NSwgMywgMjMzLCAyMjMsIDI0OSwgNzUsIDMsIDIzMywgMTQxLCAyNDksIDc1LCAzLCAyMzMsIAorICAgIDY0LCAyNDksIDc1LCAzLCAyMzIsIDI0NywgMjQ5LCA3NSwgMywgMjMyLCAxNjIsIDI0OSwgNzUsIDMsIDIzMiwgMTAzLCAKKyAgICAyNDksIDc1LCAzLCAxODYsIDI0OSwgNzUsIDMsIDIzMSwgOTYsIDI0OSwgNzUsIDMsIDIzMCwgMjM1LCAyNDksIDc1LCAzLCAKKyAgICAyMzAsIDE2NiwgMjQ5LCA3NSwgMywgMjMwLCAxMDcsIDI0OSwgNzUsIDMsIDE5OCwgMjQ5LCA3NSwgMywgMjI5LCAxMTIsIAorICAgIDI0OSwgNzUsIDMsIDIyOCwgMjM4LCAyNDksIDc1LCAzLCAyMjgsIDc5LCAyNDksIDc1LCAzLCAyMjcsIDI0MiwgMjQ5LCA3NSwgCisgICAgMywgMTkxLCAyNDksIDc1LCAzLCAyMjUsIDIyNCwgMjQ5LCA3NSwgMywgMjI1LCAxMTEsIDI0OSwgNzUsIDMsIDIyNSwgMTksIAorICAgIDI0OSwgNzUsIDMsIDIyNCwgMTUzLCAyNDksIDc1LCAzLCAyMDUsIDI0OSwgNzUsIDMsIDIyMywgMTMxLCAyNDksIDc1LCAzLCAKKyAgICAyMjMsIDM4LCAyNDksIDc1LCAzLCAyMjIsIDIxMywgMjQ5LCA3NSwgMywgMjIyLCAxNDIsIDI0OSwgNzUsIDMsIDIwNiwgCisgICAgMjQ5LCA3NSwgMywgMjIxLCAxODMsIDI0OSwgNzUsIDMsIDIxOSwgMTkzLCAyNDksIDc1LCAzLCAyMTksIDYwLCAyNDksIDc1LCAKKyAgICAzLCAyMTgsIDg0LCAyNDksIDc1LCAzLCAyMTcsIDEwNiwgMjQ5LCA3NSwgMywgMjE3LCAyMywgMjQ5LCA3NSwgMywgMjE2LCAKKyAgICAxMTgsIDI0OSwgNzUsIDMsIDExMiwgMjQ5LCA3NSwgMywgMjE1LCAxMTksIDI0OSwgNzUsIDMsIDIxMiwgNjUsIDI0OSwgNzUsIAorICAgIDMsIDIxMiwgMjIsIDI0OSwgNzUsIDMsIDIxMSwgMjUwLCAyNDksIDc1LCAzLCAyMTEsIDIyNywgMjQ5LCA3NSwgMywgMjExLCAKKyAgICAxNjUsIDI0OSwgNzUsIDMsIDIxMSwgMTYyLCAyNDksIDc1LCAzLCAyMTAsIDExNiwgMjQ5LCA3NSwgMywgMjEwLCAyMywgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTQsIDE3NywgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTIsIDMzLCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDI0MiwgMjA4LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0OCwgMTk2LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0MSwgCisgICAgMjQ1LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxMiwgMzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjEwLCA5NywgMjM2LCA4LCAKKyAgICAyNTQsIDM1LCAxLCAyNDEsIDIwMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTYsIDIyNywgMjM2LCA4LCAyNTQsIDM1LCAxLCAKKyAgICAyMTAsIDIzMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzQsIDIzMSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzMsIDk5LCAyMzYsIAorICAgIDgsIDI1NCwgMzUsIDEsIDIzMSwgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI3LCAxOTgsIDIzNiwgOCwgMjU0LCAzNSwgMSwgCisgICAgMjIxLCAyNTEsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjUzLCAxNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI1LCAyMjQsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIyLCAyNiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjQsIDM3LCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDIyMywgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIwLCAyMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTcsIDM3LCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDIyMSwgMTc1LCA1MCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTExLCAyMzYsIDgsIDI1NCwgMzUsIAorICAgIDU0LCAxMDUsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDE1OCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMjE2LCAyNDgsIDIzNiwgOCwgCisgICAgMjU0LCAzNSwgNTQsIDIxNSwgNzMsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjI1LCAxMjIsIAorICAgIDEsIDI1NCwgMTc0LCAyMjUsIDEyMiwgMSwgMjUyLCAzNiwgMjI1LCAxMjIsIDEsIDI0MywgMTE2LCAyMjUsIDEyMiwgMSwgCisgICAgMjQ4LCA2NCwgMjI1LCAxMjIsIDEsIDI0MSwgMjQ1LCAyMjUsIDEyMiwgMSwgMjEyLCAzNywgMjI1LCAxMjIsIDEsIDIxMCwgCisgICAgMTEwLCAyMjUsIDEyMiwgMSwgMjQxLCAyMDQsIDIyNSwgMTIyLCAxLCAyMTYsIDIzMSwgMjI1LCAxMjIsIDEsIDIxMCwgMjMzLCAKKyAgICAyMjUsIDEyMiwgMSwgMjM1LCAwLCAyMjUsIDEyMiwgMSwgMjMzLCAxMDUsIDIyNSwgMTIyLCAxLCAyMzEsIDcwLCAyMjUsIAorICAgIDEyMiwgMSwgMjI3LCAxOTgsIDIyNSwgMTIyLCAxLCAyMjAsIDE0NiwgMjI1LCAxMjIsIDEsIDI1NCwgMjA1LCAyMjUsIDEyMiwgCisgICAgMSwgMjI1LCAyMjQsIDIyNSwgMTIyLCAxLCAyMjIsIDI3LCAyMjUsIDEyMiwgMSwgMjI0LCA0MiwgMjI1LCAxMjIsIDEsIAorICAgIDIyMiwgMTkxLCAyMjUsIDEyMiwgMSwgMjIwLCAyMiwgMjI1LCAxMjIsIDEsIDIxNywgNDIsIDIyNSwgMTIyLCA1NCwgMTExLCAKKyAgICAyMjUsIDEyMiwgNTQsIDIxNiwgMjQ4LCAyMjUsIDEyMiwgNTQsIDIxNSwgNzMsIDIyNSwgMTIyLCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjI1LCAxMjIsIDU0LCAxMDUsIDIyNSwgMTIyLCA1NCwgMTU4LCAyMjUsIDEyMiwgMjExLCAyMDksIDIyMCwgMTM5LCAKKyAgICAyMzIsIDY0LCAxLCA2MSwgMjMyLCA2NCwgMSwgMjUzLCAxNjYsIDIzMiwgNjQsIDEsIDI0MywgMjA5LCAyMzIsIDY0LCAxLCAKKyAgICAyNDksIDY4LCAyMzIsIDY0LCAxLCA3NiwgMjMyLCA2NCwgMSwgMjE0LCAxMDUsIDIzMiwgNjQsIDEsIDc0LCAyMzIsIDY0LCAKKyAgICAxLCAyMTEsIDExNywgMjMyLCA2NCwgMSwgMjM1LCAyOSwgMjMyLCA2NCwgMSwgMTU2LCAyMzIsIDY0LCAxLCAxOTQsIDIzMiwgCisgICAgNjQsIDEsIDIzMCwgMzAsIDIzMiwgNjQsIDEsIDc4LCAyMzIsIDY0LCAxLCAxNTMsIDIzMiwgNjQsIDEsIDIxOCwgMjI4LCAKKyAgICAyMzIsIDY0LCAxLCAyMTcsIDE1MywgMjMyLCA2NCwgMSwgNjksIDIzMiwgNjQsIDEsIDI0NSwgMTQsIDIzMiwgNjQsIDEsIAorICAgIDIyNCwgOTksIDIzMiwgNjQsIDEsIDIyMiwgOTMsIDIzMiwgNjQsIDEsIDIxNSwgMTYwLCAyMzIsIDY0LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NCwgMSwgMjQ1LCAxNTgsIDIzMiwgNjQsIDEsIDIzMiwgNjcsIDIzMiwgNjQsIDEsIDIyOCwgMTE2LCAyMzIsIDY0LCAKKyAgICAxLCAyNTEsIDc0LCAyMzIsIDY0LCAyMTUsIDIyMywgNzksIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA2MSwgMjMxLCA1MywgCisgICAgMjQxLCAxODEsIDEsIDc2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNzQsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA3OCwgMjMxLCAKKyAgICA1MywgMjQxLCAxODEsIDEsIDE5MiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxMiwgNjUsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDI1MiwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTkxLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTg2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjI5LCAyMzMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjksIDExMiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyOSwgCisgICAgMTExLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjA1LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIzLCAxOTAsIDIzMSwgNTMsIAorICAgIDI0MSwgMTgxLCAxLCAyMzMsIDE0MSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIzNCwgMTM4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjQxLCAxOTYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjIsIDM1LCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIxLCAxODMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxNzYsIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAKKyAgICAyMTcsIDEwNSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMjMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDIyLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTEyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxNiwgMjEzLCAxNzAsIDIzMSwgNTMsIDI0MSwgMTgxLCAxNiwgMjEzLCAxNjksIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICA2MSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDc2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgNzQsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCA3OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIxMiwgNjUsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDE4NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyOSwgMTEyLCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjA1LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjMzLCAxNDEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAyMzQsIDEzOCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI0MSwgMTk2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjU0LCAzMSwgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjIxLCAxODMsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxNzYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMTcsIDIzLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMTEyLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjIyLCAKKyAgICAyMTksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjM2LCAxMywgMjM0LCAxMjYsIDEsIDYxLCAyMzQsIDEyNiwgMjUsIAorICAgIDUsIDc0LCAyMzQsIDEyNiwgMjUsIDUsIDY5LCAyMzQsIDEyNiwgMjUsIDUsIDE0OSwgMTUzLCAyMzQsIDEyNiwgMjUsIDUsIAorICAgIDc2LCAyMzQsIDEyNiwgMjUsIDUsIDc4LCAyMzQsIDEyNiwgMjUsIDIzMywgMjksIDc5LCAyMzQsIDEyNiwgNSwgNTIsIDIyMiwgCisgICAgMjM3LCA1MSwgMjM0LCAxMjYsIDUsIDI1NCwgODMsIDIzNCwgMTI2LCA1LCAyMTMsIDE0NywgMjM0LCAxMjYsIDEsIDE3NiwgCisgICAgMjM0LCAxMjYsIDEsIDIzNCwgMTM4LCAyMzQsIDEyNiwgMSwgMjQzLCAxNDIsIDIzNCwgMTI2LCAxLCAyNDMsIDAsIDIzNCwgCisgICAgMTI2LCAxLCAyNTEsIDQxLCAyMzQsIDEyNiwgMSwgMjUwLCAxNjUsIDIzNCwgMTI2LCAxLCAyMzUsIDE0NywgMjM0LCAxMjYsIAorICAgIDEsIDIyNywgMTY5LCAyMzQsIDEyNiwgMSwgMjE1LCAxNTcsIDIzNCwgMTI2LCAxLCAyMTUsIDE0NSwgMjM0LCAxMjYsIDEsIAorICAgIDI0OCwgMTQzLCAyMzQsIDEyNiwgMSwgMjQ4LCAxMjcsIDIzNCwgMTI2LCAxLCAyMjgsIDExNSwgMjM0LCAxMjYsIDEsIDIxNywgCisgICAgMTA2LCAyMzQsIDEyNiwgMSwgMjE2LCAyMDksIDIzNCwgMTI2LCAxLCAyNDgsIDIyOSwgMjM0LCAxMjYsIDEsIDI0OCwgMzMsIAorICAgIDIzNCwgMTI2LCAxLCAxOTgsIDIzNCwgMTI2LCAxLCAxOTEsIDIzNCwgMTI2LCAxLCAyMjUsIDE1MCwgMjM0LCAxMjYsIDEsIAorICAgIDI1MiwgMTk5LCAyMzQsIDEyNiwgMSwgMjUyLCAyNiwgMjM0LCAxMjYsIDEsIDE4NiwgMjM0LCAxMjYsIDEsIDE5MiwgMjM0LCAKKyAgICAxMjYsIDEsIDIwNSwgMjM0LCAxMjYsIDEsIDIzMywgMTQxLCAyMzQsIDEyNiwgMSwgMjE0LCAyNywgMjM0LCAxMjYsIDEsIAorICAgIDIyMCwgMTA0LCAyMzQsIDEyNiwgMSwgMjE4LCAyMjUsIDIzNCwgMTI2LCAxLCAyMDYsIDIzNCwgMTI2LCAxLCAyMTAsIDExNiwgCisgICAgMjM0LCAxMjYsIDEsIDE2MiwgMjM0LCAxMjYsIDEsIDIzNCwgNTIsIDIzNCwgMTI2LCAxLCAyMTUsIDEyNSwgMjM0LCAxMjYsIAorICAgIDUsIDI1MiwgMTQ5LCA0OCwgMjM0LCAxMjYsIDUsIDI1MCwgMjI5LCAyMzQsIDEyNiwgNSwgNTksIDUxLCAyMzQsIDEyNiwgCisgICAgMjEzLCAxNTIsIDIzNCwgMTI2LCAyMSwgMTExLCAyMzQsIDEyNiwgMjEsIDEwNSwgMjM0LCAxMjYsIDIxLCAxNTgsIDIzNCwgCisgICAgMTI2LCAyMSwgMTYxLCAyMzQsIDEyNiwgNTQsIDIxNiwgMjQ4LCAyMzQsIDEyNiwgNTQsIDIxNSwgNzMsIDIzNCwgMTI2LCAKKyAgICA1NCwgMTIzLCAyNDAsIDIxNywgMjM0LCAxMjYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0NywgCisgICAgMTI4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDQsIDI1MCwgNDMsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjUwLCA0MywgMjM0LCAKKyAgICAxMjYsIDIyNCwgMTQ0LCAyNDksIDE0NSwgMTMwLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDIzMSwgMTg1LCAyMzQsIDEyNiwgCisgICAgMjI0LCAxNDQsIDIzMiwgMTIxLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDUyLCAKKyAgICAyNDgsIDE4NiwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyMzIsIDIxMywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgCisgICAgMjQ1LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMzLCA5OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgMjAyLCAKKyAgICA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMxLCA3MCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyNCwgMzcsIDU1LCAKKyAgICAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIwLCAyMiwgNTUsIDIxOSwgCisgICAgMzAsIDI1NCwgNDYsIDEsIDIyMywgNzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNTIsIDMzLCA1NSwgMjE5LCAzMCwgCisgICAgMjU0LCA0NiwgMSwgMjE3LCAzNywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMSwgMjI4LCA1NSwgMjE5LCAzMCwgMjU0LCAKKyAgICA0NiwgMSwgMjM0LCAyMzEsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjcsIDE5OCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIAorICAgIDEsIDIzNCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIyLCAyNiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDIyMSwgMjUxLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ0LCAxNjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyNTQsIDE3OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI1MywgMTY5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjQ4LCAzMCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MiwgMjA4LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ4LCAKKyAgICAxOTYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDIsIDI0NSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgCisgICAgMjI3LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0OCwgMjcsIAorICAgIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgMTk4LCA1NSwgCisgICAgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAxNzksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCA1NCwgMTExLCA1NSwgMjE5LCAKKyAgICAzMCwgMjU0LCA0NiwgNTQsIDI0NCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMTMyLCAyMzUsIDI0NSwgMjUzLCAxODAsIAorICAgIDEsIDYxLCAyNTMsIDE4MCwgMSwgMjU1LCA4MiwgMjUzLCAxODAsIDEsIDI1NCwgODEsIDI1MywgMTgwLCAxLCAyNTUsIDQxLCAKKyAgICAyNTMsIDE4MCwgMSwgMjU0LCAxMzEsIDI1MywgMTgwLCAxLCAyNTUsIDQyLCAyNTMsIDE4MCwgMSwgMjU0LCAyNTIsIDI1MywgCisgICAgMTgwLCAxLCAyNTQsIDI0OCwgMjUzLCAxODAsIDEsIDc2LCAyNTMsIDE4MCwgMSwgMjQ1LCAyMTcsIDI1MywgMTgwLCAxLCAKKyAgICA3OCwgMjUzLCAxODAsIDEsIDIyNiwgMTg3LCAyNTMsIDE4MCwgMSwgNzQsIDI1MywgMTgwLCAxLCAyMzYsIDQwLCAyNTMsIAorICAgIDE4MCwgMSwgNjksIDI1MywgMTgwLCAxLCAyMTQsIDExOCwgMjUzLCAxODAsIDEsIDIzNCwgMTg4LCAyNTMsIDE4MCwgMSwgCisgICAgMjExLCAxNjIsIDI1MywgMTgwLCAxLCAyMTEsIDEyOCwgMjUzLCAxODAsIDEsIDIxMSwgMTM3LCAyNTMsIDE4MCwgMSwgMjQzLCAKKyAgICA2OSwgMjUzLCAxODAsIDEsIDI0MywgMzEsIDI1MywgMTgwLCAxLCAyNDIsIDI0MywgMjUzLCAxODAsIDEsIDI1MCwgMTk4LCAKKyAgICAyNTMsIDE4MCwgMSwgMjM1LCAxMzIsIDI1MywgMTgwLCAxLCAyMTcsIDIzLCAyNTMsIDE4MCwgMSwgMjE2LCAxOTYsIDI1MywgCisgICAgMTgwLCAxLCAyNDgsIDk4LCAyNTMsIDE4MCwgMSwgMjQ4LCAyNSwgMjUzLCAxODAsIDEsIDIxNSwgMTUyLCAyNTMsIDE4MCwgCisgICAgMSwgMjI1LCAyMjQsIDI1MywgMTgwLCAxLCAyNDQsIDE2MiwgMjUzLCAxODAsIDEsIDI1MiwgODMsIDI1MywgMTgwLCAxLCAKKyAgICAyNTIsIDIyLCAyNTMsIDE4MCwgMSwgMjI5LCA2OSwgMjUzLCAxODAsIDEsIDIyOCwgMjQ0LCAyNTMsIDE4MCwgMSwgMjI4LCAKKyAgICAyNDUsIDI1MywgMTgwLCAxLCAyMjksIDExMiwgMjUzLCAxODAsIDEsIDIyNywgMTYwLCAyNTMsIDE4MCwgMSwgMjI4LCAxMTAsIAorICAgIDI1MywgMTgwLCAxLCAyMzEsIDk2LCAyNTMsIDE4MCwgMSwgMjQxLCAxMjMsIDI1MywgMTgwLCAxLCAyMTAsIDE2NiwgMjUzLCAKKyAgICAxODAsIDEsIDIxMSwgNDcsIDI1MywgMTgwLCAxLCAyMTMsIDI1NSwgMjUzLCAxODAsIDEsIDIyMywgMTMxLCAyNTMsIDE4MCwgCisgICAgMSwgMjMzLCA2NCwgMjUzLCAxODAsIDEsIDIyMSwgMTgzLCAyNTMsIDE4MCwgMSwgMjEwLCA5NCwgMjUzLCAxODAsIDEsIAorICAgIDIyMCwgNjUsIDI1MywgMTgwLCAxLCAyMTAsIDc0LCAyNTMsIDE4MCwgMSwgMjE5LCAyMDAsIDI1MywgMTgwLCAxLCAyMTgsIAorICAgIDE5NSwgMjUzLCAxODAsIDEsIDI0MSwgMjQ1LCAyNTMsIDE4MCwgMjU1LCAzMCwgNzksIDIxNiwgODAsIDExMywgMTcwLCAKKyAgICAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCA0LCAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMjMzLCA5MSwgCisgICAgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDIzMywgOTEsIDEyMywgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgCisgICAgMTQzLCAyMzMsIDkxLCAxMTMsIDIyMiwgMjM1LCAxMTUsIDEyMywgMjIyLCAyMzcsIDIyNCwgMTQzLCAyMzMsIDkxLCAxMjMsIAorICAgIDIyMiwgMjM3LCAxMTUsIDExMywgMjIyLCAyMzUsIDIyNCwgMTQzLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTQsIDE3NywgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUyLCAzMywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQyLCAyMDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDI0OCwgMTk2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDEsIDI0NSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjEyLCAzMCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQxLCAyMDIsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxNiwgMjI3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjM0LCAyMzEsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIzMywgOTksIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIzMSwgNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNywgMTk4LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjEsIDI1MSwgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUzLCAxNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNSwgMjI0LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjQsIDM3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMjMsIDcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjAsIDIyLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTcsIDM3LCAyMzUsIAorICAgIDIyNSwgMjI2LCAyLCA1NCwgMTExLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTA1LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgCisgICAgMTU4LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMjE2LCAyNDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDU0LCAyMTUsIDczLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgCisgICAgMiwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNTQsIDE3NywgMjM1LCAyMjUsIDIyNiwgNzYsIAorICAgIDEsIDI1MiwgMzMsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDIsIDIwOCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0OCwgCisgICAgMTk2LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQxLCAyNDUsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTIsIDI5LCAyMzUsIAorICAgIDIyNSwgMjI2LCA3NiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MSwgMjAyLCAyMzUsIDIyNSwgMjI2LCAKKyAgICA3NiwgMSwgMjE2LCAyMjcsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIAorICAgIDIzNCwgMjMxLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjMzLCA5OSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIzMSwgNjksIAorICAgIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjcsIDE5OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyMSwgMjUxLCAyMzUsIDIyNSwgCisgICAgMjI2LCA3NiwgMSwgMjI1LCAyMjQsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCA3NiwgCisgICAgMSwgMjIwLCAyMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxNywgMzcsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTExLCAKKyAgICAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEwNSwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxNTgsIDIzNSwgMjI1LCAyMjYsIAorICAgIDc2LCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNiwgMjQ4LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNSwgCisgICAgNzMsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNjEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNTQsIDI1MiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDc0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCA3NCwgNTUsIAorICAgIDIwMiwgMSwgMjExLCAzNywgNzYsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA3OCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgCisgICAgMjM4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzOCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NSwgMzQsIDU1LCAKKyAgICAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgMzQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI1MSwgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjU0LCAyNTEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIyNSwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCAyMjUsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0NiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyNDYsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTUsIDgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgOCwgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMjUwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMTc1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDE3NSwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjMzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzMywgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1NCwgMjQ0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDI0NCwgNTUsIDIwMiwgMSwgMjI2LCAKKyAgICAxNTMsIDIyNiwgMjM3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzNywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgCisgICAgMTg3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDE4NywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQzLCA1NSwgCisgICAgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNjksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE2NywgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMTMxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgMjQxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTM5LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNTUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTU1LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCAxMjYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTI2LCA1NSwgMjAyLCAxLCAyMTEsIAorICAgIDM3LCAyNTQsIDEyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTQ2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIAorICAgIDI0MCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTE2LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNzksIDU1LCAKKyAgICAyMDIsIDEsIDIyNiwgMTUzLCAyNDAsIDEyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMjIzLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNDUsIDIyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMzUsIDE4OCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjM1LCAxODgsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE2MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAxNjMsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgCisgICAgMjU0LCAyMzksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDI0NSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM3LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAyMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMjM5LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIAorICAgIDI1MywgMjE0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDIxNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM0LCAKKyAgICA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTQ0LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjUyLCAxMzMsIDIyMiwgMTI5LCAyMSwgMTExLCAyMjIsIDEyOSwgMjEsIDEwNSwgMjIyLCAxMjksIAorICAgIDIxLCAxNTgsIDIyMiwgMTI5LCAyMSwgMTYxLCAyMjIsIDEyOSwgMjEsIDE5MCwgMjIyLCAxMjksIDIxLCAxOTUsIDIyMiwgCisgICAgMTI5LCAyMSwgMTk5LCAyMjIsIDEyOSwgMjEsIDE5NiwgMjIyLCAxMjksIDIxLCAyMDEsIDIyMiwgMTI5LCA1NCwgMjE2LCAKKyAgICAyNDgsIDIyMiwgMTI5LCA1NCwgMjE1LCA3MywgMjIyLCAxMjksIDU0LCAyMTYsIDE2MywgMjIyLCAxMjksIDU0LCAyNDQsIAorICAgIDIzLCAyMjIsIDEyOSwgNTQsIDI0NCwgMTIyLCAyMjIsIDEyOSwgNTQsIDIxOSwgMTEzLCAyMjIsIDEyOSwgNTQsIDIyMCwgCisgICAgMTE4LCAyMjIsIDEyOSwgNTQsIDI0NSwgMTkyLCAyMjIsIDEyOSwgNTQsIDIyOCwgMjAwLCAyMjIsIDEyOSwgNTQsIDEyMywgCisgICAgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMTEzLCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAxMzQsIDI0MCwgMjE3LCAyMjIsIAorICAgIDEyOSwgNTQsIDI0NCwgMTksIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDI0NCwgODksIDI0MCwgMjE3LCAyMjIsIDEyOSwgCisgICAgNTQsIDIxOSwgMTI3LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyMjAsIDEyNCwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgCisgICAgMjQ1LCAyMDEsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDIyOCwgMjA1LCAyNDAsIDIxNywgMjIyLCAxMjksIDI0NCwgMTAsIAorICAgIDEyMywgMjQyLCAzNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgCisgICAgMjE2LCAxNjksIDIyMiwgMTI5LCAyNDQsIDEwLCAxMTMsIDIxNiwgMTY3LCAxMTgsIDUsIDI1MSwgNywgMTE4LCA1LCAyNTQsIAorICAgIDgzLCAxMTgsIDUsIDIxMywgMTQ3LCAxMTgsIDUsIDIzNSwgMTA4LCAxMTgsIDUsIDIxNCwgMTYxLCAxMTgsIDEsIDYxLCAKKyAgICAxMTgsIDEsIDI1NSwgODIsIDExOCwgMSwgNzQsIDExOCwgMSwgMjM2LCA0MCwgMTE4LCAxLCA2OSwgMTE4LCAxLCAyMTQsIAorICAgIDExOCwgMTE4LCAxLCAxNDksIDE1MywgMTE4LCAxLCAxNDksIDIyMiwgMTgyLCAxMTgsIDEsIDE0OSwgMTU2LCAxMTgsIDEsIAorICAgIDE0OSwgMjMyLCAxOTEsIDExOCwgMSwgNzYsIDExOCwgMSwgMjU0LCAyMTAsIDExOCwgMSwgNzgsIDExOCwgMSwgMjUzLCAKKyAgICAyMDAsIDExOCwgMSwgMTc2LCAxMTgsIDEsIDIzNCwgMTM4LCAxMTgsIDEsIDI0MywgMTQyLCAxMTgsIDEsIDI0MywgMCwgCisgICAgMTE4LCAxLCAyMjksIDgyLCAxMTgsIDEsIDI1MSwgNDEsIDExOCwgMSwgMjUwLCAxNjUsIDExOCwgMSwgMjM1LCAxNDcsIAorICAgIDExOCwgMSwgMjM1LCAxMjAsIDExOCwgMSwgMjI3LCAxNjksIDExOCwgMSwgMjE1LCAxNTcsIDExOCwgMSwgMjE1LCAxNDUsIAorICAgIDExOCwgMSwgMjQ4LCAxNDMsIDExOCwgMSwgMjQ4LCAxMjcsIDExOCwgMSwgMjI4LCAxMTUsIDExOCwgMSwgMjE3LCAxMDYsIAorICAgIDExOCwgMSwgMjE2LCAyMDksIDExOCwgMSwgMjQ4LCAyMjksIDExOCwgMSwgMjQ4LCAzMywgMTE4LCAxLCAxOTgsIDExOCwgMSwgCisgICAgMTkxLCAxMTgsIDEsIDIyNSwgMTUwLCAxMTgsIDEsIDI1MiwgMTk5LCAxMTgsIDEsIDI1MiwgMjYsIDExOCwgMSwgMTg2LCAKKyAgICAxMTgsIDEsIDE5MiwgMTE4LCAxLCAyMDUsIDExOCwgMSwgMjMzLCAxNDEsIDExOCwgMSwgMjE0LCAyNywgMTE4LCAxLCAyMjAsIAorICAgIDEwNCwgMTE4LCAxLCAyMTgsIDIyNSwgMTE4LCAxLCAyMDYsIDExOCwgMSwgMTYyLCAxMTgsIDEsIDIzMiwgMTkwLCAxMTgsIAorICAgIDEsIDU1LCAzNiwgMjMyLCAxODEsIDExOCwgMSwgNTUsIDM2LCAyMjIsIDE4MSwgMTE4LCAxLCA1NSwgMzYsIDIyOCwgOTcsIAorICAgIDExOCwgMjUsIDUsIDI1NSwgODIsIDExOCwgMjUsIDUsIDI1MiwgMjMsIDI1NSwgODIsIDExOCwgMjUsIDUsIDc0LCAxMTgsIAorICAgIDI1LCA1LCAyMzYsIDQwLCAxMTgsIDI1LCA1LCA2OSwgMTE4LCAyNSwgNSwgMjE0LCAxMTgsIDExOCwgMjUsIDUsIDE0OSwgCisgICAgMTUzLCAxMTgsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMTgsIDI1LCA1LCAxNDksIDE1NiwgMTE4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1NCwgMjEwLCAxMTgsIDI1LCA1LCA3OCwgMTE4LCAyNSwgCisgICAgNSwgMjUzLCAyMDAsIDExOCwgMjEzLCAxNTIsIDExOCwgMjQ4LCAxODYsIDExOCwgNTIsIDI0OCwgMTg2LCAxMTgsIDIyNCwgCisgICAgMTQ0LCAyNDcsIDEyOCwgMTE4LCAyMjQsIDE0NCwgNTIsIDI0NywgMTI4LCAxMTgsIDIyNCwgMTQ0LCAyMzIsIDIxOSwgMTE4LCAKKyAgICAyMjQsIDE0NCwgMjQ5LCAxNDUsIDEzMCwgMTE4LCAyMjQsIDE0NCwgMjMyLCAxMjEsIDExOCwgNTQsIDExMSwgMTE4LCA1NCwgCisgICAgMTA1LCAxMTgsIDU0LCAxNTgsIDExOCwgNTQsIDE2MSwgMTE4LCA1NCwgMTkwLCAxMTgsIDU0LCAxOTUsIDExOCwgNTQsIAorICAgIDE5OSwgMTE4LCA1NCwgMTk2LCAxMTgsIDU0LCAyMDEsIDExOCwgNTQsIDIxNiwgMjQ4LCAxMTgsIDU0LCAyMTUsIDczLCAKKyAgICAxMTgsIDU0LCAyMTYsIDE2MywgMTE4LCA1NCwgMjQ0LCAyMywgMTE4LCA1NCwgMjQ0LCAxMjIsIDExOCwgNTQsIDIxOSwgCisgICAgMTEzLCAxMTgsIDU0LCAyMjAsIDExOCwgMTE4LCA1NCwgMjQ1LCAxOTIsIDExOCwgNTQsIDIyOCwgMjAwLCAxMTgsIDU0LCAKKyAgICAxMjMsIDI0MCwgMjE3LCAxMTgsIDU0LCAxMjMsIDIxNiwgMTQ4LCAxMTgsIDIxLCAyMTAsIDg2LCAxMTgsIDIxLCAxMTEsIAorICAgIDExOCwgMjEsIDEwNSwgMTE4LCAyMSwgMTU4LCAxMTgsIDIxLCAxNjEsIDExOCwgMjEsIDE5MCwgMTE4LCAyMSwgMTk1LCAKKyAgICAxMTgsIDIxLCAxOTksIDExOCwgMjEsIDE5NiwgMTE4LCAyMSwgMjAxLCAyMzQsIDI1MCwgNSwgMjUxLCA3LCAyMzQsIDI1MCwgCisgICAgNSwgMjU0LCA4MywgMjM0LCAyNTAsIDUsIDIxMywgMTQ3LCAyMzQsIDI1MCwgMSwgNjEsIDIzNCwgMjUwLCAxLCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMSwgNzQsIDIzNCwgMjUwLCAxLCAyMzYsIDQwLCAyMzQsIDI1MCwgMSwgNjksIDIzNCwgMjUwLCAxLCAyMTQsIAorICAgIDExOCwgMjM0LCAyNTAsIDEsIDc2LCAyMzQsIDI1MCwgMSwgMjU0LCAyMTAsIDIzNCwgMjUwLCAxLCA3OCwgMjM0LCAyNTAsIAorICAgIDEsIDI1MywgMjAwLCAyMzQsIDI1MCwgMSwgMTc2LCAyMzQsIDI1MCwgMSwgMjM0LCAxMzgsIDIzNCwgMjUwLCAxLCAyNDMsIAorICAgIDE0MiwgMjM0LCAyNTAsIDEsIDI0MywgMCwgMjM0LCAyNTAsIDEsIDIyOSwgODIsIDIzNCwgMjUwLCAxLCAyNTEsIDQxLCAKKyAgICAyMzQsIDI1MCwgMSwgMjUwLCAxNjUsIDIzNCwgMjUwLCAxLCAyMzUsIDE0NywgMjM0LCAyNTAsIDEsIDIzNSwgMTIwLCAyMzQsIAorICAgIDI1MCwgMSwgMjI3LCAxNjksIDIzNCwgMjUwLCAxLCAyMTUsIDE1NywgMjM0LCAyNTAsIDEsIDIxNSwgMTQ1LCAyMzQsIDI1MCwgCisgICAgMSwgMjQ4LCAxNDMsIDIzNCwgMjUwLCAxLCAyNDgsIDEzMiwgMjM0LCAyNTAsIDEsIDI0OCwgMTI3LCAyMzQsIDI1MCwgMSwgCisgICAgMjIzLCA0MiwgMjM0LCAyNTAsIDEsIDIyOCwgMTE1LCAyMzQsIDI1MCwgMSwgMjE3LCAxMDYsIDIzNCwgMjUwLCAxLCAyMTYsIAorICAgIDIwOSwgMjM0LCAyNTAsIDEsIDI0OCwgMjI5LCAyMzQsIDI1MCwgMSwgMjQ4LCAzMywgMjM0LCAyNTAsIDEsIDE5OCwgMjM0LCAKKyAgICAyNTAsIDEsIDE5MSwgMjM0LCAyNTAsIDEsIDIyNSwgMTUwLCAyMzQsIDI1MCwgMSwgMjUyLCAxOTksIDIzNCwgMjUwLCAxLCAKKyAgICAyNTIsIDI2LCAyMzQsIDI1MCwgMSwgMTg2LCAyMzQsIDI1MCwgMSwgMTkyLCAyMzQsIDI1MCwgMSwgMjA1LCAyMzQsIDI1MCwgCisgICAgMSwgMjMzLCAxNDEsIDIzNCwgMjUwLCAxLCAyMTQsIDI3LCAyMzQsIDI1MCwgMSwgMjIwLCAxMDQsIDIzNCwgMjUwLCAxLCAKKyAgICAyMTgsIDIyNSwgMjM0LCAyNTAsIDEsIDIwNiwgMjM0LCAyNTAsIDEsIDE2MiwgMjM0LCAyNTAsIDI1LCA1LCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMjUsIDUsIDc0LCAyMzQsIDI1MCwgMjUsIDUsIDIzNiwgNDAsIDIzNCwgMjUwLCAyNSwgNSwgNjksIDIzNCwgCisgICAgMjUwLCAyNSwgNSwgMjE0LCAxMTgsIDIzNCwgMjUwLCAyNSwgNSwgNzYsIDIzNCwgMjUwLCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIzNCwgMjUwLCAyNSwgNSwgNzgsIDIzNCwgMjUwLCAyNSwgNSwgMjUzLCAyMDAsIDIzNCwgMjUwLCA1LCAyMTMsIDE1MiwgCisgICAgMjM0LCAyNTAsIDUsIDIyNywgMjA5LCAyMzQsIDI1MCwgMjU1LCAzMCwgNTAsIDIzNCwgMjUwLCAyNDUsIDEyOSwgNTAsIAorICAgIDIzNCwgMjUwLCA1NCwgNTAsIDIzNCwgMjUwLCAyMjEsIDE3NSwgNzksIDIzNCwgMjUwLCA1MiwgMjIxLCAxNzUsIDc5LCAKKyAgICAyMzQsIDI1MCwgMjQ4LCAxODYsIDIzNCwgMjUwLCA1MiwgMjQ4LCAxODYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMiwgMjAsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNywgODEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI1MiwgMTc2LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyNTEsIDMxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDgsIDIxMSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQzLCAxMjcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzMSwgMjE1LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjksIDc5LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzMsIDExOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI5LCAyMTgsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIxNCwgMjQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyNiwgNzcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDIxMSwgODQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMywgMTcxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDIsIDQ0LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzQsIDI1NCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM1LCAxNDIsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIyNywgMTY2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNTQsIDIxOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQ1LCAyMTUsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNiwgNDEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNCwgMjA4LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjYsIDIyNiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQ1LCAyMDUsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIzMSwgMjI4LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMjEwLCA4NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDExMSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDEwNSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE1OCwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMjEsIDE2MSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5MCwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NSwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5OSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDIwMSwgMjUwLCAxNTksIDUsIDI1MSwgNywgMjUwLCAxNTksIDUsIDI1NCwgODMsIDI1MCwgMTU5LCA1LCAyMTMsIAorICAgIDE0NywgMjUwLCAxNTksIDEsIDI1NSwgODIsIDI1MCwgMTU5LCAxLCA3NCwgMjUwLCAxNTksIDEsIDY5LCAyNTAsIDE1OSwgMSwgCisgICAgNzYsIDI1MCwgMTU5LCAxLCAyMzUsIDE2LCAyNTAsIDE1OSwgMSwgMjM0LCAxMzcsIDI1MCwgMTU5LCAxLCAyNDMsIDEzOSwgCisgICAgMjUwLCAxNTksIDEsIDI0MiwgMjU1LCAyNTAsIDE1OSwgMSwgMjI5LCA4MSwgMjUwLCAxNTksIDEsIDI1MSwgNDAsIDI1MCwgCisgICAgMTU5LCAxLCAyNTAsIDE2NCwgMjUwLCAxNTksIDEsIDIzNSwgMTQ2LCAyNTAsIDE1OSwgMSwgMjM1LCAxMTksIDI1MCwgMTU5LCAKKyAgICAxLCAyMjcsIDE2OCwgMjUwLCAxNTksIDEsIDIxNSwgMTU2LCAyNTAsIDE1OSwgMSwgMjE1LCAxNDQsIDI1MCwgMTU5LCAxLCAKKyAgICAyNDgsIDE0MiwgMjUwLCAxNTksIDEsIDI0OCwgMTI2LCAyNTAsIDE1OSwgMSwgMjI4LCAxMTQsIDI1MCwgMTU5LCAxLCAyMTcsIAorICAgIDEwMiwgMjUwLCAxNTksIDEsIDIxNiwgMjA4LCAyNTAsIDE1OSwgMSwgMjQ4LCAyMjgsIDI1MCwgMTU5LCAxLCAyNDgsIDMyLCAKKyAgICAyNTAsIDE1OSwgMSwgMjI5LCAyMzAsIDI1MCwgMTU5LCAxLCAyMjYsIDkzLCAyNTAsIDE1OSwgMSwgMjI1LCAxNDksIDI1MCwgCisgICAgMTU5LCAxLCAyNTIsIDE5NywgMjUwLCAxNTksIDEsIDI1MiwgMjUsIDI1MCwgMTU5LCAxLCAyMzEsIDI0MiwgMjUwLCAxNTksIAorICAgIDEsIDIxMCwgMTY3LCAyNTAsIDE1OSwgMSwgMjExLCAxMDMsIDI1MCwgMTU5LCAxLCAyMjMsIDE4NywgMjUwLCAxNTksIDEsIAorICAgIDIzMywgMTQwLCAyNTAsIDE1OSwgMSwgMjEyLCA2NCwgMjUwLCAxNTksIDEsIDIyMiwgMzMsIDI1MCwgMTU5LCAxLCAyNDIsIAorICAgIDUzLCAyNTAsIDE1OSwgMjUsIDUsIDYxLCAyNTAsIDE1OSwgMjUsIDUsIDc0LCAyNTAsIDE1OSwgMjUsIDUsIDIzNiwgNDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgNjksIDI1MCwgMTU5LCAyNSwgNSwgMjE0LCAxMTgsIDI1MCwgMTU5LCAyNSwgNSwgNzYsIDI1MCwgCisgICAgMTU5LCAyNSwgNSwgMjU0LCAyMTAsIDI1MCwgMTU5LCAyNSwgNSwgNzgsIDI1MCwgMTU5LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgMjI2LCAyMjMsIDI1MCwgMTU5LCAxNDQsIDc5LCAyNTAsIDE1OSwgMjUzLCAyMDEsIDc5LCAKKyAgICAyNTAsIDE1OSwgMjEzLCAxNTIsIDI1MCwgMTU5LCAyMzEsIDI0MCwgMjUwLCAxNTksIDIxLCAyMTAsIDg2LCAyNTAsIDE1OSwgCisgICAgMjEsIDExMSwgMjUwLCAxNTksIDIxLCAxMDUsIDI1MCwgMTU5LCAyMSwgMTU4LCAyNTAsIDE1OSwgMjEsIDE2MSwgMjUwLCAKKyAgICAxNTksIDIxLCAxOTAsIDI1MCwgMTU5LCAyMSwgMTk1LCAyNTAsIDE1OSwgMjEsIDE5OSwgMjUwLCAxNTksIDIxLCAxOTYsIAorICAgIDI1MCwgMTU5LCAyMSwgMjAxLCAyNTAsIDE1OSwgMjIxLCAxNzUsIDc5LCAyNTAsIDE1OSwgMjQ4LCAxODYsIDI1MCwgMTU5LCAKKyAgICA1MiwgMjQ4LCAxODYsIDI1MCwgMTU5LCAyMjQsIDE2LCA3OSwgMTc0LCA1LCAyNTEsIDcsIDE3NCwgNSwgMjU0LCA4MywgCisgICAgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgMTc0LCAxLCAyNTUsIDgyLCAxNzQsIDEsIDc0LCAxNzQsIDEsIDIzNiwgCisgICAgNDAsIDE3NCwgMSwgNjksIDE3NCwgMSwgMjE0LCAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIAorICAgIDE4MiwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAxNDksIDIzMiwgMTkxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1NCwgCisgICAgMjEwLCAxNzQsIDEsIDc4LCAxNzQsIDEsIDI1MywgMjAwLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzOCwgMTc0LCAxLCAKKyAgICAyNDMsIDE0MiwgMTc0LCAxLCAyNDMsIDAsIDE3NCwgMSwgMjI5LCA4MiwgMTc0LCAxLCAyNTEsIDQxLCAxNzQsIDEsIDI1MCwgCisgICAgMTY1LCAxNzQsIDEsIDIzNSwgMTQ3LCAxNzQsIDEsIDIzNSwgMTIwLCAxNzQsIDEsIDIyNywgMTY5LCAxNzQsIDEsIDIxNSwgCisgICAgMTU3LCAxNzQsIDEsIDIxNSwgMTQ1LCAxNzQsIDEsIDI0OCwgMTQzLCAxNzQsIDEsIDI0OCwgMTI3LCAxNzQsIDEsIDIyOCwgCisgICAgMTE1LCAxNzQsIDEsIDIxNywgMTA2LCAxNzQsIDEsIDIxNiwgMjA5LCAxNzQsIDEsIDI0OCwgMjI5LCAxNzQsIDEsIDI0OCwgCisgICAgMzMsIDE3NCwgMSwgMTk4LCAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMjUsIDE1MCwgMTc0LCAxLCAyNTIsIDE5OSwgMTc0LCAxLCAKKyAgICAyNTIsIDI2LCAxNzQsIDEsIDE4NiwgMTc0LCAxLCAxOTIsIDE3NCwgMSwgMjA1LCAxNzQsIDEsIDIzMywgMTQxLCAxNzQsIDEsIAorICAgIDIzMiwgMTkwLCAxNzQsIDEsIDIxNCwgMjcsIDE3NCwgMSwgMjIwLCAxMDQsIDE3NCwgMSwgMjE4LCAyMjUsIDE3NCwgMSwgCisgICAgMjA2LCAxNzQsIDEsIDE2MiwgMTc0LCAyNSwgNSwgMjU1LCA4MiwgMTc0LCAyNSwgNSwgNzQsIDE3NCwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE3NCwgMjUsIDUsIDY5LCAxNzQsIDI1LCA1LCAyMTQsIDExOCwgMTc0LCAyNSwgNSwgMTQ5LCAxNTMsIDE3NCwgMjUsIAorICAgIDUsIDE0OSwgMjIyLCAxODIsIDE3NCwgMjUsIDUsIDE0OSwgMTU2LCAxNzQsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzQsIAorICAgIDI1LCA1LCA3NiwgMTc0LCAyNSwgNSwgMjU0LCAyMTAsIDE3NCwgMjUsIDUsIDc4LCAxNzQsIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMTc0LCA1LCAyMTMsIDE1MiwgMTc0LCA1LCAyNTMsIDE4MywgMTc0LCA1LCAyMzUsIDEwOCwgMTc0LCA1LCAyMTQsIDE2MSwgCisgICAgMTc0LCAyMjYsIDIwOCwgMTc0LCAyNDgsIDE4NiwgMTc0LCA1MiwgMjQ4LCAxODYsIDE3NCwgMjU1LCAzMCwgNTAsIDE3NCwgCisgICAgMjIwLCAxMzksIDE3NCwgMjEsIDIxMCwgODYsIDE3NCwgMjEsIDExMSwgMTc0LCAyMSwgMTA1LCAxNzQsIDIxLCAxNTgsIAorICAgIDE3NCwgMjEsIDE2MSwgMTc0LCAyMSwgMTkwLCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDE5OSwgMTc0LCAyMSwgMTk2LCAKKyAgICAxNzQsIDIxLCAyMDEsIDIxNywgNzAsIDEsIDYxLCAyMTcsIDcwLCAxLCAyNTUsIDgyLCAyMTcsIDcwLCAxLCA3NCwgMjE3LCAKKyAgICA3MCwgMSwgMjM2LCA0MCwgMjE3LCA3MCwgMSwgNjksIDIxNywgNzAsIDEsIDIxNCwgMTE4LCAyMTcsIDcwLCAxLCA3NiwgCisgICAgMjE3LCA3MCwgMSwgMjU0LCAyMTAsIDIxNywgNzAsIDEsIDc4LCAyMTcsIDcwLCAxLCAyNTMsIDIwMCwgMjE3LCA3MCwgMSwgCisgICAgMTc2LCAyMTcsIDcwLCAxLCAyMzQsIDEzOCwgMjE3LCA3MCwgMSwgMjQzLCAxNDIsIDIxNywgNzAsIDEsIDI0MywgMCwgMjE3LCAKKyAgICA3MCwgMSwgMjI5LCA4MiwgMjE3LCA3MCwgMSwgMjUxLCA0MSwgMjE3LCA3MCwgMSwgMjUwLCAxNjUsIDIxNywgNzAsIDEsIAorICAgIDIzNSwgMTQ3LCAyMTcsIDcwLCAxLCAyMzUsIDEyMCwgMjE3LCA3MCwgMSwgMjI3LCAxNjksIDIxNywgNzAsIDEsIDIxNSwgCisgICAgMTU3LCAyMTcsIDcwLCAxLCAyMTUsIDE0NSwgMjE3LCA3MCwgMSwgMjQ4LCAxNDMsIDIxNywgNzAsIDEsIDI0OCwgMTI3LCAKKyAgICAyMTcsIDcwLCAxLCAyMjgsIDExNSwgMjE3LCA3MCwgMSwgMjE3LCAxMDYsIDIxNywgNzAsIDEsIDIxNiwgMjA5LCAyMTcsIAorICAgIDcwLCAxLCAyNDgsIDIyOSwgMjE3LCA3MCwgMSwgMjQ4LCAzMywgMjE3LCA3MCwgMSwgMTk4LCAyMTcsIDcwLCAxLCAxOTEsIAorICAgIDIxNywgNzAsIDEsIDIyNSwgMTUwLCAyMTcsIDcwLCAxLCAyNTIsIDE5OSwgMjE3LCA3MCwgMSwgMjUyLCAyNiwgMjE3LCA3MCwgCisgICAgMSwgMTg2LCAyMTcsIDcwLCAxLCAxOTIsIDIxNywgNzAsIDEsIDIwNSwgMjE3LCA3MCwgMSwgMjMzLCAxNDEsIDIxNywgNzAsIAorICAgIDEsIDIxNCwgMjcsIDIxNywgNzAsIDEsIDIyMCwgMTA0LCAyMTcsIDcwLCAxLCAyMDYsIDIxNywgNzAsIDEsIDE2MiwgMjE3LCAKKyAgICA3MCwgMSwgMjIyLCAxODEsIDIxNywgNzAsIDUsIDI1NCwgODMsIDIxNywgNzAsIDUsIDIxMywgMTQ3LCAyMTcsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA4MiwgMjE3LCA3MCwgMjUsIDUsIDc0LCAyMTcsIDcwLCAyNSwgNSwgMjM2LCA0MCwgMjE3LCA3MCwgMjUsIDUsIAorICAgIDY5LCAyMTcsIDcwLCAyNSwgNSwgMjE0LCAxMTgsIDIxNywgNzAsIDI1LCA1LCA3NiwgMjE3LCA3MCwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCAyMTcsIDcwLCAyNSwgNSwgNzgsIDIxNywgNzAsIDI1LCA1LCAyNTMsIDIwMCwgMjE3LCA3MCwgNSwgMjEzLCAxNTIsIAorICAgIDIxNywgNzAsIDUsIDIyNywgMjA5LCAyMTcsIDcwLCAyMSwgMjEwLCA4NiwgMjE3LCA3MCwgMjEsIDExMSwgMjE3LCA3MCwgCisgICAgMjEsIDEwNSwgMjE3LCA3MCwgMjEsIDE1OCwgMjE3LCA3MCwgMjEsIDE2MSwgMjE3LCA3MCwgMjEsIDE5MCwgMjE3LCA3MCwgCisgICAgMjEsIDE5NSwgMjE3LCA3MCwgMjEsIDE5OSwgMjE3LCA3MCwgMjEsIDE5NiwgMjE3LCA3MCwgMjEsIDIwMSwgMTUsIDUsIDYxLCAKKyAgICAxNSwgNSwgMTE2LCAzMCwgNjEsIDE1LCA1LCAxMTYsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDExNiwgMzAsIDI0MywgMTEyLCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDExNiwgMzAsIDE2MiwgMTUsIDUsIDExNiwgMzAsIDIzNiwgNDIsIDE1LCA1LCAxMTYsIDMwLCAKKyAgICAyMzMsIDEyMiwgMjQyLCAxMDEsIDE1LCA1LCAxMTYsIDMwLCAyMzAsIDY2LCAxNSwgNSwgMTE2LCAzMCwgMjIyLCAyMywgMTUsIAorICAgIDUsIDI1NSwgODQsIDE1LCA1LCAyNTUsIDM0LCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjU1LCAzNSwgCisgICAgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgMjU1LCAzNSwgMzAsIAorICAgIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAxNjIsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCA0MywgCisgICAgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzMsIDEyMywgMTUsIAorICAgIDUsIDI1NSwgMzUsIDMwLCAyMjAsIDUwLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDY5LCAxNSwgNSwgCisgICAgMjU1LCAzNSwgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDMyLCAxNSwgNSwgMjU1LCAzMywgMzAsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMjU1LCAzMywgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAKKyAgICAxNTgsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjIwLCAxMDIsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI1NSwgOCwgMTUsIDUsIDI1NCwgMTk1LCAxNSwgNSwgMjU0LCAxOTYsIDMwLCAyNDUsIDk1LCAxNSwgNSwgMjU0LCAxOTYsIAorICAgIDMwLCAyMjAsIDEyLCA5NiwgMjQyLCAxOTcsIDE1LCA1LCAyNTQsIDE4NywgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI0NywgMjI0LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNDIsIDE5NywgMTUsIDUsIAorICAgIDI1NCwgMTg4LCAzMCwgMTYyLCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMzUsIDUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIzNCwgCisgICAgOTgsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgCisgICAgMjU0LCAxODQsIDE1LCA1LCAyNTQsIDE3NywgMTUsIDUsIDI1NCwgMTQwLCAxNSwgNSwgMjU0LCAxNDEsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjU0LCAxMzEsIDE1LCA1LCAyNTQsIDEzMiwgMTE1LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMzQsIAorICAgIDIxNiwgODYsIDE1LCA1LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIyLCAyMjYsIDE2OCwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMSwgCisgICAgMTUsIDUsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjIsIDIxOCwgMjM1LCAxNSwgNSwgMjU0LCAxMDIsIDE1LCA1LCAyNTQsIDc1LCAKKyAgICAxNSwgNSwgMjU0LCA0MywgMTUsIDUsIDI1NCwgNDQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDI1NCwgMTYsIDE1LCA1LCAyNTMsIAorICAgIDI0NCwgMTUsIDUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyNDAsIDIxMCwgNDAsIDIxNiwgMjQwLCAxNSwgNSwgMjUzLCAKKyAgICAyNDAsIDIzNSwgOSwgMjE2LCAyNDAsIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjE1LCAxMTUsIDExNSwgCisgICAgMjE1LCAxMTUsIDIxNSwgMTE1LCAxMTUsIDIxNSwgMTE1LCAyMjYsIDI1LCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAKKyAgICAyNDAsIDExNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjQ5LCAKKyAgICAxMzMsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyMzcsIDE1LCA1LCAyNTMsIAorICAgIDIzNCwgMTUsIDUsIDI1MiwgMTk5LCAxNSwgNSwgMjUyLCAxODQsIDE1LCA1LCAyNTIsIDE3OSwgMTUsIDUsIDI1MiwgMTc1LCAKKyAgICAxNSwgNSwgMjUyLCAxNjksIDE1LCA1LCAyNTIsIDE3MCwgMTE1LCAyNTIsIDE2OSwgMTUsIDUsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMTMwLCAxNSwgNSwgMjUyLCAxNDgsIDE1LCA1LCAyNTIsIDE0LCAxNSwgNSwgMjUyLCAxNSwgMzAsIDYxLCAxNSwgNSwgMjUyLCAKKyAgICAxNSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjUyLCAxNSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjUxLCAxMzMsIAorICAgIDE1LCA1LCAyNTEsIDEzNCwgMTE1LCAyNTEsIDEzNCwgMjU1LCAzNCwgMTUsIDUsIDI1MSwgMTM0LCAxMTUsIDI1MSwgMTM0LCAKKyAgICAyMTQsIDE5MCwgMTUsIDUsIDI1MSwgMTM0LCAyNDksIDEzMywgMjUxLCAxMzMsIDE1LCA1LCAyNTEsIDExNywgMTUsIDUsIAorICAgIDI1MSwgMTE4LCAxMTUsIDI1MSwgMTE3LCAxNSwgNSwgMjUxLCAxMDYsIDE1LCA1LCAyNTEsIDEwNSwgMTUsIDUsIDI0OCwgCisgICAgMjI5LCAxNSwgNSwgMjQ4LCAyMjAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDExNiwgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNTQsIDE0MCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjUyLCAxNjgsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCAKKyAgICA3MiwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDMsIDE0MywgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDIsIDIyMSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjQyLCAyMDQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MiwgMTEwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgCisgICAgNzIsIDMwLCAxNjIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzNSwgMTg2LCAxNSwgNSwgMjQ4LCAyMjEsIAorICAgIDIzNCwgNzIsIDMwLCAyMzUsIDE4NywgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzQsIAorICAgIDI0OCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgCisgICAgMzAsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDEwNCwgOTYsIDIzMSwgMTUxLCAxNSwgCisgICAgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMjksIAorICAgIDExMiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjI2LCAyNiwgOTYsIDIyNiwgMjUsIDE1LCA1LCAyNDgsIDIyMSwgCisgICAgMjM0LCA3MiwgMzAsIDIxOSwgMTkzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjQ4LCAKKyAgICAyMjEsIDIzNCwgNzIsIDMwLCAyMTQsIDIzMSwgOTYsIDI0MiwgMjA0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyMTQsIDEyNiwgMTUsIDUsIDI0OCwgMTk1LCAxNSwgNSwgMjQ4LCAxNzQsIDE1LCA1LCAyNDgsIDE3MywgMTUsIDUsIDI0OCwgCisgICAgMTcyLCAxNSwgNSwgMjQ4LCAxMSwgMTUsIDUsIDI0NywgMjUwLCAxNSwgNSwgMjQ3LCAyMjUsIDE1LCA1LCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDcsIDIyNCwgMTUsIDUsIDI0NywgMjE0LCAxNSwgNSwgMjQ3LCAyMTUsIDIzNCwgMjE0LCAKKyAgICAxMDQsIDI0MiwgMTAyLCAyNDcsIDE5NSwgMTUsIDUsIDI0NywgMTk1LCAxNSwgNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIAorICAgIDExNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA4NywgMjIwLCA0NywgMTUsIDUsIAorICAgIDI0NiwgODQsIDE1LCA1LCAyNDYsIDg1LCAzMCwgMjQ1LCA4MCwgMTUsIDUsIDI0NiwgODMsIDE1LCA1LCAyNDYsIDgyLCAxNSwgCisgICAgNSwgMjQ2LCA4MSwgMTUsIDUsIDI0NiwgODAsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgCisgICAgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3NSwgMjQyLCAxMDIsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3MywgMTUsIDUsIAorICAgIDI0NiwgNjYsIDE1LCA1LCA3NiwgMTUsIDUsIDE2MCwgMzAsIDIyNiwgMjUsIDE1LCA1LCAxNjAsIDExNSwgMTYwLCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDI0NSwgMjQyLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAxMTYsIDk2LCAyNDIsIAorICAgIDU2LCA5NiwgMjQ4LCAyMjksIDE1LCA1LCAyNDUsIDI0MywgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAKKyAgICAyMzAsIDIzNSwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIwLCA2NSwgMTUsIAorICAgIDUsIDI0NSwgMjQzLCAzMCwgNjksIDE1LCA1LCAyNDUsIDIxOSwgMTUsIDUsIDI0NSwgMjA4LCAxNSwgNSwgMjQ1LCAxODIsIAorICAgIDE1LCA1LCAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjQzLCAxMTEsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDI0MywgCisgICAgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjMxLCA5NiwgMTUsIDUsIDI0NSwgMTU5LCAyNDksIDEzMywgCisgICAgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMjI2LCAxNjgsIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDIxOCwgMjM1LCAKKyAgICAxNSwgNSwgMjQ1LCA5NywgMTUsIDUsIDI0NSwgOTUsIDE1LCA1LCAyNDUsIDgwLCAxNSwgNSwgMjQ1LCAxOCwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCA2MSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxMTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIAorICAgIDMwLCAxMTYsIDk2LCAyMzMsIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAKKyAgICAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAyLCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxNjIsIDE1LCA1LCAyNDUsIAorICAgIDE5LCAzMCwgMjQyLCA1NiwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM0LCAyMTQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDIzMywgMjIxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIAorICAgIDIzMywgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjMyLCAyNDcsIDE1LCA1LCAyNDUsIDE5LCAzMCwgCisgICAgMjMyLCAxMDMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyNDMsIDE0MiwgMTUsIDUsIDI0MywgMTQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQwLCAxNSwgNSwgMjQzLCAxNDEsIAorICAgIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTE2LCA5NiwgMTYyLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAxMTYsIDk2LCAyMzYsIDQyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTUsIDMzLCAyMTYsIDI0MSwgCisgICAgOTYsIDIxNywgOTQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTMsIAorICAgIDIzOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUzLCAyMzgsIDk2LCAyNDMsIDEyNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MiwgMTQ5LCA5NiwgMjA1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNTEsIDEwNiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUxLCAxMDcsIDk2LCAyMDUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI0OCwgMjI5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDgsIDExLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NiwgODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTgyLCAKKyAgICAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE4MywgOTYsIDIzMywgMTQxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIAorICAgIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxNTksIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MiwgMjIxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjQyLCAyMjAsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAyMDUsIDk2LCAyMTgsIDg0LCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDIsIDU2LCA5NiwgMjMyLCAxMDQsIDk2LCAyNDUsIDgwLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIAorICAgIDM3LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDM4LCA5NiwgMjMzLCAxNDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MSwgCisgICAgMTg4LCA5NiwgMjMyLCAyNDcsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MCwgMjI1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM1LCAxNzMsIDk2LCAyNDAsIDIzMCwgOTYsIDI1MywgCisgICAgMjM5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIzNCwgOTUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgOTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjMzLCAyMjIsIDk2LCAyNTQsIDEzMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMzLCAxNDEsIDE1LCAKKyAgICA1LCAyNDMsIDE0MSwgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjcsIDE5OSwgMTE1LCAyMjcsIAorICAgIDE5OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTkxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyMjEsIDIzMywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDIxNSwgOTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIxOCwgNDQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIxNywgNzMsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDY5LCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjE0LCAyMjAsIDk2LCAyNDYsIDg2LCAxNSwgCisgICAgNSwgMjQzLCAxNDEsIDExNSwgMjQzLCAxNDAsIDE1LCA1LCAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTM2LCAyNDksIDEzMywgCisgICAgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIDEwNCwgMTE1LCAKKyAgICAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI1LCAxNSwgNSwgMjQzLCAxMjYsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIAorICAgIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI0LCAxNSwgNSwgMjQzLCAxMjIsIDE1LCA1LCAyNDMsIDExMywgCisgICAgMTUsIDUsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAxMTIsIDExNSwgMjQzLCAKKyAgICAxMTEsIDE1LCA1LCAyNDMsIDExMiwgMjQ5LCAxMzMsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDEwMiwgMTUsIDUsIDI0MywgOTcsIDE1LCA1LCAyNDMsIDQzLCAxNSwgNSwgMjQzLCA0NCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIyMiwgMzAsIDc2LCAxNSwgNSwgMjQyLCAyMjIsIDMwLCA2OSwgMTUsIDUsIDI0MiwgCisgICAgMjIyLCAyNDksIDEzMywgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjIwLCAxMTUsIDI0MiwgMjE5LCAKKyAgICAxNSwgNSwgMjQyLCAyMjAsIDI0OSwgMTMzLCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjE2LCAxNSwgNSwgMjQyLCAyMDQsIAorICAgIDE1LCA1LCAyNDIsIDIwNSwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDIwMiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMTE2LCA5NiwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAyMzIsIDEwNCwgOTYsIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIAorICAgIDE5MSwgMTUsIDUsIDI0MiwgMTk5LCAxNSwgNSwgMjQyLCAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgCisgICAgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDI0MiwgMTk4LCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI0MiwgMTk4LCAyMTYsIDI0MCwgMTUsIDUsIDI0MiwgMTIwLCAxNSwgNSwgMjQyLCAxMjEsIDI0OSwgMTMzLCAyNDIsIDEyMCwgCisgICAgMTUsIDUsIDI0MiwgMTE4LCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjM0LCAKKyAgICAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDIsIAorICAgIDExOSwgMzAsIDIyMiwgMTEsIDk2LCAyMTUsIDExNCwgMTUsIDUsIDI0MiwgMTE5LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgCisgICAgMTEwLCAxNSwgNSwgMjQyLCAxMTEsIDMwLCAxMTYsIDk2LCAyMzMsIDIwMiwgMTUsIDUsIDI0MiwgMTExLCAzMCwgMjMzLCAKKyAgICAyMDIsIDE1LCA1LCAyNDIsIDExMSwgMTE1LCAyNDIsIDExMSwgMjMyLCA5NiwgMTUsIDUsIDI0MiwgMTA1LCAxNSwgNSwgCisgICAgMjQyLCAxMDMsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDIsIDk1LCAxNSwgNSwgMjQyLCA5NCwgCisgICAgMTUsIDUsIDI0MiwgOTEsIDE1LCA1LCAyNDIsIDkwLCAxNSwgNSwgMTYyLCAxNSwgNSwgMjQyLCA1NiwgMjE2LCAyNDAsIDE1LCAKKyAgICA1LCAyNDIsIDU2LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMzcsIDE1LCA1LCAyNDEsIDE4NywgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjUzLCAyMzksIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjQ3LCAxOTUsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI0MywgMTMzLCAxNSwgNSwgCisgICAgMjQxLCAxODgsIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgNjksIDE1LCA1LCAyNDAsIDIyOSwgMTUsIDUsIDI0MCwgMjI1LCAKKyAgICAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjQyLCAzNywgMTUsIDUsIDI0MCwgCisgICAgMjI2LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDI0MCwgMjIyLCAxNSwgNSwgNzQsIDE1LCA1LCAyNDAsIDE2MSwgNjEsIDE1LCA1LCAyNDAsIAorICAgIDEyMiwgMTUsIDUsIDIzNiwgNzAsIDE1LCA1LCAyMzYsIDcxLCAxMTUsIDIzNiwgNzEsIDI1MSwgMTA2LCAxNSwgNSwgMjM2LCAKKyAgICA3MSwgMTE1LCAyMzYsIDcxLCAyMTgsIDIzNSwgMTUsIDUsIDIzNiwgNDUsIDE1LCA1LCAyMzYsIDQyLCAxNSwgNSwgMjM2LCAKKyAgICA0MywgMjQ3LCAyNTAsIDE1LCA1LCAyMzYsIDQzLCAyMjMsIDM4LCAxNSwgNSwgMjM2LCA0MywgMTE1LCAyMzYsIDQzLCAyMjAsIAorICAgIDE2LCAxMTUsIDIyMCwgMTYsIDIxNCwgMjIwLCAxMTUsIDIxNCwgMjE5LCAxNSwgNSwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCAKKyAgICA1LCAyMzYsIDM0LCAxNSwgNSwgMjM2LCAzNSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNiwgMzMsIDE1LCAKKyAgICA1LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMzAsIDIxNywgNzMsIDE1LCA1LCAyMzYsIDI0LCAyNDksIDEzMywgMjM2LCAKKyAgICAyMywgMTUsIDUsIDIzNiwgMjQsIDIyNiwgMTY4LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyMzYsIDE2LCAxNSwgNSwgMjM2LCA2LCAxNSwgNSwgMjM1LCAxODYsIDE1LCA1LCAyMzUsIDE3MiwgMTUsIDUsIDE3NiwgMTUsIAorICAgIDUsIDIzNSwgMTksIDMwLCA2MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTUsIDgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjU1LCAKKyAgICA5LCA5NiwgMjMzLCAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAxNjgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMTMwLCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQ1LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDUsIAorICAgIDgwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDEwMywgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyNDMsIDEwNCwgOTYsIDIyMCwgMTAzLCA5NiwgNjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAKKyAgICAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAyMDQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAxOTgsIDk2LCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxOSwgCisgICAgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgOTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM0LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIAorICAgIDI0NywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIDEwMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDYsIDg2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDIsIAorICAgIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjE3LCAyMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIAorICAgIDIzNSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIDIzNiwgOTYsIDIyNywgMTkzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyOSwgCisgICAgMTEyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMiwgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDEwNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDY1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgCisgICAgMjE5LCAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE4LCA1MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTcsIDUxLCAxNSwgCisgICAgNSwgMjM1LCAxOSwgMzAsIDY5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMTkzLCAzMCwgMTkxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgCisgICAgMTI2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDE3LCAxNSwgNSwgMjM1LCAxOCwgMjQ5LCAKKyAgICAxMzMsIDIzNSwgMTcsIDE1LCA1LCAyMzUsIDEwLCAxNSwgNSwgMjM1LCA3LCAxNSwgNSwgMjM1LCA1LCAxNSwgNSwgMjM1LCAKKyAgICA0LCAxNSwgNSwgMjM1LCAyLCAxNSwgNSwgMjM1LCAzLCAxMTUsIDIzNSwgMiwgMTUsIDUsIDIzNCwgMjQ4LCAxNSwgNSwgCisgICAgMjM0LCAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzNCwgMjQ0LCAxNSwgNSwgMjM0LCAyNDUsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIzNCwgMjQ1LCAyNDksIDEzMywgMjM0LCAyNDQsIDE1LCA1LCAyMzQsIDI0MiwgMTUsIDUsIAorICAgIDIzNCwgMjQxLCAxNSwgNSwgMjM0LCAyMTMsIDE1LCA1LCAyMzQsIDIxNCwgMjMzLCAxMjQsIDMwLCAxMDQsIDExNSwgMjMzLCAKKyAgICAxMjQsIDMwLCA2OSwgMTUsIDUsIDIzNCwgMjE0LCAxMTUsIDIzNCwgMjE0LCAyMzMsIDEyNCwgMzAsIDEwNCwgMTE1LCAyMzMsIAorICAgIDEyNCwgMzAsIDY5LCAxNSwgNSwgMjM0LCAxNjMsIDE1LCA1LCAyMzQsIDk4LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDY5LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjM0LCAKKyAgICA5NSwgMTUsIDUsIDIzNCwgODcsIDE1LCA1LCAyMzQsIDc0LCAxNSwgNSwgMjM0LCA3MywgMTUsIDUsIDIzNCwgNzEsIDE1LCAKKyAgICA1LCAyMzQsIDcyLCAxMTUsIDIzNCwgNzEsIDE1LCA1LCAyMzMsIDIyMywgMTUsIDUsIDIzMywgMjI0LCAxMTUsIDI0MSwgCisgICAgMTg4LCAzMCwgMjUzLCAyMzgsIDIzMywgMjI0LCAxMTUsIDI0MSwgMTg4LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzMsIAorICAgIDIyMSwgMTUsIDUsIDIzMywgMjE5LCAxNSwgNSwgMjMzLCAyMjAsIDIxNCwgMTIsIDE3LCAxNSwgNSwgMjMzLCAyMTgsIDE1LCAKKyAgICA1LCAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMjE2LCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgMjE0LCAxNSwgNSwgMjMzLCAyMDIsIAorICAgIDE1LCA1LCAyMzMsIDIwMywgMjI2LCAxNjgsIDIzMywgMjAyLCAxNSwgNSwgMjMzLCAxOTcsIDE1LCA1LCAyMzMsIDE3OCwgCisgICAgMTUsIDUsIDIzMywgMTQxLCAxNSwgNSwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDYxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTE2LCA5NiwgMjQzLCAKKyAgICAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDExNiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MywgMjQwLCAyMTAsIAorICAgIDQwLCAyMTYsIDI0MCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MiwgCisgICAgMTQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0OCwgMTc0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDUsIDE1OCwgMTUsIDUsIAorICAgIDIzMywgMTI0LCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyNDIsIDExMCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQyLCAxMTEsIDk2LCAyNDIsIDExMCwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDIsIDM3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDEsIAorICAgIDE4OCwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjM2LCAyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM2LCAyNCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjM2LCAyNCwgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIDIyMSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAKKyAgICAyMTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgMjE2LCA5NiwgMjQxLCAxODgsIDk2LCA2MSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAKKyAgICAyMzIsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMyLCA5MSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NiwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzAsIDY2LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjIwLCA2NiwgOTYsIDIxOCwgNDQsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgOTYsIDI0NSwgOTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIAorICAgIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgMjE2LCAyNDAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxOSwgMjI1LCAxNSwgNSwgCisgICAgMjMzLCAxMjQsIDMwLCAyMTksIDIyNiwgOTYsIDIxOSwgMjI1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTgsIDQ0LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDg1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMTcsIDI0LCA5NiwgMTE2LCA5NiwgMjE4LCA4NSwgOTYsIDE5OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA2OSwgCisgICAgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAKKyAgICAyMTksIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjMzLCAxMjQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjMzLCAxMjEsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjYsIDk2LCAKKyAgICAyMTgsIDQ0LCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAyLCAxMTUsIDIzMywgCisgICAgMTIyLCAyNDIsIDEwMiwgMjIwLCA2NSwgMTUsIDUsIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIAorICAgIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMDgsIDE1LCA1LCAyMzMsIDEwOSwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjMzLCAxMDksIDMwLCAyMzMsIDIwMywgOTYsIDIyMiwgMTQyLCAxNSwgNSwgMjMyLCAyNDcsIDE1LCA1LCAyMzIsIDIzMiwgCisgICAgMTUsIDUsIDIzMiwgMjIyLCAxNSwgNSwgMjMyLCAyMDMsIDE1LCA1LCAyMzIsIDEwMywgMTUsIDUsIDIzMiwgMTA0LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjU0LCAxODcsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNDUsIDgwLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyNDUsIDgxLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyNDEsIDE4OCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzYsIDIzLCAxNSwgNSwgCisgICAgMjMyLCAxMDIsIDMwLCAyMzUsIDcsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNSwgNSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjM1LCA2LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDIzMywgMTQyLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzMywgMTIzLCAxNSwgNSwgMjMyLCAxMDIsIAorICAgIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyMjcsIDI0MiwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE5LCAxOTQsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIzMiwgMTAyLCAzMCwgMjE5LCAxNzYsIDk2LCAyNTEsIDEzMywgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE1LCAxMTQsIDE1LCAKKyAgICA1LCAyMzIsIDEwMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIDEwMiwgMjQ5LCAxMzMsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDIyNiwgMTY4LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAyMTgsIDIzNSwgMTUsIDUsIDIzMiwgMTAyLCAyMjAsIAorICAgIDQ3LCAxNSwgNSwgMjMyLCAxMDAsIDE1LCA1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMTE1LCAyMzIsIDk2LCAxNSwgNSwgCisgICAgMjMyLCA5NywgMjI2LCAxNjgsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjAsIDQ3LCAxNSwgNSwgMjMyLCA5NCwgMTUsIAorICAgIDUsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgMTE1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgCisgICAgMTE1LCAyMzIsIDkwLCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDE4NiwgMTUsIDUsIDIzMSwgMjQ0LCAzMCwgCisgICAgMjE3LCA3MywgMTUsIDUsIDIzMSwgMjQ0LCAyNDIsIDEwMSwgMTUsIDUsIDIzMSwgMjQzLCAxNSwgNSwgMjMxLCAyMTUsIDE1LCAKKyAgICA1LCAyMzEsIDE3MSwgMTUsIDUsIDIzMSwgMTUyLCAxNSwgNSwgMjMxLCAxNTEsIDE1LCA1LCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjMxLCA1MiwgMTUsIDUsIDIzMCwgMjM1LCAxNSwgNSwgMjMwLCAxOTMsIDE1LCA1LCAyMzAsIDEwNywgMTUsIDUsIDIzMCwgCisgICAgMTA4LCAxMTUsIDIzMCwgMTA3LCAxNSwgNSwgMjMwLCA5OCwgMTUsIDUsIDIzMCwgOTksIDI0MiwgMTAxLCAxNSwgNSwgMjMwLCAKKyAgICA4MywgMTUsIDUsIDIzMCwgNjksIDE1LCA1LCAyMzAsIDY2LCAxNSwgNSwgMjMwLCA2NywgMzAsIDYxLCAxNSwgNSwgMjMwLCAKKyAgICA2NywgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjMwLCA2NywgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIAorICAgIDY2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIDY3LCAzMCwgMTE2LCA5NiwgMTk4LCAxNSwgNSwgMjMwLCA2NywgMjQ5LCAKKyAgICAxMzMsIDIzMCwgNjYsIDE1LCA1LCAyMzAsIDY0LCAxNSwgNSwgMjMwLCA2NSwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2NSwgMzAsIAorICAgIDExNiwgOTYsIDI0OCwgMTEsIDE1LCA1LCAyMzAsIDY1LCAzMCwgMjQ4LCAxMSwgMTUsIDUsIDIzMCwgNjUsIDI0MiwgMTAxLCAKKyAgICAxNSwgNSwgMTk4LCAxNSwgNSwgMjI5LCAyMzIsIDE1LCA1LCAyMjksIDIyMSwgMTUsIDUsIDIyOSwgMjIyLCAyMzUsIDE5OSwgCisgICAgMTUsIDUsIDIyOSwgMjIyLCAzMCwgMjE5LCAyMjgsIDIxNiwgMjQwLCAxNSwgNSwgMjI5LCAyMjIsIDIyNiwgMTY4LCAyMjksIAorICAgIDIyMSwgMTUsIDUsIDIyOSwgMjIwLCAxNSwgNSwgMjI5LCAyMTMsIDIyNywgMTg0LCAxNSwgNSwgMjI5LCAyMTIsIDE1LCA1LCAKKyAgICAyMjksIDIxMSwgMTUsIDUsIDIyOSwgMTEyLCAxNSwgNSwgMjI5LCAxMTMsIDMwLCA2MSwgMTUsIDUsIDIyOSwgMTEzLCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyMjksIDExMywgMjIwLCA0NywgMTUsIDUsIDIyOCwgMjM4LCAxNSwgNSwgMjI4LCAyMzksIDMwLCAKKyAgICA3NiwgMTUsIDUsIDIyOCwgMjM3LCAxNSwgNSwgMjI4LCAyMDgsIDE1LCA1LCAyMjgsIDIwOSwgMzAsIDI0MywgMTEyLCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIyOCwgMjA5LCAzMCwgMjQzLCAxMDQsIDk2LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMjgsIAorICAgIDIwNiwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjI4LCAyMDcsIDMwLCAyNTMsIDI0MCwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNDIsIDExMCwgMTUsIAorICAgIDUsIDIyOCwgMjA3LCAzMCwgMjMxLCA5NywgOTYsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjI5LCAxMTIsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMTE2LCAyNTQsIDEzMSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMjUzLCAyNDAsIDk2LCAKKyAgICAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAKKyAgICAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjgsIDE5NSwgMTUsIDUsIDIyNywgMjQyLCAxNSwgNSwgMjI3LCAyMTQsIDE1LCA1LCAKKyAgICAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjI3LCAxOTksIDIzMywgCisgICAgMTIyLCAzMCwgMjMxLCAxNTIsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjI3LCAKKyAgICAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMSwgMTE1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgCisgICAgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5OSwgMjE2LCAyNDAsIDE1LCA1LCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyNDksIDEzMywgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgCisgICAgMjQ5LCAxMzMsIDIyNywgMTk5LCAyMzMsIDEyMiwgMTE1LCAyMzMsIDEyMSwgMTUsIDUsIDIyNywgMTkzLCAxNSwgNSwgMjI3LCAKKyAgICAxOTQsIDI1NSwgMzMsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjUyLCAxNCwgMTUsIDUsIAorICAgIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQ2LCA4MiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgCisgICAgMzMsIDMwLCAyMzUsIDUsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjI3LCAxOTQsIAorICAgIDI1NSwgMzMsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjE5LCAxNzMsIDE1LCA1LCAKKyAgICAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE0LCAKKyAgICAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE1LCA2OSwgMTUsIDUsIDE5MSwgMTUsIDUsIDIyNiwgODQsIAorICAgIDE1LCA1LCAyMjYsIDUxLCAxNSwgNSwgMjI2LCAyNSwgMTUsIDUsIDIyNSwgMTY0LCAxNSwgNSwgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMjUsIDExMiwgMzAsIDYxLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTUsIDM0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTIsIAorICAgIDE0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTEsIDEzMywgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNzYsIDE1LCA1LCAyMjUsIAorICAgIDExMiwgMzAsIDc0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNDAsIDEyMiwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMjUsIDExMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMTIsIDI0OSwgMTMzLCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIyNSwgNTYsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjM0LCAyNDQsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyMjUsIDU3LCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU3LCAyMjYsIDE2OCwgMjI1LCA1NiwgMTUsIDUsIDIwNSwgCisgICAgMTUsIDUsIDIyMywgMTg1LCAxNSwgNSwgMjIzLCAzOCwgMTUsIDUsIDIyMiwgMTQyLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAKKyAgICAyNCwgMjI3LCAxODQsIDE1LCA1LCAyMjIsIDIzLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDI0NiwgODYsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjQ2LCA4NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAxNjIsIDE1LCA1LCAKKyAgICAyMjIsIDI0LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjMyLCA4OSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMzAsIDIzNSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMjcsIDE5OCwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjE3LCA5NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIyNSwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE5NywgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE1MCwgMTUsIDUsIDIyMiwgMjQsIAorICAgIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyMiwgMjQsIDExNSwgMjIyLCAyMywgMTUsIDUsIDIyMiwgMjQsIDI0MiwgMTAxLCAxNSwgCisgICAgNSwgMjIyLCAxMCwgMTUsIDUsIDIyMiwgMTEsIDIzMywgMTI0LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMjEsIDI0MSwgMTUsIAorICAgIDUsIDIyMSwgMjMzLCAxNSwgNSwgMjIwLCAxMDQsIDE1LCA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDEwMywgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDIyMCwgCisgICAgMTAzLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAKKyAgICAyMTUsIDk5LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCA2OSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMTA0LCA5NiwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDEwMSwgMTUsIDUsIDIyMCwgOTksIDE1LCA1LCAyMjAsIDgwLCAxNSwgNSwgMjIwLCA2NSwgMTUsIDUsIDIyMCwgCisgICAgNjYsIDI0MCwgMjI5LCAxNSwgNSwgMjIwLCA2NiwgMTE1LCAyMjAsIDY2LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAKKyAgICAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDY2LCAxMTUsIDIyMCwgNjYsIDIxNywgOTUsIDExNSwgMjE3LCA5NSwgCisgICAgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDU4LCAxNSwgNSwgMjIwLCA1MywgMTUsIDUsIDIyMCwgNTAsIAorICAgIDE1LCA1LCAyMjAsIDQ5LCAxNSwgNSwgMjIwLCA0NiwgMTUsIDUsIDIyMCwgMzIsIDE1LCA1LCAyMjAsIDMzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDMzLCAzMCwgMjM2LCAyMywgMTUsIDUsIDIyMCwgMjYsIDE1LCA1LCAyMjAsIDI3LCAzMCwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDI3LCAzMCwgMjUyLCAxNjksIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjUxLCAxMTcsIDE1LCA1LCAyMjAsIDI3LCAKKyAgICAzMCwgMjQ3LCAyMTQsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzMsIDE5NywgMTUsIAorICAgIDUsIDIyMCwgMjcsIDMwLCAyMzIsIDkxLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzMCwgOTgsIDE1LCA1LCAyMjAsIDI3LCAzMCwgCisgICAgMjIyLCAxMCwgMTUsIDUsIDIyMCwgMjAsIDE1LCA1LCAyMjAsIDE1LCAxNSwgNSwgMjIwLCAxNiwgMjE2LCAyNDAsIDE1LCA1LCAKKyAgICAyMjAsIDE2LCAxMTUsIDIyMCwgMTYsIDI1MSwgMTA3LCAxMTUsIDI1MSwgMTA2LCAxNSwgNSwgMjIwLCAxMSwgMTUsIDUsIAorICAgIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjgsIDExNSwgMjM1LCAyMDAsIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjUsIDE1LCAKKyAgICA1LCAyMTksIDIyNCwgMTUsIDUsIDIxOSwgMTkzLCAxNSwgNSwgMjE5LCAxOTQsIDI0MiwgMTAxLCAxNSwgNSwgMjE5LCAxODQsIAorICAgIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgzLCAxMTUsIDIxOSwgMTgzLCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgCisgICAgMTc1LCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTgsIDg0LCAxNSwgNSwgMjE4LCA4NSwgMTE1LCAyMTgsIDg0LCAxNSwgCisgICAgNSwgMjE4LCA1NSwgMTUsIDUsIDIxOCwgNTQsIDE1LCA1LCAyMTgsIDUyLCAxNSwgNSwgMjE4LCA0NCwgMTUsIDUsIDIxOCwgCisgICAgNDMsIDE1LCA1LCAyMTgsIDE4LCAxNSwgNSwgMjE4LCAxNywgMTUsIDUsIDIxNywgMTA2LCAxNSwgNSwgMjE3LCAxMDcsIAorICAgIDI1MywgMjI0LCAxNSwgNSwgMjE3LCAxMDcsIDMwLCAyNDEsIDE4NywgMTUsIDUsIDIxNywgMTA3LCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyMTcsIDEwNywgMjQyLCAxMDEsIDE1LCA1LCAyMTcsIDk0LCAxNSwgNSwgMjE3LCA5NSwgMTE1LCAyMTcsIDk1LCAKKyAgICAyMjgsIDIzOSwgMTE1LCAyMjgsIDIzOSwgMjQ3LCAxOTYsIDExNSwgMjQ3LCAxOTUsIDE1LCA1LCAyMTcsIDk1LCAyMTgsIAorICAgIDIzNSwgMTUsIDUsIDIxNywgODUsIDE1LCA1LCAxMjksIDMwLCAyNTIsIDE0LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAxMjksIDMwLCAyMjAsIDY1LCAxNSwgNSwgMTI5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAxMjksIDMwLCAyMTUsIAorICAgIDExNCwgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjE3LCA3MywgMTUsIDUsIDIxNywgNTEsIDE1LCA1LCAKKyAgICAyMTcsIDIzLCAxNSwgNSwgMjE3LCAyNCwgMjQyLCAxMDEsIDE1LCA1LCAyMTYsIDExOCwgMTUsIDUsIDIxNiwgMTE5LCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIxNiwgOTEsIDE1LCA1LCAyMTYsIDczLCAxNSwgNSwgMjE2LCA3NCwgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyMTYsIDc0LCAxMTUsIDIxNiwgNzMsIDE1LCA1LCAyMTYsIDc0LCAxMTUsIDIxNiwgNzQsIDI0MywgMTM0LCAxMTUsIDI0MywgCisgICAgMTM0LCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIxNSwgMTE5LCAxNSwgNSwgMjE1LCAxMTQsIDE1LCA1LCAKKyAgICAyMTUsIDExMiwgMTUsIDUsIDIxNSwgMTA5LCAxNSwgNSwgMjE1LCA5OSwgMTUsIDUsIDIxNSwgMTAwLCAxMTUsIDIxNSwgCisgICAgMTAwLCAyMTAsIDExNywgMTE1LCAyMTAsIDExNiwgMTUsIDUsIDY5LCAxNSwgNSwgMTA0LCAyNDIsIDExMCwgMTUsIDUsIAorICAgIDEwNCwgMTA0LCA2OSwgMTUsIDUsIDEwNCwgMTE1LCAxMDQsIDIyNiwgOTQsIDExNSwgMjI2LCA5NCwgMjQzLCAxMDQsIDExNSwgCisgICAgMjQzLCAxMDMsIDE1LCA1LCAxMDQsIDExNSwgMTA0LCAyMTgsIDE5LCAxMTUsIDIxOCwgMTgsIDE1LCA1LCAxMDQsIDExNSwgCisgICAgMTA0LCAxMDQsIDIyMywgNTIsIDExNSwgMTA0LCAyMjMsIDUxLCAxNSwgNSwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDIyNSwgCisgICAgMTUsIDUsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAyMjAsIDIzMywgMTk3LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjMwLCAyMzUsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgCisgICAgOTYsIDY5LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCAxMDQsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAKKyAgICAyMjAsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0OCwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMzLCAKKyAgICAxMjMsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTcsIDk2LCAyNDgsIDIyOSwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgCisgICAgMjIwLCAxMDIsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDY5LCAxNSwgNSwgMjE0LCAxOTYsIDE1LCA1LCAyMTQsIDE5MiwgMTUsIAorICAgIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MSwgMTUsIDUsIDIxNCwgMTkwLCAxNSwgCisgICAgNSwgMjE0LCAxOTEsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjQ5LCAxMzMsIDIxNCwgCisgICAgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDE0OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE2LCAKKyAgICA5NiwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTYsIDk2LCAxOTgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjE0LCAKKyAgICAxNDksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTIsIDE0LCAxNSwgNSwgMjE0LCAxNDcsIDE1LCA1LCAyMTQsIDE0NCwgCisgICAgMTUsIDUsIDIxNCwgMTQzLCAxNSwgNSwgMjE0LCAxMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDYxLCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTMwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDYsIAorICAgIDc2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNSwgMTcyLCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjE0LCAxNDAsIAorICAgIDMwLCAyMzAsIDE5MywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkxLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMjAsIDY1LCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTksIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTEwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNjksIDE1LCA1LCAyMTQsIAorICAgIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjIzLCAxNSwgNSwgMjE0LCAKKyAgICAxMjcsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIxNCwgMTIyLCAxNSwgNSwgCisgICAgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIDE1LCA1LCAyMTQsIAorICAgIDEwOSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIDIxMCwgMTE3LCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjEwLCAxMTMsIDE1LCA1LCAyMTAsIAorICAgIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE1LCAyMTAsIDQ0LCAxNSwgNSwgCisgICAgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDksIDIxNiwgMjQwLCAxNSwgNSwgMjEwLCAKKyAgICAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIDUsIDIxMCwgMTIsIDMwLCAKKyAgICA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTMsIAorICAgIDIzOSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjUzLCAyMzksIDE1LCAKKyAgICAxMzIsIDUsIDI0NSwgMjAxLCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQ3LCAKKyAgICAxOTUsIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI0NywgMTk1LCAxNSwgCisgICAgMTMyLCA1LCAyNDUsIDIwMSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgCisgICAgMjQ0LCAxOSwgNjksIDE1LCAxMzIsIDUsIDI0NCwgODksIDY5LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgNjksIDE1LCAxMzIsIAorICAgIDUsIDIyMCwgMTI0LCA2OSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDY5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgNjksIDE1LCAKKyAgICAxMzIsIDUsIDEyMywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgNDUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0MywgNDUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0MywgNDUsIDE1LCAxMzIsIDUsIAorICAgIDIxOSwgMTI3LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIAorICAgIDI0MywgNDUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMjMsIDI0MywgNDIsIDE1LCAKKyAgICAxMzIsIDUsIDExMywgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDMsIAorICAgIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAxMTMsIDIyMCwgODAsIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDgxLCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgCisgICAgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDIyMCwgODAsIDE1LCAKKyAgICAxMzIsIDUsIDIyMCwgMTI0LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgCisgICAgMjI4LCAyMDUsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMTEzLCAyMjAsIDc1LCAKKyAgICAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NiwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAorICAgIDUsIDI0NCwgMTksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDIyMCwgODEsIAorICAgIDMwLCAyNDMsIDEyNiwgOTYsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjAsIDgxLCAzMCwgMjQzLCAxMjYsIDk2LCAyMzAsIAorICAgIDE5MywgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTEzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDEwNCwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAKKyAgICAyNDQsIDI4LCAyNDUsIDgyLCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjgsIDI0NSwgNzksIDE1LCAxMzIsIDUsIAorICAgIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjIzLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIAorICAgIDI4LCAyMzIsIDIyMSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjQsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyNCwgMjUzLCAxNjYsIDE1LCAxMzIsIDUsIDIxOSwgCisgICAgMTI3LCAyMTQsIDEyLCAyNDQsIDI4LCAyNTMsIDIzNiwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIAorICAgIDIzNiwgMTUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDE3LCA2MSwgMTUsIDEzMiwgNSwgCisgICAgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMTcsIDI1MywgMTY2LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgMjE0LCAxMjEsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMTQsIDEyLCAyNDQsIDI4LCAyMTQsIDEyMCwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzEsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAKKyAgICAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMwLCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAKKyAgICAyOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzIsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIAorICAgIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCAKKyAgICA1LCAyMTksIDEyNywgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAxMjMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAKKyAgICAxMTMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAxMzQsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTIsIDE1OCwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTIsIAorICAgIDE1OCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyMjgsIDIxNSwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMTYsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCA3OCwgMTUsIDEzMiwgNSwgMTEzLCAyNDUsIDc4LCAKKyAgICAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTcwLCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2OCwgMjQ3LCAxOTUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgODksIDIxOSwgMTE2LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE3MCwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgNjEsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjgsIDIxNCwgMTIsIDI0NCwgMjgsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAxMjMsIDI0NSwgMTk3LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMTIzLCAyMjQsIDI1LCAyNTMsIDIzOSwgMTUsIAorICAgIDEzMiwgNSwgNTUsIDI1MywgMjI3LCAxMjMsIDIxOSwgMTE3LCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMjcsIDEyMywgMjI0LCAKKyAgICAyNCwgMTUsIDIyNCwgMTQ0LCA1LCA1NSwgMjUzLCAyMjcsIDIxMSwgMjA5LCAyNDcsIDE4MCwgMTUsIDIyNCwgMTQ0LCA1LCAKKyAgICA2NywgMjQ5LCAyMzQsIDE1LCAyMjQsIDE0NCwgNSwgMjQ4LCA3LCAyNDksIDIzNCwgMTUsIDIyNCwgMTQ0LCA1LCAyNDgsIDcsIAorICAgIDIxNSwgMjIyLCAxMiwgMTMsIDI1NSwgMTY0LCAxMiwgMTMsIDI1NSwgMTYzLCAxMiwgMTMsIDI1NSwgMTYyLCAxMiwgMTMsIAorICAgIDI1NSwgMTYxLCAxMiwgMTMsIDI1NSwgMTYwLCAxMiwgMTMsIDI1NSwgMTU5LCAxMiwgMTMsIDI1NSwgMTU4LCAxMiwgMTMsIAorICAgIDI1NSwgMTU3LCAxMiwgMTMsIDI1NSwgMTU2LCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgMTU0LCAxMiwgMTMsIAorICAgIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgMTUwLCAxMiwgMTMsIAorICAgIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgMTQ2LCAxMiwgMTMsIAorICAgIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgMTQyLCAxMiwgMTMsIAorICAgIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgMTM4LCAxMiwgMTMsIAorICAgIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgMTM0LCAxMiwgMTMsIAorICAgIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgMTMwLCAxMiwgMTMsIAorICAgIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgMTI2LCAxMiwgMTMsIAorICAgIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgMTIyLCAxMiwgMTMsIAorICAgIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgMTE4LCAxMiwgMTMsIAorICAgIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgMTE0LCAxMiwgMTMsIAorICAgIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgMTEwLCAxMiwgMTMsIAorICAgIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgMTA2LCAxMiwgMTMsIAorICAgIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgMTAyLCAxMiwgMTMsIAorICAgIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCA5OCwgMTIsIDEzLCAKKyAgICAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAxMiwgMTMsIDI1NSwgCisgICAgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAxMywgMjU1LCA4OSwgCisgICAgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAyNTUsIDg1LCAxMiwgCisgICAgMTMsIDI1MywgMTY0LCAxMiwgMTMsIDI1MywgMTYyLCAxMiwgMTMsIDI1MywgMTYwLCAxMiwgMTMsIDI1MywgMTU4LCAxMiwgCisgICAgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU1LCAxMiwgMTMsIDI1MywgMTUzLCAxMiwgMTMsIDI1MywgMTUxLCAxMiwgCisgICAgMTMsIDI1MywgMTQ5LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MSwgNzAsIDEyLCAxMywgMjUxLCA2OSwgMTIsIDEzLCAKKyAgICAyNTEsIDY4LCAxMiwgMTMsIDI1MSwgNjcsIDEyLCAxMywgMjUxLCA2NiwgMTIsIDEzLCAyNTEsIDY1LCAxMiwgMTMsIDI1MSwgCisgICAgNjQsIDEyLCAxMywgMjUxLCA2MywgMTIsIDEzLCAyNTEsIDYyLCAxMiwgMTMsIDI1MSwgNjEsIDEyLCAxMywgMjUxLCA2MCwgCisgICAgMTIsIDEzLCAyNTEsIDU5LCAxMiwgMTMsIDI1MSwgNTgsIDEyLCAxMywgMjUxLCA1NywgMTIsIDEzLCAyNTEsIDU2LCAxMiwgCisgICAgMTMsIDI1MSwgNTUsIDEyLCAxMywgMjUxLCA1NCwgMTIsIDEzLCAyNTEsIDUzLCAxMiwgMTMsIDI1MSwgNTIsIDEyLCAxMywgCisgICAgMjUxLCA1MSwgMTIsIDEzLCAyNTEsIDUwLCAxMiwgMTMsIDI1MSwgNDksIDEyLCAxMywgMjUxLCA0OCwgMTIsIDEzLCAyNTEsIAorICAgIDQ3LCAxMiwgMTMsIDI1MSwgNDYsIDEyLCAxMywgMjUxLCA0NSwgMTIsIDEzLCAyNTEsIDQ0LCAxMiwgMTMsIDI1MSwgNDMsIAorICAgIDEyLCAxMywgMjQ5LCA2NywgMTIsIDEzLCAyNDksIDY2LCAxMiwgMTMsIDI0OSwgNjUsIDEyLCAxMywgMjQ5LCA2NCwgMTIsIAorICAgIDEzLCAyNDksIDYzLCAxMiwgMTMsIDI0OSwgNjIsIDEyLCAxMywgMjQ5LCA2MSwgMTIsIDEzLCAyNDksIDYwLCAxMiwgMTMsIAorICAgIDI0OSwgNTksIDEyLCAxMywgMjQ5LCA1OCwgMTIsIDEzLCAyNDksIDU3LCAxMiwgMTMsIDI0OSwgNTYsIDEyLCAxMywgMjQ5LCAKKyAgICA1NSwgMTIsIDEzLCAyNDksIDU0LCAxMiwgMTMsIDI0OSwgNTMsIDEyLCAxMywgMjQ5LCA1MiwgMTIsIDEzLCAyNDksIDUxLCAKKyAgICAxMiwgMTMsIDI0OSwgNTAsIDEyLCAxMywgMjQ5LCA0OSwgMTIsIDEzLCAyNDksIDQ4LCAxMiwgMTMsIDI0OSwgNDcsIDEyLCAKKyAgICAxMywgMjQ5LCA0NiwgMTIsIDEzLCAyNDksIDQ1LCAxMiwgMTMsIDI0OSwgNDQsIDEyLCAxMywgMjQ5LCA0MywgMTIsIDEzLCAKKyAgICAyNDksIDQyLCAxMiwgMTMsIDI0OSwgNDEsIDEyLCAxMywgMjQ5LCA0MCwgMTIsIDEzLCAyNDksIDM5LCAxMiwgMTMsIDI0OSwgCisgICAgMzgsIDEyLCAxMywgMjQ5LCAzNywgMTIsIDEzLCAyNDksIDM2LCAxMiwgMTMsIDI0OSwgMzUsIDEyLCAxMywgMjQ5LCAzNCwgCisgICAgMTIsIDEzLCAyNDksIDMzLCAxMiwgMTMsIDI0OSwgMzIsIDEyLCAxMywgMjQ5LCAzMSwgMTIsIDEzLCAyNDksIDMwLCAxMiwgCisgICAgMTMsIDI0OSwgMjksIDEyLCAxMywgMjQ5LCAyOCwgMTIsIDEzLCAyNDksIDI3LCAxMiwgMTMsIDI0OSwgMjYsIDEyLCAxMywgCisgICAgMjQ5LCAyNSwgMTIsIDEzLCAyNDksIDI0LCAxMiwgMTMsIDI0OSwgMjMsIDEyLCAxMywgMjQ5LCAyMiwgMTIsIDEzLCAyNDksIAorICAgIDIxLCAxMiwgMTMsIDI0OSwgMjAsIDEyLCAxMywgMjQ5LCAxOSwgMTIsIDEzLCAyNDksIDE4LCAxMiwgMTMsIDI0OSwgMTcsIAorICAgIDEyLCAxMywgMjQ5LCAxNiwgMTIsIDEzLCAyNDksIDE1LCAxMiwgMTMsIDI0OSwgMTQsIDEyLCAxMywgMjQ5LCAxMywgMTIsIAorICAgIDEzLCAyNDksIDEyLCAxMiwgMTMsIDI0OSwgMTEsIDEyLCAxMywgMjQ5LCAxMCwgMTIsIDEzLCAyNDksIDksIDEyLCAxMywgCisgICAgMjQ5LCA4LCAxMiwgMTMsIDI0OSwgNywgMTIsIDEzLCAyNDksIDYsIDEyLCAxMywgMjQ5LCA1LCAxMiwgMTMsIDI0OSwgNCwgCisgICAgMTIsIDEzLCAyNDksIDMsIDEyLCAxMywgMjQ5LCAyLCAxMiwgMTMsIDI0OSwgMSwgMTIsIDEzLCAyNDksIDAsIDEyLCAxMywgCisgICAgMjQ4LCAyNTUsIDEyLCAxMywgMjQ4LCAyNTQsIDEyLCAxMywgMjQ4LCAyNTMsIDEyLCAxMywgMjQ4LCAyNTIsIDEyLCAxMywgCisgICAgMjQ4LCAyNTEsIDEyLCAxMywgMjQ4LCAyNTAsIDEyLCAxMywgMjQ4LCAyNDksIDEyLCAxMywgMjQ4LCAyNDgsIDEyLCAxMywgCisgICAgMjQ4LCAyNDcsIDEyLCAxMywgMjQ4LCAyNDYsIDEyLCAxMywgMjQ4LCAyNDUsIDEyLCAxMywgMjQ4LCAyNDQsIDEyLCAxMywgCisgICAgMjQ4LCAyNDMsIDEyLCAxMywgMjQ4LCAyNDIsIDEyLCAxMywgMjQ4LCAyNDEsIDEyLCAxMywgMjQ4LCAyNDAsIDEyLCAxMywgCisgICAgMjQ4LCAyMzksIDEyLCAxMywgMjQ4LCAyMzgsIDEyLCAxMywgMjQ4LCAyMzcsIDEyLCAxMywgMjQ4LCAyMzYsIDEyLCAxMywgCisgICAgMjQ4LCAyMzUsIDEyLCAxMywgMjQ4LCAyMzQsIDEyLCAxMywgMjQ4LCAyMzMsIDEyLCAxMywgMjQ4LCAyMzIsIDEyLCAxMywgCisgICAgMjQ2LCAzMSwgMTIsIDEzLCAyNDYsIDMwLCAxMiwgMTMsIDI0NiwgMjksIDEyLCAxMywgMjQ2LCAyOCwgMTIsIDEzLCAyNDYsIAorICAgIDI3LCAxMiwgMTMsIDI0NiwgMjYsIDEyLCAxMywgMjQ2LCAyNSwgMTIsIDEzLCAyNDYsIDI0LCAxMiwgMTMsIDI0NiwgMjMsIAorICAgIDEyLCAxMywgMjQ2LCAyMiwgMTIsIDEzLCAyNDYsIDIxLCAxMiwgMTMsIDI0NiwgMjAsIDEyLCAxMywgMjQ2LCAxOSwgMTIsIAorICAgIDEzLCAyNDYsIDE4LCAxMiwgMTMsIDI0NiwgMTcsIDEyLCAxMywgMjQ2LCAxNiwgMTIsIDEzLCAyNDYsIDE1LCAxMiwgMTMsIAorICAgIDI0NiwgMTQsIDEyLCAxMywgMjQ2LCAxMywgMTIsIDEzLCAyNDYsIDEyLCAxMiwgMTMsIDI0NiwgMTEsIDEyLCAxMywgMjQ2LCAKKyAgICAxMCwgMTIsIDEzLCAyNDYsIDksIDEyLCAxMywgMjQ2LCA4LCAxMiwgMTMsIDI0NiwgNywgMTIsIDEzLCAyNDYsIDYsIDEyLCAKKyAgICAxMywgMjQ2LCA1LCAxMiwgMTMsIDI0NiwgNCwgMTIsIDEzLCAyNDYsIDMsIDEyLCAxMywgMjQ2LCAyLCAxMiwgMTMsIDI0NiwgCisgICAgMSwgMTIsIDEzLCAyNDYsIDAsIDEyLCAxMywgMjQ1LCAyNTUsIDEyLCAxMywgMjQ1LCAyNTQsIDEyLCAxMywgMjQ1LCAyNTMsIAorICAgIDEyLCAxMywgMjQ1LCAyNTIsIDEyLCAxMywgMjQ1LCAyNTEsIDEyLCAxMywgMjQ1LCAyNTAsIDEyLCAxMywgMjQ1LCAyNDksIAorICAgIDEyLCAxMywgMjQ1LCAyNDgsIDEyLCAxMywgMjQ1LCAyNDcsIDEyLCAxMywgMjQ1LCAyNDYsIDEyLCAxMywgMjQ1LCAyNDUsIAorICAgIDEyLCAxMywgMjQ1LCAyNDQsIDEyLCAxMywgMjQ1LCAxMywgMTIsIDEzLCAyNDUsIDEyLCAxMiwgMTMsIDI0NSwgMTEsIDEyLCAKKyAgICAxMywgMjQ1LCAxMCwgMTIsIDEzLCAyNDUsIDksIDEyLCAxMywgMjQ1LCA4LCAxMiwgMTMsIDI0NSwgNywgMTIsIDEzLCAyNDUsIAorICAgIDYsIDEyLCAxMywgMjQ1LCA1LCAxMiwgMTMsIDI0NSwgNCwgMTIsIDEzLCAyNDUsIDMsIDEyLCAxMywgMjQ1LCAyLCAxMiwgCisgICAgMTMsIDI0NSwgMSwgMTIsIDEzLCAyNDUsIDAsIDEyLCAxMywgMjQ0LCAyNTUsIDEyLCAxMywgMjQ0LCAyNTQsIDEyLCAxMywgCisgICAgMjQ0LCAyNTMsIDEyLCAxMywgMjQ0LCAyNTIsIDEyLCAxMywgMjQ0LCAyNTEsIDEyLCAxMywgMjQ0LCAyNTAsIDEyLCAxMywgCisgICAgMjQ0LCAyNDksIDEyLCAxMywgMjQ0LCAyNDgsIDEyLCAxMywgMjQ0LCAyNDcsIDEyLCAxMywgMjQ0LCAyNDYsIDEyLCAxMywgCisgICAgMjQ0LCAyNDUsIDEyLCAxMywgMjQ0LCAyNDQsIDEyLCAxMywgMjQ0LCAyNDMsIDEyLCAxMywgMjQ0LCAyNDIsIDEyLCAxMywgCisgICAgMjQ0LCAyNDEsIDEyLCAxMywgMjQ0LCAyNDAsIDEyLCAxMywgMjQ0LCAyMzksIDEyLCAxMywgMjQ0LCAyMzgsIDEyLCAxMywgCisgICAgMjQ0LCAyMzcsIDEyLCAxMywgMjQ0LCAyMzYsIDEyLCAxMywgMjQ0LCAyMzUsIDEyLCAxMywgMjQ0LCAyMzQsIDEyLCAxMywgCisgICAgMjQ0LCAyMzMsIDEyLCAxMywgMjQ0LCAyMzIsIDEyLCAxMywgMjQ0LCAyMzEsIDEyLCAxMywgMjQ0LCAyMzAsIDEyLCAxMywgCisgICAgMjQ0LCAyMjksIDEyLCAxMywgMjQ0LCAyMjgsIDEyLCAxMywgMjQ0LCAyMjcsIDEyLCAxMywgMjQ0LCAyMjYsIDEyLCAxMywgCisgICAgMjQ0LCAyMjUsIDEyLCAxMywgMjQ0LCAyMjQsIDEyLCAxMywgMjQ0LCAyMjMsIDEyLCAxMywgMjQ0LCAyMjIsIDEyLCAxMywgCisgICAgMjQ0LCAyMjEsIDEyLCAxMywgMjQ0LCAyMjAsIDEyLCAxMywgMjQ0LCAyMTksIDEyLCAxMywgMjQ0LCAyMTgsIDEyLCAxMywgCisgICAgMjQ0LCAyMTcsIDEyLCAxMywgMjQ0LCAyMTYsIDEyLCAxMywgMjQ0LCAyMTUsIDEyLCAxMywgMjQ0LCAyMTQsIDEyLCAxMywgCisgICAgMjQ0LCAyMTMsIDEyLCAxMywgMjQ0LCAyMTIsIDEyLCAxMywgMjQ0LCAyMTEsIDEyLCAxMywgMjQ0LCAyMTAsIDEyLCAxMywgCisgICAgMjQ0LCAyMDksIDEyLCAxMywgMjQ0LCAyMDgsIDEyLCAxMywgMjQ0LCAyMDcsIDEyLCAxMywgMjQ0LCAyMDYsIDEyLCAxMywgCisgICAgMjQ0LCAyMDUsIDEyLCAxMywgMjQzLCAyMDgsIDEyLCAxMywgMjQzLCAyMDcsIDEyLCAxMywgMjQzLCAyMDYsIDEyLCAxMywgCisgICAgMjQzLCAyMDUsIDEyLCAxMywgMjQzLCAyMDQsIDEyLCAxMywgMjQzLCAyMDMsIDEyLCAxMywgMjQzLCAyMDIsIDEyLCAxMywgCiAgICAgMjQzLCAyMDEsIDEyLCAxMywgMjQzLCAyMDAsIDEyLCAxMywgMjQzLCAxOTksIDEyLCAxMywgMjQzLCAxOTgsIDEyLCAxMywgCiAgICAgMjQzLCAxOTcsIDEyLCAxMywgMjQzLCAxOTYsIDEyLCAxMywgMjQzLCAxOTUsIDEyLCAxMywgMjQzLCAxOTQsIDEyLCAxMywgCiAgICAgMjQzLCAxOTMsIDEyLCAxMywgMjQzLCAxOTIsIDEyLCAxMywgMjQzLCAxOTEsIDEyLCAxMywgMjQzLCAxOTAsIDEyLCAxMywgCkBAIC0xMjAxNSw4MSArMTIwMTYsODAgQEAKICAgICAyNDMsIDE1NywgMTIsIDEzLCAyNDMsIDE1NiwgMTIsIDEzLCAyNDMsIDE1NSwgMTIsIDEzLCAyNDMsIDE1NCwgMTIsIDEzLCAKICAgICAyNDMsIDE1MywgMTIsIDEzLCAyNDMsIDE1MiwgMTIsIDEzLCAyNDMsIDE1MSwgMTIsIDEzLCAyNDMsIDE1MCwgMTIsIDEzLCAKICAgICAyNDMsIDE0OSwgMTIsIDEzLCAyNDMsIDE0OCwgMTIsIDEzLCAyNDMsIDE0NywgMTIsIDEzLCAyNDMsIDE0NiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0NSwgMTIsIDEzLCAyNDMsIDE0NCwgMTIsIDEzLCAyNDMsIDE0MywgMTIsIDEzLCAyNDMsIDE0MiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0MSwgMTIsIDEzLCAyNDMsIDE0MCwgMTIsIDEzLCAyNDMsIDEzOSwgMTIsIDEzLCAyNDMsIDEzOCwgMTIsIDEzLCAKLSAgICAyNDIsIDU4LCAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQyLCA1NiwgMTIsIDEzLCAyNDIsIDU1LCAxMiwgMTMsIDI0MiwgCi0gICAgNTQsIDEyLCAxMywgMjQyLCA1MywgMTIsIDEzLCAyNDIsIDUyLCAxMiwgMTMsIDI0MiwgNTEsIDEyLCAxMywgMjQyLCA1MCwgCisgICAgMjQzLCAxNDUsIDEyLCAxMywgMjQyLCA2NSwgMTIsIDEzLCAyNDIsIDY0LCAxMiwgMTMsIDI0MiwgNjMsIDEyLCAxMywgMjQyLCAKKyAgICA2MiwgMTIsIDEzLCAyNDIsIDYxLCAxMiwgMTMsIDI0MiwgNjAsIDEyLCAxMywgMjQyLCA1OSwgMTIsIDEzLCAyNDIsIDU4LCAKKyAgICAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQwLCAxNDUsIDEyLCAxMywgMjQwLCAxNDQsIDEyLCAxMywgMjQwLCAxNDMsIAorICAgIDEyLCAxMywgMjQwLCAxNDIsIDEyLCAxMywgMjQwLCAxNDEsIDEyLCAxMywgMjQwLCAxNDAsIDEyLCAxMywgMjQwLCAxMzksIAogICAgIDEyLCAxMywgMjQwLCAxMzgsIDEyLCAxMywgMjQwLCAxMzcsIDEyLCAxMywgMjQwLCAxMzYsIDEyLCAxMywgMjQwLCAxMzUsIAogICAgIDEyLCAxMywgMjQwLCAxMzQsIDEyLCAxMywgMjQwLCAxMzMsIDEyLCAxMywgMjQwLCAxMzIsIDEyLCAxMywgMjQwLCAxMzEsIAogICAgIDEyLCAxMywgMjQwLCAxMzAsIDEyLCAxMywgMjQwLCAxMjksIDEyLCAxMywgMjQwLCAxMjgsIDEyLCAxMywgMjQwLCAxMjcsIAotICAgIDEyLCAxMywgMjQwLCAxMjYsIDEyLCAxMywgMjQwLCAxMjUsIDEyLCAxMywgMjQwLCAxMjQsIDEyLCAxMywgMjQwLCAxMjMsIAotICAgIDEyLCAxMywgMjQwLCAxMjIsIDEyLCAxMywgMjQwLCAxMjEsIDEyLCAxMywgMjQwLCAxMjAsIDEyLCAxMywgMjM1LCAyMiwgCi0gICAgMTIsIDEzLCAyMzUsIDIxLCAxMiwgMTMsIDIzNSwgMjAsIDEyLCAxMywgMjM1LCAxOSwgMTIsIDEzLCAyMzUsIDE4LCAxMiwgCi0gICAgMTMsIDIzNSwgMTcsIDEyLCAxMywgMjM1LCAxNiwgMTIsIDEzLCAyMzUsIDE1LCAxMiwgMTMsIDIzMywgMTQ2LCAxMiwgMTMsIAotICAgIDIzMywgMTQ1LCAxMiwgMTMsIDIzMywgMTQ0LCAxMiwgMTMsIDIzMywgMTQzLCAxMiwgMTMsIDIzMywgMTQyLCAxMiwgMTMsIAotICAgIDIzMywgMTQxLCAxMiwgMTMsIDIzMywgMTQwLCAxMiwgMTMsIDIzMywgMTM5LCAxMiwgMTMsIDIzMywgMTM4LCAxMiwgMTMsIAotICAgIDIzMywgMTM3LCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgCi0gICAgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgCi0gICAgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgCi0gICAgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgCi0gICAgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIAotICAgIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIAotICAgIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIAotICAgIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIAotICAgIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAKLSAgICAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIAotICAgIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAKLSAgICAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgCi0gICAgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgCi0gICAgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgCi0gICAgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgMTMsIDIzMSwgMjQ0LCAxMiwgMTMsIDIzMSwgMjQzLCAxMiwgCi0gICAgMTMsIDIzMSwgMjQyLCAxMiwgMTMsIDIzMSwgMjQxLCAxMiwgMTMsIDIzMSwgMjQwLCAxMiwgMTMsIDIzMCwgMjIsIDEyLCAKLSAgICAxMywgMjMwLCAyMSwgMTIsIDEzLCAyMzAsIDIwLCAxMiwgMTMsIDIzMCwgMTksIDEyLCAxMywgMjMwLCAxOCwgMTIsIDEzLCAKLSAgICAyMzAsIDE3LCAxMiwgMTMsIDIzMCwgMTYsIDEyLCAxMywgMjMwLCAxNSwgMTIsIDEzLCAyMzAsIDE0LCAxMiwgMTMsIDIzMCwgCi0gICAgMTMsIDEyLCAxMywgMjMwLCAxMiwgMTIsIDEzLCAyMzAsIDExLCAxMiwgMTMsIDIzMCwgMTAsIDEyLCAxMywgMjMwLCA5LCAKLSAgICAxMiwgMTMsIDIzMCwgOCwgMTIsIDEzLCAyMzAsIDcsIDEyLCAxMywgMjMwLCA2LCAxMiwgMTMsIDIzMCwgNSwgMTIsIDEzLCAKLSAgICAyMzAsIDQsIDEyLCAxMywgMjMwLCAzLCAxMiwgMTMsIDIzMCwgMiwgMTIsIDEzLCAyMzAsIDEsIDEyLCAxMywgMjMwLCAwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjU1LCAxMiwgMTMsIDIyOSwgMjU0LCAxMiwgMTMsIDIyOSwgMjUzLCAxMiwgMTMsIDIyOSwgMjUyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjUxLCAxMiwgMTMsIDIyOSwgMjUwLCAxMiwgMTMsIDIyOSwgMjQ5LCAxMiwgMTMsIDIyOSwgMjQ4LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQ3LCAxMiwgMTMsIDIyOSwgMjQ2LCAxMiwgMTMsIDIyOSwgMjQ1LCAxMiwgMTMsIDIyOSwgMjQ0LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQzLCAxMiwgMTMsIDIyOSwgMjQyLCAxMiwgMTMsIDIyOSwgMjQxLCAxMiwgMTMsIDIyOSwgMjQwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjM5LCAxMiwgMTMsIDIyOSwgMjM4LCAxMiwgMTMsIDIyOSwgMjM3LCAxMiwgMTMsIDIyOSwgMjM2LCAKLSAgICAxMiwgMTMsIDIyOSwgMjM1LCAxMiwgMTMsIDIyOSwgMjM0LCAxMiwgMTMsIDIyOSwgMjMzLCAxMiwgMTMsIDIyOSwgMjMyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjMxLCAxMiwgMTMsIDIyOSwgMjMwLCAxMiwgMTMsIDIyOCwgMTM0LCAxMiwgMTMsIDIyOCwgMTMzLCAKLSAgICAxMiwgMTMsIDIyOCwgMTMyLCAxMiwgMTMsIDIyOCwgMTMxLCAxMiwgMTMsIDIyOCwgMTMwLCAxMiwgMTMsIDIyOCwgMTI5LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI4LCAxMiwgMTMsIDIyOCwgMTI3LCAxMiwgMTMsIDIyOCwgMTI2LCAxMiwgMTMsIDIyOCwgMTI1LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI0LCAxMiwgMTMsIDIyOCwgMTIzLCAxMiwgMTMsIDIyOCwgMTIyLCAxMiwgMTMsIDIyOCwgMTIxLCAKLSAgICAxMiwgMTMsIDIyOCwgMTIwLCAxMiwgMTMsIDIyOCwgMTE5LCAxMiwgMTMsIDIyOCwgMTE4LCAxMiwgMTMsIDIyOCwgMTE3LCAKLSAgICAxMiwgMTMsIDIyOCwgMTE2LCAxMiwgMTMsIDIyOCwgMTE1LCAxMiwgMTMsIDIyOCwgMTE0LCAxMiwgMTMsIDIyOCwgMTEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjM2LCAxMiwgMTMsIDIyNywgMjM1LCAxMiwgMTMsIDIyNywgMjM0LCAxMiwgMTMsIDIyNywgMjMzLCAKLSAgICAxMiwgMTMsIDIyNywgMjMyLCAxMiwgMTMsIDIyNywgMjMxLCAxMiwgMTMsIDIyNywgMjMwLCAxMiwgMTMsIDIyNywgMjI5LCAKLSAgICAxMiwgMTMsIDIyNywgMjI4LCAxMiwgMTMsIDIyNywgMjI3LCAxMiwgMTMsIDIyNywgMjI2LCAxMiwgMTMsIDIyNywgMjI1LCAKLSAgICAxMiwgMTMsIDIyNywgMjI0LCAxMiwgMTMsIDIyNywgMjIzLCAxMiwgMTMsIDIyNywgMjIyLCAxMiwgMTMsIDIyNywgMjIxLCAKLSAgICAxMiwgMTMsIDIyNywgMjIwLCAxMiwgMTMsIDIyNywgMjE5LCAxMiwgMTMsIDIyNywgMjE4LCAxMiwgMTMsIDIyNywgMjE3LCAKLSAgICAxMiwgMTMsIDIyNywgMjE2LCAxMiwgMTMsIDIyNywgMjE1LCAxMiwgMTMsIDIyNywgMjE0LCAxMiwgMTMsIDIyNywgMjEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjEyLCAxMiwgMTMsIDIyNywgMjExLCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCA3NSwgMTIsIAotICAgIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAxMiwgMTMsIAotICAgIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAxMywgMjI3LCAKLSAgICA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAyMjcsIDYyLCAKLSAgICAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgNTgsIDEyLCAKLSAgICAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgMTIsIDEzLCAKLSAgICAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgMTMsIDIyNywgCi0gICAgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgMjI3LCA0NSwgCi0gICAgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIDQxLCAxMiwgCi0gICAgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIDEyLCAxMywgCi0gICAgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIDEzLCAyMjcsIAotICAgIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIDIyNywgMjgsIAotICAgIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAyNCwgMTIsIAotICAgIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAxMiwgMTMsIAotICAgIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAxMywgMjI3LCAKLSAgICAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAyMjcsIDExLCAKLSAgICAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIDEyLCAxMywgCi0gICAgMjI3LCA2LCAxMiwgMTMsIDIyNywgNSwgMTIsIDEzLCAyMjcsIDQsIDEyLCAxMywgMjI3LCAzLCAxMiwgMTMsIDIyNywgMiwgCi0gICAgMTIsIDEzLCAyMjYsIDEwNCwgMTIsIDEzLCAyMjYsIDEwMywgMTIsIDEzLCAyMjYsIDEwMiwgMTIsIDEzLCAyMjYsIDEwMSwgCi0gICAgMTIsIDEzLCAyMjYsIDEwMCwgMTIsIDEzLCAyMjYsIDk5LCAxMiwgMTMsIDIyNiwgOTgsIDEyLCAxMywgMjI2LCA5NywgMTIsIAotICAgIDEzLCAyMjYsIDk2LCAxMiwgMTMsIDIyNiwgOTUsIDEyLCAxMywgMjI2LCA5NCwgMTIsIDEzLCAyMjYsIDkzLCAxMiwgMTMsIAotICAgIDIyNiwgOTIsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCAKLSAgICA5MiwgMTIsIDEzLCAyMjQsIDkxLCAxMiwgMTMsIDIyNCwgOTAsIDEyLCAxMywgMjI0LCA4OSwgMTIsIDEzLCAyMjMsIDIyMiwgCisgICAgMTIsIDEzLCAyMzUsIDI4LCAxMiwgMTMsIDIzNSwgMjcsIDEyLCAxMywgMjM1LCAyNiwgMTIsIDEzLCAyMzUsIDI1LCAxMiwgCisgICAgMTMsIDIzNSwgMjQsIDEyLCAxMywgMjM1LCAyMywgMTIsIDEzLCAyMzUsIDIyLCAxMiwgMTMsIDIzNSwgMjEsIDEyLCAxMywgCisgICAgMjMzLCAxNTIsIDEyLCAxMywgMjMzLCAxNTEsIDEyLCAxMywgMjMzLCAxNTAsIDEyLCAxMywgMjMzLCAxNDksIDEyLCAxMywgCisgICAgMjMzLCAxNDgsIDEyLCAxMywgMjMzLCAxNDcsIDEyLCAxMywgMjMzLCAxNDYsIDEyLCAxMywgMjMzLCAxNDUsIDEyLCAxMywgCisgICAgMjMzLCAxNDQsIDEyLCAxMywgMjMzLCAxNDMsIDEyLCAxMywgMjMyLCA1NCwgMTIsIDEzLCAyMzIsIDUzLCAxMiwgMTMsIAorICAgIDIzMiwgNTIsIDEyLCAxMywgMjMyLCA1MSwgMTIsIDEzLCAyMzIsIDUwLCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCAKKyAgICA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAKKyAgICAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAKKyAgICAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAKKyAgICAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgCisgICAgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgCisgICAgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgCisgICAgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgCisgICAgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIAorICAgIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIAorICAgIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIAorICAgIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIAorICAgIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgCisgICAgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgCisgICAgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgCisgICAgMTMsIDIzMCwgMjcsIDEyLCAxMywgMjMwLCAyNiwgMTIsIDEzLCAyMzAsIDI1LCAxMiwgMTMsIDIzMCwgMjQsIDEyLCAxMywgCisgICAgMjMwLCAyMywgMTIsIDEzLCAyMzAsIDIyLCAxMiwgMTMsIDIzMCwgMjEsIDEyLCAxMywgMjMwLCAyMCwgMTIsIDEzLCAyMzAsIAorICAgIDE5LCAxMiwgMTMsIDIzMCwgMTgsIDEyLCAxMywgMjMwLCAxNywgMTIsIDEzLCAyMzAsIDE2LCAxMiwgMTMsIDIzMCwgMTUsIAorICAgIDEyLCAxMywgMjMwLCAxNCwgMTIsIDEzLCAyMzAsIDEzLCAxMiwgMTMsIDIzMCwgMTIsIDEyLCAxMywgMjMwLCAxMSwgMTIsIAorICAgIDEzLCAyMzAsIDEwLCAxMiwgMTMsIDIzMCwgOSwgMTIsIDEzLCAyMzAsIDgsIDEyLCAxMywgMjMwLCA3LCAxMiwgMTMsIDIzMCwgCisgICAgNiwgMTIsIDEzLCAyMzAsIDUsIDEyLCAxMywgMjMwLCA0LCAxMiwgMTMsIDIzMCwgMywgMTIsIDEzLCAyMzAsIDIsIDEyLCAKKyAgICAxMywgMjMwLCAxLCAxMiwgMTMsIDIzMCwgMCwgMTIsIDEzLCAyMjksIDI1NSwgMTIsIDEzLCAyMjksIDI1NCwgMTIsIDEzLCAKKyAgICAyMjksIDI1MywgMTIsIDEzLCAyMjksIDI1MiwgMTIsIDEzLCAyMjksIDI1MSwgMTIsIDEzLCAyMjksIDI1MCwgMTIsIDEzLCAKKyAgICAyMjksIDI0OSwgMTIsIDEzLCAyMjksIDI0OCwgMTIsIDEzLCAyMjksIDI0NywgMTIsIDEzLCAyMjksIDI0NiwgMTIsIDEzLCAKKyAgICAyMjksIDI0NSwgMTIsIDEzLCAyMjksIDI0NCwgMTIsIDEzLCAyMjksIDI0MywgMTIsIDEzLCAyMjksIDI0MiwgMTIsIDEzLCAKKyAgICAyMjksIDI0MSwgMTIsIDEzLCAyMjksIDI0MCwgMTIsIDEzLCAyMjksIDIzOSwgMTIsIDEzLCAyMjksIDIzOCwgMTIsIDEzLCAKKyAgICAyMjksIDIzNywgMTIsIDEzLCAyMjksIDIzNiwgMTIsIDEzLCAyMjksIDIzNSwgMTIsIDEzLCAyMjgsIDEzOSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzOCwgMTIsIDEzLCAyMjgsIDEzNywgMTIsIDEzLCAyMjgsIDEzNiwgMTIsIDEzLCAyMjgsIDEzNSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzNCwgMTIsIDEzLCAyMjgsIDEzMywgMTIsIDEzLCAyMjgsIDEzMiwgMTIsIDEzLCAyMjgsIDEzMSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzMCwgMTIsIDEzLCAyMjgsIDEyOSwgMTIsIDEzLCAyMjgsIDEyOCwgMTIsIDEzLCAyMjgsIDEyNywgMTIsIDEzLCAKKyAgICAyMjgsIDEyNiwgMTIsIDEzLCAyMjgsIDEyNSwgMTIsIDEzLCAyMjgsIDEyNCwgMTIsIDEzLCAyMjgsIDEyMywgMTIsIDEzLCAKKyAgICAyMjgsIDEyMiwgMTIsIDEzLCAyMjgsIDEyMSwgMTIsIDEzLCAyMjgsIDEyMCwgMTIsIDEzLCAyMjgsIDExOSwgMTIsIDEzLCAKKyAgICAyMjgsIDExOCwgMTIsIDEzLCAyMjcsIDI0MSwgMTIsIDEzLCAyMjcsIDI0MCwgMTIsIDEzLCAyMjcsIDIzOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzOCwgMTIsIDEzLCAyMjcsIDIzNywgMTIsIDEzLCAyMjcsIDIzNiwgMTIsIDEzLCAyMjcsIDIzNSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzNCwgMTIsIDEzLCAyMjcsIDIzMywgMTIsIDEzLCAyMjcsIDIzMiwgMTIsIDEzLCAyMjcsIDIzMSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzMCwgMTIsIDEzLCAyMjcsIDIyOSwgMTIsIDEzLCAyMjcsIDIyOCwgMTIsIDEzLCAyMjcsIDIyNywgMTIsIDEzLCAKKyAgICAyMjcsIDIyNiwgMTIsIDEzLCAyMjcsIDIyNSwgMTIsIDEzLCAyMjcsIDIyNCwgMTIsIDEzLCAyMjcsIDIyMywgMTIsIDEzLCAKKyAgICAyMjcsIDIyMiwgMTIsIDEzLCAyMjcsIDIyMSwgMTIsIDEzLCAyMjcsIDIyMCwgMTIsIDEzLCAyMjcsIDIxOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIxOCwgMTIsIDEzLCAyMjcsIDIxNywgMTIsIDEzLCAyMjcsIDIxNiwgMTIsIDEzLCAyMjcsIDgwLCAxMiwgMTMsIAorICAgIDIyNywgNzksIDEyLCAxMywgMjI3LCA3OCwgMTIsIDEzLCAyMjcsIDc3LCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCAKKyAgICA3NSwgMTIsIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAKKyAgICAxMiwgMTMsIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAKKyAgICAxMywgMjI3LCA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAKKyAgICAyMjcsIDYyLCAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgCisgICAgNTgsIDEyLCAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgCisgICAgMTIsIDEzLCAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgCisgICAgMTMsIDIyNywgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgCisgICAgMjI3LCA0NSwgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIAorICAgIDQxLCAxMiwgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIAorICAgIDEyLCAxMywgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIAorICAgIDEzLCAyMjcsIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIAorICAgIDIyNywgMjgsIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAKKyAgICAyNCwgMTIsIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAKKyAgICAxMiwgMTMsIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAKKyAgICAxMywgMjI3LCAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAKKyAgICAyMjcsIDExLCAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIAorICAgIDEyLCAxMywgMjI3LCA2LCAxMiwgMTMsIDIyNiwgMTA4LCAxMiwgMTMsIDIyNiwgMTA3LCAxMiwgMTMsIDIyNiwgMTA2LCAxMiwgCisgICAgMTMsIDIyNiwgMTA1LCAxMiwgMTMsIDIyNiwgMTA0LCAxMiwgMTMsIDIyNiwgMTAzLCAxMiwgMTMsIDIyNiwgMTAyLCAxMiwgCisgICAgMTMsIDIyNiwgMTAxLCAxMiwgMTMsIDIyNiwgMTAwLCAxMiwgMTMsIDIyNiwgOTksIDEyLCAxMywgMjI2LCA5OCwgMTIsIDEzLCAKKyAgICAyMjYsIDk3LCAxMiwgMTMsIDIyNiwgOTYsIDEyLCAxMywgMjI0LCA5OCwgMTIsIDEzLCAyMjQsIDk3LCAxMiwgMTMsIDIyNCwgCisgICAgOTYsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCA5MiwgCisgICAgMTIsIDEzLCAyMjMsIDIyNSwgMTIsIDEzLCAyMjMsIDIyNCwgMTIsIDEzLCAyMjMsIDIyMywgMTIsIDEzLCAyMjMsIDIyMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIyMSwgMTIsIDEzLCAyMjMsIDIyMCwgMTIsIDEzLCAyMjMsIDIxOSwgMTIsIDEzLCAyMjMsIDIxOCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxNywgMTIsIDEzLCAyMjMsIDIxNiwgMTIsIDEzLCAyMjMsIDIxNSwgMTIsIDEzLCAyMjMsIDIxNCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxMywgMTIsIDEzLCAyMjMsIDIxMiwgMTIsIDEzLCAyMjMsIDIxMSwgMTIsIDEzLCAyMjMsIDIxMCwgCkBAIC0xMjA5NywxNzI2ICsxMjA5NywxNzQzIEBACiAgICAgMTIsIDEzLCAyMjMsIDIwNSwgMTIsIDEzLCAyMjMsIDIwNCwgMTIsIDEzLCAyMjMsIDIwMywgMTIsIDEzLCAyMjMsIDIwMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIwMSwgMTIsIDEzLCAyMjMsIDIwMCwgMTIsIDEzLCAyMjMsIDE5OSwgMTIsIDEzLCAyMjMsIDE5OCwgCiAgICAgMTIsIDEzLCAyMjMsIDE5NywgMTIsIDEzLCAyMjMsIDE5NiwgMTIsIDEzLCAyMjMsIDE5NSwgMTIsIDEzLCAyMjMsIDE5NCwgCi0gICAgMTIsIDEzLCAyMjMsIDE5MywgMTIsIDEzLCAyMjMsIDE5MiwgMTIsIDEzLCAyMjMsIDE5MSwgMTIsIDEzLCAyMjMsIDE5MCwgCi0gICAgMTIsIDEzLCAyMjMsIDE4OSwgMTIsIDEzLCAyMjIsIDg4LCAxMiwgMTMsIDIyMiwgODcsIDEyLCAxMywgMjIyLCA4NiwgMTIsIAotICAgIDEzLCAyMjIsIDg1LCAxMiwgMTMsIDIyMiwgODQsIDEyLCAxMywgMjIyLCA4MywgMTIsIDEzLCAyMjIsIDgyLCAxMiwgMTMsIAotICAgIDIyMiwgODEsIDEyLCAxMywgMjIyLCA4MCwgMTIsIDEzLCAyMjIsIDc5LCAxMiwgMTMsIDIyMiwgNzgsIDEyLCAxMywgMjIyLCAKLSAgICA3NywgMTIsIDEzLCAyMjIsIDc2LCAxMiwgMTMsIDIyMiwgNzUsIDEyLCAxMywgMjIyLCA3NCwgMTIsIDEzLCAyMjIsIDczLCAKLSAgICAxMiwgMTMsIDIyMiwgNzIsIDEyLCAxMywgMjIyLCA3MSwgMTIsIDEzLCAyMjIsIDcwLCAxMiwgMTMsIDIyMiwgNjksIDEyLCAKLSAgICAxMywgMjIyLCA2OCwgMTIsIDEzLCAyMjIsIDY3LCAxMiwgMTMsIDIyMiwgNjYsIDEyLCAxMywgMjIyLCA2NSwgMTIsIDEzLCAKLSAgICAyMjIsIDY0LCAxMiwgMTMsIDIyMiwgNjMsIDEyLCAxMywgMjIyLCA2MiwgMTIsIDEzLCAyMjIsIDYxLCAxMiwgMTMsIDIyMiwgCi0gICAgNjAsIDEyLCAxMywgMjIyLCA1OSwgMTIsIDEzLCAyMjIsIDU4LCAxMiwgMTMsIDIyMiwgNTcsIDEyLCAxMywgMjIyLCA1NiwgCi0gICAgMTIsIDEzLCAyMjIsIDU1LCAxMiwgMTMsIDIyMiwgNTQsIDEyLCAxMywgMjIyLCA1MywgMTIsIDEzLCAyMjIsIDUyLCAxMiwgCi0gICAgMTMsIDIyMiwgNTEsIDEyLCAxMywgMjIyLCA1MCwgMTIsIDEzLCAyMjIsIDQ5LCAxMiwgMTMsIDIyMiwgNDgsIDEyLCAxMywgCi0gICAgMjIyLCA0NywgMTIsIDEzLCAyMjIsIDQ2LCAxMiwgMTMsIDIyMiwgNDUsIDEyLCAxMywgMjIyLCA0NCwgMTIsIDEzLCAyMjIsIAotICAgIDQzLCAxMiwgMTMsIDIyMiwgNDIsIDEyLCAxMywgMjIyLCA0MSwgMTIsIDEzLCAyMjIsIDQwLCAxMiwgMTMsIDIyMiwgMzksIAotICAgIDEyLCAxMywgMjIyLCAzOCwgMTIsIDEzLCAyMjIsIDM3LCAxMiwgMTMsIDIyMiwgMzYsIDEyLCAxMywgMjIyLCAzNSwgMTIsIAotICAgIDEzLCAyMTcsIDE1MCwgMTIsIDEzLCAyMTcsIDE0OSwgMTIsIDEzLCAyMTcsIDE0OCwgMTIsIDEzLCAyMTcsIDE0NywgMTIsIAotICAgIDEzLCAyMTcsIDE0NiwgMTIsIDEzLCAyMTcsIDE0NSwgMTIsIDEzLCAyMTcsIDE0NCwgMTIsIDEzLCAyMTcsIDE0MywgMTIsIAotICAgIDEzLCAyMTcsIDE0MiwgMTIsIDEzLCAyMTcsIDE0MSwgMTIsIDEzLCAyMTcsIDE0MCwgMTIsIDEzLCAyMTcsIDEzOSwgMTIsIAotICAgIDEzLCAyMTcsIDEzOCwgMTIsIDEzLCAyMTcsIDEzNywgMTIsIDEzLCAyMTcsIDEzNiwgMTIsIDEzLCAyMTcsIDEzNSwgMTIsIAotICAgIDEzLCAyMTcsIDEzNCwgMTIsIDEzLCAyMTcsIDEzMywgMTIsIDEzLCAyMTcsIDEzMiwgMTIsIDEzLCAyMTcsIDEzMSwgMTIsIAotICAgIDEzLCAyMTcsIDEzMCwgMTIsIDEzLCAyMTcsIDEyOSwgMTIsIDEzLCAyMTcsIDEyOCwgMTIsIDEzLCAyMTcsIDEyNywgMTIsIAotICAgIDEzLCAyMTcsIDEyNiwgMTIsIDEzLCAyMTcsIDEyNSwgMTIsIDEzLCAyMTcsIDEyNCwgMTIsIDEzLCAyMTcsIDEyMywgMTIsIAotICAgIDEzLCAyMTcsIDEyMiwgMTIsIDEzLCAyMTcsIDEyMSwgMTIsIDEzLCAyMTcsIDEyMCwgMTIsIDEzLCAyMTcsIDExOSwgMTIsIAotICAgIDEzLCAyMTcsIDExOCwgMTIsIDEzLCAyMTcsIDExNywgMTIsIDEzLCAyMTcsIDExNiwgMTIsIDEzLCAyMTcsIDExNSwgMTIsIAotICAgIDEzLCAyMTcsIDExNCwgMTIsIDEzLCAyMTcsIDExMywgMTIsIDEzLCAyMTcsIDExMiwgMTIsIDEzLCAyMTcsIDExMSwgMTIsIAotICAgIDEzLCAyMTcsIDExMCwgMTIsIDEzLCAyMTcsIDEwOSwgMTIsIDEzLCAyMTcsIDEwOCwgMTIsIDEzLCAyMTcsIDEwNywgMTIsIAotICAgIDEzLCAyMTUsIDIyLCAxMiwgMTMsIDIxNSwgMjEsIDEyLCAxMywgMjE1LCAyMCwgMTIsIDEzLCAyMTUsIDE5LCAxMiwgMTMsIAotICAgIDIxNSwgMTgsIDEyLCAxMywgMjE1LCAxNywgMTIsIDEzLCAyMTUsIDE2LCAxMiwgMTMsIDIxNSwgMTUsIDEyLCAxMywgMjE1LCAKLSAgICAxNCwgMTIsIDEzLCAyMTUsIDEzLCAxMiwgMTMsIDIxNSwgMTIsIDEyLCAxMywgMjE1LCAxMSwgMTIsIDEzLCAyMTUsIDEwLCAKLSAgICAxMiwgMTMsIDIxNSwgOSwgMTIsIDEzLCAyMTUsIDgsIDEyLCAxMywgMjE1LCA3LCAxMiwgMTMsIDIxNSwgNiwgMTIsIDEzLCAKLSAgICAyMTUsIDUsIDEyLCAxMywgMjE1LCA0LCAxMiwgMTMsIDIxNSwgMywgMTIsIDEzLCAyMTUsIDIsIDEyLCAxMywgMjE1LCAxLCAKLSAgICAxMiwgMTMsIDIxNSwgMCwgMTIsIDEzLCAyMTQsIDI1NSwgMTIsIDEzLCAyMTQsIDI1NCwgMTIsIDEzLCAyMTQsIDI1MywgMTIsIAotICAgIDEzLCAyMTQsIDI1MiwgMTIsIDEzLCAyMTQsIDI1MSwgMTIsIDEzLCAyMTQsIDI1MCwgMTIsIDEzLCAyMTQsIDI0OSwgMTIsIAotICAgIDEzLCAyMTQsIDI0OCwgMTIsIDEzLCAyMTQsIDI0NywgMTIsIDEzLCAyMTQsIDI0NiwgMTIsIDEzLCAyMTQsIDI0NSwgMTIsIAotICAgIDEzLCAyMTQsIDI0NCwgMTIsIDEzLCAyMTQsIDI0MywgMTIsIDEzLCAyMTQsIDI0MiwgMTIsIDEzLCAyMTQsIDI0MSwgMTIsIAotICAgIDEzLCAyMTQsIDI0MCwgMTIsIDEzLCAyMTQsIDIzOSwgMTIsIDEzLCAyMTQsIDIzOCwgMTIsIDEzLCAyMTQsIDIzNywgMTIsIAotICAgIDEzLCAyMTQsIDIzNiwgMTIsIDEzLCAyMTQsIDIzNSwgMTIsIDEzLCAyMTQsIDIzNCwgMTIsIDEzLCAyMTQsIDIzMywgMTIsIAotICAgIDEzLCAyMTQsIDIzMiwgMTIsIDEzLCAyMTQsIDEwNCwgMTIsIDEzLCAyMTQsIDEwMywgMTIsIDEzLCAyMTQsIDEwMiwgMTIsIAotICAgIDEzLCAyMTQsIDEwMSwgMTIsIDEzLCAyMTQsIDEwMCwgMTIsIDEzLCAyMTQsIDk5LCAxMiwgMTMsIDIxNCwgOTgsIDEyLCAxMywgCi0gICAgMjE0LCA5NywgMTIsIDEzLCAyMTQsIDk2LCAxMiwgMTMsIDIxNCwgOTUsIDEyLCAxMywgMjE0LCA5NCwgMTIsIDEzLCAyMTQsIAotICAgIDkzLCAxMiwgMTMsIDIxNCwgOTIsIDEyLCAxMywgMjE0LCA5MSwgMTIsIDEzLCAyMTQsIDkwLCAxMiwgMTMsIDIxNCwgODksIAotICAgIDEyLCAxMywgMjE0LCA4OCwgMTIsIDEzLCAyMTQsIDg3LCAxMiwgMTMsIDIxNCwgODYsIDEyLCAxMywgMjE0LCA4NSwgMTIsIAotICAgIDEzLCAyMTQsIDg0LCAxMiwgMTMsIDIxNCwgODMsIDEyLCAxMywgMjE0LCA4MiwgMTIsIDEzLCAyMTQsIDgxLCAxMiwgMTMsIAotICAgIDIxNCwgODAsIDEyLCAxMywgMjE0LCA3OSwgMTIsIDEzLCAyMTQsIDc4LCAxMiwgMTMsIDIxNCwgNzcsIDEyLCAxMywgMjE0LCAKLSAgICA3NiwgMTIsIDEzLCAyMTQsIDc1LCAxMiwgMTMsIDIxNCwgNzQsIDEyLCAxMywgMjE0LCA3MywgMTIsIDEzLCAyMTQsIDcyLCAKLSAgICAxMiwgMTMsIDIxNCwgNzEsIDEyLCAxMywgMjE0LCA3MCwgMTIsIDEzLCAyMTQsIDY5LCAxMiwgMTMsIDIxNCwgNjgsIDEyLCAKLSAgICAxMywgMjE0LCA2NywgMTIsIDEzLCAyMTQsIDY2LCAxMiwgMTMsIDIxNCwgNjUsIDEyLCAxMywgMjE0LCA2NCwgMTIsIDEzLCAKLSAgICAyMTQsIDYzLCAxMiwgMTMsIDIxNCwgNjIsIDEyLCAxMywgMjE0LCA2MSwgMTIsIDEzLCAyMTQsIDYwLCAxMiwgMTMsIDIxNCwgCi0gICAgNTksIDEyLCAxMywgMjE0LCA1OCwgMTIsIDEzLCAyMTQsIDU3LCAxMiwgMTMsIDIxNCwgNTYsIDEyLCAxMywgMjE0LCA1NSwgCi0gICAgMTIsIDEzLCAyMTQsIDU0LCAxMiwgMTMsIDIxNCwgNTMsIDEyLCAxMywgMjE0LCA1MiwgMTIsIDEzLCAyMTQsIDUxLCAxMiwgCi0gICAgMTMsIDIxNCwgNTAsIDEyLCAxMywgMjE0LCA0OSwgMTIsIDEzLCAyMTQsIDQ4LCAxMiwgMTMsIDIxNCwgNDcsIDEyLCAxMywgCi0gICAgMjE0LCA0NiwgMTIsIDEzLCAyMTQsIDQ1LCAxMiwgMTMsIDIxNCwgNDQsIDEyLCAxMywgMjE0LCA0MywgMTIsIDEzLCAyMTQsIAotICAgIDQyLCAxMiwgMTMsIDIxNCwgNDEsIDEyLCAxMywgMjE0LCA0MCwgMTIsIDEzLCAyMTQsIDM5LCAxMiwgMTMsIDIxNCwgMzgsIAotICAgIDEyLCAxMywgMjE0LCAzNywgMTIsIDEzLCAyMTQsIDM2LCAxMiwgMTMsIDIxNCwgMzUsIDEyLCAxMywgMjE0LCAzNCwgMTIsIAotICAgIDEzLCAyMTQsIDMzLCAxMiwgMTMsIDIxNCwgMzIsIDEyLCAxMywgMjE0LCAzMSwgMTIsIDEzLCAyMTQsIDMwLCAxMiwgMTMsIAotICAgIDIxNCwgMjksIDEyLCAxMywgMjE0LCAyOCwgMTIsIDEzLCAyMTIsIDk3LCAxMiwgMTMsIDIxMiwgOTYsIDEyLCAxMywgMjEyLCAKLSAgICA5NSwgMTIsIDEzLCAyMTIsIDk0LCAxMiwgMTMsIDIxMiwgOTMsIDEyLCAxMywgMjEyLCA5MiwgMTIsIDEzLCAyMTIsIDkxLCAKLSAgICAxMiwgMTMsIDIxMiwgOTAsIDEyLCAxMywgMjEyLCA4OSwgMTIsIDEzLCAyMTIsIDg4LCAxMiwgMTMsIDIxMiwgODcsIDEyLCAKLSAgICAxMywgMjEyLCA4NiwgMTIsIDEzLCAyMTIsIDg1LCAxMiwgMTMsIDIxMiwgODQsIDEyLCAxMywgMjEyLCA4MywgMTIsIDEzLCAKLSAgICAyMTIsIDgyLCAxMiwgMTMsIDIxMiwgODEsIDEyLCAxMywgMjEyLCA4MCwgMTIsIDEzLCAyMTIsIDc5LCAxMiwgMTMsIDIxMiwgCi0gICAgNzgsIDEyLCAxMywgMjEyLCA3NywgMTIsIDEzLCAyMTIsIDc2LCAxMiwgMTMsIDIxMiwgNzUsIDEyLCAxMywgMjEyLCA3NCwgCi0gICAgMTIsIDEzLCAyMTIsIDczLCAxMiwgMTMsIDIxMiwgNzIsIDEyLCAxMywgMjEyLCA3MSwgMTIsIDEzLCAyMTIsIDcwLCAxMiwgCi0gICAgMTMsIDIxMiwgNjksIDEyLCAxMywgMjEyLCA2OCwgMTIsIDEzLCAyMTIsIDY3LCAxMiwgMTMsIDIxMiwgNjYsIDEyLCAxMywgCi0gICAgMjExLCAxNzcsIDEyLCAxMywgMjExLCAxNzYsIDEyLCAxMywgMjExLCAxNzUsIDEyLCAxMywgMjExLCAxNzQsIDEyLCAxMywgCi0gICAgMjExLCAxNzMsIDEyLCAxMywgMjExLCAxNzIsIDEyLCAxMywgMjExLCAxNzEsIDEyLCAxMywgMjExLCAxNzAsIDEyLCAxMywgCi0gICAgMjExLCAxNjksIDEyLCAxMywgMjExLCAxNjgsIDEyLCAxMywgMjExLCAxNjcsIDEyLCAxMywgMjExLCAxNjYsIDEyLCAxMywgCi0gICAgMjExLCAxMTUsIDEyLCAxMywgMjExLCAxMTQsIDEyLCAxMywgMjExLCAxMTMsIDEyLCAxMywgMjExLCAxMTIsIDEyLCAxMywgCi0gICAgMjExLCAxMTEsIDEyLCAxMywgMjExLCAxMTAsIDEyLCAxMywgMjExLCAxMDksIDEyLCAxMywgMjExLCAxMDgsIDEyLCAxMywgCi0gICAgMjExLCAxMDcsIDEyLCAxMywgMjEwLCAxNTgsIDEyLCAxMywgMjEwLCAxNTcsIDEyLCAxMywgMjEwLCAxNTYsIDEyLCAxMywgCi0gICAgMjEwLCAxNTUsIDEyLCAxMywgMjEwLCAxNTQsIDEyLCAxMywgMjEwLCAxNTMsIDEyLCAxMywgMjEwLCAxNTIsIDEyLCAxMywgCi0gICAgMjEwLCAxNTEsIDEyLCAxMywgMjEwLCAxNTAsIDEyLCAxMywgMjEwLCAxNDksIDEyLCAxMywgMjEwLCAxNDgsIDEyLCAxMywgCi0gICAgMjEwLCAxNDcsIDEyLCAxMywgMjEwLCAxNDYsIDEyLCAxMywgMjEwLCAxNDUsIDEyLCAxMywgMjEwLCAxNDQsIDEyLCAxMywgCi0gICAgMjEwLCAxNDMsIDEyLCAxMywgMjEwLCAxNDIsIDEyLCAxMywgMjEwLCAxNDEsIDEyLCAxMywgMjEwLCAxNDAsIDEyLCAxMywgCi0gICAgMjEwLCAxMzksIDEyLCAxMywgMjEwLCAxMzgsIDEyLCAxMywgMjEwLCAxMzcsIDEyLCAxMywgMjEwLCAxMzYsIDEyLCAxMywgCi0gICAgMjEwLCAxMzUsIDEyLCAxMywgMjEwLCAxMzQsIDEyLCAxMywgMjEwLCAxMzMsIDEyLCAxMywgMjEwLCAxMzIsIDEyLCAxMywgCi0gICAgMjEwLCAxMzEsIDEyLCAxMywgMjEwLCAxMzAsIDEyLCAxMywgMjEwLCAxMjksIDEyLCAxMywgMjEwLCAxMjgsIDEyLCAxMywgCi0gICAgMjEwLCAxMjcsIDEyLCAxMywgMjEwLCAxMjYsIDEyLCAxMywgMjEwLCAxMjUsIDEyLCAxMywgMjEwLCAxMjQsIDEyLCAxMywgCi0gICAgMjEwLCAxMjMsIDEyLCAxMywgMjEwLCAxMjIsIDEyLCAxMywgMjEwLCAxMjEsIDEyLCAxMywgMjEwLCAxMjAsIDEyLCAxMywgCi0gICAgMjEwLCAxMTksIDEyLCAxMywgMjEwLCAxMTgsIDEyLCAxMywgMjU1LCA3MiwgMTIsIDEzLCAyNTUsIDcxLCAxMiwgMTMsIAotICAgIDI1NSwgNzAsIDEyLCAxMywgMjU1LCA2OSwgMTIsIDEzLCAyNTUsIDY4LCAxMiwgMTMsIDI1NSwgNjcsIDEyLCAxMywgMjU1LCAKLSAgICA2NiwgMTIsIDEzLCAyNTUsIDY1LCAxMiwgMTMsIDI1NSwgNjQsIDEyLCAxMywgMjU1LCA2MywgMTIsIDEzLCAyNTUsIDYyLCAKLSAgICAxMiwgMTMsIDI1NSwgNjEsIDEyLCAxMywgMjU1LCA2MCwgMTIsIDEzLCAyNTUsIDU5LCAxMiwgMTMsIDI1NSwgNTgsIDEyLCAKLSAgICAxMywgMjU1LCA1NywgMTIsIDEzLCAyNTUsIDU2LCAxMiwgMTMsIDI1NSwgNTUsIDEyLCAxMywgMjU1LCA1NCwgMTIsIDEzLCAKLSAgICAyNTUsIDUzLCAxMiwgMTMsIDI1NSwgNTIsIDEyLCAxMywgMjU1LCA1MSwgMTIsIDEzLCAyNTUsIDUwLCAxMiwgMTMsIDI1NSwgCi0gICAgNDksIDEyLCAxMywgMjU1LCA0OCwgMTIsIDEzLCAyNTUsIDQ3LCAxMiwgMTMsIDI1NSwgNDYsIDEyLCAxMywgMjU1LCA0NSwgCi0gICAgMTIsIDEzLCAyNTUsIDQ0LCAxMiwgMTMsIDI1NSwgNDMsIDEyLCAxMywgMjU1LCA0MiwgMTIsIDEzLCAyNTUsIDQxLCAxMiwgCi0gICAgMTMsIDI1NSwgNDAsIDEyLCAxMywgMjU1LCAzOSwgMjAsIDEsIDE2NywgMjI5LCAxMiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjQzLCA3MCwgMjQ0LCAzNiwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIzMSwgMTcsIDIyNSwgNTcsIDIwLCAxLCAxNjcsIAotICAgIDIyNCwgMjUxLCAyMzEsIDE3LCAyMjUsIDU4LCAyMCwgMSwgMTY3LCAyMjksIDIyNiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjE5LCAyMjEsIDIwLCAxLCAxNjcsIDIxNiwgNjYsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIDIyNywgMTE4LCAyMzEsIDE2LCAKLSAgICAyMCwgMSwgMTY3LCAyMjAsIDE5LCAyMjYsIDkwLCAyMjgsIDE2OSwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIyNiwgOTAsIAotICAgIDIyOCwgMTcwLCAyMjUsIDU3LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjI2LCA5MCwgMjI4LCAxNzAsIDIyNSwgNTgsIDIwLCAKLSAgICAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMTUsIDExOSwgMjMxLCAyMTksIDIwLCAxLCAxNjcsIDIyOSwgNzEsIAotICAgIDIwLCAxLCAxNjcsIDIzMSwgMjE1LCAyMCwgMSwgMTY3LCAyMzEsIDE3NiwgMjAsIDEsIDE2NywgMjMwLCA0OCwgMjAsIDEsIAotICAgIDE2NywgMjIwLCAxMjQsIDIwLCAxLCAxNjcsIDIyNywgMjQxLCAyMCwgMSwgMTY3LCAyMzQsIDE0OSwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxMzgsIDIwLCAxLCAxNjcsIDIxOCwgNCwgMjAsIDEsIDE2NywgMjI5LCAxMSwgMjAsIDEsIDE2NywgMjMzLCA4NywgCi0gICAgMjAsIDEsIDE2NywgMjMzLCAxMiwgMjMzLCAxODksIDIwLCAxLCAxNjcsIDIyNywgMjQ4LCAyMzEsIDI0LCAyMCwgMSwgMTY3LCAKLSAgICAyMzEsIDIyMiwgMjAsIDEsIDE2NywgMjI1LCAyNDYsIDIwLCAxLCAxNjcsIDI0MiwgMjMxLCAyMCwgMSwgMTY3LCAyMjYsIAotICAgIDUwLCAyMCwgMSwgMTY3LCAyMzAsIDE1MSwgMjI5LCA0NSwgMjAsIDEsIDE2NywgMjI3LCA5OSwgMjMxLCAyNywgMjAsIDEsIAotICAgIDE2NywgMTA0LCAyMTAsIDE4OCwgMjI5LCAyMjAsIDIwLCAxLCAxNjcsIDI0MiwgMjMyLCAyMCwgMSwgMTY3LCAyMjcsIDI0OCwgCi0gICAgMjI3LCAyNDksIDIwLCAxLCAxNjcsIDIxOSwgMTI4LCAyMCwgMSwgMTY3LCAyMzEsIDksIDIwLCAxLCAxNjcsIDIzMSwgMzAsIAotICAgIDIwLCAxLCAxNjcsIDIzMCwgMTMwLCAyMCwgMSwgMTY3LCAyMzQsIDI0OSwgMjAsIDEsIDE2NywgMjI2LCA5MCwgMjMzLCA0NywgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxNDksIDIzMywgNDcsIDIwLCAxLCAxNjcsIDIyNSwgMTU4LCAyMCwgMSwgMTY3LCAyMzEsIAotICAgIDIxNiwgMjAsIDEsIDE2NywgMjI4LCAyMDcsIDIwLCAxLCAxNjcsIDIyNCwgMTM0LCAyMCwgMSwgMTY3LCAyMTUsIDExNiwgCi0gICAgMjAsIDEsIDE2NywgMjMyLCA5NCwgMjAsIDEsIDE2NywgMjE5LCA0MSwgMjAsIDEsIDE2NywgMjE2LCAyMTYsIDIwLCAxLCAKLSAgICAxNjcsIDIzMSwgMjEzLCAyMCwgMSwgMTY3LCAyMzQsIDE1NiwgMjAsIDEsIDE2NywgMjI5LCAxNDUsIDIwLCAxLCAxNjcsIAotICAgIDIzMywgMjAxLCAyMCwgMSwgMTY3LCAyMzAsIDEzMSwgMjAsIDEsIDE2NywgMjE5LCAyMTgsIDIwLCAxLCAxNjcsIDIzMiwgCi0gICAgMTM4LCAyMCwgMSwgMTY3LCAyNDQsIDkzLCAyMCwgMSwgMTY3LCAyMjIsIDE5OSwgMjAsIDEsIDE2NywgMjMzLCAyNDEsIDIwLCAKLSAgICAxLCAxNjcsIDIxOSwgMzcsIDIwLCAxLCAxNjcsIDIzMSwgMTczLCAyMjUsIDk5LCAyMCwgMSwgMTY3LCAyMjAsIDEyLCAyMCwgCi0gICAgMSwgMTY3LCAyMjcsIDI0NywgMjAsIDEsIDE2NywgMjE5LCAyNTMsIDIyOCwgMiwgMjEwLCAxOTYsIDIwLCAxLCAxNjcsIAotICAgIDIyNywgMTM4LCAyMzAsIDE0OCwgMjAsIDEsIDE2NywgMjI2LCA4NSwgMjAsIDEsIDE2NywgMjI4LCAxMzksIDIwLCAxLCAKLSAgICAxNjcsIDIxNCwgMTcwLCAyMCwgMSwgMTY3LCAyMjksIDQ4LCAyMCwgMSwgMTY3LCAyMzEsIDIxMiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxODEsIDIwLCAxLCAxNjcsIDIzMSwgMTE5LCAyMCwgMSwgMTY3LCAyMjcsIDE1MSwgMjAsIDEsIDE2NywgMjE2LCAKLSAgICAyMjAsIDIwLCAxLCAxNjcsIDIxOSwgMzQsIDIwLCAxLCAxNjcsIDIyNiwgODYsIDIwLCAxLCAxNjcsIDIyOCwgNiwgMjAsIDEsIAotICAgIDE2NywgMjMxLCAyMjAsIDIwLCAxLCAxNjcsIDIyNywgMTQ4LCAyMCwgMSwgMTY3LCAyMzQsIDIxNiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCA5LCAyMCwgMSwgMTY3LCAyMTMsIDI1MCwgMjAsIDEsIDE2NywgMjMyLCA5OCwgMjAsIDEsIDE2NywgMjI5LCA5OCwgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxOTYsIDIwLCAxLCAxNjcsIDIzMSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIyOCwgNCwgMjAsIAotICAgIDEsIDIyNSwgMTM4LCAyMTUsIDExOSwgMjMxLCAyMTcsIDIwLCAxLCAyMjUsIDEzOCwgMjE5LCAxODUsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjIwLCAxMjgsIDIxNSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMiwgMTQwLCAyMjcsIDI0NCwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMzEsIDEyNSwgMjMxLCAyMjEsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCA4NywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIAotICAgIDE1LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTIwLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMjM3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyNSwgMjA4LCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgODksIDIzMywgNDcsIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAKLSAgICAxMDMsIDIyOCwgMiwgMjI3LCAxNjAsIDIwLCAxLCAyMjUsIDEzOCwgMjI3LCAyNDIsIDIyMCwgMzgsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjI5LCAxMTYsIDIyOCwgMTg0LCAyMCwgMSwgMjI1LCAxMzgsIDI0MiwgMjI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyNSwgCi0gICAgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjE1LCAxMTksIDIyOCwgMCwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDQzLCAyMjgsIAotICAgIDE3OSwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDM5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTcsIDIxNiwgMjE5LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIzMSwgMTA3LCAyMzEsIDEyMSwgMjAsIDEsIDIyNSwgMTM4LCAyMjcsIDE0OSwgMjI3LCAyNDQsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjM0LCAxNDUsIDIwLCAxLCAyMjUsIDEzOCwgMjQyLCAyMzAsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAxNDEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAxMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI1LCAyNDksIDIwLCAxLCAyMjUsIDEzOCwgCi0gICAgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAxMywgMjMwLCA0NiwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDQ3LCAKLSAgICAyMzEsIDEwMywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIDE5MywgMjAsIDEsIDIyNSwgMTM4LCAyMjIsIDExLCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIxNywgOTcsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDMyLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMzMsIDIzMywgODQsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxOSwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMTgsIDUyLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTExLCAyMCwgMSwgMjI1LCAxMzgsIDIzMCwgMTMzLCAyMCwgCi0gICAgMSwgMjI1LCAxMzgsIDIyNywgMTYzLCAyMCwgMSwgMjI1LCAxMzgsIDIyNCwgMTM4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgCi0gICAgMjgsIDIyOSwgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjQ0LCAxMjYsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCA5OCwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyNDQsIDE0NywgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDE1MywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDIzOSwgCi0gICAgMjI4LCAxNzMsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyMzksIDIyOCwgMTQ5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMywgMTEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCA1NSwgMjAsIDEsIDIyNSwgMTM4LCAyMjgsIDExLCAyMCwgMSwgMjI1LCAxMzgsIDE4NCwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDc0LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMSwgMjAsIDEsIDEzNywgMjI5LCAxMiwgCi0gICAgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIyNywgMTE3LCAyMCwgMSwgMTM3LCAyMTAsIDE5NiwgMjAsIDEsIDEzNywgMjEyLCAKLSAgICA1MywgMjAsIDEsIDEzNywgMjI5LCA0OCwgMjAsIDEsIDEzNywgMjI5LCAxMzcsIDIwLCAxLCAxMzcsIDIyOSwgMTksIDIwLCAKLSAgICAxLCAxMzcsIDI0MiwgMjM5LCAyMCwgMSwgMTM3LCAyMzEsIDExNSwgMjAsIDEsIDEzNywgMjQzLCA3NywgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAxNDAsIDIzMCwgMTcwLCAyMzEsIDMxLCAyMCwgMSwgMTM3LCAyMjcsIDI0MCwgMjMxLCAxMDYsIDIwLCAxLCAxMzcsIAotICAgIDIzMSwgMTEyLCAyMCwgMSwgMTM3LCAyMjUsIDU1LCAyMCwgMSwgMTM3LCAyMjksIDEyMiwgMjAsIDEsIDEzNywgMjMxLCAKLSAgICAxMjMsIDI1MSwgMjksIDIwLCAxLCAxMzcsIDIzNCwgMTQzLCAyMCwgMSwgMTM3LCAyNDIsIDI0MCwgMjAsIDEsIDEzNywgCi0gICAgMjM0LCAxNTAsIDIwLCAxLCAxMzcsIDIxMCwgMjEzLCAyMzAsIDc2LCAyMCwgMSwgMTM3LCAyMjcsIDExMSwgMjAsIDEsIAotICAgIDEzNywgMjMxLCAxMDAsIDIwLCAxLCAxMzcsIDIyOCwgMTAsIDIwLCAxLCAxMzcsIDIzMSwgMTA2LCAyMCwgMSwgMTM3LCAKLSAgICAyMTEsIDE2LCAyMCwgMSwgMTM3LCAyMzMsIDI0OSwgMjAsIDEsIDEzNywgMjM1LCAxMCwgMjAsIDEsIDEzNywgMjIwLCAxMjMsIAotICAgIDIwLCAxLCAxMzcsIDIyOSwgMTMxLCAyMCwgMSwgMTM3LCAyMTcsIDk1LCAyMCwgMSwgMTM3LCAyMjgsIDE1MywgMjAsIDEsIAotICAgIDEzNywgMjE2LCA2NiwgMjEwLCAxOTgsIDIwLCAxLCAxMzcsIDIxOCwgNzksIDIwLCAxLCAxMzcsIDIyOSwgMzksIDIyNywgCi0gICAgMTYwLCAyMCwgMSwgMTM3LCAyMTMsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAxOTksIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAKLSAgICAyMzQsIDE1MiwgMjAsIDEsIDEzNywgMjI3LCAyNDksIDIwLCAxLCAxMzcsIDIyOSwgMzQsIDIwLCAxLCAxMzcsIDIzMywgODgsIAotICAgIDIwLCAxLCAxMzcsIDIzMSwgMTA4LCAyMCwgMSwgMTM3LCAyMzEsIDgsIDIwLCAxLCAxMzcsIDIyNywgMjQzLCAyMCwgMSwgCi0gICAgMTM3LCAyMTYsIDIxNSwgMjAsIDEsIDEzNywgMjI5LCAzNiwgMjAsIDEsIDEzNywgMjQzLCAyMzMsIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgMTM2LCAyMCwgMSwgMTM3LCAyMjgsIDEyLCAyMCwgMSwgMTM3LCAyMjgsIDgsIDIwLCAxLCAxMzcsIDI1MSwgMTA3LCAKLSAgICAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTMsIDIwLCAxLCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgCi0gICAgMTM3LCAyMjgsIDE4MywgMjAsIDEsIDEzNywgMjMzLCAxMDIsIDIwLCAxLCAxMzcsIDIxNiwgNjQsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMjUwLCAyMjksIDEsIDIwLCAxLCAxMzcsIDIyOCwgMTc1LCAyMCwgMSwgMTM3LCAyMzQsIDE1NiwgMjAsIDEsIDEzNywgCi0gICAgMjI5LCA0MCwgMjAsIDEsIDEzNywgMjMxLCAyMTIsIDIwLCAxLCAxMzcsIDIzMSwgMTAxLCAyMCwgMSwgMTM3LCAyMzIsIDk4LCAKLSAgICAyMCwgMSwgMTM3LCAyMzMsIDE4OSwgMjAsIDEsIDEzNywgMjI4LCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMSwgMjAsIDEsIAotICAgIDEzNywgMjExLCAxODQsIDIwLCAxLCAxMzcsIDIyOSwgMzcsIDIwLCAxLCAxMzcsIDIyNywgMjUzLCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDI0NSwgMjAsIDEsIDEzNywgMjMzLCAyMDMsIDIyOCwgMTM5LCAyMCwgMSwgMTM3LCAyMjcsIDI1MSwgMjAsIDEsIAotICAgIDEzNywgMjI5LCAxNDQsIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAyMjgsIDAsIDIwLCAxLCAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgCi0gICAgMTM3LCAyMjksIDE0MywgMjAsIDEsIDEzNywgMjE5LCAyMjAsIDIwLCAxLCAxMzcsIDIyMCwgMTI2LCAyMCwgMSwgMTM3LCAKLSAgICAyMzEsIDEwOSwgMjAsIDEsIDEzNywgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIzMSwgMTE5LCAyMCwgMSwgMTM3LCAyMzQsIAotICAgIDE0NCwgMjAsIDEsIDEzNywgMjMxLCAxMTAsIDIwLCAxLCAxMzcsIDIzNCwgMTQ4LCAyMCwgMSwgMTM3LCAyMzEsIDEyMywgCi0gICAgMjI1LCAxMDMsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIDE3MSwgMjAsIDEsIDEzNywgMjMwLCAKLSAgICAyMjAsIDIwLCAxLCAxMzcsIDIzMCwgMTAwLCAyMCwgMSwgMTM3LCAyMjAsIDE1LCAyMCwgMSwgMTM3LCAyMzQsIDE2NiwgCi0gICAgMjMzLCA3MCwgMjAsIDEsIDEzNywgMjM0LCAxNjYsIDI0NCwgMTYwLCAyMCwgMSwgMTM3LCAyMjksIDY5LCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDE5NiwgMjAsIDEsIDEzNywgMjMyLCAyMDAsIDIwLCAxLCAxMzcsIDIyNSwgNjUsIDIwLCAxLCAxMzcsIDIyNSwgCi0gICAgMTk5LCAyMCwgMSwgMTM3LCAyMTYsIDIzMCwgMjAsIDEsIDEwNywgMjMxLCA5OSwgMjAsIDEsIDEwNywgMjEyLCA1MSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNjksIDIwLCAxLCAxMDcsIDIzMSwgMTYsIDIwLCAxLCAxMDcsIDIyOCwgMTY3LCAyMCwgMSwgMTA3LCAKLSAgICAyMzIsIDIzNSwgMjAsIDEsIDEwNywgMjI4LCAxNzIsIDIwLCAxLCAxMDcsIDIyOCwgNywgMjAsIDEsIDEwNywgMjI5LCA1NCwgCi0gICAgMjAsIDEsIDEwNywgMjI3LCAxNjAsIDIwLCAxLCAxMDcsIDIxMSwgMTk0LCAyMCwgMSwgMTA3LCAyMjksIDksIDIwLCAxLCAKLSAgICAxMDcsIDIyMCwgNjEsIDIwLCAxLCAxMDcsIDIyOSwgMjAsIDIwLCAxLCAxMDcsIDIzNCwgMTUxLCAyMCwgMSwgMTA3LCAyMTYsIAotICAgIDIxNywgMjAsIDEsIDEwNywgMjIwLCA0MSwgMjAsIDEsIDEwNywgMjI4LCAxODAsIDIwLCAxLCAxMDcsIDIxOCwgNTIsIDIwLCAKLSAgICAxLCAxMDcsIDIzNCwgMTU2LCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIDIwNCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzQsIDIwLCAxLCAxMDcsIDIzMSwgMjEsIDIwLCAxLCAxMDcsIDIyOSwgMTM1LCAyMCwgMSwgMTA3LCAyMzEsIAotICAgIDE4OCwgMjAsIDEsIDEwNywgMjMxLCAyNywgMjAsIDEsIDEwNywgMjIwLCAxMjUsIDIwLCAxLCAxMDcsIDIxMSwgMzksIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzQsIDE0NywgMjMxLCAxMDIsIDIwLCAxLCAxMDcsIDIyOSwgMTYsIAotICAgIDIwLCAxLCAxMDcsIDIxNSwgMTE4LCAyMCwgMSwgMTA3LCAyNDIsIDI0OCwgMjAsIDEsIDEwNywgMjI5LCA2LCAyMCwgMSwgCi0gICAgMTA3LCAyNDQsIDEyNywgMjAsIDEsIDEwNywgMjI5LCAxMzksIDIwLCAxLCAxMDcsIDIzMSwgMCwgMjAsIDEsIDEwNywgMjMzLCAKLSAgICA1LCAyMCwgMSwgMTA3LCAyMjksIDEyMSwgMjAsIDEsIDEwNywgMjMwLCAxNDcsIDIwLCAxLCAxMDcsIDIzMSwgNCwgMjAsIDEsIAotICAgIDEwNywgMjI0LCAxMTgsIDIwLCAxLCAxMDcsIDIzMSwgMiwgMjAsIDEsIDEwNywgMjMxLCAxOCwgMjAsIDEsIDEwNywgMjMyLCAKLSAgICA4NCwgMjAsIDEsIDEwNywgMjI3LCAyNTUsIDIwLCAxLCAxMDcsIDIzMSwgMTIyLCAyMCwgMSwgMTA3LCAyMzMsIDE4MCwgMjAsIAotICAgIDEsIDEwNywgMjI3LCAxNTEsIDIwLCAxLCAxMDcsIDIxNiwgMjIwLCAyMCwgMSwgMTA3LCAyMTksIDM0LCAyMCwgMSwgMTA3LCAKLSAgICAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNDgsIDIwLCAxLCAxMDcsIDIyMywgMTcwLCAyMCwgMSwgMTA3LCAyMTcsIAotICAgIDEwLCAyMCwgMSwgMTA3LCAyMjksIDE3LCAyMCwgMSwgMTA3LCAyMzEsIDIzLCAyMCwgMSwgMTA3LCAyMjcsIDI1NCwgMjAsIAotICAgIDEsIDEwNywgMjM0LCAxNDYsIDIwLCAxLCAxMDcsIDIyNSwgNTksIDIwLCAxLCAxMDcsIDIyNSwgMTUyLCAyMCwgMSwgMTA3LCAKLSAgICAyMjcsIDEyNywgMjAsIDEsIDEwNywgMjMzLCAxMSwgMjAsIDEsIDEwNywgMjI5LCA1NSwgMjAsIDEsIDEwNywgMjMxLCAyMCwgCi0gICAgMjAsIDEsIDEwNywgMjI5LCAyOSwgMjAsIDEsIDEwNywgMjEwLCAxOTMsIDIwLCAxLCAxMDcsIDIyNiwgMjEsIDIwLCAxLCAKLSAgICAxMDcsIDIxMCwgMTkyLCAyMCwgMSwgMTA3LCAyMjksIDE0NCwgMjAsIDEsIDEwNywgMjI3LCAyNDQsIDIwLCAxLCAxMDcsIAotICAgIDIxOCwgODEsIDIwLCAxLCAxMDcsIDIzMywgMjA4LCAyMCwgMSwgMTA3LCAyMjksIDQ0LCAyMCwgMSwgMTA3LCAyMjksIDE0LCAKLSAgICAyMCwgMSwgMTA3LCAyMTUsIDEwMiwgMjAsIDEsIDEwNywgMjMxLCAzMSwgMjAsIDEsIDEwNywgMjMzLCAxOTgsIDIwLCAxLCAKLSAgICAxMDcsIDIyNywgMjUyLCAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjMxLCAyMTQsIDIwLCAxLCAxMDcsIAotICAgIDIyOSwgNTMsIDIwLCAxLCAxMDcsIDIzMywgNCwgMjAsIDEsIDEwNywgMjI5LCAzNSwgMjAsIDEsIDEwNywgMjI4LCAxLCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE1MywgMjAsIDEsIDEwNywgMjQyLCAyMzMsIDIwLCAxLCAxMDcsIDIzMywgMjE3LCAyMCwgMSwgMTA3LCAKLSAgICAyMjMsIDg0LCAyMjYsIDIwOSwgMjAsIDEsIDEwNywgMjE3LCA4NiwgMjAsIDEsIDEwNywgMjE2LCAxMCwgMjAsIDEsIDEwNywgCi0gICAgMjI3LCAxNDgsIDIwLCAxLCAxMDcsIDIyMiwgMjM5LCAyMCwgMSwgMTA3LCAyMzMsIDQ5LCAyMCwgMSwgMTA3LCAyMzEsIDc5LCAKLSAgICAyMCwgMSwgMTA3LCAxOTMsIDIwLCAxLCAxMDcsIDIxOCwgNCwgMjAsIDEsIDEwNywgMjMwLCAxMDIsIDIwLCAxLCAxMDcsIAotICAgIDIyMCwgMjcsIDIwLCAxLCAxMDcsIDIyMCwgMzcsIDIwLCAxLCAxMDcsIDIzMywgMTU1LCAyMCwgMSwgMTA3LCAyMjcsIDIzNywgCi0gICAgMjAsIDEsIDEwNywgMjE5LCAyMjUsIDIwLCAxLCAxMDcsIDIyNywgMjQ2LCAyMCwgMSwgMTA3LCAyMjUsIDIxMSwgMjAsIDEsIAotICAgIDEwNywgMjI4LCAyMzMsIDIwLCAxLCAxMDcsIDIxOSwgMjUyLCAyMCwgMSwgMTA3LCAyMjQsIDEzMywgMjAsIDEsIDEwNywgCi0gICAgMjMwLCA0NiwgMjAsIDEsIDEwNywgMjMyLCAxMTksIDIwLCAxLCAxMDcsIDIyMywgODQsIDIzMCwgOTYsIDIwLCAxLCAxMDcsIAotICAgIDIxNiwgMTE3LCAyMCwgMSwgMTA3LCAyMjcsIDIzOCwgMjAsIDEsIDEwNywgMjMxLCAxMjMsIDE5OCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzIsIDIwLCAxLCAxMDcsIDI0NCwgMTk1LCAyMCwgMSwgODIsIDIyOSwgMTQzLCAyMCwgMSwgODIsIDIxNiwgMTYsIAotICAgIDIwLCAxLCA4MiwgMjMxLCAxMTIsIDIwLCAxLCA4MiwgMjMzLCA4OCwgMjAsIDEsIDgyLCAyMTMsIDEyOCwgMjAsIDEsIDgyLCAKLSAgICAyMzIsIDEyNSwgMjAsIDEsIDgyLCAyMjYsIDg5LCAyMCwgMSwgODIsIDIxOSwgNDUsIDIwLCAxLCA4MiwgMjIzLCAxNDUsIAotICAgIDIwLCAxLCA4MiwgMjI4LCAzLCAyMCwgMSwgODIsIDIyOSwgMTE0LCAyMCwgMSwgODIsIDIyNCwgMTQ3LCAyMCwgMSwgODIsIAotICAgIDIxNywgNjIsIDIwLCAxLCA4MiwgMjI5LCAyMiwgMjAsIDEsIDgyLCAyMzMsIDI0NSwgMjAsIDEsIDgyLCAyMTEsIDE4NywgCi0gICAgMjAsIDEsIDgyLCAyMjEsIDE3MCwgMjAsIDEsIDgyLCAyMjksIDQ1LCAyMCwgMSwgODIsIDIyNiwgODYsIDIwLCAxLCA4MiwgCi0gICAgMjE2LCAxNywgMjAsIDEsIDgyLCAyMzMsIDIwMiwgMjAsIDEsIDgyLCAyMzIsIDEzOSwgMjAsIDEsIDgyLCAyMjgsIDYsIDIwLCAKLSAgICAxLCA4MiwgMjI4LCAyNTQsIDIwLCAxLCA4MiwgMjMxLCAyMjAsIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMjgsIAotICAgIDI1MywgMjAsIDEsIDgyLCAyMjgsIDUsIDIwLCAxLCA4MiwgMjIyLCAyMzcsIDIwLCAxLCA4MiwgMjI4LCAxNzEsIDIwLCAxLCAKLSAgICA4MiwgMjI1LCAyMTAsIDIwLCAxLCA4MiwgMjIyLCAzMSwgMjAsIDEsIDgyLCAyMjksIDMwLCAyMCwgMSwgODIsIDIzMSwgMTAsIAotICAgIDIwLCAxLCA4MiwgMjQyLCAyMjcsIDIwLCAxLCA4MiwgMjI5LCAxOCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjAsIDEsIDgyLCAKLSAgICAyMzEsIDE3MiwgMjAsIDEsIDgyLCAyMzIsIDEyMSwgMjAsIDEsIDgyLCAyMjksIDUwLCAyMCwgMSwgODIsIDIyOSwgMTI3LCAKLSAgICAyMCwgMSwgODIsIDIxNywgODUsIDIyNywgMjQ0LCAyMCwgMSwgODIsIDIyMCwgMTI3LCAyMCwgMSwgODIsIDIyNCwgMTQzLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMTQ3LCAyMTksIDUxLCAyMCwgMSwgODIsIDIyOSwgMzgsIDIyNywgMTYwLCAyMCwgMSwgODIsIAotICAgIDIxMSwgNCwgMjAsIDEsIDgyLCAyNDIsIDIyOCwgMjAsIDEsIDgyLCAyMTUsIDExNywgMjAsIDEsIDgyLCAyMTEsIDE5LCAyMCwgCi0gICAgMSwgODIsIDIyNSwgMTYsIDIwLCAxLCA4MiwgMjE1LCAxMDcsIDIwLCAxLCA4MiwgMjM0LCAxNTQsIDIwLCAxLCA4MiwgMjE4LCAKLSAgICA4MCwgMjAsIDEsIDgyLCAyMTYsIDIxOSwgMjAsIDEsIDgyLCAyMTMsIDE4NCwgMjAsIDEsIDgyLCAyMTIsIDYsIDIwLCAxLCAKLSAgICA4MiwgMjMzLCAxMzIsIDIwLCAxLCA4MiwgMjI0LCAxNTAsIDIwLCAxLCA4MiwgMjE3LCA5NiwgMjAsIDEsIDgyLCAyNDIsIAotICAgIDI0NywgMjAsIDEsIDgyLCAyMjksIDU5LCAyMCwgMSwgODIsIDIyMCwgNDAsIDIwLCAxLCA4MiwgMjMxLCA1LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgMTE2LCAyMCwgMSwgODIsIDIyNywgMTE1LCAyMCwgMSwgODIsIDIyOCwgMTM2LCAyMCwgMSwgODIsIDI0MywgCi0gICAgNzMsIDIwLCAxLCA4MiwgMjE1LCAxMDgsIDIwLCAxLCA4MiwgMjMzLCAyMTEsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIAotICAgIDgyLCAyMjcsIDE0OSwgMjUwLCAxNiwgMjAsIDEsIDgyLCAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDIyLCAyMCwgMSwgCi0gICAgODIsIDIyOSwgMTMyLCAyMCwgMSwgODIsIDIyNSwgMTAwLCAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgCi0gICAgNiwgMjAsIDEsIDgyLCAyNDMsIDIzMywgMjAsIDEsIDgyLCAyNDMsIDcyLCAyMCwgMSwgODIsIDIyOSwgOCwgMjAsIDEsIDgyLCAKLSAgICAyMzQsIDE1NiwgMjAsIDEsIDgyLCAyMzEsIDIyMywgMjAsIDEsIDgyLCAyMjksIDIxLCAyMCwgMSwgODIsIDI0MiwgMjM0LCAKLSAgICAyMCwgMSwgODIsIDI0NCwgMTk2LCAyMCwgMSwgODIsIDIyNywgMjM5LCAyMCwgMSwgODIsIDIyNSwgMTUzLCAyMCwgMSwgODIsIAotICAgIDIxMSwgMTcsIDIwLCAxLCA4MiwgMjI5LCA0NiwgMjAsIDEsIDgyLCAyMjcsIDE0OSwgMjUyLCAyMywgMjAsIDEsIDgyLCAKLSAgICAyMjcsIDk1LCAyMCwgMSwgODIsIDIyNCwgMjQ3LCAyMCwgMSwgODIsIDIzMCwgMjIwLCAyMCwgMSwgODIsIDI0MywgMjMxLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMjIwLCAyMCwgMSwgODIsIDIzMCwgMTAwLCAyMCwgMSwgODIsIDI0MiwgMjMzLCAyMCwgMSwgODIsIAotICAgIDI0MywgMjM1LCA3MywgMjAsIDEsIDgyLCAyMzAsIDQ3LCAyMCwgMSwgODIsIDIyNCwgMTQ2LCAyMCwgMSwgODIsIDIyOSwgCi0gICAgMTAsIDIwLCAxLCA4MiwgMjMzLCAxODksIDIwLCAxLCA4MiwgMjI1LCA5NywgMjAsIDEsIDgyLCAyMjcsIDI0NywgMjAsIDEsIAotICAgIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgMzEsIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAxODcsIDIwLCAxLCA4MiwgCi0gICAgMjQzLCAyMzUsIDI1MSwgMTUsIDIwLCAxLCA4MiwgMjQ0LCAzNywgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAKLSAgICA2MSwgMjAsIDEsIDgyLCAyMTYsIDEwLCAyMCwgMSwgODIsIDc2LCAyMCwgMSwgODIsIDczLCAyMCwgMSwgODIsIDIzMywgODYsIAotICAgIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAyMywgMjAsIDEsIDgyLCAyMTcsIDEwMSwgMjAsIDEsIDgyLCAyMTcsIDUxLCAyMCwgCi0gICAgMSwgODIsIDIyOSwgMTQ3LCAyMzAsIDM0LCAyNDAsIDIzNCwgMjAsIDEsIDgyLCAyMjAsIDE1LCAyMCwgMSwgODIsIDIxMSwgCi0gICAgMTQsIDIwLCAxLCA4MiwgMjI4LCAyNDcsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgCi0gICAgMjQwLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyNDksIDE0NywgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIAotICAgIDE5NSwgMjAsIDEsIDgyLCAyMzQsIDE0MiwgMjAsIDEsIDgyLCAyMjUsIDE1MSwgMjAsIDEsIDgyLCAyMjgsIDE3NywgMjQ1LCAKLSAgICAxMDIsIDIwLCAxLCA4MiwgMjI0LCAxNDQsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNDcsIDIwLCAKLSAgICAxLCA4MiwgMjEzLCAyNTAsIDIwLCAxLCA4MiwgMjMyLCA5OCwgMjAsIDEsIDgyLCAyMzAsIDIzMCwgMjAsIDEsIDgyLCAyMjMsIAotICAgIDUxLCAyMCwgMSwgODIsIDIyMywgMTcxLCAyMCwgMSwgODIsIDIyOCwgMjQ2LCAyMCwgMSwgODIsIDIyOSwgNzcsIDIwLCAxLCAKLSAgICA4MiwgMjIwLCA3LCAyMCwgMSwgODIsIDIxOSwgMjUyLCAyMCwgMSwgODIsIDI0MywgMjM1LCAyMjMsIDg2LCAyMCwgMSwgODIsIAotICAgIDE5NywgMjAsIDEsIDgyLCAyMjUsIDEwOCwgMjAsIDEsIDgyLCAyMzIsIDExOSwgMjAsIDEsIDgyLCAyMzQsIDI4LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgNTgsIDIwLCAxLCA4MiwgMTg0LCAyMCwgMSwgODIsIDIzMSwgMTY5LCAyMCwgMSwgODIsIDIxNiwgMjIxLCAKLSAgICAyMCwgMSwgODIsIDIzNCwgOTIsIDIwLCAxLCA4MiwgMjMwLCAxNTAsIDIwLCAxLCA4MiwgMjE2LCAyNDcsIDIwLCAxLCA4MiwgCi0gICAgMjQ0LCAxNjksIDIwLCAxLCA4MiwgMjQyLCAyMjMsIDIwLCAxLCAyMjUsIDEzNywgMTc2LCAyMCwgMSwgMjI1LCAxMzcsIDcwLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMywgMjE3LCAyMCwgMSwgMjI1LCAxMzcsIDI0NSwgMjA5LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgMTA4LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgODYsIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAxNDgsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDEzNywgMjIyLCAyMzksIDIwLCAxLCAyMjUsIDEzNywgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzEsIDc5LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgMTAxLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyOSwgMTQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMTgzLCAyMCwgMSwgMjI1LCAxMzcsIDE5MywgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMTgsIDQsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCAyNywgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDE5MSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMjAsIDEyMywgMjAsIDEsIDIyNSwgMTM3LCAyMzMsIDE1NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDE1NiwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIwOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIzNywgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjgsIDE1NCwgMjAsIDEsIDIyNSwgMTM3LCAyMTAsIDIyNiwgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDIyNSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAxOTEsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCA5LCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMTUxLCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIyNywgMjQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMjExLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMjMzLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgNTEsIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAxNjUsIDIwLCAxLCAyMjUsIDEzNywgMjI5LCA3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIyOSwgNTYsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCA3LCAyMCwgMSwgMjI1LCAxMzcsIDIyNCwgMTQ3LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDI0NCwgMzcsIDIwLCAxLCAyMjUsIDEzNywgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDI0MSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDExOSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDI4LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIzMSwgMTE0LCAyMCwgMSwgMjI1LCAxMzcsIDIyMywgODMsIDIwLCAxLCAyMjUsIDEzNywgMTg0LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIzMCwgMTYxLCAyMCwgMSwgMjI1LCAxMzcsIDIzMSwgMTIyLCAyMCwgMSwgMjI1LCAxMzcsIDIxNiwgMjMwLCAyMCwgCi0gICAgMSwgMjI1LCAxMzcsIDIzMywgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIyMSwgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIxMiwgCi0gICAgMTE1LCA5NSwgMSwgMTkwLCA5NSwgMSwgMjUyLCAxOTEsIDk1LCAxLCA4LCAxOTAsIDk1LCAxLCAyMjUsIDQyLCA5NSwgMSwgCi0gICAgMTg0LCA5NSwgMSwgMjMwLCAyMzMsIDk1LCAxLCAyNTQsIDIzLCAxODQsIDk1LCAxLCAyNDQsIDE5NiwgOTUsIDEsIDIxNCwgCi0gICAgMjcsIDk1LCAxLCAyMTMsIDE3NywgOTUsIDEsIDIxNywgMTA1LCA5NSwgMSwgMjQ4LCAyMjEsIDk1LCAxLCA4LCAyMTUsIAotICAgIDE1NiwgOTUsIDEsIDgsIDIxNywgMTA1LCA5NSwgMSwgMjE1LCAxNTYsIDk1LCAxLCAyNDgsIDEzNSwgOTUsIDEsIDE5NywgCi0gICAgOTUsIDEsIDIyOCwgMjM3LCA5NSwgMSwgOCwgMjI4LCAxMTAsIDk1LCAxLCAyNTQsIDIzLCAxOTcsIDk1LCAxLCAyMjgsIAotICAgIDExMCwgOTUsIDEsIDIyOCwgOTYsIDk1LCAxLCAyMzMsIDEzNSwgOTUsIDEsIDIzMiwgNjEsIDk1LCAxLCAyMzIsIDI1NCwgCi0gICAgOTUsIDEsIDIzMiwgMjQzLCA5NSwgMSwgMjE2LCA1NiwgOTUsIDEsIDI0NywgMTUzLCA5NSwgMSwgMjE2LCA0OCwgOTUsIDEsIAotICAgIDI0NywgMTUyLCA5NSwgMSwgMTc2LCA5NSwgMSwgMjQzLCAxMzUsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDg4LCA5NSwgCi0gICAgMSwgMjI0LCA2NiwgOTUsIDEsIDIyOSwgNzcsIDk1LCAxLCAyMjksIDI4LCA5NSwgMSwgMjU0LCAyMywgMjI5LCA3NywgOTUsIAotICAgIDEsIDE2MiwgOTUsIDEsIDIxMSwgMTY1LCA5NSwgMSwgMjQyLCAyNDksIDk1LCAxLCAyNDIsIDIyNiwgOTUsIDEsIDIxNSwgCi0gICAgMTY1LCA5NSwgMSwgMjQ2LCAyNiwgOTUsIDEsIDIyNywgMTY1LCA5NSwgMSwgMjI3LCAxNTAsIDk1LCAxLCAyMTUsIDE3NSwgCi0gICAgOTUsIDEsIDI0NiwgMzMsIDk1LCAxLCA4LCAyMTUsIDE3NSwgOTUsIDEsIDgsIDI0NiwgMzMsIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE1LCAxNzUsIDk1LCAxLCAyMjAsIDEwMiwgOTUsIDEsIDIxOCwgMjIzLCA5NSwgMSwgMjEwLCA4MiwgOTUsIDEsIDIxMCwgCi0gICAgMTQsIDk1LCAxLCAyMTUsIDE4MywgOTUsIDEsIDI0NiwgMzgsIDk1LCAxLCA4LCAyMTUsIDE4MywgOTUsIDEsIDIwNiwgOTUsIAotICAgIDEsIDIxMCwgMTE2LCA5NSwgMSwgMjEwLCAxNSwgOTUsIDEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMjMsIDk1LCAxLCAKLSAgICAyNTQsIDIzLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjE1LCA5NSwgMSwgMjA5LCAyMjIsIDk1LCAxLCAyMTIsIDY1LCA5NSwgCi0gICAgMSwgMjU0LCAyMDksIDk1LCAxLCAyNDEsIDE4OSwgOTUsIDEsIDIyOSwgMTkyLCA5NSwgNSwgMjUzLCAyMjIsIDk1LCA1LCAKLSAgICAyMjMsIDEwNiwgMjEzLCAxMzMsIDk1LCA1LCAyMjMsIDEwNiwgMjUzLCAyMjIsIDk1LCAyNSwgNSwgNjEsIDk1LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgOTUsIDI1LCA1LCAyNTQsIDIwNSwgOTUsIDI1LCA1LCAyNTQsIDEyMywgOTUsIDI1LCA1LCAyNTQsIDExNSwgCi0gICAgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAyMjYsIDE4MywgOTUsIDI1LCA1LCAyMTEsIDIyNywgOTUsIDI1LCA1LCAyMTIsIAotICAgIDk4LCA5NSwgMjUsIDUsIDc1LCA5NSwgMjUsIDUsIDI0NSwgMTUwLCA5NSwgMjUsIDUsIDI0NSwgMTM4LCA5NSwgMjUsIDUsIAotICAgIDIyNiwgMjMyLCA5NSwgMjUsIDUsIDczLCA5NSwgMjUsIDUsIDI0MCwgMTE5LCA5NSwgMjUsIDUsIDI0MCwgMTE4LCA5NSwgCi0gICAgMjUsIDUsIDI0MCwgMTE3LCA5NSwgMjUsIDUsIDIzNSwgMTg5LCA5NSwgMjUsIDUsIDIzNiwgNjAsIDk1LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgOTUsIDI1LCA1LCAyMzUsIDE1NiwgOTUsIDI1LCA1LCAyMzUsIDIzMSwgOTUsIDI1LCA1LCA3MCwgOTUsIDI1LCA1LCAKLSAgICAyMTQsIDIyOSwgOTUsIDI1LCA1LCAyMTQsIDIyOCwgOTUsIDI1LCA1LCAyMTQsIDIyNywgOTUsIDI1LCA1LCAyMTQsIDExOCwgCi0gICAgOTUsIDI1LCA1LCAyMTQsIDIxMSwgOTUsIDI1LCA1LCAyMTQsIDE3OCwgOTUsIDI1LCA1LCAyMTEsIDExNywgOTUsIDI1LCA1LCAKLSAgICAyMTEsIDgsIDk1LCAyNSwgNSwgMjU0LCAyNDMsIDk1LCAyNSwgNSwgMjU0LCAyMzksIDk1LCAyNSwgNSwgMjQ1LCA4NiwgOTUsIAotICAgIDI1LCA1LCAyMjIsIDE4MywgMjQ1LCA4NiwgOTUsIDI1LCA1LCAyNDUsIDkyLCA5NSwgMjUsIDUsIDIyMiwgMTgzLCAyNDUsIAotICAgIDkyLCA5NSwgMjUsIDUsIDI1NCwgMjAxLCA5NSwgMjUsIDUsIDI0NSwgMTk1LCA5NSwgMjUsIDUsIDI1MywgMTkyLCA5NSwgCi0gICAgMjUsIDUsIDIyNiwgMTM0LCA5NSwgMjUsIDUsIDIzMCwgMjUsIDk1LCAyNSwgNSwgMjI5LCA3OSwgOTUsIDEzOCwgMjIyLCAKLSAgICAyNTEsIDk1LCAxMzgsIDIxNiwgMTQsIDIyMiwgMjUxLCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIAotICAgIDI4LCA5NSwgMSwgMjE2LCAyNywgOTUsIDEsIDIxNiwgMjYsIDk1LCAxLCAyMTYsIDI1LCA5NSwgMSwgMjE2LCAyNCwgOTUsIAotICAgIDEsIDIxNiwgMjMsIDk1LCAxLCAyMTYsIDIyLCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjksIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE2LCAyOCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI2LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjUsIDk1LCAxLCAyMjMsIAotICAgIDEwNiwgMjE2LCAyNCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDIyLCA1NiwgMSwgMjU0LCAyMywgNzUsIDE0MSwgMSwgMjU0LCAKLSAgICAyMywgMjExLCA0NywgNDksIDI4LCAxNiwgMjI0LCAxNTQsIDQ5LCAyOCwgMTYsIDI0OCwgMTU4LCA0OSwgMjgsIDE2LCAyMjUsIAotICAgIDE3NSwgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjQ3LCAyMDEsIDQ5LCAKLSAgICAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAxOTcsIDQ5LCAyOCwgMTYsIDIxNywgMTY5LCA0OSwgMjgsIDE2LCAyMjYsIDksIDQ5LCAyOCwgMTYsIDIxMCwgMjE3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTAsIDIxOCwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIzMywgMjM0LCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDY4LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjQ1LCAyNiwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIxNywgMiwgNDksIDI4LCAKLSAgICAxNiwgMjM0LCAxNjEsIDQ5LCAyOCwgMTYsIDI1NCwgNTgsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDI0NywgMjAxLCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3NSwgNDksIDI4LCAxNiwgMjE2LCAxNTksIDQ5LCAyOCwgMTYsIDIyNiwgMjA2LCAyNTQsIDIxLCA0OSwgCi0gICAgMjgsIDE2LCAyNDIsIDE1OSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI0LCAxNTMsIDQ5LCAyOCwgMTYsIDI1MCwgMTQ5LCAKLSAgICA0OSwgMjgsIDE2LCAyMTQsIDYsIDQ5LCAyOCwgMTYsIDIzNSwgMTY0LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyMSwgMjEzLCA0OSwgMjgsIDE2LCAKLSAgICAyMjYsIDAsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ2LCAyNTQsIDYxLCA0OSwgMjgsIDE2LCAyMjYsIDExMiwgMjU0LCAyMSwgNDksIAotICAgIDI4LCAxNiwgMjE0LCAxNSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA1NiwgNDksIDI4LCAxNiwgMjM0LCAzNywgNDksIDI4LCAxNiwgMjIzLCA0NiwgNDksIDI4LCAxNiwgMjI1LCAxMDYsIDI1NCwgCi0gICAgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgODMsIDQ5LCAyOCwgMTYsIDI1NCwgMTIxLCA0OSwgMjgsIDE2LCAyMjEsIDE1OSwgNDksIAotICAgIDI4LCAxNiwgMjE3LCAxNzgsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNywgMTc4LCAyMzEsIDQwLCAyMTgsIDE0NCwgNDksIAotICAgIDI4LCAxNiwgMjI2LCAxMDcsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCA0OSwgMjgsIDE2LCAyMzMsIDI3LCA0OSwgCi0gICAgMjgsIDE2LCAyNDYsIDQxLCA0OSwgMjgsIDE2LCAyMTUsIDIyNywgNDksIDI4LCAxNiwgMjE2LCAyMzIsIDQ5LCAyOCwgMTYsIAotICAgIDIzMywgMjM3LCA0OSwgMjgsIDE2LCAyNTQsIDY4LCAyNDUsIDI2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM2LCAxMiwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMjAwLCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI1LCAyMDAsIDQ5LCAyOCwgMTYsIDIyNCwgMTU4LCA0OSwgMjgsIAotICAgIDE2LCAyMzQsIDExLCA0OSwgMjgsIDE2LCAyNTAsIDgwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjMsIDE0NiwgNDksIDI4LCAKLSAgICAxNiwgMjI2LCAxMiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI2LCAxMCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjQwLCAxMDksIAotICAgIDQ5LCAyOCwgMTYsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyMjUsIDE1NiwgNDksIDI4LCAxNiwgMjM0LCAxMiwgMjU0LCAKLSAgICAxNDksIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyNTQsIDE0OSwgNDksIDI4LCAxNiwgMjE4LCAxMjMsIDQ5LCAyOCwgMTYsIAotICAgIDI0MiwgMTIzLCA0OSwgMjgsIDE2LCAyMzUsIDE2NCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAyMDYsIDIyOSwgOTUsIAotICAgIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDE1NSwgNDksIDI4LCAxNiwgMjMzLCAKLSAgICAyNTQsIDQ5LCAyOCwgMTYsIDIyNSwgMTU0LCA0OSwgMjgsIDE2LCAyMzMsIDIzNiwgNDksIDI4LCAxNiwgMjI1LCAyMDEsIAotICAgIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjEwLCAyMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDIyOSwgOTUsIDQ5LCAKLSAgICAyOCwgMTYsIDI1NCwgNjAsIDIxNywgMTc2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTAsIDIxNiwgNDksIDI4LCAxNiwgCi0gICAgMjMzLCAyMzUsIDQ5LCAyOCwgMTYsIDI0NSwgMTczLCA0OSwgMjgsIDE2LCAyNTAsIDE1MCwgNDksIDI4LCAxNiwgMjMwLCAKLSAgICAxOTgsIDIzNSwgMTYzLCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDEwNiwgMjI5LCAKLSAgICA5NSwgNDksIDI4LCAxNiwgMjI0LCAxNTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgMjAzLCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDg0LCA0OSwgMjgsIDE2LCAyMzIsIDU4LCA0OSwgMjgsIDE2LCAyMjYsIDEwLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIAotICAgIDEyLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDYwLCAyMjYsIDExLCA0OSwgMjgsIDE2LCAyMzMsIDE1MywgNDksIDI4LCAKLSAgICAxNiwgMjU0LCA4NSwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTc2LCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3OCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjE3LCAxNzAsIDQ5LCAyOCwgMTYsIDI1MCwgODAsIDIyOSwgCi0gICAgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTA2LCA0OSwgMjgsIDE2LCAyMjEsIDE2MCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxNTEsIDIzNCwgMzcsIDQ5LCAyOCwgMTYsIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE2MCwgNDksIDI4LCAxNiwgCi0gICAgMjE1LCAyMDAsIDQ5LCAyOCwgMTYsIDIxNSwgMTk3LCA0OSwgMjgsIDE2LCAyMjQsIDE1NywgNDksIDI4LCAxNiwgMjE1LCAKLSAgICAxOTUsIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OCwgNDksIDI4LCAxNiwgMjU0LCAxNCwgNDksIAotICAgIDI4LCAxNiwgMjQ1LCA2MCwgMjU0LCAxNCwgNDksIDI4LCAxNiwgMjI2LCAxMDcsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxNiwgCi0gICAgMTg5LCAyNDUsIDY5LCA0OSwgMjgsIDE2LCAyMTYsIDE4OSwgMjQ1LCAyNSwgNDksIDI4LCAxNiwgMjE2LCAxOTEsIDI1NCwgCi0gICAgNjMsIDQ5LCAyOCwgMTYsIDIxNiwgMTg0LCAyMzQsIDI0NywgMjU0LCA1NSwgNDksIDI4LCAxNiwgMjM0LCAxOTksIDQ5LCAKLSAgICAyOCwgMTYsIDI0NSwgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjExLCAxMSwgCi0gICAgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjE4LCAxNDUsIDQ5LCAyOCwgMTYsIDIzNCwgMzgsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjAyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIAotICAgIDI1NCwgMTQ5LCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjI5LCA5NSwgCi0gICAgNDksIDI4LCAxNiwgMjU0LCA2NCwgNDksIDI4LCAxNiwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIxNSwgMjEwLCA0OSwgMjgsIAotICAgIDE2LCAyMTYsIDIyNCwgNDksIDI4LCAxNiwgMjM0LCAyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyNDUsIDEzNCwgMjUwLCA3MSwgCi0gICAgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjQ2LCA0MiwgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjE1LCAyMTIsIAotICAgIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDIxNiwgMjM0LCAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAKLSAgICAyMzYsIDcsIDI1MCwgNzEsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1OSwgMjI2LCAxLCAyNTQsIDEwLCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI2LCAxLCAyNDgsIDI5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIyNSwgNDksIDI4LCAxNiwgMjQ3LCAyMjYsIDIyNiwgMSwgMjU0LCAxMSwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjI2LCAyMjYsIDEsIDI1NCwgMTEsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDI0NywgMjI2LCAyMjYsIDEsIDI0OCwgCi0gICAgMjksIDQ5LCAyOCwgMTYsIDIxNSwgMjE2LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCA0OSwgMjgsIDE2LCAyMzYsIDE0LCA0OSwgCi0gICAgMjgsIDE2LCAyNDcsIDI0NiwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIyNSwgMCwgMjU0LCAxNiwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICAyMTEsIDI1NCwgMTMsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNTQsIDE2LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjMxLCAKLSAgICAzNCwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIzMSwgNDUsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjU0LCAyMTEsIDI0MiwgMTU3LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjI1LCAwLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjMxLCAxNTEsIDIyNCwgMTY1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDI1NCwgMTUxLCAKLSAgICAyMjQsIDE2NSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgCi0gICAgMjMxLCAxNTEsIDI1NCwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjA1LCAKLSAgICAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjE3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIAotICAgIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIDIzMywgMzUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMzEsIDE1MSwgMjMzLCAzNSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyNDAsIDEwNywgNDksIAotICAgIDI4LCAxNiwgMjM1LCAxNjksIDIxNiwgMjUxLCAyNDAsIDEwOCwgNDksIDI4LCAxNiwgMjU0LCA2MCwgMjE2LCAyNTEsIDI0MCwgCi0gICAgMTA4LCA0OSwgMjgsIDE2LCAyNDQsIDE3MiwgMjE2LCAyMjUsIDQ5LCAyOCwgMTYsIDI0NCwgMTcyLCAyMzAsIDE0MywgNDksIAotICAgIDI4LCAxNiwgMjQ0LCAxNzIsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE0LCAxMCwgMjQwLCAxMDcsIDQ5LCAKLSAgICAyOCwgMTYsIDIzMSwgMTUxLCAyMjQsIDE2NCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyMTYsIAotICAgIDIyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDI0MiwgMTU1LCAyMzAsIDI2LCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1NSwgMjMwLCAyNiwgMjQ3LCAyMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTQ4LCAyMzQsIDI0NywgMjQzLCAyMzYsIDIxMywgCi0gICAgMTI0LCA0OSwgMjgsIDE2LCAyMzYsIDEzLCA0OSwgMjgsIDE2LCAyMzYsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjU0LCAKLSAgICAyMiwgMjQ4LCAyNywgMjQwLCAxMDYsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMTkwLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjI5LCAxOTgsIDI0MCwgMTA3LCAKLSAgICA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDI0OCwgMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAKLSAgICAyNDcsIDI0MywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI4LCAyMzQsIAotICAgIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOCwgMjM0LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjMxLCAxOTEsIDI1MCwgNzMsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjMxLCAxOTEsIAotICAgIDI1MCwgNzMsIDIzMCwgMTQzLCA0OSwgMjgsIDE2LCAyNDQsIDEyMiwgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgNDksIAotICAgIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAyNTAsIDczLCAyMTcsIDE3OSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIyOSwgCi0gICAgOTcsIDQ5LCAyOCwgMTYsIDI1MCwgNzQsIDIwOSwgMjQ5LCA0OSwgMjgsIDE2LCAyNTAsIDc0LCAyMzQsIDM2LCA0OSwgMjgsIAotICAgIDE2LCAyNTAsIDc0LCAyMTksIDksIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDAsIDE1NCwgMjExLCAxMCwgMjE2LCAyMjksIAotICAgIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDUsIDE0OSwgMjU0LCA4NiwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMDYsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTUsIDIwNiwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNiwgMjI5LCA0OSwgMjgsIAotICAgIDE2LCAyNDcsIDIzOCwgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMzAsIDE0MSwgCi0gICAgMjE2LCAyMzMsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjQ3LCAyMjIsIDI0NSwgMzYsIDI0NywgMTM5LCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgCi0gICAgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIzMCwgMTQxLCAyMTYsIDIzMywgMjQ3LCAKLSAgICAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjIyLCAyNDUsIDM2LCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxMCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQzLCA0OSwgMjQ3LCAyMzcsIDQ5LCAyOCwgCi0gICAgMTYsIDI0MywgNDksIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI1NCwgNjUsIDIzMCwgMTk5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjU0LCA2NSwgMjMxLCA3MywgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjE2LCAxODIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyMTYsIDE4MiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIAotICAgIDIxNiwgMTgzLCAyNDcsIDE4NiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTUsIDIwNywgNDksIDI4LCAxNiwgCi0gICAgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTYsIDIyMiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ0LCA0OSwgMjgsIDE2LCAKLSAgICAyMTksIDE2MywgMjUzLCAyNDUsIDI0NywgMTg2LCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNSwgMjA3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNiwgMjIyLCA0OSwgMjgsIDE2LCAyNDcsIDIyMywgMjQzLCAzMCwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMjksIDIyNiwgMTM0LCA0OSwgMjgsIDE2LCAyMTgsIDEzNywgNDksIDI4LCAxNiwgMjU0LCA3LCAKLSAgICAxOTAsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjEzLCAxMjQsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjQzLCAxMzUsIDQ5LCAyOCwgCi0gICAgMTYsIDI1NCwgNywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAyNTQsIDcsIAotICAgIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjI4LCAyMzMsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAKLSAgICAyMzEsIDQ0LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjMxLCA0NCwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIAotICAgIDIyOSwgOTYsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMzgsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI5LCA5NiwgMjM0LCAxOTYsIDI4LCAxNiwgMjE5LCAKLSAgICAxNTUsIDI1MiwgMTM1LCAyOCwgMTYsIDUyLCAyNTIsIDEzNSwgMjgsIDE2LCA0MCwgMjUyLCAxMzUsIDI4LCAxNiwgMjIzLCAKLSAgICA1MCwgNDAsIDI1MiwgMTM1LCAyOCwgMTYsIDI0OCwgMTU1LCAyNTIsIDEzNSwgMjgsIDE2LCAyMTksIDI1MSwgMjUyLCAxMzUsIAotICAgIDI4LCAxNiwgNDMsIDIyMywgNzcsIDUwLCAyOCwgMTYsIDQ0LCAyMjMsIDc3LCA1MCwgMjgsIDE2LCAyMjMsIDc3LCAyNDcsIAotICAgIDExOCwgMjgsIDE2LCAyNDgsIDE5NiwgMjIxLCAxNjMsIDI4LCAxNiwgMjQ4LCAyMjIsIDI1MCwgMjQ5LCAyOCwgMTYsIDIyMSwgCi0gICAgMTYzLCAyOCwgMTYsIDI0OSwgMjM0LCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTExLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgCi0gICAgMTEwLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTA5LCAyOCwgMTYsIDI0NCwgMTMxLCAyOCwgMTYsIDI0NCwgMTMyLCA1MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0OCwgNzgsIDI4LCAxNiwgMjUxLCAyNCwgMjgsIDE2LCAyNTEsIDE1OSwgMjgsIDE2LCAxMjcsIDI4LCAKLSAgICAxNiwgMjI2LCAxOTMsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNSwgNTcsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNiwgMTQyLCAyMTgsIAotICAgIDE2MywgMjgsIDE2LCAyNDQsIDEwLCAyMTgsIDE2MywgMjgsIDE2LCAyNDQsIDgwLCAyMTgsIDE2MywgMjgsIDE2LCAyMTksIAotICAgIDEyNCwgMjE4LCAxNjMsIDI4LCAxNiwgMjE5LCAxMjIsIDI0MywgMjUwLCAyOCwgMTYsIDI0NCwgOCwgMjQzLCAyNTAsIDI4LCAKLSAgICAxNiwgMjQzLCAyMDMsIDI1MCwgMTQsIDI4LCAxNiwgMjQzLCAyMDMsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIAotICAgIDE2LCAyNDMsIDIwMywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAKLSAgICAxNiwgMjQ1LCA3LCAyNTAsIDE0LCAyOCwgMTYsIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgMTYsIAotICAgIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI0NiwgODMsIDI1MCwgMTMsIDI4LCAxNiwgCi0gICAgMjQ2LCA4MywgMjUwLCAxMiwgMjgsIDE2LCAyMzAsIDg1LCAyMzEsIDkwLCAyMjMsIDYxLCAyOCwgMTYsIDUyLCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDUyLCAyNDQsIDY1LCAyOCwgMTYsIDI0NCwgNjYsIDIxNCwgMTYzLCAyOCwgMTYsIDI0NCwgNjYsIDI0NiwgCi0gICAgMTA2LCAyOCwgMTYsIDIyOSwgMTg4LCAyMTQsIDE2MywgMjgsIDE2LCAyMjksIDE4OCwgMjQ2LCAxMDYsIDI4LCAxNiwgMjIwLCAKLSAgICA3NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjIwLCA3NiwgMjQ2LCAxMDYsIDI4LCAxNiwgMjI0LCAyMiwgMTM4LCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDIyNCwgMjIsIDEzOCwgMjQ0LCA2NSwgMjgsIDE2LCAyNDksIDIxNiwgMjE2LCA4NywgMjgsIDE2LCAyNDksIAotICAgIDg1LCAyMTYsIDg3LCAyOCwgMTYsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAKLSAgICAxNiwgMjI0LCA0LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjQsIDQsIDI1MiwgMTIyLCAyOCwgMTYsIDIzMCwgODgsIDIyMywgNjEsIAotICAgIDI4LCAxNiwgMjExLCAyNTEsIDIyMywgNjEsIDI4LCAxNiwgMTYzLCAyMjMsIDYxLCAyOCwgMTYsIDIyNCwgMjIsIDIyMywgCi0gICAgNjEsIDI4LCAxNiwgMjQ1LCAxODksIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTgsIDIyMywgNjEsIDI4LCAxNiwgMjE2LCAKLSAgICAxNjAsIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTAsIDIyMywgNjEsIDI4LCAxNiwgMTIzLCAyNDAsIDIxMSwgMjE1LCA3MSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA5NiwgMjI4LCA0MywgMjgsIDE2LCAyNTAsIDM2LCAKLSAgICAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA0MiwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgNDIsIDIyOCwgNDQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAKLSAgICAyMjgsIDQ0LCAxMjAsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0MywgMjExLCAyNTMsIDI4LCAxNiwgCi0gICAgMjE1LCAyMjYsIDIyOCwgNDQsIDQzLCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDQsIDIxMSwgMjUzLCAKLSAgICAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIAotICAgIDIyOCwgNDQsIDEyMCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDQ0LCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzAsIDEyOSwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjMwLCAxMjksIDIyOCwgNDQsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIyNiwgNCwgMjI4LCA0MywgMjgsIDE2LCAyMTMsIDEzMiwgMjI4LCA0MywgMjgsIDE2LCAKLSAgICAyMjgsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMjcsIDIwMywgMjI4LCA0MywgMjgsIDE2LCAyNDksIDI0MSwgMjI4LCA0NCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjQ5LCAyNDEsIDIyOCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDI1MSwgMTQ2LCAyOCwgMTYsIAotICAgIDIxMSwgMjUxLCAyMjgsIDQ3LCAyOCwgMTYsIDE2MywgMjI4LCA0NywgMjgsIDE2LCAyMjQsIDIyLCAyMjgsIDQ3LCAyOCwgCi0gICAgMTYsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyOCwgMTYsIDIxOSwgMTE4LCAyMjgsIDQ3LCAyOCwgMTYsIDIxNiwgMTYwLCAyMjgsIAotICAgIDQ3LCAyOCwgMTYsIDIxOSwgMTEwLCAyMjgsIDQ3LCAyOCwgMTYsIDEyMywgMjQwLCAyMTEsIDIxNSwgNzEsIDIyOCwgNDcsIAotICAgIDI4LCAxNiwgMzgsIDIxOCwgMTM5LCAyOCwgMTYsIDM4LCAyMTgsIDI0MCwgMjE4LCAxMzksIDI4LCAxNiwgMzgsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjE1LCAyMzIsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAyMzIsIDI4LCAxNiwgMzgsIAotICAgIDI1MywgMTg5LCAyNDcsIDEyMCwgMjgsIDE2LCAzOCwgMjQ0LCA3MiwgMjgsIDE2LCAzOCwgMjQ0LCA3MSwgMjgsIDE2LCAzOCwgCi0gICAgMjQ0LCA3MCwgMjgsIDE2LCAzOCwgMjQ0LCA2OSwgMjgsIDE2LCAzOCwgMjQ0LCA2OCwgMjgsIDE2LCAyNTIsIDU4LCAyNTIsIAotICAgIDc0LCAyOCwgMTYsIDI0NSwgMTQzLCAyNTIsIDc0LCAyOCwgMTYsIDI1MiwgNTgsIDIxNiwgMTExLCAyOCwgMTYsIDI0NSwgCi0gICAgMTQzLCAyMTYsIDExMSwgMjgsIDE2LCAyNTIsIDU4LCAyMTksIDgwLCAyOCwgMTYsIDI0NSwgMTQzLCAyMTksIDgwLCAyOCwgCi0gICAgMTYsIDI1MiwgNTgsIDIyNSwgMTE1LCAyOCwgMTYsIDI0NSwgMTQzLCAyMjUsIDExNSwgMjgsIDE2LCAzOCwgMjU1LCAxNCwgCi0gICAgMjgsIDE2LCAzOCwgMjE4LCAxNjUsIDI4LCAxNiwgMzgsIDIxNiwgMjM4LCAyOCwgMTYsIDM4LCAyMTgsIDE2NiwgMjgsIDE2LCAKLSAgICAzOCwgMjMxLCAxNjIsIDI4LCAxNiwgMzgsIDIzMSwgMTYxLCAyOCwgMTYsIDM4LCAyNTUsIDEzLCAyOCwgMTYsIDM4LCAyMzIsIAotICAgIDExMiwgMjgsIDE2LCAyNTMsIDI1NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjUzLCAyNTQsIDI0NiwgMTA2LCAyOCwgMTYsIDM4LCAKLSAgICAyNDcsIDEzNSwgMjgsIDE2LCAzOCwgMjIyLCAyMzEsIDI4LCAxNiwgMzgsIDI0NCwgNTgsIDI4LCAxNiwgMzgsIDIxOSwgNzYsIAotICAgIDI4LCAxNiwgMzgsIDI1MiwgMzgsIDI4LCAxNiwgMzgsIDUyLCAyMTYsIDE5LCAyOCwgMTYsIDM4LCAyMTUsIDIxMSwgMjE2LCAKLSAgICAxOSwgMjgsIDE2LCAyMjIsIDIzNSwgMjgsIDE2LCAyMTgsIDc1LCAyOCwgMTYsIDIxMCwgMTU5LCAyOCwgMTYsIDIyNSwgCi0gICAgMTA3LCAyOCwgMTYsIDIzMSwgMjUsIDI4LCAxNiwgMjQ0LCAxNywgMjgsIDE2LCAyNDksIDEzOCwgMjgsIDE2LCAyNDgsIDc4LCAKLSAgICAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMTksIDk1LCAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMjgsIDc1LCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDIxNiwgMCwgMjgsIDE2LCAyMTUsIDk1LCAyOCwgMTYsIDIzNSwgMTkzLCAyMTUsIDk1LCAyOCwgCi0gICAgMTYsIDIxNSwgOTYsIDIxOSwgOTUsIDI4LCAxNiwgMjE1LCA5NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgCi0gICAgMTAyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk5LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgCi0gICAgMTQ4LCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk1LCAyOCwgCi0gICAgMTYsIDIyNiwgMTQ4LCAyMTgsIDk0LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDkzLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIAotICAgIDkyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDEwMSwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAxMDAsIDI4LCAxNiwgMjQxLCAKLSAgICAyNDUsIDI4LCAxNiwgMjI5LCAxMDUsIDI4LCAxNiwgMjQ1LCAxNDMsIDY0LCAyMTgsIDEzMywgMjgsIDE2LCAyNDgsIDcxLCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTY5LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTY5LCAyOCwgMTYsIAotICAgIDM4LCAyNDIsIDAsIDI4LCAxNiwgMzgsIDIxOSwgNjcsIDIyNSwgNDMsIDI4LCAxNiwgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIAotICAgIDIyNSwgMjE2LCAxMjAsIDc4LCAyOCwgMTYsIDE2MywgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIDI0MiwgMTgyLCAyMTQsIDE2MywgCi0gICAgMjgsIDE2LCAyNDIsIDE4MiwgMjQ2LCAxMDYsIDI4LCAxNiwgMiwgMjQ0LCAxMDAsIDI4LCAxNiwgMjQ4LCAxODAsIDI4LCAKLSAgICAxNiwgMjQ4LCAxODEsIDI1NCwgMTU0LCAyOCwgMTYsIDIzMSwgMTMzLCAyOCwgMTYsIDIzMiwgMTI5LCAyOCwgMTYsIDI1MSwgCi0gICAgMTQzLCAyOCwgMTYsIDIyMCwgMTU0LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjMwLCAKLSAgICAxODQsIDI4LCAxNiwgMjMwLCAxODUsIDI1MSwgMjIxLCAyOCwgMTYsIDIyMCwgMTQ4LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIAotICAgIDE0OCwgMjUxLCAyMjEsIDI4LCAxNiwgMjQzLCAyMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjIwLCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzIsIDEzMCwgMjI1LCAxODAsIDIyMywgNjEsIDI4LCAxNiwgMjMyLCAxMzAsIDIzNiwgNCwgMjIzLCA2MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0NCwgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE1NCwgMjIzLCA2MSwgMjgsIDE2LCAyMzAsIDE4NSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE0OCwgMjIzLCA2MSwgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAKLSAgICAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgCi0gICAgMywgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxODAsIDI0NywgMjExLCAKLSAgICAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIAotICAgIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIDMsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIAotICAgIDIyNCwgMTc0LCAyMzYsIDQsIDI0NywgMjExLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgCi0gICAgMjM2LCA0LCAyNDcsIDIxMCwgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgNCwgCi0gICAgMjQ3LCAyMDksIDI4LCAxNiwgMjQ5LCAxMzMsIDI4LCAxNiwgMjQyLCAxMjYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAxNiwgCi0gICAgMjQyLCAxMjYsIDI0NSwgNywgMjUwLCAxNCwgMjgsIDE2LCA0MiwgMjUzLCAxNTgsIDI4LCAxNiwgMjEzLCAxNTEsIDI4LCAKLSAgICAxNiwgMjI1LCAxNCwgMjgsIDE2LCAyNTAsIDUsIDI4LCAxNiwgMjIxLCAyMDMsIDI4LCAxNiwgMjUwLCA5LCAyOCwgMTYsIAotICAgIDIxNiwgNywgMjgsIDE2LCAyMjQsIDI0MiwgMjgsIDE2LCAyMjQsIDI0MywgMjQ0LCA2MCwgMjgsIDE2LCAyMjEsIDIwNCwgCi0gICAgMjQ0LCA2MCwgMjgsIDE2LCAyMTYsIDgsIDIyMywgNTgsIDI4LCAxNiwgMjI1LCAxNjMsIDIxOCwgNjYsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE4LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMDgsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIwMSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkzLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAxODcsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4NiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMTg1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyOCwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjI3LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIyNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjMsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyMiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjIxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMjAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE3LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMTYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjE0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTMsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MiwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMTkxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDE4OSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjksIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxOCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAxLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4NiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg1LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMjcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyNiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjI1LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyMSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjIwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIxNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTIsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxMSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMDksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA2LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMDUsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjAzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDIsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMCwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTk5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5NywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTUsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE5NCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTkyLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5MCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg5LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxODgsIDM4LCAyNiwgMjgsIDIxNSwgMjA4LCAzOCwgMjYsIDI4LCAyMTYsIDIyMywgMzgsIDI2LCAKLSAgICAyOCwgMjI1LCAxODgsIDI2LCAyOCwgMjMzLCAzMSwgMjMwLCAxNDIsIDMxLCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDEsIAotICAgIDIyMiwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQwLCAyMTQsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIyLCAKLSAgICAyNDEsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMiwgMjQwLCAyMTMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjMsIDE4MCwgCi0gICAgMzEsIDI1MCwgMTc0LCAxODAsIDMxLCAyNDMsIDIyOSwgMjUwLCAzNSwgMTgwLCAzMSwgMjMwLCAxNzcsIDE4MCwgMzEsIAotICAgIDI1MiwgMTMwLCAxODAsIDMxLCAyMzQsIDE3OSwgMjE5LCA3OSwgMTgwLCAzMSwgMjQ5LCAxNzksIDE4MCwgMzEsIDI1MywgCi0gICAgMjMzLCAxODAsIDMxLCAyMjYsIDE2MywgMTgwLCAzMSwgMjUxLCAxNTMsIDIyNiwgMTMwLCAxODAsIDMxLCAyNDgsIDczLCAKLSAgICAxNzcsIDI0NywgMTc5LCAxODAsIDMxLCAyNDcsIDE3NiwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgMjQ3LCAKLSAgICAxODAsIDMxLCAyMjUsIDE5NywgMTgwLCAzMSwgMjIzLCAxMjcsIDE4MCwgMzEsIDI0OSwgMTg5LCAxODAsIDMxLCAyNDEsIAotICAgIDYwLCAyNTIsIDE4NCwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCAzOSwgMTgwLCAzMSwgMjU0LCAyNDYsIDE4MCwgCi0gICAgMzEsIDIyMywgODksIDE4MCwgMzEsIDIyMywgNjUsIDE4MCwgMzEsIDI0NSwgMjIxLCAxODAsIDMxLCAyMzUsIDUzLCAxODAsIAotICAgIDMxLCAyNDksIDE4NCwgMTgwLCAzMSwgMjQ1LCAxNDIsIDE4MCwgMzEsIDI0NiwgNTIsIDE4MCwgMzEsIDI1MCwgMTQ1LCAKLSAgICAxODAsIDMxLCAyNDgsIDgyLCAxODAsIDMxLCAyMywgMjIzLCA2NCwgMTgwLCAzMSwgMjI2LCA4MSwgMTgwLCAzMSwgMjMzLCAKLSAgICAzNCwgMTgwLCAzMSwgMjQ5LCAyNTQsIDE4MCwgMzEsIDIzNCwgNzcsIDE4MCwgMzEsIDI0MywgODYsIDE4MCwgMzEsIDIxOCwgCi0gICAgMTEyLCAxODAsIDMxLCAyMjQsIDEzMCwgMTgwLCAzMSwgMjQzLCAyMjgsIDE4MCwgMzEsIDIyMywgNjYsIDE4MCwgMzEsIAotICAgIDIzMywgNzEsIDE3NywgMjMwLCAxNTcsIDE4MCwgMzEsIDIyMywgNjIsIDE4MCwgMzEsIDI0MiwgMTY4LCAyMTYsIDQyLCAKLSAgICAyMzEsIDc2LCAxODAsIDMxLCAyNDUsIDE0NCwgMTgwLCAzMSwgMjE4LCAxMjQsIDE4MCwgMzEsIDI0MiwgMTI4LCAxODAsIAotICAgIDMxLCAyNDUsIDEzNiwgMTgwLCAzMSwgMjI1LCAyMzUsIDE4MCwgMzEsIDIyMiwgMjI1LCAxODAsIDMxLCAyNDQsIDU5LCAKLSAgICAxODAsIDMxLCAyMTQsIDgsIDE3NywgMjEyLCA0NCwgMTgwLCAzMSwgMjQ5LCAxOTMsIDE4MCwgMzEsIDIzMSwgODksIDE4MCwgCi0gICAgMzEsIDI0NSwgNjEsIDE4MCwgMzEsIDIxNCwgMTcyLCAxODAsIDMxLCAyNDcsIDIxMiwgMTgwLCAzMSwgMjUwLCAwLCAyMzAsIAotICAgIDExMCwgMTgwLCAzMSwgMjQyLCAxMDYsIDE4MCwgMzEsIDI0MywgODcsIDIzNSwgMjU1LCAxODAsIDMxLCAyMzEsIDE0MSwgCi0gICAgMTgwLCAzMSwgMjU1LCAxMCwgMTgwLCAzMSwgMjQ1LCAxNTcsIDE4MCwgMzEsIDI0NiwgMTA5LCAxODAsIDMxLCAyMTIsIDQyLCAKLSAgICAxODAsIDMxLCAyMTksIDE1MCwgMTgwLCAzMSwgMjM1LCAyMjIsIDE4MCwgMzEsIDI0OCwgNDIsIDE4MCwgMzEsIDI0OCwgCi0gICAgMTYwLCAxODAsIDMxLCAyNDcsIDIwOCwgMTgwLCAzMSwgMjQ1LCAyOSwgMTgwLCAzMSwgMjIwLCAxMTUsIDE4MCwgMzEsIAotICAgIDIxOCwgMTI4LCAxODAsIDMxLCAyNDIsIDIsIDE4MCwgMzEsIDI0OSwgMjEyLCAxODAsIDMxLCAyNDksIDI1MSwgMTgwLCAzMSwgCi0gICAgMjQ0LCAxNzcsIDE4MCwgMzEsIDI1NCwgMjEyLCAxODAsIDMxLCAyNDksIDIxMSwgMTgwLCAzMSwgMjI2LCAxOTcsIDIxNiwgCi0gICAgMTk2LCAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyMzIsIDE4MCwgMzEsIDIzMywgMTI0LCAxODAsIDMxLCAyNDQsIDEzLCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgCi0gICAgMTA1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAKLSAgICAyMSwgMTYxLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgCi0gICAgMTc0LCAyMSwgMTk0LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIAotICAgIDIxNCwgMTc0LCAyMSwgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMjAwLCAyNDksIDE0OSwgMjIyLCAKLSAgICAyMDIsIDIxNiwgMjQzLCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTA1LCAyNDksIDE0OSwgCi0gICAgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTYxLCAyNDksIAotICAgIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk0LCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgCi0gICAgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMjAwLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIAotICAgIDI1MywgMTU4LCAxMSwgMjMsIDYsIDI1MSwgNjYsIDExLCAyMywgNiwgMjQ5LCA2MCwgMTEsIDIzLCA2LCA3NSwgMTEsIDIzLCAKLSAgICA2LCAyNDUsIDYsIDExLCAyMywgNiwgMjQzLCAyMDIsIDExLCAyMywgNiwgMjQyLCA2MCwgMTEsIDIzLCA2LCA3MywgMTEsIAotICAgIDIzLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDYsIDE1NiwgMTEsIDIzLCA2LCAxOTMsIDExLCAKLSAgICAyMywgNiwgMjMwLCAyNSwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCA2LCAyMjQsIDk2LCAKLSAgICAxMSwgMjMsIDYsIDE1MywgMTEsIDIzLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDYsIDcwLCAKLSAgICAxMSwgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDYsIDIxMiwgOTgsIDExLCAyMywgNiwgMjExLCAxNzgsIDExLCAyMywgNiwgCi0gICAgMjExLCAxMTcsIDExLCAyMywgNiwgMjEwLCAxNTksIDExLCAyMywgNCwgNjEsIDExLCAyMywgNCwgMjUzLCAxNTgsIDExLCAKLSAgICAyMywgNCwgMjUxLCA2NiwgMTEsIDIzLCA0LCAyNDksIDYwLCAxMSwgMjMsIDQsIDc1LCAxMSwgMjMsIDQsIDI0NSwgNiwgMTEsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDIzLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDQsIDczLCAxMSwgMjMsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDQsIDIzNSwgMjMsIDExLCAyMywgNCwgMTU2LCAxMSwgMjMsIDQsIDE5MywgMTEsIDIzLCA0LCAyMzAsIDI1LCAKLSAgICAxMSwgMjMsIDQsIDc2LCAxMSwgMjMsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDQsIDIyNCwgOTYsIDExLCAyMywgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDQsIDIyMiwgOTEsIDExLCAyMywgNCwgMjE3LCAxNTIsIDExLCAyMywgNCwgNzAsIDExLCAyMywgNCwgMjE0LCAKLSAgICAxMDUsIDExLCAyMywgNCwgMjEyLCA5OCwgMTEsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCA0LCAyMTEsIDExNywgMTEsIAotICAgIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDMyLCA2LCA2MSwgMTEsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDMyLCA2LCAyNTEsIDY2LCAKLSAgICAxMSwgMzIsIDYsIDI0OSwgNjAsIDExLCAzMiwgNiwgNzUsIDExLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzIsIDYsIDI0MywgCi0gICAgMjAyLCAxMSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzMiwgNiwgNzMsIDExLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzMiwgNiwgCi0gICAgMjM1LCAyMywgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTkzLCAxMSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzMiwgNiwgCi0gICAgNzYsIDExLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgCi0gICAgMjIyLCA5MSwgMTEsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDMyLCA2LCA3MCwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCAKLSAgICA2LCAyMTIsIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTU4LCAxMSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzMiwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDMyLCA0LCA3NSwgMTEsIDMyLCA0LCAyNDUsIDYsIDExLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAzMiwgCi0gICAgNCwgNzMsIDExLCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzMiwgNCwgMjM1LCAyMywgMTEsIDMyLCA0LCAxNTYsIDExLCAzMiwgCi0gICAgNCwgMTkzLCAxMSwgMzIsIDQsIDIzMCwgMjUsIDExLCAzMiwgNCwgNzYsIDExLCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzMiwgCi0gICAgNCwgMjI0LCA5NiwgMTEsIDMyLCA0LCAxNTMsIDExLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIAotICAgIDMyLCA0LCA3MCwgMTEsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzIsIDQsIDIxMSwgMTc4LCAKLSAgICAxMSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA2LCA2MSwgMTEsIDIzLCAzMiwgCi0gICAgNiwgMjUzLCAxNTgsIDExLCAyMywgMzIsIDYsIDI1MSwgNjYsIDExLCAyMywgMzIsIDYsIDI0OSwgNjAsIDExLCAyMywgMzIsIAotICAgIDYsIDc1LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDYsIDExLCAyMywgMzIsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyNDIsIDYwLCAxMSwgMjMsIDMyLCA2LCA3MywgMTEsIDIzLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAyMywgMzIsIDYsIDIzNSwgCi0gICAgMjMsIDExLCAyMywgMzIsIDYsIDE1NiwgMTEsIDIzLCAzMiwgNiwgMTkzLCAxMSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgCi0gICAgMjMsIDMyLCA2LCA3NiwgMTEsIDIzLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAyMywgCi0gICAgMzIsIDYsIDE1MywgMTEsIDIzLCAzMiwgNiwgMjIyLCA5MSwgMTEsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIDExLCAyMywgMzIsIAotICAgIDYsIDcwLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjExLCAxNzgsIDExLCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgNjEsIDExLCAyMywgMzIsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMjMsIDMyLCA0LCA3NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMjMsIDMyLCA0LCAyNDMsIAotICAgIDIwMiwgMTEsIDIzLCAzMiwgNCwgMjQyLCA2MCwgMTEsIDIzLCAzMiwgNCwgNzMsIDExLCAyMywgMzIsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5MywgMTEsIDIzLCAKLSAgICAzMiwgNCwgMjMwLCAyNSwgMTEsIDIzLCAzMiwgNCwgNzYsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjQsIDk2LCAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTEsIDExLCAyMywgMzIsIDQsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDMyLCA0LCA3MCwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgCi0gICAgOTgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDY2LCAxMSwgMTE5LCA2LCAyNDksIDYwLCAxMSwgMTE5LCAKLSAgICA2LCAyNDMsIDIwMiwgMTEsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAxMTksIDYsIDIzNSwgMjMsIDExLCAxMTksIDYsIDIzMCwgCi0gICAgMjUsIDExLCAxMTksIDYsIDc2LCAxMSwgMTE5LCA2LCAyMjYsIDEwNSwgMTEsIDExOSwgNiwgMjI0LCA5NiwgMTEsIDExOSwgCi0gICAgNiwgMjIyLCA5MSwgMTEsIDExOSwgNiwgMjE3LCAxNTIsIDExLCAxMTksIDYsIDcwLCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgCi0gICAgMTEsIDExOSwgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCAKLSAgICA2LCAyMTAsIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMTE5LCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMTE5LCA0LCAyNDksIDYwLCAxMSwgMTE5LCA0LCAyNDUsIDYsIDExLCAxMTksIDQsIDI0MiwgNjAsIDExLCAxMTksIDQsIAotICAgIDczLCAxMSwgMTE5LCA0LCAyMzUsIDE0NCwgMTEsIDExOSwgNCwgMjM1LCAyMywgMTEsIDExOSwgNCwgMTU2LCAxMSwgMTE5LCAKLSAgICA0LCAxOTMsIDExLCAxMTksIDQsIDIzMCwgMjUsIDExLCAxMTksIDQsIDIyNiwgMTA1LCAxMSwgMTE5LCA0LCAyMjQsIDk2LCAKLSAgICAxMSwgMTE5LCA0LCAxNTMsIDExLCAxMTksIDQsIDIyMiwgOTEsIDExLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMTE5LCA0LCAKLSAgICA3MCwgMTEsIDExOSwgNCwgMjE0LCAxMDUsIDExLCAxMTksIDQsIDIxMiwgOTgsIDExLCAxMTksIDQsIDIxMSwgMTc4LCAxMSwgCi0gICAgMTE5LCA0LCAyMTEsIDExNywgMTEsIDExOSwgNCwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA2LCA2MSwgMTEsIDIzLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgNiwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDYsIDI0OSwgNjAsIDExLCAyMywgCi0gICAgMTE5LCA2LCA3NSwgMTEsIDIzLCAxMTksIDYsIDI0NSwgNiwgMTEsIDIzLCAxMTksIDYsIDI0MywgMjAyLCAxMSwgMjMsIAotICAgIDExOSwgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIDYsIDczLCAxMSwgMjMsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAyMywgCi0gICAgMTE5LCA2LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNiwgMTU2LCAxMSwgMjMsIDExOSwgNiwgMTkzLCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDYsIDc2LCAxMSwgMjMsIDExOSwgNiwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNiwgMTUzLCAxMSwgMjMsIDExOSwgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNiwgNzAsIDExLCAyMywgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxMiwgOTgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA0LCA2MSwgMTEsIDIzLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgCi0gICAgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDQsIDI0OSwgNjAsIDExLCAyMywgMTE5LCA0LCA3NSwgMTEsIDIzLCAxMTksIDQsIAotICAgIDI0NSwgNiwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjAyLCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIAotICAgIDQsIDczLCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNDQsIDExLCAyMywgMTE5LCA0LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNCwgCi0gICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTkzLCAxMSwgMjMsIDExOSwgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDQsIDc2LCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA0LCAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNCwgNzAsIAorICAgIDEyLCAxMywgMjIzLCAxOTMsIDEyLCAxMywgMjIzLCAxOTIsIDEyLCAxMywgMjIyLCA5MCwgMTIsIDEzLCAyMjIsIDg5LCAxMiwgCisgICAgMTMsIDIyMiwgODgsIDEyLCAxMywgMjIyLCA4NywgMTIsIDEzLCAyMjIsIDg2LCAxMiwgMTMsIDIyMiwgODUsIDEyLCAxMywgCisgICAgMjIyLCA4NCwgMTIsIDEzLCAyMjIsIDgzLCAxMiwgMTMsIDIyMiwgODIsIDEyLCAxMywgMjIyLCA4MSwgMTIsIDEzLCAyMjIsIAorICAgIDgwLCAxMiwgMTMsIDIyMiwgNzksIDEyLCAxMywgMjIyLCA3OCwgMTIsIDEzLCAyMjIsIDc3LCAxMiwgMTMsIDIyMiwgNzYsIAorICAgIDEyLCAxMywgMjIyLCA3NSwgMTIsIDEzLCAyMjIsIDc0LCAxMiwgMTMsIDIyMiwgNzMsIDEyLCAxMywgMjIyLCA3MiwgMTIsIAorICAgIDEzLCAyMjIsIDcxLCAxMiwgMTMsIDIyMiwgNzAsIDEyLCAxMywgMjIyLCA2OSwgMTIsIDEzLCAyMjIsIDY4LCAxMiwgMTMsIAorICAgIDIyMiwgNjcsIDEyLCAxMywgMjIyLCA2NiwgMTIsIDEzLCAyMjIsIDY1LCAxMiwgMTMsIDIyMiwgNjQsIDEyLCAxMywgMjIyLCAKKyAgICA2MywgMTIsIDEzLCAyMjIsIDYyLCAxMiwgMTMsIDIyMiwgNjEsIDEyLCAxMywgMjIyLCA2MCwgMTIsIDEzLCAyMjIsIDU5LCAKKyAgICAxMiwgMTMsIDIyMiwgNTgsIDEyLCAxMywgMjIyLCA1NywgMTIsIDEzLCAyMjIsIDU2LCAxMiwgMTMsIDIyMiwgNTUsIDEyLCAKKyAgICAxMywgMjIyLCA1NCwgMTIsIDEzLCAyMjIsIDUzLCAxMiwgMTMsIDIyMiwgNTIsIDEyLCAxMywgMjIyLCA1MSwgMTIsIDEzLCAKKyAgICAyMjIsIDUwLCAxMiwgMTMsIDIyMiwgNDksIDEyLCAxMywgMjIyLCA0OCwgMTIsIDEzLCAyMjIsIDQ3LCAxMiwgMTMsIDIyMiwgCisgICAgNDYsIDEyLCAxMywgMjIyLCA0NSwgMTIsIDEzLCAyMjIsIDQ0LCAxMiwgMTMsIDIyMiwgNDMsIDEyLCAxMywgMjIyLCA0MiwgCisgICAgMTIsIDEzLCAyMjIsIDQxLCAxMiwgMTMsIDIyMiwgNDAsIDEyLCAxMywgMjIyLCAzOSwgMTIsIDEzLCAyMjIsIDM4LCAxMiwgCisgICAgMTMsIDIyMiwgMzcsIDEyLCAxMywgMjE3LCAxNTEsIDEyLCAxMywgMjE3LCAxNTAsIDEyLCAxMywgMjE3LCAxNDksIDEyLCAKKyAgICAxMywgMjE3LCAxNDgsIDEyLCAxMywgMjE3LCAxNDcsIDEyLCAxMywgMjE3LCAxNDYsIDEyLCAxMywgMjE3LCAxNDUsIDEyLCAKKyAgICAxMywgMjE3LCAxNDQsIDEyLCAxMywgMjE3LCAxNDMsIDEyLCAxMywgMjE3LCAxNDIsIDEyLCAxMywgMjE3LCAxNDEsIDEyLCAKKyAgICAxMywgMjE3LCAxNDAsIDEyLCAxMywgMjE3LCAxMzksIDEyLCAxMywgMjE3LCAxMzgsIDEyLCAxMywgMjE3LCAxMzcsIDEyLCAKKyAgICAxMywgMjE3LCAxMzYsIDEyLCAxMywgMjE3LCAxMzUsIDEyLCAxMywgMjE3LCAxMzQsIDEyLCAxMywgMjE3LCAxMzMsIDEyLCAKKyAgICAxMywgMjE3LCAxMzIsIDEyLCAxMywgMjE3LCAxMzEsIDEyLCAxMywgMjE3LCAxMzAsIDEyLCAxMywgMjE3LCAxMjksIDEyLCAKKyAgICAxMywgMjE3LCAxMjgsIDEyLCAxMywgMjE3LCAxMjcsIDEyLCAxMywgMjE3LCAxMjYsIDEyLCAxMywgMjE3LCAxMjUsIDEyLCAKKyAgICAxMywgMjE3LCAxMjQsIDEyLCAxMywgMjE3LCAxMjMsIDEyLCAxMywgMjE3LCAxMjIsIDEyLCAxMywgMjE3LCAxMjEsIDEyLCAKKyAgICAxMywgMjE3LCAxMjAsIDEyLCAxMywgMjE3LCAxMTksIDEyLCAxMywgMjE3LCAxMTgsIDEyLCAxMywgMjE3LCAxMTcsIDEyLCAKKyAgICAxMywgMjE3LCAxMTYsIDEyLCAxMywgMjE3LCAxMTUsIDEyLCAxMywgMjE3LCAxMTQsIDEyLCAxMywgMjE3LCAxMTMsIDEyLCAKKyAgICAxMywgMjE3LCAxMTIsIDEyLCAxMywgMjE3LCAxMTEsIDEyLCAxMywgMjE3LCAxMTAsIDEyLCAxMywgMjE3LCAxMDksIDEyLCAKKyAgICAxMywgMjE3LCAxMDgsIDEyLCAxMywgMjE1LCAyMiwgMTIsIDEzLCAyMTUsIDIxLCAxMiwgMTMsIDIxNSwgMjAsIDEyLCAxMywgCisgICAgMjE1LCAxOSwgMTIsIDEzLCAyMTUsIDE4LCAxMiwgMTMsIDIxNSwgMTcsIDEyLCAxMywgMjE1LCAxNiwgMTIsIDEzLCAyMTUsIAorICAgIDE1LCAxMiwgMTMsIDIxNSwgMTQsIDEyLCAxMywgMjE1LCAxMywgMTIsIDEzLCAyMTUsIDEyLCAxMiwgMTMsIDIxNSwgMTEsIAorICAgIDEyLCAxMywgMjE1LCAxMCwgMTIsIDEzLCAyMTUsIDksIDEyLCAxMywgMjE1LCA4LCAxMiwgMTMsIDIxNSwgNywgMTIsIDEzLCAKKyAgICAyMTUsIDYsIDEyLCAxMywgMjE1LCA1LCAxMiwgMTMsIDIxNSwgNCwgMTIsIDEzLCAyMTUsIDMsIDEyLCAxMywgMjE1LCAyLCAKKyAgICAxMiwgMTMsIDIxNSwgMSwgMTIsIDEzLCAyMTUsIDAsIDEyLCAxMywgMjE0LCAyNTUsIDEyLCAxMywgMjE0LCAyNTQsIDEyLCAKKyAgICAxMywgMjE0LCAyNTMsIDEyLCAxMywgMjE0LCAyNTIsIDEyLCAxMywgMjE0LCAyNTEsIDEyLCAxMywgMjE0LCAyNTAsIDEyLCAKKyAgICAxMywgMjE0LCAyNDksIDEyLCAxMywgMjE0LCAyNDgsIDEyLCAxMywgMjE0LCAyNDcsIDEyLCAxMywgMjE0LCAyNDYsIDEyLCAKKyAgICAxMywgMjE0LCAyNDUsIDEyLCAxMywgMjE0LCAyNDQsIDEyLCAxMywgMjE0LCAyNDMsIDEyLCAxMywgMjE0LCAyNDIsIDEyLCAKKyAgICAxMywgMjE0LCAyNDEsIDEyLCAxMywgMjE0LCAyNDAsIDEyLCAxMywgMjE0LCAyMzksIDEyLCAxMywgMjE0LCAyMzgsIDEyLCAKKyAgICAxMywgMjE0LCAyMzcsIDEyLCAxMywgMjE0LCAyMzYsIDEyLCAxMywgMjE0LCAyMzUsIDEyLCAxMywgMjE0LCAyMzQsIDEyLCAKKyAgICAxMywgMjE0LCAyMzMsIDEyLCAxMywgMjE0LCAyMzIsIDEyLCAxMywgMjE0LCAxMDQsIDEyLCAxMywgMjE0LCAxMDMsIDEyLCAKKyAgICAxMywgMjE0LCAxMDIsIDEyLCAxMywgMjE0LCAxMDEsIDEyLCAxMywgMjE0LCAxMDAsIDEyLCAxMywgMjE0LCA5OSwgMTIsIAorICAgIDEzLCAyMTQsIDk4LCAxMiwgMTMsIDIxNCwgOTcsIDEyLCAxMywgMjE0LCA5NiwgMTIsIDEzLCAyMTQsIDk1LCAxMiwgMTMsIAorICAgIDIxNCwgOTQsIDEyLCAxMywgMjE0LCA5MywgMTIsIDEzLCAyMTQsIDkyLCAxMiwgMTMsIDIxNCwgOTEsIDEyLCAxMywgMjE0LCAKKyAgICA5MCwgMTIsIDEzLCAyMTQsIDg5LCAxMiwgMTMsIDIxNCwgODgsIDEyLCAxMywgMjE0LCA4NywgMTIsIDEzLCAyMTQsIDg2LCAKKyAgICAxMiwgMTMsIDIxNCwgODUsIDEyLCAxMywgMjE0LCA4NCwgMTIsIDEzLCAyMTQsIDgzLCAxMiwgMTMsIDIxNCwgODIsIDEyLCAKKyAgICAxMywgMjE0LCA4MSwgMTIsIDEzLCAyMTQsIDgwLCAxMiwgMTMsIDIxNCwgNzksIDEyLCAxMywgMjE0LCA3OCwgMTIsIDEzLCAKKyAgICAyMTQsIDc3LCAxMiwgMTMsIDIxNCwgNzYsIDEyLCAxMywgMjE0LCA3NSwgMTIsIDEzLCAyMTQsIDc0LCAxMiwgMTMsIDIxNCwgCisgICAgNzMsIDEyLCAxMywgMjE0LCA3MiwgMTIsIDEzLCAyMTQsIDcxLCAxMiwgMTMsIDIxNCwgNzAsIDEyLCAxMywgMjE0LCA2OSwgCisgICAgMTIsIDEzLCAyMTQsIDY4LCAxMiwgMTMsIDIxNCwgNjcsIDEyLCAxMywgMjE0LCA2NiwgMTIsIDEzLCAyMTQsIDY1LCAxMiwgCisgICAgMTMsIDIxNCwgNjQsIDEyLCAxMywgMjE0LCA2MywgMTIsIDEzLCAyMTQsIDYyLCAxMiwgMTMsIDIxNCwgNjEsIDEyLCAxMywgCisgICAgMjE0LCA2MCwgMTIsIDEzLCAyMTQsIDU5LCAxMiwgMTMsIDIxNCwgNTgsIDEyLCAxMywgMjE0LCA1NywgMTIsIDEzLCAyMTQsIAorICAgIDU2LCAxMiwgMTMsIDIxNCwgNTUsIDEyLCAxMywgMjE0LCA1NCwgMTIsIDEzLCAyMTQsIDUzLCAxMiwgMTMsIDIxNCwgNTIsIAorICAgIDEyLCAxMywgMjE0LCA1MSwgMTIsIDEzLCAyMTQsIDUwLCAxMiwgMTMsIDIxNCwgNDksIDEyLCAxMywgMjE0LCA0OCwgMTIsIAorICAgIDEzLCAyMTQsIDQ3LCAxMiwgMTMsIDIxNCwgNDYsIDEyLCAxMywgMjE0LCA0NSwgMTIsIDEzLCAyMTQsIDQ0LCAxMiwgMTMsIAorICAgIDIxNCwgNDMsIDEyLCAxMywgMjE0LCA0MiwgMTIsIDEzLCAyMTQsIDQxLCAxMiwgMTMsIDIxNCwgNDAsIDEyLCAxMywgMjE0LCAKKyAgICAzOSwgMTIsIDEzLCAyMTQsIDM4LCAxMiwgMTMsIDIxNCwgMzcsIDEyLCAxMywgMjE0LCAzNiwgMTIsIDEzLCAyMTQsIDM1LCAKKyAgICAxMiwgMTMsIDIxNCwgMzQsIDEyLCAxMywgMjE0LCAzMywgMTIsIDEzLCAyMTQsIDMyLCAxMiwgMTMsIDIxNCwgMzEsIDEyLCAKKyAgICAxMywgMjE0LCAzMCwgMTIsIDEzLCAyMTQsIDI5LCAxMiwgMTMsIDIxNCwgMjgsIDEyLCAxMywgMjEyLCA5NywgMTIsIDEzLCAKKyAgICAyMTIsIDk2LCAxMiwgMTMsIDIxMiwgOTUsIDEyLCAxMywgMjEyLCA5NCwgMTIsIDEzLCAyMTIsIDkzLCAxMiwgMTMsIDIxMiwgCisgICAgOTIsIDEyLCAxMywgMjEyLCA5MSwgMTIsIDEzLCAyMTIsIDkwLCAxMiwgMTMsIDIxMiwgODksIDEyLCAxMywgMjEyLCA4OCwgCisgICAgMTIsIDEzLCAyMTIsIDg3LCAxMiwgMTMsIDIxMiwgODYsIDEyLCAxMywgMjEyLCA4NSwgMTIsIDEzLCAyMTIsIDg0LCAxMiwgCisgICAgMTMsIDIxMiwgODMsIDEyLCAxMywgMjEyLCA4MiwgMTIsIDEzLCAyMTIsIDgxLCAxMiwgMTMsIDIxMiwgODAsIDEyLCAxMywgCisgICAgMjEyLCA3OSwgMTIsIDEzLCAyMTIsIDc4LCAxMiwgMTMsIDIxMiwgNzcsIDEyLCAxMywgMjEyLCA3NiwgMTIsIDEzLCAyMTIsIAorICAgIDc1LCAxMiwgMTMsIDIxMiwgNzQsIDEyLCAxMywgMjEyLCA3MywgMTIsIDEzLCAyMTIsIDcyLCAxMiwgMTMsIDIxMiwgNzEsIAorICAgIDEyLCAxMywgMjEyLCA3MCwgMTIsIDEzLCAyMTIsIDY5LCAxMiwgMTMsIDIxMiwgNjgsIDEyLCAxMywgMjEyLCA2NywgMTIsIAorICAgIDEzLCAyMTIsIDY2LCAxMiwgMTMsIDIxMSwgMTc3LCAxMiwgMTMsIDIxMSwgMTc2LCAxMiwgMTMsIDIxMSwgMTc1LCAxMiwgCisgICAgMTMsIDIxMSwgMTc0LCAxMiwgMTMsIDIxMSwgMTczLCAxMiwgMTMsIDIxMSwgMTcyLCAxMiwgMTMsIDIxMSwgMTcxLCAxMiwgCisgICAgMTMsIDIxMSwgMTcwLCAxMiwgMTMsIDIxMSwgMTY5LCAxMiwgMTMsIDIxMSwgMTY4LCAxMiwgMTMsIDIxMSwgMTY3LCAxMiwgCisgICAgMTMsIDIxMSwgMTY2LCAxMiwgMTMsIDIxMSwgMTE1LCAxMiwgMTMsIDIxMSwgMTE0LCAxMiwgMTMsIDIxMSwgMTEzLCAxMiwgCisgICAgMTMsIDIxMSwgMTEyLCAxMiwgMTMsIDIxMSwgMTExLCAxMiwgMTMsIDIxMSwgMTEwLCAxMiwgMTMsIDIxMSwgMTA5LCAxMiwgCisgICAgMTMsIDIxMSwgMTA4LCAxMiwgMTMsIDIxMSwgMTA3LCAxMiwgMTMsIDIxMCwgMTU4LCAxMiwgMTMsIDIxMCwgMTU3LCAxMiwgCisgICAgMTMsIDIxMCwgMTU2LCAxMiwgMTMsIDIxMCwgMTU1LCAxMiwgMTMsIDIxMCwgMTU0LCAxMiwgMTMsIDIxMCwgMTUzLCAxMiwgCisgICAgMTMsIDIxMCwgMTUyLCAxMiwgMTMsIDIxMCwgMTUxLCAxMiwgMTMsIDIxMCwgMTUwLCAxMiwgMTMsIDIxMCwgMTQ5LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ4LCAxMiwgMTMsIDIxMCwgMTQ3LCAxMiwgMTMsIDIxMCwgMTQ2LCAxMiwgMTMsIDIxMCwgMTQ1LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ0LCAxMiwgMTMsIDIxMCwgMTQzLCAxMiwgMTMsIDIxMCwgMTQyLCAxMiwgMTMsIDIxMCwgMTQxLCAxMiwgCisgICAgMTMsIDIxMCwgMTQwLCAxMiwgMTMsIDIxMCwgMTM5LCAxMiwgMTMsIDIxMCwgMTM4LCAxMiwgMTMsIDIxMCwgMTM3LCAxMiwgCisgICAgMTMsIDIxMCwgMTM2LCAxMiwgMTMsIDIxMCwgMTM1LCAxMiwgMTMsIDIxMCwgMTM0LCAxMiwgMTMsIDIxMCwgMTMzLCAxMiwgCisgICAgMTMsIDIxMCwgMTMyLCAxMiwgMTMsIDIxMCwgMTMxLCAxMiwgMTMsIDIxMCwgMTMwLCAxMiwgMTMsIDIxMCwgMTI5LCAxMiwgCisgICAgMTMsIDIxMCwgMTI4LCAxMiwgMTMsIDIxMCwgMTI3LCAxMiwgMTMsIDIxMCwgMTI2LCAxMiwgMTMsIDIxMCwgMTI1LCAxMiwgCisgICAgMTMsIDIxMCwgMTI0LCAxMiwgMTMsIDIxMCwgMTIzLCAxMiwgMTMsIDIxMCwgMTIyLCAxMiwgMTMsIDIxMCwgMTIxLCAxMiwgCisgICAgMTMsIDIxMCwgMTIwLCAxMiwgMTMsIDIxMCwgMTE5LCAxMiwgMTMsIDIxMCwgMTE4LCAxMiwgMTMsIDI1NSwgODEsIDEyLCAKKyAgICAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgMTIsIDEzLCAKKyAgICAyNTUsIDc2LCAxMiwgMTMsIDI1NSwgNzUsIDEyLCAxMywgMjU1LCA3NCwgMTIsIDEzLCAyNTUsIDczLCAxMiwgMTMsIDI1NSwgCisgICAgNzIsIDEyLCAxMywgMjU1LCA3MSwgMTIsIDEzLCAyNTUsIDcwLCAxMiwgMTMsIDI1NSwgNjksIDEyLCAxMywgMjU1LCA2OCwgCisgICAgMTIsIDEzLCAyNTUsIDY3LCAxMiwgMTMsIDI1NSwgNjYsIDEyLCAxMywgMjU1LCA2NSwgMTIsIDEzLCAyNTUsIDY0LCAxMiwgCisgICAgMTMsIDI1NSwgNjMsIDEyLCAxMywgMjU1LCA2MiwgMTIsIDEzLCAyNTUsIDYxLCAxMiwgMTMsIDI1NSwgNjAsIDEyLCAxMywgCisgICAgMjU1LCA1OSwgMTIsIDEzLCAyNTUsIDU4LCAxMiwgMTMsIDI1NSwgNTcsIDEyLCAxMywgMjU1LCA1NiwgMTIsIDEzLCAyNTUsIAorICAgIDU1LCAxMiwgMTMsIDI1NSwgNTQsIDEyLCAxMywgMjU1LCA1MywgMTIsIDEzLCAyNTUsIDUyLCAxMiwgMTMsIDI1NSwgNTEsIAorICAgIDEyLCAxMywgMjU1LCA1MCwgMTIsIDEzLCAyNTUsIDQ5LCAxMiwgMTMsIDI1NSwgNDgsIDIwLCAxLCAxNjcsIDIyOSwgMTcsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDI0MywgNzcsIDI0NCwgNDQsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMzEsIDIyLCAKKyAgICAyMjUsIDYwLCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjMxLCAyMiwgMjI1LCA2MSwgMjAsIDEsIDE2NywgMjI5LCAyMzEsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDIxOSwgMjIzLCAyMCwgMSwgMTY3LCAyMTYsIDY3LCAyMzEsIDIxLCAyMCwgMSwgMTY3LCAKKyAgICAyMjcsIDEyMiwgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjIwLCAyMSwgMjI2LCA5NCwgMjI4LCAxNzQsIDIwLCAxLCAxNjcsIAorICAgIDIyNCwgMjU0LCAyMjYsIDk0LCAyMjgsIDE3NSwgMjI1LCA2MCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIyNiwgOTQsIDIyOCwgCisgICAgMTc1LCAyMjUsIDYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMywgMjAsIDEsIDE2NywgMjE1LCAxMjAsIDIzMSwgMjI0LCAyMCwgCisgICAgMSwgMTY3LCAyMjksIDc2LCAyMCwgMSwgMTY3LCAyMzEsIDIyMCwgMjAsIDEsIDE2NywgMjMxLCAxODEsIDIwLCAxLCAxNjcsIAorICAgIDIzMCwgNTMsIDIwLCAxLCAxNjcsIDIyMCwgMTI2LCAyMCwgMSwgMTY3LCAyMjcsIDI0NiwgMjAsIDEsIDE2NywgMjM0LCAKKyAgICAxNTUsIDIwLCAxLCAxNjcsIDIyOCwgMTQzLCAyMCwgMSwgMTY3LCAyMTgsIDUsIDIwLCAxLCAxNjcsIDIyOSwgMTYsIDIwLCAKKyAgICAxLCAxNjcsIDIzMywgOTMsIDIwLCAxLCAxNjcsIDIzMywgMTgsIDIzMywgMTk1LCAyMCwgMSwgMTY3LCAyMjcsIDI1MywgCisgICAgMjMxLCAyOSwgMjAsIDEsIDE2NywgMjMxLCAyMjcsIDIwLCAxLCAxNjcsIDIyNSwgMjUwLCAyMCwgMSwgMTY3LCAyNDIsIAorICAgIDIzOCwgMjAsIDEsIDE2NywgMjI2LCA1NCwgMjAsIDEsIDE2NywgMjMwLCAxNTYsIDIyOSwgNTAsIDIwLCAxLCAxNjcsIDIyNywgCisgICAgMTAzLCAyMzEsIDMyLCAyMCwgMSwgMTY3LCAxMDQsIDIxMCwgMTg4LCAyMjksIDIyNSwgMjAsIDEsIDE2NywgMjQyLCAyMzksIAorICAgIDIwLCAxLCAxNjcsIDIyNywgMjUzLCAyMjcsIDI1NCwgMjAsIDEsIDE2NywgMjE5LCAxMzAsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTQsIDIwLCAxLCAxNjcsIDIzMSwgMzUsIDIwLCAxLCAxNjcsIDIzMCwgMTM1LCAyMCwgMSwgMTY3LCAyMzQsIDI1NSwgMjAsIAorICAgIDEsIDE2NywgMjI2LCA5NCwgMjMzLCA1MywgMjAsIDEsIDE2NywgMjI5LCAxNTQsIDIzMywgNTMsIDIwLCAxLCAxNjcsIDIyNSwgCisgICAgMTYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMSwgMjAsIDEsIDE2NywgMjI4LCAyMTIsIDIwLCAxLCAxNjcsIDIyNCwgMTM3LCAKKyAgICAyMCwgMSwgMTY3LCAyMTUsIDExNywgMjAsIDEsIDE2NywgMjMyLCA5OSwgMjAsIDEsIDE2NywgMjE5LCA0MywgMjAsIDEsIAorICAgIDE2NywgMjE2LCAyMTcsIDIwLCAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMzQsIDE2MiwgMjAsIDEsIDE2NywgCisgICAgMjI5LCAxNTAsIDIwLCAxLCAxNjcsIDIzMywgMjA3LCAyMCwgMSwgMTY3LCAyMzAsIDEzNiwgMjAsIDEsIDE2NywgMjE5LCAKKyAgICAyMjAsIDIwLCAxLCAxNjcsIDIzMiwgMTQ0LCAyMCwgMSwgMTY3LCAyNDQsIDEwMSwgMjAsIDEsIDE2NywgMjIyLCAyMDEsIAorICAgIDIwLCAxLCAxNjcsIDIzMywgMjQ3LCAyMCwgMSwgMTY3LCAyMTksIDM5LCAyMCwgMSwgMTY3LCAyMzEsIDE3OCwgMjI1LCAKKyAgICAxMDIsIDIwLCAxLCAxNjcsIDIyMCwgMTQsIDIwLCAxLCAxNjcsIDIyNywgMjUyLCAyMCwgMSwgMTY3LCAyMTksIDI1NSwgCisgICAgMjI4LCA3LCAyMTAsIDE5NiwgMjAsIDEsIDE2NywgMjI3LCAxNDIsIDIzMCwgMTUzLCAyMCwgMSwgMTY3LCAyMjYsIDg5LCAKKyAgICAyMCwgMSwgMTY3LCAyMjgsIDE0NCwgMjAsIDEsIDE2NywgMjE0LCAxNzAsIDIwLCAxLCAxNjcsIDIyOSwgNTMsIDIwLCAxLCAKKyAgICAxNjcsIDIzMSwgMjE3LCAyMCwgMSwgMTY3LCAyMjgsIDE4NiwgMjAsIDEsIDE2NywgMjMxLCAxMjQsIDIwLCAxLCAxNjcsIAorICAgIDIyNywgMTU1LCAyMCwgMSwgMTY3LCAyMTYsIDIyMSwgMjAsIDEsIDE2NywgMjE5LCAzNiwgMjAsIDEsIDE2NywgMjI2LCA5MCwgCisgICAgMjAsIDEsIDE2NywgMjI4LCAxMSwgMjAsIDEsIDE2NywgMjMxLCAyMjUsIDIwLCAxLCAxNjcsIDIyNywgMTUyLCAyMCwgMSwgCisgICAgMTY3LCAyMzQsIDIyMiwgMjAsIDEsIDE2NywgMjI4LCAxNCwgMjAsIDEsIDE2NywgMjEzLCAyNTAsIDIwLCAxLCAxNjcsIAorICAgIDIzMiwgMTAzLCAyMCwgMSwgMTY3LCAyMjksIDEwMywgMjAsIDEsIDE2NywgMjI5LCAyMDEsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTIzLCAyMCwgMSwgMjI1LCAxNDEsIDIyOCwgOSwgMjAsIDEsIDIyNSwgMTQxLCAyMTUsIDEyMCwgMjMxLCAyMjIsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjE5LCAxODcsIDIwLCAxLCAyMjUsIDE0MSwgMjIwLCAxMzAsIDIxNSwgMTE5LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMiwgMTQ2LCAyMjcsIDI0OSwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDEzMCwgMjMxLCAyMjYsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjM0LCA5MywgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE1LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTI1LCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzNCwgMjQzLCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgMjExLCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgODksIDIzMywgCisgICAgNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMDksIDIyOCwgNywgMjI3LCAxNjQsIDIwLCAxLCAyMjUsIDE0MSwgMjI3LCAKKyAgICAyNDcsIDIyMCwgNDAsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxMjEsIDIyOCwgMTg5LCAyMCwgMSwgMjI1LCAxNDEsIDI0MiwgCisgICAgMjM2LCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgNTIsIDIwLCAxLCAyMjUsIDE0MSwgMjE1LCAxMjAsIDIyOCwgNSwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjAsIDQ1LCAyMjgsIDE4NCwgMjAsIDEsIDIyNSwgMTQxLCAyMjAsIDQxLCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMSwgMjIsIDIxNiwgMjIwLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTEyLCAyMzEsIDEyNiwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMjcsIDE1MywgMjI3LCAyNDksIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTEsIDIwLCAxLCAyMjUsIDE0MSwgMjQyLCAyMzcsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNDcsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjI1LCAyNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxOCwgMjMwLCA1MSwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDUyLCAyMzEsIDEwOCwgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE5MywgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjIsIDEzLCAyMCwgMSwgMjI1LCAxNDEsIDIxNywgOTgsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAzNCwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDM3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMzgsIDIzMywgOTAsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAyNCwgMjAsIDEsIDIyNSwgMTQxLCAyMTgsIDUzLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTE2LCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIzMCwgMTM4LCAyMCwgMSwgMjI1LCAxNDEsIDIyNywgMTY3LCAyMCwgMSwgMjI1LCAxNDEsIDIyNCwgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMzMsIDIyOSwgNTQsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxMzQsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAxMDMsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxNTUsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTksIDIwLCAKKyAgICAxLCAyMjUsIDE0MSwgMjMxLCAyNDQsIDIyOCwgMTc4LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMjQ0LCAyMjgsIDE1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQxLCAyMzMsIDE3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNjAsIDIwLCAxLCAyMjUsIDE0MSwgMjI4LCAxNiwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAxODYsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCA4MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDYsIAorICAgIDIwLCAxLCAxMzcsIDIyOSwgMTcsIDIzMSwgMjI0LCAyMCwgMSwgMTM3LCAyMjcsIDEyMSwgMjAsIDEsIDEzNywgMjEwLCAKKyAgICAxOTYsIDIwLCAxLCAxMzcsIDIxMiwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgMTQyLCAyMCwgCisgICAgMSwgMTM3LCAyMjksIDI0LCAyMCwgMSwgMTM3LCAyNDIsIDI0NiwgMjAsIDEsIDEzNywgMjMxLCAxMjAsIDIwLCAxLCAxMzcsIAorICAgIDI0MywgODQsIDIwLCAxLCAxMzcsIDIyNywgMTQ0LCAyMzAsIDE3NSwgMjMxLCAzNiwgMjAsIDEsIDEzNywgMjI3LCAyNDUsIAorICAgIDIzMSwgMTExLCAyMCwgMSwgMTM3LCAyMzEsIDExNywgMjAsIDEsIDEzNywgMjI1LCA1OCwgMjAsIDEsIDEzNywgMjI5LCAKKyAgICAxMjcsIDIwLCAxLCAxMzcsIDIzMSwgMTI4LCAyNTEsIDM3LCAyMCwgMSwgMTM3LCAyMzQsIDE0OSwgMjAsIDEsIDEzNywgCisgICAgMjQyLCAyNDcsIDIwLCAxLCAxMzcsIDIzNCwgMTU2LCAyMCwgMSwgMTM3LCAyMTAsIDIxMywgMjMwLCA4MSwgMjAsIDEsIAorICAgIDEzNywgMjI3LCAxMTUsIDIwLCAxLCAxMzcsIDIzMSwgMTA1LCAyMCwgMSwgMTM3LCAyMjgsIDE1LCAyMCwgMSwgMTM3LCAKKyAgICAyMzEsIDExMSwgMjAsIDEsIDEzNywgMjExLCAxNiwgMjAsIDEsIDEzNywgMjMzLCAyNTUsIDIwLCAxLCAxMzcsIDIzNSwgMTYsIAorICAgIDIwLCAxLCAxMzcsIDIyMCwgMTI1LCAyMCwgMSwgMTM3LCAyMjksIDEzNiwgMjAsIDEsIDEzNywgMjE3LCA5NiwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAxNTgsIDIwLCAxLCAxMzcsIDIxNiwgNjcsIDIxMCwgMTk4LCAyMCwgMSwgMTM3LCAyMTgsIDgwLCAyMCwgMSwgCisgICAgMTM3LCAyMjksIDQ0LCAyMjcsIDE2NCwgMjAsIDEsIDEzNywgMjEzLCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMjA0LCAyMCwgCisgICAgMSwgMTM3LCAyMzEsIDI0NCwgMjM0LCAxNTgsIDIwLCAxLCAxMzcsIDIyNywgMjU0LCAyMCwgMSwgMTM3LCAyMjksIDM5LCAKKyAgICAyMCwgMSwgMTM3LCAyMzMsIDk0LCAyMCwgMSwgMTM3LCAyMzEsIDExMywgMjAsIDEsIDEzNywgMjMxLCAxMywgMjAsIDEsIAorICAgIDEzNywgMjI3LCAyNDgsIDIwLCAxLCAxMzcsIDIxNiwgMjE2LCAyMCwgMSwgMTM3LCAyMjksIDQxLCAyMCwgMSwgMTM3LCAKKyAgICAyNDMsIDI0MCwgMjAsIDEsIDEzNywgMjI5LCAxNDEsIDIwLCAxLCAxMzcsIDIyOCwgMTcsIDIwLCAxLCAxMzcsIDIyOCwgMTMsIAorICAgIDIwLCAxLCAxMzcsIDI1MSwgMTE1LCAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTgsIDIwLCAxLCAKKyAgICAxMzcsIDIyMiwgMTQyLCAyMCwgMSwgMTM3LCAyMjgsIDE4OCwgMjAsIDEsIDEzNywgMjMzLCAxMDgsIDIwLCAxLCAxMzcsIAorICAgIDIxNiwgNjUsIDIwLCAxLCAxMzcsIDIyNywgMjU1LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIyOCwgMTgwLCAyMCwgMSwgMTM3LCAKKyAgICAyMzQsIDE2MiwgMjAsIDEsIDEzNywgMjI5LCA0NSwgMjAsIDEsIDEzNywgMjMxLCAyMTcsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTA2LCAyMCwgMSwgMTM3LCAyMzIsIDEwMywgMjAsIDEsIDEzNywgMjMzLCAxOTUsIDIwLCAxLCAxMzcsIDIyOCwgMTg2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIxMSwgMTg0LCAyMCwgMSwgMTM3LCAyMjksIDQyLCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDIsIDIwLCAxLCAxMzcsIDIyNywgMjUwLCAyMCwgMSwgMTM3LCAyMzMsIDIwOSwgMjI4LCAxNDQsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMCwgMjAsIDEsIDEzNywgMjI5LCAxNDksIDIwLCAxLCAxMzcsIDIzMSwgMjQ0LCAyMjgsIDUsIDIwLCAxLCAKKyAgICAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgMTM3LCAyMjksIDE0OCwgMjAsIDEsIDEzNywgMjE5LCAyMjIsIDIwLCAxLCAxMzcsIAorICAgIDIyMCwgMTI4LCAyMCwgMSwgMTM3LCAyMzEsIDExNCwgMjAsIDEsIDEzNywgMjMxLCAyMjQsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTI0LCAyMCwgMSwgMTM3LCAyMzQsIDE1MCwgMjAsIDEsIDEzNywgMjMxLCAxMTUsIDIwLCAxLCAxMzcsIDIzNCwgMTU0LCAKKyAgICAyMCwgMSwgMTM3LCAyMzEsIDEyOCwgMjI1LCAxMDYsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIAorICAgIDE3NiwgMjAsIDEsIDEzNywgMjMwLCAyMjUsIDIwLCAxLCAxMzcsIDIzMCwgMTA1LCAyMCwgMSwgMTM3LCAyMjAsIDE3LCAyMCwgCisgICAgMSwgMTM3LCAyMzQsIDE3MiwgMjMzLCA3NiwgMjAsIDEsIDEzNywgMjM0LCAxNzIsIDI0NCwgMTY4LCAyMCwgMSwgMTM3LCAKKyAgICAyMjksIDc0LCAyMCwgMSwgMTM3LCAyMjksIDIwMSwgMjAsIDEsIDEzNywgMjMyLCAyMDYsIDIwLCAxLCAxMzcsIDIyNSwgNjgsIAorICAgIDIwLCAxLCAxMzcsIDIyNSwgMjAyLCAyMCwgMSwgMTM3LCAyMTYsIDIzMSwgMjAsIDEsIDEwNywgMjMxLCAxMDQsIDIwLCAxLCAKKyAgICAxMDcsIDIxMiwgNTEsIDIwLCAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzEsIDIxLCAyMCwgMSwgMTA3LCAyMjgsIAorICAgIDE3MiwgMjAsIDEsIDEwNywgMjMyLCAyNDEsIDIwLCAxLCAxMDcsIDIyOCwgMTc3LCAyMCwgMSwgMTA3LCAyMjgsIDEyLCAyMCwgCisgICAgMSwgMTA3LCAyMjksIDU5LCAyMCwgMSwgMTA3LCAyMjcsIDE2NCwgMjAsIDEsIDEwNywgMjExLCAxOTQsIDIwLCAxLCAxMDcsIAorICAgIDIyOSwgMTQsIDIwLCAxLCAxMDcsIDIyMCwgNjMsIDIwLCAxLCAxMDcsIDIyOSwgMjUsIDIwLCAxLCAxMDcsIDIzNCwgMTU3LCAKKyAgICAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjIwLCA0MywgMjAsIDEsIDEwNywgMjI4LCAxODUsIDIwLCAxLCAKKyAgICAxMDcsIDIxOCwgNTMsIDIwLCAxLCAxMDcsIDIzNCwgMTYyLCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIAorICAgIDIxMCwgMjAsIDEsIDEwNywgMjIxLCAyMzYsIDIwLCAxLCAxMDcsIDIzMSwgMjYsIDIwLCAxLCAxMDcsIDIyOSwgMTQwLCAyMCwgCisgICAgMSwgMTA3LCAyMzEsIDE5MywgMjAsIDEsIDEwNywgMjMxLCAzMiwgMjAsIDEsIDEwNywgMjIwLCAxMjcsIDIwLCAxLCAxMDcsIAorICAgIDIxMSwgMzksIDIwLCAxLCAxMDcsIDIyOCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE1MywgMjMxLCAxMDcsIDIwLCAxLCAKKyAgICAxMDcsIDIyOSwgMjEsIDIwLCAxLCAxMDcsIDIxNSwgMTE5LCAyMCwgMSwgMTA3LCAyNDIsIDI1NSwgMjAsIDEsIDEwNywgCisgICAgMjI5LCAxMSwgMjAsIDEsIDEwNywgMjQ0LCAxMzUsIDIwLCAxLCAxMDcsIDIyOSwgMTQ0LCAyMCwgMSwgMTA3LCAyMzEsIDUsIAorICAgIDIwLCAxLCAxMDcsIDIzMywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgMTI2LCAyMCwgMSwgMTA3LCAyMzAsIDE1MiwgMjAsIDEsIAorICAgIDEwNywgMjMxLCA5LCAyMCwgMSwgMTA3LCAyMjQsIDEyMSwgMjAsIDEsIDEwNywgMjMxLCA3LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIzLCAyMCwgMSwgMTA3LCAyMzIsIDg5LCAyMCwgMSwgMTA3LCAyMjgsIDQsIDIwLCAxLCAxMDcsIDIzMSwgMTI3LCAyMCwgMSwgCisgICAgMTA3LCAyMzMsIDE4NiwgMjAsIDEsIDEwNywgMjI3LCAxNTUsIDIwLCAxLCAxMDcsIDIxNiwgMjIxLCAyMCwgMSwgMTA3LCAKKyAgICAyMTksIDM2LCAyMCwgMSwgMTA3LCAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNTQsIDIwLCAxLCAxMDcsIDIyMywgCisgICAgMTczLCAyMCwgMSwgMTA3LCAyMTcsIDExLCAyMCwgMSwgMTA3LCAyMjksIDIyLCAyMCwgMSwgMTA3LCAyMzEsIDI4LCAyMCwgCisgICAgMSwgMTA3LCAyMjgsIDMsIDIwLCAxLCAxMDcsIDIzNCwgMTUyLCAyMCwgMSwgMTA3LCAyMjUsIDYyLCAyMCwgMSwgMTA3LCAKKyAgICAyMjUsIDE1NSwgMjAsIDEsIDEwNywgMjI3LCAxMzEsIDIwLCAxLCAxMDcsIDIzMywgMTcsIDIwLCAxLCAxMDcsIDIyOSwgNjAsIAorICAgIDIwLCAxLCAxMDcsIDIzMSwgMjUsIDIwLCAxLCAxMDcsIDIyOSwgMzQsIDIwLCAxLCAxMDcsIDIxMCwgMTkzLCAyMCwgMSwgCisgICAgMTA3LCAyMjYsIDI1LCAyMCwgMSwgMTA3LCAyMTAsIDE5MiwgMjAsIDEsIDEwNywgMjI5LCAxNDksIDIwLCAxLCAxMDcsIAorICAgIDIyNywgMjQ5LCAyMCwgMSwgMTA3LCAyMTgsIDgyLCAyMCwgMSwgMTA3LCAyMzMsIDIxNCwgMjAsIDEsIDEwNywgMjI5LCA0OSwgCisgICAgMjAsIDEsIDEwNywgMjI5LCAxOSwgMjAsIDEsIDEwNywgMjE1LCAxMDMsIDIwLCAxLCAxMDcsIDIzMSwgMzYsIDIwLCAxLCAKKyAgICAxMDcsIDIzMywgMjA0LCAyMCwgMSwgMTA3LCAyMjgsIDEsIDIwLCAxLCAxMDcsIDIxNiwgMjE5LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIxOSwgMjAsIDEsIDEwNywgMjI5LCA1OCwgMjAsIDEsIDEwNywgMjMzLCAxMCwgMjAsIDEsIDEwNywgMjI5LCA0MCwgMjAsIAorICAgIDEsIDEwNywgMjI4LCA2LCAyMCwgMSwgMTA3LCAyMjgsIDE1OCwgMjAsIDEsIDEwNywgMjQyLCAyNDAsIDIwLCAxLCAxMDcsIAorICAgIDIzMywgMjIzLCAyMCwgMSwgMTA3LCAyMjMsIDg3LCAyMjYsIDIxMywgMjAsIDEsIDEwNywgMjE3LCA4NywgMjAsIDEsIDEwNywgCisgICAgMjE2LCAxMSwgMjAsIDEsIDEwNywgMjI3LCAxNTIsIDIwLCAxLCAxMDcsIDIyMiwgMjQyLCAyMCwgMSwgMTA3LCAyMzMsIDU1LCAKKyAgICAyMCwgMSwgMTA3LCAyMzEsIDg0LCAyMCwgMSwgMTA3LCAxOTQsIDIwLCAxLCAxMDcsIDIxOCwgNSwgMjAsIDEsIDEwNywgCisgICAgMjMwLCAxMDcsIDIwLCAxLCAxMDcsIDIyMCwgMjksIDIwLCAxLCAxMDcsIDIyMCwgMzksIDIwLCAxLCAxMDcsIDIzMywgMTYxLCAKKyAgICAyMCwgMSwgMTA3LCAyMjcsIDI0MiwgMjAsIDEsIDEwNywgMjE5LCAyMjcsIDIwLCAxLCAxMDcsIDIyNywgMjUxLCAyMCwgMSwgCisgICAgMTA3LCAyMjUsIDIxNCwgMjAsIDEsIDEwNywgMjI4LCAyMzgsIDIwLCAxLCAxMDcsIDIxOSwgMjU0LCAyMCwgMSwgMTA3LCAKKyAgICAyMjQsIDEzNiwgMjAsIDEsIDEwNywgMjMwLCA1MSwgMjAsIDEsIDEwNywgMjMyLCAxMjUsIDIwLCAxLCAxMDcsIDIyMywgODcsIAorICAgIDIzMCwgMTAxLCAyMCwgMSwgMTA3LCAyMTYsIDExOCwgMjAsIDEsIDEwNywgMjI3LCAyNDMsIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMTI4LCAxOTksIDIwLCAxLCAxMDcsIDIyMSwgMjM0LCAyMCwgMSwgMTA3LCAyNDQsIDIwMywgMjAsIDEsIDgyLCAyMjksIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMTYsIDE3LCAyMCwgMSwgODIsIDIzMSwgMTE3LCAyMCwgMSwgODIsIDIzMywgOTQsIDIwLCAxLCAKKyAgICA4MiwgMjEzLCAxMjgsIDIwLCAxLCA4MiwgMjMyLCAxMzEsIDIwLCAxLCA4MiwgMjI2LCA5MywgMjAsIDEsIDgyLCAyMTksIAorICAgIDQ3LCAyMCwgMSwgODIsIDIyMywgMTQ4LCAyMCwgMSwgODIsIDIyOCwgOCwgMjAsIDEsIDgyLCAyMjksIDExOSwgMjAsIDEsIAorICAgIDgyLCAyMjQsIDE1MCwgMjAsIDEsIDgyLCAyMTcsIDYzLCAyMCwgMSwgODIsIDIyOSwgMjcsIDIwLCAxLCA4MiwgMjMzLCAKKyAgICAyNTEsIDIwLCAxLCA4MiwgMjExLCAxODcsIDIwLCAxLCA4MiwgMjIxLCAxNzIsIDIwLCAxLCA4MiwgMjI5LCA1MCwgMjAsIDEsIAorICAgIDgyLCAyMjYsIDkwLCAyMCwgMSwgODIsIDIxNiwgMTgsIDIwLCAxLCA4MiwgMjMzLCAyMDgsIDIwLCAxLCA4MiwgMjMyLCAKKyAgICAxNDUsIDIwLCAxLCA4MiwgMjI4LCAxMSwgMjAsIDEsIDgyLCAyMjksIDMsIDIwLCAxLCA4MiwgMjMxLCAyMjUsIDIwLCAxLCAKKyAgICA4MiwgMjI5LCAyMCwgMjAsIDEsIDgyLCAyMjksIDIsIDIwLCAxLCA4MiwgMjI4LCAxMCwgMjAsIDEsIDgyLCAyMjIsIDI0MCwgCisgICAgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAyMjUsIDIxMywgMjAsIDEsIDgyLCAyMjIsIDMzLCAyMCwgMSwgODIsIAorICAgIDIyOSwgMzUsIDIwLCAxLCA4MiwgMjMxLCAxNSwgMjAsIDEsIDgyLCAyNDIsIDIzNCwgMjAsIDEsIDgyLCAyMjksIDIzLCAyMCwgCisgICAgMSwgODIsIDIyOCwgMTg3LCAyMCwgMSwgODIsIDIzMSwgMTc3LCAyMCwgMSwgODIsIDIzMiwgMTI3LCAyMCwgMSwgODIsIAorICAgIDIyOSwgNTUsIDIwLCAxLCA4MiwgMjI5LCAxMzIsIDIwLCAxLCA4MiwgMjE3LCA4NiwgMjI3LCAyNDksIDIwLCAxLCA4MiwgCisgICAgMjIwLCAxMjksIDIwLCAxLCA4MiwgMjI0LCAxNDYsIDIwLCAxLCA4MiwgMjI5LCAxNTIsIDIxOSwgNTMsIDIwLCAxLCA4MiwgCisgICAgMjI5LCA0MywgMjI3LCAxNjQsIDIwLCAxLCA4MiwgMjExLCA0LCAyMCwgMSwgODIsIDI0MiwgMjM1LCAyMCwgMSwgODIsIAorICAgIDIxNSwgMTE4LCAyMCwgMSwgODIsIDIxMSwgMTksIDIwLCAxLCA4MiwgMjI1LCAxOSwgMjAsIDEsIDgyLCAyMTUsIDEwOCwgCisgICAgMjAsIDEsIDgyLCAyMzQsIDE2MCwgMjAsIDEsIDgyLCAyMTgsIDgxLCAyMCwgMSwgODIsIDIxNiwgMjIwLCAyMCwgMSwgODIsIAorICAgIDIxMywgMTg0LCAyMCwgMSwgODIsIDIxMiwgNiwgMjAsIDEsIDgyLCAyMzMsIDEzOCwgMjAsIDEsIDgyLCAyMjQsIDE1MywgCisgICAgMjAsIDEsIDgyLCAyMTcsIDk3LCAyMCwgMSwgODIsIDI0MiwgMjU0LCAyMCwgMSwgODIsIDIyOSwgNjQsIDIwLCAxLCA4MiwgCisgICAgMjIwLCA0MiwgMjAsIDEsIDgyLCAyMzEsIDEwLCAyMCwgMSwgODIsIDIzMSwgMTIxLCAyMCwgMSwgODIsIDIyNywgMTE5LCAKKyAgICAyMCwgMSwgODIsIDIyOCwgMTQxLCAyMCwgMSwgODIsIDI0MywgODAsIDIwLCAxLCA4MiwgMjE1LCAxMDksIDIwLCAxLCA4MiwgCisgICAgMjMzLCAyMTcsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIDgyLCAyMjcsIDE1MywgMjUwLCAyNCwgMjAsIDEsIDgyLCAKKyAgICAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDI3LCAyMCwgMSwgODIsIDIyOSwgMTM3LCAyMCwgMSwgODIsIDIyNSwgMTAzLCAKKyAgICAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgMTIsIDIwLCAxLCA4MiwgMjQzLCAyNDAsIDIwLCAxLCA4MiwgCisgICAgMjQzLCA3OSwgMjAsIDEsIDgyLCAyMjksIDEzLCAyMCwgMSwgODIsIDIzNCwgMTYyLCAyMCwgMSwgODIsIDIzMSwgMjI4LCAKKyAgICAyMCwgMSwgODIsIDIyOSwgMjYsIDIwLCAxLCA4MiwgMjQyLCAyNDEsIDIwLCAxLCA4MiwgMjQ0LCAyMDQsIDIwLCAxLCA4MiwgCisgICAgMjI3LCAyNDQsIDIwLCAxLCA4MiwgMjI1LCAxNTYsIDIwLCAxLCA4MiwgMjExLCAxNywgMjAsIDEsIDgyLCAyMjksIDUxLCAKKyAgICAyMCwgMSwgODIsIDIyNywgMTUzLCAyNTIsIDMxLCAyMCwgMSwgODIsIDIyNywgOTksIDIwLCAxLCA4MiwgMjI0LCAyNTAsIAorICAgIDIwLCAxLCA4MiwgMjMwLCAyMjUsIDIwLCAxLCA4MiwgMjQzLCAyMzgsIDIwLCAxLCA4MiwgMjI5LCAyMjUsIDIwLCAxLCA4MiwgCisgICAgMjMwLCAxMDUsIDIwLCAxLCA4MiwgMjQyLCAyNDAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDc0LCAyMCwgMSwgODIsIDIzMCwgCisgICAgNTIsIDIwLCAxLCA4MiwgMjI0LCAxNDksIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMzMsIDE5NSwgMjAsIDEsIAorICAgIDgyLCAyMjUsIDEwMCwgMjAsIDEsIDgyLCAyMjcsIDI1MiwgMjAsIDEsIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgCisgICAgMzYsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAxOTAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDI1MSwgMjMsIDIwLCAxLCAKKyAgICA4MiwgMjQ0LCA0NSwgMjAsIDEsIDgyLCAyMjgsIDE4MSwgMjAsIDEsIDgyLCA2MSwgMjAsIDEsIDgyLCAyMTYsIDExLCAyMCwgCisgICAgMSwgODIsIDc4LCAyMCwgMSwgODIsIDc0LCAyMCwgMSwgODIsIDIzMywgOTIsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAKKyAgICAyNiwgMjAsIDEsIDgyLCAyMTcsIDEwMiwgMjAsIDEsIDgyLCAyMTcsIDUyLCAyMCwgMSwgODIsIDIyOSwgMTUyLCAyMzAsIAorICAgIDM5LCAyNDAsIDI0MSwgMjAsIDEsIDgyLCAyMjAsIDE3LCAyMCwgMSwgODIsIDIxMSwgMTQsIDIwLCAxLCA4MiwgMjI4LCAKKyAgICAyNTIsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgMjQxLCAyMCwgMSwgODIsIDIxMCwgCisgICAgMjI3LCAyNDksIDE1NSwgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIDE5NSwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMjUsIDE1NCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjQ1LCAxMTAsIDIwLCAxLCA4MiwgMjI0LCAKKyAgICAxNDcsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNTUsIDIwLCAxLCA4MiwgMjEzLCAyNTAsIDIwLCAKKyAgICAxLCA4MiwgMjMyLCAxMDMsIDIwLCAxLCA4MiwgMjMwLCAyMzUsIDIwLCAxLCA4MiwgMjIzLCA1NCwgMjAsIDEsIDgyLCAyMjMsIAorICAgIDE3NCwgMjAsIDEsIDgyLCAyMjgsIDI1MSwgMjAsIDEsIDgyLCAyMjksIDgyLCAyMCwgMSwgODIsIDIyMCwgOSwgMjAsIDEsIAorICAgIDgyLCAyMTksIDI1NCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgMjIzLCA4OSwgMjAsIDEsIDgyLCAxOTgsIDIwLCAxLCA4MiwgCisgICAgMjI1LCAxMTEsIDIwLCAxLCA4MiwgMjMyLCAxMjUsIDIwLCAxLCA4MiwgMjM0LCAzNCwgMjAsIDEsIDgyLCAyMzEsIDYzLCAKKyAgICAyMCwgMSwgODIsIDE4NiwgMjAsIDEsIDgyLCAyMzEsIDE3NCwgMjAsIDEsIDgyLCAyMTYsIDIyMiwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDk4LCAyMCwgMSwgODIsIDIzMCwgMTU1LCAyMCwgMSwgODIsIDIxNiwgMjQ4LCAyMCwgMSwgODIsIDI0NCwgMTc3LCAyMCwgMSwgCisgICAgODIsIDI0MiwgMjMwLCAyMCwgMSwgMjI1LCAxNDAsIDE3NiwgMjAsIDEsIDIyNSwgMTQwLCA2OSwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzMsIDIyMywgMjAsIDEsIDIyNSwgMTQwLCAyNDUsIDIxNywgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDExMSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMTcsIDg3LCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgMTUyLCAyMCwgMSwgMjI1LCAxNDAsIDIzMywgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIyMiwgMjQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgMzIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjMxLCA4NCwgMjAsIDEsIDIyNSwgMTQwLCAyMTcsIDEwMiwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDE1MSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMjgsIDE4OCwgMjAsIDEsIDIyNSwgMTQwLCAxOTQsIDIwLCAxLCAyMjUsIDE0MCwgMjE4LCA1LCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIyMCwgMjksIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAxOTMsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCAxMjUsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjMzLCAxNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjM0LCAxNjIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjI3LCAyMTMsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAyNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAxNTksIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjEwLCAyMjYsIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAyMjcsIDIwLCAxLCAyMjUsIDE0MCwgMTkyLCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyOCwgMTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAxNTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAKKyAgICAyNTEsIDIwLCAxLCAyMjUsIDE0MCwgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAyMTQsIDIwLCAxLCAyMjUsIAorICAgIDE0MCwgMjIyLCAxNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAyMzgsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCA1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMzQsIDE3MSwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDEyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgCisgICAgNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCA5LCAyMCwgMSwgMjI1LCAxNDAsIDIyNCwgMTUwLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDI0NCwgNDUsIDIwLCAxLCAyMjUsIDE0MCwgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTQwLCAyMzIsIDI0NywgMjAsIDEsIDIyNSwgCisgICAgMTQwLCAyMzIsIDEyNSwgMjAsIDEsIDIyNSwgMTQwLCAyMzQsIDM0LCAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTE5LCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyMywgODYsIDIwLCAxLCAyMjUsIDE0MCwgMTg2LCAyMCwgMSwgMjI1LCAxNDAsIDIzMCwgMTY2LCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTI3LCAyMCwgMSwgMjI1LCAxNDAsIDIxNiwgMjMxLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzNCwgMSwgMjAsIDEsIDIyNSwgMTQwLCAyMjEsIDI1MywgMjAsIDEsIDIyNSwgMTQwLCAyMTIsIDExNSwgOTUsIDEsIDE5MSwgCisgICAgOTUsIDEsIDI1MiwgMTk5LCA5NSwgMSwgOCwgMTkxLCA5NSwgMSwgMjI1LCA0NSwgOTUsIDEsIDE4NiwgOTUsIDEsIDIzMCwgCisgICAgMjM4LCA5NSwgMSwgMjU0LCAzMSwgMTg2LCA5NSwgMSwgMjQ0LCAyMDQsIDk1LCAxLCAyMTQsIDI3LCA5NSwgMSwgMjEzLCAKKyAgICAxNzcsIDk1LCAxLCAyMTcsIDEwNiwgOTUsIDEsIDI0OCwgMjI5LCA5NSwgMSwgOCwgMjE1LCAxNTcsIDk1LCAxLCA4LCAyMTcsIAorICAgIDEwNiwgOTUsIDEsIDIxNSwgMTU3LCA5NSwgMSwgMjQ4LCAxNDMsIDk1LCAxLCAxOTgsIDk1LCAxLCAyMjgsIDI0MiwgOTUsIAorICAgIDEsIDgsIDIyOCwgMTE1LCA5NSwgMSwgMjU0LCAzMSwgMTk4LCA5NSwgMSwgMjI4LCAxMTUsIDk1LCAxLCAyMjgsIDEwMSwgCisgICAgOTUsIDEsIDIzMywgMTQxLCA5NSwgMSwgMjMyLCA2NiwgOTUsIDEsIDIzMywgNCwgOTUsIDEsIDIzMiwgMjQ5LCA5NSwgMSwgCisgICAgMjE2LCA1NywgOTUsIDEsIDI0NywgMTYxLCA5NSwgMSwgMjE2LCA0OSwgOTUsIDEsIDI0NywgMTYwLCA5NSwgMSwgMTc2LCAKKyAgICA5NSwgMSwgMjQzLCAxNDIsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDkxLCA5NSwgMSwgMjI0LCA2OSwgOTUsIDEsIAorICAgIDIyOSwgODIsIDk1LCAxLCAyMjksIDMzLCA5NSwgMSwgMjU0LCAzMSwgMjI5LCA4MiwgOTUsIDEsIDE2MiwgOTUsIDEsIDIxMSwgCisgICAgMTY1LCA5NSwgMSwgMjQzLCAwLCA5NSwgMSwgMjQyLCAyMzMsIDk1LCAxLCAyMTUsIDE2NiwgOTUsIDEsIDI0NiwgMzQsIDk1LCAKKyAgICAxLCAyMjcsIDE2OSwgOTUsIDEsIDIyNywgMTU0LCA5NSwgMSwgMjE1LCAxNzYsIDk1LCAxLCAyNDYsIDQxLCA5NSwgMSwgOCwgCisgICAgMjE1LCAxNzYsIDk1LCAxLCA4LCAyNDYsIDQxLCA5NSwgMSwgMjIzLCAxMDksIDIxNSwgMTc2LCA5NSwgMSwgMjIwLCAxMDQsIAorICAgIDk1LCAxLCAyMTgsIDIyNSwgOTUsIDEsIDIxMCwgODIsIDk1LCAxLCAyMTAsIDE0LCA5NSwgMSwgMjE1LCAxODQsIDk1LCAxLCAKKyAgICAyNDYsIDQ2LCA5NSwgMSwgOCwgMjE1LCAxODQsIDk1LCAxLCAyMDYsIDk1LCAxLCAyMTAsIDExNiwgOTUsIDEsIDIxMCwgMTUsIAorICAgIDk1LCAxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjIzLCA5NSwgMSwgMjU0LCAzMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIAorICAgIDIxNSwgOTUsIDEsIDIwOSwgMjIyLCA5NSwgMSwgMjEyLCA2NSwgOTUsIDEsIDI1NCwgMjE4LCA5NSwgMSwgMjQxLCAxOTYsIAorICAgIDk1LCAxLCAyMjksIDE5NywgOTUsIDUsIDI1MywgMjMwLCA5NSwgNSwgMjIzLCAxMDksIDIxMywgMTMzLCA5NSwgNSwgMjIzLCAKKyAgICAxMDksIDI1MywgMjMwLCA5NSwgMjUsIDUsIDYxLCA5NSwgMjUsIDUsIDI1NSwgODIsIDk1LCAyNSwgNSwgMjU0LCAyMTQsIAorICAgIDk1LCAyNSwgNSwgMjU0LCAxMzEsIDk1LCAyNSwgNSwgMjU0LCAxMjMsIDk1LCAyNSwgNSwgNzgsIDk1LCAyNSwgNSwgMjI2LCAKKyAgICAxODcsIDk1LCAyNSwgNSwgMjExLCAyMjcsIDk1LCAyNSwgNSwgMjEyLCA5OCwgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAKKyAgICAyNDUsIDE1OCwgOTUsIDI1LCA1LCAyNDUsIDE0NiwgOTUsIDI1LCA1LCAyMjYsIDIzNiwgOTUsIDI1LCA1LCA3NCwgOTUsIAorICAgIDI1LCA1LCAyNDAsIDEyNiwgOTUsIDI1LCA1LCAyNDAsIDEyNSwgOTUsIDI1LCA1LCAyNDAsIDEyNCwgOTUsIDI1LCA1LCAKKyAgICAyMzUsIDE5NiwgOTUsIDI1LCA1LCAyMzYsIDY3LCA5NSwgMjUsIDUsIDIzNiwgNDAsIDk1LCAyNSwgNSwgMjM1LCAxNjIsIAorICAgIDk1LCAyNSwgNSwgMjM1LCAyMzgsIDk1LCAyNSwgNSwgNjksIDk1LCAyNSwgNSwgMjE0LCAyMjksIDk1LCAyNSwgNSwgMjE0LCAKKyAgICAyMjgsIDk1LCAyNSwgNSwgMjE0LCAyMjcsIDk1LCAyNSwgNSwgMjE0LCAxMTgsIDk1LCAyNSwgNSwgMjE0LCAyMTEsIDk1LCAKKyAgICAyNSwgNSwgMjE0LCAxNzgsIDk1LCAyNSwgNSwgMjExLCAxMTcsIDk1LCAyNSwgNSwgMjExLCA4LCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjUyLCA5NSwgMjUsIDUsIDI1NCwgMjQ4LCA5NSwgMjUsIDUsIDI0NSwgOTQsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgCisgICAgOTQsIDk1LCAyNSwgNSwgMjQ1LCAxMDAsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgMTAwLCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCA5NSwgMjUsIDUsIDI0NSwgMjAzLCA5NSwgMjUsIDUsIDI1MywgMjAwLCA5NSwgMjUsIDUsIDIyNiwgMTM4LCA5NSwgCisgICAgMjUsIDUsIDIzMCwgMzAsIDk1LCAyNSwgNSwgMjI5LCA4NCwgOTUsIDEzOCwgMjIyLCAyNTQsIDk1LCAxMzgsIDIxNiwgMTUsIAorICAgIDIyMiwgMjU0LCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIDI5LCA5NSwgMSwgMjE2LCAyOCwgOTUsIAorICAgIDEsIDIxNiwgMjcsIDk1LCAxLCAyMTYsIDI2LCA5NSwgMSwgMjE2LCAyNSwgOTUsIDEsIDIxNiwgMjQsIDk1LCAxLCAyMTYsIAorICAgIDIzLCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMzAsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyOSwgOTUsIDEsIDIyMywgMTA5LCAKKyAgICAyMTYsIDI3LCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjYsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyNSwgOTUsIDEsIDIyMywgCisgICAgMTA5LCAyMTYsIDIzLCA1NiwgMSwgMjU0LCAzMSwgNzYsIDE0MSwgMSwgMjU0LCAzMSwgMjExLCA0NywgNDksIDI4LCAxNiwgCisgICAgMjI0LCAxNTcsIDQ5LCAyOCwgMTYsIDI0OCwgMTY2LCA0OSwgMjgsIDE2LCAyMjUsIDE3OCwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxMTcsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMjYsIDExNywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgCisgICAgMTg2LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjM0LCAyMDMsIDQ5LCAyOCwgMTYsIAorICAgIDIxNywgMTcwLCA0OSwgMjgsIDE2LCAyMjYsIDEzLCA0OSwgMjgsIDE2LCAyMTAsIDIxNywgNDksIDI4LCAxNiwgMjEwLCAKKyAgICAyMTgsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMzMsIDI0MCwgNDksIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAxODYsIDQ5LCAKKyAgICAyOCwgMTYsIDI0NSwgMzQsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMTcsIDMsIDQ5LCAyOCwgMTYsIDIzNCwgMTY3LCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDY2LCA0OSwgMjgsIDE2LCAyNTQsIDY3LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE3LCAxNzYsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNiwgMTYwLCA0OSwgMjgsIDE2LCAyMjYsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNTAsIDE1NywgNDksIDI4LCAxNiwgMjE0LCA2LCAKKyAgICA0OSwgMjgsIDE2LCAyMzUsIDE3MCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAxNjksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY4LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjEsIDIxNSwgNDksIDI4LCAxNiwgMjI2LCA0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTgsIDE0OCwgMjU0LCA2OSwgNDksIDI4LCAxNiwgMjI2LCAxMTYsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNCwgMTUsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNzAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNjQsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgNDMsIDQ5LCAyOCwgMTYsIDIyMywgNDksIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMTYsIDg0LCA0OSwgMjgsIDE2LCAyNTQsIDEyOSwgNDksIDI4LCAxNiwgMjIxLCAxNjEsIDQ5LCAyOCwgMTYsIDIxNywgCisgICAgMTc5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTcsIDE3OSwgMjMxLCA0NSwgMjE4LCAxNDYsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTExLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTYsIDE5MSwgNDksIDI4LCAxNiwgMjMzLCAzMywgNDksIDI4LCAxNiwgMjQ2LCAKKyAgICA0OSwgNDksIDI4LCAxNiwgMjE1LCAyMjgsIDQ5LCAyOCwgMTYsIDIxNiwgMjMzLCA0OSwgMjgsIDE2LCAyMzMsIDI0MywgNDksIAorICAgIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAzNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNTQsIDI5LCA0OSwgCisgICAgMjgsIDE2LCAyMzYsIDE5LCA0OSwgMjgsIDE2LCAyMTUsIDIwMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAyMDYsIAorICAgIDIxNSwgMTk5LCA0OSwgMjgsIDE2LCAyMjUsIDIwMywgNDksIDI4LCAxNiwgMjI0LCAxNjEsIDQ5LCAyOCwgMTYsIDIzNCwgCisgICAgMTcsIDQ5LCAyOCwgMTYsIDI1MCwgODgsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyMywgMTQ5LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDE2LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjYsIDE0LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNDAsIDExNiwgNDksIDI4LCAKKyAgICAxNiwgMjI5LCAyMDgsIDQ5LCAyOCwgMTYsIDIyNSwgMTU5LCA0OSwgMjgsIDE2LCAyMzQsIDE4LCAyNTQsIDE1OCwgNDksIAorICAgIDI4LCAxNiwgMjE1LCAyMDAsIDI1NCwgMTU4LCA0OSwgMjgsIDE2LCAyMTgsIDEyNSwgNDksIDI4LCAxNiwgMjQyLCAxMzAsIAorICAgIDQ5LCAyOCwgMTYsIDIzNSwgMTcwLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAyMTAsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMjYsIDExNywgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTU4LCA0OSwgMjgsIDE2LCAyMzQsIDQsIDQ5LCAyOCwgCisgICAgMTYsIDIyNSwgMTU3LCA0OSwgMjgsIDE2LCAyMzMsIDI0MiwgNDksIDI4LCAxNiwgMjI1LCAyMDQsIDIyOSwgMTAwLCA0OSwgCisgICAgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgMjI5LCAxMDEsIAorICAgIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMTAsIDIxNSwgNDksIDI4LCAxNiwgMjU0LCA2NywgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDI1NCwgNjgsIDIxNywgMTc3LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjEwLCAyMTYsIDQ5LCAyOCwgMTYsIDIzMywgCisgICAgMjQxLCA0OSwgMjgsIDE2LCAyNDUsIDE4MSwgNDksIDI4LCAxNiwgMjUwLCAxNTgsIDQ5LCAyOCwgMTYsIDIzMCwgMjAzLCAKKyAgICAyMzUsIDE2OSwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyMjksIDEwMCwgCisgICAgNDksIDI4LCAxNiwgMjI0LCAxNjIsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIDIwNywgNDksIDI4LCAxNiwgMjU0LCAKKyAgICA5MiwgNDksIDI4LCAxNiwgMjMyLCA2MywgNDksIDI4LCAxNiwgMjI2LCAxNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTYsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDY4LCAyMjYsIDE1LCA0OSwgMjgsIDE2LCAyMzMsIDE1OSwgNDksIDI4LCAKKyAgICAxNiwgMjU0LCA5MywgNDksIDI4LCAxNiwgMjE1LCAyMDAsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDE4NCwgNDksIAorICAgIDI4LCAxNiwgMjE3LCAxNzksIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMTcsIDE3MSwgNDksIDI4LCAxNiwgMjUwLCA4OCwgCisgICAgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTE0LCA0OSwgMjgsIDE2LCAyMjEsIDE2MiwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIxMSwgMTUxLCAyMzQsIDQzLCA0OSwgMjgsIDE2LCAyMTUsIDE5NywgNDksIDI4LCAxNiwgMjI0LCAxNjMsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjAxLCA0OSwgMjgsIDE2LCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI0LCAxNjAsIDQ5LCAyOCwgMTYsIAorICAgIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE1OSwgNDksIDI4LCAxNiwgMjQyLCAxNjUsIDQ5LCAyOCwgMTYsIDI1NCwgCisgICAgMjIsIDQ5LCAyOCwgMTYsIDI0NSwgNjgsIDI1NCwgMjIsIDQ5LCAyOCwgMTYsIDIyNiwgMTExLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjE2LCAxOTAsIDI0NSwgNzcsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCAyNDUsIDMzLCA0OSwgMjgsIDE2LCAyMTYsIAorICAgIDE5MiwgMjU0LCA3MSwgNDksIDI4LCAxNiwgMjE2LCAxODUsIDIzNCwgMjUzLCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyMzQsIAorICAgIDIwNSwgNDksIDI4LCAxNiwgMjQ1LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyMTEsIDExLCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjE4LCAxNDcsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDI1NCwgMTA0LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzMywgMjQ0LCAyNTQsIDE1OCwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNTQsIDcwLCAKKyAgICAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjU0LCA3MiwgNDksIDI4LCAxNiwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNSwgCisgICAgMjExLCA0OSwgMjgsIDE2LCAyMTYsIDIyNSwgNDksIDI4LCAxNiwgMjM0LCA4LCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyNDUsIAorICAgIDE0MiwgMjUwLCA3OSwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjQ2LCA1MCwgMjUwLCA4MCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgCisgICAgMjE1LCAyMTMsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDIxNiwgMjM1LCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAKKyAgICAyMzMsIDM4LCAyMzYsIDE0LCAyNTAsIDc5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgCisgICAgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNTQsIDE4LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNDgsIDM3LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMywgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIDIyNiwgNSwgMjU0LCAxOSwgMjM0LCAyMDIsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAyMjYsIDUsIDI1NCwgMTksIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgCisgICAgMjI2LCA1LCAyNDgsIDM3LCA0OSwgMjgsIDE2LCAyMTUsIDIxNywgNDksIDI4LCAxNiwgMjU0LCAyMywgNDksIDI4LCAxNiwgCisgICAgMjM2LCAyMSwgNDksIDI4LCAxNiwgMjQ3LCAyNTQsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMjUsIDMsIDI1NCwgMjQsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgMjIwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjU0LCAyNCwgNDksIDI4LCAxNiwgCisgICAgMjU0LCAyMjAsIDIzMSwgMzksIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMzEsIDUwLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyNDIsIDE2NCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIyNSwgMywgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjQsIDE2OCwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyNTQsIDE2MCwgMjI0LCAxNjgsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjQ4LCAzNiwgMjQwLCAxMTQsIAorICAgIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyNTQsIDE2MCwgMjQ4LCAzNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMTUsIDIwNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTUsIDIxOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIxNiwgMjI5LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNiwgMjI5LCAyMzMsIDQxLCAyNDAsIDExNCwgCisgICAgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIzMywgNDEsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI1LCA0MiwgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzNSwgMTc2LCAyMTYsIDI1MiwgMjQwLCAxMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjgsIAorICAgIDIxNiwgMjUyLCAyNDAsIDExNSwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIDIxNiwgMjI2LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgCisgICAgMjMwLCAxNDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNCwgMTAsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI0LCAxNjcsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjI1LCA0MiwgMjE2LCAyMjksIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyNDIsIDE2MiwgMjMwLCAzMSwgMjU0LCA3MSwgNDksIAorICAgIDI4LCAxNiwgMjQyLCAxNjIsIDIzMCwgMzEsIDI0NywgMjA4LCA0OSwgMjgsIDE2LCAyNDUsIDE1NiwgMjM0LCAyNTMsIDI0MywgCisgICAgMjQzLCAyMTMsIDEyNCwgNDksIDI4LCAxNiwgMjM2LCAyMCwgNDksIDI4LCAxNiwgMjM2LCAxOCwgNDksIDI4LCAxNiwgMjQzLCAKKyAgICAyNDMsIDI1NCwgMzAsIDI0OCwgMzUsIDI0MCwgMTEzLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDE5MSwgNDksIAorICAgIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMjksIDIwOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIyOSwgMjAzLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgCisgICAgMjE5LCAxMDQsIDI0NywgMjUxLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIzNCwgMTg4LCAKKyAgICA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgCisgICAgMjI4LCAyMzksIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIyOCwgMjM5LCAyNTQsIDEwNCwgCisgICAgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIzMSwgMTk2LCAyNTAsIDgxLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIAorICAgIDIzMSwgMTk2LCAyNTAsIDgxLCAyMzAsIDE0OCwgNDksIDI4LCAxNiwgMjQ0LCAxMzAsIDIxOSwgMTA0LCAyNTAsIDgxLCAKKyAgICAyMTQsIDksIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMTksIDEwNCwgMjUwLCA4MSwgMjE3LCAxODAsIDQ5LCAyOCwgMTYsIAorICAgIDI0MywgMjQzLCAyMjksIDEwMiwgNDksIDI4LCAxNiwgMjUwLCA4MiwgMjA5LCAyNDksIDQ5LCAyOCwgMTYsIDI1MCwgODIsIAorICAgIDIzNCwgNDIsIDQ5LCAyOCwgMTYsIDI1MCwgODIsIDIxOSwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDAsIDE2MSwgCisgICAgMjExLCAxMCwgMjE2LCAyMzAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDUsIDE1NywgMjU0LCA5NCwgNDksIDI4LCAxNiwgCisgICAgMjExLCAxMCwgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyMTUsIDIwNywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIAorICAgIDIxNiwgMjMwLCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIAorICAgIDI0NywgMjQ2LCAyMzAsIDE0NiwgMjE2LCAyMzQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjQ3LCAyMzAsIAorICAgIDI0NSwgNDQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgCisgICAgNDksIDI4LCAxNiwgMjExLCAxMCwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIAorICAgIDIzMCwgMTQ2LCAyMTYsIDIzNCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjMwLCAyNDUsIDQ0LCAKKyAgICAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgCisgICAgMjQzLCA1NiwgMjQ3LCAyNDUsIDQ5LCAyOCwgMTYsIDI0MywgNTYsIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIAorICAgIDI1NCwgNzMsIDIzMCwgMjA0LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjU0LCA3MywgMjMxLCA3OCwgNDksIDI4LCAxNiwgCisgICAgMjQ3LCAyNTMsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjE2LCAxODMsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAKKyAgICAyMTYsIDE4MywgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyNDcsIDE5NCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIAorICAgIDIxNiwgMTg0LCAyMTUsIDIwOCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyMTYsIDIyMywgNDksIDI4LCAxNiwgCisgICAgMjE5LCAxNjUsIDI1MywgMjUyLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDI0NywgMTk0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNSwgMjA4LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNiwgMjIzLCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMSwgMjQzLCAzNywgNDksIDI4LCAxNiwgMjQ3LCAyMzcsIDIyNiwgMTM4LCA0OSwgMjgsIAorICAgIDE2LCAyMTgsIDEzOSwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMTkxLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTMsIDEyNCwgCisgICAgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjQzLCAxNDIsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIAorICAgIDI1NCwgMTUsIDIzNCwgMTg4LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAKKyAgICAyMjgsIDIzOCwgNDksIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyMzEsIDQ5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgCisgICAgMjI5LCAxMDEsIDIzMSwgNDksIDQ5LCAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY5LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyNDIsIDE2NiwgMjI5LCAxMDEsIDIzNCwgMjAyLCAyOCwgMTYsIDIxOSwgMTU3LCAyNTIsIDE0MywgMjgsIDE2LCA1MiwgCisgICAgMjUyLCAxNDMsIDI4LCAxNiwgNDAsIDI1MiwgMTQzLCAyOCwgMTYsIDIyMywgNTMsIDQwLCAyNTIsIDE0MywgMjgsIDE2LCAKKyAgICAyNDgsIDE2MywgMjUyLCAxNDMsIDI4LCAxNiwgMjE5LCAyNTMsIDI1MiwgMTQzLCAyOCwgMTYsIDQzLCAyMjMsIDgwLCA1MCwgCisgICAgMjgsIDE2LCA0NCwgMjIzLCA4MCwgNTAsIDI4LCAxNiwgMjIzLCA4MCwgMjQ3LCAxMjYsIDI4LCAxNiwgMjQ4LCAyMDQsIAorICAgIDIyMSwgMTY1LCAyOCwgMTYsIDI0OCwgMjMwLCAyNTEsIDEsIDI4LCAxNiwgMjIxLCAxNjUsIDI4LCAxNiwgMjQ5LCAyNDIsIAorICAgIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTksIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTgsIDI4LCAxNiwgMjIzLCA3OCwgCisgICAgMjQ0LCAxMTcsIDI4LCAxNiwgMjQ0LCAxMzksIDI4LCAxNiwgMjQ0LCAxNDAsIDUxLCAyOCwgMTYsIDI1MSwgMTU2LCA3OSwgCisgICAgMjgsIDE2LCAyNTEsIDMyLCAyOCwgMTYsIDI1MSwgMTY3LCAyOCwgMTYsIDEyNywgMjgsIDE2LCAyMjYsIDE5NywgMjE4LCAKKyAgICAxNjUsIDI4LCAxNiwgMjE1LCA1NywgMjE4LCAxNjUsIDI4LCAxNiwgMjE2LCAxNDMsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgCisgICAgMTgsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgODgsIDIxOCwgMTY1LCAyOCwgMTYsIDIxOSwgMTI2LCAyMTgsIDE2NSwgMjgsIAorICAgIDE2LCAyMTksIDEyNCwgMjQ0LCAyLCAyOCwgMTYsIDI0NCwgMTYsIDI0NCwgMiwgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMywgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjUxLCA3NSwgMjUwLCAyMiwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjMsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjQ2LCA5MSwgMjUwLCAyMSwgMjgsIDE2LCAyNDYsIDkxLCAyNTAsIDIwLCAKKyAgICAyOCwgMTYsIDIzMCwgOTAsIDIzMSwgOTUsIDIyMywgNjQsIDI4LCAxNiwgNTIsIDIyMCwgNzcsIDI4LCAxNiwgNTIsIDI0NCwgCisgICAgNzMsIDI4LCAxNiwgMjQ0LCA3NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjQ0LCA3NCwgMjQ2LCAxMTQsIDI4LCAxNiwgMjI5LCAKKyAgICAxOTMsIDIxNCwgMTYzLCAyOCwgMTYsIDIyOSwgMTkzLCAyNDYsIDExNCwgMjgsIDE2LCAyMjAsIDc4LCAyMTQsIDE2MywgMjgsIAorICAgIDE2LCAyMjAsIDc4LCAyNDYsIDExNCwgMjgsIDE2LCAyMjQsIDI1LCAxMzgsIDIyMCwgNzcsIDI4LCAxNiwgMjI0LCAyNSwgCisgICAgMTM4LCAyNDQsIDczLCAyOCwgMTYsIDI0OSwgMjI0LCAyMTYsIDg4LCAyOCwgMTYsIDI0OSwgOTMsIDIxNiwgODgsIDI4LCAKKyAgICAxNiwgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyMjQsIDcsIDI1NCwgCisgICAgMTUwLCAyOCwgMTYsIDIyNCwgNywgMjUyLCAxMzAsIDI4LCAxNiwgMjMwLCA5MywgMjIzLCA2NCwgMjgsIDE2LCAyMTEsIAorICAgIDI1MSwgMjIzLCA2NCwgMjgsIDE2LCAxNjMsIDIyMywgNjQsIDI4LCAxNiwgMjI0LCAyNSwgMjIzLCA2NCwgMjgsIDE2LCAKKyAgICAyNDUsIDE5NywgMjIzLCA2NCwgMjgsIDE2LCAyMTksIDEyMCwgMjIzLCA2NCwgMjgsIDE2LCAyMTYsIDE2MSwgMjIzLCA2NCwgCisgICAgMjgsIDE2LCAyMTksIDExMiwgMjIzLCA2NCwgMjgsIDE2LCAxMjMsIDI0MCwgMjE4LCAyMTUsIDcxLCAyMjMsIDY0LCAyOCwgCisgICAgMTYsIDIxMSwgMTc5LCAyMjgsIDQ4LCAyOCwgMTYsIDk2LCAyMjgsIDQ4LCAyOCwgMTYsIDI1MCwgNDQsIDIxMSwgMTc5LCAKKyAgICAyMjgsIDQ4LCAyOCwgMTYsIDQyLCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCA0MiwgMjI4LCA0OSwgMjUxLCAyMjksIAorICAgIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDQzLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCAKKyAgICA0OSwgNDMsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAKKyAgICAyMjcsIDIyOCwgNDksIDQ0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyMTEsIDI1MywgMjgsIAorICAgIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCA0NCwgCisgICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgNDQsIDI1MSwgMjI5LCAyOCwgMTYsIDIzMCwgMTM0LCAKKyAgICAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAyMzAsIDEzNCwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjQsIAorICAgIDIyOCwgNDksIDEyNCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjQsIDIyOCwgNDksIDEyNCwgMjUxLCAyMjksIDI4LCAxNiwgCisgICAgMjI2LCA4LCAyMjgsIDQ4LCAyOCwgMTYsIDIxMywgMTMyLCAyMjgsIDQ4LCAyOCwgMTYsIDIyOCwgNDksIDI1MSwgMjI5LCAKKyAgICAyOCwgMTYsIDIyNywgMjA3LCAyMjgsIDQ4LCAyOCwgMTYsIDI0OSwgMjQ5LCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAKKyAgICAyNDksIDI0OSwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjUxLCAxNTQsIDI4LCAxNiwgMjExLCAyNTEsIDIyOCwgNTIsIAorICAgIDI4LCAxNiwgMTYzLCAyMjgsIDUyLCAyOCwgMTYsIDIyNCwgMjUsIDIyOCwgNTIsIDI4LCAxNiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI4LCAxNiwgMjE5LCAxMjAsIDIyOCwgNTIsIDI4LCAxNiwgMjE2LCAxNjEsIDIyOCwgNTIsIDI4LCAxNiwgMjE5LCAKKyAgICAxMTIsIDIyOCwgNTIsIDI4LCAxNiwgMTIzLCAyNDAsIDIxOCwgMjE1LCA3MSwgMjI4LCA1MiwgMjgsIDE2LCAzOCwgMjE4LCAKKyAgICAxNDEsIDI4LCAxNiwgMzgsIDIxOCwgMjQyLCAyMTgsIDE0MSwgMjgsIDE2LCAzOCwgMjE1LCAyMzUsIDI4LCAxNiwgMzgsIAorICAgIDIxNSwgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwOSwgMjE1LCAyMzUsIDI4LCAxNiwgMjQ0LCAKKyAgICAxMDksIDIxNSwgMjM0LCAyOCwgMTYsIDI0NCwgMTA5LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjUzLCAxOTcsIDI0NywgCisgICAgMTI4LCAyOCwgMTYsIDM4LCAyNDQsIDgwLCAyOCwgMTYsIDM4LCAyNDQsIDc5LCAyOCwgMTYsIDM4LCAyNDQsIDc4LCAyOCwgCisgICAgMTYsIDM4LCAyNDQsIDc3LCAyOCwgMTYsIDM4LCAyNDQsIDc2LCAyOCwgMTYsIDI1MiwgNjYsIDI1MiwgODIsIDI4LCAxNiwgCisgICAgMjQ1LCAxNTEsIDI1MiwgODIsIDI4LCAxNiwgMjUyLCA2NiwgMjE2LCAxMTIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxNiwgMTEyLCAKKyAgICAyOCwgMTYsIDI1MiwgNjYsIDIxOSwgODIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxOSwgODIsIDI4LCAxNiwgMjUyLCA2NiwgCisgICAgMjI1LCAxMTgsIDI4LCAxNiwgMjQ1LCAxNTEsIDIyNSwgMTE4LCAyOCwgMTYsIDM4LCAyNTUsIDIzLCAyOCwgMTYsIDM4LCAKKyAgICAyMTgsIDE2NywgMjgsIDE2LCAzOCwgMjE2LCAyMzksIDI4LCAxNiwgMzgsIDIxOCwgMTY4LCAyOCwgMTYsIDM4LCAyMzEsIAorICAgIDE2NywgMjgsIDE2LCAzOCwgMjMxLCAxNjYsIDI4LCAxNiwgMzgsIDI1NSwgMjIsIDI4LCAxNiwgMzgsIDIzMiwgMTE4LCAyOCwgCisgICAgMTYsIDI1NCwgNiwgMjE0LCAxNjMsIDI4LCAxNiwgMjU0LCA2LCAyNDYsIDExNCwgMjgsIDE2LCAzOCwgMjQ3LCAxNDMsIDI4LCAKKyAgICAxNiwgMzgsIDIyMiwgMjM0LCAyOCwgMTYsIDM4LCAyNDQsIDY2LCAyOCwgMTYsIDM4LCAyMTksIDc4LCAyOCwgMTYsIDM4LCAKKyAgICAyNTIsIDQ2LCAyOCwgMTYsIDM4LCA1MiwgMjE2LCAyMCwgMjgsIDE2LCAzOCwgMjE1LCAyMTIsIDIxNiwgMjAsIDI4LCAxNiwgCisgICAgMjIyLCAyMzgsIDI4LCAxNiwgMjE4LCA3NiwgMjgsIDE2LCAyMTAsIDE1OSwgMjgsIDE2LCAyMjUsIDExMCwgMjgsIDE2LCAKKyAgICAyMzEsIDMwLCAyOCwgMTYsIDI0NCwgMjUsIDI4LCAxNiwgMjQ5LCAxNDYsIDI4LCAxNiwgMjQ4LCA4NiwgMjgsIDE2LCAyNDIsIAorICAgIDE1NywgMjI4LCA1MywgMjE5LCA5NywgMjgsIDE2LCAyNDIsIDE1NywgMjI4LCA1MywgMjI4LCA4MCwgMjE5LCA5NywgMjgsIAorICAgIDE2LCAyMTYsIDEsIDI4LCAxNiwgMjE1LCA5NSwgMjgsIDE2LCAyMzUsIDIwMCwgMjE1LCA5NSwgMjgsIDE2LCAyMTUsIDk2LCAKKyAgICAyMTksIDk3LCAyOCwgMTYsIDIxNSwgOTYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwNCwgMjgsIDE2LCAKKyAgICAyMjYsIDE1MiwgMjE4LCAxMDEsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTAwLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIAorICAgIDk5LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgCisgICAgMTUyLCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk1LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk0LCAyOCwgCisgICAgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMywgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDIsIDI4LCAxNiwgMjQxLCAyNTIsIDI4LCAKKyAgICAxNiwgMjI5LCAxMTAsIDI4LCAxNiwgMjQ1LCAxNTEsIDY0LCAyMTgsIDEzNSwgMjgsIDE2LCAyNDgsIDc5LCAyMTksIDk3LCAKKyAgICAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAyNDIsIDcsIAorICAgIDI4LCAxNiwgMzgsIDIxOSwgNjksIDIyNSwgNDYsIDI4LCAxNiwgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDIyNSwgMjE5LCAKKyAgICAxMjAsIDc5LCAyOCwgMTYsIDE2MywgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDI0MiwgMTg5LCAyMTQsIDE2MywgMjgsIDE2LCAKKyAgICAyNDIsIDE4OSwgMjQ2LCAxMTQsIDI4LCAxNiwgMiwgMjQ0LCAxMDgsIDI4LCAxNiwgMjQ4LCAxODgsIDI4LCAxNiwgMjQ4LCAKKyAgICAxODksIDI1NCwgMTYzLCAyOCwgMTYsIDIzMSwgMTM4LCAyOCwgMTYsIDIzMiwgMTM1LCAyOCwgMTYsIDI1MSwgMTUxLCAyOCwgCisgICAgMTYsIDIyMCwgMTU2LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NiwgMjUxLCAyMjksIDI4LCAxNiwgMjMwLCAxODksIDI4LCAKKyAgICAxNiwgMjMwLCAxOTAsIDI1MSwgMjI5LCAyOCwgMTYsIDIyMCwgMTUwLCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1MCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjQzLCAyMjcsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjI3LCAyNTEsIDIyOSwgMjgsIDE2LCAKKyAgICAyMzIsIDEzNiwgMjI1LCAxODMsIDIyMywgNjQsIDI4LCAxNiwgMjMyLCAxMzYsIDIzNiwgMTEsIDIyMywgNjQsIDI4LCAxNiwgCisgICAgMjUxLCAxNTIsIDIyMywgNjQsIDI4LCAxNiwgMjIwLCAxNTYsIDIyMywgNjQsIDI4LCAxNiwgMjMwLCAxOTAsIDIyMywgNjQsIAorICAgIDI4LCAxNiwgMjIwLCAxNTAsIDIyMywgNjQsIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIyNSwgMTgyLCAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMzYsIDEwLCAKKyAgICAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MywgMjQ3LCAyMTksIDI4LCAKKyAgICAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MiwgMjgsIDE2LCAyMTYsIDI1MCwgCisgICAgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIDIzNiwgMTAsIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIAorICAgIDIyNCwgMTc3LCAyMzYsIDExLCAyNDcsIDIxOSwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIzNiwgMTEsIDI0NywgMjE4LCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgCisgICAgMjM2LCAxMSwgMjQ3LCAyMTcsIDI4LCAxNiwgMjQ5LCAxNDEsIDI4LCAxNiwgMjQyLCAxMzMsIDI1MSwgNzUsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQyLCAxMzMsIDI0NSwgMTUsIDI1MCwgMjIsIDI4LCAxNiwgNDIsIDI1MywgMTY2LCAyOCwgMTYsIDIxMywgCisgICAgMTUxLCAyOCwgMTYsIDIyNSwgMTcsIDI4LCAxNiwgMjUwLCAxMywgMjgsIDE2LCAyMjEsIDIwNSwgMjgsIDE2LCAyNTAsIDE3LCAKKyAgICAyOCwgMTYsIDIxNiwgOCwgMjgsIDE2LCAyMjQsIDI0NSwgMjgsIDE2LCAyMjQsIDI0NiwgMjQ0LCA2OCwgMjgsIDE2LCAyMjEsIAorICAgIDIwNiwgMjQ0LCA2OCwgMjgsIDE2LCAyMTYsIDksIDIyMywgNjEsIDI4LCAxNiwgMjI1LCAxNjYsIDIxOCwgNjcsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIzMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE5LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMDksIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIwMiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTk0LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODgsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4NywgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMTg2LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyOSwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjI4LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjcsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIyNiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjQsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMywgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjIyLCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMjEsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE4LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTcsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNiwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjE1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTQsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MywgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMTkyLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTEsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDE5MCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg5LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMzAsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxOSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAyLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4NywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTg2LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyNywgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjI2LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjIxLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjAsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIxNSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjE0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTMsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjExLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMTAsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwOCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA3LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDYsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjA0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDMsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMSwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjAwLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTksIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5OCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk3LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTYsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkzLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTIsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkwLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODksIDM4LCAyNiwgMjgsIDIxNSwgMjA5LCAzOCwgMjYsIDI4LCAyMTYsIDIyNCwgMzgsIAorICAgIDI2LCAyOCwgMjI1LCAxOTEsIDI2LCAyOCwgMjMzLCAzNywgMjMwLCAxNDcsIDMxLCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyNDEsIDIyOSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgMjQwLCAyMjEsIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIDI0NSwgCisgICAgMjMwLCAyNDEsIDIzMCwgMjQ3LCAyMzIsIDMxLCAyNDUsIDIzMCwgMjQwLCAyMjAsIDI0NywgMjMyLCAzMSwgMjQ1LCAyMzEsIAorICAgIDE4MCwgMzEsIDI1MCwgMTgyLCAxODAsIDMxLCAyNDMsIDIzNiwgMjUwLCA0MywgMTgwLCAzMSwgMjMwLCAxODIsIDE4MCwgCisgICAgMzEsIDI1MiwgMTM4LCAxODAsIDMxLCAyMzQsIDE4NSwgMjE5LCA4MSwgMTgwLCAzMSwgMjQ5LCAxODcsIDE4MCwgMzEsIAorICAgIDI1MywgMjQxLCAxODAsIDMxLCAyMjYsIDE2NywgMTgwLCAzMSwgMjUxLCAxNjEsIDIyNiwgMTM0LCAxODAsIDMxLCAyNDgsIAorICAgIDgxLCAxNzcsIDI0NywgMTg3LCAxODAsIDMxLCAyNDcsIDE4NCwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgCisgICAgMjU0LCAxODAsIDMxLCAyMjUsIDIwMCwgMTgwLCAzMSwgMjIzLCAxMzAsIDE4MCwgMzEsIDI0OSwgMTk3LCAxODAsIDMxLCAKKyAgICAyNDEsIDY3LCAyNTIsIDE5MiwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCA0NywgMTgwLCAzMSwgMjU0LCAyNTUsIAorICAgIDE4MCwgMzEsIDIyMywgOTIsIDE4MCwgMzEsIDIyMywgNjgsIDE4MCwgMzEsIDI0NSwgMjI5LCAxODAsIDMxLCAyMzUsIDU5LCAKKyAgICAxODAsIDMxLCAyNDksIDE5MiwgMTgwLCAzMSwgMjQ1LCAxNTAsIDE4MCwgMzEsIDI0NiwgNjAsIDE4MCwgMzEsIDI1MCwgCisgICAgMTUzLCAxODAsIDMxLCAyNDgsIDkwLCAxODAsIDMxLCAyMywgMjIzLCA2NywgMTgwLCAzMSwgMjI2LCA4NSwgMTgwLCAzMSwgCisgICAgMjMzLCA0MCwgMTgwLCAzMSwgMjUwLCA2LCAxODAsIDMxLCAyMzQsIDgzLCAxODAsIDMxLCAyNDMsIDkzLCAxODAsIDMxLCAKKyAgICAyMTgsIDExNCwgMTgwLCAzMSwgMjI0LCAxMzMsIDE4MCwgMzEsIDI0MywgMjM1LCAxODAsIDMxLCAyMjMsIDY5LCAxODAsIAorICAgIDMxLCAyMzMsIDc3LCAxNzcsIDIzMCwgMTYyLCAxODAsIDMxLCAyMjMsIDY1LCAxODAsIDMxLCAyNDIsIDE3NSwgMjE2LCA0MywgCisgICAgMjMxLCA4MSwgMTgwLCAzMSwgMjQ1LCAxNTIsIDE4MCwgMzEsIDIxOCwgMTI2LCAxODAsIDMxLCAyNDIsIDEzNSwgMTgwLCAKKyAgICAzMSwgMjQ1LCAxNDQsIDE4MCwgMzEsIDIyNSwgMjM5LCAxODAsIDMxLCAyMjIsIDIyOCwgMTgwLCAzMSwgMjQ0LCA2NywgCisgICAgMTgwLCAzMSwgMjE0LCA4LCAxNzcsIDIxMiwgNDQsIDE4MCwgMzEsIDI0OSwgMjAxLCAxODAsIDMxLCAyMzEsIDk0LCAxODAsIAorICAgIDMxLCAyNDUsIDY5LCAxODAsIDMxLCAyMTQsIDE3MiwgMTgwLCAzMSwgMjQ3LCAyMjAsIDE4MCwgMzEsIDI1MCwgOCwgMjMwLCAKKyAgICAxMTUsIDE4MCwgMzEsIDI0MiwgMTEzLCAxODAsIDMxLCAyNDMsIDk0LCAyMzYsIDYsIDE4MCwgMzEsIDIzMSwgMTQ2LCAxODAsIAorICAgIDMxLCAyNTUsIDE5LCAxODAsIDMxLCAyNDUsIDE2NSwgMTgwLCAzMSwgMjQ2LCAxMTcsIDE4MCwgMzEsIDIxMiwgNDIsIDE4MCwgCisgICAgMzEsIDIxOSwgMTUyLCAxODAsIDMxLCAyMzUsIDIyOSwgMTgwLCAzMSwgMjQ4LCA1MCwgMTgwLCAzMSwgMjQ4LCAxNjgsIAorICAgIDE4MCwgMzEsIDI0NywgMjE2LCAxODAsIDMxLCAyNDUsIDM3LCAxODAsIDMxLCAyMjAsIDExNywgMTgwLCAzMSwgMjE4LCAKKyAgICAxMzAsIDE4MCwgMzEsIDI0MiwgOSwgMTgwLCAzMSwgMjQ5LCAyMjAsIDE4MCwgMzEsIDI1MCwgMywgMTgwLCAzMSwgMjQ0LCAKKyAgICAxODUsIDE4MCwgMzEsIDI1NCwgMjIxLCAxODAsIDMxLCAyNDksIDIxOSwgMTgwLCAzMSwgMjI2LCAyMDEsIDIxNiwgMTk3LCAKKyAgICAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyNDAsIDE4MCwgMzEsIDIzMywgMTMwLCAxODAsIDMxLCAyNDQsIDIxLCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTA1LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgCisgICAgMTYxLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAKKyAgICAyMSwgMTk1LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgCisgICAgMTc0LCAyMSwgMTk2LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMjAxLCAyNDksIDE1NywgMjIyLCAyMDQsIAorICAgIDIxNiwgMjQ0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTA1LCAyNDksIDE1NywgMjIyLCAKKyAgICAyMDQsIDIxNiwgMjQ0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTYxLCAyNDksIDE1NywgCisgICAgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk1LCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk2LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMjAxLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDYsIDI1MSwgNzQsIDExLCAyMywgNiwgMjQ5LCA2OCwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDYsIDI0MiwgNjcsIDExLCAyMywgNiwgNzQsIDExLCAyMywgCisgICAgNiwgMjM1LCAxNTAsIDExLCAyMywgNiwgMjM1LCAyOSwgMTEsIDIzLCA2LCAxNTYsIDExLCAyMywgNiwgMTk0LCAxMSwgMjMsIAorICAgIDYsIDIzMCwgMzAsIDExLCAyMywgNiwgNzgsIDExLCAyMywgNiwgMjI2LCAxMDksIDExLCAyMywgNiwgMjI0LCA5OSwgMTEsIAorICAgIDIzLCA2LCAxNTMsIDExLCAyMywgNiwgMjIyLCA5MywgMTEsIDIzLCA2LCAyMTcsIDE1MywgMTEsIDIzLCA2LCA2OSwgMTEsIAorICAgIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDYsIDIxMSwgCisgICAgMTE3LCAxMSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDQsIDYxLCAxMSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDQsIAorICAgIDI1MSwgNzQsIDExLCAyMywgNCwgMjQ5LCA2OCwgMTEsIDIzLCA0LCA3NiwgMTEsIDIzLCA0LCAyNDUsIDE0LCAxMSwgMjMsIAorICAgIDQsIDI0MywgMjA5LCAxMSwgMjMsIDQsIDI0MiwgNjcsIDExLCAyMywgNCwgNzQsIDExLCAyMywgNCwgMjM1LCAxNTAsIDExLCAKKyAgICAyMywgNCwgMjM1LCAyOSwgMTEsIDIzLCA0LCAxNTYsIDExLCAyMywgNCwgMTk0LCAxMSwgMjMsIDQsIDIzMCwgMzAsIDExLCAKKyAgICAyMywgNCwgNzgsIDExLCAyMywgNCwgMjI2LCAxMDksIDExLCAyMywgNCwgMjI0LCA5OSwgMTEsIDIzLCA0LCAxNTMsIDExLCAKKyAgICAyMywgNCwgMjIyLCA5MywgMTEsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDIzLCA0LCA2OSwgMTEsIDIzLCA0LCAyMTQsIDEwNSwgCisgICAgMTEsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMzIsIDYsIDYxLCAxMSwgMzIsIDYsIDI1MywgMTY2LCAxMSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzMiwgCisgICAgNiwgMjQ5LCA2OCwgMTEsIDMyLCA2LCA3NiwgMTEsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzIsIDYsIDI0MywgMjA5LCAxMSwgCisgICAgMzIsIDYsIDI0MiwgNjcsIDExLCAzMiwgNiwgNzQsIDExLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzMiwgNiwgMjM1LCAyOSwgCisgICAgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTk0LCAxMSwgMzIsIDYsIDIzMCwgMzAsIDExLCAzMiwgNiwgNzgsIDExLCAKKyAgICAzMiwgNiwgMjI2LCAxMDksIDExLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgMjIyLCA5MywgCisgICAgMTEsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDMyLCA2LCA2OSwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCA2LCAyMTIsIAorICAgIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgCisgICAgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzIsIDQsIDI1MSwgNzQsIDExLCAzMiwgNCwgMjQ5LCA2OCwgCisgICAgMTEsIDMyLCA0LCA3NiwgMTEsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMzIsIDQsIDI0MywgMjA5LCAxMSwgMzIsIDQsIDc0LCAKKyAgICAxMSwgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzIsIDQsIDIzNSwgMjksIDExLCAzMiwgNCwgMTU2LCAxMSwgMzIsIDQsIDE5NCwgCisgICAgMTEsIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzIsIDQsIDc4LCAxMSwgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzIsIDQsIDIyNCwgCisgICAgOTksIDExLCAzMiwgNCwgMTUzLCAxMSwgMzIsIDQsIDIyMiwgOTMsIDExLCAzMiwgNCwgMjE3LCAxNTMsIDExLCAzMiwgNCwgCisgICAgNjksIDExLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDMyLCAKKyAgICA0LCAyMTEsIDExNywgMTEsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNiwgNjEsIDExLCAyMywgMzIsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMjMsIDMyLCA2LCAyNDksIDY4LCAxMSwgMjMsIDMyLCA2LCA3NiwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDIzLCAzMiwgNiwgMjQzLCAyMDksIDExLCAyMywgMzIsIDYsIDI0MiwgNjcsIAorICAgIDExLCAyMywgMzIsIDYsIDc0LCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAyOSwgMTEsIAorICAgIDIzLCAzMiwgNiwgMTU2LCAxMSwgMjMsIDMyLCA2LCAxOTQsIDExLCAyMywgMzIsIDYsIDIzMCwgMzAsIDExLCAyMywgMzIsIAorICAgIDYsIDc4LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDIzLCAzMiwgNiwgCisgICAgMTUzLCAxMSwgMjMsIDMyLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDIzLCAzMiwgNiwgNjksIAorICAgIDExLCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA0LCA2MSwgMTEsIAorICAgIDIzLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAyMywgMzIsIDQsIDI1MSwgNzQsIDExLCAyMywgMzIsIDQsIDI0OSwgNjgsIDExLCAKKyAgICAyMywgMzIsIDQsIDc2LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjQyLCA2NywgMTEsIDIzLCAzMiwgNCwgNzQsIDExLCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMjMsIDMyLCAKKyAgICA0LCAyMzUsIDI5LCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5NCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAKKyAgICAzMCwgMTEsIDIzLCAzMiwgNCwgNzgsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDMyLCA0LCAyMjQsIDk5LCAKKyAgICAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAyMywgMzIsIDQsIDIxNywgMTUzLCAxMSwgCisgICAgMjMsIDMyLCA0LCA2OSwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgOTgsIDExLCAyMywgCisgICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAxNTksIDExLCAKKyAgICAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDc0LCAxMSwgMTE5LCA2LCAyNDksIDY4LCAxMSwgMTE5LCA2LCAyNDMsIAorICAgIDIwOSwgMTEsIDExOSwgNiwgMjM1LCAxNTAsIDExLCAxMTksIDYsIDIzNSwgMjksIDExLCAxMTksIDYsIDIzMCwgMzAsIDExLCAKKyAgICAxMTksIDYsIDc4LCAxMSwgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDExOSwgNiwgMjI0LCA5OSwgMTEsIDExOSwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDExOSwgNiwgMjE3LCAxNTMsIDExLCAxMTksIDYsIDY5LCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDExOSwgCisgICAgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCA2LCAyMTAsIAorICAgIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTY2LCAxMSwgMTE5LCA0LCAyNTEsIDc0LCAxMSwgMTE5LCAKKyAgICA0LCAyNDksIDY4LCAxMSwgMTE5LCA0LCAyNDUsIDE0LCAxMSwgMTE5LCA0LCAyNDIsIDY3LCAxMSwgMTE5LCA0LCA3NCwgMTEsIAorICAgIDExOSwgNCwgMjM1LCAxNTAsIDExLCAxMTksIDQsIDIzNSwgMjksIDExLCAxMTksIDQsIDE1NiwgMTEsIDExOSwgNCwgMTk0LCAKKyAgICAxMSwgMTE5LCA0LCAyMzAsIDMwLCAxMSwgMTE5LCA0LCAyMjYsIDEwOSwgMTEsIDExOSwgNCwgMjI0LCA5OSwgMTEsIDExOSwgCisgICAgNCwgMTUzLCAxMSwgMTE5LCA0LCAyMjIsIDkzLCAxMSwgMTE5LCA0LCAyMTcsIDE1MywgMTEsIDExOSwgNCwgNjksIDExLCAKKyAgICAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMTE5LCA0LCAyMTEsIDE3OCwgMTEsIDExOSwgNCwgCisgICAgMjExLCAxMTcsIDExLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNiwgNjEsIDExLCAyMywgMTE5LCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCAxMTksIDYsIDI1MSwgNzQsIDExLCAyMywgMTE5LCA2LCAyNDksIDY4LCAxMSwgMjMsIDExOSwgNiwgCisgICAgNzYsIDExLCAyMywgMTE5LCA2LCAyNDUsIDE0LCAxMSwgMjMsIDExOSwgNiwgMjQzLCAyMDksIDExLCAyMywgMTE5LCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMsIDExOSwgNiwgNzQsIDExLCAyMywgMTE5LCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMTksIDYsIAorICAgIDIzNSwgMjksIDExLCAyMywgMTE5LCA2LCAxNTYsIDExLCAyMywgMTE5LCA2LCAxOTQsIDExLCAyMywgMTE5LCA2LCAyMzAsIAorICAgIDMwLCAxMSwgMjMsIDExOSwgNiwgNzgsIDExLCAyMywgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMTksIDYsIDIyNCwgCisgICAgOTksIDExLCAyMywgMTE5LCA2LCAxNTMsIDExLCAyMywgMTE5LCA2LCAyMjIsIDkzLCAxMSwgMjMsIDExOSwgNiwgMjE3LCAKKyAgICAxNTMsIDExLCAyMywgMTE5LCA2LCA2OSwgMTEsIDIzLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNiwgMjEyLCAKKyAgICA5OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxMTcsIDExLCAyMywgMTE5LCA2LCAKKyAgICAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDQsIDYxLCAxMSwgMjMsIDExOSwgNCwgMjUzLCAxNjYsIDExLCAyMywgMTE5LCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjQ5LCA2OCwgMTEsIDIzLCAxMTksIDQsIDc2LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjA5LCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2NywgMTEsIDIzLCAxMTksIAorICAgIDQsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNTAsIDExLCAyMywgMTE5LCA0LCAyMzUsIDI5LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTk0LCAxMSwgMjMsIDExOSwgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMTksIDQsIDc4LCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDksIDExLCAyMywgMTE5LCA0LCAyMjQsIDk5LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MywgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUzLCAxMSwgMjMsIDExOSwgNCwgNjksIAogICAgIDExLCAyMywgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDQsIDIxMiwgOTgsIDExLCAyMywgMTE5LCA0LCAyMTEsIAogICAgIDE3OCwgMTEsIDIzLCAxMTksIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgNCwgMjEwLCAxNTksIDExLCAxMzMsIDYsIDYxLCAKLSAgICAxMSwgMTMzLCA2LCAyNTMsIDE1OCwgMTEsIDEzMywgNiwgMjQ5LCA2MCwgMTEsIDEzMywgNiwgNzUsIDExLCAxMzMsIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzMywgNiwgMjQzLCAyMDIsIDExLCAxMzMsIDYsIDIzNSwgMTQ0LCAxMSwgMTMzLCA2LCAyMzUsIDIzLCAKLSAgICAxMSwgMTMzLCA2LCAxNTYsIDExLCAxMzMsIDYsIDE5MywgMTEsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDEzMywgNiwgNzYsIAotICAgIDExLCAxMzMsIDYsIDIyNiwgMTA1LCAxMSwgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMTMzLCA2LCAyMjIsIDkxLCAxMSwgMTMzLCAKLSAgICA2LCAyMTcsIDE1MiwgMTEsIDEzMywgNiwgNzAsIDExLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMTMzLCA2LCAyMTIsIDk4LCAKKyAgICAxMSwgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDEzMywgNiwgMjQ5LCA2OCwgMTEsIDEzMywgNiwgNzYsIDExLCAxMzMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAxMzMsIDYsIDI0MywgMjA5LCAxMSwgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDEzMywgNiwgMjM1LCAyOSwgCisgICAgMTEsIDEzMywgNiwgMTU2LCAxMSwgMTMzLCA2LCAxOTQsIDExLCAxMzMsIDYsIDIzMCwgMzAsIDExLCAxMzMsIDYsIDc4LCAKKyAgICAxMSwgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDEzMywgNiwgMjI0LCA5OSwgMTEsIDEzMywgNiwgMjIyLCA5MywgMTEsIDEzMywgCisgICAgNiwgMjE3LCAxNTMsIDExLCAxMzMsIDYsIDY5LCAxMSwgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDEzMywgNiwgMjEyLCA5OCwgCiAgICAgMTEsIDEzMywgNiwgMjExLCAxNzgsIDExLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMTMzLCA0LCA2MSwgMTEsIDEzMywgNCwgCi0gICAgMjUzLCAxNTgsIDExLCAxMzMsIDQsIDI1MSwgNjYsIDExLCAxMzMsIDQsIDI0OSwgNjAsIDExLCAxMzMsIDQsIDc1LCAxMSwgCi0gICAgMTMzLCA0LCAyNDUsIDYsIDExLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgMTMzLCA0LCAyNDIsIDYwLCAxMSwgMTMzLCA0LCAKLSAgICA3MywgMTEsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAxMzMsIDQsIDIzNSwgMjMsIDExLCAxMzMsIDQsIDE1NiwgMTEsIDEzMywgCi0gICAgNCwgMTkzLCAxMSwgMTMzLCA0LCAyMzAsIDI1LCAxMSwgMTMzLCA0LCA3NiwgMTEsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAKLSAgICAxMzMsIDQsIDIyNCwgOTYsIDExLCAxMzMsIDQsIDE1MywgMTEsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDEzMywgNCwgMjE3LCAKLSAgICAxNTIsIDExLCAxMzMsIDQsIDcwLCAxMSwgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDEzMywgCisgICAgMjUzLCAxNjYsIDExLCAxMzMsIDQsIDI1MSwgNzQsIDExLCAxMzMsIDQsIDI0OSwgNjgsIDExLCAxMzMsIDQsIDc2LCAxMSwgCisgICAgMTMzLCA0LCAyNDUsIDE0LCAxMSwgMTMzLCA0LCAyNDMsIDIwOSwgMTEsIDEzMywgNCwgMjQyLCA2NywgMTEsIDEzMywgNCwgCisgICAgNzQsIDExLCAxMzMsIDQsIDIzNSwgMTUwLCAxMSwgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMTMzLCA0LCAxNTYsIDExLCAxMzMsIAorICAgIDQsIDE5NCwgMTEsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDEzMywgNCwgNzgsIDExLCAxMzMsIDQsIDIyNiwgMTA5LCAxMSwgCisgICAgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMTMzLCA0LCAxNTMsIDExLCAxMzMsIDQsIDIyMiwgOTMsIDExLCAxMzMsIDQsIDIxNywgCisgICAgMTUzLCAxMSwgMTMzLCA0LCA2OSwgMTEsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAxMzMsIAogICAgIDQsIDIxMSwgMTc4LCAxMSwgMTMzLCA0LCAyMTEsIDExNywgMTEsIDEzMywgNCwgMjEwLCAxNTksIDExLCAxMzksIDYsIDYxLCAKLSAgICAxMSwgMTM5LCA2LCAyNTMsIDE1OCwgMTEsIDEzOSwgNiwgMjQ5LCA2MCwgMTEsIDEzOSwgNiwgNzUsIDExLCAxMzksIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzOSwgNiwgMjQzLCAyMDIsIDExLCAxMzksIDYsIDczLCAxMSwgMTM5LCA2LCAyMzUsIDE0NCwgMTEsIAotICAgIDEzOSwgNiwgMjM1LCAyMywgMTEsIDEzOSwgNiwgMTU2LCAxMSwgMTM5LCA2LCAxOTMsIDExLCAxMzksIDYsIDc2LCAxMSwgCi0gICAgMTM5LCA2LCAyMjIsIDkxLCAxMSwgMTM5LCA2LCAyMTcsIDE1MiwgMTEsIDEzOSwgNiwgNzAsIDExLCAxMzksIDYsIDIxNCwgCisgICAgMTEsIDEzOSwgNiwgMjUzLCAxNjYsIDExLCAxMzksIDYsIDI0OSwgNjgsIDExLCAxMzksIDYsIDc2LCAxMSwgMTM5LCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMTM5LCA2LCAyNDMsIDIwOSwgMTEsIDEzOSwgNiwgNzQsIDExLCAxMzksIDYsIDIzNSwgMTUwLCAxMSwgCisgICAgMTM5LCA2LCAyMzUsIDI5LCAxMSwgMTM5LCA2LCAxNTYsIDExLCAxMzksIDYsIDE5NCwgMTEsIDEzOSwgNiwgNzgsIDExLCAKKyAgICAxMzksIDYsIDIyMiwgOTMsIDExLCAxMzksIDYsIDIxNywgMTUzLCAxMSwgMTM5LCA2LCA2OSwgMTEsIDEzOSwgNiwgMjE0LCAKICAgICAxMDUsIDExLCAxMzksIDYsIDIxMiwgOTgsIDExLCAxMzksIDYsIDIxMSwgMTc4LCAxMSwgMTM5LCA2LCAyMTEsIDExNywgMTEsIAotICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTU4LCAxMSwgMTM5LCA0LCAyNTEsIDY2LCAxMSwgMTM5LCA0LCAyNDksIAotICAgIDYwLCAxMSwgMTM5LCA0LCA3NSwgMTEsIDEzOSwgNCwgMjQ1LCA2LCAxMSwgMTM5LCA0LCAyNDMsIDIwMiwgMTEsIDEzOSwgNCwgCi0gICAgMjQyLCA2MCwgMTEsIDEzOSwgNCwgNzMsIDExLCAxMzksIDQsIDIzNSwgMTQ0LCAxMSwgMTM5LCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMTM5LCA0LCAxNTYsIDExLCAxMzksIDQsIDE5MywgMTEsIDEzOSwgNCwgMjMwLCAyNSwgMTEsIDEzOSwgNCwgNzYsIDExLCAKLSAgICAxMzksIDQsIDIyNiwgMTA1LCAxMSwgMTM5LCA0LCAyMjQsIDk2LCAxMSwgMTM5LCA0LCAxNTMsIDExLCAxMzksIDQsIDIyMiwgCi0gICAgOTEsIDExLCAxMzksIDQsIDIxNywgMTUyLCAxMSwgMTM5LCA0LCA3MCwgMTEsIDEzOSwgNCwgMjE0LCAxMDUsIDExLCAxMzksIAotICAgIDQsIDIxMiwgOTgsIDExLCAxMzksIDQsIDIxMSwgMTc4LCAxMSwgMTM5LCA0LCAyMTEsIDExNywgMTEsIDEzOSwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAyMywgMTMzLCA2LCA2MSwgMTEsIDIzLCAxMzMsIDYsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDIzLCAxMzMsIDYsIDI0OSwgNjAsIDExLCAyMywgMTMzLCA2LCA3NSwgMTEsIDIzLCAxMzMsIDYsIDI0NSwgNiwgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDEzMywgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDYsIDczLCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjM1LCAxNDQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNiwgMTU2LCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMTkzLCAxMSwgMjMsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDYsIDc2LCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjI2LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNiwgMTUzLCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMzMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNiwgNzAsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA2LCAyMTEsIDE3OCwgMTEsIAotICAgIDIzLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNiwgMjEwLCAxNTksIDExLCAyMywgMTMzLCA0LCA2MSwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMzMsIDQsIDI0OSwgNjAsIAotICAgIDExLCAyMywgMTMzLCA0LCA3NSwgMTEsIDIzLCAxMzMsIDQsIDI0NSwgNiwgMTEsIDIzLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDQsIDczLCAxMSwgMjMsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgMTkzLCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNCwgNzAsIDExLCAyMywgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTE3LCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNTgsIDExLCAzNSwgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDM1LCA2LCAyNDksIDYwLCAxMSwgMzUsIDYsIDc1LCAxMSwgMzUsIDYsIDI0NSwgNiwgMTEsIDM1LCA2LCAyNDMsIAotICAgIDIwMiwgMTEsIDM1LCA2LCAyNDIsIDYwLCAxMSwgMzUsIDYsIDczLCAxMSwgMzUsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDYsIAotICAgIDIzNSwgMjMsIDExLCAzNSwgNiwgMTU2LCAxMSwgMzUsIDYsIDE5MywgMTEsIDM1LCA2LCAyMzAsIDI1LCAxMSwgMzUsIDYsIAotICAgIDc2LCAxMSwgMzUsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDYsIDIyNCwgOTYsIDExLCAzNSwgNiwgMTUzLCAxMSwgMzUsIDYsIAotICAgIDIyMiwgOTEsIDExLCAzNSwgNiwgMjE3LCAxNTIsIDExLCAzNSwgNiwgNzAsIDExLCAzNSwgNiwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgNiwgMjEyLCA5OCwgMTEsIDM1LCA2LCAyMTEsIDE3OCwgMTEsIDM1LCA2LCAyMTEsIDExNywgMTEsIDM1LCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCA0LCA2MSwgMTEsIDM1LCA0LCAyNTMsIDE1OCwgMTEsIDM1LCA0LCAyNTEsIDY2LCAxMSwgMzUsIDQsIAotICAgIDI0OSwgNjAsIDExLCAzNSwgNCwgNzUsIDExLCAzNSwgNCwgMjQ1LCA2LCAxMSwgMzUsIDQsIDI0MywgMjAyLCAxMSwgMzUsIAotICAgIDQsIDI0MiwgNjAsIDExLCAzNSwgNCwgNzMsIDExLCAzNSwgNCwgMjM1LCAxNDQsIDExLCAzNSwgNCwgMjM1LCAyMywgMTEsIAotICAgIDM1LCA0LCAxNTYsIDExLCAzNSwgNCwgMTkzLCAxMSwgMzUsIDQsIDIzMCwgMjUsIDExLCAzNSwgNCwgNzYsIDExLCAzNSwgNCwgCi0gICAgMjI2LCAxMDUsIDExLCAzNSwgNCwgMjI0LCA5NiwgMTEsIDM1LCA0LCAxNTMsIDExLCAzNSwgNCwgMjIyLCA5MSwgMTEsIDM1LCAKLSAgICA0LCAyMTcsIDE1MiwgMTEsIDM1LCA0LCA3MCwgMTEsIDM1LCA0LCAyMTQsIDEwNSwgMTEsIDM1LCA0LCAyMTIsIDk4LCAxMSwgCi0gICAgMzUsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA2LCAKLSAgICA2MSwgMTEsIDM1LCAyMywgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDYsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDYsIDI0OSwgCi0gICAgNjAsIDExLCAzNSwgMjMsIDYsIDc1LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDYsIDExLCAzNSwgMjMsIDYsIDI0MywgMjAyLCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCA2LCA3MywgMTEsIDM1LCAyMywgNiwgMjM1LCAxNDQsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAyMywgNiwgMTkzLCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCA2LCA3NiwgMTEsIDM1LCAyMywgNiwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDYsIAotICAgIDIyNCwgOTYsIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCA5MSwgMTEsIDM1LCAyMywgNiwgMjE3LCAKLSAgICAxNTIsIDExLCAzNSwgMjMsIDYsIDcwLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgCi0gICAgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyNDksIDYwLCAxMSwgMzUsIDIzLCA0LCA3NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAyMywgNCwgMjQyLCA2MCwgMTEsIDM1LCAyMywgNCwgNzMsIDExLCAzNSwgMjMsIAotICAgIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCA0LCAxNTYsIDExLCAzNSwgMjMsIDQsIAotICAgIDE5MywgMTEsIDM1LCAyMywgNCwgMjMwLCAyNSwgMTEsIDM1LCAyMywgNCwgNzYsIDExLCAzNSwgMjMsIDQsIDIyNiwgMTA1LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDIzLCA0LCAxNTMsIDExLCAzNSwgMjMsIDQsIDIyMiwgOTEsIDExLCAKLSAgICAzNSwgMjMsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDIzLCA0LCA3MCwgMTEsIDM1LCAyMywgNCwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDExNywgMTEsIDM1LCAKLSAgICAyMywgNCwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDYsIDYxLCAxMSwgMzUsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAzMiwgCi0gICAgNiwgMjUxLCA2NiwgMTEsIDM1LCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDM1LCAzMiwgNiwgNzUsIDExLCAzNSwgMzIsIDYsIAotICAgIDI0NSwgNiwgMTEsIDM1LCAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzNSwgMzIsIDYsIAotICAgIDczLCAxMSwgMzUsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAyMywgMTEsIDM1LCAzMiwgNiwgMTU2LCAKLSAgICAxMSwgMzUsIDMyLCA2LCAxOTMsIDExLCAzNSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzNSwgMzIsIDYsIDc2LCAxMSwgMzUsIAotICAgIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjI0LCA5NiwgMTEsIDM1LCAzMiwgNiwgMTUzLCAxMSwgMzUsIDMyLCAKLSAgICA2LCAyMjIsIDkxLCAxMSwgMzUsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDM1LCAzMiwgNiwgNzAsIDExLCAzNSwgMzIsIDYsIAotICAgIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjExLCAxMTcsIDExLCAzNSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA0LCA2MSwgMTEsIDM1LCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzNSwgMzIsIDQsIDI0OSwgNjAsIDExLCAzNSwgMzIsIDQsIDc1LCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyNDUsIDYsIDExLCAzNSwgMzIsIDQsIDI0MywgMjAyLCAxMSwgMzUsIDMyLCA0LCAyNDIsIDYwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCA3MywgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzNSwgMzIsIDQsIDIzNSwgMjMsIDExLCAKLSAgICAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTkzLCAxMSwgMzUsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDMyLCAKLSAgICA0LCA3NiwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMzIsIDQsIAotICAgIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MSwgMTEsIDM1LCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMzIsIDQsIDcwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIAotICAgIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgMzIsIDYsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAxNTYsIDExLCAzNSwgMjMsIDMyLCA2LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgNzYsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA2LCA3MCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDQsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNCwgNzMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIAotICAgIDE0NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTYsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgNCwgNzYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMjMsIDMyLCA0LCAKLSAgICA3MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzMCwgMTM4LCA2LCA2MSwgMTEsIDIzMCwgMTM4LCA2LCAyNTMsIDE1OCwgMTEsIDIzMCwgMTM4LCA2LCAKLSAgICAyNTEsIDY2LCAxMSwgMjMwLCAxMzgsIDYsIDI0OSwgNjAsIDExLCAyMzAsIDEzOCwgNiwgNzUsIDExLCAyMzAsIDEzOCwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMjMwLCAxMzgsIDYsIDI0MywgMjAyLCAxMSwgMjMwLCAxMzgsIDYsIDI0MiwgNjAsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzMsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAxNDQsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAyMywgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTYsIDExLCAyMzAsIDEzOCwgNiwgMTkzLCAxMSwgMjMwLCAxMzgsIDYsIDIzMCwgMjUsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzYsIDExLCAyMzAsIDEzOCwgNiwgMjI2LCAxMDUsIDExLCAyMzAsIDEzOCwgNiwgMjI0LCA5NiwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTMsIDExLCAyMzAsIDEzOCwgNiwgMjIyLCA5MSwgMTEsIDIzMCwgMTM4LCA2LCAyMTcsIDE1MiwgMTEsIAotICAgIDIzMCwgMTM4LCA2LCA3MCwgMTEsIDIzMCwgMTM4LCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTM4LCA2LCAyMTIsIDk4LCAxMSwgCi0gICAgMjMwLCAxMzgsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxMzgsIDYsIDIxMSwgMTE3LCAxMSwgMjMwLCAxMzgsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMwLCAxMzgsIDQsIDYxLCAxMSwgMjMwLCAxMzgsIDQsIDI1MywgMTU4LCAxMSwgMjMwLCAxMzgsIDQsIAotICAgIDI1MSwgNjYsIDExLCAyMzAsIDEzOCwgNCwgMjQ5LCA2MCwgMTEsIDIzMCwgMTM4LCA0LCA3NSwgMTEsIDIzMCwgMTM4LCA0LCAKLSAgICAyNDUsIDYsIDExLCAyMzAsIDEzOCwgNCwgMjQzLCAyMDIsIDExLCAyMzAsIDEzOCwgNCwgMjQyLCA2MCwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3MywgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDE0NCwgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDIzLCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1NiwgMTEsIDIzMCwgMTM4LCA0LCAxOTMsIDExLCAyMzAsIDEzOCwgNCwgMjMwLCAyNSwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3NiwgMTEsIDIzMCwgMTM4LCA0LCAyMjYsIDEwNSwgMTEsIDIzMCwgMTM4LCA0LCAyMjQsIDk2LCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1MywgMTEsIDIzMCwgMTM4LCA0LCAyMjIsIDkxLCAxMSwgMjMwLCAxMzgsIDQsIDIxNywgMTUyLCAxMSwgCi0gICAgMjMwLCAxMzgsIDQsIDcwLCAxMSwgMjMwLCAxMzgsIDQsIDIxNCwgMTA1LCAxMSwgMjMwLCAxMzgsIDQsIDIxMiwgOTgsIDExLCAKLSAgICAyMzAsIDEzOCwgNCwgMjExLCAxNzgsIDExLCAyMzAsIDEzOCwgNCwgMjExLCAxMTcsIDExLCAyMzAsIDEzOCwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAzMiwgNCwgMjQ3LCAxMTksIDczLCAxMSwgMzIsIDQsIDI0NywgMTE5LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMjMsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDYsIDI0OCwgNTQsIAotICAgIDExLCAyMywgNiwgMjQ1LCAxMDAsIDExLCAyMywgNiwgMjEwLCA4NSwgMTEsIDIzLCA2LCAyNDUsIDYzLCAxMSwgMjMsIDYsIAotICAgIDIxNiwgMTc5LCAxMSwgMjMsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDYsIDIzNCwgMjIyLCAxMSwgMjMsIDYsIDIzMywgOTgsIAotICAgIDExLCAyMywgNiwgMjMwLCAxMDIsIDExLCAyMywgNiwgMjI3LCAyMzcsIDExLCAyMywgNiwgMjExLCAxNTcsIDExLCAyMywgNiwgCi0gICAgMjI2LCAxOTksIDExLCAyMywgNiwgMjI1LCAxMDgsIDExLCAyMywgNiwgMjIzLCAzNywgMTEsIDIzLCA2LCAyMTYsIDE4MCwgCi0gICAgODcsIDExLCAyMywgNiwgMjE5LCAxNzcsIDExLCAyMywgNiwgMjE3LCA0MSwgMTEsIDIzLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICA2LCAyMjUsIDEzMywgMTEsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDIzLCA2LCAyMjQsIDE2MSwgMTEsIDIzLCA2LCAyMjYsIAotICAgIDIwMSwgMTEsIDIzLCAyMjksIDIyMSwgMTEsIDIzLCA0LCAyNTQsIDE0MywgMTEsIDIzLCA0LCAyNTIsIDI2LCAxMSwgMjMsIAotICAgIDQsIDI0MywgMTA3LCAxMSwgMjMsIDQsIDI0OCwgNTQsIDExLCAyMywgNCwgMjQ1LCAxMDAsIDExLCAyMywgNCwgMjEwLCA4NSwgCi0gICAgMTEsIDIzLCA0LCAyNDUsIDYzLCAxMSwgMjMsIDQsIDIxNiwgMTc5LCAxMSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMjMsIDQsIAotICAgIDIzNCwgMjIyLCAxMSwgMjMsIDQsIDIzMywgOTgsIDExLCAyMywgNCwgMjMwLCAxMDIsIDExLCAyMywgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAxOTksIDExLCAyMywgNCwgMjI1LCAxMDgsIDExLCAyMywgNCwgCi0gICAgMjIzLCAzNywgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzMywgMTEsIDIzLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDIzLCA0LCAyMjYsIDIwMSwgMTEsIDIzLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAyMywgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMjMsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAyMzQsIDIyMywgODcsIDExLCAyMywgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMjMsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDIyNSwgMTA5LCA4NywgMTEsIDMyLCA2LCAyNTQsIDE0MywgCi0gICAgMTEsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzIsIDYsIDI0MywgMTA3LCAxMSwgMzIsIDYsIDI0OCwgNTQsIDExLCAzMiwgNiwgCi0gICAgMjQ1LCAxMDAsIDExLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDMyLCA2LCAyNDUsIDYzLCAxMSwgMzIsIDYsIDIxNiwgMTc5LCAKLSAgICAxMSwgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMzIsIDYsIDIzNCwgMjIyLCAxMSwgMzIsIDYsIDIzMywgOTgsIDExLCAzMiwgNiwgCi0gICAgMjMwLCAxMDIsIDExLCAzMiwgNiwgMjI3LCAyMzcsIDExLCAzMiwgNiwgMjExLCAxNTcsIDExLCAzMiwgNiwgMjI2LCAxOTksIAotICAgIDExLCAzMiwgNiwgMjI1LCAxMDgsIDExLCAzMiwgNiwgMjIzLCAzNywgMTEsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzMiwgCi0gICAgNiwgMjE5LCAxNzcsIDExLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDMyLCA2LCAyMjUsIAotICAgIDEzMywgMTEsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIAotICAgIDMyLCAyMjksIDIyMSwgMTEsIDMyLCA0LCAyNTQsIDE0MywgMTEsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMzIsIDQsIDI0MywgCi0gICAgMTA3LCAxMSwgMzIsIDQsIDI0OCwgNTQsIDExLCAzMiwgNCwgMjQ1LCAxMDAsIDExLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDMyLCAKLSAgICA0LCAyNDUsIDYzLCAxMSwgMzIsIDQsIDIxNiwgMTc5LCAxMSwgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzIsIDQsIDIzNCwgCi0gICAgMjIyLCAxMSwgMzIsIDQsIDIzMywgOTgsIDExLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzMiwgNCwgMjI3LCAyMzcsIDExLCAKLSAgICAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAxOTksIDExLCAzMiwgNCwgMjI1LCAxMDgsIDExLCAzMiwgNCwgCi0gICAgMjIzLCAzNywgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzMywgMTEsIDMyLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDMyLCA0LCAyMjYsIDIwMSwgMTEsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzMiwgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDMyLCAyMzQsIDIyMywgODcsIDExLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzIsIDIyMywgMzgsIDg3LCAxMSwgMzIsIDIyNSwgMTA5LCA4NywgMTEsIDIzLCAzMiwgNiwgMjU0LCAKLSAgICAxNDMsIDExLCAyMywgMzIsIDYsIDI1MiwgMjYsIDExLCAyMywgMzIsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDMyLCA2LCAyNDgsIAotICAgIDU0LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDEwMCwgMTEsIDIzLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAKLSAgICA2MywgMTEsIDIzLCAzMiwgNiwgMjE2LCAxNzksIDExLCAyMywgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDMyLCA2LCAyMzQsIAotICAgIDIyMiwgMTEsIDIzLCAzMiwgNiwgMjMzLCA5OCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAxMDIsIDExLCAyMywgMzIsIDYsIDIyNywgCi0gICAgMjM3LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNiwgMjI2LCAxOTksIDExLCAyMywgMzIsIDYsIAotICAgIDIyNSwgMTA4LCAxMSwgMjMsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAyMywgCi0gICAgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICAzMiwgNiwgMjI1LCAxMzMsIDExLCAyMywgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMjMsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIAotICAgIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAyMywgMzIsIDIyOSwgMjIxLCAxMSwgMjMsIDMyLCA0LCAyNTQsIDE0MywgMTEsIAotICAgIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDIzLCAzMiwgNCwgMjQzLCAxMDcsIDExLCAyMywgMzIsIDQsIDI0OCwgNTQsIDExLCAKLSAgICAyMywgMzIsIDQsIDI0NSwgMTAwLCAxMSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDYzLCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyMTYsIDE3OSwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxODUsIDExLCAyMywgMzIsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDIzLCAzMiwgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDE5OSwgMTEsIDIzLCAzMiwgNCwgMjI1LCAKLSAgICAxMDgsIDExLCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3NywgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjE5LCAxNzcsIDExLCAyMywgMzIsIDQsIDIxNywgNDEsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMjUsIDEzMywgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTAsIDExLCAyMywgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjYsIDIwMSwgMTEsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMjMsIDMyLCAyNDUsIDEwMSwgODcsIAotICAgIDExLCAyMywgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEzNCwgCi0gICAgODcsIDExLCAyMywgMzIsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAzNSwgMjMsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgNiwgCi0gICAgMjQ4LCA1NCwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIDYsIAotICAgIDI0NSwgNjMsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjM0LCAyMjIsIDExLCAzNSwgMjMsIDYsIDIzMywgOTgsIDExLCAzNSwgMjMsIDYsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMjcsIDIzNywgMTEsIDM1LCAyMywgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDYsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIAotICAgIDIzLCA2LCAyMTksIDE3NywgMTEsIDM1LCAyMywgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgNiwgMjE0LCAxNTcsIDExLCAzNSwgCi0gICAgMjMsIDYsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgNiwgMjI0LCAxNjEsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAyMjksIDIyMSwgMTEsIDM1LCAyMywgNCwgMjU0LCAxNDMsIDExLCAKLSAgICAzNSwgMjMsIDQsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCA0LCAyNDgsIDU0LCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2MywgMTEsIAotICAgIDM1LCAyMywgNCwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjMzLCA5OCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAxOTksIDExLCAzNSwgMjMsIDQsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDQsIAotICAgIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgNCwgCi0gICAgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgCi0gICAgNCwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDM1LCAyMywgMjQ1LCAxMDEsIDg3LCAKLSAgICAxMSwgMzUsIDIzLCAyMTYsIDE4MCwgODcsIDExLCAzNSwgMjMsIDIzNCwgMjIzLCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMzQsIAotICAgIDg3LCAxMSwgMzUsIDIzLCAyMjMsIDM4LCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMDksIDg3LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyNDgsIDU0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzQsIDIyMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMywgCi0gICAgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNywgMjM3LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgCi0gICAgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDMyLCAyMjksIAotICAgIDIyMSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTAwLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNjMsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM0LCAyMjIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMjcsIDIzNywgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAxOTksIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgNDEsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMjAxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzUsIDIzLCAzMiwgMjQ1LCAxMDEsIDg3LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjIzLCAzOCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAKLSAgICAyMywgNiwgMjQ3LCAyMjcsIDExLCAyMywgNCwgMjQ3LCAyMjcsIDExLCAyMywgMjEsIDIxMCwgODYsIDExLCAyMywgMjEsIAotICAgIDExMCwgMTEsIDIzLCAyMSwgMTA1LCAxMSwgMjMsIDIxLCAxNTgsIDExLCAyMywgMjEsIDE2MSwgMTEsIDIzLCAyMSwgMTg5LCAKLSAgICAxMSwgMjMsIDIxLCAxOTQsIDExLCAyMywgMjEsIDE5OCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAyMDAsIDExLCAKLSAgICAxMzksIDIxLCAyMTAsIDg2LCAxMSwgMTM5LCAyMSwgMTEwLCAxMSwgMTM5LCAyMSwgMTA1LCAxMSwgMTM5LCAyMSwgMTU4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTYxLCAxMSwgMTM5LCAyMSwgMTg5LCAxMSwgMTM5LCAyMSwgMTk0LCAxMSwgMTM5LCAyMSwgMTk4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTk1LCAxMSwgMTM5LCAyMSwgMjAwLCAxMSwgMzUsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIxLCAxMTAsIAotICAgIDExLCAzNSwgMjEsIDEwNSwgMTEsIDM1LCAyMSwgMTU4LCAxMSwgMzUsIDIxLCAxNjEsIDExLCAzNSwgMjEsIDE4OSwgMTEsIAotICAgIDM1LCAyMSwgMTk0LCAxMSwgMzUsIDIxLCAxOTgsIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMjAwLCAxMSwgMzUsIAotICAgIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMywgMjEsIDExMCwgMTEsIDM1LCAyMywgMjEsIDEwNSwgMTEsIDM1LCAyMywgCi0gICAgMjEsIDE1OCwgMTEsIDM1LCAyMywgMjEsIDE2MSwgMTEsIDM1LCAyMywgMjEsIDE4OSwgMTEsIDM1LCAyMywgMjEsIDE5NCwgCi0gICAgMTEsIDM1LCAyMywgMjEsIDE5OCwgMTEsIDM1LCAyMywgMjEsIDE5NSwgMTEsIDM1LCAyMywgMjEsIDIwMCwgMTEsIDIzMCwgCi0gICAgMTM4LCAyMSwgMjEwLCA4NiwgMTEsIDIzMCwgMTM4LCAyMSwgMTEwLCAxMSwgMjMwLCAxMzgsIDIxLCAxMDUsIDExLCAyMzAsIAotICAgIDEzOCwgMjEsIDE1OCwgMTEsIDIzMCwgMTM4LCAyMSwgMTYxLCAxMSwgMjMwLCAxMzgsIDIxLCAxODksIDExLCAyMzAsIDEzOCwgCi0gICAgMjEsIDE5NCwgMTEsIDIzMCwgMTM4LCAyMSwgMTk4LCAxMSwgMjMwLCAxMzgsIDIxLCAxOTUsIDExLCAyMzAsIDEzOCwgMjEsIAotICAgIDIwMCwgMTAsIDExLCAyNTQsIDE3MCwgMTAsIDExLCAyNTIsIDU0LCAxMCwgMTEsIDIzNSwgMTIzLCAxMCwgMTEsIDI0OCwgCi0gICAgMTk1LCAxMCwgMTEsIDIxMiwgMzAsIDEwLCAxMSwgMjEwLCAxMDgsIDEwLCAxMSwgMjQyLCAzNywgMTAsIDExLCAyMTcsIDgwLCAKLSAgICAxMCwgMTEsIDIxMSwgNDMsIDEwLCAxMSwgMjM0LCAyNTAsIDEwLCAxMSwgMjMzLCAxMDIsIDEwLCAxMSwgMjMxLCA3OCwgMTAsIAotICAgIDExLCAyMjgsIDYyLCAxMCwgMTEsIDIyMSwgMTY2LCAxMCwgMTEsIDI1NCwgMTk2LCAxMCwgMTEsIDI0NCwgMTQyLCAxMCwgCi0gICAgMTEsIDIyMiwgMjYsIDEwLCAxMSwgMjI0LCA4MSwgMTAsIDExLCAyMjMsIDk1LCAxMCwgMTEsIDIyMCwgNTksIDEwLCAxMSwgCi0gICAgMjE3LCA3LCAxMCwgMTEsIDIxNiwgMTkyLCAxMCwgMTEsIDIzNCwgMTI5LCAxMCwgMTEsIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDI0OCwgMjE2LCAxMCwgMTEsIDIxMCwgMTExLCAxMCwgMTEsIDI0MiwgMjQ0LCAxMCwgMTEsIDI0NywgMTE5LCAyNTIsIDU0LCAKLSAgICAxMCwgMTEsIDI0NywgMTE5LCAyMjgsIDYyLCAxMCwgMTEsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDExLCAyNDcsIDExOSwgCi0gICAgMjI0LCA4MSwgMTAsIDExLCA2NSwgMjUyLCA1NCwgMTAsIDExLCA2NSwgMjM1LCAxMjMsIDEwLCAxMSwgNjUsIDI0MSwgMjE4LCAKLSAgICAxMCwgMTEsIDY1LCAyNDIsIDM3LCAxMCwgMTEsIDY1LCAyMTEsIDQzLCAxMCwgMTEsIDY1LCAyMzQsIDI1MCwgMTAsIDExLCAKLSAgICA2NSwgMjMzLCAxMDIsIDEwLCAxMSwgNjUsIDIzMSwgNzgsIDEwLCAxMSwgNjUsIDIyOCwgNjIsIDEwLCAxMSwgNjUsIDIyMSwgCi0gICAgMTY2LCAxMCwgMTEsIDY1LCAyNTQsIDE5NiwgMTAsIDExLCA2NSwgMjQ0LCAxNDIsIDEwLCAxMSwgNjUsIDIyMiwgMjYsIDEwLCAKLSAgICAxMSwgNjUsIDIyNCwgODEsIDEwLCAxMSwgNjUsIDIyMCwgNTksIDEwLCAxMSwgNjUsIDIxNywgNywgMTAsIDExLCA2NSwgCi0gICAgMjE2LCAxOTIsIDEwLCAxMSwgNjUsIDIzNCwgMTI5LCAxMCwgMTEsIDY1LCAyNDgsIDIxNiwgMTAsIDExLCA2NSwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMjE3LCA3NiwgMjM1LCAxMjMsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAzNywgMTAsIDExLCAyMTcsIAotICAgIDc2LCAyMTEsIDQzLCAxMCwgMTEsIDIxNywgNzYsIDIzMywgMTAyLCAxMCwgMTEsIDIxNywgNzYsIDIyOCwgNjIsIDEwLCAxMSwgCi0gICAgMjE3LCA3NiwgMjIxLCAxNjYsIDEwLCAxMSwgMjE3LCA3NiwgMjU0LCAxOTYsIDEwLCAxMSwgMjE3LCA3NiwgMjIyLCAyNiwgCi0gICAgMTAsIDExLCAyMTcsIDc2LCAyMjQsIDgxLCAxMCwgMTEsIDIxNywgNzYsIDIyMCwgNTksIDEwLCAxMSwgMjE3LCA3NiwgMjM0LCAKLSAgICAxMjksIDEwLCAxMSwgMjE3LCA3NiwgMjQ4LCAyMTYsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAyNDQsIDEwLCAxMSwgMjE3LCAKLSAgICA3NiwgMjQ3LCAxMTksIDIyOCwgNjIsIDEwLCAxMSwgMjE3LCA3NiwgMjQ3LCAxMTksIDIyNCwgODEsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDI1MiwgNTQsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNSwgMTIzLCAxMCwgMTEsIDIxOCwgMTEwLCAyNDEsIDIxOCwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQyLCAzNywgMTAsIDExLCAyMTgsIDExMCwgMjE3LCA4MCwgMTAsIDExLCAyMTgsIDExMCwgMjExLCAKLSAgICA0MywgMTAsIDExLCAyMTgsIDExMCwgMjM0LCAyNTAsIDEwLCAxMSwgMjE4LCAxMTAsIDIzMSwgNzgsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDIyOCwgNjIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMSwgMTY2LCAxMCwgMTEsIDIxOCwgMTEwLCAyNTQsIDE5NiwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQ0LCAxNDIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMiwgMjYsIDEwLCAxMSwgMjE4LCAxMTAsIDIyNCwgCi0gICAgODEsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMCwgNTksIDEwLCAxMSwgMjE4LCAxMTAsIDIxNywgNywgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjE2LCAxOTIsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNCwgMTI5LCAxMCwgMTEsIDIxOCwgMTEwLCAyNDgsIDIxNiwgCi0gICAgMTAsIDExLCAyMTgsIDExMCwgMjEwLCAxMTEsIDEwLCAxMSwgMjE4LCAxMTAsIDI0MiwgMjQ0LCAxMCwgMTEsIDIxOCwgMTEwLCAKLSAgICAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDExLCAyMTgsIDExMCwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMTEsIDIzMiwgCi0gICAgMTIyLCAyNTQsIDE3MCwgMTAsIDExLCAyMzIsIDEyMiwgMjUyLCA1NCwgMTAsIDExLCAyMzIsIDEyMiwgMjM1LCAxMjMsIDEwLCAKLSAgICAxMSwgMjMyLCAxMjIsIDI0OCwgMTk1LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDEsIDIxOCwgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjEyLCAzMCwgMTAsIDExLCAyMzIsIDEyMiwgMjEwLCAxMDgsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MiwgMzcsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDIxNywgODAsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMSwgNDMsIDEwLCAxMSwgMjMyLCAxMjIsIDIzMywgMTAyLCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMzEsIDc4LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjgsIDYyLCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMjEsIDE2NiwgMTAsIDExLCAyMzIsIDEyMiwgMjU0LCAxOTYsIDEwLCAxMSwgMjMyLCAxMjIsIDI0NCwgMTQyLCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyMjIsIDI2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjQsIDgxLCAxMCwgMTEsIDIzMiwgMTIyLCAyMjMsIDk1LCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMjAsIDU5LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTcsIDcsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIxNiwgMTkyLCAxMCwgMTEsIDIzMiwgMTIyLCAyMzQsIDEyOSwgMTAsIDExLCAyMzIsIDEyMiwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDI0OCwgMjE2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTAsIDExMSwgMTAsIDExLCAyMzIsIDEyMiwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMTM5LCAyNTIsIDU0LCAxMCwgMTEsIDEzOSwgMjM1LCAxMjMsIDEwLCAxMSwgMTM5LCAyNDgsIDE5NSwgCi0gICAgMTAsIDExLCAxMzksIDIxMiwgMzAsIDEwLCAxMSwgMTM5LCAyMTAsIDEwOCwgMTAsIDExLCAxMzksIDI0MiwgMzcsIDEwLCAKLSAgICAxMSwgMTM5LCAyMTcsIDgwLCAxMCwgMTEsIDEzOSwgMjExLCA0MywgMTAsIDExLCAxMzksIDIzMywgMTAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjMxLCA3OCwgMTAsIDExLCAxMzksIDIyOCwgNjIsIDEwLCAxMSwgMTM5LCAyMjEsIDE2NiwgMTAsIDExLCAxMzksIAotICAgIDI1NCwgMTk2LCAxMCwgMTEsIDEzOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMTM5LCAyMjIsIDI2LCAxMCwgMTEsIDEzOSwgMjI0LCAKLSAgICA4MSwgMTAsIDExLCAxMzksIDIyMywgOTUsIDEwLCAxMSwgMTM5LCAyMjAsIDU5LCAxMCwgMTEsIDEzOSwgMjE3LCA3LCAxMCwgCi0gICAgMTEsIDEzOSwgMjE2LCAxOTIsIDEwLCAxMSwgMTM5LCAyMzQsIDEyOSwgMTAsIDExLCAxMzksIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjQ4LCAyMTYsIDEwLCAxMSwgMTM5LCAyMTAsIDExMSwgMTAsIDExLCAxMzksIDI0MiwgMjQ0LCAxMCwgMTEsIDIyNiwgCi0gICAgMTY4LCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQzLCAxMCwgMTEsIDIyNiwgMTY4LCAxMjIsIDIsIDI0OCwgMTk1LCAyMzEsIAotICAgIDIwNSwgODYsIDI0NSwgMjIwLCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTksIDI4LCAyMTEsIDIzOSwgMjMxLCAyMDUsIAotICAgIDg2LCAyMTIsIDksIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyOCwgNTYsIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyMywgCi0gICAgMTExLCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDI0MiwgMTI3LCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDcxLCAyNDYsIDk2LCAKLSAgICAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MCwgMTQxLCAyMzEsIAotICAgIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTAsIDE0MSwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDE0MSwgCi0gICAgMjMxLCAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUwLCAKLSAgICAxNDEsIDIzMSwgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAxMzQsIDY0LCAyNTIsIDE1MywgCi0gICAgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MiwgMTUzLCAKLSAgICAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgCi0gICAgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTAsIDM0LCAKLSAgICAyMzEsIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDIyNSwgMjUsIDIzMSwgMjA1LCA4NiwgMjI2LCAKLSAgICAxNTYsIDIzMSwgMjA1LCA4NiwgMjUyLCAxNTQsIDIzMSwgMjA1LCA4NiwgMjUwLCA3MCwgMjMxLCAyMDUsIDg2LCAyMTgsIAotICAgIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTgsIDM5LCAyMzEsIDIwNSwgODYsIDI1MywgMTc5LCAyMzEsIDIwNSwgODYsIDIxMSwgCi0gICAgMjMyLCAyMzEsIDIwNSwgODYsIDIzNSwgNjIsIDIzMSwgMjA1LCA4NiwgMjUyLCAxODQsIDEzMSwgODYsIDIwMywgMjUyLCAKLSAgICAxODQsIDEzMSwgODYsIDI0MSwgNDMsIDEzMSwgODYsIDI0MSwgNDIsIDEzMSwgODYsIDI0MSwgNDEsIDEzMSwgODYsIDI0MSwgCi0gICAgNDAsIDEzMSwgODYsIDI0MSwgMzksIDEzMSwgODYsIDI0MSwgMzgsIDEzMSwgODYsIDI0MSwgMzcsIDEzMSwgODYsIDI0MSwgCi0gICAgMzYsIDEzMSwgODYsIDI0MSwgMzUsIDEzMSwgODYsIDI0MSwgMzQsIDEzMSwgODYsIDI0MSwgMzMsIDEzMSwgODYsIDI0MSwgCi0gICAgMzIsIDEzMSwgODYsIDI0MSwgMzEsIDEzMSwgODYsIDI0MSwgMzAsIDEzMSwgODYsIDI0MSwgMjksIDEzMSwgODYsIDI0MSwgCi0gICAgMjgsIDEzMSwgODYsIDI0MSwgMjcsIDEzMSwgODYsIDI0MSwgMjYsIDEzMSwgODYsIDI0MSwgMjUsIDEzMSwgODYsIDI0MSwgCi0gICAgMjQsIDEzMSwgODYsIDI0MSwgMjMsIDEzMSwgODYsIDI0MSwgMjIsIDEzMSwgODYsIDI0MSwgMjEsIDEzMSwgODYsIDI0MSwgCi0gICAgMjAsIDEzMSwgODYsIDI0MSwgMTksIDEzMSwgODYsIDI0MSwgMTgsIDEzMSwgODYsIDI0MSwgMTcsIDEzMSwgODYsIDI0MSwgCi0gICAgMTYsIDEzMSwgODYsIDI0MSwgMTUsIDEzMSwgODYsIDI0MSwgMTQsIDEzMSwgODYsIDI0MSwgMTMsIDEzMSwgODYsIDI0MSwgCi0gICAgMTIsIDEzMSwgODYsIDI0MSwgMTEsIDEzMSwgODYsIDI0MSwgMTAsIDEzMSwgODYsIDI0MSwgOSwgMTMxLCA4NiwgMjQxLCA4LCAKLSAgICAxMzEsIDg2LCAyNDEsIDcsIDEzMSwgODYsIDI0MSwgNiwgMTMxLCA4NiwgMjQxLCA1LCAxMzEsIDg2LCAyNDEsIDQsIDEzMSwgCi0gICAgODYsIDI0MSwgMywgMTMxLCA4NiwgMjQxLCAyLCAxMzEsIDg2LCAyNDEsIDEsIDEzMSwgODYsIDI0MSwgMCwgMTMxLCA4NiwgCi0gICAgMjQwLCAyNTUsIDEzMSwgODYsIDI0MCwgMjU0LCAxMzEsIDg2LCAyNDAsIDI1MywgMTMxLCA4NiwgMjQwLCAyNTIsIDEzMSwgCi0gICAgODYsIDI0MCwgMjUxLCAxMzEsIDg2LCA2NywgMjUyLCAxODQsIDEzMSwgODYsIDIxMywgMjM4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIzNywgMTMxLCA4NiwgMjEzLCAyMzYsIDEzMSwgODYsIDIxMywgMjM1LCAxMzEsIDg2LCAyMTMsIDIzNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMzMsIDEzMSwgODYsIDIxMywgMjMyLCAxMzEsIDg2LCAyMTMsIDIzMSwgMTMxLCA4NiwgMjEzLCAyMzAsIDEzMSwgCi0gICAgODYsIDIxMywgMjI5LCAxMzEsIDg2LCAyMTMsIDIyOCwgMTMxLCA4NiwgMjEzLCAyMjcsIDEzMSwgODYsIDIxMywgMjI2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDIyNSwgMTMxLCA4NiwgMjEzLCAyMjQsIDEzMSwgODYsIDIxMywgMjIzLCAxMzEsIDg2LCAyMTMsIAotICAgIDIyMiwgMTMxLCA4NiwgMjEzLCAyMjEsIDEzMSwgODYsIDIxMywgMjIwLCAxMzEsIDg2LCAyMTMsIDIxOSwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMTgsIDEzMSwgODYsIDIxMywgMjE3LCAxMzEsIDg2LCAyMTMsIDIxNiwgMTMxLCA4NiwgMjEzLCAyMTUsIDEzMSwgCi0gICAgODYsIDIxMywgMjE0LCAxMzEsIDg2LCAyMTMsIDIxMywgMTMxLCA4NiwgMjEzLCAyMTIsIDEzMSwgODYsIDIxMywgMjExLCAKLSAgICAxMzEsIDg2LCAyMTMsIDIxMCwgMTMxLCA4NiwgMjEzLCAyMDksIDEzMSwgODYsIDIxMywgMjA4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIwNywgMTMxLCA4NiwgMjEzLCAyMDYsIDEzMSwgODYsIDIxMywgMjA1LCAxMzEsIDg2LCAyMTMsIDIwNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMDMsIDEzMSwgODYsIDIxMywgMjAyLCAxMzEsIDg2LCAyMTMsIDIwMSwgMTMxLCA4NiwgMjEzLCAyMDAsIDEzMSwgCi0gICAgODYsIDIxMywgMTk5LCAxMzEsIDg2LCAyMTMsIDE5OCwgMTMxLCA4NiwgMjEzLCAxOTcsIDEzMSwgODYsIDIxMywgMTk2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDE5NSwgMTMxLCA4NiwgMjEzLCAxOTQsIDEzMSwgODYsIDIxMywgMTkzLCAxMzEsIDg2LCAyMTMsIAotICAgIDE5MiwgMTMxLCA4NiwgMjEzLCAxOTEsIDEzMSwgODYsIDIxMywgMTkwLCAyMjUsIDMzLCAyNTAsIDI0MywgMjUyLCAxODQsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjE5LCAKLSAgICAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgCi0gICAgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE5LCAKLSAgICAxMjUsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjQ1LCAxOTMsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAyMTksIDE1LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM1LCAxMzksIAotICAgIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMjQsIDE1LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAKLSAgICAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyNDEsIDIyNSwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIAotICAgIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjE5LCAxMjUsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQxLCAyMjUsIDIyNSwgCi0gICAgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAKLSAgICAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMzUsIDEzOSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0MSwgMjI1LCAyMjUsIAotICAgIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDI0MSwgCi0gICAgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAKLSAgICAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAKLSAgICAxMSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE5LCAxMjUsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQ3LCAyNDcsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIAotICAgIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMzUsIDEzOSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0NywgMjQ3LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIAotICAgIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgODUsIDIzNSwgNjIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAKLSAgICAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyNDQsIDgxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTksIDEyNSwgNjQsIDI0OSwgMjQyLCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE2LCAyNDgsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNSwgMTM5LCA2NCwgMjQ5LCAyNDIsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgCi0gICAgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICA3MSwgMjM1LCA2MiwgMjEsIDIxMCwgODcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIxMCwgODcsIDI0OSwgMjE5LCAyMSwgCi0gICAgMTIzLCAyNDksIDIxOSwgMjEsIDExMywgMjQ5LCAyMTksIDIxLCAxMzQsIDI0OSwgMjE5LCAyMSwgMjQ0LCAxMSwgMjQ5LCAKLSAgICAyMTksIDIxLCAyNDQsIDgxLCAyNDksIDIxOSwgMjEsIDIxOSwgMTI1LCAyNDksIDIxOSwgMjEsIDIyMCwgMTIyLCAyNDksIAotICAgIDIxOSwgMjEsIDI0NSwgMTkzLCAyNDksIDIxOSwgMjEsIDIyOCwgMjAwLCAyNDksIDIxOSwgODgsIDcsIDYsIDEsIDYxLCA4OCwgCi0gICAgNywgNiwgMSwgMjUzLCAxNTgsIDg4LCA3LCA2LCAxLCAyNTEsIDY2LCA4OCwgNywgNiwgMSwgMjQ5LCA2MCwgODgsIDcsIDYsIAotICAgIDEsIDc1LCA4OCwgNywgNiwgMSwgMjQ1LCA2LCA4OCwgNywgNiwgMSwgMjQzLCAyMDIsIDg4LCA3LCA2LCAxLCAyNDIsIDYwLCAKLSAgICA4OCwgNywgNiwgMSwgNzMsIDg4LCA3LCA2LCAxLCAyMzUsIDE0NCwgODgsIDcsIDYsIDEsIDIzNSwgMjMsIDg4LCA3LCA2LCAKLSAgICAxLCAxNTYsIDg4LCA3LCA2LCAxLCAxOTMsIDg4LCA3LCA2LCAxLCAyMzAsIDI1LCA4OCwgNywgNiwgMSwgNzYsIDg4LCA3LCAKLSAgICA2LCAxLCAyMjYsIDEwNSwgODgsIDcsIDYsIDEsIDIyNCwgOTYsIDg4LCA3LCA2LCAxLCAxNTMsIDg4LCA3LCA2LCAxLCAyMjIsIAotICAgIDkxLCA4OCwgNywgNiwgMSwgMjE3LCAxNTIsIDg4LCA3LCA2LCAxLCA3MCwgODgsIDcsIDYsIDEsIDIxNCwgMTA1LCA4OCwgNywgCi0gICAgNiwgMSwgMjEyLCA5OCwgODgsIDcsIDYsIDEsIDIxMSwgMTc4LCA4OCwgNywgNiwgMSwgMjExLCAxMTcsIDg4LCA3LCA2LCAxLCAKLSAgICAyMTAsIDE1OSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgNywgNiwgMSwgMjIyLCA5MSwgMzcsIDMyLCA3LCA2LCAxLCAKLSAgICAyNTEsIDY2LCAzNywgMzIsIDcsIDYsIDEsIDE1MywgMzcsIDI1MCwgMTkxLCAzNywgMjExLCAxODAsIDkyLCA3LCA2LCAxLCAKLSAgICA2MSwgOTIsIDcsIDYsIDEsIDI1MywgMTU4LCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgOTIsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDkyLCA3LCA2LCAxLCA3NSwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgOTIsIDcsIDYsIDEsIDI0MywgMjAyLCA5MiwgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgOTIsIDcsIDYsIDEsIDczLCA5MiwgNywgNiwgMSwgMjM1LCAxNDQsIDkyLCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICA5MiwgNywgNiwgMSwgMTU2LCA5MiwgNywgNiwgMSwgMTkzLCA5MiwgNywgNiwgMSwgMjMwLCAyNSwgOTIsIDcsIDYsIDEsIAotICAgIDc2LCA5MiwgNywgNiwgMSwgMjI2LCAxMDUsIDkyLCA3LCA2LCAxLCAyMjQsIDk2LCA5MiwgNywgNiwgMSwgMTUzLCA5MiwgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgOTIsIDcsIDYsIDEsIDIxNywgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDkyLCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgOTIsIDcsIDYsIDEsIDIxMiwgOTgsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDkyLCAyNDAsIDIwMSwgOTIsIDIzMCwgNDksIDkyLCAyMjEsIDE4MywgOTIsIDIxOCwgCi0gICAgMjI2LCA5MiwgMjI0LCAyMTgsIDkyLCAyMTIsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCA2MSwgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjUzLCAxNTgsIDE1MiwgMzcsIDcsIDYsIDEsIDI1MSwgNjYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIDE1MiwgMzcsIAotICAgIDcsIDYsIDEsIDc1LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDUsIDYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAxNTIsIAotICAgIDM3LCA3LCA2LCAxLCAyNDIsIDYwLCAxNTIsIDM3LCA3LCA2LCAxLCA3MywgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTkzLCAKLSAgICAxNTIsIDM3LCA3LCA2LCAxLCAyMzAsIDI1LCAxNTIsIDM3LCA3LCA2LCAxLCA3NiwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNCwgOTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjIyLCA5MSwgMTUyLCAzNywgNywgNiwgMSwgMjE3LCAxNTIsIDE1MiwgMzcsIDcsIDYsIDEsIDcwLCAxNTIsIDM3LCA3LCA2LCAKLSAgICAxLCAyMTQsIDEwNSwgMTUyLCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNTcsIDIzMSwgOTcsIDUwLCAKLSAgICAyMjMsIDE1NywgMjMxLCA5NCwgNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDYxLCAxNTIsIDkyLCA3LCA2LCAxLCAyNTMsIDE1OCwgCi0gICAgMTUyLCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgMTUyLCA5MiwgNywgNiwgMSwgMjQ5LCA2MCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgNzUsIDE1MiwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgMTUyLCA5MiwgNywgNiwgMSwgMjQzLCAyMDIsIDE1MiwgOTIsIDcsIDYsIAotICAgIDEsIDI0MiwgNjAsIDE1MiwgOTIsIDcsIDYsIDEsIDczLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIDE0NCwgMTUyLCA5MiwgNywgCi0gICAgNiwgMSwgMjM1LCAyMywgMTUyLCA5MiwgNywgNiwgMSwgMTU2LCAxNTIsIDkyLCA3LCA2LCAxLCAxOTMsIDE1MiwgOTIsIDcsIAotICAgIDYsIDEsIDIzMCwgMjUsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwNSwgMTUyLCA5MiwgCi0gICAgNywgNiwgMSwgMjI0LCA5NiwgMTUyLCA5MiwgNywgNiwgMSwgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCAyMjIsIDkxLCAxNTIsIAotICAgIDkyLCA3LCA2LCAxLCAyMTcsIDE1MiwgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDE1MiwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCAKLSAgICAxNTIsIDkyLCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgMjExLCAxMTcsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCAyNDksIDEyOCwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgOTIsIDI0MCwgMTEzLCAxNTIsIDkyLCAxOTAsIDE1MiwgOTIsIDIwNiwgMTUyLCA5MiwgMjU1LCAyNSwgCi0gICAgMTUyLCA5MiwgMjEyLCAyMywgNDIsIDI0NywgMTY0LCA5MiwgMjUwLCAyMywgOTIsIDI0OSwgMTcwLCA5MiwgMjQzLCAyNTIsIAotICAgIDkyLCAyNDAsIDEwNSwgOTIsIDIyOSwgODYsIDkyLCAyMjksIDc5LCA5MiwgMjI2LCAyMTQsIDkyLCAyMTksIDM1LCA5MiwgCi0gICAgMTIwLCAyLCAyNDUsIDMxLCA3OCwgOTIsIDIxMywgMTE5LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA2MSwgMjIzLCAKLSAgICAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjUzLCAxNTgsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI1MSwgNjYsIDIyMywgCi0gICAgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0OSwgNjAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDc1LCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDUsIDYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0MywgMjAyLCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDIsIDYwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3MywgMjIzLCAxMDMsIDIzNSwgCi0gICAgMjM5LCAxNiwgMSwgMjM1LCAxNDQsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIzNSwgMjMsIDIyMywgMTAzLCAyMzUsIAotICAgIDIzOSwgMTYsIDEsIDE1NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMTkzLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAKLSAgICAxLCAyMzAsIDI1LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgCi0gICAgMjI2LCAxMDUsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIyNCwgOTYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIAotICAgIDE1MywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjIyLCA5MSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjE3LCAKLSAgICAxNTIsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDcwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTQsIDEwNSwgCi0gICAgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjEyLCA5OCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjExLCAxNzgsIAotICAgIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMSwgMTE3LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTAsIDE1OSwgCi0gICAgNDIsIDE0MSwgMjQxLCA2MywgOTIsIDU2LCAyMzQsIDE4LCA5MiwgNTYsIDIwNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUwLCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDU2LCAyNDgsIDkwLCA5MiwgCi0gICAgOSwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI4LCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDQyLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDY1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NywgOTIsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDQzLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyOSwgOTIsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDM0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NywgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICA0OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNzIsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCA3MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTIsIDkyLCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA3MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDcsIDkyLCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAyNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzEsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzMCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgMzgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQxLCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgMzMsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU4LCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzOSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDY5LCAyMTYsIDYsIAotICAgIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA1MywgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMzYsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCAyMTYsIAotICAgIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzMiwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgNjMsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ1LCAzNywgCi0gICAgMTU0LCAyNTQsIDI0NSwgMzcsIDE1NCwgMjU1LCAxMiwgMjQ5LCA3MSwgMjQ0LCA0MiwgMjUwLCAwLCAyMTQsIDE5NCwgMjI4LCAKLSAgICAyMTMsIDIsIDIxOCwgMTUzLCAyMTgsIDMzLCAxMTcsIDIzMCwgMTE0LCAyMTgsIDMyLCAyNTAsIDI2LCAyNTMsIDIwNywgCi0gICAgMjQ2LCA1NCwgMjE4LCAzMSwgMTE3LCAyNTEsIDExOCwgMjIzLCAxNTgsIDI1MSwgMTQwLCAyNTMsIDIwNywgMjI4LCAyMTIsIAotICAgIDIxMiwgNDEsIDIxMiwgMzUsIDIxMywgMTMxLCAyMzAsIDE5NSwgMjEyLCAyNSwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNDUsIAotICAgIDQ1LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1NCwgMTI4LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1MywgMjI1LCAyNDIsIDE4MSwgCi0gICAgMiwgMjMxLCA1MSwgMTY2LCAyMzAsIDEyOSwgODcsIDIxMiwgMjcsIDI0OSwgMTM3LCAyMzAsIDEyOSwgODcsIDI0NCwgOTIsIAotICAgIDIyNCwgMjIsIDIzMCwgMTI5LCA4NywgMjEyLCAyNywgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjQzLCAyMjksIDIzMCwgCi0gICAgMTI5LCA4NywgMjEyLCA1MiwgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAxMjksIDg3LCAKLSAgICAyMTIsIDUyLCAyNDksIDEzNywgMjMwLCAxMjksIDg3LCAyNDksIDEzNywgMjMwLCAxMjgsIDE2NiwgMjMwLCAxMjksIDIsIAotICAgIDI0NCwgMTkwLCAyNDQsIDkyLCAyMjQsIDIyLCAyMzAsIDEyOSwgMiwgMjQ0LCAxOTAsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgCi0gICAgMTI5LCAyLCAyNDQsIDE5MCwgMjQzLCAyMjksIDIzMCwgMTI5LCAyLCAyNDQsIDE5MCwgMjE4LCAzOCwgMiwgMjQ0LCAxOTAsIAotICAgIDI0MiwgMTc5LCAyMTgsIDE1NiwgMjE5LCAyNTUsIDIxOCwgMTU2LCAyNTAsIDExNiwgMjIxLCAxNjgsIDI0NSwgMzksIDIxNSwgCi0gICAgMjM1LCAyNDgsIDg0LCAyMTUsIDIzNSwgMjI2LCA1OSwgMjE1LCAyMzUsIDI1MSwgMjcsIDIxNSwgMTA5LCAyNTAsIDExOCwgCi0gICAgMjUxLCAyMTAsIDIyMiwgMTkxLCAyNDEsIDE3OSwgMjE4LCAzNiwgMjUxLCAyMTAsIDI0NSwgMjI4LCA2NCwgMjMxLCAxOTQsIAotICAgIDI0NSwgMjI4LCA2NCwgMjIzLCAzMSwgMjQxLCAyMDQsIDI0NCwgMTEsIDIzMywgNTQsIDI0OSwgMjQ2LCAyMzEsIDE3MCwgCi0gICAgMjMzLCA1MywgMjQ0LCAxNzYsIDIzMywgNTMsIDIzMywgNTQsIDI0NCwgNDcsIDIzNiwgMCwgMjExLCAyMzksIDIzMCwgNTgsIAotICAgIDIxNiwgMzQsIDI1MywgMTkxLCAyNDIsIDE0MywgMjMxLCA2NywgMjEyLCAzOSwgMjE3LCA1NywgMjMzLCAyNiwgMjUyLCAKLSAgICAxNDksIDIyNSwgNjIsIDIyMywgMTExLCAyNTQsIDU0LCAyNDIsIDEyNywgMjU0LCA1NCwgMjI1LCAyMTcsIDIyNSwgMjE4LCAKLSAgICAyNTAsIDExOSwgMjE4LCAxMTQsIDI0MiwgMjMsIDIxOSwgOTAsIDY0LCAyMjUsIDQ0LCAyMzEsIDg3LCAyMjYsIDE5NywgCi0gICAgMjUxLCAxOTQsIDIyNCwgMjI5LCAyMzMsIDM2LCAyMjMsIDMyLCAyNDksIDE0MiwgMjIzLCAzMiwgMjUyLCAxNTksIDI0OSwgCi0gICAgMTczLCAyMjMsIDMxLCAyNDksIDk1LCAyMiwgMjIzLCAzMSwgMjE4LCAxNDEsIDI1MSwgMTY3LCAyMTksIDE0LCAyNTEsIAotICAgIDE1MSwgMjQzLCAyNTEsIDI0MywgMjQ3LCAyMjIsIDIwNywgMjE3LCAyNDYsIDIyNCwgMjMxLCAyNDgsIDE3NSwgMjI2LCAKLSAgICAyMzYsIDIxOCwgNywgMjQzLCAyNDgsIDIxOSwgMjMwLCAyNDQsIDkxLCAyNTEsIDIxLCAyLCAyMTcsIDIzOSwgMjQ4LCAzNSwgCi0gICAgMjE5LCA1MiwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyMjAsIDcwLCAyNDAsIDExMSwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyNDYsIAotICAgIDEwOCwgMjQ5LCAxNzIsIDI1MCwgODQsIDEzMCwgMjUwLCAyNTQsIDIzMiwgMTQxLCAyNDksIDg4LCAyNDEsIDU1LCAyMjQsIAotICAgIDIzMywgMjE5LCAyNDAsIDI1MiwgMzYsIDI1MSwgMTYzLCAyMjQsIDIzNCwgNjQsIDI0NCwgMzMsIDI0OSwgMTcxLCAyNDQsIAotICAgIDI0LCAyMiwgMjM0LCAzMiwgMjE3LCAxOSwgMjExLCAyMzAsIDI0MiwgMTMsIDIyMiwgMTIsIDI1MSwgMTc3LCAyMiwgMjQ5LCAKLSAgICAxMDIsIDIxMSwgMjM3LCAyNDIsIDE4NCwgMjQ5LCAyMzUsIDI0MiwgMTg0LCAyMTUsIDE5MywgMjQ2LCA5MCwgMjUyLCA2MiwgCi0gICAgMjMwLCA5MywgMjUwLCA3LCAyNTIsIDYyLCAyMzAsIDkyLCAyNTIsIDE4NywgMjUxLCAxNzYsIDIyMywgMzMsIDIxMSwgMjAxLCAKLSAgICAyMjQsIDE5NSwgMjUxLCAyMzUsIDI1MSwgMjAsIDIzNSwgMTM4LCAyNTAsIDc3LCAyMTUsIDIzNSwgMjQ0LCAxNjIsIDI1MCwgCi0gICAgNzYsIDI0NCwgOTQsIDI0NCwgOTUsIDIxOSwgMTIsIDI1MiwgMTU4LCAyMjUsIDI1MCwgMjI0LCAyNDQsIDI0OSwgMjA0LCAKLSAgICAyNTIsIDE1OSwgMjE3LCA1OSwgMjE1LCAyMzUsIDI0OSwgMTI4LCAyNDQsIDY3LCAyMjUsIDYzLCAyNDgsIDgxLCAyMzUsIAotICAgIDEzMSwgMjQ3LCAxMzEsIDI1MCwgMjMyLCAyMTgsIDExMywgMjExLCAyNDAsIDI1MCwgOTgsIDIzMCwgMTI5LCAyMTMsIDE2NCwgCi0gICAgMjUwLCAxNjIsIDIyMSwgMTk5LCAyMjEsIDIyNCwgMjQyLCAxNDgsIDI1MCwgMjUxLCAyNTAsIDIzMywgMjQwLCAyNDUsIAotICAgIDI0NCwgMTMwLCAyMTIsIDAsIDIyMiwgMjAwLCAyNDksIDIzNiwgMjQ0LCA4NiwgMjI1LCAyLCAyMiwgMjQ0LCA5MCwgMjMwLCAKLSAgICAyMjcsIDIzMCwgMTA4LCAyNTEsIDEwLCAyNTAsIDM5LCAyNDEsIDIzMiwgMjUzLCAyNDEsIDIyNiwgNjIsIDIxNiwgMTQsIAotICAgIDI0MSwgMjUxLCAyNTAsIDI5LCAyMTYsIDI0MiwgMjE2LCAxMTMsIDI1MCwgMjAsIDI1MSwgMjAyLCAyMjUsIDE3NywgMjUzLCAKLSAgICAyNDAsIDIxMywgMTcyLCAyNDMsIDExMCwgMjQ3LCAxOTcsIDI0MSwgMTU2LCAyMTksIDg0LCAyMzEsIDIzNCwgMjUxLCAyNDUsIAotICAgIDI0MywgMTExLCAyNDcsIDI0MCwgMjUxLCAxNjYsIDI0NCwgNTIsIDIyNSwgMzMsIDI1MCwgMjQxLCAyOCwgMjI4LCA0NywgCi0gICAgMjMwLCA4NSwgMjgsIDIyOCwgNDIsIDIyMSwgMjEyLCAyNDIsIDk5LCAyOCwgMjM0LCAxMzcsIDIxNSwgMTkwLCAyMTMsIAotICAgIDE1NCwgMjgsIDIyMSwgMTkyLCAyMjIsIDEyNCwgMjIwLCAxMSwgMiwgMjIxLCAyMjcsIDIxNiwgMjQ0LCAyMjMsIDE3OCwgCi0gICAgMjIsIDI1MiwgMTU5LCAyMTksIDEwNSwgMjIsIDIxOSwgMTA1LCAyNTEsIDE4NywgMjUyLCAxMjMsIDIyLCAyNDEsIDQ5LCAKLSAgICAyNTAsIDEyMCwgMjQ0LCA3MywgMjE5LCA2MywgMjIyLCAxMjUsIDIxOCwgMTIsIDIxNSwgMTk0LCAyNDAsIDI0NiwgMjIzLCAKLSAgICAxNzksIDI1NCwgMTI5LCAyNDQsIDMxLCAyMjIsIDEzNiwgMjQ0LCAzMSwgMjE3LCAyNDEsIDI0MCwgMjM1LCAyNTEsIDExOSwgCi0gICAgMjQwLCAyMzUsIDIsIDI0MywgOTQsIDIyNiwgMjI5LCAyNTEsIDExOSwgMjM1LCAxMzEsIDIyNCwgMjM5LCAyMjYsIDIyOCwgCi0gICAgMjQ1LCA0NCwgMjI0LCAyMzksIDIyNiwgMjI4LCAyNDAsIDI0NCwgMjUyLCAxNDUsIDI1MywgMTgxLCAyMTYsIDI1MiwgMjMxLCAKLSAgICAyMzQsIDI0MCwgMjQwLCAyMzIsIDExMSwgMjQwLCAyNDAsIDI0OSwgMTc2LCAyMTgsIDEyNSwgMjIxLCAxOTgsIDI0OCwgNDMsIAotICAgIDIxOCwgMTI1LCAyNDQsIDE4MCwgMjM1LCAxNDksIDIzMywgODksIDIzNSwgMTMxLCAyNTAsIDIyNiwgMjQ1LCA0NCwgMjUwLCAKLSAgICAyMjYsIDIyMywgMTQxLCAyMzAsIDExMiwgMjI2LCAxMTQsIDIxMiwgNDEsIDI1MSwgMTIzLCAyNDksIDE0NSwgMjE2LCAxMDYsIAotICAgIDIzMywgMTgsIDIyMywgMTgwLCAyNTAsIDIyNCwgMjQ2LCA5NiwgMjQ5LCAxMzUsIDIxMiwgMywgMjE5LCA3MCwgMjE5LCA2OCwgCi0gICAgMjQwLCAyNDUsIDIyMywgMTUzLCAyNDIsIDE3MCwgMjIwLCA1NywgMjMwLCAxNDUsIDIyMiwgMTk0LCAyNTAsIDEwOCwgMjQ3LCAKLSAgICAxMzYsIDIyNSwgNzMsIDI1MSwgMjAzLCAyNDUsIDE2OSwgMjI2LCAyMzgsIDIxOCwgMjUyLCAyMjAsIDUyLCAyNTEsIDEyMiwgCi0gICAgMjU0LCA5MiwgMjQxLCA1NCwgMjMzLCAxMjEsIDI1MiwgNjAsIDI0NCwgOTAsIDIxNSwgMTkzLCAyNDQsIDkwLCAyNTEsIAotICAgIDIwOSwgMjE1LCA5MSwgMjQxLCAyNDksIDI1MCwgMTA5LCAyNTIsIDE4NywgMjUwLCAxMDksIDI0MywgMjQyLCAyNTIsIDE4NywgCi0gICAgMjUwLCAxMDksIDI1MSwgMjM3LCAyMjUsIDE5NSwgMjM0LCAyNiwgMjI0LCAyNDgsIDI0NiwgODcsIDI1MSwgMTEsIDI1MiwgCi0gICAgMTc3LCAyNTEsIDExLCAyNDcsIDEzMCwgMjMwLCAxMTMsIDI0NCwgMTkwLCAyNDksIDE0NiwgMjQ0LCAxOTAsIDIxNiwgMTA3LCAKLSAgICAyNDQsIDE5MCwgMjIzLCAxODEsIDI0NCwgMTkwLCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDI0NiwgOTcsIDI0NCwgMTkwLCAyMTgsIAotICAgIDI0MSwgMjEyLCAzLCAyNDAsIDI0NiwgMjQ0LCAxOTAsIDIzMCwgMTQ2LCAyNDQsIDE5MCwgMjQ3LCAxMzcsIDI0NCwgMTkwLCAKLSAgICAyMjUsIDc0LCAyNDQsIDE5MCwgMjQzLCAyNDUsIDI0NCwgMTkwLCAyNDIsIDIwLCAyNDQsIDE5MCwgMjExLCAyMjQsIDI0NCwgCi0gICAgMTkwLCAyNTIsIDcxLCAyNDQsIDE5MCwgMjI2LCA0NSwgMjQ0LCAxOTAsIDIyNSwgNzQsIDIyOCwgNTMsIDIyNSwgMjMyLCAKLSAgICAyMjQsIDE4NiwgMjQ1LCAxMywgMjQ1LCAyMjcsIDIyOCwgNTMsIDIzMCwgMTEwLCAyMTYsIDE5LCA3MSwgMTIwLCAyMjUsIDcsIAotICAgIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDEyNCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0MywgMjI1LCA3LCAKLSAgICAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0NCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDI0NCwgODQsIDI0MiwgMTYsIAotICAgIDUwLCAyMTIsIDMzLCAyNDIsIDE2LCA1MCwgMjI2LCAyMTUsIDI0MiwgMTYsIDUwLCAyMTYsIDEzNSwgMTIwLCA1MCwgMjE2LCAKLSAgICAxMzUsIDEyNCwgNTAsIDI1MCwgMTksIDI0MiwgMTEsIDUwLCAyMDQsIDI0MiwgMTEsIDUwLCAyNDksIDEyMywgMjExLCAyMjAsIAotICAgIDI0MSwgMjUxLCAyNDUsIDE0LCAyMjksIDEwNCwgMjE3LCAxNTEsIDIzNSwgMTI1LCAyNDYsIDkyLCAyMzQsIDgyLCAyNTEsIAotICAgIDI0NywgMjExLCAyMjAsIDI0OSwgMjQ5LCAyMjQsIDEyNywgMjQyLCAxNCwgMjI0LCAyMzAsIDIzMSwgMTc3LCAyMjAsIDQsIAotICAgIDI1MywgMjAzLCAyMjAsIDQsIDI0MSwgMTY0LCAyMjAsIDQsIDIxMSwgMjIwLCAyMjEsIDI0MCwgMjExLCAyMjAsIDI1MSwgCi0gICAgMTg2LCAyNDQsIDI5LCAyNTEsIDkwLCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIDg5LCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIAotICAgIDE2MiwgMjQyLCAxOTQsIDIzMSwgMTg1LCAyMTEsIDIyMSwgMjQ0LCAxNzQsIDIzMSwgMTg2LCAyMiwgMjExLCAyMjIsIDI0MSwgCi0gICAgNjAsIDI0MiwgMTAsIDExMywgMjMxLCA1OSwgMjQxLCA2MCwgMjQyLCAxMCwgMTEzLCAyMTEsIDIxOSwgMjQxLCA2MCwgMjQyLCAKLSAgICAxMCwgMjI0LCAyNTUsIDIyNiwgMjI3LCAyMTEsIDIyMiwgMiwgMjUxLCAxMDYsIDI0NSwgMjI1LCAyNTEsIDE0MSwgMiwgCi0gICAgMjEzLCAyNDYsIDIyNSwgMTY4LCAyLCAyNTEsIDIxMiwgMjQyLCAzNCwgMjMxLCAxODYsIDIsIDI0MiwgMTEwLCAyMjUsIAotICAgIDEwOSwgMjMxLCAxNzQsIDIzMSwgMTg2LCAyLCAyMTUsIDk3LCAyMjYsIDIwOCwgMjMxLCAxODUsIDIyNiwgMjA4LCAyMTEsIAotICAgIDIyMSwgMjUyLCAxODYsIDI0OSwgMTkwLCAyMTEsIDIwNSwgMjI0LCAxODksIDIzNSwgMTMxLCAyMjYsIDIyMywgMjM1LCAKLSAgICAxMzEsIDI0MiwgMTY5LCAyNDIsIDIyMiwgMjUyLCAxODcsIDI1NCwgMTEzLCAyNDUsIDE4LCAyNTQsIDE2MCwgMjU0LCAxNjEsIAotICAgIDIzMCwgMTM2LCAyMzYsIDUsIDIxOSwgMTAwLCAyMzUsIDIzMiwgMjQ4LCAzNCwgMjI1LCAxNjcsIDI0MiwgMTA1LCAyNDgsIAotICAgIDE3OSwgMjMyLCAyMDEsIDIyOSwgMjExLCAyMjQsIDI1NCwgMjQ0LCAxOTEsIDIzMSwgMTQyLCAyNDIsIDMzLCAyNTIsIDEzOCwgCi0gICAgMjI1LCAxLCAyMTcsIDE3MSwgMjI1LCA2NiwgMjM0LCA2NCwgNzgsIDIzMiwgMTExLCAyMzMsIDEwLCAyMjIsIDIzMywgMjQzLCAKLSAgICA1NCwgMjE4LCAxMzEsIDIzNCwgNjMsIDI1MSwgMTcxLCAyNDksIDE0OCwgMiwgMjQxLCAyMjcsIDIxMiwgMTksIDI1MiwgNjksIAotICAgIDI0MSwgMjI3LCAyNTEsIDEzNSwgMjQxLCAyMjcsIDExMywgMjQxLCAyMjUsIDIxOSwgMTAsIDI0MSwgMjI3LCAyNDIsIDEyMCwgCi0gICAgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCA3NCwgMjUxLCAyMDgsIDI0MSwgMjI3LCAyNDIsIDEyNywgMjQxLCAyMjcsIDIxMSwgCi0gICAgNDIsIDI0MSwgMjI3LCAyMjQsIDEyOCwgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCAyMjMsIDMzLCAyMjMsIDQ0LCAyNDEsIAotICAgIDIyNSwgMjQxLCAyMjgsIDI0OCwgODEsIDI0NywgMjQ5LCAyMjAsIDgyLCAyLCAxMTUsIDU5LCAyMzUsIDIxNSwgMjQ1LCAKLSAgICAxNzIsIDE5MiwgMjUxLCAxMTYsIDI1NCwgMTEyLCA4NywgMjUxLCAxOTUsIDIxOSwgOTIsIDg3LCAyNDksIDIyOCwgODcsIAotICAgIDIxOCwgMjQ2LCAyMTcsIDI0OCwgODcsIDI0NiwgODUsIDI0OCwgMTU3LCA4NywgMjI1LCA2NywgNjQsIDIyNCwgMjQ5LCAKLSAgICAyNDQsIDYxLCAyNTIsIDMsIDI0NywgMTY1LCA4NywgMjE5LCAzLCAyNTIsIDE1OCwgMjE2LCAxNDksIDI1MiwgMTU4LCA3MSwgCi0gICAgMjQ0LCA1MSwgMjQwLCAyMTEsIDIyNSwgNSwgODcsIDIzMCwgMTQ5LCAyNTIsIDE3MiwgMjQ5LCA5OCwgMjQ1LCAzMiwgMTE0LCAKLSAgICAyNDcsIDEzMiwgNTAsIDI0OSwgMTM5LCAyNTAsIDI0MiwgMjUyLCAxNDQsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE0NCwgMiwgCi0gICAgMjQ3LCAxMzIsIDUwLCAyNTIsIDE0NCwgMiwgMjQ1LCA0NywgNTAsIDI1MiwgMTQ0LCAyLCAyMjQsIDIyOCwgNTAsIDIzMCwgCi0gICAgMTQ5LCAyLCAyMTEsIDIzNSwgMjUwLCAxMzgsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMSwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIAotICAgIDE3OCwgMjI1LCAxNjYsIDI0OSwgMjA4LCAyNTEsIDEzOSwgMjMwLCAxODYsIDI0NCwgNTYsIDI0NywgMTg1LCAyMjYsIDE2MSwgCi0gICAgMjQ3LCAxOTAsIDI0NiwgNDksIDI0NCwgMTA3LCAyNDQsIDQwLCAyMDQsIDI0NCwgMTA3LCAyNDQsIDQwLCAyMjYsIDc2LCAyLCAKLSAgICAyNDksIDEwMCwgMjI2LCA3NiwgMjQ0LCAxODMsIDIxNCwgMTYzLCAyNTEsIDE2LCAyMTcsIDE4LCAyNTEsIDE2LCAyNTAsIAotICAgIDI0MywgMjM1LCAyNDIsIDI1MCwgMTM4LCAyLCAyMTQsIDE1MywgMjE1LCAyMzAsIDI1MCwgMTM4LCAyLCAyNDYsIDEwNCwgCi0gICAgMjE1LCAyMzAsIDI1MiwgMTQxLCAyNTAsIDEzNywgMjUwLCA2LCAyMjQsIDEyMywgMjIyLCAxODUsIDIyNCwgMTIzLCAyMjYsIAotICAgIDE5LCAyMTgsIDEyMSwgMjIyLCAxMzEsIDIxNSwgMjIyLCAyMjIsIDEzMSwgMjUxLCAxOTEsIDIxNywgOTEsIDIzMywgNTEsIAotICAgIDIyOCwgNDUsIDIyOCwgNDYsIDIsIDI0OCwgODAsIDI0OSwgMTQ3LCAyNTAsIDAsIDI1MSwgMTkyLCAyMDQsIDI1MSwgMTkyLCAKLSAgICAyNDIsIDEyNywgMjUxLCAxOTIsIDI1MSwgMjA4LCAyNTEsIDE5MiwgMjI2LCAxNTcsIDI1MSwgMTkyLCAyNTEsIDE4OSwgCi0gICAgMjI5LCAyMDUsIDI1MiwgMTc1LCAyMjEsIDE4NiwgMjMxLCA2MCwgMjE3LCAxLCAyMjMsIDEyMywgMjI2LCA3NCwgMjQ0LCAKLSAgICAxNTksIDIzMSwgMjM0LCAyMjEsIDIyMywgMjU0LCA4OSwgMjI0LCAxNDUsIDI1NCwgMjUyLCAyMzIsIDExMywgMjUwLCAxMjcsIAotICAgIDIzMSwgNzIsIDIyNiwgMTI5LCAyMTUsIDIzOCwgMjM1LCAyNTIsIDIxNSwgMjM4LCAyMjYsIDgyLCAyNDYsIDI0LCA4NywgCi0gICAgMjM1LCAyNDksIDI0NSwgMTE5LCAyNDUsIDEyMCwgMiwgMjQ2LCAxMDQsIDgwLCA0OCwgMjUwLCAwLCAyMzEsIDIwMCwgMiwgCi0gICAgMjMyLCAxMDcsIDI0NCwgNzMsIDI1MCwgMCwgMjMxLCAyMDAsIDIsIDIyMywgMTU3LCAyNDQsIDczLCAyMDQsIDIzMSwgMjAwLCAKLSAgICAyLCAyMjMsIDE1NywgMjQ0LCA3MywgMjA0LCAyMzEsIDIwMCwgMiwgMjMyLCAxMDcsIDI0NCwgNzMsIDIyNCwgMjM2LCAyMjQsIAotICAgIDIzNywgMjQwLCAyNDgsIDIyOSwgODQsIDIzMCwgMTU5LCAyMjUsIDExNywgMjMwLCAxNTksIDIyNSwgMTE4LCAyLCA5NywgCi0gICAgODAsIDI1MywgMjA3LCAyMzMsIDQ2LCAyMTMsIDE3NSwgMjMwLCAxNTgsIDIzMCwgMTU5LCAyMjUsIDExOCwgMjI2LCAyMzAsIAotICAgIDIyOCwgNzUsIDIzMCwgMTU5LCAyMjUsIDExNiwgMjU0LCA5MCwgMiwgMjUyLCAxMjksIDI1MSwgMTAsIDIxMywgMTcyLCAKLSAgICAyNTEsIDEwLCAyMTYsIDI1NCwgMjIzLCAxNzMsIDIxMywgMTcxLCAyMTUsIDYwLCA5NywgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIAotICAgIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAKLSAgICAyNDgsIDIsIDM3LCAxMjMsIDIyNiwgMTIwLCAyNTAsIDIsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgCi0gICAgMjUzLCAyNDcsIDI1NCwgODgsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDEyMSwgCi0gICAgMjUxLCAxMzgsIDg3LCAxMjUsIDI1MSwgMTM4LCA4NywgMjE5LCA3LCAyLCAyNTEsIDQsIDkxLCAyMTksIDYsIDIxOSwgNywgCi0gICAgMiwgMTIzLCAyMTksIDMxLCAyMTIsIDM1LCAyMTksIDcsIDIsIDEzNCwgMjE5LCAzMSwgMjEyLCAzNCwgMjUyLCAxMTUsIAotICAgIDI0NSwgMTcyLCAyMjUsIDI3LCAyMzMsIDQyLCAyMzEsIDIxMSwgMjQyLCAxODQsIDIyMiwgMjQ3LCAyMzEsIDIxMSwgMjQyLCAKLSAgICAxODQsIDIzMiwgMTUyLCAyLCAyMzUsIDIyNSwgMjI1LCAxOTksIDI1MCwgMCwgMjMyLCAxNTIsIDIsIDIzNCwgMTM4LCAyMzQsIAotICAgIDEzOCwgMjMyLCAxNTEsIDIwNCwgMjMyLCAxNTEsIDI1MiwgNDQsIDI1MiwgNDUsIDIsIDI1MSwgNCwgOTEsIDI1MSwgMTkwLCAKLSAgICAyMzIsIDIwNCwgODcsIDIyMywgMTc0LCAyNTEsIDg2LCAyNTIsIDE4NSwgMiwgMTQwLCA4MCwgNDgsIDI0NSwgMTQzLCAyLCAKLSAgICAxNDAsIDgwLCA0OCwgMjI2LCAxOTcsIDIsIDI0NSwgMzEsIDE2NCwgMiwgNDMsIDQ0LCA4MCwgNDgsIDIxOSwgMzksIDIsIAotICAgIDk3LCA4MCwgNDgsIDIxNiwgMTQsIDIsIDIxNCwgMTUzLCA4MCwgNDgsIDIyOCwgNzUsIDEyMywgMjE0LCAxODQsIDI0NSwgCi0gICAgMTkxLCA4NywgMjM0LCAxMzYsIDIxNiwgMjQ3LCAyMzUsIDIxOSwgMTYsIDMxLCA3LCA2LCAyMzMsIDksIDIzNSwgMjE5LCAKLSAgICAxNiwgMzEsIDcsIDQsIDIzMywgOSwgMjM1LCAyMTksIDE2LCAzMSwgMjI3LCAxOTksIDIzNSwgMjE5LCAxNiwgMzEsIDIxNywgCi0gICAgMTgzLCAyMzUsIDIxOSwgMTYsIDMxLCA3LCAyMzMsIDksIDI0NCwgOTYsIDI0NSwgMTcyLCAyMTYsIDksIDIxMSwgMTk5LCAKLSAgICAyNDIsIDIxLCAyMjcsIDE4MiwgMjIsIDI1MSwgMTk3LCAyNDEsIDY2LCAyMjUsIDUwLCAyMzAsIDIyNiwgMjE2LCAyNTUsIAotICAgIDI0OSwgMTE0LCAyNTIsIDE1OSwgMjE5LCAxMjUsIDIyNSwgOSwgMjE4LCAxNTcsIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgCi0gICAgMjM1LCAxMzEsIDE2LCAzMSwgMjUyLCA1NywgMjE1LCAyMjAsIDI0NSwgMTU2LCA4NSwgNDIsIDI1MSwgODYsIDcxLCA0MiwgCi0gICAgMjUxLCA4NiwgMjMzLCA4NSwgMjIzLCAxMTEsIDI1MCwgMzUsIDIzMywgODUsIDI1MSwgMjA4LCAyNTAsIDM1LCAyMzMsIDg1LCAKLSAgICAyMjYsIDE1NywgMjQ3LCAyNDgsIDIzMywgODUsIDI1MSwgMjA4LCAyNDcsIDI0OCwgNCwgMjI2LCAxNTcsIDI0NywgMjQ4LCAKLSAgICA0LCAyNTEsIDIwOCwgMjQ3LCAyNDgsIDIxNCwgMTYyLCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCAyMjMsIDExMSwgCi0gICAgMjE1LCAyMjUsIDIxNCwgMTYyLCA0LCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCA0LCAyMjMsIDExMSwgMjE1LCAKLSAgICAyMjUsIDM3LCAyNDksIDEzMSwgMjI0LCAyNTIsIDI0OSwgMTMxLCAyMjQsIDI1MywgMiwgMjQyLCAyNiwgNTEsIDI0OSwgCi0gICAgMTMxLCAyMjQsIDI1MiwgMjI4LCA0OSwgNDMsIDIyMCwgMTUzLCAyLCAxMzQsIDI0NywgMTE4LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAxMjMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMTMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMzQsIAotICAgIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDExLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA4MSwgCi0gICAgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxOSwgMTI1LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjIwLCAKLSAgICAxMjIsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDIyOCwgMjAwLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAyNDgsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgCi0gICAgMTkxLCAyNDUsIDE2OCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNzcsIDIyNiwgMjQyLCAyNTAsIDQsIAotICAgIDI0NCwgMTkxLCAyMjYsIDE5MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA1NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAKLSAgICAxNDAsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgNywgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA3OSwgMjUwLCA0LCAyNDQsIAotICAgIDE5MSwgMjE5LCAxMjEsIDI1MCwgNCwgMjQ0LCAxOTEsIDIyMCwgMTIxLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MiwgCi0gICAgMjUwLCA0LCAyNDQsIDE5MSwgMjI4LCAxOTksIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgMjQ2LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAyNDUsIDE2NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA3NSwgMjMwLCAxMTcsIDI0MywgMjMwLCAyMTYsIDM2LCAyMTYsIDIsIAotICAgIDIxOCwgMTQ4LCA2NCwgMjMyLCAyMzksIDIxOSwgMTcwLCA2NCwgMjM1LCAxMzIsIDIzMCwgMTA2LCAyNDIsIDEyNCwgMjQ0LCAKLSAgICAxOTAsIDI0MiwgMTI0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIDIsIDIxNywgMTQsIDY0LCAKLSAgICAyMzUsIDUzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgCi0gICAgMjMwLCAxMTEsIDIyLCAyMTksIDc0LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMSwgMjIsIAotICAgIDI0OSwgMjMwLCAyMTcsIDI0NywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTEsIDIyLCAyMTYsIDEwNCwgCi0gICAgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MiwgMjUsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDAsIDI0NywgCi0gICAgMjExLCAyMzMsIDI0NCwgMTkwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIAotICAgIDIyMSwgMjE3LCAyNDgsIDYyLCAyNDQsIDMzLCAyMjMsIDg4LCAyNDQsIDE5MCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MSwgCi0gICAgMjI2LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE4LCAzNCwgMjE5LCA3MywgMjQ0LCAxOTAsIDIyOSwgODcsIAotICAgIDI0NCwgMTkwLCAyNDUsIDIzLCAyNDQsIDE5MCwgMjE0LCAxODgsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjQ5LCAyMzAsIAotICAgIDIxNywgMjQ3LCAyMjUsIDE5MiwgMjQ0LCAxOTAsIDI0OSwgMjAxLCAyNDQsIDE5MCwgMjQ5LCAyMDIsIDI0NCwgMTkwLCAKLSAgICAyMzQsIDYyLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIxNiwgMTM3LCAxMTUsIDIzNCwgNjMsIDIzNCwgNjIsIDI0NCwgMTkxLCAKLSAgICAyLCAyMTksIDc0LCAyNDUsIDEzLCAyMzQsIDYyLCAyNDQsIDE5MSwgMiwgMjUwLCAwLCAyNDUsIDEzLCAyNDQsIDE5MSwgMiwgCi0gICAgMjE4LCA4OCwgMjE2LCAxOSwgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTEsIDIzMywgMjQ1LCAxNSwgCi0gICAgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTYsIDEwNCwgMjQ1LCAxMywgMjQ3LCAxOTIsIDI0NCwgMTkwLCAKLSAgICAyMTEsIDIwNCwgMjQ0LCAxOTAsIDI1NCwgMTA4LCAyNDQsIDE5MCwgMjI0LCAyMjcsIDI0NCwgMTkwLCAyNDksIDExNiwgCi0gICAgMjQ0LCAxOTAsIDIyNSwgMTcwLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDIzMiwgMTI2LCA2NCwgMjE1LCAyMDQsIDI0NywgCi0gICAgMTkyLCAyNTEsIDg4LCAyMjMsIDg4LCAyNDQsIDE5MCwgMjQzLCAyMzksIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAKLSAgICAyNTQsIDEwNiwgMjQ0LCAxOTAsIDI0NCwgMTUyLCAyNDQsIDE5MCwgMjEyLCAyMCwgMjQ0LCAxOTAsIDIxOSwgOTEsIDI0NCwgCi0gICAgMTkwLCAyMTYsIDcxLCAyNDQsIDE5MCwgMjQyLCAxMjUsIDI0NCwgMTkwLCAyMzIsIDExNCwgMjQ5LCAxMTYsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjQwLCAyMDMsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIAotICAgIDExMSwgMjIsIDI0OSwgMjMwLCAyMTcsIDI0NywgMjQ0LCAxOTEsIDIyMSwgMTkwLCAyMzYsIDAsIDI0NCwgMTUzLCAyNTMsIAotICAgIDIxMywgMjQ0LCAxOTAsIDI0NCwgNDksIDI0NCwgMTkwLCAyMTksIDkyLCAyNDQsIDE5MCwgMjQ3LCAxNjUsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMjExLCAyMzAsIDIzMCwgMTEwLCAyNDQsIDE5MSwgMiwgMjMxLCA4NCwgMjMxLCAxNDQsIDI0MiwgMTI0LCAKLSAgICAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjE3LCAxNCwgCi0gICAgNjQsIDIzNSwgNTMsIDIxOSwgNzQsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjUwLCAKLSAgICAyMjUsIDI0NCwgMTkxLCAyLCAyNDEsIDIyNiwgMjQ1LCAxMywgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTEsIDE5NiwgCi0gICAgMjE5LCA3NSwgMjM0LCA2MiwgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyNTAsIDAsIDI0NSwgMTMsIDIyNCwgMjI3LCAyNTAsIAotICAgIDIyNSwgMjQ0LCAxOTAsIDI0OSwgMTE2LCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDIxMiwgMjAsIDI1MCwgMjI1LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIsIDIyOCwgNzUsIDI0MiwgMTYzLCAyNDMsIDM0LCAyNDQsIDE5MSwgMiwgMjI2LCAyMTUsIDI0MywgMzQsIAotICAgIDIyNSwgMTY4LCAyNTEsIDE2OCwgMjQ4LCA3NSwgMjIxLCAxNjksIDIzMCwgMTQ1LCAyNDEsIDIyOSwgMjMwLCAxNDUsIDIxOSwgCi0gICAgOCwgMjMwLCAxNDUsIDI0MiwgNSwgMjI1LCAxNjgsIDIyMywgMTU2LCAxMjMsIDI0MiwgMTUsIDIyNSwgMTY4LCAyMjMsIAotICAgIDE1NiwgMjUxLCAxNzgsIDI0MiwgMTEsIDIzNiwgMCwgMjUwLCAxNzksIDIyNSwgMTY4LCAyNDMsIDIzOCwgMjI1LCAxNjgsIAotICAgIDIsIDIyNCwgMjI3LCAyNDQsIDE5MCwgMjI1LCAxNjgsIDIsIDI0NCwgNDEsIDI0MiwgMTAsIDIyMiwgMjAzLCAyNDEsIDIxNCwgCi0gICAgMjE4LCAxNDMsIDIzMiwgMTQ5LCAyMjMsIDE2MiwgMjUwLCAyNDQsIDI0MSwgMTYyLCAyMTUsIDI0OCwgMjQxLCAxNjIsIAotICAgIDIxNSwgMjQ5LCAyLCAyNTEsIDExNCwgMjI4LCA1MywgMjE1LCAyNDgsIDIzMSwgMzIsIDE5MiwgMjIzLCAxNjMsIDIxOCwgCi0gICAgMTQ5LCAyMTUsIDI0NiwgMjE1LCAyNDcsIDI1MCwgMjQ0LCAyNTEsIDkyLCAyMjYsIDE5NCwgMjUxLCA5MiwgMjE1LCAyMDEsIAotICAgIDI1MSwgOTMsIDIxOCwgMTI5LCAyMzAsIDE4NywgMjU0LCAxMzAsIDI0NCwgOTcsIDI0NSwgMTM3LCAyMjQsIDI1NSwgMjUwLCAKLSAgICAyNDQsIDIyNiwgMTk0LCAyMjQsIDI1NSwgMjUwLCAyNDQsIDIxNywgMzIsIDIyNiwgMTk0LCAyMTcsIDMyLCAyNTMsIDE4MCwgCi0gICAgMjI2LCAxOTQsIDI1MywgMTgwLCAyMjMsIDExOCwgMjEzLCAyNDcsIDI0OCwgNTgsIDIxNSwgMTkyLCAyNTMsIDI0MiwgMjMyLCAKLSAgICAxMTcsIDIxNSwgMjU0LCAyMzAsIDEzOSwgMjMwLCAxMTYsIDIyMywgMTYxLCAyMTgsIDYsIDIyMywgMTYxLCAyMzAsIDExNiwgCi0gICAgMjUxLCAyOCwgMjU0LCAyMjksIDIxNSwgMjQ1LCAyMjAsIDE2LCAyMjIsIDE4MiwgMjE5LCAxLCAyMDMsIDIxNSwgMjUyLCAKLSAgICAyMzIsIDIzMCwgNjcsIDIxNSwgMjUyLCAyMzIsIDIzMCwgMjQ5LCAxOTAsIDUwLCAyMjQsIDI1NSwgMjUwLCAyMjksIDIyMywgCi0gICAgNDQsIDIzMiwgMjMwLCAyMTUsIDIyMiwgMjQ0LCA3NCwgMjI2LCAxOTcsIDIyNCwgMjM4LCAyNDcsIDEyMywgMjI4LCA3NSwgCi0gICAgMjQ1LCAxMjUsIDUwLCAyMTksIDcyLCA4NywgMjI4LCA3NSwgMjE5LCA3MiwgODcsIDIyNCwgMTIyLCAyMzIsIDE5MywgMjM2LCAKLSAgICAwLCAyMzUsIDE1NywgMjI1LCA0MSwgODcsIDI0NywgMTQ2LCAyMjgsIDUyLCAyMzIsIDE5MywgODcsIDIyNCwgMjMyLCAyMTIsIAotICAgIDQxLCA4NywgMjI4LCA2NiwgMjEyLCA0MSwgODcsIDI1MiwgMiwgMjI4LCA3NSwgMjUyLCAxLCAyNTIsIDAsIDIzMCwgMTE2LCAKLSAgICAyNTIsIDAsIDIyNSwgMjEzLCAyMjgsIDc1LCAyMjUsIDIxMiwgMjUwLCAxMDAsIDI0OSwgMTI0LCAyMzEsIDU2LCA4NywgCi0gICAgMjExLCAyMTgsIDg3LCAyMjMsIDU5LCAyNTIsIDE4NywgODcsIDIxNiwgMzcsIDIxMiwgNDEsIDI0OSwgMjUzLCAyMTksIAotICAgIDIzNCwgMjUyLCAxMTgsIDI1MiwgMTE2LCAyMjUsIDI0MiwgMjQ5LCAxNzcsIDI0OSwgODYsIDI1MiwgMTY5LCAyNTAsIDIyLCAKLSAgICA0MywgMjMyLCA5MCwgMTA4LCAxNiwgMzEsIDIyNCwgMywgMTA4LCAxNiwgMzEsIDI1NCwgMTkyLCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ0LCA5NiwgMTA4LCAxNiwgMzEsIDI0NSwgMjIzLCAxMDgsIDE2LCAzMSwgMjEyLCA0MCwgMTA4LCAxNiwgMzEsIDI1NCwgCi0gICAgNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMjMsIDEwNSwgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIyMywgMTA0LCAxMDgsIAotICAgIDE2LCAzMSwgMjU0LCA0NCwgMjEzLCAxNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMTMsIDE0MiwgMTA4LCAxNiwgMzEsIAorICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTY2LCAxMSwgMTM5LCA0LCAyNTEsIDc0LCAxMSwgMTM5LCA0LCAyNDksIAorICAgIDY4LCAxMSwgMTM5LCA0LCA3NiwgMTEsIDEzOSwgNCwgMjQ1LCAxNCwgMTEsIDEzOSwgNCwgMjQzLCAyMDksIDExLCAxMzksIAorICAgIDQsIDI0MiwgNjcsIDExLCAxMzksIDQsIDc0LCAxMSwgMTM5LCA0LCAyMzUsIDE1MCwgMTEsIDEzOSwgNCwgMjM1LCAyOSwgCisgICAgMTEsIDEzOSwgNCwgMTU2LCAxMSwgMTM5LCA0LCAxOTQsIDExLCAxMzksIDQsIDIzMCwgMzAsIDExLCAxMzksIDQsIDc4LCAKKyAgICAxMSwgMTM5LCA0LCAyMjYsIDEwOSwgMTEsIDEzOSwgNCwgMjI0LCA5OSwgMTEsIDEzOSwgNCwgMTUzLCAxMSwgMTM5LCA0LCAKKyAgICAyMjIsIDkzLCAxMSwgMTM5LCA0LCAyMTcsIDE1MywgMTEsIDEzOSwgNCwgNjksIDExLCAxMzksIDQsIDIxNCwgMTA1LCAxMSwgCisgICAgMTM5LCA0LCAyMTIsIDk4LCAxMSwgMTM5LCA0LCAyMTEsIDE3OCwgMTEsIDEzOSwgNCwgMjExLCAxMTcsIDExLCAxMzksIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNiwgNjEsIDExLCAyMywgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDI1MSwgNzQsIDExLCAyMywgMTMzLCA2LCAyNDksIDY4LCAxMSwgMjMsIDEzMywgNiwgNzYsIDExLCAyMywgMTMzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDEzMywgNiwgMjQzLCAyMDksIDExLCAyMywgMTMzLCA2LCAyNDIsIDY3LCAxMSwgMjMsIDEzMywgCisgICAgNiwgNzQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMjksIDExLCAyMywgMTMzLCA2LCAKKyAgICAxNTYsIDExLCAyMywgMTMzLCA2LCAxOTQsIDExLCAyMywgMTMzLCA2LCAyMzAsIDMwLCAxMSwgMjMsIDEzMywgNiwgNzgsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMzMsIDYsIDIyNCwgOTksIDExLCAyMywgMTMzLCA2LCAxNTMsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDEzMywgNiwgMjE3LCAxNTMsIDExLCAyMywgMTMzLCA2LCA2OSwgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgCisgICAgMTc4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAxMTcsIDExLCAyMywgMTMzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDYxLCAxMSwgMjMsIDEzMywgNCwgMjUzLCAxNjYsIDExLCAyMywgMTMzLCA0LCAyNTEsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjQ1LCAxNCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDI0MywgMjA5LCAxMSwgMjMsIDEzMywgNCwgMjQyLCA2NywgMTEsIDIzLCAxMzMsIDQsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjM1LCAxNTAsIDExLCAyMywgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMTk0LCAxMSwgMjMsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMzMsIDQsIDc4LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAKKyAgICAxMDksIDExLCAyMywgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCAKKyAgICA5MywgMTEsIDIzLCAxMzMsIDQsIDIxNywgMTUzLCAxMSwgMjMsIDEzMywgNCwgNjksIDExLCAyMywgMTMzLCA0LCAyMTQsIAorICAgIDEwNSwgMTEsIDIzLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNjYsIAorICAgIDExLCAzNSwgNiwgMjUxLCA3NCwgMTEsIDM1LCA2LCAyNDksIDY4LCAxMSwgMzUsIDYsIDc2LCAxMSwgMzUsIDYsIDI0NSwgCisgICAgMTQsIDExLCAzNSwgNiwgMjQzLCAyMDksIDExLCAzNSwgNiwgMjQyLCA2NywgMTEsIDM1LCA2LCA3NCwgMTEsIDM1LCA2LCAKKyAgICAyMzUsIDE1MCwgMTEsIDM1LCA2LCAyMzUsIDI5LCAxMSwgMzUsIDYsIDE1NiwgMTEsIDM1LCA2LCAxOTQsIDExLCAzNSwgNiwgCisgICAgMjMwLCAzMCwgMTEsIDM1LCA2LCA3OCwgMTEsIDM1LCA2LCAyMjYsIDEwOSwgMTEsIDM1LCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDYsIDE1MywgMTEsIDM1LCA2LCAyMjIsIDkzLCAxMSwgMzUsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDYsIDY5LCAxMSwgMzUsIAorICAgIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDYsIDIxMiwgOTgsIDExLCAzNSwgNiwgMjExLCAxNzgsIDExLCAzNSwgNiwgMjExLCAKKyAgICAxMTcsIDExLCAzNSwgNiwgMjEwLCAxNTksIDExLCAzNSwgNCwgNjEsIDExLCAzNSwgNCwgMjUzLCAxNjYsIDExLCAzNSwgNCwgCisgICAgMjUxLCA3NCwgMTEsIDM1LCA0LCAyNDksIDY4LCAxMSwgMzUsIDQsIDc2LCAxMSwgMzUsIDQsIDI0NSwgMTQsIDExLCAzNSwgCisgICAgNCwgMjQzLCAyMDksIDExLCAzNSwgNCwgMjQyLCA2NywgMTEsIDM1LCA0LCA3NCwgMTEsIDM1LCA0LCAyMzUsIDE1MCwgMTEsIAorICAgIDM1LCA0LCAyMzUsIDI5LCAxMSwgMzUsIDQsIDE1NiwgMTEsIDM1LCA0LCAxOTQsIDExLCAzNSwgNCwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCA0LCA3OCwgMTEsIDM1LCA0LCAyMjYsIDEwOSwgMTEsIDM1LCA0LCAyMjQsIDk5LCAxMSwgMzUsIDQsIDE1MywgMTEsIAorICAgIDM1LCA0LCAyMjIsIDkzLCAxMSwgMzUsIDQsIDIxNywgMTUzLCAxMSwgMzUsIDQsIDY5LCAxMSwgMzUsIDQsIDIxNCwgMTA1LCAKKyAgICAxMSwgMzUsIDQsIDIxMiwgOTgsIDExLCAzNSwgNCwgMjExLCAxNzgsIDExLCAzNSwgNCwgMjExLCAxMTcsIDExLCAzNSwgNCwgCisgICAgMjEwLCAxNTksIDExLCAzNSwgMjMsIDYsIDYxLCAxMSwgMzUsIDIzLCA2LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgNiwgMjUxLCAKKyAgICA3NCwgMTEsIDM1LCAyMywgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgNiwgNzYsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTQsIAorICAgIDExLCAzNSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCA2LCAyNDIsIDY3LCAxMSwgMzUsIDIzLCA2LCA3NCwgMTEsIAorICAgIDM1LCAyMywgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDYsIDIzNSwgMjksIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAKKyAgICAyMywgNiwgMTk0LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCA2LCA3OCwgMTEsIDM1LCAyMywgNiwgCisgICAgMjI2LCAxMDksIDExLCAzNSwgMjMsIDYsIDIyNCwgOTksIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgNiwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDYsIDY5LCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgCisgICAgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgCisgICAgMzUsIDIzLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCA0LCAyNDksIDY4LCAxMSwgMzUsIDIzLCA0LCA3NiwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDQsIDI0MiwgNjcsIDExLCAzNSwgCisgICAgMjMsIDQsIDc0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgNCwgMTU2LCAxMSwgMzUsIDIzLCA0LCAxOTQsIDExLCAzNSwgMjMsIDQsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDQsIDc4LCAKKyAgICAxMSwgMzUsIDIzLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAyMywgNCwgMjI0LCA5OSwgMTEsIDM1LCAyMywgNCwgMTUzLCAxMSwgCisgICAgMzUsIDIzLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgNCwgNjksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA2LCA2MSwgMTEsIDM1LCAzMiwgCisgICAgNiwgMjUzLCAxNjYsIDExLCAzNSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzNSwgMzIsIDYsIDI0OSwgNjgsIDExLCAzNSwgMzIsIAorICAgIDYsIDc2LCAxMSwgMzUsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzUsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAzMiwgNiwgCisgICAgMjQyLCA2NywgMTEsIDM1LCAzMiwgNiwgNzQsIDExLCAzNSwgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDMyLCA2LCAyMzUsIAorICAgIDI5LCAxMSwgMzUsIDMyLCA2LCAxNTYsIDExLCAzNSwgMzIsIDYsIDE5NCwgMTEsIDM1LCAzMiwgNiwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCAzMiwgNiwgNzgsIDExLCAzNSwgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMzUsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDMyLCA2LCAxNTMsIDExLCAzNSwgMzIsIDYsIDIyMiwgOTMsIDExLCAzNSwgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDMyLCAKKyAgICA2LCA2OSwgMTEsIDM1LCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDYsIAorICAgIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMzIsIAorICAgIDQsIDYxLCAxMSwgMzUsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDM1LCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAzMiwgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDM1LCAzMiwgNCwgNzYsIDExLCAzNSwgMzIsIDQsIDI0NSwgMTQsIDExLCAzNSwgMzIsIDQsIDI0MywgCisgICAgMjA5LCAxMSwgMzUsIDMyLCA0LCAyNDIsIDY3LCAxMSwgMzUsIDMyLCA0LCA3NCwgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNTAsIAorICAgIDExLCAzNSwgMzIsIDQsIDIzNSwgMjksIDExLCAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTk0LCAxMSwgMzUsIAorICAgIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzUsIDMyLCA0LCA3OCwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDksIDExLCAzNSwgMzIsIAorICAgIDQsIDIyNCwgOTksIDExLCAzNSwgMzIsIDQsIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MywgMTEsIDM1LCAzMiwgNCwgCisgICAgMjE3LCAxNTMsIDExLCAzNSwgMzIsIDQsIDY5LCAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCAKKyAgICA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIAorICAgIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgMzIsIDYsIDc2LCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQyLCAKKyAgICA2NywgMTEsIDM1LCAyMywgMzIsIDYsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTk0LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNiwgMjMwLCAzMCwgMTEsIDM1LCAyMywgMzIsIDYsIDc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxMDksIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgNjksIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDMyLCA0LCA3NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTQsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0MiwgNjcsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA3NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDE1NiwgMTEsIDM1LCAyMywgMzIsIDQsIDE5NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMzAsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCA3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCA5OSwgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDY5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDExNywgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDYsIDYxLCAxMSwgMjMwLCAxNDMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMwLCAxNDMsIDYsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICA3NiwgMTEsIDIzMCwgMTQzLCA2LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDYsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNiwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA2LCAxNTYsIDExLCAyMzAsIDE0MywgNiwgMTk0LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNiwgNzgsIDExLCAyMzAsIDE0MywgNiwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA2LCAxNTMsIDExLCAyMzAsIDE0MywgNiwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA2LCA2OSwgMTEsIDIzMCwgMTQzLCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA2LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDYsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDQsIDYxLCAxMSwgMjMwLCAxNDMsIDQsIDI1MywgMTY2LCAKKyAgICAxMSwgMjMwLCAxNDMsIDQsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA0LCA3NiwgCisgICAgMTEsIDIzMCwgMTQzLCA0LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDQsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNCwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA0LCAxNTYsIDExLCAyMzAsIDE0MywgNCwgMTk0LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNCwgNzgsIDExLCAyMzAsIDE0MywgNCwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA0LCAxNTMsIDExLCAyMzAsIDE0MywgNCwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA0LCA2OSwgMTEsIDIzMCwgMTQzLCA0LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA0LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDQsIDIxMCwgMTU5LCAxMSwgMzIsIDQsIDI0NywgMTI3LCA3NCwgMTEsIDMyLCA0LCAyNDcsIDEyNywgMjM1LCAKKyAgICAxNTAsIDExLCAyMywgNiwgMjU0LCAxNTEsIDExLCAyMywgNiwgMjUyLCAzNCwgMTEsIDIzLCA2LCAyNDMsIDExNCwgMTEsIAorICAgIDIzLCA2LCAyNDgsIDYyLCAxMSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMjMsIDYsIDIxMCwgODUsIDExLCAyMywgNiwgMjQ1LCAKKyAgICA3MSwgMTEsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDIzLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCA2LCAyMzQsIDIyOCwgMTEsIAorICAgIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDIzLCA2LCAyMzAsIDEwNywgMTEsIDIzLCA2LCAyMjcsIDI0MiwgMTEsIDIzLCA2LCAKKyAgICAyMTEsIDE1NywgMTEsIDIzLCA2LCAyMjYsIDIwMywgMTEsIDIzLCA2LCAyMjUsIDExMSwgMTEsIDIzLCA2LCAyMjMsIDQwLCAKKyAgICAxMSwgMjMsIDYsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCA2LCAyMTksIDE3OSwgMTEsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMjMsIAorICAgIDYsIDIxNCwgMTU3LCAxMSwgMjMsIDYsIDIyNSwgMTM2LCAxMSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMjMsIDYsIDIyNCwgCisgICAgMTY0LCAxMSwgMjMsIDYsIDIyNiwgMjA1LCAxMSwgMjMsIDIyOSwgMjI2LCAxMSwgMjMsIDQsIDI1NCwgMTUxLCAxMSwgMjMsIAorICAgIDQsIDI1MiwgMzQsIDExLCAyMywgNCwgMjQzLCAxMTQsIDExLCAyMywgNCwgMjQ4LCA2MiwgMTEsIDIzLCA0LCAyNDUsIDEwOCwgCisgICAgMTEsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDQsIDI0NSwgNzEsIDExLCAyMywgNCwgMjE2LCAxODAsIDExLCAyMywgNCwgCisgICAgMjM1LCAxOTIsIDExLCAyMywgNCwgMjM0LCAyMjgsIDExLCAyMywgNCwgMjMzLCAxMDQsIDExLCAyMywgNCwgMjMwLCAxMDcsIAorICAgIDExLCAyMywgNCwgMjI3LCAyNDIsIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAyMDMsIDExLCAyMywgNCwgCisgICAgMjI1LCAxMTEsIDExLCAyMywgNCwgMjIzLCA0MCwgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAyMywgNCwgMjE5LCAKKyAgICAxNzksIDExLCAyMywgNCwgMjE3LCA0MiwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzNiwgMTEsIAorICAgIDIzLCA0LCAyNTAsIDExOCwgMTEsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIDIzLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAyMjYsIAorICAgIDEsIDI0NywgMjQxLCAxMSwgMjMsIDI0NSwgMTA5LCA4NywgMTEsIDIzLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMjM0LCAKKyAgICAyMjksIDg3LCAxMSwgMjMsIDIyNSwgMTM3LCA4NywgMTEsIDIzLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAyMjUsIDExMiwgODcsIAorICAgIDExLCAzMiwgNiwgMjU0LCAxNTEsIDExLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDMyLCA2LCAKKyAgICAyNDgsIDYyLCAxMSwgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzIsIDYsIDIxMCwgODUsIDExLCAzMiwgNiwgMjQ1LCA3MSwgMTEsIAorICAgIDMyLCA2LCAyMTYsIDE4MCwgMTEsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDMyLCA2LCAyMzQsIDIyOCwgMTEsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDMyLCA2LCAyMjcsIDI0MiwgMTEsIDMyLCA2LCAyMTEsIDE1NywgCisgICAgMTEsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDMyLCA2LCAyMjUsIDExMSwgMTEsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzIsIDYsIAorICAgIDIxNiwgMTgxLCA4NywgMTEsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzIsIDYsIDIxNCwgCisgICAgMTU3LCAxMSwgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMzIsIDYsIDI1MCwgMTE4LCAxMSwgMzIsIDYsIDIyNCwgMTY0LCAxMSwgCisgICAgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMzIsIDIyOSwgMjI2LCAxMSwgMzIsIDQsIDI1NCwgMTUxLCAxMSwgMzIsIDQsIDI1MiwgCisgICAgMzQsIDExLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzMiwgNCwgMjQ4LCA2MiwgMTEsIDMyLCA0LCAyNDUsIDEwOCwgMTEsIDMyLCAKKyAgICA0LCAyMTAsIDg1LCAxMSwgMzIsIDQsIDI0NSwgNzEsIDExLCAzMiwgNCwgMjE2LCAxODAsIDExLCAzMiwgNCwgMjM1LCAxOTIsIAorICAgIDExLCAzMiwgNCwgMjM0LCAyMjgsIDExLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAyMDMsIDExLCAzMiwgNCwgMjI1LCAxMTEsIAorICAgIDExLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzMiwgNCwgMjE5LCAxNzksIDExLCAzMiwgCisgICAgNCwgMjE3LCA0MiwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDMyLCA0LCAyNTAsIAorICAgIDExOCwgMTEsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAKKyAgICAxMSwgMzIsIDI0NSwgMTA5LCA4NywgMTEsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDMyLCAyMjUsIDExMiwgODcsIDExLCAyMywgMzIsIDYsIAorICAgIDI1NCwgMTUxLCAxMSwgMjMsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjQ4LCA2MiwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDYsIDIxMCwgODUsIDExLCAyMywgMzIsIDYsIAorICAgIDI0NSwgNzEsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjM0LCAyMjgsIDExLCAyMywgMzIsIDYsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgCisgICAgNiwgMjI3LCAyNDIsIDExLCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDIzLCAKKyAgICAzMiwgNiwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDYsIDIyMywgNDAsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgxLCA4NywgMTEsIAorICAgIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAyMywgMzIsIDYsIDIxNywgNDIsIDExLCAyMywgMzIsIDYsIDIxNCwgMTU3LCAxMSwgCisgICAgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNiwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDYsIDIyNCwgMTY0LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI5LCAyMjYsIDExLCAyMywgMzIsIDQsIDI1NCwgMTUxLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNCwgMjQ4LCA2MiwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAyMywgMzIsIDQsIDI0NSwgNzEsIAorICAgIDExLCAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDIwMywgMTEsIDIzLCAzMiwgCisgICAgNCwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjE5LCAxNzksIDExLCAyMywgMzIsIDQsIDIxNywgNDIsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDQsIDIyNCwgMTY0LCAxMSwgCisgICAgMjMsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDIzLCAzMiwgMjQ1LCAxMDksIAorICAgIDg3LCAxMSwgMjMsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDIzLCAzMiwgMjI1LCAKKyAgICAxMzcsIDg3LCAxMSwgMjMsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNiwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIAorICAgIDYsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNDUsIDcxLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNiwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIAorICAgIDYsIDIzNCwgMjI4LCAxMSwgMzUsIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNiwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDYsIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDMsIDExLCAKKyAgICAzNSwgMjMsIDYsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MSwgODcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDE1NywgCisgICAgMTEsIDM1LCAyMywgNiwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA2LCAyMjQsIAorICAgIDE2NCwgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCA0LCAyNTQsIAorICAgIDE1MSwgMTEsIDM1LCAyMywgNCwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDQsIDI0OCwgCisgICAgNjIsIDExLCAzNSwgMjMsIDQsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIAorICAgIDcxLCAxMSwgMzUsIDIzLCA0LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMzUsIDIzLCA0LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDcsIDExLCAzNSwgMjMsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAyMDMsIDExLCAzNSwgMjMsIAorICAgIDQsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA0LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAKKyAgICAyMywgNCwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIAorICAgIDM1LCAyMywgNCwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAzNSwgMjMsIDI0NSwgMTA5LCAKKyAgICA4NywgMTEsIDM1LCAyMywgMjE2LCAxODEsIDg3LCAxMSwgMzUsIDIzLCAyMzQsIDIyOSwgODcsIDExLCAzNSwgMjMsIDIyNSwgCisgICAgMTM3LCA4NywgMTEsIDM1LCAyMywgMjIzLCA0MSwgODcsIDExLCAzNSwgMjMsIDIyNSwgMTEyLCA4NywgMTEsIDM1LCAyMywgCisgICAgMzIsIDYsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMTE0LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNzEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM0LCAyMjgsIDExLCAzNSwgMjMsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI3LCAyNDIsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMzUsIDIzLCAzMiwgNiwgCisgICAgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODEsIDg3LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MCwgMTE4LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjI0LCAxNjQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA3MSwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCAyMjcsIDI0MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAKKyAgICAyMDMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgCisgICAgNDIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgCisgICAgMjA1LCAxMSwgMzUsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDM1LCAyMywgMzIsIDI0NSwgMTA5LCA4NywgMTEsIAorICAgIDM1LCAyMywgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDM1LCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyMywgNDEsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAKKyAgICAxMSwgMjMsIDYsIDI0NywgMjM1LCAxMSwgMjMsIDQsIDI0NywgMjM1LCAxMSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMjMsIAorICAgIDIxLCAxMTEsIDExLCAyMywgMjEsIDEwNSwgMTEsIDIzLCAyMSwgMTU4LCAxMSwgMjMsIDIxLCAxNjEsIDExLCAyMywgMjEsIAorICAgIDE5MCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAxOTksIDExLCAyMywgMjEsIDE5NiwgMTEsIDIzLCAyMSwgMjAxLCAKKyAgICAxMSwgMTM5LCAyMSwgMjEwLCA4NiwgMTEsIDEzOSwgMjEsIDExMSwgMTEsIDEzOSwgMjEsIDEwNSwgMTEsIDEzOSwgMjEsIAorICAgIDE1OCwgMTEsIDEzOSwgMjEsIDE2MSwgMTEsIDEzOSwgMjEsIDE5MCwgMTEsIDEzOSwgMjEsIDE5NSwgMTEsIDEzOSwgMjEsIAorICAgIDE5OSwgMTEsIDEzOSwgMjEsIDE5NiwgMTEsIDEzOSwgMjEsIDIwMSwgMTEsIDM1LCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMSwgCisgICAgMTExLCAxMSwgMzUsIDIxLCAxMDUsIDExLCAzNSwgMjEsIDE1OCwgMTEsIDM1LCAyMSwgMTYxLCAxMSwgMzUsIDIxLCAxOTAsIAorICAgIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMTk5LCAxMSwgMzUsIDIxLCAxOTYsIDExLCAzNSwgMjEsIDIwMSwgMTEsIAorICAgIDM1LCAyMywgMjEsIDIxMCwgODYsIDExLCAzNSwgMjMsIDIxLCAxMTEsIDExLCAzNSwgMjMsIDIxLCAxMDUsIDExLCAzNSwgCisgICAgMjMsIDIxLCAxNTgsIDExLCAzNSwgMjMsIDIxLCAxNjEsIDExLCAzNSwgMjMsIDIxLCAxOTAsIDExLCAzNSwgMjMsIDIxLCAKKyAgICAxOTUsIDExLCAzNSwgMjMsIDIxLCAxOTksIDExLCAzNSwgMjMsIDIxLCAxOTYsIDExLCAzNSwgMjMsIDIxLCAyMDEsIDExLCAKKyAgICAyMzAsIDE0MywgMjEsIDIxMCwgODYsIDExLCAyMzAsIDE0MywgMjEsIDExMSwgMTEsIDIzMCwgMTQzLCAyMSwgMTA1LCAxMSwgCisgICAgMjMwLCAxNDMsIDIxLCAxNTgsIDExLCAyMzAsIDE0MywgMjEsIDE2MSwgMTEsIDIzMCwgMTQzLCAyMSwgMTkwLCAxMSwgMjMwLCAKKyAgICAxNDMsIDIxLCAxOTUsIDExLCAyMzAsIDE0MywgMjEsIDE5OSwgMTEsIDIzMCwgMTQzLCAyMSwgMTk2LCAxMSwgMjMwLCAxNDMsIAorICAgIDIxLCAyMDEsIDksIDExLCAyNTQsIDE3OSwgOSwgMTEsIDI1MiwgNjIsIDksIDExLCAyMzUsIDEyOSwgOSwgMTEsIDI0OCwgCisgICAgMjAzLCA5LCAxMSwgMjEyLCAzMCwgOSwgMTEsIDIxMCwgMTA4LCA5LCAxMSwgMjQyLCA0NCwgOSwgMTEsIDIxNywgODEsIDksIAorICAgIDExLCAyMTEsIDQzLCA5LCAxMSwgMjM1LCAwLCA5LCAxMSwgMjMzLCAxMDgsIDksIDExLCAyMzEsIDgzLCA5LCAxMSwgMjI4LCAKKyAgICA2NywgOSwgMTEsIDIyMSwgMTY4LCA5LCAxMSwgMjU0LCAyMDUsIDksIDExLCAyNDQsIDE1MCwgOSwgMTEsIDIyMiwgMjgsIDksIAorICAgIDExLCAyMjQsIDg0LCA5LCAxMSwgMjIzLCA5OCwgOSwgMTEsIDIyMCwgNjEsIDksIDExLCAyMTcsIDgsIDksIDExLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIzNCwgMTM1LCA5LCAxMSwgMjE2LCAyMDMsIDksIDExLCAyNDgsIDIyNCwgOSwgMTEsIDIxMCwgMTExLCAKKyAgICA5LCAxMSwgMjQyLCAyNTEsIDksIDExLCAyNDcsIDEyNywgMjUyLCA2MiwgOSwgMTEsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAKKyAgICAxMSwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxMSwgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCA2NSwgMjUyLCA2MiwgOSwgCisgICAgMTEsIDY1LCAyMzUsIDEyOSwgOSwgMTEsIDY1LCAyNDEsIDIyNSwgOSwgMTEsIDY1LCAyNDIsIDQ0LCA5LCAxMSwgNjUsIAorICAgIDIxMSwgNDMsIDksIDExLCA2NSwgMjM1LCAwLCA5LCAxMSwgNjUsIDIzMywgMTA4LCA5LCAxMSwgNjUsIDIzMSwgODMsIDksIAorICAgIDExLCA2NSwgMjI4LCA2NywgOSwgMTEsIDY1LCAyMjEsIDE2OCwgOSwgMTEsIDY1LCAyNTQsIDIwNSwgOSwgMTEsIDY1LCAKKyAgICAyNDQsIDE1MCwgOSwgMTEsIDY1LCAyMjIsIDI4LCA5LCAxMSwgNjUsIDIyNCwgODQsIDksIDExLCA2NSwgMjIwLCA2MSwgOSwgCisgICAgMTEsIDY1LCAyMTcsIDgsIDksIDExLCA2NSwgMjE2LCAxOTMsIDksIDExLCA2NSwgMjM0LCAxMzUsIDksIDExLCA2NSwgMjQ4LCAKKyAgICAyMjQsIDksIDExLCA2NSwgMjQyLCAyNTEsIDksIDExLCAyMTcsIDc3LCAyMzUsIDEyOSwgOSwgMTEsIDIxNywgNzcsIDI0MiwgCisgICAgNDQsIDksIDExLCAyMTcsIDc3LCAyMTEsIDQzLCA5LCAxMSwgMjE3LCA3NywgMjMzLCAxMDgsIDksIDExLCAyMTcsIDc3LCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjIxLCAxNjgsIDksIDExLCAyMTcsIDc3LCAyNTQsIDIwNSwgOSwgMTEsIDIxNywgCisgICAgNzcsIDIyMiwgMjgsIDksIDExLCAyMTcsIDc3LCAyMjQsIDg0LCA5LCAxMSwgMjE3LCA3NywgMjIwLCA2MSwgOSwgMTEsIAorICAgIDIxNywgNzcsIDIzNCwgMTM1LCA5LCAxMSwgMjE3LCA3NywgMjQ4LCAyMjQsIDksIDExLCAyMTcsIDc3LCAyNDIsIDI1MSwgOSwgCisgICAgMTEsIDIxNywgNzcsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCAKKyAgICAyMTgsIDExMiwgMjUyLCA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDEyOSwgOSwgMTEsIDIxOCwgMTEyLCAyNDEsIDIyNSwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDQ0LCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgODEsIDksIDExLCAyMTgsIDExMiwgMjExLCAKKyAgICA0MywgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDAsIDksIDExLCAyMTgsIDExMiwgMjMxLCA4MywgOSwgMTEsIDIxOCwgMTEyLCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE4LCAxMTIsIDIyMSwgMTY4LCA5LCAxMSwgMjE4LCAxMTIsIDI1NCwgMjA1LCA5LCAxMSwgCisgICAgMjE4LCAxMTIsIDI0NCwgMTUwLCA5LCAxMSwgMjE4LCAxMTIsIDIyMiwgMjgsIDksIDExLCAyMTgsIDExMiwgMjI0LCA4NCwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyMjAsIDYxLCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgOCwgOSwgMTEsIDIxOCwgMTEyLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIxOCwgMTEyLCAyMzQsIDEzNSwgOSwgMTEsIDIxOCwgMTEyLCAyNDgsIDIyNCwgOSwgMTEsIDIxOCwgCisgICAgMTEyLCAyMTAsIDExMSwgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDI1MSwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjUyLCAKKyAgICA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDExLCAyMzIsIDEyOCwgMjU0LCAxNzksIDksIAorICAgIDExLCAyMzIsIDEyOCwgMjUyLCA2MiwgOSwgMTEsIDIzMiwgMTI4LCAyMzUsIDEyOSwgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIAorICAgIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDEsIDIyNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTIsIDMwLCA5LCAxMSwgMjMyLCAKKyAgICAxMjgsIDIxMCwgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDI0MiwgNDQsIDksIDExLCAyMzIsIDEyOCwgMjE3LCA4MSwgOSwgMTEsIAorICAgIDIzMiwgMTI4LCAyMTEsIDQzLCA5LCAxMSwgMjMyLCAxMjgsIDIzMywgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDIzMSwgODMsIAorICAgIDksIDExLCAyMzIsIDEyOCwgMjI4LCA2NywgOSwgMTEsIDIzMiwgMTI4LCAyMjEsIDE2OCwgOSwgMTEsIDIzMiwgMTI4LCAKKyAgICAyNTQsIDIwNSwgOSwgMTEsIDIzMiwgMTI4LCAyNDQsIDE1MCwgOSwgMTEsIDIzMiwgMTI4LCAyMjIsIDI4LCA5LCAxMSwgCisgICAgMjMyLCAxMjgsIDIyNCwgODQsIDksIDExLCAyMzIsIDEyOCwgMjIzLCA5OCwgOSwgMTEsIDIzMiwgMTI4LCAyMjAsIDYxLCA5LCAKKyAgICAxMSwgMjMyLCAxMjgsIDIxNywgOCwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDE5MywgOSwgMTEsIDIzMiwgMTI4LCAyMzQsIAorICAgIDEzNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIDIyNCwgOSwgMTEsIDIzMiwgCisgICAgMTI4LCAyMTAsIDExMSwgOSwgMTEsIDIzMiwgMTI4LCAyNDIsIDI1MSwgOSwgMTEsIDEzOSwgMjUyLCA2MiwgOSwgMTEsIAorICAgIDEzOSwgMjM1LCAxMjksIDksIDExLCAxMzksIDI0OCwgMjAzLCA5LCAxMSwgMTM5LCAyMTIsIDMwLCA5LCAxMSwgMTM5LCAKKyAgICAyMTAsIDEwOCwgOSwgMTEsIDEzOSwgMjQyLCA0NCwgOSwgMTEsIDEzOSwgMjE3LCA4MSwgOSwgMTEsIDEzOSwgMjExLCA0MywgCisgICAgOSwgMTEsIDEzOSwgMjMzLCAxMDgsIDksIDExLCAxMzksIDIzMSwgODMsIDksIDExLCAxMzksIDIyOCwgNjcsIDksIDExLCAKKyAgICAxMzksIDIyMSwgMTY4LCA5LCAxMSwgMTM5LCAyNTQsIDIwNSwgOSwgMTEsIDEzOSwgMjQ0LCAxNTAsIDksIDExLCAxMzksIAorICAgIDIyMiwgMjgsIDksIDExLCAxMzksIDIyNCwgODQsIDksIDExLCAxMzksIDIyMywgOTgsIDksIDExLCAxMzksIDIyMCwgNjEsIAorICAgIDksIDExLCAxMzksIDIxNywgOCwgOSwgMTEsIDEzOSwgMjE2LCAxOTMsIDksIDExLCAxMzksIDIzNCwgMTM1LCA5LCAxMSwgCisgICAgMTM5LCAyMTYsIDIwMywgOSwgMTEsIDEzOSwgMjQ4LCAyMjQsIDksIDExLCAxMzksIDIxMCwgMTExLCA5LCAxMSwgMTM5LCAKKyAgICAyNDIsIDI1MSwgOSwgMTEsIDIyNiwgMTcyLCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQ0LCA5LCAxMSwgMjI2LCAxNzIsIDEyMiwgCisgICAgMiwgMjQ4LCAyMDMsIDIzMSwgMjEwLCA4NiwgMjQ1LCAyMjgsIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxOSwgMzAsIAorICAgIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxMiwgOSwgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjI4LCA2MSwgMjExLCAKKyAgICAyMzksIDIzMSwgMjEwLCA4NiwgMjIzLCAxMTQsIDI0NiwgMTA0LCAyMzEsIDIxMCwgODYsIDI0MiwgMTM0LCAyNDYsIDEwNCwgCisgICAgMjMxLCAyMTAsIDg2LCA3MSwgMjQ2LCAxMDQsIDIzMSwgMjEwLCA4NiwgMTIzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMTEzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCAxOSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDI0NCwgODksIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDIyMCwgMTI0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMjQ1LCAyMDEsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgMTQ5LCAyMzEsIAorICAgIDIxMCwgODYsIDEyMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDExMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgCisgICAgODYsIDEzNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NCwgMTksIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDg5LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjE5LCAxMjcsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIAorICAgIDg2LCAyMjAsIDEyNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NSwgMjAxLCA2NCwgMjUyLCAxNjEsIDIzMSwgCisgICAgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAxMjMsIDY0LCAyNTAsIDQyLCAyMzEsIAorICAgIDIxMCwgODYsIDExMywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDE5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyNDQsIDg5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjIwLCAxMjQsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NSwgMjAxLCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjI1LCAyOCwgMjMxLCAyMTAsIDg2LCAyMjYsIDE2MCwgMjMxLCAyMTAsIDg2LCAyNTIsIDE2MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTAsIDc4LCAyMzEsIDIxMCwgODYsIDIxOCwgMjQxLCAyMzEsIDIxMCwgODYsIDIxOCwgNDAsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUzLCAxODcsIDIzMSwgMjEwLCA4NiwgMjExLCAyMzIsIDIzMSwgMjEwLCA4NiwgMjM1LCA2OCwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTIsIDE5MiwgMTMxLCA4NiwgMjAzLCAyNTIsIDE5MiwgMTMxLCA4NiwgMjQxLCA1MCwgMTMxLCA4NiwgMjQxLCA0OSwgCisgICAgMTMxLCA4NiwgMjQxLCA0OCwgMTMxLCA4NiwgMjQxLCA0NywgMTMxLCA4NiwgMjQxLCA0NiwgMTMxLCA4NiwgMjQxLCA0NSwgCisgICAgMTMxLCA4NiwgMjQxLCA0NCwgMTMxLCA4NiwgMjQxLCA0MywgMTMxLCA4NiwgMjQxLCA0MiwgMTMxLCA4NiwgMjQxLCA0MSwgCisgICAgMTMxLCA4NiwgMjQxLCA0MCwgMTMxLCA4NiwgMjQxLCAzOSwgMTMxLCA4NiwgMjQxLCAzOCwgMTMxLCA4NiwgMjQxLCAzNywgCisgICAgMTMxLCA4NiwgMjQxLCAzNiwgMTMxLCA4NiwgMjQxLCAzNSwgMTMxLCA4NiwgMjQxLCAzNCwgMTMxLCA4NiwgMjQxLCAzMywgCisgICAgMTMxLCA4NiwgMjQxLCAzMiwgMTMxLCA4NiwgMjQxLCAzMSwgMTMxLCA4NiwgMjQxLCAzMCwgMTMxLCA4NiwgMjQxLCAyOSwgCisgICAgMTMxLCA4NiwgMjQxLCAyOCwgMTMxLCA4NiwgMjQxLCAyNywgMTMxLCA4NiwgMjQxLCAyNiwgMTMxLCA4NiwgMjQxLCAyNSwgCisgICAgMTMxLCA4NiwgMjQxLCAyNCwgMTMxLCA4NiwgMjQxLCAyMywgMTMxLCA4NiwgMjQxLCAyMiwgMTMxLCA4NiwgMjQxLCAyMSwgCisgICAgMTMxLCA4NiwgMjQxLCAyMCwgMTMxLCA4NiwgMjQxLCAxOSwgMTMxLCA4NiwgMjQxLCAxOCwgMTMxLCA4NiwgMjQxLCAxNywgCisgICAgMTMxLCA4NiwgMjQxLCAxNiwgMTMxLCA4NiwgMjQxLCAxNSwgMTMxLCA4NiwgMjQxLCAxNCwgMTMxLCA4NiwgMjQxLCAxMywgCisgICAgMTMxLCA4NiwgMjQxLCAxMiwgMTMxLCA4NiwgMjQxLCAxMSwgMTMxLCA4NiwgMjQxLCAxMCwgMTMxLCA4NiwgMjQxLCA5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDgsIDEzMSwgODYsIDI0MSwgNywgMTMxLCA4NiwgMjQxLCA2LCAxMzEsIDg2LCAyNDEsIDUsIDEzMSwgCisgICAgODYsIDI0MSwgNCwgMTMxLCA4NiwgMjQxLCAzLCAxMzEsIDg2LCAyNDEsIDIsIDEzMSwgODYsIDY3LCAyNTIsIDE5MiwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMzgsIDEzMSwgODYsIDIxMywgMjM3LCAxMzEsIDg2LCAyMTMsIDIzNiwgMTMxLCA4NiwgMjEzLCAyMzUsIAorICAgIDEzMSwgODYsIDIxMywgMjM0LCAxMzEsIDg2LCAyMTMsIDIzMywgMTMxLCA4NiwgMjEzLCAyMzIsIDEzMSwgODYsIDIxMywgCisgICAgMjMxLCAxMzEsIDg2LCAyMTMsIDIzMCwgMTMxLCA4NiwgMjEzLCAyMjksIDEzMSwgODYsIDIxMywgMjI4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDIyNywgMTMxLCA4NiwgMjEzLCAyMjYsIDEzMSwgODYsIDIxMywgMjI1LCAxMzEsIDg2LCAyMTMsIDIyNCwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMjMsIDEzMSwgODYsIDIxMywgMjIyLCAxMzEsIDg2LCAyMTMsIDIyMSwgMTMxLCA4NiwgMjEzLCAyMjAsIAorICAgIDEzMSwgODYsIDIxMywgMjE5LCAxMzEsIDg2LCAyMTMsIDIxOCwgMTMxLCA4NiwgMjEzLCAyMTcsIDEzMSwgODYsIDIxMywgCisgICAgMjE2LCAxMzEsIDg2LCAyMTMsIDIxNSwgMTMxLCA4NiwgMjEzLCAyMTQsIDEzMSwgODYsIDIxMywgMjEzLCAxMzEsIDg2LCAKKyAgICAyMTMsIDIxMiwgMTMxLCA4NiwgMjEzLCAyMTEsIDEzMSwgODYsIDIxMywgMjEwLCAxMzEsIDg2LCAyMTMsIDIwOSwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMDgsIDEzMSwgODYsIDIxMywgMjA3LCAxMzEsIDg2LCAyMTMsIDIwNiwgMTMxLCA4NiwgMjEzLCAyMDUsIAorICAgIDEzMSwgODYsIDIxMywgMjA0LCAxMzEsIDg2LCAyMTMsIDIwMywgMTMxLCA4NiwgMjEzLCAyMDIsIDEzMSwgODYsIDIxMywgCisgICAgMjAxLCAxMzEsIDg2LCAyMTMsIDIwMCwgMTMxLCA4NiwgMjEzLCAxOTksIDEzMSwgODYsIDIxMywgMTk4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDE5NywgMTMxLCA4NiwgMjEzLCAxOTYsIDEzMSwgODYsIDIxMywgMTk1LCAxMzEsIDg2LCAyMTMsIDE5NCwgMTMxLCAKKyAgICA4NiwgMjEzLCAxOTMsIDEzMSwgODYsIDIxMywgMTkyLCAxMzEsIDg2LCAyMTMsIDE5MSwgMTMxLCA4NiwgMjEzLCAxOTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTIsIDE5MiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyMTksIDE3LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMTEzLCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDIxOSwgMTcsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAKKyAgICAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMjIwLCAxMjQsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyMTksIAorICAgIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAzNywgCisgICAgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDIzNCwgODUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMTEzLCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDEsIDIzMiwgMjI1LCAKKyAgICAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAyNDEsIAorICAgIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjAsIAorICAgIDEyNCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDI0MSwgCisgICAgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgCisgICAgMzcsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIzNCwgODUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDcsIDI1NSwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDExMywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIAorICAgIDg5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjIwLCAxMjQsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAKKyAgICAyNDksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMzQsIDM3LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDg1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCA4NSwgCisgICAgMjM1LCA2OCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDExMywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyNDQsIDE5LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgMjQ5LCAyNTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjIwLCAxMjQsIAorICAgIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMjgsIDIwNSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyNDksIDI1MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDM3LCAKKyAgICA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMzQsIDg1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCA3MSwgMjM1LCA2OCwgMjEsIDIxMCwgODcsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDIxMCwgODcsIDI0OSwgMjI3LCAyMSwgMTIzLCAyNDksIDIyNywgMjEsIDExMywgCisgICAgMjQ5LCAyMjcsIDIxLCAxMzQsIDI0OSwgMjI3LCAyMSwgMjQ0LCAxOSwgMjQ5LCAyMjcsIDIxLCAyNDQsIDg5LCAyNDksIAorICAgIDIyNywgMjEsIDIxOSwgMTI3LCAyNDksIDIyNywgMjEsIDIyMCwgMTI0LCAyNDksIDIyNywgMjEsIDI0NSwgMjAxLCAyNDksIAorICAgIDIyNywgMjEsIDIyOCwgMjA1LCAyNDksIDIyNywgODgsIDcsIDYsIDEsIDYxLCA4OCwgNywgNiwgMSwgMjUzLCAxNjYsIDg4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc0LCA4OCwgNywgNiwgMSwgMjQ5LCA2OCwgODgsIDcsIDYsIDEsIDc2LCA4OCwgNywgNiwgMSwgCisgICAgMjQ1LCAxNCwgODgsIDcsIDYsIDEsIDI0MywgMjA5LCA4OCwgNywgNiwgMSwgMjQyLCA2NywgODgsIDcsIDYsIDEsIDc0LCAKKyAgICA4OCwgNywgNiwgMSwgMjM1LCAxNTAsIDg4LCA3LCA2LCAxLCAyMzUsIDI5LCA4OCwgNywgNiwgMSwgMTU2LCA4OCwgNywgNiwgCisgICAgMSwgMTk0LCA4OCwgNywgNiwgMSwgMjMwLCAzMCwgODgsIDcsIDYsIDEsIDc4LCA4OCwgNywgNiwgMSwgMjI2LCAxMDksIDg4LCAKKyAgICA3LCA2LCAxLCAyMjQsIDk5LCA4OCwgNywgNiwgMSwgMTUzLCA4OCwgNywgNiwgMSwgMjIyLCA5MywgODgsIDcsIDYsIDEsIAorICAgIDIxNywgMTUzLCA4OCwgNywgNiwgMSwgNjksIDg4LCA3LCA2LCAxLCAyMTQsIDEwNSwgODgsIDcsIDYsIDEsIDIxMiwgOTgsIAorICAgIDg4LCA3LCA2LCAxLCAyMTEsIDE3OCwgODgsIDcsIDYsIDEsIDIxMSwgMTE3LCA4OCwgNywgNiwgMSwgMjEwLCAxNTksIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDcsIDYsIDEsIDIyMiwgOTMsIDM3LCAzMiwgNywgNiwgMSwgMjUxLCA3NCwgMzcsIDMyLCAKKyAgICA3LCA2LCAxLCAxNTMsIDM3LCAyNTAsIDE5OSwgMzcsIDIxMSwgMTgwLCA5MiwgNywgNiwgMSwgNjEsIDkyLCA3LCA2LCAxLCAKKyAgICAyNTMsIDE2NiwgOTIsIDcsIDYsIDEsIDI1MSwgNzQsIDkyLCA3LCA2LCAxLCAyNDksIDY4LCA5MiwgNywgNiwgMSwgNzYsIAorICAgIDkyLCA3LCA2LCAxLCAyNDUsIDE0LCA5MiwgNywgNiwgMSwgMjQzLCAyMDksIDkyLCA3LCA2LCAxLCAyNDIsIDY3LCA5MiwgNywgCisgICAgNiwgMSwgNzQsIDkyLCA3LCA2LCAxLCAyMzUsIDE1MCwgOTIsIDcsIDYsIDEsIDIzNSwgMjksIDkyLCA3LCA2LCAxLCAxNTYsIAorICAgIDkyLCA3LCA2LCAxLCAxOTQsIDkyLCA3LCA2LCAxLCAyMzAsIDMwLCA5MiwgNywgNiwgMSwgNzgsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjYsIDEwOSwgOTIsIDcsIDYsIDEsIDIyNCwgOTksIDkyLCA3LCA2LCAxLCAxNTMsIDkyLCA3LCA2LCAxLCAyMjIsIDkzLCAKKyAgICA5MiwgNywgNiwgMSwgMjE3LCAxNTMsIDkyLCA3LCA2LCAxLCA2OSwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCA5MiwgNywgNiwgCisgICAgMSwgMjEyLCA5OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIDkyLCA3LCA2LCAxLCAKKyAgICAyMTAsIDE1OSwgOTIsIDI0MCwgMjA4LCA5MiwgMjMwLCA1NCwgOTIsIDIyMSwgMTg1LCA5MiwgMjE4LCAyMjgsIDkyLCAyMjQsIAorICAgIDIyMSwgOTIsIDIxMiwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDYxLCAxNTIsIDM3LCA3LCA2LCAxLCAyNTMsIDE2NiwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjUxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMTUyLCAzNywgNywgNiwgMSwgNzYsIAorICAgIDE1MiwgMzcsIDcsIDYsIDEsIDI0NSwgMTQsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjA5LCAxNTIsIDM3LCA3LCA2LCAxLCAKKyAgICAyNDIsIDY3LCAxNTIsIDM3LCA3LCA2LCAxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIDE1MiwgMzcsIDcsIDYsIAorICAgIDEsIDIzNSwgMjksIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTk0LCAxNTIsIDM3LCA3LCA2LCAKKyAgICAxLCAyMzAsIDMwLCAxNTIsIDM3LCA3LCA2LCAxLCA3OCwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgMzcsIDcsIAorICAgIDYsIDEsIDIyNCwgOTksIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMTUyLCAzNywgCisgICAgNywgNiwgMSwgMjE3LCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIDY5LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNjAsIDIzMSwgMTAyLCA1MCwgMjIzLCAxNjAsIDIzMSwgCisgICAgOTksIDUwLCAxNTIsIDkyLCA3LCA2LCAxLCA2MSwgMTUyLCA5MiwgNywgNiwgMSwgMjUzLCAxNjYsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDI1MSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDI0OSwgNjgsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCAKKyAgICA2LCAxLCAyNDUsIDE0LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDMsIDIwOSwgMTUyLCA5MiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgMTUwLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIAorICAgIDI5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE5NCwgMTUyLCA5MiwgNywgNiwgMSwgMjMwLCAKKyAgICAzMCwgMTUyLCA5MiwgNywgNiwgMSwgNzgsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjQsIDk5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDIyMiwgOTMsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDIxNywgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCA2OSwgMTUyLCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIDE1MiwgOTIsIAorICAgIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDI0OSwgMTM2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCAKKyAgICA5MiwgMjQwLCAxMjAsIDE1MiwgOTIsIDE5MSwgMTUyLCA5MiwgMjA2LCAxNTIsIDkyLCAyNTUsIDM0LCAxNTIsIDkyLCAyMTIsIAorICAgIDIzLCA0MiwgMjQ3LCAxNzIsIDkyLCAyNTAsIDMxLCA5MiwgMjQ5LCAxNzgsIDkyLCAyNDQsIDQsIDkyLCAyNDAsIDExMiwgCisgICAgOTIsIDIyOSwgOTEsIDkyLCAyMjksIDg0LCA5MiwgMjI2LCAyMTgsIDkyLCAyMTksIDM3LCA5MiwgMTIwLCAyLCAyNDUsIDM5LCAKKyAgICA3OSwgOTIsIDIxMywgMTE5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA2MSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgCisgICAgMSwgMjUzLCAxNjYsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDI1MSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIAorICAgIDEsIDI0OSwgNjgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc2LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAKKyAgICAyNDUsIDE0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyNDMsIDIwOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgCisgICAgMjQyLCA2NywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzNSwgCisgICAgMTUwLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzUsIDI5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTYsIAorICAgIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE5NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjMwLCAzMCwgMjIzLCAKKyAgICAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIyNiwgMTA5LCAyMjMsIDEwNiwgCisgICAgMjM1LCAyNDYsIDE2LCAxLCAyMjQsIDk5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTMsIDIyMywgMTA2LCAyMzUsIAorICAgIDI0NiwgMTYsIDEsIDIyMiwgOTMsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxNywgMTUzLCAyMjMsIDEwNiwgMjM1LCAKKyAgICAyNDYsIDE2LCAxLCA2OSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjE0LCAxMDUsIDIyMywgMTA2LCAyMzUsIDI0NiwgCisgICAgMTYsIDEsIDIxMiwgOTgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxMSwgMTc4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIAorICAgIDE2LCAxLCAyMTEsIDExNywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjEwLCAxNTksIDQyLCAxNDEsIDI0MSwgNzAsIAorICAgIDkyLCA1NiwgMjM0LCAyNCwgOTIsIDU2LCAyMDYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTcsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA1NiwgMjQ4LCA5OCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNSwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA0OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MSwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICAzNiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMiwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA1OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA1NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzOCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNywgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NywgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA0OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NSwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAKKyAgICAyMzgsIDQ2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzgsIDIxNiwgNywgMjIwLCAKKyAgICA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDYwLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNDMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIAorICAgIDIxNCwgMTc3LCAyMzgsIDM5LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzAsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1MiwgMzcsIDE1NCwgMjU0LCAyNTQsIDM3LCAxNTQsIAorICAgIDI1NSwgMjEsIDI0OSwgNzksIDI0NCwgNTAsIDI1MCwgOCwgMjE0LCAxOTQsIDIyOCwgMjE4LCAyLCAyMTgsIDE1NSwgMjE4LCAKKyAgICAzNCwgMTE1LCAyMzAsIDExOSwgMjE4LCAzMywgMjUwLCAzNCwgMjUzLCAyMTUsIDI0NiwgNjIsIDIxOCwgMzIsIDExNSwgCisgICAgMjUxLCAxMjYsIDIyMywgMTYxLCAyNTEsIDE0OCwgMjUzLCAyMTUsIDIyOCwgMjE3LCAyMTIsIDQxLCAyMTIsIDM1LCAyMTMsIAorICAgIDEzMSwgMjMwLCAyMDAsIDIxMiwgMjUsIDI0NSwgMjMyLCAyNDIsIDE4OCwgMjQ1LCA1MywgMjQ1LCAyMzIsIDI0MiwgMTg4LCAKKyAgICAyNTQsIDEzNiwgMjQ1LCAyMzIsIDI0MiwgMTg4LCAyNTMsIDIzMywgMjQyLCAxODgsIDIsIDIzMSwgNTYsIDE2NiwgMjMwLCAKKyAgICAxMzQsIDg3LCAyMTIsIDI3LCAyNDksIDE0NSwgMjMwLCAxMzQsIDg3LCAyNDQsIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzQsIAorICAgIDg3LCAyMTIsIDI3LCAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyNDMsIDIzNiwgMjMwLCAxMzQsIDg3LCAyMTIsIDUyLCAKKyAgICAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzNCwgODcsIDIxMiwgNTIsIDI0OSwgCisgICAgMTQ1LCAyMzAsIDEzNCwgODcsIDI0OSwgMTQ1LCAyMzAsIDEzMywgMTY2LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDI0NCwgCisgICAgMTAwLCAyMjQsIDI1LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTM0LCAyLCAyNDQsIAorICAgIDE5OCwgMjQzLCAyMzYsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjE4LCAzOSwgMiwgMjQ0LCAxOTgsIDI0MiwgMTg2LCAKKyAgICAyMTgsIDE1OCwgMjIwLCAxLCAyMTgsIDE1OCwgMjUwLCAxMjQsIDIyMSwgMTcwLCAyNDUsIDQ3LCAyMTUsIDIzNiwgMjQ4LCAKKyAgICA5MiwgMjE1LCAyMzYsIDIyNiwgNjMsIDIxNSwgMjM2LCAyNTEsIDM1LCAyMTUsIDExMCwgMjUwLCAxMjYsIDI1MSwgMjE4LCAKKyAgICAyMjIsIDE5MywgMjQxLCAxODYsIDIxOCwgMzcsIDI1MSwgMjE4LCAyNDUsIDIzNiwgNjQsIDIzMSwgMTk5LCAyNDUsIDIzNiwgCisgICAgNjQsIDIyMywgMzQsIDI0MSwgMjExLCAyNDQsIDE5LCAyMzMsIDYwLCAyNDksIDI1NCwgMjMxLCAxNzUsIDIzMywgNTksIAorICAgIDI0NCwgMTg0LCAyMzMsIDU5LCAyMzMsIDYwLCAyNDQsIDU1LCAyMzYsIDcsIDIxMSwgMjM5LCAyMzAsIDYzLCAyMTYsIDM1LCAKKyAgICAyNTMsIDE5OSwgMjQyLCAxNTAsIDIzMSwgNzIsIDIxMiwgMzksIDIxNywgNTgsIDIzMywgMzIsIDI1MiwgMTU3LCAyMjUsIAorICAgIDY1LCAyMjMsIDExNCwgMjU0LCA2MiwgMjQyLCAxMzQsIDI1NCwgNjIsIDIyNSwgMjIwLCAyMjUsIDIyMSwgMjUwLCAxMjcsIAorICAgIDIxOCwgMTE2LCAyNDIsIDMwLCAyMTksIDkyLCA2NCwgMjI1LCA0NywgMjMxLCA5MiwgMjI2LCAyMDEsIDI1MSwgMjAyLCAKKyAgICAyMjQsIDIzMiwgMjMzLCA0MiwgMjIzLCAzNSwgMjQ5LCAxNTAsIDIyMywgMzUsIDI1MiwgMTY3LCAyNDksIDE4MSwgMjIzLCAKKyAgICAzNCwgMjQ5LCAxMDMsIDIyLCAyMjMsIDM0LCAyMTgsIDE0MywgMjUxLCAxNzUsIDIxOSwgMTYsIDI1MSwgMTU5LCAyNDQsIDMsIAorICAgIDI0MywgMjU1LCAyMjIsIDIwOSwgMjE3LCAyNDcsIDIyNCwgMjM0LCAyNDgsIDE4MywgMjI2LCAyNDAsIDIxOCwgOCwgMjQ0LCAKKyAgICAwLCAyMTksIDIzMiwgMjQ0LCA5OSwgMjUxLCAyOSwgMiwgMjE3LCAyNDAsIDI0OCwgNDMsIDIxOSwgNTQsIDI0MCwgMTE5LCAKKyAgICAyNDksIDE0OSwgMjIwLCA3MiwgMjQwLCAxMTgsIDI0MCwgMTE5LCAyNDksIDE0OSwgMjQ2LCAxMTYsIDI0OSwgMTgwLCAyNTAsIAorICAgIDkyLCAxMzAsIDI1MSwgNiwgMjMyLCAxNDcsIDI0OSwgOTYsIDI0MSwgNjIsIDIyNCwgMjM2LCAyMTksIDI0MiwgMjUyLCA0NCwgCisgICAgMjUxLCAxNzEsIDIyNCwgMjM3LCA2NCwgMjQ0LCA0MSwgMjQ5LCAxNzksIDI0NCwgMzIsIDIyLCAyMzQsIDM4LCAyMTcsIDIwLCAKKyAgICAyMTEsIDIzMCwgMjQyLCAyMCwgMjIyLCAxNCwgMjUxLCAxODUsIDIyLCAyNDksIDExMCwgMjExLCAyMzcsIDI0MiwgMTkxLCAKKyAgICAyNDksIDI0MywgMjQyLCAxOTEsIDIxNSwgMTk0LCAyNDYsIDk4LCAyNTIsIDcwLCAyMzAsIDk4LCAyNTAsIDE1LCAyNTIsIAorICAgIDcwLCAyMzAsIDk3LCAyNTIsIDE5NSwgMjUxLCAxODQsIDIyMywgMzYsIDIxMSwgMjAxLCAyMjQsIDE5OCwgMjUxLCAyNDMsIAorICAgIDI1MSwgMjgsIDIzNSwgMTQ0LCAyNTAsIDg1LCAyMTUsIDIzNiwgMjQ0LCAxNzAsIDI1MCwgODQsIDI0NCwgMTAyLCAyNDQsIAorICAgIDEwMywgMjE5LCAxNCwgMjUyLCAxNjYsIDIyNSwgMjU0LCAyMjQsIDI0NywgMjQ5LCAyMTIsIDI1MiwgMTY3LCAyMTcsIDYwLCAKKyAgICAyMTUsIDIzNiwgMjQ5LCAxMzYsIDI0NCwgNzUsIDIyNSwgNjYsIDI0OCwgODksIDIzNSwgMTM3LCAyNDcsIDEzOSwgMjUwLCAKKyAgICAyNDAsIDIxOCwgMTE1LCAyMTEsIDI0MCwgMjUwLCAxMDYsIDIzMCwgMTM0LCAyMTMsIDE2NCwgMjUwLCAxNzAsIDIyMSwgCisgICAgMjAxLCAyMjEsIDIyNiwgMjQyLCAxNTUsIDI1MSwgMywgMjUwLCAyNDEsIDI0MCwgMjUyLCAyNDQsIDEzOCwgMjEyLCAwLCAKKyAgICAyMjIsIDIwMiwgMjQ5LCAyNDQsIDI0NCwgOTQsIDIyNSwgNSwgMjIsIDI0NCwgOTgsIDIzMCwgMjMyLCAyMzAsIDExMywgCisgICAgMjUxLCAxOCwgMjUwLCA0NywgMjQxLCAyMzksIDI1MywgMjQ5LCAyMjYsIDY2LCAyMTYsIDE1LCAyNDIsIDIsIDI1MCwgMzcsIAorICAgIDIxNiwgMjQzLCAyMTYsIDExNCwgMjUwLCAyOCwgMjUxLCAyMTAsIDIyNSwgMTgwLCAyNTMsIDI0OCwgMjEzLCAxNzIsIDI0MywgCisgICAgMTE3LCAyNDcsIDIwNSwgMjQxLCAxNjMsIDIxOSwgODYsIDIzMSwgMjM5LCAyNTEsIDI1MywgMjQzLCAxMTgsIDI0NywgMjQ4LCAKKyAgICAyNTEsIDE3NCwgMjQ0LCA2MCwgMjI1LCAzNiwgMjUwLCAyNDksIDI4LCAyMjgsIDUyLCAyMzAsIDkwLCAyOCwgMjI4LCA0NywgCisgICAgMjIxLCAyMTQsIDI0MiwgMTA2LCAyOCwgMjM0LCAxNDMsIDIxNSwgMTkxLCAyMTMsIDE1NCwgMjgsIDIyMSwgMTk0LCAyMjIsIAorICAgIDEyNiwgMjIwLCAxMywgMiwgMjIxLCAyMjksIDIxNiwgMjQ1LCAyMjMsIDE4MSwgMjIsIDI1MiwgMTY3LCAyMTksIDEwNywgCisgICAgMjIsIDIxOSwgMTA3LCAyNTEsIDE5NSwgMjUyLCAxMzEsIDIyLCAyNDEsIDU2LCAyNTAsIDEyOCwgMjQ0LCA4MSwgMjE5LCAKKyAgICA2NSwgMjIyLCAxMjcsIDIxOCwgMTMsIDIxNSwgMTk1LCAyNDAsIDI1MywgMjIzLCAxODIsIDI1NCwgMTM3LCAyNDQsIDM5LCAKKyAgICAyMjIsIDEzOCwgMjQ0LCAzOSwgMjE3LCAyNDIsIDI0MCwgMjQyLCAyNTEsIDEyNywgMjQwLCAyNDIsIDIsIDI0MywgMTAxLCAKKyAgICAyMjYsIDIzMywgMjUxLCAxMjcsIDIzNSwgMTM3LCAyMjQsIDI0MiwgMjI2LCAyMzIsIDI0NSwgNTIsIDIyNCwgMjQyLCAyMjYsIAorICAgIDIzMiwgMjQwLCAyNTEsIDI1MiwgMTUzLCAyNTMsIDE4OSwgMjE2LCAyNTMsIDIzMSwgMjM5LCAyNDAsIDI0NywgMjMyLCAKKyAgICAxMTcsIDI0MCwgMjQ3LCAyNDksIDE4NCwgMjE4LCAxMjcsIDIyMSwgMjAwLCAyNDgsIDUxLCAyMTgsIDEyNywgMjQ0LCAxODgsIAorICAgIDIzNSwgMTU1LCAyMzMsIDk1LCAyMzUsIDEzNywgMjUwLCAyMzQsIDI0NSwgNTIsIDI1MCwgMjM0LCAyMjMsIDE0NCwgMjMwLCAKKyAgICAxMTcsIDIyNiwgMTE4LCAyMTIsIDQxLCAyNTEsIDEzMSwgMjQ5LCAxNTMsIDIxNiwgMTA3LCAyMzMsIDI0LCAyMjMsIDE4MywgCisgICAgMjUwLCAyMzIsIDI0NiwgMTA0LCAyNDksIDE0MywgMjEyLCAzLCAyMTksIDcyLCAyMTksIDcwLCAyNDAsIDI1MiwgMjIzLCAKKyAgICAxNTYsIDI0MiwgMTc3LCAyMjAsIDU5LCAyMzAsIDE1MCwgMjIyLCAxOTYsIDI1MCwgMTE2LCAyNDcsIDE0NCwgMjI1LCA3NiwgCisgICAgMjUxLCAyMTEsIDI0NSwgMTc3LCAyMjYsIDI0MiwgMjE4LCAyNTQsIDIyMCwgNTQsIDI1MSwgMTMwLCAyNTQsIDEwMCwgMjQxLCAKKyAgICA2MSwgMjMzLCAxMjcsIDI1MiwgNjgsIDI0NCwgOTgsIDIxNSwgMTk0LCAyNDQsIDk4LCAyNTEsIDIxNywgMjE1LCA5MSwgCisgICAgMjQyLCAwLCAyNTAsIDExNywgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNDMsIDI1MCwgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNTEsIAorICAgIDI0NSwgMjI1LCAxOTgsIDIzNCwgMzIsIDIyNCwgMjUxLCAyNDYsIDk1LCAyNTEsIDE5LCAyNTIsIDE4NSwgMjUxLCAxOSwgCisgICAgMjQ3LCAxMzgsIDIzMCwgMTE4LCAyNDQsIDE5OCwgMjQ5LCAxNTQsIDI0NCwgMTk4LCAyMTYsIDEwOCwgMjQ0LCAxOTgsIAorICAgIDIyMywgMTg0LCAyNDQsIDE5OCwgMjUwLCAyMzMsIDI0NCwgMTk4LCAyNDYsIDEwNSwgMjQ0LCAxOTgsIDIxOCwgMjQzLCAKKyAgICAyMTIsIDMsIDI0MCwgMjUzLCAyNDQsIDE5OCwgMjMwLCAxNTEsIDI0NCwgMTk4LCAyNDcsIDE0NSwgMjQ0LCAxOTgsIDIyNSwgCisgICAgNzcsIDI0NCwgMTk4LCAyNDMsIDI1MywgMjQ0LCAxOTgsIDI0MiwgMjcsIDI0NCwgMTk4LCAyMTEsIDIyNCwgMjQ0LCAxOTgsIAorICAgIDI1MiwgNzksIDI0NCwgMTk4LCAyMjYsIDQ5LCAyNDQsIDE5OCwgMjI1LCA3NywgMjI4LCA1OCwgMjI1LCAyMzYsIDIyNCwgCisgICAgMTg5LCAyNDUsIDIxLCAyNDUsIDIzNSwgMjI4LCA1OCwgMjMwLCAxMTUsIDIxNiwgMjAsIDcxLCAxMjAsIDIyNSwgMTAsIAorICAgIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDEyNCwgMjI1LCAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgNDMsIDIyNSwgCisgICAgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDQ0LCAyMjUsIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDI0NCwgOTIsIAorICAgIDI0MiwgMjMsIDUwLCAyMTIsIDMzLCAyNDIsIDIzLCA1MCwgMjI2LCAyMTksIDI0MiwgMjMsIDUwLCAyMTYsIDEzNiwgMTIwLCAKKyAgICA1MCwgMjE2LCAxMzYsIDEyNCwgNTAsIDI1MCwgMjcsIDI0MiwgMTgsIDUwLCAyMDQsIDI0MiwgMTgsIDUwLCAyNDksIDEzMSwgCisgICAgMjExLCAyMjAsIDI0MiwgMiwgMjQ1LCAyMiwgMjI5LCAxMDksIDIxNywgMTUyLCAyMzUsIDEzMSwgMjQ2LCAxMDAsIDIzNCwgCisgICAgODgsIDI1MSwgMjU1LCAyMTEsIDIyMCwgMjUwLCAxLCAyMjQsIDEzMCwgMjQyLCAyMSwgMjI0LCAyMzMsIDIzMSwgMTgyLCAKKyAgICAyMjAsIDYsIDI1MywgMjExLCAyMjAsIDYsIDI0MSwgMTcxLCAyMjAsIDYsIDIxMSwgMjIwLCAyMjEsIDI0MiwgMjExLCAyMjAsIAorICAgIDI1MSwgMTk0LCAyNDQsIDM3LCAyNTEsIDk4LCAyMzYsIDcsIDIxOSwgMTcxLCAyNTEsIDk3LCAyMzYsIDcsIDIxOSwgMTcxLCAKKyAgICAyNTEsIDE3MCwgMjQyLCAyMDEsIDIzMSwgMTkwLCAyMTEsIDIyMSwgMjQ0LCAxODIsIDIzMSwgMTkxLCAyMiwgMjExLCAyMjIsIAorICAgIDI0MSwgNjcsIDI0MiwgMTcsIDExMywgMjMxLCA2NCwgMjQxLCA2NywgMjQyLCAxNywgMTEzLCAyMTEsIDIxOSwgMjQxLCA2NywgCisgICAgMjQyLCAxNywgMjI1LCAyLCAyMjYsIDIzMSwgMjExLCAyMjIsIDIsIDI1MSwgMTE0LCAyNDUsIDIzMywgMjUxLCAxNDksIDIsIAorICAgIDIxMywgMjQ2LCAyMjUsIDE3MSwgMiwgMjUxLCAyMjAsIDI0MiwgNDEsIDIzMSwgMTkxLCAyLCAyNDIsIDExNywgMjI1LCAKKyAgICAxMTIsIDIzMSwgMTc5LCAyMzEsIDE5MSwgMiwgMjE1LCA5OCwgMjI2LCAyMTIsIDIzMSwgMTkwLCAyMjYsIDIxMiwgMjExLCAKKyAgICAyMjEsIDI1MiwgMTk0LCAyNDksIDE5OCwgMjExLCAyMDUsIDIyNCwgMTkyLCAyMzUsIDEzNywgMjI2LCAyMjcsIDIzNSwgCisgICAgMTM3LCAyNDIsIDE3NiwgMjQyLCAyMjksIDI1MiwgMTk1LCAyNTQsIDEyMSwgMjQ1LCAyNiwgMjU0LCAxNjksIDI1NCwgMTcwLCAKKyAgICAyMzAsIDE0MSwgMjM2LCAxMiwgMjE5LCAxMDIsIDIzNSwgMjM5LCAyNDgsIDQyLCAyMjUsIDE3MCwgMjQyLCAxMTIsIDI0OCwgCisgICAgMTg3LCAyMzIsIDIwNywgMjI5LCAyMTYsIDIyNSwgMSwgMjQ0LCAxOTksIDIzMSwgMTQ3LCAyNDIsIDQwLCAyNTIsIDE0NiwgCisgICAgMjI1LCA0LCAyMTcsIDE3MiwgMjI1LCA2OSwgMjM0LCA3MCwgNzksIDIzMiwgMTE3LCAyMzMsIDE2LCAyMjIsIDIzNiwgMjQzLCAKKyAgICA2MSwgMjE4LCAxMzMsIDIzNCwgNjksIDI1MSwgMTc5LCAyNDksIDE1NiwgMiwgMjQxLCAyMzQsIDIxMiwgMTksIDI1MiwgNzcsIAorICAgIDI0MSwgMjM0LCAyNTEsIDE0MywgMjQxLCAyMzQsIDExMywgMjQxLCAyMzIsIDIxOSwgMTIsIDI0MSwgMjM0LCAyNDIsIDEyNywgCisgICAgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCA3NSwgMjUxLCAyMTYsIDI0MSwgMjM0LCAyNDIsIDEzNCwgMjQxLCAyMzQsIDIxMSwgCisgICAgNDIsIDI0MSwgMjM0LCAyMjQsIDEzMSwgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCAyMjMsIDM2LCAyMjMsIDQ3LCAyNDEsIAorICAgIDIzMiwgMjQxLCAyMzUsIDI0OCwgODksIDI0OCwgMSwgMjIwLCA4NCwgMiwgMTE2LCA1OSwgMjM1LCAyMjIsIDI0NSwgMTgwLCAKKyAgICAxOTMsIDI1MSwgMTI0LCAyNTQsIDEyMCwgODcsIDI1MSwgMjAzLCAyMTksIDk0LCA4NywgMjQ5LCAyMzYsIDg3LCAyMTgsIAorICAgIDI0OCwgMjE3LCAyNDksIDg3LCAyNDYsIDkzLCAyNDgsIDE2NSwgODcsIDIyNSwgNzAsIDY0LCAyMjQsIDI1MiwgMjQ0LCA2OSwgCisgICAgMjUyLCAxMSwgMjQ3LCAxNzMsIDg3LCAyMTksIDUsIDI1MiwgMTY2LCAyMTYsIDE1MCwgMjUyLCAxNjYsIDcxLCAyNDQsIDU5LCAKKyAgICAyNDAsIDIxOCwgMjI1LCA4LCA4NywgMjMwLCAxNTQsIDI1MiwgMTgwLCAyNDksIDEwNiwgMjQ1LCA0MCwgMTE0LCAyNDcsIAorICAgIDE0MCwgNTAsIDI0OSwgMTQ3LCAyNTAsIDI1MCwgMjUyLCAxNTIsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ3LCAKKyAgICAxNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ1LCA1NSwgNTAsIDI1MiwgMTUyLCAyLCAyMjQsIDIzMSwgNTAsIDIzMCwgMTU0LCAKKyAgICAyLCAyMTEsIDIzNSwgMjUwLCAxNDYsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMiwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIDE4MCwgCisgICAgMjI1LCAxNjksIDI0OSwgMjE2LCAyNTEsIDE0NywgMjMwLCAxOTEsIDI0NCwgNjQsIDI0NywgMTkzLCAyMjYsIDE2NSwgMjQ3LCAKKyAgICAxOTgsIDI0NiwgNTcsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMDQsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMjYsIDgwLCAyLCAyNDksIAorICAgIDEwOCwgMjI2LCA4MCwgMjQ0LCAxOTEsIDIxNCwgMTYzLCAyNTEsIDI0LCAyMTcsIDE5LCAyNTEsIDI0LCAyNTAsIDI1MSwgCisgICAgMjM1LCAyNDksIDI1MCwgMTQ2LCAyLCAyMTQsIDE1MywgMjE1LCAyMzEsIDI1MCwgMTQ2LCAyLCAyNDYsIDExMiwgMjE1LCAKKyAgICAyMzEsIDI1MiwgMTQ5LCAyNTAsIDE0NSwgMjUwLCAxNCwgMjI0LCAxMjYsIDIyMiwgMTg3LCAyMjQsIDEyNiwgMjI2LCAyMywgCisgICAgMjE4LCAxMjMsIDIyMiwgMTMzLCAyMTUsIDIyMywgMjIyLCAxMzMsIDI1MSwgMTk5LCAyMTcsIDkyLCAyMzMsIDU3LCAyMjgsIAorICAgIDUwLCAyMjgsIDUxLCAyLCAyNDgsIDg4LCAyNDksIDE1NSwgMjUwLCA4LCAyNTEsIDIwMCwgMjA0LCAyNTEsIDIwMCwgMjQyLCAKKyAgICAxMzQsIDI1MSwgMjAwLCAyNTEsIDIxNiwgMjUxLCAyMDAsIDIyNiwgMTYxLCAyNTEsIDIwMCwgMjUxLCAxOTcsIDIyOSwgCisgICAgMjEwLCAyNTIsIDE4MywgMjIxLCAxODgsIDIzMSwgNjUsIDIxNywgMiwgMjIzLCAxMjYsIDIyNiwgNzgsIDI0NCwgMTY3LCAKKyAgICAyMzEsIDIzOSwgMjIxLCAyMjUsIDI1NCwgOTcsIDIyNCwgMTQ4LCAyNTUsIDUsIDIzMiwgMTE5LCAyNTAsIDEzNSwgMjMxLCAKKyAgICA3NywgMjI2LCAxMzMsIDIxNSwgMjM5LCAyMzYsIDMsIDIxNSwgMjM5LCAyMjYsIDg2LCAyNDYsIDMyLCA4NywgMjM2LCAwLCAKKyAgICAyNDUsIDEyNywgMjQ1LCAxMjgsIDIsIDI0NiwgMTEyLCA4MCwgNDgsIDI1MCwgOCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAKKyAgICAyNDQsIDgxLCAyNTAsIDgsIDIzMSwgMjA1LCAyLCAyMjMsIDE2MCwgMjQ0LCA4MSwgMjA0LCAyMzEsIDIwNSwgMiwgMjIzLCAKKyAgICAxNjAsIDI0NCwgODEsIDIwNCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAyNDQsIDgxLCAyMjQsIDIzOSwgMjI0LCAyNDAsIAorICAgIDI0MCwgMjU1LCAyMjksIDg5LCAyMzAsIDE2NCwgMjI1LCAxMjAsIDIzMCwgMTY0LCAyMjUsIDEyMSwgMiwgOTcsIDgwLCAKKyAgICAyNTMsIDIxNSwgMjMzLCA1MiwgMjEzLCAxNzUsIDIzMCwgMTYzLCAyMzAsIDE2NCwgMjI1LCAxMjEsIDIyNiwgMjM0LCAyMjgsIAorICAgIDgwLCAyMzAsIDE2NCwgMjI1LCAxMTksIDI1NCwgOTgsIDIsIDI1MiwgMTM3LCAyNTEsIDE4LCAyMTMsIDE3MiwgMjUxLCAxOCwgCisgICAgMjE2LCAyNTUsIDIyMywgMTc2LCAyMTMsIDE3MSwgMjE1LCA2MCwgOTcsIDI1MywgMjU1LCAyNTAsIDEwLCA5NywgMjIsIAorICAgIDE0MCwgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMjUwLCAxMCwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCA0NCwgMjU0LCAwLCAKKyAgICAyLCAzNywgMTIzLCAyMjYsIDEyNCwgMjUwLCAxMCwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIAorICAgIDI1NSwgMjU0LCA5NiwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMTIxLCAyNTEsIAorICAgIDE0NiwgODcsIDEyNSwgMjUxLCAxNDYsIDg3LCAyMTksIDksIDIsIDI1MSwgMTIsIDkxLCAyMTksIDgsIDIxOSwgOSwgMiwgCisgICAgMTIzLCAyMTksIDMzLCAyMTIsIDM1LCAyMTksIDksIDIsIDEzNCwgMjE5LCAzMywgMjEyLCAzNCwgMjUyLCAxMjMsIDI0NSwgCisgICAgMTgwLCAyMjUsIDMwLCAyMzMsIDQ4LCAyMzEsIDIxNiwgMjQyLCAxOTEsIDIyMiwgMjUwLCAyMzEsIDIxNiwgMjQyLCAxOTEsIAorICAgIDIzMiwgMTU4LCAyLCAyMzUsIDIzMiwgMjI1LCAyMDIsIDI1MCwgOCwgMjMyLCAxNTgsIDIsIDIzNCwgMTQ0LCAyMzQsIDE0NCwgCisgICAgMjMyLCAxNTcsIDIwNCwgMjMyLCAxNTcsIDI1MiwgNTIsIDI1MiwgNTMsIDIsIDI1MSwgMTIsIDkxLCAyNTEsIDE5OCwgMjMyLCAKKyAgICAyMTAsIDg3LCAyMjMsIDE3NywgMjUxLCA5NCwgMjUyLCAxOTMsIDIsIDE0MCwgODAsIDQ4LCAyNDUsIDE1MSwgMiwgMTQwLCAKKyAgICA4MCwgNDgsIDIyNiwgMjAxLCAyLCAyNDUsIDM5LCAxNjQsIDIsIDQzLCA0NCwgODAsIDQ4LCAyMTksIDQxLCAyLCA5NywgODAsIAorICAgIDQ4LCAyMTYsIDE1LCAyLCAyMTQsIDE1MywgODAsIDQ4LCAyMjgsIDgwLCAxMjMsIDIxNCwgMTg0LCAyNDUsIDE5OSwgODcsIAorICAgIDIzNCwgMTQyLCAyMTYsIDI0OCwgMjM1LCAyMjYsIDE2LCAzMSwgNywgNiwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgNywgCisgICAgNCwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgMjI3LCAyMDMsIDIzNSwgMjI2LCAxNiwgMzEsIDIxNywgMTg0LCAyMzUsIAorICAgIDIyNiwgMTYsIDMxLCA3LCAyMzMsIDE1LCAyNDQsIDEwNCwgMjQ1LCAxODAsIDIxNiwgMTAsIDIxMSwgMTk5LCAyNDIsIDI4LCAKKyAgICAyMjcsIDE4NiwgMjIsIDI1MSwgMjA1LCAyNDEsIDczLCAyMjUsIDUzLCAyMzAsIDIzMSwgMjE3LCAwLCAyNDksIDEyMiwgCisgICAgMjUyLCAxNjcsIDIxOSwgMTI3LCAyMjUsIDEyLCAyMTgsIDE1OSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCAyMzUsIDEzNywgCisgICAgMTYsIDMxLCAyNTIsIDY1LCAyMTUsIDIyMSwgMjQ1LCAxNjQsIDg1LCA0MiwgMjUxLCA5NCwgNzEsIDQyLCAyNTEsIDk0LCAKKyAgICAyMzMsIDkxLCAyMjMsIDExNCwgMjUwLCA0MywgMjMzLCA5MSwgMjUxLCAyMTYsIDI1MCwgNDMsIDIzMywgOTEsIDIyNiwgCisgICAgMTYxLCAyNDgsIDAsIDIzMywgOTEsIDI1MSwgMjE2LCAyNDgsIDAsIDQsIDIyNiwgMTYxLCAyNDgsIDAsIDQsIDI1MSwgMjE2LCAKKyAgICAyNDgsIDAsIDIxNCwgMTYyLCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCAyMjMsIDExNCwgMjE1LCAyMjYsIDIxNCwgCisgICAgMTYyLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDM3LCAyNDksIAorICAgIDEzOSwgMjI0LCAyNTUsIDI0OSwgMTM5LCAyMjUsIDAsIDIsIDI0MiwgMzMsIDUxLCAyNDksIDEzOSwgMjI0LCAyNTUsIDIyOCwgCisgICAgNTQsIDQzLCAyMjAsIDE1NSwgMiwgMTM0LCAyNDcsIDEyNiwgMjUwLCAxMiwgMjQ0LCAxOTksIDEyMywgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAxMTMsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMTM0LCAyMjYsIDI0NiwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDI0NCwgMTksIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ0LCA4OSwgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTksIDEyNywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjAsIDEyNCwgMjI2LCAKKyAgICAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIDIwMSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNSwgCisgICAgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDI0OSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIAorICAgIDE3NiwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc3LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDIyNiwgMTk2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA1NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMTQxLCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjQ0LCAxNSwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NCwgODcsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyMTksIDEyMywgMjUwLCAxMiwgMjQ0LCAxOTksIDIyMCwgMTIzLCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAyMDAsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNCwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMjQ3LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjQ1LCAxNzQsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc1LCAyMzAsIDEyMiwgMjQzLCAyMzcsIDIxNiwgMzcsIDIxNiwgCisgICAgMywgMjE4LCAxNTAsIDY0LCAyMzIsIDI0NSwgMjE5LCAxNzIsIDY0LCAyMzUsIDEzOCwgMjMwLCAxMTEsIDI0MiwgMTMxLCAKKyAgICAyNDQsIDE5OCwgMjQyLCAxMzEsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIDE5OSwgMiwgMjE3LCAxNSwgCisgICAgNjQsIDIzNSwgNTksIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjA0LCAyMzAsIDExNiwgMjIsIDIxOSwgNzYsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE2LCAKKyAgICAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNiwgMjIsIDIxNiwgCisgICAgMTA1LCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjQyLCAzMiwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDI0MCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjQ0LCAxOTgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIAorICAgIDE5OSwgMjIxLCAyMTksIDI0OCwgNzAsIDI0NCwgNDEsIDIyMywgOTEsIDI0NCwgMTk4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjQxLCAyMzMsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTgsIDM1LCAyMTksIDc1LCAyNDQsIDE5OCwgMjI5LCAKKyAgICA5MiwgMjQ0LCAxOTgsIDI0NSwgMzEsIDI0NCwgMTk4LCAyMTQsIDE4OCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyNDksIAorICAgIDIzOCwgMjE3LCAyNDgsIDIyNSwgMTk1LCAyNDQsIDE5OCwgMjQ5LCAyMDksIDI0NCwgMTk4LCAyNDksIDIxMCwgMjQ0LCAKKyAgICAxOTgsIDIzNCwgNjgsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMjE2LCAxMzgsIDExNiwgMjM0LCA2OSwgMjM0LCA2OCwgMjQ0LCAKKyAgICAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDIzNCwgNjgsIDI0NCwgMTk5LCAyLCAyNTAsIDgsIDI0NSwgMjEsIDI0NCwgCisgICAgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIwLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxMSwgMjMzLCAKKyAgICAyNDUsIDIzLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxNiwgMTA1LCAyNDUsIDIxLCAyNDcsIDIwMCwgCisgICAgMjQ0LCAxOTgsIDIxMSwgMjA0LCAyNDQsIDE5OCwgMjU0LCAxMTYsIDI0NCwgMTk4LCAyMjQsIDIzMCwgMjQ0LCAxOTgsIAorICAgIDI0OSwgMTI0LCAyNDQsIDE5OCwgMjI1LCAxNzMsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjMyLCAxMzIsIDY0LCAyMTUsIAorICAgIDIwNSwgMjQ3LCAyMDAsIDI1MSwgOTYsIDIyMywgOTEsIDI0NCwgMTk4LCAyNDMsIDI0NywgMjQ0LCAxOTksIDIsIDIwNCwgCisgICAgMjMwLCAxMTUsIDI1NCwgMTE0LCAyNDQsIDE5OCwgMjQ0LCAxNjAsIDI0NCwgMTk4LCAyMTIsIDIwLCAyNDQsIDE5OCwgMjE5LCAKKyAgICA5MywgMjQ0LCAxOTgsIDIxNiwgNzIsIDI0NCwgMTk4LCAyNDIsIDEzMiwgMjQ0LCAxOTgsIDIzMiwgMTIwLCAyNDksIDEyNCwgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyNDAsIDIxMCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAKKyAgICAyMDQsIDIzMCwgMTE2LCAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyNDQsIDE5OSwgMjIxLCAxOTIsIDIzNiwgNywgMjQ0LCAKKyAgICAxNjEsIDI1MywgMjIxLCAyNDQsIDE5OCwgMjQ0LCA1NywgMjQ0LCAxOTgsIDIxOSwgOTQsIDI0NCwgMTk4LCAyNDcsIDE3MywgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyMTEsIDIzMCwgMjMwLCAxMTUsIDI0NCwgMTk5LCAyLCAyMzEsIDg5LCAyMzEsIDE0OSwgCisgICAgMjQyLCAxMzEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAKKyAgICAyMTcsIDE1LCA2NCwgMjM1LCA1OSwgMjE5LCA3NiwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIAorICAgIDc2LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI0MSwgMjMzLCAyNDUsIDIxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIxMSwgCisgICAgMTk2LCAyMTksIDc3LCAyMzQsIDY4LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI1MCwgOCwgMjQ1LCAyMSwgMjI0LCAyMzAsIAorICAgIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjQ5LCAxMjQsIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjEyLCAyMCwgMjUwLCAyMzMsIDI0NCwgCisgICAgMTk4LCAyNDQsIDE5OSwgMiwgMjI4LCA4MCwgMjQyLCAxNzAsIDI0MywgNDEsIDI0NCwgMTk5LCAyLCAyMjYsIDIxOSwgMjQzLCAKKyAgICA0MSwgMjI1LCAxNzEsIDI1MSwgMTc2LCAyNDgsIDgzLCAyMjEsIDE3MSwgMjMwLCAxNTAsIDI0MSwgMjM2LCAyMzAsIDE1MCwgCisgICAgMjE5LCAxMCwgMjMwLCAxNTAsIDI0MiwgMTIsIDIyNSwgMTcxLCAyMjMsIDE1OSwgMTIzLCAyNDIsIDIyLCAyMjUsIDE3MSwgCisgICAgMjIzLCAxNTksIDI1MSwgMTg2LCAyNDIsIDE4LCAyMzYsIDcsIDI1MCwgMTg3LCAyMjUsIDE3MSwgMjQzLCAyNDYsIDIyNSwgCisgICAgMTcxLCAyLCAyMjQsIDIzMCwgMjQ0LCAxOTgsIDIyNSwgMTcxLCAyLCAyNDQsIDQ5LCAyNDIsIDE3LCAyMjIsIDIwNSwgMjQxLCAKKyAgICAyMjEsIDIxOCwgMTQ1LCAyMzIsIDE1NSwgMjIzLCAxNjUsIDI1MCwgMjUyLCAyNDEsIDE2OSwgMjE1LCAyNDksIDI0MSwgCisgICAgMTY5LCAyMTUsIDI1MCwgMiwgMjUxLCAxMjIsIDIyOCwgNTgsIDIxNSwgMjQ5LCAyMzEsIDM3LCAxOTMsIDIyMywgMTY2LCAKKyAgICAyMTgsIDE1MSwgMjE1LCAyNDcsIDIxNSwgMjQ4LCAyNTAsIDI1MiwgMjUxLCAxMDAsIDIyNiwgMTk4LCAyNTEsIDEwMCwgCisgICAgMjE1LCAyMDIsIDI1MSwgMTAxLCAyMTgsIDEzMSwgMjMwLCAxOTIsIDI1NCwgMTM4LCAyNDQsIDEwNSwgMjQ1LCAxNDUsIAorICAgIDIyNSwgMiwgMjUwLCAyNTIsIDIyNiwgMTk4LCAyMjUsIDIsIDI1MCwgMjUyLCAyMTcsIDMzLCAyMjYsIDE5OCwgMjE3LCAzMywgCisgICAgMjUzLCAxODgsIDIyNiwgMTk4LCAyNTMsIDE4OCwgMjIzLCAxMjEsIDIxMywgMjQ3LCAyNDgsIDY2LCAyMTUsIDE5MywgMjUzLCAKKyAgICAyNTAsIDIzMiwgMTIzLCAyMTUsIDI1NSwgMjMwLCAxNDQsIDIzMCwgMTIxLCAyMjMsIDE2NCwgMjE4LCA3LCAyMjMsIDE2NCwgCisgICAgMjMwLCAxMjEsIDI1MSwgMzYsIDI1NCwgMjM4LCAyMTUsIDI0NiwgMjIwLCAxOCwgMjIyLCAxODQsIDIxOSwgMywgMjAzLCAKKyAgICAyMTUsIDI1MywgMjMyLCAyMzYsIDY3LCAyMTUsIDI1MywgMjMyLCAyMzYsIDI0OSwgMTk4LCA1MCwgMjI1LCAyLCAyNTAsIAorICAgIDIzNywgMjIzLCA0NywgMjMyLCAyMzYsIDIxNSwgMjIzLCAyNDQsIDgyLCAyMjYsIDIwMSwgMjI0LCAyNDEsIDI0NywgMTMxLCAKKyAgICAyMjgsIDgwLCAyNDUsIDEzMywgNTAsIDIxOSwgNzQsIDg3LCAyMjgsIDgwLCAyMTksIDc0LCA4NywgMjI0LCAxMjUsIDIzMiwgCisgICAgMTk5LCAyMzYsIDcsIDIzNSwgMTYzLCAyMjUsIDQ0LCA4NywgMjQ3LCAxNTQsIDIyOCwgNTcsIDIzMiwgMTk5LCA4NywgMjI0LCAKKyAgICAyMzUsIDIxMiwgNDEsIDg3LCAyMjgsIDcxLCAyMTIsIDQxLCA4NywgMjUyLCAxMCwgMjI4LCA4MCwgMjUyLCA5LCAyNTIsIDgsIAorICAgIDIzMCwgMTIxLCAyNTIsIDgsIDIyNSwgMjE2LCAyMjgsIDgwLCAyMjUsIDIxNSwgMjUwLCAxMDgsIDI0OSwgMTMyLCAyMzEsIAorICAgIDYxLCA4NywgMjExLCAyMTgsIDg3LCAyMjMsIDYyLCAyNTIsIDE5NSwgODcsIDIxNiwgMzgsIDIxMiwgNDEsIDI1MCwgNSwgCisgICAgMjE5LCAyMzYsIDI1MiwgMTI2LCAyNTIsIDEyNCwgMjI1LCAyNDYsIDI0OSwgMTg1LCAyNDksIDk0LCAyNTIsIDE3NywgMjUwLCAKKyAgICAzMCwgNDMsIDIzMiwgOTUsIDEwOCwgMTYsIDMxLCAyMjQsIDYsIDEwOCwgMTYsIDMxLCAyNTQsIDIwMSwgMTA4LCAxNiwgMzEsIAorICAgIDI0NCwgMTA0LCAxMDgsIDE2LCAzMSwgMjQ1LCAyMzEsIDEwOCwgMTYsIDMxLCAyMTIsIDQwLCAxMDgsIDE2LCAzMSwgMjU0LCAKKyAgICA1MSwgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIyMywgMTA4LCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjIzLCAxMDcsIDEwOCwgCisgICAgMTYsIDMxLCAyNTQsIDUyLCAyMTMsIDE0MywgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIxMywgMTQyLCAxMDgsIDE2LCAzMSwgCiAgICAgMjEzLCAxNTcsIDEwOCwgMTYsIDMxLCAyMTMsIDE1NiwgMTA4LCAxNiwgMzEsIDIxMywgMTU1LCAxMDgsIDE2LCAzMSwgMjE4LCAKLSAgICA0NCwgMTA4LCAxNiwgMzEsIDIyNSwgMTI1LCAyMTgsIDQ0LCAxMDgsIDE2LCAzMSwgODUsIDIxOCwgNDQsIDEwOCwgMTYsIAotICAgIDMxLCAyMzEsIDU1LCAyMTgsIDcxLCAxMDgsIDE2LCAzMSwgMjMxLCA1NSwgMjE4LCA3MCwgMTA4LCAxNiwgMzEsIDIzMSwgCi0gICAgNTUsIDIxOCwgNjksIDEwOCwgMTYsIDMxLCAyNTAsIDM4LCAxMDgsIDE2LCAzMSwgMjIyLCAxLCAxMDgsIDE2LCAzMSwgMjI4LCAKLSAgICAxODgsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MSwgMTA4LCAxNiwgMzEsIDIxMywgMTQwLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDQsIAotICAgIDIyMiwgMSwgMTA4LCAxNiwgMzEsIDIyMiwgMjA0LCAyMjIsIDAsIDEwOCwgMTYsIDMxLCAyNDIsIDE2NiwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOSwgMTY2LCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIAotICAgIDIyNiwgMTUyLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyMzUsIDE3NiwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgCi0gICAgMjM1LCAxNzYsIDEwOCwgMTYsIDMxLCAyNDksIDE2OCwgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NSwgMjI2LCAKLSAgICAxNTMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDI0OSwgCi0gICAgMTY3LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyNDksIDE2NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTY4LCAyNTQsIDgzLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjQ5LCAxNjgsIDI1NCwgODMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgCi0gICAgMjIyLCAyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyMTMsIDI0MywgMTA4LCAxNiwgMzEsIDIxNiwgODQsIDIyNiwgCi0gICAgMTUzLCAxMDgsIDE2LCAzMSwgMjMzLCA1NywgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyNTQsIDgyLCAyMjYsIDE1MywgMTA4LCAKLSAgICAxNiwgMzEsIDIxOCwgNzIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOCwgNzIsIDY0LCAyMjIsIDIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNTgsIDY0LCAyNTQsIDgxLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDAsIDEwOCwgMTYsIDMxLCAyMjMsIDk5LCAxMDgsIDE2LCAzMSwgMjIzLCA5OCwgMTA4LCAKLSAgICAxNiwgMzEsIDIyMywgOTcsIDEwOCwgMTYsIDMxLCAyNTQsIDE1NywgMTA4LCAxNiwgMzEsIDI1NCwgMTU2LCAxMDgsIDE2LCAKLSAgICAzMSwgMjMxLCAxNjMsIDEwOCwgMTYsIDMxLCAyMjIsIDcsIDEwOCwgMTYsIDMxLCAyNTMsIDI0NiwgMTA4LCAxNiwgMzEsIAotICAgIDIyMywgMTI1LCAxMDgsIDE2LCAzMSwgMjIzLCAxMjQsIDEwOCwgMTYsIDMxLCAyNTMsIDE4MywgMTA4LCAxNiwgMzEsIDI1MSwgCi0gICAgMjI5LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIxNywgNDksIDEwOCwgMTYsIDMxLCAyMTcsIDQ4LCAxMDgsIDE2LCAzMSwgCi0gICAgMjI0LCA4LCAyMzIsIDIyMiwgMTA4LCAxNiwgMzEsIDI1MSwgMTgzLCAxMDgsIDE2LCAzMSwgMjUxLCAxODIsIDEwOCwgMTYsIAotICAgIDMxLCAyNTEsIDE4MSwgMTA4LCAxNiwgMzEsIDI1NCwgMTM4LCAxMDgsIDE2LCAzMSwgMjI2LCAyMTgsIDEwOCwgMTYsIDMxLCAKLSAgICAyMTgsIDI0OCwgMTA4LCAxNiwgMzEsIDIxNiwgODIsIDEwOCwgMTYsIDMxLCAyNDIsIDk2LCAxMDgsIDE2LCAzMSwgMjEyLCAKLSAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI2LCAxMDgsIDE2LCAzMSwgMjUxLCAxNCwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAotICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI0NiwgMjMwLCAxMjIsIDEwOCwgMTYsIDMxLCAyMjEsIDIwMiwgNjQsIDIzNSwgNTUsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTEsIDI1LCAxMDgsIDE2LCAzMSwgMjE1LCAyMTksIDEwOCwgMTYsIDMxLCAyMTgsIDE1NCwgMjE1LCAyMTksIAotICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE0OCwgMTA4LCAxNiwgMzEsIDIxOSwgNTYsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI0MCwgMjQ2LCAyNDYsIDY0LCAxMDgsIDE2LCAzMSwgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNCwgCi0gICAgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyNTEsIDE0MiwgMTA4LCAxNiwgMzEsIDIyNCwgMjI1LCAyNTEsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI1NCwgMTM1LCAxMDgsIDE2LCAzMSwgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE2LCAxMDgsIDE2LCAzMSwgCi0gICAgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE1LCAxMDgsIDE2LCAzMSwgMjE4LCA2OCwgMTA4LCAxNiwgMzEsIDIyNCwgMjAwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODEsIDEwOCwgMTYsIDMxLCAyNDcsIDE4MywgMTA4LCAxNiwgMzEsIDI0NywgMTgyLCAxMDgsIAotICAgIDE2LCAzMSwgMjI0LCAxMzEsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTIyLCAxMDgsIDE2LCAKLSAgICAzMSwgMjQ5LCAxMjEsIDEwOCwgMTYsIDMxLCAyNDksIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTE5LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ5LCAxMTgsIDEwOCwgMTYsIDMxLCAyNTQsIDE2OSwgMTA4LCAxNiwgMzEsIDI1MiwgMTE5LCA2NCwgMjMxLCAxNDksIAotICAgIDEwOCwgMTYsIDMxLCAyNTIsIDExOSwgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDU3LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQwLCAyMzgsIDEwOCwgMTYsIDMxLCAyMjgsIDIxMiwgMTA4LCAxNiwgMzEsIDI0OCwgMTQ1LCAxMDgsIDE2LCAzMSwgMjMwLCAKLSAgICAxMzQsIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgOTQsIDEwOCwgMTYsIDMxLCAxNjMsIDIyNiwgMTMyLCA5LCAxNCwgMjQwLCAKLSAgICAxMDIsIDksIDE0LCAyNDAsIDEwMSwgOSwgMTQsIDI0MCwgMTAwLCA5LCAxNCwgMjQwLCA5OSwgOSwgMTQsIDI0MCwgOTgsIDksIAotICAgIDE0LCAyNDAsIDk3LCA5LCAxNCwgMjQwLCA5NiwgOSwgMTQsIDI0MCwgOTUsIDksIDE0LCAyNDAsIDk0LCA5LCAxNCwgMjQwLCAKLSAgICA5MywgOSwgMTQsIDI0MCwgOTIsIDksIDE0LCAyNDAsIDkxLCA5LCAxNCwgMjQwLCA5MCwgOSwgMTQsIDI0MCwgODksIDksIAotICAgIDE0LCAyNDAsIDg4LCA5LCAxNCwgMjQwLCA4NywgOSwgMTQsIDI0MCwgODYsIDksIDE0LCAyNDAsIDg1LCA5LCAxNCwgMjQwLCAKLSAgICA4NCwgOSwgMTQsIDI0MCwgODMsIDksIDE0LCAyNDAsIDgyLCA5LCAxNCwgMjQwLCA4MSwgOSwgMTQsIDI0MCwgODAsIDksIAotICAgIDE0LCAyNDAsIDc5LCA5LCAxNCwgMjQwLCA3OCwgOSwgMTQsIDI0MCwgNzcsIDksIDE0LCAyNDAsIDc2LCA5LCAxNCwgMjQwLCAKLSAgICA3NSwgOSwgMTQsIDI0MCwgNzQsIDksIDE0LCAyNDAsIDczLCA5LCAxNCwgMjQwLCA3MiwgOSwgMTQsIDI0MCwgNzEsIDksIAotICAgIDE0LCAyNDAsIDcwLCA5LCAxNCwgMjQwLCA2OSwgOSwgMTQsIDI0MCwgNjgsIDksIDE0LCAyNDAsIDY3LCA5LCAxNCwgMjQwLCAKLSAgICA2NiwgOSwgMTQsIDI0MCwgNjUsIDksIDE0LCAyNDAsIDY0LCA5LCAxNCwgMjQwLCA2MywgOSwgMTQsIDI0MCwgNjIsIDksIAotICAgIDE0LCAyNDAsIDYxLCA5LCAxNCwgMjQwLCA2MCwgOSwgMTQsIDI0MCwgNTksIDksIDE0LCAyNDAsIDU4LCA5LCAxNCwgMjQwLCAKLSAgICA1NywgOSwgMTQsIDI0MCwgNTYsIDksIDE0LCAyNDAsIDU1LCA5LCAxNCwgMjQwLCA1NCwgOSwgMTQsIDI0MCwgNTMsIDksIAotICAgIDE0LCAyNDAsIDUyLCA5LCAxNCwgMjQwLCA1MSwgOSwgMTQsIDI0MCwgNTAsIDksIDE0LCAyNDAsIDQ5LCA5LCAxNCwgMjQwLCAKLSAgICA0OCwgOSwgMTQsIDI0MCwgNDcsIDksIDE0LCAyNDAsIDQ2LCA5LCAxNCwgMjQwLCA0NSwgOSwgMTQsIDI0MCwgNDQsIDksIAotICAgIDE0LCAyNDAsIDQzLCA5LCAxNCwgMjQwLCA0MiwgOSwgMTQsIDI0MCwgNDEsIDksIDE0LCAyNDAsIDQwLCA5LCAxNCwgMjQwLCAKLSAgICAzOSwgOSwgMTQsIDI0MCwgMzgsIDksIDE0LCAyNDAsIDM3LCA5LCAxNCwgMjQwLCAzNiwgOSwgMTQsIDI0MCwgMzUsIDksIAotICAgIDE0LCAyNDAsIDM0LCA5LCAxNCwgMjQwLCAzMywgOSwgMTQsIDI0MCwgMzIsIDksIDE0LCAyNDAsIDMxLCA5LCAxNCwgMjQwLCAKLSAgICAzMCwgOSwgMTQsIDI0MCwgMjksIDksIDE0LCAyNDAsIDI4LCA5LCAxNCwgMjQwLCAyNywgOSwgMTQsIDI0MCwgMjYsIDksIAotICAgIDE0LCAyNDAsIDI1LCA5LCAxNCwgMjQwLCAyNCwgOSwgMTQsIDI0MCwgMjMsIDksIDE0LCAyNDAsIDIyLCA5LCAxNCwgMjQwLCAKLSAgICAyMSwgOSwgMTQsIDI0MCwgMjAsIDksIDE0LCAyNDAsIDE5LCA5LCAxNCwgMjQwLCAxOCwgOSwgMTQsIDI0MCwgMTcsIDksIAotICAgIDE0LCAyNDAsIDE2LCA5LCAxNCwgMjQwLCAxNSwgOSwgMTQsIDI0MCwgMTQsIDksIDE0LCAyNDAsIDEzLCA5LCAxNCwgMjQwLCAKLSAgICAxMiwgOSwgMTQsIDI0MCwgMTEsIDksIDE0LCAyNDAsIDEwLCA5LCAxNCwgMjQwLCA5LCA5LCAxNCwgMjQwLCA4LCA5LCAxNCwgCi0gICAgMjQwLCA3LCA5LCAxNCwgMjQwLCA2LCA5LCAxNCwgMjQwLCA1LCA5LCAxNCwgMjQwLCA0LCA5LCAxNCwgMjQwLCAzLCA5LCAKLSAgICAxNCwgMjQwLCAyLCA5LCAxNCwgMjQwLCAxLCA5LCAxNCwgMjQwLCAwLCA5LCAxNCwgMjM5LCAyNTUsIDksIDE0LCAyMzksIAotICAgIDI1NCwgOSwgMTQsIDIzOSwgMjUzLCA5LCAxNCwgMjM5LCAyNTIsIDksIDE0LCAyMzksIDI1MSwgOSwgMTQsIDIzOSwgMjUwLCAKLSAgICA5LCAxNCwgMjM5LCAyNDksIDksIDE0LCAyMzksIDI0OCwgOSwgMTQsIDIzOSwgMjQ3LCA5LCAxNCwgMjM5LCAyNDYsIDksIAotICAgIDE0LCAyMzksIDI0NSwgOSwgMTQsIDIzOSwgMjQ0LCA5LCAxNCwgMjM5LCAyNDMsIDksIDE0LCAyMzksIDI0MiwgOSwgMTQsIAotICAgIDIzOSwgMjQxLCA5LCAxNCwgMjM5LCAyNDAsIDksIDE0LCAyMzksIDIzOSwgOSwgMTQsIDIzOSwgMjM4LCA5LCAxNCwgMjM5LCAKLSAgICAyMzcsIDksIDE0LCAyMzksIDIzNiwgOSwgMTQsIDIzOSwgMjM1LCA5LCAxNCwgMjM5LCAyMzQsIDksIDE0LCAyMzksIDIzMywgCi0gICAgOSwgMTQsIDIzOSwgMjMyLCA5LCAxNCwgMjM5LCAyMzEsIDksIDE0LCAyMzksIDIzMCwgOSwgMTQsIDIzOSwgMjI5LCA5LCAKLSAgICAxNCwgMjM5LCAyMjgsIDksIDE0LCAyMzksIDIyNywgOSwgMTQsIDIzOSwgMjI2LCA5LCAxNCwgMjM5LCAyMjUsIDksIDE0LCAKLSAgICAyMzksIDIyNCwgOSwgMTQsIDIzOSwgMjIzLCA5LCAxNCwgMjM5LCAyMjIsIDksIDE0LCAyMzksIDIyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjIwLCA5LCAxNCwgMjM5LCAyMTksIDksIDE0LCAyMzksIDIxOCwgOSwgMTQsIDIzOSwgMjE3LCA5LCAxNCwgMjM5LCAyMTYsIAotICAgIDksIDE0LCAyMzksIDIxNSwgOSwgMTQsIDIzOSwgMjE0LCA5LCAxNCwgMjM5LCAyMTMsIDksIDE0LCAyMzksIDIxMiwgOSwgCi0gICAgMTQsIDIzOSwgMjExLCA5LCAxNCwgMjM5LCAyMTAsIDksIDE0LCAyMzksIDIwOSwgOSwgMTQsIDIzOSwgMjA4LCA5LCAxNCwgCi0gICAgMjM5LCAyMDcsIDksIDE0LCAyMzksIDIwNiwgOSwgMTQsIDIzOSwgMjA1LCA5LCAxNCwgMjM5LCAyMDQsIDksIDE0LCAyMzksIAotICAgIDIwMywgOSwgMTQsIDIzOSwgMjAyLCA5LCAxNCwgMjM5LCAyMDEsIDksIDE0LCAyMzksIDIwMCwgOSwgMTQsIDIzOSwgMTk5LCAKLSAgICA5LCAxNCwgMjM5LCAxOTgsIDksIDE0LCAyMzksIDE5NywgOSwgMTQsIDIzOSwgMTk2LCA5LCAxNCwgMjM5LCAxOTUsIDksIAotICAgIDE0LCAyMzksIDE5NCwgOSwgMTQsIDIzOSwgMTkzLCA5LCAxNCwgMjM5LCAxOTIsIDksIDE0LCAyMzksIDE5MSwgOSwgMTQsIAotICAgIDIzOSwgMTkwLCA5LCAxNCwgMjM5LCAxODksIDksIDE0LCAyMzksIDE4OCwgOSwgMTQsIDIzOSwgMTg3LCA5LCAxNCwgMjM5LCAKLSAgICAxODYsIDksIDE0LCAyMzksIDE4NSwgOSwgMTQsIDIzOSwgMTg0LCA5LCAxNCwgMjM5LCAxODMsIDksIDE0LCAyMzksIDE4MiwgCi0gICAgOSwgMTQsIDIzOSwgMTgxLCA5LCAxNCwgMjM5LCAxODAsIDksIDE0LCAyMzksIDE3OSwgOSwgMTQsIDIzOSwgMTc4LCA5LCAKLSAgICAxNCwgMjM5LCAxNzcsIDksIDE0LCAyMzksIDE3NiwgOSwgMTQsIDIzOSwgMTc1LCA5LCAxNCwgMjM5LCAxNzQsIDksIDE0LCAKLSAgICAyMzksIDE3MywgOSwgMTQsIDIzOSwgMTcyLCA5LCAxNCwgMjM5LCAxNzEsIDksIDE0LCAyMzksIDE3MCwgOSwgMTQsIDIzOSwgCi0gICAgMTY5LCA5LCAxNCwgMjM5LCAxNjgsIDksIDE0LCAyMzksIDE2NywgOSwgMTQsIDIzOSwgMTY2LCA5LCAxNCwgMjM5LCAxNjUsIAotICAgIDksIDE0LCAyMzksIDE2NCwgOSwgMTQsIDIzOSwgMTYzLCA5LCAxNCwgMjM5LCAxNjIsIDksIDE0LCAyMzksIDE2MSwgOSwgCi0gICAgMTQsIDIzOSwgMTYwLCA5LCAxNCwgMjM5LCAxNTksIDksIDE0LCAyMzksIDE1OCwgOSwgMTQsIDIzOSwgMTU3LCA5LCAxNCwgCi0gICAgMjM5LCAxNTYsIDksIDE0LCAyMzksIDE1NSwgOSwgMTQsIDIzOSwgMTU0LCA5LCAxNCwgMjM5LCAxNTMsIDksIDE0LCAyMzksIAotICAgIDE1MiwgOSwgMTQsIDIzOSwgMTUxLCA5LCAxNCwgMjM5LCAxNTAsIDksIDE0LCAyMzksIDE0OSwgOSwgMTQsIDIzOSwgMTQ4LCAKLSAgICA5LCAxNCwgMjM5LCAxNDcsIDksIDE0LCAyMzksIDE0NiwgOSwgMTQsIDIzOSwgMTQ1LCA5LCAxNCwgMjM5LCAxNDQsIDksIAotICAgIDE0LCAyMzksIDE0MywgOSwgMTQsIDIzOSwgMTQyLCA5LCAxNCwgMjM5LCAxNDEsIDksIDE0LCAyMzksIDE0MCwgOSwgMTQsIAotICAgIDIzOSwgMTM5LCA5LCAxNCwgMjM5LCAxMzgsIDksIDE0LCAyMzksIDEzNywgOSwgMTQsIDIzOSwgMTM2LCA5LCAxNCwgMjM5LCAKLSAgICAxMzUsIDksIDE0LCAyMzksIDEzNCwgOSwgMTQsIDIzOSwgMTMzLCA5LCAxNCwgMjM5LCAxMzIsIDksIDE0LCAyMzksIDEzMSwgCi0gICAgOSwgMTQsIDIzOSwgMTMwLCA5LCAxNCwgMjM5LCAxMjksIDksIDE0LCAyMzksIDEyOCwgOSwgMTQsIDIzOSwgMTI3LCA5LCAKLSAgICAxNCwgMjM5LCAxMjYsIDksIDE0LCAyMzksIDEyNSwgOSwgMTQsIDIzOSwgMTI0LCA5LCAxNCwgMjM5LCAxMjMsIDksIDE0LCAKLSAgICAyMzksIDEyMiwgOSwgMTQsIDIzOSwgMTIxLCA5LCAxNCwgMjM5LCAxMjAsIDksIDE0LCAyMzksIDExOSwgOSwgMTQsIDIzOSwgCi0gICAgMTE4LCA5LCAxNCwgMjM5LCAxMTcsIDksIDE0LCAyMzksIDExNiwgOSwgMTQsIDIzOSwgMTE1LCA5LCAxNCwgMjM5LCAxMTQsIAotICAgIDksIDE0LCAyMzksIDExMywgOSwgMTQsIDIzOSwgMTEyLCA5LCAxNCwgMjM5LCAxMTEsIDksIDE0LCAyMzksIDExMCwgOSwgCi0gICAgMTQsIDIzOSwgMTA5LCA5LCAxNCwgMjM5LCAxMDgsIDksIDE0LCAyMzksIDEwNywgOSwgMTQsIDIzOSwgMTA2LCA5LCAxNCwgCi0gICAgMjM5LCAxMDUsIDksIDE0LCAyMzksIDEwNCwgOSwgMTQsIDIzOSwgMTAzLCA5LCAxNCwgMjM5LCAxMDIsIDksIDE0LCAyMzksIAotICAgIDEwMSwgOSwgMTQsIDIzOSwgMTAwLCA5LCAxNCwgMjM5LCA5OSwgOSwgMTQsIDIzOSwgOTgsIDksIDE0LCAyMzksIDk3LCA5LCAKLSAgICAxNCwgMjM5LCA5NiwgOSwgMTQsIDIzOSwgOTUsIDksIDE0LCAyMzksIDk0LCA5LCAxNCwgMjM5LCA5MywgOSwgMTQsIDIzOSwgCi0gICAgOTIsIDksIDE0LCAyMzksIDkxLCA5LCAxNCwgMjM5LCA5MCwgOSwgMTQsIDIzOSwgODksIDksIDE0LCAyMzksIDg4LCA5LCAKLSAgICAxNCwgMjM5LCA4NywgOSwgMTQsIDIzOSwgODYsIDksIDE0LCAyMzksIDg1LCA5LCAxNCwgMjM5LCA4NCwgOSwgMTQsIDIzOSwgCi0gICAgODMsIDksIDE0LCAyMzksIDgyLCA5LCAxNCwgMjM5LCA4MSwgOSwgMTQsIDIzOSwgODAsIDksIDE0LCAyMzksIDc5LCA5LCAKLSAgICAxNCwgMjM5LCA3OCwgOSwgMTQsIDIzOSwgNzcsIDksIDE0LCAyMzksIDc2LCA5LCAxNCwgMjM5LCA3NSwgOSwgMTQsIDIzOSwgCi0gICAgNzQsIDksIDE0LCAyMzksIDczLCA5LCAxNCwgMjM5LCA3MiwgOSwgMTQsIDIzOSwgNzEsIDksIDE0LCAyMzksIDcwLCA5LCAKLSAgICAxNCwgMjM5LCA2OSwgOSwgMTQsIDIzOSwgNjgsIDksIDE0LCAyMzksIDY3LCA5LCAxNCwgMjM5LCA2NiwgOSwgMTQsIDIzOSwgCi0gICAgNjUsIDksIDE0LCAyMzksIDY0LCA5LCAxNCwgMjM5LCA2MywgOSwgMTQsIDIzOSwgNjIsIDksIDE0LCAyMzksIDYxLCA5LCAKLSAgICAxNCwgMjM5LCA2MCwgOSwgMTQsIDIzOSwgNTksIDksIDE0LCAyMzksIDU4LCA5LCAxNCwgMjM5LCA1NywgOSwgMTQsIDIzOSwgCi0gICAgNTYsIDksIDE0LCAyMzksIDU1LCA5LCAxNCwgMjM5LCA1NCwgOSwgMTQsIDIzOSwgNTMsIDksIDE0LCAyMzksIDUyLCA5LCAKLSAgICAxNCwgMjM5LCA1MSwgOSwgMTQsIDIzOSwgNTAsIDksIDE0LCAyMzksIDQ5LCA5LCAxNCwgMjM5LCA0OCwgOSwgMTQsIDIzOSwgCi0gICAgNDcsIDksIDE0LCAyMzksIDQ2LCA5LCAxNCwgMjM5LCA0NSwgOSwgMTQsIDIzOSwgNDQsIDksIDE0LCAyMzksIDQzLCA5LCAKLSAgICAxNCwgMjM5LCA0MiwgOSwgMTQsIDIzOSwgNDEsIDksIDE0LCAyMzksIDQwLCA5LCAxNCwgMjM5LCAzOSwgOSwgMTQsIDIzOSwgCi0gICAgMzgsIDksIDE0LCAyMzksIDM3LCA5LCAxNCwgMjM5LCAzNiwgOSwgMTQsIDIzOSwgMzUsIDksIDE0LCAyMzksIDM0LCA5LCAKLSAgICAxNCwgMjM5LCAzMywgOSwgMTQsIDIzOSwgMzIsIDksIDE0LCAyMzksIDMxLCA5LCAxNCwgMjM5LCAzMCwgOSwgMTQsIDIzOSwgCi0gICAgMjksIDksIDE0LCAyMzksIDI4LCA5LCAxNCwgMjM5LCAyNywgOSwgMTQsIDIzOSwgMjYsIDksIDE0LCAyMzksIDI1LCA5LCAKLSAgICAxNCwgMjM5LCAyNCwgOSwgMTQsIDIzOSwgMjMsIDksIDE0LCAyMzksIDIyLCA5LCAxNCwgMjM5LCAyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjAsIDksIDE0LCAyMzksIDE5LCA5LCAxNCwgMjM5LCAxOCwgOSwgMTQsIDIzOSwgMTcsIDksIDE0LCAyMzksIDE2LCA5LCAKLSAgICAxNCwgMjM5LCAxNSwgOSwgMTQsIDIzOSwgMTQsIDksIDE0LCAyMzksIDEzLCA5LCAxNCwgMjM5LCAxMiwgOSwgMTQsIDIzOSwgCi0gICAgMTEsIDksIDE0LCAyMzksIDEwLCA5LCAxNCwgMjM5LCA5LCA5LCAxNCwgMjM5LCA4LCA5LCAxNCwgMjM5LCA3LCA5LCAxNCwgCi0gICAgMjM5LCA2LCA5LCAxNCwgMjM5LCA1LCA5LCAxNCwgMjM5LCA0LCA5LCAxNCwgMjM5LCAzLCA5LCAxNCwgMjM5LCAyLCA5LCAKLSAgICAxNCwgMjM5LCAxLCA5LCAxNCwgMjM5LCAwLCA5LCAxNCwgMjM4LCAyNTUsIDksIDE0LCAyMzgsIDI1NCwgOSwgMTQsIDIzOCwgCi0gICAgMjUzLCA5LCAxNCwgMjM4LCAyNTIsIDksIDE0LCAyMzgsIDI1MSwgOSwgMTQsIDIzOCwgMjUwLCA5LCAxNCwgMjM4LCAyNDksIAotICAgIDksIDE0LCAyMzgsIDI0OCwgOSwgMTQsIDIzOCwgMjQ3LCA5LCAxNCwgMjM4LCAyNDYsIDksIDE0LCAyMzgsIDI0NSwgOSwgCi0gICAgMTQsIDIzOCwgMjQ0LCA5LCAxNCwgMjM4LCAyNDMsIDksIDE0LCAyMzgsIDI0MiwgOSwgMTQsIDIzOCwgMjQxLCA5LCAxNCwgCi0gICAgMjM4LCAyNDAsIDksIDE0LCAyMzgsIDIzOSwgOSwgMTQsIDIzOCwgMjM4LCA5LCAxNCwgMjM4LCAyMzcsIDksIDE0LCAyMzgsIAotICAgIDIzNiwgOSwgMTQsIDIzOCwgMjM1LCA5LCAxNCwgMjM4LCAyMzQsIDksIDE0LCAyMzgsIDIzMywgOSwgMTQsIDIzOCwgMjMyLCAKLSAgICA5LCAxNCwgMjM4LCAyMzEsIDksIDE0LCAyMzgsIDIzMCwgOSwgMTQsIDIzOCwgMjI5LCA5LCAxNCwgMjM4LCAyMjgsIDksIAotICAgIDE0LCAyMzgsIDIyNywgOSwgMTQsIDIzOCwgMjI2LCA5LCAxNCwgMjM4LCAyMjUsIDksIDE0LCAyMzgsIDIyNCwgOSwgMTQsIAotICAgIDIzOCwgMjIzLCA5LCAxNCwgMjM4LCAyMjIsIDksIDE0LCAyMzgsIDIyMSwgOSwgMTQsIDIzOCwgMjIwLCA5LCAxNCwgMjM4LCAKLSAgICAyMTksIDksIDE0LCAyMzgsIDIxOCwgOSwgMTQsIDIzOCwgMjE3LCA5LCAxNCwgMjM4LCAyMTYsIDksIDE0LCAyMzgsIDIxNSwgCi0gICAgOSwgMTQsIDIzOCwgMjE0LCA5LCAxNCwgMjM4LCAyMTMsIDksIDE0LCAyMzgsIDIxMiwgOSwgMTQsIDIzOCwgMjExLCA5LCAKLSAgICAxNCwgMjM4LCAyMTAsIDksIDE0LCAyMzgsIDIwOSwgOSwgMTQsIDIzOCwgMjA4LCA5LCAxNCwgMjM4LCAyMDcsIDksIDE0LCAKLSAgICAyMzgsIDIwNiwgOSwgMTQsIDIzOCwgMjA1LCA5LCAxNCwgMjM4LCAyMDQsIDksIDE0LCAyMzgsIDIwMywgOSwgMTQsIDIzOCwgCi0gICAgMjAyLCA5LCAxNCwgMjM4LCAyMDEsIDksIDE0LCAyMzgsIDIwMCwgOSwgMTQsIDIzOCwgMTk5LCA5LCAxNCwgMjM4LCAxOTgsIAotICAgIDksIDE0LCAyMzgsIDE5NywgOSwgMTQsIDIzOCwgMTk2LCA5LCAxNCwgMjM4LCAxOTUsIDksIDE0LCAyMzgsIDE5NCwgOSwgCi0gICAgMTQsIDIzOCwgMTkzLCA5LCAxNCwgMjM4LCAxOTIsIDksIDE0LCAyMzgsIDE5MSwgOSwgMTQsIDIzOCwgMTkwLCA5LCAxNCwgCi0gICAgMjM4LCAxODksIDksIDE0LCAyMzgsIDE4OCwgOSwgMTQsIDIzOCwgMTg3LCA5LCAxNCwgMjM4LCAxODYsIDksIDE0LCAyMzgsIAotICAgIDE4NSwgOSwgMTQsIDIzOCwgMTg0LCA5LCAxNCwgMjM4LCAxODMsIDksIDE0LCAyMzgsIDE4MiwgOSwgMTQsIDIzOCwgMTgxLCAKLSAgICA5LCAxNCwgMjM4LCAxODAsIDksIDE0LCAyMzgsIDE3OSwgOSwgMTQsIDIzOCwgMTc4LCA5LCAxNCwgMjM4LCAxNzcsIDksIAotICAgIDE0LCAyMzgsIDE3NiwgOSwgMTQsIDIzOCwgMTc1LCA5LCAxNCwgMjM4LCAxNzQsIDksIDE0LCAyMzgsIDE3MywgOSwgMTQsIAotICAgIDIzOCwgMTcyLCA5LCAxNCwgMjM4LCAxNzEsIDksIDE0LCAyMzgsIDE3MCwgOSwgMTQsIDIzOCwgMTY5LCA5LCAxNCwgMjM4LCAKLSAgICAxNjgsIDksIDE0LCAyMzgsIDE2NywgOSwgMTQsIDIzOCwgMTY2LCA5LCAxNCwgMjM4LCAxNjUsIDksIDE0LCAyMzgsIDE2NCwgCi0gICAgOSwgMTQsIDIzOCwgMTYzLCA5LCAxNCwgMjM4LCAxNjIsIDksIDE0LCAyMzgsIDE2MSwgOSwgMTQsIDIzOCwgMTYwLCA5LCAKLSAgICAxNCwgMjM4LCAxNTksIDksIDE0LCAyMzgsIDE1OCwgOSwgMTQsIDIzOCwgMTU3LCA5LCAxNCwgMjM4LCAxNTYsIDksIDE0LCAKLSAgICAyMzgsIDE1NSwgOSwgMTQsIDIzOCwgMTU0LCA5LCAxNCwgMjM4LCAxNTMsIDksIDE0LCAyMzgsIDE1MiwgOSwgMTQsIDIzOCwgCi0gICAgMTUxLCA5LCAxNCwgMjM4LCAxNTAsIDksIDE0LCAyMzgsIDE0OSwgOSwgMTQsIDIzOCwgMTQ4LCA5LCAxNCwgMjM4LCAxNDcsIAotICAgIDksIDE0LCAyMzgsIDE0NiwgOSwgMTQsIDIzOCwgMTQ1LCA5LCAxNCwgMjM4LCAxNDQsIDksIDE0LCAyMzgsIDE0MywgOSwgCi0gICAgMTQsIDIzOCwgMTQyLCA5LCAxNCwgMjM4LCAxNDEsIDksIDE0LCAyMzgsIDE0MCwgOSwgMTQsIDIzOCwgMTM5LCA5LCAxNCwgCi0gICAgMjM4LCAxMzgsIDksIDE0LCAyMzgsIDEzNywgOSwgMTQsIDIzOCwgMTM2LCA5LCAxNCwgMjM4LCAxMzUsIDksIDE0LCAyMzgsIAotICAgIDEzNCwgOSwgMTQsIDIzOCwgMTMzLCA5LCAxNCwgMjM4LCAxMzIsIDksIDE0LCAyMzgsIDEzMSwgOSwgMTQsIDIzOCwgMTMwLCAKLSAgICA5LCAxNCwgMjM4LCAxMjksIDksIDE0LCAyMzgsIDEyOCwgOSwgMTQsIDIzOCwgMTI3LCA5LCAxNCwgMjM4LCAxMjYsIDksIAotICAgIDE0LCAyMzgsIDEyNSwgOSwgMTQsIDIzOCwgMTI0LCA5LCAxNCwgMjM4LCAxMjMsIDksIDE0LCAyMzgsIDEyMiwgOSwgMTQsIAotICAgIDIzOCwgMTIxLCA5LCAxNCwgMjM4LCAxMjAsIDksIDE0LCAyMzgsIDExOSwgOSwgMTQsIDIzOCwgMTE4LCA5LCAxNCwgMjM4LCAKLSAgICAxMTcsIDksIDE0LCAyMzgsIDExNiwgOSwgMTQsIDIzOCwgMTE1LCA5LCAxNCwgMjM4LCAxMTQsIDksIDE0LCAyMzgsIDExMywgCi0gICAgOSwgMTQsIDIzOCwgMTEyLCA5LCAxNCwgMjM4LCAxMTEsIDksIDE0LCAyMzgsIDExMCwgOSwgMTQsIDIzOCwgMTA5LCA5LCAKLSAgICAxNCwgMjM4LCAxMDgsIDksIDE0LCAyMzgsIDEwNywgOSwgMTQsIDIzOCwgMTA2LCA5LCAxNCwgMjM4LCAxMDUsIDksIDE0LCAKLSAgICAyMzgsIDEwNCwgOSwgMTQsIDIzOCwgMTAzLCA5LCAxNCwgMjM4LCAxMDIsIDksIDE0LCAyMzgsIDEwMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAwLCA5LCAxNCwgMjM4LCA5OSwgOSwgMTQsIDIzOCwgOTgsIDksIDE0LCAyMzgsIDk3LCA5LCAxNCwgMjM4LCA5NiwgOSwgCi0gICAgMTQsIDIzOCwgOTUsIDksIDE0LCAyMzgsIDk0LCA5LCAxNCwgMjM4LCA5MywgOSwgMTQsIDIzOCwgOTIsIDksIDE0LCAyMzgsIAotICAgIDkxLCA5LCAxNCwgMjM4LCA5MCwgOSwgMTQsIDIzOCwgODksIDksIDE0LCAyMzgsIDg4LCA5LCAxNCwgMjM4LCA4NywgOSwgCi0gICAgMTQsIDIzOCwgODYsIDksIDE0LCAyMzgsIDg1LCA5LCAxNCwgMjM4LCA4NCwgOSwgMTQsIDIzOCwgODMsIDksIDE0LCAyMzgsIAotICAgIDgyLCA5LCAxNCwgMjM4LCA4MSwgOSwgMTQsIDIzOCwgODAsIDksIDE0LCAyMzgsIDc5LCA5LCAxNCwgMjM4LCA3OCwgOSwgCi0gICAgMTQsIDIzOCwgNzcsIDksIDE0LCAyMzgsIDc2LCA5LCAxNCwgMjM4LCA3NSwgOSwgMTQsIDIzOCwgNzQsIDksIDE0LCAyMzgsIAotICAgIDczLCAyMzMsIDkwLCAyMTcsIDg0LCAxMjksIDIxOSwgMTgsIDEyOSwgMjQ1LCAzMSwgNzgsIDEyOSwgMjIzLCAyNTQsIDc4LCAKLSAgICAxMjksIDU0LCA1MCwgMTI5LCAyNDcsIDEzMiwgNTAsIDEyOSwgMjI1LCAxODIsIDUwLCAxMjksIDI1NCwgMTI2LCAxMjksIAotICAgIDI1NCwgNTcsIDEyOSwgNDMsIDIyNiwgMywgMTI5LCA0NCwgMjI2LCAzLCAxMjksIDI1MywgMjE2LCAxMjksIDk2LCA1MCwgCi0gICAgMTI5LCAyNDksIDIxOSwgMTI5LCAyNDAsIDE2NywgMTI5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEyOSwgMjE5LCA0NiwgMTI5LCAKLSAgICAyMSwgMjEwLCA4NiwgMTI5LCAyMSwgMTEwLCAxMjksIDIxLCAxMDUsIDEyOSwgMjEsIDE1OCwgMTI5LCAyMSwgMTYxLCAxMjksIAotICAgIDIxLCAxODksIDEyOSwgMjEsIDE5NCwgMTI5LCAyMSwgMTk4LCAxMjksIDIxLCAxOTUsIDEyOSwgMjEsIDIwMCwgMTI5LCAKLSAgICAyNDksIDIyNiwgMTI5LCAyMjAsIDE1MCwgMTI5LCAyMzMsIDE1LCA1MCwgMTI5LCAyNDUsIDk4LCA1MCwgMTI5LCAyNDIsIAotICAgIDEzMCwgNTAsIDEyOSwgMjI0LCAxMywgNzgsIDEyOSwgMjQ5LCAyMTcsIDI1MywgMjA2LCAxMjksIDcsIDYsIDEsIDYxLCAKLSAgICAxMjksIDcsIDYsIDEsIDI1MywgMTU4LCAxMjksIDcsIDYsIDEsIDI1MSwgNjYsIDEyOSwgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NSwgMTI5LCA3LCA2LCAxLCAyNDUsIDYsIDEyOSwgNywgNiwgMSwgMjQzLCAyMDIsIDEyOSwgNywgCi0gICAgNiwgMSwgMjQyLCA2MCwgMTI5LCA3LCA2LCAxLCA3MywgMTI5LCA3LCA2LCAxLCAyMzUsIDE0NCwgMTI5LCA3LCA2LCAxLCAKLSAgICAyMzUsIDIzLCAxMjksIDcsIDYsIDEsIDE1NiwgMTI5LCA3LCA2LCAxLCAxOTMsIDEyOSwgNywgNiwgMSwgMjMwLCAyNSwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCA3LCA2LCAxLCAyMjYsIDEwNSwgMTI5LCA3LCA2LCAxLCAyMjQsIDk2LCAxMjksIDcsIAotICAgIDYsIDEsIDE1MywgMTI5LCA3LCA2LCAxLCAyMjIsIDkxLCAxMjksIDcsIDYsIDEsIDIxNywgMTUyLCAxMjksIDcsIDYsIDEsIAotICAgIDcwLCAxMjksIDcsIDYsIDEsIDIxNCwgMTA1LCAxMjksIDcsIDYsIDEsIDIxMiwgOTgsIDEyOSwgNywgNiwgMSwgMjExLCAKLSAgICAxNzgsIDEyOSwgNywgNiwgMSwgMjExLCAxMTcsIDEyOSwgNywgNiwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDQyLCAxMjcsIAotICAgIDEyOSwgMjIzLCA1MCwgMjE5LCA0NiwgMTI5LCA0NCwgNDIsIDEyNywgMTI5LCAyNTAsIDMxLCAyNTUsIDE0LCAxMjksIDEyMSwgCi0gICAgMjMyLCAyMTMsIDEyOSwgMjQyLCAxMzcsIDI1NSwgMTQsIDEyOSwgNywgNCwgMSwgNjEsIDEyOSwgNywgNCwgMSwgMjUzLCAKLSAgICAxNTgsIDEyOSwgNywgNCwgMSwgMjUxLCA2NiwgMTI5LCA3LCA0LCAxLCAyNDksIDYwLCAxMjksIDcsIDQsIDEsIDc1LCAxMjksIAotICAgIDcsIDQsIDEsIDI0NSwgNiwgMTI5LCA3LCA0LCAxLCAyNDMsIDIwMiwgMTI5LCA3LCA0LCAxLCAyNDIsIDYwLCAxMjksIDcsIAotICAgIDQsIDEsIDczLCAxMjksIDcsIDQsIDEsIDIzNSwgMTQ0LCAxMjksIDcsIDQsIDEsIDIzNSwgMjMsIDEyOSwgNywgNCwgMSwgCi0gICAgMTU2LCAxMjksIDcsIDQsIDEsIDE5MywgMTI5LCA3LCA0LCAxLCAyMzAsIDI1LCAxMjksIDcsIDQsIDEsIDc2LCAxMjksIDcsIAotICAgIDQsIDEsIDIyNiwgMTA1LCAxMjksIDcsIDQsIDEsIDIyNCwgOTYsIDEyOSwgNywgNCwgMSwgMTUzLCAxMjksIDcsIDQsIDEsIAotICAgIDIyMiwgOTEsIDEyOSwgNywgNCwgMSwgMjE3LCAxNTIsIDEyOSwgNywgNCwgMSwgNzAsIDEyOSwgNywgNCwgMSwgMjE0LCAKLSAgICAxMDUsIDEyOSwgNywgNCwgMSwgMjEyLCA5OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA0LCAxLCAyMTEsIAotICAgIDExNywgMTI5LCA3LCA0LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgMjQ5LCA5OSwgMTI3LCAxMjksIDY3LCAyMzIsIDIxMywgCi0gICAgMTI5LCA0NCwgMjQ5LCA5OSwgMTI3LCAxMjksIDE4MiwgMjUxLCA2LCAyMTcsIDg0LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgCi0gICAgNjcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA0NCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAxMSwgNDUsIAotICAgIDIyMSwgMCwgNDUsIDIyMCwgMjQ1LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgMjM1LCA0NSwgMjIwLCAKLSAgICAyMzQsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIDIyOSwgNDUsIDIyMCwgCi0gICAgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAyMjQsIDQ1LCAyMjAsIAotICAgIDIyMywgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgMjE4LCA0NSwgMjIwLCAKLSAgICAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIDIxMywgNDUsIDIyMCwgCi0gICAgMjEyLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAyMDcsIDQ1LCAyMjAsIAotICAgIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgMjAyLCA0NSwgMjIwLCAKLSAgICAyMDEsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIDE5NiwgNDUsIDIyMCwgCi0gICAgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAxOTEsIDQ1LCAyMjAsIAotICAgIDE5MCwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgMTg1LCA0NSwgMjIwLCAKLSAgICAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIDE4MCwgNDUsIDIyMCwgCi0gICAgMTc5LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAxNzQsIDQ1LCAyMjAsIAotICAgIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgMTY5LCA0NSwgMjIwLCAKLSAgICAxNjgsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIDE2MywgNDUsIDIyMCwgCi0gICAgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIwLCAxNTgsIDQ1LCAyMjAsIAotICAgIDE1NywgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgMTUxLCA0NSwgMjIxLCAKLSAgICAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIDE0NiwgNDUsIDIyMSwgCi0gICAgMTQ1LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAxNDAsIDQ1LCAyMjEsIAotICAgIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgMTM1LCA0NSwgMjIxLCAKLSAgICAxMzQsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIDEyOSwgNDUsIDIyMSwgCi0gICAgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAxMjQsIDQ1LCAyMjEsIAotICAgIDEyMywgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgMTE4LCA0NSwgMjIxLCAKLSAgICAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIDExMywgNDUsIDIyMSwgCi0gICAgMTEyLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAxMDcsIDQ1LCAyMjEsIAotICAgIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgMTAyLCA0NSwgMjIxLCAKLSAgICAxMDEsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCA0NSwgMjIxLCA5NSwgNDUsIAotICAgIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTEsIDQ1LCAyMjEsIDkwLCA0NSwgMjIxLCA4OCwgCi0gICAgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAyMjEsIDgzLCA0NSwgMjIxLCAKLSAgICA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA3OSwgNDUsIDIyMSwgNzcsIDQ1LCAyMjEsIDc2LCA0NSwgCi0gICAgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgNzEsIDQ1LCAyMjEsIDcwLCAKLSAgICA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNjgsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIDIyMSwgNjQsIDQ1LCAyMjEsIAotICAgIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgNDUsIDIyMSwgNTgsIDQ1LCAKLSAgICAyMjEsIDU3LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCA1MiwgNDUsIDIyMSwgNTEsIAotICAgIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIxLCA0NiwgNDUsIDIyMSwgCi0gICAgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCA0NSwgMjIxLCAzOCwgNDUsIAotICAgIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMzQsIDQ1LCAyMjEsIDMyLCA0NSwgMjIxLCAzMSwgCi0gICAgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAyMjEsIDI2LCA0NSwgMjIxLCAKLSAgICAyNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDIzLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIDQ1LCAyMjEsIDE5LCA0NSwgCi0gICAgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgMTQsIDQ1LCAyMjEsIDEzLCAKLSAgICA0NSwgMjIxLCAxMiwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAyMjEsIDcsIDQ1LCAyMjEsIDYsIAotICAgIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDIsIDQ1LCAyMjEsIDEsIDQ1LCAyMjAsIDI1NSwgCi0gICAgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAKLSAgICAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDcsIDQ1LCAyMjAsIDI0NiwgNDUsIDIyMCwgMjQ0LCA0NSwgCi0gICAgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAyNDAsIDQ1LCAyMjAsIDIzOSwgNDUsIAotICAgIDIyMCwgMjM4LCAyMjcsIDIwMiwgMjI3LCAyMDQsIDIxOCwgMTUyLCA2NCwgMjQxLCAyMzMsIDIxOSwgNDgsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjE2LCAyMTIsIDIxOCwgODUsIDI0NSwgMTQzLCA2NCwgMjE2LCAyMTIsIDI0NSwgNTYsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjE1LCAyNDMsIDI0NSwgMTA5LCAyNDUsIDEzMiwgMjQ1LCAxMzMsIDI1NSwgNywgMjU1LCA4LCAyNTQsIDE2NywgMjUyLCAKLSAgICA0NywgMjUyLCAxNzksIDI1MSwgMTMxLCAxMzUsIDIxNywgODksIDIwMywgMjE3LCA4OSwgMjQwLCAyMjcsIDIxNywgOTMsIAotICAgIDIzMiwgMjE0LCAyNDQsIDE0NSwgMTY2LCAyMzIsIDIxMywgMjQ1LCAxNDMsIDY0LCAyMzIsIDIxMywgMjMzLCAwLCAyMjgsIAotICAgIDEzNSwgMjQ1LCAxMTIsIDIzMiwgMjE0LCAyMTcsIDg5LCA2NywgMjE3LCA4OSwgMjEyLCAxMTgsIDI0NCwgMjAsIDI0NCwgCi0gICAgMTQ1LCAyNDQsIDEyNSwgMjUwLCAyMzAsIDIyMywgNTMsIDI0OSwgMTQzLCAyMjAsIDI4LCAyMjYsIDEzMCwgMjMyLCAxNTAsIAotICAgIDExMCwgMjE5LCA1OCwgMjIwLCAyOCwgMjM1LCAyNTUsIDIzMiwgMTUwLCAyMTAsIDg2LCAyMTksIDE5MSwgMjQ4LCAxNTEsIAotICAgIDIzMiwgMjA0LCAyNDUsIDc3LCAyNDcsIDE1NSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDExMCwgMjQ4LCAxNDEsIDI0OCwgMzEsIAotICAgIDI0OSwgMTc4LCAxMDUsIDI0OCwgMTQwLCAyNDgsIDMxLCAyNDksIDE3OCwgMTU4LCAyNDgsIDEzOSwgMjQ4LCAzMSwgMjQ5LCAKLSAgICAxNzgsIDE2MSwgMjQ4LCAxMzgsIDE1MiwgMjU1LCA3LCAyMjksIDIwOSwgMjE3LCAxNzcsIDIzNiwgNjIsIDIxNywgMTgwLCAKLSAgICAyNDUsIDE0MywgNjQsIDIxNSwgMjQ0LCAyNTEsIDIxMywgMjQ1LCA2MiwgMjUxLCA1LCAyNTEsIDcsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjMxLCA4MSwgMjQ1LCAxMTAsIDIxOCwgNjEsIDIxOCwgNzgsIDI0NSwgNzcsIDI0NSwgNzgsIDIzNSwgMjMyLCAyMjAsIAotICAgIDEzOCwgMTYxLCAyNDQsIDEwNywgMjIwLCAxMzcsIDI0MywgMjM3LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDE1OCwgMjQyLCAKLSAgICAxMjEsIDIyMCwgMTM3LCAyNDIsIDExOCwgMjM1LCAyMzIsIDIyMCwgMTM4LCAxMDUsIDIyMywgMTIxLCAyMjAsIDEzNywgCi0gICAgMjIyLCAxNDUsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTEwLCAyMTQsIDE3NCwgMjIwLCAxMzcsIDIxNCwgMTMzLCAyMTksIDIxLCAKLSAgICAyNDgsIDYzLCAyNDgsIDY1LCAyMjYsIDc4LCAyNTAsIDE0MiwgMjI2LCA4MCwgMTI1LCAyMjYsIDI0MCwgMjI0LCAxOTMsIAotICAgIDI0MSwgNDcsIDI1MSwgMTUwLCAyMjUsIDE3MywgMjQxLCAyMDMsIDI1MSwgMTYxLCAyMjgsIDc1LCAyNTEsIDE1MCwgMjQxLCAKLSAgICAyMDMsIDIyOSwgMTc1LCAyMzUsIDI0MiwgMjM1LCAyNDQsIDIyOSwgODIsIDIzMiwgMjEzLCAyMjksIDk5LCAyMTgsIDE1MiwgCi0gICAgNjQsIDIyMSwgMTU4LCAyNTQsIDE4LCAyMTgsIDIyMywgMjQ1LCAxNDMsIDY0LCAyMjEsIDE1OCwgMjU0LCAxOCwgMjQ1LCAKLSAgICA4MCwgMTM1LCAyMTcsIDkwLCAyMjAsIDEyNywgMjAzLCAyMTcsIDkwLCAyMjAsIDEyNywgMjQwLCAyMjQsIDEzNSwgMjE3LCAKLSAgICA5MCwgMiwgMjM1LCAzNSwgMjAzLCAyMTcsIDkwLCAyLCAyMzUsIDM1LCAyNDAsIDIyNSwgMjMyLCAyMTQsIDIxNywgOTAsIAotICAgIDIyMCwgMTI3LCA2NywgMjE3LCA5MCwgMjIwLCAxMjcsIDIxMiwgMTE3LCAyMjUsIDI1MywgMjMyLCAyMTQsIDI0NCwgMTQsIAotICAgIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjQ2LCAxMDYsIDIyNSwgMzIsIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjUyLCAxNzgsIDIyNSwgCi0gICAgMjUzLCAyMzIsIDIxNCwgMjE0LCAxNjMsIDIyNSwgMjgsIDIyMywgNTAsIDIzMiwgMjE0LCAyNDQsIDE0NSwgMjIzLCA1MCwgCi0gICAgMjM1LCAyNDIsIDIyMywgMzUsIDIxOSwgMTU1LCAyMjAsIDI4LCAxMDUsIDIxOSwgMTUyLCAyMTgsIDIyNSwgMjE5LCAxNTUsIAotICAgIDIyMCwgMjgsIDE1OCwgMjE5LCAxNTEsIDIxOCwgMjI0LCAyNDgsIDMxLCAyNDksIDE3OCwgMjE4LCAxMDUsIDI0OCwgMTM3LCAKLSAgICAyMjQsIDE4MywgMjE0LCAxMzIsIDExMCwgMjI0LCAxODMsIDIxNCwgMTMwLCAyMjQsIDE0OSwgMjI0LCAxODMsIDIxNCwgCi0gICAgMTMyLCAxMDUsIDIyNCwgMTgzLCAyMTQsIDEyOSwgMjI0LCAxNDgsIDIyMCwgMTI4LCAyMTUsIDI0MiwgMjE4LCAxNTEsIAotICAgIDIxOCwgODksIDI1MSwgNiwgMjUwLCAxNDIsIDI1MCwgMjA5LCAyMzEsIDQzLCAyMTIsIDU5LCAyMzAsIDQzLCAyMTgsIDE1MiwgCi0gICAgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyMTgsIDE1MiwgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyMTksIDIwLCAyNDUsIAotICAgIDE0MywgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyNDUsIDE0MywgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyNDUsIDEwNywgCi0gICAgMjE4LCAxNTIsIDY0LCAyMTgsIDEwNSwgMjE5LCAzNSwgMjE5LCAxNTUsIDI0MiwgMTQxLCAxMzUsIDIzNSwgMTk1LCAyMjAsIAotICAgIDEwNywgMjE5LCAxNTUsIDEzNSwgMjM1LCAxOTUsIDIyMSwgMTk0LCAyNDksIDE3OCwgMjIwLCAxMzUsIDIzNSwgMTk1LCAKLSAgICAyNDksIDExMywgMjE4LCAxMDYsIDIxNiwgMjM2LCAyMTgsIDE2OCwgMjI2LCAxNjksIDIxNywgMTY3LCAyNDksIDIxOCwgCi0gICAgMjI2LCAxNDIsIDIyNCwgMTg0LCAyMzEsIDQyLCAyMjUsIDE5LCAyNTQsIDUzLCAyMjQsIDE3OCwgMjQ5LCAyMTgsIDI1NCwgCi0gICAgNjksIDIyOSwgMTYzLCAyMTksIDIwMCwgNywgNiwgMSwgMjQyLCAyNDksIDcsIDQsIDEsIDI0MiwgMjQ5LCAyNTAsIDE1OSwgCi0gICAgMTY1LCAxLCAyMzIsIDE3NSwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDI0NCwgMzYsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAKLSAgICAyNDQsIDE1NywgMjA5LCAyMDksIDEsIDIyMiwgMjExLCAyMDksIDIwOSwgMSwgMjMyLCAxNTYsIDYzLCAxNjQsIDI1MSwgCi0gICAgMjIzLCAyMjAsIDMsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgMjQzLCAyMTYsIDI0MywgMjE1LCAyNDMsIDIxNCwgCi0gICAgMjMwLCA0NSwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIDI1NCwgMjMyLCAxMDIsIDIyMiwgMjE5LCAyMzIsIDEwMywgMjIyLCAKLSAgICAyMjAsIDIyNSwgMjIzLCAyMzIsIDEwMSwgMjIyLCAyMTgsIDIyOCwgMTA2LCAyMzAsIDE2NSwgMjExLCAyMjksIDIxMiwgMTUsIAotICAgIDI0NSwgMTYyLCAyNDMsIDIyNiwgMjMwLCAyMjksIDIyNiwgMTk3LCAyMTQsIDEzNCwgODcsIDIzMCwgMjI5LCAyNDgsIDE1NywgCi0gICAgODcsIDgsIDMsIDIzNSwgMTU4LCA3OCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyMzMsIDIwLCAxMjcsIAotICAgIDIxMywgMTE4LCAyMTMsIDcsIDIxMiwgMTk1LCAyMTIsIDE4NCwgMjEyLCAxNzMsIDIxMiwgMTYyLCAyMTIsIDE1MSwgMjEyLCAKLSAgICAxNDAsIDIxMiwgMTI5LCAyMTMsIDExNywgMjEzLCAxMDYsIDIxMywgOTUsIDIxMywgODQsIDIxMywgNzMsIDIxMywgNjIsIAotICAgIDIxMywgNTEsIDI1MSwgNzEsIDIyNiwgMTU1LCA3OCwgMjUxLCAxOTYsIDIwOSwgMjUzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgMjEzLCA0MCwgMjEzLCAyOSwgMjEzLCAxOCwgMjEzLCA2LCAyMTIsIDI1MSwgCi0gICAgMjEyLCAyNDAsIDIxMiwgMjI5LCAyMTIsIDIxOCwgMjEyLCAyMDcsIDIxMiwgMTk5LCAyMTIsIDE5OCwgMjEyLCAxOTcsIAotICAgIDIxMiwgMTk2LCAyMTIsIDE5NCwgMjEyLCAxOTMsIDIxMiwgMTkyLCAyMTIsIDE5MSwgMjEyLCAxOTAsIDIxMiwgMTg5LCAKLSAgICAyMTIsIDE4OCwgMjEyLCAxODcsIDIxMiwgMTg2LCAyMTIsIDE4NSwgMjEyLCAxODMsIDIxMiwgMTgyLCAyMTIsIDE4MSwgCi0gICAgMjEyLCAxODAsIDIxMiwgMTc5LCAyMTIsIDE3OCwgMjEyLCAxNzcsIDIxMiwgMTc2LCAyMTIsIDE3NSwgMjEyLCAxNzQsIAotICAgIDIxMiwgMTcyLCAyMTIsIDE3MSwgMjEyLCAxNzAsIDIxMiwgMTY5LCAyMTIsIDE2OCwgMjEyLCAxNjcsIDIxMiwgMTY2LCAKLSAgICAyMTIsIDE2NSwgMjEyLCAxNjQsIDIxMiwgMTYzLCAyMTIsIDE2MSwgMjEyLCAxNjAsIDIxMiwgMTU5LCAyMTIsIDE1OCwgCi0gICAgMjEyLCAxNTcsIDIxMiwgMTU2LCAyMTIsIDE1NSwgMjEyLCAxNTQsIDIxMiwgMTUzLCAyMTIsIDE1MiwgMjEyLCAxNTAsIAotICAgIDIxMiwgMTQ5LCAyMTIsIDE0OCwgMjEyLCAxNDcsIDIxMiwgMTQ2LCAyMTIsIDE0NSwgMjEyLCAxNDQsIDIxMiwgMTQzLCAKLSAgICAyMTIsIDE0MiwgMjEyLCAxNDEsIDIxMiwgMTM5LCAyMTIsIDEzOCwgMjEyLCAxMzcsIDIxMiwgMTM2LCAyMTIsIDEzNSwgCi0gICAgMjEyLCAxMzQsIDIxMiwgMTMzLCAyMTIsIDEzMiwgMjEyLCAxMzEsIDIxMiwgMTMwLCAyMTIsIDEyOCwgMjEyLCAxMjcsIAotICAgIDIxMiwgMTI2LCAyMTIsIDEyNSwgMjEyLCAxMjQsIDIxMiwgMTIzLCAyMTIsIDEyMiwgMjEyLCAxMjEsIDIxMiwgMTIwLCAKLSAgICAyMTIsIDExOSwgMjEzLCAxMTYsIDIxMywgMTE1LCAyMTMsIDExNCwgMjEzLCAxMTMsIDIxMywgMTEyLCAyMTMsIDExMSwgCi0gICAgMjEzLCAxMTAsIDIxMywgMTA5LCAyMTMsIDEwOCwgMjEzLCAxMDcsIDIxMywgMTA1LCAyMTMsIDEwNCwgMjEzLCAxMDMsIAotICAgIDIxMywgMTAyLCAyMTMsIDEwMSwgMjEzLCAxMDAsIDIxMywgOTksIDIxMywgOTgsIDIxMywgOTcsIDIxMywgOTYsIDIxMywgCi0gICAgOTQsIDIxMywgOTMsIDIxMywgOTIsIDIxMywgOTEsIDIxMywgOTAsIDIxMywgODksIDIxMywgODgsIDIxMywgODcsIDIxMywgCi0gICAgODYsIDIxMywgODUsIDIxMywgODMsIDIxMywgODIsIDIxMywgODEsIDIxMywgODAsIDIxMywgNzksIDIxMywgNzgsIDIxMywgCi0gICAgNzcsIDIxMywgNzYsIDIxMywgNzUsIDIxMywgNzQsIDIxMywgNzIsIDIxMywgNzEsIDIxMywgNzAsIDIxMywgNjksIDIxMywgCi0gICAgNjgsIDIxMywgNjcsIDIxMywgNjYsIDIxMywgNjUsIDIxMywgNjQsIDIxMywgNjMsIDIxMywgNjEsIDIxMywgNjAsIDIxMywgCi0gICAgNTksIDIxMywgNTgsIDIxMywgNTcsIDIxMywgNTYsIDIxMywgNTUsIDIxMywgNTQsIDIxMywgNTMsIDIxMywgNTIsIDIxMywgCi0gICAgNTAsIDIxMywgNDksIDIxMywgNDgsIDIxMywgNDcsIDIxMywgNDYsIDIxMywgNDUsIDIxMywgNDQsIDIxMywgNDMsIDIxMywgCi0gICAgNDIsIDIxMywgNDEsIDIxMywgMzksIDIxMywgMzgsIDIxMywgMzcsIDIxMywgMzYsIDIxMywgMzUsIDIxMywgMzQsIDIxMywgCi0gICAgMzMsIDIxMywgMzIsIDIxMywgMzEsIDIxMywgMzAsIDIxMywgMjgsIDIxMywgMjcsIDIxMywgMjYsIDIxMywgMjUsIDIxMywgCi0gICAgMjQsIDIxMywgMjMsIDIxMywgMjIsIDIxMywgMjEsIDIxMywgMjAsIDIxMywgMTksIDIxMywgMTcsIDIxMywgMTYsIDIxMywgCi0gICAgMTUsIDIxMywgMTQsIDIxMywgMTMsIDIxMywgMTIsIDIxMywgMTEsIDIxMywgMTAsIDIxMywgOSwgMjEzLCA4LCAyMTMsIDUsIAotICAgIDIxMywgNCwgMjEzLCAzLCAyMTMsIDIsIDIxMywgMSwgMjEzLCAwLCAyMTIsIDI1NSwgMjEyLCAyNTQsIDIxMiwgMjUzLCAKLSAgICAyMTIsIDI1MiwgMjEyLCAyNTAsIDIxMiwgMjQ5LCAyMTIsIDI0OCwgMjEyLCAyNDcsIDIxMiwgMjQ2LCAyMTIsIDI0NSwgCi0gICAgMjEyLCAyNDQsIDIxMiwgMjQzLCAyMTIsIDI0MiwgMjEyLCAyNDEsIDIxMiwgMjM5LCAyMTIsIDIzOCwgMjEyLCAyMzcsIAotICAgIDIxMiwgMjM2LCAyMTIsIDIzNSwgMjEyLCAyMzQsIDIxMiwgMjMzLCAyMTIsIDIzMiwgMjEyLCAyMzEsIDIxMiwgMjMwLCAKLSAgICAyMTIsIDIyOCwgMjEyLCAyMjcsIDIxMiwgMjI2LCAyMTIsIDIyNSwgMjEyLCAyMjQsIDIxMiwgMjIzLCAyMTIsIDIyMiwgCi0gICAgMjEyLCAyMjEsIDIxMiwgMjIwLCAyMTIsIDIxOSwgMjEyLCAyMTcsIDIxMiwgMjE2LCAyMTIsIDIxNSwgMjEyLCAyMTQsIAotICAgIDIxMiwgMjEzLCAyMTIsIDIxMiwgMjEyLCAyMTEsIDIxMiwgMjEwLCAyMTIsIDIwOSwgMjEyLCAyMDgsIDIxMiwgMjA2LCAKLSAgICAyMTIsIDIwNSwgMjEyLCAyMDQsIDIxMiwgMjAzLCAyMTIsIDIwMiwgMjEyLCAyMDEsIDIxMiwgMjAwLCA3LCA2LCAxLCAxMTUsIAotICAgIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgCi0gICAgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAKLSAgICAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMjI5LCAKLSAgICA4MCwgMiwgMjE2LCA4OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAKLSAgICA2NywgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDY3LCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAKLSAgICA1OSwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCAKLSAgICA3NywgMjIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDU5LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgCi0gICAgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCAxODIsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIDEsIDIzMywgCi0gICAgMTQ5LCAyLCAxODIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxODIsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDE4MiwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgMTgyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMjA0LCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTUsIAotICAgIDk0LCAyMTQsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIyMSwgMTk2LCAKLSAgICAyLCAxNDIsIDcsIDQsIDEsIDI0MSwgNTEsIDIyMSwgMTk2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQxLCA1MSwgMjIxLCAKLSAgICAxOTYsIDIsIDE0MiwgMTQ2LCAxLCAyMzQsIDEwOSwgMzYsIDExNiwgMjM1LCAyMywgMzYsIDExNiwgMjI5LCA3OSwgMzYsIAotICAgIDExNiwgMjUxLCA2NiwgMzYsIDExNiwgMjI3LCAxNjcsIDM2LCAxMTYsIDIxNSwgMTU5LCAzNiwgMTE2LCAyMjgsIDExMSwgCi0gICAgMzYsIDExNiwgMjE3LCAxNTIsIDM2LCAxMTYsIDIzMCwgMjUsIDM2LCAxMTYsIDIyNiwgMTA1LCAzNiwgMTE2LCAxOTMsIDM2LCAKLSAgICAxMTYsIDIxMSwgMTE3LCAzNiwgMTE2LCAxNTMsIDM2LCAxMTYsIDE1NiwgMzYsIDExNiwgMjE0LCAxMDUsIDM2LCAxMTYsIAotICAgIDIzMiwgMTc2LCAzNiwgMTE2LCAyMzIsIDE4NSwgMzYsIDExNiwgMjIyLCAxODAsIDM2LCAxMTYsIDIyOCwgOTMsIDM2LCAKLSAgICAxMTYsIDIzNSwgMTQ0LCAzNiwgMTE2LCAyMjAsIDEwNCwgMzYsIDExNiwgMjE4LCAyMjYsIDM2LCAxMTYsIDIyMiwgOTEsIAotICAgIDM2LCAxMTYsIDI0MiwgNjAsIDM2LCAxMTYsIDIzMywgMjMyLCAzNiwgMywgMjM1LCAxMCwgMzYsIDMsIDIzNCwgOTIsIDM2LCAKLSAgICAzLCAyMzQsIDgzLCAzNiwgMywgMjMzLCAyMTcsIDM2LCAzLCAyMzMsIDE4OCwgMzYsIDMsIDIzNCwgMTgyLCAzNiwgMywgCi0gICAgMjM0LCAxODEsIDM2LCAzLCAyMzQsIDI0NiwgMzYsIDMsIDIzNCwgMjgsIDM2LCAzLCAyMzQsIDEwLCAzNiwgMywgMjM0LCAKLSAgICAxOTUsIDM2LCAzLCAyMjksIDc2LCAzNiwgMywgMjI5LCAyNywgMzYsIDMsIDIyOSwgMjMsIDM2LCAzLCAyMjgsIDI0OCwgMzYsIAotICAgIDMsIDIyOCwgMjQxLCAzNiwgMywgMjI5LCA2NCwgMzYsIDMsIDIyOSwgNjIsIDM2LCAzLCAyMjksIDczLCAzNiwgMywgMjI5LCAKLSAgICA0LCAzNiwgMywgMjI4LCAyNTUsIDM2LCAzLCAyMjksIDY2LCAzNiwgMywgMjUxLCAzMiwgMzYsIDMsIDI1MCwgNTEsIDM2LCAKLSAgICAzLCAyNTAsIDQxLCAzNiwgMywgMjQ5LCAxMTIsIDM2LCAzLCAyNDksIDgzLCAzNiwgMywgMjUwLCAxOTAsIDM2LCAzLCAyNTAsIAotICAgIDE4MiwgMzYsIDMsIDI1MSwgMjIsIDM2LCAzLCAyNDksIDIzOCwgMzYsIDMsIDI0OSwgMTc0LCAzNiwgMywgMjUwLCAyMjIsIAotICAgIDM2LCAzLCAyMjcsIDE2NCwgMzYsIDMsIDIyNywgMTQ4LCAzNiwgMywgMjI3LCAxNDMsIDM2LCAzLCAyMjcsIDEyOCwgMzYsIAotICAgIDMsIDIyNywgMTIxLCAzNiwgMywgMjI3LCAxNTYsIDM2LCAzLCAyMjcsIDE1NSwgMzYsIDMsIDIyNywgMTYxLCAzNiwgMywgCi0gICAgMjI3LCAxMzQsIDM2LCAzLCAyMjcsIDEzMiwgMzYsIDMsIDIyNywgMTU5LCAzNiwgMywgMjE1LCAxNTUsIDM2LCAzLCAyMTUsIAotICAgIDEzNSwgMzYsIDMsIDIxNSwgMTM0LCAzNiwgMywgMjE1LCAxMjMsIDM2LCAzLCAyMTUsIDEyMCwgMzYsIDMsIDIxNSwgMTUxLCAKLSAgICAzNiwgMywgMjE1LCAxNTAsIDM2LCAzLCAyMTUsIDE1NCwgMzYsIDMsIDIxNSwgMTMzLCAzNiwgMywgMjE1LCAxMzIsIDM2LCAKLSAgICAzLCAyMTUsIDE1MywgMzYsIDMsIDIyOCwgMTA5LCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIDIyOCwgOTQsIDM2LCAzLCAyMjgsIAotICAgIDc4LCAzNiwgMywgMjI4LCA3NywgMzYsIDMsIDIyOCwgMTA1LCAzNiwgMywgMjI4LCAxMDQsIDM2LCAzLCAyMjgsIDEwOCwgCi0gICAgMzYsIDMsIDIyOCwgODAsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCAxMDcsIDM2LCAzLCAyMTcsIDEwMSwgMzYsIDMsIAotICAgIDIxNiwgMTE3LCAzNiwgMywgMjE2LCAxMDMsIDM2LCAzLCAyMTUsIDExOCwgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIAotICAgIDIyLCAzNiwgMywgMjE3LCAxMSwgMzYsIDMsIDIxNywgNzksIDM2LCAzLCAxMTEsIDM2LCAzLCAyMTYsIDE3LCAzNiwgMywgCi0gICAgMjE3LCA0MSwgMzYsIDMsIDIyOSwgMjI1LCAzNiwgMywgMjI4LCAyMzMsIDM2LCAzLCAyMjgsIDIwOCwgMzYsIDMsIDIyNywgCi0gICAgMjM3LCAzNiwgMywgMjI3LCAxNzksIDM2LCAzLCAyMjksIDEwNywgMzYsIDMsIDIyOSwgMTAzLCAzNiwgMywgMjI5LCAyMTIsIAotICAgIDM2LCAzLCAyMjgsIDc0LCAzNiwgMywgMjI4LCA2NCwgMzYsIDMsIDIyOSwgMTg3LCAzNiwgMywgMjI2LCA4OSwgMzYsIDMsIAotICAgIDIyNSwgMTA4LCAzNiwgMywgMjI1LCA3MSwgMzYsIDMsIDIyNCwgMTUwLCAzNiwgMywgMjI0LCAxMTksIDM2LCAzLCAyMjUsIAotICAgIDIyMSwgMzYsIDMsIDIyNSwgMjExLCAzNiwgMywgMjI2LCA3MSwgMzYsIDMsIDIyNSwgMTYsIDM2LCAzLCAyMjQsIDI0OSwgCi0gICAgMzYsIDMsIDIyNSwgMjM0LCAzNiwgMywgMjMxLCAyMzcsIDM2LCAzLCAyMzAsIDIzMCwgMzYsIDMsIDIzMCwgMjAxLCAzNiwgCi0gICAgMywgMjMwLCAxMDIsIDM2LCAzLCAyMzAsIDU0LCAzNiwgMywgMjMxLCA5MSwgMzYsIDMsIDIzMSwgODAsIDM2LCAzLCAyMzEsIAotICAgIDIwMywgMzYsIDMsIDIzMCwgMTYxLCAzNiwgMywgMjMwLCAxMzIsIDM2LCAzLCAyMzEsIDEzNSwgMzYsIDMsIDIxMSwgMTAzLCAKLSAgICAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgCi0gICAgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIAotICAgIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NCwgMzYsIDMsIDIyMywgMzUsIDM2LCAzLCAyMjIsIDIzOSwgCi0gICAgMzYsIDMsIDIyMiwgMTQwLCAzNiwgMywgMjIyLCAxMTIsIDM2LCAzLCAyMjMsIDEyOCwgMzYsIDMsIDIyMywgMTA4LCAzNiwgCi0gICAgMywgMjIzLCAxNjYsIDM2LCAzLCAyMjIsIDIxMSwgMzYsIDMsIDIyMiwgMTk3LCAzNiwgMywgMjIzLCAxMzYsIDM2LCAzLCAKLSAgICAyMzMsIDEzNCwgMzYsIDMsIDIzMiwgMjQxLCAzNiwgMywgMjMyLCAyMjcsIDM2LCAzLCAyMzIsIDk4LCAzNiwgMywgMjMyLCAKLSAgICA3MywgMzYsIDMsIDIzMywgNTgsIDM2LCAzLCAyMzMsIDUwLCAzNiwgMywgMjMzLCAxMDksIDM2LCAzLCAyMzIsIDE1NiwgMzYsIAotICAgIDMsIDIzMiwgMTI3LCAzNiwgMywgMjMzLCA3NCwgMzYsIDMsIDIxNCwgMjYsIDM2LCAzLCAyMTMsIDE3NiwgMzYsIDMsIDIxMywgCi0gICAgMTYyLCAzNiwgMywgMjEyLCAxMTYsIDM2LCAzLCAyMTIsIDEwOSwgMzYsIDMsIDIxMywgMjU1LCAzNiwgMywgMjEzLCAyNTAsIAotICAgIDM2LCAzLCAyMTQsIDIzLCAzNiwgMywgMjEzLCAxMzgsIDM2LCAzLCAyMTMsIDEyNywgMzYsIDMsIDIxNCwgNSwgMzYsIDMsIAotICAgIDIzMiwgMTc0LCAzNiwgMywgMjMyLCAxNjksIDM2LCAzLCAyMzIsIDE2OCwgMzYsIDMsIDIzMiwgMTY1LCAzNiwgMywgMjMyLCAKLSAgICAxNjQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE2NywgCi0gICAgMzYsIDMsIDIzMiwgMTY2LCAzNiwgMywgMjMyLCAxNzIsIDM2LCAzLCAyMzIsIDE4MywgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCi0gICAgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE2MSwgMzYsIDMsIDIzMiwgMTYwLCAzNiwgMywgMjMyLCAxODAsIDM2LCAzLCAKLSAgICAyMzIsIDE3OSwgMzYsIDMsIDIzMiwgMTgyLCAzNiwgMywgMjMyLCAxNjMsIDM2LCAzLCAyMzIsIDE2MiwgMzYsIDMsIDIzMiwgCi0gICAgMTgxLCAzNiwgMywgMjIyLCAxNzgsIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgMjIyLCAxNjAsIAotICAgIDM2LCAzLCAyMjIsIDE1MywgMzYsIDMsIDIyMiwgMTc0LCAzNiwgMywgMjIyLCAxNzMsIDM2LCAzLCAyMjIsIDE3NywgMzYsIAotICAgIDMsIDIyMiwgMTY1LCAzNiwgMywgMjIyLCAxNjQsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIDMsIDIyOCwgOTEsIDM2LCAzLCAKLSAgICAyMjgsIDg2LCAzNiwgMywgMjI4LCA4NSwgMzYsIDMsIDIyOCwgODIsIDM2LCAzLCAyMjgsIDgxLCAzNiwgMywgMjI4LCA4OCwgCi0gICAgMzYsIDMsIDIyOCwgODcsIDM2LCAzLCAyMjgsIDkwLCAzNiwgMywgMjI4LCA4NCwgMzYsIDMsIDIyOCwgODMsIDM2LCAzLCAKLSAgICAyMjgsIDg5LCAzNiwgMywgMjM1LCAxNDAsIDM2LCAzLCAyMzUsIDEwOCwgMzYsIDMsIDIzNSwgMTAxLCAzNiwgMywgMjM1LCAKLSAgICA1MSwgMzYsIDMsIDIzNSwgMzMsIDM2LCAzLCAyMzUsIDEyNiwgMzYsIDMsIDIzNSwgMTI0LCAzNiwgMywgMjM1LCAxMzUsIAotICAgIDM2LCAzLCAyMzUsIDY4LCAzNiwgMywgMjM1LCA1OSwgMzYsIDMsIDIzNSwgMTI5LCAzNiwgMywgMjIwLCA5OCwgMzYsIDMsIAotICAgIDIyMCwgMzIsIDM2LCAzLCAyMjAsIDI3LCAzNiwgMywgMjE5LCAyMjUsIDM2LCAzLCAyMTksIDIxMCwgMzYsIDMsIDIyMCwgCi0gICAgNjMsIDM2LCAzLCAyMjAsIDYxLCAzNiwgMywgMjIwLCA5MCwgMzYsIDMsIDIyMCwgNywgMzYsIDMsIDIyMCwgMSwgMzYsIDMsIAotICAgIDIyMCwgNzEsIDM2LCAzLCAyMTgsIDIyMiwgMzYsIDMsIDIxOCwgMTkyLCAzNiwgMywgMjE4LCAxODgsIDM2LCAzLCAyMTgsIAotICAgIDE3OSwgMzYsIDMsIDIxOCwgMTc2LCAzNiwgMywgMjE4LCAxOTcsIDM2LCAzLCAyMTgsIDE5NiwgMzYsIDMsIDIxOCwgMjIxLCAKLSAgICAzNiwgMywgMjE4LCAxODQsIDM2LCAzLCAyMTgsIDE4MywgMzYsIDMsIDIxOCwgMTk5LCAzNiwgMywgMjIyLCAzMSwgMzYsIDMsIAotICAgIDIxOSwgMTkxLCAzNiwgMywgMjE5LCAxNzUsIDM2LCAzLCAyMTgsIDgzLCAzNiwgMywgMjE4LCA0LCAzNiwgMywgMjIxLCAKLSAgICAxODEsIDM2LCAzLCAyMjEsIDE3MCwgMzYsIDMsIDIyMiwgMTcsIDM2LCAzLCAyMTksIDU4LCAzNiwgMywgMjE5LCA0MCwgMzYsIAotICAgIDMsIDIyMSwgMjE5LCAzNiwgMywgMjQyLCA0NiwgMzYsIDMsIDI0MSwgMTgwLCAzNiwgMywgMjQxLCAxNjEsIDM2LCAzLCAKLSAgICAyNDAsIDIyMiwgMzYsIDMsIDI0MCwgMjAyLCAzNiwgMywgMjQxLCAyMzgsIDM2LCAzLCAyNDEsIDIyMCwgMzYsIDMsIDI0MiwgCi0gICAgMzYsIDM2LCAzLCAyNDEsIDY4LCAzNiwgMywgMjQxLCA1MywgMzYsIDMsIDI0MSwgMjQ2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAKLSAgICAzLCAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI1LCAzNiwgMywgMjMzLCAyMjQsIDM2LCAzLCAyMzMsIDIyMSwgMzYsIDMsIAotICAgIDIzMywgMjIwLCAzNiwgMywgMjMzLCAyMjcsIDM2LCAzLCAyMzMsIDIyNiwgMzYsIDMsIDIzMywgMjI5LCAzNiwgMywgMjMzLCAKLSAgICAyMjMsIDM2LCAzLCAyMzMsIDIyMiwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjE5LCAyMzEsIDE3NSwgMTE2LCA1LCAyMTEsIAotICAgIDY4LCAxNzUsIDExNiwgNSwgMjIzLCAxNTUsIDE3NSwgMTE2LCA1LCAyMjMsIDc4LCA5OCwgMSwgMjE1LCAyOCwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDE3NiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTMyLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgCi0gICAgMjM0LCAyOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTA1LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI5LCA0LCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUxLCAzMywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MCwgMTU3LCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMjQ5LCAyMzgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTAsIDg2LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjI3LCAxMzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNDgsIDIyMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNSwgCi0gICAgMTQ0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjQ3LCAxNDUsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTUsIDEzOSwgNjksIAotICAgIDExNiwgNSwgMjQ5LCAyMzMsIDE5NywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNywgMTA1LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjE2LCAyMDgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxMTEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTYsIDE1NiwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyOCwgNzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTIsIDE5MSwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDIyNSwgMTQ3LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI1LCAxNiwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIyNSwgMTIxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMwLCAxNjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTAsIAotICAgIDI0NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMiwgMjExLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMyLCAxNTYsIDY5LCAKLSAgICAxMTYsIDUsIDI0OSwgMjMzLCAyMTMsIDEzOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMCwgMTAyLCA2OSwgMTE2LCA1LCAKLSAgICAyNDksIDIzMywgMjE4LCAyMjMsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMDYsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxNjIsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzMsIDEzNSwgNjksIDI1LCA1LCAyNDksIDIzMywgMjI0LCA4OCwgNjksIDIzNSwgCi0gICAgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyNCwgMzAsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjIsIDEwMCwgCi0gICAgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyMiwgOTMsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAKLSAgICAyMjQsIDY5LCA2OSwgMjUsIDUsIDIyNiwgMjA0LCA2OSwgMjUsIDUsIDI1NSwgMzQsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgCi0gICAgNzcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgMjcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCAxNDEsIDEsIDI1MSwgCi0gICAgMjU1LCAyMjksIDY0LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIDQsIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA3NywgNTYsIDEsIAotICAgIDI1MSwgMjU1LCAyMjksIDI3LCA1NiwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNjQsIAotICAgIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA0LCA1NiwgMSwgMjU0LCAxOTQsIDI1MCwgMTkwLCA1NiwgMSwgMjU0LCAxOTQsIDIxNSwgCi0gICAgMTE4LCA1NiwgMSwgMjU0LCAxOTQsIDExMSwgNTYsIDEsIDI1NCwgMTk0LCAyMjYsIDEwNSwgNTgsIDEsIDI0NSwgMjAsIAotICAgIDI0NSwgMTksIDI0OSwgMTgyLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NSwgMjAsIDI0OSwgMTgyLCAxMzgsIDEzMCwgCisgICAgNDUsIDEwOCwgMTYsIDMxLCAyMjUsIDEyOCwgMjE4LCA0NSwgMTA4LCAxNiwgMzEsIDg1LCAyMTgsIDQ1LCAxMDgsIDE2LCAKKyAgICAzMSwgMjMxLCA2MCwgMjE4LCA3MiwgMTA4LCAxNiwgMzEsIDIzMSwgNjAsIDIxOCwgNzEsIDEwOCwgMTYsIDMxLCAyMzEsIAorICAgIDYwLCAyMTgsIDcwLCAxMDgsIDE2LCAzMSwgMjUwLCA0NiwgMTA4LCAxNiwgMzEsIDIyMiwgMywgMTA4LCAxNiwgMzEsIDIyOCwgCisgICAgMTkzLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDEsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MCwgMTA4LCAxNiwgMzEsIDIyMiwgMjA2LCAKKyAgICAyMjIsIDMsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNiwgMjIyLCAyLCAxMDgsIDE2LCAzMSwgMjQyLCAxNzMsIDEwOCwgMTYsIAorICAgIDMxLCAyMTksIDE2OCwgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAKKyAgICAyMjYsIDE1NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjM1LCAxODMsIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIAorICAgIDIzNSwgMTgzLCAxMDgsIDE2LCAzMSwgMjQ5LCAxNzYsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjM1LCAxODIsIDIyNiwgCisgICAgMTU3LCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyNDksIAorICAgIDE3NSwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjQ5LCAxNzQsIDEwOCwgMTYsIDMxLCAyNDksIDE3NiwgMjU0LCA5MSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI0OSwgMTc2LCAyNTQsIDkxLCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIAorICAgIDIyMiwgNCwgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjEzLCAyNDMsIDEwOCwgMTYsIDMxLCAyMTYsIDg1LCAyMjYsIAorICAgIDE1NywgMTA4LCAxNiwgMzEsIDIzMywgNjMsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjU0LCA5MCwgMjI2LCAxNTcsIDEwOCwgCisgICAgMTYsIDMxLCAyMTgsIDczLCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIAorICAgIDMxLCAyMTgsIDczLCA2NCwgMjIyLCA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIxMywgMTU4LCA2NCwgMjU0LCA4OSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OCwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTAzLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDIsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgMTA4LCAKKyAgICAxNiwgMzEsIDIyMywgMTAwLCAxMDgsIDE2LCAzMSwgMjU0LCAxNjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE2NSwgMTA4LCAxNiwgCisgICAgMzEsIDIzMSwgMTY4LCAxMDgsIDE2LCAzMSwgMjIyLCA5LCAxMDgsIDE2LCAzMSwgMjUzLCAyNTQsIDEwOCwgMTYsIDMxLCAKKyAgICAyMjMsIDEyOCwgMTA4LCAxNiwgMzEsIDIyMywgMTI3LCAxMDgsIDE2LCAzMSwgMjUzLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIAorICAgIDIzNywgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMTcsIDUwLCAxMDgsIDE2LCAzMSwgMjE3LCA0OSwgMTA4LCAxNiwgMzEsIAorICAgIDIyNCwgMTEsIDIzMiwgMjI4LCAxMDgsIDE2LCAzMSwgMjUxLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIDE5MCwgMTA4LCAxNiwgCisgICAgMzEsIDI1MSwgMTg5LCAxMDgsIDE2LCAzMSwgMjU0LCAxNDYsIDEwOCwgMTYsIDMxLCAyMjYsIDIyMiwgMTA4LCAxNiwgMzEsIAorICAgIDIxOCwgMjUwLCAxMDgsIDE2LCAzMSwgMjE2LCA4MywgMTA4LCAxNiwgMzEsIDI0MiwgMTAzLCAxMDgsIDE2LCAzMSwgMjEyLCAKKyAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI5LCAxMDgsIDE2LCAzMSwgMjUxLCAyMiwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAorICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI1NCwgMjMwLCAxMjcsIDEwOCwgMTYsIDMxLCAyMjEsIDIwNCwgNjQsIDIzNSwgNjEsIDEwOCwgCisgICAgMTYsIDMxLCAyNTEsIDMzLCAxMDgsIDE2LCAzMSwgMjE1LCAyMjAsIDEwOCwgMTYsIDMxLCAyMTgsIDE1NiwgMjE1LCAyMjAsIAorICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE1NCwgMTA4LCAxNiwgMzEsIDIxOSwgNTgsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKKyAgICAxNiwgMzEsIDI0MCwgMjUzLCAyNDYsIDcyLCAxMDgsIDE2LCAzMSwgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNywgCisgICAgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyNTEsIDE1MCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI4LCAyNTEsIDE1MCwgMTA4LCAKKyAgICAxNiwgMzEsIDI1NCwgMTQzLCAxMDgsIDE2LCAzMSwgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE4LCAxMDgsIDE2LCAzMSwgCisgICAgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE3LCAxMDgsIDE2LCAzMSwgMjE4LCA2OSwgMTA4LCAxNiwgMzEsIDIyNCwgMjAzLCAKKyAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODksIDEwOCwgMTYsIDMxLCAyNDcsIDE5MSwgMTA4LCAxNiwgMzEsIDI0NywgMTkwLCAxMDgsIAorICAgIDE2LCAzMSwgMjI0LCAxMzQsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMywgMTA4LCAxNiwgMzEsIDI0OSwgMTMwLCAxMDgsIDE2LCAKKyAgICAzMSwgMjQ5LCAxMjksIDEwOCwgMTYsIDMxLCAyNDksIDEyOCwgMTA4LCAxNiwgMzEsIDI0OSwgMTI3LCAxMDgsIDE2LCAzMSwgCisgICAgMjQ5LCAxMjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE3OCwgMTA4LCAxNiwgMzEsIDI1MiwgMTI3LCA2NCwgMjMxLCAxNTQsIAorICAgIDEwOCwgMTYsIDMxLCAyNTIsIDEyNywgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDYwLCAxMDgsIDE2LCAzMSwgCisgICAgMjQwLCAyNDUsIDEwOCwgMTYsIDMxLCAyMjgsIDIxNywgMTA4LCAxNiwgMzEsIDI0OCwgMTUzLCAxMDgsIDE2LCAzMSwgMjMwLCAKKyAgICAxMzksIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgMTAyLCAxMDgsIDE2LCAzMSwgMTYzLCAyMjYsIDEzNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwOSwgMTAsIDE0LCAyNDAsIDEwOCwgMTAsIDE0LCAyNDAsIDEwNywgMTAsIDE0LCAyNDAsIDEwNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwNSwgMTAsIDE0LCAyNDAsIDEwNCwgMTAsIDE0LCAyNDAsIDEwMywgMTAsIDE0LCAyNDAsIDEwMiwgMTAsIDE0LCAyNDAsIAorICAgIDEwMSwgMTAsIDE0LCAyNDAsIDEwMCwgMTAsIDE0LCAyNDAsIDk5LCAxMCwgMTQsIDI0MCwgOTgsIDEwLCAxNCwgMjQwLCA5NywgCisgICAgMTAsIDE0LCAyNDAsIDk2LCAxMCwgMTQsIDI0MCwgOTUsIDEwLCAxNCwgMjQwLCA5NCwgMTAsIDE0LCAyNDAsIDkzLCAxMCwgCisgICAgMTQsIDI0MCwgOTIsIDEwLCAxNCwgMjQwLCA5MSwgMTAsIDE0LCAyNDAsIDkwLCAxMCwgMTQsIDI0MCwgODksIDEwLCAxNCwgCisgICAgMjQwLCA4OCwgMTAsIDE0LCAyNDAsIDg3LCAxMCwgMTQsIDI0MCwgODYsIDEwLCAxNCwgMjQwLCA4NSwgMTAsIDE0LCAyNDAsIAorICAgIDg0LCAxMCwgMTQsIDI0MCwgODMsIDEwLCAxNCwgMjQwLCA4MiwgMTAsIDE0LCAyNDAsIDgxLCAxMCwgMTQsIDI0MCwgODAsIAorICAgIDEwLCAxNCwgMjQwLCA3OSwgMTAsIDE0LCAyNDAsIDc4LCAxMCwgMTQsIDI0MCwgNzcsIDEwLCAxNCwgMjQwLCA3NiwgMTAsIAorICAgIDE0LCAyNDAsIDc1LCAxMCwgMTQsIDI0MCwgNzQsIDEwLCAxNCwgMjQwLCA3MywgMTAsIDE0LCAyNDAsIDcyLCAxMCwgMTQsIAorICAgIDI0MCwgNzEsIDEwLCAxNCwgMjQwLCA3MCwgMTAsIDE0LCAyNDAsIDY5LCAxMCwgMTQsIDI0MCwgNjgsIDEwLCAxNCwgMjQwLCAKKyAgICA2NywgMTAsIDE0LCAyNDAsIDY2LCAxMCwgMTQsIDI0MCwgNjUsIDEwLCAxNCwgMjQwLCA2NCwgMTAsIDE0LCAyNDAsIDYzLCAKKyAgICAxMCwgMTQsIDI0MCwgNjIsIDEwLCAxNCwgMjQwLCA2MSwgMTAsIDE0LCAyNDAsIDYwLCAxMCwgMTQsIDI0MCwgNTksIDEwLCAKKyAgICAxNCwgMjQwLCA1OCwgMTAsIDE0LCAyNDAsIDU3LCAxMCwgMTQsIDI0MCwgNTYsIDEwLCAxNCwgMjQwLCA1NSwgMTAsIDE0LCAKKyAgICAyNDAsIDU0LCAxMCwgMTQsIDI0MCwgNTMsIDEwLCAxNCwgMjQwLCA1MiwgMTAsIDE0LCAyNDAsIDUxLCAxMCwgMTQsIDI0MCwgCisgICAgNTAsIDEwLCAxNCwgMjQwLCA0OSwgMTAsIDE0LCAyNDAsIDQ4LCAxMCwgMTQsIDI0MCwgNDcsIDEwLCAxNCwgMjQwLCA0NiwgCisgICAgMTAsIDE0LCAyNDAsIDQ1LCAxMCwgMTQsIDI0MCwgNDQsIDEwLCAxNCwgMjQwLCA0MywgMTAsIDE0LCAyNDAsIDQyLCAxMCwgCisgICAgMTQsIDI0MCwgNDEsIDEwLCAxNCwgMjQwLCA0MCwgMTAsIDE0LCAyNDAsIDM5LCAxMCwgMTQsIDI0MCwgMzgsIDEwLCAxNCwgCisgICAgMjQwLCAzNywgMTAsIDE0LCAyNDAsIDM2LCAxMCwgMTQsIDI0MCwgMzUsIDEwLCAxNCwgMjQwLCAzNCwgMTAsIDE0LCAyNDAsIAorICAgIDMzLCAxMCwgMTQsIDI0MCwgMzIsIDEwLCAxNCwgMjQwLCAzMSwgMTAsIDE0LCAyNDAsIDMwLCAxMCwgMTQsIDI0MCwgMjksIAorICAgIDEwLCAxNCwgMjQwLCAyOCwgMTAsIDE0LCAyNDAsIDI3LCAxMCwgMTQsIDI0MCwgMjYsIDEwLCAxNCwgMjQwLCAyNSwgMTAsIAorICAgIDE0LCAyNDAsIDI0LCAxMCwgMTQsIDI0MCwgMjMsIDEwLCAxNCwgMjQwLCAyMiwgMTAsIDE0LCAyNDAsIDIxLCAxMCwgMTQsIAorICAgIDI0MCwgMjAsIDEwLCAxNCwgMjQwLCAxOSwgMTAsIDE0LCAyNDAsIDE4LCAxMCwgMTQsIDI0MCwgMTcsIDEwLCAxNCwgMjQwLCAKKyAgICAxNiwgMTAsIDE0LCAyNDAsIDE1LCAxMCwgMTQsIDI0MCwgMTQsIDEwLCAxNCwgMjQwLCAxMywgMTAsIDE0LCAyNDAsIDEyLCAKKyAgICAxMCwgMTQsIDI0MCwgMTEsIDEwLCAxNCwgMjQwLCAxMCwgMTAsIDE0LCAyNDAsIDksIDEwLCAxNCwgMjQwLCA4LCAxMCwgMTQsIAorICAgIDI0MCwgNywgMTAsIDE0LCAyNDAsIDYsIDEwLCAxNCwgMjQwLCA1LCAxMCwgMTQsIDI0MCwgNCwgMTAsIDE0LCAyNDAsIDMsIAorICAgIDEwLCAxNCwgMjQwLCAyLCAxMCwgMTQsIDI0MCwgMSwgMTAsIDE0LCAyNDAsIDAsIDEwLCAxNCwgMjM5LCAyNTUsIDEwLCAxNCwgCisgICAgMjM5LCAyNTQsIDEwLCAxNCwgMjM5LCAyNTMsIDEwLCAxNCwgMjM5LCAyNTIsIDEwLCAxNCwgMjM5LCAyNTEsIDEwLCAxNCwgCisgICAgMjM5LCAyNTAsIDEwLCAxNCwgMjM5LCAyNDksIDEwLCAxNCwgMjM5LCAyNDgsIDEwLCAxNCwgMjM5LCAyNDcsIDEwLCAxNCwgCisgICAgMjM5LCAyNDYsIDEwLCAxNCwgMjM5LCAyNDUsIDEwLCAxNCwgMjM5LCAyNDQsIDEwLCAxNCwgMjM5LCAyNDMsIDEwLCAxNCwgCisgICAgMjM5LCAyNDIsIDEwLCAxNCwgMjM5LCAyNDEsIDEwLCAxNCwgMjM5LCAyNDAsIDEwLCAxNCwgMjM5LCAyMzksIDEwLCAxNCwgCisgICAgMjM5LCAyMzgsIDEwLCAxNCwgMjM5LCAyMzcsIDEwLCAxNCwgMjM5LCAyMzYsIDEwLCAxNCwgMjM5LCAyMzUsIDEwLCAxNCwgCisgICAgMjM5LCAyMzQsIDEwLCAxNCwgMjM5LCAyMzMsIDEwLCAxNCwgMjM5LCAyMzIsIDEwLCAxNCwgMjM5LCAyMzEsIDEwLCAxNCwgCisgICAgMjM5LCAyMzAsIDEwLCAxNCwgMjM5LCAyMjksIDEwLCAxNCwgMjM5LCAyMjgsIDEwLCAxNCwgMjM5LCAyMjcsIDEwLCAxNCwgCisgICAgMjM5LCAyMjYsIDEwLCAxNCwgMjM5LCAyMjUsIDEwLCAxNCwgMjM5LCAyMjQsIDEwLCAxNCwgMjM5LCAyMjMsIDEwLCAxNCwgCisgICAgMjM5LCAyMjIsIDEwLCAxNCwgMjM5LCAyMjEsIDEwLCAxNCwgMjM5LCAyMjAsIDEwLCAxNCwgMjM5LCAyMTksIDEwLCAxNCwgCisgICAgMjM5LCAyMTgsIDEwLCAxNCwgMjM5LCAyMTcsIDEwLCAxNCwgMjM5LCAyMTYsIDEwLCAxNCwgMjM5LCAyMTUsIDEwLCAxNCwgCisgICAgMjM5LCAyMTQsIDEwLCAxNCwgMjM5LCAyMTMsIDEwLCAxNCwgMjM5LCAyMTIsIDEwLCAxNCwgMjM5LCAyMTEsIDEwLCAxNCwgCisgICAgMjM5LCAyMTAsIDEwLCAxNCwgMjM5LCAyMDksIDEwLCAxNCwgMjM5LCAyMDgsIDEwLCAxNCwgMjM5LCAyMDcsIDEwLCAxNCwgCisgICAgMjM5LCAyMDYsIDEwLCAxNCwgMjM5LCAyMDUsIDEwLCAxNCwgMjM5LCAyMDQsIDEwLCAxNCwgMjM5LCAyMDMsIDEwLCAxNCwgCisgICAgMjM5LCAyMDIsIDEwLCAxNCwgMjM5LCAyMDEsIDEwLCAxNCwgMjM5LCAyMDAsIDEwLCAxNCwgMjM5LCAxOTksIDEwLCAxNCwgCisgICAgMjM5LCAxOTgsIDEwLCAxNCwgMjM5LCAxOTcsIDEwLCAxNCwgMjM5LCAxOTYsIDEwLCAxNCwgMjM5LCAxOTUsIDEwLCAxNCwgCisgICAgMjM5LCAxOTQsIDEwLCAxNCwgMjM5LCAxOTMsIDEwLCAxNCwgMjM5LCAxOTIsIDEwLCAxNCwgMjM5LCAxOTEsIDEwLCAxNCwgCisgICAgMjM5LCAxOTAsIDEwLCAxNCwgMjM5LCAxODksIDEwLCAxNCwgMjM5LCAxODgsIDEwLCAxNCwgMjM5LCAxODcsIDEwLCAxNCwgCisgICAgMjM5LCAxODYsIDEwLCAxNCwgMjM5LCAxODUsIDEwLCAxNCwgMjM5LCAxODQsIDEwLCAxNCwgMjM5LCAxODMsIDEwLCAxNCwgCisgICAgMjM5LCAxODIsIDEwLCAxNCwgMjM5LCAxODEsIDEwLCAxNCwgMjM5LCAxODAsIDEwLCAxNCwgMjM5LCAxNzksIDEwLCAxNCwgCisgICAgMjM5LCAxNzgsIDEwLCAxNCwgMjM5LCAxNzcsIDEwLCAxNCwgMjM5LCAxNzYsIDEwLCAxNCwgMjM5LCAxNzUsIDEwLCAxNCwgCisgICAgMjM5LCAxNzQsIDEwLCAxNCwgMjM5LCAxNzMsIDEwLCAxNCwgMjM5LCAxNzIsIDEwLCAxNCwgMjM5LCAxNzEsIDEwLCAxNCwgCisgICAgMjM5LCAxNzAsIDEwLCAxNCwgMjM5LCAxNjksIDEwLCAxNCwgMjM5LCAxNjgsIDEwLCAxNCwgMjM5LCAxNjcsIDEwLCAxNCwgCisgICAgMjM5LCAxNjYsIDEwLCAxNCwgMjM5LCAxNjUsIDEwLCAxNCwgMjM5LCAxNjQsIDEwLCAxNCwgMjM5LCAxNjMsIDEwLCAxNCwgCisgICAgMjM5LCAxNjIsIDEwLCAxNCwgMjM5LCAxNjEsIDEwLCAxNCwgMjM5LCAxNjAsIDEwLCAxNCwgMjM5LCAxNTksIDEwLCAxNCwgCisgICAgMjM5LCAxNTgsIDEwLCAxNCwgMjM5LCAxNTcsIDEwLCAxNCwgMjM5LCAxNTYsIDEwLCAxNCwgMjM5LCAxNTUsIDEwLCAxNCwgCisgICAgMjM5LCAxNTQsIDEwLCAxNCwgMjM5LCAxNTMsIDEwLCAxNCwgMjM5LCAxNTIsIDEwLCAxNCwgMjM5LCAxNTEsIDEwLCAxNCwgCisgICAgMjM5LCAxNTAsIDEwLCAxNCwgMjM5LCAxNDksIDEwLCAxNCwgMjM5LCAxNDgsIDEwLCAxNCwgMjM5LCAxNDcsIDEwLCAxNCwgCisgICAgMjM5LCAxNDYsIDEwLCAxNCwgMjM5LCAxNDUsIDEwLCAxNCwgMjM5LCAxNDQsIDEwLCAxNCwgMjM5LCAxNDMsIDEwLCAxNCwgCisgICAgMjM5LCAxNDIsIDEwLCAxNCwgMjM5LCAxNDEsIDEwLCAxNCwgMjM5LCAxNDAsIDEwLCAxNCwgMjM5LCAxMzksIDEwLCAxNCwgCisgICAgMjM5LCAxMzgsIDEwLCAxNCwgMjM5LCAxMzcsIDEwLCAxNCwgMjM5LCAxMzYsIDEwLCAxNCwgMjM5LCAxMzUsIDEwLCAxNCwgCisgICAgMjM5LCAxMzQsIDEwLCAxNCwgMjM5LCAxMzMsIDEwLCAxNCwgMjM5LCAxMzIsIDEwLCAxNCwgMjM5LCAxMzEsIDEwLCAxNCwgCisgICAgMjM5LCAxMzAsIDEwLCAxNCwgMjM5LCAxMjksIDEwLCAxNCwgMjM5LCAxMjgsIDEwLCAxNCwgMjM5LCAxMjcsIDEwLCAxNCwgCisgICAgMjM5LCAxMjYsIDEwLCAxNCwgMjM5LCAxMjUsIDEwLCAxNCwgMjM5LCAxMjQsIDEwLCAxNCwgMjM5LCAxMjMsIDEwLCAxNCwgCisgICAgMjM5LCAxMjIsIDEwLCAxNCwgMjM5LCAxMjEsIDEwLCAxNCwgMjM5LCAxMjAsIDEwLCAxNCwgMjM5LCAxMTksIDEwLCAxNCwgCisgICAgMjM5LCAxMTgsIDEwLCAxNCwgMjM5LCAxMTcsIDEwLCAxNCwgMjM5LCAxMTYsIDEwLCAxNCwgMjM5LCAxMTUsIDEwLCAxNCwgCisgICAgMjM5LCAxMTQsIDEwLCAxNCwgMjM5LCAxMTMsIDEwLCAxNCwgMjM5LCAxMTIsIDEwLCAxNCwgMjM5LCAxMTEsIDEwLCAxNCwgCisgICAgMjM5LCAxMTAsIDEwLCAxNCwgMjM5LCAxMDksIDEwLCAxNCwgMjM5LCAxMDgsIDEwLCAxNCwgMjM5LCAxMDcsIDEwLCAxNCwgCisgICAgMjM5LCAxMDYsIDEwLCAxNCwgMjM5LCAxMDUsIDEwLCAxNCwgMjM5LCAxMDQsIDEwLCAxNCwgMjM5LCAxMDMsIDEwLCAxNCwgCisgICAgMjM5LCAxMDIsIDEwLCAxNCwgMjM5LCAxMDEsIDEwLCAxNCwgMjM5LCAxMDAsIDEwLCAxNCwgMjM5LCA5OSwgMTAsIDE0LCAKKyAgICAyMzksIDk4LCAxMCwgMTQsIDIzOSwgOTcsIDEwLCAxNCwgMjM5LCA5NiwgMTAsIDE0LCAyMzksIDk1LCAxMCwgMTQsIDIzOSwgCisgICAgOTQsIDEwLCAxNCwgMjM5LCA5MywgMTAsIDE0LCAyMzksIDkyLCAxMCwgMTQsIDIzOSwgOTEsIDEwLCAxNCwgMjM5LCA5MCwgCisgICAgMTAsIDE0LCAyMzksIDg5LCAxMCwgMTQsIDIzOSwgODgsIDEwLCAxNCwgMjM5LCA4NywgMTAsIDE0LCAyMzksIDg2LCAxMCwgCisgICAgMTQsIDIzOSwgODUsIDEwLCAxNCwgMjM5LCA4NCwgMTAsIDE0LCAyMzksIDgzLCAxMCwgMTQsIDIzOSwgODIsIDEwLCAxNCwgCisgICAgMjM5LCA4MSwgMTAsIDE0LCAyMzksIDgwLCAxMCwgMTQsIDIzOSwgNzksIDEwLCAxNCwgMjM5LCA3OCwgMTAsIDE0LCAyMzksIAorICAgIDc3LCAxMCwgMTQsIDIzOSwgNzYsIDEwLCAxNCwgMjM5LCA3NSwgMTAsIDE0LCAyMzksIDc0LCAxMCwgMTQsIDIzOSwgNzMsIAorICAgIDEwLCAxNCwgMjM5LCA3MiwgMTAsIDE0LCAyMzksIDcxLCAxMCwgMTQsIDIzOSwgNzAsIDEwLCAxNCwgMjM5LCA2OSwgMTAsIAorICAgIDE0LCAyMzksIDY4LCAxMCwgMTQsIDIzOSwgNjcsIDEwLCAxNCwgMjM5LCA2NiwgMTAsIDE0LCAyMzksIDY1LCAxMCwgMTQsIAorICAgIDIzOSwgNjQsIDEwLCAxNCwgMjM5LCA2MywgMTAsIDE0LCAyMzksIDYyLCAxMCwgMTQsIDIzOSwgNjEsIDEwLCAxNCwgMjM5LCAKKyAgICA2MCwgMTAsIDE0LCAyMzksIDU5LCAxMCwgMTQsIDIzOSwgNTgsIDEwLCAxNCwgMjM5LCA1NywgMTAsIDE0LCAyMzksIDU2LCAKKyAgICAxMCwgMTQsIDIzOSwgNTUsIDEwLCAxNCwgMjM5LCA1NCwgMTAsIDE0LCAyMzksIDUzLCAxMCwgMTQsIDIzOSwgNTIsIDEwLCAKKyAgICAxNCwgMjM5LCA1MSwgMTAsIDE0LCAyMzksIDUwLCAxMCwgMTQsIDIzOSwgNDksIDEwLCAxNCwgMjM5LCA0OCwgMTAsIDE0LCAKKyAgICAyMzksIDQ3LCAxMCwgMTQsIDIzOSwgNDYsIDEwLCAxNCwgMjM5LCA0NSwgMTAsIDE0LCAyMzksIDQ0LCAxMCwgMTQsIDIzOSwgCisgICAgNDMsIDEwLCAxNCwgMjM5LCA0MiwgMTAsIDE0LCAyMzksIDQxLCAxMCwgMTQsIDIzOSwgNDAsIDEwLCAxNCwgMjM5LCAzOSwgCisgICAgMTAsIDE0LCAyMzksIDM4LCAxMCwgMTQsIDIzOSwgMzcsIDEwLCAxNCwgMjM5LCAzNiwgMTAsIDE0LCAyMzksIDM1LCAxMCwgCisgICAgMTQsIDIzOSwgMzQsIDEwLCAxNCwgMjM5LCAzMywgMTAsIDE0LCAyMzksIDMyLCAxMCwgMTQsIDIzOSwgMzEsIDEwLCAxNCwgCisgICAgMjM5LCAzMCwgMTAsIDE0LCAyMzksIDI5LCAxMCwgMTQsIDIzOSwgMjgsIDEwLCAxNCwgMjM5LCAyNywgMTAsIDE0LCAyMzksIAorICAgIDI2LCAxMCwgMTQsIDIzOSwgMjUsIDEwLCAxNCwgMjM5LCAyNCwgMTAsIDE0LCAyMzksIDIzLCAxMCwgMTQsIDIzOSwgMjIsIAorICAgIDEwLCAxNCwgMjM5LCAyMSwgMTAsIDE0LCAyMzksIDIwLCAxMCwgMTQsIDIzOSwgMTksIDEwLCAxNCwgMjM5LCAxOCwgMTAsIAorICAgIDE0LCAyMzksIDE3LCAxMCwgMTQsIDIzOSwgMTYsIDEwLCAxNCwgMjM5LCAxNSwgMTAsIDE0LCAyMzksIDE0LCAxMCwgMTQsIAorICAgIDIzOSwgMTMsIDEwLCAxNCwgMjM5LCAxMiwgMTAsIDE0LCAyMzksIDExLCAxMCwgMTQsIDIzOSwgMTAsIDEwLCAxNCwgMjM5LCAKKyAgICA5LCAxMCwgMTQsIDIzOSwgOCwgMTAsIDE0LCAyMzksIDcsIDEwLCAxNCwgMjM5LCA2LCAxMCwgMTQsIDIzOSwgNSwgMTAsIAorICAgIDE0LCAyMzksIDQsIDEwLCAxNCwgMjM5LCAzLCAxMCwgMTQsIDIzOSwgMiwgMTAsIDE0LCAyMzksIDEsIDEwLCAxNCwgMjM5LCAKKyAgICAwLCAxMCwgMTQsIDIzOCwgMjU1LCAxMCwgMTQsIDIzOCwgMjU0LCAxMCwgMTQsIDIzOCwgMjUzLCAxMCwgMTQsIDIzOCwgCisgICAgMjUyLCAxMCwgMTQsIDIzOCwgMjUxLCAxMCwgMTQsIDIzOCwgMjUwLCAxMCwgMTQsIDIzOCwgMjQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ4LCAxMCwgMTQsIDIzOCwgMjQ3LCAxMCwgMTQsIDIzOCwgMjQ2LCAxMCwgMTQsIDIzOCwgMjQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ0LCAxMCwgMTQsIDIzOCwgMjQzLCAxMCwgMTQsIDIzOCwgMjQyLCAxMCwgMTQsIDIzOCwgMjQxLCAxMCwgMTQsIDIzOCwgCisgICAgMjQwLCAxMCwgMTQsIDIzOCwgMjM5LCAxMCwgMTQsIDIzOCwgMjM4LCAxMCwgMTQsIDIzOCwgMjM3LCAxMCwgMTQsIDIzOCwgCisgICAgMjM2LCAxMCwgMTQsIDIzOCwgMjM1LCAxMCwgMTQsIDIzOCwgMjM0LCAxMCwgMTQsIDIzOCwgMjMzLCAxMCwgMTQsIDIzOCwgCisgICAgMjMyLCAxMCwgMTQsIDIzOCwgMjMxLCAxMCwgMTQsIDIzOCwgMjMwLCAxMCwgMTQsIDIzOCwgMjI5LCAxMCwgMTQsIDIzOCwgCisgICAgMjI4LCAxMCwgMTQsIDIzOCwgMjI3LCAxMCwgMTQsIDIzOCwgMjI2LCAxMCwgMTQsIDIzOCwgMjI1LCAxMCwgMTQsIDIzOCwgCisgICAgMjI0LCAxMCwgMTQsIDIzOCwgMjIzLCAxMCwgMTQsIDIzOCwgMjIyLCAxMCwgMTQsIDIzOCwgMjIxLCAxMCwgMTQsIDIzOCwgCisgICAgMjIwLCAxMCwgMTQsIDIzOCwgMjE5LCAxMCwgMTQsIDIzOCwgMjE4LCAxMCwgMTQsIDIzOCwgMjE3LCAxMCwgMTQsIDIzOCwgCisgICAgMjE2LCAxMCwgMTQsIDIzOCwgMjE1LCAxMCwgMTQsIDIzOCwgMjE0LCAxMCwgMTQsIDIzOCwgMjEzLCAxMCwgMTQsIDIzOCwgCisgICAgMjEyLCAxMCwgMTQsIDIzOCwgMjExLCAxMCwgMTQsIDIzOCwgMjEwLCAxMCwgMTQsIDIzOCwgMjA5LCAxMCwgMTQsIDIzOCwgCisgICAgMjA4LCAxMCwgMTQsIDIzOCwgMjA3LCAxMCwgMTQsIDIzOCwgMjA2LCAxMCwgMTQsIDIzOCwgMjA1LCAxMCwgMTQsIDIzOCwgCisgICAgMjA0LCAxMCwgMTQsIDIzOCwgMjAzLCAxMCwgMTQsIDIzOCwgMjAyLCAxMCwgMTQsIDIzOCwgMjAxLCAxMCwgMTQsIDIzOCwgCisgICAgMjAwLCAxMCwgMTQsIDIzOCwgMTk5LCAxMCwgMTQsIDIzOCwgMTk4LCAxMCwgMTQsIDIzOCwgMTk3LCAxMCwgMTQsIDIzOCwgCisgICAgMTk2LCAxMCwgMTQsIDIzOCwgMTk1LCAxMCwgMTQsIDIzOCwgMTk0LCAxMCwgMTQsIDIzOCwgMTkzLCAxMCwgMTQsIDIzOCwgCisgICAgMTkyLCAxMCwgMTQsIDIzOCwgMTkxLCAxMCwgMTQsIDIzOCwgMTkwLCAxMCwgMTQsIDIzOCwgMTg5LCAxMCwgMTQsIDIzOCwgCisgICAgMTg4LCAxMCwgMTQsIDIzOCwgMTg3LCAxMCwgMTQsIDIzOCwgMTg2LCAxMCwgMTQsIDIzOCwgMTg1LCAxMCwgMTQsIDIzOCwgCisgICAgMTg0LCAxMCwgMTQsIDIzOCwgMTgzLCAxMCwgMTQsIDIzOCwgMTgyLCAxMCwgMTQsIDIzOCwgMTgxLCAxMCwgMTQsIDIzOCwgCisgICAgMTgwLCAxMCwgMTQsIDIzOCwgMTc5LCAxMCwgMTQsIDIzOCwgMTc4LCAxMCwgMTQsIDIzOCwgMTc3LCAxMCwgMTQsIDIzOCwgCisgICAgMTc2LCAxMCwgMTQsIDIzOCwgMTc1LCAxMCwgMTQsIDIzOCwgMTc0LCAxMCwgMTQsIDIzOCwgMTczLCAxMCwgMTQsIDIzOCwgCisgICAgMTcyLCAxMCwgMTQsIDIzOCwgMTcxLCAxMCwgMTQsIDIzOCwgMTcwLCAxMCwgMTQsIDIzOCwgMTY5LCAxMCwgMTQsIDIzOCwgCisgICAgMTY4LCAxMCwgMTQsIDIzOCwgMTY3LCAxMCwgMTQsIDIzOCwgMTY2LCAxMCwgMTQsIDIzOCwgMTY1LCAxMCwgMTQsIDIzOCwgCisgICAgMTY0LCAxMCwgMTQsIDIzOCwgMTYzLCAxMCwgMTQsIDIzOCwgMTYyLCAxMCwgMTQsIDIzOCwgMTYxLCAxMCwgMTQsIDIzOCwgCisgICAgMTYwLCAxMCwgMTQsIDIzOCwgMTU5LCAxMCwgMTQsIDIzOCwgMTU4LCAxMCwgMTQsIDIzOCwgMTU3LCAxMCwgMTQsIDIzOCwgCisgICAgMTU2LCAxMCwgMTQsIDIzOCwgMTU1LCAxMCwgMTQsIDIzOCwgMTU0LCAxMCwgMTQsIDIzOCwgMTUzLCAxMCwgMTQsIDIzOCwgCisgICAgMTUyLCAxMCwgMTQsIDIzOCwgMTUxLCAxMCwgMTQsIDIzOCwgMTUwLCAxMCwgMTQsIDIzOCwgMTQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ4LCAxMCwgMTQsIDIzOCwgMTQ3LCAxMCwgMTQsIDIzOCwgMTQ2LCAxMCwgMTQsIDIzOCwgMTQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ0LCAxMCwgMTQsIDIzOCwgMTQzLCAxMCwgMTQsIDIzOCwgMTQyLCAxMCwgMTQsIDIzOCwgMTQxLCAxMCwgMTQsIDIzOCwgCisgICAgMTQwLCAxMCwgMTQsIDIzOCwgMTM5LCAxMCwgMTQsIDIzOCwgMTM4LCAxMCwgMTQsIDIzOCwgMTM3LCAxMCwgMTQsIDIzOCwgCisgICAgMTM2LCAxMCwgMTQsIDIzOCwgMTM1LCAxMCwgMTQsIDIzOCwgMTM0LCAxMCwgMTQsIDIzOCwgMTMzLCAxMCwgMTQsIDIzOCwgCisgICAgMTMyLCAxMCwgMTQsIDIzOCwgMTMxLCAxMCwgMTQsIDIzOCwgMTMwLCAxMCwgMTQsIDIzOCwgMTI5LCAxMCwgMTQsIDIzOCwgCisgICAgMTI4LCAxMCwgMTQsIDIzOCwgMTI3LCAxMCwgMTQsIDIzOCwgMTI2LCAxMCwgMTQsIDIzOCwgMTI1LCAxMCwgMTQsIDIzOCwgCisgICAgMTI0LCAxMCwgMTQsIDIzOCwgMTIzLCAxMCwgMTQsIDIzOCwgMTIyLCAxMCwgMTQsIDIzOCwgMTIxLCAxMCwgMTQsIDIzOCwgCisgICAgMTIwLCAxMCwgMTQsIDIzOCwgMTE5LCAxMCwgMTQsIDIzOCwgMTE4LCAxMCwgMTQsIDIzOCwgMTE3LCAxMCwgMTQsIDIzOCwgCisgICAgMTE2LCAxMCwgMTQsIDIzOCwgMTE1LCAxMCwgMTQsIDIzOCwgMTE0LCAxMCwgMTQsIDIzOCwgMTEzLCAxMCwgMTQsIDIzOCwgCisgICAgMTEyLCAxMCwgMTQsIDIzOCwgMTExLCAxMCwgMTQsIDIzOCwgMTEwLCAxMCwgMTQsIDIzOCwgMTA5LCAxMCwgMTQsIDIzOCwgCisgICAgMTA4LCAxMCwgMTQsIDIzOCwgMTA3LCAxMCwgMTQsIDIzOCwgMTA2LCAxMCwgMTQsIDIzOCwgMTA1LCAxMCwgMTQsIDIzOCwgCisgICAgMTA0LCAxMCwgMTQsIDIzOCwgMTAzLCAxMCwgMTQsIDIzOCwgMTAyLCAxMCwgMTQsIDIzOCwgMTAxLCAxMCwgMTQsIDIzOCwgCisgICAgMTAwLCAxMCwgMTQsIDIzOCwgOTksIDEwLCAxNCwgMjM4LCA5OCwgMTAsIDE0LCAyMzgsIDk3LCAxMCwgMTQsIDIzOCwgOTYsIAorICAgIDEwLCAxNCwgMjM4LCA5NSwgMTAsIDE0LCAyMzgsIDk0LCAxMCwgMTQsIDIzOCwgOTMsIDEwLCAxNCwgMjM4LCA5MiwgMTAsIAorICAgIDE0LCAyMzgsIDkxLCAxMCwgMTQsIDIzOCwgOTAsIDEwLCAxNCwgMjM4LCA4OSwgMTAsIDE0LCAyMzgsIDg4LCAxMCwgMTQsIAorICAgIDIzOCwgODcsIDEwLCAxNCwgMjM4LCA4NiwgMTAsIDE0LCAyMzgsIDg1LCAxMCwgMTQsIDIzOCwgODQsIDEwLCAxNCwgMjM4LCAKKyAgICA4MywgMTAsIDE0LCAyMzgsIDgyLCAxMCwgMTQsIDIzOCwgODEsIDEwLCAxNCwgMjM4LCA4MCwgMjMzLCA5NiwgMjE3LCA4NSwgCisgICAgMTI5LCAyMTksIDIwLCAxMjksIDI0NSwgMzksIDc5LCAxMjksIDIyNCwgMSwgNzksIDEyOSwgNTQsIDUwLCAxMjksIDI0NywgCisgICAgMTQwLCA1MCwgMTI5LCAyMjUsIDE4NSwgNTAsIDEyOSwgMjU0LCAxMzQsIDEyOSwgMjU0LCA2NSwgMTI5LCA0MywgMjI2LCA3LCAKKyAgICAxMjksIDQ0LCAyMjYsIDcsIDEyOSwgMjUzLCAyMjQsIDEyOSwgOTYsIDUwLCAxMjksIDI0OSwgMjI3LCAxMjksIDI0MCwgCisgICAgMTc0LCAxMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTI5LCAyMTksIDQ4LCAxMjksIDIxLCAyMTAsIDg2LCAxMjksIDIxLCAKKyAgICAxMTEsIDEyOSwgMjEsIDEwNSwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNjEsIDEyOSwgMjEsIDE5MCwgMTI5LCAyMSwgCisgICAgMTk1LCAxMjksIDIxLCAxOTksIDEyOSwgMjEsIDE5NiwgMTI5LCAyMSwgMjAxLCAxMjksIDI0OSwgMjM0LCAxMjksIDIyMCwgCisgICAgMTUyLCAxMjksIDIzMywgMjEsIDUwLCAxMjksIDI0NSwgMTA2LCA1MCwgMTI5LCAyNDIsIDEzNywgNTAsIDEyOSwgMjI0LCAKKyAgICAxNiwgNzksIDEyOSwgMjQ5LCAyMjUsIDI1MywgMjE0LCAxMjksIDcsIDYsIDEsIDYxLCAxMjksIDcsIDYsIDEsIDI1MywgCisgICAgMTY2LCAxMjksIDcsIDYsIDEsIDI1MSwgNzQsIDEyOSwgNywgNiwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCAKKyAgICA3LCA2LCAxLCAyNDUsIDE0LCAxMjksIDcsIDYsIDEsIDI0MywgMjA5LCAxMjksIDcsIDYsIDEsIDI0MiwgNjcsIDEyOSwgNywgCisgICAgNiwgMSwgNzQsIDEyOSwgNywgNiwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNiwgMSwgMjM1LCAyOSwgMTI5LCA3LCA2LCAxLCAKKyAgICAxNTYsIDEyOSwgNywgNiwgMSwgMTk0LCAxMjksIDcsIDYsIDEsIDIzMCwgMzAsIDEyOSwgNywgNiwgMSwgNzgsIDEyOSwgNywgCisgICAgNiwgMSwgMjI2LCAxMDksIDEyOSwgNywgNiwgMSwgMjI0LCA5OSwgMTI5LCA3LCA2LCAxLCAxNTMsIDEyOSwgNywgNiwgMSwgCisgICAgMjIyLCA5MywgMTI5LCA3LCA2LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA2LCAxLCA2OSwgMTI5LCA3LCA2LCAxLCAyMTQsIAorICAgIDEwNSwgMTI5LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjksIDcsIDYsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxMjksIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCA0MiwgMTI3LCAxMjksIDIyMywgNTMsIDIxOSwgNDgsIAorICAgIDEyOSwgNDQsIDQyLCAxMjcsIDEyOSwgMjUwLCAzOSwgMjU1LCAyMywgMTI5LCAxMjEsIDIzMiwgMjE5LCAxMjksIDI0MiwgCisgICAgMTQ0LCAyNTUsIDIzLCAxMjksIDcsIDQsIDEsIDYxLCAxMjksIDcsIDQsIDEsIDI1MywgMTY2LCAxMjksIDcsIDQsIDEsIAorICAgIDI1MSwgNzQsIDEyOSwgNywgNCwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA0LCAxLCA3NiwgMTI5LCA3LCA0LCAxLCAyNDUsIDE0LCAKKyAgICAxMjksIDcsIDQsIDEsIDI0MywgMjA5LCAxMjksIDcsIDQsIDEsIDI0MiwgNjcsIDEyOSwgNywgNCwgMSwgNzQsIDEyOSwgNywgCisgICAgNCwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNCwgMSwgMjM1LCAyOSwgMTI5LCA3LCA0LCAxLCAxNTYsIDEyOSwgNywgNCwgMSwgCisgICAgMTk0LCAxMjksIDcsIDQsIDEsIDIzMCwgMzAsIDEyOSwgNywgNCwgMSwgNzgsIDEyOSwgNywgNCwgMSwgMjI2LCAxMDksIAorICAgIDEyOSwgNywgNCwgMSwgMjI0LCA5OSwgMTI5LCA3LCA0LCAxLCAxNTMsIDEyOSwgNywgNCwgMSwgMjIyLCA5MywgMTI5LCA3LCAKKyAgICA0LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA0LCAxLCA2OSwgMTI5LCA3LCA0LCAxLCAyMTQsIDEwNSwgMTI5LCA3LCA0LCAxLCAKKyAgICAyMTIsIDk4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTE3LCAxMjksIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAxMjksIDQzLCAyNDksIDEwNywgMTI3LCAxMjksIDY3LCAyMzIsIDIxOSwgMTI5LCA0NCwgMjQ5LCAxMDcsIAorICAgIDEyNywgMTI5LCAxODQsIDI1MSwgMTQsIDIxNywgODUsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNTgsIAorICAgIDQ1LCAyMjEsIDQ2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDEzLCA0NSwgMjIxLCAyLCA0NSwgMjIwLCAKKyAgICAyNDcsIDQ1LCAyMjAsIDIzOSwgNDUsIDIyMCwgMjM4LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgCisgICAgMjM0LCA0NSwgMjIwLCAyMzMsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIAorICAgIDIyOSwgNDUsIDIyMCwgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAKKyAgICAyMjMsIDQ1LCAyMjAsIDIyMiwgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgCisgICAgMjE4LCA0NSwgMjIwLCAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIAorICAgIDIxMiwgNDUsIDIyMCwgMjExLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAKKyAgICAyMDcsIDQ1LCAyMjAsIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgCisgICAgMjAxLCA0NSwgMjIwLCAyMDAsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIAorICAgIDE5NiwgNDUsIDIyMCwgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAKKyAgICAxOTAsIDQ1LCAyMjAsIDE4OSwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgCisgICAgMTg1LCA0NSwgMjIwLCAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIAorICAgIDE3OSwgNDUsIDIyMCwgMTc4LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAKKyAgICAxNzQsIDQ1LCAyMjAsIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgCisgICAgMTY4LCA0NSwgMjIwLCAxNjcsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIAorICAgIDE2MywgNDUsIDIyMCwgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIxLCAKKyAgICAxNTYsIDQ1LCAyMjEsIDE1NSwgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgCisgICAgMTUxLCA0NSwgMjIxLCAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIAorICAgIDE0NSwgNDUsIDIyMSwgMTQ0LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAKKyAgICAxNDAsIDQ1LCAyMjEsIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgCisgICAgMTM0LCA0NSwgMjIxLCAxMzMsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIAorICAgIDEyOSwgNDUsIDIyMSwgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAKKyAgICAxMjMsIDQ1LCAyMjEsIDEyMiwgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgCisgICAgMTE4LCA0NSwgMjIxLCAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIAorICAgIDExMiwgNDUsIDIyMSwgMTExLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAKKyAgICAxMDcsIDQ1LCAyMjEsIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgCisgICAgMTAxLCA0NSwgMjIxLCAxMDAsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCAKKyAgICA0NSwgMjIxLCA5NSwgNDUsIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTAsIDQ1LCAyMjEsIAorICAgIDg5LCA0NSwgMjIxLCA4OCwgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAKKyAgICAyMjEsIDgzLCA0NSwgMjIxLCA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDc5LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgNzcsIAorICAgIDQ1LCAyMjEsIDc2LCA0NSwgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgCisgICAgNzEsIDQ1LCAyMjEsIDcwLCA0NSwgMjIxLCA2OCwgNDUsIDIyMSwgNjcsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIAorICAgIDIyMSwgNjQsIDQ1LCAyMjEsIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgCisgICAgNDUsIDIyMSwgNTcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCAKKyAgICA1MiwgNDUsIDIyMSwgNTEsIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ1LCA0NSwgCisgICAgMjIxLCA0NCwgNDUsIDIyMSwgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCAKKyAgICA0NSwgMjIxLCAzOCwgNDUsIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIAorICAgIDMyLCA0NSwgMjIxLCAzMSwgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAKKyAgICAyMjEsIDI2LCA0NSwgMjIxLCAyNSwgNDUsIDIyMSwgMjMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIAorICAgIDQ1LCAyMjEsIDE5LCA0NSwgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgCisgICAgMTQsIDQ1LCAyMjEsIDEyLCA0NSwgMjIxLCAxMSwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAKKyAgICAyMjEsIDcsIDQ1LCAyMjEsIDYsIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDEsIDQ1LCAKKyAgICAyMjEsIDAsIDQ1LCAyMjAsIDI1NSwgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgCisgICAgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDYsIDQ1LCAyMjAsIAorICAgIDI0NSwgNDUsIDIyMCwgMjQ0LCA0NSwgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAKKyAgICAyNDAsIDIyNywgMjA2LCAyMjcsIDIwOCwgMjE4LCAxNTQsIDY0LCAyNDEsIDI0MCwgMjE5LCA1MCwgMjE4LCAxNTQsIDY0LCAKKyAgICAyMTYsIDIxMywgMjE4LCA4NiwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMjQ1LCA2NCwgMjQ1LCAxNTEsIDY0LCAyMTUsIAorICAgIDI0NCwgMjQ1LCAxMTcsIDI0NSwgMTQwLCAyNDUsIDE0MSwgMjU1LCAxNiwgMjU1LCAxNywgMjU0LCAxNzYsIDI1MiwgNTUsIAorICAgIDI1MiwgMTg3LCAyNTEsIDEzOSwgMTM1LCAyMTcsIDkwLCAyMDMsIDIxNywgOTAsIDI0MCwgMjM0LCAyMTcsIDk0LCAyMzIsIAorICAgIDIyMCwgMjQ0LCAxNTMsIDE2NiwgMjMyLCAyMTksIDI0NSwgMTUxLCA2NCwgMjMyLCAyMTksIDIzMywgNiwgMjI4LCAxNDAsIAorICAgIDI0NSwgMTIwLCAyMzIsIDIyMCwgMjE3LCA5MCwgNjcsIDIxNywgOTAsIDIxMiwgMTE4LCAyNDQsIDI4LCAyNDQsIDE1MywgCisgICAgMjQ0LCAxMzMsIDI1MCwgMjM4LCAyMjMsIDU2LCAyNDksIDE1MSwgMjIwLCAzMCwgMjI2LCAxMzQsIDIzMiwgMTU2LCAxMTEsIAorICAgIDIxOSwgNjAsIDIyMCwgMzAsIDIzNiwgNiwgMjMyLCAxNTYsIDIxMCwgODYsIDIxOSwgMTkzLCAyNDgsIDE1OSwgMjMyLCAKKyAgICAyMTAsIDI0NSwgODUsIDI0NywgMTYzLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAyNDgsIDE0OSwgMjQ4LCAzOSwgMjQ5LCAKKyAgICAxODYsIDEwNSwgMjQ4LCAxNDgsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDI0OCwgMTQ3LCAyNDgsIDM5LCAyNDksIDE4NiwgCisgICAgMTYxLCAyNDgsIDE0NiwgMTUyLCAyNTUsIDE2LCAyMjksIDIxNCwgMjE3LCAxNzgsIDIzNiwgNjksIDIxNywgMTgxLCAyNDUsIAorICAgIDE1MSwgNjQsIDIxNSwgMjQ1LCAyNTEsIDIyMSwgMjQ1LCA3MCwgMjUxLCAxMywgMjUxLCAxNSwgMjQ1LCAxNTEsIDY0LCAKKyAgICAyMzEsIDg2LCAyNDUsIDExOCwgMjE4LCA2MiwgMjE4LCA3OSwgMjQ1LCA4NSwgMjQ1LCA4NiwgMjM1LCAyMzksIDIyMCwgCisgICAgMTQwLCAxNjEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMjQzLCAyNDUsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTU4LCAyNDIsIAorICAgIDEyOCwgMjIwLCAxMzksIDI0MiwgMTI1LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDEwNSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAKKyAgICAyMjIsIDE0NywgMjM1LCAyMzksIDIyMCwgMTQwLCAxMTEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMjE0LCAxMzMsIDIxOSwgMjMsIAorICAgIDI0OCwgNzEsIDI0OCwgNzMsIDIyNiwgODIsIDI1MCwgMTUwLCAyMjYsIDg0LCAxMjUsIDIyNiwgMjQ0LCAyMjQsIDE5NiwgCisgICAgMjQxLCA1NCwgMjUxLCAxNTgsIDIyNSwgMTc2LCAyNDEsIDIxMCwgMjUxLCAxNjksIDIyOCwgODAsIDI1MSwgMTU4LCAyNDEsIAorICAgIDIxMCwgMjI5LCAxODAsIDIzNSwgMjQ5LCAyMzUsIDI1MSwgMjI5LCA4NywgMjMyLCAyMTksIDIyOSwgMTA0LCAyMTgsIDE1NCwgCisgICAgNjQsIDIyMSwgMTYwLCAyNTQsIDI2LCAyMTgsIDIyNSwgMjQ1LCAxNTEsIDY0LCAyMjEsIDE2MCwgMjU0LCAyNiwgMjQ1LCAKKyAgICA4OCwgMTM1LCAyMTcsIDkxLCAyMjAsIDEyOSwgMjAzLCAyMTcsIDkxLCAyMjAsIDEyOSwgMjQwLCAyMzEsIDEzNSwgMjE3LCAKKyAgICA5MSwgMiwgMjM1LCA0MSwgMjAzLCAyMTcsIDkxLCAyLCAyMzUsIDQxLCAyNDAsIDIzMiwgMjMyLCAyMjAsIDIxNywgOTEsIAorICAgIDIyMCwgMTI5LCA2NywgMjE3LCA5MSwgMjIwLCAxMjksIDIxMiwgMTE3LCAyMjYsIDEsIDIzMiwgMjIwLCAyNDQsIDIyLCAKKyAgICAyMjYsIDEsIDIzMiwgMjIwLCAyNDYsIDExNCwgMjI1LCAzNSwgMjI2LCAxLCAyMzIsIDIyMCwgMjUyLCAxODYsIDIyNiwgMSwgCisgICAgMjMyLCAyMjAsIDIxNCwgMTYzLCAyMjUsIDMxLCAyMjMsIDUzLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDIyMywgNTMsIDIzNSwgCisgICAgMjQ5LCAyMjMsIDM4LCAyMTksIDE1NywgMjIwLCAzMCwgMTA1LCAyMTksIDE1NCwgMjE4LCAyMjcsIDIxOSwgMTU3LCAyMjAsIAorICAgIDMwLCAxNTgsIDIxOSwgMTUzLCAyMTgsIDIyNiwgMjQ4LCAzOSwgMjQ5LCAxODYsIDIxOCwgMTA3LCAyNDgsIDE0NSwgMjI0LCAKKyAgICAxODYsIDIxNCwgMTMyLCAxMTEsIDIyNCwgMTg2LCAyMTQsIDEzMCwgMjI0LCAxNTIsIDIyNCwgMTg2LCAyMTQsIDEzMiwgCisgICAgMTA1LCAyMjQsIDE4NiwgMjE0LCAxMjksIDIyNCwgMTUxLCAyMjAsIDEzMCwgMjE1LCAyNDMsIDIxOCwgMTUzLCAyMTgsIDkwLCAKKyAgICAyNTEsIDE0LCAyNTAsIDE1MCwgMjUwLCAyMTcsIDIzMSwgNDgsIDIxMiwgNTksIDIzMCwgNDgsIDIxOCwgMTU0LCA2NCwgCisgICAgMjQyLCAxMTQsIDI1NCwgMjYsIDIxOCwgMTU0LCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDIxOSwgMjIsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjQyLCAxMTQsIDI1NCwgMjYsIDI0NSwgMTUxLCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDI0NSwgMTE1LCAyMTgsIAorICAgIDE1NCwgNjQsIDIxOCwgMTA3LCAyMTksIDM3LCAyMTksIDE1NywgMjQyLCAxNDgsIDEzNSwgMjM1LCAyMDIsIDIyMCwgMTA5LCAKKyAgICAyMTksIDE1NywgMTM1LCAyMzUsIDIwMiwgMjIxLCAxOTYsIDI0OSwgMTg2LCAyMjAsIDEzNywgMjM1LCAyMDIsIDI0OSwgCisgICAgMTIxLCAyMTgsIDEwOCwgMjE2LCAyMzcsIDIxOCwgMTcwLCAyMjYsIDE3MywgMjE3LCAxNjgsIDI0OSwgMjI2LCAyMjYsIAorICAgIDE0NiwgMjI0LCAxODcsIDIzMSwgNDcsIDIyNSwgMjIsIDI1NCwgNjEsIDIyNCwgMTgxLCAyNDksIDIyNiwgMjU0LCA3NywgCisgICAgMjI5LCAxNjgsIDIxOSwgMjAyLCA3LCA2LCAxLCAyNDMsIDAsIDcsIDQsIDEsIDI0MywgMCwgMjUwLCAxNjcsIDI1NCwgMTU3LCAKKyAgICAxODMsIDIxOCwgNjgsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTY1LCAxLCAyMzIsIDE4MSwgMjA5LCAyMDksIDEsIAorICAgIDI0NCwgNTIsIDI0NCwgNDQsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyNDQsIDE2NSwgMjA5LCAyMDksIDEsIDIyMiwgMjEzLCAKKyAgICAyMDksIDIwOSwgMSwgMjMyLCAxNjIsIDYzLCAxNjQsIDI1MSwgMjMxLCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgMjQzLCAyMjMsIDI0MywgMjIyLCAyNDMsIDIyMSwgMjMwLCA1MCwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIAorICAgIDI1NCwgMjMyLCAxMDcsIDIyMiwgMjIxLCAyMzIsIDEwOSwgMjIyLCAyMjMsIDIyNSwgMjI3LCAyMzIsIDEwNiwgMjIyLCAKKyAgICAyMjAsIDIyOCwgMTExLCAyMzAsIDE3MCwgMjExLCAyMjksIDIzMiwgMTA4LCAyMjIsIDIyMiwgMjQzLCAyNDQsIDIyNSwgCisgICAgMjI2LCAyMTIsIDE1LCAyNDUsIDE3MCwgMjQzLCAyMzMsIDIzMCwgMjM0LCAyMjYsIDIwMSwgMjE0LCAxMzQsIDg3LCAyMzAsIAorICAgIDIzNCwgMjQ4LCAxNjUsIDg3LCA4LCAzLCAyMzUsIDE2NCwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgCisgICAgMjMzLCAyNiwgMTI3LCAyMTMsIDExOCwgMjEzLCA3LCAyMTIsIDE5NSwgMjEyLCAxODQsIDIxMiwgMTczLCAyMTIsIDE2MiwgCisgICAgMjEyLCAxNTEsIDIxMiwgMTQwLCAyMTIsIDEyOSwgMjEzLCAxMTcsIDIxMywgMTA2LCAyMTMsIDk1LCAyMTMsIDg0LCAyMTMsIAorICAgIDczLCAyMTMsIDYyLCAyMTMsIDUxLCAyNTEsIDc5LCAyMjYsIDE1OSwgNzksIDI1MSwgMjA0LCAyMDksIDI1MywgMTUsIDUsIAorICAgIDIyNywgMjE1LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgMjE1LCAxMTUsIDIyNywgMjE1LCAyNTEsIDEwNywgMTE1LCAyNTEsIAorICAgIDEwNiwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTQsIDksIDIxMywgNDAsIDIxMywgMjksIAorICAgIDIxMywgMTgsIDIxMywgNiwgMjEyLCAyNTEsIDIxMiwgMjQwLCAyMTIsIDIyOSwgMjEyLCAyMTgsIDIxMiwgMjA3LCAyMTIsIAorICAgIDE5OSwgMjEyLCAxOTgsIDIxMiwgMTk3LCAyMTIsIDE5NiwgMjEyLCAxOTQsIDIxMiwgMTkzLCAyMTIsIDE5MiwgMjEyLCAKKyAgICAxOTEsIDIxMiwgMTkwLCAyMTIsIDE4OSwgMjEyLCAxODgsIDIxMiwgMTg3LCAyMTIsIDE4NiwgMjEyLCAxODUsIDIxMiwgCisgICAgMTgzLCAyMTIsIDE4MiwgMjEyLCAxODEsIDIxMiwgMTgwLCAyMTIsIDE3OSwgMjEyLCAxNzgsIDIxMiwgMTc3LCAyMTIsIAorICAgIDE3NiwgMjEyLCAxNzUsIDIxMiwgMTc0LCAyMTIsIDE3MiwgMjEyLCAxNzEsIDIxMiwgMTcwLCAyMTIsIDE2OSwgMjEyLCAKKyAgICAxNjgsIDIxMiwgMTY3LCAyMTIsIDE2NiwgMjEyLCAxNjUsIDIxMiwgMTY0LCAyMTIsIDE2MywgMjEyLCAxNjEsIDIxMiwgCisgICAgMTYwLCAyMTIsIDE1OSwgMjEyLCAxNTgsIDIxMiwgMTU3LCAyMTIsIDE1NiwgMjEyLCAxNTUsIDIxMiwgMTU0LCAyMTIsIAorICAgIDE1MywgMjEyLCAxNTIsIDIxMiwgMTUwLCAyMTIsIDE0OSwgMjEyLCAxNDgsIDIxMiwgMTQ3LCAyMTIsIDE0NiwgMjEyLCAKKyAgICAxNDUsIDIxMiwgMTQ0LCAyMTIsIDE0MywgMjEyLCAxNDIsIDIxMiwgMTQxLCAyMTIsIDEzOSwgMjEyLCAxMzgsIDIxMiwgCisgICAgMTM3LCAyMTIsIDEzNiwgMjEyLCAxMzUsIDIxMiwgMTM0LCAyMTIsIDEzMywgMjEyLCAxMzIsIDIxMiwgMTMxLCAyMTIsIAorICAgIDEzMCwgMjEyLCAxMjgsIDIxMiwgMTI3LCAyMTIsIDEyNiwgMjEyLCAxMjUsIDIxMiwgMTI0LCAyMTIsIDEyMywgMjEyLCAKKyAgICAxMjIsIDIxMiwgMTIxLCAyMTIsIDEyMCwgMjEyLCAxMTksIDIxMywgMTE2LCAyMTMsIDExNSwgMjEzLCAxMTQsIDIxMywgCisgICAgMTEzLCAyMTMsIDExMiwgMjEzLCAxMTEsIDIxMywgMTEwLCAyMTMsIDEwOSwgMjEzLCAxMDgsIDIxMywgMTA3LCAyMTMsIAorICAgIDEwNSwgMjEzLCAxMDQsIDIxMywgMTAzLCAyMTMsIDEwMiwgMjEzLCAxMDEsIDIxMywgMTAwLCAyMTMsIDk5LCAyMTMsIDk4LCAKKyAgICAyMTMsIDk3LCAyMTMsIDk2LCAyMTMsIDk0LCAyMTMsIDkzLCAyMTMsIDkyLCAyMTMsIDkxLCAyMTMsIDkwLCAyMTMsIDg5LCAKKyAgICAyMTMsIDg4LCAyMTMsIDg3LCAyMTMsIDg2LCAyMTMsIDg1LCAyMTMsIDgzLCAyMTMsIDgyLCAyMTMsIDgxLCAyMTMsIDgwLCAKKyAgICAyMTMsIDc5LCAyMTMsIDc4LCAyMTMsIDc3LCAyMTMsIDc2LCAyMTMsIDc1LCAyMTMsIDc0LCAyMTMsIDcyLCAyMTMsIDcxLCAKKyAgICAyMTMsIDcwLCAyMTMsIDY5LCAyMTMsIDY4LCAyMTMsIDY3LCAyMTMsIDY2LCAyMTMsIDY1LCAyMTMsIDY0LCAyMTMsIDYzLCAKKyAgICAyMTMsIDYxLCAyMTMsIDYwLCAyMTMsIDU5LCAyMTMsIDU4LCAyMTMsIDU3LCAyMTMsIDU2LCAyMTMsIDU1LCAyMTMsIDU0LCAKKyAgICAyMTMsIDUzLCAyMTMsIDUyLCAyMTMsIDUwLCAyMTMsIDQ5LCAyMTMsIDQ4LCAyMTMsIDQ3LCAyMTMsIDQ2LCAyMTMsIDQ1LCAKKyAgICAyMTMsIDQ0LCAyMTMsIDQzLCAyMTMsIDQyLCAyMTMsIDQxLCAyMTMsIDM5LCAyMTMsIDM4LCAyMTMsIDM3LCAyMTMsIDM2LCAKKyAgICAyMTMsIDM1LCAyMTMsIDM0LCAyMTMsIDMzLCAyMTMsIDMyLCAyMTMsIDMxLCAyMTMsIDMwLCAyMTMsIDI4LCAyMTMsIDI3LCAKKyAgICAyMTMsIDI2LCAyMTMsIDI1LCAyMTMsIDI0LCAyMTMsIDIzLCAyMTMsIDIyLCAyMTMsIDIxLCAyMTMsIDIwLCAyMTMsIDE5LCAKKyAgICAyMTMsIDE3LCAyMTMsIDE2LCAyMTMsIDE1LCAyMTMsIDE0LCAyMTMsIDEzLCAyMTMsIDEyLCAyMTMsIDExLCAyMTMsIDEwLCAKKyAgICAyMTMsIDksIDIxMywgOCwgMjEzLCA1LCAyMTMsIDQsIDIxMywgMywgMjEzLCAyLCAyMTMsIDEsIDIxMywgMCwgMjEyLCAyNTUsIAorICAgIDIxMiwgMjU0LCAyMTIsIDI1MywgMjEyLCAyNTIsIDIxMiwgMjUwLCAyMTIsIDI0OSwgMjEyLCAyNDgsIDIxMiwgMjQ3LCAKKyAgICAyMTIsIDI0NiwgMjEyLCAyNDUsIDIxMiwgMjQ0LCAyMTIsIDI0MywgMjEyLCAyNDIsIDIxMiwgMjQxLCAyMTIsIDIzOSwgCisgICAgMjEyLCAyMzgsIDIxMiwgMjM3LCAyMTIsIDIzNiwgMjEyLCAyMzUsIDIxMiwgMjM0LCAyMTIsIDIzMywgMjEyLCAyMzIsIAorICAgIDIxMiwgMjMxLCAyMTIsIDIzMCwgMjEyLCAyMjgsIDIxMiwgMjI3LCAyMTIsIDIyNiwgMjEyLCAyMjUsIDIxMiwgMjI0LCAKKyAgICAyMTIsIDIyMywgMjEyLCAyMjIsIDIxMiwgMjIxLCAyMTIsIDIyMCwgMjEyLCAyMTksIDIxMiwgMjE3LCAyMTIsIDIxNiwgCisgICAgMjEyLCAyMTUsIDIxMiwgMjE0LCAyMTIsIDIxMywgMjEyLCAyMTIsIDIxMiwgMjExLCAyMTIsIDIxMCwgMjEyLCAyMDksIAorICAgIDIxMiwgMjA4LCAyMTIsIDIwNiwgMjEyLCAyMDUsIDIxMiwgMjA0LCAyMTIsIDIwMywgMjEyLCAyMDIsIDIxMiwgMjAxLCAKKyAgICAyMTIsIDIwMCwgNywgNiwgMSwgMTE2LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgCisgICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAKKyAgICA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIAorICAgIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIAorICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMzksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDE2MCwgCisgICAgMiwgMjUwLCAzOSwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDIyOSwgODUsIDIsIDIxNiwgOTAsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIAorICAgIDIyMCwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAKKyAgICAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDcyLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3MiwgCisgICAgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNzIsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjksIDIyLCA1OSwgNzIsIDIyLCAKKyAgICAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMTg0LCA3LCA0LCAxLCAyMzUsIDE1MSwgCisgICAgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxODQsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDE4NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKKyAgICAyMDQsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgCisgICAgMTA2LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjIxLCAxOTgsIAorICAgIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMjEsIDE5OCwgMiwgMTQyLCA3LCA0LCAxLCAyNDEsIDU4LCAyMjEsIDE5OCwgMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MSwgNTgsIDIyMSwgMTk4LCAyLCAxNDIsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjU0LCAxNzksIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMCwgOSwgMjIwLCAxMzcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk3LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgCisgICAgMjM4LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY5LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIxMCwgMjEyLCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc2LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDI1NCwgMjUyLCA5LCAyMjAsIDEzNywgMjI4LCA2OCwgMiwgMjM0LCAxODAsIDE0NiwgMSwgMjM0LCAxMTUsIDM2LCAKKyAgICAxMTcsIDIzNSwgMjksIDM2LCAxMTcsIDIyOSwgODQsIDM2LCAxMTcsIDI1MSwgNzQsIDM2LCAxMTcsIDIyNywgMTcxLCAzNiwgCisgICAgMTE3LCAyMTUsIDE2MCwgMzYsIDExNywgMjI4LCAxMTYsIDM2LCAxMTcsIDIxNywgMTUzLCAzNiwgMTE3LCAyMzAsIDMwLCAKKyAgICAzNiwgMTE3LCAyMjYsIDEwOSwgMzYsIDExNywgMTk0LCAzNiwgMTE3LCAyMTEsIDExNywgMzYsIDExNywgMTUzLCAzNiwgCisgICAgMTE3LCAxNTYsIDM2LCAxMTcsIDIxNCwgMTA1LCAzNiwgMTE3LCAyMzIsIDE4MiwgMzYsIDExNywgMjMyLCAxOTEsIDM2LCAKKyAgICAxMTcsIDIyMiwgMTgyLCAzNiwgMTE3LCAyMjgsIDk4LCAzNiwgMTE3LCAyMzUsIDE1MCwgMzYsIDExNywgMjIwLCAxMDYsIAorICAgIDM2LCAxMTcsIDIxOCwgMjI4LCAzNiwgMTE3LCAyMjIsIDkzLCAzNiwgMTE3LCAyNDIsIDY3LCAzNiwgMTE3LCAyMzMsIDIzOCwgCisgICAgMzYsIDMsIDIzNSwgMTYsIDM2LCAzLCAyMzQsIDk4LCAzNiwgMywgMjM0LCA4OSwgMzYsIDMsIDIzMywgMjIzLCAzNiwgMywgCisgICAgMjMzLCAxOTQsIDM2LCAzLCAyMzQsIDE4OCwgMzYsIDMsIDIzNCwgMTg3LCAzNiwgMywgMjM0LCAyNTIsIDM2LCAzLCAyMzQsIAorICAgIDM0LCAzNiwgMywgMjM0LCAxNiwgMzYsIDMsIDIzNCwgMjAxLCAzNiwgMywgMjI5LCA4MSwgMzYsIDMsIDIyOSwgMzIsIDM2LCAKKyAgICAzLCAyMjksIDI4LCAzNiwgMywgMjI4LCAyNTMsIDM2LCAzLCAyMjgsIDI0NiwgMzYsIDMsIDIyOSwgNjksIDM2LCAzLCAyMjksIAorICAgIDY3LCAzNiwgMywgMjI5LCA3OCwgMzYsIDMsIDIyOSwgOSwgMzYsIDMsIDIyOSwgNCwgMzYsIDMsIDIyOSwgNzEsIDM2LCAzLCAKKyAgICAyNTEsIDQwLCAzNiwgMywgMjUwLCA1OSwgMzYsIDMsIDI1MCwgNDksIDM2LCAzLCAyNDksIDEyMCwgMzYsIDMsIDI0OSwgOTEsIAorICAgIDM2LCAzLCAyNTAsIDE5OCwgMzYsIDMsIDI1MCwgMTkwLCAzNiwgMywgMjUxLCAzMCwgMzYsIDMsIDI0OSwgMjQ2LCAzNiwgMywgCisgICAgMjQ5LCAxODIsIDM2LCAzLCAyNTAsIDIzMCwgMzYsIDMsIDIyNywgMTY4LCAzNiwgMywgMjI3LCAxNTIsIDM2LCAzLCAyMjcsIAorICAgIDE0NywgMzYsIDMsIDIyNywgMTMyLCAzNiwgMywgMjI3LCAxMjUsIDM2LCAzLCAyMjcsIDE2MCwgMzYsIDMsIDIyNywgMTU5LCAKKyAgICAzNiwgMywgMjI3LCAxNjUsIDM2LCAzLCAyMjcsIDEzOCwgMzYsIDMsIDIyNywgMTM2LCAzNiwgMywgMjI3LCAxNjMsIDM2LCAKKyAgICAzLCAyMTUsIDE1NiwgMzYsIDMsIDIxNSwgMTM2LCAzNiwgMywgMjE1LCAxMzUsIDM2LCAzLCAyMTUsIDEyNCwgMzYsIDMsIAorICAgIDIxNSwgMTIxLCAzNiwgMywgMjE1LCAxNTIsIDM2LCAzLCAyMTUsIDE1MSwgMzYsIDMsIDIxNSwgMTU1LCAzNiwgMywgMjE1LCAKKyAgICAxMzQsIDM2LCAzLCAyMTUsIDEzMywgMzYsIDMsIDIxNSwgMTU0LCAzNiwgMywgMjI4LCAxMTQsIDM2LCAzLCAyMjgsIDEwMCwgCisgICAgMzYsIDMsIDIyOCwgOTksIDM2LCAzLCAyMjgsIDgzLCAzNiwgMywgMjI4LCA4MiwgMzYsIDMsIDIyOCwgMTEwLCAzNiwgMywgCisgICAgMjI4LCAxMDksIDM2LCAzLCAyMjgsIDExMywgMzYsIDMsIDIyOCwgODUsIDM2LCAzLCAyMjgsIDg0LCAzNiwgMywgMjI4LCAKKyAgICAxMTIsIDM2LCAzLCAyMTcsIDEwMiwgMzYsIDMsIDIxNiwgMTE4LCAzNiwgMywgMjE2LCAxMDQsIDM2LCAzLCAyMTUsIDExOSwgCisgICAgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIDIzLCAzNiwgMywgMjE3LCAxMiwgMzYsIDMsIDIxNywgODAsIDM2LCAzLCAKKyAgICAxMTIsIDM2LCAzLCAyMTYsIDE4LCAzNiwgMywgMjE3LCA0MiwgMzYsIDMsIDIyOSwgMjMwLCAzNiwgMywgMjI4LCAyMzgsIAorICAgIDM2LCAzLCAyMjgsIDIxMywgMzYsIDMsIDIyNywgMjQyLCAzNiwgMywgMjI3LCAxODMsIDM2LCAzLCAyMjksIDExMiwgMzYsIAorICAgIDMsIDIyOSwgMTA4LCAzNiwgMywgMjI5LCAyMTcsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCA2OSwgMzYsIDMsIDIyOSwgCisgICAgMTkyLCAzNiwgMywgMjI2LCA5MywgMzYsIDMsIDIyNSwgMTExLCAzNiwgMywgMjI1LCA3NCwgMzYsIDMsIDIyNCwgMTUzLCAKKyAgICAzNiwgMywgMjI0LCAxMjIsIDM2LCAzLCAyMjUsIDIyNCwgMzYsIDMsIDIyNSwgMjE0LCAzNiwgMywgMjI2LCA3NSwgMzYsIDMsIAorICAgIDIyNSwgMTksIDM2LCAzLCAyMjQsIDI1MiwgMzYsIDMsIDIyNSwgMjM4LCAzNiwgMywgMjMxLCAyNDIsIDM2LCAzLCAyMzAsIAorICAgIDIzNSwgMzYsIDMsIDIzMCwgMjA2LCAzNiwgMywgMjMwLCAxMDcsIDM2LCAzLCAyMzAsIDU5LCAzNiwgMywgMjMxLCA5NiwgCisgICAgMzYsIDMsIDIzMSwgODUsIDM2LCAzLCAyMzEsIDIwOCwgMzYsIDMsIDIzMCwgMTY2LCAzNiwgMywgMjMwLCAxMzcsIDM2LCAzLCAKKyAgICAyMzEsIDE0MCwgMzYsIDMsIDIxMSwgMTAzLCAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIAorICAgIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgCisgICAgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NywgMzYsIDMsIAorICAgIDIyMywgMzgsIDM2LCAzLCAyMjIsIDI0MiwgMzYsIDMsIDIyMiwgMTQyLCAzNiwgMywgMjIyLCAxMTQsIDM2LCAzLCAyMjMsIAorICAgIDEzMSwgMzYsIDMsIDIyMywgMTExLCAzNiwgMywgMjIzLCAxNjksIDM2LCAzLCAyMjIsIDIxMywgMzYsIDMsIDIyMiwgMTk5LCAKKyAgICAzNiwgMywgMjIzLCAxMzksIDM2LCAzLCAyMzMsIDE0MCwgMzYsIDMsIDIzMiwgMjQ3LCAzNiwgMywgMjMyLCAyMzMsIDM2LCAKKyAgICAzLCAyMzIsIDEwMywgMzYsIDMsIDIzMiwgNzgsIDM2LCAzLCAyMzMsIDY0LCAzNiwgMywgMjMzLCA1NiwgMzYsIDMsIDIzMywgCisgICAgMTE1LCAzNiwgMywgMjMyLCAxNjIsIDM2LCAzLCAyMzIsIDEzMywgMzYsIDMsIDIzMywgODAsIDM2LCAzLCAyMTQsIDI2LCAKKyAgICAzNiwgMywgMjEzLCAxNzYsIDM2LCAzLCAyMTMsIDE2MiwgMzYsIDMsIDIxMiwgMTE2LCAzNiwgMywgMjEyLCAxMDksIDM2LCAKKyAgICAzLCAyMTMsIDI1NSwgMzYsIDMsIDIxMywgMjUwLCAzNiwgMywgMjE0LCAyMywgMzYsIDMsIDIxMywgMTM4LCAzNiwgMywgCisgICAgMjEzLCAxMjcsIDM2LCAzLCAyMTQsIDUsIDM2LCAzLCAyMzIsIDE4MCwgMzYsIDMsIDIzMiwgMTc1LCAzNiwgMywgMjMyLCAKKyAgICAxNzQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE3NiwgCisgICAgMzYsIDMsIDIzMiwgMTc5LCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE3MiwgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCisgICAgMywgMjMyLCAxODksIDM2LCAzLCAyMzIsIDE4NCwgMzYsIDMsIDIzMiwgMTgzLCAzNiwgMywgMjMyLCAxNjcsIDM2LCAzLCAKKyAgICAyMzIsIDE2NiwgMzYsIDMsIDIzMiwgMTg2LCAzNiwgMywgMjMyLCAxODUsIDM2LCAzLCAyMzIsIDE4OCwgMzYsIDMsIDIzMiwgCisgICAgMTY5LCAzNiwgMywgMjMyLCAxNjgsIDM2LCAzLCAyMzIsIDE4NywgMzYsIDMsIDIyMiwgMTgwLCAzNiwgMywgMjIyLCAxNjksIAorICAgIDM2LCAzLCAyMjIsIDE2OCwgMzYsIDMsIDIyMiwgMTYyLCAzNiwgMywgMjIyLCAxNTUsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIAorICAgIDMsIDIyMiwgMTc1LCAzNiwgMywgMjIyLCAxNzksIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgCisgICAgMjIyLCAxNzgsIDM2LCAzLCAyMjgsIDk2LCAzNiwgMywgMjI4LCA5MSwgMzYsIDMsIDIyOCwgOTAsIDM2LCAzLCAyMjgsIDg3LCAKKyAgICAzNiwgMywgMjI4LCA4NiwgMzYsIDMsIDIyOCwgOTMsIDM2LCAzLCAyMjgsIDkyLCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIAorICAgIDIyOCwgODksIDM2LCAzLCAyMjgsIDg4LCAzNiwgMywgMjI4LCA5NCwgMzYsIDMsIDIzNSwgMTQ2LCAzNiwgMywgMjM1LCAKKyAgICAxMTQsIDM2LCAzLCAyMzUsIDEwNywgMzYsIDMsIDIzNSwgNTcsIDM2LCAzLCAyMzUsIDM5LCAzNiwgMywgMjM1LCAxMzIsIAorICAgIDM2LCAzLCAyMzUsIDEzMCwgMzYsIDMsIDIzNSwgMTQxLCAzNiwgMywgMjM1LCA3NCwgMzYsIDMsIDIzNSwgNjUsIDM2LCAzLCAKKyAgICAyMzUsIDEzNSwgMzYsIDMsIDIyMCwgMTAwLCAzNiwgMywgMjIwLCAzNCwgMzYsIDMsIDIyMCwgMjksIDM2LCAzLCAyMTksIAorICAgIDIyNywgMzYsIDMsIDIxOSwgMjEyLCAzNiwgMywgMjIwLCA2NSwgMzYsIDMsIDIyMCwgNjMsIDM2LCAzLCAyMjAsIDkyLCAzNiwgCisgICAgMywgMjIwLCA5LCAzNiwgMywgMjIwLCAzLCAzNiwgMywgMjIwLCA3MywgMzYsIDMsIDIxOCwgMjI0LCAzNiwgMywgMjE4LCAKKyAgICAxOTQsIDM2LCAzLCAyMTgsIDE5MCwgMzYsIDMsIDIxOCwgMTgxLCAzNiwgMywgMjE4LCAxNzgsIDM2LCAzLCAyMTgsIDE5OSwgCisgICAgMzYsIDMsIDIxOCwgMTk4LCAzNiwgMywgMjE4LCAyMjMsIDM2LCAzLCAyMTgsIDE4NiwgMzYsIDMsIDIxOCwgMTg1LCAzNiwgCisgICAgMywgMjE4LCAyMDEsIDM2LCAzLCAyMjIsIDMzLCAzNiwgMywgMjE5LCAxOTMsIDM2LCAzLCAyMTksIDE3NywgMzYsIDMsIAorICAgIDIxOCwgODQsIDM2LCAzLCAyMTgsIDUsIDM2LCAzLCAyMjEsIDE4MywgMzYsIDMsIDIyMSwgMTcyLCAzNiwgMywgMjIyLCAxOSwgCisgICAgMzYsIDMsIDIxOSwgNjAsIDM2LCAzLCAyMTksIDQyLCAzNiwgMywgMjIxLCAyMjEsIDM2LCAzLCAyNDIsIDUzLCAzNiwgMywgCisgICAgMjQxLCAxODcsIDM2LCAzLCAyNDEsIDE2OCwgMzYsIDMsIDI0MCwgMjI5LCAzNiwgMywgMjQwLCAyMDksIDM2LCAzLCAyNDEsIAorICAgIDI0NSwgMzYsIDMsIDI0MSwgMjI3LCAzNiwgMywgMjQyLCA0MywgMzYsIDMsIDI0MSwgNzUsIDM2LCAzLCAyNDEsIDYwLCAzNiwgCisgICAgMywgMjQxLCAyNTMsIDM2LCAzLCAyMzMsIDIzNywgMzYsIDMsIDIzMywgMjM2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAzLCAKKyAgICAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI3LCAzNiwgMywgMjMzLCAyMjYsIDM2LCAzLCAyMzMsIDIzMywgMzYsIDMsIDIzMywgCisgICAgMjMyLCAzNiwgMywgMjMzLCAyMzUsIDM2LCAzLCAyMzMsIDIyOSwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjMzLCAyMzQsIAorICAgIDM2LCAzLCAyMTksIDIzMywgMTc1LCAxMTcsIDUsIDIxMSwgNjgsIDE3NSwgMTE3LCA1LCAyMjMsIDE1OCwgMTc1LCAxMTcsIAorICAgIDUsIDIyMywgODEsIDk4LCAxLCAyMTUsIDI4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTc2LCA3MCwgMTE3LCA1LCAyNDksIAorICAgIDI0MSwgMjM0LCAxMzgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzQsIDM0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjM0LCAKKyAgICAxMTEsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjksIDksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNTEsIDQxLCA3MCwgCisgICAgMTE3LCA1LCAyNDksIDI0MSwgMjUwLCAxNjUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDksIDI0NiwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDI1MCwgOTQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjcsIDEzOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDI0OCwgMjI5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE1LCAxNDUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDcsIDE1MywgCisgICAgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNSwgMTQwLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTk4LCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjE3LCAxMDYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTYsIDIwOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDExMiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNiwgMTU3LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI4LCA3OSwgNzAsIAorICAgIDExNywgNSwgMjQ5LCAyNDEsIDI1MiwgMTk5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxNTAsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyMjUsIDE5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxMjQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAyMzAsIDE2NiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMCwgMjQ0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjIyLCAyMTMsIAorICAgIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzIsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMywgMTM4LCA3MCwgMTE3LCAKKyAgICA1LCAyNDksIDI0MSwgMjIwLCAxMDQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTgsIDIyNSwgNzAsIDExNywgNSwgMjQ5LCAKKyAgICAyNDEsIDIwNiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzMywgMTQxLCA3MCwgCisgICAgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjI0LCAzMywgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyMiwgMTAyLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjIyLCAKKyAgICA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgNzIsIDcwLCAyNSwgNSwgMjI2LCAyMDgsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA0MywgMTQxLCAxLCAyNTIsIDcsIDIyOSwgODIsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDMyLCAxNDEsIDEsIAorICAgIDI1MiwgNywgMjI4LCAyNTMsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDY5LCAxNDEsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgCisgICAgMjUyLCA3LCAyMjksIDgyLCA1NiwgMSwgMjUyLCA3LCAyMjksIDMyLCA1NiwgMSwgMjUyLCA3LCAyMjgsIDI1MywgNTYsIDEsIAorICAgIDI1MiwgNywgMjI5LCA2OSwgNTYsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgMjU0LCAyMDMsIDI1MCwgMTk4LCA1NiwgMSwgCisgICAgMjU0LCAyMDMsIDIxNSwgMTE5LCA1NiwgMSwgMjU0LCAyMDMsIDExMiwgNTYsIDEsIDI1NCwgMjAzLCAyMjYsIDEwOSwgNTgsIAorICAgIDEsIDI0NSwgMjgsIDI0NSwgMjcsIDI0OSwgMTkwLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDI0NSwgMjgsIDI0OSwgCisgICAgMTkwLCAxMzgsIDEzMCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rX29mZnNldDFbXSA9IHsKQEAgLTE0NDMxLDI0NTEgKzE0NDQ4LDI0NTEgQEAKICAgICA4NjQ3LCAwLCAwLCAwLCAwLCAwLCA4NjUxLCA4NjU4LCA4NjY2LCA4NjczLCA4Njc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA4NjgzLCA4Njg2LCA4NjkwLCA4Njk1LCA4Njk5LCAwLCA4NzAzLCA4NzA5LCA4NzE1LCA4NzE4LCAKICAgICA4NzI1LCA4NzM0LCA4NzM3LCA4NzQwLCA4NzQ1LCA4NzUxLCA4NzU1LCA4NzYzLCA4NzY5LCA4Nzc1LCA4NzgzLCA4Nzg3LCAKLSAgICA4NzkyLCA4ODAzLCA4ODA4LCA4ODEyLCA4ODE2LCA4ODIwLCAwLCAwLCA4ODIzLCA4ODMwLCA4ODM0LCA4ODQwLCA4ODQ0LCAKLSAgICA4ODUxLCA4ODU3LCA4ODY0LCA4ODcwLCA4ODc2LCA4ODgwLCA4ODg0LCA4ODkwLCA4ODk0LCA4ODk4LCA4OTAyLCA4OTA2LCAKLSAgICA4OTEwLCA4OTE0LCA4OTE4LCA4OTIyLCA4OTI2LCA4OTMwLCA4OTM0LCA4OTM4LCA4OTQyLCA4OTQ2LCA4OTUwLCA4OTU0LCAKLSAgICA4OTU4LCA4OTY2LCA4OTc0LCA4OTg0LCA4OTkzLCA5MDAyLCA5MDA1LCA5MDA5LCA5MDEzLCA5MDE3LCA5MDIxLCA5MDI1LCAKLSAgICA5MDI5LCA5MDMzLCA5MDM3LCA5MDQyLCA5MDQ2LCA5MDQ5LCA5MDUyLCA5MDU1LCA5MDU4LCA5MDYxLCA5MDY0LCA5MDY3LCAKLSAgICA5MDcwLCA5MDc0LCA5MDc3LCA5MDgwLCA5MDg1LCA5MDkwLCA5MDk2LCA5MDk5LCA5MTA2LCA5MTE1LCA5MTIwLCA5MTI1LCAKLSAgICA5MTMyLCA5MTM3LCA5MTQyLCA5MTQ2LCA5MTUwLCA5MTU0LCA5MTU4LCA5MTYyLCA5MTY2LCA5MTcwLCA5MTc0LCA5MTc4LCAKLSAgICA5MTgyLCA5MTg3LCA5MTkyLCA5MTk5LCA5MjA1LCA5MjExLCA5MjE3LCA5MjIyLCA5MjMwLCA5MjM4LCA5MjQzLCA5MjQ5LCAKLSAgICA5MjU1LCA5MjYxLCA5MjY3LCA5MjcxLCA5Mjc1LCA5Mjc5LCA5Mjg2LCA5Mjk2LCA5MzAwLCA5MzA0LCA5MzA4LCA5MzE0LCAKLSAgICA5MzIyLCA5MzI2LCA5MzMwLCA5MzM3LCA5MzQxLCA5MzQ1LCA5MzQ5LCA5MzU2LCA5MzYzLCA5Mzc1LCA5Mzc5LCA5MzgzLCAKLSAgICA5Mzg3LCA5Mzk3LCA5NDA2LCA5NDEwLCA5NDE4LCA5NDI1LCA5NDMyLCA5NDQxLCA5NDUyLCA5NDYwLCA5NDY0LCA5NDczLCAKLSAgICA5NDg0LCA5NDkyLCA5NTA1LCA5NTEzLCA5NTIxLCA5NTI5LCA5NTM3LCA5NTQzLCA5NTUyLCA5NTU5LCA5NTYzLCA5NTcxLCAKLSAgICA5NTc1LCA5NTgyLCA5NTkwLCA5NTk0LCA5NjAwLCA5NjA3LCA5NjE0LCA5NjE4LCA5NjI2LCA5NjMwLCA5NjM3LCA5NjQxLCAKLSAgICA5NjQ5LCA5NjUzLCA5NjYxLCA5NjY5LCA5Njc2LCA5Njg0LCA5NjkyLCA5Njk5LCA5NzA1LCA5NzA5LCA5NzE2LCA5NzI0LCAKLSAgICA5NzMwLCA5NzM3LCA5NzQ0LCA5NzUwLCA5NzU5LCA5NzY3LCA5Nzc0LCA5NzgwLCA5Nzg0LCA5Nzg3LCA5NzkxLCA5Nzk3LCAKLSAgICA5ODA1LCA5ODA5LCA5ODE1LCA5ODIxLCA5ODI4LCA5ODM1LCA5ODM4LCA5ODQ1LCA5ODUwLCA5ODU4LCA5ODYzLCA5ODY3LCAKLSAgICA5ODgwLCA5ODkzLCA5ODk5LCA5OTA2LCA5OTExLCA5OTE3LCA5OTIyLCA5OTI4LCA5OTM4LCA5OTQ1LCA5OTU0LCA5OTY0LCAKLSAgICA5OTcwLCA5OTc1LCA5OTgwLCA5OTg0LCA5OTg4LCA5OTkzLCA5OTk4LCAxMDAwNCwgMTAwMTIsIDEwMDIwLCAxMDAzMSwgCi0gICAgMTAwMzYsIDEwMDQ1LCAxMDA1NCwgMTAwNjEsIDEwMDY3LCAxMDA3MywgMTAwNzksIDEwMDg1LCAxMDA5MSwgMTAwOTcsIAotICAgIDEwMTAzLCAxMDEwOSwgMTAxMTUsIDEwMTIyLCAxMDEyOSwgMTAxMzYsIDEwMTQyLCAxMDE1MCwgMTAxNTksIDEwMTY1LCAKLSAgICAxMDE3MiwgMTAxNzksIDEwMTg0LCAxMDE4OSwgMTAxOTMsIDEwMjAwLCAxMDIwNywgMTAyMTYsIDEwMjI1LCAxMDIyOCwgCi0gICAgMTAyMzMsIDEwMjM4LCAwLCAxMDI0MywgMTAyNDcsIDEwMjUxLCAxMDI1NywgMTAyNjEsIDEwMjY1LCAxMDI3MSwgMTAyNzUsIAotICAgIDEwMjgzLCAxMDI4NywgMTAyOTEsIDEwMjk1LCAxMDI5OSwgMTAzMDMsIDEwMzA5LCAxMDMxMywgMTAzMTksIDEwMzIzLCAKLSAgICAxMDMyNywgMTAzMzEsIDEwMzM1LCAxMDMzOSwgMTAzNDQsIDEwMzQ3LCAxMDM1MSwgMTAzNTcsIDEwMzYxLCAxMDM2NSwgCi0gICAgMTAzNjksIDEwMzczLCAxMDM3NywgMTAzODMsIDEwMzg5LCAxMDM5NSwgMTAzOTksIDEwNDAzLCAxMDQwOCwgMTA0MTIsIAotICAgIDEwNDE2LCAxMDQyMSwgMTA0MjUsIDEwNDI5LCAxMDQzNiwgMTA0NDMsIDEwNDQ3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2NCwgMTA0NjcsIDEwNDcyLCAxMDQ3NSwgMTA0NzgsIDEwNDgzLCAxMDQ4OCwgMTA0OTIsIDEwNDk2LCAxMDUwMiwgCi0gICAgMTA1MDgsIDEwNTExLCAwLCAwLCAxMDUxNCwgMTA1MjAsIDEwNTI2LCAxMDUzMiwgMTA1NDIsIDEwNTU0LCAxMDU2NiwgCi0gICAgMTA1ODMsIDEwNTk1LCAxMDYwNiwgMTA2MTQsIDEwNjIxLCAxMDYzMiwgMTA2NDcsIDEwNjU4LCAxMDY2NCwgMTA2NzMsIAotICAgIDEwNjgxLCAxMDY5MywgMTA3MDMsIDEwNzExLCAxMDcyMywgMTA3MzAsIDEwNzM4LCAxMDc1MCwgMTA3NTYsIDEwNzYyLCAKLSAgICAxMDc3MCwgMTA3NzgsIDEwNzg2LCAxMDc5MiwgMTA4MDIsIDEwODA5LCAxMDgxOSwgMTA4MjksIDEwODQyLCAxMDg1NiwgCi0gICAgMTA4NzAsIDEwODgwLCAxMDg5MSwgMTA5MDIsIDEwOTE1LCAxMDkyOCwgMTA5NDIsIDEwOTU0LCAxMDk2NiwgMTA5NzksIAotICAgIDEwOTkyLCAxMTAwNCwgMTEwMTcsIDExMDI2LCAxMTAzNCwgMTEwMzksIDExMDQ0LCAxMTA0OSwgMTEwNTQsIDExMDU5LCAKLSAgICAxMTA2NCwgMTEwNjksIDExMDc0LCAxMTA3OSwgMTEwODQsIDExMDg5LCAxMTA5NCwgMTEwOTksIDExMTA0LCAxMTEwOSwgCi0gICAgMTExMTQsIDExMTE5LCAxMTEyNCwgMTExMjksIDExMTM0LCAxMTEzOSwgMTExNDQsIDExMTQ5LCAxMTE1NCwgMTExNTksIAotICAgIDExMTY0LCAxMTE2OSwgMTExNzQsIDExMTc5LCAxMTE4NCwgMTExODksIDExMTk0LCAxMTE5OCwgMTEyMDMsIDExMjA4LCAKLSAgICAxMTIxMywgMTEyMTgsIDExMjIzLCAxMTIyNywgMTEyMzEsIDExMjM1LCAxMTIzOSwgMTEyNDMsIDExMjQ3LCAxMTI1MSwgCi0gICAgMTEyNTUsIDExMjU5LCAxMTI2MywgMTEyNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExMjcyLCAxMTI3NywgMTEyODEsIDExMjg1LCAxMTI4OSwgMTEyOTMsIDExMjk3LCAxMTMwMSwgMTEzMDUsIDExMzA5LCAKLSAgICAxMTMxMywgMTEzMTcsIDExMzIyLCAxMTMyNiwgMTEzMzAsIDExMzM0LCAxMTMzOSwgMTEzNDMsIDExMzQ4LCAxMTM1MywgCi0gICAgMTEzNTgsIDExMzYyLCAxMTM2NywgMTEzNzIsIDExMzc3LCAxMTM4MiwgMTEzODYsIDExMzkxLCAxMTM5NSwgMTE0MDAsIAotICAgIDExNDA1LCAxMTQwOSwgMTE0MTQsIDExNDIxLCAxMTQyNSwgMTE0MzAsIDExNDM0LCAxMTQzOCwgMTE0NDMsIDExNDQ3LCAKLSAgICAxMTQ1NCwgMTE0NjEsIDExNDY4LCAxMTQ3NCwgMTE0ODIsIDExNDkwLCAxMTQ5OSwgMTE1MDcsIDExNTE0LCAxMTUyMSwgCi0gICAgMTE1MjksIDExNTM1LCAxMTU0MSwgMTE1NDcsIDExNTUzLCAxMTU2MCwgMTE1NjUsIDExNTY5LCAxMTU3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE1NzgsIDExNTgzLCAxMTU4OCwgMTE1OTMsIDExNTk4LCAxMTYwMywgMTE2MDgsIDExNjEzLCAxMTYxOCwgCi0gICAgMTE2MjMsIDExNjI4LCAxMTYzMywgMTE2MzgsIDExNjQzLCAxMTY0OCwgMTE2NTMsIDExNjU4LCAxMTY2MywgMTE2NjgsIAotICAgIDExNjczLCAxMTY3OCwgMTE2ODMsIDExNjg4LCAxMTY5MywgMTE2OTgsIDExNzAzLCAxMTcwOCwgMTE3MTYsIDExNzIzLCAKLSAgICAxMTcyOSwgMTE3MzQsIDExNzQyLCAxMTc0OSwgMTE3NTUsIDExNzYyLCAxMTc2OCwgMTE3NzMsIDExNzgwLCAxMTc4NywgCi0gICAgMTE3OTMsIDExNzk4LCAxMTgwMywgMTE4MDksIDExODE0LCAxMTgxOSwgMTE4MjUsIDAsIDAsIDExODMwLCAxMTgzNiwgCi0gICAgMTE4NDIsIDExODQ4LCAxMTg1NCwgMTE4NjAsIDExODY2LCAxMTg3MSwgMTE4NzksIDExODg1LCAxMTg5MSwgMTE4OTcsIAotICAgIDExOTAzLCAxMTkwOSwgMTE5MTcsIDAsIDExOTIzLCAxMTkyOCwgMTE5MzMsIDExOTM4LCAxMTk0MywgMTE5NDgsIDExOTUzLCAKLSAgICAxMTk1OCwgMTE5NjMsIDExOTY4LCAxMTk3MywgMTE5NzgsIDExOTgzLCAxMTk4OCwgMTE5OTMsIDExOTk4LCAxMjAwMywgCi0gICAgMTIwMDgsIDEyMDEzLCAxMjAxOCwgMTIwMjMsIDEyMDI4LCAxMjAzMywgMTIwMzgsIDEyMDQzLCAxMjA0OCwgMTIwNTMsIAotICAgIDEyMDU4LCAwLCAwLCAxMjA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODc5MiwgODgwMywgODgwOCwgODgxMiwgODgxNiwgODgyMCwgODgyMywgMCwgODgyNiwgODgzMywgODgzNywgODg0MywgCisgICAgODg0NywgODg1NCwgODg2MCwgODg2NywgODg3MywgODg3OSwgODg4MywgODg4NywgODg5MywgODg5NywgODkwMSwgODkwNSwgCisgICAgODkwOSwgODkxMywgODkxNywgODkyMSwgODkyNSwgODkyOSwgODkzMywgODkzNywgODk0MSwgODk0NSwgODk0OSwgODk1MywgCisgICAgODk1NywgODk2MSwgODk2OSwgODk3NywgODk4NywgODk5NiwgOTAwNSwgOTAwOCwgOTAxMiwgOTAxNiwgOTAyMCwgOTAyNCwgCisgICAgOTAyOCwgOTAzMiwgOTAzNiwgOTA0MCwgOTA0NSwgOTA0OSwgOTA1MiwgOTA1NSwgOTA1OCwgOTA2MSwgOTA2NCwgOTA2NywgCisgICAgOTA3MCwgOTA3MywgOTA3NywgOTA4MCwgOTA4MywgOTA4OCwgOTA5MywgOTA5OSwgOTEwMiwgOTEwOSwgOTExOCwgOTEyMywgCisgICAgOTEyOCwgOTEzNSwgOTE0MCwgOTE0NSwgOTE0OSwgOTE1MywgOTE1NywgOTE2MSwgOTE2NSwgOTE2OSwgOTE3MywgOTE3NywgCisgICAgOTE4MSwgOTE4NSwgOTE5MCwgOTE5NSwgOTIwMiwgOTIwOCwgOTIxNCwgOTIyMCwgOTIyNSwgOTIzMywgOTI0MSwgOTI0NiwgCisgICAgOTI1MiwgOTI1OCwgOTI2NCwgOTI3MCwgOTI3NCwgOTI3OCwgOTI4MiwgOTI4OSwgOTI5OSwgOTMwMywgOTMwNywgOTMxMSwgCisgICAgOTMxNywgOTMyNSwgOTMyOSwgOTMzMywgOTM0MCwgOTM0NCwgOTM0OCwgOTM1MiwgOTM1OSwgOTM2NiwgOTM3OCwgOTM4MiwgCisgICAgOTM4NiwgOTM5MCwgOTQwMCwgOTQwOSwgOTQxMywgOTQyMSwgOTQyOCwgOTQzNSwgOTQ0NCwgOTQ1NSwgOTQ2MywgOTQ2NywgCisgICAgOTQ3NiwgOTQ4NywgOTQ5NSwgOTUwOCwgOTUxNiwgOTUyNCwgOTUzMiwgOTU0MCwgOTU0NiwgOTU1NSwgOTU2MiwgOTU2NiwgCisgICAgOTU3NCwgOTU3OCwgOTU4NSwgOTU5MywgOTU5NywgOTYwMywgOTYxMCwgOTYxNywgOTYyMSwgOTYyOSwgOTYzMywgOTY0MCwgCisgICAgOTY0NCwgOTY1MiwgOTY1NiwgOTY2NCwgOTY3MiwgOTY3OSwgOTY4NywgOTY5NSwgOTcwMiwgOTcwOCwgOTcxMiwgOTcxOSwgCisgICAgOTcyNywgOTczMywgOTc0MCwgOTc0NywgOTc1MywgOTc2MiwgOTc3MCwgOTc3NywgOTc4MywgOTc4NywgOTc5MCwgOTc5NCwgCisgICAgOTgwMCwgOTgwOCwgOTgxMiwgOTgxOCwgOTgyNCwgOTgzMSwgOTgzOCwgOTg0MSwgOTg0OCwgOTg1MywgOTg2MSwgOTg2NiwgCisgICAgOTg3MCwgOTg4MywgOTg5NiwgOTkwMiwgOTkwOSwgOTkxNCwgOTkyMCwgOTkyNSwgOTkzMSwgOTk0MSwgOTk0OCwgOTk1NywgCisgICAgOTk2NywgOTk3MywgOTk3OCwgOTk4MywgOTk4NywgOTk5MSwgOTk5NiwgMTAwMDEsIDEwMDA3LCAxMDAxNSwgMTAwMjMsIAorICAgIDEwMDM0LCAxMDAzOSwgMTAwNDgsIDEwMDU3LCAxMDA2NCwgMTAwNzAsIDEwMDc2LCAxMDA4MiwgMTAwODgsIDEwMDk0LCAKKyAgICAxMDEwMCwgMTAxMDYsIDEwMTEyLCAxMDExOCwgMTAxMjUsIDEwMTMyLCAxMDEzOSwgMTAxNDUsIDEwMTUzLCAxMDE2MiwgCisgICAgMTAxNjgsIDEwMTc1LCAxMDE4MiwgMTAxODcsIDEwMTkyLCAxMDE5NiwgMTAyMDMsIDEwMjEwLCAxMDIxOSwgMTAyMjgsIAorICAgIDEwMjMxLCAxMDIzNiwgMTAyNDEsIDAsIDEwMjQ2LCAxMDI1MCwgMTAyNTQsIDEwMjYwLCAxMDI2NCwgMTAyNjgsIDEwMjc0LCAKKyAgICAxMDI3OCwgMTAyODYsIDEwMjkwLCAxMDI5NCwgMTAyOTgsIDEwMzAyLCAxMDMwNiwgMTAzMTIsIDEwMzE2LCAxMDMyMiwgCisgICAgMTAzMjYsIDEwMzMwLCAxMDMzNCwgMTAzMzgsIDEwMzQyLCAxMDM0NywgMTAzNTAsIDEwMzU0LCAxMDM2MCwgMTAzNjQsIAorICAgIDEwMzY4LCAxMDM3MiwgMTAzNzYsIDEwMzgwLCAxMDM4NiwgMTAzOTIsIDEwMzk4LCAxMDQwMiwgMTA0MDYsIDEwNDExLCAKKyAgICAxMDQxNSwgMTA0MTksIDEwNDI0LCAxMDQyOCwgMTA0MzIsIDEwNDM5LCAxMDQ0NiwgMTA0NTAsIDEwNDU0LCAxMDQ1OSwgCisgICAgMTA0NjMsIDEwNDY3LCAxMDQ3MCwgMTA0NzUsIDEwNDc4LCAxMDQ4MSwgMTA0ODYsIDEwNDkxLCAxMDQ5NSwgMTA0OTksIAorICAgIDEwNTA1LCAxMDUxMSwgMTA1MTQsIDAsIDAsIDEwNTE3LCAxMDUyMywgMTA1MjksIDEwNTM1LCAxMDU0NSwgMTA1NTcsIAorICAgIDEwNTY5LCAxMDU4NiwgMTA1OTgsIDEwNjA5LCAxMDYxNywgMTA2MjQsIDEwNjM1LCAxMDY1MCwgMTA2NjEsIDEwNjY3LCAKKyAgICAxMDY3NiwgMTA2ODQsIDEwNjk2LCAxMDcwNiwgMTA3MTQsIDEwNzI2LCAxMDczMywgMTA3NDEsIDEwNzUzLCAxMDc1OSwgCisgICAgMTA3NjUsIDEwNzczLCAxMDc4MSwgMTA3ODksIDEwNzk1LCAxMDgwNSwgMTA4MTIsIDEwODIyLCAxMDgzMiwgMTA4NDUsIAorICAgIDEwODU5LCAxMDg3MywgMTA4ODMsIDEwODk0LCAxMDkwNSwgMTA5MTgsIDEwOTMxLCAxMDk0NSwgMTA5NTcsIDEwOTY5LCAKKyAgICAxMDk4MiwgMTA5OTUsIDExMDA3LCAxMTAyMCwgMTEwMjksIDExMDM3LCAxMTA0MiwgMTEwNDcsIDExMDUyLCAxMTA1NywgCisgICAgMTEwNjIsIDExMDY3LCAxMTA3MiwgMTEwNzcsIDExMDgyLCAxMTA4NywgMTEwOTIsIDExMDk3LCAxMTEwMiwgMTExMDcsIAorICAgIDExMTEyLCAxMTExNywgMTExMjIsIDExMTI3LCAxMTEzMiwgMTExMzcsIDExMTQyLCAxMTE0NywgMTExNTIsIDExMTU3LCAKKyAgICAxMTE2MiwgMTExNjcsIDExMTcyLCAxMTE3NywgMTExODIsIDExMTg3LCAxMTE5MiwgMTExOTcsIDExMjAxLCAxMTIwNiwgCisgICAgMTEyMTEsIDExMjE2LCAxMTIyMSwgMTEyMjYsIDExMjMwLCAxMTIzNCwgMTEyMzgsIDExMjQyLCAxMTI0NiwgMTEyNTAsIAorICAgIDExMjU0LCAxMTI1OCwgMTEyNjIsIDExMjY2LCAxMTI3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTEyNzUsIDExMjgwLCAxMTI4NCwgMTEyODgsIDExMjkyLCAxMTI5NiwgMTEzMDAsIDExMzA0LCAxMTMwOCwgMTEzMTIsIAorICAgIDExMzE2LCAxMTMyMCwgMTEzMjUsIDExMzI5LCAxMTMzMywgMTEzMzcsIDExMzQyLCAxMTM0NiwgMTEzNTEsIDExMzU2LCAKKyAgICAxMTM2MSwgMTEzNjUsIDExMzcwLCAxMTM3NSwgMTEzODAsIDExMzg1LCAxMTM4OSwgMTEzOTQsIDExMzk4LCAxMTQwMywgCisgICAgMTE0MDgsIDExNDEyLCAxMTQxNywgMTE0MjQsIDExNDI4LCAxMTQzMywgMTE0MzcsIDExNDQxLCAxMTQ0NiwgMTE0NTAsIAorICAgIDExNDU3LCAxMTQ2NCwgMTE0NzEsIDExNDc3LCAxMTQ4NSwgMTE0OTMsIDExNTAyLCAxMTUxMCwgMTE1MTcsIDExNTI0LCAKKyAgICAxMTUzMiwgMTE1MzgsIDExNTQ0LCAxMTU1MCwgMTE1NTYsIDExNTYzLCAxMTU2OCwgMTE1NzIsIDExNTc3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMTU4MSwgMTE1ODYsIDExNTkxLCAxMTU5NiwgMTE2MDEsIDExNjA2LCAxMTYxMSwgMTE2MTYsIDExNjIxLCAKKyAgICAxMTYyNiwgMTE2MzEsIDExNjM2LCAxMTY0MSwgMTE2NDYsIDExNjUxLCAxMTY1NiwgMTE2NjEsIDExNjY2LCAxMTY3MSwgCisgICAgMTE2NzYsIDExNjgxLCAxMTY4NiwgMTE2OTEsIDExNjk2LCAxMTcwMSwgMTE3MDYsIDExNzExLCAxMTcxOSwgMTE3MjYsIAorICAgIDExNzMyLCAxMTczNywgMTE3NDUsIDExNzUyLCAxMTc1OCwgMTE3NjUsIDExNzcxLCAxMTc3NiwgMTE3ODMsIDExNzkwLCAKKyAgICAxMTc5NiwgMTE4MDEsIDExODA2LCAxMTgxMiwgMTE4MTcsIDExODIyLCAxMTgyOCwgMCwgMCwgMTE4MzMsIDExODM5LCAKKyAgICAxMTg0NSwgMTE4NTEsIDExODU3LCAxMTg2MywgMTE4NjksIDExODc0LCAxMTg4MiwgMTE4ODgsIDExODk0LCAxMTkwMCwgCisgICAgMTE5MDYsIDExOTEyLCAxMTkyMCwgMCwgMTE5MjYsIDExOTMxLCAxMTkzNiwgMTE5NDEsIDExOTQ2LCAxMTk1MSwgMTE5NTYsIAorICAgIDExOTYxLCAxMTk2NiwgMTE5NzEsIDExOTc2LCAxMTk4MSwgMTE5ODYsIDExOTkxLCAxMTk5NiwgMTIwMDEsIDEyMDA2LCAKKyAgICAxMjAxMSwgMTIwMTYsIDEyMDIxLCAxMjAyNiwgMTIwMzEsIDEyMDM2LCAxMjA0MSwgMTIwNDYsIDEyMDUxLCAxMjA1NiwgCisgICAgMTIwNjEsIDAsIDAsIDEyMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjA2NywgMCwgMTIwNzYsIDEyMDgzLCAxMjA5MSwgMTIxMDMsIDEyMTEwLCAxMjExNywgMTIxMjQsIDEyMTM1LCAxMjE0NiwgCi0gICAgMTIxNTMsIDEyMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA3MCwgMCwgMTIwNzksIDEyMDg2LCAxMjA5NCwgMTIxMDYsIDEyMTEzLCAxMjEyMCwgMTIxMjcsIDEyMTM4LCAxMjE0OSwgCisgICAgMTIxNTYsIDEyMTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE2NywgMTIxNzIsIDEyMTc3LCAxMjE4MiwgMTIxODcsIAotICAgIDEyMTkyLCAxMjE5NywgMTIyMDIsIDEyMjA3LCAxMjIxMiwgMTIyMTcsIDEyMjIyLCAxMjIyNywgMTIyMzEsIDEyMjM1LCAKLSAgICAxMjIzOSwgMTIyNDQsIDEyMjUwLCAxMjI1NiwgMTIyNjIsIDEyMjY3LCAxMjI3MiwgMTIyNzcsIDEyMjgyLCAxMjI4OCwgCi0gICAgMTIyOTcsIDEyMzA1LCAwLCAxMjMxMSwgMTIzMTcsIDEyMzIxLCAxMjMyNSwgMTIzMjksIDEyMzM0LCAxMjMzNywgMTIzNDEsIAotICAgIDEyMzQ0LCAxMjM0OCwgMTIzNTEsIDEyMzU1LCAxMjM1OSwgMTIzNjMsIDEyMzY4LCAxMjM3MywgMTIzNzYsIDEyMzgwLCAKLSAgICAxMjM4NSwgMTIzOTAsIDEyMzkzLCAxMjM5NywgMTI0MDAsIDEyNDA0LCAxMjQwOCwgMTI0MTIsIDEyNDE2LCAxMjQyMCwgCi0gICAgMTI0MjQsIDEyNDI4LCAxMjQzMiwgMTI0MzYsIDEyNDQwLCAxMjQ0NCwgMTI0NDgsIDEyNDUyLCAxMjQ1NiwgMTI0NjAsIAotICAgIDEyNDY0LCAxMjQ2OCwgMTI0NzIsIDEyNDc1LCAxMjQ3OSwgMTI0ODIsIDEyNDg2LCAxMjQ5MCwgMTI0OTQsIDEyNDk3LCAKLSAgICAxMjUwMCwgMTI1MDMsIDEyNTA3LCAxMjUxMSwgMTI1MTUsIDEyNTE5LCAxMjUyMywgMTI1MjcsIDEyNTMxLCAxMjUzNCwgCi0gICAgMTI1MzcsIDEyNTQyLCAxMjU0NywgMTI1NTEsIDEyNTU1LCAxMjU2MCwgMTI1NjQsIDEyNTY5LCAxMjU3MywgMTI1NzgsIAotICAgIDEyNTgzLCAxMjU4OSwgMTI1OTUsIDEyNjAxLCAxMjYwNSwgMTI2MTAsIDEyNjE2LCAxMjYyMiwgMTI2MjYsIDEyNjMxLCAKLSAgICAxMjYzNSwgMTI2NDEsIDEyNjQ2LCAxMjY0OSwgMTI2NTUsIDEyNjYxLCAxMjY2NiwgMTI2NzEsIDEyNjc4LCAxMjY4MywgCi0gICAgMTI2ODgsIDEyNjkyLCAxMjY5NiwgMTI3MDAsIDEyNzA0LCAxMjcwOCwgMTI3MTIsIDEyNzE2LCAxMjcyMCwgMTI3MjUsIAotICAgIDEyNzMwLCAxMjczNSwgMTI3NDEsIDEyNzQ0LCAxMjc0OCwgMTI3NTIsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAKLSAgICAxMjc2NywgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgzLCAxMjc5MCwgMTI3OTUsIDEyNzk5LCAxMjgwMywgCi0gICAgMTI4MDcsIDEyODExLCAwLCAxMjgxNSwgMTI4MTksIDEyODIzLCAxMjgyNywgMTI4MzEsIDEyODM3LCAxMjg0MSwgMCwgCi0gICAgMTI4NDUsIDEyODQ5LCAxMjg1MywgMCwgMTI4NTcsIDEyODYwLCAxMjg2NCwgMTI4NjcsIDEyODcxLCAxMjg3NCwgMTI4NzgsIAotICAgIDEyODgyLCAwLCAwLCAxMjg4NiwgMTI4ODksIDAsIDAsIDEyODkzLCAxMjg5NiwgMTI5MDAsIDEyOTAzLCAxMjkwNywgCi0gICAgMTI5MTEsIDEyOTE1LCAxMjkxOSwgMTI5MjMsIDEyOTI3LCAxMjkzMSwgMTI5MzUsIDEyOTM5LCAxMjk0MywgMTI5NDcsIAotICAgIDEyOTUxLCAxMjk1NSwgMTI5NTksIDEyOTYzLCAxMjk2NywgMTI5NzEsIDEyOTc1LCAwLCAxMjk3OCwgMTI5ODEsIDEyOTg1LCAKLSAgICAxMjk4OSwgMTI5OTMsIDEyOTk2LCAxMjk5OSwgMCwgMTMwMDIsIDAsIDAsIDAsIDEzMDA2LCAxMzAxMCwgMTMwMTQsIAotICAgIDEzMDE3LCAwLCAwLCAxMzAyMCwgMTMwMjQsIDEzMDI4LCAxMzAzMywgMTMwMzcsIDEzMDQyLCAxMzA0NiwgMTMwNTEsIAotICAgIDEzMDU2LCAwLCAwLCAxMzA2MiwgMTMwNjYsIDAsIDAsIDEzMDcxLCAxMzA3NSwgMTMwODAsIDEzMDg0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMzA5MCwgMCwgMCwgMCwgMCwgMTMwOTYsIDEzMTAwLCAwLCAxMzEwNCwgMTMxMDgsIDEzMTEzLCAKLSAgICAxMzExOCwgMTMxMjMsIDAsIDAsIDEzMTI5LCAxMzEzMywgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAKLSAgICAxMzE1MSwgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjksIDEzMTc4LCAxMzE4MiwgMTMxODYsIDEzMTkyLCAxMzE5OCwgCi0gICAgMTMyMDQsIDEzMjEwLCAxMzIyNCwgMTMyMzEsIDEzMjM0LCAwLCAwLCAwLCAwLCAwLCAxMzIzOCwgMTMyNDQsIDEzMjQ4LCAwLCAKLSAgICAxMzI1MiwgMTMyNTUsIDEzMjU5LCAxMzI2MiwgMTMyNjYsIDEzMjY5LCAwLCAwLCAwLCAwLCAxMzI3MywgMTMyNzcsIDAsIDAsIAotICAgIDEzMjgxLCAxMzI4NSwgMTMyODksIDEzMjkyLCAxMzI5NiwgMTMzMDAsIDEzMzA0LCAxMzMwOCwgMTMzMTIsIDEzMzE2LCAKLSAgICAxMzMyMCwgMTMzMjQsIDEzMzI4LCAxMzMzMiwgMTMzMzYsIDEzMzQwLCAxMzM0NCwgMTMzNDgsIDEzMzUyLCAxMzM1NiwgCi0gICAgMTMzNjAsIDEzMzY0LCAwLCAxMzM2NywgMTMzNzAsIDEzMzc0LCAxMzM3OCwgMTMzODIsIDEzMzg1LCAxMzM4OCwgMCwgCi0gICAgMTMzOTEsIDEzMzk1LCAwLCAxMzM5OSwgMTM0MDMsIDAsIDEzNDA3LCAxMzQxMCwgMCwgMCwgMTM0MTMsIDAsIDEzNDE3LCAKLSAgICAxMzQyMiwgMTM0MjYsIDEzNDMxLCAxMzQzNSwgMCwgMCwgMCwgMCwgMTM0NDAsIDEzNDQ1LCAwLCAwLCAxMzQ1MCwgMTM0NTUsIAotICAgIDEzNDYwLCAwLCAwLCAwLCAxMzQ2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0NjgsIDEzNDcyLCAxMzQ3NiwgMTM0ODAsIAotICAgIDAsIDEzNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ4OCwgMTM0OTIsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAKLSAgICAxMzUwNywgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1NDAsIDEzNTQ0LCAxMzU0OCwgMCwgMTM1NTIsIDEzNTU1LCAKLSAgICAxMzU1OSwgMTM1NjIsIDEzNTY2LCAxMzU2OSwgMTM1NzMsIDEzNTc3LCAxMzU4MSwgMCwgMTM1ODYsIDEzNTg5LCAxMzU5MywgCi0gICAgMCwgMTM1OTgsIDEzNjAxLCAxMzYwNSwgMTM2MDgsIDEzNjEyLCAxMzYxNiwgMTM2MjAsIDEzNjI0LCAxMzYyOCwgMTM2MzIsIAotICAgIDEzNjM2LCAxMzY0MCwgMTM2NDQsIDEzNjQ4LCAxMzY1MiwgMTM2NTYsIDEzNjYwLCAxMzY2NCwgMTM2NjgsIDEzNjcyLCAKLSAgICAxMzY3NiwgMTM2ODAsIDAsIDEzNjgzLCAxMzY4NiwgMTM2OTAsIDEzNjk0LCAxMzY5OCwgMTM3MDEsIDEzNzA0LCAwLCAKLSAgICAxMzcwNywgMTM3MTEsIDAsIDEzNzE1LCAxMzcxOSwgMTM3MjMsIDEzNzI3LCAxMzczMCwgMCwgMCwgMTM3MzMsIDEzNzM3LCAKLSAgICAxMzc0MSwgMTM3NDYsIDEzNzUwLCAxMzc1NSwgMTM3NTksIDEzNzY0LCAxMzc2OSwgMTM3NzUsIDAsIDEzNzgxLCAxMzc4NSwgCi0gICAgMTM3OTAsIDAsIDEzNzk2LCAxMzgwMCwgMTM4MDUsIDAsIDAsIDEzODA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMzgxMiwgMTM4MTcsIDEzODIyLCAxMzgyNywgMCwgMCwgMTM4MzMsIDEzODM3LCAxMzg0MCwgCi0gICAgMTM4NDMsIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4NzIsIDEzODc2LCAxMzg4MCwgMCwgMTM4ODQsIDEzODg3LCAKLSAgICAxMzg5MSwgMTM4OTQsIDEzODk4LCAxMzkwMSwgMTM5MDUsIDEzOTA5LCAwLCAwLCAxMzkxMywgMTM5MTYsIDAsIDAsIAotICAgIDEzOTIwLCAxMzkyMywgMTM5MjcsIDEzOTMwLCAxMzkzNCwgMTM5MzgsIDEzOTQyLCAxMzk0NiwgMTM5NTAsIDEzOTU0LCAKLSAgICAxMzk1OCwgMTM5NjIsIDEzOTY2LCAxMzk3MCwgMTM5NzQsIDEzOTc4LCAxMzk4MiwgMTM5ODYsIDEzOTkwLCAxMzk5NCwgCi0gICAgMTM5OTgsIDE0MDAyLCAwLCAxNDAwNSwgMTQwMDgsIDE0MDEyLCAxNDAxNiwgMTQwMjAsIDE0MDIzLCAxNDAyNiwgMCwgCi0gICAgMTQwMjksIDE0MDMzLCAwLCAxNDAzNywgMTQwNDEsIDE0MDQ1LCAxNDA0OSwgMTQwNTIsIDAsIDAsIDE0MDU1LCAxNDA1OSwgCi0gICAgMTQwNjMsIDE0MDY4LCAxNDA3MiwgMTQwNzcsIDE0MDgxLCAxNDA4NiwgMTQwOTEsIDAsIDAsIDE0MDk3LCAxNDEwMSwgMCwgCi0gICAgMCwgMTQxMDYsIDE0MTEwLCAxNDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxMTksIDE0MTI1LCAwLCAwLCAwLCAwLCAKLSAgICAxNDEzMSwgMTQxMzUsIDAsIDE0MTM5LCAxNDE0MywgMTQxNDgsIDE0MTUzLCAxNDE1OCwgMCwgMCwgMTQxNjQsIDE0MTY4LCAKLSAgICAxNDE3MSwgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgCi0gICAgMTQyMDIsIDE0MjA4LCAxNDIxNCwgMTQyMjAsIDE0MjI2LCAxNDIzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTQyMzgsIDE0MjQyLCAwLCAxNDI0NiwgMTQyNDksIDE0MjUzLCAxNDI1NiwgMTQyNjAsIDE0MjYzLCAwLCAwLCAwLCAKLSAgICAxNDI2NywgMTQyNzAsIDE0Mjc0LCAwLCAxNDI3OCwgMTQyODEsIDE0Mjg1LCAxNDI4OSwgMCwgMCwgMCwgMTQyOTIsIAotICAgIDE0Mjk2LCAwLCAxNDMwMCwgMCwgMTQzMDQsIDE0MzA4LCAwLCAwLCAwLCAxNDMxMiwgMTQzMTYsIDAsIDAsIDAsIDE0MzIwLCAKLSAgICAxNDMyMywgMTQzMjcsIDAsIDAsIDAsIDE0MzMwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MywgMTQzNDcsIDE0MzUxLCAKLSAgICAxNDM1NSwgMTQzNTksIDE0MzYzLCAxNDM2NywgMTQzNzAsIDAsIDAsIDAsIDAsIDE0MzczLCAxNDM3OCwgMTQzODIsIAotICAgIDE0Mzg3LCAxNDM5MSwgMCwgMCwgMCwgMTQzOTYsIDE0NDAwLCAxNDQwNSwgMCwgMTQ0MTAsIDE0NDE0LCAxNDQxOSwgCi0gICAgMTQ0MjQsIDAsIDAsIDE0NDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQ0MzcsIDE0NDQxLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAKLSAgICAxNDQ2MiwgMTQ0NjUsIDE0NDY4LCAxNDQ3MiwgMTQ0NzcsIDE0NDgyLCAxNDQ4NiwgMTQ0OTAsIDE0NDk0LCAxNDQ5OCwgCi0gICAgMTQ1MDIsIDE0NTA3LCAxNDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ1MTQsIDE0NTE4LCAxNDUyMiwgMCwgMTQ1MjYsIAotICAgIDE0NTI5LCAxNDUzMywgMTQ1MzYsIDE0NTQwLCAxNDU0MywgMTQ1NDcsIDE0NTUxLCAwLCAxNDU1NSwgMTQ1NTgsIDE0NTYyLCAKLSAgICAwLCAxNDU2NiwgMTQ1NjksIDE0NTczLCAxNDU3NywgMTQ1ODAsIDE0NTg0LCAxNDU4OCwgMTQ1OTIsIDE0NTk2LCAxNDYwMCwgCi0gICAgMTQ2MDQsIDE0NjA4LCAxNDYxMiwgMTQ2MTYsIDE0NjIwLCAxNDYyNCwgMTQ2MjgsIDE0NjMyLCAxNDYzNiwgMTQ2NDAsIAotICAgIDE0NjQ0LCAxNDY0OCwgMTQ2NTIsIDAsIDE0NjU1LCAxNDY1OCwgMTQ2NjIsIDE0NjY2LCAxNDY3MCwgMTQ2NzMsIDE0Njc2LCAKLSAgICAxNDY3OSwgMTQ2ODMsIDE0Njg3LCAwLCAxNDY5MSwgMTQ2OTUsIDE0Njk5LCAxNDcwMywgMTQ3MDYsIDAsIDAsIDAsIAotICAgIDE0NzA5LCAxNDcxMywgMTQ3MTgsIDE0NzIyLCAxNDcyNywgMTQ3MzEsIDE0NzM2LCAxNDc0MSwgMCwgMTQ3NDcsIDE0NzUxLCAKLSAgICAxNDc1NiwgMCwgMTQ3NjEsIDE0NzY1LCAxNDc3MCwgMTQ3NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0Nzc5LCAxNDc4MywgCi0gICAgMCwgMTQ3ODksIDE0NzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc5NywgMTQ4MDIsIDE0ODA3LCAxNDgxMiwgMCwgMCwgCi0gICAgMTQ4MTgsIDE0ODIyLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODQ5LCAxNDg2MiwgMTQ4NzQsIDE0ODg2LCAxNDg5OCwgMTQ5MTAsIDE0OTIyLCAKLSAgICAxNDkzNCwgMCwgMCwgMTQ5MzgsIDE0OTQyLCAwLCAxNDk0NiwgMTQ5NDksIDE0OTUzLCAxNDk1NiwgMTQ5NjAsIDE0OTYzLCAKLSAgICAxNDk2NywgMTQ5NzEsIDAsIDE0OTc1LCAxNDk3OCwgMTQ5ODIsIDAsIDE0OTg2LCAxNDk4OSwgMTQ5OTMsIDE0OTk3LCAKLSAgICAxNTAwMCwgMTUwMDQsIDE1MDA4LCAxNTAxMiwgMTUwMTYsIDE1MDIwLCAxNTAyNCwgMTUwMjgsIDE1MDMyLCAxNTAzNiwgCi0gICAgMTUwNDAsIDE1MDQ0LCAxNTA0OCwgMTUwNTIsIDE1MDU2LCAxNTA2MCwgMTUwNjQsIDE1MDY4LCAxNTA3MiwgMCwgMTUwNzUsIAotICAgIDE1MDc4LCAxNTA4MiwgMTUwODYsIDE1MDkwLCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMywgMTUxMDcsIDAsIDE1MTExLCAKLSAgICAxNTExNSwgMTUxMTksIDE1MTIzLCAxNTEyNiwgMCwgMCwgMTUxMjksIDE1MTMzLCAxNTEzNywgMTUxNDIsIDE1MTQ2LCAKLSAgICAxNTE1MSwgMTUxNTUsIDE1MTYwLCAxNTE2NSwgMCwgMTUxNzEsIDE1MTc1LCAxNTE4MCwgMCwgMTUxODUsIDE1MTg5LCAKLSAgICAxNTE5NCwgMTUxOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjAzLCAxNTIwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTUyMTMsIDAsIDE1MjE3LCAxNTIyMiwgMTUyMjcsIDE1MjMyLCAwLCAwLCAxNTIzOCwgMTUyNDIsIDE1MjQ1LCAxNTI0OCwgCi0gICAgMTUyNTEsIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMCwgMTUyNjksIDE1MjczLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTI3NywgMTUyODEsIDAsIDE1Mjg1LCAxNTI4OCwgMTUyOTIsIAotICAgIDE1Mjk1LCAxNTI5OSwgMTUzMDIsIDE1MzA2LCAxNTMxMCwgMCwgMTUzMTQsIDE1MzE3LCAxNTMyMSwgMCwgMTUzMjUsIAotICAgIDE1MzI4LCAxNTMzMiwgMTUzMzYsIDE1MzM5LCAxNTM0MywgMTUzNDcsIDE1MzUxLCAxNTM1NSwgMTUzNTksIDE1MzYzLCAKLSAgICAxNTM2NywgMTUzNzEsIDE1Mzc1LCAxNTM3OSwgMTUzODMsIDE1Mzg3LCAxNTM5MSwgMTUzOTUsIDE1Mzk5LCAxNTQwMywgCi0gICAgMTU0MDcsIDE1NDExLCAxNTQxNCwgMTU0MTgsIDE1NDIxLCAxNTQyNSwgMTU0MjksIDE1NDMzLCAxNTQzNiwgMTU0MzksIAotICAgIDE1NDQyLCAxNTQ0NiwgMTU0NTAsIDE1NDU0LCAxNTQ1OCwgMTU0NjIsIDE1NDY2LCAxNTQ3MCwgMTU0NzMsIDE1NDc2LCAwLCAKLSAgICAwLCAxNTQ4MCwgMTU0ODQsIDE1NDg5LCAxNTQ5MywgMTU0OTgsIDE1NTAyLCAxNTUwNywgMTU1MTIsIDAsIDE1NTE4LCAKLSAgICAxNTUyMiwgMTU1MjcsIDAsIDE1NTMyLCAxNTUzNiwgMTU1NDEsIDE1NTQ2LCAxNTU1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTU1NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTYxLCAxNTU2NiwgMTU1NzEsIDE1NTc2LCAwLCAwLCAKLSAgICAxNTU4MiwgMTU1ODYsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgCi0gICAgMTU2MTMsIDE1NjE3LCAxNTYyMiwgMTU2MjcsIDE1NjMzLCAxNTYzOSwgMCwgMCwgMCwgMTU2NDUsIDE1NjQ5LCAxNTY1NSwgCi0gICAgMTU2NjEsIDE1NjY3LCAxNTY3MiwgMTU2NzgsIDAsIDAsIDE1Njg0LCAxNTY4OCwgMCwgMTU2OTIsIDE1Njk2LCAxNTcwMCwgCi0gICAgMTU3MDQsIDE1NzA4LCAxNTcxMiwgMTU3MTYsIDE1NzIwLCAxNTcyNCwgMTU3MjgsIDE1NzMyLCAxNTczNiwgMTU3NDAsIAotICAgIDE1NzQ0LCAxNTc0OCwgMTU3NTIsIDE1NzU2LCAxNTc2MCwgMCwgMCwgMCwgMTU3NjQsIDE1NzcwLCAxNTc3NiwgMTU3ODIsIAotICAgIDE1Nzg4LCAxNTc5NCwgMTU4MDAsIDE1ODA2LCAxNTgxMiwgMTU4MTgsIDE1ODI0LCAxNTgzMCwgMTU4MzgsIDE1ODQ0LCAKLSAgICAxNTg1MCwgMTU4NTYsIDE1ODYyLCAxNTg2OCwgMTU4NzQsIDE1ODgwLCAxNTg4NiwgMTU4OTIsIDE1ODk4LCAxNTkwNCwgMCwgCi0gICAgMTU5MTAsIDE1OTE2LCAxNTkyMiwgMTU5MjgsIDE1OTM0LCAxNTk0MCwgMTU5NDQsIDE1OTUwLCAxNTk1NCwgMCwgMTU5NTgsIAotICAgIDAsIDAsIDE1OTY0LCAxNTk2OCwgMTU5NzQsIDE1OTgwLCAxNTk4NiwgMTU5OTAsIDE1OTk2LCAwLCAwLCAwLCAxNjAwMCwgMCwgCi0gICAgMCwgMCwgMCwgMTYwMDQsIDE2MDA5LCAxNjAxNiwgMTYwMjMsIDE2MDMwLCAxNjAzNywgMCwgMTYwNDQsIDAsIDE2MDUxLCAKLSAgICAxNjA1NiwgMTYwNjEsIDE2MDY4LCAxNjA3NSwgMTYwODQsIDE2MDk1LCAxNjEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMDksIDE2MTE2LCAxNjEyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTYxMjgsIDE2MTM0LCAxNjE0MCwgMTYxNDYsIDE2MTUyLCAxNjE1OCwgMTYxNjQsIDE2MTcwLCAKLSAgICAxNjE3NiwgMTYxODIsIDE2MTg4LCAxNjE5NCwgMTYyMDAsIDE2MjA2LCAxNjIxMiwgMTYyMTgsIDE2MjI0LCAxNjIzMCwgCi0gICAgMTYyMzYsIDE2MjQyLCAxNjI0OCwgMTYyNTQsIDE2MjYwLCAxNjI2NiwgMTYyNzIsIDE2Mjc4LCAxNjI4NCwgMTYyOTAsIAotICAgIDE2Mjk2LCAxNjMwMiwgMTYzMDgsIDE2MzE0LCAxNjMyMCwgMTYzMjUsIDE2MzMxLCAxNjMzNywgMTYzNDEsIDE2MzQ3LCAKLSAgICAxNjM1MSwgMTYzNTcsIDE2MzYzLCAxNjM2OSwgMTYzNzUsIDE2MzgxLCAxNjM4NywgMTYzOTIsIDE2Mzk4LCAxNjQwMiwgCi0gICAgMTY0MDcsIDE2NDEzLCAxNjQxOSwgMTY0MjUsIDE2NDMwLCAxNjQzNiwgMTY0NDIsIDE2NDQ4LCAxNjQ1MywgMTY0NTksIDAsIAotICAgIDAsIDAsIDAsIDE2NDYzLCAxNjQ2OSwgMTY0NzQsIDE2NDgwLCAxNjQ4NSwgMTY0OTMsIDE2NTAxLCAxNjUwNSwgMTY1MDksIAotICAgIDE2NTEzLCAxNjUxOSwgMTY1MjUsIDE2NTMxLCAxNjUzNywgMTY1NDEsIDE2NTQ1LCAxNjU0OSwgMTY1NTMsIDE2NTU3LCAKLSAgICAxNjU2MCwgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODUsIDEyMTkwLCAKKyAgICAxMjE5NSwgMTIyMDAsIDEyMjA1LCAxMjIxMCwgMTIyMTUsIDEyMjIwLCAxMjIyNSwgMTIyMzAsIDEyMjM0LCAxMjIzOCwgCisgICAgMTIyNDIsIDEyMjQ3LCAxMjI1MywgMTIyNTksIDEyMjY1LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTEsIAorICAgIDEyMzAwLCAxMjMwOCwgMCwgMTIzMTQsIDEyMzIwLCAxMjMyNCwgMTIzMjgsIDEyMzMyLCAxMjMzNywgMTIzNDAsIDEyMzQ0LCAKKyAgICAxMjM0NywgMTIzNTEsIDEyMzU0LCAxMjM1OCwgMTIzNjIsIDEyMzY2LCAxMjM3MSwgMTIzNzYsIDEyMzc5LCAxMjM4MywgCisgICAgMTIzODgsIDEyMzkzLCAxMjM5NiwgMTI0MDAsIDEyNDAzLCAxMjQwNywgMTI0MTEsIDEyNDE1LCAxMjQxOSwgMTI0MjMsIAorICAgIDEyNDI3LCAxMjQzMSwgMTI0MzUsIDEyNDM5LCAxMjQ0MywgMTI0NDcsIDEyNDUxLCAxMjQ1NSwgMTI0NTksIDEyNDYzLCAKKyAgICAxMjQ2NywgMTI0NzEsIDEyNDc1LCAxMjQ3OCwgMTI0ODIsIDEyNDg1LCAxMjQ4OSwgMTI0OTMsIDEyNDk3LCAxMjUwMCwgCisgICAgMTI1MDMsIDEyNTA2LCAxMjUxMCwgMTI1MTQsIDEyNTE4LCAxMjUyMiwgMTI1MjYsIDEyNTMwLCAxMjUzNCwgMTI1MzcsIAorICAgIDEyNTQwLCAxMjU0NSwgMTI1NTAsIDEyNTU0LCAxMjU1OCwgMTI1NjMsIDEyNTY3LCAxMjU3MiwgMTI1NzYsIDEyNTgxLCAKKyAgICAxMjU4NiwgMTI1OTIsIDEyNTk4LCAxMjYwNCwgMTI2MDgsIDEyNjEzLCAxMjYxOSwgMTI2MjUsIDEyNjI5LCAxMjYzNCwgCisgICAgMTI2MzgsIDEyNjQ0LCAxMjY0OSwgMTI2NTIsIDEyNjU4LCAxMjY2NCwgMTI2NjksIDEyNjc0LCAxMjY4MSwgMTI2ODYsIAorICAgIDEyNjkxLCAxMjY5NSwgMTI2OTksIDEyNzAzLCAxMjcwNywgMTI3MTEsIDEyNzE1LCAxMjcxOSwgMTI3MjMsIDEyNzI4LCAKKyAgICAxMjczMywgMTI3MzgsIDEyNzQ0LCAxMjc0NywgMTI3NTEsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAxMjc2NywgCisgICAgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgyLCAxMjc4NiwgMTI3OTMsIDEyNzk4LCAxMjgwMiwgMTI4MDYsIAorICAgIDEyODEwLCAxMjgxNCwgMCwgMTI4MTgsIDEyODIyLCAxMjgyNiwgMTI4MzAsIDEyODM0LCAxMjg0MCwgMTI4NDQsIDAsIAorICAgIDEyODQ4LCAxMjg1MiwgMTI4NTYsIDAsIDEyODYwLCAxMjg2MywgMTI4NjcsIDEyODcwLCAxMjg3NCwgMTI4NzcsIDEyODgxLCAKKyAgICAxMjg4NSwgMCwgMCwgMTI4ODksIDEyODkyLCAwLCAwLCAxMjg5NiwgMTI4OTksIDEyOTAzLCAxMjkwNiwgMTI5MTAsIAorICAgIDEyOTE0LCAxMjkxOCwgMTI5MjIsIDEyOTI2LCAxMjkzMCwgMTI5MzQsIDEyOTM4LCAxMjk0MiwgMTI5NDYsIDEyOTUwLCAKKyAgICAxMjk1NCwgMTI5NTgsIDEyOTYyLCAxMjk2NiwgMTI5NzAsIDEyOTc0LCAxMjk3OCwgMCwgMTI5ODEsIDEyOTg0LCAxMjk4OCwgCisgICAgMTI5OTIsIDEyOTk2LCAxMjk5OSwgMTMwMDIsIDAsIDEzMDA1LCAwLCAwLCAwLCAxMzAwOSwgMTMwMTMsIDEzMDE3LCAKKyAgICAxMzAyMCwgMCwgMCwgMTMwMjMsIDEzMDI3LCAxMzAzMSwgMTMwMzYsIDEzMDQwLCAxMzA0NSwgMTMwNDksIDEzMDU0LCAKKyAgICAxMzA1OSwgMCwgMCwgMTMwNjUsIDEzMDY5LCAwLCAwLCAxMzA3NCwgMTMwNzgsIDEzMDgzLCAxMzA4NywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTMwOTMsIDAsIDAsIDAsIDAsIDEzMDk5LCAxMzEwMywgMCwgMTMxMDcsIDEzMTExLCAxMzExNiwgCisgICAgMTMxMjEsIDEzMTI2LCAwLCAwLCAxMzEzMiwgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAxMzE1MSwgCisgICAgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjMsIDEzMTcyLCAxMzE4MSwgMTMxODUsIDEzMTg5LCAxMzE5NSwgMTMyMDEsIAorICAgIDEzMjA3LCAxMzIxMywgMTMyMjcsIDEzMjM0LCAxMzIzNywgMCwgMCwgMCwgMCwgMCwgMTMyNDEsIDEzMjQ3LCAxMzI1MSwgMCwgCisgICAgMTMyNTUsIDEzMjU4LCAxMzI2MiwgMTMyNjUsIDEzMjY5LCAxMzI3MiwgMCwgMCwgMCwgMCwgMTMyNzYsIDEzMjgwLCAwLCAwLCAKKyAgICAxMzI4NCwgMTMyODgsIDEzMjkyLCAxMzI5NSwgMTMyOTksIDEzMzAzLCAxMzMwNywgMTMzMTEsIDEzMzE1LCAxMzMxOSwgCisgICAgMTMzMjMsIDEzMzI3LCAxMzMzMSwgMTMzMzUsIDEzMzM5LCAxMzM0MywgMTMzNDcsIDEzMzUxLCAxMzM1NSwgMTMzNTksIAorICAgIDEzMzYzLCAxMzM2NywgMCwgMTMzNzAsIDEzMzczLCAxMzM3NywgMTMzODEsIDEzMzg1LCAxMzM4OCwgMTMzOTEsIDAsIAorICAgIDEzMzk0LCAxMzM5OCwgMCwgMTM0MDIsIDEzNDA2LCAwLCAxMzQxMCwgMTM0MTMsIDAsIDAsIDEzNDE2LCAwLCAxMzQyMCwgCisgICAgMTM0MjUsIDEzNDI5LCAxMzQzNCwgMTM0MzgsIDAsIDAsIDAsIDAsIDEzNDQzLCAxMzQ0OCwgMCwgMCwgMTM0NTMsIDEzNDU4LCAKKyAgICAxMzQ2MywgMCwgMCwgMCwgMTM0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDcxLCAxMzQ3NSwgMTM0NzksIDEzNDgzLCAKKyAgICAwLCAxMzQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0OTEsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAxMzUwNywgCisgICAgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNCwgMTM1MzksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQzLCAxMzU0NywgMTM1NTEsIDAsIDEzNTU1LCAxMzU1OCwgCisgICAgMTM1NjIsIDEzNTY1LCAxMzU2OSwgMTM1NzIsIDEzNTc2LCAxMzU4MCwgMTM1ODQsIDAsIDEzNTg5LCAxMzU5MiwgMTM1OTYsIAorICAgIDAsIDEzNjAxLCAxMzYwNCwgMTM2MDgsIDEzNjExLCAxMzYxNSwgMTM2MTksIDEzNjIzLCAxMzYyNywgMTM2MzEsIDEzNjM1LCAKKyAgICAxMzYzOSwgMTM2NDMsIDEzNjQ3LCAxMzY1MSwgMTM2NTUsIDEzNjU5LCAxMzY2MywgMTM2NjcsIDEzNjcxLCAxMzY3NSwgCisgICAgMTM2NzksIDEzNjgzLCAwLCAxMzY4NiwgMTM2ODksIDEzNjkzLCAxMzY5NywgMTM3MDEsIDEzNzA0LCAxMzcwNywgMCwgCisgICAgMTM3MTAsIDEzNzE0LCAwLCAxMzcxOCwgMTM3MjIsIDEzNzI2LCAxMzczMCwgMTM3MzMsIDAsIDAsIDEzNzM2LCAxMzc0MCwgCisgICAgMTM3NDQsIDEzNzQ5LCAxMzc1MywgMTM3NTgsIDEzNzYyLCAxMzc2NywgMTM3NzIsIDEzNzc4LCAwLCAxMzc4NCwgMTM3ODgsIAorICAgIDEzNzkzLCAwLCAxMzc5OSwgMTM4MDMsIDEzODA4LCAwLCAwLCAxMzgxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTM4MTUsIDEzODIwLCAxMzgyNSwgMTM4MzAsIDAsIDAsIDEzODM2LCAxMzg0MCwgMTM4NDMsIAorICAgIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2NywgMTM4NzEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODc1LCAxMzg3OSwgMTM4ODMsIDAsIDEzODg3LCAxMzg5MCwgCisgICAgMTM4OTQsIDEzODk3LCAxMzkwMSwgMTM5MDQsIDEzOTA4LCAxMzkxMiwgMCwgMCwgMTM5MTYsIDEzOTE5LCAwLCAwLCAKKyAgICAxMzkyMywgMTM5MjYsIDEzOTMwLCAxMzkzMywgMTM5MzcsIDEzOTQxLCAxMzk0NSwgMTM5NDksIDEzOTUzLCAxMzk1NywgCisgICAgMTM5NjEsIDEzOTY1LCAxMzk2OSwgMTM5NzMsIDEzOTc3LCAxMzk4MSwgMTM5ODUsIDEzOTg5LCAxMzk5MywgMTM5OTcsIAorICAgIDE0MDAxLCAxNDAwNSwgMCwgMTQwMDgsIDE0MDExLCAxNDAxNSwgMTQwMTksIDE0MDIzLCAxNDAyNiwgMTQwMjksIDAsIAorICAgIDE0MDMyLCAxNDAzNiwgMCwgMTQwNDAsIDE0MDQ0LCAxNDA0OCwgMTQwNTIsIDE0MDU1LCAwLCAwLCAxNDA1OCwgMTQwNjIsIAorICAgIDE0MDY2LCAxNDA3MSwgMTQwNzUsIDE0MDgwLCAxNDA4NCwgMTQwODksIDE0MDk0LCAwLCAwLCAxNDEwMCwgMTQxMDQsIDAsIAorICAgIDAsIDE0MTA5LCAxNDExMywgMTQxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTIyLCAxNDEyOCwgMCwgMCwgMCwgMCwgCisgICAgMTQxMzQsIDE0MTM4LCAwLCAxNDE0MiwgMTQxNDYsIDE0MTUxLCAxNDE1NiwgMTQxNjEsIDAsIDAsIDE0MTY3LCAxNDE3MSwgCisgICAgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgMTQyMDEsIAorICAgIDE0MjA1LCAxNDIxMSwgMTQyMTcsIDE0MjIzLCAxNDIyOSwgMTQyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE0MjQxLCAxNDI0NSwgMCwgMTQyNDksIDE0MjUyLCAxNDI1NiwgMTQyNTksIDE0MjYzLCAxNDI2NiwgMCwgMCwgMCwgCisgICAgMTQyNzAsIDE0MjczLCAxNDI3NywgMCwgMTQyODEsIDE0Mjg0LCAxNDI4OCwgMTQyOTIsIDAsIDAsIDAsIDE0Mjk1LCAKKyAgICAxNDI5OSwgMCwgMTQzMDMsIDAsIDE0MzA3LCAxNDMxMSwgMCwgMCwgMCwgMTQzMTUsIDE0MzE5LCAwLCAwLCAwLCAxNDMyMywgCisgICAgMTQzMjYsIDE0MzMwLCAwLCAwLCAwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MiwgMTQzNDYsIDE0MzUwLCAxNDM1NCwgCisgICAgMTQzNTgsIDE0MzYyLCAxNDM2NiwgMTQzNzAsIDE0MzczLCAwLCAwLCAwLCAwLCAxNDM3NiwgMTQzODEsIDE0Mzg1LCAKKyAgICAxNDM5MCwgMTQzOTQsIDAsIDAsIDAsIDE0Mzk5LCAxNDQwMywgMTQ0MDgsIDAsIDE0NDEzLCAxNDQxNywgMTQ0MjIsIAorICAgIDE0NDI3LCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE0NDQwLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAxNDQ2MiwgCisgICAgMTQ0NjUsIDE0NDY4LCAxNDQ3MSwgMTQ0NzUsIDE0NDgwLCAxNDQ4NSwgMTQ0ODksIDE0NDkzLCAxNDQ5NywgMTQ1MDEsIAorICAgIDE0NTA1LCAxNDUxMCwgMTQ1MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTE3LCAxNDUyMSwgMTQ1MjUsIDAsIDE0NTI5LCAKKyAgICAxNDUzMiwgMTQ1MzYsIDE0NTM5LCAxNDU0MywgMTQ1NDYsIDE0NTUwLCAxNDU1NCwgMCwgMTQ1NTgsIDE0NTYxLCAxNDU2NSwgCisgICAgMCwgMTQ1NjksIDE0NTcyLCAxNDU3NiwgMTQ1ODAsIDE0NTgzLCAxNDU4NywgMTQ1OTEsIDE0NTk1LCAxNDU5OSwgMTQ2MDMsIAorICAgIDE0NjA3LCAxNDYxMSwgMTQ2MTUsIDE0NjE5LCAxNDYyMywgMTQ2MjcsIDE0NjMxLCAxNDYzNSwgMTQ2MzksIDE0NjQzLCAKKyAgICAxNDY0NywgMTQ2NTEsIDE0NjU1LCAwLCAxNDY1OCwgMTQ2NjEsIDE0NjY1LCAxNDY2OSwgMTQ2NzMsIDE0Njc2LCAxNDY3OSwgCisgICAgMTQ2ODIsIDE0Njg2LCAxNDY5MCwgMCwgMTQ2OTQsIDE0Njk4LCAxNDcwMiwgMTQ3MDYsIDE0NzA5LCAwLCAwLCAwLCAKKyAgICAxNDcxMiwgMTQ3MTYsIDE0NzIxLCAxNDcyNSwgMTQ3MzAsIDE0NzM0LCAxNDczOSwgMTQ3NDQsIDAsIDE0NzUwLCAxNDc1NCwgCisgICAgMTQ3NTksIDAsIDE0NzY0LCAxNDc2OCwgMTQ3NzMsIDE0Nzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc4MiwgMTQ3ODYsIAorICAgIDAsIDE0NzkyLCAxNDc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4MDAsIDE0ODA1LCAxNDgxMCwgMTQ4MTUsIDAsIDAsIAorICAgIDE0ODIxLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDE0ODQ5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDg1MiwgMTQ4NjUsIDE0ODc3LCAxNDg4OSwgMTQ5MDEsIDE0OTEzLCAxNDkyNSwgCisgICAgMTQ5MzcsIDAsIDAsIDE0OTQxLCAxNDk0NSwgMCwgMTQ5NDksIDE0OTUyLCAxNDk1NiwgMTQ5NTksIDE0OTYzLCAxNDk2NiwgCisgICAgMTQ5NzAsIDE0OTc0LCAwLCAxNDk3OCwgMTQ5ODEsIDE0OTg1LCAwLCAxNDk4OSwgMTQ5OTIsIDE0OTk2LCAxNTAwMCwgCisgICAgMTUwMDMsIDE1MDA3LCAxNTAxMSwgMTUwMTUsIDE1MDE5LCAxNTAyMywgMTUwMjcsIDE1MDMxLCAxNTAzNSwgMTUwMzksIAorICAgIDE1MDQzLCAxNTA0NywgMTUwNTEsIDE1MDU1LCAxNTA1OSwgMTUwNjMsIDE1MDY3LCAxNTA3MSwgMTUwNzUsIDAsIDE1MDc4LCAKKyAgICAxNTA4MSwgMTUwODUsIDE1MDg5LCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMiwgMTUxMDYsIDE1MTEwLCAwLCAxNTExNCwgCisgICAgMTUxMTgsIDE1MTIyLCAxNTEyNiwgMTUxMjksIDAsIDAsIDE1MTMyLCAxNTEzNiwgMTUxNDAsIDE1MTQ1LCAxNTE0OSwgCisgICAgMTUxNTQsIDE1MTU4LCAxNTE2MywgMTUxNjgsIDAsIDE1MTc0LCAxNTE3OCwgMTUxODMsIDAsIDE1MTg4LCAxNTE5MiwgCisgICAgMTUxOTcsIDE1MjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIwNiwgMTUyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE1MjE2LCAwLCAxNTIyMCwgMTUyMjUsIDE1MjMwLCAxNTIzNSwgMCwgMCwgMTUyNDEsIDE1MjQ1LCAxNTI0OCwgMTUyNTEsIAorICAgIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMTUyNjksIDAsIDE1MjcyLCAxNTI3NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyODAsIDE1Mjg0LCAwLCAxNTI4OCwgMTUyOTEsIDE1Mjk1LCAKKyAgICAxNTI5OCwgMTUzMDIsIDE1MzA1LCAxNTMwOSwgMTUzMTMsIDAsIDE1MzE3LCAxNTMyMCwgMTUzMjQsIDAsIDE1MzI4LCAKKyAgICAxNTMzMSwgMTUzMzUsIDE1MzM5LCAxNTM0MiwgMTUzNDYsIDE1MzUwLCAxNTM1NCwgMTUzNTgsIDE1MzYyLCAxNTM2NiwgCisgICAgMTUzNzAsIDE1Mzc0LCAxNTM3OCwgMTUzODIsIDE1Mzg2LCAxNTM5MCwgMTUzOTQsIDE1Mzk4LCAxNTQwMiwgMTU0MDYsIAorICAgIDE1NDEwLCAxNTQxNCwgMTU0MTcsIDE1NDIxLCAxNTQyNCwgMTU0MjgsIDE1NDMyLCAxNTQzNiwgMTU0MzksIDE1NDQyLCAKKyAgICAxNTQ0NSwgMTU0NDksIDE1NDUzLCAxNTQ1NywgMTU0NjEsIDE1NDY1LCAxNTQ2OSwgMTU0NzMsIDE1NDc2LCAxNTQ3OSwgMCwgCisgICAgMCwgMTU0ODMsIDE1NDg3LCAxNTQ5MiwgMTU0OTYsIDE1NTAxLCAxNTUwNSwgMTU1MTAsIDE1NTE1LCAwLCAxNTUyMSwgCisgICAgMTU1MjUsIDE1NTMwLCAwLCAxNTUzNSwgMTU1MzksIDE1NTQ0LCAxNTU0OSwgMTU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE1NTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2NCwgMTU1NjksIDE1NTc0LCAxNTU3OSwgMCwgMCwgCisgICAgMTU1ODUsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgMTU2MTMsIAorICAgIDE1NjE2LCAxNTYyMCwgMTU2MjUsIDE1NjMwLCAxNTYzNiwgMTU2NDIsIDAsIDAsIDAsIDE1NjQ4LCAxNTY1MiwgMTU2NTgsIAorICAgIDE1NjY0LCAxNTY3MCwgMTU2NzUsIDE1NjgxLCAwLCAwLCAxNTY4NywgMTU2OTEsIDAsIDE1Njk1LCAxNTY5OSwgMTU3MDMsIAorICAgIDE1NzA3LCAxNTcxMSwgMTU3MTUsIDE1NzE5LCAxNTcyMywgMTU3MjcsIDE1NzMxLCAxNTczNSwgMTU3MzksIDE1NzQzLCAKKyAgICAxNTc0NywgMTU3NTEsIDE1NzU1LCAxNTc1OSwgMTU3NjMsIDAsIDAsIDAsIDE1NzY3LCAxNTc3MywgMTU3NzksIDE1Nzg1LCAKKyAgICAxNTc5MSwgMTU3OTcsIDE1ODAzLCAxNTgwOSwgMTU4MTUsIDE1ODIxLCAxNTgyNywgMTU4MzMsIDE1ODQxLCAxNTg0NywgCisgICAgMTU4NTMsIDE1ODU5LCAxNTg2NSwgMTU4NzEsIDE1ODc3LCAxNTg4MywgMTU4ODksIDE1ODk1LCAxNTkwMSwgMTU5MDcsIDAsIAorICAgIDE1OTEzLCAxNTkxOSwgMTU5MjUsIDE1OTMxLCAxNTkzNywgMTU5NDMsIDE1OTQ3LCAxNTk1MywgMTU5NTcsIDAsIDE1OTYxLCAKKyAgICAwLCAwLCAxNTk2NywgMTU5NzEsIDE1OTc3LCAxNTk4MywgMTU5ODksIDE1OTkzLCAxNTk5OSwgMCwgMCwgMCwgMTYwMDMsIDAsIAorICAgIDAsIDAsIDAsIDE2MDA3LCAxNjAxMiwgMTYwMTksIDE2MDI2LCAxNjAzMywgMTYwNDAsIDAsIDE2MDQ3LCAwLCAxNjA1NCwgCisgICAgMTYwNTksIDE2MDY0LCAxNjA3MSwgMTYwNzgsIDE2MDg3LCAxNjA5OCwgMTYxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTEyLCAxNjExOSwgMTYxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE2MTMxLCAxNjEzNywgMTYxNDMsIDE2MTQ5LCAxNjE1NSwgMTYxNjEsIDE2MTY3LCAxNjE3MywgCisgICAgMTYxNzksIDE2MTg1LCAxNjE5MSwgMTYxOTcsIDE2MjAzLCAxNjIwOSwgMTYyMTUsIDE2MjIxLCAxNjIyNywgMTYyMzMsIAorICAgIDE2MjM5LCAxNjI0NSwgMTYyNTEsIDE2MjU3LCAxNjI2MywgMTYyNjksIDE2Mjc1LCAxNjI4MSwgMTYyODcsIDE2MjkzLCAKKyAgICAxNjI5OSwgMTYzMDUsIDE2MzExLCAxNjMxNywgMTYzMjMsIDE2MzI4LCAxNjMzNCwgMTYzNDAsIDE2MzQ0LCAxNjM1MCwgCisgICAgMTYzNTQsIDE2MzYwLCAxNjM2NiwgMTYzNzIsIDE2Mzc4LCAxNjM4NCwgMTYzOTAsIDE2Mzk1LCAxNjQwMSwgMTY0MDUsIAorICAgIDE2NDEwLCAxNjQxNiwgMTY0MjIsIDE2NDI4LCAxNjQzMywgMTY0MzksIDE2NDQ1LCAxNjQ1MSwgMTY0NTYsIDE2NDYyLCAwLCAKKyAgICAwLCAwLCAwLCAxNjQ2NiwgMTY0NzIsIDE2NDc3LCAxNjQ4MywgMTY0ODgsIDE2NDk2LCAxNjUwNCwgMTY1MDgsIDE2NTEyLCAKKyAgICAxNjUxNiwgMTY1MjIsIDE2NTI4LCAxNjUzNCwgMTY1NDAsIDE2NTQ0LCAxNjU0OCwgMTY1NTIsIDE2NTU2LCAxNjU2MCwgCisgICAgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4NywgMTY1OTEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTkyLCAxNjU5NywgMCwgMTY2MDQsIDAsIDAsIDE2NjExLCAKLSAgICAxNjYxNiwgMCwgMTY2MjEsIDAsIDAsIDE2NjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYzMywgMTY2MzgsIDE2NjQyLCAKLSAgICAxNjY0OSwgMCwgMTY2NTYsIDE2NjYxLCAxNjY2NiwgMTY2NzEsIDE2Njc4LCAxNjY4NSwgMTY2OTIsIDAsIDE2Njk5LCAKLSAgICAxNjcwNCwgMTY3MDksIDAsIDE2NzE2LCAwLCAxNjcyMywgMCwgMCwgMTY3MjgsIDE2NzM1LCAwLCAxNjc0MiwgMTY3NDYsIAotICAgIDE2NzUzLCAxNjc1NywgMTY3NjIsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg3LCAxNjc5MywgMTY3OTksIDE2ODA1LCAKLSAgICAxNjgxMCwgMCwgMTY4MTYsIDE2ODI0LCAxNjgzMSwgMCwgMCwgMTY4MzgsIDE2ODQzLCAxNjg0OSwgMTY4NTQsIDE2ODYwLCAKLSAgICAwLCAxNjg2NiwgMCwgMTY4NzIsIDE2ODc5LCAxNjg4NiwgMTY4OTMsIDE2OTAwLCAxNjkwNSwgMCwgMCwgMTY5MDksIAotICAgIDE2OTE0LCAxNjkxOCwgMTY5MjIsIDE2OTI2LCAxNjkzMCwgMTY5MzQsIDE2OTM4LCAxNjk0MiwgMTY5NDYsIDAsIDAsIAotICAgIDE2OTUwLCAxNjk1NiwgMTY5NjIsIDE2OTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjk3NiwgMTY5ODAsIDE2OTkxLCAKLSAgICAxNzAwNiwgMTcwMjEsIDE3MDMxLCAxNzA0MiwgMTcwNTUsIDE3MDY2LCAxNzA3MiwgMTcwODAsIDE3MDkwLCAxNzA5NiwgCi0gICAgMTcxMDQsIDE3MTA4LCAxNzExNCwgMTcxMjAsIDE3MTI4LCAxNzEzOCwgMTcxNDYsIDE3MTU5LCAxNzE2NSwgMTcxNzMsIAotICAgIDE3MTgxLCAxNzE5MywgMTcyMDAsIDE3MjA4LCAxNzIxNiwgMTcyMjQsIDE3MjMyLCAxNzI0MCwgMTcyNDgsIDE3MjU4LCAKLSAgICAxNzI2MiwgMTcyNjUsIDE3MjY4LCAxNzI3MSwgMTcyNzQsIDE3Mjc3LCAxNzI4MCwgMTcyODMsIDE3Mjg2LCAxNzI4OSwgCi0gICAgMTcyOTMsIDE3Mjk3LCAxNzMwMSwgMTczMDUsIDE3MzA5LCAxNzMxMywgMTczMTcsIDE3MzIxLCAxNzMyNSwgMTczMzAsIAotICAgIDE3MzM2LCAxNzM0NiwgMTczNjAsIDE3MzcwLCAxNzM3NiwgMTczODIsIDE3MzkwLCAxNzM5OCwgMTc0MDYsIDE3NDE0LCAKLSAgICAxNzQyMCwgMTc0MjYsIDE3NDI5LCAxNzQzMywgMTc0MzcsIDE3NDQxLCAxNzQ0NSwgMTc0NDksIDE3NDUzLCAwLCAxNzQ1NywgCi0gICAgMTc0NjEsIDE3NDY1LCAxNzQ2OSwgMTc0NzMsIDE3NDc3LCAxNzQ4MSwgMTc0ODUsIDE3NDg5LCAxNzQ5MywgMTc0OTcsIAotICAgIDE3NTAwLCAxNzUwMywgMTc1MDcsIDE3NTExLCAxNzUxNSwgMTc1MTgsIDE3NTIyLCAxNzUyNiwgMTc1MzAsIDE3NTM0LCAKLSAgICAxNzUzOCwgMTc1NDIsIDE3NTQ2LCAxNzU1MCwgMTc1NTMsIDE3NTU2LCAxNzU2MCwgMTc1NjQsIDE3NTY4LCAxNzU3MSwgCi0gICAgMTc1NzQsIDE3NTc3LCAxNzU4MSwgMTc1ODYsIDE3NTkwLCAwLCAwLCAwLCAwLCAxNzU5NCwgMTc1OTksIDE3NjAzLCAKLSAgICAxNzYwOCwgMTc2MTIsIDE3NjE3LCAxNzYyMiwgMTc2MjgsIDE3NjMzLCAxNzYzOSwgMTc2NDMsIDE3NjQ4LCAxNzY1MiwgCi0gICAgMTc2NTcsIDE3NjY3LCAxNzY3MywgMTc2NzksIDE3Njg2LCAxNzY5NiwgMTc3MDIsIDE3NzA2LCAxNzcxMCwgMTc3MTYsIAotICAgIDE3NzIyLCAxNzczMCwgMTc3MzYsIDE3NzQ0LCAxNzc1MiwgMTc3NjAsIDE3NzcwLCAxNzc3OCwgMTc3ODgsIDE3NzkzLCAKLSAgICAxNzc5OSwgMTc4MDUsIDE3ODExLCAxNzgxNywgMTc4MjMsIDE3ODI5LCAwLCAxNzgzNSwgMTc4NDEsIDE3ODQ3LCAxNzg1MywgCi0gICAgMTc4NTksIDE3ODY1LCAxNzg3MSwgMTc4NzcsIDE3ODgzLCAxNzg4OSwgMTc4OTUsIDE3OTAwLCAxNzkwNSwgMTc5MTEsIAotICAgIDE3OTE3LCAxNzkyMywgMTc5MjgsIDE3OTM0LCAxNzk0MCwgMTc5NDYsIDE3OTUyLCAxNzk1OCwgMTc5NjQsIDE3OTcwLCAKLSAgICAxNzk3NiwgMTc5ODEsIDE3OTg2LCAxNzk5MiwgMTc5OTgsIDE4MDA0LCAxODAwOSwgMTgwMTQsIDE4MDE5LCAxODAyNSwgCi0gICAgMTgwMzMsIDE4MDQwLCAwLCAxODA0NywgMTgwNTQsIDE4MDY3LCAxODA3NCwgMTgwODEsIDE4MDg5LCAxODA5NywgMTgxMDMsIAotICAgIDE4MTA5LCAxODExNSwgMTgxMjUsIDE4MTMwLCAxODEzNiwgMTgxNDYsIDE4MTU2LCAwLCAxODE2NiwgMTgxNzYsIDE4MTg0LCAKLSAgICAxODE5NiwgMTgyMDgsIDE4MjE0LCAxODIyOCwgMTgyNDMsIDE4MjQ4LCAxODI1MywgMTgyNjEsIDE4MjY5LCAxODI3NywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OTUsIDE2NjAwLCAwLCAxNjYwNywgMCwgMCwgMTY2MTQsIAorICAgIDE2NjE5LCAwLCAxNjYyNCwgMCwgMCwgMTY2MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NjM2LCAxNjY0MSwgMTY2NDUsIAorICAgIDE2NjUyLCAwLCAxNjY1OSwgMTY2NjQsIDE2NjY5LCAxNjY3NCwgMTY2ODEsIDE2Njg4LCAxNjY5NSwgMCwgMTY3MDIsIAorICAgIDE2NzA3LCAxNjcxMiwgMCwgMTY3MTksIDAsIDE2NzI2LCAwLCAwLCAxNjczMSwgMTY3MzgsIDAsIDE2NzQ1LCAxNjc0OSwgCisgICAgMTY3NTYsIDE2NzYwLCAxNjc2NSwgMTY3NzMsIDE2Nzc5LCAxNjc4NSwgMTY3OTAsIDE2Nzk2LCAxNjgwMiwgMTY4MDgsIAorICAgIDE2ODEzLCAwLCAxNjgxOSwgMTY4MjcsIDE2ODM0LCAwLCAwLCAxNjg0MSwgMTY4NDYsIDE2ODUyLCAxNjg1NywgMTY4NjMsIAorICAgIDAsIDE2ODY5LCAwLCAxNjg3NSwgMTY4ODIsIDE2ODg5LCAxNjg5NiwgMTY5MDMsIDE2OTA4LCAwLCAwLCAxNjkxMiwgCisgICAgMTY5MTcsIDE2OTIxLCAxNjkyNSwgMTY5MjksIDE2OTMzLCAxNjkzNywgMTY5NDEsIDE2OTQ1LCAxNjk0OSwgMCwgMCwgCisgICAgMTY5NTMsIDE2OTU5LCAxNjk2NSwgMTY5NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTc5LCAxNjk4MywgMTY5OTQsIAorICAgIDE3MDA5LCAxNzAyNCwgMTcwMzQsIDE3MDQ1LCAxNzA1OCwgMTcwNjksIDE3MDc1LCAxNzA4MywgMTcwOTMsIDE3MDk5LCAKKyAgICAxNzEwNywgMTcxMTEsIDE3MTE3LCAxNzEyMywgMTcxMzEsIDE3MTQxLCAxNzE0OSwgMTcxNjIsIDE3MTY4LCAxNzE3NiwgCisgICAgMTcxODQsIDE3MTk2LCAxNzIwMywgMTcyMTEsIDE3MjE5LCAxNzIyNywgMTcyMzUsIDE3MjQzLCAxNzI1MSwgMTcyNjEsIAorICAgIDE3MjY1LCAxNzI2OCwgMTcyNzEsIDE3Mjc0LCAxNzI3NywgMTcyODAsIDE3MjgzLCAxNzI4NiwgMTcyODksIDE3MjkyLCAKKyAgICAxNzI5NiwgMTczMDAsIDE3MzA0LCAxNzMwOCwgMTczMTIsIDE3MzE2LCAxNzMyMCwgMTczMjQsIDE3MzI4LCAxNzMzMywgCisgICAgMTczMzksIDE3MzQ5LCAxNzM2MywgMTczNzMsIDE3Mzc5LCAxNzM4NSwgMTczOTMsIDE3NDAxLCAxNzQwOSwgMTc0MTcsIAorICAgIDE3NDIzLCAxNzQyOSwgMTc0MzIsIDE3NDM2LCAxNzQ0MCwgMTc0NDQsIDE3NDQ4LCAxNzQ1MiwgMTc0NTYsIDAsIDE3NDYwLCAKKyAgICAxNzQ2NCwgMTc0NjgsIDE3NDcyLCAxNzQ3NiwgMTc0ODAsIDE3NDg0LCAxNzQ4OCwgMTc0OTIsIDE3NDk2LCAxNzUwMCwgCisgICAgMTc1MDMsIDE3NTA2LCAxNzUxMCwgMTc1MTQsIDE3NTE4LCAxNzUyMSwgMTc1MjUsIDE3NTI5LCAxNzUzMywgMTc1MzcsIAorICAgIDE3NTQxLCAxNzU0NSwgMTc1NDksIDE3NTUzLCAxNzU1NiwgMTc1NTksIDE3NTYzLCAxNzU2NywgMTc1NzEsIDE3NTc0LCAKKyAgICAxNzU3NywgMTc1ODAsIDE3NTg0LCAxNzU4OSwgMTc1OTMsIDAsIDAsIDAsIDAsIDE3NTk3LCAxNzYwMiwgMTc2MDYsIAorICAgIDE3NjExLCAxNzYxNSwgMTc2MjAsIDE3NjI1LCAxNzYzMSwgMTc2MzYsIDE3NjQyLCAxNzY0NiwgMTc2NTEsIDE3NjU1LCAKKyAgICAxNzY2MCwgMTc2NzAsIDE3Njc2LCAxNzY4MiwgMTc2ODksIDE3Njk5LCAxNzcwNSwgMTc3MDksIDE3NzEzLCAxNzcxOSwgCisgICAgMTc3MjUsIDE3NzMzLCAxNzczOSwgMTc3NDcsIDE3NzU1LCAxNzc2MywgMTc3NzMsIDE3NzgxLCAxNzc5MSwgMTc3OTYsIAorICAgIDE3ODAyLCAxNzgwOCwgMTc4MTQsIDE3ODIwLCAxNzgyNiwgMTc4MzIsIDAsIDE3ODM4LCAxNzg0NCwgMTc4NTAsIDE3ODU2LCAKKyAgICAxNzg2MiwgMTc4NjgsIDE3ODc0LCAxNzg4MCwgMTc4ODYsIDE3ODkyLCAxNzg5OCwgMTc5MDMsIDE3OTA4LCAxNzkxNCwgCisgICAgMTc5MjAsIDE3OTI2LCAxNzkzMSwgMTc5MzcsIDE3OTQzLCAxNzk0OSwgMTc5NTUsIDE3OTYxLCAxNzk2NywgMTc5NzMsIAorICAgIDE3OTc5LCAxNzk4NCwgMTc5ODksIDE3OTk1LCAxODAwMSwgMTgwMDcsIDE4MDEyLCAxODAxNywgMTgwMjIsIDE4MDI4LCAKKyAgICAxODAzNiwgMTgwNDMsIDAsIDE4MDUwLCAxODA1NywgMTgwNzAsIDE4MDc3LCAxODA4NCwgMTgwOTIsIDE4MTAwLCAxODEwNiwgCisgICAgMTgxMTIsIDE4MTE4LCAxODEyOCwgMTgxMzMsIDE4MTM5LCAxODE0OSwgMTgxNTksIDAsIDE4MTY5LCAxODE3OSwgMTgxODcsIAorICAgIDE4MTk5LCAxODIxMSwgMTgyMTcsIDE4MjMxLCAxODI0NiwgMTgyNTEsIDE4MjU2LCAxODI2NCwgMTgyNzIsIDE4MjgwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4NSwgMTgyODgsIDE4MjkyLCAxODI5NiwgMTgzMDAsIAotICAgIDE4MzA0LCAxODMwOCwgMTgzMTIsIDE4MzE2LCAxODMyMCwgMTgzMjQsIDE4MzI4LCAxODMzMiwgMTgzMzYsIDE4MzQwLCAKLSAgICAxODM0NCwgMTgzNDgsIDE4MzUyLCAxODM1NiwgMTgzNjAsIDE4MzY0LCAxODM2NywgMTgzNzAsIDE4Mzc0LCAxODM3OCwgCi0gICAgMTgzODIsIDE4Mzg1LCAxODM4OCwgMTgzOTEsIDE4Mzk1LCAxODM5OSwgMTg0MDIsIDE4NDA1LCAxODQwOSwgMTg0MTIsIAotICAgIDE4NDE3LCAxODQyMCwgMTg0MjQsIDE4NDI3LCAxODQzMSwgMTg0MzQsIDE4NDM5LCAxODQ0MiwgMTg0NDYsIDE4NDUzLCAKLSAgICAxODQ1OCwgMTg0NjIsIDE4NDY3LCAxODQ3MSwgMTg0NzYsIDE4NDgwLCAxODQ4NSwgMTg0OTIsIDE4NDk4LCAxODUwMywgCi0gICAgMTg1MDcsIDE4NTExLCAxODUxNSwgMTg1MTksIDE4NTIzLCAxODUyOCwgMTg1MzMsIDE4NTM5LCAxODU0NCwgMTg1NDksIAotICAgIDE4NTUzLCAxODU1NiwgMTg1NTksIDE4NTYyLCAxODU2NSwgMTg1NjgsIDE4NTcxLCAxODU3NCwgMTg1NzcsIDE4NTgwLCAKLSAgICAxODU4NiwgMTg1OTAsIDE4NTk0LCAxODU5OCwgMTg2MDIsIDE4NjA2LCAxODYxMCwgMTg2MTQsIDE4NjE4LCAxODYyMywgCi0gICAgMTg2MjcsIDE4NjMyLCAxODYzNywgMTg2NDMsIDE4NjQ4LCAxODY1NCwgMTg2NjAsIDE4NjY2LCAxODY3MiwgMTg2NzgsIAotICAgIDE4Njg1LCAxODY5MiwgMTg3MDAsIDE4NzA4LCAxODcxNywgMTg3MjYsIDE4NzM3LCAxODc0NywgMTg3NTcsIDE4NzY4LCAKLSAgICAxODc3OSwgMTg3ODksIDE4Nzk5LCAxODgwOSwgMTg4MTksIDE4ODI5LCAxODgzOSwgMTg4NDksIDE4ODU5LCAxODg2NywgCi0gICAgMTg4NzQsIDE4ODgwLCAxODg4NywgMTg4OTIsIDE4ODk4LCAxODkwNCwgMTg5MTAsIDE4OTE2LCAxODkyMiwgMTg5MjgsIAotICAgIDE4OTMzLCAxODkzOSwgMTg5NDUsIDE4OTUxLCAxODk1NywgMTg5NjIsIDE4OTcwLCAxODk3NywgMTg5ODMsIDE4OTkwLCAKLSAgICAxODk5OCwgMTkwMDQsIDE5MDEwLCAxOTAxNiwgMTkwMjIsIDE5MDMwLCAxOTAzOCwgMTkwNDgsIDE5MDU2LCAxOTA2NCwgCi0gICAgMTkwNzAsIDE5MDc1LCAxOTA4MCwgMTkwODUsIDE5MDkwLCAxOTA5NSwgMTkxMDAsIDE5MTA1LCAxOTExMCwgMTkxMTUsIAotICAgIDE5MTIxLCAxOTEyNywgMTkxMzMsIDE5MTQwLCAxOTE0NSwgMTkxNTEsIDE5MTU2LCAxOTE2MSwgMTkxNjYsIDE5MTcxLCAKLSAgICAxOTE3NiwgMTkxODEsIDE5MTg2LCAxOTE5MSwgMTkxOTYsIDE5MjAxLCAxOTIwNiwgMTkyMTEsIDE5MjE2LCAxOTIyMSwgCi0gICAgMTkyMjYsIDE5MjMxLCAxOTIzNiwgMTkyNDEsIDE5MjQ2LCAxOTI1MSwgMTkyNTYsIDE5MjYxLCAxOTI2NiwgMTkyNzEsIAotICAgIDE5Mjc2LCAxOTI4MSwgMTkyODYsIDE5MjkxLCAxOTI5NiwgMTkzMDEsIDE5MzA2LCAxOTMxMSwgMTkzMTYsIDE5MzIxLCAKLSAgICAxOTMyNiwgMTkzMzEsIDE5MzM2LCAwLCAxOTM0MSwgMCwgMCwgMCwgMCwgMCwgMTkzNDYsIDAsIDAsIDE5MzUxLCAxOTM1NSwgCi0gICAgMTkzNTksIDE5MzYzLCAxOTM2NywgMTkzNzEsIDE5Mzc1LCAxOTM3OSwgMTkzODMsIDE5Mzg3LCAxOTM5MSwgMTkzOTUsIAotICAgIDE5Mzk5LCAxOTQwMywgMTk0MDcsIDE5NDExLCAxOTQxNSwgMTk0MTksIDE5NDIzLCAxOTQyNywgMTk0MzEsIDE5NDM1LCAKLSAgICAxOTQzOSwgMTk0NDMsIDE5NDQ3LCAxOTQ1MSwgMTk0NTUsIDE5NDU5LCAxOTQ2MywgMTk0NjcsIDE5NDcxLCAxOTQ3NSwgCi0gICAgMTk0NzksIDE5NDgzLCAxOTQ4NywgMTk0OTEsIDE5NDk1LCAxOTQ5OSwgMTk1MDMsIDE5NTA3LCAxOTUxMSwgMTk1MTUsIAotICAgIDE5NTIxLCAxOTUyNSwgMTk1MzAsIDE5NTM1LCAxOTUzOSwgMTk1NDQsIDE5NTQ5LCAxOTU1MywgMTk1NTcsIDE5NTYxLCAKLSAgICAxOTU2NSwgMTk1NjksIDE5NTczLCAxOTU3NywgMTk1ODEsIDE5NTg1LCAxOTU4OSwgMTk1OTMsIDE5NTk3LCAxOTYwMSwgCi0gICAgMTk2MDUsIDE5NjA5LCAxOTYxMywgMTk2MTcsIDE5NjIxLCAxOTYyNSwgMTk2MjksIDE5NjMzLCAxOTYzNywgMTk2NDEsIAotICAgIDE5NjQ1LCAxOTY0OSwgMTk2NTMsIDE5NjU3LCAxOTY2MSwgMTk2NjUsIDE5NjY5LCAxOTY3MywgMTk2NzcsIDE5NjgxLCAKLSAgICAxOTY4NSwgMTk2ODksIDE5NjkzLCAxOTY5NywgMTk3MDEsIDE5NzA1LCAxOTcwOSwgMTk3MTMsIDE5NzE3LCAxOTcyMSwgCi0gICAgMTk3MjUsIDE5NzI5LCAxOTczMywgMTk3MzcsIDE5NzQxLCAxOTc0NSwgMTk3NDksIDE5NzUzLCAxOTc1NywgMTk3NjEsIAotICAgIDE5NzY1LCAxOTc2OSwgMTk3NzMsIDE5Nzc3LCAxOTc4MSwgMTk3ODUsIDE5Nzg5LCAxOTc5MywgMTk3OTcsIDE5ODAxLCAKLSAgICAxOTgwNSwgMTk4MDksIDE5ODEzLCAxOTgxNywgMTk4MjEsIDE5ODI1LCAxOTgyOSwgMTk4MzMsIDE5ODM3LCAxOTg0MSwgCi0gICAgMTk4NDUsIDE5ODQ5LCAxOTg1MywgMTk4NTcsIDE5ODYxLCAxOTg2NSwgMTk4NjksIDE5ODczLCAxOTg3NywgMTk4ODEsIAotICAgIDE5ODg1LCAxOTg4OSwgMTk4OTMsIDE5ODk3LCAxOTkwMSwgMTk5MDUsIDE5OTA5LCAxOTkxMywgMTk5MTcsIDE5OTIxLCAKLSAgICAxOTkyNSwgMTk5MjksIDE5OTMzLCAxOTkzNywgMTk5NDAsIDE5OTQ0LCAxOTk0NywgMTk5NTEsIDE5OTU1LCAxOTk1OCwgCi0gICAgMTk5NjIsIDE5OTY2LCAxOTk2OSwgMTk5NzMsIDE5OTc3LCAxOTk4MSwgMTk5ODUsIDE5OTg4LCAxOTk5MiwgMTk5OTYsIAotICAgIDIwMDAwLCAyMDAwNCwgMjAwMDgsIDIwMDEyLCAyMDAxNSwgMjAwMTksIDIwMDIzLCAyMDAyNywgMjAwMzEsIDIwMDM1LCAKLSAgICAyMDAzOSwgMjAwNDMsIDIwMDQ3LCAyMDA1MSwgMjAwNTUsIDIwMDU5LCAyMDA2MywgMjAwNjcsIDIwMDcxLCAyMDA3NSwgCi0gICAgMjAwNzksIDIwMDgzLCAyMDA4NywgMjAwOTEsIDIwMDk1LCAyMDA5OSwgMjAxMDMsIDIwMTA3LCAyMDExMSwgMjAxMTUsIAotICAgIDIwMTE5LCAyMDEyMywgMjAxMjcsIDIwMTMxLCAyMDEzNSwgMjAxMzksIDIwMTQzLCAyMDE0NywgMjAxNTEsIDIwMTU1LCAKLSAgICAyMDE1OSwgMjAxNjMsIDIwMTY3LCAyMDE3MSwgMjAxNzUsIDIwMTc5LCAyMDE4MywgMjAxODcsIDIwMTkxLCAyMDE5NSwgCi0gICAgMjAxOTksIDIwMjAzLCAyMDIwNywgMjAyMTEsIDIwMjE1LCAyMDIxOSwgMjAyMjMsIDIwMjI3LCAyMDIzMSwgMjAyMzUsIAotICAgIDIwMjM5LCAyMDI0MywgMjAyNDcsIDIwMjUxLCAyMDI1NSwgMjAyNTksIDIwMjYzLCAyMDI2NywgMjAyNzEsIDIwMjc1LCAKLSAgICAyMDI3OSwgMjAyODMsIDIwMjg3LCAyMDI5MSwgMjAyOTUsIDIwMjk5LCAyMDMwMywgMjAzMDcsIDIwMzExLCAyMDMxNSwgCi0gICAgMjAzMTksIDIwMzIzLCAyMDMyNywgMjAzMzEsIDIwMzM1LCAyMDMzOSwgMjAzNDMsIDIwMzQ3LCAyMDM1MSwgMjAzNTUsIAotICAgIDIwMzU5LCAyMDM2MywgMjAzNjcsIDIwMzcxLCAyMDM3NSwgMjAzNzksIDIwMzgzLCAyMDM4NywgMjAzOTEsIDIwMzk1LCAKLSAgICAyMDM5OSwgMjA0MDMsIDIwNDA3LCAyMDQxMSwgMjA0MTUsIDIwNDE5LCAyMDQyMywgMjA0MjcsIDIwNDMxLCAyMDQzNSwgCi0gICAgMjA0MzksIDIwNDQzLCAyMDQ0NywgMjA0NTEsIDIwNDU1LCAyMDQ1OSwgMjA0NjMsIDIwNDY3LCAyMDQ3MSwgMjA0NzUsIAotICAgIDIwNDc5LCAyMDQ4MywgMjA0ODcsIDIwNDkxLCAyMDQ5NSwgMjA0OTksIDIwNTAzLCAyMDUwNywgMjA1MTEsIDIwNTE1LCAKLSAgICAyMDUxOSwgMjA1MjMsIDIwNTI3LCAyMDUzMSwgMjA1MzUsIDIwNTM5LCAyMDU0MywgMjA1NDcsIDIwNTUxLCAyMDU1NSwgCi0gICAgMjA1NTksIDIwNTYzLCAyMDU2NywgMjA1NzAsIDIwNTc0LCAyMDU3OCwgMjA1ODIsIDIwNTg2LCAyMDU5MCwgMjA1OTQsIAotICAgIDIwNTk4LCAyMDYwMiwgMjA2MDYsIDIwNjEwLCAyMDYxNCwgMjA2MTgsIDIwNjIyLCAyMDYyNiwgMjA2MzAsIDIwNjM0LCAKLSAgICAyMDYzOCwgMjA2NDIsIDIwNjQ2LCAyMDY1MCwgMjA2NTQsIDIwNjU4LCAyMDY2MiwgMjA2NjUsIDIwNjY5LCAyMDY3MywgCi0gICAgMjA2NzcsIDIwNjgxLCAyMDY4NSwgMjA2ODksIDIwNjkzLCAyMDY5NywgMjA3MDEsIDIwNzA1LCAyMDcwOSwgMjA3MTMsIAotICAgIDIwNzE3LCAyMDcyMSwgMjA3MjUsIDIwNzI4LCAyMDczMiwgMjA3MzYsIDIwNzQwLCAyMDc0NCwgMjA3NDgsIDIwNzUyLCAKLSAgICAyMDc1NiwgMjA3NTksIDIwNzYzLCAyMDc2NywgMjA3NzEsIDIwNzc1LCAyMDc3OSwgMjA3ODMsIDIwNzg3LCAyMDc5MSwgCi0gICAgMjA3OTUsIDIwNzk5LCAyMDgwMywgMjA4MDcsIDIwODExLCAyMDgxNSwgMjA4MTksIDIwODIzLCAyMDgyNywgMjA4MzEsIAotICAgIDIwODM1LCAyMDgzOSwgMjA4NDMsIDIwODQ3LCAyMDg1MSwgMCwgMjA4NTUsIDIwODU5LCAyMDg2MywgMjA4NjcsIDAsIDAsIAotICAgIDIwODcxLCAyMDg3NSwgMjA4NzksIDIwODgzLCAyMDg4NywgMjA4OTEsIDIwODk1LCAwLCAyMDg5OSwgMCwgMjA5MDMsIAotICAgIDIwOTA3LCAyMDkxMSwgMjA5MTUsIDAsIDAsIDIwOTE5LCAyMDkyMywgMjA5MjcsIDIwOTMxLCAyMDkzNSwgMjA5MzksIAotICAgIDIwOTQzLCAyMDk0NywgMjA5NTEsIDIwOTU1LCAyMDk1OSwgMjA5NjMsIDIwOTY3LCAyMDk3MSwgMjA5NzUsIDIwOTc5LCAKLSAgICAyMDk4MywgMjA5ODcsIDIwOTkxLCAyMDk5NSwgMjA5OTksIDIxMDAzLCAyMTAwNywgMjEwMTAsIDIxMDE0LCAyMTAxOCwgCi0gICAgMjEwMjIsIDIxMDI2LCAyMTAzMCwgMjEwMzQsIDIxMDM4LCAyMTA0MiwgMjEwNDYsIDIxMDUwLCAyMTA1NCwgMjEwNTgsIAotICAgIDIxMDYyLCAyMTA2NiwgMjEwNzAsIDIxMDc0LCAyMTA3OCwgMCwgMjEwODIsIDIxMDg2LCAyMTA5MCwgMjEwOTQsIDAsIDAsIAotICAgIDIxMDk4LCAyMTEwMSwgMjExMDUsIDIxMTA5LCAyMTExMywgMjExMTcsIDIxMTIxLCAyMTEyNSwgMjExMjksIDIxMTMzLCAKLSAgICAyMTEzNywgMjExNDEsIDIxMTQ1LCAyMTE0OSwgMjExNTMsIDIxMTU3LCAyMTE2MSwgMjExNjYsIDIxMTcxLCAyMTE3NiwgCi0gICAgMjExODIsIDIxMTg4LCAyMTE5MywgMjExOTgsIDIxMjA0LCAyMTIwNywgMjEyMTEsIDIxMjE1LCAyMTIxOSwgMjEyMjMsIAotICAgIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDAsIDIxMjM5LCAyMTI0MywgMjEyNDcsIDIxMjUxLCAwLCAwLCAyMTI1NSwgMjEyNTksIAotICAgIDIxMjYzLCAyMTI2NywgMjEyNzEsIDIxMjc1LCAyMTI3OSwgMCwgMjEyODMsIDAsIDIxMjg3LCAyMTI5MSwgMjEyOTUsIAotICAgIDIxMjk5LCAwLCAwLCAyMTMwMywgMjEzMDcsIDIxMzExLCAyMTMxNSwgMjEzMTksIDIxMzIzLCAyMTMyNywgMjEzMzEsIAotICAgIDIxMzM1LCAyMTM0MCwgMjEzNDUsIDIxMzUwLCAyMTM1NiwgMjEzNjIsIDIxMzY3LCAwLCAyMTM3MiwgMjEzNzYsIDIxMzgwLCAKLSAgICAyMTM4NCwgMjEzODgsIDIxMzkyLCAyMTM5NiwgMjE0MDAsIDIxNDA0LCAyMTQwOCwgMjE0MTIsIDIxNDE2LCAyMTQyMCwgCi0gICAgMjE0MjQsIDIxNDI4LCAyMTQzMiwgMjE0MzYsIDIxNDM5LCAyMTQ0MywgMjE0NDcsIDIxNDUxLCAyMTQ1NSwgMjE0NTksIAotICAgIDIxNDYzLCAyMTQ2NywgMjE0NzEsIDIxNDc1LCAyMTQ3OSwgMjE0ODMsIDIxNDg3LCAyMTQ5MSwgMjE0OTUsIDIxNDk5LCAKLSAgICAyMTUwMywgMjE1MDcsIDIxNTExLCAyMTUxNSwgMjE1MTksIDIxNTIzLCAyMTUyNywgMjE1MzEsIDIxNTM1LCAyMTUzOSwgCi0gICAgMjE1NDMsIDIxNTQ3LCAyMTU1MSwgMjE1NTUsIDIxNTU5LCAyMTU2MywgMjE1NjcsIDIxNTcxLCAyMTU3NSwgMjE1NzksIAotICAgIDIxNTgzLCAyMTU4NywgMjE1OTEsIDIxNTk1LCAwLCAyMTU5OSwgMjE2MDMsIDIxNjA3LCAyMTYxMSwgMCwgMCwgMjE2MTUsIAotICAgIDIxNjE5LCAyMTYyMywgMjE2MjcsIDIxNjMxLCAyMTYzNSwgMjE2MzksIDIxNjQzLCAyMTY0NywgMjE2NTEsIDIxNjU1LCAKLSAgICAyMTY1OSwgMjE2NjMsIDIxNjY3LCAyMTY3MSwgMjE2NzUsIDIxNjc5LCAyMTY4MywgMjE2ODcsIDIxNjkxLCAyMTY5NSwgCi0gICAgMjE2OTksIDIxNzAzLCAyMTcwNywgMjE3MTEsIDIxNzE1LCAyMTcxOSwgMjE3MjMsIDIxNzI3LCAyMTczMSwgMjE3MzUsIAotICAgIDIxNzM5LCAyMTc0MywgMjE3NDcsIDIxNzUxLCAyMTc1NSwgMjE3NTksIDIxNzYzLCAyMTc2NywgMjE3NzEsIDIxNzc1LCAKLSAgICAyMTc3OSwgMjE3ODMsIDIxNzg3LCAyMTc5MSwgMjE3OTUsIDIxNzk5LCAyMTgwMywgMjE4MDcsIDIxODExLCAyMTgxNSwgCi0gICAgMjE4MTksIDIxODIzLCAyMTgyNywgMjE4MzEsIDIxODM1LCAyMTgzOSwgMjE4NDIsIDIxODQ2LCAyMTg1MCwgMjE4NTQsIAotICAgIDIxODU4LCAyMTg2MiwgMjE4NjYsIDIxODcwLCAyMTg3NCwgMjE4NzgsIDAsIDAsIDIxODgyLCAyMTg5MSwgMjE4OTcsIAotICAgIDIxOTAyLCAyMTkwNiwgMjE5MDksIDIxOTE0LCAyMTkxNywgMjE5MjAsIDIxOTIzLCAyMTkyOCwgMjE5MzIsIDIxOTM3LCAKLSAgICAyMTk0MCwgMjE5NDMsIDIxOTQ2LCAyMTk0OSwgMjE5NTIsIDIxOTU1LCAyMTk1OCwgMjE5NjEsIDIxOTY0LCAyMTk2OCwgCi0gICAgMjE5NzIsIDIxOTc2LCAyMTk4MCwgMjE5ODQsIDIxOTg4LCAyMTk5MiwgMjE5OTYsIDIyMDAwLCAyMjAwNCwgMCwgMCwgMCwgCi0gICAgMjIwMTAsIDIyMDE2LCAyMjAyMCwgMjIwMjQsIDIyMDI4LCAyMjAzNCwgMjIwMzgsIDIyMDQyLCAyMjA0NiwgMjIwNTIsIAotICAgIDIyMDU2LCAyMjA2MCwgMjIwNjQsIDIyMDcwLCAyMjA3NCwgMjIwNzgsIDIyMDgyLCAyMjA4OCwgMjIwOTQsIDIyMTAwLCAKLSAgICAyMjEwOCwgMjIxMTQsIDIyMTIwLCAyMjEyNiwgMjIxMzIsIDIyMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NCwgMjIxNDcsIAotICAgIDIyMTUwLCAyMjE1MywgMjIxNTYsIDIyMTU5LCAyMjE2MywgMjIxNjcsIDIyMTcwLCAyMjE3NCwgMjIxNzgsIDIyMTgyLCAKLSAgICAyMjE4NiwgMjIxOTAsIDIyMTkzLCAyMjE5NywgMjIyMDEsIDIyMjA1LCAyMjIwOSwgMjIyMTMsIDIyMjE3LCAyMjIyMSwgCi0gICAgMjIyMjUsIDIyMjI5LCAyMjIzMywgMjIyMzcsIDIyMjQwLCAyMjI0NCwgMjIyNDgsIDIyMjUyLCAyMjI1NiwgMjIyNTksIAotICAgIDIyMjYzLCAyMjI2NywgMjIyNzEsIDIyMjc1LCAyMjI3OSwgMjIyODMsIDIyMjg3LCAyMjI5MSwgMjIyOTUsIDIyMjk5LCAKLSAgICAyMjMwMywgMjIzMDcsIDIyMzExLCAyMjMxNCwgMjIzMTgsIDIyMzIyLCAyMjMyNiwgMjIzMzAsIDIyMzM0LCAyMjMzOCwgCi0gICAgMjIzNDIsIDIyMzQ2LCAyMjM1MCwgMjIzNTQsIDIyMzU4LCAyMjM2MiwgMjIzNjYsIDIyMzcwLCAyMjM3NCwgMjIzNzgsIAotICAgIDIyMzgyLCAyMjM4NiwgMjIzOTAsIDIyMzk0LCAyMjM5OCwgMjI0MDIsIDIyNDA2LCAyMjQxMCwgMjI0MTQsIDIyNDE4LCAKLSAgICAyMjQyMiwgMjI0MjYsIDIyNDMwLCAyMjQzNCwgMjI0MzgsIDIyNDQyLCAyMjQ0NiwgMjI0NTAsIDIyNDUzLCAyMjQ1NywgCi0gICAgMjI0NjEsIDIyNDY1LCAyMjQ2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzMsIDIyNDc3LCAKLSAgICAyMjQ4MCwgMjI0ODQsIDIyNDg3LCAyMjQ5MSwgMjI0OTQsIDIyNDk4LCAyMjUwNCwgMjI1MDksIDIyNTEzLCAyMjUxNiwgCi0gICAgMjI1MjAsIDIyNTI0LCAyMjUyOSwgMjI1MzMsIDIyNTM4LCAyMjU0MiwgMjI1NDcsIDIyNTUxLCAyMjU1NiwgMjI1NjAsIAotICAgIDIyNTY1LCAyMjU3MSwgMjI1NzUsIDIyNTgwLCAyMjU4NCwgMjI1ODksIDIyNTk1LCAyMjU5OSwgMjI2MDUsIDIyNjExLCAKLSAgICAyMjYxNSwgMjI2MjAsIDIyNjI4LCAyMjYzNiwgMjI2NDMsIDIyNjQ4LCAyMjY1MywgMjI2NjIsIDIyNjY5LCAyMjY3NiwgCi0gICAgMjI2ODEsIDIyNjg3LCAyMjY5MSwgMjI2OTUsIDIyNjk5LCAyMjcwMywgMjI3MDcsIDIyNzExLCAyMjcxNSwgMjI3MTksIAotICAgIDIyNzIzLCAyMjcyNywgMjI3MzMsIDIyNzM4LCAyMjc0MywgMjI3NDYsIDIyNzUwLCAyMjc1NCwgMjI3NTksIDIyNzYzLCAKLSAgICAyMjc2OCwgMjI3NzIsIDIyNzc3LCAyMjc4MSwgMjI3ODYsIDIyNzkwLCAyMjc5NSwgMjI3OTksIDIyODA0LCAyMjgwOCwgCi0gICAgMjI4MTMsIDIyODE5LCAyMjgyMywgMjI4MjgsIDIyODMzLCAyMjgzNywgMjI4NDEsIDIyODQ1LCAyMjg0OSwgMjI4NTIsIAotICAgIDIyODU2LCAyMjg2MiwgMjI4NjcsIDIyODcyLCAyMjg3NiwgMjI4ODAsIDIyODg0LCAyMjg4OSwgMjI4OTMsIDIyODk4LCAKLSAgICAyMjkwMiwgMjI5MDcsIDIyOTEwLCAyMjkxNCwgMjI5MTgsIDIyOTIzLCAyMjkyNywgMjI5MzIsIDIyOTM2LCAyMjk0MSwgCi0gICAgMjI5NDcsIDIyOTUxLCAyMjk1NSwgMjI5NTksIDIyOTYzLCAyMjk2NywgMjI5NzEsIDIyOTc1LCAyMjk3OSwgMjI5ODMsIAotICAgIDIyOTg3LCAyMjk5MSwgMjI5OTcsIDIzMDAwLCAyMzAwNCwgMjMwMDgsIDIzMDEzLCAyMzAxNywgMjMwMjIsIDIzMDI2LCAKLSAgICAyMzAzMSwgMjMwMzUsIDIzMDQwLCAyMzA0NCwgMjMwNDksIDIzMDUzLCAyMzA1OCwgMjMwNjIsIDIzMDY3LCAyMzA3MywgCi0gICAgMjMwNzcsIDIzMDgxLCAyMzA4NywgMjMwOTMsIDIzMDk5LCAyMzEwNSwgMjMxMDksIDIzMTEzLCAyMzExNywgMjMxMjEsIAotICAgIDIzMTI1LCAyMzEyOSwgMjMxMzUsIDIzMTM5LCAyMzE0MywgMjMxNDcsIDIzMTUyLCAyMzE1NiwgMjMxNjEsIDIzMTY1LCAKLSAgICAyMzE3MCwgMjMxNzQsIDIzMTc5LCAyMzE4MywgMjMxODgsIDIzMTkyLCAyMzE5NywgMjMyMDEsIDIzMjA2LCAyMzIxMiwgCi0gICAgMjMyMTYsIDIzMjIyLCAyMzIyNiwgMjMyMzAsIDIzMjM0LCAyMzIzOCwgMjMyNDIsIDIzMjQ2LCAyMzI1MiwgMjMyNTUsIAotICAgIDIzMjU5LCAyMzI2MywgMjMyNjgsIDIzMjcyLCAyMzI3NywgMjMyODEsIDIzMjg2LCAyMzI5MCwgMjMyOTUsIDIzMjk5LCAKLSAgICAyMzMwNCwgMjMzMDgsIDIzMzEzLCAyMzMxNywgMjMzMjIsIDIzMzI4LCAyMzMzMSwgMjMzMzUsIDIzMzM5LCAyMzM0NCwgCi0gICAgMjMzNDksIDIzMzUzLCAyMzM1NywgMjMzNjEsIDIzMzY1LCAyMzM2OSwgMjMzNzMsIDIzMzc5LCAyMzM4MiwgMjMzODYsIAotICAgIDIzMzkwLCAyMzM5NSwgMjMzOTksIDIzNDA0LCAyMzQwOCwgMjM0MTMsIDIzNDE5LCAyMzQyMywgMjM0MjgsIDIzNDMyLCAKLSAgICAyMzQzNiwgMjM0NDAsIDIzNDQ0LCAyMzQ0OCwgMjM0NTIsIDIzNDU2LCAyMzQ2MiwgMjM0NjYsIDIzNDcwLCAyMzQ3NCwgCi0gICAgMjM0NzksIDIzNDgzLCAyMzQ4OCwgMjM0OTIsIDIzNDk3LCAyMzUwMSwgMjM1MDYsIDIzNTEwLCAyMzUxNSwgMjM1MTksIAotICAgIDIzNTI0LCAyMzUyOCwgMjM1MzMsIDIzNTM2LCAyMzU0MCwgMjM1NDQsIDIzNTQ4LCAyMzU1MiwgMjM1NTYsIDIzNTYwLCAKLSAgICAyMzU2NCwgMjM1NjgsIDIzNTc0LCAyMzU3NywgMjM1ODEsIDIzNTg1LCAyMzU5MCwgMjM1OTQsIDIzNTk5LCAyMzYwMywgCi0gICAgMjM2MDgsIDIzNjEyLCAyMzYxNywgMjM2MjEsIDIzNjI2LCAyMzYzMCwgMjM2MzUsIDIzNjM5LCAyMzY0NCwgMjM2NTAsIAotICAgIDIzNjU0LCAyMzY2MCwgMjM2NjQsIDIzNjcwLCAyMzY3NiwgMjM2ODIsIDIzNjg4LCAyMzY5NCwgMjM3MDAsIDIzNzA2LCAKLSAgICAyMzcxMiwgMjM3MTYsIDIzNzIwLCAyMzcyNCwgMjM3MjgsIDIzNzMyLCAyMzczNiwgMjM3NDAsIDIzNzQ0LCAyMzc0OSwgCi0gICAgMjM3NTMsIDIzNzU4LCAyMzc2MiwgMjM3NjcsIDIzNzcxLCAyMzc3NiwgMjM3ODAsIDIzNzg1LCAyMzc4OSwgMjM3OTQsIAotICAgIDIzNzk4LCAyMzgwMywgMjM4MDcsIDIzODExLCAyMzgxNSwgMjM4MTksIDIzODIzLCAyMzgyNywgMjM4MzEsIDIzODM3LCAKLSAgICAyMzg0MCwgMjM4NDQsIDIzODQ4LCAyMzg1MywgMjM4NTcsIDIzODYyLCAyMzg2NiwgMjM4NzEsIDIzODc1LCAyMzg4MCwgCi0gICAgMjM4ODQsIDIzODg5LCAyMzg5MywgMjM4OTgsIDIzOTAyLCAyMzkwNywgMjM5MTMsIDIzOTE3LCAyMzkyMywgMjM5MjgsIAotICAgIDIzOTM0LCAyMzkzOCwgMjM5NDQsIDIzOTQ5LCAyMzk1MywgMjM5NTcsIDIzOTYxLCAyMzk2NSwgMjM5NjksIDIzOTc0LCAKLSAgICAyMzk3NywgMjM5ODEsIDIzOTg2LCAyMzk5MCwgMjM5OTUsIDIzOTk4LCAyNDAwMiwgMjQwMDYsIDI0MDEwLCAyNDAxNCwgCi0gICAgMjQwMTgsIDI0MDIyLCAyNDAyNiwgMjQwMzAsIDI0MDM0LCAyNDAzOCwgMjQwNDIsIDI0MDQ3LCAyNDA1MSwgMjQwNTUsIAotICAgIDI0MDYxLCAyNDA2NSwgMjQwNzEsIDI0MDc1LCAyNDA4MSwgMjQwODUsIDI0MDg5LCAyNDA5MywgMjQwOTcsIDI0MTAxLCAKLSAgICAyNDEwNiwgMjQxMTAsIDI0MTE0LCAyNDExOCwgMjQxMjIsIDI0MTI2LCAyNDEzMCwgMjQxMzQsIDI0MTM4LCAyNDE0MiwgCi0gICAgMjQxNDYsIDI0MTUyLCAyNDE1OCwgMjQxNjQsIDI0MTcwLCAyNDE3NiwgMjQxODEsIDI0MTg3LCAyNDE5MywgMjQxOTksIAotICAgIDI0MjAzLCAyNDIwNywgMjQyMTEsIDI0MjE1LCAyNDIxOSwgMjQyMjMsIDI0MjI3LCAyNDIzMSwgMjQyMzUsIDI0MjM5LCAKLSAgICAyNDI0MywgMjQyNDcsIDI0MjUxLCAyNDI1NiwgMjQyNjEsIDI0MjY2LCAyNDI3MCwgMjQyNzQsIDI0Mjc4LCAyNDI4MiwgCi0gICAgMjQyODYsIDI0MjkwLCAyNDI5NCwgMjQyOTgsIDI0MzAyLCAyNDMwNiwgMjQzMTIsIDI0MzE4LCAyNDMyNCwgMjQzMzAsIAotICAgIDI0MzM2LCAyNDM0MiwgMjQzNDgsIDI0MzU0LCAyNDM2MCwgMjQzNjQsIDI0MzY4LCAyNDM3MiwgMjQzNzYsIDI0MzgwLCAKLSAgICAyNDM4NCwgMjQzODgsIDI0Mzk0LCAyNDQwMCwgMjQ0MDYsIDI0NDEyLCAyNDQxOCwgMjQ0MjQsIDI0NDMwLCAyNDQzNiwgCi0gICAgMjQ0NDIsIDI0NDQ3LCAyNDQ1MiwgMjQ0NTcsIDI0NDYyLCAyNDQ2OCwgMjQ0NzQsIDI0NDgwLCAyNDQ4NiwgMjQ0OTIsIAotICAgIDI0NDk4LCAyNDUwNCwgMjQ1MDksIDI0NTE1LCAyNDUyMSwgMjQ1MjcsIDI0NTMyLCAyNDUzOCwgMjQ1NDQsIDI0NTUwLCAKLSAgICAyNDU1NSwgMjQ1NjAsIDI0NTY1LCAyNDU3MCwgMjQ1NzUsIDI0NTgwLCAyNDU4NSwgMjQ1OTAsIDI0NTk1LCAyNDYwMCwgCi0gICAgMjQ2MDUsIDI0NjEwLCAyNDYxNCwgMjQ2MTksIDI0NjI0LCAyNDYyOSwgMjQ2MzQsIDI0NjM5LCAyNDY0NCwgMjQ2NDksIAotICAgIDI0NjU0LCAyNDY1OSwgMjQ2NjQsIDI0NjY5LCAyNDY3NCwgMjQ2NzksIDI0Njg0LCAyNDY4OSwgMjQ2OTQsIDI0Njk5LCAKLSAgICAyNDcwNCwgMjQ3MDksIDI0NzE0LCAyNDcxOSwgMjQ3MjQsIDI0NzI5LCAyNDczNCwgMjQ3MzksIDI0NzQ0LCAyNDc0OSwgCi0gICAgMjQ3NTQsIDI0NzU5LCAyNDc2MywgMjQ3NjgsIDI0NzczLCAyNDc3OCwgMjQ3ODMsIDI0Nzg4LCAyNDc5MywgMjQ3OTgsIAotICAgIDI0ODAzLCAyNDgwOCwgMjQ4MTMsIDI0ODE4LCAyNDgyMywgMjQ4MjgsIDI0ODMzLCAyNDgzOCwgMjQ4NDMsIDI0ODQ4LCAKLSAgICAyNDg1MywgMjQ4NTgsIDI0ODYzLCAyNDg2OCwgMjQ4NzMsIDI0ODc4LCAyNDg4MywgMjQ4ODgsIDI0ODkyLCAyNDg5NywgCi0gICAgMjQ5MDIsIDI0OTA3LCAyNDkxMiwgMjQ5MTcsIDI0OTIxLCAyNDkyNiwgMjQ5MzEsIDI0OTM2LCAyNDk0MSwgMjQ5NDYsIAotICAgIDI0OTUwLCAyNDk1NSwgMjQ5NjEsIDI0OTY2LCAyNDk3MSwgMjQ5NzYsIDI0OTgxLCAyNDk4NywgMjQ5OTIsIDI0OTk3LCAKLSAgICAyNTAwMiwgMjUwMDcsIDI1MDEyLCAyNTAxNywgMjUwMjIsIDI1MDI3LCAyNTAzMiwgMjUwMzcsIDI1MDQyLCAyNTA0NywgCi0gICAgMjUwNTIsIDI1MDU3LCAyNTA2MiwgMjUwNjcsIDI1MDcyLCAyNTA3NywgMjUwODIsIDI1MDg3LCAyNTA5MiwgMjUwOTcsIAotICAgIDI1MTAyLCAyNTEwNywgMjUxMTIsIDI1MTE3LCAyNTEyMiwgMjUxMjcsIDI1MTMyLCAyNTEzNywgMjUxNDIsIDI1MTQ3LCAKLSAgICAyNTE1MiwgMjUxNTcsIDI1MTYyLCAyNTE2NywgMjUxNzIsIDI1MTc3LCAyNTE4MiwgMjUxODcsIDI1MTkyLCAyNTE5NywgCi0gICAgMjUyMDIsIDI1MjA3LCAyNTIxMywgMjUyMTgsIDI1MjIzLCAyNTIyOCwgMjUyMzMsIDI1MjM4LCAyNTI0MywgMjUyNDgsIAotICAgIDI1MjUzLCAyNTI1OCwgMjUyNjMsIDI1MjY4LCAyNTI3MiwgMjUyNzcsIDI1MjgyLCAyNTI4NywgMjUyOTIsIDI1Mjk3LCAKLSAgICAyNTMwMiwgMjUzMDcsIDI1MzEyLCAyNTMxNywgMjUzMjIsIDI1MzI3LCAyNTMzMiwgMjUzMzcsIDI1MzQyLCAyNTM0NywgCi0gICAgMjUzNTIsIDI1MzU3LCAyNTM2MiwgMjUzNjcsIDI1MzcyLCAyNTM3NywgMjUzODIsIDI1Mzg3LCAyNTM5MiwgMjUzOTcsIAotICAgIDI1NDAyLCAyNTQwOCwgMjU0MTIsIDI1NDE2LCAyNTQyMCwgMjU0MjQsIDI1NDI4LCAyNTQzMiwgMjU0MzYsIDI1NDQwLCAKLSAgICAyNTQ0NiwgMjU0NTIsIDI1NDU4LCAyNTQ2NCwgMjU0NzAsIDI1NDc2LCAyNTQ4MiwgMjU0ODksIDI1NDk1LCAyNTUwMCwgCi0gICAgMjU1MDUsIDI1NTEwLCAyNTUxNSwgMjU1MjAsIDI1NTI1LCAyNTUzMCwgMjU1MzUsIDI1NTQwLCAyNTU0NSwgMjU1NTAsIAotICAgIDI1NTU1LCAyNTU2MCwgMjU1NjUsIDI1NTcwLCAyNTU3NSwgMjU1ODAsIDI1NTg1LCAyNTU5MCwgMjU1OTUsIDI1NjAwLCAKLSAgICAyNTYwNSwgMjU2MTAsIDI1NjE1LCAyNTYyMCwgMjU2MjUsIDI1NjMwLCAyNTYzNSwgMCwgMCwgMCwgMjU2NDIsIDI1NjUyLCAKLSAgICAyNTY1NiwgMjU2NjMsIDI1NjY3LCAyNTY3MSwgMjU2NzUsIDI1NjgzLCAyNTY4NywgMjU2OTIsIDI1Njk3LCAyNTcwMiwgCi0gICAgMjU3MDYsIDI1NzExLCAyNTcxNiwgMjU3MTksIDI1NzIzLCAyNTcyNywgMjU3MzYsIDI1NzQwLCAyNTc0NCwgMjU3NTAsIAotICAgIDI1NzU0LCAyNTc1OCwgMjU3NjYsIDI1NzcwLCAyNTc3OCwgMjU3ODQsIDI1NzkwLCAyNTc5NiwgMjU4MDIsIDI1ODEyLCAKLSAgICAyNTgxOCwgMjU4MjIsIDI1ODMxLCAyNTgzNCwgMjU4NDAsIDI1ODQ0LCAyNTg1MCwgMjU4NTUsIDI1ODYxLCAyNTg2OSwgCi0gICAgMjU4NzUsIDI1ODgxLCAyNTg4OSwgMjU4OTUsIDI1ODk5LCAyNTkwMywgMjU5MTMsIDI1OTE5LCAyNTkyMywgMjU5MzMsIAotICAgIDI1OTM5LCAyNTk0MywgMjU5NDcsIDI1OTU0LCAyNTk2MSwgMjU5NjYsIDI1OTcxLCAyNTk4MCwgMjU5ODQsIDI1OTg4LCAKLSAgICAyNTk5MiwgMjYwMDAsIDI2MDA3LCAyNjAxMSwgMjYwMTUsIDI2MDE5LCAyNjAyMywgMjYwMjcsIDI2MDMxLCAyNjAzNSwgCi0gICAgMjYwMzksIDI2MDQzLCAyNjA0NywgMjYwNTEsIDI2MDU2LCAyNjA2MSwgMjYwNjYsIDI2MDcwLCAyNjA3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwNzgsIDI2MDgyLCAyNjA4NiwgMjYwOTAsIDI2MDk0LCAKLSAgICAyNjA5OSwgMjYxMDQsIDI2MTA5LCAyNjExNCwgMjYxMTgsIDI2MTIyLCAyNjEyNywgMjYxMzEsIDAsIDI2MTM1LCAyNjE0MCwgCi0gICAgMjYxNDUsIDI2MTQ5LCAyNjE1MywgMjYxNTgsIDI2MTYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjE2OCwgMjYxNzIsIDI2MTc2LCAyNjE4MCwgMjYxODQsIDI2MTg5LCAyNjE5NCwgMjYxOTksIDI2MjA0LCAyNjIwOCwgCi0gICAgMjYyMTIsIDI2MjE3LCAyNjIyMSwgMjYyMjUsIDI2MjI5LCAyNjIzNCwgMjYyMzksIDI2MjQzLCAyNjI0NywgMjYyNTIsIAotICAgIDI2MjU3LCAyNjI2MiwgMjYyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjczLCAyNjI3NywgMjYyODEsIAotICAgIDI2Mjg1LCAyNjI4OSwgMjYyOTQsIDI2Mjk5LCAyNjMwNCwgMjYzMDksIDI2MzEzLCAyNjMxNywgMjYzMjIsIDI2MzI2LCAKLSAgICAyNjMzMCwgMjYzMzQsIDI2MzM5LCAyNjM0NCwgMjYzNDgsIDI2MzUyLCAyNjM1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMjYzNjIsIDI2MzY2LCAyNjM3MCwgMjYzNzQsIDI2Mzc4LCAyNjM4MywgMjYzODgsIDI2MzkzLCAKLSAgICAyNjM5OCwgMjY0MDIsIDI2NDA2LCAyNjQxMSwgMjY0MTUsIDAsIDI2NDE5LCAyNjQyNCwgMjY0MjksIDAsIDI2NDMzLCAKLSAgICAyNjQzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDMsIDI2NDQ2LCAyNjQ1MCwgMjY0NTQsIAotICAgIDI2NDU4LCAyNjQ2MiwgMjY0NjYsIDI2NDcwLCAyNjQ3NCwgMjY0NzgsIDI2NDgyLCAyNjQ4NiwgMjY0OTAsIDI2NDk0LCAKLSAgICAyNjQ5OCwgMjY1MDIsIDI2NTA2LCAyNjUxMCwgMjY1MTMsIDI2NTE3LCAyNjUyMSwgMjY1MjUsIDI2NTI5LCAyNjUzMywgCi0gICAgMjY1MzcsIDI2NTQxLCAyNjU0NSwgMjY1NDksIDI2NTUzLCAyNjU1NywgMjY1NjEsIDI2NTY1LCAyNjU2OCwgMjY1NzEsIAotICAgIDI2NTc1LCAyNjU3OSwgMjY1ODUsIDI2NTkxLCAyNjU5NywgMjY2MDMsIDI2NjA5LCAyNjYxNSwgMjY2MjEsIDI2NjI3LCAKLSAgICAyNjYzMywgMjY2MzksIDI2NjQ1LCAyNjY1MSwgMjY2NTcsIDI2NjYzLCAyNjY3MiwgMjY2ODEsIDI2Njg3LCAyNjY5MywgCi0gICAgMjY2OTksIDI2NzA0LCAyNjcwOCwgMjY3MTMsIDI2NzE4LCAyNjcyMywgMjY3MjcsIDI2NzMyLCAyNjczNywgMjY3NDIsIAotICAgIDI2NzQ2LCAyNjc1MSwgMjY3NTUsIDI2NzYwLCAyNjc2NSwgMjY3NzAsIDI2Nzc1LCAyNjc3OSwgMjY3ODMsIDI2Nzg3LCAKLSAgICAyNjc5MSwgMjY3OTUsIDI2Nzk5LCAyNjgwMywgMjY4MDcsIDI2ODExLCAyNjgxNSwgMjY4MjEsIDI2ODI1LCAyNjgyOSwgCi0gICAgMjY4MzMsIDI2ODM3LCAyNjg0MSwgMjY4NDksIDI2ODU1LCAyNjg1OSwgMjY4NjUsIDI2ODY5LCAyNjg3NSwgMjY4NzksIDAsIAotICAgIDAsIDI2ODgzLCAyNjg4NywgMjY4OTAsIDI2ODkzLCAyNjg5NiwgMjY4OTksIDI2OTAyLCAyNjkwNSwgMjY5MDgsIDI2OTExLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNCwgMjY5MjIsIDI2OTMwLCAyNjkzOCwgMjY5NDYsIDI2OTU0LCAyNjk2MiwgMjY5NzAsIAotICAgIDI2OTc4LCAyNjk4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTQsIDI2OTk3LCAyNzAwMCwgMjcwMDMsIDI3MDA4LCAyNzAxMSwgCi0gICAgMjcwMTYsIDI3MDIzLCAyNzAzMSwgMjcwMzYsIDI3MDQzLCAyNzA0NiwgMjcwNTMsIDI3MDYwLCAyNzA2NywgMCwgMjcwNzEsIAotICAgIDI3MDc1LCAyNzA3OCwgMjcwODEsIDI3MDg0LCAyNzA4NywgMjcwOTAsIDI3MDkzLCAyNzA5NiwgMjcwOTksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDI3MTAyLCAyNzEwNSwgMjcxMDgsIDI3MTExLCAyNzExNCwgMjcxMTcsIDI3MTIxLCAyNzEyNSwgMjcxMjksIAotICAgIDI3MTMyLCAyNzEzNiwgMjcxNDAsIDI3MTQzLCAyNzE0NywgMjcxNTEsIDI3MTU0LCAyNzE1OCwgMjcxNjEsIDI3MTY1LCAKLSAgICAyNzE2OSwgMjcxNzMsIDI3MTc3LCAyNzE4MSwgMjcxODQsIDI3MTg3LCAyNzE5MSwgMjcxOTUsIDI3MTk4LCAyNzIwMiwgCi0gICAgMjcyMDYsIDI3MjEwLCAyNzIxNCwgMjcyMTgsIDI3MjIyLCAyNzIyNiwgMjcyMzAsIDI3MjM3LCAyNzI0MiwgMjcyNDcsIAotICAgIDI3MjUyLCAyNzI1NywgMjcyNjMsIDI3MjY5LCAyNzI3NSwgMjcyODEsIDI3Mjg2LCAyNzI5MiwgMjcyOTgsIDI3MzAzLCAKLSAgICAyNzMwOSwgMjczMTUsIDI3MzIxLCAyNzMyNywgMjczMzMsIDI3MzM4LCAyNzM0NCwgMjczNDksIDI3MzU1LCAyNzM2MSwgCi0gICAgMjczNjcsIDI3MzczLCAyNzM3OSwgMjczODQsIDI3Mzg5LCAyNzM5NSwgMjc0MDEsIDI3NDA2LCAyNzQxMiwgMjc0MTcsIAotICAgIDI3NDIzLCAyNzQyOCwgMjc0MzMsIDI3NDM5LCAyNzQ0NSwgMjc0NTEsIDI3NDU3LCAyNzQ2MywgMjc0NjksIDI3NDc1LCAKLSAgICAyNzQ4MSwgMjc0ODcsIDI3NDkzLCAyNzQ5OSwgMjc1MDUsIDI3NTEwLCAyNzUxNSwgMjc1MjAsIDI3NTI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNzUzMiwgMjc1NDEsIDI3NTUwLCAyNzU1OCwgMjc1NjYsIDI3NTc2LCAyNzU4NCwgMjc1OTMsIAotICAgIDI3NjAwLCAyNzYwNywgMjc2MTQsIDI3NjIyLCAyNzYzMCwgMjc2MzgsIDI3NjQ2LCAyNzY1NCwgMjc2NjIsIDI3NjcwLCAKLSAgICAyNzY3OCwgMjc2ODUsIDI3NjkzLCAyNzcwMSwgMjc3MDksIDI3NzE3LCAyNzcyNSwgMjc3MzUsIDI3NzQ1LCAyNzc1NSwgCi0gICAgMjc3NjUsIDI3Nzc1LCAyNzc4NSwgMjc3OTUsIDI3ODA1LCAyNzgxNSwgMjc4MjUsIDI3ODM1LCAyNzg0NSwgMjc4NTUsIAotICAgIDI3ODY1LCAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5OSwgMCwgMCwgMCwgMCwgMCwgMjc5MDksIDI3OTEzLCAyNzkxNywgCi0gICAgMjc5MjEsIDI3OTI1LCAyNzkyOSwgMjc5MzMsIDI3OTM3LCAyNzk0MSwgMjc5NDUsIDI3OTQ5LCAyNzk1MywgMjc5NTcsIAotICAgIDI3OTYxLCAyNzk2NSwgMjc5NjksIDI3OTczLCAyNzk3NywgMjc5ODEsIDI3OTg1LCAyNzk4OSwgMjc5OTMsIDI3OTk3LCAKLSAgICAyODAwMSwgMjgwMDcsIDI4MDExLCAyODAxNywgMjgwMjEsIDI4MDI3LCAyODAzMSwgMjgwMzcsIDI4MDQxLCAyODA0NSwgCi0gICAgMjgwNDksIDI4MDUzLCAyODA1NywgMjgwNjEsIDI4MDY3LCAyODA3MywgMjgwNzksIDI4MDg1LCAyODA5MCwgMjgwOTYsIAotICAgIDI4MTAyLCAyODEwOCwgMjgxMTQsIDI4MTIwLCAyODEyNiwgMjgxMzMsIDI4MTM5LCAyODE0NCwgMjgxNDksIDI4MTUzLCAKLSAgICAyODE1NywgMjgxNjEsIDI4MTY1LCAyODE2OSwgMjgxNzMsIDI4MTc3LCAyODE4MywgMjgxODksIDI4MTk1LCAyODIwMCwgCi0gICAgMjgyMDcsIDI4MjEyLCAyODIxNywgMjgyMjMsIDI4MjI4LCAyODIzNSwgMjgyNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI4MjQ5LCAyODI1NSwgMjgyNTksIDI4MjY0LCAyODI2OSwgMjgyNzQsIDI4Mjc5LCAyODI4NCwgMjgyODksIAotICAgIDI4Mjk0LCAyODI5OSwgMjgzMDQsIDI4MzA5LCAyODMxNCwgMjgzMTksIDI4MzI0LCAyODMyOCwgMjgzMzIsIDI4MzM3LCAKLSAgICAyODM0MiwgMjgzNDcsIDI4MzUxLCAyODM1NSwgMjgzNTksIDI4MzY0LCAyODM2OSwgMjgzNzQsIDI4Mzc5LCAyODM4MywgMCwgCi0gICAgMCwgMCwgMjgzODcsIDI4MzkyLCAyODM5NywgMjg0MDIsIDI4NDA4LCAyODQxNCwgMjg0MjAsIDI4NDI2LCAyODQzMSwgCi0gICAgMjg0MzYsIDI4NDQyLCAyODQ0OCwgMCwgMCwgMCwgMCwgMjg0NTUsIDI4NDYwLCAyODQ2NiwgMjg0NzIsIDI4NDc4LCAKLSAgICAyODQ4MywgMjg0ODgsIDI4NDkzLCAyODQ5OCwgMjg1MDQsIDI4NTA5LCAyODUxNCwgMCwgMCwgMCwgMCwgMjg1MTksIDAsIDAsIAotICAgIDAsIDI4NTI0LCAyODUyOSwgMjg1MzQsIDI4NTM5LCAyODU0MywgMjg1NDcsIDI4NTUxLCAyODU1NSwgMjg1NTksIDI4NTYzLCAKLSAgICAyODU2NywgMjg1NzEsIDI4NTc1LCAyODU4MCwgMjg1ODYsIDI4NTkyLCAyODU5OCwgMjg2MDMsIDI4NjA4LCAyODYxNCwgCi0gICAgMjg2MjAsIDI4NjI2LCAyODYzMSwgMjg2MzcsIDI4NjQyLCAyODY0OCwgMjg2NTQsIDI4NjU5LCAyODY2NSwgMjg2NzEsIAotICAgIDI4Njc3LCAyODY4MiwgMjg2ODcsIDI4NjkyLCAyODY5OCwgMjg3MDQsIDI4NzA5LCAyODcxNSwgMjg3MjAsIDI4NzI2LCAKLSAgICAyODczMSwgMjg3MzcsIDAsIDAsIDI4NzQzLCAyODc0OSwgMjg3NTUsIDI4NzYxLCAyODc2NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjg3NzMsIDI4NzgwLCAyODc4NywgMjg3OTMsIDI4ODAwLCAyODgwNywgMjg4MTMsIDI4ODIwLCAKLSAgICAyODgyNywgMjg4MzQsIDI4ODQwLCAyODg0NiwgMjg4NTMsIDI4ODU5LCAyODg2NSwgMjg4NzIsIDI4ODc5LCAyODg4NSwgCi0gICAgMjg4OTIsIDI4ODk5LCAyODkwNSwgMjg5MTEsIDI4OTE4LCAyODkyNCwgMjg5MzAsIDI4OTM3LCAyODk0MywgMjg5NTAsIAotICAgIDI4OTU3LCAyODk2NCwgMjg5NzEsIDI4OTc4LCAyODk4NSwgMjg5OTEsIDI4OTk4LCAyOTAwNSwgMjkwMTEsIDI5MDE4LCAKLSAgICAyOTAyNSwgMjkwMzIsIDI5MDM5LCAyOTA0NiwgMjkwNTMsIDI5MDYwLCAwLCAwLCAwLCAwLCAyOTA2NywgMjkwNzUsIAotICAgIDI5MDgyLCAyOTA4OSwgMjkwOTUsIDI5MTAyLCAyOTEwOCwgMjkxMTUsIDI5MTIxLCAyOTEyOCwgMjkxMzUsIDI5MTQyLCAKLSAgICAyOTE0OSwgMjkxNTYsIDI5MTYzLCAyOTE3MCwgMjkxNzcsIDI5MTg0LCAyOTE5MSwgMjkxOTgsIDI5MjA1LCAyOTIxMSwgCi0gICAgMjkyMTgsIDI5MjI1LCAyOTIzMiwgMjkyMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ0LCAyOTI1MCwgMjkyNTUsIDI5MjYwLCAKLSAgICAyOTI2NSwgMjkyNzAsIDI5Mjc1LCAyOTI4MCwgMjkyODUsIDI5MjkwLCAyOTI5NSwgMCwgMCwgMCwgMjkzMDEsIDI5MzA3LCAKLSAgICAyOTMxMywgMjkzMTcsIDI5MzIzLCAyOTMyOSwgMjkzMzUsIDI5MzQxLCAyOTM0NywgMjkzNTMsIDI5MzU5LCAyOTM2NSwgCi0gICAgMjkzNzEsIDI5Mzc3LCAyOTM4MywgMjkzODksIDI5Mzk1LCAyOTQwMSwgMjk0MDcsIDI5NDExLCAyOTQxNywgMjk0MjMsIAotICAgIDI5NDI5LCAyOTQzNSwgMjk0NDEsIDI5NDQ3LCAyOTQ1MywgMjk0NTksIDI5NDY1LCAyOTQ3MSwgMjk0NzcsIDI5NDgzLCAKLSAgICAyOTQ4OSwgMjk0OTUsIDI5NTAxLCAyOTUwNSwgMjk1MTAsIDI5NTE1LCAyOTUyMCwgMjk1MjQsIDI5NTI5LCAyOTUzMywgCi0gICAgMjk1MzgsIDI5NTQzLCAyOTU0OCwgMjk1NTIsIDI5NTU3LCAyOTU2MiwgMjk1NjcsIDI5NTcyLCAyOTU3NywgMjk1ODEsIAotICAgIDI5NTg1LCAyOTU5MCwgMjk1OTUsIDI5NTk5LCAyOTYwMywgMjk2MDcsIDI5NjEyLCAyOTYxNywgMjk2MjIsIDI5NjI3LCAwLCAKLSAgICAwLCAyOTYzMywgMjk2MzcsIDI5NjQ0LCAyOTY0OSwgMjk2NTUsIDI5NjYxLCAyOTY2NiwgMjk2NzIsIDI5Njc4LCAyOTY4MywgCi0gICAgMjk2ODksIDI5Njk1LCAyOTcwMSwgMjk3MDYsIDI5NzEyLCAyOTcxNywgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzksIAotICAgIDI5NzQ0LCAyOTc1MCwgMjk3NTYsIDI5NzYyLCAyOTc2OCwgMjk3NzIsIDI5Nzc3LCAyOTc4MiwgMjk3ODgsIDI5Nzk0LCAKLSAgICAyOTc5OSwgMjk4MDUsIDI5ODExLCAyOTgxNSwgMjk4MjAsIDI5ODI1LCAyOTgyOSwgMjk4MzQsIDI5ODM5LCAyOTg0NCwgCi0gICAgMjk4NDksIDI5ODU1LCAyOTg2MSwgMjk4NjYsIDI5ODcxLCAyOTg3NiwgMjk4ODAsIDI5ODg1LCAyOTg4OSwgMjk4OTQsIAotICAgIDI5ODk4LCAyOTkwMywgMjk5MDgsIDI5OTEzLCAyOTkxOCwgMjk5MjQsIDI5OTMwLCAyOTkzNywgMjk5NDcsIDI5OTU2LCAKLSAgICAyOTk2MywgMjk5NjksIDI5OTc5LCAyOTk4NCwgMjk5OTAsIDAsIDI5OTk1LCAzMDAwMCwgMzAwMDUsIDMwMDEzLCAzMDAxOSwgCi0gICAgMzAwMjcsIDMwMDMyLCAzMDAzOCwgMzAwNDQsIDMwMDUwLCAzMDA1NSwgMzAwNjEsIDMwMDY2LCAzMDA3MywgMzAwNzksIAotICAgIDMwMDg0LCAzMDA5MCwgMzAwOTYsIDMwMTAyLCAzMDEwOSwgMzAxMTYsIDMwMTIzLCAzMDEyOCwgMzAxMzMsIDMwMTQwLCAKLSAgICAzMDE0NywgMzAxNTQsIDMwMTYxLCAzMDE2OCwgMCwgMCwgMzAxNzUsIDMwMTgyLCAzMDE4OSwgMzAxOTUsIDMwMjAxLCAKLSAgICAzMDIwNywgMzAyMTMsIDMwMjE5LCAzMDIyNSwgMzAyMzEsIDMwMjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0MywgMzAyNDksIAotICAgIDMwMjU0LCAzMDI1OSwgMzAyNjQsIDMwMjY5LCAzMDI3NCwgMzAyNzksIDMwMjg0LCAzMDI4OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzAyOTQsIDMwMjk5LCAzMDMwNCwgMzAzMDksIDMwMzE0LCAzMDMxOSwgMzAzMjQsIDMwMzMzLCAzMDM0MCwgMzAzNDUsIAotICAgIDMwMzUwLCAzMDM1NSwgMzAzNjAsIDMwMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4OCwgMTgyOTEsIDE4Mjk1LCAxODI5OSwgMTgzMDMsIAorICAgIDE4MzA3LCAxODMxMSwgMTgzMTUsIDE4MzE5LCAxODMyMywgMTgzMjcsIDE4MzMxLCAxODMzNSwgMTgzMzksIDE4MzQzLCAKKyAgICAxODM0NywgMTgzNTEsIDE4MzU1LCAxODM1OSwgMTgzNjMsIDE4MzY3LCAxODM3MCwgMTgzNzMsIDE4Mzc3LCAxODM4MSwgCisgICAgMTgzODUsIDE4Mzg4LCAxODM5MSwgMTgzOTQsIDE4Mzk4LCAxODQwMiwgMTg0MDUsIDE4NDA4LCAxODQxMiwgMTg0MTUsIAorICAgIDE4NDIwLCAxODQyMywgMTg0MjcsIDE4NDMwLCAxODQzNCwgMTg0MzcsIDE4NDQyLCAxODQ0NSwgMTg0NDksIDE4NDU2LCAKKyAgICAxODQ2MSwgMTg0NjUsIDE4NDcwLCAxODQ3NCwgMTg0NzksIDE4NDgzLCAxODQ4OCwgMTg0OTUsIDE4NTAxLCAxODUwNiwgCisgICAgMTg1MTAsIDE4NTE0LCAxODUxOCwgMTg1MjIsIDE4NTI2LCAxODUzMSwgMTg1MzYsIDE4NTQyLCAxODU0NywgMTg1NTIsIAorICAgIDE4NTU2LCAxODU1OSwgMTg1NjIsIDE4NTY1LCAxODU2OCwgMTg1NzEsIDE4NTc0LCAxODU3NywgMTg1ODAsIDE4NTgzLCAKKyAgICAxODU4OSwgMTg1OTMsIDE4NTk3LCAxODYwMSwgMTg2MDUsIDE4NjA5LCAxODYxMywgMTg2MTcsIDE4NjIxLCAxODYyNiwgCisgICAgMTg2MzAsIDE4NjM1LCAxODY0MCwgMTg2NDYsIDE4NjUxLCAxODY1NywgMTg2NjMsIDE4NjY5LCAxODY3NSwgMTg2ODEsIAorICAgIDE4Njg4LCAxODY5NSwgMTg3MDMsIDE4NzExLCAxODcyMCwgMTg3MjksIDE4NzQwLCAxODc1MCwgMTg3NjAsIDE4NzcxLCAKKyAgICAxODc4MiwgMTg3OTIsIDE4ODAyLCAxODgxMiwgMTg4MjIsIDE4ODMyLCAxODg0MiwgMTg4NTIsIDE4ODYyLCAxODg3MCwgCisgICAgMTg4NzcsIDE4ODgzLCAxODg5MCwgMTg4OTUsIDE4OTAxLCAxODkwNywgMTg5MTMsIDE4OTE5LCAxODkyNSwgMTg5MzEsIAorICAgIDE4OTM2LCAxODk0MiwgMTg5NDgsIDE4OTU0LCAxODk2MCwgMTg5NjUsIDE4OTczLCAxODk4MCwgMTg5ODYsIDE4OTkzLCAKKyAgICAxOTAwMSwgMTkwMDcsIDE5MDEzLCAxOTAxOSwgMTkwMjUsIDE5MDMzLCAxOTA0MSwgMTkwNTEsIDE5MDU5LCAxOTA2NywgCisgICAgMTkwNzMsIDE5MDc4LCAxOTA4MywgMTkwODgsIDE5MDkzLCAxOTA5OCwgMTkxMDMsIDE5MTA4LCAxOTExMywgMTkxMTgsIAorICAgIDE5MTI0LCAxOTEzMCwgMTkxMzYsIDE5MTQzLCAxOTE0OCwgMTkxNTQsIDE5MTU5LCAxOTE2NCwgMTkxNjksIDE5MTc0LCAKKyAgICAxOTE3OSwgMTkxODQsIDE5MTg5LCAxOTE5NCwgMTkxOTksIDE5MjA0LCAxOTIwOSwgMTkyMTQsIDE5MjE5LCAxOTIyNCwgCisgICAgMTkyMjksIDE5MjM0LCAxOTIzOSwgMTkyNDQsIDE5MjQ5LCAxOTI1NCwgMTkyNTksIDE5MjY0LCAxOTI2OSwgMTkyNzQsIAorICAgIDE5Mjc5LCAxOTI4NCwgMTkyODksIDE5Mjk0LCAxOTI5OSwgMTkzMDQsIDE5MzA5LCAxOTMxNCwgMTkzMTksIDE5MzI0LCAKKyAgICAxOTMyOSwgMTkzMzQsIDE5MzM5LCAwLCAxOTM0NCwgMCwgMCwgMCwgMCwgMCwgMTkzNDksIDAsIDAsIDE5MzU0LCAxOTM1OCwgCisgICAgMTkzNjIsIDE5MzY2LCAxOTM3MCwgMTkzNzQsIDE5Mzc4LCAxOTM4MiwgMTkzODYsIDE5MzkwLCAxOTM5NCwgMTkzOTgsIAorICAgIDE5NDAyLCAxOTQwNiwgMTk0MTAsIDE5NDE0LCAxOTQxOCwgMTk0MjIsIDE5NDI2LCAxOTQzMCwgMTk0MzQsIDE5NDM4LCAKKyAgICAxOTQ0MiwgMTk0NDYsIDE5NDUwLCAxOTQ1NCwgMTk0NTgsIDE5NDYyLCAxOTQ2NiwgMTk0NzAsIDE5NDc0LCAxOTQ3OCwgCisgICAgMTk0ODIsIDE5NDg2LCAxOTQ5MCwgMTk0OTQsIDE5NDk4LCAxOTUwMiwgMTk1MDYsIDE5NTEwLCAxOTUxNCwgMTk1MTgsIAorICAgIDE5NTI0LCAxOTUyOCwgMTk1MzMsIDE5NTM4LCAxOTU0MiwgMTk1NDcsIDE5NTUyLCAxOTU1NiwgMTk1NjAsIDE5NTY0LCAKKyAgICAxOTU2OCwgMTk1NzIsIDE5NTc2LCAxOTU4MCwgMTk1ODQsIDE5NTg4LCAxOTU5MiwgMTk1OTYsIDE5NjAwLCAxOTYwNCwgCisgICAgMTk2MDgsIDE5NjEyLCAxOTYxNiwgMTk2MjAsIDE5NjI0LCAxOTYyOCwgMTk2MzIsIDE5NjM2LCAxOTY0MCwgMTk2NDQsIAorICAgIDE5NjQ4LCAxOTY1MiwgMTk2NTYsIDE5NjYwLCAxOTY2NCwgMTk2NjgsIDE5NjcyLCAxOTY3NiwgMTk2ODAsIDE5Njg0LCAKKyAgICAxOTY4OCwgMTk2OTIsIDE5Njk2LCAxOTcwMCwgMTk3MDQsIDE5NzA4LCAxOTcxMiwgMTk3MTYsIDE5NzIwLCAxOTcyNCwgCisgICAgMTk3MjgsIDE5NzMyLCAxOTczNiwgMTk3NDAsIDE5NzQ0LCAxOTc0OCwgMTk3NTIsIDE5NzU2LCAxOTc2MCwgMTk3NjQsIAorICAgIDE5NzY4LCAxOTc3MiwgMTk3NzYsIDE5NzgwLCAxOTc4NCwgMTk3ODgsIDE5NzkyLCAxOTc5NiwgMTk4MDAsIDE5ODA0LCAKKyAgICAxOTgwOCwgMTk4MTIsIDE5ODE2LCAxOTgyMCwgMTk4MjQsIDE5ODI4LCAxOTgzMiwgMTk4MzYsIDE5ODQwLCAxOTg0NCwgCisgICAgMTk4NDgsIDE5ODUyLCAxOTg1NiwgMTk4NjAsIDE5ODY0LCAxOTg2OCwgMTk4NzIsIDE5ODc2LCAxOTg4MCwgMTk4ODQsIAorICAgIDE5ODg4LCAxOTg5MiwgMTk4OTYsIDE5OTAwLCAxOTkwNCwgMTk5MDgsIDE5OTEyLCAxOTkxNiwgMTk5MjAsIDE5OTI0LCAKKyAgICAxOTkyOCwgMTk5MzIsIDE5OTM2LCAxOTk0MCwgMTk5NDMsIDE5OTQ3LCAxOTk1MCwgMTk5NTQsIDE5OTU4LCAxOTk2MSwgCisgICAgMTk5NjUsIDE5OTY5LCAxOTk3MiwgMTk5NzYsIDE5OTgwLCAxOTk4NCwgMTk5ODgsIDE5OTkxLCAxOTk5NSwgMTk5OTksIAorICAgIDIwMDAzLCAyMDAwNywgMjAwMTEsIDIwMDE1LCAyMDAxOCwgMjAwMjIsIDIwMDI2LCAyMDAzMCwgMjAwMzQsIDIwMDM4LCAKKyAgICAyMDA0MiwgMjAwNDYsIDIwMDUwLCAyMDA1NCwgMjAwNTgsIDIwMDYyLCAyMDA2NiwgMjAwNzAsIDIwMDc0LCAyMDA3OCwgCisgICAgMjAwODIsIDIwMDg2LCAyMDA5MCwgMjAwOTQsIDIwMDk4LCAyMDEwMiwgMjAxMDYsIDIwMTEwLCAyMDExNCwgMjAxMTgsIAorICAgIDIwMTIyLCAyMDEyNiwgMjAxMzAsIDIwMTM0LCAyMDEzOCwgMjAxNDIsIDIwMTQ2LCAyMDE1MCwgMjAxNTQsIDIwMTU4LCAKKyAgICAyMDE2MiwgMjAxNjYsIDIwMTcwLCAyMDE3NCwgMjAxNzgsIDIwMTgyLCAyMDE4NiwgMjAxOTAsIDIwMTk0LCAyMDE5OCwgCisgICAgMjAyMDIsIDIwMjA2LCAyMDIxMCwgMjAyMTQsIDIwMjE4LCAyMDIyMiwgMjAyMjYsIDIwMjMwLCAyMDIzNCwgMjAyMzgsIAorICAgIDIwMjQyLCAyMDI0NiwgMjAyNTAsIDIwMjU0LCAyMDI1OCwgMjAyNjIsIDIwMjY2LCAyMDI3MCwgMjAyNzQsIDIwMjc4LCAKKyAgICAyMDI4MiwgMjAyODYsIDIwMjkwLCAyMDI5NCwgMjAyOTgsIDIwMzAyLCAyMDMwNiwgMjAzMTAsIDIwMzE0LCAyMDMxOCwgCisgICAgMjAzMjIsIDIwMzI2LCAyMDMzMCwgMjAzMzQsIDIwMzM4LCAyMDM0MiwgMjAzNDYsIDIwMzUwLCAyMDM1NCwgMjAzNTgsIAorICAgIDIwMzYyLCAyMDM2NiwgMjAzNzAsIDIwMzc0LCAyMDM3OCwgMjAzODIsIDIwMzg2LCAyMDM5MCwgMjAzOTQsIDIwMzk4LCAKKyAgICAyMDQwMiwgMjA0MDYsIDIwNDEwLCAyMDQxNCwgMjA0MTgsIDIwNDIyLCAyMDQyNiwgMjA0MzAsIDIwNDM0LCAyMDQzOCwgCisgICAgMjA0NDIsIDIwNDQ2LCAyMDQ1MCwgMjA0NTQsIDIwNDU4LCAyMDQ2MiwgMjA0NjYsIDIwNDcwLCAyMDQ3NCwgMjA0NzgsIAorICAgIDIwNDgyLCAyMDQ4NiwgMjA0OTAsIDIwNDk0LCAyMDQ5OCwgMjA1MDIsIDIwNTA2LCAyMDUxMCwgMjA1MTQsIDIwNTE4LCAKKyAgICAyMDUyMiwgMjA1MjYsIDIwNTMwLCAyMDUzNCwgMjA1MzgsIDIwNTQyLCAyMDU0NiwgMjA1NTAsIDIwNTU0LCAyMDU1OCwgCisgICAgMjA1NjIsIDIwNTY2LCAyMDU3MCwgMjA1NzMsIDIwNTc3LCAyMDU4MSwgMjA1ODUsIDIwNTg5LCAyMDU5MywgMjA1OTcsIAorICAgIDIwNjAxLCAyMDYwNSwgMjA2MDksIDIwNjEzLCAyMDYxNywgMjA2MjEsIDIwNjI1LCAyMDYyOSwgMjA2MzMsIDIwNjM3LCAKKyAgICAyMDY0MSwgMjA2NDUsIDIwNjQ5LCAyMDY1MywgMjA2NTcsIDIwNjYxLCAyMDY2NSwgMjA2NjgsIDIwNjcyLCAyMDY3NiwgCisgICAgMjA2ODAsIDIwNjg0LCAyMDY4OCwgMjA2OTIsIDIwNjk2LCAyMDcwMCwgMjA3MDQsIDIwNzA4LCAyMDcxMiwgMjA3MTYsIAorICAgIDIwNzIwLCAyMDcyNCwgMjA3MjgsIDIwNzMxLCAyMDczNSwgMjA3MzksIDIwNzQzLCAyMDc0NywgMjA3NTEsIDIwNzU1LCAKKyAgICAyMDc1OSwgMjA3NjIsIDIwNzY2LCAyMDc3MCwgMjA3NzQsIDIwNzc4LCAyMDc4MiwgMjA3ODYsIDIwNzkwLCAyMDc5NCwgCisgICAgMjA3OTgsIDIwODAyLCAyMDgwNiwgMjA4MTAsIDIwODE0LCAyMDgxOCwgMjA4MjIsIDIwODI2LCAyMDgzMCwgMjA4MzQsIAorICAgIDIwODM4LCAyMDg0MiwgMjA4NDYsIDIwODUwLCAyMDg1NCwgMCwgMjA4NTgsIDIwODYyLCAyMDg2NiwgMjA4NzAsIDAsIDAsIAorICAgIDIwODc0LCAyMDg3OCwgMjA4ODIsIDIwODg2LCAyMDg5MCwgMjA4OTQsIDIwODk4LCAwLCAyMDkwMiwgMCwgMjA5MDYsIAorICAgIDIwOTEwLCAyMDkxNCwgMjA5MTgsIDAsIDAsIDIwOTIyLCAyMDkyNiwgMjA5MzAsIDIwOTM0LCAyMDkzOCwgMjA5NDIsIAorICAgIDIwOTQ2LCAyMDk1MCwgMjA5NTQsIDIwOTU4LCAyMDk2MiwgMjA5NjYsIDIwOTcwLCAyMDk3NCwgMjA5NzgsIDIwOTgyLCAKKyAgICAyMDk4NiwgMjA5OTAsIDIwOTk0LCAyMDk5OCwgMjEwMDIsIDIxMDA2LCAyMTAxMCwgMjEwMTMsIDIxMDE3LCAyMTAyMSwgCisgICAgMjEwMjUsIDIxMDI5LCAyMTAzMywgMjEwMzcsIDIxMDQxLCAyMTA0NSwgMjEwNDksIDIxMDUzLCAyMTA1NywgMjEwNjEsIAorICAgIDIxMDY1LCAyMTA2OSwgMjEwNzMsIDIxMDc3LCAyMTA4MSwgMCwgMjEwODUsIDIxMDg5LCAyMTA5MywgMjEwOTcsIDAsIDAsIAorICAgIDIxMTAxLCAyMTEwNCwgMjExMDgsIDIxMTEyLCAyMTExNiwgMjExMjAsIDIxMTI0LCAyMTEyOCwgMjExMzIsIDIxMTM2LCAKKyAgICAyMTE0MCwgMjExNDQsIDIxMTQ4LCAyMTE1MiwgMjExNTYsIDIxMTYwLCAyMTE2NCwgMjExNjksIDIxMTc0LCAyMTE3OSwgCisgICAgMjExODUsIDIxMTkxLCAyMTE5NiwgMjEyMDEsIDIxMjA3LCAyMTIxMCwgMjEyMTQsIDIxMjE4LCAyMTIyMiwgMjEyMjYsIAorICAgIDIxMjMwLCAyMTIzNCwgMjEyMzgsIDAsIDIxMjQyLCAyMTI0NiwgMjEyNTAsIDIxMjU0LCAwLCAwLCAyMTI1OCwgMjEyNjIsIAorICAgIDIxMjY2LCAyMTI3MCwgMjEyNzQsIDIxMjc4LCAyMTI4MiwgMCwgMjEyODYsIDAsIDIxMjkwLCAyMTI5NCwgMjEyOTgsIAorICAgIDIxMzAyLCAwLCAwLCAyMTMwNiwgMjEzMTAsIDIxMzE0LCAyMTMxOCwgMjEzMjIsIDIxMzI2LCAyMTMzMCwgMjEzMzQsIAorICAgIDIxMzM4LCAyMTM0MywgMjEzNDgsIDIxMzUzLCAyMTM1OSwgMjEzNjUsIDIxMzcwLCAwLCAyMTM3NSwgMjEzNzksIDIxMzgzLCAKKyAgICAyMTM4NywgMjEzOTEsIDIxMzk1LCAyMTM5OSwgMjE0MDMsIDIxNDA3LCAyMTQxMSwgMjE0MTUsIDIxNDE5LCAyMTQyMywgCisgICAgMjE0MjcsIDIxNDMxLCAyMTQzNSwgMjE0MzksIDIxNDQyLCAyMTQ0NiwgMjE0NTAsIDIxNDU0LCAyMTQ1OCwgMjE0NjIsIAorICAgIDIxNDY2LCAyMTQ3MCwgMjE0NzQsIDIxNDc4LCAyMTQ4MiwgMjE0ODYsIDIxNDkwLCAyMTQ5NCwgMjE0OTgsIDIxNTAyLCAKKyAgICAyMTUwNiwgMjE1MTAsIDIxNTE0LCAyMTUxOCwgMjE1MjIsIDIxNTI2LCAyMTUzMCwgMjE1MzQsIDIxNTM4LCAyMTU0MiwgCisgICAgMjE1NDYsIDIxNTUwLCAyMTU1NCwgMjE1NTgsIDIxNTYyLCAyMTU2NiwgMjE1NzAsIDIxNTc0LCAyMTU3OCwgMjE1ODIsIAorICAgIDIxNTg2LCAyMTU5MCwgMjE1OTQsIDIxNTk4LCAwLCAyMTYwMiwgMjE2MDYsIDIxNjEwLCAyMTYxNCwgMCwgMCwgMjE2MTgsIAorICAgIDIxNjIyLCAyMTYyNiwgMjE2MzAsIDIxNjM0LCAyMTYzOCwgMjE2NDIsIDIxNjQ2LCAyMTY1MCwgMjE2NTQsIDIxNjU4LCAKKyAgICAyMTY2MiwgMjE2NjYsIDIxNjcwLCAyMTY3NCwgMjE2NzgsIDIxNjgyLCAyMTY4NiwgMjE2OTAsIDIxNjk0LCAyMTY5OCwgCisgICAgMjE3MDIsIDIxNzA2LCAyMTcxMCwgMjE3MTQsIDIxNzE4LCAyMTcyMiwgMjE3MjYsIDIxNzMwLCAyMTczNCwgMjE3MzgsIAorICAgIDIxNzQyLCAyMTc0NiwgMjE3NTAsIDIxNzU0LCAyMTc1OCwgMjE3NjIsIDIxNzY2LCAyMTc3MCwgMjE3NzQsIDIxNzc4LCAKKyAgICAyMTc4MiwgMjE3ODYsIDIxNzkwLCAyMTc5NCwgMjE3OTgsIDIxODAyLCAyMTgwNiwgMjE4MTAsIDIxODE0LCAyMTgxOCwgCisgICAgMjE4MjIsIDIxODI2LCAyMTgzMCwgMjE4MzQsIDIxODM4LCAyMTg0MiwgMjE4NDUsIDIxODQ5LCAyMTg1MywgMjE4NTcsIAorICAgIDIxODYxLCAyMTg2NSwgMjE4NjksIDIxODczLCAyMTg3NywgMjE4ODEsIDAsIDAsIDIxODg1LCAyMTg5NCwgMjE5MDAsIAorICAgIDIxOTA1LCAyMTkwOSwgMjE5MTIsIDIxOTE3LCAyMTkyMCwgMjE5MjMsIDIxOTI2LCAyMTkzMSwgMjE5MzUsIDIxOTQwLCAKKyAgICAyMTk0MywgMjE5NDYsIDIxOTQ5LCAyMTk1MiwgMjE5NTUsIDIxOTU4LCAyMTk2MSwgMjE5NjQsIDIxOTY3LCAyMTk3MSwgCisgICAgMjE5NzUsIDIxOTc5LCAyMTk4MywgMjE5ODcsIDIxOTkxLCAyMTk5NSwgMjE5OTksIDIyMDAzLCAyMjAwNywgMCwgMCwgMCwgCisgICAgMjIwMTMsIDIyMDE5LCAyMjAyMywgMjIwMjcsIDIyMDMxLCAyMjAzNywgMjIwNDEsIDIyMDQ1LCAyMjA0OSwgMjIwNTUsIAorICAgIDIyMDU5LCAyMjA2MywgMjIwNjcsIDIyMDczLCAyMjA3NywgMjIwODEsIDIyMDg1LCAyMjA5MSwgMjIwOTcsIDIyMTAzLCAKKyAgICAyMjExMSwgMjIxMTcsIDIyMTIzLCAyMjEyOSwgMjIxMzUsIDIyMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NywgMjIxNTAsIAorICAgIDIyMTUzLCAyMjE1NiwgMjIxNTksIDIyMTYyLCAyMjE2NiwgMjIxNzAsIDIyMTczLCAyMjE3NywgMjIxODEsIDIyMTg1LCAKKyAgICAyMjE4OSwgMjIxOTMsIDIyMTk2LCAyMjIwMCwgMjIyMDQsIDIyMjA4LCAyMjIxMiwgMjIyMTYsIDIyMjIwLCAyMjIyNCwgCisgICAgMjIyMjgsIDIyMjMyLCAyMjIzNiwgMjIyNDAsIDIyMjQzLCAyMjI0NywgMjIyNTEsIDIyMjU1LCAyMjI1OSwgMjIyNjIsIAorICAgIDIyMjY2LCAyMjI3MCwgMjIyNzQsIDIyMjc4LCAyMjI4MiwgMjIyODYsIDIyMjkwLCAyMjI5NCwgMjIyOTgsIDIyMzAyLCAKKyAgICAyMjMwNiwgMjIzMTAsIDIyMzE0LCAyMjMxNywgMjIzMjEsIDIyMzI1LCAyMjMyOSwgMjIzMzMsIDIyMzM3LCAyMjM0MSwgCisgICAgMjIzNDUsIDIyMzQ5LCAyMjM1MywgMjIzNTcsIDIyMzYxLCAyMjM2NSwgMjIzNjksIDIyMzczLCAyMjM3NywgMjIzODEsIAorICAgIDIyMzg1LCAyMjM4OSwgMjIzOTMsIDIyMzk3LCAyMjQwMSwgMjI0MDUsIDIyNDA5LCAyMjQxMywgMjI0MTcsIDIyNDIxLCAKKyAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTMsIDIyNDU2LCAyMjQ2MCwgCisgICAgMjI0NjQsIDIyNDY4LCAyMjQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzYsIDIyNDgwLCAKKyAgICAyMjQ4MywgMjI0ODcsIDIyNDkwLCAyMjQ5NCwgMjI0OTcsIDIyNTAxLCAyMjUwNywgMjI1MTIsIDIyNTE2LCAyMjUxOSwgCisgICAgMjI1MjMsIDIyNTI3LCAyMjUzMiwgMjI1MzYsIDIyNTQxLCAyMjU0NSwgMjI1NTAsIDIyNTU0LCAyMjU1OSwgMjI1NjMsIAorICAgIDIyNTY4LCAyMjU3NCwgMjI1NzgsIDIyNTgzLCAyMjU4NywgMjI1OTIsIDIyNTk4LCAyMjYwMiwgMjI2MDgsIDIyNjE0LCAKKyAgICAyMjYxOCwgMjI2MjMsIDIyNjMxLCAyMjYzOSwgMjI2NDYsIDIyNjUxLCAyMjY1NiwgMjI2NjUsIDIyNjcyLCAyMjY3OSwgCisgICAgMjI2ODQsIDIyNjkwLCAyMjY5NCwgMjI2OTgsIDIyNzAyLCAyMjcwNiwgMjI3MTAsIDIyNzE0LCAyMjcxOCwgMjI3MjIsIAorICAgIDIyNzI2LCAyMjczMCwgMjI3MzYsIDIyNzQxLCAyMjc0NiwgMjI3NDksIDIyNzUzLCAyMjc1NywgMjI3NjIsIDIyNzY2LCAKKyAgICAyMjc3MSwgMjI3NzUsIDIyNzgwLCAyMjc4NCwgMjI3ODksIDIyNzkzLCAyMjc5OCwgMjI4MDIsIDIyODA3LCAyMjgxMSwgCisgICAgMjI4MTYsIDIyODIyLCAyMjgyNiwgMjI4MzEsIDIyODM2LCAyMjg0MCwgMjI4NDQsIDIyODQ4LCAyMjg1MiwgMjI4NTUsIAorICAgIDIyODU5LCAyMjg2NSwgMjI4NzAsIDIyODc1LCAyMjg3OSwgMjI4ODMsIDIyODg3LCAyMjg5MiwgMjI4OTYsIDIyOTAxLCAKKyAgICAyMjkwNSwgMjI5MTAsIDIyOTEzLCAyMjkxNywgMjI5MjEsIDIyOTI2LCAyMjkzMCwgMjI5MzUsIDIyOTM5LCAyMjk0NCwgCisgICAgMjI5NTAsIDIyOTU0LCAyMjk1OCwgMjI5NjIsIDIyOTY2LCAyMjk3MCwgMjI5NzQsIDIyOTc4LCAyMjk4MiwgMjI5ODYsIAorICAgIDIyOTkwLCAyMjk5NCwgMjMwMDAsIDIzMDAzLCAyMzAwNywgMjMwMTEsIDIzMDE2LCAyMzAyMCwgMjMwMjUsIDIzMDI5LCAKKyAgICAyMzAzNCwgMjMwMzgsIDIzMDQzLCAyMzA0NywgMjMwNTIsIDIzMDU2LCAyMzA2MSwgMjMwNjUsIDIzMDcwLCAyMzA3NiwgCisgICAgMjMwODAsIDIzMDg0LCAyMzA5MCwgMjMwOTYsIDIzMTAyLCAyMzEwOCwgMjMxMTIsIDIzMTE2LCAyMzEyMCwgMjMxMjQsIAorICAgIDIzMTI4LCAyMzEzMiwgMjMxMzgsIDIzMTQyLCAyMzE0NiwgMjMxNTAsIDIzMTU1LCAyMzE1OSwgMjMxNjQsIDIzMTY4LCAKKyAgICAyMzE3MywgMjMxNzcsIDIzMTgyLCAyMzE4NiwgMjMxOTEsIDIzMTk1LCAyMzIwMCwgMjMyMDQsIDIzMjA5LCAyMzIxNSwgCisgICAgMjMyMTksIDIzMjI1LCAyMzIyOSwgMjMyMzMsIDIzMjM3LCAyMzI0MSwgMjMyNDUsIDIzMjQ5LCAyMzI1NSwgMjMyNTgsIAorICAgIDIzMjYyLCAyMzI2NiwgMjMyNzEsIDIzMjc1LCAyMzI4MCwgMjMyODQsIDIzMjg5LCAyMzI5MywgMjMyOTgsIDIzMzAyLCAKKyAgICAyMzMwNywgMjMzMTEsIDIzMzE2LCAyMzMyMCwgMjMzMjUsIDIzMzMxLCAyMzMzNCwgMjMzMzgsIDIzMzQyLCAyMzM0NywgCisgICAgMjMzNTIsIDIzMzU2LCAyMzM2MCwgMjMzNjQsIDIzMzY4LCAyMzM3MiwgMjMzNzYsIDIzMzgyLCAyMzM4NSwgMjMzODksIAorICAgIDIzMzkzLCAyMzM5OCwgMjM0MDIsIDIzNDA3LCAyMzQxMSwgMjM0MTYsIDIzNDIyLCAyMzQyNiwgMjM0MzEsIDIzNDM1LCAKKyAgICAyMzQzOSwgMjM0NDMsIDIzNDQ3LCAyMzQ1MSwgMjM0NTUsIDIzNDU5LCAyMzQ2NSwgMjM0NjksIDIzNDczLCAyMzQ3NywgCisgICAgMjM0ODIsIDIzNDg2LCAyMzQ5MSwgMjM0OTUsIDIzNTAwLCAyMzUwNCwgMjM1MDksIDIzNTEzLCAyMzUxOCwgMjM1MjIsIAorICAgIDIzNTI3LCAyMzUzMSwgMjM1MzYsIDIzNTM5LCAyMzU0MywgMjM1NDcsIDIzNTUxLCAyMzU1NSwgMjM1NTksIDIzNTYzLCAKKyAgICAyMzU2NywgMjM1NzEsIDIzNTc3LCAyMzU4MCwgMjM1ODQsIDIzNTg4LCAyMzU5MywgMjM1OTcsIDIzNjAyLCAyMzYwNiwgCisgICAgMjM2MTEsIDIzNjE1LCAyMzYyMCwgMjM2MjQsIDIzNjI5LCAyMzYzMywgMjM2MzgsIDIzNjQyLCAyMzY0NywgMjM2NTMsIAorICAgIDIzNjU3LCAyMzY2MywgMjM2NjcsIDIzNjczLCAyMzY3OSwgMjM2ODUsIDIzNjkxLCAyMzY5NywgMjM3MDMsIDIzNzA5LCAKKyAgICAyMzcxNSwgMjM3MTksIDIzNzIzLCAyMzcyNywgMjM3MzEsIDIzNzM1LCAyMzczOSwgMjM3NDMsIDIzNzQ3LCAyMzc1MiwgCisgICAgMjM3NTYsIDIzNzYxLCAyMzc2NSwgMjM3NzAsIDIzNzc0LCAyMzc3OSwgMjM3ODMsIDIzNzg4LCAyMzc5MiwgMjM3OTcsIAorICAgIDIzODAxLCAyMzgwNiwgMjM4MTAsIDIzODE0LCAyMzgxOCwgMjM4MjIsIDIzODI2LCAyMzgzMCwgMjM4MzQsIDIzODQwLCAKKyAgICAyMzg0MywgMjM4NDcsIDIzODUxLCAyMzg1NiwgMjM4NjAsIDIzODY1LCAyMzg2OSwgMjM4NzQsIDIzODc4LCAyMzg4MywgCisgICAgMjM4ODcsIDIzODkyLCAyMzg5NiwgMjM5MDEsIDIzOTA1LCAyMzkxMCwgMjM5MTYsIDIzOTIwLCAyMzkyNiwgMjM5MzEsIAorICAgIDIzOTM3LCAyMzk0MSwgMjM5NDcsIDIzOTUyLCAyMzk1NiwgMjM5NjAsIDIzOTY0LCAyMzk2OCwgMjM5NzIsIDIzOTc3LCAKKyAgICAyMzk4MCwgMjM5ODQsIDIzOTg5LCAyMzk5MywgMjM5OTgsIDI0MDAxLCAyNDAwNSwgMjQwMDksIDI0MDEzLCAyNDAxNywgCisgICAgMjQwMjEsIDI0MDI1LCAyNDAyOSwgMjQwMzMsIDI0MDM3LCAyNDA0MSwgMjQwNDUsIDI0MDUwLCAyNDA1NCwgMjQwNTgsIAorICAgIDI0MDY0LCAyNDA2OCwgMjQwNzQsIDI0MDc4LCAyNDA4NCwgMjQwODgsIDI0MDkyLCAyNDA5NiwgMjQxMDAsIDI0MTA0LCAKKyAgICAyNDEwOSwgMjQxMTMsIDI0MTE3LCAyNDEyMSwgMjQxMjUsIDI0MTI5LCAyNDEzMywgMjQxMzcsIDI0MTQxLCAyNDE0NSwgCisgICAgMjQxNDksIDI0MTU1LCAyNDE2MSwgMjQxNjcsIDI0MTczLCAyNDE3OSwgMjQxODQsIDI0MTkwLCAyNDE5NiwgMjQyMDIsIAorICAgIDI0MjA2LCAyNDIxMCwgMjQyMTQsIDI0MjE4LCAyNDIyMiwgMjQyMjYsIDI0MjMwLCAyNDIzNCwgMjQyMzgsIDI0MjQyLCAKKyAgICAyNDI0NiwgMjQyNTAsIDI0MjU0LCAyNDI1OSwgMjQyNjQsIDI0MjY5LCAyNDI3MywgMjQyNzcsIDI0MjgxLCAyNDI4NSwgCisgICAgMjQyODksIDI0MjkzLCAyNDI5NywgMjQzMDEsIDI0MzA1LCAyNDMwOSwgMjQzMTUsIDI0MzIxLCAyNDMyNywgMjQzMzMsIAorICAgIDI0MzM5LCAyNDM0NSwgMjQzNTEsIDI0MzU3LCAyNDM2MywgMjQzNjcsIDI0MzcxLCAyNDM3NSwgMjQzNzksIDI0MzgzLCAKKyAgICAyNDM4NywgMjQzOTEsIDI0Mzk3LCAyNDQwMywgMjQ0MDksIDI0NDE1LCAyNDQyMSwgMjQ0MjcsIDI0NDMzLCAyNDQzOSwgCisgICAgMjQ0NDUsIDI0NDUwLCAyNDQ1NSwgMjQ0NjAsIDI0NDY1LCAyNDQ3MSwgMjQ0NzcsIDI0NDgzLCAyNDQ4OSwgMjQ0OTUsIAorICAgIDI0NTAxLCAyNDUwNywgMjQ1MTIsIDI0NTE4LCAyNDUyNCwgMjQ1MzAsIDI0NTM1LCAyNDU0MSwgMjQ1NDcsIDI0NTUzLCAKKyAgICAyNDU1OCwgMjQ1NjMsIDI0NTY4LCAyNDU3MywgMjQ1NzgsIDI0NTgzLCAyNDU4OCwgMjQ1OTMsIDI0NTk4LCAyNDYwMywgCisgICAgMjQ2MDgsIDI0NjEzLCAyNDYxNywgMjQ2MjIsIDI0NjI3LCAyNDYzMiwgMjQ2MzcsIDI0NjQyLCAyNDY0NywgMjQ2NTIsIAorICAgIDI0NjU3LCAyNDY2MiwgMjQ2NjcsIDI0NjcyLCAyNDY3NywgMjQ2ODIsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAyLCAKKyAgICAyNDcwNywgMjQ3MTIsIDI0NzE3LCAyNDcyMiwgMjQ3MjcsIDI0NzMyLCAyNDczNywgMjQ3NDIsIDI0NzQ3LCAyNDc1MiwgCisgICAgMjQ3NTcsIDI0NzYyLCAyNDc2NiwgMjQ3NzEsIDI0Nzc2LCAyNDc4MSwgMjQ3ODYsIDI0NzkxLCAyNDc5NiwgMjQ4MDEsIAorICAgIDI0ODA2LCAyNDgxMSwgMjQ4MTYsIDI0ODIxLCAyNDgyNiwgMjQ4MzEsIDI0ODM2LCAyNDg0MSwgMjQ4NDYsIDI0ODUxLCAKKyAgICAyNDg1NiwgMjQ4NjEsIDI0ODY2LCAyNDg3MSwgMjQ4NzYsIDI0ODgxLCAyNDg4NiwgMjQ4OTEsIDI0ODk1LCAyNDkwMCwgCisgICAgMjQ5MDUsIDI0OTEwLCAyNDkxNSwgMjQ5MjAsIDI0OTI0LCAyNDkyOSwgMjQ5MzQsIDI0OTM5LCAyNDk0NCwgMjQ5NDksIAorICAgIDI0OTUzLCAyNDk1OCwgMjQ5NjQsIDI0OTY5LCAyNDk3NCwgMjQ5NzksIDI0OTg0LCAyNDk5MCwgMjQ5OTUsIDI1MDAwLCAKKyAgICAyNTAwNSwgMjUwMTAsIDI1MDE1LCAyNTAyMCwgMjUwMjUsIDI1MDMwLCAyNTAzNSwgMjUwNDAsIDI1MDQ1LCAyNTA1MCwgCisgICAgMjUwNTUsIDI1MDYwLCAyNTA2NSwgMjUwNzAsIDI1MDc1LCAyNTA4MCwgMjUwODUsIDI1MDkwLCAyNTA5NSwgMjUxMDAsIAorICAgIDI1MTA1LCAyNTExMCwgMjUxMTUsIDI1MTIwLCAyNTEyNSwgMjUxMzAsIDI1MTM1LCAyNTE0MCwgMjUxNDUsIDI1MTUwLCAKKyAgICAyNTE1NSwgMjUxNjAsIDI1MTY1LCAyNTE3MCwgMjUxNzUsIDI1MTgwLCAyNTE4NSwgMjUxOTAsIDI1MTk1LCAyNTIwMCwgCisgICAgMjUyMDUsIDI1MjEwLCAyNTIxNiwgMjUyMjEsIDI1MjI2LCAyNTIzMSwgMjUyMzYsIDI1MjQxLCAyNTI0NiwgMjUyNTEsIAorICAgIDI1MjU2LCAyNTI2MSwgMjUyNjYsIDI1MjcxLCAyNTI3NSwgMjUyODAsIDI1Mjg1LCAyNTI5MCwgMjUyOTUsIDI1MzAwLCAKKyAgICAyNTMwNSwgMjUzMTAsIDI1MzE1LCAyNTMyMCwgMjUzMjUsIDI1MzMwLCAyNTMzNSwgMjUzNDAsIDI1MzQ1LCAyNTM1MCwgCisgICAgMjUzNTUsIDI1MzYwLCAyNTM2NSwgMjUzNzAsIDI1Mzc1LCAyNTM4MCwgMjUzODUsIDI1MzkwLCAyNTM5NSwgMjU0MDAsIAorICAgIDI1NDA1LCAyNTQxMSwgMjU0MTUsIDI1NDE5LCAyNTQyMywgMjU0MjcsIDI1NDMxLCAyNTQzNSwgMjU0MzksIDI1NDQzLCAKKyAgICAyNTQ0OSwgMjU0NTUsIDI1NDYxLCAyNTQ2NywgMjU0NzMsIDI1NDc5LCAyNTQ4NSwgMjU0OTIsIDI1NDk4LCAyNTUwMywgCisgICAgMjU1MDgsIDI1NTEzLCAyNTUxOCwgMjU1MjMsIDI1NTI4LCAyNTUzMywgMjU1MzgsIDI1NTQzLCAyNTU0OCwgMjU1NTMsIAorICAgIDI1NTU4LCAyNTU2MywgMjU1NjgsIDI1NTczLCAyNTU3OCwgMjU1ODMsIDI1NTg4LCAyNTU5MywgMjU1OTgsIDI1NjAzLCAKKyAgICAyNTYwOCwgMjU2MTMsIDI1NjE4LCAyNTYyMywgMjU2MjgsIDI1NjMzLCAyNTYzOCwgMCwgMCwgMCwgMjU2NDUsIDI1NjU1LCAKKyAgICAyNTY1OSwgMjU2NjYsIDI1NjcwLCAyNTY3NCwgMjU2NzgsIDI1Njg2LCAyNTY5MCwgMjU2OTUsIDI1NzAwLCAyNTcwNSwgCisgICAgMjU3MDksIDI1NzE0LCAyNTcxOSwgMjU3MjIsIDI1NzI2LCAyNTczMCwgMjU3MzksIDI1NzQzLCAyNTc0NywgMjU3NTMsIAorICAgIDI1NzU3LCAyNTc2MSwgMjU3NjksIDI1NzczLCAyNTc4MSwgMjU3ODcsIDI1NzkzLCAyNTc5OSwgMjU4MDUsIDI1ODE1LCAKKyAgICAyNTgyMSwgMjU4MjUsIDI1ODM0LCAyNTgzNywgMjU4NDMsIDI1ODQ3LCAyNTg1MywgMjU4NTgsIDI1ODY0LCAyNTg3MiwgCisgICAgMjU4NzgsIDI1ODg0LCAyNTg5MiwgMjU4OTgsIDI1OTAyLCAyNTkwNiwgMjU5MTYsIDI1OTIyLCAyNTkyNiwgMjU5MzYsIAorICAgIDI1OTQyLCAyNTk0NiwgMjU5NTAsIDI1OTU3LCAyNTk2NCwgMjU5NjksIDI1OTc0LCAyNTk4MywgMjU5ODcsIDI1OTkxLCAKKyAgICAyNTk5NSwgMjYwMDMsIDI2MDEwLCAyNjAxNCwgMjYwMTgsIDI2MDIyLCAyNjAyNiwgMjYwMzAsIDI2MDM0LCAyNjAzOCwgCisgICAgMjYwNDIsIDI2MDQ2LCAyNjA1MCwgMjYwNTQsIDI2MDU5LCAyNjA2NCwgMjYwNjksIDI2MDczLCAyNjA3NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwODEsIDI2MDg1LCAyNjA4OSwgMjYwOTMsIDI2MDk3LCAKKyAgICAyNjEwMiwgMjYxMDcsIDI2MTEyLCAyNjExNywgMjYxMjEsIDI2MTI1LCAyNjEzMCwgMjYxMzQsIDAsIDI2MTM4LCAyNjE0MywgCisgICAgMjYxNDgsIDI2MTUyLCAyNjE1NiwgMjYxNjEsIDI2MTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNjE3MSwgMjYxNzUsIDI2MTc5LCAyNjE4MywgMjYxODcsIDI2MTkyLCAyNjE5NywgMjYyMDIsIDI2MjA3LCAyNjIxMSwgCisgICAgMjYyMTUsIDI2MjIwLCAyNjIyNCwgMjYyMjgsIDI2MjMyLCAyNjIzNywgMjYyNDIsIDI2MjQ2LCAyNjI1MCwgMjYyNTUsIAorICAgIDI2MjYwLCAyNjI2NSwgMjYyNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2Mjc2LCAyNjI4MCwgMjYyODQsIAorICAgIDI2Mjg4LCAyNjI5MiwgMjYyOTcsIDI2MzAyLCAyNjMwNywgMjYzMTIsIDI2MzE2LCAyNjMyMCwgMjYzMjUsIDI2MzI5LCAKKyAgICAyNjMzMywgMjYzMzcsIDI2MzQyLCAyNjM0NywgMjYzNTEsIDI2MzU1LCAyNjM2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjYzNjUsIDI2MzY5LCAyNjM3MywgMjYzNzcsIDI2MzgxLCAyNjM4NiwgMjYzOTEsIDI2Mzk2LCAKKyAgICAyNjQwMSwgMjY0MDUsIDI2NDA5LCAyNjQxNCwgMjY0MTgsIDAsIDI2NDIyLCAyNjQyNywgMjY0MzIsIDAsIDI2NDM2LCAKKyAgICAyNjQ0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDYsIDI2NDQ5LCAyNjQ1MywgMjY0NTcsIAorICAgIDI2NDYxLCAyNjQ2NSwgMjY0NjksIDI2NDczLCAyNjQ3NywgMjY0ODEsIDI2NDg1LCAyNjQ4OSwgMjY0OTMsIDI2NDk3LCAKKyAgICAyNjUwMSwgMjY1MDUsIDI2NTA5LCAyNjUxMywgMjY1MTYsIDI2NTIwLCAyNjUyNCwgMjY1MjgsIDI2NTMyLCAyNjUzNiwgCisgICAgMjY1NDAsIDI2NTQ0LCAyNjU0OCwgMjY1NTIsIDI2NTU2LCAyNjU2MCwgMjY1NjQsIDI2NTY4LCAyNjU3MSwgMjY1NzQsIAorICAgIDI2NTc4LCAyNjU4MiwgMjY1ODgsIDI2NTk0LCAyNjYwMCwgMjY2MDYsIDI2NjEyLCAyNjYxOCwgMjY2MjQsIDI2NjMwLCAKKyAgICAyNjYzNiwgMjY2NDIsIDI2NjQ4LCAyNjY1NCwgMjY2NjAsIDI2NjY2LCAyNjY3NSwgMjY2ODQsIDI2NjkwLCAyNjY5NiwgCisgICAgMjY3MDIsIDI2NzA3LCAyNjcxMSwgMjY3MTYsIDI2NzIxLCAyNjcyNiwgMjY3MzAsIDI2NzM1LCAyNjc0MCwgMjY3NDUsIAorICAgIDI2NzQ5LCAyNjc1NCwgMjY3NTgsIDI2NzYzLCAyNjc2OCwgMjY3NzMsIDI2Nzc4LCAyNjc4MiwgMjY3ODYsIDI2NzkwLCAKKyAgICAyNjc5NCwgMjY3OTgsIDI2ODAyLCAyNjgwNiwgMjY4MTAsIDI2ODE0LCAyNjgxOCwgMjY4MjQsIDI2ODI4LCAyNjgzMiwgCisgICAgMjY4MzYsIDI2ODQwLCAyNjg0NCwgMjY4NTIsIDI2ODU4LCAyNjg2MiwgMjY4NjgsIDI2ODcyLCAyNjg3OCwgMjY4ODIsIDAsIAorICAgIDAsIDI2ODg2LCAyNjg5MCwgMjY4OTMsIDI2ODk2LCAyNjg5OSwgMjY5MDIsIDI2OTA1LCAyNjkwOCwgMjY5MTEsIDI2OTE0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNywgMjY5MjUsIDI2OTMzLCAyNjk0MSwgMjY5NDksIDI2OTU3LCAyNjk2NSwgMjY5NzMsIAorICAgIDI2OTgxLCAyNjk4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTcsIDI3MDAwLCAyNzAwMywgMjcwMDYsIDI3MDExLCAyNzAxNCwgCisgICAgMjcwMTksIDI3MDI2LCAyNzAzNCwgMjcwMzksIDI3MDQ2LCAyNzA0OSwgMjcwNTYsIDI3MDYzLCAyNzA3MCwgMCwgMjcwNzQsIAorICAgIDI3MDc4LCAyNzA4MSwgMjcwODQsIDI3MDg3LCAyNzA5MCwgMjcwOTMsIDI3MDk2LCAyNzA5OSwgMjcxMDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI3MTA1LCAyNzEwOCwgMjcxMTEsIDI3MTE0LCAyNzExNywgMjcxMjAsIDI3MTI0LCAyNzEyOCwgMjcxMzIsIAorICAgIDI3MTM1LCAyNzEzOSwgMjcxNDMsIDI3MTQ2LCAyNzE1MCwgMjcxNTQsIDI3MTU3LCAyNzE2MSwgMjcxNjQsIDI3MTY4LCAKKyAgICAyNzE3MiwgMjcxNzYsIDI3MTgwLCAyNzE4NCwgMjcxODcsIDI3MTkwLCAyNzE5NCwgMjcxOTgsIDI3MjAxLCAyNzIwNSwgCisgICAgMjcyMDksIDI3MjEzLCAyNzIxNywgMjcyMjEsIDI3MjI1LCAyNzIyOSwgMjcyMzMsIDI3MjQwLCAyNzI0NSwgMjcyNTAsIAorICAgIDI3MjU1LCAyNzI2MCwgMjcyNjYsIDI3MjcyLCAyNzI3OCwgMjcyODQsIDI3Mjg5LCAyNzI5NSwgMjczMDEsIDI3MzA2LCAKKyAgICAyNzMxMiwgMjczMTgsIDI3MzI0LCAyNzMzMCwgMjczMzYsIDI3MzQxLCAyNzM0NywgMjczNTIsIDI3MzU4LCAyNzM2NCwgCisgICAgMjczNzAsIDI3Mzc2LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5OCwgMjc0MDQsIDI3NDA5LCAyNzQxNSwgMjc0MjAsIAorICAgIDI3NDI2LCAyNzQzMSwgMjc0MzYsIDI3NDQyLCAyNzQ0OCwgMjc0NTQsIDI3NDYwLCAyNzQ2NiwgMjc0NzIsIDI3NDc4LCAKKyAgICAyNzQ4NCwgMjc0OTAsIDI3NDk2LCAyNzUwMiwgMjc1MDgsIDI3NTEzLCAyNzUxOCwgMjc1MjMsIDI3NTI5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyNzUzNSwgMjc1NDQsIDI3NTUzLCAyNzU2MSwgMjc1NjksIDI3NTc5LCAyNzU4NywgMjc1OTYsIAorICAgIDI3NjAzLCAyNzYxMCwgMjc2MTcsIDI3NjI1LCAyNzYzMywgMjc2NDEsIDI3NjQ5LCAyNzY1NywgMjc2NjUsIDI3NjczLCAKKyAgICAyNzY4MSwgMjc2ODgsIDI3Njk2LCAyNzcwNCwgMjc3MTIsIDI3NzIwLCAyNzcyOCwgMjc3MzgsIDI3NzQ4LCAyNzc1OCwgCisgICAgMjc3NjgsIDI3Nzc4LCAyNzc4OCwgMjc3OTgsIDI3ODA4LCAyNzgxOCwgMjc4MjgsIDI3ODM4LCAyNzg0OCwgMjc4NTgsIAorICAgIDI3ODY4LCAyNzg3NiwgMjc4ODQsIDI3ODk0LCAyNzkwMiwgMCwgMCwgMCwgMCwgMCwgMjc5MTIsIDI3OTE2LCAyNzkyMCwgCisgICAgMjc5MjQsIDI3OTI4LCAyNzkzMiwgMjc5MzYsIDI3OTQwLCAyNzk0NCwgMjc5NDgsIDI3OTUyLCAyNzk1NiwgMjc5NjAsIAorICAgIDI3OTY0LCAyNzk2OCwgMjc5NzIsIDI3OTc2LCAyNzk4MCwgMjc5ODQsIDI3OTg4LCAyNzk5MiwgMjc5OTYsIDI4MDAwLCAKKyAgICAyODAwNCwgMjgwMTAsIDI4MDE0LCAyODAyMCwgMjgwMjQsIDI4MDMwLCAyODAzNCwgMjgwNDAsIDI4MDQ0LCAyODA0OCwgCisgICAgMjgwNTIsIDI4MDU2LCAyODA2MCwgMjgwNjQsIDI4MDcwLCAyODA3NiwgMjgwODIsIDI4MDg4LCAyODA5MywgMjgwOTksIAorICAgIDI4MTA1LCAyODExMSwgMjgxMTcsIDI4MTIzLCAyODEyOSwgMjgxMzYsIDI4MTQyLCAyODE0NywgMjgxNTIsIDI4MTU2LCAKKyAgICAyODE2MCwgMjgxNjQsIDI4MTY4LCAyODE3MiwgMjgxNzYsIDI4MTgwLCAyODE4NiwgMjgxOTIsIDI4MTk4LCAyODIwMywgCisgICAgMjgyMTAsIDI4MjE1LCAyODIyMCwgMjgyMjYsIDI4MjMxLCAyODIzOCwgMjgyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDI4MjUyLCAyODI1OCwgMjgyNjIsIDI4MjY3LCAyODI3MiwgMjgyNzcsIDI4MjgyLCAyODI4NywgMjgyOTIsIAorICAgIDI4Mjk3LCAyODMwMiwgMjgzMDcsIDI4MzEyLCAyODMxNywgMjgzMjIsIDI4MzI3LCAyODMzMSwgMjgzMzUsIDI4MzQwLCAKKyAgICAyODM0NSwgMjgzNTAsIDI4MzU0LCAyODM1OCwgMjgzNjIsIDI4MzY3LCAyODM3MiwgMjgzNzcsIDI4MzgyLCAyODM4NiwgMCwgCisgICAgMCwgMCwgMjgzOTAsIDI4Mzk1LCAyODQwMCwgMjg0MDUsIDI4NDExLCAyODQxNywgMjg0MjMsIDI4NDI5LCAyODQzNCwgCisgICAgMjg0MzksIDI4NDQ1LCAyODQ1MSwgMCwgMCwgMCwgMCwgMjg0NTgsIDI4NDYzLCAyODQ2OSwgMjg0NzUsIDI4NDgxLCAKKyAgICAyODQ4NiwgMjg0OTEsIDI4NDk2LCAyODUwMSwgMjg1MDcsIDI4NTEyLCAyODUxNywgMCwgMCwgMCwgMCwgMjg1MjIsIDAsIDAsIAorICAgIDAsIDI4NTI3LCAyODUzMiwgMjg1MzcsIDI4NTQyLCAyODU0NiwgMjg1NTAsIDI4NTU0LCAyODU1OCwgMjg1NjIsIDI4NTY2LCAKKyAgICAyODU3MCwgMjg1NzQsIDI4NTc4LCAyODU4MywgMjg1ODksIDI4NTk1LCAyODYwMSwgMjg2MDYsIDI4NjExLCAyODYxNywgCisgICAgMjg2MjMsIDI4NjI5LCAyODYzNCwgMjg2NDAsIDI4NjQ1LCAyODY1MSwgMjg2NTcsIDI4NjYyLCAyODY2OCwgMjg2NzQsIAorICAgIDI4NjgwLCAyODY4NSwgMjg2OTAsIDI4Njk1LCAyODcwMSwgMjg3MDcsIDI4NzEyLCAyODcxOCwgMjg3MjMsIDI4NzI5LCAKKyAgICAyODczNCwgMjg3NDAsIDAsIDAsIDI4NzQ2LCAyODc1MiwgMjg3NTgsIDI4NzY0LCAyODc3MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjg3NzYsIDI4NzgzLCAyODc5MCwgMjg3OTYsIDI4ODAzLCAyODgxMCwgMjg4MTYsIDI4ODIzLCAKKyAgICAyODgzMCwgMjg4MzcsIDI4ODQzLCAyODg0OSwgMjg4NTYsIDI4ODYyLCAyODg2OCwgMjg4NzUsIDI4ODgyLCAyODg4OCwgCisgICAgMjg4OTUsIDI4OTAyLCAyODkwOCwgMjg5MTQsIDI4OTIxLCAyODkyNywgMjg5MzMsIDI4OTQwLCAyODk0NiwgMjg5NTMsIAorICAgIDI4OTYwLCAyODk2NywgMjg5NzQsIDI4OTgxLCAyODk4OCwgMjg5OTQsIDI5MDAxLCAyOTAwOCwgMjkwMTQsIDI5MDIxLCAKKyAgICAyOTAyOCwgMjkwMzUsIDI5MDQyLCAyOTA0OSwgMjkwNTYsIDI5MDYzLCAwLCAwLCAwLCAwLCAyOTA3MCwgMjkwNzgsIAorICAgIDI5MDg1LCAyOTA5MiwgMjkwOTgsIDI5MTA1LCAyOTExMSwgMjkxMTgsIDI5MTI0LCAyOTEzMSwgMjkxMzgsIDI5MTQ1LCAKKyAgICAyOTE1MiwgMjkxNTksIDI5MTY2LCAyOTE3MywgMjkxODAsIDI5MTg3LCAyOTE5NCwgMjkyMDEsIDI5MjA4LCAyOTIxNCwgCisgICAgMjkyMjEsIDI5MjI4LCAyOTIzNSwgMjkyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ3LCAyOTI1MywgMjkyNTgsIDI5MjYzLCAKKyAgICAyOTI2OCwgMjkyNzMsIDI5Mjc4LCAyOTI4MywgMjkyODgsIDI5MjkzLCAyOTI5OCwgMCwgMCwgMCwgMjkzMDQsIDI5MzEwLCAKKyAgICAyOTMxNiwgMjkzMjAsIDI5MzI2LCAyOTMzMiwgMjkzMzgsIDI5MzQ0LCAyOTM1MCwgMjkzNTYsIDI5MzYyLCAyOTM2OCwgCisgICAgMjkzNzQsIDI5MzgwLCAyOTM4NiwgMjkzOTIsIDI5Mzk4LCAyOTQwNCwgMjk0MTAsIDI5NDE0LCAyOTQyMCwgMjk0MjYsIAorICAgIDI5NDMyLCAyOTQzOCwgMjk0NDQsIDI5NDUwLCAyOTQ1NiwgMjk0NjIsIDI5NDY4LCAyOTQ3NCwgMjk0ODAsIDI5NDg2LCAKKyAgICAyOTQ5MiwgMjk0OTgsIDI5NTA0LCAyOTUwOCwgMjk1MTMsIDI5NTE4LCAyOTUyMywgMjk1MjcsIDI5NTMyLCAyOTUzNiwgCisgICAgMjk1NDEsIDI5NTQ2LCAyOTU1MSwgMjk1NTUsIDI5NTYwLCAyOTU2NSwgMjk1NzAsIDI5NTc1LCAyOTU4MCwgMjk1ODQsIAorICAgIDI5NTg4LCAyOTU5MywgMjk1OTgsIDI5NjAyLCAyOTYwNiwgMjk2MTAsIDI5NjE1LCAyOTYyMCwgMjk2MjUsIDI5NjMwLCAwLCAKKyAgICAwLCAyOTYzNiwgMjk2NDAsIDI5NjQ3LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY2OSwgMjk2NzUsIDI5NjgxLCAyOTY4NiwgCisgICAgMjk2OTIsIDI5Njk4LCAyOTcwNCwgMjk3MDksIDI5NzE1LCAyOTcyMCwgMjk3MjUsIDI5NzMxLCAyOTczNiwgMjk3NDIsIAorICAgIDI5NzQ3LCAyOTc1MywgMjk3NTksIDI5NzY1LCAyOTc3MSwgMjk3NzUsIDI5NzgwLCAyOTc4NSwgMjk3OTEsIDI5Nzk3LCAKKyAgICAyOTgwMiwgMjk4MDgsIDI5ODE0LCAyOTgxOCwgMjk4MjMsIDI5ODI4LCAyOTgzMiwgMjk4MzcsIDI5ODQyLCAyOTg0NywgCisgICAgMjk4NTIsIDI5ODU4LCAyOTg2NCwgMjk4NjksIDI5ODc0LCAyOTg3OSwgMjk4ODMsIDI5ODg4LCAyOTg5MiwgMjk4OTcsIAorICAgIDI5OTAxLCAyOTkwNiwgMjk5MTEsIDI5OTE2LCAyOTkyMSwgMjk5MjcsIDI5OTMzLCAyOTk0MCwgMjk5NTAsIDI5OTU5LCAKKyAgICAyOTk2NiwgMjk5NzIsIDI5OTgyLCAyOTk4NywgMjk5OTMsIDAsIDI5OTk4LCAzMDAwMywgMzAwMDgsIDMwMDE2LCAzMDAyMiwgCisgICAgMzAwMzAsIDMwMDM1LCAzMDA0MSwgMzAwNDcsIDMwMDUzLCAzMDA1OCwgMzAwNjQsIDMwMDY5LCAzMDA3NiwgMzAwODIsIAorICAgIDMwMDg3LCAzMDA5MywgMzAwOTksIDMwMTA1LCAzMDExMiwgMzAxMTksIDMwMTI2LCAzMDEzMSwgMzAxMzYsIDMwMTQzLCAKKyAgICAzMDE1MCwgMzAxNTcsIDMwMTY0LCAzMDE3MSwgMCwgMCwgMzAxNzgsIDMwMTg1LCAzMDE5MiwgMzAxOTgsIDMwMjA0LCAKKyAgICAzMDIxMCwgMzAyMTYsIDMwMjIyLCAzMDIyOCwgMzAyMzQsIDMwMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0NiwgMzAyNTIsIAorICAgIDMwMjU3LCAzMDI2MiwgMzAyNjcsIDMwMjcyLCAzMDI3NywgMzAyODIsIDMwMjg3LCAzMDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzAyOTcsIDMwMzAyLCAzMDMwNywgMzAzMTIsIDMwMzE3LCAzMDMyMiwgMzAzMjcsIDMwMzM2LCAzMDM0MywgMzAzNDgsIAorICAgIDMwMzUzLCAzMDM1OCwgMzAzNjMsIDMwMzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MCwgMzAzNzYsIAotICAgIDMwMzgyLCAzMDM4NiwgMzAzOTAsIDMwMzk0LCAzMDM5OCwgMzA0MDQsIDMwNDA4LCAzMDQxNCwgMzA0MTgsIDMwNDI0LCAKLSAgICAzMDQzMCwgMzA0MzgsIDMwNDQ0LCAzMDQ1MiwgMzA0NTYsIDMwNDYwLCAzMDQ2NCwgMzA0NzAsIDMwNDczLCAzMDQ3OSwgCi0gICAgMzA0ODMsIDMwNDg5LCAzMDQ5MywgMzA0OTcsIDMwNTAzLCAzMDUwNywgMzA1MTMsIDMwNTE3LCAzMDUyMywgMzA1MzEsIAotICAgIDMwNTM5LCAzMDU0NywgMzA1NTMsIDMwNTU3LCAzMDU2MywgMzA1NjcsIDMwNTczLCAzMDU3NiwgMzA1NzksIDMwNTg1LCAKLSAgICAzMDU4OSwgMzA1OTUsIDMwNTk4LCAzMDYwMSwgMzA2MDQsIDMwNjA4LCAzMDYxMiwgMzA2MTgsIDMwNjI0LCAzMDYyNywgCi0gICAgMzA2MzAsIDMwNjM0LCAzMDYzOSwgMzA2NDQsIDMwNjUxLCAzMDY1NiwgMzA2NjMsIDMwNjcwLCAzMDY3OSwgMzA2ODYsIAotICAgIDMwNjk1LCAzMDcwMCwgMzA3MDcsIDMwNzE0LCAzMDcyMywgMzA3MjgsIDMwNzM1LCAzMDc0MCwgMzA3NDYsIDMwNzUyLCAKLSAgICAzMDc1OCwgMzA3NjQsIDMwNzcwLCAzMDc3NiwgMCwgMCwgMCwgMCwgMzA3ODIsIDMwNzg2LCAzMDc4OSwgMzA3OTIsIAotICAgIDMwNzk1LCAzMDc5OCwgMzA4MDEsIDMwODA0LCAzMDgwNywgMzA4MTAsIDMwODEzLCAzMDgxNiwgMzA4MTksIDMwODIyLCAKLSAgICAzMDgyNywgMzA4MzIsIDMwODM3LCAzMDg0MCwgMzA4NDUsIDMwODUwLCAzMDg1NSwgMzA4NjAsIDMwODY3LCAzMDg3MiwgCi0gICAgMzA4NzcsIDMwODgyLCAzMDg4NywgMzA4OTQsIDMwOTAwLCAzMDkwNiwgMzA5MTIsIDMwOTE4LCAzMDkyNCwgMzA5MzMsIAotICAgIDMwOTQyLCAzMDk0OCwgMzA5NTQsIDMwOTYyLCAzMDk3MCwgMzA5NzksIDMwOTg4LCAzMDk5NiwgMzEwMDQsIDMxMDEzLCAKLSAgICAzMTAyMiwgMCwgMCwgMCwgMzEwMzAsIDMxMDM0LCAzMTAzOCwgMzEwNDIsIDMxMDQ1LCAzMTA0OCwgMzEwNTEsIDMxMDU1LCAKLSAgICAzMTA1OCwgMzEwNjEsIDMxMDY1LCAzMTA2OCwgMzEwNzIsIDMxMDc2LCAzMTA4MCwgMzEwODQsIDMxMDg4LCAzMTA5MiwgCi0gICAgMzEwOTYsIDMxMTAwLCAzMTEwNCwgMzExMDcsIDMxMTEwLCAzMTExNCwgMzExMTgsIDMxMTIyLCAzMTEyNSwgMzExMjgsIAotICAgIDMxMTMxLCAzMTEzNSwgMzExMzksIDMxMTQyLCAzMTE0NiwgMzExNDksIDMxMTU0LCAzMTE1OSwgMzExNjQsIDMxMTY5LCAKLSAgICAzMTE3NCwgMzExNzksIDMxMTg0LCAzMTE4OSwgMzExOTQsIDMxMTk4LCAzMTIwMiwgMzEyMDgsIDMxMjE1LCAzMTIxOSwgCi0gICAgMzEyMjMsIDMxMjI3LCAzMTIzMCwgMzEyMzMsIDMxMjM2LCAzMTIzOSwgMzEyNDIsIDMxMjQ1LCAzMTI0OCwgMzEyNTEsIAotICAgIDMxMjU0LCAzMTI1NywgMzEyNjEsIDMxMjY1LCAzMTI2OSwgMzEyNzQsIDMxMjc4LCAzMTI4MiwgMzEyODgsIDMxMjkyLCAKLSAgICAzMTI5OCwgMzEzMDQsIDMxMzA5LCAzMTMxNiwgMzEzMjAsIDMxMzI2LCAzMTMzMCwgMzEzMzYsIDMxMzQxLCAzMTM0OCwgCi0gICAgMzEzNTUsIDMxMzYwLCAzMTM2NywgMzEzNzIsIDMxMzc3LCAzMTM4MSwgMzEzODcsIDMxMzkxLCAzMTM5NywgMzE0MDQsIAotICAgIDMxNDExLCAzMTQxNSwgMzE0MjEsIDMxNDI3LCAzMTQzMSwgMzE0MzcsIDMxNDQyLCAzMTQ0NywgMzE0NTQsIDMxNDU5LCAKLSAgICAzMTQ2NCwgMzE0NjksIDMxNDc0LCAzMTQ3OCwgMzE0ODIsIDMxNDg3LCAzMTQ5MiwgMzE0OTksIDMxNTA1LCAzMTUxMCwgCi0gICAgMzE1MTcsIDMxNTIyLCAzMTUyOSwgMzE1MzQsIDMxNTQzLCAzMTU0OSwgMzE1NTUsIDMxNTU5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzMTU2MywgMzE1NzIsIDMxNTc5LCAzMTU4NiwgMzE1OTMsIDMxNTk2LCAzMTYwMCwgMzE2MDQsIDMxNjA4LCAKLSAgICAzMTYxMiwgMzE2MTYsIDMxNjIwLCAzMTYyNCwgMzE2MjgsIDMxNjMyLCAzMTYzNiwgMzE2NDAsIDMxNjQ0LCAzMTY0NywgCi0gICAgMzE2NTAsIDMxNjU0LCAzMTY1OCwgMzE2NjIsIDMxNjY2LCAzMTY3MCwgMzE2NzQsIDMxNjc3LCAzMTY4MSwgMzE2ODUsIAotICAgIDMxNjg5LCAzMTY5MywgMzE2OTYsIDMxNjk5LCAzMTcwMywgMzE3MDYsIDMxNzEwLCAzMTcxNCwgMzE3MTcsIDMxNzIxLCAKLSAgICAzMTcyNSwgMzE3MjgsIDMxNzMzLCAzMTczOCwgMzE3NDMsIDMxNzQ3LCAzMTc1MSwgMzE3NTYsIDMxNzYwLCAzMTc2NSwgCi0gICAgMzE3NjksIDMxNzc0LCAzMTc3OCwgMzE3ODIsIDMxNzg3LCAzMTc5MiwgMzE3OTYsIDMxODAxLCAzMTgwNiwgMzE4MTEsIAotICAgIDMxODE1LCAwLCAwLCAwLCAzMTgxOSwgMzE4MjQsIDMxODMzLCAzMTgzOCwgMzE4NDUsIDMxODUwLCAzMTg1NCwgMzE4NTcsIAotICAgIDMxODYwLCAzMTg2MywgMzE4NjYsIDMxODY5LCAzMTg3MiwgMzE4NzUsIDMxODc4LCAwLCAwLCAwLCAzMTg4MSwgMzE4ODUsIAotICAgIDMxODg5LCAzMTg5MywgMzE5MDAsIDMxOTA2LCAzMTkxMiwgMzE5MTgsIDMxOTI0LCAzMTkzMCwgMzE5MzYsIDMxOTQyLCAKLSAgICAzMTk0OCwgMzE5NTQsIDMxOTYxLCAzMTk2OCwgMzE5NzUsIDMxOTgyLCAzMTk4OSwgMzE5OTYsIDMyMDAzLCAzMjAxMCwgCi0gICAgMzIwMTcsIDMyMDI0LCAzMjAzMSwgMzIwMzgsIDMyMDQ1LCAzMjA1MiwgMzIwNTksIDMyMDY2LCAzMjA3MywgMzIwODAsIAotICAgIDMyMDg3LCAzMjA5NCwgMzIxMDEsIDMyMTA4LCAzMjExNSwgMzIxMjIsIDMyMTI5LCAzMjEzNiwgMzIxNDMsIDMyMTUwLCAKLSAgICAzMjE1NywgMzIxNjQsIDMyMTcyLCAzMjE4MCwgMzIxODgsIDMyMTk0LCAzMjIwMCwgMzIyMDYsIDMyMjE0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MywgMzAzNzksIAorICAgIDMwMzg1LCAzMDM4OSwgMzAzOTMsIDMwMzk3LCAzMDQwMSwgMzA0MDcsIDMwNDExLCAzMDQxNywgMzA0MjEsIDMwNDI3LCAKKyAgICAzMDQzMywgMzA0NDEsIDMwNDQ3LCAzMDQ1NSwgMzA0NTksIDMwNDYzLCAzMDQ2NywgMzA0NzMsIDMwNDc2LCAzMDQ4MiwgCisgICAgMzA0ODYsIDMwNDkyLCAzMDQ5NiwgMzA1MDAsIDMwNTA2LCAzMDUxMCwgMzA1MTYsIDMwNTIwLCAzMDUyNiwgMzA1MzQsIAorICAgIDMwNTQyLCAzMDU1MCwgMzA1NTYsIDMwNTYwLCAzMDU2NiwgMzA1NzAsIDMwNTc2LCAzMDU3OSwgMzA1ODIsIDMwNTg4LCAKKyAgICAzMDU5MiwgMzA1OTgsIDMwNjAxLCAzMDYwNCwgMzA2MDcsIDMwNjExLCAzMDYxNSwgMzA2MjEsIDMwNjI3LCAzMDYzMCwgCisgICAgMzA2MzMsIDMwNjM3LCAzMDY0MiwgMzA2NDcsIDMwNjU0LCAzMDY1OSwgMzA2NjYsIDMwNjczLCAzMDY4MiwgMzA2ODksIAorICAgIDMwNjk4LCAzMDcwMywgMzA3MTAsIDMwNzE3LCAzMDcyNiwgMzA3MzEsIDMwNzM4LCAzMDc0MywgMzA3NDksIDMwNzU1LCAKKyAgICAzMDc2MSwgMzA3NjcsIDMwNzczLCAzMDc3OSwgMCwgMCwgMCwgMCwgMzA3ODUsIDMwNzg5LCAzMDc5MiwgMzA3OTUsIAorICAgIDMwNzk4LCAzMDgwMSwgMzA4MDQsIDMwODA3LCAzMDgxMCwgMzA4MTMsIDMwODE2LCAzMDgxOSwgMzA4MjIsIDMwODI1LCAKKyAgICAzMDgzMCwgMzA4MzUsIDMwODQwLCAzMDg0MywgMzA4NDgsIDMwODUzLCAzMDg1OCwgMzA4NjMsIDMwODcwLCAzMDg3NSwgCisgICAgMzA4ODAsIDMwODg1LCAzMDg5MCwgMzA4OTcsIDMwOTAzLCAzMDkwOSwgMzA5MTUsIDMwOTIxLCAzMDkyNywgMzA5MzYsIAorICAgIDMwOTQ1LCAzMDk1MSwgMzA5NTcsIDMwOTY1LCAzMDk3MywgMzA5ODIsIDMwOTkxLCAzMDk5OSwgMzEwMDcsIDMxMDE2LCAKKyAgICAzMTAyNSwgMCwgMCwgMCwgMzEwMzMsIDMxMDM3LCAzMTA0MSwgMzEwNDUsIDMxMDQ4LCAzMTA1MSwgMzEwNTQsIDMxMDU4LCAKKyAgICAzMTA2MSwgMzEwNjQsIDMxMDY4LCAzMTA3MSwgMzEwNzUsIDMxMDc5LCAzMTA4MywgMzEwODcsIDMxMDkxLCAzMTA5NSwgCisgICAgMzEwOTksIDMxMTAzLCAzMTEwNywgMzExMTAsIDMxMTEzLCAzMTExNywgMzExMjEsIDMxMTI1LCAzMTEyOCwgMzExMzEsIAorICAgIDMxMTM0LCAzMTEzOCwgMzExNDIsIDMxMTQ1LCAzMTE0OSwgMzExNTIsIDMxMTU3LCAzMTE2MiwgMzExNjcsIDMxMTcyLCAKKyAgICAzMTE3NywgMzExODIsIDMxMTg3LCAzMTE5MiwgMzExOTcsIDMxMjAxLCAzMTIwNSwgMzEyMTEsIDMxMjE4LCAzMTIyMiwgCisgICAgMzEyMjYsIDMxMjMwLCAzMTIzMywgMzEyMzYsIDMxMjM5LCAzMTI0MiwgMzEyNDUsIDMxMjQ4LCAzMTI1MSwgMzEyNTQsIAorICAgIDMxMjU3LCAzMTI2MCwgMzEyNjQsIDMxMjY4LCAzMTI3MiwgMzEyNzcsIDMxMjgxLCAzMTI4NSwgMzEyOTEsIDMxMjk1LCAKKyAgICAzMTMwMSwgMzEzMDcsIDMxMzEyLCAzMTMxOSwgMzEzMjMsIDMxMzI5LCAzMTMzMywgMzEzMzksIDMxMzQ0LCAzMTM1MSwgCisgICAgMzEzNTgsIDMxMzYzLCAzMTM3MCwgMzEzNzUsIDMxMzgwLCAzMTM4NCwgMzEzOTAsIDMxMzk0LCAzMTQwMCwgMzE0MDcsIAorICAgIDMxNDE0LCAzMTQxOCwgMzE0MjQsIDMxNDMwLCAzMTQzNCwgMzE0NDAsIDMxNDQ1LCAzMTQ1MCwgMzE0NTcsIDMxNDYyLCAKKyAgICAzMTQ2NywgMzE0NzIsIDMxNDc3LCAzMTQ4MSwgMzE0ODUsIDMxNDkwLCAzMTQ5NSwgMzE1MDIsIDMxNTA4LCAzMTUxMywgCisgICAgMzE1MjAsIDMxNTI1LCAzMTUzMiwgMzE1MzcsIDMxNTQ2LCAzMTU1MiwgMzE1NTgsIDMxNTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMTU2NiwgMzE1NzUsIDMxNTgyLCAzMTU4OSwgMzE1OTYsIDMxNTk5LCAzMTYwMywgMzE2MDcsIDMxNjExLCAKKyAgICAzMTYxNSwgMzE2MTksIDMxNjIzLCAzMTYyNywgMzE2MzEsIDMxNjM1LCAzMTYzOSwgMzE2NDMsIDMxNjQ3LCAzMTY1MCwgCisgICAgMzE2NTMsIDMxNjU3LCAzMTY2MSwgMzE2NjUsIDMxNjY5LCAzMTY3MywgMzE2NzcsIDMxNjgwLCAzMTY4NCwgMzE2ODgsIAorICAgIDMxNjkyLCAzMTY5NiwgMzE2OTksIDMxNzAyLCAzMTcwNiwgMzE3MDksIDMxNzEzLCAzMTcxNywgMzE3MjAsIDMxNzI0LCAKKyAgICAzMTcyOCwgMzE3MzEsIDMxNzM2LCAzMTc0MSwgMzE3NDYsIDMxNzUwLCAzMTc1NCwgMzE3NTksIDMxNzYzLCAzMTc2OCwgCisgICAgMzE3NzIsIDMxNzc3LCAzMTc4MSwgMzE3ODUsIDMxNzkwLCAzMTc5NSwgMzE3OTksIDMxODA0LCAzMTgwOSwgMzE4MTQsIAorICAgIDMxODE4LCAwLCAwLCAwLCAzMTgyMiwgMzE4MjcsIDMxODM2LCAzMTg0MSwgMzE4NDgsIDMxODUzLCAzMTg1NywgMzE4NjAsIAorICAgIDMxODYzLCAzMTg2NiwgMzE4NjksIDMxODcyLCAzMTg3NSwgMzE4NzgsIDMxODgxLCAwLCAwLCAwLCAzMTg4NCwgMzE4ODgsIAorICAgIDMxODkyLCAzMTg5NiwgMzE5MDMsIDMxOTA5LCAzMTkxNSwgMzE5MjEsIDMxOTI3LCAzMTkzMywgMzE5MzksIDMxOTQ1LCAKKyAgICAzMTk1MSwgMzE5NTcsIDMxOTY0LCAzMTk3MSwgMzE5NzgsIDMxOTg1LCAzMTk5MiwgMzE5OTksIDMyMDA2LCAzMjAxMywgCisgICAgMzIwMjAsIDMyMDI3LCAzMjAzNCwgMzIwNDEsIDMyMDQ4LCAzMjA1NSwgMzIwNjIsIDMyMDY5LCAzMjA3NiwgMzIwODMsIAorICAgIDMyMDkwLCAzMjA5NywgMzIxMDQsIDMyMTExLCAzMjExOCwgMzIxMjUsIDMyMTMyLCAzMjEzOSwgMzIxNDYsIDMyMTUzLCAKKyAgICAzMjE2MCwgMzIxNjcsIDMyMTc1LCAzMjE4MywgMzIxOTEsIDMyMTk3LCAzMjIwMywgMzIyMDksIDMyMjE3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyMywgMzIyMzAsIDMyMjM3LCAzMjI0NCwgMzIyNTEsIAotICAgIDMyMjYwLCAzMjI2OSwgMzIyNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjg3LCAzMjI5MiwgMzIyOTcsIDMyMzAyLCAKLSAgICAzMjMwNywgMzIzMTYsIDMyMzI3LCAzMjMzNiwgMzIzNDcsIDMyMzUzLCAzMjM2NiwgMzIzNzIsIDMyMzc5LCAzMjM4NiwgCi0gICAgMzIzOTEsIDMyMzk3LCAzMjQwMywgMzI0MTQsIDMyNDIzLCAzMjQzMCwgMzI0MzcsIDMyNDQ2LCAzMjQ1MywgMzI0NjIsIAotICAgIDMyNDcyLCAzMjQ4MiwgMzI0ODksIDMyNDk2LCAzMjUwMywgMzI1MTMsIDMyNTE4LCAzMjUyNiwgMzI1MzIsIDMyNTQwLCAKLSAgICAzMjU0OSwgMzI1NTQsIDMyNTYxLCAzMjU2NywgMzI1NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTc3LCAKLSAgICAzMjU4MiwgMzI1ODgsIDMyNTk1LCAzMjYwMywgMzI2MDksIDMyNjE1LCAzMjYyMSwgMzI2MjYsIDMyNjMzLCAzMjYzOSwgCi0gICAgMzI2NDUsIDMyNjUxLCAzMjY1OSwgMzI2NjQsIDMyNjcyLCAzMjY3NywgMzI2ODMsIDMyNjg5LCAzMjY5NiwgMzI3MDQsIAotICAgIDMyNzExLCAzMjcxNywgMzI3MjQsIDMyNzMxLCAzMjczNywgMzI3NDQsIDMyNzUxLCAzMjc1NywgMzI3NjIsIDMyNzY4LCAKLSAgICAzMjc3NiwgMzI3ODQsIDMyNzkwLCAzMjc5NiwgMzI4MDIsIDMyODA4LCAzMjgxNiwgMzI4MjAsIDMyODI2LCAzMjgzMiwgCi0gICAgMzI4MzgsIDMyODQ0LCAzMjg1MCwgMzI4NTYsIDMyODYwLCAzMjg2NSwgMzI4NzAsIDMyODc3LCAzMjg4MiwgMzI4ODYsIAotICAgIDMyODkyLCAzMjg5NywgMzI5MDIsIDMyOTA2LCAzMjkxMSwgMzI5MTYsIDMyOTIwLCAzMjkyNCwgMzI5MjksIDMyOTM2LCAKLSAgICAzMjk0MCwgMzI5NDUsIDMyOTUwLCAzMjk1NCwgMzI5NTksIDMyOTYzLCAzMjk2OCwgMzI5NzIsIDMyOTc4LCAzMjk4MywgCi0gICAgMzI5OTAsIDMyOTk1LCAzMzAwMCwgMzMwMDQsIDMzMDA5LCAzMzAxNCwgMzMwMjEsIDMzMDI2LCAzMzAzMiwgMzMwMzcsIAotICAgIDMzMDQxLCAzMzA0NiwgMzMwNTAsIDMzMDU1LCAzMzA2MiwgMzMwNjksIDMzMDc0LCAzMzA3OSwgMzMwODMsIDMzMDg5LCAKLSAgICAzMzA5NSwgMzMxMDAsIDMzMTA1LCAzMzExMCwgMzMxMTYsIDMzMTIxLCAzMzEyNywgMzMxMzIsIDMzMTM4LCAzMzE0NCwgCi0gICAgMzMxNTAsIDMzMTU3LCAzMzE2NCwgMzMxNzEsIDMzMTc4LCAzMzE4NSwgMzMxOTIsIDMzMTk3LCAzMzIwNSwgMzMyMTQsIAotICAgIDMzMjIzLCAzMzIzMiwgMzMyNDEsIDMzMjUwLCAzMzI1OSwgMzMyNzEsIDMzMjgwLCAzMzI4OSwgMzMyOTgsIDMzMzA1LCAKLSAgICAzMzMxMCwgMzMzMTcsIDMzMzI1LCAzMzMzMywgMzMzNDAsIDMzMzQ3LCAzMzM1NCwgMzMzNjEsIDMzMzY5LCAzMzM3OCwgCi0gICAgMzMzODcsIDMzMzk2LCAzMzQwNSwgMzM0MTQsIDMzNDIzLCAzMzQzMiwgMzM0NDEsIDMzNDUwLCAzMzQ1OSwgMzM0NjgsIAotICAgIDMzNDc3LCAzMzQ4NiwgMzM0OTUsIDMzNTAzLCAzMzUxMiwgMzM1MjMsIDMzNTMxLCAzMzU0MCwgMzM1NTEsIDMzNTYwLCAKLSAgICAzMzU2OSwgMzM1NzgsIDMzNTg3LCAzMzU5NSwgMzM2MDQsIDMzNjExLCAzMzYxNiwgMzM2MjQsIDMzNjI5LCAzMzYzNiwgCi0gICAgMzM2NDEsIDMzNjUwLCAzMzY1NiwgMzM2NjMsIDMzNjcwLCAzMzY3NSwgMzM2ODAsIDMzNjg4LCAzMzY5NiwgMzM3MDUsIAotICAgIDMzNzE0LCAzMzcxOSwgMzM3MjYsIDMzNzM3LCAzMzc0NSwgMzM3NTQsIDMzNzYwLCAzMzc2NiwgMzM3NzEsIDMzNzc4LCAKLSAgICAzMzc4MywgMzM3OTIsIDMzNzk3LCAzMzgwMiwgMzM4MDcsIDMzODE0LCAzMzgyMSwgMzM4MjYsIDMzODM1LCAzMzg0MywgCi0gICAgMzM4NDgsIDMzODUzLCAzMzg2MCwgMzM4NjcsIDMzODcxLCAzMzg3NSwgMzM4NzgsIDMzODgxLCAzMzg4NCwgMzM4ODcsIAotICAgIDMzODkwLCAzMzg5MywgMzM5MDAsIDMzOTAzLCAzMzkwNiwgMzM5MTEsIDMzOTE1LCAzMzkxOSwgMzM5MjMsIDMzOTI3LCAKLSAgICAzMzkzMSwgMzM5NDAsIDMzOTQ2LCAzMzk1MiwgMzM5NTgsIDMzOTY2LCAzMzk3NCwgMzM5ODAsIDMzOTg2LCAzMzk5MywgCi0gICAgMzM5OTksIDM0MDA0LCAzNDAxMCwgMzQwMTYsIDM0MDIyLCAzNDAyOSwgMzQwMzUsIDM0MDQzLCAzNDA0OSwgMzQwNTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDYyLCAzNDA2OSwgCi0gICAgMzQwNzYsIDM0MDgxLCAzNDA5MCwgMzQwOTgsIDM0MTA2LCAzNDExMywgMzQxMjAsIDM0MTI3LCAzNDEzNCwgMzQxNDIsIAotICAgIDM0MTUwLCAzNDE2MCwgMzQxNzAsIDM0MTc4LCAzNDE4NiwgMzQxOTQsIDM0MjAyLCAzNDIxMSwgMzQyMjAsIDM0MjI4LCAKLSAgICAzNDIzNiwgMzQyNDUsIDM0MjU0LCAzNDI2NCwgMzQyNzQsIDM0MjgzLCAzNDI5MiwgMzQzMDAsIDM0MzA4LCAzNDMxNiwgCi0gICAgMzQzMjQsIDM0MzM0LCAzNDM0NCwgMzQzNTIsIDM0MzYwLCAzNDM2OCwgMzQzNzYsIDM0Mzg0LCAzNDM5MiwgMzQ0MDAsIAotICAgIDM0NDA4LCAzNDQxNiwgMzQ0MjQsIDM0NDMyLCAzNDQ0MCwgMzQ0NDksIDM0NDU4LCAzNDQ2NywgMzQ0NzYsIDM0NDg2LCAKLSAgICAzNDQ5NiwgMzQ1MDMsIDM0NTEwLCAzNDUxOCwgMzQ1MjYsIDM0NTM1LCAzNDU0NCwgMzQ1NTIsIDM0NTYwLCAzNDU3MiwgCi0gICAgMzQ1ODQsIDM0NTkzLCAzNDYwMiwgMzQ2MTEsIDM0NjIwLCAzNDYyNywgMzQ2MzQsIDM0NjQyLCAzNDY1MCwgMzQ2NTgsIAotICAgIDM0NjY2LCAzNDY3NCwgMzQ2ODIsIDM0NjkwLCAzNDY5OCwgMzQ3MDcsIDM0NzE2LCAzNDcyNSwgMzQ3MzQsIDM0NzQzLCAKLSAgICAzNDc1MiwgMzQ3NjIsIDM0NzcyLCAzNDc4MiwgMzQ3OTIsIDM0ODAxLCAzNDgxMCwgMzQ4MTcsIDM0ODI0LCAzNDgzMiwgCi0gICAgMzQ4NDAsIDM0ODQ4LCAzNDg1NiwgMzQ4NjQsIDM0ODcyLCAzNDg4NCwgMzQ4OTYsIDM0OTA1LCAzNDkxNCwgMzQ5MjIsIAotICAgIDM0OTMwLCAzNDkzOCwgMzQ5NDYsIDM0OTU3LCAzNDk2OCwgMzQ5NzksIDM0OTkwLCAzNTAwMiwgMzUwMTQsIDM1MDIyLCAKLSAgICAzNTAzMCwgMzUwMzgsIDM1MDQ2LCAzNTA1NSwgMzUwNjQsIDM1MDczLCAzNTA4MiwgMzUwOTAsIDM1MDk4LCAzNTEwNiwgCi0gICAgMzUxMTQsIDM1MTIyLCAzNTEzMCwgMzUxMzksIDM1MTQ4LCAzNTE1OCwgMzUxNjgsIDM1MTc1LCAzNTE4MiwgMzUxOTAsIAotICAgIDM1MTk4LCAzNTIwNiwgMzUyMTQsIDM1MjIxLCAzNTIyOCwgMzUyMzYsIDM1MjQ0LCAzNTI1MiwgMzUyNjAsIDM1MjY4LCAKLSAgICAzNTI3NiwgMzUyODQsIDM1MjkyLCAzNTMwMCwgMzUzMDgsIDM1MzE2LCAzNTMyNCwgMzUzMzIsIDM1MzQwLCAzNTM0OCwgCi0gICAgMzUzNTYsIDM1MzY1LCAzNTM3NCwgMzUzODMsIDM1MzkxLCAzNTQwMCwgMzU0MDksIDM1NDE4LCAzNTQyNywgMzU0MzcsIAotICAgIDM1NDQ2LCAzNTQ1MywgMzU0NTgsIDM1NDY1LCAzNTQ3MiwgMzU0ODAsIDM1NDg4LCAzNTQ5NywgMzU1MDYsIDM1NTE2LCAKLSAgICAzNTUyNiwgMzU1MzcsIDM1NTQ4LCAzNTU1NywgMzU1NjYsIDM1NTc2LCAzNTU4NiwgMzU1OTUsIDM1NjA0LCAzNTYxNCwgCi0gICAgMzU2MjQsIDM1NjM1LCAzNTY0NiwgMzU2NTUsIDM1NjY0LCAzNTY3NCwgMzU2ODQsIDM1NjkxLCAzNTY5OCwgMzU3MDYsIAotICAgIDM1NzE0LCAzNTcyMCwgMzU3MjYsIDM1NzM1LCAzNTc0NCwgMzU3NTQsIDM1NzY0LCAzNTc3NSwgMzU3ODYsIDM1Nzk1LCAKLSAgICAzNTgwNCwgMzU4MTQsIDM1ODI0LCAzNTgzMywgMzU4NDIsIDM1ODUwLCAzNTg1OCwgMzU4NjUsIDM1ODcyLCAzNTg4MCwgCi0gICAgMzU4ODgsIDM1ODk3LCAzNTkwNiwgMzU5MTYsIDM1OTI2LCAzNTkzNywgMzU5NDgsIDM1OTU3LCAzNTk2NiwgMzU5NzYsIAotICAgIDM1OTg2LCAzNTk5NSwgMzYwMDQsIDM2MDE0LCAzNjAyNCwgMzYwMzUsIDM2MDQ2LCAzNjA1NSwgMzYwNjQsIDM2MDc0LCAKLSAgICAzNjA4NCwgMzYwOTEsIDM2MDk4LCAzNjEwNiwgMzYxMTQsIDM2MTIzLCAzNjEzMiwgMzYxNDIsIDM2MTUyLCAzNjE2MywgCi0gICAgMzYxNzQsIDM2MTgzLCAzNjE5MiwgMzYyMDIsIDM2MjEyLCAzNjIyMCwgMzYyMjgsIDM2MjM2LCAzNjI0NCwgMzYyNTMsIAotICAgIDM2MjYyLCAzNjI2OSwgMzYyNzYsIDM2MjgzLCAzNjI5MCwgMzYyOTcsIDM2MzA0LCAzNjMxMiwgMzYzMjAsIDM2MzI4LCAKLSAgICAzNjMzNiwgMzYzNDcsIDM2MzU4LCAzNjM2OSwgMzYzODAsIDM2MzkxLCAzNjQwMiwgMzY0MTAsIDM2NDE4LCAzNjQyOSwgCi0gICAgMzY0NDAsIDM2NDUxLCAzNjQ2MiwgMzY0NzMsIDM2NDg0LCAzNjQ5MiwgMzY1MDAsIDM2NTExLCAzNjUyMiwgMzY1MzMsIDAsIAotICAgIDAsIDM2NTQ0LCAzNjU1MiwgMzY1NjAsIDM2NTcxLCAzNjU4MiwgMzY1OTMsIDAsIDAsIDM2NjA0LCAzNjYxMiwgMzY2MjAsIAotICAgIDM2NjMxLCAzNjY0MiwgMzY2NTMsIDM2NjY0LCAzNjY3NSwgMzY2ODYsIDM2Njk0LCAzNjcwMiwgMzY3MTMsIDM2NzI0LCAKLSAgICAzNjczNSwgMzY3NDYsIDM2NzU3LCAzNjc2OCwgMzY3NzYsIDM2Nzg0LCAzNjc5NSwgMzY4MDYsIDM2ODE3LCAzNjgyOCwgCi0gICAgMzY4MzksIDM2ODUwLCAzNjg1OCwgMzY4NjYsIDM2ODc3LCAzNjg4OCwgMzY4OTksIDM2OTEwLCAzNjkyMSwgMzY5MzIsIAotICAgIDM2OTQwLCAzNjk0OCwgMzY5NTksIDM2OTcwLCAzNjk4MSwgMCwgMCwgMzY5OTIsIDM3MDAwLCAzNzAwOCwgMzcwMTksIAotICAgIDM3MDMwLCAzNzA0MSwgMCwgMCwgMzcwNTIsIDM3MDYwLCAzNzA2OCwgMzcwNzksIDM3MDkwLCAzNzEwMSwgMzcxMTIsIAotICAgIDM3MTIzLCAwLCAzNzEzNCwgMCwgMzcxNDIsIDAsIDM3MTUzLCAwLCAzNzE2NCwgMzcxNzUsIDM3MTgzLCAzNzE5MSwgCi0gICAgMzcyMDIsIDM3MjEzLCAzNzIyNCwgMzcyMzUsIDM3MjQ2LCAzNzI1NywgMzcyNjUsIDM3MjczLCAzNzI4NCwgMzcyOTUsIAotICAgIDM3MzA2LCAzNzMxNywgMzczMjgsIDM3MzM5LCAzNzM0NywgMzczNTUsIDM3MzYzLCAzNzM3MSwgMzczNzksIDM3Mzg3LCAKLSAgICAzNzM5NSwgMzc0MDMsIDM3NDExLCAzNzQxOSwgMzc0MjcsIDM3NDM1LCAzNzQ0MywgMCwgMCwgMzc0NTEsIDM3NDYyLCAKLSAgICAzNzQ3MywgMzc0ODcsIDM3NTAxLCAzNzUxNSwgMzc1MjksIDM3NTQzLCAzNzU1NywgMzc1NjgsIDM3NTc5LCAzNzU5MywgCi0gICAgMzc2MDcsIDM3NjIxLCAzNzYzNSwgMzc2NDksIDM3NjYzLCAzNzY3NCwgMzc2ODUsIDM3Njk5LCAzNzcxMywgMzc3MjcsIAotICAgIDM3NzQxLCAzNzc1NSwgMzc3NjksIDM3NzgwLCAzNzc5MSwgMzc4MDUsIDM3ODE5LCAzNzgzMywgMzc4NDcsIDM3ODYxLCAKLSAgICAzNzg3NSwgMzc4ODYsIDM3ODk3LCAzNzkxMSwgMzc5MjUsIDM3OTM5LCAzNzk1MywgMzc5NjcsIDM3OTgxLCAzNzk5MiwgCi0gICAgMzgwMDMsIDM4MDE3LCAzODAzMSwgMzgwNDUsIDM4MDU5LCAzODA3MywgMzgwODcsIDM4MDk1LCAzODEwMywgMzgxMTQsIAotICAgIDM4MTIyLCAwLCAzODEzMywgMzgxNDEsIDM4MTUyLCAzODE2MCwgMzgxNjgsIDM4MTc2LCAzODE4NCwgMzgxOTIsIDM4MTk1LCAKLSAgICAzODE5OCwgMzgyMDEsIDM4MjA0LCAzODIxMCwgMzgyMjEsIDM4MjI5LCAwLCAzODI0MCwgMzgyNDgsIDM4MjU5LCAzODI2NywgCi0gICAgMzgyNzUsIDM4MjgzLCAzODI5MSwgMzgyOTksIDM4MzA1LCAzODMxMSwgMzgzMTcsIDM4MzI1LCAzODMzMywgMzgzNDQsIDAsIAotICAgIDAsIDM4MzU1LCAzODM2MywgMzgzNzQsIDM4MzgyLCAzODM5MCwgMzgzOTgsIDAsIDM4NDA2LCAzODQxMiwgMzg0MTgsIAotICAgIDM4NDI0LCAzODQzMiwgMzg0NDAsIDM4NDUxLCAzODQ2MiwgMzg0NzAsIDM4NDc4LCAzODQ4NiwgMzg0OTcsIDM4NTA1LCAKLSAgICAzODUxMywgMzg1MjEsIDM4NTI5LCAzODUzNywgMzg1NDMsIDM4NTQ5LCAwLCAwLCAzODU1MiwgMzg1NjMsIDM4NTcxLCAwLCAKLSAgICAzODU4MiwgMzg1OTAsIDM4NjAxLCAzODYwOSwgMzg2MTcsIDM4NjI1LCAzODYzMywgMzg2NDEsIDM4NjQ0LCAwLCAzODY0NywgCi0gICAgMzg2NTEsIDM4NjU1LCAzODY1OSwgMzg2NjMsIDM4NjY3LCAzODY3MSwgMzg2NzUsIDM4Njc5LCAzODY4MywgMzg2ODcsIAotICAgIDM4NjkxLCAzODY5NywgMzg3MDMsIDM4NzA5LCAzODcxMiwgMzg3MTUsIDM4NzE3LCAzODcyMSwgMzg3MjUsIDM4NzI5LCAKLSAgICAzODczMywgMzg3MzUsIDM4NzM5LCAzODc0MywgMzg3NDksIDM4NzU1LCAzODc2MiwgMzg3NjksIDM4Nzc0LCAzODc3OSwgCi0gICAgMzg3ODUsIDM4NzkxLCAzODc5MywgMzg3OTYsIDM4Nzk4LCAzODgwMiwgMzg4MDYsIDM4ODEwLCAzODgxMywgMzg4MTcsIAotICAgIDM4ODIxLCAzODgyNSwgMzg4MjksIDM4ODMzLCAzODgzOSwgMzg4NDMsIDM4ODQ3LCAzODg1MywgMzg4NTgsIDM4ODY1LCAKLSAgICAzODg2NywgMzg4NzAsIDM4ODc0LCAzODg3OCwgMzg4ODMsIDM4ODg5LCAzODg5MSwgMzg5MDAsIDM4OTA5LCAzODkxMiwgCi0gICAgMzg5MTYsIDM4OTE4LCAzODkyMCwgMzg5MjIsIDM4OTI1LCAzODkzMSwgMzg5MzMsIDM4OTM3LCAzODk0MSwgMzg5NDgsIAotICAgIDM4OTU1LCAzODk1OSwgMzg5NjQsIDM4OTY5LCAzODk3NCwgMzg5NzksIDM4OTgzLCAzODk4NywgMzg5OTAsIDM4OTk0LCAKLSAgICAzODk5OCwgMzkwMDUsIDM5MDEwLCAzOTAxNCwgMzkwMTgsIDM5MDIzLCAzOTAyNywgMzkwMzEsIDM5MDM2LCAzOTA0MSwgCi0gICAgMzkwNDUsIDM5MDQ5LCAzOTA1MywgMzkwNTUsIDM5MDYwLCAzOTA2NSwgMzkwNjksIDM5MDczLCAzOTA3NywgMzkwODEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDM5MDg1LCAzOTA5MSwgMzkwOTcsIDM5MTA0LCAzOTExMSwgMzkxMTYsIDM5MTIxLCAzOTEyNSwgMCwgMCwgCi0gICAgMzkxMzEsIDM5MTM0LCAzOTEzNywgMzkxNDAsIDM5MTQzLCAzOTE0NiwgMzkxNDksIDM5MTUzLCAzOTE1NywgMzkxNjIsIAotICAgIDM5MTY3LCAzOTE3MiwgMzkxNzksIDM5MTgzLCAzOTE4NiwgMzkxODksIDM5MTkyLCAzOTE5NSwgMzkxOTgsIDM5MjAxLCAKLSAgICAzOTIwNCwgMzkyMDcsIDM5MjEwLCAzOTIxNCwgMzkyMTgsIDM5MjIzLCAzOTIyOCwgMCwgMzkyMzMsIDM5MjM5LCAzOTI0NSwgCi0gICAgMzkyNTEsIDM5MjU4LCAzOTI2NSwgMzkyNzIsIDM5Mjc5LCAzOTI4NSwgMzkyOTEsIDM5Mjk4LCAzOTMwNSwgMzkzMTIsIDAsIAotICAgIDAsIDAsIDM5MzE5LCAzOTMyMiwgMzkzMjUsIDM5MzI4LCAzOTMzMywgMzkzMzYsIDM5MzM5LCAzOTM0MiwgMzkzNDUsIAotICAgIDM5MzQ4LCAzOTM1MSwgMzkzNTUsIDM5MzU4LCAzOTM2MSwgMzkzNjQsIDM5MzY3LCAzOTM3MCwgMzkzNzUsIDM5Mzc4LCAKLSAgICAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgMzkzOTUsIDM5Mzk4LCAzOTQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk0MDYsIDM5NDExLCAzOTQxNiwgMzk0MjMsIAotICAgIDM5NDMxLCAzOTQzNiwgMzk0NDEsIDM5NDQ1LCAzOTQ0OSwgMzk0NTQsIDM5NDYxLCAzOTQ2OCwgMzk0NzIsIDM5NDc3LCAKLSAgICAzOTQ4MiwgMzk0ODcsIDM5NDkyLCAzOTQ5OSwgMzk1MDQsIDM5NTA5LCAzOTUxNCwgMzk1MjMsIDM5NTMwLCAzOTUzNywgCi0gICAgMzk1NDEsIDM5NTQ2LCAzOTU1MiwgMzk1NTcsIDM5NTY0LCAzOTU3MywgMzk1ODIsIDM5NTg2LCAzOTU5MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk1OTQsIDM5NTk4LCAzOTYwNiwgMzk2MTAsIDM5NjE0LCAKLSAgICAzOTYxOSwgMzk2MjMsIDM5NjI3LCAzOTYzMSwgMzk2MzMsIDM5NjM3LCAzOTY0MSwgMzk2NDUsIDM5NjUwLCAzOTY1NCwgCi0gICAgMzk2NTgsIDM5NjY2LCAzOTY2OSwgMzk2NzMsIDM5Njc2LCAzOTY3OSwgMzk2ODUsIDM5Njg5LCAzOTY5MiwgMzk2OTgsIAotICAgIDM5NzAyLCAzOTcwNiwgMzk3MTAsIDM5NzEzLCAzOTcxNywgMzk3MjAsIDM5NzI0LCAzOTcyNiwgMzk3MjksIDM5NzMyLCAKLSAgICAzOTczNiwgMzk3MzgsIDM5NzQyLCAzOTc0NSwgMzk3NDgsIDM5NzUzLCAzOTc1OCwgMzk3NjUsIDM5NzY4LCAzOTc3MSwgCi0gICAgMzk3NzUsIDM5NzgwLCAzOTc4MywgMzk3ODYsIDM5Nzg5LCAzOTc5MywgMzk3OTgsIDM5ODAxLCAzOTgwNCwgMzk4MDYsIAotICAgIDM5ODA5LCAzOTgxMiwgMzk4MTUsIDM5ODE5LCAzOTgyNCwgMzk4MjcsIDM5ODMxLCAzOTgzNSwgMzk4MzksIDM5ODQzLCAKLSAgICAzOTg0OCwgMzk4NTQsIDM5ODU5LCAzOTg2NCwgMzk4NzAsIDM5ODc1LCAzOTg4MCwgMzk4ODQsIDM5ODg4LCAzOTg5MywgCi0gICAgMzk4OTcsIDM5OTAxLCAzOTkwNCwgMzk5MDYsIDM5OTExLCAzOTkxNywgMzk5MjQsIDM5OTMxLCAzOTkzOCwgMzk5NDUsIAotICAgIDM5OTUyLCAzOTk1OSwgMzk5NjYsIDM5OTczLCAzOTk4MSwgMzk5ODgsIDM5OTk2LCA0MDAwMywgNDAwMTAsIDQwMDE4LCAKLSAgICA0MDAyNiwgNDAwMzEsIDQwMDM2LCA0MDA0MSwgNDAwNDYsIDQwMDUxLCA0MDA1NiwgNDAwNjEsIDQwMDY2LCA0MDA3MSwgCi0gICAgNDAwNzYsIDQwMDgyLCA0MDA4OCwgNDAwOTQsIDQwMTAwLCA0MDEwNywgNDAxMTUsIDQwMTIyLCA0MDEyOCwgNDAxMzQsIAotICAgIDQwMTQwLCA0MDE0NiwgNDAxNTIsIDQwMTU4LCA0MDE2NCwgNDAxNzAsIDQwMTc2LCA0MDE4MywgNDAxOTAsIDQwMTk3LCAKLSAgICA0MDIwNCwgNDAyMTIsIDQwMjIxLCA0MDIyOSwgNDAyNDAsIDQwMjQ4LCA0MDI1NiwgNDAyNjUsIDQwMjcyLCA0MDI4MSwgCi0gICAgNDAyOTAsIDQwMjk4LCA0MDMwNywgMCwgMCwgMCwgMCwgMCwgMCwgNDAzMTUsIDQwMzE3LCA0MDMyMCwgNDAzMjIsIDQwMzI1LCAKLSAgICA0MDMyOCwgNDAzMzEsIDQwMzM2LCA0MDM0MSwgNDAzNDYsIDQwMzUxLCA0MDM1NSwgNDAzNTksIDQwMzYzLCA0MDM2NywgCi0gICAgNDAzNzIsIDQwMzc4LCA0MDM4MywgNDAzODksIDQwMzk0LCA0MDM5OSwgNDA0MDQsIDQwNDEwLCA0MDQxNSwgNDA0MjEsIAotICAgIDQwNDI3LCA0MDQzMSwgNDA0MzUsIDQwNDQwLCA0MDQ0NSwgNDA0NTAsIDQwNDU1LCA0MDQ2MCwgNDA0NjgsIDQwNDc2LCAKLSAgICA0MDQ4NCwgNDA0OTIsIDQwNDk5LCA0MDUwNywgNDA1MTQsIDQwNTIxLCA0MDUzMCwgNDA1NDIsIDQwNTQ4LCA0MDU1NCwgCi0gICAgNDA1NjIsIDQwNTcwLCA0MDU3OSwgNDA1ODgsIDQwNTk2LCA0MDYwNCwgNDA2MTMsIDQwNjIyLCA0MDYyNywgNDA2MzUsIAotICAgIDQwNjQwLCA0MDY0NSwgNDA2NTEsIDQwNjU2LCA0MDY2MiwgNDA2NjksIDQwNjc2LCA0MDY4MSwgNDA2ODcsIDQwNjkyLCAKLSAgICA0MDY5NSwgNDA2OTksIDQwNzAyLCA0MDcwNiwgNDA3MTAsIDQwNzE0LCA0MDcyMCwgNDA3MjYsIDQwNzMyLCA0MDczOCwgCi0gICAgNDA3NDIsIDQwNzQ2LCA0MDc1MCwgNDA3NTQsIDQwNzYwLCA0MDc2NiwgNDA3NzAsIDQwNzc1LCA0MDc3OSwgNDA3ODQsIAotICAgIDQwNzg5LCA0MDc5NCwgNDA3OTcsIDQwODAxLCA0MDgwNCwgNDA4MDgsIDQwODE1LCA0MDgyMywgNDA4MzQsIDQwODQ1LCAKLSAgICA0MDg1MCwgNDA4NTksIDQwODY2LCA0MDg3NSwgNDA4ODQsIDQwODg4LCA0MDg5NCwgNDA5MDIsIDQwOTA2LCA0MDkxMSwgCi0gICAgNDA5MTYsIDQwOTIyLCA0MDkyOCwgNDA5MzQsIDQwOTQxLCA0MDk0NSwgNDA5NDksIDQwOTU0LCA0MDk1NywgNDA5NTksIAotICAgIDQwOTYzLCA0MDk2NywgNDA5NzUsIDQwOTc5LCA0MDk4MSwgNDA5ODMsIDQwOTg3LCA0MDk5NSwgNDEwMDAsIDQxMDA2LCAKLSAgICA0MTAxNiwgNDEwMjMsIDQxMDI4LCA0MTAzMiwgNDEwMzYsIDQxMDQwLCA0MTA0MywgNDEwNDYsIDQxMDQ5LCA0MTA1MywgCi0gICAgNDEwNTcsIDQxMDYxLCA0MTA2NSwgNDEwNjksIDQxMDcyLCA0MTA3NiwgNDEwODAsIDQxMDgzLCA0MTA4NSwgNDEwODgsIAotICAgIDQxMDkwLCA0MTA5NCwgNDEwOTgsIDQxMTAwLCA0MTEwNiwgNDExMDksIDQxMTE0LCA0MTExOCwgNDExMjIsIDQxMTI0LCAKLSAgICA0MTEyNiwgNDExMjgsIDQxMTMxLCA0MTEzNSwgNDExMzksIDQxMTQzLCA0MTE0NywgNDExNTEsIDQxMTU3LCA0MTE2MywgCi0gICAgNDExNjUsIDQxMTY3LCA0MTE2OSwgNDExNzEsIDQxMTc0LCA0MTE3NiwgNDExODAsIDQxMTgyLCA0MTE4NiwgNDExODksIAotICAgIDQxMTk1LCA0MTE5OSwgNDEyMDMsIDQxMjA2LCA0MTIwOSwgNDEyMTMsIDQxMjE5LCA0MTIyMywgNDEyMzMsIDQxMjQzLCAKLSAgICA0MTI0NywgNDEyNTMsIDQxMjU5LCA0MTI2MiwgNDEyNjYsIDQxMjY5LCA0MTI3NCwgNDEyNzgsIDQxMjg0LCA0MTI4OCwgCi0gICAgNDEzMDAsIDQxMzA4LCA0MTMxMiwgNDEzMTYsIDQxMzIyLCA0MTMyNiwgNDEzMjksIDQxMzMxLCA0MTMzNCwgNDEzMzgsIAotICAgIDQxMzQyLCA0MTM0OSwgNDEzNTMsIDQxMzU3LCA0MTM2MSwgNDEzNjQsIDQxMzY5LCA0MTM3NCwgNDEzNzksIDQxMzg0LCAKLSAgICA0MTM4OSwgNDEzOTQsIDQxNDAyLCA0MTQxMCwgNDE0MTQsIDQxNDE4LCA0MTQyMCwgNDE0MjUsIDQxNDI5LCA0MTQzMywgCi0gICAgNDE0NDEsIDQxNDQ5LCA0MTQ1NSwgNDE0NjEsIDQxNDcwLCA0MTQ3OSwgNDE0ODQsIDQxNDg5LCA0MTQ5NywgNDE1MDUsIAotICAgIDQxNTA3LCA0MTUwOSwgNDE1MTQsIDQxNTE5LCA0MTUyNSwgNDE1MzEsIDQxNTM3LCA0MTU0MywgNDE1NDcsIDQxNTUxLCAKLSAgICA0MTU1OCwgNDE1NjUsIDQxNTcxLCA0MTU3NywgNDE1ODcsIDQxNTk3LCA0MTYwNSwgNDE2MTMsIDQxNjE1LCA0MTYxOSwgCi0gICAgNDE2MjMsIDQxNjI4LCA0MTYzMywgNDE2NDAsIDQxNjQ3LCA0MTY1MCwgNDE2NTMsIDQxNjU2LCA0MTY1OSwgNDE2NjIsIAotICAgIDQxNjY3LCA0MTY3MSwgNDE2NzYsIDQxNjgxLCA0MTY4NCwgNDE2ODcsIDQxNjkwLCA0MTY5MywgNDE2OTYsIDQxNzAwLCAKLSAgICA0MTcwMywgNDE3MDYsIDQxNzA5LCA0MTcxMiwgNDE3MTQsIDQxNzE2LCA0MTcxOCwgNDE3MjAsIDQxNzI4LCA0MTczNiwgCi0gICAgNDE3NDIsIDQxNzQ2LCA0MTc1MiwgNDE3NjIsIDQxNzY4LCA0MTc3NCwgNDE3ODAsIDQxNzg4LCA0MTc5NiwgNDE4MDcsIAotICAgIDQxODExLCA0MTgxNSwgNDE4MTcsIDQxODIzLCA0MTgyNSwgNDE4MjcsIDQxODI5LCA0MTgzMSwgNDE4MzcsIDQxODQwLCAKLSAgICA0MTg0NiwgNDE4NTIsIDQxODU2LCA0MTg2MCwgNDE4NjQsIDQxODY3LCA0MTg3MSwgNDE4NzUsIDQxODc3LCA0MTg4NiwgCi0gICAgNDE4OTUsIDQxOTAwLCA0MTkwNSwgNDE5MTEsIDQxOTE3LCA0MTkyMywgNDE5MjYsIDQxOTI5LCA0MTkzMiwgNDE5MzUsIAotICAgIDQxOTM3LCA0MTk0MiwgNDE5NDcsIDQxOTUyLCA0MTk1OCwgNDE5NjQsIDQxOTcyLCA0MTk4MCwgNDE5ODYsIDQxOTkyLCAKLSAgICA0MTk5OCwgNDIwMDQsIDQyMDEzLCA0MjAyMiwgNDIwMzEsIDQyMDQwLCA0MjA0OSwgNDIwNTgsIDQyMDY3LCA0MjA3NiwgCi0gICAgNDIwODUsIDQyMDk0LCA0MjEwMiwgNDIxMTQsIDQyMTI0LCA0MjEzOSwgNDIxNDIsIDQyMTQ3LCA0MjE1MywgNDIxNTksIAotICAgIDQyMTY2LCA0MjE4MCwgNDIxOTUsIDQyMjAxLCA0MjIwNywgNDIyMTQsIDQyMjIwLCA0MjIyOCwgNDIyMzQsIDQyMjQ3LCAKLSAgICA0MjI2MSwgNDIyNjYsIDQyMjcyLCA0MjI3OSwgNDIyODIsIDQyMjg1LCA0MjI4NywgNDIyOTAsIDQyMjkzLCA0MjI5NSwgCi0gICAgNDIyOTcsIDQyMzAxLCA0MjMwNCwgNDIzMDcsIDQyMzEwLCA0MjMxMywgNDIzMTgsIDQyMzIzLCA0MjMyOCwgNDIzMzMsIAotICAgIDQyMzM4LCA0MjM0MSwgNDIzNDMsIDQyMzQ1LCA0MjM0NywgNDIzNTEsIDQyMzU1LCA0MjM1OSwgNDIzNjUsIDQyMzcwLCAKLSAgICA0MjM3MiwgNDIzNzQsIDQyMzc5LCA0MjM4NCwgNDIzODksIDQyMzk0LCA0MjM5OSwgNDI0MDQsIDQyNDA2LCA0MjQwOCwgCi0gICAgNDI0MTcsIDQyNDIxLCA0MjQyOSwgNDI0MzgsIDQyNDQwLCA0MjQ0NSwgNDI0NTAsIDQyNDU4LCA0MjQ2MiwgNDI0NjQsIAotICAgIDQyNDY4LCA0MjQ3MCwgNDI0NzQsIDQyNDc4LCA0MjQ4MiwgNDI0ODQsIDQyNDg2LCA0MjQ4OCwgNDI0OTUsIDQyNTA0LCAKLSAgICA0MjUxMywgNDI1MjIsIDQyNTMxLCA0MjU0MCwgNDI1NDksIDQyNTU4LCA0MjU2NywgNDI1NzUsIDQyNTgzLCA0MjU5MiwgCi0gICAgNDI2MDEsIDQyNjEwLCA0MjYxOSwgNDI2MjcsIDQyNjM1LCA0MjY0NCwgNDI2NTMsIDQyNjYyLCA0MjY3MiwgNDI2ODEsIAotICAgIDQyNjkxLCA0MjcwMCwgNDI3MTAsIDQyNzE5LCA0MjcyOSwgNDI3MzksIDQyNzQ4LCA0Mjc1OCwgNDI3NjcsIDQyNzc3LCAKLSAgICA0Mjc4NiwgNDI3OTYsIDQyODA1LCA0MjgxNCwgNDI4MjMsIDQyODMyLCA0Mjg0MSwgNDI4NTEsIDQyODYwLCA0Mjg2OSwgCi0gICAgNDI4NzgsIDQyODg4LCA0Mjg5NywgNDI5MDYsIDQyOTE1LCA0MjkyNCwgNDI5MzQsIDQyOTQ0LCA0Mjk1MywgNDI5NjIsIAotICAgIDQyOTcwLCA0Mjk3OCwgNDI5ODUsIDQyOTkzLCA0MzAwMiwgNDMwMTMsIDQzMDIyLCA0MzAzMSwgNDMwNDAsIDQzMDQ3LCAKLSAgICA0MzA1NCwgNDMwNjEsIDQzMDcwLCA0MzA3OSwgNDMwODgsIDQzMDk3LCA0MzEwNCwgNDMxMDksIDQzMTE4LCA0MzEyMywgCi0gICAgNDMxMjYsIDQzMTM0LCA0MzEzNywgNDMxNDIsIDQzMTQ3LCA0MzE1MCwgNDMxNTMsIDQzMTYxLCA0MzE2NCwgNDMxNjksIAotICAgIDQzMTcyLCA0MzE3OSwgNDMxODQsIDQzMTkyLCA0MzE5NSwgNDMxOTgsIDQzMjAxLCA0MzIwNiwgNDMyMTEsIDQzMjE0LCAKLSAgICA0MzIxNywgNDMyMjUsIDQzMjI4LCA0MzIzNSwgNDMyNDIsIDQzMjQ2LCA0MzI1MCwgNDMyNTUsIDQzMjYwLCA0MzI2NiwgCi0gICAgNDMyNzEsIDQzMjc3LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzMwMiwgNDMzMDgsIDQzMzE2LCA0MzMyNCwgNDMzMzAsIAotICAgIDQzMzM4LCA0MzM0NiwgNDMzNTUsIDQzMzYzLCA0MzM2OSwgNDMzNzcsIDQzMzg2LCA0MzM5NCwgNDMzOTgsIDQzNDAzLCAKLSAgICA0MzQxNiwgNDM0MjksIDQzNDMzLCA0MzQzNywgNDM0NDEsIDQzNDQ1LCA0MzQ1NSwgNDM0NTksIDQzNDY0LCA0MzQ2OSwgCi0gICAgNDM0NzQsIDQzNDc5LCA0MzQ4NCwgNDM0ODksIDQzNDk5LCA0MzUwOSwgNDM1MTcsIDQzNTI3LCA0MzUzNywgNDM1NDUsIAotICAgIDQzNTU1LCA0MzU2NSwgNDM1NzMsIDQzNTgzLCA0MzU5MywgNDM2MDEsIDQzNjA5LCA0MzYxOSwgNDM2MjksIDQzNjMyLCAKLSAgICA0MzYzNSwgNDM2MzgsIDQzNjQzLCA0MzY0NywgNDM2NTMsIDQzNjYwLCA0MzY2NywgNDM2NzUsIDQzNjgyLCA0MzY4NiwgCi0gICAgNDM2OTAsIDQzNjk0LCA0MzY5OCwgNDM3MDAsIDQzNzA0LCA0MzcwOCwgNDM3MTMsIDQzNzE4LCA0MzcyNSwgNDM3MzIsIAotICAgIDQzNzM1LCA0Mzc0MiwgNDM3NDQsIDQzNzQ2LCA0Mzc1MCwgNDM3NTQsIDQzNzU5LCA0Mzc2NSwgNDM3NzEsIDQzNzc3LCAKLSAgICA0Mzc4MywgNDM3OTIsIDQzODAxLCA0MzgxMCwgNDM4MTQsIDQzODE2LCA0MzgyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDM4MjcsIDQzODMxLCA0MzgzOCwgNDM4NDUsIDQzODUyLCA0Mzg1OSwgNDM4NjMsIDQzODY3LCAKLSAgICA0Mzg3MSwgNDM4NzUsIDQzODgwLCA0Mzg4NiwgNDM4OTEsIDQzODk3LCA0MzkwMywgNDM5MDksIDQzOTE1LCA0MzkyMywgCi0gICAgNDM5MzAsIDQzOTM3LCA0Mzk0NCwgNDM5NTEsIDQzOTU2LCA0Mzk2MiwgNDM5NzEsIDQzOTc1LCA0Mzk4MiwgNDM5ODYsIAotICAgIDQzOTkwLCA0Mzk5NiwgNDQwMDIsIDQ0MDA4LCA0NDAxNCwgNDQwMTgsIDQ0MDIyLCA0NDAyNSwgNDQwMjgsIDQ0MDMyLCAKLSAgICA0NDAzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDQwNDYsIDQ0MDQ5LCA0NDA1MywgNDQwNTcsIDQ0MDYzLCA0NDA2OSwgNDQwNzUsIDQ0MDgzLCA0NDA5MCwgCi0gICAgNDQwOTQsIDQ0MTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NDEwNywgNDQxMTAsIDQ0MTEzLCA0NDExNiwgNDQxMTksIDQ0MTIyLCA0NDEyNSwgNDQxMjgsIDQ0MTMxLCA0NDEzNCwgCi0gICAgNDQxMzgsIDQ0MTQyLCA0NDE0NiwgNDQxNTAsIDQ0MTU0LCA0NDE1OCwgNDQxNjIsIDQ0MTY2LCA0NDE3MCwgNDQxNzQsIAotICAgIDQ0MTc4LCA0NDE4MSwgNDQxODQsIDQ0MTg3LCA0NDE5MCwgNDQxOTMsIDQ0MTk2LCA0NDE5OSwgNDQyMDIsIDQ0MjA1LCAKLSAgICA0NDIwOSwgNDQyMTMsIDQ0MjE3LCA0NDIyMSwgNDQyMjUsIDQ0MjI5LCA0NDIzMywgNDQyMzcsIDQ0MjQxLCA0NDI0NSwgCi0gICAgNDQyNDksIDQ0MjU1LCA0NDI2MSwgNDQyNjcsIDQ0Mjc0LCA0NDI4MSwgNDQyODgsIDQ0Mjk1LCA0NDMwMiwgNDQzMDksIAotICAgIDQ0MzE2LCA0NDMyMywgNDQzMzAsIDQ0MzM3LCA0NDM0NCwgNDQzNTEsIDQ0MzU4LCA0NDM2NSwgNDQzNzIsIDQ0Mzc5LCAKLSAgICA0NDM4NiwgNDQzOTEsIDQ0Mzk3LCA0NDQwMywgNDQ0MDksIDQ0NDE0LCA0NDQyMCwgNDQ0MjYsIDQ0NDMyLCA0NDQzNywgCi0gICAgNDQ0NDMsIDQ0NDQ5LCA0NDQ1NCwgNDQ0NTksIDQ0NDY1LCA0NDQ3MCwgNDQ0NzYsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAotICAgIDQ0NDk5LCA0NDUwNCwgNDQ1MTAsIDQ0NTE2LCA0NDUyMiwgNDQ1MjgsIDQ0NTM0LCA0NDUzOSwgNDQ1NDUsIDQ0NTUxLCAKLSAgICA0NDU1NywgNDQ1NjIsIDQ0NTY4LCA0NDU3NCwgNDQ1ODAsIDQ0NTg1LCA0NDU5MSwgNDQ1OTcsIDQ0NjAyLCA0NDYwNywgCi0gICAgNDQ2MTMsIDQ0NjE4LCA0NDYyNCwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDcsIDQ0NjUyLCA0NDY1OCwgNDQ2NjQsIAotICAgIDQ0NjcwLCA0NDY3NiwgNDQ2ODIsIDQ0Njg3LCA0NDY5MywgNDQ2OTksIDQ0NzA1LCA0NDcxMCwgNDQ3MTYsIDQ0NzIyLCAKLSAgICA0NDcyOCwgNDQ3MzMsIDQ0NzM5LCA0NDc0NSwgNDQ3NTAsIDQ0NzU1LCA0NDc2MSwgNDQ3NjYsIDQ0NzcyLCA0NDc3OCwgCi0gICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NSwgNDQ4MDAsIDQ0ODA2LCA0NDgxMiwgNDQ4MTgsIDQ0ODI0LCA0NDgzMCwgNDQ4MzQsIAotICAgIDQ0ODM5LCA0NDg0NCwgNDQ4NDksIDQ0ODU0LCA0NDg1OSwgNDQ4NjQsIDQ0ODY5LCA0NDg3NCwgNDQ4NzksIDQ0ODg0LCAKLSAgICA0NDg4OCwgNDQ4OTIsIDQ0ODk2LCA0NDkwMCwgNDQ5MDQsIDQ0OTA4LCA0NDkxMiwgNDQ5MTYsIDQ0OTIwLCA0NDkyNSwgCi0gICAgNDQ5MzAsIDQ0OTM1LCA0NDk0MCwgNDQ5NDUsIDQ0OTUwLCA0NDk1OSwgNDQ5NjgsIDQ0OTc3LCA0NDk4NiwgNDQ5OTUsIAotICAgIDQ1MDA0LCA0NTAxMywgNDUwMjIsIDQ1MDI5LCA0NTAzNywgNDUwNDUsIDQ1MDUyLCA0NTA1OSwgNDUwNjcsIDQ1MDc1LCAKLSAgICA0NTA4MiwgNDUwODksIDQ1MDk3LCA0NTEwNSwgNDUxMTIsIDQ1MTE5LCA0NTEyNywgNDUxMzUsIDQ1MTQyLCA0NTE0OSwgCi0gICAgNDUxNTcsIDQ1MTY2LCA0NTE3NSwgNDUxODMsIDQ1MTkyLCA0NTIwMSwgNDUyMDgsIDQ1MjE1LCA0NTIyMywgNDUyMzIsIAotICAgIDQ1MjQxLCA0NTI0OSwgNDUyNTgsIDQ1MjY3LCA0NTI3NCwgNDUyODEsIDQ1MjkwLCA0NTI5OSwgNDUzMDcsIDQ1MzE1LCAKLSAgICA0NTMyNCwgNDUzMzMsIDQ1MzQwLCA0NTM0NywgNDUzNTYsIDQ1MzY1LCA0NTM3MywgNDUzODEsIDQ1MzkwLCA0NTM5OSwgCi0gICAgNDU0MDYsIDQ1NDEzLCA0NTQyMiwgNDU0MzEsIDQ1NDM5LCA0NTQ0OCwgNDU0NTcsIDQ1NDY1LCA0NTQ3NSwgNDU0ODUsIAotICAgIDQ1NDk1LCA0NTUwNSwgNDU1MTQsIDQ1NTIzLCA0NTUzMiwgNDU1NDEsIDQ1NTQ4LCA0NTU1NiwgNDU1NjQsIDQ1NTcyLCAKLSAgICA0NTU4MCwgNDU1ODUsIDQ1NTkwLCA0NTU5OSwgNDU2MDcsIDQ1NjE0LCA0NTYyMywgNDU2MzEsIDQ1NjM4LCA0NTY0NywgCi0gICAgNDU2NTUsIDQ1NjYyLCA0NTY3MSwgNDU2NzksIDQ1Njg2LCA0NTY5NSwgNDU3MDMsIDQ1NzEwLCA0NTcxOSwgNDU3MjcsIAotICAgIDQ1NzM0LCA0NTc0MywgNDU3NTEsIDQ1NzU4LCA0NTc2NywgNDU3NzUsIDQ1NzgyLCA0NTc5MSwgNDU3OTksIDQ1ODA2LCAKLSAgICA0NTgxNSwgNDU4MjQsIDQ1ODMzLCA0NTg0MiwgNDU4NTYsIDQ1ODcwLCA0NTg3NywgNDU4ODIsIDQ1ODg3LCA0NTg5MiwgCi0gICAgNDU4OTcsIDQ1OTAyLCA0NTkwNywgNDU5MTIsIDQ1OTE3LCA0NTkyNSwgNDU5MzMsIDQ1OTQxLCA0NTk0OSwgNDU5NTQsIAotICAgIDQ1OTYxLCA0NTk2OCwgNDU5NzUsIDQ1OTgwLCA0NTk4OCwgNDU5OTUsIDQ2MDAzLCA0NjAwNywgNDYwMTQsIDQ2MDIwLCAKLSAgICA0NjAyNywgNDYwMzEsIDQ2MDM3LCA0NjA0MywgNDYwNDksIDQ2MDUzLCA0NjA1NiwgNDYwNjAsIDQ2MDY0LCA0NjA3MSwgCi0gICAgNDYwNzcsIDQ2MDgzLCA0NjA4OSwgNDYwOTUsIDQ2MTA5LCA0NjExOSwgNDYxMzMsIDQ2MTQ3LCA0NjE1MywgNDYxNjMsIAotICAgIDQ2MTc3LCA0NjE4MCwgNDYxODMsIDQ2MTkwLCA0NjE5OCwgNDYyMDMsIDQ2MjA4LCA0NjIxNiwgNDYyMjgsIDQ2MjQwLCAKLSAgICA0NjI0OCwgNDYyNTIsIDQ2MjU2LCA0NjI1OSwgNDYyNjIsIDQ2MjY2LCA0NjI3MCwgNDYyNzMsIDQ2Mjc2LCA0NjI4MSwgCi0gICAgNDYyODYsIDQ2MjkyLCA0NjI5OCwgNDYzMDMsIDQ2MzA4LCA0NjMxNCwgNDYzMjAsIDQ2MzI1LCA0NjMzMCwgNDYzMzUsIAotICAgIDQ2MzQwLCA0NjM0NiwgNDYzNTIsIDQ2MzU3LCA0NjM2MiwgNDYzNjgsIDQ2Mzc0LCA0NjM3OSwgNDYzODQsIDQ2Mzg3LCAKLSAgICA0NjM5MCwgNDYzOTksIDQ2NDAxLCA0NjQwMywgNDY0MDYsIDQ2NDEwLCA0NjQxNiwgNDY0MTgsIDQ2NDIxLCA0NjQyOCwgCi0gICAgNDY0MzUsIDQ2NDQzLCA0NjQ1MSwgNDY0NjEsIDQ2NDc1LCA0NjQ4MCwgNDY0ODUsIDQ2NDg5LCA0NjQ5NCwgNDY1MDIsIAotICAgIDQ2NTEwLCA0NjUxOSwgNDY1MjgsIDQ2NTM3LCA0NjU0NiwgNDY1NTEsIDQ2NTU2LCA0NjU2MiwgNDY1NjgsIDQ2NTc0LCAKLSAgICA0NjU4MCwgNDY1ODMsIDQ2NTg5LCA0NjU5NSwgNDY2MDUsIDQ2NjE1LCA0NjYyMywgNDY2MzEsIDQ2NjQwLCA0NjY0OSwgCi0gICAgNDY2NTMsIDQ2NjYxLCA0NjY2OSwgNDY2NzcsIDQ2Njg1LCA0NjY5NCwgNDY3MDMsIDQ2NzEyLCA0NjcyMSwgNDY3MjYsIAotICAgIDQ2NzMxLCA0NjczNiwgNDY3NDEsIDQ2NzQ2LCA0Njc1MiwgNDY3NTgsIDQ2NzYzLCA0Njc2OSwgNDY3NzEsIDQ2NzczLCAKLSAgICA0Njc3NSwgNDY3NzcsIDQ2NzgwLCA0Njc4MywgNDY3ODUsIDQ2Nzg3LCA0Njc4OSwgNDY3OTMsIDQ2Nzk3LCA0Njc5OSwgCi0gICAgNDY4MDEsIDQ2ODA0LCA0NjgwNywgNDY4MTEsIDQ2ODE3LCA0NjgyMywgNDY4MjUsIDQ2ODMyLCA0NjgzNiwgNDY4NDEsIAotICAgIDQ2ODQ2LCA0Njg0OCwgNDY4NTgsIDQ2ODY0LCA0Njg3MCwgNDY4NzYsIDQ2ODgyLCA0Njg4OCwgNDY4OTQsIDQ2ODk5LCAKLSAgICA0NjkwMiwgNDY5MDUsIDQ2OTA4LCA0NjkxMCwgNDY5MTIsIDQ2OTE2LCA0NjkyMCwgNDY5MjUsIDQ2OTMwLCA0NjkzNSwgCi0gICAgNDY5MzgsIDQ2OTQyLCA0Njk0NywgNDY5NTAsIDQ2OTU0LCA0Njk1OSwgNDY5NjQsIDQ2OTY5LCA0Njk3NCwgNDY5NzksIAotICAgIDQ2OTg0LCA0Njk4OSwgNDY5OTQsIDQ2OTk5LCA0NzAwNCwgNDcwMDksIDQ3MDE0LCA0NzAyMCwgNDcwMjYsIDQ3MDMyLCAKLSAgICA0NzAzNCwgNDcwMzcsIDQ3MDM5LCA0NzA0MiwgNDcwNDQsIDQ3MDQ2LCA0NzA0OCwgNDcwNTAsIDQ3MDUyLCA0NzA1NCwgCi0gICAgNDcwNTYsIDQ3MDU4LCA0NzA2MCwgNDcwNjIsIDQ3MDY0LCA0NzA2NiwgNDcwNjgsIDQ3MDcwLCA0NzA3MiwgNDcwNzQsIAotICAgIDQ3MDc2LCA0NzA4MSwgNDcwODYsIDQ3MDkxLCA0NzA5NiwgNDcxMDEsIDQ3MTA2LCA0NzExMSwgNDcxMTYsIDQ3MTIxLCAKLSAgICA0NzEyNiwgNDcxMzEsIDQ3MTM2LCA0NzE0MSwgNDcxNDYsIDQ3MTUxLCA0NzE1NiwgNDcxNjEsIDQ3MTY2LCA0NzE3MSwgCi0gICAgNDcxNzYsIDQ3MTgwLCA0NzE4NCwgNDcxODgsIDQ3MTk0LCA0NzIwMCwgNDcyMDUsIDQ3MjEwLCA0NzIxNSwgNDcyMjAsIAotICAgIDQ3MjI1LCA0NzIzMCwgNDcyMzgsIDQ3MjQ2LCA0NzI1NCwgNDcyNjIsIDQ3MjcwLCA0NzI3OCwgNDcyODYsIDQ3Mjk0LCAKLSAgICA0NzMwMCwgNDczMDUsIDQ3MzEwLCA0NzMxNSwgNDczMTgsIDQ3MzIyLCA0NzMyNiwgNDczMzAsIDQ3MzM0LCA0NzMzOCwgCi0gICAgNDczNDIsIDQ3MzQ5LCA0NzM1NiwgNDczNjQsIDQ3MzcyLCA0NzM3NywgNDczODIsIDQ3Mzg5LCA0NzM5NiwgNDc0MDMsIAotICAgIDQ3NDEwLCA0NzQxMywgNDc0MTYsIDQ3NDIxLCA0NzQyMywgNDc0MjcsIDQ3NDMyLCA0NzQzNCwgNDc0MzYsIDQ3NDM4LCAKLSAgICA0NzQ0MCwgNDc0NDUsIDQ3NDQ4LCA0NzQ1MCwgNDc0NTUsIDQ3NDYyLCA0NzQ2OSwgNDc0NzIsIDQ3NDc2LCA0NzQ4MSwgCi0gICAgNDc0ODYsIDQ3NDk0LCA0NzUwMCwgNDc1MDYsIDQ3NTE4LCA0NzUyNSwgNDc1MzIsIDQ3NTM3LCA0NzU0MiwgNDc1NDgsIAotICAgIDQ3NTUxLCA0NzU1NCwgNDc1NTksIDQ3NTYxLCA0NzU2NSwgNDc1NjcsIDQ3NTY5LCA0NzU3MSwgNDc1NzMsIDQ3NTc1LCAKLSAgICA0NzU3NywgNDc1ODIsIDQ3NTg0LCA0NzU4NiwgNDc1ODgsIDQ3NTkwLCA0NzU5NCwgNDc1OTYsIDQ3NTk5LCA0NzYwNCwgCi0gICAgNDc2MDksIDQ3NjE0LCA0NzYxOSwgNDc2MjUsIDQ3NjMxLCA0NzYzMywgNDc2MzYsIDQ3NjQzLCA0NzY1MCwgNDc2NTcsIAotICAgIDQ3NjY0LCA0NzY2OCwgNDc2NzIsIDQ3Njc0LCA0NzY3NiwgNDc2ODAsIDQ3Njg2LCA0NzY5MSwgNDc2OTMsIDQ3Njk3LCAKLSAgICA0NzcwNiwgNDc3MTQsIDQ3NzIyLCA0NzcyOCwgNDc3MzQsIDQ3NzM5LCA0Nzc0NSwgNDc3NTAsIDQ3NzUzLCA0Nzc2NywgCi0gICAgNDc3NzAsIDQ3Nzc1LCA0Nzc4MCwgNDc3ODYsIDQ3Nzk2LCA0Nzc5OCwgNDc4MDQsIDQ3ODEwLCA0NzgxNCwgNDc4MjEsIAotICAgIDQ3ODI1LCA0NzgyNywgNDc4MjksIDQ3ODMzLCA0NzgzOSwgNDc4NDQsIDQ3ODUwLCA0Nzg1MiwgNDc4NTgsIDQ3ODYwLCAKLSAgICA0Nzg2NiwgNDc4NjgsIDQ3ODcwLCA0Nzg3NSwgNDc4NzcsIDQ3ODgxLCA0Nzg4NiwgNDc4ODgsIDQ3ODkzLCA0Nzg5OCwgCi0gICAgNDc5MDIsIDQ3OTA5LCAwLCA0NzkxOSwgNDc5MjUsIDQ3OTI4LCA0NzkzNCwgNDc5MzcsIDQ3OTQyLCA0Nzk0NywgNDc5NTEsIAotICAgIDQ3OTUzLCA0Nzk1NSwgNDc5NTksIDQ3OTYzLCA0Nzk2NywgNDc5NzEsIDQ3OTc2LCA0Nzk3OCwgNDc5ODMsIDQ3OTg2LCAKLSAgICA0Nzk4OSwgNDc5OTIsIDQ3OTk2LCA0ODAwMCwgNDgwMDUsIDQ4MDA5LCA0ODAxNCwgNDgwMTksIDQ4MDIzLCA0ODAyOCwgCi0gICAgNDgwMzQsIDQ4MDM3LCA0ODA0MywgNDgwNDgsIDQ4MDUyLCA0ODA1NywgNDgwNjMsIDQ4MDY5LCA0ODA3NiwgNDgwODIsIAotICAgIDQ4MDg5LCA0ODA5NiwgNDgwOTgsIDQ4MTA1LCA0ODEwOSwgNDgxMTUsIDQ4MTIxLCA0ODEyNiwgNDgxMzIsIDQ4MTM2LCAKLSAgICA0ODE0MSwgNDgxNDQsIDQ4MTQ5LCA0ODE1NSwgNDgxNjIsIDQ4MTcwLCA0ODE3NywgNDgxODYsIDQ4MTk2LCA0ODIwMywgCi0gICAgNDgyMDksIDQ4MjEzLCA0ODIyMCwgNDgyMjUsIDQ4MjM0LCA0ODIzNywgNDgyNDAsIDQ4MjQ5LCA0ODI1OSwgNDgyNjYsIAotICAgIDQ4MjY4LCA0ODI3NCwgNDgyNzksIDQ4MjgxLCA0ODI4NCwgNDgyODgsIDQ4Mjk2LCA0ODMwNSwgNDgzMDgsIDQ4MzEzLCAKLSAgICA0ODMxOCwgNDgzMjYsIDQ4MzM0LCA0ODM0MiwgNDgzNTAsIDQ4MzU2LCA0ODM2MiwgNDgzNjgsIDQ4Mzc2LCA0ODM4MSwgCi0gICAgNDgzODQsIDQ4Mzg4LCA0ODM5MSwgNDg0MDMsIDQ4NDEzLCA0ODQyNCwgNDg0MzMsIDQ4NDQ0LCA0ODQ1NCwgNDg0NjMsIAotICAgIDQ4NDY5LCA0ODQ3NywgNDg0ODEsIDQ4NDg5LCA0ODQ5MywgNDg1MDEsIDQ4NTA4LCA0ODUxNSwgNDg1MjQsIDQ4NTMzLCAKLSAgICA0ODU0MywgNDg1NTMsIDQ4NTYzLCA0ODU3MywgNDg1ODIsIDQ4NTkxLCA0ODYwMSwgNDg2MTEsIDQ4NjIwLCA0ODYyOSwgCi0gICAgNDg2MzUsIDQ4NjQxLCA0ODY0NywgNDg2NTMsIDQ4NjU5LCA0ODY2NSwgNDg2NzEsIDQ4Njc3LCA0ODY4MywgNDg2OTAsIAotICAgIDQ4Njk2LCA0ODcwMiwgNDg3MDgsIDQ4NzE0LCA0ODcyMCwgNDg3MjYsIDQ4NzMyLCA0ODczOCwgNDg3NDQsIDQ4NzUxLCAKLSAgICA0ODc1OCwgNDg3NjUsIDQ4NzcyLCA0ODc3OSwgNDg3ODYsIDQ4NzkzLCA0ODgwMCwgNDg4MDcsIDQ4ODE0LCA0ODgyMiwgCi0gICAgNDg4MjcsIDQ4ODMwLCA0ODgzNCwgNDg4MzgsIDQ4ODQ0LCA0ODg0NywgNDg4NTMsIDQ4ODU5LCA0ODg2NCwgNDg4NjgsIAotICAgIDQ4ODczLCA0ODg3OSwgNDg4ODYsIDQ4ODg5LCA0ODg5NiwgNDg5MDMsIDQ4OTA3LCA0ODkxNiwgNDg5MjUsIDQ4OTMwLCAKLSAgICA0ODkzNiwgNDg5NDEsIDQ4OTQ2LCA0ODk1MywgNDg5NjAsIDQ4OTY4LCA0ODk3NiwgNDg5ODUsIDQ4OTg5LCA0ODk5OCwgCi0gICAgNDkwMDMsIDQ5MDA3LCA0OTAxNCwgNDkwMTgsIDQ5MDI1LCA0OTAzMywgNDkwMzgsIDQ5MDQ2LCA0OTA1MCwgNDkwNTUsIAotICAgIDQ5MDU5LCA0OTA2NCwgNDkwNjgsIDQ5MDczLCA0OTA3OCwgNDkwODcsIDQ5MDg5LCA0OTA5MiwgNDkwOTUsIDQ5MTAyLCAKLSAgICA0OTEwOSwgNDkxMTQsIDQ5MTIyLCA0OTEyOCwgNDkxMzQsIDQ5MTM5LCA0OTE0MiwgNDkxNDcsIDQ5MTUyLCA0OTE1NywgCi0gICAgNDkxNjUsIDQ5MTY5LCA0OTE3NiwgNDkxODQsIDQ5MTkyLCA0OTE5NywgNDkyMDIsIDQ5MjA4LCA0OTIxMywgNDkyMTgsIAotICAgIDQ5MjI0LCA0OTIyOSwgNDkyMzIsIDQ5MjM2LCA0OTI0MCwgNDkyNDcsIDQ5MjU2LCA0OTI2MSwgNDkyNzAsIDQ5Mjc5LCAKLSAgICA0OTI4NSwgNDkyOTEsIDQ5Mjk2LCA0OTMwMSwgNDkzMDYsIDQ5MzExLCA0OTMxNywgNDkzMjMsIDQ5MzMxLCA0OTMzOSwgCi0gICAgNDkzNDUsIDQ5MzUxLCA0OTM1NiwgNDkzNjEsIDQ5MzY4LCA0OTM3NSwgNDkzODEsIDQ5Mzg0LCA0OTM4NywgNDkzOTEsIAotICAgIDQ5Mzk1LCA0OTM5OSwgNDk0MDQsIDQ5NDEwLCA0OTQxNiwgNDk0MjMsIDQ5NDMwLCA0OTQzNSwgNDk0MzksIDQ5NDQzLCAKLSAgICA0OTQ0NywgNDk0NTEsIDQ5NDU1LCA0OTQ1OSwgNDk0NjMsIDQ5NDY3LCA0OTQ3MSwgNDk0NzUsIDQ5NDc5LCA0OTQ4MywgCi0gICAgNDk0ODcsIDQ5NDkxLCA0OTQ5NSwgNDk0OTksIDQ5NTAzLCA0OTUwNywgNDk1MTEsIDQ5NTE1LCA0OTUxOSwgNDk1MjMsIAotICAgIDQ5NTI3LCA0OTUzMSwgNDk1MzUsIDQ5NTM5LCA0OTU0MywgNDk1NDcsIDQ5NTUxLCA0OTU1NSwgNDk1NTksIDQ5NTYzLCAKLSAgICA0OTU2NywgNDk1NzEsIDQ5NTc1LCA0OTU3OSwgNDk1ODMsIDQ5NTg3LCA0OTU5MSwgNDk1OTUsIDQ5NTk5LCA0OTYwMywgCi0gICAgNDk2MDcsIDQ5NjExLCA0OTYxNSwgNDk2MTksIDQ5NjIzLCA0OTYyNywgNDk2MzEsIDQ5NjM1LCA0OTYzOSwgNDk2NDMsIAotICAgIDQ5NjQ3LCA0OTY1MSwgNDk2NTUsIDQ5NjU5LCA0OTY2MywgNDk2NjcsIDQ5NjcxLCA0OTY3NSwgNDk2NzksIDQ5NjgzLCAKLSAgICA0OTY4NywgNDk2OTEsIDQ5Njk1LCA0OTY5OSwgNDk3MDMsIDQ5NzA3LCA0OTcxMSwgNDk3MTUsIDQ5NzE5LCA0OTcyMywgCi0gICAgNDk3MjcsIDQ5NzMxLCA0OTczNSwgNDk3MzksIDQ5NzQzLCA0OTc0NywgNDk3NTEsIDQ5NzU1LCA0OTc1OSwgNDk3NjMsIAotICAgIDQ5NzY3LCA0OTc3MSwgNDk3NzUsIDQ5Nzc5LCA0OTc4MywgNDk3ODcsIDQ5NzkxLCA0OTc5NSwgNDk3OTksIDQ5ODAzLCAKLSAgICA0OTgwNywgNDk4MTEsIDQ5ODE1LCA0OTgxOSwgNDk4MjMsIDQ5ODI3LCA0OTgzMSwgNDk4MzUsIDQ5ODM5LCA0OTg0MywgCi0gICAgNDk4NDcsIDQ5ODUxLCA0OTg1NSwgNDk4NTksIDQ5ODYzLCA0OTg2NywgNDk4NzEsIDQ5ODc1LCA0OTg3OSwgNDk4ODMsIAotICAgIDQ5ODg3LCA0OTg5MSwgNDk4OTUsIDQ5ODk5LCA0OTkwMywgNDk5MDcsIDQ5OTExLCA0OTkxNSwgNDk5MTksIDQ5OTIzLCAKLSAgICA0OTkyNywgNDk5MzEsIDQ5OTM1LCA0OTkzOSwgNDk5NDMsIDQ5OTQ3LCA0OTk1MSwgNDk5NTUsIDQ5OTU5LCA0OTk2MywgCi0gICAgNDk5NjcsIDQ5OTcxLCA0OTk3NSwgNDk5NzksIDQ5OTgzLCA0OTk4NywgNDk5OTEsIDQ5OTk1LCA0OTk5OSwgNTAwMDMsIAotICAgIDUwMDA3LCA1MDAxMSwgNTAwMTUsIDUwMDE5LCA1MDAyMywgNTAwMjcsIDUwMDMxLCA1MDAzNSwgNTAwMzksIDUwMDQzLCAKLSAgICA1MDA0NywgNTAwNTEsIDUwMDU1LCA1MDA1OSwgNTAwNjMsIDUwMDY3LCA1MDA3MSwgNTAwNzUsIDUwMDc5LCA1MDA4MywgCi0gICAgNTAwODcsIDUwMDkxLCA1MDA5NSwgNTAwOTksIDUwMTAzLCA1MDEwNywgNTAxMTEsIDUwMTE1LCA1MDExOSwgNTAxMjMsIAotICAgIDUwMTI3LCA1MDEzMSwgNTAxMzUsIDUwMTM5LCA1MDE0MywgNTAxNDcsIDUwMTUxLCA1MDE1NSwgNTAxNTksIDUwMTYzLCAKLSAgICA1MDE2NywgNTAxNzEsIDUwMTc1LCA1MDE3OSwgNTAxODMsIDUwMTg3LCA1MDE5MSwgNTAxOTUsIDUwMTk5LCA1MDIwMywgCi0gICAgNTAyMDcsIDUwMjExLCA1MDIxNSwgNTAyMTksIDUwMjIzLCA1MDIyNywgNTAyMzEsIDUwMjM1LCA1MDIzOSwgNTAyNDMsIAotICAgIDUwMjQ3LCA1MDI1MSwgNTAyNTUsIDUwMjU5LCA1MDI2MywgNTAyNjcsIDUwMjcxLCA1MDI3NSwgNTAyNzksIDUwMjgzLCAKLSAgICA1MDI4NywgNTAyOTEsIDUwMjk1LCA1MDI5OSwgNTAzMDMsIDUwMzA3LCA1MDMxMSwgNTAzMTUsIDUwMzE5LCA1MDMyMywgCi0gICAgNTAzMjcsIDUwMzMxLCA1MDMzNSwgNTAzMzksIDUwMzQzLCA1MDM0NywgNTAzNTEsIDUwMzU1LCA1MDM1OSwgNTAzNjMsIAotICAgIDUwMzY3LCA1MDM3MSwgNTAzNzUsIDUwMzc5LCA1MDM4MywgNTAzODcsIDUwMzkxLCA1MDM5NSwgNTAzOTksIDUwNDAzLCAKLSAgICA1MDQwNywgNTA0MTEsIDUwNDE1LCA1MDQxOSwgNTA0MjMsIDUwNDI3LCA1MDQzMSwgNTA0MzUsIDUwNDM5LCA1MDQ0MywgCi0gICAgNTA0NDcsIDUwNDUxLCA1MDQ1NSwgNTA0NTksIDUwNDY2LCA1MDQ3NCwgNTA0ODAsIDUwNDg2LCA1MDQ5MywgNTA1MDAsIAotICAgIDUwNTA2LCA1MDUxMiwgNTA1MTgsIDUwNTI0LCA1MDUyOSwgNTA1MzQsIDUwNTM5LCA1MDU0NCwgNTA1NTAsIDUwNTU2LCAKLSAgICA1MDU2NCwgNTA1NzEsIDUwNTc3LCA1MDU4MywgNTA1OTEsIDUwNjAwLCA1MDYwNywgNTA2MTcsIDUwNjI4LCA1MDYzMSwgCi0gICAgNTA2MzQsIDUwNjM4LCA1MDY0MiwgNTA2NDksIDUwNjU2LCA1MDY2NywgNTA2NzgsIDUwNjg4LCA1MDY5OCwgNTA3MDUsIAotICAgIDUwNzEyLCA1MDcxOSwgNTA3MjYsIDUwNzM3LCA1MDc0OCwgNTA3NTksIDUwNzcwLCA1MDc4MCwgNTA3OTAsIDUwODAyLCAKLSAgICA1MDgxNCwgNTA4MjUsIDUwODM2LCA1MDg0OCwgNTA4NjAsIDUwODY5LCA1MDg3OSwgNTA4ODksIDUwOTAwLCA1MDkxMSwgCi0gICAgNTA5MTgsIDUwOTI1LCA1MDkzMiwgNTA5MzksIDUwOTQ5LCA1MDk1OSwgNTA5NjcsIDUwOTc1LCA1MDk4MiwgNTA5ODksIAotICAgIDUwOTk2LCA1MTAwMywgNTEwMTAsIDUxMDE1LCA1MTAyMCwgNTEwMjYsIDUxMDM0LCA1MTA0NCwgNTEwNTQsIDUxMDY0LCAKLSAgICA1MTA3NCwgNTEwODQsIDUxMDk0LCA1MTEwNCwgNTExMTQsIDUxMTI0LCA1MTEzNCwgNTExNDQsIDUxMTU1LCA1MTE2NiwgCi0gICAgNTExNzYsIDUxMTg2LCA1MTE5NywgNTEyMDgsIDUxMjE4LCA1MTIyOCwgNTEyMzksIDUxMjUwLCA1MTI2MCwgNTEyNzAsIAotICAgIDUxMjgxLCA1MTI5MiwgNTEzMDgsIDUxMzI3LCA1MTM0MywgNTEzNjIsIDUxMzc4LCA1MTM5NCwgNTE0MTAsIDUxNDI2LCAKLSAgICA1MTQzNywgNTE0NDksIDUxNDYwLCA1MTQ3MiwgNTE0OTEsIDUxNTEwLCA1MTUxOCwgNTE1MjQsIDUxNTMxLCA1MTUzOCwgCi0gICAgNTE1NDUsIDUxNTUyLCA1MTU1NywgNTE1NjMsIDUxNTY4LCA1MTU3MywgNTE1NzksIDUxNTg0LCA1MTU4OSwgNTE1OTQsIAotICAgIDUxNTk5LCA1MTYwNCwgNTE2MTEsIDUxNjE2LCA1MTYyMywgNTE2MjgsIDUxNjMzLCA1MTYzNywgNTE2NDEsIDUxNjQ4LCAKLSAgICA1MTY1NSwgNTE2NjIsIDUxNjY5LCA1MTY3NiwgNTE2ODMsIDUxNjk2LCA1MTcwOSwgNTE3MjIsIDUxNzM1LCA1MTc0MywgCi0gICAgNTE3NTEsIDUxNzU3LCA1MTc2MywgNTE3NzAsIDUxNzc3LCA1MTc4NCwgNTE3OTEsIDUxNzk1LCA1MTgwMCwgNTE4MDgsIAotICAgIDUxODE2LCA1MTgyNCwgNTE4MzEsIDUxODM1LCA1MTg0MywgNTE4NTEsIDUxODU1LCA1MTg1OSwgNTE4NjQsIDUxODcxLCAKLSAgICA1MTg3OSwgNTE4ODcsIDUxOTA2LCA1MTkyNSwgNTE5NDQsIDUxOTYzLCA1MTk4MiwgNTIwMDEsIDUyMDIwLCA1MjAzOSwgCi0gICAgNTIwNDUsIDUyMDUyLCA1MjA2MSwgNTIwNjksIDUyMDc3LCA1MjA4MiwgNTIwODUsIDUyMDg4LCA1MjA5MywgNTIwOTYsIAotICAgIDUyMTE1LCA1MjEyMiwgNTIxMjgsIDUyMTM0LCA1MjEzOCwgNTIxNDEsIDUyMTQ0LCA1MjE0NywgNTIxNTksIDUyMTcyLCAKLSAgICA1MjE3OSwgNTIxODYsIDUyMTg5LCA1MjE5MywgNTIxOTYsIDUyMjAxLCA1MjIwNiwgNTIyMTEsIDUyMjE3LCA1MjIyNiwgCi0gICAgNTIyMzMsIDUyMjQwLCA1MjI0OCwgNTIyNTUsIDUyMjYyLCA1MjI2NSwgNTIyNzEsIDUyMjc3LCA1MjI4MCwgNTIyODMsIAotICAgIDUyMjg4LCA1MjI5MywgNTIyOTksIDUyMzA1LCA1MjMwOSwgNTIzMTQsIDUyMzIxLCA1MjMyNSwgNTIzMzEsIDUyMzM1LCAKLSAgICA1MjMzOSwgNTIzNDcsIDUyMzU5LCA1MjM2OCwgNTIzNzIsIDUyMzc0LCA1MjM4MywgNTIzOTIsIDUyMzk4LCA1MjQwMSwgCi0gICAgNTI0MDcsIDUyNDEzLCA1MjQxOCwgNTI0MjMsIDUyNDI4LCA1MjQzMywgNTI0MzgsIDUyNDQzLCA1MjQ0NSwgNTI0NTEsIAotICAgIDUyNDU2LCA1MjQ2MywgNTI0NjcsIDUyNDczLCA1MjQ3NiwgNTI0ODAsIDUyNDg3LCA1MjQ5NCwgNTI0OTYsIDUyNDk4LCAKLSAgICA1MjUwNCwgNTI1MTAsIDUyNTE2LCA1MjUyNSwgNTI1MzQsIDUyNTQxLCA1MjU0OCwgNTI1NTQsIDUyNTYwLCA1MjU2NSwgCi0gICAgNTI1NzAsIDUyNTc1LCA1MjU4MSwgNTI1ODcsIDUyNTkyLCA1MjU5OSwgNTI2MDMsIDUyNjA3LCA1MjYyMCwgNTI2MzMsIAotICAgIDUyNjQ1LCA1MjY1NCwgNTI2NjAsIDUyNjY3LCA1MjY3MiwgNTI2NzcsIDUyNjgyLCA1MjY4NywgNTI2OTIsIDUyNjk0LCAKLSAgICA1MjcwMSwgNTI3MDgsIDUyNzE1LCA1MjcyMiwgNTI3MjksIDUyNzM3LCA1Mjc0MywgNTI3NDgsIDUyNzU0LCA1Mjc2MCwgCi0gICAgNTI3NjYsIDUyNzczLCA1Mjc3OSwgNTI3ODcsIDUyNzk1LCA1MjgwMywgNTI4MTEsIDUyODE4LCA1MjgyNCwgNTI4MzAsIAotICAgIDUyODM5LCA1Mjg0MywgNTI4NTIsIDUyODYxLCA1Mjg3MCwgNTI4NzgsIDUyODgyLCA1Mjg4OCwgNTI4OTUsIDUyOTAyLCAKLSAgICA1MjkwNiwgNTI5MTIsIDUyOTE5LCA1MjkyNCwgNTI5MjksIDUyOTM1LCA1Mjk0MCwgNTI5NDUsIDUyOTUyLCA1Mjk1OSwgCi0gICAgNTI5NjQsIDUyOTY5LCA1Mjk3NywgNTI5ODUsIDUyOTk1LCA1MzAwNSwgNTMwMTIsIDUzMDE5LCA1MzAyMywgNTMwMjcsIAotICAgIDUzMDM5LCA1MzA0NSwgNTMwNTEsIDUzMDU2LCA1MzA2MSwgNTMwNjgsIDUzMDc1LCA1MzA4MSwgNTMwODcsIDUzMDk2LCAKLSAgICA1MzEwNCwgNTMxMTIsIDUzMTE5LCA1MzEyNiwgNTMxMzMsIDUzMTM5LCA1MzE0NiwgNTMxNTIsIDUzMTU5LCA1MzE2NiwgCi0gICAgNTMxNzMsIDUzMTgwLCA1MzE4NiwgNTMxOTEsIDUzMjAwLCA1MzIxMCwgNTMyMTcsIDUzMjI2LCA1MzIzMiwgNTMyMzcsIAotICAgIDUzMjQyLCA1MzI1MiwgNTMyNTgsIDUzMjY0LCA1MzI3MCwgNTMyNzgsIDUzMjgzLCA1MzI5MCwgNTMyOTcsIDUzMzA4LCAKLSAgICA1MzMxNSwgNTMzMjIsIDUzMzI5LCA1MzMzNiwgNTMzNDMsIDUzMzUwLCA1MzM1NywgNTMzNjksIDUzMzgxLCA1MzM5MiwgCi0gICAgNTM0MDMsIDUzNDE2LCA1MzQyOSwgNTM0MzQsIDUzNDM5LCA1MzQ0OCwgNTM0NTcsIDUzNDY0LCA1MzQ3MSwgNTM0ODAsIAotICAgIDUzNDg5LCA1MzQ5NywgNTM1MDUsIDUzNTEzLCA1MzUyMSwgNTM1MzEsIDUzNTQxLCA1MzU1NSwgNTM1NjksIDUzNTc3LCAKLSAgICA1MzU4NSwgNTM1OTcsIDUzNjA5LCA1MzYxNywgNTM2MjUsIDUzNjM1LCA1MzY0NSwgNTM2NTAsIDUzNjU1LCA1MzY2NCwgCi0gICAgNTM2NzMsIDUzNjc4LCA1MzY4MywgNTM2OTEsIDUzNjk3LCA1MzcwMywgNTM3MTEsIDUzNzE5LCA1MzczMiwgNTM3NDUsIAotICAgIDUzNzQ5LCA1Mzc1MywgNTM3NjAsIDUzNzY3LCA1Mzc3NCwgNTM3ODIsIDUzNzkwLCA1Mzc5OSwgNTM4MDgsIDUzODE0LCAKLSAgICA1MzgyMCwgNTM4MjcsIDUzODM0LCA1Mzg0MSwgNTM4NDgsIDUzODU3LCA1Mzg2NiwgNTM4NjksIDUzODcyLCA1Mzg3NywgCi0gICAgNTM4ODIsIDUzODg4LCA1Mzg5NCwgNTM5MDEsIDUzOTA4LCA1MzkxOCwgNTM5MjgsIDUzOTM1LCA1Mzk0MiwgNTM5NTAsIAotICAgIDUzOTU4LCA1Mzk2NiwgNTM5NzQsIDUzOTgyLCA1Mzk5MCwgNTM5OTYsIDU0MDAyLCA1NDAwNiwgNTQwMTAsIDU0MDE3LCAKLSAgICA1NDAyNCwgNTQwMjksIDU0MDM0LCA1NDAzOSwgNTQwNDQsIDU0MDUwLCA1NDA2NCwgNTQwNzEsIDU0MDc4LCA1NDA4MiwgCi0gICAgNTQwODQsIDU0MDg2LCA1NDA5MSwgNTQwOTYsIDU0MTAxLCA1NDEwNiwgNTQxMTQsIDU0MTIxLCA1NDEyOCwgNTQxMzYsIAotICAgIDU0MTQ4LCA1NDE1NiwgNTQxNjQsIDU0MTc1LCA1NDE3OSwgNTQxODMsIDU0MTg5LCA1NDE5NywgNTQyMTAsIDU0MjE3LCAKLSAgICA1NDIyNCwgNTQyMzEsIDU0MjM2LCA1NDI0MywgNTQyNTIsIDU0MjYwLCA1NDI2NiwgNTQyNzIsIDU0Mjc4LCA1NDI4NywgCi0gICAgNTQyOTYsIDU0MzA0LCA1NDMxMywgNTQzMTgsIDU0MzIxLCA1NDMyNiwgNTQzMzIsIDU0MzM4LCA1NDM0NCwgNTQzNTAsIAotICAgIDU0MzU0LCA1NDM1NywgNTQzNjEsIDU0MzY1LCA1NDM3MSwgNTQzNzcsIDU0MzgzLCA1NDM4OSwgNTQzOTMsIDU0Mzk3LCAKLSAgICA1NDQwNCwgNTQ0MTEsIDU0NDE4LCA1NDQyNSwgNTQ0MzIsIDU0NDM5LCA1NDQ0OSwgNTQ0NTksIDU0NDY2LCA1NDQ3MywgCi0gICAgNTQ0ODEsIDU0NDg5LCA1NDQ5MywgNTQ0OTgsIDU0NTAzLCA1NDUwOSwgNTQ1MTUsIDU0NTE4LCA1NDUyMSwgNTQ1MjQsIAotICAgIDU0NTI3LCA1NDUzMSwgNTQ1MzYsIDU0NTQxLCA1NDU0NiwgNTQ1NTEsIDU0NTU2LCA1NDU2MCwgNTQ1NjQsIDU0NTY4LCAKLSAgICA1NDU3MiwgNTQ1NzYsIDU0NTgwLCA1NDU4NCwgNTQ1OTAsIDU0NTk0LCA1NDYwMCwgNTQ2MDUsIDU0NjEyLCA1NDYyMCwgCi0gICAgNTQ2MjcsIDU0NjM1LCA1NDY0MiwgNTQ2NTAsIDU0NjU5LCA1NDY2NiwgNTQ2NzYsIDU0Njg3LCA1NDY5MywgNTQ3MDIsIAotICAgIDU0NzA4LCA1NDcxNywgNTQ3MjYsIDU0NzMyLCA1NDczOCwgNTQ3NDIsIDU0NzQ2LCA1NDc1NSwgNTQ3NjQsIDU0NzcxLCAKLSAgICA1NDc3OCwgNTQ3ODcsIDAsIDAsIDAsIDU0Nzk2LCA1NDgwMSwgNTQ4MDUsIDU0ODA5LCA1NDgxNCwgNTQ4MTksIDU0ODI0LCAKLSAgICA1NDgzMiwgNTQ4NDAsIDU0ODQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyNiwgMzIyMzMsIDMyMjQwLCAzMjI0NywgMzIyNTQsIAorICAgIDMyMjYzLCAzMjI3MiwgMzIyODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjkwLCAzMjI5NSwgMzIzMDAsIDMyMzA1LCAKKyAgICAzMjMxMCwgMzIzMTksIDMyMzMwLCAzMjMzOSwgMzIzNTAsIDMyMzU2LCAzMjM2OSwgMzIzNzUsIDMyMzgyLCAzMjM4OSwgCisgICAgMzIzOTQsIDMyNDAwLCAzMjQwNiwgMzI0MTcsIDMyNDI2LCAzMjQzMywgMzI0NDAsIDMyNDQ5LCAzMjQ1NiwgMzI0NjUsIAorICAgIDMyNDc1LCAzMjQ4NSwgMzI0OTIsIDMyNDk5LCAzMjUwNiwgMzI1MTYsIDMyNTIxLCAzMjUyOSwgMzI1MzUsIDMyNTQzLCAKKyAgICAzMjU1MiwgMzI1NTcsIDMyNTY0LCAzMjU3MCwgMzI1NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTgwLCAKKyAgICAzMjU4NSwgMzI1OTEsIDMyNTk4LCAzMjYwNiwgMzI2MTIsIDMyNjE4LCAzMjYyNCwgMzI2MjksIDMyNjM2LCAzMjY0MiwgCisgICAgMzI2NDgsIDMyNjU0LCAzMjY2MiwgMzI2NjcsIDMyNjc1LCAzMjY4MCwgMzI2ODYsIDMyNjkyLCAzMjY5OSwgMzI3MDcsIAorICAgIDMyNzE0LCAzMjcyMCwgMzI3MjcsIDMyNzM0LCAzMjc0MCwgMzI3NDcsIDMyNzU0LCAzMjc2MCwgMzI3NjUsIDMyNzcxLCAKKyAgICAzMjc3OSwgMzI3ODcsIDMyNzkzLCAzMjc5OSwgMzI4MDUsIDMyODExLCAzMjgxOSwgMzI4MjMsIDMyODI5LCAzMjgzNSwgCisgICAgMzI4NDEsIDMyODQ3LCAzMjg1MywgMzI4NTksIDMyODYzLCAzMjg2OCwgMzI4NzMsIDMyODgwLCAzMjg4NSwgMzI4ODksIAorICAgIDMyODk1LCAzMjkwMCwgMzI5MDUsIDMyOTA5LCAzMjkxNCwgMzI5MTksIDMyOTIzLCAzMjkyNywgMzI5MzIsIDMyOTM5LCAKKyAgICAzMjk0MywgMzI5NDgsIDMyOTUzLCAzMjk1NywgMzI5NjIsIDMyOTY2LCAzMjk3MSwgMzI5NzUsIDMyOTgxLCAzMjk4NiwgCisgICAgMzI5OTMsIDMyOTk4LCAzMzAwMywgMzMwMDcsIDMzMDEyLCAzMzAxNywgMzMwMjQsIDMzMDI5LCAzMzAzNSwgMzMwNDAsIAorICAgIDMzMDQ0LCAzMzA0OSwgMzMwNTMsIDMzMDU4LCAzMzA2NSwgMzMwNzIsIDMzMDc3LCAzMzA4MiwgMzMwODYsIDMzMDkyLCAKKyAgICAzMzA5OCwgMzMxMDMsIDMzMTA4LCAzMzExMywgMzMxMTksIDMzMTI0LCAzMzEzMCwgMzMxMzUsIDMzMTQxLCAzMzE0NywgCisgICAgMzMxNTMsIDMzMTYwLCAzMzE2NywgMzMxNzQsIDMzMTgxLCAzMzE4OCwgMzMxOTUsIDMzMjAwLCAzMzIwOCwgMzMyMTcsIAorICAgIDMzMjI2LCAzMzIzNSwgMzMyNDQsIDMzMjUzLCAzMzI2MiwgMzMyNzQsIDMzMjgzLCAzMzI5MiwgMzMzMDEsIDMzMzA4LCAKKyAgICAzMzMxMywgMzMzMjAsIDMzMzI4LCAzMzMzNiwgMzMzNDMsIDMzMzUwLCAzMzM1NywgMzMzNjQsIDMzMzcyLCAzMzM4MSwgCisgICAgMzMzOTAsIDMzMzk5LCAzMzQwOCwgMzM0MTcsIDMzNDI2LCAzMzQzNSwgMzM0NDQsIDMzNDUzLCAzMzQ2MiwgMzM0NzEsIAorICAgIDMzNDgwLCAzMzQ4OSwgMzM0OTgsIDMzNTA2LCAzMzUxNSwgMzM1MjYsIDMzNTM0LCAzMzU0MywgMzM1NTQsIDMzNTYzLCAKKyAgICAzMzU3MiwgMzM1ODEsIDMzNTkwLCAzMzU5OCwgMzM2MDcsIDMzNjE0LCAzMzYxOSwgMzM2MjcsIDMzNjMyLCAzMzYzOSwgCisgICAgMzM2NDQsIDMzNjUzLCAzMzY1OSwgMzM2NjYsIDMzNjczLCAzMzY3OCwgMzM2ODMsIDMzNjkxLCAzMzY5OSwgMzM3MDgsIAorICAgIDMzNzE3LCAzMzcyMiwgMzM3MjksIDMzNzQwLCAzMzc0OCwgMzM3NTcsIDMzNzYzLCAzMzc2OSwgMzM3NzQsIDMzNzgxLCAKKyAgICAzMzc4NiwgMzM3OTUsIDMzODAwLCAzMzgwNSwgMzM4MTAsIDMzODE3LCAzMzgyNCwgMzM4MjksIDMzODM4LCAzMzg0NiwgCisgICAgMzM4NTEsIDMzODU2LCAzMzg2MywgMzM4NzAsIDMzODc0LCAzMzg3OCwgMzM4ODEsIDMzODg0LCAzMzg4NywgMzM4OTAsIAorICAgIDMzODkzLCAzMzg5NiwgMzM5MDMsIDMzOTA2LCAzMzkwOSwgMzM5MTQsIDMzOTE4LCAzMzkyMiwgMzM5MjYsIDMzOTMwLCAKKyAgICAzMzkzNCwgMzM5NDMsIDMzOTQ5LCAzMzk1NSwgMzM5NjEsIDMzOTY5LCAzMzk3NywgMzM5ODMsIDMzOTg5LCAzMzk5NiwgCisgICAgMzQwMDIsIDM0MDA3LCAzNDAxMywgMzQwMTksIDM0MDI1LCAzNDAzMiwgMzQwMzgsIDM0MDQ2LCAzNDA1MiwgMzQwNTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDY1LCAzNDA3MiwgCisgICAgMzQwNzksIDM0MDg0LCAzNDA5MywgMzQxMDEsIDM0MTA5LCAzNDExNiwgMzQxMjMsIDM0MTMwLCAzNDEzNywgMzQxNDUsIAorICAgIDM0MTUzLCAzNDE2MywgMzQxNzMsIDM0MTgxLCAzNDE4OSwgMzQxOTcsIDM0MjA1LCAzNDIxNCwgMzQyMjMsIDM0MjMxLCAKKyAgICAzNDIzOSwgMzQyNDgsIDM0MjU3LCAzNDI2NywgMzQyNzcsIDM0Mjg2LCAzNDI5NSwgMzQzMDMsIDM0MzExLCAzNDMxOSwgCisgICAgMzQzMjcsIDM0MzM3LCAzNDM0NywgMzQzNTUsIDM0MzYzLCAzNDM3MSwgMzQzNzksIDM0Mzg3LCAzNDM5NSwgMzQ0MDMsIAorICAgIDM0NDExLCAzNDQxOSwgMzQ0MjcsIDM0NDM1LCAzNDQ0MywgMzQ0NTIsIDM0NDYxLCAzNDQ3MCwgMzQ0NzksIDM0NDg5LCAKKyAgICAzNDQ5OSwgMzQ1MDYsIDM0NTEzLCAzNDUyMSwgMzQ1MjksIDM0NTM4LCAzNDU0NywgMzQ1NTUsIDM0NTYzLCAzNDU3NSwgCisgICAgMzQ1ODcsIDM0NTk2LCAzNDYwNSwgMzQ2MTQsIDM0NjIzLCAzNDYzMCwgMzQ2MzcsIDM0NjQ1LCAzNDY1MywgMzQ2NjEsIAorICAgIDM0NjY5LCAzNDY3NywgMzQ2ODUsIDM0NjkzLCAzNDcwMSwgMzQ3MTAsIDM0NzE5LCAzNDcyOCwgMzQ3MzcsIDM0NzQ2LCAKKyAgICAzNDc1NSwgMzQ3NjUsIDM0Nzc1LCAzNDc4NSwgMzQ3OTUsIDM0ODA0LCAzNDgxMywgMzQ4MjAsIDM0ODI3LCAzNDgzNSwgCisgICAgMzQ4NDMsIDM0ODUxLCAzNDg1OSwgMzQ4NjcsIDM0ODc1LCAzNDg4NywgMzQ4OTksIDM0OTA4LCAzNDkxNywgMzQ5MjUsIAorICAgIDM0OTMzLCAzNDk0MSwgMzQ5NDksIDM0OTYwLCAzNDk3MSwgMzQ5ODIsIDM0OTkzLCAzNTAwNSwgMzUwMTcsIDM1MDI1LCAKKyAgICAzNTAzMywgMzUwNDEsIDM1MDQ5LCAzNTA1OCwgMzUwNjcsIDM1MDc2LCAzNTA4NSwgMzUwOTMsIDM1MTAxLCAzNTEwOSwgCisgICAgMzUxMTcsIDM1MTI1LCAzNTEzMywgMzUxNDIsIDM1MTUxLCAzNTE2MSwgMzUxNzEsIDM1MTc4LCAzNTE4NSwgMzUxOTMsIAorICAgIDM1MjAxLCAzNTIwOSwgMzUyMTcsIDM1MjI0LCAzNTIzMSwgMzUyMzksIDM1MjQ3LCAzNTI1NSwgMzUyNjMsIDM1MjcxLCAKKyAgICAzNTI3OSwgMzUyODcsIDM1Mjk1LCAzNTMwMywgMzUzMTEsIDM1MzE5LCAzNTMyNywgMzUzMzUsIDM1MzQzLCAzNTM1MSwgCisgICAgMzUzNTksIDM1MzY4LCAzNTM3NywgMzUzODYsIDM1Mzk0LCAzNTQwMywgMzU0MTIsIDM1NDIxLCAzNTQzMCwgMzU0NDAsIAorICAgIDM1NDQ5LCAzNTQ1NiwgMzU0NjEsIDM1NDY4LCAzNTQ3NSwgMzU0ODMsIDM1NDkxLCAzNTUwMCwgMzU1MDksIDM1NTE5LCAKKyAgICAzNTUyOSwgMzU1NDAsIDM1NTUxLCAzNTU2MCwgMzU1NjksIDM1NTc5LCAzNTU4OSwgMzU1OTgsIDM1NjA3LCAzNTYxNywgCisgICAgMzU2MjcsIDM1NjM4LCAzNTY0OSwgMzU2NTgsIDM1NjY3LCAzNTY3NywgMzU2ODcsIDM1Njk0LCAzNTcwMSwgMzU3MDksIAorICAgIDM1NzE3LCAzNTcyMywgMzU3MjksIDM1NzM4LCAzNTc0NywgMzU3NTcsIDM1NzY3LCAzNTc3OCwgMzU3ODksIDM1Nzk4LCAKKyAgICAzNTgwNywgMzU4MTcsIDM1ODI3LCAzNTgzNiwgMzU4NDUsIDM1ODUzLCAzNTg2MSwgMzU4NjgsIDM1ODc1LCAzNTg4MywgCisgICAgMzU4OTEsIDM1OTAwLCAzNTkwOSwgMzU5MTksIDM1OTI5LCAzNTk0MCwgMzU5NTEsIDM1OTYwLCAzNTk2OSwgMzU5NzksIAorICAgIDM1OTg5LCAzNTk5OCwgMzYwMDcsIDM2MDE3LCAzNjAyNywgMzYwMzgsIDM2MDQ5LCAzNjA1OCwgMzYwNjcsIDM2MDc3LCAKKyAgICAzNjA4NywgMzYwOTQsIDM2MTAxLCAzNjEwOSwgMzYxMTcsIDM2MTI2LCAzNjEzNSwgMzYxNDUsIDM2MTU1LCAzNjE2NiwgCisgICAgMzYxNzcsIDM2MTg2LCAzNjE5NSwgMzYyMDUsIDM2MjE1LCAzNjIyMywgMzYyMzEsIDM2MjM5LCAzNjI0NywgMzYyNTYsIAorICAgIDM2MjY1LCAzNjI3MiwgMzYyNzksIDM2Mjg2LCAzNjI5MywgMzYzMDAsIDM2MzA3LCAzNjMxNSwgMzYzMjMsIDM2MzMxLCAKKyAgICAzNjMzOSwgMzYzNTAsIDM2MzYxLCAzNjM3MiwgMzYzODMsIDM2Mzk0LCAzNjQwNSwgMzY0MTMsIDM2NDIxLCAzNjQzMiwgCisgICAgMzY0NDMsIDM2NDU0LCAzNjQ2NSwgMzY0NzYsIDM2NDg3LCAzNjQ5NSwgMzY1MDMsIDM2NTE0LCAzNjUyNSwgMzY1MzYsIDAsIAorICAgIDAsIDM2NTQ3LCAzNjU1NSwgMzY1NjMsIDM2NTc0LCAzNjU4NSwgMzY1OTYsIDAsIDAsIDM2NjA3LCAzNjYxNSwgMzY2MjMsIAorICAgIDM2NjM0LCAzNjY0NSwgMzY2NTYsIDM2NjY3LCAzNjY3OCwgMzY2ODksIDM2Njk3LCAzNjcwNSwgMzY3MTYsIDM2NzI3LCAKKyAgICAzNjczOCwgMzY3NDksIDM2NzYwLCAzNjc3MSwgMzY3NzksIDM2Nzg3LCAzNjc5OCwgMzY4MDksIDM2ODIwLCAzNjgzMSwgCisgICAgMzY4NDIsIDM2ODUzLCAzNjg2MSwgMzY4NjksIDM2ODgwLCAzNjg5MSwgMzY5MDIsIDM2OTEzLCAzNjkyNCwgMzY5MzUsIAorICAgIDM2OTQzLCAzNjk1MSwgMzY5NjIsIDM2OTczLCAzNjk4NCwgMCwgMCwgMzY5OTUsIDM3MDAzLCAzNzAxMSwgMzcwMjIsIAorICAgIDM3MDMzLCAzNzA0NCwgMCwgMCwgMzcwNTUsIDM3MDYzLCAzNzA3MSwgMzcwODIsIDM3MDkzLCAzNzEwNCwgMzcxMTUsIAorICAgIDM3MTI2LCAwLCAzNzEzNywgMCwgMzcxNDUsIDAsIDM3MTU2LCAwLCAzNzE2NywgMzcxNzgsIDM3MTg2LCAzNzE5NCwgCisgICAgMzcyMDUsIDM3MjE2LCAzNzIyNywgMzcyMzgsIDM3MjQ5LCAzNzI2MCwgMzcyNjgsIDM3Mjc2LCAzNzI4NywgMzcyOTgsIAorICAgIDM3MzA5LCAzNzMyMCwgMzczMzEsIDM3MzQyLCAzNzM1MCwgMzczNTgsIDM3MzY2LCAzNzM3NCwgMzczODIsIDM3MzkwLCAKKyAgICAzNzM5OCwgMzc0MDYsIDM3NDE0LCAzNzQyMiwgMzc0MzAsIDM3NDM4LCAzNzQ0NiwgMCwgMCwgMzc0NTQsIDM3NDY1LCAKKyAgICAzNzQ3NiwgMzc0OTAsIDM3NTA0LCAzNzUxOCwgMzc1MzIsIDM3NTQ2LCAzNzU2MCwgMzc1NzEsIDM3NTgyLCAzNzU5NiwgCisgICAgMzc2MTAsIDM3NjI0LCAzNzYzOCwgMzc2NTIsIDM3NjY2LCAzNzY3NywgMzc2ODgsIDM3NzAyLCAzNzcxNiwgMzc3MzAsIAorICAgIDM3NzQ0LCAzNzc1OCwgMzc3NzIsIDM3NzgzLCAzNzc5NCwgMzc4MDgsIDM3ODIyLCAzNzgzNiwgMzc4NTAsIDM3ODY0LCAKKyAgICAzNzg3OCwgMzc4ODksIDM3OTAwLCAzNzkxNCwgMzc5MjgsIDM3OTQyLCAzNzk1NiwgMzc5NzAsIDM3OTg0LCAzNzk5NSwgCisgICAgMzgwMDYsIDM4MDIwLCAzODAzNCwgMzgwNDgsIDM4MDYyLCAzODA3NiwgMzgwOTAsIDM4MDk4LCAzODEwNiwgMzgxMTcsIAorICAgIDM4MTI1LCAwLCAzODEzNiwgMzgxNDQsIDM4MTU1LCAzODE2MywgMzgxNzEsIDM4MTc5LCAzODE4NywgMzgxOTUsIDM4MTk4LCAKKyAgICAzODIwMSwgMzgyMDQsIDM4MjA3LCAzODIxMywgMzgyMjQsIDM4MjMyLCAwLCAzODI0MywgMzgyNTEsIDM4MjYyLCAzODI3MCwgCisgICAgMzgyNzgsIDM4Mjg2LCAzODI5NCwgMzgzMDIsIDM4MzA4LCAzODMxNCwgMzgzMjAsIDM4MzI4LCAzODMzNiwgMzgzNDcsIDAsIAorICAgIDAsIDM4MzU4LCAzODM2NiwgMzgzNzcsIDM4Mzg1LCAzODM5MywgMzg0MDEsIDAsIDM4NDA5LCAzODQxNSwgMzg0MjEsIAorICAgIDM4NDI3LCAzODQzNSwgMzg0NDMsIDM4NDU0LCAzODQ2NSwgMzg0NzMsIDM4NDgxLCAzODQ4OSwgMzg1MDAsIDM4NTA4LCAKKyAgICAzODUxNiwgMzg1MjQsIDM4NTMyLCAzODU0MCwgMzg1NDYsIDM4NTUyLCAwLCAwLCAzODU1NSwgMzg1NjYsIDM4NTc0LCAwLCAKKyAgICAzODU4NSwgMzg1OTMsIDM4NjA0LCAzODYxMiwgMzg2MjAsIDM4NjI4LCAzODYzNiwgMzg2NDQsIDM4NjQ3LCAwLCAzODY1MCwgCisgICAgMzg2NTQsIDM4NjU4LCAzODY2MiwgMzg2NjYsIDM4NjcwLCAzODY3NCwgMzg2NzgsIDM4NjgyLCAzODY4NiwgMzg2OTAsIAorICAgIDM4Njk0LCAzODcwMCwgMzg3MDYsIDM4NzEyLCAzODcxNSwgMzg3MTgsIDM4NzIwLCAzODcyNCwgMzg3MjgsIDM4NzMyLCAKKyAgICAzODczNiwgMzg3MzgsIDM4NzQyLCAzODc0NiwgMzg3NTIsIDM4NzU4LCAzODc2NSwgMzg3NzIsIDM4Nzc3LCAzODc4MiwgCisgICAgMzg3ODgsIDM4Nzk0LCAzODc5NiwgMzg3OTksIDM4ODAxLCAzODgwNSwgMzg4MDksIDM4ODEzLCAzODgxNiwgMzg4MjAsIAorICAgIDM4ODI0LCAzODgyOCwgMzg4MzIsIDM4ODM2LCAzODg0MiwgMzg4NDYsIDM4ODUwLCAzODg1NiwgMzg4NjEsIDM4ODY4LCAKKyAgICAzODg3MCwgMzg4NzMsIDM4ODc3LCAzODg4MSwgMzg4ODYsIDM4ODkyLCAzODg5NCwgMzg5MDMsIDM4OTEyLCAzODkxNSwgCisgICAgMzg5MTksIDM4OTIxLCAzODkyMywgMzg5MjUsIDM4OTI4LCAzODkzNCwgMzg5MzYsIDM4OTQwLCAzODk0NCwgMzg5NTEsIAorICAgIDM4OTU4LCAzODk2MiwgMzg5NjcsIDM4OTcyLCAzODk3NywgMzg5ODIsIDM4OTg2LCAzODk5MCwgMzg5OTMsIDM4OTk3LCAKKyAgICAzOTAwMSwgMzkwMDgsIDM5MDEzLCAzOTAxNywgMzkwMjEsIDM5MDI2LCAzOTAzMCwgMzkwMzQsIDM5MDM5LCAzOTA0NCwgCisgICAgMzkwNDgsIDM5MDUyLCAzOTA1NiwgMzkwNTgsIDM5MDYzLCAzOTA2OCwgMzkwNzIsIDM5MDc2LCAzOTA4MCwgMzkwODQsIDAsIAorICAgIDM5MDg4LCAzOTA5MiwgMzkwOTYsIDM5MTAyLCAzOTEwOCwgMzkxMTQsIDM5MTIwLCAzOTEyNywgMzkxMzQsIDM5MTM5LCAKKyAgICAzOTE0NCwgMzkxNDgsIDAsIDAsIDM5MTU0LCAzOTE1NywgMzkxNjAsIDM5MTYzLCAzOTE2NiwgMzkxNjksIDM5MTcyLCAKKyAgICAzOTE3NiwgMzkxODAsIDM5MTg1LCAzOTE5MCwgMzkxOTUsIDM5MjAyLCAzOTIwNiwgMzkyMDksIDM5MjEyLCAzOTIxNSwgCisgICAgMzkyMTgsIDM5MjIxLCAzOTIyNCwgMzkyMjcsIDM5MjMwLCAzOTIzMywgMzkyMzcsIDM5MjQxLCAzOTI0NiwgMzkyNTEsIDAsIAorICAgIDM5MjU2LCAzOTI2MiwgMzkyNjgsIDM5Mjc0LCAzOTI4MSwgMzkyODgsIDM5Mjk1LCAzOTMwMiwgMzkzMDgsIDM5MzE0LCAKKyAgICAzOTMyMSwgMzkzMjgsIDM5MzM1LCAwLCAwLCAwLCAzOTM0MiwgMzkzNDUsIDM5MzQ4LCAzOTM1MSwgMzkzNTYsIDM5MzU5LCAKKyAgICAzOTM2MiwgMzkzNjUsIDM5MzY4LCAzOTM3MSwgMzkzNzQsIDM5Mzc4LCAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgCisgICAgMzkzOTMsIDM5Mzk4LCAzOTQwMSwgMzk0MDQsIDM5NDA3LCAzOTQxMCwgMzk0MTMsIDM5NDE4LCAzOTQyMSwgMzk0MjQsIAorICAgIDM5NDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzOTQzNCwgMzk0MzksIDM5NDQ0LCAzOTQ1MSwgMzk0NTksIDM5NDY0LCAzOTQ2OSwgMzk0NzMsIDM5NDc3LCAzOTQ4MiwgCisgICAgMzk0ODksIDM5NDk2LCAzOTUwMCwgMzk1MDUsIDM5NTEwLCAzOTUxNSwgMzk1MjAsIDM5NTI3LCAzOTUzMiwgMzk1MzcsIAorICAgIDM5NTQyLCAzOTU1MSwgMzk1NTgsIDM5NTY1LCAzOTU2OSwgMzk1NzQsIDM5NTgwLCAzOTU4NSwgMzk1OTIsIDM5NjAxLCAKKyAgICAzOTYxMCwgMzk2MTQsIDM5NjE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTYyMiwgCisgICAgMzk2MjYsIDM5NjM0LCAzOTYzOCwgMzk2NDIsIDM5NjQ3LCAzOTY1MSwgMzk2NTUsIDM5NjU5LCAzOTY2MSwgMzk2NjUsIAorICAgIDM5NjY5LCAzOTY3MywgMzk2NzgsIDM5NjgyLCAzOTY4NiwgMzk2OTQsIDM5Njk3LCAzOTcwMSwgMzk3MDQsIDM5NzA3LCAKKyAgICAzOTcxMywgMzk3MTcsIDM5NzIwLCAzOTcyNiwgMzk3MzAsIDM5NzM0LCAzOTczOCwgMzk3NDEsIDM5NzQ1LCAzOTc0OCwgCisgICAgMzk3NTIsIDM5NzU0LCAzOTc1NywgMzk3NjAsIDM5NzY0LCAzOTc2NiwgMzk3NzAsIDM5NzczLCAzOTc3NiwgMzk3ODEsIAorICAgIDM5Nzg2LCAzOTc5MywgMzk3OTYsIDM5Nzk5LCAzOTgwMywgMzk4MDgsIDM5ODExLCAzOTgxNCwgMzk4MTcsIDM5ODIxLCAKKyAgICAzOTgyNiwgMzk4MjksIDM5ODMyLCAzOTgzNCwgMzk4MzcsIDM5ODQwLCAzOTg0MywgMzk4NDcsIDM5ODUyLCAzOTg1NSwgCisgICAgMzk4NTksIDM5ODYzLCAzOTg2NywgMzk4NzEsIDM5ODc2LCAzOTg4MiwgMzk4ODcsIDM5ODkyLCAzOTg5OCwgMzk5MDMsIAorICAgIDM5OTA4LCAzOTkxMiwgMzk5MTYsIDM5OTIxLCAzOTkyNSwgMzk5MjksIDM5OTMyLCAzOTkzNCwgMzk5MzksIDM5OTQ1LCAKKyAgICAzOTk1MiwgMzk5NTksIDM5OTY2LCAzOTk3MywgMzk5ODAsIDM5OTg3LCAzOTk5NCwgNDAwMDEsIDQwMDA5LCA0MDAxNiwgCisgICAgNDAwMjQsIDQwMDMxLCA0MDAzOCwgNDAwNDYsIDQwMDU0LCA0MDA1OSwgNDAwNjQsIDQwMDY5LCA0MDA3NCwgNDAwNzksIAorICAgIDQwMDg0LCA0MDA4OSwgNDAwOTQsIDQwMDk5LCA0MDEwNCwgNDAxMTAsIDQwMTE2LCA0MDEyMiwgNDAxMjgsIDQwMTM1LCAKKyAgICA0MDE0MywgNDAxNTAsIDQwMTU2LCA0MDE2MiwgNDAxNjgsIDQwMTc0LCA0MDE4MCwgNDAxODYsIDQwMTkyLCA0MDE5OCwgCisgICAgNDAyMDQsIDQwMjExLCA0MDIxOCwgNDAyMjUsIDQwMjMyLCA0MDI0MCwgNDAyNDksIDQwMjU3LCA0MDI2OCwgNDAyNzYsIAorICAgIDQwMjg0LCA0MDI5MywgNDAzMDAsIDQwMzA5LCA0MDMxOCwgNDAzMjYsIDQwMzM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDM0MywgCisgICAgNDAzNDUsIDQwMzQ4LCA0MDM1MCwgNDAzNTMsIDQwMzU2LCA0MDM1OSwgNDAzNjQsIDQwMzY5LCA0MDM3NCwgNDAzNzksIAorICAgIDQwMzgzLCA0MDM4NywgNDAzOTEsIDQwMzk1LCA0MDQwMCwgNDA0MDYsIDQwNDExLCA0MDQxNywgNDA0MjIsIDQwNDI3LCAKKyAgICA0MDQzMiwgNDA0MzgsIDQwNDQzLCA0MDQ0OSwgNDA0NTUsIDQwNDU5LCA0MDQ2MywgNDA0NjgsIDQwNDczLCA0MDQ3OCwgCisgICAgNDA0ODMsIDQwNDg4LCA0MDQ5NiwgNDA1MDQsIDQwNTEyLCA0MDUyMCwgNDA1MjcsIDQwNTM1LCA0MDU0MiwgNDA1NDksIAorICAgIDQwNTU4LCA0MDU3MCwgNDA1NzYsIDQwNTgyLCA0MDU5MCwgNDA1OTgsIDQwNjA3LCA0MDYxNiwgNDA2MjQsIDQwNjMyLCAKKyAgICA0MDY0MSwgNDA2NTAsIDQwNjU1LCA0MDY2MywgNDA2NjgsIDQwNjczLCA0MDY3OSwgNDA2ODQsIDQwNjkwLCA0MDY5NywgCisgICAgNDA3MDQsIDQwNzA5LCA0MDcxNSwgNDA3MjAsIDQwNzIzLCA0MDcyNywgNDA3MzAsIDQwNzM0LCA0MDczOCwgNDA3NDIsIAorICAgIDQwNzQ4LCA0MDc1NCwgNDA3NjAsIDQwNzY2LCA0MDc3MCwgNDA3NzQsIDQwNzc4LCA0MDc4MiwgNDA3ODgsIDQwNzk0LCAKKyAgICA0MDc5OCwgNDA4MDMsIDQwODA3LCA0MDgxMiwgNDA4MTcsIDQwODIyLCA0MDgyNSwgNDA4MjksIDQwODMyLCA0MDgzNiwgCisgICAgNDA4NDMsIDQwODUxLCA0MDg2MiwgNDA4NzMsIDQwODc4LCA0MDg4NywgNDA4OTQsIDQwOTAzLCA0MDkxMiwgNDA5MTYsIAorICAgIDQwOTIyLCA0MDkzMCwgNDA5MzQsIDQwOTM5LCA0MDk0NCwgNDA5NTAsIDQwOTU2LCA0MDk2MiwgNDA5NjksIDQwOTczLCAKKyAgICA0MDk3NywgNDA5ODIsIDQwOTg1LCA0MDk4NywgNDA5OTEsIDQwOTk1LCA0MTAwMywgNDEwMDcsIDQxMDA5LCA0MTAxMSwgCisgICAgNDEwMTUsIDQxMDIzLCA0MTAyOCwgNDEwMzQsIDQxMDQ0LCA0MTA1MSwgNDEwNTYsIDQxMDYwLCA0MTA2NCwgNDEwNjgsIAorICAgIDQxMDcxLCA0MTA3NCwgNDEwNzcsIDQxMDgxLCA0MTA4NSwgNDEwODksIDQxMDkzLCA0MTA5NywgNDExMDAsIDQxMTA0LCAKKyAgICA0MTEwOCwgNDExMTEsIDQxMTEzLCA0MTExNiwgNDExMTgsIDQxMTIyLCA0MTEyNiwgNDExMjgsIDQxMTM0LCA0MTEzNywgCisgICAgNDExNDIsIDQxMTQ2LCA0MTE1MCwgNDExNTIsIDQxMTU0LCA0MTE1NiwgNDExNTksIDQxMTYzLCA0MTE2NywgNDExNzEsIAorICAgIDQxMTc1LCA0MTE3OSwgNDExODUsIDQxMTkxLCA0MTE5MywgNDExOTUsIDQxMTk3LCA0MTE5OSwgNDEyMDIsIDQxMjA0LCAKKyAgICA0MTIwOCwgNDEyMTAsIDQxMjE0LCA0MTIxNywgNDEyMjMsIDQxMjI3LCA0MTIzMSwgNDEyMzQsIDQxMjM3LCA0MTI0MSwgCisgICAgNDEyNDcsIDQxMjUxLCA0MTI2MSwgNDEyNzEsIDQxMjc1LCA0MTI4MSwgNDEyODcsIDQxMjkwLCA0MTI5NCwgNDEyOTcsIAorICAgIDQxMzAyLCA0MTMwNiwgNDEzMTIsIDQxMzE2LCA0MTMyOCwgNDEzMzYsIDQxMzQwLCA0MTM0NCwgNDEzNTAsIDQxMzU0LCAKKyAgICA0MTM1NywgNDEzNTksIDQxMzYyLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MSwgNDEzODUsIDQxMzg5LCA0MTM5MiwgCisgICAgNDEzOTcsIDQxNDAyLCA0MTQwNywgNDE0MTIsIDQxNDE3LCA0MTQyMiwgNDE0MzAsIDQxNDM4LCA0MTQ0MiwgNDE0NDYsIAorICAgIDQxNDQ4LCA0MTQ1MywgNDE0NTcsIDQxNDYxLCA0MTQ2OSwgNDE0NzcsIDQxNDgzLCA0MTQ4OSwgNDE0OTgsIDQxNTA3LCAKKyAgICA0MTUxMiwgNDE1MTcsIDQxNTI1LCA0MTUzMywgNDE1MzUsIDQxNTM3LCA0MTU0MiwgNDE1NDcsIDQxNTUzLCA0MTU1OSwgCisgICAgNDE1NjUsIDQxNTcxLCA0MTU3NSwgNDE1NzksIDQxNTg2LCA0MTU5MywgNDE1OTksIDQxNjA1LCA0MTYxNSwgNDE2MjUsIAorICAgIDQxNjMzLCA0MTY0MSwgNDE2NDMsIDQxNjQ3LCA0MTY1MSwgNDE2NTYsIDQxNjYxLCA0MTY2OCwgNDE2NzUsIDQxNjc4LCAKKyAgICA0MTY4MSwgNDE2ODQsIDQxNjg3LCA0MTY5MCwgNDE2OTUsIDQxNjk5LCA0MTcwNCwgNDE3MDksIDQxNzEyLCA0MTcxNSwgCisgICAgNDE3MTgsIDQxNzIxLCA0MTcyNCwgNDE3MjgsIDQxNzMxLCA0MTczNCwgNDE3MzcsIDQxNzQwLCA0MTc0MiwgNDE3NDQsIAorICAgIDQxNzQ2LCA0MTc0OCwgNDE3NTYsIDQxNzY0LCA0MTc3MCwgNDE3NzQsIDQxNzgwLCA0MTc5MCwgNDE3OTYsIDQxODAyLCAKKyAgICA0MTgwOCwgNDE4MTYsIDQxODI0LCA0MTgzNSwgNDE4MzksIDQxODQzLCA0MTg0NSwgNDE4NTEsIDQxODUzLCA0MTg1NSwgCisgICAgNDE4NTcsIDQxODU5LCA0MTg2NSwgNDE4NjgsIDQxODc0LCA0MTg4MCwgNDE4ODQsIDQxODg4LCA0MTg5MiwgNDE4OTUsIAorICAgIDQxODk5LCA0MTkwMywgNDE5MDUsIDQxOTE0LCA0MTkyMywgNDE5MjgsIDQxOTMzLCA0MTkzOSwgNDE5NDUsIDQxOTUxLCAKKyAgICA0MTk1NCwgNDE5NTcsIDQxOTYwLCA0MTk2MywgNDE5NjUsIDQxOTcwLCA0MTk3NSwgNDE5ODAsIDQxOTg2LCA0MTk5MiwgCisgICAgNDIwMDAsIDQyMDA4LCA0MjAxNCwgNDIwMjAsIDQyMDI2LCA0MjAzMiwgNDIwNDEsIDQyMDUwLCA0MjA1OSwgNDIwNjgsIAorICAgIDQyMDc3LCA0MjA4NiwgNDIwOTUsIDQyMTA0LCA0MjExMywgNDIxMjIsIDQyMTMwLCA0MjE0MiwgNDIxNTIsIDQyMTY3LCAKKyAgICA0MjE3MCwgNDIxNzUsIDQyMTgxLCA0MjE4NywgNDIxOTQsIDQyMjA4LCA0MjIyMywgNDIyMjksIDQyMjM1LCA0MjI0MiwgCisgICAgNDIyNDgsIDQyMjU2LCA0MjI2MiwgNDIyNzUsIDQyMjg5LCA0MjI5NCwgNDIzMDAsIDQyMzA3LCA0MjMxMCwgNDIzMTMsIAorICAgIDQyMzE1LCA0MjMxOCwgNDIzMjEsIDQyMzIzLCA0MjMyNSwgNDIzMjksIDQyMzMyLCA0MjMzNSwgNDIzMzgsIDQyMzQxLCAKKyAgICA0MjM0NiwgNDIzNTEsIDQyMzU2LCA0MjM2MSwgNDIzNjYsIDQyMzY5LCA0MjM3MSwgNDIzNzMsIDQyMzc1LCA0MjM3OSwgCisgICAgNDIzODMsIDQyMzg3LCA0MjM5MywgNDIzOTgsIDQyNDAwLCA0MjQwMiwgNDI0MDcsIDQyNDEyLCA0MjQxNywgNDI0MjIsIAorICAgIDQyNDI3LCA0MjQzMiwgNDI0MzQsIDQyNDM2LCA0MjQ0NSwgNDI0NDksIDQyNDU3LCA0MjQ2NiwgNDI0NjgsIDQyNDczLCAKKyAgICA0MjQ3OCwgNDI0ODYsIDQyNDkwLCA0MjQ5MiwgNDI0OTYsIDQyNDk4LCA0MjUwMiwgNDI1MDYsIDQyNTEwLCA0MjUxMiwgCisgICAgNDI1MTQsIDQyNTE2LCA0MjUyMywgNDI1MzIsIDQyNTQxLCA0MjU1MCwgNDI1NTksIDQyNTY4LCA0MjU3NywgNDI1ODYsIAorICAgIDQyNTk1LCA0MjYwMywgNDI2MTEsIDQyNjIwLCA0MjYyOSwgNDI2MzgsIDQyNjQ3LCA0MjY1NSwgNDI2NjMsIDQyNjcyLCAKKyAgICA0MjY4MSwgNDI2OTAsIDQyNzAwLCA0MjcwOSwgNDI3MTksIDQyNzI4LCA0MjczOCwgNDI3NDcsIDQyNzU3LCA0Mjc2NywgCisgICAgNDI3NzYsIDQyNzg2LCA0Mjc5NSwgNDI4MDUsIDQyODE0LCA0MjgyNCwgNDI4MzMsIDQyODQyLCA0Mjg1MSwgNDI4NjAsIAorICAgIDQyODY5LCA0Mjg3OSwgNDI4ODgsIDQyODk3LCA0MjkwNiwgNDI5MTYsIDQyOTI1LCA0MjkzNCwgNDI5NDMsIDQyOTUyLCAKKyAgICA0Mjk2MiwgNDI5NzIsIDQyOTgxLCA0Mjk5MCwgNDI5OTgsIDQzMDA2LCA0MzAxMywgNDMwMjEsIDQzMDMwLCA0MzA0MSwgCisgICAgNDMwNTAsIDQzMDU5LCA0MzA2OCwgNDMwNzUsIDQzMDgyLCA0MzA4OSwgNDMwOTgsIDQzMTA3LCA0MzExNiwgNDMxMjUsIAorICAgIDQzMTMyLCA0MzEzNywgNDMxNDYsIDQzMTUxLCA0MzE1NCwgNDMxNjIsIDQzMTY1LCA0MzE3MCwgNDMxNzUsIDQzMTc4LCAKKyAgICA0MzE4MSwgNDMxODksIDQzMTkyLCA0MzE5NywgNDMyMDAsIDQzMjA3LCA0MzIxMiwgNDMyMjAsIDQzMjIzLCA0MzIyNiwgCisgICAgNDMyMjksIDQzMjM0LCA0MzIzOSwgNDMyNDIsIDQzMjQ1LCA0MzI1MywgNDMyNTYsIDQzMjYzLCA0MzI3MCwgNDMyNzQsIAorICAgIDQzMjc4LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzI5OSwgNDMzMDUsIDQzMzExLCA0MzMxNiwgNDMzMjIsIDQzMzMwLCAKKyAgICA0MzMzNiwgNDMzNDQsIDQzMzUyLCA0MzM1OCwgNDMzNjYsIDQzMzc0LCA0MzM4MywgNDMzOTEsIDQzMzk3LCA0MzQwNSwgCisgICAgNDM0MTQsIDQzNDIyLCA0MzQyNiwgNDM0MzEsIDQzNDQ0LCA0MzQ1NywgNDM0NjEsIDQzNDY1LCA0MzQ2OSwgNDM0NzMsIAorICAgIDQzNDgzLCA0MzQ4NywgNDM0OTIsIDQzNDk3LCA0MzUwMiwgNDM1MDcsIDQzNTEyLCA0MzUxNywgNDM1MjcsIDQzNTM3LCAKKyAgICA0MzU0NSwgNDM1NTUsIDQzNTY1LCA0MzU3MywgNDM1ODMsIDQzNTkzLCA0MzYwMSwgNDM2MTEsIDQzNjIxLCA0MzYyOSwgCisgICAgNDM2MzcsIDQzNjQ3LCA0MzY1NywgNDM2NjAsIDQzNjYzLCA0MzY2NiwgNDM2NzEsIDQzNjc1LCA0MzY4MSwgNDM2ODgsIAorICAgIDQzNjk1LCA0MzcwMywgNDM3MTAsIDQzNzE0LCA0MzcxOCwgNDM3MjIsIDQzNzI2LCA0MzcyOCwgNDM3MzIsIDQzNzM2LCAKKyAgICA0Mzc0MSwgNDM3NDYsIDQzNzUzLCA0Mzc2MCwgNDM3NjMsIDQzNzcwLCA0Mzc3MiwgNDM3NzQsIDQzNzc4LCA0Mzc4MiwgCisgICAgNDM3ODcsIDQzNzkzLCA0Mzc5OSwgNDM4MDUsIDQzODExLCA0MzgyMCwgNDM4MjksIDQzODM4LCA0Mzg0MiwgNDM4NDQsIAorICAgIDQzODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Mzg1NSwgNDM4NTksIDQzODY2LCA0Mzg3MywgCisgICAgNDM4ODAsIDQzODg3LCA0Mzg5MSwgNDM4OTUsIDQzODk5LCA0MzkwMywgNDM5MDgsIDQzOTE0LCA0MzkxOSwgNDM5MjUsIAorICAgIDQzOTMxLCA0MzkzNywgNDM5NDMsIDQzOTUxLCA0Mzk1OCwgNDM5NjUsIDQzOTcyLCA0Mzk3OSwgNDM5ODQsIDQzOTkwLCAKKyAgICA0Mzk5OSwgNDQwMDMsIDQ0MDEwLCA0NDAxNCwgNDQwMTgsIDQ0MDI0LCA0NDAzMCwgNDQwMzYsIDQ0MDQyLCA0NDA0NiwgCisgICAgNDQwNTAsIDQ0MDUzLCA0NDA1NiwgNDQwNjAsIDQ0MDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDA3NCwgNDQwNzcsIDQ0MDgxLCA0NDA4NSwgNDQwOTEsIAorICAgIDQ0MDk3LCA0NDEwMywgNDQxMTEsIDQ0MTE4LCA0NDEyMiwgNDQxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MTM1LCA0NDEzOCwgNDQxNDEsIDQ0MTQ0LCA0NDE0NywgCisgICAgNDQxNTAsIDQ0MTUzLCA0NDE1NiwgNDQxNTksIDQ0MTYyLCA0NDE2NiwgNDQxNzAsIDQ0MTc0LCA0NDE3OCwgNDQxODIsIAorICAgIDQ0MTg2LCA0NDE5MCwgNDQxOTQsIDQ0MTk4LCA0NDIwMiwgNDQyMDYsIDQ0MjA5LCA0NDIxMiwgNDQyMTUsIDQ0MjE4LCAKKyAgICA0NDIyMSwgNDQyMjQsIDQ0MjI3LCA0NDIzMCwgNDQyMzMsIDQ0MjM3LCA0NDI0MSwgNDQyNDUsIDQ0MjQ5LCA0NDI1MywgCisgICAgNDQyNTcsIDQ0MjYxLCA0NDI2NSwgNDQyNjksIDQ0MjczLCA0NDI3NywgNDQyODMsIDQ0Mjg5LCA0NDI5NSwgNDQzMDIsIAorICAgIDQ0MzA5LCA0NDMxNiwgNDQzMjMsIDQ0MzMwLCA0NDMzNywgNDQzNDQsIDQ0MzUxLCA0NDM1OCwgNDQzNjUsIDQ0MzcyLCAKKyAgICA0NDM3OSwgNDQzODYsIDQ0MzkzLCA0NDQwMCwgNDQ0MDcsIDQ0NDE0LCA0NDQxOSwgNDQ0MjUsIDQ0NDMxLCA0NDQzNywgCisgICAgNDQ0NDIsIDQ0NDQ4LCA0NDQ1NCwgNDQ0NjAsIDQ0NDY1LCA0NDQ3MSwgNDQ0NzcsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAorICAgIDQ0NDk4LCA0NDUwNCwgNDQ1MTAsIDQ0NTE1LCA0NDUyMSwgNDQ1MjcsIDQ0NTMyLCA0NDUzOCwgNDQ1NDQsIDQ0NTUwLCAKKyAgICA0NDU1NiwgNDQ1NjIsIDQ0NTY3LCA0NDU3MywgNDQ1NzksIDQ0NTg1LCA0NDU5MCwgNDQ1OTYsIDQ0NjAyLCA0NDYwOCwgCisgICAgNDQ2MTMsIDQ0NjE5LCA0NDYyNSwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDYsIDQ0NjUyLCA0NDY1OCwgNDQ2NjMsIAorICAgIDQ0NjY5LCA0NDY3NSwgNDQ2ODAsIDQ0Njg2LCA0NDY5MiwgNDQ2OTgsIDQ0NzA0LCA0NDcxMCwgNDQ3MTUsIDQ0NzIxLCAKKyAgICA0NDcyNywgNDQ3MzMsIDQ0NzM4LCA0NDc0NCwgNDQ3NTAsIDQ0NzU2LCA0NDc2MSwgNDQ3NjcsIDQ0NzczLCA0NDc3OCwgCisgICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NCwgNDQ4MDAsIDQ0ODA2LCA0NDgxMSwgNDQ4MTcsIDQ0ODIzLCA0NDgyOCwgNDQ4MzQsIAorICAgIDQ0ODQwLCA0NDg0NiwgNDQ4NTIsIDQ0ODU4LCA0NDg2MiwgNDQ4NjcsIDQ0ODcyLCA0NDg3NywgNDQ4ODIsIDQ0ODg3LCAKKyAgICA0NDg5MiwgNDQ4OTcsIDQ0OTAyLCA0NDkwNywgNDQ5MTIsIDQ0OTE2LCA0NDkyMCwgNDQ5MjQsIDQ0OTI4LCA0NDkzMiwgCisgICAgNDQ5MzYsIDQ0OTQwLCA0NDk0NCwgNDQ5NDgsIDQ0OTUzLCA0NDk1OCwgNDQ5NjMsIDQ0OTY4LCA0NDk3MywgNDQ5NzgsIAorICAgIDQ0OTg3LCA0NDk5NiwgNDUwMDUsIDQ1MDE0LCA0NTAyMywgNDUwMzIsIDQ1MDQxLCA0NTA1MCwgNDUwNTcsIDQ1MDY1LCAKKyAgICA0NTA3MywgNDUwODAsIDQ1MDg3LCA0NTA5NSwgNDUxMDMsIDQ1MTEwLCA0NTExNywgNDUxMjUsIDQ1MTMzLCA0NTE0MCwgCisgICAgNDUxNDcsIDQ1MTU1LCA0NTE2MywgNDUxNzAsIDQ1MTc3LCA0NTE4NSwgNDUxOTQsIDQ1MjAzLCA0NTIxMSwgNDUyMjAsIAorICAgIDQ1MjI5LCA0NTIzNiwgNDUyNDMsIDQ1MjUxLCA0NTI2MCwgNDUyNjksIDQ1Mjc3LCA0NTI4NiwgNDUyOTUsIDQ1MzAyLCAKKyAgICA0NTMwOSwgNDUzMTgsIDQ1MzI3LCA0NTMzNSwgNDUzNDMsIDQ1MzUyLCA0NTM2MSwgNDUzNjgsIDQ1Mzc1LCA0NTM4NCwgCisgICAgNDUzOTMsIDQ1NDAxLCA0NTQwOSwgNDU0MTgsIDQ1NDI3LCA0NTQzNCwgNDU0NDEsIDQ1NDUwLCA0NTQ1OSwgNDU0NjcsIAorICAgIDQ1NDc2LCA0NTQ4NSwgNDU0OTMsIDQ1NTAzLCA0NTUxMywgNDU1MjMsIDQ1NTMzLCA0NTU0MiwgNDU1NTEsIDQ1NTYwLCAKKyAgICA0NTU2OSwgNDU1NzYsIDQ1NTg0LCA0NTU5MiwgNDU2MDAsIDQ1NjA4LCA0NTYxMywgNDU2MTgsIDQ1NjI3LCA0NTYzNSwgCisgICAgNDU2NDIsIDQ1NjUxLCA0NTY1OSwgNDU2NjYsIDQ1Njc1LCA0NTY4MywgNDU2OTAsIDQ1Njk5LCA0NTcwNywgNDU3MTQsIAorICAgIDQ1NzIzLCA0NTczMSwgNDU3MzgsIDQ1NzQ3LCA0NTc1NSwgNDU3NjIsIDQ1NzcxLCA0NTc3OSwgNDU3ODYsIDQ1Nzk1LCAKKyAgICA0NTgwMywgNDU4MTAsIDQ1ODE5LCA0NTgyNywgNDU4MzQsIDQ1ODQzLCA0NTg1MiwgNDU4NjEsIDQ1ODcwLCA0NTg4NCwgCisgICAgNDU4OTgsIDQ1OTA1LCA0NTkxMCwgNDU5MTUsIDQ1OTIwLCA0NTkyNSwgNDU5MzAsIDQ1OTM1LCA0NTk0MCwgNDU5NDUsIAorICAgIDQ1OTUzLCA0NTk2MSwgNDU5NjksIDQ1OTc3LCA0NTk4MiwgNDU5ODksIDQ1OTk2LCA0NjAwMywgNDYwMDgsIDQ2MDE2LCAKKyAgICA0NjAyMywgNDYwMzEsIDQ2MDM1LCA0NjA0MiwgNDYwNDgsIDQ2MDU1LCA0NjA1OSwgNDYwNjUsIDQ2MDcxLCA0NjA3NywgCisgICAgNDYwODEsIDQ2MDg0LCA0NjA4OCwgNDYwOTIsIDQ2MDk5LCA0NjEwNSwgNDYxMTEsIDQ2MTE3LCA0NjEyMywgNDYxMzcsIAorICAgIDQ2MTQ3LCA0NjE2MSwgNDYxNzUsIDQ2MTgxLCA0NjE5MSwgNDYyMDUsIDQ2MjA4LCA0NjIxMSwgNDYyMTgsIDQ2MjI2LCAKKyAgICA0NjIzMSwgNDYyMzYsIDQ2MjQ0LCA0NjI1NiwgNDYyNjgsIDQ2Mjc2LCA0NjI4MCwgNDYyODQsIDQ2Mjg3LCA0NjI5MCwgCisgICAgNDYyOTQsIDQ2Mjk4LCA0NjMwMSwgNDYzMDQsIDQ2MzA5LCA0NjMxNCwgNDYzMjAsIDQ2MzI2LCA0NjMzMSwgNDYzMzYsIAorICAgIDQ2MzQyLCA0NjM0OCwgNDYzNTMsIDQ2MzU4LCA0NjM2MywgNDYzNjgsIDQ2Mzc0LCA0NjM4MCwgNDYzODUsIDQ2MzkwLCAKKyAgICA0NjM5NiwgNDY0MDIsIDQ2NDA3LCA0NjQxMiwgNDY0MTUsIDQ2NDE4LCA0NjQyNywgNDY0MjksIDQ2NDMxLCA0NjQzNCwgCisgICAgNDY0MzgsIDQ2NDQ0LCA0NjQ0NiwgNDY0NDksIDQ2NDU2LCA0NjQ2MywgNDY0NzEsIDQ2NDc5LCA0NjQ4OSwgNDY1MDMsIAorICAgIDQ2NTA4LCA0NjUxMywgNDY1MTcsIDQ2NTIyLCA0NjUzMCwgNDY1MzgsIDQ2NTQ3LCA0NjU1NiwgNDY1NjUsIDQ2NTc0LCAKKyAgICA0NjU3OSwgNDY1ODQsIDQ2NTkwLCA0NjU5NiwgNDY2MDIsIDQ2NjA4LCA0NjYxMSwgNDY2MTcsIDQ2NjIzLCA0NjYzMywgCisgICAgNDY2NDMsIDQ2NjUxLCA0NjY1OSwgNDY2NjgsIDQ2Njc3LCA0NjY4MSwgNDY2ODksIDQ2Njk3LCA0NjcwNSwgNDY3MTMsIAorICAgIDQ2NzIyLCA0NjczMSwgNDY3NDAsIDQ2NzQ5LCA0Njc1NCwgNDY3NTksIDQ2NzY0LCA0Njc2OSwgNDY3NzQsIDQ2NzgwLCAKKyAgICA0Njc4NiwgNDY3OTEsIDQ2Nzk3LCA0Njc5OSwgNDY4MDEsIDQ2ODAzLCA0NjgwNSwgNDY4MDgsIDQ2ODExLCA0NjgxMywgCisgICAgNDY4MTUsIDQ2ODE3LCA0NjgyMSwgNDY4MjUsIDQ2ODI3LCA0NjgyOSwgNDY4MzIsIDQ2ODM1LCA0NjgzOSwgNDY4NDUsIAorICAgIDQ2ODUxLCA0Njg1MywgNDY4NjAsIDQ2ODY0LCA0Njg2OSwgNDY4NzQsIDQ2ODc2LCA0Njg4NiwgNDY4OTIsIDQ2ODk4LCAKKyAgICA0NjkwNCwgNDY5MTAsIDQ2OTE2LCA0NjkyMiwgNDY5MjcsIDQ2OTMwLCA0NjkzMywgNDY5MzYsIDQ2OTM4LCA0Njk0MCwgCisgICAgNDY5NDQsIDQ2OTQ4LCA0Njk1MywgNDY5NTgsIDQ2OTYzLCA0Njk2NiwgNDY5NzAsIDQ2OTc1LCA0Njk3OCwgNDY5ODIsIAorICAgIDQ2OTg3LCA0Njk5MiwgNDY5OTcsIDQ3MDAyLCA0NzAwNywgNDcwMTIsIDQ3MDE3LCA0NzAyMiwgNDcwMjcsIDQ3MDMyLCAKKyAgICA0NzAzNywgNDcwNDIsIDQ3MDQ4LCA0NzA1NCwgNDcwNjAsIDQ3MDYyLCA0NzA2NSwgNDcwNjcsIDQ3MDcwLCA0NzA3MiwgCisgICAgNDcwNzQsIDQ3MDc2LCA0NzA3OCwgNDcwODAsIDQ3MDgyLCA0NzA4NCwgNDcwODYsIDQ3MDg4LCA0NzA5MCwgNDcwOTIsIAorICAgIDQ3MDk0LCA0NzA5NiwgNDcwOTgsIDQ3MTAwLCA0NzEwMiwgNDcxMDQsIDQ3MTA5LCA0NzExNCwgNDcxMTksIDQ3MTI0LCAKKyAgICA0NzEyOSwgNDcxMzQsIDQ3MTM5LCA0NzE0NCwgNDcxNDksIDQ3MTU0LCA0NzE1OSwgNDcxNjQsIDQ3MTY5LCA0NzE3NCwgCisgICAgNDcxNzksIDQ3MTg0LCA0NzE4OSwgNDcxOTQsIDQ3MTk5LCA0NzIwNCwgNDcyMDgsIDQ3MjEyLCA0NzIxNiwgNDcyMjIsIAorICAgIDQ3MjI4LCA0NzIzMywgNDcyMzgsIDQ3MjQzLCA0NzI0OCwgNDcyNTMsIDQ3MjU4LCA0NzI2NiwgNDcyNzQsIDQ3MjgyLCAKKyAgICA0NzI5MCwgNDcyOTgsIDQ3MzA2LCA0NzMxNCwgNDczMjIsIDQ3MzI4LCA0NzMzMywgNDczMzgsIDQ3MzQzLCA0NzM0NiwgCisgICAgNDczNTAsIDQ3MzU0LCA0NzM1OCwgNDczNjIsIDQ3MzY2LCA0NzM3MCwgNDczNzcsIDQ3Mzg0LCA0NzM5MiwgNDc0MDAsIAorICAgIDQ3NDA1LCA0NzQxMCwgNDc0MTcsIDQ3NDI0LCA0NzQzMSwgNDc0MzgsIDQ3NDQxLCA0NzQ0NCwgNDc0NDksIDQ3NDUxLCAKKyAgICA0NzQ1NSwgNDc0NjAsIDQ3NDYyLCA0NzQ2NCwgNDc0NjYsIDQ3NDY4LCA0NzQ3MywgNDc0NzYsIDQ3NDc4LCA0NzQ4MywgCisgICAgNDc0OTAsIDQ3NDk3LCA0NzUwMCwgNDc1MDQsIDQ3NTA5LCA0NzUxNCwgNDc1MjIsIDQ3NTI4LCA0NzUzNCwgNDc1NDYsIAorICAgIDQ3NTUzLCA0NzU2MCwgNDc1NjUsIDQ3NTcwLCA0NzU3NiwgNDc1NzksIDQ3NTgyLCA0NzU4NywgNDc1ODksIDQ3NTkzLCAKKyAgICA0NzU5NSwgNDc1OTcsIDQ3NTk5LCA0NzYwMSwgNDc2MDMsIDQ3NjA1LCA0NzYxMCwgNDc2MTIsIDQ3NjE0LCA0NzYxNiwgCisgICAgNDc2MTgsIDQ3NjIyLCA0NzYyNCwgNDc2MjcsIDQ3NjMyLCA0NzYzNywgNDc2NDIsIDQ3NjQ3LCA0NzY1MywgNDc2NTksIAorICAgIDQ3NjYxLCA0NzY2NCwgNDc2NzEsIDQ3Njc4LCA0NzY4NSwgNDc2OTIsIDQ3Njk2LCA0NzcwMCwgNDc3MDIsIDQ3NzA0LCAKKyAgICA0NzcwOCwgNDc3MTQsIDQ3NzE5LCA0NzcyMSwgNDc3MjUsIDQ3NzM0LCA0Nzc0MiwgNDc3NTAsIDQ3NzU2LCA0Nzc2MiwgCisgICAgNDc3NjcsIDQ3NzczLCA0Nzc3OCwgNDc3ODEsIDQ3Nzk1LCA0Nzc5OCwgNDc4MDMsIDQ3ODA4LCA0NzgxNCwgNDc4MjQsIAorICAgIDQ3ODI2LCA0NzgzMiwgNDc4MzgsIDQ3ODQyLCA0Nzg0OSwgNDc4NTMsIDQ3ODU1LCA0Nzg1NywgNDc4NjEsIDQ3ODY3LCAKKyAgICA0Nzg3MiwgNDc4NzgsIDQ3ODgwLCA0Nzg4NiwgNDc4ODgsIDQ3ODk0LCA0Nzg5NiwgNDc4OTgsIDQ3OTAzLCA0NzkwNSwgCisgICAgNDc5MDksIDQ3OTE0LCA0NzkxNiwgNDc5MjEsIDQ3OTI2LCA0NzkzMCwgNDc5MzcsIDAsIDQ3OTQ3LCA0Nzk1MywgNDc5NTYsIAorICAgIDQ3OTYyLCA0Nzk2NSwgNDc5NzAsIDQ3OTc1LCA0Nzk3OSwgNDc5ODEsIDQ3OTgzLCA0Nzk4NywgNDc5OTEsIDQ3OTk1LCAKKyAgICA0Nzk5OSwgNDgwMDQsIDQ4MDA2LCA0ODAxMSwgNDgwMTQsIDQ4MDE3LCA0ODAyMCwgNDgwMjQsIDQ4MDI4LCA0ODAzMywgCisgICAgNDgwMzcsIDQ4MDQyLCA0ODA0NywgNDgwNTEsIDQ4MDU2LCA0ODA2MiwgNDgwNjUsIDQ4MDcxLCA0ODA3NiwgNDgwODAsIAorICAgIDQ4MDg1LCA0ODA5MSwgNDgwOTcsIDQ4MTA0LCA0ODExMCwgNDgxMTcsIDQ4MTI0LCA0ODEyNiwgNDgxMzMsIDQ4MTM3LCAKKyAgICA0ODE0MywgNDgxNDksIDQ4MTU0LCA0ODE2MCwgNDgxNjQsIDQ4MTY5LCA0ODE3MiwgNDgxNzcsIDQ4MTgzLCA0ODE5MCwgCisgICAgNDgxOTgsIDQ4MjA1LCA0ODIxNCwgNDgyMjQsIDQ4MjMxLCA0ODIzNywgNDgyNDEsIDQ4MjQ4LCA0ODI1MywgNDgyNjIsIAorICAgIDQ4MjY1LCA0ODI2OCwgNDgyNzcsIDQ4Mjg3LCA0ODI5NCwgNDgyOTYsIDQ4MzAyLCA0ODMwNywgNDgzMDksIDQ4MzEyLCAKKyAgICA0ODMxNiwgNDgzMjQsIDQ4MzMzLCA0ODMzNiwgNDgzNDEsIDQ4MzQ2LCA0ODM1NCwgNDgzNjIsIDQ4MzcwLCA0ODM3OCwgCisgICAgNDgzODQsIDQ4MzkwLCA0ODM5NiwgNDg0MDQsIDQ4NDA5LCA0ODQxMiwgNDg0MTYsIDQ4NDE5LCA0ODQzMSwgNDg0NDEsIAorICAgIDQ4NDUyLCA0ODQ2MSwgNDg0NzIsIDQ4NDgyLCA0ODQ5MSwgNDg0OTcsIDQ4NTA1LCA0ODUwOSwgNDg1MTcsIDQ4NTIxLCAKKyAgICA0ODUyOSwgNDg1MzYsIDQ4NTQzLCA0ODU1MiwgNDg1NjEsIDQ4NTcxLCA0ODU4MSwgNDg1OTEsIDQ4NjAxLCA0ODYxMCwgCisgICAgNDg2MTksIDQ4NjI5LCA0ODYzOSwgNDg2NDgsIDQ4NjU3LCA0ODY2MywgNDg2NjksIDQ4Njc1LCA0ODY4MSwgNDg2ODcsIAorICAgIDQ4NjkzLCA0ODY5OSwgNDg3MDUsIDQ4NzExLCA0ODcxOCwgNDg3MjQsIDQ4NzMwLCA0ODczNiwgNDg3NDIsIDQ4NzQ4LCAKKyAgICA0ODc1NCwgNDg3NjAsIDQ4NzY2LCA0ODc3MiwgNDg3NzksIDQ4Nzg2LCA0ODc5MywgNDg4MDAsIDQ4ODA3LCA0ODgxNCwgCisgICAgNDg4MjEsIDQ4ODI4LCA0ODgzNSwgNDg4NDIsIDQ4ODUwLCA0ODg1NSwgNDg4NTgsIDQ4ODYyLCA0ODg2NiwgNDg4NzIsIAorICAgIDQ4ODc1LCA0ODg4MSwgNDg4ODcsIDQ4ODkyLCA0ODg5NiwgNDg5MDEsIDQ4OTA3LCA0ODkxNCwgNDg5MTcsIDQ4OTI0LCAKKyAgICA0ODkzMSwgNDg5MzUsIDQ4OTQ0LCA0ODk1MywgNDg5NTgsIDQ4OTY0LCA0ODk2OSwgNDg5NzQsIDQ4OTgxLCA0ODk4OCwgCisgICAgNDg5OTYsIDQ5MDA0LCA0OTAxMywgNDkwMTcsIDQ5MDI2LCA0OTAzMSwgNDkwMzUsIDQ5MDQyLCA0OTA0NiwgNDkwNTMsIAorICAgIDQ5MDYxLCA0OTA2NiwgNDkwNzQsIDQ5MDc4LCA0OTA4MywgNDkwODcsIDQ5MDkyLCA0OTA5NiwgNDkxMDEsIDQ5MTA2LCAKKyAgICA0OTExNSwgNDkxMTcsIDQ5MTIwLCA0OTEyMywgNDkxMzAsIDQ5MTM3LCA0OTE0MiwgNDkxNTAsIDQ5MTU2LCA0OTE2MiwgCisgICAgNDkxNjcsIDQ5MTcwLCA0OTE3NSwgNDkxODAsIDQ5MTg1LCA0OTE5MywgNDkxOTcsIDQ5MjA0LCA0OTIxMiwgNDkyMjAsIAorICAgIDQ5MjI1LCA0OTIzMCwgNDkyMzYsIDQ5MjQxLCA0OTI0NiwgNDkyNTIsIDQ5MjU3LCA0OTI2MCwgNDkyNjQsIDQ5MjY4LCAKKyAgICA0OTI3NSwgNDkyODQsIDQ5Mjg5LCA0OTI5OCwgNDkzMDcsIDQ5MzEzLCA0OTMxOSwgNDkzMjQsIDQ5MzI5LCA0OTMzNCwgCisgICAgNDkzMzksIDQ5MzQ1LCA0OTM1MSwgNDkzNTksIDQ5MzY3LCA0OTM3MywgNDkzNzksIDQ5Mzg0LCA0OTM4OSwgNDkzOTYsIAorICAgIDQ5NDAzLCA0OTQwOSwgNDk0MTIsIDQ5NDE1LCA0OTQxOSwgNDk0MjMsIDQ5NDI3LCA0OTQzMiwgNDk0MzgsIDQ5NDQ0LCAKKyAgICA0OTQ1MSwgNDk0NTgsIDQ5NDYzLCA0OTQ2NywgNDk0NzEsIDQ5NDc1LCA0OTQ3OSwgNDk0ODMsIDQ5NDg3LCA0OTQ5MSwgCisgICAgNDk0OTUsIDQ5NDk5LCA0OTUwMywgNDk1MDcsIDQ5NTExLCA0OTUxNSwgNDk1MTksIDQ5NTIzLCA0OTUyNywgNDk1MzEsIAorICAgIDQ5NTM1LCA0OTUzOSwgNDk1NDMsIDQ5NTQ3LCA0OTU1MSwgNDk1NTUsIDQ5NTU5LCA0OTU2MywgNDk1NjcsIDQ5NTcxLCAKKyAgICA0OTU3NSwgNDk1NzksIDQ5NTgzLCA0OTU4NywgNDk1OTEsIDQ5NTk1LCA0OTU5OSwgNDk2MDMsIDQ5NjA3LCA0OTYxMSwgCisgICAgNDk2MTUsIDQ5NjE5LCA0OTYyMywgNDk2MjcsIDQ5NjMxLCA0OTYzNSwgNDk2MzksIDQ5NjQzLCA0OTY0NywgNDk2NTEsIAorICAgIDQ5NjU1LCA0OTY1OSwgNDk2NjMsIDQ5NjY3LCA0OTY3MSwgNDk2NzUsIDQ5Njc5LCA0OTY4MywgNDk2ODcsIDQ5NjkxLCAKKyAgICA0OTY5NSwgNDk2OTksIDQ5NzAzLCA0OTcwNywgNDk3MTEsIDQ5NzE1LCA0OTcxOSwgNDk3MjMsIDQ5NzI3LCA0OTczMSwgCisgICAgNDk3MzUsIDQ5NzM5LCA0OTc0MywgNDk3NDcsIDQ5NzUxLCA0OTc1NSwgNDk3NTksIDQ5NzYzLCA0OTc2NywgNDk3NzEsIAorICAgIDQ5Nzc1LCA0OTc3OSwgNDk3ODMsIDQ5Nzg3LCA0OTc5MSwgNDk3OTUsIDQ5Nzk5LCA0OTgwMywgNDk4MDcsIDQ5ODExLCAKKyAgICA0OTgxNSwgNDk4MTksIDQ5ODIzLCA0OTgyNywgNDk4MzEsIDQ5ODM1LCA0OTgzOSwgNDk4NDMsIDQ5ODQ3LCA0OTg1MSwgCisgICAgNDk4NTUsIDQ5ODU5LCA0OTg2MywgNDk4NjcsIDQ5ODcxLCA0OTg3NSwgNDk4NzksIDQ5ODgzLCA0OTg4NywgNDk4OTEsIAorICAgIDQ5ODk1LCA0OTg5OSwgNDk5MDMsIDQ5OTA3LCA0OTkxMSwgNDk5MTUsIDQ5OTE5LCA0OTkyMywgNDk5MjcsIDQ5OTMxLCAKKyAgICA0OTkzNSwgNDk5MzksIDQ5OTQzLCA0OTk0NywgNDk5NTEsIDQ5OTU1LCA0OTk1OSwgNDk5NjMsIDQ5OTY3LCA0OTk3MSwgCisgICAgNDk5NzUsIDQ5OTc5LCA0OTk4MywgNDk5ODcsIDQ5OTkxLCA0OTk5NSwgNDk5OTksIDUwMDAzLCA1MDAwNywgNTAwMTEsIAorICAgIDUwMDE1LCA1MDAxOSwgNTAwMjMsIDUwMDI3LCA1MDAzMSwgNTAwMzUsIDUwMDM5LCA1MDA0MywgNTAwNDcsIDUwMDUxLCAKKyAgICA1MDA1NSwgNTAwNTksIDUwMDYzLCA1MDA2NywgNTAwNzEsIDUwMDc1LCA1MDA3OSwgNTAwODMsIDUwMDg3LCA1MDA5MSwgCisgICAgNTAwOTUsIDUwMDk5LCA1MDEwMywgNTAxMDcsIDUwMTExLCA1MDExNSwgNTAxMTksIDUwMTIzLCA1MDEyNywgNTAxMzEsIAorICAgIDUwMTM1LCA1MDEzOSwgNTAxNDMsIDUwMTQ3LCA1MDE1MSwgNTAxNTUsIDUwMTU5LCA1MDE2MywgNTAxNjcsIDUwMTcxLCAKKyAgICA1MDE3NSwgNTAxNzksIDUwMTgzLCA1MDE4NywgNTAxOTEsIDUwMTk1LCA1MDE5OSwgNTAyMDMsIDUwMjA3LCA1MDIxMSwgCisgICAgNTAyMTUsIDUwMjE5LCA1MDIyMywgNTAyMjcsIDUwMjMxLCA1MDIzNSwgNTAyMzksIDUwMjQzLCA1MDI0NywgNTAyNTEsIAorICAgIDUwMjU1LCA1MDI1OSwgNTAyNjMsIDUwMjY3LCA1MDI3MSwgNTAyNzUsIDUwMjc5LCA1MDI4MywgNTAyODcsIDUwMjkxLCAKKyAgICA1MDI5NSwgNTAyOTksIDUwMzAzLCA1MDMwNywgNTAzMTEsIDUwMzE1LCA1MDMxOSwgNTAzMjMsIDUwMzI3LCA1MDMzMSwgCisgICAgNTAzMzUsIDUwMzM5LCA1MDM0MywgNTAzNDcsIDUwMzUxLCA1MDM1NSwgNTAzNTksIDUwMzYzLCA1MDM2NywgNTAzNzEsIAorICAgIDUwMzc1LCA1MDM3OSwgNTAzODMsIDUwMzg3LCA1MDM5MSwgNTAzOTUsIDUwMzk5LCA1MDQwMywgNTA0MDcsIDUwNDExLCAKKyAgICA1MDQxNSwgNTA0MTksIDUwNDIzLCA1MDQyNywgNTA0MzEsIDUwNDM1LCA1MDQzOSwgNTA0NDMsIDUwNDQ3LCA1MDQ1MSwgCisgICAgNTA0NTUsIDUwNDU5LCA1MDQ2MywgNTA0NjcsIDUwNDcxLCA1MDQ3NSwgNTA0NzksIDUwNDgzLCA1MDQ4NywgNTA0OTQsIAorICAgIDUwNTAyLCA1MDUwOCwgNTA1MTQsIDUwNTIxLCA1MDUyOCwgNTA1MzQsIDUwNTQwLCA1MDU0NiwgNTA1NTIsIDUwNTU3LCAKKyAgICA1MDU2MiwgNTA1NjcsIDUwNTcyLCA1MDU3OCwgNTA1ODQsIDUwNTkyLCA1MDU5OSwgNTA2MDUsIDUwNjExLCA1MDYxOSwgCisgICAgNTA2MjgsIDUwNjM1LCA1MDY0NSwgNTA2NTYsIDUwNjU5LCA1MDY2MiwgNTA2NjYsIDUwNjcwLCA1MDY3NywgNTA2ODQsIAorICAgIDUwNjk1LCA1MDcwNiwgNTA3MTYsIDUwNzI2LCA1MDczMywgNTA3NDAsIDUwNzQ3LCA1MDc1NCwgNTA3NjUsIDUwNzc2LCAKKyAgICA1MDc4NywgNTA3OTgsIDUwODA4LCA1MDgxOCwgNTA4MzAsIDUwODQyLCA1MDg1MywgNTA4NjQsIDUwODc2LCA1MDg4OCwgCisgICAgNTA4OTcsIDUwOTA3LCA1MDkxNywgNTA5MjgsIDUwOTM5LCA1MDk0NiwgNTA5NTMsIDUwOTYwLCA1MDk2NywgNTA5NzcsIAorICAgIDUwOTg3LCA1MDk5NSwgNTEwMDMsIDUxMDEwLCA1MTAxNywgNTEwMjQsIDUxMDMxLCA1MTAzOCwgNTEwNDMsIDUxMDQ4LCAKKyAgICA1MTA1NCwgNTEwNjIsIDUxMDcyLCA1MTA4MiwgNTEwOTIsIDUxMTAyLCA1MTExMiwgNTExMjIsIDUxMTMyLCA1MTE0MiwgCisgICAgNTExNTIsIDUxMTYyLCA1MTE3MiwgNTExODMsIDUxMTk0LCA1MTIwNCwgNTEyMTQsIDUxMjI1LCA1MTIzNiwgNTEyNDYsIAorICAgIDUxMjU2LCA1MTI2NywgNTEyNzgsIDUxMjg4LCA1MTI5OCwgNTEzMDksIDUxMzIwLCA1MTMzNiwgNTEzNTUsIDUxMzcxLCAKKyAgICA1MTM5MCwgNTE0MDYsIDUxNDIyLCA1MTQzOCwgNTE0NTQsIDUxNDY1LCA1MTQ3NywgNTE0ODgsIDUxNTAwLCA1MTUxOSwgCisgICAgNTE1MzgsIDUxNTQ2LCA1MTU1MiwgNTE1NTksIDUxNTY2LCA1MTU3MywgNTE1ODAsIDUxNTg1LCA1MTU5MSwgNTE1OTYsIAorICAgIDUxNjAxLCA1MTYwNywgNTE2MTIsIDUxNjE3LCA1MTYyMiwgNTE2MjcsIDUxNjMyLCA1MTYzOSwgNTE2NDQsIDUxNjUxLCAKKyAgICA1MTY1NiwgNTE2NjEsIDUxNjY1LCA1MTY2OSwgNTE2NzYsIDUxNjgzLCA1MTY5MCwgNTE2OTcsIDUxNzA0LCA1MTcxMSwgCisgICAgNTE3MjQsIDUxNzM3LCA1MTc1MCwgNTE3NjMsIDUxNzcxLCA1MTc3OSwgNTE3ODUsIDUxNzkxLCA1MTc5OCwgNTE4MDUsIAorICAgIDUxODEyLCA1MTgxOSwgNTE4MjMsIDUxODI4LCA1MTgzNiwgNTE4NDQsIDUxODUyLCA1MTg1OSwgNTE4NjMsIDUxODcxLCAKKyAgICA1MTg3OSwgNTE4ODMsIDUxODg3LCA1MTg5MiwgNTE4OTksIDUxOTA3LCA1MTkxNSwgNTE5MzQsIDUxOTUzLCA1MTk3MiwgCisgICAgNTE5OTEsIDUyMDEwLCA1MjAyOSwgNTIwNDgsIDUyMDY3LCA1MjA3MywgNTIwODAsIDUyMDg5LCA1MjA5NywgNTIxMDUsIAorICAgIDUyMTEwLCA1MjExMywgNTIxMTYsIDUyMTIxLCA1MjEyNCwgNTIxNDMsIDUyMTUwLCA1MjE1NiwgNTIxNjIsIDUyMTY2LCAKKyAgICA1MjE2OSwgNTIxNzIsIDUyMTc1LCA1MjE4NywgNTIyMDAsIDUyMjA3LCA1MjIxNCwgNTIyMTcsIDUyMjIxLCA1MjIyNCwgCisgICAgNTIyMjksIDUyMjM0LCA1MjIzOSwgNTIyNDUsIDUyMjU0LCA1MjI2MSwgNTIyNjgsIDUyMjc2LCA1MjI4MywgNTIyOTAsIAorICAgIDUyMjkzLCA1MjI5OSwgNTIzMDUsIDUyMzA4LCA1MjMxMSwgNTIzMTYsIDUyMzIxLCA1MjMyNywgNTIzMzMsIDUyMzM3LCAKKyAgICA1MjM0MiwgNTIzNDksIDUyMzUzLCA1MjM1OSwgNTIzNjMsIDUyMzY3LCA1MjM3NSwgNTIzODcsIDUyMzk2LCA1MjQwMCwgCisgICAgNTI0MDIsIDUyNDExLCA1MjQyMCwgNTI0MjYsIDUyNDI5LCA1MjQzNSwgNTI0NDEsIDUyNDQ2LCA1MjQ1MSwgNTI0NTYsIAorICAgIDUyNDYxLCA1MjQ2NiwgNTI0NzEsIDUyNDczLCA1MjQ3OSwgNTI0ODQsIDUyNDkxLCA1MjQ5NSwgNTI1MDEsIDUyNTA0LCAKKyAgICA1MjUwOCwgNTI1MTUsIDUyNTIyLCA1MjUyNCwgNTI1MjYsIDUyNTMyLCA1MjUzOCwgNTI1NDQsIDUyNTUzLCA1MjU2MiwgCisgICAgNTI1NjksIDUyNTc2LCA1MjU4MiwgNTI1ODgsIDUyNTkzLCA1MjU5OCwgNTI2MDMsIDUyNjA5LCA1MjYxNSwgNTI2MjAsIAorICAgIDUyNjI3LCA1MjYzMSwgNTI2MzUsIDUyNjQ4LCA1MjY2MSwgNTI2NzMsIDUyNjgyLCA1MjY4OCwgNTI2OTUsIDUyNzAwLCAKKyAgICA1MjcwNSwgNTI3MTAsIDUyNzE1LCA1MjcyMCwgNTI3MjIsIDUyNzI5LCA1MjczNiwgNTI3NDMsIDUyNzUwLCA1Mjc1NywgCisgICAgNTI3NjUsIDUyNzcxLCA1Mjc3NiwgNTI3ODIsIDUyNzg4LCA1Mjc5NCwgNTI4MDEsIDUyODA3LCA1MjgxNSwgNTI4MjMsIAorICAgIDUyODMxLCA1MjgzOSwgNTI4NDYsIDUyODUyLCA1Mjg1OCwgNTI4NjcsIDUyODcxLCA1Mjg4MCwgNTI4ODksIDUyODk4LCAKKyAgICA1MjkwNiwgNTI5MTAsIDUyOTE2LCA1MjkyMywgNTI5MzAsIDUyOTM0LCA1Mjk0MCwgNTI5NDcsIDUyOTUyLCA1Mjk1NywgCisgICAgNTI5NjMsIDUyOTY4LCA1Mjk3MywgNTI5ODAsIDUyOTg3LCA1Mjk5MiwgNTI5OTcsIDUzMDA1LCA1MzAxMywgNTMwMjMsIAorICAgIDUzMDMzLCA1MzA0MCwgNTMwNDcsIDUzMDUxLCA1MzA1NSwgNTMwNjcsIDUzMDczLCA1MzA3OSwgNTMwODQsIDUzMDg5LCAKKyAgICA1MzA5NiwgNTMxMDMsIDUzMTA5LCA1MzExNSwgNTMxMjQsIDUzMTMyLCA1MzE0MCwgNTMxNDcsIDUzMTU0LCA1MzE2MSwgCisgICAgNTMxNjcsIDUzMTc0LCA1MzE4MCwgNTMxODcsIDUzMTk0LCA1MzIwMSwgNTMyMDgsIDUzMjE0LCA1MzIxOSwgNTMyMjgsIAorICAgIDUzMjM4LCA1MzI0NSwgNTMyNTQsIDUzMjYwLCA1MzI2NSwgNTMyNzAsIDUzMjgwLCA1MzI4NiwgNTMyOTIsIDUzMjk4LCAKKyAgICA1MzMwNiwgNTMzMTEsIDUzMzE4LCA1MzMyNSwgNTMzMzYsIDUzMzQzLCA1MzM1MCwgNTMzNTcsIDUzMzY0LCA1MzM3MSwgCisgICAgNTMzNzgsIDUzMzg1LCA1MzM5NywgNTM0MDksIDUzNDIwLCA1MzQzMSwgNTM0NDQsIDUzNDU3LCA1MzQ2MiwgNTM0NjcsIAorICAgIDUzNDc2LCA1MzQ4NSwgNTM0OTIsIDUzNDk5LCA1MzUwOCwgNTM1MTcsIDUzNTI1LCA1MzUzMywgNTM1NDEsIDUzNTQ5LCAKKyAgICA1MzU1OSwgNTM1NjksIDUzNTgzLCA1MzU5NywgNTM2MDUsIDUzNjEzLCA1MzYyNSwgNTM2MzcsIDUzNjQ1LCA1MzY1MywgCisgICAgNTM2NjMsIDUzNjczLCA1MzY3OCwgNTM2ODMsIDUzNjkyLCA1MzcwMSwgNTM3MDYsIDUzNzExLCA1MzcxOSwgNTM3MjUsIAorICAgIDUzNzMxLCA1MzczOSwgNTM3NDcsIDUzNzYwLCA1Mzc3MywgNTM3NzcsIDUzNzgxLCA1Mzc4OCwgNTM3OTUsIDUzODAyLCAKKyAgICA1MzgxMCwgNTM4MTgsIDUzODI3LCA1MzgzNiwgNTM4NDIsIDUzODQ4LCA1Mzg1NSwgNTM4NjIsIDUzODY5LCA1Mzg3NiwgCisgICAgNTM4ODUsIDUzODk0LCA1Mzg5NywgNTM5MDAsIDUzOTA1LCA1MzkxMCwgNTM5MTYsIDUzOTIyLCA1MzkyOSwgNTM5MzYsIAorICAgIDUzOTQ2LCA1Mzk1NiwgNTM5NjMsIDUzOTcwLCA1Mzk3OCwgNTM5ODYsIDUzOTk0LCA1NDAwMiwgNTQwMTAsIDU0MDE4LCAKKyAgICA1NDAyNCwgNTQwMzAsIDU0MDM0LCA1NDAzOCwgNTQwNDUsIDU0MDUyLCA1NDA1NywgNTQwNjIsIDU0MDY3LCA1NDA3MiwgCisgICAgNTQwNzgsIDU0MDkyLCA1NDA5OSwgNTQxMDYsIDU0MTEwLCA1NDExMiwgNTQxMTQsIDU0MTE5LCA1NDEyNCwgNTQxMjksIAorICAgIDU0MTM0LCA1NDE0MiwgNTQxNDksIDU0MTU2LCA1NDE2NCwgNTQxNzYsIDU0MTg0LCA1NDE5MiwgNTQyMDMsIDU0MjA3LCAKKyAgICA1NDIxMSwgNTQyMTcsIDU0MjI1LCA1NDIzOCwgNTQyNDUsIDU0MjUyLCA1NDI1OSwgNTQyNjQsIDU0MjcxLCA1NDI4MCwgCisgICAgNTQyODgsIDU0Mjk0LCA1NDMwMCwgNTQzMDYsIDU0MzE1LCA1NDMyNCwgNTQzMzIsIDU0MzQxLCA1NDM0NiwgNTQzNDksIAorICAgIDU0MzU0LCA1NDM2MCwgNTQzNjYsIDU0MzcyLCA1NDM3OCwgNTQzODIsIDU0Mzg1LCA1NDM4OSwgNTQzOTMsIDU0Mzk5LCAKKyAgICA1NDQwNSwgNTQ0MTEsIDU0NDE3LCA1NDQyMSwgNTQ0MjUsIDU0NDMyLCA1NDQzOSwgNTQ0NDYsIDU0NDUzLCA1NDQ2MCwgCisgICAgNTQ0NjcsIDU0NDc3LCA1NDQ4NywgNTQ0OTQsIDU0NTAxLCA1NDUwOSwgNTQ1MTcsIDU0NTIxLCA1NDUyNiwgNTQ1MzEsIAorICAgIDU0NTM3LCA1NDU0MywgNTQ1NDYsIDU0NTQ5LCA1NDU1MiwgNTQ1NTUsIDU0NTU5LCA1NDU2NCwgNTQ1NjksIDU0NTc0LCAKKyAgICA1NDU3OSwgNTQ1ODQsIDU0NTg4LCA1NDU5MiwgNTQ1OTYsIDU0NjAwLCA1NDYwNCwgNTQ2MDgsIDU0NjEyLCA1NDYxOCwgCisgICAgNTQ2MjIsIDU0NjI4LCA1NDYzMywgNTQ2NDAsIDU0NjQ4LCA1NDY1NSwgNTQ2NjMsIDU0NjcwLCA1NDY3OCwgNTQ2ODcsIAorICAgIDU0Njk0LCA1NDcwNCwgNTQ3MTUsIDU0NzIxLCA1NDczMCwgNTQ3MzYsIDU0NzQ1LCA1NDc1NCwgNTQ3NjAsIDU0NzY2LCAKKyAgICA1NDc3MCwgNTQ3NzQsIDU0NzgzLCA1NDc5MiwgNTQ3OTksIDU0ODA2LCA1NDgxNSwgMCwgMCwgMCwgNTQ4MjQsIDU0ODI5LCAKKyAgICA1NDgzMywgNTQ4MzcsIDU0ODQyLCA1NDg0NywgNTQ4NTIsIDU0ODYwLCA1NDg2OCwgNTQ4NzEsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU0ODQ3LCA1NDg1MiwgNTQ4NTcsIDU0ODYyLCA1NDg2NywgNTQ4NzIsIDU0ODc3LCA1NDg4MiwgCi0gICAgNTQ4ODcsIDU0ODkyLCA1NDg5NywgNTQ5MDMsIDU0OTA3LCA1NDkxMiwgNTQ5MTcsIDU0OTIyLCA1NDkyNywgNTQ5MzIsIAotICAgIDU0OTM3LCA1NDk0MiwgNTQ5NDcsIDU0OTUyLCA1NDk1NywgNTQ5NjIsIDU0OTY3LCA1NDk3MiwgNTQ5NzcsIDU0OTgyLCAKLSAgICA1NDk4NywgNTQ5OTIsIDU0OTk3LCA1NTAwMiwgNTUwMDcsIDU1MDEyLCA1NTAxNywgNTUwMjMsIDU1MDI4LCA1NTAzNCwgCi0gICAgNTUwNDMsIDU1MDQ4LCA1NTA1NiwgNTUwNjMsIDU1MDcyLCA1NTA3NywgNTUwODIsIDU1MDg3LCA1NTA5MywgMCwgNTUxMDAsIAotICAgIDU1MTA1LCA1NTExMCwgNTUxMTUsIDU1MTIwLCA1NTEyNSwgNTUxMzAsIDU1MTM1LCA1NTE0MCwgNTUxNDUsIDU1MTUwLCAKLSAgICA1NTE1NiwgNTUxNjAsIDU1MTY1LCA1NTE3MCwgNTUxNzUsIDU1MTgwLCA1NTE4NSwgNTUxOTAsIDU1MTk1LCA1NTIwMCwgCi0gICAgNTUyMDUsIDU1MjEwLCA1NTIxNSwgNTUyMjAsIDU1MjI1LCA1NTIzMCwgNTUyMzUsIDU1MjQwLCA1NTI0NSwgNTUyNTAsIAotICAgIDU1MjU1LCA1NTI2MCwgNTUyNjUsIDU1MjcwLCA1NTI3NiwgNTUyODEsIDU1Mjg3LCA1NTI5NiwgNTUzMDEsIDU1MzA5LCAKLSAgICA1NTMxNiwgNTUzMjUsIDU1MzMwLCA1NTMzNSwgNTUzNDAsIDU1MzQ2LCAwLCA1NTM1MywgNTUzNjEsIDU1MzY5LCA1NTM3OCwgCi0gICAgNTUzODUsIDU1MzkzLCA1NTM5OSwgNTU0MDgsIDU1NDE2LCA1NTQyNCwgNTU0MzIsIDU1NDQwLCA1NTQ0OCwgNTU0NTYsIAotICAgIDU1NDYxLCA1NTQ2OCwgNTU0NzQsIDU1NDgxLCA1NTQ4OSwgNTU0OTYsIDU1NTAzLCA1NTUxMSwgNTU1MTcsIDU1NTIzLCAKLSAgICA1NTUzMCwgNTU1MzcsIDU1NTQ3LCA1NTU1NywgNTU1NjQsIDU1NTcxLCA1NTU3NiwgNTU1ODYsIDU1NTk2LCA1NTYwMSwgCi0gICAgNTU2MDYsIDU1NjExLCA1NTYxNiwgNTU2MjEsIDU1NjI2LCA1NTYzMSwgNTU2MzYsIDU1NjQxLCA1NTY0NiwgNTU2NTEsIAotICAgIDU1NjU2LCA1NTY2MSwgNTU2NjYsIDU1NjcxLCA1NTY3NiwgNTU2ODEsIDU1Njg2LCA1NTY5MSwgNTU2OTYsIDU1NzAxLCAKLSAgICA1NTcwNiwgNTU3MTEsIDU1NzE2LCA1NTcyMSwgNTU3MjYsIDU1NzMxLCA1NTczNiwgNTU3NDEsIDU1NzQ2LCA1NTc1MCwgCi0gICAgNTU3NTQsIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OSwgNTU3ODQsIDU1Nzg5LCA1NTc5NCwgNTU3OTksIAotICAgIDU1ODA0LCA1NTgwOSwgNTU4MTQsIDU1ODE5LCA1NTgyNCwgNTU4MjksIDU1ODM0LCA1NTgzOSwgNTU4NDQsIDU1ODUxLCAKLSAgICA1NTg1OCwgNTU4NjUsIDU1ODcyLCA1NTg3OSwgNTU4ODYsIDU1ODkzLCA1NTkwMCwgNTU5MDcsIDU1OTE0LCA1NTkyMSwgCi0gICAgNTU5MjgsIDU1OTM1LCA1NTk0MiwgNTU5NDcsIDU1OTUyLCA1NTk1OSwgNTU5NjYsIDU1OTczLCA1NTk4MCwgNTU5ODcsIAotICAgIDU1OTk0LCA1NjAwMSwgNTYwMDgsIDU2MDE1LCA1NjAyMiwgNTYwMjksIDU2MDM2LCA1NjA0MiwgNTYwNDgsIDU2MDU0LCAKLSAgICA1NjA2MCwgNTYwNjcsIDU2MDc0LCA1NjA4MSwgNTYwODgsIDU2MDk1LCA1NjEwMiwgNTYxMDksIDU2MTE2LCA1NjEyMywgCi0gICAgNTYxMzAsIDU2MTM4LCA1NjE0NiwgNTYxNTQsIDU2MTYyLCA1NjE3MCwgNTYxNzgsIDU2MTg2LCA1NjE5NCwgNTYxOTgsIAotICAgIDU2MjA0LCA1NjIxMCwgNTYyMTQsIDU2MjIwLCA1NjIyNiwgNTYyMzIsIDU2MjM5LCA1NjI0NiwgNTYyNTMsIDU2MjYwLCAKLSAgICA1NjI2NSwgNTYyNzEsIDU2Mjc3LCA1NjI4NCwgMCwgMCwgMCwgMCwgMCwgNTYyOTEsIDU2Mjk5LCA1NjMwOCwgNTYzMTcsIAotICAgIDU2MzI1LCA1NjMzMSwgNTYzMzYsIDU2MzQxLCA1NjM0NiwgNTYzNTEsIDU2MzU2LCA1NjM2MSwgNTYzNjYsIDU2MzcxLCAKLSAgICA1NjM3NiwgNTYzODEsIDU2Mzg2LCA1NjM5MSwgNTYzOTYsIDU2NDAxLCA1NjQwNiwgNTY0MTEsIDU2NDE2LCA1NjQyMSwgCi0gICAgNTY0MjYsIDU2NDMxLCA1NjQzNiwgNTY0NDEsIDU2NDQ2LCA1NjQ1MSwgNTY0NTYsIDU2NDYxLCA1NjQ2NiwgNTY0NzEsIAotICAgIDU2NDc2LCA1NjQ4MSwgNTY0ODYsIDU2NDkxLCA1NjQ5NiwgNTY1MDEsIDU2NTA2LCA1NjUxMSwgNTY1MTYsIDU2NTIxLCAKLSAgICA1NjUyNiwgMCwgNTY1MzEsIDAsIDAsIDAsIDAsIDAsIDU2NTM2LCAwLCAwLCA1NjU0MSwgNTY1NDUsIDU2NTUwLCA1NjU1NSwgCi0gICAgNTY1NjAsIDU2NTY1LCA1NjU3NCwgNTY1NzksIDU2NTg0LCA1NjU4OSwgNTY1OTQsIDU2NTk5LCA1NjYwNCwgNTY2MDksIAotICAgIDU2NjE0LCA1NjYyMSwgNTY2MjYsIDU2NjMxLCA1NjY0MCwgNTY2NDcsIDU2NjUyLCA1NjY1NywgNTY2NjIsIDU2NjY5LCAKLSAgICA1NjY3NCwgNTY2ODEsIDU2Njg2LCA1NjY5MSwgNTY2OTgsIDU2NzA1LCA1NjcxMCwgNTY3MTUsIDU2NzIwLCA1NjcyNywgCi0gICAgNTY3MzQsIDU2NzM5LCA1Njc0NCwgNTY3NDksIDU2NzU0LCA1Njc1OSwgNTY3NjYsIDU2NzczLCA1Njc3OCwgNTY3ODMsIAotICAgIDU2Nzg4LCA1Njc5MywgNTY3OTgsIDU2ODAzLCA1NjgwOCwgNTY4MTMsIDU2ODE4LCA1NjgyMywgNTY4MjgsIDU2ODM1LCAKLSAgICA1Njg0MCwgNTY4NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODUwLCA1Njg1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTY4NjIsIDU2ODY3LCA1Njg3MSwgNTY4NzUsIDU2ODc5LCA1Njg4MywgNTY4ODcsIDU2ODkxLCAKLSAgICA1Njg5NSwgNTY4OTksIDU2OTAzLCA1NjkwNywgNTY5MTMsIDU2OTE3LCA1NjkyMSwgNTY5MjUsIDU2OTI5LCA1NjkzMywgCi0gICAgNTY5MzcsIDU2OTQxLCA1Njk0NSwgNTY5NDksIDU2OTUzLCA1Njk1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTY5NjEsIDU2OTY1LCA1Njk2OSwgNTY5NzMsIDU2OTc3LCA1Njk4MSwgNTY5ODUsIDAsIDU2OTg5LCA1Njk5MywgNTY5OTcsIAotICAgIDU3MDAxLCA1NzAwNSwgNTcwMDksIDU3MDEzLCAwLCA1NzAxNywgNTcwMjEsIDU3MDI1LCA1NzAyOSwgNTcwMzMsIDU3MDM3LCAKLSAgICA1NzA0MSwgMCwgNTcwNDUsIDU3MDQ5LCA1NzA1MywgNTcwNTcsIDU3MDYxLCA1NzA2NSwgNTcwNjksIDAsIDU3MDczLCAKLSAgICA1NzA3NywgNTcwODEsIDU3MDg1LCA1NzA4OSwgNTcwOTMsIDU3MDk3LCAwLCA1NzEwMSwgNTcxMDUsIDU3MTA5LCA1NzExMywgCi0gICAgNTcxMTcsIDU3MTIxLCA1NzEyNSwgMCwgNTcxMjksIDU3MTMzLCA1NzEzNywgNTcxNDEsIDU3MTQ1LCA1NzE0OSwgNTcxNTMsIAotICAgIDAsIDU3MTU3LCA1NzE2MSwgNTcxNjUsIDU3MTY5LCA1NzE3MywgNTcxNzcsIDU3MTgxLCAwLCA1NzE4NSwgNTcxOTAsIAotICAgIDU3MTk1LCA1NzIwMCwgNTcyMDUsIDU3MjEwLCA1NzIxNSwgNTcyMTksIDU3MjI0LCA1NzIyOSwgNTcyMzQsIDU3MjM4LCAKLSAgICA1NzI0MywgNTcyNDgsIDU3MjUzLCA1NzI1OCwgNTcyNjIsIDU3MjY3LCA1NzI3MiwgNTcyNzcsIDU3MjgyLCA1NzI4NywgCi0gICAgNTcyOTIsIDU3Mjk2LCA1NzMwMSwgNTczMDYsIDU3MzEzLCA1NzMxOCwgNTczMjMsIDU3MzI5LCA1NzMzNiwgNTczNDMsIAotICAgIDU3MzUyLCA1NzM1OSwgNTczNjgsIDU3MzcyLCA1NzM3NiwgNTczODIsIDU3Mzg4LCA1NzM5NCwgNTc0MDIsIDU3NDA4LCAKLSAgICA1NzQxMiwgNTc0MTYsIDU3NDIwLCA1NzQyNiwgNTc0MzIsIDU3NDM2LCA1NzQzOCwgNTc0NDIsIDU3NDQ4LCA1NzQ1MCwgCi0gICAgNTc0NTQsIDU3NDU4LCA1NzQ2MiwgNTc0NjgsIDU3NDczLCA1NzQ3NywgNTc0ODEsIDU3NDg2LCA1NzQ5MiwgNTc0OTcsIAotICAgIDU3NTAyLCA1NzUwNywgNTc1MTIsIDU3NTE5LCA1NzUyNiwgNTc1MzEsIDU3NTM2LCA1NzU0MSwgNTc1NDYsIDU3NTUxLCAKLSAgICA1NzU1NiwgNTc1NjAsIDU3NTY0LCA1NzU3MSwgNTc1NzgsIDU3NTg0LCA1NzU4OCwgNTc1OTMsIDU3NTk1LCA1NzU5OSwgCi0gICAgNTc2MDcsIDU3NjExLCA1NzYxNSwgNTc2MTksIDU3NjIzLCA1NzYyOSwgNTc2MzUsIDU3NjM5LCA1NzY0NSwgNTc2NDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0ODc1LCA1NDg4MCwgNTQ4ODUsIAorICAgIDU0ODkwLCA1NDg5NSwgNTQ5MDAsIDU0OTA1LCA1NDkxMCwgNTQ5MTUsIDU0OTIwLCA1NDkyNSwgNTQ5MzEsIDU0OTM1LCAKKyAgICA1NDk0MCwgNTQ5NDUsIDU0OTUwLCA1NDk1NSwgNTQ5NjAsIDU0OTY1LCA1NDk3MCwgNTQ5NzUsIDU0OTgwLCA1NDk4NSwgCisgICAgNTQ5OTAsIDU0OTk1LCA1NTAwMCwgNTUwMDUsIDU1MDEwLCA1NTAxNSwgNTUwMjAsIDU1MDI1LCA1NTAzMCwgNTUwMzUsIAorICAgIDU1MDQwLCA1NTA0NSwgNTUwNTEsIDU1MDU2LCA1NTA2MiwgNTUwNzEsIDU1MDc2LCA1NTA4NCwgNTUwOTEsIDU1MTAwLCAKKyAgICA1NTEwNSwgNTUxMTAsIDU1MTE1LCA1NTEyMSwgMCwgNTUxMjgsIDU1MTMzLCA1NTEzOCwgNTUxNDMsIDU1MTQ4LCA1NTE1MywgCisgICAgNTUxNTgsIDU1MTYzLCA1NTE2OCwgNTUxNzMsIDU1MTc4LCA1NTE4NCwgNTUxODgsIDU1MTkzLCA1NTE5OCwgNTUyMDMsIAorICAgIDU1MjA4LCA1NTIxMywgNTUyMTgsIDU1MjIzLCA1NTIyOCwgNTUyMzMsIDU1MjM4LCA1NTI0MywgNTUyNDgsIDU1MjUzLCAKKyAgICA1NTI1OCwgNTUyNjMsIDU1MjY4LCA1NTI3MywgNTUyNzgsIDU1MjgzLCA1NTI4OCwgNTUyOTMsIDU1Mjk4LCA1NTMwNCwgCisgICAgNTUzMDksIDU1MzE1LCA1NTMyNCwgNTUzMjksIDU1MzM3LCA1NTM0NCwgNTUzNTMsIDU1MzU4LCA1NTM2MywgNTUzNjgsIAorICAgIDU1Mzc0LCAwLCA1NTM4MSwgNTUzODksIDU1Mzk3LCA1NTQwNiwgNTU0MTMsIDU1NDIxLCA1NTQyNywgNTU0MzYsIDU1NDQ0LCAKKyAgICA1NTQ1MiwgNTU0NjAsIDU1NDY4LCA1NTQ3NiwgNTU0ODQsIDU1NDg5LCA1NTQ5NiwgNTU1MDIsIDU1NTA5LCA1NTUxNywgCisgICAgNTU1MjQsIDU1NTMxLCA1NTUzOSwgNTU1NDUsIDU1NTUxLCA1NTU1OCwgNTU1NjUsIDU1NTc1LCA1NTU4NSwgNTU1OTIsIAorICAgIDU1NTk5LCA1NTYwNCwgNTU2MTQsIDU1NjI0LCA1NTYyOSwgNTU2MzQsIDU1NjM5LCA1NTY0NCwgNTU2NDksIDU1NjU0LCAKKyAgICA1NTY1OSwgNTU2NjQsIDU1NjY5LCA1NTY3NCwgNTU2NzksIDU1Njg0LCA1NTY4OSwgNTU2OTQsIDU1Njk5LCA1NTcwNCwgCisgICAgNTU3MDksIDU1NzE0LCA1NTcxOSwgNTU3MjQsIDU1NzI5LCA1NTczNCwgNTU3MzksIDU1NzQ0LCA1NTc0OSwgNTU3NTQsIAorICAgIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OCwgNTU3ODIsIDU1Nzg3LCA1NTc5MiwgNTU3OTcsIDU1ODAyLCAKKyAgICA1NTgwNywgNTU4MTIsIDU1ODE3LCA1NTgyMiwgNTU4MjcsIDU1ODMyLCA1NTgzNywgNTU4NDIsIDU1ODQ3LCA1NTg1MiwgCisgICAgNTU4NTcsIDU1ODYyLCA1NTg2NywgNTU4NzIsIDU1ODc5LCA1NTg4NiwgNTU4OTMsIDU1OTAwLCA1NTkwNywgNTU5MTQsIAorICAgIDU1OTIxLCA1NTkyOCwgNTU5MzUsIDU1OTQyLCA1NTk0OSwgNTU5NTYsIDU1OTYzLCA1NTk3MCwgNTU5NzUsIDU1OTgwLCAKKyAgICA1NTk4NywgNTU5OTQsIDU2MDAxLCA1NjAwOCwgNTYwMTUsIDU2MDIyLCA1NjAyOSwgNTYwMzYsIDU2MDQzLCA1NjA1MCwgCisgICAgNTYwNTcsIDU2MDY0LCA1NjA3MCwgNTYwNzYsIDU2MDgyLCA1NjA4OCwgNTYwOTUsIDU2MTAyLCA1NjEwOSwgNTYxMTYsIAorICAgIDU2MTIzLCA1NjEzMCwgNTYxMzcsIDU2MTQ0LCA1NjE1MSwgNTYxNTgsIDU2MTY2LCA1NjE3NCwgNTYxODIsIDU2MTkwLCAKKyAgICA1NjE5OCwgNTYyMDYsIDU2MjE0LCA1NjIyMiwgNTYyMjYsIDU2MjMyLCA1NjIzOCwgNTYyNDIsIDU2MjQ4LCA1NjI1NCwgCisgICAgNTYyNjAsIDU2MjY3LCA1NjI3NCwgNTYyODEsIDU2Mjg4LCA1NjI5MywgNTYyOTksIDU2MzA1LCA1NjMxMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTYzMTksIDU2MzI3LCA1NjMzNiwgNTYzNDUsIDU2MzUzLCA1NjM1OSwgNTYzNjQsIDU2MzY5LCA1NjM3NCwgCisgICAgNTYzNzksIDU2Mzg0LCA1NjM4OSwgNTYzOTQsIDU2Mzk5LCA1NjQwNCwgNTY0MDksIDU2NDE0LCA1NjQxOSwgNTY0MjQsIAorICAgIDU2NDI5LCA1NjQzNCwgNTY0MzksIDU2NDQ0LCA1NjQ0OSwgNTY0NTQsIDU2NDU5LCA1NjQ2NCwgNTY0NjksIDU2NDc0LCAKKyAgICA1NjQ3OSwgNTY0ODQsIDU2NDg5LCA1NjQ5NCwgNTY0OTksIDU2NTA0LCA1NjUwOSwgNTY1MTQsIDU2NTE5LCA1NjUyNCwgCisgICAgNTY1MjksIDU2NTM0LCA1NjUzOSwgNTY1NDQsIDU2NTQ5LCA1NjU1NCwgMCwgNTY1NTksIDAsIDAsIDAsIDAsIDAsIDU2NTY0LCAKKyAgICAwLCAwLCA1NjU2OSwgNTY1NzMsIDU2NTc4LCA1NjU4MywgNTY1ODgsIDU2NTkzLCA1NjYwMiwgNTY2MDcsIDU2NjEyLCAKKyAgICA1NjYxNywgNTY2MjIsIDU2NjI3LCA1NjYzMiwgNTY2MzcsIDU2NjQyLCA1NjY0OSwgNTY2NTQsIDU2NjU5LCA1NjY2OCwgCisgICAgNTY2NzUsIDU2NjgwLCA1NjY4NSwgNTY2OTAsIDU2Njk3LCA1NjcwMiwgNTY3MDksIDU2NzE0LCA1NjcxOSwgNTY3MjYsIAorICAgIDU2NzMzLCA1NjczOCwgNTY3NDMsIDU2NzQ4LCA1Njc1NSwgNTY3NjIsIDU2NzY3LCA1Njc3MiwgNTY3NzcsIDU2NzgyLCAKKyAgICA1Njc4NywgNTY3OTQsIDU2ODAxLCA1NjgwNiwgNTY4MTEsIDU2ODE2LCA1NjgyMSwgNTY4MjYsIDU2ODMxLCA1NjgzNiwgCisgICAgNTY4NDEsIDU2ODQ2LCA1Njg1MSwgNTY4NTYsIDU2ODYzLCA1Njg2OCwgNTY4NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU2ODc4LCA1Njg4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY4OTAsIDU2ODk1LCAKKyAgICA1Njg5OSwgNTY5MDMsIDU2OTA3LCA1NjkxMSwgNTY5MTUsIDU2OTE5LCA1NjkyMywgNTY5MjcsIDU2OTMxLCA1NjkzNSwgCisgICAgNTY5NDEsIDU2OTQ1LCA1Njk0OSwgNTY5NTMsIDU2OTU3LCA1Njk2MSwgNTY5NjUsIDU2OTY5LCA1Njk3MywgNTY5NzcsIAorICAgIDU2OTgxLCA1Njk4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY5ODksIDU2OTkzLCA1Njk5NywgNTcwMDEsIAorICAgIDU3MDA1LCA1NzAwOSwgNTcwMTMsIDAsIDU3MDE3LCA1NzAyMSwgNTcwMjUsIDU3MDI5LCA1NzAzMywgNTcwMzcsIDU3MDQxLCAKKyAgICAwLCA1NzA0NSwgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgMCwgNTcwNzMsIDU3MDc3LCAKKyAgICA1NzA4MSwgNTcwODUsIDU3MDg5LCA1NzA5MywgNTcwOTcsIDAsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCA1NzExNywgCisgICAgNTcxMjEsIDU3MTI1LCAwLCA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgMCwgCisgICAgNTcxNTcsIDU3MTYxLCA1NzE2NSwgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDAsIDU3MTg1LCA1NzE4OSwgNTcxOTMsIAorICAgIDU3MTk3LCA1NzIwMSwgNTcyMDUsIDU3MjA5LCAwLCA1NzIxMywgNTcyMTgsIDU3MjIzLCA1NzIyOCwgNTcyMzMsIDU3MjM4LCAKKyAgICA1NzI0MywgNTcyNDcsIDU3MjUyLCA1NzI1NywgNTcyNjIsIDU3MjY2LCA1NzI3MSwgNTcyNzYsIDU3MjgxLCA1NzI4NiwgCisgICAgNTcyOTAsIDU3Mjk1LCA1NzMwMCwgNTczMDUsIDU3MzEwLCA1NzMxNSwgNTczMjAsIDU3MzI0LCA1NzMyOSwgNTczMzQsIAorICAgIDU3MzQxLCA1NzM0NiwgNTczNTEsIDU3MzU3LCA1NzM2NCwgNTczNzEsIDU3MzgwLCA1NzM4NywgNTczOTYsIDU3NDAwLCAKKyAgICA1NzQwNCwgNTc0MTAsIDU3NDE2LCA1NzQyMiwgNTc0MzAsIDU3NDM2LCA1NzQ0MCwgNTc0NDQsIDU3NDQ4LCA1NzQ1NCwgCisgICAgNTc0NjAsIDU3NDY0LCA1NzQ2NiwgNTc0NzAsIDU3NDc2LCA1NzQ3OCwgNTc0ODIsIDU3NDg2LCA1NzQ5MCwgNTc0OTYsIAorICAgIDU3NTAxLCA1NzUwNSwgNTc1MDksIDU3NTE0LCA1NzUyMCwgNTc1MjUsIDU3NTMwLCA1NzUzNSwgNTc1NDAsIDU3NTQ3LCAKKyAgICA1NzU1NCwgNTc1NTksIDU3NTY0LCA1NzU2OSwgNTc1NzQsIDU3NTc5LCA1NzU4NCwgNTc1ODgsIDU3NTkyLCA1NzU5OSwgCisgICAgNTc2MDYsIDU3NjEyLCA1NzYxNiwgNTc2MjEsIDU3NjIzLCA1NzYyNywgNTc2MzUsIDU3NjM5LCA1NzY0MywgNTc2NDcsIAorICAgIDU3NjUxLCA1NzY1NywgNTc2NjMsIDU3NjY3LCA1NzY3MywgNTc2NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NjUzLCA1NzY1NywgCi0gICAgNTc2NjEsIDU3NjY2LCA1NzY3MSwgNTc2NzYsIDU3NjgwLCA1NzY4NCwgNTc2ODgsIDU3NjkzLCA1NzY5OCwgNTc3MDIsIAotICAgIDU3NzA2LCA1NzcxMCwgNTc3MTQsIDU3NzE5LCA1NzcyNCwgNTc3MjksIDU3NzM0LCA1NzczOCwgNTc3NDIsIDU3NzQ3LCAKLSAgICA1Nzc1MiwgNTc3NTcsIDU3NzYyLCA1Nzc2NiwgMCwgNTc3NzAsIDU3Nzc0LCA1Nzc3OCwgNTc3ODIsIDU3Nzg2LCA1Nzc5MCwgCi0gICAgNTc3OTQsIDU3Nzk5LCA1NzgwNCwgNTc4MDgsIDU3ODEzLCA1NzgxOCwgNTc4MjcsIDU3ODMxLCA1NzgzNSwgNTc4MzksIAotICAgIDU3ODQ2LCA1Nzg1MCwgNTc4NTUsIDU3ODYwLCA1Nzg2NCwgNTc4NjgsIDU3ODc0LCA1Nzg3OSwgNTc4ODQsIDU3ODg5LCAKLSAgICA1Nzg5NCwgNTc4OTgsIDU3OTAyLCA1NzkwNiwgNTc5MTAsIDU3OTE0LCA1NzkxOSwgNTc5MjQsIDU3OTI4LCA1NzkzMiwgCi0gICAgNTc5MzcsIDU3OTQyLCA1Nzk0NywgNTc5NTEsIDU3OTU1LCA1Nzk2MCwgNTc5NjUsIDU3OTcxLCA1Nzk3NywgNTc5ODEsIAotICAgIDU3OTg3LCA1Nzk5MywgNTc5OTcsIDU4MDAzLCA1ODAwOSwgNTgwMTQsIDU4MDE5LCA1ODAyMywgNTgwMjksIDU4MDMzLCAKLSAgICA1ODAzNywgNTgwNDMsIDU4MDQ5LCA1ODA1NCwgNTgwNTksIDU4MDYzLCA1ODA2NywgNTgwNzUsIDU4MDgxLCA1ODA4NywgCi0gICAgNTgwOTMsIDU4MDk4LCA1ODEwMywgNTgxMDgsIDU4MTE0LCA1ODExOCwgNTgxMjQsIDU4MTI4LCA1ODEzMiwgNTgxMzgsIAotICAgIDU4MTQ0LCA1ODE1MCwgNTgxNTYsIDU4MTYyLCA1ODE2OCwgNTgxNzQsIDU4MTgwLCA1ODE4NiwgNTgxOTIsIDU4MTk4LCAKLSAgICA1ODIwNCwgNTgyMDgsIDU4MjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODIyMCwgNTgyMjMsIAotICAgIDU4MjI3LCA1ODIzMSwgNTgyMzUsIDU4MjM5LCA1ODI0MiwgNTgyNDUsIDU4MjQ5LCA1ODI1MywgNTgyNTcsIDU4MjYxLCAKLSAgICA1ODI2NCwgNTgyNjksIDU4MjczLCA1ODI3NywgNTgyODEsIDU4Mjg2LCA1ODI5MCwgNTgyOTQsIDU4Mjk4LCA1ODMwMiwgCi0gICAgNTgzMDgsIDU4MzE0LCA1ODMxOCwgNTgzMjIsIDU4MzI2LCA1ODMzMCwgNTgzMzQsIDU4MzM4LCA1ODM0MiwgNTgzNDYsIAotICAgIDU4MzUwLCA1ODM1NCwgNTgzNTgsIDU4MzY0LCA1ODM2OCwgNTgzNzIsIDU4Mzc2LCA1ODM4MCwgNTgzODQsIDU4Mzg4LCAKLSAgICA1ODM5MiwgNTgzOTYsIDU4NDAwLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNiwgNTg0MjAsIDU4NDI0LCA1ODQyOCwgCi0gICAgNTg0MzQsIDU4NDQwLCA1ODQ0NSwgNTg0NTAsIDU4NDU0LCA1ODQ1OCwgNTg0NjIsIDU4NDY2LCA1ODQ3MCwgNTg0NzQsIAotICAgIDU4NDc4LCA1ODQ4MiwgNTg0ODYsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCAKLSAgICA1ODUxOCwgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCA1ODU0MiwgNTg1NDYsIDU4NTUyLCA1ODU1NiwgCi0gICAgNTg1NjAsIDU4NTY0LCA1ODU2OCwgNTg1NzIsIDU4NTc2LCA1ODU4MCwgNTg1ODQsIDU4NTg5LCA1ODU5NiwgNTg2MDAsIAotICAgIDU4NjA0LCA1ODYwOCwgNTg2MTIsIDU4NjE2LCA1ODYyMCwgNTg2MjQsIDU4NjI4LCA1ODYzMiwgNTg2MzYsIDU4NjQwLCAKLSAgICA1ODY0NCwgNTg2NTEsIDU4NjU1LCA1ODY2MSwgNTg2NjUsIDU4NjY5LCA1ODY3MywgNTg2NzcsIDU4NjgxLCA1ODY4NCwgCi0gICAgNTg2ODgsIDU4NjkyLCA1ODY5NiwgNTg3MDAsIDU4NzA0LCA1ODcwOCwgNTg3MTIsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIAotICAgIDU4NzI4LCA1ODczMiwgNTg3MzYsIDU4NzQwLCA1ODc0NCwgNTg3NDgsIDU4NzUyLCA1ODc1NiwgNTg3NjAsIDU4NzY0LCAKLSAgICA1ODc2OCwgNTg3NzIsIDU4Nzc2LCA1ODc4MCwgNTg3ODQsIDU4Nzg4LCA1ODc5MiwgNTg3OTYsIDU4ODAwLCA1ODgwNCwgCi0gICAgNTg4MDgsIDU4ODEyLCA1ODgxOCwgNTg4MjIsIDU4ODI2LCA1ODgzMCwgNTg4MzQsIDU4ODM4LCA1ODg0MiwgNTg4NDYsIAotICAgIDU4ODUwLCA1ODg1NCwgNTg4NTgsIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg3OCwgNTg4ODIsIDU4ODg2LCAKLSAgICA1ODg5MCwgNTg4OTQsIDU4ODk4LCA1ODkwMiwgNTg5MDYsIDU4OTEwLCA1ODkxNCwgNTg5MTgsIDU4OTIyLCA1ODkyNiwgCi0gICAgNTg5MzQsIDU4OTM4LCA1ODk0MiwgNTg5NDYsIDU4OTUwLCA1ODk1NCwgNTg5NjAsIDU4OTY0LCA1ODk2OCwgNTg5NzIsIAotICAgIDU4OTc2LCA1ODk4MCwgNTg5ODQsIDU4OTg4LCA1ODk5MiwgNTg5OTYsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDEyLCAKLSAgICA1OTAxOCwgNTkwMjIsIDU5MDI2LCA1OTAzMCwgNTkwMzQsIDU5MDM4LCA1OTA0MiwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgCi0gICAgNTkwNTgsIDU5MDYyLCA1OTA2NiwgNTkwNzAsIDU5MDc0LCA1OTA3OCwgNTkwODIsIDU5MDg2LCA1OTA5MCwgNTkwOTQsIAotICAgIDU5MDk4LCA1OTEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTkxMDYsIDU5MTE1LCA1OTEyMywgNTkxMzUsIDU5MTQ2LCA1OTE1NCwgNTkxNjMsIDU5MTcyLCAKLSAgICA1OTE4MiwgNTkxOTQsIDU5MjA2LCA1OTIxOCwgMCwgMCwgMCwgMCwgNTkyMjQsIDU5MjI3LCA1OTIzMCwgNTkyMzUsIAotICAgIDU5MjM4LCA1OTI0NSwgNTkyNDksIDU5MjUzLCA1OTI1NywgNTkyNjEsIDU5MjY1LCA1OTI3MCwgNTkyNzUsIDU5Mjc5LCAKLSAgICA1OTI4MywgNTkyODgsIDU5MjkzLCA1OTI5OCwgNTkzMDMsIDU5MzA2LCA1OTMwOSwgNTkzMTUsIDU5MzIxLCA1OTMyNiwgCi0gICAgNTkzMzEsIDU5MzM4LCA1OTM0NSwgNTkzNDksIDU5MzUzLCA1OTM1NywgNTkzNjUsIDU5MzcxLCA1OTM3OCwgNTkzODMsIAotICAgIDU5Mzg4LCA1OTM5MywgNTkzOTgsIDU5NDAzLCA1OTQwOCwgNTk0MTMsIDU5NDE4LCA1OTQyMywgNTk0MjgsIDU5NDMzLCAKLSAgICA1OTQzOCwgNTk0NDMsIDU5NDQ4LCA1OTQ1NCwgNTk0NTksIDU5NDYzLCA1OTQ2OSwgNTk0ODAsIDU5NDkwLCA1OTUwNSwgCi0gICAgNTk1MTUsIDU5NTE5LCA1OTUyOSwgNTk1MzUsIDU5NTQxLCA1OTU0NywgNTk1NTIsIDU5NTU1LCA1OTU2MCwgNTk1NjQsIDAsIAotICAgIDU5NTcwLCA1OTU3NCwgNTk1NzcsIDU5NTgxLCA1OTU4NCwgNTk1ODgsIDU5NTkxLCA1OTU5NSwgNTk1OTgsIDU5NjAyLCAKLSAgICA1OTYwNSwgNTk2MDgsIDU5NjEyLCA1OTYxNiwgNTk2MjAsIDU5NjI0LCA1OTYyOCwgNTk2MzIsIDU5NjM2LCA1OTY0MCwgCi0gICAgNTk2NDQsIDU5NjQ3LCA1OTY1MSwgNTk2NTUsIDU5NjU5LCA1OTY2MywgNTk2NjcsIDU5NjcxLCA1OTY3NSwgNTk2NzksIAotICAgIDU5NjgzLCA1OTY4NywgNTk2OTEsIDU5Njk1LCA1OTY5OSwgNTk3MDQsIDU5NzA4LCA1OTcxMiwgNTk3MTYsIDU5NzIwLCAKLSAgICA1OTcyMywgNTk3MjcsIDU5NzMwLCA1OTczNCwgNTk3MzgsIDU5NzQyLCA1OTc0NiwgNTk3NDksIDU5NzUzLCA1OTc1NiwgCi0gICAgNTk3NjAsIDU5NzY0LCA1OTc2OCwgNTk3NzIsIDU5Nzc2LCA1OTc4MCwgNTk3ODQsIDU5Nzg4LCA1OTc5MiwgNTk3OTYsIAotICAgIDU5ODAwLCA1OTgwNCwgNTk4MDcsIDU5ODExLCA1OTgxNSwgNTk4MTksIDU5ODIzLCA1OTgyNywgNTk4MzAsIDU5ODM1LCAKLSAgICA1OTgzOSwgNTk4NDQsIDU5ODQ4LCA1OTg1MSwgNTk4NTUsIDU5ODU5LCA1OTg2MywgNTk4NjcsIDU5ODcyLCA1OTg3NiwgCi0gICAgNTk4ODAsIDU5ODg0LCA1OTg4OCwgNTk4OTIsIDU5ODk2LCA1OTkwMCwgMCwgMCwgNTk5MDUsIDU5OTEzLCA1OTkyMSwgCi0gICAgNTk5MjgsIDU5OTM1LCA1OTkzOSwgNTk5NDUsIDU5OTUwLCA1OTk1NSwgNTk5NTksIDU5OTYyLCA1OTk2NiwgNTk5NjksIAotICAgIDU5OTczLCA1OTk3NiwgNTk5ODAsIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTkzLCA1OTk5NywgNjAwMDEsIDYwMDA1LCAKLSAgICA2MDAwOSwgNjAwMTMsIDYwMDE3LCA2MDAyMSwgNjAwMjUsIDYwMDI5LCA2MDAzMiwgNjAwMzYsIDYwMDQwLCA2MDA0NCwgCi0gICAgNjAwNDgsIDYwMDUyLCA2MDA1NiwgNjAwNjAsIDYwMDY0LCA2MDA2OCwgNjAwNzIsIDYwMDc2LCA2MDA4MCwgNjAwODQsIAotICAgIDYwMDg5LCA2MDA5MywgNjAwOTcsIDYwMTAxLCA2MDEwNSwgNjAxMDgsIDYwMTEyLCA2MDExNSwgNjAxMTksIDYwMTIzLCAKLSAgICA2MDEyNywgNjAxMzEsIDYwMTM0LCA2MDEzOCwgNjAxNDEsIDYwMTQ1LCA2MDE0OSwgNjAxNTMsIDYwMTU3LCA2MDE2MSwgCi0gICAgNjAxNjUsIDYwMTY5LCA2MDE3MywgNjAxNzcsIDYwMTgxLCA2MDE4NSwgNjAxODksIDYwMTkyLCA2MDE5NiwgNjAyMDAsIAotICAgIDYwMjA0LCA2MDIwOCwgNjAyMTIsIDYwMjE1LCA2MDIyMCwgNjAyMjQsIDYwMjI5LCA2MDIzMywgNjAyMzYsIDYwMjQwLCAKLSAgICA2MDI0NCwgNjAyNDgsIDYwMjUyLCA2MDI1NywgNjAyNjEsIDYwMjY1LCA2MDI2OSwgNjAyNzMsIDYwMjc3LCA2MDI4MSwgCi0gICAgNjAyODUsIDYwMjkwLCA2MDI5NCwgNjAyOTgsIDYwMzAyLCA2MDMwNiwgNjAzMTEsIDYwMzE4LCA2MDMyMiwgNjAzMjgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDYwMzMzLCA2MDMzOCwgNjAzNDMsIDYwMzQ3LCA2MDM1MiwgNjAzNTcsIDYwMzYyLCA2MDM2NywgCi0gICAgNjAzNzEsIDYwMzc2LCA2MDM4MSwgNjAzODYsIDYwMzkxLCA2MDM5NiwgNjA0MDEsIDYwNDA2LCA2MDQxMSwgNjA0MTYsIAotICAgIDYwNDIwLCA2MDQyNSwgNjA0MzAsIDYwNDM1LCA2MDQzOSwgNjA0NDMsIDYwNDQ3LCA2MDQ1MiwgNjA0NTcsIDYwNDYyLCAKLSAgICA2MDQ2NywgNjA0NzIsIDYwNDc3LCA2MDQ4MiwgNjA0ODcsIDYwNDkyLCA2MDQ5NywgNjA1MDEsIDYwNTA1LCA2MDUxMCwgCi0gICAgNjA1MTUsIDYwNTIwLCA2MDUyNSwgMCwgMCwgMCwgNjA1MzAsIDYwNTM0LCA2MDUzOCwgNjA1NDIsIDYwNTQ2LCA2MDU1MCwgCi0gICAgNjA1NTQsIDYwNTU4LCA2MDU2MiwgNjA1NjYsIDYwNTcwLCA2MDU3NCwgNjA1NzgsIDYwNTgyLCA2MDU4NiwgNjA1OTAsIAotICAgIDYwNTk0LCA2MDU5OCwgNjA2MDIsIDYwNjA2LCA2MDYxMCwgNjA2MTQsIDYwNjE4LCA2MDYyMiwgNjA2MjYsIDYwNjMwLCAKLSAgICA2MDYzNCwgNjA2MzgsIDYwNjQyLCA2MDY0NiwgNjA2NTAsIDYwNjUzLCA2MDY1NywgNjA2NjAsIDYwNjY0LCA2MDY2OCwgCi0gICAgNjA2NzEsIDYwNjc1LCA2MDY3OSwgNjA2ODIsIDYwNjg2LCA2MDY5MCwgNjA2OTQsIDYwNjk4LCA2MDcwMSwgNjA3MDUsIAotICAgIDYwNzA5LCA2MDcxMywgNjA3MTcsIDYwNzIxLCA2MDcyNSwgNjA3MjgsIDYwNzMxLCA2MDczNSwgNjA3MzksIDYwNzQzLCAKLSAgICA2MDc0NywgNjA3NTEsIDYwNzU1LCA2MDc1OSwgNjA3NjMsIDYwNzY3LCA2MDc3MSwgNjA3NzUsIDYwNzc5LCA2MDc4MywgCi0gICAgNjA3ODcsIDYwNzkxLCA2MDc5NSwgNjA3OTksIDYwODAzLCA2MDgwNywgNjA4MTEsIDYwODE1LCA2MDgxOSwgNjA4MjMsIAotICAgIDYwODI3LCA2MDgzMSwgNjA4MzUsIDYwODM5LCA2MDg0MywgNjA4NDcsIDYwODUxLCA2MDg1NSwgNjA4NTksIDYwODYzLCAKLSAgICA2MDg2NywgNjA4NzEsIDYwODc1LCA2MDg3OSwgNjA4ODMsIDYwODg3LCA2MDg5MSwgNjA4OTUsIDAsIDYwODk5LCA2MDkwNSwgCi0gICAgNjA5MTEsIDYwOTE2LCA2MDkyMSwgNjA5MjYsIDYwOTMyLCA2MDkzOCwgNjA5NDQsIDYwOTUwLCA2MDk1NiwgNjA5NjIsIAotICAgIDYwOTY4LCA2MDk3NCwgNjA5ODAsIDYwOTg2LCA2MDk5MiwgNjA5OTcsIDYxMDAyLCA2MTAwNywgNjEwMTIsIDYxMDE3LCAKLSAgICA2MTAyMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDIsIDYxMDQ3LCA2MTA1MiwgNjEwNTcsIDYxMDYyLCA2MTA2NywgCi0gICAgNjEwNzIsIDYxMDc3LCA2MTA4MiwgNjEwODcsIDYxMDkyLCA2MTA5OCwgNjExMDQsIDYxMTEwLCA2MTExNiwgNjExMjEsIAotICAgIDYxMTI2LCAwLCAwLCAwLCAwLCAwLCA2MTEzMSwgNjExMzYsIDYxMTQxLCA2MTE0NiwgNjExNTEsIDYxMTU2LCA2MTE2MSwgCi0gICAgNjExNjYsIDYxMTcxLCA2MTE3NiwgNjExODEsIDYxMTg2LCA2MTE5MSwgNjExOTYsIDYxMjAxLCA2MTIwNiwgNjEyMTEsIAotICAgIDYxMjE2LCA2MTIyMSwgNjEyMjYsIDYxMjMxLCA2MTIzNiwgNjEyNDEsIDYxMjQ2LCA2MTI1MSwgNjEyNTYsIDYxMjYxLCAKLSAgICA2MTI2NiwgNjEyNzEsIDYxMjc2LCA2MTI4MSwgNjEyODYsIDYxMjkxLCA2MTI5NiwgNjEzMDEsIDYxMzA2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMxMSwgNjEzMTYsIDYxMzIxLCA2MTMyNiwgNjEzMzAsIDYxMzM1LCAKLSAgICA2MTMzOSwgNjEzNDQsIDYxMzQ5LCA2MTM1NCwgNjEzNTksIDYxMzY0LCA2MTM2OCwgNjEzNzMsIDYxMzc4LCA2MTM4MywgCi0gICAgNjEzODgsIDYxMzkyLCA2MTM5NiwgNjE0MDAsIDYxNDA0LCA2MTQwOCwgNjE0MTIsIDYxNDE2LCA2MTQyMCwgNjE0MjQsIAotICAgIDYxNDI4LCA2MTQzMiwgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDksIDYxNDU0LCA2MTQ1OSwgNjE0NjQsIDYxNDY5LCAKLSAgICA2MTQ3NCwgNjE0NzksIDYxNDg0LCA2MTQ4OSwgNjE0OTQsIDYxNDk5LCA2MTUwNCwgNjE1MDksIDYxNTE0LCA2MTUxOSwgCi0gICAgNjE1MjUsIDAsIDYxNTMyLCA2MTUzNSwgNjE1MzgsIDYxNTQxLCA2MTU0NCwgNjE1NDcsIDYxNTUwLCA2MTU1MywgNjE1NTYsIAotICAgIDYxNTU5LCA2MTU2MywgNjE1NjcsIDYxNTcxLCA2MTU3NSwgNjE1NzksIDYxNTgzLCA2MTU4NywgNjE1OTEsIDYxNTk1LCAKLSAgICA2MTU5OSwgNjE2MDMsIDYxNjA3LCA2MTYxMSwgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgCi0gICAgNjE2MzksIDYxNjQzLCA2MTY0NywgNjE2NTEsIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIAotICAgIDYxNjc5LCA2MTY4MywgNjE2OTIsIDYxNzAxLCA2MTcxMCwgNjE3MTksIDYxNzI4LCA2MTczNywgNjE3NDYsIDYxNzU1LCAKLSAgICA2MTc1OCwgNjE3NjMsIDYxNzY4LCA2MTc3MywgNjE3NzgsIDYxNzgzLCA2MTc4OCwgNjE3OTMsIDYxNzk4LCA2MTgwMywgCi0gICAgNjE4MDcsIDYxODEyLCA2MTgxNywgNjE4MjIsIDYxODI3LCA2MTgzMiwgNjE4MzYsIDYxODQwLCA2MTg0NCwgNjE4NDgsIAotICAgIDYxODUyLCA2MTg1NiwgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg4LCAKLSAgICA2MTg5MywgNjE4OTgsIDYxOTAzLCA2MTkwOCwgNjE5MTMsIDYxOTE4LCA2MTkyMywgNjE5MjgsIDYxOTMzLCA2MTkzOCwgCi0gICAgNjE5NDMsIDYxOTQ4LCA2MTk1MywgNjE5NTgsIDYxOTY0LCA2MTk3MCwgNjE5NzUsIDYxOTgwLCA2MTk4MywgNjE5ODYsIAotICAgIDYxOTg5LCA2MTk5MiwgNjE5OTUsIDYxOTk4LCA2MjAwMSwgNjIwMDQsIDYyMDA3LCA2MjAxMSwgNjIwMTUsIDYyMDE5LCAKLSAgICA2MjAyMywgNjIwMjcsIDYyMDMxLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIDYyMDU1LCA2MjA1OSwgCi0gICAgNjIwNjMsIDYyMDY3LCA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCA2MjA5NSwgNjIwOTksIAotICAgIDYyMTAzLCA2MjEwNywgNjIxMTEsIDYyMTE1LCA2MjExOSwgNjIxMjMsIDYyMTI3LCA2MjEzMSwgNjIxMzUsIDYyMTM5LCAKLSAgICA2MjE0MywgNjIxNDcsIDYyMTUxLCA2MjE1NSwgNjIxNTksIDYyMTYzLCA2MjE2NywgNjIxNzIsIDYyMTc3LCA2MjE4MiwgCi0gICAgNjIxODcsIDYyMTkxLCA2MjE5NiwgNjIyMDEsIDYyMjA2LCA2MjIxMSwgNjIyMTYsIDYyMjIxLCA2MjIyNiwgNjIyMzEsIAotICAgIDYyMjM2LCA2MjI0MCwgNjIyNDcsIDYyMjU0LCA2MjI2MSwgNjIyNjgsIDYyMjc1LCA2MjI4MiwgNjIyODksIDYyMjk2LCAKLSAgICA2MjMwMywgNjIzMTAsIDYyMzE3LCA2MjMyNCwgNjIzMjcsIDYyMzMwLCA2MjMzMywgNjIzMzgsIDYyMzQxLCA2MjM0NCwgCi0gICAgNjIzNDcsIDYyMzUwLCA2MjM1MywgNjIzNTYsIDYyMzYwLCA2MjM2NCwgNjIzNjgsIDYyMzcyLCA2MjM3NSwgNjIzNzksIAotICAgIDYyMzgzLCA2MjM4NywgNjIzOTEsIDYyMzk1LCA2MjM5OSwgNjI0MDMsIDYyNDA3LCA2MjQxMCwgNjI0MTMsIDYyNDE3LCAKLSAgICA2MjQyMSwgNjI0MjUsIDYyNDI5LCA2MjQzMiwgNjI0MzYsIDYyNDQwLCA2MjQ0NCwgNjI0NDgsIDYyNDUxLCA2MjQ1NSwgCi0gICAgNjI0NTksIDYyNDYzLCA2MjQ2NywgNjI0NzAsIDYyNDc0LCA2MjQ3OCwgNjI0ODEsIDYyNDg1LCA2MjQ4OSwgNjI0OTMsIAotICAgIDYyNDk3LCA2MjUwMSwgNjI1MDUsIDYyNTA5LCAwLCA2MjUxMywgNjI1MTYsIDYyNTE5LCA2MjUyMiwgNjI1MjUsIDYyNTI4LCAKLSAgICA2MjUzMSwgNjI1MzQsIDYyNTM3LCA2MjU0MCwgNjI1NDMsIDYyNTQ2LCA2MjU0OSwgNjI1NTIsIDYyNTU1LCA2MjU1OCwgCi0gICAgNjI1NjEsIDYyNTY0LCA2MjU2NywgNjI1NzAsIDYyNTczLCA2MjU3NiwgNjI1NzksIDYyNTgyLCA2MjU4NSwgNjI1ODgsIAotICAgIDYyNTkxLCA2MjU5NCwgNjI1OTcsIDYyNjAwLCA2MjYwMywgNjI2MDYsIDYyNjA5LCA2MjYxMiwgNjI2MTUsIDYyNjE4LCAKLSAgICA2MjYyMSwgNjI2MjQsIDYyNjI3LCA2MjYzMCwgNjI2MzMsIDYyNjM2LCA2MjYzOSwgNjI2NDIsIDYyNjQ1LCA2MjY0OCwgCi0gICAgNjI2NTEsIDYyNjU0LCA2MjY1NywgNjI2NjAsIDYyNjYzLCA2MjY2NiwgNjI2NjksIDYyNjcyLCA2MjY3NSwgNjI2NzgsIAotICAgIDYyNjgxLCA2MjY4NCwgNjI2ODcsIDYyNjkwLCA2MjY5MywgNjI2OTYsIDYyNjk5LCA2MjcwMiwgNjI3MDUsIDYyNzA4LCAKLSAgICA2MjcxMSwgNjI3MTQsIDYyNzE3LCA2MjcyMCwgNjI3MjMsIDYyNzI2LCA2MjcyOSwgNjI3MzIsIDYyNzM1LCA2MjczOCwgCi0gICAgNjI3NDEsIDYyNzQ0LCA2Mjc0NywgNjI3NTAsIDYyNzUzLCA2Mjc1NiwgNjI3NTksIDYyNzYyLCA2Mjc2NSwgNjI3NjgsIAotICAgIDYyNzcxLCA2Mjc3NCwgNjI3NzcsIDYyNzg2LCA2Mjc5NCwgNjI4MDIsIDYyODEwLCA2MjgxOCwgNjI4MjYsIDYyODM0LCAKLSAgICA2Mjg0MiwgNjI4NTAsIDYyODU4LCA2Mjg2NywgNjI4NzYsIDYyODg1LCA2Mjg5NCwgNjI5MDMsIDYyOTEyLCA2MjkyMSwgCi0gICAgNjI5MzAsIDYyOTM5LCA2Mjk0OCwgNjI5NTcsIDYyOTY2LCA2Mjk3NSwgNjI5ODQsIDYyOTkzLCA2Mjk5NiwgNjI5OTksIAotICAgIDYzMDAyLCA2MzAwNCwgNjMwMDcsIDYzMDEwLCA2MzAxMywgNjMwMTgsIDYzMDIzLCA2MzAyNiwgNjMwMzMsIDYzMDQwLCAKLSAgICA2MzA0NywgNjMwNTQsIDYzMDU3LCA2MzA2MiwgNjMwNjQsIDYzMDY4LCA2MzA3MCwgNjMwNzIsIDYzMDc1LCA2MzA3OCwgCi0gICAgNjMwODEsIDYzMDg0LCA2MzA4NywgNjMwOTAsIDYzMDkzLCA2MzA5OCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIAotICAgIDYzMTE1LCA2MzExOCwgNjMxMjEsIDYzMTI0LCA2MzEyOCwgNjMxMzEsIDYzMTM0LCA2MzEzNywgNjMxNDAsIDYzMTQzLCAKLSAgICA2MzE0NywgNjMxNTAsIDYzMTUzLCA2MzE1NiwgNjMxNjEsIDYzMTY2LCA2MzE3MSwgNjMxNzYsIDYzMTgxLCA2MzE4NiwgCi0gICAgNjMxOTEsIDYzMTk2LCA2MzIwMiwgNjMyMTAsIDYzMjEyLCA2MzIxNSwgNjMyMTgsIDYzMjIxLCA2MzIyNCwgNjMyMzAsIAotICAgIDYzMjM4LCA2MzI0MSwgNjMyNDQsIDYzMjQ5LCA2MzI1MiwgNjMyNTUsIDYzMjU4LCA2MzI2MywgNjMyNjYsIDYzMjY5LCAKLSAgICA2MzI3NCwgNjMyNzcsIDYzMjgwLCA2MzI4NSwgNjMyODgsIDYzMjkxLCA2MzI5NiwgNjMzMDEsIDYzMzA2LCA2MzMwOSwgCi0gICAgNjMzMTIsIDYzMzE1LCA2MzMxOCwgNjMzMjQsIDYzMzI3LCA2MzMzMCwgNjMzMzMsIDYzMzM1LCA2MzMzOCwgNjMzNDEsIAotICAgIDYzMzQ0LCA2MzM0OSwgNjMzNTIsIDYzMzU1LCA2MzM1OCwgNjMzNjEsIDYzMzY0LCA2MzM2OSwgNjMzNzIsIDYzMzc1LCAKLSAgICA2MzM3OCwgNjMzODEsIDYzMzg0LCA2MzM4NywgNjMzOTAsIDYzMzkzLCA2MzM5NiwgNjM0MDEsIDYzNDA1LCA2MzQxMywgCi0gICAgNjM0MjEsIDYzNDI5LCA2MzQzNywgNjM0NDUsIDYzNDUzLCA2MzQ2MSwgNjM0NjksIDYzNDc3LCA2MzQ4NiwgNjM0OTUsIAotICAgIDYzNTA0LCA2MzUxMywgNjM1MjIsIDYzNTMxLCA2MzU0MCwgNjM1NDksIDYzNTU4LCA2MzU2NywgNjM1NzYsIDYzNTg1LCAKLSAgICA2MzU5NCwgNjM2MDMsIDYzNjEyLCA2MzYyMSwgNjM2MzAsIDYzNjM5LCA2MzY0OCwgNjM2NTcsIDYzNjY2LCA2MzY3NSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc2ODEsIDU3Njg1LCA1NzY4OSwgNTc2OTQsIDU3Njk5LCA1NzcwNCwgCisgICAgNTc3MDgsIDU3NzEyLCA1NzcxNiwgNTc3MjEsIDU3NzI2LCA1NzczMCwgNTc3MzQsIDU3NzM4LCA1Nzc0MiwgNTc3NDcsIAorICAgIDU3NzUyLCA1Nzc1NywgNTc3NjIsIDU3NzY2LCA1Nzc3MCwgNTc3NzUsIDU3NzgwLCA1Nzc4NSwgNTc3OTAsIDU3Nzk0LCAwLCAKKyAgICA1Nzc5OCwgNTc4MDIsIDU3ODA2LCA1NzgxMCwgNTc4MTQsIDU3ODE4LCA1NzgyMiwgNTc4MjcsIDU3ODMyLCA1NzgzNiwgCisgICAgNTc4NDEsIDU3ODQ2LCA1Nzg1NSwgNTc4NTksIDU3ODYzLCA1Nzg2NywgNTc4NzQsIDU3ODc4LCA1Nzg4MywgNTc4ODgsIAorICAgIDU3ODkyLCA1Nzg5NiwgNTc5MDIsIDU3OTA3LCA1NzkxMiwgNTc5MTcsIDU3OTIyLCA1NzkyNiwgNTc5MzAsIDU3OTM0LCAKKyAgICA1NzkzOCwgNTc5NDIsIDU3OTQ3LCA1Nzk1MiwgNTc5NTYsIDU3OTYwLCA1Nzk2NSwgNTc5NzAsIDU3OTc1LCA1Nzk3OSwgCisgICAgNTc5ODMsIDU3OTg4LCA1Nzk5MywgNTc5OTksIDU4MDA1LCA1ODAwOSwgNTgwMTUsIDU4MDIxLCA1ODAyNSwgNTgwMzEsIAorICAgIDU4MDM3LCA1ODA0MiwgNTgwNDcsIDU4MDUxLCA1ODA1NywgNTgwNjEsIDU4MDY1LCA1ODA3MSwgNTgwNzcsIDU4MDgyLCAKKyAgICA1ODA4NywgNTgwOTEsIDU4MDk1LCA1ODEwMywgNTgxMDksIDU4MTE1LCA1ODEyMSwgNTgxMjYsIDU4MTMxLCA1ODEzNiwgCisgICAgNTgxNDIsIDU4MTQ2LCA1ODE1MiwgNTgxNTYsIDU4MTYwLCA1ODE2NiwgNTgxNzIsIDU4MTc4LCA1ODE4NCwgNTgxOTAsIAorICAgIDU4MTk2LCA1ODIwMiwgNTgyMDgsIDU4MjE0LCA1ODIyMCwgNTgyMjYsIDU4MjMyLCA1ODIzNiwgNTgyNDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MjQ4LCA1ODI1MSwgNTgyNTUsIDU4MjU5LCA1ODI2MywgNTgyNjcsIAorICAgIDU4MjcwLCA1ODI3MywgNTgyNzcsIDU4MjgxLCA1ODI4NSwgNTgyODksIDU4MjkyLCA1ODI5NywgNTgzMDEsIDU4MzA1LCAKKyAgICA1ODMwOSwgNTgzMTQsIDU4MzE4LCA1ODMyMiwgNTgzMjYsIDU4MzMwLCA1ODMzNiwgNTgzNDIsIDU4MzQ2LCA1ODM1MCwgCisgICAgNTgzNTQsIDU4MzU4LCA1ODM2MiwgNTgzNjYsIDU4MzcwLCA1ODM3NCwgNTgzNzgsIDU4MzgyLCA1ODM4NiwgNTgzOTIsIAorICAgIDU4Mzk2LCA1ODQwMCwgNTg0MDQsIDU4NDA4LCA1ODQxMiwgNTg0MTYsIDU4NDIwLCA1ODQyNCwgNTg0MjgsIDU4NDMyLCAKKyAgICA1ODQzNiwgNTg0NDAsIDU4NDQ0LCA1ODQ0OCwgNTg0NTIsIDU4NDU2LCA1ODQ2MiwgNTg0NjgsIDU4NDczLCA1ODQ3OCwgCisgICAgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgNTg0OTQsIDU4NDk4LCA1ODUwMiwgNTg1MDYsIDU4NTEwLCA1ODUxNCwgNTg1MTgsIAorICAgIDU4NTIyLCA1ODUyNiwgNTg1MzAsIDU4NTM0LCA1ODUzOCwgNTg1NDIsIDU4NTQ2LCA1ODU1MCwgNTg1NTQsIDU4NTU4LCAKKyAgICA1ODU2MiwgNTg1NjYsIDU4NTcwLCA1ODU3NCwgNTg1ODAsIDU4NTg0LCA1ODU4OCwgNTg1OTIsIDU4NTk2LCA1ODYwMCwgCisgICAgNTg2MDQsIDU4NjA4LCA1ODYxMiwgNTg2MTcsIDU4NjI0LCA1ODYyOCwgNTg2MzIsIDU4NjM2LCA1ODY0MCwgNTg2NDQsIAorICAgIDU4NjQ4LCA1ODY1MiwgNTg2NTYsIDU4NjYwLCA1ODY2NCwgNTg2NjgsIDU4NjcyLCA1ODY3OSwgNTg2ODMsIDU4Njg5LCAKKyAgICA1ODY5MywgNTg2OTcsIDU4NzAxLCA1ODcwNSwgNTg3MDksIDU4NzEyLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCA1ODcyOCwgCisgICAgNTg3MzIsIDU4NzM2LCA1ODc0MCwgNTg3NDQsIDU4NzQ4LCA1ODc1MiwgNTg3NTYsIDU4NzYwLCA1ODc2NCwgNTg3NjgsIAorICAgIDU4NzcyLCA1ODc3NiwgNTg3ODAsIDU4Nzg0LCA1ODc4OCwgNTg3OTIsIDU4Nzk2LCA1ODgwMCwgNTg4MDQsIDU4ODA4LCAKKyAgICA1ODgxMiwgNTg4MTYsIDU4ODIwLCA1ODgyNCwgNTg4MjgsIDU4ODMyLCA1ODgzNiwgNTg4NDAsIDU4ODQ2LCA1ODg1MCwgCisgICAgNTg4NTQsIDU4ODU4LCA1ODg2MiwgNTg4NjYsIDU4ODcwLCA1ODg3NCwgNTg4NzgsIDU4ODgyLCA1ODg4NiwgNTg4OTAsIAorICAgIDU4ODk0LCA1ODg5OCwgNTg5MDIsIDU4OTA2LCA1ODkxMCwgNTg5MTQsIDU4OTE4LCA1ODkyMiwgNTg5MjYsIDU4OTMwLCAKKyAgICA1ODkzNCwgNTg5MzgsIDU4OTQyLCA1ODk0NiwgNTg5NTAsIDU4OTU0LCA1ODk2MiwgNTg5NjYsIDU4OTcwLCA1ODk3NCwgCisgICAgNTg5NzgsIDU4OTgyLCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgNTkwMDQsIDU5MDA4LCA1OTAxMiwgNTkwMTYsIAorICAgIDU5MDIwLCA1OTAyNCwgNTkwMjgsIDU5MDMyLCA1OTAzNiwgNTkwNDAsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIDU5MDU4LCAKKyAgICA1OTA2MiwgNTkwNjYsIDU5MDcwLCA1OTA3NCwgNTkwNzgsIDU5MDgyLCA1OTA4NiwgNTkwOTAsIDU5MDk0LCA1OTA5OCwgCisgICAgNTkxMDIsIDU5MTA2LCA1OTExMCwgNTkxMTQsIDU5MTE4LCA1OTEyMiwgNTkxMjYsIDU5MTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTEzNCwgNTkxNDMsIAorICAgIDU5MTUxLCA1OTE2MywgNTkxNzQsIDU5MTgyLCA1OTE5MSwgNTkyMDAsIDU5MjEwLCA1OTIyMiwgNTkyMzQsIDU5MjQ2LCAwLCAKKyAgICAwLCAwLCAwLCA1OTI1MiwgNTkyNTUsIDU5MjU4LCA1OTI2MywgNTkyNjYsIDU5MjczLCA1OTI3NywgNTkyODEsIDU5Mjg1LCAKKyAgICA1OTI4OSwgNTkyOTMsIDU5Mjk4LCA1OTMwMywgNTkzMDcsIDU5MzExLCA1OTMxNiwgNTkzMjEsIDU5MzI2LCA1OTMzMSwgCisgICAgNTkzMzQsIDU5MzM3LCA1OTM0MywgNTkzNDksIDU5MzU0LCA1OTM1OSwgNTkzNjYsIDU5MzczLCA1OTM3NywgNTkzODEsIAorICAgIDU5Mzg1LCA1OTM5MywgNTkzOTksIDU5NDA2LCA1OTQxMSwgNTk0MTYsIDU5NDIxLCA1OTQyNiwgNTk0MzEsIDU5NDM2LCAKKyAgICA1OTQ0MSwgNTk0NDYsIDU5NDUxLCA1OTQ1NiwgNTk0NjEsIDU5NDY2LCA1OTQ3MSwgNTk0NzYsIDU5NDgyLCA1OTQ4NywgCisgICAgNTk0OTEsIDU5NDk3LCA1OTUwOCwgNTk1MTgsIDU5NTMzLCA1OTU0MywgNTk1NDcsIDU5NTU3LCA1OTU2MywgNTk1NjksIAorICAgIDU5NTc1LCA1OTU4MCwgNTk1ODMsIDU5NTg4LCA1OTU5MiwgMCwgNTk1OTgsIDU5NjAyLCA1OTYwNSwgNTk2MDksIDU5NjEyLCAKKyAgICA1OTYxNiwgNTk2MTksIDU5NjIzLCA1OTYyNiwgNTk2MzAsIDU5NjMzLCA1OTYzNiwgNTk2NDAsIDU5NjQ0LCA1OTY0OCwgCisgICAgNTk2NTIsIDU5NjU2LCA1OTY2MCwgNTk2NjQsIDU5NjY4LCA1OTY3MiwgNTk2NzUsIDU5Njc5LCA1OTY4MywgNTk2ODcsIAorICAgIDU5NjkxLCA1OTY5NSwgNTk2OTksIDU5NzAzLCA1OTcwNywgNTk3MTEsIDU5NzE1LCA1OTcxOSwgNTk3MjMsIDU5NzI3LCAKKyAgICA1OTczMiwgNTk3MzYsIDU5NzQwLCA1OTc0NCwgNTk3NDgsIDU5NzUxLCA1OTc1NSwgNTk3NTgsIDU5NzYyLCA1OTc2NiwgCisgICAgNTk3NzAsIDU5Nzc0LCA1OTc3NywgNTk3ODEsIDU5Nzg0LCA1OTc4OCwgNTk3OTIsIDU5Nzk2LCA1OTgwMCwgNTk4MDQsIAorICAgIDU5ODA4LCA1OTgxMiwgNTk4MTYsIDU5ODIwLCA1OTgyNCwgNTk4MjgsIDU5ODMyLCA1OTgzNSwgNTk4MzksIDU5ODQzLCAKKyAgICA1OTg0NywgNTk4NTEsIDU5ODU1LCA1OTg1OCwgNTk4NjMsIDU5ODY3LCA1OTg3MiwgNTk4NzYsIDU5ODc5LCA1OTg4MywgCisgICAgNTk4ODcsIDU5ODkxLCA1OTg5NSwgNTk5MDAsIDU5OTA0LCA1OTkwOCwgNTk5MTIsIDU5OTE2LCA1OTkyMCwgNTk5MjQsIAorICAgIDU5OTI4LCAwLCAwLCA1OTkzMywgNTk5NDEsIDU5OTQ5LCA1OTk1NiwgNTk5NjMsIDU5OTY3LCA1OTk3MywgNTk5NzgsIAorICAgIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTk0LCA1OTk5NywgNjAwMDEsIDYwMDA0LCA2MDAwOCwgNjAwMTEsIDYwMDE1LCAKKyAgICA2MDAxOCwgNjAwMjEsIDYwMDI1LCA2MDAyOSwgNjAwMzMsIDYwMDM3LCA2MDA0MSwgNjAwNDUsIDYwMDQ5LCA2MDA1MywgCisgICAgNjAwNTcsIDYwMDYwLCA2MDA2NCwgNjAwNjgsIDYwMDcyLCA2MDA3NiwgNjAwODAsIDYwMDg0LCA2MDA4OCwgNjAwOTIsIAorICAgIDYwMDk2LCA2MDEwMCwgNjAxMDQsIDYwMTA4LCA2MDExMiwgNjAxMTcsIDYwMTIxLCA2MDEyNSwgNjAxMjksIDYwMTMzLCAKKyAgICA2MDEzNiwgNjAxNDAsIDYwMTQzLCA2MDE0NywgNjAxNTEsIDYwMTU1LCA2MDE1OSwgNjAxNjIsIDYwMTY2LCA2MDE2OSwgCisgICAgNjAxNzMsIDYwMTc3LCA2MDE4MSwgNjAxODUsIDYwMTg5LCA2MDE5MywgNjAxOTcsIDYwMjAxLCA2MDIwNSwgNjAyMDksIAorICAgIDYwMjEzLCA2MDIxNywgNjAyMjAsIDYwMjI0LCA2MDIyOCwgNjAyMzIsIDYwMjM2LCA2MDI0MCwgNjAyNDMsIDYwMjQ4LCAKKyAgICA2MDI1MiwgNjAyNTcsIDYwMjYxLCA2MDI2NCwgNjAyNjgsIDYwMjcyLCA2MDI3NiwgNjAyODAsIDYwMjg1LCA2MDI4OSwgCisgICAgNjAyOTMsIDYwMjk3LCA2MDMwMSwgNjAzMDUsIDYwMzA5LCA2MDMxMywgNjAzMTgsIDYwMzIyLCA2MDMyNiwgNjAzMzAsIAorICAgIDYwMzM0LCA2MDMzOSwgNjAzNDYsIDYwMzUwLCA2MDM1NiwgMCwgMCwgMCwgMCwgMCwgNjAzNjEsIDYwMzY2LCA2MDM3MSwgCisgICAgNjAzNzUsIDYwMzgwLCA2MDM4NSwgNjAzOTAsIDYwMzk1LCA2MDM5OSwgNjA0MDQsIDYwNDA5LCA2MDQxNCwgNjA0MTksIAorICAgIDYwNDI0LCA2MDQyOSwgNjA0MzQsIDYwNDM5LCA2MDQ0NCwgNjA0NDgsIDYwNDUzLCA2MDQ1OCwgNjA0NjMsIDYwNDY3LCAKKyAgICA2MDQ3MSwgNjA0NzUsIDYwNDgwLCA2MDQ4NSwgNjA0OTAsIDYwNDk1LCA2MDUwMCwgNjA1MDUsIDYwNTEwLCA2MDUxNSwgCisgICAgNjA1MjAsIDYwNTI1LCA2MDUyOSwgNjA1MzMsIDYwNTM4LCA2MDU0MywgNjA1NDgsIDYwNTUzLCAwLCAwLCAwLCA2MDU1OCwgCisgICAgNjA1NjIsIDYwNTY2LCA2MDU3MCwgNjA1NzQsIDYwNTc4LCA2MDU4MiwgNjA1ODYsIDYwNTkwLCA2MDU5NCwgNjA1OTgsIAorICAgIDYwNjAyLCA2MDYwNiwgNjA2MTAsIDYwNjE0LCA2MDYxOCwgNjA2MjIsIDYwNjI2LCA2MDYzMCwgNjA2MzQsIDYwNjM4LCAKKyAgICA2MDY0MiwgNjA2NDYsIDYwNjUwLCA2MDY1NCwgNjA2NTgsIDYwNjYyLCA2MDY2NiwgNjA2NzAsIDYwNjc0LCA2MDY3OCwgCisgICAgNjA2ODEsIDYwNjg1LCA2MDY4OCwgNjA2OTIsIDYwNjk2LCA2MDY5OSwgNjA3MDMsIDYwNzA3LCA2MDcxMCwgNjA3MTQsIAorICAgIDYwNzE4LCA2MDcyMiwgNjA3MjYsIDYwNzI5LCA2MDczMywgNjA3MzcsIDYwNzQxLCA2MDc0NSwgNjA3NDksIDYwNzUzLCAKKyAgICA2MDc1NiwgNjA3NTksIDYwNzYzLCA2MDc2NywgNjA3NzEsIDYwNzc1LCA2MDc3OSwgNjA3ODMsIDYwNzg3LCA2MDc5MSwgCisgICAgNjA3OTUsIDYwNzk5LCA2MDgwMywgNjA4MDcsIDYwODExLCA2MDgxNSwgNjA4MTksIDYwODIzLCA2MDgyNywgNjA4MzEsIAorICAgIDYwODM1LCA2MDgzOSwgNjA4NDMsIDYwODQ3LCA2MDg1MSwgNjA4NTUsIDYwODU5LCA2MDg2MywgNjA4NjcsIDYwODcxLCAKKyAgICA2MDg3NSwgNjA4NzksIDYwODgzLCA2MDg4NywgNjA4OTEsIDYwODk1LCA2MDg5OSwgNjA5MDMsIDYwOTA3LCA2MDkxMSwgCisgICAgNjA5MTUsIDYwOTE5LCA2MDkyMywgMCwgNjA5MjcsIDYwOTMzLCA2MDkzOSwgNjA5NDQsIDYwOTQ5LCA2MDk1NCwgNjA5NjAsIAorICAgIDYwOTY2LCA2MDk3MiwgNjA5NzgsIDYwOTg0LCA2MDk5MCwgNjA5OTYsIDYxMDAyLCA2MTAwOCwgNjEwMTQsIDYxMDIwLCAKKyAgICA2MTAyNSwgNjEwMzAsIDYxMDM1LCA2MTA0MCwgNjEwNDUsIDYxMDUwLCA2MTA1NSwgNjEwNjAsIDYxMDY1LCA2MTA3MCwgCisgICAgNjEwNzUsIDYxMDgwLCA2MTA4NSwgNjEwOTAsIDYxMDk1LCA2MTEwMCwgNjExMDUsIDYxMTEwLCA2MTExNSwgNjExMjAsIAorICAgIDYxMTI2LCA2MTEzMiwgNjExMzgsIDYxMTQ0LCA2MTE0OSwgNjExNTQsIDAsIDAsIDAsIDAsIDAsIDYxMTU5LCA2MTE2NCwgCisgICAgNjExNjksIDYxMTc0LCA2MTE3OSwgNjExODQsIDYxMTg5LCA2MTE5NCwgNjExOTksIDYxMjA0LCA2MTIwOSwgNjEyMTQsIAorICAgIDYxMjE5LCA2MTIyNCwgNjEyMjksIDYxMjM0LCA2MTIzOSwgNjEyNDQsIDYxMjQ5LCA2MTI1NCwgNjEyNTksIDYxMjY0LCAKKyAgICA2MTI2OSwgNjEyNzQsIDYxMjc5LCA2MTI4NCwgNjEyODksIDYxMjk0LCA2MTI5OSwgNjEzMDQsIDYxMzA5LCA2MTMxNCwgCisgICAgNjEzMTksIDYxMzI0LCA2MTMyOSwgNjEzMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMzM5LCAKKyAgICA2MTM0NCwgNjEzNDksIDYxMzU0LCA2MTM1OCwgNjEzNjMsIDYxMzY3LCA2MTM3MiwgNjEzNzcsIDYxMzgyLCA2MTM4NywgCisgICAgNjEzOTIsIDYxMzk2LCA2MTQwMSwgNjE0MDYsIDYxNDExLCA2MTQxNiwgNjE0MjAsIDYxNDI0LCA2MTQyOCwgNjE0MzIsIAorICAgIDYxNDM2LCA2MTQ0MCwgNjE0NDQsIDYxNDQ4LCA2MTQ1MiwgNjE0NTYsIDYxNDYwLCA2MTQ2NCwgNjE0NjgsIDYxNDcyLCAKKyAgICA2MTQ3NywgNjE0ODIsIDYxNDg3LCA2MTQ5MiwgNjE0OTcsIDYxNTAyLCA2MTUwNywgNjE1MTIsIDYxNTE3LCA2MTUyMiwgCisgICAgNjE1MjcsIDYxNTMyLCA2MTUzNywgNjE1NDIsIDYxNTQ3LCA2MTU1MywgMCwgNjE1NjAsIDYxNTYzLCA2MTU2NiwgNjE1NjksIAorICAgIDYxNTcyLCA2MTU3NSwgNjE1NzgsIDYxNTgxLCA2MTU4NCwgNjE1ODcsIDYxNTkxLCA2MTU5NSwgNjE1OTksIDYxNjAzLCAKKyAgICA2MTYwNywgNjE2MTEsIDYxNjE1LCA2MTYxOSwgNjE2MjMsIDYxNjI3LCA2MTYzMSwgNjE2MzUsIDYxNjM5LCA2MTY0MywgCisgICAgNjE2NDcsIDYxNjUxLCA2MTY1NSwgNjE2NTksIDYxNjYzLCA2MTY2NywgNjE2NzEsIDYxNjc1LCA2MTY3OSwgNjE2ODMsIAorICAgIDYxNjg3LCA2MTY5MSwgNjE2OTUsIDYxNjk5LCA2MTcwMywgNjE3MDcsIDYxNzExLCA2MTcyMCwgNjE3MjksIDYxNzM4LCAKKyAgICA2MTc0NywgNjE3NTYsIDYxNzY1LCA2MTc3NCwgNjE3ODMsIDYxNzg2LCA2MTc5MSwgNjE3OTYsIDYxODAxLCA2MTgwNiwgCisgICAgNjE4MTEsIDYxODE2LCA2MTgyMSwgNjE4MjYsIDYxODMxLCA2MTgzNSwgNjE4NDAsIDYxODQ1LCA2MTg1MCwgNjE4NTUsIAorICAgIDYxODYwLCA2MTg2NCwgNjE4NjgsIDYxODcyLCA2MTg3NiwgNjE4ODAsIDYxODg0LCA2MTg4OCwgNjE4OTIsIDYxODk2LCAKKyAgICA2MTkwMCwgNjE5MDQsIDYxOTA4LCA2MTkxMiwgNjE5MTYsIDYxOTIxLCA2MTkyNiwgNjE5MzEsIDYxOTM2LCA2MTk0MSwgCisgICAgNjE5NDYsIDYxOTUxLCA2MTk1NiwgNjE5NjEsIDYxOTY2LCA2MTk3MSwgNjE5NzYsIDYxOTgxLCA2MTk4NiwgNjE5OTIsIAorICAgIDYxOTk4LCA2MjAwMywgNjIwMDgsIDYyMDExLCA2MjAxNCwgNjIwMTcsIDYyMDIwLCA2MjAyMywgNjIwMjYsIDYyMDI5LCAKKyAgICA2MjAzMiwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCA2MjA1NSwgNjIwNTksIDYyMDYzLCA2MjA2NywgCisgICAgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgNjIwOTUsIDYyMDk5LCA2MjEwMywgNjIxMDcsIAorICAgIDYyMTExLCA2MjExNSwgNjIxMTksIDYyMTIzLCA2MjEyNywgNjIxMzEsIDYyMTM1LCA2MjEzOSwgNjIxNDMsIDYyMTQ3LCAKKyAgICA2MjE1MSwgNjIxNTUsIDYyMTU5LCA2MjE2MywgNjIxNjcsIDYyMTcxLCA2MjE3NSwgNjIxNzksIDYyMTgzLCA2MjE4NywgCisgICAgNjIxOTEsIDYyMTk1LCA2MjIwMCwgNjIyMDUsIDYyMjEwLCA2MjIxNSwgNjIyMTksIDYyMjI0LCA2MjIyOSwgNjIyMzQsIAorICAgIDYyMjM5LCA2MjI0NCwgNjIyNDksIDYyMjU0LCA2MjI1OSwgNjIyNjQsIDYyMjY4LCA2MjI3NSwgNjIyODIsIDYyMjg5LCAKKyAgICA2MjI5NiwgNjIzMDMsIDYyMzEwLCA2MjMxNywgNjIzMjQsIDYyMzMxLCA2MjMzOCwgNjIzNDUsIDYyMzUyLCA2MjM1NSwgCisgICAgNjIzNTgsIDYyMzYxLCA2MjM2NiwgNjIzNjksIDYyMzcyLCA2MjM3NSwgNjIzNzgsIDYyMzgxLCA2MjM4NCwgNjIzODgsIAorICAgIDYyMzkyLCA2MjM5NiwgNjI0MDAsIDYyNDAzLCA2MjQwNywgNjI0MTEsIDYyNDE1LCA2MjQxOSwgNjI0MjMsIDYyNDI3LCAKKyAgICA2MjQzMSwgNjI0MzUsIDYyNDM4LCA2MjQ0MSwgNjI0NDUsIDYyNDQ5LCA2MjQ1MywgNjI0NTcsIDYyNDYwLCA2MjQ2NCwgCisgICAgNjI0NjgsIDYyNDcyLCA2MjQ3NiwgNjI0NzksIDYyNDgzLCA2MjQ4NywgNjI0OTEsIDYyNDk1LCA2MjQ5OCwgNjI1MDIsIAorICAgIDYyNTA2LCA2MjUwOSwgNjI1MTMsIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI5LCA2MjUzMywgNjI1MzcsIDAsIDYyNTQxLCAKKyAgICA2MjU0NCwgNjI1NDcsIDYyNTUwLCA2MjU1MywgNjI1NTYsIDYyNTU5LCA2MjU2MiwgNjI1NjUsIDYyNTY4LCA2MjU3MSwgCisgICAgNjI1NzQsIDYyNTc3LCA2MjU4MCwgNjI1ODMsIDYyNTg2LCA2MjU4OSwgNjI1OTIsIDYyNTk1LCA2MjU5OCwgNjI2MDEsIAorICAgIDYyNjA0LCA2MjYwNywgNjI2MTAsIDYyNjEzLCA2MjYxNiwgNjI2MTksIDYyNjIyLCA2MjYyNSwgNjI2MjgsIDYyNjMxLCAKKyAgICA2MjYzNCwgNjI2MzcsIDYyNjQwLCA2MjY0MywgNjI2NDYsIDYyNjQ5LCA2MjY1MiwgNjI2NTUsIDYyNjU4LCA2MjY2MSwgCisgICAgNjI2NjQsIDYyNjY3LCA2MjY3MCwgNjI2NzMsIDYyNjc2LCA2MjY3OSwgNjI2ODIsIDYyNjg1LCA2MjY4OCwgNjI2OTEsIAorICAgIDYyNjk0LCA2MjY5NywgNjI3MDAsIDYyNzAzLCA2MjcwNiwgNjI3MDksIDYyNzEyLCA2MjcxNSwgNjI3MTgsIDYyNzIxLCAKKyAgICA2MjcyNCwgNjI3MjcsIDYyNzMwLCA2MjczMywgNjI3MzYsIDYyNzM5LCA2Mjc0MiwgNjI3NDUsIDYyNzQ4LCA2Mjc1MSwgCisgICAgNjI3NTQsIDYyNzU3LCA2Mjc2MCwgNjI3NjMsIDYyNzY2LCA2Mjc2OSwgNjI3NzIsIDYyNzc1LCA2Mjc3OCwgNjI3ODEsIAorICAgIDYyNzg0LCA2Mjc4NywgNjI3OTAsIDYyNzkzLCA2Mjc5NiwgNjI3OTksIDYyODAyLCA2MjgwNSwgNjI4MTQsIDYyODIyLCAKKyAgICA2MjgzMCwgNjI4MzgsIDYyODQ2LCA2Mjg1NCwgNjI4NjIsIDYyODcwLCA2Mjg3OCwgNjI4ODYsIDYyODk1LCA2MjkwNCwgCisgICAgNjI5MTMsIDYyOTIyLCA2MjkzMSwgNjI5NDAsIDYyOTQ5LCA2Mjk1OCwgNjI5NjcsIDYyOTc2LCA2Mjk4NSwgNjI5OTQsIAorICAgIDYzMDAzLCA2MzAxMiwgNjMwMjEsIDYzMDI0LCA2MzAyNywgNjMwMzAsIDYzMDMyLCA2MzAzNSwgNjMwMzgsIDYzMDQxLCAKKyAgICA2MzA0NiwgNjMwNTEsIDYzMDU0LCA2MzA2MSwgNjMwNjgsIDYzMDc1LCA2MzA4MiwgNjMwODUsIDYzMDkwLCA2MzA5MiwgCisgICAgNjMwOTYsIDYzMDk4LCA2MzEwMCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIDYzMTE1LCA2MzExOCwgNjMxMjEsIAorICAgIDYzMTI2LCA2MzEzMSwgNjMxMzQsIDYzMTM3LCA2MzE0MCwgNjMxNDMsIDYzMTQ2LCA2MzE0OSwgNjMxNTIsIDYzMTU2LCAKKyAgICA2MzE1OSwgNjMxNjIsIDYzMTY1LCA2MzE2OCwgNjMxNzEsIDYzMTc1LCA2MzE3OCwgNjMxODEsIDYzMTg0LCA2MzE4OSwgCisgICAgNjMxOTQsIDYzMTk5LCA2MzIwNCwgNjMyMDksIDYzMjE0LCA2MzIxOSwgNjMyMjQsIDYzMjMwLCA2MzIzOCwgNjMyNDAsIAorICAgIDYzMjQzLCA2MzI0NiwgNjMyNDksIDYzMjUyLCA2MzI1OCwgNjMyNjYsIDYzMjY5LCA2MzI3MiwgNjMyNzcsIDYzMjgwLCAKKyAgICA2MzI4MywgNjMyODYsIDYzMjkxLCA2MzI5NCwgNjMyOTcsIDYzMzAyLCA2MzMwNSwgNjMzMDgsIDYzMzEzLCA2MzMxNiwgCisgICAgNjMzMTksIDYzMzI0LCA2MzMyOSwgNjMzMzQsIDYzMzM3LCA2MzM0MCwgNjMzNDMsIDYzMzQ2LCA2MzM1MiwgNjMzNTUsIAorICAgIDYzMzU4LCA2MzM2MSwgNjMzNjMsIDYzMzY2LCA2MzM2OSwgNjMzNzIsIDYzMzc3LCA2MzM4MCwgNjMzODMsIDYzMzg2LCAKKyAgICA2MzM4OSwgNjMzOTIsIDYzMzk3LCA2MzQwMCwgNjM0MDMsIDYzNDA2LCA2MzQwOSwgNjM0MTIsIDYzNDE1LCA2MzQxOCwgCisgICAgNjM0MjEsIDYzNDI0LCA2MzQyOSwgNjM0MzMsIDYzNDQxLCA2MzQ0OSwgNjM0NTcsIDYzNDY1LCA2MzQ3MywgNjM0ODEsIAorICAgIDYzNDg5LCA2MzQ5NywgNjM1MDUsIDYzNTE0LCA2MzUyMywgNjM1MzIsIDYzNTQxLCA2MzU1MCwgNjM1NTksIDYzNTY4LCAKKyAgICA2MzU3NywgNjM1ODYsIDYzNTk1LCA2MzYwNCwgNjM2MTMsIDYzNjIyLCA2MzYzMSwgNjM2NDAsIDYzNjQ5LCA2MzY1OCwgCisgICAgNjM2NjcsIDYzNjc2LCA2MzY4NSwgNjM2OTQsIDYzNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzY3OCwgNjM2ODcsIDYzNjk2LCA2MzcwNywgCi0gICAgNjM3MTQsIDYzNzE5LCA2MzcyNCwgNjM3MzEsIDYzNzM4LCA2Mzc0NCwgNjM3NDksIDYzNzU0LCA2Mzc1OSwgNjM3NjQsIAotICAgIDYzNzcxLCA2Mzc3NiwgNjM3ODEsIDYzNzg2LCA2Mzc5NywgNjM4MDIsIDYzODA3LCA2MzgxNCwgNjM4MTksIDYzODI2LCAKLSAgICA2MzgzMSwgNjM4MzYsIDYzODQzLCA2Mzg1MCwgNjM4NTcsIDYzODY2LCA2Mzg3NSwgNjM4ODAsIDYzODg1LCA2Mzg5MCwgCi0gICAgNjM4OTcsIDYzOTAyLCA2MzkxMiwgNjM5MTksIDYzOTI0LCA2MzkyOSwgNjM5MzQsIDYzOTM5LCA2Mzk0NCwgNjM5NDksIAotICAgIDYzOTU4LCA2Mzk2NSwgNjM5NzIsIDYzOTc3LCA2Mzk4NCwgNjM5ODksIDYzOTk2LCA2NDAwNSwgNjQwMTYsIDY0MDIxLCAKLSAgICA2NDAzMCwgNjQwMzUsIDY0MDQyLCA2NDA1MSwgNjQwNjAsIDY0MDY1LCA2NDA3MCwgNjQwNzcsIDY0MDgzLCA2NDA5MCwgCi0gICAgNjQwOTcsIDY0MTAxLCA2NDEwNSwgNjQxMDgsIDY0MTEyLCA2NDExNiwgNjQxMjAsIDY0MTI0LCA2NDEyOCwgNjQxMzIsIAotICAgIDY0MTM2LCA2NDEzOSwgNjQxNDMsIDY0MTQ3LCA2NDE1MSwgNjQxNTUsIDY0MTU5LCA2NDE2MywgNjQxNjYsIDY0MTcwLCAKLSAgICA2NDE3NCwgNjQxNzcsIDY0MTgxLCA2NDE4NSwgNjQxODksIDY0MTkzLCA2NDE5NywgNjQyMDEsIDY0MjA1LCA2NDIwOSwgCi0gICAgNjQyMTMsIDY0MjE3LCA2NDIyMSwgNjQyMjUsIDY0MjI5LCA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDksIAotICAgIDY0MjUzLCA2NDI1NywgNjQyNjEsIDY0MjY1LCA2NDI2OSwgNjQyNzMsIDY0Mjc3LCA2NDI4MSwgNjQyODUsIDY0Mjg5LCAKLSAgICA2NDI5MywgNjQyOTcsIDY0MzAxLCA2NDMwNSwgNjQzMDksIDY0MzEzLCA2NDMxNywgNjQzMjEsIDY0MzI1LCA2NDMyOSwgCi0gICAgNjQzMzMsIDY0MzM3LCA2NDM0MSwgNjQzNDUsIDY0MzQ5LCA2NDM1MywgNjQzNTYsIDY0MzYwLCA2NDM2NCwgNjQzNjgsIAotICAgIDY0MzcyLCA2NDM3NiwgNjQzODAsIDY0Mzg0LCA2NDM4OCwgNjQzOTIsIDY0Mzk2LCA2NDQwMCwgNjQ0MDQsIDY0NDA4LCAKLSAgICA2NDQxMiwgNjQ0MTYsIDY0NDIwLCA2NDQyNCwgNjQ0MjgsIDY0NDMyLCA2NDQzNiwgNjQ0NDAsIDY0NDQ0LCA2NDQ0OCwgCi0gICAgNjQ0NTIsIDY0NDU2LCA2NDQ2MCwgNjQ0NjQsIDY0NDY4LCA2NDQ3MiwgNjQ0NzYsIDY0NDgwLCA2NDQ4NCwgNjQ0ODgsIAotICAgIDY0NDkyLCA2NDQ5NiwgNjQ1MDAsIDY0NTA0LCA2NDUwOCwgNjQ1MTIsIDY0NTE2LCA2NDUyMCwgNjQ1MjQsIDY0NTI4LCAKLSAgICA2NDUzMiwgNjQ1MzYsIDY0NTQwLCA2NDU0NCwgNjQ1NDgsIDY0NTUyLCA2NDU1NiwgNjQ1NjAsIDY0NTY0LCA2NDU2OCwgCi0gICAgNjQ1NzIsIDY0NTc2LCA2NDU4MCwgNjQ1ODQsIDY0NTg4LCA2NDU5MiwgNjQ1OTYsIDY0NjAwLCA2NDYwNCwgNjQ2MDgsIAotICAgIDY0NjEyLCA2NDYxNiwgNjQ2MjAsIDY0NjI0LCA2NDYyOCwgNjQ2MzIsIDY0NjM2LCA2NDY0MCwgNjQ2NDQsIDY0NjQ4LCAKLSAgICA2NDY1MiwgNjQ2NTYsIDY0NjYwLCA2NDY2NCwgNjQ2NjgsIDY0NjcyLCA2NDY3NiwgNjQ2ODAsIDY0Njg0LCA2NDY4OCwgCi0gICAgNjQ2OTIsIDY0Njk2LCA2NDcwMCwgNjQ3MDQsIDY0NzA4LCA2NDcxMiwgNjQ3MTYsIDY0NzIwLCA2NDcyNCwgNjQ3MjgsIAotICAgIDY0NzMyLCA2NDczNiwgNjQ3NDAsIDY0NzQ0LCA2NDc0OCwgNjQ3NTIsIDY0NzU2LCA2NDc2MCwgNjQ3NjQsIDY0NzY4LCAKLSAgICA2NDc3MiwgNjQ3NzYsIDY0NzgwLCA2NDc4NCwgNjQ3ODgsIDY0NzkyLCA2NDc5NiwgNjQ4MDAsIDY0ODA0LCA2NDgwOCwgCi0gICAgNjQ4MTIsIDY0ODE2LCA2NDgyMCwgNjQ4MjQsIDY0ODI3LCA2NDgzMSwgNjQ4MzUsIDY0ODM5LCA2NDg0MywgNjQ4NDcsIAotICAgIDY0ODUxLCA2NDg1NSwgNjQ4NTksIDY0ODYzLCA2NDg2NywgNjQ4NzEsIDY0ODc1LCA2NDg3OSwgNjQ4ODMsIDY0ODg3LCAKLSAgICA2NDg5MSwgNjQ4OTUsIDY0ODk5LCA2NDkwMywgNjQ5MDcsIDY0OTExLCA2NDkxNSwgNjQ5MTksIDY0OTIzLCA2NDkyNywgCi0gICAgNjQ5MzEsIDY0OTM1LCA2NDkzOSwgNjQ5NDMsIDY0OTQ3LCA2NDk1MSwgNjQ5NTUsIDY0OTU5LCA2NDk2MywgNjQ5NjcsIAotICAgIDY0OTcxLCA2NDk3NSwgNjQ5NzksIDY0OTgzLCA2NDk4NywgNjQ5OTEsIDY0OTk1LCA2NDk5OSwgNjUwMDMsIDY1MDA3LCAKLSAgICA2NTAxMSwgNjUwMTUsIDY1MDE5LCA2NTAyMywgNjUwMjcsIDY1MDMxLCA2NTAzNSwgNjUwMzksIDY1MDQzLCA2NTA0NywgCi0gICAgNjUwNTEsIDY1MDU1LCA2NTA1OSwgNjUwNjMsIDY1MDY3LCA2NTA3MSwgNjUwNzUsIDY1MDc5LCA2NTA4MywgNjUwODcsIAotICAgIDY1MDkxLCA2NTA5NSwgNjUwOTksIDY1MTAzLCA2NTEwNywgNjUxMTEsIDY1MTE1LCA2NTExOSwgNjUxMjMsIDY1MTI3LCAKLSAgICA2NTEzMSwgNjUxMzUsIDY1MTM5LCA2NTE0MywgNjUxNDcsIDY1MTUxLCA2NTE1NSwgNjUxNTksIDY1MTYzLCA2NTE2NywgCi0gICAgNjUxNzEsIDY1MTc1LCA2NTE3OSwgNjUxODMsIDY1MTg3LCA2NTE5MSwgNjUxOTUsIDY1MTk5LCA2NTIwMywgNjUyMDcsIAotICAgIDY1MjExLCA2NTIxNSwgNjUyMTksIDY1MjIzLCA2NTIyNywgNjUyMzEsIDY1MjM1LCA2NTIzOSwgNjUyNDMsIDY1MjQ3LCAKLSAgICA2NTI1MSwgNjUyNTUsIDY1MjU5LCA2NTI2MywgNjUyNjcsIDY1MjcxLCA2NTI3NSwgNjUyNzksIDY1MjgzLCA2NTI4NywgCi0gICAgNjUyOTAsIDY1Mjk0LCA2NTI5OCwgNjUzMDIsIDY1MzA2LCA2NTMxMCwgNjUzMTQsIDY1MzE4LCA2NTMyMiwgNjUzMjYsIAotICAgIDY1MzMwLCA2NTMzNCwgNjUzMzgsIDY1MzQyLCA2NTM0NiwgNjUzNTAsIDY1MzU0LCA2NTM1OCwgNjUzNjIsIDY1MzY2LCAKLSAgICA2NTM3MCwgNjUzNzQsIDY1Mzc4LCA2NTM4MiwgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTgsIDY1NDAyLCA2NTQwNiwgCi0gICAgNjU0MTAsIDY1NDE0LCA2NTQxOCwgNjU0MjIsIDY1NDI2LCA2NTQzMCwgNjU0MzQsIDY1NDM4LCA2NTQ0MiwgNjU0NDYsIAotICAgIDY1NDUwLCA2NTQ1NCwgNjU0NTgsIDY1NDYyLCA2NTQ2NiwgNjU0NzAsIDY1NDc0LCA2NTQ3OCwgNjU0ODIsIDY1NDg2LCAKLSAgICA2NTQ5MCwgNjU0OTQsIDY1NDk4LCA2NTUwMiwgNjU1MDYsIDY1NTEwLCA2NTUxNCwgNjU1MTgsIDY1NTIyLCA2NTUyNiwgCi0gICAgNjU1MzAsIDY1NTM0LCA2NTUzOCwgNjU1NDIsIDY1NTQ2LCA2NTU1MCwgNjU1NTQsIDY1NTU4LCA2NTU2MiwgNjU1NjYsIAotICAgIDY1NTcwLCA2NTU3NCwgNjU1NzgsIDY1NTgyLCA2NTU4NiwgNjU1OTAsIDY1NTk0LCA2NTU5OCwgNjU2MDIsIDY1NjA2LCAKLSAgICA2NTYxMCwgNjU2MTQsIDY1NjE4LCA2NTYyMiwgNjU2MjYsIDY1NjMwLCA2NTYzNCwgNjU2MzgsIDY1NjQyLCA2NTY0NiwgCi0gICAgNjU2NDksIDY1NjUzLCA2NTY1NywgNjU2NjEsIDY1NjY1LCA2NTY2OSwgNjU2NzMsIDY1Njc3LCA2NTY4MSwgNjU2ODUsIAotICAgIDY1Njg5LCA2NTY5MywgNjU2OTcsIDY1NzAxLCA2NTcwNSwgNjU3MDksIDY1NzEzLCA2NTcxNywgNjU3MjEsIDY1NzI1LCAKLSAgICA2NTcyOSwgNjU3MzMsIDY1NzM3LCA2NTc0MSwgNjU3NDUsIDY1NzQ5LCA2NTc1MywgNjU3NTcsIDY1NzYxLCA2NTc2NSwgCi0gICAgNjU3NjksIDY1NzczLCA2NTc3NywgNjU3ODEsIDY1Nzg1LCA2NTc4OSwgNjU3OTMsIDY1Nzk3LCA2NTgwMSwgNjU4MDUsIAotICAgIDY1ODA5LCA2NTgxMywgNjU4MTcsIDY1ODIxLCA2NTgyNSwgNjU4MjksIDY1ODMzLCA2NTgzNywgNjU4NDEsIDY1ODQ1LCAKLSAgICA2NTg0OSwgNjU4NTMsIDY1ODU3LCA2NTg2MSwgNjU4NjUsIDY1ODY5LCA2NTg3MywgNjU4NzcsIDY1ODgxLCA2NTg4NSwgCi0gICAgNjU4ODksIDY1ODkzLCA2NTg5NywgNjU5MDEsIDY1OTA1LCA2NTkwOSwgNjU5MTMsIDY1OTE3LCA2NTkyMSwgNjU5MjUsIAotICAgIDY1OTI5LCA2NTkzMywgNjU5MzcsIDY1OTQxLCA2NTk0NSwgNjU5NDksIDY1OTUzLCA2NTk1NywgNjU5NjEsIDY1OTY1LCAKLSAgICA2NTk2OSwgNjU5NzMsIDY1OTc3LCA2NTk4MSwgNjU5ODUsIDY1OTg5LCA2NTk5MywgNjU5OTcsIDY2MDAxLCA2NjAwNSwgCi0gICAgNjYwMDksIDY2MDEzLCA2NjAxNywgNjYwMjEsIDY2MDI1LCA2NjAyOSwgNjYwMzMsIDY2MDM3LCA2NjA0MSwgNjYwNDUsIAotICAgIDY2MDQ5LCA2NjA1MywgNjYwNTcsIDY2MDYxLCA2NjA2NSwgNjYwNjksIDY2MDczLCA2NjA3NywgNjYwODEsIDY2MDg1LCAKLSAgICA2NjA4OSwgNjYwOTMsIDY2MDk3LCA2NjEwMSwgNjYxMDUsIDY2MTA5LCA2NjExMywgNjYxMTcsIDY2MTIxLCA2NjEyNSwgCi0gICAgNjYxMjksIDY2MTMzLCA2NjEzNywgNjYxNDEsIDY2MTQ0LCA2NjE0OCwgNjYxNTIsIDY2MTU2LCA2NjE2MCwgNjYxNjQsIAotICAgIDY2MTY4LCA2NjE3MiwgNjYxNzYsIDY2MTgwLCA2NjE4NCwgNjYxODgsIDY2MTkyLCA2NjE5NiwgNjYyMDAsIDY2MjA0LCAKLSAgICA2NjIwOCwgNjYyMTIsIDY2MjE2LCA2NjIyMCwgNjYyMjQsIDY2MjI4LCA2NjIzMiwgNjYyMzYsIDY2MjQwLCA2NjI0NCwgCi0gICAgNjYyNDgsIDY2MjUyLCA2NjI1NiwgNjYyNjAsIDY2MjY0LCA2NjI2OCwgNjYyNzIsIDY2Mjc2LCA2NjI4MCwgNjYyODQsIAotICAgIDY2Mjg4LCA2NjI5MiwgNjYyOTYsIDY2MzAwLCA2NjMwNCwgNjYzMDgsIDY2MzEyLCA2NjMxNiwgNjYzMjAsIDY2MzI0LCAKLSAgICA2NjMyOCwgNjYzMzIsIDY2MzM2LCA2NjM0MCwgNjYzNDQsIDY2MzQ4LCA2NjM1MiwgNjYzNTYsIDY2MzYwLCA2NjM2NCwgCi0gICAgNjYzNjgsIDY2MzcyLCA2NjM3NiwgNjYzODAsIDY2Mzg0LCA2NjM4OCwgNjYzOTIsIDY2Mzk2LCA2NjQwMCwgNjY0MDQsIAotICAgIDY2NDA4LCA2NjQxMiwgNjY0MTYsIDY2NDIwLCA2NjQyNCwgNjY0MjgsIDY2NDMyLCA2NjQzNiwgNjY0NDAsIDY2NDQ0LCAKLSAgICA2NjQ0OCwgNjY0NTIsIDY2NDU2LCA2NjQ2MCwgNjY0NjQsIDY2NDY4LCA2NjQ3MiwgNjY0NzYsIDY2NDgwLCA2NjQ4NCwgCi0gICAgNjY0ODgsIDY2NDkyLCA2NjQ5NiwgNjY1MDAsIDY2NTA0LCA2NjUwOCwgNjY1MTIsIDY2NTE2LCA2NjUyMCwgNjY1MjQsIAotICAgIDY2NTI4LCA2NjUzMiwgNjY1MzYsIDY2NTQwLCA2NjU0NCwgNjY1NDgsIDY2NTUyLCA2NjU1NiwgNjY1NjAsIDY2NTY0LCAKLSAgICA2NjU2OCwgNjY1NzIsIDY2NTc2LCA2NjU4MCwgNjY1ODQsIDY2NTg4LCA2NjU5MiwgNjY1OTYsIDY2NTk5LCA2NjYwMywgCi0gICAgNjY2MDcsIDY2NjExLCA2NjYxNSwgNjY2MTksIDY2NjIzLCA2NjYyNywgNjY2MzEsIDY2NjM1LCA2NjYzOSwgNjY2NDMsIAotICAgIDY2NjQ3LCA2NjY1MSwgNjY2NTUsIDY2NjU5LCA2NjY2MywgNjY2NjcsIDY2NjcxLCA2NjY3NSwgNjY2NzksIDY2NjgzLCAKLSAgICA2NjY4NywgNjY2OTEsIDY2Njk1LCA2NjY5OSwgNjY3MDMsIDY2NzA3LCA2NjcxMSwgNjY3MTUsIDY2NzE5LCA2NjcyMywgCi0gICAgNjY3MjcsIDY2NzMxLCA2NjczNSwgNjY3MzksIDY2NzQzLCA2Njc0NywgNjY3NTEsIDY2NzU1LCA2Njc1OSwgNjY3NjMsIAotICAgIDY2NzY3LCA2Njc3MSwgNjY3NzUsIDY2Nzc5LCA2Njc4MywgNjY3ODcsIDY2NzkxLCA2Njc5NSwgNjY3OTksIDY2ODAzLCAKLSAgICA2NjgwNywgNjY4MTEsIDY2ODE1LCA2NjgxOSwgNjY4MjMsIDY2ODI3LCA2NjgzMSwgNjY4MzUsIDY2ODM5LCA2Njg0MywgCi0gICAgNjY4NDcsIDY2ODUxLCA2Njg1NSwgNjY4NTksIDY2ODYzLCA2Njg2NywgNjY4NzEsIDY2ODc1LCA2Njg3OSwgNjY4ODMsIAotICAgIDY2ODg3LCA2Njg5MSwgNjY4OTUsIDY2ODk5LCA2NjkwMywgNjY5MDcsIDY2OTExLCA2NjkxNSwgNjY5MTksIDY2OTIzLCAKLSAgICA2NjkyNywgNjY5MzEsIDY2OTM1LCA2NjkzOSwgNjY5NDMsIDY2OTQ3LCA2Njk1MSwgNjY5NTUsIDY2OTU5LCA2Njk2MywgCi0gICAgNjY5NjcsIDY2OTcxLCA2Njk3NSwgNjY5NzksIDY2OTgzLCA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIAotICAgIDY3MDA3LCA2NzAxMSwgNjcwMTUsIDY3MDE5LCA2NzAyMywgNjcwMjcsIDY3MDMxLCA2NzAzNSwgNjcwMzksIDY3MDQzLCAKLSAgICA2NzA0NywgNjcwNTEsIDY3MDU1LCA2NzA1OSwgNjcwNjMsIDY3MDY3LCA2NzA3MSwgNjcwNzUsIDY3MDc5LCA2NzA4MywgCi0gICAgNjcwODcsIDY3MDkxLCA2NzA5NSwgNjcwOTksIDY3MTAzLCA2NzEwNywgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjMsIAotICAgIDY3MTI3LCA2NzEzMSwgNjcxMzUsIDY3MTM5LCA2NzE0MywgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTksIDY3MTYzLCAKLSAgICA2NzE2NywgNjcxNzEsIDY3MTc1LCA2NzE3OSwgNjcxODMsIDY3MTg3LCA2NzE5MSwgNjcxOTUsIDY3MTk5LCA2NzIwMiwgCi0gICAgNjcyMDYsIDY3MjEwLCA2NzIxNCwgNjcyMTgsIDY3MjIyLCA2NzIyNiwgNjcyMzAsIDY3MjMzLCA2NzIzNywgNjcyNDEsIAotICAgIDY3MjQ1LCA2NzI0OSwgNjcyNTMsIDY3MjU3LCA2NzI2MSwgNjcyNjUsIDY3MjY5LCA2NzI3MywgNjcyNzcsIDY3MjgxLCAKLSAgICA2NzI4NSwgNjcyODksIDY3MjkzLCA2NzI5NywgNjczMDEsIDY3MzA1LCA2NzMwOSwgNjczMTMsIDY3MzE3LCA2NzMyMSwgCi0gICAgNjczMjUsIDY3MzI5LCA2NzMzMywgNjczMzcsIDY3MzQxLCA2NzM0NSwgNjczNDksIDY3MzUzLCA2NzM1NywgNjczNjEsIAotICAgIDY3MzY1LCA2NzM2OSwgNjczNzMsIDY3Mzc3LCA2NzM4MSwgNjczODUsIDY3Mzg5LCA2NzM5MywgNjczOTcsIDY3NDAxLCAKLSAgICA2NzQwNSwgNjc0MDksIDY3NDEzLCA2NzQxNywgNjc0MjEsIDY3NDI1LCA2NzQyOSwgNjc0MzMsIDY3NDM3LCA2NzQ0MSwgCi0gICAgNjc0NDUsIDY3NDQ5LCA2NzQ1MywgNjc0NTcsIDY3NDYxLCA2NzQ2NSwgNjc0NjksIDY3NDczLCA2NzQ3NywgNjc0ODEsIAotICAgIDY3NDg1LCA2NzQ4OSwgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCAKLSAgICA2NzUyNSwgNjc1MjksIDY3NTMzLCA2NzUzNywgNjc1NDEsIDY3NTQ1LCA2NzU0OSwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgCi0gICAgNjc1NjUsIDY3NTY5LCA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIAotICAgIDY3NjA1LCA2NzYwOSwgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCAKLSAgICA2NzY0NSwgNjc2NDksIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgCi0gICAgNjc2ODUsIDY3Njg5LCA2NzY5MywgNjc2OTcsIDY3NzAxLCA2NzcwNSwgNjc3MDksIDY3NzEzLCA2NzcxNywgNjc3MjEsIAotICAgIDY3NzI1LCA2NzcyOSwgNjc3MzMsIDY3NzM3LCA2Nzc0MSwgNjc3NDUsIDY3NzQ5LCA2Nzc1MywgNjc3NTcsIDY3NzYxLCAKLSAgICA2Nzc2NSwgNjc3NjksIDY3NzczLCA2Nzc3NywgNjc3ODEsIDY3Nzg1LCA2Nzc4OSwgNjc3OTMsIDY3Nzk3LCA2NzgwMSwgCi0gICAgNjc4MDUsIDY3ODA5LCA2NzgxMywgNjc4MTcsIDY3ODIxLCA2NzgyNSwgNjc4MjksIDY3ODMzLCA2NzgzNywgNjc4NDEsIAotICAgIDY3ODQ1LCA2Nzg0OSwgNjc4NTMsIDY3ODU3LCA2Nzg2MSwgNjc4NjUsIDY3ODY5LCA2Nzg3MywgNjc4NzcsIDY3ODgxLCAKLSAgICA2Nzg4NSwgNjc4ODksIDY3ODkzLCA2Nzg5NywgNjc5MDEsIDY3OTA1LCA2NzkwOSwgNjc5MTMsIDY3OTE3LCA2NzkyMSwgCi0gICAgNjc5MjUsIDY3OTI5LCA2NzkzMywgNjc5MzcsIDY3OTQxLCA2Nzk0NSwgNjc5NDksIDY3OTUzLCA2Nzk1NywgNjc5NjAsIAotICAgIDY3OTY0LCA2Nzk2OCwgNjc5NzIsIDY3OTc2LCA2Nzk4MCwgNjc5ODQsIDY3OTg4LCA2Nzk5MiwgNjc5OTYsIDY4MDAwLCAKLSAgICA2ODAwNCwgNjgwMDgsIDY4MDEyLCA2ODAxNiwgNjgwMjAsIDY4MDI0LCA2ODAyOCwgNjgwMzIsIDY4MDM2LCA2ODA0MCwgCi0gICAgNjgwNDQsIDY4MDQ4LCA2ODA1MiwgNjgwNTYsIDY4MDYwLCA2ODA2NCwgNjgwNjgsIDY4MDcyLCA2ODA3NiwgNjgwODAsIAotICAgIDY4MDg0LCA2ODA4OCwgNjgwOTIsIDY4MDk2LCA2ODEwMCwgNjgxMDQsIDY4MTA4LCA2ODExMiwgNjgxMTYsIDY4MTIwLCAKLSAgICA2ODEyNCwgNjgxMjgsIDY4MTMyLCA2ODEzNiwgNjgxNDAsIDY4MTQ0LCA2ODE0OCwgNjgxNTIsIDY4MTU2LCA2ODE2MCwgCi0gICAgNjgxNjQsIDY4MTY4LCA2ODE3MiwgNjgxNzYsIDY4MTgwLCA2ODE4NCwgNjgxODgsIDY4MTkyLCA2ODE5NiwgNjgyMDAsIAotICAgIDY4MjA0LCA2ODIwOCwgNjgyMTIsIDY4MjE2LCA2ODIyMCwgNjgyMjQsIDY4MjI4LCA2ODIzMiwgNjgyMzYsIDY4MjQwLCAKLSAgICA2ODI0NCwgNjgyNDgsIDY4MjUyLCA2ODI1NiwgNjgyNjAsIDY4MjY0LCA2ODI2OCwgNjgyNzIsIDY4Mjc2LCA2ODI4MCwgCi0gICAgNjgyODQsIDY4Mjg4LCA2ODI5MiwgNjgyOTYsIDY4MzAwLCA2ODMwNCwgNjgzMDgsIDY4MzEyLCA2ODMxNiwgNjgzMjAsIAotICAgIDY4MzI0LCA2ODMyOCwgNjgzMzIsIDY4MzM2LCA2ODM0MCwgNjgzNDQsIDY4MzQ4LCA2ODM1MiwgNjgzNTYsIDY4MzYwLCAKLSAgICA2ODM2NCwgNjgzNjgsIDY4MzcyLCA2ODM3NiwgNjgzODAsIDY4Mzg0LCA2ODM4OCwgNjgzOTIsIDY4Mzk2LCA2ODQwMCwgCi0gICAgNjg0MDQsIDY4NDA4LCA2ODQxMiwgNjg0MTYsIDY4NDIwLCA2ODQyNCwgNjg0MjgsIDY4NDMyLCA2ODQzNiwgNjg0NDAsIAotICAgIDY4NDQ0LCA2ODQ0OCwgNjg0NTIsIDY4NDU2LCA2ODQ2MCwgNjg0NjQsIDY4NDY4LCA2ODQ3MiwgNjg0NzYsIDY4NDgwLCAKLSAgICA2ODQ4NCwgNjg0ODgsIDY4NDkyLCA2ODQ5NiwgNjg1MDAsIDY4NTA0LCA2ODUwOCwgNjg1MTIsIDY4NTE2LCA2ODUyMCwgCi0gICAgNjg1MjQsIDY4NTI4LCA2ODUzMiwgNjg1MzYsIDY4NTQwLCA2ODU0NCwgNjg1NDgsIDY4NTUyLCA2ODU1NiwgNjg1NjAsIAotICAgIDY4NTY0LCA2ODU2OCwgNjg1NzIsIDY4NTc2LCA2ODU4MCwgNjg1ODQsIDY4NTg4LCA2ODU5MiwgNjg1OTYsIDY4NjAwLCAKLSAgICA2ODYwNCwgNjg2MDgsIDY4NjEyLCA2ODYxNiwgNjg2MjAsIDY4NjI0LCA2ODYyOCwgNjg2MzIsIDY4NjM2LCA2ODY0MCwgCi0gICAgNjg2NDQsIDY4NjQ4LCA2ODY1MiwgNjg2NTYsIDY4NjYwLCA2ODY2NCwgNjg2NjgsIDY4NjcyLCA2ODY3NiwgNjg2ODAsIAotICAgIDY4Njg0LCA2ODY4OCwgNjg2OTIsIDY4Njk2LCA2ODcwMCwgNjg3MDQsIDY4NzA4LCA2ODcxMiwgNjg3MTYsIDY4NzIwLCAKLSAgICA2ODcyNCwgNjg3MjgsIDY4NzMyLCA2ODczNiwgNjg3NDAsIDAsIDAsIDAsIDY4NzQ0LCA2ODc0OCwgNjg3NTIsIDY4NzU2LCAKLSAgICA2ODc2MCwgNjg3NjQsIDY4NzY4LCA2ODc3MiwgNjg3NzYsIDY4NzgwLCA2ODc4NCwgNjg3ODgsIDY4NzkyLCA2ODc5NiwgCi0gICAgNjg4MDAsIDY4ODA0LCA2ODgwOCwgNjg4MTIsIDY4ODE2LCA2ODgyMCwgNjg4MjQsIDY4ODI4LCA2ODgzMiwgNjg4MzYsIAotICAgIDY4ODQwLCA2ODg0NCwgNjg4NDgsIDY4ODUyLCA2ODg1NiwgNjg4NjAsIDY4ODY0LCA2ODg2OCwgNjg4NzIsIDY4ODc2LCAKLSAgICA2ODg4MCwgNjg4ODQsIDY4ODg4LCA2ODg5MiwgNjg4OTYsIDY4OTAwLCA2ODkwNCwgNjg5MDgsIDY4OTEyLCA2ODkxNiwgCi0gICAgNjg5MjAsIDY4OTI0LCA2ODkyOCwgNjg5MzIsIDY4OTM2LCA2ODk0MCwgNjg5NDQsIDY4OTQ4LCA2ODk1MiwgNjg5NTYsIAotICAgIDY4OTYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODk2NCwgNjg5NjksIDY4OTczLCA2ODk3OCwgNjg5ODMsIAotICAgIDY4OTg4LCA2ODk5MywgNjg5OTgsIDY5MDAyLCA2OTAwNywgNjkwMTIsIDY5MDE3LCA2OTAyMiwgNjkwMjcsIDY5MDMyLCAKLSAgICA2OTAzNywgNjkwNDEsIDY5MDQ1LCA2OTA1MCwgNjkwNTQsIDY5MDU5LCA2OTA2NCwgNjkwNjksIDY5MDczLCA2OTA3OCwgCi0gICAgNjkwODMsIDY5MDg4LCA2OTA5MywgNjkwOTgsIDY5MTAyLCA2OTEwNywgNjkxMTEsIDY5MTE2LCA2OTEyMCwgNjkxMjUsIAotICAgIDY5MTI5LCA2OTEzMywgNjkxMzcsIDY5MTQyLCA2OTE0NywgNjkxNTIsIDY5MTYwLCA2OTE2OCwgNjkxNzYsIDY5MTg0LCAKLSAgICA2OTE5MSwgNjkxOTksIDY5MjA1LCA2OTIxMywgNjkyMTcsIDY5MjIxLCA2OTIyNSwgNjkyMjksIDY5MjMzLCA2OTIzNywgCi0gICAgNjkyNDEsIDY5MjQ1LCA2OTI0OSwgNjkyNTMsIDY5MjU3LCA2OTI2MSwgNjkyNjUsIDY5MjY5LCA2OTI3MywgNjkyNzcsIAotICAgIDY5MjgxLCA2OTI4NSwgNjkyODksIDY5MjkzLCA2OTI5NywgNjkzMDEsIDY5MzA1LCA2OTMwOSwgNjkzMTMsIDY5MzE3LCAKLSAgICA2OTMyMSwgNjkzMjUsIDY5MzI5LCA2OTMzMywgNjkzMzcsIDY5MzQxLCA2OTM0NSwgNjkzNDksIDY5MzUzLCA2OTM1NywgCi0gICAgNjkzNjAsIDY5MzY0LCA2OTM2OCwgNjkzNzIsIDY5Mzc2LCA2OTM4MCwgNjkzODQsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIAotICAgIDY5NDAwLCA2OTQwNCwgNjk0MDgsIDY5NDEyLCA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCAKLSAgICA2OTQ0MCwgNjk0NDQsIDY5NDQ4LCA2OTQ1MiwgNjk0NTYsIDY5NDYwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgCi0gICAgNjk0ODAsIDY5NDg0LCA2OTQ4OCwgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA3LCA2OTUxMSwgNjk1MTUsIAotICAgIDY5NTE4LCA2OTUyMiwgNjk1MjYsIDY5NTMwLCA2OTUzMywgNjk1MzcsIDY5NTQxLCA2OTU0NSwgNjk1NDksIDY5NTUzLCAKLSAgICA2OTU1NywgNjk1NjEsIDY5NTY1LCA2OTU2OSwgNjk1NzMsIDY5NTc3LCA2OTU4MSwgNjk1ODUsIDY5NTg5LCA2OTU5MiwgCi0gICAgNjk1OTYsIDY5NjAwLCA2OTYwMywgNjk2MDcsIDY5NjExLCA2OTYxNSwgNjk2MTksIDY5NjIzLCA2OTYyNywgNjk2MzAsIAotICAgIDY5NjMzLCA2OTYzNywgNjk2NDEsIDY5NjQ1LCA2OTY0OCwgNjk2NTEsIDY5NjU1LCA2OTY1OSwgNjk2NjMsIDY5NjY3LCAKLSAgICA2OTY3MSwgNjk2NzUsIDY5Njc5LCA2OTY4MywgNjk2ODcsIDY5NjkxLCA2OTY5NSwgNjk2OTksIDY5NzAzLCA2OTcwNywgCi0gICAgNjk3MTEsIDY5NzE1LCA2OTcxOSwgNjk3MjMsIDY5NzI3LCA2OTczMSwgNjk3MzUsIDY5NzM5LCA2OTc0MywgNjk3NDcsIAotICAgIDY5NzUxLCA2OTc1NSwgNjk3NTksIDY5NzYzLCA2OTc2NywgNjk3NzEsIDY5Nzc1LCA2OTc3OSwgNjk3ODMsIDY5Nzg3LCAKLSAgICA2OTc5MSwgNjk3OTUsIDY5Nzk5LCA2OTgwMiwgNjk4MDYsIDY5ODEwLCA2OTgxNCwgNjk4MTgsIDY5ODIyLCA2OTgyNiwgCi0gICAgNjk4MzAsIDY5ODM0LCA2OTgzOCwgNjk4NDIsIDY5ODQ2LCA2OTg1MCwgNjk4NTQsIDY5ODU4LCA2OTg2MiwgNjk4NjYsIAotICAgIDY5ODcwLCA2OTg3NCwgNjk4NzgsIDY5ODgyLCA2OTg4NiwgNjk4OTAsIDY5ODk0LCA2OTg5OCwgNjk5MDIsIDY5OTA2LCAKLSAgICA2OTkxMCwgNjk5MTQsIDY5OTE4LCA2OTkyMiwgNjk5MjYsIDY5OTMwLCA2OTkzNCwgNjk5MzgsIDY5OTQyLCA2OTk0NiwgCi0gICAgNjk5NDksIDY5OTUzLCA2OTk1NywgNjk5NjEsIDY5OTY1LCA2OTk2OSwgNjk5NzMsIDY5OTc3LCA2OTk4MSwgNjk5ODUsIAotICAgIDY5OTg5LCA2OTk5MywgNjk5OTcsIDcwMDAxLCA3MDAwNSwgNzAwMDksIDcwMDEzLCA3MDAxNiwgNzAwMjAsIDcwMDI0LCAKLSAgICA3MDAyOCwgNzAwMzIsIDcwMDM2LCA3MDA0MCwgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgCi0gICAgNzAwNjgsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDMsIAotICAgIDcwMTA3LCA3MDExMSwgNzAxMTUsIDcwMTE5LCA3MDEyMywgNzAxMjcsIDcwMTMxLCA3MDEzNSwgNzAxMzksIDcwMTQzLCAKLSAgICA3MDE0NywgNzAxNTEsIDcwMTU1LCA3MDE1OSwgNzAxNjMsIDcwMTY3LCA3MDE3MSwgNzAxNzUsIDcwMTc5LCA3MDE4MywgCi0gICAgNzAxODcsIDcwMTkxLCA3MDE5NSwgNzAxOTksIDcwMjAzLCA3MDIwNywgNzAyMTEsIDcwMjE1LCA3MDIxOSwgNzAyMjMsIAotICAgIDcwMjI3LCA3MDIzMSwgNzAyMzUsIDcwMjM5LCA3MDI0MywgNzAyNDcsIDcwMjUxLCA3MDI1NSwgNzAyNTksIDcwMjYzLCAKLSAgICA3MDI2NywgNzAyNzEsIDcwMjc1LCA3MDI3OCwgNzAyODMsIDcwMjg3LCA3MDI5MywgNzAyOTgsIDcwMzA0LCA3MDMwOCwgCi0gICAgNzAzMTIsIDcwMzE2LCA3MDMyMCwgNzAzMjQsIDcwMzI4LCA3MDMzMiwgNzAzMzYsIDcwMzQwLCA3MDM0NCwgNzAzNDgsIAotICAgIDcwMzUyLCA3MDM1NiwgNzAzNjAsIDcwMzYzLCA3MDM2NiwgNzAzNjksIDcwMzcyLCA3MDM3NSwgNzAzNzgsIDcwMzgxLCAKLSAgICA3MDM4NCwgNzAzODcsIDcwMzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3MDM5OCwgNzA0MDMsIDcwNDA4LCA3MDQxMywgNzA0MTgsIDcwNDI1LCA3MDQzMiwgNzA0MzcsIDcwNDQyLCAKLSAgICA3MDQ0NywgNzA0NTIsIDcwNDU5LCA3MDQ2NiwgNzA0NzMsIDcwNDgwLCA3MDQ4NywgNzA0OTQsIDcwNTA0LCA3MDUxNCwgCi0gICAgNzA1MjEsIDcwNTI4LCA3MDUzNSwgNzA1NDIsIDcwNTQ4LCA3MDU1NCwgNzA1NjMsIDcwNTcyLCA3MDU3OSwgNzA1ODYsIAotICAgIDcwNTk3LCA3MDYwOCwgNzA2MTMsIDcwNjE4LCA3MDYyNSwgNzA2MzIsIDcwNjM5LCA3MDY0NiwgNzA2NTMsIDcwNjYwLCAKLSAgICA3MDY2NywgNzA2NzQsIDcwNjgwLCA3MDY4NiwgNzA2OTIsIDcwNjk4LCA3MDcwNSwgNzA3MTIsIDcwNzE3LCA3MDcyMSwgCi0gICAgNzA3MjgsIDcwNzM1LCA3MDc0MiwgNzA3NDYsIDcwNzUzLCA3MDc1NywgNzA3NjIsIDcwNzY2LCA3MDc3MiwgNzA3NzcsIAotICAgIDcwNzgzLCA3MDc4OCwgNzA3OTIsIDcwNzk2LCA3MDc5OSwgNzA4MDIsIDcwODA3LCA3MDgxMiwgNzA4MTcsIDcwODIyLCAKLSAgICA3MDgyNywgNzA4MzIsIDcwODM3LCA3MDg0MiwgNzA4NDcsIDcwODUyLCA3MDg2MSwgNzA4NzAsIDcwODc1LCA3MDg4MCwgCi0gICAgNzA4ODUsIDcwODkwLCA3MDg5NSwgNzA5MDAsIDcwOTA1LCA3MDkxMCwgNzA5MTUsIDcwOTIwLCA3MDkyNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzA5MzAsIDcwOTM2LCA3MDkzOSwgNzA5NDIsIDcwOTQ1LCA3MDk0OSwgNzA5NTMsIDcwOTU3LCAKLSAgICA3MDk2MSwgNzA5NjQsIDcwOTY4LCA3MDk3MSwgNzA5NzUsIDcwOTc4LCA3MDk4MiwgNzA5ODYsIDcwOTkwLCA3MDk5NCwgCi0gICAgNzA5OTgsIDcxMDAyLCA3MTAwNiwgNzEwMDksIDcxMDEzLCA3MTAxNywgNzEwMjEsIDcxMDI1LCA3MTAyOSwgNzEwMzMsIAotICAgIDcxMDM3LCA3MTA0MSwgNzEwNDUsIDcxMDQ5LCA3MTA1MywgNzEwNTcsIDcxMDYxLCA3MTA2NSwgNzEwNjgsIDcxMDcyLCAKLSAgICA3MTA3NiwgNzEwODAsIDcxMDg0LCA3MTA4OCwgNzEwOTIsIDcxMDk2LCA3MTEwMCwgNzExMDQsIDcxMTA4LCA3MTExMiwgCi0gICAgNzExMTYsIDcxMTIwLCA3MTEyNCwgNzExMjgsIDcxMTMyLCA3MTEzNiwgNzExNDAsIDcxMTQ0LCA3MTE0OCwgNzExNTIsIAotICAgIDcxMTU2LCA3MTE2MCwgNzExNjQsIDcxMTY3LCA3MTE3MSwgNzExNzUsIDcxMTc5LCA3MTE4MywgNzExODcsIDcxMTkxLCAKLSAgICA3MTE5NSwgNzExOTgsIDcxMjAyLCA3MTIwNiwgNzEyMTAsIDcxMjE0LCA3MTIxOCwgNzEyMjIsIDcxMjI2LCA3MTIzMCwgCi0gICAgNzEyMzQsIDcxMjM4LCA3MTI0MiwgNzEyNDYsIDcxMjUxLCA3MTI1NiwgNzEyNTksIDcxMjY0LCA3MTI2NywgNzEyNzAsIAotICAgIDcxMjczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTI3NywgNzEyODYsIDcxMjk1LCA3MTMwNCwgNzEzMTMsIDcxMzIyLCAKLSAgICA3MTMzMSwgNzEzNDAsIDcxMzQ5LCA3MTM1NywgNzEzNjQsIDcxMzcyLCA3MTM3OSwgNzEzODcsIDcxMzk3LCA3MTQwNiwgCi0gICAgNzE0MTYsIDcxNDI1LCA3MTQzNSwgNzE0NDMsIDcxNDUwLCA3MTQ1OCwgNzE0NjUsIDcxNDczLCA3MTQ3OCwgNzE0ODMsIAotICAgIDcxNDg4LCA3MTQ5NywgNzE1MDMsIDcxNTA5LCA3MTUxNiwgNzE1MjUsIDcxNTMzLCA3MTU0MSwgNzE1NDksIDcxNTU2LCAKLSAgICA3MTU2MywgNzE1NzAsIDcxNTc3LCA3MTU4MiwgNzE1ODcsIDcxNTkyLCA3MTU5NywgNzE2MDIsIDcxNjA3LCA3MTYxMiwgCi0gICAgNzE2MTcsIDcxNjI1LCA3MTYzMywgNzE2MzksIDcxNjQ1LCA3MTY1MCwgNzE2NTUsIDcxNjYwLCA3MTY2NSwgNzE2NzAsIAotICAgIDcxNjc1LCA3MTY4MCwgNzE2ODUsIDcxNjkzLCA3MTcwMSwgNzE3MDYsIDcxNzExLCA3MTcyMSwgNzE3MzEsIDcxNzM4LCAKLSAgICA3MTc0NSwgNzE3NTQsIDcxNzYzLCA3MTc3NSwgNzE3ODcsIDcxNzkzLCA3MTc5OSwgNzE4MDcsIDcxODE1LCA3MTgyNSwgCi0gICAgNzE4MzUsIDcxODQyLCA3MTg0OSwgNzE4NTQsIDcxODU5LCA3MTg3MSwgNzE4ODMsIDcxODkxLCA3MTg5OSwgNzE5MDksIAotICAgIDcxOTE5LCA3MTkzMSwgNzE5NDMsIDcxOTUyLCA3MTk2MSwgNzE5NjgsIDcxOTc1LCA3MTk4MiwgNzE5ODksIDcxOTk4LCAKLSAgICA3MjAwNywgNzIwMTIsIDcyMDE3LCA3MjAyNCwgNzIwMzEsIDcyMDM4LCA3MjA0NSwgNzIwNTcsIDcyMDY5LCA3MjA3NCwgCi0gICAgNzIwNzksIDcyMDg0LCA3MjA4OSwgNzIwOTQsIDcyMDk5LCA3MjEwNCwgNzIxMDksIDcyMTEzLCA3MjExOCwgNzIxMjMsIAotICAgIDcyMTI4LCA3MjEzMywgNzIxMzgsIDcyMTQ0LCA3MjE0OSwgNzIxNTQsIDcyMTYxLCA3MjE2OCwgNzIxNzUsIDcyMTgyLCAKLSAgICA3MjE4OSwgNzIxOTgsIDcyMjA3LCA3MjIxMywgNzIyMTksIDcyMjI1LCA3MjIzMSwgNzIyMzgsIDcyMjQ1LCA3MjI1MiwgCi0gICAgNzIyNTksIDcyMjY2LCA3MjI3MCwgNzIyNzcsIDcyMjgyLCA3MjI4NywgNzIyOTQsIDAsIDcyMzA3LCA3MjMxNSwgNzIzMjMsIAotICAgIDcyMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjMzNywgNzIzNDYsIDcyMzU1LCA3MjM2NCwgCi0gICAgNzIzNzMsIDcyMzgyLCA3MjM5MSwgNzI0MDAsIDcyNDA5LCA3MjQxOCwgNzI0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDYzNzA2LCA2MzcxNSwgNjM3MjQsIDYzNzM1LCA2Mzc0MiwgNjM3NDcsIDYzNzUyLCA2Mzc1OSwgNjM3NjYsIAorICAgIDYzNzcyLCA2Mzc3NywgNjM3ODIsIDYzNzg3LCA2Mzc5MiwgNjM3OTksIDYzODA0LCA2MzgwOSwgNjM4MTQsIDYzODI1LCAKKyAgICA2MzgzMCwgNjM4MzUsIDYzODQyLCA2Mzg0NywgNjM4NTQsIDYzODU5LCA2Mzg2NCwgNjM4NzEsIDYzODc4LCA2Mzg4NSwgCisgICAgNjM4OTQsIDYzOTAzLCA2MzkwOCwgNjM5MTMsIDYzOTE4LCA2MzkyNSwgNjM5MzAsIDYzOTQwLCA2Mzk0NywgNjM5NTIsIAorICAgIDYzOTU3LCA2Mzk2MiwgNjM5NjcsIDYzOTcyLCA2Mzk3NywgNjM5ODYsIDYzOTkzLCA2NDAwMCwgNjQwMDUsIDY0MDEyLCAKKyAgICA2NDAxNywgNjQwMjQsIDY0MDMzLCA2NDA0NCwgNjQwNDksIDY0MDU4LCA2NDA2MywgNjQwNzAsIDY0MDc5LCA2NDA4OCwgCisgICAgNjQwOTMsIDY0MDk4LCA2NDEwNSwgNjQxMTEsIDY0MTE4LCA2NDEyNSwgNjQxMjksIDY0MTMzLCA2NDEzNiwgNjQxNDAsIAorICAgIDY0MTQ0LCA2NDE0OCwgNjQxNTIsIDY0MTU2LCA2NDE2MCwgNjQxNjQsIDY0MTY3LCA2NDE3MSwgNjQxNzUsIDY0MTc5LCAKKyAgICA2NDE4MywgNjQxODcsIDY0MTkxLCA2NDE5NCwgNjQxOTgsIDY0MjAyLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxNywgCisgICAgNjQyMjEsIDY0MjI1LCA2NDIyOSwgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ5LCA2NDI1MywgNjQyNTcsIAorICAgIDY0MjYxLCA2NDI2NSwgNjQyNjksIDY0MjczLCA2NDI3NywgNjQyODEsIDY0Mjg1LCA2NDI4OSwgNjQyOTMsIDY0Mjk3LCAKKyAgICA2NDMwMSwgNjQzMDUsIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIDY0MzMzLCA2NDMzNywgCisgICAgNjQzNDEsIDY0MzQ1LCA2NDM0OSwgNjQzNTMsIDY0MzU3LCA2NDM2MSwgNjQzNjUsIDY0MzY5LCA2NDM3MywgNjQzNzcsIAorICAgIDY0MzgxLCA2NDM4NCwgNjQzODgsIDY0MzkyLCA2NDM5NiwgNjQ0MDAsIDY0NDA0LCA2NDQwOCwgNjQ0MTIsIDY0NDE2LCAKKyAgICA2NDQyMCwgNjQ0MjQsIDY0NDI4LCA2NDQzMiwgNjQ0MzYsIDY0NDQwLCA2NDQ0NCwgNjQ0NDgsIDY0NDUyLCA2NDQ1NiwgCisgICAgNjQ0NjAsIDY0NDY0LCA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCA2NDQ5MiwgNjQ0OTYsIAorICAgIDY0NTAwLCA2NDUwNCwgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgNjQ1MzIsIDY0NTM2LCAKKyAgICA2NDU0MCwgNjQ1NDQsIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIDY0NTcyLCA2NDU3NiwgCisgICAgNjQ1ODAsIDY0NTg0LCA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA4LCA2NDYxMiwgNjQ2MTYsIAorICAgIDY0NjIwLCA2NDYyNCwgNjQ2MjgsIDY0NjMyLCA2NDYzNiwgNjQ2NDAsIDY0NjQ0LCA2NDY0OCwgNjQ2NTIsIDY0NjU2LCAKKyAgICA2NDY2MCwgNjQ2NjQsIDY0NjY4LCA2NDY3MiwgNjQ2NzYsIDY0NjgwLCA2NDY4NCwgNjQ2ODgsIDY0NjkyLCA2NDY5NiwgCisgICAgNjQ3MDAsIDY0NzA0LCA2NDcwOCwgNjQ3MTIsIDY0NzE2LCA2NDcyMCwgNjQ3MjQsIDY0NzI4LCA2NDczMiwgNjQ3MzYsIAorICAgIDY0NzQwLCA2NDc0NCwgNjQ3NDgsIDY0NzUyLCA2NDc1NiwgNjQ3NjAsIDY0NzY0LCA2NDc2OCwgNjQ3NzIsIDY0Nzc2LCAKKyAgICA2NDc4MCwgNjQ3ODQsIDY0Nzg4LCA2NDc5MiwgNjQ3OTYsIDY0ODAwLCA2NDgwNCwgNjQ4MDgsIDY0ODEyLCA2NDgxNiwgCisgICAgNjQ4MjAsIDY0ODI0LCA2NDgyOCwgNjQ4MzIsIDY0ODM2LCA2NDg0MCwgNjQ4NDQsIDY0ODQ4LCA2NDg1MiwgNjQ4NTUsIAorICAgIDY0ODU5LCA2NDg2MywgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgNjQ4OTEsIDY0ODk1LCAKKyAgICA2NDg5OSwgNjQ5MDMsIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIDY0OTMxLCA2NDkzNSwgCisgICAgNjQ5MzksIDY0OTQzLCA2NDk0NywgNjQ5NTEsIDY0OTU1LCA2NDk1OSwgNjQ5NjMsIDY0OTY3LCA2NDk3MSwgNjQ5NzUsIAorICAgIDY0OTc5LCA2NDk4MywgNjQ5ODcsIDY0OTkxLCA2NDk5NSwgNjQ5OTksIDY1MDAzLCA2NTAwNywgNjUwMTEsIDY1MDE1LCAKKyAgICA2NTAxOSwgNjUwMjMsIDY1MDI3LCA2NTAzMSwgNjUwMzUsIDY1MDM5LCA2NTA0MywgNjUwNDcsIDY1MDUxLCA2NTA1NSwgCisgICAgNjUwNTksIDY1MDYzLCA2NTA2NywgNjUwNzEsIDY1MDc1LCA2NTA3OSwgNjUwODMsIDY1MDg3LCA2NTA5MSwgNjUwOTUsIAorICAgIDY1MDk5LCA2NTEwMywgNjUxMDcsIDY1MTExLCA2NTExNSwgNjUxMTksIDY1MTIzLCA2NTEyNywgNjUxMzEsIDY1MTM1LCAKKyAgICA2NTEzOSwgNjUxNDMsIDY1MTQ3LCA2NTE1MSwgNjUxNTUsIDY1MTU5LCA2NTE2MywgNjUxNjcsIDY1MTcxLCA2NTE3NSwgCisgICAgNjUxNzksIDY1MTgzLCA2NTE4NywgNjUxOTEsIDY1MTk1LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCA2NTIxMSwgNjUyMTUsIAorICAgIDY1MjE5LCA2NTIyMywgNjUyMjcsIDY1MjMxLCA2NTIzNSwgNjUyMzksIDY1MjQzLCA2NTI0NywgNjUyNTEsIDY1MjU1LCAKKyAgICA2NTI1OSwgNjUyNjMsIDY1MjY3LCA2NTI3MSwgNjUyNzUsIDY1Mjc5LCA2NTI4MywgNjUyODcsIDY1MjkxLCA2NTI5NSwgCisgICAgNjUyOTksIDY1MzAzLCA2NTMwNywgNjUzMTEsIDY1MzE1LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCA2NTMzMCwgNjUzMzQsIAorICAgIDY1MzM4LCA2NTM0MiwgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgNjUzNzAsIDY1Mzc0LCAKKyAgICA2NTM3OCwgNjUzODIsIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIDY1NDEwLCA2NTQxNCwgCisgICAgNjU0MTgsIDY1NDIyLCA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCA2NTQ1MCwgNjU0NTQsIAorICAgIDY1NDU4LCA2NTQ2MiwgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgNjU0OTAsIDY1NDk0LCAKKyAgICA2NTQ5OCwgNjU1MDIsIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIDY1NTMwLCA2NTUzNCwgCisgICAgNjU1MzgsIDY1NTQyLCA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCA2NTU3MCwgNjU1NzQsIAorICAgIDY1NTc4LCA2NTU4MiwgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgNjU2MTAsIDY1NjE0LCAKKyAgICA2NTYxOCwgNjU2MjIsIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIDY1NjUwLCA2NTY1NCwgCisgICAgNjU2NTgsIDY1NjYyLCA2NTY2NiwgNjU2NzAsIDY1Njc0LCA2NTY3NywgNjU2ODEsIDY1Njg1LCA2NTY4OSwgNjU2OTMsIAorICAgIDY1Njk3LCA2NTcwMSwgNjU3MDUsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgNjU3MjksIDY1NzMzLCAKKyAgICA2NTczNywgNjU3NDEsIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIDY1NzY5LCA2NTc3MywgCisgICAgNjU3NzcsIDY1NzgxLCA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCA2NTgwOSwgNjU4MTMsIAorICAgIDY1ODE3LCA2NTgyMSwgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgNjU4NDksIDY1ODUzLCAKKyAgICA2NTg1NywgNjU4NjEsIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIDY1ODg5LCA2NTg5MywgCisgICAgNjU4OTcsIDY1OTAxLCA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCA2NTkyOSwgNjU5MzMsIAorICAgIDY1OTM3LCA2NTk0MSwgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgNjU5NjksIDY1OTczLCAKKyAgICA2NTk3NywgNjU5ODEsIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIDY2MDA5LCA2NjAxMywgCisgICAgNjYwMTcsIDY2MDIxLCA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCA2NjA0OSwgNjYwNTMsIAorICAgIDY2MDU3LCA2NjA2MSwgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgNjYwODksIDY2MDkzLCAKKyAgICA2NjA5NywgNjYxMDEsIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIDY2MTI5LCA2NjEzMywgCisgICAgNjYxMzcsIDY2MTQxLCA2NjE0NSwgNjYxNDksIDY2MTUzLCA2NjE1NywgNjYxNjEsIDY2MTY1LCA2NjE2OSwgNjYxNzIsIAorICAgIDY2MTc2LCA2NjE4MCwgNjYxODQsIDY2MTg4LCA2NjE5MiwgNjYxOTYsIDY2MjAwLCA2NjIwNCwgNjYyMDgsIDY2MjEyLCAKKyAgICA2NjIxNiwgNjYyMjAsIDY2MjI0LCA2NjIyOCwgNjYyMzIsIDY2MjM2LCA2NjI0MCwgNjYyNDQsIDY2MjQ4LCA2NjI1MiwgCisgICAgNjYyNTYsIDY2MjYwLCA2NjI2NCwgNjYyNjgsIDY2MjcyLCA2NjI3NiwgNjYyODAsIDY2Mjg0LCA2NjI4OCwgNjYyOTIsIAorICAgIDY2Mjk2LCA2NjMwMCwgNjYzMDQsIDY2MzA4LCA2NjMxMiwgNjYzMTYsIDY2MzIwLCA2NjMyNCwgNjYzMjgsIDY2MzMyLCAKKyAgICA2NjMzNiwgNjYzNDAsIDY2MzQ0LCA2NjM0OCwgNjYzNTIsIDY2MzU2LCA2NjM2MCwgNjYzNjQsIDY2MzY4LCA2NjM3MiwgCisgICAgNjYzNzYsIDY2MzgwLCA2NjM4NCwgNjYzODgsIDY2MzkyLCA2NjM5NiwgNjY0MDAsIDY2NDA0LCA2NjQwOCwgNjY0MTIsIAorICAgIDY2NDE2LCA2NjQyMCwgNjY0MjQsIDY2NDI4LCA2NjQzMiwgNjY0MzYsIDY2NDQwLCA2NjQ0NCwgNjY0NDgsIDY2NDUyLCAKKyAgICA2NjQ1NiwgNjY0NjAsIDY2NDY0LCA2NjQ2OCwgNjY0NzIsIDY2NDc2LCA2NjQ4MCwgNjY0ODQsIDY2NDg4LCA2NjQ5MiwgCisgICAgNjY0OTYsIDY2NTAwLCA2NjUwNCwgNjY1MDgsIDY2NTEyLCA2NjUxNiwgNjY1MjAsIDY2NTI0LCA2NjUyOCwgNjY1MzIsIAorICAgIDY2NTM2LCA2NjU0MCwgNjY1NDQsIDY2NTQ4LCA2NjU1MiwgNjY1NTYsIDY2NTYwLCA2NjU2NCwgNjY1NjgsIDY2NTcyLCAKKyAgICA2NjU3NiwgNjY1ODAsIDY2NTg0LCA2NjU4OCwgNjY1OTIsIDY2NTk2LCA2NjYwMCwgNjY2MDQsIDY2NjA4LCA2NjYxMiwgCisgICAgNjY2MTYsIDY2NjIwLCA2NjYyNCwgNjY2MjcsIDY2NjMxLCA2NjYzNSwgNjY2MzksIDY2NjQzLCA2NjY0NywgNjY2NTEsIAorICAgIDY2NjU1LCA2NjY1OSwgNjY2NjMsIDY2NjY3LCA2NjY3MSwgNjY2NzUsIDY2Njc5LCA2NjY4MywgNjY2ODcsIDY2NjkxLCAKKyAgICA2NjY5NSwgNjY2OTksIDY2NzAzLCA2NjcwNywgNjY3MTEsIDY2NzE1LCA2NjcxOSwgNjY3MjMsIDY2NzI3LCA2NjczMSwgCisgICAgNjY3MzUsIDY2NzM5LCA2Njc0MywgNjY3NDcsIDY2NzUxLCA2Njc1NSwgNjY3NTksIDY2NzYzLCA2Njc2NywgNjY3NzEsIAorICAgIDY2Nzc1LCA2Njc3OSwgNjY3ODMsIDY2Nzg3LCA2Njc5MSwgNjY3OTUsIDY2Nzk5LCA2NjgwMywgNjY4MDcsIDY2ODExLCAKKyAgICA2NjgxNSwgNjY4MTksIDY2ODIzLCA2NjgyNywgNjY4MzEsIDY2ODM1LCA2NjgzOSwgNjY4NDMsIDY2ODQ3LCA2Njg1MSwgCisgICAgNjY4NTUsIDY2ODU5LCA2Njg2MywgNjY4NjcsIDY2ODcxLCA2Njg3NSwgNjY4NzksIDY2ODgzLCA2Njg4NywgNjY4OTEsIAorICAgIDY2ODk1LCA2Njg5OSwgNjY5MDMsIDY2OTA3LCA2NjkxMSwgNjY5MTUsIDY2OTE5LCA2NjkyMywgNjY5MjcsIDY2OTMxLCAKKyAgICA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTEsIDY2OTU1LCA2Njk1OSwgNjY5NjMsIDY2OTY3LCA2Njk3MSwgCisgICAgNjY5NzUsIDY2OTc5LCA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCA2NzAwNywgNjcwMTEsIAorICAgIDY3MDE1LCA2NzAxOSwgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgNjcwNDcsIDY3MDUxLCAKKyAgICA2NzA1NSwgNjcwNTksIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIDY3MDg3LCA2NzA5MSwgCisgICAgNjcwOTUsIDY3MDk5LCA2NzEwMywgNjcxMDcsIDY3MTExLCA2NzExNSwgNjcxMTksIDY3MTIzLCA2NzEyNywgNjcxMzEsIAorICAgIDY3MTM1LCA2NzEzOSwgNjcxNDMsIDY3MTQ3LCA2NzE1MSwgNjcxNTUsIDY3MTU5LCA2NzE2MywgNjcxNjcsIDY3MTcxLCAKKyAgICA2NzE3NSwgNjcxNzksIDY3MTgzLCA2NzE4NywgNjcxOTEsIDY3MTk1LCA2NzE5OSwgNjcyMDMsIDY3MjA3LCA2NzIxMSwgCisgICAgNjcyMTUsIDY3MjE5LCA2NzIyMywgNjcyMjcsIDY3MjMwLCA2NzIzNCwgNjcyMzgsIDY3MjQyLCA2NzI0NiwgNjcyNTAsIAorICAgIDY3MjU0LCA2NzI1OCwgNjcyNjEsIDY3MjY1LCA2NzI2OSwgNjcyNzMsIDY3Mjc3LCA2NzI4MSwgNjcyODUsIDY3Mjg5LCAKKyAgICA2NzI5MywgNjcyOTcsIDY3MzAxLCA2NzMwNSwgNjczMDksIDY3MzEzLCA2NzMxNywgNjczMjEsIDY3MzI1LCA2NzMyOSwgCisgICAgNjczMzMsIDY3MzM3LCA2NzM0MSwgNjczNDUsIDY3MzQ5LCA2NzM1MywgNjczNTcsIDY3MzYxLCA2NzM2NSwgNjczNjksIAorICAgIDY3MzczLCA2NzM3NywgNjczODEsIDY3Mzg1LCA2NzM4OSwgNjczOTMsIDY3Mzk3LCA2NzQwMSwgNjc0MDUsIDY3NDA5LCAKKyAgICA2NzQxMywgNjc0MTcsIDY3NDIxLCA2NzQyNSwgNjc0MjksIDY3NDMzLCA2NzQzNywgNjc0NDEsIDY3NDQ1LCA2NzQ0OSwgCisgICAgNjc0NTMsIDY3NDU3LCA2NzQ2MSwgNjc0NjUsIDY3NDY5LCA2NzQ3MywgNjc0NzcsIDY3NDgxLCA2NzQ4NSwgNjc0ODksIAorICAgIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgNjc1MjUsIDY3NTI5LCAKKyAgICA2NzUzMywgNjc1MzcsIDY3NTQxLCA2NzU0NSwgNjc1NDksIDY3NTUzLCA2NzU1NywgNjc1NjEsIDY3NTY1LCA2NzU2OSwgCisgICAgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCA2NzYwNSwgNjc2MDksIAorICAgIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgNjc2NDUsIDY3NjQ5LCAKKyAgICA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIDY3Njg1LCA2NzY4OSwgCisgICAgNjc2OTMsIDY3Njk3LCA2NzcwMSwgNjc3MDUsIDY3NzA5LCA2NzcxMywgNjc3MTcsIDY3NzIxLCA2NzcyNSwgNjc3MjksIAorICAgIDY3NzMzLCA2NzczNywgNjc3NDEsIDY3NzQ1LCA2Nzc0OSwgNjc3NTMsIDY3NzU3LCA2Nzc2MSwgNjc3NjUsIDY3NzY5LCAKKyAgICA2Nzc3MywgNjc3NzcsIDY3NzgxLCA2Nzc4NSwgNjc3ODksIDY3NzkzLCA2Nzc5NywgNjc4MDEsIDY3ODA1LCA2NzgwOSwgCisgICAgNjc4MTMsIDY3ODE3LCA2NzgyMSwgNjc4MjUsIDY3ODI5LCA2NzgzMywgNjc4MzcsIDY3ODQxLCA2Nzg0NSwgNjc4NDksIAorICAgIDY3ODUzLCA2Nzg1NywgNjc4NjEsIDY3ODY1LCA2Nzg2OSwgNjc4NzMsIDY3ODc3LCA2Nzg4MSwgNjc4ODUsIDY3ODg5LCAKKyAgICA2Nzg5MywgNjc4OTcsIDY3OTAxLCA2NzkwNSwgNjc5MDksIDY3OTEzLCA2NzkxNywgNjc5MjEsIDY3OTI1LCA2NzkyOSwgCisgICAgNjc5MzMsIDY3OTM3LCA2Nzk0MSwgNjc5NDUsIDY3OTQ5LCA2Nzk1MywgNjc5NTcsIDY3OTYxLCA2Nzk2NSwgNjc5NjksIAorICAgIDY3OTczLCA2Nzk3NywgNjc5ODEsIDY3OTg1LCA2Nzk4OCwgNjc5OTIsIDY3OTk2LCA2ODAwMCwgNjgwMDQsIDY4MDA4LCAKKyAgICA2ODAxMiwgNjgwMTYsIDY4MDIwLCA2ODAyNCwgNjgwMjgsIDY4MDMyLCA2ODAzNiwgNjgwNDAsIDY4MDQ0LCA2ODA0OCwgCisgICAgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjQsIDY4MDY4LCA2ODA3MiwgNjgwNzYsIDY4MDgwLCA2ODA4NCwgNjgwODgsIAorICAgIDY4MDkyLCA2ODA5NiwgNjgxMDAsIDY4MTA0LCA2ODEwOCwgNjgxMTIsIDY4MTE2LCA2ODEyMCwgNjgxMjQsIDY4MTI4LCAKKyAgICA2ODEzMiwgNjgxMzYsIDY4MTQwLCA2ODE0NCwgNjgxNDgsIDY4MTUyLCA2ODE1NiwgNjgxNjAsIDY4MTY0LCA2ODE2OCwgCisgICAgNjgxNzIsIDY4MTc2LCA2ODE4MCwgNjgxODQsIDY4MTg4LCA2ODE5MiwgNjgxOTYsIDY4MjAwLCA2ODIwNCwgNjgyMDgsIAorICAgIDY4MjEyLCA2ODIxNiwgNjgyMjAsIDY4MjI0LCA2ODIyOCwgNjgyMzIsIDY4MjM2LCA2ODI0MCwgNjgyNDQsIDY4MjQ4LCAKKyAgICA2ODI1MiwgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIDY4Mjg0LCA2ODI4OCwgCisgICAgNjgyOTIsIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCA2ODMyNCwgNjgzMjgsIAorICAgIDY4MzMyLCA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjQsIDY4MzY4LCAKKyAgICA2ODM3MiwgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIDY4NDA0LCA2ODQwOCwgCisgICAgNjg0MTIsIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCA2ODQ0NCwgNjg0NDgsIAorICAgIDY4NDUyLCA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgNjg0ODQsIDY4NDg4LCAKKyAgICA2ODQ5MiwgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIDY4NTI0LCA2ODUyOCwgCisgICAgNjg1MzIsIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCA2ODU2NCwgNjg1NjgsIAorICAgIDY4NTcyLCA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgNjg2MDQsIDY4NjA4LCAKKyAgICA2ODYxMiwgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIDY4NjQ0LCA2ODY0OCwgCisgICAgNjg2NTIsIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCA2ODY4NCwgNjg2ODgsIAorICAgIDY4NjkyLCA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgNjg3MjQsIDY4NzI4LCAKKyAgICA2ODczMiwgNjg3MzYsIDY4NzQwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgNjg3NjAsIDY4NzY0LCA2ODc2OCwgMCwgCisgICAgMCwgMCwgNjg3NzIsIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgCisgICAgNjg4MDgsIDY4ODEyLCA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCA2ODg0MCwgNjg4NDQsIAorICAgIDY4ODQ4LCA2ODg1MiwgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgNjg4ODAsIDY4ODg0LCAKKyAgICA2ODg4OCwgNjg4OTIsIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIDY4OTIwLCA2ODkyNCwgCisgICAgNjg5MjgsIDY4OTMyLCA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCA2ODk2MCwgNjg5NjQsIAorICAgIDY4OTY4LCA2ODk3MiwgNjg5NzYsIDY4OTgwLCA2ODk4NCwgNjg5ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY4OTkyLCA2ODk5NywgNjkwMDEsIDY5MDA2LCA2OTAxMSwgNjkwMTYsIDY5MDIxLCA2OTAyNiwgNjkwMzAsIDY5MDM1LCAKKyAgICA2OTA0MCwgNjkwNDUsIDY5MDUwLCA2OTA1NSwgNjkwNjAsIDY5MDY1LCA2OTA2OSwgNjkwNzMsIDY5MDc4LCA2OTA4MiwgCisgICAgNjkwODcsIDY5MDkyLCA2OTA5NywgNjkxMDEsIDY5MTA2LCA2OTExMSwgNjkxMTYsIDY5MTIxLCA2OTEyNiwgNjkxMzAsIAorICAgIDY5MTM1LCA2OTEzOSwgNjkxNDQsIDY5MTQ4LCA2OTE1MywgNjkxNTcsIDY5MTYxLCA2OTE2NSwgNjkxNzAsIDY5MTc1LCAKKyAgICA2OTE4MCwgNjkxODgsIDY5MTk2LCA2OTIwNCwgNjkyMTIsIDY5MjE5LCA2OTIyNywgNjkyMzMsIDY5MjQxLCA2OTI0NSwgCisgICAgNjkyNDksIDY5MjUzLCA2OTI1NywgNjkyNjEsIDY5MjY1LCA2OTI2OSwgNjkyNzMsIDY5Mjc3LCA2OTI4MSwgNjkyODUsIAorICAgIDY5Mjg5LCA2OTI5MywgNjkyOTcsIDY5MzAxLCA2OTMwNSwgNjkzMDksIDY5MzEzLCA2OTMxNywgNjkzMjEsIDY5MzI1LCAKKyAgICA2OTMyOSwgNjkzMzMsIDY5MzM3LCA2OTM0MSwgNjkzNDUsIDY5MzQ5LCA2OTM1MywgNjkzNTcsIDY5MzYxLCA2OTM2NSwgCisgICAgNjkzNjksIDY5MzczLCA2OTM3NywgNjkzODEsIDY5Mzg1LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCA2OTQwMCwgNjk0MDQsIAorICAgIDY5NDA4LCA2OTQxMiwgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgNjk0NDAsIDY5NDQ0LCAKKyAgICA2OTQ0OCwgNjk0NTIsIDY5NDU2LCA2OTQ2MCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIDY5NDgwLCA2OTQ4NCwgCisgICAgNjk0ODgsIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwOCwgNjk1MTIsIDY5NTE2LCA2OTUyMCwgNjk1MjQsIAorICAgIDY5NTI4LCA2OTUzMiwgNjk1MzUsIDY5NTM5LCA2OTU0MywgNjk1NDYsIDY5NTUwLCA2OTU1NCwgNjk1NTgsIDY5NTYxLCAKKyAgICA2OTU2NSwgNjk1NjksIDY5NTczLCA2OTU3NywgNjk1ODEsIDY5NTg1LCA2OTU4OSwgNjk1OTMsIDY5NTk3LCA2OTYwMSwgCisgICAgNjk2MDUsIDY5NjA5LCA2OTYxMywgNjk2MTcsIDY5NjIwLCA2OTYyNCwgNjk2MjgsIDY5NjMxLCA2OTYzNSwgNjk2MzksIAorICAgIDY5NjQzLCA2OTY0NywgNjk2NTEsIDY5NjU1LCA2OTY1OCwgNjk2NjEsIDY5NjY1LCA2OTY2OSwgNjk2NzMsIDY5Njc2LCAKKyAgICA2OTY3OSwgNjk2ODMsIDY5Njg3LCA2OTY5MSwgNjk2OTUsIDY5Njk5LCA2OTcwMywgNjk3MDcsIDY5NzExLCA2OTcxNSwgCisgICAgNjk3MTksIDY5NzIzLCA2OTcyNywgNjk3MzEsIDY5NzM1LCA2OTczOSwgNjk3NDMsIDY5NzQ3LCA2OTc1MSwgNjk3NTUsIAorICAgIDY5NzU5LCA2OTc2MywgNjk3NjcsIDY5NzcxLCA2OTc3NSwgNjk3NzksIDY5NzgzLCA2OTc4NywgNjk3OTEsIDY5Nzk1LCAKKyAgICA2OTc5OSwgNjk4MDMsIDY5ODA3LCA2OTgxMSwgNjk4MTUsIDY5ODE5LCA2OTgyMywgNjk4MjcsIDY5ODMwLCA2OTgzNCwgCisgICAgNjk4MzgsIDY5ODQyLCA2OTg0NiwgNjk4NTAsIDY5ODU0LCA2OTg1OCwgNjk4NjIsIDY5ODY2LCA2OTg3MCwgNjk4NzQsIAorICAgIDY5ODc4LCA2OTg4MiwgNjk4ODYsIDY5ODkwLCA2OTg5NCwgNjk4OTgsIDY5OTAyLCA2OTkwNiwgNjk5MTAsIDY5OTE0LCAKKyAgICA2OTkxOCwgNjk5MjIsIDY5OTI2LCA2OTkzMCwgNjk5MzQsIDY5OTM4LCA2OTk0MiwgNjk5NDYsIDY5OTUwLCA2OTk1NCwgCisgICAgNjk5NTgsIDY5OTYyLCA2OTk2NiwgNjk5NzAsIDY5OTc0LCA2OTk3NywgNjk5ODEsIDY5OTg1LCA2OTk4OSwgNjk5OTMsIAorICAgIDY5OTk3LCA3MDAwMSwgNzAwMDUsIDcwMDA5LCA3MDAxMywgNzAwMTcsIDcwMDIxLCA3MDAyNSwgNzAwMjksIDcwMDMzLCAKKyAgICA3MDAzNywgNzAwNDEsIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIDcwMDY4LCA3MDA3MiwgCisgICAgNzAwNzYsIDcwMDgwLCA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTA0LCA3MDEwOCwgNzAxMTIsIAorICAgIDcwMTE2LCA3MDEyMCwgNzAxMjQsIDcwMTI4LCA3MDEzMSwgNzAxMzUsIDcwMTM5LCA3MDE0MywgNzAxNDcsIDcwMTUxLCAKKyAgICA3MDE1NSwgNzAxNTksIDcwMTYzLCA3MDE2NywgNzAxNzEsIDcwMTc1LCA3MDE3OSwgNzAxODMsIDcwMTg3LCA3MDE5MSwgCisgICAgNzAxOTUsIDcwMTk5LCA3MDIwMywgNzAyMDcsIDcwMjExLCA3MDIxNSwgNzAyMTksIDcwMjIzLCA3MDIyNywgNzAyMzEsIAorICAgIDcwMjM1LCA3MDIzOSwgNzAyNDMsIDcwMjQ3LCA3MDI1MSwgNzAyNTUsIDcwMjU5LCA3MDI2MywgNzAyNjcsIDcwMjcxLCAKKyAgICA3MDI3NSwgNzAyNzksIDcwMjgzLCA3MDI4NywgNzAyOTEsIDcwMjk1LCA3MDI5OSwgNzAzMDMsIDcwMzA2LCA3MDMxMSwgCisgICAgNzAzMTUsIDcwMzIxLCA3MDMyNiwgNzAzMzIsIDcwMzM2LCA3MDM0MCwgNzAzNDQsIDcwMzQ4LCA3MDM1MiwgNzAzNTYsIAorICAgIDcwMzYwLCA3MDM2NCwgNzAzNjgsIDcwMzcyLCA3MDM3NiwgNzAzODAsIDcwMzg0LCA3MDM4OCwgNzAzOTEsIDcwMzk0LCAKKyAgICA3MDM5NywgNzA0MDAsIDcwNDAzLCA3MDQwNiwgNzA0MDksIDcwNDEyLCA3MDQxNSwgNzA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNDI2LCA3MDQzMSwgNzA0MzYsIDcwNDQxLCAKKyAgICA3MDQ0NiwgNzA0NTMsIDcwNDYwLCA3MDQ2NSwgNzA0NzAsIDcwNDc1LCA3MDQ4MCwgNzA0ODcsIDcwNDk0LCA3MDUwMSwgCisgICAgNzA1MDgsIDcwNTE1LCA3MDUyMiwgNzA1MzIsIDcwNTQyLCA3MDU0OSwgNzA1NTYsIDcwNTYzLCA3MDU3MCwgNzA1NzYsIAorICAgIDcwNTgyLCA3MDU5MSwgNzA2MDAsIDcwNjA3LCA3MDYxNCwgNzA2MjUsIDcwNjM2LCA3MDY0MSwgNzA2NDYsIDcwNjUzLCAKKyAgICA3MDY2MCwgNzA2NjcsIDcwNjc0LCA3MDY4MSwgNzA2ODgsIDcwNjk1LCA3MDcwMiwgNzA3MDgsIDcwNzE0LCA3MDcyMCwgCisgICAgNzA3MjYsIDcwNzMzLCA3MDc0MCwgNzA3NDUsIDcwNzQ5LCA3MDc1NiwgNzA3NjMsIDcwNzcwLCA3MDc3NCwgNzA3ODEsIAorICAgIDcwNzg1LCA3MDc5MCwgNzA3OTQsIDcwODAwLCA3MDgwNSwgNzA4MTEsIDcwODE2LCA3MDgyMCwgNzA4MjQsIDcwODI3LCAKKyAgICA3MDgzMCwgNzA4MzUsIDcwODQwLCA3MDg0NSwgNzA4NTAsIDcwODU1LCA3MDg2MCwgNzA4NjUsIDcwODcwLCA3MDg3NSwgCisgICAgNzA4ODAsIDcwODg5LCA3MDg5OCwgNzA5MDMsIDcwOTA4LCA3MDkxMywgNzA5MTgsIDcwOTIzLCA3MDkyOCwgNzA5MzMsIAorICAgIDcwOTM4LCA3MDk0MywgNzA5NDgsIDcwOTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDk1OCwgNzA5NjQsIDcwOTY3LCAKKyAgICA3MDk3MCwgNzA5NzMsIDcwOTc3LCA3MDk4MSwgNzA5ODUsIDcwOTg5LCA3MDk5MiwgNzA5OTYsIDcwOTk5LCA3MTAwMywgCisgICAgNzEwMDYsIDcxMDEwLCA3MTAxNCwgNzEwMTgsIDcxMDIyLCA3MTAyNiwgNzEwMzAsIDcxMDM0LCA3MTAzNywgNzEwNDEsIAorICAgIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY5LCA3MTA3MywgNzEwNzcsIDcxMDgxLCAKKyAgICA3MTA4NSwgNzEwODksIDcxMDkzLCA3MTA5NiwgNzExMDAsIDcxMTA0LCA3MTEwOCwgNzExMTIsIDcxMTE2LCA3MTEyMCwgCisgICAgNzExMjQsIDcxMTI4LCA3MTEzMiwgNzExMzYsIDcxMTQwLCA3MTE0NCwgNzExNDgsIDcxMTUyLCA3MTE1NiwgNzExNjAsIAorICAgIDcxMTY0LCA3MTE2OCwgNzExNzIsIDcxMTc2LCA3MTE4MCwgNzExODQsIDcxMTg4LCA3MTE5MiwgNzExOTUsIDcxMTk5LCAKKyAgICA3MTIwMywgNzEyMDcsIDcxMjExLCA3MTIxNSwgNzEyMTksIDcxMjIzLCA3MTIyNiwgNzEyMzAsIDcxMjM0LCA3MTIzOCwgCisgICAgNzEyNDIsIDcxMjQ2LCA3MTI1MCwgNzEyNTQsIDcxMjU4LCA3MTI2MiwgNzEyNjYsIDcxMjcwLCA3MTI3NCwgNzEyNzksIAorICAgIDcxMjg0LCA3MTI4NywgNzEyOTIsIDcxMjk1LCA3MTI5OCwgNzEzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxMzA1LCAKKyAgICA3MTMxNCwgNzEzMjMsIDcxMzMyLCA3MTM0MSwgNzEzNTAsIDcxMzU5LCA3MTM2OCwgNzEzNzcsIDcxMzg1LCA3MTM5MiwgCisgICAgNzE0MDAsIDcxNDA3LCA3MTQxNSwgNzE0MjUsIDcxNDM0LCA3MTQ0NCwgNzE0NTMsIDcxNDYzLCA3MTQ3MSwgNzE0NzgsIAorICAgIDcxNDg2LCA3MTQ5MywgNzE1MDEsIDcxNTA2LCA3MTUxMSwgNzE1MTYsIDcxNTI1LCA3MTUzMSwgNzE1MzcsIDcxNTQ0LCAKKyAgICA3MTU1MywgNzE1NjEsIDcxNTY5LCA3MTU3NywgNzE1ODQsIDcxNTkxLCA3MTU5OCwgNzE2MDUsIDcxNjEwLCA3MTYxNSwgCisgICAgNzE2MjAsIDcxNjI1LCA3MTYzMCwgNzE2MzUsIDcxNjQwLCA3MTY0NSwgNzE2NTMsIDcxNjYxLCA3MTY2NywgNzE2NzMsIAorICAgIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MjEsIDcxNzI5LCAKKyAgICA3MTczNCwgNzE3MzksIDcxNzQ5LCA3MTc1OSwgNzE3NjYsIDcxNzczLCA3MTc4MiwgNzE3OTEsIDcxODAzLCA3MTgxNSwgCisgICAgNzE4MjEsIDcxODI3LCA3MTgzNSwgNzE4NDMsIDcxODUzLCA3MTg2MywgNzE4NzAsIDcxODc3LCA3MTg4MiwgNzE4ODcsIAorICAgIDcxODk5LCA3MTkxMSwgNzE5MTksIDcxOTI3LCA3MTkzNywgNzE5NDcsIDcxOTU5LCA3MTk3MSwgNzE5ODAsIDcxOTg5LCAKKyAgICA3MTk5NiwgNzIwMDMsIDcyMDEwLCA3MjAxNywgNzIwMjYsIDcyMDM1LCA3MjA0MCwgNzIwNDUsIDcyMDUyLCA3MjA1OSwgCisgICAgNzIwNjYsIDcyMDczLCA3MjA4NSwgNzIwOTcsIDcyMTAyLCA3MjEwNywgNzIxMTIsIDcyMTE3LCA3MjEyMiwgNzIxMjcsIAorICAgIDcyMTMyLCA3MjEzNywgNzIxNDEsIDcyMTQ2LCA3MjE1MSwgNzIxNTYsIDcyMTYxLCA3MjE2NiwgNzIxNzIsIDcyMTc3LCAKKyAgICA3MjE4MiwgNzIxODksIDcyMTk2LCA3MjIwMywgNzIyMTAsIDcyMjE3LCA3MjIyNiwgNzIyMzUsIDcyMjQxLCA3MjI0NywgCisgICAgNzIyNTMsIDcyMjU5LCA3MjI2NiwgNzIyNzMsIDcyMjgwLCA3MjI4NywgNzIyOTQsIDcyMjk4LCA3MjMwNSwgNzIzMTAsIAorICAgIDcyMzE1LCA3MjMyMiwgMCwgNzIzMzUsIDcyMzQzLCA3MjM1MSwgNzIzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcyMzY1LCA3MjM3NCwgNzIzODMsIDcyMzkyLCA3MjQwMSwgNzI0MTAsIDcyNDE5LCA3MjQyOCwgNzI0MzcsIAorICAgIDcyNDQ2LCA3MjQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI0MzQsIAotICAgIDcyNDQxLCA3MjQ0NywgNzI0NTQsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDg1LCA3MjQ5MiwgNzI0OTgsIDcyNTA0LCAKLSAgICA3MjUxMSwgNzI1MTcsIDcyNTIzLCA3MjUyOSwgNzI1MzYsIDcyNTQzLCA3MjU1MCwgNzI1NTcsIDcyNTY0LCA3MjU3MSwgCi0gICAgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzMywgNzI2NDAsIAotICAgIDcyNjQ3LCA3MjY1NCwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIDcyNzEwLCAKLSAgICA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjcsIDcyNzc1LCA3Mjc4MywgCi0gICAgNzI3OTEsIDAsIDAsIDAsIDAsIDcyNzk5LCA3MjgwOCwgNzI4MTcsIDcyODI2LCA3MjgzNSwgNzI4NDQsIDcyODUzLCAKLSAgICA3Mjg2MCwgNzI4NjcsIDcyODc0LCAwLCAwLCAwLCAwLCAwLCAwLCA3Mjg4MSwgNzI4ODUsIDcyODkwLCA3Mjg5NSwgNzI5MDAsIAotICAgIDcyOTA1LCA3MjkxMCwgNzI5MTUsIDcyOTIwLCA3MjkyNSwgNzI5MzAsIDcyOTM1LCA3MjkzOSwgNzI5NDMsIDcyOTQ4LCAKLSAgICA3Mjk1MywgNzI5NTcsIDcyOTYyLCA3Mjk2NywgNzI5NzIsIDcyOTc3LCA3Mjk4MiwgNzI5ODcsIDcyOTkyLCA3Mjk5NiwgCi0gICAgNzMwMDAsIDczMDA1LCA3MzAxMCwgNzMwMTQsIDczMDE4LCA3MzAyMiwgNzMwMjYsIDczMDMwLCA3MzAzNCwgNzMwMzgsIAotICAgIDczMDQzLCA3MzA0OCwgNzMwNTMsIDczMDU4LCA3MzA2MywgNzMwNzAsIDczMDc2LCA3MzA4MSwgNzMwODYsIDczMDkxLCAKLSAgICA3MzA5NiwgNzMxMDIsIDczMTA5LCA3MzExNSwgNzMxMjIsIDczMTI4LCA3MzEzNCwgNzMxMzksIDczMTQ2LCA3MzE1MiwgCi0gICAgNzMxNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMTYzLCA3MzE2NywgNzMxNzEsIDczMTc0LCA3MzE3OCwgNzMxODEsIAotICAgIDczMTg1LCA3MzE4OCwgNzMxOTIsIDczMTk2LCA3MzIwMSwgNzMyMDUsIDczMjEwLCA3MzIxMywgNzMyMTcsIDczMjIxLCAKLSAgICA3MzIyNCwgNzMyMjgsIDczMjMyLCA3MzIzNSwgNzMyMzksIDczMjQzLCA3MzI0NywgNzMyNTEsIDczMjU1LCA3MzI1OSwgCi0gICAgNzMyNjMsIDczMjY3LCA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIAotICAgIDczMzAzLCA3MzMwNywgNzMzMTAsIDczMzEzLCA3MzMxNywgNzMzMjEsIDczMzI1LCA3MzMyOCwgNzMzMzEsIDczMzM0LCAKLSAgICA3MzMzOCwgNzMzNDIsIDczMzQ2LCA3MzM1MCwgNzMzNTMsIDczMzU2LCA3MzM2MCwgNzMzNjUsIDczMzcwLCA3MzM3NCwgCi0gICAgNzMzNzksIDczMzgzLCA3MzM4OCwgNzMzOTMsIDczMzk5LCA3MzQwNCwgNzM0MTAsIDczNDE0LCA3MzQxOSwgNzM0MjQsIAotICAgIDczNDI4LCA3MzQzMywgNzM0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczNDQyLCA3MzQ0NSwgNzM0NDksIAotICAgIDczNDUzLCA3MzQ1NiwgNzM0NTksIDczNDYyLCA3MzQ2NSwgNzM0NjgsIDczNDcxLCA3MzQ3NCwgNzM0NzcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDczNDgwLCA3MzQ4NSwgNzM0ODksIDczNDkzLCA3MzQ5NywgNzM1MDEsIDczNTA1LCA3MzUwOSwgNzM1MTMsIAotICAgIDczNTE3LCA3MzUyMSwgNzM1MjUsIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NTAsIDczNTU1LCAKLSAgICA3MzU2MSwgNzM1NjcsIDczNTc0LCA3MzU3OSwgNzM1ODQsIDczNTkwLCA3MzU5NCwgNzM1OTksIDczNjAyLCAwLCAwLCAwLCAKLSAgICAwLCA3MzYwNSwgNzM2MTIsIDczNjE4LCA3MzYyNCwgNzM2MzAsIDczNjM2LCA3MzY0MiwgNzM2NDgsIDczNjU0LCA3MzY2MCwgCi0gICAgNzM2NjYsIDczNjcyLCA3MzY3OSwgNzM2ODYsIDczNjkzLCA3MzY5OSwgNzM3MDYsIDczNzEzLCA3MzcyMCwgNzM3MjcsIAotICAgIDczNzM0LCA3Mzc0MCwgNzM3NDYsIDczNzUzLCA3Mzc1OSwgNzM3NjYsIDczNzczLCA3Mzc3OSwgNzM3ODUsIDczNzkyLCAKLSAgICA3Mzc5OSwgNzM4MDYsIDczODEyLCA3MzgxOSwgNzM4MjYsIDczODMyLCA3MzgzOSwgNzM4NDUsIDczODUyLCA3Mzg1OSwgCi0gICAgNzM4NjUsIDczODcxLCA3Mzg3OCwgNzM4ODQsIDczODkxLCA3Mzg5OCwgNzM5MDcsIDczOTE0LCA3MzkyMSwgNzM5MjUsIAotICAgIDczOTMwLCA3MzkzNSwgNzM5NDAsIDczOTQ1LCA3Mzk0OSwgNzM5NTMsIDczOTU4LCA3Mzk2MiwgNzM5NjcsIDczOTcyLCAKLSAgICA3Mzk3NywgNzM5ODEsIDczOTg1LCA3Mzk5MCwgNzM5OTQsIDczOTk5LCA3NDAwMywgNzQwMDgsIDc0MDEzLCA3NDAxOCwgCi0gICAgNzQwMjMsIDc0MDI3LCA3NDAzMiwgNzQwMzcsIDc0MDQyLCA3NDA0OCwgNzQwNTMsIDc0MDU5LCA3NDA2NSwgNzQwNzEsIAotICAgIDc0MDc3LCA3NDA4MywgNzQwODgsIDc0MDk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDA5OCwgCi0gICAgNzQxMDMsIDc0MTA3LCA3NDExMSwgNzQxMTUsIDc0MTE5LCA3NDEyMywgNzQxMjcsIDc0MTMxLCA3NDEzNSwgNzQxMzksIAotICAgIDc0MTQzLCA3NDE0NywgNzQxNTEsIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCAKLSAgICA3NDE4MywgNzQxODcsIDc0MTkxLCA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCAwLCAwLCAwLCAKLSAgICA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgNzQyMzUsIDc0MjM4LCA3NDI0NCwgNzQyNDcsIDc0MjUxLCA3NDI1NCwgCi0gICAgNzQyNjAsIDc0MjY2LCA3NDI3NCwgNzQyNzcsIDc0MjgxLCA3NDI4NCwgNzQyODcsIDc0MjkzLCA3NDI5OSwgNzQzMDMsIAotICAgIDc0MzA5LCA3NDMxMywgNzQzMTcsIDc0MzIzLCA3NDMyNywgNzQzMzMsIDc0MzM5LCA3NDM0MywgNzQzNDcsIDc0MzUzLCAKLSAgICA3NDM1NywgNzQzNjMsIDc0MzY5LCA3NDM3MywgNzQzNzksIDc0MzgzLCA3NDM4OSwgNzQzOTIsIDc0Mzk1LCA3NDQwMSwgCi0gICAgNzQ0MDUsIDc0NDExLCA3NDQxNCwgNzQ0MTcsIDc0NDIwLCA3NDQyNiwgNzQ0MzAsIDc0NDM0LCA3NDQ0MCwgNzQ0NDYsIAotICAgIDc0NDQ5LCA3NDQ1MiwgNzQ0NTgsIDc0NDYzLCA3NDQ2OCwgNzQ0NzMsIDc0NDgwLCA3NDQ4NSwgNzQ0OTIsIDc0NDk3LCAKLSAgICA3NDUwNCwgNzQ1MDksIDc0NTE0LCA3NDUxOSwgNzQ1MjQsIDc0NTI3LCA3NDUzMSwgNzQ1MzUsIDc0NTQwLCA3NDU0NSwgCi0gICAgNzQ1NTAsIDc0NTU1LCA3NDU2MCwgNzQ1NjUsIDc0NTcwLCA3NDU3NSwgNzQ1ODIsIDc0NTg3LCAwLCA3NDU5NCwgNzQ1OTcsIAotICAgIDc0NjAxLCA3NDYwNCwgNzQ2MDcsIDc0NjEwLCA3NDYxMywgNzQ2MTYsIDc0NjE5LCA3NDYyMiwgNzQ2MjUsIDAsIDAsIDAsIAotICAgIDAsIDc0NjI4LCA3NDYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ2NDAsIDc0NjQzLCA3NDY0NiwgNzQ2NDksIDc0NjUyLCAKLSAgICA3NDY1NiwgNzQ2NTksIDc0NjYyLCA3NDY2NiwgNzQ2NzAsIDc0Njc0LCA3NDY3OCwgNzQ2ODIsIDc0Njg2LCA3NDY5MCwgCi0gICAgNzQ2OTQsIDc0Njk4LCA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIAotICAgIDc0NzMzLCA3NDczNywgNzQ3NDAsIDc0NzQ0LCA3NDc0OCwgNzQ3NTIsIDc0NzU2LCA3NDc2MCwgNzQ3NjMsIDc0NzY3LCAKLSAgICA3NDc3MCwgNzQ3NzMsIDc0Nzc3LCA3NDc4MSwgNzQ3ODUsIDc0Nzg4LCA3NDc5MSwgNzQ3OTYsIDc0ODAwLCA3NDgwNSwgCi0gICAgNzQ4MTAsIDc0ODE0LCA3NDgxOSwgNzQ4MjMsIDc0ODI4LCA3NDgzMywgNzQ4MzgsIDc0ODQyLCA3NDg0NiwgNzQ4NTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0ODU2LCA3NDg2MSwgNzQ4NjYsIDc0ODcxLCA3NDg3NywgNzQ4ODIsIDc0ODg3LCAKLSAgICA3NDg5MiwgNzQ4OTcsIDc0OTAyLCA3NDkwNiwgNzQ5MTAsIDc0OTE1LCA3NDkyMCwgMCwgMCwgNzQ5MjYsIDc0OTMwLCAKLSAgICA3NDkzMywgNzQ5MzYsIDc0OTM5LCA3NDk0MiwgNzQ5NDUsIDc0OTQ4LCA3NDk1MSwgNzQ5NTQsIDAsIDAsIDc0OTU3LCAKLSAgICA3NDk2MiwgNzQ5NjcsIDc0OTczLCA3NDk4MCwgNzQ5ODYsIDc0OTkyLCA3NDk5OCwgNzUwMDQsIDc1MDEwLCA3NTAxNiwgCi0gICAgNzUwMjIsIDc1MDI4LCA3NTAzNCwgNzUwNDAsIDc1MDQ2LCA3NTA1MSwgNzUwNTYsIDc1MDYxLCA3NTA2NywgNzUwNzMsIAotICAgIDc1MDgwLCA3NTA4NiwgNzUwOTIsIDc1MDk3LCA3NTEwNCwgNzUxMTEsIDc1MTE4LCA3NTEyNCwgNzUxMjksIDc1MTM0LCAKLSAgICA3NTEzOSwgMCwgMCwgMCwgMCwgNzUxNDcsIDc1MTUzLCA3NTE1OSwgNzUxNjUsIDc1MTcxLCA3NTE3NywgNzUxODMsIAotICAgIDc1MTg5LCA3NTE5NSwgNzUyMDEsIDc1MjA3LCA3NTIxMywgNzUyMTksIDc1MjI1LCA3NTIzMSwgNzUyMzcsIDc1MjQzLCAKLSAgICA3NTI0OSwgNzUyNTUsIDc1MjYxLCA3NTI2NywgNzUyNzIsIDc1Mjc3LCA3NTI4MywgNzUyODksIDc1Mjk1LCA3NTMwMSwgCi0gICAgNzUzMDcsIDc1MzEzLCA3NTMxOSwgNzUzMjUsIDc1MzMxLCA3NTMzNywgNzUzNDMsIDc1MzQ5LCA3NTM1NSwgNzUzNjEsIAotICAgIDc1MzY3LCA3NTM3MywgNzUzNzksIDc1Mzg1LCA3NTM5MSwgNzUzOTcsIDc1NDAzLCA3NTQwOSwgNzU0MTUsIDc1NDIxLCAKLSAgICA3NTQyNiwgNzU0MzEsIDc1NDM3LCA3NTQ0MiwgNzU0NDYsIDc1NDUxLCA3NTQ1NSwgNzU0NTksIDc1NDYzLCA3NTQ2OSwgCi0gICAgNzU0NzQsIDc1NDc5LCA3NTQ4NCwgNzU0ODksIDc1NDk0LCA3NTQ5OSwgNzU1MDQsIDc1NTExLCA3NTUxOCwgNzU1MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNDYyLCA3MjQ2OSwgNzI0NzUsIDcyNDgyLCA3MjQ5MCwgNzI0OTgsIAorICAgIDcyNTA1LCA3MjUxMywgNzI1MjAsIDcyNTI2LCA3MjUzMiwgNzI1MzksIDcyNTQ1LCA3MjU1MSwgNzI1NTcsIDcyNTY0LCAKKyAgICA3MjU3MSwgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzNCwgCisgICAgNzI2NDEsIDcyNjQ4LCA3MjY1NSwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIAorICAgIDcyNzEwLCA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjYsIDcyNzczLCAKKyAgICA3Mjc4MCwgNzI3ODcsIDcyNzk1LCA3MjgwMywgNzI4MTEsIDcyODE5LCAwLCAwLCAwLCAwLCA3MjgyNywgNzI4MzYsIAorICAgIDcyODQ1LCA3Mjg1NCwgNzI4NjMsIDcyODcyLCA3Mjg4MSwgNzI4ODgsIDcyODk1LCA3MjkwMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzI5MDksIDcyOTEzLCA3MjkxOCwgNzI5MjMsIDcyOTI4LCA3MjkzMywgNzI5MzgsIDcyOTQzLCA3Mjk0OCwgNzI5NTMsIAorICAgIDcyOTU4LCA3Mjk2MywgNzI5NjcsIDcyOTcxLCA3Mjk3NiwgNzI5ODEsIDcyOTg1LCA3Mjk5MCwgNzI5OTUsIDczMDAwLCAKKyAgICA3MzAwNSwgNzMwMTAsIDczMDE1LCA3MzAyMCwgNzMwMjQsIDczMDI4LCA3MzAzMywgNzMwMzgsIDczMDQyLCA3MzA0NiwgCisgICAgNzMwNTAsIDczMDU0LCA3MzA1OCwgNzMwNjIsIDczMDY2LCA3MzA3MSwgNzMwNzYsIDczMDgxLCA3MzA4NiwgNzMwOTEsIAorICAgIDczMDk4LCA3MzEwNCwgNzMxMDksIDczMTE0LCA3MzExOSwgNzMxMjQsIDczMTMwLCA3MzEzNywgNzMxNDMsIDczMTUwLCAKKyAgICA3MzE1NiwgNzMxNjIsIDczMTY3LCA3MzE3NCwgNzMxODAsIDczMTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzE5MSwgCisgICAgNzMxOTUsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjA5LCA3MzIxMywgNzMyMTYsIDczMjIwLCA3MzIyNCwgNzMyMjksIAorICAgIDczMjMzLCA3MzIzOCwgNzMyNDEsIDczMjQ1LCA3MzI0OSwgNzMyNTIsIDczMjU2LCA3MzI2MCwgNzMyNjMsIDczMjY3LCAKKyAgICA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIDczMzAzLCA3MzMwNywgCisgICAgNzMzMTEsIDczMzE1LCA3MzMxOSwgNzMzMjMsIDczMzI3LCA3MzMzMSwgNzMzMzUsIDczMzM4LCA3MzM0MSwgNzMzNDUsIAorICAgIDczMzQ5LCA3MzM1MywgNzMzNTYsIDczMzU5LCA3MzM2MiwgNzMzNjYsIDczMzcwLCA3MzM3NCwgNzMzNzgsIDczMzgxLCAKKyAgICA3MzM4NCwgNzMzODgsIDczMzkzLCA3MzM5OCwgNzM0MDIsIDczNDA3LCA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgCisgICAgNzM0MzIsIDczNDM4LCA3MzQ0MiwgNzM0NDcsIDczNDUyLCA3MzQ1NiwgNzM0NjEsIDczNDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3MzQ3MCwgNzM0NzMsIDczNDc3LCA3MzQ4MSwgNzM0ODQsIDczNDg3LCA3MzQ5MCwgNzM0OTMsIDczNDk2LCAKKyAgICA3MzQ5OSwgNzM1MDIsIDczNTA1LCAwLCAwLCAwLCAwLCAwLCAwLCA3MzUwOCwgNzM1MTMsIDczNTE3LCA3MzUyMSwgNzM1MjUsIAorICAgIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NDksIDczNTUzLCA3MzU1NywgNzM1NjEsIDczNTY1LCAKKyAgICA3MzU2OSwgNzM1NzMsIDczNTc4LCA3MzU4MywgNzM1ODksIDczNTk1LCA3MzYwMiwgNzM2MDcsIDczNjEyLCA3MzYxOCwgCisgICAgNzM2MjIsIDczNjI3LCA3MzYzMCwgMCwgMCwgMCwgMCwgNzM2MzMsIDczNjQwLCA3MzY0NiwgNzM2NTIsIDczNjU4LCAKKyAgICA3MzY2NCwgNzM2NzAsIDczNjc2LCA3MzY4MiwgNzM2ODgsIDczNjk0LCA3MzcwMCwgNzM3MDcsIDczNzE0LCA3MzcyMSwgCisgICAgNzM3MjcsIDczNzM0LCA3Mzc0MSwgNzM3NDgsIDczNzU1LCA3Mzc2MiwgNzM3NjgsIDczNzc0LCA3Mzc4MSwgNzM3ODcsIAorICAgIDczNzk0LCA3MzgwMSwgNzM4MDcsIDczODEzLCA3MzgyMCwgNzM4MjcsIDczODM0LCA3Mzg0MCwgNzM4NDcsIDczODU0LCAKKyAgICA3Mzg2MCwgNzM4NjcsIDczODczLCA3Mzg4MCwgNzM4ODcsIDczODkzLCA3Mzg5OSwgNzM5MDYsIDczOTEyLCA3MzkxOSwgCisgICAgNzM5MjYsIDczOTM1LCA3Mzk0MiwgNzM5NDksIDczOTUzLCA3Mzk1OCwgNzM5NjMsIDczOTY4LCA3Mzk3MywgNzM5NzcsIAorICAgIDczOTgxLCA3Mzk4NiwgNzM5OTAsIDczOTk1LCA3NDAwMCwgNzQwMDUsIDc0MDA5LCA3NDAxMywgNzQwMTgsIDc0MDIyLCAKKyAgICA3NDAyNywgNzQwMzEsIDc0MDM2LCA3NDA0MSwgNzQwNDYsIDc0MDUxLCA3NDA1NSwgNzQwNjAsIDc0MDY1LCA3NDA3MCwgCisgICAgNzQwNzYsIDc0MDgxLCA3NDA4NywgNzQwOTMsIDc0MDk5LCA3NDEwNSwgNzQxMTEsIDc0MTE2LCA3NDEyMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQxMjYsIDc0MTMxLCA3NDEzNSwgNzQxMzksIDc0MTQzLCA3NDE0NywgNzQxNTEsIAorICAgIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCA3NDE4MywgNzQxODcsIDc0MTkxLCAKKyAgICA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgCisgICAgNzQyMzUsIDc0MjM5LCA3NDI0MywgMCwgMCwgMCwgNzQyNDcsIDc0MjUxLCA3NDI1NSwgNzQyNTksIDc0MjYzLCA3NDI2NiwgCisgICAgNzQyNzIsIDc0Mjc1LCA3NDI3OSwgNzQyODIsIDc0Mjg4LCA3NDI5NCwgNzQzMDIsIDc0MzA1LCA3NDMwOSwgNzQzMTIsIAorICAgIDc0MzE1LCA3NDMyMSwgNzQzMjcsIDc0MzMxLCA3NDMzNywgNzQzNDEsIDc0MzQ1LCA3NDM1MSwgNzQzNTUsIDc0MzYxLCAKKyAgICA3NDM2NywgNzQzNzEsIDc0Mzc1LCA3NDM4MSwgNzQzODUsIDc0MzkxLCA3NDM5NywgNzQ0MDEsIDc0NDA3LCA3NDQxMSwgCisgICAgNzQ0MTcsIDc0NDIwLCA3NDQyMywgNzQ0MjksIDc0NDMzLCA3NDQzOSwgNzQ0NDIsIDc0NDQ1LCA3NDQ0OCwgNzQ0NTQsIAorICAgIDc0NDU4LCA3NDQ2MiwgNzQ0NjgsIDc0NDc0LCA3NDQ3NywgNzQ0ODAsIDc0NDg2LCA3NDQ5MSwgNzQ0OTYsIDc0NTAxLCAKKyAgICA3NDUwOCwgNzQ1MTMsIDc0NTIwLCA3NDUyNSwgNzQ1MzIsIDc0NTM3LCA3NDU0MiwgNzQ1NDcsIDc0NTUyLCA3NDU1NSwgCisgICAgNzQ1NTksIDc0NTYzLCA3NDU2OCwgNzQ1NzMsIDc0NTc4LCA3NDU4MywgNzQ1ODgsIDc0NTkzLCA3NDU5OCwgNzQ2MDMsIAorICAgIDc0NjEwLCA3NDYxNSwgMCwgNzQ2MjIsIDc0NjI1LCA3NDYyOSwgNzQ2MzIsIDc0NjM1LCA3NDYzOCwgNzQ2NDEsIDc0NjQ0LCAKKyAgICA3NDY0NywgNzQ2NTAsIDc0NjUzLCAwLCAwLCAwLCAwLCA3NDY1NiwgNzQ2NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc1NTMyLCA3NTUzNywgNzU1NDIsIDc1NTQ3LCA3NTU1NCwgNzU1NjEsIDc1NTY1LCA3NTU2OSwgNzU1NzQsIDc1NTc5LCAKLSAgICA3NTU4NCwgNzU1ODksIDc1NTk0LCA3NTU5OSwgNzU2MDQsIDc1NjA5LCA3NTYxNCwgNzU2MjAsIDc1NjI2LCA3NTYzMiwgCi0gICAgNzU2MzgsIDc1NjQ0LCA3NTY0OCwgNzU2NTQsIDc1NjU4LCA3NTY2NCwgNzU2NzEsIDc1Njc3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NTY4MSwgNzU2ODUsIDc1Njg5LCA3NTY5MywgNzU2OTcsIDc1NzAxLCAwLCAwLCA3NTcwNSwgNzU3MDksIAotICAgIDc1NzEzLCA3NTcxNywgNzU3MjEsIDc1NzI1LCAwLCAwLCA3NTcyOSwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIAotICAgIDc1NzQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTc1MywgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIAotICAgIDc1NzczLCA3NTc3NywgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDAsIAorICAgIDc0NjY4LCA3NDY3MSwgNzQ2NzQsIDc0Njc3LCA3NDY4MCwgNzQ2ODQsIDc0Njg3LCA3NDY5MCwgNzQ2OTQsIDc0Njk4LCAKKyAgICA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIDc0NzM0LCA3NDczOCwgCisgICAgNzQ3NDIsIDc0NzQ2LCA3NDc1MCwgNzQ3NTQsIDc0NzU4LCA3NDc2MSwgNzQ3NjUsIDc0NzY4LCA3NDc3MiwgNzQ3NzYsIAorICAgIDc0NzgwLCA3NDc4NCwgNzQ3ODgsIDc0NzkxLCA3NDc5NSwgNzQ3OTgsIDc0ODAxLCA3NDgwNSwgNzQ4MDksIDc0ODEzLCAKKyAgICA3NDgxNiwgNzQ4MTksIDc0ODI0LCA3NDgyOCwgNzQ4MzMsIDc0ODM4LCA3NDg0MiwgNzQ4NDcsIDc0ODUxLCA3NDg1NiwgCisgICAgNzQ4NjEsIDc0ODY2LCA3NDg3MCwgNzQ4NzQsIDc0ODc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDg4NCwgCisgICAgNzQ4ODksIDc0ODk0LCA3NDg5OSwgNzQ5MDUsIDc0OTEwLCA3NDkxNSwgNzQ5MjAsIDc0OTI1LCA3NDkzMCwgNzQ5MzQsIAorICAgIDc0OTM4LCA3NDk0MywgNzQ5NDgsIDAsIDAsIDc0OTU0LCA3NDk1OCwgNzQ5NjEsIDc0OTY0LCA3NDk2NywgNzQ5NzAsIAorICAgIDc0OTczLCA3NDk3NiwgNzQ5NzksIDc0OTgyLCAwLCAwLCA3NDk4NSwgNzQ5OTAsIDc0OTk1LCA3NTAwMSwgNzUwMDgsIAorICAgIDc1MDE0LCA3NTAyMCwgNzUwMjYsIDc1MDMyLCA3NTAzOCwgNzUwNDQsIDc1MDUwLCA3NTA1NiwgNzUwNjIsIDc1MDY4LCAKKyAgICA3NTA3NCwgNzUwNzksIDc1MDg0LCA3NTA4OSwgNzUwOTUsIDc1MTAxLCA3NTEwOCwgNzUxMTQsIDc1MTIwLCA3NTEyNSwgCisgICAgNzUxMzIsIDc1MTM5LCA3NTE0NiwgNzUxNTIsIDc1MTU3LCA3NTE2MiwgNzUxNjcsIDAsIDAsIDAsIDAsIDc1MTc1LCAKKyAgICA3NTE4MSwgNzUxODcsIDc1MTkzLCA3NTE5OSwgNzUyMDUsIDc1MjExLCA3NTIxNywgNzUyMjMsIDc1MjI5LCA3NTIzNSwgCisgICAgNzUyNDEsIDc1MjQ3LCA3NTI1MywgNzUyNTksIDc1MjY1LCA3NTI3MSwgNzUyNzcsIDc1MjgzLCA3NTI4OSwgNzUyOTUsIAorICAgIDc1MzAwLCA3NTMwNSwgNzUzMTEsIDc1MzE3LCA3NTMyMywgNzUzMjksIDc1MzM1LCA3NTM0MSwgNzUzNDcsIDc1MzUzLCAKKyAgICA3NTM1OSwgNzUzNjUsIDc1MzcxLCA3NTM3NywgNzUzODMsIDc1Mzg5LCA3NTM5NSwgNzU0MDEsIDc1NDA3LCA3NTQxMywgCisgICAgNzU0MTksIDc1NDI1LCA3NTQzMSwgNzU0MzcsIDc1NDQzLCA3NTQ0OSwgNzU0NTQsIDc1NDU5LCA3NTQ2NSwgNzU0NzAsIAorICAgIDc1NDc0LCA3NTQ3OSwgNzU0ODMsIDc1NDg3LCA3NTQ5MSwgNzU0OTcsIDc1NTAyLCA3NTUwNywgNzU1MTIsIDc1NTE3LCAKKyAgICA3NTUyMiwgNzU1MjcsIDc1NTMyLCA3NTUzOSwgNzU1NDYsIDc1NTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTU2MCwgNzU1NjUsIDc1NTcwLCA3NTU3NSwgCisgICAgNzU1ODIsIDc1NTg5LCA3NTU5MywgNzU1OTcsIDc1NjAyLCA3NTYwNywgNzU2MTIsIDc1NjE3LCA3NTYyMiwgNzU2MjcsIAorICAgIDc1NjMyLCA3NTYzNywgNzU2NDIsIDc1NjQ4LCA3NTY1NCwgNzU2NjAsIDc1NjY2LCA3NTY3MiwgNzU2NzYsIDc1NjgyLCAKKyAgICA3NTY4NiwgNzU2OTIsIDc1Njk5LCA3NTcwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU3MDksIDc1NzEzLCAKKyAgICA3NTcxNywgNzU3MjEsIDc1NzI1LCA3NTcyOSwgMCwgMCwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIDc1NzQ5LCAKKyAgICA3NTc1MywgMCwgMCwgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIDc1NzczLCA3NTc3NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDc1ODA5LCAKKyAgICA3NTgxMywgNzU4MTcsIDc1ODIxLCA3NTgyNSwgNzU4MjksIDc1ODMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NTgwOSwgNzU4MTQsIDc1ODE5LCA3NTgyNCwgNzU4MjksIDc1ODMzLCA3NTgzNywgNzU4NDIsIDc1ODQ3LCA3NTg1MiwgCi0gICAgNzU4NTcsIDc1ODYyLCA3NTg2NywgNzU4NzIsIDc1ODc3LCA3NTg4MiwgNzU4ODYsIDc1ODkxLCA3NTg5NiwgNzU5MDEsIAotICAgIDc1OTA2LCA3NTkxMSwgNzU5MTYsIDc1OTIxLCA3NTkyNiwgNzU5MzEsIDc1OTM2LCA3NTk0MSwgNzU5NDgsIDc1OTU1LCAKLSAgICA3NTk2MiwgNzU5NjksIDc1OTc2LCA3NTk4MywgNzU5OTAsIDc1OTk3LCA3NjAwMywgNzYwMDksIDc2MDE1LCA3NjAyMSwgCi0gICAgNzYwMjcsIDc2MDMzLCA3NjAzOSwgNzYwNDUsIDc2MDQ5LCA3NjA1NSwgMCwgMCwgNzYwNjEsIDc2MDY2LCA3NjA3MCwgCi0gICAgNzYwNzQsIDc2MDc4LCA3NjA4MiwgNzYwODYsIDc2MDkwLCA3NjA5NCwgNzYwOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1ODM3LCA3NTg0MiwgNzU4NDcsIDc1ODUyLCAKKyAgICA3NTg1NywgNzU4NjEsIDc1ODY1LCA3NTg3MCwgNzU4NzUsIDc1ODgwLCA3NTg4NSwgNzU4OTAsIDc1ODk1LCA3NTkwMCwgCisgICAgNzU5MDUsIDc1OTEwLCA3NTkxNCwgNzU5MTksIDc1OTI0LCA3NTkyOSwgNzU5MzQsIDc1OTM5LCA3NTk0NCwgNzU5NDksIAorICAgIDc1OTU0LCA3NTk1OSwgNzU5NjQsIDc1OTY5LCA3NTk3NiwgNzU5ODMsIDc1OTkwLCA3NTk5NywgNzYwMDQsIDc2MDExLCAKKyAgICA3NjAxOCwgNzYwMjUsIDc2MDMxLCA3NjAzNywgNzYwNDMsIDc2MDQ5LCA3NjA1NSwgNzYwNjEsIDc2MDY3LCA3NjA3MywgCisgICAgNzYwNzcsIDc2MDgzLCAwLCAwLCA3NjA4OSwgNzYwOTQsIDc2MDk4LCA3NjEwMiwgNzYxMDYsIDc2MTEwLCA3NjExNCwgCisgICAgNzYxMTgsIDc2MTIyLCA3NjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxMDIsIAotICAgIDc2MTA2LCA3NjExMCwgNzYxMTQsIDc2MTE4LCA3NjEyMiwgNzYxMjYsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCAKLSAgICA3NjE0NiwgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgCi0gICAgNzYxODYsIDc2MTkwLCAwLCAwLCAwLCAwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCAKLSAgICA3NjIxOCwgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgCi0gICAgNzYyNTgsIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIAotICAgIDc2Mjk4LCA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCAKLSAgICA3NjMzOCwgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgCi0gICAgNzYzNzgsIDc2MzgyLCA3NjM4NiwgMCwgMCwgMCwgMCwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCAKLSAgICA3NjQxMCwgNzY0MTQsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgCi0gICAgNzY0NTAsIDc2NDU0LCA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIAotICAgIDc2NDkwLCA3NjQ5NCwgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCAKLSAgICA3NjUzMCwgNzY1MzQsIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgCi0gICAgNzY1NzAsIDc2NTc0LCA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIAotICAgIDc2NjEwLCA3NjYxNCwgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCAKLSAgICA3NjY1MCwgNzY2NTQsIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgCi0gICAgNzY2OTAsIDc2Njk0LCA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIAotICAgIDc2NzMwLCA3NjczNCwgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCAKLSAgICA3Njc3MCwgNzY3NzQsIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgCi0gICAgNzY4MTAsIDc2ODE0LCA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIAotICAgIDc2ODUwLCA3Njg1NCwgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCAKLSAgICA3Njg5MCwgNzY4OTQsIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgCi0gICAgNzY5MzAsIDc2OTM0LCA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIAotICAgIDc2OTcwLCA3Njk3NCwgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCAKLSAgICA3NzAxMCwgNzcwMTQsIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgCi0gICAgNzcwNTAsIDc3MDU0LCA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIAotICAgIDc3MDkwLCA3NzA5NCwgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCAKLSAgICA3NzEzMCwgNzcxMzQsIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgCi0gICAgNzcxNzAsIDc3MTc0LCA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIAotICAgIDc3MjEwLCA3NzIxNCwgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCAKLSAgICA3NzI1MCwgNzcyNTQsIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgCi0gICAgNzcyOTAsIDc3Mjk0LCA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMwLCA3NzMzNCwgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCAKLSAgICA3NzM3MCwgNzczNzQsIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgCi0gICAgNzc0MTAsIDc3NDE0LCA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIAotICAgIDc3NDUwLCA3NzQ1NCwgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCAKLSAgICA3NzQ5MCwgNzc0OTQsIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgCi0gICAgNzc1MzAsIDc3NTM0LCA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIAotICAgIDc3NTcwLCA3NzU3NCwgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCAKLSAgICA3NzYxMCwgNzc2MTQsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgCi0gICAgNzc2NTAsIDc3NjU0LCA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIAotICAgIDc3NjkwLCA3NzY5NCwgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCAKLSAgICA3NzczMCwgNzc3MzQsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgCi0gICAgNzc3NzAsIDc3Nzc0LCA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIAotICAgIDc3ODEwLCA3NzgxNCwgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCAKLSAgICA3Nzg1MCwgMCwgMCwgNzc4NTQsIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDc3ODgyLCAKLSAgICA3Nzg4NiwgNzc4OTAsIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgCi0gICAgNzc5MjYsIDc3OTMwLCA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIAotICAgIDc3OTY2LCA3Nzk3MCwgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCAKLSAgICA3ODAwNiwgNzgwMTAsIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgCi0gICAgNzgwNDYsIDc4MDUwLCA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIAotICAgIDc4MDg2LCA3ODA5MCwgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCAKLSAgICA3ODEyNiwgNzgxMzAsIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgCi0gICAgNzgxNjYsIDc4MTcwLCA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIAotICAgIDc4MjA2LCA3ODIxMCwgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCAKLSAgICA3ODI0NiwgNzgyNTAsIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCA3NjE0NiwgCisgICAgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgNzYxODYsIAorICAgIDc2MTkwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCA3NjIxOCwgMCwgMCwgMCwgMCwgCisgICAgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgNzYyNTgsIAorICAgIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIDc2Mjk4LCAKKyAgICA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCA3NjMzOCwgCisgICAgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgNzYzNzgsIAorICAgIDc2MzgyLCA3NjM4NiwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCA3NjQxMCwgNzY0MTQsIDAsIDAsIDAsIAorICAgIDAsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgNzY0NTAsIDc2NDU0LCAKKyAgICA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIDc2NDkwLCA3NjQ5NCwgCisgICAgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCA3NjUzMCwgNzY1MzQsIAorICAgIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgNzY1NzAsIDc2NTc0LCAKKyAgICA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIDc2NjEwLCA3NjYxNCwgCisgICAgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCA3NjY1MCwgNzY2NTQsIAorICAgIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgNzY2OTAsIDc2Njk0LCAKKyAgICA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIDc2NzMwLCA3NjczNCwgCisgICAgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCA3Njc3MCwgNzY3NzQsIAorICAgIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgNzY4MTAsIDc2ODE0LCAKKyAgICA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIDc2ODUwLCA3Njg1NCwgCisgICAgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCA3Njg5MCwgNzY4OTQsIAorICAgIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgNzY5MzAsIDc2OTM0LCAKKyAgICA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIDc2OTcwLCA3Njk3NCwgCisgICAgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCA3NzAxMCwgNzcwMTQsIAorICAgIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgNzcwNTAsIDc3MDU0LCAKKyAgICA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIDc3MDkwLCA3NzA5NCwgCisgICAgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCA3NzEzMCwgNzcxMzQsIAorICAgIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgNzcxNzAsIDc3MTc0LCAKKyAgICA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIDc3MjEwLCA3NzIxNCwgCisgICAgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCA3NzI1MCwgNzcyNTQsIAorICAgIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgNzcyOTAsIDc3Mjk0LCAKKyAgICA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIDc3MzMwLCA3NzMzNCwgCisgICAgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCA3NzM3MCwgNzczNzQsIAorICAgIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgNzc0MTAsIDc3NDE0LCAKKyAgICA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIDc3NDUwLCA3NzQ1NCwgCisgICAgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCA3NzQ5MCwgNzc0OTQsIAorICAgIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgNzc1MzAsIDc3NTM0LCAKKyAgICA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIDc3NTcwLCA3NzU3NCwgCisgICAgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCA3NzYxMCwgNzc2MTQsIAorICAgIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgNzc2NTAsIDc3NjU0LCAKKyAgICA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIDc3NjkwLCA3NzY5NCwgCisgICAgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCA3NzczMCwgNzc3MzQsIAorICAgIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgNzc3NzAsIDc3Nzc0LCAKKyAgICA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIDc3ODEwLCA3NzgxNCwgCisgICAgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCA3Nzg1MCwgNzc4NTQsIAorICAgIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDAsIDAsIDc3ODgyLCA3Nzg4NiwgNzc4OTAsIAorICAgIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgNzc5MjYsIDc3OTMwLCAKKyAgICA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIDc3OTY2LCA3Nzk3MCwgCisgICAgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCA3ODAwNiwgNzgwMTAsIAorICAgIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgNzgwNDYsIDc4MDUwLCAKKyAgICA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIDc4MDg2LCA3ODA5MCwgCisgICAgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCA3ODEyNiwgNzgxMzAsIAorICAgIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgNzgxNjYsIDc4MTcwLCAKKyAgICA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIDc4MjA2LCA3ODIxMCwgCisgICAgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCA3ODI0NiwgNzgyNTAsIAorICAgIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDc4Mjc4LCA3ODI4MiwgNzgyODYsIDc4MjkwLCAKKyAgICA3ODI5NCwgNzgyOTgsIDc4MzAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODMwNiwgCisgICAgNzgzMTEsIDc4MzE2LCA3ODMyMSwgNzgzMjYsIDc4MzMxLCA3ODMzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNzgzNDQsIDc4MzUxLCA3ODM1OCwgNzgzNjUsIDc4MzcyLCAwLCAwLCAwLCAwLCAwLCA3ODM3OSwgNzgzODYsIAorICAgIDc4MzkzLCA3ODQwMywgNzg0MDksIDc4NDE1LCA3ODQyMSwgNzg0MjcsIDc4NDMzLCA3ODQzOSwgNzg0NDYsIDc4NDUyLCAKKyAgICA3ODQ1OCwgNzg0NjQsIDc4NDczLCA3ODQ4MiwgNzg0OTQsIDc4NTA2LCA3ODUxMiwgNzg1MTgsIDc4NTI0LCA3ODUzMSwgCisgICAgNzg1MzgsIDc4NTQ1LCA3ODU1MiwgNzg1NTksIDAsIDc4NTY2LCA3ODU3MywgNzg1ODAsIDc4NTg4LCA3ODU5NSwgMCwgCisgICAgNzg2MDIsIDAsIDc4NjA5LCA3ODYxNiwgMCwgNzg2MjMsIDc4NjMxLCAwLCA3ODYzOCwgNzg2NDUsIDc4NjUyLCA3ODY1OSwgCisgICAgNzg2NjYsIDc4NjczLCA3ODY4MCwgNzg2ODcsIDc4Njk0LCA3ODcwMSwgNzg3MDYsIDc4NzEzLCA3ODcyMCwgNzg3MjYsIAorICAgIDc4NzMyLCA3ODczOCwgNzg3NDQsIDc4NzUwLCA3ODc1NiwgNzg3NjIsIDc4NzY4LCA3ODc3NCwgNzg3ODAsIDc4Nzg2LCAKKyAgICA3ODc5MiwgNzg3OTgsIDc4ODA0LCA3ODgxMCwgNzg4MTYsIDc4ODIyLCA3ODgyOCwgNzg4MzQsIDc4ODQwLCA3ODg0NiwgCisgICAgNzg4NTIsIDc4ODU4LCA3ODg2NCwgNzg4NzAsIDc4ODc2LCA3ODg4MiwgNzg4ODgsIDc4ODk0LCA3ODkwMCwgNzg5MDYsIAorICAgIDc4OTEyLCA3ODkxOCwgNzg5MjQsIDc4OTMwLCA3ODkzNiwgNzg5NDIsIDc4OTQ4LCA3ODk1NCwgNzg5NjAsIDc4OTY2LCAKKyAgICA3ODk3MiwgNzg5NzgsIDc4OTg0LCA3ODk5MCwgNzg5OTYsIDc5MDAyLCA3OTAwOCwgNzkwMTQsIDc5MDIwLCA3OTAyNiwgCisgICAgNzkwMzIsIDc5MDM4LCA3OTA0NCwgNzkwNTAsIDc5MDU2LCA3OTA2MiwgNzkwNjgsIDc5MDc0LCA3OTA4MCwgNzkwODYsIAorICAgIDc5MDkyLCA3OTA5OCwgNzkxMDQsIDc5MTEwLCA3OTExNiwgNzkxMjIsIDc5MTI4LCA3OTEzNCwgNzkxNDAsIDc5MTQ2LCAKKyAgICA3OTE1MiwgNzkxNTgsIDc5MTY0LCA3OTE3MCwgNzkxNzYsIDc5MTg0LCA3OTE5MiwgNzkxOTgsIDc5MjA0LCA3OTIxMCwgCisgICAgNzkyMTYsIDc5MjI1LCA3OTIzNCwgNzkyNDIsIDc5MjUwLCA3OTI1OCwgNzkyNjYsIDc5Mjc0LCA3OTI4MiwgNzkyOTAsIAorICAgIDc5Mjk4LCA3OTMwNSwgNzkzMTIsIDc5MzIyLCA3OTMzMiwgNzkzMzYsIDc5MzQwLCA3OTM0NSwgNzkzNTAsIDc5MzU1LCAKKyAgICA3OTM2MCwgNzkzNjksIDc5Mzc4LCA3OTM4NCwgNzkzOTAsIDc5Mzk3LCA3OTQwNCwgNzk0MTEsIDc5NDE1LCA3OTQyMSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk0MjcsIDc5NDMzLCA3OTQzOSwgCisgICAgNzk0NDUsIDc5NDUxLCA3OTQ1NiwgNzk0NjEsIDc5NDY3LCA3OTQ3MywgNzk0NzksIDc5NDg1LCA3OTQ5MywgNzk0OTksIAorICAgIDc5NTA1LCA3OTUxMywgNzk1MjEsIDc5NTI5LCA3OTUzNywgNzk1NDIsIDc5NTQ3LCA3OTU1MiwgNzk1NTcsIDc5NTcwLCAKKyAgICA3OTU4MywgNzk1OTMsIDc5NjAzLCA3OTYxNCwgNzk2MjUsIDc5NjM2LCA3OTY0NywgNzk2NTcsIDc5NjY3LCA3OTY3OCwgCisgICAgNzk2ODksIDc5NzAwLCA3OTcxMSwgNzk3MjEsIDc5NzMxLCA3OTc0MSwgNzk3NTcsIDc5NzczLCA3OTc4OSwgNzk3OTYsIAorICAgIDc5ODAzLCA3OTgxMCwgNzk4MTcsIDc5ODI3LCA3OTgzNywgNzk4NDcsIDc5ODU5LCA3OTg2OSwgNzk4NzcsIDc5ODg1LCAKKyAgICA3OTg5NCwgNzk5MDIsIDc5OTEyLCA3OTkyMCwgNzk5MjgsIDc5OTM2LCA3OTk0NSwgNzk5NTMsIDc5OTYzLCA3OTk3MSwgCisgICAgNzk5NzksIDc5OTg3LCA3OTk5NywgODAwMDUsIDgwMDEyLCA4MDAxOSwgODAwMjYsIDgwMDMzLCA4MDA0MSwgODAwNDksIAorICAgIDgwMDU3LCA4MDA2NSwgODAwNzMsIDgwMDgyLCA4MDA5MCwgODAwOTgsIDgwMTA2LCA4MDExNCwgODAxMjIsIDgwMTMxLCAKKyAgICA4MDEzOSwgODAxNDcsIDgwMTU1LCA4MDE2MywgODAxNzEsIDgwMTc5LCA4MDE4NywgODAxOTUsIDgwMjAzLCA4MDIxMSwgCisgICAgODAyMjAsIDgwMjI4LCA4MDIzOCwgODAyNDYsIDgwMjU0LCA4MDI2MiwgODAyNzIsIDgwMjgwLCA4MDI4OCwgODAyOTYsIAorICAgIDgwMzA0LCA4MDMxMywgODAzMjIsIDgwMzMwLCA4MDM0MCwgODAzNDgsIDgwMzU2LCA4MDM2NCwgODAzNzMsIDgwMzgxLCAKKyAgICA4MDM5MSwgODAzOTksIDgwNDA2LCA4MDQxMywgODA0MjEsIDgwNDI4LCA4MDQzNywgODA0NDQsIDgwNDUyLCA4MDQ2MCwgCisgICAgODA0NjksIDgwNDc3LCA4MDQ4NywgODA0OTUsIDgwNTAzLCA4MDUxMSwgODA1MjEsIDgwNTI5LCA4MDUzNiwgODA1NDMsIAorICAgIDgwNTUxLCA4MDU1OCwgODA1NjcsIDgwNTc0LCA4MDU4NCwgODA1OTQsIDgwNjA1LCA4MDYxNCwgODA2MjMsIDgwNjMyLCAKKyAgICA4MDY0MSwgODA2NTAsIDgwNjYwLCA4MDY3MSwgODA2ODIsIDgwNjkyLCA4MDcwMywgODA3MTUsIDgwNzI1LCA4MDczNCwgCisgICAgODA3NDMsIDgwNzUxLCA4MDc2MCwgODA3NzAsIDgwNzc4LCA4MDc4NywgODA3OTYsIDgwODA0LCA4MDgxMywgODA4MjMsIAorICAgIDgwODMxLCA4MDg0MCwgODA4NDksIDgwODU3LCA4MDg2NiwgODA4NzYsIDgwODg0LCA4MDg5NCwgODA5MDIsIDgwOTEyLCAKKyAgICA4MDkyMCwgODA5MjgsIDgwOTM3LCA4MDk0NSwgODA5NTUsIDgwOTYzLCA4MDk3MSwgODA5ODEsIDgwOTg5LCA4MDk5NiwgCisgICAgODEwMDMsIDgxMDEyLCA4MTAyMSwgODEwMjksIDgxMDM4LCA4MTA0OCwgODEwNTYsIDgxMDY3LCA4MTA3NSwgODEwODMsIAorICAgIDgxMDkwLCA4MTA5OCwgODExMDcsIDgxMTE0LCA4MTEyNCwgODExMzQsIDgxMTQ1LCA4MTE1NSwgODExNjYsIDgxMTc0LCAKKyAgICA4MTE4MiwgODExOTEsIDgxMTk5LCA4MTIwOCwgODEyMTYsIDgxMjI0LCA4MTIzMywgODEyNDEsIDgxMjUwLCA4MTI1OCwgCisgICAgODEyNjUsIDgxMjcyLCA4MTI3OSwgODEyODYsIDgxMjk0LCA4MTMwMiwgODEzMTAsIDgxMzE4LCA4MTMyNywgODEzMzUsIAorICAgIDgxMzQzLCA4MTM1MiwgODEzNjAsIDgxMzY4LCA4MTM3NiwgODEzODUsIDgxMzkzLCA4MTQwMSwgODE0MDksIDgxNDE3LCAKKyAgICA4MTQyNSwgODE0MzMsIDgxNDQxLCA4MTQ0OSwgODE0NTcsIDgxNDY2LCA4MTQ3NCwgODE0ODIsIDgxNDkwLCA4MTQ5OCwgCisgICAgODE1MDYsIDgxNTE1LCA4MTUyNCwgODE1MzIsIDgxNTQwLCA4MTU0OCwgODE1NTcsIDgxNTY1LCA4MTU3NCwgODE1ODEsIAorICAgIDgxNTg4LCA4MTU5NiwgODE2MDMsIDgxNjExLCA4MTYxOSwgODE2MjgsIDgxNjM2LCA4MTY0NSwgODE2NTMsIDgxNjYxLCAKKyAgICA4MTY3MSwgODE2NzgsIDgxNjg1LCA4MTY5MywgODE3MDAsIDgxNzA4LCA4MTcxOCwgODE3MjksIDgxNzM3LCA4MTc0NiwgCisgICAgODE3NTQsIDgxNzYzLCA4MTc3MSwgODE3ODAsIDgxNzg4LCA4MTc5NywgODE4MDUsIDgxODE0LCA4MTgyMywgODE4MzEsIAorICAgIDgxODM5LCA4MTg0NywgODE4NTYsIDgxODYzLCA4MTg3MSwgODE4ODAsIDgxODg5LCA4MTg5OCwgODE5MDgsIDgxOTE2LCAKKyAgICA4MTkyNiwgODE5MzQsIDgxOTQ0LCA4MTk1MiwgODE5NjIsIDgxOTcwLCA4MTk4MCwgODE5ODgsIDgxOTk3LCA4MjAwNCwgCisgICAgODIwMTMsIDgyMDIwLCA4MjAzMCwgODIwMzgsIDgyMDQ4LCA4MjA1NiwgODIwNjYsIDgyMDc0LCA4MjA4MiwgODIwOTAsIAorICAgIDgyMDk5LCA4MjEwNywgODIxMTYsIDgyMTI1LCA4MjEzNCwgODIxNDMsIDgyMTUzLCA4MjE2MSwgODIxNzEsIDgyMTc5LCAKKyAgICA4MjE4OSwgODIxOTcsIDgyMjA3LCA4MjIxNSwgODIyMjUsIDgyMjMzLCA4MjI0MiwgODIyNDksIDgyMjU4LCA4MjI2NSwgCisgICAgODIyNzUsIDgyMjgzLCA4MjI5MywgODIzMDEsIDgyMzExLCA4MjMxOSwgODIzMjcsIDgyMzM1LCA4MjM0NCwgODIzNTIsIAorICAgIDgyMzYxLCA4MjM3MCwgODIzNzksIDgyMzg4LCA4MjM5NiwgODI0MDQsIDgyNDEzLCA4MjQyMSwgODI0MzAsIDgyNDM5LCAKKyAgICA4MjQ0NywgODI0NTUsIDgyNDYzLCA4MjQ3MiwgODI0ODAsIDgyNDg4LCA4MjQ5NywgODI1MDUsIDgyNTEzLCA4MjUyMSwgCisgICAgODI1MjksIDgyNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MjUzOSwgCisgICAgODI1NDksIDgyNTU5LCA4MjU2OSwgODI1NzksIDgyNTkwLCA4MjYwMCwgODI2MTAsIDgyNjIxLCA4MjYzMCwgODI2MzksIAorICAgIDgyNjQ4LCA4MjY1OSwgODI2NjksIDgyNjc5LCA4MjY5MSwgODI3MDEsIDgyNzExLCA4MjcyMSwgODI3MzEsIDgyNzQxLCAKKyAgICA4Mjc1MSwgODI3NjEsIDgyNzcxLCA4Mjc4MSwgODI3OTEsIDgyODAxLCA4MjgxMiwgODI4MjMsIDgyODMzLCA4Mjg0MywgCisgICAgODI4NTUsIDgyODY2LCA4Mjg3NywgODI4ODcsIDgyODk3LCA4MjkwNywgODI5MTcsIDgyOTI3LCA4MjkzNywgODI5NDcsIAorICAgIDgyOTU5LCA4Mjk2OSwgODI5NzksIDgyOTkxLCA4MzAwMiwgODMwMTMsIDgzMDIzLCA4MzAzMywgODMwNDMsIDgzMDUzLCAKKyAgICA4MzA2NSwgODMwNzUsIDgzMDg1LCA4MzA5NiwgODMxMDcsIDgzMTE3LCA4MzEyNywgODMxMzYsIDgzMTQ1LCA4MzE1NCwgCisgICAgODMxNjMsIDgzMTcyLCA4MzE4MiwgMCwgMCwgODMxOTIsIDgzMjAyLCA4MzIxMiwgODMyMjIsIDgzMjMyLCA4MzI0NCwgCisgICAgODMyNTQsIDgzMjY0LCA4MzI3NiwgODMyODYsIDgzMjk4LCA4MzMwNywgODMzMTYsIDgzMzI3LCA4MzMzNywgODMzNDksIAorICAgIDgzMzYwLCA4MzM3MywgODMzODMsIDgzMzk1LCA4MzQwNCwgODM0MTUsIDgzNDI2LCA4MzQzOSwgODM0NDksIDgzNDU5LCAKKyAgICA4MzQ2OSwgODM0NzksIDgzNDg5LCA4MzQ5OCwgODM1MDcsIDgzNTE2LCA4MzUyNSwgODM1MzUsIDgzNTQ1LCA4MzU1NSwgCisgICAgODM1NjUsIDgzNTc1LCA4MzU4NSwgODM1OTUsIDgzNjA1LCA4MzYxNSwgODM2MjUsIDgzNjM1LCA4MzY0NSwgODM2NTQsIAorICAgIDgzNjYzLCA4MzY3MiwgODM2ODIsIDgzNjkyLCA4MzcwMiwgODM3MTIsIDgzNzIyLCA4MzczMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgyNzgsIDc4MjgzLCA3ODI4OCwgNzgyOTMsIDc4Mjk4LCA3ODMwMywgNzgzMTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzE2LCA3ODMyMywgNzgzMzAsIDc4MzM3LCA3ODM0NCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzgzNTEsIDc4MzU4LCA3ODM2NSwgNzgzNzUsIDc4MzgxLCA3ODM4NywgNzgzOTMsIDc4Mzk5LCAKLSAgICA3ODQwNSwgNzg0MTEsIDc4NDE4LCA3ODQyNCwgNzg0MzAsIDc4NDM2LCA3ODQ0NSwgNzg0NTQsIDc4NDY2LCA3ODQ3OCwgCi0gICAgNzg0ODQsIDc4NDkwLCA3ODQ5NiwgNzg1MDMsIDc4NTEwLCA3ODUxNywgNzg1MjQsIDc4NTMxLCAwLCA3ODUzOCwgNzg1NDUsIAotICAgIDc4NTUyLCA3ODU2MCwgNzg1NjcsIDAsIDc4NTc0LCAwLCA3ODU4MSwgNzg1ODgsIDAsIDc4NTk1LCA3ODYwMywgMCwgCi0gICAgNzg2MTAsIDc4NjE3LCA3ODYyNCwgNzg2MzEsIDc4NjM4LCA3ODY0NSwgNzg2NTIsIDc4NjU5LCA3ODY2NiwgNzg2NzMsIAotICAgIDc4Njc4LCA3ODY4NSwgNzg2OTIsIDc4Njk4LCA3ODcwNCwgNzg3MTAsIDc4NzE2LCA3ODcyMiwgNzg3MjgsIDc4NzM0LCAKLSAgICA3ODc0MCwgNzg3NDYsIDc4NzUyLCA3ODc1OCwgNzg3NjQsIDc4NzcwLCA3ODc3NiwgNzg3ODIsIDc4Nzg4LCA3ODc5NCwgCi0gICAgNzg4MDAsIDc4ODA2LCA3ODgxMiwgNzg4MTgsIDc4ODI0LCA3ODgzMCwgNzg4MzYsIDc4ODQyLCA3ODg0OCwgNzg4NTQsIAotICAgIDc4ODYwLCA3ODg2NiwgNzg4NzIsIDc4ODc4LCA3ODg4NCwgNzg4OTAsIDc4ODk2LCA3ODkwMiwgNzg5MDgsIDc4OTE0LCAKLSAgICA3ODkyMCwgNzg5MjYsIDc4OTMyLCA3ODkzOCwgNzg5NDQsIDc4OTUwLCA3ODk1NiwgNzg5NjIsIDc4OTY4LCA3ODk3NCwgCi0gICAgNzg5ODAsIDc4OTg2LCA3ODk5MiwgNzg5OTgsIDc5MDA0LCA3OTAxMCwgNzkwMTYsIDc5MDIyLCA3OTAyOCwgNzkwMzQsIAotICAgIDc5MDQwLCA3OTA0NiwgNzkwNTIsIDc5MDU4LCA3OTA2NCwgNzkwNzAsIDc5MDc2LCA3OTA4MiwgNzkwODgsIDc5MDk0LCAKLSAgICA3OTEwMCwgNzkxMDYsIDc5MTEyLCA3OTExOCwgNzkxMjQsIDc5MTMwLCA3OTEzNiwgNzkxNDIsIDc5MTQ4LCA3OTE1NiwgCi0gICAgNzkxNjQsIDc5MTcwLCA3OTE3NiwgNzkxODIsIDc5MTg4LCA3OTE5NywgNzkyMDYsIDc5MjE0LCA3OTIyMiwgNzkyMzAsIAotICAgIDc5MjM4LCA3OTI0NiwgNzkyNTQsIDc5MjYyLCA3OTI3MCwgNzkyNzcsIDc5Mjg0LCA3OTI5NCwgNzkzMDQsIDc5MzA4LCAKLSAgICA3OTMxMiwgNzkzMTcsIDc5MzIyLCA3OTMyNywgNzkzMzIsIDc5MzQxLCA3OTM1MCwgNzkzNTYsIDc5MzYyLCA3OTM2OSwgCi0gICAgNzkzNzYsIDc5MzgzLCA3OTM4NywgNzkzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc5Mzk5LCA3OTQwNSwgNzk0MTEsIDc5NDE3LCA3OTQyMywgNzk0MjgsIDc5NDMzLCA3OTQzOSwgNzk0NDUsIAotICAgIDc5NDUxLCA3OTQ1NywgNzk0NjUsIDc5NDcxLCA3OTQ3NywgNzk0ODUsIDc5NDkzLCA3OTUwMSwgNzk1MDksIDc5NTE0LCAKLSAgICA3OTUxOSwgNzk1MjQsIDc5NTI5LCA3OTU0MiwgNzk1NTUsIDc5NTY1LCA3OTU3NSwgNzk1ODYsIDc5NTk3LCA3OTYwOCwgCi0gICAgNzk2MTksIDc5NjI5LCA3OTYzOSwgNzk2NTAsIDc5NjYxLCA3OTY3MiwgNzk2ODMsIDc5NjkzLCA3OTcwMywgNzk3MTMsIAotICAgIDc5NzI5LCA3OTc0NSwgNzk3NjEsIDc5NzY4LCA3OTc3NSwgNzk3ODIsIDc5Nzg5LCA3OTc5OSwgNzk4MDksIDc5ODE5LCAKLSAgICA3OTgzMSwgNzk4NDEsIDc5ODQ5LCA3OTg1NywgNzk4NjYsIDc5ODc0LCA3OTg4NCwgNzk4OTIsIDc5OTAwLCA3OTkwOCwgCi0gICAgNzk5MTcsIDc5OTI1LCA3OTkzNSwgNzk5NDMsIDc5OTUxLCA3OTk1OSwgNzk5NjksIDc5OTc3LCA3OTk4NCwgNzk5OTEsIAotICAgIDc5OTk4LCA4MDAwNSwgODAwMTMsIDgwMDIxLCA4MDAyOSwgODAwMzcsIDgwMDQ1LCA4MDA1NCwgODAwNjIsIDgwMDcwLCAKLSAgICA4MDA3OCwgODAwODYsIDgwMDk0LCA4MDEwMywgODAxMTEsIDgwMTE5LCA4MDEyNywgODAxMzUsIDgwMTQzLCA4MDE1MSwgCi0gICAgODAxNTksIDgwMTY3LCA4MDE3NSwgODAxODMsIDgwMTkyLCA4MDIwMCwgODAyMTAsIDgwMjE4LCA4MDIyNiwgODAyMzQsIAotICAgIDgwMjQ0LCA4MDI1MiwgODAyNjAsIDgwMjY4LCA4MDI3NiwgODAyODUsIDgwMjk0LCA4MDMwMiwgODAzMTIsIDgwMzIwLCAKLSAgICA4MDMyOCwgODAzMzYsIDgwMzQ1LCA4MDM1MywgODAzNjMsIDgwMzcxLCA4MDM3OCwgODAzODUsIDgwMzkzLCA4MDQwMCwgCi0gICAgODA0MDksIDgwNDE2LCA4MDQyNCwgODA0MzIsIDgwNDQxLCA4MDQ0OSwgODA0NTksIDgwNDY3LCA4MDQ3NSwgODA0ODMsIAotICAgIDgwNDkzLCA4MDUwMSwgODA1MDgsIDgwNTE1LCA4MDUyMywgODA1MzAsIDgwNTM5LCA4MDU0NiwgODA1NTYsIDgwNTY2LCAKLSAgICA4MDU3NywgODA1ODYsIDgwNTk1LCA4MDYwNCwgODA2MTMsIDgwNjIyLCA4MDYzMiwgODA2NDMsIDgwNjU0LCA4MDY2NCwgCi0gICAgODA2NzUsIDgwNjg3LCA4MDY5NywgODA3MDYsIDgwNzE1LCA4MDcyMywgODA3MzIsIDgwNzQyLCA4MDc1MCwgODA3NTksIAotICAgIDgwNzY4LCA4MDc3NiwgODA3ODUsIDgwNzk1LCA4MDgwMywgODA4MTIsIDgwODIxLCA4MDgyOSwgODA4MzgsIDgwODQ4LCAKLSAgICA4MDg1NiwgODA4NjYsIDgwODc0LCA4MDg4NCwgODA4OTIsIDgwOTAwLCA4MDkwOSwgODA5MTcsIDgwOTI3LCA4MDkzNSwgCi0gICAgODA5NDMsIDgwOTUzLCA4MDk2MSwgODA5NjgsIDgwOTc1LCA4MDk4NCwgODA5OTMsIDgxMDAxLCA4MTAxMCwgODEwMjAsIAotICAgIDgxMDI4LCA4MTAzOSwgODEwNDcsIDgxMDU1LCA4MTA2MiwgODEwNzAsIDgxMDc5LCA4MTA4NiwgODEwOTYsIDgxMTA2LCAKLSAgICA4MTExNywgODExMjcsIDgxMTM4LCA4MTE0NiwgODExNTQsIDgxMTYzLCA4MTE3MSwgODExODAsIDgxMTg4LCA4MTE5NiwgCi0gICAgODEyMDUsIDgxMjEzLCA4MTIyMiwgODEyMzAsIDgxMjM3LCA4MTI0NCwgODEyNTEsIDgxMjU4LCA4MTI2NiwgODEyNzQsIAotICAgIDgxMjgyLCA4MTI5MCwgODEyOTksIDgxMzA3LCA4MTMxNSwgODEzMjQsIDgxMzMyLCA4MTM0MCwgODEzNDgsIDgxMzU3LCAKLSAgICA4MTM2NSwgODEzNzMsIDgxMzgxLCA4MTM4OSwgODEzOTcsIDgxNDA1LCA4MTQxMywgODE0MjEsIDgxNDI5LCA4MTQzOCwgCi0gICAgODE0NDYsIDgxNDU0LCA4MTQ2MiwgODE0NzAsIDgxNDc4LCA4MTQ4NywgODE0OTYsIDgxNTA0LCA4MTUxMiwgODE1MjAsIAotICAgIDgxNTI5LCA4MTUzNywgODE1NDYsIDgxNTUzLCA4MTU2MCwgODE1NjgsIDgxNTc1LCA4MTU4MywgODE1OTEsIDgxNjAwLCAKLSAgICA4MTYwOCwgODE2MTcsIDgxNjI1LCA4MTYzMywgODE2NDMsIDgxNjUwLCA4MTY1NywgODE2NjUsIDgxNjcyLCA4MTY4MCwgCi0gICAgODE2OTAsIDgxNzAxLCA4MTcwOSwgODE3MTgsIDgxNzI2LCA4MTczNSwgODE3NDMsIDgxNzUyLCA4MTc2MCwgODE3NjksIAotICAgIDgxNzc3LCA4MTc4NiwgODE3OTUsIDgxODAzLCA4MTgxMSwgODE4MTksIDgxODI4LCA4MTgzNSwgODE4NDMsIDgxODUyLCAKLSAgICA4MTg2MSwgODE4NzAsIDgxODgwLCA4MTg4OCwgODE4OTgsIDgxOTA2LCA4MTkxNiwgODE5MjQsIDgxOTM0LCA4MTk0MiwgCi0gICAgODE5NTIsIDgxOTYwLCA4MTk2OSwgODE5NzYsIDgxOTg1LCA4MTk5MiwgODIwMDIsIDgyMDEwLCA4MjAyMCwgODIwMjgsIAotICAgIDgyMDM4LCA4MjA0NiwgODIwNTQsIDgyMDYyLCA4MjA3MSwgODIwNzksIDgyMDg4LCA4MjA5NywgODIxMDYsIDgyMTE1LCAKLSAgICA4MjEyNSwgODIxMzMsIDgyMTQzLCA4MjE1MSwgODIxNjEsIDgyMTY5LCA4MjE3OSwgODIxODcsIDgyMTk3LCA4MjIwNSwgCi0gICAgODIyMTQsIDgyMjIxLCA4MjIzMCwgODIyMzcsIDgyMjQ3LCA4MjI1NSwgODIyNjUsIDgyMjczLCA4MjI4MywgODIyOTEsIAotICAgIDgyMjk5LCA4MjMwNywgODIzMTYsIDgyMzI0LCA4MjMzMywgODIzNDIsIDgyMzUxLCA4MjM2MCwgODIzNjgsIDgyMzc2LCAKLSAgICA4MjM4NSwgODIzOTMsIDgyNDAyLCA4MjQxMSwgODI0MTksIDgyNDI3LCA4MjQzNSwgODI0NDQsIDgyNDUyLCA4MjQ2MCwgCi0gICAgODI0NjksIDgyNDc3LCA4MjQ4NSwgODI0OTMsIDgyNTAxLCA4MjUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgODI1MTEsIDgyNTIxLCA4MjUzMSwgODI1NDEsIDgyNTUxLCA4MjU2MiwgODI1NzIsIDgyNTgyLCAKLSAgICA4MjU5MywgODI2MDIsIDgyNjExLCA4MjYyMCwgODI2MzEsIDgyNjQxLCA4MjY1MSwgODI2NjMsIDgyNjczLCA4MjY4MywgCi0gICAgODI2OTMsIDgyNzAzLCA4MjcxMywgODI3MjMsIDgyNzMzLCA4Mjc0MywgODI3NTMsIDgyNzYzLCA4Mjc3MywgODI3ODQsIAotICAgIDgyNzk1LCA4MjgwNSwgODI4MTUsIDgyODI3LCA4MjgzOCwgODI4NDksIDgyODU5LCA4Mjg2OSwgODI4NzksIDgyODg5LCAKLSAgICA4Mjg5OSwgODI5MDksIDgyOTE5LCA4MjkzMSwgODI5NDEsIDgyOTUxLCA4Mjk2MywgODI5NzQsIDgyOTg1LCA4Mjk5NSwgCi0gICAgODMwMDUsIDgzMDE1LCA4MzAyNSwgODMwMzcsIDgzMDQ3LCA4MzA1NywgODMwNjgsIDgzMDc5LCA4MzA4OSwgODMwOTksIAotICAgIDgzMTA4LCA4MzExNywgODMxMjYsIDgzMTM1LCA4MzE0NCwgODMxNTQsIDAsIDAsIDgzMTY0LCA4MzE3NCwgODMxODQsIAotICAgIDgzMTk0LCA4MzIwNCwgODMyMTYsIDgzMjI2LCA4MzIzNiwgODMyNDgsIDgzMjU4LCA4MzI3MCwgODMyNzksIDgzMjg4LCAKLSAgICA4MzI5OSwgODMzMDksIDgzMzIxLCA4MzMzMiwgODMzNDUsIDgzMzU1LCA4MzM2NywgODMzNzYsIDgzMzg3LCA4MzM5OCwgCi0gICAgODM0MTEsIDgzNDIxLCA4MzQzMSwgODM0NDEsIDgzNDUxLCA4MzQ2MSwgODM0NzAsIDgzNDc5LCA4MzQ4OCwgODM0OTcsIAotICAgIDgzNTA3LCA4MzUxNywgODM1MjcsIDgzNTM3LCA4MzU0NywgODM1NTcsIDgzNTY3LCA4MzU3NywgODM1ODcsIDgzNTk3LCAKLSAgICA4MzYwNywgODM2MTcsIDgzNjI2LCA4MzYzNSwgODM2NDQsIDgzNjU0LCA4MzY2NCwgODM2NzQsIDgzNjg0LCA4MzY5NCwgCi0gICAgODM3MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzE1LCA4MzczMCwgCi0gICAgODM3NDUsIDgzNzUxLCA4Mzc1NywgODM3NjMsIDgzNzY5LCA4Mzc3NSwgODM3ODEsIDgzNzg3LCA4Mzc5MywgODM4MDEsIAotICAgIDgzODA1LCA4MzgwOCwgMCwgMCwgODM4MTYsIDgzODE5LCA4MzgyMiwgODM4MjUsIDgzODI4LCA4MzgzMSwgODM4MzQsIAotICAgIDgzODM3LCA4Mzg0MCwgODM4NDMsIDgzODQ2LCA4Mzg0OSwgODM4NTIsIDgzODU1LCA4Mzg1OCwgODM4NjEsIDgzODY0LCAKLSAgICA4Mzg3MiwgODM4ODEsIDgzODkyLCA4MzkwMCwgODM5MDgsIDgzOTE3LCA4MzkyNiwgODM5MzcsIDgzOTQ5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA4Mzk1OCwgODM5NjMsIDgzOTY4LCA4Mzk3NSwgODM5ODIsIDgzOTg4LCA4Mzk5NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODM5OTksIDg0MDA5LCA4NDAxOSwgODQwMjksIDg0MDM4LCA4NDA0OSwgODQwNTgsIDg0MDY3LCAKLSAgICA4NDA3NywgODQwODcsIDg0MDk5LCA4NDExMSwgODQxMjIsIDg0MTMzLCA4NDE0NCwgODQxNTUsIDg0MTY1LCA4NDE3NSwgCi0gICAgODQxODUsIDg0MTk1LCA4NDIwNiwgODQyMTcsIDg0MjIxLCA4NDIyNiwgODQyMzUsIDg0MjQ0LCA4NDI0OCwgODQyNTIsIAotICAgIDg0MjU2LCA4NDI2MSwgODQyNjYsIDg0MjcxLCA4NDI3NiwgODQyNzksIDg0MjgzLCAwLCA4NDI4OCwgODQyOTEsIDg0Mjk0LCAKLSAgICA4NDI5OCwgODQzMDIsIDg0MzA3LCA4NDMxMSwgODQzMTUsIDg0MzIwLCA4NDMyNSwgODQzMzIsIDg0MzM5LCA4NDM0MiwgCi0gICAgODQzNDUsIDg0MzQ4LCA4NDM1MSwgODQzNTQsIDg0MzU4LCA4NDM2MiwgMCwgODQzNjYsIDg0MzcxLCA4NDM3NSwgODQzNzksIAotICAgIDAsIDAsIDAsIDAsIDg0Mzg0LCA4NDM4OSwgODQzOTYsIDg0NDAxLCA4NDQwNiwgMCwgODQ0MTEsIDg0NDE2LCA4NDQyMSwgCi0gICAgODQ0MjYsIDg0NDMxLCA4NDQzNiwgODQ0NDEsIDg0NDQ2LCA4NDQ1MSwgODQ0NTYsIDg0NDYxLCA4NDQ2NiwgODQ0NzUsIAotICAgIDg0NDg0LCA4NDQ5MiwgODQ1MDAsIDg0NTA5LCA4NDUxOCwgODQ1MjcsIDg0NTM2LCA4NDU0NCwgODQ1NTIsIDg0NTYwLCAKLSAgICA4NDU2OCwgODQ1NzMsIDg0NTc4LCA4NDU4NCwgODQ1OTAsIDg0NTk2LCA4NDYwMiwgODQ2MTAsIDg0NjE4LCA4NDYyNCwgCi0gICAgODQ2MzAsIDg0NjM2LCA4NDY0MiwgODQ2NDgsIDg0NjU0LCA4NDY2MCwgODQ2NjYsIDg0NjcxLCA4NDY3NiwgODQ2ODEsIAotICAgIDg0Njg2LCA4NDY5MSwgODQ2OTYsIDg0NzAxLCA4NDcwNiwgODQ3MTIsIDg0NzE4LCA4NDcyNCwgODQ3MzAsIDg0NzM2LCAKLSAgICA4NDc0MiwgODQ3NDgsIDg0NzU0LCA4NDc2MCwgODQ3NjYsIDg0NzcyLCA4NDc3OCwgODQ3ODQsIDg0NzkwLCA4NDc5NiwgCi0gICAgODQ4MDIsIDg0ODA4LCA4NDgxNCwgODQ4MjAsIDg0ODI2LCA4NDgzMiwgODQ4MzgsIDg0ODQ0LCA4NDg1MCwgODQ4NTYsIAotICAgIDg0ODYyLCA4NDg2OCwgODQ4NzQsIDg0ODgwLCA4NDg4NiwgODQ4OTIsIDg0ODk4LCA4NDkwNCwgODQ5MTAsIDg0OTE2LCAKLSAgICA4NDkyMiwgODQ5MjgsIDg0OTM0LCA4NDk0MCwgODQ5NDYsIDg0OTUyLCA4NDk1OCwgODQ5NjQsIDg0OTcwLCA4NDk3NiwgCi0gICAgODQ5ODIsIDg0OTg4LCA4NDk5NCwgODUwMDAsIDg1MDA2LCA4NTAxMiwgODUwMTgsIDg1MDI0LCA4NTAzMCwgODUwMzYsIAotICAgIDg1MDQyLCA4NTA0OCwgODUwNTQsIDg1MDYwLCA4NTA2NiwgODUwNzEsIDg1MDc2LCA4NTA4MSwgODUwODYsIDg1MDkyLCAKLSAgICA4NTA5OCwgODUxMDQsIDg1MTEwLCA4NTExNiwgODUxMjIsIDg1MTI4LCA4NTEzNCwgODUxNDAsIDg1MTQ2LCA4NTE1MywgCi0gICAgODUxNjAsIDg1MTY1LCA4NTE3MCwgODUxNzUsIDg1MTgwLCA4NTE5MiwgODUyMDQsIDg1MjE1LCA4NTIyNiwgODUyMzgsIAotICAgIDg1MjUwLCA4NTI1OCwgMCwgMCwgODUyNjYsIDAsIDg1Mjc0LCA4NTI3OCwgODUyODIsIDg1Mjg1LCA4NTI4OSwgODUyOTMsIAotICAgIDg1Mjk2LCA4NTI5OSwgODUzMDMsIDg1MzA3LCA4NTMxMCwgODUzMTMsIDg1MzE2LCA4NTMxOSwgODUzMjQsIDg1MzI3LCAKLSAgICA4NTMzMSwgODUzMzQsIDg1MzM3LCA4NTM0MCwgODUzNDMsIDg1MzQ2LCA4NTM0OSwgODUzNTIsIDg1MzU1LCA4NTM1OCwgCi0gICAgODUzNjEsIDg1MzY0LCA4NTM2OCwgODUzNzIsIDg1Mzc2LCA4NTM4MCwgODUzODUsIDg1MzkwLCA4NTM5NiwgODU0MDIsIAotICAgIDg1NDA4LCA4NTQxMywgODU0MTksIDg1NDI1LCA4NTQzMSwgODU0MzYsIDg1NDQyLCA4NTQ0OCwgODU0NTMsIDg1NDU4LCAKLSAgICA4NTQ2NCwgODU0NjksIDg1NDc1LCA4NTQ4MSwgODU0ODYsIDg1NDkyLCA4NTQ5OCwgODU1MDMsIDg1NTA5LCA4NTUxNSwgCi0gICAgODU1MjEsIDg1NTI3LCA4NTUzMywgODU1MzcsIDg1NTQyLCA4NTU0NiwgODU1NTEsIDg1NTU1LCA4NTU2MCwgODU1NjUsIAotICAgIDg1NTcxLCA4NTU3NywgODU1ODMsIDg1NTg4LCA4NTU5NCwgODU2MDAsIDg1NjA2LCA4NTYxMSwgODU2MTcsIDg1NjIzLCAKLSAgICA4NTYyOCwgODU2MzMsIDg1NjM5LCA4NTY0NCwgODU2NTAsIDg1NjU2LCA4NTY2MSwgODU2NjcsIDg1NjczLCA4NTY3OCwgCi0gICAgODU2ODQsIDg1NjkwLCA4NTY5NiwgODU3MDIsIDg1NzA4LCA4NTcxMywgODU3MTcsIDg1NzIyLCA4NTcyNCwgODU3MjksIAotICAgIDg1NzM0LCA4NTc0MCwgODU3NDUsIDg1NzUwLCA4NTc1NCwgODU3NjAsIDg1NzY1LCA4NTc3MCwgODU3NzUsIDg1NzgwLCAKLSAgICA4NTc4NSwgODU3OTAsIDg1Nzk1LCA4NTgwMSwgODU4MDcsIDg1ODEzLCA4NTgyMSwgODU4MjUsIDg1ODI5LCA4NTgzMywgCi0gICAgODU4MzcsIDg1ODQxLCA4NTg0NSwgODU4NTAsIDg1ODU1LCA4NTg2MCwgODU4NjUsIDg1ODY5LCA4NTg3NCwgODU4NzksIAotICAgIDg1ODg0LCA4NTg4OSwgODU4OTQsIDg1ODk5LCA4NTkwNCwgODU5MDksIDg1OTEzLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKLSAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NiwgODU5NTEsIDg1OTU2LCA4NTk2MSwgODU5NjUsIDg1OTcwLCA4NTk3NSwgCi0gICAgODU5ODAsIDg1OTg1LCA4NTk4OSwgODU5OTQsIDg1OTk5LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxOCwgODYwMjMsIAotICAgIDg2MDI4LCA4NjAzMywgODYwNDAsIDg2MDQ3LCA4NjA1MSwgODYwNTYsIDg2MDYxLCA4NjA2NiwgODYwNzEsIDg2MDc2LCAKLSAgICA4NjA4MSwgODYwODYsIDg2MDkxLCA4NjA5NiwgODYxMDEsIDg2MTA2LCA4NjExMSwgODYxMTYsIDg2MTIxLCA4NjEyNiwgCi0gICAgODYxMzEsIDg2MTM2LCA4NjE0MSwgODYxNDYsIDg2MTUxLCA4NjE1NiwgODYxNjEsIDg2MTY2LCA4NjE3MSwgODYxNzYsIAotICAgIDg2MTgxLCA4NjE4NiwgODYxOTEsIDg2MTk2LCAwLCAwLCAwLCA4NjIwMSwgODYyMDUsIDg2MjEwLCA4NjIxNCwgODYyMTksIAotICAgIDg2MjI0LCAwLCAwLCA4NjIyOCwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NywgCi0gICAgODYyNjIsIDg2MjY2LCA4NjI3MSwgODYyNzYsIDg2MjgxLCAwLCAwLCA4NjI4NiwgODYyOTEsIDg2Mjk2LCAwLCAwLCAwLCAKLSAgICA4NjMwMCwgODYzMDQsIDg2MzA4LCA4NjMxMiwgODYzMTUsIDg2MzE5LCA4NjMyMywgMCwgODYzMjcsIDg2MzMzLCA4NjMzNiwgCi0gICAgODYzNDAsIDg2MzQzLCA4NjM0NywgODYzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzU1LCA4NjM2MSwgCi0gICAgODYzNjcsIDg2MzczLCA4NjM3OSwgMCwgMCwgODYzODMsIDg2Mzg5LCA4NjM5NSwgODY0MDEsIDg2NDA3LCA4NjQxMywgCi0gICAgODY0MjAsIDg2NDI3LCA4NjQzNCwgODY0NDEsIDg2NDQ4LCA4NjQ1NSwgMCwgODY0NjIsIDg2NDY5LCA4NjQ3NiwgODY0ODIsIAotICAgIDg2NDg5LCA4NjQ5NiwgODY1MDMsIDg2NTEwLCA4NjUxNiwgODY1MjMsIDg2NTMwLCA4NjUzNywgODY1NDQsIDg2NTUwLCAKLSAgICA4NjU1NywgODY1NjQsIDg2NTcxLCA4NjU3OCwgODY1ODQsIDg2NTkxLCA4NjU5OCwgODY2MDUsIDg2NjEyLCA4NjYxOSwgCi0gICAgODY2MjYsIDg2NjMzLCAwLCA4NjY0MCwgODY2NDYsIDg2NjUzLCA4NjY2MCwgODY2NjcsIDg2Njc0LCA4NjY4MCwgODY2ODcsIAotICAgIDg2Njk0LCA4NjcwMSwgODY3MDgsIDg2NzE1LCA4NjcyMiwgODY3MjksIDg2NzM1LCA4Njc0MiwgODY3NDksIDg2NzU2LCAKLSAgICA4Njc2MywgMCwgODY3NzAsIDg2Nzc3LCAwLCA4Njc4NCwgODY3OTEsIDg2Nzk4LCA4NjgwNSwgODY4MTIsIDg2ODE5LCAKLSAgICA4NjgyNiwgODY4MzMsIDg2ODQwLCA4Njg0NywgODY4NTQsIDg2ODYxLCA4Njg2OCwgODY4NzUsIDg2ODgyLCAwLCAwLCAKLSAgICA4Njg4OCwgODY4OTMsIDg2ODk4LCA4NjkwMywgODY5MDgsIDg2OTEzLCA4NjkxOCwgODY5MjMsIDg2OTI4LCA4NjkzMywgCi0gICAgODY5MzgsIDg2OTQzLCA4Njk0OCwgODY5NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2OTU4LCA4Njk2NSwgCi0gICAgODY5NzIsIDg2OTc5LCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCA4NzAyOCwgODcwMzUsIAotICAgIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgODcwOTksIDg3MTA3LCAKLSAgICA4NzExNCwgODcxMjEsIDg3MTI2LCA4NzEzNCwgODcxNDIsIDg3MTQ5LCA4NzE1NiwgODcxNjEsIDg3MTY4LCA4NzE3MywgCi0gICAgODcxNzgsIDg3MTg1LCA4NzE5MCwgODcxOTUsIDg3MjAwLCA4NzIwOCwgODcyMTMsIDg3MjE4LCA4NzIyNSwgODcyMzAsIAotICAgIDg3MjM1LCA4NzI0MiwgODcyNDksIDg3MjU0LCA4NzI1OSwgODcyNjQsIDg3MjY5LCA4NzI3NCwgODcyNzksIDg3Mjg0LCAKLSAgICA4NzI4OSwgODcyOTQsIDg3MzAxLCA4NzMwNiwgODczMTMsIDg3MzE4LCA4NzMyMywgODczMjgsIDg3MzMzLCA4NzMzOCwgCi0gICAgODczNDMsIDg3MzQ4LCA4NzM1MywgODczNTgsIDg3MzYzLCA4NzM2OCwgODczNzUsIDg3MzgyLCA4NzM4OSwgODczOTYsIAotICAgIDg3NDAyLCA4NzQwNywgODc0MTQsIDg3NDE5LCA4NzQyNCwgODc0MzMsIDg3NDQwLCA4NzQ0OSwgODc0NTYsIDg3NDYxLCAKLSAgICA4NzQ2NiwgODc0NzQsIDg3NDc5LCA4NzQ4NCwgODc0ODksIDg3NDk0LCA4NzQ5OSwgODc1MDYsIDg3NTExLCA4NzUxNiwgCi0gICAgODc1MjEsIDg3NTI2LCA4NzUzMSwgODc1MzgsIDg3NTQ1LCA4NzU1MiwgODc1NTksIDg3NTY2LCA4NzU3MywgODc1ODAsIAotICAgIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgODc2NDMsIDg3NjUwLCAKLSAgICA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIDg3NzEzLCA4NzcyMCwgCi0gICAgODc3MjcsIDAsIDAsIDAsIDAsIDAsIDg3NzM0LCA4Nzc0MiwgODc3NTAsIDAsIDAsIDAsIDAsIDg3NzU1LCA4Nzc1OSwgCi0gICAgODc3NjMsIDg3NzY3LCA4Nzc3MSwgODc3NzUsIDg3Nzc5LCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NiwgODc4MDEsIAotICAgIDg3ODA2LCA4NzgxMSwgODc4MTYsIDg3ODIxLCA4NzgyNiwgODc4MzEsIDg3ODM2LCA4Nzg0MiwgODc4NDgsIDg3ODU0LCAKLSAgICA4Nzg2MSwgODc4NjgsIDg3ODc1LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMiwgODc5MDgsIDg3OTE0LCA4NzkyMSwgCi0gICAgODc5MjgsIDg3OTM1LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCA4Nzk4NCwgODc5OTEsIAotICAgIDg3OTk4LCA4ODAwNSwgODgwMTIsIDAsIDAsIDAsIDg4MDE5LCA4ODAyNywgODgwMzUsIDg4MDQzLCA4ODA1MSwgODgwNTksIAotICAgIDg4MDY5LCA4ODA3OSwgODgwODcsIDg4MDk1LCA4ODEwMywgODgxMTEsIDg4MTE5LCA4ODEyNSwgODgxMzIsIDg4MTQxLCAKLSAgICA4ODE1MCwgODgxNTksIDg4MTY4LCA4ODE3NywgODgxODYsIDg4MTk2LCA4ODIwNywgODgyMTcsIDg4MjI4LCA4ODIzNywgCi0gICAgODgyNDYsIDg4MjU1LCA4ODI2NSwgODgyNzYsIDg4Mjg2LCA4ODI5NywgODgzMDgsIDg4MzE3LCA4ODMyNSwgODgzMzEsIAotICAgIDg4MzM3LCA4ODM0MywgODgzNDksIDg4MzU3LCA4ODM2NSwgODgzNzEsIDg4Mzc4LCA4ODM4OCwgODgzOTUsIDg4NDAyLCAKLSAgICA4ODQwOSwgODg0MTYsIDg4NDIzLCA4ODQzMywgODg0NDAsIDg4NDQ3LCA4ODQ1NSwgODg0NjMsIDg4NDcyLCA4ODQ4MSwgCi0gICAgODg0OTAsIDg4NDk5LCA4ODUwOCwgODg1MTYsIDg4NTI1LCA4ODUzNCwgODg1NDMsIDg4NTQ3LCA4ODU1NCwgODg1NTksIAotICAgIDg4NTY0LCA4ODU2OCwgODg1NzIsIDg4NTc2LCA4ODU4MCwgODg1ODUsIDg4NTkwLCA4ODU5NiwgODg2MDIsIDg4NjA2LCAKLSAgICA4ODYxMiwgODg2MTYsIDg4NjIwLCA4ODYyNCwgODg2MjgsIDg4NjMyLCA4ODYzNiwgODg2NDIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4NjQ2LCA4ODY1MSwgODg2NTYsIDg4NjYxLCA4ODY2NiwgODg2NzMsIDg4Njc4LCA4ODY4MywgODg2ODgsIDg4NjkzLCAKLSAgICA4ODY5OCwgODg3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzQzLCA4Mzc1OCwgODM3NzMsIDgzNzc5LCA4Mzc4NSwgODM3OTEsIAorICAgIDgzNzk3LCA4MzgwMywgODM4MDksIDgzODE1LCA4MzgyMSwgODM4MjksIDgzODMzLCA4MzgzNiwgMCwgMCwgODM4NDQsIAorICAgIDgzODQ3LCA4Mzg1MCwgODM4NTMsIDgzODU2LCA4Mzg1OSwgODM4NjIsIDgzODY1LCA4Mzg2OCwgODM4NzEsIDgzODc0LCAKKyAgICA4Mzg3NywgODM4ODAsIDgzODgzLCA4Mzg4NiwgODM4ODksIDgzODkyLCA4MzkwMCwgODM5MDksIDgzOTIwLCA4MzkyOCwgCisgICAgODM5MzYsIDgzOTQ1LCA4Mzk1NCwgODM5NjUsIDgzOTc3LCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzk4NiwgODM5OTEsIDgzOTk2LCAKKyAgICA4NDAwMywgODQwMTAsIDg0MDE2LCA4NDAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQwMjcsIDg0MDM3LCAKKyAgICA4NDA0NywgODQwNTcsIDg0MDY2LCA4NDA3NywgODQwODYsIDg0MDk1LCA4NDEwNSwgODQxMTUsIDg0MTI3LCA4NDEzOSwgCisgICAgODQxNTAsIDg0MTYxLCA4NDE3MiwgODQxODMsIDg0MTkzLCA4NDIwMywgODQyMTMsIDg0MjIzLCA4NDIzNCwgODQyNDUsIAorICAgIDg0MjQ5LCA4NDI1NCwgODQyNjMsIDg0MjcyLCA4NDI3NiwgODQyODAsIDg0Mjg0LCA4NDI4OSwgODQyOTQsIDg0Mjk5LCAKKyAgICA4NDMwNCwgODQzMDcsIDg0MzExLCAwLCA4NDMxNiwgODQzMTksIDg0MzIyLCA4NDMyNiwgODQzMzAsIDg0MzM1LCA4NDMzOSwgCisgICAgODQzNDMsIDg0MzQ4LCA4NDM1MywgODQzNjAsIDg0MzY3LCA4NDM3MCwgODQzNzMsIDg0Mzc2LCA4NDM3OSwgODQzODIsIAorICAgIDg0Mzg2LCA4NDM5MCwgMCwgODQzOTQsIDg0Mzk5LCA4NDQwMywgODQ0MDcsIDAsIDAsIDAsIDAsIDg0NDEyLCA4NDQxNywgCisgICAgODQ0MjQsIDg0NDI5LCA4NDQzNCwgMCwgODQ0MzksIDg0NDQ0LCA4NDQ0OSwgODQ0NTQsIDg0NDU5LCA4NDQ2NCwgODQ0NjksIAorICAgIDg0NDc0LCA4NDQ3OSwgODQ0ODQsIDg0NDg5LCA4NDQ5NCwgODQ1MDMsIDg0NTEyLCA4NDUyMCwgODQ1MjgsIDg0NTM3LCAKKyAgICA4NDU0NiwgODQ1NTUsIDg0NTY0LCA4NDU3MiwgODQ1ODAsIDg0NTg4LCA4NDU5NiwgODQ2MDEsIDg0NjA2LCA4NDYxMiwgCisgICAgODQ2MTgsIDg0NjI0LCA4NDYzMCwgODQ2MzgsIDg0NjQ2LCA4NDY1MiwgODQ2NTgsIDg0NjY0LCA4NDY3MCwgODQ2NzYsIAorICAgIDg0NjgyLCA4NDY4OCwgODQ2OTQsIDg0Njk5LCA4NDcwNCwgODQ3MDksIDg0NzE0LCA4NDcxOSwgODQ3MjQsIDg0NzI5LCAKKyAgICA4NDczNCwgODQ3NDAsIDg0NzQ2LCA4NDc1MiwgODQ3NTgsIDg0NzY0LCA4NDc3MCwgODQ3NzYsIDg0NzgyLCA4NDc4OCwgCisgICAgODQ3OTQsIDg0ODAwLCA4NDgwNiwgODQ4MTIsIDg0ODE4LCA4NDgyNCwgODQ4MzAsIDg0ODM2LCA4NDg0MiwgODQ4NDgsIAorICAgIDg0ODU0LCA4NDg2MCwgODQ4NjYsIDg0ODcyLCA4NDg3OCwgODQ4ODQsIDg0ODkwLCA4NDg5NiwgODQ5MDIsIDg0OTA4LCAKKyAgICA4NDkxNCwgODQ5MjAsIDg0OTI2LCA4NDkzMiwgODQ5MzgsIDg0OTQ0LCA4NDk1MCwgODQ5NTYsIDg0OTYyLCA4NDk2OCwgCisgICAgODQ5NzQsIDg0OTgwLCA4NDk4NiwgODQ5OTIsIDg0OTk4LCA4NTAwNCwgODUwMTAsIDg1MDE2LCA4NTAyMiwgODUwMjgsIAorICAgIDg1MDM0LCA4NTA0MCwgODUwNDYsIDg1MDUyLCA4NTA1OCwgODUwNjQsIDg1MDcwLCA4NTA3NiwgODUwODIsIDg1MDg4LCAKKyAgICA4NTA5NCwgODUwOTksIDg1MTA0LCA4NTEwOSwgODUxMTQsIDg1MTIwLCA4NTEyNiwgODUxMzIsIDg1MTM4LCA4NTE0NCwgCisgICAgODUxNTAsIDg1MTU2LCA4NTE2MiwgODUxNjgsIDg1MTc0LCA4NTE4MSwgODUxODgsIDg1MTkzLCA4NTE5OCwgODUyMDMsIAorICAgIDg1MjA4LCA4NTIyMCwgODUyMzIsIDg1MjQzLCA4NTI1NCwgODUyNjYsIDg1Mjc4LCA4NTI4NiwgMCwgMCwgODUyOTQsIDAsIAorICAgIDg1MzAyLCA4NTMwNiwgODUzMTAsIDg1MzEzLCA4NTMxNywgODUzMjEsIDg1MzI0LCA4NTMyNywgODUzMzEsIDg1MzM1LCAKKyAgICA4NTMzOCwgODUzNDEsIDg1MzQ0LCA4NTM0NywgODUzNTIsIDg1MzU1LCA4NTM1OSwgODUzNjIsIDg1MzY1LCA4NTM2OCwgCisgICAgODUzNzEsIDg1Mzc0LCA4NTM3NywgODUzODAsIDg1MzgzLCA4NTM4NiwgODUzODksIDg1MzkyLCA4NTM5NiwgODU0MDAsIAorICAgIDg1NDA0LCA4NTQwOCwgODU0MTMsIDg1NDE4LCA4NTQyNCwgODU0MzAsIDg1NDM2LCA4NTQ0MSwgODU0NDcsIDg1NDUzLCAKKyAgICA4NTQ1OSwgODU0NjQsIDg1NDcwLCA4NTQ3NiwgODU0ODEsIDg1NDg2LCA4NTQ5MiwgODU0OTcsIDg1NTAzLCA4NTUwOSwgCisgICAgODU1MTQsIDg1NTIwLCA4NTUyNiwgODU1MzEsIDg1NTM3LCA4NTU0MywgODU1NDksIDg1NTU1LCA4NTU2MSwgODU1NjUsIAorICAgIDg1NTcwLCA4NTU3NCwgODU1NzksIDg1NTgzLCA4NTU4OCwgODU1OTMsIDg1NTk5LCA4NTYwNSwgODU2MTEsIDg1NjE2LCAKKyAgICA4NTYyMiwgODU2MjgsIDg1NjM0LCA4NTYzOSwgODU2NDUsIDg1NjUxLCA4NTY1NiwgODU2NjEsIDg1NjY3LCA4NTY3MiwgCisgICAgODU2NzgsIDg1Njg0LCA4NTY4OSwgODU2OTUsIDg1NzAxLCA4NTcwNiwgODU3MTIsIDg1NzE4LCA4NTcyNCwgODU3MzAsIAorICAgIDg1NzM2LCA4NTc0MSwgODU3NDUsIDg1NzUwLCA4NTc1MiwgODU3NTcsIDg1NzYyLCA4NTc2OCwgODU3NzMsIDg1Nzc4LCAKKyAgICA4NTc4MiwgODU3ODgsIDg1NzkzLCA4NTc5OCwgODU4MDMsIDg1ODA4LCA4NTgxMywgODU4MTgsIDg1ODIzLCA4NTgyOSwgCisgICAgODU4MzUsIDg1ODQxLCA4NTg0OSwgODU4NTMsIDg1ODU3LCA4NTg2MSwgODU4NjUsIDg1ODY5LCA4NTg3MywgODU4NzgsIAorICAgIDg1ODgzLCA4NTg4OCwgODU4OTMsIDg1ODk3LCA4NTkwMiwgODU5MDcsIDg1OTEyLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKKyAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NSwgODU5NTAsIDg1OTU1LCA4NTk2MCwgODU5NjUsIDg1OTY5LCA4NTk3NCwgCisgICAgODU5NzksIDg1OTg0LCA4NTk4OSwgODU5OTMsIDg1OTk4LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxNywgODYwMjIsIAorICAgIDg2MDI3LCA4NjAzMSwgODYwMzYsIDg2MDQxLCA4NjA0NiwgODYwNTEsIDg2MDU2LCA4NjA2MSwgODYwNjgsIDg2MDc1LCAKKyAgICA4NjA3OSwgODYwODQsIDg2MDg5LCA4NjA5NCwgODYwOTksIDg2MTA0LCA4NjEwOSwgODYxMTQsIDg2MTE5LCA4NjEyNCwgCisgICAgODYxMjksIDg2MTM0LCA4NjEzOSwgODYxNDQsIDg2MTQ5LCA4NjE1NCwgODYxNTksIDg2MTY0LCA4NjE2OSwgODYxNzQsIAorICAgIDg2MTc5LCA4NjE4NCwgODYxODksIDg2MTk0LCA4NjE5OSwgODYyMDQsIDg2MjA5LCA4NjIxNCwgODYyMTksIDg2MjI0LCAwLCAKKyAgICAwLCAwLCA4NjIyOSwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NiwgODYyNjEsIAorICAgIDg2MjY2LCA4NjI3MCwgODYyNzUsIDg2MjgwLCAwLCAwLCA4NjI4NSwgODYyOTAsIDg2Mjk0LCA4NjI5OSwgODYzMDQsIAorICAgIDg2MzA5LCAwLCAwLCA4NjMxNCwgODYzMTksIDg2MzI0LCAwLCAwLCAwLCA4NjMyOCwgODYzMzIsIDg2MzM2LCA4NjM0MCwgCisgICAgODYzNDMsIDg2MzQ3LCA4NjM1MSwgMCwgODYzNTUsIDg2MzYxLCA4NjM2NCwgODYzNjgsIDg2MzcxLCA4NjM3NSwgODYzNzksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzgzLCA4NjM4OSwgODYzOTUsIDg2NDAxLCA4NjQwNywgMCwgMCwgCisgICAgODY0MTEsIDg2NDE3LCA4NjQyMywgODY0MjksIDg2NDM1LCA4NjQ0MSwgODY0NDgsIDg2NDU1LCA4NjQ2MiwgODY0NjksIAorICAgIDg2NDc2LCA4NjQ4MywgMCwgODY0OTAsIDg2NDk3LCA4NjUwNCwgODY1MTAsIDg2NTE3LCA4NjUyNCwgODY1MzEsIDg2NTM4LCAKKyAgICA4NjU0NCwgODY1NTEsIDg2NTU4LCA4NjU2NSwgODY1NzIsIDg2NTc4LCA4NjU4NSwgODY1OTIsIDg2NTk5LCA4NjYwNiwgCisgICAgODY2MTIsIDg2NjE5LCA4NjYyNiwgODY2MzMsIDg2NjQwLCA4NjY0NywgODY2NTQsIDg2NjYxLCAwLCA4NjY2OCwgODY2NzQsIAorICAgIDg2NjgxLCA4NjY4OCwgODY2OTUsIDg2NzAyLCA4NjcwOCwgODY3MTUsIDg2NzIyLCA4NjcyOSwgODY3MzYsIDg2NzQzLCAKKyAgICA4Njc1MCwgODY3NTcsIDg2NzYzLCA4Njc3MCwgODY3NzcsIDg2Nzg0LCA4Njc5MSwgMCwgODY3OTgsIDg2ODA1LCAwLCAKKyAgICA4NjgxMiwgODY4MTksIDg2ODI2LCA4NjgzMywgODY4NDAsIDg2ODQ3LCA4Njg1NCwgODY4NjEsIDg2ODY4LCA4Njg3NSwgCisgICAgODY4ODIsIDg2ODg5LCA4Njg5NiwgODY5MDMsIDg2OTEwLCAwLCAwLCA4NjkxNiwgODY5MjEsIDg2OTI2LCA4NjkzMSwgCisgICAgODY5MzYsIDg2OTQxLCA4Njk0NiwgODY5NTEsIDg2OTU2LCA4Njk2MSwgODY5NjYsIDg2OTcxLCA4Njk3NiwgODY5ODEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzA4LCA4ODcxNSwgODg3MjQsIDg4NzMzLCA4ODc0MCwgODg3NDcsIDg4NzU0LCAKLSAgICA4ODc2MSwgODg3NjgsIDg4Nzc1LCA4ODc4MSwgODg3ODgsIDg4Nzk1LCA4ODgwMiwgODg4MDksIDg4ODE2LCA4ODgyMywgCi0gICAgODg4MzAsIDg4ODM3LCA4ODg0NiwgODg4NTMsIDg4ODYwLCA4ODg2NywgODg4NzQsIDg4ODgxLCA4ODg4OCwgODg4OTUsIAotICAgIDg4OTAyLCA4ODkxMSwgODg5MTgsIDg4OTI1LCA4ODkzMiwgODg5MzksIDg4OTQ2LCA4ODk1MywgODg5NjIsIDg4OTY5LCAKLSAgICA4ODk3NiwgODg5ODMsIDg4OTkwLCA4ODk5OSwgODkwMDYsIDg5MDEzLCA4OTAyMCwgODkwMjgsIDg5MDM3LCAwLCAwLCAKLSAgICA4OTA0NiwgODkwNTAsIDg5MDU0LCA4OTA1OSwgODkwNjQsIDg5MDY5LCA4OTA3NCwgODkwNzgsIDg5MDgzLCA4OTA4OCwgCi0gICAgODkwOTMsIDg5MDk4LCA4OTEwMywgODkxMDgsIDg5MTEyLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzUsIAotICAgIDg5MTQwLCA4OTE0NSwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjQsIDg5MTY5LCA4OTE3NCwgODkxNzksIDAsIDAsIDAsIAotICAgIDg5MTg0LCA4OTE4OCwgODkxOTMsIDg5MTk4LCA4OTIwMiwgODkyMDcsIDg5MjExLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKLSAgICA4OTIzMSwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjQsIDg5MjY5LCA4OTI3MywgCi0gICAgODkyNzgsIDg5MjgzLCA4OTI4OCwgODkyOTMsIDg5Mjk4LCA4OTMwMywgODkzMDcsIDg5MzExLCA4OTMxNiwgODkzMjEsIAotICAgIDg5MzI2LCA4OTMzMSwgODkzMzYsIDg5MzQxLCA4OTM0NiwgODkzNTEsIDg5MzU2LCA4OTM2MSwgODkzNjYsIDg5MzcxLCAKLSAgICA4OTM3NiwgODkzODEsIDg5Mzg2LCA4OTM5MSwgODkzOTYsIDg5NDAxLCA4OTQwNiwgODk0MTEsIDg5NDE2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCAKKyAgICA4NzAyOCwgODcwMzUsIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgCisgICAgODcwOTgsIDg3MTA1LCA4NzExMiwgODcxMTksIDg3MTI3LCA4NzEzNSwgODcxNDIsIDg3MTQ5LCA4NzE1NCwgODcxNjIsIAorICAgIDg3MTcwLCA4NzE3NywgODcxODQsIDg3MTg5LCA4NzE5NiwgODcyMDEsIDg3MjA2LCA4NzIxMywgODcyMTgsIDg3MjIzLCAKKyAgICA4NzIyOCwgODcyMzYsIDg3MjQxLCA4NzI0NiwgODcyNTMsIDg3MjU4LCA4NzI2MywgODcyNzAsIDg3Mjc3LCA4NzI4MiwgCisgICAgODcyODcsIDg3MjkyLCA4NzI5NywgODczMDIsIDg3MzA3LCA4NzMxMiwgODczMTcsIDg3MzIyLCA4NzMyOSwgODczMzQsIAorICAgIDg3MzQxLCA4NzM0NiwgODczNTEsIDg3MzU2LCA4NzM2MSwgODczNjYsIDg3MzcxLCA4NzM3NiwgODczODEsIDg3Mzg2LCAKKyAgICA4NzM5MSwgODczOTYsIDg3NDAzLCA4NzQxMCwgODc0MTcsIDg3NDI0LCA4NzQzMCwgODc0MzUsIDg3NDQyLCA4NzQ0NywgCisgICAgODc0NTIsIDg3NDYxLCA4NzQ2OCwgODc0NzcsIDg3NDg0LCA4NzQ4OSwgODc0OTQsIDg3NTAyLCA4NzUwNywgODc1MTIsIAorICAgIDg3NTE3LCA4NzUyMiwgODc1MjcsIDg3NTM0LCA4NzUzOSwgODc1NDQsIDg3NTQ5LCA4NzU1NCwgODc1NTksIDg3NTY2LCAKKyAgICA4NzU3MywgODc1ODAsIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgCisgICAgODc2NDMsIDg3NjUwLCA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIAorICAgIDg3NzEzLCA4NzcyMCwgODc3MjcsIDg3NzM0LCA4Nzc0MSwgODc3NDgsIDg3NzU1LCAwLCAwLCAwLCAwLCAwLCA4Nzc2MiwgCisgICAgODc3NzAsIDg3Nzc4LCAwLCAwLCAwLCAwLCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NSwgODc3OTksIDg3ODAzLCAKKyAgICA4NzgwNywgODc4MTEsIDg3ODE1LCA4NzgxOSwgODc4MjQsIDg3ODI5LCA4NzgzNCwgODc4MzksIDg3ODQ0LCA4Nzg0OSwgCisgICAgODc4NTQsIDg3ODU5LCA4Nzg2NCwgODc4NzAsIDg3ODc2LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMywgODc5MTAsIAorICAgIDg3OTE3LCA4NzkyNCwgODc5MzAsIDg3OTM2LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCAKKyAgICA4Nzk4NCwgODc5OTEsIDg3OTk4LCA4ODAwNSwgODgwMTIsIDg4MDE5LCA4ODAyNiwgODgwMzMsIDg4MDQwLCAwLCAwLCAwLCAKKyAgICA4ODA0NywgODgwNTUsIDg4MDYzLCA4ODA3MSwgODgwNzksIDg4MDg3LCA4ODA5NywgODgxMDcsIDg4MTE1LCA4ODEyMywgCisgICAgODgxMzEsIDg4MTM5LCA4ODE0NywgODgxNTMsIDg4MTYwLCA4ODE2OSwgODgxNzgsIDg4MTg3LCA4ODE5NiwgODgyMDUsIAorICAgIDg4MjE0LCA4ODIyNCwgODgyMzUsIDg4MjQ1LCA4ODI1NiwgODgyNjUsIDg4Mjc0LCA4ODI4MywgODgyOTMsIDg4MzA0LCAKKyAgICA4ODMxNCwgODgzMjUsIDg4MzM2LCA4ODM0NSwgODgzNTMsIDg4MzU5LCA4ODM2NSwgODgzNzEsIDg4Mzc3LCA4ODM4NSwgCisgICAgODgzOTMsIDg4Mzk5LCA4ODQwNiwgODg0MTYsIDg4NDIzLCA4ODQzMCwgODg0MzcsIDg4NDQ0LCA4ODQ1MSwgODg0NjEsIAorICAgIDg4NDY4LCA4ODQ3NSwgODg0ODMsIDg4NDkxLCA4ODUwMCwgODg1MDksIDg4NTE4LCA4ODUyNywgODg1MzYsIDg4NTQ0LCAKKyAgICA4ODU1MywgODg1NjIsIDg4NTcxLCA4ODU3NSwgODg1ODIsIDg4NTg3LCA4ODU5MiwgODg1OTYsIDg4NjAwLCA4ODYwNCwgCisgICAgODg2MDgsIDg4NjEzLCA4ODYxOCwgODg2MjQsIDg4NjMwLCA4ODYzNCwgODg2NDAsIDg4NjQ0LCA4ODY0OCwgODg2NTIsIAorICAgIDg4NjU2LCA4ODY2MCwgODg2NjQsIDg4NjcwLCAwLCAwLCAwLCAwLCAwLCA4ODY3NCwgODg2NzksIDg4Njg0LCA4ODY4OSwgCisgICAgODg2OTQsIDg4NzAxLCA4ODcwNiwgODg3MTEsIDg4NzE2LCA4ODcyMSwgODg3MjYsIDg4NzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQyMSwgODk0MjUsIAotICAgIDg5NDMwLCA4OTQzNSwgODk0NDAsIDg5NDQ0LCA4OTQ0OSwgODk0NTQsIDg5NDU5LCA4OTQ2NCwgODk0NjgsIDg5NDcyLCAKLSAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAxLCA4OTUwNiwgODk1MTEsIDg5NTE2LCA4OTUyMSwgCi0gICAgODk1MjYsIDg5NTMwLCA4OTUzNSwgODk1NDAsIDg5NTQ1LCA4OTU1MCwgODk1NTUsIDg5NTYwLCA4OTU2NSwgMCwgODk1NzAsIAotICAgIDg5NTc1LCA4OTU4MCwgODk1ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NTkyLCA4OTU5NywgCi0gICAgODk2MDIsIDg5NjA3LCA4OTYxMiwgODk2MTcsIDg5NjIyLCA4OTYyNywgODk2MzIsIDg5NjM3LCA4OTY0MiwgODk2NDcsIAotICAgIDg5NjUyLCA4OTY1NywgODk2NjIsIDg5NjY3LCA4OTY3MiwgODk2NzcsIDg5NjgyLCA4OTY4NywgODk2OTIsIDg5Njk3LCAKLSAgICA4OTcwMiwgODk3MDcsIDg5NzEyLCA4OTcxNywgODk3MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzM2LCAKKyAgICA4ODc0MywgODg3NTIsIDg4NzYxLCA4ODc2OCwgODg3NzUsIDg4NzgyLCA4ODc4OSwgODg3OTYsIDg4ODAzLCA4ODgwOSwgCisgICAgODg4MTYsIDg4ODIzLCA4ODgzMCwgODg4MzcsIDg4ODQ0LCA4ODg1MSwgODg4NTgsIDg4ODY1LCA4ODg3NCwgODg4ODEsIAorICAgIDg4ODg4LCA4ODg5NSwgODg5MDIsIDg4OTA5LCA4ODkxNiwgODg5MjMsIDg4OTMwLCA4ODkzOSwgODg5NDYsIDg4OTUzLCAKKyAgICA4ODk2MCwgODg5NjcsIDg4OTc0LCA4ODk4MSwgODg5OTAsIDg4OTk3LCA4OTAwNCwgODkwMTEsIDg5MDE4LCA4OTAyNywgCisgICAgODkwMzQsIDg5MDQxLCA4OTA0OCwgODkwNTYsIDg5MDY1LCAwLCAwLCA4OTA3NCwgODkwNzgsIDg5MDgyLCA4OTA4NywgCisgICAgODkwOTIsIDg5MDk3LCA4OTEwMiwgODkxMDYsIDg5MTExLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzYsIAorICAgIDg5MTQwLCA4OTE0NCwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjMsIDg5MTY4LCA4OTE3MywgODkxNzcsIDg5MTgyLCAKKyAgICA4OTE4NywgODkxOTIsIDg5MTk3LCA4OTIwMiwgODkyMDcsIDAsIDAsIDAsIDg5MjEyLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKKyAgICA4OTIzMCwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjMsIDg5MjY3LCA4OTI3MiwgCisgICAgODkyNzcsIDg5MjgyLCA4OTI4NywgODkyOTIsIDg5Mjk3LCA4OTMwMSwgODkzMDYsIDg5MzExLCA4OTMxNiwgODkzMjEsIAorICAgIDg5MzI2LCA4OTMzMSwgODkzMzUsIDg5MzM5LCA4OTM0NCwgODkzNDksIDg5MzU0LCA4OTM1OSwgODkzNjQsIDg5MzY5LCAKKyAgICA4OTM3NCwgODkzNzksIDg5Mzg0LCA4OTM4OSwgODkzOTQsIDg5Mzk5LCA4OTQwNCwgODk0MDksIDg5NDE0LCA4OTQxOSwgCisgICAgODk0MjQsIDg5NDI5LCA4OTQzNCwgODk0MzksIDg5NDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTcyOSwgODk3MzQsIDg5NzM5LCAKLSAgICA4OTc0NCwgODk3NDksIDg5NzU0LCA4OTc1OSwgODk3NjQsIDg5NzY5LCA4OTc3NCwgODk3NzksIDg5Nzg0LCA4OTc4OSwgCi0gICAgODk3OTQsIDg5Nzk5LCA4OTgwNCwgODk4MDksIDg5ODE0LCA4OTgxOSwgODk4MjQsIDg5ODI5LCA4OTgzNCwgODk4MzksIAotICAgIDg5ODQ0LCA4OTg0OSwgODk4NTQsIDg5ODU5LCA4OTg2MywgODk4NjcsIDg5ODcxLCAwLCA4OTg3NiwgODk4ODIsIDg5ODg3LCAKLSAgICA4OTg5MiwgODk4OTcsIDg5OTAyLCA4OTkwOCwgODk5MTQsIDg5OTIwLCA4OTkyNiwgODk5MzIsIDg5OTM4LCA4OTk0NCwgCi0gICAgODk5NTAsIDg5OTU2LCA4OTk2MiwgODk5NjgsIDg5OTc0LCA4OTk4MCwgODk5ODUsIDg5OTkxLCA4OTk5NywgOTAwMDIsIAotICAgIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQyLCA5MDA0NywgOTAwNTMsIDkwMDU5LCAKLSAgICA5MDA2NCwgOTAwNzAsIDkwMDc2LCA5MDA4MiwgMCwgMCwgMCwgMCwgOTAwODcsIDkwMDkzLCA5MDA5OSwgOTAxMDUsIAotICAgIDkwMTExLCA5MDExNywgOTAxMjMsIDkwMTI5LCA5MDEzNSwgOTAxNDIsIDkwMTQ3LCA5MDE1MiwgOTAxNTgsIDkwMTY0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQ0OSwgODk0NTMsIDg5NDU4LCA4OTQ2MywgODk0NjgsIDg5NDcyLCAKKyAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAwLCA4OTUwNSwgODk1MTAsIDg5NTE1LCA4OTUyMCwgCisgICAgODk1MjQsIDg5NTI5LCA4OTUzNCwgODk1MzksIDg5NTQ0LCA4OTU0OSwgODk1NTQsIDg5NTU4LCA4OTU2MywgODk1NjgsIAorICAgIDg5NTczLCA4OTU3OCwgODk1ODMsIDg5NTg4LCA4OTU5MywgMCwgODk1OTgsIDg5NjAzLCA4OTYwOCwgODk2MTQsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NjIwLCA4OTYyNSwgODk2MzAsIDg5NjM1LCA4OTY0MCwgODk2NDUsIAorICAgIDg5NjUwLCA4OTY1NSwgODk2NjAsIDg5NjY1LCA4OTY3MCwgODk2NzUsIDg5NjgwLCA4OTY4NSwgODk2OTAsIDg5Njk1LCAKKyAgICA4OTcwMCwgODk3MDUsIDg5NzEwLCA4OTcxNSwgODk3MjAsIDg5NzI1LCA4OTczMCwgODk3MzUsIDg5NzQwLCA4OTc0NSwgCisgICAgODk3NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwMTcwLCA5MDE3NSwgOTAxODAsIAotICAgIDkwMTg1LCA5MDE5MSwgOTAxOTYsIDkwMjAyLCA5MDIwOCwgOTAyMTQsIDkwMjIwLCA5MDIyNywgOTAyMzMsIDkwMjQwLCAKLSAgICA5MDI0NSwgOTAyNTAsIDkwMjU1LCA5MDI2MCwgOTAyNjUsIDkwMjcwLCA5MDI3NSwgOTAyODAsIDkwMjg1LCA5MDI5MCwgCi0gICAgOTAyOTUsIDkwMzAwLCA5MDMwNSwgOTAzMTAsIDkwMzE1LCA5MDMyMCwgOTAzMjUsIDkwMzMwLCA5MDMzNSwgOTAzNDAsIAotICAgIDkwMzQ1LCA5MDM1MCwgOTAzNTUsIDkwMzYwLCA5MDM2NSwgOTAzNzAsIDkwMzc1LCA5MDM4MCwgOTAzODUsIDkwMzkwLCAKLSAgICA5MDM5NSwgOTA0MDEsIDkwNDA2LCA5MDQxMiwgOTA0MTgsIDkwNDI0LCA5MDQzMCwgOTA0MzcsIDkwNDQzLCA5MDQ1MCwgCi0gICAgOTA0NTUsIDkwNDYwLCA5MDQ2NSwgOTA0NzAsIDkwNDc1LCA5MDQ4MCwgOTA0ODUsIDkwNDkwLCA5MDQ5NSwgOTA1MDAsIAotICAgIDkwNTA1LCA5MDUxMCwgOTA1MTUsIDkwNTIwLCA5MDUyNSwgOTA1MzAsIDkwNTM1LCA5MDU0MCwgOTA1NDUsIDkwNTUwLCAKLSAgICA5MDU1NSwgOTA1NjAsIDkwNTY1LCA5MDU3MCwgOTA1NzUsIDkwNTgwLCA5MDU4NSwgOTA1OTAsIDkwNTk1LCA5MDYwMCwgCi0gICAgOTA2MDUsIDkwNjEwLCA5MDYxNSwgOTA2MjAsIDkwNjI1LCA5MDYzMCwgOTA2MzUsIDkwNjQwLCA5MDY0NSwgOTA2NTAsIAotICAgIDkwNjU1LCA5MDY2MCwgOTA2NjUsIDkwNjcwLCA5MDY3NSwgOTA2ODAsIDkwNjg1LCA5MDY5MCwgOTA2OTUsIDkwNzAwLCAKLSAgICA5MDcwNSwgOTA3MTAsIDkwNzE1LCA5MDcyMCwgOTA3MjUsIDkwNzMwLCA5MDczNSwgOTA3NDAsIDkwNzQ1LCA5MDc1MCwgCi0gICAgOTA3NTUsIDkwNzYwLCA5MDc2NSwgOTA3NzAsIDkwNzc1LCA5MDc4MCwgOTA3ODUsIDkwNzkwLCA5MDc5NSwgOTA4MDAsIAotICAgIDkwODA1LCA5MDgxMCwgOTA4MTUsIDkwODIwLCA5MDgyNSwgOTA4MzAsIDkwODM1LCA5MDg0MCwgOTA4NDUsIDkwODUwLCAKLSAgICA5MDg1NSwgOTA4NjAsIDkwODY1LCA5MDg2OSwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5OCwgCi0gICAgOTA5MDMsIDkwOTA4LCA5MDkxMywgOTA5MTgsIDkwOTIzLCA5MDkyOCwgOTA5MzIsIDkwOTM2LCA5MDk0MCwgOTA5NDQsIAotICAgIDkwOTQ4LCA5MDk1MiwgOTA5NTYsIDkwOTYxLCA5MDk2NiwgMCwgMCwgOTA5NzEsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIAotICAgIDkwOTg4LCA5MDk5MiwgOTA5OTYsIDkxMDAwLCA5MTAwNCwgOTEwMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NzU3LCA4OTc2MiwgODk3NjcsIDg5NzcyLCA4OTc3NywgODk3ODIsIDg5Nzg3LCAKKyAgICA4OTc5MiwgODk3OTcsIDg5ODAyLCA4OTgwNywgODk4MTIsIDg5ODE3LCA4OTgyMiwgODk4MjcsIDg5ODMyLCA4OTgzNywgCisgICAgODk4NDIsIDg5ODQ3LCA4OTg1MiwgODk4NTcsIDg5ODYyLCA4OTg2NywgODk4NzIsIDg5ODc3LCA4OTg4MiwgODk4ODcsIAorICAgIDg5ODkxLCA4OTg5NSwgODk4OTksIDAsIDg5OTA0LCA4OTkxMCwgODk5MTUsIDg5OTIwLCA4OTkyNSwgODk5MzAsIDg5OTM2LCAKKyAgICA4OTk0MiwgODk5NDgsIDg5OTU0LCA4OTk2MCwgODk5NjYsIDg5OTcyLCA4OTk3OCwgODk5ODQsIDg5OTkwLCA4OTk5NiwgCisgICAgOTAwMDIsIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQxLCA5MDA0NywgOTAwNTMsIAorICAgIDkwMDU4LCA5MDA2NCwgOTAwNzAsIDkwMDc1LCA5MDA4MSwgOTAwODcsIDkwMDkyLCA5MDA5OCwgOTAxMDQsIDkwMTEwLCAwLCAKKyAgICAwLCAwLCAwLCA5MDExNSwgOTAxMjEsIDkwMTI3LCA5MDEzMywgOTAxMzksIDkwMTQ1LCA5MDE1MSwgOTAxNTcsIDkwMTYzLCAKKyAgICA5MDE3MCwgOTAxNzUsIDkwMTgwLCA5MDE4NiwgOTAxOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDkwMTk4LCA5MDIwMywgOTAyMDgsIDkwMjEzLCA5MDIxOSwgOTAyMjQsIDkwMjMwLCA5MDIzNiwgCisgICAgOTAyNDIsIDkwMjQ4LCA5MDI1NSwgOTAyNjEsIDkwMjY4LCA5MDI3MywgOTAyNzgsIDkwMjgzLCA5MDI4OCwgOTAyOTMsIAorICAgIDkwMjk4LCA5MDMwMywgOTAzMDgsIDkwMzEzLCA5MDMxOCwgOTAzMjMsIDkwMzI4LCA5MDMzMywgOTAzMzgsIDkwMzQzLCAKKyAgICA5MDM0OCwgOTAzNTMsIDkwMzU4LCA5MDM2MywgOTAzNjgsIDkwMzczLCA5MDM3OCwgOTAzODMsIDkwMzg4LCA5MDM5MywgCisgICAgOTAzOTgsIDkwNDAzLCA5MDQwOCwgOTA0MTMsIDkwNDE4LCA5MDQyMywgOTA0MjksIDkwNDM0LCA5MDQ0MCwgOTA0NDYsIAorICAgIDkwNDUyLCA5MDQ1OCwgOTA0NjUsIDkwNDcxLCA5MDQ3OCwgOTA0ODMsIDkwNDg4LCA5MDQ5MywgOTA0OTgsIDkwNTAzLCAKKyAgICA5MDUwOCwgOTA1MTMsIDkwNTE4LCA5MDUyMywgOTA1MjgsIDkwNTMzLCA5MDUzOCwgOTA1NDMsIDkwNTQ4LCA5MDU1MywgCisgICAgOTA1NTgsIDkwNTYzLCA5MDU2OCwgOTA1NzMsIDkwNTc4LCA5MDU4MywgOTA1ODgsIDkwNTkzLCA5MDU5OCwgOTA2MDMsIAorICAgIDkwNjA4LCA5MDYxMywgOTA2MTgsIDkwNjIzLCA5MDYyOCwgOTA2MzMsIDkwNjM4LCA5MDY0MywgOTA2NDgsIDkwNjUzLCAKKyAgICA5MDY1OCwgOTA2NjMsIDkwNjY4LCA5MDY3MywgOTA2NzgsIDkwNjgzLCA5MDY4OCwgOTA2OTMsIDkwNjk4LCA5MDcwMywgCisgICAgOTA3MDgsIDkwNzEzLCA5MDcxOCwgOTA3MjMsIDkwNzI4LCA5MDczMywgOTA3MzgsIDkwNzQzLCA5MDc0OCwgOTA3NTMsIAorICAgIDkwNzU4LCA5MDc2MywgOTA3NjgsIDkwNzczLCA5MDc3OCwgOTA3ODMsIDkwNzg4LCA5MDc5MywgOTA3OTgsIDkwODAzLCAKKyAgICA5MDgwOCwgOTA4MTMsIDkwODE4LCA5MDgyMywgOTA4MjgsIDkwODMzLCA5MDgzOCwgOTA4NDMsIDkwODQ4LCA5MDg1MywgCisgICAgOTA4NTgsIDkwODYzLCA5MDg2OCwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5NywgOTA5MDEsIAorICAgIDkwOTA2LCA5MDkxMSwgOTA5MTYsIDkwOTIxLCA5MDkyNiwgOTA5MzEsIDkwOTM2LCA5MDk0MSwgOTA5NDYsIDkwOTUxLCAKKyAgICA5MDk1NiwgOTA5NjAsIDkwOTY0LCA5MDk2OCwgOTA5NzIsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIDkwOTg5LCA5MDk5NCwgMCwgCisgICAgMCwgOTA5OTksIDkxMDA0LCA5MTAwOCwgOTEwMTIsIDkxMDE2LCA5MTAyMCwgOTEwMjQsIDkxMDI4LCA5MTAzMiwgOTEwMzYsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkxMDEyLCA5MTAxNiwgOTEwMjAsIDkxMDI0LCA5MTAyOCwgOTEwMzIsIDAsIDAsIDkxMDM3LCAwLCAKLSAgICA5MTA0MiwgOTEwNDYsIDkxMDUxLCA5MTA1NiwgOTEwNjEsIDkxMDY2LCA5MTA3MSwgOTEwNzYsIDkxMDgxLCA5MTA4NiwgCi0gICAgOTEwOTEsIDkxMDk1LCA5MTEwMCwgOTExMDUsIDkxMTEwLCA5MTExNSwgOTExMTksIDkxMTI0LCA5MTEyOSwgOTExMzQsIAotICAgIDkxMTM5LCA5MTE0MywgOTExNDgsIDkxMTUzLCA5MTE1OCwgOTExNjMsIDkxMTY3LCA5MTE3MiwgOTExNzcsIDkxMTgyLCAKLSAgICA5MTE4NywgOTExOTEsIDkxMTk2LCA5MTIwMSwgOTEyMDYsIDkxMjExLCA5MTIxNiwgOTEyMjEsIDkxMjI2LCA5MTIzMCwgCi0gICAgOTEyMzUsIDkxMjQwLCA5MTI0NSwgOTEyNTAsIDAsIDkxMjU1LCA5MTI2MCwgMCwgMCwgMCwgOTEyNjUsIDAsIDAsIDkxMjcwLCAKLSAgICA5MTI3NSwgOTEyODIsIDkxMjg5LCA5MTI5NiwgOTEzMDMsIDkxMzEwLCA5MTMxNywgOTEzMjQsIDkxMzMxLCA5MTMzOCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTEwNDAsIDkxMDQ0LCA5MTA0OCwgOTEwNTIsIAorICAgIDkxMDU2LCA5MTA2MCwgMCwgMCwgOTEwNjUsIDAsIDkxMDcwLCA5MTA3NCwgOTEwNzksIDkxMDg0LCA5MTA4OSwgOTEwOTQsIAorICAgIDkxMDk5LCA5MTEwNCwgOTExMDksIDkxMTE0LCA5MTExOSwgOTExMjMsIDkxMTI4LCA5MTEzMywgOTExMzgsIDkxMTQzLCAKKyAgICA5MTE0NywgOTExNTIsIDkxMTU3LCA5MTE2MiwgOTExNjcsIDkxMTcxLCA5MTE3NiwgOTExODEsIDkxMTg2LCA5MTE5MSwgCisgICAgOTExOTUsIDkxMjAwLCA5MTIwNSwgOTEyMTAsIDkxMjE1LCA5MTIxOSwgOTEyMjQsIDkxMjI5LCA5MTIzNCwgOTEyMzksIAorICAgIDkxMjQ0LCA5MTI0OSwgOTEyNTQsIDkxMjU4LCA5MTI2MywgOTEyNjgsIDkxMjczLCA5MTI3OCwgMCwgOTEyODMsIDkxMjg4LCAKKyAgICAwLCAwLCAwLCA5MTI5MywgMCwgMCwgOTEyOTgsIDkxMzAzLCA5MTMxMCwgOTEzMTcsIDkxMzI0LCA5MTMzMSwgOTEzMzgsIAogICAgIDkxMzQ1LCA5MTM1MiwgOTEzNTksIDkxMzY2LCA5MTM3MywgOTEzODAsIDkxMzg3LCA5MTM5NCwgOTE0MDEsIDkxNDA4LCAKLSAgICA5MTQxNSwgOTE0MjIsIDAsIDkxNDI5LCA5MTQzNiwgOTE0NDIsIDkxNDQ4LCA5MTQ1NCwgOTE0NjEsIDkxNDY4LCA5MTQ3NiwgCi0gICAgOTE0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNDkzLCA5MTQ5OCwgOTE1MDMsIDkxNTA4LCA5MTUxMywgOTE1MTgsIAotICAgIDkxNTIzLCA5MTUyOCwgOTE1MzMsIDkxNTM4LCA5MTU0MywgOTE1NDgsIDkxNTUzLCA5MTU1OCwgOTE1NjMsIDkxNTY4LCAKLSAgICA5MTU3MywgOTE1NzgsIDkxNTgzLCA5MTU4OCwgOTE1OTMsIDkxNTk4LCA5MTYwMywgOTE2MDcsIDkxNjEyLCA5MTYxNywgCi0gICAgOTE2MjMsIDkxNjI3LCAwLCAwLCAwLCA5MTYzMSwgOTE2MzcsIDkxNjQxLCA5MTY0NiwgOTE2NTEsIDkxNjU2LCA5MTY2MCwgCi0gICAgOTE2NjUsIDkxNjY5LCA5MTY3NCwgOTE2NzksIDkxNjgzLCA5MTY4NywgOTE2OTIsIDkxNjk2LCA5MTcwMCwgOTE3MDUsIAotICAgIDkxNzEwLCA5MTcxNCwgOTE3MTksIDkxNzI0LCA5MTcyOSwgOTE3MzQsIDkxNzM5LCA5MTc0NCwgOTE3NDksIDkxNzU0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTc1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3NjQsIAotICAgIDkxNzcwLCA5MTc3NiwgOTE3ODIsIDkxNzg4LCA5MTc5NCwgOTE4MDEsIDkxODA4LCA5MTgxNSwgOTE4MjEsIDkxODI3LCAKLSAgICA5MTgzMywgOTE4NDAsIDkxODQ3LCA5MTg1NCwgOTE4NjAsIDkxODY3LCA5MTg3NCwgOTE4ODEsIDkxODg4LCA5MTg5NCwgCi0gICAgOTE5MDEsIDkxOTA4LCA5MTkxNCwgOTE5MjEsIDkxOTI4LCA5MTkzNSwgOTE5NDIsIDkxOTQ5LCA5MTk1NSwgOTE5NjIsIAotICAgIDkxOTY5LCA5MTk3NiwgOTE5ODIsIDkxOTg4LCA5MTk5NCwgOTIwMDAsIDkyMDA2LCA5MjAxMywgOTIwMjAsIDkyMDI2LCAKLSAgICA5MjAzMiwgOTIwMzgsIDkyMDQ1LCA5MjA1MSwgOTIwNTgsIDkyMDY1LCA5MjA3MiwgOTIwNzgsIDkyMDg2LCA5MjA5MywgCi0gICAgOTIwOTksIDkyMTA2LCA5MjExMywgOTIxMjAsIDkyMTI2LCAwLCAwLCAwLCAwLCAwLCAwLCA5MjEzMywgOTIxNDEsIDAsIDAsIAorICAgIDkxNDE1LCA5MTQyMiwgOTE0MjksIDkxNDM2LCA5MTQ0MywgOTE0NTAsIDAsIDkxNDU3LCA5MTQ2NCwgOTE0NzAsIDkxNDc2LCAKKyAgICA5MTQ4MiwgOTE0ODksIDkxNDk2LCA5MTUwNCwgOTE1MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNTIxLCA5MTUyNiwgCisgICAgOTE1MzEsIDkxNTM2LCA5MTU0MSwgOTE1NDYsIDkxNTUxLCA5MTU1NiwgOTE1NjEsIDkxNTY2LCA5MTU3MSwgOTE1NzYsIAorICAgIDkxNTgxLCA5MTU4NiwgOTE1OTEsIDkxNTk2LCA5MTYwMSwgOTE2MDYsIDkxNjExLCA5MTYxNiwgOTE2MjEsIDkxNjI2LCAKKyAgICA5MTYzMSwgOTE2MzUsIDkxNjQwLCA5MTY0NSwgOTE2NTEsIDkxNjU1LCAwLCAwLCAwLCA5MTY1OSwgOTE2NjUsIDkxNjY5LCAKKyAgICA5MTY3NCwgOTE2NzksIDkxNjg0LCA5MTY4OCwgOTE2OTMsIDkxNjk3LCA5MTcwMiwgOTE3MDcsIDkxNzExLCA5MTcxNSwgCisgICAgOTE3MjAsIDkxNzI0LCA5MTcyOCwgOTE3MzMsIDkxNzM4LCA5MTc0MiwgOTE3NDcsIDkxNzUyLCA5MTc1NywgOTE3NjIsIAorICAgIDkxNzY3LCA5MTc3MiwgOTE3NzcsIDkxNzgyLCAwLCAwLCAwLCAwLCAwLCA5MTc4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTIxNDksIDkyMTUzLCA5MjE1OCwgOTIxNjMsIDAsIAotICAgIDkyMTY5LCA5MjE3NCwgMCwgMCwgMCwgMCwgMCwgOTIxNzksIDkyMTg1LCA5MjE5MiwgOTIxOTcsIDkyMjAyLCA5MjIwNiwgCi0gICAgOTIyMTEsIDkyMjE2LCAwLCA5MjIyMSwgOTIyMjYsIDkyMjMxLCAwLCA5MjIzNiwgOTIyNDEsIDkyMjQ2LCA5MjI1MSwgCi0gICAgOTIyNTYsIDkyMjYxLCA5MjI2NiwgOTIyNzEsIDkyMjc2LCA5MjI4MSwgOTIyODYsIDkyMjkwLCA5MjI5NCwgOTIyOTksIAotICAgIDkyMzA0LCA5MjMwOSwgOTIzMTMsIDkyMzE3LCA5MjMyMSwgOTIzMjYsIDkyMzMxLCA5MjMzNiwgOTIzNDEsIDkyMzQ1LCAKLSAgICA5MjM1MCwgOTIzNTQsIDkyMzU5LCAwLCAwLCAwLCAwLCA5MjM2NCwgOTIzNzAsIDkyMzc1LCAwLCAwLCAwLCAwLCA5MjM4MCwgCi0gICAgOTIzODQsIDkyMzg4LCA5MjM5MiwgOTIzOTYsIDkyNDAwLCA5MjQwNSwgOTI0MTAsIDkyNDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5MjQyMiwgOTI0MjgsIDkyNDM1LCA5MjQ0MSwgOTI0NDgsIDkyNDU0LCA5MjQ2MCwgOTI0NjYsIDkyNDczLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5MjQ3OSwgOTI0ODcsIDkyNDk1LCA5MjUwMywgOTI1MTEsIDkyNTE5LCA5MjUyNywgOTI1MzUsIAotICAgIDkyNTQzLCA5MjU1MSwgOTI1NTksIDkyNTY3LCA5MjU3NSwgOTI1ODMsIDkyNTkxLCA5MjU5OSwgOTI2MDcsIDkyNjE1LCAKLSAgICA5MjYyMywgOTI2MzEsIDkyNjM5LCA5MjY0NywgOTI2NTUsIDkyNjYzLCA5MjY3MSwgOTI2NzksIDkyNjg3LCA5MjY5NSwgCi0gICAgOTI3MDMsIDkyNzExLCA5MjcxOCwgOTI3MjYsIDkyNzM0LCA5MjczOCwgOTI3NDMsIDkyNzQ4LCA5Mjc1MywgOTI3NTgsIAotICAgIDkyNzYzLCA5Mjc2OCwgOTI3NzMsIDkyNzc3LCA5Mjc4MiwgOTI3ODYsIDkyNzkxLCA5Mjc5NSwgOTI4MDAsIDkyODA0LCAKLSAgICA5MjgwOSwgOTI4MTQsIDkyODE5LCA5MjgyNCwgOTI4MjksIDkyODM0LCA5MjgzOSwgOTI4NDQsIDkyODQ5LCA5Mjg1NCwgCi0gICAgOTI4NTksIDkyODY0LCA5Mjg2OSwgOTI4NzQsIDkyODc5LCA5Mjg4NCwgOTI4ODksIDkyODk0LCA5Mjg5OSwgOTI5MDQsIAotICAgIDkyOTA5LCA5MjkxNCwgOTI5MTksIDkyOTI0LCA5MjkyOSwgOTI5MzQsIDkyOTM5LCA5Mjk0NCwgOTI5NDksIDkyOTU0LCAKLSAgICA5Mjk1OSwgOTI5NjQsIDkyOTY5LCA5Mjk3NCwgOTI5NzksIDkyOTg0LCA5Mjk4OSwgOTI5OTQsIDAsIDAsIDAsIDkyOTk5LCAKLSAgICA5MzAwNCwgOTMwMTMsIDkzMDIxLCA5MzAzMCwgOTMwMzksIDkzMDUwLCA5MzA2MSwgOTMwNjgsIDkzMDc1LCA5MzA4MiwgCi0gICAgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCA5MzE0NSwgOTMxNTIsIAotICAgIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgMCwgMCwgOTMyMTUsIAotICAgIDkzMjIxLCA5MzIyNywgOTMyMzMsIDkzMjM5LCA5MzI0NiwgOTMyNTMsIDkzMjYxLCA5MzI2OSwgOTMyNzYsIDkzMjgzLCAKLSAgICA5MzI5MCwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIDkzMzQ2LCA5MzM1MywgCi0gICAgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgMCwgMCwgMCwgMCwgMCwgOTM0MDIsIDkzNDA4LCAKLSAgICA5MzQxNCwgOTM0MjAsIDkzNDI2LCA5MzQzMywgOTM0NDAsIDkzNDQ4LCA5MzQ1NiwgOTM0NjIsIDkzNDY4LCA5MzQ3NSwgCi0gICAgOTM0ODEsIDkzNDg3LCA5MzQ5MywgOTM0OTksIDkzNTA2LCA5MzUxMywgOTM1MjAsIDkzNTI3LCA5MzUzNCwgOTM1NDEsIAotICAgIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgOTM2MDQsIDkzNjExLCAKLSAgICA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIDkzNjc0LCA5MzY4MSwgCi0gICAgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCA5Mzc0NCwgOTM3NTEsIAotICAgIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgOTM4MTQsIDkzODIxLCAKLSAgICA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIDkzODg0LCA5Mzg5MSwgCi0gICAgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCA5Mzk1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTM5NjEsIDkzOTY1LCA5Mzk2OSwgOTM5NzMsIDkzOTc3LCA5Mzk4MSwgOTM5ODUsIDkzOTg5LCAKLSAgICA5Mzk5MywgOTM5OTcsIDk0MDAyLCA5NDAwNywgOTQwMTIsIDk0MDE3LCA5NDAyMiwgOTQwMjcsIDk0MDMyLCA5NDAzNywgCi0gICAgOTQwNDIsIDk0MDQ4LCA5NDA1NCwgOTQwNjAsIDk0MDY3LCA5NDA3NCwgOTQwODEsIDk0MDg4LCA5NDA5NSwgOTQxMDIsIAotICAgIDk0MTA5LCA5NDExNiwgOTQxMjMsIDAsIDk0MTMwLCA5NDEzNCwgOTQxMzgsIDk0MTQyLCA5NDE0NiwgOTQxNTAsIDk0MTUzLCAKLSAgICA5NDE1NywgOTQxNjAsIDk0MTY0LCA5NDE2NywgOTQxNzEsIDk0MTc1LCA5NDE4MCwgOTQxODQsIDk0MTg5LCA5NDE5MiwgCi0gICAgOTQxOTYsIDk0MTk5LCA5NDIwMywgOTQyMDYsIDk0MjEwLCA5NDIxNCwgOTQyMTgsIDk0MjIyLCA5NDIyNiwgOTQyMzAsIAotICAgIDk0MjM0LCA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCAKLSAgICA5NDI3NCwgOTQyNzgsIDk0MjgxLCA5NDI4NCwgOTQyODgsIDk0MjkyLCA5NDI5NiwgOTQyOTksIDk0MzAyLCA5NDMwNSwgCi0gICAgOTQzMDksIDk0MzEzLCA5NDMxNywgOTQzMjEsIDk0MzI0LCA5NDMyNywgOTQzMzEsIDk0MzM3LCA5NDM0MywgOTQzNDksIAotICAgIDk0MzU0LCA5NDM2MSwgOTQzNjUsIDk0MzcwLCA5NDM3NCwgOTQzNzksIDk0Mzg0LCA5NDM5MCwgOTQzOTUsIDk0NDAxLCAKLSAgICA5NDQwNSwgOTQ0MTAsIDk0NDE0LCA5NDQxOSwgOTQ0MjIsIDk0NDI1LCA5NDQyOSwgOTQ0MzQsIDk0NDQwLCA5NDQ0NSwgCi0gICAgOTQ0NTEsIDAsIDAsIDAsIDAsIDk0NDU2LCA5NDQ1OSwgOTQ0NjIsIDk0NDY1LCA5NDQ2OCwgOTQ0NzEsIDk0NDc0LCAKLSAgICA5NDQ3NywgOTQ0ODAsIDk0NDgzLCA5NDQ4NywgOTQ0OTEsIDk0NDk1LCA5NDQ5OSwgOTQ1MDMsIDk0NTA3LCA5NDUxMSwgCi0gICAgOTQ1MTUsIDk0NTE5LCA5NDUyNCwgOTQ1MjksIDk0NTMzLCA5NDUzNiwgOTQ1MzksIDk0NTQyLCA5NDU0NSwgOTQ1NDgsIAotICAgIDk0NTUxLCA5NDU1NCwgOTQ1NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk0NTYwLCA5NDU2NSwgOTQ1NzAsIDk0NTc1LCA5NDU3OSwgOTQ1ODQsIDk0NTg4LCA5NDU5MywgOTQ1OTcsIDk0NjAyLCAKLSAgICA5NDYwNiwgOTQ2MTEsIDk0NjE1LCA5NDYyMCwgOTQ2MjQsIDk0NjI5LCA5NDYzNCwgOTQ2MzksIDk0NjQ0LCA5NDY0OSwgCi0gICAgOTQ2NTQsIDk0NjU5LCA5NDY2NCwgOTQ2NjksIDk0Njc0LCA5NDY3OSwgOTQ2ODQsIDk0Njg5LCA5NDY5NCwgOTQ2OTksIAotICAgIDk0NzA0LCA5NDcwOSwgOTQ3MTQsIDk0NzE5LCA5NDcyNCwgOTQ3MjgsIDk0NzMyLCA5NDczNywgOTQ3NDIsIDk0NzQ3LCAKLSAgICA5NDc1MSwgOTQ3NTUsIDk0NzU5LCA5NDc2NCwgOTQ3NjksIDk0Nzc0LCA5NDc3OSwgOTQ3ODMsIDk0Nzg3LCA5NDc5MywgCi0gICAgOTQ3OTgsIDk0ODA0LCA5NDgwOSwgOTQ4MTUsIDk0ODIwLCA5NDgyNiwgOTQ4MzEsIDk0ODM3LCA5NDg0MiwgOTQ4NDcsIAotICAgIDk0ODUyLCA5NDg1NywgOTQ4NjEsIDk0ODY2LCA5NDg3MiwgOTQ4NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDk0ODgxLCA5NDg4OCwgOTQ4OTUsIDk0OTAyLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCA5NDkzMCwgCi0gICAgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgOTUwMDAsIAotICAgIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTA1NiwgOTUwNjMsIDk1MDY5LCA5NTA3NSwgOTUwODEsIDk1MDg3LCA5NTA5MywgOTUwOTksIDk1MTA1LCA5NTExMSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOTUxMTcsIDk1MTIyLCA5NTEyNywgOTUxMzIsIDk1MTM3LCA5NTE0MSwgOTUxNDUsIDk1MTQ5LCAKLSAgICA5NTE1NCwgOTUxNTksIDk1MTY0LCA5NTE2OSwgOTUxNzQsIDk1MTc5LCA5NTE4NCwgOTUxODksIDk1MTk0LCA5NTE5OSwgCi0gICAgOTUyMDQsIDk1MjA5LCA5NTIxNCwgOTUyMTksIDk1MjI0LCA5NTIyOSwgOTUyMzQsIDk1MjM5LCA5NTI0NCwgOTUyNDksIAotICAgIDk1MjU0LCA5NTI1OSwgOTUyNjQsIDk1MjY5LCA5NTI3NCwgOTUyNzksIDk1Mjg0LCA5NTI4OSwgOTUyOTQsIDk1Mjk5LCAKLSAgICA5NTMwNCwgOTUzMDksIDk1MzE0LCA5NTMxOSwgOTUzMjUsIDk1MzMwLCA5NTMzNiwgOTUzNDEsIDk1MzQ3LCA5NTM1MiwgCi0gICAgOTUzNTgsIDk1MzY0LCA5NTM2OCwgOTUzNzMsIDk1Mzc3LCAwLCA5NTM4MSwgOTUzODYsIDk1MzkwLCA5NTM5NCwgOTUzOTgsIAotICAgIDk1NDAyLCA5NTQwNiwgOTU0MTAsIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI3LCA5NTQzMSwgOTU0MzYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NDQxLCA5NTQ0NSwgOTU0NDksIDk1NDUzLCA5NTQ1NiwgOTU0NjAsIAotICAgIDk1NDYzLCA5NTQ2NywgOTU0NzAsIDk1NDc0LCA5NTQ3OCwgOTU0ODMsIDk1NDg3LCA5NTQ5MiwgOTU0OTUsIDk1NDk5LCAKLSAgICA5NTUwMiwgOTU1MDYsIDk1NTA5LCA5NTUxMywgOTU1MTcsIDk1NTIxLCA5NTUyNSwgOTU1MjksIDk1NTMzLCA5NTUzNywgCi0gICAgOTU1NDEsIDk1NTQ1LCA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIAotICAgIDk1NTgxLCA5NTU4NCwgOTU1ODcsIDk1NTkxLCA5NTU5NSwgOTU1OTksIDk1NjAyLCA5NTYwNSwgOTU2MDgsIDk1NjEyLCAKLSAgICA5NTYxNiwgOTU2MjAsIDk1NjI0LCA5NTYyOCwgOTU2MzEsIDk1NjM0LCA5NTYzOSwgOTU2NDMsIDk1NjQ4LCA5NTY1MiwgCi0gICAgOTU2NTcsIDk1NjYyLCA5NTY2OCwgOTU2NzMsIDk1Njc5LCA5NTY4MywgOTU2ODgsIDk1NjkyLCA5NTY5NywgOTU3MDEsIAotICAgIDk1NzA1LCA5NTcwOSwgOTU3MTMsIDk1NzE2LCA5NTcxOSwgOTU3MjMsIDk1NzI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTczMCwgOTU3MzQsIDk1NzM3LCA5NTc0MCwgOTU3NDMsIDk1NzQ2LCA5NTc0OSwgOTU3NTIsIDk1NzU1LCA5NTc1OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NjEsIDk1NzY1LCA5NTc3MCwgOTU3NzQsIDk1Nzc5LCAKLSAgICA5NTc4MywgOTU3ODgsIDk1NzkyLCA5NTc5NywgOTU4MDEsIDk1ODA2LCA5NTgxMCwgOTU4MTUsIDk1ODIwLCA5NTgyNSwgCi0gICAgOTU4MzAsIDk1ODM1LCA5NTg0MCwgOTU4NDUsIDk1ODUwLCA5NTg1NSwgOTU4NjAsIDk1ODY1LCA5NTg3MCwgOTU4NzUsIAotICAgIDk1ODgwLCA5NTg4NSwgOTU4OTAsIDk1ODk1LCA5NTkwMCwgOTU5MDQsIDk1OTA4LCA5NTkxMywgOTU5MTgsIDk1OTIzLCAKLSAgICA5NTkyNywgOTU5MzEsIDk1OTM1LCA5NTk0MCwgOTU5NDUsIDk1OTUwLCA5NTk1NCwgOTU5NTgsIDk1OTYzLCA5NTk2OCwgCi0gICAgOTU5NzMsIDk1OTc5LCA5NTk4NCwgOTU5OTAsIDk1OTk1LCA5NjAwMSwgOTYwMDYsIDk2MDEyLCA5NjAxNywgOTYwMjMsIAotICAgIDk2MDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjAzMywgOTYwMzgsIDk2MDQyLCA5NjA0NiwgOTYwNTAsIDk2MDU0LCAKLSAgICA5NjA1OCwgOTYwNjIsIDk2MDY2LCA5NjA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNzQsIDk2MDc3LCA5NjA4MiwgOTYwODgsIAotICAgIDk2MDk2LCA5NjEwMSwgOTYxMDcsIDk2MTE1LCA5NjEyMSwgOTYxMjcsIDk2MTMxLCA5NjEzNSwgOTYxNDIsIDk2MTUxLCAKLSAgICA5NjE1OCwgOTYxNjcsIDk2MTczLCA5NjE4MiwgOTYxODksIDk2MTk2LCA5NjIwMywgOTYyMTMsIDk2MjE5LCA5NjIyMywgCi0gICAgOTYyMzAsIDk2MjM5LCA5NjI0OSwgOTYyNTYsIDk2MjYzLCA5NjI2NywgOTYyNzEsIDk2Mjc4LCA5NjI4OCwgOTYyOTIsIAotICAgIDk2Mjk5LCA5NjMwNiwgOTYzMTMsIDk2MzE5LCA5NjMyNiwgOTYzMzMsIDk2MzQwLCA5NjM0NywgOTYzNTEsIDk2MzU1LCAKLSAgICA5NjM1OSwgOTYzNjYsIDk2MzcwLCA5NjM3NywgOTYzODQsIDk2Mzk4LCA5NjQwNywgOTY0MTEsIDk2NDE1LCA5NjQxOSwgCi0gICAgOTY0MjYsIDk2NDMwLCA5NjQzNCwgOTY0MzgsIDk2NDQ2LCA5NjQ1NCwgOTY0NzMsIDk2NDgzLCA5NjUwMywgOTY1MDcsIAotICAgIDk2NTExLCA5NjUxNSwgOTY1MTksIDk2NTIzLCA5NjUyNywgOTY1MzEsIDk2NTM4LCA5NjU0MiwgOTY1NDUsIDk2NTQ5LCAKLSAgICA5NjU1MywgOTY1NTksIDk2NTY2LCA5NjU3NSwgOTY1NzksIDk2NTg4LCA5NjU5NywgOTY2MDUsIDk2NjA5LCA5NjYxNiwgCi0gICAgOTY2MjAsIDk2NjI0LCA5NjYyOCwgOTY2MzIsIDk2NjQzLCA5NjY1MiwgOTY2NjEsIDk2NjcwLCA5NjY3OSwgOTY2OTEsIAotICAgIDk2NzAwLCA5NjcwOSwgOTY3MTgsIDk2NzI2LCA5NjczNSwgOTY3NDcsIDk2NzU2LCA5Njc2NSwgOTY3NzQsIDk2Nzg2LCAKLSAgICA5Njc5NSwgOTY4MDQsIDk2ODE2LCA5NjgyNSwgOTY4MzQsIDk2ODQ2LCA5Njg1NSwgOTY4NTksIDk2ODYzLCA5Njg2NywgCi0gICAgOTY4NzEsIDk2ODc1LCA5Njg3OSwgOTY4ODMsIDk2ODkwLCA5Njg5NCwgOTY4OTgsIDk2OTA5LCA5NjkxMywgOTY5MTcsIAotICAgIDk2OTI0LCA5NjkzMCwgOTY5MzYsIDk2OTQwLCA5Njk0NywgOTY5NTEsIDk2OTU1LCA5Njk1OSwgOTY5NjMsIDk2OTY3LCAKLSAgICA5Njk3MSwgOTY5NzcsIDk2OTg1LCA5Njk4OSwgOTY5OTMsIDk2OTk2LCA5NzAwMiwgOTcwMTIsIDk3MDE2LCA5NzAyOCwgCi0gICAgOTcwMzUsIDk3MDQyLCA5NzA0OSwgOTcwNTYsIDk3MDYyLCA5NzA2NiwgOTcwNzAsIDk3MDc0LCA5NzA3OCwgOTcwODUsIAotICAgIDk3MDk0LCA5NzEwMSwgOTcxMDksIDk3MTE3LCA5NzEyMywgOTcxMjcsIDk3MTMxLCA5NzEzNSwgOTcxMzksIDk3MTQ1LCAKLSAgICA5NzE1NCwgOTcxNjYsIDk3MTczLCA5NzE4MCwgOTcxODksIDk3MjAwLCA5NzIwNiwgOTcyMTUsIDk3MjI0LCA5NzIzMSwgCi0gICAgOTcyNDAsIDk3MjQ3LCA5NzI1NCwgOTcyNjQsIDk3MjcxLCA5NzI3OCwgOTcyODUsIDk3MjkyLCA5NzI5NiwgOTczMDIsIAotICAgIDk3MzA2LCA5NzMxNywgOTczMjUsIDk3MzM0LCA5NzM0NiwgOTczNTMsIDk3MzYwLCA5NzM3MCwgOTczNzcsIDk3Mzg2LCAKLSAgICA5NzM5MywgOTc0MDIsIDk3NDA5LCA5NzQxNiwgOTc0MjYsIDk3NDMzLCA5NzQ0MCwgOTc0NTAsIDk3NDU3LCA5NzQ2OSwgCi0gICAgOTc0NzgsIDk3NDg1LCA5NzQ5MiwgOTc0OTksIDk3NTA4LCA5NzUxOCwgOTc1MzEsIDk3NTM4LCA5NzU0OCwgOTc1NTgsIAotICAgIDk3NTY1LCA5NzU3NCwgOTc1ODcsIDk3NTk0LCA5NzYwMSwgOTc2MDgsIDk3NjE4LCA5NzYyOCwgOTc2MzUsIDk3NjQ1LCAKLSAgICA5NzY1MiwgOTc2NTksIDk3NjY5LCA5NzY3NSwgOTc2ODIsIDk3Njg5LCA5NzY5NiwgOTc3MDYsIDk3NzEzLCA5NzcyMCwgCi0gICAgOTc3MjcsIDk3NzMzLCA5Nzc0MCwgOTc3NTAsIDk3NzU3LCA5Nzc2MSwgOTc3NjksIDk3NzczLCA5Nzc4NSwgOTc3ODksIAotICAgIDk3ODAzLCA5NzgwNywgOTc4MTEsIDk3ODE1LCA5NzgxOSwgOTc4MjUsIDk3ODMyLCA5Nzg0MCwgOTc4NDQsIDk3ODQ4LCAKLSAgICA5Nzg1MiwgOTc4NTYsIDk3ODYzLCA5Nzg2NywgOTc4NzMsIDk3ODc5LCA5Nzg4NywgOTc4OTEsIDk3ODk4LCA5NzkwNiwgCi0gICAgOTc5MTAsIDk3OTE0LCA5NzkyMCwgOTc5MjQsIDk3OTMzLCA5Nzk0MiwgOTc5NDksIDk3OTU5LCA5Nzk2NSwgOTc5NjksIAotICAgIDk3OTczLCA5Nzk4MSwgOTc5ODgsIDk3OTk1LCA5ODAwMSwgOTgwMDUsIDk4MDEzLCA5ODAxNywgOTgwMjQsIDk4MDM2LCAKLSAgICA5ODA0MywgOTgwNTMsIDk4MDU5LCA5ODA2MywgOTgwNzIsIDk4MDc5LCA5ODA4OCwgOTgwOTIsIDk4MDk2LCA5ODEwMywgCi0gICAgOTgxMDcsIDk4MTExLCA5ODExNSwgOTgxMTksIDk4MTIyLCA5ODEyOCwgOTgxMzQsIDk4MTM4LCA5ODE0MiwgOTgxNDksIAotICAgIDk4MTU2LCA5ODE2MywgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNCwgOTgyMDgsIDk4MjEyLCAKLSAgICA5ODIxOSwgOTgyMjYsIDk4MjMzLCA5ODI0MCwgOTgyNDcsIDk4MjUxLCA5ODI1NCwgOTgyNTksIDk4MjYzLCA5ODI2NywgCi0gICAgOTgyNzYsIDk4Mjg1LCA5ODI4OSwgOTgyOTMsIDk4Mjk5LCA5ODMwNSwgOTgzMjIsIDk4MzI4LCA5ODMzMiwgOTgzNDEsIAotICAgIDk4MzQ1LCA5ODM0OSwgOTgzNTYsIDk4MzY0LCA5ODM3MiwgOTgzNzgsIDk4MzgyLCA5ODM4NiwgOTgzOTAsIDk4Mzk0LCAKLSAgICA5ODM5NywgOTg0MDMsIDk4NDEwLCA5ODQyMCwgOTg0MjcsIDk4NDM0LCA5ODQ0MSwgOTg0NDcsIDk4NDU0LCA5ODQ2MSwgCi0gICAgOTg0NjgsIDk4NDc1LCA5ODQ4MiwgOTg0OTEsIDk4NDk4LCA5ODUxMCwgOTg1MTcsIDk4NTI0LCA5ODUzNCwgOTg1NDUsIAotICAgIDk4NTUyLCA5ODU1OSwgOTg1NjYsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIDk4NjE1LCAKLSAgICA5ODYyNSwgOTg2MzUsIDk4NjQ1LCA5ODY1MiwgOTg2NjIsIDk4NjY5LCA5ODY3NiwgOTg2ODMsIDk4NjkwLCA5ODY5NiwgCi0gICAgOTg3MDMsIDk4NzEwLCA5ODcxNywgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OCwgOTg3NjUsIAotICAgIDk4NzcyLCA5ODc4MSwgOTg3ODgsIDk4Nzk1LCA5ODc5OSwgOTg4MDcsIDk4ODExLCA5ODgxNSwgOTg4MTksIDk4ODIzLCAKLSAgICA5ODgyNywgOTg4MzQsIDk4ODM4LCA5ODg0NywgOTg4NTEsIDk4ODU4LCA5ODg2NiwgOTg4NzAsIDk4ODc0LCA5ODg3OCwgCi0gICAgOTg4OTEsIDk4OTA3LCA5ODkxMSwgOTg5MTUsIDk4OTIyLCA5ODkyOCwgOTg5MzUsIDk4OTM5LCA5ODk0MywgOTg5NDcsIAotICAgIDk4OTUxLCA5ODk1NSwgOTg5NjIsIDk4OTY2LCA5ODk4NCwgOTg5ODgsIDk4OTkyLCA5ODk5OSwgOTkwMDMsIDk5MDA3LCAKLSAgICA5OTAxMywgOTkwMTcsIDk5MDIxLCA5OTAyOSwgOTkwMzMsIDk5MDM3LCA5OTA0MSwgOTkwNDUsIDk5MDUxLCA5OTA2MiwgCi0gICAgOTkwNzEsIDk5MDgwLCA5OTA4NywgOTkwOTQsIDk5MTA1LCA5OTExMiwgOTkxMTksIDk5MTI2LCA5OTEzMywgOTkxNDAsIAotICAgIDk5MTQ3LCA5OTE1NCwgOTkxNjQsIDk5MTcwLCA5OTE3NywgOTkxODcsIDk5MTk2LCA5OTIwMywgOTkyMTIsIDk5MjIyLCAKLSAgICA5OTIyOSwgOTkyMzYsIDk5MjQzLCA5OTI1MCwgOTkyNjIsIDk5MjY5LCA5OTI3NiwgOTkyODMsIDk5MjkwLCA5OTI5NywgCi0gICAgOTkzMDcsIDk5MzE0LCA5OTMyMSwgOTkzMzEsIDk5MzQ0LCA5OTM1NiwgOTkzNjMsIDk5MzczLCA5OTM4MCwgOTkzODcsIAotICAgIDk5Mzk0LCA5OTQwOCwgOTk0MTQsIDk5NDIyLCA5OTQzMiwgOTk0NDIsIDk5NDQ5LCA5OTQ1NiwgOTk0NjIsIDk5NDY2LCAKLSAgICA5OTQ3MywgOTk0ODMsIDk5NDg5LCA5OTUwMiwgOTk1MDYsIDk5NTEwLCA5OTUxNywgOTk1MjEsIDk5NTI4LCA5OTUzOCwgCi0gICAgOTk1NDIsIDk5NTQ2LCA5OTU1MCwgOTk1NTQsIDk5NTU4LCA5OTU2NSwgOTk1NjksIDk5NTc2LCA5OTU4MywgOTk1OTAsIAotICAgIDk5NTk5LCA5OTYwOCwgOTk2MTgsIDk5NjI1LCA5OTYzMiwgOTk2MzksIDk5NjQ5LCA5OTY1NiwgOTk2NjYsIDk5NjczLCAKLSAgICA5OTY4MywgOTk2OTAsIDk5Njk3LCA5OTcwNywgOTk3MTcsIDk5NzI0LCA5OTczMCwgOTk3MzgsIDk5NzQ2LCA5OTc1MiwgCi0gICAgOTk3NTgsIDk5NzYyLCA5OTc2NiwgOTk3NzMsIDk5NzgxLCA5OTc4NywgOTk3OTEsIDk5Nzk1LCA5OTc5OSwgOTk4MDYsIAotICAgIDk5ODE4LCA5OTgyMSwgOTk4MjgsIDk5ODM0LCA5OTgzOCwgOTk4NDIsIDk5ODQ2LCA5OTg1MCwgOTk4NTQsIDk5ODU4LCAKLSAgICA5OTg2MiwgOTk4NjYsIDk5ODcwLCA5OTg3NCwgOTk4ODEsIDk5ODg1LCA5OTg5MSwgOTk4OTUsIDk5ODk5LCA5OTkwMywgCi0gICAgOTk5MDksIDk5OTE2LCA5OTkyMywgOTk5MzAsIDk5OTQxLCA5OTk0OSwgOTk5NTMsIDk5OTU5LCA5OTk2OCwgOTk5NzUsIAotICAgIDk5OTgxLCA5OTk4NCwgOTk5ODgsIDk5OTkyLCA5OTk5OCwgMTAwMDA3LCAxMDAwMTUsIDEwMDAxOSwgMTAwMDI1LCAKLSAgICAxMDAwMjksIDEwMDAzMywgMTAwMDM3LCAxMDAwNDMsIDEwMDA1MCwgMTAwMDU2LCAxMDAwNjAsIDEwMDA2NiwgMTAwMDcwLCAKLSAgICAxMDAwNzQsIDEwMDA4MywgMTAwMDk1LCAxMDAwOTksIDEwMDEwNiwgMTAwMTEzLCAxMDAxMjMsIDEwMDEzMCwgMTAwMTQyLCAKLSAgICAxMDAxNDksIDEwMDE1NiwgMTAwMTYzLCAxMDAxNzQsIDEwMDE4NCwgMTAwMTk3LCAxMDAyMDcsIDEwMDIxNCwgMTAwMjE4LCAKLSAgICAxMDAyMjIsIDEwMDIyNiwgMTAwMjMwLCAxMDAyMzksIDEwMDI0OCwgMTAwMjU3LCAxMDAyNzQsIDEwMDI4MywgMTAwMjg5LCAKLSAgICAxMDAyOTYsIDEwMDMwNCwgMTAwMzE3LCAxMDAzMjEsIDEwMDMzMCwgMTAwMzM5LCAxMDAzNDgsIDEwMDM1NywgMTAwMzY4LCAKLSAgICAxMDAzNzcsIDEwMDM4NiwgMTAwMzk1LCAxMDA0MDQsIDEwMDQxMywgMTAwNDIyLCAxMDA0MzIsIDEwMDQzNSwgMTAwNDM5LCAKLSAgICAxMDA0NDMsIDEwMDQ0NywgMTAwNDUxLCAxMDA0NTUsIDEwMDQ2MSwgMTAwNDY4LCAxMDA0NzUsIDEwMDQ4MiwgMTAwNDg4LCAKLSAgICAxMDA0OTQsIDEwMDUwMSwgMTAwNTA3LCAxMDA1MTQsIDEwMDUyMiwgMTAwNTI2LCAxMDA1MzMsIDEwMDU0MCwgMTAwNTQ3LCAKLSAgICAxMDA1NTUsIDEwMDU1OCwgMTAwNTYyLCAxMDA1NjYsIDEwMDU3MCwgMTAwNTczLCAxMDA1NzksIDEwMDU4MywgMTAwNTg5LCAKLSAgICAxMDA1OTYsIDEwMDYwMywgMTAwNjA5LCAxMDA2MTYsIDEwMDYyMywgMTAwNjMwLCAxMDA2MzcsIDEwMDY0NCwgMTAwNjUxLCAKLSAgICAxMDA2NTgsIDEwMDY2NSwgMTAwNjcyLCAxMDA2NzksIDEwMDY4NiwgMTAwNjkzLCAxMDA3MDAsIDEwMDcwNywgMTAwNzEzLCAKLSAgICAxMDA3MTcsIDEwMDcyNiwgMTAwNzMwLCAxMDA3MzQsIDEwMDczOCwgMTAwNzQyLCAxMDA3NDgsIDEwMDc1NSwgMTAwNzYyLCAKLSAgICAxMDA3NjksIDEwMDc3NiwgMTAwNzgzLCAxMDA3ODksIDEwMDc5NywgMTAwODAxLCAxMDA4MDUsIDEwMDgwOSwgMTAwODEzLCAKLSAgICAxMDA4MTksIDEwMDgzNiwgMTAwODUzLCAxMDA4NTcsIDEwMDg2MSwgMTAwODY1LCAxMDA4NjksIDEwMDg3MywgMTAwODc3LCAKLSAgICAxMDA4ODMsIDEwMDg5MCwgMTAwODk0LCAxMDA5MDAsIDEwMDkwNywgMTAwOTE0LCAxMDA5MjEsIDEwMDkyOCwgMTAwOTM1LCAKLSAgICAxMDA5NDQsIDEwMDk1MSwgMTAwOTU4LCAxMDA5NjUsIDEwMDk3MiwgMTAwOTc2LCAxMDA5ODAsIDEwMDk4NiwgMTAwOTk4LCAKLSAgICAxMDEwMDIsIDEwMTAwNiwgMTAxMDE1LCAxMDEwMTksIDEwMTAyMywgMTAxMDI3LCAxMDEwMzMsIDEwMTAzNywgMTAxMDQxLCAKLSAgICAxMDEwNTAsIDEwMTA1NCwgMTAxMDU4LCAxMDEwNjIsIDEwMTA2OSwgMTAxMDczLCAxMDEwNzcsIDEwMTA4MSwgMTAxMDg1LCAKLSAgICAxMDEwODksIDEwMTA5MywgMTAxMDk3LCAxMDExMDEsIDEwMTEwNywgMTAxMTE0LCAxMDExMjEsIDEwMTEyNywgMTAxMTMxLCAKLSAgICAxMDExNDgsIDEwMTE1NCwgMTAxMTU4LCAxMDExNjQsIDEwMTE3MCwgMTAxMTc2LCAxMDExODIsIDEwMTE4OCwgMTAxMTk0LCAKLSAgICAxMDExOTgsIDEwMTIwMiwgMTAxMjA2LCAxMDEyMTIsIDEwMTIxNiwgMTAxMjIyLCAxMDEyMjYsIDEwMTIzMCwgMTAxMjM3LCAKLSAgICAxMDEyNDQsIDEwMTI2MSwgMTAxMjY1LCAxMDEyNjksIDEwMTI3MywgMTAxMjc3LCAxMDEyODEsIDEwMTI5MywgMTAxMjk2LCAKLSAgICAxMDEzMDEsIDEwMTMwNiwgMTAxMzIxLCAxMDEzMzEsIDEwMTM0MywgMTAxMzQ3LCAxMDEzNTEsIDEwMTM1NSwgMTAxMzYxLCAKLSAgICAxMDEzNjgsIDEwMTM3NSwgMTAxMzg1LCAxMDEzOTcsIDEwMTQwMywgMTAxNDA5LCAxMDE0MTgsIDEwMTQyMiwgMTAxNDI2LCAKLSAgICAxMDE0MzMsIDEwMTQ0MywgMTAxNDUwLCAxMDE0NTYsIDEwMTQ2MCwgMTAxNDY0LCAxMDE0NzEsIDEwMTQ3NywgMTAxNDgxLCAKLSAgICAxMDE0ODcsIDEwMTQ5MSwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE3LCAxMDE1MjUsIDEwMTUzMiwgMTAxNTM4LCAKLSAgICAxMDE1NDUsIDEwMTU1MiwgMTAxNTYyLCAxMDE1NzIsIDEwMTU3NiwgMTAxNTgwLCAxMDE1ODQsIDEwMTU4OCwgMTAxNTk0LCAKLSAgICAxMDE2MDEsIDEwMTYwNywgMTAxNjE0LCAxMDE2MjEsIDEwMTYyOCwgMTAxNjM3LCAxMDE2NDQsIDEwMTY1MSwgMTAxNjU3LCAKLSAgICAxMDE2NjQsIDEwMTY3MSwgMTAxNjc4LCAxMDE2ODUsIDEwMTY5MiwgMTAxNjk5LCAxMDE3MDUsIDEwMTcxMiwgMTAxNzE5LCAKLSAgICAxMDE3MjYsIDEwMTczNSwgMTAxNzQyLCAxMDE3NDksIDEwMTc1MywgMTAxNzU5LCAxMDE3NjMsIDEwMTc2OSwgMTAxNzc2LCAKLSAgICAxMDE3ODMsIDEwMTc5MCwgMTAxNzk0LCAxMDE3OTgsIDEwMTgwMiwgMTAxODA2LCAxMDE4MTAsIDEwMTgxNywgMTAxODIxLCAKLSAgICAxMDE4MjUsIDEwMTgzMSwgMTAxODM5LCAxMDE4NDMsIDEwMTg0NywgMTAxODUxLCAxMDE4NTUsIDEwMTg2MiwgMTAxODY2LCAKLSAgICAxMDE4NzAsIDEwMTg3OCwgMTAxODgyLCAxMDE4ODYsIDEwMTg5MCwgMTAxODk0LCAxMDE5MDAsIDEwMTkwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAxOTA4LCAxMDE5MTQsIDEwMTkyMCwgMTAxOTI3LCAKLSAgICAxMDE5MzQsIDEwMTk0MSwgMTAxOTQ4LCAxMDE5NTUsIDEwMTk2MiwgMTAxOTY4LCAxMDE5NzUsIDEwMTk4MiwgMTAxOTg5LCAKLSAgICAxMDE5OTYsIDEwMjAwMywgMTAyMDEwLCAxMDIwMTYsIDEwMjAyMiwgMTAyMDI4LCAxMDIwMzQsIDEwMjA0MCwgMTAyMDQ2LCAKLSAgICAxMDIwNTIsIDEwMjA1OCwgMTAyMDY0LCAxMDIwNzEsIDEwMjA3OCwgMTAyMDg1LCAxMDIwOTIsIDEwMjA5OSwgMTAyMTA2LCAKLSAgICAxMDIxMTIsIDEwMjExOCwgMTAyMTI0LCAxMDIxMzEsIDEwMjEzOCwgMTAyMTQ0LCAxMDIxNTAsIDEwMjE1OSwgMTAyMTY2LCAKLSAgICAxMDIxNzMsIDEwMjE4MCwgMTAyMTg3LCAxMDIxOTQsIDEwMjIwMSwgMTAyMjA3LCAxMDIyMTMsIDEwMjIxOSwgMTAyMjI4LCAKLSAgICAxMDIyMzUsIDEwMjI0MiwgMTAyMjUzLCAxMDIyNjQsIDEwMjI3MCwgMTAyMjc2LCAxMDIyODIsIDEwMjI5MSwgMTAyMjk4LCAKLSAgICAxMDIzMDUsIDEwMjMxNSwgMTAyMzI1LCAxMDIzMzYsIDEwMjM0NywgMTAyMzU5LCAxMDIzNzIsIDEwMjM4MywgMTAyMzk0LCAKLSAgICAxMDI0MDYsIDEwMjQxOSwgMTAyNDMwLCAxMDI0NDEsIDEwMjQ1MiwgMTAyNDYzLCAxMDI0NzQsIDEwMjQ4NiwgMTAyNDk0LCAKLSAgICAxMDI1MDIsIDEwMjUxMSwgMTAyNTIwLCAxMDI1MjksIDEwMjUzNSwgMTAyNTQxLCAxMDI1NDcsIDEwMjU1NCwgMTAyNTY0LCAKLSAgICAxMDI1NzEsIDEwMjU4MSwgMTAyNTg2LCAxMDI1OTEsIDEwMjU5NywgMTAyNjAzLCAxMDI2MTEsIDEwMjYxOSwgMTAyNjI4LCAKLSAgICAxMDI2MzksIDEwMjY1MCwgMTAyNjU4LCAxMDI2NjYsIDEwMjY3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTAyNjg0LCAxMDI2OTUsIDEwMjcwMiwgMTAyNzEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDI3MTgsIDEwMjcyMiwgMTAyNzI2LCAxMDI3MzAsIDEwMjczNCwgMTAyNzM4LCAxMDI3NDIsIDEwMjc0NiwgMTAyNzUwLCAKLSAgICAxMDI3NTQsIDEwMjc1OCwgMTAyNzYyLCAxMDI3NjYsIDEwMjc3MCwgMTAyNzc0LCAxMDI3NzgsIDEwMjc4MiwgMTAyNzg2LCAKLSAgICAxMDI3OTAsIDEwMjc5NCwgMTAyNzk4LCAxMDI4MDIsIDEwMjgwNiwgMTAyODEwLCAxMDI4MTQsIDEwMjgxOCwgMTAyODIyLCAKLSAgICAxMDI4MjYsIDEwMjgzMCwgMTAyODM0LCAxMDI4MzgsIDEwMjg0MiwgMTAyODQ2LCAxMDI4NTAsIDEwMjg1NCwgMTAyODU4LCAKLSAgICAxMDI4NjIsIDEwMjg2NiwgMTAyODcwLCAxMDI4NzQsIDEwMjg3OCwgMTAyODgyLCAxMDI4ODYsIDEwMjg5MCwgMTAyODk0LCAKLSAgICAxMDI4OTgsIDEwMjkwMiwgMTAyOTA2LCAxMDI5MTAsIDEwMjkxNCwgMTAyOTE4LCAxMDI5MjIsIDEwMjkyNiwgMTAyOTMwLCAKLSAgICAxMDI5MzQsIDEwMjkzOCwgMTAyOTQyLCAxMDI5NDYsIDEwMjk1MCwgMTAyOTU0LCAxMDI5NTgsIDEwMjk2MiwgMTAyOTY2LCAKLSAgICAxMDI5NzAsIDEwMjk3NCwgMTAyOTc4LCAxMDI5ODIsIDEwMjk4NiwgMTAyOTkwLCAxMDI5OTQsIDEwMjk5OCwgMTAzMDAyLCAKLSAgICAxMDMwMDYsIDEwMzAxMCwgMTAzMDE0LCAxMDMwMTgsIDEwMzAyMiwgMTAzMDI2LCAxMDMwMzAsIDEwMzAzNCwgMTAzMDM4LCAKLSAgICAxMDMwNDIsIDEwMzA0NiwgMTAzMDUwLCAxMDMwNTQsIDEwMzA1OCwgMTAzMDYyLCAxMDMwNjYsIDEwMzA3MCwgMTAzMDc0LCAKLSAgICAxMDMwNzgsIDEwMzA4MiwgMTAzMDg2LCAxMDMwOTAsIDEwMzA5NCwgMTAzMDk4LCAxMDMxMDIsIDEwMzEwNiwgMTAzMTEwLCAKLSAgICAxMDMxMTQsIDEwMzExOCwgMTAzMTIyLCAxMDMxMjYsIDEwMzEzMCwgMTAzMTM0LCAxMDMxMzgsIDEwMzE0MiwgMTAzMTQ2LCAKLSAgICAxMDMxNTAsIDEwMzE1NCwgMTAzMTU4LCAxMDMxNjIsIDEwMzE2NiwgMTAzMTcwLCAxMDMxNzQsIDEwMzE3OCwgMTAzMTgyLCAKLSAgICAxMDMxODYsIDEwMzE5MCwgMTAzMTk0LCAxMDMxOTgsIDEwMzIwMiwgMTAzMjA2LCAxMDMyMTAsIDEwMzIxNCwgMTAzMjE4LCAKLSAgICAxMDMyMjIsIDEwMzIyNiwgMTAzMjMwLCAxMDMyMzQsIDEwMzIzOCwgMTAzMjQyLCAxMDMyNDYsIDEwMzI1MCwgMTAzMjU0LCAKLSAgICAxMDMyNTgsIDEwMzI2MiwgMTAzMjY2LCAxMDMyNzAsIDEwMzI3NCwgMTAzMjc4LCAxMDMyODIsIDEwMzI4NiwgMTAzMjkwLCAKLSAgICAxMDMyOTQsIDEwMzI5OCwgMTAzMzAyLCAxMDMzMDYsIDEwMzMxMCwgMTAzMzE0LCAxMDMzMTgsIDEwMzMyMiwgMTAzMzI2LCAKLSAgICAxMDMzMzAsIDEwMzMzNCwgMTAzMzM4LCAxMDMzNDIsIDEwMzM0NiwgMTAzMzUwLCAxMDMzNTQsIDEwMzM1OCwgMTAzMzYyLCAKLSAgICAxMDMzNjYsIDEwMzM3MCwgMTAzMzc0LCAxMDMzNzgsIDEwMzM4MiwgMTAzMzg2LCAxMDMzOTAsIDEwMzM5NCwgMTAzMzk4LCAKLSAgICAxMDM0MDIsIDEwMzQwNiwgMTAzNDEwLCAxMDM0MTQsIDEwMzQxOCwgMTAzNDIyLCAxMDM0MjYsIDEwMzQzMCwgMTAzNDM0LCAKLSAgICAxMDM0MzgsIDEwMzQ0MiwgMTAzNDQ2LCAxMDM0NTAsIDEwMzQ1NCwgMTAzNDU4LCAxMDM0NjIsIDEwMzQ2NiwgMTAzNDcwLCAKLSAgICAxMDM0NzQsIDEwMzQ3OCwgMTAzNDgyLCAxMDM0ODYsIDEwMzQ5MCwgMTAzNDk0LCAxMDM0OTgsIDEwMzUwMiwgMTAzNTA2LCAKLSAgICAxMDM1MTAsIDEwMzUxNCwgMTAzNTE4LCAxMDM1MjIsIDEwMzUyNiwgMTAzNTMwLCAxMDM1MzQsIDEwMzUzOCwgMTAzNTQyLCAKLSAgICAxMDM1NDYsIDEwMzU1MCwgMTAzNTU0LCAxMDM1NTgsIDEwMzU2MiwgMTAzNTY2LCAxMDM1NzAsIDEwMzU3NCwgMTAzNTc4LCAKLSAgICAxMDM1ODIsIDEwMzU4NiwgMTAzNTkwLCAxMDM1OTQsIDEwMzU5OCwgMTAzNjAyLCAxMDM2MDYsIDEwMzYxMCwgMTAzNjE0LCAKLSAgICAxMDM2MTgsIDEwMzYyMiwgMTAzNjI2LCAxMDM2MzAsIDEwMzYzNCwgMTAzNjM4LCAxMDM2NDIsIDEwMzY0NiwgMTAzNjUwLCAKLSAgICAxMDM2NTQsIDEwMzY1OCwgMTAzNjYyLCAxMDM2NjYsIDEwMzY3MCwgMTAzNjc0LCAxMDM2NzgsIDEwMzY4MiwgMTAzNjg2LCAKLSAgICAxMDM2OTAsIDEwMzY5NCwgMTAzNjk4LCAxMDM3MDIsIDEwMzcwNiwgMTAzNzEwLCAxMDM3MTQsIDEwMzcxOCwgMTAzNzIyLCAKLSAgICAxMDM3MjYsIDEwMzczMCwgMTAzNzM0LCAxMDM3MzgsIDEwMzc0MiwgMTAzNzQ2LCAxMDM3NTAsIDEwMzc1NCwgMTAzNzU4LCAKLSAgICAxMDM3NjIsIDEwMzc2NiwgMTAzNzcwLCAxMDM3NzQsIDEwMzc3OCwgMTAzNzgyLCAxMDM3ODYsIDEwMzc5MCwgMTAzNzk0LCAKLSAgICAxMDM3OTgsIDEwMzgwMiwgMTAzODA2LCAxMDM4MTAsIDEwMzgxNCwgMTAzODE4LCAxMDM4MjIsIDEwMzgyNiwgMTAzODMwLCAKLSAgICAxMDM4MzQsIDEwMzgzOCwgMTAzODQyLCAxMDM4NDYsIDEwMzg1MCwgMTAzODU0LCAxMDM4NTgsIDEwMzg2MiwgMTAzODY2LCAKLSAgICAxMDM4NzAsIDEwMzg3NCwgMTAzODc4LCAxMDM4ODIsIDEwMzg4NiwgMTAzODkwLCAxMDM4OTQsIDEwMzg5OCwgMTAzOTAyLCAKLSAgICAxMDM5MDYsIDEwMzkxMCwgMTAzOTE0LCAxMDM5MTgsIDEwMzkyMiwgMTAzOTI2LCAxMDM5MzAsIDEwMzkzNCwgMTAzOTM4LCAKLSAgICAxMDM5NDIsIDEwMzk0NiwgMTAzOTUwLCAxMDM5NTQsIDEwMzk1OCwgMTAzOTYyLCAxMDM5NjYsIDEwMzk3MCwgMTAzOTc0LCAKLSAgICAxMDM5NzgsIDEwMzk4MiwgMTAzOTg2LCAxMDM5OTAsIDEwMzk5NCwgMTAzOTk4LCAxMDQwMDIsIDEwNDAwNiwgMTA0MDEwLCAKLSAgICAxMDQwMTQsIDEwNDAxOCwgMTA0MDIyLCAxMDQwMjYsIDEwNDAzMCwgMTA0MDM0LCAxMDQwMzgsIDEwNDA0MiwgMTA0MDQ2LCAKLSAgICAxMDQwNTAsIDEwNDA1NCwgMTA0MDU4LCAxMDQwNjIsIDEwNDA2NiwgMTA0MDcwLCAxMDQwNzQsIDEwNDA3OCwgMTA0MDgyLCAKLSAgICAxMDQwODYsIDEwNDA5MCwgMTA0MDk0LCAxMDQwOTgsIDEwNDEwMiwgMTA0MTA2LCAxMDQxMTAsIDEwNDExNCwgMTA0MTE4LCAKLSAgICAxMDQxMjIsIDEwNDEyNiwgMTA0MTMwLCAxMDQxMzQsIDEwNDEzOCwgMTA0MTQyLCAxMDQxNDYsIDEwNDE1MCwgMTA0MTU0LCAKLSAgICAxMDQxNTgsIDEwNDE2MiwgMTA0MTY2LCAxMDQxNzAsIDEwNDE3NCwgMTA0MTc4LCAxMDQxODIsIDEwNDE4NiwgMTA0MTkwLCAKLSAgICAxMDQxOTQsIDEwNDE5OCwgMTA0MjAyLCAxMDQyMDYsIDEwNDIxMCwgMTA0MjE0LCAxMDQyMTgsIDEwNDIyMiwgMTA0MjI2LCAKLSAgICAxMDQyMzAsIDEwNDIzNCwgMTA0MjM4LCAxMDQyNDIsIDEwNDI0NiwgMTA0MjUwLCAxMDQyNTQsIDEwNDI1OCwgMTA0MjYyLCAKLSAgICAxMDQyNjYsIDEwNDI3MCwgMTA0Mjc0LCAxMDQyNzgsIDEwNDI4MiwgMTA0Mjg2LCAxMDQyOTAsIDEwNDI5NCwgMTA0Mjk4LCAKLSAgICAxMDQzMDIsIDEwNDMwNiwgMTA0MzEwLCAxMDQzMTQsIDEwNDMxOCwgMTA0MzIyLCAxMDQzMjYsIDEwNDMzMCwgMTA0MzM0LCAKLSAgICAxMDQzMzgsIDEwNDM0MiwgMTA0MzQ2LCAxMDQzNTAsIDEwNDM1NCwgMTA0MzU4LCAxMDQzNjIsIDEwNDM2NiwgMTA0MzcwLCAKLSAgICAxMDQzNzQsIDEwNDM3OCwgMTA0MzgyLCAxMDQzODYsIDEwNDM5MCwgMTA0Mzk0LCAxMDQzOTgsIDEwNDQwMiwgMTA0NDA2LCAKLSAgICAxMDQ0MTAsIDEwNDQxNCwgMTA0NDE4LCAxMDQ0MjIsIDEwNDQyNiwgMTA0NDMwLCAxMDQ0MzQsIDEwNDQzOCwgMTA0NDQyLCAKLSAgICAxMDQ0NDYsIDEwNDQ1MCwgMTA0NDU0LCAxMDQ0NTgsIDEwNDQ2MiwgMTA0NDY2LCAxMDQ0NzAsIDEwNDQ3NCwgMTA0NDc4LCAKLSAgICAxMDQ0ODIsIDEwNDQ4NiwgMTA0NDkwLCAxMDQ0OTQsIDEwNDQ5OCwgMTA0NTAyLCAxMDQ1MDYsIDEwNDUxMCwgMTA0NTE0LCAKLSAgICAxMDQ1MTgsIDEwNDUyMiwgMTA0NTI2LCAxMDQ1MzAsIDEwNDUzNCwgMTA0NTM4LCAxMDQ1NDIsIDEwNDU0NiwgMTA0NTUwLCAKLSAgICAxMDQ1NTQsIDEwNDU1OCwgMTA0NTYyLCAxMDQ1NjYsIDEwNDU3MCwgMTA0NTc0LCAxMDQ1NzgsIDEwNDU4MiwgMTA0NTg2LCAKLSAgICAxMDQ1OTAsIDEwNDU5NCwgMTA0NTk4LCAxMDQ2MDIsIDEwNDYwNiwgMTA0NjEwLCAxMDQ2MTQsIDEwNDYxOCwgMTA0NjIyLCAKLSAgICAxMDQ2MjYsIDEwNDYzMCwgMTA0NjM0LCAxMDQ2MzgsIDEwNDY0MiwgMTA0NjQ2LCAxMDQ2NTAsIDEwNDY1NCwgMTA0NjU4LCAKLSAgICAxMDQ2NjIsIDEwNDY2NiwgMTA0NjcwLCAxMDQ2NzQsIDEwNDY3OCwgMTA0NjgyLCAxMDQ2ODYsIDEwNDY5MCwgMTA0Njk0LCAKLSAgICAxMDQ2OTgsIDEwNDcwMiwgMTA0NzA2LCAxMDQ3MTAsIDEwNDcxNCwgMTA0NzE4LCAxMDQ3MjIsIDEwNDcyNiwgMTA0NzMwLCAKLSAgICAxMDQ3MzQsIDEwNDczOCwgMTA0NzQyLCAxMDQ3NDYsIDEwNDc1MCwgMTA0NzU0LCAxMDQ3NTgsIDEwNDc2MiwgMTA0NzY2LCAKLSAgICAxMDQ3NzAsIDEwNDc3NCwgMTA0Nzc4LCAxMDQ3ODIsIDEwNDc4NiwgMTA0NzkwLCAxMDQ3OTQsIDEwNDc5OCwgMTA0ODAyLCAKLSAgICAxMDQ4MDYsIDEwNDgxMCwgMTA0ODE0LCAxMDQ4MTgsIDEwNDgyMiwgMTA0ODI2LCAxMDQ4MzAsIDEwNDgzNCwgMTA0ODM4LCAKLSAgICAxMDQ4NDIsIDEwNDg0NiwgMTA0ODUwLCAxMDQ4NTQsIDEwNDg1OCwgMTA0ODYyLCAxMDQ4NjYsIDEwNDg3MCwgMTA0ODc0LCAKLSAgICAxMDQ4NzgsIDEwNDg4MiwgMTA0ODg2LCAxMDQ4OTAsIDEwNDg5NCwgMTA0ODk4LCAxMDQ5MDIsIDEwNDkwNiwgMTA0OTEwLCAKLSAgICAxMDQ5MTQsIDEwNDkxOCwgMTA0OTIyLCAxMDQ5MjYsIDEwNDkzMCwgMTA0OTM0LCAxMDQ5MzgsIDEwNDk0MiwgMTA0OTQ2LCAKLSAgICAxMDQ5NTAsIDEwNDk1NCwgMTA0OTU4LCAxMDQ5NjIsIDEwNDk2NiwgMTA0OTcwLCAxMDQ5NzQsIDEwNDk3OCwgMTA0OTgyLCAKLSAgICAxMDQ5ODYsIDEwNDk5MCwgMTA0OTk0LCAxMDQ5OTgsIDEwNTAwMiwgMTA1MDA2LCAxMDUwMTAsIDEwNTAxNCwgMTA1MDE4LCAKLSAgICAxMDUwMjIsIDEwNTAyNiwgMTA1MDMwLCAxMDUwMzQsIDEwNTAzOCwgMTA1MDQyLCAxMDUwNDYsIDEwNTA1MCwgMTA1MDU0LCAKLSAgICAxMDUwNTgsIDEwNTA2MiwgMTA1MDY2LCAxMDUwNzAsIDEwNTA3NCwgMTA1MDc4LCAxMDUwODIsIDEwNTA4NiwgMTA1MDkwLCAKLSAgICAxMDUwOTQsIDEwNTA5OCwgMTA1MTAyLCAxMDUxMDYsIDEwNTExMCwgMTA1MTE0LCAxMDUxMTgsIDEwNTEyMiwgMTA1MTI2LCAKLSAgICAxMDUxMzAsIDEwNTEzNCwgMTA1MTM4LCAxMDUxNDIsIDEwNTE0NiwgMTA1MTUwLCAxMDUxNTQsIDEwNTE1OCwgMTA1MTYyLCAKLSAgICAxMDUxNjYsIDEwNTE3MCwgMTA1MTc0LCAxMDUxNzgsIDEwNTE4MiwgMTA1MTg2LCAxMDUxOTAsIDEwNTE5NCwgMTA1MTk4LCAKLSAgICAxMDUyMDIsIDEwNTIwNiwgMTA1MjEwLCAxMDUyMTQsIDEwNTIxOCwgMTA1MjIyLCAxMDUyMjYsIDEwNTIzMCwgMTA1MjM0LCAKLSAgICAxMDUyMzgsIDEwNTI0MiwgMTA1MjQ2LCAxMDUyNTAsIDEwNTI1NCwgMTA1MjU4LCAxMDUyNjIsIDEwNTI2NiwgMTA1MjcwLCAKLSAgICAxMDUyNzQsIDEwNTI3OCwgMTA1MjgyLCAxMDUyODYsIDEwNTI5MCwgMTA1Mjk0LCAxMDUyOTgsIDEwNTMwMiwgMTA1MzA2LCAKLSAgICAxMDUzMTAsIDEwNTMxNCwgMTA1MzE4LCAxMDUzMjIsIDEwNTMyNiwgMTA1MzMwLCAxMDUzMzQsIDEwNTMzOCwgMTA1MzQyLCAKLSAgICAxMDUzNDYsIDEwNTM1MCwgMTA1MzU0LCAxMDUzNTgsIDEwNTM2MiwgMTA1MzY2LCAxMDUzNzAsIDEwNTM3NCwgMTA1Mzc4LCAKLSAgICAxMDUzODIsIDEwNTM4NiwgMTA1MzkwLCAxMDUzOTQsIDEwNTM5OCwgMTA1NDAyLCAxMDU0MDYsIDEwNTQxMCwgMTA1NDE0LCAKLSAgICAxMDU0MTgsIDEwNTQyMiwgMTA1NDI2LCAxMDU0MzAsIDEwNTQzNCwgMTA1NDM4LCAxMDU0NDIsIDEwNTQ0NiwgMTA1NDUwLCAKLSAgICAxMDU0NTQsIDEwNTQ1OCwgMTA1NDYyLCAxMDU0NjYsIDEwNTQ3MCwgMTA1NDc0LCAxMDU0NzgsIDEwNTQ4MiwgMTA1NDg2LCAKLSAgICAxMDU0OTAsIDEwNTQ5NCwgMTA1NDk4LCAxMDU1MDIsIDEwNTUwNiwgMTA1NTEwLCAxMDU1MTQsIDEwNTUxOCwgMTA1NTIyLCAKLSAgICAxMDU1MjYsIDEwNTUzMCwgMTA1NTM0LCAxMDU1MzgsIDEwNTU0MiwgMTA1NTQ2LCAxMDU1NTAsIDEwNTU1NCwgMTA1NTU4LCAKLSAgICAxMDU1NjIsIDEwNTU2NiwgMTA1NTcwLCAxMDU1NzQsIDEwNTU3OCwgMTA1NTgyLCAxMDU1ODYsIDEwNTU5MCwgMTA1NTk0LCAKLSAgICAxMDU1OTgsIDEwNTYwMiwgMTA1NjA2LCAxMDU2MTAsIDEwNTYxNCwgMTA1NjE4LCAxMDU2MjIsIDEwNTYyNiwgMTA1NjMwLCAKLSAgICAxMDU2MzQsIDEwNTYzOCwgMTA1NjQyLCAxMDU2NDYsIDEwNTY1MCwgMTA1NjU0LCAxMDU2NTgsIDEwNTY2MiwgMTA1NjY2LCAKLSAgICAxMDU2NzAsIDEwNTY3NCwgMTA1Njc4LCAxMDU2ODIsIDEwNTY4NiwgMTA1NjkwLCAxMDU2OTQsIDEwNTY5OCwgMTA1NzAyLCAKLSAgICAxMDU3MDYsIDEwNTcxMCwgMTA1NzE0LCAxMDU3MTgsIDEwNTcyMiwgMTA1NzI2LCAxMDU3MzAsIDEwNTczNCwgMTA1NzM4LCAKLSAgICAxMDU3NDIsIDEwNTc0NiwgMTA1NzUwLCAxMDU3NTQsIDEwNTc1OCwgMTA1NzYyLCAxMDU3NjYsIDEwNTc3MCwgMTA1Nzc0LCAKLSAgICAxMDU3NzgsIDEwNTc4MiwgMTA1Nzg2LCAxMDU3OTAsIDEwNTc5NCwgMTA1Nzk4LCAxMDU4MDIsIDEwNTgwNiwgMTA1ODEwLCAKLSAgICAxMDU4MTQsIDEwNTgxOCwgMTA1ODIyLCAxMDU4MjYsIDEwNTgzMCwgMTA1ODM0LCAxMDU4MzgsIDEwNTg0MiwgMTA1ODQ2LCAKLSAgICAxMDU4NTAsIDEwNTg1NCwgMTA1ODU4LCAxMDU4NjIsIDEwNTg2NiwgMTA1ODcwLCAxMDU4NzQsIDEwNTg3OCwgMTA1ODgyLCAKLSAgICAxMDU4ODYsIDEwNTg5MCwgMTA1ODk0LCAxMDU4OTgsIDEwNTkwMiwgMTA1OTA2LCAxMDU5MTAsIDEwNTkxNCwgMTA1OTE4LCAKLSAgICAxMDU5MjIsIDEwNTkyNiwgMTA1OTMwLCAxMDU5MzQsIDEwNTkzOCwgMTA1OTQyLCAxMDU5NDYsIDEwNTk1MCwgMTA1OTU0LCAKLSAgICAxMDU5NTgsIDEwNTk2MiwgMTA1OTY2LCAxMDU5NzAsIDEwNTk3NCwgMTA1OTc4LCAxMDU5ODIsIDEwNTk4NiwgMTA1OTkwLCAKLSAgICAxMDU5OTQsIDEwNTk5OCwgMTA2MDAyLCAxMDYwMDYsIDEwNjAxMCwgMTA2MDE0LCAxMDYwMTgsIDEwNjAyMiwgMTA2MDI2LCAKLSAgICAxMDYwMzAsIDEwNjAzNCwgMTA2MDM4LCAxMDYwNDIsIDEwNjA0NiwgMTA2MDUwLCAxMDYwNTQsIDEwNjA1OCwgMTA2MDYyLCAKLSAgICAxMDYwNjYsIDEwNjA3MCwgMTA2MDc0LCAxMDYwNzgsIDEwNjA4MiwgMTA2MDg2LCAxMDYwOTAsIDEwNjA5NCwgMTA2MDk4LCAKLSAgICAxMDYxMDIsIDEwNjEwNiwgMTA2MTEwLCAxMDYxMTQsIDEwNjExOCwgMTA2MTIyLCAxMDYxMjYsIDEwNjEzMCwgMTA2MTM0LCAKLSAgICAxMDYxMzgsIDEwNjE0MiwgMTA2MTQ2LCAxMDYxNTAsIDEwNjE1NCwgMTA2MTU4LCAxMDYxNjIsIDEwNjE2NiwgMTA2MTcwLCAKLSAgICAxMDYxNzQsIDEwNjE3OCwgMTA2MTgyLCAxMDYxODYsIDEwNjE5MCwgMTA2MTk0LCAxMDYxOTgsIDEwNjIwMiwgMTA2MjA2LCAKLSAgICAxMDYyMTAsIDEwNjIxNCwgMTA2MjE4LCAxMDYyMjIsIDEwNjIyNiwgMTA2MjMwLCAxMDYyMzQsIDEwNjIzOCwgMTA2MjQyLCAKLSAgICAxMDYyNDYsIDEwNjI1MCwgMTA2MjU0LCAxMDYyNTgsIDEwNjI2MiwgMTA2MjY2LCAxMDYyNzAsIDEwNjI3NCwgMTA2Mjc4LCAKLSAgICAxMDYyODIsIDEwNjI4NiwgMTA2MjkwLCAxMDYyOTQsIDEwNjI5OCwgMTA2MzAyLCAxMDYzMDYsIDEwNjMxMCwgMTA2MzE0LCAKLSAgICAxMDYzMTgsIDEwNjMyMiwgMTA2MzI2LCAxMDYzMzAsIDEwNjMzNCwgMTA2MzM4LCAxMDYzNDIsIDEwNjM0NiwgMTA2MzUwLCAKLSAgICAxMDYzNTQsIDEwNjM1OCwgMTA2MzYyLCAxMDYzNjYsIDEwNjM3MCwgMTA2Mzc0LCAxMDYzNzgsIDEwNjM4MiwgMTA2Mzg2LCAKLSAgICAxMDYzOTAsIDEwNjM5NCwgMTA2Mzk4LCAxMDY0MDIsIDEwNjQwNiwgMTA2NDEwLCAxMDY0MTQsIDEwNjQxOCwgMTA2NDIyLCAKLSAgICAxMDY0MjYsIDEwNjQzMCwgMTA2NDM0LCAxMDY0MzgsIDEwNjQ0MiwgMTA2NDQ2LCAxMDY0NTAsIDEwNjQ1NCwgMTA2NDU4LCAKLSAgICAxMDY0NjIsIDEwNjQ2NiwgMTA2NDcwLCAxMDY0NzQsIDEwNjQ3OCwgMTA2NDgyLCAxMDY0ODYsIDEwNjQ5MCwgMTA2NDk0LCAKLSAgICAxMDY0OTgsIDEwNjUwMiwgMTA2NTA2LCAxMDY1MTAsIDEwNjUxNCwgMTA2NTE4LCAxMDY1MjIsIDEwNjUyNiwgMTA2NTMwLCAKLSAgICAxMDY1MzQsIDEwNjUzOCwgMTA2NTQyLCAxMDY1NDYsIDEwNjU1MCwgMTA2NTU0LCAxMDY1NTgsIDEwNjU2MiwgMTA2NTY2LCAKLSAgICAxMDY1NzAsIDEwNjU3NCwgMTA2NTc4LCAxMDY1ODIsIDEwNjU4NiwgMTA2NTkwLCAxMDY1OTQsIDEwNjU5OCwgMTA2NjAyLCAKLSAgICAxMDY2MDYsIDEwNjYxMCwgMTA2NjE0LCAxMDY2MTgsIDEwNjYyMiwgMTA2NjI2LCAxMDY2MzAsIDEwNjYzNCwgMTA2NjM4LCAKLSAgICAxMDY2NDIsIDEwNjY0NiwgMTA2NjUwLCAxMDY2NTQsIDEwNjY1OCwgMTA2NjYyLCAxMDY2NjYsIDEwNjY3MCwgMTA2Njc0LCAKLSAgICAxMDY2NzgsIDEwNjY4MiwgMTA2Njg2LCAxMDY2OTAsIDEwNjY5NCwgMTA2Njk4LCAxMDY3MDIsIDEwNjcwNiwgMTA2NzEwLCAKLSAgICAxMDY3MTQsIDEwNjcxOCwgMTA2NzIyLCAxMDY3MjYsIDEwNjczMCwgMTA2NzM0LCAxMDY3MzgsIDEwNjc0MiwgMTA2NzQ2LCAKLSAgICAxMDY3NTAsIDEwNjc1NCwgMTA2NzU4LCAxMDY3NjIsIDEwNjc2NiwgMTA2NzcwLCAxMDY3NzQsIDEwNjc3OCwgMTA2NzgyLCAKLSAgICAxMDY3ODYsIDEwNjc5MCwgMTA2Nzk0LCAxMDY3OTgsIDEwNjgwMiwgMTA2ODA2LCAxMDY4MTAsIDEwNjgxNCwgMTA2ODE4LCAKLSAgICAxMDY4MjIsIDEwNjgyNiwgMTA2ODMwLCAxMDY4MzQsIDEwNjgzOCwgMTA2ODQyLCAxMDY4NDYsIDEwNjg1MCwgMTA2ODU0LCAKLSAgICAxMDY4NTgsIDEwNjg2MiwgMTA2ODY2LCAxMDY4NzAsIDEwNjg3NCwgMTA2ODc4LCAxMDY4ODIsIDEwNjg4NiwgMTA2ODkwLCAKLSAgICAxMDY4OTQsIDEwNjg5OCwgMTA2OTAyLCAxMDY5MDYsIDEwNjkxMCwgMTA2OTE0LCAxMDY5MTgsIDEwNjkyMiwgMTA2OTI2LCAKLSAgICAxMDY5MzAsIDEwNjkzNCwgMTA2OTM4LCAxMDY5NDIsIDEwNjk0NiwgMTA2OTUwLCAxMDY5NTQsIDEwNjk1OCwgMTA2OTYyLCAKLSAgICAxMDY5NjYsIDEwNjk3MCwgMTA2OTc0LCAxMDY5NzgsIDEwNjk4MiwgMTA2OTg2LCAxMDY5OTAsIDEwNjk5NCwgMTA2OTk4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcwMDIsIDEwNzAwOSwgMTA3MDE2LCAxMDcwMjUsIDEwNzAzNCwgCi0gICAgMTA3MDQxLCAxMDcwNDYsIDEwNzA1MywgMTA3MDYwLCAxMDcwNjksIDEwNzA4MCwgMTA3MDkxLCAxMDcwOTYsIDEwNzEwMywgCi0gICAgMTA3MTA4LCAxMDcxMTMsIDEwNzExOCwgMTA3MTIzLCAxMDcxMjgsIDEwNzEzMywgMTA3MTM4LCAxMDcxNDMsIDEwNzE0OCwgCi0gICAgMTA3MTUzLCAxMDcxNTgsIDEwNzE2NSwgMTA3MTcyLCAxMDcxNzcsIDEwNzE4MiwgMTA3MTg3LCAxMDcxOTIsIDEwNzE5OSwgCi0gICAgMTA3MjA2LCAxMDcyMTQsIDEwNzIxOSwgMTA3MjI2LCAxMDcyMzEsIDEwNzIzNiwgMTA3MjQxLCAxMDcyNDYsIDEwNzI1MSwgCi0gICAgMTA3MjU4LCAxMDcyNjUsIDEwNzI3MCwgMTA3Mjc1LCAxMDcyODAsIDEwNzI4NSwgMTA3MjkwLCAxMDcyOTUsIDEwNzMwMCwgCi0gICAgMTA3MzA1LCAxMDczMTAsIDEwNzMxNSwgMTA3MzIwLCAxMDczMjUsIDEwNzMzMCwgMTA3MzM1LCAxMDczNDAsIDEwNzM0NSwgCi0gICAgMTA3MzUwLCAxMDczNTUsIDEwNzM2MCwgMTA3MzY3LCAxMDczNzIsIDEwNzM3NywgMTA3Mzg2LCAxMDczOTMsIDEwNzM5OCwgCi0gICAgMTA3NDAzLCAxMDc0MDgsIDEwNzQxMywgMTA3NDE4LCAxMDc0MjMsIDEwNzQyOCwgMTA3NDMzLCAxMDc0MzgsIDEwNzQ0MywgCi0gICAgMTA3NDQ4LCAxMDc0NTMsIDEwNzQ1OCwgMTA3NDYzLCAxMDc0NjgsIDEwNzQ3MywgMTA3NDc4LCAxMDc0ODMsIDEwNzQ4OCwgCi0gICAgMTA3NDkzLCAxMDc0OTgsIDEwNzUwNCwgMTA3NTEyLCAxMDc1MTgsIDEwNzUyNiwgMTA3NTM0LCAxMDc1NDIsIDEwNzU0OCwgCi0gICAgMTA3NTU0LCAxMDc1NjAsIDEwNzU2NiwgMTA3NTcyLCAxMDc1ODAsIDEwNzU5MCwgMTA3NTk4LCAxMDc2MDYsIDEwNzYxMiwgCi0gICAgMTA3NjE4LCAxMDc2MjYsIDEwNzYzNCwgMTA3NjQwLCAxMDc2NDgsIDEwNzY1NiwgMTA3NjY0LCAxMDc2NzAsIDEwNzY3NiwgCi0gICAgMTA3NjgyLCAxMDc2ODgsIDEwNzY5NCwgMTA3NzAwLCAxMDc3MDgsIDEwNzcxNiwgMTA3NzIyLCAxMDc3MjgsIDEwNzczNCwgCi0gICAgMTA3NzQwLCAxMDc3NDYsIDEwNzc1NCwgMTA3NzYwLCAxMDc3NjYsIDEwNzc3MiwgMTA3Nzc4LCAxMDc3ODQsIDEwNzc5MCwgCi0gICAgMTA3Nzk4LCAxMDc4MDQsIDEwNzgxMCwgMTA3ODE2LCAxMDc4MjIsIDEwNzgzMCwgMTA3ODM4LCAxMDc4NDQsIDEwNzg1MCwgCi0gICAgMTA3ODU2LCAxMDc4NjEsIDEwNzg2NywgMTA3ODczLCAxMDc4ODAsIDEwNzg4NSwgMTA3ODkwLCAxMDc4OTUsIDEwNzkwMCwgCi0gICAgMTA3OTA1LCAxMDc5MTAsIDEwNzkxNSwgMTA3OTIwLCAxMDc5MjUsIDEwNzkzNCwgMTA3OTQxLCAxMDc5NDYsIDEwNzk1MSwgCi0gICAgMTA3OTU2LCAxMDc5NjMsIDEwNzk2OCwgMTA3OTczLCAxMDc5NzgsIDEwNzk4NSwgMTA3OTkwLCAxMDc5OTUsIDEwODAwMCwgCi0gICAgMTA4MDA1LCAxMDgwMTAsIDEwODAxNSwgMTA4MDIwLCAxMDgwMjUsIDEwODAzMCwgMTA4MDM1LCAxMDgwNDAsIDEwODA0NywgCi0gICAgMTA4MDUyLCAxMDgwNTksIDEwODA2NCwgMTA4MDY5LCAxMDgwNzYsIDEwODA4MSwgMTA4MDg2LCAxMDgwOTEsIDEwODA5NiwgCi0gICAgMTA4MTAxLCAxMDgxMDYsIDEwODExMSwgMTA4MTE2LCAxMDgxMjEsIDEwODEyNiwgMTA4MTMxLCAxMDgxMzYsIDEwODE0MSwgCi0gICAgMTA4MTQ2LCAxMDgxNTEsIDEwODE1NiwgMTA4MTYxLCAxMDgxNjYsIDEwODE3MSwgMTA4MTc4LCAxMDgxODMsIDEwODE4OCwgCi0gICAgMTA4MTkzLCAxMDgxOTgsIDEwODIwMywgMTA4MjA4LCAxMDgyMTMsIDEwODIxOCwgMTA4MjIzLCAxMDgyMjgsIDEwODIzMywgCi0gICAgMTA4MjM4LCAxMDgyNDMsIDEwODI1MCwgMTA4MjU1LCAxMDgyNjAsIDEwODI2NywgMTA4MjcyLCAxMDgyNzcsIDEwODI4MiwgCi0gICAgMTA4Mjg3LCAxMDgyOTIsIDEwODI5NywgMTA4MzAyLCAxMDgzMDcsIDEwODMxMiwgMTA4MzE3LCAxMDgzMjQsIDEwODMyOSwgCi0gICAgMTA4MzM0LCAxMDgzMzksIDEwODM0NCwgMTA4MzQ5LCAxMDgzNTYsIDEwODM2MywgMTA4MzY4LCAxMDgzNzMsIDEwODM3OCwgCi0gICAgMTA4MzgzLCAxMDgzODgsIDEwODM5MywgMTA4Mzk4LCAxMDg0MDMsIDEwODQwOCwgMTA4NDEzLCAxMDg0MTgsIDEwODQyMywgCi0gICAgMTA4NDI4LCAxMDg0MzMsIDEwODQzOCwgMTA4NDQzLCAxMDg0NDgsIDEwODQ1MywgMTA4NDU4LCAxMDg0NjMsIDEwODQ2OCwgCi0gICAgMTA4NDczLCAxMDg0NzgsIDEwODQ4MywgMTA4NDg4LCAxMDg0OTMsIDEwODQ5OCwgMTA4NTAzLCAxMDg1MDgsIDEwODUxMywgCi0gICAgMTA4NTE4LCAxMDg1MjMsIDEwODUyOCwgMTA4NTMzLCAxMDg1MzgsIDEwODU0MywgMTA4NTUwLCAxMDg1NTUsIDEwODU2MCwgCi0gICAgMTA4NTY1LCAxMDg1NzAsIDEwODU3NSwgMTA4NTgwLCAxMDg1ODUsIDEwODU5MCwgMTA4NTk1LCAxMDg2MDAsIDEwODYwNSwgCi0gICAgMTA4NjEwLCAxMDg2MTUsIDEwODYyMCwgMTA4NjI1LCAxMDg2MzAsIDEwODYzNSwgMTA4NjQwLCAxMDg2NDUsIDEwODY1MCwgCi0gICAgMTA4NjU1LCAxMDg2NjAsIDEwODY2NSwgMTA4NjcwLCAxMDg2NzUsIDEwODY4MCwgMTA4Njg1LCAxMDg2OTAsIDEwODY5NSwgCi0gICAgMTA4NzAwLCAxMDg3MDUsIDEwODcxMCwgMTA4NzE1LCAxMDg3MjAsIDEwODcyNSwgMTA4NzMwLCAxMDg3MzUsIDEwODc0MCwgCi0gICAgMTA4NzQ1LCAxMDg3NTAsIDEwODc1NSwgMTA4NzYwLCAxMDg3NjUsIDEwODc3MCwgMTA4Nzc1LCAxMDg3ODAsIDEwODc4NSwgCi0gICAgMTA4NzkwLCAxMDg3OTUsIDEwODgwMCwgMTA4ODA1LCAxMDg4MTAsIDEwODgxNSwgMTA4ODIwLCAxMDg4MjUsIDEwODgzMCwgCi0gICAgMTA4ODM1LCAxMDg4NDAsIDEwODg0NywgMTA4ODUyLCAxMDg4NTcsIDEwODg2MiwgMTA4ODY3LCAxMDg4NzIsIDEwODg3NywgCi0gICAgMTA4ODgxLCAxMDg4ODYsIDEwODg5MSwgMTA4ODk2LCAxMDg5MDEsIDEwODkwNiwgMTA4OTExLCAxMDg5MTYsIDEwODkyMSwgCi0gICAgMTA4OTI2LCAxMDg5MzEsIDEwODkzNiwgMTA4OTQxLCAxMDg5NDYsIDEwODk1MSwgMTA4OTU4LCAxMDg5NjMsIDEwODk2OCwgCi0gICAgMTA4OTc0LCAxMDg5NzksIDEwODk4NCwgMTA4OTg5LCAxMDg5OTQsIDEwODk5OSwgMTA5MDA0LCAxMDkwMDksIDEwOTAxNCwgCi0gICAgMTA5MDE5LCAxMDkwMjQsIDEwOTAyOSwgMTA5MDM0LCAxMDkwMzksIDEwOTA0NCwgMTA5MDQ5LCAxMDkwNTQsIDEwOTA1OSwgCi0gICAgMTA5MDY0LCAxMDkwNjksIDEwOTA3NCwgMTA5MDc5LCAxMDkwODQsIDEwOTA4OSwgMTA5MDk0LCAxMDkwOTksIDEwOTEwNCwgCi0gICAgMTA5MTA5LCAxMDkxMTQsIDEwOTExOSwgMTA5MTI0LCAxMDkxMjksIDEwOTEzNCwgMTA5MTM5LCAxMDkxNDQsIDEwOTE0OSwgCi0gICAgMTA5MTU0LCAxMDkxNTksIDEwOTE2NCwgMTA5MTY5LCAxMDkxNzQsIDEwOTE3OSwgMTA5MTg0LCAxMDkxODksIDEwOTE5NiwgCi0gICAgMTA5MjAxLCAxMDkyMDYsIDEwOTIxMywgMTA5MjIwLCAxMDkyMjUsIDEwOTIzMCwgMTA5MjM1LCAxMDkyNDAsIDEwOTI0NSwgCi0gICAgMTA5MjUwLCAxMDkyNTUsIDEwOTI2MCwgMTA5MjY1LCAxMDkyNzAsIDEwOTI3NSwgMTA5MjgwLCAxMDkyODUsIDEwOTI5MCwgCi0gICAgMTA5Mjk1LCAxMDkzMDAsIDEwOTMwNSwgMTA5MzEwLCAxMDkzMTUsIDEwOTMyMCwgMTA5MzI1LCAxMDkzMzAsIDEwOTMzNSwgCi0gICAgMTA5MzQwLCAxMDkzNDUsIDEwOTM1MiwgMTA5MzU3LCAxMDkzNjIsIDEwOTM2NywgMTA5MzcyLCAxMDkzNzcsIDEwOTM4MiwgCi0gICAgMTA5Mzg3LCAxMDkzOTIsIDEwOTM5NywgMTA5NDAyLCAxMDk0MDcsIDEwOTQxMiwgMTA5NDE3LCAxMDk0MjIsIDEwOTQyNywgCi0gICAgMTA5NDMyLCAxMDk0MzcsIDEwOTQ0MiwgMTA5NDQ5LCAxMDk0NTQsIDEwOTQ1OSwgMTA5NDY0LCAxMDk0NjksIDEwOTQ3NCwgCi0gICAgMTA5NDc5LCAxMDk0ODQsIDEwOTQ5MCwgMTA5NDk1LCAxMDk1MDAsIDEwOTUwNSwgMTA5NTEwLCAxMDk1MTUsIDEwOTUyMCwgCi0gICAgMTA5NTI1LCAxMDk1MzAsIDEwOTUzNywgMTA5NTQ0LCAxMDk1NDksIDEwOTU1NCwgMTA5NTU4LCAxMDk1NjMsIDEwOTU2NywgCi0gICAgMTA5NTcxLCAxMDk1NzYsIDEwOTU4MywgMTA5NTg4LCAxMDk1OTMsIDEwOTYwMiwgMTA5NjA3LCAxMDk2MTIsIDEwOTYxNywgCi0gICAgMTA5NjIyLCAxMDk2MjksIDEwOTYzNiwgMTA5NjQxLCAxMDk2NDYsIDEwOTY1MSwgMTA5NjU2LCAxMDk2NjMsIDEwOTY2OCwgCi0gICAgMTA5NjczLCAxMDk2NzgsIDEwOTY4MywgMTA5Njg4LCAxMDk2OTMsIDEwOTY5OCwgMTA5NzAzLCAxMDk3MDgsIDEwOTcxMywgCi0gICAgMTA5NzE4LCAxMDk3MjMsIDEwOTczMCwgMTA5NzM0LCAxMDk3MzksIDEwOTc0NCwgMTA5NzQ5LCAxMDk3NTQsIDEwOTc1OCwgCi0gICAgMTA5NzYzLCAxMDk3NjgsIDEwOTc3MywgMTA5Nzc4LCAxMDk3ODMsIDEwOTc4OCwgMTA5NzkzLCAxMDk3OTgsIDEwOTgwMywgCi0gICAgMTA5ODA5LCAxMDk4MTUsIDEwOTgyMSwgMTA5ODI3LCAxMDk4MzMsIDEwOTgzOSwgMTA5ODQ1LCAxMDk4NTEsIDEwOTg1NywgCi0gICAgMTA5ODYzLCAxMDk4NjksIDEwOTg3NSwgMTA5ODgwLCAxMDk4ODYsIDEwOTg5MiwgMTA5ODk4LCAxMDk5MDQsIDEwOTkxMCwgCi0gICAgMTA5OTE2LCAxMDk5MjIsIDEwOTkyOCwgMTA5OTM0LCAxMDk5NDAsIDEwOTk0NiwgMTA5OTUxLCAxMDk5NTcsIDEwOTk2MywgCi0gICAgMTA5OTY5LCAxMDk5NzUsIDEwOTk4MSwgMTA5OTg3LCAxMDk5OTMsIDEwOTk5OSwgMTEwMDA1LCAxMTAwMTEsIDExMDAxNywgCi0gICAgMTEwMDIzLCAxMTAwMjksIDExMDAzNSwgMTEwMDQxLCAxMTAwNDcsIDExMDA1MywgMTEwMDU5LCAxMTAwNjUsIDExMDA3MSwgCi0gICAgMTEwMDc2LCAxMTAwODIsIDExMDA4OCwgMTEwMDk0LCAxMTAxMDAsIDExMDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMTEyLCAxMTAxMTUsIDExMDExOSwgCi0gICAgMTEwMTIzLCAxMTAxMjcsIDExMDEzMCwgMTEwMTM0LCAxMTAxMzksIDExMDE0MywgMTEwMTQ3LCAxMTAxNTEsIDExMDE1NSwgCi0gICAgMTEwMTU5LCAxMTAxNjQsIDExMDE2OSwgMTEwMTczLCAxMTAxNzcsIDExMDE4MCwgMTEwMTg0LCAxMTAxODksIDExMDE5NCwgCi0gICAgMTEwMTk4LCAxMTAyMDIsIDExMDIwNiwgMTEwMjEwLCAxMTAyMTQsIDExMDIxOCwgMTEwMjIyLCAxMTAyMjYsIDExMDIzMCwgCi0gICAgMTEwMjM0LCAxMTAyMzcsIDExMDI0MSwgMTEwMjQ1LCAxMTAyNDksIDExMDI1MywgMTEwMjU3LCAxMTAyNjEsIDExMDI2NywgCi0gICAgMTEwMjcwLCAxMTAyNzQsIDExMDI3OCwgMTEwMjgyLCAxMTAyODYsIDExMDI5MCwgMTEwMjk0LCAxMTAyOTgsIDExMDMwMiwgCi0gICAgMTEwMzA2LCAxMTAzMTEsIDExMDMxNiwgMTEwMzIyLCAxMTAzMjYsIDExMDMzMCwgMTEwMzM0LCAxMTAzMzgsIDExMDM0MiwgCi0gICAgMTEwMzQ2LCAxMTAzNTEsIDExMDM1NCwgMTEwMzU4LCAxMTAzNjIsIDExMDM2NiwgMTEwMzcwLCAxMTAzNzYsIDExMDM4MCwgCi0gICAgMTEwMzg0LCAxMTAzODgsIDExMDM5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMzk2LCAxMTA0MDAsIAotICAgIDExMDQwNCwgMTEwNDEwLCAxMTA0MTYsIDExMDQyMCwgMTEwNDI1LCAxMTA0MzAsIDExMDQzNSwgMTEwNDQwLCAxMTA0NDQsIAotICAgIDExMDQ0OSwgMTEwNDU0LCAxMTA0NTksIDExMDQ2MywgMTEwNDY4LCAxMTA0NzMsIDExMDQ3OCwgMTEwNDgyLCAxMTA0ODcsIAotICAgIDExMDQ5MiwgMTEwNDk3LCAxMTA1MDIsIDExMDUwNywgMTEwNTEyLCAxMTA1MTcsIDExMDUyMiwgMTEwNTI2LCAxMTA1MzEsIAotICAgIDExMDUzNiwgMTEwNTQxLCAxMTA1NDYsIDExMDU1MSwgMTEwNTU2LCAxMTA1NjEsIDExMDU2NiwgMTEwNTcxLCAxMTA1NzYsIAotICAgIDExMDU4MSwgMTEwNTg4LCAxMTA1OTMsIDExMDYwMCwgMTEwNjA1LCAxMTA2MTAsIDExMDYxNSwgMTEwNjIwLCAxMTA2MjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDYzMCwgMTEwNjM0LCAxMTA2NDAsIAotICAgIDExMDY0MywgMTEwNjQ2LCAxMTA2NTAsIDExMDY1NCwgMTEwNjU4LCAxMTA2NjIsIDExMDY2NiwgMTEwNjcwLCAxMTA2NzQsIAotICAgIDExMDY4MCwgMTEwNjg2LCAxMTA2OTIsIDExMDY5OCwgMTEwNzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA3MTAsIDExMDcxNSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTEwNzIxLCAxMTA3MjYsIDExMDczMSwgMTEwNzM2LCAxMTA3NDMsIDExMDc1MCwgMTEwNzU3LCAxMTA3NjQsIDExMDc2OSwgCi0gICAgMTEwNzc0LCAxMTA3NzksIDExMDc4NCwgMTEwNzkxLCAxMTA3OTYsIDExMDgwMywgMTEwODEwLCAxMTA4MTUsIDExMDgyMCwgCi0gICAgMTEwODI1LCAxMTA4MzIsIDExMDgzNywgMTEwODQyLCAxMTA4NDksIDExMDg1NiwgMTEwODYxLCAxMTA4NjYsIDExMDg3MSwgCi0gICAgMTEwODc4LCAxMTA4ODUsIDExMDg5MiwgMTEwODk3LCAxMTA5MDIsIDExMDkwOSwgMTEwOTE2LCAxMTA5MjMsIDExMDkzMCwgCi0gICAgMTEwOTM1LCAxMTA5NDAsIDExMDk0NSwgMTEwOTUyLCAxMTA5NTcsIDExMDk2MiwgMTEwOTY3LCAxMTA5NzQsIDExMDk4MywgCi0gICAgMTEwOTkwLCAxMTA5OTUsIDExMTAwMCwgMTExMDA1LCAxMTEwMTAsIDExMTAxNSwgMTExMDIwLCAxMTEwMjksIDExMTAzNiwgCi0gICAgMTExMDQxLCAxMTEwNDgsIDExMTA1NSwgMTExMDYwLCAxMTEwNjUsIDExMTA3MCwgMTExMDc3LCAxMTEwODIsIDExMTA4OSwgCi0gICAgMTExMDk2LCAxMTExMDEsIDExMTEwNiwgMTExMTExLCAxMTExMTgsIDExMTEyNSwgMTExMTMwLCAxMTExMzUsIDExMTE0MiwgCi0gICAgMTExMTQ5LCAxMTExNTYsIDExMTE2MSwgMTExMTY2LCAxMTExNzEsIDExMTE3NiwgMTExMTgzLCAxMTExOTIsIDExMTIwMSwgCi0gICAgMTExMjA2LCAxMTEyMTMsIDExMTIyMiwgMTExMjI3LCAxMTEyMzIsIDExMTIzNywgMTExMjQyLCAxMTEyNDksIDExMTI1NiwgCi0gICAgMTExMjYzLCAxMTEyNzAsIDExMTI3NSwgMTExMjgwLCAxMTEyODUsIDExMTI5MiwgMTExMjk5LCAxMTEzMDYsIDExMTMxMSwgCi0gICAgMTExMzE2LCAxMTEzMjMsIDExMTMyOCwgMTExMzM1LCAxMTEzNDAsIDExMTM0NywgMTExMzUyLCAxMTEzNTksIDExMTM2NiwgCi0gICAgMTExMzcxLCAxMTEzNzYsIDExMTM4MSwgMTExMzg2LCAxMTEzOTEsIDExMTM5NiwgMTExNDAxLCAxMTE0MDYsIDExMTQxMSwgCi0gICAgMTExNDE4LCAxMTE0MjUsIDExMTQzMiwgMTExNDM5LCAxMTE0NDYsIDExMTQ1NSwgMTExNDYwLCAxMTE0NjUsIDExMTQ3MiwgCi0gICAgMTExNDc5LCAxMTE0ODQsIDExMTQ5MSwgMTExNDk4LCAxMTE1MDUsIDExMTUxMiwgMTExNTE5LCAxMTE1MjYsIDExMTUzMSwgCi0gICAgMTExNTM2LCAxMTE1NDEsIDExMTU0NiwgMTExNTUxLCAxMTE1NjAsIDExMTU2OSwgMTExNTc4LCAxMTE1ODcsIDExMTU5NiwgCi0gICAgMTExNjA1LCAxMTE2MTQsIDExMTYyMywgMTExNjI4LCAxMTE2MzksIDExMTY1MCwgMTExNjU5LCAxMTE2NjQsIDExMTY2OSwgCi0gICAgMTExNjc0LCAxMTE2NzksIDExMTY4OCwgMTExNjk1LCAxMTE3MDIsIDExMTcwOSwgMTExNzE2LCAxMTE3MjMsIDExMTczMCwgCi0gICAgMTExNzM5LCAxMTE3NDgsIDExMTc1OSwgMTExNzY4LCAxMTE3NzksIDExMTc4OCwgMTExNzk1LCAxMTE4MDQsIDExMTgxNSwgCi0gICAgMTExODI0LCAxMTE4MzMsIDExMTg0MiwgMTExODUxLCAxMTE4NTgsIDExMTg2NSwgMTExODcyLCAxMTE4ODEsIDExMTg5MCwgCi0gICAgMTExOTAxLCAxMTE5MTAsIDExMTkxOSwgMTExOTMwLCAxMTE5MzUsIDExMTk0MCwgMTExOTUxLCAxMTE5NTksIDExMTk2OCwgCi0gICAgMTExOTc3LCAxMTE5ODYsIDExMTk5NywgMTEyMDA2LCAxMTIwMTUsIDExMjAyNiwgMTEyMDM3LCAxMTIwNDgsIDExMjA1OSwgCi0gICAgMTEyMDcwLCAxMTIwODEsIDExMjA4OCwgMTEyMDk1LCAxMTIxMDIsIDExMjEwOSwgMTEyMTIwLCAxMTIxMjksIDExMjEzNiwgCi0gICAgMTEyMTQzLCAxMTIxNTAsIDExMjE2MSwgMTEyMTcyLCAxMTIxODMsIDExMjE5NCwgMTEyMjA1LCAxMTIyMTYsIDExMjIyNywgCi0gICAgMTEyMjM4LCAxMTIyNDUsIDExMjI1MiwgMTEyMjYxLCAxMTIyNzAsIDExMjI3NywgMTEyMjg0LCAxMTIyOTEsIDExMjMwMCwgCi0gICAgMTEyMzA5LCAxMTIzMTgsIDExMjMyNSwgMTEyMzM0LCAxMTIzNDMsIDExMjM1MiwgMTEyMzU5LCAxMTIzNjYsIDExMjM3MSwgCi0gICAgMTEyMzc3LCAxMTIzODQsIDExMjM5MSwgMTEyMzk4LCAxMTI0MDUsIDExMjQxMiwgMTEyNDE5LCAxMTI0MjgsIDExMjQzNywgCi0gICAgMTEyNDQ2LCAxMTI0NTUsIDExMjQ2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNDcxLCAxMTI0NzcsIAotICAgIDExMjQ4MiwgMTEyNDg3LCAxMTI0OTQsIDExMjUwMCwgMTEyNTA2LCAxMTI1MTIsIDExMjUxOCwgMTEyNTI0LCAxMTI1MzAsIAotICAgIDExMjUzNiwgMTEyNTQwLCAxMTI1NDQsIDExMjU1MCwgMTEyNTU2LCAxMTI1NjIsIDExMjU2NiwgMTEyNTcxLCAxMTI1NzYsIAotICAgIDExMjU4MCwgMTEyNTg0LCAxMTI1ODcsIDExMjU5MywgMTEyNTk5LCAxMTI2MDUsIDExMjYxMSwgMTEyNjE3LCAxMTI2MjMsIAotICAgIDExMjYyOSwgMTEyNjM1LCAxMTI2NDEsIDExMjY1MSwgMTEyNjYxLCAxMTI2NjcsIDExMjY3MywgMTEyNjgzLCAxMTI2OTMsIAotICAgIDExMjY5OSwgMCwgMCwgMTEyNzA1LCAxMTI3MTMsIDExMjcxOCwgMTEyNzIzLCAxMTI3MjksIDExMjczNSwgMTEyNzQxLCAKLSAgICAxMTI3NDcsIDExMjc1MywgMTEyNzU5LCAxMTI3NjYsIDExMjc3MywgMTEyNzc5LCAxMTI3ODUsIDExMjc5MSwgMTEyNzk3LCAKLSAgICAxMTI4MDMsIDExMjgwOSwgMTEyODE1LCAxMTI4MjEsIDExMjgyNiwgMTEyODMyLCAxMTI4MzgsIDExMjg0NCwgMTEyODUwLCAKLSAgICAxMTI4NTYsIDExMjg2NSwgMTEyODcxLCAxMTI4NzYsIDExMjg4NCwgMTEyODkxLCAxMTI4OTgsIDExMjkwNywgMTEyOTE2LCAKLSAgICAxMTI5MjUsIDExMjkzNCwgMTEyOTQzLCAxMTI5NTIsIDExMjk2MSwgMTEyOTcwLCAxMTI5ODAsIDExMjk5MCwgMTEyOTk4LCAKLSAgICAxMTMwMDYsIDExMzAxNSwgMTEzMDI0LCAxMTMwMzAsIDExMzAzNiwgMTEzMDQyLCAxMTMwNDgsIDExMzA1NiwgMTEzMDY0LCAKLSAgICAxMTMwNjgsIDExMzA3NCwgMTEzMDc5LCAxMTMwODUsIDExMzA5MSwgMTEzMDk3LCAxMTMxMDMsIDExMzEwOSwgMTEzMTE4LCAKLSAgICAxMTMxMjMsIDExMzEzMCwgMTEzMTM1LCAxMTMxNDAsIDExMzE0NSwgMTEzMTUxLCAxMTMxNTcsIDExMzE2MywgMTEzMTcwLCAKLSAgICAxMTMxNzUsIDExMzE4MCwgMTEzMTg1LCAxMTMxOTAsIDExMzE5NSwgMTEzMjAxLCAxMTMyMDcsIDExMzIxMywgMTEzMjE5LCAKLSAgICAxMTMyMjUsIDExMzIzMSwgMTEzMjM3LCAxMTMyNDMsIDExMzI0OCwgMTEzMjUzLCAxMTMyNTgsIDExMzI2MywgMTEzMjY4LCAKLSAgICAxMTMyNzMsIDExMzI3OCwgMTEzMjgzLCAxMTMyODksIDExMzI5NSwgMTEzMzAwLCAxMTMzMDUsIDExMzMxMCwgMTEzMzE1LCAKLSAgICAxMTMzMjAsIDExMzMyNiwgMTEzMzMzLCAxMTMzMzcsIDExMzM0MSwgMTEzMzQ1LCAxMTMzNDksIDExMzM1MywgMTEzMzU3LCAKLSAgICAxMTMzNjEsIDExMzM2NSwgMTEzMzczLCAxMTMzODMsIDExMzM4NywgMTEzMzkxLCAxMTMzOTcsIDExMzQwMywgMTEzNDA5LCAKLSAgICAxMTM0MTUsIDExMzQyMSwgMTEzNDI3LCAxMTM0MzMsIDExMzQzOSwgMTEzNDQ1LCAxMTM0NTEsIDExMzQ1NywgMTEzNDYzLCAKLSAgICAxMTM0NjksIDExMzQ3NSwgMTEzNDc5LCAxMTM0ODMsIDExMzQ5MCwgMTEzNDk2LCAxMTM1MDIsIDExMzUwOCwgMTEzNTEzLCAKLSAgICAxMTM1MjAsIDExMzUyNSwgMTEzNTMxLCAxMTM1MzcsIDExMzU0MywgMTEzNTQ5LCAxMTM1NTQsIDExMzU1OCwgMTEzNTY0LCAKLSAgICAxMTM1NjgsIDExMzU3MiwgMTEzNTc2LCAxMTM1ODIsIDExMzU4OCwgMTEzNTkyLCAxMTM1OTgsIDExMzYwNCwgMTEzNjEwLCAKLSAgICAxMTM2MTYsIDExMzYyMiwgMTEzNjMwLCAxMTM2MzgsIDExMzY0NCwgMTEzNjUwLCAxMTM2NTYsIDExMzY2MiwgMTEzNjc0LCAKLSAgICAxMTM2ODYsIDExMzcwMCwgMTEzNzEyLCAxMTM3MjQsIDExMzczOCwgMTEzNzUyLCAxMTM3NjYsIDExMzc3MCwgMTEzNzc4LCAKLSAgICAxMTM3ODYsIDExMzc5MSwgMTEzNzk1LCAxMTM3OTksIDExMzgwMywgMTEzODA3LCAxMTM4MTEsIDExMzgxNSwgMTEzODE5LCAKLSAgICAxMTM4MjUsIDExMzgzMSwgMTEzODM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM4NDMsIDExMzg0OSwgCi0gICAgMTEzODU1LCAxMTM4NjEsIDExMzg2NywgMTEzODczLCAxMTM4NzksIDExMzg4NSwgMTEzODkxLCAxMTM4OTcsIDExMzkwMywgCi0gICAgMTEzOTA5LCAxMTM5MTUsIDExMzkyMSwgMTEzOTI3LCAxMTM5MzMsIDExMzkzOSwgMTEzOTQ1LCAxMTM5NTEsIDExMzk1NywgCi0gICAgMTEzOTYzLCAxMTM5NjksIDExMzk3NSwgMTEzOTgxLCAxMTM5ODcsIDExMzk5MywgMTEzOTk5LCAxMTQwMDUsIDExNDAxMSwgCi0gICAgMTE0MDE3LCAxMTQwMjMsIDExNDAyOSwgMTE0MDM1LCAxMTQwNDEsIDExNDA0NywgMTE0MDUzLCAxMTQwNTksIDExNDA2NSwgCi0gICAgMTE0MDcxLCAxMTQwNzcsIDExNDA4MywgMTE0MDg5LCAxMTQwOTUsIDExNDEwMSwgMTE0MTA3LCAxMTQxMTMsIDExNDExOSwgCi0gICAgMTE0MTI1LCAxMTQxMzEsIDExNDEzNywgMTE0MTQzLCAxMTQxNDksIDExNDE1NSwgMTE0MTYxLCAxMTQxNjcsIDExNDE3MywgCi0gICAgMTE0MTc5LCAxMTQxODUsIDExNDE5MSwgMTE0MTk3LCAxMTQyMDMsIDExNDIwOSwgMTE0MjE1LCAxMTQyMjEsIDExNDIyNywgCi0gICAgMTE0MjMzLCAxMTQyMzksIDExNDI0NCwgMTE0MjQ5LCAxMTQyNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzkyLCA5MTc5OCwgOTE4MDQsIDkxODEwLCA5MTgxNiwgOTE4MjIsIDkxODI5LCAKKyAgICA5MTgzNiwgOTE4NDMsIDkxODQ5LCA5MTg1NSwgOTE4NjEsIDkxODY4LCA5MTg3NSwgOTE4ODIsIDkxODg4LCA5MTg5NSwgCisgICAgOTE5MDIsIDkxOTA5LCA5MTkxNiwgOTE5MjIsIDkxOTI5LCA5MTkzNiwgOTE5NDIsIDkxOTQ5LCA5MTk1NiwgOTE5NjMsIAorICAgIDkxOTcwLCA5MTk3NywgOTE5ODMsIDkxOTkwLCA5MTk5NywgOTIwMDQsIDkyMDEwLCA5MjAxNiwgOTIwMjIsIDkyMDI4LCAKKyAgICA5MjAzNCwgOTIwNDEsIDkyMDQ4LCA5MjA1NCwgOTIwNjAsIDkyMDY2LCA5MjA3MywgOTIwNzksIDkyMDg2LCA5MjA5MywgCisgICAgOTIxMDAsIDkyMTA2LCA5MjExNCwgOTIxMjEsIDkyMTI3LCA5MjEzNCwgOTIxNDEsIDkyMTQ4LCA5MjE1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOTIxNjEsIDkyMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTQyNTgsIDExNDI2MywgMTE0MjcwLCAxMTQyNzcsIDExNDI4NCwgMTE0MjkxLCAxMTQyOTYsIDExNDMwMCwgMTE0MzA2LCAKLSAgICAxMTQzMTAsIDExNDMxNCwgMTE0MzIwLCAxMTQzMjQsIDExNDMyOCwgMTE0MzMyLCAxMTQzMzgsIDExNDM0NSwgMTE0MzQ5LCAKLSAgICAxMTQzNTMsIDExNDM1NywgMTE0MzYxLCAxMTQzNjUsIDExNDM2OSwgMTE0Mzc1LCAxMTQzNzksIDExNDM4MywgMTE0Mzg3LCAKLSAgICAxMTQzOTEsIDExNDM5NSwgMTE0Mzk5LCAxMTQ0MDMsIDExNDQwNywgMTE0NDExLCAxMTQ0MTUsIDExNDQxOSwgMTE0NDIzLCAKLSAgICAxMTQ0MjgsIDExNDQzMiwgMTE0NDM2LCAxMTQ0NDAsIDExNDQ0NCwgMTE0NDQ4LCAxMTQ0NTIsIDExNDQ1NiwgMTE0NDYwLCAKLSAgICAxMTQ0NjQsIDExNDQ3MSwgMTE0NDc1LCAxMTQ0ODMsIDExNDQ4NywgMTE0NDkxLCAxMTQ0OTUsIDExNDQ5OSwgMTE0NTAzLCAKLSAgICAxMTQ1MDcsIDExNDUxMSwgMTE0NTE4LCAxMTQ1MjIsIDExNDUyNiwgMTE0NTMwLCAxMTQ1MzQsIDExNDUzOCwgMTE0NTQ0LCAKLSAgICAxMTQ1NDgsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcwLCAxMTQ1NzQsIDExNDU3OCwgMTE0NTgyLCAKLSAgICAxMTQ1ODYsIDExNDU5MCwgMTE0NTk0LCAxMTQ1OTgsIDExNDYwMiwgMTE0NjA2LCAxMTQ2MTAsIDExNDYxNCwgMTE0NjE4LCAKLSAgICAxMTQ2MjIsIDExNDYyNiwgMTE0NjMwLCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMTQ2NTAsIDExNDY1OCwgMTE0NjY2LCAxMTQ2NzQsIDExNDY4MiwgMTE0NjkwLCAxMTQ2OTgsIDExNDcwNiwgCi0gICAgMTE0NzE0LCAxMTQ3MjIsIDExNDczMCwgMTE0NzM4LCAxMTQ3NDYsIDExNDc1NCwgMTE0NzYyLCAxMTQ3NzAsIDExNDc3OCwgCi0gICAgMTE0Nzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ3OTQsIDExNDc5OCwgMTE0ODAzLCAKLSAgICAxMTQ4MDgsIDExNDgxMywgMTE0ODE3LCAxMTQ4MjIsIDExNDgyNywgMTE0ODMyLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ2LCAKLSAgICAxMTQ4NTAsIDExNDg1NCwgMTE0ODU5LCAxMTQ4NjMsIDExNDg2OCwgMTE0ODczLCAxMTQ4NzcsIDExNDg4MiwgMTE0ODg3LCAKLSAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDYsIDExNDkxMSwgMTE0OTE2LCAxMTQ5MjAsIDExNDkyNSwgMTE0OTMwLCAKLSAgICAxMTQ5MzUsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDksIDExNDk1NCwgMTE0OTU4LCAxMTQ5NjMsIDExNDk2OCwgMTE0OTcyLCAKLSAgICAxMTQ5NzYsIDExNDk4MSwgMTE0OTg1LCAxMTQ5OTAsIDExNDk5NSwgMTE0OTk5LCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKLSAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI4LCAxMTUwMzMsIDExNTAzOCwgMTE1MDQyLCAxMTUwNDcsIDExNTA1MiwgMTE1MDU3LCAKLSAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcxLCAxMTUwNzYsIDExNTA4MCwgMTE1MDg1LCAxMTUwOTAsIDExNTA5NCwgMTE1MDk4LCAKLSAgICAxMTUxMDMsIDExNTEwNywgMTE1MTEyLCAxMTUxMTcsIDExNTEyMSwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKLSAgICAxMTUxNDUsIDExNTE1MCwgMTE1MTU1LCAxMTUxNjAsIDExNTE2NCwgMTE1MTY5LCAxMTUxNzQsIDExNTE3OSwgMTE1MTgzLCAKLSAgICAxMTUxODgsIDAsIDExNTE5MywgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTUsIDExNTIyMCwgCi0gICAgMTE1MjI0LCAxMTUyMjksIDExNTIzNCwgMTE1MjM4LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCi0gICAgMTE1MjY3LCAxMTUyNzIsIDExNTI3NywgMTE1MjgyLCAxMTUyODgsIDExNTI5NCwgMTE1MzAwLCAxMTUzMDUsIDExNTMxMSwgCi0gICAgMTE1MzE3LCAxMTUzMjMsIDExNTMyOCwgMTE1MzM0LCAxMTUzNDAsIDExNTM0NSwgMTE1MzUwLCAxMTUzNTYsIDExNTM2MSwgCi0gICAgMTE1MzY3LCAxMTUzNzMsIDExNTM3OCwgMTE1Mzg0LCAxMTUzOTAsIDExNTM5NSwgMTE1NDAxLCAxMTU0MDcsIDExNTQxMywgCi0gICAgMTE1NDE5LCAxMTU0MjUsIDExNTQzMCwgMTE1NDM2LCAxMTU0NDIsIDExNTQ0OCwgMTE1NDUzLCAxMTU0NTksIDExNTQ2NSwgCi0gICAgMTE1NDcxLCAxMTU0NzYsIDExNTQ4MiwgMTE1NDg4LCAxMTU0OTMsIDExNTQ5OCwgMTE1NTA0LCAxMTU1MDksIDExNTUxNSwgCi0gICAgMTE1NTIxLCAxMTU1MjYsIDExNTUzMiwgMTE1NTM4LCAxMTU1NDMsIDExNTU0OSwgMTE1NTU1LCAxMTU1NjEsIDExNTU2NywgCi0gICAgMTE1NTczLCAwLCAxMTU1NzcsIDExNTU4MiwgMCwgMCwgMTE1NTg3LCAwLCAwLCAxMTU1OTIsIDExNTU5NywgMCwgMCwgCi0gICAgMTE1NjAyLCAxMTU2MDcsIDExNTYxMSwgMTE1NjE2LCAwLCAxMTU2MjEsIDExNTYyNiwgMTE1NjMxLCAxMTU2MzUsIAotICAgIDExNTY0MCwgMTE1NjQ1LCAxMTU2NTAsIDExNTY1NSwgMTE1NjYwLCAxMTU2NjQsIDExNTY2OSwgMTE1Njc0LCAwLCAKLSAgICAxMTU2NzksIDAsIDExNTY4NCwgMTE1Njg5LCAxMTU2OTMsIDExNTY5OCwgMTE1NzAzLCAxMTU3MDcsIDExNTcxMSwgMCwgCi0gICAgMTE1NzE2LCAxMTU3MjEsIDExNTcyNiwgMTE1NzMwLCAxMTU3MzUsIDExNTc0MCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCi0gICAgMTE1NzU5LCAxMTU3NjQsIDExNTc2OSwgMTE1Nzc0LCAxMTU3ODAsIDExNTc4NiwgMTE1NzkyLCAxMTU3OTcsIDExNTgwMywgCi0gICAgMTE1ODA5LCAxMTU4MTUsIDExNTgyMCwgMTE1ODI2LCAxMTU4MzIsIDExNTgzNywgMTE1ODQyLCAxMTU4NDgsIDExNTg1MywgCi0gICAgMTE1ODU5LCAxMTU4NjUsIDExNTg3MCwgMTE1ODc2LCAxMTU4ODIsIDExNTg4NywgMTE1ODkzLCAxMTU4OTksIDExNTkwNSwgCi0gICAgMTE1OTExLCAxMTU5MTcsIDExNTkyMiwgMTE1OTI4LCAxMTU5MzQsIDExNTk0MCwgMTE1OTQ1LCAxMTU5NTEsIDExNTk1NywgCi0gICAgMTE1OTYzLCAxMTU5NjgsIDExNTk3NCwgMTE1OTgwLCAxMTU5ODUsIDExNTk5MCwgMTE1OTk2LCAxMTYwMDEsIDExNjAwNywgCi0gICAgMTE2MDEzLCAxMTYwMTgsIDExNjAyNCwgMTE2MDMwLCAxMTYwMzUsIDExNjA0MSwgMTE2MDQ3LCAxMTYwNTMsIDExNjA1OSwgCi0gICAgMTE2MDY1LCAxMTYwNjksIDAsIDExNjA3NCwgMTE2MDc5LCAxMTYwODMsIDExNjA4OCwgMCwgMCwgMTE2MDkzLCAxMTYwOTgsIAotICAgIDExNjEwMywgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMTE2MTIwLCAxMTYxMjUsIDAsIDExNjEzMCwgMTE2MTM1LCAKLSAgICAxMTYxNDAsIDExNjE0NCwgMTE2MTQ5LCAxMTYxNTQsIDExNjE1OSwgMCwgMTE2MTY0LCAxMTYxNjgsIDExNjE3MywgCi0gICAgMTE2MTc4LCAxMTYxODMsIDExNjE4NywgMTE2MTkyLCAxMTYxOTcsIDExNjIwMiwgMTE2MjA2LCAxMTYyMTEsIDExNjIxNiwgCi0gICAgMTE2MjIwLCAxMTYyMjQsIDExNjIyOSwgMTE2MjMzLCAxMTYyMzgsIDExNjI0MywgMTE2MjQ3LCAxMTYyNTIsIDExNjI1NywgCi0gICAgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc2LCAxMTYyODEsIDExNjI4NiwgMTE2MjkwLCAwLCAxMTYyOTUsIAotICAgIDExNjMwMCwgMTE2MzA0LCAxMTYzMDksIDAsIDExNjMxNCwgMTE2MzE4LCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAwLCAKLSAgICAxMTYzMzYsIDAsIDAsIDAsIDExNjM0MCwgMTE2MzQ1LCAxMTYzNTAsIDExNjM1NCwgMTE2MzU5LCAxMTYzNjQsIDExNjM2OSwgCi0gICAgMCwgMTE2Mzc0LCAxMTYzNzgsIDExNjM4MywgMTE2Mzg4LCAxMTYzOTMsIDExNjM5NywgMTE2NDAyLCAxMTY0MDcsIAotICAgIDExNjQxMiwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNiwgMTE2NDMwLCAxMTY0MzQsIDExNjQzOSwgMTE2NDQzLCAxMTY0NDgsIAotICAgIDExNjQ1MywgMTE2NDU3LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg2LCAxMTY0OTEsIAotICAgIDExNjQ5NiwgMTE2NTAxLCAxMTY1MDcsIDExNjUxMywgMTE2NTE5LCAxMTY1MjQsIDExNjUzMCwgMTE2NTM2LCAxMTY1NDIsIAotICAgIDExNjU0NywgMTE2NTUzLCAxMTY1NTksIDExNjU2NCwgMTE2NTY5LCAxMTY1NzUsIDExNjU4MCwgMTE2NTg2LCAxMTY1OTIsIAotICAgIDExNjU5NywgMTE2NjAzLCAxMTY2MDksIDExNjYxNCwgMTE2NjIwLCAxMTY2MjYsIDExNjYzMiwgMTE2NjM4LCAxMTY2NDQsIAotICAgIDExNjY0OSwgMTE2NjU1LCAxMTY2NjEsIDExNjY2NywgMTE2NjcyLCAxMTY2NzgsIDExNjY4NCwgMTE2NjkwLCAxMTY2OTUsIAotICAgIDExNjcwMSwgMTE2NzA3LCAxMTY3MTIsIDExNjcxNywgMTE2NzIzLCAxMTY3MjgsIDExNjczNCwgMTE2NzQwLCAxMTY3NDUsIAotICAgIDExNjc1MSwgMTE2NzU3LCAxMTY3NjIsIDExNjc2OCwgMTE2Nzc0LCAxMTY3ODAsIDExNjc4NiwgMTE2NzkyLCAxMTY3OTYsIAotICAgIDExNjgwMSwgMTE2ODA2LCAxMTY4MTEsIDExNjgxNSwgMTE2ODIwLCAxMTY4MjUsIDExNjgzMCwgMTE2ODM0LCAxMTY4MzksIAotICAgIDExNjg0NCwgMTE2ODQ4LCAxMTY4NTIsIDExNjg1NywgMTE2ODYxLCAxMTY4NjYsIDExNjg3MSwgMTE2ODc1LCAxMTY4ODAsIAotICAgIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTA0LCAxMTY5MDksIDExNjkxNCwgMTE2OTE4LCAxMTY5MjMsIAotICAgIDExNjkyOCwgMTE2OTMzLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ3LCAxMTY5NTIsIDExNjk1NiwgMTE2OTYxLCAxMTY5NjYsIAotICAgIDExNjk3MCwgMTE2OTc0LCAxMTY5NzksIDExNjk4MywgMTE2OTg4LCAxMTY5OTMsIDExNjk5NywgMTE3MDAyLCAxMTcwMDcsIAotICAgIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNiwgMTE3MDMxLCAxMTcwMzYsIDExNzA0MSwgMTE3MDQ3LCAxMTcwNTMsIAotICAgIDExNzA1OSwgMTE3MDY0LCAxMTcwNzAsIDExNzA3NiwgMTE3MDgyLCAxMTcwODcsIDExNzA5MywgMTE3MDk5LCAxMTcxMDQsIAotICAgIDExNzEwOSwgMTE3MTE1LCAxMTcxMjAsIDExNzEyNiwgMTE3MTMyLCAxMTcxMzcsIDExNzE0MywgMTE3MTQ5LCAxMTcxNTQsIAotICAgIDExNzE2MCwgMTE3MTY2LCAxMTcxNzIsIDExNzE3OCwgMTE3MTg0LCAxMTcxODksIDExNzE5NSwgMTE3MjAxLCAxMTcyMDcsIAotICAgIDExNzIxMiwgMTE3MjE4LCAxMTcyMjQsIDExNzIzMCwgMTE3MjM1LCAxMTcyNDEsIDExNzI0NywgMTE3MjUyLCAxMTcyNTcsIAotICAgIDExNzI2MywgMTE3MjY4LCAxMTcyNzQsIDExNzI4MCwgMTE3Mjg1LCAxMTcyOTEsIDExNzI5NywgMTE3MzAyLCAxMTczMDgsIAotICAgIDExNzMxNCwgMTE3MzIwLCAxMTczMjYsIDExNzMzMiwgMTE3MzM3LCAxMTczNDMsIDExNzM0OSwgMTE3MzU1LCAxMTczNjAsIAotICAgIDExNzM2NiwgMTE3MzcyLCAxMTczNzgsIDExNzM4MywgMTE3Mzg5LCAxMTczOTUsIDExNzQwMCwgMTE3NDA1LCAxMTc0MTEsIAotICAgIDExNzQxNiwgMTE3NDIyLCAxMTc0MjgsIDExNzQzMywgMTE3NDM5LCAxMTc0NDUsIDExNzQ1MCwgMTE3NDU2LCAxMTc0NjIsIAotICAgIDExNzQ2OCwgMTE3NDc0LCAxMTc0ODAsIDExNzQ4NSwgMTE3NDkxLCAxMTc0OTcsIDExNzUwMywgMTE3NTA4LCAxMTc1MTQsIAotICAgIDExNzUyMCwgMTE3NTI2LCAxMTc1MzEsIDExNzUzNywgMTE3NTQzLCAxMTc1NDgsIDExNzU1MywgMTE3NTU5LCAxMTc1NjQsIAotICAgIDExNzU3MCwgMTE3NTc2LCAxMTc1ODEsIDExNzU4NywgMTE3NTkzLCAxMTc1OTgsIDExNzYwNCwgMTE3NjEwLCAxMTc2MTYsIAotICAgIDExNzYyMiwgMTE3NjI4LCAxMTc2MzQsIDExNzY0MSwgMTE3NjQ4LCAxMTc2NTUsIDExNzY2MSwgMTE3NjY4LCAxMTc2NzUsIAotICAgIDExNzY4MiwgMTE3Njg4LCAxMTc2OTUsIDExNzcwMiwgMTE3NzA4LCAxMTc3MTQsIDExNzcyMSwgMTE3NzI3LCAxMTc3MzQsIAotICAgIDExNzc0MSwgMTE3NzQ3LCAxMTc3NTQsIDExNzc2MSwgMTE3NzY3LCAxMTc3NzQsIDExNzc4MSwgMTE3Nzg4LCAxMTc3OTUsIAotICAgIDExNzgwMiwgMTE3ODA4LCAxMTc4MTUsIDExNzgyMiwgMTE3ODI5LCAxMTc4MzUsIDExNzg0MiwgMTE3ODQ5LCAxMTc4NTYsIAotICAgIDExNzg2MiwgMTE3ODY5LCAxMTc4NzYsIDExNzg4MiwgMTE3ODg4LCAxMTc4OTUsIDExNzkwMSwgMTE3OTA4LCAxMTc5MTUsIAotICAgIDExNzkyMSwgMTE3OTI4LCAxMTc5MzUsIDExNzk0MSwgMTE3OTQ4LCAxMTc5NTUsIDExNzk2MiwgMTE3OTY5LCAxMTc5NzYsIAotICAgIDExNzk4MSwgMTE3OTg3LCAxMTc5OTMsIDExNzk5OSwgMTE4MDA0LCAxMTgwMTAsIDExODAxNiwgMTE4MDIyLCAxMTgwMjcsIAotICAgIDExODAzMywgMTE4MDM5LCAxMTgwNDQsIDExODA0OSwgMTE4MDU1LCAxMTgwNjAsIDExODA2NiwgMTE4MDcyLCAxMTgwNzcsIAotICAgIDExODA4MywgMTE4MDg5LCAxMTgwOTQsIDExODEwMCwgMTE4MTA2LCAxMTgxMTIsIDExODExOCwgMTE4MTI0LCAxMTgxMjksIAotICAgIDExODEzNSwgMTE4MTQxLCAxMTgxNDcsIDExODE1MiwgMTE4MTU4LCAxMTgxNjQsIDExODE3MCwgMTE4MTc1LCAxMTgxODEsIAotICAgIDExODE4NywgMTE4MTkyLCAxMTgxOTcsIDExODIwMywgMTE4MjA4LCAxMTgyMTQsIDExODIyMCwgMTE4MjI1LCAxMTgyMzEsIAotICAgIDExODIzNywgMTE4MjQyLCAxMTgyNDgsIDExODI1NCwgMTE4MjYwLCAxMTgyNjYsIDExODI3MiwgMTE4Mjc4LCAwLCAwLCAKLSAgICAxMTgyODUsIDExODI5MCwgMTE4Mjk1LCAxMTgzMDAsIDExODMwNSwgMTE4MzEwLCAxMTgzMTUsIDExODMyMCwgMTE4MzI1LCAKLSAgICAxMTgzMzAsIDExODMzNSwgMTE4MzQwLCAxMTgzNDUsIDExODM1MCwgMTE4MzU1LCAxMTgzNjAsIDExODM2NSwgMTE4MzcwLCAKLSAgICAxMTgzNzYsIDExODM4MSwgMTE4Mzg2LCAxMTgzOTEsIDExODM5NiwgMTE4NDAxLCAxMTg0MDYsIDExODQxMSwgMTE4NDE1LCAKLSAgICAxMTg0MjAsIDExODQyNSwgMTE4NDMwLCAxMTg0MzUsIDExODQ0MCwgMTE4NDQ1LCAxMTg0NTAsIDExODQ1NSwgMTE4NDYwLCAKLSAgICAxMTg0NjUsIDExODQ3MCwgMTE4NDc1LCAxMTg0ODAsIDExODQ4NSwgMTE4NDkwLCAxMTg0OTUsIDExODUwMCwgMTE4NTA2LCAKLSAgICAxMTg1MTEsIDExODUxNiwgMTE4NTIxLCAxMTg1MjYsIDExODUzMSwgMTE4NTM2LCAxMTg1NDEsIDExODU0NywgMTE4NTUyLCAKLSAgICAxMTg1NTcsIDExODU2MiwgMTE4NTY3LCAxMTg1NzIsIDExODU3NywgMTE4NTgyLCAxMTg1ODcsIDExODU5MiwgMTE4NTk3LCAKLSAgICAxMTg2MDIsIDExODYwNywgMTE4NjEyLCAxMTg2MTcsIDExODYyMiwgMTE4NjI3LCAxMTg2MzIsIDExODYzNywgMTE4NjQyLCAKLSAgICAxMTg2NDcsIDExODY1MiwgMTE4NjU3LCAxMTg2NjIsIDExODY2OCwgMTE4NjczLCAxMTg2NzgsIDExODY4MywgMTE4Njg4LCAKLSAgICAxMTg2OTMsIDExODY5OCwgMTE4NzAzLCAxMTg3MDcsIDExODcxMiwgMTE4NzE3LCAxMTg3MjIsIDExODcyNywgMTE4NzMyLCAKLSAgICAxMTg3MzcsIDExODc0MiwgMTE4NzQ3LCAxMTg3NTIsIDExODc1NywgMTE4NzYyLCAxMTg3NjcsIDExODc3MiwgMTE4Nzc3LCAKLSAgICAxMTg3ODIsIDExODc4NywgMTE4NzkyLCAxMTg3OTgsIDExODgwMywgMTE4ODA4LCAxMTg4MTMsIDExODgxOCwgMTE4ODIzLCAKLSAgICAxMTg4MjgsIDExODgzMywgMTE4ODM5LCAxMTg4NDQsIDExODg0OSwgMTE4ODU0LCAxMTg4NTksIDExODg2NCwgMTE4ODY5LCAKLSAgICAxMTg4NzUsIDExODg4MSwgMTE4ODg3LCAxMTg4OTMsIDExODg5OSwgMTE4OTA1LCAxMTg5MTEsIDExODkxNywgMTE4OTIzLCAKLSAgICAxMTg5MjksIDExODkzNSwgMTE4OTQxLCAxMTg5NDcsIDExODk1MywgMTE4OTU5LCAxMTg5NjUsIDExODk3MSwgMTE4OTc4LCAKLSAgICAxMTg5ODQsIDExODk5MCwgMTE4OTk2LCAxMTkwMDIsIDExOTAwOCwgMTE5MDE0LCAxMTkwMjAsIDExOTAyNSwgMTE5MDMxLCAKLSAgICAxMTkwMzcsIDExOTA0MywgMTE5MDQ5LCAxMTkwNTUsIDExOTA2MSwgMTE5MDY3LCAxMTkwNzMsIDExOTA3OSwgMTE5MDg1LCAKLSAgICAxMTkwOTEsIDExOTA5NywgMTE5MTAzLCAxMTkxMDksIDExOTExNSwgMTE5MTIxLCAxMTkxMjcsIDExOTEzNCwgMTE5MTQwLCAKLSAgICAxMTkxNDYsIDExOTE1MiwgMTE5MTU4LCAxMTkxNjQsIDExOTE3MCwgMTE5MTc2LCAxMTkxODMsIDExOTE4OSwgMTE5MTk1LCAKLSAgICAxMTkyMDEsIDExOTIwNywgMTE5MjEzLCAxMTkyMTksIDExOTIyNSwgMTE5MjMxLCAxMTkyMzcsIDExOTI0MywgMTE5MjQ5LCAKLSAgICAxMTkyNTUsIDExOTI2MSwgMTE5MjY3LCAxMTkyNzMsIDExOTI3OSwgMTE5Mjg1LCAxMTkyOTEsIDExOTI5NywgMTE5MzAzLCAKLSAgICAxMTkzMDksIDExOTMxNSwgMTE5MzIxLCAxMTkzMjgsIDExOTMzNCwgMTE5MzQwLCAxMTkzNDYsIDExOTM1MiwgMTE5MzU4LCAKLSAgICAxMTkzNjQsIDExOTM3MCwgMTE5Mzc1LCAxMTkzODEsIDExOTM4NywgMTE5MzkzLCAxMTkzOTksIDExOTQwNSwgMTE5NDExLCAKLSAgICAxMTk0MTcsIDExOTQyMywgMTE5NDI5LCAxMTk0MzUsIDExOTQ0MSwgMTE5NDQ3LCAxMTk0NTMsIDExOTQ1OSwgMTE5NDY1LCAKLSAgICAxMTk0NzEsIDExOTQ3NywgMTE5NDg0LCAxMTk0OTAsIDExOTQ5NiwgMTE5NTAyLCAxMTk1MDgsIDExOTUxNCwgMTE5NTIwLCAKLSAgICAxMTk1MjYsIDExOTUzMywgMTE5NTM5LCAxMTk1NDUsIDExOTU1MSwgMTE5NTU3LCAxMTk1NjMsIDExOTU2OSwgMTE5NTc2LCAKLSAgICAxMTk1ODMsIDExOTU5MCwgMTE5NTk3LCAxMTk2MDQsIDExOTYxMSwgMTE5NjE4LCAxMTk2MjUsIDExOTYzMiwgMTE5NjM5LCAKLSAgICAxMTk2NDYsIDExOTY1MywgMTE5NjYwLCAxMTk2NjcsIDExOTY3NCwgMTE5NjgxLCAxMTk2ODgsIDExOTY5NiwgMTE5NzAzLCAKLSAgICAxMTk3MTAsIDExOTcxNywgMTE5NzI0LCAxMTk3MzEsIDExOTczOCwgMTE5NzQ1LCAxMTk3NTEsIDExOTc1OCwgMTE5NzY1LCAKLSAgICAxMTk3NzIsIDExOTc3OSwgMTE5Nzg2LCAxMTk3OTMsIDExOTgwMCwgMTE5ODA3LCAxMTk4MTQsIDExOTgyMSwgMTE5ODI4LCAKLSAgICAxMTk4MzUsIDExOTg0MiwgMTE5ODQ5LCAxMTk4NTYsIDExOTg2MywgMTE5ODcwLCAxMTk4NzgsIDExOTg4NSwgMTE5ODkyLCAKLSAgICAxMTk4OTksIDExOTkwNiwgMTE5OTEzLCAxMTk5MjAsIDExOTkyNywgMTE5OTM1LCAxMTk5NDIsIDExOTk0OSwgMTE5OTU2LCAKLSAgICAxMTk5NjMsIDExOTk3MCwgMTE5OTc3LCAxMTk5ODIsIDAsIDAsIDExOTk4NywgMTE5OTkyLCAxMTk5OTYsIDEyMDAwMCwgCi0gICAgMTIwMDA0LCAxMjAwMDgsIDEyMDAxMiwgMTIwMDE2LCAxMjAwMjAsIDEyMDAyNCwgMTIwMDI4LCAxMjAwMzMsIDEyMDAzNywgCi0gICAgMTIwMDQxLCAxMjAwNDUsIDEyMDA0OSwgMTIwMDUzLCAxMjAwNTcsIDEyMDA2MSwgMTIwMDY1LCAxMjAwNjksIDEyMDA3NCwgCi0gICAgMTIwMDc4LCAxMjAwODIsIDEyMDA4NiwgMTIwMDkwLCAxMjAwOTQsIDEyMDA5OCwgMTIwMTAyLCAxMjAxMDYsIDEyMDExMCwgCi0gICAgMTIwMTE2LCAxMjAxMjEsIDEyMDEyNiwgMTIwMTMxLCAxMjAxMzYsIDEyMDE0MSwgMTIwMTQ2LCAxMjAxNTEsIDEyMDE1NiwgCi0gICAgMTIwMTYxLCAxMjAxNjcsIDEyMDE3MiwgMTIwMTc3LCAxMjAxODIsIDEyMDE4NywgMTIwMTkyLCAxMjAxOTcsIDEyMDIwMiwgCi0gICAgMTIwMjA3LCAxMjAyMTIsIDEyMDIxNiwgMTIwMjIwLCAxMjAyMjQsIDAsIDEyMDIyOCwgMTIwMjMyLCAxMjAyMzYsIAotICAgIDEyMDI0MCwgMTIwMjQ0LCAxMjAyNDgsIDEyMDI1MiwgMTIwMjU2LCAxMjAyNjAsIDEyMDI2NCwgMTIwMjY4LCAxMjAyNzIsIAorICAgIDkyMTc3LCA5MjE4MSwgOTIxODYsIDkyMTkxLCAwLCA5MjE5NywgOTIyMDIsIDAsIDAsIDAsIDAsIDAsIDkyMjA3LCA5MjIxMywgCisgICAgOTIyMjAsIDkyMjI1LCA5MjIzMCwgOTIyMzQsIDkyMjM5LCA5MjI0NCwgMCwgOTIyNDksIDkyMjU0LCA5MjI1OSwgMCwgCisgICAgOTIyNjQsIDkyMjY5LCA5MjI3NCwgOTIyNzksIDkyMjg0LCA5MjI4OSwgOTIyOTQsIDkyMjk5LCA5MjMwNCwgOTIzMDksIAorICAgIDkyMzE0LCA5MjMxOCwgOTIzMjIsIDkyMzI3LCA5MjMzMiwgOTIzMzcsIDkyMzQxLCA5MjM0NSwgOTIzNDksIDkyMzU0LCAKKyAgICA5MjM1OSwgOTIzNjQsIDkyMzY5LCA5MjM3MywgOTIzNzgsIDkyMzgyLCA5MjM4NywgMCwgMCwgMCwgMCwgOTIzOTIsIAorICAgIDkyMzk4LCA5MjQwMywgMCwgMCwgMCwgMCwgOTI0MDgsIDkyNDEyLCA5MjQxNiwgOTI0MjAsIDkyNDI0LCA5MjQyOCwgCisgICAgOTI0MzMsIDkyNDM4LCA5MjQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI0NTAsIDkyNDU2LCA5MjQ2MywgOTI0NjksIAorICAgIDkyNDc2LCA5MjQ4MiwgOTI0ODgsIDkyNDk0LCA5MjUwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI1MDcsIDkyNTE1LCAKKyAgICA5MjUyMywgOTI1MzEsIDkyNTM5LCA5MjU0NywgOTI1NTUsIDkyNTYzLCA5MjU3MSwgOTI1NzksIDkyNTg3LCA5MjU5NSwgCisgICAgOTI2MDMsIDkyNjExLCA5MjYxOSwgOTI2MjcsIDkyNjM1LCA5MjY0MywgOTI2NTEsIDkyNjU5LCA5MjY2NywgOTI2NzUsIAorICAgIDkyNjgzLCA5MjY5MSwgOTI2OTksIDkyNzA3LCA5MjcxNSwgOTI3MjMsIDkyNzMxLCA5MjczOSwgOTI3NDYsIDkyNzU0LCAKKyAgICA5Mjc2MiwgOTI3NjYsIDkyNzcxLCA5Mjc3NiwgOTI3ODEsIDkyNzg2LCA5Mjc5MSwgOTI3OTYsIDkyODAxLCA5MjgwNSwgCisgICAgOTI4MTAsIDkyODE0LCA5MjgxOSwgOTI4MjMsIDkyODI4LCA5MjgzMiwgOTI4MzcsIDkyODQyLCA5Mjg0NywgOTI4NTIsIAorICAgIDkyODU3LCA5Mjg2MiwgOTI4NjcsIDkyODcyLCA5Mjg3NywgOTI4ODIsIDkyODg3LCA5Mjg5MiwgOTI4OTcsIDkyOTAyLCAKKyAgICA5MjkwNywgOTI5MTIsIDkyOTE3LCA5MjkyMiwgOTI5MjcsIDkyOTMyLCA5MjkzNywgOTI5NDIsIDkyOTQ3LCA5Mjk1MiwgCisgICAgOTI5NTcsIDkyOTYyLCA5Mjk2NywgOTI5NzIsIDkyOTc3LCA5Mjk4MiwgOTI5ODcsIDkyOTkyLCA5Mjk5NywgOTMwMDIsIAorICAgIDkzMDA3LCA5MzAxMiwgOTMwMTcsIDkzMDIyLCAwLCAwLCAwLCA5MzAyNywgOTMwMzIsIDkzMDQxLCA5MzA0OSwgOTMwNTgsIAorICAgIDkzMDY3LCA5MzA3OCwgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCAKKyAgICA5MzE0NSwgOTMxNTIsIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgCisgICAgOTMyMTUsIDkzMjIyLCA5MzIyOSwgOTMyMzYsIDAsIDAsIDkzMjQzLCA5MzI0OSwgOTMyNTUsIDkzMjYxLCA5MzI2NywgCisgICAgOTMyNzQsIDkzMjgxLCA5MzI4OSwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIAorICAgIDkzMzQ2LCA5MzM1MywgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgOTM0MDIsIDkzNDA5LCAKKyAgICA5MzQxNiwgOTM0MjMsIDAsIDAsIDAsIDAsIDAsIDkzNDMwLCA5MzQzNiwgOTM0NDIsIDkzNDQ4LCA5MzQ1NCwgOTM0NjEsIAorICAgIDkzNDY4LCA5MzQ3NiwgOTM0ODQsIDkzNDkwLCA5MzQ5NiwgOTM1MDMsIDkzNTA5LCA5MzUxNSwgOTM1MjEsIDkzNTI3LCAKKyAgICA5MzUzNCwgOTM1NDEsIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgCisgICAgOTM2MDQsIDkzNjExLCA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIAorICAgIDkzNjc0LCA5MzY4MSwgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCAKKyAgICA5Mzc0NCwgOTM3NTEsIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgCisgICAgOTM4MTQsIDkzODIxLCA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIAorICAgIDkzODg0LCA5Mzg5MSwgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCAKKyAgICA5Mzk1NCwgOTM5NjEsIDkzOTY4LCA5Mzk3NSwgOTM5ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzOTg5LCA5Mzk5MywgCisgICAgOTM5OTcsIDk0MDAxLCA5NDAwNSwgOTQwMDksIDk0MDEzLCA5NDAxNywgOTQwMjEsIDk0MDI1LCA5NDAzMCwgOTQwMzUsIAorICAgIDk0MDQwLCA5NDA0NSwgOTQwNTAsIDk0MDU1LCA5NDA2MCwgOTQwNjUsIDk0MDcwLCA5NDA3NiwgOTQwODIsIDk0MDg4LCAKKyAgICA5NDA5NSwgOTQxMDIsIDk0MTA5LCA5NDExNiwgOTQxMjMsIDk0MTMwLCA5NDEzNywgOTQxNDQsIDk0MTUxLCAwLCA5NDE1OCwgCisgICAgOTQxNjIsIDk0MTY2LCA5NDE3MCwgOTQxNzQsIDk0MTc4LCA5NDE4MSwgOTQxODUsIDk0MTg4LCA5NDE5MiwgOTQxOTUsIAorICAgIDk0MTk5LCA5NDIwMywgOTQyMDgsIDk0MjEyLCA5NDIxNywgOTQyMjAsIDk0MjI0LCA5NDIyNywgOTQyMzEsIDk0MjM0LCAKKyAgICA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCA5NDI3NCwgCisgICAgOTQyNzgsIDk0MjgyLCA5NDI4NiwgOTQyOTAsIDk0Mjk0LCA5NDI5OCwgOTQzMDIsIDk0MzA2LCA5NDMwOSwgOTQzMTIsIAorICAgIDk0MzE2LCA5NDMyMCwgOTQzMjQsIDk0MzI3LCA5NDMzMCwgOTQzMzMsIDk0MzM3LCA5NDM0MSwgOTQzNDUsIDk0MzQ5LCAKKyAgICA5NDM1MiwgOTQzNTUsIDk0MzU5LCA5NDM2NSwgOTQzNzEsIDk0Mzc3LCA5NDM4MiwgOTQzODksIDk0MzkzLCA5NDM5OCwgCisgICAgOTQ0MDIsIDk0NDA3LCA5NDQxMiwgOTQ0MTgsIDk0NDIzLCA5NDQyOSwgOTQ0MzMsIDk0NDM4LCA5NDQ0MiwgOTQ0NDcsIAorICAgIDk0NDUwLCA5NDQ1MywgOTQ0NTcsIDk0NDYyLCA5NDQ2OCwgOTQ0NzMsIDk0NDc5LCAwLCAwLCAwLCAwLCA5NDQ4NCwgCisgICAgOTQ0ODcsIDk0NDkwLCA5NDQ5MywgOTQ0OTYsIDk0NDk5LCA5NDUwMiwgOTQ1MDUsIDk0NTA4LCA5NDUxMSwgOTQ1MTUsIAorICAgIDk0NTE5LCA5NDUyMywgOTQ1MjcsIDk0NTMxLCA5NDUzNSwgOTQ1MzksIDk0NTQzLCA5NDU0NywgOTQ1NTIsIDk0NTU3LCAKKyAgICA5NDU2MSwgOTQ1NjQsIDk0NTY3LCA5NDU3MCwgOTQ1NzMsIDk0NTc2LCA5NDU3OSwgOTQ1ODIsIDk0NTg1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDU4OCwgOTQ1OTMsIDk0NTk4LCA5NDYwMywgOTQ2MDcsIAorICAgIDk0NjEyLCA5NDYxNiwgOTQ2MjEsIDk0NjI1LCA5NDYzMCwgOTQ2MzQsIDk0NjM5LCA5NDY0MywgOTQ2NDgsIDk0NjUyLCAKKyAgICA5NDY1NywgOTQ2NjIsIDk0NjY3LCA5NDY3MiwgOTQ2NzcsIDk0NjgyLCA5NDY4NywgOTQ2OTIsIDk0Njk3LCA5NDcwMiwgCisgICAgOTQ3MDcsIDk0NzEyLCA5NDcxNywgOTQ3MjIsIDk0NzI3LCA5NDczMiwgOTQ3MzcsIDk0NzQyLCA5NDc0NywgOTQ3NTIsIAorICAgIDk0NzU2LCA5NDc2MCwgOTQ3NjUsIDk0NzcwLCA5NDc3NSwgOTQ3NzksIDk0NzgzLCA5NDc4NywgOTQ3OTIsIDk0Nzk3LCAKKyAgICA5NDgwMiwgOTQ4MDcsIDk0ODExLCA5NDgxNSwgOTQ4MjEsIDk0ODI2LCA5NDgzMiwgOTQ4MzcsIDk0ODQzLCA5NDg0OCwgCisgICAgOTQ4NTQsIDk0ODU5LCA5NDg2NSwgOTQ4NzAsIDk0ODc1LCA5NDg4MCwgOTQ4ODUsIDk0ODg5LCA5NDg5NCwgOTQ5MDAsIAorICAgIDk0OTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCAKKyAgICA5NDkzMCwgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgCisgICAgOTUwMDAsIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCA5NTA1NiwgOTUwNjMsIAorICAgIDk1MDcwLCA5NTA3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTUwODQsIDk1MDkxLCA5NTA5NywgOTUxMDMsIDk1MTA5LCAKKyAgICA5NTExNSwgOTUxMjEsIDk1MTI3LCA5NTEzMywgOTUxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDk1MTQ1LCA5NTE1MCwgOTUxNTUsIAorICAgIDk1MTYwLCA5NTE2NSwgOTUxNjksIDk1MTczLCA5NTE3NywgOTUxODIsIDk1MTg3LCA5NTE5MiwgOTUxOTcsIDk1MjAyLCAKKyAgICA5NTIwNywgOTUyMTIsIDk1MjE3LCA5NTIyMiwgOTUyMjcsIDk1MjMyLCA5NTIzNywgOTUyNDIsIDk1MjQ3LCA5NTI1MiwgCisgICAgOTUyNTcsIDk1MjYyLCA5NTI2NywgOTUyNzIsIDk1Mjc3LCA5NTI4MiwgOTUyODcsIDk1MjkyLCA5NTI5NywgOTUzMDIsIAorICAgIDk1MzA3LCA5NTMxMiwgOTUzMTcsIDk1MzIyLCA5NTMyNywgOTUzMzIsIDk1MzM3LCA5NTM0MiwgOTUzNDcsIDk1MzUzLCAKKyAgICA5NTM1OCwgOTUzNjQsIDk1MzY5LCA5NTM3NSwgOTUzODAsIDk1Mzg2LCA5NTM5MiwgOTUzOTYsIDk1NDAxLCA5NTQwNSwgMCwgCisgICAgOTU0MDksIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI2LCA5NTQzMCwgOTU0MzQsIDk1NDM4LCA5NTQ0MiwgOTU0NDYsIAorICAgIDk1NDUwLCA5NTQ1NSwgOTU0NTksIDk1NDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTQ2OSwgCisgICAgOTU0NzMsIDk1NDc3LCA5NTQ4MSwgOTU0ODQsIDk1NDg4LCA5NTQ5MSwgOTU0OTUsIDk1NDk4LCA5NTUwMiwgOTU1MDYsIAorICAgIDk1NTExLCA5NTUxNSwgOTU1MjAsIDk1NTIzLCA5NTUyNywgOTU1MzAsIDk1NTM0LCA5NTUzNywgOTU1NDEsIDk1NTQ1LCAKKyAgICA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIDk1NTgxLCA5NTU4NSwgCisgICAgOTU1ODksIDk1NTkzLCA5NTU5NywgOTU2MDEsIDk1NjA1LCA5NTYwOSwgOTU2MTIsIDk1NjE1LCA5NTYxOSwgOTU2MjMsIAorICAgIDk1NjI3LCA5NTYzMCwgOTU2MzMsIDk1NjM2LCA5NTY0MCwgOTU2NDQsIDk1NjQ4LCA5NTY1MiwgOTU2NTYsIDk1NjU5LCAKKyAgICA5NTY2MiwgOTU2NjcsIDk1NjcxLCA5NTY3NiwgOTU2ODAsIDk1Njg1LCA5NTY5MCwgOTU2OTYsIDk1NzAxLCA5NTcwNywgCisgICAgOTU3MTEsIDk1NzE2LCA5NTcyMCwgOTU3MjUsIDk1NzI5LCA5NTczMywgOTU3MzcsIDk1NzQxLCA5NTc0NCwgOTU3NDcsIAorICAgIDk1NzUxLCA5NTc1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NTgsIDk1NzYyLCA5NTc2NSwgOTU3NjgsIDk1NzcxLCAKKyAgICA5NTc3NCwgOTU3NzcsIDk1NzgwLCA5NTc4MywgOTU3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDk1Nzg5LCA5NTc5MywgOTU3OTgsIDk1ODAyLCA5NTgwNywgOTU4MTEsIDk1ODE2LCA5NTgyMCwgOTU4MjUsIDk1ODI5LCAKKyAgICA5NTgzNCwgOTU4MzgsIDk1ODQzLCA5NTg0OCwgOTU4NTMsIDk1ODU4LCA5NTg2MywgOTU4NjgsIDk1ODczLCA5NTg3OCwgCisgICAgOTU4ODMsIDk1ODg4LCA5NTg5MywgOTU4OTgsIDk1OTAzLCA5NTkwOCwgOTU5MTMsIDk1OTE4LCA5NTkyMywgOTU5MjgsIAorICAgIDk1OTMyLCA5NTkzNiwgOTU5NDEsIDk1OTQ2LCA5NTk1MSwgOTU5NTUsIDk1OTU5LCA5NTk2MywgOTU5NjgsIDk1OTczLCAKKyAgICA5NTk3OCwgOTU5ODIsIDk1OTg2LCA5NTk5MSwgOTU5OTYsIDk2MDAxLCA5NjAwNywgOTYwMTIsIDk2MDE4LCA5NjAyMywgCisgICAgOTYwMjksIDk2MDM0LCA5NjA0MCwgOTYwNDUsIDk2MDUxLCA5NjA1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNjEsIAorICAgIDk2MDY2LCA5NjA3MCwgOTYwNzQsIDk2MDc4LCA5NjA4MiwgOTYwODYsIDk2MDkwLCA5NjA5NCwgOTYwOTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDk2MTAyLCA5NjEwNSwgOTYxMTAsIDk2MTE2LCA5NjEyNCwgOTYxMjksIDk2MTM1LCA5NjE0MywgOTYxNDksIAorICAgIDk2MTU1LCA5NjE1OSwgOTYxNjMsIDk2MTcwLCA5NjE3OSwgOTYxODYsIDk2MTk1LCA5NjIwMSwgOTYyMTAsIDk2MjE3LCAKKyAgICA5NjIyNCwgOTYyMzEsIDk2MjQxLCA5NjI0NywgOTYyNTEsIDk2MjU4LCA5NjI2NywgOTYyNzcsIDk2Mjg0LCA5NjI5MSwgCisgICAgOTYyOTUsIDk2Mjk5LCA5NjMwNiwgOTYzMTYsIDk2MzIwLCA5NjMyNywgOTYzMzQsIDk2MzQxLCA5NjM0NywgOTYzNTQsIAorICAgIDk2MzYxLCA5NjM2OCwgOTYzNzUsIDk2Mzc5LCA5NjM4MywgOTYzODcsIDk2Mzk0LCA5NjM5OCwgOTY0MDUsIDk2NDEyLCAKKyAgICA5NjQyNiwgOTY0MzUsIDk2NDM5LCA5NjQ0MywgOTY0NDcsIDk2NDU0LCA5NjQ1OCwgOTY0NjIsIDk2NDY2LCA5NjQ3NCwgCisgICAgOTY0ODIsIDk2NTAxLCA5NjUxMSwgOTY1MzEsIDk2NTM1LCA5NjUzOSwgOTY1NDMsIDk2NTQ3LCA5NjU1MSwgOTY1NTUsIAorICAgIDk2NTU5LCA5NjU2NiwgOTY1NzAsIDk2NTczLCA5NjU3NywgOTY1ODEsIDk2NTg3LCA5NjU5NCwgOTY2MDMsIDk2NjA3LCAKKyAgICA5NjYxNiwgOTY2MjUsIDk2NjMzLCA5NjYzNywgOTY2NDQsIDk2NjQ4LCA5NjY1MiwgOTY2NTYsIDk2NjYwLCA5NjY3MSwgCisgICAgOTY2ODAsIDk2Njg5LCA5NjY5OCwgOTY3MDcsIDk2NzE5LCA5NjcyOCwgOTY3MzcsIDk2NzQ2LCA5Njc1NCwgOTY3NjMsIAorICAgIDk2Nzc1LCA5Njc4NCwgOTY3OTMsIDk2ODAyLCA5NjgxNCwgOTY4MjMsIDk2ODMyLCA5Njg0NCwgOTY4NTMsIDk2ODYyLCAKKyAgICA5Njg3NCwgOTY4ODMsIDk2ODg3LCA5Njg5MSwgOTY4OTUsIDk2ODk5LCA5NjkwMywgOTY5MDcsIDk2OTExLCA5NjkxOCwgCisgICAgOTY5MjIsIDk2OTI2LCA5NjkzNywgOTY5NDEsIDk2OTQ1LCA5Njk1MiwgOTY5NTgsIDk2OTY0LCA5Njk2OCwgOTY5NzUsIAorICAgIDk2OTc5LCA5Njk4MywgOTY5ODcsIDk2OTkxLCA5Njk5NSwgOTY5OTksIDk3MDA1LCA5NzAxMywgOTcwMTcsIDk3MDIxLCAKKyAgICA5NzAyNCwgOTcwMzAsIDk3MDQwLCA5NzA0NCwgOTcwNTYsIDk3MDYzLCA5NzA3MCwgOTcwNzcsIDk3MDg0LCA5NzA5MCwgCisgICAgOTcwOTQsIDk3MDk4LCA5NzEwMiwgOTcxMDYsIDk3MTEzLCA5NzEyMiwgOTcxMjksIDk3MTM3LCA5NzE0NSwgOTcxNTEsIAorICAgIDk3MTU1LCA5NzE1OSwgOTcxNjMsIDk3MTY3LCA5NzE3MywgOTcxODIsIDk3MTk0LCA5NzIwMSwgOTcyMDgsIDk3MjE3LCAKKyAgICA5NzIyOCwgOTcyMzQsIDk3MjQzLCA5NzI1MiwgOTcyNTksIDk3MjY4LCA5NzI3NSwgOTcyODIsIDk3MjkyLCA5NzI5OSwgCisgICAgOTczMDYsIDk3MzEzLCA5NzMyMCwgOTczMjQsIDk3MzMwLCA5NzMzNCwgOTczNDUsIDk3MzUzLCA5NzM2MiwgOTczNzQsIAorICAgIDk3MzgxLCA5NzM4OCwgOTczOTgsIDk3NDA1LCA5NzQxNCwgOTc0MjEsIDk3NDMwLCA5NzQzNywgOTc0NDQsIDk3NDU0LCAKKyAgICA5NzQ2MSwgOTc0NjgsIDk3NDc4LCA5NzQ4NSwgOTc0OTcsIDk3NTA2LCA5NzUxMywgOTc1MjAsIDk3NTI3LCA5NzUzNiwgCisgICAgOTc1NDYsIDk3NTU5LCA5NzU2NiwgOTc1NzYsIDk3NTg2LCA5NzU5MywgOTc2MDIsIDk3NjE1LCA5NzYyMiwgOTc2MjksIAorICAgIDk3NjM2LCA5NzY0NiwgOTc2NTYsIDk3NjYzLCA5NzY3MywgOTc2ODAsIDk3Njg3LCA5NzY5NywgOTc3MDMsIDk3NzEwLCAKKyAgICA5NzcxNywgOTc3MjQsIDk3NzM0LCA5Nzc0MSwgOTc3NDgsIDk3NzU1LCA5Nzc2MSwgOTc3NjgsIDk3Nzc4LCA5Nzc4NSwgCisgICAgOTc3ODksIDk3Nzk3LCA5NzgwMSwgOTc4MTMsIDk3ODE3LCA5NzgzMSwgOTc4MzUsIDk3ODM5LCA5Nzg0MywgOTc4NDcsIAorICAgIDk3ODUzLCA5Nzg2MCwgOTc4NjgsIDk3ODcyLCA5Nzg3NiwgOTc4ODAsIDk3ODg0LCA5Nzg5MSwgOTc4OTUsIDk3OTAxLCAKKyAgICA5NzkwNywgOTc5MTUsIDk3OTE5LCA5NzkyNiwgOTc5MzQsIDk3OTM4LCA5Nzk0MiwgOTc5NDgsIDk3OTUyLCA5Nzk2MSwgCisgICAgOTc5NzAsIDk3OTc3LCA5Nzk4NywgOTc5OTMsIDk3OTk3LCA5ODAwMSwgOTgwMDksIDk4MDE2LCA5ODAyMywgOTgwMjksIAorICAgIDk4MDMzLCA5ODA0MSwgOTgwNDUsIDk4MDUyLCA5ODA2NCwgOTgwNzEsIDk4MDgxLCA5ODA4NywgOTgwOTEsIDk4MTAwLCAKKyAgICA5ODEwNywgOTgxMTYsIDk4MTIwLCA5ODEyNCwgOTgxMzEsIDk4MTM1LCA5ODEzOSwgOTgxNDMsIDk4MTQ3LCA5ODE1MCwgCisgICAgOTgxNTYsIDk4MTYyLCA5ODE2NiwgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNSwgOTgyMTIsIAorICAgIDk4MjE5LCA5ODIyNiwgOTgyMzIsIDk4MjM2LCA5ODI0MCwgOTgyNDcsIDk4MjU0LCA5ODI2MSwgOTgyNjgsIDk4Mjc1LCAKKyAgICA5ODI3OSwgOTgyODIsIDk4Mjg3LCA5ODI5MSwgOTgyOTUsIDk4MzA0LCA5ODMxMywgOTgzMTcsIDk4MzIxLCA5ODMyNywgCisgICAgOTgzMzMsIDk4MzUwLCA5ODM1NiwgOTgzNjAsIDk4MzY5LCA5ODM3MywgOTgzNzcsIDk4Mzg0LCA5ODM5MiwgOTg0MDAsIAorICAgIDk4NDA2LCA5ODQxMCwgOTg0MTQsIDk4NDE4LCA5ODQyMiwgOTg0MjUsIDk4NDMxLCA5ODQzOCwgOTg0NDgsIDk4NDU1LCAKKyAgICA5ODQ2MiwgOTg0NjksIDk4NDc1LCA5ODQ4MiwgOTg0ODksIDk4NDk2LCA5ODUwMywgOTg1MTAsIDk4NTE5LCA5ODUyNiwgCisgICAgOTg1MzgsIDk4NTQ1LCA5ODU1MiwgOTg1NjIsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIAorICAgIDk4NjE1LCA5ODYyMiwgOTg2MjksIDk4NjM2LCA5ODY0MywgOTg2NTMsIDk4NjYzLCA5ODY3MywgOTg2ODAsIDk4NjkwLCAKKyAgICA5ODY5NywgOTg3MDQsIDk4NzExLCA5ODcxOCwgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OSwgCisgICAgOTg3NjYsIDk4NzczLCA5ODc4MCwgOTg3ODYsIDk4NzkzLCA5ODgwMCwgOTg4MDksIDk4ODE2LCA5ODgyMywgOTg4MjcsIAorICAgIDk4ODM1LCA5ODgzOSwgOTg4NDMsIDk4ODQ3LCA5ODg1MSwgOTg4NTUsIDk4ODYyLCA5ODg2NiwgOTg4NzUsIDk4ODc5LCAKKyAgICA5ODg4NiwgOTg4OTQsIDk4ODk4LCA5ODkwMiwgOTg5MDYsIDk4OTE5LCA5ODkzNSwgOTg5MzksIDk4OTQzLCA5ODk1MCwgCisgICAgOTg5NTYsIDk4OTYzLCA5ODk2NywgOTg5NzEsIDk4OTc1LCA5ODk3OSwgOTg5ODMsIDk4OTkwLCA5ODk5NCwgOTkwMTIsIAorICAgIDk5MDE2LCA5OTAyMCwgOTkwMjcsIDk5MDMxLCA5OTAzNSwgOTkwNDEsIDk5MDQ1LCA5OTA0OSwgOTkwNTcsIDk5MDYxLCAKKyAgICA5OTA2NSwgOTkwNjksIDk5MDczLCA5OTA3OSwgOTkwOTAsIDk5MDk5LCA5OTEwOCwgOTkxMTUsIDk5MTIyLCA5OTEzMywgCisgICAgOTkxNDAsIDk5MTQ3LCA5OTE1NCwgOTkxNjEsIDk5MTY4LCA5OTE3NSwgOTkxODIsIDk5MTkyLCA5OTE5OCwgOTkyMDUsIAorICAgIDk5MjE1LCA5OTIyNCwgOTkyMzEsIDk5MjQwLCA5OTI1MCwgOTkyNTcsIDk5MjY0LCA5OTI3MSwgOTkyNzgsIDk5MjkwLCAKKyAgICA5OTI5NywgOTkzMDQsIDk5MzExLCA5OTMxOCwgOTkzMjUsIDk5MzM1LCA5OTM0MiwgOTkzNDksIDk5MzU5LCA5OTM3MiwgCisgICAgOTkzODQsIDk5MzkxLCA5OTQwMSwgOTk0MDgsIDk5NDE1LCA5OTQyMiwgOTk0MzYsIDk5NDQyLCA5OTQ1MCwgOTk0NjAsIAorICAgIDk5NDcwLCA5OTQ3NywgOTk0ODQsIDk5NDkwLCA5OTQ5NCwgOTk1MDEsIDk5NTExLCA5OTUxNywgOTk1MzAsIDk5NTM0LCAKKyAgICA5OTUzOCwgOTk1NDUsIDk5NTQ5LCA5OTU1NiwgOTk1NjYsIDk5NTcwLCA5OTU3NCwgOTk1NzgsIDk5NTgyLCA5OTU4NiwgCisgICAgOTk1OTMsIDk5NTk3LCA5OTYwNCwgOTk2MTEsIDk5NjE4LCA5OTYyNywgOTk2MzYsIDk5NjQ2LCA5OTY1MywgOTk2NjAsIAorICAgIDk5NjY3LCA5OTY3NywgOTk2ODQsIDk5Njk0LCA5OTcwMSwgOTk3MTEsIDk5NzE4LCA5OTcyNSwgOTk3MzUsIDk5NzQ1LCAKKyAgICA5OTc1MiwgOTk3NTgsIDk5NzY2LCA5OTc3NCwgOTk3ODAsIDk5Nzg2LCA5OTc5MCwgOTk3OTQsIDk5ODAxLCA5OTgwOSwgCisgICAgOTk4MTUsIDk5ODE5LCA5OTgyMywgOTk4MjcsIDk5ODM0LCA5OTg0NiwgOTk4NDksIDk5ODU2LCA5OTg2MiwgOTk4NjYsIAorICAgIDk5ODcwLCA5OTg3NCwgOTk4NzgsIDk5ODgyLCA5OTg4NiwgOTk4OTAsIDk5ODk0LCA5OTg5OCwgOTk5MDIsIDk5OTA5LCAKKyAgICA5OTkxMywgOTk5MTksIDk5OTIzLCA5OTkyNywgOTk5MzEsIDk5OTM3LCA5OTk0NCwgOTk5NTEsIDk5OTU4LCA5OTk2OSwgCisgICAgOTk5NzcsIDk5OTgxLCA5OTk4NywgOTk5OTYsIDEwMDAwMywgMTAwMDA5LCAxMDAwMTIsIDEwMDAxNiwgMTAwMDIwLCAKKyAgICAxMDAwMjYsIDEwMDAzNSwgMTAwMDQzLCAxMDAwNDcsIDEwMDA1MywgMTAwMDU3LCAxMDAwNjEsIDEwMDA2NSwgMTAwMDcxLCAKKyAgICAxMDAwNzgsIDEwMDA4NCwgMTAwMDg4LCAxMDAwOTQsIDEwMDA5OCwgMTAwMTAyLCAxMDAxMTEsIDEwMDEyMywgMTAwMTI3LCAKKyAgICAxMDAxMzQsIDEwMDE0MSwgMTAwMTUxLCAxMDAxNTgsIDEwMDE3MCwgMTAwMTc3LCAxMDAxODQsIDEwMDE5MSwgMTAwMjAyLCAKKyAgICAxMDAyMTIsIDEwMDIyNSwgMTAwMjM1LCAxMDAyNDIsIDEwMDI0NiwgMTAwMjUwLCAxMDAyNTQsIDEwMDI1OCwgMTAwMjY3LCAKKyAgICAxMDAyNzYsIDEwMDI4NSwgMTAwMzAyLCAxMDAzMTEsIDEwMDMxNywgMTAwMzI0LCAxMDAzMzIsIDEwMDM0NSwgMTAwMzQ5LCAKKyAgICAxMDAzNTgsIDEwMDM2NywgMTAwMzc2LCAxMDAzODUsIDEwMDM5NiwgMTAwNDA1LCAxMDA0MTQsIDEwMDQyMywgMTAwNDMyLCAKKyAgICAxMDA0NDEsIDEwMDQ1MCwgMTAwNDYwLCAxMDA0NjMsIDEwMDQ2NywgMTAwNDcxLCAxMDA0NzUsIDEwMDQ3OSwgMTAwNDgzLCAKKyAgICAxMDA0ODksIDEwMDQ5NiwgMTAwNTAzLCAxMDA1MTAsIDEwMDUxNiwgMTAwNTIyLCAxMDA1MjksIDEwMDUzNSwgMTAwNTQyLCAKKyAgICAxMDA1NTAsIDEwMDU1NCwgMTAwNTYxLCAxMDA1NjgsIDEwMDU3NSwgMTAwNTgzLCAxMDA1ODYsIDEwMDU5MCwgMTAwNTk0LCAKKyAgICAxMDA1OTgsIDEwMDYwMSwgMTAwNjA3LCAxMDA2MTEsIDEwMDYxNywgMTAwNjI0LCAxMDA2MzEsIDEwMDYzNywgMTAwNjQ0LCAKKyAgICAxMDA2NTEsIDEwMDY1OCwgMTAwNjY1LCAxMDA2NzIsIDEwMDY3OSwgMTAwNjg2LCAxMDA2OTMsIDEwMDcwMCwgMTAwNzA3LCAKKyAgICAxMDA3MTQsIDEwMDcyMSwgMTAwNzI4LCAxMDA3MzUsIDEwMDc0MSwgMTAwNzQ1LCAxMDA3NTQsIDEwMDc1OCwgMTAwNzYyLCAKKyAgICAxMDA3NjYsIDEwMDc3MCwgMTAwNzc2LCAxMDA3ODMsIDEwMDc5MCwgMTAwNzk3LCAxMDA4MDQsIDEwMDgxMSwgMTAwODE3LCAKKyAgICAxMDA4MjUsIDEwMDgyOSwgMTAwODMzLCAxMDA4MzcsIDEwMDg0MSwgMTAwODQ3LCAxMDA4NjQsIDEwMDg4MSwgMTAwODg1LCAKKyAgICAxMDA4ODksIDEwMDg5MywgMTAwODk3LCAxMDA5MDEsIDEwMDkwNSwgMTAwOTExLCAxMDA5MTgsIDEwMDkyMiwgMTAwOTI4LCAKKyAgICAxMDA5MzUsIDEwMDk0MiwgMTAwOTQ5LCAxMDA5NTYsIDEwMDk2MywgMTAwOTcyLCAxMDA5NzksIDEwMDk4NiwgMTAwOTkzLCAKKyAgICAxMDEwMDAsIDEwMTAwNCwgMTAxMDA4LCAxMDEwMTQsIDEwMTAyNiwgMTAxMDMwLCAxMDEwMzQsIDEwMTA0MywgMTAxMDQ3LCAKKyAgICAxMDEwNTEsIDEwMTA1NSwgMTAxMDYxLCAxMDEwNjUsIDEwMTA2OSwgMTAxMDc4LCAxMDEwODIsIDEwMTA4NiwgMTAxMDkwLCAKKyAgICAxMDEwOTcsIDEwMTEwMSwgMTAxMTA1LCAxMDExMDksIDEwMTExMywgMTAxMTE3LCAxMDExMjEsIDEwMTEyNSwgMTAxMTI5LCAKKyAgICAxMDExMzUsIDEwMTE0MiwgMTAxMTQ5LCAxMDExNTUsIDEwMTE1OSwgMTAxMTc2LCAxMDExODIsIDEwMTE4NiwgMTAxMTkyLCAKKyAgICAxMDExOTgsIDEwMTIwNCwgMTAxMjEwLCAxMDEyMTYsIDEwMTIyMiwgMTAxMjI2LCAxMDEyMzAsIDEwMTIzNCwgMTAxMjQwLCAKKyAgICAxMDEyNDQsIDEwMTI1MCwgMTAxMjU0LCAxMDEyNTgsIDEwMTI2NSwgMTAxMjcyLCAxMDEyODksIDEwMTI5MywgMTAxMjk3LCAKKyAgICAxMDEzMDEsIDEwMTMwNSwgMTAxMzA5LCAxMDEzMjEsIDEwMTMyNCwgMTAxMzI5LCAxMDEzMzQsIDEwMTM0OSwgMTAxMzU5LCAKKyAgICAxMDEzNzEsIDEwMTM3NSwgMTAxMzc5LCAxMDEzODMsIDEwMTM4OSwgMTAxMzk2LCAxMDE0MDMsIDEwMTQxMywgMTAxNDI1LCAKKyAgICAxMDE0MzEsIDEwMTQzNywgMTAxNDQ2LCAxMDE0NTAsIDEwMTQ1NCwgMTAxNDYxLCAxMDE0NzEsIDEwMTQ3OCwgMTAxNDg0LCAKKyAgICAxMDE0ODgsIDEwMTQ5MiwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE1LCAxMDE1MTksIDEwMTUyNywgMTAxNTMzLCAKKyAgICAxMDE1MzcsIDEwMTU0NSwgMTAxNTUzLCAxMDE1NjAsIDEwMTU2NiwgMTAxNTczLCAxMDE1ODAsIDEwMTU5MCwgMTAxNjAwLCAKKyAgICAxMDE2MDQsIDEwMTYwOCwgMTAxNjEyLCAxMDE2MTYsIDEwMTYyMiwgMTAxNjI5LCAxMDE2MzUsIDEwMTY0MiwgMTAxNjQ5LCAKKyAgICAxMDE2NTYsIDEwMTY2NSwgMTAxNjcyLCAxMDE2NzksIDEwMTY4NSwgMTAxNjkyLCAxMDE2OTksIDEwMTcwNiwgMTAxNzEzLCAKKyAgICAxMDE3MjAsIDEwMTcyNywgMTAxNzMzLCAxMDE3NDAsIDEwMTc0NywgMTAxNzU0LCAxMDE3NjMsIDEwMTc3MCwgMTAxNzc3LCAKKyAgICAxMDE3ODEsIDEwMTc4NywgMTAxNzkxLCAxMDE3OTcsIDEwMTgwNCwgMTAxODExLCAxMDE4MTgsIDEwMTgyMiwgMTAxODI2LCAKKyAgICAxMDE4MzAsIDEwMTgzNCwgMTAxODM4LCAxMDE4NDUsIDEwMTg0OSwgMTAxODUzLCAxMDE4NTksIDEwMTg2NywgMTAxODcxLCAKKyAgICAxMDE4NzUsIDEwMTg3OSwgMTAxODgzLCAxMDE4OTAsIDEwMTg5NCwgMTAxODk4LCAxMDE5MDYsIDEwMTkxMCwgMTAxOTE0LCAKKyAgICAxMDE5MTgsIDEwMTkyMiwgMTAxOTI4LCAxMDE5MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwMTkzNiwgMTAxOTQyLCAxMDE5NDgsIDEwMTk1NSwgMTAxOTYyLCAxMDE5NjksIDEwMTk3NiwgMTAxOTgzLCAKKyAgICAxMDE5OTAsIDEwMTk5NiwgMTAyMDAzLCAxMDIwMTAsIDEwMjAxNywgMTAyMDI0LCAxMDIwMzEsIDEwMjAzOCwgMTAyMDQ0LCAKKyAgICAxMDIwNTAsIDEwMjA1NiwgMTAyMDYyLCAxMDIwNjgsIDEwMjA3NCwgMTAyMDgwLCAxMDIwODYsIDEwMjA5MiwgMTAyMDk5LCAKKyAgICAxMDIxMDYsIDEwMjExMywgMTAyMTIwLCAxMDIxMjcsIDEwMjEzNCwgMTAyMTQwLCAxMDIxNDYsIDEwMjE1MiwgMTAyMTU5LCAKKyAgICAxMDIxNjYsIDEwMjE3MiwgMTAyMTc4LCAxMDIxODcsIDEwMjE5NCwgMTAyMjAxLCAxMDIyMDgsIDEwMjIxNSwgMTAyMjIyLCAKKyAgICAxMDIyMjksIDEwMjIzNSwgMTAyMjQxLCAxMDIyNDcsIDEwMjI1NiwgMTAyMjYzLCAxMDIyNzAsIDEwMjI4MSwgMTAyMjkyLCAKKyAgICAxMDIyOTgsIDEwMjMwNCwgMTAyMzEwLCAxMDIzMTksIDEwMjMyNiwgMTAyMzMzLCAxMDIzNDMsIDEwMjM1MywgMTAyMzY0LCAKKyAgICAxMDIzNzUsIDEwMjM4NywgMTAyNDAwLCAxMDI0MTEsIDEwMjQyMiwgMTAyNDM0LCAxMDI0NDcsIDEwMjQ1OCwgMTAyNDY5LCAKKyAgICAxMDI0ODAsIDEwMjQ5MSwgMTAyNTAyLCAxMDI1MTQsIDEwMjUyMiwgMTAyNTMwLCAxMDI1MzksIDEwMjU0OCwgMTAyNTU3LCAKKyAgICAxMDI1NjMsIDEwMjU2OSwgMTAyNTc1LCAxMDI1ODIsIDEwMjU5MiwgMTAyNTk5LCAxMDI2MDksIDEwMjYxNCwgMTAyNjE5LCAKKyAgICAxMDI2MjUsIDEwMjYzMSwgMTAyNjM5LCAxMDI2NDcsIDEwMjY1NiwgMTAyNjY3LCAxMDI2NzgsIDEwMjY4NiwgMTAyNjk0LCAKKyAgICAxMDI3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjcxMiwgMTAyNzIzLCAxMDI3MzAsIAorICAgIDEwMjczOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNzQ2LCAxMDI3NTAsIDEwMjc1NCwgCisgICAgMTAyNzU4LCAxMDI3NjIsIDEwMjc2NiwgMTAyNzcwLCAxMDI3NzQsIDEwMjc3OCwgMTAyNzgyLCAxMDI3ODYsIDEwMjc5MCwgCisgICAgMTAyNzk0LCAxMDI3OTgsIDEwMjgwMiwgMTAyODA2LCAxMDI4MTAsIDEwMjgxNCwgMTAyODE4LCAxMDI4MjIsIDEwMjgyNiwgCisgICAgMTAyODMwLCAxMDI4MzQsIDEwMjgzOCwgMTAyODQyLCAxMDI4NDYsIDEwMjg1MCwgMTAyODU0LCAxMDI4NTgsIDEwMjg2MiwgCisgICAgMTAyODY2LCAxMDI4NzAsIDEwMjg3NCwgMTAyODc4LCAxMDI4ODIsIDEwMjg4NiwgMTAyODkwLCAxMDI4OTQsIDEwMjg5OCwgCisgICAgMTAyOTAyLCAxMDI5MDYsIDEwMjkxMCwgMTAyOTE0LCAxMDI5MTgsIDEwMjkyMiwgMTAyOTI2LCAxMDI5MzAsIDEwMjkzNCwgCisgICAgMTAyOTM4LCAxMDI5NDIsIDEwMjk0NiwgMTAyOTUwLCAxMDI5NTQsIDEwMjk1OCwgMTAyOTYyLCAxMDI5NjYsIDEwMjk3MCwgCisgICAgMTAyOTc0LCAxMDI5NzgsIDEwMjk4MiwgMTAyOTg2LCAxMDI5OTAsIDEwMjk5NCwgMTAyOTk4LCAxMDMwMDIsIDEwMzAwNiwgCisgICAgMTAzMDEwLCAxMDMwMTQsIDEwMzAxOCwgMTAzMDIyLCAxMDMwMjYsIDEwMzAzMCwgMTAzMDM0LCAxMDMwMzgsIDEwMzA0MiwgCisgICAgMTAzMDQ2LCAxMDMwNTAsIDEwMzA1NCwgMTAzMDU4LCAxMDMwNjIsIDEwMzA2NiwgMTAzMDcwLCAxMDMwNzQsIDEwMzA3OCwgCisgICAgMTAzMDgyLCAxMDMwODYsIDEwMzA5MCwgMTAzMDk0LCAxMDMwOTgsIDEwMzEwMiwgMTAzMTA2LCAxMDMxMTAsIDEwMzExNCwgCisgICAgMTAzMTE4LCAxMDMxMjIsIDEwMzEyNiwgMTAzMTMwLCAxMDMxMzQsIDEwMzEzOCwgMTAzMTQyLCAxMDMxNDYsIDEwMzE1MCwgCisgICAgMTAzMTU0LCAxMDMxNTgsIDEwMzE2MiwgMTAzMTY2LCAxMDMxNzAsIDEwMzE3NCwgMTAzMTc4LCAxMDMxODIsIDEwMzE4NiwgCisgICAgMTAzMTkwLCAxMDMxOTQsIDEwMzE5OCwgMTAzMjAyLCAxMDMyMDYsIDEwMzIxMCwgMTAzMjE0LCAxMDMyMTgsIDEwMzIyMiwgCisgICAgMTAzMjI2LCAxMDMyMzAsIDEwMzIzNCwgMTAzMjM4LCAxMDMyNDIsIDEwMzI0NiwgMTAzMjUwLCAxMDMyNTQsIDEwMzI1OCwgCisgICAgMTAzMjYyLCAxMDMyNjYsIDEwMzI3MCwgMTAzMjc0LCAxMDMyNzgsIDEwMzI4MiwgMTAzMjg2LCAxMDMyOTAsIDEwMzI5NCwgCisgICAgMTAzMjk4LCAxMDMzMDIsIDEwMzMwNiwgMTAzMzEwLCAxMDMzMTQsIDEwMzMxOCwgMTAzMzIyLCAxMDMzMjYsIDEwMzMzMCwgCisgICAgMTAzMzM0LCAxMDMzMzgsIDEwMzM0MiwgMTAzMzQ2LCAxMDMzNTAsIDEwMzM1NCwgMTAzMzU4LCAxMDMzNjIsIDEwMzM2NiwgCisgICAgMTAzMzcwLCAxMDMzNzQsIDEwMzM3OCwgMTAzMzgyLCAxMDMzODYsIDEwMzM5MCwgMTAzMzk0LCAxMDMzOTgsIDEwMzQwMiwgCisgICAgMTAzNDA2LCAxMDM0MTAsIDEwMzQxNCwgMTAzNDE4LCAxMDM0MjIsIDEwMzQyNiwgMTAzNDMwLCAxMDM0MzQsIDEwMzQzOCwgCisgICAgMTAzNDQyLCAxMDM0NDYsIDEwMzQ1MCwgMTAzNDU0LCAxMDM0NTgsIDEwMzQ2MiwgMTAzNDY2LCAxMDM0NzAsIDEwMzQ3NCwgCisgICAgMTAzNDc4LCAxMDM0ODIsIDEwMzQ4NiwgMTAzNDkwLCAxMDM0OTQsIDEwMzQ5OCwgMTAzNTAyLCAxMDM1MDYsIDEwMzUxMCwgCisgICAgMTAzNTE0LCAxMDM1MTgsIDEwMzUyMiwgMTAzNTI2LCAxMDM1MzAsIDEwMzUzNCwgMTAzNTM4LCAxMDM1NDIsIDEwMzU0NiwgCisgICAgMTAzNTUwLCAxMDM1NTQsIDEwMzU1OCwgMTAzNTYyLCAxMDM1NjYsIDEwMzU3MCwgMTAzNTc0LCAxMDM1NzgsIDEwMzU4MiwgCisgICAgMTAzNTg2LCAxMDM1OTAsIDEwMzU5NCwgMTAzNTk4LCAxMDM2MDIsIDEwMzYwNiwgMTAzNjEwLCAxMDM2MTQsIDEwMzYxOCwgCisgICAgMTAzNjIyLCAxMDM2MjYsIDEwMzYzMCwgMTAzNjM0LCAxMDM2MzgsIDEwMzY0MiwgMTAzNjQ2LCAxMDM2NTAsIDEwMzY1NCwgCisgICAgMTAzNjU4LCAxMDM2NjIsIDEwMzY2NiwgMTAzNjcwLCAxMDM2NzQsIDEwMzY3OCwgMTAzNjgyLCAxMDM2ODYsIDEwMzY5MCwgCisgICAgMTAzNjk0LCAxMDM2OTgsIDEwMzcwMiwgMTAzNzA2LCAxMDM3MTAsIDEwMzcxNCwgMTAzNzE4LCAxMDM3MjIsIDEwMzcyNiwgCisgICAgMTAzNzMwLCAxMDM3MzQsIDEwMzczOCwgMTAzNzQyLCAxMDM3NDYsIDEwMzc1MCwgMTAzNzU0LCAxMDM3NTgsIDEwMzc2MiwgCisgICAgMTAzNzY2LCAxMDM3NzAsIDEwMzc3NCwgMTAzNzc4LCAxMDM3ODIsIDEwMzc4NiwgMTAzNzkwLCAxMDM3OTQsIDEwMzc5OCwgCisgICAgMTAzODAyLCAxMDM4MDYsIDEwMzgxMCwgMTAzODE0LCAxMDM4MTgsIDEwMzgyMiwgMTAzODI2LCAxMDM4MzAsIDEwMzgzNCwgCisgICAgMTAzODM4LCAxMDM4NDIsIDEwMzg0NiwgMTAzODUwLCAxMDM4NTQsIDEwMzg1OCwgMTAzODYyLCAxMDM4NjYsIDEwMzg3MCwgCisgICAgMTAzODc0LCAxMDM4NzgsIDEwMzg4MiwgMTAzODg2LCAxMDM4OTAsIDEwMzg5NCwgMTAzODk4LCAxMDM5MDIsIDEwMzkwNiwgCisgICAgMTAzOTEwLCAxMDM5MTQsIDEwMzkxOCwgMTAzOTIyLCAxMDM5MjYsIDEwMzkzMCwgMTAzOTM0LCAxMDM5MzgsIDEwMzk0MiwgCisgICAgMTAzOTQ2LCAxMDM5NTAsIDEwMzk1NCwgMTAzOTU4LCAxMDM5NjIsIDEwMzk2NiwgMTAzOTcwLCAxMDM5NzQsIDEwMzk3OCwgCisgICAgMTAzOTgyLCAxMDM5ODYsIDEwMzk5MCwgMTAzOTk0LCAxMDM5OTgsIDEwNDAwMiwgMTA0MDA2LCAxMDQwMTAsIDEwNDAxNCwgCisgICAgMTA0MDE4LCAxMDQwMjIsIDEwNDAyNiwgMTA0MDMwLCAxMDQwMzQsIDEwNDAzOCwgMTA0MDQyLCAxMDQwNDYsIDEwNDA1MCwgCisgICAgMTA0MDU0LCAxMDQwNTgsIDEwNDA2MiwgMTA0MDY2LCAxMDQwNzAsIDEwNDA3NCwgMTA0MDc4LCAxMDQwODIsIDEwNDA4NiwgCisgICAgMTA0MDkwLCAxMDQwOTQsIDEwNDA5OCwgMTA0MTAyLCAxMDQxMDYsIDEwNDExMCwgMTA0MTE0LCAxMDQxMTgsIDEwNDEyMiwgCisgICAgMTA0MTI2LCAxMDQxMzAsIDEwNDEzNCwgMTA0MTM4LCAxMDQxNDIsIDEwNDE0NiwgMTA0MTUwLCAxMDQxNTQsIDEwNDE1OCwgCisgICAgMTA0MTYyLCAxMDQxNjYsIDEwNDE3MCwgMTA0MTc0LCAxMDQxNzgsIDEwNDE4MiwgMTA0MTg2LCAxMDQxOTAsIDEwNDE5NCwgCisgICAgMTA0MTk4LCAxMDQyMDIsIDEwNDIwNiwgMTA0MjEwLCAxMDQyMTQsIDEwNDIxOCwgMTA0MjIyLCAxMDQyMjYsIDEwNDIzMCwgCisgICAgMTA0MjM0LCAxMDQyMzgsIDEwNDI0MiwgMTA0MjQ2LCAxMDQyNTAsIDEwNDI1NCwgMTA0MjU4LCAxMDQyNjIsIDEwNDI2NiwgCisgICAgMTA0MjcwLCAxMDQyNzQsIDEwNDI3OCwgMTA0MjgyLCAxMDQyODYsIDEwNDI5MCwgMTA0Mjk0LCAxMDQyOTgsIDEwNDMwMiwgCisgICAgMTA0MzA2LCAxMDQzMTAsIDEwNDMxNCwgMTA0MzE4LCAxMDQzMjIsIDEwNDMyNiwgMTA0MzMwLCAxMDQzMzQsIDEwNDMzOCwgCisgICAgMTA0MzQyLCAxMDQzNDYsIDEwNDM1MCwgMTA0MzU0LCAxMDQzNTgsIDEwNDM2MiwgMTA0MzY2LCAxMDQzNzAsIDEwNDM3NCwgCisgICAgMTA0Mzc4LCAxMDQzODIsIDEwNDM4NiwgMTA0MzkwLCAxMDQzOTQsIDEwNDM5OCwgMTA0NDAyLCAxMDQ0MDYsIDEwNDQxMCwgCisgICAgMTA0NDE0LCAxMDQ0MTgsIDEwNDQyMiwgMTA0NDI2LCAxMDQ0MzAsIDEwNDQzNCwgMTA0NDM4LCAxMDQ0NDIsIDEwNDQ0NiwgCisgICAgMTA0NDUwLCAxMDQ0NTQsIDEwNDQ1OCwgMTA0NDYyLCAxMDQ0NjYsIDEwNDQ3MCwgMTA0NDc0LCAxMDQ0NzgsIDEwNDQ4MiwgCisgICAgMTA0NDg2LCAxMDQ0OTAsIDEwNDQ5NCwgMTA0NDk4LCAxMDQ1MDIsIDEwNDUwNiwgMTA0NTEwLCAxMDQ1MTQsIDEwNDUxOCwgCisgICAgMTA0NTIyLCAxMDQ1MjYsIDEwNDUzMCwgMTA0NTM0LCAxMDQ1MzgsIDEwNDU0MiwgMTA0NTQ2LCAxMDQ1NTAsIDEwNDU1NCwgCisgICAgMTA0NTU4LCAxMDQ1NjIsIDEwNDU2NiwgMTA0NTcwLCAxMDQ1NzQsIDEwNDU3OCwgMTA0NTgyLCAxMDQ1ODYsIDEwNDU5MCwgCisgICAgMTA0NTk0LCAxMDQ1OTgsIDEwNDYwMiwgMTA0NjA2LCAxMDQ2MTAsIDEwNDYxNCwgMTA0NjE4LCAxMDQ2MjIsIDEwNDYyNiwgCisgICAgMTA0NjMwLCAxMDQ2MzQsIDEwNDYzOCwgMTA0NjQyLCAxMDQ2NDYsIDEwNDY1MCwgMTA0NjU0LCAxMDQ2NTgsIDEwNDY2MiwgCisgICAgMTA0NjY2LCAxMDQ2NzAsIDEwNDY3NCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkwLCAxMDQ2OTQsIDEwNDY5OCwgCisgICAgMTA0NzAyLCAxMDQ3MDYsIDEwNDcxMCwgMTA0NzE0LCAxMDQ3MTgsIDEwNDcyMiwgMTA0NzI2LCAxMDQ3MzAsIDEwNDczNCwgCisgICAgMTA0NzM4LCAxMDQ3NDIsIDEwNDc0NiwgMTA0NzUwLCAxMDQ3NTQsIDEwNDc1OCwgMTA0NzYyLCAxMDQ3NjYsIDEwNDc3MCwgCisgICAgMTA0Nzc0LCAxMDQ3NzgsIDEwNDc4MiwgMTA0Nzg2LCAxMDQ3OTAsIDEwNDc5NCwgMTA0Nzk4LCAxMDQ4MDIsIDEwNDgwNiwgCisgICAgMTA0ODEwLCAxMDQ4MTQsIDEwNDgxOCwgMTA0ODIyLCAxMDQ4MjYsIDEwNDgzMCwgMTA0ODM0LCAxMDQ4MzgsIDEwNDg0MiwgCisgICAgMTA0ODQ2LCAxMDQ4NTAsIDEwNDg1NCwgMTA0ODU4LCAxMDQ4NjIsIDEwNDg2NiwgMTA0ODcwLCAxMDQ4NzQsIDEwNDg3OCwgCisgICAgMTA0ODgyLCAxMDQ4ODYsIDEwNDg5MCwgMTA0ODk0LCAxMDQ4OTgsIDEwNDkwMiwgMTA0OTA2LCAxMDQ5MTAsIDEwNDkxNCwgCisgICAgMTA0OTE4LCAxMDQ5MjIsIDEwNDkyNiwgMTA0OTMwLCAxMDQ5MzQsIDEwNDkzOCwgMTA0OTQyLCAxMDQ5NDYsIDEwNDk1MCwgCisgICAgMTA0OTU0LCAxMDQ5NTgsIDEwNDk2MiwgMTA0OTY2LCAxMDQ5NzAsIDEwNDk3NCwgMTA0OTc4LCAxMDQ5ODIsIDEwNDk4NiwgCisgICAgMTA0OTkwLCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAyLCAxMDUwMDYsIDEwNTAxMCwgMTA1MDE0LCAxMDUwMTgsIDEwNTAyMiwgCisgICAgMTA1MDI2LCAxMDUwMzAsIDEwNTAzNCwgMTA1MDM4LCAxMDUwNDIsIDEwNTA0NiwgMTA1MDUwLCAxMDUwNTQsIDEwNTA1OCwgCisgICAgMTA1MDYyLCAxMDUwNjYsIDEwNTA3MCwgMTA1MDc0LCAxMDUwNzgsIDEwNTA4MiwgMTA1MDg2LCAxMDUwOTAsIDEwNTA5NCwgCisgICAgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAxMDUxMTQsIDEwNTExOCwgMTA1MTIyLCAxMDUxMjYsIDEwNTEzMCwgCisgICAgMTA1MTM0LCAxMDUxMzgsIDEwNTE0MiwgMTA1MTQ2LCAxMDUxNTAsIDEwNTE1NCwgMTA1MTU4LCAxMDUxNjIsIDEwNTE2NiwgCisgICAgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODYsIDEwNTE5MCwgMTA1MTk0LCAxMDUxOTgsIDEwNTIwMiwgCisgICAgMTA1MjA2LCAxMDUyMTAsIDEwNTIxNCwgMTA1MjE4LCAxMDUyMjIsIDEwNTIyNiwgMTA1MjMwLCAxMDUyMzQsIDEwNTIzOCwgCisgICAgMTA1MjQyLCAxMDUyNDYsIDEwNTI1MCwgMTA1MjU0LCAxMDUyNTgsIDEwNTI2MiwgMTA1MjY2LCAxMDUyNzAsIDEwNTI3NCwgCisgICAgMTA1Mjc4LCAxMDUyODIsIDEwNTI4NiwgMTA1MjkwLCAxMDUyOTQsIDEwNTI5OCwgMTA1MzAyLCAxMDUzMDYsIDEwNTMxMCwgCisgICAgMTA1MzE0LCAxMDUzMTgsIDEwNTMyMiwgMTA1MzI2LCAxMDUzMzAsIDEwNTMzNCwgMTA1MzM4LCAxMDUzNDIsIDEwNTM0NiwgCisgICAgMTA1MzUwLCAxMDUzNTQsIDEwNTM1OCwgMTA1MzYyLCAxMDUzNjYsIDEwNTM3MCwgMTA1Mzc0LCAxMDUzNzgsIDEwNTM4MiwgCisgICAgMTA1Mzg2LCAxMDUzOTAsIDEwNTM5NCwgMTA1Mzk4LCAxMDU0MDIsIDEwNTQwNiwgMTA1NDEwLCAxMDU0MTQsIDEwNTQxOCwgCisgICAgMTA1NDIyLCAxMDU0MjYsIDEwNTQzMCwgMTA1NDM0LCAxMDU0MzgsIDEwNTQ0MiwgMTA1NDQ2LCAxMDU0NTAsIDEwNTQ1NCwgCisgICAgMTA1NDU4LCAxMDU0NjIsIDEwNTQ2NiwgMTA1NDcwLCAxMDU0NzQsIDEwNTQ3OCwgMTA1NDgyLCAxMDU0ODYsIDEwNTQ5MCwgCisgICAgMTA1NDk0LCAxMDU0OTgsIDEwNTUwMiwgMTA1NTA2LCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE4LCAxMDU1MjIsIDEwNTUyNiwgCisgICAgMTA1NTMwLCAxMDU1MzQsIDEwNTUzOCwgMTA1NTQyLCAxMDU1NDYsIDEwNTU1MCwgMTA1NTU0LCAxMDU1NTgsIDEwNTU2MiwgCisgICAgMTA1NTY2LCAxMDU1NzAsIDEwNTU3NCwgMTA1NTc4LCAxMDU1ODIsIDEwNTU4NiwgMTA1NTkwLCAxMDU1OTQsIDEwNTU5OCwgCisgICAgMTA1NjAyLCAxMDU2MDYsIDEwNTYxMCwgMTA1NjE0LCAxMDU2MTgsIDEwNTYyMiwgMTA1NjI2LCAxMDU2MzAsIDEwNTYzNCwgCisgICAgMTA1NjM4LCAxMDU2NDIsIDEwNTY0NiwgMTA1NjUwLCAxMDU2NTQsIDEwNTY1OCwgMTA1NjYyLCAxMDU2NjYsIDEwNTY3MCwgCisgICAgMTA1Njc0LCAxMDU2NzgsIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIDEwNTcwNiwgCisgICAgMTA1NzEwLCAxMDU3MTQsIDEwNTcxOCwgMTA1NzIyLCAxMDU3MjYsIDEwNTczMCwgMTA1NzM0LCAxMDU3MzgsIDEwNTc0MiwgCisgICAgMTA1NzQ2LCAxMDU3NTAsIDEwNTc1NCwgMTA1NzU4LCAxMDU3NjIsIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzQsIDEwNTc3OCwgCisgICAgMTA1NzgyLCAxMDU3ODYsIDEwNTc5MCwgMTA1Nzk0LCAxMDU3OTgsIDEwNTgwMiwgMTA1ODA2LCAxMDU4MTAsIDEwNTgxNCwgCisgICAgMTA1ODE4LCAxMDU4MjIsIDEwNTgyNiwgMTA1ODMwLCAxMDU4MzQsIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDYsIDEwNTg1MCwgCisgICAgMTA1ODU0LCAxMDU4NTgsIDEwNTg2MiwgMTA1ODY2LCAxMDU4NzAsIDEwNTg3NCwgMTA1ODc4LCAxMDU4ODIsIDEwNTg4NiwgCisgICAgMTA1ODkwLCAxMDU4OTQsIDEwNTg5OCwgMTA1OTAyLCAxMDU5MDYsIDEwNTkxMCwgMTA1OTE0LCAxMDU5MTgsIDEwNTkyMiwgCisgICAgMTA1OTI2LCAxMDU5MzAsIDEwNTkzNCwgMTA1OTM4LCAxMDU5NDIsIDEwNTk0NiwgMTA1OTUwLCAxMDU5NTQsIDEwNTk1OCwgCisgICAgMTA1OTYyLCAxMDU5NjYsIDEwNTk3MCwgMTA1OTc0LCAxMDU5NzgsIDEwNTk4MiwgMTA1OTg2LCAxMDU5OTAsIDEwNTk5NCwgCisgICAgMTA1OTk4LCAxMDYwMDIsIDEwNjAwNiwgMTA2MDEwLCAxMDYwMTQsIDEwNjAxOCwgMTA2MDIyLCAxMDYwMjYsIDEwNjAzMCwgCisgICAgMTA2MDM0LCAxMDYwMzgsIDEwNjA0MiwgMTA2MDQ2LCAxMDYwNTAsIDEwNjA1NCwgMTA2MDU4LCAxMDYwNjIsIDEwNjA2NiwgCisgICAgMTA2MDcwLCAxMDYwNzQsIDEwNjA3OCwgMTA2MDgyLCAxMDYwODYsIDEwNjA5MCwgMTA2MDk0LCAxMDYwOTgsIDEwNjEwMiwgCisgICAgMTA2MTA2LCAxMDYxMTAsIDEwNjExNCwgMTA2MTE4LCAxMDYxMjIsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzQsIDEwNjEzOCwgCisgICAgMTA2MTQyLCAxMDYxNDYsIDEwNjE1MCwgMTA2MTU0LCAxMDYxNTgsIDEwNjE2MiwgMTA2MTY2LCAxMDYxNzAsIDEwNjE3NCwgCisgICAgMTA2MTc4LCAxMDYxODIsIDEwNjE4NiwgMTA2MTkwLCAxMDYxOTQsIDEwNjE5OCwgMTA2MjAyLCAxMDYyMDYsIDEwNjIxMCwgCisgICAgMTA2MjE0LCAxMDYyMTgsIDEwNjIyMiwgMTA2MjI2LCAxMDYyMzAsIDEwNjIzNCwgMTA2MjM4LCAxMDYyNDIsIDEwNjI0NiwgCisgICAgMTA2MjUwLCAxMDYyNTQsIDEwNjI1OCwgMTA2MjYyLCAxMDYyNjYsIDEwNjI3MCwgMTA2Mjc0LCAxMDYyNzgsIDEwNjI4MiwgCisgICAgMTA2Mjg2LCAxMDYyOTAsIDEwNjI5NCwgMTA2Mjk4LCAxMDYzMDIsIDEwNjMwNiwgMTA2MzEwLCAxMDYzMTQsIDEwNjMxOCwgCisgICAgMTA2MzIyLCAxMDYzMjYsIDEwNjMzMCwgMTA2MzM0LCAxMDYzMzgsIDEwNjM0MiwgMTA2MzQ2LCAxMDYzNTAsIDEwNjM1NCwgCisgICAgMTA2MzU4LCAxMDYzNjIsIDEwNjM2NiwgMTA2MzcwLCAxMDYzNzQsIDEwNjM3OCwgMTA2MzgyLCAxMDYzODYsIDEwNjM5MCwgCisgICAgMTA2Mzk0LCAxMDYzOTgsIDEwNjQwMiwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE4LCAxMDY0MjIsIDEwNjQyNiwgCisgICAgMTA2NDMwLCAxMDY0MzQsIDEwNjQzOCwgMTA2NDQyLCAxMDY0NDYsIDEwNjQ1MCwgMTA2NDU0LCAxMDY0NTgsIDEwNjQ2MiwgCisgICAgMTA2NDY2LCAxMDY0NzAsIDEwNjQ3NCwgMTA2NDc4LCAxMDY0ODIsIDEwNjQ4NiwgMTA2NDkwLCAxMDY0OTQsIDEwNjQ5OCwgCisgICAgMTA2NTAyLCAxMDY1MDYsIDEwNjUxMCwgMTA2NTE0LCAxMDY1MTgsIDEwNjUyMiwgMTA2NTI2LCAxMDY1MzAsIDEwNjUzNCwgCisgICAgMTA2NTM4LCAxMDY1NDIsIDEwNjU0NiwgMTA2NTUwLCAxMDY1NTQsIDEwNjU1OCwgMTA2NTYyLCAxMDY1NjYsIDEwNjU3MCwgCisgICAgMTA2NTc0LCAxMDY1NzgsIDEwNjU4MiwgMTA2NTg2LCAxMDY1OTAsIDEwNjU5NCwgMTA2NTk4LCAxMDY2MDIsIDEwNjYwNiwgCisgICAgMTA2NjEwLCAxMDY2MTQsIDEwNjYxOCwgMTA2NjIyLCAxMDY2MjYsIDEwNjYzMCwgMTA2NjM0LCAxMDY2MzgsIDEwNjY0MiwgCisgICAgMTA2NjQ2LCAxMDY2NTAsIDEwNjY1NCwgMTA2NjU4LCAxMDY2NjIsIDEwNjY2NiwgMTA2NjcwLCAxMDY2NzQsIDEwNjY3OCwgCisgICAgMTA2NjgyLCAxMDY2ODYsIDEwNjY5MCwgMTA2Njk0LCAxMDY2OTgsIDEwNjcwMiwgMTA2NzA2LCAxMDY3MTAsIDEwNjcxNCwgCisgICAgMTA2NzE4LCAxMDY3MjIsIDEwNjcyNiwgMTA2NzMwLCAxMDY3MzQsIDEwNjczOCwgMTA2NzQyLCAxMDY3NDYsIDEwNjc1MCwgCisgICAgMTA2NzU0LCAxMDY3NTgsIDEwNjc2MiwgMTA2NzY2LCAxMDY3NzAsIDEwNjc3NCwgMTA2Nzc4LCAxMDY3ODIsIDEwNjc4NiwgCisgICAgMTA2NzkwLCAxMDY3OTQsIDEwNjc5OCwgMTA2ODAyLCAxMDY4MDYsIDEwNjgxMCwgMTA2ODE0LCAxMDY4MTgsIDEwNjgyMiwgCisgICAgMTA2ODI2LCAxMDY4MzAsIDEwNjgzNCwgMTA2ODM4LCAxMDY4NDIsIDEwNjg0NiwgMTA2ODUwLCAxMDY4NTQsIDEwNjg1OCwgCisgICAgMTA2ODYyLCAxMDY4NjYsIDEwNjg3MCwgMTA2ODc0LCAxMDY4NzgsIDEwNjg4MiwgMTA2ODg2LCAxMDY4OTAsIDEwNjg5NCwgCisgICAgMTA2ODk4LCAxMDY5MDIsIDEwNjkwNiwgMTA2OTEwLCAxMDY5MTQsIDEwNjkxOCwgMTA2OTIyLCAxMDY5MjYsIDEwNjkzMCwgCisgICAgMTA2OTM0LCAxMDY5MzgsIDEwNjk0MiwgMTA2OTQ2LCAxMDY5NTAsIDEwNjk1NCwgMTA2OTU4LCAxMDY5NjIsIDEwNjk2NiwgCisgICAgMTA2OTcwLCAxMDY5NzQsIDEwNjk3OCwgMTA2OTgyLCAxMDY5ODYsIDEwNjk5MCwgMTA2OTk0LCAxMDY5OTgsIDEwNzAwMiwgCisgICAgMTA3MDA2LCAxMDcwMTAsIDEwNzAxNCwgMTA3MDE4LCAxMDcwMjIsIDEwNzAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTA3MDMwLCAxMDcwMzcsIDEwNzA0NCwgMTA3MDUzLCAxMDcwNjIsIDEwNzA2OSwgMTA3MDc0LCAxMDcwODEsIAorICAgIDEwNzA4OCwgMTA3MDk3LCAxMDcxMDgsIDEwNzExOSwgMTA3MTI0LCAxMDcxMzEsIDEwNzEzNiwgMTA3MTQxLCAxMDcxNDYsIAorICAgIDEwNzE1MSwgMTA3MTU2LCAxMDcxNjEsIDEwNzE2NiwgMTA3MTcxLCAxMDcxNzYsIDEwNzE4MSwgMTA3MTg2LCAxMDcxOTMsIAorICAgIDEwNzIwMCwgMTA3MjA1LCAxMDcyMTAsIDEwNzIxNSwgMTA3MjIwLCAxMDcyMjcsIDEwNzIzNCwgMTA3MjQyLCAxMDcyNDcsIAorICAgIDEwNzI1NCwgMTA3MjU5LCAxMDcyNjQsIDEwNzI2OSwgMTA3Mjc0LCAxMDcyNzksIDEwNzI4NiwgMTA3MjkzLCAxMDcyOTgsIAorICAgIDEwNzMwMywgMTA3MzA4LCAxMDczMTMsIDEwNzMxOCwgMTA3MzIzLCAxMDczMjgsIDEwNzMzMywgMTA3MzM4LCAxMDczNDMsIAorICAgIDEwNzM0OCwgMTA3MzUzLCAxMDczNTgsIDEwNzM2MywgMTA3MzY4LCAxMDczNzMsIDEwNzM3OCwgMTA3MzgzLCAxMDczODgsIAorICAgIDEwNzM5NSwgMTA3NDAwLCAxMDc0MDUsIDEwNzQxNCwgMTA3NDIxLCAxMDc0MjYsIDEwNzQzMSwgMTA3NDM2LCAxMDc0NDEsIAorICAgIDEwNzQ0NiwgMTA3NDUxLCAxMDc0NTYsIDEwNzQ2MSwgMTA3NDY2LCAxMDc0NzEsIDEwNzQ3NiwgMTA3NDgxLCAxMDc0ODYsIAorICAgIDEwNzQ5MSwgMTA3NDk2LCAxMDc1MDEsIDEwNzUwNiwgMTA3NTExLCAxMDc1MTYsIDEwNzUyMSwgMTA3NTI2LCAxMDc1MzIsIAorICAgIDEwNzU0MCwgMTA3NTQ2LCAxMDc1NTQsIDEwNzU2MiwgMTA3NTcwLCAxMDc1NzYsIDEwNzU4MiwgMTA3NTg4LCAxMDc1OTQsIAorICAgIDEwNzYwMCwgMTA3NjA4LCAxMDc2MTgsIDEwNzYyNiwgMTA3NjM0LCAxMDc2NDAsIDEwNzY0NiwgMTA3NjU0LCAxMDc2NjIsIAorICAgIDEwNzY2OCwgMTA3Njc2LCAxMDc2ODQsIDEwNzY5MiwgMTA3Njk4LCAxMDc3MDQsIDEwNzcxMCwgMTA3NzE2LCAxMDc3MjIsIAorICAgIDEwNzcyOCwgMTA3NzM2LCAxMDc3NDQsIDEwNzc1MCwgMTA3NzU2LCAxMDc3NjIsIDEwNzc2OCwgMTA3Nzc0LCAxMDc3ODIsIAorICAgIDEwNzc4OCwgMTA3Nzk0LCAxMDc4MDAsIDEwNzgwNiwgMTA3ODEyLCAxMDc4MTgsIDEwNzgyNiwgMTA3ODMyLCAxMDc4MzgsIAorICAgIDEwNzg0NCwgMTA3ODUwLCAxMDc4NTgsIDEwNzg2NiwgMTA3ODcyLCAxMDc4NzgsIDEwNzg4NCwgMTA3ODg5LCAxMDc4OTUsIAorICAgIDEwNzkwMSwgMTA3OTA4LCAxMDc5MTMsIDEwNzkxOCwgMTA3OTIzLCAxMDc5MjgsIDEwNzkzMywgMTA3OTM4LCAxMDc5NDMsIAorICAgIDEwNzk0OCwgMTA3OTUzLCAxMDc5NjIsIDEwNzk2OSwgMTA3OTc0LCAxMDc5NzksIDEwNzk4NCwgMTA3OTkxLCAxMDc5OTYsIAorICAgIDEwODAwMSwgMTA4MDA2LCAxMDgwMTMsIDEwODAxOCwgMTA4MDIzLCAxMDgwMjgsIDEwODAzMywgMTA4MDM4LCAxMDgwNDMsIAorICAgIDEwODA0OCwgMTA4MDUzLCAxMDgwNTgsIDEwODA2MywgMTA4MDY4LCAxMDgwNzUsIDEwODA4MCwgMTA4MDg3LCAxMDgwOTIsIAorICAgIDEwODA5NywgMTA4MTA0LCAxMDgxMDksIDEwODExNCwgMTA4MTE5LCAxMDgxMjQsIDEwODEyOSwgMTA4MTM0LCAxMDgxMzksIAorICAgIDEwODE0NCwgMTA4MTQ5LCAxMDgxNTQsIDEwODE1OSwgMTA4MTY0LCAxMDgxNjksIDEwODE3NCwgMTA4MTc5LCAxMDgxODQsIAorICAgIDEwODE4OSwgMTA4MTk0LCAxMDgxOTksIDEwODIwNiwgMTA4MjExLCAxMDgyMTYsIDEwODIyMSwgMTA4MjI2LCAxMDgyMzEsIAorICAgIDEwODIzNiwgMTA4MjQxLCAxMDgyNDYsIDEwODI1MSwgMTA4MjU2LCAxMDgyNjEsIDEwODI2NiwgMTA4MjcxLCAxMDgyNzgsIAorICAgIDEwODI4MywgMTA4Mjg4LCAxMDgyOTUsIDEwODMwMCwgMTA4MzA1LCAxMDgzMTAsIDEwODMxNSwgMTA4MzIwLCAxMDgzMjUsIAorICAgIDEwODMzMCwgMTA4MzM1LCAxMDgzNDAsIDEwODM0NSwgMTA4MzUyLCAxMDgzNTcsIDEwODM2MiwgMTA4MzY3LCAxMDgzNzIsIAorICAgIDEwODM3NywgMTA4Mzg0LCAxMDgzOTEsIDEwODM5NiwgMTA4NDAxLCAxMDg0MDYsIDEwODQxMSwgMTA4NDE2LCAxMDg0MjEsIAorICAgIDEwODQyNiwgMTA4NDMxLCAxMDg0MzYsIDEwODQ0MSwgMTA4NDQ2LCAxMDg0NTEsIDEwODQ1NiwgMTA4NDYxLCAxMDg0NjYsIAorICAgIDEwODQ3MSwgMTA4NDc2LCAxMDg0ODEsIDEwODQ4NiwgMTA4NDkxLCAxMDg0OTYsIDEwODUwMSwgMTA4NTA2LCAxMDg1MTEsIAorICAgIDEwODUxNiwgMTA4NTIxLCAxMDg1MjYsIDEwODUzMSwgMTA4NTM2LCAxMDg1NDEsIDEwODU0NiwgMTA4NTUxLCAxMDg1NTYsIAorICAgIDEwODU2MSwgMTA4NTY2LCAxMDg1NzEsIDEwODU3OCwgMTA4NTgzLCAxMDg1ODgsIDEwODU5MywgMTA4NTk4LCAxMDg2MDMsIAorICAgIDEwODYwOCwgMTA4NjEzLCAxMDg2MTgsIDEwODYyMywgMTA4NjI4LCAxMDg2MzMsIDEwODYzOCwgMTA4NjQzLCAxMDg2NDgsIAorICAgIDEwODY1MywgMTA4NjU4LCAxMDg2NjMsIDEwODY2OCwgMTA4NjczLCAxMDg2NzgsIDEwODY4MywgMTA4Njg4LCAxMDg2OTMsIAorICAgIDEwODY5OCwgMTA4NzAzLCAxMDg3MDgsIDEwODcxMywgMTA4NzE4LCAxMDg3MjMsIDEwODcyOCwgMTA4NzMzLCAxMDg3MzgsIAorICAgIDEwODc0MywgMTA4NzQ4LCAxMDg3NTMsIDEwODc1OCwgMTA4NzYzLCAxMDg3NjgsIDEwODc3MywgMTA4Nzc4LCAxMDg3ODMsIAorICAgIDEwODc4OCwgMTA4NzkzLCAxMDg3OTgsIDEwODgwMywgMTA4ODA4LCAxMDg4MTMsIDEwODgxOCwgMTA4ODIzLCAxMDg4MjgsIAorICAgIDEwODgzMywgMTA4ODM4LCAxMDg4NDMsIDEwODg0OCwgMTA4ODUzLCAxMDg4NTgsIDEwODg2MywgMTA4ODY4LCAxMDg4NzUsIAorICAgIDEwODg4MCwgMTA4ODg1LCAxMDg4OTAsIDEwODg5NSwgMTA4OTAwLCAxMDg5MDUsIDEwODkwOSwgMTA4OTE0LCAxMDg5MTksIAorICAgIDEwODkyNCwgMTA4OTI5LCAxMDg5MzQsIDEwODkzOSwgMTA4OTQ0LCAxMDg5NDksIDEwODk1NCwgMTA4OTU5LCAxMDg5NjQsIAorICAgIDEwODk2OSwgMTA4OTc0LCAxMDg5NzksIDEwODk4NiwgMTA4OTkxLCAxMDg5OTYsIDEwOTAwMiwgMTA5MDA3LCAxMDkwMTIsIAorICAgIDEwOTAxNywgMTA5MDIyLCAxMDkwMjcsIDEwOTAzMiwgMTA5MDM3LCAxMDkwNDIsIDEwOTA0NywgMTA5MDUyLCAxMDkwNTcsIAorICAgIDEwOTA2MiwgMTA5MDY3LCAxMDkwNzIsIDEwOTA3NywgMTA5MDgyLCAxMDkwODcsIDEwOTA5MiwgMTA5MDk3LCAxMDkxMDIsIAorICAgIDEwOTEwNywgMTA5MTEyLCAxMDkxMTcsIDEwOTEyMiwgMTA5MTI3LCAxMDkxMzIsIDEwOTEzNywgMTA5MTQyLCAxMDkxNDcsIAorICAgIDEwOTE1MiwgMTA5MTU3LCAxMDkxNjIsIDEwOTE2NywgMTA5MTcyLCAxMDkxNzcsIDEwOTE4MiwgMTA5MTg3LCAxMDkxOTIsIAorICAgIDEwOTE5NywgMTA5MjAyLCAxMDkyMDcsIDEwOTIxMiwgMTA5MjE3LCAxMDkyMjQsIDEwOTIyOSwgMTA5MjM0LCAxMDkyNDEsIAorICAgIDEwOTI0OCwgMTA5MjUzLCAxMDkyNTgsIDEwOTI2MywgMTA5MjY4LCAxMDkyNzMsIDEwOTI3OCwgMTA5MjgzLCAxMDkyODgsIAorICAgIDEwOTI5MywgMTA5Mjk4LCAxMDkzMDMsIDEwOTMwOCwgMTA5MzEzLCAxMDkzMTgsIDEwOTMyMywgMTA5MzI4LCAxMDkzMzMsIAorICAgIDEwOTMzOCwgMTA5MzQzLCAxMDkzNDgsIDEwOTM1MywgMTA5MzU4LCAxMDkzNjMsIDEwOTM2OCwgMTA5MzczLCAxMDkzODAsIAorICAgIDEwOTM4NSwgMTA5MzkwLCAxMDkzOTUsIDEwOTQwMCwgMTA5NDA1LCAxMDk0MTAsIDEwOTQxNSwgMTA5NDIwLCAxMDk0MjUsIAorICAgIDEwOTQzMCwgMTA5NDM1LCAxMDk0NDAsIDEwOTQ0NSwgMTA5NDUwLCAxMDk0NTUsIDEwOTQ2MCwgMTA5NDY1LCAxMDk0NzAsIAorICAgIDEwOTQ3NywgMTA5NDgyLCAxMDk0ODcsIDEwOTQ5MiwgMTA5NDk3LCAxMDk1MDIsIDEwOTUwNywgMTA5NTEyLCAxMDk1MTgsIAorICAgIDEwOTUyMywgMTA5NTI4LCAxMDk1MzMsIDEwOTUzOCwgMTA5NTQzLCAxMDk1NDgsIDEwOTU1MywgMTA5NTU4LCAxMDk1NjUsIAorICAgIDEwOTU3MiwgMTA5NTc3LCAxMDk1ODIsIDEwOTU4NiwgMTA5NTkxLCAxMDk1OTUsIDEwOTU5OSwgMTA5NjA0LCAxMDk2MTEsIAorICAgIDEwOTYxNiwgMTA5NjIxLCAxMDk2MzAsIDEwOTYzNSwgMTA5NjQwLCAxMDk2NDUsIDEwOTY1MCwgMTA5NjU3LCAxMDk2NjQsIAorICAgIDEwOTY2OSwgMTA5Njc0LCAxMDk2NzksIDEwOTY4NCwgMTA5NjkxLCAxMDk2OTYsIDEwOTcwMSwgMTA5NzA2LCAxMDk3MTEsIAorICAgIDEwOTcxNiwgMTA5NzIxLCAxMDk3MjYsIDEwOTczMSwgMTA5NzM2LCAxMDk3NDEsIDEwOTc0NiwgMTA5NzUxLCAxMDk3NTgsIAorICAgIDEwOTc2MiwgMTA5NzY3LCAxMDk3NzIsIDEwOTc3NywgMTA5NzgyLCAxMDk3ODYsIDEwOTc5MSwgMTA5Nzk2LCAxMDk4MDEsIAorICAgIDEwOTgwNiwgMTA5ODExLCAxMDk4MTYsIDEwOTgyMSwgMTA5ODI2LCAxMDk4MzEsIDEwOTgzNywgMTA5ODQzLCAxMDk4NDksIAorICAgIDEwOTg1NSwgMTA5ODYxLCAxMDk4NjcsIDEwOTg3MywgMTA5ODc5LCAxMDk4ODUsIDEwOTg5MSwgMTA5ODk3LCAxMDk5MDMsIAorICAgIDEwOTkwOCwgMTA5OTE0LCAxMDk5MjAsIDEwOTkyNiwgMTA5OTMyLCAxMDk5MzgsIDEwOTk0NCwgMTA5OTUwLCAxMDk5NTYsIAorICAgIDEwOTk2MiwgMTA5OTY4LCAxMDk5NzQsIDEwOTk3OSwgMTA5OTg1LCAxMDk5OTEsIDEwOTk5NywgMTEwMDAzLCAxMTAwMDksIAorICAgIDExMDAxNSwgMTEwMDIxLCAxMTAwMjcsIDExMDAzMywgMTEwMDM5LCAxMTAwNDUsIDExMDA1MSwgMTEwMDU3LCAxMTAwNjMsIAorICAgIDExMDA2OSwgMTEwMDc1LCAxMTAwODEsIDExMDA4NywgMTEwMDkzLCAxMTAwOTksIDExMDEwNCwgMTEwMTEwLCAxMTAxMTYsIAorICAgIDExMDEyMiwgMTEwMTI4LCAxMTAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDE0MCwgMTEwMTQzLCAxMTAxNDcsIDExMDE1MSwgMTEwMTU1LCAxMTAxNTgsIAorICAgIDExMDE2MiwgMTEwMTY3LCAxMTAxNzEsIDExMDE3NSwgMTEwMTc5LCAxMTAxODMsIDExMDE4NywgMTEwMTkyLCAxMTAxOTcsIAorICAgIDExMDIwMSwgMTEwMjA1LCAxMTAyMDgsIDExMDIxMiwgMTEwMjE3LCAxMTAyMjIsIDExMDIyNiwgMTEwMjMwLCAxMTAyMzQsIAorICAgIDExMDIzOCwgMTEwMjQyLCAxMTAyNDYsIDExMDI1MCwgMTEwMjU0LCAxMTAyNTgsIDExMDI2MiwgMTEwMjY1LCAxMTAyNjksIAorICAgIDExMDI3MywgMTEwMjc3LCAxMTAyODEsIDExMDI4NSwgMTEwMjg5LCAxMTAyOTUsIDExMDI5OCwgMTEwMzAyLCAxMTAzMDYsIAorICAgIDExMDMxMCwgMTEwMzE0LCAxMTAzMTgsIDExMDMyMiwgMTEwMzI2LCAxMTAzMzAsIDExMDMzNCwgMTEwMzM5LCAxMTAzNDQsIAorICAgIDExMDM1MCwgMTEwMzU0LCAxMTAzNTgsIDExMDM2MiwgMTEwMzY2LCAxMTAzNzAsIDExMDM3NCwgMTEwMzc5LCAxMTAzODIsIAorICAgIDExMDM4NiwgMTEwMzkwLCAxMTAzOTQsIDExMDM5OCwgMTEwNDA0LCAxMTA0MDgsIDExMDQxMiwgMTEwNDE2LCAxMTA0MjAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDQyNCwgMTEwNDI4LCAxMTA0MzIsIDExMDQzOCwgMTEwNDQ0LCAKKyAgICAxMTA0NDgsIDExMDQ1MywgMTEwNDU4LCAxMTA0NjMsIDExMDQ2OCwgMTEwNDcyLCAxMTA0NzcsIDExMDQ4MiwgMTEwNDg3LCAKKyAgICAxMTA0OTEsIDExMDQ5NiwgMTEwNTAxLCAxMTA1MDYsIDExMDUxMCwgMTEwNTE1LCAxMTA1MjAsIDExMDUyNSwgMTEwNTMwLCAKKyAgICAxMTA1MzUsIDExMDU0MCwgMTEwNTQ1LCAxMTA1NTAsIDExMDU1NCwgMTEwNTU5LCAxMTA1NjQsIDExMDU2OSwgMTEwNTc0LCAKKyAgICAxMTA1NzksIDExMDU4NCwgMTEwNTg5LCAxMTA1OTQsIDExMDU5OSwgMTEwNjA0LCAxMTA2MDksIDExMDYxNiwgMTEwNjIxLCAKKyAgICAxMTA2MjgsIDExMDYzMywgMTEwNjM4LCAxMTA2NDMsIDExMDY0OCwgMTEwNjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2NTgsIDExMDY2MiwgMTEwNjY4LCAxMTA2NzEsIDExMDY3NCwgMTEwNjc4LCAKKyAgICAxMTA2ODIsIDExMDY4NiwgMTEwNjkwLCAxMTA2OTQsIDExMDY5OCwgMTEwNzAyLCAxMTA3MDgsIDExMDcxNCwgMTEwNzIwLCAKKyAgICAxMTA3MjYsIDExMDczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTEwNzM4LCAxMTA3NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDc0OSwgMTEwNzU0LCAxMTA3NTksIAorICAgIDExMDc2NCwgMTEwNzcxLCAxMTA3NzgsIDExMDc4NSwgMTEwNzkyLCAxMTA3OTcsIDExMDgwMiwgMTEwODA3LCAxMTA4MTIsIAorICAgIDExMDgxOSwgMTEwODI0LCAxMTA4MzEsIDExMDgzOCwgMTEwODQzLCAxMTA4NDgsIDExMDg1MywgMTEwODYwLCAxMTA4NjUsIAorICAgIDExMDg3MCwgMTEwODc3LCAxMTA4ODQsIDExMDg4OSwgMTEwODk0LCAxMTA4OTksIDExMDkwNiwgMTEwOTEzLCAxMTA5MjAsIAorICAgIDExMDkyNSwgMTEwOTMwLCAxMTA5MzcsIDExMDk0NCwgMTEwOTUxLCAxMTA5NTgsIDExMDk2MywgMTEwOTY4LCAxMTA5NzMsIAorICAgIDExMDk4MCwgMTEwOTg1LCAxMTA5OTAsIDExMDk5NSwgMTExMDAyLCAxMTEwMTEsIDExMTAxOCwgMTExMDIzLCAxMTEwMjgsIAorICAgIDExMTAzMywgMTExMDM4LCAxMTEwNDMsIDExMTA0OCwgMTExMDU3LCAxMTEwNjQsIDExMTA2OSwgMTExMDc2LCAxMTEwODMsIAorICAgIDExMTA4OCwgMTExMDkzLCAxMTEwOTgsIDExMTEwNSwgMTExMTEwLCAxMTExMTcsIDExMTEyNCwgMTExMTI5LCAxMTExMzQsIAorICAgIDExMTEzOSwgMTExMTQ2LCAxMTExNTMsIDExMTE1OCwgMTExMTYzLCAxMTExNzAsIDExMTE3NywgMTExMTg0LCAxMTExODksIAorICAgIDExMTE5NCwgMTExMTk5LCAxMTEyMDQsIDExMTIxMSwgMTExMjIwLCAxMTEyMjksIDExMTIzNCwgMTExMjQxLCAxMTEyNTAsIAorICAgIDExMTI1NSwgMTExMjYwLCAxMTEyNjUsIDExMTI3MCwgMTExMjc3LCAxMTEyODQsIDExMTI5MSwgMTExMjk4LCAxMTEzMDMsIAorICAgIDExMTMwOCwgMTExMzEzLCAxMTEzMjAsIDExMTMyNywgMTExMzM0LCAxMTEzMzksIDExMTM0NCwgMTExMzUxLCAxMTEzNTYsIAorICAgIDExMTM2MywgMTExMzY4LCAxMTEzNzUsIDExMTM4MCwgMTExMzg3LCAxMTEzOTQsIDExMTM5OSwgMTExNDA0LCAxMTE0MDksIAorICAgIDExMTQxNCwgMTExNDE5LCAxMTE0MjQsIDExMTQyOSwgMTExNDM0LCAxMTE0MzksIDExMTQ0NiwgMTExNDUzLCAxMTE0NjAsIAorICAgIDExMTQ2NywgMTExNDc0LCAxMTE0ODMsIDExMTQ4OCwgMTExNDkzLCAxMTE1MDAsIDExMTUwNywgMTExNTEyLCAxMTE1MTksIAorICAgIDExMTUyNiwgMTExNTMzLCAxMTE1NDAsIDExMTU0NywgMTExNTU0LCAxMTE1NTksIDExMTU2NCwgMTExNTY5LCAxMTE1NzQsIAorICAgIDExMTU3OSwgMTExNTg4LCAxMTE1OTcsIDExMTYwNiwgMTExNjE1LCAxMTE2MjQsIDExMTYzMywgMTExNjQyLCAxMTE2NTEsIAorICAgIDExMTY1NiwgMTExNjY3LCAxMTE2NzgsIDExMTY4NywgMTExNjkyLCAxMTE2OTcsIDExMTcwMiwgMTExNzA3LCAxMTE3MTYsIAorICAgIDExMTcyMywgMTExNzMwLCAxMTE3MzcsIDExMTc0NCwgMTExNzUxLCAxMTE3NTgsIDExMTc2NywgMTExNzc2LCAxMTE3ODcsIAorICAgIDExMTc5NiwgMTExODA3LCAxMTE4MTYsIDExMTgyMywgMTExODMyLCAxMTE4NDMsIDExMTg1MiwgMTExODYxLCAxMTE4NzAsIAorICAgIDExMTg3OSwgMTExODg2LCAxMTE4OTMsIDExMTkwMCwgMTExOTA5LCAxMTE5MTgsIDExMTkyOSwgMTExOTM4LCAxMTE5NDcsIAorICAgIDExMTk1OCwgMTExOTYzLCAxMTE5NjgsIDExMTk3OSwgMTExOTg3LCAxMTE5OTYsIDExMjAwNSwgMTEyMDE0LCAxMTIwMjUsIAorICAgIDExMjAzNCwgMTEyMDQzLCAxMTIwNTQsIDExMjA2NSwgMTEyMDc2LCAxMTIwODcsIDExMjA5OCwgMTEyMTA5LCAxMTIxMTYsIAorICAgIDExMjEyMywgMTEyMTMwLCAxMTIxMzcsIDExMjE0OCwgMTEyMTU3LCAxMTIxNjQsIDExMjE3MSwgMTEyMTc4LCAxMTIxODksIAorICAgIDExMjIwMCwgMTEyMjExLCAxMTIyMjIsIDExMjIzMywgMTEyMjQ0LCAxMTIyNTUsIDExMjI2NiwgMTEyMjczLCAxMTIyODAsIAorICAgIDExMjI4OSwgMTEyMjk4LCAxMTIzMDUsIDExMjMxMiwgMTEyMzE5LCAxMTIzMjgsIDExMjMzNywgMTEyMzQ2LCAxMTIzNTMsIAorICAgIDExMjM2MiwgMTEyMzcxLCAxMTIzODAsIDExMjM4NywgMTEyMzk0LCAxMTIzOTksIDExMjQwNSwgMTEyNDEyLCAxMTI0MTksIAorICAgIDExMjQyNiwgMTEyNDMzLCAxMTI0NDAsIDExMjQ0NywgMTEyNDU2LCAxMTI0NjUsIDExMjQ3NCwgMTEyNDgzLCAxMTI0OTAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ5OSwgMTEyNTA1LCAxMTI1MTAsIDExMjUxNSwgMTEyNTIyLCAKKyAgICAxMTI1MjgsIDExMjUzNCwgMTEyNTQwLCAxMTI1NDYsIDExMjU1MiwgMTEyNTU4LCAxMTI1NjQsIDExMjU2OCwgMTEyNTcyLCAKKyAgICAxMTI1NzgsIDExMjU4NCwgMTEyNTkwLCAxMTI1OTQsIDExMjU5OSwgMTEyNjA0LCAxMTI2MDgsIDExMjYxMiwgMTEyNjE1LCAKKyAgICAxMTI2MjEsIDExMjYyNywgMTEyNjMzLCAxMTI2MzksIDExMjY0NSwgMTEyNjUxLCAxMTI2NTcsIDExMjY2MywgMTEyNjY5LCAKKyAgICAxMTI2NzksIDExMjY4OSwgMTEyNjk1LCAxMTI3MDEsIDExMjcxMSwgMTEyNzIxLCAxMTI3MjcsIDAsIDAsIDExMjczMywgCisgICAgMTEyNzQxLCAxMTI3NDYsIDExMjc1MSwgMTEyNzU3LCAxMTI3NjMsIDExMjc2OSwgMTEyNzc1LCAxMTI3ODEsIDExMjc4NywgCisgICAgMTEyNzk0LCAxMTI4MDEsIDExMjgwNywgMTEyODEzLCAxMTI4MTksIDExMjgyNSwgMTEyODMxLCAxMTI4MzcsIDExMjg0MywgCisgICAgMTEyODQ5LCAxMTI4NTQsIDExMjg2MCwgMTEyODY2LCAxMTI4NzIsIDExMjg3OCwgMTEyODg0LCAxMTI4OTMsIDExMjg5OSwgCisgICAgMTEyOTA0LCAxMTI5MTIsIDExMjkxOSwgMTEyOTI2LCAxMTI5MzUsIDExMjk0NCwgMTEyOTUzLCAxMTI5NjIsIDExMjk3MSwgCisgICAgMTEyOTgwLCAxMTI5ODksIDExMjk5OCwgMTEzMDA4LCAxMTMwMTgsIDExMzAyNiwgMTEzMDM0LCAxMTMwNDMsIDExMzA1MiwgCisgICAgMTEzMDU4LCAxMTMwNjQsIDExMzA3MCwgMTEzMDc2LCAxMTMwODQsIDExMzA5MiwgMTEzMDk2LCAxMTMxMDIsIDExMzEwNywgCisgICAgMTEzMTEzLCAxMTMxMTksIDExMzEyNSwgMTEzMTMxLCAxMTMxMzcsIDExMzE0NiwgMTEzMTUxLCAxMTMxNTgsIDExMzE2MywgCisgICAgMTEzMTY4LCAxMTMxNzMsIDExMzE3OSwgMTEzMTg1LCAxMTMxOTEsIDExMzE5OCwgMTEzMjAzLCAxMTMyMDgsIDExMzIxMywgCisgICAgMTEzMjE4LCAxMTMyMjMsIDExMzIyOSwgMTEzMjM1LCAxMTMyNDEsIDExMzI0NywgMTEzMjUzLCAxMTMyNTksIDExMzI2NSwgCisgICAgMTEzMjcxLCAxMTMyNzYsIDExMzI4MSwgMTEzMjg2LCAxMTMyOTEsIDExMzI5NiwgMTEzMzAxLCAxMTMzMDYsIDExMzMxMSwgCisgICAgMTEzMzE3LCAxMTMzMjMsIDExMzMyOCwgMTEzMzMzLCAxMTMzMzgsIDExMzM0MywgMTEzMzQ4LCAxMTMzNTQsIDExMzM2MSwgCisgICAgMTEzMzY1LCAxMTMzNjksIDExMzM3MywgMTEzMzc3LCAxMTMzODEsIDExMzM4NSwgMTEzMzg5LCAxMTMzOTMsIDExMzQwMSwgCisgICAgMTEzNDExLCAxMTM0MTUsIDExMzQxOSwgMTEzNDI1LCAxMTM0MzEsIDExMzQzNywgMTEzNDQzLCAxMTM0NDksIDExMzQ1NSwgCisgICAgMTEzNDYxLCAxMTM0NjcsIDExMzQ3MywgMTEzNDc5LCAxMTM0ODUsIDExMzQ5MSwgMTEzNDk3LCAxMTM1MDMsIDExMzUwNywgCisgICAgMTEzNTExLCAxMTM1MTgsIDExMzUyNCwgMTEzNTMwLCAxMTM1MzYsIDExMzU0MSwgMTEzNTQ4LCAxMTM1NTMsIDExMzU1OSwgCisgICAgMTEzNTY1LCAxMTM1NzEsIDExMzU3NywgMTEzNTgyLCAxMTM1ODYsIDExMzU5MiwgMTEzNTk2LCAxMTM2MDAsIDExMzYwNCwgCisgICAgMTEzNjEwLCAxMTM2MTYsIDExMzYyMCwgMTEzNjI2LCAxMTM2MzIsIDExMzYzOCwgMTEzNjQ0LCAxMTM2NTAsIDExMzY1OCwgCisgICAgMTEzNjY2LCAxMTM2NzIsIDExMzY3OCwgMTEzNjg0LCAxMTM2OTAsIDExMzcwMiwgMTEzNzE0LCAxMTM3MjgsIDExMzc0MCwgCisgICAgMTEzNzUyLCAxMTM3NjYsIDExMzc4MCwgMTEzNzk0LCAxMTM3OTgsIDExMzgwNiwgMTEzODE0LCAxMTM4MTksIDExMzgyMywgCisgICAgMTEzODI3LCAxMTM4MzEsIDExMzgzNSwgMTEzODM5LCAxMTM4NDMsIDExMzg0NywgMTEzODUzLCAxMTM4NTksIDExMzg2NSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODcxLCAxMTM4NzcsIDExMzg4MywgMTEzODg5LCAxMTM4OTUsIAorICAgIDExMzkwMSwgMTEzOTA3LCAxMTM5MTMsIDExMzkxOSwgMTEzOTI1LCAxMTM5MzEsIDExMzkzNywgMTEzOTQzLCAxMTM5NDksIAorICAgIDExMzk1NSwgMTEzOTYxLCAxMTM5NjcsIDExMzk3MywgMTEzOTc5LCAxMTM5ODUsIDExMzk5MSwgMTEzOTk3LCAxMTQwMDMsIAorICAgIDExNDAwOSwgMTE0MDE1LCAxMTQwMjEsIDExNDAyNywgMTE0MDMzLCAxMTQwMzksIDExNDA0NSwgMTE0MDUxLCAxMTQwNTcsIAorICAgIDExNDA2MywgMTE0MDY5LCAxMTQwNzUsIDExNDA4MSwgMTE0MDg3LCAxMTQwOTMsIDExNDA5OSwgMTE0MTA1LCAxMTQxMTEsIAorICAgIDExNDExNywgMTE0MTIzLCAxMTQxMjksIDExNDEzNSwgMTE0MTQxLCAxMTQxNDcsIDExNDE1MywgMTE0MTU5LCAxMTQxNjUsIAorICAgIDExNDE3MSwgMTE0MTc3LCAxMTQxODMsIDExNDE4OSwgMTE0MTk1LCAxMTQyMDEsIDExNDIwNywgMTE0MjEzLCAxMTQyMTksIAorICAgIDExNDIyNSwgMTE0MjMxLCAxMTQyMzcsIDExNDI0MywgMTE0MjQ5LCAxMTQyNTUsIDExNDI2MSwgMTE0MjY3LCAxMTQyNzIsIAorICAgIDExNDI3NywgMTE0MjgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQyODYsIDExNDI5MSwgMTE0Mjk4LCAKKyAgICAxMTQzMDUsIDExNDMxMiwgMTE0MzE5LCAxMTQzMjQsIDExNDMyOCwgMTE0MzM0LCAxMTQzMzgsIDExNDM0MiwgMTE0MzQ4LCAKKyAgICAxMTQzNTIsIDExNDM1NiwgMTE0MzYwLCAxMTQzNjYsIDExNDM3MywgMTE0Mzc3LCAxMTQzODEsIDExNDM4NSwgMTE0Mzg5LCAKKyAgICAxMTQzOTMsIDExNDM5NywgMTE0NDAzLCAxMTQ0MDcsIDExNDQxMSwgMTE0NDE1LCAxMTQ0MTksIDExNDQyMywgMTE0NDI3LCAKKyAgICAxMTQ0MzEsIDExNDQzNSwgMTE0NDM5LCAxMTQ0NDMsIDExNDQ0NywgMTE0NDUxLCAxMTQ0NTYsIDExNDQ2MCwgMTE0NDY0LCAKKyAgICAxMTQ0NjgsIDExNDQ3MiwgMTE0NDc2LCAxMTQ0ODAsIDExNDQ4NCwgMTE0NDg4LCAxMTQ0OTIsIDExNDQ5OSwgMTE0NTAzLCAKKyAgICAxMTQ1MTEsIDExNDUxNSwgMTE0NTE5LCAxMTQ1MjMsIDExNDUyNywgMTE0NTMxLCAxMTQ1MzUsIDExNDUzOSwgMTE0NTQ2LCAKKyAgICAxMTQ1NTAsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcyLCAxMTQ1NzYsIDExNDU4MiwgMTE0NTg2LCAKKyAgICAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgMTE0NjIyLCAKKyAgICAxMTQ2MjYsIDExNDYzMCwgMTE0NjM0LCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAxMTQ2NTAsIDExNDY1NCwgMTE0NjU4LCAKKyAgICAxMTQ2NjYsIDExNDY3MCwgMTE0Njc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ2NzgsIDExNDY4NiwgCisgICAgMTE0Njk0LCAxMTQ3MDIsIDExNDcxMCwgMTE0NzE4LCAxMTQ3MjYsIDExNDczNCwgMTE0NzQyLCAxMTQ3NTAsIDExNDc1OCwgCisgICAgMTE0NzY2LCAxMTQ3NzQsIDExNDc4MiwgMTE0NzkwLCAxMTQ3OTgsIDExNDgwNiwgMTE0ODE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ4MjIsIDExNDgyNiwgMTE0ODMxLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ1LCAKKyAgICAxMTQ4NTAsIDExNDg1NSwgMTE0ODYwLCAxMTQ4NjQsIDExNDg2OSwgMTE0ODc0LCAxMTQ4NzgsIDExNDg4MiwgMTE0ODg3LCAKKyAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDUsIDExNDkxMCwgMTE0OTE1LCAxMTQ5MTksIDExNDkyNCwgMTE0OTI5LCAKKyAgICAxMTQ5MzQsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDgsIDExNDk1MywgMTE0OTU4LCAxMTQ5NjMsIDExNDk2NywgMTE0OTcyLCAKKyAgICAxMTQ5NzcsIDExNDk4MiwgMTE0OTg2LCAxMTQ5OTEsIDExNDk5NiwgMTE1MDAwLCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKKyAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI3LCAxMTUwMzIsIDExNTAzNywgMTE1MDQxLCAxMTUwNDYsIDExNTA1MSwgMTE1MDU2LCAKKyAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcwLCAxMTUwNzUsIDExNTA4MCwgMTE1MDg1LCAxMTUwODksIDExNTA5NCwgMTE1MDk5LCAKKyAgICAxMTUxMDQsIDExNTEwOCwgMTE1MTEzLCAxMTUxMTgsIDExNTEyMiwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKKyAgICAxMTUxNDUsIDExNTE0OSwgMTE1MTU0LCAxMTUxNTksIDExNTE2MywgMTE1MTY4LCAxMTUxNzMsIDExNTE3OCwgMTE1MTgzLCAKKyAgICAxMTUxODgsIDExNTE5MiwgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTYsIDAsIDExNTIyMSwgCisgICAgMTE1MjI1LCAxMTUyMzAsIDExNTIzNSwgMTE1MjM5LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCisgICAgMTE1MjY2LCAxMTUyNzEsIDExNTI3NiwgMTE1MjgwLCAxMTUyODUsIDExNTI5MCwgMTE1Mjk1LCAxMTUzMDAsIDExNTMwNSwgCisgICAgMTE1MzEwLCAxMTUzMTYsIDExNTMyMiwgMTE1MzI4LCAxMTUzMzMsIDExNTMzOSwgMTE1MzQ1LCAxMTUzNTEsIDExNTM1NiwgCisgICAgMTE1MzYyLCAxMTUzNjgsIDExNTM3MywgMTE1Mzc4LCAxMTUzODQsIDExNTM4OSwgMTE1Mzk1LCAxMTU0MDEsIDExNTQwNiwgCisgICAgMTE1NDEyLCAxMTU0MTgsIDExNTQyMywgMTE1NDI5LCAxMTU0MzUsIDExNTQ0MSwgMTE1NDQ3LCAxMTU0NTMsIDExNTQ1OCwgCisgICAgMTE1NDY0LCAxMTU0NzAsIDExNTQ3NiwgMTE1NDgxLCAxMTU0ODcsIDExNTQ5MywgMTE1NDk5LCAxMTU1MDQsIDExNTUxMCwgCisgICAgMTE1NTE2LCAxMTU1MjEsIDExNTUyNiwgMTE1NTMyLCAxMTU1MzcsIDExNTU0MywgMTE1NTQ5LCAxMTU1NTQsIDExNTU2MCwgCisgICAgMTE1NTY2LCAxMTU1NzEsIDExNTU3NywgMTE1NTgzLCAxMTU1ODksIDExNTU5NSwgMTE1NjAxLCAwLCAxMTU2MDUsIAorICAgIDExNTYxMCwgMCwgMCwgMTE1NjE1LCAwLCAwLCAxMTU2MjAsIDExNTYyNSwgMCwgMCwgMTE1NjMwLCAxMTU2MzUsIDExNTYzOSwgCisgICAgMTE1NjQ0LCAwLCAxMTU2NDksIDExNTY1NCwgMTE1NjU5LCAxMTU2NjMsIDExNTY2OCwgMTE1NjczLCAxMTU2NzgsIAorICAgIDExNTY4MywgMTE1Njg4LCAxMTU2OTIsIDExNTY5NywgMTE1NzAyLCAwLCAxMTU3MDcsIDAsIDExNTcxMiwgMTE1NzE3LCAKKyAgICAxMTU3MjEsIDExNTcyNiwgMTE1NzMxLCAxMTU3MzUsIDExNTczOSwgMCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCisgICAgMTE1NzU4LCAxMTU3NjMsIDExNTc2OCwgMTE1NzcyLCAxMTU3NzcsIDExNTc4MiwgMTE1Nzg3LCAxMTU3OTIsIDExNTc5NywgCisgICAgMTE1ODAyLCAxMTU4MDgsIDExNTgxNCwgMTE1ODIwLCAxMTU4MjUsIDExNTgzMSwgMTE1ODM3LCAxMTU4NDMsIDExNTg0OCwgCisgICAgMTE1ODU0LCAxMTU4NjAsIDExNTg2NSwgMTE1ODcwLCAxMTU4NzYsIDExNTg4MSwgMTE1ODg3LCAxMTU4OTMsIDExNTg5OCwgCisgICAgMTE1OTA0LCAxMTU5MTAsIDExNTkxNSwgMTE1OTIxLCAxMTU5MjcsIDExNTkzMywgMTE1OTM5LCAxMTU5NDUsIDExNTk1MCwgCisgICAgMTE1OTU2LCAxMTU5NjIsIDExNTk2OCwgMTE1OTczLCAxMTU5NzksIDExNTk4NSwgMTE1OTkxLCAxMTU5OTYsIDExNjAwMiwgCisgICAgMTE2MDA4LCAxMTYwMTMsIDExNjAxOCwgMTE2MDI0LCAxMTYwMjksIDExNjAzNSwgMTE2MDQxLCAxMTYwNDYsIDExNjA1MiwgCisgICAgMTE2MDU4LCAxMTYwNjMsIDExNjA2OSwgMTE2MDc1LCAxMTYwODEsIDExNjA4NywgMTE2MDkzLCAxMTYwOTcsIDAsIAorICAgIDExNjEwMiwgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMCwgMCwgMTE2MTIxLCAxMTYxMjYsIDExNjEzMSwgMTE2MTM1LCAKKyAgICAxMTYxMzksIDExNjE0NCwgMTE2MTQ4LCAxMTYxNTMsIDAsIDExNjE1OCwgMTE2MTYzLCAxMTYxNjgsIDExNjE3MiwgCisgICAgMTE2MTc3LCAxMTYxODIsIDExNjE4NywgMCwgMTE2MTkyLCAxMTYxOTYsIDExNjIwMSwgMTE2MjA2LCAxMTYyMTEsIAorICAgIDExNjIxNSwgMTE2MjIwLCAxMTYyMjUsIDExNjIzMCwgMTE2MjM0LCAxMTYyMzksIDExNjI0NCwgMTE2MjQ4LCAxMTYyNTIsIAorICAgIDExNjI1NywgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc1LCAxMTYyODAsIDExNjI4NSwgMTE2Mjg5LCAxMTYyOTQsIAorICAgIDExNjI5OSwgMTE2MzA0LCAxMTYzMDksIDExNjMxNCwgMTE2MzE4LCAwLCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAKKyAgICAxMTYzMzcsIDAsIDExNjM0MiwgMTE2MzQ2LCAxMTYzNTEsIDExNjM1NiwgMTE2MzYwLCAwLCAxMTYzNjQsIDAsIDAsIDAsIAorICAgIDExNjM2OCwgMTE2MzczLCAxMTYzNzgsIDExNjM4MiwgMTE2Mzg3LCAxMTYzOTIsIDExNjM5NywgMCwgMTE2NDAyLCAKKyAgICAxMTY0MDYsIDExNjQxMSwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNSwgMTE2NDMwLCAxMTY0MzUsIDExNjQ0MCwgMTE2NDQ0LCAKKyAgICAxMTY0NDksIDExNjQ1NCwgMTE2NDU4LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg1LCAKKyAgICAxMTY0OTAsIDExNjQ5NSwgMTE2NDk5LCAxMTY1MDQsIDExNjUwOSwgMTE2NTE0LCAxMTY1MTksIDExNjUyNCwgMTE2NTI5LCAKKyAgICAxMTY1MzUsIDExNjU0MSwgMTE2NTQ3LCAxMTY1NTIsIDExNjU1OCwgMTE2NTY0LCAxMTY1NzAsIDExNjU3NSwgMTE2NTgxLCAKKyAgICAxMTY1ODcsIDExNjU5MiwgMTE2NTk3LCAxMTY2MDMsIDExNjYwOCwgMTE2NjE0LCAxMTY2MjAsIDExNjYyNSwgMTE2NjMxLCAKKyAgICAxMTY2MzcsIDExNjY0MiwgMTE2NjQ4LCAxMTY2NTQsIDExNjY2MCwgMTE2NjY2LCAxMTY2NzIsIDExNjY3NywgMTE2NjgzLCAKKyAgICAxMTY2ODksIDExNjY5NSwgMTE2NzAwLCAxMTY3MDYsIDExNjcxMiwgMTE2NzE4LCAxMTY3MjMsIDExNjcyOSwgMTE2NzM1LCAKKyAgICAxMTY3NDAsIDExNjc0NSwgMTE2NzUxLCAxMTY3NTYsIDExNjc2MiwgMTE2NzY4LCAxMTY3NzMsIDExNjc3OSwgMTE2Nzg1LCAKKyAgICAxMTY3OTAsIDExNjc5NiwgMTE2ODAyLCAxMTY4MDgsIDExNjgxNCwgMTE2ODIwLCAxMTY4MjQsIDExNjgyOSwgMTE2ODM0LCAKKyAgICAxMTY4MzksIDExNjg0MywgMTE2ODQ4LCAxMTY4NTMsIDExNjg1OCwgMTE2ODYyLCAxMTY4NjcsIDExNjg3MiwgMTE2ODc2LCAKKyAgICAxMTY4ODAsIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTAzLCAxMTY5MDgsIDExNjkxMywgMTE2OTE3LCAKKyAgICAxMTY5MjIsIDExNjkyNywgMTE2OTMyLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ2LCAxMTY5NTEsIDExNjk1NiwgMTE2OTYxLCAKKyAgICAxMTY5NjUsIDExNjk3MCwgMTE2OTc1LCAxMTY5ODAsIDExNjk4NCwgMTE2OTg5LCAxMTY5OTQsIDExNjk5OCwgMTE3MDAyLCAKKyAgICAxMTcwMDcsIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNSwgMTE3MDMwLCAxMTcwMzUsIDExNzAzOSwgMTE3MDQ0LCAKKyAgICAxMTcwNDksIDExNzA1NCwgMTE3MDU5LCAxMTcwNjQsIDExNzA2OSwgMTE3MDc1LCAxMTcwODEsIDExNzA4NywgMTE3MDkyLCAKKyAgICAxMTcwOTgsIDExNzEwNCwgMTE3MTEwLCAxMTcxMTUsIDExNzEyMSwgMTE3MTI3LCAxMTcxMzIsIDExNzEzNywgMTE3MTQzLCAKKyAgICAxMTcxNDgsIDExNzE1NCwgMTE3MTYwLCAxMTcxNjUsIDExNzE3MSwgMTE3MTc3LCAxMTcxODIsIDExNzE4OCwgMTE3MTk0LCAKKyAgICAxMTcyMDAsIDExNzIwNiwgMTE3MjEyLCAxMTcyMTcsIDExNzIyMywgMTE3MjI5LCAxMTcyMzUsIDExNzI0MCwgMTE3MjQ2LCAKKyAgICAxMTcyNTIsIDExNzI1OCwgMTE3MjYzLCAxMTcyNjksIDExNzI3NSwgMTE3MjgwLCAxMTcyODUsIDExNzI5MSwgMTE3Mjk2LCAKKyAgICAxMTczMDIsIDExNzMwOCwgMTE3MzEzLCAxMTczMTksIDExNzMyNSwgMTE3MzMwLCAxMTczMzYsIDExNzM0MiwgMTE3MzQ4LCAKKyAgICAxMTczNTQsIDExNzM2MCwgMTE3MzY1LCAxMTczNzEsIDExNzM3NywgMTE3MzgzLCAxMTczODgsIDExNzM5NCwgMTE3NDAwLCAKKyAgICAxMTc0MDYsIDExNzQxMSwgMTE3NDE3LCAxMTc0MjMsIDExNzQyOCwgMTE3NDMzLCAxMTc0MzksIDExNzQ0NCwgMTE3NDUwLCAKKyAgICAxMTc0NTYsIDExNzQ2MSwgMTE3NDY3LCAxMTc0NzMsIDExNzQ3OCwgMTE3NDg0LCAxMTc0OTAsIDExNzQ5NiwgMTE3NTAyLCAKKyAgICAxMTc1MDgsIDExNzUxMywgMTE3NTE5LCAxMTc1MjUsIDExNzUzMSwgMTE3NTM2LCAxMTc1NDIsIDExNzU0OCwgMTE3NTU0LCAKKyAgICAxMTc1NTksIDExNzU2NSwgMTE3NTcxLCAxMTc1NzYsIDExNzU4MSwgMTE3NTg3LCAxMTc1OTIsIDExNzU5OCwgMTE3NjA0LCAKKyAgICAxMTc2MDksIDExNzYxNSwgMTE3NjIxLCAxMTc2MjYsIDExNzYzMiwgMTE3NjM4LCAxMTc2NDQsIDExNzY1MCwgMTE3NjU2LCAKKyAgICAxMTc2NjIsIDExNzY2OSwgMTE3Njc2LCAxMTc2ODMsIDExNzY4OSwgMTE3Njk2LCAxMTc3MDMsIDExNzcxMCwgMTE3NzE2LCAKKyAgICAxMTc3MjMsIDExNzczMCwgMTE3NzM2LCAxMTc3NDIsIDExNzc0OSwgMTE3NzU1LCAxMTc3NjIsIDExNzc2OSwgMTE3Nzc1LCAKKyAgICAxMTc3ODIsIDExNzc4OSwgMTE3Nzk1LCAxMTc4MDIsIDExNzgwOSwgMTE3ODE2LCAxMTc4MjMsIDExNzgzMCwgMTE3ODM2LCAKKyAgICAxMTc4NDMsIDExNzg1MCwgMTE3ODU3LCAxMTc4NjMsIDExNzg3MCwgMTE3ODc3LCAxMTc4ODQsIDExNzg5MCwgMTE3ODk3LCAKKyAgICAxMTc5MDQsIDExNzkxMCwgMTE3OTE2LCAxMTc5MjMsIDExNzkyOSwgMTE3OTM2LCAxMTc5NDMsIDExNzk0OSwgMTE3OTU2LCAKKyAgICAxMTc5NjMsIDExNzk2OSwgMTE3OTc2LCAxMTc5ODMsIDExNzk5MCwgMTE3OTk3LCAxMTgwMDQsIDExODAwOSwgMTE4MDE1LCAKKyAgICAxMTgwMjEsIDExODAyNywgMTE4MDMyLCAxMTgwMzgsIDExODA0NCwgMTE4MDUwLCAxMTgwNTUsIDExODA2MSwgMTE4MDY3LCAKKyAgICAxMTgwNzIsIDExODA3NywgMTE4MDgzLCAxMTgwODgsIDExODA5NCwgMTE4MTAwLCAxMTgxMDUsIDExODExMSwgMTE4MTE3LCAKKyAgICAxMTgxMjIsIDExODEyOCwgMTE4MTM0LCAxMTgxNDAsIDExODE0NiwgMTE4MTUyLCAxMTgxNTcsIDExODE2MywgMTE4MTY5LCAKKyAgICAxMTgxNzUsIDExODE4MCwgMTE4MTg2LCAxMTgxOTIsIDExODE5OCwgMTE4MjAzLCAxMTgyMDksIDExODIxNSwgMTE4MjIwLCAKKyAgICAxMTgyMjUsIDExODIzMSwgMTE4MjM2LCAxMTgyNDIsIDExODI0OCwgMTE4MjUzLCAxMTgyNTksIDExODI2NSwgMTE4MjcwLCAKKyAgICAxMTgyNzYsIDExODI4MiwgMTE4Mjg4LCAxMTgyOTQsIDExODMwMCwgMTE4MzA2LCAwLCAwLCAxMTgzMTMsIDExODMxOCwgCisgICAgMTE4MzIzLCAxMTgzMjgsIDExODMzMywgMTE4MzM4LCAxMTgzNDMsIDExODM0OCwgMTE4MzUzLCAxMTgzNTgsIDExODM2MywgCisgICAgMTE4MzY4LCAxMTgzNzMsIDExODM3OCwgMTE4MzgzLCAxMTgzODgsIDExODM5MywgMTE4Mzk4LCAxMTg0MDQsIDExODQwOSwgCisgICAgMTE4NDE0LCAxMTg0MTksIDExODQyNCwgMTE4NDI5LCAxMTg0MzQsIDExODQzOSwgMTE4NDQzLCAxMTg0NDgsIDExODQ1MywgCisgICAgMTE4NDU4LCAxMTg0NjMsIDExODQ2OCwgMTE4NDczLCAxMTg0NzgsIDExODQ4MywgMTE4NDg4LCAxMTg0OTMsIDExODQ5OCwgCisgICAgMTE4NTAzLCAxMTg1MDgsIDExODUxMywgMTE4NTE4LCAxMTg1MjMsIDExODUyOCwgMTE4NTM0LCAxMTg1MzksIDExODU0NCwgCisgICAgMTE4NTQ5LCAxMTg1NTQsIDExODU1OSwgMTE4NTY0LCAxMTg1NjksIDExODU3NSwgMTE4NTgwLCAxMTg1ODUsIDExODU5MCwgCisgICAgMTE4NTk1LCAxMTg2MDAsIDExODYwNSwgMTE4NjEwLCAxMTg2MTUsIDExODYyMCwgMTE4NjI1LCAxMTg2MzAsIDExODYzNSwgCisgICAgMTE4NjQwLCAxMTg2NDUsIDExODY1MCwgMTE4NjU1LCAxMTg2NjAsIDExODY2NSwgMTE4NjcwLCAxMTg2NzUsIDExODY4MCwgCisgICAgMTE4Njg1LCAxMTg2OTAsIDExODY5NiwgMTE4NzAxLCAxMTg3MDYsIDExODcxMSwgMTE4NzE2LCAxMTg3MjEsIDExODcyNiwgCisgICAgMTE4NzMxLCAxMTg3MzUsIDExODc0MCwgMTE4NzQ1LCAxMTg3NTAsIDExODc1NSwgMTE4NzYwLCAxMTg3NjUsIDExODc3MCwgCisgICAgMTE4Nzc1LCAxMTg3ODAsIDExODc4NSwgMTE4NzkwLCAxMTg3OTUsIDExODgwMCwgMTE4ODA1LCAxMTg4MTAsIDExODgxNSwgCisgICAgMTE4ODIwLCAxMTg4MjYsIDExODgzMSwgMTE4ODM2LCAxMTg4NDEsIDExODg0NiwgMTE4ODUxLCAxMTg4NTYsIDExODg2MSwgCisgICAgMTE4ODY3LCAxMTg4NzIsIDExODg3NywgMTE4ODgyLCAxMTg4ODcsIDExODg5MiwgMTE4ODk3LCAxMTg5MDMsIDExODkwOSwgCisgICAgMTE4OTE1LCAxMTg5MjEsIDExODkyNywgMTE4OTMzLCAxMTg5MzksIDExODk0NSwgMTE4OTUxLCAxMTg5NTcsIDExODk2MywgCisgICAgMTE4OTY5LCAxMTg5NzUsIDExODk4MSwgMTE4OTg3LCAxMTg5OTMsIDExODk5OSwgMTE5MDA2LCAxMTkwMTIsIDExOTAxOCwgCisgICAgMTE5MDI0LCAxMTkwMzAsIDExOTAzNiwgMTE5MDQyLCAxMTkwNDgsIDExOTA1MywgMTE5MDU5LCAxMTkwNjUsIDExOTA3MSwgCisgICAgMTE5MDc3LCAxMTkwODMsIDExOTA4OSwgMTE5MDk1LCAxMTkxMDEsIDExOTEwNywgMTE5MTEzLCAxMTkxMTksIDExOTEyNSwgCisgICAgMTE5MTMxLCAxMTkxMzcsIDExOTE0MywgMTE5MTQ5LCAxMTkxNTUsIDExOTE2MiwgMTE5MTY4LCAxMTkxNzQsIDExOTE4MCwgCisgICAgMTE5MTg2LCAxMTkxOTIsIDExOTE5OCwgMTE5MjA0LCAxMTkyMTEsIDExOTIxNywgMTE5MjIzLCAxMTkyMjksIDExOTIzNSwgCisgICAgMTE5MjQxLCAxMTkyNDcsIDExOTI1MywgMTE5MjU5LCAxMTkyNjUsIDExOTI3MSwgMTE5Mjc3LCAxMTkyODMsIDExOTI4OSwgCisgICAgMTE5Mjk1LCAxMTkzMDEsIDExOTMwNywgMTE5MzEzLCAxMTkzMTksIDExOTMyNSwgMTE5MzMxLCAxMTkzMzcsIDExOTM0MywgCisgICAgMTE5MzQ5LCAxMTkzNTYsIDExOTM2MiwgMTE5MzY4LCAxMTkzNzQsIDExOTM4MCwgMTE5Mzg2LCAxMTkzOTIsIDExOTM5OCwgCisgICAgMTE5NDAzLCAxMTk0MDksIDExOTQxNSwgMTE5NDIxLCAxMTk0MjcsIDExOTQzMywgMTE5NDM5LCAxMTk0NDUsIDExOTQ1MSwgCisgICAgMTE5NDU3LCAxMTk0NjMsIDExOTQ2OSwgMTE5NDc1LCAxMTk0ODEsIDExOTQ4NywgMTE5NDkzLCAxMTk0OTksIDExOTUwNSwgCisgICAgMTE5NTEyLCAxMTk1MTgsIDExOTUyNCwgMTE5NTMwLCAxMTk1MzYsIDExOTU0MiwgMTE5NTQ4LCAxMTk1NTQsIDExOTU2MSwgCisgICAgMTE5NTY3LCAxMTk1NzMsIDExOTU3OSwgMTE5NTg1LCAxMTk1OTEsIDExOTU5NywgMTE5NjA0LCAxMTk2MTEsIDExOTYxOCwgCisgICAgMTE5NjI1LCAxMTk2MzIsIDExOTYzOSwgMTE5NjQ2LCAxMTk2NTMsIDExOTY2MCwgMTE5NjY3LCAxMTk2NzQsIDExOTY4MSwgCisgICAgMTE5Njg4LCAxMTk2OTUsIDExOTcwMiwgMTE5NzA5LCAxMTk3MTYsIDExOTcyNCwgMTE5NzMxLCAxMTk3MzgsIDExOTc0NSwgCisgICAgMTE5NzUyLCAxMTk3NTksIDExOTc2NiwgMTE5NzczLCAxMTk3NzksIDExOTc4NiwgMTE5NzkzLCAxMTk4MDAsIDExOTgwNywgCisgICAgMTE5ODE0LCAxMTk4MjEsIDExOTgyOCwgMTE5ODM1LCAxMTk4NDIsIDExOTg0OSwgMTE5ODU2LCAxMTk4NjMsIDExOTg3MCwgCisgICAgMTE5ODc3LCAxMTk4ODQsIDExOTg5MSwgMTE5ODk4LCAxMTk5MDYsIDExOTkxMywgMTE5OTIwLCAxMTk5MjcsIDExOTkzNCwgCisgICAgMTE5OTQxLCAxMTk5NDgsIDExOTk1NSwgMTE5OTYzLCAxMTk5NzAsIDExOTk3NywgMTE5OTg0LCAxMTk5OTEsIDExOTk5OCwgCisgICAgMTIwMDA1LCAxMjAwMTAsIDAsIDAsIDEyMDAxNSwgMTIwMDIwLCAxMjAwMjQsIDEyMDAyOCwgMTIwMDMyLCAxMjAwMzYsIAorICAgIDEyMDA0MCwgMTIwMDQ0LCAxMjAwNDgsIDEyMDA1MiwgMTIwMDU2LCAxMjAwNjEsIDEyMDA2NSwgMTIwMDY5LCAxMjAwNzMsIAorICAgIDEyMDA3NywgMTIwMDgxLCAxMjAwODUsIDEyMDA4OSwgMTIwMDkzLCAxMjAwOTcsIDEyMDEwMiwgMTIwMTA2LCAxMjAxMTAsIAorICAgIDEyMDExNCwgMTIwMTE4LCAxMjAxMjIsIDEyMDEyNiwgMTIwMTMwLCAxMjAxMzQsIDEyMDEzOCwgMTIwMTQ0LCAxMjAxNDksIAorICAgIDEyMDE1NCwgMTIwMTU5LCAxMjAxNjQsIDEyMDE2OSwgMTIwMTc0LCAxMjAxNzksIDEyMDE4NCwgMTIwMTg5LCAxMjAxOTUsIAorICAgIDEyMDIwMCwgMTIwMjA1LCAxMjAyMTAsIDEyMDIxNSwgMTIwMjIwLCAxMjAyMjUsIDEyMDIzMCwgMTIwMjM1LCAxMjAyNDAsIAorICAgIDEyMDI0NCwgMTIwMjQ4LCAxMjAyNTIsIDAsIDEyMDI1NiwgMTIwMjYwLCAxMjAyNjQsIDEyMDI2OCwgMTIwMjcyLCAKICAgICAxMjAyNzYsIDEyMDI4MCwgMTIwMjg0LCAxMjAyODgsIDEyMDI5MiwgMTIwMjk2LCAxMjAzMDAsIDEyMDMwNCwgMTIwMzA4LCAKLSAgICAxMjAzMTIsIDEyMDMxNiwgMTIwMzIwLCAxMjAzMjYsIDEyMDMzMiwgMTIwMzM4LCAwLCAxMjAzNDQsIDEyMDM0OSwgMCwgCi0gICAgMTIwMzU0LCAwLCAwLCAxMjAzNTksIDAsIDEyMDM2NCwgMTIwMzY5LCAxMjAzNzQsIDEyMDM3OSwgMTIwMzg0LCAxMjAzODksIAotICAgIDEyMDM5NCwgMTIwMzk5LCAxMjA0MDQsIDEyMDQwOSwgMCwgMTIwNDE0LCAxMjA0MTksIDEyMDQyNCwgMTIwNDI5LCAwLCAKLSAgICAxMjA0MzQsIDAsIDEyMDQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDQ0LCAwLCAwLCAwLCAwLCAxMjA0NTAsIDAsIAotICAgIDEyMDQ1NiwgMCwgMTIwNDYyLCAwLCAxMjA0NjgsIDEyMDQ3NCwgMTIwNDgwLCAwLCAxMjA0ODYsIDEyMDQ5MiwgMCwgCi0gICAgMTIwNDk4LCAwLCAwLCAxMjA1MDQsIDAsIDEyMDUxMCwgMCwgMTIwNTE2LCAwLCAxMjA1MjIsIDAsIDEyMDUzMCwgMCwgCi0gICAgMTIwNTM4LCAxMjA1NDQsIDAsIDEyMDU1MCwgMCwgMCwgMTIwNTU2LCAxMjA1NjIsIDEyMDU2OCwgMTIwNTc0LCAwLCAKLSAgICAxMjA1ODAsIDEyMDU4NiwgMTIwNTkyLCAxMjA1OTgsIDEyMDYwNCwgMTIwNjEwLCAxMjA2MTYsIDAsIDEyMDYyMiwgCi0gICAgMTIwNjI4LCAxMjA2MzQsIDEyMDY0MCwgMCwgMTIwNjQ2LCAxMjA2NTIsIDEyMDY1OCwgMTIwNjY0LCAwLCAxMjA2NzIsIDAsIAotICAgIDEyMDY4MCwgMTIwNjg2LCAxMjA2OTIsIDEyMDY5OCwgMTIwNzA0LCAxMjA3MTAsIDEyMDcxNiwgMTIwNzIyLCAxMjA3MjgsIAotICAgIDEyMDczNCwgMCwgMTIwNzQwLCAxMjA3NDYsIDEyMDc1MiwgMTIwNzU4LCAxMjA3NjQsIDEyMDc3MCwgMTIwNzc2LCAKLSAgICAxMjA3ODIsIDEyMDc4OCwgMTIwNzk0LCAxMjA4MDAsIDEyMDgwNiwgMTIwODEyLCAxMjA4MTgsIDEyMDgyNCwgMTIwODMwLCAKLSAgICAxMjA4MzYsIDAsIDAsIDAsIDAsIDAsIDEyMDg0MiwgMTIwODQ3LCAxMjA4NTIsIDAsIDEyMDg1NywgMTIwODYyLCAxMjA4NjcsIAotICAgIDEyMDg3MiwgMTIwODc3LCAwLCAxMjA4ODIsIDEyMDg4NywgMTIwODkyLCAxMjA4OTcsIDEyMDkwMiwgMTIwOTA3LCAKLSAgICAxMjA5MTIsIDEyMDkxNywgMTIwOTIyLCAxMjA5MjcsIDEyMDkzMiwgMTIwOTM3LCAxMjA5NDIsIDEyMDk0NywgMTIwOTUyLCAKLSAgICAxMjA5NTcsIDEyMDk2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwOTY3LCAxMjA5NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMDk4NSwgMTIwOTkyLCAxMjA5OTksIDEyMTAwNiwgMTIxMDEzLCAxMjEwMjAsIDEyMTAyNywgCi0gICAgMTIxMDMzLCAxMjEwNDAsIDEyMTA0NywgMTIxMDU0LCAxMjEwNjIsIDEyMTA3MCwgMTIxMDc4LCAxMjEwODYsIDEyMTA5NCwgCi0gICAgMTIxMTAyLCAxMjExMDksIDEyMTExNiwgMTIxMTIzLCAxMjExMzEsIDEyMTEzOSwgMTIxMTQ3LCAxMjExNTUsIDEyMTE2MywgCi0gICAgMTIxMTcxLCAxMjExNzgsIDEyMTE4NSwgMTIxMTkyLCAxMjEyMDAsIDEyMTIwOCwgMTIxMjE2LCAxMjEyMjQsIDEyMTIzMiwgCi0gICAgMTIxMjQwLCAxMjEyNDUsIDEyMTI1MCwgMTIxMjU1LCAxMjEyNjAsIDEyMTI2NSwgMTIxMjcwLCAxMjEyNzUsIDEyMTI4MCwgCi0gICAgMTIxMjg1LCAwLCAwLCAwLCAwLCAxMjEyOTAsIDEyMTI5NSwgMTIxMjk5LCAxMjEzMDMsIDEyMTMwNywgMTIxMzExLCAKLSAgICAxMjEzMTUsIDEyMTMxOSwgMTIxMzIzLCAxMjEzMjcsIDEyMTMzMSwgMTIxMzM1LCAxMjEzMzksIDEyMTM0MywgMTIxMzQ3LCAKLSAgICAxMjEzNTEsIDEyMTM1NSwgMTIxMzU5LCAxMjEzNjMsIDEyMTM2NywgMTIxMzcxLCAxMjEzNzUsIDEyMTM3OSwgMTIxMzgzLCAKLSAgICAxMjEzODcsIDEyMTM5MSwgMTIxMzk1LCAxMjEzOTksIDEyMTQwMywgMTIxNDA3LCAxMjE0MTEsIDEyMTQxNSwgMTIxNDE5LCAKLSAgICAxMjE0MjMsIDEyMTQyNywgMTIxNDMxLCAxMjE0MzUsIDEyMTQzOSwgMTIxNDQzLCAxMjE0NDcsIDEyMTQ1MSwgMTIxNDU1LCAKLSAgICAxMjE0NTksIDEyMTQ2MywgMTIxNDY3LCAxMjE0NzEsIDEyMTQ3NSwgMTIxNDc5LCAxMjE0ODMsIDEyMTQ4NywgMTIxNDkxLCAKLSAgICAxMjE0OTYsIDEyMTUwMCwgMTIxNTA0LCAxMjE1MDgsIDEyMTUxMiwgMTIxNTE2LCAxMjE1MjAsIDEyMTUyNCwgMTIxNTI4LCAKLSAgICAxMjE1MzIsIDEyMTUzNiwgMTIxNTQwLCAxMjE1NDQsIDEyMTU0OCwgMTIxNTUyLCAxMjE1NTYsIDEyMTU2MCwgMTIxNTY0LCAKLSAgICAxMjE1NjgsIDEyMTU3MiwgMTIxNTc2LCAxMjE1ODAsIDEyMTU4NCwgMTIxNTg4LCAxMjE1OTIsIDEyMTU5NiwgMTIxNjAwLCAKLSAgICAxMjE2MDQsIDEyMTYwOCwgMTIxNjEyLCAxMjE2MTYsIDEyMTYyMCwgMTIxNjI0LCAxMjE2MjgsIDEyMTYzMiwgMTIxNjM2LCAKLSAgICAxMjE2NDAsIDEyMTY0NCwgMTIxNjQ4LCAxMjE2NTIsIDEyMTY1NiwgMTIxNjYwLCAxMjE2NjQsIDEyMTY2OCwgMTIxNjcyLCAKLSAgICAxMjE2NzYsIDEyMTY4MCwgMTIxNjg0LCAxMjE2ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMTY5MiwgMTIxNjk4LCAxMjE3MDcsIDEyMTcxNSwgMTIxNzIzLCAxMjE3MzIsIDEyMTc0MSwgMTIxNzUwLCAxMjE3NTksIAotICAgIDEyMTc2OCwgMTIxNzc3LCAxMjE3ODYsIDEyMTc5NSwgMTIxODA0LCAxMjE4MTMsIDAsIDAsIDEyMTgyMiwgMTIxODMxLCAKLSAgICAxMjE4MzksIDEyMTg0NywgMTIxODU2LCAxMjE4NjUsIDEyMTg3NCwgMTIxODgzLCAxMjE4OTIsIDEyMTkwMSwgMTIxOTEwLCAKLSAgICAxMjE5MTksIDEyMTkyOCwgMTIxOTM3LCAwLCAwLCAxMjE5NDYsIDEyMTk1NSwgMTIxOTYzLCAxMjE5NzEsIDEyMTk4MCwgCi0gICAgMTIxOTg5LCAxMjE5OTgsIDEyMjAwNywgMTIyMDE2LCAxMjIwMjUsIDEyMjAzNCwgMTIyMDQzLCAxMjIwNTIsIDEyMjA2MSwgCi0gICAgMTIyMDcwLCAwLCAxMjIwNzcsIDEyMjA4NiwgMTIyMDk0LCAxMjIxMDIsIDEyMjExMSwgMTIyMTIwLCAxMjIxMjksIAotICAgIDEyMjEzOCwgMTIyMTQ3LCAxMjIxNTYsIDEyMjE2NSwgMTIyMTc0LCAxMjIxODMsIDEyMjE5MiwgMTIyMjAxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjIyMDgsIDEyMjIxNSwgMTIyMjIwLCAxMjIyMjQsIDEyMjIyOCwgMTIyMjMyLCAxMjIyMzcsIAotICAgIDEyMjI0MiwgMTIyMjQ3LCAxMjIyNTIsIDEyMjI1NywgMCwgMCwgMCwgMCwgMCwgMTIyMjYyLCAxMjIyNjcsIDEyMjI3MywgCi0gICAgMTIyMjc5LCAxMjIyODUsIDEyMjI5MCwgMTIyMjk2LCAxMjIzMDIsIDEyMjMwOCwgMTIyMzEzLCAxMjIzMTksIDEyMjMyNSwgCi0gICAgMTIyMzMwLCAxMjIzMzUsIDEyMjM0MSwgMTIyMzQ2LCAxMjIzNTIsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIDEyMjM3NSwgCi0gICAgMTIyMzgwLCAxMjIzODYsIDEyMjM5MiwgMTIyMzk4LCAxMjI0MDQsIDEyMjQxMCwgMTIyNDIxLCAxMjI0MjgsIDEyMjQzNCwgCi0gICAgMTIyNDM3LCAwLCAxMjI0NDAsIDEyMjQ0NSwgMTIyNDUxLCAxMjI0NTcsIDEyMjQ2MywgMTIyNDY4LCAxMjI0NzQsIAotICAgIDEyMjQ4MCwgMTIyNDg2LCAxMjI0OTEsIDEyMjQ5NywgMTIyNTAzLCAxMjI1MDgsIDEyMjUxMywgMTIyNTE5LCAxMjI1MjQsIAotICAgIDEyMjUzMCwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUzLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTcwLCAxMjI1NzYsIAotICAgIDEyMjU4MiwgMTIyNTg4LCAxMjI1OTEsIDEyMjU5NCwgMTIyNTk3LCAxMjI2MDAsIDEyMjYwMywgMTIyNjA2LCAxMjI2MTIsIAotICAgIDEyMjYxOSwgMTIyNjI2LCAxMjI2MzMsIDEyMjYzOSwgMTIyNjQ2LCAxMjI2NTMsIDEyMjY2MCwgMTIyNjY2LCAxMjI2NzMsIAotICAgIDEyMjY4MCwgMTIyNjg2LCAxMjI2OTIsIDEyMjY5OSwgMTIyNzA1LCAxMjI3MTIsIDEyMjcxOSwgMTIyNzI1LCAxMjI3MzIsIAotICAgIDEyMjczOSwgMTIyNzQ1LCAxMjI3NTIsIDEyMjc1OSwgMTIyNzY2LCAxMjI3NzMsIDEyMjc4MCwgMTIyNzg1LCAwLCAwLCAwLCAKLSAgICAwLCAxMjI3OTAsIDEyMjc5NiwgMTIyODAzLCAxMjI4MTAsIDEyMjgxNywgMTIyODIzLCAxMjI4MzAsIDEyMjgzNywgCi0gICAgMTIyODQ0LCAxMjI4NTAsIDEyMjg1NywgMTIyODY0LCAxMjI4NzAsIDEyMjg3NiwgMTIyODgzLCAxMjI4ODksIDEyMjg5NiwgCi0gICAgMTIyOTAzLCAxMjI5MDksIDEyMjkxNiwgMTIyOTIzLCAxMjI5MjksIDEyMjkzNiwgMTIyOTQzLCAxMjI5NTAsIDEyMjk1NywgCi0gICAgMTIyOTY0LCAxMjI5NzMsIDEyMjk3NywgMTIyOTgwLCAxMjI5ODMsIDEyMjk4NywgMTIyOTkxLCAxMjI5OTQsIDEyMjk5NywgCi0gICAgMTIzMDAwLCAxMjMwMDMsIDEyMzAwNiwgMTIzMDA5LCAxMjMwMTIsIDEyMzAxNSwgMTIzMDE4LCAxMjMwMjQsIDAsIDAsIDAsIAorICAgIDEyMDMxMiwgMTIwMzE2LCAxMjAzMjAsIDEyMDMyNCwgMTIwMzI4LCAxMjAzMzIsIDEyMDMzNiwgMTIwMzQwLCAxMjAzNDQsIAorICAgIDEyMDM0OCwgMTIwMzU0LCAxMjAzNjAsIDEyMDM2NiwgMCwgMTIwMzcyLCAxMjAzNzcsIDAsIDEyMDM4MiwgMCwgMCwgCisgICAgMTIwMzg3LCAwLCAxMjAzOTIsIDEyMDM5NywgMTIwNDAyLCAxMjA0MDcsIDEyMDQxMiwgMTIwNDE3LCAxMjA0MjIsIAorICAgIDEyMDQyNywgMTIwNDMyLCAxMjA0MzcsIDAsIDEyMDQ0MiwgMTIwNDQ3LCAxMjA0NTIsIDEyMDQ1NywgMCwgMTIwNDYyLCAwLCAKKyAgICAxMjA0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ3MiwgMCwgMCwgMCwgMCwgMTIwNDc4LCAwLCAxMjA0ODQsIDAsIAorICAgIDEyMDQ5MCwgMCwgMTIwNDk2LCAxMjA1MDIsIDEyMDUwOCwgMCwgMTIwNTE0LCAxMjA1MjAsIDAsIDEyMDUyNiwgMCwgMCwgCisgICAgMTIwNTMyLCAwLCAxMjA1MzgsIDAsIDEyMDU0NCwgMCwgMTIwNTUwLCAwLCAxMjA1NTgsIDAsIDEyMDU2NiwgMTIwNTcyLCAwLCAKKyAgICAxMjA1NzgsIDAsIDAsIDEyMDU4NCwgMTIwNTkwLCAxMjA1OTYsIDEyMDYwMiwgMCwgMTIwNjA4LCAxMjA2MTQsIDEyMDYyMCwgCisgICAgMTIwNjI2LCAxMjA2MzIsIDEyMDYzOCwgMTIwNjQ0LCAwLCAxMjA2NTAsIDEyMDY1NiwgMTIwNjYyLCAxMjA2NjgsIDAsIAorICAgIDEyMDY3NCwgMTIwNjgwLCAxMjA2ODYsIDEyMDY5MiwgMCwgMTIwNzAwLCAwLCAxMjA3MDgsIDEyMDcxNCwgMTIwNzIwLCAKKyAgICAxMjA3MjYsIDEyMDczMiwgMTIwNzM4LCAxMjA3NDQsIDEyMDc1MCwgMTIwNzU2LCAxMjA3NjIsIDAsIDEyMDc2OCwgCisgICAgMTIwNzc0LCAxMjA3ODAsIDEyMDc4NiwgMTIwNzkyLCAxMjA3OTgsIDEyMDgwNCwgMTIwODEwLCAxMjA4MTYsIDEyMDgyMiwgCisgICAgMTIwODI4LCAxMjA4MzQsIDEyMDg0MCwgMTIwODQ2LCAxMjA4NTIsIDEyMDg1OCwgMTIwODY0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA4NzAsIDEyMDg3NSwgMTIwODgwLCAwLCAxMjA4ODUsIDEyMDg5MCwgMTIwODk1LCAxMjA5MDAsIDEyMDkwNSwgMCwgCisgICAgMTIwOTEwLCAxMjA5MTUsIDEyMDkyMCwgMTIwOTI1LCAxMjA5MzAsIDEyMDkzNSwgMTIwOTQwLCAxMjA5NDUsIDEyMDk1MCwgCisgICAgMTIwOTU1LCAxMjA5NjAsIDEyMDk2NSwgMTIwOTcwLCAxMjA5NzUsIDEyMDk4MCwgMTIwOTg1LCAxMjA5OTAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEyMDk5NSwgMTIxMDA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjEwMTMsIAorICAgIDEyMTAyMCwgMTIxMDI3LCAxMjEwMzQsIDEyMTA0MSwgMTIxMDQ4LCAxMjEwNTUsIDEyMTA2MSwgMTIxMDY4LCAxMjEwNzUsIAorICAgIDEyMTA4MiwgMTIxMDkwLCAxMjEwOTgsIDEyMTEwNiwgMTIxMTE0LCAxMjExMjIsIDEyMTEzMCwgMTIxMTM3LCAxMjExNDQsIAorICAgIDEyMTE1MSwgMTIxMTU5LCAxMjExNjcsIDEyMTE3NSwgMTIxMTgzLCAxMjExOTEsIDEyMTE5OSwgMTIxMjA2LCAxMjEyMTMsIAorICAgIDEyMTIyMCwgMTIxMjI4LCAxMjEyMzYsIDEyMTI0NCwgMTIxMjUyLCAxMjEyNjAsIDEyMTI2OCwgMTIxMjczLCAxMjEyNzgsIAorICAgIDEyMTI4MywgMTIxMjg4LCAxMjEyOTMsIDEyMTI5OCwgMTIxMzAzLCAxMjEzMDgsIDEyMTMxMywgMCwgMCwgMCwgMCwgCisgICAgMTIxMzE4LCAxMjEzMjMsIDEyMTMyNywgMTIxMzMxLCAxMjEzMzUsIDEyMTMzOSwgMTIxMzQzLCAxMjEzNDcsIDEyMTM1MSwgCisgICAgMTIxMzU1LCAxMjEzNTksIDEyMTM2MywgMTIxMzY3LCAxMjEzNzEsIDEyMTM3NSwgMTIxMzc5LCAxMjEzODMsIDEyMTM4NywgCisgICAgMTIxMzkxLCAxMjEzOTUsIDEyMTM5OSwgMTIxNDAzLCAxMjE0MDcsIDEyMTQxMSwgMTIxNDE1LCAxMjE0MTksIDEyMTQyMywgCisgICAgMTIxNDI3LCAxMjE0MzEsIDEyMTQzNSwgMTIxNDM5LCAxMjE0NDMsIDEyMTQ0NywgMTIxNDUxLCAxMjE0NTUsIDEyMTQ1OSwgCisgICAgMTIxNDYzLCAxMjE0NjcsIDEyMTQ3MSwgMTIxNDc1LCAxMjE0NzksIDEyMTQ4MywgMTIxNDg3LCAxMjE0OTEsIDEyMTQ5NSwgCisgICAgMTIxNDk5LCAxMjE1MDMsIDEyMTUwNywgMTIxNTExLCAxMjE1MTUsIDEyMTUxOSwgMTIxNTI0LCAxMjE1MjgsIDEyMTUzMiwgCisgICAgMTIxNTM2LCAxMjE1NDAsIDEyMTU0NCwgMTIxNTQ4LCAxMjE1NTIsIDEyMTU1NiwgMTIxNTYwLCAxMjE1NjQsIDEyMTU2OCwgCisgICAgMTIxNTcyLCAxMjE1NzYsIDEyMTU4MCwgMTIxNTg0LCAxMjE1ODgsIDEyMTU5MiwgMTIxNTk2LCAxMjE2MDAsIDEyMTYwNCwgCisgICAgMTIxNjA4LCAxMjE2MTIsIDEyMTYxNiwgMTIxNjIwLCAxMjE2MjQsIDEyMTYyOCwgMTIxNjMyLCAxMjE2MzYsIDEyMTY0MCwgCisgICAgMTIxNjQ0LCAxMjE2NDgsIDEyMTY1MiwgMTIxNjU2LCAxMjE2NjAsIDEyMTY2NCwgMTIxNjY4LCAxMjE2NzIsIDEyMTY3NiwgCisgICAgMTIxNjgwLCAxMjE2ODQsIDEyMTY4OCwgMTIxNjkyLCAxMjE2OTYsIDEyMTcwMCwgMTIxNzA0LCAxMjE3MDgsIDEyMTcxMiwgCisgICAgMTIxNzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE3MjAsIDEyMTcyNiwgMTIxNzM1LCAKKyAgICAxMjE3NDMsIDEyMTc1MSwgMTIxNzYwLCAxMjE3NjksIDEyMTc3OCwgMTIxNzg3LCAxMjE3OTYsIDEyMTgwNSwgMTIxODE0LCAKKyAgICAxMjE4MjMsIDEyMTgzMiwgMTIxODQxLCAwLCAwLCAxMjE4NTAsIDEyMTg1OSwgMTIxODY3LCAxMjE4NzUsIDEyMTg4NCwgCisgICAgMTIxODkzLCAxMjE5MDIsIDEyMTkxMSwgMTIxOTIwLCAxMjE5MjksIDEyMTkzOCwgMTIxOTQ3LCAxMjE5NTYsIDEyMTk2NSwgCisgICAgMCwgMCwgMTIxOTc0LCAxMjE5ODMsIDEyMTk5MSwgMTIxOTk5LCAxMjIwMDgsIDEyMjAxNywgMTIyMDI2LCAxMjIwMzUsIAorICAgIDEyMjA0NCwgMTIyMDUzLCAxMjIwNjIsIDEyMjA3MSwgMTIyMDgwLCAxMjIwODksIDEyMjA5OCwgMCwgMTIyMTA1LCAKKyAgICAxMjIxMTQsIDEyMjEyMiwgMTIyMTMwLCAxMjIxMzksIDEyMjE0OCwgMTIyMTU3LCAxMjIxNjYsIDEyMjE3NSwgMTIyMTg0LCAKKyAgICAxMjIxOTMsIDEyMjIwMiwgMTIyMjExLCAxMjIyMjAsIDEyMjIyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyMjM2LCAKKyAgICAxMjIyNDMsIDEyMjI0OCwgMTIyMjUyLCAxMjIyNTYsIDEyMjI2MCwgMTIyMjY1LCAxMjIyNzAsIDEyMjI3NSwgMTIyMjgwLCAKKyAgICAxMjIyODUsIDAsIDAsIDAsIDAsIDAsIDEyMjI5MCwgMTIyMjk1LCAxMjIzMDEsIDEyMjMwNywgMTIyMzEzLCAxMjIzMTgsIAorICAgIDEyMjMyNCwgMTIyMzMwLCAxMjIzMzYsIDEyMjM0MSwgMTIyMzQ3LCAxMjIzNTMsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIAorICAgIDEyMjM3NCwgMTIyMzgwLCAxMjIzODYsIDEyMjM5MSwgMTIyMzk3LCAxMjI0MDMsIDEyMjQwOCwgMTIyNDE0LCAxMjI0MjAsIAorICAgIDEyMjQyNiwgMTIyNDMyLCAxMjI0MzgsIDEyMjQ0OSwgMTIyNDU2LCAxMjI0NjIsIDEyMjQ2NSwgMCwgMTIyNDY4LCAKKyAgICAxMjI0NzMsIDEyMjQ3OSwgMTIyNDg1LCAxMjI0OTEsIDEyMjQ5NiwgMTIyNTAyLCAxMjI1MDgsIDEyMjUxNCwgMTIyNTE5LCAKKyAgICAxMjI1MjUsIDEyMjUzMSwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUyLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTY5LCAKKyAgICAxMjI1NzUsIDEyMjU4MSwgMTIyNTg2LCAxMjI1OTIsIDEyMjU5OCwgMTIyNjA0LCAxMjI2MTAsIDEyMjYxNiwgMTIyNjE5LCAKKyAgICAxMjI2MjIsIDEyMjYyNSwgMTIyNjI4LCAxMjI2MzEsIDEyMjYzNCwgMTIyNjQwLCAxMjI2NDcsIDEyMjY1NCwgMTIyNjYxLCAKKyAgICAxMjI2NjcsIDEyMjY3NCwgMTIyNjgxLCAxMjI2ODgsIDEyMjY5NCwgMTIyNzAxLCAxMjI3MDgsIDEyMjcxNCwgMTIyNzIwLCAKKyAgICAxMjI3MjcsIDEyMjczMywgMTIyNzQwLCAxMjI3NDcsIDEyMjc1MywgMTIyNzYwLCAxMjI3NjcsIDEyMjc3MywgMTIyNzgwLCAKKyAgICAxMjI3ODcsIDEyMjc5NCwgMTIyODAxLCAxMjI4MDgsIDEyMjgxMywgMCwgMCwgMCwgMCwgMTIyODE4LCAxMjI4MjQsIAorICAgIDEyMjgzMSwgMTIyODM4LCAxMjI4NDUsIDEyMjg1MSwgMTIyODU4LCAxMjI4NjUsIDEyMjg3MiwgMTIyODc4LCAxMjI4ODUsIAorICAgIDEyMjg5MiwgMTIyODk4LCAxMjI5MDQsIDEyMjkxMSwgMTIyOTE3LCAxMjI5MjQsIDEyMjkzMSwgMTIyOTM3LCAxMjI5NDQsIAorICAgIDEyMjk1MSwgMTIyOTU3LCAxMjI5NjQsIDEyMjk3MSwgMTIyOTc4LCAxMjI5ODUsIDEyMjk5MiwgMTIzMDAxLCAxMjMwMDUsIAorICAgIDEyMzAwOCwgMTIzMDExLCAxMjMwMTUsIDEyMzAxOSwgMTIzMDIyLCAxMjMwMjUsIDEyMzAyOCwgMTIzMDMxLCAxMjMwMzQsIAorICAgIDEyMzAzNywgMTIzMDQwLCAxMjMwNDMsIDEyMzA0NiwgMTIzMDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjMwMjcsIDEyMzAzNCwgMTIzMDQyLCAxMjMwNTAsIDEyMzA1OCwgMTIzMDY1LCAxMjMwNzMsIDEyMzA4MSwgMTIzMDg5LCAKLSAgICAxMjMwOTYsIDEyMzEwNCwgMTIzMTEyLCAxMjMxMTksIDEyMzEyNiwgMTIzMTM0LCAxMjMxNDEsIDEyMzE0OSwgMTIzMTU3LCAKLSAgICAxMjMxNjQsIDEyMzE3MiwgMTIzMTgwLCAxMjMxODcsIDEyMzE5NSwgMTIzMjAzLCAxMjMyMTEsIDEyMzIxOSwgMTIzMjI3LCAKLSAgICAxMjMyMzEsIDEyMzIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMjM4LCAxMjMyNDQsIAotICAgIDEyMzI1MCwgMTIzMjU2LCAxMjMyNjAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjkwLCAxMjMyOTYsIAotICAgIDEyMzMwMiwgMTIzMzA4LCAxMjMzMTQsIDEyMzMyMCwgMTIzMzI2LCAxMjMzMzIsIDEyMzMzOCwgMTIzMzQ0LCAxMjMzNTAsIAotICAgIDEyMzM1NiwgMTIzMzYyLCAxMjMzNjgsIDEyMzM3NCwgMTIzMzgwLCAxMjMzODYsIDEyMzM5MiwgMTIzMzk4LCAxMjM0MDQsIAotICAgIDEyMzQxMCwgMTIzNDE2LCAxMjM0MjIsIDEyMzQyOCwgMTIzNDM0LCAxMjM0NDAsIDEyMzQ0NiwgMTIzNDUyLCAxMjM0NTgsIAotICAgIDEyMzQ2NCwgMTIzNDcwLCAxMjM0NzYsIDEyMzQ4MiwgMTIzNDg4LCAwLCAwLCAwLCAwLCAwLCAxMjM0OTQsIDEyMzUwNSwgCi0gICAgMTIzNTE2LCAxMjM1MjcsIDEyMzUzOCwgMTIzNTQ5LCAxMjM1NjAsIDEyMzU3MSwgMTIzNTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjM1OTMsIDEyMzU5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTIzNjAxLCAxMjM2MDMsIDEyMzYwNSwgMTIzNjA5LCAxMjM2MTQsIDEyMzYxOSwgMTIzNjIxLCAKLSAgICAxMjM2MjcsIDEyMzYzMiwgMTIzNjM0LCAxMjM2NDAsIDEyMzY0NCwgMTIzNjQ2LCAxMjM2NTAsIDEyMzY1NiwgMTIzNjYyLCAKLSAgICAxMjM2NjgsIDEyMzY3MywgMTIzNjc3LCAxMjM2ODQsIDEyMzY5MSwgMTIzNjk4LCAxMjM3MDMsIDEyMzcxMCwgMTIzNzE3LCAKLSAgICAxMjM3MjQsIDEyMzcyOCwgMTIzNzM0LCAxMjM3NDMsIDEyMzc1MiwgMTIzNzU5LCAxMjM3NjQsIDEyMzc2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNzcyLCAxMjM3NzQsIDEyMzc3NiwgMTIzNzgwLCAKLSAgICAxMjM3ODQsIDEyMzc4OCwgMCwgMTIzNzkwLCAxMjM3OTIsIDEyMzc5NiwgMTIzNzk4LCAxMjM4MDAsIDEyMzgwMiwgCi0gICAgMTIzODA0LCAxMjM4MDksIDEyMzgxNCwgMTIzODE2LCAxMjM4MjIsIDEyMzgyNiwgMTIzODMwLCAxMjM4MzgsIDEyMzg0MCwgCi0gICAgMTIzODQyLCAxMjM4NDQsIDEyMzg0NiwgMTIzODQ4LCAxMjM4NTAsIDEyMzg1MiwgMTIzODU0LCAxMjM4NTYsIDEyMzg1OCwgCi0gICAgMTIzODYyLCAxMjM4NjYsIDEyMzg2OCwgMTIzODcwLCAxMjM4NzIsIDEyMzg3NCwgMTIzODc2LCAxMjM4ODEsIDEyMzg4NywgCi0gICAgMTIzODkxLCAxMjM4OTUsIDEyMzg5OSwgMTIzOTAzLCAxMjM5MDgsIDEyMzkxMiwgMTIzOTE0LCAxMjM5MTYsIDEyMzkyMCwgCi0gICAgMTIzOTI2LCAxMjM5MjgsIDEyMzkzMCwgMTIzOTMyLCAxMjM5MzYsIDEyMzk0NSwgMTIzOTUxLCAxMjM5NTUsIDEyMzk1OSwgCi0gICAgMTIzOTYxLCAxMjM5NjMsIDEyMzk2NiwgMTIzOTY4LCAxMjM5NzAsIDEyMzk3MiwgMTIzOTc2LCAxMjM5NzgsIDEyMzk4MiwgCi0gICAgMTIzOTg3LCAxMjM5ODksIDEyMzk5NCwgMTI0MDAwLCAxMjQwMDcsIDEyNDAxMSwgMTI0MDE1LCAxMjQwMTksIDEyNDAyMywgCi0gICAgMTI0MDI5LCAwLCAwLCAwLCAxMjQwMzMsIDEyNDAzNSwgMTI0MDM5LCAxMjQwNDMsIDEyNDA0NSwgMTI0MDQ5LCAxMjQwNTMsIAotICAgIDEyNDA1NSwgMTI0MDU5LCAxMjQwNjEsIDEyNDA2NSwgMTI0MDY5LCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODUsIAotICAgIDEyNDA4OSwgMTI0MDkzLCAxMjQwOTksIDEyNDEwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0MTA3LCAxMjQxMTEsIDEyNDExNSwgMTI0MTE5LCAxMjQxMjYsIDEyNDEyOCwgMTI0MTMyLCAxMjQxMzQsIDEyNDEzNiwgCi0gICAgMTI0MTQwLCAxMjQxNDQsIDEyNDE0OCwgMTI0MTUwLCAxMjQxNTQsIDEyNDE1OCwgMTI0MTYyLCAxMjQxNjYsIDEyNDE3MCwgCi0gICAgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgMTI0MTg0LCAxMjQxODcsIDEyNDE5MiwgMTI0MTk0LCAxMjQxOTYsIDEyNDE5OSwgCi0gICAgMTI0MjAxLCAxMjQyMDMsIDEyNDIwNiwgMTI0MjEzLCAxMjQyMjAsIDEyNDIyNywgMTI0MjMyLCAxMjQyMzYsIDEyNDIzOCwgCi0gICAgMTI0MjQwLCAwLCAxMjQyNDIsIDEyNDI0NCwgMTI0MjQ4LCAxMjQyNTIsIDEyNDI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MjU4LCAxMjQyNjIsIDEyNDI2NywgMTI0MjcxLCAKLSAgICAxMjQyNzcsIDEyNDI4MywgMTI0Mjg1LCAxMjQyODcsIDEyNDI5MywgMTI0Mjk1LCAxMjQyOTksIDEyNDMwMywgMTI0MzA1LCAKLSAgICAxMjQzMDksIDEyNDMxMSwgMTI0MzE1LCAxMjQzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNDMyMywgMTI0MzI1LCAxMjQzMjcsIDEyNDMyOSwgMTI0MzMzLCAxMjQzMzUsIDEyNDMzNywgMTI0MzM5LCAKLSAgICAxMjQzNDEsIDEyNDM0MywgMTI0MzQ1LCAxMjQzNDcsIDEyNDM0OSwgMTI0MzUxLCAxMjQzNTMsIDEyNDM1NSwgMTI0MzU3LCAKLSAgICAxMjQzNTksIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgMTI0Mzc1LCAKLSAgICAxMjQzNzcsIDEyNDM4MSwgMTI0MzgzLCAxMjQzODUsIDEyNDM4NywgMTI0MzkxLCAxMjQzOTMsIDEyNDM5NywgMTI0Mzk5LCAKLSAgICAxMjQ0MDEsIDEyNDQwNSwgMTI0NDA5LCAxMjQ0MTUsIDEyNDQxNywgMTI0NDE5LCAxMjQ0MjEsIDEyNDQyMywgMTI0NDI3LCAKLSAgICAxMjQ0MzEsIDEyNDQzMywgMTI0NDM3LCAxMjQ0NDEsIDEyNDQ0NSwgMTI0NDQ5LCAxMjQ0NTMsIDEyNDQ1NywgMTI0NDYxLCAKLSAgICAxMjQ0NjUsIDEyNDQ2OSwgMTI0NDczLCAxMjQ0NzcsIDEyNDQ4MSwgMTI0NDg1LCAxMjQ0ODksIDEyNDQ5MywgMTI0NDk3LCAKLSAgICAxMjQ1MDEsIDAsIDEyNDUwNSwgMCwgMTI0NTA3LCAxMjQ1MDksIDEyNDUxMSwgMTI0NTEzLCAxMjQ1MTUsIDEyNDUyMywgCi0gICAgMTI0NTMxLCAxMjQ1MzksIDEyNDU0NywgMTI0NTUyLCAxMjQ1NTcsIDEyNDU2MiwgMTI0NTY2LCAxMjQ1NzAsIDEyNDU3NSwgCi0gICAgMTI0NTc5LCAxMjQ1ODEsIDEyNDU4NSwgMTI0NTg3LCAxMjQ1ODksIDEyNDU5MSwgMTI0NTkzLCAxMjQ1OTUsIDEyNDU5NywgCi0gICAgMTI0NTk5LCAxMjQ2MDMsIDEyNDYwNSwgMTI0NjA3LCAxMjQ2MDksIDEyNDYxMywgMTI0NjE3LCAxMjQ2MjEsIDEyNDYyNSwgCi0gICAgMTI0NjI5LCAxMjQ2MzEsIDEyNDYzNywgMTI0NjQzLCAxMjQ2NDUsIDEyNDY0NywgMTI0NjQ5LCAxMjQ2NTEsIDEyNDY1MywgCi0gICAgMTI0NjYyLCAxMjQ2NjksIDEyNDY3NiwgMTI0NjgwLCAxMjQ2ODcsIDEyNDY5MiwgMTI0Njk5LCAxMjQ3MDgsIDEyNDcxMywgCi0gICAgMTI0NzE3LCAxMjQ3MjEsIDEyNDcyMywgMTI0NzI3LCAxMjQ3MjksIDEyNDczMywgMTI0NzM3LCAxMjQ3MzksIDEyNDc0MywgCi0gICAgMTI0NzQ3LCAxMjQ3NTEsIDEyNDc1MywgMTI0NzU1LCAxMjQ3NjEsIDEyNDc2MywgMTI0NzY1LCAxMjQ3NjcsIDEyNDc3MSwgCi0gICAgMTI0Nzc1LCAxMjQ3NzcsIDEyNDc4MSwgMTI0NzgzLCAxMjQ3ODUsIDEyNDc4OCwgMTI0NzkyLCAxMjQ3OTQsIDEyNDc5OCwgCi0gICAgMTI0ODAwLCAxMjQ4MDIsIDEyNDgwNywgMTI0ODA5LCAxMjQ4MTMsIDEyNDgxNywgMTI0ODIwLCAxMjQ4MjQsIDEyNDgyOCwgCi0gICAgMTI0ODMyLCAxMjQ4MzYsIDEyNDg0MCwgMTI0ODQ0LCAxMjQ4NDgsIDEyNDg1MywgMTI0ODU3LCAxMjQ4NjEsIDEyNDg3MCwgCi0gICAgMTI0ODc1LCAxMjQ4NzgsIDEyNDg4MCwgMTI0ODgzLCAxMjQ4ODYsIDEyNDg5MSwgMTI0ODkzLCAxMjQ4OTYsIDEyNDkwMSwgCi0gICAgMTI0OTA1LCAxMjQ5MDgsIDEyNDkxMiwgMTI0OTE2LCAxMjQ5MTksIDEyNDkyNCwgMTI0OTI4LCAxMjQ5MzIsIDEyNDkzNiwgCi0gICAgMTI0OTQwLCAxMjQ5NDYsIDEyNDk1MiwgMTI0OTU4LCAxMjQ5NjQsIDEyNDk2OSwgMTI0OTgwLCAxMjQ5ODIsIDEyNDk4NiwgCi0gICAgMTI0OTg4LCAxMjQ5OTAsIDEyNDk5NCwgMTI0OTk4LCAxMjUwMDAsIDEyNTAwNCwgMTI1MDA5LCAxMjUwMTQsIDEyNTAyMCwgCi0gICAgMTI1MDIyLCAxMjUwMjYsIDEyNTAzMCwgMTI1MDM3LCAxMjUwNDQsIDEyNTA0OCwgMTI1MDUwLCAxMjUwNTIsIDEyNTA1NiwgCi0gICAgMTI1MDU4LCAxMjUwNjIsIDEyNTA2NiwgMTI1MDcwLCAxMjUwNzIsIDEyNTA3NCwgMTI1MDgxLCAxMjUwODUsIDEyNTA4OCwgCi0gICAgMTI1MDkyLCAxMjUwOTYsIDEyNTEwMCwgMTI1MTAyLCAxMjUxMDYsIDEyNTEwOCwgMTI1MTEwLCAxMjUxMTQsIDEyNTExNiwgCi0gICAgMTI1MTIwLCAxMjUxMjQsIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzgsIDEyNTE0MiwgMTI1MTQ0LCAxMjUxNDcsIDEyNTE1MSwgCi0gICAgMTI1MTU4LCAxMjUxNjcsIDEyNTE3NiwgMTI1MTg0LCAxMjUxOTIsIDEyNTE5NCwgMTI1MTk4LCAxMjUyMDAsIDEyNTIwNCwgCi0gICAgMTI1MjE1LCAxMjUyMTksIDEyNTIyNSwgMTI1MjMxLCAxMjUyMzYsIDAsIDEyNTIzOCwgMTI1MjQyLCAxMjUyNDQsIAotICAgIDEyNTI0NiwgMCwgMCwgMCwgMTI1MjQ4LCAxMjUyNTMsIDEyNTI2MywgMTI1Mjc4LCAxMjUyOTAsIDEyNTMwMiwgMTI1MzA2LCAKLSAgICAxMjUzMTAsIDEyNTMxNiwgMTI1MzE4LCAxMjUzMjYsIDEyNTMzNCwgMTI1MzM2LCAxMjUzNDAsIDEyNTM0NiwgMTI1MzUyLCAKLSAgICAxMjUzNTksIDEyNTM2NiwgMTI1MzY4LCAxMjUzNzAsIDEyNTM3MywgMTI1Mzc1LCAxMjUzODEsIDEyNTM4MywgMTI1Mzg2LCAKLSAgICAxMjUzOTAsIDEyNTM5NiwgMTI1NDAyLCAxMjU0MTMsIDEyNTQxOSwgMTI1NDI2LCAxMjU0MzQsIDEyNTQzOCwgMTI1NDQ2LCAKLSAgICAxMjU0NTQsIDEyNTQ2MCwgMTI1NDY2LCAxMjU0NzMsIDEyNTQ3NSwgMTI1NDc5LCAxMjU0ODEsIDEyNTQ4MywgMTI1NDg4LCAKLSAgICAxMjU0OTAsIDEyNTQ5MiwgMTI1NDk0LCAxMjU0OTYsIDEyNTUwMCwgMTI1NTExLCAxMjU1MTcsIDEyNTUyMSwgMTI1NTI1LCAKLSAgICAxMjU1MjksIDEyNTUzNSwgMTI1NTQxLCAxMjU1NDcsIDEyNTU1MywgMTI1NTU4LCAxMjU1NjMsIDEyNTU2OSwgMTI1NTc1LCAKLSAgICAxMjU1ODIsIDAsIDAsIDEyNTU4OSwgMTI1NTk0LCAxMjU2MDIsIDEyNTYwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI1NjE1LCAxMjU2MjIsIDEyNTYyOSwgMTI1NjM2LCAxMjU2NDQsIDEyNTY1MiwgMTI1NjYwLCAxMjU2NjgsIAotICAgIDEyNTY3NiwgMTI1Njg0LCAxMjU2OTIsIDEyNTcwMCwgMTI1NzA4LCAxMjU3MTQsIDEyNTcyMCwgMTI1NzI2LCAxMjU3MzIsIAotICAgIDEyNTczOCwgMTI1NzQ0LCAxMjU3NTAsIDEyNTc1NiwgMTI1NzYyLCAxMjU3NjgsIDEyNTc3NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMDU1LCAxMjMwNjIsIDEyMzA3MCwgCisgICAgMTIzMDc4LCAxMjMwODYsIDEyMzA5MywgMTIzMTAxLCAxMjMxMDksIDEyMzExNywgMTIzMTI0LCAxMjMxMzIsIDEyMzE0MCwgCisgICAgMTIzMTQ3LCAxMjMxNTQsIDEyMzE2MiwgMTIzMTY5LCAxMjMxNzcsIDEyMzE4NSwgMTIzMTkyLCAxMjMyMDAsIDEyMzIwOCwgCisgICAgMTIzMjE1LCAxMjMyMjMsIDEyMzIzMSwgMTIzMjM5LCAxMjMyNDcsIDEyMzI1NSwgMTIzMjU5LCAxMjMyNjMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjg4LCAKKyAgICAxMjMyOTQsIDEyMzMwMCwgMTIzMzA2LCAxMjMzMTIsIDEyMzMxOCwgMTIzMzI0LCAxMjMzMzAsIDEyMzMzNiwgMTIzMzQyLCAKKyAgICAxMjMzNDgsIDEyMzM1NCwgMTIzMzYwLCAxMjMzNjYsIDEyMzM3MiwgMTIzMzc4LCAxMjMzODQsIDEyMzM5MCwgMTIzMzk2LCAKKyAgICAxMjM0MDIsIDEyMzQwOCwgMTIzNDE0LCAxMjM0MjAsIDEyMzQyNiwgMTIzNDMyLCAxMjM0MzgsIDEyMzQ0NCwgMTIzNDUwLCAKKyAgICAxMjM0NTYsIDEyMzQ2MiwgMTIzNDY4LCAxMjM0NzQsIDEyMzQ4MCwgMTIzNDg2LCAxMjM0OTIsIDEyMzQ5OCwgMTIzNTA0LCAKKyAgICAxMjM1MTAsIDEyMzUxNiwgMCwgMCwgMCwgMCwgMCwgMTIzNTIyLCAxMjM1MzMsIDEyMzU0NCwgMTIzNTU1LCAxMjM1NjYsIAorICAgIDEyMzU3NywgMTIzNTg4LCAxMjM1OTksIDEyMzYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNjIxLCAxMjM2MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzYyOSwgCisgICAgMTIzNjMxLCAxMjM2MzMsIDEyMzYzNywgMTIzNjQyLCAxMjM2NDcsIDEyMzY0OSwgMTIzNjU1LCAxMjM2NjAsIDEyMzY2MiwgCisgICAgMTIzNjY4LCAxMjM2NzIsIDEyMzY3NCwgMTIzNjc4LCAxMjM2ODQsIDEyMzY5MCwgMTIzNjk2LCAxMjM3MDEsIDEyMzcwNSwgCisgICAgMTIzNzEyLCAxMjM3MTksIDEyMzcyNiwgMTIzNzMxLCAxMjM3MzgsIDEyMzc0NSwgMTIzNzUyLCAxMjM3NTYsIDEyMzc2MiwgCisgICAgMTIzNzcxLCAxMjM3ODAsIDEyMzc4NywgMTIzNzkyLCAxMjM3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEyMzgwMCwgMTIzODAyLCAxMjM4MDQsIDEyMzgwOCwgMTIzODEyLCAxMjM4MTYsIDAsIDEyMzgxOCwgCisgICAgMTIzODIwLCAxMjM4MjQsIDEyMzgyNiwgMTIzODI4LCAxMjM4MzAsIDEyMzgzMiwgMTIzODM3LCAxMjM4NDIsIDEyMzg0NCwgCisgICAgMTIzODUwLCAxMjM4NTQsIDEyMzg1OCwgMTIzODY2LCAxMjM4NjgsIDEyMzg3MCwgMTIzODcyLCAxMjM4NzQsIDEyMzg3NiwgCisgICAgMTIzODc4LCAxMjM4ODAsIDEyMzg4MiwgMTIzODg0LCAxMjM4ODYsIDEyMzg5MCwgMTIzODk0LCAxMjM4OTYsIDEyMzg5OCwgCisgICAgMTIzOTAwLCAxMjM5MDIsIDEyMzkwNCwgMTIzOTA5LCAxMjM5MTUsIDEyMzkxOSwgMTIzOTIzLCAxMjM5MjcsIDEyMzkzMSwgCisgICAgMTIzOTM2LCAxMjM5NDAsIDEyMzk0MiwgMTIzOTQ0LCAxMjM5NDgsIDEyMzk1NCwgMTIzOTU2LCAxMjM5NTgsIDEyMzk2MCwgCisgICAgMTIzOTY0LCAxMjM5NzMsIDEyMzk3OSwgMTIzOTgzLCAxMjM5ODcsIDEyMzk4OSwgMTIzOTkxLCAxMjM5OTQsIDEyMzk5NiwgCisgICAgMTIzOTk4LCAxMjQwMDAsIDEyNDAwNCwgMTI0MDA2LCAxMjQwMTAsIDEyNDAxNSwgMTI0MDE3LCAxMjQwMjIsIDEyNDAyOCwgCisgICAgMTI0MDM1LCAxMjQwMzksIDEyNDA0MywgMTI0MDQ3LCAxMjQwNTEsIDEyNDA1NywgMCwgMCwgMCwgMTI0MDYxLCAxMjQwNjMsIAorICAgIDEyNDA2NywgMTI0MDcxLCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODMsIDEyNDA4NywgMTI0MDg5LCAxMjQwOTMsIAorICAgIDEyNDA5NywgMTI0MTAxLCAxMjQxMDUsIDEyNDEwOSwgMTI0MTEzLCAxMjQxMTcsIDEyNDEyMSwgMTI0MTI3LCAxMjQxMzEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDEzNSwgMTI0MTM5LCAxMjQxNDMsIDEyNDE0NywgCisgICAgMTI0MTU0LCAxMjQxNTYsIDEyNDE2MCwgMTI0MTYyLCAxMjQxNjQsIDEyNDE2OCwgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgCisgICAgMTI0MTgyLCAxMjQxODYsIDEyNDE5MCwgMTI0MTk0LCAxMjQxOTgsIDEyNDIwMCwgMTI0MjA0LCAxMjQyMDYsIDEyNDIxMiwgCisgICAgMTI0MjE1LCAxMjQyMjAsIDEyNDIyMiwgMTI0MjI0LCAxMjQyMjcsIDEyNDIyOSwgMTI0MjMxLCAxMjQyMzQsIDEyNDI0MSwgCisgICAgMTI0MjQ4LCAxMjQyNTUsIDEyNDI2MCwgMTI0MjY0LCAxMjQyNjYsIDEyNDI2OCwgMCwgMTI0MjcwLCAxMjQyNzIsIAorICAgIDEyNDI3NiwgMTI0MjgwLCAxMjQyODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyNDI4NiwgMTI0MjkwLCAxMjQyOTUsIDEyNDI5OSwgMTI0MzA1LCAxMjQzMTEsIDEyNDMxMywgCisgICAgMTI0MzE1LCAxMjQzMjEsIDEyNDMyMywgMTI0MzI3LCAxMjQzMzEsIDEyNDMzMywgMTI0MzM3LCAxMjQzMzksIDEyNDM0MywgCisgICAgMTI0MzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQzNTEsIDEyNDM1MywgCisgICAgMTI0MzU1LCAxMjQzNTcsIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgCisgICAgMTI0Mzc1LCAxMjQzNzcsIDEyNDM3OSwgMTI0MzgxLCAxMjQzODMsIDEyNDM4NSwgMTI0Mzg3LCAxMjQzODksIDEyNDM5MSwgCisgICAgMTI0MzkzLCAxMjQzOTUsIDEyNDM5NywgMTI0Mzk5LCAxMjQ0MDEsIDEyNDQwMywgMTI0NDA1LCAxMjQ0MDksIDEyNDQxMSwgCisgICAgMTI0NDEzLCAxMjQ0MTUsIDEyNDQxOSwgMTI0NDIxLCAxMjQ0MjUsIDEyNDQyNywgMTI0NDI5LCAxMjQ0MzMsIDEyNDQzNywgCisgICAgMTI0NDQzLCAxMjQ0NDUsIDEyNDQ0NywgMTI0NDQ5LCAxMjQ0NTEsIDEyNDQ1NSwgMTI0NDU5LCAxMjQ0NjEsIDEyNDQ2NSwgCisgICAgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIDEyNDUwMSwgCisgICAgMTI0NTA1LCAxMjQ1MDksIDEyNDUxMywgMTI0NTE3LCAxMjQ1MjEsIDEyNDUyNSwgMTI0NTI5LCAwLCAxMjQ1MzMsIDAsIAorICAgIDEyNDUzNSwgMTI0NTM3LCAxMjQ1MzksIDEyNDU0MSwgMTI0NTQzLCAxMjQ1NTEsIDEyNDU1OSwgMTI0NTY3LCAxMjQ1NzUsIAorICAgIDEyNDU4MCwgMTI0NTg1LCAxMjQ1OTAsIDEyNDU5NCwgMTI0NTk4LCAxMjQ2MDMsIDEyNDYwNywgMTI0NjA5LCAxMjQ2MTMsIAorICAgIDEyNDYxNSwgMTI0NjE3LCAxMjQ2MTksIDEyNDYyMSwgMTI0NjIzLCAxMjQ2MjUsIDEyNDYyNywgMTI0NjMxLCAxMjQ2MzMsIAorICAgIDEyNDYzNSwgMTI0NjM3LCAxMjQ2NDEsIDEyNDY0NSwgMTI0NjQ5LCAxMjQ2NTMsIDEyNDY1NywgMTI0NjU5LCAxMjQ2NjUsIAorICAgIDEyNDY3MSwgMTI0NjczLCAxMjQ2NzUsIDEyNDY3NywgMTI0Njc5LCAxMjQ2ODEsIDEyNDY5MCwgMTI0Njk3LCAxMjQ3MDQsIAorICAgIDEyNDcwOCwgMTI0NzE1LCAxMjQ3MjAsIDEyNDcyNywgMTI0NzM2LCAxMjQ3NDEsIDEyNDc0NSwgMTI0NzQ5LCAxMjQ3NTEsIAorICAgIDEyNDc1NSwgMTI0NzU3LCAxMjQ3NjEsIDEyNDc2NSwgMTI0NzY3LCAxMjQ3NzEsIDEyNDc3NSwgMTI0Nzc5LCAxMjQ3ODEsIAorICAgIDEyNDc4MywgMTI0Nzg5LCAxMjQ3OTEsIDEyNDc5MywgMTI0Nzk1LCAxMjQ3OTksIDEyNDgwMywgMTI0ODA1LCAxMjQ4MDksIAorICAgIDEyNDgxMSwgMTI0ODEzLCAxMjQ4MTYsIDEyNDgyMCwgMTI0ODIyLCAxMjQ4MjYsIDEyNDgyOCwgMTI0ODMwLCAxMjQ4MzUsIAorICAgIDEyNDgzNywgMTI0ODQxLCAxMjQ4NDUsIDEyNDg0OCwgMTI0ODUyLCAxMjQ4NTYsIDEyNDg2MCwgMTI0ODY0LCAxMjQ4NjgsIAorICAgIDEyNDg3MiwgMTI0ODc2LCAxMjQ4ODEsIDEyNDg4NSwgMTI0ODg5LCAxMjQ4OTgsIDEyNDkwMywgMTI0OTA2LCAxMjQ5MDgsIAorICAgIDEyNDkxMSwgMTI0OTE0LCAxMjQ5MTksIDEyNDkyMSwgMTI0OTI0LCAxMjQ5MjksIDEyNDkzMywgMTI0OTM2LCAxMjQ5NDAsIAorICAgIDEyNDk0NCwgMTI0OTQ3LCAxMjQ5NTIsIDEyNDk1NiwgMTI0OTYwLCAxMjQ5NjQsIDEyNDk2OCwgMTI0OTc0LCAxMjQ5ODAsIAorICAgIDEyNDk4NiwgMTI0OTkyLCAxMjQ5OTcsIDEyNTAwOCwgMTI1MDEwLCAxMjUwMTQsIDEyNTAxNiwgMTI1MDE4LCAxMjUwMjIsIAorICAgIDEyNTAyNiwgMTI1MDI4LCAxMjUwMzIsIDEyNTAzNywgMTI1MDQyLCAxMjUwNDgsIDEyNTA1MCwgMTI1MDU0LCAxMjUwNTgsIAorICAgIDEyNTA2NSwgMTI1MDcyLCAxMjUwNzYsIDEyNTA3OCwgMTI1MDgwLCAxMjUwODQsIDEyNTA4NiwgMTI1MDkwLCAxMjUwOTQsIAorICAgIDEyNTA5OCwgMTI1MTAwLCAxMjUxMDIsIDEyNTEwOSwgMTI1MTEzLCAxMjUxMTYsIDEyNTEyMCwgMTI1MTI0LCAxMjUxMjgsIAorICAgIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzYsIDEyNTEzOCwgMTI1MTQyLCAxMjUxNDQsIDEyNTE0OCwgMTI1MTUyLCAxMjUxNTgsIAorICAgIDEyNTE2MiwgMTI1MTY2LCAxMjUxNzAsIDEyNTE3MiwgMTI1MTc1LCAxMjUxNzksIDEyNTE4NiwgMTI1MTk1LCAxMjUyMDQsIAorICAgIDEyNTIxMiwgMTI1MjIwLCAxMjUyMjIsIDEyNTIyNiwgMTI1MjI4LCAxMjUyMzIsIDEyNTI0MywgMTI1MjQ3LCAxMjUyNTMsIAorICAgIDEyNTI1OSwgMTI1MjY0LCAwLCAxMjUyNjYsIDEyNTI3MCwgMTI1MjcyLCAxMjUyNzQsIDAsIDAsIDAsIDEyNTI3NiwgCisgICAgMTI1MjgxLCAxMjUyOTEsIDEyNTMwNiwgMTI1MzE4LCAxMjUzMzAsIDEyNTMzNCwgMTI1MzM4LCAxMjUzNDQsIDEyNTM0NiwgCisgICAgMTI1MzU0LCAxMjUzNjIsIDEyNTM2NCwgMTI1MzY4LCAxMjUzNzQsIDEyNTM4MCwgMTI1Mzg3LCAxMjUzOTQsIDEyNTM5NiwgCisgICAgMTI1Mzk4LCAxMjU0MDEsIDEyNTQwMywgMTI1NDA5LCAxMjU0MTEsIDEyNTQxNCwgMTI1NDE4LCAxMjU0MjQsIDEyNTQzMCwgCisgICAgMTI1NDQxLCAxMjU0NDcsIDEyNTQ1NCwgMTI1NDYyLCAxMjU0NjYsIDEyNTQ3NCwgMTI1NDgyLCAxMjU0ODgsIDEyNTQ5NCwgCisgICAgMTI1NTAxLCAxMjU1MDMsIDEyNTUwNywgMTI1NTA5LCAxMjU1MTEsIDEyNTUxNiwgMTI1NTE4LCAxMjU1MjAsIDEyNTUyMiwgCisgICAgMTI1NTI0LCAxMjU1MjgsIDEyNTUzOSwgMTI1NTQ1LCAxMjU1NDksIDEyNTU1MywgMTI1NTU3LCAxMjU1NjMsIDEyNTU2OSwgCisgICAgMTI1NTc1LCAxMjU1ODEsIDEyNTU4NiwgMTI1NTkxLCAxMjU1OTcsIDEyNTYwMywgMTI1NjEwLCAwLCAwLCAxMjU2MTcsIAorICAgIDEyNTYyMiwgMTI1NjMwLCAxMjU2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTY0MywgCisgICAgMTI1NjUwLCAxMjU2NTcsIDEyNTY2NCwgMTI1NjcyLCAxMjU2ODAsIDEyNTY4OCwgMTI1Njk2LCAxMjU3MDQsIDEyNTcxMiwgCisgICAgMTI1NzIwLCAxMjU3MjgsIDEyNTczNiwgMTI1NzQyLCAxMjU3NDgsIDEyNTc1NCwgMTI1NzYwLCAxMjU3NjYsIDEyNTc3MiwgCisgICAgMTI1Nzc4LCAxMjU3ODQsIDEyNTc5MCwgMTI1Nzk2LCAxMjU4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTc4MCwgCi0gICAgMTI1Nzg0LCAxMjU3ODgsIDEyNTc5MywgMTI1Nzk4LCAxMjU4MDAsIDEyNTgwNCwgMTI1ODEzLCAxMjU4MjEsIDEyNTgyOSwgCi0gICAgMTI1ODQyLCAxMjU4NTUsIDEyNTg2OCwgMTI1ODc1LCAxMjU4ODIsIDEyNTg4NiwgMTI1ODk1LCAxMjU5MDMsIDEyNTkwNywgCi0gICAgMTI1OTE2LCAxMjU5MjMsIDEyNTkyNywgMTI1OTMxLCAxMjU5MzUsIDEyNTkzOSwgMTI1OTQ2LCAxMjU5NTAsIDEyNTk1NCwgCi0gICAgMTI1OTU4LCAxMjU5NjIsIDEyNTk2OSwgMTI1OTc4LCAxMjU5ODcsIDEyNTk5NCwgMTI2MDA2LCAxMjYwMTgsIDEyNjAyMiwgCi0gICAgMTI2MDI2LCAxMjYwMzAsIDEyNjAzNCwgMTI2MDM4LCAxMjYwNDIsIDEyNjA1MCwgMTI2MDU4LCAxMjYwNjYsIDEyNjA3MCwgCi0gICAgMTI2MDc0LCAxMjYwNzgsIDEyNjA4MiwgMTI2MDg2LCAxMjYwOTAsIDEyNjA5NiwgMTI2MTAyLCAxMjYxMDYsIDEyNjExNywgCi0gICAgMTI2MTI1LCAxMjYxMjksIDEyNjEzMywgMTI2MTM3LCAxMjYxNDEsIDEyNjE0NywgMTI2MTU0LCAxMjYxNjUsIDEyNjE3NSwgCi0gICAgMTI2MTg1LCAxMjYxOTYsIDEyNjIwNSwgMTI2MjE2LCAxMjYyMjIsIDEyNjIyOCwgMCwgMCwgMCwgMCwgMTI2MjM0LCAKLSAgICAxMjYyNDMsIDEyNjI1MCwgMTI2MjU2LCAxMjYyNjAsIDEyNjI2NCwgMTI2MjY4LCAxMjYyNzcsIDEyNjI4OSwgMTI2MjkzLCAKLSAgICAxMjYzMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTgwOCwgMTI1ODEyLCAxMjU4MTYsIAorICAgIDEyNTgyMSwgMTI1ODI2LCAxMjU4MjgsIDEyNTgzMiwgMTI1ODQxLCAxMjU4NDksIDEyNTg1NywgMTI1ODcwLCAxMjU4ODMsIAorICAgIDEyNTg5NiwgMTI1OTAzLCAxMjU5MTAsIDEyNTkxNCwgMTI1OTIzLCAxMjU5MzEsIDEyNTkzNSwgMTI1OTQ0LCAxMjU5NTEsIAorICAgIDEyNTk1NSwgMTI1OTU5LCAxMjU5NjMsIDEyNTk2NywgMTI1OTc0LCAxMjU5NzgsIDEyNTk4MiwgMTI1OTg2LCAxMjU5OTAsIAorICAgIDEyNTk5NywgMTI2MDA2LCAxMjYwMTUsIDEyNjAyMiwgMTI2MDM0LCAxMjYwNDYsIDEyNjA1MCwgMTI2MDU0LCAxMjYwNTgsIAorICAgIDEyNjA2MiwgMTI2MDY2LCAxMjYwNzAsIDEyNjA3OCwgMTI2MDg2LCAxMjYwOTQsIDEyNjA5OCwgMTI2MTAyLCAxMjYxMDYsIAorICAgIDEyNjExMCwgMTI2MTE0LCAxMjYxMTgsIDEyNjEyNCwgMTI2MTMwLCAxMjYxMzQsIDEyNjE0NSwgMTI2MTUzLCAxMjYxNTcsIAorICAgIDEyNjE2MSwgMTI2MTY1LCAxMjYxNjksIDEyNjE3NSwgMTI2MTgyLCAxMjYxOTMsIDEyNjIwMywgMTI2MjEzLCAxMjYyMjQsIAorICAgIDEyNjIzMywgMTI2MjQ0LCAxMjYyNTAsIDEyNjI1NiwgMCwgMCwgMCwgMCwgMTI2MjYyLCAxMjYyNzEsIDEyNjI3OCwgCisgICAgMTI2Mjg0LCAxMjYyODgsIDEyNjI5MiwgMTI2Mjk2LCAxMjYzMDUsIDEyNjMxNywgMTI2MzIxLCAxMjYzMjgsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyNjMwNywgMTI2MzA5LCAxMjYzMTEsIDEyNjMxNSwgMTI2MzE5LCAxMjYzMjMsIDEyNjMzMiwgMTI2MzM0LCAKLSAgICAxMjYzMzYsIDEyNjMzOSwgMTI2MzQxLCAxMjYzNDMsIDEyNjM0NywgMTI2MzQ5LCAxMjYzNTMsIDEyNjM1NSwgMTI2MzU5LCAKLSAgICAxMjYzNjEsIDEyNjM2MywgMTI2MzY3LCAxMjYzNzEsIDEyNjM3NywgMTI2Mzc5LCAxMjYzODMsIDEyNjM4NSwgMTI2Mzg5LCAKLSAgICAxMjYzOTMsIDEyNjM5NywgMTI2NDAxLCAxMjY0MDMsIDEyNjQwNSwgMTI2NDA5LCAxMjY0MTMsIDEyNjQxNywgMTI2NDIxLCAKLSAgICAxMjY0MjMsIDEyNjQyNSwgMTI2NDI3LCAxMjY0MzIsIDEyNjQzNywgMTI2NDQwLCAxMjY0NDgsIDEyNjQ1NiwgMTI2NDU4LCAKLSAgICAxMjY0NjMsIDEyNjQ2NiwgMTI2NDcxLCAxMjY0ODIsIDEyNjQ4OSwgMTI2NDk0LCAxMjY0OTksIDEyNjUwMSwgMTI2NTA1LCAKLSAgICAxMjY1MDcsIDEyNjUxMSwgMTI2NTEzLCAxMjY1MTcsIDEyNjUyMSwgMTI2NTI0LCAxMjY1MjcsIDEyNjUyOSwgMTI2NTMyLCAKLSAgICAxMjY1MzQsIDEyNjUzOCwgMTI2NTQwLCAxMjY1NDIsIDEyNjU0NCwgMTI2NTQ4LCAxMjY1NTAsIDEyNjU1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MzM1LCAKKyAgICAxMjYzMzcsIDEyNjMzOSwgMTI2MzQzLCAxMjYzNDcsIDEyNjM1MSwgMTI2MzYwLCAxMjYzNjIsIDEyNjM2NCwgMTI2MzY3LCAKKyAgICAxMjYzNjksIDEyNjM3MSwgMTI2Mzc1LCAxMjYzNzcsIDEyNjM4MSwgMTI2MzgzLCAxMjYzODcsIDEyNjM4OSwgMTI2MzkxLCAKKyAgICAxMjYzOTUsIDEyNjM5OSwgMTI2NDA1LCAxMjY0MDcsIDEyNjQxMSwgMTI2NDEzLCAxMjY0MTcsIDEyNjQyMSwgMTI2NDI1LCAKKyAgICAxMjY0MjksIDEyNjQzMSwgMTI2NDMzLCAxMjY0MzcsIDEyNjQ0MSwgMTI2NDQ1LCAxMjY0NDksIDEyNjQ1MSwgMTI2NDUzLCAKKyAgICAxMjY0NTUsIDEyNjQ2MCwgMTI2NDY1LCAxMjY0NjgsIDEyNjQ3NiwgMTI2NDg0LCAxMjY0ODYsIDEyNjQ5MSwgMTI2NDk0LCAKKyAgICAxMjY0OTksIDEyNjUxMCwgMTI2NTE3LCAxMjY1MjIsIDEyNjUyNywgMTI2NTI5LCAxMjY1MzMsIDEyNjUzNSwgMTI2NTM5LCAKKyAgICAxMjY1NDEsIDEyNjU0NSwgMTI2NTQ5LCAxMjY1NTIsIDEyNjU1NSwgMTI2NTU3LCAxMjY1NjAsIDEyNjU2MiwgMTI2NTY2LCAKKyAgICAxMjY1NjgsIDEyNjU3MCwgMTI2NTcyLCAxMjY1NzYsIDEyNjU3OCwgMTI2NTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY1NTcsIDEyNjU2MiwgMTI2NTY3LCAxMjY1NzIsIDEyNjU3NywgMTI2NTgyLCAKLSAgICAxMjY1ODcsIDEyNjU5NCwgMTI2NjAxLCAxMjY2MDgsIDEyNjYxNSwgMTI2NjIwLCAxMjY2MjUsIDEyNjYzMCwgMTI2NjM1LCAKLSAgICAxMjY2NDIsIDEyNjY0OCwgMTI2NjU1LCAxMjY2NjIsIDEyNjY2OSwgMTI2Njc0LCAxMjY2NzksIDEyNjY4NCwgMTI2Njg5LCAKLSAgICAxMjY2OTQsIDEyNjcwMSwgMTI2NzA4LCAxMjY3MTMsIDEyNjcxOCwgMTI2NzI1LCAxMjY3MzIsIDEyNjc0MCwgMTI2NzQ4LCAKLSAgICAxMjY3NTUsIDEyNjc2MiwgMTI2NzcwLCAxMjY3NzgsIDEyNjc4NiwgMTI2NzkzLCAxMjY4MDMsIDEyNjgxNCwgMTI2ODE5LCAKLSAgICAxMjY4MjYsIDEyNjgzMywgMTI2ODQwLCAxMjY4NDgsIDEyNjg1NiwgMTI2ODY3LCAxMjY4NzUsIDEyNjg4MywgMTI2ODkxLCAKLSAgICAxMjY4OTYsIDEyNjkwMSwgMTI2OTA2LCAxMjY5MTEsIDEyNjkxNiwgMTI2OTIxLCAxMjY5MjYsIDEyNjkzMSwgMTI2OTM2LCAKLSAgICAxMjY5NDEsIDEyNjk0NiwgMTI2OTUxLCAxMjY5NTgsIDEyNjk2MywgMTI2OTY4LCAxMjY5NzUsIDEyNjk4MCwgMTI2OTg1LCAKLSAgICAxMjY5OTAsIDEyNjk5NSwgMTI3MDAwLCAxMjcwMDUsIDEyNzAxMCwgMTI3MDE1LCAxMjcwMjAsIDEyNzAyNSwgMTI3MDMwLCAKLSAgICAxMjcwMzUsIDEyNzA0MiwgMTI3MDUwLCAxMjcwNTUsIDEyNzA2MCwgMTI3MDY3LCAxMjcwNzIsIDEyNzA3NywgMTI3MDgyLCAKLSAgICAxMjcwODksIDEyNzA5NCwgMTI3MTAxLCAxMjcxMDYsIDEyNzExMywgMTI3MTE4LCAxMjcxMjcsIDEyNzEzNiwgMTI3MTQxLCAKLSAgICAxMjcxNDYsIDEyNzE1MSwgMTI3MTU2LCAxMjcxNjEsIDEyNzE2NiwgMTI3MTcxLCAxMjcxNzYsIDEyNzE4MSwgMTI3MTg2LCAKLSAgICAxMjcxOTEsIDEyNzE5NiwgMTI3MjAxLCAxMjcyMDksIDEyNzIxNywgMTI3MjIyLCAxMjcyMjcsIDEyNzIzMiwgMTI3MjM3LCAKLSAgICAxMjcyNDIsIDEyNzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjU0LCAxMjcyNTgsIAotICAgIDEyNzI2MiwgMTI3MjY2LCAxMjcyNzAsIDEyNzI3NCwgMTI3Mjc4LCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAorICAgIDAsIDAsIDEyNjU4NSwgMTI2NTkwLCAxMjY1OTUsIDEyNjYwMCwgMTI2NjA1LCAxMjY2MTAsIDEyNjYxNSwgMTI2NjIyLCAKKyAgICAxMjY2MjksIDEyNjYzNiwgMTI2NjQzLCAxMjY2NDgsIDEyNjY1MywgMTI2NjU4LCAxMjY2NjMsIDEyNjY3MCwgMTI2Njc2LCAKKyAgICAxMjY2ODMsIDEyNjY5MCwgMTI2Njk3LCAxMjY3MDIsIDEyNjcwNywgMTI2NzEyLCAxMjY3MTcsIDEyNjcyMiwgMTI2NzI5LCAKKyAgICAxMjY3MzYsIDEyNjc0MSwgMTI2NzQ2LCAxMjY3NTMsIDEyNjc2MCwgMTI2NzY4LCAxMjY3NzYsIDEyNjc4MywgMTI2NzkwLCAKKyAgICAxMjY3OTgsIDEyNjgwNiwgMTI2ODE0LCAxMjY4MjEsIDEyNjgzMSwgMTI2ODQyLCAxMjY4NDcsIDEyNjg1NCwgMTI2ODYxLCAKKyAgICAxMjY4NjgsIDEyNjg3NiwgMTI2ODg0LCAxMjY4OTUsIDEyNjkwMywgMTI2OTExLCAxMjY5MTksIDEyNjkyNCwgMTI2OTI5LCAKKyAgICAxMjY5MzQsIDEyNjkzOSwgMTI2OTQ0LCAxMjY5NDksIDEyNjk1NCwgMTI2OTU5LCAxMjY5NjQsIDEyNjk2OSwgMTI2OTc0LCAKKyAgICAxMjY5NzksIDEyNjk4NiwgMTI2OTkxLCAxMjY5OTYsIDEyNzAwMywgMTI3MDA4LCAxMjcwMTMsIDEyNzAxOCwgMTI3MDIzLCAKKyAgICAxMjcwMjgsIDEyNzAzMywgMTI3MDM4LCAxMjcwNDMsIDEyNzA0OCwgMTI3MDUzLCAxMjcwNTgsIDEyNzA2MywgMTI3MDcwLCAKKyAgICAxMjcwNzgsIDEyNzA4MywgMTI3MDg4LCAxMjcwOTUsIDEyNzEwMCwgMTI3MTA1LCAxMjcxMTAsIDEyNzExNywgMTI3MTIyLCAKKyAgICAxMjcxMjksIDEyNzEzNCwgMTI3MTQxLCAxMjcxNDYsIDEyNzE1NSwgMTI3MTY0LCAxMjcxNjksIDEyNzE3NCwgMTI3MTc5LCAKKyAgICAxMjcxODQsIDEyNzE4OSwgMTI3MTk0LCAxMjcxOTksIDEyNzIwNCwgMTI3MjA5LCAxMjcyMTQsIDEyNzIxOSwgMTI3MjI0LCAKKyAgICAxMjcyMjksIDEyNzIzNywgMTI3MjQ1LCAxMjcyNTAsIDEyNzI1NSwgMTI3MjYwLCAxMjcyNjUsIDEyNzI3MCwgMTI3Mjc2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAogICAgIDEyNzI5OCwgMTI3MzAyLCAxMjczMDYsIDEyNzMxMCwgMTI3MzE0LCAxMjczMTgsIDEyNzMyMiwgMTI3MzI2LCAxMjczMzAsIAogICAgIDEyNzMzNCwgMTI3MzM4LCAxMjczNDIsIDEyNzM0NiwgMTI3MzUwLCAxMjczNTQsIDEyNzM1OCwgMTI3MzYyLCAxMjczNjYsIAogICAgIDEyNzM3MCwgMTI3Mzc0LCAxMjczNzgsIDEyNzM4MiwgMTI3Mzg2LCAxMjczOTAsIDEyNzM5NCwgMTI3Mzk4LCAxMjc0MDIsIApAQCAtMTY5MzUsMTc3ICsxNjk1MiwxNzkgQEAKICAgICAxMjkzMTQsIDEyOTMxOCwgMTI5MzIyLCAxMjkzMjYsIDEyOTMzMCwgMTI5MzM0LCAxMjkzMzgsIDEyOTM0MiwgMTI5MzQ2LCAKICAgICAxMjkzNTAsIDEyOTM1NCwgMTI5MzU4LCAxMjkzNjIsIDEyOTM2NiwgMTI5MzcwLCAxMjkzNzQsIDEyOTM3OCwgMTI5MzgyLCAKICAgICAxMjkzODYsIDEyOTM5MCwgMTI5Mzk0LCAxMjkzOTgsIDEyOTQwMiwgMTI5NDA2LCAxMjk0MTAsIDEyOTQxNCwgMTI5NDE4LCAKKyAgICAxMjk0MjIsIDEyOTQyNiwgMTI5NDMwLCAxMjk0MzQsIDEyOTQzOCwgMTI5NDQyLCAxMjk0NDYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTQ1MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI5NDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk0MjYsIDEyOTQyOSwgMTI5NDMzLCAxMjk0MzcsIDEyOTQ0MCwgCi0gICAgMTI5NDQ0LCAxMjk0NDgsIDEyOTQ1MSwgMTI5NDU0LCAxMjk0NTgsIDEyOTQ2MiwgMTI5NDY1LCAxMjk0NjgsIDEyOTQ3MSwgCi0gICAgMTI5NDc0LCAxMjk0NzksIDEyOTQ4MiwgMTI5NDg2LCAxMjk0ODksIDEyOTQ5MiwgMTI5NDk1LCAxMjk0OTgsIDEyOTUwMSwgCi0gICAgMTI5NTA0LCAxMjk1MDcsIDEyOTUxMCwgMTI5NTEzLCAxMjk1MTYsIDEyOTUxOSwgMTI5NTIzLCAxMjk1MjcsIDEyOTUzMSwgCi0gICAgMTI5NTM1LCAxMjk1NDAsIDEyOTU0NSwgMTI5NTUxLCAxMjk1NTcsIDEyOTU2MywgMTI5NTY4LCAxMjk1NzQsIDEyOTU4MCwgCi0gICAgMTI5NTg2LCAxMjk1OTEsIDEyOTU5NywgMTI5NjAzLCAxMjk2MDgsIDEyOTYxMywgMTI5NjE5LCAxMjk2MjQsIDEyOTYzMCwgCi0gICAgMTI5NjM2LCAxMjk2NDEsIDEyOTY0NywgMTI5NjUzLCAxMjk2NTgsIDEyOTY2NCwgMTI5NjcwLCAxMjk2NzYsIDEyOTY4MiwgCi0gICAgMTI5Njg4LCAxMjk2OTIsIDEyOTY5NywgMTI5NzAxLCAxMjk3MDYsIDEyOTcxMCwgMTI5NzE1LCAxMjk3MjAsIDEyOTcyNiwgCi0gICAgMTI5NzMyLCAxMjk3MzgsIDEyOTc0MywgMTI5NzQ5LCAxMjk3NTUsIDEyOTc2MSwgMTI5NzY2LCAxMjk3NzIsIDEyOTc3OCwgCi0gICAgMTI5NzgzLCAxMjk3ODgsIDEyOTc5NCwgMTI5Nzk5LCAxMjk4MDUsIDEyOTgxMSwgMTI5ODE2LCAxMjk4MjIsIDEyOTgyOCwgCi0gICAgMTI5ODMzLCAxMjk4MzksIDEyOTg0NSwgMTI5ODUxLCAxMjk4NTcsIDEyOTg2MywgMTI5ODY4LCAxMjk4NzIsIDEyOTg3NywgCi0gICAgMTI5ODc5LCAxMjk4ODMsIDEyOTg4NiwgMTI5ODg5LCAxMjk4OTIsIDEyOTg5NSwgMTI5ODk4LCAxMjk5MDEsIDEyOTkwNCwgCi0gICAgMTI5OTA3LCAxMjk5MTAsIDEyOTkxMywgMTI5OTE2LCAxMjk5MTksIDEyOTkyMiwgMTI5OTI1LCAxMjk5MjgsIDEyOTkzMSwgCi0gICAgMTI5OTM0LCAxMjk5MzcsIDEyOTk0MCwgMTI5OTQzLCAxMjk5NDYsIDEyOTk0OSwgMTI5OTUyLCAxMjk5NTUsIDEyOTk1OCwgCi0gICAgMTI5OTYxLCAxMjk5NjQsIDEyOTk2NywgMTI5OTcwLCAxMjk5NzMsIDEyOTk3NiwgMTI5OTc5LCAxMjk5ODIsIDEyOTk4NSwgCi0gICAgMTI5OTg4LCAxMjk5OTEsIDEyOTk5NCwgMTI5OTk3LCAxMzAwMDAsIDEzMDAwMywgMTMwMDA2LCAxMzAwMDksIDEzMDAxMiwgCi0gICAgMTMwMDE1LCAxMzAwMTgsIDEzMDAyMSwgMTMwMDI0LCAxMzAwMjcsIDEzMDAzMCwgMTMwMDMzLCAxMzAwMzYsIDEzMDAzOSwgCi0gICAgMTMwMDQyLCAxMzAwNDUsIDEzMDA0OCwgMTMwMDUxLCAxMzAwNTQsIDEzMDA1NywgMTMwMDYwLCAxMzAwNjMsIDEzMDA2NiwgCi0gICAgMTMwMDY5LCAxMzAwNzIsIDEzMDA3NSwgMTMwMDc4LCAxMzAwODEsIDEzMDA4NCwgMTMwMDg3LCAxMzAwOTAsIDEzMDA5MywgCi0gICAgMTMwMDk2LCAxMzAwOTksIDEzMDEwMiwgMTMwMTA1LCAxMzAxMDgsIDEzMDExMSwgMTMwMTE0LCAxMzAxMTcsIDEzMDEyMCwgCi0gICAgMTMwMTIzLCAxMzAxMjYsIDEzMDEyOSwgMTMwMTMyLCAxMzAxMzUsIDEzMDEzOCwgMTMwMTQxLCAxMzAxNDQsIDEzMDE0NywgCi0gICAgMTMwMTUwLCAxMzAxNTMsIDEzMDE1NiwgMTMwMTU5LCAxMzAxNjIsIDEzMDE2NSwgMTMwMTY4LCAxMzAxNzEsIDEzMDE3NCwgCi0gICAgMTMwMTc3LCAxMzAxODAsIDEzMDE4MywgMTMwMTg2LCAxMzAxODksIDEzMDE5MiwgMTMwMTk1LCAxMzAxOTgsIDEzMDIwMSwgCi0gICAgMTMwMjA0LCAxMzAyMDcsIDEzMDIxMCwgMTMwMjEzLCAxMzAyMTYsIDEzMDIxOSwgMTMwMjIyLCAxMzAyMjUsIDEzMDIyOCwgCi0gICAgMTMwMjMxLCAxMzAyMzQsIDEzMDIzNywgMTMwMjQwLCAxMzAyNDMsIDEzMDI0NiwgMTMwMjQ5LCAxMzAyNTIsIDEzMDI1NSwgCi0gICAgMTMwMjU4LCAxMzAyNjEsIDEzMDI2NCwgMTMwMjY3LCAxMzAyNzAsIDEzMDI3MywgMTMwMjc2LCAxMzAyNzksIDEzMDI4MiwgCi0gICAgMTMwMjg1LCAxMzAyODgsIDEzMDI5MSwgMTMwMjk0LCAxMzAyOTcsIDEzMDMwMCwgMTMwMzAzLCAxMzAzMDYsIDEzMDMwOSwgCi0gICAgMTMwMzEyLCAxMzAzMTUsIDEzMDMxOCwgMTMwMzIxLCAxMzAzMjQsIDEzMDMyNywgMTMwMzMwLCAxMzAzMzMsIDEzMDMzNiwgCi0gICAgMTMwMzM5LCAxMzAzNDIsIDEzMDM0NSwgMTMwMzQ4LCAxMzAzNTEsIDEzMDM1NCwgMTMwMzU3LCAxMzAzNjAsIDEzMDM2MywgCi0gICAgMTMwMzY2LCAxMzAzNjksIDEzMDM3MiwgMTMwMzc1LCAxMzAzNzgsIDEzMDM4MSwgMTMwMzg0LCAxMzAzODcsIDEzMDM5MCwgCi0gICAgMTMwMzkzLCAxMzAzOTYsIDEzMDM5OSwgMTMwNDAyLCAxMzA0MDUsIDEzMDQwOCwgMTMwNDExLCAxMzA0MTQsIDEzMDQxNywgCi0gICAgMTMwNDIwLCAxMzA0MjMsIDEzMDQyNiwgMTMwNDI5LCAxMzA0MzIsIDEzMDQzNSwgMTMwNDM4LCAxMzA0NDEsIDEzMDQ0NCwgCi0gICAgMTMwNDQ3LCAxMzA0NTAsIDEzMDQ1MywgMTMwNDU2LCAxMzA0NTksIDEzMDQ2MiwgMTMwNDY1LCAxMzA0NjgsIDEzMDQ3MSwgCi0gICAgMTMwNDc0LCAxMzA0NzcsIDEzMDQ4MCwgMTMwNDgzLCAxMzA0ODYsIDEzMDQ4OSwgMTMwNDkyLCAxMzA0OTUsIDEzMDQ5OCwgCi0gICAgMTMwNTAxLCAxMzA1MDQsIDEzMDUwNywgMTMwNTEwLCAxMzA1MTMsIDEzMDUxNiwgMTMwNTE5LCAxMzA1MjIsIDEzMDUyNSwgCi0gICAgMTMwNTI4LCAxMzA1MzEsIDEzMDUzNCwgMTMwNTM3LCAxMzA1NDAsIDEzMDU0MywgMTMwNTQ2LCAxMzA1NDksIDEzMDU1MiwgCi0gICAgMTMwNTU1LCAxMzA1NTgsIDEzMDU2MSwgMTMwNTY0LCAxMzA1NjcsIDEzMDU3MCwgMTMwNTczLCAxMzA1NzYsIDEzMDU3OSwgCi0gICAgMTMwNTgyLCAxMzA1ODUsIDEzMDU4OCwgMTMwNTkxLCAxMzA1OTQsIDEzMDU5NywgMTMwNjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA2MDMsIDEzMDYwNSwgMTMwNjA3LCAxMzA2MTIsIDEzMDYxNCwgCi0gICAgMTMwNjE5LCAxMzA2MjEsIDEzMDYyNiwgMTMwNjI4LCAxMzA2MzMsIDEzMDYzNSwgMTMwNjM3LCAxMzA2MzksIDEzMDY0MSwgCi0gICAgMTMwNjQzLCAxMzA2NDUsIDEzMDY0NywgMTMwNjQ5LCAxMzA2NTEsIDEzMDY1NCwgMTMwNjU3LCAxMzA2NTksIDEzMDY2MSwgCi0gICAgMTMwNjY1LCAxMzA2NjgsIDEzMDY3MywgMTMwNjc1LCAxMzA2NzcsIDEzMDY3OSwgMTMwNjgzLCAxMzA2ODYsIDEzMDY4OCwgCi0gICAgMTMwNjkyLCAxMzA2OTQsIDEzMDY5OCwgMTMwNzAwLCAxMzA3MDQsIDEzMDcwNywgMTMwNzA5LCAxMzA3MTMsIDEzMDcxNywgCi0gICAgMTMwNzE5LCAxMzA3MjUsIDEzMDcyNywgMTMwNzMyLCAxMzA3MzQsIDEzMDczOSwgMTMwNzQxLCAxMzA3NDYsIDEzMDc0OCwgCi0gICAgMTMwNzUzLCAxMzA3NTUsIDEzMDc1OCwgMTMwNzYwLCAxMzA3NjQsIDEzMDc2NiwgMTMwNzczLCAxMzA3NzUsIDEzMDc3NywgCi0gICAgMTMwNzc5LCAxMzA3ODQsIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTAsIDEzMDc5MiwgMTMwNzk0LCAxMzA3OTksIDEzMDgwMywgCi0gICAgMTMwODA1LCAxMzA4MTAsIDEzMDgxNCwgMTMwODE2LCAxMzA4MjEsIDEzMDgyNSwgMTMwODI3LCAxMzA4MzIsIDEzMDgzNiwgCi0gICAgMTMwODM4LCAxMzA4NDAsIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDgsIDEzMDg1MCwgMTMwODU1LCAxMzA4NTcsIDEzMDg2MywgCi0gICAgMTMwODY1LCAxMzA4NzEsIDEzMDg3MywgMTMwODc1LCAxMzA4NzcsIDEzMDg4MSwgMTMwODgzLCAxMzA4OTAsIDEzMDg5MiwgCi0gICAgMTMwODk5LCAxMzA5MDEsIDEzMDkwNiwgMTMwOTExLCAxMzA5MTMsIDEzMDkxOSwgMTMwOTI1LCAxMzA5MjcsIDEzMDkzMywgCi0gICAgMTMwOTM4LCAxMzA5NDAsIDEzMDk0NiwgMTMwOTUyLCAxMzA5NTQsIDEzMDk2MCwgMTMwOTY2LCAxMzA5NjgsIDEzMDk3NCwgCi0gICAgMTMwOTc4LCAxMzA5ODAsIDEzMDk4NSwgMTMwOTg3LCAxMzA5ODksIDEzMDk5NCwgMTMwOTk2LCAxMzA5OTgsIDEzMTAwNCwgCi0gICAgMTMxMDA2LCAxMzEwMTEsIDEzMTAxNSwgMTMxMDE3LCAxMzEwMjIsIDEzMTAyNiwgMTMxMDI4LCAxMzEwMzQsIDEzMTAzNiwgCi0gICAgMTMxMDQwLCAxMzEwNDIsIDEzMTA0NiwgMTMxMDQ4LCAxMzEwNTUsIDEzMTA2MiwgMTMxMDY0LCAxMzEwNzEsIDEzMTA3OCwgCi0gICAgMTMxMDgwLCAxMzEwODUsIDEzMTA4NywgMTMxMDk0LCAxMzEwOTYsIDEzMTEwMSwgMTMxMTAzLCAxMzExMDksIDEzMTExMSwgCi0gICAgMTMxMTE1LCAxMzExMTcsIDEzMTEyMywgMTMxMTI1LCAxMzExMjksIDEzMTEzMSwgMTMxMTM3LCAxMzExMzksIDEzMTE0MSwgCi0gICAgMTMxMTQzLCAxMzExNDgsIDEzMTE1MywgMTMxMTU1LCAxMzExNTksIDEzMTE2NiwgMTMxMTczLCAxMzExNzgsIDEzMTE4MywgCi0gICAgMTMxMTk1LCAxMzExOTcsIDEzMTE5OSwgMTMxMjAxLCAxMzEyMDMsIDEzMTIwNSwgMTMxMjA3LCAxMzEyMDksIDEzMTIxMSwgCi0gICAgMTMxMjEzLCAxMzEyMTUsIDEzMTIxNywgMTMxMjE5LCAxMzEyMjEsIDEzMTIyMywgMTMxMjI1LCAxMzEyMjcsIDEzMTIyOSwgCi0gICAgMTMxMjM1LCAxMzEyNDIsIDEzMTI0NywgMTMxMjUyLCAxMzEyNjMsIDEzMTI2NSwgMTMxMjY3LCAxMzEyNjksIDEzMTI3MSwgCi0gICAgMTMxMjczLCAxMzEyNzUsIDEzMTI3NywgMTMxMjc5LCAxMzEyODEsIDEzMTI4MywgMTMxMjg1LCAxMzEyODcsIDEzMTI4OSwgCi0gICAgMTMxMjkxLCAxMzEyOTMsIDEzMTI5NSwgMTMxMzAwLCAxMzEzMDIsIDEzMTMwNCwgMTMxMzE1LCAxMzEzMTcsIDEzMTMxOSwgCi0gICAgMTMxMzIxLCAxMzEzMjMsIDEzMTMyNSwgMTMxMzI3LCAxMzEzMjksIDEzMTMzMSwgMTMxMzMzLCAxMzEzMzUsIDEzMTMzNywgCi0gICAgMTMxMzM5LCAxMzEzNDEsIDEzMTM0MywgMTMxMzQ1LCAxMzEzNDcsIDEzMTM0OSwgMTMxMzUxLCAxMzEzNTMsIDEzMTM1NSwgCi0gICAgMTMxMzU3LCAxMzEzNTksIDEzMTM2MSwgMTMxMzYzLCAxMzEzNjUsIDEzMTM2NywgMTMxMzY5LCAxMzEzNzEsIDEzMTM3MywgCi0gICAgMTMxMzc1LCAxMzEzNzcsIDEzMTM3OSwgMTMxMzgxLCAxMzEzODMsIDEzMTM4NSwgMTMxMzg3LCAxMzEzODksIDEzMTM5MSwgCi0gICAgMTMxMzkzLCAxMzEzOTUsIDEzMTM5NywgMTMxMzk5LCAxMzE0MDEsIDEzMTQwMywgMTMxNDA1LCAxMzE0MDcsIDEzMTQwOSwgCi0gICAgMTMxNDExLCAxMzE0MTMsIDEzMTQxNSwgMTMxNDE3LCAxMzE0MTksIDEzMTQyMSwgMTMxNDIzLCAxMzE0MjUsIDEzMTQyNywgCi0gICAgMTMxNDI5LCAxMzE0MzEsIDEzMTQzMywgMTMxNDM1LCAxMzE0MzcsIDEzMTQzOSwgMTMxNDQxLCAxMzE0NDMsIDEzMTQ0NSwgCi0gICAgMTMxNDQ3LCAxMzE0NDksIDEzMTQ1MSwgMTMxNDUzLCAxMzE0NTUsIDEzMTQ1NywgMTMxNDU5LCAxMzE0NjEsIDEzMTQ2MywgCi0gICAgMTMxNDY1LCAxMzE0NjcsIDEzMTQ2OSwgMTMxNDcxLCAxMzE0NzMsIDEzMTQ3NSwgMTMxNDc3LCAxMzE0NzksIDEzMTQ4MSwgCi0gICAgMTMxNDgzLCAxMzE0ODUsIDEzMTQ4NywgMTMxNDg5LCAxMzE0OTEsIDEzMTQ5MywgMTMxNDk1LCAxMzE0OTcsIDEzMTQ5OSwgCi0gICAgMTMxNTAxLCAxMzE1MDMsIDEzMTUwNSwgMTMxNTA3LCAxMzE1MDksIDEzMTUxMSwgMTMxNTEzLCAxMzE1MTUsIDEzMTUxNywgCi0gICAgMTMxNTE5LCAxMzE1MjEsIDEzMTUyMywgMTMxNTI1LCAxMzE1MjcsIDEzMTUyOSwgMTMxNTMxLCAxMzE1MzMsIDEzMTUzNSwgCi0gICAgMTMxNTM3LCAxMzE1MzksIDEzMTU0MSwgMTMxNTQzLCAxMzE1NDUsIDEzMTU0NywgMTMxNTQ5LCAxMzE1NTEsIDEzMTU1MywgCi0gICAgMTMxNTU1LCAxMzE1NTcsIDEzMTU1OSwgMTMxNTYxLCAxMzE1NjMsIDEzMTU2NSwgMTMxNTY3LCAxMzE1NjksIDEzMTU3MSwgCi0gICAgMTMxNTczLCAxMzE1NzUsIDEzMTU3NywgMTMxNTc5LCAxMzE1ODEsIDEzMTU4MywgMTMxNTg1LCAxMzE1ODcsIDEzMTU4OSwgCi0gICAgMTMxNTkxLCAxMzE1OTMsIDEzMTU5NSwgMTMxNTk3LCAxMzE1OTksIDEzMTYwMSwgMTMxNjAzLCAxMzE2MDUsIDEzMTYwNywgCi0gICAgMTMxNjA5LCAxMzE2MTEsIDEzMTYxMywgMTMxNjE1LCAxMzE2MTcsIDEzMTYxOSwgMTMxNjIxLCAxMzE2MjMsIDEzMTYyNSwgCi0gICAgMTMxNjI3LCAxMzE2MjksIDEzMTYzMSwgMTMxNjMzLCAxMzE2MzUsIDEzMTYzNywgMTMxNjM5LCAxMzE2NDEsIDEzMTY0MywgCi0gICAgMTMxNjQ1LCAxMzE2NDcsIDEzMTY0OSwgMTMxNjUxLCAxMzE2NTMsIDEzMTY1NSwgMTMxNjU3LCAxMzE2NTksIDEzMTY2MSwgCi0gICAgMTMxNjYzLCAxMzE2NjUsIDEzMTY2NywgMTMxNjY5LCAxMzE2NzEsIDEzMTY3MywgMTMxNjc1LCAxMzE2NzcsIDEzMTY3OSwgCi0gICAgMTMxNjgxLCAxMzE2ODMsIDEzMTY4NSwgMTMxNjg3LCAxMzE2ODksIDEzMTY5MSwgMTMxNjkzLCAxMzE2OTUsIDEzMTY5NywgCi0gICAgMTMxNjk5LCAxMzE3MDEsIDEzMTcwMywgMTMxNzA1LCAxMzE3MDcsIDEzMTcwOSwgMTMxNzExLCAxMzE3MTMsIDEzMTcxNSwgCi0gICAgMTMxNzE3LCAxMzE3MTksIDEzMTcyMSwgMTMxNzIzLCAxMzE3MjUsIDEzMTcyNywgMTMxNzI5LCAxMzE3MzEsIDEzMTczMywgCi0gICAgMTMxNzM1LCAxMzE3MzcsIDEzMTczOSwgMTMxNzQxLCAxMzE3NDMsIDEzMTc0NSwgMTMxNzQ3LCAxMzE3NDksIDEzMTc1MSwgCi0gICAgMTMxNzUzLCAxMzE3NTUsIDEzMTc1NywgMTMxNzU5LCAxMzE3NjEsIDEzMTc2MywgMTMxNzY1LCAxMzE3NjcsIDEzMTc2OSwgCi0gICAgMTMxNzcxLCAxMzE3NzMsIDEzMTc3NSwgMTMxNzc3LCAxMzE3NzksIDEzMTc4MSwgMTMxNzgzLCAxMzE3ODUsIDEzMTc4NywgCi0gICAgMTMxNzg5LCAxMzE3OTEsIDEzMTc5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTMxNzk1LCAxMzE4MDUsIDEzMTgxNSwgMTMxODI0LCAxMzE4MzMsIDEzMTg0NiwgMTMxODU5LCAxMzE4NzEsIDEzMTg4MywgCi0gICAgMTMxODkzLCAxMzE5MDMsIDEzMTkxMywgMTMxOTIzLCAxMzE5MzQsIDEzMTk0NSwgMTMxOTU1LCAxMzE5NjQsIDEzMTk3MywgCi0gICAgMTMxOTgyLCAxMzE5OTUsIDEzMjAwOCwgMTMyMDIwLCAxMzIwMzIsIDEzMjA0MiwgMTMyMDUyLCAxMzIwNjIsIDEzMjA3MiwgCi0gICAgMTMyMDgxLCAxMzIwOTAsIDEzMjA5OSwgMTMyMTA4LCAxMzIxMTcsIDEzMjEyNiwgMTMyMTM1LCAxMzIxNDQsIDEzMjE1MywgCi0gICAgMTMyMTYyLCAxMzIxNzEsIDEzMjE4MCwgMTMyMTkxLCAxMzIyMDEsIDEzMjIxMSwgMTMyMjI0LCAxMzIyMzQsIDEzMjI0NywgCi0gICAgMTMyMjU0LCAxMzIyNjQsIDEzMjI3MSwgMTMyMjc4LCAxMzIyODUsIDEzMjI5MiwgMTMyMjk5LCAxMzIzMDYsIDEzMjMxNSwgCi0gICAgMTMyMzI0LCAxMzIzMzMsIDEzMjM0MiwgMTMyMzUxLCAxMzIzNjAsIDEzMjM2OSwgMTMyMzc4LCAxMzIzODYsIDEzMjM5NCwgCi0gICAgMTMyNDAxLCAxMzI0MTEsIDEzMjQyMCwgMTMyNDI4LCAxMzI0MzUsIDEzMjQ0NSwgMTMyNDU0LCAxMzI0NTgsIDEzMjQ2MiwgCi0gICAgMTMyNDY2LCAxMzI0NzAsIDEzMjQ3NCwgMTMyNDc4LCAxMzI0ODIsIDEzMjQ4NiwgMTMyNDkwLCAxMzI0OTQsIDEzMjQ5NywgCi0gICAgMTMyNTAxLCAxMzI1MDQsIDEzMjUwNywgMTMyNTExLCAxMzI1MTUsIDEzMjUxOSwgMTMyNTIzLCAxMzI1MjcsIDEzMjUzMSwgCi0gICAgMTMyNTM1LCAxMzI1MzksIDEzMjU0MywgMTMyNTQ3LCAxMzI1NTEsIDEzMjU1NSwgMTMyNTU5LCAxMzI1NjMsIDEzMjU2NywgCi0gICAgMTMyNTcxLCAxMzI1NzUsIDEzMjU3OSwgMTMyNTgzLCAxMzI1ODcsIDEzMjU5MSwgMTMyNTk1LCAxMzI1OTksIDEzMjYwMywgCi0gICAgMTMyNjA3LCAxMzI2MTEsIDEzMjYxNSwgMTMyNjE5LCAxMzI2MjMsIDEzMjYyNywgMTMyNjMxLCAxMzI2MzUsIDEzMjYzOSwgCi0gICAgMTMyNjQzLCAxMzI2NDcsIDEzMjY1MSwgMTMyNjU1LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIDEzMjY3NSwgCi0gICAgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIDEzMjcxMSwgCi0gICAgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIDEzMjc0NywgCi0gICAgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIDEzMjc4MywgCi0gICAgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIDEzMjgxOSwgCi0gICAgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTAsIDEzMjg1NCwgCi0gICAgMTMyODU4LCAxMzI4NjIsIDEzMjg2NiwgMTMyODcwLCAxMzI4NzQsIDEzMjg3OCwgMTMyODgyLCAxMzI4ODYsIDEzMjg5MCwgCi0gICAgMTMyODk0LCAxMzI4OTgsIDEzMjkwMiwgMTMyOTA2LCAxMzI5MTAsIDEzMjkxNCwgMTMyOTE4LCAxMzI5MjIsIDEzMjkyNiwgCi0gICAgMTMyOTMwLCAxMzI5MzQsIDEzMjkzOCwgMTMyOTQyLCAxMzI5NDYsIDEzMjk1MCwgMTMyOTU0LCAxMzI5NTgsIDEzMjk2MiwgCi0gICAgMTMyOTY2LCAxMzI5NzAsIDEzMjk3NCwgMTMyOTc4LCAxMzI5ODIsIDEzMjk4NiwgMTMyOTkwLCAxMzI5OTQsIDEzMjk5OCwgCi0gICAgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIDEzMzAzNCwgCi0gICAgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIDEzMzA3MCwgCi0gICAgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIDEzMzEwNiwgCi0gICAgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIDEzMzE0MiwgCi0gICAgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIDEzMzE3OCwgCi0gICAgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIDEzMzIxNCwgCi0gICAgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIDEzMzI1MCwgCi0gICAgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIDEzMzI4NiwgCi0gICAgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIDEzMzMyMiwgCi0gICAgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIDEzMzM1OCwgCi0gICAgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIDEzMzM5NCwgCi0gICAgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIDEzMzQzMCwgCi0gICAgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIDEzMzQ2NiwgCi0gICAgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIDEzMzUwMiwgCi0gICAgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIDEzMzUzOCwgCi0gICAgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIDEzMzU3NCwgCi0gICAgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIDEzMzYxMCwgCi0gICAgMTMzNjE0LCAxMzM2MTksIDEzMzYyNCwgMTMzNjI5LCAxMzM2MzMsIDEzMzYzOSwgMTMzNjQ2LCAxMzM2NTMsIDEzMzY2MCwgCi0gICAgMTMzNjY3LCAxMzM2NzQsIDEzMzY4MSwgMTMzNjg4LCAxMzM2OTUsIDEzMzcwMiwgMTMzNzA5LCAxMzM3MTYsIDEzMzcyMywgCi0gICAgMTMzNzMwLCAxMzM3MzYsIDEzMzc0MywgMTMzNzUwLCAxMzM3NTYsIDEzMzc2MywgMTMzNzcwLCAxMzM3NzcsIDEzMzc4NCwgCi0gICAgMTMzNzkxLCAxMzM3OTgsIDEzMzgwNSwgMTMzODEyLCAxMzM4MTksIDEzMzgyNiwgMTMzODMzLCAxMzM4NDAsIDEzMzg0NywgCi0gICAgMTMzODUzLCAxMzM4NTksIDEzMzg2NiwgMTMzODczLCAxMzM4ODIsIDEzMzg5MSwgMTMzOTAwLCAxMzM5MDksIDEzMzkxNCwgCi0gICAgMTMzOTE5LCAxMzM5MjUsIDEzMzkzMSwgMTMzOTM3LCAxMzM5NDMsIDEzMzk0OSwgMTMzOTU1LCAxMzM5NjEsIDEzMzk2NywgCi0gICAgMTMzOTczLCAxMzM5NzksIDEzMzk4NSwgMTMzOTkxLCAxMzM5OTYsIDEzNDAwMiwgMTM0MDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjk0NTQsIDEyOTQ1NywgMTI5NDYxLCAxMjk0NjUsIDEyOTQ2OCwgMTI5NDcyLCAxMjk0NzYsIAorICAgIDEyOTQ3OSwgMTI5NDgyLCAxMjk0ODYsIDEyOTQ5MCwgMTI5NDkzLCAxMjk0OTYsIDEyOTQ5OSwgMTI5NTAyLCAxMjk1MDcsIAorICAgIDEyOTUxMCwgMTI5NTE0LCAxMjk1MTcsIDEyOTUyMCwgMTI5NTIzLCAxMjk1MjYsIDEyOTUyOSwgMTI5NTMyLCAxMjk1MzUsIAorICAgIDEyOTUzOCwgMTI5NTQxLCAxMjk1NDQsIDEyOTU0NywgMTI5NTUxLCAxMjk1NTUsIDEyOTU1OSwgMTI5NTYzLCAxMjk1NjgsIAorICAgIDEyOTU3MywgMTI5NTc5LCAxMjk1ODUsIDEyOTU5MSwgMTI5NTk2LCAxMjk2MDIsIDEyOTYwOCwgMTI5NjE0LCAxMjk2MTksIAorICAgIDEyOTYyNSwgMTI5NjMxLCAxMjk2MzYsIDEyOTY0MSwgMTI5NjQ3LCAxMjk2NTIsIDEyOTY1OCwgMTI5NjY0LCAxMjk2NjksIAorICAgIDEyOTY3NSwgMTI5NjgxLCAxMjk2ODYsIDEyOTY5MiwgMTI5Njk4LCAxMjk3MDQsIDEyOTcxMCwgMTI5NzE2LCAxMjk3MjAsIAorICAgIDEyOTcyNSwgMTI5NzI5LCAxMjk3MzQsIDEyOTczOCwgMTI5NzQzLCAxMjk3NDgsIDEyOTc1NCwgMTI5NzYwLCAxMjk3NjYsIAorICAgIDEyOTc3MSwgMTI5Nzc3LCAxMjk3ODMsIDEyOTc4OSwgMTI5Nzk0LCAxMjk4MDAsIDEyOTgwNiwgMTI5ODExLCAxMjk4MTYsIAorICAgIDEyOTgyMiwgMTI5ODI3LCAxMjk4MzMsIDEyOTgzOSwgMTI5ODQ0LCAxMjk4NTAsIDEyOTg1NiwgMTI5ODYxLCAxMjk4NjcsIAorICAgIDEyOTg3MywgMTI5ODc5LCAxMjk4ODUsIDEyOTg5MSwgMTI5ODk2LCAxMjk5MDAsIDEyOTkwNSwgMTI5OTA3LCAxMjk5MTEsIAorICAgIDEyOTkxNCwgMTI5OTE3LCAxMjk5MjAsIDEyOTkyMywgMTI5OTI2LCAxMjk5MjksIDEyOTkzMiwgMTI5OTM1LCAxMjk5MzgsIAorICAgIDEyOTk0MSwgMTI5OTQ0LCAxMjk5NDcsIDEyOTk1MCwgMTI5OTUzLCAxMjk5NTYsIDEyOTk1OSwgMTI5OTYyLCAxMjk5NjUsIAorICAgIDEyOTk2OCwgMTI5OTcxLCAxMjk5NzQsIDEyOTk3NywgMTI5OTgwLCAxMjk5ODMsIDEyOTk4NiwgMTI5OTg5LCAxMjk5OTIsIAorICAgIDEyOTk5NSwgMTI5OTk4LCAxMzAwMDEsIDEzMDAwNCwgMTMwMDA3LCAxMzAwMTAsIDEzMDAxMywgMTMwMDE2LCAxMzAwMTksIAorICAgIDEzMDAyMiwgMTMwMDI1LCAxMzAwMjgsIDEzMDAzMSwgMTMwMDM0LCAxMzAwMzcsIDEzMDA0MCwgMTMwMDQzLCAxMzAwNDYsIAorICAgIDEzMDA0OSwgMTMwMDUyLCAxMzAwNTUsIDEzMDA1OCwgMTMwMDYxLCAxMzAwNjQsIDEzMDA2NywgMTMwMDcwLCAxMzAwNzMsIAorICAgIDEzMDA3NiwgMTMwMDc5LCAxMzAwODIsIDEzMDA4NSwgMTMwMDg4LCAxMzAwOTEsIDEzMDA5NCwgMTMwMDk3LCAxMzAxMDAsIAorICAgIDEzMDEwMywgMTMwMTA2LCAxMzAxMDksIDEzMDExMiwgMTMwMTE1LCAxMzAxMTgsIDEzMDEyMSwgMTMwMTI0LCAxMzAxMjcsIAorICAgIDEzMDEzMCwgMTMwMTMzLCAxMzAxMzYsIDEzMDEzOSwgMTMwMTQyLCAxMzAxNDUsIDEzMDE0OCwgMTMwMTUxLCAxMzAxNTQsIAorICAgIDEzMDE1NywgMTMwMTYwLCAxMzAxNjMsIDEzMDE2NiwgMTMwMTY5LCAxMzAxNzIsIDEzMDE3NSwgMTMwMTc4LCAxMzAxODEsIAorICAgIDEzMDE4NCwgMTMwMTg3LCAxMzAxOTAsIDEzMDE5MywgMTMwMTk2LCAxMzAxOTksIDEzMDIwMiwgMTMwMjA1LCAxMzAyMDgsIAorICAgIDEzMDIxMSwgMTMwMjE0LCAxMzAyMTcsIDEzMDIyMCwgMTMwMjIzLCAxMzAyMjYsIDEzMDIyOSwgMTMwMjMyLCAxMzAyMzUsIAorICAgIDEzMDIzOCwgMTMwMjQxLCAxMzAyNDQsIDEzMDI0NywgMTMwMjUwLCAxMzAyNTMsIDEzMDI1NiwgMTMwMjU5LCAxMzAyNjIsIAorICAgIDEzMDI2NSwgMTMwMjY4LCAxMzAyNzEsIDEzMDI3NCwgMTMwMjc3LCAxMzAyODAsIDEzMDI4MywgMTMwMjg2LCAxMzAyODksIAorICAgIDEzMDI5MiwgMTMwMjk1LCAxMzAyOTgsIDEzMDMwMSwgMTMwMzA0LCAxMzAzMDcsIDEzMDMxMCwgMTMwMzEzLCAxMzAzMTYsIAorICAgIDEzMDMxOSwgMTMwMzIyLCAxMzAzMjUsIDEzMDMyOCwgMTMwMzMxLCAxMzAzMzQsIDEzMDMzNywgMTMwMzQwLCAxMzAzNDMsIAorICAgIDEzMDM0NiwgMTMwMzQ5LCAxMzAzNTIsIDEzMDM1NSwgMTMwMzU4LCAxMzAzNjEsIDEzMDM2NCwgMTMwMzY3LCAxMzAzNzAsIAorICAgIDEzMDM3MywgMTMwMzc2LCAxMzAzNzksIDEzMDM4MiwgMTMwMzg1LCAxMzAzODgsIDEzMDM5MSwgMTMwMzk0LCAxMzAzOTcsIAorICAgIDEzMDQwMCwgMTMwNDAzLCAxMzA0MDYsIDEzMDQwOSwgMTMwNDEyLCAxMzA0MTUsIDEzMDQxOCwgMTMwNDIxLCAxMzA0MjQsIAorICAgIDEzMDQyNywgMTMwNDMwLCAxMzA0MzMsIDEzMDQzNiwgMTMwNDM5LCAxMzA0NDIsIDEzMDQ0NSwgMTMwNDQ4LCAxMzA0NTEsIAorICAgIDEzMDQ1NCwgMTMwNDU3LCAxMzA0NjAsIDEzMDQ2MywgMTMwNDY2LCAxMzA0NjksIDEzMDQ3MiwgMTMwNDc1LCAxMzA0NzgsIAorICAgIDEzMDQ4MSwgMTMwNDg0LCAxMzA0ODcsIDEzMDQ5MCwgMTMwNDkzLCAxMzA0OTYsIDEzMDQ5OSwgMTMwNTAyLCAxMzA1MDUsIAorICAgIDEzMDUwOCwgMTMwNTExLCAxMzA1MTQsIDEzMDUxNywgMTMwNTIwLCAxMzA1MjMsIDEzMDUyNiwgMTMwNTI5LCAxMzA1MzIsIAorICAgIDEzMDUzNSwgMTMwNTM4LCAxMzA1NDEsIDEzMDU0NCwgMTMwNTQ3LCAxMzA1NTAsIDEzMDU1MywgMTMwNTU2LCAxMzA1NTksIAorICAgIDEzMDU2MiwgMTMwNTY1LCAxMzA1NjgsIDEzMDU3MSwgMTMwNTc0LCAxMzA1NzcsIDEzMDU4MCwgMTMwNTgzLCAxMzA1ODYsIAorICAgIDEzMDU4OSwgMTMwNTkyLCAxMzA1OTUsIDEzMDU5OCwgMTMwNjAxLCAxMzA2MDQsIDEzMDYwNywgMTMwNjEwLCAxMzA2MTMsIAorICAgIDEzMDYxNiwgMTMwNjE5LCAxMzA2MjIsIDEzMDYyNSwgMTMwNjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzA2MzEsIDEzMDYzMywgMTMwNjM1LCAxMzA2NDAsIDEzMDY0MiwgMTMwNjQ3LCAxMzA2NDksIAorICAgIDEzMDY1NCwgMTMwNjU2LCAxMzA2NjEsIDEzMDY2MywgMTMwNjY1LCAxMzA2NjcsIDEzMDY2OSwgMTMwNjcxLCAxMzA2NzMsIAorICAgIDEzMDY3NSwgMTMwNjc3LCAxMzA2NzksIDEzMDY4MiwgMTMwNjg1LCAxMzA2ODcsIDEzMDY4OSwgMTMwNjkzLCAxMzA2OTYsIAorICAgIDEzMDcwMSwgMTMwNzAzLCAxMzA3MDUsIDEzMDcwNywgMTMwNzExLCAxMzA3MTQsIDEzMDcxNiwgMTMwNzIwLCAxMzA3MjIsIAorICAgIDEzMDcyNiwgMTMwNzI4LCAxMzA3MzIsIDEzMDczNSwgMTMwNzM3LCAxMzA3NDEsIDEzMDc0NSwgMTMwNzQ3LCAxMzA3NTMsIAorICAgIDEzMDc1NSwgMTMwNzYwLCAxMzA3NjIsIDEzMDc2NywgMTMwNzY5LCAxMzA3NzQsIDEzMDc3NiwgMTMwNzgxLCAxMzA3ODMsIAorICAgIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTIsIDEzMDc5NCwgMTMwODAxLCAxMzA4MDMsIDEzMDgwNSwgMTMwODA3LCAxMzA4MTIsIAorICAgIDEzMDgxNCwgMTMwODE2LCAxMzA4MTgsIDEzMDgyMCwgMTMwODIyLCAxMzA4MjcsIDEzMDgzMSwgMTMwODMzLCAxMzA4MzgsIAorICAgIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDksIDEzMDg1MywgMTMwODU1LCAxMzA4NjAsIDEzMDg2NCwgMTMwODY2LCAxMzA4NjgsIAorICAgIDEzMDg3MCwgMTMwODcyLCAxMzA4NzYsIDEzMDg3OCwgMTMwODgzLCAxMzA4ODUsIDEzMDg5MSwgMTMwODkzLCAxMzA4OTksIAorICAgIDEzMDkwMSwgMTMwOTAzLCAxMzA5MDUsIDEzMDkwOSwgMTMwOTExLCAxMzA5MTgsIDEzMDkyMCwgMTMwOTI3LCAxMzA5MjksIAorICAgIDEzMDkzNCwgMTMwOTM5LCAxMzA5NDEsIDEzMDk0NywgMTMwOTUzLCAxMzA5NTUsIDEzMDk2MSwgMTMwOTY2LCAxMzA5NjgsIAorICAgIDEzMDk3NCwgMTMwOTgwLCAxMzA5ODIsIDEzMDk4OCwgMTMwOTk0LCAxMzA5OTYsIDEzMTAwMiwgMTMxMDA2LCAxMzEwMDgsIAorICAgIDEzMTAxMywgMTMxMDE1LCAxMzEwMTcsIDEzMTAyMiwgMTMxMDI0LCAxMzEwMjYsIDEzMTAzMiwgMTMxMDM0LCAxMzEwMzksIAorICAgIDEzMTA0MywgMTMxMDQ1LCAxMzEwNTAsIDEzMTA1NCwgMTMxMDU2LCAxMzEwNjIsIDEzMTA2NCwgMTMxMDY4LCAxMzEwNzAsIAorICAgIDEzMTA3NCwgMTMxMDc2LCAxMzEwODMsIDEzMTA5MCwgMTMxMDkyLCAxMzEwOTksIDEzMTEwNiwgMTMxMTA4LCAxMzExMTMsIAorICAgIDEzMTExNSwgMTMxMTIyLCAxMzExMjQsIDEzMTEyOSwgMTMxMTMxLCAxMzExMzcsIDEzMTEzOSwgMTMxMTQzLCAxMzExNDUsIAorICAgIDEzMTE1MSwgMTMxMTUzLCAxMzExNTcsIDEzMTE1OSwgMTMxMTY1LCAxMzExNjcsIDEzMTE2OSwgMTMxMTcxLCAxMzExNzYsIAorICAgIDEzMTE4MSwgMTMxMTgzLCAxMzExODUsIDEzMTE5NCwgMTMxMTk4LCAxMzEyMDUsIDEzMTIxMiwgMTMxMjE3LCAxMzEyMjIsIAorICAgIDEzMTIzNCwgMTMxMjM2LCAxMzEyMzgsIDEzMTI0MCwgMTMxMjQyLCAxMzEyNDQsIDEzMTI0NiwgMTMxMjQ4LCAxMzEyNTAsIAorICAgIDEzMTI1MiwgMTMxMjU0LCAxMzEyNTYsIDEzMTI1OCwgMTMxMjYwLCAxMzEyNjIsIDEzMTI2NCwgMTMxMjY2LCAxMzEyNjgsIAorICAgIDEzMTI3MCwgMTMxMjcyLCAxMzEyNzQsIDEzMTI3NiwgMTMxMjgyLCAxMzEyODksIDEzMTI5NCwgMTMxMjk5LCAxMzEzMTAsIAorICAgIDEzMTMxMiwgMTMxMzE0LCAxMzEzMTYsIDEzMTMxOCwgMTMxMzIwLCAxMzEzMjIsIDEzMTMyNCwgMTMxMzI2LCAxMzEzMjgsIAorICAgIDEzMTMzMCwgMTMxMzMyLCAxMzEzMzQsIDEzMTMzNiwgMTMxMzM4LCAxMzEzNDAsIDEzMTM0MiwgMTMxMzQ3LCAxMzEzNDksIAorICAgIDEzMTM1MSwgMTMxMzU3LCAxMzEzNjksIDEzMTM4MCwgMTMxMzgyLCAxMzEzODQsIDEzMTM4NiwgMTMxMzg4LCAxMzEzOTAsIAorICAgIDEzMTM5MiwgMTMxMzk0LCAxMzEzOTYsIDEzMTM5OCwgMTMxNDAwLCAxMzE0MDIsIDEzMTQwNCwgMTMxNDA2LCAxMzE0MDgsIAorICAgIDEzMTQxMCwgMTMxNDEyLCAxMzE0MTQsIDEzMTQxNiwgMTMxNDE4LCAxMzE0MjAsIDEzMTQyMiwgMTMxNDI0LCAxMzE0MjYsIAorICAgIDEzMTQyOCwgMTMxNDMwLCAxMzE0MzIsIDEzMTQzNCwgMTMxNDM2LCAxMzE0MzgsIDEzMTQ0MCwgMTMxNDQyLCAxMzE0NDQsIAorICAgIDEzMTQ0NiwgMTMxNDQ4LCAxMzE0NTAsIDEzMTQ1MiwgMTMxNDU0LCAxMzE0NTYsIDEzMTQ1OCwgMTMxNDYwLCAxMzE0NjIsIAorICAgIDEzMTQ2NCwgMTMxNDY2LCAxMzE0NjgsIDEzMTQ3MCwgMTMxNDcyLCAxMzE0NzQsIDEzMTQ3NiwgMTMxNDc4LCAxMzE0ODAsIAorICAgIDEzMTQ4MiwgMTMxNDg0LCAxMzE0ODYsIDEzMTQ4OCwgMTMxNDkwLCAxMzE0OTIsIDEzMTQ5NCwgMTMxNDk2LCAxMzE0OTgsIAorICAgIDEzMTUwMCwgMTMxNTAyLCAxMzE1MDQsIDEzMTUwNiwgMTMxNTA4LCAxMzE1MTAsIDEzMTUxMiwgMTMxNTE0LCAxMzE1MTYsIAorICAgIDEzMTUxOCwgMTMxNTIwLCAxMzE1MjIsIDEzMTUyNCwgMTMxNTI2LCAxMzE1MjgsIDEzMTUzMCwgMTMxNTMyLCAxMzE1MzQsIAorICAgIDEzMTUzNiwgMTMxNTM4LCAxMzE1NDAsIDEzMTU0MiwgMTMxNTQ0LCAxMzE1NDYsIDEzMTU0OCwgMTMxNTUwLCAxMzE1NTIsIAorICAgIDEzMTU1NCwgMTMxNTU2LCAxMzE1NTgsIDEzMTU2MCwgMTMxNTYyLCAxMzE1NjQsIDEzMTU2NiwgMTMxNTY4LCAxMzE1NzAsIAorICAgIDEzMTU3MiwgMTMxNTc0LCAxMzE1NzYsIDEzMTU3OCwgMTMxNTgwLCAxMzE1ODIsIDEzMTU4NCwgMTMxNTg2LCAxMzE1ODgsIAorICAgIDEzMTU5MCwgMTMxNTkyLCAxMzE1OTQsIDEzMTU5NiwgMTMxNTk4LCAxMzE2MDAsIDEzMTYwMiwgMTMxNjA0LCAxMzE2MDYsIAorICAgIDEzMTYwOCwgMTMxNjEwLCAxMzE2MTIsIDEzMTYxNCwgMTMxNjE2LCAxMzE2MTgsIDEzMTYyMCwgMTMxNjIyLCAxMzE2MjQsIAorICAgIDEzMTYyNiwgMTMxNjI4LCAxMzE2MzAsIDEzMTYzMiwgMTMxNjM0LCAxMzE2MzYsIDEzMTYzOCwgMTMxNjQwLCAxMzE2NDIsIAorICAgIDEzMTY0NCwgMTMxNjQ2LCAxMzE2NDgsIDEzMTY1MCwgMTMxNjUyLCAxMzE2NTQsIDEzMTY1NiwgMTMxNjU4LCAxMzE2NjAsIAorICAgIDEzMTY2MiwgMTMxNjY0LCAxMzE2NjYsIDEzMTY2OCwgMTMxNjcwLCAxMzE2NzIsIDEzMTY3NCwgMTMxNjc2LCAxMzE2NzgsIAorICAgIDEzMTY4MCwgMTMxNjgyLCAxMzE2ODQsIDEzMTY4NiwgMTMxNjg4LCAxMzE2OTAsIDEzMTY5MiwgMTMxNjk0LCAxMzE2OTYsIAorICAgIDEzMTY5OCwgMTMxNzAwLCAxMzE3MDIsIDEzMTcwNCwgMTMxNzA2LCAxMzE3MDgsIDEzMTcxMCwgMTMxNzEyLCAxMzE3MTQsIAorICAgIDEzMTcxNiwgMTMxNzE4LCAxMzE3MjAsIDEzMTcyMiwgMTMxNzI0LCAxMzE3MjYsIDEzMTcyOCwgMTMxNzMwLCAxMzE3MzIsIAorICAgIDEzMTczNCwgMTMxNzM2LCAxMzE3MzgsIDEzMTc0MCwgMTMxNzQyLCAxMzE3NDQsIDEzMTc0NiwgMTMxNzQ4LCAxMzE3NTAsIAorICAgIDEzMTc1MiwgMTMxNzU0LCAxMzE3NTYsIDEzMTc1OCwgMTMxNzYwLCAxMzE3NjIsIDEzMTc2NCwgMTMxNzY2LCAxMzE3NjgsIAorICAgIDEzMTc3MCwgMTMxNzcyLCAxMzE3NzQsIDEzMTc3NiwgMTMxNzc4LCAxMzE3ODAsIDEzMTc4MiwgMTMxNzg0LCAxMzE3ODYsIAorICAgIDEzMTc4OCwgMTMxNzkwLCAxMzE3OTIsIDEzMTc5NCwgMTMxNzk2LCAxMzE3OTgsIDEzMTgwMCwgMTMxODAyLCAxMzE4MDQsIAorICAgIDEzMTgwNiwgMTMxODA4LCAxMzE4MTAsIDEzMTgxMiwgMTMxODE0LCAxMzE4MTYsIDEzMTgxOCwgMTMxODIwLCAxMzE4MjIsIAorICAgIDEzMTgyNCwgMTMxODI2LCAxMzE4MjgsIDEzMTgzMCwgMTMxODMyLCAxMzE4MzQsIDEzMTgzNiwgMTMxODM4LCAxMzE4NDAsIAorICAgIDEzMTg0MiwgMTMxODQ0LCAxMzE4NDYsIDEzMTg0OCwgMTMxODUwLCAxMzE4NTIsIDEzMTg1NCwgMTMxODU2LCAxMzE4NTgsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTg2MCwgMTMxODcwLCAxMzE4ODAsIDEzMTg4OSwgMTMxODk4LCAxMzE5MTEsIAorICAgIDEzMTkyNCwgMTMxOTM2LCAxMzE5NDgsIDEzMTk1OCwgMTMxOTY4LCAxMzE5NzgsIDEzMTk4OCwgMTMxOTk5LCAxMzIwMTAsIAorICAgIDEzMjAyMCwgMTMyMDI5LCAxMzIwMzgsIDEzMjA0NywgMTMyMDYwLCAxMzIwNzMsIDEzMjA4NSwgMTMyMDk3LCAxMzIxMDcsIAorICAgIDEzMjExNywgMTMyMTI3LCAxMzIxMzcsIDEzMjE0NiwgMTMyMTU1LCAxMzIxNjQsIDEzMjE3MywgMTMyMTgyLCAxMzIxOTEsIAorICAgIDEzMjIwMCwgMTMyMjA5LCAxMzIyMTgsIDEzMjIyNywgMTMyMjM2LCAxMzIyNDUsIDEzMjI1NiwgMTMyMjY2LCAxMzIyNzYsIAorICAgIDEzMjI4OSwgMTMyMjk5LCAxMzIzMTIsIDEzMjMxOSwgMTMyMzI5LCAxMzIzMzYsIDEzMjM0MywgMTMyMzUwLCAxMzIzNTcsIAorICAgIDEzMjM2NCwgMTMyMzcxLCAxMzIzODAsIDEzMjM4OSwgMTMyMzk4LCAxMzI0MDcsIDEzMjQxNiwgMTMyNDI1LCAxMzI0MzQsIAorICAgIDEzMjQ0MywgMTMyNDUxLCAxMzI0NTksIDEzMjQ2NiwgMTMyNDc2LCAxMzI0ODUsIDEzMjQ5MywgMTMyNTAwLCAxMzI1MTAsIAorICAgIDEzMjUxOSwgMTMyNTI5LCAxMzI1MzksIDEzMjU1MCwgMTMyNTYwLCAxMzI1NjksIDEzMjU3OSwgMTMyNTg4LCAxMzI1OTgsIAorICAgIDEzMjYwNiwgMTMyNjEwLCAxMzI2MTQsIDEzMjYxOCwgMTMyNjIyLCAxMzI2MjYsIDEzMjYzMCwgMTMyNjM0LCAxMzI2MzgsIAorICAgIDEzMjY0MiwgMTMyNjQ2LCAxMzI2NDksIDEzMjY1MywgMTMyNjU2LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIAorICAgIDEzMjY3NSwgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIAorICAgIDEzMjcxMSwgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIAorICAgIDEzMjc0NywgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIAorICAgIDEzMjc4MywgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIAorICAgIDEzMjgxOSwgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTEsIAorICAgIDEzMjg1NSwgMTMyODU5LCAxMzI4NjMsIDEzMjg2NywgMTMyODcxLCAxMzI4NzUsIDEzMjg3OSwgMTMyODgzLCAxMzI4ODcsIAorICAgIDEzMjg5MSwgMTMyODk1LCAxMzI4OTksIDEzMjkwMywgMTMyOTA3LCAxMzI5MTEsIDEzMjkxNSwgMTMyOTE5LCAxMzI5MjMsIAorICAgIDEzMjkyNywgMTMyOTMxLCAxMzI5MzUsIDEzMjkzOSwgMTMyOTQzLCAxMzI5NDcsIDEzMjk1MSwgMTMyOTU1LCAxMzI5NTksIAorICAgIDEzMjk2MywgMTMyOTY3LCAxMzI5NzEsIDEzMjk3NSwgMTMyOTc5LCAxMzI5ODMsIDEzMjk4NywgMTMyOTkxLCAxMzI5OTUsIAorICAgIDEzMjk5OSwgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIAorICAgIDEzMzAzNCwgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIAorICAgIDEzMzA3MCwgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIAorICAgIDEzMzEwNiwgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIAorICAgIDEzMzE0MiwgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIAorICAgIDEzMzE3OCwgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIAorICAgIDEzMzIxNCwgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIAorICAgIDEzMzI1MCwgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIAorICAgIDEzMzI4NiwgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIAorICAgIDEzMzMyMiwgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIAorICAgIDEzMzM1OCwgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIAorICAgIDEzMzM5NCwgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIAorICAgIDEzMzQzMCwgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIAorICAgIDEzMzQ2NiwgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIAorICAgIDEzMzUwMiwgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIAorICAgIDEzMzUzOCwgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIAorICAgIDEzMzU3NCwgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIAorICAgIDEzMzYxMCwgMTMzNjE0LCAxMzM2MTgsIDEzMzYyMiwgMTMzNjI2LCAxMzM2MzAsIDEzMzYzNCwgMTMzNjM4LCAxMzM2NDIsIAorICAgIDEzMzY0NiwgMTMzNjUwLCAxMzM2NTQsIDEzMzY1OCwgMTMzNjYyLCAxMzM2NjYsIDEzMzY3MCwgMTMzNjc0LCAxMzM2NzgsIAorICAgIDEzMzY4MiwgMTMzNjg2LCAxMzM2OTAsIDEzMzY5NCwgMTMzNjk4LCAxMzM3MDIsIDEzMzcwNiwgMTMzNzEwLCAxMzM3MTQsIAorICAgIDEzMzcxOCwgMTMzNzIyLCAxMzM3MjYsIDEzMzczMCwgMTMzNzM0LCAxMzM3MzgsIDEzMzc0MiwgMTMzNzQ2LCAxMzM3NTAsIAorICAgIDEzMzc1NCwgMTMzNzU4LCAxMzM3NjIsIDEzMzc2NiwgMTMzNzcxLCAxMzM3NzYsIDEzMzc4MSwgMTMzNzg1LCAxMzM3OTEsIAorICAgIDEzMzc5OCwgMTMzODA1LCAxMzM4MTIsIDEzMzgxOSwgMTMzODI2LCAxMzM4MzMsIDEzMzg0MCwgMTMzODQ3LCAxMzM4NTQsIAorICAgIDEzMzg2MSwgMTMzODY4LCAxMzM4NzUsIDEzMzg4MiwgMTMzODg4LCAxMzM4OTUsIDEzMzkwMiwgMTMzOTA4LCAxMzM5MTUsIAorICAgIDEzMzkyMiwgMTMzOTI5LCAxMzM5MzYsIDEzMzk0MywgMTMzOTUwLCAxMzM5NTcsIDEzMzk2NCwgMTMzOTcxLCAxMzM5NzgsIAorICAgIDEzMzk4NSwgMTMzOTkyLCAxMzM5OTksIDEzNDAwNSwgMTM0MDExLCAxMzQwMTgsIDEzNDAyNSwgMTM0MDM0LCAxMzQwNDMsIAorICAgIDEzNDA1MiwgMTM0MDYxLCAxMzQwNjYsIDEzNDA3MSwgMTM0MDc3LCAxMzQwODMsIDEzNDA4OSwgMTM0MDk1LCAxMzQxMDEsIAorICAgIDEzNDEwNywgMTM0MTEzLCAxMzQxMTksIDEzNDEyNSwgMTM0MTMxLCAxMzQxMzcsIDEzNDE0MywgMTM0MTQ4LCAxMzQxNTQsIAorICAgIDEzNDE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiAvKiBuYW1lLT5jb2RlIGRpY3Rpb25hcnkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29kZV9oYXNoW10gPSB7CiAgICAgNzQyMjQsIDQ4NTEsIDAsIDc4MTU2LCA3ODQ5OSwgMTI4Njg1LCA3OTI5LCAwLCAxOTQ2ODIsIDEyNzc2NiwgNzg1MDAsIAotICAgIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDk4MzgxMiwgNjk4NTAsIDEzMTkyLCA4NjUxLCAwLCAwLCAKKyAgICA2NjQ4MCwgMCwgNDI4MzMsIDc0NTI5LCAxMjA2NCwgMCwgNTk2LCA5ODM4MjEsIDY5ODUwLCAxMzE5MiwgODY1MSwgMCwgMCwgCiAgICAgMTIwMjE4LCAxMjk5NSwgNjQ4NjUsIDEzNzMsIDAsIDAsIDU4MTYsIDExOTA2NywgNjQ4MTAsIDQyMzEsIDY4MjUsIDQyODk3LCAKICAgICA0MjMzLCA0MjM0LCA0MjMyLCA5MTc4MzYsIDc0NDE1LCAxMjAyMTAsIDYzODQsIDkxNzg0MCwgNzgxMDgsIDg4NTEsIDAsIAotICAgIDEyODU1MywgMCwgNDE2MDEsIDg4NzQsIDk4Mzc3NCwgNzc0OCwgMCwgMCwgMCwgMTI3OTM5LCA0MTYwMywgOTc4NCwgMCwgCisgICAgMTI4NTUzLCAwLCA0MTYwMSwgODg3NCwgOTgzNzgzLCA3NzQ4LCAwLCAwLCAwLCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCAKICAgICA5MTg4LCA0MTYwMCwgMCwgMTIwNjE4LCAxMjgzNDMsIDE0NTcsIDM1MzUsIDAsIDAsIDAsIDAsIDY1MjQwLCAxMTk1MSwgMCwgCiAgICAgMzQwNCwgMCwgMCwgMCwgMTc1OSwgMCwgNDEwNzYsIDY4MzgzLCAxMjA1NzIsIDExOTIwNSwgNjY1NzcsIDk0MDE0LCAKLSAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODUxLCAKKyAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODYwLCAKICAgICA2NTI4OCwgMCwgMTEzOTgsIDAsIDkyNDE3LCAxMTkyNTUsIDAsIDAsIDYwMywgNzQzOTgsIDQzNTQ4LCAwLCAwLCA5MTc4MjQsIAogICAgIDMzNTAsIDEyMDgxNywgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAzMzkwLCA3NDQ4MywgNDMyNjUsIDEyMDU5OSwgOTE3ODMwLCAKICAgICA3ODU3MywgMCwgMTkxOSwgMzQwMCwgMTIwNjUxLCAxMjc5NDQsIDExNjQ3LCA5MTc1NDAsIDY2NDQ2LCA2NDE0MSwgODU2MiwgCi0gICAgMjEyMSwgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgMTEyOTcsIDk4MzY3OSwgOTgzMTUyLCAxMTk2NiwgCi0gICAgNjQxMjgsIDEyODU4NywgMCwgMCwgNjQxMzIsIDEwODY3LCA2NDEzMCwgNjQxMjksIDk4MzgzNSwgNDMzNzQsIDk3NzksIAorICAgIDIxMjEsIDY0MTM4LCA0MDQzLCA4NzEyLCA2NDEzNCwgNjQxMzMsIDExMjk3LCA5ODM2ODgsIDk4MzE1MiwgMTE5NjYsIAorICAgIDY0MTI4LCAxMjg1ODcsIDAsIDAsIDY0MTMyLCAxMDg2NywgNjQxMzAsIDY0MTI5LCA5ODM4NDQsIDQzMzc0LCA5Nzc5LCAKICAgICAyNzY0LCA2NjAwMiwgMTAxNjcsIDk0NzEsIDAsIDY2MDIxLCAwLCAwLCA1NDU3LCA1NDQwLCA4ODU3LCA5Mzk4MSwgNjUyODIsIAotICAgIDI4NDMsIDUzNTUsIDEyNzkyOCwgOTgzOTU2LCAwLCA1MTk0LCAxMTY1NywgNDM5ODQsIDEyODI5MiwgMCwgOTgzNjIwLCAwLCAKKyAgICAyODQzLCA1MzU1LCAxMjc5MjgsIDk4Mzk2NSwgMCwgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDk4MzYyMCwgMCwgCiAgICAgMCwgMTI3MDI3LCAxMDcxNywgNjQ1NzAsIDU2MzAsIDUzOTYsIDY0MTQzLCAxMDY4MiwgMCwgMTA2MDIsIDgwMCwgNDI0OTksIAogICAgIDY2MTg2LCAwLCAwLCA2NDkzMCwgMTE2MzEsIDY0MTQ2LCA2NDE0NSwgNjQxNDQsIDc2MiwgMTMxNzIsIDExODg1OSwgCiAgICAgMTk0NjYxLCA2NDQ2OCwgMTA5MDYsIDEzNTMsIDY5NjAsIDAsIDAsIDU4MjgsIDg3MjQsIDkxNzgwNiwgODkzMywgMTYwMSwgCiAgICAgNDIyNDQsIDg1OCwgNzA4MCwgNjQxMDksIDY0MTA4LCA4MDkwLCAwLCA3NDQwMSwgOTE3ODExLCA1ODcsIDAsIDEyODEzMSwgCi0gICAgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDc0MjE4LCA1NTYsIDY0MTU4LCA2NDE1NywgOTgzOTQwLCAxMjIxMywgMTk0Njc4LCAKKyAgICAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCA5ODM5NDksIDEyMjEzLCAxOTQ2NzgsIAogICAgIDI3NjAsIDAsIDAsIDAsIDE5NDc5NCwgNjQxNTYsIDY0MTU1LCA0MjQ5NiwgMCwgNjQxNTEsIDY0MTUwLCAxMjY3OSwgCiAgICAgMTAwNTMsIDEwNDIxLCAxMTA5MywgNjQxNTMsIDY0MTUyLCAwLCAwLCA0ODM5LCAwLCAwLCAxODc0LCAxMTkwMTYsIDAsIAogICAgIDY1NzcsIDY0MTI1LCA2NDEyNCwgNjQxMjMsIDAsIDEyNzUzMSwgOTI1MzQsIDcwMDcsIDc1OTAsIDY1NDQzLCA5MDM2LCAKQEAgLTE3MTE0LDEyICsxNzEzMywxMiBAQAogICAgIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCA5ODMxNjEsIAogICAgIDg3MDUsIDY0MDk3LCA2NDA5NiwgOTU3MSwgNTI4LCAxMjg2NzEsIDQ0MDE3LCAxMTQyOSwgNzEzNDcsIDAsIDk4MzA3NywgCiAgICAgOTE3OTkwLCA3Mzg0MSwgMCwgMCwgOTA1NiwgNjQzMTMsIDYxODgsIDEyMDAxOSwgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCAKLSAgICA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgOTIyMTIsIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgOTgzNzY2LCAKLSAgICAxMjgzNDQsIDAsIDExNzYsIDExODk1OSwgMTI3OTMwLCA4MTYyLCAxMjg2NjcsIDk4MzgyMiwgMCwgMTIwNTE5LCA2NjM3NiwgCisgICAgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDkyMjEyLCAwLCA0MTkwNCwgNjYzOSwgNjQwNjQsIDk4Mzc3NSwgCisgICAgMTI4MzQ0LCAwLCAxMTc2LCAxMTg5NTksIDEyNzkzMCwgODE2MiwgMTI4NjY3LCA5ODM4MzEsIDAsIDEyMDUxOSwgNjYzNzYsIAogICAgIDY2MjQyLCAxMTQxNSwgNDMzMywgOTg1NSwgNjQxMTIsIDY0NjQyLCAwLCA1Mzg4LCAwLCAwLCAwLCA3NzE0LCA2NjIyMiwgCi0gICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MTMsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCisgICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MjEsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCiAgICAgODk5NiwgNDk5MiwgNDQ3MSwgNDI2MjIsIDY0MDc5LCA2NDA3OCwgOTIxNzksIDAsIDEyNjU3MCwgMCwgNjQ2MTUsIDQxOTE1LCAKLSAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNSwgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKKyAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNywgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKICAgICA4NDA4LCA2NDcwNCwgMCwgMCwgOTIyMywgMCwgNDE2MTYsIDY3OTk5LCA3Mzc5NywgMCwgMTExNiwgMTI4MjA0LCA0MzA0OSwgCiAgICAgNzEzNiwgNDMwNTAsIDg1NDgsIDEyMDQ4NSwgMCwgMTE5MDYxLCA5MTc5OTksIDAsIDEzMTE1LCA0MzY3NSwgNjQwOTEsIAogICAgIDkzMjIsIDAsIDEyMDU5NSwgNjQwOTUsIDY0MDk0LCA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgMCwgCkBAIC0xNzEyNywxMCArMTcxNDYsMTAgQEAKICAgICA5OTI3LCA0MTMzNSwgNDExOCwgMTc5NywgMCwgNDEzMzQsIDAsIDQ2LCA0MzQ0OCwgMTI3ODgxLCAyOTgsIDAsIDEyODExNCwgCiAgICAgMCwgNDI2MjcsIDAsIDMyLCA2MTg3LCAxMTkwNTIsIDExNDk1LCAxMTQ1OSwgMzY2NSwgOTgzNjAwLCA0Mjg3MSwgMCwgCiAgICAgMTk5MjMsIDc0MzM1LCAwLCAxMjcxOTIsIDY2MjM5LCA0MjI2NCwgNjQ0MDMsIDQ0MTIsIDcyNDAsIDkyNDk1LCAwLCAKLSAgICA5ODM0NTgsIDY1NzU4LCAxMjc1MCwgNDE4MSwgODU0NCwgMCwgMTIwMTk5LCA5MTc4OTcsIDEyMDE5OCwgNjk4MDksIDYxODEsIAorICAgIDk4MzQ2NiwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDkxNzg5NywgMTIwMTk4LCA2OTgwOSwgNjE4MSwgCiAgICAgNjUwMTQsIDAsIDAsIDk4MzE5NiwgMzYzOSwgMTE5NTg4LCAwLCAwLCAxMTg5MDQsIDEwMDczLCAxMjAyMDYsIDEyODg2MiwgCiAgICAgMTI3MTg2LCA2ODQwOSwgNDI4NDQsIDc0OTgsIDEwOTgsIDkyNTY1LCAxMjAyMDUsIDAsIDk4MzExOCwgMTAyMDcsIDg3ODksIAotICAgIDk4MzIyMywgMCwgMCwgOTgzNDY0LCA5MjM0LCAwLCA2MTgyLCA5ODM0NjYsIDY1MDU4LCAwLCA5ODM0NzAsIDk4MzQ2NywgMCwgCisgICAgOTgzMjI1LCAwLCAwLCA5ODM0NzIsIDkyMzQsIDAsIDYxODIsIDk4MzQ3NCwgNjUwNTgsIDAsIDk4MzQ3OCwgOTgzNDc1LCAwLCAKICAgICA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAwLCA2NjI0NCwgOTQwNzIsIDAsIDY2MjM4LCAxMjg0NCwgMCwgCiAgICAgMTYyMiwgNzc2NywgMTkwMCwgNDEzMzksIDExNDU4LCAwLCAwLCA2NTgxLCA1NTc2LCAwLCA2NDQwNSwgNDEzMzcsIDAsIAogICAgIDQxNjMxLCA4OTQ3LCA2ODM5MCwgMTI3ODQ0LCA0MTY5NCwgMCwgMCwgNzkwOCwgMCwgMTA0MDgsIDY1NzksIDAsIDY0NjE4LCAKQEAgLTE3MTM4LDEwICsxNzE1NywxMCBAQAogICAgIDk5OTIsIDEyODI5OSwgNTA1NywgMCwgMCwgNzQ1MzgsIDUwNTQsIDExODk1MSwgMTk0OTcxLCA3ODYwNiwgMCwgMTQzNywgCiAgICAgNDE2MTcsIDY1OCwgMzQ5NywgMTI4NTA5LCA3NDg2LCA1MDYxLCA1MDYwLCA0MjM1LCAxMjc4NzgsIDAsIDEyODUyOSwgCiAgICAgMTIxMTMsIDQyMzYsIDQ3MjcsIDAsIDAsIDc2OTMsIDEwNzQ5LCAwLCA3NDg4LCA1NzczLCA5NzgsIDEyODEzNCwgMCwgCi0gICAgNDE2MTksIDEwMjM5LCA2ODYxMSwgMCwgNjYyMDksIDAsIDEyODcwMCwgOTc0OCwgOTgzOTQ3LCAxMjc1MjQsIDAsIDAsIDAsIAotICAgIDAsIDE5NTA4MywgMCwgOTgzODM0LCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAxMTk1OTYsIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgCi0gICAgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgMTE5MTc1LCA5MTc5NDAsIDIzNjksIDAsIDk4Mzk2MywgOTgzOTY0LCAKLSAgICAxMTkyMzUsIDc0MDkyLCA3MzkzNiwgNzAwOCwgNDM2NjAsIDAsIDAsIDAsIDIzNjcsIDEyNzgyNywgOTgzODQ4LCAyNjQsIAorICAgIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAxMjg3MDAsIDk3NDgsIDk4Mzk1NiwgMTI3NTI0LCAwLCAwLCAwLCAKKyAgICAwLCAxOTUwODMsIDAsIDk4Mzg0MywgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIAorICAgIDY3ODU0LCA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCA5ODM5NzIsIDk4Mzk3MywgCisgICAgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAxMjc4MjcsIDk4Mzg1NywgMjY0LCAKICAgICAyMzc1LCA4MDYwLCA2MTk0LCAxMTk4NTgsIDE4NDQsIDExOTA4NCwgMCwgNjAxOSwgMCwgMCwgNjk2MSwgMCwgMTE4ODM5LCAKICAgICAwLCA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDkyMzMzLCA3MjUsIAogICAgIDY1MDQyLCAxMTg3OTcsIDEyMDgwMCwgOTgzMDQwLCAxMjg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjYxLCAxMjA3MDcsIApAQCAtMTcxNTksNjM0ICsxNzE3OCw2MzQgQEAKICAgICAxMjY1MDMsIDQxNjA3LCAxMjAxMTUsIDE2NzksIDEyMDExNiwgMTIwMTgwLCAxMjAxMTMsIDEyNzQ2MiwgNzAwNSwgNDE2MDksIAogICAgIDk1ODAsIDAsIDQwMSwgNjk5NDksIDQzNzc5LCA2OTY4LCA1NzYxLCAzNDIsIDg1NTMsIDAsIDgxNDMsIDEyNzExNSwgCiAgICAgMTE5ODMsIDkyMjQ5LCA2MjQsIDc0NTA4LCA0MDU3LCA0Mzc4OCwgNTA3OCwgNzQyNTgsIDEyNDc4LCAwLCA1MDc2LCAwLCAKLSAgICAxOTQ2MDksIDAsIDEyMDA5NywgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMCwgOTI1MjMsIDEyMDEwMiwgCi0gICAgNzEzOCwgMTIwNTUyLCAwLCAxOTQ2MTEsIDc4NzUyLCAwLCAxMjUyMCwgODA1OCwgOTczMiwgMCwgNTA4MCwgNjQ3NzUsIAotICAgIDUwMzYsIDUwMzUsIDEyMDU5MCwgNDI2MDQsIDk4MzY0NywgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIAotICAgIDQ0MzIsIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIAotICAgIDEyNzI2MiwgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgCi0gICAgMTI3MjU2LCAxMjAyNTIsIDEyODEwMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCAKLSAgICA2MDk0LCA3NjQxLCA0MjQ0NSwgMCwgOTI0ODcsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCA5ODMxNzcsIDUwMzAsIDAsIAotICAgIDAsIDAsIDczODY5LCA5NjIyLCAwLCA2OTk0NCwgNjc4NywgMCwgMCwgMCwgOTgzNTgzLCAxMDU0NCwgMTI5MTksIDAsIAotICAgIDkyMjE4LCAwLCAwLCA2OTkwNiwgMTIwNzg5LCAwLCA5NDcsIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAKLSAgICAxMTk5MzUsIDc2MTMsIDkyNTYyLCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgNzM3NiwgMTIwMTgxLCAxMjAxOTIsIAotICAgIDEyMDI2OCwgMCwgNDM1NjcsIDc0MDU2LCA5MTc5MTAsIDExODMzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIAotICAgIDcyMTgsIDc4OTUsIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAxMTk5MjIsIDcyMTQsIAotICAgIDcyMTUsIDk4MzgyNywgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgODE4NywgCi0gICAgNDI4NjEsIDExMTMsIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAxMDk4MCwgCi0gICAgMjQ4OSwgNjU2MjQsIDgxNTAsIDEzNTksIDY3NjUyLCAxMjczMjksIDEyNzMzMCwgNzM3NTYsIDUwNDIsIDUwNDEsIDQyNzY5LCAKLSAgICAxMjA4NCwgMTI3MzI0LCAxMjczMjEsIDkyMjc5LCAxMjczMTksIDEyNzMyMCwgMTI3MzE3LCAxMjczMTgsIDEyNzMxNSwgCi0gICAgMTIyODMsIDE2MTYsIDM3OTUsIDAsIDg3OTUsIDY2MjQ1LCAwLCAwLCAwLCAxMTM4LCA3MzkwNSwgMTI2NzcsIDAsIDAsIAotICAgIDMyMzksIDEyNzMxMSwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgNjgyNiwgNzM3NzMsIDExOTA3MywgCi0gICAgNTA0MCwgMCwgMCwgOTgzNDM1LCA3ODQyMCwgMCwgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCAKLSAgICA3NDI5MywgMCwgNjQ2NDgsIDAsIDkzNTksIDc4NDE2LCAwLCAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCAKLSAgICA3MzkwOSwgNDgzNSwgNTUyNjYsIDQzNDMyLCAxMjc4MjIsIDQzMDksIDcxMjcsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAKLSAgICAwLCA0MjU4OSwgNTY5LCAwLCA3MzgxMywgNzExLCA0Mzg5LCA3MTMzLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAKLSAgICAxOTQ1NzAsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIAotICAgIDc3OTA4LCA0MjczOCwgNjU3ODQsIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgNjU3ODEsIDY0NzM0LCA3MDA3MywgMjQ0MCwgCi0gICAgNjU3ODAsIDc3OTEzLCA4NDQ5LCAwLCA1MDA4LCA5ODM1NzIsIDIxMTgsIDAsIDEyMTIxLCA4MjU1LCA1NTEyLCA3Mzg3NSwgCi0gICAgMjEyOCwgMjEzMCwgMjEzMSwgMjEyNiwgMjEzMywgMTExOSwgMTI3MDY4LCAyMTE0LCAyMTE2LCAyNDU1LCAwLCAyMTIyLCAKLSAgICAyMTIzLCAyMTI0LCAyMTI1LCAxMjc0ODYsIDg3MTQsIDk4MzgxMSwgMjExMywgMCwgMjExNSwgMTI4MTc3LCAxMjc5MDcsIAotICAgIDQzNzEzLCA1MDUyLCA2NjIyMCwgNTgyMSwgNjE4NiwgNjU3NzgsIDY1Nzc1LCA1MDUxLCA2NTc3MywgMTQyOSwgNDI2NDcsIAotICAgIDUwNTAsIDMwMiwgMzg4LCA0MTExNSwgNzM1LCA2NjM3LCA1OTA3LCA2NTA4OCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCAKLSAgICA5ODMxODEsIDEyMDAzLCA1NTEzLCA2NjY2LCA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCAKLSAgICA3ODQzNywgMCwgMTkyNSwgMCwgOTIyMzcsIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCA5MjMxMywgMCwgNzQ0OTcsIAotICAgIDkyMzk1LCA4MDg5LCA2OTI5LCA2MzksIDk4MzU2MywgNjgxNzksIDY0NDQyLCAwLCA5MjM0OCwgNDU5OSwgNDE0MDIsIAotICAgIDY2NzQsIDQzMzk3LCA0MzI5NCwgMTQ3NiwgNjQ4LCAwLCA2NTgxOSwgMzIzMywgMCwgNDE3ODIsIDY5NTEsIDk0MDE3LCAKLSAgICA5ODM5NjcsIDM1MzAsIDk3NTAsIDEyODMxNywgMCwgNjY1NiwgNDI2MTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgCi0gICAgODk2NywgMCwgNTA0NSwgNDIwMjYsIDE5MTYsIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgMTMxMjgsIDUwNDMsIDAsIAotICAgIDc4NTMsIDc0MDY4LCA3NDAwNCwgOTY2OSwgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIDkxNzYwMCwgNDE3NTAsIAotICAgIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgMTE5NjA2LCA2Nzk4MywgMTMyOTYsIDUxNywgMCwgMTI4NTM0LCAxOTQ5NDYsIAotICAgIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCA3NDQ3OCwgMTA1MzEsIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIAotICAgIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIDM5MjUsIDQyNTEsIDgwNjksIDEwNTE3LCAxMjA0MzksIDQ4OSwgMCwgNDI1MCwgCi0gICAgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCA5ODMxNzgsIDE5NDg1MSwgNjYyMDAsIDAsIDAsIDAsIDc4NDIzLCAwLCAwLCA4NzExLCAKLSAgICA2MTgzLCAwLCAwLCAwLCAxMjA0NDgsIDc2MjMsIDExODkyNSwgMTE4ODg5LCA5MjM1LCAxMjc2MCwgNzQxNzYsIDY5NjYyLCAKLSAgICA2NjQ0NSwgNDM1NDAsIDEwMDYyLCAzNzQzLCAxMTUxNCwgMTEwNzgsIDAsIDEyMTM2LCAwLCAxMjY1OTcsIDEyMDQzNSwgMCwgCi0gICAgNzcyNiwgMCwgMTk5MjIsIDI2NywgMzM5MywgNDIxOTgsIDEzNzEsIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIAotICAgIDQxMDc0LCA0MjY2LCAxMDY1MiwgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCA5ODMzNDAsIDAsIDMzOTEsIAotICAgIDQxMDc1LCAyNDc2LCAwLCAxMjgwMTcsIDAsIDEwNjI1LCAwLCAxMjc2NywgMTMwMTcsIDc4NzQzLCA2NDI2MSwgNjQ5MzQsIAotICAgIDEyNzUzNywgMTMwMTQsIDEzMDEzLCAwLCA2NjczLCAwLCAwLCAwLCAxMjQzOCwgMCwgOTgzMzM0LCAwLCA5ODM4NzEsIAotICAgIDEyNjYzOCwgOTA1MywgMTMwMTUsIDc0NTIzLCAwLCA3MDQsIDY2MjE1LCA2MTk1LCA5ODM4MTksIDY2NjAsIDc4NzU4LCAKLSAgICA5MTc3NjAsIDkxNzc5MywgNDIyMTIsIDEyNjI5LCAxMTQzNSwgMCwgNTUyNTYsIDY1NTM4LCAwLCAxMjc5NDAsIDk4MzMzMywgCi0gICAgNzQ1NDcsIDEyNjU4NSwgNjU0NDgsIDc4MTAwLCAxMjk0OCwgMTE5MDAxLCAxOTUwMDIsIDExOTIzOCwgMTk1MDA0LCAKLSAgICA3ODA5OSwgMTI3MDg1LCAwLCAxMjgzMjAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCA2NjcyOCwgMTgxNiwgCi0gICAgMCwgNDI1MzMsIDE2OCwgNDI4NDUsIDQ4OTgsIDY0Mjk4LCA5ODMxNDEsIDAsIDQ5MDEsIDE4MjEsIDAsIDU3OCwgMzY1MywgCi0gICAgMCwgNzkxLCA5MTYyLCA2OTc3LCAwLCA3ODg4OSwgNzQ1NjEsIDAsIDczNzMxLCA4MzU0LCA0MzU5MCwgMTE5MzAzLCAKLSAgICA5ODM0NDEsIDc1NTcsIDExOTMzOSwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxMjA2NzEsIDExOTE2NywgMTk0OTk2LCAKLSAgICAxMjgxMSwgNjU5MjUsIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgMTI4Mjc2LCAKLSAgICA3NDU5OSwgNzg0NDksIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIAotICAgIDc4MDgzLCAxMjg4MjQsIDg3MjksIDc4NDU2LCAwLCA3ODQ1LCA5MTc5MTcsIDcxMzAyLCA0NDA4LCA0MTIyLCA2NzcyLCAKLSAgICAxMTAzOSwgODcyMywgMTk0OTkwLCA3MTMxMCwgMTE5MzAyLCA3MzEsIDExOTMwNCwgOTIyODYsIDI0MzgsIDY0ODU1LCAKLSAgICAxMTkzMDAsIDExOTI5OSwgMTE3NSwgMCwgNDIxMzUsIDM3MywgMTE5MTcyLCAyMTE5LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIAotICAgIDAsIDAsIDQxOTUyLCAwLCA1MjczLCAyMTI3LCA1MjY5LCA2MzM3LCA1MjAyLCAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIAotICAgIDE5OTE1LCA1Mjc3LCAxMjk2MywgMTI3ODY0LCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgMTIwMzQwLCAxMTg4NzMsIAotICAgIDEyNzEsIDk4MzYzMSwgMCwgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIAotICAgIDQ1NzQsIDAsIDc1NjcsIDc0NTksIDk4MzE2MCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgOTI1NDgsIDU3NTksIAotICAgIDk4MzkwMywgMCwgNDEzODgsIDY0NDQ2LCA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCA5ODMxODcsIDcwMCwgCi0gICAgMCwgNTU1MywgMCwgNzA4OCwgNTM1NiwgNzQ5OSwgNjgwMDcsIDY2NTk2LCA3NDA2NiwgMCwgMTAyNjMsIDU1NTQsIDAsIAotICAgIDEyMzQ0LCAxMDMxMSwgNzgxMTMsIDY2NjUsIDkyNjI2LCAwLCA3NjE4LCA4NTE3LCAxMTQ1NSwgNzg0NDAsIDY0NjMyLCAKLSAgICA2NDQ0NywgNTU1NSwgNzgwODgsIDc4MDkzLCA3ODA5MSwgMCwgNDI4MDMsIDY1MDMzLCA5MTQzLCA2NjY4LCAxOTUwNjcsIAotICAgIDY3OTk1LCAxOTUwNjksIDY1NiwgMTk1MDcxLCA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIDAsIDAsIDk4MzY0MCwgNDI2OSwgCi0gICAgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDY5NjQ0LCA5NTAsIDAsIDkyMjczLCA2NjU4MCwgMTE4ODk1LCA2NjY4MywgMTA1NTQsIAotICAgIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgOTg0OCwgMTAzODEsIDAsIAotICAgIDEyODg3MCwgOTgzNjkyLCAzNjUxLCAwLCAxMjA3MzAsIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCAKLSAgICA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgNzgzNzMsIDE0NDEsIAotICAgIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDEyMDc5MCwgCi0gICAgMTI4NTgyLCA5MDc4LCA4NTQ1LCA2NjM1NiwgMTI4Nzk5LCAwLCA5MTU0LCA5MTE4LCAxMjY1NDMsIDAsIDI2NzYsIDIyNzcsIAotICAgIDAsIDczODEyLCA2MTkwLCA4NTk5LCAxOTUwNTMsIDY5OTE4LCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCAKLSAgICA5MjYyMCwgMTIxMjksIDAsIDg0ODEsIDAsIDYyMDIsIDE5NTAzNSwgMTA5MjAsIDEyODIzNywgNTIwMywgMTk1MDM5LCAKLSAgICAxOTUwMzgsIDUxMDgsIDUxMDcsIDY1ODE4LCA2NjAxOSwgOTc2MiwgMCwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCAKLSAgICA2NjU3LCAyMDcsIDEyODgwNiwgNDI3NSwgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCA3ODc4NiwgNTEwMywgCi0gICAgMTI3ODYxLCA2NDM0OCwgNDEzNjgsIDQzOTc0LCA0ODgsIDY5ODExLCAwLCA3MTMzOSwgMTAxNTcsIDAsIDQzMDM0LCAKLSAgICAxMTQzOCwgNjQ2NzQsIDAsIDkyNjk0LCA2ODQzMSwgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgCi0gICAgNDEzNjcsIDUxMDUsIDEyNzUwOSwgNjk3MjAsIDY0NzYsIDUxMDQsIDk4Mzc0MCwgMzA0LCAzMTc2LCAxMTkwMTAsIDAsIAotICAgIDkzMiwgMTIwNjMzLCA2NTY3LCAyMzgsIDY5NjU2LCAxOTUwMTEsIDE5NDU5NSwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCAKLSAgICA3ODg3MCwgNDEwNDQsIDY3NjQwLCAxOTQ5MDIsIDQyMDU1LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgCi0gICAgMTI1NTIsIDE5NTAxOSwgODgwMywgMzA5LCA2NjIyLCA4MTUxLCAxMDg1OCwgNzg3MDYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgCi0gICAgMTI1NTMsIDEwODE0LCA0MzI3NSwgNjk1MCwgOTcxMiwgNjg2ODAsIDQzOTcwLCA5ODMxOTgsIDY1MTY1LCA5MjcyNSwgMCwgCi0gICAgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgNDM3NjMsIDAsIDQxNzU0LCAKLSAgICA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgCi0gICAgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCA5NDA5NSwgOTE3NTQ3LCA5MjY4MiwgNjc2NzksIDE5NTAyMCwgMCwgNzc4MSwgCi0gICAgNDEzODMsIDY0NTY4LCAwLCAxMjA3MzgsIDEyMDc3LCAwLCA2NDU4NiwgOTE3NjIwLCA0MjM5NiwgNTUyNTUsIDM0NzUsIAotICAgIDEyODAzNSwgMjQ3OSwgMCwgMzYzMiwgMTIwNzI4LCAxMDY5OCwgODM3NiwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgNjc2MzksIAotICAgIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCA2NTIyOSwgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIAotICAgIDkxNzYzMCwgMzY0MCwgMTI3MTkwLCA0MjMyMSwgNzI4NCwgMTk0OTc0LCAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAKLSAgICAxOTQ5NTIsIDE5NDk1MSwgMTI2NjQ5LCAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCAwLCAwLCA0MjA4MywgMTIwNjc4LCAKLSAgICA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIDE5NDk1OCwgOTYzNCwgOTIzODAsIDk5ODgsIDAsIDQxMDY4LCAwLCAKLSAgICA0Mjk1LCA2NTI2NCwgNjgwMDYsIDAsIDkyNTQ1LCAwLCA3ODUsIDgyMzYsIDEyODY0NywgOTAyNywgNjgxNjAsIDY3NjIzLCAKLSAgICA2NDM4MywgMTIwMjY1LCA5MjUsIDEyNzE1NiwgMCwgNDE5ODUsIDQxMDcxLCA5NTg2LCAwLCA0MTk4NCwgOTIxNywgMCwgMCwgCi0gICAgMCwgOTE4NiwgMjA2NywgNDAxNiwgOTgzNzk0LCAwLCAzODEsIDEyOTM2LCAwLCA0MjA3NywgMCwgNjk4ODAsIDUxODQsIAotICAgIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgODEyLCAzNjE1LCAKLSAgICAwLCA1MTc4LCA0NDAwMCwgMTIwNTQ4LCA3ODgwNywgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAxMDY5MiwgMTE2NiwgCi0gICAgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCA0MjYxNiwgMTIwNjcwLCAyNDQyLCAxMDcwMywgNzg3ODksIDY3NjMyLCAKLSAgICA5MTc5MjQsIDEyNzcxLCAxMjczNiwgMTI3NTMsIDY2NzA4LCA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCA2OTg3MiwgCi0gICAgMTI3MzczLCA0MjI4OCwgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAxOTQ5NjMsIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgCi0gICAgMzg4MywgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgOTI1ODAsIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgCi0gICAgMjcxNSwgODA2LCA2NTIwOCwgNDE4ODQsIDkxNzg4MywgMTMxOCwgNjQ3MzEsIDEyNjU3OCwgMCwgMCwgNjYzMjUsIDM0NjUsIAotICAgIDI0MDUsIDkyNDAsIDAsIDEyNzU2LCA2NTI1OSwgMCwgOTgzNzcyLCAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIAotICAgIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgMjA2MiwgMTI3MjkzLCA2NDk0LCA1NTM3LCA3ODY1NiwgMCwgCi0gICAgMTk0NTg3LCAwLCAxMjExLCAwLCAwLCAwLCAxMTg4MzIsIDEyMzE4LCAwLCAwLCA2ODAwNSwgMTA2MjIsIDk4Mzc3MCwgMCwgCi0gICAgNzg2NTQsIDY1NjYsIDc4NjU5LCAwLCA3Mzc4MCwgMTE5MTk2LCA2NDg2NCwgMCwgNzg2NjAsIDAsIDgyODQsIDEzMDgxLCAwLCAKLSAgICAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgOTIyMzYsIDQyNjUsIDY2NDIsIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAKLSAgICAxMTkyMTYsIDI0ODgsIDAsIDQ1ODIsIDAsIDAsIDQxNzc3LCAxMjkyNiwgOTgzMzY5LCA3NTI4LCAxMDU1MCwgMCwgOTI3MDYsIAotICAgIDAsIDEwOTYxLCAwLCAxMzc0LCA2NDg3OCwgMTE5MDE0LCAwLCA0MjM4OSwgNDEzNzQsIDIyODYsIDAsIDc4NDkyLCA0MTM3NywgCi0gICAgMTI3OTA5LCAwLCA0MDAsIDEyNTk3LCAxMjA1ODYsIDAsIDAsIDY2NjEsIDk4MzE0NSwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIAotICAgIDAsIDcxMzAxLCA5ODM4NTMsIDM0NzMsIDc3MTgsIDAsIDAsIDAsIDU1Mjg1LCAwLCAwLCAwLCAxMTk2OSwgOTgzMzgyLCAKLSAgICAxMjc4NDEsIDYzNjUsIDE4ODcsIDY3NjMsIDk4MzM2MiwgODA4MCwgNzAwNiwgMCwgOTgzMzYzLCA2NzU3LCA2NDM1MSwgCi0gICAgMTU0NCwgMCwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgOTgzMzY0LCA2MTQ2LCAwLCA3NzEsIDk4MzM2NSwgMCwgMTI4MTIsIAotICAgIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgMCwgOTUzLCAxMjkxNywgMTE5NTYwLCAxMjMwMCwgMCwgCi0gICAgMTE0OTEsIDk3MjQsIDEwMzQxLCA5ODM3NjQsIDk1MjQsIDc0OTAsIDExMzg5LCA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCAKLSAgICA0NzEsIDc0ODQsIDc0ODIsIDY3NTMsIDc0ODAsIDU3NjQsIDc0NzgsIDc0NzcsIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIAotICAgIDc0NzIsIDI0NzQsIDc0NzAsIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIDEyNzI4OCwgOTIzNTcsIDEwMDQ5LCAxMTgzNCwgCi0gICAgMzU0NCwgMCwgNjAxNywgNjUzMTEsIDEyNzQ4MSwgMTIwMjE2LCAxMzMwNiwgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAKLSAgICAxMjA1NDQsIDAsIDAsIDkyNjYwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgNDI2NjUsIDkyMzQxLCAwLCAyMTM5LCA0MjU2LCAKLSAgICAxMjA3NzYsIDc0MzgwLCAwLCA0MjY3NSwgNDI2NTgsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgCi0gICAgNjU2NzEsIDcwODMsIDEyMDAwOCwgODA2NiwgNzY3OCwgNzQ4NjUsIDAsIDAsIDAsIDAsIDcxODYsIDAsIDEyMDU1NSwgMCwgCi0gICAgNDQ1LCAxMjA1NjYsIDEyODMwOCwgMCwgMCwgODMzMCwgMCwgMCwgNDI3OTcsIDk4MzE1MCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAKLSAgICAxNzcwLCAwLCAxMjg4NjYsIDE1NjAsIDEyMDIwOSwgMTk0OTcyLCA0NTg0LCA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAKLSAgICAxMTg5MjgsIDExMTgsIDcxMzM0LCAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgNzI1MiwgMCwgNTk5NiwgNjk5MjEsIDQ5MDMsIAotICAgIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDcxMzksIDAsIDEyMDQ3LCA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgCi0gICAgNjMyNCwgNDE5NzUsIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAwLCAwLCA5ODM3MzIsIDEyNzE1LCA2ODAwMiwgCi0gICAgOTgzNDcxLCAxMjY2MzAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIDExOTE1NywgNjgwMDAsIDkyNDY0LCAwLCAKLSAgICAxMjY5ODQsIDY4MDAxLCA5MzM0LCA5MjcwNSwgOTIzMTUsIDcwMTAxLCA3OTc1LCAwLCA3Nzk1NywgMCwgNjY2MjEsIDQ4ODQsIAotICAgIDY2NTk3LCA2OTczMiwgMCwgMCwgNjMxMywgNjU1MTMsIDY5ODU3LCAwLCAwLCAwLCAyMzQ1LCA0MzY5NywgNDYzLCAwLCAwLCAKLSAgICAxMTk2MDcsIDMxMTcsIDU0NjAsIDAsIDAsIDk4MzM3OSwgMCwgNDIyNzksIDE5NDU3NywgMCwgNzg0MTUsIDAsIDE5NTAwOCwgCi0gICAgOTgzMzc2LCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgMCwgMCwgMjQ4MiwgMTQ3MSwgMCwgMCwgCi0gICAgNDIyNDcsIDEyMzc4LCA3MzkyNSwgNjk2NjQsIDAsIDEyMzc0LCAwLCAwLCAwLCA5ODM2ODUsIDI0NjAsIDAsIDExOTQ0LCAKLSAgICAxMjM3NiwgMTI3ODY4LCA2NDY3OSwgMCwgMTIzODAsIDEwNTU3LCA2NDQ3MywgNTg3MCwgMCwgMjAyNCwgMTI3MTgwLCAwLCAKLSAgICAwLCA1MzksIDAsIDEyNzc2NSwgOTQwNTIsIDM4NTMsIDY1MTgwLCAxMjc5MjMsIDEyMDc5NiwgMTIwMjQ1LCA5MjMyNCwgMCwgCi0gICAgODY1OSwgMCwgMTI0NzQsIDkyNTc5LCA5NTAzLCAxOTQ5NjksIDI0NzgsIDAsIDQxNjIsIDAsIDQyNjAsIDEyOTUzLCAKLSAgICA2OTYzMywgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIDI3NDIsIDEyNDc2LCAxMTc5OCwgMTA5NDYsIDEyNzMxMCwgNTAwMCwgCi0gICAgMCwgOTgzNTc5LCAwLCA2OTY3MiwgODIxMywgNzQwMTcsIDc3NzEsIDYxNjEsIDY4MDE4LCA2NzA5LCAwLCA3ODg4NSwgCi0gICAgOTgzNjk5LCAxMjc5NzEsIDEyMDU4MiwgNzg1NDcsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIDAsIDczNzkxLCAwLCAwLCAKLSAgICAwLCAwLCAxMTkxMjMsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDEyNzI5MCwgODI3NSwgMzg5MywgOTgzMjU2LCAwLCAKLSAgICAxMjIxMCwgNzIyMSwgNDIxNDcsIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgMTI1MTYsIDQ0NDQsIDAsIAotICAgIDkyMjcxLCA3NDUzNywgMTA4OTIsIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCA3ODM4OCwgNDE5NzMsIDM1OTEsIDQxOTY5LCAwLCAKLSAgICAyNDUzLCAxMjg1NDksIDkyNjY2LCA2NDcwNSwgMCwgMCwgMTAzNDksIDEwNDEzLCA0MzU5MSwgNDE5NjIsIDMyMDIsIAotICAgIDc0MzUzLCAwLCA4MzE2LCAwLCAwLCA5NDA2MCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgMTE5ODA5LCA0ODgzLCAKLSAgICAyODUsIDQ3MjMsIDcwMDk5LCA5MjY5MiwgNDQ1OSwgNzQ1NzcsIDQyOTIxLCA0MTcyMCwgMTEwODksIDI0MCwgMTk5MDYsIDAsIAotICAgIDQyMzIzLCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAxMjY1MzUsIDAsIDAsIDAsIDAsIDQyNjM0LCA5ODMzMzUsIDQzNDM3LCAKLSAgICAzMDgxLCAxMTQ2MywgMTIwMTU0LCAwLCAwLCAxMDQ0NSwgMCwgMCwgNjY3MTcsIDI2MTQsIDkxMjUsIDExOTAyMywgMTcyOSwgCi0gICAgMCwgMTIwMjM2LCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMCwgNjUxOTQsIDY2MjAxLCAwLCA2NjU3OCwgNTAwMSwgCi0gICAgNDE4NzksIDc0NDI3LCA0MTIxLCA1MDAzLCA4ODQsIDY2NzAwLCA2Mzg3OSwgNDk0MywgNTE1MCwgNzM4ODksIDc0MTgyLCAKLSAgICAxMjc5MTUsIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgOTE3OTUyLCAxMjAwODMsIDYzODczLCA4NDkxLCAKLSAgICAwLCAwLCAwLCA0NTMwLCA0MjQwOSwgNzEyNiwgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIDExOTA5NiwgMTk5MjksIDAsIAotICAgIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgMTIwMDc3LCAxMjA1MzAsIDY2MTc5LCA0MjQxMiwgNjU5NDEsIDEzMTE0LCA2NDUyMiwgCi0gICAgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgNDQzNywgNzM5NDgsIDEyNzA3NCwgOTgzMjMyLCA1NTI4MCwgNDIxNzQsIAotICAgIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCA2NjAyNiwgNDMwNiwgNDEzODAsIDY4NDMyLCA5MjU4NiwgMCwgNjY2NjcsIAotICAgIDEyNzMwOSwgMCwgMTI2NTIxLCA0MjIwMCwgNDI1NjYsIDAsIDAsIDUwODgsIDY5NDgsIDAsIDg1MjQsIDAsIDAsIDEyMzg1LCAKLSAgICAwLCAwLCA2OTY0NiwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCA2NTAzOSwgNjUwMzgsIDEyMzkyLCA2NTAzNiwgODA2NCwgCi0gICAgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMjA4MCwgNzEwLCA3Nzk5OSwgMTE2NjMsIDE2NjYsIDQyMDkxLCAxMTk2NTcsIAotICAgIDEyMzgzLCA0MzY3MSwgNDIwOTIsIDY4NDE4LCA0Mjg5LCAwLCA2Mzg5NiwgMTIwNjEsIDQyMDk2LCA0MzYyMSwgMzM2MiwgCi0gICAgMTIzNzcsIDk4MzgyMywgOTgzODI1LCA2ODQ0OSwgNzQ2MSwgNzM5MDEsIDEyNDQsIDMzMSwgNzM3ODYsIDEyNjgzLCAKLSAgICAxMDY2MiwgMCwgODExMiwgMCwgNjU4NTIsIDAsIDEyMzc5LCAxOTQ4NzcsIDEyMDgxOCwgNDE5NjQsIDQyMjA4LCA2Mzg0MywgCi0gICAgMjA4NCwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCA2Mzg0MCwgNzg1NDksIDQxMjIwLCAxMzAzMiwgMCwgNTg0LCAKLSAgICAxMjkzMywgNDMxNzcsIDEyMzczLCA2OTg1NSwgMTMwMDAsIDEzNTEsIDI5MzUsIDg2OTgsIDEyNjY1LCAwLCAxOTMwLCAwLCAKLSAgICA3ODIyOSwgMTI0MjcsIDY2NTE0LCA2OTg1OSwgMTMwMzEsIDAsIDYzOTAxLCAwLCAzNjU3LCAxMjg1NzIsIDY1MjAyLCAKLSAgICA2MDAwLCAxMTkyMDYsIDEyNDI2LCAxMjcxODEsIDAsIDQxNzQwLCAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIAotICAgIDEyNDI5LCA2NzI3LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCA0MTc1NSwgNjc2LCAwLCA2NjcwNCwgNjY2NjQsIDk5NzgsIAotICAgIDY2NDkxLCAzNTM2LCAwLCA5NzUyLCA5MjM5NywgNjE2MiwgMCwgNjkyMjgsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIAotICAgIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgMCwgNDIyMDcsIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAwLCAKLSAgICA5MTc3OTksIDgzMDgsIDkxNzc5NywgOTE3Nzk2LCAwLCA2Nzg2NCwgOTE3ODAxLCA5MTc4MDAsIDEyMzM2LCA0MTM1LCAKLSAgICA2OTgwNSwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCA2Mzg2MSwgMCwgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAKLSAgICAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgMCwgNzQ1NjAsIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIAotICAgIDc4NTA0LCA2NzA0LCA0NTkxLCAxMjgwMjksIDAsIDAsIDk2ODAsIDAsIDEyMDYyMywgNTYxLCAxMjE1OSwgMTk1LCA3ODUwOCwgCi0gICAgNDE1MDEsIDAsIDQyMDMxLCA1NzE5LCA3MTcyLCA0MjY4NywgODM2OCwgMCwgNDE0OTksIDAsIDAsIDQyMjQyLCA0MTQ5OCwgCi0gICAgOTE3Nzk0LCA0MjAyNSwgNzg1NjUsIDY1ODA1LCA0MjQ2MywgMCwgMjkyNCwgMCwgMTIwNTEwLCAwLCAwLCAxMTkyMTMsIAotICAgIDczOTQxLCAwLCA0MjMzMCwgOTE3Nzg0LCAzOTY5LCAwLCAwLCA3MTY5LCAxOTkyLCA5NjUyLCA3Mzk3NywgNzI0NiwgCi0gICAgNDIwODYsIDEyNjYxNSwgMjIxOSwgMCwgMCwgMTI4ODAxLCAxOTQ4MzcsIDAsIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCAKLSAgICA5MTc3NzYsIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCAxMjcyNzYsIDkxNzc3OSwgMTI0MzEsIDg2NjgsIDEyNDM0LCA5ODM4MjYsIAotICAgIDkxNzc4MiwgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDEyODI0MywgNDM2NTMsIDE3MjYsIDEwMTUsIDAsIDgyMTIsIDAsIAotICAgIDEyODAxNCwgNDI0MjMsIDExOTA2NiwgMCwgMTI4MTA4LCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgCi0gICAgOTgzMjM5LCA0MjAyMSwgMCwgMCwgMTI5OSwgMTIyNDAsIDQyMzUwLCA2NTE0MywgMCwgMTk1MDE2LCAwLCA3ODE5NywgCi0gICAgMTEzNDgsIDAsIDc4MDM3LCA5MTk0LCA5ODMxODQsIDAsIDE5OTE0LCAxMjE3OSwgOTgzODAzLCAyMjk2LCAxOTQ5MjMsIAotICAgIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIDYzODE3LCA2NDY1MSwgMCwgNDE1MDMsIAotICAgIDEyNzQ3OCwgMTEyNjUsIDAsIDEyMDc1NiwgMTk0OTIyLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAwLCAxMjg1MDgsIDEyNDE2LCAKLSAgICA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIDM4ODIsIDg1MzIsIDkxNzc3MSwgCi0gICAgMTU3MywgMTI4NjQ4LCAxMTk4NDcsIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxMjY0OTEsIDEyNDE0LCAKLSAgICA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgMTE0MywgMTE5MTY5LCAxMTk4NDYsIDEyNDE1LCA2NjI2LCA0Mjc2MywgMCwgCi0gICAgMTE4ODg0LCA5MDIxLCAxMjA3ODMsIDAsIDExNzI0LCAwLCAwLCAxMjcxMDQsIDEyNjYxOSwgMCwgMCwgODAyNywgMTA5OTcsIAotICAgIDkxNzEsIDEyNzQxLCAxMTQwMCwgNzEzMDUsIDE5NDc5OSwgMCwgMTI4MjM5LCAwLCAxMjg4ODEsIDExOTYwNCwgMTI3NTIzLCAKLSAgICAxMjAxOTAsIDE5NDc3MywgNjc2MDgsIDEyODIxNCwgNDIzNjgsIDAsIDc3MTUsIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIAotICAgIDY4NjUxLCAwLCA5ODM4ODYsIDMwMDksIDQxNDc2LCA0MTQ4OSwgNjk4MjUsIDMwMDcsIDE0NDgsIDMwMTgsIDE5NDgwOSwgCi0gICAgMzg4OSwgODUyMSwgNTA4MywgNTA4MiwgMTE5ODU5LCAxMjAxODQsIDg1MTksIDk4MzIzNSwgMzAxNCwgNTA4MSwgNjU4NTMsIAotICAgIDEyMDcxNSwgMCwgNjgwMTQsIDY5OTUxLCA1MDc5LCA2NDgwMiwgNDIyMTAsIDQ1OTcsIDY1NTMyLCAxMTgyOCwgMTIwMTg1LCAKLSAgICAxMjM3MSwgMCwgODQwNywgMCwgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDcxMzAzLCA5ODM5MjQsIDEyMzY3LCAKLSAgICA0MjE3MCwgMCwgOTI1NTcsIDYyOSwgMTkyNCwgMCwgMTIwMzcsIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgCi0gICAgNjM5MzMsIDY5NzM1LCAxMjA4MTUsIDEyMzY5LCAxMDY0OSwgNjc5ODEsIDUwNzcsIDEyMDE3NCwgMTA4ODAsIDYzOTI3LCAKLSAgICA1MDc1LCA5MTc4ODEsIDAsIDY1MDc1LCAwLCAxMTAwNywgOTgzNjk2LCA2NjY1OSwgOTI2MDcsIDAsIDY2Njg0LCAwLCAKLSAgICAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIDUyNzIsIDEwNDk5LCA0NTA3LCA5NTc4LCA2MzkyMywgCi0gICAgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgOTgwMywgMCwgNDUwNCwgMTUwNSwgMCwgNjMyNSwgCi0gICAgNTI3NiwgNDMwMjEsIDEyMDQ4OCwgMCwgNTUyMzYsIDAsIDY2NDYxLCA1MTc3LCA0MTMyNCwgMTIwNTUsIDg3MjIsIDAsIAotICAgIDQxMzI3LCAwLCA2NjY5NSwgNDExNCwgNDA5LCA0MzgzLCA4OTAwLCA4OTQ4LCA0MTMyNSwgMCwgNzIxLCAxMDE4MiwgOTEwOCwgCi0gICAgNzEzMTEsIDAsIDExOTE4NSwgNDIyMjksIDE5NDkxMiwgMCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgCi0gICAgOTQxMDQsIDc4NTcxLCAwLCA3MTMyOCwgMTk0NTYyLCA0MTU3NiwgNDIyMTUsIDc4NTcwLCAxMTkyMDcsIDAsIDg1NzgsIAotICAgIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDE5NDc5NiwgCi0gICAgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA0MzQxNCwgNzM4NTQsIDExNzM3LCA5NzIxLCAwLCAwLCAwLCAKLSAgICAxMTc0MiwgMjQxOSwgMCwgMTE0OTMsIDEyMzM0LCAxOTQ5MTMsIDQxNTMsIDEyMzAyLCAxMDc5MywgNTI1MCwgMTI0MDcsIAotICAgIDExOTc4LCA0NDA0LCA5MTg5LCAxMjQwMSwgNDIwMDcsIDU3NzUsIDY3NTksIDY1ODA2LCA0Mzk5NywgMCwgNDIwMDIsIAotICAgIDEyNDA0LCA5ODM1NTMsIDAsIDQ5NDAsIDEyNDEwLCA3NjgzLCAxMTY3LCA3MzcyOSwgNDk4MywgMTIwNTA3LCA4NjEsIDAsIAotICAgIDAsIDAsIDAsIDQzNzU3LCA0MzM3MCwgMCwgMCwgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIDY2MzEsIDAsIDEyODE2LCA0Mzc1OSwgCi0gICAgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCA3NjE2LCAxOTUwNDQsIDAsIDEyNTc3LCAKLSAgICAwLCA5ODM4NzUsIDg1MywgNDI2OTMsIDE5NTAxNCwgMCwgOTgzNjM4LCA1MDE2LCA0MzUzNSwgNjM4OTMsIDQyODM1LCAKLSAgICA5NDkxLCA5MTc5MTMsIDAsIDkxNzkxNCwgMCwgMTI3MTIsIDcxMDUsIDEyNzgwNywgNjUwNjAsIDEyMDc5NywgOTkwMCwgCi0gICAgNzc1MCwgMCwgMTk0OTE5LCAwLCAxMjc4MzAsIDAsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIDEyODE1MSwgMTIxNzcsIDAsIDAsIAotICAgIDAsIDc3ODI0LCAwLCA0OTAwLCAxMjc4NzQsIDEyODc4LCA5MjYzMCwgODk4NCwgNDExOSwgNzQ3NjgsIDg5NzEsIDc4NTkzLCAKLSAgICA0MzExMywgOTcwMiwgNzg1OTQsIDExMDI1LCA5MjQ1LCAxMzA0OCwgNDkyNywgNDEzOCwgNzQxODUsIDkyNDgxLCA5MjcxMCwgCi0gICAgMTIzOTcsIDc3ODI3LCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDAsIDEzMDUzLCAwLCAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgCi0gICAgNTAxMCwgMTY4MCwgMTA1MDcsIDc4NTkwLCA3ODU4MywgMCwgMCwgMCwgMTk0OTE1LCA3MjY3LCAwLCA3NDgzMywgMTI4MTgxLCAKLSAgICA1OTkzLCAyODE5LCAwLCAxMjcwNiwgNzc4NDAsIDE4OTMsIDcyNjYsIDYzOTE1LCA3MjY0LCA3MjY1LCAwLCAxMzYzLCAwLCAKLSAgICA2Mzk5NywgNjM5MTAsIDYzOTk2LCAzMDc3LCAwLCAwLCAxNTEyLCA2OTkyOSwgMTI1ODksIDQxNDc5LCAxMjgzMTMsIDAsIAotICAgIDQzMzM5LCAwLCA5ODM2LCAxMjA3MjcsIDAsIDQxNDgxLCA0MzMzNSwgNzgzMiwgNDIzNDMsIDMwOTAsIDQzMzM3LCA4MTcsIAotICAgIDE2NjQsIDE4NTAsIDEyODg0MSwgMzA3OSwgMTEzNDAsIDQyNDA4LCA0MjQ0NywgMTI3MTQwLCAxMjAwMjAsIDQyMzA3LCAKLSAgICAxMjM4NiwgNDIzMDQsIDkxNzU1NSwgMCwgMTIzODksIDAsIDkyMzY2LCA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAKLSAgICAxMTQ3LCA2Mzk5MiwgNDI4ODcsIDE5ODcsIDkyNzE4LCA1NDgwLCA3ODU4LCAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAKLSAgICAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgNDE2ODYsIDYzOTA1LCAxMTk2MDEsIDE5NDY4OCwgOTgzMTkwLCAwLCAxMjY0OSwgMCwgCi0gICAgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCA0MzY0MywgMTk0Njg5LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAKLSAgICAxMTk4MTMsIDc3NCwgMTE5ODI5LCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAwLCA3ODM3NSwgMTIwNTk3LCAxMTk4MzMsIAotICAgIDk4MzEwNSwgMTE5NjAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAxMjgzMTIsIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgCi0gICAgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAxOTQ4ODEsIDUyNjIsIDAsIDU1MjMzLCAxMjY4MSwgCi0gICAgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgOTgzNjUyLCAwLCA0MzExOSwgMCwgCi0gICAgMTIwNzUzLCAxMjQwMywgMjUwMCwgMTk1MDEzLCAwLCA0ODk5LCAxMjcyOSwgMCwgMCwgNzQxMTMsIDIzNDMsIDQxMDMsIAotICAgIDE5OTQ2LCA3NDExMiwgNzc4NTEsIDEzMTEyLCAwLCAxOTUwMTIsIDEyODU5LCA3MDA4NywgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgCi0gICAgMTI3NzU4LCAxMTk5OSwgMTI0MDAsIDAsIDk4MzgzMCwgMTI2NDUsIDUxNDYsIDExMzIwLCA2ODQxMCwgNjc0OCwgNjUwNDAsIAotICAgIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIDUxNDcsIDAsIDAsIDc0NTI0LCAwLCAxOTI4LCAwLCAKLSAgICA2NzY0OSwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgMCwgNzc4NjgsIDQyMDYsIDAsIAotICAgIDAsIDAsIDEyODI5OCwgMCwgMTAxMzgsIDAsIDAsIDg4OTcsIDEyMDIzNCwgMCwgODM1NywgNDEyNCwgNzc4NjIsIDY1ODM2LCAKLSAgICAxMjA2NDEsIDEyNzkyNiwgNzc4NTksIDAsIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAxMjQwNSwgMTIwMTUwLCAKLSAgICA5MjY2NCwgMzk4LCAxMzI3OCwgOTcyMywgNjM2NiwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCA5OTcwLCAxMjQwMiwgCi0gICAgOTgzMTM2LCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAwLCA0MTQ2NCwgMTI0MTEsIDEyOTY5LCAxMjA4MjQsIAotICAgIDQxNDY1LCA5ODM1NjUsIDg1MjgsIDE1NzUsIDAsIDYzOTU1LCAxNjUsIDMwMjQsIDQxNDY3LCAxMTkxNjMsIDAsIDkwOTMsIAotICAgIDAsIDkxNDcsIDEyODc4NywgNjM5NTgsIDAsIDkxNDgsIDk2OTIsIDQwOTYsIDUzLCA3Mzc3NiwgNjc1MCwgMTk1MDE4LCAwLCAKLSAgICA5NTk0LCAwLCAwLCA0MzUyNywgMCwgNzI3LCAxOTQ3MDMsIDE5NTAyMywgNTgwNSwgMCwgNjcyNiwgMCwgNDIxNzYsIAotICAgIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMjI4MCwgMCwgMTIzNzIsIDEyMDY0MiwgMTIwMzA3LCAwLCA5MjM0MywgMCwgCi0gICAgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgMTk0NzAxLCAxMDgwMywgNDEzMiwgCi0gICAgMTIwMzA2LCA2ODQ3NCwgOTI0NzMsIDAsIDk4MzMwNSwgNzQ4MzcsIDEyMDE1NSwgMTQ5OSwgMCwgODA1NSwgNDI3NDAsIAotICAgIDYzOTY1LCAwLCA2Mzk2MiwgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCA2Mzk2OSwgMTE3ODEsIDQyNzE4LCAKLSAgICA4Nzg4LCAxMzU3LCA2NDg1MSwgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgOTk0MSwgMTIwMTcyLCAwLCAxOTMzLCAKLSAgICA2OTY1NSwgOTU2NCwgMCwgOTI0MzUsIDczODY2LCAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgMTgwNCwgMzMxMSwgNjc2MTUsIAotICAgIDcwMDgxLCA3ODMwMiwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIDEyNzQ3NSwgMCwgNjgyMDAsIDY2NzUsIDEyODE0NCwgMCwgCi0gICAgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIDkxMzIsIDAsIDY0NjE5LCA1MTAsIDY0NjYzLCAwLCAwLCA0NTYxLCAKLSAgICAyMTAxLCAxMzk4LCAwLCA5MjU1NCwgNzQwMzQsIDQxNTY5LCA5MjY4NCwgMTE0MDYsIDgxNjcsIDEyMTI3LCAwLCA4NDAsIDAsIAotICAgIDEyNjUxOCwgNzEwMSwgNjk2NywgMCwgMTk0ODk4LCA5Nzk2LCAwLCAzMzMsIDY5ODkxLCAwLCA4MTQ0LCAyMTE3LCAwLCAKLSAgICA5ODM1OTUsIDEyNDA2LCAwLCAxOTkzMSwgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgCi0gICAgNDc2NCwgNDMxMDEsIDk5ODEsIDAsIDQwOTg2LCA0MTI3LCA2NjQ4NywgMCwgNDIyMDIsIDEyNzU0LCAxOTUwMjIsIDAsIDAsIAotICAgIDk0MDk3LCA2NzU5NCwgMjA0OCwgMTI5NDQsIDQwNTAsIDY3NTk1LCA5MTc5NjcsIDQzMTAyLCAxMDU4MSwgMTI5ODUsIAotICAgIDQ1MzMsIDE5NTAyMSwgNzQwMDMsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAxMjA3MDQsIDY1NDYxLCA5Nzk4LCA2OTcwNCwgMCwgCi0gICAgMTk0OCwgNjk4NDEsIDAsIDk1MiwgMTI4MjM1LCAwLCAwLCAxMjA4MDIsIDY0NDksIDk0OTQsIDEyMDMxMywgMCwgNDMwOTgsIAotICAgIDQ4NDMsIDgxNDIsIDY0MTYwLCA0MDk4LCA2NDE3MCwgMCwgMCwgMzQzNiwgMTE5OTczLCAwLCAxMjgxNywgNjc1OTcsIAotICAgIDY2NzYsIDM5MzAsIDQyNjE1LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgCi0gICAgMCwgODUwMCwgNDIyMjIsIDEyMDE0MiwgNzM3NDMsIDEyMDQwMCwgNDMxNywgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgCi0gICAgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgOTgzNzM4LCA2Mzg0MSwgCi0gICAgOTYxMywgOTAwMSwgNDUyNiwgMTEyNzQsIDY3NjAxLCA2NDUyMCwgNjQyMTAsIDY2NjQsIDc4NzA0LCA0MjA1NiwgMTAyMjgsIAotICAgIDY0OTU3LCAxMTI4MSwgMCwgMzgwNywgMTQ2OSwgNjY2NDAsIDY1MzgxLCA0MjE5NywgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIAotICAgIDkwNCwgMzUyLCA0MjIyNSwgMTQ1MSwgODA2MSwgODQ1MywgNDEzNCwgMCwgNzQ4NDcsIDY2NTc2LCAxMjc5MTYsIDAsIAotICAgIDEwNTIwLCA4NTc1LCA5OTYwLCAxMjAxLCAxMjcyODksIDEyODQ2LCAxMjcyOTEsIDEyNzI5MiwgMTE5MTksIDY0OTYyLCAKLSAgICAxMjcyODcsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIDgyMywgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMTI3MzA1LCAKLSAgICAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgNjU3NjEsIAotICAgIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIDk4MjEsIDY0MzA0LCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgCi0gICAgNjgzNjYsIDY0NDEwLCA5MjMwNSwgMCwgNDMyMywgMTIwMDYyLCA5MjY2OSwgNzEzMzIsIDEyNzA1MiwgNDI1ODcsIDQyMjE0LCAKLSAgICA0MTM5NCwgMCwgNDc2MywgNDExMiwgMTE4OTM1LCAwLCA1MjYwLCA0MzE0MywgOTQwMzgsIDMyNiwgMTIwMTMxLCA2ODQyMywgCi0gICAgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgMTk0OTI0LCA0MTM5OCwgNzM4MiwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIAotICAgIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAKLSAgICAxMjY0OTAsIDE5NDg4NSwgNDMxNDQsIDQxMjMsIDg0OTQsIDQzMTQ2LCA5OTc3LCAwLCAwLCA2NTc1OSwgMTA3NjUsIAotICAgIDY0MDYxLCA0NDY1LCA5ODA4LCA2NDA1NiwgNjU1ODIsIDQxMjYsIDAsIDk1MjEsIDk1ODksIDY0NzU1LCAwLCA2NDAyMCwgCi0gICAgMTI2NjA0LCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgMTE1MjgsIDY0MDI0LCAxMjgwNzIsIDY3OSwgNjQwMTMsIDAsIAotICAgIDU4NTAsIDc1OCwgNzUzNiwgMCwgOTIyMzQsIDQxNDQxLCAxMDY5MywgNjQwMDYsIDk4MzU2NywgNjQwMDUsIDQwNTgsIAotICAgIDExOTAxOSwgMTI2NDg3LCA2NDY2MCwgMCwgMTE5MDUwLCAwLCA5ODMwNjksIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIAotICAgIDg5NzAsIDAsIDk5MzQsIDk4MzA5NCwgMTA3NzQsIDEyODAyMCwgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDAsIDE4NTIsIAotICAgIDMwNTcsIDY0MDQ2LCA3Mzc0NCwgNjQwMzQsIDY0MDM5LCAwLCAwLCAwLCAxOTQ4OTksIDkyMzIyLCA3NjQ1LCAxMjg1NCwgCi0gICAgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIDkxMDIsIDYyNywgMTI3Nzk1LCA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAKLSAgICAxMzMwOSwgMTE1NzAsIDEyNzgxMSwgMTk5NjAsIDExNjk2LCAwLCAxMDE4LCAxMTg5NzAsIDE5NDkwOSwgMTk0ODk3LCAKLSAgICAxNjgyLCAxOTQ4OTYsIDE5NDkxMSwgNDI3NTYsIDY3NjUsIDE5NDkwNiwgMCwgMCwgNzM4MTQsIDExNDEyLCA2NzY4LCAKLSAgICAxMDcyOCwgMTk0ODMwLCA3MTMxNiwgMTE4ODYzLCA0MzMxMSwgNjQ5NjYsIDExNTc3LCAwLCA0MzA0MCwgMTgzMywgMTE1NzYsIAotICAgIDAsIDc0Nzc5LCAwLCAxODUsIDY1MDg1LCA3NDUzMywgNjQ3NTQsIDE5NDg0OCwgNzUzNSwgODA4NSwgNDI1MjUsIDEyMDM4NywgCi0gICAgOTc0OSwgNDE3MDEsIDYxMzEsIDE5NDksIDQxMTcsIDc4NDcsIDEyMDQ4OSwgMTk0NzExLCA2NDQ4MywgNjU2OTMsIDAsIDAsIAotICAgIDAsIDY5Njk1LCA0MjI0MCwgMCwgMTI2NjUxLCA0Mjg2NCwgMTI2NDk4LCA2NDY2NywgNDE4NjgsIDExODQsIDAsIDgxNSwgCi0gICAgMTE0ODQsIDEyNzUzNSwgNjc4NDAsIDk4MzY0MiwgMCwgNjYxOTcsIDAsIDEwOTg2LCA2NDY4MywgOTgzNzc2LCAwLCAzNDU1LCAKLSAgICAwLCAwLCA5ODc5LCAwLCAwLCA0MTU4LCAxMjgwNTAsIDY4MTY2LCAwLCAwLCAwLCAwLCA2OTY0NSwgMzMyLCAxMTg4MDgsIDAsIAotICAgIDUxNDIsIDI0MDcsIDY5NjQzLCA0MjE5OSwgMCwgOTI0MDQsIDc0MzczLCAwLCA1NTIxNywgMCwgNjM4NzAsIDQzMTYzLCAwLCAKLSAgICAwLCA5MjM5MCwgNDI4NjcsIDE4MzQsIDAsIDkyNDYxLCA2OTgxNywgMTA5NDAsIDY1MjQ5LCAxMTkwNDAsIDg2NjIsIDAsIDAsIAotICAgIDI2NTIsIDEyMDUyNywgNzE2NCwgMTA3ODQsIDE5NTA5MywgNjc2NzQsIDAsIDkyMjMzLCA5MjQ4MiwgMTk0NzQ5LCA3NDU2MiwgCi0gICAgOTE3NTA1LCAxODI4LCA3NDQ3NCwgMTIwMzI3LCA3ODYyMCwgODUzMSwgMTI0OTksIDYyODAsIDEyMzI0LCAxMTg4NTQsIAotICAgIDY1MjM4LCA2ODM3NCwgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIDE2MjAsIAotICAgIDY0NDM2LCAzNjAxLCAxOTUwOTQsIDEyODA3MywgOTgzNTYyLCA2MDksIDExNTU1LCA5ODMwOTksIDEyNDk2LCAxMjc4MzksIAotICAgIDc0MTgxLCA0MzQzLCAxMjUwNSwgMCwgMTI3ODYzLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAwLCAwLCAKLSAgICAwLCA0MzU2NSwgNzEzMDYsIDEyNjQ5MywgMTI2OTYsIDEyODI1NiwgMCwgOTQwNjIsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIAotICAgIDk4MzIwNCwgNDI4MTgsIDEyNjYzMiwgMCwgMTIwNDkwLCAwLCAxMTkxMzcsIDE1MDYsIDQzNTYyLCAwLCA5MjQ5MSwgMCwgCi0gICAgMTI2NTEsIDAsIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAKLSAgICAxMTg4NDQsIDAsIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAKLSAgICAwLCA2OTc2MCwgNDI1NzEsIDkyNjM1LCAwLCAwLCAwLCAwLCAwLCAxMjcxNzYsIDMxNzgsIDAsIDAsIDkyNzA0LCAwLCAKLSAgICA5MDgwLCAxMjcwMDAsIDEyMDM1MiwgMCwgNjgyMDksIDAsIDExMDgyLCAwLCA1Njk5LCAxOTUxMDAsIDY2MDAwLCA5NDg4LCAKLSAgICA2NTE2NiwgMTE5MTEyLCAwLCAwLCAwLCAwLCA3MTMxMywgMCwgNTI2NSwgNjkyMzUsIDAsIDExNDg3LCA2Nzg1OCwgMTI0NjQsIAotICAgIDAsIDQzMDQ1LCAwLCAwLCA0MzM0NSwgMCwgMTA3NzAsIDExODk5NCwgNjgwNywgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgCi0gICAgNDMzNDYsIDgxMTYsIDc5NSwgMCwgMCwgMTI0NjIsIDEwOTMwLCAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgNzQzMzQsIAotICAgIDk4MzYwMiwgMTIwODExLCAwLCAxMjQ2OCwgODYwNywgMTAwOCwgMCwgMTAwOTIsIDE5NTA3OCwgOTE3ODQyLCA2Nzg1NSwgCi0gICAgNTUyNTcsIDczNzcxLCAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIDQ1NDcsIDAsIDAsIDAsIDAsIDEzMjIzLCAxMjg2NjUsIAotICAgIDY0NTk1LCAxMjcyOTQsIDAsIDkyMzExLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIDAsIDAsIDAsIDUzODIsIDAsIAotICAgIDAsIDAsIDExOTA2MCwgNjQ5NTMsIDU0MDYsIDE5OTIwLCA2OTg5NywgNjY1MTAsIDM1OTAsIDE5NDg2NCwgMTEzMCwgMCwgMCwgCi0gICAgNDIwMTYsIDExODIzLCA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgNzEzMjMsIDkzMjYsIDczODI2LCA1MzEwLCAKLSAgICA3NDgxMiwgNzg1ODQsIDkyMjI5LCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDAsIDg1NjgsIDAsIDEyMDQ5NiwgNzM4MTYsIAotICAgIDEyMDgwMywgOTgzODM5LCA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgCi0gICAgMTI3MTgyLCAwLCA3MzkxNywgNzg0MywgNjk3ODMsIDExNjg5LCA1NDEwLCA1NzgzLCAxMDQ2OCwgODQwMywgNTQwMCwgCi0gICAgMTE1OTQsIDEyODI0NywgMCwgMTE4OTkwLCAxMDQ5MSwgNjk4NDIsIDY0NDEyLCAwLCAwLCA1NTg3LCA0Mjg2NSwgNjQ0MDQsIAotICAgIDgyNjgsIDQ5MjMsIDY1MDg2LCA4OTgxLCAxMjM4MiwgNDIxMzMsIDEyMDc1NSwgOTcwNiwgNjk3MzgsIDAsIDY2NjEwLCAKLSAgICAxMDQ2MSwgMTIxMDMsIDAsIDg2NDIsIDAsIDQyNzY2LCA5ODM4NTcsIDIyMTAsIDk5ODMsIDAsIDk0MDA5LCAwLCAwLCAwLCAKLSAgICA3Mzk4LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCA2NzQ5LCAzNjU4LCA5Mzk2NCwgCi0gICAgMTIwNTI1LCAwLCA3NjE3LCAxOTQ4NDEsIDEyODg4LCAxMjc5ODMsIDY3NjY4LCAxMzE0MywgMCwgOTE5MywgMTEwOTcsIAotICAgIDU3MDMsIDAsIDQxNTE3LCA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIAotICAgIDEwNjYwLCA1NzY5LCA2MTMsIDc1NDMsIDEyMDI3OSwgNDc3LCA0MTA4MywgOTI1MjEsIDAsIDU5MiwgMTU3OCwgMTI0NTksIAotICAgIDQzNDQ5LCAwLCAwLCA4MjI1LCAwLCA2NTQsIDExMzQ1LCA2NTMsIDY1MiwgMCwgNjQ3LCAwLCA2MzMsIDEyMDc0NCwgMCwgCi0gICAgMTI2NDcyLCAxMjQ4MCwgNDMyNDMsIDAsIDM5LCAxMjQ4NywgMCwgMTIwNTI5LCA3NDE5OSwgMTI0ODIsIDAsIDEyNDg5LCAwLCAKLSAgICAzMTk1LCA1NTUwLCA5ODM1NTQsIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAKLSAgICAyODc3LCAwLCAwLCAxNjc1LCA2OTg0MCwgMCwgMCwgMCwgMTAwNzAsIDEwNTk1LCAwLCAxMTkwNzcsIDE5NDc3NywgCi0gICAgOTgzNjExLCAwLCAwLCAwLCA0MzI0NCwgMCwgMCwgOTgzOTA3LCAxMTk1NjEsIDk4MzA3OCwgMCwgMTk0OTIxLCAxMjgxNjAsIAotICAgIDk5MzksIDAsIDk4MzE1MSwgNzc4NjAsIDAsIDAsIDI3MCwgMCwgMTA3MTQsIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCAKLSAgICA3NDAzOCwgMTE5NTU4LCA2MjczLCA2NjY3OSwgMzY0LCA5NTk1LCAxOTQ5MDgsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgCi0gICAgNjY0ODksIDIyNCwgMCwgNjg2NzAsIDkzMzIsIDQ5NjYsIDY4Njc3LCAwLCA2ODY0NCwgMCwgMzg0MSwgNjg2MzQsIDAsIAotICAgIDEwNzMyLCA2ODY0MCwgODUwLCA0OTcyLCAwLCAxMjg5MCwgMjkwOSwgNjg2MTksIDQ0MDA4LCA2ODYyNywgOTgzNzA5LCAKLSAgICAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIDExOTYyLCAxOTQ2OTQsIDEyNTA3LCAxMTk2LCAxMjg2ODcsIDEyODMxMSwgCi0gICAgNzc3LCAxMjAxODcsIDQzNzUsIDY1MjcxLCA2NzY3OCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAxMTkzNDMsIDk4MzIzMCwgCi0gICAgOTQ1NCwgNjM3NzgsIDg2NTgsIDQyNTI4LCA3ODAwMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIAotICAgIDQyNTAyLCA4MjgwLCA3NDUyMCwgMjcwMSwgMCwgMTI3MDAyLCA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgCi0gICAgNjY3MDEsIDYzNzcyLCA5ODM4MDUsIDYzNzQ1LCAxNzQ4LCA2Mzc3MCwgMCwgMCwgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgCi0gICAgMzA2MSwgMCwgNjM3NjQsIDYzNzg3LCA5MDY3LCA2MDk2LCAwLCA3Njk0LCAwLCA3MjU3LCA2Mzc2OCwgMzQ4NSwgMTI5ODcsIAotICAgIDAsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIDAsIDAsIDkyNTM1LCAwLCAwLCAwLCAKLSAgICA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgMzEzOCwgCi0gICAgMTA5OTYsIDkyMjQ3LCAxOTIyLCAwLCAxMjQ5OCwgMTA5ODcsIDY5OTM2LCA2OTkzOSwgMzg5NCwgNjU1NDMsIDAsIAotICAgIDE5NDg0MiwgOTgzNTg4LCA0OTMsIDAsIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA3NDAyMCwgMCwgOTE3OTM1LCAKLSAgICAxMDMzNSwgMzUyMCwgOTE3OTMyLCAxMjQ5MCwgNjQzMTUsIDAsIDEyNzAzOSwgMTI0OTMsIDYyMzMsIDQyNjgxLCAxMDAyLCAKLSAgICAxMjQ5MSwgMCwgNjQ5MTEsIDkyNjE1LCAyMDk2LCA2NTEyMCwgMCwgNzgyMTksIDk4MzA4MSwgMTE2MTEsIDExNjMyLCAKLSAgICAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgCi0gICAgNjYyMzYsIDY2MjExLCA2NjIxOCwgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgCi0gICAgNjYyMzQsIDExNjA1LCA2Mzc1OSwgOTgzNjQ1LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgCi0gICAgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIAotICAgIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIAotICAgIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCAKLSAgICA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIAotICAgIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgCi0gICAgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgCi0gICAgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkxMSwgMCwgMCwgMjMyMywgCi0gICAgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIAotICAgIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgCi0gICAgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIAotICAgIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIAotICAgIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIAotICAgIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIAotICAgIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc2OSwgOTM3MiwgCi0gICAgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCA5ODM5NDksIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgCi0gICAgODc0NCwgNzI2LCAwLCA5ODM4MjgsIDQxNTUsIDAsIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIAotICAgIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgOTgzODMyLCAxMjUyNSwgOTgzNDYzLCAxMjAxNiwgNjU3NzAsIAotICAgIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIAotICAgIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgCi0gICAgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgCi0gICAgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgCi0gICAgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIAotICAgIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIDk4MzkzOCwgNDk4LCA2NDQ3MSwgMTIwMzI0LCAKLSAgICAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIAotICAgIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIAotICAgIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCAKLSAgICA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIAotICAgIDk2MDcsIDAsIDk2NjMsIDAsIDExOTYzNCwgNjUwMywgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDEyNzMwNCwgNDEwNjEsIDAsIAotICAgIDE5NDgzOCwgMTI3MTg3LCA2NTAyNiwgNDE5OTMsIDQxNTA5LCAxMTA0NSwgNjUwMjgsIDc4NjAyLCA2NjQ3NiwgNDExMDgsIAotICAgIDk3MzgsIDQxOTk1LCAxMDc1LCAxOTU4LCAxMjUzNSwgNDE5OTIsIDQxNTA2LCAwLCA0MTY4NywgMCwgMTIwNzE3LCAKLSAgICAxMjc3NzYsIDk5NDAsIDEyNzI5OSwgNzY5MiwgOTgzODI0LCA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIAotICAgIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgCi0gICAgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAKLSAgICAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDk4MzEwMywgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAxMjg4MTAsIAotICAgIDk4MzYzNiwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAxMjQ4NCwgNDAzMiwgMTI4MTQ5LCAxMjYyMywgMCwgNjIwNywgCi0gICAgMCwgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIDIzMjUsIDQxNTExLCAxMjY2MjUsIDEwMTQ5LCA3NDExOCwgCi0gICAgMCwgMTI3Mjg2LCAxMjQ4MSwgMCwgMTI0ODgsIDY2NzEzLCAwLCA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIAotICAgIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCA2NTAzMiwgNDE1MTMsIDk4MzE2NiwgMTE5MjcsIDY2NTg0LCAKLSAgICA3ODU1OSwgNzg1NjAsIDc4NTU3LCA3ODU1OCwgMCwgNzg1NTYsIDg0OCwgOTg2OCwgMCwgNjQyNCwgNzg1NjgsIDExOTMzOCwgCi0gICAgNjk5MjIsIDc0MDMxLCA3ODU2MywgNzg1NjQsIDIzNTIsIDc4NTcyLCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgNjc5NzMsIAotICAgIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgNzg1ODAsIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgCi0gICAgMTM0MywgOTgzODE0LCAwLCA5MzI1LCA2ODE4LCA2MjgzLCAxMTczOCwgMCwgOTgzOTI1LCAwLCAxMTc0MSwgMCwgMCwgCi0gICAgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgOTgzODE2LCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAKLSAgICAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIAotICAgIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCA3NDU4MywgNzQzNDAsIDY5NjgxLCAwLCA0MzAwMSwgODAyOSwgMCwgMCwgOTgzNzcxLCAKLSAgICAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIDE5NDc0OCwgNTIxNSwgNDI2NDQsIDMzMzMsIDE2MzIsIDE5NDc1MSwgNjQ4NDksIAotICAgIDMzNDIsIDc4NTgyLCA1MzYzLCAxMjk1NywgNzg1ODEsIDQxNTYsIDAsIDAsIDY0MjEsIDc4NTkxLCAxNjExLCA3ODU4OSwgCi0gICAgMTMwMTgsIDc0MjU3LCA3ODU4OCwgNzQ1NDIsIDMzMzcsIDQ1MzcsIDY3ODk1LCAxMTczNiwgMCwgNjg2MDgsIDY0ODIsIAotICAgIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAKLSAgICAxMzA0NywgMCwgMCwgNjgxOSwgMTMwNDksIDY0OTksIDkyMjQzLCAxMjQyNCwgNjg2MTQsIDczOTQ0LCAxMzA1MCwgOTkyNCwgCi0gICAgMTk0NzQ1LCA2NTA3LCAxMjc5MTksIDk0MDczLCAxMjgwNjksIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIAotICAgIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgCi0gICAgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgNjk3MzYsIAotICAgIDQxMDU3LCAwLCAwLCAwLCAwLCA5ODM3ODIsIDkyMjEwLCA5MjQxMSwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAKLSAgICAwLCAxMTg4NDIsIDIzNDYsIDEzMjcwLCA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNTgzMSwgMCwgMCwgCi0gICAgMTMwNDMsIDgwNTYsIDkyNDk0LCA2NTY4MSwgMjA4LCAxMjczODIsIDQxNTE0LCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgCi0gICAgOTIyMjcsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDEyNjU5NiwgMCwgMTE5OTMzLCAKLSAgICAwLCAzMTE1LCA5OTE4LCAwLCAxMTMyMSwgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCAKLSAgICA5ODMyNjYsIDQxNTU4LCA0MTQ3MSwgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAxMjAyOTgsIDEzMDUxLCA3ODY4OSwgCi0gICAgMzE0MywgMTk0Njc0LCA2NzAxLCA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIDU2NjUsIDAsIDExOTA3MSwgCi0gICAgNzAyNSwgNjM5NzQsIDAsIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCA1NjYyLCA0MjM4MiwgCi0gICAgMTk0Njg2LCA3MzkyNCwgMTEyMSwgNzgzMTksIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgMCwgNjQ3NTIsIDQ3MzIsIAotICAgIDE5NDY2NiwgMTE1OTYsIDExOTkzMSwgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgNjQ3NzIsIDQyMDI0LCA2NDIwLCAKLSAgICA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIDQ5MTAsIDE5NDcyOCwgNjkyMzEsIDY0NzUzLCA2Mjc1LCA5Mzk1NywgMTE4ODMwLCAKLSAgICA2Mzk3OCwgMTEwNDQsIDMyMjksIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgOTE3ODEwLCA3MDg1LCAKLSAgICA2MTM3LCAwLCA3NTI0LCAwLCA5MTc4MDksIDgzNDYsIDAsIDgzMzgsIDEyODMxNSwgNjUwNDMsIDAsIDgyMiwgMTI3OTg0LCAKLSAgICA5OTAzLCA2NDcyMSwgNDI3MjIsIDY5ODc3LCAxOTQ2NTksIDc4NjU1LCA3ODY2MSwgMTk0NjYwLCA3ODY2MiwgNDEyNjUsIAotICAgIDUzMTEsIDE3OTUsIDk2NSwgMTE4NzkxLCAxMDU4NywgNzgwNTUsIDExMjc4LCA3ODYzMiwgMTk0NjQwLCAwLCAxMjk0NiwgCi0gICAgMTk0NjQxLCAxMTkzNDEsIDEyMDM0OSwgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAKLSAgICAwLCA5ODM5NTEsIDc0OCwgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDc4Nzk5LCAxOTQ2MjksIDEwNTU2LCAKLSAgICAyNDc1LCAxMjM4OCwgNDg4OSwgODk2OCwgNjc4NjMsIDM1OTMsIDAsIDAsIDIzNDIsIDAsIDE5NDYzNCwgNjUyMDYsIDQ4OTQsIAotICAgIDE5NDYzNSwgNDg5MCwgMTk0NjM3LCA5MTc4MDQsIDU4MSwgNDg5MywgOTgzNjE2LCA2NTcxLCA2NTU0NSwgNDg4OCwgNDE1NywgCi0gICAgNzgwNDgsIDc4MDQ5LCA3ODA0NiwgNzgwNDcsIDAsIDEwMTE5LCA2NDE1LCA0Mjg5MywgMCwgNjk3MDIsIDAsIDAsIDExMzc1LCAKLSAgICA2NDc0NiwgMjMzMiwgNzgwNjMsIDQxMiwgNzgwNjEsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIDAsIDAsIDAsIDAsIDY1MTk3LCAKLSAgICA3ODA2NiwgMTIyMDMsIDc4MDY0LCA3ODA2NSwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIDEyMDM4OSwgCi0gICAgMTE4ODg4LCA5MzQ0LCA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCA3ODA3NSwgCi0gICAgMCwgMzEzNCwgMCwgNjU2OTYsIDkyMzMxLCAwLCA2NjIxNywgMCwgODMzNCwgMTE5MzQ0LCAwLCAzNDQ5LCAwLCAwLCAKLSAgICA3ODQxNCwgNzg0MTMsIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIDEyMDE2NywgNDMyOCwgMTA3MzQsIAotICAgIDEyNzAxNCwgMCwgMTI3OTE0LCA3ODA0LCA3ODI3MiwgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgCi0gICAgNzgwNTQsIDQ5MTcsIDc0NTE2LCA3NDIwOCwgNjQyODUsIDQ5MTIsIDU0NjQsIDEyNzgzNiwgMTE4ODkzLCAyMzYxLCA3OTcxLCAKLSAgICA3ODA3MiwgNzgwNzMsIDU1MjQzLCA3ODA3MSwgMCwgODA4NiwgNzQzMTcsIDY3MDcsIDgzMTksIDIzMTIsIDQwOTc3LCAKLSAgICAxMDk2MCwgNDA5NjIsIDgzMDUsIDEyNTczLCA5ODM2MDgsIDQwOTgwLCA5ODM5NTUsIDEzMjAyLCAwLCAxMjU4MiwgNzgyODIsIAotICAgIDk4MzA0OCwgNjk4NTYsIDQyNDM4LCA1NTIyMSwgNjI4OCwgNzgyODAsIDEyNzk0NiwgNTY1MywgNDI0MDAsIDEwODkxLCAKLSAgICA3Njk4LCA1NjU4LCA3NDA0NSwgNzAwMzksIDAsIDAsIDQ5MTMsIDAsIDk4Mzk1MCwgNzEzMzMsIDQyMzI2LCAxMjgxOTQsIAotICAgIDEyNzI4LCA5MjY4NSwgNDI0NzgsIDIzMjcsIDAsIDEyNTYzLCA0MjI4NywgMTI3MDUsIDAsIDAsIDEyNTg4LCA4ODIxLCAKLSAgICA2MTUzLCAyODY3LCAxOTQ3MDgsIDY2MzEyLCA2OTgsIDEyODAwNywgMTk0NjA2LCAxMDM1NiwgNzAwMTcsIDE5NDcxMywgCi0gICAgNjUxLCAxMjY0MSwgMCwgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIDc4NDYzLCA3ODQ2NCwgMTI4ODUxLCAKLSAgICA3ODQ2MSwgMTk0Njk3LCA3NDM1NiwgNjQ5NDUsIDQ3MTYsIDQzMjc3LCAwLCA3ODQ3NCwgMTIzNDAsIDEyMDU2OCwgMCwgCi0gICAgMTk0NzAwLCA1NTI2NCwgNDEyMTEsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCA5ODM0ODcsIDEwMTAxLCAwLCAKLSAgICA3MDA0OSwgODQ3OSwgNDE1MSwgNDE5MzMsIDAsIDAsIDY2MjU0LCAxMjA4MjEsIDAsIDAsIDEyODY1NCwgMCwgMTE5MTk0LCAKLSAgICA3NDA1MCwgOTI3MDEsIDAsIDAsIDAsIDAsIDAsIDEyMjc4LCAwLCAwLCAwLCAyNzAwLCAxMjU3NiwgNzg0MiwgMTI4OTksIDAsIAotICAgIDAsIDI2OTksIDAsIDczODQ1LCAyOTg1LCA5MjU2OCwgMTI2NDc1LCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgCi0gICAgOTgyNywgMTE5MzEwLCAxMTkzMTEsIDExOTMwOCwgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAKLSAgICAzNSwgNzg0ODEsIDc4NDgyLCA2NjY5NCwgNjg0NzksIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAKLSAgICAxMDUzNCwgMCwgNzg0ODUsIDczODQ4LCA2Nzk3NSwgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCAKLSAgICA3ODQ4NywgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgMjI5MiwgNjgyMTYsIDAsIDkxNzgyNiwgNTI0NCwgCi0gICAgNDE4OSwgOTQxMDgsIDY3NTk2LCAxMjc1MDQsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDIyNzksIAotICAgIDAsIDkxNzgyNywgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMTI3MDk5LCA0MzY1NywgMCwgMCwgMCwgNDI2ODIsIAotICAgIDEyNTc4LCAxMjcyMCwgMCwgNDEyMjcsIDAsIDEyMzQ2LCAxMjcxMDEsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAKLSAgICAxMTg4NTAsIDExOTE0MSwgMTI4NTQ2LCA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDc4ODA4LCA5NDY5LCAKLSAgICA5NjMyLCA5MjMyMywgNzQ3NjEsIDY0MzIzLCAxMjczMzUsIDAsIDAsIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCAKLSAgICA3MTMyNSwgMCwgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgCi0gICAgMTI3MzAsIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAxMjAxNjEsIDAsIDAsIDQxOTM0LCA3NDY1LCAwLCAKLSAgICAxMjgxNjgsIDk4MzI2MCwgNDcxNSwgNjEwMSwgOTQxMDYsIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAKLSAgICAxMjcxNDcsIDk1ODUsIDUzNzQsIDk4MzI1OSwgMTI4MDU5LCAwLCAwLCAxMjY2MTgsIDEyMDM5MCwgMCwgNjU1NjcsIAotICAgIDEyMDYxNCwgMTkyOSwgMCwgMTIxNDIsIDAsIDEyMjM2LCA0MTQxOSwgMTk0NjE4LCAxMjA2MTAsIDEyOTgyLCAxOTQ2MjMsIAotICAgIDUzNzgsIDc4NzkxLCAxMjg2NzksIDQxNDIxLCAwLCA0NDYyLCAwLCAxMjY1OTksIDEyODA5MiwgODIxLCAwLCAyNDk4LCAKLSAgICA1ODAwLCAxMjAxNTcsIDk4MzExNSwgMTc2MCwgMjQyMSwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAKLSAgICAxMTg1LCAwLCA3ODc3MCwgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIAotICAgIDEwOTQyLCA3NzEzLCAyMzQ4LCAwLCA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgCi0gICAgODYyLCA2NTYyNiwgNzg0NjIsIDE4MTAsIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIAotICAgIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDkyMjI4LCAxOTQ1OTgsIDE5NDYwMSwgCi0gICAgNDIyNjAsIDU4NzEsIDExOTA3NSwgMCwgNzQ1NzYsIDQ0MDE5LCAwLCAxMjgxODksIDM5NjcsIDE5NDYwNCwgMTMxMzcsIAotICAgIDg3NzUsIDEyNzk0NSwgMCwgMjk2MywgMCwgODQxMCwgNDQ1NCwgNzIzLCAxMjc4ODIsIDk2NiwgNDQ0OSwgOTIzMzAsIAotICAgIDkyMjM4LCAwLCA3ODE5LCAyMzIwLCAxOTQ1ODksIDMzOSwgNDk2OCwgMTk0NTkwLCAxMjAzOTksIDgwNzUsIDU1Mjc2LCAwLCAKLSAgICA4MDQ3LCAwLCA3ODgyNywgMTI2MzQsIDQxNTQyLCA3ODc4MCwgNzQ2NiwgNjcwNSwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgCi0gICAgOTgzNzU0LCAxNTg0LCA2NjY0NSwgNjA0NSwgNjcyOSwgMTIwNjQwLCA2NTIxOCwgMTE1NTksIDAsIDc4MDYyLCA3NTM3LCAwLCAKLSAgICAxMTM3MCwgMCwgMTAzMzAsIDAsIDEwMzk0LCAwLCA3NDE5NCwgMCwgMTI3OTI5LCA5NzgwLCAwLCAxMzA5MiwgMTk0NTc2LCAKLSAgICA3Nzk1MCwgMTk0NTc4LCA3MDc0LCA5MjY0OCwgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxMjg4NjgsIDI1MzEsIDEzMDM0LCAKLSAgICAwLCAwLCA0MjExLCAxMjU5LCA3NTE3LCAwLCAwLCAxOTQ1NjEsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCAKLSAgICA5NDAzNCwgMTk0NTY2LCAxMTA2NCwgNDExMjksIDAsIDQyODUwLCAxMzAzNSwgOTA3NSwgOTIzODcsIDU0NjYsIDEyODE1MywgCi0gICAgMCwgNjQwOTgsIDY1NzkzLCA0NTM1LCAxOTQ1NzMsIDQyNzEsIDc4NDE3LCAxMjgzNTcsIDY3NjksIDQxNDEwLCA5ODM0NDQsIAotICAgIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgMCwgNjc1NSwgMTE4ODY0LCA5MDQ2LCAxMjc5MzQsIDEyNjYwOCwgMCwgMCwgMCwgMCwgCi0gICAgNjc2NzUsIDAsIDAsIDAsIDY0MzM4LCAyNTYzLCAxMzAzMywgMjQ3LCAxMTg5MTUsIDAsIDEyMzM4LCA0NjUxLCA2OTg5NSwgCi0gICAgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAwLCA0MTkwMywgNDM0NDcsIDExMDAxLCAwLCA0MjI1NSwgMCwgOTI2NjEsIDY5ODIxLCAKLSAgICA0MTkwNSwgMCwgMCwgMTA3NzUsIDk3OTMsIDUwMDksIDAsIDQyMjY5LCA2NDU4NywgOTgzMDYzLCA0MjUzNSwgNjk4MTIsIAotICAgIDY0NTI5LCA0MTQwOCwgNDI4NTMsIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDk4Mzc2NywgCi0gICAgMTAyMzYsIDY1OTE4LCA0Mzc4MiwgMCwgMCwgNjQ1MDYsIDY5NjUyLCAxMTg5MjEsIDQ3NDcsIDEyODA1OCwgNjk4NDQsIAotICAgIDQzMjAwLCA1ODMyLCAwLCAwLCA1MTQxLCA0MjYwMCwgMCwgNDMyMDMsIDAsIDk4Mzc5MCwgNDMyODYsIDAsIDEyODIxMSwgCi0gICAgNDM3NzgsIDAsIDQxMzA1LCA3ODc3NiwgNDM3ODEsIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAwLCA2MDU5LCAKLSAgICAxMjY5ODUsIDU1MjM1LCAwLCA4NTM1LCAwLCA2NTE5NiwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDEyMDQ4MSwgMTIwNzg2LCAKLSAgICA0MjIzMywgNjQxNDAsIDk5NDYsIDYzODg1LCAxOTQ3OTIsIDExODIyLCAwLCA0MzE4OSwgOTgzODg5LCAwLCAxNzg4LCAKLSAgICAxNTc5LCAxMjA0ODIsIDcxMjk4LCAwLCAwLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCA5NDA1NSwgMCwgMTI4NSwgNjQ4ODIsIAotICAgIDQxMjQyLCA3MDA4NiwgMCwgMTI2NDAsIDAsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgMCwgNzAwODIsIDM5NDAsIDQxNTk3LCAKLSAgICA0Mzc1NCwgMzM5NiwgMTI2NDIsIDg2NjUsIDAsIDAsIDEyNjMwLCAxNjUzLCA5MTc4MTUsIDEwMTUzLCAwLCA2MTY2LCAKLSAgICAxMjA1MTYsIDExODk4OSwgMCwgODgxNSwgNjY2NzMsIDY1MDQ2LCA5Mjg1LCA5MTMsIDQyMjU5LCAxMTkzMTcsIDExOTMxOCwgCi0gICAgMjE0MiwgNjg0NTQsIDQyNDg1LCA5NDAxMiwgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAwLCA5MjY0MywgMCwgMTk0NjczLCAKLSAgICAxMjAzMiwgMCwgOTcyNSwgMCwgNzg0MzEsIDUyNjMsIDEyODE4LCA3ODQzMCwgNDE5MzksIDEwMDIyLCA2NTM4NywgNzg0MTksIAotICAgIDQyNzc3LCAxMDEzOSwgOTgwLCA0MzY5OCwgNjUzODYsIDIyMDgsIDAsIDQzNzAxLCA0MzE5OCwgNzE4NCwgMTIwNjczLCAKLSAgICAxOTQ3OTcsIDkxNzgxOSwgMTAwODUsIDExOTk5MiwgMCwgMTE5OTkzLCA2NjM0LCA5MjM3MywgMCwgMTE5MzIzLCA4MDcyLCAKLSAgICAxMTkzMjEsIDQzNzAwLCAwLCA4ODcyLCA3NzgzLCA5MTc5OTIsIDEyMzk4LCA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgCi0gICAgMTI2OTc3LCAxMjA1NjUsIDk5MTQsIDIyMTcsIDkxNzg1NCwgNzM5NzUsIDYzNjcsIDYzNTEsIDY2Njg4LCAwLCA3ODEwNywgCi0gICAgMCwgNjQ3MzUsIDQxMjQzLCA5MjE5OSwgNzgwOCwgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCA2MzUzLCAwLCAwLCAKLSAgICAxMjA0MjIsIDAsIDE3MTAsIDAsIDAsIDY1NjA3LCAwLCA0OSwgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDc4NjcyLCA5NzQxLCAKLSAgICA3ODMyOSwgNTY0OSwgNzg0NDEsIDQzNDQzLCA2NDQxOCwgMTY0MywgNjUyMTMsIDg0MDUsIDM0NzAsIDEyODIyNSwgMTMyMTMsIAotICAgIDQyNDUyLCA3ODMzMSwgMTIwNjY0LCA3ODQ0NSwgMCwgMTA3MiwgNzg0NTcsIDc4NDUyLCA3ODQ1NCwgNjU3NiwgNDE5ODgsIAotICAgIDQxMTMyLCA2NTY3NSwgMTA4MCwgMTIwMDAyLCA5ODg2LCA1NTIyNSwgMTEwMSwgNjg0MDQsIDEyMzA5LCA1NTIyNywgMCwgCi0gICAgMTI2MzIsIDEwODYsIDE4NjksIDc4Njg1LCA3NjgwLCAwLCA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgMzM4MCwgODEyMywgCi0gICAgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDQxMDk5LCAwLCA2NjMwOSwgMCwgMCwgMTQ5NCwgOTgzMTQ2LCAxMjY2MTMsIDAsIAotICAgIDExNjkzLCAxMjY1MTMsIDEwNDk0LCA5MjY1NSwgNjU4NzIsIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIAotICAgIDczNzk0LCAwLCA4MDIyLCAwLCAxMjA0NjIsIDc0MTA2LCAxMjQxMywgOTQwNjksIDkxNzk5NCwgOTE3OTkzLCA5MTc5OTUsIAotICAgIDU1NzAsIDE4ODEsIDcyMTAsIDAsIDEwMTIsIDQzNzUyLCAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCA5ODMyMzYsIAotICAgIDQyMzM5LCAwLCA2MDYzLCAwLCA3ODM4MywgMTE5NTk0LCA2MDUzLCA2NTYwMiwgMCwgOTIyMDEsIDY0NzI3LCA5MTYwLCAKLSAgICAxOTQ4MjcsIDAsIDAsIDkyMTgwLCAxMDUwMywgMTE4ODEwLCA2MDU1LCAzODcwLCA0Mjc5LCA4NDkwLCAxMjAxMTQsIDQzMTksIAotICAgIDY0Nzg2LCA4NjAyLCAxMjAxMTAsIDExMzI2LCA5MjIwNCwgOTgzMTE2LCAwLCAxMjAxMTksIDc4MzMzLCAxMjAxMTcsIAotICAgIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCA5MTIxLCA1NTY4LCAxMjAxMDcsIAotICAgIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA0MjE1OSwgNDI4NzAsIDEyMDEwMSwgNTg5LCA3MDUwLCA5ODM3OTEsIDQzMjgxLCAKLSAgICAxMDIzMywgNDEyNjMsIDY2MjUxLCA2NTcyOSwgNjYyNTMsIDEyNjQ5NywgNzQwOTksIDQyNjQ1LCAwLCAxOTQ4MTUsIDg1ODMsIAotICAgIDAsIDU4NDcsIDY5MjgsIDEyODA3NCwgMCwgMCwgMCwgMCwgNjY1OTIsIDEyMjA0LCA5MTc5NjIsIDE5OTY2LCA3Nzg1NiwgCi0gICAgNDI1NjEsIDEyMDYyNiwgOTgzMjQ1LCAwLCA4MTIwLCAxMjA3MDEsIDAsIDAsIDEyODAxMiwgNDEwNjMsIDAsIDEwNjY0LCAwLCAKLSAgICA4MzY5LCAwLCA0NTUxLCAxOTQ5NjQsIDMzNjksIDAsIDAsIDk2NzMsIDY2MzM0LCA2NTU4MCwgMTA0NzgsIDExODk2MCwgCi0gICAgMTI1MTcsIDU1NywgOTQ1NywgMTIwMzQsIDk4MzY2MiwgNjM1NSwgMTI1MTksIDQxMDA0LCAwLCAxOTUwMjUsIDc0MDk0LCAwLCAKLSAgICAwLCA3Nzk3MCwgOTgzNTYwLCAwLCAxMjgxNzUsIDEyMTExLCAzOTI3LCAwLCAxMjUxNSwgMTQ3NCwgNjc4OTMsIDU0OTIsIAotICAgIDY5MjMsIDkyMjgxLCAxMDQ0MSwgNzM4MzYsIDAsIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAKLSAgICAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCA5MTc5NTksIDU4NTMsIDEzMDYzLCAxMDM2MywgMCwgMTI5NTYsIAotICAgIDEyODE2OSwgMTIwNzI5LCAxMTMxNCwgOTE3NTgyLCAxMjA2MCwgMCwgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAxMDUxNCwgCi0gICAgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgNDM0MjAsIDc4Mzk2LCAKLSAgICAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTE4OTcxLCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIAotICAgIDExNjQsIDEyODgxNywgMCwgNDE5MTgsIDk4MzE2OCwgMTI3NTQyLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDEyODAwMSwgCi0gICAgNzQ2OSwgMCwgNTI0OCwgMTIyMTgsIDEyMDUzOCwgNjQyNywgNDI4ODQsIDQxMTIzLCAwLCAwLCA0Mjg3MywgNDExMjYsIAotICAgIDk5OTEsIDQxMTI4LCA3NDM3MSwgMTI3MDMxLCAwLCA5ODczLCAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIDQyODQzLCAKLSAgICA2NTkxLCA5MzQwLCAwLCAxNTg5LCAwLCAyOTYsIDc0NDM4LCA3ODg1MiwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAKLSAgICAxMjgwNjgsIDc0NjAwLCAxMjcwMCwgNzQ4MzYsIDAsIDEyNTc5LCAwLCAxMjU3NSwgNjQxNiwgNTY1NiwgMjg5MSwgMTMyNjIsIAotICAgIDY1NTkwLCA1Mjk5LCAwLCAxMTQ3MywgNTQ0OSwgMTI1MiwgMCwgNzg0MDQsIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIAotICAgIDkxNzU2OSwgNzQxMTQsIDEyMjMsIDE2NDIsIDE3NCwgNzgzOTksIDg4MywgNDE2MSwgMTI2OTEsIDQyNjAzLCA0MTQxMywgCi0gICAgMzIxMiwgNDE0NTksIDMyMTEsIDc0ODEwLCA0MTQyNSwgMTI3MDI5LCA3ODQxMiwgNzQ0NTAsIDk3MjgsIDM4NDYsIDgwNzAsIAotICAgIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIDQ5ODYsIDEyMTg5LCAwLCAKLSAgICA2NzY0OCwgMTIwNDk5LCA5NDAwMSwgNDI1NywgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgNzc5NDksIDAsIAotICAgIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCA2OTY3OSwgNjk2ODQsIDk4OTAsIDc4NTYxLCAxMjk3MSwgNzg0NTMsIDkyNTU2LCAKLSAgICA3Mzg5OCwgMTE5NzksIDcwMDUxLCAxMTg5MDAsIDkxNzg5NCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIAotICAgIDc0MjI3LCAwLCA2NTMwNCwgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgCi0gICAgNDI5MTYsIDAsIDAsIDAsIDcyODIsIDc4NzI4LCA2NTczMywgNDQ0NSwgMTI3MTM4LCAxMjgwODIsIDM0OTQsIDc0NjA2LCAKLSAgICA2NTU1LCAwLCA3Nzk3NiwgMCwgMCwgNzg1NjYsIDAsIDk4MzE4OSwgNjU4OTgsIDk4MzIzOCwgNjUzMTIsIDU0NDcsIDAsIAotICAgIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgNDExMDYsIDAsIDY0NDQ4LCAwLCA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIAotICAgIDEyODI4MCwgMCwgNDM2MDgsIDExOTA5MSwgMCwgNjUzOCwgNDMzNSwgNzgzNjQsIDM5NDEsIDQxMTIyLCAxMTA2MSwgCi0gICAgNzgzNjMsIDY0ODkyLCA5MTEzLCAxOTU0LCAxMjE1NSwgOTgzNjY1LCA0Mjg3OCwgMTE1MDAsIDAsIDAsIDc0NTc4LCAwLCAKLSAgICA2NTgzMiwgMCwgMCwgMCwgNzc5NzUsIDExOTIzMCwgNDU4NiwgMCwgMzUwLCAxMDk1MSwgMCwgNTA5LCAwLCAwLCA5MjMwNywgCi0gICAgMCwgMCwgNTEzMywgMCwgMCwgOTUwMCwgMCwgNDk1NywgNjQ3NDEsIDI0MjIsIDIyMTIsIDk4MzA4MCwgMCwgMCwgMjQ5NiwgCi0gICAgMTE1MTYsIDk0NCwgMTE4ODUxLCAzODkwLCAxMjE2OCwgMTQzOCwgMCwgOTgzMTE3LCAwLCA0MTk0NywgMTIyMCwgMTIwODI4LCAKLSAgICAxMjg1NTUsIDAsIDAsIDE1NzEsIDQyNjMwLCA0MTk0OSwgNDI4MDUsIDgyNzAsIDk0MywgNTY0LCAwLCAzMTIsIDQxOTgwLCAKLSAgICA5ODM5MzUsIDAsIDc4MTIwLCA4ODc3LCAyNjksIDQ0MjksIDYyNzIsIDk2MTcsIDE0NjAsIDY5NTQsIDc4NjU3LCA0MTEyMCwgCi0gICAgNjUxMjEsIDEwODYyLCA2MDYwLCA0MTExOSwgNDE0MTYsIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCA5MTc5ODYsIAotICAgIDExNTMyLCA3NDA3MywgMTI3MzM4LCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgCi0gICAgMTE0MjgsIDE3MzAsIDI0NTcsIDkxNzgwOCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCA4ODQwLCA4MDM1LCAwLCAwLCAKLSAgICA5MjIzMCwgMCwgNjEyOSwgMCwgMTI4NTI4LCAxMjgyNjgsIDAsIDc4NzQsIDg2ODEsIDExOTA5MiwgMCwgMTMxMzYsIDAsIDAsIAotICAgIDcwMTAyLCA2Mzg4NiwgMTE4ODgxLCA5NjA1LCA3MTMwOCwgMTMyMjAsIDEyODc3NiwgMTIwMjc0LCA1NTE0LCAwLCA5MjI4LCAKLSAgICAwLCAwLCAwLCA1MjQwLCA5ODExLCAxMDAxMiwgMzA5NiwgMCwgMCwgOTgzMzQzLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIAotICAgIDk1MDEsIDAsIDEyNzIsIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIDc0NjcsIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgCi0gICAgMCwgOTE3ODEyLCAwLCAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCA5ODMzNDUsIDE5OTM1LCAwLCA5MjE2MiwgNjk2NzYsIAotICAgIDAsIDAsIDAsIDUyNzUsIDAsIDAsIDg2MzcsIDAsIDAsIDM3ODksIDYzODgwLCAxMTQ3MSwgNDM1NTQsIDY1ODYyLCAxMTQ3NCwgCi0gICAgNjYzMzIsIDY2NjAzLCAxMjgxMzgsIDI0MjYsIDEyMDQyLCA5MjE5NCwgOTgzOTAyLCA5NTM3LCAzOTYxLCAxMjExNSwgCi0gICAgNzc5NTMsIDI2MDUsIDQ1MDAsIDY0NTYxLCA1NTIyNCwgNDk4MSwgMCwgMCwgNjM4NzYsIDExNjY3LCA0MjY4NiwgNzc5NzMsIAotICAgIDQyMzYyLCA2NDY4NiwgNDQ5OSwgNDE2NDksIDc1ODksIDAsIDAsIDMyMzcsIDAsIDY4MjE1LCA5MTc5MDQsIDg1NDEsIAotICAgIDc4Mjk4LCA3MDAzNCwgNDE4NjYsIDAsIDAsIDAsIDAsIDY5OTI0LCA0MzU1NSwgMjgyMywgOTU1OSwgMTAwNjAsIDQxOTQwLCAKLSAgICA4Mjk5LCA0MTk0NSwgNzEzMiwgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIAotICAgIDQxNjk5LCAxMDc2MiwgNDM3ODAsIDEyOTk5LCAwLCAwLCA4MTA2LCA0MTI4LCAwLCA2Mjc0LCA0NDk0LCAwLCA0MDEyLCAKLSAgICAxMDM5NSwgOTgzNTkxLCA0MzYzMywgNjU0NDcsIDEyNjUxMSwgMCwgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIDc2MTEsIDAsIAotICAgIDQyNzU1LCA3NDgwMiwgOTIyNywgNzUwNiwgNzUxMCwgNjk5MzcsIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCAKLSAgICA2ODgsIDQxODQ3LCA2OTAsIDI1NDgsIDczNywgOTc0LCA4MDAzLCA3NDA2LCA5MTc5MTEsIDAsIDEyODY4OCwgMzk4NSwgCi0gICAgOTE3OTEyLCA2NTg2MCwgNjM5MjEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA5MTc4MDUsIDEyODA5LCA2NDA2LCA0Njg1LCAKLSAgICA5MjUwNSwgMTA4NzksIDEwMzQ3LCA0NjgwLCA2MzQxLCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAwLCAKLSAgICA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIDAsIDQyNjU3LCA5MjQ2OCwgNzY0MywgNDIzNzMsIDExNzE0LCA2NzU4NywgCi0gICAgNDM1NjgsIDk4MzE3NSwgMTE3MTcsIDc2NTAsIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMTI4MTU1LCA3NjQ2LCAwLCAKLSAgICA3ODA4MiwgOTY1MSwgMCwgMzg5MSwgMCwgMCwgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCAyMzYzLCA5ODMxMzUsIDAsIAotICAgIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgNzQ5NSwgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMTE5MTQwLCAxMjc4NTMsIAotICAgIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgNjk4MTgsIDg5NDksIDMwNjUsIDQyNzE5LCA3MTM1LCAxNTY5LCA5MjM3NSwgCi0gICAgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAxMjUzMywgOTgzODcwLCA2NDE4LCA0NTQzLCA3ODA4NiwgNjk2OSwgMCwgNzQ4MDAsIAotICAgIDAsIDY3OTc0LCAxMTk4MCwgMTI4NjUwLCA5ODM3OTIsIDYzODk0LCAxMjA3NjAsIDEyMjgyLCA2NjE5MiwgMCwgNzQ1OTIsIAotICAgIDg4NTAsIDc0Mjc1LCA5MjM4LCAxMDYxNywgOTE3NTQ1LCAwLCA5MjYyNSwgMCwgMTI3OTEsIDAsIDAsIDEyNzg0MywgNDQ0NywgCi0gICAgNzM3MzIsIDEyNzkzLCAxMjkwMCwgOTIzNzcsIDEwOTUwLCAwLCA3ODA4NywgMTI3OTAsIDQxNDAwLCAxMTkxMjgsIDY2NjA3LCAKLSAgICAxMjc5MiwgNDIyMzIsIDE5NDkzOCwgMTc0NCwgMTI3ODksIDEwMzY2LCAxMjMxNywgNDEzMTAsIDk4Mzg2MCwgNDEzOTksIDAsIAotICAgIDAsIDU1MjU4LCAwLCAxMjY5MCwgMCwgMCwgNDM2NzIsIDEyNzg0MCwgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCAwLCAKLSAgICAyNzgsIDAsIDQxNDA1LCAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCAwLCAKLSAgICA0MzU1MywgMCwgNjc5MDMsIDAsIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIDk4MzE4NiwgCi0gICAgNzc4MjksIDcxMzYwLCAwLCA2NDEzLCA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAKLSAgICAxMDA0NCwgMTI4MzIyLCAwLCAwLCA2ODY1OSwgNjQwMywgNTcwNywgMTAzOTMsIDEyNzUzMiwgMCwgNjY2MTQsIDAsIDAsIDAsIAotICAgIDEwMjk3LCAwLCAzNzQyLCAwLCAzOTU5LCAwLCAwLCAwLCAyNDY3LCAwLCA2MDAzLCA2Mzg0NCwgNjY2MywgODA0MCwgMCwgCi0gICAgNDM3NTgsIDQxODIsIDc4MTcxLCA0Njc2LCAxMjA1MDEsIDAsIDAsIDI1MTAsIDAsIDEwMjA4LCA3ODE2OCwgOTIzNjEsIAotICAgIDExNTQwLCA0MzU0NiwgNjY5MiwgMCwgNDEwNjAsIDAsIDQ2NjgsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgCi0gICAgOTY3NywgMTIwMjYwLCAwLCA2NTI1NiwgMCwgNzQwNzAsIDAsIDAsIDM2NSwgMTIwNTYsIDQzMDI3LCAxMjA0MjMsIDQxNzE2LCAKLSAgICAxMjgyMzYsIDAsIDEyMDQ3MiwgNTUxNiwgMjg0NSwgNzcxNywgODAzNiwgNDE3MTcsIDczODI3LCA1NDQsIDEyMDQ1LCAKLSAgICA2Mjc4LCAwLCA1NTE1LCAwLCAwLCA5ODMwNTEsIDY1MzM5LCA0MzIyMSwgMjIxMSwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIAotICAgIDY3ODg0LCAwLCA2Nzg5MCwgNjc4ODUsIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMTI3MTg4LCAKLSAgICAxOTAyLCA2Nzg4NywgOTYzOCwgMTI5NzYsIDEyNjU0NiwgMTI0ODMsIDEyMzY4LCA0MTc2OSwgNDI3MjYsIDQxNzY1LCAKLSAgICA3MzYxLCA2NjY3LCA2Nzg3NCwgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA0MjY3NywgNjc4ODksIDAsIDEzMTEsIAotICAgIDkxNzk2NiwgNDMyNiwgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDEyODg4MCwgNjkxNywgNzgxNTUsIDAsIDk0OSwgCi0gICAgNzgxNjIsIDAsIDYxNDgsIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCAKLSAgICA0MTc5NiwgMTI2OSwgNjUzMCwgMCwgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgCi0gICAgOTgzNzIwLCAxMjg2NzUsIDQxODM0LCA1Mjc5LCAwLCAxMDMzNiwgODMxMiwgMCwgNDI3MDEsIDEyODgyNSwgMCwgNzgxNjUsIAotICAgIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgOTgzNTk2LCA0MzA1OSwgNDI2NjYsIDUyNTYsIDEwNjcsIDI1NSwgCi0gICAgMTIxMzEsIDk4MzcxMywgOTQ5MywgOTgzOTU5LCA0MTAxNCwgMTE3OTMsIDE5NDkyMCwgMCwgNzQzOTQsIDQzNDYwLCAKLSAgICAxMDY1MywgNDI3MjMsIDk4Mzg0NSwgMTE5NjMyLCAwLCA2NTYwLCA3MDE2LCA3NDI3NCwgOTgzNjE1LCA0MzU1NiwgMzkyOSwgCi0gICAgNjc5NzcsIDY2MTQsIDI3NjgsIDkyNTA0LCA5NzQ2LCA1MTM1LCAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCA2OTc2MSwgCi0gICAgNTEzOSwgMzQ2LCA3NDMwMywgNjMwNSwgMTI3OTUsIDQ2NzUsIDUxNjgsIDc4NTUyLCAxMjc3NTMsIDc0MzE1LCA3NDM2MSwgCi0gICAgODI1MywgODgxNywgMTEzNiwgMCwgNDM1NjMsIDkyMjMyLCAwLCAxOTQ3NTAsIDczOTIsIDgyMzAsIDkzNjUsIDAsIDAsIAotICAgIDk4MzYwNywgMCwgMCwgNDA0MSwgMCwgMjM1NywgNDMyNDAsIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCA0NDAwNCwgCi0gICAgNzE0MiwgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgNDM3OTUsIAotICAgIDc3NzAsIDEwNzEyLCA2NDg1MywgMTI2ODYsIDExODkxNiwgNDIzNzUsIDAsIDEyNzIzOCwgNjYzNTIsIDEwNDcwLCAwLCAKLSAgICAxMTA1OSwgMTA3OTEsIDkxNzk0NCwgNDUwLCAxMTkzMjgsIDAsIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIDEyMzMsIDAsIAotICAgIDQ0MDA5LCA3ODI4NCwgNjYzMzgsIDAsIDAsIDE4MzksIDExODc5OSwgOTgzMjE3LCAxMDkyNywgMTcwMSwgOTgzNjU1LCAKLSAgICAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIDExOTg2NSwgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgNzE0MywgCi0gICAgOTI0OTMsIDc4Njc3LCAwLCA5MjQyOSwgNzgxNzQsIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCA5ODMwNDQsIDAsIDY1ODEyLCAKLSAgICA5MTc4MzEsIDAsIDQxODI0LCA2Nzk4NSwgMTIwMjAzLCAxOTQ4MDAsIDE5NDgwMywgNDI3MDAsIDE5NDgwNSwgMTI3OTgwLCAKLSAgICAxOTQ4MDcsIDc4Njc2LCA5MjM1NiwgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAyMzE0LCA0MzYwMiwgNzg4MjYsIAotICAgIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgNDQ4OSwgNzEzMzEsIDAsIDE5NDc5MywgMTkxMiwgCi0gICAgNDIzODUsIDEwMzA2LCAxMDM3MCwgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAxNjM1LCA3ODgyMSwgMTQxMCwgCi0gICAgOTI2NzEsIDk4MzI0NCwgMTE4ODc4LCAwLCAwLCA5OTE5LCAxMjA1MjgsIDU1OSwgMTI4MTU3LCA0MTgyNSwgMTI3OTc1LCAKLSAgICA3ODE4OCwgNDg5MiwgNzQwMTYsIDE5NDc4MSwgNjU0MiwgNDE5NTcsIDEyODg2NSwgNTc3NywgMCwgNzU5LCA2NTc0OSwgCi0gICAgMjA3OSwgNjUyNDgsIDEyNzg4LCA2NDQ4NywgNjQ1NTIsIDAsIDEwMjIzLCA0MjA2MiwgMCwgMCwgMTI2NTczLCAzNjY4LCAKLSAgICA2NTc1NCwgNDM1NjAsIDEyMjI2LCA2Nzk5MSwgNjUxNDksIDIzNDAsIDQxOTU5LCAxOTQ3ODYsIDE5NDc4NSwgMTk0Nzg4LCAKLSAgICA0MzYxOCwgNjU3NDcsIDEwOTM3LCAyOTYyLCAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgOTI0MzYsIDg5MjEsIDk5NTIsIDAsIDAsIAotICAgIDQyNzE0LCA5OTUxLCA0MzQwOSwgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDY4MzU5LCAKLSAgICA0MTgyMCwgMjMwMCwgMjM5NSwgMTI4NTYzLCA5OTc2LCAxMjAwNDMsIDEyMDA1MCwgMTIwMDU4LCA2ODIyMCwgMTI4MTQzLCAKLSAgICA0MjgwOSwgNDI4MDcsIDAsIDEyMDA0NiwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgNjc5NzYsIDQxODk4LCAKLSAgICAyMzYwLCA0MTc5NCwgOTE3OTQyLCA3MTMxNCwgMTI3ODE4LCAwLCAwLCAyNDE4LCA5ODMwOTgsIDI0MTEsIDExMzM2LCA3OTksIAotICAgIDYzODIzLCAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgCi0gICAgNTUyODQsIDkyMjAzLCAwLCAxMDM4NCwgOTgzMjE4LCAwLCAwLCA3NzUzLCAyMzUxLCA2NjU1LCA2NDQ4OSwgNjk5MzEsIDAsIAotICAgIDc3ODcyLCA0NDQzLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgCi0gICAgMTAyODgsIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCAKLSAgICA3NDE0NSwgMTI3OTQzLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgCi0gICAgNDg2MiwgOTczNSwgNjUzNywgMTIwNTkxLCA3NDI4NiwgMzkxNCwgOTIxNzgsIDkzOTc2LCA5MDY1LCAxMjk2MSwgMCwgMCwgCi0gICAgOTIyNTMsIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgOTE3OTc4LCA0NjkzLCA3Mzg5MywgCi0gICAgNDI3MjQsIDAsIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgNjc5OTQsIDgyMzgsIDMxMTAsIDEyMDE2MiwgOTgzODk5LCAxMjAxNjMsIAotICAgIDY1MjgsIDEyNzU1MywgNDMwMzUsIDY5ODk4LCAyMTgsIDAsIDE1MjAsIDAsIDQ3ODYsIDAsIDQzMjI1LCA0NjAyLCAwLCAKLSAgICA3ODE2NywgMTAwODgsIDY1NDgsIDAsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIDg4ODgsIDAsIDAsIDAsIDAsIDEwNjY2LCAwLCAKLSAgICA3MzkwMiwgNjk3NDAsIDAsIDAsIDk5NzUsIDEyODAzOSwgMTE5OTAyLCA0Njg5LCA4OTMyLCAwLCA2NTU2MCwgMTE5MjA5LCAKLSAgICA3NDQ0MSwgNzg4MTAsIDAsIDAsIDY3OTg3LCAwLCAwLCAwLCA2Nzk4OSwgMCwgMTAwNjUsIDgyMDcsIDAsIDkyNjEzLCAKLSAgICAxMjgwMTEsIDAsIDY2MiwgMCwgOTI0NCwgMTk0ODYzLCAwLCAxMTkyNjEsIDk4MzQyMCwgMCwgMCwgMCwgNDE5MjksIDAsIDAsIAotICAgIDY2Njc0LCA0MTkyNiwgMTIwNDA4LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgMTk0ODYyLCA2ODAxMywgNTIsIDEzMTE4LCAKLSAgICA2NDc1LCAwLCAxMjAzNDEsIDEyMDk1LCAxMDIyNSwgNDgxMiwgOTI1NzgsIDAsIDY3OTkyLCA3NDA4NSwgMCwgMzk3OCwgMCwgCi0gICAgOTE3OTQ1LCAxMjc4MjMsIDExNTgyLCAxMjA3NjEsIDEyMjgxLCAwLCA2NTQ0LCAxMzI0MSwgOTM5NjEsIDY5NzgyLCAKLSAgICAxMjg1NTcsIDE5NDg2MCwgMTE3NjUsIDY1MjU4LCAxMDM2OSwgMCwgMTU4NSwgNzE5MiwgMTAyNDksIDQyMiwgMTUwMCwgCi0gICAgMjAzNiwgOTg2LCAxOTQ4NTksIDY0Mzk0LCA1NzgxLCA1NTk5LCA2NDI5NCwgMjQ5NCwgMTIwNDUwLCA0ODYxLCA3NDAyMSwgCi0gICAgNjQzMzQsIDc4MjAzLCAxMjc4MDgsIDAsIDkyMjY2LCA2NTEwMiwgODk2MSwgNjU4NDIsIDEwMjQzLCAxMDI0NSwgNzQxOTEsIAotICAgIDEyMDQxMCwgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgOTI2ODMsIDAsIDIwMiwgMTI4MjQ2LCA3NDEzMSwgMTI0MiwgCi0gICAgNjU1MTQsIDAsIDYzOTQwLCAxMjg3MDYsIDY0NTMzLCAxMjAxMjksIDAsIDY3ODQyLCAxMTk5MCwgOTI0MzAsIDYzOTM5LCAKLSAgICA0MzM3NSwgNjU0NDAsIDI1MDQsIDAsIDc4NjcxLCA2NDgyOSwgOTgzOTAxLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIDI4NTgsIAotICAgIDk4MzM1MywgNzQyOTQsIDk4MzkwNSwgNjkyMzksIDAsIDExOTAyNywgMTI5OTIsIDI3NTMsIDE5MzYsIDcwMDc4LCA5MjU3NCwgCisgICAgMTk0NjA5LCAwLCA4Mjk1LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCA5MjUyMywgMTIwMTAyLCA3MTM4LCAKKyAgICAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCA2NDc3NSwgNTAzNiwgCisgICAgNTAzNSwgMTIwNTkwLCA0MjYwNCwgOTgzNjU2LCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCA3ODgzOCwgNDQzMiwgCisgICAgMTI3MjcxLCA1MDMzLCAxMjcyNzMsIDEyNzI3MiwgNDgzNiwgMzg4OCwgNzM3OTIsIDEwNzI5LCA2NDU0NiwgMTI3MjYyLCAKKyAgICA0MzcwNCwgMTI3MjY0LCAxMjcyNTEsIDY3NTg4LCAxMTkwMDAsIDEyNzI1MiwgMTI3MjU1LCA4ODU4LCA2NDA5LCAxMjcyNTYsIAorICAgIDEyMDI1MiwgMTI4MTAwLCAwLCAwLCA2NjMyMSwgMCwgMTI4MTQsIDEyNzI0OCwgMzQzMiwgMTAyMTgsIDAsIDYwOTQsIAorICAgIDc2NDEsIDQyNDQ1LCAwLCA5MjQ4NywgNDI0MDYsIDE2NzYsIDc0MzIwLCAxOTQ2MDcsIDk4MzE3NywgNTAzMCwgMCwgMCwgMCwgCisgICAgNzM4NjksIDk2MjIsIDAsIDY5OTQ0LCA2Nzg3LCAwLCAwLCAwLCA5ODM1ODMsIDEwNTQ0LCAxMjkxOSwgMCwgOTIyMTgsIDAsIAorICAgIDAsIDY5OTA2LCAxMjA3ODksIDAsIDk0NywgMTE5ODM1LCAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIDExOTkzNSwgNzYxMywgCisgICAgOTI1NjIsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgMTIwMjY4LCAwLCAKKyAgICA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMTE4MzMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgNzIxOCwgNzg5NSwgCisgICAgNDM5NSwgNDM1MzgsIDExOTkyNiwgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgNzIxNSwgOTgzODM2LCAKKyAgICA3NDE0MSwgODg4MCwgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCA0Mjg2MSwgMTExMywgCisgICAgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAyNDg5LCA2NTYyNCwgCisgICAgODE1MCwgMTM1OSwgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAKKyAgICAxMjczMjQsIDEyNzMyMSwgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAxMjI4MywgCisgICAgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgCisgICAgMTI3MzExLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCA1MDQwLCAKKyAgICAwLCAwLCA5ODM0NDMsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIDc0MjkzLCAwLCAKKyAgICA2NDY0OCwgMCwgOTM1OSwgNzg0MTYsIDAsIDEyODc3MCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIDczOTA5LCA0ODM1LCAKKyAgICA1NTI2NiwgNDM0MzIsIDEyNzgyMiwgNDMwOSwgNzEyNywgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIDAsIDQyNTg5LCA1NjksIAorICAgIDAsIDczODEzLCA3MTEsIDQzODksIDcxMzMsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIDE5NDU3MCwgNDEzMzEsIAorICAgIDEwMDYsIDc0MjQwLCAwLCAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgNzc5MDgsIDQyNzM4LCA2NTc4NCwgCisgICAgNzc5MDcsIDY1MjY3LCAzNzU4LCAwLCA2NTc4MSwgNjQ3MzQsIDcwMDczLCAyNDQwLCA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIAorICAgIDUwMDgsIDk4MzU3MiwgMjExOCwgMCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAKKyAgICAyMTMzLCAxMTE5LCAxMjcwNjgsIDIxMTQsIDIxMTYsIDI0NTUsIDAsIDIxMjIsIDIxMjMsIDIxMjQsIDIxMjUsIDEyNzQ4NiwgCisgICAgODcxNCwgOTgzODIwLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIDEyNzkwNywgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCAKKyAgICA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIAorICAgIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIDk4MzE4MSwgMTIwMDMsIDU1MTMsIDY2NjYsIAorICAgIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIDc4NDM3LCAwLCAxOTI1LCAwLCA5MjIzNywgCisgICAgNzQ4MDcsIDAsIDUwNDgsIDUwNDcsIDAsIDAsIDAsIDkyMzEzLCAwLCA3NDQ5NywgOTIzOTUsIDgwODksIDY5MjksIDYzOSwgCisgICAgOTgzNTYzLCA2ODE3OSwgNjQ0NDIsIDAsIDkyMzQ4LCA0NTk5LCA0MTQwMiwgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCAKKyAgICA2NDgsIDAsIDY1ODE5LCAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgOTQwMTcsIDk4Mzk3NiwgMzUzMCwgOTc1MCwgMTI4MzE3LCAKKyAgICAwLCA2NjU2LCA0MjYxOCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCA4OTY3LCAwLCA1MDQ1LCA0MjAyNiwgMTkxNiwgCisgICAgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAKKyAgICAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgOTE3NjAwLCA0MTc1MCwgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAKKyAgICAxMTk2MDYsIDY3OTgzLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIAorICAgIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgCisgICAgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIAorICAgIDk4MzE3OCwgMTk0ODUxLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgCisgICAgNzYyMywgMTE4OTI1LCAxMTg4ODksIDkyMzUsIDEyNzYwLCA3NDE3NiwgNjk2NjIsIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIAorICAgIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDEyNjU5NywgMTIwNDM1LCAwLCA3NzI2LCAwLCAxOTkyMiwgMjY3LCAKKyAgICAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgNDEwNzQsIDQyNjYsIDEwNjUyLCAKKyAgICA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDk4MzM0OCwgMCwgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIAorICAgIDEyODAxNywgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgMTI3NTM3LCAxMzAxNCwgCisgICAgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCA5ODMzNDIsIDAsIDk4Mzg4MCwgMTI2NjM4LCA5MDUzLCAKKyAgICAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDk4MzgyOCwgNjY2MCwgNzg3NTgsIDkxNzc2MCwgOTE3NzkzLCAKKyAgICA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDAsIDEyNzk0MCwgOTgzMzQxLCA3NDU0NywgMTI2NTg1LCAKKyAgICA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIDc4MDk5LCAxMjcwODUsIDAsIAorICAgIDEyODMyMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCAKKyAgICA0Mjg0NSwgNDg5OCwgNjQyOTgsIDk4MzE0MSwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAzNjUzLCAwLCA3OTEsIDkxNjIsIAorICAgIDY5NzcsIDAsIDc4ODg5LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIDk4MzQ0OSwgNzU1NywgCisgICAgMTE5MzM5LCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDEyMDY3MSwgMTE5MTY3LCAxOTQ5OTYsIDEyODExLCA2NTkyNSwgCisgICAgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAxMjgyNzYsIDc0NTk5LCA3ODQ0OSwgCisgICAgODg5MCwgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgNzgwODMsIDEyODgyNCwgCisgICAgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDkxNzkxNywgNzEzMDIsIDQ0MDgsIDQxMjIsIDY3NzIsIDExMDM5LCA4NzIzLCAKKyAgICAxOTQ5OTAsIDcxMzEwLCAxMTkzMDIsIDczMSwgMTE5MzA0LCA5MjI4NiwgMjQzOCwgNjQ4NTUsIDExOTMwMCwgMTE5Mjk5LCAKKyAgICAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIDIxMTksIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgMCwgMCwgNDE5NTIsIDAsIAorICAgIDUyNzMsIDIxMjcsIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgMTk5MTUsIDUyNzcsIAorICAgIDEyOTYzLCAxMjc4NjQsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAxMjAzNDAsIDExODg3MywgMTI3MSwgOTgzNjQwLCAwLCAKKyAgICA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgNDE2NiwgNDU3NCwgMCwgNzU2NywgNzQ1OSwgCisgICAgOTgzMTYwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCA5MjU0OCwgNTc1OSwgOTgzOTEyLCAwLCA0MTM4OCwgNjQ0NDYsIAorICAgIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDk4MzE4NywgNzAwLCAwLCA1NTUzLCAwLCA3MDg4LCA1MzU2LCAKKyAgICA3NDk5LCA2ODAwNywgNjY1OTYsIDc0MDY2LCAwLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgCisgICAgOTI2MjYsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIDY0NDQ3LCA1NTU1LCA3ODA4OCwgNzgwOTMsIAorICAgIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgNjc5OTUsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIAorICAgIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgOTgzNjQ5LCA0MjY5LCA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgNjk2NDQsIAorICAgIDk1MCwgMCwgOTIyNzMsIDY2NTgwLCAxMTg4OTUsIDY2NjgzLCAxMDU1NCwgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIAorICAgIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCA5ODQ4LCAxMDM4MSwgMCwgMTI4ODcwLCA5ODM3MDEsIDM2NTEsIDAsIAorICAgIDEyMDczMCwgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIAorICAgIDEyMDkzLCAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgCisgICAgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAxMjg1ODIsIDkwNzgsIDg1NDUsIDY2MzU2LCAKKyAgICAxMjg3OTksIDAsIDkxNTQsIDkxMTgsIDEyNjU0MywgMCwgMjY3NiwgMjI3NywgMCwgNzM4MTIsIDYxOTAsIDg1OTksIAorICAgIDE5NTA1MywgNjk5MTgsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIDkyNjIwLCAxMjEyOSwgMCwgODQ4MSwgMCwgCisgICAgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTI4MjM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIAorICAgIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMTI4ODA2LCA0Mjc1LCAKKyAgICA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIDc4Nzg2LCA1MTAzLCAxMjc4NjEsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIAorICAgIDQ4OCwgNjk4MTEsIDAsIDcxMzM5LCAxMDE1NywgMCwgNDMwMzQsIDExNDM4LCA2NDY3NCwgMCwgOTI2OTQsIDY4NDMxLCAKKyAgICA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCA0MTM2NywgNTEwNSwgMTI3NTA5LCA2OTcyMCwgNjQ3NiwgCisgICAgNTEwNCwgOTgzNzQ5LCAzMDQsIDMxNzYsIDExOTAxMCwgMCwgOTMyLCAxMjA2MzMsIDY1NjcsIDIzOCwgNjk2NTYsIAorICAgIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgCisgICAgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIAorICAgIDY2MjIsIDgxNTEsIDEwODU4LCA3ODcwNiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAxMjU1MywgMTA4MTQsIDQzMjc1LCA2OTUwLCAKKyAgICA5NzEyLCA2ODY4MCwgNDM5NzAsIDk4MzE5OCwgNjUxNjUsIDkyNzI1LCAwLCA2NjQ2NiwgMCwgMCwgMCwgNjY3MjUsIDYxOTEsIAorICAgIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIAorICAgIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIAorICAgIDk0MDk1LCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgCisgICAgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAKKyAgICAxMjA3MjgsIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIAorICAgIDY1MjI5LCAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIAorICAgIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIDE5NDk1MiwgMTk0OTUxLCAxMjY2NDksIAorICAgIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxMjA2NzgsIDY4Mzk4LCAxOTQ5NTcsIDY3NjE5LCA2NjM2NywgCisgICAgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIDQyOTUsIDY1MjY0LCA2ODAwNiwgMCwgOTI1NDUsIDAsIAorICAgIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAxMjAyNjUsIDkyNSwgMTI3MTU2LCAwLCAKKyAgICA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAwLCA5MTg2LCAyMDY3LCA0MDE2LCA5ODM4MDMsIDAsIAorICAgIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCAwLCA2OTg4MCwgNTE4NCwgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDEyODUzMSwgNDU4NSwgCisgICAgMTk5NDMsIDU4NjAsIDY3NjMzLCAwLCAwLCA4MTIsIDM2MTUsIDAsIDUxNzgsIDQ0MDAwLCAxMjA1NDgsIDc4ODA3LCA1MTg4LCAKKyAgICA3NDI4NywgNjc2MjksIDM2MDUsIDEwNjkyLCAxMTY2LCA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDQyNjE2LCAKKyAgICAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgNjc2MzIsIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIAorICAgIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDY5ODcyLCAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIAorICAgIDE5NDk2MywgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCA5MjU4MCwgCisgICAgMCwgMCwgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCAxMzE4LCAKKyAgICA2NDczMSwgMTI2NTc4LCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCA5ODM3ODEsIAorICAgIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAKKyAgICAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAxOTQ1ODcsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIAorICAgIDAsIDY4MDA1LCAxMDYyMiwgOTgzNzc5LCAwLCA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAxMTkxOTYsIDY0ODY0LCAKKyAgICAwLCA3ODY2MCwgMCwgODI4NCwgMTMwODEsIDAsIDM1ODksIDQyMDUxLCA0MDM1LCA2NDkyLCA5MjIzNiwgNDI2NSwgNjY0MiwgCisgICAgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCAKKyAgICA5ODMzNzcsIDc1MjgsIDEwNTUwLCAwLCA5MjcwNiwgMCwgMTA5NjEsIDAsIDEzNzQsIDY0ODc4LCAxMTkwMTQsIDAsIAorICAgIDQyMzg5LCA0MTM3NCwgMjI4NiwgMCwgNzg0OTIsIDQxMzc3LCAxMjc5MDksIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgMCwgCisgICAgNjY2MSwgOTgzMTQ1LCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgMCwgNzEzMDEsIDk4Mzg2MiwgMzQ3MywgNzcxOCwgMCwgMCwgCisgICAgMCwgNTUyODUsIDAsIDAsIDAsIDExOTY5LCA5ODMzOTAsIDEyNzg0MSwgNjM2NSwgMTg4NywgNjc2MywgOTgzMzcwLCA4MDgwLCAKKyAgICA3MDA2LCAwLCA5ODMzNzEsIDY3NTcsIDY0MzUxLCAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCA5ODMzNzIsIDYxNDYsIAorICAgIDAsIDc3MSwgOTgzMzczLCAwLCAxMjgxMiwgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIAorICAgIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAxMTQ5MSwgOTcyNCwgMTAzNDEsIDk4Mzc3MywgOTUyNCwgNzQ5MCwgMTEzODksIAorICAgIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgNzQ3NywgCisgICAgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgCisgICAgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMTI3NDgxLCAxMjAyMTYsIDEzMzA2LCAKKyAgICAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIDEyMDU0NCwgMCwgMCwgOTI2NjAsIDAsIDAsIDAsIDE5OTYxLCAyNDcyLCAKKyAgICA0MjY2NSwgOTIzNDEsIDAsIDIxMzksIDQyNTYsIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCA0MjY1OCwgMTI4NDUsIDAsIDAsIAorICAgIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgCisgICAgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIDEyMDU2NiwgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgCisgICAgOTgzMTUwLCAxMjAyMTUsIDAsIDM5MDIsIDAsIDE3NzAsIDAsIDEyODg2NiwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIDQ1ODQsIAorICAgIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDExODkyOCwgMTExOCwgNzEzMzQsIDAsIDAsIDEwODEsIDc0MzYsIDY4NDIwLCAKKyAgICA3MjUyLCAwLCA1OTk2LCA2OTkyMSwgNDkwMywgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNzEzOSwgMCwgCisgICAgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCA2MzI0LCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMTIxODYsIAorICAgIDAsIDAsIDk4Mzc0MSwgMTI3MTUsIDY4MDAyLCA5ODM0NzksIDEyNjYzMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgCisgICAgMTE5MTU3LCA2ODAwMCwgOTI0NjQsIDAsIDEyNjk4NCwgNjgwMDEsIDkzMzQsIDkyNzA1LCA5MjMxNSwgNzAxMDEsIDc5NzUsIAorICAgIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgNjY1OTcsIDY5NzMyLCAwLCAwLCA2MzEzLCA2NTUxMywgNjk4NTcsIDAsIDAsIAorICAgIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgOTgzMzg3LCAwLCA0MjI3OSwgCisgICAgMTk0NTc3LCAwLCA3ODQxNSwgMCwgMTk1MDA4LCA5ODMzODQsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAKKyAgICAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgMCwgMTIzNzQsIDAsIDAsIDAsIAorICAgIDk4MzY5NCwgMjQ2MCwgMCwgMTE5NDQsIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCAKKyAgICA1ODcwLCAwLCAyMDI0LCAxMjcxODAsIDAsIDAsIDUzOSwgMCwgMTI3NzY1LCA5NDA1MiwgMzg1MywgNjUxODAsIDEyNzkyMywgCisgICAgMTIwNzk2LCAxMjAyNDUsIDkyMzI0LCAwLCA4NjU5LCAwLCAxMjQ3NCwgOTI1NzksIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgCisgICAgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDY5NjMzLCAxMjAwODksIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAKKyAgICAxMDk0NiwgMTI3MzEwLCA1MDAwLCAwLCA5ODM1NzksIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgNjgwMTgsIAorICAgIDY3MDksIDAsIDc4ODg1LCA5ODM3MDgsIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgCisgICAgMCwgNzM3OTEsIDAsIDAsIDAsIDAsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAKKyAgICAzODkzLCA5ODMyNjQsIDAsIDEyMjEwLCA3MjIxLCA0MjE0NywgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAKKyAgICAxMjUxNiwgNDQ0NCwgMCwgOTIyNzEsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgCisgICAgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDEyODU0OSwgOTI2NjYsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCAKKyAgICA0MTk2MiwgMzIwMiwgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDk0MDYwLCA2ODcsIDAsIDAsIDAsIDE4NDAsIDAsIDY4NjcxLCAKKyAgICAxMTk4MDksIDQ4ODMsIDI4NSwgNDcyMywgNzAwOTksIDkyNjkyLCA0NDU5LCA3NDU3NywgNDI5MjEsIDQxNzIwLCAxMTA4OSwgCisgICAgMjQwLCAxOTkwNiwgMCwgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDEyNjUzNSwgMCwgMCwgMCwgMCwgNDI2MzQsIAorICAgIDk4MzM0MywgNDM0MzcsIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgCisgICAgMTE5MDIzLCAxNzI5LCAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCA2NTE5NCwgNjYyMDEsIDAsIAorICAgIDY2NTc4LCA1MDAxLCA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCAKKyAgICA3Mzg4OSwgNzQxODIsIDEyNzkxNSwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCA5MTc5NTIsIDEyMDA4MywgCisgICAgNjM4NzMsIDg0OTEsIDAsIDAsIDk4MzYyMywgNDUzMCwgNDI0MDksIDcxMjYsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAKKyAgICAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIDEyMDA3NywgMTIwNTMwLCA2NjE3OSwgNDI0MTIsIAorICAgIDY1OTQxLCAxMzExNCwgNjQ1MjIsIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIAorICAgIDk4MzIzOCwgNTUyODAsIDQyMTc0LCAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIDQzMDYsIDQxMzgwLCAKKyAgICA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAxMjczMDksIDAsIDEyNjUyMSwgNDIyMDAsIDQyNTY2LCAwLCAwLCA1MDg4LCAKKyAgICA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgMCwgMCwgNjk2NDYsIDEzODYsIDY0NTgwLCAxMTQ4MCwgNjExNiwgNjUwMzksIAorICAgIDY1MDM4LCAxMjM5MiwgNjUwMzYsIDgwNjQsIDAsIDEyMTAxLCA1ODIyLCAxMTkwMDQsIDIwODAsIDcxMCwgNzc5OTksIAorICAgIDExNjYzLCAxNjY2LCA0MjA5MSwgMTE5NjU3LCAxMjM4MywgNDM2NzEsIDQyMDkyLCA2ODQxOCwgNDI4OSwgMCwgNjM4OTYsIAorICAgIDEyMDYxLCA0MjA5NiwgNDM2MjEsIDMzNjIsIDEyMzc3LCA5ODM4MzIsIDk4MzgzNCwgNjg0NDksIDc0NjEsIDczOTAxLCAKKyAgICAxMjQ0LCAzMzEsIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAKKyAgICAxMjA4MTgsIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIAorICAgIDc4NTQ5LCA0MTIyMCwgMTMwMzIsIDAsIDU4NCwgMTI5MzMsIDQzMTc3LCAxMjM3MywgNjk4NTUsIDEzMDAwLCAxMzUxLCAKKyAgICAyOTM1LCA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgNzgyMjksIDEyNDI3LCA2NjUxNCwgNjk4NTksIDEzMDMxLCAwLCAKKyAgICA2MzkwMSwgMCwgMzY1NywgMTI4NTcyLCA2NTIwMiwgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMTI3MTgxLCAwLCA0MTc0MCwgCisgICAgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgCisgICAgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIDYxNjIsIDAsIAorICAgIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCAKKyAgICA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIAorICAgIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIAorICAgIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCAKKyAgICA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCA3ODUwNCwgNjcwNCwgNDU5MSwgMTI4MDI5LCAwLCAwLCA5NjgwLCAwLCAKKyAgICAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIAorICAgIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDAsIAorICAgIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgCisgICAgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIDQyMDg2LCAxMjY2MTUsIDIyMTksIDAsIDAsIDEyODgwMSwgMTk0ODM3LCAwLCAKKyAgICAzMjcsIDAsIDkwNDIsIDkxNzc3NywgOTE3Nzc2LCA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgMTI3Mjc2LCA5MTc3NzksIAorICAgIDEyNDMxLCA4NjY4LCAxMjQzNCwgOTgzODM1LCA5MTc3ODIsIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAKKyAgICAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAxMjgwMTQsIDQyNDIzLCAxMTkwNjYsIDAsIDEyODEwOCwgNjY3MDksIDAsIDg4MTEsIAorICAgIDkyNywgMCwgMCwgMTI0MzYsIDk4MzI0NSwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIAorICAgIDE5NTAxNiwgMCwgNzgxOTcsIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgOTgzMTg0LCAwLCAxOTkxNCwgMTIxNzksIDk4MzgxMiwgCisgICAgMjI5NiwgMTk0OTIzLCA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCA2MzgxNywgCisgICAgNjQ2NTEsIDAsIDQxNTAzLCAxMjc0NzgsIDExMjY1LCAwLCAxMjA3NTYsIDE5NDkyMiwgMCwgNTY2NCwgMzk3MiwgMCwgMCwgCisgICAgMCwgMTI4NTA4LCAxMjQxNiwgOTE3NzY0LCAxMTk2MDgsIDEwODE2LCA5MTc3NjksIDkxNzc2OCwgMTI0MTgsIDc0MTExLCAKKyAgICAzODgyLCA4NTMyLCA5MTc3NzEsIDE1NzMsIDEyODY0OCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCAKKyAgICA2NTM0MywgMTI2NDkxLCAxMjQxNCwgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMTE5ODQ2LCAKKyAgICAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAKKyAgICAxMjY2MTksIDAsIDAsIDgwMjcsIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDcxMzA1LCAxOTQ3OTksIDAsIDEyODIzOSwgCisgICAgMCwgMTI4ODgxLCAxMTk2MDQsIDEyNzUyMywgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxMjgyMTQsIDQyMzY4LCAwLCA3NzE1LCAKKyAgICAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCA2ODY1MSwgMCwgOTgzODk1LCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAKKyAgICAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIDM4ODksIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAKKyAgICA5ODMyNDEsIDMwMTQsIDUwODEsIDY1ODUzLCAxMjA3MTUsIDAsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCAKKyAgICA0NTk3LCA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgMTIzNzEsIDAsIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgCisgICAgMTIwMTg4LCA3MTMwMywgOTgzOTMzLCAxMjM2NywgNDIxNzAsIDAsIDkyNTU3LCA2MjksIDE5MjQsIDAsIDEyMDM3LCAKKyAgICA3NDM2NiwgNTk4NywgODQ2MiwgODAwNSwgMTIzNjUsIDYzOTMzLCA2OTczNSwgMTIwODE1LCAxMjM2OSwgMTA2NDksIAorICAgIDY3OTgxLCA1MDc3LCAxMjAxNzQsIDEwODgwLCA2MzkyNywgNTA3NSwgOTE3ODgxLCAwLCA2NTA3NSwgMCwgMTEwMDcsIAorICAgIDk4MzcwNSwgNjY2NTksIDkyNjA3LCAwLCA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCAKKyAgICA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIAorICAgIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDYzMjUsIDUyNzYsIDQzMDIxLCAxMjA0ODgsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgCisgICAgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgCisgICAgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIDcxMzExLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIAorICAgIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIDk0MTA0LCA3ODU3MSwgMCwgNzEzMjgsIDE5NDU2MiwgNDE1NzYsIAorICAgIDQyMjE1LCA3ODU3MCwgMTE5MjA3LCAwLCA4NTc4LCA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgCisgICAgNjM5NDksIDY0NzY3LCAyNjcwLCA0MTY3LCAxOTQ3OTYsIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIAorICAgIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAKKyAgICAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCAKKyAgICA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAxMjQwNCwgOTgzNTUzLCAwLCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIAorICAgIDQ5ODMsIDEyMDUwNywgODYxLCAwLCAwLCAwLCAwLCA0Mzc1NywgNDMzNzAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCAKKyAgICA2NjMxLCAwLCAxMjgxNiwgNDM3NTksIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgCisgICAgNzYxNiwgMTk1MDQ0LCAwLCAxMjU3NywgMCwgOTgzODg0LCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDk4MzY0NywgNTAxNiwgCisgICAgNDM1MzUsIDYzODkzLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA3MTA1LCAxMjc4MDcsIAorICAgIDY1MDYwLCAxMjA3OTcsIDk5MDAsIDc3NTAsIDAsIDE5NDkxOSwgMCwgMTI3ODMwLCAwLCA2NDc3OCwgMTI1ODUsIDEwNTY1LCAKKyAgICAxMjgxNTEsIDEyMTc3LCAwLCAwLCAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIAorICAgIDc0NzY4LCA4OTcxLCA3ODU5MywgNDMxMTMsIDk3MDIsIDc4NTk0LCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIAorICAgIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIDEyMzk3LCA3NzgyNywgMCwgMTMwNTQsIDEyMzk0LCAwLCAwLCAwLCAxMzA1MywgMCwgCisgICAgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIDAsIDAsIDAsIDE5NDkxNSwgCisgICAgNzI2NywgMCwgNzQ4MzMsIDEyODE4MSwgNTk5MywgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgCisgICAgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgNjk5MjksIAorICAgIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCA0MzMzOSwgNzM3NzYsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCAKKyAgICA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIDgxNywgMTY2NCwgMTg1MCwgMTI4ODQxLCAzMDc5LCAxMTM0MCwgNDI0MDgsIAorICAgIDQyNDQ3LCAxMjcxNDAsIDEyMDAyMCwgNDIzMDcsIDEyMzg2LCA0MjMwNCwgOTE3NTU1LCAwLCAxMjM4OSwgMCwgOTIzNjYsIAorICAgIDQxOTk2LCAxMTUyNiwgNjM5ODUsIDU4NjQsIDExNDcsIDYzOTkyLCA0Mjg4NywgMTk4NywgOTI3MTgsIDU0ODAsIDc4NTgsIAorICAgIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgNjM5MDUsIDExOTYwMSwgCisgICAgMTk0Njg4LCA5ODMxOTAsIDAsIDEyNjQ5LCAwLCAwLCA4MjQ3LCA1MDcsIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAKKyAgICAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIDExOTgxMywgNzc0LCAxMTk4MjksIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIAorICAgIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgOTgzMTA1LCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDEyODMxMiwgCisgICAgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDE5NDg4MSwgCisgICAgNTI2MiwgMCwgNTUyMzMsIDEyNjgxLCA0MjM3OSwgMCwgNzUzNCwgMTIyMTksIDAsIDEyNzUyOCwgNDI4MTAsIDEwNDkyLCAwLCAKKyAgICA5ODM2NjEsIDAsIDQzMTE5LCAwLCAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDEyNzI5LCAwLCAwLCAKKyAgICA3NDExMywgMjM0MywgNDEwMywgMTk5NDYsIDc0MTEyLCA3Nzg1MSwgMTMxMTIsIDAsIDE5NTAxMiwgMTI4NTksIDcwMDg3LCAKKyAgICAxMjAxNDgsIDY2MzY5LCA1ODYxLCAxMjc3NTgsIDExOTk5LCAxMjQwMCwgMCwgOTgzODM5LCAxMjY0NSwgNTE0NiwgMTEzMjAsIAorICAgIDY4NDEwLCA2NzQ4LCA2NTA0MCwgMCwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgCisgICAgNzQ1MjQsIDAsIDE5MjgsIDAsIDY3NjQ5LCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAKKyAgICAwLCA3Nzg2OCwgNDIwNiwgMCwgMCwgMCwgMTI4Mjk4LCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMTIwMjM0LCAwLCA4MzU3LCAKKyAgICA0MTI0LCA3Nzg2MiwgNjU4MzYsIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIAorICAgIDEyNDA1LCAxMjAxNTAsIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIAorICAgIDk5NzAsIDEyNDAyLCA5ODMxMzYsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIDAsIDQxNDY0LCAxMjQxMSwgCisgICAgMTI5NjksIDEyMDgyNCwgNDE0NjUsIDk4MzU2NSwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIAorICAgIDExOTE2MywgMCwgOTA5MywgMCwgOTE0NywgMTI4Nzg3LCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDgyOTYsIAorICAgIDY3NTAsIDE5NTAxOCwgMCwgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMTk0NzAzLCAxOTUwMjMsIDU4MDUsIDAsIAorICAgIDY3MjYsIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDIyODAsIDAsIDEyMzcyLCAxMjA2NDIsIAorICAgIDEyMDMwNywgMCwgOTIzNDMsIDAsIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIAorICAgIDE5NDcwMSwgMTA4MDMsIDQxMzIsIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCA5ODMzMTMsIDc0ODM3LCAxMjAxNTUsIAorICAgIDE0OTksIDAsIDgwNTUsIDQyNzQwLCA2Mzk2NSwgMCwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgCisgICAgNjM5NjksIDExNzgxLCA0MjcxOCwgODc4OCwgMTM1NywgNjQ4NTEsIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDk5NDEsIAorICAgIDEyMDE3MiwgMCwgMTkzMywgNjk2NTUsIDk1NjQsIDAsIDkyNDM1LCA3Mzg2NiwgMCwgMCwgMjQ4NywgNjc2MTQsIDMxMjEsIAorICAgIDE4MDQsIDMzMTEsIDY3NjE1LCA3MDA4MSwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCAKKyAgICA2Njc1LCAxMjgxNDQsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCAKKyAgICA2NDY2MywgMCwgMCwgNDU2MSwgMjEwMSwgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCAKKyAgICA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAxMjY1MTgsIDcxMDEsIDY5NjcsIDAsIDE5NDg5OCwgOTc5NiwgMCwgMzMzLCAKKyAgICA2OTg5MSwgMCwgODE0NCwgMjExNywgMCwgOTgzNTk1LCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgCisgICAgMTI2MjEsIDAsIDEyNzM2NiwgMTAyMjcsIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIAorICAgIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgCisgICAgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgCisgICAgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgNjk3MDQsIDAsIDE5NDgsIDY5ODQxLCAwLCA5NTIsIDEyODIzNSwgMCwgMCwgMTIwODAyLCAKKyAgICA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIAorICAgIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCA2Njc2LCAzOTMwLCA0MjYxNSwgMCwgMCwgNjc1OTgsIDAsIDAsIDAsIDY1NTkxLCAKKyAgICA0MTU4MSwgNjU5MTYsIDE0NTMsIDAsIDAsIDAsIDg1MDAsIDQyMjIyLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIAorICAgIDExNTQzLCA2NzY3NiwgNjQ2NzYsIDAsIDAsIDY3NjA2LCAxMTkwODMsIDAsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIAorICAgIDY2NzIsIDAsIDAsIDAsIDk4Mzc0NywgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIAorICAgIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCAKKyAgICA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIAorICAgIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMTI3OTE2LCAwLCAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgCisgICAgMTI3MjkxLCAxMjcyOTIsIDExOTE5LCA2NDk2MiwgMTI3Mjg3LCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCA4MjMsIAorICAgIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDEyNzMwNSwgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgCisgICAgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCAKKyAgICA5ODIxLCA2NDMwNCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDEyMDA2MiwgCisgICAgOTI2NjksIDcxMzMyLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgCisgICAgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIDEyMDEzMSwgNjg0MjMsIDAsIDEwNzcxLCAyODc2LCA3NDA3NCwgOTI1MzAsIAorICAgIDE5NDkyNCwgNDEzOTgsIDczODIsIDk4MDIsIDEyNzA3NywgMTI3MDc2LCA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAKKyAgICAxMjE0MCwgOTU3MiwgMCwgNzAwMywgMTk0ODgzLCA0MjMzNCwgNzcwNCwgMTI2NDkwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCAKKyAgICA4NDk0LCA0MzE0NiwgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCAKKyAgICA0MTI2LCAwLCA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDEyNjYwNCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIAorICAgIDExNTI4LCA2NDAyNCwgMTI4MDcyLCA2NzksIDY0MDEzLCAwLCA1ODUwLCA3NTgsIDc1MzYsIDAsIDkyMjM0LCA0MTQ0MSwgCisgICAgMTA2OTMsIDY0MDA2LCA5ODM1NjcsIDY0MDA1LCA0MDU4LCAxMTkwMTksIDEyNjQ4NywgNjQ2NjAsIDAsIDExOTA1MCwgMCwgCisgICAgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCA4OTcwLCAwLCA5OTM0LCA5ODMwOTQsIDEwNzc0LCAxMjgwMjAsIAorICAgIDQyMjAxLCAxMjQyMSwgMTI4MjE2LCAwLCAxODUyLCAzMDU3LCA2NDA0NiwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgCisgICAgMTk0ODk5LCA5MjMyMiwgNzY0NSwgMTI4NTQsIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDEyNzc5NSwgCisgICAgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgMTMzMDksIDExNTcwLCAxMjc4MTEsIDE5OTYwLCAxMTY5NiwgMCwgCisgICAgMTAxOCwgMTE4OTcwLCAxOTQ5MDksIDE5NDg5NywgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIAorICAgIDAsIDAsIDczODE0LCAxMTQxMiwgNjc2OCwgMTA3MjgsIDE5NDgzMCwgNzEzMTYsIDExODg2MywgNDMzMTEsIDY0OTY2LCAKKyAgICAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAKKyAgICAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAKKyAgICAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIDY1NjkzLCAwLCAwLCAwLCA2OTY5NSwgNDIyNDAsIDAsIDEyNjY1MSwgNDI4NjQsIAorICAgIDEyNjQ5OCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCA4MTUsIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NTEsIDAsIAorICAgIDY2MTk3LCAwLCAxMDk4NiwgNjQ2ODMsIDk4Mzc4NSwgMCwgMzQ1NSwgMCwgMCwgOTg3OSwgMCwgMCwgNDE1OCwgMTI4MDUwLCAKKyAgICA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCA2OTY0MywgNDIxOTksIDAsIAorICAgIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgOTIzOTAsIDQyODY3LCAxODM0LCAwLCAKKyAgICA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAyNjUyLCAxMjA1MjcsIDcxNjQsIAorICAgIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIDkxNzUwNSwgMTgyOCwgCisgICAgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCA2NTIzOCwgNjgzNzQsIAorICAgIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCA2NDQzNiwgMzYwMSwgCisgICAgMTk1MDk0LCAxMjgwNzMsIDk4MzU2MiwgNjA5LCAxMTU1NSwgOTgzMDk5LCAxMjQ5NiwgMTI3ODM5LCA3NDE4MSwgNDM0MywgCisgICAgMTI1MDUsIDAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgMCwgNjM3LCAwLCAwLCA0MjY3MSwgMCwgMCwgMCwgNDM1NjUsIAorICAgIDcxMzA2LCAxMjY0OTMsIDEyNjk2LCAxMjgyNTYsIDAsIDk0MDYyLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCA5ODMyMDYsIAorICAgIDQyODE4LCAxMjY2MzIsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgOTI0OTEsIDAsIDEyNjUxLCAwLCAKKyAgICA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgMTE4ODQ0LCAwLCAKKyAgICAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgMCwgNjk3NjAsIAorICAgIDQyNTcxLCA5MjYzNSwgMCwgMCwgMCwgMCwgMCwgMTI3MTc2LCAzMTc4LCAwLCAwLCA5MjcwNCwgMCwgOTA4MCwgMTI3MDAwLCAKKyAgICAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgNjUxNjYsIDExOTExMiwgCisgICAgMCwgMCwgMCwgMCwgNzEzMTMsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgCisgICAgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIDQzMzQ2LCA4MTE2LCAKKyAgICA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCA5ODM2MDIsIDEyMDgxMSwgCisgICAgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIDEwMDkyLCAxOTUwNzgsIDkxNzg0MiwgNjc4NTUsIDU1MjU3LCA3Mzc3MSwgCisgICAgMTc2NiwgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAwLCAwLCAwLCAxMzIyMywgMTI4NjY1LCA2NDU5NSwgMTI3Mjk0LCAKKyAgICAwLCA5MjMxMSwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCA1MzgyLCAwLCAwLCAwLCAxMTkwNjAsIAorICAgIDY0OTUzLCA1NDA2LCAxOTkyMCwgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4NjQsIDExMzAsIDAsIDAsIDQyMDE2LCAxMTgyMywgCisgICAgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDcxMzIzLCA5MzI2LCA3MzgyNiwgNTMxMCwgNzQ4MTIsIDc4NTg0LCAKKyAgICA5MjIyOSwgODk1OSwgNDM1ODksIDY3NDcsIDY2NzIzLCAwLCA4NTY4LCAwLCAxMjA0OTYsIDczODE2LCAxMjA4MDMsIAorICAgIDk4Mzg0OCwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIDEyNzE4MiwgMCwgCisgICAgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIDU0MDAsIDExNTk0LCAxMjgyNDcsIAorICAgIDAsIDExODk5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCA4MjY4LCA0OTIzLCAKKyAgICA2NTA4NiwgODk4MSwgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAKKyAgICAwLCA4NjQyLCAwLCA0Mjc2NiwgOTgzODY2LCAyMjEwLCA5OTgzLCAwLCA5NDAwOSwgMCwgMCwgMCwgNzM5OCwgNDE1MTUsIDAsIAorICAgIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgOTM5NjQsIDEyMDUyNSwgMCwgNzYxNywgCisgICAgMTk0ODQxLCAxMjg4OCwgMTI3OTgzLCA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCA1NzAzLCAwLCA0MTUxNywgCisgICAgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgNjEzLCAKKyAgICA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCA0MzQ0OSwgMCwgMCwgODIyNSwgCisgICAgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAKKyAgICAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAxMjQ4OSwgMCwgMzE5NSwgNTU1MCwgOTgzNTU0LCAKKyAgICA3ODk3LCAwLCAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgMjg3NywgMCwgMCwgMTY3NSwgCisgICAgNjk4NDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAxOTQ3NzcsIDk4MzYxMSwgMCwgMCwgMCwgNDMyNDQsIAorICAgIDAsIDAsIDk4MzkxNiwgMTE5NTYxLCA5ODMwNzgsIDAsIDE5NDkyMSwgMTI4MTYwLCA5OTM5LCAwLCA5ODMxNTEsIDc3ODYwLCAKKyAgICAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgNzQwMzgsIDExOTU1OCwgNjI3MywgNjY2NzksIAorICAgIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIDY2NDg5LCAyMjQsIDAsIDY4NjcwLCA5MzMyLCAKKyAgICA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMCwgCisgICAgMTI4OTAsIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDk4MzcxOCwgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAKKyAgICAxMTk2MiwgMTk0Njk0LCAxMjUwNywgMTE5NiwgMTI4Njg3LCAxMjgzMTEsIDc3NywgMTIwMTg3LCA0Mzc1LCA2NTI3MSwgCisgICAgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMTE5MzQzLCA5ODMyMzYsIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgCisgICAgNzgwMDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCA0MjUwMiwgODI4MCwgNzQ1MjAsIDI3MDEsIAorICAgIDAsIDEyNzAwMiwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIDY2NzAxLCA2Mzc3MiwgOTgzODE0LCA2Mzc0NSwgCisgICAgMTc0OCwgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgCisgICAgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIAorICAgIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAwLCAwLCA5MjUzNSwgMCwgMCwgMCwgNzQ1NzUsIDAsIDY1NzE5LCAxMzA4MywgCisgICAgNjQ1NzQsIDY1MDEyLCAwLCAxNjQwLCAxMjQ5NSwgNjY2OTEsIDc2MjQsIDMxMzgsIDEwOTk2LCA5MjI0NywgMTkyMiwgMCwgCisgICAgMTI0OTgsIDEwOTg3LCA2OTkzNiwgNjk5MzksIDM4OTQsIDY1NTQzLCAwLCAxOTQ4NDIsIDk4MzU4OCwgNDkzLCAwLCAKKyAgICA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIDkxNzkzMiwgCisgICAgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgMTI0OTEsIDAsIDY0OTExLCAKKyAgICA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDc4MjE5LCA5ODMwODEsIDgzNzgsIDExNjMyLCAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgCisgICAgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgNjYyMzYsIDY2MjExLCA2NjIxOCwgCisgICAgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgNjYyMzQsIDExNjA1LCA2Mzc1OSwgCisgICAgOTgzNjU0LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgCisgICAgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCAKKyAgICA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIAorICAgIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIAorICAgIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgCisgICAgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgCisgICAgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAKKyAgICAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkyMCwgMCwgMCwgMjMyMywgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgCisgICAgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIAorICAgIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIAorICAgIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIAorICAgIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgCisgICAgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIAorICAgIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIAorICAgIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc3OCwgOTM3MiwgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCAKKyAgICA5ODM5NTgsIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgODc0NCwgNzI2LCAwLCA5ODM4MzcsIDQxNTUsIDAsIAorICAgIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgCisgICAgOTgzODQxLCAxMjUyNSwgOTgzNDcxLCAxMjAxNiwgNjU3NzAsIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgCisgICAgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgCisgICAgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCAKKyAgICA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIAorICAgIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAKKyAgICAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIAorICAgIDk4Mzk0NywgNDk4LCA2NDQ3MSwgMTIwMzI0LCAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgCisgICAgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgCisgICAgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCAKKyAgICA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgCisgICAgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIDk2MDcsIDAsIDk2NjMsIDk4MzIyOCwgMTE5NjM0LCA2NTAzLCAKKyAgICA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMTI3MzA0LCA0MTA2MSwgMCwgMTk0ODM4LCAxMjcxODcsIDY1MDI2LCA0MTk5MywgCisgICAgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCAKKyAgICA0MTk5MiwgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIDEyNzc3NiwgOTk0MCwgMTI3Mjk5LCA3NjkyLCA5ODM4MzMsIAorICAgIDgwMDgsIDQxMTMxLCAzMzAsIDg1NjYsIDY1MDgzLCA0MTEzMywgOTgxNiwgMTI2NTE3LCAxMjUzMiwgNzg1NTAsIDc4NTQ2LCAKKyAgICAzNTA4LCAxMjcwNTgsIDQzMjM1LCAwLCAxMjcyOTgsIDY0MTM5LCA3ODIzMSwgNjQxMSwgMTI5MTAsIDc4NTU0LCA2NjY0NCwgCisgICAgMTMwMjgsIDY3MzcsIDEyNTM3LCAwLCAwLCA2NDEzNiwgMTI1MzYsIDIzNTAsIDEzMDI5LCA3ODIzMywgMCwgOTgzMTAzLCAKKyAgICAxMzAzMCwgNjcwMiwgNDUyNywgMCwgMTI1MzgsIDEyODgxMCwgOTgzNjQ1LCA2NTU5OSwgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIAorICAgIDEyNDg0LCA0MDMyLCAxMjgxNDksIDEyNjIzLCAwLCA2MjA3LCAwLCA2MTE3LCA2NTkzMCwgODQxMiwgMCwgNzQzOCwgMTI5NiwgCisgICAgMjMyNSwgNDE1MTEsIDEyNjYyNSwgMTAxNDksIDc0MTE4LCAwLCAxMjcyODYsIDEyNDgxLCAwLCAxMjQ4OCwgNjY3MTMsIDAsIAorICAgIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCA0MjYxOSwgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIAorICAgIDY1MDMyLCA0MTUxMywgOTgzMTY2LCAxMTkyNywgNjY1ODQsIDc4NTU5LCA3ODU2MCwgNzg1NTcsIDc4NTU4LCAwLCA3ODU1NiwgCisgICAgODQ4LCA5ODY4LCAwLCA2NDI0LCA3ODU2OCwgMTE5MzM4LCA2OTkyMiwgNzQwMzEsIDc4NTYzLCA3ODU2NCwgMjM1MiwgCisgICAgNzg1NzIsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCA2Nzk3MywgMCwgMTMwMjYsIDY3NjIsIDc4NTc5LCA3ODU4MCwgCisgICAgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCA4MDk5LCAwLCAwLCAxMzQzLCA5ODM4MjMsIDAsIDkzMjUsIDY4MTgsIAorICAgIDYyODMsIDExNzM4LCAwLCA5ODM5MzQsIDAsIDExNzQxLCAwLCAwLCA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCAKKyAgICA5ODM4MjUsIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgNDI3MzcsIAorICAgIDk5NTYsIDAsIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDEwMDI0LCAxOTQ3NjQsIDc0NTgzLCAKKyAgICA3NDM0MCwgNjk2ODEsIDAsIDQzMDAxLCA4MDI5LCAwLCAwLCA5ODM3ODAsIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgCisgICAgMTk0NzQ4LCA1MjE1LCA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgMzM0MiwgNzg1ODIsIDUzNjMsIDEyOTU3LCAKKyAgICA3ODU4MSwgNDE1NiwgMCwgMCwgNjQyMSwgNzg1OTEsIDE2MTEsIDc4NTg5LCAxMzAxOCwgNzQyNTcsIDc4NTg4LCA3NDU0MiwgCisgICAgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgNDIxNCwgNzM3OTAsIDExOTQ1LCAwLCAxMzA0NiwgCisgICAgODgzOCwgNDI1LCA0MDI1LCAxMDcwOSwgNzg1OTUsIDIxMDgsIDIzOTIsIDEzMDQ3LCAwLCAwLCA2ODE5LCAxMzA0OSwgCisgICAgNjQ5OSwgOTIyNDMsIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAxOTQ3NDUsIDY1MDcsIDEyNzkxOSwgCisgICAgOTQwNzMsIDEyODA2OSwgMzI3NywgODkyOSwgNDk0NywgNDEwNTUsIDAsIDE5NDcyMiwgMTk0NzIxLCAxOTQ3MjQsIDEzMDQ1LCAKKyAgICA2NDYyNiwgNjYwMzQsIDc3NTEsIDE5NDcyNywgODM3MSwgMTk0NzI5LCAzOTk3LCAxMjgwNiwgODc2OCwgMTMwNDQsIDAsIAorICAgIDEyNDIwLCA0MDI0LCAxOTQ3MzAsIDQxMDU0LCAxMDc4LCA5NzU3LCA2OTczNiwgNDEwNTcsIDAsIDAsIDAsIDAsIDk4Mzc5MSwgCisgICAgOTIyMTAsIDkyNDExLCAwLCA0MTQ5NiwgMCwgOTE2NSwgMTU3MiwgMTE5MTEsIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIAorICAgIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCA2NDAxLCA1ODMxLCAwLCAwLCAxMzA0MywgODA1NiwgOTI0OTQsIDY1NjgxLCAKKyAgICAyMDgsIDEyNzM4MiwgNDE1MTQsIDAsIDAsIDAsIDEwNjk5LCA2NDA4LCA5MjIyNywgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAKKyAgICAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMTI2NTk2LCAwLCAxMTk5MzMsIDAsIDMxMTUsIDk5MTgsIDAsIDgyOTQsIAorICAgIDQyOTEyLCAwLCAwLCAxOTQ3MjYsIDQ4NzYsIDY1ODA0LCAwLCAwLCA0MzQ2OCwgOTgzMjc0LCA0MTU1OCwgNDE0NzEsIAorICAgIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMTIwMjk4LCAxMzA1MSwgNzg2ODksIDMxNDMsIDE5NDY3NCwgNjcwMSwgCisgICAgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCA1NjY1LCAwLCAxMTkwNzEsIDcwMjUsIDYzOTc0LCAwLCAKKyAgICA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgNTY2MiwgNDIzODIsIDE1NjQsIDczOTI0LCAxMTIxLCAKKyAgICA3ODMxOSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCAKKyAgICA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgNDIwMjQsIDY0MjAsIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgCisgICAgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkzOTU3LCAxMTg4MzAsIDYzOTc4LCAxMTA0NCwgMzIyOSwgCisgICAgNjQyMywgNDI3NzQsIDAsIDAsIDAsIDEyODIzLCAyMzMxLCA5MTc4MTAsIDcwODUsIDYxMzcsIDAsIDc1MjQsIDAsIAorICAgIDkxNzgwOSwgODM0NiwgMCwgODMzOCwgMTI4MzE1LCA2NTA0MywgMCwgODIyLCAxMjc5ODQsIDk5MDMsIDY0NzIxLCA0MjcyMiwgCisgICAgNjk4NzcsIDE5NDY1OSwgNzg2NTUsIDc4NjYxLCAxOTQ2NjAsIDc4NjYyLCA0MTI2NSwgNTMxMSwgMTc5NSwgOTY1LCAKKyAgICAxMTg3OTEsIDEwNTg3LCA3ODA1NSwgMTEyNzgsIDc4NjMyLCAxOTQ2NDAsIDAsIDEyOTQ2LCAxOTQ2NDEsIDExOTM0MSwgCisgICAgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIDAsIDk4Mzk2MCwgNzQ4LCAKKyAgICA0MTA2NywgMjMzMCwgNTM1LCAzMTQ4LCAxMjM3NSwgNzg3OTksIDE5NDYyOSwgMTA1NTYsIDI0NzUsIDEyMzg4LCA0ODg5LCAKKyAgICA4OTY4LCA2Nzg2MywgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgMTk0NjM1LCA0ODkwLCAKKyAgICAxOTQ2MzcsIDkxNzgwNCwgNTgxLCA0ODkzLCA5ODM2MTYsIDY1NzEsIDY1NTQ1LCA0ODg4LCA0MTU3LCA3ODA0OCwgNzgwNDksIAorICAgIDc4MDQ2LCA3ODA0NywgMCwgMTAxMTksIDY0MTUsIDQyODkzLCAwLCA2OTcwMiwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCAKKyAgICA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIDQyODgwLCA0MzU4NywgMCwgMCwgMCwgMCwgNjUxOTcsIDc4MDY2LCAxMjIwMywgCisgICAgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgNDg3NSwgNjU4MTEsIDEyMDM4MSwgMTIwMzg5LCAxMTg4ODgsIDkzNDQsIAorICAgIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgNzQ3ODEsIDExOTk3LCAxMjAzOTMsIDc4MDc1LCAwLCAzMTM0LCAwLCAKKyAgICA2NTY5NiwgOTIzMzEsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIDM0NDksIDAsIDAsIDc4NDE0LCA3ODQxMywgCisgICAgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMTIwMTY3LCA0MzI4LCAxMDczNCwgMTI3MDE0LCAwLCAxMjc5MTQsIAorICAgIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIDExMzY3LCAwLCA3ODA1NCwgNDkxNywgNzQ1MTYsIAorICAgIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMTI3ODM2LCAxMTg4OTMsIDIzNjEsIDc5NzEsIDc4MDcyLCA3ODA3MywgCisgICAgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgNDA5NzcsIDEwOTYwLCA0MDk2MiwgCisgICAgODMwNSwgMTI1NzMsIDk4MzYwOCwgNDA5ODAsIDk4Mzk2NCwgMTMyMDIsIDAsIDEyNTgyLCA3ODI4MiwgOTgzMDQ4LCAKKyAgICA2OTg1NiwgNDI0MzgsIDU1MjIxLCA2Mjg4LCA3ODI4MCwgMTI3OTQ2LCA1NjUzLCA0MjQwMCwgMTA4OTEsIDc2OTgsIDU2NTgsIAorICAgIDc0MDQ1LCA3MDAzOSwgMCwgMCwgNDkxMywgMCwgOTgzOTU5LCA3MTMzMywgNDIzMjYsIDEyODE5NCwgMTI3MjgsIDkyNjg1LCAKKyAgICA0MjQ3OCwgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgMCwgMCwgMTI1ODgsIDg4MjEsIDYxNTMsIDI4NjcsIAorICAgIDE5NDcwOCwgNjYzMTIsIDY5OCwgMTI4MDA3LCAxOTQ2MDYsIDEwMzU2LCA3MDAxNywgMTk0NzEzLCA2NTEsIDEyNjQxLCAwLCAKKyAgICAwLCAwLCAwLCA0MTU1MiwgNjUxMTUsIDc4NDY1LCA3ODQ2NywgNzg0NjMsIDc4NDY0LCAxMjg4NTEsIDc4NDYxLCAxOTQ2OTcsIAorICAgIDc0MzU2LCA2NDk0NSwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAxMjM0MCwgMTIwNTY4LCAwLCAxOTQ3MDAsIDU1MjY0LCAKKyAgICA0MTIxMSwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDk4MzQ5NSwgMTAxMDEsIDAsIDcwMDQ5LCA4NDc5LCA0MTUxLCAKKyAgICA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMTI4NjU0LCAwLCAxMTkxOTQsIDc0MDUwLCA5MjcwMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgMCwgMjY5OSwgMCwgNzM4NDUsIAorICAgIDI5ODUsIDkyNTY4LCAxMjY0NzUsIDkxNzg0NSwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCA5ODI3LCAxMTkzMTAsIAorICAgIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIDM1LCA3ODQ4MSwgCisgICAgNzg0ODIsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDc4NDc4LCA0MzU5NiwgNjA5MCwgNjQyNTcsIDc4MTIsIDEwNTM0LCAwLCAKKyAgICA3ODQ4NSwgNzM4NDgsIDY3OTc1LCA0MjcyLCAwLCA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIDc4NDg3LCA0MzMwNiwgCisgICAgMCwgNjQ0OTcsIDEyMTM4LCA3OTMwLCAwLCAyMjkyLCA2ODIxNiwgMCwgOTE3ODI2LCA1MjQ0LCA0MTg5LCA5NDEwOCwgCisgICAgNjc1OTYsIDEyNzUwNCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMjI3OSwgMCwgOTE3ODI3LCAKKyAgICA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgMTI1NzgsIAorICAgIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIDExODg1MCwgCisgICAgMTE5MTQxLCAxMjg1NDYsIDY2MDE1LCAwLCA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIDk2MzIsIAorICAgIDkyMzIzLCA3NDc2MSwgNjQzMjMsIDEyNzMzNSwgMCwgMCwgMCwgMzEwLCAwLCA0MTI4MSwgMTA5NzYsIDAsIDcxMzI1LCAwLCAKKyAgICA3NDI2NiwgMTAwNTQsIDY0OTcsIDg1NzQsIDAsIDkwMTIsIDE5OTU4LCA3NDQyMCwgNjUwODksIDEzMjE1LCAxMjczMCwgCisgICAgNjUxNjMsIDc0MDQ0LCAzNzQsIDQzMTk1LCA4MTYsIDEyMDE2MSwgMCwgMCwgNDE5MzQsIDc0NjUsIDAsIDEyODE2OCwgCisgICAgOTgzMjY4LCA0NzE1LCA2MTAxLCA5NDEwNiwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIDEyNzE0NywgCisgICAgOTU4NSwgNTM3NCwgOTgzMjY3LCAxMjgwNTksIDAsIDAsIDEyNjYxOCwgMTIwMzkwLCAwLCA2NTU2NywgMTIwNjE0LCAxOTI5LCAKKyAgICAwLCAxMjE0MiwgMCwgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDEyMDYxMCwgMTI5ODIsIDE5NDYyMywgNTM3OCwgNzg3OTEsIAorICAgIDEyODY3OSwgNDE0MjEsIDAsIDQ0NjIsIDAsIDEyNjU5OSwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIDU4MDAsIDEyMDE1NywgCisgICAgOTgzMTE1LCAxNzYwLCAyNDIxLCA0NDY5LCAyMzI0LCA4MjgsIDM2MTEsIDc4NDAwLCA3NTcsIDExODUsIDAsIDc4NzcwLCAKKyAgICA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDQzOTcxLCAwLCAwLCAxMDYzNCwgMTA5NDIsIDc3MTMsIDIzNDgsIAorICAgIDAsIDY0Mzc0LCA0MzgwLCAxOTQ2MDgsIDExOTA0NCwgOTk4MiwgNjQzMjQsIDQxMjQwLCA4NjIsIDY1NjI2LCA3ODQ2MiwgCisgICAgMTgxMCwgMzY3MywgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgMCwgNzU2NiwgNjQ2ODgsIDE5NDU5MywgMTk0NTkyLCAKKyAgICA3ODA5MiwgNzQzNTcsIDE5NDU5NywgNDc0OCwgOTIyMjgsIDE5NDU5OCwgMTk0NjAxLCA0MjI2MCwgNTg3MSwgMTE5MDc1LCAKKyAgICAwLCA3NDU3NiwgNDQwMTksIDAsIDEyODE4OSwgMzk2NywgMTk0NjA0LCAxMzEzNywgODc3NSwgMTI3OTQ1LCAwLCAyOTYzLCAKKyAgICAwLCA4NDEwLCA0NDU0LCA3MjMsIDEyNzg4MiwgOTY2LCA0NDQ5LCA5MjMzMCwgOTIyMzgsIDAsIDc4MTksIDIzMjAsIAorICAgIDE5NDU4OSwgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgNTUyNzYsIDAsIDgwNDcsIDAsIDc4ODI3LCAxMjYzNCwgCisgICAgNDE1NDIsIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDAsIDc0NDUyLCA5ODM3NjMsIDE1ODQsIDY2NjQ1LCAKKyAgICA2MDQ1LCA2NzI5LCAxMjA2NDAsIDY1MjE4LCAxMTU1OSwgMCwgNzgwNjIsIDc1MzcsIDAsIDExMzcwLCAwLCAxMDMzMCwgMCwgCisgICAgMTAzOTQsIDAsIDc0MTk0LCAwLCAxMjc5MjksIDk3ODAsIDAsIDEzMDkyLCAxOTQ1NzYsIDc3OTUwLCAxOTQ1NzgsIDcwNzQsIAorICAgIDkyNjQ4LCAxOTQ1NzksIDE5NDU4MiwgMTE0MTQsIDEyODg2OCwgMjUzMSwgMTMwMzQsIDAsIDAsIDQyMTEsIDEyNTksIAorICAgIDc1MTcsIDAsIDAsIDE5NDU2MSwgNDA5OTYsIDEzMDM3LCA3MDkyLCA2NDEsIDUyMTksIDk0MDM0LCAxOTQ1NjYsIDExMDY0LCAKKyAgICA0MTEyOSwgMCwgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgMTI4MTUzLCAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIAorICAgIDE5NDU3MywgNDI3MSwgNzg0MTcsIDEyODM1NywgNjc2OSwgNDE0MTAsIDk4MzQ1MiwgNjQyNjIsIDY3NjcsIDQxNDA3LCAwLCAKKyAgICAwLCA2NzU1LCAxMTg4NjQsIDkwNDYsIDEyNzkzNCwgMTI2NjA4LCAwLCAwLCAwLCAwLCA2NzY3NSwgMCwgMCwgMCwgNjQzMzgsIAorICAgIDI1NjMsIDEzMDMzLCAyNDcsIDExODkxNSwgMCwgMTIzMzgsIDQ2NTEsIDY5ODk1LCAxMTI3MCwgMCwgMCwgMTE5MzMsIDAsIAorICAgIDAsIDQxOTAzLCA0MzQ0NywgMTEwMDEsIDAsIDQyMjU1LCAwLCA5MjY2MSwgNjk4MjEsIDQxOTA1LCAwLCAwLCAxMDc3NSwgCisgICAgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCA5ODMwNjMsIDQyNTM1LCA2OTgxMiwgNjQ1MjksIDQxNDA4LCA0Mjg1MywgCisgICAgMzg3NywgMTIwNzk1LCA0MjY3NCwgODE0NywgNDM1NjYsIDExOTAyMSwgOTgzNzc2LCAxMDIzNiwgNjU5MTgsIDQzNzgyLCAwLCAKKyAgICAwLCA2NDUwNiwgNjk2NTIsIDExODkyMSwgNDc0NywgMTI4MDU4LCA2OTg0NCwgNDMyMDAsIDU4MzIsIDAsIDAsIDUxNDEsIAorICAgIDQyNjAwLCAwLCA0MzIwMywgMCwgOTgzNzk5LCA0MzI4NiwgMCwgMTI4MjExLCA0Mzc3OCwgMCwgNDEzMDUsIDc4Nzc2LCAKKyAgICA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIDAsIDYwNTksIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIAorICAgIDAsIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMTIwNDgxLCAxMjA3ODYsIDQyMjMzLCA2NDE0MCwgOTk0NiwgCisgICAgNjM4ODUsIDE5NDc5MiwgMTE4MjIsIDAsIDQzMTg5LCA5ODM4OTgsIDAsIDE3ODgsIDE1NzksIDEyMDQ4MiwgNzEyOTgsIDAsIAorICAgIDAsIDAsIDkwMjgsIDExOTU3MSwgNjkyMzQsIDk0MDU1LCAwLCAxMjg1LCA2NDg4MiwgNDEyNDIsIDcwMDg2LCAwLCAxMjY0MCwgCisgICAgMCwgNzQwMSwgMCwgMTI2MjUsIDY4MTk4LCAwLCA3MDA4MiwgMzk0MCwgNDE1OTcsIDQzNzU0LCAzMzk2LCAxMjY0MiwgCisgICAgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDkxNzgxNSwgMTAxNTMsIDAsIDYxNjYsIDEyMDUxNiwgMTE4OTg5LCAwLCA4ODE1LCAKKyAgICA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIDExOTMxNywgMTE5MzE4LCAyMTQyLCA2ODQ1NCwgNDI0ODUsIAorICAgIDk0MDEyLCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIDAsIDkyNjQzLCAwLCAxOTQ2NzMsIDEyMDMyLCAwLCA5NzI1LCAwLCAKKyAgICA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgNDI3NzcsIDEwMTM5LCA5ODAsIAorICAgIDQzNjk4LCA2NTM4NiwgMjIwOCwgMCwgNDM3MDEsIDQzMTk4LCA3MTg0LCAxMjA2NzMsIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgCisgICAgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDkyMzczLCAwLCAxMTkzMjMsIDgwNzIsIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIAorICAgIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIDEyMzk1LCAwLCAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMjIxNywgCisgICAgOTE3ODU0LCA3Mzk3NSwgNjM2NywgNjM1MSwgNjY2ODgsIDAsIDc4MTA3LCAwLCA2NDczNSwgNDEyNDMsIDkyMTk5LCA3ODA4LCAKKyAgICAxODI5LCAwLCA0MTkzNywgNDM1OCwgNDMyNzIsIDYzNTMsIDAsIDAsIDEyMDQyMiwgMCwgMTcxMCwgMCwgMCwgNjU2MDcsIDAsIAorICAgIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIDk3NDEsIDc4MzI5LCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIDY0NDE4LCAKKyAgICAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgMTI4MjI1LCAxMzIxMywgNDI0NTIsIDc4MzMxLCAxMjA2NjQsIDc4NDQ1LCAwLCAKKyAgICAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgNDExMzIsIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIAorICAgIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAxMjYzMiwgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIAorICAgIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgNDEwOTksIDAsIAorICAgIDY2MzA5LCAwLCAwLCAxNDk0LCA5ODMxNDYsIDEyNjYxMywgMCwgMTE2OTMsIDEyNjUxMywgMTA0OTQsIDkyNjU1LCA2NTg3MiwgCisgICAgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgNzM3OTQsIDAsIDgwMjIsIDAsIDEyMDQ2MiwgNzQxMDYsIAorICAgIDEyNDEzLCA5NDA2OSwgOTE3OTk0LCA5MTc5OTMsIDkxNzk5NSwgNTU3MCwgMTg4MSwgNzIxMCwgMCwgMTAxMiwgNDM3NTIsIAorICAgIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDk4MzI0MiwgNDIzMzksIDAsIDYwNjMsIDAsIDc4MzgzLCAxMTk1OTQsIAorICAgIDYwNTMsIDY1NjAyLCAwLCA5MjIwMSwgNjQ3MjcsIDkxNjAsIDE5NDgyNywgMCwgMCwgOTIxODAsIDEwNTAzLCAxMTg4MTAsIAorICAgIDYwNTUsIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDkyMjA0LCAKKyAgICA5ODMxMTYsIDAsIDEyMDExOSwgNzgzMzMsIDEyMDExNywgMTIwMTE4LCAxMjAwOTksIDEyMDEwMCwgNjUwODcsIDU1NzEsIAorICAgIDM2NzQsIDk3NDAsIDkxMjEsIDU1NjgsIDEyMDEwNywgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgCisgICAgMTIwMTAxLCA1ODksIDcwNTAsIDk4MzgwMCwgNDMyODEsIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgCisgICAgMTI2NDk3LCA3NDA5OSwgNDI2NDUsIDAsIDE5NDgxNSwgODU4MywgMCwgNTg0NywgNjkyOCwgMTI4MDc0LCAwLCAwLCAwLCAwLCAKKyAgICA2NjU5MiwgMTIyMDQsIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCA0MjU2MSwgMTIwNjI2LCA5ODMyNTEsIDAsIDgxMjAsIAorICAgIDEyMDcwMSwgMCwgMCwgMTI4MDEyLCA0MTA2MywgMCwgMTA2NjQsIDAsIDgzNjksIDAsIDQ1NTEsIDE5NDk2NCwgMzM2OSwgMCwgCisgICAgMCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTE4OTYwLCAxMjUxNywgNTU3LCA5NDU3LCAxMjAzNCwgOTgzNjcxLCAKKyAgICA2MzU1LCAxMjUxOSwgNDEwMDQsIDAsIDE5NTAyNSwgNzQwOTQsIDAsIDAsIDc3OTcwLCA5ODM1NjAsIDAsIDEyODE3NSwgCisgICAgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgNjkyMywgOTIyODEsIDEwNDQxLCA3MzgzNiwgMCwgCisgICAgNDM5OTAsIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIDE2MTgsIDAsIDEyMDQ3NCwgOTY0NSwgMTA0MzAsIAorICAgIDkxNzk1OSwgNTg1MywgMTMwNjMsIDEwMzYzLCAwLCAxMjk1NiwgMTI4MTY5LCAxMjA3MjksIDExMzE0LCA5MTc1ODIsIAorICAgIDEyMDYwLCAwLCA3ODM5MiwgMTI4MjYsIDYzMjksIDAsIDEwNTE0LCA2NTUxNywgNzQzOTUsIDI3MDcsIDgzMDksIDAsIAorICAgIDEyNzA1NCwgNzgzOTgsIDQzNTcwLCAyNjk3LCA0MzQyMCwgNzgzOTYsIDEyNzA1NywgMjY5NSwgNDIxNzEsIDAsIDAsIDAsIAorICAgIDY3NjE3LCAxMTg5NzEsIDAsIDI2OTMsIDEyMTI1LCAxMjc2NiwgMCwgMTE2NCwgMTI4ODE3LCAwLCA0MTkxOCwgOTgzMTY4LCAKKyAgICAxMjc1NDIsIDg2ODcsIDY2MDA5LCAxMjE3OCwgNzA1MywgMTI4MDAxLCA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCAKKyAgICA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCA0MTEyNiwgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIAorICAgIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgMjA1MywgNDI4NDMsIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgCisgICAgNzQ0MzgsIDc4ODUyLCAwLCA2Nzg0MSwgNzQzNzAsIDAsIDg5MjIsIDEyODA2OCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgCisgICAgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAKKyAgICAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgNTI5NSwgOTE3NTY5LCA3NDExNCwgMTIyMywgMTY0MiwgCisgICAgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIAorICAgIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgODA3MCwgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgCisgICAgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIDAsIDY3NjQ4LCAxMjA0OTksIDk0MDAxLCA0MjU3LCAKKyAgICAxMjEwNCwgNzc5NDIsIDYyMjAsIDkwMDQsIDY1NTYxLCAwLCA3Nzk0OSwgMCwgNjgxMzUsIDkxNzU3NiwgNzc5NDYsIDAsIAorICAgIDY5Njc5LCA2OTY4NCwgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgOTI1NTYsIDczODk4LCAxMTk3OSwgNzAwNTEsIAorICAgIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgMCwgMCwgNjQ2OSwgNzQyMjcsIDAsIDY1MzA0LCAKKyAgICA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAwLCAwLCA0MjkxNiwgMCwgMCwgMCwgNzI4MiwgCisgICAgNzg3MjgsIDY1NzMzLCA0NDQ1LCAxMjcxMzgsIDEyODA4MiwgMzQ5NCwgNzQ2MDYsIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCAKKyAgICA3ODU2NiwgMCwgOTgzMTg5LCA2NTg5OCwgOTgzMjQ0LCA2NTMxMiwgNTQ0NywgMCwgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCAKKyAgICA0MTEwNiwgMCwgNjQ0NDgsIDAsIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgMTI4MjgwLCAwLCA0MzYwOCwgMTE5MDkxLCAKKyAgICAwLCA2NTM4LCA0MzM1LCA3ODM2NCwgMzk0MSwgNDExMjIsIDExMDYxLCA3ODM2MywgNjQ4OTIsIDkxMTMsIDE5NTQsIAorICAgIDEyMTU1LCA5ODM2NzQsIDQyODc4LCAxMTUwMCwgMCwgMCwgNzQ1NzgsIDAsIDY1ODMyLCAwLCAwLCAwLCA3Nzk3NSwgCisgICAgMTE5MjMwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDkyMzA3LCAwLCAwLCA1MTMzLCAwLCAwLCA5NTAwLCAKKyAgICAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgMjIxMiwgOTgzMDgwLCAwLCAwLCAyNDk2LCAxMTUxNiwgOTQ0LCAxMTg4NTEsIDM4OTAsIAorICAgIDEyMTY4LCAxNDM4LCAwLCA5ODMxMTcsIDAsIDQxOTQ3LCAxMjIwLCAxMjA4MjgsIDEyODU1NSwgMCwgMCwgMTU3MSwgCisgICAgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIDk4Mzk0NCwgMCwgNzgxMjAsIAorICAgIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIDQxMTIwLCA2NTEyMSwgMTA4NjIsIAorICAgIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIDkxNzk4NiwgMTE1MzIsIDc0MDczLCAKKyAgICAxMjczMzgsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIDkxNzg5NSwgNjQyODcsIDAsIDc4MTE1LCAxMTQyOCwgMTczMCwgMjQ1NywgCisgICAgOTE3ODA4LCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIDg4NDAsIDgwMzUsIDAsIDAsIDkyMjMwLCAwLCA2MTI5LCAwLCAKKyAgICAxMjg1MjgsIDEyODI2OCwgMCwgNzg3NCwgODY4MSwgMTE5MDkyLCAwLCAxMzEzNiwgMCwgMCwgNzAxMDIsIDYzODg2LCAKKyAgICAxMTg4ODEsIDk2MDUsIDcxMzA4LCAxMzIyMCwgMTI4Nzc2LCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIDAsIDAsIDAsIDUyNDAsIAorICAgIDk4MTEsIDEwMDEyLCAzMDk2LCAwLCAwLCA5ODMzNTEsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgOTUwMSwgMCwgMTI3MiwgCisgICAgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAwLCA5MTc4MTIsIDAsIAorICAgIDExODg5OSwgMTIxOTMsIDAsIDAsIDAsIDAsIDk4MzM1MywgMTk5MzUsIDAsIDkyMTYyLCA2OTY3NiwgMCwgMCwgMCwgNTI3NSwgCisgICAgMCwgMCwgODYzNywgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCA2NjMzMiwgNjY2MDMsIAorICAgIDEyODEzOCwgMjQyNiwgMTIwNDIsIDkyMTk0LCA5ODM5MTEsIDk1MzcsIDM5NjEsIDEyMTE1LCA3Nzk1MywgMjYwNSwgNDUwMCwgCisgICAgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgMTE2NjcsIDQyNjg2LCA3Nzk3MywgNDIzNjIsIDY0Njg2LCA0NDk5LCAKKyAgICA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgNjgyMTUsIDkxNzkwNCwgODU0MSwgNzgyOTgsIDcwMDM0LCA0MTg2NiwgMCwgCisgICAgMCwgMCwgMCwgNjk5MjQsIDQzNTU1LCAyODIzLCA5NTU5LCAxMDA2MCwgNDE5NDAsIDgyOTksIDQxOTQ1LCA3MTMyLCAKKyAgICA0MTk0MSwgMzMwOCwgNzE5MCwgNjQ4ODAsIDg2MTQsIDY1MjIwLCA0MTQ5MywgMCwgNDE2OTksIDEwNzYyLCA0Mzc4MCwgCisgICAgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDYyNzQsIDQ0OTQsIDAsIDQwMTIsIDEwMzk1LCA5ODM1OTEsIDQzNjMzLCAKKyAgICA2NTQ0NywgMTI2NTExLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgNDI3NTUsIDc0ODAyLCA5MjI3LCAKKyAgICA3NTA2LCA3NTEwLCA2OTkzNywgNjkxLCA3MzgsIDc1MTEsIDc1MTIsIDc1MTUsIDM4NjgsIDY4OCwgNDE4NDcsIDY5MCwgCisgICAgMjU0OCwgNzM3LCA5NzQsIDgwMDMsIDc0MDYsIDkxNzkxMSwgMCwgMTI4Njg4LCAzOTg1LCA5MTc5MTIsIDY1ODYwLCAKKyAgICA2MzkyMSwgNzA1MSwgNjk3NzcsIDQ2ODIsIDkxNzgwNSwgMTI4MDksIDY0MDYsIDQ2ODUsIDkyNTA1LCAxMDg3OSwgMTAzNDcsIAorICAgIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAwLCA5MTc5MDcsIDAsIDQxOTU4LCAxMTkxNzYsIDkxNzkwOCwgMCwgCisgICAgMCwgNDI2NTcsIDkyNDY4LCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCA0MzU2OCwgOTgzMTc1LCAxMTcxNywgNzY1MCwgCisgICAgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIDc4MDgyLCA5NjUxLCAwLCAzODkxLCAwLCAwLCAKKyAgICAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDIzNjMsIDk4MzEzNSwgMCwgNDM1NjEsIDAsIDAsIDc0MTQ2LCAxODYwLCAKKyAgICA3NDk1LCA3NTgwLCA1ODEyLCA3NDk3LCA3NTg0LCAxMTkxNDAsIDEyNzg1MywgMCwgMTIwMzQ3LCA3NzI3LCAwLCA4NDk4LCAKKyAgICA2OTgxOCwgODk0OSwgMzA2NSwgNDI3MTksIDcxMzUsIDE1NjksIDkyMzc1LCAxMjUzNCwgMTIxMjQsIDc2OTAsIDAsIAorICAgIDEyNTMzLCA5ODM4NzksIDY0MTgsIDQ1NDMsIDc4MDg2LCA2OTY5LCAwLCA3NDgwMCwgMCwgNjc5NzQsIDExOTgwLCAKKyAgICAxMjg2NTAsIDk4MzgwMSwgNjM4OTQsIDEyMDc2MCwgMTIyODIsIDY2MTkyLCAwLCA3NDU5MiwgODg1MCwgNzQyNzUsIDkyMzgsIAorICAgIDEwNjE3LCA5MTc1NDUsIDAsIDkyNjI1LCAwLCAxMjc5MSwgMCwgMCwgMTI3ODQzLCA0NDQ3LCA3MzczMiwgMTI3OTMsIAorICAgIDEyOTAwLCA5MjM3NywgMTA5NTAsIDAsIDc4MDg3LCAxMjc5MCwgNDE0MDAsIDExOTEyOCwgNjY2MDcsIDEyNzkyLCA0MjIzMiwgCisgICAgMTk0OTM4LCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgOTgzODY5LCA0MTM5OSwgMCwgMCwgNTUyNTgsIDAsIAorICAgIDEyNjkwLCAwLCAwLCA0MzY3MiwgMTI3ODQwLCA0MTY1MiwgMjk3NCwgOTAxMCwgMTEzMTUsIDAsIDI3OCwgMCwgNDE0MDUsIAorICAgIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIDQzNTUzLCAwLCA2NzkwMywgMCwgCisgICAgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgOTgzMTg2LCA3NzgyOSwgNzEzNjAsIDAsIDY0MTMsIAorICAgIDY1NTAsIDAsIDE5NDAsIDAsIDQzNjM3LCAyMjAsIDY1MTkzLCA0MzU1MSwgMTA2NzgsIDEwMDQ0LCAxMjgzMjIsIDAsIDAsIAorICAgIDY4NjU5LCA2NDAzLCA1NzA3LCAxMDM5MywgMTI3NTMyLCAwLCA2NjYxNCwgMCwgMCwgMCwgMTAyOTcsIDAsIDM3NDIsIDAsIAorICAgIDM5NTksIDAsIDAsIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCA0Mzc1OCwgNDE4MiwgNzgxNzEsIAorICAgIDQ2NzYsIDEyMDUwMSwgMCwgMCwgMjUxMCwgMCwgMTAyMDgsIDc4MTY4LCA5MjM2MSwgMTE1NDAsIDQzNTQ2LCA2NjkyLCAwLCAKKyAgICA0MTA2MCwgMCwgNDY2OCwgOTA4MywgMCwgMCwgNzgxNDQsIDE1NTksIDYzODMxLCA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAKKyAgICAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIDEyODIzNiwgMCwgMTIwNDcyLCAKKyAgICA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgMTIwNDUsIDYyNzgsIDAsIDU1MTUsIDAsIDAsIAorICAgIDk4MzA1MSwgNjUzMzksIDQzMjIxLCAyMjExLCAwLCA1NTE3LCAwLCAwLCA3NDg0MSwgNjc4ODQsIDAsIDY3ODkwLCA2Nzg4NSwgCisgICAgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAxMjcxODgsIDE5MDIsIDY3ODg3LCA5NjM4LCAKKyAgICAxMjk3NiwgMTI2NTQ2LCAxMjQ4MywgMTIzNjgsIDQxNzY5LCA0MjcyNiwgNDE3NjUsIDczNjEsIDY2NjcsIDY3ODc0LCAKKyAgICA3NTU2LCA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDQyNjc3LCA2Nzg4OSwgMCwgMTMxMSwgOTE3OTY2LCA0MzI2LCAKKyAgICAxMTAwMCwgNjM4MjQsIDEzMDY4LCAxMDkzMiwgMTI4ODgwLCA2OTE3LCA3ODE1NSwgMCwgOTQ5LCA3ODE2MiwgMCwgNjE0OCwgCisgICAgODYwNSwgNDIyNTMsIDc4MTc3LCAwLCAwLCA0MjcxNSwgMCwgMCwgMCwgNjM4NzEsIDAsIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCAKKyAgICA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIDQyNzE2LCAwLCA0NDMxLCA0MzMxLCA5ODM3MjksIDEyODY3NSwgNDE4MzQsIDUyNzksIAorICAgIDAsIDEwMzM2LCA4MzEyLCAwLCA0MjcwMSwgMTI4ODI1LCAwLCA3ODE2NSwgNjYwMzYsIDAsIDAsIDY0MjgsIDQyMjcwLCAwLCAKKyAgICA5ODM1OTYsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAxMjEzMSwgOTgzNzIyLCA5NDkzLCA5ODM5NjgsIAorICAgIDQxMDE0LCAxMTc5MywgMTk0OTIwLCAwLCA3NDM5NCwgNDM0NjAsIDEwNjUzLCA0MjcyMywgOTgzODU0LCAxMTk2MzIsIDAsIAorICAgIDY1NjAsIDcwMTYsIDc0Mjc0LCA5ODM2MTUsIDQzNTU2LCAzOTI5LCA2Nzk3NywgNjYxNCwgMjc2OCwgOTI1MDQsIDk3NDYsIAorICAgIDUxMzUsIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIDY5NzYxLCA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgCisgICAgNTE2OCwgNzg1NTIsIDEyNzc1MywgNzQzMTUsIDc0MzYxLCA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgOTIyMzIsIDAsIAorICAgIDE5NDc1MCwgNzM5MiwgODIzMCwgOTM2NSwgMCwgMCwgOTgzNjA3LCAwLCAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgCisgICAgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDQ0MDA0LCA3MTQyLCAxMTk4ODEsIDEyMzUwLCA2NTU1NCwgMTE5ODgyLCAKKyAgICAxMTk4NzcsIDExOTg3NiwgMTI3ODUsIDYzODYzLCA0Mzc5NSwgNzc3MCwgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCAKKyAgICA0MjM3NSwgMCwgMTI3MjM4LCA2NjM1MiwgMTA0NzAsIDAsIDExMDU5LCAxMDc5MSwgOTE3OTQ0LCA0NTAsIDExOTMyOCwgMCwgCisgICAgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgNDQwMDksIDc4Mjg0LCA2NjMzOCwgMCwgMCwgMTgzOSwgCisgICAgMTE4Nzk5LCA5ODMyMTksIDEwOTI3LCAxNzAxLCA5ODM2NjQsIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgCisgICAgMTE5ODY1LCA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCA3MTQzLCA5MjQ5MywgNzg2NzcsIDAsIDkyNDI5LCA3ODE3NCwgCisgICAgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDk4MzA0NCwgMCwgNjU4MTIsIDkxNzgzMSwgMCwgNDE4MjQsIDY3OTg1LCAKKyAgICAxMjAyMDMsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxMjc5ODAsIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAKKyAgICAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIDIzMTQsIDQzNjAyLCA3ODgyNiwgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCAKKyAgICA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCA3MTMzMSwgMCwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAKKyAgICAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIDE2MzUsIDc4ODIxLCAxNDEwLCA5MjY3MSwgOTgzMjUwLCAxMTg4NzgsIAorICAgIDAsIDAsIDk5MTksIDEyMDUyOCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjc5NzUsIDc4MTg4LCA0ODkyLCA3NDAxNiwgCisgICAgMTk0NzgxLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAyMDc5LCA2NTI0OCwgMTI3ODgsIAorICAgIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAxMjY1NzMsIDM2NjgsIDY1NzU0LCA0MzU2MCwgMTIyMjYsIAorICAgIDY3OTkxLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIDQzNjE4LCA2NTc0NywgMTA5MzcsIAorICAgIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA5MjQzNiwgODkyMSwgOTk1MiwgMCwgMCwgNDI3MTQsIDk5NTEsIDQzNDA5LCAKKyAgICAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgMjk1OCwgNjgzNTksIDQxODIwLCAyMzAwLCAyMzk1LCAKKyAgICAxMjg1NjMsIDk5NzYsIDEyMDA0MywgMTIwMDUwLCAxMjAwNTgsIDY4MjIwLCAxMjgxNDMsIDQyODA5LCA0MjgwNywgMCwgCisgICAgMTIwMDQ2LCAxMDE5OCwgNDE1MCwgNjQzNzEsIDgzMTgsIDQxNzkwLCA2Nzk3NiwgNDE4OTgsIDIzNjAsIDQxNzk0LCAKKyAgICA5MTc5NDIsIDcxMzE0LCAxMjc4MTgsIDAsIDAsIDI0MTgsIDk4MzA5OCwgMjQxMSwgMTEzMzYsIDc5OSwgNjM4MjMsIAorICAgIDEwMjc2LCAxMDMwOCwgMTAzNzIsIDkxNzU0MSwgNDE3NzIsIDQyODEzLCAyMzE3LCAxMDI2MCwgMTE4OTgwLCA1NTI4NCwgCisgICAgOTIyMDMsIDAsIDEwMzg0LCA5ODMyMjAsIDAsIDAsIDc3NTMsIDIzNTEsIDY2NTUsIDY0NDg5LCA2OTkzMSwgMCwgNzc4NzIsIAorICAgIDQ0NDMsIDQyNzc5LCAyMzAsIDAsIDAsIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAxMDI4OCwgCisgICAgMTAzMjAsIDAsIDg1NSwgNzA0NiwgNjEwOSwgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDAsIDc0MTQ1LCAKKyAgICAxMjc5NDMsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIDQxODg3LCAwLCA0ODYyLCAKKyAgICA5NzM1LCA2NTM3LCAxMjA1OTEsIDc0Mjg2LCAzOTE0LCA5MjE3OCwgOTM5NzYsIDkwNjUsIDEyOTYxLCAwLCAwLCA5MjI1MywgCisgICAgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDczODkzLCA0MjcyNCwgMCwgCisgICAgNDY4OCwgMTIwNDU0LCAwLCAwLCA2Nzk5NCwgODIzOCwgMzExMCwgMTIwMTYyLCA5ODM5MDgsIDEyMDE2MywgNjUyOCwgCisgICAgMTI3NTUzLCA0MzAzNSwgNjk4OTgsIDIxOCwgMCwgMTUyMCwgMCwgNDc4NiwgMCwgNDMyMjUsIDQ2MDIsIDAsIDc4MTY3LCAKKyAgICAxMDA4OCwgNjU0OCwgMCwgMTIwMTU2LCA0Mzk3OCwgODk4OCwgODg4OCwgMCwgMCwgMCwgMCwgMTA2NjYsIDAsIDczOTAyLCAKKyAgICA2OTc0MCwgMCwgMCwgOTk3NSwgMTI4MDM5LCAxMTk5MDIsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIDc0NDQxLCAKKyAgICA3ODgxMCwgMCwgMCwgNjc5ODcsIDAsIDAsIDAsIDY3OTg5LCAwLCAxMDA2NSwgODIwNywgMCwgOTI2MTMsIDEyODAxMSwgMCwgCisgICAgNjYyLCAwLCA5MjQ0LCAxOTQ4NjMsIDAsIDExOTI2MSwgOTgzNDI4LCAwLCAwLCAwLCA0MTkyOSwgMCwgMCwgNjY2NzQsIAorICAgIDQxOTI2LCAxMjA0MDgsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAxOTQ4NjIsIDY4MDEzLCA1MiwgMTMxMTgsIDY0NzUsIDAsIAorICAgIDEyMDM0MSwgMTIwOTUsIDEwMjI1LCA0ODEyLCA5MjU3OCwgMCwgNjc5OTIsIDc0MDg1LCAwLCAzOTc4LCAwLCA5MTc5NDUsIAorICAgIDEyNzgyMywgMTE1ODIsIDEyMDc2MSwgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCA5Mzk2MSwgNjk3ODIsIDEyODU1NywgCisgICAgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAyMDM2LCA5ODYsIAorICAgIDE5NDg1OSwgNjQzOTQsIDU3ODEsIDU1OTksIDY0Mjk0LCAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCA2NDMzNCwgCisgICAgNzgyMDMsIDEyNzgwOCwgMCwgOTIyNjYsIDY1MTAyLCA4OTYxLCA2NTg0MiwgMTAyNDMsIDEwMjQ1LCA3NDE5MSwgMTIwNDEwLCAKKyAgICAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCA2NTUxNCwgCisgICAgMCwgNjM5NDAsIDEyODcwNiwgNjQ1MzMsIDEyMDEyOSwgMCwgNjc4NDIsIDExOTkwLCA5MjQzMCwgNjM5MzksIDQzMzc1LCAKKyAgICA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCA5ODM5MTAsIDY5NDMsIDkxNzkzNCwgNTg1OSwgMCwgMjg1OCwgCisgICAgOTgzMzYxLCA3NDI5NCwgOTgzOTE0LCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzAwNzgsIDkyNTc0LCAKICAgICAyNzUxLCAxMjY2MiwgMjc2MywgODk1MywgNjQ3MDEsIDEwNzMxLCAxMjkyMiwgNzA1MiwgOTE3ODM5LCAwLCAwLCAwLCAKICAgICA2MzkyMCwgNzQxMjgsIDI4NTYsIDExOTkxMCwgNDcsIDY5OTA4LCAxMjY5ODYsIDY1ODU4LCAwLCAwLCAwLCA3ODk5LCAwLCAKICAgICA4NDE3LCA0Mzc5OCwgNzA3MiwgMCwgMCwgNDAzMywgMTI4MTY0LCA0Mzk5MiwgMCwgMCwgMjEyLCA2NDYwMCwgMTkwMywgCkBAIC0xNzc5NywyMyArMTc4MTYsMjMgQEAKICAgICAxMjYyNCwgMCwgMTY3MywgNDgxMSwgOTIzODMsIDU5ODYsIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIAogICAgIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCA0MzkzLCA2NzY1MCwgMCwgMCwgMCwgMCwgCiAgICAgNzQ4MjYsIDY0NzMzLCAwLCAwLCAzNDkxLCAwLCAwLCAxMjgyMTksIDM1MTQsIDY1NDg1LCAwLCA3NDkyLCAwLCA3NDYwNSwgCi0gICAgOTI0ODMsIDc1MTQsIDk4MzM1OSwgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIAorICAgIDkyNDgzLCA3NTE0LCA5ODMzNjcsIDAsIDE5NDczMSwgNzUwMiwgNzU4NywgNjgzNTMsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKICAgICAyMTksIDAsIDAsIDY5MiwgNDM1ODgsIDc0NDMzLCA0MTYzNSwgNDMyNDEsIDk2ODgsIDcxNDcsIDk1MzUsIDAsIDkzOTkxLCAKICAgICAwLCA2NDUzMCwgMCwgNjQ2MTAsIDExODA0LCAwLCA3MTQ5LCA3NDUzLCAwLCA4MDEzLCAwLCA5MjMwMSwgMCwgODg5NSwgCiAgICAgNTI1MywgNzAwMjUsIDU0NTgsIDAsIDI4NjYsIDAsIDEyNzg2MCwgNjUxMTEsIDY4NDMzLCA2NzAwLCAxMjA0ODQsIDAsIAotICAgIDEyMDU4MywgMCwgODk2MiwgNzc5NjAsIDk2NDEsIDQzNjk0LCA3MDU5LCA5ODM2NjgsIDAsIDk2MDQsIDc4NzAwLCA3NDQxLCAKLSAgICA2MzgyNiwgNjc5NzAsIDExODk0MSwgNjQzOTIsIDE5NDczNSwgOTgzNjc4LCAyODQ0LCA5ODM5MzIsIDQxOTc0LCAwLCAKLSAgICAxMjEzOSwgNjc5NzEsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAxOTQ3MzQsIDAsIDE5NDc2NSwgOTgzMjI3LCAKKyAgICAxMjA1ODMsIDAsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgOTgzNjc3LCAwLCA5NjA0LCA3ODcwMCwgNzQ0MSwgCisgICAgNjM4MjYsIDY3OTcwLCAxMTg5NDEsIDY0MzkyLCAxOTQ3MzUsIDk4MzY4NywgMjg0NCwgOTgzOTQxLCA0MTk3NCwgMCwgCisgICAgMTIxMzksIDY3OTcxLCAwLCAwLCAzMzU4LCA2NTI5NSwgMCwgMzEwNCwgMTk0NzM0LCAwLCAxOTQ3NjUsIDk4MzIzMywgCiAgICAgNTMwOCwgMCwgMjkwLCAwLCAwLCAyODYyLCAyNzkyLCAxOTUwODgsIDk4MzA3MCwgMCwgMzI2OCwgNjY1OTEsIDAsIDY1NTIsIAogICAgIDQyMzY3LCA3MDM1LCAxMjA1NTgsIDAsIDAsIDE4MTQsIDAsIDEwMjQwLCA5MjMzOCwgNzQzMDUsIDAsIDc0NTI4LCA2NTkwMywgCiAgICAgMCwgNDI2NDYsIDc2MDYsIDI1OTEsIDI4MzcsIDQzNDEsIDc3OTU2LCA2NDQ4MiwgMTI3MzM3LCA4MTYzLCA2NTI3MCwgMCwgCiAgICAgNzc5MzIsIDAsIDkxMTIsIDc0NDMxLCA4NjMsIDk0OTAsIDExOTg5OCwgMTI4MzQ5LCA0MzMyMywgMTIwNTEzLCAxMTk4OTcsIAogICAgIDkwNzEsIDEyNzMzMywgMCwgMzY1NCwgNzc4OSwgOTYzNywgMCwgMjUzNSwgNjU1MDQsIDc2NTMsIDQwOTkzLCAxMTk4OTksIAotICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4ODUsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAorICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4OTQsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAogICAgIDc0MDg4LCAzMDU2LCAxMDgyMywgMTI4Nzk3LCAxMjczMjcsIDg3NjIsIDEwNTA4LCA2OTY4OSwgNzM3NzAsIDQzOTY5LCAKICAgICA0MzE5MywgMTA3MzcsIDM0NjMsIDk4MzA2NSwgMCwgNjY2MzMsIDg2OTUsIDQ4MTUsIDExMzIyLCA1ODExLCAxMjM0NSwgCiAgICAgNzA0OSwgMTE5OTExLCA1MTk1LCAxOTUwODEsIDAsIDY2NjM5LCAwLCAwLCAwLCAxMjgwNDEsIDAsIDkyMzg1LCAxMjYyLCAwLCAKLSAgICA2NTYxLCAxOTkzOSwgMCwgMCwgMTI4NTM1LCAxMTk5MDYsIDAsIDAsIDk4MzA5NywgMCwgOTgzNjU4LCAxMTk5MDcsIAorICAgIDY1NjEsIDE5OTM5LCAwLCAwLCAxMjg1MzUsIDExOTkwNiwgMCwgMCwgOTgzMDk3LCAwLCA5ODM2NjcsIDExOTkwNywgCiAgICAgNjQ2MTIsIDExOTkxLCAwLCAwLCAwLCAxNTAyLCA5MTc1NjgsIDAsIDkxMDcsIDEyNzMxNiwgNTcwMiwgMzY1NSwgNjc2NjEsIAogICAgIDg0MzAsIDAsIDc0MTMyLCAxMjA3NTgsIDAsIDc0MDU3LCA5NjAzLCAwLCA1MjU0LCAxMjA3NDIsIDc3MjQsIDc0Mzg4LCAKICAgICA2ODM3NSwgMTA3OTYsIDUxMjksIDAsIDAsIDU5MCwgNzU3OSwgNTYxNCwgNTg5MywgOTIyODAsIDExNzIwLCA5MjQ5NiwgCkBAIC0xNzgyNywxNyArMTc4NDYsMTcgQEAKICAgICAwLCA2NTU1OCwgNjU5NDYsIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDcxMzQ1LCA1ODYsIAogICAgIDc0NDE0LCA2NDM1OSwgMTI2NywgMTI4MjY5LCA2NTQ2OCwgMCwgNjU3MzEsIDAsIDEyNzE3OSwgMzYyMSwgMTIwNDczLCAKICAgICA2NjY2NiwgNjQyMTEsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgMTEzODMsIDAsIDAsIDAsIDE3MTQsIAotICAgIDc0NDA2LCAxMjc4MzEsIDAsIDk4MzkxMiwgMCwgNjYyMjUsIDAsIDAsIDQyNjYwLCAxMTQzNiwgMjA3MCwgNjQsIDEyMDY5NCwgCisgICAgNzQ0MDYsIDEyNzgzMSwgMCwgOTgzOTIxLCAwLCA2NjIyNSwgMCwgMCwgNDI2NjAsIDExNDM2LCAyMDcwLCA2NCwgMTIwNjk0LCAKICAgICAwLCAxMDI5MSwgMTAzMjMsIDI4MjYsIDAsIDAsIDAsIDQyMDA4LCA5NzA4LCA0MjcxMCwgMCwgNDIwMTEsIDQxOTk5LCAKLSAgICA5MjE2NCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCA5ODM5NjAsIDY1ODMzLCA3Nzg0OCwgMCwgCisgICAgOTIxNjQsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgOTgzOTY5LCA2NTgzMywgNzc4NDgsIDAsIAogICAgIDE3NjUsIDAsIDAsIDY1NTg4LCAwLCAwLCAwLCA4NDAxLCAwLCA0MjAxNCwgMCwgNzAzMCwgMTk0NzA0LCAxMDQ3OSwgCiAgICAgNjQ5NTksIDI4NTIsIDAsIDAsIDAsIDAsIDEyODU4NiwgOTE3OTUxLCA2OTYzLCAwLCAxMjY2NywgNjQ1NDAsIDc0Nzg2LCAKICAgICAxMDE0NywgMTI5MzUsIDEyNzU2OCwgMTI2NDgzLCAwLCAwLCAwLCA3ODc1NywgMCwgMCwgMCwgMCwgOTk5NCwgMTI0NjcsIAogICAgIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIDQxNjc1LCA3MDg0LCAyNzY1LCAwLCA0MzM4MiwgMCwgMTIwNzE5LCAKICAgICAxMjgxODgsIDkyNTE2LCA2NjY2MiwgMCwgNzgxMzMsIDkzNjQsIDE5NDY4NSwgNzQ0MTYsIDAsIDAsIDc3OTg4LCAyNjMsIAotICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3MzMsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAorICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3NDIsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAogICAgIDcxNzcsIDcwMTA1LCAwLCAwLCAwLCA0MjYyLCAxMDI4NSwgMTA3MjIsIDQyMDIwLCAxMjY1NzUsIDY4MDYsIDY5OTIsIAotICAgIDQyMDE5LCAwLCA0MTI5MCwgOTgzNzA3LCA3NTAsIDAsIDcxMzA0LCAxMDE2MywgNjM5MTMsIDcxMzAwLCA3MDMyLCA1OTU0LCAKKyAgICA0MjAxOSwgMCwgNDEyOTAsIDk4MzcxNiwgNzUwLCAwLCA3MTMwNCwgMTAxNjMsIDYzOTEzLCA3MTMwMCwgNzAzMiwgNTk1NCwgCiAgICAgNjQ5MzEsIDQzMTQsIDAsIDE5OCwgNjg0NTMsIDczMCwgMTIwMDk0LCA2MzkwNywgNzc5OTMsIDc4ODkxLCAxMzE2NSwgCiAgICAgNzEwNywgNzQxNzEsIDQyODA0LCA2NzgsIDgyNDAsIDc4MDE1LCAxMjg3ODQsIDQxMzc4LCAxMTAwOCwgNjkzOCwgNzAwMjYsIAogICAgIDkyNjM3LCAyMDk3LCA2NjI0NiwgMTIwNTYwLCAwLCAwLCAwLCAzODkyLCA2ODYzMiwgNjk2NDIsIDY3MTIsIDY2MDQ1LCAKQEAgLTE3ODQ1LDMxICsxNzg2NCwzMSBAQAogICAgIDY5NjY5LCA0MzI1NCwgNzM4MzEsIDAsIDEwMjkzLCA1OTUyLCAxMjgxLCA0Mzc0NywgMCwgMCwgMTA2NzcsIDYwNCwgCiAgICAgNDEwOTcsIDkxODIsIDE4NTksIDAsIDkyNjAzLCAzNDI1LCAxMjc0ODgsIDAsIDI4MzYsIDAsIDAsIDk3MDcsIDAsIDQzMjAyLCAKICAgICAwLCAwLCA2NTE5OSwgMTczOCwgOTE3ODE4LCAxMjgxNTgsIDI4MzIsIDkyNzAyLCA5NjcwLCAxMjkzNywgMCwgNjYzNzQsIAotICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MTQsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAorICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MjMsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAogICAgIDEzMzEsIDAsIDAsIDAsIDEyNzA4LCAwLCA1MDkwLCA1MDg5LCAxMjc5NzcsIDAsIDExOTEwOSwgMCwgMTI4NjgxLCAzMTksIAogICAgIDExODg0NywgNDM0NzksIDk0NzcsIDAsIDAsIDUwODcsIDkyMzI1LCA3NjQwLCA5NiwgNTA4NiwgMCwgOTIzNzksIDAsIAogICAgIDUwODUsIDY0Mjg2LCA5MjY2NSwgMCwgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIAogICAgIDEyNjU4NywgMCwgMTI3MTY1LCAxMjcyNDEsIDY2NzcsIDc2MDEsIDAsIDU5MSwgNjQ0MTksIDExODk1MywgOTIyNjIsIDAsIAogICAgIDExODkyMywgNzAwODQsIDAsIDEwOTM5LCA2MTA2LCA2OTMzLCA0MTI3MSwgNjc2MCwgNzEzNDMsIDQ1MzQsIDQxMjcwLCAKICAgICAxMjg4NzYsIDAsIDY1NTc0LCAwLCA5MjI0LCA2OTg1MywgMzY3MSwgODk3NiwgMTI2NDc0LCAwLCA0MTI3NSwgNjM3MiwgCi0gICAgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgOTgzNzIxLCAwLCA2NzI4LCAwLCA5NzE1LCAwLCAKKyAgICAxMjgwODQsIDU1MjYxLCA3OTYzLCA2MzcxLCAwLCA1NjgsIDAsIDQxMjczLCA5ODM3MzAsIDAsIDY3MjgsIDAsIDk3MTUsIDAsIAogICAgIDgyNTgsIDExNzUzLCA3NDgyMCwgMCwgOTYwMiwgMTE4OTE5LCA0MiwgMCwgNDM2ODgsIDAsIDAsIDc0NTgsIDAsIDAsIAogICAgIDY1Mzg1LCAxMTk5MDAsIDAsIDExOTU4LCAwLCA5MTc4MjIsIDAsIDYyNTQsIDQyNzIxLCA2NjMzNiwgODA0NSwgMTE1NTAsIAogICAgIDAsIDAsIDk4MzU5NywgNDI4NTgsIDExNzg5LCA2NTg2OCwgNTU1NywgMTAxMzMsIDk3MzcsIDEzMTA5LCAwLCA5NDY3LCAKICAgICA1NTU4LCA4ODc4LCAxMjgxMzYsIDE5NTAzNiwgNzQ1MSwgNjcwNiwgMTAxNDYsIDAsIDkwODYsIDY0NTY2LCAwLCA2NDU4NCwgCiAgICAgNzQzNywgNzQ1NCwgMTI1OTQsIDEyODY5MCwgNjgzNjIsIDQ1NDYsIDc3MzEsIDAsIDcwMDQ4LCA3NDI0MywgMCwgMzgwNSwgCi0gICAgMCwgMTk0NTY1LCA0NDAwMSwgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCA5ODM3ODEsIDc1NDQsIDk4MzA0NSwgNDM0NjksIDAsIAorICAgIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgOTgzNzkwLCA3NTQ0LCA5ODMwNDUsIDQzNDY5LCAwLCAKICAgICAwLCAxMDE1MiwgNjQ0MjIsIDY1MDkxLCAxMTkxMTMsIDc2MDIsIDY0NzI5LCAwLCA0MzUyMSwgMCwgNDIzMDIsIDQzNzExLCAKICAgICA0MzUyMywgNDE0NDcsIDU1NTksIDAsIDg3MDQsIDIzOTcsIDU1NTYsIDAsIDAsIDAsIDkwMTEsIDk2MzAsIDkyNjMzLCAwLCAKICAgICA5Mzk5OCwgNTUwNiwgMCwgMTkxMSwgNjY2NTIsIDAsIDk5NjEsIDg4NDUsIDY2Njk4LCAwLCAxMDc5MiwgODg4OSwgMCwgCi0gICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzNzk2LCA3NDM2NSwgNzU1MiwgMCwgMCwgCisgICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzODA1LCA3NDM2NSwgNzU1MiwgMCwgMCwgCiAgICAgNjUzODQsIDcyMjMsIDQ1NTksIDAsIDE5NTYsIDQzMTM4LCA3MDI0LCA2NTcyOCwgNjQ1MDEsIDEyMTAsIDE5NTA3NywgCi0gICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyODUsIAotICAgIDk4Mzc4MywgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCisgICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyOTMsIAorICAgIDk4Mzc5MiwgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCiAgICAgMTA5NDEsIDY1NzIxLCA2OTYyLCAwLCAwLCAxMTkzMjQsIDAsIDExMDE0LCAxMjc5NzIsIDg5NDIsIDEyMDAwLCA2OTIyNCwgCiAgICAgOTIyNjcsIDEyODUzNiwgMTE5NzQsIDkyMjEzLCA0Mjc3MiwgMTI3NTE4LCAxMTY1MCwgNTAxMywgOTI2NjMsIDEyNjU4MywgCi0gICAgNjYyMTAsIDExODkxNCwgNjYxMywgOTI0NzYsIDAsIDQzODE5LCA5ODM3NjEsIDAsIDY0NzE0LCAwLCAwLCAxMjE2MiwgCi0gICAgMTIxMjAsIDQzNDc2LCA5ODM3NTcsIDExMDI0LCA3NDgxMSwgNjYyMjgsIDEwNTYzLCAwLCAxMjcxOTYsIDQzNTIyLCAyNDYyLCAKKyAgICA2NjIxMCwgMTE4OTE0LCA2NjEzLCA5MjQ3NiwgMCwgNDM4MTksIDk4Mzc3MCwgMCwgNjQ3MTQsIDAsIDAsIDEyMTYyLCAKKyAgICAxMjEyMCwgNDM0NzYsIDk4Mzc2NiwgMTEwMjQsIDc0ODExLCA2NjIyOCwgMTA1NjMsIDAsIDEyNzE5NiwgNDM1MjIsIDI0NjIsIAogICAgIDAsIDE4MzcsIDAsIDYzOTcyLCA2OTU3LCAwLCAxMjA1NTksIDQ5NTIsIDY1NzE4LCA2NTgyNywgNTUwNCwgNjU3MjAsIAogICAgIDY1NzE0LCA2NTcxNSwgNjU3MTYsIDAsIDEyNzAwNSwgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDAsIDgxMDcsIAogICAgIDExOTIzNCwgMTEyNywgNDU1LCAwLCA2Mzk2OCwgMTI3OTI0LCAzNDgzLCAxMTk1OTMsIDE5ODksIDAsIDY5Njc4LCA5MTA0LCAKQEAgLTE3ODgyLDcgKzE3OTAxLDcgQEAKICAgICA0MTg2OSwgMTI2MTksIDAsIDEwMTU0LCA5ODMwNDMsIDc0NDM5LCAyMDM5LCAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIAogICAgIDQ1OCwgMTIwNjIwLCAwLCA2OTc5MSwgMTI3MTYxLCAxMTkxNiwgNjUwMTYsIDAsIDY5NjcxLCA0MjExNSwgOTgzMTMzLCAKICAgICAxMjI4OCwgNzgwNTcsIDAsIDE0OTMsIDQyMTExLCA3NTUzLCA0MDk3LCAxMjgxOTksIDEzMDgwLCAwLCA2NTgwOCwgNjYxMCwgCi0gICAgNjAzMCwgODA1OSwgNzUwOCwgMTMxMzEsIDAsIDk4MzQyMywgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMTI4MTkyLCAKKyAgICA2MDMwLCA4MDU5LCA3NTA4LCAxMzEzMSwgMCwgOTgzNDMxLCAwLCA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAxMjgxOTIsIAogICAgIDQxMjc3LCA2NDY1OCwgMCwgNjQzODAsIDY2MjUsIDc0MzU0LCAxOTkwNCwgMCwgMCwgMCwgNjUzNzEsIDcwNzgsIDAsIDgzMywgCiAgICAgMCwgNjM2OSwgMCwgMTA5NzksIDQxOTUzLCAwLCA0MTQzNCwgNjA2MiwgMCwgMCwgMTk5MTYsIDY5MTMsIDkzMywgMTM0MSwgCiAgICAgOTg0MiwgNjcyMCwgNjU3NDQsIDAsIDk4MzU5MiwgMTI4Mjk1LCAwLCA3NDA1LCAxMDEwNSwgNjU4MTAsIDAsIDQxNjMyLCAKQEAgLTE3ODk3LDIzICsxNzkxNiwyMyBAQAogICAgIDY3NDEsIDQzMDQ3LCAwLCAxMzE4MCwgMTI4NTE3LCA0MTgsIDkxNzk3MiwgNjQ0OTUsIDEwMjk1LCAxMDMyNywgMTAzOTEsIAogICAgIDQxNzUyLCA3NDMzOSwgODY0MSwgNDE0NDksIDAsIDc0MTAwLCAwLCAxMDkxMSwgNjk0MiwgMCwgMTAyNCwgNDI4NDksIAogICAgIDQxNzUxLCA2OTc3NiwgODk0MSwgOTgzNTU2LCA0NTU0LCAwLCA5MDIzLCAxMTY4NSwgMCwgOTkyOCwgNzg2MTcsIDAsIAotICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ3NSwgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAorICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ4MywgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAogICAgIDQzMTY2LCAwLCAxMTY4MCwgOTI2MTksIDExNjg2LCA3ODU0NCwgNjUyMjQsIDQ1NjUsIDQ2NTUsIDExOTU1MywgMCwgCiAgICAgOTIxODMsIDY0NTIzLCAxMDM0MywgMTA0MDcsIDAsIDY2NjcxLCAxMTQ2NiwgMCwgMTI4MDAzLCA0Mjg5MCwgNzQwMTMsIAogICAgIDEyMDUwLCA2ODIwMSwgMjg2MCwgMCwgMCwgMCwgNDI3OTIsIDU3NDMsIDEwNDI0LCAxMjA2NSwgNDI4NzIsIDAsIDkyMzQyLCAKICAgICAwLCA4ODc1LCAwLCAwLCA5MTc5OTEsIDc1MzEsIDEyODQ3LCAyNDEzLCAwLCA3ODYzNSwgOTYyLCAwLCAxMjg1NSwgNDExOTYsIAotICAgIDQyNTY0LCAwLCAxNTgyLCA5ODM3MDYsIDU1MDgsIDAsIDAsIDAsIDEwODAxLCA2OTg3NiwgOTIzNTQsIDAsIDcxNzMsIDQ5NiwgCisgICAgNDI1NjQsIDAsIDE1ODIsIDk4MzcxNSwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDY5ODc2LCA5MjM1NCwgMCwgNzE3MywgNDk2LCAKICAgICAxMDQzOSwgNDMxMywgNjQ2MDcsIDY5NjM4LCA3ODYwLCAwLCA5MDYsIDQyNzkzLCAyODQyLCA2NDA1LCA2NDcyMiwgMTMxMzIsIAogICAgIDc5OCwgNjQ2OTQsIDEyODAxLCA4NDA2LCAxMTUzLCA5MjE3MywgNjQ3ODgsIDAsIDgwNTQsIDkxNzQsIDEyODY1MiwgCiAgICAgOTE3OTc2LCA5OTY0LCA3NDQwOSwgNDE2MTEsIDQ2NDIsIDY2NTc0LCAxMTU1NiwgOTE3OTgyLCAwLCA3ODg1NywgNDIwODksIAogICAgIDc4ODU1LCA5MDA4LCAwLCAxMjY1OTIsIDE5NTA5NiwgNDIwNzksIDkxNzk4MSwgNzc5MjQsIDQyNTEzLCA3NzkyNywgCi0gICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzY5MywgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKLSAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzcyMywgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCisgICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzcwMiwgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKKyAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzczMiwgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCiAgICAgNDIwMDQsIDAsIDAsIDQyMzE3LCA0MTk5OCwgMCwgNjk0NiwgMCwgMCwgMCwgMTI4MTkzLCA2NTIwNCwgMCwgNjgxMTMsIAogICAgIDQyNjkwLCA5ODgwLCA0MjAxMCwgNzQ4MjQsIDY0NTg5LCAxMDExMSwgNjQ4NzUsIDEyNzg4MCwgNjgzOTksIDQzOTk4LCAKICAgICAxMTM2MCwgMCwgMCwgMCwgMTE4ODI2LCA0MjE0OSwgMCwgMCwgMCwgNjQ5NDEsIDc3OTE5LCAxMjA0MjEsIDEyODA3NywgMCwgCiAgICAgNTUyNDcsIDQxMTAsIDY2MDA1LCA2OTU5LCAxMDkyOSwgMTE5MTEwLCAwLCA2NjcwMywgNzc5MjEsIDg2MTcsIDQxOTgyLCAKLSAgICA2MDI1LCA2OTI0MiwgOTgzMTc2LCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDk4MzM2OCwgMTAxMTcsIDk4MzE2OSwgCisgICAgNjAyNSwgNjkyNDIsIDk4MzE3NiwgMCwgMCwgMCwgOTU5NywgNDIwOTksIDQzMTcyLCA5ODMzNzYsIDEwMTE3LCA5ODMxNjksIAogICAgIDkyMjk3LCA0MTYzNiwgMCwgMCwgMTIwNjgxLCA4MzAxLCAwLCAwLCAxODcsIDAsIDY1NjY5LCAxMjgzMzksIDQ5NjMsIDAsIAogICAgIDEyNzUxNywgMCwgODk2NCwgNjU2NzYsIDc3NzUsIDAsIDQxOTQ4LCAwLCAwLCAwLCA0MTk0MiwgNjU0NDksIDMxNjAsIAogICAgIDEwMDgxLCAxMzIyNiwgNDIxMjEsIDQyNDc1LCA0MjY2MywgMTI4MjEwLCA0MTc2NiwgMTE5MTE0LCA2NTg4MiwgNzg4NDksIApAQCAtMTc5MjMsMjAgKzE3OTQyLDIwIEBACiAgICAgMzEwMywgMCwgNDE3NTMsIDEyODU0MCwgMCwgMCwgNzg4NDQsIDc4ODQ1LCA0MTczOSwgNzg4NDMsIDQyNTE1LCAxMDkzMSwgCiAgICAgNDE3NTYsIDQzMzQ3LCA0MjU2MCwgNTM5MSwgNDE3NDYsIDExOTE0NywgOTI1OTEsIDQxMjU5LCA1NTYxLCA2OTkzMCwgCiAgICAgMjY5MSwgMCwgNjU1NTMsIDc5MzMsIDU1NjIsIDY5ODAwLCAxMjgyNjUsIDQxMjYyLCAxMjgxNDYsIDY0NDIxLCA3NDg0NiwgCi0gICAgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCA5ODM3MzAsIDAsIDAsIDAsIDkyNTI0LCA0MTI2NiwgMCwgNjY1NjYsIAorICAgIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgOTgzNzM5LCAwLCAwLCAwLCA5MjUyNCwgNDEyNjYsIDAsIDY2NTY2LCAKICAgICAxMjg4MzYsIDEwNTg1LCA2NTc0MSwgNDE3MzcsIDk1NzQsIDI2NjYsIDAsIDQxNzM4LCA4MzEsIDQxOSwgMTMxMjYsIAogICAgIDEwNzE2LCAwLCA0MjgyMiwgMCwgNjQzNCwgMCwgNjkzOSwgNzc2NiwgNjQzMiwgMTI4MTA2LCA2OTkzMiwgOTE2LCA3NjksIAogICAgIDQxNzQyLCAxMTk2OCwgNzQ4MDUsIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgNDk5NCwgNDg3LCAKICAgICAxMjY1MzcsIDQ0OTcsIDM3NTQsIDEyNzA1NiwgMTIwNDI0LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgMTU5NSwgNDE2MTUsIAotICAgIDAsIDAsIDc0MjYwLCAwLCA0Mjg1NCwgNDMyMTksIDEyODcwOSwgOTgzNDUyLCAxMjE4NSwgMTI4ODc5LCA3MDA3MiwgCi0gICAgNjgzNTUsIDY4MzU3LCAwLCA0Mjg1NiwgODYzNCwgMCwgOTgzMzg5LCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgCi0gICAgNjU2MTIsIDEyNzU0MywgNjY5LCA1Njc5LCAwLCA2OTc4NiwgOTI1NDAsIDAsIDk4MzQ1NiwgNTY3OCwgMTE4MjEsIDAsIAotICAgIDY3MTEsIDQ2MCwgMCwgMCwgOTgzNDUzLCAwLCAxMjA3NDcsIDAsIDAsIDc4MDUwLCAxMTkwMjIsIDAsIDk4MzQ1NCwgMCwgCisgICAgMCwgMCwgNzQyNjAsIDAsIDQyODU0LCA0MzIxOSwgMTI4NzA5LCA5ODM0NjAsIDEyMTg1LCAxMjg4NzksIDcwMDcyLCAKKyAgICA2ODM1NSwgNjgzNTcsIDAsIDQyODU2LCA4NjM0LCAwLCA5ODMzOTcsIDQyMDksIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCAKKyAgICA2NTYxMiwgMTI3NTQzLCA2NjksIDU2NzksIDAsIDY5Nzg2LCA5MjU0MCwgMCwgOTgzNDY0LCA1Njc4LCAxMTgyMSwgMCwgCisgICAgNjcxMSwgNDYwLCAwLCAwLCA5ODM0NjEsIDAsIDEyMDc0NywgMCwgMCwgNzgwNTAsIDExOTAyMiwgMCwgOTgzNDYyLCAwLCAKICAgICA3NzgyLCA5MDQ0LCA0OTc0LCAxMTc2MCwgNzg0OTQsIDc1NzcsIDY1NzExLCA0MTkxMiwgMTIxNiwgMCwgMTI4MDc5LCAKLSAgICA1NzkyLCAwLCAwLCA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDAsIDU2ODMsIDk4MzM4NCwgMCwgNzgxMTksIDE1NDksIDAsIDAsIAorICAgIDU3OTIsIDAsIDAsIDc4NTAxLCAwLCAyOTMzLCAxMjI0NCwgMCwgNTY4MywgOTgzMzkyLCAwLCA3ODExOSwgMTU0OSwgMCwgMCwgCiAgICAgMTIwMzk4LCA1NjgyLCA2MjA2LCA4NjcwLCAxMDI1NiwgNTY4MCwgNjk5MzUsIDEwMDAxLCAxMjg1MTIsIDY5NzY4LCAxNDQ5LCAKICAgICAxMDI0MSwgNzgyOTAsIDEyODIyOCwgMCwgMTA1NTIsIDY0MzQyLCA0MTkyMiwgMTI4NTQ4LCA4NTg0LCA2ODAzMCwgNTU2NywgCi0gICAgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgOTgzMjQ4LCAxMjgwMjYsIDAsIDY1NzA4LCAKKyAgICAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCA5ODMyNTYsIDEyODAyNiwgMCwgNjU3MDgsIAogICAgIDY1NzA5LCA1NTY2LCA2OTgwMywgNjU3MDQsIDY1NzA1LCAxMTkwNCwgNDI4NzUsIDQzMzczLCA0MjUzOSwgNTk0MiwgODQ2OCwgCiAgICAgMTIwNTYxLCAxMDM2MSwgMTA0MjUsIDY1Njk3LCA2NTY5OCwgNjU2OTksIDAsIDY2NTk4LCAwLCA2NDY2NCwgMTA2NDcsIAogICAgIDc4NzAyLCA3ODcwMywgNzg2OTAsIDQ1NywgNzg1MDIsIDY1NzAxLCAxOTM0LCA0MzAwNiwgMTE5OTAzLCA4ODAyLCA3ODcxMCwgCkBAIC0xNzk1MCwxNCArMTc5NjksMTQgQEAKICAgICAxMTk1NzAsIDQyMjM5LCA4NTM2LCA3ODc0MCwgNzgzMjQsIDc4NzI2LCA3NDQzMiwgNzI0LCAwLCAxNDU1LCA3ODc0OSwgCiAgICAgNzE4MywgNjQ1ODMsIDc4NzQ3LCA2ODQ0MywgNDE3NSwgNzg3NDEsIDQzNjE0LCA2OTgwMSwgOTM5LCAwLCA0MzUyMCwgCiAgICAgNjg2MTMsIDc0NTY5LCA5MTc5NTgsIDAsIDc4NzYzLCA3ODc2NCwgNzg3NjAsIDEwNzg4LCA2MDg4LCA3ODc1OSwgNzg3NTUsIAotICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCA5ODMyMTEsIDkyMjYxLCA2MzcwLCAwLCA3ODI3LCAKKyAgICAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgMCwgNDQxNywgOTgzMjEzLCA5MjI2MSwgNjM3MCwgMCwgNzgyNywgCiAgICAgNjg0NDEsIDY5NjUsIDAsIDAsIDEzMjAxLCAxMjgyMDUsIDY5ODk2LCAwLCA3NDM4MiwgNzM3ODEsIDc5MTgsIDczOTg4LCAwLCAKLSAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzczLCAKKyAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzgxLCAKICAgICAwLCA3ODMyNywgMTIwNDA1LCA2NTY5MCwgMCwgMCwgMTE5MDU0LCAwLCA5MjUyLCA5MTc4ODksIDQ2NTIsIDY4MzcxLCAwLCAKICAgICAwLCAwLCAxMzA2NSwgOTkyMywgMTA4MDYsIDAsIDExNzYzLCA3MDAxNiwgMTIwNjg4LCA2NzIzLCA3ODE4NywgMCwgNjk5MywgCi0gICAgMCwgMCwgODMzMywgMCwgMCwgMTEzOTAsIDAsIDc0NDY0LCAwLCA5MjMyMCwgNzQwODAsIDk4MzMwNywgNjk5MTEsIDExOTEwLCAKKyAgICAwLCAwLCA4MzMzLCAwLCAwLCAxMTM5MCwgMCwgNzQ0NjQsIDAsIDkyMzIwLCA3NDA4MCwgOTgzMzE1LCA2OTkxMSwgMTE5MTAsIAogICAgIDkyNTU5LCA4Mjc4LCA4OTYzLCA0MDM0LCAxMjg1NjAsIDAsIDY1MzQ0LCAxMjA1MTcsIDQxNzQ3LCAwLCAwLCA4Njc3LCAwLCAKLSAgICAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCA5ODM3NDEsIDAsIDc0OTEsIAorICAgIDEyNzA3LCA5MzUwLCA2NjAzNywgMTI4MTgwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDk4Mzc1MCwgMCwgNzQ5MSwgCiAgICAgODg1NiwgNzEzNjEsIDAsIDQzMTUwLCAxMjc3NjgsIDEyMDQwNCwgNjUzODksIDEyMDQwMiwgMTIwNDAzLCAxMDgxMywgCiAgICAgMjU5MiwgMTI4NTMsIDQzMjY5LCA3MjYzLCAxMjAyNDQsIDY1MzYsIDEyMDIzOCwgMTIwMjM5LCA2NTUxNiwgMTIzMjEsIAogICAgIDEyMDM5MSwgMTIwMzg4LCA1NTI4NywgMTAwMDcsIDEyMDI0NiwgOTU4OCwgMTIwMjQ4LCAxNTk2LCAxMjAzODMsIDQxOTk0LCAKQEAgLTE3OTgyLDI3ICsxODAwMSwyNyBAQAogICAgIDExNiwgMTI5OTgsIDEyMiwgMTIxLCAxMjAsIDExMSwgMTEwLCAxMDksIDEwOCwgMTE1LCAxMTQsIDExMywgMTEyLCAxMDMsIAogICAgIDEwMiwgMTAxLCAxMDAsIDEwNywgMTA2LCAxMDUsIDEwNCwgNjQzNiwgNzM5NzQsIDUzNCwgNDEyMTIsIDc3OTMxLCAxNTM2LCAKICAgICA2NDA5MywgNzM5NzAsIDc3OTMwLCAxMjcxNTcsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIDEyMDM5NCwgCi0gICAgMTMyNjYsIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDk4MzI5OSwgODEzNCwgCi0gICAgMTI4MDI4LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCAwLCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCAKKyAgICAxMzI2NiwgMTI3ODEzLCAxMjcxMTEsIDAsIDczOTI2LCAwLCAxMDY0NSwgMTIxMiwgNjU0MywgOTgzMzA3LCA4MTM0LCAKKyAgICAxMjgwMjgsIDI5MTMsIDczODcwLCAxMjcxMTMsIDE4NjYsIDk4MzIyOSwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgCiAgICAgNjY1ODUsIDcxMjk3LCAzMTk2LCAwLCAwLCA1OTM1LCAxMjUwLCAxMjcwNjYsIDgxNzQsIDk3ODcsIDY3MzMsIDk4NTksIAogICAgIDc5MTYsIDk4NjEsIDk4NjAsIDUyNTgsIDE4ODIsIDE4OTIsIDY3MzEsIDEwODgyLCA0MDUsIDExNDU0LCA3MzkxMSwgMCwgCiAgICAgMTI4NzgxLCA0MTE2OSwgODkzOSwgNDEyNDUsIDAsIDQxMTcwLCAxNDU0LCAxMTM2OSwgNjQ3NywgMTIxNTcsIDAsIDAsIDAsIAotICAgIDQxMTcyLCA3ODU1LCAwLCAwLCAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCA5ODMzMDAsIDY0NSwgMTI2NjE2LCAKKyAgICA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgOTgzMzA4LCA2NDUsIDEyNjYxNiwgCiAgICAgNzYwOSwgNDA5NzMsIDY5OTQzLCA3MzgzMywgNjk5NDgsIDU4MjQsIDk4NCwgNzc5MTgsIDEwNjg4LCA1ODUxLCAwLCA3NzI5LCAKICAgICA3Mzk4MiwgMTIwNTE4LCAwLCAxOTUwODYsIDQzMzY5LCAwLCAxMjgxNDAsIDY4NDE1LCA5ODMwOTMsIDQ1MzgsIDEyMDQwNiwgCi0gICAgNDMxNDEsIDAsIDk4MzIwOCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCisgICAgNDMxNDEsIDAsIDk4MzIxMCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCiAgICAgOTgzMTU5LCAxMjk5NywgMCwgMCwgMCwgMCwgMjM4MSwgMTI4ODMsIDEwOTk0LCAxMDUyOSwgNDE5MDYsIDAsIDAsIDAsIAogICAgIDEyNDI1LCAxMDY2MSwgMTA4NTYsIDk2MTQsIDI0MjgsIDQxNDc4LCA4NTgyLCAxMDA2NCwgNzM5MzAsIDAsIDAsIDAsIAotICAgIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDkyMTgxLCA4NDU1LCAxMDA4MiwgMTE1NzUsIDk4MzQ4MiwgMTE5NTY2LCAwLCAxMjgwOCwgCisgICAgNjQ4OTYsIDExOTE2MiwgMTk1MiwgOTIxODEsIDg0NTUsIDEwMDgyLCAxMTU3NSwgOTgzNDkwLCAxMTk1NjYsIDAsIDEyODA4LCAKICAgICAxMjE4MywgNjE0NSwgMTE4OTU1LCA2NDkyOSwgOTI0MzMsIDAsIDk4MzE5MywgNDMxODYsIDQyNTA5LCAwLCAzOTIyLCAKICAgICA5MTg3LCA5ODM2MTQsIDAsIDEwMTkxLCAxMTkwNTcsIDExNzUyLCAzMzUzLCA5MzU4LCAwLCA3MTM2NiwgNjY2ODAsIAotICAgIDEyMDA5MCwgODI0OCwgNzkzMSwgODU1OCwgOTc5NSwgNjgzODAsIDk4MzI4OSwgMCwgMTIwMDgyLCAxMjAwODEsIDEyMDA4NCwgCisgICAgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgOTgzMjk3LCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCAKICAgICA0MTAyNywgMTIwMDg2LCAwLCAxMjAwODgsIDczNjYsIDcwMTksIDEyMDA3MywgMCwgMTE3NTEsIDEyMDA3OCwgNzgyOTQsIAogICAgIDY0NjU3LCA4NjU3LCAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgCiAgICAgNDMxNTQsIDQxMDI5LCAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDk0MDc3LCAxMTI5NCwgMCwgNjY2NjUsIDc4NTEsIDAsIAotICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NTUsIAorICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NjQsIAogICAgIDAsIDgwODgsIDAsIDc0MDEyLCA5MjUwMCwgMCwgNDQzOSwgNjkyNiwgOTgzMDQ3LCAxMjkyNCwgMTI4MjI3LCA0MjM2OSwgCi0gICAgNDM1MCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgOTgzMjc1LCAwLCAwLCAKKyAgICA0MzUwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIDAsIDExMjk2LCA5ODMyODMsIDAsIDAsIAogICAgIDY1ODI1LCA5NTc3LCA2ODE5OSwgMCwgNjQ2NzAsIDk4MzEyMSwgNzgwNTYsIDY3OTMsIDExMjk1LCAwLCA3ODA1MywgCiAgICAgNzM4NzIsIDAsIDAsIDEwOTAyLCAwLCAwLCA3ODA3MCwgNzgwNjgsIDEwNDcyLCAyOTk1LCAwLCAwLCA2NDY4MiwgMjM3MSwgCiAgICAgNzgwNjksIDEyMDgwOCwgMjU5LCAxMDA5LCA5MjE3MSwgMjQwMiwgMjMzMywgNjQ0MCwgMTk0NzQxLCAwLCA2NTEyNSwgCkBAIC0xODAxMCwxOSArMTgwMjksMTkgQEAKICAgICAxMjcwNzAsIDQxMjYxLCAxMTkzNjIsIDQzNjQwLCA4NjEzLCAwLCA5NDA0OSwgNjczNiwgMTk1MDkyLCA0MTQ5MiwgMTIwMDUsIAogICAgIDY5OTI3LCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCA3ODA3NiwgMTk0NzM4LCAKICAgICA3ODA3NywgNjk5MjgsIDAsIDc4ODAwLCA5MjY1MywgNjQ0NDUsIDQyNjY4LCA2NjM1LCAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgCi0gICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY0OSwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCisgICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY1OCwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCiAgICAgNzgwNDUsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAxMjcxNzcsIDEyNzgzNSwgNDk4NSwgMTMyODgsIAogICAgIDY3MiwgODA5OCwgNDMxOTYsIDE5NDc0NiwgOTgzMDk2LCAxMjgxMjYsIDQyNjU1LCA3NDA0MywgNjUwNzIsIDE1NzcsIAogICAgIDExNzcyLCAxMzA0MSwgNTkyOCwgNDUyNSwgMTA2NTgsIDY1OTExLCAxMjY2LCAxMDE4MCwgMCwgMTI4NTg0LCAxMjYyMiwgMCwgCiAgICAgMCwgMCwgMTk0NzE0LCAxMjcxMzksIDEzMzEwLCA3NzMsIDE5OTMzLCAxNTM5LCAwLCAxMjY5ODMsIDQyNzMxLCA2Nzk3MiwgCiAgICAgMCwgMCwgMCwgMzA1MSwgNTg2MiwgNzgyMywgOTI0NzgsIDAsIDEyMDQxMSwgMzI1MCwgNDM5OTEsIDY5Njg3LCA2NjY0OSwgCi0gICAgOTUxMCwgNjYyMzcsIDk4MzI5NCwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCisgICAgOTUxMCwgNjYyMzcsIDk4MzMwMiwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCiAgICAgOTE3OTY4LCA2NzI1LCAxMjgwMTMsIDkxNzk3MSwgOTIzMTQsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgODgyLCA2Njg2LCAKLSAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCA5ODMyOTgsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAorICAgIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDk4MzMwNiwgOTI2OTYsIDAsIDAsIDAsIDEyODUyMywgMzIyNSwgCiAgICAgOTE3OTk2LCA0NDMzLCA0MTE1NiwgNDM5NzMsIDQzMTczLCAxNDQzLCA0MzgxLCAwLCAwLCAxMDkyNiwgMTE3NTYsIDExNzU3LCAKICAgICA2NDg3OSwgOTE3OTQ5LCA5MTc5NTAsIDEyNzg0OCwgMTMyMjcsIDAsIDEwMDIxLCA1MTYwLCAxMzg3LCAwLCA5MTc5NTMsIAogICAgIDQxNDE4LCAwLCA2NTkxNCwgNjcyMSwgMjE3LCA5MTc5NTUsIDkxNzk2MCwgOTE3OTYxLCAxMDQ0MywgMTA3ODksIDQxMTU4LCAKLSAgICAxMTkyNTcsIDQyNzQsIDk4MzI5MiwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKKyAgICAxMTkyNTcsIDQyNzQsIDk4MzMwMCwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKICAgICAwLCA0MTI1MiwgNjY2ODIsIDAsIDExOTYzNywgNDEyNDksIDEzNjYsIDY0NjM1LCA2NTA0NywgMTI0NjYsIDAsIDAsIDQzOTcsIAogICAgIDEyODAzNywgMTI4MzM2LCA0MTI5NiwgOTU0NSwgNDEyOTEsIDEyODA0OSwgMCwgNDE0ODUsIDM1MTEsIDQxMjgyLCA1OTIzLCAKICAgICAxMDQwMCwgMCwgMTI4ODE4LCA3NjAsIDAsIDEyMDg4LCA1Nzg2LCAwLCA0MjI1NiwgMTE5ODY5LCAxMTk4NjAsIDQxNywgCkBAIC0xODAzMiwxNSArMTgwNTEsMTUgQEAKICAgICAxMTk1NzYsIDAsIDAsIDEzNzUsIDY2NzA1LCA0MzU3MywgNjUyNjAsIDQyMDYzLCAwLCA0MjgxMSwgMTAzMTIsIDY5ODQ1LCAKICAgICAxMjA3OTQsIDc4NDAsIDAsIDQzNjMwLCAxMDI1MiwgMCwgMTI4MTA0LCA0MzE4NSwgMCwgNDM5NiwgMCwgMTE5ODgwLCAKICAgICAxMDc2OSwgOTY3NiwgMTE5MDQxLCAwLCA5NzUzLCAwLCA4OTQ0LCAwLCAwLCAxMDQ3MywgMCwgMCwgNjA3MiwgNDMwMjUsIAotICAgIDEwMjk5LCAwLCAwLCAxMjA2MDgsIDY2MzI2LCA5ODM0MzksIDEyNzc5NCwgMCwgNDM4MTEsIDkzMzAsIDEyMDU5NiwgNzIyMiwgCi0gICAgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgOTgzNzczLCAxMzI4MSwgNjY1MTcsIDc4NjUsIDEwMDg3LCA3ODM0MywgMCwgCisgICAgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDk4MzQ0NywgMTI3Nzk0LCAwLCA0MzgxMSwgOTMzMCwgMTIwNTk2LCA3MjIyLCAKKyAgICAxMDI4MywgMTAzMTUsIDEwMzc5LCA0OTk2LCA5ODM3ODIsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCAKICAgICA3ODM0NywgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgNDMxODAsIDc3OTI4LCA3NDE0LCA3NzkyOSwgNDM5ODIsIAogICAgIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDQzNDA1LCAxNjAyLCAwLCAwLCA4NTIsIDAsIDEyMTYwLCAwLCAxMDIxMiwgCiAgICAgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAxMTAzNSwgMTA0MTEsIAogICAgIDkxNzk4OCwgMTAyNTUsIDY3MTAsIDEwMjc5LCA0MTk0LCAxMDM3NSwgNzM5MDAsIDAsIDQzMTUsIDEyNjQ0LCAxMjc1MTYsIAogICAgIDc3OTM3LCA0MzYzOSwgNDMzNDMsIDc4Nzc3LCA5MTc5OTgsIDExNTAxLCA0MTE3NywgMTI4Njg5LCAwLCA5MTc3OTIsIDAsIAogICAgIDkyNDEzLCA4NzE1LCAwLCA0MTE3OSwgMCwgNDMzMTMsIDAsIDQxMTc2LCAwLCA5OTQsIDAsIDg0NTIsIDEyNzEwMywgCi0gICAgNzM5NjYsIDAsIDAsIDU5MjEsIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDkyNTMxLCAxMjcxMDYsIAorICAgIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDc3OTQzLCA0MTg2LCA5MjUzMSwgMTE5OTY3LCAKICAgICAxMjcxMDUsIDY3MTgsIDAsIDQ0MDYsIDc0NjAxLCA4NDgwLCA5MTkyLCA5NzQ3LCAxMjY1MzAsIDQ0MTMsIDkyMTk2LCAKICAgICA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgOTI0NjksIDY5MjEsIDc4MDgxLCA3NDAwNywgNDI4NjksIDg0MTgsIDExNjgxLCAKICAgICA0MzE2OSwgMTAxNzYsIDAsIDc0MiwgMCwgMjg5MywgMTA3NzIsIDY1Mjc2LCA1OTM3LCAxOTE0LCAyNTUzLCAxMTY4MiwgCkBAIC0xODA2Myw3ICsxODA4Miw3IEBACiAgICAgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgMCwgNjU3NDIsIDEyODc0LCAxMTk1OTcsIDExNTkwLCAwLCA3NDA0OCwgCiAgICAgMTI4MzUwLCA4NTk1LCAwLCA5MTc5NDcsIDQzNzAzLCAxMzA5NywgMCwgNjQ2NDMsIDEzMjgzLCAxMjY5NywgMCwgMTIzODEsIAogICAgIDM0ODgsIDU5MzMsIDEwMDMzLCA3MzczOCwgNjYyNDEsIDY1NTcwLCAwLCAxMjI5NywgMTE5MTUzLCAxOTU1LCAwLCA1MzQ5LCAKLSAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjE5LCA3NjM4LCAKKyAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjIxLCA3NjM4LCAKICAgICA0MTY0MiwgNDI3NjQsIDAsIDQzMTA5LCA3NjM3LCA1NzUyLCA3NDAzNywgMCwgNzM4MzIsIDEyODgyNywgMTIwNjM1LCAKICAgICAxMjgyMzEsIDc4MzM0LCAwLCA3NjM2LCA2NTE3MSwgOTEyNCwgMCwgNzg4OTIsIDEyMDc5OCwgMjkxLCAwLCAwLCAyMDI3LCAKICAgICA2NjIzMCwgMTAwODAsIDc4MTM2LCAxMDQwMywgMCwgNDY0MCwgNjQ3MTMsIDEwMjI0LCAxMjA0MjksIDQyNTEyLCAxMjA0MzEsIApAQCAtMTgwNzUsMTcgKzE4MDk0LDE3IEBACiAgICAgNzgyNzAsIDEyNzk4MiwgOTgzMTcyLCA2NDcyOCwgMCwgNzg2NzMsIDc4Njc0LCAxNjU5LCA5MTksIDQyNzg0LCAxNjcxLCAKICAgICAxOTUwODksIDYwNjksIDkyMTksIDEyODU1OCwgMTY2MSwgMTMxMjAsIDYzNzg0LCA2OTgxOSwgMTAxNDAsIDk3MTMsIAogICAgIDExOTE0MywgMCwgMCwgOTQwNTAsIDIzMDYsIDEwNDg1LCAxMTg5NDMsIDYwNjgsIDEwNjEyLCAxOTUwOTksIDExOTU2NywgCi0gICAgMTk1MTAxLCA5MjU2MSwgNDE0NjIsIDEyMDQ3MCwgMTk1MDc5LCA1NDIyLCAxMjgyMzQsIDAsIDAsIDAsIDEwMjI5LCAKKyAgICAxOTUxMDEsIDkyNTYxLCA0MTQ2MiwgMTIwNDcwLCAxOTUwNzksIDU0MjIsIDEyODIzNCwgOTgzNjI5LCAwLCAwLCAxMDIyOSwgCiAgICAgMTA2MzUsIDgyNiwgMTI4MDgxLCAxOTUwODIsIDE5NTA4NSwgMTk1MDg0LCAxOTUwODcsIDY0ODMsIDkyMjExLCAxODA4LCAKICAgICA3ODQ4LCAwLCA4MTAwLCA3ODIyNywgNzg2NjksIDc4NjcwLCAxMzMwMSwgNzg2NjcsIDk2NjcsIDc4NjY1LCA3ODg3MiwgMCwgCiAgICAgMTEwMDMsIDk5MDQsIDAsIDAsIDEyMDY5MCwgOTE0NCwgMTA5MjEsIDAsIDc4NjgwLCA5ODQwLCA2NTEzMSwgNzg2NzgsIAogICAgIDc3ODQxLCAxMDMxMywgMCwgMCwgNjQzMjAsIDEwMjY1LCA3ODY4NiwgMTA5NjIsIDc4Njg0LCA0MzAwOCwgODk0NSwgCiAgICAgNzg2ODMsIDAsIDQxLCAxOTUwNzIsIDE3OTIsIDEyMDUxNSwgMTk1MDczLCA4NjU1LCAxOTUwNzUsIDkyNTQ0LCA3Nzk1MSwgCi0gICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMTI3ODA0LCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgOTgzNjk0LCAKKyAgICAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAxMjc4MDQsIDExOTA2OCwgMzEyNiwgMCwgNzQxMzYsIDEwOTU3LCA5ODM3MDMsIAogICAgIDQzMjU4LCAxMTkxMTYsIDEyNzg3MywgMTMxNTcsIDAsIDkxNzU0NCwgMzU3MCwgMCwgNzQ0MywgMCwgNDQwMDYsIDY5OTcsIAogICAgIDY4MDA0LCAxMjY2MzEsIDc4NzksIDg3MzksIDExMDc1LCAwLCA2NTIxNiwgMCwgNjk3OTUsIDI1OTMsIDg0NjMsIDc4MTAsIAogICAgIDkxNzg2MiwgNzgzOSwgMTE5OTEzLCA3ODgwNiwgMTE5OTEyLCA5NjkxLCA0NDExLCA3ODgwMiwgMCwgMCwgNDM0NDIsIAotICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4MCwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAorICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4OSwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAogICAgIDAsIDExOTkyMywgMTIzOTAsIDExOTE3MSwgMTYzNCwgNjgxMTUsIDAsIDExMDU2LCA5ODM1NzQsIDExOTkyNSwgMCwgCiAgICAgNDExNjUsIDExMzI4LCAxMjQ1MCwgMCwgNDExNjYsIDAsIDEyNDU2LCAxMTk5MTQsIDE3MSwgNTk0MSwgMTI0NTIsIAogICAgIDE5NDcwOSwgMTI0NTgsIDEyNTMxLCA3ODc3OSwgNDMwMTMsIDYzODAwLCA3NDE2MiwgMTI3NTY5LCAxMjA0ODMsIDk5NjksIApAQCAtMTgxMDAsNyArMTgxMTksNyBAQAogICAgIDEzMjQ0LCAxMjA0NjYsIDQyMTY3LCA3NDM1LCA3ODE5MywgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIAogICAgIDQzMTI2LCA3Nzk3MiwgMCwgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDEyODU0MywgCiAgICAgMTE3MiwgNjk3OTksIDY3ODYsIDQzNjAxLCAxMjA0NzYsIDc0MTI2LCA1NjAzLCAwLCA0NDczLCAwLCAxOTQ4MjMsIDAsIAotICAgIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDEyNzM4NCwgNTM0NywgNjk4MDIsIDk4MzYyMywgNzM4NjgsIDExODk0NCwgCisgICAgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMCwgMTI3Mzg0LCA1MzQ3LCA2OTgwMiwgOTgzNjMyLCA3Mzg2OCwgMTE4OTQ0LCAKICAgICAxMDU4OCwgMCwgMCwgNjM3NTUsIDAsIDUzNDMsIDc4NDIyLCAxMjA2NjEsIDQ1NTUsIDUzNDEsIDAsIDcwMDcxLCAxMjg2NzAsIAogICAgIDUzNTEsIDc4Njc1LCA0MzEwNCwgNjUyNDQsIDkxNzg5MiwgNjQ1NDEsIDQyNTE5LCA3NDQ3MiwgMCwgMCwgNzQ3NjUsIAogICAgIDkxNzg4OCwgMTI3NTEwLCA2NjM4LCAwLCA2NTExMywgMjcxLCA3NDE4MCwgNjUzNzAsIDg4MzUsIDY1MzY4LCAxMjY1MywgCkBAIC0xODExMCwxNCArMTgxMjksMTQgQEAKICAgICAwLCA0OTE2LCAwLCAzODAsIDEwOTU4LCA2NjU2MywgNzc5NTUsIDY5NzczLCA5NzczLCAxMzE2NywgMTI5MTgsIDQxMDk2LCAKICAgICA3Mzk4MCwgNjkyNDUsIDc4MjU0LCA5MTc4OTMsIDEwNjg0LCAwLCA5MTc4OTYsIDAsIDc5NDYsIDEyNTQxLCA4MTgyLCAKICAgICA2NzU4NiwgNjk3ODAsIDAsIDAsIDAsIDAsIDkwMDUsIDEyMjUsIDY2MzAsIDAsIDAsIDAsIDY4MDExLCA4ODQ3LCAwLCAKLSAgICA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDk4MzIwNiwgOTI2MDksIDAsIDAsIDMxMjcsIDI1OTUsIDY1NzEzLCA0MjAxMywgCi0gICAgOTgzODQ5LCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIAorICAgIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgOTgzMjA4LCA5MjYwOSwgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIDQyMDEzLCAKKyAgICA5ODM4NTgsIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIDQzNzUxLCA3NDIwMCwgNDk3MCwgODc2NCwgCiAgICAgMTIwNDU5LCA4OTM0LCA5MjcyNiwgNDE1NjYsIDQ0OTIsIDAsIDY1MDExLCA0MTA5MCwgMCwgMCwgMTE4OCwgNzI1NCwgCiAgICAgMTEwMCwgMCwgMTI4MzAxLCA0MTA4MSwgMjkxMiwgMTE3NDksIDY5NzkyLCAwLCA2ODAxOSwgMzU3MiwgMTAwMjMsIDQ5NTksIAotICAgIDEzMDc5LCAwLCA5ODMyNjgsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAotICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwMSwgOTcyLCAKLSAgICA0MTQ1MywgOTgzNDM0LCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MjYsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKLSAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQzMiwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAorICAgIDEzMDc5LCAwLCA5ODMyNzYsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAorICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwOSwgOTcyLCAKKyAgICA0MTQ1MywgOTgzNDQyLCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MzUsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKKyAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQ0MCwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAogICAgIDI2MSwgNTkyNywgNzc5MSwgMCwgNzM2MiwgMCwgMTA2OTYsIDAsIDYwNzMsIDk4MzgsIDExODkyMCwgMCwgNjA3NSwgCiAgICAgOTM5OTUsIDI4MiwgMTI2NTEwLCA2NDM3LCA3NDA3OCwgMTI4MDAwLCA5ODAxLCAwLCA3NDE3NywgMCwgMCwgMzQ3NCwgCiAgICAgMTE4Nzg3LCAwLCAxMjA2NTUsIDYwODEsIDAsIDc4ODc0LCA3NDA3NiwgNzg4NzksIDAsIDAsIDAsIDAsIDAsIDg3NTEsIApAQCAtMTgxMzgsNyArMTgxNTcsNyBAQAogICAgIDQ1NjQsIDAsIDAsIDc0MjcxLCA3Mzc1MywgODM3NCwgOTgzMTU2LCAwLCA2ODI5LCA1MjI1LCAxMjg4MDcsIDEyNzM4NSwgMCwgCiAgICAgMCwgMTE5NjE1LCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCA3NDA3NSwgMTI3MjM2LCAxMjgwMTksIDQyNjE0LCAKICAgICA1MzUzLCA1NjI1LCA3NDE3OSwgMCwgMCwgMTAxMCwgNjQ1NzIsIDQxNzgwLCA0MjYyMywgNjQyNzcsIDY5OTQyLCA2OTUyLCAKLSAgICA5ODMyNjQsIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIAorICAgIDk4MzI3MiwgMTIwNzUyLCA3ODc2MiwgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgCiAgICAgMTIwMDM4LCAxMjAwMjcsIDEyMDAyOCwgMTIwMDI1LCA1NjI4LCAxMjAwMzEsIDk3MCwgMTIwMDI5LCA0NzcyLCAyNDAwLCAKICAgICA1NjI3LCAxMjAwMTcsIDEyMDAxOCwgMTIwMDIzLCA2NDI3NSwgMTIwMDIxLCA4Nzg2LCAwLCAyMDMsIDAsIDAsIDAsIDAsIAogICAgIDc4MzUwLCAwLCA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgCkBAIC0xODE1MCw5ICsxODE2OSw5IEBACiAgICAgMTE2OCwgOTI1MSwgOTA4MiwgMTE5OTY0LCA2NDA1NSwgNDI3ODEsIDM4NjYsIDEyMzIzLCA0MTUxMiwgNzM4MDUsIDY4MTIxLCAKICAgICAwLCA0MTQ5NCwgOTIzMTYsIDQ2NjAsIDAsIDEwNDA1LCAwLCA3ODgwMywgMCwgMCwgNDIwNDAsIDczOTE4LCAxMTk2MjcsIAogICAgIDc5NDQsIDQxNDU0LCAxMjYwNSwgMCwgNDIyMDUsIDQxNDU1LCAyMzYsIDY0MDUxLCA3ODg2NywgODIxNCwgMCwgMCwgMCwgCi0gICAgNDE0NTcsIDk4Mzk2MSwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCisgICAgNDE0NTcsIDk4Mzk3MCwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCiAgICAgODc2NiwgMCwgNzgwNzksIDU4NTQsIDEyNzk3NCwgMTA1ODMsIDAsIDExOTk4OSwgMCwgMTA0MTYsIDkxNzg2OSwgMzg3MiwgCi0gICAgOTE3ODY4LCAwLCA4NDI5LCAwLCAxMTg4MDYsIDI4MzgsIDEyODgwMiwgMCwgOTE3ODY2LCAwLCAwLCAwLCA5ODM5NTgsIAorICAgIDkxNzg2OCwgMCwgODQyOSwgMCwgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgOTgzOTY3LCAKICAgICA5NDAwNSwgMTEwOTYsIDEyMDgxMywgMTA1NTMsIDE2NjIsIDg0ODMsIDEyMDM5NiwgNDM2MDUsIDU4OTIsIDQzNDE4LCAwLCAKICAgICA3Mzc0MiwgNjYsIDY1LCA2OCwgNjcsIDcwLCA2OSwgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIAogICAgIDgyLCA4MSwgODQsIDgzLCA4NiwgODUsIDg4LCA4NywgOTAsIDg5LCAxMTk4NjIsIDEwMzU3LCA3Mzg1LCA4MTcwLCAxNzA0LCAKQEAgLTE4MTY3LDcgKzE4MTg2LDcgQEAKICAgICAxMjQ3MiwgMCwgNjk4NjQsIDc2OTksIDEyMzkzLCAwLCAwLCAwLCA3NDUxOCwgODIyMywgMCwgNDI2MSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTI4MzAyLCAwLCAxMjgwNDYsIDQzNDE5LCAwLCA2NDU1NCwgMTA1NzQsIDM4NzgsIDAsIDQyMzUyLCAxNzUyLCAKICAgICA3Mzc4NSwgMCwgNDI1MDYsIDEyODU0MSwgMTAxOTksIDAsIDAsIDY4MDIxLCA2NTkxOSwgMCwgNjY5NSwgNzIwLCAzMjQsIDAsIAotICAgIDAsIDQzNDA2LCA5ODM3MjcsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA0MzQ3NCwgMCwgNjQ0ODgsIDAsIDAsIDY0MDQxLCAKKyAgICAwLCA0MzQwNiwgOTgzNzM2LCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCA2NDA0MSwgCiAgICAgNzQ3ODcsIDAsIDc4ODY1LCA5MjI1OCwgNjU1OTcsIDAsIDc4ODYzLCAwLCAxMzAyLCAwLCA3ODg2MSwgMTE5MTM0LCAwLCAwLCAKICAgICA1MjA0LCA3NDc3NCwgNDM0MDQsIDExODM1LCAwLCAzOTk1LCA2ODM2MCwgNjU2MDgsIDM3MTQsIDkyMTkwLCAwLCAwLCAKICAgICAxMDk5OSwgMTE3NTAsIDAsIDQzMjUxLCA2ODY2MCwgNDMzMDEsIDAsIDEyMDU1NywgODEzMCwgODY3MiwgMTA4NDUsIApAQCAtMTgxNzUsMjIgKzE4MTk0LDIyIEBACiAgICAgNjEyLCAwLCA2NDQwMSwgNjY0NDgsIDY4Mzc2LCAwLCAxNjc0LCAwLCA1ODIzLCA5ODMxNjMsIDEyMjgwLCAwLCA1NDAsIAogICAgIDc0NTY0LCAxMTkwMTcsIDAsIDg0MzIsIDAsIDExMDczLCAwLCA2NDMxNiwgMCwgMCwgODIwLCA0MTc0MSwgMCwgMTIwNjY3LCAKICAgICAwLCA2NDY4NCwgMTI2OTkyLCAzMzU5LCA3ODAwLCA2OTkzNCwgNjUxNzcsIDYyMjYsIDM1MywgMTIzOTYsIDAsIDExOTYxMiwgCi0gICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NDIsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCisgICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NTAsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCiAgICAgOTQ4MSwgNDI0MTgsIDcwMDU5LCA0MTE1NywgMCwgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCAKICAgICA0MTMyOCwgNDIzNDQsIDAsIDEyNDA5LCAwLCA0MzYwLCAxMjcwMDksIDk3MzksIDEyODU1MCwgNjk5MzMsIDczOTIxLCAwLCAKLSAgICA0MjUyMSwgODUzOSwgOTgzNzE2LCAwLCAxMTg5ODYsIDAsIDQ3ODgsIDAsIDY4MDIzLCA2NTczNCwgOTgzNDQ3LCA0Mzc5MCwgCisgICAgNDI1MjEsIDg1MzksIDk4MzcyNSwgMCwgMTE4OTg2LCAwLCA0Nzg4LCAwLCA2ODAyMywgNjU3MzQsIDk4MzQ1NSwgNDM3OTAsIAogICAgIDAsIDEzMDc1LCA3NDQyOSwgOTQwNjMsIDY0NTY5LCA0MzUzMiwgMTA4MzcsIDI0OTIsIDEyNzE5NywgMTE4OTAxLCA2ODYzNywgCiAgICAgNDExMzYsIDQzNzg1LCAxMTgxMywgOTY0OSwgNDExNTQsIDExOTYxNywgNTEyOCwgNDAzOCwgNDExNDMsIDY1NjA0LCAKICAgICA2NDg1OSwgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDkxNzgzNywgNjczNCwgNDEzNDMsIDExOTg0OCwgNjU0MzksIAogICAgIDEyNzA5LCA2OTg2LCA5MjM2NCwgNjgwMTUsIDAsIDQxMzQ5LCA3MDAyMSwgMTI1ODEsIDEwMzc0LCA1MTc1LCAwLCA3MzgwNiwgCiAgICAgMTAyNTQsIDAsIDEwMjc4LCAxMDI2MiwgNjk4NTgsIDQxMzQ2LCAwLCA2MDcsIDAsIDExOTg1MiwgMTI4ODQ2LCAxMjkyMywgCiAgICAgMTAzMTQsIDEwMjgyLCA2NTQ3NywgMTAzNzgsIDEyMDI5NywgNDA5NzYsIDgyNjUsIDAsIDExOTgzNCwgNDA5NzUsIDU4NDAsIAotICAgIDQyODM4LCAwLCA0MDk3OCwgOTgzODg4LCAxMTk4NDAsIDAsIDk4MzA3MSwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAKKyAgICA0MjgzOCwgMCwgNDA5NzgsIDk4Mzg5NywgMTE5ODQwLCAwLCA5ODMwNzEsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgCiAgICAgMTE5ODM2LCA2Nzc5LCAwLCAwLCAzNTI1LCA2ODI0LCAxMTg4ODYsIDAsIDAsIDU2MTksIDY1ODIyLCAxMjY1NjcsIAogICAgIDE5NDg4MiwgNzQ1NSwgMCwgNTYxNiwgMTE0ODYsIDk2NTYsIDAsIDAsIDEwNzI3LCA1NjE1LCAwLCAxMjA1NTEsIDQyMzgwLCAKICAgICA2NDg5NSwgNDM2OTMsIDY2NDUxLCA4MDgsIDU0NTUsIDExMzQ3LCAwLCAxMDI2LCA1NjIwLCAxOTQ4ODcsIDAsIDExMzUwLCAKICAgICA1NjE3LCAwLCA5MjI1LCA2NDYzOSwgMTI3MDczLCA5MTQ1LCAxMjgwNjAsIDEzMzgsIDEyMDU4MSwgOTgzMTU4LCAxMjczOSwgCi0gICAgNDYwMywgMzA4NCwgOTgzMTU1LCA5MjQ4NCwgOTg1OCwgNjAzNywgMCwgMzk3NCwgNzgyMTMsIDEwMjkwLCA5ODM2OTUsIAorICAgIDQ2MDMsIDMwODQsIDk4MzE1NSwgOTI0ODQsIDk4NTgsIDYwMzcsIDAsIDM5NzQsIDc4MjEzLCAxMDI5MCwgOTgzNzA0LCAKICAgICAzMDgzLCAxMDMyMiwgMCwgMCwgMCwgNDEwMzYsIDAsIDAsIDQzMzIxLCA2NTYwNiwgMCwgNDEwMzIsIDQyMzg4LCAwLCAKICAgICA2NDcwMCwgMTAwMTEsIDE0NDUsIDQwOTYxLCAwLCAxMTkxMDUsIDAsIDQwOTYwLCAwLCAxOTQ4OTEsIDAsIDQwOTYzLCAKICAgICA2NDk1MiwgMTA0MDIsIDAsIDAsIDkyMzA0LCAxMDYwMywgMCwgMCwgOTgzMTEzLCAwLCA2NzE0LCAxMDA4MywgMTI3MDY5LCAKQEAgLTE4MjAyLDkgKzE4MjIxLDkgQEAKICAgICA0MTk3NiwgOTcyMCwgOTE3NjA2LCAxMTc2NywgNDE5NzAsIDE5NDU5NiwgNTgzNiwgMTIzNTgsIDAsIDQzNTUsIDkwNDgsIAogICAgIDEyMTgwLCA2NTAyNywgNjQ2ODAsIDEzMDM4LCA0MzY5OSwgMCwgNDE0ODgsIDEyODA4NywgODUyNywgMTk0OTE3LCAxMjM2MiwgCiAgICAgMTI0MzUsIDEyMzYwLCA0MTA1MywgMzI2NiwgMCwgMTIzNTYsIDg2MTYsIDQxNDY2LCAwLCA5MjU4OCwgMTE0NTAsIDAsIAotICAgIDM2MzgsIDEyMzU0LCAwLCAzMjE2LCAwLCAyMzU4LCA5MjYwNiwgODYzMywgMCwgOTgzNzM2LCAxMTkxODIsIDY5MjQ0LCAwLCAKKyAgICAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgMjM1OCwgOTI2MDYsIDg2MzMsIDAsIDk4Mzc0NSwgMTE5MTgyLCA2OTI0NCwgMCwgCiAgICAgMCwgMTE3NTksIDE5NDkwMywgNjM2OCwgNzQ4MjMsIDAsIDQxNDIzLCA4MDc4LCAxMDUwNCwgMTI3NTU4LCA0MTY5OCwgCi0gICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY2OSwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCisgICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY3OCwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCiAgICAgMTA0NjYsIDEzMDk5LCAwLCAwLCAwLCA2NDM1LCAwLCAxMTM2MiwgMCwgMCwgNjUzODIsIDAsIDQxNDIwLCAwLCAzNjI1LCAKICAgICA3ODE1NywgNDE0MDksIDAsIDY5NjM5LCAyMDQxLCA5MTc4LCA5NjcyLCA0MTQyNywgNDM1NDEsIDQzMzE3LCAwLCAwLCAwLCAKICAgICA0MTQyNCwgOTE3NTk4LCAxMjA1NDYsIDAsIDEyODIxMiwgMCwgNDE0MTcsIDEyNjEsIDAsIDAsIDEyMTAyLCAxMTk2NjIsIApAQCAtMTgyMTQsOSArMTgyMzMsOSBAQAogICAgIDQxNDYxLCAxMjg4MjMsIDAsIDEyNzkxMiwgMCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgMjMyLCA3NDgzNSwgCiAgICAgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgMCwgMCwgMCwgOTA5NCwgMCwgMTE3NTgsIDY4NDI1LCAwLCAxMDY0LCA0MjQ2NywgCiAgICAgMTI4MDQ0LCAxMDExNSwgMTk5MjQsIDkyNzExLCAwLCA3ODYyLCA2NDU1MSwgMTMyMjQsIDg1MTYsIDQxODYyLCA2NjY1MCwgCi0gICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjEsIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCisgICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjksIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCiAgICAgMzc4NywgNDExNzQsIDAsIDQxNDU4LCAwLCA0MTQ2MywgNDI0MTMsIDExMjkyLCAyNDA2LCA3NzUsIDAsIDY1NTg0LCAKLSAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NDMsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKKyAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NTIsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKICAgICAxMjA2MDAsIDQxNDU2LCAwLCAxNTk5LCAxMTMzMywgMCwgNjcwMywgODUxMywgMCwgMTYxMywgMCwgNjg0NTYsIDEyNTk4LCAKICAgICA5ODMxOTEsIDEyMDczNCwgNzg3NDUsIDc0NTAwLCA0MTQ2MCwgMTAxNDUsIDEwNTQyLCA5OTM3LCA3ODc0NiwgNzAwMjksIAogICAgIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgNTUyNDYsIDEyMDM3NiwgMCwgMTE0OTcsIDY0Njg3LCAKQEAgLTE4MjM2LDIxICsxODI1NSwyMSBAQAogICAgIDQxMjg3LCA5MjYxMCwgMCwgMCwgNDIyMTksIDEyODI1NywgMCwgNDE5ODcsIDQxNjc2LCA5ODMwNTksIDEyMDgyMywgCiAgICAgOTgzMTQ0LCA0MTY3MCwgMCwgOTI1OTAsIDI3OTYsIDU1MjkxLCAxMTY4MywgOTkwMiwgNzQ1MjEsIDY3OTg4LCAxMTQ1MSwgCiAgICAgOTgzMTExLCAxMjg4MjIsIDQyNjMxLCAyMzU5LCAwLCA2Nzg0NCwgNzQxNjQsIDQxMjM4LCA1NDgsIDExNDA1LCAxMzEzMywgCi0gICAgNjQzNjgsIDk4MzIzMywgMTI4Nzk1LCAwLCAzOTcsIDQzNjIyLCA0MjEzOSwgOTU0NywgOTU5MCwgMTI4MjM4LCAxNjE0LCAKKyAgICA2NDM2OCwgOTgzMjM5LCAxMjg3OTUsIDAsIDM5NywgNDM2MjIsIDQyMTM5LCA5NTQ3LCA5NTkwLCAxMjgyMzgsIDE2MTQsIAogICAgIDQzNjYxLCA2NDM1NiwgNjYzMDcsIDY2NTEsIDEzNTgsIDAsIDQyOCwgOTYyMCwgMTQ2NiwgNzgxMTIsIDEwOTgyLCAKICAgICAxMTg4MzEsIDEzMzMsIDcxMDQsIDQwNywgNjQyNSwgMTI4ODM0LCA3NDI1MywgMCwgMCwgMCwgNTgwNCwgMTE5NzYsIDg1NTQsIAogICAgIDkyNzIxLCAwLCAwLCA5MDU3LCA0MjI5NCwgNDEyMTgsIDAsIDAsIDc4MTM3LCAxODgzLCAxMDk1MiwgODA0OCwgNzgxNDIsIAotICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY2NywgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAorICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY3NiwgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAogICAgIDg0NDgsIDcxNDEsIDc0MTgzLCAwLCAxMjY3NSwgMTI2NTksIDAsIDQyMzYzLCAxMjA2MjQsIDE5NDgyNCwgNTUyNzMsIAogICAgIDEwNzY2LCAxMjAxMiwgMjM4NiwgNjQ3MzIsIDkxNzAsIDkxNzgyMSwgOTEyMywgNjQ1ODUsIDEyMDUwMCwgMTE5MTU4LCAKICAgICA3MTQwLCAxMDk3NywgMTI3Mzc4LCA0MTY0LCA5MDgxLCAwLCAxMjA1NjksIDQyMDQ5LCA0MjA0MiwgODcwOSwgMTI4MjgzLCAKICAgICAxMjY0NzcsIDEyMDYzNywgNDI0MTksIDY0Nzk5LCA0MjA0NywgMCwgMCwgODQ3MCwgMTE4MDcsIDY1ODk3LCA1NzcsIDAsIAotICAgIDk4Mzc1MSwgNzQzMDAsIDAsIDEyNzMwOCwgNzQ4NDAsIDAsIDAsIDEyODc5MSwgOTIyMjQsIDg3MzYsIDE0MTQsIDQyNjQzLCAKKyAgICA5ODM3NjAsIDc0MzAwLCAwLCAxMjczMDgsIDc0ODQwLCAwLCAwLCAxMjg3OTEsIDkyMjI0LCA4NzM2LCAxNDE0LCA0MjY0MywgCiAgICAgOTY4MywgNDM0ODYsIDc0MzQ0LCAwLCAyNTM2LCAwLCA2NjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzMTcsIDY5OTQ1LCAKICAgICA2NjMxNSwgMjEwNiwgMTIwMjIyLCAxMTI3MywgMCwgNDMwMDQsIDc1NDEsIDAsIDAsIDk2MSwgNjQzMDcsIDY2MzI0LCAKICAgICA2NDkwNiwgMTI4NTkxLCAzMTA2LCA2NTkxNywgNDEyODQsIDE2OTYsIDAsIDg5MSwgMTIxMDUsIDAsIDQyNjI0LCAxMjgwMiwgCiAgICAgMzI2NCwgODgyNCwgMTMyNjgsIDQzMDAzLCAxMDkzNiwgMCwgMCwgMCwgMTk0ODI2LCA5MjY4OCwgMCwgMjMyMiwgMTIwMzcxLCAKLSAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTAsIDQzMjE2LCAKKyAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTgsIDQzMjE2LCAKICAgICA2MDg5LCA3ODY4MiwgMCwgMTIwNTc4LCA0MTcwLCAxMDI5LCAxMjc3NjEsIDEyNzAzNiwgMTE5MjI0LCA0MjM3NCwgMCwgCiAgICAgNzQ0LCAwLCAwLCAwLCA2NTgyMywgMTI3ODI2LCAwLCAzNTUxLCAwLCAwLCA0NjIzLCA1NTI2OCwgMCwgNDU5OCwgOTgzMTYyLCAKICAgICA2NTEzNiwgMTI3MTM2LCAwLCAwLCAxMDg1MSwgMCwgNjE3OSwgOTI2MDIsIDYxODAsIDAsIDExOTUyLCAxMjA3NzgsIApAQCAtMTgyNjAsMTAgKzE4Mjc5LDEwIEBACiAgICAgMjMwOCwgMCwgNzQxNDksIDAsIDIzMTgsIDk4MzE4MywgNjYzNjEsIDgxOTgsIDAsIDY0MzYwLCAxMjYwMSwgNDI1MzYsIAogICAgIDY1MjY2LCAxMjA4MjcsIDc0MzA3LCA5MjQ2MiwgNjk3MCwgNTQwNCwgNDMzMzIsIDM2NjcsIDc5MzYsIDEyOTI1LCAKICAgICAxMjY5ODksIDYzODUsIDAsIDAsIDExODk0OSwgMTA4NzQsIDY1NTA1LCAxMjgwODMsIDAsIDQyMDUzLCAyMDc1LCA0MjA1NywgCi0gICAgMTEwODMsIDQyMDUyLCAwLCAwLCA2NzY1MSwgMCwgOTY2NSwgOTIzMDAsIDk4MzY1NywgMTMxODEsIDAsIDAsIDAsIDcwMDg4LCAKLSAgICA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCA5NDA5NiwgOTgzOTM3LCAKKyAgICAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCA5MjMwMCwgOTgzNjY2LCAxMzE4MSwgMCwgMCwgMCwgNzAwODgsIAorICAgIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIDk0MDk2LCA5ODM5NDYsIAogICAgIDQxMTQ4LCA4NjgzLCA3NTk0LCAxMjc1MTksIDAsIDExOTA5MCwgMTA4NjksIDQzNDU4LCA0MTE0NiwgOTI0MDcsIDExNDQxLCAKLSAgICAwLCAzNTEyLCAxMTk2MzMsIDk4MzcwMCwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIAorICAgIDAsIDM1MTIsIDExOTYzMywgOTgzNzA5LCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgCiAgICAgNjk3NDIsIDQxNTQ0LCA2NTE0NiwgMCwgMCwgMCwgMCwgMTk5NDIsIDAsIDExODkwOCwgNzk4OCwgMTA0MzYsIDc0MjczLCAKICAgICAzMjcxLCA3MzgwNCwgNjQ3MTEsIDAsIDk0MDY0LCAwLCAwLCAzODA0LCAxMzA3MCwgMTE1NTcsIDQyMDQ0LCAwLCAxMDk1LCAKICAgICAwLCAzNTk5LCAxMjc3NzQsIDAsIDEyODg2MSwgODUxNCwgMCwgMCwgMCwgNzQzNDYsIDY2Njk3LCAwLCAxMTY4NCwgMCwgCkBAIC0xODI3MiwyMyArMTgyOTEsMjMgQEAKICAgICAwLCAxMjc3NzIsIDAsIDkxNzU0MiwgMCwgMCwgNjUzOSwgMCwgMCwgMCwgMTk0ODU2LCAwLCAxMjA0OTIsIDQxMTkwLCAKICAgICAzOTczLCAxMTkzNjUsIDQ1NzUsIDQxMTkzLCA3OTgyLCA0MjksIDAsIDEyNzE5NCwgMCwgMTk0ODU0LCA2NTc5MiwgMCwgCiAgICAgMTE4OTY4LCA2NDE3LCAxMTg5MTgsIDc4MTc4LCAwLCAxOTQ4NTAsIDAsIDAsIDQ5MTksIDEwNTkwLCAxMjg1NTYsIDc3NTUsIAotICAgIDAsIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgOTgzNjU5LCAKKyAgICAwLCAwLCA2NDU0OCwgMTIwNTA2LCAxNjIxLCAxMDIxNCwgNjUxMjYsIDAsIDEyNzAwNCwgMCwgMTIxODgsIDk4MzY2OCwgCiAgICAgMTYxNywgODA1MCwgMCwgNTAxNSwgMCwgMTE5MTc0LCA0MjU5MCwgMTk0ODcxLCAxNzU2LCA3ODE4MSwgMCwgNjU3NjgsIAogICAgIDYzNTIsIDQxODkyLCAwLCA3NTU1LCAxMzEwMywgNTQwOCwgMjgxNywgMTIxNCwgNjk5MTksIDkyMzM1LCA5ODMxMjUsIDAsIAogICAgIDAsIDAsIDEyNzE5NSwgNzk1NywgODY4OSwgNjQ3MjMsIDEwNTYsIDQyODk2LCA3NDE0NywgMTk0ODEzLCAwLCA1NTI4NiwgCi0gICAgNzA3MywgNjU4NTAsIDEyMzI3LCA5ODM5MzksIDExOTAyOCwgMCwgMCwgMCwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgCi0gICAgOTgzMjUyLCAwLCA3MDA3OSwgODQ2MSwgMTI4MTAyLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgCi0gICAgNzU3MSwgMTMwNzMsIDAsIDAsIDY4MSwgOTgzMjQ2LCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCA3MDA3NywgMTE3MDksIAorICAgIDcwNzMsIDY1ODUwLCAxMjMyNywgOTgzOTQ4LCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIAorICAgIDk4MzI2MCwgMCwgNzAwNzksIDg0NjEsIDEyODEwMiwgMTIxNTMsIDEyNzk5LCAwLCA0MzcwOSwgNDM3MDgsIDk0NTEsIAorICAgIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIDk4MzI1MiwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgNzAwNzcsIDExNzA5LCAKICAgICA5MjI4OCwgNzQ0NDYsIDAsIDkyNTMyLCAwLCAxMTMzOCwgMTIwNzY4LCAzMjc2LCAwLCAwLCA2NTkyOCwgMCwgMCwgNjUwMjEsIAogICAgIDY0Nzk1LCA3NDU3NCwgMCwgMTAwNDcsIDc4ODE0LCAzMjYyLCA3ODgxMSwgNDI3MTEsIDAsIDAsIDY4NDc4LCAxNjMsIDU3NiwgCiAgICAgOTg5NSwgMTY1NSwgNzg4MTcsIDc0NTkxLCA3ODgxNSwgNzg4MTYsIDk4MzEyMiwgMCwgMCwgMCwgMTAwMzksIDAsIAotICAgIDk4MzkzNiwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAorICAgIDk4Mzk0NSwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAogICAgIDY3ODQ4LCAwLCAwLCAwLCA4ODg3LCAxMjc1MjEsIDcyOTUsIDExMDMxLCAwLCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIAotICAgIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIDk4MzcwMiwgODgxMCwgNzQ0OTksIDY4NiwgCisgICAgMTA0MTIsIDg3NTUsIDAsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgMCwgOTgzNzExLCA4ODEwLCA3NDQ5OSwgNjg2LCAKICAgICAwLCA3MTM2MiwgNDYxOSwgMTE4OTU0LCA2NjU0LCA3Mzc2OSwgNzQ0MjYsIDAsIDEyMDQwLCA2NTY4OSwgMTAxMjgsIAotICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzYzOSwgMCwgNjU0NTUsIAorICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzY0OCwgMCwgNjU0NTUsIAogICAgIDAsIDkyMjQ2LCAwLCAxMTkxMjksIDAsIDEyODg2LCAxMjc5MjAsIDY2NjI0LCAwLCA0MzU1NywgMTAzMDAsIDEwMTYxLCAKLSAgICAxMDM5NiwgNzQxMzUsIDk4MzQ0NSwgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKKyAgICAxMDM5NiwgNzQxMzUsIDk4MzQ1MywgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKICAgICA0MTQ3NSwgMTI4NjcyLCA5Mzk3NSwgMCwgMTE0NzksIDAsIDEyMDM1NiwgNjM1MCwgMTI4NjQsIDY5Njc0LCA3ODExNCwgCiAgICAgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCA1NTIzMCwgMTI4Njg2LCA0MDUyLCAwLCA3NjI2LCAwLCAwLCAxMDQ1LCAwLCAKICAgICA1NjMxLCA0MTExMywgMCwgMCwgNDM3MDcsIDc0MTI3LCAwLCAwLCA4NDg2LCAwLCA3Mzc1OCwgMjMzNSwgNDM2MiwgCkBAIC0xODMwNCw4ICsxODMyMyw4IEBACiAgICAgOTIyNDUsIDQ0MCwgMCwgMTMwODUsIDkyMzMsIDc0MjE2LCAwLCAwLCA5OTU3LCAxMjgyODUsIDY2NDQ3LCA4MDQ2LCAKICAgICA2NDk2MywgNjU3NzcsIDEwMTI1LCA3NDIxMiwgNDI4MTksIDEwOTEwLCAwLCAxNTIxLCA5ODk2LCA5Mzk2NSwgMTA0ODcsIAogICAgIDY5ODc4LCAxMjUyNywgMCwgNzk3MCwgMCwgMTI4NjYwLCAwLCA2NTc2OSwgNTI0MywgOTg0OSwgNTIzOSwgNjU3NzEsIAotICAgIDk4MzIyOSwgMCwgNTIzNywgNjk3MTQsIDAsIDEwMTAzLCA1MjQ3LCA0NzY5LCAwLCAxMTg5NzcsIDEyODczLCAyMjgzLCAKLSAgICA5ODMyMzEsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCA1NTIzMSwgNDExMDMsIDAsIDY0NTY1LCA0NzczLCAwLCAKKyAgICA5ODMyMzUsIDAsIDUyMzcsIDY5NzE0LCAwLCAxMDEwMywgNTI0NywgNDc2OSwgMCwgMTE4OTc3LCAxMjg3MywgMjI4MywgCisgICAgOTgzMjM3LCAwLCAzMDA4LCA0ODk2LCAwLCAxMjA4NywgMCwgNTUyMzEsIDQxMTAzLCAwLCA2NDU2NSwgNDc3MywgMCwgCiAgICAgOTI3MTcsIDcwMDc0LCA0NzcwLCAwLCA5MTc1NjcsIDg3MzEsIDY1Mzc4LCAxMjczNjIsIDEyMDYxOSwgOTEyMiwgMTI4MDMzLCAKICAgICAxMjY2MDAsIDQ3NzQsIDMwMTksIDk5OTcsIDEyODM0LCAwLCA5NDU2LCAxMDIxNSwgMTIwNTQ3LCAwLCAwLCAwLCAwLCAKICAgICA3NDc3NiwgNDI4MSwgNDc2OCwgMCwgNDE1MzUsIDQwOTksIDkwMTcsIDAsIDAsIDc4MDk1LCAwLCA3ODA5NiwgMCwgMCwgMCwgCkBAIC0xODMxOSwxMCArMTgzMzgsMTAgQEAKICAgICA3NjM0LCA2NTE2NywgOTg0NSwgMCwgMCwgNTcwMSwgOTcyMiwgNDE0OTAsIDk4MzE1MywgMTQyNiwgNjgyMTcsIDAsIAogICAgIDY4NDQ3LCA0MjIwNCwgNTUyNzAsIDg1NzEsIDE5NDk5MSwgNzgwNjcsIDAsIDc4ODE4LCA5MjcxOSwgNDMxODIsIDEyMTg0LCAKICAgICAwLCA0MjAyMiwgMCwgMTAyODEsIDAsIDU2NTAsIDQzMTk0LCA2NDcxMiwgMTA3NDQsIDAsIDk5MCwgNTY0NywgMCwgNzM4NywgCi0gICAgNzg3MzQsIDQxMTE0LCAxMTQ3NywgNTY0NiwgMTI4NzksIDExMDE4LCA5ODM5MjEsIDM5NDUsIDkyNTg5LCAwLCAwLCAwLCAwLCAKKyAgICA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDk4MzkzMCwgMzk0NSwgOTI1ODksIDAsIDAsIDAsIDAsIAogICAgIDc4MjEyLCAxMjc3NDYsIDEwMjAsIDczNzYzLCAwLCA3ODczMSwgNTY0OCwgNjQ3NDgsIDE5NDkxMCwgNzg3MzMsIDEwMjA1LCAKLSAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NDYsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAotICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY1MywgMTE4ODM2LCA5ODM3MzksIDc4NDI3LCAxMTQwLCAKKyAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NTUsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAorICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY2MiwgMTE4ODM2LCA5ODM3NDgsIDc4NDI3LCAxMTQwLCAKICAgICA3ODQyNiwgMCwgMTAxNTksIDAsIDAsIDgxMjgsIDAsIDAsIDkxNzk2NSwgMTgxNSwgMTk5MTAsIDg5MCwgMCwgMzI2NywgCiAgICAgOTIyOTEsIDAsIDEwMTIzLCAwLCA0NDEwLCAxMDQxLCAxMDU3NiwgNjM1NCwgOTI1ODEsIDU4MCwgNzQyMzIsIDAsIAogICAgIDEyODM0NywgMCwgMCwgMCwgMTk5MzgsIDY1OTA2LCAxMjc4MTksIDAsIDAsIDMyOTgsIDUzNzUsIDEwMTQyLCAwLCA4MjE1LCAKQEAgLTE4MzMzLDE2ICsxODM1MiwxNiBAQAogICAgIDQxNTIxLCAxMTg5MzQsIDQ5NCwgMTMyNTAsIDAsIDY1MDk4LCA2MzY0LCA5NTYsIDAsIDEyODMwLCAxMDQ2MiwgNzM3NDAsIAogICAgIDczNzM0LCAwLCAwLCAwLCA2NjQ0OSwgMTMyNjMsIDc0MjgxLCA2OTIxNywgMTMxNzEsIDEyNzc5NiwgMCwgMCwgOTIyOTQsIAogICAgIDAsIDEwNDQsIDQxMjc2LCAwLCAwLCAwLCA0MjA2OCwgMTE3OTUsIDAsIDAsIDAsIDAsIDQyNDUwLCAzOTA3LCAwLCA2NDUyNiwgCi0gICAgMTE4MjksIDY4MTk3LCAxMjI5NSwgMCwgMTE0NzUsIDAsIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgOTgzNDQ2LCA3MDk4LCAwLCAKKyAgICAxMTgyOSwgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCA5ODM0NTQsIDcwOTgsIDAsIAogICAgIDAsIDEwNTcsIDU2NiwgNDI2OTYsIDAsIDMwMTYsIDQyMjc0LCA0MzQ2NCwgNjY0OTAsIDEyOTIxLCA2NjU3MSwgNzg0NzIsIAogICAgIDkyNTEwLCAzMDA2LCA0NjIwLCAxMjcyMzcsIDk4MzU3OCwgMCwgMCwgNjQ2NTksIDAsIDEyNzc0OSwgNTUyNTMsIDYzNTcsIAogICAgIDYzNjIsIDg2MjYsIDcxMzM3LCAyMjE2LCA5MDkwLCA2NTM3NywgNDE1OTYsIDAsIDQyOTIwLCAxNjk4LCAwLCA2NDQ3NywgMCwgCiAgICAgNDM4MTMsIDEwNTMsIDAsIDc4MjY5LCAwLCAxMjY1ODYsIDEwNTIsIDEwNTEsIDQ1OSwgMTA2MCwgNzQzNDksIDY2NDc5LCAwLCAKICAgICAwLCAwLCAwLCA0MjQ5MCwgNjg5LCA2NTA4LCA0MTYzLCA0MjI5OCwgODYzOSwgNjY2NDEsIDQyNDYsIDAsIDAsIDEyMTMwLCAKLSAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzU5LCAwLCAKKyAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzY4LCAwLCAKICAgICAwLCAxMjcyNzQsIDAsIDYzNTgsIDYzNjEsIDE5MjYsIDYzNTYsIDkyNjI3LCA3ODk4LCA4MTEwLCAxMDkzNSwgMCwgMTAwNjksIAotICAgIDU4MzAsIDAsIDQzNjg1LCAwLCAwLCAwLCAwLCA4NjkzLCA3ODYxMSwgMTE5NTY1LCA5ODM3OTksIDEyMDQxMywgMCwgCi0gICAgMTI3MjU3LCA2NTg5NCwgMCwgMCwgMCwgOTgzOTE0LCAwLCAwLCAxMTkxODcsIDIxMzUsIDc4ODY4LCAwLCAwLCA3ODg2OSwgCisgICAgNTgzMCwgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDk4MzgwOCwgMTIwNDEzLCAwLCAKKyAgICAxMjcyNTcsIDY1ODk0LCAwLCAwLCAwLCA5ODM5MjMsIDAsIDAsIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCAKICAgICA0MjMxMywgNTU3OSwgOTI0MTIsIDAsIDk4MzA4MiwgOTQwMDIsIDAsIDU1NzgsIDQxNzc0LCAxMjgxMTUsIDQyMDIzLCAKICAgICA2MjM0LCA1NjY5LCA5MjI3NSwgMCwgMCwgMCwgMTI3NTA2LCA2ODIwMiwgNTU4MywgMCwgMCwgNDI0MjYsIDU1ODAsIAogICAgIDQyMjc2LCAyOTIzLCA4OTIsIDIyMjAsIDQyNDY1LCA0MTMzMCwgMTk0OTg3LCA1Nzk1LCA2NTUxMiwgMTE5MDA2LCA2NTcwMiwgCkBAIC0xODM1Miw3ICsxODM3MSw3IEBACiAgICAgNjQ5MDAsIDcxNTMsIDYwOTUsIDQxODY1LCAwLCAzMDE1LCAxMjgwMjMsIDEyNjQ2NSwgNTIxMSwgOTgzMDgzLCA2NDAwLCAwLCAKICAgICAxOTQ5ODMsIDcwMDU0LCA4MTg5LCAxMTI3NiwgMCwgMCwgMzcyLCAxMjg4MjksIDAsIDExODg3NCwgNDIxMDIsIDQxNTg1LCAKICAgICAxMjgyMDIsIDAsIDQyMTAxLCAyNzYsIDc4NDAyLCAwLCAzMywgNzQyMjYsIDEyNzMwMywgOTAwNywgMTE4Nzk2LCA0MTU4OCwgCi0gICAgNjYwMzMsIDQyNywgMTA3NjMsIDExODgxOSwgMCwgMTI3ODg0LCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgOTgzOTcxLCAKKyAgICA2NjAzMywgNDI3LCAxMDc2MywgMTE4ODE5LCAwLCAxMjc4ODQsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCA5ODM5ODAsIAogICAgIDIzMjgsIDkyNDA5LCAxMDcxLCA0Mjg5OSwgMCwgNzQ4NDgsIDAsIDk4MzU4MCwgMCwgMTA0NywgMCwgMCwgNjQ3OTAsIDAsIAogICAgIDY5NzIzLCAxMDY1MSwgMCwgMCwgMCwgMCwgOTIyMDYsIDExOTE4MSwgNTcxMSwgNDE2MzMsIDEyMDk4LCA2NTU3MSwgOTE2NiwgCiAgICAgMCwgNTcxMCwgMCwgNjc5MCwgNjUxNjgsIDEzMjE2LCAwLCA2OTcxNiwgNjk3MjYsIDAsIDY0NjExLCA0MTYyMywgMTk1MDAxLCAKQEAgLTE4MzYxLDEyMCArMTgzODAsMTIwIEBACiAgICAgOTE5NiwgNjk2NzAsIDAsIDAsIDAsIDAsIDExODkxMSwgMCwgMCwgMCwgMCwgMCwgMTIwMDEwLCAwLCA4NzAxLCA2ODEzMCwgCiAgICAgMTE5NjE2LCAxMjA1MjIsIDAsIDQyNDc3LCAxOTQ5OTQsIDEyMTIzLCA0NDk1LCA0MzU2OSwgMCwgMCwgMCwgNjQ5NDYsIAogICAgIDEwOTkyLCAwLCAxMjAwMDksIDAsIDAsIDkzMTgsIDkzOTg2LCAxMzI0OSwgNjU2NzksIDczODA4LCAwLCA2NTQ1NywgCi0gICAgNDIyNDksIDc2MzksIDQzOTk1LCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgMTIwMDA1LCAwLCA5ODM5NTcsIAorICAgIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgOTgzOTY2LCAKICAgICA1MDg0LCAwLCAwLCAxMTg4NjEsIDAsIDczMywgOTE3ODc2LCA3ODAxNCwgNzg0MzYsIDc4NDM1LCA0MTY3NywgMCwgOTIxOCwgCi0gICAgMTczMSwgMCwgOTgzNzM3LCAwLCA2Nzk5MCwgMCwgMCwgMCwgMTIwMDAxLCAxMjcwMTgsIDkyNDkyLCA1MTU1LCAxMjAwMDAsIAotICAgIDUzNTgsIDk4MzczNSwgMCwgOTE3NzY3LCA2NDQyNCwgOTgzMjI1LCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDc4MzE1LCAKKyAgICAxNzMxLCAwLCA5ODM3NDYsIDAsIDY3OTkwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgOTI0OTIsIDUxNTUsIDEyMDAwMCwgCisgICAgNTM1OCwgOTgzNzQ0LCAwLCA5MTc3NjcsIDY0NDI0LCA5ODMyMzEsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgNzgzMTUsIAogICAgIDY4NDMwLCA2Nzk4MCwgNDMyNTMsIDY1OTQzLCAwLCAzMzcxLCAxMDk4OCwgMCwgODc3MSwgMTQ3OSwgMCwgMCwgMTEwOSwgCi0gICAgMTE1ODAsIDAsIDY0NjAxLCAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgNjc5NzgsIDc0ODQyLCA5ODMyNzYsIAotICAgIDk4MzcxMiwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgOTI1NzIsIDAsIDI1NDQsIDY1MDc0LCAKKyAgICAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCA2NDUwNywgODg2OCwgMzk5LCA2Nzk3OCwgNzQ4NDIsIDk4MzI4NCwgCisgICAgOTgzNzIxLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCA5MjU3MiwgMCwgMjU0NCwgNjUwNzQsIAogICAgIDExOTIxMSwgMCwgMCwgNzgwMTEsIDM1MSwgMTE5MTQ5LCAwLCAwLCA1NTIyOSwgMCwgNzQyNjgsIDAsIDAsIDAsIDQyMzc3LCAKLSAgICAwLCAwLCAwLCA5ODM5MTUsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgMCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAKKyAgICAwLCAwLCAwLCA5ODM5MjQsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgOTgzNjI4LCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIAogICAgIDI1NDksIDc0NDY5LCAwLCAwLCA1NTg0LCA4MzU4LCAwLCA2NDIxNSwgOTIyMTksIDEwOTE5LCAwLCA3OTgwLCAxMjY2MDEsIAotICAgIDk4Mzc3NSwgMjIxOCwgNDE4MDAsIDU1ODksIDAsIDI2NjQsIDQxNjEzLCA1NTg2LCAxMTg4OTAsIDAsIDExMzU2LCAwLCAwLCAKKyAgICA5ODM3ODQsIDIyMTgsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgCiAgICAgNDM0NTIsIDc4NjA5LCAwLCA0MjU3MywgNjc4NTYsIDAsIDc4MTI5LCAwLCAwLCA3NDM5MiwgODEzNSwgNjQ1MCwgMTAwNTUsIAogICAgIDc3OTk2LCAwLCAwLCAxMTkyMjUsIDU2NTcsIDAsIDk2MjYsIDAsIDc3OTk0LCAxMDE3OSwgNTY1NCwgMTI5MzksIDkyNTczLCAKICAgICAxMjA3OTksIDAsIDAsIDU2NTIsIDEwOTQ1LCAwLCA2NjQ4NiwgMCwgMzY2MSwgNzg2MywgMCwgMCwgMCwgNzQ1MDksIAotICAgIDk4Mzg0MywgNTY1OSwgMCwgNzg2OTIsIDY2NzI5LCA1NjU1LCAwLCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAxMjc3OTIsIAotICAgIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIDEwMzA0LCAKLSAgICAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4NzgsIDY0ODcwLCAwLCAzNDY3LCA5ODM4ODIsIDAsIAotICAgIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIDcwMDM2LCAKLSAgICA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MTcsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIDYzOTk0LCAKLSAgICAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzE1LCA2NDU1NiwgMCwgMCwgNTY2OCwgCi0gICAgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAxOTk1MiwgCi0gICAgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIDE0OTcsIAotICAgIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCA2Nzg5NiwgCi0gICAgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgNjU5MTIsIDAsIAotICAgIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIDk0MTA1LCAKLSAgICA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4Mzc5NywgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAxMjg4MzIsIAotICAgIDk4Mzg0MiwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIDEyNzI3MCwgCi0gICAgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgOTgzODAwLCAKLSAgICA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCA1NjM1LCAKLSAgICAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgMCwgMCwgCi0gICAgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY3NiwgNzgzMDAsIAotICAgIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIDExNzA1LCAKLSAgICA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAxMDU4LCAKLSAgICAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAwLCAKLSAgICA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIDY3NjIxLCAKLSAgICAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgNjU4MjYsIAotICAgIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIDY1Mzc2LCAKLSAgICAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgMTAwMzAsIDUzMDYsIAotICAgIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCA5NzEwLCAwLCAwLCAKLSAgICAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIDEyMTcxLCAxMTkyNDAsIAotICAgIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5MCwgMTMwOCwgMCwgMjUzNCwgCi0gICAgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCA3NDQ3MCwgNjY2MTgsIAotICAgIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgOTgzMTY3LCAyOTgwLCAKLSAgICA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIDkyMjc2LCA0NDAxMSwgCi0gICAgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCA5MzUsIDAsIDY1ODQwLCAKLSAgICAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIDQyMzQxLCA2NTI4NCwgCi0gICAgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgMTE5MjE3LCA3MjQ4LCAwLCAKLSAgICAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgNzgyMjYsIDEyODc3NSwgCi0gICAgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCA2NjU3NSwgNDU0MiwgCi0gICAgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIDk4MzkwOSwgCi0gICAgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCA5ODk4LCAKLSAgICA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc4NiwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgNDQwOSwgMCwgCi0gICAgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIDY1MjMxLCAKLSAgICA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIDAsIDU2ODUsIAotICAgIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCA0MzYzNSwgCi0gICAgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAxMDkzOCwgMCwgCi0gICAgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIDEwNzkwLCAKLSAgICAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkyOSwgMTEzNzYsIAotICAgIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCA3ODMwNSwgCi0gICAgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCA0MTg3MSwgCi0gICAgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgMTI3OTM3LCAwLCAKLSAgICA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgMTE5NDgsIAotICAgIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAxMDAzMSwgCi0gICAgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgMCwgCi0gICAgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkyNywgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKKyAgICA5ODM4NTIsIDU2NTksIDAsIDc4NjkyLCA2NjcyOSwgNTY1NSwgOTgzNjI2LCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAKKyAgICAxMjc3OTIsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIAorICAgIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4ODcsIDY0ODcwLCAwLCAzNDY3LCAKKyAgICA5ODM4OTEsIDAsIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIAorICAgIDcwMDM2LCA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MjYsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIAorICAgIDYzOTk0LCAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzI0LCA2NDU1NiwgMCwgMCwgCisgICAgNTY2OCwgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAKKyAgICAxOTk1MiwgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIAorICAgIDE0OTcsIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCAKKyAgICA2Nzg5NiwgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgCisgICAgNjU5MTIsIDAsIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIAorICAgIDk0MTA1LCA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4MzgwNiwgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAKKyAgICAxMjg4MzIsIDk4Mzg1MSwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIAorICAgIDEyNzI3MCwgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgCisgICAgOTgzODA5LCA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCAKKyAgICA1NjM1LCAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgCisgICAgMCwgMCwgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY4NSwgCisgICAgNzgzMDAsIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIAorICAgIDExNzA1LCA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAKKyAgICAxMDU4LCAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAKKyAgICAwLCA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIAorICAgIDY3NjIxLCAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgCisgICAgNjU4MjYsIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIAorICAgIDY1Mzc2LCAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgCisgICAgMTAwMzAsIDUzMDYsIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCAKKyAgICA5NzEwLCAwLCAwLCAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIAorICAgIDEyMTcxLCAxMTkyNDAsIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5OSwgCisgICAgMTMwOCwgMCwgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCAKKyAgICA3NDQ3MCwgNjY2MTgsIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgCisgICAgOTgzMTY3LCAyOTgwLCA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIAorICAgIDkyMjc2LCA0NDAxMSwgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCAKKyAgICA5MzUsIDAsIDY1ODQwLCAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIAorICAgIDQyMzQxLCA2NTI4NCwgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgCisgICAgMTE5MjE3LCA3MjQ4LCAwLCAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgCisgICAgNzgyMjYsIDEyODc3NSwgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCAKKyAgICA2NjU3NSwgNDU0MiwgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIAorICAgIDk4MzkxOCwgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCAKKyAgICA5ODk4LCA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc5NSwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgCisgICAgNDQwOSwgMCwgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIAorICAgIDY1MjMxLCA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIAorICAgIDAsIDU2ODUsIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCAKKyAgICA0MzYzNSwgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAKKyAgICAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIAorICAgIDEwNzkwLCAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkzOCwgCisgICAgMTEzNzYsIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCAKKyAgICA3ODMwNSwgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCAKKyAgICA0MTg3MSwgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgCisgICAgMTI3OTM3LCAwLCA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgCisgICAgMTE5NDgsIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAKKyAgICAxMDAzMSwgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgCisgICAgMCwgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkzNiwgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKICAgICA2ODYyNCwgMCwgODMyLCAxMjA2OTMsIDEyMDc3MCwgNzg0NzMsIDY2MDA3LCA3ODQ3MSwgNjU3MDMsIDAsIDAsIDQyNzMyLCAKICAgICA1MTgwLCA5MjY5OSwgNDEzOTUsIDQxNTMwLCAxMTY5MSwgNjQ3NzMsIDkyMjE0LCA3NDAwMiwgMCwgMCwgMTI4NjQ1LCAKLSAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MDQsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKKyAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MTMsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKICAgICA0MzY4NywgMCwgMCwgNDI4NSwgNjYxOTUsIDAsIDQyMzAsIDAsIDczNjcsIDQzMjU2LCA5MjM1MywgNzU2MywgNDIzNzYsIDAsIAogICAgIDY4NDQyLCAxMjA1MTIsIDAsIDAsIDIxNCwgMCwgMCwgNzg0NjYsIDY1ODkzLCAxMjIwOCwgOTk3MywgMCwgNjYzMTEsIAogICAgIDY1NTg5LCAxMjgyNzcsIDI2MDMsIDAsIDAsIDAsIDcwMDQ3LCAwLCA2MDIyLCAwLCAyODg0LCAwLCAxMTYyMCwgMCwgNDMsIAogICAgIDAsIDY2NDUzLCAxMDE2LCA0MTEwNywgMCwgNDExMjEsIDM4ODUsIDkyLCA2NTQ1NiwgNjQ2MDgsIDAsIDc0ODAxLCAwLCAKLSAgICAyMDc0LCAwLCA3ODI4MywgMCwgMTI0NTMsIDEyODEyOCwgOTgzODE3LCA3NDI0MSwgMTI2NTY4LCA2NzkxLCAxMjQ1NywgCisgICAgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAxMjgxMjgsIDk4MzgyNiwgNzQyNDEsIDEyNjU2OCwgNjc5MSwgMTI0NTcsIAogICAgIDc4MjY4LCAwLCAwLCAwLCA3ODI3OSwgMCwgMCwgOTIzNTgsIDY2NjM3LCA3OTk1LCA4NzU5LCA0MzQyMSwgNzgyNzcsIAogICAgIDEyNDQ5LCAxMjg1NTIsIDAsIDAsIDg3NTIsIDMxOTcsIDQ3MjAsIDEwMTY1LCAwLCAxMTkyNDksIDAsIDExNTk1LCA2NDg5MywgCiAgICAgMCwgNDM0MzUsIDAsIDAsIDQ5OTMsIDAsIDYxNjgsIDEwOTM0LCAxOTQ2LCA3NDEsIDAsIDU0OTQsIDQ2MzksIDk4MzE0NywgCiAgICAgMTk5MCwgNjY1ODksIDQ0OTgsIDc4NjY0LCAxMTkxODMsIDAsIDAsIDY5NzM0LCAyOTYwLCA3Mzc3OSwgMCwgODk2OSwgCiAgICAgMTI4MTE3LCA0MzQyNCwgMTI3MDU5LCAwLCAyOTUwLCAxMTk1NzksIDYyMTAsIDY1NzUzLCAzNzAsIDAsIDAsIDAsIDQ5NTMsIAotICAgIDk4MzY3MywgMCwgMCwgMCwgNjkyMzAsIDAsIDAsIDY1Njg4LCA5ODMyNDAsIDUwNjMsIDM1MTcsIDI5NjQsIDQzNjYzLCAKKyAgICA5ODM2ODIsIDAsIDAsIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgOTgzMjQ2LCA1MDYzLCAzNTE3LCAyOTY0LCA0MzY2MywgCiAgICAgOTE3NzYyLCA2MzQ0LCA3NDc5MSwgMTA1NjYsIDEwMTQ0LCA2NjMzMywgODI1MiwgNzI5LCA2NjAxNiwgNzgyNTMsIDAsIAogICAgIDcxMzE3LCA2NDkyMywgMTI4MDQwLCA0MzY2OSwgOTAzMiwgNzgyNjMsIDc4MjY0LCAwLCA0MTIxNSwgMCwgNjU4ODMsIDAsIAogICAgIDkxNzc3NCwgMTIwNjAyLCAzNzYxLCAwLCAwLCA3MDA2OCwgMCwgMTI5MTIsIDExOTAxMiwgMzg1MCwgMTI4MTkxLCAwLCAwLCAKICAgICAwLCAwLCA5MDgsIDAsIDg2MTEsIDAsIDAsIDEyNzU1NSwgNDM2OTEsIDQxMTk3LCAwLCA4OTc4LCAxMjA1NDAsIDExOTEzNSwgCiAgICAgNDE1ODYsIDEwNTI3LCAwLCA5MTc4NDgsIDM4NDgsIDc4NzM5LCAxOTQ5MzcsIDEyNzUzNiwgNjUyNDEsIDUzMzYsIAotICAgIDk4MzI1MSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjQ5LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAorICAgIDk4MzI1OSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjU3LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAogICAgIDAsIDAsIDc4Nzc1LCA2NDY3NSwgNDE1ODIsIDc4Nzc0LCA3ODc0NCwgNjU1NzksIDEyOTgwLCA3ODc2OSwgMTIxNDMsIAogICAgIDY5NjU3LCA3ODUxMiwgMCwgNDM0NDEsIDQxODA0LCA3ODUyMywgMCwgNzg1MjUsIDAsIDEyODg1OSwgNDE1ODQsIDEwNjgxLCAKLSAgICAwLCA5ODM2ODYsIDczOTM4LCAwLCAxMjgwMjIsIDQ4MDAsIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDc4NTM0LCA5NTE4LCAKLSAgICA2NjA5LCAxMDQzNCwgMCwgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgNDE3MzAsIDk4MzIxMiwgMCwgNzM4NDcsIDc4NzYxLCAKLSAgICA2NTE3MiwgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgOTE3NjEyLCAxMzExMCwgNDE3MjYsIDk4Mzg0NiwgMCwgCisgICAgMCwgOTgzNjk1LCA3MzkzOCwgMCwgMTI4MDIyLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgCisgICAgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCA5ODMyMTQsIDAsIDczODQ3LCA3ODc2MSwgCisgICAgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDkxNzYxMiwgMTMxMTAsIDQxNzI2LCA5ODM4NTUsIDAsIAogICAgIDEwMDAsIDY5NjUxLCAwLCA0MTE0MCwgMTIwOSwgNzM5NzgsIDAsIDczNzUwLCAxMDczLCA2MzIxLCA3Nzg3OCwgNDExMzgsIAogICAgIDAsIDY4MjEzLCAwLCAxMjE2NywgMTExNSwgNDE2MDUsIDk3OTQsIDEyNzA2MiwgNjc2NzEsIDU1MjQ4LCAxMjIzNywgCiAgICAgNzg3ODcsIDY2MzE0LCA2NTg3LCA5MjkwLCA3ODc4MiwgNzg3ODMsIDkyMzEsIDc4NzgxLCAyOTU5LCA3OTI2LCAwLCAwLCAwLCAKLSAgICA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgOTgzNzE4LCA3ODc5NiwgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIAorICAgIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCA5ODM3MjcsIDc4Nzk2LCA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgCiAgICAgNzg3OTMsIDY2NjcwLCAwLCAwLCAxMjI5MCwgMTIwMTY5LCAwLCAxMTk4NzMsIDQyMTQyLCA5OTY4LCA4MjA1LCAwLCA1MTMxLCAKLSAgICAwLCA5NjI3LCA3ODUzNiwgNzg1NDIsIDc4NTM1LCA5ODMyMTAsIDE5NDQsIDEyNDgsIDEwMTQ4LCAxMjc3NTUsIDExOTk5MCwgCisgICAgMCwgOTYyNywgNzg1MzYsIDc4NTQyLCA3ODUzNSwgOTgzMjEyLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIAogICAgIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIDY1MTAwLCAKICAgICA0MDMxLCA0Mjc5NCwgMTIwMDAzLCA3MDc1LCA4MTU0LCAxMTk5ODUsIDEyMDAwNywgNDE4MTcsIDczOTM0LCA0MjI3NSwgCiAgICAgMTIwMDExLCAxMjAwMTIsIDc4NTI2LCAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIDQzNjQsIAogICAgIDAsIDAsIDY0MzMyLCAwLCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA3ODQ1NSwgNzI3OSwgCi0gICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgOTgzMjcyLCAxMzAxMiwgNDU3MSwgMCwgMCwgMTIwMTY0LCAKKyAgICAxMjA0MSwgMTQxOCwgMTA4ODUsIDEyNjczLCAwLCAwLCA5NjYwLCA5ODMyODAsIDEzMDEyLCA0NTcxLCAwLCAwLCAxMjAxNjQsIAogICAgIDEyMDc4LCAyOTcwLCAwLCAxMDkzMywgMCwgNzc4NzAsIDAsIDEyNzAxNSwgMCwgNDE1OTksIDAsIDEyODgzMSwgMCwgCiAgICAgMTI5NTAsIDkyMTYwLCAzNDg2LCAwLCA3ODMxMSwgNDIzOSwgMCwgMTI3Nzk5LCA2NjUxMSwgMCwgMjYzNywgNjQ2MjksIAotICAgIDg0NjAsIDEyNzA1MywgODQ3NiwgOTgzOTY2LCAwLCAwLCAwLCA2NTY3MywgMTAxOSwgNzg0OTUsIDQxNDgsIDAsIDEyMjg5LCAKLSAgICAwLCA0MzE2LCAwLCAxMzExOSwgODQ4OCwgNTQxMiwgNjYyNDMsIDk5MzUsIDAsIDczODY0LCA5ODMyMDEsIDQxNzM0LCAKKyAgICA4NDYwLCAxMjcwNTMsIDg0NzYsIDk4Mzk3NSwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgCisgICAgMCwgNDMxNiwgMCwgMTMxMTksIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCAwLCA3Mzg2NCwgOTgzMjAzLCA0MTczNCwgCiAgICAgODIwNiwgNzQwODEsIDkxNjMsIDMyODYsIDkwNzIsIDU4NjcsIDEzMzAyLCA3NjIyLCA3MTIwLCA0MTczNiwgOTI1NDYsIAogICAgIDQxNzMxLCAwLCA3NDAwLCA1NDE2LCA2ODY2MywgMTE4OTI0LCAxMDgxNywgMCwgNDE1MzksIDEyNzI4NCwgMCwgNzM5NjMsIAogICAgIDQxODU1LCA0MTg2NywgNjU1NjQsIDExMjc3LCA2NTg5MiwgMTE1MzYsIDEwNjIwLCA5MjI3MiwgNzExNSwgNjYwMzAsIAogICAgIDczOTMyLCA1NDk4LCA3Mzk0MiwgNDE1MzYsIDAsIDY4MjA0LCA5MjU4NywgMzQ1OSwgODk5NywgMCwgMCwgMCwgMCwgCi0gICAgOTI1MTIsIDAsIDY2Mzc3LCA2OTc4MSwgMCwgOTgzNjkwLCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIDkyMjIzLCAKKyAgICA5MjUxMiwgMCwgNjYzNzcsIDY5NzgxLCAwLCA5ODM2OTksIDc4NTExLCAzMTYxLCAyOTUsIDEyMDIwNywgMCwgOTIyMjMsIAogICAgIDEyNzg1NiwgNzg3NDIsIDkwMTYsIDQzNDU0LCA2MzkwMywgNjM5MDIsIDQzNjQxLCAwLCAzOTcxLCAwLCA3MDA2MywgMjk1MiwgCiAgICAgNzg3NjUsIDExMDM4LCAxMDkwMSwgNjM5MDAsIDYzODk5LCA2Mzg5OCwgOTQwNDMsIDY2NywgMTIzMzIsIDYzODg3LCA2MDg2LCAKLSAgICA0MTcyMiwgMCwgNTE3MiwgMCwgMCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIDg1NTUsIAotICAgIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCisgICAgNDE3MjIsIDAsIDUxNzIsIDAsIDk4MzI3OCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIAorICAgIDg1NTUsIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCiAgICAgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgNDE5MTMsIDYzODUyLCAxMjY2MzYsIDAsIDQyMzQ4LCA3Mzg5MiwgCiAgICAgNjc1MiwgNDQ2LCA0MTkxMSwgMTI3OTA2LCA2Mzg1MSwgNjM4NTAsIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIAogICAgIDcyNjIsIDAsIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDEyODA3MCwgNjU3MCwgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIApAQCAtMTg0ODgsOCArMTg1MDcsOCBAQAogICAgIDc1ODMsIDc2NzksIDI5MDMsIDAsIDMwMDEsIDExNTgsIDg3NDUsIDQzNzQ2LCA3Mzc0OCwgNjM4NjYsIDc4NjI2LCAxOTE1LCAKICAgICA0ODQ2LCAwLCA2NjM3MSwgMTE4OTg0LCA0MjEwNSwgMjk5MCwgMTIwMTI4LCA4MDUsIDY5MjM4LCA2NDQzOCwgMTIwNzAsIAogICAgIDg3NjAsIDExMTcsIDExODk4NywgMTIyMTIsIDEyMDEyMywgNjUxNzQsIDQyMzU3LCA2MzgzNSwgNjM4MzQsIDAsIDc4MjQwLCAKLSAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NDQsIDk4Mzc5NSwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKLSAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzODk1LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKKyAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NTMsIDk4MzgwNCwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKKyAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzOTA0LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKICAgICAxMDY5MSwgNTYwLCA1NjQzLCA4MjI2LCAxMTk1NzgsIDYzODEyLCA2MzgxMSwgNjM4MTAsIDYzODA5LCAyMjg5LCA2MzgxNSwgCiAgICAgNjM4MTQsIDYzODEzLCA2MDQ3LCAxNTk3LCAxMjAxNDMsIDc4MCwgMjA2LCA3NzkyNSwgNDkzNiwgNjUxNDcsIDgxNjgsIAogICAgIDYzOTMwLCAyMDc2LCAxMDkzLCA5ODgyLCA2MzkzNCwgMjA4MiwgNjM5MzIsIDEyODE1MCwgNjM5MjksIDM1NDYsIDE2MDUsIApAQCAtMTg1MDcsMjYyICsxODUyNiwyNjIgQEAKICAgICA0MzY1OSwgMTI5NTEsIDEyMDYzOCwgOTkwNiwgMjA1NCwgMjMzNCwgNzg1MTUsIDYzOTE2LCA1NDgzLCA2MzkxNCwgNjk3MzcsIAogICAgIDYzOTExLCA1NDg0LCA2MzkwOSwgNjM5MDgsIDI1MzksIDAsIDQzOTgwLCA1NDg1LCAwLCA0MjY5NywgOTA2MSwgNTUzNCwgCiAgICAgMTA2NzIsIDQ1MDIsIDAsIDI1MywgMCwgNjgyMDgsIDAsIDkyMDMsIDc0MjMxLCAwLCAxMTUzMCwgOTI1NDIsIDY4NjY4LCAwLCAKLSAgICAxMTg5MDcsIDAsIDEwNDc0LCA0MzQyNiwgMTMyNTcsIDQyMzU0LCAxMjgwOTksIDk4MzY4OSwgNzAwNDQsIDE5NTA2NSwgMCwgCi0gICAgODQxMywgOTgzODA3LCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3NDM1MCwgMTk1MDYzLCAwLCAwLCAKLSAgICAwLCAxMjY2MzksIDAsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCA0MjkxMywgCi0gICAgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIDEyODM1MywgCi0gICAgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgMTMwNywgCi0gICAgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIDU0MTMsIAotICAgIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjI0LCA0NTE4LCAKLSAgICAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCA0MzA3MywgCi0gICAgNDE2OTAsIDEyNDc5LCA5ODM2MjYsIDAsIDAsIDk4MzgwOSwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDc5LCA5ODM3MjIsIAotICAgIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIDEzMDA0LCAKLSAgICAwLCA0NDU3LCAwLCAwLCAwLCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIDY4NDY0LCAxMjYzMywgCi0gICAgMTI4NzAsIDY5NzA1LCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIDc0MjUxLCAwLCAxMjA2NDcsIAotICAgIDAsIDUwLCAxMDU1OCwgOTg3MSwgNDI2MTIsIDQzNjU1LCAwLCAwLCAwLCA2NjQ2OCwgMCwgMTMyNTksIDQ0NDgsIDAsIAotICAgIDk4MzgzNiwgMCwgNzAwNDMsIDY3ODUzLCAwLCAxMDY0MCwgMTE1MzksIDExNTEsIDAsIDkxNzYwNywgMTI3NTQ0LCAKLSAgICAxMjcwNzksIDE5NTA1MCwgMTI3ODUyLCAwLCAwLCAwLCAxMjUwMSwgNjQ2MDQsIDAsIDExNTI3LCAxMTg4NzAsIDg4MTIsIDAsIAotICAgIDExNTM4LCA4NjczLCAxMjY1MCwgMTEwMjAsIDAsIDY2NDY3LCAyMTA1LCA4MDg3LCA3ODE2MywgNjk2MzIsIDk4OTQsIDAsIAotICAgIDAsIDAsIDQ2MzYsIDU1MjYyLCA3ODUxMywgNDUxNSwgMjM4MiwgMCwgMTI3MDU1LCAwLCAxMjA0OTUsIDAsIDEyODI4NCwgCi0gICAgMTIyNzcsIDE5NDYyNywgMTE5OTUsIDkyNTUzLCAwLCAxMjE1OCwgMCwgODc0MSwgMTAxOTcsIDAsIDkyNDI2LCAwLCA2NTMxLCAKLSAgICAwLCAxMjc4NDYsIDQ3MywgNDM0MTUsIDAsIDk4MzY0MSwgMTg3MywgMTA4NywgMCwgMCwgMCwgNzg1MjcsIDY2NDM5LCAKLSAgICA0MzIxOCwgOTgzMTIzLCAxOTQ3MTYsIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgOTgzNTcxLCAwLCA5NDg5LCAwLCAwLCAKLSAgICA0Mzg0LCA3NDIyMCwgNjM4NDUsIDIwNTgsIDEyODg2MywgMTMyOTUsIDQzMTkxLCAxMjgwMzAsIDAsIDExNTQsIDM4NTcsIAotICAgIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIDAsIDQ5NSwgCi0gICAgMTE5MDA3LCA0MTcxMiwgNzk4MywgMCwgOTM5OTcsIDAsIDYzNDcsIDEyMDE2NSwgNzY1NCwgNDE3MTAsIDQxOTYsIDAsIAotICAgIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMCwgMCwgNDk5OSwgCi0gICAgMTk0NjQyLCAwLCAxMjY1ODIsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDE5NDY0MywgNDE3ODksIAotICAgIDEyODE0MiwgMTA4MDksIDAsIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAxMzA1OCwgCi0gICAgMTIwNDQ5LCAxMjg3NSwgMCwgOTIxODYsIDEzMjI5LCAwLCAxMDU3NSwgNDMzOTksIDAsIDAsIDQxNzkxLCAxMTA0LCAwLCAwLCAKLSAgICAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCA2NTY5LCAwLCAwLCAwLCA2OTg0OSwgNjc4MywgMCwgCi0gICAgMTI5OTMsIDgwNDksIDQxNTQ4LCA0NDAyMSwgNjQ1OCwgOTgzNzk4LCAxMjg4ODIsIDQ3NjEsIDYzODI4LCA0NzY2LCAKLSAgICA2NDYyMywgMTI3MywgNDM0MDcsIDAsIDExODg3NiwgMTk1MDQ1LCA2OTEyLCAxMzEzLCA2MzIyLCAxMDQ4MywgOTgzNjAzLCAKLSAgICA0MTU0NSwgMCwgOTI0NDksIDAsIDAsIDAsIDAsIDc4NjI0LCAzNDg0LCA3NDMzNywgMCwgMCwgODUwMywgNTEyMiwgNDE1MjcsIAotICAgIDAsIDY2MzIwLCA5ODM4MDIsIDAsIDAsIDAsIDQxNTM3LCA2OTY4MywgODMwMywgODI4MiwgMTE4MTcsIDczODU3LCAxMDAwMywgCi0gICAgNzM4NTksIDY1OTA0LCA3MzYzLCAxNjg2LCAwLCA3ODQwNiwgMTE0NjcsIDM2NjQsIDY1OTIxLCA2NDI5OSwgMTk0NjY0LCAwLCAKLSAgICAwLCA0MzI0LCAxMjYsIDQyMjQ2LCAxMTkxNTIsIDAsIDc0Mzc4LCA2NTkyNiwgNzc0NCwgMTk0NjM2LCA3NDI3NywgNzQzMDIsIAotICAgIDc4MDUyLCA0MzgxNywgNjk2NiwgNDM4MjIsIDgxMzYsIDAsIDY1NjAwLCAxNjMzLCAwLCAwLCA0NzYyLCAxMTAzLCAwLCAwLCAKLSAgICA0NzY1LCA5ODM0ODQsIDEzMDc4LCAwLCA0NzYwLCA2MzgyNywgMjA1MCwgMTA4NzEsIDQzMTk5LCAxMTAyLCAwLCA0MjIzNiwgCi0gICAgMTI4ODY3LCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgODYyNywgMTIyNzksIDExMTEsIDAsIDkyMTYxLCAKLSAgICA0NzA3LCA2ODIwNiwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgODY0NSwgNTcwNCwgMTMwMTAsIDAsIDgzMDQsIAotICAgIDkxNzU2MSwgMCwgMTE5NTc1LCAyMjkzLCAwLCA2NjY1NCwgMCwgOTI2NzYsIDAsIDEzMDA4LCAwLCA0Mzg1LCAwLCAxMzAxMSwgCi0gICAgMCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIDY1NzYzLCA3NDIyMSwgMTIwMTQxLCAKLSAgICA0MTc5MiwgNDI3NzAsIDk0MDU0LCA2NTc2MiwgMTE4ODI5LCA0MzgyMSwgNTcwOSwgMCwgOTQwNTMsIDQzODE2LCAwLCAwLCAKLSAgICAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCA0Mzc5NywgNTcwNiwgNjQ3NjgsIDU3MDUsIDg3OTEsIDQwMDUsIDAsIDEwMjM3LCAKLSAgICAxMDk5MSwgMTI4ODE2LCA0MzQ1OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIDEzMTcwLCAxMjU0MCwgOTE3NTc3LCA0MjYwNSwgCi0gICAgMTIwNzY1LCAxMjY2MTcsIDY4NjQ3LCA5MTc1NzIsIDEwMDU4LCAwLCA3NDg2NywgMTk0NjU0LCAxMjcwNzgsIDMzMzksIAotICAgIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCA5MTc1ODcsIDkxNzU4NiwgOTE3NTg5LCAKLSAgICA5MTc1ODgsIDEyMDU0MSwgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIDkyMjI2LCAxMzI0NiwgODY0LCAwLCAKLSAgICAxMTg5MjYsIDg5NzIsIDAsIDc4NDksIDEyMDA5MiwgOTI1MzMsIDEzMjQwLCAxOTUwNjgsIDUxOTIsIDQzMzgsIDY3OTgyLCAKLSAgICAxMDk0OCwgOTE3NjAxLCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCA5Mzk5MywgMCwgCi0gICAgNzQ0MCwgMCwgMTIwMTUzLCA5NTUzLCAxNTkwLCA2Mzc3NywgNjM3NzYsIDEzMTc4LCA2Mzc4MiwgNjM3ODEsIDYzNzgwLCAKLSAgICA2Mzc3OSwgMTU4MywgMCwgMTMyNjAsIDQ1NTAsIDAsIDY0MjA1LCAwLCAwLCA0MTUyMiwgOTgzOTA2LCA5MjE2OCwgCi0gICAgOTgzNzYzLCA5MTc4NTgsIDExMzU0LCA5NDA3MSwgMCwgNDI3OTUsIDAsIDExOTE5NSwgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIAotICAgIDEzMjcyLCAxMzE5NCwgMTMzNCwgNjk5MjYsIDQ0NzksIDExNzgsIDY1NTg2LCAxMjA2NjMsIDY2NjgxLCAxMTkxOTMsIAotICAgIDQ2MDEsIDAsIDAsIDk4Mzc1NiwgMCwgMCwgMTk0NjU4LCAwLCA2ODA5LCA2Mzc4NiwgNjAzMSwgMCwgNjM3OTEsIDYzNzkwLCAKLSAgICAxMTQ1LCA2Mzc4OCwgNzkxMCwgNjM3ODUsIDQzMTUzLCA3NTQsIDEwMTkyLCAxMzEwNSwgODE4MywgMTIwNzQxLCAyMDM3LCAKLSAgICAwLCAwLCAxMDc0NywgMTI1LCAwLCA2NDg5MCwgMCwgOTgzMTMxLCAwLCA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIAotICAgIDEzMjU4LCA5NTM2LCA3NDA3NywgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgCi0gICAgMTM0OSwgNjM3NTAsIDYzNzQ5LCAwLCAwLCAwLCA2Mzc1MywgNjM4MDIsIDQxMDg0LCAxMjA2MjIsIDY4MTMzLCA0MTkzMCwgCi0gICAgNjM4MDUsIDYzODA0LCA0MzYzMiwgNjM4MDEsIDQxMDgyLCA4MTQwLCA2Mzc5OCwgNjI2MCwgMCwgMCwgOTQwNzQsIDYzNzkzLCAKLSAgICAxMTk4OCwgMzg5OCwgMTI4MjQxLCAxMDIwMSwgMTIyMzgsIDYzNzk1LCA0MjE5NCwgMTAzNjcsIDEyNTIxLCAxMDQzMSwgCi0gICAgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIDk4MzMyMSwgNDIyMDMsIDc5NTAsIDEwODA0LCA2Mzc3MSwgCi0gICAgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgMCwgMCwgNjM3NjksIDk1MzAsIDk4MzExOSwgMTIyMzIsIAotICAgIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIDc5MiwgMCwgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAKLSAgICAxMjg3OTYsIDYzNzQ0LCAxMjgxMDcsIDAsIDc1ODgsIDYzNzQ4LCAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDY4NDI2LCAKLSAgICA5MTc4NTMsIDEwOTAsIDEyMDY3OSwgMTI4MzU2LCAxMTY2NSwgNzQxMzMsIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCAKLSAgICA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgCi0gICAgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIDY0NDMzLCAwLCAwLCA5NDEsIDAsIDAsIDAsIDY1NTQxLCAKLSAgICAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDk0MDM5LCAwLCA5MjQ1NSwgNzM4NiwgMCwgNjQ0NDQsIDAsIAotICAgIDExOTg2MywgNDM2MDMsIDk0MDc1LCA2NTM5NywgMjg4LCAwLCAwLCAwLCAxMDAyNSwgNjk5MTUsIDI5MTgsIDAsIDY1MzAwLCAKLSAgICAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgMCwgMTI3ODI5LCA2NTM5MywgMCwgNzQxMzgsIDAsIDAsIAotICAgIDAsIDc0MTM5LCA5MjcxMiwgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAxMjgyLCAKLSAgICAxMjA3NzEsIDAsIDAsIDEwODg4LCA5ODM2MDQsIDY1MjQyLCAwLCAzMzMwLCAwLCAwLCA5ODM5NjUsIDAsIDAsIDc0MjU5LCAKLSAgICAzMzA0LCA0Mjc1MywgMCwgMCwgMCwgMTYyNywgMCwgMCwgMCwgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDExODc5NCwgMCwgCi0gICAgNDMwOTQsIDcwMDIzLCA0MzY1MCwgOTQwMzcsIDAsIDkwMzUsIDAsIDAsIDEyODAwNSwgMCwgOTIyMDcsIDY4MTI1LCAwLCAKLSAgICAxNjQsIDAsIDk0MDY3LCA5NDAwMCwgNjk1OCwgMCwgNDMxMTYsIDAsIDcwMDE5LCAxMzI0NSwgMCwgMCwgMTI3Mzc2LCAwLCAKLSAgICA3MDAzMSwgMTI3NzU2LCAxMjY2NiwgMTMxNzUsIDEzMjA3LCAxMjA0MTQsIDY2MDE0LCAxMjA0MjgsIDc0NDcsIDU5MjksIDAsIAotICAgIDY1NTA5LCAwLCA3NDQ5LCAxMTMwNiwgMCwgNzM5MjAsIDMxODAsIDAsIDYzODA4LCA5MDU0LCA5NzEsIDEzMDYyLCAwLCAwLCAKLSAgICA2NTE5NSwgMTAxNjQsIDkyMjUyLCA3NDQyOCwgMCwgNzgxNDYsIDkyNjExLCAwLCAwLCAwLCAxMDA0NSwgMTI4ODIsIAotICAgIDEzMjc1LCAxMjgxNjEsIDExMDU3LCAwLCAxMzI3NiwgMCwgNDE1MjUsIDc4MTUwLCA3MjcxLCAxMTQ0NCwgMCwgMCwgMCwgCi0gICAgMTIyMjksIDQxNTIzLCAwLCA0MzQxMSwgNzM3NTEsIDAsIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgCi0gICAgNjQ5NTgsIDAsIDAsIDczOTg5LCA2ODE5MiwgMCwgNjk4NDcsIDM2OSwgMCwgNDE3ODQsIDAsIDY0MTYzLCAwLCAwLCAwLCAKLSAgICA2NTQ3NCwgNDc5NiwgMTIyOTIsIDEyNjU5NSwgNjU0NzksIDAsIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDQzMDAyLCA5ODk5LCAKLSAgICAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCA1Nzg4LCA4MDkyLCA2ODIxMiwgNDEyMjIsIDE4MzEsIDY2MDIwLCAzOTgyLCAKLSAgICAwLCA0Mzg4LCAwLCA3NDYsIDEyMDc4NCwgMCwgMCwgMTIwMTgsIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAKLSAgICAzNzk5LCA3NDI5MiwgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIDQzNzQsIDAsIDEyODE3OSwgMTM2NCwgMCwgODAzOCwgCi0gICAgMCwgOTE3NTk3LCAxMjg2OCwgNjk4MTQsIDAsIDY3MzUsIDczOTc5LCAxMzE3NCwgNzM5NjgsIDEzMjI1LCAwLCA2OTgwOCwgCi0gICAgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIDQyODY2LCAwLCAwLCAwLCA2NjQzOCwgNDE3ODUsIAotICAgIDEyNjE3LCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgOTgzNTY4LCAwLCAwLCA5MjQwMiwgMTI4MDYyLCAxMjk2NSwgCi0gICAgMzg0LCA2NDUxMiwgMTA0MDQsIDEwMzQwLCAxMTkzNTIsIDE1NTYsIDUyNzQsIDEzMjEwLCAxMjAxMjUsIDEwMDE3LCA5NzMzLCAKLSAgICA0MTc4NywgOTgzMjM3LCAxMjY5OTQsIDQxMzczLCA3ODAzOSwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCAKLSAgICA0MTM3MSwgMTE2NTYsIDAsIDEyMDcwMywgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDEyODAxOCwgMTA5NiwgCi0gICAgMCwgMCwgNDI2ODgsIDEyNDQxLCAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCAwLCA4MDMyLCAxMzI0MywgCi0gICAgMTMyMzcsIDEyNzE5LCAxMjY2NDYsIDExOTEwMSwgMCwgNjQ4ODQsIDExOTg3MiwgMTE5MzQ1LCA4NTk3LCAwLCAwLCA5ODY0LCAKLSAgICAwLCAxMjA3ODUsIDExOTg3NCwgOTQxMDcsIDEzMTk1LCA0MTQ1MiwgNjQ5NjEsIDc3MjIsIDAsIDEwNDU5LCAxMTk4NzgsIDAsIAotICAgIDExOTg3OSwgNjY1OTAsIDEyODEyMywgNDE1MzMsIDY2MzM3LCAwLCA5MjE4NCwgMCwgNDk2NSwgNDM0NDUsIDkxNzUzNiwgCi0gICAgNzM4NDksIDAsIDQzNjM4LCA3ODUzNywgMTI4Mjg3LCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCA2NjU3MCwgMTk1NywgMTA0MjAsIAotICAgIDk4MiwgMjc1NiwgMTMyOTIsIDEzMjA2LCAxMjg4MjgsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgMTI3NTU5LCAxMzIxMiwgCi0gICAgNDMyMzgsIDAsIDEzMTkwLCAxMzE4NywgOTI1NDEsIDEzMTk4LCAxMTg3OTMsIDAsIDUyNDIsIDExOTE3OSwgNjQ0NzYsIAotICAgIDE2OTQsIDgyMTYsIDcxMzY5LCA2NzcwLCA0MzMzMSwgMCwgNjU2MjAsIDk4MzcxOSwgNDM1NDQsIDEyNjQ2NiwgMCwgCi0gICAgNDE0NDQsIDY1NjIxLCA2OTk1NSwgOTE5NywgNTI0NiwgMTE5MTA2LCAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIAotICAgIDEyMzE0LCA2NTYxNiwgNTIzOCwgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgCi0gICAgMTI4NTM3LCAzOTM2LCAxMTkzMzEsIDExNjk5LCA0MTM0NywgMTI3MjQ5LCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIAotICAgIDEzMjM5LCAxMjY5MiwgNzk2OSwgMTI3MjY2LCA3MjE5LCAxMjcyNTAsIDEyODI1MSwgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAKLSAgICAyOTc5LCAxMjAzMDMsIDY1NjE5LCA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCA2NjYzMSwgNDE0NzcsIDExOTI1NiwgCi0gICAgMTIwMzEwLCA3NDUxMSwgNDE3NzAsIDE2NzAsIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIAotICAgIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMTE1MDYsIDAsIDQyODQxLCAxMzI2NywgMCwgMCwgNDE3NzUsIDAsIDcxMzAsIAotICAgIDQxNzczLCAwLCAxMDY2MywgMCwgMCwgMCwgNjE1MSwgMTIxMTAsIDQyNjczLCA2NTU3MiwgNjUyOTMsIDY1MjUwLCAxMzI2NSwgCi0gICAgMTMyNjQsIDY0NTE4LCAwLCA2MTAwLCAwLCA5MjY0NywgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgNTYxMiwgCi0gICAgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAxMjY2MzcsIDExOTY1LCAwLCA2ODM1OCwgMCwgNjk3ODksIDAsIDkyMjYwLCAKLSAgICA2ODEwMiwgOTY5OCwgNzgxNCwgNzQ0NzYsIDExOTY1MSwgMTI4NTE0LCAwLCA0MTkyMSwgMTE4ODU4LCA5NzU2LCA2OTg1LCAKLSAgICAxMTkyNTgsIDc4NDkwLCA3NDIxOSwgMCwgMCwgMTE4OTk3LCA4MDEyLCA1Njc0LCAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIAotICAgIDU1ODgsIDAsIDQxOTI1LCAxMjgxMjQsIDQxOTIwLCA1NjczLCAxMjA1MzQsIDU2NzYsIDQxOTIzLCAxMjY5NCwgMTE4OTc4LCAKLSAgICA1NjcyLCAxMjk0LCAwLCA3ODA1OSwgMCwgNDI1MTEsIDE3MjcsIDEyMDcyNSwgNDI0MzYsIDAsIDAsIDAsIDc0MjIyLCAKLSAgICA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgNzQwOTAsIDU4MjYsIDU1MjMyLCA1ODEzLCAwLCAxMjA3MTIsIAotICAgIDU4NDEsIDU4MzcsIDU1MjM0LCAwLCAzMTA1LCAxMjgyOSwgNTgzOCwgNTc5NiwgMCwgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCAKLSAgICA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCA1OTgsIDAsIDY0NjQ5LCA1ODA2LCA0MjM5OCwgMCwgOTAzNywgCi0gICAgNTY3MSwgMTIwMDQxLCAwLCAwLCAwLCAxMjg4NTUsIDAsIDg0NywgMTI4MjQyLCA5NTI5LCAwLCA2NjY1NywgNjk4MCwgCi0gICAgNzg0ODMsIDEyMDAzNSwgNzg0ODQsIDk4MzQ4MywgMCwgMTIwMDMzLCA3ODQ4NiwgMCwgMCwgMTIwMDM5LCA0MjY4MywgMCwgCi0gICAgOTgzMDU1LCA3MTE0LCAwLCAwLCA0MzE5MCwgNjU0NjMsIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgCi0gICAgNjc5MiwgNDMyMDEsIDAsIDE5OTYzLCA1Njk4LCAwLCAwLCAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5NzI3LCAKLSAgICA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDEyMDAyMiwgMTAxNzUsIDEwMzg4LCA0Mjc5OSwgOTQxMDAsIDQxMDEzLCAKLSAgICAxMDU2OCwgMCwgOTgzNjE4LCAyODY5LCAwLCA0MTAxNSwgMTk0NjkyLCAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIAotICAgIDQyNjA4LCA3ODQ2OSwgOTg4NCwgNDc1OSwgMCwgMCwgMTAyNjYsIDQxMzU5LCAxMTcwLCA0MzM2NSwgNjk4MTAsIDczOTA4LCAKLSAgICAxNjA5LCA5MDIsIDAsIDYzOTM2LCAxMjg4NzUsIDExNjYxLCA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgCi0gICAgMjU1NCwgNTE1OCwgNTcxNCwgMjIxMywgMCwgMCwgODA3LCA0MzA3OSwgMCwgNzg0NzUsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIAotICAgIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgMTI2NjE0LCAwLCA4Njc2LCA5ODMyODMsIDAsIDU1ODIsIDQ1MSwgCi0gICAgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAxMjc4NTgsIDAsIDAsIDQzNjA5LCA1OTA2LCAxMjA1NTMsIDE0NDAsIDAsIAotICAgIDEyODg1MywgMTIwMDE2LCA3NDI4MywgMTEwMDUsIDAsIDY2NjU2LCA2NjA0NCwgMCwgMTk0Njk4LCAwLCAwLCA0MzM5MywgCi0gICAgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCA2NjQzNiwgNjU0NiwgOTMsIDgxMDIsIDAsIDY4NDA1LCAwLCAwLCAKLSAgICA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NCwgOTE3NTQzLCAzODMsIDcxNTQsIDQxNjU2LCA5MjYzNCwgOTQwNDAsIDAsIDUxODcsIAotICAgIDcxMjk2LCAxMjcyNzcsIDExMjg2LCA2ODYyMCwgNjQyMTcsIDAsIDUyMzIsIDAsIDQxMDA5LCAwLCA0MTAwNSwgMCwgMCwgCi0gICAgOTgzODE4LCA4MjkyLCAxOTUwNzQsIDQ5ODAsIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjUyOTEsIDcwNzYsIDEzMTgyLCAKLSAgICAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgNzk3MiwgMCwgNzg3ODUsIDAsIDc5MDAsIDAsIDExMzA5LCAzODA2LCAKLSAgICA0MTk4LCA0MjcyNSwgMCwgNjc2NTYsIDk5OTUsIDAsIDkyNTUyLCAwLCAxMjkzMSwgMCwgNDI2ODQsIDc0Mjg1LCAyMDg4LCAKLSAgICA2NDIxMywgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIDAsIDAsIDEyODM2LCAwLCAwLCA3NDM0MiwgODU5MywgCi0gICAgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCA2NTg2NSwgMCwgMTk0NjUwLCAxMjcxNDQsIDAsIDkzNDIsIAotICAgIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgNDEwMDcsIDc0Mzc1LCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAKLSAgICAxMTkxMzYsIDAsIDAsIDY5NzI0LCA0MDk5MiwgOTIyNjQsIDEyNzE1MywgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgCi0gICAgNzQxMDUsIDM2MzMsIDk4Mzg5MSwgNjUxNjIsIDQxMjM0LCAxMjA4OSwgNzgyODEsIDk3NzEsIDk4Mzg5NiwgMTMyNTEsIAotICAgIDEyODcwMSwgMCwgNjI2MiwgMjc4NCwgNDI3NDMsIDAsIDgxMjYsIDY2NDgzLCAwLCAwLCA0NDEsIDQyNjIxLCAwLCAwLCAKLSAgICA0MTAwMiwgNDA5OTksIDExOTYyMywgNDMyNjYsIDcxMDgsIDE5NDc3OSwgMTA4OTAsIDc0NDgxLCA2NTgzNCwgODMyNCwgCi0gICAgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDEyNzQ2NSwgNjQ3MzcsIDAsIDk4MzY1MCwgODkzMCwgNjY2NzgsIDc0MjQ5LCAxMTkzLCAKLSAgICAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCA3NzkwNCwgOTI2NDAsIDc3OTA1LCAKLSAgICA5MDM0LCA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIDAsIDAsIDAsIDQyODE1LCAwLCAKLSAgICA0MTk2NiwgMCwgMTI3NDcxLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCA5MTEsIDc1MzksIDAsIDAsIDEyMDMzOSwgNjUxNTksIAotICAgIDY0MzkwLCAwLCAwLCA1NTIwLCAxMTY2MiwgMCwgNjUzMzAsIDQyODEyLCAwLCAwLCAxMjMyNiwgOTgzODQ3LCAwLCA0MjgwOCwgCi0gICAgMTI4MzM3LCA5MzQ4LCA2NDkwMSwgOTgzODUyLCAwLCAwLCAwLCAwLCAwLCA5MTc1ODQsIDQzNzAyLCA5ODM1NzYsIDU4NTcsIAotICAgIDY1MzQyLCA5MjcyNywgMTE5MTIwLCAxMjAwNzksIDg2NDQsIDAsIDAsIDAsIDc0Mjk2LCA0MTkwOSwgMCwgMTIwMzMyLCAKLSAgICAyNzkxLCA2OTY2MywgMTg5MSwgNjk4MjQsIDAsIDQxOTA3LCA2NjY0NywgMTE4OTM5LCA4NzYxLCAxMjk0MiwgNTc0OCwgMCwgCi0gICAgMTA3NzMsIDAsIDAsIDg3OTYsIDc4MTQ5LCA2NDEyLCAyMDYxLCA4NTIwLCAxMzE0NiwgMTI3MTg1LCA2MzkzMSwgMCwgCi0gICAgNjU5MDIsIDI4ODIsIDAsIDAsIDEyODQzLCA0NTIwLCAxMjAzNDUsIDkyNDU5LCAwLCA5ODM2NTEsIDAsIDczODYwLCAwLCAwLCAKLSAgICA2NDM0NSwgMCwgOTIwMSwgMTI4MzE0LCAxOTQ5NDAsIDAsIDAsIDQzNjc5LCA5MTc1ODUsIDY1MTE3LCA5MjI3MCwgMCwgCi0gICAgMTA0MjcsIDAsIDM4NDQsIDEyMDY3NSwgOTc1NSwgMTExMCwgNjYxMiwgMTIyMjIsIDAsIDEyODc4OSwgMCwgMCwgNzgzLCAKLSAgICAxOTQ5MzUsIDAsIDAsIDk4MzA2NCwgMTk0NzIwLCA2NTA1NiwgMzYyMCwgNDExODAsIDY4Mzc4LCA0NTU2LCAwLCAwLCAKLSAgICAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAxMjc1MjcsIDkxNzcsIDg5MDIsIAotICAgIDkzOTU4LCA5ODM5LCAwLCAxMjg5MSwgOTgzNzQ2LCA5ODM2MjcsIDYzOTk5LCAyMDE2LCA0MTkxNywgOTc4OCwgNjM5MjgsIAotICAgIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCA2NjYyMywgOTc4NiwgNjUwODIsIDQxOTE5LCA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgCi0gICAgNjYwMTcsIDQ1MDgsIDY0ODgzLCA5MjQ1NiwgOTI1MjIsIDEyNzgxNCwgMCwgNjQ1OTIsIDc0Mjc2LCAxMjAwODAsIDY3ODQsIAotICAgIDc4Nzg4LCA2ODE4MSwgMCwgMCwgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIDY2NDcyLCA5ODM5MjAsIDY0Mjg5LCAKLSAgICA2NTI4OSwgNzgxNTEsIDY2NjU4LCAxOTQ5MjksIDY0NTA5LCA3ODE1MiwgMCwgMTI2NTA1LCAxMTA1MSwgOTgzMjg4LCAwLCAKLSAgICAxMTM1NSwgNjU4ODUsIDAsIDEyODMxMCwgNDEyMTQsIDAsIDEyMjk5LCAwLCA3NTAwLCA0NTA2LCA3NzczLCAwLCAwLCAKLSAgICA5OTYzLCA2ODY0OSwgMTI2NjA5LCA0MDQwLCAxMjA1NzAsIDYxNjcsIDAsIDYzOTIyLCA2NTk0LCA5ODM3MzEsIDAsIDAsIAotICAgIDM2MjQsIDQzMDM2LCAwLCA2Mzg3LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCA0MTk1NSwgMCwgNjM5OTMsIDEwNDQwLCA5NjExLCAKLSAgICA2NTYwNSwgNjgwMywgMCwgNzczOCwgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgOTI2NDEsIDM0MzUsIDc4MTY0LCA0MzgxNCwgCi0gICAgNDM4MTAsIDcwMjksIDY0MjU4LCA0MTI5MiwgMTE4ODk4LCAxMjc0OCwgNDI3NDIsIDk1MTcsIDExNTE4LCAwLCA3ODc5MCwgCi0gICAgMCwgNjc5OTMsIDYzOTU2LCA0MjQ1OCwgNjM5NTQsIDYzOTUzLCA2Mzk2MCwgOTU5MSwgNDUxNiwgMTAyMTcsIDY4MzcwLCAKLSAgICAxMTQ2OSwgNjk2OTcsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIDAsIDAsIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAKLSAgICAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIDAsIDY1NTUxLCA2ODIwNSwgNjYzMywgNDMzODcsIDAsIAotICAgIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIDAsIDEyNjQ3OSwgNDE1LCA2Mzk2NCwgNjM5NjMsIAotICAgIDQyMzQ1LCA5MjMxMCwgNTE4MywgMTg3NywgNDI0OTgsIDAsIDI5MjcsIDAsIDYzOTYxLCA0NDcyLCAwLCAwLCA3ODE1OSwgCi0gICAgNjk2OTksIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDEyODA3OCwgNzA4MSwgMTA3MzAsIDc2OTEsIDEwMzMxLCA2MzgzMCwgCi0gICAgMTE5NjI1LCA0MjkyMiwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAxNjA0LCA5NTY1LCAxMDUzOSwgNjk3MDEsIAotICAgIDY1NzY0LCA0MTQxNSwgNjU3NjcsIDAsIDg0NTcsIDQyMzAxLCAxMTM3MiwgNjQ4NzMsIDExOTkyLCAwLCAwLCA2Mzk4MCwgCi0gICAgMTE4MDEsIDM2MjIsIDk4MzEyNCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgNjM5ODEsIDQ5NjcsIDY0MTg5LCAxOTY2LCAKLSAgICA0MzYyOCwgMCwgOTgzMjg0LCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIAotICAgIDQwMiwgMCwgMTMxNDcsIDEyODY5MiwgNDIxMDAsIDY0NjQ2LCAxMzIyOCwgMCwgNDE4NzUsIDM1MTUsIDc0MjUyLCAxMTgwNSwgCi0gICAgMCwgMTEzMDIsIDYyNTksIDQzMzk1LCAwLCAwLCAxOTQ2NzAsIDAsIDkyMzUxLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIAotICAgIDkyMzU5LCA2NDk0MiwgOTgzNTU5LCAxOTQ3MzMsIDk4MzY3NywgMTk0NzMyLCAwLCA3NDMwMSwgMCwgMTEyODAsIDAsIAotICAgIDY5Nzg0LCA3NDA2MCwgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgNjUwMTgsIDY2NTE2LCA1NDA5LCAxMjczNzksIAotICAgIDE5NDY2OSwgNzQwMiwgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIDAsIDY2NjE2LCA2ODQyMSwgOTgzOTEwLCAwLCAKLSAgICA1NDA1LCAxMjc4NzUsIDY0ODY2LCAwLCAxMTk1ODMsIDEyODM0NSwgNzg3ODQsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCAKLSAgICA2NDY5MCwgMzI1NCwgMCwgMCwgMTI4MjA3LCA0MjM5MCwgNDM2NzgsIDE5NDcyNSwgOTgzOTAwLCA2NTA3NywgMCwgNjM4OCwgCi0gICAgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgMTE1MjAsIDU2MTEsIDAsIDMzNzcsIDAsIDAsIDAsIDAsIDc4MjI4LCAwLCAKLSAgICA5ODM3NTMsIDQyNjkxLCA5MTc4ODYsIDEyNzE5OCwgNzQ3NjcsIDAsIDEyNzA3NSwgMTM3OSwgMjQ2LCAwLCA5ODM3NTIsIAotICAgIDM3ODgsIDk4MzEwNiwgMTEwNDEsIDkyNTQ5LCA2NjMwNCwgMCwgMCwgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTgzNjg4LCAxMDY1NiwgMCwgNjUyMTQsIDExOTI0MiwgNDI1NjcsIDkyMjE3LCAxMzE2MywgOTgzMjAyLCAxMjA4MzEsIAotICAgIDc0NTk3LCAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgNjU4ODksIDQyMTY5LCA0NzU1LCA3NDI0NCwgMTk0NjIxLCAxMTQ0MywgMCwgCi0gICAgNjYzMTksIDc0NTk4LCA2MDgsIDYwMCwgMCwgMTIxOSwgMzkzNCwgNjQyMDYsIDExNDgzLCA3NDUxMCwgMCwgNzQ0ODUsIAotICAgIDQyNDQyLCA2NTQ3MCwgOTgzODk4LCA2NDIwMiwgMTMxNjAsIDc3NTksIDQyNDgyLCA0ODUsIDEyODAwNiwgMCwgOTgyOCwgMCwgCi0gICAgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCA0MjQzMSwgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAKLSAgICAxMTAwMiwgNDI0NzAsIDAsIDExODk0NiwgMCwgMCwgNzQwNDEsIDAsIDcwMDQ1LCA0MzUzOSwgNTQxMSwgNDIxOTYsIDAsIDAsIAotICAgIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCA5MzM3LCAxMjA1MiwgMTA2NDMsIDU1MjcxLCAKLSAgICA5ODMxNzksIDEyMTY2LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCA2NTYxMSwgMCwgMCwgMTk0NzU2LCA3NDMxMCwgCi0gICAgNjU1NCwgMCwgMTE5MTQsIDU0NTIsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgOTI1NjAsIDI3MTMsIDAsIDk2NTAsIDQzMzMwLCAKLSAgICAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDkyNjU5LCAwLCA2ODIyMywgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgNDE0MSwgCi0gICAgOTY4MiwgNjUyODcsIDE1MDgsIDEyNzAxMywgODc3OSwgMTA1NjksIDg3MjUsIDEzMjk5LCA2NjYzOCwgNjU3NTAsIDQyMjYzLCAKLSAgICA0MTQ1LCA2MzgwLCA2NTc1MSwgNjY2MTMsIDQzOTk0LCA2NTczOCwgNTUyNTAsIDkxODUsIDk1NTAsIDAsIDQzNDAzLCAwLCAKLSAgICAwLCAwLCA2NTczNiwgNDE5NTEsIDY0ODE2LCA2NTc1NiwgOTgzMjAzLCAxMjk1NSwgMTA1OTYsIDI4ODgsIDE5NDY0NSwgMCwgCi0gICAgMCwgOTY1NywgOTAxOSwgMTk0NzY2LCAwLCAyODc4LCA1MzkwLCAwLCAxOTQ5NjEsIDAsIDY4Njc5LCA0MzU1MiwgNzUwMSwgCi0gICAgNjMyOCwgMCwgMTA0MjksIDEwMzY1LCAwLCAwLCA0MTk0NiwgNzUwMywgNTIzNSwgODAzLCA2ODM4MSwgMCwgMCwgODk4NiwgCi0gICAgMTI2NTQyLCAxMDYzMiwgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAxMjY2NDcsIDAsIDExODg4NywgMTc5MSwgNTE5MSwgCi0gICAgOTI4OCwgNjQ4MjIsIDI4OTIsIDAsIDQzMzk0LCA1NTUsIDAsIDAsIDY2NjQ2LCAwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgCi0gICAgNzI4OSwgNzQwNTUsIDY0MTYxLCA4ODU0LCA2NDE2MiwgNTg1OCwgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAKLSAgICAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAxMjg4MTMsIDEzMTU4LCA5MjE2NiwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIAotICAgIDkxNzU1MywgNjgyOCwgMTYyNSwgOTIzMDIsIDAsIDEzNDIsIDY4NDQwLCA2NDE3MSwgMTI2NzA0LCAxMDkwMywgOTgzNDg2LCAKLSAgICAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMTI4NTY5LCA5ODMxMTIsIDAsIDY0MzgxLCAwLCAwLCAxOTUwOTAsIAotICAgIDQyMjQ1LCAxMjY0NjcsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCA2NjYxOSwgMTI2NDg5LCA3ODAyNSwgMCwgCi0gICAgMTEzNDksIDQwOTkxLCA5MTc1NzAsIDAsIDExOTU5OSwgMTIwODMwLCAwLCAxMTk3LCAxMjgyODIsIDExNDksIDE5NDk3MCwgCi0gICAgMCwgMCwgNDA5OTAsIDQzNzY1LCAwLCAzNDkyLCAwLCAxMjc5NDIsIDAsIDAsIDAsIDEyODM4LCA5ODM5NjksIDE5OTQ4LCAwLCAKLSAgICAzMDk5LCAwLCAwLCA0MTA4NywgMCwgMCwgMCwgMTE5MDU5LCAxMjAzNiwgNDEzMDksIDAsIDAsIDgxNTIsIDAsIDQxNTUwLCAKLSAgICAxMjIyNywgOTgzNjEzLCAwLCAxMjgyOCwgMTI3NTExLCAwLCAwLCAxMjA3MDgsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIAotICAgIDkyNjgwLCA5ODM3ODAsIDY4MTU0LCAwLCAxNzQzLCAwLCAwLCA5MjIzOSwgNjUxODYsIDkxNzU3MSwgMCwgOTYwNiwgMCwgMCwgCi0gICAgNjQ0MzksIDAsIDAsIDkyNjg2LCAwLCAwLCAxOTQ5NjcsIDAsIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCA3ODM2MiwgCi0gICAgNjQ4MzAsIDAsIDEyNjU1NywgNDEwOTEsIDM0MjYsIDEzNDQsIDg4NzAsIDAsIDAsIDQ3MzUsIDEyNzAxNywgNjExOSwgCi0gICAgMTI4MjIsIDQyNjk5LCAwLCA5ODM4MTUsIDc0ODE4LCAxNDIzLCAwLCA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAxMDU1OSwgCi0gICAgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgMCwgNzE3MCwgOTU5NiwgNjEzMCwgMTI4ODI2LCA0MzYyOSwgMTE1NzksIAotICAgIDc4NzEzLCAwLCAxOTQ3NDAsIDEyODY5MSwgOTIxODUsIDY2Njk5LCA2NDQ0MCwgMTAwNCwgOTI1ODQsIDE5NDczNywgCi0gICAgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgNjg0MTQsIDAsIDQzNjE5LCA0MzMwMywgMTEzMDAsIDQzMzA0LCA5Njg2LCA1ODkwLCAKLSAgICAxMTc3NiwgNzU1OCwgMTI3MTU4LCA2NTYyNywgMCwgMTA3MTgsIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCAwLCAwLCAwLCAKLSAgICA2NTM2NSwgNzM4NzcsIDY1NjI4LCA3ODAxOSwgMTIwMzE5LCAwLCA0MTcwOCwgMTI4NjAsIDI2NDEsIDEyMDY5LCAxMDgzOCwgCi0gICAgNTQwMywgMTAzNTIsIDcwMDg1LCAxMDA2MSwgNDMyMzcsIDAsIDUxNDAsIDIwOSwgMTI4ODQ3LCA0MTcwNCwgNDEwNTYsIAotICAgIDQzMDc4LCAxMjgxMjUsIDExODgwOSwgMCwgMTA4OTksIDY1NDY5LCA5MjM2MiwgMCwgMCwgMjQxMCwgOTkzLCAwLCAKLSAgICAxMjA1ODksIDEyMDY4OSwgNzg2OTMsIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgMCwgNzExMCwgNzQ0NjIsIDIwNjYsIAotICAgIDEwNDg5LCA0MjE2NiwgNDM0NjMsIDEwNjU5LCAzNjAwLCAwLCA0MjI0LCAxMzM2LCA0MTUxOCwgMCwgMCwgMCwgMCwgCi0gICAgNDExMzksIDY0ODIwLCA5MjUzOCwgMTI5NjYsIDQxMTM0LCAwLCAwLCAwLCAwLCAyNzIsIDQyNjMsIDg3OTMsIDAsIDAsIAotICAgIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIDU4ODgsIDQxMzU4LCA2NDg2MywgCi0gICAgOTU0NCwgNDM0ODEsIDAsIDE5NDgwNiwgNzAwMjcsIDIwOTksIDUxMjAsIDI0MDksIDc3OTksIDAsIDc0NDI0LCAwLCAwLCAKLSAgICA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgMCwgOTkxMywgMCwgMCwgNjQ5MTQsIDkxNzc4NywgCi0gICAgNjUxMDEsIDAsIDExNjk0LCA5MjQ3NSwgMTE2OTAsIDU4MzUsIDEyNzE2NCwgNjY2MjUsIDEwODQyLCA0MTM1NCwgNDIxMjMsIAotICAgIDQzMDk3LCAxMTY4OCwgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIDAsIDk5NzIsIDczODY1LCA0NTE5LCAKLSAgICA2MTE0LCAxMDg5OCwgNDMwNzIsIDAsIDAsIDkzOTYwLCA5ODMzMTQsIDEyNjU4MSwgMTA2OTUsIDAsIDc1NDAsIDAsIDg4MSwgCi0gICAgNzg1NywgNjA2NywgNjUxNjQsIDAsIDAsIDAsIDEzMzExLCA2ODQwMywgNDE4NTcsIDY0MzIxLCA4MzU5LCAwLCAxMjY4OSwgCi0gICAgMCwgMTk0NTk0LCAwLCA5ODMzMDQsIDk4Mzg3MiwgNjgxODMsIDAsIDk4MzMwNiwgMTI4NywgNTQzNiwgMCwgOTgzMzA5LCAKLSAgICA3NDE0MiwgOTIzMjgsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCA2OTY2OCwgODk4NSwgMTIxMDksIDk4MzMxNSwgMCwgCi0gICAgMTI3MjQyLCAwLCAwLCAzNjUyLCAxMDUzNywgMCwgMTI3NiwgMTIwNDQwLCA2NTQ5LCAyNzksIDczNzQ1LCAwLCAwLCAwLCAKLSAgICAxNDg5LCAwLCAwLCAwLCAzODk5LCAxMDA3LCA0MjEyNCwgOTgzNTU3LCA0MjEyMiwgOTIzMzcsIDkyMzY3LCAwLCAxMTk4NSwgCi0gICAgMTM0NSwgNzg2MDAsIDAsIDAsIDg5NTYsIDQzMDgzLCA5NDA1NywgNDIxMzgsIDc4NjEwLCAwLCAxMjE1MSwgNzg2MDgsIAotICAgIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIDc4NjEyLCA3ODYxMywgNjU5NDIsIDQ5MiwgODY4NSwgMCwgOTgzNzUwLCAwLCAKLSAgICA3ODYyMiwgNDM3MTIsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgNzg2MTUsIDc4NjE2LCAyMjk3LCAwLCA3MzgzNywgCi0gICAgMTE5ODIzLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgOTI1OTQsIDQxOTQ0LCAxMjAyNzYsIDk5MzMsIDAsIDY2NTE1LCAKLSAgICA3NjcsIDU1MjQsIDcwMjgsIDAsIDAsIDExOTgyNywgMTE5ODE3LCAxMTk4MjgsIDc4NjMzLCAxMDg5NiwgMCwgMTc5OSwgCi0gICAgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMTI4MzQyLCAwLCA2NTM0MCwgMTE4OTc5LCA0MTU1MSwgMjQzNCwgOTQwMTgsIDAsIAotICAgIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgNjMzOCwgNDMyMTQsIDAsIDc1NzAsIDAsIDMxOTIsIDAsIDg0MTQsIAotICAgIDAsIDkzOTgzLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgOTM5NTksIDMxNzEsIDY2MjMsIDQ5NjEsIDY4Mzk2LCA4ODYsIAotICAgIDU1MjE2LCA4NjU0LCA3ODgzMiwgOTk5MywgNzQzOTAsIDY0NjAzLCA3MDA2NiwgNjkyNDEsIDk1OTksIDc4NjI5LCA0MzA4NCwgCi0gICAgNzg2MjcsIDc4NjI4LCA3ODYyNSwgMjM5OSwgNjk2OTMsIDg5OTQsIDEwOTQ0LCA0MTIwOCwgOTgzNzA0LCA0MTE2OCwgCi0gICAgODE3OCwgMCwgMzM2NywgOTIzMzQsIDQyNTEwLCA3ODY0MSwgNzg2MzYsIDY4MDQsIDc4NjM0LCAxOTQ3LCAwLCAwLCAKLSAgICA5MjY4MSwgNDI3NTksIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgOTE4MSwgNjUzNTksIDAsIDgwMTcsIDExOTgzMSwgCi0gICAgNjUwOTYsIDY2NzIwLCAwLCA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDEyODY3MywgMTIwNjk2LCA0OTA0LCA5ODMzMjUsIAotICAgIDY5NjUwLCAxMzY1LCA5MjUzLCA0Mjc1NywgNDM0MzYsIDc0NjIsIDAsIDAsIDAsIDAsIDExOTU4NywgNjQ0MTUsIDAsIDAsIAotICAgIDUzOTgsIDAsIDEyNzM4NiwgOTM5NTMsIDAsIDAsIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgOTgzNzY4LCAxMjc2MywgCi0gICAgMTI2NjAzLCAzNjI5LCAwLCAxMzAwNSwgMCwgMzYyOCwgMCwgMCwgOTI1MDIsIDM0NjksIDQyMTA3LCA0MjExNiwgOTE3NTc4LCAKLSAgICA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAwLCA2NDY2NSwgNDMwODYsIDkxMTQsIDAsIDQyNTgzLCAKLSAgICA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAxMTk4MjEsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCA0MTg1MiwgCi0gICAgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgMTAyNTksIDk4NjUsIDY1ODIxLCAwLCA2MDE4LCAKLSAgICA5MjI5MCwgMCwgMTIyNzYsIDAsIDY4MzcyLCAwLCA5MjI1OSwgMTE5MjQ0LCAwLCA5ODMyMjQsIDEwNDY3LCAwLCAyNDQzLCAKLSAgICAxMDkxOCwgNzgyMTcsIDExOTgyNSwgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDEyNzg4NSwgMCwgMCwgCisgICAgMTE4OTA3LCAwLCAxMDQ3NCwgNDM0MjYsIDEzMjU3LCA0MjM1NCwgMTI4MDk5LCA5ODM2OTgsIDcwMDQ0LCAxOTUwNjUsIDAsIAorICAgIDg0MTMsIDk4MzgxNiwgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzQzNTAsIDE5NTA2MywgMCwgMCwgCisgICAgMCwgMTI2NjM5LCAxMjAwOTcsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCAKKyAgICA0MjkxMywgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIAorICAgIDEyODM1MywgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgCisgICAgMTMwNywgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIAorICAgIDU0MTMsIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjMzLCAKKyAgICA0NTE4LCAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCAKKyAgICA0MzA3MywgNDE2OTAsIDEyNDc5LCA5ODM2MzUsIDAsIDAsIDk4MzgxOCwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDg3LCAKKyAgICA5ODM3MzEsIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIAorICAgIDEzMDA0LCAwLCA0NDU3LCAwLCAwLCAxOTQ4MTgsIDAsIDU2ODQsIDg2NzgsIDEwOTE0LCAwLCA1Njg5LCA2NTgwNywgMCwgCisgICAgNjg0NjQsIDEyNjMzLCAxMjg3MCwgNjk3MDUsIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMCwgCisgICAgNzQyNTEsIDAsIDEyMDY0NywgMCwgNTAsIDEwNTU4LCA5ODcxLCA0MjYxMiwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAwLCAKKyAgICAxMzI1OSwgNDQ0OCwgMCwgOTgzODQ1LCAwLCA3MDA0MywgNjc4NTMsIDAsIDEwNjQwLCAxMTUzOSwgMTE1MSwgMCwgCisgICAgOTE3NjA3LCAxMjc1NDQsIDEyNzA3OSwgMTk1MDUwLCAxMjc4NTIsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIAorICAgIDExODg3MCwgODgxMiwgMCwgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDIxMDUsIDgwODcsIDc4MTYzLCAKKyAgICA2OTYzMiwgOTg5NCwgMCwgMCwgMCwgNDYzNiwgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIAorICAgIDEyMDQ5NSwgMCwgMTI4Mjg0LCAxMjI3NywgMTk0NjI3LCAxMTk5NSwgOTI1NTMsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgCisgICAgMCwgOTI0MjYsIDAsIDY1MzEsIDAsIDEyNzg0NiwgNDczLCA0MzQxNSwgMCwgOTgzNjUwLCAxODczLCAxMDg3LCAwLCAwLCAwLCAKKyAgICA3ODUyNywgNjY0MzksIDQzMjE4LCA5ODMxMjMsIDE5NDcxNiwgNzIzNywgMTI1MDQsIDc0MjgyLCAwLCA5ODM1NzEsIDAsIAorICAgIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCA2Mzg0NSwgMjA1OCwgMTI4ODYzLCAxMzI5NSwgNDMxOTEsIDEyODAzMCwgMCwgCisgICAgMTE1NCwgMzg1NywgMTIwNSwgMCwgMCwgMTMxMDAsIDEyOTU4LCAxMjA3MDYsIDc0MTY4LCAwLCAwLCA0NDIxLCAxMDU5MiwgCisgICAgMCwgNDk1LCAxMTkwMDcsIDQxNzEyLCA3OTgzLCAwLCA5Mzk5NywgMCwgNjM0NywgMTIwMTY1LCA3NjU0LCA0MTcxMCwgCisgICAgNDE5NiwgMCwgNDM3LCA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCAKKyAgICA0OTk5LCAxOTQ2NDIsIDAsIDEyNjU4MiwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgMTk0NjQzLCAKKyAgICA0MTc4OSwgMTI4MTQyLCAxMDgwOSwgMCwgMCwgMCwgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIAorICAgIDEzMDU4LCAxMjA0NDksIDEyODc1LCAwLCA5MjE4NiwgMTMyMjksIDAsIDEwNTc1LCA0MzM5OSwgMCwgMCwgNDE3OTEsIAorICAgIDExMDQsIDAsIDAsIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIDY1NjksIDAsIDAsIDAsIDY5ODQ5LCAKKyAgICA2NzgzLCAwLCAxMjk5MywgODA0OSwgNDE1NDgsIDQ0MDIxLCA2NDU4LCA5ODM4MDcsIDEyODg4MiwgNDc2MSwgNjM4MjgsIAorICAgIDQ3NjYsIDY0NjIzLCAxMjczLCA0MzQwNywgMCwgMTE4ODc2LCAxOTUwNDUsIDY5MTIsIDEzMTMsIDYzMjIsIDEwNDgzLCAKKyAgICA5ODM2MDMsIDQxNTQ1LCAwLCA5MjQ0OSwgMCwgMCwgMCwgMCwgNzg2MjQsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCAKKyAgICA1MTIyLCA0MTUyNywgMCwgNjYzMjAsIDk4MzgxMSwgMCwgMCwgMCwgNDE1MzcsIDY5NjgzLCA4MzAzLCA4MjgyLCAxMTgxNywgCisgICAgNzM4NTcsIDEwMDAzLCA3Mzg1OSwgNjU5MDQsIDczNjMsIDE2ODYsIDAsIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIAorICAgIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAKKyAgICAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIDE2MzMsIDAsIAorICAgIDAsIDQ3NjIsIDExMDMsIDAsIDAsIDQ3NjUsIDk4MzQ5MiwgMTMwNzgsIDAsIDQ3NjAsIDYzODI3LCAyMDUwLCAxMDg3MSwgCisgICAgNDMxOTksIDExMDIsIDAsIDQyMjM2LCAxMjg4NjcsIDE5NDY2NywgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIDQyNTkxLCA4NjI3LCAKKyAgICAxMjI3OSwgMTExMSwgMCwgOTIxNjEsIDQ3MDcsIDY4MjA2LCAxMDE0MywgNzg4MywgMTI3MDgxLCA3ODgwLCA0NTIyLCAKKyAgICA4NjQ1LCA1NzA0LCAxMzAxMCwgMCwgODMwNCwgOTE3NTYxLCAwLCAxMTk1NzUsIDIyOTMsIDAsIDY2NjU0LCAwLCA5MjY3NiwgCisgICAgMCwgMTMwMDgsIDAsIDQzODUsIDAsIDEzMDExLCAwLCA5MjU2OSwgMTE5MTYxLCAxMzAwOSwgMTYwLCAyNjc3LCAwLCAwLCAKKyAgICA0MTc5MywgNjU3NjMsIDc0MjIxLCAxMjAxNDEsIDQxNzkyLCA0Mjc3MCwgOTQwNTQsIDY1NzYyLCAxMTg4MjksIDQzODIxLCAKKyAgICA1NzA5LCAwLCA5NDA1MywgNDM4MTYsIDAsIDAsIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDQzNzk3LCA1NzA2LCA2NDc2OCwgCisgICAgNTcwNSwgODc5MSwgNDAwNSwgMCwgMTAyMzcsIDEwOTkxLCAxMjg4MTYsIDQzNDU5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgCisgICAgMTMxNzAsIDEyNTQwLCA5MTc1NzcsIDQyNjA1LCAxMjA3NjUsIDEyNjYxNywgNjg2NDcsIDkxNzU3MiwgMTAwNTgsIDAsIAorICAgIDc0ODY3LCAxOTQ2NTQsIDEyNzA3OCwgMzMzOSwgMTE0NDgsIDExMDYsIDkxNzU5MSwgOTE3NTkwLCA5MTc1OTMsIDMzNDAsIAorICAgIDkxNzU4NywgOTE3NTg2LCA5MTc1ODksIDkxNzU4OCwgMTIwNTQxLCAxMDYwNSwgMTMwOSwgNjM5NjYsIDEyMDc0MywgMTc1NCwgCisgICAgOTIyMjYsIDEzMjQ2LCA4NjQsIDAsIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCA5MjUzMywgMTMyNDAsIAorICAgIDE5NTA2OCwgNTE5MiwgNDMzOCwgNjc5ODIsIDEwOTQ4LCA5MTc2MDEsIDEzMTk5LCA5MjU3NSwgMTIzNiwgMTMyMDgsIAorICAgIDEzMjYxLCAxMzE4OSwgMTMxODgsIDkzOTkzLCAwLCA3NDQwLCAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgCisgICAgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIDYzNzc5LCAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIAorICAgIDQxNTIyLCA5ODM5MTUsIDkyMTY4LCA5ODM3NzIsIDkxNzg1OCwgMTEzNTQsIDk0MDcxLCAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAKKyAgICAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgMTMyNzIsIDEzMTk0LCAxMzM0LCA2OTkyNiwgNDQ3OSwgMTE3OCwgNjU1ODYsIAorICAgIDEyMDY2MywgNjY2ODEsIDExOTE5MywgNDYwMSwgMCwgMCwgOTgzNzY1LCAwLCAwLCAxOTQ2NTgsIDAsIDY4MDksIDYzNzg2LCAKKyAgICA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgMTAxOTIsIAorICAgIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDY0ODkwLCAwLCA5ODMxMzEsIDAsIAorICAgIDQxNzE5LCA2Mzc1OCwgMzUyMywgMTA3NCwgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIAorICAgIDQzMTQ1LCAxMjIxNywgNjM3NTQsIDQxNTMyLCAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgCisgICAgNDEwODQsIDEyMDYyMiwgNjgxMzMsIDQxOTMwLCA2MzgwNSwgNjM4MDQsIDQzNjMyLCA2MzgwMSwgNDEwODIsIDgxNDAsIAorICAgIDYzNzk4LCA2MjYwLCAwLCAwLCA5NDA3NCwgNjM3OTMsIDExOTg4LCAzODk4LCAxMjgyNDEsIDEwMjAxLCAxMjIzOCwgCisgICAgNjM3OTUsIDQyMTk0LCAxMDM2NywgMTI1MjEsIDEwNDMxLCA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgCisgICAgOTgzMzI5LCA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAKKyAgICAwLCAwLCA2Mzc2OSwgOTUzMCwgOTgzMTE5LCAxMjIzMiwgMTMxMzUsIDg1OTYsIDU2ODEsIDYzNzYyLCA0NTk1LCA2Mzc2MCwgCisgICAgNzkyLCAwLCA2NDgwMywgMCwgODc0MiwgMCwgMTEwNTMsIDEyODc5NiwgNjM3NDQsIDEyODEwNywgMCwgNzU4OCwgNjM3NDgsIAorICAgIDE2OTMsIDYzNzQ2LCA0MzIwNCwgNTA1NSwgNjg0MjYsIDkxNzg1MywgMTA5MCwgMTIwNjc5LCAxMjgzNTYsIDExNjY1LCAKKyAgICA3NDEzMywgNDU1OCwgNjU2ODUsIDk1MjMsIDAsIDAsIDc4NjgxLCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCAKKyAgICA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCAwLCAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIDc4MjcxLCAxMzAwNiwgCisgICAgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgMCwgOTQwMzksIAorICAgIDAsIDkyNDU1LCA3Mzg2LCAwLCA2NDQ0NCwgMCwgMTE5ODYzLCA0MzYwMywgOTQwNzUsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIAorICAgIDEwMDI1LCA2OTkxNSwgMjkxOCwgMCwgNjUzMDAsIDExOTg3MSwgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAKKyAgICAxMjc4MjksIDY1MzkzLCAwLCA3NDEzOCwgMCwgMCwgMCwgNzQxMzksIDkyNzEyLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIAorICAgIDY1Mzk2LCAwLCA2NTgxMywgMTMyNTYsIDEyODIsIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDk4MzYwNCwgNjUyNDIsIDAsIAorICAgIDMzMzAsIDAsIDAsIDk4Mzk3NCwgMCwgMCwgNzQyNTksIDMzMDQsIDQyNzUzLCAwLCAwLCAwLCAxNjI3LCAwLCAwLCAwLCAKKyAgICA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCA0MzA5NCwgNzAwMjMsIDQzNjUwLCA5NDAzNywgMCwgOTAzNSwgMCwgCisgICAgMCwgMTI4MDA1LCAwLCA5MjIwNywgNjgxMjUsIDAsIDE2NCwgMCwgOTQwNjcsIDk0MDAwLCA2OTU4LCAwLCA0MzExNiwgMCwgCisgICAgNzAwMTksIDEzMjQ1LCAwLCAwLCAxMjczNzYsIDAsIDcwMDMxLCAxMjc3NTYsIDEyNjY2LCAxMzE3NSwgMTMyMDcsIAorICAgIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgNjU1MDksIDAsIDc0NDksIDExMzA2LCAwLCA3MzkyMCwgCisgICAgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIDk3MSwgMTMwNjIsIDAsIDAsIDY1MTk1LCAxMDE2NCwgOTIyNTIsIDc0NDI4LCAwLCAKKyAgICA3ODE0NiwgOTI2MTEsIDAsIDAsIDAsIDEwMDQ1LCAxMjg4MiwgMTMyNzUsIDEyODE2MSwgMTEwNTcsIDAsIDEzMjc2LCAwLCAKKyAgICA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAxMjIyOSwgNDE1MjMsIDAsIDQzNDExLCA3Mzc1MSwgMCwgCisgICAgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCA2NDk1OCwgMCwgMCwgNzM5ODksIDY4MTkyLCAwLCA2OTg0NywgCisgICAgMzY5LCAwLCA0MTc4NCwgMCwgNjQxNjMsIDAsIDAsIDAsIDY1NDc0LCA0Nzk2LCAxMjI5MiwgMTI2NTk1LCA2NTQ3OSwgMCwgCisgICAgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgNDMwMDIsIDk4OTksIDAsIDAsIDQwNCwgMTI4MjEsIDM3NDEsIDAsIDU3ODgsIDgwOTIsIAorICAgIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDM5ODIsIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMjAxOCwgCisgICAgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgCisgICAgNDM3NCwgMCwgMTI4MTc5LCAxMzY0LCAwLCA4MDM4LCAwLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgMCwgNjczNSwgNzM5NzksIAorICAgIDEzMTc0LCA3Mzk2OCwgMTMyMjUsIDAsIDY5ODA4LCA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgMCwgNDI4NTUsIDExODg1NiwgCisgICAgNDI4NjYsIDAsIDAsIDAsIDY2NDM4LCA0MTc4NSwgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgMTE5MzU0LCAwLCAKKyAgICA5ODM1NjgsIDAsIDAsIDkyNDAyLCAxMjgwNjIsIDEyOTY1LCAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIDExOTM1MiwgCisgICAgMTU1NiwgNTI3NCwgMTMyMTAsIDEyMDEyNSwgMTAwMTcsIDk3MzMsIDQxNzg3LCA5ODMyNDMsIDEyNjk5NCwgNDEzNzMsIAorICAgIDc4MDM5LCAxMjMwMywgMCwgMTMyMzIsIDEzMjMzLCAzNDksIDQ4NjMsIDQxMzcxLCAxMTY1NiwgMCwgMTIwNzAzLCAKKyAgICAxMTk4ODMsIDEyODYxLCA0Mzk4LCA4NTQzLCA2NTYxOCwgMTI4MDE4LCAxMDk2LCAwLCAwLCA0MjY4OCwgMTI0NDEsIAorICAgIDEyMzU1LCAxMTkzNDgsIDExOTM0NywgNDMxOCwgMTA0NTIsIDAsIDgwMzIsIDEzMjQzLCAxMzIzNywgMTI3MTksIDEyNjY0NiwgCisgICAgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMTE5ODc0LCAKKyAgICA5NDEwNywgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgMTE5ODc5LCA2NjU5MCwgCisgICAgMTI4MTIzLCA0MTUzMywgNjYzMzcsIDAsIDkyMTg0LCAwLCA0OTY1LCA0MzQ0NSwgOTE3NTM2LCA3Mzg0OSwgMCwgNDM2MzgsIAorICAgIDc4NTM3LCAxMjgyODcsIDYyNjEsIDExOTM0MiwgNDMxNDcsIDY2NTcwLCAxOTU3LCAxMDQyMCwgOTgyLCAyNzU2LCAxMzI5MiwgCisgICAgMTMyMDYsIDEyODgyOCwgMCwgMjkyNSwgNzM4MDksIDEzMDU2LCAxMjc1NTksIDEzMjEyLCA0MzIzOCwgMCwgMTMxOTAsIAorICAgIDEzMTg3LCA5MjU0MSwgMTMxOTgsIDExODc5MywgMCwgNTI0MiwgMTE5MTc5LCA2NDQ3NiwgMTY5NCwgODIxNiwgNzEzNjksIAorICAgIDY3NzAsIDQzMzMxLCAwLCA2NTYyMCwgOTgzNzI4LCA0MzU0NCwgMTI2NDY2LCAwLCA0MTQ0NCwgNjU2MjEsIDY5OTU1LCAKKyAgICA5MTk3LCA1MjQ2LCAxMTkxMDYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgMTIzMTQsIDY1NjE2LCA1MjM4LCAKKyAgICAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAxMjg1MzcsIDM5MzYsIDExOTMzMSwgCisgICAgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgMTMyMzksIDEyNjkyLCA3OTY5LCAKKyAgICAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMTI4MjUxLCAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIDI5NzksIDEyMDMwMywgNjU2MTksIAorICAgIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgCisgICAgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgNTM3OSwgMTIwMzE4LCA0MTE2MywgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAxMTUwNiwgCisgICAgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgNzEzMCwgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAKKyAgICAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgNjUyNTAsIDEzMjY1LCAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIAorICAgIDkyNjQ3LCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIAorICAgIDEyNjYzNywgMTE5NjUsIDAsIDY4MzU4LCAwLCA2OTc4OSwgMCwgOTIyNjAsIDY4MTAyLCA5Njk4LCA3ODE0LCA3NDQ3NiwgCisgICAgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIDExOTI1OCwgNzg0OTAsIDc0MjE5LCAwLCAwLCAKKyAgICAxMTg5OTcsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgNTU4OCwgMCwgNDE5MjUsIDEyODEyNCwgNDE5MjAsIAorICAgIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgCisgICAgMTcyNywgMTIwNzI1LCA0MjQzNiwgMCwgMCwgMCwgNzQyMjIsIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCAKKyAgICA3NDA5MCwgNTgyNiwgNTUyMzIsIDU4MTMsIDAsIDEyMDcxMiwgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCAKKyAgICA1ODM4LCA1Nzk2LCAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIAorICAgIDU5OCwgMCwgNjQ2NDksIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCA1NjcxLCAxMjAwNDEsIDk4MzI1NSwgMCwgMCwgMTI4ODU1LCAKKyAgICAwLCA4NDcsIDEyODI0MiwgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIDc4NDgzLCAxMjAwMzUsIDc4NDg0LCA5ODM0OTEsIDAsIAorICAgIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIDAsIDk4MzA1NSwgNzExNCwgMCwgMCwgNDMxOTAsIDY1NDYzLCAKKyAgICAxNTU0LCAwLCA0MjYxMSwgNDI1NjMsIDAsIDU2NTEsIDI5MjksIDY3OTIsIDQzMjAxLCAwLCAxOTk2MywgNTY5OCwgMCwgMCwgCisgICAgMCwgMCwgNTY0NCwgMTAyOTIsIDY1NTQ2LCA2OTcyNywgNjgxNDEsIDgzNzIsIDAsIDY1MTE2LCAwLCAxMjAwMjIsIDEwMTc1LCAKKyAgICAxMDM4OCwgNDI3OTksIDk0MTAwLCA0MTAxMywgMTA1NjgsIDAsIDk4MzYxOCwgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgCisgICAgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCA0MjYwOCwgNzg0NjksIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCAKKyAgICA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMTI4ODc1LCAxMTY2MSwgCisgICAgODEyMiwgNTgxOCwgMCwgMCwgMzg2MSwgOTU0MCwgMTEwMjgsIDI1NTQsIDUxNTgsIDU3MTQsIDIyMTMsIDAsIDAsIDgwNywgCisgICAgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIAorICAgIDEyNjYxNCwgMCwgODY3NiwgOTgzMjkxLCAwLCA1NTgyLCA0NTEsIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAKKyAgICAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAxMjg4NTMsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCAKKyAgICA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgCisgICAgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgCisgICAgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDk0MDQwLCAwLCA1MTg3LCA3MTI5NiwgMTI3Mjc3LCAxMTI4NiwgNjg2MjAsIAorICAgIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIDk4MzgyNywgODI5MiwgMTk1MDc0LCA0OTgwLCAKKyAgICA4ODYwLCA3Mzk0NywgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIAorICAgIDAsIDc4Nzg1LCAwLCA3OTAwLCAwLCAxMTMwOSwgMzgwNiwgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgCisgICAgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgNjQyMTMsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAKKyAgICAwLCAwLCAxMjgzNiwgMCwgMCwgNzQzNDIsIDg1OTMsIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIAorICAgIDAsIDE5NDY1MCwgMTI3MTQ0LCAwLCA5MzQyLCAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCAKKyAgICA3NDM3NSwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgMTE5MTM2LCAwLCAwLCA2OTcyNCwgNDA5OTIsIDkyMjY0LCAxMjcxNTMsIAorICAgIDY4NjUzLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIDc0MTA1LCAzNjMzLCA5ODM5MDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIAorICAgIDc4MjgxLCA5NzcxLCA5ODM5MDUsIDEzMjUxLCAxMjg3MDEsIDAsIDYyNjIsIDI3ODQsIDQyNzQzLCAwLCA4MTI2LCA2NjQ4MywgCisgICAgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCA3MTA4LCAxOTQ3NzksIDEwODkwLCAKKyAgICA3NDQ4MSwgNjU4MzQsIDgzMjQsIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAxMjc0NjUsIDY0NzM3LCAwLCA5ODM2NTksIDg5MzAsIAorICAgIDY2Njc4LCA3NDI0OSwgMTE5MywgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgCisgICAgNzc5MDQsIDkyNjQwLCA3NzkwNSwgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAKKyAgICAwLCAwLCAwLCA0MjgxNSwgMCwgNDE5NjYsIDAsIDEyNzQ3MSwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAKKyAgICAwLCAwLCAxMjAzMzksIDY1MTU5LCA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgCisgICAgMTIzMjYsIDk4Mzg1NiwgMCwgNDI4MDgsIDEyODMzNywgOTM0OCwgNjQ5MDEsIDk4Mzg2MSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOTE3NTg0LCA0MzcwMiwgOTgzNTc2LCA1ODU3LCA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCAKKyAgICA3NDI5NiwgNDE5MDksIDAsIDEyMDMzMiwgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIAorICAgIDExODkzOSwgODc2MSwgMTI5NDIsIDU3NDgsIDAsIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgCisgICAgMTMxNDYsIDEyNzE4NSwgNjM5MzEsIDAsIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgCisgICAgMCwgOTgzNjYwLCAwLCA3Mzg2MCwgMCwgMCwgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgCisgICAgOTE3NTg1LCA2NTExNywgOTIyNzAsIDAsIDEwNDI3LCAwLCAzODQ0LCAxMjA2NzUsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAKKyAgICAwLCAxMjg3ODksIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCA5ODMwNjQsIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDQxMTgwLCAKKyAgICA2ODM3OCwgNDU1NiwgMCwgMCwgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgCisgICAgMTI3NTI3LCA5MTc3LCA4OTAyLCA5Mzk1OCwgOTgzOSwgMCwgMTI4OTEsIDk4Mzc1NSwgOTgzNjM2LCA2Mzk5OSwgMjAxNiwgCisgICAgNDE5MTcsIDk3ODgsIDYzOTI4LCAwLCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgCisgICAgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDAsIDY0NTkyLCAKKyAgICA3NDI3NiwgMTIwMDgwLCA2Nzg0LCA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCAKKyAgICA2NjQ3MiwgOTgzOTI5LCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIAorICAgIDEyNjUwNSwgMTEwNTEsIDk4MzI5NiwgMCwgMTEzNTUsIDY1ODg1LCAwLCAxMjgzMTAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgCisgICAgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgMTIwNTcwLCA2MTY3LCAwLCAKKyAgICA2MzkyMiwgNjU5NCwgOTgzNzQwLCAwLCAwLCAzNjI0LCA0MzAzNiwgMCwgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgCisgICAgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgNjU2MDUsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIAorICAgIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIAorICAgIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIDAsIDY3OTkzLCA2Mzk1NiwgNDI0NTgsIDYzOTU0LCA2Mzk1MywgCisgICAgNjM5NjAsIDk1OTEsIDQ1MTYsIDEwMjE3LCA2ODM3MCwgMTE0NjksIDY5Njk3LCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAwLCAKKyAgICA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAKKyAgICAwLCAxMjY0NzksIDQxNSwgNjM5NjQsIDYzOTYzLCA0MjM0NSwgOTIzMTAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAKKyAgICAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIDY5Njk5LCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAxMjgwNzgsIDcwODEsIAorICAgIDEwNzMwLCA3NjkxLCAxMDMzMSwgNjM4MzAsIDExOTYyNSwgNDI5MjIsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgCisgICAgMTYwNCwgOTU2NSwgMTA1MzksIDY5NzAxLCA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIAorICAgIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIDExODAxLCAzNjIyLCA5ODMxMjQsIDY0MzM2LCAxMjAxNywgMTA0NjMsIAorICAgIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgNDM2MjgsIDAsIDk4MzI5MiwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIAorICAgIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCA0MDIsIDAsIDEzMTQ3LCAxMjg2OTIsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIAorICAgIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCAKKyAgICA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCA5MjM1OSwgNjQ5NDIsIDk4MzU1OSwgMTk0NzMzLCA5ODM2ODYsIAorICAgIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCA2OTc4NCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIAorICAgIDY1MDE4LCA2NjUxNiwgNTQwOSwgMTI3Mzc5LCAxOTQ2NjksIDc0MDIsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAKKyAgICAwLCA2NjYxNiwgNjg0MjEsIDk4MzkxOSwgMCwgNTQwNSwgMTI3ODc1LCA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIAorICAgIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgNjQ2OTAsIDMyNTQsIDAsIDAsIDEyODIwNywgNDIzOTAsIDQzNjc4LCAKKyAgICAxOTQ3MjUsIDk4MzkwOSwgNjUwNzcsIDAsIDYzODgsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAKKyAgICAzMzc3LCAwLCAwLCAwLCAwLCA3ODIyOCwgMCwgOTgzNzYyLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIDc0NzY3LCAwLCAKKyAgICAxMjcwNzUsIDEzNzksIDI0NiwgMCwgOTgzNzYxLCAzNzg4LCA5ODMxMDYsIDExMDQxLCA5MjU0OSwgNjYzMDQsIDAsIDAsIAorICAgIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIDk4MzY5NywgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAKKyAgICA5MjIxNywgMTMxNjMsIDk4MzIwNCwgMTIwODMxLCA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIDY1ODg5LCA0MjE2OSwgCisgICAgNDc1NSwgNzQyNDQsIDE5NDYyMSwgMTE0NDMsIDAsIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIAorICAgIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCA0MjQ0MiwgNjU0NzAsIDk4MzkwNywgNjQyMDIsIDEzMTYwLCA3NzU5LCAKKyAgICA0MjQ4MiwgNDg1LCAxMjgwMDYsIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgCisgICAgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCAKKyAgICA3MDA0NSwgNDM1MzksIDU0MTEsIDQyMTk2LCAwLCAwLCAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgCisgICAgOTMzNywgMTIwNTIsIDEwNjQzLCA1NTI3MSwgOTgzMTc5LCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgCisgICAgNjU2MTEsIDAsIDAsIDE5NDc1NiwgNzQzMTAsIDY1NTQsIDAsIDExOTE0LCA1NDUyLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIAorICAgIDkyNTYwLCAyNzEzLCAwLCA5NjUwLCA0MzMzMCwgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCA5MjY1OSwgMCwgNjgyMjMsIAorICAgIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIDk2ODIsIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCAKKyAgICA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIAorICAgIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwNSwgCisgICAgMTI5NTUsIDEwNTk2LCAyODg4LCAxOTQ2NDUsIDAsIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgCisgICAgMTk0OTYxLCAwLCA2ODY3OSwgNDM1NTIsIDc1MDEsIDYzMjgsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgNDE5NDYsIDc1MDMsIAorICAgIDUyMzUsIDgwMywgNjgzODEsIDAsIDAsIDg5ODYsIDEyNjU0MiwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgCisgICAgMTI2NjQ3LCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCA0MzM5NCwgNTU1LCAwLCAwLCAKKyAgICA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCA2NDE2MSwgODg1NCwgNjQxNjIsIDU4NTgsIAorICAgIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAxMzE1OCwgCisgICAgOTIxNjYsIDcyMTEsIDAsIDkzNzEsIDczOTczLCA5MTc1NTMsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAxMzQyLCA2ODQ0MCwgCisgICAgNjQxNzEsIDEyNjcwNCwgMTA5MDMsIDk4MzQ5NCwgMCwgMCwgMCwgMCwgNDQ4MiwgNDE2MDYsIDAsIDEyODU2OSwgOTgzMTEyLCAKKyAgICAwLCA2NDM4MSwgMCwgMCwgMTk1MDkwLCA0MjI0NSwgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgCisgICAgNjY2MTksIDEyNjQ4OSwgNzgwMjUsIDAsIDExMzQ5LCA0MDk5MSwgOTE3NTcwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgCisgICAgMTE5NywgMTI4MjgyLCAxMTQ5LCAxOTQ5NzAsIDAsIDAsIDQwOTkwLCA0Mzc2NSwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAKKyAgICAwLCAxMjgzOCwgOTgzOTc4LCAxOTk0OCwgMCwgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIAorICAgIDQxMzA5LCAwLCAwLCA4MTUyLCAwLCA0MTU1MCwgMTIyMjcsIDk4MzYxMywgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgCisgICAgMTIwNzA4LCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCA5MjY4MCwgOTgzNzg5LCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgCisgICAgOTIyMzksIDY1MTg2LCA5MTc1NzEsIDAsIDk2MDYsIDAsIDAsIDY0NDM5LCAwLCAwLCA5MjY4NiwgMCwgMCwgMTk0OTY3LCAwLCAKKyAgICAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgNzgzNjIsIDY0ODMwLCAwLCAxMjY1NTcsIDQxMDkxLCAzNDI2LCAxMzQ0LCAKKyAgICA4ODcwLCAwLCAwLCA0NzM1LCAxMjcwMTcsIDYxMTksIDEyODIyLCA0MjY5OSwgMCwgOTgzODI0LCA3NDgxOCwgMTQyMywgMCwgCisgICAgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIAorICAgIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCA3ODcxMywgMCwgMTk0NzQwLCAxMjg2OTEsIDkyMTg1LCA2NjY5OSwgCisgICAgNjQ0NDAsIDEwMDQsIDkyNTg0LCAxOTQ3MzcsIDQzMjM0LCA2NjAwOCwgMTI2MjcsIDAsIDY4NDE0LCAwLCA0MzYxOSwgCisgICAgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgMTE3NzYsIDc1NTgsIDEyNzE1OCwgNjU2MjcsIDAsIDEwNzE4LCAKKyAgICAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDEyMDMxOSwgMCwgCisgICAgNDE3MDgsIDEyODYwLCAyNjQxLCAxMjA2OSwgMTA4MzgsIDU0MDMsIDEwMzUyLCA3MDA4NSwgMTAwNjEsIDQzMjM3LCAwLCAKKyAgICA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCA0MzA3OCwgMTI4MTI1LCAxMTg4MDksIDAsIDEwODk5LCA2NTQ2OSwgCisgICAgOTIzNjIsIDAsIDAsIDI0MTAsIDk5MywgMCwgMTIwNTg5LCAxMjA2ODksIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIAorICAgIDAsIDcxMTAsIDc0NDYyLCAyMDY2LCAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgCisgICAgNDE1MTgsIDAsIDAsIDAsIDAsIDQxMTM5LCA2NDgyMCwgOTI1MzgsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCAKKyAgICA0MjYzLCA4NzkzLCAwLCAwLCA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCAKKyAgICA1ODg4LCA0MTM1OCwgNjQ4NjMsIDk1NDQsIDQzNDgxLCAwLCAxOTQ4MDYsIDcwMDI3LCAyMDk5LCA1MTIwLCAyNDA5LCAKKyAgICA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIAorICAgIDAsIDY0OTE0LCA5MTc3ODcsIDY1MTAxLCAwLCAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAKKyAgICAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAKKyAgICAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCA5Mzk2MCwgOTgzMzIyLCAxMjY1ODEsIAorICAgIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCAKKyAgICA2NDMyMSwgODM1OSwgMCwgMTI2ODksIDAsIDE5NDU5NCwgMCwgOTgzMzEyLCA5ODM4ODEsIDY4MTgzLCAwLCA5ODMzMTQsIAorICAgIDEyODcsIDU0MzYsIDAsIDk4MzMxNywgNzQxNDIsIDkyMzI4LCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgNjk2NjgsIAorICAgIDg5ODUsIDEyMTA5LCA5ODMzMjMsIDAsIDEyNzI0MiwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgCisgICAgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDk4MzU1NywgNDIxMjIsIAorICAgIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgOTQwNTcsIDQyMTM4LCAKKyAgICA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIDY1OTQyLCAKKyAgICA0OTIsIDg2ODUsIDAsIDk4Mzc1OSwgMCwgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDc4NjE1LCAKKyAgICA3ODYxNiwgMjI5NywgMCwgNzM4MzcsIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDkyNTk0LCA0MTk0NCwgCisgICAgMTIwMjc2LCA5OTMzLCAwLCA2NjUxNSwgNzY3LCA1NTI0LCA3MDI4LCAwLCAwLCAxMTk4MjcsIDExOTgxNywgMTE5ODI4LCAKKyAgICA3ODYzMywgMTA4OTYsIDAsIDE3OTksIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDEyODM0MiwgMCwgNjUzNDAsIDExODk3OSwgCisgICAgNDE1NTEsIDI0MzQsIDk0MDE4LCAwLCAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDYzMzgsIDQzMjE0LCAwLCAKKyAgICA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAwLCA5Mzk4MywgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAzMTcxLCAKKyAgICA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgNzAwNjYsIAorICAgIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgCisgICAgNDEyMDgsIDk4MzcxMywgNDExNjgsIDgxNzgsIDAsIDMzNjcsIDkyMzM0LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCAKKyAgICA3ODYzNCwgMTk0NywgMCwgMCwgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIDkxODEsIAorICAgIDY1MzU5LCAwLCA4MDE3LCAxMTk4MzEsIDY1MDk2LCA2NjcyMCwgMCwgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAxMjg2NzMsIAorICAgIDEyMDY5NiwgNDkwNCwgOTgzMzMzLCA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAKKyAgICAxMTk1ODcsIDY0NDE1LCAwLCAwLCA1Mzk4LCAwLCAxMjczODYsIDkzOTUzLCAwLCAwLCAxMTkwMTUsIDAsIDAsIDk0NzYsIDAsIAorICAgIDk4Mzc3NywgMTI3NjMsIDEyNjYwMywgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDkyNTAyLCAzNDY5LCA0MjEwNywgCisgICAgNDIxMTYsIDkxNzU3OCwgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAKKyAgICAwLCA0MjU4MywgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgCisgICAgNDE4NTIsIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgCisgICAgNjAxOCwgOTIyOTAsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgOTIyNTksIDExOTI0NCwgMCwgOTgzMjMwLCAxMDQ2NywgMCwgCisgICAgMjQ0MywgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAxMjc4ODUsIDAsIDAsIAogICAgIDExODgyOCwgMTIwMjcxLCA2NTY3OCwgMTI4NjcsIDAsIDgyNjAsIDc3OTQ1LCA3NTE5LCAxMTUwNSwgMTIyNzQsIDg5MDQsIAogICAgIDUxOCwgNjU4NTcsIDAsIDEyODY3NCwgMTMyMDQsIDQzODcsIDg1NywgMCwgNjUzNjksIDAsIDkyMzM2LCA0MzEyNSwgCiAgICAgMTIwNTkyLCAwLCAwLCAwLCAwLCA1MTM2LCAxOTY4LCA5ODMwNDEsIDEyNjYyNywgMTMzNywgNjQ5NjcsIDE2MjksIDAsIApAQCAtMTg3NzcsNDQgKzE4Nzk2LDQ0IEBACiAgICAgNzg2OTgsIDc4Njk3LCA3ODY5NiwgNzg2OTUsIDg3MTAsIDQyNDk1LCAxMTg5NTYsIDAsIDQwNTEsIDEwNDYwLCA0MzM2NCwgCiAgICAgMTE4OTE3LCAxMzU2LCAxMjE2MSwgNDI3MTMsIDEyODg1NywgMTI3MjY4LCAxNjE5LCA5NzAzLCA0MzE1MiwgNDI0ODksIAogICAgIDQyMTEyLCAxMjc5NzgsIDE4NzUsIDEwODA4LCA0MjEwOSwgMTIwMjg0LCA0MTg2MCwgNjQ4NjIsIDEzMzA1LCA2NDkwNywgCi0gICAgNTI4OSwgMTMxNDQsIDEyODY1OCwgMCwgNTU3NSwgOTY3NSwgMCwgNTk0MCwgMjI2LCAyNjQ5LCA2MzM2LCA5ODMyNjksIAorICAgIDUyODksIDEzMTQ0LCAxMjg2NTgsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNjMzNiwgOTgzMjc3LCAKICAgICAxMTk4MzAsIDQzMjM2LCAzMzgyLCA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDc4MjMyLCAwLCAxMTI2OSwgMTAxNTEsIAogICAgIDczNzU5LCA0MzEwMCwgNjk4ODgsIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgNzQ3NTMsIAogICAgIDY1MTc4LCA0Njg0LCA3ODcwMSwgMTE5NjUzLCAwLCAxMjY1NTEsIDAsIDYwNDgsIDc0NDYwLCA0MjExMCwgNzM5NjUsIAogICAgIDEwODcwLCA4NTU3LCAxMTA1NCwgNjg2NjQsIDExOTA0OSwgOTY4MSwgNDQ3NSwgMCwgNDExNDIsIDIxMDAsIDAsIDEyMDczMSwgCi0gICAgNjAzNSwgMCwgNzY1MSwgMTAyOTYsIDY0NDQzLCAwLCA5ODMyODcsIDkxNzk4NywgMCwgMTE4OTY2LCA3NDE0NCwgNDA5OTcsIAorICAgIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgOTgzMjk1LCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAKICAgICAwLCAxMDM5MiwgMTAzMjgsIDQwOTk4LCA0MzQ2MiwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDEzMzA3LCA0MTAwMCwgMCwgCiAgICAgMTE5MjM5LCA2NDg3LCAzMzg2LCAwLCAxMDM0NCwgMCwgNjUyOTksIDUzOTQsIDQzMjQ2LCA3ODI0MywgMTAyMjAsIDY2NTA1LCAKICAgICA0MTIwMCwgMTI4NTgzLCA0NDI1LCAwLCAwLCAwLCA0MzA3NCwgNzM3OTksIDk4MzIwMCwgNzgxNDcsIDAsIDEyMTczLCAKICAgICA3ODU0NSwgMCwgMTI3MDExLCA2NTMzOCwgMCwgMCwgMTE5NTgyLCA0NDc0LCAwLCA0MzA5MywgMTI4NjQ0LCAxNTg3LCAwLCAKLSAgICAxMjczNzIsIDY0NDc1LCAxMjgwOTgsIDEzNjksIDk4MzY2MywgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIDAsIAotICAgIDY0OTQ4LCA0NDMwLCA3NDM0NywgNDI2MDEsIDQ1MTQsIDY2NDM0LCA5Mzk1NSwgODE5NCwgNjU0NjIsIDEwNjI2LCAxMDk2NSwgCi0gICAgMCwgODg5MywgOTgzMjkzLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAxMTk4MjIsIDEwNDc1LCAwLCAwLCAKLSAgICAxMzUyLCAxMTA2OSwgNzcwNywgMTI3NTYwLCAxMjY0ODYsIDY1Mjc5LCAxMjcxMDIsIDY4MjA3LCAxMjcxMDAsIDcwOTksIAotICAgIDYwNDAsIDEyNzA5NywgMTAwNzEsIDAsIDkzMzYsIDQzNzUwLCAwLCA4ODk5LCA3Nzk4LCA2NDQ3NCwgNjQyNTksIDY5ODczLCAKLSAgICA2NTE4OCwgNzgyMCwgNDMwMTgsIDEyNzA4MiwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIDEwODg0LCA3Nzk4MiwgMCwgNTEyNywgCi0gICAgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAyOTk5LCA2MzQyLCA2ODYzNiwgCi0gICAgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIDYzMjMsIDE5NDY4NCwgODIyNCwgMCwgCi0gICAgODkzOCwgNjA0MywgMTI3MzgsIDAsIDk4MzA3NiwgNTMyMSwgMCwgMTk0Nzk4LCAwLCAyNTg5LCA3NDMzMiwgMTY4OSwgCi0gICAgNzgwMiwgNDY4MywgNzQzMTgsIDQyNzA0LCAxMjAyOTYsIDExOTA1LCAwLCAwLCAxMjg1MTYsIDEyODE2MywgNzQ1MTMsIAotICAgIDYwNDksIDAsIDQwMjcsIDgzNCwgMTE4OTYyLCAxODAzLCAwLCAxNTAzLCAwLCAwLCA3MTMxMiwgNTczMSwgMTM4MSwgMjM4NywgCi0gICAgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgOTc2NiwgMCwgCi0gICAgNTcyOSwgOTE3ODMzLCA3NDQxMCwgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgMjg4NywgMCwgMzUyNiwgCi0gICAgNjI5OCwgMCwgNzc4OTcsIDEyMDA5NSwgNzg1MTksIDAsIDg1NzIsIDYwMjEsIDc3ODk2LCAxMjgyODgsIDc3ODk1LCAKLSAgICA0MzE1NSwgMCwgMTE5ODQ5LCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIDEwOTgxLCAxNjYsIDkxNzg0MSwgODYzNSwgCi0gICAgOTgzNjA2LCAxMDYyMywgNDA4LCAxMTkwNTgsIDEyNzUwNywgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAxMjcxNywgMCwgCi0gICAgNzYwNywgMTA2MzksIDQzMzk2LCAwLCAwLCA0MTY0MywgNzQxMzQsIDk4MzA1NCwgODcxMywgNDE2NDAsIDEwMjIxLCAKLSAgICA0MTY0NSwgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgOTM5OTQsIDc3OTAxLCAzNDcyLCA4Njk3LCAKLSAgICAwLCAwLCA5ODM4MDYsIDAsIDAsIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgOTI0MzIsIDc0NTcyLCAwLCA0MjEzNiwgMCwgMCwgCi0gICAgMCwgMCwgMzI0NywgMTE5ODU0LCA2NTAxNywgOTgzOTQ0LCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAwLCAKLSAgICA0MTU2NywgMCwgMCwgMCwgMTk0NjI0LCAxMTk4NTMsIDAsIDAsIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgMCwgCi0gICAgNDA5ODgsIDkyNTkyLCA3NDgwOSwgNDE3MjcsIDAsIDQyODQ4LCAyMzk2LCA5MTc3NjYsIDAsIDc0MDE4LCA5MTc1MzgsIAorICAgIDEyNzM3MiwgNjQ0NzUsIDEyODA5OCwgMTM2OSwgOTgzNjcyLCA5OTU5LCA3OTI3LCAwLCA0NTYwLCAwLCAwLCA5MjI3NywgCisgICAgOTgzNjIxLCA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCA2NjQzNCwgOTM5NTUsIDgxOTQsIDY1NDYyLCAKKyAgICAxMDYyNiwgMTA5NjUsIDAsIDg4OTMsIDk4MzMwMSwgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgMTE5ODIyLCAKKyAgICAxMDQ3NSwgMCwgMCwgMTM1MiwgMTEwNjksIDc3MDcsIDEyNzU2MCwgMTI2NDg2LCA2NTI3OSwgMTI3MTAyLCA2ODIwNywgCisgICAgMTI3MTAwLCA3MDk5LCA2MDQwLCAxMjcwOTcsIDEwMDcxLCAwLCA5MzM2LCA0Mzc1MCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIAorICAgIDY0MjU5LCA2OTg3MywgNjUxODgsIDc4MjAsIDQzMDE4LCAxMjcwODIsIDAsIDc3NDYsIDE0OTIsIDc4NTUxLCAxMDg4NCwgCisgICAgNzc5ODIsIDAsIDUxMjcsIDExMjg1LCA0MjUwMSwgNTQ5NSwgNDI3MywgNDMwOTUsIDQxNDI2LCAxMDg0OSwgNTczMCwgCisgICAgMjk5OSwgNjM0MiwgNjg2MzYsIDc0MzA0LCAzNzEsIDY0MzczLCA2MDIzLCAxNjksIDU0OTcsIDExNzA4LCAwLCAwLCA2MzIzLCAKKyAgICAxOTQ2ODQsIDgyMjQsIDAsIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCA5ODMwNzYsIDUzMjEsIDAsIDE5NDc5OCwgMCwgMjU4OSwgCisgICAgNzQzMzIsIDE2ODksIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgMTIwMjk2LCAxMTkwNSwgMCwgMCwgMTI4NTE2LCAKKyAgICAxMjgxNjMsIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgNzEzMTIsIAorICAgIDU3MzEsIDEzODEsIDIzODcsIDAsIDAsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNDMxNDIsIDAsIDk2MDEsIDI4NzksIAorICAgIDk2NjgsIDk3NjYsIDAsIDU3MjksIDkxNzgzMywgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIAorICAgIDI4ODcsIDAsIDM1MjYsIDYyOTgsIDAsIDc3ODk3LCAxMjAwOTUsIDc4NTE5LCAwLCA4NTcyLCA2MDIxLCA3Nzg5NiwgCisgICAgMTI4Mjg4LCA3Nzg5NSwgNDMxNTUsIDAsIDExOTg0OSwgMzE0NiwgMTA5NTksIDk0ODMsIDAsIDc3ODkzLCAxMDk4MSwgMTY2LCAKKyAgICA5MTc4NDEsIDg2MzUsIDk4MzYwNiwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgCisgICAgMTI3MTcsIDAsIDc2MDcsIDEwNjM5LCA0MzM5NiwgMCwgMCwgNDE2NDMsIDc0MTM0LCA5ODMwNTQsIDg3MTMsIDQxNjQwLCAKKyAgICAxMDIyMSwgNDE2NDUsIDY2NzEyLCA2NjQ1LCA2NDYsIDY2NzI2LCA2NjcxMSwgNDIxMjksIDkzOTk0LCA3NzkwMSwgMzQ3MiwgCisgICAgODY5NywgMCwgMCwgOTgzODE1LCAwLCAwLCAwLCA1ODA5LCAxOTUwLCAxMTkzNTYsIDkyNDMyLCA3NDU3MiwgMCwgNDIxMzYsIAorICAgIDAsIDAsIDAsIDAsIDMyNDcsIDExOTg1NCwgNjUwMTcsIDk4Mzk1MywgNjg0MjgsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgCisgICAgMCwgNDE1NjcsIDAsIDAsIDAsIDE5NDYyNCwgMTE5ODUzLCAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIAorICAgIDAsIDQwOTg4LCA5MjU5MiwgNzQ4MDksIDQxNzI3LCAwLCA0Mjg0OCwgMjM5NiwgOTE3NzY2LCAwLCA3NDAxOCwgOTE3NTM4LCAKICAgICA2NDk0MCwgNzAyNywgMzg4NiwgMCwgNDI0NTcsIDExOTAwOCwgMCwgOTk2LCA2ODEyMywgOTQwNTgsIDQyNDksIDAsIAogICAgIDkxNzU5NCwgMTE3MDcsIDgyMjIsIDAsIDc5MzksIDkyNDU0LCA5MjQ2MCwgMTI3ODAxLCA5MTc1OTIsIDEyODM1OSwgODUzNCwgCi0gICAgMTI3MTU0LCA0MDk4MywgMCwgOTgzMjM0LCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAxNTQwLCA5MTc1NDksIAorICAgIDEyNzE1NCwgNDA5ODMsIDAsIDk4MzI0MCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAKICAgICAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMTI4MDM0LCA5NjE5LCAKLSAgICA5ODM5MzEsIDAsIDAsIDEyNzg3MiwgNzEzNjMsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCAKLSAgICA2NTAwOSwgOTgzOTMzLCAxMjU2NywgMTI4NzAzLCAwLCA0MTQxMiwgMCwgMCwgMzYwNywgOTIwMCwgMTAwNDYsIDk2MTIsIAorICAgIDk4Mzk0MCwgMCwgMCwgMTI3ODcyLCA3MTM2MywgNTgwMywgNzc5NywgNjA3MCwgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIAorICAgIDY1MDA5LCA5ODM5NDIsIDEyNTY3LCAxMjg3MDMsIDAsIDQxNDEyLCAwLCAwLCAzNjA3LCA5MjAwLCAxMDA0NiwgOTYxMiwgCiAgICAgNDIxNTMsIDgyMTgsIDk0ODUsIDAsIDIwMzIsIDc4MzU0LCAwLCAwLCAwLCAwLCAwLCA0MzA4NSwgNjA1NywgNTA4LCAKICAgICA5Mzk2OCwgMTI4MDE1LCA2Nzk2OCwgMCwgOTI0MDUsIDAsIDAsIDYzOCwgNjA4MywgMTE5MDcyLCAwLCAwLCAyMzA1LCAKICAgICA3ODM0OCwgNjgwOTYsIDAsIDYwNTYsIDY2NTksIDY3OTY5LCAwLCA2MDg1LCAwLCAwLCAzOTE1LCA0MTYzNCwgMCwgNDE2MzksIApAQCAtMTg4MjIsMTUgKzE4ODQxLDE1IEBACiAgICAgMTIzMjgsIDUwMSwgOTM5ODUsIDEwNjAxLCAwLCA1ODMsIDAsIDQxOTc3LCAwLCA2NjAwNCwgMTE5MzUwLCA2NTA1LCAKICAgICA3NDAxMCwgMCwgMTMwNjQsIDU1MjY3LCAxMjA4MTAsIDY1MDAsIDU1MjYsIDY1MDQ5LCAwLCA3Mzc2NCwgMCwgOTIzNzYsIAogICAgIDEyNzQ1LCA5Njc4LCAwLCAxMjA1ODcsIDk4NjksIDEyODgxNSwgMTc3MSwgMCwgODkzNiwgMCwgMCwgNDIwOCwgNzgzNDEsIAotICAgIDc4NTY3LCA3ODM0MiwgMCwgOTgzNDQ4LCA3NDEwMSwgMCwgMTE3NjIsIDAsIDkyNDIyLCA3Nzk5NywgNjgwMTAsIDY2NDc1LCAKKyAgICA3ODU2NywgNzgzNDIsIDAsIDk4MzQ1NiwgNzQxMDEsIDAsIDExNzYyLCAwLCA5MjQyMiwgNzc5OTcsIDY4MDEwLCA2NjQ3NSwgCiAgICAgMCwgNTAyNywgNzgxNzIsIDEyODg3OCwgMCwgNTA2OSwgNzM4NjIsIDUwMjgsIDk4OTcsIDAsIDczNzM5LCA1MDI2LCAKLSAgICA5ODMyNDcsIDY4NjM5LCA2MzMxLCAxMDA3OSwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgCisgICAgOTgzMjUzLCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIAogICAgIDExOTM2MSwgOTgzNTY0LCA0MzEwNiwgNTAyOSwgNjUzMDksIDE1ODAsIDM1OTgsIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDAsIAotICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzAsIDEwNjAwLCA5MTc4NjcsIAorICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzksIDEwNjAwLCA5MTc4NjcsIAogICAgIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgMTIwODI5LCA0MTAwMywgMCwgNTAyNSwgCi0gICAgNjk4OTIsIDk4MzIwNywgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCisgICAgNjk4OTIsIDk4MzIwOSwgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCiAgICAgMTE2MDIsIDYyNDMsIDExNTc0LCAxMTU4MSwgMTE1OTcsIDExNTk4LCA2MjUzLCA2MTA1LCAxMTU4NCwgNzQxOTUsIDExNTY5LCAKLSAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCAwLCAxMDgxNSwgMTE2MTksIDIzMDEsIDQxNTQwLCA3ODE1LCAKKyAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCA5ODMyMjcsIDEwODE1LCAxMTYxOSwgMjMwMSwgNDE1NDAsIDc4MTUsIAogICAgIDExNjE2LCA2OTc5LCAxMjA4MCwgNzcyMSwgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCA3ODQ5OCwgNDEwNDgsIAogICAgIDkxNzc2MywgODI5LCAwLCA5MjQwNiwgMTk5NTAsIDAsIDEyNjQ4MiwgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCAKICAgICA2OTc4NSwgNDgyLCA0MjI5NiwgMTE1ODgsIDAsIDQzNjA2LCAwLCA2ODM5NywgNjYzNzAsIDc0NTA2LCA0MjMzNSwgCkBAIC0xODgzOSw5ICsxODg1OCw5IEBACiAgICAgMTEzMzcsIDc4MjA5LCA5MTc4MjAsIDYzOTg5LCAzOTU4LCAxMjEzMiwgMTg0OSwgMCwgOTkyMSwgNDI0NTEsIDQyNTMsIAogICAgIDQxMTQ3LCA0MjA2NCwgMTE5NTksIDQyNDA0LCA0MTE2MCwgMCwgMzYxOCwgNzgzMzgsIDAsIDQzMzAwLCA1MTU2LCA5MjYyOSwgCiAgICAgMCwgOTI5LCA2ODI3LCA0MjAzNSwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAyMjE1LCA0MTY2MiwgOTQwMTAsIDAsIAotICAgIDAsIDAsIDkzOTUyLCA0NTc4LCA2NDUxMywgNDE2NjQsIDk4MzcyNSwgNDI1NzgsIDEyODc5NCwgNDE2NjEsIDc4NzE1LCAKKyAgICAwLCAwLCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MzQsIDQyNTc4LCAxMjg3OTQsIDQxNjYxLCA3ODcxNSwgCiAgICAgNDMyNjcsIDkzNTYsIDAsIDAsIDAsIDEyODYsIDEwMTY2LCAwLCAwLCA2NDcwNywgOTgzMTI3LCA0MjQ3NiwgNzczMCwgCi0gICAgOTgzODUwLCAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCAKKyAgICA5ODM4NTksIDEyODUyMiwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIDQzMzU5LCAwLCA2NjQxLCA1MjUsIAogICAgIDQxNjI3LCA5MTc5MjMsIDg3NjMsIDEyODMwNCwgNDE2MjgsIDUzMywgMTE5MzEsIDY1MjI1LCA4MzIxLCA0MjUwNCwgCiAgICAgNDI1ODEsIDAsIDY5MTUsIDQyMzEwLCA0Mzc3LCA4NTU5LCAwLCA3NDM2MCwgMCwgMTMxOTMsIDY0MzUwLCAxMTY2NiwgCiAgICAgODY3OSwgNDE5MjQsIDE1NzYsIDc3MzUsIDkyMzk4LCAwLCA3Mzg0MCwgOTgzMDkyLCAxMTM3NCwgNzgwNDMsIDEwODg5LCAKQEAgLTE4ODU5LDI0ICsxODg3OCwyNCBAQAogICAgIDgyNDQsIDM2MiwgOTI0MzksIDAsIDgwMzcsIDQzNzc3LCAxMTUzNSwgMCwgNzQ4NDUsIDUxODUsIDcxNjUsIDU1MjEsIAogICAgIDEwMzM0LCAyMDkzLCA3MTMyOSwgMTAzMDIsIDEyODExMiwgMTAxMDQsIDEwMjcsIDUxODEsIDAsIDAsIDEwNTIzLCAxNDQ2LCAKICAgICA0MjMyMCwgNDE2NDYsIDk5MSwgNTE4OSwgNDI0NzIsIDQxNjQ3LCAxMjAxMDUsIDE3MjIsIDU1ODEsIDQyODk4LCAzNDA1LCAKLSAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCA5MjQ0NywgOTgzODEwLCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIAotICAgIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCA5ODM4ODQsIDAsIDc2MzAsIAorICAgIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIDkyNDQ3LCA5ODM4MTksIDk1NDksIDAsIDEwNTQ5LCA1NTI4MiwgOTY2MSwgCisgICAgNDM2ODIsIDAsIDc3OTEwLCAxMjAwMjYsIDc4NzA4LCAwLCA3NzkxMSwgMCwgNDE5OTEsIDk4Mzg5MywgMCwgNzYzMCwgCiAgICAgOTg0NiwgNzY4NCwgMTAzNTAsIDAsIDExNzQsIDc3OTgxLCA0MjczMywgNzc5NzgsIDc3OTgwLCA2NjQ4NSwgNzc5NzcsIAogICAgIDQyMjc3LCA3Nzk3NCwgNDI0NTYsIDY1NjY3LCAxMjcwMzcsIDEyMzMwLCAxMjgyNzIsIDAsIDQyNDE3LCA0MjM4MywgCiAgICAgNjY2MzAsIDQxMzQ0LCA2MjkzLCAwLCA2NjI1MiwgNzc5ODQsIDc0NDQzLCAwLCAxMDIwOSwgODMxMywgNDE5NSwgNzQ0MzUsIAotICAgIDEzMTYsIDY2NjkwLCAxMjAwMzIsIDYzMzIsIDY0ODk0LCAwLCA2NTg3MSwgNzgwNjAsIDE3MzYsIDk4MzY3NSwgMzkwMSwgCisgICAgMTMxNiwgNjY2OTAsIDEyMDAzMiwgNjMzMiwgNjQ4OTQsIDAsIDY1ODcxLCA3ODA2MCwgMTczNiwgOTgzNjg0LCAzOTAxLCAKICAgICAxMjIyOCwgMTIwMTUxLCA2NTIwMCwgMzM4MywgMTA0NDYsIDc4ODQxLCA2OTMsIDkxMzAsIDMxNCwgNjQxNDksIDQyNDIwLCAKLSAgICAxMTk0OSwgOTgzNjYwLCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKKyAgICAxMTk0OSwgOTgzNjY5LCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKICAgICA0MjcwNiwgMTc1MSwgMjczLCA4MTY1LCAxMzE2NiwgMTIwNzYzLCA3ODg0MCwgNzEzNjgsIDEyODI0LCAwLCA0NTI4LCAKICAgICA1MzIwLCA2MzAxLCA0MzY2MiwgNjEzMywgOTMzOSwgOTQ2MywgNDIzNDYsIDEwOTIyLCA2NDU2MCwgMzc1NywgMCwgMCwgMCwgCi0gICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg1OSwgCi0gICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg2MiwgCisgICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg2OCwgCisgICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg3MSwgCiAgICAgMTAyMywgNDc0LCAwLCAxMTk4MTgsIDAsIDAsIDQyNDg3LCA2NTU1NiwgMCwgMTI3ODY2LCA0MjI5NSwgMCwgMCwgNzEzMjIsIAogICAgIDkyNTE4LCA5ODM1LCA2NjQ5OSwgMCwgNTQxNywgMTIyNzUsIDEwODk1LCAwLCAyNzQsIDAsIDE4NTgsIDAsIDAsIDU1MjUxLCAKICAgICAxMDExOCwgMzEzMywgMTI4MDA4LCA3Mzc5NSwgMCwgOTYxMCwgODA2OCwgODE5NywgMCwgNjk5LCAwLCA0MTY2NSwgNTg2OCwgCiAgICAgMCwgOTI2OTUsIDQyMTgyLCA3NTgxLCAxOTk0MCwgNDM2NjgsIDQxNjY3LCAxMjgwNTcsIDAsIDE5MjMsIDY1NTgzLCAKICAgICA2NTgwMiwgOTM5NzAsIDY0NTk3LCA0MzQ0NCwgMTE5MTg0LCA5MjE5NywgMCwgNjQ2NCwgNzAzNiwgMjk5NiwgMTkzNywgCi0gICAgOTgzNzQyLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAxMTAxNywgMTIwNjAxLCAwLCAyOTMsIAorICAgIDk4Mzc1MSwgMCwgNDE4MzUsIDQwNDcsIDQxODQyLCAwLCA2NDEwNywgMCwgMCwgMTEwMTcsIDEyMDYwMSwgMCwgMjkzLCAKICAgICA3Nzk2NiwgOTIxNjksIDY0NzkxLCA0MTgyNywgNDI0NjYsIDQzNDIyLCAxMDU3OSwgODU2MCwgNzEzNTAsIDY1NDEzLCAKICAgICA3Nzk2MywgNDgwMywgMTI5NjQsIDE3MzksIDE5NDEsIDM5MDAsIDAsIDE3MTMsIDc3OTY5LCAwLCA3Mzk1NywgMTE0MDcsIAogICAgIDQyNDQxLCA0MTk3MSwgNjI5NywgMTIwMDk4LCA2NDEwNSwgMTI4MDgwLCA0MjQ4MSwgMTE3MTYsIDY2NDczLCA3MTc5LCAKQEAgLTE4ODk0LDMzNyArMTg5MTMsMzM4IEBACiAgICAgMzY1OSwgOTUzMywgMTg0LCAxNTUzLCAxMzEwNywgNjU0ODQsIDY5NjQ4LCAxMDUwMiwgNzQ0NTcsIDAsIDAsIDQxNTU0LCAwLCAKICAgICA4MjIwLCA5MTc5NDMsIDQxNTU3LCAwLCAwLCAxMTA3MCwgMTE5MjIxLCA1MTU3LCA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIAogICAgIDY0ODE4LCA2NTEwMywgNjQ2NDEsIDY0MzAzLCA3ODEzMSwgNzUyMCwgMCwgNzQzNzcsIDExMDI5LCA2NjY1MSwgOTgzMDY4LCAKLSAgICAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgOTgzNzg5LCAxMjczNDgsIDEyMDA5NiwgNzQ2MDIsIDk5NTUsIAorICAgIDAsIDExODkzMCwgNjQ1MjcsIDAsIDc4NzcsIDczODAzLCA5ODM3OTgsIDEyNzM0OCwgMTIwMDk2LCA3NDYwMiwgOTk1NSwgCiAgICAgMTE5NTU3LCA0MDU1LCA0MjgxNywgMCwgNjUyMTIsIDExNzE1LCAxMjE5MCwgMTIzMTksIDc4NjMwLCAwLCA3ODYzMSwgCiAgICAgOTUwMiwgNjU0MjcsIDAsIDY1NDI0LCAxMjYwNywgMCwgOTczNCwgNjU0MjUsIDAsIDAsIDEyNzM1NywgNzg4MzUsIDkyNDEwLCAKICAgICAxMDExMiwgMTA4MjcsIDAsIDk4NjYsIDc0NTI3LCA2NjY3NSwgMCwgODYyNSwgNjQzNDYsIDExMjkwLCAxMDQ3NywgMCwgCi0gICAgODYzNiwgOTgzOTE4LCA4MzE1LCA2NTQ0NCwgOTgzNzg0LCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMTI3MTA4LCAKKyAgICA4NjM2LCA5ODM5MjcsIDgzMTUsIDY1NDQ0LCA5ODM3OTMsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAxMjcxMDgsIAogICAgIDEyMDE3MSwgMCwgNzQ1ODksIDQzOTkzLCAwLCA2OTc5MCwgNjQ0MzUsIDAsIDQzNjkwLCAxMTA0NiwgMTE0OTAsIDQyNzMwLCAKICAgICA0NDg1LCAxMjcxMDcsIDAsIDY0OTI2LCAwLCAwLCAwLCA1ODY5LCAxMjQzNywgNDI3MjgsIDAsIDcwNDAsIDM1ODgsIDAsIAotICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMCwgNzg2NDIsIDIyMywgMCwgNjk2NzUsIDEyMDE2NiwgNDI0NDQsIDAsIDY0NDk5LCAKLSAgICA2NTI0NSwgMCwgMTE3MSwgMCwgNjk3MTcsIDAsIDE4MDUsIDg3NzIsIDQzODIwLCAwLCA5OTMwLCA2NTI0NywgNzg2MTksIAotICAgIDEyMDExMSwgMjMzOCwgMCwgMTE4ODUzLCAwLCA0MjY3NiwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgNjgxMjYsIDEyMTMsIAotICAgIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAxMjczNjksIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCA2NDA3MCwgCi0gICAgNjQwNzMsIDEwNjc5LCAwLCA3Nzk1NCwgOTQwMiwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCAKLSAgICAyMTIwLCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDc0MTkyLCAxMDcwMSwgMTc2NCwgMzEwMSwgMTI3ODE1LCAxMjg1OCwgCi0gICAgMTIwMTU5LCAwLCAxMTM3MywgNjM3OCwgMTI3ODU5LCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAyMTI5LCAwLCAKLSAgICA5MjIyLCA5ODM3MjksIDAsIDQyNTksIDkwOTIsIDc0NTY3LCA0MTk2MSwgMCwgMTI3MjQsIDY2MzU3LCA0MjMzMSwgNjQ5MzUsIAotICAgIDAsIDAsIDEyOTMsIDc5NDcsIDIxMzIsIDk4Mzc1OCwgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNDI3MTcsIDM2MTMsIDEyODgzNywgCi0gICAgMCwgMCwgNjU4ODgsIDg4MTYsIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgMTIwMzA0LCAKLSAgICA5ODMxMTQsIDg4MjIsIDAsIDExNTcsIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCA2OTg0OCwgODIzNSwgMTIwMzE2LCAKLSAgICA0NDA1LCAxMDA4NiwgMTIwMjQ3LCAwLCA2OTIxNiwgMCwgNjU0MzAsIDcxMzIxLCA2MDc5LCA2ODE3LCAxMDc2NCwgCi0gICAgMTI3OTEwLCA2NDI5MSwgMTI4MDUxLCA5OTgsIDEyMDMxMiwgMTEwNjIsIDEzMTcsIDY0MzI3LCAxNTU4LCAwLCAxOTkxLCAKLSAgICA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIDExOTMzNiwgNTc0MiwgNDMwNzYsIAotICAgIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIDY1OTUsIDY1OTYsIDEyMDMyNSwgCi0gICAgNjYzNzMsIDAsIDAsIDY0OTA4LCA5MjY5MSwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIDQzMTA4LCAxMjAzMjYsIAotICAgIDAsIDQxNzA1LCA5MjE4OCwgNjU5OCwgMCwgNjU5OSwgMTIwMzM0LCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgMCwgNjU5NywgCi0gICAgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAyMjgxLCA2OTkwNCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIDI0MzAsIDQxNjc4LCAKLSAgICAwLCAxMjAyNDMsIDIzMzYsIDk4Mzg5NCwgMCwgNzg4NzEsIDEyMDQ0MiwgOTgzNzYwLCAxOTIxLCAxMDk0NywgMTk5MjcsIDAsIAotICAgIDY1NDA2LCAwLCAxOTkxMywgNDI4NCwgMTMyMTcsIDAsIDQzNzg5LCAxMjg0MSwgOTIyOSwgMTA5NTYsIDQyMjg1LCA0MTY3NCwgCi0gICAgMTk5NjQsIDQxNjc5LCA2NTA4NCwgMzUyMSwgMCwgNTc3NCwgODMyNSwgMCwgNjU0MDMsIDk4MzA4OSwgMTg1NCwgMTA3OTQsIAotICAgIDAsIDY3NjYwLCA2OTg0NiwgMCwgNzgzNTksIDUyODAsIDAsIDQzNDQsIDEyOTA1LCA2NTQzMywgNjA3NiwgNjQ3OTMsIAotICAgIDQxNjEwLCA3NjgsIDEyMDc0LCA0NDIsIDAsIDY4MTYyLCA2NDA4MSwgMTI5MzQsIDQxNjgyLCA2NTQzMiwgNDE2OTMsIDAsIAotICAgIDYwNzEsIDY1NDM0LCAxMjc0NjcsIDQ4MDQsIDQwNTMsIDAsIDEyNzQ2OSwgMTk0NjUzLCA0MTY5NiwgNDY3LCA2OTgyMywgCi0gICAgMTI3NDYzLCA2OTc5NywgMTk0NjUyLCAxMjc0NzMsIDg0MjEsIDEyNzQ3MiwgNjk2ODIsIDQzNzA1LCA1MDIsIDAsIDY1NDMxLCAKLSAgICAxMTkwNTYsIDY5OTU0LCAxMjA0MywgMTMwMywgMzE2LCA3MzY0LCAyMDI5LCAyMTM2LCAxMTkyNDYsIDExNTMzLCA2NDM2NSwgCi0gICAgNDM0ODAsIDkyNjM5LCA0ODYwLCAxMjY2NDgsIDEyNzg3NywgNDI0ODgsIDAsIDk1ODMsIDEyODg0OSwgNTU0NiwgODAxOSwgCi0gICAgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgNzc5ODksIDYzNzUxLCAxMjEzNywgCi0gICAgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCA2ODM4OCwgNjU3MjYsIDYwNzcsIDEyODM1MiwgNjU0NTIsIDAsIDExMzAxLCAKLSAgICA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgMCwgMTMxOSwgMzA1MCwgNjU0MTAsIDAsIDAsIDc4MDE2LCAKLSAgICA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMTI4MTM3LCA0NjkxLCA5MjI0MiwgOTM0NSwgNjIxLCA5MjcwOSwgCi0gICAgMTI4MjIyLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAxMDU0NSwgCi0gICAgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIDkyMzYzLCA5OTk2LCAKLSAgICA4NTA4LCAwLCA3MDEyLCA4MTk1LCAxMjc4MzQsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCA1NDUsIDk1NzUsIAotICAgIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDY5ODU0LCA4ODU5LCA2ODIwLCA3NDM0NSwgNjUxMTAsIDEyMDc0MCwgMCwgMCwgOTExOSwgCi0gICAgMjc4NywgNzkyMCwgMTE4ODIzLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDAsIDAsIDc4MDIxLCA3ODAyMiwgNDEwLCAKLSAgICA3ODAyMCwgMTgwMiwgNzgwMTgsIDc0MTA3LCAwLCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIDY0Mzk2LCAxMDEyNiwgMTIxMTYsIAotICAgIDQxNjczLCAxMjAzNzAsIDExNDIyLCA3ODE0MSwgMTIwMzczLCAzODYwLCAxMjAzNjcsIDY4NDEyLCA0MTM0NSwgMTIwMzYyLCAKLSAgICAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMjEwNCwgNjQ4NTgsIDM2MSwgCi0gICAgMTIwMzU3LCA4NDUsIDAsIDQxNTYwLCAxMTk3MCwgNDU2MiwgOTE3OTIwLCAyOTI2LCA5MTc5MTksIDQ1NjksIDc0MTMwLCAwLCAKLSAgICA0MzQ4NywgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMTE4ODkxLCA2NTYyOSwgMCwgMTk0ODU4LCAwLCAwLCAxMjc1NDUsIAotICAgIDEyMDU0MywgMCwgMCwgNjI5MSwgMCwgNzg2MzksIDQxNjY5LCA3MDk0LCA5MTc5MjEsIDAsIDk4MzU4MSwgNzQwNTQsIAotICAgIDEyNzc1NCwgMTk1MDI5LCAwLCA4MzksIDk4MzMxMSwgNzY5NSwgODc2OSwgNjUyNDYsIDQ4MjksIDE5NDY2MywgNDg1OSwgCi0gICAgNjQ0NjcsIDAsIDk4Mzk1NCwgMTE4OTk4LCA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCAKLSAgICA5ODM4NTQsIDEyNzkzNiwgODA0LCAwLCAwLCAxMjI5OCwgMCwgNjY2NTMsIDAsIDY0OTI0LCAxMDA5MSwgNzM5MzEsIDk0NjgsIAotICAgIDc0MjQ1LCAwLCAwLCA3NDI0NiwgOTI1MDMsIDEyODM5LCA2NDY2OSwgOTIyMDIsIDAsIDEyNzksIDE0MjUsIDYyMjQsIAotICAgIDExOTIyOSwgMTEwNDksIDAsIDkyNjk3LCA0MzIzOSwgODQ4MiwgOTI0NDAsIDAsIDUwMzIsIDY5Njc3LCAxMTk0MCwgCi0gICAgNjc4ODgsIDY2NCwgMTIwNDM3LCA1MDM0LCAwLCAwLCAxMjc1MjUsIDQyNzAyLCA3Mzg4OCwgOTgzMTQ5LCAxMzI5NCwgCi0gICAgNjc4NzMsIDY0ODY5LCA2MDMyLCAwLCA5MTE1LCA3NDMwLCAxMjAzNzcsIDAsIDEyMDgxOSwgNjgzODcsIDEyMDE2OCwgCi0gICAgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCA0MTE2MiwgMTIwMTYwLCA2NDUyOCwgMTE2OSwgNDM0LCAKLSAgICA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAxMTg4NjcsIDEyODgwMCwgNTI0LCAwLCA3NDAyOSwgCi0gICAgNzg4LCA3NDAyNywgMCwgMTk0NjM4LCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIDQyNjM2LCAwLCA2OTcyNSwgMCwgMTIwNjU2LCAKLSAgICAwLCA2Nzg3NiwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDAsIAotICAgIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgNzM5MSwgODk4OSwgMjIxLCA2NTY4NiwgMCwgMCwgODAxMCwgNzE5MSwgCi0gICAgNDk2MiwgNjk3NzIsIDg4NTUsIDAsIDAsIDY0NDY5LCAxMjA0MjYsIDEwNTU1LCAwLCA0MzMzMywgOTIyOTksIDAsIAotICAgIDEyMDQyNywgMTA0NTEsIDAsIDY3NjUzLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIDk5NDcsIDEyMDE0OSwgNzgzMTcsIDM4NzMsIAotICAgIDgzNjcsIDAsIDEyMDE0NiwgNDM0MzMsIDQzNjQ5LCAxMTk4NywgMCwgMCwgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIAotICAgIDYyMTcsIDU4OTYsIDAsIDc2ODIsIDc0MDQ5LCAxNDYyLCAxMDIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDI1OTUsIDAsIAotICAgIDc0NDAyLCAxMTg4NjAsIDAsIDEyMDQxOSwgOTI0OTcsIDc0MDUyLCAwLCA5MjM3OCwgMTIwNTQ5LCAxMTkwODIsIDY0Mjk1LCAKLSAgICAxMjA0MTgsIDAsIDY0NzY1LCA3MzkyMywgMTIwNDE3LCAxMjA2NjIsIDY5OTIwLCAxOTQ3MDIsIDYyMTYsIDAsIDEwNzU1LCAKLSAgICA5NDU1LCAwLCA4MTI0LCAxMjcwNDIsIDk0NzAsIDY5NDQsIDEyNzU0MCwgMCwgNjk2ODAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIAotICAgIDAsIDAsIDAsIDQzNDI4LCA4MjA0LCAzNjE0LCAyODI3LCA5Njk2LCAwLCAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgNzg1NjIsIAotICAgIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIDQyNTk5LCA0MjU5NywgNDI3MDksIDEyMDQwOSwgMTI3MDQ0LCAwLCA4NTM3LCAwLCAKLSAgICAwLCA5MzU0LCA5ODMxNjQsIDEyODgzMywgNDExOTksIDEwMTIxLCAyMDI4LCAwLCA5ODMxOTQsIDY5NzE1LCAwLCAzMDYyLCAKLSAgICAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAxMjU4MCwgOTIyMDUsIDEyMDc3NywgMTIwNTAyLCAKLSAgICA0MTE1NSwgMCwgNzQwNzEsIDAsIDk4MzQ0OSwgMTI3MTMsIDAsIDAsIDAsIDc4NzcyLCAwLCAxNzM0LCAwLCAwLCAxMjcwNDAsIAotICAgIDY0NTk0LCAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgOTgzOTcwLCAxMjMwLCAwLCAwLCAzNTk3LCAKLSAgICA0NDQ2LCAxMDU4NCwgNzQyMzUsIDkyMjE1LCA0MDM3LCAxMjc5MzgsIDgzNTIsIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAKLSAgICAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIDAsIDcwMDgwLCA3MTMzOCwgMCwgODY2MCwgMTI2NDk1LCAKLSAgICAwLCAwLCA3ODc3MywgNzQ0ODIsIDQ0ODMsIDE3MDksIDY5NzIxLCA5OTA5LCA2MDgwLCAwLCAxMjAzNTgsIDE3NDYsIDEzMTUsIAotICAgIDg2NjcsIDAsIDAsIDEzMTQwLCA2NTg5OSwgMTA2MDQsIDAsIDQ0ODAsIDExMjY2LCAxMjgxNTIsIDEyMjYsIDY5MzAsIAotICAgIDY3OTc5LCA5ODM2ODEsIDYzNjAsIDEwODk3LCA0MTIzMCwgNjA1LCAwLCA3NDc4NSwgNjk4NzUsIDAsIDAsIDQxNTAwLCAwLCAKLSAgICAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAxMDg3NywgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIAotICAgIDEyODU1OSwgMTIwNzM2LCA3NDMxMiwgMzQ1LCAwLCA3NDQ1NiwgNjQ2MDYsIDk5MTcsIDAsIDkyMjMxLCA1MDM3LCAwLCAKLSAgICAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIDQxNTA4LCA0MTIwMSwgMzIzLCA0MzMyOCwgMCwgNDI2OTgsIDEyOTUsIDE5NDg1MywgCi0gICAgNDYyNSwgMCwgNDYzMCwgMTMxMTcsIDAsIDEyODc3MiwgNjUxMjMsIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIAotICAgIDY1NjY2LCAyNTE5LCA5MjM2OSwgNjU0MjAsIDkyNDc5LCAwLCA0MjUyLCA1MDQ5LCA0MjY1OSwgMTE5MDExLCA3MDYsIAotICAgIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgMCwgNjY3MDIsIDAsIDEyNjcwLCAxMDEzLCAKLSAgICAwLCA2NDkxOSwgNzA1LCAwLCA2NTQyMiwgMTI3ODAzLCAxMTgzLCAxMjY1MTksIDcwMTcsIDQyODUyLCAwLCA4MTU3LCAKLSAgICA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDk4Mzg2OSwgNzQwMzUsIDAsIDExOTEzLCA3Mzg3NCwgNjY5NiwgMCwgODkyMCwgCi0gICAgMTE5Mjk4LCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMjA1MSwgNjYyMjcsIDAsIDQxODQsIDAsIDAsIDEwMTc3LCA3Mzc3NywgCi0gICAgMTg1NywgMTk0NjU3LCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgNzgzMjIsIDQ2MjQsIDc4MTgsIAotICAgIDExOTE3MywgMCwgMCwgNzgwNSwgMCwgOTQwMDcsIDY5MzUsIDkyMjkyLCA3ODMyNSwgNzgzMjYsIDc4MzIzLCA0MzMyNywgCi0gICAgNDM5ODksIDExOTA0NiwgODQ5MiwgODI1MCwgODQ1OSwgMCwgODQ5NywgODQ5NiwgMCwgMCwgNzgzMzYsIDc4MzM5LCA5NTQzLCAKLSAgICA3ODMzNSwgNzgzMzIsIDc3ODMyLCA2NTg0OSwgNzc4MzEsIDk4Mzk1MiwgMCwgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIAotICAgIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDk4MzQ1MSwgMTk1MDYyLCA5OTQ5LCAxMTk4MjYsIDQzNjE3LCAxMTkyMTUsIDAsIAotICAgIDEyMDczLCAwLCAwLCA3Nzg2MywgMTMxMDgsIDEyMDYxNywgMTE0MzksIDQxNDY4LCA5ODM3NDgsIDAsIDUyOTIsIDU1MjcyLCAKLSAgICA5ODM4NzQsIDE5MzksIDUzMDIsIDM5NzAsIDkxNzg3OSwgMTI0NTUsIDE3OTMsIDAsIDAsIDAsIDY2NDMsIDkyNDc3LCAKLSAgICA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNjU5MjMsIDAsIDEzMjE5LCA5NTY5LCAwLCA3NDM4MywgMCwgNzQxOTcsIAotICAgIDAsIDU1MDAsIDg4MTMsIDAsIDAsIDc0NTY2LCA1MzIyLCAwLCA3ODM0MCwgNDM2MzEsIDUzMjQsIDY2NDQzLCAzNzg0LCAKLSAgICA0MTYxNCwgNjUyNjksIDYyMzAsIDc4MzQ5LCA3ODM0NSwgNDMzMjQsIDMzNjAsIDc4MzQ0LCAxMTUyMywgMCwgOTI0ODgsIAotICAgIDk5MjYsIDcxOTcsIDAsIDY4NDI5LCA0Mjg5NCwgNDE4MjEsIDEyNDksIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCAKLSAgICA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgCi0gICAgMCwgMCwgNzgwNzQsIDY5NDcsIDQxMTUyLCA4ODcsIDkyNDksIDY1NjUsIDc4NTEwLCA0MTk5MCwgNzg1MDksIDQxODExLCAKLSAgICA3NDQ2NiwgOTM5NjYsIDY2NzAsIDc3ODgyLCAwLCAwLCA0MzA5MiwgNDMzMjUsIDAsIDEwMTY4LCAwLCA5NzgxLCAxMjg2NTUsIAotICAgIDkxOTAsIDAsIDk2NjYsIDgyNjksIDY1OTQ0LCA3NDAwNSwgMTMwMTksIDExNjcwLCA2OTg2MCwgMzE1LCAxMjgxMywgCi0gICAgOTgzNDUwLCA3ODQzMiwgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgOTgzNjQ4LCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCAKLSAgICA3NDQ3NSwgMzA2NiwgOTIyMjAsIDY3ODQ3LCAwLCA5MjM1NSwgMCwgNzgzNjUsIDg3ODcsIDEyMDM3OSwgMTk0NjE2LCAKLSAgICA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTk0NjE0LCAwLCA2NDY1MiwgMCwgMTk0NjEyLCAwLCA3ODM2NiwgNDIwODgsIDAsIAotICAgIDE5NTA2MSwgNzE3NiwgNDM3NTYsIDEwMTM3LCA2MTIxLCAxMDk5NSwgNzgyNTksIDc0NTM0LCA4MTE5LCA2NDg3NCwgCi0gICAgOTE3ODE2LCAxMjcxOTksIDE5NDkzOSwgMCwgNzQ1MjUsIDAsIDAsIDEyOTMwLCAxMzk0LCA3NDUxNCwgMCwgNzQ1MTUsIDAsIAotICAgIDExODgwNCwgMjk5OCwgOTUyNywgMTIwNjU5LCA2NTE5MCwgMTI5NzcsIDQyMDkwLCAxMTkxNjUsIDAsIDExOTEwMCwgCi0gICAgNDEyMzYsIDkyMjM1LCA0MjAwNSwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAzNjcwLCAxMjg2NTcsIDE5NDYwMCwgMCwgCi0gICAgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAwLCA2MjI5LCAxNTkzLCAwLCAwLCA2MTksIDQ2MzUsIDY1MDgwLCAwLCAKLSAgICAxMjgwMDIsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMCwgMTE4MDgsIDExOTIxNCwgNzQxMTUsIDkzNjYsIDQyNzkwLCA0MjAwNiwgCi0gICAgMTE5MTE1LCA2NTMyNywgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIDY1MzIxLCA2NTMyMCwgNjUzMzUsIAotICAgIDY1MzM0LCA2NTMzMywgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCA5MjQyNywgOTEyOCwgOTQwNDUsIAotICAgIDQyMDczLCA2Nzg1LCA2NDU5MCwgOTgzODIxLCA0MzcxLCA3MTk2LCA2NTMxOCwgMjAzNSwgNjUzMTYsIDQxMDYsIDY1MzE0LCAKLSAgICA2NTMxMywgNDIwNzQsIDEyNzg0NywgNDEyMjgsIDAsIDY1NjA5LCA0MTI0MSwgNzkwMywgNDEyMzksIDQzNTMzLCA3ODQ1OSwgCi0gICAgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCA3ODQ1MCwgODQ4NywgOTEzMSwgMCwgNDYxNSwgMTI2OTUsIDEyNzc1MiwgCi0gICAgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCA1NjIsIDEyMTY5LCA2NTkwLCA2OTc2MiwgNjY0NTUsIDY0NzM4LCAKLSAgICAzMjE5LCA2ODY1NCwgOTgzNzc4LCAwLCAxMDM3LCAwLCAyMDI1LCAxMjgyNjMsIDEzMDk4LCA3ODQ0MiwgMTA2MzcsIDQ1NjgsIAotICAgIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgMTI3MTkxLCAwLCAwLCAxMjYwNiwgNzg0MzMsIAotICAgIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgOTIzMjcsIDczNjUsIDk4Mzc0NCwgMTIwNTkzLCAxMzA3MSwgMCwgCi0gICAgNDUyLCA0MTA0OSwgNDI4NDAsIDYzNDYsIDI4MzEsIDU0NjEsIDc0NTk2LCAxMTQ2NSwgNTIxMiwgMCwgNjQ3MDMsIAotICAgIDExOTE5MSwgNDIzMDgsIDcxODEsIDAsIDQxMzMyLCAwLCAxMjMzMywgMCwgMTY2OCwgMCwgMCwgMCwgMTE4NywgOTgzMzc3LCAKLSAgICA0MjYyOCwgNzg1NzUsIDAsIDEyODc3NywgMCwgMzI0MCwgMTI4NTE4LCAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCAKLSAgICA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDEyODg1NiwgNTcxLCAwLCA0OTE4LCAwLCA1Mjg4LCAxMjcyOTUsIAotICAgIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgOTI1MDgsIDExNTcxLCA3NjE1LCAxMjczMDAsIDkyMjk2LCAKLSAgICA0MjM3LCA5MjU3NiwgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDEyMDc1MSwgMTE0MDMsIAotICAgIDAsIDAsIDEyNzE0NiwgMzc5NiwgNjgwMCwgMCwgMzk5NCwgMTE0MjEsIDAsIDE5NTA3NiwgMCwgOTgzOTEzLCAwLCAwLCAKLSAgICA2NDg1NywgMTI4MTA1LCAyODU1LCAxMjc4MjgsIDY2MzA4LCA0MTYyMSwgNjgyMTQsIDEyNzI4MywgMTI3ODE3LCAxMDY1NCwgCi0gICAgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCAKLSAgICA3NDI3MCwgMTI4Mjg5LCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgMjM3OCwgNDMxMzYsIDEyNzkwNSwgODQ2NiwgCi0gICAgOTgzNTc1LCA5MzIwLCA4MDAxLCAxMjMyLCA4MTM5LCAxMTYxNywgMCwgMCwgMTE0MDksIDY4MzczLCA2MzgyLCAwLCAKLSAgICA2NDYzNCwgMTI4Mjc5LCAwLCAxMTYxMiwgMCwgNjc2MDAsIDIzNzQsIDk0MDY2LCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIAotICAgIDUyODYsIDExOTI5NywgMCwgMCwgNjQ5MjUsIDEyMDI4MywgMTk0NTg0LCAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIAotICAgIDExMzA1LCAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgCi0gICAgMCwgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCAKLSAgICA2NjAxMCwgMTE5NTUyLCA2MDc4LCA5OTU0LCAwLCAxNDc1LCAxMTkyNDcsIDk5MzgsIDYwODQsIDkxNzU0NiwgNDEwNjQsIAotICAgIDQxMDYyLCAwLCAwLCAzMjU2LCAxMDE4OSwgNDIwNzYsIDQzMjUyLCA3ODgyMywgOTE3OTA2LCA4NzI3LCAwLCA2NTg3NSwgMCwgCi0gICAgMCwgMTI3NzYyLCAxMDU2MiwgNzQyMTUsIDQzMDY1LCAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgOTAxNSwgNzEzNTEsIDAsIAotICAgIDM2MzUsIDY0MzM3LCA5ODMyNzMsIDAsIDAsIDcxOTUsIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIDAsIDAsIAotICAgIDY1NjEzLCA3NzkwOSwgOTI0MjAsIDczOTk3LCAwLCAwLCAxMTkyMTgsIDc5ODQsIDg2MDAsIDc0NDM0LCAxMjc3NzAsIAotICAgIDQxNzYsIDcwMDUwLCAyMDM0LCA5MjU1MSwgMTIwODA1LCA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDEyODg2MCwgCi0gICAgNzg1OTYsIDAsIDM2NDksIDEzMTQ5LCA0MjE0NSwgNDI3OTgsIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCA2NzY3NywgMTIwMTI0LCAKLSAgICA3ODY2LCAwLCAxMTQwMiwgNDIxNDYsIDk0MDMyLCA3NDIzOCwgNDI2NjQsIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIAotICAgIDE3NjEsIDExODEyLCA2NTM3OSwgNjgzODYsIDEyODE4NSwgMTE1OSwgMCwgNjk3MjksIDAsIDAsIDcxNzgsIDE5NDYzMiwgMCwgCi0gICAgNDE2ODAsIDAsIDEyODIwMywgMTE1MzQsIDE1MTQsIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgMCwgNjc4NzcsIAotICAgIDE5NDU2NywgMTI5ODksIDY2NDc0LCA5MzY4LCAxMjg0OCwgMTYyNCwgNDMyNzAsIDAsIDc0Mjc4LCAxMDgxOCwgMTI2NjQ0LCAKLSAgICA5OTUzLCAwLCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgOTU1NSwgODU5OCwgMTIwMjk5LCA2MTY5LCAxMjg3MSwgMTU1MSwgCi0gICAgMjc5OCwgNjUxNzYsIDQ5NTgsIDQyNzUyLCAxMTkwMjUsIDAsIDY3ODc1LCAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAxOTQ3NjgsIAotICAgIDAsIDY4MzY0LCA5ODMyMjIsIDQ4OTEsIDAsIDEwNjQxLCAwLCA3Mzc0NiwgMCwgNjgzNTIsIDAsIDczNzg3LCAxOTQ4MjksIAotICAgIDE5NDYzMywgNzE5OSwgNjQ5NTUsIDAsIDAsIDAsIDAsIDAsIDQyNjg1LCA0MjY3OSwgMTkzLCAwLCAwLCAwLCA0MjY2NywgMCwgCi0gICAgNTI3MSwgOTIzMTgsIDkyNTE3LCAxMTg4ODIsIDEzNjIsIDEzMjk3LCAwLCAxMjgwOTQsIDAsIDk4MzMyMywgNzM3ODksIDAsIAotICAgIDY2NTgsIDQ0MjYsIDAsIDkyNjI4LCA5ODM4MzMsIDkyMzE5LCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgOTgzMzIyLCAKLSAgICAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAwLCA0Mzc1NSwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDE5NDc3MSwgCi0gICAgNDU0OSwgMCwgMCwgOTgzMTU0LCAxMjc3NjMsIDEwODA3LCA5NTU4LCAxOTQ2MTMsIDAsIDg1MTUsIDg2ODgsIDEyODY2LCAKLSAgICA2NTMwOCwgMzI5NCwgOTgzMzI0LCA4NTI5LCAxMjgxMDEsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgMCwgOTI0NTgsIAotICAgIDczNzU3LCA2NjQ1NiwgNDIzNTksIDAsIDIwMzEsIDAsIDcyMDIsIDAsIDEyNjc2LCA0MjcyOSwgOTIxOTgsIDMyMTUsIDAsIAotICAgIDc3MTAsIDE2MTAsIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgMTIwNTM3LCA2NTkyNCwgOTk3NCwgMjI4LCA2NjM1NCwgMTUwMSwgCi0gICAgMCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDAsIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIAotICAgIDAsIDcxNTIsIDg1MDIsIDU3NjIsIDE5NjcsIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDc3OTc5LCAwLCAxMjY1MDcsIAotICAgIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgNDI1MzcsIDE1NTcsIDQzNTk0LCAxMjg2NDIsIDYzMzAsIDY4MDUsIDg2MzEsIAotICAgIDI1NDUsIDcwMDUyLCAxMjcxNjYsIDAsIDc0MTkwLCAwLCAwLCA5ODM3NzcsIDQyNzYyLCAwLCA0MjkxNCwgMTY1MCwgMjYyLCAKLSAgICAxNjM3LCAwLCA3OTAxLCAzMjM4LCAxMjgxNzMsIDQxODYxLCAwLCAxMjg1ODUsIDY1MTU4LCAxMDg2MCwgOTQwNTksIAotICAgIDQzNjU4LCA3NTI3LCAwLCA0MzMxOSwgNjQxOSwgMCwgNDUsIDAsIDY0NTg4LCA5Mzk4OSwgMCwgMTE5ODEwLCA3MTk0LCAKLSAgICA1MjkxLCAwLCA0MzY2NiwgMTMxMjksIDAsIDkwODQsIDAsIDg3MzcsIDAsIDEyODgxLCAwLCAxMjkwNiwgOTYzOSwgNzkxMiwgCi0gICAgMjYyMCwgMCwgMCwgMCwgOTgzODY2LCAxNzksIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgNzg0NDMsIDExODgxMywgOTgzODgxLCAKLSAgICAxMTg5OTYsIDExOTAwOSwgMjg1MCwgODA4NCwgOTgzMDg1LCA3Mzg1MCwgMjgwMSwgOTIyODQsIDQyMDY5LCAxMTk4MzksIAotICAgIDc0NzU0LCAxMTk4NDEsIDQyMDcyLCAxMTk4NDMsIDExOTg0MiwgMTAzOTgsIDk4MzA1NiwgMCwgODM3NywgMTI3MTE2LCAKLSAgICA4MjQ1LCA2ODQwMSwgMzE1OCwgOTIzOTYsIDM5ODMsIDQzNjU2LCA5MjMsIDExOTg1NywgMTE5ODU2LCAyOTIsIDEzMDAyLCAKLSAgICAxMTk4NDUsIDExOTg0NCwgMzIyMSwgMTc2MywgOTI0NjMsIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCA3MjUzLCAxMjcxMTAsIAotICAgIDY4MzkxLCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIDQzNTQyLCAwLCA2NDU3OCwgOTgzNjY2LCAzMjI4LCA2OTYzNiwgODc4MywgCi0gICAgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgCi0gICAgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCA5ODMxNzMsIDY0NTAwLCA0MzY3NCwgMCwgNjQ5NDcsIDE4NTYsIDAsIDAsIAotICAgIDYzNzksIDAsIDAsIDAsIDMyMDgsIDEyOTc1LCA3NDc3NSwgMTI3MzgwLCA5ODM5MjIsIDkyMzg5LCA3NDA3MiwgNTUyNjksIAotICAgIDAsIDAsIDk4MzY3NCwgMjAzMywgNzg1NzcsIDc4NTc2LCAxOTUwMjYsIDU1MjU0LCA3NzQwLCAwLCAwLCAwLCA3Mzk2NCwgMCwgCi0gICAgOTM5ODgsIDY3NjEyLCA2NTY3NCwgMTI4MjQ0LCA5NDExMCwgNDE2ODksIDAsIDc0MDA2LCA2NDkwOSwgNjY0NiwgMTE3OTAsIAotICAgIDc0MDE5LCAwLCAxMjgwNjYsIDEyODAzMSwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCA4MjU3LCAwLCAKLSAgICA4Nzc4LCA0MTY4OCwgMCwgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgNjY3MjEsIAotICAgIDExMzQyLCAxMjg1NjEsIDAsIDAsIDEyODIyNiwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIDk4Mzk0MiwgCi0gICAgMTI2NDY5LCAxMTk0NiwgMCwgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDk4MzE1NywgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAKLSAgICAxMDA4OSwgODcwLCA3NjQ4LCAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIAotICAgIDQzNjkyLCA0NTYzLCAwLCAwLCA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDEyNjYwNywgODY4LCA4NzMsIDc2NDIsIAotICAgIDAsIDg2OSwgODc0LCA3NjQ0LCAxMjA2NzQsIDg3NSwgNzkwLCAxMjgzMDMsIDAsIDAsIDAsIDY2MTgyLCA5ODMyNTAsIAotICAgIDU0MjksIDE5NTA1NSwgNjYxODAsIDEyNjQ4MCwgNjYxODEsIDY4NDUyLCA5ODMyODEsIDk4MzI0MiwgNDIwNjcsIDAsIAotICAgIDU0MzMsIDEwNjU3LCA3OTExLCAxOTQ2MjIsIDE1NDcsIDY2MTc2LCA0MjAxMiwgMTIwNTc2LCA1NDI1LCA0OTc3LCA5OTk5LCAKLSAgICA1MzE3LCA1NDIzLCA0NjExLCAwLCA2NzYzNywgMCwgOTY3OSwgNzQxMjIsIDAsIDAsIDAsIDY2MTk0LCA0NDE4LCA2NjE4NCwgCi0gICAgNDYyOCwgNDI0NSwgMTE5NjQ4LCAwLCAwLCAxODUxLCAwLCAxMjcxODksIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIAotICAgIDk4MzI3MCwgNDI3NzYsIDY2MTg3LCAxMjgzNywgODgyOSwgNzcxMSwgOTI3MTQsIDAsIDkyMzIxLCA0MzMxOCwgMCwgODgwOSwgCi0gICAgNjk4ODEsIDAsIDk4MzE0MiwgMTIwNjA0LCA5ODMwNTIsIDk4Mzg3MywgMCwgOTgzMjYyLCAwLCAwLCA3NDI3LCA5OTU4LCAKLSAgICA0NTg4LCA0MzY4MCwgMCwgNzQ0ODQsIDE5NDk2OCwgMjQzMywgMCwgMTE5NjIyLCAzMzUyLCA3NDM2MywgOTgzODc2LCAwLCAKLSAgICA3OTMsIDc0NDA0LCAwLCAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMTI4NTE5LCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgCi0gICAgMTE4ODc3LCAwLCA3ODM3LCA5MTc2MjUsIDgxOCwgNTMzNywgMTk0NjI4LCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIAotICAgIDEyNjU3NiwgMTIwNTk0LCA3NDA4NiwgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCAKLSAgICAxMjcxNzIsIDkxNzYwOCwgNDk2OSwgMTI1NCwgOTE3NjA1LCA5MTc2MDQsIDkzOTY3LCA5MTc2MDIsIDY1MjI4LCA3ODIyMSwgCi0gICAgMTI2NjEyLCAwLCAyODQwLCAwLCAxMTk5ODIsIDk4MzkzMCwgMCwgMzI0NSwgOTA2OCwgNjgxOTQsIDY0NzI1LCAwLCAwLCAKLSAgICAxMjk5MSwgMCwgMjY1MSwgNjgwMTYsIDk4MzI1NywgOTE3NjExLCAxMjcwMjYsIDEyODg4MywgMCwgMCwgNDM2NDgsIAotICAgIDEyMDgxMiwgMCwgNDMzMjIsIDkyNjYyLCAwLCAwLCA2NDM3MiwgOTI2OTgsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCAKLSAgICA3NDUyLCAzMjg1LCAxMjg3NzksIDEyNzgyMSwgMTE5OTg4LCA2NTYxMCwgMjM5MSwgMCwgOTIyNDgsIDY3MSwgMjUwLCAKLSAgICA3NDM0LCA2MTgsIDY2OCwgNjEwLCA0MjgwMCwgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCAKLSAgICA2MjgsIDM5MDUsIDczODEwLCAwLCAxMjgyNjYsIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTI4MTc0LCAKLSAgICA5ODMxOTIsIDQzMzcyLCA2NTk0NSwgMTI4ODM4LCAwLCAxMTk1OTAsIDAsIDAsIDAsIDk4NywgNjkyNywgMTE1NzIsIAotICAgIDQyMjYxLCAxMTQ2NCwgMzM2NSwgOTk3MSwgMCwgMCwgMTI4Mjk3LCAwLCAwLCAwLCAwLCAxMTMzNCwgNDMzMjYsIDEyNjA5LCAKLSAgICAxMTUxOSwgMTE1MDMsIDU1MzAsIDUyMTAsIDAsIDQ2MjcsIDk4Mzg4MywgNTIwOCwgMCwgMTI4ODQyLCAxMDMzMiwgNTIxOCwgCi0gICAgNzk3NiwgOTE1NiwgMCwgMzI0NCwgNTUyOSwgNjk2NDcsIDczODk0LCAxMjg4NTIsIDU0MzIsIDY0OTY1LCA1NTI3LCAKLSAgICA3NDAzMywgMTA1MTYsIDc3OTAsIDU1MjgsIDAsIDQyMTQwLCAxMjAyODEsIDAsIDAsIDQzNTQ1LCA5ODg3LCAwLCA0MDAwLCAKLSAgICA3NDI5LCA3NDI4LCA2NjUsIDc0MjQsIDMyMDYsIDEyMDI3OCwgNzg4NCwgMCwgMTI4NTY2LCA5MTc5ODksIDEyODY2NiwgCi0gICAgMjExLCAyNTA5LCAxMjg4NTgsIDEyMDU3MywgNjg2NzIsIDMyMjAsIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgCi0gICAgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIDEyNzI1OCwgNTg1MiwgMCwgMCwgMTI3MjU5LCAxNzA4LCAwLCA5ODMxNjUsIAotICAgIDI2MjMsIDExOTQzLCAwLCA2OTIyNiwgMCwgNDY5OCwgNjY1MDksIDEwNjYsIDExOTkyMSwgNDcwMSwgOTgzODY3LCAKLSAgICAxMjAyODUsIDc0MjI1LCA5NDExMSwgODI2NywgMCwgMTI3MjY1LCAwLCA3NTE2LCAwLCAyNjI1LCA5ODM5NjgsIDgwMzQsIAotICAgIDc0MzA5LCAwLCAzNjMxLCAxMDk1NSwgNzg1MCwgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCA0MzM4NCwgMTI2NjAsIDAsIDAsIAotICAgIDAsIDc0ODUwLCA0MTA2OSwgMCwgMTI4MTU2LCAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgCi0gICAgMCwgOTgzMjU0LCA2NjM2OCwgNTAxNywgNjQ5NTYsIDcwNzEsIDAsIDExOTE0NCwgMTAzMCwgMTE4ODAwLCA5ODMxMjAsIAotICAgIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAwLCAxMjAzNTAsIDAsIDYzMzksIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgCi0gICAgMTg4MCwgNzQ3NjYsIDk4MzgyOSwgODkwOCwgMCwgMTI4NzA3LCA2NTkxMywgNzg0NzAsIDEwNzUyLCAxMzAwMywgMCwgCi0gICAgMTI2NTcyLCA0MTMwNywgODczMiwgMTIwMzM4LCAwLCAxNzU3LCA2OTY0LCA0Njk2LCAwLCAxMjAzMzUsIDY0Nzg1LCA3Mzk0LCAKLSAgICAzNjQxLCA1NDE5LCAxMjgwNTUsIDAsIDEyNzg4MywgMCwgMTIwMzQ0LCA0Mzk4OCwgMCwgODYxMCwgNDMwNjIsIDc1OTIsIAotICAgIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDY5ODk0LCA0MzE3MSwgMTQ1OSwgMCwgNjUyNDMsIDc4NjM4LCAxOTk1MywgMCwgCi0gICAgMTUwNCwgNzAwNjQsIDAsIDEyOTEzLCA3NDIwNiwgNzUyOSwgMCwgMTI4Njk5LCA5ODM5NDgsIDEyMDc4MiwgNDExMywgMCwgCi0gICAgMjM3MiwgMzM2LCAwLCA3NTA5LCAxMjE1MiwgMCwgNjgyLCA2NjQ1OCwgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgCi0gICAgMCwgOTgzOTQ2LCA4MDMzLCA2OTk1MywgMCwgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgMCwgNDIzNTEsIDEwMTA5LCAKLSAgICA5MTc2MjMsIDAsIDE5NDY5MywgMCwgOTI2OTAsIDAsIDAsIDc0MjkxLCAxOTY1LCA3MDY5LCA0MzMxMiwgMCwgNzM4ODcsIDAsIAotICAgIDIwODcsIDY0MzcwLCA2MzE0LCA0MTcxNCwgODUwMSwgMCwgMCwgNzQyMzksIDQxMzE3LCA5MjYxNCwgMjA5MSwgNzQ1NDUsIAotICAgIDIwOTAsIDAsIDkzNTMsIDcxMTcsIDIwNzcsIDc3ODg2LCAwLCAxMDQ5OCwgMjA4MywgNzc4ODgsIDAsIDAsIDExOTIzNiwgCi0gICAgNjM0LCAwLCAwLCAwLCA2OTc3OSwgNDE2NSwgODc0NiwgMCwgOTY1NCwgMTI4NTYsIDY5MjQsIDAsIDcwNjYsIDk4MzcxMCwgCi0gICAgMCwgMTI4MTM1LCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCA0MTAzOSwgMTI3NDgzLCAwLCA2ODAsIDIzMDIsIAotICAgIDEyODIwMCwgMTE4MSwgNzA1NiwgMzE3NCwgMTI2NTE2LCAwLCA5MjY2OCwgNjU2NjUsIDEyNzM3NSwgMTI2NTA2LCA2OTIwLCAKLSAgICAwLCA5MjI5NSwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgMTI2OTgxLCA3NDExOSwgMCwgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIAotICAgIDY1MzAyLCA0MDk4OSwgMCwgMTk0Njk2LCAwLCA0Mjc2MCwgMCwgOTgzNTY2LCAwLCA0MDk4NywgNDY2NywgMCwgOTgzOTIzLCAKLSAgICA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgNDc0OSwgOTI2NzUsIDAsIDkyMSwgNDc0NCwgMCwgMTI3MDIsIAotICAgIDI0MiwgMCwgMTU2NiwgODIxNywgMCwgNjQ2NTMsIDc4Mzg2LCAxMjgxMjEsIDc0MDM2LCA3NDUwNSwgNDMyNzQsIDUzMTMsIAotICAgIDk1MSwgMCwgMCwgOTgzODU4LCA3NjA0LCA5ODMyODIsIDQwMDksIDEyNzgxNiwgOTgzNzAxLCAxMjA1NjIsIDAsIDk4MzcxMSwgCi0gICAgNjQ4NjAsIDExOTEzOCwgMTE5MDY5LCAwLCAxMjczNzAsIDQwNDgsIDk4MzU5OCwgMCwgNzAwMjQsIDE2NDYsIDc3ODkwLCAKLSAgICA2NDUzNCwgNzM5OTUsIDEyMDcwNSwgMCwgMTE5ODkwLCAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAKLSAgICAzNDQxLCAxMTk4OTQsIDI5NzUsIDc0NDQyLCA5ODIyLCA5ODM5MjYsIDU1MjIwLCAxMDA4NCwgNzM5NDMsIDExODg0MCwgMCwgCi0gICAgOTE3NTYyLCAxOTQ2MTAsIDMzOTksIDk4NTEsIDk4MzcwOCwgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIDY3ODksIDAsIDAsIAotICAgIDAsIDcxMzY3LCAwLCAwLCAxNzc3LCA5MTUxLCAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMTI4NTc0LCAKLSAgICAxMjgyMTgsIDAsIDAsIDU5ODksIDAsIDAsIDEyODA5MSwgMCwgNDE2ODUsIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgCi0gICAgOTgzMjE0LCA1MTksIDAsIDExNzQwLCA1NzY2LCAwLCAwLCAyNjAwLCA4ODQ4LCAxMjAxMzgsIDQxMjk3LCAwLCAzNjY2LCAKLSAgICA3NDQ3MywgNDEzMDAsIDc0NDY4LCA2NTE2MCwgMCwgNjk2ODgsIDY5NzcxLCA3NDQ3OSwgMCwgNjU1OCwgMCwgMCwgNjk3NjUsIAotICAgIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgMCwgNjk3NjMsIDAsIDExNzI5LCA4NzE5LCA5MDYwLCAwLCAxMjAxMzksIAotICAgIDEwNzYxLCAwLCAwLCAwLCAxMTg3OTIsIDExNzM0LCA5ODMyMjEsIDExNzMwLCAwLCA5NTkzLCA1NzU3LCAyNDAzLCA2NDgwOCwgCi0gICAgNTUyNzUsIDAsIDExNzI4LCA0MzU3MiwgMCwgMCwgNzc2NCwgOTgzNzA1LCAxMTA5NCwgMTIwODI1LCAwLCAwLCA0MjgyLCAKLSAgICA4Mjk4LCAwLCAwLCAwLCAwLCAwLCA2NDQ0OSwgMCwgMTI2NjUwLCA2Mzg1NCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCAKLSAgICA3ODI1MCwgMCwgNzc3NCwgMTA2MDcsIDk3OTIsIDAsIDAsIDAsIDAsIDEyMDc2NCwgMCwgMTAwMTksIDc0NzYyLCAwLCAKLSAgICAzNDU4LCA0MzY1LCA3MDA1MywgOTgzNzAzLCAzNjQ3LCAwLCAyNjAyLCAxMjgzNDEsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIAotICAgIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMTI2NDc2LCA5MjE5MywgNzU5NywgCi0gICAgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAxOTQ1ODgsIDUzNDQsIDAsIDQzMzY2LCA0MzM2MywgOTA2MiwgMTE5MjUyLCAwLCAKLSAgICAwLCAwLCA2NDQ3OSwgOTIzMiwgOTI1OTYsIDAsIDAsIDE5NDcxMiwgMTA5MDAsIDQxNTMxLCAxMjYzLCAzNzIwLCAxMjA0OCwgCi0gICAgMCwgNjQyOTIsIDQxNTI0LCA3MjI3LCAxMTk2MzUsIDYwOTksIDQxNTM0LCAwLCAxMjczNTQsIDEyNzM0NSwgMjk5LCAKLSAgICA5MTc5NTcsIDg1MjUsIDEyNzM0NywgMzUyNCwgOTE3NTY1LCA4ODMxLCAxMjczNDksIDkyNTY0LCAzMDc1LCA2Nzg2NywgCi0gICAgMTI3MzUyLCAwLCA2NjM2MiwgMCwgNjQzNTMsIDAsIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIDY1MTE0LCAKLSAgICA2ODQ2MCwgMCwgNDMyODMsIDU1NTEsIDAsIDEyMDczNSwgMCwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgCi0gICAgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgCi0gICAgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIAotICAgIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgCi0gICAgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgOTgzMzcxLCAwLCA5ODMyMjAsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgCi0gICAgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIAotICAgIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCAKLSAgICA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCAKLSAgICA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCAKLSAgICA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIAotICAgIDExOTY2MSwgMCwgMCwgOTgzMzEzLCAxMjA3MzcsIDAsIDk4Mzk2MiwgOTgzMzEyLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCAKLSAgICA5ODMzMTcsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAKLSAgICAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzkxLCAwLCAwLCAwLCAwLCA2NTUxMCwgMCwgMCwgNTIzMywgCi0gICAgOTgzMzI3LCA2NDc5MiwgOTgzMzI2LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCAKLSAgICA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIAotICAgIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCAKLSAgICA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIAotICAgIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIAotICAgIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCAKLSAgICA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAKLSAgICAwLCA0Mjg4OCwgNjU3MTIsIDk4MzI5NiwgMzg2OSwgMTE5MzcsIDU3MjUsIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIAotICAgIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgCi0gICAgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgCi0gICAgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCAKLSAgICA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAKLSAgICAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCAKLSAgICA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgCi0gICAgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzc0LCAKLSAgICAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCAKLSAgICA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIAotICAgIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgCi0gICAgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgCi0gICAgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyODYsIDEzMDc2LCAzMTM1LCA5ODMyNzksIAotICAgIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgMTAxODMsIDAsIDI2MDgsIDE0NzAsIAotICAgIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgCi0gICAgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAKLSAgICAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAKLSAgICAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgNjk3NCwgMCwgMCwgOTgzMjA5LCA1MDAyLCAwLCAKLSAgICA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIDk4Mzk1MywgMTI4MjI5LCAwLCA0MTI4OSwgMCwgCi0gICAgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAxMjg2NjEsIDAsIDk4MzM2NywgNDEyNzksIDAsIDAsIAotICAgIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAKLSAgICAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyMCwgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIAotICAgIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIAotICAgIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgCi0gICAgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIAotICAgIDM3NTEsIDkxMjAsIDk4MzQ3NywgMCwgMTc5OCwgNzA5LCAwLCAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIAotICAgIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIAotICAgIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAKLSAgICAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgCi0gICAgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgCi0gICAgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCAKLSAgICA5ODM3MjgsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgCi0gICAgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCAKLSAgICA0MzM5OCwgMjU4MCwgOTgzODAxLCA0MTM0MSwgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgCi0gICAgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIAotICAgIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzcyNCwgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgCi0gICAgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCAKLSAgICA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTYsIDcwNjEsIAotICAgIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgCi0gICAgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIAotICAgIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgCi0gICAgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgCi0gICAgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgCi0gICAgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAKLSAgICAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgCi0gICAgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgCi0gICAgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIAotICAgIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIAotICAgIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgCi0gICAgNDc0MywgMCwgMCwgNzQwNDAsIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAKLSAgICAwLCAzOTY0LCA2NTkyLCAwLCAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgCi0gICAgNDIwNzAsIDY1NjMsIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzg4LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAKLSAgICAxMjc5NjksIDAsIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIAotICAgIDExODgyMiwgMTc1MCwgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg3OSwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIAotICAgIDExOTE0NSwgMCwgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgCi0gICAgNDUxMiwgMTE5MzYwLCA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIAotICAgIDM5NzUsIDAsIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCAKLSAgICA0MTA5NSwgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgCi0gICAgMCwgMCwgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAorICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMTI3MTA2LCA3ODY0MiwgMjIzLCAwLCA2OTY3NSwgMTIwMTY2LCA0MjQ0NCwgMCwgCisgICAgNjQ0OTksIDY1MjQ1LCAwLCAxMTcxLCAwLCA2OTcxNywgMCwgMTgwNSwgODc3MiwgNDM4MjAsIDAsIDk5MzAsIDY1MjQ3LCAKKyAgICA3ODYxOSwgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgCisgICAgMTIxMywgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDEyNzM2OSwgNjQzODcsIDQxMTUsIDAsIDUwMDUsIAorICAgIDY0MDcwLCA2NDA3MywgMTA2NzksIDAsIDc3OTU0LCA5NDAyLCA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgCisgICAgNjU0MzYsIDAsIDIxMjAsIDQzMzAyLCAxMjI0LCAwLCA2NTU3NiwgNzQxOTIsIDEwNzAxLCAxNzY0LCAzMTAxLCAxMjc4MTUsIAorICAgIDEyODU4LCAxMjAxNTksIDAsIDExMzczLCA2Mzc4LCAxMjc4NTksIDEyMDEwMywgODY2MywgOTMxMiwgNDE2NDQsIDQ1MzksIAorICAgIDIxMjksIDAsIDkyMjIsIDk4MzczOCwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAwLCAxMjcyNCwgNjYzNTcsIAorICAgIDQyMzMxLCA2NDkzNSwgMCwgMCwgMTI5MywgNzk0NywgMjEzMiwgOTgzNzY3LCA3NDU5MywgMTIwMzA4LCAyNDU0LCA0MjcxNywgCisgICAgMzYxMywgMTI4ODM3LCAwLCAwLCA2NTg4OCwgODgxNiwgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgNDMwODcsIDEyNTk1LCAKKyAgICAxMjAzMDQsIDk4MzExNCwgODgyMiwgMCwgMTE1NywgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIDY5ODQ4LCA4MjM1LCAKKyAgICAxMjAzMTYsIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzEzMjEsIDYwNzksIDY4MTcsIAorICAgIDEwNzY0LCAxMjc5MTAsIDY0MjkxLCAxMjgwNTEsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIAorICAgIDE5OTEsIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCAKKyAgICA0MzA3NiwgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgCisgICAgMTIwMzI1LCA2NjM3MywgMCwgMCwgNjQ5MDgsIDkyNjkxLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgNDMxMDgsIAorICAgIDEyMDMyNiwgMCwgNDE3MDUsIDkyMTg4LCA2NTk4LCAwLCA2NTk5LCAxMjAzMzQsIDAsIDQyMTQ4LCAxMTg4MjUsIDY2MDI3LCAKKyAgICAwLCA2NTk3LCA5NDEyLCA4MzQwLCAxMTgyNCwgNjQ3NDUsIDIyODEsIDY5OTA0LCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgCisgICAgMjQzMCwgNDE2NzgsIDAsIDEyMDI0MywgMjMzNiwgOTgzOTAzLCAwLCA3ODg3MSwgMTIwNDQyLCA5ODM3NjksIDE5MjEsIAorICAgIDEwOTQ3LCAxOTkyNywgMCwgNjU0MDYsIDAsIDE5OTEzLCA0Mjg0LCAxMzIxNywgMCwgNDM3ODksIDEyODQxLCA5MjI5LCAKKyAgICAxMDk1NiwgNDIyODUsIDQxNjc0LCAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAwLCA1Nzc0LCA4MzI1LCAwLCA2NTQwMywgCisgICAgOTgzMDg5LCAxODU0LCAxMDc5NCwgMCwgNjc2NjAsIDY5ODQ2LCAwLCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgMTI5MDUsIAorICAgIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAxMjkzNCwgCisgICAgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDEyNzQ2NywgNDgwNCwgNDA1MywgMCwgMTI3NDY5LCAKKyAgICAxOTQ2NTMsIDQxNjk2LCA0NjcsIDY5ODIzLCAxMjc0NjMsIDY5Nzk3LCAxOTQ2NTIsIDEyNzQ3MywgODQyMSwgMTI3NDcyLCAKKyAgICA2OTY4MiwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIDExOTA1NiwgNjk5NTQsIDEyMDQzLCAxMzAzLCAzMTYsIDczNjQsIDIwMjksIAorICAgIDIxMzYsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCA0MzQ4MCwgOTI2MzksIDQ4NjAsIDEyNjY0OCwgMTI3ODc3LCA0MjQ4OCwgMCwgCisgICAgOTU4MywgMTI4ODQ5LCA1NTQ2LCA4MDE5LCA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCAKKyAgICA3Nzk4OSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIDY4Mzg4LCA2NTcyNiwgNjA3NywgMTI4MzUyLCAKKyAgICA2NTQ1MiwgMCwgMTEzMDEsIDc4MDEzLCA3ODAwOCwgNzgwMTAsIDk4NzQsIDc4MDA3LCAwLCAxMzE5LCAzMDUwLCA2NTQxMCwgCisgICAgMCwgMCwgNzgwMTYsIDc4MDE3LCA0MjgzMCwgNDM5OTYsIDY2NzE2LCAxMjgxMzcsIDQ2OTEsIDkyMjQyLCA5MzQ1LCA2MjEsIAorICAgIDkyNzA5LCAxMjgyMjIsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgNzgwMjQsIDk0NzQsIAorICAgIDEwNTQ1LCAxMTkxMTgsIDEwODg3LCAzNzg2LCA2NTQwOSwgODg5NCwgNDMxNzksIDExOTYxMSwgNzkyMywgMzcxNiwgCisgICAgOTIzNjMsIDk5OTYsIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIAorICAgIDU0NSwgOTU3NSwgNDEzNzksIDEwMDUwLCAxMjcxOCwgNjk4NTQsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAKKyAgICAwLCAwLCA5MTE5LCAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIAorICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIAorICAgIDEwMTI2LCAxMjExNiwgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIAorICAgIDQxMzQ1LCAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCAKKyAgICA2NDg1OCwgMzYxLCAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgCisgICAgNDU2OSwgNzQxMzAsIDAsIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAKKyAgICAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgCisgICAgMCwgOTgzNTgxLCA3NDA1NCwgMTI3NzU0LCAxOTUwMjksIDAsIDgzOSwgOTgzMzE5LCA3Njk1LCA4NzY5LCA2NTI0NiwgCisgICAgNDgyOSwgMTk0NjYzLCA0ODU5LCA2NDQ2NywgMCwgOTgzOTYzLCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDQzOTg2LCAwLCAKKyAgICA2OTc2NiwgMCwgNjQ3NjQsIDQyMTAsIDk4Mzg2MywgMTI3OTM2LCA4MDQsIDAsIDAsIDEyMjk4LCAwLCA2NjY1MywgMCwgCisgICAgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgNzQyNDUsIDAsIDAsIDc0MjQ2LCA5MjUwMywgMTI4MzksIDY0NjY5LCAKKyAgICA5MjIwMiwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgMTE5MjI5LCAxMTA0OSwgMCwgOTI2OTcsIDQzMjM5LCA4NDgyLCA5MjQ0MCwgCisgICAgMCwgNTAzMiwgNjk2NzcsIDExOTQwLCA2Nzg4OCwgNjY0LCAxMjA0MzcsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIAorICAgIDczODg4LCA5ODMxNDksIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgCisgICAgMTIwODE5LCA2ODM4NywgMTIwMTY4LCA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAKKyAgICAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgCisgICAgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgCisgICAgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAKKyAgICAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAKKyAgICAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgCisgICAgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgMTIwNDI3LCAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgCisgICAgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgODM2NywgMCwgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAKKyAgICAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgNzQ0MDIsIDExODg2MCwgMCwgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIAorICAgIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgCisgICAgNjk5MjAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIDk0NTUsIDAsIDgxMjQsIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAKKyAgICAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgMCwgMCwgMCwgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIAorICAgIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgCisgICAgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIDAsIDkzNTQsIDk4MzE2NCwgMTI4ODMzLCA0MTE5OSwgMTAxMjEsIDIwMjgsIAorICAgIDAsIDk4MzE5NCwgNjk3MTUsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCAKKyAgICA5MjIwNSwgMTIwNzc3LCAxMjA1MDIsIDQxMTU1LCAwLCA3NDA3MSwgMCwgOTgzNDU3LCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIAorICAgIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCAKKyAgICA5ODM5NzksIDEyMzAsIDAsIDAsIDM1OTcsIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIDEyNzkzOCwgODM1MiwgCisgICAgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIDE5NDgwMSwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzAwODAsIAorICAgIDcxMzM4LCAwLCA4NjYwLCAxMjY0OTUsIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIDk5MDksIAorICAgIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgCisgICAgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgNjc5NzksIDk4MzY5MCwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIAorICAgIDc0Nzg1LCA2OTg3NSwgMCwgMCwgNDE1MDAsIDAsIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIAorICAgIDEwODc3LCAxMTg4NjgsIDY0ODg1LCA3NDI3MiwgMCwgMCwgMTI4NTU5LCAxMjA3MzYsIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCAKKyAgICA2NDYwNiwgOTkxNywgMCwgOTIyMzEsIDUwMzcsIDAsIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgNDE1MDgsIDQxMjAxLCAzMjMsIAorICAgIDQzMzI4LCAwLCA0MjY5OCwgMTI5NSwgMTk0ODUzLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgCisgICAgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIAorICAgIDUwNDksIDQyNjU5LCAxMTkwMTEsIDcwNiwgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAKKyAgICAwLCA2NjcwMiwgMCwgMTI2NzAsIDEwMTMsIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDEyNjUxOSwgCisgICAgNzAxNywgNDI4NTIsIDAsIDgxNTcsIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgOTgzODc4LCA3NDAzNSwgMCwgMTE5MTMsIAorICAgIDczODc0LCA2Njk2LCAwLCA4OTIwLCAxMTkyOTgsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgCisgICAgMCwgMCwgMTAxNzcsIDczNzc3LCAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDAsIDQ2MjksIDg0OTksIDc4MzIxLCAKKyAgICA3ODMyMiwgNDYyNCwgNzgxOCwgMTE5MTczLCAwLCAwLCA3ODA1LCAwLCA5NDAwNywgNjkzNSwgOTIyOTIsIDc4MzI1LCAKKyAgICA3ODMyNiwgNzgzMjMsIDQzMzI3LCA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAKKyAgICAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIDc4MzM1LCA3ODMzMiwgNzc4MzIsIDY1ODQ5LCA3NzgzMSwgOTgzOTYxLCAwLCAKKyAgICAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgOTgzNDU5LCAxOTUwNjIsIDk5NDksIAorICAgIDExOTgyNiwgNDM2MTcsIDExOTIxNSwgMCwgMTIwNzMsIDAsIDAsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgCisgICAgNDE0NjgsIDk4Mzc1NywgMCwgNTI5MiwgNTUyNzIsIDk4Mzg4MywgMTkzOSwgNTMwMiwgMzk3MCwgOTE3ODc5LCAxMjQ1NSwgCisgICAgMTc5MywgMCwgMCwgMCwgNjY0MywgOTI0NzcsIDY1MjYzLCAwLCA3ODMzMCwgNDEyOTMsIDc4MzI4LCA2NTkyMywgMCwgCisgICAgMTMyMTksIDk1NjksIDAsIDc0MzgzLCAwLCA3NDE5NywgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIAorICAgIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgCisgICAgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgCisgICAgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIAorICAgIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgCisgICAgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIDc0NDY2LCA5Mzk2NiwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCAKKyAgICA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDEyODY1NSwgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAKKyAgICAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCA5ODM0NTgsIDc4NDMyLCA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCAKKyAgICA5ODM2NTcsIDAsIDAsIDEzNzgsIDk1MDksIDAsIDAsIDc0NDc1LCAzMDY2LCA5MjIyMCwgNjc4NDcsIDAsIDkyMzU1LCAwLCAKKyAgICA3ODM2NSwgODc4NywgMTIwMzc5LCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAwLCAKKyAgICAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgMTk1MDYxLCA3MTc2LCA0Mzc1NiwgMTAxMzcsIDYxMjEsIDEwOTk1LCAKKyAgICA3ODI1OSwgNzQ1MzQsIDgxMTksIDY0ODc0LCA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIAorICAgIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgCisgICAgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIAorICAgIDM2NzAsIDEyODY1NywgMTk0NjAwLCAwLCAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIAorICAgIDYxOSwgNDYzNSwgNjUwODAsIDAsIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgCisgICAgOTM2NiwgNDI3OTAsIDQyMDA2LCAxMTkxMTUsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAxNTA3LCA0MjIxNiwgCisgICAgNjUzMjEsIDY1MzIwLCA2NTMzNSwgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCA2NTMyOSwgNDI2ODksIAorICAgIDkyNDI3LCA5MTI4LCA5NDA0NSwgNDIwNzMsIDY3ODUsIDY0NTkwLCA5ODM4MzAsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCAKKyAgICA2NTMxNiwgNDEwNiwgNjUzMTQsIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCAKKyAgICA0MTIzOSwgNDM1MzMsIDc4NDU5LCA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCAKKyAgICA0NjE1LCAxMjY5NSwgMTI3NzUyLCAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIAorICAgIDY5NzYyLCA2NjQ1NSwgNjQ3MzgsIDMyMTksIDY4NjU0LCA5ODM3ODcsIDAsIDEwMzcsIDAsIDIwMjUsIDEyODI2MywgCisgICAgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAKKyAgICAxMjcxOTEsIDAsIDAsIDEyNjA2LCA3ODQzMywgMjgyNSwgMCwgMTA4MjUsIDgwNzksIDI4MjEsIDQxMDQ2LCA5MjMyNywgCisgICAgNzM2NSwgOTgzNzUzLCAxMjA1OTMsIDEzMDcxLCAwLCA0NTIsIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgCisgICAgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgNDEzMzIsIDAsIDEyMzMzLCAwLCAKKyAgICAxNjY4LCAwLCAwLCAwLCAxMTg3LCA5ODMzODUsIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIAorICAgIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIDUzMjMsIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCAKKyAgICA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCAKKyAgICA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgOTIyOTYsIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgCisgICAgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAKKyAgICAxMTQyMSwgMCwgMTk1MDc2LCAwLCA5ODM5MjIsIDAsIDAsIDY0ODU3LCAxMjgxMDUsIDI4NTUsIDEyNzgyOCwgNjYzMDgsIAorICAgIDQxNjIxLCA2ODIxNCwgMTI3MjgzLCAxMjc4MTcsIDEwNjU0LCAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgCisgICAgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCAxOTQ4MjIsIDc0MjcwLCAxMjgyODksIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAKKyAgICAyMzc4LCA0MzEzNiwgMTI3OTA1LCA4NDY2LCA5ODM1NzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAKKyAgICAxMTQwOSwgNjgzNzMsIDYzODIsIDAsIDY0NjM0LCAxMjgyNzksIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgOTQwNjYsIAorICAgIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgNTI4NiwgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMTIwMjgzLCAxOTQ1ODQsIAorICAgIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgMTEzMDUsIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgCisgICAgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAwLCA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgCisgICAgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDk5NTQsIDAsIDE0NzUsIAorICAgIDExOTI0NywgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgNDEwNjIsIDAsIDAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgCisgICAgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIAorICAgIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCA3MTM1MSwgMCwgMzYzNSwgNjQzMzcsIDk4MzI4MSwgMCwgMCwgNzE5NSwgCisgICAgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIAorICAgIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgNDE3NiwgNzAwNTAsIDIwMzQsIDkyNTUxLCAxMjA4MDUsIAorICAgIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMTI4ODYwLCA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgCisgICAgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgOTQwMzIsIDc0MjM4LCAKKyAgICA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAKKyAgICAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCA0MTY4MCwgMCwgMTI4MjAzLCAxMTUzNCwgMTUxNCwgCisgICAgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMTk0NTY3LCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAKKyAgICAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIDEwODE4LCAxMjY2NDQsIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCAKKyAgICA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIDEyODcxLCAxNTUxLCAyNzk4LCA2NTE3NiwgNDk1OCwgNDI3NTIsIDExOTAyNSwgCisgICAgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDE5NDc2OCwgMCwgNjgzNjQsIDk4MzIyNCwgNDg5MSwgMCwgMTA2NDEsIAorICAgIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDE5NDgyOSwgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCA1MjcxLCA5MjMxOCwgOTI1MTcsIDExODg4MiwgMTM2MiwgCisgICAgMTMyOTcsIDAsIDEyODA5NCwgMCwgOTgzMzMxLCA3Mzc4OSwgMCwgNjY1OCwgNDQyNiwgMCwgOTI2MjgsIDk4Mzg0MiwgCisgICAgOTIzMTksIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCA5ODMzMzAsIDI0MTYsIDMzMTAsIDQyNzAzLCAwLCAzNzksIDAsIAorICAgIDQzNzU1LCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCA0NTQ5LCAwLCAwLCA5ODMxNTQsIDEyNzc2MywgCisgICAgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIDY1MzA4LCAzMjk0LCA5ODMzMzIsIDg1MjksIAorICAgIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCA5MjQ1OCwgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgCisgICAgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgMzIxNSwgMCwgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAKKyAgICAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIDY2MzU0LCAxNTAxLCAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgCisgICAgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgCisgICAgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgNzc5NzksIDAsIDEyNjUwNywgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCAKKyAgICA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgMjU0NSwgNzAwNTIsIDEyNzE2NiwgMCwgCisgICAgNzQxOTAsIDAsIDAsIDk4Mzc4NiwgNDI3NjIsIDAsIDQyOTE0LCAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIAorICAgIDEyODE3MywgNDE4NjEsIDAsIDEyODU4NSwgNjUxNTgsIDEwODYwLCA5NDA1OSwgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCAKKyAgICA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDkzOTg5LCAwLCAxMTk4MTAsIDcxOTQsIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgCisgICAgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAyNjIwLCAwLCAwLCAwLCA5ODM4NzUsIAorICAgIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCA5ODM4OTAsIDExODk5NiwgMTE5MDA5LCAyODUwLCAKKyAgICA4MDg0LCA5ODMwODUsIDczODUwLCAyODAxLCA5MjI4NCwgNDIwNjksIDExOTgzOSwgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIAorICAgIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgOTgzMDU2LCAwLCA4Mzc3LCAxMjcxMTYsIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgCisgICAgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAKKyAgICA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgCisgICAgNDM1NDIsIDAsIDY0NTc4LCA5ODM2NzUsIDMyMjgsIDY5NjM2LCA4NzgzLCAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDc4NTg1LCAKKyAgICA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgNzg1ODYsIDQzMzE2LCA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIAorICAgIDk4MzE3MywgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgMCwgMCwgNjM3OSwgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIAorICAgIDc0Nzc1LCAxMjczODAsIDk4MzkzMSwgOTIzODksIDc0MDcyLCA1NTI2OSwgMCwgMCwgOTgzNjgzLCAyMDMzLCA3ODU3NywgCisgICAgNzg1NzYsIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCA5Mzk4OCwgNjc2MTIsIDY1Njc0LCAKKyAgICAxMjgyNDQsIDk0MTEwLCA0MTY4OSwgMCwgNzQwMDYsIDY0OTA5LCA2NjQ2LCAxMTc5MCwgNzQwMTksIDAsIDEyODA2NiwgCisgICAgMTI4MDMxLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIDg3NzgsIDQxNjg4LCAwLCAKKyAgICA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCA2NjcyMSwgMTEzNDIsIDEyODU2MSwgMCwgCisgICAgMCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgOTgzOTUxLCAxMjY0NjksIDExOTQ2LCAwLCAKKyAgICAzMjU3LCAwLCAxMjMwNywgMTg0NSwgOTgzMTU3LCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIDEwMDg5LCA4NzAsIDc2NDgsIAorICAgIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgNDM2OTIsIDQ1NjMsIDAsIDAsIAorICAgIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMTI2NjA3LCA4NjgsIDg3MywgNzY0MiwgMCwgODY5LCA4NzQsIDc2NDQsIAorICAgIDEyMDY3NCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDk4MzI1OCwgNTQyOSwgMTk1MDU1LCA2NjE4MCwgCisgICAgMTI2NDgwLCA2NjE4MSwgNjg0NTIsIDk4MzI4OSwgOTgzMjQ4LCA0MjA2NywgMCwgNTQzMywgMTA2NTcsIDc5MTEsIAorICAgIDE5NDYyMiwgMTU0NywgNjYxNzYsIDQyMDEyLCAxMjA1NzYsIDU0MjUsIDQ5NzcsIDk5OTksIDUzMTcsIDU0MjMsIDQ2MTEsIAorICAgIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCA0NjI4LCA0MjQ1LCAKKyAgICAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDEyNzE4OSwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgOTgzMjAyLCA0Mjc3NiwgCisgICAgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCA2OTg4MSwgMCwgCisgICAgOTgzMTQyLCAxMjA2MDQsIDk4MzA1MiwgOTgzODgyLCAwLCA5ODMyNzAsIDAsIDAsIDc0MjcsIDk5NTgsIDQ1ODgsIDQzNjgwLCAKKyAgICAwLCA3NDQ4NCwgMTk0OTY4LCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCA5ODM4ODUsIDAsIDc5MywgNzQ0MDQsIDAsIAorICAgIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAxMjg1MTksIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAxMTg4NzcsIDAsIDc4MzcsIAorICAgIDkxNzYyNSwgODE4LCA1MzM3LCAxOTQ2MjgsIDkxNzYyMSwgNDEzNzYsIDExOTk3OCwgMTI2NTc2LCAxMjA1OTQsIDc0MDg2LCAKKyAgICA5MTc2MTUsIDkxNzYxNCwgOTE3NjEzLCAxMDk3MywgNjYzNTksIDEzNzIsIDEyNzE3MiwgOTE3NjA4LCA0OTY5LCAxMjU0LCAKKyAgICA5MTc2MDUsIDkxNzYwNCwgOTM5NjcsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAxMjY2MTIsIDAsIDI4NDAsIDAsIDExOTk4MiwgCisgICAgOTgzOTM5LCAwLCAzMjQ1LCA5MDY4LCA2ODE5NCwgNjQ3MjUsIDAsIDAsIDEyOTkxLCAwLCAyNjUxLCA2ODAxNiwgOTgzMjY1LCAKKyAgICA5MTc2MTEsIDEyNzAyNiwgMTI4ODgzLCAwLCAwLCA0MzY0OCwgMTIwODEyLCAwLCA0MzMyMiwgOTI2NjIsIDAsIDAsIAorICAgIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIDc0NTIsIDMyODUsIDEyODc3OSwgMTI3ODIxLCAKKyAgICAxMTk5ODgsIDY1NjEwLCAyMzkxLCAwLCA5MjI0OCwgNjcxLCAyNTAsIDc0MzQsIDYxOCwgNjY4LCA2MTAsIDQyODAwLCAKKyAgICA3NDMxLCAxMTUyLCA0MjgwMSwgNjQwLCAxMjA2NjYsIDc0NDgsIDc0MzksIDYyOCwgMzkwNSwgNzM4MTAsIDAsIDEyODI2NiwgCisgICAgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxMjgxNzQsIDk4MzE5MiwgNDMzNzIsIDY1OTQ1LCAxMjg4MzgsIDAsIAorICAgIDExOTU5MCwgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAKKyAgICAxMjgyOTcsIDAsIDAsIDAsIDAsIDExMzM0LCA0MzMyNiwgMTI2MDksIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgCisgICAgNDYyNywgOTgzODkyLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAKKyAgICA2OTY0NywgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgCisgICAgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgCisgICAgMTIwMjc4LCA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAyMTEsIDI1MDksIDEyODg1OCwgMTIwNTczLCAKKyAgICA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgCisgICAgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDk4MzE2NSwgMjYyMywgMTE5NDMsIDAsIDY5MjI2LCAwLCAKKyAgICA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NzYsIDEyMDI4NSwgNzQyMjUsIDk0MTExLCA4MjY3LCAwLCAKKyAgICAxMjcyNjUsIDAsIDc1MTYsIDAsIDI2MjUsIDk4Mzk3NywgODAzNCwgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAKKyAgICAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAxMjgxNTYsIAorICAgIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAwLCA5ODMyNjIsIDY2MzY4LCA1MDE3LCAKKyAgICA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIDk4MzEyMCwgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIAorICAgIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAxODgwLCA3NDc2NiwgOTgzODM4LCA4OTA4LCAKKyAgICAwLCAxMjg3MDcsIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCAwLCAxMjY1NzIsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIAorICAgIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDEyMDMzNSwgNjQ3ODUsIDczOTQsIDM2NDEsIDU0MTksIDEyODA1NSwgMCwgMTI3ODgzLCAKKyAgICAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgNjk4OTQsIAorICAgIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAxNTA0LCA3MDA2NCwgMCwgMTI5MTMsIDc0MjA2LCAKKyAgICA3NTI5LCAwLCAxMjg2OTksIDk4Mzk1NywgMTIwNzgyLCA0MTEzLCAwLCAyMzcyLCAzMzYsIDAsIDc1MDksIDEyMTUyLCAwLCAKKyAgICA2ODIsIDY2NDU4LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAwLCA5ODM5NTUsIDgwMzMsIDY5OTUzLCAwLCAKKyAgICA5ODEwLCAxMjcyNjksIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIDkxNzYyMywgMCwgMTk0NjkzLCAwLCA5MjY5MCwgMCwgCisgICAgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAKKyAgICAwLCAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIAorICAgIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCAKKyAgICA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgOTgzNzE5LCAwLCAxMjgxMzUsIDQxMDM3LCA0MjY5MiwgNzc4NiwgMTI5NTksIAorICAgIDQxMDM5LCAxMjc0ODMsIDAsIDY4MCwgMjMwMiwgMTI4MjAwLCAxMTgxLCA3MDU2LCAzMTc0LCAxMjY1MTYsIDAsIDkyNjY4LCAKKyAgICA2NTY2NSwgMTI3Mzc1LCAxMjY1MDYsIDY5MjAsIDAsIDkyMjk1LCAwLCAxMTg5NjUsIDAsIDY0NjQ0LCAxMjY5ODEsIAorICAgIDc0MTE5LCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCAKKyAgICA5ODM1NjYsIDAsIDQwOTg3LCA0NjY3LCAwLCA5ODM5MzIsIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCAKKyAgICA0NzQ5LCA5MjY3NSwgMCwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgNzgzODYsIAorICAgIDEyODEyMSwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgOTUxLCAwLCAwLCA5ODM4NjcsIDc2MDQsIDk4MzI5MCwgNDAwOSwgCisgICAgMTI3ODE2LCA5ODM3MTAsIDEyMDU2MiwgMCwgOTgzNzIwLCA2NDg2MCwgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgCisgICAgNDA0OCwgOTgzNTk4LCAwLCA3MDAyNCwgMTY0NiwgNzc4OTAsIDY0NTM0LCA3Mzk5NSwgMTIwNzA1LCAwLCAxMTk4OTAsIAorICAgIDI1NzksIDExOTkwNSwgMzE3NywgMTEzNTcsIDkwOTksIDQxMDcsIDM0NDEsIDExOTg5NCwgMjk3NSwgNzQ0NDIsIDk4MjIsIAorICAgIDk4MzkzNSwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCA5MTc1NjIsIDE5NDYxMCwgMzM5OSwgOTg1MSwgCisgICAgOTgzNzE3LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMCwgMCwgMCwgNzEzNjcsIDAsIDAsIDE3NzcsIDkxNTEsIAorICAgIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAxMjg1NzQsIDEyODIxOCwgMCwgMCwgNTk4OSwgMCwgMCwgCisgICAgMTI4MDkxLCAwLCA0MTY4NSwgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCA5ODMyMTYsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIDAsIAorICAgIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCAKKyAgICA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCA2NTU4LCAwLCAwLCA2OTc2NSwgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAKKyAgICAwLCA2OTc2MywgMCwgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIAorICAgIDk4MzIyMywgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCAKKyAgICA3NzY0LCA5ODM3MTQsIDExMDk0LCAxMjA4MjUsIDAsIDk4MzIyNiwgNDI4MiwgODI5OCwgMCwgMCwgMCwgMCwgMCwgNjQ0NDksIAorICAgIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAKKyAgICAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgMzQ1OCwgNDM2NSwgNzAwNTMsIDk4MzcxMiwgMzY0NywgCisgICAgMCwgMjYwMiwgMTI4MzQxLCAwLCAxOTQ3MDcsIDQxMTM1LCAwLCAwLCAwLCA2NDYzMSwgMTcyLCA0OTcxLCA0MTIxOSwgCisgICAgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgOTIxOTMsIDc1OTcsIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgCisgICAgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgMCwgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAKKyAgICAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgCisgICAgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAxMjczNDUsIDI5OSwgOTE3OTU3LCA4NTI1LCAxMjczNDcsIDM1MjQsIAorICAgIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCA5MjU2NCwgMzA3NSwgNjc4NjcsIDEyNzM1MiwgMCwgNjYzNjIsIDAsIDY0MzUzLCAwLCAKKyAgICAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIAorICAgIDk4MzIwMSwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIAorICAgIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCAKKyAgICA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIAorICAgIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgCisgICAgOTgzMzc5LCAwLCA5ODMyMjIsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIAorICAgIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgCisgICAgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAKKyAgICAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCAKKyAgICA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIAorICAgIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIDExOTY2MSwgMCwgMCwgOTgzMzIxLCAxMjA3MzcsIDAsIDk4Mzk3MSwgCisgICAgOTgzMzIwLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCA5ODMzMjUsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIAorICAgIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzk5LCAwLCAwLCAwLCAwLCAKKyAgICA2NTUxMCwgMCwgMCwgNTIzMywgOTgzMzM1LCA2NDc5MiwgOTgzMzM0LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIAorICAgIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIAorICAgIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCAKKyAgICA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgCisgICAgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIAorICAgIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIAorICAgIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIAorICAgIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAwLCA0Mjg4OCwgNjU3MTIsIDk4MzMwNCwgMzg2OSwgMTE5MzcsIDU3MjUsIAorICAgIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIAorICAgIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIAorICAgIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAKKyAgICAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAKKyAgICAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIAorICAgIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgCisgICAgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCAKKyAgICA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzgyLCAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIAorICAgIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIAorICAgIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAKKyAgICAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIAorICAgIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyOTQsIAorICAgIDEzMDc2LCAzMTM1LCA5ODMyODcsIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgCisgICAgMTAxODMsIDAsIDI2MDgsIDE0NzAsIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCAKKyAgICA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgCisgICAgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgCisgICAgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgCisgICAgNjk3NCwgMCwgMCwgOTgzMjExLCA1MDAyLCAwLCA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIAorICAgIDk4Mzk2MiwgMTI4MjI5LCAwLCA0MTI4OSwgMCwgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAKKyAgICAxMjg2NjEsIDAsIDk4MzM3NSwgNDEyNzksIDAsIDAsIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgCisgICAgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyOSwgCisgICAgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIAorICAgIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCAKKyAgICA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAKKyAgICAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIDM3NTEsIDkxMjAsIDk4MzQ4NSwgMCwgMTc5OCwgNzA5LCAwLCAKKyAgICAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIAorICAgIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgCisgICAgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIAorICAgIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCAKKyAgICA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIAorICAgIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCA5ODM3MzcsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCAKKyAgICA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCAKKyAgICA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCA0MzM5OCwgMjU4MCwgOTgzODEwLCA0MTM0MSwgCisgICAgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCAKKyAgICA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzczMywgCisgICAgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgCisgICAgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgCisgICAgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTgsIDcwNjEsIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCAKKyAgICA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgCisgICAgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIAorICAgIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgCisgICAgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIAorICAgIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAKKyAgICAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgCisgICAgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIAorICAgIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgCisgICAgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIAorICAgIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAKKyAgICAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgNDc0MywgMCwgMCwgNzQwNDAsIAorICAgIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAwLCAzOTY0LCA2NTkyLCAwLCAKKyAgICAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgNDIwNzAsIDY1NjMsIAorICAgIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzk2LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAxMjc5NjksIDAsIAorICAgIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIDExODgyMiwgMTc1MCwgCisgICAgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg4OCwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIDExOTE0NSwgMCwgCisgICAgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgNDUxMiwgMTE5MzYwLCAKKyAgICA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIDM5NzUsIDAsIAorICAgIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCA0MTA5NSwgCisgICAgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgMCwgMCwgCisgICAgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAogICAgIDEyODAzMiwgMCwgNDI1MzEsIDExOTEwOCwgMTUxMCwgMCwgODI1NiwgMCwgMTEzOTMsIDAsIDg4NzksIDEyODA3NSwgCiAgICAgOTI0NzQsIDg3NzAsIDAsIDAsIDc4Mzc3LCAxOTEwLCA4NjcxLCA3ODM3NCwgNDI4MywgMCwgMTI3MTE3LCA2ODM2MSwgCiAgICAgNzgzMTgsIDI2NTQsIDc4OTMsIDE5NTAwNywgMCwgMCwgMCwgNjUxMDYsIDQyNzYxLCAxMjg1NywgNDU4MSwgODQxMSwgCkBAIC0xOTIzNiwyOCArMTkyNTYsMjggQEAKICAgICA5MTc2MTksIDAsIDAsIDEwMDQzLCAwLCAxMTg2LCA0MTU3MSwgNjk5OSwgNjE3LCA5NDY0LCAxMjY2NDIsIDM2NzUsIDUyMDcsIAogICAgIDY1MDYyLCA1MjEzLCAxOTQ3NjksIDI2MTcsIDQxMzQ4LCA0MTU2OCwgMTI4ODAzLCAzMjUzLCAxMjA1MzUsIDAsIDg2MzAsIAogICAgIDEyODU0NCwgMCwgNTU5NiwgNTU0NSwgNzI4OCwgMjU4NiwgNjQ4ODcsIDAsIDUyMTcsIDcxMzM2LCAwLCAwLCAwLCA2NDI5MywgCi0gICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4MzgzNywgMCwgOTgzNjMyLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCisgICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4Mzg0NiwgMCwgOTgzNjQxLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCiAgICAgNjQ1NTgsIDEyNzEyMiwgMCwgMTI3MTIxLCAwLCAxMjc5MTMsIDAsIDU3ODQsIDk4MzEwMiwgMCwgMCwgNzAwMzMsIDQwMTEsIAotICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0ODgsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAorICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0OTYsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAogICAgIDU1OTgsIDEyMDcsIDEyMDUyMSwgNjY2ODksIDM1MDEsIDQyNTgyLCA0MzYwMCwgMTk0NzgwLCAwLCAxMTI0LCA1NTk3LCAKLSAgICAxOTQ3NzgsIDE5NDc3MiwgOTMyMSwgOTgzNDc2LCA5ODM0NzMsIDk4MzQ3NCwgMCwgMTcxOSwgNjgzNTYsIDY4MzU0LCAKLSAgICA5NjcxLCAxMTI1LCA0Mzk5LCAxMjc0NzksIDkxNzYxMCwgOTgzNDgwLCA3NjMxLCA1NDg4LCA3MTI4LCAxMjA1MzIsIDAsIAorICAgIDE5NDc3OCwgMTk0NzcyLCA5MzIxLCA5ODM0ODQsIDk4MzQ4MSwgOTgzNDgyLCAwLCAxNzE5LCA2ODM1NiwgNjgzNTQsIAorICAgIDk2NzEsIDExMjUsIDQzOTksIDEyNzQ3OSwgOTE3NjEwLCA5ODM0ODgsIDc2MzEsIDU0ODgsIDcxMjgsIDEyMDUzMiwgMCwgCiAgICAgNTQ5MSwgMCwgODkzNywgNDMwNDQsIDI2MDQsIDc0MTg3LCA1NDkwLCA0MzA0NiwgNTQ4OSwgNzIxMiwgMTE3NjgsIDQzMDQzLCAKICAgICA2MzAwLCAwLCA3MTIyLCAwLCA0MzkwLCA0NTQsIDQxMzk3LCAwLCA5ODc1LCA3NTkzLCAxOTQ3OTEsIDkyMjc0LCAxMTg5MTMsIAogICAgIDcyMDcsIDAsIDY1OTAxLCAyMzk0LCAyNTc1LCAwLCAzNzQ2LCAxMTAxNiwgNjU3NTIsIDEyMDAzNywgMCwgNDM0MjMsIAogICAgIDEyODY4MywgMTE5ODksIDAsIDAsIDAsIDAsIDAsIDgyNDksIDEyODE3MiwgMCwgNzg1MzEsIDY2NDAsIDc0ODA2LCAyNTk4LCAKLSAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ2NSwgCi0gICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NjksIAotICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjEsIAotICAgIDc0NDg2LCA5ODM0NTksIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKKyAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ3MywgCisgICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NzcsIAorICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjksIAorICAgIDc0NDg2LCA5ODM0NjcsIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKICAgICA3ODE0MCwgNzgxMzksIDE5NDk4NSwgODEyMSwgMTA0MzgsIDc0NDg3LCA0MjU3NCwgMTMyODUsIDU1MjYzLCAxMTkwNywgCiAgICAgMTk1MDAwLCA1NjkwLCA5MjI1NSwgOTM5OTIsIDAsIDQzMTgxLCAxMzA5NSwgMCwgMTI3ODU3LCA2NDQ5OCwgMCwgOTUwNiwgCiAgICAgNjk3OCwgMTk0OTkzLCA3Nzk5MiwgMCwgMCwgMTk0OTkyLCAwLCAxMjc4NDUsIDExMjIsIDMxNywgMCwgMCwgMCwgMCwgCiAgICAgMTkyMCwgMCwgMTAxNzMsIDgyNywgMCwgMCwgNzgzNzgsIDEyMDEyNiwgNTIyMywgMTMwNCwgMCwgMTE5NTY0LCA1MjI2LCAKICAgICAxMjYwMiwgOTQwNDQsIDAsIDkzMjksIDc3NTgsIDkyMzksIDQxMTczLCA1MjI0LCA1NDg3LCAxMjIyLCA1NjkyLCA0MTcyNSwgCiAgICAgNjkyMjksIDk2NzQsIDU2OTUsIDQxNzExLCA2NDYyNywgMTk5MDksIDAsIDc0NjA0LCA1NjkxLCAyODcsIDg2NiwgMjMzLCAKLSAgICAxMjc0OTAsIDk4MzQzMywgNDI4MTYsIDk0MDM2LCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgCi0gICAgNDExNzUsIDk4MzQ0MCwgOTgzNDM3LCA5ODM0MzgsIDUyOTYsIDk4MzQzNiwgNDI0OTIsIDQzNDAyLCA5MjQ2NiwgMzMwMiwgCisgICAgMTI3NDkwLCA5ODM0NDEsIDQyODE2LCA5NDAzNiwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIAorICAgIDQxMTc1LCA5ODM0NDgsIDk4MzQ0NSwgOTgzNDQ2LCA1Mjk2LCA5ODM0NDQsIDQyNDkyLCA0MzQwMiwgOTI0NjYsIDMzMDIsIAogICAgIDAsIDAsIDY1MTYsIDY1MTUsIDY1MTQsIDY1MTMsIDY1MTIsIDAsIDc4NTYsIDg2OTAsIDAsIDAsIDEyMTIyLCAxMTk2MDIsIAogICAgIDQzOTc2LCAwLCAxNzg1LCA2OTkyNSwgNjg2MjIsIDY1MTUzLCAxOTQ4MTAsIDUxMzgsIDAsIDAsIDExODg2OSwgMCwgNDU0MCwgCiAgICAgNDExODEsIDAsIDYyMDAsIDAsIDUxMzQsIDAsIDMyMiwgNDY0MywgNTEzMiwgMCwgNjM4OSwgMTI4NTMzLCA1MTQzLCAwLCAKQEAgLTE5MjY1LDcgKzE5Mjg1LDcgQEAKICAgICAxMjcwMTIsIDEwMjcwLCAxMDI4NiwgMTAzMTgsIDEwMzgyLCA0MzUyOSwgNjY0NzcsIDAsIDAsIDc0MTcwLCAwLCAzMjM0LCAKICAgICAwLCAwLCA3NDM3NiwgNDMxMzksIDExODgxNSwgMTI3MDg0LCAxMjA2MjcsIDg3NjcsIDAsIDc0NDg5LCA5Njk1LCAxMjA3NDYsIAogICAgIDUyMDEsIDAsIDYyMTUsIDEyNzE0LCA2MjE0LCAxMzEwMSwgMCwgMTk0OTk5LCA2NTI2OCwgMCwgMCwgMCwgMTEwMjcsIDAsIAotICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjYxLCAzMjAsIDAsIAorICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjcwLCAzMjAsIDAsIAogICAgIDg2NDcsIDAsIDMwNDksIDAsIDY0NzEsIDQyMDcxLCA0MzE1NiwgOTkyNSwgMTI3MzU2LCAxMjczNTUsIDY2NDc4LCA0OTYwLCAKICAgICA1NTQ5LCAxMjczNTksIDEyNzM0NiwgODQ4NSwgNDY3MSwgNTQxOCwgMTI3MzUwLCAzMzUxLCAxMjcwMDYsIDEyNzM1MSwgCiAgICAgMTA2MTAsIDU0MTQsIDMwNjQsIDYyMTIsIDQyODYsIDU0MjEsIDEyNzM0NCwgOTU1NCwgMCwgOTQwNDgsIDEyNzEwOSwgCkBAIC0xOTI3MywxNiArMTkyOTMsMTYgQEAKICAgICAxMjYwMywgNzEzMSwgMTE0MzAsIDQ1NjYsIDc1MTgsIDkzMTcsIDM4MDEsIDEwMzQyLCAxMDQwNiwgMCwgMTE5MjU5LCAKICAgICA0MjU3NiwgMCwgNTIwMCwgMTI2NjExLCA5MTc5NDgsIDAsIDkxODMsIDEyNzM2MSwgNzQ0NTgsIDczODI1LCAzOTUsIDU0ODIsIAogICAgIDUxOTgsIDQzNDksIDEwMzkwLCA3NDIwMiwgNTE5NiwgNDMyMjQsIDYxMTMsIDQyMDA5LCA1MjA1LCAwLCA0MzMwNywgMCwgCi0gICAgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDAsIDEyMDE0LCAxMDM3NywgODA5MywgOTA3OSwgCi0gICAgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKLSAgICA5ODMyMTMsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAorICAgIDExODk3MywgMCwgMTIxMzQsIDAsIDAsIDExODg0MywgOTEyNiwgNDM1LCA5ODM2MjQsIDEyMDE0LCAxMDM3NywgODA5MywgCisgICAgOTA3OSwgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKKyAgICA5ODMyMTUsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAogICAgIDMxNDksIDUzNTksIDEyMDEzNCwgMCwgNzkxNCwgNTM1NywgOTIxNzAsIDEyODY1OSwgMjYyNCwgNTM2NCwgMCwgMTE0MzEsIAogICAgIDEyMDAzMCwgOTEwMSwgMTEwNTgsIDc4Mjg4LCAwLCA3ODI5MywgNDIyNzEsIDc4Mjg5LCA0MjkxNywgMTIwNzkzLCAwLCAKICAgICA2NTU2NiwgNjcxNywgMTA2MTksIDQzMzYwLCA3ODM4NSwgNzgzODQsIDExODMyLCA3ODM4MiwgNzgzODEsIDc4MzgwLCAKICAgICA3ODM3OSwgOTMxOSwgNzA5NywgMTE5MDU1LCA3NzkwNiwgMzIzMiwgNzM4MjQsIDc0NTgxLCAxMjA2MzIsIDAsIDAsIAogICAgIDQxODg5LCA5MjQ1MywgMCwgMTE2MSwgNDE4OTUsIDc0MTAzLCA5NzAxLCA4NjIyLCAwLCAwLCA3MzgxOSwgMTIwNTg4LCAKICAgICA1MDEyLCA3NzkxMiwgNDEzNjIsIDY5ODYyLCA3ODI5NiwgMTE5MjEsIDAsIDExNzY5LCAwLCA2ODYwOSwgNDEzNjQsIDAsIAotICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAwLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDcxMzQsIAorICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAxMTYxMSwgOTE3LCA2ODQyMiwgMTE5OTE1LCA3MTM0LCAKICAgICA4MTk5LCA3ODM4OSwgMTE5OTE3LCA2NzcsIDExOTkxNiwgMCwgMTE5OTMyLCAxMjcxNjksIDAsIDAsIDAsIDMzNDksIAogICAgIDc0MTI1LCA3MDIyLCA4OTI3LCA0NzM5LCAwLCA1ODAyLCAwLCA4NjE1LCAwLCAwLCA0OTEsIDEyODgxOSwgMTAxOTAsIAogICAgIDEyMDY5OCwgNjU4MzcsIDEyODgyMCwgODQyNiwgMTEwOTIsIDk4OTEsIDAsIDQyNDk3LCA3MTEzLCA3NTg2LCA0MjMwNSwgCkBAIC0xOTMxMCwzMCArMTkzMzAsMzAgQEAKICAgICA1NTI1MiwgNzM5NzIsIDE0NDIsIDAsIDU4OTQsIDcwMDY5LCAwLCA0MTE3MSwgOTI1MTEsIDc0MzEzLCAwLCAxMzE2MiwgMCwgCiAgICAgMzMzNCwgMTk1MDEwLCAxMTg4MDMsIDc3ODgxLCA2NjAyMiwgMCwgMCwgMTY1MSwgMTI4NzcxLCA4ODYxLCAwLCAwLCAxMTQyLCAKICAgICAwLCA4MjcxLCAwLCA5ODMwNTgsIDEyNjY0NSwgMTI5MDMsIDAsIDQwMDIsIDQzNjI2LCAxMDQ0MiwgMTA2NzYsIDMzNDQsIDAsIAotICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAwLCA3ODg1MywgMCwgNzg4NTQsIAorICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAxOTQ2ODYsIDc4ODUzLCAwLCA3ODg1NCwgCiAgICAgMTIwMzYwLCAwLCAxMTc4NCwgMCwgNzgwMTIsIDQ3MDAsIDY2MzY2LCA3ODg1OCwgMTIwMzU5LCAxMTAxMiwgMCwgNzg4NTYsIAogICAgIDkyNDAwLCA3Nzg3OSwgNDk3MywgODc4NCwgNzc4NzcsIDc0ODA0LCA3Nzg3NCwgNzc4NjksIDc3ODcxLCA0MjQ0MCwgMCwgCiAgICAgNDMxMTgsIDAsIDQyMzY0LCA2Nzc0LCA2NzczLCA5MTc1NjAsIDEyMDM2OSwgMTAzNDYsIDEwNDEwLCA3ODg1OSwgOTI0MywgCiAgICAgMjQ2NCwgNzQyNjMsIDYxMDgsIDMzNzIsIDAsIDYyNDcsIDQzMTE3LCA3NDUyNiwgNzEyMSwgNzQxNjYsIDAsIDEyMDM1NSwgCiAgICAgOTI1MzcsIDAsIDAsIDE5NTAzNCwgMCwgMCwgMCwgNzAwODMsIDMzNTQsIDE5NTAzNywgNDE5MiwgOTI4OSwgMTE4OTk5LCAKICAgICA0MTE5MSwgMzg3NiwgMCwgNzAwNjcsIDEyMDY2MCwgNDM2OTYsIDQzMzgwLCAwLCA5ODMwOTEsIDAsIDAsIDExNjAzLCAKLSAgICA5ODM5NDUsIDAsIDY1ODksIDEyODU4OCwgMTk0Njc5LCAwLCAwLCA5ODM2OTEsIDAsIDAsIDQyNTcyLCAxMjgyNjQsIAorICAgIDk4Mzk1NCwgMCwgNjU4OSwgMTI4NTg4LCAxOTQ2NzksIDAsIDAsIDk4MzcwMCwgMCwgMCwgNDI1NzIsIDEyODI2NCwgCiAgICAgMTA2MzAsIDc0ODI3LCAxOTYzLCAxMTYyMiwgMTI3MDk4LCAxMTY1NCwgMCwgNzU1MCwgMTA2ODYsIDU5MDMsIDAsIDc4MDA5LCAKICAgICA0MTMyOSwgOTY2MiwgOTE3OTM3LCA2NDY5OCwgMzM2NiwgMTAzOTksIDAsIDU1NDIsIDExMDEzLCAxMjc5MjcsIDEyODMwMCwgCi0gICAgMCwgNzg2MjEsIDE5NDY3MiwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAxMTU2OCwgOTgzNjY0LCA0MzM2NywgNjQ1NzksIAorICAgIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDk4MzY3MywgNDMzNjcsIDY0NTc5LCAKICAgICA5MTc5MzAsIDc4NTIsIDAsIDAsIDY3NTQsIDYzMTIsIDAsIDY0NjcyLCA2NTI5NiwgMCwgMTE4OTU3LCAwLCA0MTYsIAogICAgIDEyMjk2LCA2ODQ1NywgNzM4MzQsIDY4MTc3LCAxMTA1MCwgMTA5ODQsIDkyMjA4LCAwLCAwLCA5MjE4MiwgMCwgOTgzNjA1LCAKLSAgICA5NTMyLCA2NjM1NSwgMCwgOTgzMjI4LCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDEyODI4MSwgMTk1MDMxLCAwLCAxOTUwMzAsIAorICAgIDk1MzIsIDY2MzU1LCAwLCA5ODMyMzQsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMTI4MjgxLCAxOTUwMzEsIDAsIDE5NTAzMCwgCiAgICAgMTk1MDU3LCAxMTQ0NSwgMCwgMjExMiwgMTk1MDU2LCAxMjg4MTQsIDEwMTg1LCAxMDIxLCAxMjgxMzAsIDk1MDcsIDEwMjEwLCAKICAgICA3NDU0NCwgODAyMywgMTIwMCwgMTIyNDMsIDc4MDAxLCA1MjgyLCA3ODAwMywgOTYyNCwgMTE1NDUsIDAsIDEyMDQ5MywgCiAgICAgMzM0MywgNDQyNCwgMTEwNDcsIDE4ODUsIDQzMjY4LCAzODk2LCA3ODQ0NCwgNjY0OTcsIDI5NDcsIDM5MiwgNzg5NCwgCiAgICAgNDM5MSwgNjgxMzksIDk4MzA2MiwgMTMwNTksIDc0ODE2LCA3Nzk5OCwgMzM4MSwgNzk0MiwgMCwgNjkyMTksIDAsIDY0NzU3LCAKICAgICAwLCAzOTEzLCAwLCAwLCA3ODIzNSwgNzA0NCwgMTI2NSwgMCwgNjMwOSwgNzA0NSwgNzE3NSwgNzA0NywgNzgyMzksIAotICAgIDExNzkxLCAwLCAwLCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgOTgzODk3LCA3ODMwMSwgOTgzNjQ0LCAKLSAgICA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDk4MzYyNSwgOTQwNjUsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCisgICAgMTE3OTEsIDAsIDAsIDgyMjEsIDc4MzA3LCA0MTg2NCwgMCwgMCwgMCwgMCwgMTY3LCA5ODM5MDYsIDc4MzAxLCA5ODM2NTMsIAorICAgIDc0MjExLCA0MTg5NywgNjg0NzcsIDAsIDkxNzU4MywgOTgzNjM0LCA5NDA2NSwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCAKICAgICA2NDM1NCwgMCwgODc3NywgMCwgNDA2LCA4ODg0LCAyMzg1LCAwLCA5MjQ1MCwgMCwgOTE3NTczLCA0MzAzMCwgNDIwMjcsIAogICAgIDEyMTE0LCAwLCA5MTc1NzksIDY0OTM2LCAxOTQ2OTUsIDAsIDEyMDYyOSwgMTA1NjEsIDAsIDgzNjUsIDEyMDUzOSwgCi0gICAgOTgzNzY1LCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIAorICAgIDk4Mzc3NCwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAKICAgICA5MTc1NzQsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIDc0MTU3LCA2MzI3LCA2NzI0LCAwLCAKICAgICAxMjgwODYsIDkyNTY2LCA2OTkxMCwgNDgxNywgNzg0NDYsIDE5NDc1OSwgOTI1MzYsIDcwNDMsIDk2MDAsIDExMDIyLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCA3NTQ4LCA2NDc5NCwgNDIwNTAsIDEyMjkxLCA1NTI4OSwgMTk0NzYxLCAxMjM0MywgNjU3LCAKQEAgLTE5MzQzLDE0ICsxOTM2MywxNCBAQAogICAgIDQxNDA2LCA0MzI3MywgNzQxNjAsIDExOTk4MywgNzM5MzksIDkyNjM4LCAxMTk5ODQsIDExOTk3OSwgNDE0MDQsIDExNjUsIAogICAgIDExOTk4MCwgNDQ1MSwgMTMwODcsIDAsIDExMjg0LCAxMTk5ODcsIDcwMDk3LCA2NTE1NSwgNDMwMTQsIDU0MzksIDkzNjMsIAogICAgIDcwMDcwLCAzMzc1LCAxMjg4NjksIDU5MDAsIDkzOTkwLCA3ODg5LCAyNzIyLCA0MjI2MiwgMCwgMCwgMTI4Nzc0LCAwLCAKLSAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MTMsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCi0gICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDExOTk2NywgMTE5OTY2LCAxMTg3OTgsIDAsIDAsIDQzMTYxLCAwLCA5MjM2MCwgCi0gICAgMCwgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCAxMTkyNDMsIDEyMTM1LCA1NzMyLCA0NDY0LCAwLCA3MTMzMCwgOTc3LCAKKyAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MjIsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCisgICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDgyOTcsIDExOTk2NiwgMTE4Nzk4LCAwLCAwLCA0MzE2MSwgMCwgOTIzNjAsIDAsIAorICAgIDUxODIsIDAsIDEyMDU0MiwgMCwgMCwgNDIyNiwgMTE5MjQzLCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgNzEzMzAsIDk3NywgCiAgICAgNDQ1OCwgMCwgMCwgNjQ3NzAsIDc0ODM4LCAwLCAzNDQsIDAsIDE5NDc5MCwgMTM5NSwgNjQyNzksIDAsIDkyMjQwLCAwLCAKICAgICA3ODYsIDAsIDQzMTc0LCA2NDM0MCwgMCwgMTk0NzY3LCAxMjA3MjMsIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIAogICAgIDY1MDI1LCAwLCAwLCAwLCA5Mzk1NiwgMCwgNjg0NDQsIDAsIDkyNDM3LCAwLCAxMTkxNjAsIDEwMjA0LCA5MjY1NiwgMCwgCi0gICAgMTI3ODA5LCA5ODM2MzUsIDEzOTksIDk4MzY0MywgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAotICAgIDAsIDk4MzYzMCwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjM0LCAwLCA0Mjc4MCwgMCwgMCwgCisgICAgMTI3ODA5LCA5ODM2NDQsIDEzOTksIDk4MzY1MiwgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAorICAgIDAsIDk4MzYzOSwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjQzLCAwLCA0Mjc4MCwgMCwgMCwgCiAgICAgMCwgNDIxNywgMCwgODY1MCwgMCwgMCwgMCwgNjk5MDAsIDExODg3MiwgNDMwOTksIDM5NjUsIDExOTExOSwgNjcxOSwgMCwgCiAgICAgMTMzMDAsIDc4NDM5LCA5Mzk3MSwgNDMwNTcsIDY2NTg4LCAxMTg5OTEsIDAsIDAsIDczODE1LCA0NDIwLCAwLCA2NDEwLCAKICAgICA3NzYwLCAwLCAwLCAwLCAwLCAwLCA3Mjk0LCAwLCAwLCAwLCA5MDY2LCAwLCAxMTk5MywgNDMxODgsIDI2MjYsIDc3NjIsIDAsIApAQCAtMTkzNTgsNDUgKzE5Mzc4LDQ1IEBACiAgICAgNjY0NTQsIDk1OTIsIDQyODUxLCAxMjY5OTMsIDE1NDIsIDkyMzAzLCAwLCAwLCAwLCAwLCA3NDMxMSwgNzg0OTcsIDAsIAogICAgIDEwMTgxLCAwLCA0MzYyNCwgMCwgNzc3OSwgMCwgMTAxOTUsIDk0NzksIDYwMjksIDAsIDkyMjY4LCA5Njg5LCAwLCA2NTU3NywgCiAgICAgODk5MywgNjYzNTgsIDAsIDQyMzc4LCAzMzY4LCA2MDYsIDEyNzAzMCwgNzY5NywgNjkyMzcsIDY5Nzg3LCAyMDMwLCAwLCAKLSAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzMxLCA5ODMzMzAsIDk4MzMyOSwgOTgzMzI4LCAyNzM1LCAKKyAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzM5LCA5ODMzMzgsIDk4MzMzNywgOTgzMzM2LCAyNzM1LCAKICAgICA0MjgzMSwgNzc5MzUsIDEyNzEyMCwgNzQ4NjYsIDg4ODEsIDExOTA0NywgMCwgMCwgNzM5NDYsIDAsIDAsIDAsIDY4MTQwLCAKLSAgICA5ODM5MTksIDk1NzYsIDEyODg3MiwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAxMjcwNjMsIAotICAgIDc3MDksIDQxMTEyLCA5ODMxMzIsIDY2NTYwLCA0MjA0MSwgNDU3MiwgMTI4NzYsIDY2NTYxLCA5ODM3NDksIDY3NTgsIAotICAgIDk4MzkxNywgMTYxNSwgNTg1NSwgODA5LCAwLCA5MjI4MywgMTI4MzE2LCAxMjgwMDQsIDU3OTksIDk4MzMyMCwgNzAxMDAsIAotICAgIDk4MzMxOCwgNzI2MCwgOTgzMzE2LCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCA3ODgxOSwgNjQzODYsIDY1MjU3LCAwLCA2ODYxNiwgCisgICAgOTgzOTI4LCA5NTc2LCAxMjg4NzIsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKKyAgICA3NzA5LCA0MTExMiwgOTgzMTMyLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgOTgzNzU4LCA2NzU4LCAKKyAgICA5ODM5MjYsIDE2MTUsIDU4NTUsIDgwOSwgMCwgOTIyODMsIDEyODMxNiwgMTI4MDA0LCA1Nzk5LCA5ODMzMjgsIDcwMTAwLCAKKyAgICA5ODMzMjYsIDcyNjAsIDk4MzMyNCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIAogICAgIDEyMDYwNywgOTM0NywgMTI4MDY3LCA2NTMyLCAwLCAwLCAwLCAxMjcwNjAsIDY1ODI4LCAwLCAyODMsIDY4NjY1LCA3ODgxMywgCi0gICAgNTMyLCA3ODY2MywgMCwgOTgzNzg3LCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgODE1MywgCi0gICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAyMjk4LCAwLCA5ODM5MDgsIDY1NDk1LCA2NDcwNiwgOTgzMzEwLCA0MzM0NCwgOTgzMzA4LCAKLSAgICA3MTQ0LCA5NDY2LCA3ODg2NiwgOTgyNCwgOTgzMzAzLCA5ODMzMDIsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAorICAgIDUzMiwgNzg2NjMsIDAsIDk4Mzc5NiwgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIDgxNTMsIAorICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMjI5OCwgMCwgOTgzOTE3LCA2NTQ5NSwgNjQ3MDYsIDk4MzMxOCwgNDMzNDQsIDk4MzMxNiwgCisgICAgNzE0NCwgOTQ2NiwgNzg4NjYsIDk4MjQsIDk4MzMxMSwgOTgzMzEwLCAwLCAwLCA5MTUsIDQzNDI1LCAwLCAwLCAwLCAwLCAKICAgICAxMjcxNzgsIDQzMjY0LCA3MDA5NiwgMCwgMCwgNDMwMzgsIDc4ODY0LCA2NzMwLCA3ODg2MiwgNjgxNjEsIDY0NTUwLCAKICAgICA1MTg2LCA3MzYwLCAxMjc4MzcsIDAsIDEyMTA4LCAwLCA2NTEyNCwgNDMxMjcsIDY2MDQzLCAwLCA2MzI2LCA0MzEwNywgCi0gICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMjk3LCAKLSAgICAxMTcxOCwgOTgzMjk1LCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCisgICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMzA1LCAKKyAgICAxMTcxOCwgOTgzMzAzLCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCiAgICAgNjU0ODMsIDAsIDEyNTY1LCAwLCA2NTQ3NiwgMTIwMDEzLCAwLCAxMTk1NTQsIDkyODMsIDc3MDAsIDkxNzUzNywgOTY5MCwgCiAgICAgNjU0OTksIDAsIDY0NTkzLCA1MTIsIDMzNzYsIDY4MjEwLCAwLCAxMjg2NzcsIDc3ODkyLCA2MzIsIDEyOTQwLCA3Nzg5MSwgCi0gICAgNDI1MjksIDc4NTg3LCAwLCA1OTU3LCAxMTA1OTMsIDg5MjYsIDk4MzI5MSwgOTgzMjkwLCAxMjgyNzMsIDEwNzQ1LCAKKyAgICA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgODkyNiwgOTgzMjk5LCA5ODMyOTgsIDEyODI3MywgMTA3NDUsIAogICAgIDEwMTc0LCA3Mzc5LCA2NDU4MSwgNTM4NiwgMTIwNjg2LCAxMTcxMywgMTA2MzMsIDY5NzA4LCA1MDU2LCAwLCAwLCAwLCAKICAgICAxMjA3NzMsIDAsIDk4MTIsIDAsIDQ0NjAsIDAsIDAsIDcxMzA3LCAxMjgwMzgsIDAsIDAsIDEyNzE3NCwgNjQyNzgsIAogICAgIDkyMzcwLCA0MzQ2NiwgMCwgMCwgNjQzODksIDI5NTMsIDczODc5LCAxODAxLCAxMjgzNSwgMTE5MDI5LCAwLCA3MzgyMywgMCwgCi0gICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyNzgsIDk4MzI3NywgCi0gICAgMTI4NTcwLCAxMjEwNiwgOTgzMjc0LCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCisgICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyODYsIDk4MzI4NSwgCisgICAgMTI4NTcwLCAxMjEwNiwgOTgzMjgyLCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCiAgICAgOTUyMiwgNzQwNzksIDc4MjY2LCA2NjYwNCwgMCwgMzM4NCwgNjkyMjcsIDEwNzAyLCA4MzAsIDc3OTAyLCA3Nzg5OSwgCiAgICAgNzc5MDAsIDg0NTEsIDAsIDAsIDAsIDY5NzM5LCAwLCAwLCAwLCAwLCAyOTA4LCAwLCA0MzM4NiwgNjQ5MDIsIDQyNDMsIDAsIAotICAgIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCA5ODMyNzEsIDczOTQwLCA2NDM1MiwgMTI3NTEzLCA5ODMyNjcsIDQxMSwgOTgzMjY1LCAKLSAgICA5MTk5LCA5ODMyNjMsIDQwNTYsIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCA5ODM5MjgsIDU0MjgsIDE5NDc0MywgCisgICAgMTIyMzksIDAsIDAsIDQ0NDEsIDAsIDk4MzI3OSwgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDk4MzI3NSwgNDExLCA5ODMyNzMsIAorICAgIDkxOTksIDk4MzI3MSwgNDA1NiwgMTE4OTkyLCA0MTg5MCwgMCwgMjczMCwgNDE2MDQsIDk4MzkzNywgNTQyOCwgMTk0NzQzLCAKICAgICAzMzY0LCA0MjI2NSwgNjQ0MzcsIDEyNzkzNSwgMTE4ODE2LCAxOTQ3NDIsIDk2ODQsIDIxNiwgMCwgMTQwMSwgMTI4MDUzLCAKICAgICA0NDAxMiwgMCwgMCwgOTI1ODUsIDkxNTgsIDc3ODQyLCA2OTkwNSwgNTc2OCwgMCwgMCwgMCwgNDg0LCAxOTQ3MzksIDAsIDAsIAotICAgIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgOTgzMjU1LCA5Mzk2MiwgMjc5NCwgCisgICAgNjU4OTUsIDAsIDAsIDMzMzgsIDczOTM1LCA1NzIsIDcwNDEsIDI3MzYsIDY3NjA1LCA5ODMyNjMsIDkzOTYyLCAyNzk0LCAKICAgICA4ODA3LCA2NDQ5MSwgNzc4NDcsIDU0MzgsIDUyMjIsIDUzODEsIDQzMTE0LCAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCAKICAgICA3Nzg0NiwgMTk0NzQ3LCA5NTM0LCAwLCAwLCAwLCAzNDMwLCAwLCAwLCA3ODcxNywgMCwgOTgxLCAwLCA0MzMwLCA3MzkyOSwgCiAgICAgMTIwNTM2LCAxODI0LCAxMDkwOCwgMCwgNzAzNCwgNDE2ODMsIDY0NjE3LCAwLCA3Mzc1NCwgMzk1NywgNjQzNTgsIDY0NTQ3LCAKLSAgICAxMjgyNTksIDY3NCwgNjM5OTEsIDk4MzI0MywgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIAorICAgIDEyODI1OSwgNjc0LCA2Mzk5MSwgOTgzMjQ5LCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgCiAgICAgODM2NCwgNTEyMywgMTE5NjI4LCA1MjgxLCA1NDY5LCA1MTIxLCAxMTkyNDUsIDExODk5MywgMCwgNTEzMCwgMCwgMCwgCiAgICAgNzc5OTAsIDAsIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDc3OTkxLCA1MjE2LCAwLCAwLCAwLCAwLCAzNDY4LCA3MDMzLCAKICAgICA5MjMwLCA1OTM5LCAxOTUwNTIsIDAsIDAsIDEyMDY3NywgNjg0MDAsIDcyNzgsIDEwMzIxLCAxMDI4OSwgNjQ2MTMsIAotICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDA1LCAwLCAxMTczOSwgOTgzNDE4LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAorICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDEzLCAwLCAxMTczOSwgOTgzNDI2LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAogICAgIDEyNDQ4LCA3NTc2LCAxMDQwMSwgMTAzMzcsIDczODUyLCAwLCAxMzA1NywgMCwgMTI2OTc2LCAwLCAxMDAwOSwgMCwgCi0gICAgNDE3MDMsIDk4MzYyOSwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgMCwgMCwgOTI0NTcsIDAsIAorICAgIDQxNzAzLCA5ODM2MzgsIDEyMTY1LCAwLCAwLCA5ODg1LCAwLCA4MDc3LCAwLCAxMjc5MDgsIDAsIDAsIDAsIDkyNDU3LCAwLCAKICAgICA0MjIwLCAxMDcyNSwgMTA0MzMsIDAsIDY4Mzk1LCA0OTg3LCA2NDUxOSwgMCwgMTI4MzQwLCAwLCAwLCAwLCAxMDk3MCwgCiAgICAgMTE3MzMsIDAsIDEyMDc5MiwgMCwgMTk5NDQsIDAsIDkwMDksIDg1NTEsIDkyMzQ1LCAxMTQ2OCwgNjQ2MzYsIDc1NzUsIDAsIAogICAgIDI3MjQsIDAsIDAsIDEyMzEzLCAxMTA1OTIsIDUxNSwgMTE5OTQ3LCA0Mjc5MSwgNjM5ODcsIDc4Mjg2LCAxMTk5NDMsIApAQCAtMTk0MDYsNzMgKzE5NDI2LDczIEBACiAgICAgMCwgNDQ3NywgMTE4OTY0LCA4MTQsIDQyMDY2LCA2NjE4MywgNjYyMDQsIDQzNzg2LCAxMTk5NjEsIDY2MTk4LCA0MTg4MCwgCiAgICAgNjYxODgsIDExNjIzLCA3ODE0OCwgMTE5NTUsIDY2MTkwLCA2NjE5MSwgNDExMTEsIDY2MTg5LCA3Mzc4OCwgNzc4OCwgCiAgICAgNDg0NywgMCwgMTI3NzU5LCAwLCAwLCAwLCAxNTgxLCA2NTM1LCA3ODE2MSwgMTI5NTQsIDQzMCwgNzgxNjAsIDU1MjU5LCAKLSAgICA3ODE1OCwgMTI4MDM2LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgOTgzNDMwLCA2ODYyNSwgOTgzNDI4LCA3MjY5LCAwLCAKLSAgICA1OTY0LCAxMjkwOCwgOTgzNTU1LCAwLCA3NDc2NCwgNzQ0NzcsIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCA5ODM0MjEsIDQ0MywgCi0gICAgOTgzNDE5LCA0OTQ0LCA1NDY3LCAxMTk2MDMsIDAsIDY1MTM3LCA2MDQ0LCA2NTM5MiwgMCwgNDIxMywgMCwgNDEzMDMsIDAsIAotICAgIDE5NDkzMSwgMTE5OTYyLCA0MTMwNiwgNzM5ODQsIDI2OTgsIDEyNzE1OSwgMCwgMTIwNzIsIDMxOTMsIDAsIDQxMzA0LCAKLSAgICA4MjQsIDEyODY3NiwgMTIwOTEsIDc4ODkzLCA3ODg5NCwgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgMTE5ODIwLCAKLSAgICAxMTk4MTksIDY1MDU5LCAwLCA2NzM5LCAwLCA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIDY5OTQ3LCAxMTk4MzIsIAotICAgIDQ2NzcsIDEyNjg4LCAzMTAyLCAwLCA0NjcyLCA3ODE3MywgNzgxNzUsIDU1MzEsIDY4MzY3LCA0MjU3NSwgNzgxNzAsIAotICAgIDc4MTY2LCA0Njc0LCA0NTQ4LCA0NDAwNSwgMTE5OTQ5LCA2ODY1OCwgMTE5OTQ2LCA4MDI1LCA2ODYzMCwgMTI3MDI0LCAKLSAgICAxODU1LCA5ODM0MDQsIDY4NjY5LCA5ODM0MDIsIDkyNDQ1LCAxMjc1NTQsIDAsIDEyNzMzOSwgMTE5NjUyLCAyNzQ1LCAKLSAgICAxMTc5NywgOTgzNDEwLCAxMjgxNTksIDkyMDIsIDQ2NTQsIDk4MzQwNiwgOTgzNDA4LCA2ODYzOCwgNzM5OTMsIDEwNTI1LCAKLSAgICA0NjQ5LCA2NTIwOSwgOTgzNDA5LCAwLCA0NjQ4LCA0MzA4MCwgOTgzMzk4LCA5ODMzOTksIDk4MzM5NiwgNjI0NiwgNjQ5NTAsIAotICAgIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCA5MjM4NCwgNDMxODcsIDg2NjksIAotICAgIDk4MzQwNywgNjgyMSwgNjUwOTMsIDAsIDc4ODgxLCAyNzE2LCAwLCA5ODMwNjAsIDk4MzQxMSwgMCwgNjgzNjksIDEyMDA1NCwgCi0gICAgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIDAsIDAsIDQ2NjIsIDc4MDMzLCA3ODAzMiwgCi0gICAgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDY4NDUwLCA3ODExLCAKLSAgICA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgOTgzNDAzLCAKLSAgICAwLCAwLCA2NDkwNCwgOTAyNiwgMTA4MzMsIDc0ODY0LCA3NTQ3LCA0ODY3LCAwLCAxMDAwOCwgMTAyMjIsIDMwNTQsIAotICAgIDE5NDk1NiwgOTc0NCwgNzg4NjAsIDc2MDUsIDQ2MjIsIDExOTY1NiwgOTgzMzg3LCA5NDA3MCwgOTgzMzg1LCA5ODMzODYsIAotICAgIDk4MzM4MywgOTA0NSwgNzg4ODgsIDQyMjUsIDE5OTI2LCA3ODg4NywgMTI4ODAsIDY1MzA3LCA0NjE3LCA3ODg4MywgCi0gICAgOTgzMzc4LCA0MTczMiwgNDYxNiwgMTA1MTgsIDEwNDIzLCAxMDM1OSwgOTgzMzcyLCA1OTU4LCAwLCA5ODM0MjUsIDQyMTUsIAotICAgIDk3ODksIDkxNzk0MSwgNDMyMSwgNDYyMSwgOTgzMzgxLCA0MTMxMywgNTIyLCA1MzY4LCAwLCA2NTgwMywgMCwgNTM2NiwgCi0gICAgMTIyMDEsIDUzNzIsIDAsIDk4MzQwMSwgMCwgNzcyMCwgNzM5MCwgMjY5NiwgOTgzMzkyLCAwLCA0NjM4LCA5ODMzOTcsIAotICAgIDE3OTAsIDc4MjQyLCA1OTY1LCA2NDM2MywgNjY1NjksIDY4NjQ2LCAxMjc4MzMsIDUzNzYsIDE4MzUsIDUzMzUsIDE5NDk2NiwgCi0gICAgMTI4MDg5LCA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMTI4MDkzLCA1Mzg3LCA1MzMzLCAwLCAwLCA0MjA5NCwgCi0gICAgNTMzMSwgNDYzNCwgMTE5MjgsIDk4MzU5NCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgMCwgMTI2OCwgCi0gICAgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAKLSAgICA5ODMzNjYsIDE2MDgsIDI3MzgsIDAsIDEwNDU1LCA0NzUzLCA3NDAyNiwgMTEzNDQsIDQyMjIsIDYyNDAsIDUyMzEsIAotICAgIDc0Mzg0LCA5ODMzNzAsIDY4Mzc3LCA2MjQ4LCA5ODMzNTQsIDk4MzM1NSwgOTgzMzUyLCA0MjMxOCwgOTI1ODIsIDUyMjksIAorICAgIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCA5ODM0MzgsIDY4NjI1LCA5ODM0MzYsIDcyNjksIDAsIAorICAgIDU5NjQsIDEyOTA4LCA5ODM1NTUsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQyOSwgNDQzLCAKKyAgICA5ODM0MjcsIDQ5NDQsIDU0NjcsIDExOTYwMywgOTgzMjU0LCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIAorICAgIDQxMzAzLCAwLCAxOTQ5MzEsIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCAKKyAgICA0MTMwNCwgODI0LCAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIAorICAgIDExOTgyMCwgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgCisgICAgMTE5ODMyLCA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIAorICAgIDc4MTcwLCA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIDExOTk0OSwgNjg2NTgsIDExOTk0NiwgODAyNSwgNjg2MzAsIAorICAgIDEyNzAyNCwgMTg1NSwgOTgzNDEyLCA2ODY2OSwgOTgzNDEwLCA5MjQ0NSwgMTI3NTU0LCAwLCAxMjczMzksIDExOTY1MiwgCisgICAgMjc0NSwgMTE3OTcsIDk4MzQxOCwgMTI4MTU5LCA5MjAyLCA0NjU0LCA5ODM0MTQsIDk4MzQxNiwgNjg2MzgsIDczOTkzLCAKKyAgICAxMDUyNSwgNDY0OSwgNjUyMDksIDk4MzQxNywgMCwgNDY0OCwgNDMwODAsIDk4MzQwNiwgOTgzNDA3LCA5ODM0MDQsIDYyNDYsIAorICAgIDY0OTUwLCA3ODI4LCA0NjUwLCA2Nzc3LCA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgOTIzODQsIDQzMTg3LCAKKyAgICA4NjY5LCA5ODM0MTUsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgOTgzMDYwLCA5ODM0MTksIDAsIDY4MzY5LCAKKyAgICAxMjAwNTQsIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAwLCAwLCA0NjYyLCA3ODAzMywgCisgICAgNzgwMzIsIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgCisgICAgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIAorICAgIDk4MzQxMSwgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAKKyAgICAzMDU0LCAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDk4MzM5NSwgOTQwNzAsIDk4MzM5MywgCisgICAgOTgzMzk0LCA5ODMzOTEsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgCisgICAgNzg4ODMsIDk4MzM4NiwgNDE3MzIsIDQ2MTYsIDEwNTE4LCAxMDQyMywgMTAzNTksIDk4MzM4MCwgNTk1OCwgMCwgOTgzNDMzLCAKKyAgICA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDk4MzM4OSwgNDEzMTMsIDUyMiwgNTM2OCwgMCwgNjU4MDMsIDAsIAorICAgIDUzNjYsIDEyMjAxLCA1MzcyLCAwLCA5ODM0MDksIDAsIDc3MjAsIDczOTAsIDI2OTYsIDk4MzQwMCwgMCwgNDYzOCwgCisgICAgOTgzNDA1LCAxNzkwLCA3ODI0MiwgNTk2NSwgNjQzNjMsIDY2NTY5LCA2ODY0NiwgMTI3ODMzLCA1Mzc2LCAxODM1LCA1MzM1LCAKKyAgICAxOTQ5NjYsIDEyODA4OSwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDEyODA5MywgNTM4NywgNTMzMywgMCwgMCwgCisgICAgNDIwOTQsIDUzMzEsIDQ2MzQsIDExOTI4LCA5ODM1OTQsIDUzMzgsIDQ2MzcsIDEyODE3MCwgNTk3MSwgNDI0MTQsIDAsIAorICAgIDEyNjgsIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgCisgICAgNDc1OCwgOTgzMzc0LCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCAKKyAgICA3NDM4NCwgOTgzMzc4LCA2ODM3NywgNjI0OCwgOTgzMzYyLCA5ODMzNjMsIDk4MzM2MCwgNDIzMTgsIDkyNTgyLCA1MjI5LCAKICAgICA0NzU3LCAwLCAwLCAyNzI4LCA0NzUyLCA2NDU2MywgNjUyMzUsIDUyMzQsIDAsIDEyODE0NSwgMCwgMTA3MTMsIDcxNjYsIDAsIAogICAgIDI2MjIsIDc0NjAsIDEyNzMwMiwgMCwgMCwgODk1NCwgNzQ3NjAsIDY1MTg5LCAyNjMyLCA0MjYxNywgMTAxMDgsIDEwMTEsIAogICAgIDU1NzQsIDE4NTMsIDI3MDksIDY1MTM5LCA1NTc3LCAwLCAwLCAxMTg4NzEsIDY4NjQxLCA4OTY1LCA3NjM1LCA0MjE3NywgCi0gICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQxMiwgCi0gICAgOTgzODYzLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0NzIsIDk4MzQxNSwgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODU2LCAKLSAgICA3NDAyMiwgOTgzNDE0LCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDgxLCA1NzIxLCA5ODMzOTMsIDU1MTksIDg2MzIsIAotICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNDQsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAotICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM0NywgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAotICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQxLCA5ODMzMzgsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCisgICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQyMCwgCisgICAgOTgzODcyLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0ODAsIDk4MzQyMywgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODY1LCAKKyAgICA3NDAyMiwgOTgzNDIyLCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDg5LCA1NzIxLCA5ODM0MDEsIDU1MTksIDg2MzIsIAorICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNTIsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAorICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM1NSwgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAorICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQ5LCA5ODMzNDYsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCiAgICAgNDExMjQsIDUxOTAsIDY3NjI4LCAwLCA2ODE0NSwgNzA4NiwgMCwgNjc5OTgsIDY3NjIwLCAwLCAyNzM0LCAxMTA3NCwgMCwgCiAgICAgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgMCwgODk5MiwgNDI1OTMsIDEyODI2MCwgMTc4MiwgNjc2MjIsIDY4MTE0LCAKICAgICAxMTk5MzksIDAsIDY4MTgwLCA1NTAxLCAxMTk5NTIsIDQyNTA4LCA3NDQyLCA0MzY2NSwgMzU5LCA0MTI1MywgNjgzOTIsIAogICAgIDYyMzksIDExOTk1NiwgNDEyNTYsIDAsIDY4MTM0LCAwLCA3NDIwOSwgOTE3NTUwLCA5MzQ2LCA2OTY2MCwgNDEyNTQsIAogICAgIDEyODA0NywgNDMyOTEsIDM3NjcsIDU3MzcsIDAsIDQ4NjUsIDAsIDU3NDAsIDkxNzk5NywgNTczNiwgNDM2OCwgNjQ3MjQsIAotICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4MzgzMSwgNDg2OSwgMTIwNTYzLCAwLCAKLSAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDU1LCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAorICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4Mzg0MCwgNDg2OSwgMTIwNTYzLCAwLCAKKyAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDYzLCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAogICAgIDc4MTc2LCA2ODY2NywgNjgzODIsIDY4Njc2LCAxMjc5MjUsIDEwMTIyLCA0ODY0LCA2NjU2OCwgNDE0NCwgNzkzNywgMCwgCiAgICAgNjI0NSwgNjg2NTIsIDI3MzIsIDQyNzM0LCA3NDUsIDAsIDE5NTA5NywgOTIxOTUsIDQ3NzcsIDc4MjEsIDAsIDY4NjMxLCAKLSAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0NzgsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKKyAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0ODYsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKICAgICA2NDQwNywgMCwgMTI4MzIzLCA4NTc3LCAxMjg1NjIsIDY4MTk2LCA0MzI4NSwgMTAyMTYsIDQ3ODIsIDAsIDAsIDEyMDc1NywgCiAgICAgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgNDc3NiwgNzM4MTgsIDExNDkyLCA4NzAwLCAwLCAxMzE3NiwgCiAgICAgNjgzNjMsIDEwNDI2LCAwLCA5MTc1OTksIDEwMzYyLCAxOTQ3MDYsIDE3MTUsIDQ4NDksIDgyNDIsIDk1NjEsIDczOTIyLCAKICAgICA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgNDg1MCwgMCwgMTYwNywgNDY2LCA0ODUzLCAxMTg5OTUsIAotICAgIDQ4NTQsIDEyNzkxOCwgNTE2NCwgOTgzODYxLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgCisgICAgNDg1NCwgMTI3OTE4LCA1MTY0LCA5ODM4NzAsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAyNzA4LCAKICAgICA5MjQ3MSwgMTI0NDUsIDM3ODUsIDIzNCwgMzE5OSwgMCwgNDEyNjgsIDQ4NDgsIDI1MzAsIDkxNzkwOSwgMjA2OCwgMTk2NCwgCiAgICAgMCwgNzM3NjIsIDEwNDU4LCAwLCA4NTc2LCA3ODU0MywgMCwgMjcwNCwgNDc5NCwgMCwgNjgyMTEsIDgzMjIsIDQ3OTcsIAotICAgIDU3NTMsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIDY1MTA0LCA2OTgwNCwgOTgzNDE2LCAzMDMsIDk4MzEwMSwgOTI2MjIsIAotICAgIDk4MzQxNywgMjQzNywgMCwgNDIyMSwgNDg0NCwgOTIyMTYsIDAsIDAsIDAsIDcwMDQyLCAwLCA0MzI5MiwgMCwgMjQ0MSwgCisgICAgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCA5ODM0MjQsIDMwMywgOTgzMTAxLCA5MjYyMiwgCisgICAgOTgzNDI1LCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCA5MjIxNiwgMCwgMCwgMCwgNzAwNDIsIDAsIDQzMjkyLCAwLCAyNDQxLCAKICAgICAxMDczOSwgNjUwOTAsIDAsIDExOTMyNywgMTI2NTQxLCAyNDUxLCAyNzE0LCAxMTkzMjYsIDAsIDQzMzc5LCA0OTM3LCAKICAgICA0MzM3NiwgNzUzLCA1ODQ5LCAxMDU5NywgNDMwODksIDExNzIyLCA5MjQ4LCA5MjU1NSwgNDI4NzksIDExNzI1LCAwLCAwLCAKICAgICAyNzI2LCAzMTA3LCA3Mzk1OCwgNDk0MSwgNjQ5MzcsIDExOTIzMywgOTE0MCwgMTQwOCwgNTI2MSwgNDYwNywgMCwgMTgxLCAKLSAgICA5ODM0MjIsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgCisgICAgOTgzNDMwLCA0OTQyLCA5NTM5LCA0OTM4LCAwLCA2NTIwMSwgNTI1OSwgOTM2OSwgNjQxODUsIDQxNDIsIDUyNTcsIAogICAgIDk4MzYwMSwgMCwgNDk2NCwgNTI2NCwgNjQxNzgsIDY0MTc3LCAxMjk3OSwgNDE0MTEsIDY0MTgyLCA2NDE4MSwgNjQxODAsIAogICAgIDY0MTc5LCA5NDgyLCA0ODczLCA0MTIzMSwgMTgyMiwgNDI1MjYsIDEyODU4MSwgMTI3NTgsIDM4NjUsIDAsIDAsIDEwNTAwLCAKICAgICAwLCAxMTkwMjQsIDc4MDI4LCA5MjQwOCwgOTgzMCwgNDM2NDIsIDM4OSwgMTA4OTMsIDc1MjEsIDEyNzg3OSwgNDg3MiwgCiAgICAgNTQ2MywgMCwgMzEyNSwgOTU2NywgMCwgNDg3OCwgNTQ1OSwgNDYwNCwgOTE3OTMxLCA5NTU3LCA1NDY1LCA2ODYxNywgMCwgCi0gICAgMTE0OTQsIDEyNjQ5MiwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDk4MzQzMSwgNzg3MTQsIDY0MTkxLCAKKyAgICAxMTQ5NCwgMTI2NDkyLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgOTgzNDM5LCA3ODcxNCwgNjQxOTEsIAogICAgIDY0MTkwLCA4ODk4LCA2NDE4OCwgMCwgNDEwMzAsIDc4ODM2LCAwLCA5MTc4MzUsIDc4ODIwLCA5MTc4MzQsIDAsIDc4ODA1LCAKLSAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MjksIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKKyAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MzcsIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKICAgICA3MDc5LCA1ODU2LCAxMjcwNDMsIDUxNjMsIDc4ODA5LCAxMjgxNjIsIDE4MTcsIDY2NzI0LCA3ODUzOCwgMCwgMTA1NjQsIAogICAgIDc3NjMsIDEzMDc3LCA0MTgxMywgNDQwMCwgNDE3NDUsIDY0MjA3LCAxMDI3NSwgODkyNSwgMTAzNzEsIDEwMzA3LCA0MTgxNCwgCiAgICAgNDI0OCwgMCwgMCwgNDU0MSwgNjI5OSwgNjQyMDQsIDY0MjAzLCA2NDIwMSwgNjQyMDAsIDY0MTk5LCA2NDE5OCwgMTI2NDcxLCAKQEAgLTE5NDg1LDMzICsxOTUwNSwzMyBAQAogICAgIDY1MjIyLCA2OTk4LCA3ODE4MCwgMCwgMzEyOCwgNDc4OSwgNTA2NywgNTA2NiwgMTE4ODQ5LCA0Nzg0LCAwLCA4ODI3LCAKICAgICAxMTQ2LCA1MDY1LCA2OTg5MCwgNzgxOTIsIDY4MTM2LCA3ODE5MCwgNDM0MTIsIDUwNjQsIDI0MzEsIDAsIDk0NTAsIDE4MDksIAogICAgIDAsIDc4MjAwLCA3ODIwMSwgNTA2MiwgMTI2NCwgNjQ4MTcsIDEzMjU0LCAxMTY5NywgMTI2NTk4LCA5Nzg1LCA2NDcxNiwgMCwgCi0gICAgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCA5ODM4NjQsIAorICAgIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgOTgzODczLCAKICAgICA0MjEzMCwgMCwgNTE1MSwgOTE3ODI5LCA5MTc4MjMsIDAsIDkzOTgwLCAwLCA3NjIwLCAzODAwLCA2NTEyMiwgMCwgMCwgCiAgICAgODM1NSwgNzg1NCwgMCwgOTU0LCA2NDkyNywgNDE4NSwgNDEwNDUsIDEyNzE0MSwgNDE0MzgsIDQxNDM5LCA2ODY2NiwgCi0gICAgMTA3MTEsIDQ1OTMsIDEyNzc0NSwgMTIwNTg0LCA5ODM0MDAsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIAorICAgIDEwNzExLCA0NTkzLCAxMjc3NDUsIDEyMDU4NCwgOTgzNDA4LCA2NDc3NCwgODA1MywgMTA1MzIsIDY2NzI3LCAwLCAwLCAwLCAKICAgICA2NDc1OSwgNjM4MSwgNTE2NiwgOTg4OCwgMTI3ODAwLCA1MTQ4LCA0MjgzNCwgMCwgNzgyMDUsIDc4MjA2LCA0Mzc4NywgCiAgICAgNzgyMDQsIDY0MTMxLCAzMTE5LCA5MTc4MTQsIDAsIDMwNjAsIDY0MTM1LCA5OTg2LCAwLCA3Nzg3NiwgNjM2LCAxMTY5OCwgCi0gICAgMCwgOTgzNDQzLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgOTI0MzEsIAotICAgIDExOTk2MCwgMTQ3NywgNDMyODksIDAsIDc0MzU4LCA4NjE4LCA5ODMzOTQsIDk5MDgsIDk4Mzk3MiwgMCwgMCwgMzkzNywgCi0gICAgMTIzMTIsIDAsIDk4MzM5NSwgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgOTM5NTQsIDc0NTMyLCAxMjY1OTQsIDYyNDQsIAotICAgIDkyMjA5LCA3MTM0MSwgMzkzNSwgMTIwNjY1LCA5ODM0NjgsIDAsIDExOTUwLCA1MzkyLCA0MjI0OCwgNjUxMjksIDY4NjU2LCAKKyAgICAwLCA5ODM0NTEsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIDgzMjAsIDc4NjQwLCA4ODYzLCA5MjQzMSwgCisgICAgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDk4MzQwMiwgOTkwOCwgOTgzOTgxLCAwLCAwLCAzOTM3LCAKKyAgICAxMjMxMiwgMCwgOTgzNDAzLCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCA5Mzk1NCwgNzQ1MzIsIDEyNjU5NCwgNjI0NCwgCisgICAgOTIyMDksIDcxMzQxLCAzOTM1LCAxMjA2NjUsIDk4MzQ3NiwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIAogICAgIDUzOTcsIDAsIDEyMDQ2LCAxMjU5OSwgMCwgMTI4MjYxLCA1Mzk1LCAwLCA1MzkzLCAzNTQsIDY4NjE1LCAxMTk5NDgsIAogICAgIDc4NTAzLCAwLCAwLCA0MjAzOSwgMCwgMCwgNjQxNDIsIDYyNiwgMCwgNTg5NSwgMCwgMCwgNTc4MCwgMCwgMCwgMTI4ODc0LCAKICAgICAwLCAwLCA0MzI5NywgOTgzMDc5LCA0MzExLCA0NjQ0LCA4ODE4LCAwLCAxMjgxODYsIDAsIDcxNDUsIDM5MTgsIDY2NDUyLCAKICAgICAzNzk3LCAxNjQ0LCA5MjM0NiwgOTY1OCwgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIDExOTk0NSwgCiAgICAgNjgxMzEsIDQxNDYsIDExOTk1NywgNTM2MCwgMjQ2NiwgMCwgNjc2NjksIDExOTk0MiwgNjI0OSwgNDIxMTcsIDkyMjg3LCAKLSAgICAxMjgyMjQsIDAsIDAsIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA5MTc4MDcsIDAsIDk4MzQ2MCwgNDMwNjEsIDcwNTQsIAorICAgIDEyODIyNCwgMCwgMCwgNzQwNDYsIDQzNzQ1LCA0OTExLCA5ODgsIDkxNzgwNywgMCwgOTgzNDY4LCA0MzA2MSwgNzA1NCwgCiAgICAgNjQxNDcsIDAsIDY0OTIwLCA2ODE5NSwgNjY5OCwgMTE4OTMzLCA5MjUwNiwgMCwgMTIwMDA2LCAxMTk4MSwgMTIyMDIsIDAsIAogICAgIDExMDMyLCA2NzY1NCwgNjA5MywgMTE2MDgsIDk3NSwgNjg2NjIsIDY1ODQzLCAxNzAsIDAsIDAsIDQxNjksIDAsIDQxODU5LCAKICAgICA2MDU4LCAxMjA0MDEsIDEzMjAzLCAxMjA2NTcsIDAsIDAsIDY4NjU3LCA5ODE4LCAxMDE3OCwgMTAzMjQsIDQyMTA2LCAKICAgICA1ODk4LCA3NDU0MCwgNDczOCwgNDE4NTYsIDcwNjIsIDkxNzg2NSwgNDczNywgMTE3NzksIDQ3NDIsIDEyMDU2NCwgOTIzOTEsIAotICAgIDczNzM2LCA5ODMzNTYsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAotICAgIDQyMTA4LCA5ODMzNDYsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCi0gICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNTgsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAorICAgIDczNzM2LCA5ODMzNjQsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAorICAgIDQyMTA4LCA5ODMzNTQsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCisgICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNjYsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAogICAgIDM5MjgsIDkxNzg3MCwgNDMzNzgsIDEwNzA2LCA3MTk4LCAwLCA0ODQyLCAxMjA1MywgMTI4MTI5LCAwLCA0ODQxLCAwLCAKICAgICA0MTcxLCAxMjAwOCwgNjI1MSwgMzkyMywgMTQ5MCwgMCwgMTE5NTkxLCAxMjY1MTIsIDQwOTcyLCA1MjQ1LCAwLCAxMDExNCwgCiAgICAgNDIwMDEsIDQxODg4LCA0ODQ1LCA4MzMyLCA0MDk3NCwgNjQzNDcsIDQ4NDAsIDkwNzcsIDc4MzQ2LCAxNzQ3LCA5MTc4NDksIAotICAgIDQ4MjUsIDY5MjQwLCA5MTc4NTIsIDY4NjU1LCAwLCA5ODMzODAsIDAsIDAsIDY4NjI4LCA5ODMzMzksIDk4NTAsIDExODkzNywgCisgICAgNDgyNSwgNjkyNDAsIDkxNzg1MiwgNjg2NTUsIDAsIDk4MzM4OCwgMCwgMCwgNjg2MjgsIDk4MzM0NywgOTg1MCwgMTE4OTM3LCAKICAgICAzNjcsIDE0NzIsIDkxNzg1OSwgNjY4NywgMTI3NCwgMCwgNTkwNSwgMTIzMzksIDg5MTksIDczOTUzLCAxMDkwNywgNjUyNjEsIAogICAgIDExMDIzLCAxMTk1NTksIDQ4MzAsIDkxMzQsIDc4NjY2LCA2NDEyNiwgNDMwMTEsIDAsIDEyNjYyNiwgNjQxMDEsIDAsIDAsIAogICAgIDQ4MjQsIDEwNjE0LCAxMTk2NTksIDAsIDE4ODgsIDE5NjAsIDc4NjEsIDkxNzg1NiwgNzg1MjQsIDQxODM2LCA0MzAxMiwgCkBAIC0xOTUyMCwxMiArMTk1NDAsMTIgQEAKICAgICA2NDExOCwgMTI2OTk4LCAxMjk2MiwgMCwgMTI2NTgwLCA0MDE3LCAxMjgyNywgNTI0MSwgMTIwMzkyLCAwLCA0MTExOCwgCiAgICAgMzkyNCwgMCwgMTEzNjYsIDkxNzg0MywgMCwgMCwgOTE3ODQ2LCA0MTExNiwgOTE3ODQ0LCA5MTc1NjQsIDAsIDExMzYzLCAKICAgICAxMjA1NywgMTE5MTcsIDE1NjcsIDc0MDAwLCA0NzIxLCAxMjY2NDEsIDY2MjAyLCA4OTU3LCA0MTM5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjc0MCwgMTI4NzAyLCA0NzIyLCA2ODE2LCAxMjc3OTMsIDEyNzU5LCA0NzI1LCA5ODMzNzUsIDQ3MjYsIDAsIAotICAgIDE5NDg5MiwgMCwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAwLCAKLSAgICAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAwLCAKLSAgICAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCA0MTg0NSwgCi0gICAgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIDAsIAotICAgIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCisgICAgMCwgMTI3NDAsIDEyODcwMiwgNDcyMiwgNjgxNiwgMTI3NzkzLCAxMjc1OSwgNDcyNSwgOTgzMzgzLCA0NzI2LCAwLCAKKyAgICAxOTQ4OTIsIDk4MzYyMiwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAKKyAgICAwLCAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAKKyAgICAwLCAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCAKKyAgICA0MTg0NSwgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIAorICAgIDAsIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCiAgICAgMTIwMDU3LCA2NTQxNywgNjQ3MTcsIDEyMDA2MCwgMTIwMDYxLCA2NTQxNSwgMTIwMDU5LCA2MjkyLCA2NTMwMywgNzk1NSwgCiAgICAgNjQ1MiwgNDcxMywgMTI4MTk2LCA2NjI0OSwgOTE3ODg1LCA5MTc4OTAsIDkxNzg5MSwgNjUxNTIsIDcxOSwgMTIwMDQ0LCAKICAgICA3ODYyMywgMTIwMDQyLCA2NzEzLCA0NTMyLCA2NTQxMiwgNjk4MjIsIDEwODY4LCA0NzE3LCAyMzQ5LCA1OTAyLCA2NjQ1MCwgCkBAIC0xOTUzNywyNiArMTk1NTcsMjYgQEAKICAgICA0ODE0LCAwLCA0ODEwLCAwLCAwLCA2NDkyOCwgMTA1NDMsIDAsIDM1MjIsIDcxMzM1LCA0MTQsIDY1NDA0LCAwLCAxOTUwMjcsIAogICAgIDY0NTYsIDczODIwLCAwLCA2NjkxLCA0MjE5MywgOTIyMjUsIDEyODE3MSwgMCwgNzQ0OTUsIDAsIDAsIDAsIDExODgyMCwgCiAgICAgOTc1MSwgNjU0MDcsIDEyODA4NSwgMTE3NzAsIDM5MTksIDAsIDAsIDY1MDYxLCAwLCAwLCAwLCAxMjIzNSwgMCwgMCwgCi0gICAgMTI3MjMzLCA2NDA5MiwgOTgzNDYyLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDY5OTEzLCAxMDE2MiwgMTAzMTAsIDAsIDg0NTQsIAorICAgIDEyNzIzMywgNjQwOTIsIDk4MzQ3MCwgNjQwODAsIDAsIDY0MDkwLCAwLCA2OTkxMywgMTAxNjIsIDEwMzEwLCAwLCA4NDU0LCAKICAgICAxMjc4ODgsIDQyMDM4LCAzODcsIDQxMzYzLCAxMjczNywgMCwgNDc4MCwgNDMzNjgsIDAsIDY0MzEwLCA2NDYyMSwgNjczMiwgCi0gICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg2NSwgCi0gICAgMCwgOTgzNDI2LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAotICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQyNCwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCisgICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg3NCwgCisgICAgMCwgOTgzNDM0LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAorICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQzMiwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCiAgICAgMjI5MSwgMTI5MDIsIDAsIDQyODkxLCA2NjMyNywgNzQyOTgsIDkxNzg1NywgMTA3OTksIDY5NjkwLCAyNTg3LCA2NjM3MiwgCiAgICAgMCwgNDE5MywgOTIyNTAsIDQyNDEsIDk4MzA1NywgNzk5OCwgMCwgMCwgMCwgMTI2NjQwLCAyMzE2LCAxMTg4MjEsIDAsIDAsIAotICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4NzcsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAorICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4ODYsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAogICAgIDExOTIzMiwgMCwgNDE1OTAsIDAsIDcwMDk4LCAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgMzkwNiwgMTIzNDksIAogICAgIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMjgwLCA3NDU1OCwgMTI3MzMyLCA2ODEzOCwgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCA0MzMxMCwgNzIzMSwgMCwgCi0gICAgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCA5ODM3NDMsIDExOTIzNywgMCwgMTI4ODA1LCAKKyAgICAxMTc3MywgMCwgMCwgMCwgMCwgMjU1MSwgMCwgNjQ1MywgMTAyMDAsIDYyMzUsIDk4Mzc1MiwgMTE5MjM3LCAwLCAxMjg4MDUsIAogICAgIDQ0NzAsIDExODI2LCA5MTc1NTcsIDc3ODAsIDUzNjksIDExODk1OCwgNTI0OSwgMCwgNTM2NywgODc1NiwgMTI3MTQzLCAwLCAKLSAgICA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCA3ODI0NSwgOTgzMzQ4LCA2OTY4NSwgOTgzNzQ3LCAwLCAwLCA0NDAyMCwgCisgICAgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDk4MzM1NiwgNjk2ODUsIDk4Mzc1NiwgMCwgMCwgNDQwMjAsIAogICAgIDY4MDgsIDQxMzE5LCAxMzAwLCAxMDY1MCwgNDE2OTIsIDY0NTA1LCAyMjkwLCAwLCAxMTk2MjQsIDE0NjUsIDEwODUwLCAKICAgICAzOTQzLCAwLCA0MTIwNSwgNDEzMTUsIDExODk2MSwgMCwgMCwgNTM1MiwgMCwgMCwgODgzOSwgNDEzMTQsIDczODQsIDc3ODUsIAogICAgIDQxMjA0LCAxMjczMjIsIDQxMjA5LCA2OTYzNywgOTIyNDEsIDQzNjA3LCAwLCAwLCA1NDIwLCAzODk3LCAxMDEzNCwgMCwgCiAgICAgNzQ0MTcsIDQwMTgsIDcxNTAsIDY4MTI3LCAwLCAwLCAwLCAwLCAxMjc1MjYsIDI1NjEsIDY4NjIxLCAzNTQyLCA3MTQ4LCAKICAgICAxMjA3NiwgNzk1MSwgNjgxNTIsIDExODg1NywgNTMwMywgNjI3NiwgMTcwNiwgMCwgNzg3NTEsIDcxNDYsIDAsIDY1MTUwLCAKLSAgICA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgOTgzNDI3LCA2OTY0MSwgMTA3NTMsIAorICAgIDQxODE5LCAwLCA3Mzk1MSwgMTA4NDcsIDQxODIyLCA5OTg1LCA4NjAsIDAsIDEwNTA2LCA5ODM0MzUsIDY5NjQxLCAxMDc1MywgCiAgICAgMTA4MzAsIDAsIDYxNSwgNjQ0OTAsIDc1NzQsIDkyNjE3LCA3NzkyMiwgMCwgMTI5MDksIDQzMDE2LCA2NDU1OSwgMTI3MDI4LCAKICAgICAwLCAwLCA2Nzk5NiwgMjAyMCwgMCwgNDAyMiwgMTI4NzgzLCAwLCA3NzkyMywgMTI2NTkzLCA0MTY5MSwgMCwgMCwgNzQzMjksIAogICAgIDAsIDY0NjIyLCA5MDcwLCAwLCA2ODQxMSwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCA3NDQ0MCwgMCwgNzAwMCwgMzkwNCwgCkBAIC0xOTU3MSw3ICsxOTU5MSw3IEBACiAgICAgNjg2NzUsIDEyODA1NCwgMTUxMSwgOTMyNCwgNzgyMTEsIDEwNTE5LCA2NjMzMSwgMzQ1NCwgMTk5MzAsIDAsIDQxMDE5LCAwLCAKICAgICAwLCA2NTI5MiwgNjgyMiwgMTI4NjIsIDAsIDAsIDQyMTQzLCA0MTgyOCwgNzgyMDcsIDY1NTMxLCA3ODIwOCwgMTE4ODc5LCAKICAgICA1NTIyMywgMCwgMTI4MDcxLCA0MTgyNiwgODg2NSwgNjQwMiwgMCwgMTMyNzksIDc5MTcsIDc0NzU1LCAwLCA3NzMzLCAwLCAKLSAgICA0OTk4LCA5ODM4ODcsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKKyAgICA0OTk4LCA5ODM4OTYsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKICAgICAwLCA3NDc4OCwgMjAxNCwgMCwgMCwgOTc2NSwgMCwgMCwgMCwgMTk1MDU5LCA3ODM1NywgNjUyODEsIDEyNzgyNSwgMTA5NDksIAogICAgIDAsIDAsIDAsIDIwMTUsIDAsIDAsIDAsIDY2MzE4LCA0MzIzMywgMCwgNDI1MTcsIDAsIDAsIDAsIDEyNjk4LCA4MDk0LCAKICAgICAxMDEzNSwgNjU5MDksIDY0NzQsIDc5NCwgMCwgMTI2NTYsIDEyODEyMiwgMTE5MzUzLCAxMjgyNzAsIDE2NjUsIDAsIDQ4MzMsIApAQCAtMTk1OTAsOSArMTk2MTAsOSBAQAogICAgIDk0MjUsIDk0MjYsIDk0MjcsIDk0MjgsIDk0MjksIDY0NzU4LCAyMzYyLCA5NjU1LCAwLCAyMDA0LCA5MDk2LCA5NzgyLCAKICAgICAxMjg4NDgsIDkxNzIsIDEyODU0NSwgMTk5NjUsIDAsIDU5NTUsIDY3NjY2LCAxMTA4LCAwLCA3NDc3MywgMCwgMCwgNjQ3ODIsIAogICAgIDM5MjYsIDkyNDQ4LCA2NTIxMCwgODc5OCwgMCwgOTIxNjUsIDEzOTIsIDAsIDAsIDEyNzM2NCwgMTA2MDYsIDgwNjUsIAotICAgIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgOTI0MTgsIDQwMTksIDAsIDk4MzI4MCwgNDMyODAsIDgyMTksIAotICAgIDY4NDAyLCAxODEyLCAxMTk5NjMsIDk4MzY4MywgMCwgMTI2NDg4LCA0MjQxMCwgNzQ0NDgsIDExOTEzMiwgNjA1NCwgCi0gICAgMTA2OTcsIDMxNjksIDQyMjk3LCA0MjMyMiwgMTA2NDIsIDM5MDksIDk5NTAsIDAsIDEyODEzOSwgOTgzMjUzLCA2ODY3OCwgCisgICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgOTgzMjg4LCA0MzI4MCwgODIxOSwgCisgICAgNjg0MDIsIDE4MTIsIDExOTk2MywgOTgzNjkyLCAwLCAxMjY0ODgsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAKKyAgICAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMTI4MTM5LCA5ODMyNjEsIDY4Njc4LCAKICAgICAwLCAwLCAxMDQ5LCAwLCA2NTcwNywgMjMwNCwgNDE4MDYsIDkyMzI2LCA0MjMzNiwgMzkyMSwgMCwgMTE3NzUsIDY0NzYwLCAKICAgICAxMTc2NiwgMTAzOCwgNDIzMDMsIDk4MjMsIDEyNzI3OCwgNjkyMzYsIDQwMDgsIDY0MDA0LCA4NzczLCAxMDczMywgMzYsIDAsIAogICAgIDUxNTMsIDQxODA1LCAwLCA3MzczNSwgNzYzLCA0MTgwOCwgNjQ5MTAsIDk4MzEzMCwgMjAwOSwgMCwgMCwgMTI3MTQyLCAKQEAgLTE5NjA3LDcgKzE5NjI3LDcgQEAKICAgICA3ODAwMiwgMCwgNzUxMywgMTg2MywgNDcxMCwgMCwgNTk1NiwgNzYyMSwgNzgwMDYsIDkyNjI0LCA0NzA1LCA3MTYsIAogICAgIDc4MDA0LCAwLCA0NzA0LCAxMjAwNDAsIDEyMDI3MCwgNDIyNDEsIDE2MSwgNDM5NzcsIDc0NTQ2LCA2NjIxNCwgNDcwNiwgMCwgCiAgICAgNjk5MTQsIDQyNjcyLCA0NzA5LCAxMDY4MCwgMTE5MDY1LCA0MzI5MywgMTE5OTQ0LCAwLCAxMTkxNjQsIDEyMDMyOCwgCi0gICAgOTI0NjcsIDEwMTg3LCAxNzAwLCAxMTkyMjMsIDAsIDAsIDEyODExOSwgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCA5ODM2MzMsIAorICAgIDkyNDY3LCAxMDE4NywgMTcwMCwgMTE5MjIzLCAwLCAwLCAxMjgxMTksIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgOTgzNjQyLCAKICAgICA4NTA2LCAwLCAwLCAxMjY5OTYsIDEwMDUsIDkzNywgNzgyMTYsIDQ3MzQsIDI4NzAsIDAsIDc4MjE4LCA5ODMxMDksIDc0NjMsIAogICAgIDQ3MjksIDAsIDIzNSwgMTM4NCwgNDcyOCwgMCwgMTIwNDIwLCA5MjQ5MCwgNzQ0NDksIDgxMDksIDQzMTA1LCA5ODMxNzQsIAogICAgIDQ3MzAsIDQ0NywgMTMxODYsIDE1MTMsIDQ3MzMsIDEyMDQxNSwgMCwgMCwgNDI1MjcsIDEyOTExLCA0MzQyNywgMTM4MywgCkBAIC0xOTYxOCw3ICsxOTYzOCw3IEBACiAgICAgMTI3NjksIDY1OTA1LCA0MTY5NywgMTI4MywgMTIwMzAyLCA0Nzc5LCAwLCAzNzE5LCA0MDA2LCA5ODM1NjksIDE5OTU3LCAKICAgICAxMjg3NzMsIDIwMjEsIDExOTMzMiwgMTIwNjk5LCAxMTkxNTAsIDQzMDI4LCA2NTQ5MywgNDE4MzgsIDM4NzUsIDU5NjIsIAogICAgIDY0MzQxLCA5MjYxNiwgOTgxNCwgNDM0NTcsIDU4MjcsIDMzMTQsIDc3ODcsIDc4MjM0LCA2NTQ5NCwgNjgxNTMsIDAsIDAsIAotICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3ODUsIAorICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3OTQsIAogICAgIDk3NDIsIDUyMSwgMCwgMTA4MDAsIDkyMjIyLCA4NDA0LCAxOTQ2MjUsIDQ4MywgNzA5NiwgNzA4OSwgNjYzMjMsIDkyOCwgMCwgCiAgICAgMCwgMTE5MDE4LCAxMDU5OSwgMTE1ODYsIDM5ODksIDEwOTcxLCA0Mzc0OCwgNjU3ODIsIDk4NDEsIDg4NDMsIDEyMTQ1LCAKICAgICA5MjQ3MCwgMTAwNzQsIDc4NTQ4LCAwLCAzNzY5LCAwLCAwLCAwLCA5ODMxMDcsIDk1NzMsIDAsIDY1MjkwLCA4ODQ5LCAwLCAKQEAgLTE5NjI2LDE3ICsxOTY0NiwxNyBAQAogICAgIDczODM4LCA3ODU1MywgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAxMjA0NTcsIDEyNjYxLCA3NjA4LCAxMDM1NCwgMTA0MTgsIAogICAgIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgMTM5MCwgMCwgMCwgNDIxLCAKICAgICA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAxMjc3NzUsIDc1OTUsIDQyNTg4LCA3NjAwLCAxMjAxMjEsIDY2MDM1LCAKLSAgICA5ODM5MDQsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKKyAgICA5ODM5MTMsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKICAgICAyODQ2LCA5MjYwNSwgMCwgMCwgMTIwMTMyLCAwLCAxODM2LCAwLCAwLCA5MjU1OCwgMzc0MCwgNjk4NDMsIDYyOTAsIAogICAgIDY1Mzc0LCAxMjA0NTEsIDIzOTAsIDM5NDQsIDY2NjI4LCAxMjA0MzQsIDAsIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIAotICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4MzczNCwgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAorICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4Mzc0MywgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAogICAgIDk5OTgsIDEyODU2NCwgMCwgMCwgMCwgMCwgNjIwNCwgMCwgMCwgODI3OSwgODc3NiwgNjQ5NTQsIDQ5NzUsIDcwMDc1LCAKICAgICAxMjAxMzAsIDQyNjcsIDE2MzEsIDQyMjA2LCA3Nzk4MywgMCwgMTk1MDQ2LCA2NTcwMCwgNjY1NjIsIDAsIDY0NjQ1LCAwLCAKLSAgICAwLCAxMjY1ODgsIDEyNTg2LCAwLCA5MjQyLCAxMjc5MjIsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCA5ODM3ODgsIAorICAgIDAsIDEyNjU4OCwgMTI1ODYsIDAsIDkyNDIsIDEyNzkyMiwgMCwgNDUyMywgNTg0MiwgMTA0OTUsIDMxMjIsIDk4Mzc5NywgCiAgICAgNzc5MywgNzgyNzUsIDkzMjgsIDExOTEwNCwgNzgzOTMsIDEyNjA0LCAwLCA2NjE1LCAyMjg1LCA5MjM0NCwgMzk4NiwgCi0gICAgNDQwMjUsIDAsIDg5MTIsIDY0NTU1LCA3NDA5LCAwLCA5ODMzNTAsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgCi0gICAgMTE0OTgsIDAsIDk4MzM0OSwgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDk4MzEzOCwgMCwgMCwgCi0gICAgNjg0MjcsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgOTgzMzQyLCAwLCAxNjA2LCAxMjAzNDgsIAorICAgIDQ0MDI1LCAwLCA4OTEyLCA2NDU1NSwgNzQwOSwgMCwgOTgzMzU4LCA5NTQxLCA3ODI3NiwgMCwgMTEyNzUsIDg1NDAsIAorICAgIDExNDk4LCAwLCA5ODMzNTcsIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgNDEwNDEsIDc0NDEzLCA5ODMxMzgsIDAsIDAsIAorICAgIDY4NDI3LCAxMDQ1MCwgMTI1NTEsIDQxMDQzLCA3MDIwLCAxMjAzNTMsIDM3NjUsIDk4MzM1MCwgMCwgMTYwNiwgMTIwMzQ4LCAKICAgICAxMjAzNTEsIDMwOTMsIDY4NDM2LCAwLCA5ODMwNjEsIDExOTYxMywgMCwgMCwgNDMxMiwgNzQwOTEsIDEyMDMzNywgCiAgICAgMTIwMzM2LCAxMTkyMywgNDAyMywgMTIwMzMzLCA1NzYzLCA5NDAxNSwgNDgyNywgMTA4OTQsIDEyODEwLCA2NDQwNiwgCiAgICAgMTE4Nzg1LCA0NDU1LCA3NDMyMSwgNDMzLCAxMTk2MjAsIDY2NjYwLCAyNDk5LCAwLCAwLCAxMTg4MzcsIDExOTczLCAKQEAgLTE5NjQ2LDI1ICsxOTY2NiwyNSBAQAogICAgIDcwMDQsIDAsIDY1ODgwLCAxMjc4ODYsIDExOTA0OCwgMjM4MCwgMTEzODAsIDAsIDkzOTk2LCAyMzc2LCAwLCAxMTkzMjAsIAogICAgIDAsIDUxOTcsIDEyNzA0NiwgMTI3MDQ3LCAxMjcwNDgsIDIzNjYsIDEyNzA1MCwgMTI3MDUxLCAxMjA1NTQsIDEyMDA0NSwgMCwgCiAgICAgMCwgMCwgOTgzMDg0LCAwLCAwLCAwLCA3NDE4OCwgNzEzNDIsIDk4MzA4NiwgOTgzNTczLCAxMjAwNDcsIDEyODU3NSwgMCwgCi0gICAgMCwgMTIwMDQ5LCAwLCAxODQ3LCAwLCAxMDMzOSwgOTgzMzU3LCA0MjM4NCwgMCwgNDIyNywgNzQxNTgsIDAsIDkyNTAxLCAKLSAgICA0MzAzMiwgMCwgNDIzNjUsIDAsIDEyNjcxLCAxMTM4NCwgMCwgOTgzNDU3LCAwLCA2NDc5NywgOTgzMzM3LCA1ODIwLCAKLSAgICA5ODMzMzYsIDEyMDA1MiwgMTIwMDY1LCAwLCAxMjAwNjQsIDEyMDY1MCwgNDIxMzcsIDk4OTMsIDI3NTQsIDEyNjY0LCAKKyAgICAwLCAxMjAwNDksIDAsIDE4NDcsIDAsIDEwMzM5LCA5ODMzNjUsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgOTI1MDEsIAorICAgIDQzMDMyLCAwLCA0MjM2NSwgMCwgMTI2NzEsIDExMzg0LCAwLCA5ODM0NjUsIDAsIDY0Nzk3LCA5ODMzNDUsIDU4MjAsIAorICAgIDk4MzM0NCwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIAogICAgIDEyMDA2MywgMCwgNzM3NywgMTI3ODY3LCA0MTc5OSwgNjU1MzAsIDE3MTEsIDEyOTg0LCA0MzAzOSwgMzExNCwgNjI1NSwgCi0gICAgOTgzMzMyLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2MSwgNzQxODQsIDk4MzM2MCwgMTIwMDU1LCAwLCA0MzE3NSwgCisgICAgOTgzMzQwLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2OSwgNzQxODQsIDk4MzM2OCwgMTIwMDU1LCAwLCA0MzE3NSwgCiAgICAgMCwgNDMwMzcsIDQxNzk4LCA0MTAzNSwgMTE1ODMsIDEyNzc2OSwgNDE4MDEsIDExOTA4OCwgMTE5NjA1LCA1MjAsIDQyMDAsIAotICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2NzIsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAorICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2ODEsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAogICAgIDY0NTQzLCA5MTc5NDYsIDY1NTYzLCAwLCA5MTc5NzQsIDI4NjEsIDQzNzkzLCAxMDA5NSwgMCwgOTE5NSwgOTIzODYsIAogICAgIDE4NjEsIDAsIDczNzMzLCAwLCAwLCA0MzA0MSwgMCwgNDM3OTQsIDEyODUzMCwgMzg1OSwgMTIxODEsIDQxNjYwLCA4MjA5LCAKICAgICAwLCA3Mzg2NywgMTI5NzMsIDAsIDc0NzU3LCAxMjc1MTQsIDQxNjU4LCAwLCAwLCA1NzYwLCAwLCA3NDMsIDQ0MTQsIAogICAgIDEyMDc2NiwgMCwgNDI2MzIsIDkxNzk3MywgNjUxNjEsIDczODk2LCAxMjg1ODksIDAsIDE0MDUsIDExOTA2MywgNDMyMjAsIAogICAgIDQzMzQxLCAwLCAxOTkxOSwgMCwgNjQ1MzIsIDY1MzY3LCA0MzcxMCwgMCwgMCwgMzUxMywgMCwgMTE4ODgzLCA0MzM0MiwgCiAgICAgMTE5MDY0LCA2NTUyOSwgNjUzNjQsIDEyODE5NywgMCwgNjQ4NSwgMTM5NywgMCwgNDE5ODYsIDkyNjc4LCAwLCAwLCAKLSAgICA3NDA5NywgMCwgNzQ3MSwgMTIwNzksIDY3OTk3LCAxMjY4MiwgNDMyODcsIDkyMzE3LCAwLCA5ODMxNDMsIDk4MzY5OCwgMCwgCisgICAgNzQwOTcsIDAsIDc0NzEsIDEyMDc5LCA2Nzk5NywgMTI2ODIsIDQzMjg3LCA5MjMxNywgMCwgOTgzMTQzLCA5ODM3MDcsIDAsIAogICAgIDAsIDEwOTksIDEwNDkwLCAwLCAxMDUwMSwgNjUxODEsIDc0NDYzLCAwLCA0NjQsIDQxNjI0LCA2NTI4MywgNjc2NjMsIAogICAgIDc4MjIyLCAxMzQ2LCAwLCA5MTc2MzEsIDY0NTczLCA2NDg5NywgNDIzLCAxODE4LCA2NTE0NCwgMCwgODI3MiwgMTI3ODEyLCAKLSAgICAxOTkxMSwgNDIxOCwgMzA4NywgNjQ5NjAsIDEyNzIzNCwgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCA5ODM4OTMsIAorICAgIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTI3MjM0LCA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDk4MzkwMiwgCiAgICAgNzQzNTksIDEyNjI2LCA5MTA2LCAwLCA0MjY0MiwgMTIwMjMwLCA2NDc1MCwgOTM5MCwgMCwgNDE3OTcsIDAsIDAsIDI2NSwgCi0gICAgNDE3OTUsIDY0NjY2LCAxMjY1MDgsIDQzNTMwLCAyNzUyLCAwLCAwLCA5ODM0ODUsIDU5LCAwLCA5ODM1OTMsIDAsIDkyMzcxLCAKKyAgICA0MTc5NSwgNjQ2NjYsIDEyNjUwOCwgNDM1MzAsIDI3NTIsIDAsIDAsIDk4MzQ5MywgNTksIDAsIDk4MzU5MywgMCwgOTIzNzEsIAogICAgIDc3ODczLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIDQyMjUyLCA0MjIxMywgODAwOSwgCiAgICAgMzMwNSwgNDMwMzMsIDUxMSwgOTI3MDAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCA3NDM5NywgMTIwMjM1LCA5MTc5NzcsIAogICAgIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgMjEwMywgMTAzODcsIDQ0NTMsIDQzMjc2LCA5MTc3ODMsIApAQCAtMTk2NzUsMTcgKzE5Njk1LDE3IEBACiAgICAgMCwgNDE4NDEsIDQzMzM4LCAwLCAwLCA1NzI2LCA2NDkxNSwgNDIxNzUsIDAsIDAsIDQxNDk3LCA2NTA0NCwgMTIwMTA5LCAKICAgICAyODUxLCA0MzAxNywgOTgzNTg5LCAwLCA0MzczLCA3ODA1OCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMTI4ODQwLCAzMTAwLCAKICAgICAwLCA2NTM2MCwgMCwgOTIzNjUsIDkxNzc4OSwgNjQ5MjIsIDAsIDgxOTAsIDEyMDgzLCAwLCAwLCA2NTA2LCA2NDMxMiwgCi0gICAgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDk4MzgzOCwgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIAorICAgIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCA5ODM4NDcsIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCA4ODkxLCAKICAgICAzMDgwLCAxMjAyMjgsIDIzNDcsIDU0MzAsIDAsIDg5OTAsIDI4NDgsIDAsIDEyODIyMywgOTI1MjgsIDI0OSwgMCwgMCwgMCwgCiAgICAgMTIwNjU4LCAwLCAwLCA4ODgzLCA5MTc4MDIsIDcyOCwgNjgxNzgsIDk5NSwgMCwgMCwgNjQ4MjYsIDAsIDkxNzc5OCwgCi0gICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NDEsIDEyMTEyLCA2OTkxMiwgMCwgCisgICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NTAsIDEyMTEyLCA2OTkxMiwgMCwgCiAgICAgMCwgNzQ0MTksIDEyMzM1LCAxMjAxMDQsIDkxNzc5NSwgMzQ0MywgMzEyOSwgMCwgMjEwMiwgNjU0NDUsIDc4MjU4LCAKICAgICA2NDg5MSwgMCwgNzcyNSwgNjUxMDgsIDc4MjU1LCAwLCA4NjI0LCA2OTI0NiwgMTI0NDYsIDQzMjk1LCAwLCA0MTg5NCwgMCwgCiAgICAgNjI3NywgNDE2NzIsIDQxODkzLCAxMDAxMCwgMTI4Njc4LCAzNTQwLCAxMjg2NDksIDgzNSwgNzEzNDAsIDY5ODE2LCAKICAgICAxMTk4NjgsIDc0NDA4LCAwLCA3Mzk1OSwgNTQyNiwgNDI1OCwgMCwgMCwgNTQyNCwgMTI4MTI3LCA4MjgzLCAwLCA1NDM0LCAKICAgICA5ODM1OTAsIDAsIDE5OTE3LCAxMTQwOCwgMCwgMTE5NDcsIDAsIDE0MDQsIDMwOTUsIDExNDMyLCAxMjgzMDcsIDM0NjQsIAogICAgIDY0ODYsIDQ4MTksIDEyODIzMywgMCwgNTcwLCA4MDk1LCAzNjcyLCAxMTk4NjQsIDE0OTgsIDY3ODY2LCAwLCAxMjg1MzksIAotICAgIDQzMSwgMCwgMCwgMTI4MTgyLCAxMjgwOTYsIDY4MTY3LCA5ODM2NTQsIDEzMDk2LCAxMjg2NDMsIDAsIDQzNDA4LCA5NTE2LCAKKyAgICA0MzEsIDAsIDAsIDEyODE4MiwgMTI4MDk2LCA2ODE2NywgOTgzNjYzLCAxMzA5NiwgMTI4NjQzLCAwLCA0MzQwOCwgOTUxNiwgCiAgICAgMTI4NTM4LCA1MjY4LCA0MjIzMCwgNDIyMjAsIDAsIDQ0NTAsIDEyMDUxMSwgMTE1NDcsIDQzNDE3LCAxMjg1NDIsIDM1NiwgCiAgICAgMzQ3NywgMjI3LCAxMDQ4OCwgNjgyMDMsIDM4MiwgMTE0MTgsIDAsIDE5NTA2NiwgMCwgMCwgMCwgMCwgNjQ4NCwgMjU0MSwgCiAgICAgNjYwMzksIDAsIDc4NzE4LCA5MjcyMywgMzU0OSwgMCwgOTExMCwgMTE5NjY1LCAyNzQzLCAwLCA0MzI5MCwgMTk0ODEyLCAKQEAgLTE5Njk0LDcgKzE5NzE0LDcgQEAKICAgICAxMjg0OSwgMzk1MywgMTg5NywgMCwgNjUwOTQsIDExOTk0LCA0MzM5LCA3NDU1NiwgOTI2NTQsIDY3ODQzLCAwLCAwLCAwLCAKICAgICA2ODQ3MywgNzQxMDQsIDUyMjgsIDEyODgwNCwgNzg2OCwgNDMxODQsIDAsIDAsIDczOTg2LCA0MzQzOCwgMCwgNDMwMjIsIDAsIAogICAgIDExNjIsIDkxNzg0NywgMjY3MSwgMCwgMCwgOTI2MzIsIDkyNjMxLCAxMTg4NjUsIDQ1NTMsIDczODExLCAwLCAxOTUwMDUsIAotICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc3OSwgNTUyNDksIDQ4MjAsIAorICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc4OCwgNTUyNDksIDQ4MjAsIAogICAgIDY1MjM5LCAxOTQ2NjIsIDAsIDE5NDY2NSwgNDMwNDIsIDExOTIxMiwgMTM3NywgMTI4NjksIDQ4OTcsIDQyODIxLCA5MjUwLCAKICAgICAwLCA0NDM4LCA2NDM4NSwgMCwgMTc1MywgMTEzMzEsIDYxNDcsIDE5NDk0MSwgNDMyODIsIDg4MzMsIDAsIDAsIDY1MDQsIAogICAgIDc4NDA4LCAxMjY5NzksIDEwNzE5LCAwLCAxODk4LCAxNDEzLCA0MjQ0MywgMCwgODAyLCAxMjE0MSwgMCwgMTk0NjcxLCAKQEAgLTE5NzAzLDcgKzE5NzIzLDcgQEAKICAgICA3ODcxOSwgNjY1NzMsIDAsIDc4NzI0LCA3ODcxMiwgMTE3NjEsIDE5NDY1NSwgMCwgNDEwOTQsIDAsIDAsIDE5NDg5MywgMCwgCiAgICAgOTI2ODksIDYxOTYsIDY5NDUsIDkzOTY5LCAxOTQ4OTAsIDEyODE4NCwgMTIwNDkxLCAxMTgxNiwgMTk0OTQzLCA1NzMzLCAKICAgICAyOTMwLCAwLCAwLCA0MTA5OCwgMCwgNDEwOTMsIDAsIDY2NjI2LCA1ODgsIDk3NjAsIDAsIDE5NDcxNywgMTIzOCwgMjAwLCAKLSAgICA5ODMyMDUsIDE2NjAsIDczOTE2LCAwLCAxMTg5MDUsIDc0MzYyLCAwLCA5MjQ4NSwgMTk0NjUxLCAwLCA5ODM2OTcsIDMzOTQsIAorICAgIDk4MzIwNywgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDk4MzcwNiwgMzM5NCwgCiAgICAgMTk0ODk0LCAxMjA2NjgsIDAsIDAsIDEyNzM1OCwgNjYyMTksIDEyNzE4MywgNDMyODQsIDE5NDY1NiwgNzgxNywgMTg0MSwgCiAgICAgMTEwNTUsIDEyMDUzMywgMTk0OTc5LCAxOTQ5ODIsIDE2NjksIDEwNzc2LCAxOTQ5ODEsIDc3MDEsIDE5NDk4MCwgMCwgCiAgICAgMTk0OTk1LCAxNzMyLCA0MDMwLCAwLCAzOTYzLCA2NjYxMSwgMTI3NTMwLCA0MTc2OCwgNjQ5MSwgMCwgNjUzMjQsIDkxNCwgCkBAIC0xOTcxMSwzMCArMTk3MzEsMzAgQEAKICAgICAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDQzNDMwLCA1MzAxLCAwLCA5MjYxOCwgNTczNCwgCiAgICAgODk2MCwgMCwgOTI1MjcsIDY1MzE3LCA3Nzg4MCwgMCwgMCwgMCwgMTIzMDQsIDAsIDAsIDY1MzE1LCA5MjY3MCwgMTI4NTExLCAKICAgICAwLCAwLCAwLCAxMTk2MjEsIDkyNTI5LCA3NDUzNiwgMTI0NDcsIDY0NDg2LCAxMjczNzQsIDEyNjU2MiwgOTgzMTI5LCAwLCAKLSAgICAwLCA5ODM3OTMsIDQyNzY3LCAxMDkxNSwgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIAorICAgIDAsIDk4MzgwMiwgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgMTE5NzUsIDE5NDg3OCwgMCwgCiAgICAgOTI2MDQsIDI1NTUsIDg2MjksIDEyODY0MCwgNDMxNjgsIDQxODcyLCA0MzcwNiwgNDQ5NiwgMTk0ODc5LCAxMjgxNDgsIAogICAgIDEyMDI0MSwgMCwgMCwgMCwgMCwgNjQ3MzAsIDcwMDQxLCA2NjcxNCwgNjgyMjIsIDAsIDcwMDc2LCA2NTU5NiwgOTIzMDYsIAogICAgIDExNDE2LCA0MjgwLCA2NzY1NSwgODc2NSwgMTI3ODQsIDc3OTIsIDEzOTMsIDEyNjQ3MywgNjc4NzEsIDc0Mzg2LCAwLCAKICAgICA4MjMzLCAxMjgyMCwgMCwgNjY4MywgMTk0ODc2LCAzNDQyLCAxMjE0NCwgMjg0MSwgMTI1NDMsIDAsIDE0NzMsIDQyODIwLCAKICAgICA2NDMyOSwgMTI3ODMyLCAwLCA2ODY0MiwgNjQ4OCwgMzU3LCAxMDQ4LCA0MTEwMCwgMCwgNDExMDQsIDk0MDAzLCAzNDA2LCAKICAgICAxMDU0LCA3MTMyMCwgMTA0MCwgNjU0NTAsIDAsIDQ0MzQsIDEwNjksIDAsIDExODg2MiwgNjU3MzcsIDkxNzc2NSwgCi0gICAgMTI4NzA1LCAwLCA5ODM2ODQsIDk2OTMsIDQxOTQzLCAxMjY1NjQsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAotICAgIDEwNTksIDk3OTAsIDg5OTUsIDExOTk3NCwgOTgzNjg3LCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIAotICAgIDkyMzcyLCAwLCA3NDgzMCwgNzg1NjksIDEyNzQzLCA5ODM2ODAsIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgCi0gICAgMTIyMDcsIDExOTYxOSwgNjMzNSwgNjY2MDIsIDExMzEyLCA2NDgwNywgMCwgMCwgNDE3NjcsIDExOTYyOSwgOTgzNzU1LCAKLSAgICA0MzAyMCwgMTI4MjcxLCAzOTU1LCA3NDI1NCwgMCwgOTgzNzQ1LCA5MTc4NjEsIDAsIDc3OTI2LCA5NzcwLCA5MjQ2LCAKKyAgICAxMjg3MDUsIDAsIDk4MzY5MywgOTY5MywgNDE5NDMsIDEyNjU2NCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgCisgICAgMTA1OSwgOTc5MCwgODk5NSwgMTE5OTc0LCA5ODM2OTYsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgCisgICAgOTIzNzIsIDAsIDc0ODMwLCA3ODU2OSwgMTI3NDMsIDk4MzY4OSwgNjQ4MCwgOTE3NzYxLCA0MTc3OSwgNDI1ODAsIDY2NjAxLCAKKyAgICAxMjIwNywgMTE5NjE5LCA2MzM1LCA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMTE5NjI5LCA5ODM3NjQsIAorICAgIDQzMDIwLCAxMjgyNzEsIDM5NTUsIDc0MjU0LCAwLCA5ODM3NTQsIDkxNzg2MSwgMCwgNzc5MjYsIDk3NzAsIDkyNDYsIAogICAgIDEyMjMwLCAwLCAwLCAwLCAxMDQ0OCwgNDE3ODMsIDQxNzg2LCAxMjcwOTMsIDEyNzk3LCAyNzU1LCA2NDU3MSwgNzg1NzgsIAogICAgIDE5NDkyNywgNDg1NywgMCwgNDQyOCwgMTI3OTQsIDczNzU1LCAxMjgwNjEsIDc4NTc0LCAwLCA3NDI4NCwgMCwgNTc0NywgCiAgICAgNzg4MjUsIDAsIDc5NzgsIDQxMDkyLCA3NDU3MSwgMCwgMTE5MjQsIDQzODEyLCA0MjE0NCwgNjUwMTUsIDAsIDU2MywgMCwgCi0gICAgOTgzNjgyLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCA5MTc4NjAsIDExOTA0MywgMCwgOTQwNTEsIDQzMTM3LCA2OTQsIDAsIAorICAgIDk4MzY5MSwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgOTE3ODYwLCAxMTkwNDMsIDAsIDk0MDUxLCA0MzEzNywgNjk0LCAwLCAKICAgICA5ODc2LCAwLCAxMTkxNjgsIDAsIDc4ODIyLCA2NDUzNywgMCwgMjc3LCA3NDM4NSwgNzIyOSwgMTI3NjEsIDAsIDAsIAogICAgIDEzMDI1LCA2NDgxMSwgODc1NywgNzg4MjQsIDEyNjQ3OCwgMTU3NCwgNzM4MSwgMCwgMjUyNSwgNDg1MiwgNTc0OSwgCiAgICAgNjg0NjUsIDEzMDI3LCA0MjgyNCwgMTIwNTc0LCAxMDM5LCA3MTUxLCAxMDE1NSwgNTc0NSwgMTg4LCA0MTg1OCwgMTE1OTIsIAogICAgIDAsIDc0MDE1LCA5MDU1LCA0MTg1MywgNDg1OCwgOTE3NzgwLCAwLCA0MzYsIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIAogICAgIDgwNTEsIDAsIDExOTYwOSwgNzEzMjcsIDk2NDQsIDAsIDAsIDAsIDE5NDkxNiwgMTIwNzMyLCA2NjcxMCwgMTE4ODM0LCAKLSAgICA5ODMzNTEsIDczOTA2LCAxMjg2ODAsIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgCisgICAgOTgzMzU5LCA3MzkwNiwgMTI4NjgwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIAogICAgIDE5NDkxOCwgNjgzOTMsIDAsIDM1MDQsIDExOTE3OCwgMCwgMTA4MjIsIDUxNDksIDY2MDI5LCAxMDIyNiwgNjUxNDIsIAotICAgIDEyODAyNSwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIDEyNjU3LCA5ODM2NTYsIDAsIDM4NiwgMCwgODgzNCwgMCwgCisgICAgMTI4MDI1LCAzNTk0LCA0MjQyNCwgMTk0OTU5LCA0MCwgMTI2NTcsIDk4MzY2NSwgMCwgMzg2LCAwLCA4ODM0LCAwLCAKICAgICAxMjgxNSwgNDM1NzQsIDAsIDczOTA3LCAwLCA3NDE5NiwgNzIyMCwgNzQ1MDQsIDAsIDc0MzE2LCAwLCA2NTMyMiwgNDMwNCwgCiAgICAgNzQ1MDMsIDgxNjAsIDc4NzA3LCAxOTQ3NTMsIDAsIDAsIDEyODUyNiwgMTM0OCwgOTIzNDksIDc4NTk3LCAxMjY1MzksIAogICAgIDEzMzAzLCAwLCA5MjM5MiwgMTk0NzU1LCA3NTk5LCAxMjc4LCA0MzYxNiwgMTMyNjksIDAsIDAsIDc0Mzg3LCA3ODE3OSwgCkBAIC0xOTc0NiwyNSArMTk3NjYsMjUgQEAKICAgICA0MjUwNywgMTk2MiwgNDMzMDUsIDc4NDc2LCA0MjUwNSwgMTE2NjAsIDAsIDIwNzIsIDkyMzEyLCA2OTk1LCA3NDE3MywgCiAgICAgNTQzNywgNzQxNzQsIDEwNjY5LCA4NzAyLCA3OTY0LCA5MjM1MiwgMCwgMTk5LCAxOTQ4NDMsIDQxMDUsIDE5NDg0NSwgCiAgICAgMTk0Njk5LCAxOTQ4NDcsIDE5NDcxMCwgMTE5ODc1LCAxMzE0OCwgNzU2MCwgNzg0NzksIDkyMjYsIDc4NDgwLCAxOTUwNzAsIAotICAgIDY0NzIsIDY1ODE0LCA3Mzk1NCwgMCwgNDcyNCwgMCwgMCwgOTE5MSwgMCwgNjQ0MzIsIDk4MzgwOCwgOTgzMjQxLCAKKyAgICA2NDcyLCA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCA5ODM4MTcsIDk4MzI0NywgCiAgICAgMTk1MDI0LCAxMDE5NiwgNzg4NiwgMCwgNjU4NSwgMCwgNjY4MCwgMTk1MDQyLCAwLCAxOTUwNTEsIDY2NzksIDc0NDEyLCAKLSAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYyMiwgOTgzNjI4LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKKyAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYzMSwgOTgzNjM3LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKICAgICAxOTQ4MzIsIDY2ODEsIDEyNzQ4MiwgMTI2OTMsIDE5NDgzNiwgNDI3MjcsIDc4MTk2LCAxMjgyNTIsIDc4MTk1LCA2NTQ0MiwgCi0gICAgMTE5NjEwLCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDE5NDgxOCwgMTI4ODQ1LCAxOTQ4MjAsIAorICAgIDExOTYxMCwgNjk3MzMsIDk5ODksIDQzMjQ4LCA2NjI0OCwgMTk0ODE2LCAwLCAxMTMyMSwgMTI4ODQ1LCAxOTQ4MjAsIAogICAgIDE5NDgxOSwgNTI5NywgNzA0MiwgMTMyODQsIDYxMTIsIDc5NjgsIDE5NDgyNSwgNzM5MjcsIDkyNDQ0LCAxOTQ3MzYsIAogICAgIDY1NzQ2LCAxMjc0NzYsIDY5ODg5LCA3NDM4OSwgMTI4Njk2LCA0MzQyLCA0MjgzOSwgMTk0ODMxLCAxNjc3LCAwLCAwLCAKICAgICAxMjY1OTAsIDkxNzg1NSwgMTEwOTEsIDExMDExLCAyNzE5LCAwLCAwLCAxMTk1OTUsIDEwMTYwLCAwLCAwLCA3NTg1LCAKICAgICA2NTE2OSwgMjA1MiwgNDMwOCwgOTIxNzQsIDQzMDAwLCA3NTA1LCA1NDMsIDY0OTE2LCA2NDczNiwgMCwgMCwgNjQ2NTUsIDAsIAotICAgIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIDAsIDY1MjY1LCAxOTQ2MzksIDAsIDEyNzE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTI5OTQsIDkyNzI4LCAxMDgyOCwgOTgzOTM0LCA2MjI4LCA0MzA3LCAzNDgyLCAxMjg1MjcsIDAsIDAsIDAsIDUwNiwgCi0gICAgNzQ1NzMsIDQxMTk0LCA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCA5ODM2NzEsIDg4NDEsIDAsIDUxNiwgCisgICAgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMTI3MTcwLCAwLCA5ODM2MjUsIDAsIAorICAgIDAsIDEyOTk0LCA5MjcyOCwgMTA4MjgsIDk4Mzk0MywgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCAwLCAwLCAwLCA1MDYsIAorICAgIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgOTgzNjgwLCA4ODQxLCAwLCA1MTYsIAogICAgIDkzOTc0LCAyMDYzLCAxMTkwNTEsIDM0LCAxMjg4NTAsIDEyMDE4NiwgMTE1MDQsIDE2MTIsIDc0MzMzLCAxMjAxODIsIAogICAgIDExODI3LCA3NDMwOCwgMTIwMDEsIDEyMDE3OCwgMTAyNDIsIDY0NTY0LCAxMjAxNzksIDY3OTg2LCA2NTg0LCA3NzQ5LCAKICAgICAxMTAzNywgMCwgMTc1OCwgMTI3MDkyLCAxMDY2NywgMTA1NjAsIDEyMDE5NywgOTI1OTMsIDE5MzUsIDExNTE3LCAxMjAxOTMsIAogICAgIDEyMDE5NiwgMTIwMTk1LCAxOTMxLCAxMjAxODksIDc0ODM5LCAxMjAxOTEsIDEyMTcsIDY0NzAyLCAxMjY0MywgODI1LCAKICAgICAxMjc4MzgsIDE5NDkwNSwgMTIyOTQsIDkyNDI4LCA3ODgzNCwgOTEzOCwgNzg4MzEsIDc4ODMzLCAxMjYzMSwgNzg4MjksIAogICAgIDExMDgwLCA3NDU1NCwgNjQwMDAsIDU1OTEsIDEyMzksIDAsIDExMzEzLCAwLCAzNDAzLCAwLCAwLCA2NDM2NCwgOTIyNjksIAotICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQwLCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAorICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQ5LCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAogICAgIDM0MzMsIDkyMzkzLCAxMjYxNSwgMTU5NCwgNDIxOTIsIDY5MTQsIDY3NjAzLCAwLCAxMTk1NjksIDc0NTY1LCA0MTM1MywgCiAgICAgNjc2MDIsIDY3NjExLCA0MzM3LCAwLCAxMjcyOTYsIDkxOCwgNjUwMzUsIDQxMzUxLCA3NjgxLCAxOTQ5MDAsIDQyNTc3LCAKICAgICA0MTM5MywgMTI2NjgsIDE5NDkwNCwgMjQ3NywgMTI3Mjg1LCAwLCAxMjczMDEsIDAsIDY3NjA0LCAxOTQ4ODAsIDEyNzIzNSwgCkBAIC0xOTc3NiwxNCArMTk3OTYsMTQgQEAKICAgICA3Mzc5NiwgMCwgMTE5MjI4LCAxMjAzNSwgMCwgMjgxOCwgMCwgNzQ0MTEsIDczNzkzLCAwLCA0MTcyLCAwLCAwLCA4MzczLCAKICAgICAxMDg3MywgMTIxOTcsIDAsIDAsIDkyMjY1LCA2OTcwNiwgMCwgNzgyMTAsIDAsIDEyODExMCwgMTk0ODY1LCAxMjY5ODIsIAogICAgIDc0NTYzLCA2NDgyOCwgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAwLCAxMTg4NDUsIDExMzgxLCAzMjY1LCA2NjYxNywgCi0gICAgMzI3NCwgMTI3MzY1LCAxMjY1MjMsIDk0MDQyLCA5ODM5NDEsIDc0NTIyLCA0MTk4OSwgMCwgMCwgMTI4Nzk4LCAzMjYzLCAwLCAKKyAgICAzMjc0LCAxMjczNjUsIDEyNjUyMywgOTQwNDIsIDk4Mzk1MCwgNzQ1MjIsIDQxOTg5LCAwLCAwLCAxMjg3OTgsIDMyNjMsIDAsIAogICAgIDY1NjcyLCAwLCAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIDAsIDAsIDk1MDUsIDY1NTE4LCAxOTQ3NzYsIDc1NiwgCiAgICAgMTk0NjA1LCAwLCAwLCAwLCA3MjYxLCAwLCAxODYsIDAsIDExOTE1NiwgNTc3MCwgMTMxNzksIDY1ODMwLCAxMjYxMiwgCi0gICAgMTI5NDksIDY0ODU2LCAxMjgwMCwgOTgzODkyLCA3NDIwMywgNjQ3MTgsIDExNTA3LCAwLCA5MjQzNCwgMTE4OTI5LCAwLCAKKyAgICAxMjk0OSwgNjQ4NTYsIDEyODAwLCA5ODM5MDEsIDc0MjAzLCA2NDcxOCwgMTE1MDcsIDAsIDkyNDM0LCAxMTg5MjksIDAsIAogICAgIDExNTc4LCAwLCAxMTkyOTYsIDAsIDAsIDAsIDAsIDc0NTY4LCA5MjU0LCAwLCAxNzk0LCAxMjAyMTcsIDY0NTIxLCA1NjI0LCAKICAgICAxMjAyMjAsIDEyMDIyMSwgMTE5OTU4LCAxMjAyMjMsIDM2MTcsIDY2NjM2LCA2NDg4NiwgOTQwNjEsIDEyMDIxMiwgCiAgICAgMTIwMjEzLCAxMjAyMTQsIDE4NzIsIDY2NTA4LCAxMjA0NjcsIDQxMDc5LCAxMDc0OCwgNTUwMiwgMTE5MzMwLCA0NDUyLCAwLCAKLSAgICA5ODM3NjIsIDkyNTI2LCA0NTExLCAwLCA5ODM4NjgsIDY0Njc4LCAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDE5NDc4MywgCisgICAgOTgzNzcxLCA5MjUyNiwgNDUxMSwgMCwgOTgzODc3LCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAxOTQ3ODMsIAogICAgIDY5OTAzLCAwLCA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAKICAgICAxMjAyMDAsIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCA3ODIwMiwgNjQwNTgsIDg3OTksIAogICAgIDQyMTMxLCAwLCA2NDA2MiwgMTAyOCwgNjQwNjAsIDY0MDU5LCA4MzcsIDEwNTY3LCAwLCA0MzEwMywgMCwgMTIwNzU0LCAKQEAgLTE5NzkyLDI2ICsxOTgxMiwyNiBAQAogICAgIDY0MDMyLCA0MjczNSwgNjQwMzgsIDY0MDM3LCA2NDAzNiwgNjQwMzUsIDQyOTEsIDE5NDkyOCwgNjQwMTUsIDY0MDE0LCAKICAgICA2NDY4MSwgMTk0OTMwLCAwLCA3ODE0NSwgMCwgNDMwOTAsIDAsIDM0NzYsIDg5NzMsIDY0MDEyLCA0MjQ3MywgNjQwMTAsIAogICAgIDY0MDA4LCA2NDAwNywgMjAwMywgNzcwNiwgNjQ1MTcsIDc4MTUzLCAyNTM4LCA2NDAwOSwgMjA0LCAwLCA0ODAyLCA0MTExLCAKLSAgICA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIDcyNDcsIDY0MDU0LCA5ODMyNTgsIDAsIDQ3NjcsIDkzNDMsIAorICAgIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI2NiwgMCwgNDc2NywgOTM0MywgCiAgICAgNjQwNDksIDY0MDQ4LCAxMjAwMzQsIDExMzMsIDY0MDUzLCA2NDA1MiwgNDM0NTMsIDY0MDUwLCA0MTM0MCwgMTE4OTc1LCAKICAgICAxOTQ4MzUsIDEwMDA1LCAxMjMyOSwgNDEzMzMsIDAsIDg0ODksIDE5NDIsIDAsIDE5NDgzNCwgNDI1MjAsIDEyODI0OSwgMCwgCiAgICAgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDQzNjcwLCAwLCA2NDAyNSwgOTE2NywgNDIxNTEsIDc4MjQ0LCAKLSAgICA5ODMyMjYsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKKyAgICA5ODMyMzIsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKICAgICA3NzkxNCwgNzgyNDYsIDc4MjQ3LCAwLCA3NzkxNSwgNzg3NjYsIDY3ODgsIDEzMDk0LCA3NzkyMCwgNzUzMiwgNDE0MTQsIAogICAgIDc4NTIwLCAzMTc5LCA3ODUxOCwgNjQ3NjksIDc4NTE0LCA3ODUxNywgMTE0NjEsIDc0NDU0LCAxMDc1MSwgOTA1MSwgCi0gICAgMTIwNzIwLCA2NzA4LCAxMDUzNSwgMCwgNjgyMTgsIDU1Mjc0LCAyMDA4LCA2NDAzMSwgNjQwMzAsIDI5NCwgNDE4NzQsIDAsIAotICAgIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgNDE3ODgsIDE5NDg0NCwgMCwgNDM1MSwgCi0gICAgNjM0MywgNDMyNDcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgMTE5ODg5LCAxMTQzMywgMTE5ODk1LCAKLSAgICAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAxOTQ4MzksIDEyOTE1LCA0Mzk2OCwgMzI5NywgOTY5OSwgMTk0OTU1LCAxMTM1LCAKLSAgICAwLCAwLCAxMjg1MjUsIDE5OTUsIDY3MjIsIDk4MzkxNiwgMCwgMjU1MiwgNDE1NDYsIDYwLCA2ODM5NCwgODY0OSwgNDE1NDksIAotICAgIDc4NDk2LCA5ODMzMTksIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDk4MzYyMSwgMjAxMywgMTI4MjkxLCAKLSAgICA3ODUzMCwgNzg1MzIsIDc4NTI4LCA3ODUyOSwgMTI4MzIsIDc4NDkzLCA4MDgxLCA4MzYyLCAzNTM3LCAxMTk5MDgsIDkxMzcsIAotICAgIDcxNTUsIDg5OTksIDAsIDc4NTMzLCAzNDY2LCAwLCAwLCAxOTk2LCAwLCAzNDUzLCA2MjgyLCAwLCAyMDAyLCAyMDAwLCAKLSAgICAxMjAxNzUsIDUzNywgMCwgNDE3OSwgNjUxMTksIDE5OTgsIDAsIDE4NDIsIDAsIDkyNjc0LCA5NjI4LCA2ODQ0NiwgMTIwODEsIAotICAgIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAwLCAwLCAxMjAyMDEsIDk4MzYzNywgMCwgMCwgMzA1OSwgNDQwMjQsIDEyMDIwNCwgCi0gICAgMTE5OTUzLCA5MjY5MywgMCwgMCwgOTI0NTIsIDQxMDAsIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgMzU5MiwgMTAwNzgsIDAsIAotICAgIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMTI4NzkyLCAxMDc0MiwgMCwgNDI5MTgsIDE5OTQsIDkyODEsIDMyOTYsIAotICAgIDEyODY1LCAxOTk3LCAxODk1LCAKKyAgICAxMjA3MjAsIDY3MDgsIDEwNTM1LCA5ODM2MjcsIDY4MjE4LCA1NTI3NCwgMjAwOCwgNjQwMzEsIDY0MDMwLCAyOTQsIAorICAgIDQxODc0LCAwLCAxMjY5OTEsIDY1OTI5LCAwLCAwLCAwLCAwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIAorICAgIDAsIDQzNTEsIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIDAsIDExOTg4NiwgMTE5ODkxLCAxMTk4OTIsIDExOTg4OSwgMTE0MzMsIAorICAgIDExOTg5NSwgMTE5ODk2LCAwLCA3ODAxLCA2NTU3OCwgMTk0ODM5LCAxMjkxNSwgNDM5NjgsIDMyOTcsIDk2OTksIDE5NDk1NSwgCisgICAgMTEzNSwgMCwgMCwgMTI4NTI1LCAxOTk1LCA2NzIyLCA5ODM5MjUsIDAsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIAorICAgIDQxNTQ5LCA3ODQ5NiwgOTgzMzI3LCAwLCA2NjgyLCAwLCA3ODY3OSwgNjQ3MTAsIDQxNTQ3LCA5ODM2MzAsIDIwMTMsIAorICAgIDEyODI5MSwgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgCisgICAgMTE5OTA4LCA5MTM3LCA3MTU1LCA4OTk5LCAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgCisgICAgMjAwMiwgMjAwMCwgMTIwMTc1LCA1MzcsIDAsIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCA5MjY3NCwgOTYyOCwgCisgICAgNjg0NDYsIDEyMDgxLCA5ODI2LCA2NDUwMiwgMTc2NywgMCwgMCwgMCwgMTIwMjAxLCA5ODM2NDYsIDAsIDAsIDMwNTksIAorICAgIDQ0MDI0LCAxMjAyMDQsIDExOTk1MywgOTI2OTMsIDAsIDAsIDkyNDUyLCA0MTAwLCA5MjAsIDE4MTEsIDEzNTUsIDAsIDAsIAorICAgIDM1OTIsIDEwMDc4LCAwLCAwLCAwLCA4NTkyLCA2NTg3MCwgNjgxNjQsIDEyODc5MiwgMTA3NDIsIDAsIDQyOTE4LCAxOTk0LCAKKyAgICA5MjgxLCAzMjk2LCAxMjg2NSwgMTk5NywgMTg5NSwgCiB9OwogCiAjZGVmaW5lIGNvZGVfbWFnaWMgNDcKQEAgLTE5ODE5LDcgKzE5ODM5LDcgQEAKICNkZWZpbmUgY29kZV9wb2x5IDMyNzcxCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19zdGFydCA9IDB4ZjAwMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfZW5kID0gMHhmMDFjMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19lbmQgPSAweGYwMWM5Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lX2FsaWFzZXNbXSA9IHsKICAgICAweDAwMDAsCiAgICAgMHgwMDAwLApAQCAtMTk5ODIsNiArMjAwMDIsOCBAQAogICAgIDB4MDFBMiwKICAgICAweDAxQTMsCiAgICAgMHgwMzRGLAorICAgIDB4MDYxQywKKyAgICAweDA3MDksCiAgICAgMHgwQ0RFLAogICAgIDB4MEU5RCwKICAgICAweDBFOUYsCkBAIC0yMDAwNSw2ICsyMDAyNywxMCBAQAogICAgIDB4MjAyRiwKICAgICAweDIwNUYsCiAgICAgMHgyMDYwLAorICAgIDB4MjA2NiwKKyAgICAweDIwNjcsCisgICAgMHgyMDY4LAorICAgIDB4MjA2OSwKICAgICAweDIxMTgsCiAgICAgMHgyNDQ4LAogICAgIDB4MjQ0OSwKQEAgLTIwMDI5LDYgKzIwMDU1LDggQEAKICAgICAweEZFRkYsCiAgICAgMHhGRUZGLAogICAgIDB4RkVGRiwKKyAgICAweDEyMkQ0LAorICAgIDB4MTIyRDUsCiAgICAgMHgxRDBDNSwKICAgICAweEUwMTAwLAogICAgIDB4RTAxMDEsCkBAIC0yMDI3OCw3ICsyMDMwNiw3IEBACiB9IG5hbWVkX3NlcXVlbmNlOwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19zdGFydCA9IDB4ZjAyMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19lbmQgPSAweGYwM2E1Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfZW5kID0gMHhmMDNhZTsKIHN0YXRpYyBjb25zdCBuYW1lZF9zZXF1ZW5jZSBuYW1lZF9zZXF1ZW5jZXNbXSA9IHsKICAgICB7MiwgezB4MDEwMCwgMHgwMzAwfX0sCiAgICAgezIsIHsweDAxMDEsIDB4MDMwMH19LApAQCAtMjAzNDksNiArMjAzNzcsMTUgQEAKICAgICB7MiwgezB4MDI1OSwgMHgwMzAxfX0sCiAgICAgezIsIHsweDAyNUEsIDB4MDMwMH19LAogICAgIHsyLCB7MHgwMjVBLCAweDAzMDF9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjI3fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDY0OH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2NDl9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM2fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDN319LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Qzh9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkQwfX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZENX19LAorICAgIHsyLCB7MHgwNjQ2LCAweDA2QTl9fSwKICAgICB7MywgezB4MDk5NSwgMHgwOUNELCAweDA5Qjd9fSwKICAgICB7MiwgezB4MEI5NSwgMHgwQkNEfX0sCiAgICAgezIsIHsweDBCOTksIDB4MEJDRH19LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96aXBpbXBvcnQuYyBiL01vZHVsZXMvemlwaW1wb3J0LmMKaW5kZXggMmZlYjJhOC4uOGZlOTE5NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96aXBpbXBvcnQuYworKysgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCkBAIC0xNCw2ICsxNCwxMCBAQAogICAgIGludCB0eXBlOwogfTsKIAorI2lmZGVmIEFMVFNFUAorX1B5X0lERU5USUZJRVIocmVwbGFjZSk7CisjZW5kaWYKKwogLyogemlwX3NlYXJjaG9yZGVyIGRlZmluZXMgaG93IHdlIHNlYXJjaCBmb3IgYSBtb2R1bGUgaW4gdGhlIFppcAogICAgYXJjaGl2ZTogd2UgZmlyc3Qgc2VhcmNoIGZvciBhIHBhY2thZ2UgX19pbml0X18sIHRoZW4gZm9yCiAgICBub24tcGFja2FnZSAucHljLCAucHlvIGFuZCAucHkgZW50cmllcy4gVGhlIC5weWMgYW5kIC5weW8gZW50cmllcwpAQCAtNjYsOSArNzAsNiBAQAogICAgIFB5T2JqZWN0ICpwYXRoLCAqZmlsZXMsICp0bXA7CiAgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGxlbiwgZmxlbjsKLSNpZmRlZiBBTFRTRVAKLSAgICBfUHlfSURFTlRJRklFUihyZXBsYWNlKTsKLSNlbmRpZgogCiAgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygiemlwaW1wb3J0ZXIoKSIsIGt3ZHMpKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0xMTcsNiArMTE4LDggQEAKICAgICAgICAgaWYgKGZsZW4gPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHBhdGgsIDAsIGZsZW4pOworICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhaaXBJbXBvcnRFcnJvciwgIm5vdCBhIFppcCBmaWxlIik7CkBAIC00NjksMTAgKzQ3MiwxMyBAQAogICAgIGlmIChpc3BhY2thZ2UpIHsKICAgICAgICAgLyogYWRkIF9fcGF0aF9fIHRvIHRoZSBtb2R1bGUgKmJlZm9yZSogdGhlIGNvZGUgZ2V0cwogICAgICAgICAgICBleGVjdXRlZCAqLwotICAgICAgICBQeU9iamVjdCAqcGtncGF0aCwgKmZ1bGxwYXRoOwotICAgICAgICBQeU9iamVjdCAqc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKKyAgICAgICAgUHlPYmplY3QgKnBrZ3BhdGgsICpmdWxscGF0aCwgKnN1Ym5hbWU7CiAgICAgICAgIGludCBlcnI7CiAKKyAgICAgICAgc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKKyAgICAgICAgaWYgKHN1Ym5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgZnVsbHBhdGggPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVUlYyVVJVUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5hcmNoaXZlLCBTRVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnByZWZpeCwgc3VibmFtZSk7CkBAIC01NTQsOSArNTYwLDYgQEAKIHsKICAgICBaaXBJbXBvcnRlciAqc2VsZiA9IChaaXBJbXBvcnRlciAqKW9iajsKICAgICBQeU9iamVjdCAqcGF0aCwgKmtleTsKLSNpZmRlZiBBTFRTRVAKLSAgICBfUHlfSURFTlRJRklFUihyZXBsYWNlKTsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICp0b2NfZW50cnk7CiAgICAgUHlfc3NpemVfdCBwYXRoX3N0YXJ0LCBwYXRoX2xlbiwgbGVuOwogCkBAIC04NjIsNiArODY1LDcgQEAKICAgICBsb25nIGwsIGNvdW50OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBjaGFyIG5hbWVbTUFYUEFUSExFTiArIDVdOworICAgIGNoYXIgZHVtbXlbOF07IC8qIEJ1ZmZlciB0byByZWFkIHVudXNlZCBoZWFkZXIgdmFsdWVzIGludG8gKi8KICAgICBQeU9iamVjdCAqbmFtZW9iaiA9IE5VTEw7CiAgICAgY2hhciAqcCwgZW5kb2ZfY2VudHJhbF9kaXJbMjJdOwogICAgIFB5X3NzaXplX3QgYXJjX29mZnNldDsgIC8qIEFic29sdXRlIG9mZnNldCB0byBzdGFydCBvZiB0aGUgemlwLWFyY2hpdmUuICovCkBAIC04NjksNyArODczLDcgQEAKICAgICBjb25zdCBjaGFyICpjaGFyc2V0OwogICAgIGludCBib290c3RyYXA7CiAKLSAgICBmcCA9IF9QeV9mb3BlbihhcmNoaXZlLCAicmIiKTsKKyAgICBmcCA9IF9QeV9mb3Blbl9vYmooYXJjaGl2ZSwgInJiIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3Qgb3BlbiBaaXAgZmlsZTogJVIiLCBhcmNoaXZlKTsKQEAgLTkwNSwxNyArOTA5LDI1IEBACiAKICAgICAvKiBTdGFydCBvZiBDZW50cmFsIERpcmVjdG9yeSAqLwogICAgIGNvdW50ID0gMDsKKyAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQsIDApID09IC0xKQorICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAgICAgZm9yICg7OykgewogICAgICAgICBQeU9iamVjdCAqdDsKICAgICAgICAgaW50IGVycjsKIAotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQsIDApID09IC0xKSAgLyogU3RhcnQgb2YgZmlsZSBoZWFkZXIgKi8KLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgaGVhZGVyICovCiAgICAgICAgIGwgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CisgICAgICAgIGlmIChsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAobCAhPSAweDAyMDE0QjUwKQogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBCYWQ6IENlbnRyYWwgRGlyIEZpbGUgSGVhZGVyICovCi0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCArIDgsIDApID09IC0xKQotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKworICAgICAgICAvKiBPbiBXaW5kb3dzLCBjYWxsaW5nIGZzZWVrIHRvIHNraXAgb3ZlciB0aGUgZmllbGRzIHdlIGRvbid0IHVzZSBpcworICAgICAgICBzbG93ZXIgdGhhbiByZWFkaW5nIHRoZSBkYXRhIGludG8gYSBkdW1teSBidWZmZXIgYmVjYXVzZSBmc2VlayBmbHVzaGVzCisgICAgICAgIHN0ZGlvJ3MgaW50ZXJuYWwgYnVmZmVycy4gU2VlIGlzc3VlICM4NzQ1LiAqLworICAgICAgICBpZiAoZnJlYWQoZHVtbXksIDEsIDQsIGZwKSAhPSA0KSAvKiBTa2lwIHVudXNlZCBmaWVsZHMsIGF2b2lkIGZzZWVrICovCisgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CisKICAgICAgICAgZmxhZ3MgPSAodW5zaWduZWQgc2hvcnQpUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKICAgICAgICAgY29tcHJlc3MgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwogICAgICAgICB0aW1lID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKQEAgLTkyNCwxMiArOTM2LDE1IEBACiAgICAgICAgIGRhdGFfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICAgICAgZmlsZV9zaXplID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgICAgICBuYW1lX3NpemUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBoZWFkZXJfc2l6ZSA9IDQ2ICsgbmFtZV9zaXplICsKKyAgICAgICAgaGVhZGVyX3NpemUgPSBuYW1lX3NpemUgKwogICAgICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApICsKICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0ICsgNDIsIDApID09IC0xKQotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKyAgICAgICAgaWYgKGZyZWFkKGR1bW15LCAxLCA4LCBmcCkgIT0gOCkgLyogU2tpcCB1bnVzZWQgZmllbGRzLCBhdm9pZCBmc2VlayAqLworICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOwogICAgICAgICBmaWxlX29mZnNldCA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKSArIGFyY19vZmZzZXQ7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICBpZiAobmFtZV9zaXplID4gTUFYUEFUSExFTikKICAgICAgICAgICAgIG5hbWVfc2l6ZSA9IE1BWFBBVEhMRU47CiAKQEAgLTk0MSw3ICs5NTYsOSBAQAogICAgICAgICAgICAgcCsrOwogICAgICAgICB9CiAgICAgICAgICpwID0gMDsgICAgICAgICAvKiBBZGQgdGVybWluYXRpbmcgbnVsbCBieXRlICovCi0gICAgICAgIGhlYWRlcl9vZmZzZXQgKz0gaGVhZGVyX3NpemU7CisgICAgICAgIGZvciAoOyBpIDwgaGVhZGVyX3NpemU7IGkrKykgLyogU2tpcCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyICovCisgICAgICAgICAgICBpZihnZXRjKGZwKSA9PSBFT0YpIC8qIEF2b2lkIGZzZWVrICovCisgICAgICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOwogCiAgICAgICAgIGJvb3RzdHJhcCA9IDA7CiAgICAgICAgIGlmIChmbGFncyAmIDB4MDgwMCkKQEAgLTk4OCw3ICsxMDA1LDcgQEAKICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIHppcGltcG9ydDogZm91bmQgJWxkIG5hbWVzIGluICVSXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIGFyY2hpdmUpOwogICAgIHJldHVybiBmaWxlczsKLWZzZWVrX2Vycm9yOgorZmlsZV9lcnJvcjoKICAgICBmY2xvc2UoZnApOwogICAgIFB5X1hERUNSRUYoZmlsZXMpOwogICAgIFB5X1hERUNSRUYobmFtZW9iaik7CkBAIC0xMDU1LDcgKzEwNzIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmcCA9IF9QeV9mb3BlbihhcmNoaXZlLCAicmIiKTsKKyAgICBmcCA9IF9QeV9mb3Blbl9vYmooYXJjaGl2ZSwgInJiIik7CiAgICAgaWYgKCFmcCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKQEAgLTEwNzMsOSArMTA5MCwxMCBAQAogICAgIGwgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgaWYgKGwgIT0gMHgwNDAzNEI1MCkgewogICAgICAgICAvKiBCYWQ6IExvY2FsIEZpbGUgSGVhZGVyICovCi0gICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJiYWQgbG9jYWwgZmlsZSBoZWFkZXIgaW4gJVUiLAotICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSk7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGxvY2FsIGZpbGUgaGVhZGVyIGluICVVIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlKTsKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTA4Nyw2ICsxMTA1LDEwIEBACiAKICAgICBsID0gMzAgKyBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApICsKICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsgICAgICAgIC8qIGxvY2FsIGhlYWRlciBzaXplICovCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGZpbGVfb2Zmc2V0ICs9IGw7ICAgICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGRhdGEgKi8KIAogICAgIGJ5dGVzX3NpemUgPSBjb21wcmVzcyA9PSAwID8gZGF0YV9zaXplIDogZGF0YV9zaXplICsgMTsKQEAgLTEyNDksNyArMTI3MSw3IEBACiB9CiAKIC8qIEdpdmVuIGEgc3RyaW5nIGJ1ZmZlciBjb250YWluaW5nIFB5dGhvbiBzb3VyY2UgY29kZSwgY29tcGlsZSBpdAotICAgcmV0dXJuIGFuZCByZXR1cm4gYSBjb2RlIG9iamVjdCBhcyBhIG5ldyByZWZlcmVuY2UuICovCisgICBhbmQgcmV0dXJuIGEgY29kZSBvYmplY3QgYXMgYSBuZXcgcmVmZXJlbmNlLiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXBpbGVfc291cmNlKFB5T2JqZWN0ICpwYXRobmFtZSwgUHlPYmplY3QgKnNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cgYi9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCmluZGV4IGYzMTBiYjAuLmYyMmFhYmEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKKysrIGIvTW9kdWxlcy96bGliL0NoYW5nZUxvZwpAQCAtMSwxMiArMSwyNzYgQEAKIAogICAgICAgICAgICAgICAgIENoYW5nZUxvZyBmaWxlIGZvciB6bGliCiAKK0NoYW5nZXMgaW4gMS4yLjggKDI4IEFwciAyMDEzKQorLSBVcGRhdGUgY29udHJpYi9taW5pemlwL2lvd2luMzIuYyBmb3IgV2luZG93cyBSVCBbVm9sbGFudF0KKy0gRG8gbm90IGZvcmNlIFpfQ09OU1QgZm9yIEMrKworLSBDbGVhbiB1cCBjb250cmliL3ZzdHVkaW8gW1Jvp10KKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiB6bGliLmgKKy0gRml4IG1peGVkIGxpbmUgZW5kaW5ncyBpbiBjb250cmliL3ZzdHVkaW8KKworQ2hhbmdlcyBpbiAxLjIuNy4zICgxMyBBcHIgMjAxMykKKy0gRml4IHZlcnNpb24gbnVtYmVycyBhbmQgRExMIG5hbWVzIGluIGNvbnRyaWIvdnN0dWRpby8qL3psaWIucmMKKworQ2hhbmdlcyBpbiAxLjIuNy4yICgxMyBBcHIgMjAxMykKKy0gQ2hhbmdlIGNoZWNrIGZvciBhIGZvdXItYnl0ZSB0eXBlIGJhY2sgdG8gaGV4YWRlY2ltYWwKKy0gRml4IHR5cG8gaW4gd2luMzIvTWFrZWZpbGUubXNjCistIEFkZCBjYXN0cyBpbiBnendyaXRlLmMgZm9yIHBvaW50ZXIgZGlmZmVyZW5jZXMKKworQ2hhbmdlcyBpbiAxLjIuNy4xICgyNCBNYXIgMjAxMykKKy0gUmVwbGFjZSB1c2Ugb2YgdW5zYWZlIHN0cmluZyBmdW5jdGlvbnMgd2l0aCBzbnByaW50ZiBpZiBhdmFpbGFibGUKKy0gQXZvaWQgaW5jbHVkaW5nIHN0ZGRlZi5oIG9uIFdpbmRvd3MgZm9yIFpfU09MTyBjb21waWxlIFtOaWVzc2lua10KKy0gRml4IGd6Z2V0YyB1bmRlZmluZSB3aGVuIFpfUFJFRklYIHNldCBbVHVya10KKy0gRWxpbWluYXRlIHVzZSBvZiBta3RlbXAgaW4gTWFrZWZpbGUgKG5vdCBhbHdheXMgYXZhaWxhYmxlKQorLSBGaXggYnVnIGluICdGJyBtb2RlIGZvciBnem9wZW4oKQorLSBBZGQgaW5mbGF0ZUdldERpY3Rpb25hcnkoKSBmdW5jdGlvbgorLSBDb3JyZWN0IGNvbW1lbnQgaW4gZGVmbGF0ZS5oCistIFVzZSBfc25wcmludGYgZm9yIHNucHJpbnRmIGluIE1pY3Jvc29mdCBDCistIE9uIERhcndpbiwgb25seSB1c2UgL3Vzci9iaW4vbGlidG9vbCBpZiBsaWJ0b29sIGlzIG5vdCBBcHBsZQorLSBEZWxldGUgIi0tdmVyc2lvbiIgZmlsZSBpZiBjcmVhdGVkIGJ5ICJhciAtLXZlcnNpb24iIFtSaWNoYXJkIEcuXQorLSBGaXggY29uZmlndXJlIGNoZWNrIGZvciB2ZXJhY2l0eSBvZiBjb21waWxlciBlcnJvciByZXR1cm4gY29kZXMKKy0gRml4IENNYWtlIGNvbXBpbGF0aW9uIG9mIHN0YXRpYyBsaWIgZm9yIE1TVkMyMDEwIHg2NAorLSBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGluIGluZmJhY2s5LmMKKy0gRml4IGFyZ3VtZW50IGNoZWNrcyBpbiBnemxvZ19jb21wcmVzcygpIGFuZCBnemxvZ193cml0ZSgpCistIENsZWFuIHVwIHRoZSB1c2FnZSBvZiB6X2NvbnN0IGFuZCByZXNwZWN0IGNvbnN0IHVzYWdlIHdpdGhpbiB6bGliCistIENsZWFuIHVwIGV4YW1wbGVzL2d6bG9nLltjaF0gY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50IHR5cGVzCistIEF2b2lkIHNoaWZ0IGVxdWFsIHRvIGJpdHMgaW4gdHlwZSAoY2F1c2VkIGVuZGxlc3MgbG9vcCkKKy0gRml4IHVuaW50aWFsaXplZCB2YWx1ZSBidWcgaW4gZ3pwdXRjKCkgaW50cm9kdWNlZCBieSBjb25zdCBwYXRjaGVzCistIEZpeCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciBpbiBleGFtcGxlcy96cmFuLmMgW05vcl0KKy0gRml4IGJ1ZyB3aGVyZSBnem9wZW4oKSwgZ3pjbG9zZSgpIHdvdWxkIHdyaXRlIGFuIGVtcHR5IGZpbGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlKCkgd2hlbiBnendyaXRlKCkgcnVucyBvdXQgb2YgbWVtb3J5CistIENoZWNrIGZvciBpbnB1dCBidWZmZXIgbWFsbG9jIGZhaWx1cmUgaW4gZXhhbXBsZXMvZ3phcHBlbmQuYworLSBBZGQgbm90ZSB0byBjb250cmliL2JsYXN0IHRvIHVzZSBiaW5hcnkgbW9kZSBpbiBzdGRpbworLSBGaXggY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50bHkgc2lnbmVkIGludGVnZXJzIGluIGNvbnRyaWIvYmxhc3QKKy0gQ2hlY2sgZm9yIGludmFsaWQgY29kZSBsZW5ndGggY29kZXMgaW4gY29udHJpYi9wdWZmCistIEZpeCBzZXJpb3VzIGJ1dCB2ZXJ5IHJhcmUgZGVjb21wcmVzc2lvbiBidWcgaW4gaW5mdHJlZXMuYworLSBVcGRhdGUgaW5mbGF0ZUJhY2soKSBjb21tZW50cywgc2luY2UgaW5mbGF0ZSgpIGNhbiBiZSBmYXN0ZXIKKy0gVXNlIHVuZGVyc2NvcmVkIEkvTyBmdW5jdGlvbiBuYW1lcyBmb3IgV0lOQVBJX0ZBTUlMWQorLSBBZGQgX3RyX2ZsdXNoX2JpdHMgdG8gdGhlIGV4dGVybmFsIHN5bWJvbHMgcHJlZml4ZWQgYnkgLS16cHJlZml4CistIEFkZCBjb250cmliL3ZzdHVkaW8vdmMxMCBwcmUtYnVpbGQgc3RlcCBmb3Igc3RhdGljIG9ubHkKKy0gUXVvdGUgLS12ZXJzaW9uLXNjcmlwdCBhcmd1bWVudCBpbiBDTWFrZUxpc3RzLnR4dAorLSBEb24ndCBzcGVjaWZ5IC0tdmVyc2lvbi1zY3JpcHQgb24gQXBwbGUgcGxhdGZvcm1zIGluIENNYWtlTGlzdHMudHh0CistIEZpeCBjYXN0aW5nIGVycm9yIGluIGNvbnRyaWIvdGVzdHpsaWIvdGVzdHpsaWIuYworLSBGaXggdHlwZXMgaW4gY29udHJpYi9taW5pemlwIHRvIG1hdGNoIHJlc3VsdCBvZiBnZXRfY3JjX3RhYmxlKCkKKy0gU2ltcGxpZnkgY29udHJpYi92c3R1ZGlvL3ZjMTAgd2l0aCAnZCcgc3VmZml4CistIEFkZCBUT1Agc3VwcG9ydCB0byB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gU3Vwb3J0IGk2ODYgYW5kIGFtZDY0IGFzc2VtYmxlciBidWlsZHMgaW4gQ01ha2VMaXN0cy50eHQKKy0gRml4IHR5cG9zIGluIHRoZSB1c2Ugb2YgX0xBUkdFRklMRTY0X1NPVVJDRSBpbiB6Y29uZi5oCistIEFkZCB2YzExIGFuZCB2YzEyIGJ1aWxkIGZpbGVzIHRvIGNvbnRyaWIvdnN0dWRpbworLSBBZGQgZ3p2cHJpbnRmKCkgYXMgYW4gdW5kb2N1bWVudGVkIGZ1bmN0aW9uIGluIHpsaWIKKy0gRml4IGNvbmZpZ3VyZSBmb3IgU3VuIHNoZWxsCistIFJlbW92ZSBydW50aW1lIGNoZWNrIGluIGNvbmZpZ3VyZSBmb3IgZm91ci1ieXRlIGludGVnZXIgdHlwZQorLSBBZGQgY2FzdHMgYW5kIGNvbnN0cyB0byBlYXNlIHVzZXIgY29udmVyc2lvbiB0byBDKysKKy0gQWRkIG1hbiBwYWdlcyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCistIEluIE1ha2VmaWxlIHVuaW5zdGFsbCwgZG9uJ3Qgcm0gaWYgcHJlY2VkaW5nIGNkIGZhaWxzCistIERvIG5vdCByZXR1cm4gWl9CVUZfRVJST1IgaWYgZGVmbGF0ZVBhcmFtKCkgaGFzIG5vdGhpbmcgdG8gd3JpdGUKKworQ2hhbmdlcyBpbiAxLjIuNyAoMiBNYXkgMjAxMikKKy0gUmVwbGFjZSB1c2Ugb2YgbWVtbW92ZSgpIHdpdGggYSBzaW1wbGUgY29weSBmb3IgcG9ydGFiaWxpdHkKKy0gVGVzdCBmb3IgZXhpc3RlbmNlIG9mIHN0cmVycm9yCistIFJlc3RvcmUgZ3pnZXRjXyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIDEuMi42CistIEZpeCBidWlsZCB3aXRoIG5vbi1HTlUgbWFrZSBvbiBTb2xhcmlzCistIFJlcXVpcmUgZ2NjIDQuMCBvciBsYXRlciBvbiBNYWMgT1MgWCB0byB1c2UgdGhlIGhpZGRlbiBhdHRyaWJ1dGUKKy0gSW5jbHVkZSB1bmlzdGQuaCBmb3IgV2F0Y29tIEMKKy0gVXNlIF9fV0FUQ09NQ19fIGluc3RlYWQgb2YgX19XQVRDT01fXworLSBEbyBub3QgdXNlIHRoZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpZiBOT19WSVogZGVmaW5lZAorLSBJbXByb3ZlIHRoZSBkZXRlY3Rpb24gb2Ygbm8gaGlkZGVuIHZpc2liaWxpdHkgYXR0cmlidXRlCistIEF2b2lkIHVzaW5nIF9faW50NjQgZm9yIGdjYyBvciBzb2xvIGNvbXBpbGF0aW9uCistIENhc3QgdG8gY2hhciAqIGluIGd6cHJpbnRmIHRvIGF2b2lkIHdhcm5pbmdzIFtaaW5zZXJdCistIEZpeCBtYWtlX3Ztcy5jb20gZm9yIFZBWCBbWmluc2VyXQorLSBEb24ndCB1c2UgbGlicmFyeSBvciBidWlsdC1pbiBieXRlIHN3YXBzCistIFNpbXBsaWZ5IHRlc3QgYW5kIHVzZSBvZiBnY2MgaGlkZGVuIGF0dHJpYnV0ZQorLSBGaXggYnVnIGluIGd6Y2xvc2VfdygpIHdoZW4gZ3p3cml0ZSgpIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeQorLSBBZGQgIngiIChPX0VYQ0wpIGFuZCAiZSIgKE9fQ0xPRVhFQykgbW9kZXMgc3VwcG9ydCB0byBnem9wZW4oKQorLSBGaXggYnVnIGluIHRlc3QvbWluaWd6aXAuYyBmb3IgY29uZmlndXJlIC0tc29sbworLSBGaXggY29udHJpYi92c3R1ZGlvIHByb2plY3QgbGluayBlcnJvcnMgW01vaGFuYXRoYXNdCistIEFkZCBhYmlsaXR5IHRvIGNob29zZSB0aGUgYnVpbGRlciBpbiBtYWtlX3Ztcy5jb20gW1NjaHdlZGFdCistIEFkZCBERVNURElSIHN1cHBvcnQgdG8gbWluZ3czMiB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gRml4IGNvbW1lbnRzIGluIHdpbjMyL01ha2VmaWxlLmdjYyBmb3IgcHJvcGVyIHVzYWdlCistIEFsbG93IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbnMgZm9yIGNtYWtlCistIEdlbmVyYXRlIGFuZCBpbnN0YWxsIHRoZSBwa2ctY29uZmlnIGZpbGUgd2l0aCBjbWFrZQorLSBCdWlsZCBib3RoIGEgc3RhdGljIGFuZCBhIHNoYXJlZCB2ZXJzaW9uIG9mIHpsaWIgd2l0aCBjbWFrZQorLSBJbmNsdWRlIHZlcnNpb24gc3ltYm9scyBmb3IgY21ha2UgYnVpbGRzCistIElmIHVzaW5nIGNtYWtlIHdpdGggTVNWQywgYWRkIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvIHRoZSBpbmNsdWRlcworLSBSZW1vdmUgdW5uZWVkZWQgRVhUUkFfQ0ZMQUdTIGZyb20gd2luMzIvTWFrZWZpbGUuZ2NjIFtUcnV0YV0KKy0gTW92ZSBvYnNvbGV0ZSBlbXggbWFrZWZpbGUgdG8gb2xkIFtUcnV0YV0KKy0gQWxsb3cgdGhlIHVzZSBvZiAtV3VuZGVmIHdoZW4gY29tcGlsaW5nIG9yIHVzaW5nIHpsaWIKKy0gQXZvaWQgdGhlIHVzZSBvZiB0aGUgLXUgb3B0aW9uIHdpdGggbWt0ZW1wCistIEltcHJvdmUgaW5mbGF0ZSgpIGRvY3VtZW50YXRpb24gb24gdGhlIHVzZSBvZiBaX0ZJTklTSAorLSBSZWNvZ25pemUgY2xhbmcgYXMgZ2NjCistIEFkZCBnem9wZW5fdygpIGluIFdpbmRvd3MgZm9yIHdpZGUgY2hhcmFjdGVyIHBhdGggbmFtZXMKKy0gUmVuYW1lIHpjb25mLmggaW4gQ01ha2VMaXN0cy50eHQgdG8gbW92ZSBpdCBvdXQgb2YgdGhlIHdheQorLSBBZGQgc291cmNlIGRpcmVjdG9yeSBpbiBDTWFrZUxpc3RzLnR4dCBmb3IgYnVpbGRpbmcgZXhhbXBsZXMKKy0gTG9vayBpbiBidWlsZCBkaXJlY3RvcnkgZm9yIHpsaWIucGMgaW4gQ01ha2VMaXN0cy50eHQKKy0gUmVtb3ZlIGd6ZmxhZ3MgZnJvbSB6bGlidmMuZGVmIGluIHZjOSBhbmQgdmMxMAorLSBGaXggY29udHJpYi9taW5pemlwIGNvbXBpbGF0aW9uIGluIHRoZSBNaW5HVyBlbnZpcm9ubWVudAorLSBVcGRhdGUgLi9jb25maWd1cmUgZm9yIFNvbGFyaXMsIHN1cHBvcnQgLS02NCBbTW9vbmV5XQorLSBSZW1vdmUgLVIuIGZyb20gU29sYXJpcyBzaGFyZWQgYnVpbGQgKHBvc3NpYmxlIHNlY3VyaXR5IGlzc3VlKQorLSBBdm9pZCByYWNlIGNvbmRpdGlvbiBmb3IgcGFyYWxsZWwgbWFrZSAoLWopIHJ1bm5pbmcgZXhhbXBsZQorLSBGaXggdHlwZSBtaXNtYXRjaCBiZXR3ZWVuIGdldF9jcmNfdGFibGUoKSBhbmQgY3JjX3RhYmxlCistIEZpeCBwYXJzaW5nIG9mIHZlcnNpb24gd2l0aCAiLSIgaW4gQ01ha2VMaXN0cy50eHQgW1NuaWRlciwgWmllZ2xlcl0KKy0gRml4IHRoZSBwYXRoIHRvIHpsaWIubWFwIGluIENNYWtlTGlzdHMudHh0CistIEZvcmNlIHRoZSBuYXRpdmUgbGlidG9vbCBpbiBNYWMgT1MgWCB0byBhdm9pZCBHTlUgbGlidG9vbCBbQmVlYmVdCistIEFkZCBpbnN0cnVjdGlvbnMgdG8gd2luMzIvTWFrZWZpbGUuZ2NjIGZvciBzaGFyZWQgaW5zdGFsbCBbVG9ycmldCisKK0NoYW5nZXMgaW4gMS4yLjYuMSAoMTIgRmViIDIwMTIpCistIEF2b2lkIHRoZSB1c2Ugb2YgdGhlIE9iamVjdGl2ZS1DIHJlc2VydmVkIG5hbWUgImlkIgorLSBJbmNsdWRlIGlvLmggaW4gZ3pndXRzLmggZm9yIE1pY3Jvc29mdCBjb21waWxlcnMKKy0gRml4IHByb2JsZW0gd2l0aCAuL2NvbmZpZ3VyZSAtLXByZWZpeCBhbmQgZ3pnZXRjIG1hY3JvCistIEluY2x1ZGUgZ3pfaGVhZGVyIGRlZmluaXRpb24gd2hlbiBjb21waWxpbmcgemxpYiBzb2xvCistIFB1dCBnemZsYWdzKCkgZnVuY3Rpb25hbGl0eSBiYWNrIGluIHp1dGlsLmMKKy0gQXZvaWQgbGlicmFyeSBoZWFkZXIgaW5jbHVkZSBpbiBjcmMzMi5jIGZvciBaX1NPTE8KKy0gVXNlIG5hbWUgaW4gR0NDX0NMQVNTSUMgYXMgQyBjb21waWxlciBmb3IgY292ZXJhZ2UgdGVzdGluZywgaWYgc2V0CistIE1pbm9yIGNsZWFudXAgaW4gY29udHJpYi9taW5pemlwL3ppcC5jIFtWb2xsYW50XQorLSBVcGRhdGUgbWFrZV92bXMuY29tIFtaaW5zZXJdCistIFJlbW92ZSB1bm5lY2Vzc2FyeSBnemdldGNfIGZ1bmN0aW9uCistIFVzZSBvcHRpbWl6ZWQgYnl0ZSBzd2FwIG9wZXJhdGlvbnMgZm9yIE1pY3Jvc29mdCBhbmQgR05VIFtTbnlkZXJdCistIEZpeCBtaW5vciB0eXBvIGluIHpsaWIuaCBjb21tZW50cyBbUnplc25pb3dpZWNraV0KKworQ2hhbmdlcyBpbiAxLjIuNiAoMjkgSmFuIDIwMTIpCistIFVwZGF0ZSB0aGUgUGFzY2FsIGludGVyZmFjZSBpbiBjb250cmliL3Bhc2NhbAorLSBGaXggZnVuY3Rpb24gbnVtYmVycyBmb3IgZ3pnZXRjXyBpbiB6bGlidmMuZGVmIGZpbGVzCistIEZpeCBjb25maWd1cmUuYWMgZm9yIGNvbnRyaWIvbWluaXppcCBbU2NoaWZmZXJdCistIEZpeCBsYXJnZS1lbnRyeSBkZXRlY3Rpb24gaW4gbWluaXppcCBvbiA2NC1iaXQgc3lzdGVtcyBbU2NoaWZmZXJdCistIEhhdmUgLi9jb25maWd1cmUgdXNlIHRoZSBjb21waWxlciByZXR1cm4gY29kZSBmb3IgZXJyb3IgaW5kaWNhdGlvbgorLSBGaXggQ01ha2VMaXN0cy50eHQgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIFtNY0NsdXJlXQorLSBGaXggY29udHJpYi9taW5pemlwL3ppcC5jIGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcyBbRGFsc25lc10KKy0gRml4IGNvbXBpbGF0aW9uIG9mIGNvbnRyaWIvbWluaXppcCBvbiBGcmVlQlNEIFtNYXJxdWV6XQorLSBDb3JyZWN0IHN1Z2dlc3RlZCB1c2FnZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjIFtTaGFjaGFyLCBIb3J2YXRoXQorLSBJbmNsdWRlIGlvLmggZm9yIFR1cmJvIEMgLyBCb3JsYW5kIEMgb24gYWxsIHBsYXRmb3JtcyBbVHJ1dGFdCistIE1ha2UgdmVyc2lvbiBleHBsaWNpdCBpbiBjb250cmliL21pbml6aXAvY29uZmlndXJlLmFjIFtCb3NtYW5zXQorLSBBdm9pZCB3YXJuaW5nIGZvciBubyBlbmNyeXB0aW9uIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gTWlub3IgY2xlYW51cCB1cCBjb250cmliL21pbml6aXAvdW56aXAuYyBbVm9sbGFudF0KKy0gRml4IGJ1ZyB3aGVuIGNvbXBpbGluZyBtaW5pemlwIHdpdGggQysrIFtWb2xsYW50XQorLSBQcm90ZWN0IGZvciBsb25nIG5hbWUgYW5kIGV4dHJhIGZpZWxkcyBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEF2b2lkIHNvbWUgd2FybmluZ3MgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBZGQgLUkuLi8uLiAtTC4uLy4uIHRvIENGTEFHUyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCistIEFkZCBtaXNzaW5nIGxpYnMgdG8gbWluaXppcCBsaW5rZXIgY29tbWFuZAorLSBBZGQgc3VwcG9ydCBmb3IgVlBBVEggYnVpbGRzIGluIGNvbnRyaWIvbWluaXppcAorLSBBZGQgYW4gLS1lbmFibGUtZGVtb3Mgb3B0aW9uIHRvIGNvbnRyaWIvbWluaXppcC9jb25maWd1cmUKKy0gQWRkIHRoZSBnZW5lcmF0aW9uIG9mIGNvbmZpZ3VyZS5sb2cgYnkgLi9jb25maWd1cmUKKy0gRXhpdCB3aGVuIHJlcXVpcmVkIHBhcmFtZXRlcnMgbm90IHByb3ZpZGVkIHRvIHdpbjMyL01ha2VmaWxlLmdjYworLSBIYXZlIGd6cHV0YyByZXR1cm4gdGhlIGNoYXJhY3RlciB3cml0dGVuIGluc3RlYWQgb2YgdGhlIGFyZ3VtZW50CistIFVzZSB0aGUgLW0gb3B0aW9uIG9uIGxkY29uZmlnIGZvciBCU0Qgc3lzdGVtcyBbVG9iaWFzXQorLSBDb3JyZWN0IGluIHpsaWIubWFwIHdoZW4gZGVmbGF0ZVJlc2V0S2VlcCB3YXMgYWRkZWQKKworQ2hhbmdlcyBpbiAxLjIuNS4zICgxNSBKYW4gMjAxMikKKy0gUmVzdG9yZSBnemdldGMgZnVuY3Rpb24gZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5CistIERvIG5vdCB1c2UgX2xzZWVraTY0IHVuZGVyIEJvcmxhbmQgQysrIFtUcnV0YV0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLm1zYyB0byBidWlsZCB0ZXN0LyouYyBbVHJ1dGFdCistIFJlbW92ZSBvbGQvdmlzdWFsYzYgZ2l2ZW4gQ01ha2VmaWxlIGFuZCBvdGhlciBhbHRlcm5hdGl2ZXMKKy0gVXBkYXRlIEFTNDAwIGJ1aWxkIGZpbGVzIGFuZCBkb2N1bWVudGF0aW9uIFtNb25uZXJhdF0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLmdjYyB0byBidWlsZCB0ZXN0LyouYyBbVHJ1dGFdCistIFBlcm1pdCBzdHJvbmdlciBmbHVzaGVzIGFmdGVyIFpfQkxPQ0sgZmx1c2hlcworLSBBdm9pZCBleHRyYW5lb3VzIGVtcHR5IGJsb2NrcyB3aGVuIGRvaW5nIGVtcHR5IGZsdXNoZXMKKy0gUGVybWl0IFpfTlVMTCBhcmd1bWVudHMgdG8gZGVmbGF0ZVBlbmRpbmcKKy0gQWxsb3cgZGVmbGF0ZVByaW1lKCkgdG8gaW5zZXJ0IGJpdHMgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmVhbQorLSBSZW1vdmUgc2Vjb25kIGVtcHR5IHN0YXRpYyBibG9jayBmb3IgWl9QQVJUSUFMX0ZMVVNICistIFdyaXRlIG91dCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBiaXRzIHdoZW4gdXNpbmcgWl9CTE9DSworLSBJbnNlcnQgdGhlIGZpcnN0IHR3byBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIGFmdGVyIGEgZmx1c2gKKworQ2hhbmdlcyBpbiAxLjIuNS4yICgxNyBEZWMgMjAxMSkKKy0gZml4IGxkIGVycm9yOiB1bmFibGUgdG8gZmluZCB2ZXJzaW9uIGRlcGVuZGVuY3kgJ1pMSUJfMS4yLjUnCistIHVzZSByZWxhdGl2ZSBzeW1saW5rcyBmb3Igc2hhcmVkIGxpYnMKKy0gQXZvaWQgc2VhcmNoaW5nIHBhc3Qgd2luZG93IGZvciBaX1JMRSBzdHJhdGVneQorLSBBc3N1cmUgdGhhdCBoaWdoLXdhdGVyIG1hcmsgaW5pdGlhbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgaW4gZGVmbGF0ZQorLSBBZGQgYXNzZXJ0aW9ucyB0byBmaWxsX3dpbmRvdygpIGluIGRlZmxhdGUuYyB0byBtYXRjaCBjb21tZW50cworLSBVcGRhdGUgcHl0aG9uIGxpbmsgaW4gUkVBRE1FCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZ3pyZWFkLmMKKy0gRml4IGJ1ZyBpbiBnemdldHMoKSBmb3IgYSBjb25jYXRlbmF0ZWQgZW1wdHkgZ3ppcCBzdHJlYW0KKy0gQ29ycmVjdCBlcnJvciBpbiBjb21tZW50IGZvciBnel9tYWtlKCkKKy0gQ2hhbmdlIGd6cmVhZCgpIGFuZCByZWxhdGVkIHRvIGlnbm9yZSBqdW5rIGFmdGVyIGd6aXAgc3RyZWFtcworLSBBbGxvdyBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBjb250aW51ZSBhZnRlciBnemNsZWFyZXJyKCkKKy0gQWxsb3cgZ3pyZXdpbmQoKSBhbmQgZ3pzZWVrKCkgYWZ0ZXIgYSBwcmVtYXR1cmUgZW5kLW9mLWZpbGUKKy0gU2ltcGxpZnkgZ3pzZWVrKCkgbm93IHRoYXQgcmF3IGFmdGVyIGd6aXAgaXMgaWdub3JlZAorLSBDaGFuZ2UgZ3pnZXRjKCkgdG8gYSBtYWNybyBmb3Igc3BlZWQgKH40MCUgc3BlZWR1cCBpbiB0ZXN0aW5nKQorLSBGaXggZ3pjbG9zZSgpIHRvIHJldHVybiB0aGUgYWN0dWFsIGVycm9yIGxhc3QgZW5jb3VudGVyZWQKKy0gQWx3YXlzIGFkZCBsYXJnZSBmaWxlIHN1cHBvcnQgZm9yIHdpbmRvd3MKKy0gSW5jbHVkZSB6Y29uZi5oIGZvciB3aW5kb3dzIGxhcmdlIGZpbGUgc3VwcG9ydAorLSBJbmNsdWRlIHpjb25mLmguY21ha2VpbiBmb3Igd2luZG93cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gVXBkYXRlIHpjb25mLmguY21ha2VpbiBvbiBtYWtlIGRpc3RjbGVhbgorLSBNZXJnZSB2ZXN0aWdpYWwgdnNucHJpbnRmIGRldGVybWluYXRpb24gZnJvbSB6dXRpbC5oIHRvIGd6Z3V0cy5oCistIENsYXJpZnkgaG93IGd6b3BlbigpIGFwcGVuZHMgaW4gemxpYi5oIGNvbW1lbnRzCistIENvcnJlY3QgZG9jdW1lbnRhdGlvbiBvZiBnemRpcmVjdCgpIHNpbmNlIGp1bmsgYXQgZW5kIG5vdyBpZ25vcmVkCistIEFkZCBhIHRyYW5zcGFyZW50IHdyaXRlIG1vZGUgdG8gZ3pvcGVuKCkgd2hlbiAnVCcgaXMgaW4gdGhlIG1vZGUKKy0gVXBkYXRlIHB5dGhvbiBsaW5rIGluIHpsaWIgbWFuIHBhZ2UKKy0gR2V0IGluZmZpeGVkLmggYW5kIE1BS0VGSVhFRCByZXN1bHQgdG8gbWF0Y2gKKy0gQWRkIGEgLi9jb25maWcgLS1zb2xvIG9wdGlvbiB0byBtYWtlIHpsaWIgc3Vic2V0IHdpdGggbm8gbGliYXJ5IHVzZQorLSBBZGQgdW5kb2N1bWVudGVkIGluZmxhdGVSZXNldEtlZXAoKSBmdW5jdGlvbiBmb3IgQ0FCIGZpbGUgZGVjb2RpbmcKKy0gQWRkIC0tY292ZXIgb3B0aW9uIHRvIC4vY29uZmlndXJlIGZvciBnY2MgY292ZXJhZ2UgdGVzdGluZworLSBBZGQgI2RlZmluZSBaTElCX0NPTlNUIG9wdGlvbiB0byB1c2UgY29uc3QgaW4gdGhlIHpfc3RyZWFtIGludGVyZmFjZQorLSBBZGQgY29tbWVudCB0byBnemRvcGVuKCkgaW4gemxpYi5oIHRvIHVzZSBkdXAoKSB3aGVuIHVzaW5nIGZpbGVubygpCistIE5vdGUgYmVoYXZpb3Igb2YgdW5jb21wcmVzcygpIHRvIHByb3ZpZGUgYXMgbXVjaCBkYXRhIGFzIGl0IGNhbgorLSBBZGQgZmlsZXMgaW4gY29udHJpYi9taW5pemlwIHRvIGFpZCBpbiBidWlsZGluZyBsaWJtaW5pemlwCistIFNwbGl0IG9mZiBBUiBvcHRpb25zIGluIE1ha2VmaWxlLmluIGFuZCBjb25maWd1cmUKKy0gQ2hhbmdlIE9OIG1hY3JvIHRvIFpfQVJHIHRvIGF2b2lkIGFwcGxpY2F0aW9uIGNvbmZsaWN0cworLSBGYWNpbGl0YXRlIGNvbXBpbGF0aW9uIHdpdGggQm9ybGFuZCBDKysgZm9yIHByYWdtYXMgYW5kIHZzbnByaW50ZgorLSBJbmNsdWRlIGlvLmggZm9yIFR1cmJvIEMgLyBCb3JsYW5kIEMrKworLSBNb3ZlIGV4YW1wbGUuYyBhbmQgbWluaWd6aXAuYyB0byB0ZXN0LworLSBTaW1wbGlmeSBpbmNvbXBsZXRlIGNvZGUgdGFibGUgZmlsbGluZyBpbiBpbmZsYXRlX3RhYmxlKCkKKy0gUmVtb3ZlIGNvZGUgZnJvbSBpbmZsYXRlLmMgYW5kIGluZmJhY2suYyB0aGF0IGlzIGltcG9zc2libGUgdG8gZXhlY3V0ZQorLSBUZXN0IHRoZSBpbmZsYXRlIGNvZGUgd2l0aCBmdWxsIGNvdmVyYWdlCistIEFsbG93IGRlZmxhdGVTZXREaWN0aW9uYXJ5LCBpbmZsYXRlU2V0RGljdGlvbmFyeSBhdCBhbnkgdGltZSAoaW4gcmF3KQorLSBBZGQgZGVmbGF0ZVJlc2V0S2VlcCBhbmQgZml4IGluZmxhdGVSZXNldEtlZXAgdG8gcmV0YWluIGRpY3Rpb25hcnkKKy0gRml4IGd6d3JpdGUuYyB0byBhY2NvbW1vZGF0ZSByZWR1Y2VkIG1lbW9yeSB6bGliIGNvbXBpbGF0aW9uCistIEhhdmUgaW5mbGF0ZSgpIHdpdGggWl9GSU5JU0ggYXZvaWQgdGhlIGFsbG9jYXRpb24gb2YgYSB3aW5kb3cKKy0gRG8gbm90IHNldCBzdHJtLT5hZGxlciB3aGVuIGRvaW5nIHJhdyBpbmZsYXRlCistIEZpeCBnemVvZigpIHRvIGJlaGF2ZSBqdXN0IGxpa2UgZmVvZigpIHdoZW4gcmVhZCBpcyBub3QgcGFzdCBlbmQgb2YgZmlsZQorLSBGaXggYnVnIGluIGd6cmVhZC5jIHdoZW4gZW5kLW9mLWZpbGUgaXMgcmVhY2hlZAorLSBBdm9pZCB1c2Ugb2YgWl9CVUZfRVJST1IgaW4gZ3oqIGZ1bmN0aW9ucyBleGNlcHQgZm9yIHByZW1hdHVyZSBFT0YKKy0gRG9jdW1lbnQgZ3pyZWFkKCkgY2FwYWJpbGl0eSB0byByZWFkIGNvbmN1cnJlbnRseSB3cml0dGVuIGZpbGVzCistIFJlbW92ZSBoYXJkLWNvZGluZyBvZiByZXNvdXJjZSBjb21waWxlciBpbiBDTWFrZUxpc3RzLnR4dCBbQmxhbW1vXQorCitDaGFuZ2VzIGluIDEuMi41LjEgKDEwIFNlcCAyMDExKQorLSBVcGRhdGUgRkFRIGVudHJ5IG9uIHNoYXJlZCBidWlsZHMgKCMxMykKKy0gQXZvaWQgc3ltYm9saWMgYXJndW1lbnQgdG8gY2htb2QgaW4gTWFrZWZpbGUuaW4KKy0gRml4IGJ1ZyBhbmQgYWRkIGNvbnN0cyBpbiBjb250cmliL3B1ZmYgW09iZXJodW1lcl0KKy0gVXBkYXRlIGNvbnRyaWIvcHVmZi96ZXJvcy5yYXcgdGVzdCBmaWxlIHRvIGhhdmUgYWxsIGJsb2NrIHR5cGVzCistIEFkZCBmdWxsIGNvdmVyYWdlIHRlc3QgZm9yIHB1ZmYgaW4gY29udHJpYi9wdWZmL01ha2VmaWxlCistIEZpeCBzdGF0aWMtb25seS1idWlsZCBpbnN0YWxsIGluIE1ha2VmaWxlLmluCistIEZpeCBidWcgaW4gdW56R2V0Q3VycmVudEZpbGVJbmZvKCkgaW4gY29udHJpYi9taW5pemlwIFtLdW5vXQorLSBBZGQgbGliei5hIGRlcGVuZGVuY3kgdG8gc2hhcmVkIGluIE1ha2VmaWxlLmluIGZvciBwYXJhbGxlbCBidWlsZHMKKy0gU3BlbGwgb3V0ICJudW1iZXIiIChpbnN0ZWFkIG9mICJuYiIpIGluIHpsaWIuaCBmb3IgdG90YWxfaW4sIHRvdGFsX291dAorLSBSZXBsYWNlICQoLi4uKSB3aXRoIGAuLi5gIGluIGNvbmZpZ3VyZSBmb3Igbm9uLWJhc2ggc2ggW0Jvd2xlcl0KKy0gQWRkIGRhcndpbiogdG8gRGFyd2luKiBhbmQgc29sYXJpcyogdG8gU3VuT1NcIDUqIGluIGNvbmZpZ3VyZSBbR3JvZmZlbl0KKy0gQWRkIHNvbGFyaXMqIHRvIExpbnV4KiBpbiBjb25maWd1cmUgdG8gYWxsb3cgZ2NjIHVzZSBbR3JvZmZlbl0KKy0gQWRkICpic2QqIHRvIExpbnV4KiBjYXNlIGluIGNvbmZpZ3VyZSBbQmFyLUxldl0KKy0gQWRkIGluZmZhc3Qub2JqIHRvIGRlcGVuZGVuY2llcyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiBkZWZsYXRlLmggW0tvaGxlcl0KKy0gQ2hhbmdlIGxpYnpkbGwuYSBhZ2FpbiB0byBsaWJ6LmRsbC5hICghKSBpbiB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gQWRkIHRlc3QgdG8gY29uZmlndXJlIGZvciBHTlUgQyBsb29raW5nIGZvciBnY2MgaW4gb3V0cHV0IG9mICRjYyAtdgorLSBBZGQgemxpYi5wYyBnZW5lcmF0aW9uIHRvIHdpbjMyL01ha2VmaWxlLmdjYyBbV2VpZ2VsdF0KKy0gRml4IGJ1ZyBpbiB6bGliLmggZm9yIF9GSUxFX09GRlNFVF9CSVRTIHNldCBhbmQgX0xBUkdFRklMRTY0X1NPVVJDRSBub3QKKy0gQWRkIGNvbW1lbnQgaW4gemxpYi5oIHRoYXQgYWRsZXIzMl9jb21iaW5lIHdpdGggbGVuMiA8IDAgbWFrZXMgbm8gc2Vuc2UKKy0gTWFrZSBOT19ESVZJREUgb3B0aW9uIGluIGFkbGVyMzIuYyBtdWNoIGZhc3RlciAodGhhbmtzIHRvIEpvaG4gUmVpc2VyKQorLSBNYWtlIHN0cm9uZ2VyIHRlc3QgaW4gemNvbmYuaCB0byBpbmNsdWRlIHVuaXN0ZC5oIGZvciBMRlMKKy0gQXBwbHkgRGFyd2luIHBhdGNoZXMgZm9yIDY0LWJpdCBmaWxlIG9mZnNldHMgdG8gY29udHJpYi9taW5pemlwIFtTbGFja10KKy0gRml4IHpsaWIuaCBMRlMgc3VwcG9ydCB3aGVuIFpfUFJFRklYIHVzZWQKKy0gQWRkIHVwZGF0ZWQgYXM0MDAgc3VwcG9ydCAocmVtb3ZlZCBmcm9tIG9sZCkgW01vbm5lcmF0XQorLSBBdm9pZCBkZWZsYXRlIHNlbnNpdGl2aXR5IHRvIHZvbGF0aWxlIGlucHV0IGRhdGEKKy0gQXZvaWQgZGl2aXNpb24gaW4gYWRsZXIzMl9jb21iaW5lIGZvciBOT19ESVZJREUKKy0gQ2xhcmlmeSB0aGUgdXNlIG9mIFpfRklOSVNIIHdpdGggZGVmbGF0ZUJvdW5kKCkgYW1vdW50IG9mIHNwYWNlCistIFNldCBiaW5hcnkgZm9yIG91dHB1dCBmaWxlIGluIHB1ZmYuYworLSBVc2UgdTQgdHlwZSBmb3IgY3JjX3RhYmxlIHRvIGF2b2lkIGNvbnZlcnNpb24gd2FybmluZ3MKKy0gQXBwbHkgY2FzdHMgaW4gemxpYi5oIHRvIGF2b2lkIGNvbnZlcnNpb24gd2FybmluZ3MKKy0gQWRkIE9GIHRvIHByb3RvdHlwZXMgZm9yIGFkbGVyMzJfY29tYmluZV8gYW5kIGNyYzMyX2NvbWJpbmVfIFtNaWxsZXJdCistIEltcHJvdmUgaW5mbGF0ZVN5bmMoKSBkb2N1bWVudGF0aW9uIHRvIG5vdGUgaW5kZXRlcm1pbmFuY3kKKy0gQWRkIGRlZmxhdGVQZW5kaW5nKCkgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBhbW91bnQgb2YgcGVuZGluZyBvdXRwdXQKKy0gQ29ycmVjdCB0aGUgc3BlbGxpbmcgb2YgInNwZWNpZmljYXRpb24iIGluIEZBUSBbUmFuZGVycy1QZWhyc29uXQorLSBBZGQgYSBjaGVjayBpbiBjb25maWd1cmUgZm9yIHN0ZGFyZy5oLCB1c2UgZm9yIGd6cHJpbnRmKCkKKy0gQ2hlY2sgdGhhdCBwb2ludGVycyBmaXQgaW4gaW50cyB3aGVuIGd6cHJpbnQoKSBjb21waWxlZCBvbGQgc3R5bGUKKy0gQWRkIGR1bW15IG5hbWUgYmVmb3JlICQoU0hBUkVETElCVikgaW4gTWFrZWZpbGUgW0Jhci1MZXYsIEJvd2xlcl0KKy0gRGVsZXRlIGxpbmUgaW4gY29uZmlndXJlIHRoYXQgYWRkcyAtTC4gbGliei5hIHRvIExERkxBR1MgW1dlaWdlbHRdCistIEFkZCBkZWJ1ZyByZWNvcmRzIGluIGFzc21lYmxlciBjb2RlIFtMb25kZXJdCistIFVwZGF0ZSBSRkMgcmVmZXJlbmNlcyB0byB1c2UgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvLi4uIFtMaV0KKy0gQWRkIC0tYXJjaHMgb3B0aW9uLCB1c2Ugb2YgbGlidG9vbCB0byBjb25maWd1cmUgZm9yIE1hYyBPUyBYIFtCb3JzdGVsXQorCiBDaGFuZ2VzIGluIDEuMi41ICgxOSBBcHIgMjAxMCkKIC0gRGlzYWJsZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgW0Jhci1MZXZdCiAtIERlZmF1bHQgdG8gbGliZGlyIGFzIHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW05pZWRlcl0KIC0gVXBkYXRlIGNvcHlyaWdodCBkYXRlcyBvbiBtb2RpZmllZCBzb3VyY2UgZmlsZXMKIC0gVXBkYXRlIHRyZWVzLmMgdG8gYmUgYWJsZSB0byBnZW5lcmF0ZSBtb2RpZmllZCB0cmVlcy5oCiAtIEV4aXQgY29uZmlndXJlIGZvciBNaW5HVywgc3VnZ2VzdGluZyB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gQ2hlY2sgZm9yIE5VTEwgcGF0aCBpbiBnel9vcGVuIFtIb211cmx1XQogCiBDaGFuZ2VzIGluIDEuMi40LjUgKDE4IEFwciAyMDEwKQogLSBTZXQgc2hhcmVkbGliZGlyIGluIGNvbmZpZ3VyZSBbVG9yb2tdCkBAIC0yNjEsNyArNTI1LDcgQEAKIC0gQ2xlYXIgYnl0ZXMgYWZ0ZXIgZGVmbGF0ZSBsb29rYWhlYWQgdG8gYXZvaWQgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YQogLSBDaGFuZ2UgYSBsaW1pdCBpbiBpbmZ0cmVlcy5jIHRvIGJlIG1vcmUgdHJhbnNwYXJlbnQgdG8gQ292ZXJpdHkgUHJldmVudAogLSBVcGRhdGUgd2luMzIvemxpYi5kZWYgd2l0aCBleHBvcnRlZCBzeW1ib2xzIGZyb20gemxpYi5oCi0tIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gemxpYi5oIFtXaWxsZW1dCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3JzIGluIHpsaWIuaCBbV2lsbGVtLCBTb2JyYWRvXQogLSBBbGxvdyBaX0JMT0NLIGZvciBkZWZsYXRlKCkgdG8gZm9yY2UgYSBuZXcgYmxvY2sKIC0gQWxsb3cgbmVnYXRpdmUgYml0cyBpbiBpbmZsYXRlUHJpbWUoKSB0byBkZWxldGUgZXhpc3RpbmcgYml0IGJ1ZmZlcgogLSBBZGQgWl9UUkVFUyBmbHVzaCBvcHRpb24gdG8gaW5mbGF0ZSgpIHRvIHJldHVybiBhdCBlbmQgb2YgdHJlZXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9GQVEgYi9Nb2R1bGVzL3psaWIvRkFRCmluZGV4IDFhMjI3NTAuLjk5YjdjZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9GQVEKKysrIGIvTW9kdWxlcy96bGliL0ZBUQpAQCAtNDQsOCArNDQsOCBAQAogCiAgNi4gV2hlcmUncyB0aGUgemxpYiBkb2N1bWVudGF0aW9uIChtYW4gcGFnZXMsIGV0Yy4pPwogCi0gICAgSXQncyBpbiB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIGV4YW1wbGUuYyBhbmQKLSAgICBtaW5pZ3ppcC5jLCB3aXRoIG1vcmUgaW4gZXhhbXBsZXMvIC4KKyAgICBJdCdzIGluIHpsaWIuaCAuICBFeGFtcGxlcyBvZiB6bGliIHVzYWdlIGFyZSBpbiB0aGUgZmlsZXMgdGVzdC9leGFtcGxlLmMKKyAgICBhbmQgdGVzdC9taW5pZ3ppcC5jLCB3aXRoIG1vcmUgaW4gZXhhbXBsZXMvIC4KIAogIDcuIFdoeSBkb24ndCB5b3UgdXNlIEdOVSBhdXRvY29uZiBvciBsaWJ0b29sIG9yIC4uLj8KIApAQCAtODQsOCArODQsMTAgQEAKIAogMTMuIEhvdyBjYW4gSSBtYWtlIGEgVW5peCBzaGFyZWQgbGlicmFyeT8KIAotICAgIG1ha2UgY2xlYW4KLSAgICAuL2NvbmZpZ3VyZSAtcworICAgIEJ5IGRlZmF1bHQgYSBzaGFyZWQgKGFuZCBhIHN0YXRpYykgbGlicmFyeSBpcyBidWlsdCBmb3IgVW5peC4gIFNvOgorCisgICAgbWFrZSBkaXN0Y2xlYW4KKyAgICAuL2NvbmZpZ3VyZQogICAgIG1ha2UKIAogMTQuIEhvdyBkbyBJIGluc3RhbGwgYSBzaGFyZWQgemxpYiBsaWJyYXJ5IG9uIFVuaXg/CkBAIC0zMjUsNyArMzI3LDcgQEAKICAgICBjb3JyZWN0bHkgcG9pbnRzIHRvIHRoZSB6bGliIHNwZWNpZmljYXRpb24gaW4gUkZDIDE5NTAgZm9yIHRoZSAiZGVmbGF0ZSIKICAgICB0cmFuc2ZlciBlbmNvZGluZywgdGhlcmUgaGF2ZSBiZWVuIHJlcG9ydHMgb2Ygc2VydmVycyBhbmQgYnJvd3NlcnMgdGhhdAogICAgIGluY29ycmVjdGx5IHByb2R1Y2Ugb3IgZXhwZWN0IHJhdyBkZWZsYXRlIGRhdGEgcGVyIHRoZSBkZWZsYXRlCi0gICAgc3BlY2ZpY2lhdGlvbiBpbiBSRkMgMTk1MSwgbW9zdCBub3RhYmx5IE1pY3Jvc29mdC4gIFNvIGV2ZW4gdGhvdWdoIHRoZQorICAgIHNwZWNpZmljYXRpb24gaW4gUkZDIDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuICBTbyBldmVuIHRob3VnaCB0aGUKICAgICAiZGVmbGF0ZSIgdHJhbnNmZXIgZW5jb2RpbmcgdXNpbmcgdGhlIHpsaWIgZm9ybWF0IHdvdWxkIGJlIHRoZSBtb3JlCiAgICAgZWZmaWNpZW50IGFwcHJvYWNoIChhbmQgaW4gZmFjdCBleGFjdGx5IHdoYXQgdGhlIHpsaWIgZm9ybWF0IHdhcyBkZXNpZ25lZAogICAgIGZvciksIHVzaW5nIHRoZSAiZ3ppcCIgdHJhbnNmZXIgZW5jb2RpbmcgaXMgcHJvYmFibHkgbW9yZSByZWxpYWJsZSBkdWUgdG8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9JTkRFWCBiL01vZHVsZXMvemxpYi9JTkRFWAppbmRleCBmNmM1MWNhLi4yYmEwNjQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvSU5ERVgKKysrIGIvTW9kdWxlcy96bGliL0lOREVYCkBAIC03LDYgKzcsOSBAQAogUkVBRE1FICAgICAgICAgIGd1ZXNzIHdoYXQKIGNvbmZpZ3VyZSAgICAgICBjb25maWd1cmUgc2NyaXB0IGZvciBVbml4CiBtYWtlX3Ztcy5jb20gICAgbWFrZWZpbGUgZm9yIFZNUwordGVzdC9leGFtcGxlLmMgIHpsaWIgdXNhZ2VzIGV4YW1wbGVzIGZvciBidWlsZCB0ZXN0aW5nCit0ZXN0L21pbmlnemlwLmMgbWluaW1hbCBnemlwLWxpa2UgZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGQgdGVzdGluZwordGVzdC9pbmZjb3Zlci5jIGluZiouYyBjb2RlIGNvdmVyYWdlIGZvciBidWlsZCBjb3ZlcmFnZSB0ZXN0aW5nCiB0cmVlYnVpbGQueG1sICAgWE1MIGRlc2NyaXB0aW9uIG9mIHNvdXJjZSBmaWxlIGRlcGVuZGVuY2llcwogemNvbmYuaC5jbWFrZWluIHpjb25mLmggdGVtcGxhdGUgZm9yIGNtYWtlCiB6Y29uZi5oLmluICAgICAgemNvbmYuaCB0ZW1wbGF0ZSBmb3IgY29uZmlndXJlCkBAIC0xNCw5ICsxNywxMSBAQAogemxpYi4zLnBkZiAgICAgIE1hbiBwYWdlIGluIFBERiBmb3JtYXQKIHpsaWIubWFwICAgICAgICBMaW51eCBzeW1ib2wgaW5mb3JtYXRpb24KIHpsaWIucGMuaW4gICAgICBUZW1wbGF0ZSBmb3IgcGtnLWNvbmZpZyBkZXNjcmlwdG9yCit6bGliLnBjLmNtYWtlaW4gemxpYi5wYyB0ZW1wbGF0ZSBmb3IgY21ha2UKIHpsaWIyYW5zaSAgICAgICBwZXJsIHNjcmlwdCB0byBjb252ZXJ0IHNvdXJjZSBmaWxlcyBmb3IgQysrIGNvbXBpbGF0aW9uCiAKIGFtaWdhLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIEFtaWdhIFNBUyBDCithczQwMC8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBUy80MDAKIGRvYy8gICAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXRzIGFuZCBhbGdvcml0aG1zCiBtc2Rvcy8gICAgICAgICAgbWFrZWZpbGVzIGZvciBNU0RPUwogbmludGVuZG9kcy8gICAgIG1ha2VmaWxlIGZvciBOaW50ZW5kbyBEUwpAQCAtNTYsMTAgKzYxLDggQEAKIHp1dGlsLmMKIHp1dGlsLmgKIAotICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Igc2FtcGxlIHByb2dyYW1zOgotZXhhbXBsZS5jCi1taW5pZ3ppcC5jCi1TZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzIGZvciBtb3JlCisgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGZvciBzYW1wbGUgcHJvZ3JhbXMKK1NlZSBleGFtcGxlcy9SRUFETUUuZXhhbXBsZXMKIAotICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbiBieSB0aGlyZCBwYXJ0aWVzCisgICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQgY29udHJpYnV0aW9ucyBieSB0aGlyZCBwYXJ0aWVzCiBTZWUgY29udHJpYi9SRUFETUUuY29udHJpYgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL01ha2VmaWxlLmluIGIvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCmluZGV4IDViMTViZDAuLmM2MWFhMzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgorKysgYi9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KQEAgLTEsNSArMSw1IEBACiAjIE1ha2VmaWxlIGZvciB6bGliCi0jIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKICMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogCiAjIFRvIGNvbXBpbGUgYW5kIHRlc3QsIHR5cGU6CkBAIC0zMiwxMSArMzIsMTIgQEAKIAogU1RBVElDTElCPWxpYnouYQogU0hBUkVETElCPWxpYnouc28KLVNIQVJFRExJQlY9bGliei5zby4xLjIuNQorU0hBUkVETElCVj1saWJ6LnNvLjEuMi44CiBTSEFSRURMSUJNPWxpYnouc28uMQogTElCUz0kKFNUQVRJQ0xJQikgJChTSEFSRURMSUJWKQogCi1BUj1hciByYworQVI9YXIKK0FSRkxBR1M9cmMKIFJBTkxJQj1yYW5saWIKIExEQ09ORklHPWxkY29uZmlnCiBMRFNIQVJFRExJQkM9LWxjCkBAIC01MywxMSArNTQsMTMgQEAKIG1hbjNkaXIgPSAke21hbmRpcn0vbWFuMwogcGtnY29uZmlnZGlyID0gJHtsaWJkaXJ9L3BrZ2NvbmZpZwogCi1PQkpDID0gYWRsZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBkZWZsYXRlLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gXAotCWd6d3JpdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8gdW5jb21wci5vIHp1dGlsLm8KK09CSlogPSBhZGxlcjMyLm8gY3JjMzIubyBkZWZsYXRlLm8gaW5mYmFjay5vIGluZmZhc3QubyBpbmZsYXRlLm8gaW5mdHJlZXMubyB0cmVlcy5vIHp1dGlsLm8KK09CSkcgPSBjb21wcmVzcy5vIHVuY29tcHIubyBnemNsb3NlLm8gZ3psaWIubyBnenJlYWQubyBnendyaXRlLm8KK09CSkMgPSAkKE9CSlopICQoT0JKRykKIAotUElDX09CSkMgPSBhZGxlcjMyLmxvIGNvbXByZXNzLmxvIGNyYzMyLmxvIGRlZmxhdGUubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gXAotCWd6d3JpdGUubG8gaW5mYmFjay5sbyBpbmZmYXN0LmxvIGluZmxhdGUubG8gaW5mdHJlZXMubG8gdHJlZXMubG8gdW5jb21wci5sbyB6dXRpbC5sbworUElDX09CSlogPSBhZGxlcjMyLmxvIGNyYzMyLmxvIGRlZmxhdGUubG8gaW5mYmFjay5sbyBpbmZmYXN0LmxvIGluZmxhdGUubG8gaW5mdHJlZXMubG8gdHJlZXMubG8genV0aWwubG8KK1BJQ19PQkpHID0gY29tcHJlc3MubG8gdW5jb21wci5sbyBnemNsb3NlLmxvIGd6bGliLmxvIGd6cmVhZC5sbyBnendyaXRlLmxvCitQSUNfT0JKQyA9ICQoUElDX09CSlopICQoUElDX09CSkcpCiAKICMgdG8gdXNlIHRoZSBhc20gY29kZTogbWFrZSBPQkpBPW1hdGNoLm8sIFBJQ19PQkpBPW1hdGNoLmxvCiBPQkpBID0KQEAgLTgwLDM1ICs4Myw0OSBAQAogdGVzdDogYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZAogCiB0ZXN0c3RhdGljOiBzdGF0aWMKLQlAaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlwIC1kICYmIC4vZXhhbXBsZTsgdGhlbiBcCisJQFRNUFNUPXRtcHN0XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlwIC1kICYmIC4vZXhhbXBsZSAkJFRNUFNUIDsgdGhlbiBcCiAJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAotCWZpCi0JLUBybSAtZiBmb28uZ3oKKwlmaTsgXAorCXJtIC1mICQkVE1QU1QKIAogdGVzdHNoYXJlZDogc2hhcmVkCiAJQExEX0xJQlJBUllfUEFUSD1gcHdkYDokKExEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWV9QQVRIOyBcCiAJTERfTElCUkFSWU4zMl9QQVRIPWBwd2RgOiQoTERfTElCUkFSWU4zMl9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZTjMyX1BBVEg7IFwKIAlEWUxEX0xJQlJBUllfUEFUSD1gcHdkYDokKERZTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBEWUxEX0xJQlJBUllfUEFUSDsgXAogCVNITElCX1BBVEg9YHB3ZGA6JChTSExJQl9QQVRIKSA7IGV4cG9ydCBTSExJQl9QQVRIOyBcCi0JaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXBzaCB8IC4vbWluaWd6aXBzaCAtZCAmJiAuL2V4YW1wbGVzaDsgdGhlbiBcCisJVE1QU0g9dG1wc2hfJCQ7IFwKKwlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcHNoIHwgLi9taW5pZ3ppcHNoIC1kICYmIC4vZXhhbXBsZXNoICQkVE1QU0g7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiBzaGFyZWQgdGVzdCBPSyAqKionOyBcCiAJZWxzZSBcCiAJICBlY2hvICcJCSoqKiB6bGliIHNoYXJlZCB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAotCWZpCi0JLUBybSAtZiBmb28uZ3oKKwlmaTsgXAorCXJtIC1mICQkVE1QU0gKIAogdGVzdDY0OiBhbGw2NAotCUBpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcDY0IHwgLi9taW5pZ3ppcDY0IC1kICYmIC4vZXhhbXBsZTY0OyB0aGVuIFwKKwlAVE1QNjQ9dG1wNjRfJCQ7IFwKKwlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcDY0IHwgLi9taW5pZ3ppcDY0IC1kICYmIC4vZXhhbXBsZTY0ICQkVE1QNjQ7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBPSyAqKionOyBcCiAJZWxzZSBcCiAJICBlY2hvICcJCSoqKiB6bGliIDY0LWJpdCB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAotCWZpCi0JLUBybSAtZiBmb28uZ3oKKwlmaTsgXAorCXJtIC1mICQkVE1QNjQKKworaW5mY292ZXIubzogdGVzdC9pbmZjb3Zlci5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L2luZmNvdmVyLmMKKworaW5mY292ZXI6IGluZmNvdmVyLm8gbGliei5hCisJJChDQykgJChDRkxBR1MpIC1vICRAIGluZmNvdmVyLm8gbGliei5hCisKK2NvdmVyOiBpbmZjb3ZlcgorCXJtIC1mICouZ2NkYQorCS4vaW5mY292ZXIKKwlnY292IGluZiouYwogCiBsaWJ6LmE6ICQoT0JKUykKLQkkKEFSKSAkQCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCiAJLUAgKCQoUkFOTElCKSAkQCB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKIAogbWF0Y2gubzogbWF0Y2guUwpAQCAtMTIzLDExICsxNDAsMTcgQEAKIAltdiBfbWF0Y2gubyBtYXRjaC5sbwogCXJtIC1mIF9tYXRjaC5zCiAKLWV4YW1wbGU2NC5vOiBleGFtcGxlLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCBleGFtcGxlLmMKK2V4YW1wbGUubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvZXhhbXBsZS5jCiAKLW1pbmlnemlwNjQubzogbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIG1pbmlnemlwLmMKK21pbmlnemlwLm86IHRlc3QvbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9taW5pZ3ppcC5jCisKK2V4YW1wbGU2NC5vOiB0ZXN0L2V4YW1wbGUuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCB0ZXN0L2V4YW1wbGUuYworCittaW5pZ3ppcDY0Lm86IHRlc3QvbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCB0ZXN0L21pbmlnemlwLmMKIAogLlNVRkZJWEVTOiAubG8KIApAQCAtMTM2LDcgKzE1OSw3IEBACiAJJChDQykgJChTRkxBR1MpIC1EUElDIC1jIC1vIG9ianMvJCoubyAkPAogCS1AbXYgb2Jqcy8kKi5vICRACiAKLSQoU0hBUkVETElCVik6ICQoUElDX09CSlMpCitwbGFjZWJvICQoU0hBUkVETElCVik6ICQoUElDX09CSlMpIGxpYnouYQogCSQoTERTSEFSRUQpICQoU0ZMQUdTKSAtbyAkQCAkKFBJQ19PQkpTKSAkKExEU0hBUkVETElCQykgJChMREZMQUdTKQogCXJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pCiAJbG4gLXMgJEAgJChTSEFSRURMSUIpCkBAIC0xNjgsMTQgKzE5MSwxNiBAQAogCS1AaWYgWyAhIC1kICQoREVTVERJUikkKG1hbjNkaXIpICAgICAgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChtYW4zZGlyKTsgZmkKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQocGtnY29uZmlnZGlyKTsgZmkKIAljcCAkKFNUQVRJQ0xJQikgJChERVNURElSKSQobGliZGlyKQotCWNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKQotCWNkICQoREVTVERJUikkKGxpYmRpcik7IGNobW9kIHU9cncsZ289ciAkKFNUQVRJQ0xJQikKLQktQChjZCAkKERFU1RESVIpJChsaWJkaXIpOyAkKFJBTkxJQikgbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQotCS1AY2QgJChERVNURElSKSQoc2hhcmVkbGliZGlyKTsgaWYgdGVzdCAiJChTSEFSRURMSUJWKSIgLWEgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCi0JICBjaG1vZCA3NTUgJChTSEFSRURMSUJWKTsgXAotCSAgcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSk7IFwKLQkgIGxuIC1zICQoU0hBUkVETElCVikgJChTSEFSRURMSUIpOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCTSk7IFwKKwljaG1vZCA2NDQgJChERVNURElSKSQobGliZGlyKS8kKFNUQVRJQ0xJQikKKwktQCgkKFJBTkxJQikgJChERVNURElSKSQobGliZGlyKS9saWJ6LmEgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCisJLUBpZiB0ZXN0IC1uICIkKFNIQVJFRExJQlYpIjsgdGhlbiBcCisJICBjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IFwKKwkgIGVjaG8gImNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKSI7IFwKKwkgIGNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCVik7IFwKKwkgIGVjaG8gImNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCVikiOyBcCisJICBybSAtZiAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKwkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQik7IFwKKwkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCiAJICAoJChMRENPTkZJRykgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAogCWZpCiAJY3AgemxpYi4zICQoREVTVERJUikkKG1hbjNkaXIpCkBAIC0xOTEsMjIgKzIxNiwyNSBAQAogCWNobW9kIDY0NCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96bGliLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvemNvbmYuaAogCiB1bmluc3RhbGw6Ci0JY2QgJChERVNURElSKSQoaW5jbHVkZWRpcik7IHJtIC1mIHpsaWIuaCB6Y29uZi5oCi0JY2QgJChERVNURElSKSQobGliZGlyKTsgcm0gLWYgbGliei5hOyBcCi0JaWYgdGVzdCAiJChTSEFSRURMSUJWKSIgLWEgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCisJY2QgJChERVNURElSKSQoaW5jbHVkZWRpcikgJiYgcm0gLWYgemxpYi5oIHpjb25mLmgKKwljZCAkKERFU1RESVIpJChsaWJkaXIpICYmIHJtIC1mIGxpYnouYTsgXAorCWlmIHRlc3QgLW4gIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAogCSAgcm0gLWYgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAogCWZpCi0JY2QgJChERVNURElSKSQobWFuM2Rpcik7IHJtIC1mIHpsaWIuMwotCWNkICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IHJtIC1mIHpsaWIucGMKKwljZCAkKERFU1RESVIpJChtYW4zZGlyKSAmJiBybSAtZiB6bGliLjMKKwljZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpICYmIHJtIC1mIHpsaWIucGMKIAogZG9jczogemxpYi4zLnBkZgogCiB6bGliLjMucGRmOiB6bGliLjMKIAlncm9mZiAtbWFuZG9jIC1mIEggLVQgcHMgemxpYi4zIHwgcHMycGRmIC0gemxpYi4zLnBkZgogCi16Y29uZi5oLmluOiB6Y29uZi5oLmNtYWtlaW4KLQlzZWQgIi9eI2NtYWtlZGVmaW5lL0QiIDwgemNvbmYuaC5jbWFrZWluID4gemNvbmYuaC5pbgotCXRvdWNoIC1yIHpjb25mLmguY21ha2VpbiB6Y29uZi5oLmluCit6Y29uZi5oLmNtYWtlaW46IHpjb25mLmguaW4KKwktQCBURU1QRklMRT16Y29uZmhfJCQ7IFwKKwllY2hvICIvI2RlZmluZSBaQ09ORl9ILyBhXFxcXFxuI2NtYWtlZGVmaW5lIFpfUFJFRklYXFxcXFxuI2NtYWtlZGVmaW5lIFpfSEFWRV9VTklTVERfSFxuIiA+PiAkJFRFTVBGSUxFICYmXAorCXNlZCAtZiAkJFRFTVBGSUxFIHpjb25mLmguaW4gPiB6Y29uZi5oLmNtYWtlaW4gJiZcCisJdG91Y2ggLXIgemNvbmYuaC5pbiB6Y29uZi5oLmNtYWtlaW4gJiZcCisJcm0gJCRURU1QRklMRQogCiB6Y29uZjogemNvbmYuaC5pbgogCWNwIC1wIHpjb25mLmguaW4gemNvbmYuaApAQCAtMjE2LDEzICsyNDQsMTYgQEAKIAlybSAtZiAqLm8gKi5sbyAqfiBcCiAJICAgZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKSBleGFtcGxlc2gkKEVYRSkgbWluaWd6aXBzaCQoRVhFKSBcCiAJICAgZXhhbXBsZTY0JChFWEUpIG1pbmlnemlwNjQkKEVYRSkgXAorCSAgIGluZmNvdmVyIFwKIAkgICBsaWJ6LiogZm9vLmd6IHNvX2xvY2F0aW9ucyBcCiAJICAgX21hdGNoLnMgbWFrZXRyZWUgY29udHJpYi9pbmZiYWNrOS8qLm8KIAlybSAtcmYgb2JqcworCXJtIC1mICouZ2NkYSAqLmdjbm8gKi5nY292CisJcm0gLWYgY29udHJpYi9pbmZiYWNrOS8qLmdjZGEgY29udHJpYi9pbmZiYWNrOS8qLmdjbm8gY29udHJpYi9pbmZiYWNrOS8qLmdjb3YKIAogbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCi1kaXN0Y2xlYW46IGNsZWFuIHpjb25mIGRvY3MKLQlybSAtZiBNYWtlZmlsZSB6bGliLnBjCitkaXN0Y2xlYW46IGNsZWFuIHpjb25mIHpjb25mLmguY21ha2VpbiBkb2NzCisJcm0gLWYgTWFrZWZpbGUgemxpYi5wYyBjb25maWd1cmUubG9nCiAJLUBybSAtZiAuRFNfU3RvcmUKIAktQHByaW50ZiAnYWxsOlxuXHQtQGVjaG8gIlBsZWFzZSB1c2UgLi9jb25maWd1cmUgZmlyc3QuICBUaGFuayB5b3UuIlxuJyA+IE1ha2VmaWxlCiAJLUBwcmludGYgJ1xuZGlzdGNsZWFuOlxuXHRtYWtlIC1mIE1ha2VmaWxlLmluIGRpc3RjbGVhblxuJyA+PiBNYWtlZmlsZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL1JFQURNRSBiL01vZHVsZXMvemxpYi9SRUFETUUKaW5kZXggZDQyMTliZi4uNWNhOWQxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL1JFQURNRQorKysgYi9Nb2R1bGVzL3psaWIvUkVBRE1FCkBAIC0xLDIyICsxLDIyIEBACiBaTElCIERBVEEgQ09NUFJFU1NJT04gTElCUkFSWQogCi16bGliIDEuMi41IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZSBpcworemxpYiAxLjIuOCBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpCi1hbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4KK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MSAoZGVmbGF0ZSBmb3JtYXQpIGFuZAorcmZjMTk1MiAoZ3ppcCBmb3JtYXQpLgogCiBBbGwgZnVuY3Rpb25zIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIHpsaWIuaAogKHZvbHVudGVlciB0byB3cml0ZSBtYW4gcGFnZXMgd2VsY29tZSwgY29udGFjdCB6bGliQGd6aXAub3JnKS4gIEEgdXNhZ2UgZXhhbXBsZQotb2YgdGhlIGxpYnJhcnkgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgZXhhbXBsZS5jIHdoaWNoIGFsc28gdGVzdHMgdGhhdCB0aGUgbGlicmFyeQotaXMgd29ya2luZyBjb3JyZWN0bHkuICBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgbWluaWd6aXAuYy4gIFRoZQotY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29tcG9zZWQgb2YgYWxsIHNvdXJjZSBmaWxlcyBleGNlcHQgZXhhbXBsZS5jIGFuZAotbWluaWd6aXAuYy4KK29mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIHRlc3QvZXhhbXBsZS5jIHdoaWNoIGFsc28gdGVzdHMgdGhhdAordGhlIGxpYnJhcnkgaXMgd29ya2luZyBjb3JyZWN0bHkuICBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUKK3Rlc3QvbWluaWd6aXAuYy4gIFRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGl0c2VsZiBpcyBjb21wb3NlZCBvZiBhbGwgc291cmNlCitmaWxlcyBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuCiAKIFRvIGNvbXBpbGUgYWxsIGZpbGVzIGFuZCBydW4gdGhlIHRlc3QgcHJvZ3JhbSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gYXQKIHRoZSB0b3Agb2YgTWFrZWZpbGUuaW4uICBJbiBzaG9ydCAiLi9jb25maWd1cmU7IG1ha2UgdGVzdCIsIGFuZCBpZiB0aGF0IGdvZXMKLXdlbGwsICJtYWtlIGluc3RhbGwiIHNob3VsZCB3b3JrIGZvciBtb3N0IGZsYXZvcnMgb2YgVW5peC4gIEZvciBXaW5kb3dzLCB1c2Ugb25lCi1vZiB0aGUgc3BlY2lhbCBtYWtlZmlsZXMgaW4gd2luMzIvIG9yIGNvbnRyaWIvdnN0dWRpby8gLiAgRm9yIFZNUywgdXNlCit3ZWxsLCAibWFrZSBpbnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93cywgdXNlCitvbmUgb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmliL3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQogbWFrZV92bXMuY29tLgogCiBRdWVzdGlvbnMgYWJvdXQgemxpYiBzaG91bGQgYmUgc2VudCB0byA8emxpYkBnemlwLm9yZz4sIG9yIHRvIEdpbGxlcyBWb2xsYW50CkBAIC0zMSw3ICszMSw3IEBACiBpc3N1ZSBvZiBEci4gIERvYmIncyBKb3VybmFsOyBhIGNvcHkgb2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0CiBodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLyAuCiAKLVRoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuNSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBDaGFuZ2VMb2cuCitUaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjggYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgogCiBVbnN1cHBvcnRlZCB0aGlyZCBwYXJ0eSBjb250cmlidXRpb25zIGFyZSBwcm92aWRlZCBpbiBkaXJlY3RvcnkgY29udHJpYi8gLgogCkBAIC00NCw3ICs0NCw3IEBACiAKIEEgUHl0aG9uIGludGVyZmFjZSB0byB6bGliIHdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyA8YW1rQGFtay5jYT4gaXMKIGF2YWlsYWJsZSBpbiBQeXRob24gMS41IGFuZCBsYXRlciB2ZXJzaW9ucywgc2VlCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2xpYi9tb2R1bGUtemxpYi5odG1sIC4KK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS96bGliLmh0bWwgLgogCiB6bGliIGlzIGJ1aWx0IGludG8gdGNsOiBodHRwOi8vd2lraS50Y2wudGsvNDYxMCAuCiAKQEAgLTg0LDcgKzg0LDcgQEAKIAogQ29weXJpZ2h0IG5vdGljZToKIAotIChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9hZGxlcjMyLmMgYi9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCmluZGV4IDY1YWQ2YTUuLmE4NjhmMDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKKysrIGIvTW9kdWxlcy96bGliL2FkbGVyMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGFkbGVyMzIuYyAtLSBjb21wdXRlIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhIGRhdGEgc3RyZWFtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMSBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw5ICs5LDkgQEAKIAogI2RlZmluZSBsb2NhbCBzdGF0aWMKIAotbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyh1TG9uZyBhZGxlcjEsIHVMb25nIGFkbGVyMiwgel9vZmY2NF90IGxlbjIpOworbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyBPRigodUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsIHpfb2ZmNjRfdCBsZW4yKSk7CiAKLSNkZWZpbmUgQkFTRSA2NTUyMVVMICAgIC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCisjZGVmaW5lIEJBU0UgNjU1MjEgICAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLwogI2RlZmluZSBOTUFYIDU1NTIKIC8qIE5NQVggaXMgdGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisxKShCQVNFLTEpIDw9IDJeMzItMSAqLwogCkBAIC0yMSwzOSArMjEsNDQgQEAKICNkZWZpbmUgRE84KGJ1ZixpKSAgRE80KGJ1ZixpKTsgRE80KGJ1ZixpKzQpOwogI2RlZmluZSBETzE2KGJ1ZikgICBETzgoYnVmLDApOyBETzgoYnVmLDgpOwogCi0vKiB1c2UgTk9fRElWSURFIGlmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IGRvIGRpdmlzaW9uIGluIGhhcmR3YXJlICovCisvKiB1c2UgTk9fRElWSURFIGlmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IGRvIGRpdmlzaW9uIGluIGhhcmR3YXJlIC0tCisgICB0cnkgaXQgYm90aCB3YXlzIHRvIHNlZSB3aGljaCBpcyBmYXN0ZXIgKi8KICNpZmRlZiBOT19ESVZJREUKLSMgIGRlZmluZSBNT0QoYSkgXAorLyogbm90ZSB0aGF0IHRoaXMgYXNzdW1lcyBCQVNFIGlzIDY1NTIxLCB3aGVyZSA2NTUzNiAlIDY1NTIxID09IDE1CisgICAodGhhbmsgeW91IHRvIEpvaG4gUmVpc2VyIGZvciBwb2ludGluZyB0aGlzIG91dCkgKi8KKyMgIGRlZmluZSBDSE9QKGEpIFwKICAgICBkbyB7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTYpKSBhIC09IChCQVNFIDw8IDE2KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNSkpIGEgLT0gKEJBU0UgPDwgMTUpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE0KSkgYSAtPSAoQkFTRSA8PCAxNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTMpKSBhIC09IChCQVNFIDw8IDEzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMikpIGEgLT0gKEJBU0UgPDwgMTIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDExKSkgYSAtPSAoQkFTRSA8PCAxMSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTApKSBhIC09IChCQVNFIDw8IDEwKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA5KSkgYSAtPSAoQkFTRSA8PCA5KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA4KSkgYSAtPSAoQkFTRSA8PCA4KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA3KSkgYSAtPSAoQkFTRSA8PCA3KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA2KSkgYSAtPSAoQkFTRSA8PCA2KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA1KSkgYSAtPSAoQkFTRSA8PCA1KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA0KSkgYSAtPSAoQkFTRSA8PCA0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAzKSkgYSAtPSAoQkFTRSA8PCAzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAyKSkgYSAtPSAoQkFTRSA8PCAyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxKSkgYSAtPSAoQkFTRSA8PCAxKTsgXAorICAgICAgICB1bnNpZ25lZCBsb25nIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZVTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKKyAgICB9IHdoaWxlICgwKQorIyAgZGVmaW5lIE1PRDI4KGEpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgQ0hPUChhKTsgXAogICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJBU0U7IFwKICAgICB9IHdoaWxlICgwKQotIyAgZGVmaW5lIE1PRDQoYSkgXAorIyAgZGVmaW5lIE1PRChhKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDQpKSBhIC09IChCQVNFIDw8IDQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDMpKSBhIC09IChCQVNFIDw8IDMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDIpKSBhIC09IChCQVNFIDw8IDIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEpKSBhIC09IChCQVNFIDw8IDEpOyBcCisgICAgICAgIENIT1AoYSk7IFwKKyAgICAgICAgTU9EMjgoYSk7IFwKKyAgICB9IHdoaWxlICgwKQorIyAgZGVmaW5lIE1PRDYzKGEpIFwKKyAgICBkbyB7IC8qIHRoaXMgYXNzdW1lcyBhIGlzIG5vdCBuZWdhdGl2ZSAqLyBcCisgICAgICAgIHpfb2ZmNjRfdCB0bXAgPSBhID4+IDMyOyBcCisgICAgICAgIGEgJj0gMHhmZmZmZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDgpIC0gKHRtcCA8PCA1KSArIHRtcDsgXAorICAgICAgICB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCiAgICAgICAgIGlmIChhID49IEJBU0UpIGEgLT0gQkFTRTsgXAogICAgIH0gd2hpbGUgKDApCiAjZWxzZQogIyAgZGVmaW5lIE1PRChhKSBhICU9IEJBU0UKLSMgIGRlZmluZSBNT0Q0KGEpIGEgJT0gQkFTRQorIyAgZGVmaW5lIE1PRDI4KGEpIGEgJT0gQkFTRQorIyAgZGVmaW5lIE1PRDYzKGEpIGEgJT0gQkFTRQogI2VuZGlmCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTkyLDcgKzk3LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYWRsZXIgPj0gQkFTRSkKICAgICAgICAgICAgIGFkbGVyIC09IEJBU0U7Ci0gICAgICAgIE1PRDQoc3VtMik7ICAgICAgICAgICAgIC8qIG9ubHkgYWRkZWQgc28gbWFueSBCQVNFJ3MgKi8KKyAgICAgICAgTU9EMjgoc3VtMik7ICAgICAgICAgICAgLyogb25seSBhZGRlZCBzbyBtYW55IEJBU0UncyAqLwogICAgICAgICByZXR1cm4gYWRsZXIgfCAoc3VtMiA8PCAxNik7CiAgICAgfQogCkBAIC0xMzcsOCArMTQyLDEzIEBACiAgICAgdW5zaWduZWQgbG9uZyBzdW0yOwogICAgIHVuc2lnbmVkIHJlbTsKIAorICAgIC8qIGZvciBuZWdhdGl2ZSBsZW4sIHJldHVybiBpbnZhbGlkIGFkbGVyMzIgYXMgYSBjbHVlIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICBpZiAobGVuMiA8IDApCisgICAgICAgIHJldHVybiAweGZmZmZmZmZmVUw7CisKICAgICAvKiB0aGUgZGVyaXZhdGlvbiBvZiB0aGlzIGZvcm11bGEgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlciAqLwotICAgIHJlbSA9ICh1bnNpZ25lZCkobGVuMiAlIEJBU0UpOworICAgIE1PRDYzKGxlbjIpOyAgICAgICAgICAgICAgICAvKiBhc3N1bWVzIGxlbjIgPj0gMCAqLworICAgIHJlbSA9ICh1bnNpZ25lZClsZW4yOwogICAgIHN1bTEgPSBhZGxlcjEgJiAweGZmZmY7CiAgICAgc3VtMiA9IHJlbSAqIHN1bTE7CiAgICAgTU9EKHN1bTIpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQgYi9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dAppbmRleCBiMDIyZGRlLi5jOTdmNDk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dAorKysgYi9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dApAQCAtMTIxLDcgKzEyMSw3IEBACiBrYnl0ZXMuICBZb3UgY2FuIGltYWdpbmUgdGhhdCBmaWxsaW5nIGluIGEgMl4xNSBlbnRyeSB0YWJsZSBmb3IgYSAxNS1iaXQgY29kZQogd291bGQgdGFrZSB0b28gbG9uZyBpZiB5b3UncmUgb25seSBkZWNvZGluZyBzZXZlcmFsIHRob3VzYW5kIHN5bWJvbHMuICBBdCB0aGUKIG90aGVyIGV4dHJlbWUsIHlvdSBjb3VsZCBtYWtlIGEgbmV3IHRhYmxlIGZvciBldmVyeSBiaXQgaW4gdGhlIGNvZGUuICBJbiBmYWN0LAotdGhhdCdzIGVzc2VudGlhbGx5IGEgSHVmZm1hbiB0cmVlLiAgQnV0IHRoZW4geW91IHNwZW5kIHR3byBtdWNoIHRpbWUKK3RoYXQncyBlc3NlbnRpYWxseSBhIEh1ZmZtYW4gdHJlZS4gIEJ1dCB0aGVuIHlvdSBzcGVuZCB0b28gbXVjaCB0aW1lCiB0cmF2ZXJzaW5nIHRoZSB0cmVlIHdoaWxlIGRlY29kaW5nLCBldmVuIGZvciBzaG9ydCBzeW1ib2xzLgogCiBTbyB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSBmaXJzdCBsb29rdXAgdGFibGUgaXMgYSB0cmFkZSBvZiB0aGUgdGltZSB0bwpAQCAtMjA2LDQgKzIwNiw0IEBACiBwcC4gMzM3LTM0My4KIAogYGBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbicnIGF2YWlsYWJsZSBpbgotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MS50eHQKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jb21wcmVzcy5jIGIvTW9kdWxlcy96bGliL2NvbXByZXNzLmMKaW5kZXggZWE0ZGZiZS4uNmU5NzYyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NvbXByZXNzLmMKKysrIGIvTW9kdWxlcy96bGliL2NvbXByZXNzLmMKQEAgLTI5LDcgKzI5LDcgQEAKICAgICB6X3N0cmVhbSBzdHJlYW07CiAgICAgaW50IGVycjsKIAotICAgIHN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilzb3VyY2U7CisgICAgc3RyZWFtLm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKXNvdXJjZTsKICAgICBzdHJlYW0uYXZhaWxfaW4gPSAodUludClzb3VyY2VMZW47CiAjaWZkZWYgTUFYU0VHXzY0SwogICAgIC8qIENoZWNrIGZvciBzb3VyY2UgPiA2NEsgb24gMTYtYml0IG1hY2hpbmU6ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY29uZmlndXJlIGIvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQppbmRleCBiZDllZGQyLi5iNzdhOGE4IDEwMDc1NQotLS0gYS9Nb2R1bGVzL3psaWIvY29uZmlndXJlCisrKyBiL01vZHVsZXMvemxpYi9jb25maWd1cmUKQEAgLTEzLDM5ICsxMyw1MiBAQAogIyBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUyBiZWZvcmUgcmVwb3J0aW5nCiAjIGFuIGVycm9yLgogCisjIHN0YXJ0IG9mZiBjb25maWd1cmUubG9nCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gJDAgJCogPj4gY29uZmlndXJlLmxvZworZGF0ZSA+PiBjb25maWd1cmUubG9nCisKKyMgc2V0IGNvbW1hbmQgcHJlZml4IGZvciBjcm9zcy1jb21waWxhdGlvbgogaWYgWyAtbiAiJHtDSE9TVH0iIF07IHRoZW4KLSAgICB1bmFtZT0iJChlY2hvICIke0NIT1NUfSIgfCBzZWQgLWUgJ3MvXlteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCktLiokL1wxLycpIgorICAgIHVuYW1lPSJgZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzL15bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpLS4qJC9cMS8nYCIKICAgICBDUk9TU19QUkVGSVg9IiR7Q0hPU1R9LSIKIGZpCiAKKyMgZGVzdGluYXRpb24gbmFtZSBmb3Igc3RhdGljIGxpYnJhcnkKIFNUQVRJQ0xJQj1saWJ6LmEKLUxERkxBR1M9IiR7TERGTEFHU30gLUwuICR7U1RBVElDTElCfSIKKworIyBleHRyYWN0IHpsaWIgdmVyc2lvbiBudW1iZXJzIGZyb20gemxpYi5oCiBWRVI9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoLipcKSIuKi9cMS9wJyA8IHpsaWIuaGAKIFZFUjM9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXFwuWzAtOV0qXFwuWzAtOV0qXCkuKi9cMS9wJyA8IHpsaWIuaGAKIFZFUjI9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXFwuWzAtOV0qXClcXC4uKi9cMS9wJyA8IHpsaWIuaGAKIFZFUjE9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXClcXC4uKi9cMS9wJyA8IHpsaWIuaGAKKworIyBlc3RhYmxpc2ggY29tbWFuZHMgZm9yIGxpYnJhcnkgYnVpbGRpbmcKIGlmICIke0NST1NTX1BSRUZJWH1hciIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCiAgICAgQVI9JHtBUi0iJHtDUk9TU19QUkVGSVh9YXIifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgICAgQVI9JHtBUi0iYXIifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBmaQotQVJfUkM9IiR7QVJ9IHJjIgorQVJGTEFHUz0ke0FSRkxBR1MtInJjIn0KIGlmICIke0NST1NTX1BSRUZJWH1yYW5saWIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIFJBTkxJQj0ke1JBTkxJQi0iJHtDUk9TU19QUkVGSVh9cmFubGliIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtSQU5MSUJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7UkFOTElCfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgICAgUkFOTElCPSR7UkFOTElCLSJyYW5saWIifQogZmkKIGlmICIke0NST1NTX1BSRUZJWH1ubSIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCiAgICAgTk09JHtOTS0iJHtDUk9TU19QUkVGSVh9bm0ifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke05NfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke05NfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgICAgTk09JHtOTS0ibm0ifQogZmkKKworIyBzZXQgZGVmYXVsdHMgYmVmb3JlIHByb2Nlc3NpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMKIExEQ09ORklHPSR7TERDT05GSUctImxkY29uZmlnIn0KIExEU0hBUkVETElCQz0iJHtMRFNIQVJFRExJQkMtLWxjfSIKK0FSQ0hTPQogcHJlZml4PSR7cHJlZml4LS91c3IvbG9jYWx9CiBleGVjX3ByZWZpeD0ke2V4ZWNfcHJlZml4LScke3ByZWZpeH0nfQogbGliZGlyPSR7bGliZGlyLScke2V4ZWNfcHJlZml4fS9saWInfQpAQCAtNTQsMjAgKzY3LDM5IEBACiBtYW5kaXI9JHttYW5kaXItJyR7cHJlZml4fS9zaGFyZS9tYW4nfQogc2hhcmVkX2V4dD0nLnNvJwogc2hhcmVkPTEKK3NvbG89MAorY292ZXI9MAogenByZWZpeD0wCit6Y29uc3Q9MAogYnVpbGQ2ND0wCiBnY2M9MAogb2xkX2NjPSIkQ0MiCiBvbGRfY2ZsYWdzPSIkQ0ZMQUdTIgorT0JKQz0nJChPQkpaKSAkKE9CSkcpJworUElDX09CSkM9JyQoUElDX09CSlopICQoUElDX09CSkcpJwogCisjIGxlYXZlIHRoaXMgc2NyaXB0LCBvcHRpb25hbGx5IGluIGEgYmFkIHdheQorbGVhdmUoKQoreworICBpZiB0ZXN0ICIkKiIgIT0gIjAiOyB0aGVuCisgICAgZWNobyAiKiogJDAgYWJvcnRpbmcuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGZpCisgIHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5nY25vIC4vLS12ZXJzaW9uCisgIGVjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGV4aXQgJDEKK30KKworIyBwcm9jZXNzIGNvbW1hbmQgbGluZSBvcHRpb25zCiB3aGlsZSB0ZXN0ICQjIC1nZSAxCiBkbwogY2FzZSAiJDEiIGluCiAgICAgLWgqIHwgLS1oZWxwKQotICAgICAgZWNobyAndXNhZ2U6JwotICAgICAgZWNobyAnICBjb25maWd1cmUgWy0tenByZWZpeF0gWy0tcHJlZml4PVBSRUZJWF0gIFstLWVwcmVmaXg9RVhQUkVGSVhdJwotICAgICAgZWNobyAnICAgIFstLXN0YXRpY10gWy0tNjRdIFstLWxpYmRpcj1MSUJESVJdIFstLXNoYXJlZGxpYmRpcj1MSUJESVJdJwotICAgICAgZWNobyAnICAgIFstLWluY2x1ZGVkaXI9SU5DTFVERURJUl0nCisgICAgICBlY2hvICd1c2FnZTonIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLWNvbnN0XSBbLS16cHJlZml4XSBbLS1wcmVmaXg9UFJFRklYXSAgWy0tZXByZWZpeD1FWFBSRUZJWF0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJkaXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICAgIFstLWluY2x1ZGVkaXI9SU5DTFVERURJUl0gWy0tYXJjaHM9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0Il0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICAgICAgZXhpdCAwIDs7CiAgICAgLXAqPSogfCAtLXByZWZpeD0qKSBwcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKICAgICAtZSo9KiB8IC0tZXByZWZpeD0qKSBleGVjX3ByZWZpeD1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OwpAQCAtODEsNTEgKzExMyw4OCBAQAogICAgIC1pKiB8IC0taW5jbHVkZWRpcikgaW5jbHVkZWRpcj0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKICAgICAtcyogfCAtLXNoYXJlZCB8IC0tZW5hYmxlLXNoYXJlZCkgc2hhcmVkPTE7IHNoaWZ0IDs7CiAgICAgLXQgfCAtLXN0YXRpYykgc2hhcmVkPTA7IHNoaWZ0IDs7CisgICAgLS1zb2xvKSBzb2xvPTE7IHNoaWZ0IDs7CisgICAgLS1jb3ZlcikgY292ZXI9MTsgc2hpZnQgOzsKICAgICAteiogfCAtLXpwcmVmaXgpIHpwcmVmaXg9MTsgc2hpZnQgOzsKICAgICAtNiogfCAtLTY0KSBidWlsZDY0PTE7IHNoaWZ0IDs7Ci0gICAgLS1zeXNjb25mZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLXN5c2NvbmZkaXIiOyBzaGlmdCA7OwotICAgIC0tbG9jYWxzdGF0ZWRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1sb2NhbHN0YXRlZGlyIjsgc2hpZnQgOzsKLSAgICAqKSBlY2hvICJ1bmtub3duIG9wdGlvbjogJDEiOyBlY2hvICIkMCAtLWhlbHAgZm9yIGhlbHAiOyBleGl0IDEgOzsKKyAgICAtYSo9KiB8IC0tYXJjaHM9KikgQVJDSFM9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKKyAgICAtLXN5c2NvbmZkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tc3lzY29uZmRpciIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZzsgc2hpZnQgOzsKKyAgICAtLWxvY2Fsc3RhdGVkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tbG9jYWxzdGF0ZWRpciIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZzsgc2hpZnQgOzsKKyAgICAtYyogfCAtLWNvbnN0KSB6Y29uc3Q9MTsgc2hpZnQgOzsKKyAgICAqKQorICAgICAgZWNobyAidW5rbm93biBvcHRpb246ICQxIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIkMCAtLWhlbHAgZm9yIGhlbHAiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGxlYXZlIDE7OwogICAgIGVzYWMKIGRvbmUKIAorIyB0ZW1wb3JhcnkgZmlsZSBuYW1lCiB0ZXN0PXp0ZXN0JCQKKworIyBwdXQgYXJndW1lbnRzIGluIGxvZywgYWxzbyBwdXQgdGVzdCBmaWxlIGluIGxvZyBpZiB1c2VkIGluIGFyZ3VtZW50cworc2hvdygpCit7CisgIGNhc2UgIiQqIiBpbgorICAgICokdGVzdC5jKikKKyAgICAgIGVjaG8gPT09ICR0ZXN0LmMgPT09ID4+IGNvbmZpZ3VyZS5sb2cKKyAgICAgIGNhdCAkdGVzdC5jID4+IGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gPT09ID4+IGNvbmZpZ3VyZS5sb2c7OworICBlc2FjCisgIGVjaG8gJCogPj4gY29uZmlndXJlLmxvZworfQorCisjIGNoZWNrIGZvciBnY2MgdnMuIGNjIGFuZCBzZXQgY29tcGlsZSBhbmQgbGluayBmbGFncyBiYXNlZCBvbiB0aGUgc3lzdGVtIGlkZW50aWZpZWQgYnkgdW5hbWUKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKIGV4dGVybiBpbnQgZ2V0Y2hhcigpOwogaW50IGhlbGxvKCkge3JldHVybiBnZXRjaGFyKCk7fQogRU9GCiAKLXRlc3QgLXogIiRDQyIgJiYgZWNobyBDaGVja2luZyBmb3IgJHtDUk9TU19QUkVGSVh9Z2NjLi4uCit0ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1NfUFJFRklYfWdjYy4uLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBjYz0ke0NDLSR7Q1JPU1NfUFJFRklYfWdjY30KIGNmbGFncz0ke0NGTEFHUy0iLU8zIn0KICMgdG8gZm9yY2UgdGhlIGFzbSB2ZXJzaW9uIHVzZTogQ0ZMQUdTPSItTzMgLURBU01WIiAuL2NvbmZpZ3VyZQogY2FzZSAiJGNjIiBpbgogICAqZ2NjKikgZ2NjPTEgOzsKKyAgKmNsYW5nKikgZ2NjPTEgOzsKK2VzYWMKK2Nhc2UgYCRjYyAtdiAyPiYxYCBpbgorICAqZ2NjKikgZ2NjPTEgOzsKIGVzYWMKIAotaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkY2ZsYWdzICR0ZXN0LmMpIDI+L2Rldi9udWxsOyB0aGVuCitzaG93ICRjYyAtYyAkdGVzdC5jCitpZiB0ZXN0ICIkZ2NjIiAtZXEgMSAmJiAoJGNjIC1jICR0ZXN0LmMpID4+IGNvbmZpZ3VyZS5sb2cgMj4mMTsgdGhlbgorICBlY2hvIC4uLiB1c2luZyBnY2MgPj4gY29uZmlndXJlLmxvZwogICBDQz0iJGNjIgorICBDRkxBR1M9IiR7Q0ZMQUdTLS1PM30gJHtBUkNIU30iCiAgIFNGTEFHUz0iJHtDRkxBR1MtLU8zfSAtZlBJQyIKLSAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9IgorICBMREZMQUdTPSIke0xERkxBR1N9ICR7QVJDSFN9IgogICBpZiB0ZXN0ICRidWlsZDY0IC1lcSAxOyB0aGVuCiAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLW02NCIKICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgogICBmaQogICBpZiB0ZXN0ICIke1pMSUJHQ0NXQVJOfSIgPSAiWUVTIjsgdGhlbgotICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICAgIGlmIHRlc3QgIiR6Y29uc3QiIC1lcSAxOyB0aGVuCisgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1XY2FzdC1xdWFsIC1wZWRhbnRpYyAtRFpMSUJfQ09OU1QiCisgICAgZWxzZQorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtcGVkYW50aWMiCisgICAgZmkKICAgZmkKICAgaWYgdGVzdCAteiAiJHVuYW1lIjsgdGhlbgogICAgIHVuYW1lPWAodW5hbWUgLXMgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAKICAgZmkKICAgY2FzZSAiJHVuYW1lIiBpbgotICBMaW51eCogfCBsaW51eCogfCBHTlUgfCBHTlUvKiB8ICpCU0QgfCBEcmFnb25GbHkpIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0gOzsKKyAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCBzb2xhcmlzKikKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifSA7OworICAqQlNEIHwgKmJzZCogfCBEcmFnb25GbHkpCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0KKyAgICAgICAgTERDT05GSUc9ImxkY29uZmlnIC1tIiA7OwogICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiogfCBPUy8yKikKICAgICAgICAgRVhFPScuZXhlJyA7OwotICBNSU5HVyp8bWluZ3cqKQorICBNSU5HVyogfCBtaW5ndyopCiAjIHRlbXBvcmFyeSBieXBhc3MKICAgICAgICAgcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0Ci0gICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIgotICAgICAgICBleGl0IDEKKyAgICAgICAgZWNobyAiUGxlYXNlIHVzZSB3aW4zMi9NYWtlZmlsZS5nY2MgaW5zdGVhZC4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgICAgbGVhdmUgMQogICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCJ9CiAgICAgICAgIExEU0hBUkVETElCQz0iIgogICAgICAgICBFWEU9Jy5leGUnIDs7CkBAIC0xNDIsMTcgKzIxMSwyNSBAQAogICAgICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc2wnCiAgICAgICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbCcgOzsKICAgICAgICAgIGVzYWMgOzsKLSAgRGFyd2luKikgICBzaGFyZWRfZXh0PScuZHlsaWInCisgIERhcndpbiogfCBkYXJ3aW4qKQorICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5keWxpYicKICAgICAgICAgICAgICBTSEFSRURMSUI9bGlieiRzaGFyZWRfZXh0CiAgICAgICAgICAgICAgU0hBUkVETElCVj1saWJ6LiRWRVIkc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQk09bGliei4kVkVSMSRzaGFyZWRfZXh0Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJGxpYmRpci8kU0hBUkVETElCTSAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICRWRVIxIC1jdXJyZW50X3ZlcnNpb24gJFZFUjMifSA7OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0KKyAgICAgICAgICAgICBpZiBsaWJ0b29sIC1WIDI+JjEgfCBncmVwIEFwcGxlID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgIEFSPSJsaWJ0b29sIgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgQVI9Ii91c3IvYmluL2xpYnRvb2wiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBUkZMQUdTPSItbyIgOzsKICAgKikgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifSA7OwogICBlc2FjCiBlbHNlCiAgICMgZmluZCBzeXN0ZW0gbmFtZSBhbmQgY29ycmVzcG9uZGluZyBjYyBvcHRpb25zCiAgIENDPSR7Q0MtY2N9CiAgIGdjYz0wCisgIGVjaG8gLi4uIHVzaW5nICRDQyA+PiBjb25maWd1cmUubG9nCiAgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KICAgICB1bmFtZT1gKHVuYW1lIC1zciB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYAogICBmaQpAQCAtMTgzLDE5ICsyNjAsMzQgQEAKICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi00IC1PIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyJ9CiAgICAgICAgICAgICAgUkFOTElCPSR7UkFOTElCLSJ0cnVlIn0KLSAgICAgICAgICAgICBBUl9SQz0iY2MgLUEiIDs7CisgICAgICAgICAgICAgQVI9ImNjIgorICAgICAgICAgICAgIEFSRkxBR1M9Ii1BIiA7OwogICBTQ09fU1ZcIDMuMiopIFNGTEFHUz0ke0NGTEFHUy0iLU8zIC1keSAtS1BJQyAifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8zIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtZHkgLUtQSUMgLUcifSA7OwotICBTdW5PU1wgNSopIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn0KLSAgICAgICAgIGNhc2UgYCh1bmFtZSAtbSB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgotICAgICAgICAgaTg2KikKLSAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi14cGVudGl1bSAtZmFzdCAtS1BJQyAtUi4ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLXhwZW50aXVtIC1mYXN0In0gOzsKLSAgICAgICAgICopCi0gICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNnOTIgLUtQSUMgLVIuIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14Y2c5MiJ9IDs7Ci0gICAgICAgICBlc2FjIDs7CisgIFN1bk9TXCA1KiB8IHNvbGFyaXMqKQorICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcgLWggbGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KKyAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLUtQSUMifQorICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCJ9CisgICAgICAgICBpZiB0ZXN0ICRidWlsZDY0IC1lcSAxOyB0aGVuCisgICAgICAgICAgICAgIyBvbGQgdmVyc2lvbnMgb2YgU3VuUFJPL1dvcmtzaG9wL1N0dWRpbyBkb24ndCBzdXBwb3J0IC1tNjQsCisgICAgICAgICAgICAgIyBidXQgbmV3ZXIgb25lcyBkby4gIENoZWNrIGZvciBpdC4KKyAgICAgICAgICAgICBmbGFnNjQ9YCRDQyAtZmxhZ3MgfCBlZ3JlcCAtLSAnXi1tNjQnYAorICAgICAgICAgICAgIGlmIHRlc3QgeCIkZmxhZzY0IiAhPSB4IiIgOyB0aGVuCisgICAgICAgICAgICAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCisgICAgICAgICAgICAgICAgIFNGTEFHUz0iJHtTRkxBR1N9IC1tNjQiCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICAgICAgICAgICAgICBpODYqKQorICAgICAgICAgICAgICAgICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC14YXJjaD1hbWQ2NCIKKyAgICAgICAgICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAteGFyY2g9YW1kNjQiIDs7CisgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9djkiCisgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPXY5IiA7OworICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICAgICA7OwogICBTdW5PU1wgNCopIFNGTEFHUz0ke0NGTEFHUy0iLU8yIC1QSUMifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8yIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJsZCJ9IDs7CkBAIC0yMjUsMjUgKzMxNyw3OSBAQAogICBlc2FjCiBmaQogCisjIGRlc3RpbmF0aW9uIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyeSBpZiBub3QgZGVmaW5lZCBhYm92ZQogU0hBUkVETElCPSR7U0hBUkVETElCLSJsaWJ6JHNoYXJlZF9leHQifQogU0hBUkVETElCVj0ke1NIQVJFRExJQlYtImxpYnokc2hhcmVkX2V4dC4kVkVSIn0KIFNIQVJFRExJQk09JHtTSEFSRURMSUJNLSJsaWJ6JHNoYXJlZF9leHQuJFZFUjEifQogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBkZWZpbmUgZnVuY3Rpb25zIGZvciB0ZXN0aW5nIGNvbXBpbGVyIGFuZCBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcyBhbmQgbG9nZ2luZyB0aGUgcmVzdWx0cworCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjZXJyb3IgZXJyb3IKK0VPRgoraWYgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+L2Rldi9udWxsOyB0aGVuCisgIHRyeSgpCisgIHsKKyAgICBzaG93ICQqCisgICAgdGVzdCAiYCggJCogKSAyPiYxIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2dgIiA9ICIiCisgIH0KKyAgZWNobyAtIHVzaW5nIGFueSBvdXRwdXQgZnJvbSBjb21waWxlciB0byBpbmRpY2F0ZSBhbiBlcnJvciA+PiBjb25maWd1cmUubG9nCitlbHNlCit0cnkoKQoreworICBzaG93ICQqCisgICggJCogKSA+PiBjb25maWd1cmUubG9nIDI+JjEKKyAgcmV0PSQ/CisgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgIGVjaG8gIihleGl0IGNvZGUgIiRyZXQiKSIgPj4gY29uZmlndXJlLmxvZworICBmaQorICByZXR1cm4gJHJldAorfQorZmkKKwordHJ5Ym90aCgpCit7CisgIHNob3cgJCoKKyAgZ290PWAoICQqICkgMj4mMWAKKyAgcmV0PSQ/CisgIHByaW50ZiAlcyAiJGdvdCIgPj4gY29uZmlndXJlLmxvZworICBpZiB0ZXN0ICRyZXQgLW5lIDA7IHRoZW4KKyAgICByZXR1cm4gJHJldAorICBmaQorICB0ZXN0ICIkZ290IiA9ICIiCit9CisKK2NhdCA+ICR0ZXN0LmMgPDwgRU9GCitpbnQgZm9vKCkgeyByZXR1cm4gMDsgfQorRU9GCitlY2hvICJDaGVja2luZyBmb3Igb2JzZXNzaXZlLWNvbXB1bHNpdmUgY29tcGlsZXIgb3B0aW9ucy4uLiIgPj4gY29uZmlndXJlLmxvZworaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJDb21waWxlciBlcnJvciByZXBvcnRpbmcgaXMgdG9vIGhhcnNoIGZvciAkMCAocGVyaGFwcyByZW1vdmUgLVdlcnJvcikuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGxlYXZlIDEKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIHNlZSBpZiBzaGFyZWQgbGlicmFyeSBidWlsZCBzdXBwb3J0ZWQKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKK2V4dGVybiBpbnQgZ2V0Y2hhcigpOworaW50IGhlbGxvKCkge3JldHVybiBnZXRjaGFyKCk7fQorRU9GCiBpZiB0ZXN0ICRzaGFyZWQgLWVxIDE7IHRoZW4KLSAgZWNobyBDaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4uLgorICBlY2hvIENoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0Li4uIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgIyB3ZSBtdXN0IHRlc3QgaW4gdHdvIHN0ZXBzIChjYyB0aGVuIGxkKSwgcmVxdWlyZWQgYXQgbGVhc3Qgb24gU3VuT1MgNC54Ci0gIGlmIHRlc3QgImAoJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiIgJiYKLSAgICAgdGVzdCAiYCgkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8pIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyBCdWlsZGluZyBzaGFyZWQgbGlicmFyeSAkU0hBUkVETElCViB3aXRoICRDQy4KKyAgaWYgdHJ5ICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMgJiYKKyAgICAgdHJ5ICRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubzsgdGhlbgorICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQlYgd2l0aCAkQ0MuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxpZiB0ZXN0IC16ICIkb2xkX2NjIiAtYSAteiAiJG9sZF9jZmxhZ3MiOyB0aGVuCi0gICAgZWNobyBObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LgorICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIHNoYXJlZD0wOwogICBlbHNlCi0gICAgZWNobyBUZXN0ZWQgJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYwotICAgICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMKLSAgICBlY2hvIFRlc3RlZCAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8KLSAgICAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8KLSAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0OyB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTJworICAgIGVjaG8gJ05vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQ7IHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MnIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBzaGFyZWQ9MDsKICAgZmkKIGZpCkBAIC0yNTQsMjUgKzQwMCw0MyBAQAogICBTSEFSRURMSUI9IiIKICAgU0hBUkVETElCVj0iIgogICBTSEFSRURMSUJNPSIiCi0gIGVjaG8gQnVpbGRpbmcgc3RhdGljIGxpYnJhcnkgJFNUQVRJQ0xJQiB2ZXJzaW9uICRWRVIgd2l0aCAkQ0MuCisgIGVjaG8gQnVpbGRpbmcgc3RhdGljIGxpYnJhcnkgJFNUQVRJQ0xJQiB2ZXJzaW9uICRWRVIgd2l0aCAkQ0MuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgQUxMPSJzdGF0aWMgc2hhcmVkIgogICBURVNUPSJhbGwgdGVzdHN0YXRpYyB0ZXN0c2hhcmVkIgogZmkKIAorIyBjaGVjayBmb3IgdW5kZXJzY29yZXMgaW4gZXh0ZXJuYWwgbmFtZXMgZm9yIHVzZSBieSBhc3NlbWJsZXIgY29kZQorQ1BQPSR7Q1BQLSIkQ0MgLUUifQorY2FzZSAkQ0ZMQUdTIGluCisgICpBU01WKikKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgICBzaG93ICIkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvIgorICAgIGlmIHRlc3QgImAkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2dgIiA9ICIiOyB0aGVuCisgICAgICBDUFA9IiRDUFAgLUROT19VTkRFUkxJTkUiCisgICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gTm8uIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlbHNlCisgICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gWWVzLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZmkgOzsKK2VzYWMKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIGxhcmdlIGZpbGUgc3VwcG9ydCwgYW5kIGlmIG5vbmUsIGNoZWNrIGZvciBmc2Vla28oKQogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogb2ZmNjRfdCBkdW1teSA9IDA7CiBFT0YKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSAkdGVzdC5jOyB0aGVuCiAgIENGTEFHUz0iJHtDRkxBR1N9IC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xIgogICBTRkxBR1M9IiR7U0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKICAgQUxMPSIke0FMTH0gYWxsNjQiCiAgIFRFU1Q9IiR7VEVTVH0gdGVzdDY0IgotICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBZZXMuIgotICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iCisgIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIE5vLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KIGludCBtYWluKHZvaWQpIHsKQEAgLTI4MCwyNzIgKzQ0NCwzMzUgQEAKICAgcmV0dXJuIDA7CiB9CiBFT0YKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxzZQogICAgIENGTEFHUz0iJHtDRkxBR1N9IC1ETk9fRlNFRUtPIgogICAgIFNGTEFHUz0iJHtTRkxBR1N9IC1ETk9fRlNFRUtPIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gTm8uIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGZpCiBmaQogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3Igc3RyZXJyb3IoKSBmb3IgdXNlIGJ5IGd6KiBmdW5jdGlvbnMKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgoraW50IG1haW4oKSB7IHJldHVybiBzdHJsZW4oc3RyZXJyb3IoZXJybm8pKTsgfQorRU9GCitpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICBlY2hvICJDaGVja2luZyBmb3Igc3RyZXJyb3IuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRE5PX1NUUkVSUk9SIgorICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX1NUUkVSUk9SIgorICBlY2hvICJDaGVja2luZyBmb3Igc3RyZXJyb3IuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGNvcHkgY2xlYW4gemNvbmYuaCBmb3Igc3Vic2VxdWVudCBlZGl0cwogY3AgLXAgemNvbmYuaC5pbiB6Y29uZi5oCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciB1bmlzdGQuaCBhbmQgc2F2ZSByZXN1bHQgaW4gemNvbmYuaAogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogaW50IG1haW4oKSB7IHJldHVybiAwOyB9CiBFT0YKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCiAgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfVU5JU1REX0guKiBtYXkgYmUvcy9kZWYgSEFWRV9VTklTVERfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAogICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAotICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gWWVzLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIE5vLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHN0ZGFyZy5oIGFuZCBzYXZlIHJlc3VsdCBpbiB6Y29uZi5oCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkYXJnLmg+CitpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgc2VkIDwgemNvbmYuaCAiL14jaWZkZWYgSEFWRV9TVERBUkdfSC4qIG1heSBiZS9zL2RlZiBIQVZFX1NUREFSR19IXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdGRhcmcuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdGRhcmcuaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2ZpCisKKyMgaWYgdGhlIHpfIHByZWZpeCB3YXMgcmVxdWVzdGVkLCBzYXZlIHRoYXQgaW4gemNvbmYuaAogaWYgdGVzdCAkenByZWZpeCAtZXEgMTsgdGhlbgogICBzZWQgPCB6Y29uZi5oICIvI2lmZGVmIFpfUFJFRklYLiogbWF5IGJlL3MvZGVmIFpfUFJFRklYXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCiAgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCi0gIGVjaG8gIlVzaW5nIHpfIHByZWZpeCBvbiBhbGwgc3ltYm9scy4iCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBlY2hvICJVc2luZyB6XyBwcmVmaXggb24gYWxsIHN5bWJvbHMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBmaQogCisjIGlmIC0tc29sbyBjb21waWxhdGlvbiB3YXMgcmVxdWVzdGVkLCBzYXZlIHRoYXQgaW4gemNvbmYuaCBhbmQgcmVtb3ZlIGd6IHN0dWZmIGZyb20gb2JqZWN0IGxpc3RzCitpZiB0ZXN0ICRzb2xvIC1lcSAxOyB0aGVuCisgIHNlZCAnLyNkZWZpbmUgWkNPTkZfSC9hXAorI2RlZmluZSBaX1NPTE8KKworJyA8IHpjb25mLmggPiB6Y29uZi50ZW1wLmgKKyAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKK09CSkM9JyQoT0JKWiknCitQSUNfT0JKQz0nJChQSUNfT0JKWiknCitmaQorCisjIGlmIGNvZGUgY292ZXJhZ2UgdGVzdGluZyB3YXMgcmVxdWVzdGVkLCB1c2Ugb2xkZXIgZ2NjIGlmIGRlZmluZWQsIGUuZy4gImdjYy00LjIiIG9uIE1hYyBPUyBYCitpZiB0ZXN0ICRjb3ZlciAtZXEgMTsgdGhlbgorICBDRkxBR1M9IiR7Q0ZMQUdTfSAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisgIGlmIHRlc3QgLW4gIiRHQ0NfQ0xBU1NJQyI7IHRoZW4KKyAgICBDQz0kR0NDX0NMQVNTSUMKKyAgZmkKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNvbmR1Y3QgYSBzZXJpZXMgb2YgdGVzdHMgdG8gcmVzb2x2ZSBlaWdodCBwb3NzaWJsZSBjYXNlcyBvZiB1c2luZyAidnMiIG9yICJzIiBwcmludGYgZnVuY3Rpb25zCisjICh1c2luZyBzdGRhcmcgb3Igbm90KSwgd2l0aCBvciB3aXRob3V0ICJuIiAocHJvdmluZyBzaXplIG9mIGJ1ZmZlciksIGFuZCB3aXRoIG9yIHdpdGhvdXQgYQorIyByZXR1cm4gdmFsdWUuICBUaGUgbW9zdCBzZWN1cmUgcmVzdWx0IGlzIHZzbnByaW50ZigpIHdpdGggYSByZXR1cm4gdmFsdWUuICBzbnByaW50ZigpIHdpdGggYQorIyByZXR1cm4gdmFsdWUgaXMgc2VjdXJlIGFzIHdlbGwsIGJ1dCB0aGVuIGd6cHJpbnRmKCkgd2lsbCBiZSBsaW1pdGVkIHRvIDIwIGFyZ3VtZW50cy4KIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInpjb25mLmgiCi0KIGludCBtYWluKCkKIHsKICNpZm5kZWYgU1REQwogICBjaG9rZSBtZQogI2VuZGlmCi0KICAgcmV0dXJuIDA7CiB9CiBFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgdnNbbl1wcmludGYoKS4iCi0KKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBjaGFyIGJ1ZlsyMF07CiAgIHZhX2xpc3QgYXA7Ci0KICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJuIDA7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKIH0KIEVPRgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAotICBpZiB0ZXN0ICJgKCRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIKLQorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0KIGludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGludCBuOwogICBjaGFyIGJ1ZlsyMF07CiAgIHZhX2xpc3QgYXA7Ci0KICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgIG4gPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiBuOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3ZzbnByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzbnByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGVsc2UKICAgICBDRkxBR1M9IiRDRkxBR1MgLUROT192c25wcmludGYiCiAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fdnNucHJpbnRmIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIKLSAgICBlY2hvICIgIFdBUk5JTkc6IHZzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHZzcHJpbnRmKCkuIHpsaWIiCi0gICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiCi0gICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgV0FSTklORzogdnNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdnNwcmludGYoKS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICBuID0gdnNwcmludGYoYnVmLCBmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJuIG47CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfdnNwcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGZpCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHNbbl1wcmludGYoKS4iCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHNbbl1wcmludGYoKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogaW50IG15dGVzdCgpCiB7CiAgIGNoYXIgYnVmWzIwXTsKLQogICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCAiZm9vIik7CiAgIHJldHVybiAwOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICJmb28iKTsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGVsc2UKICAgICBDRkxBR1M9IiRDRkxBR1MgLUROT19zbnByaW50ZiIKICAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19zbnByaW50ZiIKLSAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIKLSAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIgotICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgotICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgV0FSTklORzogc25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBzcHJpbnRmKCkuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogaW50IG15dGVzdCgpCiB7CiAgIGNoYXIgYnVmWzIwXTsKLQogICByZXR1cm4gc3ByaW50ZihidWYsICIlcyIsICJmb28iKTsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU19zcHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBmaQogZmkKIAorIyBzZWUgaWYgd2UgY2FuIGhpZGUgemxpYiBpbnRlcm5hbCBzeW1ib2xzIHRoYXQgYXJlIGxpbmtlZCBiZXR3ZWVuIHNlcGFyYXRlIHNvdXJjZSBmaWxlcwogaWYgdGVzdCAiJGdjYyIgLWVxIDE7IHRoZW4KKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKLSNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKQotIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKLSNlbHNlCi0jICBkZWZpbmUgWkxJQl9JTlRFUk5BTAotI2VuZGlmCisjZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKIGludCBaTElCX0lOVEVSTkFMIGZvbzsKIGludCBtYWluKCkKIHsKICAgcmV0dXJuIDA7CiB9CiBFT0YKLSAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBZZXMuIgorICBpZiB0cnlib3RoICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0hJRERFTiIKKyAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVZFX0hJRERFTiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBlbHNlCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fVklaIgotICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX1ZJWiIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gTm8uIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZmkKIGZpCiAKLUNQUD0ke0NQUC0iJENDIC1FIn0KLWNhc2UgJENGTEFHUyBpbgotICAqQVNNViopCi0gICAgaWYgdGVzdCAiYCROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG9gIiA9ICIiOyB0aGVuCi0gICAgICBDUFA9IiRDUFAgLUROT19VTkRFUkxJTkUiCi0gICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gTm8uCi0gICAgZWxzZQotICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFllcy4KLSAgICBmaSA7OwotZXNhYworIyBzaG93IHRoZSByZXN1bHRzIGluIHRoZSBsb2cKK2VjaG8gPj4gY29uZmlndXJlLmxvZworZWNobyBBTEwgPSAkQUxMID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQVIgPSAkQVIgPj4gY29uZmlndXJlLmxvZworZWNobyBBUkZMQUdTID0gJEFSRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBDQyA9ICRDQyA+PiBjb25maWd1cmUubG9nCitlY2hvIENGTEFHUyA9ICRDRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBDUFAgPSAkQ1BQID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gRVhFID0gJEVYRSA+PiBjb25maWd1cmUubG9nCitlY2hvIExEQ09ORklHID0gJExEQ09ORklHID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERGTEFHUyA9ICRMREZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERTSEFSRUQgPSAkTERTSEFSRUQgPj4gY29uZmlndXJlLmxvZworZWNobyBMRFNIQVJFRExJQkMgPSAkTERTSEFSRURMSUJDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gT0JKQyA9ICRPQkpDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gUElDX09CSkMgPSAkUElDX09CSkMgPj4gY29uZmlndXJlLmxvZworZWNobyBSQU5MSUIgPSAkUkFOTElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0ZMQUdTID0gJFNGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIFNIQVJFRExJQiA9ICRTSEFSRURMSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUJNID0gJFNIQVJFRExJQk0gPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUJWID0gJFNIQVJFRExJQlYgPj4gY29uZmlndXJlLmxvZworZWNobyBTVEFUSUNMSUIgPSAkU1RBVElDTElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gVEVTVCA9ICRURVNUID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gVkVSID0gJFZFUiA+PiBjb25maWd1cmUubG9nCitlY2hvIFpfVTQgPSAkWl9VNCA+PiBjb25maWd1cmUubG9nCitlY2hvIGV4ZWNfcHJlZml4ID0gJGV4ZWNfcHJlZml4ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gaW5jbHVkZWRpciA9ICRpbmNsdWRlZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gbGliZGlyID0gJGxpYmRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIG1hbmRpciA9ICRtYW5kaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBwcmVmaXggPSAkcHJlZml4ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gc2hhcmVkbGliZGlyID0gJHNoYXJlZGxpYmRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIHVuYW1lID0gJHVuYW1lID4+IGNvbmZpZ3VyZS5sb2cKIAotcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0Ci0KLSMgdWRwYXRlIE1ha2VmaWxlCisjIHVkcGF0ZSBNYWtlZmlsZSB3aXRoIHRoZSBjb25maWd1cmUgcmVzdWx0cwogc2VkIDwgTWFrZWZpbGUuaW4gIgogL15DQyAqPS9zIz0uKiM9JENDIwogL15DRkxBR1MgKj0vcyM9LiojPSRDRkxBR1MjCkBAIC01NTcsNyArNzg0LDggQEAKIC9eU0hBUkVETElCICo9L3MjPS4qIz0kU0hBUkVETElCIwogL15TSEFSRURMSUJWICo9L3MjPS4qIz0kU0hBUkVETElCViMKIC9eU0hBUkVETElCTSAqPS9zIz0uKiM9JFNIQVJFRExJQk0jCi0vXkFSICo9L3MjPS4qIz0kQVJfUkMjCisvXkFSICo9L3MjPS4qIz0kQVIjCisvXkFSRkxBR1MgKj0vcyM9LiojPSRBUkZMQUdTIwogL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCiAvXkxEQ09ORklHICo9L3MjPS4qIz0kTERDT05GSUcjCiAvXkxEU0hBUkVETElCQyAqPS9zIz0uKiM9JExEU0hBUkVETElCQyMKQEAgLTU2OCwxMCArNzk2LDEzIEBACiAvXnNoYXJlZGxpYmRpciAqPS9zIz0uKiM9JHNoYXJlZGxpYmRpciMKIC9eaW5jbHVkZWRpciAqPS9zIz0uKiM9JGluY2x1ZGVkaXIjCiAvXm1hbmRpciAqPS9zIz0uKiM9JG1hbmRpciMKKy9eT0JKQyAqPS9zIz0uKiM9ICRPQkpDIworL15QSUNfT0JKQyAqPS9zIz0uKiM9ICRQSUNfT0JKQyMKIC9eYWxsOiAqL3MjOi4qIzogJEFMTCMKIC9edGVzdDogKi9zIzouKiM6ICRURVNUIwogIiA+IE1ha2VmaWxlCiAKKyMgY3JlYXRlIHpsaWIucGMgd2l0aCB0aGUgY29uZmlndXJlIHJlc3VsdHMKIHNlZCA8IHpsaWIucGMuaW4gIgogL15DQyAqPS9zIz0uKiM9JENDIwogL15DRkxBR1MgKj0vcyM9LiojPSRDRkxBR1MjCkBAIC01ODEsNyArODEyLDggQEAKIC9eU0hBUkVETElCICo9L3MjPS4qIz0kU0hBUkVETElCIwogL15TSEFSRURMSUJWICo9L3MjPS4qIz0kU0hBUkVETElCViMKIC9eU0hBUkVETElCTSAqPS9zIz0uKiM9JFNIQVJFRExJQk0jCi0vXkFSICo9L3MjPS4qIz0kQVJfUkMjCisvXkFSICo9L3MjPS4qIz0kQVIjCisvXkFSRkxBR1MgKj0vcyM9LiojPSRBUkZMQUdTIwogL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCiAvXkVYRSAqPS9zIz0uKiM9JEVYRSMKIC9ecHJlZml4ICo9L3MjPS4qIz0kcHJlZml4IwpAQCAtNTk0LDMgKzgyNiw2IEBACiAiIHwgc2VkIC1lICIKIHMvXEBWRVJTSU9OXEAvJFZFUi9nOwogIiA+IHpsaWIucGMKKworIyBkb25lCitsZWF2ZSAwCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY3JjMzIuYyBiL01vZHVsZXMvemxpYi9jcmMzMi5jCmluZGV4IDkxYmUzNzIuLjk3OWE3MTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jcmMzMi5jCisrKyBiL01vZHVsZXMvemxpYi9jcmMzMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogY3JjMzIuYyAtLSBjb21wdXRlIHRoZSBDUkMtMzIgb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAsIDIwMTEsIDIwMTIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICoKICAqIFRoYW5rcyB0byBSb2RuZXkgQnJvd24gPHJicm93bjY0QGNzYy5jb20uYXU+IGZvciBoaXMgY29udHJpYnV0aW9uIG9mIGZhc3RlcgpAQCAtMTcsNiArMTcsOCBAQAogICBvZiB0aGUgY3JjIHRhYmxlcy4gIFRoZXJlZm9yZSwgaWYgeW91ICNkZWZpbmUgRFlOQU1JQ19DUkNfVEFCTEUsIHlvdSBzaG91bGQKICAgZmlyc3QgY2FsbCBnZXRfY3JjX3RhYmxlKCkgdG8gaW5pdGlhbGl6ZSB0aGUgdGFibGVzIGJlZm9yZSBhbGxvd2luZyBtb3JlIHRoYW4KICAgb25lIHRocmVhZCB0byB1c2UgY3JjMzIoKS4KKworICBEWU5BTUlDX0NSQ19UQUJMRSBhbmQgTUFLRUNSQ0ggY2FuIGJlICNkZWZpbmVkIHRvIHdyaXRlIG91dCBjcmMzMi5oLgogICovCiAKICNpZmRlZiBNQUtFQ1JDSApAQCAtMzAsMzEgKzMyLDExIEBACiAKICNkZWZpbmUgbG9jYWwgc3RhdGljCiAKLS8qIEZpbmQgYSBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlIGZvciBjcmMzMl9saXR0bGUoKSBhbmQgY3JjMzJfYmlnKCkuICovCi0jaWZuZGVmIE5PQllGT1VSCi0jICBpZmRlZiBTVERDICAgICAgICAgICAvKiBuZWVkIEFOU0kgQyBsaW1pdHMuaCB0byBkZXRlcm1pbmUgc2l6ZXMgKi8KLSMgICAgaW5jbHVkZSA8bGltaXRzLmg+Ci0jICAgIGRlZmluZSBCWUZPVVIKLSMgICAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCB1NDsKLSMgICAgZWxzZQotIyAgICAgIGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHU0OwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHU0OwotIyAgICAgICAgZWxzZQotIyAgICAgICAgICB1bmRlZiBCWUZPVVIgICAgIC8qIGNhbid0IGZpbmQgYSBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlISAqLwotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYgLyogU1REQyAqLwotI2VuZGlmIC8qICFOT0JZRk9VUiAqLwotCiAvKiBEZWZpbml0aW9ucyBmb3IgZG9pbmcgdGhlIGNyYyBmb3VyIGRhdGEgYnl0ZXMgYXQgYSB0aW1lLiAqLworI2lmICFkZWZpbmVkKE5PQllGT1VSKSAmJiBkZWZpbmVkKFpfVTQpCisjICBkZWZpbmUgQllGT1VSCisjZW5kaWYKICNpZmRlZiBCWUZPVVIKLSMgIGRlZmluZSBSRVYodykgKCgoKHcpPj4yNCkmMHhmZikrKCgodyk+PjgpJjB4ZmYwMCkrIFwKLSAgICAgICAgICAgICAgICAoKCh3KSYweGZmMDApPDw4KSsoKCh3KSYweGZmKTw8MjQpKQogICAgbG9jYWwgdW5zaWduZWQgbG9uZyBjcmMzMl9saXR0bGUgT0YoKHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqLCB1bnNpZ25lZCkpOwogICAgbG9jYWwgdW5zaWduZWQgbG9uZyBjcmMzMl9iaWcgT0YoKHVuc2lnbmVkIGxvbmcsCkBAIC02OCwxNiArNTAsMTYgQEAKIGxvY2FsIHVuc2lnbmVkIGxvbmcgZ2YyX21hdHJpeF90aW1lcyBPRigodW5zaWduZWQgbG9uZyAqbWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZlYykpOwogbG9jYWwgdm9pZCBnZjJfbWF0cml4X3NxdWFyZSBPRigodW5zaWduZWQgbG9uZyAqc3F1YXJlLCB1bnNpZ25lZCBsb25nICptYXQpKTsKLWxvY2FsIHVMb25nIGNyYzMyX2NvbWJpbmVfKHVMb25nIGNyYzEsIHVMb25nIGNyYzIsIHpfb2ZmNjRfdCBsZW4yKTsKK2xvY2FsIHVMb25nIGNyYzMyX2NvbWJpbmVfIE9GKCh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0X3QgbGVuMikpOwogCiAKICNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQogCiBsb2NhbCB2b2xhdGlsZSBpbnQgY3JjX3RhYmxlX2VtcHR5ID0gMTsKLWxvY2FsIHVuc2lnbmVkIGxvbmcgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdOworbG9jYWwgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl07CiBsb2NhbCB2b2lkIG1ha2VfY3JjX3RhYmxlIE9GKCh2b2lkKSk7CiAjaWZkZWYgTUFLRUNSQ0gKLSAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKikpOworICAgbG9jYWwgdm9pZCB3cml0ZV90YWJsZSBPRigoRklMRSAqLCBjb25zdCB6X2NyY190IEZBUiAqKSk7CiAjZW5kaWYgLyogTUFLRUNSQ0ggKi8KIC8qCiAgIEdlbmVyYXRlIHRhYmxlcyBmb3IgYSBieXRlLXdpc2UgMzItYml0IENSQyBjYWxjdWxhdGlvbiBvbiB0aGUgcG9seW5vbWlhbDoKQEAgLTEwNyw5ICs4OSw5IEBACiAqLwogbG9jYWwgdm9pZCBtYWtlX2NyY190YWJsZSgpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBjOworICAgIHpfY3JjX3QgYzsKICAgICBpbnQgbiwgazsKLSAgICB1bnNpZ25lZCBsb25nIHBvbHk7ICAgICAgICAgICAgICAgICAvKiBwb2x5bm9taWFsIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuICovCisgICAgel9jcmNfdCBwb2x5OyAgICAgICAgICAgICAgICAgICAgICAgLyogcG9seW5vbWlhbCBleGNsdXNpdmUtb3IgcGF0dGVybiAqLwogICAgIC8qIHRlcm1zIG9mIHBvbHlub21pYWwgZGVmaW5pbmcgdGhpcyBjcmMgKGV4Y2VwdCB4XjMyKTogKi8KICAgICBzdGF0aWMgdm9sYXRpbGUgaW50IGZpcnN0ID0gMTsgICAgICAvKiBmbGFnIHRvIGxpbWl0IGNvbmN1cnJlbnQgbWFraW5nICovCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0gezAsMSwyLDQsNSw3LDgsMTAsMTEsMTIsMTYsMjIsMjMsMjZ9OwpAQCAtMTIxLDEzICsxMDMsMTMgQEAKICAgICAgICAgZmlyc3QgPSAwOwogCiAgICAgICAgIC8qIG1ha2UgZXhjbHVzaXZlLW9yIHBhdHRlcm4gZnJvbSBwb2x5bm9taWFsICgweGVkYjg4MzIwVUwpICovCi0gICAgICAgIHBvbHkgPSAwVUw7Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2YocCkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOyBuKyspCi0gICAgICAgICAgICBwb2x5IHw9IDFVTCA8PCAoMzEgLSBwW25dKTsKKyAgICAgICAgcG9seSA9IDA7CisgICAgICAgIGZvciAobiA9IDA7IG4gPCAoaW50KShzaXplb2YocCkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsgbisrKQorICAgICAgICAgICAgcG9seSB8PSAoel9jcmNfdCkxIDw8ICgzMSAtIHBbbl0pOwogCiAgICAgICAgIC8qIGdlbmVyYXRlIGEgY3JjIGZvciBldmVyeSA4LWJpdCB2YWx1ZSAqLwogICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspIHsKLSAgICAgICAgICAgIGMgPSAodW5zaWduZWQgbG9uZyluOworICAgICAgICAgICAgYyA9ICh6X2NyY190KW47CiAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgODsgaysrKQogICAgICAgICAgICAgICAgIGMgPSBjICYgMSA/IHBvbHkgXiAoYyA+PiAxKSA6IGMgPj4gMTsKICAgICAgICAgICAgIGNyY190YWJsZVswXVtuXSA9IGM7CkBAIC0xMzgsMTEgKzEyMCwxMSBAQAogICAgICAgICAgICBhbmQgdGhlbiB0aGUgYnl0ZSByZXZlcnNhbCBvZiB0aG9zZSBhcyB3ZWxsIGFzIHRoZSBmaXJzdCB0YWJsZSAqLwogICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspIHsKICAgICAgICAgICAgIGMgPSBjcmNfdGFibGVbMF1bbl07Ci0gICAgICAgICAgICBjcmNfdGFibGVbNF1bbl0gPSBSRVYoYyk7CisgICAgICAgICAgICBjcmNfdGFibGVbNF1bbl0gPSBaU1dBUDMyKGMpOwogICAgICAgICAgICAgZm9yIChrID0gMTsgayA8IDQ7IGsrKykgewogICAgICAgICAgICAgICAgIGMgPSBjcmNfdGFibGVbMF1bYyAmIDB4ZmZdIF4gKGMgPj4gOCk7CiAgICAgICAgICAgICAgICAgY3JjX3RhYmxlW2tdW25dID0gYzsKLSAgICAgICAgICAgICAgICBjcmNfdGFibGVbayArIDRdW25dID0gUkVWKGMpOworICAgICAgICAgICAgICAgIGNyY190YWJsZVtrICsgNF1bbl0gPSBaU1dBUDMyKGMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYgLyogQllGT1VSICovCkBAIC0xNjQsNyArMTQ2LDcgQEAKICAgICAgICAgaWYgKG91dCA9PSBOVUxMKSByZXR1cm47CiAgICAgICAgIGZwcmludGYob3V0LCAiLyogY3JjMzIuaCAtLSB0YWJsZXMgZm9yIHJhcGlkIENSQyBjYWxjdWxhdGlvblxuIik7CiAgICAgICAgIGZwcmludGYob3V0LCAiICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY3JjMzIuY1xuICovXG5cbiIpOwotICAgICAgICBmcHJpbnRmKG91dCwgImxvY2FsIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICIpOworICAgICAgICBmcHJpbnRmKG91dCwgImxvY2FsIGNvbnN0IHpfY3JjX3QgRkFSICIpOwogICAgICAgICBmcHJpbnRmKG91dCwgImNyY190YWJsZVtUQkxTXVsyNTZdID1cbntcbiAge1xuIik7CiAgICAgICAgIHdyaXRlX3RhYmxlKG91dCwgY3JjX3RhYmxlWzBdKTsKICMgIGlmZGVmIEJZRk9VUgpAQCAtMTg0LDEyICsxNjYsMTMgQEAKICNpZmRlZiBNQUtFQ1JDSAogbG9jYWwgdm9pZCB3cml0ZV90YWJsZShvdXQsIHRhYmxlKQogICAgIEZJTEUgKm91dDsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqdGFibGU7CisgICAgY29uc3Qgel9jcmNfdCBGQVIgKnRhYmxlOwogewogICAgIGludCBuOwogCiAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKQotICAgICAgICBmcHJpbnRmKG91dCwgIiVzMHglMDhseFVMJXMiLCBuICUgNSA/ICIiIDogIiAgICAiLCB0YWJsZVtuXSwKKyAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTA4bHhVTCVzIiwgbiAlIDUgPyAiIiA6ICIgICAgIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykodGFibGVbbl0pLAogICAgICAgICAgICAgICAgIG4gPT0gMjU1ID8gIlxuIiA6IChuICUgNSA9PSA0ID8gIixcbiIgOiAiLCAiKSk7CiB9CiAjZW5kaWYgLyogTUFLRUNSQ0ggKi8KQEAgLTIwNCwxMyArMTg3LDEzIEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGFzbSB2ZXJzaW9ucyBvZiBjcmMzMigpCiAgKi8KLWNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlKCkKK2NvbnN0IHpfY3JjX3QgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlKCkKIHsKICNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQogICAgIGlmIChjcmNfdGFibGVfZW1wdHkpCiAgICAgICAgIG1ha2VfY3JjX3RhYmxlKCk7CiAjZW5kaWYgLyogRFlOQU1JQ19DUkNfVEFCTEUgKi8KLSAgICByZXR1cm4gKGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICopY3JjX3RhYmxlOworICAgIHJldHVybiAoY29uc3Qgel9jcmNfdCBGQVIgKiljcmNfdGFibGU7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTIzMiw3ICsyMTUsNyBAQAogCiAjaWZkZWYgQllGT1VSCiAgICAgaWYgKHNpemVvZih2b2lkICopID09IHNpemVvZihwdHJkaWZmX3QpKSB7Ci0gICAgICAgIHU0IGVuZGlhbjsKKyAgICAgICAgel9jcmNfdCBlbmRpYW47CiAKICAgICAgICAgZW5kaWFuID0gMTsKICAgICAgICAgaWYgKCooKHVuc2lnbmVkIGNoYXIgKikoJmVuZGlhbikpKQpAQCAtMjY2LDE3ICsyNDksMTcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogICAgIHVuc2lnbmVkIGxlbjsKIHsKLSAgICByZWdpc3RlciB1NCBjOwotICAgIHJlZ2lzdGVyIGNvbnN0IHU0IEZBUiAqYnVmNDsKKyAgICByZWdpc3RlciB6X2NyY190IGM7CisgICAgcmVnaXN0ZXIgY29uc3Qgel9jcmNfdCBGQVIgKmJ1ZjQ7CiAKLSAgICBjID0gKHU0KWNyYzsKKyAgICBjID0gKHpfY3JjX3QpY3JjOwogICAgIGMgPSB+YzsKICAgICB3aGlsZSAobGVuICYmICgocHRyZGlmZl90KWJ1ZiAmIDMpKSB7CiAgICAgICAgIGMgPSBjcmNfdGFibGVbMF1bKGMgXiAqYnVmKyspICYgMHhmZl0gXiAoYyA+PiA4KTsKICAgICAgICAgbGVuLS07CiAgICAgfQogCi0gICAgYnVmNCA9IChjb25zdCB1NCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CisgICAgYnVmNCA9IChjb25zdCB6X2NyY190IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKICAgICB3aGlsZSAobGVuID49IDMyKSB7CiAgICAgICAgIERPTElUMzI7CiAgICAgICAgIGxlbiAtPSAzMjsKQEAgLTMwNiwxNyArMjg5LDE3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKICAgICB1bnNpZ25lZCBsZW47CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNvbnN0IHpfY3JjX3QgRkFSICpidWY0OwogCi0gICAgYyA9IFJFVigodTQpY3JjKTsKKyAgICBjID0gWlNXQVAzMigoel9jcmNfdCljcmMpOwogICAgIGMgPSB+YzsKICAgICB3aGlsZSAobGVuICYmICgocHRyZGlmZl90KWJ1ZiAmIDMpKSB7CiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChjIDw8IDgpOwogICAgICAgICBsZW4tLTsKICAgICB9CiAKLSAgICBidWY0ID0gKGNvbnN0IHU0IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKKyAgICBidWY0ID0gKGNvbnN0IHpfY3JjX3QgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOwogICAgIGJ1ZjQtLTsKICAgICB3aGlsZSAobGVuID49IDMyKSB7CiAgICAgICAgIERPQklHMzI7CkBAIC0zMzMsNyArMzE2LDcgQEAKICAgICAgICAgYyA9IGNyY190YWJsZVs0XVsoYyA+PiAyNCkgXiAqYnVmKytdIF4gKGMgPDwgOCk7CiAgICAgfSB3aGlsZSAoLS1sZW4pOwogICAgIGMgPSB+YzsKLSAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpKFJFVihjKSk7CisgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShaU1dBUDMyKGMpKTsKIH0KIAogI2VuZGlmIC8qIEJZRk9VUiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NyYzMyLmggYi9Nb2R1bGVzL3psaWIvY3JjMzIuaAppbmRleCA4MDUzYjYxLi45ZTBjNzc4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY3JjMzIuaAorKysgYi9Nb2R1bGVzL3psaWIvY3JjMzIuaApAQCAtMiw3ICsyLDcgQEAKICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNyYzMyLmMKICAqLwogCi1sb2NhbCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XSA9Citsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XSA9CiB7CiAgIHsKICAgICAweDAwMDAwMDAwVUwsIDB4NzcwNzMwOTZVTCwgMHhlZTBlNjEyY1VMLCAweDk5MDk1MWJhVUwsIDB4MDc2ZGM0MTlVTCwKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmMgYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCmluZGV4IGJjZWY2N2MuLjY5Njk1NzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuYyAtLSBjb21wcmVzcyBkYXRhIHVzaW5nIHRoZSBkZWZsYXRpb24gYWxnb3JpdGhtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMzcsNyArMzcsNyBAQAogICogIFJFRkVSRU5DRVMKICAqCiAgKiAgICAgIERldXRzY2gsIEwuUC4sIkRFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uIi4KLSAqICAgICAgQXZhaWxhYmxlIGluIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CisgKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCiAgKgogICogICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoZSBSYWJpbiBhbmQgS2FycCBhbGdvcml0aG0gaXMgZ2l2ZW4gaW4gdGhlIGJvb2sKICAqICAgICAgICAgIkFsZ29yaXRobXMiIGJ5IFIuIFNlZGdld2ljaywgQWRkaXNvbi1XZXNsZXksIHAyNTIuCkBAIC01Miw3ICs1Miw3IEBACiAjaW5jbHVkZSAiZGVmbGF0ZS5oIgogCiBjb25zdCBjaGFyIGRlZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBkZWZsYXRlIDEuMi41IENvcHlyaWdodCAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciAiOworICAgIiBkZWZsYXRlIDEuMi44IENvcHlyaWdodCAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciAiOwogLyoKICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CkBAIC0xNTUsOSArMTU1LDEyIEBACiBzdHJ1Y3Qgc3RhdGljX3RyZWVfZGVzY19zIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2VuZGlmCiAKKy8qIHJhbmsgWl9CTE9DSyBiZXR3ZWVuIFpfTk9fRkxVU0ggYW5kIFpfUEFSVElBTF9GTFVTSCAqLworI2RlZmluZSBSQU5LKGYpICgoKGYpIDw8IDEpIC0gKChmKSA+IDQgPyA5IDogMCkpCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVXBkYXRlIGEgaGFzaCB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBpbnB1dCBieXRlCi0gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gVVBEQVRFX0hBU0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQorICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIHRvIFVQREFURV9IQVNIIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMsIHNvIHRoYXQgYSBydW5uaW5nIGhhc2gga2V5IGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZQogICogICAgcHJldmlvdXMga2V5IGluc3RlYWQgb2YgY29tcGxldGUgcmVjYWxjdWxhdGlvbiBlYWNoIHRpbWUuCiAgKi8KQEAgLTE3MCw3ICsxNzMsNyBAQAogICogdGhlIHByZXZpb3VzIGxlbmd0aCBvZiB0aGUgaGFzaCBjaGFpbi4KICAqIElmIHRoaXMgZmlsZSBpcyBjb21waWxlZCB3aXRoIC1ERkFTVEVTVCwgdGhlIGNvbXByZXNzaW9uIGxldmVsIGlzIGZvcmNlZAogICogdG8gMSwgYW5kIG5vIGhhc2ggY2hhaW5zIGFyZSBtYWludGFpbmVkLgotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIElOU0VSVF9TVFJJTkcgYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQorICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIHRvIElOU0VSVF9TVFJJTkcgYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQogICogICAgaW5wdXQgY2hhcmFjdGVycyBhbmQgdGhlIGZpcnN0IE1JTl9NQVRDSCBieXRlcyBvZiBzdHIgYXJlIHZhbGlkCiAgKiAgICAoZXhjZXB0IGZvciB0aGUgbGFzdCBNSU5fTUFUQ0gtMSBieXRlcyBvZiB0aGUgaW5wdXQgZmlsZSkuCiAgKi8KQEAgLTIzNSwxMCArMjM4LDE5IEBACiAKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7CiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgICAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgogCiAjaWZkZWYgRkFTVEVTVAogICAgIGlmIChsZXZlbCAhPSAwKSBsZXZlbCA9IDE7CkBAIC0yOTMsNyArMzA1LDcgQEAKICAgICBpZiAocy0+d2luZG93ID09IFpfTlVMTCB8fCBzLT5wcmV2ID09IFpfTlVMTCB8fCBzLT5oZWFkID09IFpfTlVMTCB8fAogICAgICAgICBzLT5wZW5kaW5nX2J1ZiA9PSBaX05VTEwpIHsKICAgICAgICAgcy0+c3RhdHVzID0gRklOSVNIX1NUQVRFOwotICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciopRVJSX01TRyhaX01FTV9FUlJPUik7CisgICAgICAgIHN0cm0tPm1zZyA9IEVSUl9NU0coWl9NRU1fRVJST1IpOwogICAgICAgICBkZWZsYXRlRW5kIChzdHJtKTsKICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIH0KQEAgLTMxNCw0MyArMzI2LDcwIEBACiAgICAgdUludCAgZGljdExlbmd0aDsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIHVJbnQgbGVuZ3RoID0gZGljdExlbmd0aDsKLSAgICB1SW50IG47Ci0gICAgSVBvcyBoYXNoX2hlYWQgPSAwOworICAgIHVJbnQgc3RyLCBuOworICAgIGludCB3cmFwOworICAgIHVuc2lnbmVkIGF2YWlsOworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciAqbmV4dDsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwgfHwKLSAgICAgICAgc3RybS0+c3RhdGUtPndyYXAgPT0gMiB8fAotICAgICAgICAoc3RybS0+c3RhdGUtPndyYXAgPT0gMSAmJiBzdHJtLT5zdGF0ZS0+c3RhdHVzICE9IElOSVRfU1RBVEUpKQorICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgd3JhcCA9IHMtPndyYXA7CisgICAgaWYgKHdyYXAgPT0gMiB8fCAod3JhcCA9PSAxICYmIHMtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSB8fCBzLT5sb29rYWhlYWQpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAgIHMgPSBzdHJtLT5zdGF0ZTsKLSAgICBpZiAocy0+d3JhcCkKKyAgICAvKiB3aGVuIHVzaW5nIHpsaWIgd3JhcHBlcnMsIGNvbXB1dGUgQWRsZXItMzIgZm9yIHByb3ZpZGVkIGRpY3Rpb25hcnkgKi8KKyAgICBpZiAod3JhcCA9PSAxKQogICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOworICAgIHMtPndyYXAgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogYXZvaWQgY29tcHV0aW5nIEFkbGVyLTMyIGluIHJlYWRfYnVmICovCiAKLSAgICBpZiAobGVuZ3RoIDwgTUlOX01BVENIKSByZXR1cm4gWl9PSzsKLSAgICBpZiAobGVuZ3RoID4gcy0+d19zaXplKSB7Ci0gICAgICAgIGxlbmd0aCA9IHMtPndfc2l6ZTsKLSAgICAgICAgZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gbGVuZ3RoOyAvKiB1c2UgdGhlIHRhaWwgb2YgdGhlIGRpY3Rpb25hcnkgKi8KKyAgICAvKiBpZiBkaWN0aW9uYXJ5IHdvdWxkIGZpbGwgd2luZG93LCBqdXN0IHJlcGxhY2UgdGhlIGhpc3RvcnkgKi8KKyAgICBpZiAoZGljdExlbmd0aCA+PSBzLT53X3NpemUpIHsKKyAgICAgICAgaWYgKHdyYXAgPT0gMCkgeyAgICAgICAgICAgIC8qIGFscmVhZHkgZW1wdHkgb3RoZXJ3aXNlICovCisgICAgICAgICAgICBDTEVBUl9IQVNIKHMpOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOworICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gcy0+d19zaXplOyAgLyogdXNlIHRoZSB0YWlsICovCisgICAgICAgIGRpY3RMZW5ndGggPSBzLT53X3NpemU7CiAgICAgfQotICAgIHptZW1jcHkocy0+d2luZG93LCBkaWN0aW9uYXJ5LCBsZW5ndGgpOwotICAgIHMtPnN0cnN0YXJ0ID0gbGVuZ3RoOwotICAgIHMtPmJsb2NrX3N0YXJ0ID0gKGxvbmcpbGVuZ3RoOwogCi0gICAgLyogSW5zZXJ0IGFsbCBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIChleGNlcHQgZm9yIHRoZSBsYXN0IHR3byBieXRlcykuCi0gICAgICogcy0+bG9va2FoZWFkIHN0YXlzIG51bGwsIHNvIHMtPmluc19oIHdpbGwgYmUgcmVjb21wdXRlZCBhdCB0aGUgbmV4dAotICAgICAqIGNhbGwgb2YgZmlsbF93aW5kb3cuCi0gICAgICovCi0gICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbMF07Ci0gICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1sxXSk7Ci0gICAgZm9yIChuID0gMDsgbiA8PSBsZW5ndGggLSBNSU5fTUFUQ0g7IG4rKykgewotICAgICAgICBJTlNFUlRfU1RSSU5HKHMsIG4sIGhhc2hfaGVhZCk7CisgICAgLyogaW5zZXJ0IGRpY3Rpb25hcnkgaW50byB3aW5kb3cgYW5kIGhhc2ggKi8KKyAgICBhdmFpbCA9IHN0cm0tPmF2YWlsX2luOworICAgIG5leHQgPSBzdHJtLT5uZXh0X2luOworICAgIHN0cm0tPmF2YWlsX2luID0gZGljdExlbmd0aDsKKyAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilkaWN0aW9uYXJ5OworICAgIGZpbGxfd2luZG93KHMpOworICAgIHdoaWxlIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CisgICAgICAgIHN0ciA9IHMtPnN0cnN0YXJ0OworICAgICAgICBuID0gcy0+bG9va2FoZWFkIC0gKE1JTl9NQVRDSC0xKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOworI2lmbmRlZiBGQVNURVNUCisgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10gPSBzLT5oZWFkW3MtPmluc19oXTsKKyNlbmRpZgorICAgICAgICAgICAgcy0+aGVhZFtzLT5pbnNfaF0gPSAoUG9zKXN0cjsKKyAgICAgICAgICAgIHN0cisrOworICAgICAgICB9IHdoaWxlICgtLW4pOworICAgICAgICBzLT5zdHJzdGFydCA9IHN0cjsKKyAgICAgICAgcy0+bG9va2FoZWFkID0gTUlOX01BVENILTE7CisgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgIH0KLSAgICBpZiAoaGFzaF9oZWFkKSBoYXNoX2hlYWQgPSAwOyAgLyogdG8gbWFrZSBjb21waWxlciBoYXBweSAqLworICAgIHMtPnN0cnN0YXJ0ICs9IHMtPmxvb2thaGVhZDsKKyAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKXMtPnN0cnN0YXJ0OworICAgIHMtPmluc2VydCA9IHMtPmxvb2thaGVhZDsKKyAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPnByZXZfbGVuZ3RoID0gTUlOX01BVENILTE7CisgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKKyAgICBzdHJtLT5uZXh0X2luID0gbmV4dDsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGF2YWlsOworICAgIHMtPndyYXAgPSB3cmFwOwogICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi1pbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXQgKHN0cm0pCitpbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXRLZWVwIChzdHJtKQogICAgIHpfc3RyZWFtcCBzdHJtOwogewogICAgIGRlZmxhdGVfc3RhdGUgKnM7CkBAIC0zODAsMTIgKzQxOSwyMyBAQAogICAgIHMtPmxhc3RfZmx1c2ggPSBaX05PX0ZMVVNIOwogCiAgICAgX3RyX2luaXQocyk7Ci0gICAgbG1faW5pdChzKTsKIAogICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXQgKHN0cm0pCisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGRlZmxhdGVSZXNldEtlZXAoc3RybSk7CisgICAgaWYgKHJldCA9PSBaX09LKQorICAgICAgICBsbV9pbml0KHN0cm0tPnN0YXRlKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0SGVhZGVyIChzdHJtLCBoZWFkKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGd6X2hlYWRlcnAgaGVhZDsKQEAgLTM5NywxNCArNDQ3LDQyIEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIChzdHJtLCBwZW5kaW5nLCBiaXRzKQorICAgIHVuc2lnbmVkICpwZW5kaW5nOworICAgIGludCAqYml0czsKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKHBlbmRpbmcgIT0gWl9OVUxMKQorICAgICAgICAqcGVuZGluZyA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nOworICAgIGlmIChiaXRzICE9IFpfTlVMTCkKKyAgICAgICAgKmJpdHMgPSBzdHJtLT5zdGF0ZS0+YmlfdmFsaWQ7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIGludCBaRVhQT1JUIGRlZmxhdGVQcmltZSAoc3RybSwgYml0cywgdmFsdWUpCiAgICAgel9zdHJlYW1wIHN0cm07CiAgICAgaW50IGJpdHM7CiAgICAgaW50IHZhbHVlOwogeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IHB1dDsKKwogICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfdmFsaWQgPSBiaXRzOwotICAgIHN0cm0tPnN0YXRlLT5iaV9idWYgPSAodXNoKSh2YWx1ZSAmICgoMSA8PCBiaXRzKSAtIDEpKTsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgaWYgKChCeXRlZiAqKShzLT5kX2J1ZikgPCBzLT5wZW5kaW5nX291dCArICgoQnVmX3NpemUgKyA3KSA+PiAzKSkKKyAgICAgICAgcmV0dXJuIFpfQlVGX0VSUk9SOworICAgIGRvIHsKKyAgICAgICAgcHV0ID0gQnVmX3NpemUgLSBzLT5iaV92YWxpZDsKKyAgICAgICAgaWYgKHB1dCA+IGJpdHMpCisgICAgICAgICAgICBwdXQgPSBiaXRzOworICAgICAgICBzLT5iaV9idWYgfD0gKHVzaCkoKHZhbHVlICYgKCgxIDw8IHB1dCkgLSAxKSkgPDwgcy0+YmlfdmFsaWQpOworICAgICAgICBzLT5iaV92YWxpZCArPSBwdXQ7CisgICAgICAgIF90cl9mbHVzaF9iaXRzKHMpOworICAgICAgICB2YWx1ZSA+Pj0gcHV0OworICAgICAgICBiaXRzIC09IHB1dDsKKyAgICB9IHdoaWxlIChiaXRzKTsKICAgICByZXR1cm4gWl9PSzsKIH0KIApAQCAtNDM1LDYgKzUxMyw4IEBACiAgICAgICAgIHN0cm0tPnRvdGFsX2luICE9IDApIHsKICAgICAgICAgLyogRmx1c2ggdGhlIGxhc3QgYnVmZmVyOiAqLwogICAgICAgICBlcnIgPSBkZWZsYXRlKHN0cm0sIFpfQkxPQ0spOworICAgICAgICBpZiAoZXJyID09IFpfQlVGX0VSUk9SICYmIHMtPnBlbmRpbmcgPT0gMCkKKyAgICAgICAgICAgIGVyciA9IFpfT0s7CiAgICAgfQogICAgIGlmIChzLT5sZXZlbCAhPSBsZXZlbCkgewogICAgICAgICBzLT5sZXZlbCA9IGxldmVsOwpAQCAtNTYyLDE5ICs2NDIsMjIgQEAKIGxvY2FsIHZvaWQgZmx1c2hfcGVuZGluZyhzdHJtKQogICAgIHpfc3RyZWFtcCBzdHJtOwogewotICAgIHVuc2lnbmVkIGxlbiA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nOworICAgIHVuc2lnbmVkIGxlbjsKKyAgICBkZWZsYXRlX3N0YXRlICpzID0gc3RybS0+c3RhdGU7CiAKKyAgICBfdHJfZmx1c2hfYml0cyhzKTsKKyAgICBsZW4gPSBzLT5wZW5kaW5nOwogICAgIGlmIChsZW4gPiBzdHJtLT5hdmFpbF9vdXQpIGxlbiA9IHN0cm0tPmF2YWlsX291dDsKICAgICBpZiAobGVuID09IDApIHJldHVybjsKIAotICAgIHptZW1jcHkoc3RybS0+bmV4dF9vdXQsIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCwgbGVuKTsKKyAgICB6bWVtY3B5KHN0cm0tPm5leHRfb3V0LCBzLT5wZW5kaW5nX291dCwgbGVuKTsKICAgICBzdHJtLT5uZXh0X291dCAgKz0gbGVuOwotICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCAgKz0gbGVuOworICAgIHMtPnBlbmRpbmdfb3V0ICArPSBsZW47CiAgICAgc3RybS0+dG90YWxfb3V0ICs9IGxlbjsKICAgICBzdHJtLT5hdmFpbF9vdXQgIC09IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZyAtPSBsZW47Ci0gICAgaWYgKHN0cm0tPnN0YXRlLT5wZW5kaW5nID09IDApIHsKLSAgICAgICAgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0ID0gc3RybS0+c3RhdGUtPnBlbmRpbmdfYnVmOworICAgIHMtPnBlbmRpbmcgLT0gbGVuOworICAgIGlmIChzLT5wZW5kaW5nID09IDApIHsKKyAgICAgICAgcy0+cGVuZGluZ19vdXQgPSBzLT5wZW5kaW5nX2J1ZjsKICAgICB9CiB9CiAKQEAgLTgwMSw3ICs4ODQsNyBAQAogICAgICAqIGZsdXNoZXMuIEZvciByZXBlYXRlZCBhbmQgdXNlbGVzcyBjYWxscyB3aXRoIFpfRklOSVNILCB3ZSBrZWVwCiAgICAgICogcmV0dXJuaW5nIFpfU1RSRUFNX0VORCBpbnN0ZWFkIG9mIFpfQlVGX0VSUk9SLgogICAgICAqLwotICAgIH0gZWxzZSBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBmbHVzaCA8PSBvbGRfZmx1c2ggJiYKKyAgICB9IGVsc2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgUkFOSyhmbHVzaCkgPD0gUkFOSyhvbGRfZmx1c2gpICYmCiAgICAgICAgICAgICAgICBmbHVzaCAhPSBaX0ZJTklTSCkgewogICAgICAgICBFUlJfUkVUVVJOKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICB9CkBAIC04NTAsNiArOTMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdHJzdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBzLT5ibG9ja19zdGFydCA9IDBMOworICAgICAgICAgICAgICAgICAgICAgICAgcy0+aW5zZXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTk0NSwxMiArMTAyOSwxMiBAQAogCiAgICAgc3MgPSBzb3VyY2UtPnN0YXRlOwogCi0gICAgem1lbWNweShkZXN0LCBzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOworICAgIHptZW1jcHkoKHZvaWRwZilkZXN0LCAodm9pZHBmKXNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CiAKICAgICBkcyA9IChkZWZsYXRlX3N0YXRlICopIFpBTExPQyhkZXN0LCAxLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChkcyA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKICAgICBkZXN0LT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopIGRzOwotICAgIHptZW1jcHkoZHMsIHNzLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkpOworICAgIHptZW1jcHkoKHZvaWRwZilkcywgKHZvaWRwZilzcywgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKICAgICBkcy0+c3RybSA9IGRlc3Q7CiAKICAgICBkcy0+d2luZG93ID0gKEJ5dGVmICopIFpBTExPQyhkZXN0LCBkcy0+d19zaXplLCAyKnNpemVvZihCeXRlKSk7CkBAIC05NjYsOCArMTA1MCw4IEBACiAgICAgfQogICAgIC8qIGZvbGxvd2luZyB6bWVtY3B5IGRvIG5vdCB3b3JrIGZvciAxNi1iaXQgTVNET1MgKi8KICAgICB6bWVtY3B5KGRzLT53aW5kb3csIHNzLT53aW5kb3csIGRzLT53X3NpemUgKiAyICogc2l6ZW9mKEJ5dGUpKTsKLSAgICB6bWVtY3B5KGRzLT5wcmV2LCBzcy0+cHJldiwgZHMtPndfc2l6ZSAqIHNpemVvZihQb3MpKTsKLSAgICB6bWVtY3B5KGRzLT5oZWFkLCBzcy0+aGVhZCwgZHMtPmhhc2hfc2l6ZSAqIHNpemVvZihQb3MpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMtPnByZXYsICh2b2lkcGYpc3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLT5oZWFkLCAodm9pZHBmKXNzLT5oZWFkLCBkcy0+aGFzaF9zaXplICogc2l6ZW9mKFBvcykpOwogICAgIHptZW1jcHkoZHMtPnBlbmRpbmdfYnVmLCBzcy0+cGVuZGluZ19idWYsICh1SW50KWRzLT5wZW5kaW5nX2J1Zl9zaXplKTsKIAogICAgIGRzLT5wZW5kaW5nX291dCA9IGRzLT5wZW5kaW5nX2J1ZiArIChzcy0+cGVuZGluZ19vdXQgLSBzcy0+cGVuZGluZ19idWYpOwpAQCAtMTAwMSwxNSArMTA4NSwxNSBAQAogCiAgICAgc3RybS0+YXZhaWxfaW4gIC09IGxlbjsKIAorICAgIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pOwogICAgIGlmIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAxKSB7Ci0gICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgc3RybS0+bmV4dF9pbiwgbGVuKTsKKyAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CiAgICAgfQogI2lmZGVmIEdaSVAKICAgICBlbHNlIGlmIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAyKSB7Ci0gICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHN0cm0tPm5leHRfaW4sIGxlbik7CisgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIGJ1ZiwgbGVuKTsKICAgICB9CiAjZW5kaWYKLSAgICB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTsKICAgICBzdHJtLT5uZXh0X2luICArPSBsZW47CiAgICAgc3RybS0+dG90YWxfaW4gKz0gbGVuOwogCkBAIC0xMDM2LDYgKzExMjAsNyBAQAogICAgIHMtPnN0cnN0YXJ0ID0gMDsKICAgICBzLT5ibG9ja19zdGFydCA9IDBMOwogICAgIHMtPmxvb2thaGVhZCA9IDA7CisgICAgcy0+aW5zZXJ0ID0gMDsKICAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSC0xOwogICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgcy0+aW5zX2ggPSAwOwpAQCAtMTMxMCw2ICsxMzk1LDggQEAKICAgICB1bnNpZ25lZCBtb3JlOyAgICAvKiBBbW91bnQgb2YgZnJlZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cuICovCiAgICAgdUludCB3c2l6ZSA9IHMtPndfc2l6ZTsKIAorICAgIEFzc2VydChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFELCAiYWxyZWFkeSBlbm91Z2ggbG9va2FoZWFkIik7CisKICAgICBkbyB7CiAgICAgICAgIG1vcmUgPSAodW5zaWduZWQpKHMtPndpbmRvd19zaXplIC0odWxnKXMtPmxvb2thaGVhZCAtKHVsZylzLT5zdHJzdGFydCk7CiAKQEAgLTEzNjIsNyArMTQ0OSw3IEBACiAjZW5kaWYKICAgICAgICAgICAgIG1vcmUgKz0gd3NpemU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnN0cm0tPmF2YWlsX2luID09IDApIHJldHVybjsKKyAgICAgICAgaWYgKHMtPnN0cm0tPmF2YWlsX2luID09IDApIGJyZWFrOwogCiAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBubyBzbGlkaW5nOgogICAgICAgICAgKiAgICBzdHJzdGFydCA8PSBXU0laRStNQVhfRElTVC0xICYmIGxvb2thaGVhZCA8PSBNSU5fTE9PS0FIRUFEIC0gMSAmJgpAQCAtMTM4MSwxMiArMTQ2OCwyNCBAQAogICAgICAgICBzLT5sb29rYWhlYWQgKz0gbjsKIAogICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKLSAgICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3MtPnN0cnN0YXJ0XTsKLSAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQrMV0pOworICAgICAgICBpZiAocy0+bG9va2FoZWFkICsgcy0+aW5zZXJ0ID49IE1JTl9NQVRDSCkgeworICAgICAgICAgICAgdUludCBzdHIgPSBzLT5zdHJzdGFydCAtIHMtPmluc2VydDsKKyAgICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3N0cl07CisgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIDFdKTsKICNpZiBNSU5fTUFUQ0ggIT0gMwogICAgICAgICAgICAgQ2FsbCBVUERBVEVfSEFTSCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXMKICNlbmRpZgorICAgICAgICAgICAgd2hpbGUgKHMtPmluc2VydCkgeworICAgICAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsKKyNpZm5kZWYgRkFTVEVTVAorICAgICAgICAgICAgICAgIHMtPnByZXZbc3RyICYgcy0+d19tYXNrXSA9IHMtPmhlYWRbcy0+aW5zX2hdOworI2VuZGlmCisgICAgICAgICAgICAgICAgcy0+aGVhZFtzLT5pbnNfaF0gPSAoUG9zKXN0cjsKKyAgICAgICAgICAgICAgICBzdHIrKzsKKyAgICAgICAgICAgICAgICBzLT5pbnNlcnQtLTsKKyAgICAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkICsgcy0+aW5zZXJ0IDwgTUlOX01BVENIKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3MgdGhhbiBNSU5fTUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsCiAgICAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBpbXBvcnRhbnQgc2luY2Ugb25seSBsaXRlcmFsIGJ5dGVzIHdpbGwgYmUgZW1pdHRlZC4KQEAgLTE0MjcsNiArMTUyNiw5IEBACiAgICAgICAgICAgICBzLT5oaWdoX3dhdGVyICs9IGluaXQ7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQsCisgICAgICAgICAgICJub3QgZW5vdWdoIHJvb20gZm9yIHNlYXJjaCIpOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1MDYsOCArMTYwOCwxNCBAQAogICAgICAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAoKGxvbmcpcy0+c3Ryc3RhcnQgPiBzLT5ibG9ja19zdGFydCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTYwMyw4ICsxNzExLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0cnN0YXJ0IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAKICNpZm5kZWYgRkFTVEVTVApAQCAtMTcyOCw4ICsxODQyLDE0IEBACiAgICAgICAgIF90cl90YWxseV9saXQocywgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdLCBiZmx1c2gpOwogICAgICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0IDwgTUlOX01BVENILTEgPyBzLT5zdHJzdGFydCA6IE1JTl9NQVRDSC0xOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogI2VuZGlmIC8qIEZBU1RFU1QgKi8KIApAQCAtMTc0OSwxMSArMTg2OSwxMSBAQAogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CiAgICAgICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzCi0gICAgICAgICAqIGZvciB0aGUgbG9uZ2VzdCBlbmNvZGFibGUgcnVuLgorICAgICAgICAgKiBmb3IgdGhlIGxvbmdlc3QgcnVuLCBwbHVzIG9uZSBmb3IgdGhlIHVucm9sbGVkIGxvb3AuCiAgICAgICAgICAqLwotICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUFYX01BVENIKSB7CisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPD0gTUFYX01BVENIKSB7CiAgICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKLSAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPCBNQVhfTUFUQ0ggJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgeworICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgICAgIHJldHVybiBuZWVkX21vcmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIGJyZWFrOyAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqLwpAQCAtMTc3Niw2ICsxODk2LDcgQEAKICAgICAgICAgICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID4gcy0+bG9va2FoZWFkKQogICAgICAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5sb29rYWhlYWQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVJbnQpKHMtPndpbmRvd19zaXplLTEpLCAid2lsZCBzY2FuIik7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25nZXIsIGVsc2UgZW1pdCBsaXRlcmFsICovCkBAIC0xNzk2LDggKzE5MTcsMTQgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE4MjksNiArMTk1NiwxMiBAQAogICAgICAgICBzLT5zdHJzdGFydCsrOwogICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2RlZmxhdGUuaCBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKaW5kZXggY2JmMGQxZS4uY2UwMjk5ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2RlZmxhdGUuaAorKysgYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyogZGVmbGF0ZS5oIC0tIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBKZWFuLWxvdXAgR2FpbGx5CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDgsNiArNDgsOSBAQAogI2RlZmluZSBNQVhfQklUUyAxNQogLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovCiAKKyNkZWZpbmUgQnVmX3NpemUgMTYKKy8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi8KKwogI2RlZmluZSBJTklUX1NUQVRFICAgIDQyCiAjZGVmaW5lIEVYVFJBX1NUQVRFICAgNjkKICNkZWZpbmUgTkFNRV9TVEFURSAgICA3MwpAQCAtMTAxLDcgKzEwNCw3IEBACiAgICAgaW50ICAgd3JhcDsgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqLwogICAgIGd6X2hlYWRlcnAgIGd6aGVhZDsgIC8qIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIHRvIHdyaXRlICovCiAgICAgdUludCAgIGd6aW5kZXg7ICAgICAgLyogd2hlcmUgaW4gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgKi8KLSAgICBCeXRlICBtZXRob2Q7ICAgICAgICAvKiBTVE9SRUQgKGZvciB6aXAgb25seSkgb3IgREVGTEFURUQgKi8KKyAgICBCeXRlICBtZXRob2Q7ICAgICAgICAvKiBjYW4gb25seSBiZSBERUZMQVRFRCAqLwogICAgIGludCAgIGxhc3RfZmx1c2g7ICAgIC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBkZWZsYXRlIGNhbGwgKi8KIAogICAgICAgICAgICAgICAgIC8qIHVzZWQgYnkgZGVmbGF0ZS5jOiAqLwpAQCAtMTg4LDcgKzE5MSw3IEBACiAgICAgaW50IG5pY2VfbWF0Y2g7IC8qIFN0b3Agc2VhcmNoaW5nIHdoZW4gY3VycmVudCBtYXRjaCBleGNlZWRzIHRoaXMgKi8KIAogICAgICAgICAgICAgICAgIC8qIHVzZWQgYnkgdHJlZXMuYzogKi8KLSAgICAvKiBEaWRuJ3QgdXNlIGN0X2RhdGEgdHlwZWRlZiBiZWxvdyB0byBzdXByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICAvKiBEaWRuJ3QgdXNlIGN0X2RhdGEgdHlwZWRlZiBiZWxvdyB0byBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5nICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBkeW5fbHRyZWVbSEVBUF9TSVpFXTsgICAvKiBsaXRlcmFsIGFuZCBsZW5ndGggdHJlZSAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2R0cmVlWzIqRF9DT0RFUysxXTsgLyogZGlzdGFuY2UgdHJlZSAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVmZm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqLwpAQCAtMjQ0LDcgKzI0Nyw3IEBACiAgICAgdWxnIG9wdF9sZW47ICAgICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBvcHRpbWFsIHRyZWVzICovCiAgICAgdWxnIHN0YXRpY19sZW47ICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBzdGF0aWMgdHJlZXMgKi8KICAgICB1SW50IG1hdGNoZXM7ICAgICAgIC8qIG51bWJlciBvZiBzdHJpbmcgbWF0Y2hlcyBpbiBjdXJyZW50IGJsb2NrICovCi0gICAgaW50IGxhc3RfZW9iX2xlbjsgICAvKiBiaXQgbGVuZ3RoIG9mIEVPQiBjb2RlIGZvciBsYXN0IGJsb2NrICovCisgICAgdUludCBpbnNlcnQ7ICAgICAgICAvKiBieXRlcyBhdCBlbmQgb2Ygd2luZG93IGxlZnQgdG8gaW5zZXJ0ICovCiAKICNpZmRlZiBERUJVRwogICAgIHVsZyBjb21wcmVzc2VkX2xlbjsgLyogdG90YWwgYml0IGxlbmd0aCBvZiBjb21wcmVzc2VkIGZpbGUgbW9kIDJeMzIgKi8KQEAgLTI5NCw2ICsyOTcsNyBAQAogaW50IFpMSUJfSU5URVJOQUwgX3RyX3RhbGx5IE9GKChkZWZsYXRlX3N0YXRlICpzLCB1bnNpZ25lZCBkaXN0LCB1bnNpZ25lZCBsYykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9iaXRzIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX3N0b3JlZF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2V4YW1wbGUuYyBiL01vZHVsZXMvemxpYi9leGFtcGxlLmMKaW5kZXggNjA0NzM2Zi4uMTM4YTY5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2V4YW1wbGUuYworKysgYi9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZXhhbXBsZS5jIC0tIHVzYWdlIGV4YW1wbGUgb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDExIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMjYsNyArMjYsNyBAQAogICAgIH0gXAogfQogCi1jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7Cit6X2NvbnN0IGNoYXIgaGVsbG9bXSA9ICJoZWxsbywgaGVsbG8hIjsKIC8qICJoZWxsbyB3b3JsZCIgd291bGQgYmUgbW9yZSBzdGFuZGFyZCwgYnV0IHRoZSByZXBlYXRlZCAiaGVsbG8iCiAgKiBzdHJlc3NlcyB0aGUgY29tcHJlc3Npb24gY29kZSBiZXR0ZXIsIHNvcnJ5Li4uCiAgKi8KQEAgLTM0LDEwICszNCw2IEBACiBjb25zdCBjaGFyIGRpY3Rpb25hcnlbXSA9ICJoZWxsbyI7CiB1TG9uZyBkaWN0SWQ7IC8qIEFkbGVyMzIgdmFsdWUgb2YgdGhlIGRpY3Rpb25hcnkgKi8KIAotdm9pZCB0ZXN0X2NvbXByZXNzICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Ci12b2lkIHRlc3RfZ3ppbyAgICAgICAgICBPRigoY29uc3QgY2hhciAqZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwogdm9pZCB0ZXN0X2RlZmxhdGUgICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbikpOwogdm9pZCB0ZXN0X2luZmxhdGUgICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CkBAIC01Myw2ICs0OSwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKIGludCAgbWFpbiAgICAgICAgICAgICAgIE9GKChpbnQgYXJnYywgY2hhciAqYXJndltdKSk7CiAKKworI2lmZGVmIFpfU09MTworCit2b2lkICpteWFsbG9jIE9GKCh2b2lkICosIHVuc2lnbmVkLCB1bnNpZ25lZCkpOwordm9pZCBteWZyZWUgT0YoKHZvaWQgKiwgdm9pZCAqKSk7CisKK3ZvaWQgKm15YWxsb2MocSwgbiwgbSkKKyAgICB2b2lkICpxOworICAgIHVuc2lnbmVkIG4sIG07Cit7CisgICAgcSA9IFpfTlVMTDsKKyAgICByZXR1cm4gY2FsbG9jKG4sIG0pOworfQorCit2b2lkIG15ZnJlZSh2b2lkICpxLCB2b2lkICpwKQoreworICAgIHEgPSBaX05VTEw7CisgICAgZnJlZShwKTsKK30KKworc3RhdGljIGFsbG9jX2Z1bmMgemFsbG9jID0gbXlhbGxvYzsKK3N0YXRpYyBmcmVlX2Z1bmMgemZyZWUgPSBteWZyZWU7CisKKyNlbHNlIC8qICFaX1NPTE8gKi8KKworc3RhdGljIGFsbG9jX2Z1bmMgemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKK3N0YXRpYyBmcmVlX2Z1bmMgemZyZWUgPSAoZnJlZV9mdW5jKTA7CisKK3ZvaWQgdGVzdF9jb21wcmVzcyAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwordm9pZCB0ZXN0X2d6aW8gICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKmZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBUZXN0IGNvbXByZXNzKCkgYW5kIHVuY29tcHJlc3MoKQogICovCkBAIC0xNjMsNiArMTkyLDggQEAKICNlbmRpZgogfQogCisjZW5kaWYgLyogWl9TT0xPICovCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGVzdCBkZWZsYXRlKCkgd2l0aCBzbWFsbCBidWZmZXJzCiAgKi8KQEAgLTE3NCwxNCArMjA1LDE0IEBACiAgICAgaW50IGVycjsKICAgICB1TG9uZyBsZW4gPSAodUxvbmcpc3RybGVuKGhlbGxvKSsxOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVJbml0Iik7CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luICA9IChCeXRlZiopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoel9jb25zdCB1bnNpZ25lZCBjaGFyICopaGVsbG87CiAgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKIAogICAgIHdoaWxlIChjX3N0cmVhbS50b3RhbF9pbiAhPSBsZW4gJiYgY19zdHJlYW0udG90YWxfb3V0IDwgY29tcHJMZW4pIHsKQEAgLTIxMyw4ICsyNDQsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtMjUyLDggKzI4Myw4IEBACiAgICAgel9zdHJlYW0gY19zdHJlYW07IC8qIGNvbXByZXNzaW9uIHN0cmVhbSAqLwogICAgIGludCBlcnI7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9CRVNUX1NQRUVEKTsKQEAgLTMwOSw4ICszNDAsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtMzQ5LDE0ICszODAsMTQgQEAKICAgICBpbnQgZXJyOwogICAgIHVJbnQgbGVuID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVJbml0Iik7CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luICA9IChCeXRlZiopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoel9jb25zdCB1bnNpZ25lZCBjaGFyICopaGVsbG87CiAgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKICAgICBjX3N0cmVhbS5hdmFpbF9pbiA9IDM7CiAgICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpKmNvbXByTGVuOwpAQCAtMzg4LDggKzQxOSw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC00MzAsMjIgKzQ2MSwyMiBAQAogICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KICAgICBpbnQgZXJyOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTik7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVJbml0Iik7CiAKICAgICBlcnIgPSBkZWZsYXRlU2V0RGljdGlvbmFyeSgmY19zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LCBzaXplb2YoZGljdGlvbmFyeSkpOworICAgICAgICAgICAgICAgIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwgKGludClzaXplb2YoZGljdGlvbmFyeSkpOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlU2V0RGljdGlvbmFyeSIpOwogCiAgICAgZGljdElkID0gY19zdHJlYW0uYWRsZXI7CiAgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKICAgICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAodUludCljb21wckxlbjsKIAotICAgIGNfc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gPSAoel9jb25zdCB1bnNpZ25lZCBjaGFyICopaGVsbG87CiAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSAodUludClzdHJsZW4oaGVsbG8pKzE7CiAKICAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9GSU5JU0gpOwpAQCAtNDY5LDggKzUwMCw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC00OTEsNyArNTIyLDcgQEAKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJmRfc3RyZWFtLCAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGljdGlvbmFyeSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZGljdGlvbmFyeSkpOwogICAgICAgICB9CiAgICAgICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlIHdpdGggZGljdCIpOwogICAgIH0KQEAgLTU0MCwxMCArNTcxLDE1IEBACiAgICAgICAgIHByaW50Zigib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQorCisjaWZkZWYgWl9TT0xPCisgICAgYXJnYyA9IHN0cmxlbihhcmd2WzBdKTsKKyNlbHNlCiAgICAgdGVzdF9jb21wcmVzcyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwogCiAgICAgdGVzdF9nemlvKChhcmdjID4gMSA/IGFyZ3ZbMV0gOiBURVNURklMRSksCiAgICAgICAgICAgICAgIHVuY29tcHIsIHVuY29tcHJMZW4pOworI2VuZGlmCiAKICAgICB0ZXN0X2RlZmxhdGUoY29tcHIsIGNvbXByTGVuKTsKICAgICB0ZXN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemd1dHMuaCBiL01vZHVsZXMvemxpYi9nemd1dHMuaAppbmRleCAwZjhmYjc5Li5kODc2NTlkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKKysrIGIvTW9kdWxlcy96bGliL2d6Z3V0cy5oCkBAIC0xLDUgKzEsNSBAQAogLyogZ3pndXRzLmggLS0gemxpYiBpbnRlcm5hbCBoZWFkZXIgZGVmaW5pdGlvbnMgZm9yIGd6KiBvcGVyYXRpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xMiw3ICsxMiw3IEBACiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKSAmJiAhZGVmaW5lZChOT19WSVopCisjaWZkZWYgSEFWRV9ISURERU4KICMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiAjZWxzZQogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKQEAgLTI3LDEzICsyNyw4MCBAQAogI2VuZGlmCiAjaW5jbHVkZSA8ZmNudGwuaD4KIAorI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfV0lOMzIpCisjICBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpZmRlZiBXSU5BUElfRkFNSUxZCisjICBkZWZpbmUgb3BlbiBfb3BlbgorIyAgZGVmaW5lIHJlYWQgX3JlYWQKKyMgIGRlZmluZSB3cml0ZSBfd3JpdGUKKyMgIGRlZmluZSBjbG9zZSBfY2xvc2UKKyNlbmRpZgorCiAjaWZkZWYgTk9fREVGTEFURSAgICAgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBkZWZpbml0aW9uICovCiAjICBkZWZpbmUgTk9fR1pDT01QUkVTUwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFNUREM5OSkgfHwgKGRlZmluZWQoX19UVVJCT0NfXykgJiYgX19UVVJCT0NfXyA+PSAweDU1MCkKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTVNET1MpICYmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoQk9STEFOREMgPiAweDQxMCkKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgaWZkZWYgTVNET1MKKy8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAorICAgYnV0IGZvciBub3cgd2UganVzdCBhc3N1bWUgaXQgZG9lc24ndC4gKi8KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fVFVSQk9DX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIFdJTjMyCisvKiBJbiBXaW4zMiwgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSBhcyB0aGUgIm5vbi1BTlNJIiBfdnNucHJpbnRmLiAqLworIyAgICBpZiAhZGVmaW5lZCh2c25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyMgICAgICBpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKCBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE1MDAgKQorIyAgICAgICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX19TQVNDCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBWTVMKKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fT1M0MDBfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19NVlNfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIHVubGlrZSBzbnByaW50ZiAod2hpY2ggaXMgcmVxdWlyZWQgaW4gQzk5LCB5ZXQgc3RpbGwgbm90IHN1cHBvcnRlZCBieQorICAgTWljcm9zb2Z0IG1vcmUgdGhhbiBhIGRlY2FkZSBsYXRlciEpLCBfc25wcmludGYgZG9lcyBub3QgZ3VhcmFudGVlIG51bGwKKyAgIHRlcm1pbmF0aW9uIG9mIHRoZSByZXN1bHQgLS0gaG93ZXZlciB0aGlzIGlzIG9ubHkgdXNlZCBpbiBnemxpYi5jIHdoZXJlCisgICB0aGUgcmVzdWx0IGlzIGFzc3VyZWQgdG8gZml0IGluIHRoZSBzcGFjZSBwcm92aWRlZCAqLwogI2lmZGVmIF9NU0NfVkVSCi0jICBpbmNsdWRlIDxpby5oPgotIyAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCisjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCiAjZW5kaWYKIAogI2lmbmRlZiBsb2NhbApAQCAtNTIsNyArMTE5LDcgQEAKICMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KICMgIGRlZmluZSB6c3RyZXJyb3IoKSBnel9zdHJ3aW5lcnJvcigoRFdPUkQpR2V0TGFzdEVycm9yKCkpCiAjZWxzZQotIyAgaWZkZWYgU1REQworIyAgaWZuZGVmIE5PX1NUUkVSUk9SCiAjICAgIGluY2x1ZGUgPGVycm5vLmg+CiAjICAgIGRlZmluZSB6c3RyZXJyb3IoKSBzdHJlcnJvcihlcnJubykKICMgIGVsc2UKQEAgLTY4LDcgKzEzNSwxNSBAQAogICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3pvZmZzZXQ2NCBPRigoZ3pGaWxlKSk7CiAjZW5kaWYKIAotLyogZGVmYXVsdCBpL28gYnVmZmVyIHNpemUgLS0gZG91YmxlIHRoaXMgZm9yIG91dHB1dCB3aGVuIHJlYWRpbmcgKi8KKy8qIGRlZmF1bHQgbWVtTGV2ZWwgKi8KKyNpZiBNQVhfTUVNX0xFVkVMID49IDgKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMIDgKKyNlbHNlCisjICBkZWZpbmUgREVGX01FTV9MRVZFTCAgTUFYX01FTV9MRVZFTAorI2VuZGlmCisKKy8qIGRlZmF1bHQgaS9vIGJ1ZmZlciBzaXplIC0tIGRvdWJsZSB0aGlzIGZvciBvdXRwdXQgd2hlbiByZWFkaW5nICh0aGlzIGFuZAorICAgdHdpY2UgdGhpcyBtdXN0IGJlIGFibGUgdG8gZml0IGluIGFuIHVuc2lnbmVkIHR5cGUpICovCiAjZGVmaW5lIEdaQlVGU0laRSA4MTkyCiAKIC8qIGd6aXAgbW9kZXMsIGFsc28gcHJvdmlkZSBhIGxpdHRsZSBpbnRlZ3JpdHkgY2hlY2sgb24gdGhlIHBhc3NlZCBzdHJ1Y3R1cmUgKi8KQEAgLTg0LDIzICsxNTksMjUgQEAKIAogLyogaW50ZXJuYWwgZ3ppcCBmaWxlIHN0YXRlIGRhdGEgc3RydWN0dXJlICovCiB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIC8qIGV4cG9zZWQgY29udGVudHMgZm9yIGd6Z2V0YygpIG1hY3JvICovCisgICAgc3RydWN0IGd6RmlsZV9zIHg7ICAgICAgLyogIngiIGZvciBleHBvc2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeC5oYXZlOiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IHgubmV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgubmV4dDogbmV4dCBvdXRwdXQgZGF0YSB0byBkZWxpdmVyIG9yIHdyaXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeC5wb3M6IGN1cnJlbnQgcG9zaXRpb24gaW4gdW5jb21wcmVzc2VkIGRhdGEgKi8KICAgICAgICAgLyogdXNlZCBmb3IgYm90aCByZWFkaW5nIGFuZCB3cml0aW5nICovCiAgICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgLyogc2VlIGd6aXAgbW9kZXMgYWJvdmUgKi8KICAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAvKiBmaWxlIGRlc2NyaXB0b3IgKi8KICAgICBjaGFyICpwYXRoOyAgICAgICAgICAgICAvKiBwYXRoIG9yIGZkIGZvciBlcnJvciBtZXNzYWdlcyAqLwotICAgIHpfb2ZmNjRfdCBwb3M7ICAgICAgICAgIC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gdW5jb21wcmVzc2VkIGRhdGEgKi8KICAgICB1bnNpZ25lZCBzaXplOyAgICAgICAgICAvKiBidWZmZXIgc2l6ZSwgemVybyBpZiBub3QgYWxsb2NhdGVkIHlldCAqLwogICAgIHVuc2lnbmVkIHdhbnQ7ICAgICAgICAgIC8qIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgZGVmYXVsdCBpcyBHWkJVRlNJWkUgKi8KICAgICB1bnNpZ25lZCBjaGFyICppbjsgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KICAgICB1bnNpZ25lZCBjaGFyICpvdXQ7ICAgICAvKiBvdXRwdXQgYnVmZmVyIChkb3VibGUtc2l6ZWQgd2hlbiByZWFkaW5nKSAqLwotICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7ICAgIC8qIG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIDAgaWYgcHJvY2Vzc2luZyBnemlwLCAxIGlmIHRyYW5zcGFyZW50ICovCiAgICAgICAgIC8qIGp1c3QgZm9yIHJlYWRpbmcgKi8KLSAgICB1bnNpZ25lZCBoYXZlOyAgICAgICAgICAvKiBhbW91bnQgb2Ygb3V0cHV0IGRhdGEgdW51c2VkIGF0IG5leHQgKi8KLSAgICBpbnQgZW9mOyAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGVuZCBvZiBpbnB1dCBmaWxlIHJlYWNoZWQgKi8KLSAgICB6X29mZjY0X3Qgc3RhcnQ7ICAgICAgICAvKiB3aGVyZSB0aGUgZ3ppcCBkYXRhIHN0YXJ0ZWQsIGZvciByZXdpbmRpbmcgKi8KLSAgICB6X29mZjY0X3QgcmF3OyAgICAgICAgICAvKiB3aGVyZSB0aGUgcmF3IGRhdGEgc3RhcnRlZCwgZm9yIHNlZWtpbmcgKi8KICAgICBpbnQgaG93OyAgICAgICAgICAgICAgICAvKiAwOiBnZXQgaGVhZGVyLCAxOiBjb3B5LCAyOiBkZWNvbXByZXNzICovCi0gICAgaW50IGRpcmVjdDsgICAgICAgICAgICAgLyogdHJ1ZSBpZiBsYXN0IHJlYWQgZGlyZWN0LCBmYWxzZSBpZiBnemlwICovCisgICAgel9vZmY2NF90IHN0YXJ0OyAgICAgICAgLyogd2hlcmUgdGhlIGd6aXAgZGF0YSBzdGFydGVkLCBmb3IgcmV3aW5kaW5nICovCisgICAgaW50IGVvZjsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBlbmQgb2YgaW5wdXQgZmlsZSByZWFjaGVkICovCisgICAgaW50IHBhc3Q7ICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiByZWFkIHJlcXVlc3RlZCBwYXN0IGVuZCAqLwogICAgICAgICAvKiBqdXN0IGZvciB3cml0aW5nICovCiAgICAgaW50IGxldmVsOyAgICAgICAgICAgICAgLyogY29tcHJlc3Npb24gbGV2ZWwgKi8KICAgICBpbnQgc3RyYXRlZ3k7ICAgICAgICAgICAvKiBjb21wcmVzc2lvbiBzdHJhdGVneSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6aW8uYyBiL01vZHVsZXMvemxpYi9nemlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOTBmNDkuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy96bGliL2d6aW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEwMjYgKzAsMCBAQAotLyogZ3ppby5jIC0tIElPIG9uIC5neiBmaWxlcwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAqCi0gKiBDb21waWxlIHRoaXMgZmlsZSB3aXRoIC1ETk9fR1pDT01QUkVTUyB0byBhdm9pZCB0aGUgY29tcHJlc3Npb24gY29kZS4KLSAqLwotCi0vKiBAKCMpICRJZCQgKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJ6dXRpbC5oIgotCi0jaWZkZWYgTk9fREVGTEFURSAgICAgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBkZWZpbml0aW9uICovCi0jICBkZWZpbmUgTk9fR1pDT01QUkVTUwotI2VuZGlmCi0KLSNpZm5kZWYgTk9fRFVNTVlfREVDTAotc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwotI2VuZGlmCi0KLSNpZm5kZWYgWl9CVUZTSVpFCi0jICBpZmRlZiBNQVhTRUdfNjRLCi0jICAgIGRlZmluZSBaX0JVRlNJWkUgNDA5NiAvKiBtaW5pbWl6ZSBtZW1vcnkgdXNhZ2UgZm9yIDE2LWJpdCBET1MgKi8KLSMgIGVsc2UKLSMgICAgZGVmaW5lIFpfQlVGU0laRSAxNjM4NAotIyAgZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBaX1BSSU5URl9CVUZTSVpFCi0jICBkZWZpbmUgWl9QUklOVEZfQlVGU0laRSA0MDk2Ci0jZW5kaWYKLQotI2lmZGVmIF9fTVZTX18KLSMgIHByYWdtYSBtYXAgKGZkb3BlbiAsICJcMTc0XDE3NEZET1BFTiIpCi0gICBGSUxFICpmZG9wZW4oaW50LCBjb25zdCBjaGFyICopOwotI2VuZGlmCi0KLSNpZm5kZWYgU1REQwotZXh0ZXJuIHZvaWRwICBtYWxsb2MgT0YoKHVJbnQgc2l6ZSkpOwotZXh0ZXJuIHZvaWQgICBmcmVlICAgT0YoKHZvaWRwZiBwdHIpKTsKLSNlbmRpZgotCi0jZGVmaW5lIEFMTE9DKHNpemUpIG1hbGxvYyhzaXplKQotI2RlZmluZSBUUllGUkVFKHApIHtpZiAocCkgZnJlZShwKTt9Ci0KLXN0YXRpYyBpbnQgY29uc3QgZ3pfbWFnaWNbMl0gPSB7MHgxZiwgMHg4Yn07IC8qIGd6aXAgbWFnaWMgaGVhZGVyICovCi0KLS8qIGd6aXAgZmxhZyBieXRlICovCi0jZGVmaW5lIEFTQ0lJX0ZMQUcgICAweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBhc2NpaSB0ZXh0ICovCi0jZGVmaW5lIEhFQURfQ1JDICAgICAweDAyIC8qIGJpdCAxIHNldDogaGVhZGVyIENSQyBwcmVzZW50ICovCi0jZGVmaW5lIEVYVFJBX0ZJRUxEICAweDA0IC8qIGJpdCAyIHNldDogZXh0cmEgZmllbGQgcHJlc2VudCAqLwotI2RlZmluZSBPUklHX05BTUUgICAgMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCi0jZGVmaW5lIENPTU1FTlQgICAgICAweDEwIC8qIGJpdCA0IHNldDogZmlsZSBjb21tZW50IHByZXNlbnQgKi8KLSNkZWZpbmUgUkVTRVJWRUQgICAgIDB4RTAgLyogYml0cyA1Li43OiByZXNlcnZlZCAqLwotCi10eXBlZGVmIHN0cnVjdCBnel9zdHJlYW0gewotICAgIHpfc3RyZWFtIHN0cmVhbTsKLSAgICBpbnQgICAgICB6X2VycjsgICAvKiBlcnJvciBjb2RlIGZvciBsYXN0IHN0cmVhbSBvcGVyYXRpb24gKi8KLSAgICBpbnQgICAgICB6X2VvZjsgICAvKiBzZXQgaWYgZW5kIG9mIGlucHV0IGZpbGUgKi8KLSAgICBGSUxFICAgICAqZmlsZTsgICAvKiAuZ3ogZmlsZSAqLwotICAgIEJ5dGUgICAgICppbmJ1ZjsgIC8qIGlucHV0IGJ1ZmZlciAqLwotICAgIEJ5dGUgICAgICpvdXRidWY7IC8qIG91dHB1dCBidWZmZXIgKi8KLSAgICB1TG9uZyAgICBjcmM7ICAgICAvKiBjcmMzMiBvZiB1bmNvbXByZXNzZWQgZGF0YSAqLwotICAgIGNoYXIgICAgICptc2c7ICAgIC8qIGVycm9yIG1lc3NhZ2UgKi8KLSAgICBjaGFyICAgICAqcGF0aDsgICAvKiBwYXRoIG5hbWUgZm9yIGRlYnVnZ2luZyBvbmx5ICovCi0gICAgaW50ICAgICAgdHJhbnNwYXJlbnQ7IC8qIDEgaWYgaW5wdXQgZmlsZSBpcyBub3QgYSAuZ3ogZmlsZSAqLwotICAgIGNoYXIgICAgIG1vZGU7ICAgIC8qICd3JyBvciAncicgKi8KLSAgICB6X29mZl90ICBzdGFydDsgICAvKiBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgaW4gZmlsZSAoaGVhZGVyIHNraXBwZWQpICovCi0gICAgel9vZmZfdCAgaW47ICAgICAgLyogYnl0ZXMgaW50byBkZWZsYXRlIG9yIGluZmxhdGUgKi8KLSAgICB6X29mZl90ICBvdXQ7ICAgICAvKiBieXRlcyBvdXQgb2YgZGVmbGF0ZSBvciBpbmZsYXRlICovCi0gICAgaW50ICAgICAgYmFjazsgICAgLyogb25lIGNoYXJhY3RlciBwdXNoLWJhY2sgKi8KLSAgICBpbnQgICAgICBsYXN0OyAgICAvKiB0cnVlIGlmIHB1c2gtYmFjayBpcyBsYXN0IGNoYXJhY3RlciAqLwotfSBnel9zdHJlYW07Ci0KLQotbG9jYWwgZ3pGaWxlIGd6X29wZW4gICAgICBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50ICBmZCkpOwotbG9jYWwgaW50IGRvX2ZsdXNoICAgICAgICBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOwotbG9jYWwgaW50ICAgIGdldF9ieXRlICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCB2b2lkICAgY2hlY2tfaGVhZGVyIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIGludCAgICBkZXN0cm95ICAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIHB1dExvbmcgICAgICBPRigoRklMRSAqZmlsZSwgdUxvbmcgeCkpOwotbG9jYWwgdUxvbmcgIGdldExvbmcgICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLiBUaGUgbW9kZSBwYXJhbWV0ZXIKLSAgIGlzIGFzIGluIGZvcGVuICgicmIiIG9yICJ3YiIpLiBUaGUgZmlsZSBpcyBnaXZlbiBlaXRoZXIgYnkgZmlsZSBkZXNjcmlwdG9yCi0gICBvciBwYXRoIG5hbWUgKGlmIGZkID09IC0xKS4KLSAgICAgZ3pfb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCBvciBpZiB0aGVyZSB3YXMKLSAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZTsgZXJybm8KLSAgIGNhbiBiZSBjaGVja2VkIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gY2FzZXMgKGlmIGVycm5vIGlzIHplcm8sIHRoZQotICAgemxpYiBlcnJvciBpcyBaX01FTV9FUlJPUikuCi0qLwotbG9jYWwgZ3pGaWxlIGd6X29wZW4gKHBhdGgsIG1vZGUsIGZkKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLSAgICBpbnQgIGZkOwotewotICAgIGludCBlcnI7Ci0gICAgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOyAvKiBjb21wcmVzc2lvbiBsZXZlbCAqLwotICAgIGludCBzdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsgLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KLSAgICBjaGFyICpwID0gKGNoYXIqKW1vZGU7Ci0gICAgZ3pfc3RyZWFtICpzOwotICAgIGNoYXIgZm1vZGVbODBdOyAvKiBjb3B5IG9mIG1vZGUsIHdpdGhvdXQgdGhlIGNvbXByZXNzaW9uIGxldmVsICovCi0gICAgY2hhciAqbSA9IGZtb2RlOwotCi0gICAgaWYgKCFwYXRoIHx8ICFtb2RlKSByZXR1cm4gWl9OVUxMOwotCi0gICAgcyA9IChnel9zdHJlYW0gKilBTExPQyhzaXplb2YoZ3pfc3RyZWFtKSk7Ci0gICAgaWYgKCFzKSByZXR1cm4gWl9OVUxMOwotCi0gICAgcy0+c3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgcy0+c3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIHMtPnN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZiA9IFpfTlVMTDsKLSAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWYgPSBaX05VTEw7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gcy0+c3RyZWFtLmF2YWlsX291dCA9IDA7Ci0gICAgcy0+ZmlsZSA9IE5VTEw7Ci0gICAgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBzLT5pbiA9IDA7Ci0gICAgcy0+b3V0ID0gMDsKLSAgICBzLT5iYWNrID0gRU9GOwotICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgIHMtPm1zZyA9IE5VTEw7Ci0gICAgcy0+dHJhbnNwYXJlbnQgPSAwOwotCi0gICAgcy0+cGF0aCA9IChjaGFyKilBTExPQyhzdHJsZW4ocGF0aCkrMSk7Ci0gICAgaWYgKHMtPnBhdGggPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgfQotICAgIHN0cmNweShzLT5wYXRoLCBwYXRoKTsgLyogZG8gdGhpcyBlYXJseSBmb3IgZGVidWdnaW5nICovCi0KLSAgICBzLT5tb2RlID0gJ1wwJzsKLSAgICBkbyB7Ci0gICAgICAgIGlmICgqcCA9PSAncicpIHMtPm1vZGUgPSAncic7Ci0gICAgICAgIGlmICgqcCA9PSAndycgfHwgKnAgPT0gJ2EnKSBzLT5tb2RlID0gJ3cnOwotICAgICAgICBpZiAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykgewotICAgICAgICAgICAgbGV2ZWwgPSAqcCAtICcwJzsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnZicpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpfRklMVEVSRUQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2gnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0hVRkZNQU5fT05MWTsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnUicpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpfUkxFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKm0rKyA9ICpwOyAvKiBjb3B5IHRoZSBtb2RlICovCi0gICAgICAgIH0KLSAgICB9IHdoaWxlICgqcCsrICYmIG0gIT0gZm1vZGUgKyBzaXplb2YoZm1vZGUpKTsKLSAgICBpZiAocy0+bW9kZSA9PSAnXDAnKSByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIGVyciA9IFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCYocy0+c3RyZWFtKSwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBaX0RFRkxBVEVELCAtTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBzdHJhdGVneSk7Ci0gICAgICAgIC8qIHdpbmRvd0JpdHMgaXMgcGFzc2VkIDwgMCB0byBzdXBwcmVzcyB6bGliIGhlYWRlciAqLwotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwotI2VuZGlmCi0gICAgICAgIGlmIChlcnIgIT0gWl9PSyB8fCBzLT5vdXRidWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiAgPSBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwotCi0gICAgICAgIGVyciA9IGluZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIC1NQVhfV0JJVFMpOwotICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gdGVsbCB0aGF0IHRoZXJlIGlzIG5vIHpsaWIgaGVhZGVyLgotICAgICAgICAgKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGluZmxhdGUgKnJlcXVpcmVzKiBhbiBleHRyYSAiZHVtbXkiIGJ5dGUKLSAgICAgICAgICogYWZ0ZXIgdGhlIGNvbXByZXNzZWQgc3RyZWFtIGluIG9yZGVyIHRvIGNvbXBsZXRlIGRlY29tcHJlc3Npb24gYW5kCi0gICAgICAgICAqIHJldHVybiBaX1NUUkVBTV9FTkQuIEhlcmUgdGhlIGd6aXAgQ1JDMzIgZW5zdXJlcyB0aGF0IDQgYnl0ZXMgYXJlCi0gICAgICAgICAqIHByZXNlbnQgYWZ0ZXIgdGhlIGNvbXByZXNzZWQgc3RyZWFtLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGVyciAhPSBaX09LIHx8IHMtPmluYnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0KLSAgICBlcnJubyA9IDA7Ci0gICAgcy0+ZmlsZSA9IGZkIDwgMCA/IEZfT1BFTihwYXRoLCBmbW9kZSkgOiAoRklMRSopZmRvcGVuKGZkLCBmbW9kZSk7Ci0KLSAgICBpZiAocy0+ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICB9Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0gICAgICAgIC8qIFdyaXRlIGEgdmVyeSBzaW1wbGUgLmd6IGhlYWRlcjoKLSAgICAgICAgICovCi0gICAgICAgIGZwcmludGYocy0+ZmlsZSwgIiVjJWMlYyVjJWMlYyVjJWMlYyVjIiwgZ3pfbWFnaWNbMF0sIGd6X21hZ2ljWzFdLAotICAgICAgICAgICAgIFpfREVGTEFURUQsIDAgLypmbGFncyovLCAwLDAsMCwwIC8qdGltZSovLCAwIC8qeGZsYWdzKi8sIE9TX0NPREUpOwotICAgICAgICBzLT5zdGFydCA9IDEwTDsKLSAgICAgICAgLyogV2UgdXNlIDEwTCBpbnN0ZWFkIG9mIGZ0ZWxsKHMtPmZpbGUpIHRvIGJlY2F1c2UgZnRlbGwgY2F1c2VzIGFuCi0gICAgICAgICAqIGZmbHVzaCBvbiBzb21lIHN5c3RlbXMuIFRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2Vzbid0IHVzZQotICAgICAgICAgKiBzdGFydCBhbnl3YXkgaW4gd3JpdGUgbW9kZSwgc28gdGhpcyBpbml0aWFsaXphdGlvbiBpcyBub3QKLSAgICAgICAgICogbmVjZXNzYXJ5LgotICAgICAgICAgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjaGVja19oZWFkZXIocyk7IC8qIHNraXAgdGhlIC5neiBoZWFkZXIgKi8KLSAgICAgICAgcy0+c3RhcnQgPSBmdGVsbChzLT5maWxlKSAtIHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGd6RmlsZSlzOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4KLSovCi1nekZpbGUgWkVYUE9SVCBnem9wZW4gKHBhdGgsIG1vZGUpCi0gICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotewotICAgIHJldHVybiBnel9vcGVuIChwYXRoLCBtb2RlLCAtMSk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBBc3NvY2lhdGUgYSBnekZpbGUgd2l0aCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLiBmZCBpcyBub3QgZHVwJ2VkIGhlcmUKLSAgIHRvIG1pbWljIHRoZSBiZWhhdmlvKHUpciBvZiBmZG9wZW4uCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pkb3BlbiAoZmQsIG1vZGUpCi0gICAgaW50IGZkOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci17Ci0gICAgY2hhciBuYW1lWzQ2XTsgICAgICAvKiBhbGxvdyBmb3IgdXAgdG8gMTI4LWJpdCBpbnRlZ2VycyAqLwotCi0gICAgaWYgKGZkIDwgMCkgcmV0dXJuIChnekZpbGUpWl9OVUxMOwotICAgIHNwcmludGYobmFtZSwgIjxmZDolZD4iLCBmZCk7IC8qIGZvciBkZWJ1Z2dpbmcgKi8KLQotICAgIHJldHVybiBnel9vcGVuIChuYW1lLCBtb2RlLCBmZCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgc3RyYXRlZ3kKLSAqLwotaW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMgKGZpbGUsIGxldmVsLCBzdHJhdGVneSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgbGV2ZWw7Ci0gICAgaW50IHN0cmF0ZWd5OwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICAvKiBNYWtlIHJvb20gdG8gYWxsb3cgZmx1c2hpbmcgKi8KLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCA9PSAwKSB7Ci0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICBpZiAoZndyaXRlKHMtPm91dGJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgfQotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgIH0KLQotICAgIHJldHVybiBkZWZsYXRlUGFyYW1zICgmKHMtPnN0cmVhbSksIGxldmVsLCBzdHJhdGVneSk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZWFkIGEgYnl0ZSBmcm9tIGEgZ3pfc3RyZWFtOyB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4uIFJldHVybiBFT0YKLSAgIGZvciBlbmQgb2YgZmlsZS4KLSAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBiZWVuIHN1Y2Vzc2Z1bGx5IG9wZW5lZCBmb3IgcmVhZGluZy4KLSovCi1sb2NhbCBpbnQgZ2V0X2J5dGUocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaWYgKHMtPnpfZW9mKSByZXR1cm4gRU9GOwotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCkgewotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpOwotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgIHMtPnpfZW9mID0gMTsKLSAgICAgICAgICAgIGlmIChmZXJyb3Iocy0+ZmlsZSkpIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luLS07Ci0gICAgcmV0dXJuICoocy0+c3RyZWFtLm5leHRfaW4pKys7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgQ2hlY2sgdGhlIGd6aXAgaGVhZGVyIG9mIGEgZ3pfc3RyZWFtIG9wZW5lZCBmb3IgcmVhZGluZy4gU2V0IHRoZSBzdHJlYW0KLSAgICBtb2RlIHRvIHRyYW5zcGFyZW50IGlmIHRoZSBnemlwIG1hZ2ljIGhlYWRlciBpcyBub3QgcHJlc2VudDsgc2V0IHMtPmVycgotICAgIHRvIFpfREFUQV9FUlJPUiBpZiB0aGUgbWFnaWMgaGVhZGVyIGlzIHByZXNlbnQgYnV0IHRoZSByZXN0IG9mIHRoZSBoZWFkZXIKLSAgICBpcyBpbmNvcnJlY3QuCi0gICAgSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIHN1Y2Vzc2Z1bGx5OwotICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiBpcyB6ZXJvIGZvciB0aGUgZmlyc3QgdGltZSwgYnV0IG1heSBiZSBub24temVybwotICAgICAgIGZvciBjb25jYXRlbmF0ZWQgLmd6IGZpbGVzLgotKi8KLWxvY2FsIHZvaWQgY2hlY2tfaGVhZGVyKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGludCBtZXRob2Q7IC8qIG1ldGhvZCBieXRlICovCi0gICAgaW50IGZsYWdzOyAgLyogZmxhZ3MgYnl0ZSAqLwotICAgIHVJbnQgbGVuOwotICAgIGludCBjOwotCi0gICAgLyogQXNzdXJlIHR3byBieXRlcyBpbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBwZWVrIGFoZWFkIC0tIGhhbmRsZSBjYXNlCi0gICAgICAgd2hlcmUgZmlyc3QgYnl0ZSBvZiBoZWFkZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoZSBsYXN0Ci0gICAgICAgZ3ppcCBzZWdtZW50ICovCi0gICAgbGVuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgIGlmIChsZW4gPCAyKSB7Ci0gICAgICAgIGlmIChsZW4pIHMtPmluYnVmWzBdID0gcy0+c3RyZWFtLm5leHRfaW5bMF07Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbGVuID0gKHVJbnQpZnJlYWQocy0+aW5idWYgKyBsZW4sIDEsIFpfQlVGU0laRSA+PiBsZW4sIHMtPmZpbGUpOwotICAgICAgICBpZiAobGVuID09IDAgJiYgZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiArPSBsZW47Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPCAyKSB7Ci0gICAgICAgICAgICBzLT50cmFuc3BhcmVudCA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFBlZWsgYWhlYWQgdG8gY2hlY2sgdGhlIGd6aXAgbWFnaWMgaGVhZGVyICovCi0gICAgaWYgKHMtPnN0cmVhbS5uZXh0X2luWzBdICE9IGd6X21hZ2ljWzBdIHx8Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luWzFdICE9IGd6X21hZ2ljWzFdKSB7Ci0gICAgICAgIHMtPnRyYW5zcGFyZW50ID0gMTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gLT0gMjsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiArPSAyOwotCi0gICAgLyogQ2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGd6aXAgaGVhZGVyICovCi0gICAgbWV0aG9kID0gZ2V0X2J5dGUocyk7Ci0gICAgZmxhZ3MgPSBnZXRfYnl0ZShzKTsKLSAgICBpZiAobWV0aG9kICE9IFpfREVGTEFURUQgfHwgKGZsYWdzICYgUkVTRVJWRUQpICE9IDApIHsKLSAgICAgICAgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBEaXNjYXJkIHRpbWUsIHhmbGFncyBhbmQgT1MgY29kZTogKi8KLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IDY7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLQotICAgIGlmICgoZmxhZ3MgJiBFWFRSQV9GSUVMRCkgIT0gMCkgeyAvKiBza2lwIHRoZSBleHRyYSBmaWVsZCAqLwotICAgICAgICBsZW4gID0gICh1SW50KWdldF9ieXRlKHMpOwotICAgICAgICBsZW4gKz0gKCh1SW50KWdldF9ieXRlKHMpKTw8ODsKLSAgICAgICAgLyogbGVuIGlzIGdhcmJhZ2UgaWYgRU9GIGJ1dCB0aGUgbG9vcCBiZWxvdyB3aWxsIHF1aXQgYW55d2F5ICovCi0gICAgICAgIHdoaWxlIChsZW4tLSAhPSAwICYmIGdldF9ieXRlKHMpICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYgT1JJR19OQU1FKSAhPSAwKSB7IC8qIHNraXAgdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSAqLwotICAgICAgICB3aGlsZSAoKGMgPSBnZXRfYnl0ZShzKSkgIT0gMCAmJiBjICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYgQ09NTUVOVCkgIT0gMCkgeyAgIC8qIHNraXAgdGhlIC5neiBmaWxlIGNvbW1lbnQgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykpICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIEhFQURfQ1JDKSAhPSAwKSB7ICAvKiBza2lwIHRoZSBoZWFkZXIgY3JjICovCi0gICAgICAgIGZvciAobGVuID0gMDsgbGVuIDwgMjsgbGVuKyspICh2b2lkKWdldF9ieXRlKHMpOwotICAgIH0KLSAgICBzLT56X2VyciA9IHMtPnpfZW9mID8gWl9EQVRBX0VSUk9SIDogWl9PSzsKLX0KLQotIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xlYW51cCB0aGVuIGZyZWUgdGhlIGdpdmVuIGd6X3N0cmVhbS4gUmV0dXJuIGEgemxpYiBlcnJvciBjb2RlLgotICAgVHJ5IGZyZWVpbmcgaW4gdGhlIHJldmVyc2Ugb3JkZXIgb2YgYWxsb2NhdGlvbnMuCi0gKi8KLWxvY2FsIGludCBkZXN0cm95IChzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgZXJyID0gWl9PSzsKLQotICAgIGlmICghcykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgVFJZRlJFRShzLT5tc2cpOwotCi0gICAgaWYgKHMtPnN0cmVhbS5zdGF0ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgICAgIGVyciA9IFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgICAgIGVyciA9IGRlZmxhdGVFbmQoJihzLT5zdHJlYW0pKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UgaWYgKHMtPm1vZGUgPT0gJ3InKSB7Ci0gICAgICAgICAgICBlcnIgPSBpbmZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHMtPmZpbGUgIT0gTlVMTCAmJiBmY2xvc2Uocy0+ZmlsZSkpIHsKLSNpZmRlZiBFU1BJUEUKLSAgICAgICAgaWYgKGVycm5vICE9IEVTUElQRSkgLyogZmNsb3NlIGlzIGJyb2tlbiBmb3IgcGlwZXMgaW4gSFAvVVggKi8KLSNlbmRpZgotICAgICAgICAgICAgZXJyID0gWl9FUlJOTzsKLSAgICB9Ci0gICAgaWYgKHMtPnpfZXJyIDwgMCkgZXJyID0gcy0+el9lcnI7Ci0KLSAgICBUUllGUkVFKHMtPmluYnVmKTsKLSAgICBUUllGUkVFKHMtPm91dGJ1Zik7Ci0gICAgVFJZRlJFRShzLT5wYXRoKTsKLSAgICBUUllGUkVFKHMpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQgKDAgZm9yIGVuZCBvZiBmaWxlKS4KLSovCi1pbnQgWkVYUE9SVCBnenJlYWQgKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIHZvaWRwIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLSAgICBCeXRlZiAqc3RhcnQgPSAoQnl0ZWYqKWJ1ZjsgLyogc3RhcnRpbmcgcG9pbnQgZm9yIGNyYyBjb21wdXRhdGlvbiAqLwotICAgIEJ5dGUgICpuZXh0X291dDsgLyogPT0gc3RyZWFtLm5leHRfb3V0IGJ1dCBub3QgZm9yY2VkIGZhciAoZm9yIE1TRE9TKSAqLwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgaWYgKHMtPnpfZXJyID09IFpfREFUQV9FUlJPUiB8fCBzLT56X2VyciA9PSBaX0VSUk5PKSByZXR1cm4gLTE7Ci0gICAgaWYgKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCkgcmV0dXJuIDA7ICAvKiBFT0YgKi8KLQotICAgIG5leHRfb3V0ID0gKEJ5dGUqKWJ1ZjsKLSAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSAoQnl0ZWYqKWJ1ZjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gbGVuOwotCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgJiYgcy0+YmFjayAhPSBFT0YpIHsKLSAgICAgICAgKm5leHRfb3V0KysgPSBzLT5iYWNrOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQrKzsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dC0tOwotICAgICAgICBzLT5iYWNrID0gRU9GOwotICAgICAgICBzLT5vdXQrKzsKLSAgICAgICAgc3RhcnQrKzsKLSAgICAgICAgaWYgKHMtPmxhc3QpIHsKLSAgICAgICAgICAgIHMtPnpfZXJyID0gWl9TVFJFQU1fRU5EOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3aGlsZSAocy0+c3RyZWFtLmF2YWlsX291dCAhPSAwKSB7Ci0KLSAgICAgICAgaWYgKHMtPnRyYW5zcGFyZW50KSB7Ci0gICAgICAgICAgICAvKiBDb3B5IGZpcnN0IHRoZSBsb29rYWhlYWQgYnl0ZXM6ICovCi0gICAgICAgICAgICB1SW50IG4gPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICBpZiAobiA+IHMtPnN0cmVhbS5hdmFpbF9vdXQpIG4gPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAgICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgem1lbWNweShzLT5zdHJlYW0ubmV4dF9vdXQsIHMtPnN0cmVhbS5uZXh0X2luLCBuKTsKLSAgICAgICAgICAgICAgICBuZXh0X291dCArPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IG5leHRfb3V0OwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luICAgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0IC09IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luICAtPSBuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPQotICAgICAgICAgICAgICAgICAgICAodUludClmcmVhZChuZXh0X291dCwgMSwgcy0+c3RyZWFtLmF2YWlsX291dCwgcy0+ZmlsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW4gLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgIHMtPmluICArPSBsZW47Ci0gICAgICAgICAgICBzLT5vdXQgKz0gbGVuOwotICAgICAgICAgICAgaWYgKGxlbiA9PSAwKSBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gKGludClsZW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwICYmICFzLT56X2VvZikgewotCi0gICAgICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHMtPnpfZW9mID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZmVycm9yKHMtPmZpbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICAgICAgfQotICAgICAgICBzLT5pbiArPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGluZmxhdGUoJihzLT5zdHJlYW0pLCBaX05PX0ZMVVNIKTsKLSAgICAgICAgcy0+aW4gLT0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLQotICAgICAgICBpZiAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgICAgICAvKiBDaGVjayBDUkMgYW5kIG9yaWdpbmFsIHNpemUgKi8KLSAgICAgICAgICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgc3RhcnQsICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotICAgICAgICAgICAgc3RhcnQgPSBzLT5zdHJlYW0ubmV4dF9vdXQ7Ci0KLSAgICAgICAgICAgIGlmIChnZXRMb25nKHMpICE9IHMtPmNyYykgewotICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAodm9pZClnZXRMb25nKHMpOwotICAgICAgICAgICAgICAgIC8qIFRoZSB1bmNvbXByZXNzZWQgbGVuZ3RoIHJldHVybmVkIGJ5IGFib3ZlIGdldGxvbmcoKSBtYXkgYmUKLSAgICAgICAgICAgICAgICAgKiBkaWZmZXJlbnQgZnJvbSBzLT5vdXQgaW4gY2FzZSBvZiBjb25jYXRlbmF0ZWQgLmd6IGZpbGVzLgotICAgICAgICAgICAgICAgICAqIENoZWNrIGZvciBzdWNoIGZpbGVzOgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNoZWNrX2hlYWRlcihzKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+el9lcnIgPT0gWl9PSykgewotICAgICAgICAgICAgICAgICAgICBpbmZsYXRlUmVzZXQoJihzLT5zdHJlYW0pKTsKLSAgICAgICAgICAgICAgICAgICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LIHx8IHMtPnpfZW9mKSBicmVhazsKLSAgICB9Ci0gICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCBzdGFydCwgKHVJbnQpKHMtPnN0cmVhbS5uZXh0X291dCAtIHN0YXJ0KSk7Ci0KLSAgICBpZiAobGVuID09IHMtPnN0cmVhbS5hdmFpbF9vdXQgJiYKLSAgICAgICAgKHMtPnpfZXJyID09IFpfREFUQV9FUlJPUiB8fCBzLT56X2VyciA9PSBaX0VSUk5PKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiAoaW50KShsZW4gLSBzLT5zdHJlYW0uYXZhaWxfb3V0KTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlCi0gICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6Z2V0YyhmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIHVuc2lnbmVkIGNoYXIgYzsKLQotICAgIHJldHVybiBnenJlYWQoZmlsZSwgJmMsIDEpID09IDEgPyBjIDogLTE7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBQdXNoIG9uZSBieXRlIGJhY2sgb250byB0aGUgc3RyZWFtLgotKi8KLWludCBaRVhQT1JUIGd6dW5nZXRjKGMsIGZpbGUpCi0gICAgaW50IGM7Ci0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicgfHwgYyA9PSBFT0YgfHwgcy0+YmFjayAhPSBFT0YpIHJldHVybiBFT0Y7Ci0gICAgcy0+YmFjayA9IGM7Ci0gICAgcy0+b3V0LS07Ci0gICAgcy0+bGFzdCA9IChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpOwotICAgIGlmIChzLT5sYXN0KSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHJldHVybiBjOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlCi0gICByZWFkLCBvciBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4KLSAgIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkCi0gICB3aXRoIGEgbnVsbCBjaGFyYWN0ZXIuCi0gICAgICBnemdldHMgcmV0dXJucyBidWYsIG9yIFpfTlVMTCBpbiBjYXNlIG9mIGVycm9yLgotCi0gICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1pemVkIGF0IGFsbC4KLSovCi1jaGFyICogWkVYUE9SVCBnemdldHMoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBsZW47Ci17Ci0gICAgY2hhciAqYiA9IGJ1ZjsKLSAgICBpZiAoYnVmID09IFpfTlVMTCB8fCBsZW4gPD0gMCkgcmV0dXJuIFpfTlVMTDsKLQotICAgIHdoaWxlICgtLWxlbiA+IDAgJiYgZ3pyZWFkKGZpbGUsIGJ1ZiwgMSkgPT0gMSAmJiAqYnVmKysgIT0gJ1xuJykgOwotICAgICpidWYgPSAnXDAnOwotICAgIHJldHVybiBiID09IGJ1ZiAmJiBsZW4gPiAwID8gWl9OVUxMIDogYjsKLX0KLQotCi0jaWZuZGVmIE5PX0daQ09NUFJFU1MKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3p3cml0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4KLSovCi1pbnQgWkVYUE9SVCBnendyaXRlIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcGMgYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKWJ1ZjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSBsZW47Ci0KLSAgICB3aGlsZSAocy0+c3RyZWFtLmF2YWlsX2luICE9IDApIHsKLQotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCA9PSAwKSB7Ci0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgICAgIGlmIChmd3JpdGUocy0+b3V0YnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpICE9IFpfQlVGU0laRSkgewotICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBkZWZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LKSBicmVhazsKLSAgICB9Ci0gICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCAoY29uc3QgQnl0ZWYgKilidWYsIGxlbik7Ci0KLSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX2luKTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3MgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgotICAgY29udHJvbCBvZiB0aGUgZm9ybWF0IHN0cmluZywgYXMgaW4gZnByaW50Zi4gZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCi0gICB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4KLSovCi0jaWZkZWYgU1REQwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAvKiBhcmdzICovIC4uLikKLXsKLSAgICBjaGFyIGJ1ZltaX1BSSU5URl9CVUZTSVpFXTsKLSAgICB2YV9saXN0IHZhOwotICAgIGludCBsZW47Ci0KLSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7Ci0gICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0jaWZkZWYgTk9fdnNucHJpbnRmCi0jICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICh2b2lkKXZzcHJpbnRmKGJ1ZiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemVvZihidWYpOyBsZW4rKykKLSAgICAgICAgaWYgKGJ1ZltsZW5dID09IDApIGJyZWFrOwotIyAgZWxzZQotICAgIGxlbiA9IHZzcHJpbnRmKGJ1ZiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSMgIGVuZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jICBlbHNlCi0gICAgbGVuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0jICBlbmRpZgotI2VuZGlmCi0gICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSAoaW50KXNpemVvZihidWYpIHx8IGJ1ZltzaXplb2YoYnVmKSAtIDFdICE9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnendyaXRlKGZpbGUsIGJ1ZiwgKHVuc2lnbmVkKWxlbik7Ci19Ci0jZWxzZSAvKiBub3QgQU5TSSBDICovCi0KLWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICAgICAgICAgICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgY29uc3QgY2hhciAqZm9ybWF0OwotICAgIGludCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCi0gICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMDsKLXsKLSAgICBjaGFyIGJ1ZltaX1BSSU5URl9CVUZTSVpFXTsKLSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwotI2lmZGVmIE5PX3NucHJpbnRmCi0jICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCi0gICAgc3ByaW50ZihidWYsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemVvZihidWYpOyBsZW4rKykKLSAgICAgICAgaWYgKGJ1ZltsZW5dID09IDApIGJyZWFrOwotIyAgZWxzZQotICAgIGxlbiA9IHNwcmludGYoYnVmLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotIyAgZW5kaWYKLSNlbHNlCi0jICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAotICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jICBlbHNlCi0gICAgbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0jICBlbmRpZgotI2VuZGlmCi0gICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSBzaXplb2YoYnVmKSB8fCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCBidWYsIGxlbik7Ci19Ci0jZW5kaWYKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6cHV0YyByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0YyhmaWxlLCBjKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCBjOwotewotICAgIHVuc2lnbmVkIGNoYXIgY2MgPSAodW5zaWduZWQgY2hhcikgYzsgLyogcmVxdWlyZWQgZm9yIGJpZyBlbmRpYW4gc3lzdGVtcyAqLwotCi0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgJmNjLCAxKSA9PSAxID8gKGludCljYyA6IC0xOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgV3JpdGVzIHRoZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUsIGV4Y2x1ZGluZwotICAgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pwdXRzKGZpbGUsIHMpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgY29uc3QgY2hhciAqczsKLXsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCAoY2hhciopcywgKHVuc2lnbmVkKXN0cmxlbihzKSk7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gVGhlIHBhcmFtZXRlcgotICAgZmx1c2ggaXMgYXMgaW4gdGhlIGRlZmxhdGUoKSBmdW5jdGlvbi4KLSovCi1sb2NhbCBpbnQgZG9fZmx1c2ggKGZpbGUsIGZsdXNoKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCBmbHVzaDsKLXsKLSAgICB1SW50IGxlbjsKLSAgICBpbnQgZG9uZSA9IDA7Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7IC8qIHNob3VsZCBiZSB6ZXJvIGFscmVhZHkgYW55d2F5ICovCi0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGxlbiA9IFpfQlVGU0laRSAtIHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKGxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoKHVJbnQpZndyaXRlKHMtPm91dGJ1ZiwgMSwgbGVuLCBzLT5maWxlKSAhPSBsZW4pIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFpfRVJSTk87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkb25lKSBicmVhazsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSksIGZsdXNoKTsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgLyogSWdub3JlIHRoZSBzZWNvbmQgb2YgdHdvIGNvbnNlY3V0aXZlIGZsdXNoZXM6ICovCi0gICAgICAgIGlmIChsZW4gPT0gMCAmJiBzLT56X2VyciA9PSBaX0JVRl9FUlJPUikgcy0+el9lcnIgPSBaX09LOwotCi0gICAgICAgIC8qIGRlZmxhdGUgaGFzIGZpbmlzaGVkIGZsdXNoaW5nIG9ubHkgd2hlbiBpdCBoYXNuJ3QgdXNlZCB1cAotICAgICAgICAgKiBhbGwgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlcjoKLSAgICAgICAgICovCi0gICAgICAgIGRvbmUgPSAocy0+c3RyZWFtLmF2YWlsX291dCAhPSAwIHx8IHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCk7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyICE9IFpfT0sgJiYgcy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuICBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0KLWludCBaRVhQT1JUIGd6Zmx1c2ggKGZpbGUsIGZsdXNoKQotICAgICBnekZpbGUgZmlsZTsKLSAgICAgaW50IGZsdXNoOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0gICAgaW50IGVyciA9IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCk7Ci0KLSAgICBpZiAoZXJyKSByZXR1cm4gZXJyOwotICAgIGZmbHVzaChzLT5maWxlKTsKLSAgICByZXR1cm4gIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBzLT56X2VycjsKLX0KLSNlbmRpZiAvKiBOT19HWkNPTVBSRVNTICovCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgU2V0cyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZSBnaXZlbgotICAgY29tcHJlc3NlZCBmaWxlLiBUaGUgb2Zmc2V0IHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBsb2NhdGlvbiBhcyBtZWFzdXJlZCBpbiBieXRlcyBmcm9tCi0gICB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotICAgICAgU0VFS19FTkQgaXMgbm90IGltcGxlbWVudGVkLCByZXR1cm5zIGVycm9yLgotICAgICAgSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBnenNlZWsgY2FuIGJlIGV4dHJlbWVseSBzbG93LgotKi8KLXpfb2ZmX3QgWkVYUE9SVCBnenNlZWsgKGZpbGUsIG9mZnNldCwgd2hlbmNlKQotICAgIGd6RmlsZSBmaWxlOwotICAgIHpfb2ZmX3Qgb2Zmc2V0OwotICAgIGludCB3aGVuY2U7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgd2hlbmNlID09IFNFRUtfRU5EIHx8Ci0gICAgICAgIHMtPnpfZXJyID09IFpfRVJSTk8gfHwgcy0+el9lcnIgPT0gWl9EQVRBX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAtMUw7Ci0gICAgfQotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICByZXR1cm4gLTFMOwotI2Vsc2UKLSAgICAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkgewotICAgICAgICAgICAgb2Zmc2V0IC09IHMtPmluOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXQgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIHplcm8gYnl0ZXMgdG8gd3JpdGUuICovCi0gICAgICAgIGlmIChzLT5pbmJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHMtPmluYnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7IC8qIGZvciBzZWVraW5nICovCi0gICAgICAgICAgICBpZiAocy0+aW5idWYgPT0gWl9OVUxMKSByZXR1cm4gLTFMOwotICAgICAgICAgICAgem1lbXplcm8ocy0+aW5idWYsIFpfQlVGU0laRSk7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKG9mZnNldCA+IDApICB7Ci0gICAgICAgICAgICB1SW50IHNpemUgPSBaX0JVRlNJWkU7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0IDwgWl9CVUZTSVpFKSBzaXplID0gKHVJbnQpb2Zmc2V0OwotCi0gICAgICAgICAgICBzaXplID0gZ3p3cml0ZShmaWxlLCBzLT5pbmJ1Ziwgc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gLTFMOwotCi0gICAgICAgICAgICBvZmZzZXQgLT0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcy0+aW47Ci0jZW5kaWYKLSAgICB9Ci0gICAgLyogUmVzdCBvZiBmdW5jdGlvbiBpcyBmb3IgcmVhZGluZyBvbmx5ICovCi0KLSAgICAvKiBjb21wdXRlIGFic29sdXRlIHBvc2l0aW9uICovCi0gICAgaWYgKHdoZW5jZSA9PSBTRUVLX0NVUikgewotICAgICAgICBvZmZzZXQgKz0gcy0+b3V0OwotICAgIH0KLSAgICBpZiAob2Zmc2V0IDwgMCkgcmV0dXJuIC0xTDsKLQotICAgIGlmIChzLT50cmFuc3BhcmVudCkgewotICAgICAgICAvKiBtYXAgdG8gZnNlZWsgKi8KLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICAgICAgaWYgKGZzZWVrKHMtPmZpbGUsIG9mZnNldCwgU0VFS19TRVQpIDwgMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICBzLT5pbiA9IHMtPm91dCA9IG9mZnNldDsKLSAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAgICB9Ci0KLSAgICAvKiBGb3IgYSBuZWdhdGl2ZSBzZWVrLCByZXdpbmQgYW5kIHVzZSBwb3NpdGl2ZSBzZWVrICovCi0gICAgaWYgKG9mZnNldCA+PSBzLT5vdXQpIHsKLSAgICAgICAgb2Zmc2V0IC09IHMtPm91dDsKLSAgICB9IGVsc2UgaWYgKGd6cmV3aW5kKGZpbGUpIDwgMCkgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLSAgICAvKiBvZmZzZXQgaXMgbm93IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcC4gKi8KLQotICAgIGlmIChvZmZzZXQgIT0gMCAmJiBzLT5vdXRidWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgIHMtPm91dGJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwotICAgICAgICBpZiAocy0+b3V0YnVmID09IFpfTlVMTCkgcmV0dXJuIC0xTDsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCAmJiBzLT5iYWNrICE9IEVPRikgewotICAgICAgICBzLT5iYWNrID0gRU9GOwotICAgICAgICBzLT5vdXQrKzsKLSAgICAgICAgb2Zmc2V0LS07Ci0gICAgICAgIGlmIChzLT5sYXN0KSBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICB9Ci0gICAgd2hpbGUgKG9mZnNldCA+IDApICB7Ci0gICAgICAgIGludCBzaXplID0gWl9CVUZTSVpFOwotICAgICAgICBpZiAob2Zmc2V0IDwgWl9CVUZTSVpFKSBzaXplID0gKGludClvZmZzZXQ7Ci0KLSAgICAgICAgc2l6ZSA9IGd6cmVhZChmaWxlLCBzLT5vdXRidWYsICh1SW50KXNpemUpOwotICAgICAgICBpZiAoc2l6ZSA8PSAwKSByZXR1cm4gLTFMOwotICAgICAgICBvZmZzZXQgLT0gc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHMtPm91dDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJld2luZHMgaW5wdXQgZmlsZS4KLSovCi1pbnQgWkVYUE9SVCBnenJld2luZCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIC0xOwotCi0gICAgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBzLT5iYWNrID0gRU9GOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBpZiAoIXMtPnRyYW5zcGFyZW50KSAodm9pZClpbmZsYXRlUmVzZXQoJnMtPnN0cmVhbSk7Ci0gICAgcy0+aW4gPSAwOwotICAgIHMtPm91dCA9IDA7Ci0gICAgcmV0dXJuIGZzZWVrKHMtPmZpbGUsIHMtPnN0YXJ0LCBTRUVLX1NFVCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKLSAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KLSovCi16X29mZl90IFpFWFBPUlQgZ3p0ZWxsIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIHJldHVybiBnenNlZWsoZmlsZSwgMEwsIFNFRUtfQ1VSKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgMSB3aGVuIEVPRiBoYXMgcHJldmlvdXNseSBiZWVuIGRldGVjdGVkIHJlYWRpbmcgdGhlIGdpdmVuCi0gICBpbnB1dCBzdHJlYW0sIG90aGVyd2lzZSB6ZXJvLgotKi8KLWludCBaRVhQT1JUIGd6ZW9mIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICAvKiBXaXRoIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzIHRoYXQgY2FuIGhhdmUgZW1iZWRkZWQKLSAgICAgKiBjcmMgdHJhaWxlcnMsIHpfZW9mIGlzIG5vIGxvbmdlciB0aGUgb25seS9iZXN0IGluZGljYXRvciBvZiBFT0YKLSAgICAgKiBvbiBhIGd6X3N0cmVhbS4gSGFuZGxlIGVuZC1vZi1zdHJlYW0gZXJyb3IgZXhwbGljaXRseSBoZXJlLgotICAgICAqLwotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAwOwotICAgIGlmIChzLT56X2VvZikgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgMSBpZiByZWFkaW5nIGFuZCBkb2luZyBzbyB0cmFuc3BhcmVudGx5LCBvdGhlcndpc2UgemVyby4KLSovCi1pbnQgWkVYUE9SVCBnemRpcmVjdCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHMtPnRyYW5zcGFyZW50OwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgIE91dHB1dHMgYSBsb25nIGluIExTQiBvcmRlciB0byB0aGUgZ2l2ZW4gZmlsZQotKi8KLWxvY2FsIHZvaWQgcHV0TG9uZyAoZmlsZSwgeCkKLSAgICBGSUxFICpmaWxlOwotICAgIHVMb25nIHg7Ci17Ci0gICAgaW50IG47Ci0gICAgZm9yIChuID0gMDsgbiA8IDQ7IG4rKykgewotICAgICAgICBmcHV0YygoaW50KSh4ICYgMHhmZiksIGZpbGUpOwotICAgICAgICB4ID4+PSA4OwotICAgIH0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBSZWFkcyBhIGxvbmcgaW4gTFNCIG9yZGVyIGZyb20gdGhlIGdpdmVuIGd6X3N0cmVhbS4gU2V0cyB6X2VyciBpbiBjYXNlCi0gICBvZiBlcnJvci4KLSovCi1sb2NhbCB1TG9uZyBnZXRMb25nIChzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICB1TG9uZyB4ID0gKHVMb25nKWdldF9ieXRlKHMpOwotICAgIGludCBjOwotCi0gICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8ODsKLSAgICB4ICs9ICgodUxvbmcpZ2V0X2J5dGUocykpPDwxNjsKLSAgICBjID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKGMgPT0gRU9GKSBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICB4ICs9ICgodUxvbmcpYyk8PDI0OwotICAgIHJldHVybiB4OwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaWYgbmVjZXNzYXJ5LCBjbG9zZXMgdGhlIGNvbXByZXNzZWQgZmlsZQotICAgYW5kIGRlYWxsb2NhdGVzIGFsbCB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLgotKi8KLWludCBaRVhQT1JUIGd6Y2xvc2UgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgaWYgKGRvX2ZsdXNoIChmaWxlLCBaX0ZJTklTSCkgIT0gWl9PSykKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotCi0gICAgICAgIHB1dExvbmcgKHMtPmZpbGUsIHMtPmNyYyk7Ci0gICAgICAgIHB1dExvbmcgKHMtPmZpbGUsICh1TG9uZykocy0+aW4gJiAweGZmZmZmZmZmKSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIGRlc3Ryb3koKGd6X3N0cmVhbSopZmlsZSk7Ci19Ci0KLSNpZmRlZiBTVERDCi0jICBkZWZpbmUgenN0cmVycm9yKGVycm51bSkgc3RyZXJyb3IoZXJybnVtKQotI2Vsc2UKLSMgIGRlZmluZSB6c3RyZXJyb3IoZXJybnVtKSAiIgotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUgbGFzdCBlcnJvciB3aGljaCBvY2N1cnJlZCBvbiB0aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gSWYgYW4KLSAgIGVycm9yIG9jY3VycmVkIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgbm90IGluIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LAotICAgZXJybnVtIGlzIHNldCB0byBaX0VSUk5PIGFuZCB0aGUgYXBwbGljYXRpb24gbWF5IGNvbnN1bHQgZXJybm8KLSAgIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KLSovCi1jb25zdCBjaGFyICogWkVYUE9SVCBnemVycm9yIChmaWxlLCBlcnJudW0pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50ICplcnJudW07Ci17Ci0gICAgY2hhciAqbTsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCkgewotICAgICAgICAqZXJybnVtID0gWl9TVFJFQU1fRVJST1I7Ci0gICAgICAgIHJldHVybiAoY29uc3QgY2hhciopRVJSX01TRyhaX1NUUkVBTV9FUlJPUik7Ci0gICAgfQotICAgICplcnJudW0gPSBzLT56X2VycjsKLSAgICBpZiAoKmVycm51bSA9PSBaX09LKSByZXR1cm4gKGNvbnN0IGNoYXIqKSIiOwotCi0gICAgbSA9IChjaGFyKikoKmVycm51bSA9PSBaX0VSUk5PID8genN0cmVycm9yKGVycm5vKSA6IHMtPnN0cmVhbS5tc2cpOwotCi0gICAgaWYgKG0gPT0gTlVMTCB8fCAqbSA9PSAnXDAnKSBtID0gKGNoYXIqKUVSUl9NU0cocy0+el9lcnIpOwotCi0gICAgVFJZRlJFRShzLT5tc2cpOwotICAgIHMtPm1zZyA9IChjaGFyKilBTExPQyhzdHJsZW4ocy0+cGF0aCkgKyBzdHJsZW4obSkgKyAzKTsKLSAgICBpZiAocy0+bXNnID09IFpfTlVMTCkgcmV0dXJuIChjb25zdCBjaGFyKilFUlJfTVNHKFpfTUVNX0VSUk9SKTsKLSAgICBzdHJjcHkocy0+bXNnLCBzLT5wYXRoKTsKLSAgICBzdHJjYXQocy0+bXNnLCAiOiAiKTsKLSAgICBzdHJjYXQocy0+bXNnLCBtKTsKLSAgICByZXR1cm4gKGNvbnN0IGNoYXIqKXMtPm1zZzsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIENsZWFyIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MsIGFuZCBkbyB0aGUgc2FtZSBmb3IgdGhlIHJlYWwgZmlsZS4KLSovCi12b2lkIFpFWFBPUlQgZ3pjbGVhcmVyciAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCkgcmV0dXJuOwotICAgIGlmIChzLT56X2VyciAhPSBaX1NUUkVBTV9FTkQpIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgY2xlYXJlcnIocy0+ZmlsZSk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3psaWIuYyBiL01vZHVsZXMvemxpYi9nemxpYi5jCmluZGV4IDYwM2U2MGUuLmZhZTIwMmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nemxpYi5jCisrKyBiL01vZHVsZXMvemxpYi9nemxpYi5jCkBAIC0xLDE5ICsxLDIzIEBACiAvKiBnemxpYi5jIC0tIHpsaWIgZnVuY3Rpb25zIGNvbW1vbiB0byByZWFkaW5nIGFuZCB3cml0aW5nIGd6aXAgZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKICNpbmNsdWRlICJnemd1dHMuaCIKIAorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18pCisjICBkZWZpbmUgTFNFRUsgX2xzZWVraTY0CisjZWxzZQogI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCiAjICBkZWZpbmUgTFNFRUsgbHNlZWs2NAogI2Vsc2UKICMgIGRlZmluZSBMU0VFSyBsc2VlawogI2VuZGlmCisjZW5kaWYKIAogLyogTG9jYWwgZnVuY3Rpb25zICovCiBsb2NhbCB2b2lkIGd6X3Jlc2V0IE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGd6RmlsZSBnel9vcGVuIE9GKChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSk7Citsb2NhbCBnekZpbGUgZ3pfb3BlbiBPRigoY29uc3Qgdm9pZCAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOwogCiAjaWYgZGVmaW5lZCBVTkRFUl9DRQogCkBAIC03MSwyOCArNzUsNDAgQEAKIGxvY2FsIHZvaWQgZ3pfcmVzZXQoc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogeworICAgIHN0YXRlLT54LmhhdmUgPSAwOyAgICAgICAgICAgICAgLyogbm8gb3V0cHV0IGRhdGEgYXZhaWxhYmxlICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsgICAvKiBmb3IgcmVhZGluZyAuLi4gKi8KLSAgICAgICAgc3RhdGUtPmhhdmUgPSAwOyAgICAgICAgICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLwogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsgICAgICAgICAgICAgLyogbm90IGF0IGVuZCBvZiBmaWxlICovCisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsgICAgICAgICAgICAvKiBoYXZlIG5vdCByZWFkIHBhc3QgZW5kIHlldCAqLwogICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAgICAgLyogbG9vayBmb3IgZ3ppcCBoZWFkZXIgKi8KLSAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7ICAgICAgICAgIC8qIGRlZmF1bHQgZm9yIGVtcHR5IGZpbGUgKi8KICAgICB9CiAgICAgc3RhdGUtPnNlZWsgPSAwOyAgICAgICAgICAgICAgICAvKiBubyBzZWVrIHJlcXVlc3QgcGVuZGluZyAqLwogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsgICAgLyogY2xlYXIgZXJyb3IgKi8KLSAgICBzdGF0ZS0+cG9zID0gMDsgICAgICAgICAgICAgICAgIC8qIG5vIHVuY29tcHJlc3NlZCBkYXRhIHlldCAqLworICAgIHN0YXRlLT54LnBvcyA9IDA7ICAgICAgICAgICAgICAgLyogbm8gdW5jb21wcmVzc2VkIGRhdGEgeWV0ICovCiAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOyAgICAgICAvKiBubyBpbnB1dCBkYXRhIHlldCAqLwogfQogCiAvKiBPcGVuIGEgZ3ppcCBmaWxlIGVpdGhlciBieSBuYW1lIG9yIGZpbGUgZGVzY3JpcHRvci4gKi8KIGxvY2FsIGd6RmlsZSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgY29uc3Qgdm9pZCAqcGF0aDsKICAgICBpbnQgZmQ7CiAgICAgY29uc3QgY2hhciAqbW9kZTsKIHsKICAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgc2l6ZV90IGxlbjsKKyAgICBpbnQgb2ZsYWc7CisjaWZkZWYgT19DTE9FWEVDCisgICAgaW50IGNsb2V4ZWMgPSAwOworI2VuZGlmCisjaWZkZWYgT19FWENMCisgICAgaW50IGV4Y2x1c2l2ZSA9IDA7CisjZW5kaWYKKworICAgIC8qIGNoZWNrIGlucHV0ICovCisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBhbGxvY2F0ZSBnekZpbGUgc3RydWN0dXJlIHRvIHJldHVybiAqLwotICAgIHN0YXRlID0gbWFsbG9jKHNpemVvZihnel9zdGF0ZSkpOworICAgIHN0YXRlID0gKGd6X3N0YXRlcCltYWxsb2Moc2l6ZW9mKGd6X3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN0YXRlLT5zaXplID0gMDsgICAgICAgICAgICAvKiBubyBidWZmZXJzIGFsbG9jYXRlZCB5ZXQgKi8KQEAgLTEwMyw2ICsxMTksNyBAQAogICAgIHN0YXRlLT5tb2RlID0gR1pfTk9ORTsKICAgICBzdGF0ZS0+bGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9ERUZBVUxUX1NUUkFURUdZOworICAgIHN0YXRlLT5kaXJlY3QgPSAwOwogICAgIHdoaWxlICgqbW9kZSkgewogICAgICAgICBpZiAoKm1vZGUgPj0gJzAnICYmICptb2RlIDw9ICc5JykKICAgICAgICAgICAgIHN0YXRlLT5sZXZlbCA9ICptb2RlIC0gJzAnOwpAQCAtMTI0LDYgKzE0MSwxNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgY2FzZSAnYic6ICAgICAgIC8qIGlnbm9yZSAtLSB3aWxsIHJlcXVlc3QgYmluYXJ5IGFueXdheSAqLwogICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAgICAgY2FzZSAnZSc6CisgICAgICAgICAgICAgICAgY2xvZXhlYyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBPX0VYQ0wKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfRklMVEVSRUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzUsNiArMTYyLDEwIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdGJzoKICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJWEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgLyogY291bGQgY29uc2lkZXIgYXMgYW4gZXJyb3IsIGJ1dCBqdXN0IGlnbm9yZSAqLwogICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIH0KQEAgLTE0NywzMCArMTc4LDcxIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIC8qIGNhbid0IGZvcmNlIHRyYW5zcGFyZW50IHJlYWQgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAgICAgICBpZiAoc3RhdGUtPmRpcmVjdCkgeworICAgICAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsgICAgICAvKiBmb3IgZW1wdHkgZmlsZSAqLworICAgIH0KKwogICAgIC8qIHNhdmUgdGhlIHBhdGggbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICBzdGF0ZS0+cGF0aCA9IG1hbGxvYyhzdHJsZW4ocGF0aCkgKyAxKTsKKyNpZmRlZiBfV0lOMzIKKyAgICBpZiAoZmQgPT0gLTIpIHsKKyAgICAgICAgbGVuID0gd2NzdG9tYnMoTlVMTCwgcGF0aCwgMCk7CisgICAgICAgIGlmIChsZW4gPT0gKHNpemVfdCktMSkKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKilwYXRoKTsKKyAgICBzdGF0ZS0+cGF0aCA9IChjaGFyICopbWFsbG9jKGxlbiArIDEpOwogICAgIGlmIChzdGF0ZS0+cGF0aCA9PSBOVUxMKSB7CiAgICAgICAgIGZyZWUoc3RhdGUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc3RyY3B5KHN0YXRlLT5wYXRoLCBwYXRoKTsKKyNpZmRlZiBfV0lOMzIKKyAgICBpZiAoZmQgPT0gLTIpCisgICAgICAgIGlmIChsZW4pCisgICAgICAgICAgICB3Y3N0b21icyhzdGF0ZS0+cGF0aCwgcGF0aCwgbGVuICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICooc3RhdGUtPnBhdGgpID0gMDsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgICAgICBzbnByaW50ZihzdGF0ZS0+cGF0aCwgbGVuICsgMSwgIiVzIiwgKGNvbnN0IGNoYXIgKilwYXRoKTsKKyNlbHNlCisgICAgICAgIHN0cmNweShzdGF0ZS0+cGF0aCwgcGF0aCk7CisjZW5kaWYKIAotICAgIC8qIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbW9kZSAob3IganVzdCB1c2UgZmQpICovCi0gICAgc3RhdGUtPmZkID0gZmQgIT0gLTEgPyBmZCA6Ci0gICAgICAgIG9wZW4ocGF0aCwKKyAgICAvKiBjb21wdXRlIHRoZSBmbGFncyBmb3Igb3BlbigpICovCisgICAgb2ZsYWcgPQogI2lmZGVmIE9fTEFSR0VGSUxFCi0gICAgICAgICAgICBPX0xBUkdFRklMRSB8CisgICAgICAgIE9fTEFSR0VGSUxFIHwKICNlbmRpZgogI2lmZGVmIE9fQklOQVJZCi0gICAgICAgICAgICBPX0JJTkFSWSB8CisgICAgICAgIE9fQklOQVJZIHwKICNlbmRpZgotICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPwotICAgICAgICAgICAgICAgIE9fUkRPTkxZIDoKLSAgICAgICAgICAgICAgICAoT19XUk9OTFkgfCBPX0NSRUFUIHwgKAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9PSBHWl9XUklURSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBPX1RSVU5DIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIE9fQVBQRU5EKSkpLAotICAgICAgICAgICAgMDY2Nik7CisjaWZkZWYgT19DTE9FWEVDCisgICAgICAgIChjbG9leGVjID8gT19DTE9FWEVDIDogMCkgfAorI2VuZGlmCisgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KKyAgICAgICAgIE9fUkRPTkxZIDoKKyAgICAgICAgIChPX1dST05MWSB8IE9fQ1JFQVQgfAorI2lmZGVmIE9fRVhDTAorICAgICAgICAgIChleGNsdXNpdmUgPyBPX0VYQ0wgOiAwKSB8CisjZW5kaWYKKyAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfV1JJVEUgPworICAgICAgICAgICBPX1RSVU5DIDoKKyAgICAgICAgICAgT19BUFBFTkQpKSk7CisKKyAgICAvKiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzIChvciBqdXN0IHVzZSBmZCkgKi8KKyAgICBzdGF0ZS0+ZmQgPSBmZCA+IC0xID8gZmQgOiAoCisjaWZkZWYgX1dJTjMyCisgICAgICAgIGZkID09IC0yID8gX3dvcGVuKHBhdGgsIG9mbGFnLCAwNjY2KSA6CisjZW5kaWYKKyAgICAgICAgb3BlbigoY29uc3QgY2hhciAqKXBhdGgsIG9mbGFnLCAwNjY2KSk7CiAgICAgaWYgKHN0YXRlLT5mZCA9PSAtMSkgewogICAgICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKICAgICAgICAgZnJlZShzdGF0ZSk7CkBAIC0yMTYsMTUgKzI4OCwyOSBAQAogICAgIGNoYXIgKnBhdGg7ICAgICAgICAgLyogaWRlbnRpZmllciBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KICAgICBnekZpbGUgZ3o7CiAKLSAgICBpZiAoZmQgPT0gLTEgfHwgKHBhdGggPSBtYWxsb2MoNyArIDMgKiBzaXplb2YoaW50KSkpID09IE5VTEwpCisgICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gKGNoYXIgKiltYWxsb2MoNyArIDMgKiBzaXplb2YoaW50KSkpID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYocGF0aCwgNyArIDMgKiBzaXplb2YoaW50KSwgIjxmZDolZD4iLCBmZCk7IC8qIGZvciBkZWJ1Z2dpbmcgKi8KKyNlbHNlCiAgICAgc3ByaW50ZihwYXRoLCAiPGZkOiVkPiIsIGZkKTsgICAvKiBmb3IgZGVidWdnaW5nICovCisjZW5kaWYKICAgICBneiA9IGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpOwogICAgIGZyZWUocGF0aCk7CiAgICAgcmV0dXJuIGd6OwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCisjaWZkZWYgX1dJTjMyCitnekZpbGUgWkVYUE9SVCBnem9wZW5fdyhwYXRoLCBtb2RlKQorICAgIGNvbnN0IHdjaGFyX3QgKnBhdGg7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMiwgbW9kZSk7Cit9CisjZW5kaWYKKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLwogaW50IFpFWFBPUlQgZ3pidWZmZXIoZmlsZSwgc2l6ZSkKICAgICBnekZpbGUgZmlsZTsKICAgICB1bnNpZ25lZCBzaXplOwpAQCAtMjQzLDggKzMyOSw4IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNoZWNrIGFuZCBzZXQgcmVxdWVzdGVkIHNpemUgKi8KLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHNpemUgPCAyKQorICAgICAgICBzaXplID0gMjsgICAgICAgICAgICAgICAvKiBuZWVkIHR3byBieXRlcyB0byBjaGVjayBtYWdpYyBoZWFkZXIgKi8KICAgICBzdGF0ZS0+d2FudCA9IHNpemU7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yNjEsNyArMzQ3LDggQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAogICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBiYWNrIHVwIGFuZCBzdGFydCBvdmVyICovCkBAIC0yODksNyArMzc2LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogY2hlY2sgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNhbiBvbmx5IHNlZWsgZnJvbSBzdGFydCBvciByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uICovCkBAIC0yOTgsMzEgKzM4NSwzMiBAQAogCiAgICAgLyogbm9ybWFsaXplIG9mZnNldCB0byBhIFNFRUtfQ1VSIHNwZWNpZmljYXRpb24gKi8KICAgICBpZiAod2hlbmNlID09IFNFRUtfU0VUKQotICAgICAgICBvZmZzZXQgLT0gc3RhdGUtPnBvczsKKyAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT54LnBvczsKICAgICBlbHNlIGlmIChzdGF0ZS0+c2VlaykKICAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT5za2lwOwogICAgIHN0YXRlLT5zZWVrID0gMDsKIAogICAgIC8qIGlmIHdpdGhpbiByYXcgYXJlYSB3aGlsZSByZWFkaW5nLCBqdXN0IGdvIHRoZXJlICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgJiYgc3RhdGUtPmhvdyA9PSBDT1BZICYmCi0gICAgICAgIHN0YXRlLT5wb3MgKyBvZmZzZXQgPj0gc3RhdGUtPnJhdykgewotICAgICAgICByZXQgPSBMU0VFSyhzdGF0ZS0+ZmQsIG9mZnNldCAtIHN0YXRlLT5oYXZlLCBTRUVLX0NVUik7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKyBvZmZzZXQgPj0gMCkgeworICAgICAgICByZXQgPSBMU0VFSyhzdGF0ZS0+ZmQsIG9mZnNldCAtIHN0YXRlLT54LmhhdmUsIFNFRUtfQ1VSKTsKICAgICAgICAgaWYgKHJldCA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKICAgICAgICAgc3RhdGUtPmVvZiA9IDA7CisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsKICAgICAgICAgc3RhdGUtPnNlZWsgPSAwOwogICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiAgICAgICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiBzdGF0ZS0+cG9zOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gb2Zmc2V0OworICAgICAgICByZXR1cm4gc3RhdGUtPngucG9zOwogICAgIH0KIAogICAgIC8qIGNhbGN1bGF0ZSBza2lwIGFtb3VudCwgcmV3aW5kaW5nIGlmIG5lZWRlZCBmb3IgYmFjayBzZWVrIHdoZW4gcmVhZGluZyAqLwogICAgIGlmIChvZmZzZXQgPCAwKSB7CiAgICAgICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEKSAgICAgICAgIC8qIHdyaXRpbmcgLS0gY2FuJ3QgZ28gYmFja3dhcmRzICovCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIG9mZnNldCArPSBzdGF0ZS0+cG9zOworICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPngucG9zOwogICAgICAgICBpZiAob2Zmc2V0IDwgMCkgICAgICAgICAgICAgICAgICAgICAvKiBiZWZvcmUgc3RhcnQgb2YgZmlsZSEgKi8KICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGd6cmV3aW5kKGZpbGUpID09IC0xKSAgICAgICAgICAgLyogcmV3aW5kLCB0aGVuIHNraXAgdG8gb2Zmc2V0ICovCkBAIC0zMzEsMTEgKzQxOSwxMSBAQAogCiAgICAgLyogaWYgcmVhZGluZywgc2tpcCB3aGF0J3MgaW4gb3V0cHV0IGJ1ZmZlciAob25lIGxlc3MgZ3pnZXRjKCkgY2hlY2spICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKLSAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+aGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+aGF2ZSA+IG9mZnNldCA/Ci0gICAgICAgICAgICAodW5zaWduZWQpb2Zmc2V0IDogc3RhdGUtPmhhdmU7Ci0gICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+eC5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT54LmhhdmUgPiBvZmZzZXQgPworICAgICAgICAgICAgKHVuc2lnbmVkKW9mZnNldCA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgb2Zmc2V0IC09IG47CiAgICAgfQogCkBAIC0zNDQsNyArNDMyLDcgQEAKICAgICAgICAgc3RhdGUtPnNlZWsgPSAxOwogICAgICAgICBzdGF0ZS0+c2tpcCA9IG9mZnNldDsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRlLT5wb3MgKyBvZmZzZXQ7CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIG9mZnNldDsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtMzczLDcgKzQ2MSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHJldHVybiBwb3NpdGlvbiAqLwotICAgIHJldHVybiBzdGF0ZS0+cG9zICsgKHN0YXRlLT5zZWVrID8gc3RhdGUtPnNraXAgOiAwKTsKKyAgICByZXR1cm4gc3RhdGUtPngucG9zICsgKHN0YXRlLT5zZWVrID8gc3RhdGUtPnNraXAgOiAwKTsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDMzLDggKzUyMSw3IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLyogcmV0dXJuIGVuZC1vZi1maWxlIHN0YXRlICovCi0gICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPwotICAgICAgICAoc3RhdGUtPmVvZiAmJiBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9PSAwICYmIHN0YXRlLT5oYXZlID09IDApIDogMDsKKyAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/IHN0YXRlLT5wYXN0IDogMDsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDU0LDcgKzU0MSw4IEBACiAgICAgLyogcmV0dXJuIGVycm9yIGluZm9ybWF0aW9uICovCiAgICAgaWYgKGVycm51bSAhPSBOVUxMKQogICAgICAgICAqZXJybnVtID0gc3RhdGUtPmVycjsKLSAgICByZXR1cm4gc3RhdGUtPm1zZyA9PSBOVUxMID8gIiIgOiBzdGF0ZS0+bXNnOworICAgIHJldHVybiBzdGF0ZS0+ZXJyID09IFpfTUVNX0VSUk9SID8gIm91dCBvZiBtZW1vcnkiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS0+bXNnID09IE5VTEwgPyAiIiA6IHN0YXRlLT5tc2cpOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC00NzEsOCArNTU5LDEwIEBACiAgICAgICAgIHJldHVybjsKIAogICAgIC8qIGNsZWFyIGVycm9yIGFuZCBlbmQtb2YtZmlsZSAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKQorICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7CiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CisgICAgfQogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKIH0KIApAQCAtNDk0LDI2ICs1ODQsMzMgQEAKICAgICAgICAgc3RhdGUtPm1zZyA9IE5VTEw7CiAgICAgfQogCisgICAgLyogaWYgZmF0YWwsIHNldCBzdGF0ZS0+eC5oYXZlIHRvIDAgc28gdGhhdCB0aGUgZ3pnZXRjKCkgbWFjcm8gZmFpbHMgKi8KKyAgICBpZiAoZXJyICE9IFpfT0sgJiYgZXJyICE9IFpfQlVGX0VSUk9SKQorICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKKwogICAgIC8qIHNldCBlcnJvciBjb2RlLCBhbmQgaWYgbm8gbWVzc2FnZSwgdGhlbiBkb25lICovCiAgICAgc3RhdGUtPmVyciA9IGVycjsKICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8qIGZvciBhbiBvdXQgb2YgbWVtb3J5IGVycm9yLCBzYXZlIGFzIHN0YXRpYyBzdHJpbmcgKi8KLSAgICBpZiAoZXJyID09IFpfTUVNX0VSUk9SKSB7Ci0gICAgICAgIHN0YXRlLT5tc2cgPSAoY2hhciAqKW1zZzsKKyAgICAvKiBmb3IgYW4gb3V0IG9mIG1lbW9yeSBlcnJvciwgcmV0dXJuIGxpdGVyYWwgc3RyaW5nIHdoZW4gcmVxdWVzdGVkICovCisgICAgaWYgKGVyciA9PSBaX01FTV9FUlJPUikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8qIGNvbnN0cnVjdCBlcnJvciBtZXNzYWdlIHdpdGggcGF0aCAqLwotICAgIGlmICgoc3RhdGUtPm1zZyA9IG1hbGxvYyhzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzKSkgPT0gTlVMTCkgeworICAgIGlmICgoc3RhdGUtPm1zZyA9IChjaGFyICopbWFsbG9jKHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMpKSA9PQorICAgICAgICAgICAgTlVMTCkgewogICAgICAgICBzdGF0ZS0+ZXJyID0gWl9NRU1fRVJST1I7Ci0gICAgICAgIHN0YXRlLT5tc2cgPSAoY2hhciAqKSJvdXQgb2YgbWVtb3J5IjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKHN0YXRlLT5tc2csIHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMsCisgICAgICAgICAgICAgIiVzJXMlcyIsIHN0YXRlLT5wYXRoLCAiOiAiLCBtc2cpOworI2Vsc2UKICAgICBzdHJjcHkoc3RhdGUtPm1zZywgc3RhdGUtPnBhdGgpOwogICAgIHN0cmNhdChzdGF0ZS0+bXNnLCAiOiAiKTsKICAgICBzdHJjYXQoc3RhdGUtPm1zZywgbXNnKTsKKyNlbmRpZgogICAgIHJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6cmVhZC5jIGIvTW9kdWxlcy96bGliL2d6cmVhZC5jCmluZGV4IDU0ODIwMWEuLmJmNDUzOGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nenJlYWQuYworKysgYi9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKQEAgLTEsNSArMSw1IEBACiAvKiBnenJlYWQuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC04LDEwICs4LDkgQEAKIC8qIExvY2FsIGZ1bmN0aW9ucyAqLwogbG9jYWwgaW50IGd6X2xvYWQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwgdW5zaWduZWQgKikpOwogbG9jYWwgaW50IGd6X2F2YWlsIE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGludCBnel9uZXh0NCBPRigoZ3pfc3RhdGVwLCB1bnNpZ25lZCBsb25nICopKTsKLWxvY2FsIGludCBnel9oZWFkIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9sb29rIE9GKChnel9zdGF0ZXApKTsKIGxvY2FsIGludCBnel9kZWNvbXAgT0YoKGd6X3N0YXRlcCkpOwotbG9jYWwgaW50IGd6X21ha2UgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X2ZldGNoIE9GKChnel9zdGF0ZXApKTsKIGxvY2FsIGludCBnel9za2lwIE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRfdCkpOwogCiAvKiBVc2UgcmVhZCgpIHRvIGxvYWQgYSBidWZmZXIgLS0gcmV0dXJuIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIFJlYWQgZnJvbQpAQCAtNDYsNzMgKzQ1LDU0IEBACiAgICBlcnJvciwgMCBvdGhlcndpc2UuICBOb3RlIHRoYXQgdGhlIGVvZiBmbGFnIGlzIHNldCB3aGVuIHRoZSBlbmQgb2YgdGhlIGlucHV0CiAgICBmaWxlIGlzIHJlYWNoZWQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1heSBiZSB1bnVzZWQgZGF0YSBpbiB0aGUgYnVmZmVyLiAgT25jZQogICAgdGhhdCBkYXRhIGhhcyBiZWVuIHVzZWQsIG5vIG1vcmUgYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlYWQgdGhlIGZpbGUuCi0gICBnel9hdmFpbCgpIGFzc3VtZXMgdGhhdCBzdHJtLT5hdmFpbF9pbiA9PSAwLiAqLworICAgSWYgc3RybS0+YXZhaWxfaW4gIT0gMCwgdGhlbiB0aGUgY3VycmVudCBkYXRhIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZSBpbnB1dCBidWZmZXIsIGFuZCB0aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgd2l0aCB0aGUKKyAgIGF2YWlsYWJsZSBkYXRhIGZyb20gdGhlIGlucHV0IGZpbGUuICovCiBsb2NhbCBpbnQgZ3pfYXZhaWwoc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogeworICAgIHVuc2lnbmVkIGdvdDsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoc3RhdGUtPmVvZiA9PSAwKSB7Ci0gICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+aW4sIHN0YXRlLT5zaXplLAotICAgICAgICAgICAgICAgICh1bnNpZ25lZCAqKSYoc3RybS0+YXZhaWxfaW4pKSA9PSAtMSkKKyAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luKSB7ICAgICAgIC8qIGNvcHkgd2hhdCdzIHRoZXJlIHRvIHRoZSBzdGFydCAqLworICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcCA9IHN0YXRlLT5pbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGNoYXIgKnEgPSBzdHJtLT5uZXh0X2luOworICAgICAgICAgICAgdW5zaWduZWQgbiA9IHN0cm0tPmF2YWlsX2luOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICpwKysgPSAqcSsrOworICAgICAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPmluICsgc3RybS0+YXZhaWxfaW4sCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zaXplIC0gc3RybS0+YXZhaWxfaW4sICZnb3QpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBnb3Q7CiAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi0vKiBHZXQgbmV4dCBieXRlIGZyb20gaW5wdXQsIG9yIC0xIGlmIGVuZCBvciBlcnJvci4gKi8KLSNkZWZpbmUgTkVYVCgpICgoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpID8gLTEgOiBcCi0gICAgICAgICAgICAgICAgKHN0cm0tPmF2YWlsX2luID09IDAgPyAtMSA6IFwKLSAgICAgICAgICAgICAgICAgKHN0cm0tPmF2YWlsX2luLS0sICooc3RybS0+bmV4dF9pbikrKykpKQotCi0vKiBHZXQgYSBmb3VyLWJ5dGUgbGl0dGxlLWVuZGlhbiBpbnRlZ2VyIGFuZCByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCB0aGUgdmFsdWUKLSAgIGluICpyZXQuICBPdGhlcndpc2UgLTEgaXMgcmV0dXJuZWQgYW5kICpyZXQgaXMgbm90IG1vZGlmaWVkLiAqLwotbG9jYWwgaW50IGd6X25leHQ0KHN0YXRlLCByZXQpCi0gICAgZ3pfc3RhdGVwIHN0YXRlOwotICAgIHVuc2lnbmVkIGxvbmcgKnJldDsKLXsKLSAgICBpbnQgY2g7Ci0gICAgdW5zaWduZWQgbG9uZyB2YWw7Ci0gICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKLQotICAgIHZhbCA9IE5FWFQoKTsKLSAgICB2YWwgKz0gKHVuc2lnbmVkKU5FWFQoKSA8PCA4OwotICAgIHZhbCArPSAodW5zaWduZWQgbG9uZylORVhUKCkgPDwgMTY7Ci0gICAgY2ggPSBORVhUKCk7Ci0gICAgaWYgKGNoID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKWNoIDw8IDI0OwotICAgICpyZXQgPSB2YWw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIExvb2sgZm9yIGd6aXAgaGVhZGVyLCBzZXQgdXAgZm9yIGluZmxhdGUgb3IgY29weS4gIHN0YXRlLT5oYXZlIG11c3QgYmUgemVyby4KKy8qIExvb2sgZm9yIGd6aXAgaGVhZGVyLCBzZXQgdXAgZm9yIGluZmxhdGUgb3IgY29weS4gIHN0YXRlLT54LmhhdmUgbXVzdCBiZSAwLgogICAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiwgYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiAgc3RhdGUtPmhvdyB3aWxsIGJlCiAgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGVyZSBpcyBubyBtb3JlIGlucHV0IGRhdGEgYXZhaWxhYmxlLCB3aWxsIGJlIHNldCB0byBDT1BZCiAgICBpZiB0aGVyZSBpcyBubyBnemlwIGhlYWRlciBhbmQgZGlyZWN0IGNvcHlpbmcgd2lsbCBiZSBwZXJmb3JtZWQsIG9yIGl0IHdpbGwKLSAgIGJlIHNldCB0byBHWklQIGZvciBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIGd6aXAgaGVhZGVyIHdpbGwgYmUgc2tpcHBlZCBzbwotICAgdGhhdCB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgZGF0YSBpcyB0aGUgcmF3IGRlZmxhdGUgc3RyZWFtLiAgSWYgZGlyZWN0Ci0gICBjb3B5aW5nLCB0aGVuIGxlZnRvdmVyIGlucHV0IGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvCi0gICB0aGUgb3V0cHV0IGJ1ZmZlci4gIEluIHRoYXQgY2FzZSwgYWxsIGZ1cnRoZXIgZmlsZSByZWFkcyB3aWxsIGJlIGRpcmVjdGx5IHRvCi0gICBlaXRoZXIgdGhlIG91dHB1dCBidWZmZXIgb3IgYSB1c2VyIGJ1ZmZlci4gIElmIGRlY29tcHJlc3NpbmcsIHRoZSBpbmZsYXRlCi0gICBzdGF0ZSBhbmQgdGhlIGNoZWNrIHZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuICBnel9oZWFkKCkgd2lsbCByZXR1cm4gMCBvbgotICAgc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgbWF5IGluY2x1ZGUgcmVhZCBlcnJvcnMgb3IgZ3ppcCBoZWFkZXIKLSAgIGVycm9ycy4gICovCi1sb2NhbCBpbnQgZ3pfaGVhZChzdGF0ZSkKKyAgIGJlIHNldCB0byBHWklQIGZvciBkZWNvbXByZXNzaW9uLiAgSWYgZGlyZWN0IGNvcHlpbmcsIHRoZW4gbGVmdG92ZXIgaW5wdXQKKyAgIGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgSW4gdGhhdAorICAgY2FzZSwgYWxsIGZ1cnRoZXIgZmlsZSByZWFkcyB3aWxsIGJlIGRpcmVjdGx5IHRvIGVpdGhlciB0aGUgb3V0cHV0IGJ1ZmZlciBvcgorICAgYSB1c2VyIGJ1ZmZlci4gIElmIGRlY29tcHJlc3NpbmcsIHRoZSBpbmZsYXRlIHN0YXRlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCisgICBnel9sb29rKCkgd2lsbCByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuICovCitsb2NhbCBpbnQgZ3pfbG9vayhzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKLSAgICBpbnQgZmxhZ3M7Ci0gICAgdW5zaWduZWQgbGVuOwogCiAgICAgLyogYWxsb2NhdGUgcmVhZCBidWZmZXJzIGFuZCBpbmZsYXRlIG1lbW9yeSAqLwogICAgIGlmIChzdGF0ZS0+c2l6ZSA9PSAwKSB7CiAgICAgICAgIC8qIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KLSAgICAgICAgc3RhdGUtPmluID0gbWFsbG9jKHN0YXRlLT53YW50KTsKLSAgICAgICAgc3RhdGUtPm91dCA9IG1hbGxvYyhzdGF0ZS0+d2FudCA8PCAxKTsKKyAgICAgICAgc3RhdGUtPmluID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgICAgICBzdGF0ZS0+b3V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CiAgICAgICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+b3V0ICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKQEAgLTEyOSw3ICsxMDksNyBAQAogICAgICAgICBzdGF0ZS0+c3RybS5vcGFxdWUgPSBaX05VTEw7CiAgICAgICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsKICAgICAgICAgc3RhdGUtPnN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKLSAgICAgICAgaWYgKGluZmxhdGVJbml0MigmKHN0YXRlLT5zdHJtKSwgLTE1KSAhPSBaX09LKSB7ICAgIC8qIHJhdyBpbmZsYXRlICovCisgICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIDE1ICsgMTYpICE9IFpfT0spIHsgICAgLyogZ3VuemlwICovCiAgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwogICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwogICAgICAgICAgICAgc3RhdGUtPnNpemUgPSAwOwpAQCAtMTM4LDgzICsxMTgsNDUgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIGdldCBzb21lIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLwotICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisgICAgLyogZ2V0IGF0IGxlYXN0IHRoZSBtYWdpYyBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luIDwgMikgewogICAgICAgICBpZiAoZ3pfYXZhaWwoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8qIGxvb2sgZm9yIHRoZSBnemlwIG1hZ2ljIGhlYWRlciBieXRlcyAzMSBhbmQgMTM5ICovCi0gICAgaWYgKHN0cm0tPm5leHRfaW5bMF0gPT0gMzEpIHsKLSAgICAgICAgc3RybS0+YXZhaWxfaW4tLTsKLSAgICAgICAgc3RybS0+bmV4dF9pbisrOwotICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBzdHJtLT5uZXh0X2luWzBdID09IDEzOSkgewotICAgICAgICAgICAgLyogd2UgaGF2ZSBhIGd6aXAgaGVhZGVyLCB3b28gaG9vISAqLwotICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4tLTsKLSAgICAgICAgICAgIHN0cm0tPm5leHRfaW4rKzsKLQotICAgICAgICAgICAgLyogc2tpcCByZXN0IG9mIGhlYWRlciAqLwotICAgICAgICAgICAgaWYgKE5FWFQoKSAhPSA4KSB7ICAgICAgLyogY29tcHJlc3Npb24gbWV0aG9kICovCi0gICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxhZ3MgPSBORVhUKCk7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAweGUwKSB7ICAgICAvKiByZXNlcnZlZCBmbGFnIGJpdHMgKi8KLSAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogbW9kaWZpY2F0aW9uIHRpbWUgKi8KLSAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIGV4dHJhIGZsYWdzICovCi0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCi0gICAgICAgICAgICBpZiAoZmxhZ3MgJiA0KSB7ICAgICAgICAvKiBleHRyYSBmaWVsZCAqLwotICAgICAgICAgICAgICAgIGxlbiA9ICh1bnNpZ25lZClORVhUKCk7Ci0gICAgICAgICAgICAgICAgbGVuICs9ICh1bnNpZ25lZClORVhUKCkgPDwgODsKLSAgICAgICAgICAgICAgICB3aGlsZSAobGVuLS0pCi0gICAgICAgICAgICAgICAgICAgIGlmIChORVhUKCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiA4KSAgICAgICAgICAvKiBmaWxlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoTkVYVCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMTYpICAgICAgICAgLyogY29tbWVudCAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChORVhUKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAyKSB7ICAgICAgICAvKiBoZWFkZXIgY3JjICovCi0gICAgICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGFuIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaXMgbm90IGNoZWNrZWQgZm9yIGhlcmUgLS0gaXQgd2lsbCBiZQotICAgICAgICAgICAgICAgbm90aWNlZCBvbiB0aGUgZmlyc3QgcmVxdWVzdCBmb3IgdW5jb21wcmVzc2VkIGRhdGEgKi8KLQotICAgICAgICAgICAgLyogc2V0IHVwIGZvciBkZWNvbXByZXNzaW9uICovCi0gICAgICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgc3RhdGUtPmhvdyA9IEdaSVA7Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogbm90IGEgZ3ppcCBmaWxlIC0tIHNhdmUgZmlyc3QgYnl0ZSAoMzEpIGFuZCBmYWxsIHRvIHJhdyBpL28gKi8KLSAgICAgICAgICAgIHN0YXRlLT5vdXRbMF0gPSAzMTsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMTsKLSAgICAgICAgfQorICAgIC8qIGxvb2sgZm9yIGd6aXAgbWFnaWMgYnl0ZXMgLS0gaWYgdGhlcmUsIGRvIGd6aXAgZGVjb2RpbmcgKG5vdGU6IHRoZXJlIGlzCisgICAgICAgYSBsb2dpY2FsIGRpbGVtbWEgaGVyZSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjYXNlIG9mIGEgcGFydGlhbGx5IHdyaXR0ZW4KKyAgICAgICBnemlwIGZpbGUsIHRvIHdpdCwgaWYgYSBzaW5nbGUgMzEgYnl0ZSBpcyB3cml0dGVuLCB0aGVuIHdlIGNhbm5vdCB0ZWxsCisgICAgICAgd2hldGhlciB0aGlzIGlzIGEgc2luZ2xlLWJ5dGUgZmlsZSwgb3IganVzdCBhIHBhcnRpYWxseSB3cml0dGVuIGd6aXAKKyAgICAgICBmaWxlIC0tIGZvciBoZXJlIHdlIGFzc3VtZSB0aGF0IGlmIGEgZ3ppcCBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4sIHRoZW4KKyAgICAgICB0aGUgaGVhZGVyIHdpbGwgYmUgd3JpdHRlbiBpbiBhIHNpbmdsZSBvcGVyYXRpb24sIHNvIHRoYXQgcmVhZGluZyBhCisgICAgICAgc2luZ2xlIGJ5dGUgaXMgc3VmZmljaWVudCBpbmRpY2F0aW9uIHRoYXQgaXQgaXMgbm90IGEgZ3ppcCBmaWxlKSAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA+IDEgJiYKKyAgICAgICAgICAgIHN0cm0tPm5leHRfaW5bMF0gPT0gMzEgJiYgc3RybS0+bmV4dF9pblsxXSA9PSAxMzkpIHsKKyAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgICAgICBzdGF0ZS0+aG93ID0gR1pJUDsKKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDA7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8qIGRvaW5nIHJhdyBpL28sIHNhdmUgc3RhcnQgb2YgcmF3IGRhdGEgZm9yIHNlZWtpbmcsIGNvcHkgYW55IGxlZnRvdmVyCi0gICAgICAgaW5wdXQgdG8gb3V0cHV0IC0tIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBvdXRwdXQgYnVmZmVyIGlzIGxhcmdlciB0aGFuCi0gICAgICAgdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2ggYWxzbyBhc3N1cmVzIHNwYWNlIGZvciBnenVuZ2V0YygpICovCi0gICAgc3RhdGUtPnJhdyA9IHN0YXRlLT5wb3M7Ci0gICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OworICAgIC8qIG5vIGd6aXAgaGVhZGVyIC0tIGlmIHdlIHdlcmUgZGVjb2RpbmcgZ3ppcCBiZWZvcmUsIHRoZW4gdGhpcyBpcyB0cmFpbGluZworICAgICAgIGdhcmJhZ2UuICBJZ25vcmUgdGhlIHRyYWlsaW5nIGdhcmJhZ2UgYW5kIGZpbmlzaC4gKi8KKyAgICBpZiAoc3RhdGUtPmRpcmVjdCA9PSAwKSB7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgc3RhdGUtPmVvZiA9IDE7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBkb2luZyByYXcgaS9vLCBjb3B5IGFueSBsZWZ0b3ZlciBpbnB1dCB0byBvdXRwdXQgLS0gdGhpcyBhc3N1bWVzIHRoYXQKKyAgICAgICB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgaW5wdXQgYnVmZmVyLCB3aGljaCBhbHNvIGFzc3VyZXMKKyAgICAgICBzcGFjZSBmb3IgZ3p1bmdldGMoKSAqLworICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OwogICAgIGlmIChzdHJtLT5hdmFpbF9pbikgewotICAgICAgICBtZW1jcHkoc3RhdGUtPm5leHQgKyBzdGF0ZS0+aGF2ZSwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOwotICAgICAgICBzdGF0ZS0+aGF2ZSArPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgbWVtY3B5KHN0YXRlLT54Lm5leHQsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IHN0cm0tPmF2YWlsX2luOwogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CiAgICAgfQogICAgIHN0YXRlLT5ob3cgPSBDT1BZOwpAQCAtMjIzLDE5ICsxNjUsMTUgQEAKIH0KIAogLyogRGVjb21wcmVzcyBmcm9tIGlucHV0IHRvIHRoZSBwcm92aWRlZCBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGluIHRoZSBzdGF0ZS4KLSAgIElmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBpcyByZWFjaGVkLCB0aGVuIHZlcmlmeSB0aGUgZ3ppcCB0cmFpbGVyCi0gICBjaGVjayB2YWx1ZSBhbmQgbGVuZ3RoIChtb2R1bG8gMl4zMikuICBzdGF0ZS0+aGF2ZSBhbmQgc3RhdGUtPm5leHQgYXJlIHNldAotICAgdG8gcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkIGRhdGEsIGFuZCB0aGUgY3JjIGlzIHVwZGF0ZWQuICBJZiB0aGUKLSAgIHRyYWlsZXIgaXMgdmVyaWZpZWQsIHN0YXRlLT5ob3cgaXMgcmVzZXQgdG8gTE9PSyB0byBsb29rIGZvciB0aGUgbmV4dCBnemlwCi0gICBzdHJlYW0gb3IgcmF3IGRhdGEsIG9uY2Ugc3RhdGUtPmhhdmUgaXMgZGVwbGV0ZWQuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEKLSAgIG9uIGZhaWx1cmUuICBGYWlsdXJlcyBtYXkgaW5jbHVkZSBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSBvciBhIGZhaWxlZCBnemlwCi0gICB0cmFpbGVyIHZlcmlmaWNhdGlvbi4gKi8KKyAgIE9uIHJldHVybiwgc3RhdGUtPnguaGF2ZSBhbmQgc3RhdGUtPngubmV4dCBwb2ludCB0byB0aGUganVzdCBkZWNvbXByZXNzZWQKKyAgIGRhdGEuICBJZiB0aGUgZ3ppcCBzdHJlYW0gY29tcGxldGVzLCBzdGF0ZS0+aG93IGlzIHJlc2V0IHRvIExPT0sgdG8gbG9vayBmb3IKKyAgIHRoZSBuZXh0IGd6aXAgc3RyZWFtIG9yIHJhdyBkYXRhLCBvbmNlIHN0YXRlLT54LmhhdmUgaXMgZGVwbGV0ZWQuICBSZXR1cm5zIDAKKyAgIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuICovCiBsb2NhbCBpbnQgZ3pfZGVjb21wKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQgPSBaX09LOwogICAgIHVuc2lnbmVkIGhhZDsKLSAgICB1bnNpZ25lZCBsb25nIGNyYywgbGVuOwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKICAgICAvKiBmaWxsIG91dHB1dCBidWZmZXIgdXAgdG8gZW5kIG9mIGRlZmxhdGUgc3RyZWFtICovCkBAIC0yNDUsMTUgKzE4MywxNSBAQAogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBkZWNvbXByZXNzIGFuZCBoYW5kbGUgZXJyb3JzICovCiAgICAgICAgIHJldCA9IGluZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CiAgICAgICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRVJST1IgfHwgcmV0ID09IFpfTkVFRF9ESUNUKSB7CiAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CisgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3I6IGluZmxhdGUgc3RyZWFtIGNvcnJ1cHQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SKSB7CkBAIC0yNjIsNjcgKzIwMCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKSB7ICAgICAgICAgICAgICAvKiBkZWZsYXRlIHN0cmVhbSBpbnZhbGlkICovCiAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOworICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID09IE5VTEwgPyAiY29tcHJlc3NlZCBkYXRhIGVycm9yIiA6IHN0cm0tPm1zZyk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgJiYgcmV0ICE9IFpfU1RSRUFNX0VORCk7CiAKLSAgICAvKiB1cGRhdGUgYXZhaWxhYmxlIG91dHB1dCBhbmQgY3JjIGNoZWNrIHZhbHVlICovCi0gICAgc3RhdGUtPmhhdmUgPSBoYWQgLSBzdHJtLT5hdmFpbF9vdXQ7Ci0gICAgc3RhdGUtPm5leHQgPSBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5oYXZlOwotICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHN0YXRlLT5uZXh0LCBzdGF0ZS0+aGF2ZSk7CisgICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgKi8KKyAgICBzdGF0ZS0+eC5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OworICAgIHN0YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT54LmhhdmU7CiAKLSAgICAvKiBjaGVjayBnemlwIHRyYWlsZXIgaWYgYXQgZW5kIG9mIGRlZmxhdGUgc3RyZWFtICovCi0gICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgaWYgKGd6X25leHQ0KHN0YXRlLCAmY3JjKSA9PSAtMSB8fCBnel9uZXh0NChzdGF0ZSwgJmxlbikgPT0gLTEpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNyYyAhPSBzdHJtLT5hZGxlcikgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgImluY29ycmVjdCBkYXRhIGNoZWNrIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlbiAhPSAoc3RybS0+dG90YWxfb3V0ICYgMHhmZmZmZmZmZkwpKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAiaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOyAgICAgIC8qIHJlYWR5IGZvciBuZXh0IHN0cmVhbSwgb25jZSBoYXZlIGlzIDAgKGxlYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgdW5jaGFuZ2VkIHRvIHJlbWVtYmVyIGhvdykgKi8KLSAgICB9CisgICAgLyogaWYgdGhlIGd6aXAgc3RyZWFtIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGxvb2sgZm9yIGFub3RoZXIgKi8KKyAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKyAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7CiAKICAgICAvKiBnb29kIGRlY29tcHJlc3Npb24gKi8KICAgICByZXR1cm4gMDsKIH0KIAotLyogTWFrZSBkYXRhIGFuZCBwdXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHRoYXQgc3RhdGUtPmhhdmUgPT0gMC4KKy8qIEZldGNoIGRhdGEgYW5kIHB1dCBpdCBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4gIEFzc3VtZXMgc3RhdGUtPnguaGF2ZSBpcyAwLgogICAgRGF0YSBpcyBlaXRoZXIgY29waWVkIGZyb20gdGhlIGlucHV0IGZpbGUgb3IgZGVjb21wcmVzc2VkIGZyb20gdGhlIGlucHV0CiAgICBmaWxlIGRlcGVuZGluZyBvbiBzdGF0ZS0+aG93LiAgSWYgc3RhdGUtPmhvdyBpcyBMT09LLCB0aGVuIGEgZ3ppcCBoZWFkZXIgaXMKLSAgIGxvb2tlZCBmb3IgKGFuZCBza2lwcGVkIGlmIGZvdW5kKSB0byBkZXRlcm1pbmUgd2l0aGVyIHRvIGNvcHkgb3IgZGVjb21wcmVzcy4KLSAgIFJldHVybnMgLTEgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAgZ3pfbWFrZSgpIHdpbGwgbGVhdmUgc3RhdGUtPmhhdmUgYXMgQ09QWQotICAgb3IgR1pJUCB1bmxlc3MgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGFuZCBhbGwgZGF0YSBoYXMKLSAgIGJlZW4gcHJvY2Vzc2VkLiAgKi8KLWxvY2FsIGludCBnel9tYWtlKHN0YXRlKQorICAgbG9va2VkIGZvciB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjb3B5IG9yIGRlY29tcHJlc3MuICBSZXR1cm5zIC0xIG9uIGVycm9yLAorICAgb3RoZXJ3aXNlIDAuICBnel9mZXRjaCgpIHdpbGwgbGVhdmUgc3RhdGUtPmhvdyBhcyBDT1BZIG9yIEdaSVAgdW5sZXNzIHRoZQorICAgZW5kIG9mIHRoZSBpbnB1dCBmaWxlIGhhcyBiZWVuIHJlYWNoZWQgYW5kIGFsbCBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZC4gICovCitsb2NhbCBpbnQgZ3pfZmV0Y2goc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LKSB7ICAgICAgICAgICAvKiBsb29rIGZvciBnemlwIGhlYWRlciAqLwotICAgICAgICBpZiAoZ3pfaGVhZChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgICAgICAgICAgICAgICAgLyogZ290IHNvbWUgZGF0YSBmcm9tIGd6X2hlYWQoKSAqLworICAgIGRvIHsKKyAgICAgICAgc3dpdGNoKHN0YXRlLT5ob3cpIHsKKyAgICAgICAgY2FzZSBMT09LOiAgICAgIC8qIC0+IExPT0ssIENPUFkgKG9ubHkgaWYgbmV2ZXIgR1pJUCksIG9yIEdaSVAgKi8KKyAgICAgICAgICAgIGlmIChnel9sb29rKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09QWTogICAgICAvKiAtPiBDT1BZICovCisgICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPm91dCwgc3RhdGUtPnNpemUgPDwgMSwgJihzdGF0ZS0+eC5oYXZlKSkKKyAgICAgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKHN0YXRlLT5ob3cgPT0gQ09QWSkgeyAgICAgICAgICAgLyogc3RyYWlnaHQgY29weSAqLwotICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPm91dCwgc3RhdGUtPnNpemUgPDwgMSwgJihzdGF0ZS0+aGF2ZSkpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5vdXQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gR1pJUCkgeyAgICAgIC8qIGRlY29tcHJlc3MgKi8KLSAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemUgPDwgMTsKLSAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwotICAgICAgICBpZiAoZ3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgICAgIGNhc2UgR1pJUDogICAgICAvKiAtPiBHWklQIG9yIExPT0sgKGlmIGVuZCBvZiBnemlwIHN0cmVhbSkgKi8KKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplIDw8IDE7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgICAgICBpZiAoZ3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChzdGF0ZS0+eC5oYXZlID09IDAgJiYgKCFzdGF0ZS0+ZW9mIHx8IHN0cm0tPmF2YWlsX2luKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMzNiwxMiArMjYyLDEyIEBACiAgICAgLyogc2tpcCBvdmVyIGxlbiBieXRlcyBvciByZWFjaCBlbmQtb2YtZmlsZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0ICovCiAgICAgd2hpbGUgKGxlbikKICAgICAgICAgLyogc2tpcCBvdmVyIHdoYXRldmVyIGlzIGluIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlKSB7Ci0gICAgICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT5oYXZlID4gbGVuID8KLSAgICAgICAgICAgICAgICAodW5zaWduZWQpbGVuIDogc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gbGVuID8KKyAgICAgICAgICAgICAgICAodW5zaWduZWQpbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICAgICAgbGVuIC09IG47CiAgICAgICAgIH0KIApAQCAtMzUyLDcgKzI3OCw3IEBACiAgICAgICAgIC8qIG5lZWQgbW9yZSBkYXRhIHRvIHNraXAgLS0gbG9hZCB1cCBvdXRwdXQgYnVmZmVyICovCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLyogZ2V0IG1vcmUgb3V0cHV0LCBsb29raW5nIGZvciBoZWFkZXIgaWYgcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIGlmIChnel9tYWtlKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9mZXRjaChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0zNzQsMTQgKzMwMCwxNSBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KICAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLwogICAgIGlmICgoaW50KWxlbiA8IDApIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNDAwLDQ5ICszMjcsNTEgQEAKICAgICBnb3QgPSAwOwogICAgIGRvIHsKICAgICAgICAgLyogZmlyc3QganVzdCB0cnkgY29weWluZyBkYXRhIGZyb20gdGhlIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlKSB7Ci0gICAgICAgICAgICBuID0gc3RhdGUtPmhhdmUgPiBsZW4gPyBsZW4gOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT5uZXh0LCBuKTsKLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOworICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmUgPiBsZW4gPyBsZW4gOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPngubmV4dCwgbik7CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CiAgICAgICAgIH0KIAogICAgICAgICAvKiBvdXRwdXQgYnVmZmVyIGVtcHR5IC0tIHJldHVybiBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCAqLwotICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0cm0tPmF2YWlsX2luID09IDApCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5lb2YgJiYgc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgICAgICAgICAgc3RhdGUtPnBhc3QgPSAxOyAgICAgICAgLyogdHJpZWQgdG8gcmVhZCBwYXN0IGVuZCAqLwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICAvKiBuZWVkIG91dHB1dCBkYXRhIC0tIGZvciBzbWFsbCBsZW4gb3IgbmV3IHN0cmVhbSBsb2FkIHVwIG91ciBvdXRwdXQKICAgICAgICAgICAgYnVmZmVyICovCiAgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyB8fCBsZW4gPCAoc3RhdGUtPnNpemUgPDwgMSkpIHsKICAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCi0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBubyBwcm9ncmVzcyB5ZXQgLS0gZ28gYmFjayB0byBtZW1jcHkoKSBhYm92ZSAqLworICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIG5vIHByb2dyZXNzIHlldCAtLSBnbyBiYWNrIHRvIGNvcHkgYWJvdmUgKi8KICAgICAgICAgICAgIC8qIHRoZSBjb3B5IGFib3ZlIGFzc3VyZXMgdGhhdCB3ZSB3aWxsIGxlYXZlIHdpdGggc3BhY2UgaW4gdGhlCiAgICAgICAgICAgICAgICBvdXRwdXQgYnVmZmVyLCBhbGxvd2luZyBhdCBsZWFzdCBvbmUgZ3p1bmdldGMoKSB0byBzdWNjZWVkICovCiAgICAgICAgIH0KIAogICAgICAgICAvKiBsYXJnZSBsZW4gLS0gcmVhZCBkaXJlY3RseSBpbnRvIHVzZXIgYnVmZmVyICovCiAgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gQ09QWSkgeyAgICAgIC8qIHJlYWQgZGlyZWN0bHkgKi8KLSAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBidWYsIGxlbiwgJm4pID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsICh1bnNpZ25lZCBjaGFyICopYnVmLCBsZW4sICZuKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBsYXJnZSBsZW4gLS0gZGVjb21wcmVzcyBkaXJlY3RseSBpbnRvIHVzZXIgYnVmZmVyICovCiAgICAgICAgIGVsc2UgeyAgLyogc3RhdGUtPmhvdyA9PSBHWklQICovCiAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBsZW47Ci0gICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IGJ1ZjsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CiAgICAgICAgICAgICBpZiAoZ3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBuID0gc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7CisgICAgICAgICAgICBuID0gc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgLyogdXBkYXRlIHByb2dyZXNzICovCiAgICAgICAgIGxlbiAtPSBuOwogICAgICAgICBidWYgPSAoY2hhciAqKWJ1ZiArIG47CiAgICAgICAgIGdvdCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgIH0gd2hpbGUgKGxlbik7CiAKICAgICAvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byB1c2VyIGJ1ZmZlciAod2lsbCBmaXQgaW4gaW50KSAqLwpAQCAtNDUwLDYgKzM3OSwxMSBAQAogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCisjaWZkZWYgWl9QUkVGSVhfU0VUCisjICB1bmRlZiB6X2d6Z2V0YworI2Vsc2UKKyMgIHVuZGVmIGd6Z2V0YworI2VuZGlmCiBpbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKQEAgLTQ2MiwxNSArMzk2LDE2IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHRyeSBvdXRwdXQgYnVmZmVyIChubyBuZWVkIHRvIGNoZWNrIGZvciBza2lwIHJlcXVlc3QpICovCi0gICAgaWYgKHN0YXRlLT5oYXZlKSB7Ci0gICAgICAgIHN0YXRlLT5oYXZlLS07Ci0gICAgICAgIHN0YXRlLT5wb3MrKzsKLSAgICAgICAgcmV0dXJuICooc3RhdGUtPm5leHQpKys7CisgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgc3RhdGUtPnguaGF2ZS0tOworICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgcmV0dXJuICooc3RhdGUtPngubmV4dCkrKzsKICAgICB9CiAKICAgICAvKiBub3RoaW5nIHRoZXJlIC0tIHRyeSBnenJlYWQoKSAqLwpAQCAtNDc4LDYgKzQxMywxMiBAQAogICAgIHJldHVybiByZXQgPCAxID8gLTEgOiBidWZbMF07CiB9CiAKK2ludCBaRVhQT1JUIGd6Z2V0Y18oZmlsZSkKK2d6RmlsZSBmaWxlOworeworICAgIHJldHVybiBnemdldGMoZmlsZSk7Cit9CisKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUIGd6dW5nZXRjKGMsIGZpbGUpCiAgICAgaW50IGM7CkBAIC00OTAsOCArNDMxLDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLwpAQCAtNTA2LDMyICs0NDgsMzQgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogaWYgb3V0cHV0IGJ1ZmZlciBlbXB0eSwgcHV0IGJ5dGUgYXQgZW5kIChhbGxvd3MgbW9yZSBwdXNoaW5nKSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7Ci0gICAgICAgIHN0YXRlLT5oYXZlID0gMTsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKLSAgICAgICAgc3RhdGUtPm5leHRbMF0gPSBjOwotICAgICAgICBzdGF0ZS0+cG9zLS07CisgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCkgeworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMTsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSkgLSAxOworICAgICAgICBzdGF0ZS0+eC5uZXh0WzBdID0gYzsKKyAgICAgICAgc3RhdGUtPngucG9zLS07CisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsKICAgICAgICAgcmV0dXJuIGM7CiAgICAgfQogCiAgICAgLyogaWYgbm8gcm9vbSwgZ2l2ZSB1cCAobXVzdCBoYXZlIGFscmVhZHkgZG9uZSBhIGd6dW5nZXRjKCkpICovCi0gICAgaWYgKHN0YXRlLT5oYXZlID09IChzdGF0ZS0+c2l6ZSA8PCAxKSkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJvdXQgb2Ygcm9vbSB0byBwdXNoIGNoYXJhY3RlcnMiKTsKKyAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgIm91dCBvZiByb29tIHRvIHB1c2ggY2hhcmFjdGVycyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgLyogc2xpZGUgb3V0cHV0IGRhdGEgaWYgbmVlZGVkIGFuZCBpbnNlcnQgYnl0ZSBiZWZvcmUgZXhpc3RpbmcgZGF0YSAqLwotICAgIGlmIChzdGF0ZS0+bmV4dCA9PSBzdGF0ZS0+b3V0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKnNyYyA9IHN0YXRlLT5vdXQgKyBzdGF0ZS0+aGF2ZTsKKyAgICBpZiAoc3RhdGUtPngubmV4dCA9PSBzdGF0ZS0+b3V0KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNyYyA9IHN0YXRlLT5vdXQgKyBzdGF0ZS0+eC5oYXZlOwogICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKTsKICAgICAgICAgd2hpbGUgKHNyYyA+IHN0YXRlLT5vdXQpCiAgICAgICAgICAgICAqLS1kZXN0ID0gKi0tc3JjOwotICAgICAgICBzdGF0ZS0+bmV4dCA9IGRlc3Q7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBkZXN0OwogICAgIH0KLSAgICBzdGF0ZS0+aGF2ZSsrOwotICAgIHN0YXRlLT5uZXh0LS07Ci0gICAgc3RhdGUtPm5leHRbMF0gPSBjOwotICAgIHN0YXRlLT5wb3MtLTsKKyAgICBzdGF0ZS0+eC5oYXZlKys7CisgICAgc3RhdGUtPngubmV4dC0tOworICAgIHN0YXRlLT54Lm5leHRbMF0gPSBjOworICAgIHN0YXRlLT54LnBvcy0tOworICAgIHN0YXRlLT5wYXN0ID0gMDsKICAgICByZXR1cm4gYzsKIH0KIApAQCAtNTUxLDggKzQ5NSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCkBAIC01NjksMzIgKzUxNCwzMSBAQAogICAgIGxlZnQgPSAodW5zaWduZWQpbGVuIC0gMTsKICAgICBpZiAobGVmdCkgZG8gewogICAgICAgICAvKiBhc3N1cmUgdGhhdCBzb21ldGhpbmcgaXMgaW4gdGhlIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlID09IDApIHsKLSAgICAgICAgICAgIGlmIChnel9tYWtlKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAvKiBlcnJvciAqLwotICAgICAgICAgICAgaWYgKHN0YXRlLT5oYXZlID09IDApIHsgICAgIC8qIGVuZCBvZiBmaWxlICovCi0gICAgICAgICAgICAgICAgaWYgKGJ1ZiA9PSBzdHIpICAgICAgICAgLyogZ290IGJ1cGt1cyAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBnb3Qgc29tZXRoaW5nIC0tIHJldHVybiBpdCAqLwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwICYmIGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBlcnJvciAqLworICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwKSB7ICAgICAgIC8qIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBzdGF0ZS0+cGFzdCA9IDE7ICAgICAgICAgICAgLyogcmVhZCBwYXN0IGVuZCAqLworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiB3aGF0IHdlIGhhdmUgKi8KICAgICAgICAgfQogCiAgICAgICAgIC8qIGxvb2sgZm9yIGVuZC1vZi1saW5lIGluIGN1cnJlbnQgb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBuID0gc3RhdGUtPmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0YXRlLT5oYXZlOwotICAgICAgICBlb2wgPSBtZW1jaHIoc3RhdGUtPm5leHQsICdcbicsIG4pOworICAgICAgICBuID0gc3RhdGUtPnguaGF2ZSA+IGxlZnQgPyBsZWZ0IDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgZW9sID0gKHVuc2lnbmVkIGNoYXIgKiltZW1jaHIoc3RhdGUtPngubmV4dCwgJ1xuJywgbik7CiAgICAgICAgIGlmIChlb2wgIT0gTlVMTCkKLSAgICAgICAgICAgIG4gPSAodW5zaWduZWQpKGVvbCAtIHN0YXRlLT5uZXh0KSArIDE7CisgICAgICAgICAgICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+eC5uZXh0KSArIDE7CiAKICAgICAgICAgLyogY29weSB0aHJvdWdoIGVuZC1vZi1saW5lLCBvciByZW1haW5kZXIgaWYgbm90IGZvdW5kICovCi0gICAgICAgIG1lbWNweShidWYsIHN0YXRlLT5uZXh0LCBuKTsKLSAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICBsZWZ0IC09IG47CiAgICAgICAgIGJ1ZiArPSBuOwogICAgIH0gd2hpbGUgKGxlZnQgJiYgZW9sID09IE5VTEwpOwogCi0gICAgLyogZm91bmQgZW5kLW9mLWxpbmUgb3Igb3V0IG9mIHNwYWNlIC0tIHRlcm1pbmF0ZSBzdHJpbmcgYW5kIHJldHVybiBpdCAqLworICAgIC8qIHJldHVybiB0ZXJtaW5hdGVkIHN0cmluZywgb3IgaWYgbm90aGluZywgZW5kIG9mIGZpbGUgKi8KKyAgICBpZiAoYnVmID09IHN0cikKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYnVmWzBdID0gMDsKICAgICByZXR1cm4gc3RyOwogfQpAQCAtNjEwLDE2ICs1NTQsMTIgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICAvKiBpZiB0aGUgc3RhdGUgaXMgbm90IGtub3duLCBidXQgd2UgY2FuIGZpbmQgb3V0LCB0aGVuIGRvIHNvICh0aGlzIGlzCiAgICAgICAgbWFpbmx5IGZvciByaWdodCBhZnRlciBhIGd6b3BlbigpIG9yIGd6ZG9wZW4oKSkgKi8KLSAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LICYmIHN0YXRlLT5oYXZlID09IDApCi0gICAgICAgICh2b2lkKWd6X2hlYWQoc3RhdGUpOworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gTE9PSyAmJiBzdGF0ZS0+eC5oYXZlID09IDApCisgICAgICAgICh2b2lkKWd6X2xvb2soc3RhdGUpOwogCi0gICAgLyogcmV0dXJuIDEgaWYgcmVhZGluZyBkaXJlY3QsIDAgaWYgZGVjb21wcmVzc2luZyBhIGd6aXAgc3RyZWFtICovCisgICAgLyogcmV0dXJuIDEgaWYgdHJhbnNwYXJlbnQsIDAgaWYgcHJvY2Vzc2luZyBhIGd6aXAgc3RyZWFtICovCiAgICAgcmV0dXJuIHN0YXRlLT5kaXJlY3Q7CiB9CiAKQEAgLTYyNyw3ICs1NjcsNyBAQAogaW50IFpFWFBPUlQgZ3pjbG9zZV9yKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0LCBlcnI7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwpAQCAtNjQ1LDkgKzU4NSwxMCBAQAogICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwogICAgICAgICBmcmVlKHN0YXRlLT5pbik7CiAgICAgfQorICAgIGVyciA9IHN0YXRlLT5lcnIgPT0gWl9CVUZfRVJST1IgPyBaX0JVRl9FUlJPUiA6IFpfT0s7CiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgIGZyZWUoc3RhdGUtPnBhdGgpOwogICAgIHJldCA9IGNsb3NlKHN0YXRlLT5mZCk7CiAgICAgZnJlZShzdGF0ZSk7Ci0gICAgcmV0dXJuIHJldCA/IFpfRVJSTk8gOiBaX09LOworICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogZXJyOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6d3JpdGUuYyBiL01vZHVsZXMvemxpYi9nendyaXRlLmMKaW5kZXggZThkZWZjNi4uYWE3NjdmYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6d3JpdGUuYworKysgYi9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZ3p3cml0ZS5jIC0tIHpsaWIgZnVuY3Rpb25zIGZvciB3cml0aW5nIGd6aXAgZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE4LDQ0ICsxOCw1NSBAQAogICAgIGludCByZXQ7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIC8qIGFsbG9jYXRlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyAqLwotICAgIHN0YXRlLT5pbiA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgc3RhdGUtPm91dCA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMIHx8IHN0YXRlLT5vdXQgPT0gTlVMTCkgewotICAgICAgICBpZiAoc3RhdGUtPm91dCAhPSBOVUxMKQotICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKLSAgICAgICAgaWYgKHN0YXRlLT5pbiAhPSBOVUxMKQotICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgIC8qIGFsbG9jYXRlIGlucHV0IGJ1ZmZlciAqLworICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICBpZiAoc3RhdGUtPmluID09IE5VTEwpIHsKICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgLyogYWxsb2NhdGUgZGVmbGF0ZSBtZW1vcnksIHNldCB1cCBmb3IgZ3ppcCBjb21wcmVzc2lvbiAqLwotICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKLSAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKLSAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7Ci0gICAgcmV0ID0gZGVmbGF0ZUluaXQyKHN0cm0sIHN0YXRlLT5sZXZlbCwgWl9ERUZMQVRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgMTUgKyAxNiwgOCwgc3RhdGUtPnN0cmF0ZWd5KTsKLSAgICBpZiAocmV0ICE9IFpfT0spIHsKLSAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAvKiBvbmx5IG5lZWQgb3V0cHV0IGJ1ZmZlciBhbmQgZGVmbGF0ZSBzdGF0ZSBpZiBjb21wcmVzc2luZyAqLworICAgIGlmICghc3RhdGUtPmRpcmVjdCkgeworICAgICAgICAvKiBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIHN0YXRlLT5vdXQgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgICAgIGlmIChzdGF0ZS0+b3V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFsbG9jYXRlIGRlZmxhdGUgbWVtb3J5LCBzZXQgdXAgZm9yIGd6aXAgY29tcHJlc3Npb24gKi8KKyAgICAgICAgc3RybS0+emFsbG9jID0gWl9OVUxMOworICAgICAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOworICAgICAgICByZXQgPSBkZWZsYXRlSW5pdDIoc3RybSwgc3RhdGUtPmxldmVsLCBaX0RFRkxBVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1dCSVRTICsgMTYsIERFRl9NRU1fTEVWRUwsIHN0YXRlLT5zdHJhdGVneSk7CisgICAgICAgIGlmIChyZXQgIT0gWl9PSykgeworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIG1hcmsgc3RhdGUgYXMgaW5pdGlhbGl6ZWQgKi8KICAgICBzdGF0ZS0+c2l6ZSA9IHN0YXRlLT53YW50OwogCi0gICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgKi8KLSAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKLSAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7Ci0gICAgc3RhdGUtPm5leHQgPSBzdHJtLT5uZXh0X291dDsKKyAgICAvKiBpbml0aWFsaXplIHdyaXRlIGJ1ZmZlciBpZiBjb21wcmVzc2luZyAqLworICAgIGlmICghc3RhdGUtPmRpcmVjdCkgeworICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKKyAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCiAvKiBDb21wcmVzcyB3aGF0ZXZlciBpcyBhdCBhdmFpbF9pbiBhbmQgbmV4dF9pbiBhbmQgd3JpdGUgdG8gdGhlIG91dHB1dCBmaWxlLgogICAgUmV0dXJuIC0xIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdG8gdGhlIG91dHB1dCBmaWxlLCBvdGhlcndpc2UgMC4KICAgIGZsdXNoIGlzIGFzc3VtZWQgdG8gYmUgYSB2YWxpZCBkZWZsYXRlKCkgZmx1c2ggdmFsdWUuICBJZiBmbHVzaCBpcyBaX0ZJTklTSCwKLSAgIHRoZW4gdGhlIGRlZmxhdGUoKSBzdGF0ZSBpcyByZXNldCB0byBzdGFydCBhIG5ldyBnemlwIHN0cmVhbS4gKi8KKyAgIHRoZW4gdGhlIGRlZmxhdGUoKSBzdGF0ZSBpcyByZXNldCB0byBzdGFydCBhIG5ldyBnemlwIHN0cmVhbS4gIElmIGd6LT5kaXJlY3QKKyAgIGlzIHRydWUsIHRoZW4gc2ltcGx5IHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZSB3aXRob3V0IGNvbXByZXNzaW5nLCBhbmQKKyAgIGlnbm9yZSBmbHVzaC4gKi8KIGxvY2FsIGludCBnel9jb21wKHN0YXRlLCBmbHVzaCkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgaW50IGZsdXNoOwpAQCAtNjgsNiArNzksMTcgQEAKICAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgLyogd3JpdGUgZGlyZWN0bHkgaWYgcmVxdWVzdGVkICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7CisgICAgICAgIGlmIChnb3QgPCAwIHx8ICh1bnNpZ25lZClnb3QgIT0gc3RybS0+YXZhaWxfaW4pIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICAvKiBydW4gZGVmbGF0ZSgpIG9uIHByb3ZpZGVkIGlucHV0IHVudGlsIGl0IHByb2R1Y2VzIG5vIG1vcmUgb3V0cHV0ICovCiAgICAgcmV0ID0gWl9PSzsKICAgICBkbyB7CkBAIC03NSw4ICs5Nyw4IEBACiAgICAgICAgICAgIGRvaW5nIFpfRklOSVNIIHRoZW4gZG9uJ3Qgd3JpdGUgdW50aWwgd2UgZ2V0IHRvIFpfU1RSRUFNX0VORCAqLwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDAgfHwgKGZsdXNoICE9IFpfTk9fRkxVU0ggJiYKICAgICAgICAgICAgIChmbHVzaCAhPSBaX0ZJTklTSCB8fCByZXQgPT0gWl9TVFJFQU1fRU5EKSkpIHsKLSAgICAgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPm5leHQpOwotICAgICAgICAgICAgaWYgKGhhdmUgJiYgKChnb3QgPSB3cml0ZShzdGF0ZS0+ZmQsIHN0YXRlLT5uZXh0LCBoYXZlKSkgPCAwIHx8CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKShzdHJtLT5uZXh0X291dCAtIHN0YXRlLT54Lm5leHQpOworICAgICAgICAgICAgaWYgKGhhdmUgJiYgKChnb3QgPSB3cml0ZShzdGF0ZS0+ZmQsIHN0YXRlLT54Lm5leHQsIGhhdmUpKSA8IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpZ290ICE9IGhhdmUpKSB7CiAgICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC04NSw3ICsxMDcsNyBAQAogICAgICAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplOwogICAgICAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBjb21wcmVzcyAqLwpAQCAtMTMxLDcgKzE1Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBuOwogICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGxlbiAtPSBuOwpAQCAtMTQ2LDcgKzE2OCw2IEBACiAgICAgdW5zaWduZWQgbGVuOwogewogICAgIHVuc2lnbmVkIHB1dCA9IGxlbjsKLSAgICB1bnNpZ25lZCBuOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICB6X3N0cmVhbXAgc3RybTsKIApAQCAtMTYzLDcgKzE4NCw3IEBACiAgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4gb25lLCBvdGhlcndpc2UgcmV0dXJuCiAgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMgdGhlIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KICAgICBpZiAoKGludClsZW4gPCAwKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTg2LDE2ICsyMDcsMTkgQEAKICAgICBpZiAobGVuIDwgc3RhdGUtPnNpemUpIHsKICAgICAgICAgLyogY29weSB0byBpbnB1dCBidWZmZXIsIGNvbXByZXNzIHdoZW4gZnVsbCAqLwogICAgICAgICBkbyB7CisgICAgICAgICAgICB1bnNpZ25lZCBoYXZlLCBjb3B5OworCiAgICAgICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKICAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgICAgICAgICAgbiA9IHN0YXRlLT5zaXplIC0gc3RybS0+YXZhaWxfaW47Ci0gICAgICAgICAgICBpZiAobiA+IGxlbikKLSAgICAgICAgICAgICAgICBuID0gbGVuOwotICAgICAgICAgICAgbWVtY3B5KHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbiwgYnVmLCBuKTsKLSAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+cG9zICs9IG47Ci0gICAgICAgICAgICBidWYgPSAoY2hhciAqKWJ1ZiArIG47Ci0gICAgICAgICAgICBsZW4gLT0gbjsKKyAgICAgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+c2l6ZSAtIGhhdmU7CisgICAgICAgICAgICBpZiAoY29weSA+IGxlbikKKyAgICAgICAgICAgICAgICBjb3B5ID0gbGVuOworICAgICAgICAgICAgbWVtY3B5KHN0YXRlLT5pbiArIGhhdmUsIGJ1ZiwgY29weSk7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBjb3B5OworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IGNvcHk7CisgICAgICAgICAgICBidWYgPSAoY29uc3QgY2hhciAqKWJ1ZiArIGNvcHk7CisgICAgICAgICAgICBsZW4gLT0gY29weTsKICAgICAgICAgICAgIGlmIChsZW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gd2hpbGUgKGxlbik7CkBAIC0yMDcsOCArMjMxLDggQEAKIAogICAgICAgICAvKiBkaXJlY3RseSBjb21wcmVzcyB1c2VyIGJ1ZmZlciB0byBmaWxlICovCiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gbGVuOwotICAgICAgICBzdHJtLT5uZXh0X2luID0gKHZvaWRwKWJ1ZjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKWJ1ZjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IGxlbjsKICAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjIyLDYgKzI0Niw3IEBACiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgaW50IGM7CiB7CisgICAgdW5zaWduZWQgaGF2ZTsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxXTsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07CkBAIC0yNDUsMTkgKzI3MCwyMyBAQAogCiAgICAgLyogdHJ5IHdyaXRpbmcgdG8gaW5wdXQgYnVmZmVyIGZvciBzcGVlZCAoc3RhdGUtPnNpemUgPT0gMCBpZiBidWZmZXIgbm90CiAgICAgICAgaW5pdGlhbGl6ZWQpICovCi0gICAgaWYgKHN0cm0tPmF2YWlsX2luIDwgc3RhdGUtPnNpemUpIHsKKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgICAgICBzdHJtLT5uZXh0X2luW3N0cm0tPmF2YWlsX2luKytdID0gYzsKLSAgICAgICAgc3RhdGUtPnBvcysrOwotICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbikgLSBzdGF0ZS0+aW4pOworICAgICAgICBpZiAoaGF2ZSA8IHN0YXRlLT5zaXplKSB7CisgICAgICAgICAgICBzdGF0ZS0+aW5baGF2ZV0gPSBjOworICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4rKzsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcysrOworICAgICAgICAgICAgcmV0dXJuIGMgJiAweGZmOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyogbm8gcm9vbSBpbiBidWZmZXIgb3Igbm90IGluaXRpYWxpemVkLCB1c2UgZ3pfd3JpdGUoKSAqLwogICAgIGJ1ZlswXSA9IGM7CiAgICAgaWYgKGd6d3JpdGUoZmlsZSwgYnVmLCAxKSAhPSAxKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGM7CisgICAgcmV0dXJuIGMgJiAweGZmOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC0yNzQsMTYgKzMwMywxNSBAQAogICAgIHJldHVybiByZXQgPT0gMCAmJiBsZW4gIT0gMCA/IC0xIDogcmV0OwogfQogCi0jaWZkZWYgU1REQworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KLWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK2ludCBaRVhQT1JUVkEgZ3p2cHJpbnRmKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCiB7CiAgICAgaW50IHNpemUsIGxlbjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07Ci0gICAgdmFfbGlzdCB2YTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KICAgICBpZiAoZmlsZSA9PSBOVUxMKQpAQCAtMzEzLDI1ICszNDEsMjAgQEAKICAgICAvKiBkbyB0aGUgcHJpbnRmKCkgaW50byB0aGUgaW5wdXQgYnVmZmVyLCBwdXQgbGVuZ3RoIGluIGxlbiAqLwogICAgIHNpemUgPSAoaW50KShzdGF0ZS0+c2l6ZSk7CiAgICAgc3RhdGUtPmluW3NpemUgLSAxXSA9IDA7Ci0gICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7CiAjaWZkZWYgTk9fdnNucHJpbnRmCiAjICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICh2b2lkKXZzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKKyAgICAodm9pZCl2c3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIHZhKTsKICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKQogICAgICAgICBpZiAoc3RhdGUtPmluW2xlbl0gPT0gMCkgYnJlYWs7CiAjICBlbHNlCi0gICAgbGVuID0gdnNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOworICAgIGxlbiA9IHZzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgdmEpOwogIyAgZW5kaWYKICNlbHNlCiAjICBpZmRlZiBIQVNfdnNucHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGxlbiA9IHN0cmxlbihzdGF0ZS0+aW4pOworICAgICh2b2lkKXZzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIHZhKTsKKyAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKikoc3RhdGUtPmluKSk7CiAjICBlbHNlCiAgICAgbGVuID0gdnNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTM0MiwxMSArMzY1LDIyIEBACiAgICAgLyogdXBkYXRlIGJ1ZmZlciBhbmQgcG9zaXRpb24sIGRlZmVyIGNvbXByZXNzaW9uIHVudGlsIG5lZWRlZCAqLwogICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKWxlbjsKICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgcmV0dXJuIGxlbjsKIH0KIAotI2Vsc2UgLyogIVNUREMgKi8KK2ludCBaRVhQT1JUVkEgZ3pwcmludGYoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgdmE7CisgICAgaW50IHJldDsKKworICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOworICAgIHJldCA9IGd6dnByaW50ZihmaWxlLCBmb3JtYXQsIHZhKTsKKyAgICB2YV9lbmQodmEpOworICAgIHJldHVybiByZXQ7Cit9CisKKyNlbHNlIC8qICFTVERDICYmICFaX0hBVkVfU1REQVJHX0ggKi8KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwogaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZmlsZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCkBAIC0zNjYsNiArNDAwLDEwIEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCisgICAgLyogY2hlY2sgdGhhdCBjYW4gcmVhbGx5IHBhc3MgcG9pbnRlciBpbiBpbnRzICovCisgICAgaWYgKHNpemVvZihpbnQpICE9IHNpemVvZih2b2lkICopKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCiAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zOTAsMjIgKzQyOCwyMyBAQAogICAgIHN0YXRlLT5pbltzaXplIC0gMV0gPSAwOwogI2lmZGVmIE5PX3NucHJpbnRmCiAjICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCi0gICAgc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgIHNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCiAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwogICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCiAgICAgICAgIGlmIChzdGF0ZS0+aW5bbGVuXSA9PSAwKSBicmVhazsKICMgIGVsc2UKLSAgICBsZW4gPSBzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyAgICBsZW4gPSBzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKICMgIGVuZGlmCiAjZWxzZQogIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICBzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgIHNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAogICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgbGVuID0gc3RybGVuKHN0YXRlLT5pbik7CisgICAgbGVuID0gc3RybGVuKChjaGFyICopKHN0YXRlLT5pbikpOwogIyAgZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LAorICAgICAgICAgICAgICAgICAgIGE3LCBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsCisgICAgICAgICAgICAgICAgICAgYTE5LCBhMjApOwogIyAgZW5kaWYKICNlbmRpZgogCkBAIC00MTYsNyArNDU1LDcgQEAKICAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgZGVmZXIgY29tcHJlc3Npb24gdW50aWwgbmVlZGVkICovCiAgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpbGVuOwogICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgc3RhdGUtPngucG9zICs9IGxlbjsKICAgICByZXR1cm4gbGVuOwogfQogCkBAIC01MDAsNyArNTM5LDcgQEAKIGludCBaRVhQT1JUIGd6Y2xvc2VfdyhmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewotICAgIGludCByZXQgPSAwOworICAgIGludCByZXQgPSBaX09LOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KQEAgLTUxNSwxNyArNTU0LDI0IEBACiAgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLwogICAgIGlmIChzdGF0ZS0+c2VlaykgewogICAgICAgICBzdGF0ZS0+c2VlayA9IDA7Ci0gICAgICAgIHJldCArPSBnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCk7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOwogICAgIH0KIAogICAgIC8qIGZsdXNoLCBmcmVlIG1lbW9yeSwgYW5kIGNsb3NlIGZpbGUgKi8KLSAgICByZXQgKz0gZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpOwotICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOwotICAgIGZyZWUoc3RhdGUtPm91dCk7Ci0gICAgZnJlZShzdGF0ZS0+aW4pOworICAgIGlmIChnel9jb21wKHN0YXRlLCBaX0ZJTklTSCkgPT0gLTEpCisgICAgICAgIHJldCA9IHN0YXRlLT5lcnI7CisgICAgaWYgKHN0YXRlLT5zaXplKSB7CisgICAgICAgIGlmICghc3RhdGUtPmRpcmVjdCkgeworICAgICAgICAgICAgKHZvaWQpZGVmbGF0ZUVuZCgmKHN0YXRlLT5zdHJtKSk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICB9CisgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICB9CiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgIGZyZWUoc3RhdGUtPnBhdGgpOwotICAgIHJldCArPSBjbG9zZShzdGF0ZS0+ZmQpOworICAgIGlmIChjbG9zZShzdGF0ZS0+ZmQpID09IC0xKQorICAgICAgICByZXQgPSBaX0VSUk5POwogICAgIGZyZWUoc3RhdGUpOwotICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogWl9PSzsKKyAgICByZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmJhY2suYyBiL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKaW5kZXggYWYzYThjOS4uZjM4MzNjMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmJhY2suYworKysgYi9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mYmFjay5jIC0tIGluZmxhdGUgdXNpbmcgYSBjYWxsLWJhY2sgaW50ZXJmYWNlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMSBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDIsMTAgKzQyLDE5IEBACiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKVpBTExPQyhzdHJtLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CkBAIC0yNDYsNyArMjU1LDcgQEAKIHZvaWQgRkFSICpvdXRfZGVzYzsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCkBAIC0zOTQsNyArNDAzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsIDwgMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVFREJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUrK10gPSBoZXJlLnZhbDsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jIGIvTW9kdWxlcy96bGliL2luZmZhc3QuYwppbmRleCAyZjFkNjBiLi5iZGE1OWNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZmYXN0LmMgLS0gZmFzdCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDgsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDgsIDIwMTAsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTY5LDggKzY5LDggQEAKIHVuc2lnbmVkIHN0YXJ0OyAgICAgICAgIC8qIGluZmxhdGUoKSdzIHN0YXJ0aW5nIHZhbHVlIGZvciBzdHJtLT5hdmFpbF9vdXQgKi8KIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCi0gICAgdW5zaWduZWQgY2hhciBGQVIgKmxhc3Q7ICAgIC8qIHdoaWxlIGluIDwgbGFzdCwgZW5vdWdoIGlucHV0IGF2YWlsYWJsZSAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmluOyAgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfaW4gKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAvKiBoYXZlIGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqb3V0OyAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqYmVnOyAgICAgLyogaW5mbGF0ZSgpJ3MgaW5pdGlhbCBzdHJtLT5uZXh0X291dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICplbmQ7ICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oIGIvTW9kdWxlcy96bGliL2luZmZpeGVkLmgKaW5kZXggNzVlZDRiNS4uZDYyODMyNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmZpeGVkLmgKKysrIGIvTW9kdWxlcy96bGliL2luZmZpeGVkLmgKQEAgLTIsOSArMiw5IEBACiAgICAgICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgbWFrZWZpeGVkKCkuCiAgICAgICovCiAKLSAgICAvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdAotICAgICAgIGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZAotICAgICAgIGlzIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAgICAvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLgorICAgICAgIEl0IGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbGlicmFyeSBhbmQgaXMKKyAgICAgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCiAgICAgICovCiAKICAgICBzdGF0aWMgY29uc3QgY29kZSBsZW5maXhbNTEyXSA9IHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZsYXRlLmMgYi9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCmluZGV4IGE4NDMxYWIuLjg3MGY4OWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2luZmxhdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmxhdGUuYyAtLSB6bGliIGRlY29tcHJlc3Npb24KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC05MywxNCArOTMsMTUgQEAKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogbG9jYWwgdm9pZCBmaXhlZHRhYmxlcyBPRigoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZSkpOwotbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyBPRigoel9zdHJlYW1wIHN0cm0sIHVuc2lnbmVkIG91dCkpOworbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyBPRigoel9zdHJlYW1wIHN0cm0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb3B5KSk7CiAjaWZkZWYgQlVJTERGSVhFRAogICAgdm9pZCBtYWtlZml4ZWQgT0YoKHZvaWQpKTsKICNlbmRpZgotbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaCBPRigodW5zaWduZWQgRkFSICpoYXZlLCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmLAorbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaCBPRigodW5zaWduZWQgRkFSICpoYXZlLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuKSk7CiAKLWludCBaRVhQT1JUIGluZmxhdGVSZXNldChzdHJtKQoraW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0S2VlcChzdHJtKQogel9zdHJlYW1wIHN0cm07CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKQEAgLTEwOSwxNSArMTEwLDEzIEBACiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAgICAgc3RybS0+dG90YWxfaW4gPSBzdHJtLT50b3RhbF9vdXQgPSBzdGF0ZS0+dG90YWwgPSAwOwogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKLSAgICBzdHJtLT5hZGxlciA9IDE7ICAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovCisgICAgaWYgKHN0YXRlLT53cmFwKSAgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLworICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT53cmFwICYgMTsKICAgICBzdGF0ZS0+bW9kZSA9IEhFQUQ7CiAgICAgc3RhdGUtPmxhc3QgPSAwOwogICAgIHN0YXRlLT5oYXZlZGljdCA9IDA7CiAgICAgc3RhdGUtPmRtYXggPSAzMjc2OFU7CiAgICAgc3RhdGUtPmhlYWQgPSBaX05VTEw7Ci0gICAgc3RhdGUtPndzaXplID0gMDsKLSAgICBzdGF0ZS0+d2hhdmUgPSAwOwotICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgc3RhdGUtPmhvbGQgPSAwOwogICAgIHN0YXRlLT5iaXRzID0gMDsKICAgICBzdGF0ZS0+bGVuY29kZSA9IHN0YXRlLT5kaXN0Y29kZSA9IHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwpAQCAtMTI3LDYgKzEyNiwxOSBAQAogICAgIHJldHVybiBaX09LOwogfQogCitpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQoc3RybSkKK3pfc3RyZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgc3RhdGUtPndzaXplID0gMDsKKyAgICBzdGF0ZS0+d2hhdmUgPSAwOworICAgIHN0YXRlLT53bmV4dCA9IDA7CisgICAgcmV0dXJuIGluZmxhdGVSZXNldEtlZXAoc3RybSk7Cit9CisKIGludCBaRVhQT1JUIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykKIHpfc3RyZWFtcCBzdHJtOwogaW50IHdpbmRvd0JpdHM7CkBAIC0xODAsMTAgKzE5MiwxOSBAQAogICAgIGlmIChzdHJtID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovCiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgICAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKQogICAgICAgICAgICAgWkFMTE9DKHN0cm0sIDEsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKQEAgLTMyMSw4ICszNDIsOCBAQAogICAgIGxvdyA9IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoKGxvdyAlIDcpID09IDApIHByaW50ZigiXG4gICAgICAgICIpOwotICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCBzdGF0ZS5sZW5jb2RlW2xvd10ub3AsIHN0YXRlLmxlbmNvZGVbbG93XS5iaXRzLAotICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZVtsb3ddLnZhbCk7CisgICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIChsb3cgJiAxMjcpID09IDk5ID8gNjQgOiBzdGF0ZS5sZW5jb2RlW2xvd10ub3AsCisgICAgICAgICAgICAgICBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywgc3RhdGUubGVuY29kZVtsb3ddLnZhbCk7CiAgICAgICAgIGlmICgrK2xvdyA9PSBzaXplKSBicmVhazsKICAgICAgICAgcHV0Y2hhcignLCcpOwogICAgIH0KQEAgLTM1NSwxMiArMzc2LDEzIEBACiAgICBvdXRwdXQgd2lsbCBmYWxsIGluIHRoZSBvdXRwdXQgZGF0YSwgbWFraW5nIG1hdGNoIGNvcGllcyBzaW1wbGVyIGFuZCBmYXN0ZXIuCiAgICBUaGUgYWR2YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRhdGEgY2FjaGVzLgogICovCi1sb2NhbCBpbnQgdXBkYXRld2luZG93KHN0cm0sIG91dCkKK2xvY2FsIGludCB1cGRhdGV3aW5kb3coc3RybSwgZW5kLCBjb3B5KQogel9zdHJlYW1wIHN0cm07Ci11bnNpZ25lZCBvdXQ7Citjb25zdCBCeXRlZiAqZW5kOwordW5zaWduZWQgY29weTsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNvcHksIGRpc3Q7CisgICAgdW5zaWduZWQgZGlzdDsKIAogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogCkBAIC0zODAsMTkgKzQwMiwxOCBAQAogICAgIH0KIAogICAgIC8qIGNvcHkgc3RhdGUtPndzaXplIG9yIGxlc3Mgb3V0cHV0IGJ5dGVzIGludG8gdGhlIGNpcmN1bGFyIHdpbmRvdyAqLwotICAgIGNvcHkgPSBvdXQgLSBzdHJtLT5hdmFpbF9vdXQ7CiAgICAgaWYgKGNvcHkgPj0gc3RhdGUtPndzaXplKSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53c2l6ZSk7CisgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gc3RhdGUtPndzaXplLCBzdGF0ZS0+d3NpemUpOwogICAgICAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBkaXN0ID0gc3RhdGUtPndzaXplIC0gc3RhdGUtPnduZXh0OwogICAgICAgICBpZiAoZGlzdCA+IGNvcHkpIGRpc3QgPSBjb3B5OwotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIHN0cm0tPm5leHRfb3V0IC0gY29weSwgZGlzdCk7CisgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7CiAgICAgICAgIGNvcHkgLT0gZGlzdDsKICAgICAgICAgaWYgKGNvcHkpIHsKLSAgICAgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBjb3B5KTsKKyAgICAgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7CiAgICAgICAgICAgICBzdGF0ZS0+d25leHQgPSBjb3B5OwogICAgICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgICAgICB9CkBAIC00OTksMTEgKzUyMCw2IEBACiAgICAgICAgIGJpdHMgLT0gYml0cyAmIDc7IFwKICAgICB9IHdoaWxlICgwKQogCi0vKiBSZXZlcnNlIHRoZSBieXRlcyBpbiBhIDMyLWJpdCB2YWx1ZSAqLwotI2RlZmluZSBSRVZFUlNFKHEpIFwKLSAgICAoKCgocSkgPj4gMjQpICYgMHhmZikgKyAoKChxKSA+PiA4KSAmIDB4ZmYwMCkgKyBcCi0gICAgICgoKHEpICYgMHhmZjAwKSA8PCA4KSArICgoKHEpICYgMHhmZikgPDwgMjQpKQotCiAvKgogICAgaW5mbGF0ZSgpIHVzZXMgYSBzdGF0ZSBtYWNoaW5lIHRvIHByb2Nlc3MgYXMgbXVjaCBpbnB1dCBkYXRhIGFuZCBnZW5lcmF0ZSBhcwogICAgbXVjaCBvdXRwdXQgZGF0YSBhcyBwb3NzaWJsZSBiZWZvcmUgcmV0dXJuaW5nLiAgVGhlIHN0YXRlIG1hY2hpbmUgaXMKQEAgLTU5MSw3ICs2MDcsNyBAQAogaW50IGZsdXNoOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKnB1dDsgICAgIC8qIG5leHQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgaGF2ZSwgbGVmdDsgICAgICAgIC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgbG9uZyBob2xkOyAgICAgICAgIC8qIGJpdCBidWZmZXIgKi8KQEAgLTc5Nyw3ICs4MTMsNyBAQAogI2VuZGlmCiAgICAgICAgIGNhc2UgRElDVElEOgogICAgICAgICAgICAgTkVFREJJVFMoMzIpOwotICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+Y2hlY2sgPSBSRVZFUlNFKGhvbGQpOworICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+Y2hlY2sgPSBaU1dBUDMyKGhvbGQpOwogICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gRElDVDsKICAgICAgICAgY2FzZSBESUNUOgpAQCAtOTA1LDcgKzkyMSw3IEBACiAgICAgICAgICAgICB3aGlsZSAoc3RhdGUtPmhhdmUgPCAxOSkKICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tvcmRlcltzdGF0ZS0+aGF2ZSsrXV0gPSAwOwogICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDc7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKENPREVTLCBzdGF0ZS0+bGVucywgMTksICYoc3RhdGUtPm5leHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHN0YXRlLT5sZW5iaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtOTI1LDcgKzk0MSw2IEBACiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTgwLDcgKzk5NSw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5oCiAgICAgICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovCiAgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0gOTsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoTEVOUywgc3RhdGUtPmxlbnMsIHN0YXRlLT5ubGVuLCAmKHN0YXRlLT5uZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTk4OSw3ICsxMDA0LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmRpc3RiaXRzID0gNjsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLT5sZW5zICsgc3RhdGUtPm5sZW4sIHN0YXRlLT5uZGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHN0YXRlLT5uZXh0KSwgJihzdGF0ZS0+ZGlzdGJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC0xMTcwLDcgKzExODUsNyBAQAogI2lmZGVmIEdVTlpJUAogICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmZsYWdzID8gaG9sZCA6CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgIFJFVkVSU0UoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgeworICAgICAgICAgICAgICAgICAgICAgWlNXQVAzMihob2xkKSkgIT0gc3RhdGUtPmNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImluY29ycmVjdCBkYXRhIGNoZWNrIjsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIxNCw4ICsxMjI5LDkgQEAKICAgICAgKi8KICAgaW5mX2xlYXZlOgogICAgIFJFU1RPUkUoKTsKLSAgICBpZiAoc3RhdGUtPndzaXplIHx8IChzdGF0ZS0+bW9kZSA8IENIRUNLICYmIG91dCAhPSBzdHJtLT5hdmFpbF9vdXQpKQotICAgICAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIG91dCkpIHsKKyAgICBpZiAoc3RhdGUtPndzaXplIHx8IChvdXQgIT0gc3RybS0+YXZhaWxfb3V0ICYmIHN0YXRlLT5tb2RlIDwgQkFEICYmCisgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPCBDSEVDSyB8fCBmbHVzaCAhPSBaX0ZJTklTSCkpKQorICAgICAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPm5leHRfb3V0LCBvdXQgLSBzdHJtLT5hdmFpbF9vdXQpKSB7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE1FTTsKICAgICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICAgICAgfQpAQCAtMTI0OSwxMyArMTI2NSwzNyBAQAogICAgIHJldHVybiBaX09LOwogfQogCitpbnQgWkVYUE9SVCBpbmZsYXRlR2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQorel9zdHJlYW1wIHN0cm07CitCeXRlZiAqZGljdGlvbmFyeTsKK3VJbnQgKmRpY3RMZW5ndGg7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIC8qIGNoZWNrIHN0YXRlICovCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworCisgICAgLyogY29weSBkaWN0aW9uYXJ5ICovCisgICAgaWYgKHN0YXRlLT53aGF2ZSAmJiBkaWN0aW9uYXJ5ICE9IFpfTlVMTCkgeworICAgICAgICB6bWVtY3B5KGRpY3Rpb25hcnksIHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsCisgICAgICAgICAgICAgICAgc3RhdGUtPndoYXZlIC0gc3RhdGUtPnduZXh0KTsKKyAgICAgICAgem1lbWNweShkaWN0aW9uYXJ5ICsgc3RhdGUtPndoYXZlIC0gc3RhdGUtPnduZXh0LAorICAgICAgICAgICAgICAgIHN0YXRlLT53aW5kb3csIHN0YXRlLT53bmV4dCk7CisgICAgfQorICAgIGlmIChkaWN0TGVuZ3RoICE9IFpfTlVMTCkKKyAgICAgICAgKmRpY3RMZW5ndGggPSBzdGF0ZS0+d2hhdmU7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKIGludCBaRVhQT1JUIGluZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCiB6X3N0cmVhbXAgc3RybTsKIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5OwogdUludCBkaWN0TGVuZ3RoOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgbG9uZyBpZDsKKyAgICB1bnNpZ25lZCBsb25nIGRpY3RpZDsKKyAgICBpbnQgcmV0OwogCiAgICAgLyogY2hlY2sgc3RhdGUgKi8KICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CkBAIC0xMjYzLDI5ICsxMzAzLDIxIEBACiAgICAgaWYgKHN0YXRlLT53cmFwICE9IDAgJiYgc3RhdGUtPm1vZGUgIT0gRElDVCkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCi0gICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBpZCAqLworICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWRlbnRpZmllciAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBESUNUKSB7Ci0gICAgICAgIGlkID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgaWQgPSBhZGxlcjMyKGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKLSAgICAgICAgaWYgKGlkICE9IHN0YXRlLT5jaGVjaykKKyAgICAgICAgZGljdGlkID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKKyAgICAgICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOworICAgICAgICBpZiAoZGljdGlkICE9IHN0YXRlLT5jaGVjaykKICAgICAgICAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7CiAgICAgfQogCi0gICAgLyogY29weSBkaWN0aW9uYXJ5IHRvIHdpbmRvdyAqLwotICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS0+YXZhaWxfb3V0KSkgeworICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgdXNpbmcgdXBkYXRld2luZG93KCksIHdoaWNoIHdpbGwgYW1lbmQgdGhlCisgICAgICAgZXhpc3RpbmcgZGljdGlvbmFyeSBpZiBhcHByb3ByaWF0ZSAqLworICAgIHJldCA9IHVwZGF0ZXdpbmRvdyhzdHJtLCBkaWN0aW9uYXJ5ICsgZGljdExlbmd0aCwgZGljdExlbmd0aCk7CisgICAgaWYgKHJldCkgewogICAgICAgICBzdGF0ZS0+bW9kZSA9IE1FTTsKICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIH0KLSAgICBpZiAoZGljdExlbmd0aCA+IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGRpY3Rpb25hcnkgKyBkaWN0TGVuZ3RoIC0gc3RhdGUtPndzaXplLAotICAgICAgICAgICAgICAgIHN0YXRlLT53c2l6ZSk7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53c2l6ZSAtIGRpY3RMZW5ndGgsIGRpY3Rpb25hcnksCi0gICAgICAgICAgICAgICAgZGljdExlbmd0aCk7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IGRpY3RMZW5ndGg7Ci0gICAgfQogICAgIHN0YXRlLT5oYXZlZGljdCA9IDE7CiAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGRpY3Rpb25hcnkgc2V0XG4iKSk7CiAgICAgcmV0dXJuIFpfT0s7CkBAIC0xMzIxLDcgKzEzNTMsNyBAQAogICovCiBsb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoKGhhdmUsIGJ1ZiwgbGVuKQogdW5zaWduZWQgRkFSICpoYXZlOwotdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiB1bnNpZ25lZCBsZW47CiB7CiAgICAgdW5zaWduZWQgZ290OwpAQCAtMTQzMyw4ICsxNDY1LDggQEAKICAgICB9CiAKICAgICAvKiBjb3B5IHN0YXRlICovCi0gICAgem1lbWNweShkZXN0LCBzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOwotICAgIHptZW1jcHkoY29weSwgc3RhdGUsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOworICAgIHptZW1jcHkoKHZvaWRwZilkZXN0LCAodm9pZHBmKXNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgem1lbWNweSgodm9pZHBmKWNvcHksICh2b2lkcGYpc3RhdGUsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZS0+bGVuY29kZSA+PSBzdGF0ZS0+Y29kZXMgJiYKICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPD0gc3RhdGUtPmNvZGVzICsgRU5PVUdIIC0gMSkgewogICAgICAgICBjb3B5LT5sZW5jb2RlID0gY29weS0+Y29kZXMgKyAoc3RhdGUtPmxlbmNvZGUgLSBzdGF0ZS0+Y29kZXMpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmMgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYwppbmRleCAxMWU5YzUyLi40NGQ4OWNmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZnRyZWVzLmMgLS0gZ2VuZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgTUFYQklUUyAxNQogCiBjb25zdCBjaGFyIGluZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBpbmZsYXRlIDEuMi41IENvcHlyaWdodCAxOTk1LTIwMTAgTWFyayBBZGxlciAiOworICAgIiBpbmZsYXRlIDEuMi44IENvcHlyaWdodCAxOTk1LTIwMTMgTWFyayBBZGxlciAiOwogLyoKICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwfTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogICAgICAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwKLSAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDczLCAxOTV9OworICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzIsIDc4fTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGJhc2VbMzJdID0geyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCiAgICAgICAgIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKICAgICAgICAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LApAQCAtMjA4LDggKzIwOCw4IEBACiAgICAgbWFzayA9IHVzZWQgLSAxOyAgICAgICAgICAgIC8qIG1hc2sgZm9yIGNvbXBhcmluZyBsb3cgKi8KIAogICAgIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqLwotICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPj0gRU5PVUdIX0xFTlMpIHx8Ci0gICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPj0gRU5PVUdIX0RJU1RTKSkKKyAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8CisgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIC8qIHByb2Nlc3MgYWxsIGNvZGVzIGFuZCBtYWtlIHRhYmxlIGVudHJpZXMgKi8KQEAgLTI3Nyw4ICsyNzcsOCBAQAogCiAgICAgICAgICAgICAvKiBjaGVjayBmb3IgZW5vdWdoIHNwYWNlICovCiAgICAgICAgICAgICB1c2VkICs9IDFVIDw8IGN1cnI7Ci0gICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAotICAgICAgICAgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPj0gRU5PVUdIX0RJU1RTKSkKKyAgICAgICAgICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHwKKyAgICAgICAgICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICAgICAgLyogcG9pbnQgZW50cnkgaW4gcm9vdCB0YWJsZSB0byBzdWItdGFibGUgKi8KQEAgLTI4OSwzOCArMjg5LDE0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKgotICAgICAgIEZpbGwgaW4gcmVzdCBvZiB0YWJsZSBmb3IgaW5jb21wbGV0ZSBjb2Rlcy4gIFRoaXMgbG9vcCBpcyBzaW1pbGFyIHRvIHRoZQotICAgICAgIGxvb3AgYWJvdmUgaW4gaW5jcmVtZW50aW5nIGh1ZmYgZm9yIHRhYmxlIGluZGljZXMuICBJdCBpcyBhc3N1bWVkIHRoYXQKLSAgICAgICBsZW4gaXMgZXF1YWwgdG8gY3VyciArIGRyb3AsIHNvIHRoZXJlIGlzIG5vIGxvb3AgbmVlZGVkIHRvIGluY3JlbWVudAotICAgICAgIHRocm91Z2ggaGlnaCBpbmRleCBiaXRzLiAgV2hlbiB0aGUgY3VycmVudCBzdWItdGFibGUgaXMgZmlsbGVkLCB0aGUgbG9vcAotICAgICAgIGRyb3BzIGJhY2sgdG8gdGhlIHJvb3QgdGFibGUgdG8gZmlsbCBpbiBhbnkgcmVtYWluaW5nIGVudHJpZXMgdGhlcmUuCi0gICAgICovCi0gICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCi0gICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOwotICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7Ci0gICAgd2hpbGUgKGh1ZmYgIT0gMCkgewotICAgICAgICAvKiB3aGVuIGRvbmUgd2l0aCBzdWItdGFibGUsIGRyb3AgYmFjayB0byByb290IHRhYmxlICovCi0gICAgICAgIGlmIChkcm9wICE9IDAgJiYgKGh1ZmYgJiBtYXNrKSAhPSBsb3cpIHsKLSAgICAgICAgICAgIGRyb3AgPSAwOwotICAgICAgICAgICAgbGVuID0gcm9vdDsKLSAgICAgICAgICAgIG5leHQgPSAqdGFibGU7Ci0gICAgICAgICAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcilsZW47Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBwdXQgaW52YWxpZCBjb2RlIG1hcmtlciBpbiB0YWJsZSAqLwotICAgICAgICBuZXh0W2h1ZmYgPj4gZHJvcF0gPSBoZXJlOwotCi0gICAgICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQgdGhlIGxlbi1iaXQgY29kZSBodWZmICovCi0gICAgICAgIGluY3IgPSAxVSA8PCAobGVuIC0gMSk7Ci0gICAgICAgIHdoaWxlIChodWZmICYgaW5jcikKLSAgICAgICAgICAgIGluY3IgPj49IDE7Ci0gICAgICAgIGlmIChpbmNyICE9IDApIHsKLSAgICAgICAgICAgIGh1ZmYgJj0gaW5jciAtIDE7Ci0gICAgICAgICAgICBodWZmICs9IGluY3I7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaHVmZiA9IDA7CisgICAgLyogZmlsbCBpbiByZW1haW5pbmcgdGFibGUgZW50cnkgaWYgY29kZSBpcyBpbmNvbXBsZXRlIChndWFyYW50ZWVkIHRvIGhhdmUKKyAgICAgICBhdCBtb3N0IG9uZSByZW1haW5pbmcgZW50cnksIHNpbmNlIGlmIHRoZSBjb2RlIGlzIGluY29tcGxldGUsIHRoZQorICAgICAgIG1heGltdW0gY29kZSBsZW5ndGggdGhhdCB3YXMgYWxsb3dlZCB0byBnZXQgdGhpcyBmYXIgaXMgb25lIGJpdCkgKi8KKyAgICBpZiAoaHVmZiAhPSAwKSB7CisgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcik2NDsgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCisgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKKyAgICAgICAgaGVyZS52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKKyAgICAgICAgbmV4dFtodWZmXSA9IGhlcmU7CiAgICAgfQogCiAgICAgLyogc2V0IHJldHVybiBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaCBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oCmluZGV4IDI0MjMwYzUuLmJhYTUzYTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oCisrKyBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oCkBAIC00MSw3ICs0MSw3IEBACiAgICBleGFtcGxlcy9lbm91Z2guYyBmb3VuZCBpbiB0aGUgemxpYiBkaXN0cmlidHV0aW9uLiAgVGhlIGFyZ3VtZW50cyB0byB0aGF0CiAgICBwcm9ncmFtIGFyZSB0aGUgbnVtYmVyIG9mIHN5bWJvbHMsIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSwgYW5kIHRoZQogICAgbWF4aW11bSBiaXQgbGVuZ3RoIG9mIGEgY29kZS4gICJlbm91Z2ggMjg2IDkgMTUiIGZvciBsaXRlcmFsL2xlbmd0aCBjb2RlcwotICAgcmV0dXJucyA4NTIsIGFuZCAiZW5vdWdoIDMwIDYgMTUiIGZvciBkaXN0YW5jZSBjb2RlcyByZXR1cm5zIDU5Mi4KKyAgIHJldHVybnMgcmV0dXJucyA4NTIsIGFuZCAiZW5vdWdoIDMwIDYgMTUiIGZvciBkaXN0YW5jZSBjb2RlcyByZXR1cm5zIDU5Mi4KICAgIFRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSAoOSBvciA2KSBpcyBmb3VuZCBpbiB0aGUgZmlmdGggYXJndW1lbnQgb2YgdGhlCiAgICBpbmZsYXRlX3RhYmxlKCkgY2FsbHMgaW4gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMuICBJZiB0aGUgcm9vdCB0YWJsZSBzaXplIGlzCiAgICBjaGFuZ2VkLCB0aGVuIHRoZXNlIG1heGltdW0gc2l6ZXMgd291bGQgYmUgbmVlZCB0byBiZSByZWNhbGN1bGF0ZWQgYW5kCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tIGIvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQppbmRleCA2NTc2NDkwLi42NWU5ZDBjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCisrKyBiL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KQEAgLTMsNyArMyw3IEBACiAkIQogJCEgSW4gY2FzZSBvZiBwcm9ibGVtcyB3aXRoIHRoZSBpbnN0YWxsIHlvdSBtaWdodCBjb250YWN0IG1lIGF0CiAkISB6aW5zZXJAemluc2VyLm5vLWlwLmluZm8ocHJlZmVycmVkKSBvcgotJCEgemluc2VyQHN5c2Rldi5kZXV0c2NoZS1ib2Vyc2UuY29tICh3b3JrKQorJCEgbWFydGluLnppbnNlckBldXJleGNoYW5nZS5jb20gKHdvcmspCiAkIQogJCEgTWFrZSBwcm9jZWR1cmUgaGlzdG9yeSBmb3IgWmxpYgogJCEKQEAgLTE0LDkgKzE0LDE2IEBACiAkISAwLjAzIDIwMDkxMjI0IEFkZCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlIGNoZWNrCiAkISAwLjA0IDIwMTAwMTEwIEFkZCBuZXcgZ3pjbG9zZSwgZ3psaWIsIGd6cmVhZCwgZ3p3cml0ZQogJCEgMC4wNSAyMDEwMDIyMSBFeGNoYW5nZSB6bGliZGVmcy5oIGJ5IHpjb25mLmguaW4KKyQhIDAuMDYgMjAxMjAxMTEgRml4IG1pc3NpbmcgYW1pc3NfZXJyLCB1cGRhdGUgemNvbmZfaC5pbiwgZml4IG5ldyBleG1wbGVzCiskISAgICAgICAgICAgICAgIHN1YmRpciBwYXRoLCB1cGRhdGUgbW9kdWxlIHNlYXJjaCBpbiBtYWtlZmlsZS5pbgorJCEgMC4wNyAyMDEyMDExNSBUcmlnZ2VyZWQgYnkgd29yayBkb25lIGJ5IEFsZXhleSBDaHVwYWhpbiBjb21wbGV0bHkgcmVkZXNpZ25lZAorJCEgICAgICAgICAgICAgICBzaGFyZWQgaW1hZ2UgY3JlYXRpb24KKyQhIDAuMDggMjAxMjAyMTkgTWFrZSBpdCB3b3JrIG9uIFZBWCBhZ2FpbiwgcHJlLWxvYWQgbWlzc2luZyBzeW1ib2xzIHRvIHNoYXJlZAorJCEgICAgICAgICAgICAgICBpbWFnZQorJCEgMC4wOSAyMDEyMDMwNSBTTVMuICBQMSBzZXRzIGJ1aWxkZXIgKCJNTUsiLCAiTU1TIiwgIiAiIChidWlsdC1pbikpLgorJCEgICAgICAgICAgICAgICAiIiAtPiBhdXRvbWF0aWMsIHByZWZlcmVuY2U6IE1NSywgTU1TLCBidWlsdC1pbi4KICQhCiAkIG9uIGVycm9yIHRoZW4gZ290byBlcnJfZXhpdAotJCBzZXQgcHJvYy9wYXJzZT1leHQKICQhCiAkIHRydWUgID0gMQogJCBmYWxzZSA9IDAKQEAgLTMyLDMxICszOSw0MyBAQAogJCEKICQhIFNldHVwIHZhcmlhYmxlcyBob2xkaW5nICJjb25maWciIGluZm9ybWF0aW9uCiAkIQotJCBNYWtlICAgID0gIiIKKyQgTWFrZSAgICA9ICInJ3AxJyIKICQgbmFtZSAgICAgPSAiWmxpYiIKICQgdmVyc2lvbiAgPSAiPy4/Lj8iCiAkIHZfc3RyaW5nID0gIlpMSUJfVkVSU0lPTiIKICQgdl9maWxlICAgPSAiemxpYi5oIgotJCBjY29wdCAgID0gIiIKKyQgY2NvcHQgICA9ICIvaW5jbHVkZSA9IFtdIgogJCBsb3B0cyAgID0gIiIKICQgZG5zcmwgICA9ICIiCi0kIGFjb25mX2luX2ZpbGUgPSAiemNvbmYuaC5pbiN6Y29uZi5oX2luIgorJCBhY29uZl9pbl9maWxlID0gInpjb25mLmguaW4jemNvbmYuaF9pbiN6Y29uZl9oLmluIgogJCBjb25mX2NoZWNrX3N0cmluZyA9ICIiCiAkIGxpbmtvbmx5ID0gZmFsc2UKICQgb3B0ZmlsZSAgPSBuYW1lICsgIi5vcHQiCiskIG1hcGZpbGUgID0gbmFtZSArICIubWFwIgogJCBsaWJkZWZzICA9ICIiCiskIHZheCAgICAgID0gZiRnZXRzeWkoIkhXX01PREVMIikubHQuMTAyNAogJCBheHAgICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmdlLjEwMjQgLmFuZC4gZiRnZXRzeWkoIkhXX01PREVMIikubHQuNDA5NgorJCBpYTY0ICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmdlLjQwOTYKICQhCi0kIHdob2FtaSA9IGYkcGFyc2UoZiRlbnZpb3JubWVudCgiUHJvY2VkdXJlIiksLCwsIk5PX0NPTkNFQUwiKQorJCEgMjAxMi0wMy0wNSBTTVMuCiskISBXaHkgaXMgdGhpcyBuZWVkZWQ/ICBBbmQgaWYgaXQgaXMgbmVlZGVkLCB3aHkgbm90IHNpbXBseSAiLm5vdC4gdmF4Ij8KKyQhCiskISEhIGlmIGF4cCAub3IuIGlhNjQgdGhlbiAgc2V0IHByb2MvcGFyc2U9ZXh0ZW5kZWQKKyQhCiskIHdob2FtaSA9IGYkcGFyc2UoZiRlbnZpcm9ubWVudCgiUHJvY2VkdXJlIiksLCwsIk5PX0NPTkNFQUwiKQogJCBteWRlZiAgPSBGJHBhcnNlKHdob2FtaSwsLCJERVZJQ0UiKQogJCBteWRpciAgPSBmJHBhcnNlKHdob2FtaSwsLCJESVJFQ1RPUlkiKSAtICJdWyIKICQgbXlwcm9jID0gZiRwYXJzZSh3aG9hbWksLCwiTmFtZSIpICsgZiRwYXJzZSh3aG9hbWksLCwidHlwZSIpCiAkIQogJCEgQ2hlY2sgZm9yIE1NSy9NTVMKICQhCi0kIElmIEYkU2VhcmNoICgiU3lzJFN5c3RlbTpNTVMuRVhFIikgLm5lcy4gIiIgVGhlbiBNYWtlID0gIk1NUyIKLSQgSWYgRiRUeXBlIChNTUspIC5lcXMuICJTVFJJTkciIFRoZW4gTWFrZSA9ICJNTUsiCi0kIQorJCBpZiAoTWFrZSAuZXFzLiAiIikKKyQgdGhlbgorJCAgIElmIEYkU2VhcmNoICgiU3lzJFN5c3RlbTpNTVMuRVhFIikgLm5lcy4gIiIgVGhlbiBNYWtlID0gIk1NUyIKKyQgICBJZiBGJFR5cGUgKE1NSykgLmVxcy4gIlNUUklORyIgVGhlbiBNYWtlID0gIk1NSyIKKyQgZWxzZQorJCAgIE1ha2UgPSBmJGVkaXQoIE1ha2UsICJ0cmltIikKKyQgZW5kaWYKICQhCiAkIGdvc3ViIGZpbmRfdmVyc2lvbgogJCEKQEAgLTY5LDYgKzg4LDcgQEAKICQhCiAkIGdvc3ViIGNoZWNrX2NvbXBpbGVyCiAkIGNsb3NlIHRvcHQKKyQgY2xvc2Ugb3B0ZgogJCEKICQgaWYgaXRzX2RlY2MKICQgdGhlbgpAQCAtODMsNiArMTAzLDE1IEBACiAkICAgICAgIGRlZmluZSBzeXMgZGVjYyRsaWJyYXJ5X2luY2x1ZGU6CiAkICAgICBlbmRpZgogJCAgIGVuZGlmCiskIQorJCEgMjAxMi0wMy0wNSBTTVMuCiskISBXaHkgL05BTUVTID0gQVNfSVM/ICBXaHkgbm90IHNpbXBseSAiLm5vdC4gdmF4Ij8gIEFuZCB3aHkgbm90IG9uIFZBWD8KKyQhCiskICAgaWYgYXhwIC5vci4gaWE2NAorJCAgIHRoZW4KKyQgICAgICAgY2NvcHQgPSBjY29wdCArICIvbmFtZT1hc19pcy9vcHQ9KGlubGluZT1zcGVlZCkiCiskICAgICAgIHNfY2FzZSA9IHRydWUKKyQgICBlbmRpZgogJCBlbmRpZgogJCBpZiBpdHNfdmF4YyAub3IuIGl0c19nbnVjCiAkIHRoZW4KQEAgLTEyMiwxNSArMTUxLDIwIEBACiAkIGVuZGlmCiAkIGdvdG8gYWNvbmZfbG9vcAogJEFDT05GX0VYSVQ6CiskIHdyaXRlIGFjb25mICIiCiskIHdyaXRlIGFjb25mICIvKiBWTVMgc3BlY2lmaWNzIGFkZGVkIGJ5IG1ha2Vfdm1zLmNvbTogKi8iCiAkIHdyaXRlIGFjb25mICIjZGVmaW5lIFZNUyAxIgogJCB3cml0ZSBhY29uZiAiI2luY2x1ZGUgPHVuaXN0ZC5oPiIKICQgd3JpdGUgYWNvbmYgIiNpbmNsdWRlIDx1bml4aW8uaD4iCiAkIHdyaXRlIGFjb25mICIjaWZkZWYgX0xBUkdFRklMRSIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgb2ZmNjRfdCBfX29mZjY0X3QiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZvcGVuNjQgZm9wZW4iCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZzZWVrbzY0IGZzZWVrbyIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgbHNlZWs2NCBsc2VlayIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgZnRlbGxvNjQgZnRlbGwiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBvZmY2NF90IF9fb2ZmNjRfdCIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZvcGVuNjQgZm9wZW4iCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmc2Vla282NCBmc2Vla28iCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBsc2VlazY0IGxzZWVrIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZnRlbGxvNjQgZnRlbGwiCiskIHdyaXRlIGFjb25mICIjZW5kaWYiCiskIHdyaXRlIGFjb25mICIjaWYgIWRlZmluZWQoIF9fVkFYKSAmJiAoX19DUlRMX1ZFUiA+PSA3MDMxMjAwMCkiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBIQVZFX1ZTTlBSSU5URiIKICQgd3JpdGUgYWNvbmYgIiNlbmRpZiIKICQgY2xvc2UgYWNvbmZfaW4KICQgY2xvc2UgYWNvbmYKQEAgLTEzOSw4ICsxNzMsOSBAQAogJCEKICQgd3JpdGUgc3lzJG91dHB1dCAiQ29tcGlsaW5nIFpsaWIgc291cmNlcyAuLi4iCiAkIGlmIG1ha2UuZXFzLiIiCi0kICB0aGVuCi0kICAgZGVsZSBleGFtcGxlLm9iajsqLG1pbmlnemlwLm9iajsqCiskIHRoZW4KKyQgICBpZiAoZiRzZWFyY2goICJleGFtcGxlLm9iajsqIikgLm5lcy4gIiIpIHRoZW4gZGVsZXRlIGV4YW1wbGUub2JqOyoKKyQgICBpZiAoZiRzZWFyY2goICJtaW5pZ3ppcC5vYmo7KiIpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSBtaW5pZ3ppcC5vYmo7KgogJCAgIENBTEwgTUFLRSBhZGxlcjMyLk9CSiAiQ0MgJydDQ09QVCcgYWRsZXIzMiIgLQogICAgICAgICAgICAgICAgIGFkbGVyMzIuYyB6bGliLmggemNvbmYuaAogJCAgIENBTEwgTUFLRSBjb21wcmVzcy5PQkogIkNDICcnQ0NPUFQnIGNvbXByZXNzIiAtCkBAIC0xNzQsNDEgKzIwOSwzNCBAQAogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIFpsaWIgLi4uIgogJCAgIENBTEwgTUFLRSBsaWJ6Lk9MQiAibGliL2NyZWEgbGliei5vbGIgKi5vYmoiICouT0JKCiAkICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgZXhhbXBsZS4uLiIKLSQgICBDQUxMIE1BS0UgZXhhbXBsZS5PQkogIkNDICcnQ0NPUFQnIGV4YW1wbGUiIC0KLSAgICAgICAgICAgICAgICBleGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKyQgICBDQUxMIE1BS0UgZXhhbXBsZS5PQkogIkNDICcnQ0NPUFQnIFsudGVzdF1leGFtcGxlIiAtCisgICAgICAgICAgICAgICAgWy50ZXN0XWV4YW1wbGUuYyB6bGliLmggemNvbmYuaAogJCAgIGNhbGwgbWFrZSBleGFtcGxlLmV4ZSAiTElOSyBleGFtcGxlLGxpYnoub2xiL2xpYiIgZXhhbXBsZS5vYmogbGliei5vbGIKLSQgICBpZiBmJHNlYXJjaCgieDExdm1zOnh2bXN1dGlscy5vbGIiKSAubmVzLiAiIgotJCAgIHRoZW4KLSQgICAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIG1pbmlnemlwLi4uIgotJCAgICAgQ0FMTCBNQUtFIG1pbmlnemlwLk9CSiAiQ0MgJydDQ09QVCcgbWluaWd6aXAiIC0KLSAgICAgICAgICAgICAgICBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCi0kICAgICBjYWxsIG1ha2UgbWluaWd6aXAuZXhlIC0KLSAgICAgICAgICAgICAgICAiTElOSyBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIseDExdm1zOnh2bXN1dGlscy5vbGIvbGliIiAtCi0gICAgICAgICAgICAgICAgbWluaWd6aXAub2JqIGxpYnoub2xiCi0kICAgZW5kaWYKLSQgIGVsc2UKKyQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBtaW5pZ3ppcC4uLiIKKyQgICBDQUxMIE1BS0UgbWluaWd6aXAuT0JKICJDQyAnJ0NDT1BUJyBbLnRlc3RdbWluaWd6aXAiIC0KKyAgICAgICAgICAgICAgWy50ZXN0XW1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKyQgICBjYWxsIG1ha2UgbWluaWd6aXAuZXhlIC0KKyAgICAgICAgICAgICAgIkxJTksgbWluaWd6aXAsbGliei5vbGIvbGliIiAtCisgICAgICAgICAgICAgIG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgorJCBlbHNlCiAkICAgZ29zdWIgY3JlYV9tbXMKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJNYWtlICcnbmFtZScgJyd2ZXJzaW9uJyB3aXRoICcnTWFrZScgIgogJCAgICdtYWtlJwotJCAgZW5kaWYKLSQhCi0kISBBbHBoYSBnZXRzIGEgc2hhcmVhYmxlIGltYWdlCi0kIQotJCBJZiBheHAKLSQgVGhlbgotJCAgIGdvc3ViIGNyZWFfb2xpc3QKLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJDcmVhdGluZyBsaWJ6c2hyLmV4ZSIKLSQgICBjYWxsIGFuYWxfb2JqX2F4cCBtb2R1bGVzLm9wdCBfbGluay5vcHQKLSQgICBpZiBzX2Nhc2UKLSQgICB0aGVuCi0kICAgICAgb3Blbi9hcHBlbmQgb3B0ZiBtb2R1bGVzLm9wdAotJCAgICAgIHdyaXRlIG9wdGYgImNhc2Vfc2Vuc2l0aXZlPVlFUyIKLSQgICAgICBjbG9zZSBvcHRmCi0kICAgZW5kaWYKLSQgICBMSU5LXydsb3B0cycvU0hBUkU9bGlienNoci5leGUgbW9kdWxlcy5vcHQvb3B0LF9saW5rLm9wdC9vcHQKICQgZW5kaWYKKyQhCiskISBDcmVhdGUgc2hhcmVhYmxlIGltYWdlCiskIQorJCBnb3N1YiBjcmVhX29saXN0CiskIHdyaXRlIHN5cyRvdXRwdXQgIkNyZWF0aW5nIGxpYnpzaHIuZXhlIgorJCBjYWxsIG1hcF8yX3Nob3B0ICdtYXBmaWxlJyAnb3B0ZmlsZScKKyQgTElOS18nbG9wdHMnL1NIQVJFPWxpYnpzaHIuZXhlIG1vZHVsZXMub3B0L29wdCwnb3B0ZmlsZScvb3B0CiAkIHdyaXRlIHN5cyRvdXRwdXQgIlpsaWIgYnVpbGQgY29tcGxldGVkIgorJCBkZWxldGUvbm9sb2cgdG1wLm9wdDsqCiAkIGV4aXQKKyRBTUlTU19FUlI6CiskIHdyaXRlIHN5cyRvdXRwdXQgIk5vIHNvdXJjZSBmb3IgY29uZmlnLmhpbiBmb3VuZC4iCiskIHdyaXRlIHN5cyRvdXRwdXQgIlRyaWVkIGFueSBvZiAnJ2Fjb25mX2luX2ZpbGUnIgorJCBnb3RvIGVycl9leGl0CiAkQ0NfRVJSOgogJCB3cml0ZSBzeXMkb3V0cHV0ICJDIGNvbXBpbGVyIHJlcXVpcmVkIHRvIGJ1aWxkICcnbmFtZSciCiAkIGdvdG8gZXJyX2V4aXQKQEAgLTIxNiw3ICsyNDQsNiBAQAogJCBzZXQgbWVzc2FnZS9mYWNpbC9pZGVudC9zZXZlci90ZXh0CiAkIGNsb3NlL25vbG9nIG9wdGYKICQgY2xvc2Uvbm9sb2cgdG9wdAotJCBjbG9zZS9ub2xvZyBjb25mX2hpbgogJCBjbG9zZS9ub2xvZyBhY29uZl9pbgogJCBjbG9zZS9ub2xvZyBhY29uZgogJCBjbG9zZS9ub2xvZyBvdXQKQEAgLTM5Nyw3ICs0MjQsNyBAQAogJCBkZWNrCiAjIGRlc2NyaXAubW1zOiBNTVMgZGVzY3JpcHRpb24gZmlsZSBmb3IgYnVpbGRpbmcgemxpYiBvbiBWTVMKICMgd3JpdHRlbiBieSBNYXJ0aW4gUC5KLiBaaW5zZXIKLSMgPHppbnNlckB6aW5zZXIubm8taXAuaW5mbyBvciB6aW5zZXJAc3lzZGV2LmRldXRzY2hlLWJvZXJzZS5jb20+CisjIDx6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gb3IgbWFydGluLnppbnNlckBldXJleGNoYW5nZS5jb20+CiAKIE9CSlMgPSBhZGxlcjMyLm9iaiwgY29tcHJlc3Mub2JqLCBjcmMzMi5vYmosIGd6Y2xvc2Uub2JqLCBnemxpYi5vYmpcCiAgICAgICAgZ3pyZWFkLm9iaiwgZ3p3cml0ZS5vYmosIHVuY29tcHIub2JqLCBpbmZiYWNrLm9ialwKQEAgLTQwNywxMCArNDM0LDkgQEAKICQgZW9kCiAkIHdyaXRlIG91dCAiQ0ZMQUdTPSIsIGNjb3B0CiAkIHdyaXRlIG91dCAiTE9QVFM9IiwgbG9wdHMKKyQgd3JpdGUgb3V0ICJhbGwgOiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUgbGliei5vbGIiCiAkIGNvcHkgc3lzJGlucHV0OiBvdXQKICQgZGVjawotCi1hbGwgOiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUgbGliei5vbGIKICAgICAgICAgQCB3cml0ZSBzeXMkb3V0cHV0ICIgRXhhbXBsZSBhcHBsaWNhdGlvbnMgYXZhaWxhYmxlIgogCiBsaWJ6Lm9sYiA6IGxpYnoub2xiKCQoT0JKUykpCkBAIC00MjAsNyArNDQ2LDcgQEAKICAgICAgICAgICAgICAgbGluayAkKExPUFRTKSBleGFtcGxlLGxpYnoub2xiL2xpYgogCiBtaW5pZ3ppcC5leGUgOiBtaW5pZ3ppcC5vYmogbGliei5vbGIKLSAgICAgICAgICAgICAgbGluayAkKExPUFRTKSBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIseDExdm1zOnh2bXN1dGlscy5vbGIvbGliCisgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgbWluaWd6aXAsbGliei5vbGIvbGliCiAKIGNsZWFuIDoKIAlkZWxldGUgKi5vYmo7KixsaWJ6Lm9sYjsqLCoub3B0OyosKi5leGU7KgpAQCAtNDMxLDcgKzQ1Nyw3IEBACiBjb21wcmVzcy5vYmogOiBjb21wcmVzcy5jIHpsaWIuaCB6Y29uZi5oCiBjcmMzMi5vYmogICAgOiBjcmMzMi5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGRlZmxhdGUub2JqICA6IGRlZmxhdGUuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAotZXhhbXBsZS5vYmogIDogZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCitleGFtcGxlLm9iaiAgOiBbLnRlc3RdZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiBnemNsb3NlLm9iaiAgOiBnemNsb3NlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZ3psaWIub2JqICAgIDogZ3psaWIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBnenJlYWQub2JqICAgOiBnenJlYWQuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCkBAIC00MzksNyArNDY1LDcgQEAKIGluZmZhc3Qub2JqICA6IGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mZmFzdC5oCiBpbmZsYXRlLm9iaiAgOiBpbmZsYXRlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogaW5mdHJlZXMub2JqIDogaW5mdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKLW1pbmlnemlwLm9iaiA6IG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKK21pbmlnemlwLm9iaiA6IFsudGVzdF1taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCiB0cmVlcy5vYmogICAgOiB0cmVlcy5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiB1bmNvbXByLm9iaiAgOiB1bmNvbXByLmMgemxpYi5oIHpjb25mLmgKIHp1dGlsLm9iaiAgICA6IHp1dGlsLmMgenV0aWwuaCB6bGliLmggemNvbmYuaApAQCAtNDU1LDEzICs0ODEsMTggQEAKICRDUkVBX09MSVNUOgogJCBvcGVuL3JlYWQgbWluIG1ha2VmaWxlLmluCiAkIG9wZW4vd3JpdGUgbW9kIG1vZHVsZXMub3B0Ci0kIHNyY19jaGVjayA9ICJPQkpDID0iCiskIHNyY19jaGVja19saXN0ID0gIk9CSlogPSNPQkpHID0iCiAkTVJMT09QOgogJCByZWFkL2VuZD1tcmRvbmUgbWluIHJlYwotJCBpZiAoZiRleHRyYWN0KDAsNixyZWMpIC5uZXMuIHNyY19jaGVjaykgdGhlbiBnb3RvIG1ybG9vcAorJCBpID0gMAorJFNSQ19DSEVDS19MT09QOgorJCBzcmNfY2hlY2sgPSBmJGVsZW1lbnQoaSwgIiMiLCBzcmNfY2hlY2tfbGlzdCkKKyQgaSA9IGkrMQorJCBpZiBzcmNfY2hlY2sgLmVxcy4gIiMiIHRoZW4gZ290byBtcmxvb3AKKyQgaWYgKGYkZXh0cmFjdCgwLDYscmVjKSAubmVzLiBzcmNfY2hlY2spIHRoZW4gZ290byBzcmNfY2hlY2tfbG9vcAogJCByZWMgPSByZWMgLSBzcmNfY2hlY2sKICQgZ29zdWIgZXh0cmFfZmlsbmFtCi0kIGlmIChmJGVsZW1lbnQoMSwiXCIscmVjKSAuZXFzLiAiXCIpIHRoZW4gZ290byBtcmRvbmUKKyQgaWYgKGYkZWxlbWVudCgxLCJcIixyZWMpIC5lcXMuICJcIikgdGhlbiBnb3RvIG1ybG9vcAogJE1SU0xPT1A6CiAkIHJlYWQvZW5kPW1yZG9uZSBtaW4gcmVjCiAkIGdvc3ViIGV4dHJhX2ZpbG5hbQpAQCAtNjcyLDEyNCArNzAzLDYgQEAKICQgcmV0dXJuCiAkIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCEKLSQhIEFuYWx5emUgT2JqZWN0IGZpbGVzIGZvciBPcGVuVk1TIEFYUCB0byBleHRyYWN0IFByb2NlZHVyZSBhbmQgRGF0YQotJCEgaW5mb3JtYXRpb24gdG8gYnVpbGQgYSBzeW1ib2wgdmVjdG9yIGZvciBhIHNoYXJlYWJsZSBpbWFnZQotJCEgQWxsIHRoZSAiYnJhaW5zIiBvZiB0aGlzIGxvZ2ljIHdhcyBzdWdnZXN0ZWQgYnkgSGFydG11dCBCZWNrZXIKLSQhIChIYXJ0bXV0LkJlY2tlckBjb21wYXEuY29tKS4gQWxsIHRoZSBidWdzIHdlcmUgaW50cm9kdWNlZCBieSBtZQotJCEgKHppbnNlckB6aW5zZXIubm8taXAuaW5mbyksIHNvIGlmIHlvdSBkbyBoYXZlIHByb2JsZW0gcmVwb3J0cyBwbGVhc2UgZG8gbm90Ci0kISBib3RoZXIgSGFydG11dC9IUCwgYnV0IGdldCBpbiB0b3VjaCB3aXRoIG1lCi0kIQotJCEgVmVyc2lvbiBoaXN0b3J5Ci0kISAwLjAxIDIwMDQwNDA2IFNraXAgb3ZlciBzaGFyZWFibGUgaW1hZ2VzIGluIG9wdGlvbiBmaWxlCi0kISAwLjAyIDIwMDQxMTA5IEZpeCBvcHRpb24gZmlsZSBmb3Igc2hhcmVhYmxlIGltYWdlcyB3aXRoIGNhc2Vfc2Vuc2l0aXZlPVlFUwotJCEgMC4wMyAyMDA1MDEwNyBTa2lwIG92ZXIgSWRlbnRpZmljYXRpb24gbGFiZWxzIGluIG9wdGlvbiBmaWxlCi0kISAwLjA0IDIwMDYwMTE3IEFkZCB1cHBlcmNhc2UgYWxpYXMgdG8gY29kZSBjb21waWxlZCB3aXRoIC9uYW1lPWFzX2lzCi0kIQotJCBBTkFMX09CSl9BWFA6IFN1YnJvdXRpbmUKLSQgViA9ICdGJFZlcmlmeSgwKQotJCBTQVkgOj0gIldSSVRFXyBTWVMkT1VUUFVUIgotJAotJCBJRiBGJFNFQVJDSCgiJydQMSciKSAuRVFTLiAiIgotJCBUSEVOCi0kICAgIFNBWSAiQU5BTF9PQkpfQVhQLUUtTk9TVUNIRklMRTogIEVycm9yLCBpbnB1dGZpbGUgJydwMScgbm90IGF2YWlsYWJsZSIKLSQgICAgZ290byBleGl0X2FhCi0kIEVORElGCi0kIElGICInJ1AyJyIgLkVRUy4gIiIKLSQgVEhFTgotJCAgICBTQVkgIkFOQUxfT0JKX0FYUDogIEVycm9yLCBubyBvdXRwdXQgZmlsZSBwcm92aWRlZCIKLSQgICAgZ290byBleGl0X2FhCi0kIEVORElGCi0kCi0kIG9wZW4vcmVhZCBpbiAncDEKLSQgY3JlYXRlIGEudG1wCi0kIG9wZW4vYXBwZW5kIGF0bXAgYS50bXAKLSQgbG9vcDoKLSQgcmVhZC9lbmQ9ZW5kX2xvb3AgaW4gbGluZQotJCBpZiBmJGxvY2F0ZSgiL1NIQVJFIixmJGVkaXQobGluZSwidXBjYXNlIikpIC5sdC4gZiRsZW5ndGgobGluZSkKLSQgdGhlbgotJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkFOQUxfU0tQX1NIUi1pLXNraXBzaGFyZSwgJydsaW5lJyIKLSQgICBnb3RvIGxvb3AKLSQgZW5kaWYKLSQgaWYgZiRsb2NhdGUoIklERU5USUZJQ0FUSU9OPSIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCi0kIHRoZW4KLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX09CSl9BWFAtaS1pZGVudDogSWRlbnRpZmljYXRpb24gIiwgLQotICAgICAgICAgICAgICAgICAgICAgZiRlbGVtZW50KDEsIj0iLGxpbmUpCi0kICAgZ290byBsb29wCi0kIGVuZGlmCi0kIGY9IGYkc2VhcmNoKGxpbmUpCi0kIGlmIGYgLmVxcy4gIiIKLSQgdGhlbgotJAl3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX09CSl9BWFAtdy1ub3N1Y2hmaWxlLCAnJ2xpbmUnIgotJAlnb3RvIGxvb3AKLSQgZW5kaWYKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZGVmaW5lL3VzZXIgc3lzJGVycm9yIG5sOgotJCBhbmFsL29iai9nc2QgJ2YgL291dD14LnRtcAotJCBvcGVuL3JlYWQgeHRtcCB4LnRtcAotJCBYTE9PUDoKLSQgcmVhZC9lbmQ9ZW5kX3hsb29wIHh0bXAgeGxpbmUKLSQgeGxpbmUgPSBmJGVkaXQoeGxpbmUsImNvbXByZXNzIikKLSQgd3JpdGUgYXRtcCB4bGluZQotJCBnb3RvIHhsb29wCi0kIEVORF9YTE9PUDoKLSQgY2xvc2UgeHRtcAotJCBnb3RvIGxvb3AKLSQgZW5kX2xvb3A6Ci0kIGNsb3NlIGluCi0kIGNsb3NlIGF0bXAKLSQgaWYgZiRzZWFyY2goImEudG1wIikgLmVxcy4gIiIgLQotCXRoZW4gJCBleGl0Ci0kICEgYWxsIGdsb2JhbCBkZWZpbml0aW9ucwotJCBzZWFyY2ggYS50bXAgInN5bWJvbDoiLCJFR1NZJFZfREVGIDEiLCJFR1NZJFZfTk9STSAxIi9vdXQ9Yi50bXAKLSQgISBhbGwgcHJvY2VkdXJlcwotJCBzZWFyY2ggYi50bXAgIkVHU1kkVl9OT1JNIDEiL3dpbmQ9KDAsMSkgL291dD1jLnRtcAotJCBzZWFyY2ggYy50bXAgInN5bWJvbDoiL291dD1kLnRtcAotJCBkZWZpbmUvdXNlciBzeXMkb3V0cHV0IG5sOgotJCBlZGl0by9lZHQvY29tbWFuZD1zeXMkaW5wdXQgZC50bXAKLXN1Yi9zeW1ib2w6ICIvc3ltYm9sX3ZlY3Rvcj0oL3dob2xlCi1zdWIvIi89UFJPQ0VEVVJFKS93aG9sZQotZXhpdAotJCAhIGFsbCBkYXRhCi0kIHNlYXJjaCBiLnRtcCAiRUdTWSRWX0RFRiAxIi93aW5kPSgwLDEpIC9vdXQ9ZS50bXAKLSQgc2VhcmNoIGUudG1wICJzeW1ib2w6Ii9vdXQ9Zi50bXAKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZWRpdG8vZWR0L2NvbW1hbmQ9c3lzJGlucHV0IGYudG1wCi1zdWIvc3ltYm9sOiAiL3N5bWJvbF92ZWN0b3I9KC93aG9sZQotc3ViLyIvPURBVEEpL3dob2xlCi1leGl0Ci0kIHNvcnQvbm9kdXBsIGQudG1wLGYudG1wIGcudG1wCi0kIG9wZW4vcmVhZCByYXdfdmVjdG9yIGcudG1wCi0kIG9wZW4vd3JpdGUgY2FzZV92ZWN0b3IgJ3AyJwotJCBSQVdMT09QOgotJCByZWFkL2VuZD1lbmRfcmF3bG9vcCByYXdfdmVjdG9yIHJhd19lbGVtZW50Ci0kIHdyaXRlIGNhc2VfdmVjdG9yIHJhd19lbGVtZW50Ci0kIGlmIGYkbG9jYXRlKCI9UFJPQ0VEVVJFKSIscmF3X2VsZW1lbnQpIC5sdC4gZiRsZW5ndGgocmF3X2VsZW1lbnQpCi0kIHRoZW4KLSQgICAgIG5hbWUgPSBmJGVsZW1lbnQoMSwiPSIscmF3X2VsZW1lbnQpIC0gIigiCi0kICAgICBpZiBmJGVkaXQobmFtZSwiVVBDQVNFIikgLm5lcy4gbmFtZSB0aGVuIC0KLSAgICAgICAgICB3cml0ZSBjYXNlX3ZlY3RvciBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9UFJPQ0VEVVJFKSIsIC0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGYkZWRpdChuYW1lLCJVUENBU0UiKSwgbmFtZSkKLSQgZW5kaWYKLSQgaWYgZiRsb2NhdGUoIj1EQVRBKSIscmF3X2VsZW1lbnQpIC5sdC4gZiRsZW5ndGgocmF3X2VsZW1lbnQpCi0kIHRoZW4KLSQgICAgIG5hbWUgPSBmJGVsZW1lbnQoMSwiPSIscmF3X2VsZW1lbnQpIC0gIigiCi0kICAgICBpZiBmJGVkaXQobmFtZSwiVVBDQVNFIikgLm5lcy4gbmFtZSB0aGVuIC0KLSAgICAgICAgICB3cml0ZSBjYXNlX3ZlY3RvciBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9REFUQSkiLCAtCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBmJGVkaXQobmFtZSwiVVBDQVNFIiksIG5hbWUpCi0kIGVuZGlmCi0kIGdvdG8gcmF3bG9vcAotJCBFTkRfUkFXTE9PUDoKLSQgY2xvc2UgcmF3X3ZlY3RvcgotJCBjbG9zZSBjYXNlX3ZlY3RvcgotJCBkZWxldGUgYS50bXA7KixiLnRtcDsqLGMudG1wOyosZC50bXA7KixlLnRtcDsqLGYudG1wOyosZy50bXA7KgotJCBpZiBmJHNlYXJjaCgieC50bXAiKSAubmVzLiAiIiAtCi0JdGhlbiAkIGRlbGV0ZSB4LnRtcDsqCi0kIQotJCBFWElUX0FBOgotJCBpZiBWIHRoZW4gc2V0IHZlcmlmeQotJCBlbmRzdWJyb3V0aW5lCi0kIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCEKICQhIFdyaXRlIGNvbmZpZ3VyYXRpb24gdG8gYm90aCBwZXJtYW5lbnQgYW5kIHRlbXBvcmFyeSBjb25maWcgZmlsZQogJCEKICQhIFZlcnNpb24gaGlzdG9yeQpAQCAtODAyLDMgKzcxNSwxNTMgQEAKICQgIGNsb3NlIGNvbmZoCiAkRU5EU1VCUk9VVElORQogJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBBbmFseXplIHRoZSBwcm9qZWN0IG1hcCBmaWxlIGFuZCBjcmVhdGUgdGhlIHN5bWJvbCB2ZWN0b3IgZm9yIGEgc2hhcmVhYmxlCiskISBpbWFnZSBmcm9tIGl0CiskIQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMTIwMTI4IEZpcnN0IHZlcnNpb24KKyQhIDAuMDIgMjAxMjAyMjYgQWRkIHByZS1sb2FkIGxvZ2ljCiskIQorJCBNQVBfMl9TSE9QVDogU3Vicm91dGluZQorJCEKKyQgU0FZIDo9ICJXUklURV8gU1lTJE9VVFBVVCIKKyQhCiskIElGIEYkU0VBUkNIKCInJ1AxJyIpIC5FUVMuICIiCiskIFRIRU4KKyQgICAgU0FZICJNQVBfMl9TSE9QVC1FLU5PU1VDSEZJTEU6ICBFcnJvciwgaW5wdXRmaWxlICcncDEnIG5vdCBhdmFpbGFibGUiCiskICAgIGdvdG8gZXhpdF9tMnMKKyQgRU5ESUYKKyQgSUYgIicnUDInIiAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiTUFQXzJfU0hPUFQ6ICBFcnJvciwgbm8gb3V0cHV0IGZpbGUgcHJvdmlkZWQiCiskICAgIGdvdG8gZXhpdF9tMnMKKyQgRU5ESUYKKyQhCiskIG1vZHVsZTEgPSAiZGVmbGF0ZSNkZWZsYXRlRW5kI2RlZmxhdGVJbml0XyNkZWZsYXRlUGFyYW1zI2RlZmxhdGVTZXREaWN0aW9uYXJ5IgorJCBtb2R1bGUyID0gImd6Y2xvc2UjZ3plcnJvciNnemdldGMjZ3pnZXRzI2d6b3BlbiNnenByaW50ZiNnenB1dGMjZ3pwdXRzI2d6cmVhZCIKKyQgbW9kdWxlMyA9ICJnenNlZWsjZ3p0ZWxsI2luZmxhdGUjaW5mbGF0ZUVuZCNpbmZsYXRlSW5pdF8jaW5mbGF0ZVNldERpY3Rpb25hcnkiCiskIG1vZHVsZTQgPSAiaW5mbGF0ZVN5bmMjdW5jb21wcmVzcyN6bGliVmVyc2lvbiNjb21wcmVzcyIKKyQgb3Blbi9yZWFkIG1hcCAncDEKKyQgaWYgYXhwIC5vci4gaWE2NAorJCB0aGVuCiskICAgICBvcGVuL3dyaXRlIGFvcHQgYS5vcHQKKyQgICAgIG9wZW4vd3JpdGUgYm9wdCBiLm9wdAorJCAgICAgd3JpdGUgYW9wdCAiIENBU0VfU0VOU0lUSVZFPVlFUyIKKyQgICAgIHdyaXRlIGJvcHQgIlNZTUJPTF9WRUNUT1I9ICgtIgorJCAgICAgbW9kX3N5bV9udW0gPSAxCiskIE1PRF9TWU1fTE9PUDoKKyQgICAgIGlmIGYkdHlwZShtb2R1bGUnbW9kX3N5bV9udW0nKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICAgIG1vZF9pbiA9IDAKKyQgTU9EX1NZTV9JTjoKKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWxlbWVudChtb2RfaW4sICIjIiwgbW9kdWxlJ21vZF9zeW1fbnVtJykKKyQgICAgICAgICBpZiBzaGFyZWRfcHJvYyAubmVzLiAiIyIKKyQgICAgICAgICB0aGVuCiskICAgICAgICAgICAgIHdyaXRlIGFvcHQgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLC0KKyAgICAgICAgCQkgICAgICAgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSxzaGFyZWRfcHJvYykKKyQgICAgICAgICAgICAgd3JpdGUgYm9wdCBmJGZhbygiIUFTPVBST0NFRFVSRSwtIixzaGFyZWRfcHJvYykKKyQgICAgICAgICAgICAgbW9kX2luID0gbW9kX2luICsgMQorJCAgICAgICAgICAgICBnb3RvIG1vZF9zeW1faW4KKyQgICAgICAgICBlbmRpZgorJCAgICAgICAgIG1vZF9zeW1fbnVtID0gbW9kX3N5bV9udW0gKyAxCiskICAgICAgICAgZ290byBtb2Rfc3ltX2xvb3AKKyQgICAgIGVuZGlmCiskTUFQX0xPT1A6CiskICAgICByZWFkL2VuZD1tYXBfZW5kIG1hcCBsaW5lCiskICAgICBpZiAoZiRsb2NhdGUoInsiLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSkgLm9yLiAtCisgICAgICAgICAoZiRsb2NhdGUoImdsb2JhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpKQorJCAgICAgdGhlbgorJCAgICAgICAgIHByb2MgPSB0cnVlCiskICAgICAgICAgZ290byBtYXBfbG9vcAorJCAgICAgZW5kaWYKKyQgICAgIGlmIGYkbG9jYXRlKCJ9IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIGlmIGYkbG9jYXRlKCJsb2NhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICBpZiBwcm9jCiskICAgICB0aGVuCiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVkaXQobGluZSwiY29sbGFwc2UiKQorJCAgICAgICAgIGNob3Bfc2VtaSA9IGYkbG9jYXRlKCI7Iiwgc2hhcmVkX3Byb2MpCiskICAgICAgICAgaWYgY2hvcF9zZW1pIC5sdC4gZiRsZW5ndGgoc2hhcmVkX3Byb2MpIHRoZW4gLQorICAgICAgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZXh0cmFjdCgwLCBjaG9wX3NlbWksIHNoYXJlZF9wcm9jKQorJCAgICAgICAgIHdyaXRlIGFvcHQgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLC0KKyAgICAgICAgCQkJIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIiksc2hhcmVkX3Byb2MpCiskICAgICAgICAgd3JpdGUgYm9wdCBmJGZhbygiIUFTPVBST0NFRFVSRSwtIixzaGFyZWRfcHJvYykKKyQgICAgIGVuZGlmCiskICAgICBnb3RvIG1hcF9sb29wCiskTUFQX0VORDoKKyQgICAgIGNsb3NlL25vbG9nIGFvcHQKKyQgICAgIGNsb3NlL25vbG9nIGJvcHQKKyQgICAgIG9wZW4vYXBwZW5kIGxpYm9wdCAncDInCiskICAgICBvcGVuL3JlYWQgYW9wdCBhLm9wdAorJCAgICAgb3Blbi9yZWFkIGJvcHQgYi5vcHQKKyRBTE9PUDoKKyQgICAgIHJlYWQvZW5kPWFsb29wX2VuZCBhb3B0IGxpbmUKKyQgICAgIHdyaXRlIGxpYm9wdCBsaW5lCiskICAgICBnb3RvIGFsb29wCiskQUxPT1BfRU5EOgorJCAgICAgY2xvc2Uvbm9sb2cgYW9wdAorJCAgICAgc3YgPSAiIgorJEJMT09QOgorJCAgICAgcmVhZC9lbmQ9Ymxvb3BfZW5kIGJvcHQgc3ZuCiskICAgICBpZiAoc3ZuLm5lcy4iIikKKyQgICAgIHRoZW4KKyQgICAgICAgIGlmIChzdi5uZXMuIiIpIHRoZW4gd3JpdGUgbGlib3B0IHN2CiskICAgICAgICBzdiA9IHN2bgorJCAgICAgZW5kaWYKKyQgICAgIGdvdG8gYmxvb3AKKyRCTE9PUF9FTkQ6CiskICAgICB3cml0ZSBsaWJvcHQgZiRleHRyYWN0KDAsZiRsZW5ndGgoc3YpLTIsc3YpLCAiLSIKKyQgICAgIHdyaXRlIGxpYm9wdCAiKSIKKyQgICAgIGNsb3NlL25vbG9nIGJvcHQKKyQgICAgIGRlbGV0ZS9ub2xvZy9ub2NvbmYgYS5vcHQ7KixiLm9wdDsqCiskIGVsc2UKKyQgICAgIGlmIHZheAorJCAgICAgdGhlbgorJCAgICAgb3Blbi9hcHBlbmQgbGlib3B0ICdwMicKKyQgICAgIG1vZF9zeW1fbnVtID0gMQorJCBWTU9EX1NZTV9MT09QOgorJCAgICAgaWYgZiR0eXBlKG1vZHVsZSdtb2Rfc3ltX251bScpIC5uZXMuICIiCiskICAgICB0aGVuCiskICAgICAgICAgbW9kX2luID0gMAorJCBWTU9EX1NZTV9JTjoKKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWxlbWVudChtb2RfaW4sICIjIiwgbW9kdWxlJ21vZF9zeW1fbnVtJykKKyQgICAgICAgICBpZiBzaGFyZWRfcHJvYyAubmVzLiAiIyIKKyQgICAgICAgICB0aGVuCiskICAgICAJICAgICAgd3JpdGUgbGlib3B0IGYkZmFvKCJVTklWRVJTQUw9IUFTIiwtCisgICAgICAJICAJCQkgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIikpCiskICAgICAgICAgICAgIG1vZF9pbiA9IG1vZF9pbiArIDEKKyQgICAgICAgICAgICAgZ290byB2bW9kX3N5bV9pbgorJCAgICAgICAgIGVuZGlmCiskICAgICAgICAgbW9kX3N5bV9udW0gPSBtb2Rfc3ltX251bSArIDEKKyQgICAgICAgICBnb3RvIHZtb2Rfc3ltX2xvb3AKKyQgICAgIGVuZGlmCiskVk1BUF9MT09QOgorJCAgICAgCSAgcmVhZC9lbmQ9dm1hcF9lbmQgbWFwIGxpbmUKKyQgICAgIAkgIGlmIChmJGxvY2F0ZSgieyIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpKSAub3IuIC0KKyAgIAkgICAgICAoZiRsb2NhdGUoImdsb2JhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpKQorJCAgICAgCSAgdGhlbgorJCAgICAgCSAgICAgIHByb2MgPSB0cnVlCiskICAgICAJICAgICAgZ290byB2bWFwX2xvb3AKKyQgICAgIAkgIGVuZGlmCiskICAgICAJICBpZiBmJGxvY2F0ZSgifSIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICAJICBpZiBmJGxvY2F0ZSgibG9jYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgCSAgaWYgcHJvYworJCAgICAgCSAgdGhlbgorJCAgICAgCSAgICAgIHNoYXJlZF9wcm9jID0gZiRlZGl0KGxpbmUsImNvbGxhcHNlIikKKyQgICAgIAkgICAgICBjaG9wX3NlbWkgPSBmJGxvY2F0ZSgiOyIsIHNoYXJlZF9wcm9jKQorJCAgICAgCSAgICAgIGlmIGNob3Bfc2VtaSAubHQuIGYkbGVuZ3RoKHNoYXJlZF9wcm9jKSB0aGVuIC0KKyAgICAgIAkgIAkgIHNoYXJlZF9wcm9jID0gZiRleHRyYWN0KDAsIGNob3Bfc2VtaSwgc2hhcmVkX3Byb2MpCiskICAgICAJICAgICAgd3JpdGUgbGlib3B0IGYkZmFvKCJVTklWRVJTQUw9IUFTIiwtCisgICAgICAJICAJCQkgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIikpCiskICAgICAJICBlbmRpZgorJCAgICAgCSAgZ290byB2bWFwX2xvb3AKKyRWTUFQX0VORDoKKyQgICAgIGVsc2UKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJVbmtub3duIEFyY2hpdGVjdHVyZSAoTm90IFZBWCwgQVhQLCBvciBJQTY0KSIKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJObyBvcHRpb25zIGZpbGUgY3JlYXRlZCIKKyQgICAgIGVuZGlmCiskIGVuZGlmCiskIEVYSVRfTTJTOgorJCBjbG9zZS9ub2xvZyBtYXAKKyQgY2xvc2Uvbm9sb2cgbGlib3B0CiskIGVuZHN1YnJvdXRpbmUKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jIGIvTW9kdWxlcy96bGliL21pbmlnemlwLmMKaW5kZXggOTgyNWNjYy4uYjMwMjVhNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21pbmlnemlwLmMKKysrIGIvTW9kdWxlcy96bGliL21pbmlnemlwLmMKQEAgLTEsNSArMSw1IEBACiAvKiBtaW5pZ3ppcC5jIC0tIHNpbXVsYXRlIGd6aXAgdXNpbmcgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDAsNiArNDAsMTAgQEAKICMgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmlsZSkKICNlbmRpZgogCisjaWZkZWYgX01TQ19WRVIKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCiAjaWZkZWYgVk1TCiAjICBkZWZpbmUgdW5saW5rIGRlbGV0ZQogIyAgZGVmaW5lIEdaX1NVRkZJWCAiLWd6IgpAQCAtMTM4LDYgKzE0MiwxOTcgQEAKICMgIGRlZmluZSBsb2NhbAogI2VuZGlmCiAKKyNpZmRlZiBaX1NPTE8KKy8qIGZvciBaX1NPTE8sIGNyZWF0ZSBzaW1wbGlmaWVkIGd6KiBmdW5jdGlvbnMgdXNpbmcgZGVmbGF0ZSBhbmQgaW5mbGF0ZSAqLworCisjaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoWl9MQVJHRSkKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgdW5saW5rKCkgKi8KKyNlbmRpZgorCit2b2lkICpteWFsbG9jIE9GKCh2b2lkICosIHVuc2lnbmVkLCB1bnNpZ25lZCkpOwordm9pZCBteWZyZWUgT0YoKHZvaWQgKiwgdm9pZCAqKSk7CisKK3ZvaWQgKm15YWxsb2MocSwgbiwgbSkKKyAgICB2b2lkICpxOworICAgIHVuc2lnbmVkIG4sIG07Cit7CisgICAgcSA9IFpfTlVMTDsKKyAgICByZXR1cm4gY2FsbG9jKG4sIG0pOworfQorCit2b2lkIG15ZnJlZShxLCBwKQorICAgIHZvaWQgKnEsICpwOworeworICAgIHEgPSBaX05VTEw7CisgICAgZnJlZShwKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIEZJTEUgKmZpbGU7CisgICAgaW50IHdyaXRlOworICAgIGludCBlcnI7CisgICAgY2hhciAqbXNnOworICAgIHpfc3RyZWFtIHN0cm07Cit9ICpnekZpbGU7CisKK2d6RmlsZSBnem9wZW4gT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitnekZpbGUgZ3pkb3BlbiBPRigoaW50LCBjb25zdCBjaGFyICopKTsKK2d6RmlsZSBnel9vcGVuIE9GKChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSk7CisKK2d6RmlsZSBnem9wZW4ocGF0aCwgbW9kZSkKK2NvbnN0IGNoYXIgKnBhdGg7Citjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKHBhdGgsIC0xLCBtb2RlKTsKK30KKworZ3pGaWxlIGd6ZG9wZW4oZmQsIG1vZGUpCitpbnQgZmQ7Citjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKE5VTEwsIGZkLCBtb2RlKTsKK30KKworZ3pGaWxlIGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpCisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBpbnQgZmQ7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICBnekZpbGUgZ3o7CisgICAgaW50IHJldDsKKworICAgIGd6ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3pGaWxlX3MpKTsKKyAgICBpZiAoZ3ogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZ3otPndyaXRlID0gc3RyY2hyKG1vZGUsICd3JykgIT0gTlVMTDsKKyAgICBnei0+c3RybS56YWxsb2MgPSBteWFsbG9jOworICAgIGd6LT5zdHJtLnpmcmVlID0gbXlmcmVlOworICAgIGd6LT5zdHJtLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICBpZiAoZ3otPndyaXRlKQorICAgICAgICByZXQgPSBkZWZsYXRlSW5pdDIoJihnei0+c3RybSksIC0xLCA4LCAxNSArIDE2LCA4LCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZ3otPnN0cm0ubmV4dF9pbiA9IDA7CisgICAgICAgIGd6LT5zdHJtLmF2YWlsX2luID0gWl9OVUxMOworICAgICAgICByZXQgPSBpbmZsYXRlSW5pdDIoJihnei0+c3RybSksIDE1ICsgMTYpOworICAgIH0KKyAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgZnJlZShneik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnei0+ZmlsZSA9IHBhdGggPT0gTlVMTCA/IGZkb3BlbihmZCwgZ3otPndyaXRlID8gIndiIiA6ICJyYiIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcGVuKHBhdGgsIGd6LT53cml0ZSA/ICJ3YiIgOiAicmIiKTsKKyAgICBpZiAoZ3otPmZpbGUgPT0gTlVMTCkgeworICAgICAgICBnei0+d3JpdGUgPyBkZWZsYXRlRW5kKCYoZ3otPnN0cm0pKSA6IGluZmxhdGVFbmQoJihnei0+c3RybSkpOworICAgICAgICBmcmVlKGd6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGd6LT5lcnIgPSAwOworICAgIGd6LT5tc2cgPSAiIjsKKyAgICByZXR1cm4gZ3o7Cit9CisKK2ludCBnendyaXRlIE9GKChnekZpbGUsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpKTsKKworaW50IGd6d3JpdGUoZ3osIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBnejsKKyAgICBjb25zdCB2b2lkICpidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIHpfc3RyZWFtICpzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgb3V0W0JVRkxFTl07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCB8fCAhZ3otPndyaXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgc3RybS0+bmV4dF9pbiA9ICh2b2lkICopYnVmOworICAgIHN0cm0tPmF2YWlsX2luID0gbGVuOworICAgIGRvIHsKKyAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IEJVRkxFTjsKKyAgICAgICAgKHZvaWQpZGVmbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgZndyaXRlKG91dCwgMSwgQlVGTEVOIC0gc3RybS0+YXZhaWxfb3V0LCBnei0+ZmlsZSk7CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ID09IDApOworICAgIHJldHVybiBsZW47Cit9CisKK2ludCBnenJlYWQgT0YoKGd6RmlsZSwgdm9pZCAqLCB1bnNpZ25lZCkpOworCitpbnQgZ3pyZWFkKGd6LCBidWYsIGxlbikKKyAgICBnekZpbGUgZ3o7CisgICAgdm9pZCAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGdvdDsKKyAgICB1bnNpZ25lZCBjaGFyIGluWzFdOworICAgIHpfc3RyZWFtICpzdHJtOworCisgICAgaWYgKGd6ID09IE5VTEwgfHwgZ3otPndyaXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoZ3otPmVycikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIHN0cm0tPm5leHRfb3V0ID0gKHZvaWQgKilidWY7CisgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOworICAgIGRvIHsKKyAgICAgICAgZ290ID0gZnJlYWQoaW4sIDEsIDEsIGd6LT5maWxlKTsKKyAgICAgICAgaWYgKGdvdCA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBpbjsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAxOworICAgICAgICByZXQgPSBpbmZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOworICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeworICAgICAgICAgICAgZ3otPmVyciA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIGd6LT5tc2cgPSBzdHJtLT5tc2c7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKyAgICAgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQpOworICAgIHJldHVybiBsZW4gLSBzdHJtLT5hdmFpbF9vdXQ7Cit9CisKK2ludCBnemNsb3NlIE9GKChnekZpbGUpKTsKKworaW50IGd6Y2xvc2UoZ3opCisgICAgZ3pGaWxlIGd6OworeworICAgIHpfc3RyZWFtICpzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgb3V0W0JVRkxFTl07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBpZiAoZ3otPndyaXRlKSB7CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBaX05VTEw7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBCVUZMRU47CisgICAgICAgICAgICAodm9pZClkZWZsYXRlKHN0cm0sIFpfRklOSVNIKTsKKyAgICAgICAgICAgIGZ3cml0ZShvdXQsIDEsIEJVRkxFTiAtIHN0cm0tPmF2YWlsX291dCwgZ3otPmZpbGUpOworICAgICAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgPT0gMCk7CisgICAgICAgIGRlZmxhdGVFbmQoc3RybSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgaW5mbGF0ZUVuZChzdHJtKTsKKyAgICBmY2xvc2UoZ3otPmZpbGUpOworICAgIGZyZWUoZ3opOworICAgIHJldHVybiBaX09LOworfQorCitjb25zdCBjaGFyICpnemVycm9yIE9GKChnekZpbGUsIGludCAqKSk7CisKK2NvbnN0IGNoYXIgKmd6ZXJyb3IoZ3osIGVycikKKyAgICBnekZpbGUgZ3o7CisgICAgaW50ICplcnI7Cit7CisgICAgKmVyciA9IGd6LT5lcnI7CisgICAgcmV0dXJuIGd6LT5tc2c7Cit9CisKKyNlbmRpZgorCiBjaGFyICpwcm9nOwogCiB2b2lkIGVycm9yICAgICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKm1zZykpOwpAQCAtMjcyLDggKzQ2NywxMiBAQAogICAgICAgICBleGl0KDEpOwogICAgIH0KIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYob3V0ZmlsZSwgc2l6ZW9mKG91dGZpbGUpLCAiJXMlcyIsIGZpbGUsIEdaX1NVRkZJWCk7CisjZWxzZQogICAgIHN0cmNweShvdXRmaWxlLCBmaWxlKTsKICAgICBzdHJjYXQob3V0ZmlsZSwgR1pfU1VGRklYKTsKKyNlbmRpZgogCiAgICAgaW4gPSBmb3BlbihmaWxlLCAicmIiKTsKICAgICBpZiAoaW4gPT0gTlVMTCkgewpAQCAtMzA4LDcgKzUwNywxMSBAQAogICAgICAgICBleGl0KDEpOwogICAgIH0KIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgZmlsZSk7CisjZWxzZQogICAgIHN0cmNweShidWYsIGZpbGUpOworI2VuZGlmCiAKICAgICBpZiAobGVuID4gU1VGRklYX0xFTiAmJiBzdHJjbXAoZmlsZStsZW4tU1VGRklYX0xFTiwgR1pfU1VGRklYKSA9PSAwKSB7CiAgICAgICAgIGluZmlsZSA9IGZpbGU7CkBAIC0zMTcsNyArNTIwLDExIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0ZmlsZSA9IGZpbGU7CiAgICAgICAgIGluZmlsZSA9IGJ1ZjsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgICAgICBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJXMiLCBHWl9TVUZGSVgpOworI2Vsc2UKICAgICAgICAgc3RyY2F0KGluZmlsZSwgR1pfU1VGRklYKTsKKyNlbmRpZgogICAgIH0KICAgICBpbiA9IGd6b3BlbihpbmZpbGUsICJyYiIpOwogICAgIGlmIChpbiA9PSBOVUxMKSB7CkBAIC0zNTUsNyArNTYyLDExIEBACiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgY2hhciAqYm5hbWUsIG91dG1vZGVbMjBdOwogCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihvdXRtb2RlLCBzaXplb2Yob3V0bW9kZSksICIlcyIsICJ3YjYgIik7CisjZWxzZQogICAgIHN0cmNweShvdXRtb2RlLCAid2I2ICIpOworI2VuZGlmCiAKICAgICBwcm9nID0gYXJndlswXTsKICAgICBibmFtZSA9IHN0cnJjaHIoYXJndlswXSwgJy8nKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi90cmVlcy5jIGIvTW9kdWxlcy96bGliL3RyZWVzLmMKaW5kZXggNTZlOWJiMS4uMWZkNzc1OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3RyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL3RyZWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiB0cmVlcy5jIC0tIG91dHB1dCBkZWZsYXRlZCBkYXRhIHVzaW5nIEh1ZmZtYW4gY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBKZWFuLWxvdXAgR2FpbGx5CiAgKiBkZXRlY3RfZGF0YV90eXBlKCkgZnVuY3Rpb24gcHJvdmlkZWQgZnJlZWx5IGJ5IENvc21pbiBUcnV0YSwgMjAwNgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCkBAIC03NCwxMSArNzQsNiBAQAogICogcHJvYmFiaWxpdHksIHRvIGF2b2lkIHRyYW5zbWl0dGluZyB0aGUgbGVuZ3RocyBmb3IgdW51c2VkIGJpdCBsZW5ndGggY29kZXMuCiAgKi8KIAotI2RlZmluZSBCdWZfc2l6ZSAoOCAqIDIqc2l6ZW9mKGNoYXIpKQotLyogTnVtYmVyIG9mIGJpdHMgdXNlZCB3aXRoaW4gYmlfYnVmLiAoYmlfYnVmIG1pZ2h0IGJlIGltcGxlbWVudGVkIG9uCi0gKiBtb3JlIHRoYW4gMTYgYml0cyBvbiBzb21lIHN5c3RlbXMuKQotICovCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogTG9jYWwgZGF0YS4gVGhlc2UgYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS4KICAqLwpAQCAtMTUxLDggKzE0Niw4IEBACiBsb2NhbCBpbnQgIGJ1aWxkX2JsX3RyZWUgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2NhbCB2b2lkIHNlbmRfYWxsX3RyZWVzIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgbGNvZGVzLCBpbnQgZGNvZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsY29kZXMpKTsKLWxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGN0X2RhdGEgKmx0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RfZGF0YSAqZHRyZWUpKTsKK2xvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNvbnN0IGN0X2RhdGEgKmx0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3RfZGF0YSAqZHRyZWUpKTsKIGxvY2FsIGludCAgZGV0ZWN0X2RhdGFfdHlwZSBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdW5zaWduZWQgYmlfcmV2ZXJzZSBPRigodW5zaWduZWQgdmFsdWUsIGludCBsZW5ndGgpKTsKIGxvY2FsIHZvaWQgYmlfd2luZHVwICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKQEAgLTM5OSw3ICszOTQsNiBAQAogCiAgICAgcy0+YmlfYnVmID0gMDsKICAgICBzLT5iaV92YWxpZCA9IDA7Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gODsgLyogZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZSAqLwogI2lmZGVmIERFQlVHCiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gPSAwTDsKICAgICBzLT5iaXRzX3NlbnQgPSAwTDsKQEAgLTg4MywxNSArODc3LDE3IEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogRmx1c2ggdGhlIGJpdHMgaW4gdGhlIGJpdCBidWZmZXIgdG8gcGVuZGluZyBvdXRwdXQgKGxlYXZlcyBhdCBtb3N0IDcgYml0cykKKyAqLwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9iaXRzKHMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKK3sKKyAgICBiaV9mbHVzaChzKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBTZW5kIG9uZSBlbXB0eSBzdGF0aWMgYmxvY2sgdG8gZ2l2ZSBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlLgogICogVGhpcyB0YWtlcyAxMCBiaXRzLCBvZiB3aGljaCA3IG1heSByZW1haW4gaW4gdGhlIGJpdCBidWZmZXIuCi0gKiBUaGUgY3VycmVudCBpbmZsYXRlIGNvZGUgcmVxdWlyZXMgOSBiaXRzIG9mIGxvb2thaGVhZC4gSWYgdGhlCi0gKiBsYXN0IHR3byBjb2RlcyBmb3IgdGhlIHByZXZpb3VzIGJsb2NrIChyZWFsIGNvZGUgcGx1cyBFT0IpIHdlcmUgY29kZWQKLSAqIG9uIDUgYml0cyBvciBsZXNzLCBpbmZsYXRlIG1heSBoYXZlIG9ubHkgNSszIGJpdHMgb2YgbG9va2FoZWFkIHRvIGRlY29kZQotICogdGhlIGxhc3QgcmVhbCBjb2RlLiBJbiB0aGlzIGNhc2Ugd2Ugc2VuZCB0d28gZW1wdHkgc3RhdGljIGJsb2NrcyBpbnN0ZWFkCi0gKiBvZiBvbmUuIChUaGVyZSBhcmUgbm8gcHJvYmxlbXMgaWYgdGhlIHByZXZpb3VzIGJsb2NrIGlzIHN0b3JlZCBvciBmaXhlZC4pCi0gKiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UgYXNzdW1lIHRoZSB3b3JzdCBjYXNlIG9mIGxhc3QgcmVhbCBjb2RlIGVuY29kZWQKLSAqIG9uIG9uZSBiaXQgb25seS4KICAqLwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9hbGlnbihzKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CkBAIC05MDIsMjAgKzg5OCw2IEBACiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMTBMOyAvKiAzIGZvciBibG9jayB0eXBlLCA3IGZvciBFT0IgKi8KICNlbmRpZgogICAgIGJpX2ZsdXNoKHMpOwotICAgIC8qIE9mIHRoZSAxMCBiaXRzIGZvciB0aGUgZW1wdHkgYmxvY2ssIHdlIGhhdmUgYWxyZWFkeSBzZW50Ci0gICAgICogKDEwIC0gYmlfdmFsaWQpIGJpdHMuIFRoZSBsb29rYWhlYWQgZm9yIHRoZSBsYXN0IHJlYWwgY29kZSAoYmVmb3JlCi0gICAgICogdGhlIEVPQiBvZiB0aGUgcHJldmlvdXMgYmxvY2spIHdhcyB0aHVzIGF0IGxlYXN0IG9uZSBwbHVzIHRoZSBsZW5ndGgKLSAgICAgKiBvZiB0aGUgRU9CIHBsdXMgd2hhdCB3ZSBoYXZlIGp1c3Qgc2VudCBvZiB0aGUgZW1wdHkgc3RhdGljIGJsb2NrLgotICAgICAqLwotICAgIGlmICgxICsgcy0+bGFzdF9lb2JfbGVuICsgMTAgLSBzLT5iaV92YWxpZCA8IDkpIHsKLSAgICAgICAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUzw8MSwgMyk7Ci0gICAgICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIHN0YXRpY19sdHJlZSk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMTBMOwotI2VuZGlmCi0gICAgICAgIGJpX2ZsdXNoKHMpOwotICAgIH0KLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA3OwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTk5MCw3ICs5NzIsOCBAQAogICAgIH0gZWxzZSBpZiAocy0+c3RyYXRlZ3kgPT0gWl9GSVhFRCB8fCBzdGF0aWNfbGVuYiA9PSBvcHRfbGVuYikgewogI2VuZGlmCiAgICAgICAgIHNlbmRfYml0cyhzLCAoU1RBVElDX1RSRUVTPDwxKStsYXN0LCAzKTsKLSAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGN0X2RhdGEgKilzdGF0aWNfbHRyZWUsIChjdF9kYXRhICopc3RhdGljX2R0cmVlKTsKKyAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGNvbnN0IGN0X2RhdGEgKilzdGF0aWNfbHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjdF9kYXRhICopc3RhdGljX2R0cmVlKTsKICNpZmRlZiBERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+c3RhdGljX2xlbjsKICNlbmRpZgpAQCAtOTk4LDcgKzk4MSw4IEBACiAgICAgICAgIHNlbmRfYml0cyhzLCAoRFlOX1RSRUVTPDwxKStsYXN0LCAzKTsKICAgICAgICAgc2VuZF9hbGxfdHJlZXMocywgcy0+bF9kZXNjLm1heF9jb2RlKzEsIHMtPmRfZGVzYy5tYXhfY29kZSsxLAogICAgICAgICAgICAgICAgICAgICAgICBtYXhfYmxpbmRleCsxKTsKLSAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGN0X2RhdGEgKilzLT5keW5fbHRyZWUsIChjdF9kYXRhICopcy0+ZHluX2R0cmVlKTsKKyAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGNvbnN0IGN0X2RhdGEgKilzLT5keW5fbHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2R0cmVlKTsKICNpZmRlZiBERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+b3B0X2xlbjsKICNlbmRpZgpAQCAtMTA3NSw4ICsxMDU5LDggQEAKICAqLwogbG9jYWwgdm9pZCBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBjdF9kYXRhICpsdHJlZTsgLyogbGl0ZXJhbCB0cmVlICovCi0gICAgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi8KKyAgICBjb25zdCBjdF9kYXRhICpsdHJlZTsgLyogbGl0ZXJhbCB0cmVlICovCisgICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi8KIHsKICAgICB1bnNpZ25lZCBkaXN0OyAgICAgIC8qIGRpc3RhbmNlIG9mIG1hdGNoZWQgc3RyaW5nICovCiAgICAgaW50IGxjOyAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3QgPT0gMCkgKi8KQEAgLTExMTgsNyArMTEwMiw2IEBACiAgICAgfSB3aGlsZSAobHggPCBzLT5sYXN0X2xpdCk7CiAKICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gbHRyZWVbRU5EX0JMT0NLXS5MZW47CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTIyNiw3ICsxMjA5LDYgQEAKICAgICBpbnQgICAgICBoZWFkZXI7ICAvKiB0cnVlIGlmIGJsb2NrIGhlYWRlciBtdXN0IGJlIHdyaXR0ZW4gKi8KIHsKICAgICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCi0gICAgcy0+bGFzdF9lb2JfbGVuID0gODsgLyogZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZSAqLwogCiAgICAgaWYgKGhlYWRlcikgewogICAgICAgICBwdXRfc2hvcnQocywgKHVzaClsZW4pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3VuY29tcHIuYyBiL01vZHVsZXMvemxpYi91bmNvbXByLmMKaW5kZXggYWQ5OGJlMy4uMjQyZTk0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3VuY29tcHIuYworKysgYi9Nb2R1bGVzL3psaWIvdW5jb21wci5jCkBAIC0zMCw3ICszMCw3IEBACiAgICAgel9zdHJlYW0gc3RyZWFtOwogICAgIGludCBlcnI7CiAKLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CiAgICAgc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwogICAgIC8qIENoZWNrIGZvciBzb3VyY2UgPiA2NEsgb24gMTYtYml0IG1hY2hpbmU6ICovCiAgICAgaWYgKCh1TG9uZylzdHJlYW0uYXZhaWxfaW4gIT0gc291cmNlTGVuKSByZXR1cm4gWl9CVUZfRVJST1I7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaCBiL01vZHVsZXMvemxpYi96Y29uZi5oCmluZGV4IDAyY2U1NmMuLjk5ODdhNzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5oCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE1LDExICsxNSwxMyBAQAogICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVmaXgiLgogICovCiAjaWZkZWYgWl9QUkVGSVggICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX1BSRUZJWF9TRVQKIAogLyogYWxsIGxpbmtlZCBzeW1ib2xzICovCiAjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQogIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQogIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9iaXRzCiAjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCiAjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKICMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCkBAIC0yNyw5ICsyOSwxMSBAQAogIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYKICMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKQEAgLTQwLDQ0ICs0NCw1MyBAQAogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKICMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKICMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCiAjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKICMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgotIyAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAotIyAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCi0jICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKLSMgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCi0jICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQotIyAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgotIyAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdwotIyAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0Ci0jICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgotIyAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCi0jICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgotIyAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKLSMgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKLSMgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKLSMgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAotIyAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKLSMgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KLSMgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAotIyAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCi0jICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCi0jICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCi0jICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCi0jICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKLSMgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKLSMgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAotIyAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCi0jICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCi0jICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKLSMgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YwotIyAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCisjICAgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKKyMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKKyMgICAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlaworIyAgICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCisjICAgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKKyMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICAgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKICMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKICMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZApAQCAtOTIsMTYgKzEwNSwyMiBAQAogIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAogIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotIyAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKLSMgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKKyMgICAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZW5kaWYKICMgIGRlZmluZSB6bGliQ29tcGlsZUZsYWdzICAgICAgel96bGliQ29tcGlsZUZsYWdzCiAjICBkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgIHpfemxpYlZlcnNpb24KIApAQCAtMTExLDcgKzEzMCw5IEBACiAjICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwogIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCiAjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAgICAgIHpfZ3pfaGVhZGVyCiAjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVhZGVycAogIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKQEAgLTE5Nyw2ICsyMTgsMTIgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCiAvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwogI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCiAjICBkZWZpbmUgTk9fRFVNTVlfREVDTApAQCAtMjQzLDYgKzI3MCwxNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIFpfQVJHIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0ZGFyZyAqLworIyAgaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKwogLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKICAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCiAgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKQEAgLTM1NiwxMiArMzkxLDQ3IEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKICNpZmRlZiBTVERDCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKICNlbmRpZgogCiAvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZApAQCAtMzcwLDIxICs0NDAsMzggQEAKICAqIGJvdGggIiN1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQgIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAwIiBhcwogICogZXF1aXZhbGVudGx5IHJlcXVlc3Rpbmcgbm8gNjQtYml0IG9wZXJhdGlvbnMKICAqLwotI2lmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCiAjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGlmbmRlZiB6X29mZl90Ci0jICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9IQVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVmIFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAgICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFNFRUtfU0VUCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCiAjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwogIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KQEAgLTM5NCwxOCArNDgxLDE0IEBACiAjICBkZWZpbmUgel9vZmZfdCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKICMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAogI2Vsc2UKLSMgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4gYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCmluZGV4IGEyZjcxYjEuLjA0MzAxOWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KKysrIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgpAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNywxMSArMTcsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjksOSArMzEsMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00Miw0NCArNDYsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTk0LDE2ICsxMDcsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMyw3ICsxMzIsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTksNiArMjIwLDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0NSw2ICsyNzIsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTgsMTIgKzM5Myw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MiwyMSArNDQyLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTYsMTggKzQ4MywxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbiBiL01vZHVsZXMvemxpYi96Y29uZi5oLmluCmluZGV4IDAyY2U1NmMuLjk5ODdhNzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5oLmluCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oLmluCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE1LDExICsxNSwxMyBAQAogICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVmaXgiLgogICovCiAjaWZkZWYgWl9QUkVGSVggICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX1BSRUZJWF9TRVQKIAogLyogYWxsIGxpbmtlZCBzeW1ib2xzICovCiAjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQogIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQogIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9iaXRzCiAjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCiAjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKICMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCkBAIC0yNyw5ICsyOSwxMSBAQAogIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYKICMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKQEAgLTQwLDQ0ICs0NCw1MyBAQAogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKICMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKICMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCiAjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKICMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgotIyAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAotIyAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCi0jICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKLSMgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCi0jICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQotIyAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgotIyAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdwotIyAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0Ci0jICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgotIyAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCi0jICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgotIyAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKLSMgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKLSMgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKLSMgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAotIyAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKLSMgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KLSMgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAotIyAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCi0jICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCi0jICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCi0jICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCi0jICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKLSMgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKLSMgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAotIyAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCi0jICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCi0jICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKLSMgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YwotIyAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCisjICAgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKKyMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKKyMgICAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlaworIyAgICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCisjICAgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKKyMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICAgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKICMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKICMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZApAQCAtOTIsMTYgKzEwNSwyMiBAQAogIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAogIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotIyAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKLSMgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKKyMgICAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZW5kaWYKICMgIGRlZmluZSB6bGliQ29tcGlsZUZsYWdzICAgICAgel96bGliQ29tcGlsZUZsYWdzCiAjICBkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgIHpfemxpYlZlcnNpb24KIApAQCAtMTExLDcgKzEzMCw5IEBACiAjICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwogIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCiAjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAgICAgIHpfZ3pfaGVhZGVyCiAjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVhZGVycAogIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKQEAgLTE5Nyw2ICsyMTgsMTIgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCiAvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwogI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCiAjICBkZWZpbmUgTk9fRFVNTVlfREVDTApAQCAtMjQzLDYgKzI3MCwxNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIFpfQVJHIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0ZGFyZyAqLworIyAgaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKwogLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKICAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCiAgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKQEAgLTM1NiwxMiArMzkxLDQ3IEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKICNpZmRlZiBTVERDCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKICNlbmRpZgogCiAvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZApAQCAtMzcwLDIxICs0NDAsMzggQEAKICAqIGJvdGggIiN1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQgIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAwIiBhcwogICogZXF1aXZhbGVudGx5IHJlcXVlc3Rpbmcgbm8gNjQtYml0IG9wZXJhdGlvbnMKICAqLwotI2lmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCiAjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGlmbmRlZiB6X29mZl90Ci0jICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9IQVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVmIFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAgICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFNFRUtfU0VUCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCiAjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwogIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KQEAgLTM5NCwxOCArNDgxLDE0IEBACiAjICBkZWZpbmUgel9vZmZfdCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKICMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAogI2Vsc2UKLSMgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5pbi5oIGIvTW9kdWxlcy96bGliL3pjb25mLmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYTk0MzEuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKi8KLQotLyogQCgjKSAkSWQkICovCi0KLSNpZm5kZWYgWkNPTkZfSAotI2RlZmluZSBaQ09ORl9ICi0KLS8qCi0gKiBJZiB5b3UgKnJlYWxseSogbmVlZCBhIHVuaXF1ZSBwcmVmaXggZm9yIGFsbCB0eXBlcyBhbmQgbGlicmFyeSBmdW5jdGlvbnMsCi0gKiBjb21waWxlIHdpdGggLURaX1BSRUZJWC4gVGhlICJzdGFuZGFyZCIgemxpYiBzaG91bGQgYmUgY29tcGlsZWQgd2l0aG91dCBpdC4KLSAqLwotI2lmZGVmIFpfUFJFRklYCi0jICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCi0jICBkZWZpbmUgZGVmbGF0ZSAgICAgICAgICAgICAgIHpfZGVmbGF0ZQotIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQKLSMgIGRlZmluZSBpbmZsYXRlSW5pdF8gICAgICAgICAgel9pbmZsYXRlSW5pdF8KLSMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCi0jICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAotIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KLSMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGRlZmxhdGVDb3B5ICAgICAgICAgICB6X2RlZmxhdGVDb3B5Ci0jICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0Ci0jICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcwotIyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgICAgICAgICB6X2RlZmxhdGVCb3VuZAotIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQotIyAgZGVmaW5lIGluZmxhdGVJbml0Ml8gICAgICAgICB6X2luZmxhdGVJbml0Ml8KLSMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCi0jICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAotIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5Ci0jICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0Ci0jICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKLSMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKLSMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCi0jICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKLSMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0KLSMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCi0jICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwotIyAgZGVmaW5lIG91dF9mdW5jICAgICAgICAgICAgICB6X291dF9mdW5jCi0jICBkZWZpbmUgQnl0ZSAgICAgICAgICAgICAgICAgIHpfQnl0ZQotIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAgICB6X3VJbnQKLSMgIGRlZmluZSB1TG9uZyAgICAgICAgICAgICAgICAgel91TG9uZwotIyAgZGVmaW5lIEJ5dGVmICAgICAgICAgICAgICAgICB6X0J5dGVmCi0jICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKLSMgIGRlZmluZSBpbnRmICAgICAgICAgICAgICAgICAgel9pbnRmCi0jICBkZWZpbmUgdUludGYgICAgICAgICAgICAgICAgIHpfdUludGYKLSMgIGRlZmluZSB1TG9uZ2YgICAgICAgICAgICAgICAgel91TG9uZ2YKLSMgIGRlZmluZSB2b2lkcGYgICAgICAgICAgICAgICAgel92b2lkcGYKLSMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgIWRlZmluZWQoTVNET1MpCi0jICBkZWZpbmUgTVNET1MKLSNlbmRpZgotI2lmIChkZWZpbmVkKE9TXzIpIHx8IGRlZmluZWQoX19PUzJfXykpICYmICFkZWZpbmVkKE9TMikKLSMgIGRlZmluZSBPUzIKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJTkRPV1MpCi0jICBkZWZpbmUgV0lORE9XUwotI2VuZGlmCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChfX1dJTjMyX18pCi0jICBpZm5kZWYgV0lOMzIKLSMgICAgZGVmaW5lIFdJTjMyCi0jICBlbmRpZgotI2VuZGlmCi0jaWYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5lZChXSU4zMikKLSMgIGlmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykgJiYgIWRlZmluZWQoX18zODZfXykKLSMgICAgaWZuZGVmIFNZUzE2QklUCi0jICAgICAgZGVmaW5lIFNZUzE2QklUCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBDb21waWxlIHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUgbW9yZQotICogdGhhbiA2NGsgYnl0ZXMgYXQgYSB0aW1lIChuZWVkZWQgb24gc3lzdGVtcyB3aXRoIDE2LWJpdCBpbnQpLgotICovCi0jaWZkZWYgU1lTMTZCSVQKLSMgIGRlZmluZSBNQVhTRUdfNjRLCi0jZW5kaWYKLSNpZmRlZiBNU0RPUwotIyAgZGVmaW5lIFVOQUxJR05FRF9PSwotI2VuZGlmCi0KLSNpZmRlZiBfX1NURENfVkVSU0lPTl9fCi0jICBpZm5kZWYgU1REQwotIyAgICBkZWZpbmUgU1REQwotIyAgZW5kaWYKLSMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotIyAgICBpZm5kZWYgU1REQzk5Ci0jICAgICAgZGVmaW5lIFNUREM5OQotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChfX0hPU19BSVhfXykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykgJiYgIWRlZmluZWQoU1REQykgICAgLyogaVNlcmllcyAoZm9ybWVybHkgQVMvNDAwKS4gKi8KLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLQotI2lmbmRlZiBTVERDCi0jICBpZm5kZWYgY29uc3QgLyogY2Fubm90IHVzZSAhZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChjb25zdCkgb24gTWFjICovCi0jICAgIGRlZmluZSBjb25zdCAgICAgICAvKiBub3RlOiBuZWVkIGEgbW9yZSBnZW50bGUgc29sdXRpb24gaGVyZSAqLwotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwotI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCi0jICBkZWZpbmUgTk9fRFVNTVlfREVDTAotI2VuZGlmCi0KLS8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqLwotI2lmbmRlZiBNQVhfTUVNX0xFVkVMCi0jICBpZmRlZiBNQVhTRUdfNjRLCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDgKLSMgIGVsc2UKLSMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOQotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNYXhpbXVtIHZhbHVlIGZvciB3aW5kb3dCaXRzIGluIGRlZmxhdGVJbml0MiBhbmQgaW5mbGF0ZUluaXQyLgotICogV0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBleHRyYWN0IC5neiBmaWxlcwotICogY3JlYXRlZCBieSBnemlwLiAoRmlsZXMgY3JlYXRlZCBieSBtaW5pZ3ppcCBjYW4gc3RpbGwgYmUgZXh0cmFjdGVkIGJ5Ci0gKiBnemlwLikKLSAqLwotI2lmbmRlZiBNQVhfV0JJVFMKLSMgIGRlZmluZSBNQVhfV0JJVFMgICAxNSAvKiAzMksgTFo3NyB3aW5kb3cgKi8KLSNlbmRpZgotCi0vKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKLSAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVtTGV2ZWwrOSkpCi0gdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCi0gcGx1cyBhIGZldyBraWxvYnl0ZXMgZm9yIHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKLSB0aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdpdGgKLSAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03IgotIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCi0KLSAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cwotIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKLSBmb3Igc21hbGwgb2JqZWN0cy4KLSovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgZGVjbGFyYXRpb25zICovCi0KLSNpZm5kZWYgT0YgLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotIyAgaWZkZWYgU1REQwotIyAgICBkZWZpbmUgT0YoYXJncykgIGFyZ3MKLSMgIGVsc2UKLSMgICAgZGVmaW5lIE9GKGFyZ3MpICAoKQotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAotICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KLSAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQotICogdG8gZGVmaW5lIE5PX01FTUNQWSBpbiB6dXRpbC5oLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlIG1peGVkIG1vZGVsLAotICoganVzdCBkZWZpbmUgRkFSIHRvIGJlIGVtcHR5LgotICovCi0jaWZkZWYgU1lTMTZCSVQKLSMgIGlmIGRlZmluZWQoTV9JODZTTSkgfHwgZGVmaW5lZChNX0k4Nk1NKQotICAgICAvKiBNU0Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCi0jICAgIGRlZmluZSBTTUFMTF9NRURJVU0KLSMgICAgaWZkZWYgX01TQ19WRVIKLSMgICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQoX19TTUFMTF9fKSB8fCBkZWZpbmVkKF9fTUVESVVNX18pKQotICAgICAvKiBUdXJibyBDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBkZWZpbmUgU01BTExfTUVESVVNCi0jICAgIGlmZGVmIF9fQk9STEFORENfXwotIyAgICAgIGRlZmluZSBGQVIgX2ZhcgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIEZBUiBmYXIKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikKLSAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgYXMgYSBETEwsIGRlZmluZSBaTElCX0RMTC4KLSAgICAqIFRoaXMgaXMgbm90IG1hbmRhdG9yeSwgYnV0IGl0IG9mZmVycyBhIGxpdHRsZSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KLSAgICAqLwotIyAgaWZkZWYgWkxJQl9ETEwKLSMgICAgaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+PSAweDUwMCkpCi0jICAgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYgIC8qIFpMSUJfRExMICovCi0gICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIHdpdGggdGhlIFdJTkFQSS9XSU5BUElWIGNhbGxpbmcgY29udmVudGlvbiwKLSAgICAqIGRlZmluZSBaTElCX1dJTkFQSS4KLSAgICAqIENhdXRpb246IHRoZSBzdGFuZGFyZCBaTElCMS5ETEwgaXMgTk9UIGNvbXBpbGVkIHVzaW5nIFpMSUJfV0lOQVBJLgotICAgICovCi0jICBpZmRlZiBaTElCX1dJTkFQSQotIyAgICBpZmRlZiBGQVIKLSMgICAgICB1bmRlZiBGQVIKLSMgICAgZW5kaWYKLSMgICAgaW5jbHVkZSA8d2luZG93cy5oPgotICAgICAvKiBObyBuZWVkIGZvciBfZXhwb3J0LCB1c2UgWkxJQi5ERUYgaW5zdGVhZC4gKi8KLSAgICAgLyogRm9yIGNvbXBsZXRlIFdpbmRvd3MgY29tcGF0aWJpbGl0eSwgdXNlIFdJTkFQSSwgbm90IF9fc3RkY2FsbC4gKi8KLSMgICAgZGVmaW5lIFpFWFBPUlQgV0lOQVBJCi0jICAgIGlmZGVmIFdJTjMyCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBXSU5BUElWCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIEZBUiBDREVDTAotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX19CRU9TX18pCi0jICBpZmRlZiBaTElCX0RMTAotIyAgICBpZmRlZiBaTElCX0lOVEVSTkFMCi0jICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIFpFWFRFUk4KLSMgIGRlZmluZSBaRVhURVJOIGV4dGVybgotI2VuZGlmCi0jaWZuZGVmIFpFWFBPUlQKLSMgIGRlZmluZSBaRVhQT1JUCi0jZW5kaWYKLSNpZm5kZWYgWkVYUE9SVFZBCi0jICBkZWZpbmUgWkVYUE9SVFZBCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSMgIGRlZmluZSBGQVIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19NQUNUWVBFU19fKQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICovCi0jZW5kaWYKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9yZSAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1TG9uZzsgLyogMzIgYml0cyBvciBtb3JlICovCi0KLSNpZmRlZiBTTUFMTF9NRURJVU0KLSAgIC8qIEJvcmxhbmQgQy9DKysgYW5kIHNvbWUgb2xkIE1TQyB2ZXJzaW9ucyBpZ25vcmUgRkFSIGluc2lkZSB0eXBlZGVmICovCi0jICBkZWZpbmUgQnl0ZWYgQnl0ZSBGQVIKLSNlbHNlCi0gICB0eXBlZGVmIEJ5dGUgIEZBUiBCeXRlZjsKLSNlbmRpZgotdHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7Ci10eXBlZGVmIGludCAgIEZBUiBpbnRmOwotdHlwZWRlZiB1SW50ICBGQVIgdUludGY7Ci10eXBlZGVmIHVMb25nIEZBUiB1TG9uZ2Y7Ci0KLSNpZmRlZiBTVERDCi0gICB0eXBlZGVmIHZvaWQgY29uc3QgKnZvaWRwYzsKLSAgIHR5cGVkZWYgdm9pZCBGQVIgICAqdm9pZHBmOwotICAgdHlwZWRlZiB2b2lkICAgICAgICp2b2lkcDsKLSNlbHNlCi0gICB0eXBlZGVmIEJ5dGUgY29uc3QgKnZvaWRwYzsKLSAgIHR5cGVkZWYgQnl0ZSBGQVIgICAqdm9pZHBmOwotICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKLSNlbmRpZgotCi0jaWYgMCAgICAgICAgICAgLyogSEFWRV9VTklTVERfSCAtLSB0aGlzIGxpbmUgaXMgdXBkYXRlZCBieSAuL2NvbmZpZ3VyZSAqLwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBvZmZfdCAqLwotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKLSNlbmRpZgotI2lmbmRlZiBTRUVLX1NFVAotIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCi0jICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwotIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KLSNlbmRpZgotI2lmbmRlZiB6X29mZl90Ci0jICBkZWZpbmUgel9vZmZfdCBsb25nCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBpZmRlZiBGQVIKLSMgICAgdW5kZWYgRkFSCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUluaXRfLCJERUlOIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0Ml8sIkRFSU4yIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVCb3VuZCwiREVCTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXRfLCJJTklOIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVFbmQsIklORU5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVTeW5jLCJJTlNZIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQotIyAgIHByYWdtYSBtYXAoY29tcHJlc3NCb3VuZCwiQ01CTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV90YWJsZSwiSU5UQUJMIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX2NvcHlyaWdodCwiSU5DT1BZIikKLSNlbmRpZgotCi0jZW5kaWYgLyogWkNPTkZfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuMyBiL01vZHVsZXMvemxpYi96bGliLjMKaW5kZXggMjdhZGM0Yy4uMDE2MGU2MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuMworKysgYi9Nb2R1bGVzL3psaWIvemxpYi4zCkBAIC0xLDQgKzEsNCBAQAotLlRIIFpMSUIgMyAiMTkgQXByIDIwMTAiCisuVEggWkxJQiAzICIyOCBBcHIgMjAxMyIKIC5TSCBOQU1FCiB6bGliIFwtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeQogLlNIIFNZTk9QU0lTCkBAIC0zNiw5ICszNiw5IEBACiAuSVIgemxpYi5oIC4KIFRoZSBkaXN0cmlidXRpb24gc291cmNlIGluY2x1ZGVzIGV4YW1wbGVzIG9mIHVzZSBvZiB0aGUgbGlicmFyeQogaW4gdGhlIGZpbGVzCi0uSSBleGFtcGxlLmMKKy5JIHRlc3QvZXhhbXBsZS5jCiBhbmQKLS5JUiBtaW5pZ3ppcC5jLAorLklSIHRlc3QvbWluaWd6aXAuYywKIGFzIHdlbGwgYXMgb3RoZXIgZXhhbXBsZXMgaW4gdGhlCiAuSVIgZXhhbXBsZXMvCiBkaXJlY3RvcnkuCkBAIC02NSw3ICs2NSw3IEBACiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgKGFta0BtYWduZXQuY29tKSwKIGlzIGF2YWlsYWJsZSBpbiBQeXRob24gMS41IGFuZCBsYXRlciB2ZXJzaW9uczoKIC5JUAotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbAoraHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3psaWIuaHRtbAogLkxQCiAuSSB6bGliCiBpcyBidWlsdCBpbnRvCkBAIC05NSwxMSArOTUsMTEgQEAKIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzOgogLklQCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoZm9yIHRoZSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwIChmb3IgdGhlIHpsaWIgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKIC5icgotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MS50eHQgKGZvciB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MSAoZm9yIHRoZSBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQpCiAuYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTIudHh0IChmb3IgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTIgKGZvciB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQogLkxQCiBNYXJrIE5lbHNvbiB3cm90ZSBhbiBhcnRpY2xlIGFib3V0CiAuSSB6bGliCkBAIC0xMjUsOCArMTI1LDggQEAKIFNlbmQgcXVlc3Rpb25zIGFuZC9vciBjb21tZW50cyB0byB6bGliQGd6aXAub3JnLAogb3IgKGZvciB0aGUgV2luZG93cyBETEwgdmVyc2lvbikgdG8gR2lsbGVzIFZvbGxhbnQgKGluZm9Ad2luaW1hZ2UuY29tKS4KIC5TSCBBVVRIT1JTCi1WZXJzaW9uIDEuMi41Ci1Db3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKK1ZlcnNpb24gMS4yLjgKK0NvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgKGpsb3VwQGd6aXAub3JnKQogYW5kIE1hcmsgQWRsZXIgKG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUpLgogLkxQCiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcy1pcywiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi5oIGIvTW9kdWxlcy96bGliL3psaWIuaAppbmRleCA3OWExODdjLi4zZTBjNzY3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemxpYi5oCisrKyBiL01vZHVsZXMvemxpYi96bGliLmgKQEAgLTEsNyArMSw3IEBACiAvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgdmVyc2lvbiAxLjIuNSwgQXByaWwgMTl0aCwgMjAxMAorICB2ZXJzaW9uIDEuMi44LCBBcHJpbCAyOHRoLCAyMDEzCiAKLSAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpAQCAtMjQsOCArMjQsOCBAQAogCiAKICAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVxdWVzdCBmb3IKLSAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQKLSAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4KKyAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MAorICAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIgKGd6aXAgZm9ybWF0KS4KICovCiAKICNpZm5kZWYgWkxJQl9ICkBAIC0zNywxMSArMzcsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIuNSIKLSNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjUwCisjZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjgiCisjZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTI4MAogI2RlZmluZSBaTElCX1ZFUl9NQUpPUiAxCiAjZGVmaW5lIFpMSUJfVkVSX01JTk9SIDIKLSNkZWZpbmUgWkxJQl9WRVJfUkVWSVNJT04gNQorI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA4CiAjZGVmaW5lIFpMSUJfVkVSX1NVQlJFVklTSU9OIDAKIAogLyoKQEAgLTgzLDE1ICs4MywxNSBAQAogc3RydWN0IGludGVybmFsX3N0YXRlOwogCiB0eXBlZGVmIHN0cnVjdCB6X3N0cmVhbV9zIHsKLSAgICBCeXRlZiAgICAqbmV4dF9pbjsgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLworICAgIHpfY29uc3QgQnl0ZWYgKm5leHRfaW47ICAgICAvKiBuZXh0IGlucHV0IGJ5dGUgKi8KICAgICB1SW50ICAgICBhdmFpbF9pbjsgIC8qIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbiAqLwotICAgIHVMb25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbmIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KKyAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG51bWJlciBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLwogCiAgICAgQnl0ZWYgICAgKm5leHRfb3V0OyAvKiBuZXh0IG91dHB1dCBieXRlIHNob3VsZCBiZSBwdXQgdGhlcmUgKi8KICAgICB1SW50ICAgICBhdmFpbF9vdXQ7IC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICovCi0gICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBuYiBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLwogCi0gICAgY2hhciAgICAgKm1zZzsgICAgICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KKyAgICB6X2NvbnN0IGNoYXIgKm1zZzsgIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLwogICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKnN0YXRlOyAvKiBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi8KIAogICAgIGFsbG9jX2Z1bmMgemFsbG9jOyAgLyogdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KQEAgLTMyNyw4ICszMjcsOSBAQAogCiAgICAgWl9GSU5JU0ggY2FuIGJlIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQgaWYgYWxsIHRoZSBjb21wcmVzc2lvbgogICBpcyB0byBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAuICBJbiB0aGlzIGNhc2UsIGF2YWlsX291dCBtdXN0IGJlIGF0IGxlYXN0IHRoZQotICB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQgKHNlZSBiZWxvdykuICBJZiBkZWZsYXRlIGRvZXMgbm90IHJldHVybgotICBaX1NUUkVBTV9FTkQsIHRoZW4gaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgorICB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQgKHNlZSBiZWxvdykuICBUaGVuIGRlZmxhdGUgaXMgZ3VhcmFudGVlZCB0bworICByZXR1cm4gWl9TVFJFQU1fRU5ELiAgSWYgbm90IGVub3VnaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIGRlZmxhdGUgd2lsbAorICBub3QgcmV0dXJuIFpfU1RSRUFNX0VORCwgYW5kIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KIAogICAgIGRlZmxhdGUoKSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCByZWFkCiAgIHNvIGZhciAodGhhdCBpcywgdG90YWxfaW4gYnl0ZXMpLgpAQCAtNDUxLDIzICs0NTIsMjkgQEAKICAgZXJyb3IuICBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRvIGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwIChhCiAgIHNpbmdsZSBjYWxsIG9mIGluZmxhdGUpLCB0aGUgcGFyYW1ldGVyIGZsdXNoIHNob3VsZCBiZSBzZXQgdG8gWl9GSU5JU0guICBJbgogICB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZDsKLSAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4gIChUaGUgc2l6ZQotICBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUgYmVlbiBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcwotICBwdXJwb3NlLikgVGhlIG5leHQgb3BlcmF0aW9uIG9uIHRoaXMgc3RyZWFtIG11c3QgYmUgaW5mbGF0ZUVuZCB0byBkZWFsbG9jYXRlCi0gIHRoZSBkZWNvbXByZXNzaW9uIHN0YXRlLiAgVGhlIHVzZSBvZiBaX0ZJTklTSCBpcyBuZXZlciByZXF1aXJlZCwgYnV0IGNhbiBiZQotICB1c2VkIHRvIGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBwcm9hY2ggbWF5IGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUKLSAgaW5mbGF0ZSgpIGNhbGwuCisgIGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgZm9yIHRoZQorICBvcGVyYXRpb24gdG8gY29tcGxldGUuICAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4KKyAgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgZm9yIHRoaXMgcHVycG9zZS4pIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbm90CisgIHJlcXVpcmVkIHRvIHBlcmZvcm0gYW4gaW5mbGF0aW9uIGluIG9uZSBzdGVwLiAgSG93ZXZlciBpdCBtYXkgYmUgdXNlZCB0bworICBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIGNhbiBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIGluZmxhdGUoKQorICBjYWxsLiAgWl9GSU5JU0ggYWxzbyBpbmZvcm1zIGluZmxhdGUgdG8gbm90IG1haW50YWluIGEgc2xpZGluZyB3aW5kb3cgaWYgdGhlCisgIHN0cmVhbSBjb21wbGV0ZXMsIHdoaWNoIHJlZHVjZXMgaW5mbGF0ZSdzIG1lbW9yeSBmb290cHJpbnQuICBJZiB0aGUgc3RyZWFtCisgIGRvZXMgbm90IGNvbXBsZXRlLCBlaXRoZXIgYmVjYXVzZSBub3QgYWxsIG9mIHRoZSBzdHJlYW0gaXMgcHJvdmlkZWQgb3Igbm90CisgIGVub3VnaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIHRoZW4gYSBzbGlkaW5nIHdpbmRvdyB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAgaW5mbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gdG8gY29udGludWUgdGhlIG9wZXJhdGlvbiBhcyBpZiBaX05PX0ZMVVNIIGhhZAorICBiZWVuIHVzZWQuCiAKICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgaW5mbGF0ZSgpIGFsd2F5cyBmbHVzaGVzIGFzIG11Y2ggb3V0cHV0IGFzCiAgIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgYWx3YXlzIHVzZXMgdGhlIGZhc3RlciBhcHByb2FjaCBvbiB0aGUKLSAgZmlyc3QgY2FsbC4gIFNvIHRoZSBvbmx5IGVmZmVjdCBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGluIHRoaXMgaW1wbGVtZW50YXRpb24KLSAgaXMgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBpbmZsYXRlKCksIGFzIG5vdGVkIGJlbG93LCBvciB3aGVuIGl0IHJldHVybnMgZWFybHkKLSAgYmVjYXVzZSBaX0JMT0NLIG9yIFpfVFJFRVMgaXMgdXNlZC4KKyAgZmlyc3QgY2FsbC4gIFNvIHRoZSBlZmZlY3RzIG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmUKKyAgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBpbmZsYXRlKCkgYXMgbm90ZWQgYmVsb3csIHdoZW4gaW5mbGF0ZSgpIHJldHVybnMgZWFybHkKKyAgd2hlbiBaX0JMT0NLIG9yIFpfVFJFRVMgaXMgdXNlZCwgYW5kIHdoZW4gaW5mbGF0ZSgpIGF2b2lkcyB0aGUgYWxsb2NhdGlvbiBvZgorICBtZW1vcnkgZm9yIGEgc2xpZGluZyB3aW5kb3cgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLgogCiAgICAgIElmIGEgcHJlc2V0IGRpY3Rpb25hcnkgaXMgbmVlZGVkIGFmdGVyIHRoaXMgY2FsbCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5Ci0gIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIHRoZSBkaWN0aW9uYXJ5CisgIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQogICBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9ORUVEX0RJQ1Q7IG90aGVyd2lzZSBpdCBzZXRzCi0gIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAorICBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZCBzbyBmYXIgKHRoYXQgaXMsCiAgIHRvdGFsX291dCBieXRlcykgYW5kIHJldHVybnMgWl9PSywgWl9TVFJFQU1fRU5EIG9yIGFuIGVycm9yIGNvZGUgYXMgZGVzY3JpYmVkCiAgIGJlbG93LiAgQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBpbmZsYXRlKCkgY2hlY2tzIHRoYXQgaXRzIGNvbXB1dGVkIGFkbGVyMzIKICAgY2hlY2tzdW0gaXMgZXF1YWwgdG8gdGhhdCBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX1NUUkVBTV9FTkQKQEAgLTQ3OCw3ICs0ODUsOSBAQAogICBpbml0aWFsaXppbmcgd2l0aCBpbmZsYXRlSW5pdDIoKS4gIEFueSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGd6aXAKICAgaGVhZGVyIGlzIG5vdCByZXRhaW5lZCwgc28gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZAogICBpbnN0ZWFkIHVzZSByYXcgaW5mbGF0ZSwgc2VlIGluZmxhdGVJbml0MigpIGJlbG93LCBvciBpbmZsYXRlQmFjaygpIGFuZAotICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4KKyAgcGVyZm9ybSB0aGVpciBvd24gcHJvY2Vzc2luZyBvZiB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIuICBXaGVuIHByb2Nlc3NpbmcKKyAgZ3ppcC13cmFwcGVkIGRlZmxhdGUgZGF0YSwgc3RybS0+YWRsZXIzMiBpcyBzZXQgdG8gdGhlIENSQy0zMiBvZiB0aGUgb3V0cHV0CisgIHByb2R1Y3RlZCBzbyBmYXIuICBUaGUgQ1JDLTMyIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ3ppcCB0cmFpbGVyLgogCiAgICAgaW5mbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQgcHJvY2Vzc2VkCiAgIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMKQEAgLTU4MCwxMCArNTg5LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICBkaWN0TGVuZ3RoKSk7CiAvKgogICAgICBJbml0aWFsaXplcyB0aGUgY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiBieXRlIHNlcXVlbmNlCi0gICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCi0gICBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yIGRlZmxhdGVSZXNldCwgYmVmb3JlIGFueSBjYWxsCi0gICBvZiBkZWZsYXRlLiAgVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCi0gICBkaWN0aW9uYXJ5IChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgorICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiAgV2hlbiB1c2luZyB0aGUgemxpYiBmb3JtYXQsIHRoaXMKKyAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0LCBkZWZsYXRlSW5pdDIgb3IKKyAgIGRlZmxhdGVSZXNldCwgYW5kIGJlZm9yZSBhbnkgY2FsbCBvZiBkZWZsYXRlLiAgV2hlbiBkb2luZyByYXcgZGVmbGF0ZSwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZWl0aGVyIGJlZm9yZSBhbnkgY2FsbCBvZiBkZWZsYXRlLCBvciBpbW1lZGlhdGVseQorICAgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgYSBkZWZsYXRlIGJsb2NrLCBpLmUuIGFmdGVyIGFsbCBpbnB1dCBoYXMgYmVlbgorICAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4gZGVsaXZlcmVkIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBmbHVzaAorICAgb3B0aW9ucyBaX0JMT0NLLCBaX1BBUlRJQUxfRkxVU0gsIFpfU1lOQ19GTFVTSCwgb3IgWl9GVUxMX0ZMVVNILiAgVGhlCisgICBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKKyAgIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KIAogICAgICBUaGUgZGljdGlvbmFyeSBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5CiAgICB0byBiZSBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5CkBAIC02MTAsOCArNjI0LDggQEAKICAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIGEKICAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcwogICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiBkZWZsYXRlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVhbQotICAgb3IgaWYgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBpcyBic29ydCkuICBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAotICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyAgIG9yIGlmIG5vdCBhdCBhIGJsb2NrIGJvdW5kYXJ5IGZvciByYXcgZGVmbGF0ZSkuICBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzCisgICBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LApAQCAtNjg4LDkgKzcwMiwyOSBAQAogICAgZGVmbGF0aW9uIG9mIHNvdXJjZUxlbiBieXRlcy4gIEl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIGRlZmxhdGVJbml0KCkgb3IKICAgIGRlZmxhdGVJbml0MigpLCBhbmQgYWZ0ZXIgZGVmbGF0ZVNldEhlYWRlcigpLCBpZiB1c2VkLiAgVGhpcyB3b3VsZCBiZSB1c2VkCiAgICB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIGZvciBkZWZsYXRpb24gaW4gYSBzaW5nbGUgcGFzcywgYW5kIHNvIHdvdWxkIGJlCi0gICBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4KKyAgIGNhbGxlZCBiZWZvcmUgZGVmbGF0ZSgpLiAgSWYgdGhhdCBmaXJzdCBkZWZsYXRlKCkgY2FsbCBpcyBwcm92aWRlZCB0aGUKKyAgIHNvdXJjZUxlbiBpbnB1dCBieXRlcywgYW4gb3V0cHV0IGJ1ZmZlciBhbGxvY2F0ZWQgdG8gdGhlIHNpemUgcmV0dXJuZWQgYnkKKyAgIGRlZmxhdGVCb3VuZCgpLCBhbmQgdGhlIGZsdXNoIHZhbHVlIFpfRklOSVNILCB0aGVuIGRlZmxhdGUoKSBpcyBndWFyYW50ZWVkCisgICB0byByZXR1cm4gWl9TVFJFQU1fRU5ELiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgY29tcHJlc3NlZCBzaXplIHRvCisgICBiZSBsYXJnZXIgdGhhbiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kKCkgaWYgZmx1c2ggb3B0aW9ucyBvdGhlcgorICAgdGhhbiBaX0ZJTklTSCBvciBaX05PX0ZMVVNIIGFyZSB1c2VkLgogKi8KIAorWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcGVuZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYml0cykpOworLyoKKyAgICAgZGVmbGF0ZVBlbmRpbmcoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYW5kIGJpdHMgb2Ygb3V0cHV0IHRoYXQgaGF2ZQorICAgYmVlbiBnZW5lcmF0ZWQsIGJ1dCBub3QgeWV0IHByb3ZpZGVkIGluIHRoZSBhdmFpbGFibGUgb3V0cHV0LiAgVGhlIGJ5dGVzIG5vdAorICAgcHJvdmlkZWQgd291bGQgYmUgZHVlIHRvIHRoZSBhdmFpbGFibGUgb3V0cHV0IHNwYWNlIGhhdmluZyBiZWluZyBjb25zdW1lZC4KKyAgIFRoZSBudW1iZXIgb2YgYml0cyBvZiBvdXRwdXQgbm90IHByb3ZpZGVkIGFyZSBiZXR3ZWVuIDAgYW5kIDcsIHdoZXJlIHRoZXkKKyAgIGF3YWl0IG1vcmUgYml0cyB0byBqb2luIHRoZW0gaW4gb3JkZXIgdG8gZmlsbCBvdXQgYSBmdWxsIGJ5dGUuICBJZiBwZW5kaW5nCisgICBvciBiaXRzIGFyZSBaX05VTEwsIHRoZW4gdGhvc2UgdmFsdWVzIGFyZSBub3Qgc2V0LgorCisgICAgIGRlZmxhdGVQZW5kaW5nIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyAqLworCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQcmltZSBPRigoel9zdHJlYW1wIHN0cm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKSk7CkBAIC03MDMsOCArNzM3LDkgQEAKICAgIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdmFsdWUKICAgIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIG91dHB1dC4KIAotICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICByb29tIGluIHRoZSBpbnRlcm5hbCBidWZmZXIgdG8gaW5zZXJ0IHRoZSBiaXRzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUKKyAgIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciBPRigoel9zdHJlYW1wIHN0cm0sCkBAIC03OTAsMTAgKzgyNSwxMSBAQAogICAgaWYgdGhhdCBjYWxsIHJldHVybmVkIFpfTkVFRF9ESUNULiAgVGhlIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yCiAgICBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBhZGxlcjMyIHZhbHVlIHJldHVybmVkIGJ5IHRoYXQgY2FsbCBvZiBpbmZsYXRlLgogICAgVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQotICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIGluZmxhdGVJbml0MigpIG9yIGluZmxhdGVSZXNldCgpIGFuZCBiZWZvcmUgYW55IGNhbGwgb2YKLSAgIGluZmxhdGUoKSB0byBzZXQgdGhlIGRpY3Rpb25hcnkuICBUaGUgYXBwbGljYXRpb24gbXVzdCBpbnN1cmUgdGhhdCB0aGUKLSAgIGRpY3Rpb25hcnkgdGhhdCB3YXMgdXNlZCBmb3IgY29tcHJlc3Npb24gaXMgcHJvdmlkZWQuCisgICBkZWZsYXRlU2V0RGljdGlvbmFyeSkuICBGb3IgcmF3IGluZmxhdGUsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBhbnkKKyAgIHRpbWUgdG8gc2V0IHRoZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkgaXMgc21hbGxlciB0aGFuIHRoZQorICAgd2luZG93IGFuZCB0aGVyZSBpcyBhbHJlYWR5IGRhdGEgaW4gdGhlIHdpbmRvdywgdGhlbiB0aGUgcHJvdmlkZWQgZGljdGlvbmFyeQorICAgd2lsbCBhbWVuZCB3aGF0J3MgdGhlcmUuICBUaGUgYXBwbGljYXRpb24gbXVzdCBpbnN1cmUgdGhhdCB0aGUgZGljdGlvbmFyeQorICAgdGhhdCB3YXMgdXNlZCBmb3IgY29tcHJlc3Npb24gaXMgcHJvdmlkZWQuCiAKICAgICAgaW5mbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGEKICAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcwpAQCAtODAzLDE5ICs4MzksMzggQEAKICAgIGluZmxhdGUoKS4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUdldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZWYgKmRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICAqZGljdExlbmd0aCkpOworLyoKKyAgICAgUmV0dXJucyB0aGUgc2xpZGluZyBkaWN0aW9uYXJ5IGJlaW5nIG1haW50YWluZWQgYnkgaW5mbGF0ZS4gIGRpY3RMZW5ndGggaXMKKyAgIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkaWN0aW9uYXJ5LCBhbmQgdGhhdCBtYW55IGJ5dGVzIGFyZSBjb3BpZWQKKyAgIHRvIGRpY3Rpb25hcnkuICBkaWN0aW9uYXJ5IG11c3QgaGF2ZSBlbm91Z2ggc3BhY2UsIHdoZXJlIDMyNzY4IGJ5dGVzIGlzCisgICBhbHdheXMgZW5vdWdoLiAgSWYgaW5mbGF0ZUdldERpY3Rpb25hcnkoKSBpcyBjYWxsZWQgd2l0aCBkaWN0aW9uYXJ5IGVxdWFsIHRvCisgICBaX05VTEwsIHRoZW4gb25seSB0aGUgZGljdGlvbmFyeSBsZW5ndGggaXMgcmV0dXJuZWQsIGFuZCBub3RoaW5nIGlzIGNvcGllZC4KKyAgIFNpbWlsYXJ5LCBpZiBkaWN0TGVuZ3RoIGlzIFpfTlVMTCwgdGhlbiBpdCBpcyBub3Qgc2V0LgorCisgICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBvbiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUKKyAgIHN0cmVhbSBzdGF0ZSBpcyBpbmNvbnNpc3RlbnQuCisqLworCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVTeW5jIE9GKCh6X3N0cmVhbXAgc3RybSkpOwogLyoKLSAgICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUgdGhlCi0gICBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAorICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZQorICAgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAogICAgYXZhaWxhYmxlIGlucHV0IGlzIHNraXBwZWQuICBObyBvdXRwdXQgaXMgcHJvdmlkZWQuCiAKLSAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwgWl9CVUZfRVJST1IKLSAgIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQgaGFzIGJlZW4KLSAgIGZvdW5kLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LiAgSW4gdGhlCi0gICBzdWNjZXNzIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0b3RhbF9pbgotICAgd2hpY2ggaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuICBJbiB0aGUgZXJyb3IgY2FzZSwKLSAgIHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIGluZmxhdGVTeW5jLCBwcm92aWRpbmcgbW9yZSBpbnB1dCBlYWNoCi0gICB0aW1lLCB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KKyAgICAgaW5mbGF0ZVN5bmMgc2VhcmNoZXMgZm9yIGEgMDAgMDAgRkYgRkYgcGF0dGVybiBpbiB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgQWxsIGZ1bGwgZmx1c2ggcG9pbnRzIGhhdmUgdGhpcyBwYXR0ZXJuLCBidXQgbm90IGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzCisgICBwYXR0ZXJuIGFyZSBmdWxsIGZsdXNoIHBvaW50cy4KKworICAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLAorICAgWl9CVUZfRVJST1IgaWYgbm8gbW9yZSBpbnB1dCB3YXMgcHJvdmlkZWQsIFpfREFUQV9FUlJPUiBpZiBubyBmbHVzaCBwb2ludAorICAgaGFzIGJlZW4gZm91bmQsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuCisgICBJbiB0aGUgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZgorICAgdG90YWxfaW4gd2hpY2ggaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuICBJbiB0aGUKKyAgIGVycm9yIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIGluZmxhdGVTeW5jLCBwcm92aWRpbmcgbW9yZQorICAgaW5wdXQgZWFjaCB0aW1lLCB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LApAQCAtOTYyLDEyICsxMDE3LDEzIEBACiAgICAgIFNlZSBpbmZsYXRlQmFjaygpIGZvciB0aGUgdXNhZ2Ugb2YgdGhlc2Ugcm91dGluZXMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0IHdpbGwgcmV0dXJuIFpfT0sgb24gc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYW55IG9mCi0gICB0aGUgcGFyYW1hdGVycyBhcmUgaW52YWxpZCwgWl9NRU1fRVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdCBiZQorICAgdGhlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb3VsZCBub3QgYmUKICAgIGFsbG9jYXRlZCwgb3IgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXMgbm90IG1hdGNoCiAgICB0aGUgdmVyc2lvbiBvZiB0aGUgaGVhZGVyIGZpbGUuCiAqLwogCi10eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICogRkFSICopKTsKK3R5cGVkZWYgdW5zaWduZWQgKCppbl9mdW5jKSBPRigodm9pZCBGQVIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7CiB0eXBlZGVmIGludCAoKm91dF9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFjayBPRigoel9zdHJlYW1wIHN0cm0sCkBAIC05NzUsMTEgKzEwMzEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9mdW5jIG91dCwgdm9pZCBGQVIgKm91dF9kZXNjKSk7CiAvKgogICAgICBpbmZsYXRlQmFjaygpIGRvZXMgYSByYXcgaW5mbGF0ZSB3aXRoIGEgc2luZ2xlIGNhbGwgdXNpbmcgYSBjYWxsLWJhY2sKLSAgIGludGVyZmFjZSBmb3IgaW5wdXQgYW5kIG91dHB1dC4gIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBpbmZsYXRlKCkgZm9yCi0gICBmaWxlIGkvbyBhcHBsaWNhdGlvbnMgaW4gdGhhdCBpdCBhdm9pZHMgY29weWluZyBiZXR3ZWVuIHRoZSBvdXRwdXQgYW5kIHRoZQotICAgc2xpZGluZyB3aW5kb3cgYnkgc2ltcGx5IG1ha2luZyB0aGUgd2luZG93IGl0c2VsZiB0aGUgb3V0cHV0IGJ1ZmZlci4gIFRoaXMKLSAgIGZ1bmN0aW9uIHRydXN0cyB0aGUgYXBwbGljYXRpb24gdG8gbm90IGNoYW5nZSB0aGUgb3V0cHV0IGJ1ZmZlciBwYXNzZWQgYnkKLSAgIHRoZSBvdXRwdXQgZnVuY3Rpb24sIGF0IGxlYXN0IHVudGlsIGluZmxhdGVCYWNrKCkgcmV0dXJucy4KKyAgIGludGVyZmFjZSBmb3IgaW5wdXQgYW5kIG91dHB1dC4gIFRoaXMgaXMgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQgdGhhbgorICAgaW5mbGF0ZSgpIGZvciBmaWxlIGkvbyBhcHBsaWNhdGlvbnMsIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUKKyAgIG91dHB1dCBhbmQgdGhlIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dAorICAgYnVmZmVyLiAgaW5mbGF0ZSgpIGNhbiBiZSBmYXN0ZXIgb24gbW9kZXJuIENQVXMgd2hlbiB1c2VkIHdpdGggbGFyZ2UKKyAgIGJ1ZmZlcnMuICBpbmZsYXRlQmFjaygpIHRydXN0cyB0aGUgYXBwbGljYXRpb24gdG8gbm90IGNoYW5nZSB0aGUgb3V0cHV0CisgICBidWZmZXIgcGFzc2VkIGJ5IHRoZSBvdXRwdXQgZnVuY3Rpb24sIGF0IGxlYXN0IHVudGlsIGluZmxhdGVCYWNrKCkgcmV0dXJucy4KIAogICAgICBpbmZsYXRlQmFja0luaXQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUKICAgIGFuZCB0byBpbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRoIHRoZSB1c2VyLXByb3ZpZGVkIHdpbmRvdyBidWZmZXIuCkBAIC0xMDg4LDYgKzExNDUsNyBAQAogICAgICAyNy0zMTogMCAocmVzZXJ2ZWQpCiAgKi8KIAorI2lmbmRlZiBaX1NPTE8KIAogICAgICAgICAgICAgICAgICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KIApAQCAtMTE0OSwxMCArMTIwNywxMSBAQAogCiAgICAgIHVuY29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKICAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dAotICAgYnVmZmVyLCBvciBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZCBvciBpbmNvbXBsZXRlLgorICAgYnVmZmVyLCBvciBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZCBvciBpbmNvbXBsZXRlLiAgSW4KKyAgIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgdW5jb21wcmVzcygpIHdpbGwgZmlsbCB0aGUgb3V0cHV0CisgICBidWZmZXIgd2l0aCB0aGUgdW5jb21wcmVzc2VkIGRhdGEgdXAgdG8gdGhhdCBwb2ludC4KICovCiAKLQogICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3ppcCBmaWxlIGFjY2VzcyBmdW5jdGlvbnMgKi8KIAogLyoKQEAgLTExNjIsNyArMTIyMSw3IEBACiAgICB3cmFwcGVyLCBkb2N1bWVudGVkIGluIFJGQyAxOTUyLCB3cmFwcGVkIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLgogKi8KIAotdHlwZWRlZiB2b2lkcCBnekZpbGU7ICAgICAgIC8qIG9wYXF1ZSBnemlwIGZpbGUgZGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgZ3pGaWxlX3MgKmd6RmlsZTsgICAgLyogc2VtaS1vcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KIAogLyoKIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKSk7CkBAIC0xMTcyLDEzICsxMjMxLDI4IEBACiAgICBhIHN0cmF0ZWd5OiAnZicgZm9yIGZpbHRlcmVkIGRhdGEgYXMgaW4gIndiNmYiLCAnaCcgZm9yIEh1ZmZtYW4tb25seQogICAgY29tcHJlc3Npb24gYXMgaW4gIndiMWgiLCAnUicgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcgYXMgaW4gIndiMVIiLCBvciAnRicKICAgIGZvciBmaXhlZCBjb2RlIGNvbXByZXNzaW9uIGFzIGluICJ3YjlGIi4gIChTZWUgdGhlIGRlc2NyaXB0aW9uIG9mCi0gICBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pIEFsc28gImEiCi0gICBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICJ3IiB0byByZXF1ZXN0IHRoYXQgdGhlIGd6aXAgc3RyZWFtIHRoYXQgd2lsbCBiZQotICAgd3JpdHRlbiBiZSBhcHBlbmRlZCB0byB0aGUgZmlsZS4gICIrIiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciwgc2luY2UgcmVhZGluZwotICAgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgZ3ppcCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQuCisgICBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pICAnVCcgd2lsbAorICAgcmVxdWVzdCB0cmFuc3BhcmVudCB3cml0aW5nIG9yIGFwcGVuZGluZyB3aXRoIG5vIGNvbXByZXNzaW9uIGFuZCBub3QgdXNpbmcKKyAgIHRoZSBnemlwIGZvcm1hdC4KKworICAgICAiYSIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwKKyAgIGJlIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlCisgICByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLiAgVGhlIGFkZGl0aW9uIG9mCisgICAieCIgd2hlbiB3cml0aW5nIHdpbGwgY3JlYXRlIHRoZSBmaWxlIGV4Y2x1c2l2ZWx5LCB3aGljaCBmYWlscyBpZiB0aGUgZmlsZQorICAgYWxyZWFkeSBleGlzdHMuICBPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgdGhlIGFkZGl0aW9uIG9mICJlIiB3aGVuCisgICByZWFkaW5nIG9yIHdyaXRpbmcgd2lsbCBzZXQgdGhlIGZsYWcgdG8gY2xvc2UgdGhlIGZpbGUgb24gYW4gZXhlY3ZlKCkgY2FsbC4KKworICAgICBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgZ3ppcCwgd2lsbCByZWFkIGFuZCBkZWNvZGUgYSBzZXF1ZW5jZSBvZiBnemlwCisgICBzdHJlYW1zIGluIGEgZmlsZS4gIFRoZSBhcHBlbmQgZnVuY3Rpb24gb2YgZ3pvcGVuKCkgY2FuIGJlIHVzZWQgdG8gY3JlYXRlCisgICBzdWNoIGEgZmlsZS4gIChBbHNvIHNlZSBnemZsdXNoKCkgZm9yIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMuKSAgV2hlbgorICAgYXBwZW5kaW5nLCBnem9wZW4gZG9lcyBub3QgdGVzdCB3aGV0aGVyIHRoZSBmaWxlIGJlZ2lucyB3aXRoIGEgZ3ppcCBzdHJlYW0sCisgICBub3IgZG9lcyBpdCBsb29rIGZvciB0aGUgZW5kIG9mIHRoZSBnemlwIHN0cmVhbXMgdG8gYmVnaW4gYXBwZW5kaW5nLiAgZ3pvcGVuCisgICB3aWxsIHNpbXBseSBhcHBlbmQgYSBnemlwIHN0cmVhbSB0byB0aGUgZXhpc3RpbmcgZmlsZS4KIAogICAgICBnem9wZW4gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGZpbGUgd2hpY2ggaXMgbm90IGluIGd6aXAgZm9ybWF0OyBpbiB0aGlzCi0gICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uCisgICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBXaGVuCisgICByZWFkaW5nLCB0aGlzIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSBieSBsb29raW5nIGZvciB0aGUgbWFnaWMgdHdvLQorICAgYnl0ZSBnemlwIGhlYWRlci4KIAogICAgICBnem9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQsIGlmIHRoZXJlIHdhcwogICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgZ3pGaWxlIHN0YXRlLCBvciBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzCkBAIC0xMTk3LDcgKzEyNzEsMTEgQEAKICAgIGRlc2NyaXB0b3IgZmQsIGp1c3QgbGlrZSBmY2xvc2UoZmRvcGVuKGZkLCBtb2RlKSkgY2xvc2VzIHRoZSBmaWxlIGRlc2NyaXB0b3IKICAgIGZkLiAgSWYgeW91IHdhbnQgdG8ga2VlcCBmZCBvcGVuLCB1c2UgZmQgPSBkdXAoZmRfa2VlcCk7IGd6ID0gZ3pkb3BlbihmZCwKICAgIG1vZGUpOy4gIFRoZSBkdXBsaWNhdGVkIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHNhdmVkIHRvIGF2b2lkIGEgbGVhaywgc2luY2UKLSAgIGd6ZG9wZW4gZG9lcyBub3QgY2xvc2UgZmQgaWYgaXQgZmFpbHMuCisgICBnemRvcGVuIGRvZXMgbm90IGNsb3NlIGZkIGlmIGl0IGZhaWxzLiAgSWYgeW91IGFyZSB1c2luZyBmaWxlbm8oKSB0byBnZXQgdGhlCisgICBmaWxlIGRlc2NyaXB0b3IgZnJvbSBhIEZJTEUgKiwgdGhlbiB5b3Ugd2lsbCBoYXZlIHRvIHVzZSBkdXAoKSB0byBhdm9pZAorICAgZG91YmxlLWNsb3NlKClpbmcgdGhlIGZpbGUgZGVzY3JpcHRvci4gIEJvdGggZ3pjbG9zZSgpIGFuZCBmY2xvc2UoKSB3aWxsCisgICBjbG9zZSB0aGUgYXNzb2NpYXRlZCBmaWxlIGRlc2NyaXB0b3IsIHNvIHRoZXkgbmVlZCB0byBoYXZlIGRpZmZlcmVudCBmaWxlCisgICBkZXNjcmlwdG9ycy4KIAogICAgICBnemRvcGVuIHJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUKICAgIGd6RmlsZSBzdGF0ZSwgaWYgYW4gaW52YWxpZCBtb2RlIHdhcyBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdApAQCAtMTIzNSwxNCArMTMxMywyNiBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenJlYWQgT0YoKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbikpOwogLyoKICAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgSWYKLSAgIHRoZSBpbnB1dCBmaWxlIHdhcyBub3QgaW4gZ3ppcCBmb3JtYXQsIGd6cmVhZCBjb3BpZXMgdGhlIGdpdmVuIG51bWJlciBvZgotICAgYnl0ZXMgaW50byB0aGUgYnVmZmVyLgorICAgdGhlIGlucHV0IGZpbGUgaXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIgb2YKKyAgIGJ5dGVzIGludG8gdGhlIGJ1ZmZlciBkaXJlY3RseSBmcm9tIHRoZSBmaWxlLgogCiAgICAgIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQgb2YgYSBnemlwIHN0cmVhbSBpbiB0aGUgaW5wdXQsIGd6cmVhZCB3aWxsIGNvbnRpbnVlCi0gICB0byByZWFkLCBsb29raW5nIGZvciBhbm90aGVyIGd6aXAgc3RyZWFtLCBvciBmYWlsaW5nIHRoYXQsIHJlYWRpbmcgdGhlIHJlc3QKLSAgIG9mIHRoZSBpbnB1dCBmaWxlIGRpcmVjdGx5IHdpdGhvdXQgZGVjb21wcmVzc2lvbi4gIFRoZSBlbnRpcmUgaW5wdXQgZmlsZQotICAgd2lsbCBiZSByZWFkIGlmIGd6cmVhZCBpcyBjYWxsZWQgdW50aWwgaXQgcmV0dXJucyBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZAotICAgbGVuLgorICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbS4gIEFueSBudW1iZXIgb2YgZ3ppcCBzdHJlYW1zIG1heSBiZQorICAgY29uY2F0ZW5hdGVkIGluIHRoZSBpbnB1dCBmaWxlLCBhbmQgd2lsbCBhbGwgYmUgZGVjb21wcmVzc2VkIGJ5IGd6cmVhZCgpLgorICAgSWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBnemlwIHN0cmVhbSBpcyBlbmNvdW50ZXJlZCBhZnRlciBhIGd6aXAgc3RyZWFtLAorICAgdGhhdCByZW1haW5pbmcgdHJhaWxpbmcgZ2FyYmFnZSBpcyBpZ25vcmVkIChhbmQgbm8gZXJyb3IgaXMgcmV0dXJuZWQpLgorCisgICAgIGd6cmVhZCBjYW4gYmUgdXNlZCB0byByZWFkIGEgZ3ppcCBmaWxlIHRoYXQgaXMgYmVpbmcgY29uY3VycmVudGx5IHdyaXR0ZW4uCisgICBVcG9uIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0LCBnenJlYWQgd2lsbCByZXR1cm4gd2l0aCB0aGUgYXZhaWxhYmxlCisgICBkYXRhLiAgSWYgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgZ3plcnJvciBpcyBaX09LIG9yIFpfQlVGX0VSUk9SLCB0aGVuCisgICBnemNsZWFyZXJyIGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRoZSBlbmQgb2YgZmlsZSBpbmRpY2F0b3IgaW4gb3JkZXIgdG8gcGVybWl0CisgICBnenJlYWQgdG8gYmUgdHJpZWQgYWdhaW4uICBaX09LIGluZGljYXRlcyB0aGF0IGEgZ3ppcCBzdHJlYW0gd2FzIGNvbXBsZXRlZAorICAgb24gdGhlIGxhc3QgZ3pyZWFkLiAgWl9CVUZfRVJST1IgaW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGZpbGUgZW5kZWQgaW4gdGhlCisgICBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbS4gIE5vdGUgdGhhdCBnenJlYWQgZG9lcyBub3QgcmV0dXJuIC0xIGluIHRoZSBldmVudAorICAgb2YgYW4gaW5jb21wbGV0ZSBnemlwIHN0cmVhbS4gIFRoaXMgZXJyb3IgaXMgZGVmZXJyZWQgdW50aWwgZ3pjbG9zZSgpLCB3aGljaAorICAgd2lsbCByZXR1cm4gWl9CVUZfRVJST1IgaWYgdGhlIGxhc3QgZ3pyZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwCisgICBzdHJlYW0uICBBbHRlcm5hdGl2ZWx5LCBnemVycm9yIGNhbiBiZSB1c2VkIGJlZm9yZSBnemNsb3NlIHRvIGRldGVjdCB0aGlzCisgICBjYXNlLgogCiAgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIGxlc3MgdGhhbgogICAgbGVuIGZvciBlbmQgb2YgZmlsZSwgb3IgLTEgZm9yIGVycm9yLgpAQCAtMTI1Niw3ICsxMzQ2LDcgQEAKICAgIGVycm9yLgogKi8KIAotWkVYVEVSTiBpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIE9GKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKK1pFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBaX0FSRygoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CiAvKgogICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKICAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKQEAgLTEzMDEsNyArMTM5MSwxMCBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGMgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgogICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuICBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUgb3IgLTEKLSAgIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuCisgICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvIGZvciBzcGVlZC4KKyAgIEFzIHN1Y2gsIGl0IGRvZXMgbm90IGRvIGFsbCBvZiB0aGUgY2hlY2tpbmcgdGhlIG90aGVyIGZ1bmN0aW9ucyBkby4gIEkuZS4KKyAgIGl0IGRvZXMgbm90IGNoZWNrIHRvIHNlZSBpZiBmaWxlIGlzIE5VTEwsIG5vciB3aGV0aGVyIHRoZSBzdHJ1Y3R1cmUgZmlsZQorICAgcG9pbnRzIHRvIGhhcyBiZWVuIGNsb2JiZXJlZCBvciBub3QuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6dW5nZXRjIE9GKChpbnQgYywgZ3pGaWxlIGZpbGUpKTsKQEAgLTEzOTcsOSArMTQ5MCw3IEBACiBaRVhURVJOIGludCBaRVhQT1JUIGd6ZGlyZWN0IE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgUmV0dXJucyB0cnVlICgxKSBpZiBmaWxlIGlzIGJlaW5nIGNvcGllZCBkaXJlY3RseSB3aGlsZSByZWFkaW5nLCBvciBmYWxzZQotICAgKDApIGlmIGZpbGUgaXMgYSBnemlwIHN0cmVhbSBiZWluZyBkZWNvbXByZXNzZWQuICBUaGlzIHN0YXRlIGNhbiBjaGFuZ2UgZnJvbQotICAgZmFsc2UgdG8gdHJ1ZSB3aGlsZSByZWFkaW5nIHRoZSBpbnB1dCBmaWxlIGlmIHRoZSBlbmQgb2YgYSBnemlwIHN0cmVhbSBpcwotICAgcmVhY2hlZCwgYnV0IGlzIGZvbGxvd2VkIGJ5IGRhdGEgdGhhdCBpcyBub3QgYW5vdGhlciBnemlwIHN0cmVhbS4KKyAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLgogCiAgICAgIElmIHRoZSBpbnB1dCBmaWxlIGlzIGVtcHR5LCBnemRpcmVjdCgpIHdpbGwgcmV0dXJuIHRydWUsIHNpbmNlIHRoZSBpbnB1dAogICAgZG9lcyBub3QgY29udGFpbiBhIGd6aXAgc3RyZWFtLgpAQCAtMTQwOCw2ICsxNDk5LDEzIEBACiAgICBjYXVzZSBidWZmZXJzIHRvIGJlIGFsbG9jYXRlZCB0byBhbGxvdyByZWFkaW5nIHRoZSBmaWxlIHRvIGRldGVybWluZSBpZiBpdAogICAgaXMgYSBnemlwIGZpbGUuICBUaGVyZWZvcmUgaWYgZ3pidWZmZXIoKSBpcyB1c2VkLCBpdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZQogICAgZ3pkaXJlY3QoKS4KKworICAgICBXaGVuIHdyaXRpbmcsIGd6ZGlyZWN0KCkgcmV0dXJucyB0cnVlICgxKSBpZiB0cmFuc3BhcmVudCB3cml0aW5nIHdhcworICAgcmVxdWVzdGVkICgid1QiIGZvciB0aGUgZ3pvcGVuKCkgbW9kZSksIG9yIGZhbHNlICgwKSBvdGhlcndpc2UuICAoTm90ZToKKyAgIGd6ZGlyZWN0KCkgaXMgbm90IG5lZWRlZCB3aGVuIHdyaXRpbmcuICBUcmFuc3BhcmVudCB3cml0aW5nIG11c3QgYmUKKyAgIGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBzbyB0aGUgYXBwbGljYXRpb24gYWxyZWFkeSBrbm93cyB0aGUgYW5zd2VyLiAgV2hlbgorICAgbGlua2luZyBzdGF0aWNhbGx5LCB1c2luZyBnemRpcmVjdCgpIHdpbGwgaW5jbHVkZSBhbGwgb2YgdGhlIHpsaWIgY29kZSBmb3IKKyAgIGd6aXAgZmlsZSByZWFkaW5nIGFuZCBkZWNvbXByZXNzaW9uLCB3aGljaCBtYXkgbm90IGJlIGRlc2lyZWQuKQogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCAgICBnemNsb3NlIE9GKChnekZpbGUgZmlsZSkpOwpAQCAtMTQxOSw3ICsxNTE3LDggQEAKICAgIG11c3Qgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBhbGxvY2F0aW9uLgogCiAgICAgIGd6Y2xvc2Ugd2lsbCByZXR1cm4gWl9TVFJFQU1fRVJST1IgaWYgZmlsZSBpcyBub3QgdmFsaWQsIFpfRVJSTk8gb24gYQotICAgZmlsZSBvcGVyYXRpb24gZXJyb3IsIG9yIFpfT0sgb24gc3VjY2Vzcy4KKyAgIGZpbGUgb3BlcmF0aW9uIGVycm9yLCBaX01FTV9FUlJPUiBpZiBvdXQgb2YgbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGUKKyAgIGxhc3QgcmVhZCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgZ3ppcCBzdHJlYW0sIG9yIFpfT0sgb24gc3VjY2Vzcy4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pjbG9zZV9yIE9GKChnekZpbGUgZmlsZSkpOwpAQCAtMTQ1Nyw2ICsxNTU2LDcgQEAKICAgIGZpbGUgdGhhdCBpcyBiZWluZyB3cml0dGVuIGNvbmN1cnJlbnRseS4KICovCiAKKyNlbmRpZiAvKiAhWl9TT0xPICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrc3VtIGZ1bmN0aW9ucyAqLwogCkBAIC0xNDkyLDE2ICsxNTkyLDE3IEBACiAgICAgIENvbWJpbmUgdHdvIEFkbGVyLTMyIGNoZWNrc3VtcyBpbnRvIG9uZS4gIEZvciB0d28gc2VxdWVuY2VzIG9mIGJ5dGVzLCBzZXExCiAgICBhbmQgc2VxMiB3aXRoIGxlbmd0aHMgbGVuMSBhbmQgbGVuMiwgQWRsZXItMzIgY2hlY2tzdW1zIHdlcmUgY2FsY3VsYXRlZCBmb3IKICAgIGVhY2gsIGFkbGVyMSBhbmQgYWRsZXIyLiAgYWRsZXIzMl9jb21iaW5lKCkgcmV0dXJucyB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YKLSAgIHNlcTEgYW5kIHNlcTIgY29uY2F0ZW5hdGVkLCByZXF1aXJpbmcgb25seSBhZGxlcjEsIGFkbGVyMiwgYW5kIGxlbjIuCisgICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLiAgTm90ZQorICAgdGhhdCB0aGUgel9vZmZfdCB0eXBlIChsaWtlIG9mZl90KSBpcyBhIHNpZ25lZCBpbnRlZ2VyLiAgSWYgbGVuMiBpcworICAgbmVnYXRpdmUsIHRoZSByZXN1bHQgaGFzIG5vIG1lYW5pbmcgb3IgdXRpbGl0eS4KICovCiAKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMiAgIE9GKCh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CiAvKgogICAgICBVcGRhdGUgYSBydW5uaW5nIENSQy0zMiB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlCiAgICB1cGRhdGVkIENSQy0zMi4gIElmIGJ1ZiBpcyBaX05VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQKLSAgIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBmb3IgdGhlIGNyYy4gIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncwotICAgY29tcGxlbWVudCkgaXMgcGVyZm9ybWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZQotICAgYXBwbGljYXRpb24uCisgICBpbml0aWFsIHZhbHVlIGZvciB0aGUgY3JjLiAgUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzIGNvbXBsZW1lbnQpIGlzCisgICBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLgogCiAgICBVc2FnZSBleGFtcGxlOgogCkBAIC0xNTQ0LDE3ICsxNjQ1LDQyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJlYW1fc2l6ZSkpOwogI2RlZmluZSBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgXAotICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcCi0gICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgaW5mbGF0ZUluaXRfKChzdHJtKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIFwKICAgICAgICAgZGVmbGF0ZUluaXQyXygoc3RybSksKGxldmVsKSwobWV0aG9kKSwod2luZG93Qml0cyksKG1lbUxldmVsKSxcCi0gICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUluaXQyKHN0cm0sIHdpbmRvd0JpdHMpIFwKLSAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVCYWNrSW5pdChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKICAgICAgICAgaW5mbGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorCisjaWZuZGVmIFpfU09MTworCisvKiBnemdldGMoKSBtYWNybyBhbmQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb24gYW5kIGV4cG9zZWQgZGF0YSBzdHJ1Y3R1cmUuICBOb3RlCisgKiB0aGF0IHRoZSByZWFsIGludGVybmFsIHN0YXRlIGlzIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIGV4cG9zZWQgc3RydWN0dXJlLgorICogVGhpcyBhYmJyZXZpYXRlZCBzdHJ1Y3R1cmUgZXhwb3NlcyBqdXN0IGVub3VnaCBmb3IgdGhlIGd6Z2V0YygpIG1hY3JvLiAgVGhlCisgKiB1c2VyIHNob3VsZCBub3QgbWVzcyB3aXRoIHRoZXNlIGV4cG9zZWQgZWxlbWVudHMsIHNpbmNlIHRoZWlyIG5hbWVzIG9yCisgKiBiZWhhdmlvciBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwgcGVyaGFwcyBldmVuIGNhcHJpY2lvdXNseS4gIFRoZXkgY2FuCisgKiBvbmx5IGJlIHVzZWQgYnkgdGhlIGd6Z2V0YygpIG1hY3JvLiAgWW91IGhhdmUgYmVlbiB3YXJuZWQuCisgKi8KK3N0cnVjdCBnekZpbGVfcyB7CisgICAgdW5zaWduZWQgaGF2ZTsKKyAgICB1bnNpZ25lZCBjaGFyICpuZXh0OworICAgIHpfb2ZmNjRfdCBwb3M7Cit9OworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGNfIE9GKChnekZpbGUgZmlsZSkpOyAgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyMgIGRlZmluZSB6X2d6Z2V0YyhnKSBcCisgICAgICAgICAgKChnKS0+aGF2ZSA/ICgoZyktPmhhdmUtLSwgKGcpLT5wb3MrKywgKigoZyktPm5leHQpKyspIDogZ3pnZXRjKGcpKQorI2Vsc2UKKyMgIGRlZmluZSBnemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyNlbmRpZgogCiAvKiBwcm92aWRlIDY0LWJpdCBvZmZzZXQgZnVuY3Rpb25zIGlmIF9MQVJHRUZJTEU2NF9TT1VSQ0UgZGVmaW5lZCwgYW5kL29yCiAgKiBjaGFuZ2UgdGhlIHJlZ3VsYXIgZnVuY3Rpb25zIHRvIDY0IGJpdHMgaWYgX0ZJTEVfT0ZGU0VUX0JJVFMgaXMgNjQgKGlmCkBAIC0xNTYyLDcgKzE2ODgsNyBAQAogICogZnVuY3Rpb25zIGFyZSBjaGFuZ2VkIHRvIDY0IGJpdHMpIC0tIGluIGNhc2UgdGhlc2UgYXJlIHNldCBvbiBzeXN0ZW1zCiAgKiB3aXRob3V0IGxhcmdlIGZpbGUgc3VwcG9ydCwgX0xGUzY0X0xBUkdFRklMRSBtdXN0IGFsc28gYmUgdHJ1ZQogICovCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZmRlZiBaX0xBUkdFNjQKICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CiAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmNjRfdCwgaW50KSk7CiAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6dGVsbDY0IE9GKChnekZpbGUpKTsKQEAgLTE1NzEsMTQgKzE2OTcsMjMgQEAKICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmY2NF90KSk7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKFpMSUJfSU5URVJOQUwpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgX0xGUzY0X0xBUkdFRklMRS0wCi0jICBkZWZpbmUgZ3pvcGVuIGd6b3BlbjY0Ci0jICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0Ci0jICBkZWZpbmUgZ3p0ZWxsIGd6dGVsbDY0Ci0jICBkZWZpbmUgZ3pvZmZzZXQgZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgY3JjMzJfY29tYmluZTY0Ci0jICBpZmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisjaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgZGVmaW5lZChaX1dBTlQ2NCkKKyMgIGlmZGVmIFpfUFJFRklYX1NFVAorIyAgICBkZWZpbmUgel9nem9wZW4gel9nem9wZW42NAorIyAgICBkZWZpbmUgel9nenNlZWsgel9nenNlZWs2NAorIyAgICBkZWZpbmUgel9nenRlbGwgel9nenRlbGw2NAorIyAgICBkZWZpbmUgel9nem9mZnNldCB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIHpfYWRsZXIzMl9jb21iaW5lIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIHpfY3JjMzJfY29tYmluZSB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgZ3pvcGVuIGd6b3BlbjY0CisjICAgIGRlZmluZSBnenNlZWsgZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6dGVsbCBnenRlbGw2NAorIyAgICBkZWZpbmUgZ3pvZmZzZXQgZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lIGFkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSBjcmMzMl9jb21iaW5lIGNyYzMyX2NvbWJpbmU2NAorIyAgZW5kaWYKKyMgIGlmbmRlZiBaX0xBUkdFNjQKICAgICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKICAgICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgel9vZmZfdCwgaW50KSk7CiAgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6dGVsbDY0IE9GKChnekZpbGUpKTsKQEAgLTE1OTUsNiArMTczMCwxMyBAQAogICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOwogI2VuZGlmCiAKKyNlbHNlIC8qIFpfU09MTyAqLworCisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKworI2VuZGlmIC8qICFaX1NPTE8gKi8KKwogLyogaGFjayBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjaWYgIWRlZmluZWQoWlVUSUxfSCkgJiYgIWRlZmluZWQoTk9fRFVNTVlfREVDTCkKICAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OwpAQCAtMTYwMyw4ICsxNzQ1LDIxIEBACiAvKiB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zICovCiBaRVhURVJOIGNvbnN0IGNoYXIgICAqIFpFWFBPUlQgekVycm9yICAgICAgICAgICBPRigoaW50KSk7CiBaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVN5bmNQb2ludCBPRigoel9zdHJlYW1wKSk7Ci1aRVhURVJOIGNvbnN0IHVMb25nZiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOworWkVYVEVSTiBjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVVbmRlcm1pbmUgT0YoKHpfc3RyZWFtcCwgaW50KSk7CitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVJlc2V0S2VlcCBPRigoel9zdHJlYW1wKSk7CitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCBPRigoel9zdHJlYW1wKSk7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKFpfU09MTykKK1pFWFRFUk4gZ3pGaWxlICAgICAgICAgWkVYUE9SVCBnem9wZW5fdyBPRigoY29uc3Qgd2NoYXJfdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kZSkpOworI2VuZGlmCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVFZBIGd6dnByaW50ZiBaX0FSRygoZ3pGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCB2YSkpOworIyAgZW5kaWYKKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLm1hcCBiL01vZHVsZXMvemxpYi96bGliLm1hcAppbmRleCBmMjgyZDM2Li41NWM2NjQ3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemxpYi5tYXAKKysrIGIvTW9kdWxlcy96bGliL3psaWIubWFwCkBAIC02NiwzICs2NiwxOCBAQAogICAgIGd6Y2xvc2VfcjsKICAgICBnemNsb3NlX3c7CiB9IFpMSUJfMS4yLjMuNDsKKworWkxJQl8xLjIuNS4xIHsKKyAgICBkZWZsYXRlUGVuZGluZzsKK30gWkxJQl8xLjIuMy41OworCitaTElCXzEuMi41LjIgeworICAgIGRlZmxhdGVSZXNldEtlZXA7CisgICAgZ3pnZXRjXzsKKyAgICBpbmZsYXRlUmVzZXRLZWVwOworfSBaTElCXzEuMi41LjE7CisKK1pMSUJfMS4yLjcuMSB7CisgICAgaW5mbGF0ZUdldERpY3Rpb25hcnk7CisgICAgZ3p2cHJpbnRmOworfSBaTElCXzEuMi41LjI7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvenV0aWwuYyBiL01vZHVsZXMvemxpYi96dXRpbC5jCmluZGV4IDg5OGVkMzQuLjIzZDJlYmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96dXRpbC5jCisrKyBiL01vZHVsZXMvemxpYi96dXRpbC5jCkBAIC0xLDE3ICsxLDIwIEBACiAvKiB6dXRpbC5jIC0tIHRhcmdldCBkZXBlbmRlbnQgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAsIDIwMTEsIDIwMTIgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCiAvKiBAKCMpICRJZCQgKi8KIAogI2luY2x1ZGUgInp1dGlsLmgiCisjaWZuZGVmIFpfU09MTworIyAgaW5jbHVkZSAiZ3pndXRzLmgiCisjZW5kaWYKIAogI2lmbmRlZiBOT19EVU1NWV9ERUNMCiBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgICAgICB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KICNlbmRpZgogCi1jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdID0geworel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdID0gewogIm5lZWQgZGljdGlvbmFyeSIsICAgICAvKiBaX05FRURfRElDVCAgICAgICAyICAqLwogInN0cmVhbSBlbmQiLCAgICAgICAgICAvKiBaX1NUUkVBTV9FTkQgICAgICAxICAqLwogIiIsICAgICAgICAgICAgICAgICAgICAvKiBaX09LICAgICAgICAgICAgICAwICAqLwpAQCAtODUsMjcgKzg4LDI3IEBACiAjaWZkZWYgRkFTVEVTVAogICAgIGZsYWdzICs9IDFMIDw8IDIxOwogI2VuZGlmCi0jaWZkZWYgU1REQworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCiAjICBpZmRlZiBOT192c25wcmludGYKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZWxzZQogIyAgICBpZmRlZiBIQVNfdnNucHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2Vsc2UKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjQ7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjQ7CiAjICBpZmRlZiBOT19zbnByaW50ZgotICAgICAgICBmbGFncyArPSAxTCA8PCAyNTsKKyAgICBmbGFncyArPSAxTCA8PCAyNTsKICMgICAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVsc2UKICMgICAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCkBAIC0xODEsNiArMTg0LDcgQEAKIH0KICNlbmRpZgogCisjaWZuZGVmIFpfU09MTwogCiAjaWZkZWYgU1lTMTZCSVQKIApAQCAtMzE2LDMgKzMyMCw1IEBACiB9CiAKICNlbmRpZiAvKiBNWV9aQ0FMTE9DICovCisKKyNlbmRpZiAvKiAhWl9TT0xPICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvenV0aWwuaCBiL01vZHVsZXMvemxpYi96dXRpbC5oCmluZGV4IDI1OGZhODguLjI0YWIwNmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96dXRpbC5oCisrKyBiL01vZHVsZXMvemxpYi96dXRpbC5oCkBAIC0xLDUgKzEsNSBAQAogLyogenV0aWwuaCAtLSBpbnRlcm5hbCBpbnRlcmZhY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTEzLDcgKzEzLDcgQEAKICNpZm5kZWYgWlVUSUxfSAogI2RlZmluZSBaVVRJTF9ICiAKLSNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKSAmJiAhZGVmaW5lZChOT19WSVopCisjaWZkZWYgSEFWRV9ISURERU4KICMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiAjZWxzZQogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgInpsaWIuaCIKIAotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGlmICEoZGVmaW5lZChfV0lOMzJfV0NFKSAmJiBkZWZpbmVkKF9NU0NfVkVSKSkKICMgICAgaW5jbHVkZSA8c3RkZGVmLmg+CiAjICBlbmRpZgpAQCAtMjksNiArMjksMTAgQEAKICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKKyNpZmRlZiBaX1NPTE8KKyAgIHR5cGVkZWYgbG9uZyBwdHJkaWZmX3Q7ICAvKiBndWVzcyAtLSB3aWxsIGJlIGNhdWdodCBpZiBndWVzcyBpcyB3cm9uZyAqLworI2VuZGlmCisKICNpZm5kZWYgbG9jYWwKICMgIGRlZmluZSBsb2NhbCBzdGF0aWMKICNlbmRpZgpAQCAtNDAsMTMgKzQ0LDEzIEBACiB0eXBlZGVmIHVzaCBGQVIgdXNoZjsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOwogCi1leHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXTsgLyogaW5kZXhlZCBieSAyLXpsaWJfZXJyb3IgKi8KK2V4dGVybiB6X2NvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vycm9yICovCiAvKiAoc2l6ZSBnaXZlbiB0byBhdm9pZCBzaWxseSB3YXJuaW5ncyB3aXRoIFZpc3VhbCBDKyspICovCiAKICNkZWZpbmUgRVJSX01TRyhlcnIpIHpfZXJybXNnW1pfTkVFRF9ESUNULShlcnIpXQogCiAjZGVmaW5lIEVSUl9SRVRVUk4oc3RybSxlcnIpIFwKLSAgcmV0dXJuIChzdHJtLT5tc2cgPSAoY2hhciopRVJSX01TRyhlcnIpLCAoZXJyKSkKKyAgcmV0dXJuIChzdHJtLT5tc2cgPSBFUlJfTVNHKGVyciksIChlcnIpKQogLyogVG8gYmUgdXNlZCBvbmx5IHdoZW4gdGhlIHN0YXRlIGlzIGtub3duIHRvIGJlIHZhbGlkICovCiAKICAgICAgICAgLyogY29tbW9uIGNvbnN0YW50cyAqLwpAQCAtNzgsMTYgKzgyLDE4IEBACiAKICNpZiBkZWZpbmVkKE1TRE9TKSB8fCAoZGVmaW5lZChXSU5ET1dTKSAmJiAhZGVmaW5lZChXSU4zMikpCiAjICBkZWZpbmUgT1NfQ09ERSAgMHgwMAotIyAgaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgICAgaWYgKF9fU1REQ19fID09IDEpICYmIChkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVmaW5lZChfX0NPTVBBQ1RfXykpCi0gICAgICAgLyogQWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCAqLwotICAgICAgIHZvaWQgX0NkZWNsIGZhcmZyZWUoIHZvaWQgKmJsb2NrICk7Ci0gICAgICAgdm9pZCAqX0NkZWNsIGZhcm1hbGxvYyggdW5zaWduZWQgbG9uZyBuYnl0ZXMgKTsKLSMgICAgZWxzZQotIyAgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICBpZm5kZWYgWl9TT0xPCisjICAgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCisjICAgICAgaWYgKF9fU1REQ19fID09IDEpICYmIChkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVmaW5lZChfX0NPTVBBQ1RfXykpCisgICAgICAgICAvKiBBbGxvdyBjb21waWxhdGlvbiB3aXRoIEFOU0kga2V5d29yZHMgb25seSBlbmFibGVkICovCisgICAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOworICAgICAgICAgdm9pZCAqX0NkZWNsIGZhcm1hbGxvYyggdW5zaWduZWQgbG9uZyBuYnl0ZXMgKTsKKyMgICAgICBlbHNlCisjICAgICAgICBpbmNsdWRlIDxhbGxvYy5oPgorIyAgICAgIGVuZGlmCisjICAgIGVsc2UgLyogTVNDIG9yIERKR1BQICovCisjICAgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICAgIGVuZGlmCi0jICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLwotIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtMTA3LDE4ICsxMTMsMjAgQEAKIAogI2lmZGVmIE9TMgogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDYKLSMgIGlmZGVmIE1fSTg2CisjICBpZiBkZWZpbmVkKE1fSTg2KSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgZW5kaWYKICNlbmRpZgogCiAjaWYgZGVmaW5lZChNQUNPUykgfHwgZGVmaW5lZChUQVJHRVRfT1NfTUFDKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDcKLSMgIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKLSMgICAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCi0jICBlbHNlCi0jICAgIGlmbmRlZiBmZG9wZW4KLSMgICAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcworIyAgICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZkb3BlbiAqLworIyAgICBlbHNlCisjICAgICAgaWZuZGVmIGZkb3BlbgorIyAgICAgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICAgICAgZW5kaWYKICMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKQEAgLTE1MywxNCArMTYxLDE1IEBACiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKKyNpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoTVNET1MpCiAgICNwcmFnbWEgd2FybiAtODAwNAogICAjcHJhZ21hIHdhcm4gLTgwMDgKICAgI3ByYWdtYSB3YXJuIC04MDY2CiAjZW5kaWYKIAogLyogcHJvdmlkZSBwcm90b3R5cGVzIGZvciB0aGVzZSB3aGVuIGJ1aWxkaW5nIHpsaWIgd2l0aG91dCBMRlMgKi8KLSNpZiAhZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSB8fCBfTEZTNjRfTEFSR0VGSUxFLTAgPT0gMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgXAorICAgICghZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSB8fCBfTEZTNjRfTEFSR0VGSUxFLTAgPT0gMCkKICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOwogICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOwogI2VuZGlmCkBAIC0xNzcsNDIgKzE4Niw3IEBACiAKICAgICAgICAgIC8qIGZ1bmN0aW9ucyAqLwogCi0jaWYgZGVmaW5lZChTVERDOTkpIHx8IChkZWZpbmVkKF9fVFVSQk9DX18pICYmIF9fVFVSQk9DX18gPj0gMHg1NTApCi0jICBpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCi0jICBlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0NZR1dJTl9fKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgaWZkZWYgTVNET1MKLSAgICAgLyogdnNucHJpbnRmIG1heSBleGlzdCBvbiBzb21lIE1TLURPUyBjb21waWxlcnMgKERKR1BQPyksCi0gICAgICAgIGJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzdW1lIGl0IGRvZXNuJ3QuICovCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVuZGlmCi0jICBpZmRlZiBfX1RVUkJPQ19fCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVuZGlmCi0jICBpZmRlZiBXSU4zMgotICAgICAvKiBJbiBXaW4zMiwgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSBhcyB0aGUgIm5vbi1BTlNJIiBfdnNucHJpbnRmLiAqLwotIyAgICBpZiAhZGVmaW5lZCh2c25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKLSMgICAgICBpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKCBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE1MDAgKQotIyAgICAgICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZkZWYgX19TQVNDCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBWTVMKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChweXIpCisjaWYgZGVmaW5lZChweXIpIHx8IGRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIE5PX01FTUNQWQogI2VuZGlmCiAjaWYgZGVmaW5lZChTTUFMTF9NRURJVU0pICYmICFkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX1NDX18pCkBAIC0yNjEsMTQgKzIzNSwxOSBAQAogIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQogI2VuZGlmCiAKLQotdm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKSk7Ci12b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOworI2lmbmRlZiBaX1NPTE8KKyAgIHZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSkpOworICAgdm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpKTsKKyNlbmRpZgogCiAjZGVmaW5lIFpBTExPQyhzdHJtLCBpdGVtcywgc2l6ZSkgXAogICAgICAgICAgICAoKigoc3RybSktPnphbGxvYykpKChzdHJtKS0+b3BhcXVlLCAoaXRlbXMpLCAoc2l6ZSkpCiAjZGVmaW5lIFpGUkVFKHN0cm0sIGFkZHIpICAoKigoc3RybSktPnpmcmVlKSkoKHN0cm0pLT5vcGFxdWUsICh2b2lkcGYpKGFkZHIpKQogI2RlZmluZSBUUllfRlJFRShzLCBwKSB7aWYgKHApIFpGUkVFKHMsIHApO30KIAorLyogUmV2ZXJzZSB0aGUgYnl0ZXMgaW4gYSAzMi1iaXQgdmFsdWUgKi8KKyNkZWZpbmUgWlNXQVAzMihxKSAoKCgocSkgPj4gMjQpICYgMHhmZikgKyAoKChxKSA+PiA4KSAmIDB4ZmYwMCkgKyBcCisgICAgICAgICAgICAgICAgICAgICgoKHEpICYgMHhmZjAwKSA8PCA4KSArICgoKHEpICYgMHhmZikgPDwgMjQpKQorCiAjZW5kaWYgLyogWlVUSUxfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGlibW9kdWxlLmMgYi9Nb2R1bGVzL3psaWJtb2R1bGUuYwppbmRleCBlNzE4Nzk1Li5iZjhjOGU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3psaWJtb2R1bGUuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJ6bGliLmgiCiAKKwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgI2luY2x1ZGUgInB5dGhyZWFkLmgiCiAgICAgI2RlZmluZSBFTlRFUl9aTElCKG9iaikgXApAQCAtODAsNiArODEsMTMgQEAKICAgICAgICAgUHlFcnJfRm9ybWF0KFpsaWJFcnJvciwgIkVycm9yICVkICVzOiAlLjIwMHMiLCBlcnIsIG1zZywgem1zZyk7CiB9CiAKKy8qW2NsaW5pY10KK21vZHVsZSB6bGliCitjbGFzcyB6bGliLkNvbXByZXNzCitjbGFzcyB6bGliLkRlY29tcHJlc3MKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCiBQeURvY19TVFJWQVIoY29tcHJlc3NvYmpfX2RvY19fLAogImNvbXByZXNzb2JqKGxldmVsPS0xLCBtZXRob2Q9REVGTEFURUQsIHdiaXRzPTE1LCBtZW1sZXZlbD04LFxuIgogIiAgICAgICAgICAgIHN0cmF0ZWd5PVpfREVGQVVMVF9TVFJBVEVHWVssIHpkaWN0XSlcbiIKQEAgLTEzMiw0MCArMTQwLDExNSBAQAogICAgIH0KICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsICJVbmFibGUgdG8gYWxsb2NhdGUgbG9jayIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gc2VsZjsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbXByZXNzX19kb2NfXywKLSJjb21wcmVzcyhzdHJpbmdbLCBsZXZlbF0pIC0tIFJldHVybmVkIGNvbXByZXNzZWQgc3RyaW5nLlxuIgorc3RhdGljIHZvaWQqCitQeVpsaWJfTWFsbG9jKHZvaWRwZiBjdHgsIHVJbnQgaXRlbXMsIHVJbnQgc2l6ZSkKK3sKKyAgICBpZiAoaXRlbXMgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC8gc2l6ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogUHlNZW1fTWFsbG9jKCkgY2Fubm90IGJlIHVzZWQ6IHRoZSBHSUwgaXMgbm90IGhlbGQgd2hlbgorICAgICAgIGluZmxhdGUoKSBhbmQgZGVmbGF0ZSgpIGFyZSBjYWxsZWQgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitQeVpsaWJfRnJlZSh2b2lkcGYgY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCisvKltjbGluaWNdCisKK3psaWIuY29tcHJlc3MKKyAgICBieXRlczogUHlfYnVmZmVyCisgICAgICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuCisgICAgWworICAgIGxldmVsOiBpbnQKKyAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4KKyAgICBdCisgICAgLworCitSZXR1cm5zIGNvbXByZXNzZWQgc3RyaW5nLgorCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUih6bGliX2NvbXByZXNzX19kb2NfXywKKyJjb21wcmVzcyhieXRlcywgW2xldmVsXSlcbiIKKyJSZXR1cm5zIGNvbXByZXNzZWQgc3RyaW5nLlxuIgogIlxuIgotIk9wdGlvbmFsIGFyZyBsZXZlbCBpcyB0aGUgY29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4iKTsKKyIgIGJ5dGVzXG4iCisiICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuXG4iCisiICBsZXZlbFxuIgorIiAgICBDb21wcmVzc2lvbiBsZXZlbCwgaW4gMC05LiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgemxpYl9jb21wcmVzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2NvbXByZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfY29tcHJlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmJ5dGVzLCBpbnQgZ3JvdXBfcmlnaHRfMSwgaW50IGxldmVsKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ5dGVzOworICAgIGludCBncm91cF9yaWdodF8xID0gMDsKKyAgICBpbnQgbGV2ZWwgPSAwOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kjpjb21wcmVzcyIsICZieXRlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6Y29tcHJlc3MiLCAmYnl0ZXMsICZsZXZlbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInpsaWIuY29tcHJlc3MgcmVxdWlyZXMgMSB0byAyIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY29tcHJlc3NfaW1wbChtb2R1bGUsICZieXRlcywgZ3JvdXBfcmlnaHRfMSwgbGV2ZWwpOworCisgICAgLyogQ2xlYW51cCBmb3IgYnl0ZXMgKi8KKyAgICBpZiAoYnl0ZXMuYnVmKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ5dGVzKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpieXRlcywgaW50IGdyb3VwX3JpZ2h0XzEsIGludCBsZXZlbCkKKy8qW2NsaW5pYyBjaGVja3N1bTogZjQ5MDcwOGVmZjg0YmU2NTJiNWViZTdmZTYyMmFiNzNhYzEyYzg4OF0qLwogewogICAgIFB5T2JqZWN0ICpSZXR1cm5WYWwgPSBOVUxMOwotICAgIFB5X2J1ZmZlciBwaW5wdXQ7CiAgICAgQnl0ZSAqaW5wdXQsICpvdXRwdXQgPSBOVUxMOwogICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci0gICAgaW50IGxldmVsPVpfREVGQVVMVF9DT01QUkVTU0lPTiwgZXJyOworICAgIGludCBlcnI7CiAgICAgel9zdHJlYW0genN0OwogCi0gICAgLyogcmVxdWlyZSBQeXRob24gc3RyaW5nIG9iamVjdCwgb3B0aW9uYWwgJ2xldmVsJyBhcmcgKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGk6Y29tcHJlc3MiLCAmcGlucHV0LCAmbGV2ZWwpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIWdyb3VwX3JpZ2h0XzEpCisgICAgICAgIGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwogCi0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWJ5dGVzLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGxlbmd0aCA9IHBpbnB1dC5sZW47CisgICAgaW5wdXQgPSBieXRlcy0+YnVmOworICAgIGxlbmd0aCA9ICh1bnNpZ25lZCBpbnQpYnl0ZXMtPmxlbjsKIAogICAgIHpzdC5hdmFpbF9vdXQgPSBsZW5ndGggKyBsZW5ndGgvMTAwMCArIDEyICsgMTsKIAotICAgIG91dHB1dCA9IChCeXRlKiltYWxsb2MoenN0LmF2YWlsX291dCk7CisgICAgb3V0cHV0ID0gKEJ5dGUqKVB5TWVtX01hbGxvYyh6c3QuYXZhaWxfb3V0KTsKICAgICBpZiAob3V0cHV0ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSB0byBjb21wcmVzcyBkYXRhIik7CkBAIC0xNzUsOCArMjU4LDkgQEAKICAgICAvKiBQYXN0IHRoZSBwb2ludCBvZiBubyByZXR1cm4uICBGcm9tIGhlcmUgb24gb3V0LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQogICAgICAgIHdlIGNsZWFuIHVwIG1hbGxvY3MgJiBJTkNSRUZzLiAqLwogCi0gICAgenN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgenN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgenN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgenN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgenN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgenN0Lm5leHRfb3V0ID0gKEJ5dGUgKilvdXRwdXQ7CiAgICAgenN0Lm5leHRfaW4gPSAoQnl0ZSAqKWlucHV0OwogICAgIHpzdC5hdmFpbF9pbiA9IGxlbmd0aDsKQEAgLTIxNywxMiArMzAxLDUzIEBACiAgICAgICAgIHpsaWJfZXJyb3IoenN0LCBlcnIsICJ3aGlsZSBmaW5pc2hpbmcgY29tcHJlc3Npb24iKTsKIAogIGVycm9yOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7Ci0gICAgZnJlZShvdXRwdXQpOworICAgIFB5TWVtX0ZyZWUob3V0cHV0KTsKIAogICAgIHJldHVybiBSZXR1cm5WYWw7CiB9CiAKKy8qW3B5dGhvbl0KKworY2xhc3MgdWludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgY29udmVydGVyID0gJ3VpbnRfY29udmVydGVyJworCitjbGFzcyBjb21wb2JqZWN0X2NvbnZlcnRlcihzZWxmX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICJjb21wb2JqZWN0ICoiCisKK1tweXRob25dKi8KKy8qW3B5dGhvbiBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCitzdGF0aWMgaW50Cit1aW50X2NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwdHIpCit7CisgICAgbG9uZyB2YWw7CisgICAgdW5zaWduZWQgbG9uZyB1dmFsOworCisgICAgdmFsID0gUHlMb25nX0FzTG9uZyhvYmopOworICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICB1dmFsID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9iaik7CisgICAgICAgIGlmICh1dmFsID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHV2YWwgPiBVSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIGZvciBDIHVuc2lnbmVkIGludCIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICh2YWwgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdXZhbCA9ICh1bnNpZ25lZCBsb25nKXZhbDsKKyAgICB9CisKKyAgICAqKHVuc2lnbmVkIGludCAqKXB0ciA9IFB5X1NBRkVfRE9XTkNBU1QodXZhbCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKKyAgICByZXR1cm4gMTsKK30KKwogUHlEb2NfU1RSVkFSKGRlY29tcHJlc3NfX2RvY19fLAogImRlY29tcHJlc3Moc3RyaW5nWywgd2JpdHNbLCBidWZzaXplXV0pIC0tIFJldHVybiBkZWNvbXByZXNzZWQgc3RyaW5nLlxuIgogIlxuIgpAQCAtMjM4LDMyICszNjMsMzMgQEAKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwogICAgIGludCBlcnI7CiAgICAgaW50IHdzaXplPURFRl9XQklUUzsKLSAgICBQeV9zc2l6ZV90IHJfc3RybGVuPURFRkFVTFRBTExPQzsKKyAgICB1bnNpZ25lZCBpbnQgYnVmc2l6ZSA9IERFRkFVTFRBTExPQywgbmV3X2J1ZnNpemU7CiAgICAgel9zdHJlYW0genN0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpbjpkZWNvbXByZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpbnB1dCwgJndzaXplLCAmcl9zdHJsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8aU8mOmRlY29tcHJlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlucHV0LCAmd3NpemUsIHVpbnRfY29udmVydGVyLCAmYnVmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KXBpbnB1dC5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGxlbmd0aCA9IHBpbnB1dC5sZW47CisgICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClwaW5wdXQubGVuOwogCi0gICAgaWYgKHJfc3RybGVuIDw9IDApCi0gICAgICAgIHJfc3RybGVuID0gMTsKKyAgICBpZiAoYnVmc2l6ZSA9PSAwKQorICAgICAgICBidWZzaXplID0gMTsKIAogICAgIHpzdC5hdmFpbF9pbiA9IGxlbmd0aDsKLSAgICB6c3QuYXZhaWxfb3V0ID0gcl9zdHJsZW47CisgICAgenN0LmF2YWlsX291dCA9IGJ1ZnNpemU7CiAKLSAgICBpZiAoIShyZXN1bHRfc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByX3N0cmxlbikpKQorICAgIGlmICghKHJlc3VsdF9zdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1ZnNpemUpKSkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHpzdC56YWxsb2MgPSAoYWxsb2NfZnVuYylOVUxMOwotICAgIHpzdC56ZnJlZSA9IChmcmVlX2Z1bmMpWl9OVUxMOworICAgIHpzdC5vcGFxdWUgPSBOVUxMOworICAgIHpzdC56YWxsb2MgPSBQeVpsaWJfTWFsbG9jOworICAgIHpzdC56ZnJlZSA9IFB5WmxpYl9GcmVlOwogICAgIHpzdC5uZXh0X291dCA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0X3N0cik7CiAgICAgenN0Lm5leHRfaW4gPSAoQnl0ZSAqKWlucHV0OwogICAgIGVyciA9IGluZmxhdGVJbml0MigmenN0LCB3c2l6ZSk7CkBAIC0zMDMsMTQgKzQyOSwxOCBAQAogICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgICAgICAgIGNhc2UoWl9PSyk6CiAgICAgICAgICAgICAvKiBuZWVkIG1vcmUgbWVtb3J5ICovCi0gICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHRfc3RyLCByX3N0cmxlbiA8PCAxKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChidWZzaXplIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgICAgICBuZXdfYnVmc2l6ZSA9IGJ1ZnNpemUgPDwgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdfYnVmc2l6ZSA9IFVJTlRfTUFYOworICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0X3N0ciwgbmV3X2J1ZnNpemUpIDwgMCkgewogICAgICAgICAgICAgICAgIGluZmxhdGVFbmQoJnpzdCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHpzdC5uZXh0X291dCA9Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKSArIHJfc3RybGVuOwotICAgICAgICAgICAgenN0LmF2YWlsX291dCA9IHJfc3RybGVuOwotICAgICAgICAgICAgcl9zdHJsZW4gPSByX3N0cmxlbiA8PCAxOworICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0X3N0cikgKyBidWZzaXplOworICAgICAgICAgICAgenN0LmF2YWlsX291dCA9IGJ1ZnNpemU7CisgICAgICAgICAgICBidWZzaXplID0gbmV3X2J1ZnNpemU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGluZmxhdGVFbmQoJnpzdCk7CkBAIC0zNDAsNyArNDcwLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVpsaWJfY29tcHJlc3NvYmooUHlPYmplY3QgKnNlbGZwdHIsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIGNvbXBvYmplY3QgKnNlbGY7CisgICAgY29tcG9iamVjdCAqc2VsZiA9IE5VTEw7CiAgICAgaW50IGxldmVsPVpfREVGQVVMVF9DT01QUkVTU0lPTiwgbWV0aG9kPURFRkxBVEVEOwogICAgIGludCB3Yml0cz1NQVhfV0JJVFMsIG1lbUxldmVsPURFRl9NRU1fTEVWRUwsIHN0cmF0ZWd5PTAsIGVycjsKICAgICBQeV9idWZmZXIgemRpY3Q7CkBAIC0zNTMsMTEgKzQ4MywxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1MZXZlbCwgJnN0cmF0ZWd5LCAmemRpY3QpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmICh6ZGljdC5idWYgIT0gTlVMTCAmJiAoc2l6ZV90KXpkaWN0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInpkaWN0IGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCiAgICAgc2VsZiA9IG5ld2NvbXBvYmplY3QoJkNvbXB0eXBlKTsKICAgICBpZiAoc2VsZj09TlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBzZWxmLT56c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICBzZWxmLT56c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICBzZWxmLT56c3Qub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT56c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICBzZWxmLT56c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IE5VTEw7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICBlcnIgPSBkZWZsYXRlSW5pdDIoJnNlbGYtPnpzdCwgbGV2ZWwsIG1ldGhvZCwgd2JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSk7CkBAIC0zNjcsNyArNTA0LDggQEAKICAgICAgICAgaWYgKHpkaWN0LmJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnIgPSBkZWZsYXRlU2V0RGljdGlvbmFyeSgmc2VsZi0+enN0LCB6ZGljdC5idWYsIHpkaWN0Lmxlbik7CisgICAgICAgICAgICBlcnIgPSBkZWZsYXRlU2V0RGljdGlvbmFyeSgmc2VsZi0+enN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemRpY3QuYnVmLCAodW5zaWduZWQgaW50KXpkaWN0Lmxlbik7CiAgICAgICAgICAgICBzd2l0Y2ggKGVycikgewogICAgICAgICAgICAgY2FzZSAoWl9PSyk6CiAgICAgICAgICAgICAgICAgZ290byBzdWNjZXNzOwpAQCAtNDIwLDggKzU1OCw5IEBACiAgICAgc2VsZiA9IG5ld2NvbXBvYmplY3QoJkRlY29tcHR5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICBzZWxmLT56c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICBzZWxmLT56c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICBzZWxmLT56c3Qub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT56c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICBzZWxmLT56c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IE5VTEw7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICBpZiAoemRpY3QgIT0gTlVMTCkgewpAQCAtNDkwLDcgKzYyOSw3IEBACiB7CiAgICAgaW50IGVycjsKICAgICB1bnNpZ25lZCBpbnQgaW5wbGVuOwotICAgIFB5X3NzaXplX3QgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZBVUxUQUxMT0MsIG5ld19sZW5ndGg7CiAgICAgUHlPYmplY3QgKlJldFZhbCA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIHBpbnB1dDsKICAgICBCeXRlICppbnB1dDsKQEAgLTQ5OCwxMyArNjM3LDEzIEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmNvbXByZXNzIiwgJnBpbnB1dCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CiAgICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7CiAgICAgfQogICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBpbnBsZW4gPSBwaW5wdXQubGVuOworICAgIGlucGxlbiA9ICh1bnNpZ25lZCBpbnQpcGlucHV0LmxlbjsKIAogICAgIGlmICghKFJldFZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuZ3RoKSkpCiAgICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7CkBAIC01MjQsMTUgKzY2MywxOCBAQAogICAgIC8qIHdoaWxlIFpfT0sgYW5kIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0LAogICAgICAgIHNvIGV4dGVuZCB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdHJ5IGFnYWluICovCiAgICAgd2hpbGUgKGVyciA9PSBaX09LICYmIHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCkgewotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIGxlbmd0aCA8PCAxKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHNlbGYtPnpzdC5uZXh0X291dCA9CiAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCkgKyBsZW5ndGg7CiAgICAgICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7Ci0gICAgICAgIGxlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBsZW5ndGggPSBuZXdfbGVuZ3RoOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIFpfTk9fRkxVU0gpOwpAQCAtNTUwLDggKzY5Miw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgIH0KIAogIGVycm9yOgpAQCAtNTczLDcgKzcxNCw3IEBACiAgICAgICAgICAgICBQeV9zc2l6ZV90IG9sZF9zaXplID0gUHlCeXRlc19HRVRfU0laRShzZWxmLT51bnVzZWRfZGF0YSk7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IG5ld19zaXplOwogICAgICAgICAgICAgUHlPYmplY3QgKm5ld19kYXRhOwotICAgICAgICAgICAgaWYgKHNlbGYtPnpzdC5hdmFpbF9pbiA+IFBZX1NTSVpFX1RfTUFYIC0gb2xkX3NpemUpIHsKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KXNlbGYtPnpzdC5hdmFpbF9pbiA+IChzaXplX3QpVUlOVF9NQVggLSAoc2l6ZV90KW9sZF9zaXplKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC02MDQsNTUgKzc0NSw5NSBAQAogICAgIHJldHVybiAwOwogfQogCi1QeURvY19TVFJWQVIoZGVjb21wX2RlY29tcHJlc3NfX2RvY19fLAotImRlY29tcHJlc3MoZGF0YSwgbWF4X2xlbmd0aCkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZFxuIgotInZlcnNpb24gb2YgdGhlIGRhdGEuXG4iCisvKltjbGluaWNdCisKK3psaWIuRGVjb21wcmVzcy5kZWNvbXByZXNzCisKKyAgICBzZWxmOiBjb21wb2JqZWN0CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAgICAgVGhlIGJpbmFyeSBkYXRhIHRvIGRlY29tcHJlc3MuCisgICAgbWF4X2xlbmd0aDogdWludCA9IDAKKyAgICAgICAgVGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEuCisgICAgICAgIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbgorICAgICAgICB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS4KKyAgICAvCisKK1JldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YS4KKworQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzb21lIG9mIHRoZSBpbnB1dCBkYXRhIG1heSBzdGlsbCBiZSBzdG9yZWQgaW4KK2ludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCitDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfX2RvY19fLAorImRlY29tcHJlc3MoZGF0YSwgbWF4X2xlbmd0aD0wKVxuIgorIlJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YS5cbiIKKyJcbiIKKyIgIGRhdGFcbiIKKyIgICAgVGhlIGJpbmFyeSBkYXRhIHRvIGRlY29tcHJlc3MuXG4iCisiICBtYXhfbGVuZ3RoXG4iCisiICAgIFRoZSBtYXhpbXVtIGFsbG93YWJsZSBsZW5ndGggb2YgdGhlIGRlY29tcHJlc3NlZCBkYXRhLlxuIgorIiAgICBVbmNvbnN1bWVkIGlucHV0IGRhdGEgd2lsbCBiZSBzdG9yZWQgaW5cbiIKKyIgICAgdGhlIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUuXG4iCiAiXG4iCiAiQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzb21lIG9mIHRoZSBpbnB1dCBkYXRhIG1heSBzdGlsbCBiZSBzdG9yZWQgaW5cbiIKICJpbnRlcm5hbCBidWZmZXJzIGZvciBsYXRlciBwcm9jZXNzaW5nLlxuIgotIkNhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuXG4iCi0iSWYgdGhlIG1heF9sZW5ndGggcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZVxuIgotIm5vIGxvbmdlciB0aGFuIG1heF9sZW5ndGguICBVbmNvbnN1bWVkIGlucHV0IGRhdGEgd2lsbCBiZSBzdG9yZWQgaW5cbiIKLSJ0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS4iKTsKKyJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworCisjZGVmaW5lIFpMSUJfREVDT01QUkVTU19ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfb2JqZGVjb21wcmVzcyhjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWF4X2xlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGVyciwgbWF4X2xlbmd0aCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGlucGxlbjsKLSAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGgsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgbWF4X2xlbmd0aCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfE8mOmRlY29tcHJlc3MiLAorICAgICAgICAmZGF0YSwgdWludF9jb252ZXJ0ZXIsICZtYXhfbGVuZ3RoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX2ltcGwoKGNvbXBvYmplY3QgKilzZWxmLCAmZGF0YSwgbWF4X2xlbmd0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLmJ1ZikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IG1heF9sZW5ndGgpCisvKltjbGluaWMgY2hlY2tzdW06IDM1OTk2OTg5NDhmNWE3MTJmNWE4MzA5NDkxNjcxY2MyY2U5NjlkMmNdKi8KK3sKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBvbGRfbGVuZ3RoLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CiAgICAgUHlPYmplY3QgKlJldFZhbCA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIHBpbnB1dDsKLSAgICBCeXRlICppbnB1dDsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8aTpkZWNvbXByZXNzIiwgJnBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heF9sZW5ndGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpZGF0YS0+bGVuID4gVUlOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7Ci0gICAgfQotICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBpbnBsZW4gPSBwaW5wdXQubGVuOwotICAgIGlmIChtYXhfbGVuZ3RoIDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXhfbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogbGltaXQgYW1vdW50IG9mIGRhdGEgYWxsb2NhdGVkIHRvIG1heF9sZW5ndGggKi8KICAgICBpZiAobWF4X2xlbmd0aCAmJiBsZW5ndGggPiBtYXhfbGVuZ3RoKQogICAgICAgICBsZW5ndGggPSBtYXhfbGVuZ3RoOwogICAgIGlmICghKFJldFZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuZ3RoKSkpCi0gICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAogICAgIHN0YXJ0X3RvdGFsX291dCA9IHNlbGYtPnpzdC50b3RhbF9vdXQ7Ci0gICAgc2VsZi0+enN0LmF2YWlsX2luID0gaW5wbGVuOwotICAgIHNlbGYtPnpzdC5uZXh0X2luID0gaW5wdXQ7CisgICAgc2VsZi0+enN0LmF2YWlsX2luID0gKHVuc2lnbmVkIGludClkYXRhLT5sZW47CisgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBkYXRhLT5idWY7CiAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCk7CiAKQEAgLTY2NywxMiArODQ4LDIxIEBACiAgICAgICAgICAgICBSZXRWYWwgPSBOVUxMOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHNlbGYtPnpzdCksIHpkaWN0X2J1Zi5idWYsIHpkaWN0X2J1Zi5sZW4pOworCisgICAgICAgIGlmICgoc2l6ZV90KXpkaWN0X2J1Zi5sZW4gPiBVSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBsZW5ndGggZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3RfYnVmKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJihzZWxmLT56c3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZGljdF9idWYuYnVmLCAodW5zaWduZWQgaW50KXpkaWN0X2J1Zi5sZW4pOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ6ZGljdF9idWYpOwogICAgICAgICBpZiAoZXJyICE9IFpfT0spIHsKICAgICAgICAgICAgIHpsaWJfZXJyb3Ioc2VsZi0+enN0LCBlcnIsICJ3aGlsZSBkZWNvbXByZXNzaW5nIGRhdGEiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIC8qIFJlcGVhdCB0aGUgY2FsbCB0byBpbmZsYXRlLiAqLwpAQCAtNjk4LDggKzg4OCw3IEBACiAgICAgICAgICAgICBsZW5ndGggPSBtYXhfbGVuZ3RoOwogCiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHNlbGYtPnpzdC5uZXh0X291dCA9CkBAIC03MzMsMTQgKzkyMiwxMSBAQAogICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgIH0KIAogIGVycm9yOgogICAgIExFQVZFX1pMSUIoc2VsZik7Ci0gZXJyb3Jfb3V0ZXI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gUmV0VmFsOwogfQogCkBAIC03NTUsNyArOTQxLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVpsaWJfZmx1c2goY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGVyciwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IERFRkFVTFRBTExPQywgbmV3X2xlbmd0aDsKICAgICBQeU9iamVjdCAqUmV0VmFsOwogICAgIGludCBmbHVzaG1vZGUgPSBaX0ZJTklTSDsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKQEAgLTc4NiwxNSArOTczLDE4IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgZmx1c2htb2RlKTsKQEAgLTgyNyw4ICsxMDE3LDcgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKICBlcnJvcjoKQEAgLTgzOCwxMSArMTAyNywyNSBAQAogfQogCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLVB5RG9jX1NUUlZBUihjb21wX2NvcHlfX2RvY19fLAotImNvcHkoKSAtLSBSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKy8qW2NsaW5pY10KK3psaWIuQ29tcHJlc3MuY29weQorCisgICAgc2VsZjogY29tcG9iamVjdAorCitSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUih6bGliX0NvbXByZXNzX2NvcHlfX2RvY19fLAorImNvcHkoKVxuIgorIlJldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pemxpYl9Db21wcmVzc19jb3B5LCBNRVRIX05PQVJHUywgemxpYl9Db21wcmVzc19jb3B5X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY29weShjb21wb2JqZWN0ICpzZWxmKQoremxpYl9Db21wcmVzc19jb3B5KGNvbXBvYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IDBiMzdjMDdmOGYyN2RlYjdkNDc2OTk1MWZiZWNmNjAwYTEwMDZlZjhdKi8KIHsKICAgICBjb21wb2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIGludCBlcnI7CkBAIC05NTgsMjQgKzExNjEsMzEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVpsaWJfdW5mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgZXJyLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGQVVMVEFMTE9DLCBuZXdfbGVuZ3RoOwogICAgIFB5T2JqZWN0ICogcmV0dmFsID0gTlVMTDsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmZsdXNoIiwgJmxlbmd0aCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6Zmx1c2giLCB1aW50X2NvbnZlcnRlciwgJmxlbmd0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChsZW5ndGggPD0gMCkgeworICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKwogICAgIGlmICghKHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuZ3RoKSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAKICAgICBFTlRFUl9aTElCKHNlbGYpOwogCisgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKKwogICAgIHN0YXJ0X3RvdGFsX291dCA9IHNlbGYtPnpzdC50b3RhbF9vdXQ7Ci0gICAgc2VsZi0+enN0LmF2YWlsX2luID0gUHlCeXRlc19HRVRfU0laRShzZWxmLT51bmNvbnN1bWVkX3RhaWwpOworICAgIC8qIHNhdmVfdW5jb25zdW1lZF9pbnB1dCgpIGVuc3VyZXMgdGhhdCB1bmNvbnN1bWVkX3RhaWwgbGVuZ3RoIGlzIGxlc3NlcgorICAgICAgIG9yIGVxdWFsIHRoYW4gVUlOVF9NQVggKi8KKyAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBQeV9TQUZFX0RPV05DQVNUKHNpemUsIFB5X3NzaXplX3QsIHVuc2lnbmVkIGludCk7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CiAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJldHZhbCk7CkBAIC05ODcsMTQgKzExOTcsMTcgQEAKICAgICAvKiB3aGlsZSBaX09LIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCwKICAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogICAgIHdoaWxlICgoZXJyID09IFpfT0sgfHwgZXJyID09IFpfQlVGX0VSUk9SKSAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmV0dmFsLCBsZW5ndGggPDwgMSkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJldHZhbCkgKyBsZW5ndGg7CiAgICAgICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7Ci0gICAgICAgIGxlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBsZW5ndGggPSBuZXdfbGVuZ3RoOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJyID0gaW5mbGF0ZSgmKHNlbGYtPnpzdCksIFpfRklOSVNIKTsKQEAgLTEwMjEsOCArMTIzNCw3IEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmV0dmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CiAgICAgfQogCiBlcnJvcjoKQEAgLTEwMzksMTYgKzEyNTEsMTQgQEAKICAgICB7ImZsdXNoIiwgKGJpbmFyeWZ1bmMpUHlabGliX2ZsdXNoLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgICAgICAgIGNvbXBfZmx1c2hfX2RvY19ffSwKICNpZmRlZiBIQVZFX1pMSUJfQ09QWQotICAgIHsiY29weSIsICAoUHlDRnVuY3Rpb24pUHlabGliX2NvcHksIE1FVEhfTk9BUkdTLAotICAgICAgICAgICAgICBjb21wX2NvcHlfX2RvY19ffSwKKyAgICBaTElCX0NPTVBSRVNTX0NPUFlfTUVUSE9EREVGCiAjZW5kaWYKICAgICB7TlVMTCwgTlVMTH0KIH07CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBEZWNvbXBfbWV0aG9kc1tdID0KIHsKLSAgICB7ImRlY29tcHJlc3MiLCAoYmluYXJ5ZnVuYylQeVpsaWJfb2JqZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICAgICAgIGRlY29tcF9kZWNvbXByZXNzX19kb2NfX30sCisgICAgWkxJQl9ERUNPTVBSRVNTX0RFQ09NUFJFU1NfTUVUSE9EREVGCiAgICAgeyJmbHVzaCIsIChiaW5hcnlmdW5jKVB5WmxpYl91bmZsdXNoLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgICAgICAgIGRlY29tcF9mbHVzaF9fZG9jX199LAogI2lmZGVmIEhBVkVfWkxJQl9DT1BZCkBAIC0xMDg5LDE1ICsxMjk5LDE1IEBACiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gYWRsZXIzMigpIHRha2VzCiAgICAgICAgICAgIGxlbmd0aCBhcyBhbiB1bnNpZ25lZCBpbnQsIHdoaWNoIG1heSBiZSBuYXJyb3dlciB0aGFuIFB5X3NzaXplX3QuICovCi0gICAgICAgIHdoaWxlIChsZW4gPiAoc2l6ZV90KSBVSU5UX01BWCkgeworICAgICAgICB3aGlsZSAoKHNpemVfdClsZW4gPiBVSU5UX01BWCkgewogICAgICAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgYnVmLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBidWYgKz0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgICAgICBsZW4gLT0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgIH0KLSAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgYnVmLCBsZW4pOworICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBidWYsICh1bnNpZ25lZCBpbnQpbGVuKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9IGVsc2UgewotICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBwYnVmLmJ1ZiwgKHVuc2lnbmVkIGludClwYnVmLmxlbik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhhZGxlcjMydmFsICYgMHhmZmZmZmZmZlUpOwpAQCAtMTEyNywxNSArMTMzNywxNSBAQAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIC8qIEF2b2lkIHRydW5jYXRpb24gb2YgbGVuZ3RoIGZvciB2ZXJ5IGxhcmdlIGJ1ZmZlcnMuIGNyYzMyKCkgdGFrZXMKICAgICAgICAgICAgbGVuZ3RoIGFzIGFuIHVuc2lnbmVkIGludCwgd2hpY2ggbWF5IGJlIG5hcnJvd2VyIHRoYW4gUHlfc3NpemVfdC4gKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+IChzaXplX3QpIFVJTlRfTUFYKSB7CisgICAgICAgIHdoaWxlICgoc2l6ZV90KWxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBjcmMzMnZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsIFVJTlRfTUFYKTsKICAgICAgICAgICAgIGJ1ZiArPSAoc2l6ZV90KSBVSU5UX01BWDsKICAgICAgICAgICAgIGxlbiAtPSAoc2l6ZV90KSBVSU5UX01BWDsKICAgICAgICAgfQotICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgbGVuKTsKKyAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsICh1bnNpZ25lZCBpbnQpbGVuKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9IGVsc2UgewotICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIHBidWYuYnVmLCBwYnVmLmxlbik7CisgICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgcGJ1Zi5idWYsICh1bnNpZ25lZCBpbnQpcGJ1Zi5sZW4pOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVKTsKQEAgLTExNDYsOCArMTM1Niw3IEBACiB7CiAgICAgeyJhZGxlcjMyIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9hZGxlcjMyLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgICAgICAgICAgYWRsZXIzMl9fZG9jX199LAotICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pUHlabGliX2NvbXByZXNzLCAgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICAgICBjb21wcmVzc19fZG9jX199LAorICAgIFpMSUJfQ09NUFJFU1NfTUVUSE9EREVGCiAgICAgeyJjb21wcmVzc29iaiIsIChQeUNGdW5jdGlvbilQeVpsaWJfY29tcHJlc3NvYmosIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ial9fZG9jX199LAogICAgIHsiY3JjMzIiLCAoUHlDRnVuY3Rpb24pUHlabGliX2NyYzMyLCBNRVRIX1ZBUkFSR1MsCkBAIC0xMjY2LDIwICsxNDc1LDIwIEBACiAgICAgICAgIFB5X0lOQ1JFRihabGliRXJyb3IpOwogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgWmxpYkVycm9yKTsKICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1BWF9XQklUUyIsIE1BWF9XQklUUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRkxBVEVEIiwgREVGTEFURUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfTUVNX0xFVkVMIiwgREVGX01FTV9MRVZFTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9TUEVFRCIsIFpfQkVTVF9TUEVFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9DT01QUkVTU0lPTiIsIFpfQkVTVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9DT01QUkVTU0lPTiIsIFpfREVGQVVMVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRklMVEVSRUQiLCBaX0ZJTFRFUkVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9IVUZGTUFOX09OTFkiLCBaX0hVRkZNQU5fT05MWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9TVFJBVEVHWSIsIFpfREVGQVVMVF9TVFJBVEVHWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUFYX1dCSVRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZMQVRFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX01FTV9MRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9CRVNUX1NQRUVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0JFU1RfQ09NUFJFU1NJT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9GSUxURVJFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9IVUZGTUFOX09OTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfREVGQVVMVF9TVFJBVEVHWSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9GSU5JU0giLCBaX0ZJTklTSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfTk9fRkxVU0giLCBaX05PX0ZMVVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9TWU5DX0ZMVVNIIiwgWl9TWU5DX0ZMVVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9GVUxMX0ZMVVNIIiwgWl9GVUxMX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZJTklTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9OT19GTFVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9TWU5DX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZVTExfRkxVU0gpOwogCiAgICAgdmVyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoWkxJQl9WRVJTSU9OKTsKICAgICBpZiAodmVyICE9IE5VTEwpCmRpZmYgLS1naXQgYS9PYmplY3RzL2Fic3RyYWN0LmMgYi9PYmplY3RzL2Fic3RyYWN0LmMKaW5kZXggMTMwOWM1MS4uOTFkZjVkYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9hYnN0cmFjdC5jCisrKyBiL09iamVjdHMvYWJzdHJhY3QuYwpAQCAtNjQsNDkgKzY0LDcyIEBACiB9CiAjZGVmaW5lIFB5T2JqZWN0X0xlbmd0aCBQeU9iamVjdF9TaXplCiAKK2ludAorX1B5T2JqZWN0X0hhc0xlbihQeU9iamVjdCAqbykgeworICAgIHJldHVybiAoUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2UgJiYgUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2UtPnNxX2xlbmd0aCkgfHwKKyAgICAgICAgKFB5X1RZUEUobyktPnRwX2FzX21hcHBpbmcgJiYgUHlfVFlQRShvKS0+dHBfYXNfbWFwcGluZy0+bXBfbGVuZ3RoKTsKK30KIAogLyogVGhlIGxlbmd0aCBoaW50IGZ1bmN0aW9uIHJldHVybnMgYSBub24tbmVnYXRpdmUgdmFsdWUgZnJvbSBvLl9fbGVuX18oKQotICAgb3Igby5fX2xlbmd0aF9oaW50X18oKS4gIElmIHRob3NlIG1ldGhvZHMgYXJlbid0IGZvdW5kIG9yIHJldHVybiBhIG5lZ2F0aXZlCi0gICB2YWx1ZSwgdGhlbiB0aGUgZGVmYXVsdHZhbHVlIGlzIHJldHVybmVkLiAgSWYgb25lIG9mIHRoZSBjYWxscyBmYWlscywKKyAgIG9yIG8uX19sZW5ndGhfaGludF9fKCkuIElmIHRob3NlIG1ldGhvZHMgYXJlbid0IGZvdW5kIHRoZSBkZWZhdWx0dmFsdWUgaXMKKyAgIHJldHVybmVkLiAgSWYgb25lIG9mIHRoZSBjYWxscyBmYWlscyB3aXRoIGFuIGV4Y2VwdGlvbiBvdGhlciB0aGFuIFR5cGVFcnJvcgogICAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xLgogKi8KIAogUHlfc3NpemVfdAotX1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdHZhbHVlKQorUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUpCiB7CisgICAgUHlPYmplY3QgKmhpbnQsICpyZXN1bHQ7CisgICAgUHlfc3NpemVfdCByZXM7CiAgICAgX1B5X0lERU5USUZJRVIoX19sZW5ndGhfaGludF9fKTsKLSAgICBQeU9iamVjdCAqcm8sICpoaW50bWV0aDsKLSAgICBQeV9zc2l6ZV90IHJ2OwotCi0gICAgLyogdHJ5IG8uX19sZW5fXygpICovCi0gICAgcnYgPSBQeU9iamVjdF9TaXplKG8pOwotICAgIGlmIChydiA+PSAwKQotICAgICAgICByZXR1cm4gcnY7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgaWYgKF9QeU9iamVjdF9IYXNMZW4obykpIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfTGVuZ3RoKG8pOworICAgICAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CiAgICAgfQotCi0gICAgLyogdHJ5IG8uX19sZW5ndGhfaGludF9fKCkgKi8KLSAgICBoaW50bWV0aCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG8sICZQeUlkX19fbGVuZ3RoX2hpbnRfXyk7Ci0gICAgaWYgKGhpbnRtZXRoID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgaGludCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG8sICZQeUlkX19fbGVuZ3RoX2hpbnRfXyk7CisgICAgaWYgKGhpbnQgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOwotICAgIH0KLSAgICBybyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoaGludG1ldGgsIE5VTEwpOwotICAgIFB5X0RFQ1JFRihoaW50bWV0aCk7Ci0gICAgaWYgKHJvID09IE5VTEwpIHsKLSAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKICAgICB9Ci0gICAgcnYgPSBQeUxvbmdfQ2hlY2socm8pID8gUHlMb25nX0FzU3NpemVfdChybykgOiBkZWZhdWx0dmFsdWU7Ci0gICAgUHlfREVDUkVGKHJvKTsKLSAgICByZXR1cm4gcnY7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhoaW50LCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoaGludCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVzdWx0ID09IFB5X05vdEltcGxlbWVudGVkKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOworICAgIH0KKyAgICBpZiAoIVB5TG9uZ19DaGVjayhyZXN1bHQpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJfX2xlbmd0aF9oaW50X18gbXVzdCBiZSBhbiBpbnRlZ2VyLCBub3QgJS4xMDBzIiwKKyAgICAgICAgICAgIFB5X1RZUEUocmVzdWx0KS0+dHBfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJlcyA9IFB5TG9uZ19Bc1NzaXplX3QocmVzdWx0KTsKKyAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJfX2xlbmd0aF9oaW50X18oKSBzaG91bGQgcmV0dXJuID49IDAiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gcmVzOwogfQogCiBQeU9iamVjdCAqCkBAIC0yMDIsNyArMjI1LDcgQEAKIH0KIAogaW50Ci1QeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKm9rZXk7CiAgICAgaW50IHJldDsKQEAgLTEyMTcsNyArMTI0MCw3IEBACiAgIHRvIGJlIGFuIGludCBvciBoYXZlIGFuIF9faW50X18gbWV0aG9kLiBTdGVhbHMgaW50ZWdyYWwncwogICByZWZlcmVuY2UuIGVycm9yX2Zvcm1hdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBUeXBlRXJyb3IgaWYgaW50ZWdyYWwKICAgaXNuJ3QgYWN0dWFsbHkgYW4gSW50ZWdyYWwgaW5zdGFuY2UuIGVycm9yX2Zvcm1hdCBzaG91bGQgYmUgYSBmb3JtYXQgc3RyaW5nCi0gIHRoYXQgY2FuIGFjY2VwdCBhIGNoYXIqIG5hbWluZyBpbnRlZ3JhbCdzIHR5cGUuIAorICB0aGF0IGNhbiBhY2NlcHQgYSBjaGFyKiBuYW1pbmcgaW50ZWdyYWwncyB0eXBlLgogKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBjb252ZXJ0X2ludGVncmFsX3RvX2ludChQeU9iamVjdCAqaW50ZWdyYWwsIGNvbnN0IGNoYXIgKmVycm9yX2Zvcm1hdCkKQEAgLTEyMzYsNyArMTI1OSw3IEBACiAgICAgfQogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsIGVycm9yX2Zvcm1hdCwgUHlfVFlQRShpbnRlZ3JhbCktPnRwX25hbWUpOwogICAgIFB5X0RFQ1JFRihpbnRlZ3JhbCk7Ci0gICAgcmV0dXJuIE5VTEw7ICAgIAorICAgIHJldHVybiBOVUxMOwogfQogCiAKQEAgLTE2NjksNyArMTY5Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogR3Vlc3MgcmVzdWx0IHNpemUgYW5kIGFsbG9jYXRlIHNwYWNlLiAqLwotICAgIG4gPSBfUHlPYmplY3RfTGVuZ3RoSGludCh2LCAxMCk7CisgICAgbiA9IFB5T2JqZWN0X0xlbmd0aEhpbnQodiwgMTApOwogICAgIGlmIChuID09IC0xKQogICAgICAgICBnb3RvIEZhaWw7CiAgICAgcmVzdWx0ID0gUHlUdXBsZV9OZXcobik7CkBAIC0xOTI5LDcgKzE5NTIsNyBAQAogI2RlZmluZSBQeU1hcHBpbmdfTGVuZ3RoIFB5TWFwcGluZ19TaXplCiAKIFB5T2JqZWN0ICoKLVB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogewogICAgIFB5T2JqZWN0ICpva2V5LCAqcjsKIApAQCAtMTk0NSw3ICsxOTY4LDcgQEAKIH0KIAogaW50Ci1QeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5LCBQeU9iamVjdCAqdmFsdWUpCitQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5LCBQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgUHlPYmplY3QgKm9rZXk7CiAgICAgaW50IHI7CkBAIC0xOTY0LDcgKzE5ODcsNyBAQAogfQogCiBpbnQKLVB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKK1B5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqdjsKIApAQCAtMjA2MywxMCArMjA4NiwxNSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHJlc3VsdCA9ICgqY2FsbCkoZnVuYywgYXJnLCBrdyk7CiAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICJOVUxMIHJlc3VsdCB3aXRob3V0IGVycm9yIGluIFB5T2JqZWN0X0NhbGwiKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICInJS4yMDBzJyBvYmplY3QgaXMgbm90IGNhbGxhYmxlIiwKQEAgLTIxMDEsNyArMjEyOSw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNoYXIgKmZvcm1hdCwgLi4uKQorUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqYXJnczsKQEAgLTIxMTYsMTIgKzIxNDQsMTQgQEAKICAgICB9CiAgICAgZWxzZQogICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gY2FsbF9mdW5jdGlvbl90YWlsKGNhbGxhYmxlLCBhcmdzKTsKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVChQeU9iamVjdCAqY2FsbGFibGUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVChQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmFyZ3M7CkBAIC0yMTQxLDcgKzIxNzEsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCi1jYWxsbWV0aG9kKFB5T2JqZWN0KiBmdW5jLCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEsIGludCBpc19zaXplX3QpCitjYWxsbWV0aG9kKFB5T2JqZWN0KiBmdW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEsIGludCBpc19zaXplX3QpCiB7CiAgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmFyZ3M7CkBAIC0yMTcwLDcgKzIyMDAsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjaGFyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK1B5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSBOVUxMOwpAQCAtMjE5MSw3ICsyMjIxLDggQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSBOVUxMOwpAQCAtMjIxMiw3ICsyMjQzLDggQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sIGNoYXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIyMzIsNyArMjI2NCw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kSWRfU2l6ZVQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kSWRfU2l6ZVQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIzMDIsNyArMjMzNSw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwKK19QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwKICAgICAgICAgc3RydWN0IF9QeV9JZGVudGlmaWVyICpuYW1lLCAuLi4pCiB7CiAgICAgUHlPYmplY3QgKmFyZ3MsICp0bXA7CkBAIC0yNjc3LDggKzI3MTAsOCBAQAogICogTlVMTCB0ZXJtaW5hdGVkIHN0cmluZyBwb2ludGVycyB3aXRoIGEgTlVMTCBjaGFyKiB0ZXJtaW5hdGluZyB0aGUgYXJyYXkuCiAgKiAoaWU6IGFuIGFyZ3Ygb3IgZW52IGxpc3QpCiAgKgotICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJldHVybmVkIGxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYygpIGFuZCBNVVNUCi0gKiBiZSBmcmVlZCBieSB0aGUgY2FsbGVyIHVzaW5nIGEgZnJlZSgpIGxvb3Agb3IgX1B5X0ZyZWVDaGFyUEFycmF5KCkuCisgKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgcmV0dXJuZWQgbGlzdCBpcyBhbGxvY2F0ZWQgdXNpbmcgUHlNZW1fTWFsbG9jKCkKKyAqIGFuZCBNVVNUIGJlIGZyZWVkIGJ5IF9QeV9GcmVlQ2hhclBBcnJheSgpLgogICovCiBjaGFyICpjb25zdCAqCiBfUHlTZXF1ZW5jZV9CeXRlc1RvQ2hhcnBBcnJheShQeU9iamVjdCogc2VsZikKQEAgLTI2ODYsNiArMjcxOSw3IEBACiAgICAgY2hhciAqKmFycmF5OwogICAgIFB5X3NzaXplX3QgaSwgYXJnYzsKICAgICBQeU9iamVjdCAqaXRlbSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOwogCiAgICAgYXJnYyA9IFB5U2VxdWVuY2VfU2l6ZShzZWxmKTsKICAgICBpZiAoYXJnYyA9PSAtMSkKQEAgLTI2OTgsNyArMjczMiw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGFycmF5ID0gbWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CisgICAgYXJyYXkgPSBQeU1lbV9NYWxsb2MoKGFyZ2MgKyAxKSAqIHNpemVvZihjaGFyICopKTsKICAgICBpZiAoYXJyYXkgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI3MTcsMTEgKzI3NTEsMTMgQEAKICAgICAgICAgICAgIGFycmF5W2ldID0gTlVMTDsKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQotICAgICAgICBhcnJheVtpXSA9IHN0cmR1cChkYXRhKTsKKyAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoaXRlbSkgKyAxOworICAgICAgICBhcnJheVtpXSA9IFB5TWVtX01hbGxvYyhzaXplKTsKICAgICAgICAgaWYgKCFhcnJheVtpXSkgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQorICAgICAgICBtZW1jcHkoYXJyYXlbaV0sIGRhdGEsIHNpemUpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgfQogICAgIGFycmF5W2FyZ2NdID0gTlVMTDsKQEAgLTI3NDEsNyArMjc3Nyw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGZvciAoaSA9IDA7IGFycmF5W2ldICE9IE5VTEw7ICsraSkgewotICAgICAgICBmcmVlKGFycmF5W2ldKTsKKyAgICAgICAgUHlNZW1fRnJlZShhcnJheVtpXSk7CiAgICAgfQotICAgIGZyZWUoKHZvaWQqKWFycmF5KTsKKyAgICBQeU1lbV9GcmVlKCh2b2lkKilhcnJheSk7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jIGIvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYwppbmRleCA2MGIyODExLi4zMWNjNGNjIDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCisrKyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKQEAgLTE1MCw2ICsxNTAsNyBAQAogICAgIH0KICAgICBQeV9TSVpFKG5ldykgPSBzaXplOwogICAgIG5ldy0+b2JfYWxsb2MgPSBhbGxvYzsKKyAgICBuZXctPm9iX3N0YXJ0ID0gbmV3LT5vYl9ieXRlczsKICAgICBuZXctPm9iX2V4cG9ydHMgPSAwOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ldzsKQEAgLTE3Nyw0OCArMTc4LDcwIEBACiBQeUJ5dGVBcnJheV9SZXNpemUoUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKICAgICB2b2lkICpzdmFsOwotICAgIFB5X3NzaXplX3QgYWxsb2MgPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2FsbG9jOworICAgIFB5Qnl0ZUFycmF5T2JqZWN0ICpvYmogPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZik7CisgICAgUHlfc3NpemVfdCBhbGxvYyA9IG9iai0+b2JfYWxsb2M7CisgICAgUHlfc3NpemVfdCBsb2dpY2FsX29mZnNldCA9IG9iai0+b2Jfc3RhcnQgLSBvYmotPm9iX2J5dGVzOwogCiAgICAgYXNzZXJ0KHNlbGYgIT0gTlVMTCk7CiAgICAgYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKTsKICAgICBhc3NlcnQoc2l6ZSA+PSAwKTsKKyAgICBhc3NlcnQobG9naWNhbF9vZmZzZXQgPj0gMCk7CisgICAgYXNzZXJ0KGxvZ2ljYWxfb2Zmc2V0IDw9IGFsbG9jKTsKIAogICAgIGlmIChzaXplID09IFB5X1NJWkUoc2VsZikpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICghX2NhbnJlc2l6ZSgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKSkgeworICAgIGlmICghX2NhbnJlc2l6ZShvYmopKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoc2l6ZSA8IGFsbG9jIC8gMikgewotICAgICAgICAvKiBNYWpvciBkb3duc2l6ZTsgcmVzaXplIGRvd24gdG8gZXhhY3Qgc2l6ZSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzaXplIDwgYWxsb2MpIHsKLSAgICAgICAgLyogV2l0aGluIGFsbG9jYXRlZCBzaXplOyBxdWljayBleGl0ICovCi0gICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8PSBhbGxvYyAqIDEuMTI1KSB7Ci0gICAgICAgIC8qIE1vZGVyYXRlIHVwc2l6ZTsgb3ZlcmFsbG9jYXRlIHNpbWlsYXIgdG8gbGlzdF9yZXNpemUoKSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAoc2l6ZSA+PiAzKSArIChzaXplIDwgOSA/IDMgOiA2KTsKKyAgICBpZiAoc2l6ZSArIGxvZ2ljYWxfb2Zmc2V0ICsgMSA8IGFsbG9jKSB7CisgICAgICAgIC8qIEN1cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBob3N0IHRoZSByZXF1ZXN0ZWQgc2l6ZSwKKyAgICAgICAgICAgZGVjaWRlIG9uIGEgc3RyYXRlZ3kuICovCisgICAgICAgIGlmIChzaXplIDwgYWxsb2MgLyAyKSB7CisgICAgICAgICAgICAvKiBNYWpvciBkb3duc2l6ZTsgcmVzaXplIGRvd24gdG8gZXhhY3Qgc2l6ZSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIE1pbm9yIGRvd25zaXplOyBxdWljayBleGl0ICovCisgICAgICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKKyAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgKi8KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAvKiBNYWpvciB1cHNpemU7IHJlc2l6ZSB1cCB0byBleGFjdCBzaXplICovCi0gICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgICAgIC8qIE5lZWQgZ3Jvd2luZywgZGVjaWRlIG9uIGEgc3RyYXRlZ3kgKi8KKyAgICAgICAgaWYgKHNpemUgPD0gYWxsb2MgKiAxLjEyNSkgeworICAgICAgICAgICAgLyogTW9kZXJhdGUgdXBzaXplOyBvdmVyYWxsb2NhdGUgc2ltaWxhciB0byBsaXN0X3Jlc2l6ZSgpICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAoc2l6ZSA+PiAzKSArIChzaXplIDwgOSA/IDMgOiA2KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIE1ham9yIHVwc2l6ZTsgcmVzaXplIHVwIHRvIGV4YWN0IHNpemUgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBzdmFsID0gUHlPYmplY3RfUmVhbGxvYygoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2J5dGVzLCBhbGxvYyk7Ci0gICAgaWYgKHN2YWwgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGxvZ2ljYWxfb2Zmc2V0ID4gMCkgeworICAgICAgICBzdmFsID0gUHlPYmplY3RfTWFsbG9jKGFsbG9jKTsKKyAgICAgICAgaWYgKHN2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoc3ZhbCwgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCBQeV9NSU4oc2l6ZSwgUHlfU0laRShzZWxmKSkpOworICAgICAgICBQeU9iamVjdF9GcmVlKG9iai0+b2JfYnl0ZXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3ZhbCA9IFB5T2JqZWN0X1JlYWxsb2Mob2JqLT5vYl9ieXRlcywgYWxsb2MpOworICAgICAgICBpZiAoc3ZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogCi0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlcyA9IHN2YWw7CisgICAgb2JqLT5vYl9ieXRlcyA9IG9iai0+b2Jfc3RhcnQgPSBzdmFsOwogICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYWxsb2MgPSBhbGxvYzsKLSAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCisgICAgb2JqLT5vYl9hbGxvYyA9IGFsbG9jOworICAgIG9iai0+b2JfYnl0ZXNbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KIAogICAgIHJldHVybiAwOwogfQpAQCAtMjg4LDEzICszMTEsMTMgQEAKICAgICB9CiAgICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewogICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KKyAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW1B5X1NJWkUoc2VsZildID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCiAgICAgfQogICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdm8pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgbXlzaXplLCB2by5idWYsIHZvLmxlbik7CisgICAgbWVtY3B5KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIG15c2l6ZSwgdm8uYnVmLCB2by5sZW4pOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZvKTsKICAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CkBAIC0zMzEsNiArMzU0LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IG15c2l6ZTsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgY291bnQgPSAwOwpAQCAtMzM4LDE5ICszNjIsMTYgQEAKICAgICBpZiAoY291bnQgPiAwICYmIG15c2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC8gY291bnQpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIHNpemUgPSBteXNpemUgKiBjb3VudDsKLSAgICBpZiAoc2l6ZSA8IHNlbGYtPm9iX2FsbG9jKSB7Ci0gICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICAgICBzZWxmLT5vYl9ieXRlc1tQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwotICAgIH0KLSAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKQorICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBpZiAobXlzaXplID09IDEpCi0gICAgICAgIG1lbXNldChzZWxmLT5vYl9ieXRlcywgc2VsZi0+b2JfYnl0ZXNbMF0sIHNpemUpOworICAgICAgICBtZW1zZXQoYnVmLCBidWZbMF0sIHNpemUpOwogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgaSpteXNpemUsIHNlbGYtPm9iX2J5dGVzLCBteXNpemUpOworICAgICAgICAgICAgbWVtY3B5KGJ1ZiArIGkqbXlzaXplLCBidWYsIG15c2l6ZSk7CiAgICAgfQogCiAgICAgUHlfSU5DUkVGKHNlbGYpOwpAQCAtMzY2LDcgKzM4Nyw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiYnl0ZWFycmF5IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoc2VsZi0+b2JfYnl0ZXNbaV0pKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbaV0pKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM4NSw3ICs0MDYsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJieXRlYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKShzZWxmLT5vYl9ieXRlc1tpXSkpOworICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbaV0pKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpbmRleCkpIHsKICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW5ndGgsIGN1ciwgaTsKQEAgLTM5OCw4ICs0MTksOCBAQAogICAgICAgICBpZiAoc2xpY2VsZW5ndGggPD0gMCkKICAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7CiAgICAgICAgIGVsc2UgaWYgKHN0ZXAgPT0gMSkgewotICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZWxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoCisgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpICsgc3RhcnQsIHNsaWNlbGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNoYXIgKnNvdXJjZV9idWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CkBAIC00MjUsMTAgKzQ0Niw5NCBAQAogfQogCiBzdGF0aWMgaW50CitieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxvLCBQeV9zc2l6ZV90IGhpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpieXRlcywgUHlfc3NpemVfdCBieXRlc19sZW4pCit7CisgICAgUHlfc3NpemVfdCBhdmFpbCA9IGhpIC0gbG87CisgICAgY2hhciAqYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgIFB5X3NzaXplX3QgZ3Jvd3RoID0gYnl0ZXNfbGVuIC0gYXZhaWw7CisgICAgaW50IHJlcyA9IDA7CisgICAgYXNzZXJ0KGF2YWlsID49IDApOworCisgICAgaWYgKGdyb3d0aCA8IDApIHsKKyAgICAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGlmIChsbyA9PSAwKSB7CisgICAgICAgICAgICAvKiBTaHJpbmsgdGhlIGJ1ZmZlciBieSBhZHZhbmNpbmcgaXRzIGxvZ2ljYWwgc3RhcnQgKi8KKyAgICAgICAgICAgIHNlbGYtPm9iX3N0YXJ0IC09IGdyb3d0aDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgICAgIGhpICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10YWlsLS0tLS0tPnwKKyAgICAgICAgICAgICAgfCAgICAgIHw8LWJ5dGVzX2xlbi0+fDwtLS0tLXRhaWwtLS0tLS0+fAorICAgICAgICAgICAgICAwICAgIG5ld19sbyAgICAgICAgIG5ld19oaSAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKKyAgICAgICAgICAgICAgfCAgIHw8LS0tLWF2YWlsLS0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgICAgIHwgICB8PC1ieXRlc19sZW4tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbWVtbW92ZShidWYgKyBsbyArIGJ5dGVzX2xlbiwgYnVmICsgaGksCisgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBoaSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBncm93dGgpIDwgMCkgeworICAgICAgICAgICAgLyogSXNzdWUgIzE5NTc4OiBIYW5kbGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBoZXJlIGlzCisgICAgICAgICAgICAgICB0cmlja3kgaGVyZSBiZWNhdXNlIHRoZSBieXRlYXJyYXkgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgIG1vZGlmaWVkLiBEZXBlbmRpbmcgb24gZ3Jvd3RoIGFuZCBsbywgdGhlIGJlaGF2aW91ciBpcworICAgICAgICAgICAgICAgZGlmZmVyZW50LgorCisgICAgICAgICAgICAgICBJZiBncm93dGggPCAwIGFuZCBsbyAhPSAwLCB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgYnV0IGEKKyAgICAgICAgICAgICAgIE1lbW9yeUVycm9yIGlzIHN0aWxsIHJhaXNlZCBhbmQgdGhlIG1lbW9yeSBibG9jayBpcyBub3QKKyAgICAgICAgICAgICAgIHNocmlua2VkLiBPdGhlcndpc2UsIHRoZSBieXRlYXJyYXkgaXMgcmVzdG9yZWQgaW4gaXRzIHByZXZpb3VzCisgICAgICAgICAgICAgICBzdGF0ZSBhbmQgYSBNZW1vcnlFcnJvciBpcyByYWlzZWQuICovCisgICAgICAgICAgICBpZiAobG8gPT0gMCkgeworICAgICAgICAgICAgICAgIHNlbGYtPm9iX3N0YXJ0ICs9IGdyb3d0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBtZW1tb3ZlKCkgcmVtb3ZlZCBieXRlcywgdGhlIGJ5dGVhcnJheSBvYmplY3QgY2Fubm90IGJlCisgICAgICAgICAgICAgICByZXN0b3JlZCBpbiBpdHMgcHJldmlvdXMgc3RhdGUuICovCisgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICs9IGdyb3d0aDsKKyAgICAgICAgICAgIHJlcyA9IC0xOworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ3Jvd3RoID4gMCkgeworICAgICAgICBpZiAoUHlfU0laRShzZWxmKSA+IChQeV9zc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC0gZ3Jvd3RoKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBncm93dGgpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICAgICAgLyogTWFrZSB0aGUgcGxhY2UgZm9yIHRoZSBhZGRpdGlvbmFsIGJ5dGVzICovCisgICAgICAgIC8qCisgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgfCAgIHw8LWF2YWlsLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICB8ICAgfDwtLS1ieXRlc19sZW4tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCisgICAgICAgICAqLworICAgICAgICBtZW1tb3ZlKGJ1ZiArIGxvICsgYnl0ZXNfbGVuLCBidWYgKyBoaSwKKyAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gbG8gLSBieXRlc19sZW4pOworICAgIH0KKworICAgIGlmIChieXRlc19sZW4gPiAwKQorICAgICAgICBtZW1jcHkoYnVmICsgbG8sIGJ5dGVzLCBieXRlc19sZW4pOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKIGJ5dGVhcnJheV9zZXRzbGljZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZXMpCiB7Ci0gICAgUHlfc3NpemVfdCBhdmFpbCwgbmVlZGVkOworICAgIFB5X3NzaXplX3QgbmVlZGVkOwogICAgIHZvaWQgKmJ5dGVzOwogICAgIFB5X2J1ZmZlciB2Ynl0ZXM7CiAgICAgaW50IHJlcyA9IDA7CkBAIC00NjcsNTAgKzU3Miw5IEBACiAgICAgaWYgKGhpID4gUHlfU0laRShzZWxmKSkKICAgICAgICAgaGkgPSBQeV9TSVpFKHNlbGYpOwogCi0gICAgYXZhaWwgPSBoaSAtIGxvOwotICAgIGlmIChhdmFpbCA8IDApCi0gICAgICAgIGxvID0gaGkgPSBhdmFpbCA9IDA7Ci0KLSAgICBpZiAoYXZhaWwgIT0gbmVlZGVkKSB7Ci0gICAgICAgIGlmIChhdmFpbCA+IG5lZWRlZCkgewotICAgICAgICAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gLTE7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICB8ICAgfDwtbmVlZGVkLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBsbyArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBoaSwKLSAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGhpKTsKLSAgICAgICAgfQotICAgICAgICAvKiBYWFgobm5vcndpdHopOiBuZWVkIHRvIHZlcmlmeSB0aGlzIGNhbid0IG92ZXJmbG93ISAqLwotICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgbmVlZGVkIC0gYXZhaWwpIDwgMCkgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhdmFpbCA8IG5lZWRlZCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIHwgICB8PC0tLS1uZWVkZWQtLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBsbyArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBoaSwKLSAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGxvIC0gbmVlZGVkKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChuZWVkZWQgPiAwKQotICAgICAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBsbywgYnl0ZXMsIG5lZWRlZCk7Ci0KLQotIGZpbmlzaDoKKyAgICByZXMgPSBieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKHNlbGYsIGxvLCBoaSwgYnl0ZXMsIG5lZWRlZCk7CiAgICAgaWYgKHZieXRlcy5sZW4gIT0gLTEpCi0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Ynl0ZXMpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Ynl0ZXMpOwogICAgIHJldHVybiByZXM7CiB9CiAKQEAgLTUzMyw3ICs1OTcsNyBAQAogICAgIGlmICghX2dldGJ5dGV2YWx1ZSh2YWx1ZSwgJml2YWwpKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzZWxmLT5vYl9ieXRlc1tpXSA9IGl2YWw7CisgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldID0gaXZhbDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTQxLDcgKzYwNSw4IEBACiBieXRlYXJyYXlfYXNzX3N1YnNjcmlwdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmluZGV4LCBQeU9iamVjdCAqdmFsdWVzKQogewogICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuLCBuZWVkZWQ7Ci0gICAgY2hhciAqYnl0ZXM7CisgICAgY2hhciAqYnVmLCAqYnl0ZXM7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKFB5SW5kZXhfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3QgaSA9IFB5TnVtYmVyX0FzU3NpemVfdChpbmRleCwgUHlFeGNfSW5kZXhFcnJvcik7CkBAIC01NjgsNyArNjMzLDcgQEAKICAgICAgICAgICAgIGludCBpdmFsOwogICAgICAgICAgICAgaWYgKCFfZ2V0Ynl0ZXZhbHVlKHZhbHVlcywgJml2YWwpKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzW2ldID0gKGNoYXIpaXZhbDsKKyAgICAgICAgICAgIGJ1ZltpXSA9IChjaGFyKWl2YWw7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTYwNiw3ICs2NzEsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHZhbHVlcykpOwotICAgICAgICBieXRlcyA9ICgoUHlCeXRlQXJyYXlPYmplY3QgKil2YWx1ZXMpLT5vYl9ieXRlczsKKyAgICAgICAgYnl0ZXMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodmFsdWVzKTsKICAgICAgICAgbmVlZGVkID0gUHlfU0laRSh2YWx1ZXMpOwogICAgIH0KICAgICAvKiBNYWtlIHN1cmUgYls1OjJdID0gLi4uIGluc2VydHMgYmVmb3JlIDUsIG5vdCBiZWZvcmUgMi4gKi8KQEAgLTYxNCwzOCArNjc5LDcgQEAKICAgICAgICAgKHN0ZXAgPiAwICYmIHN0YXJ0ID4gc3RvcCkpCiAgICAgICAgIHN0b3AgPSBzdGFydDsKICAgICBpZiAoc3RlcCA9PSAxKSB7Ci0gICAgICAgIGlmIChzbGljZWxlbiAhPSBuZWVkZWQpIHsKLSAgICAgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoc2xpY2VsZW4gPiBuZWVkZWQpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgMCAgIHN0YXJ0ICAgICAgICAgICBzdG9wICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tc2xpY2VsZW4tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICB8ICAgfDwtbmVlZGVkLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIDAgICBsbyAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIHN0b3ApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBuZWVkZWQgLSBzbGljZWxlbikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChzbGljZWxlbiA8IG5lZWRlZCkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICB8ICAgfDwtLS0tbmVlZGVkLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQgKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBzdGFydCAtIG5lZWRlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmVlZGVkID4gMCkKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0LCBieXRlcywgbmVlZGVkKTsKLQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheV9zZXRzbGljZV9saW5lYXIoc2VsZiwgc3RhcnQsIHN0b3AsIGJ5dGVzLCBuZWVkZWQpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKG5lZWRlZCA9PSAwKSB7CkBAIC02NzIsMTQgKzcwNiwxNCBAQAogICAgICAgICAgICAgICAgIGlmIChjdXIgKyBzdGVwID49IChzaXplX3QpUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikpCiAgICAgICAgICAgICAgICAgICAgIGxpbSA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpIC0gY3VyIC0gMTsKIAotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBjdXIgLSBpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXMgKyBjdXIgKyAxLCBsaW0pOworICAgICAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgY3VyIC0gaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGN1ciArIDEsIGxpbSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBNb3ZlIHRoZSB0YWlsIG9mIHRoZSBieXRlcywgaW4gb25lIGNodW5rICovCiAgICAgICAgICAgICBjdXIgPSBzdGFydCArIChzaXplX3Qpc2xpY2VsZW4qc3RlcDsKICAgICAgICAgICAgIGlmIChjdXIgPCAoc2l6ZV90KVB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGN1ciAtIHNsaWNlbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXMgKyBjdXIsCisgICAgICAgICAgICAgICAgbWVtbW92ZShidWYgKyBjdXIgLSBzbGljZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpIC0gY3VyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKQEAgLTcwMSw3ICs3MzUsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47IGN1ciArPSBzdGVwLCBpKyspCi0gICAgICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXNbY3VyXSA9IGJ5dGVzW2ldOworICAgICAgICAgICAgICAgIGJ1ZltjdXJdID0gYnl0ZXNbaV07CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTc4MSw3ICs4MTUsNyBAQAogICAgICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIGNvdW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBtZW1zZXQoc2VsZi0+b2JfYnl0ZXMsIDAsIGNvdW50KTsKKyAgICAgICAgICAgIG1lbXNldChQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksIDAsIGNvdW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03OTQsNyArODI4LDggQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgc2l6ZSA9IHZpZXcubGVuOwogICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkgZ290byBmYWlsOwotICAgICAgICBpZiAoUHlCdWZmZXJfVG9Db250aWd1b3VzKHNlbGYtPm9iX2J5dGVzLCAmdmlldywgc2l6ZSwgJ0MnKSA8IDApCisgICAgICAgIGlmIChQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLAorICAgICAgICAgICAgJnZpZXcsIHNpemUsICdDJykgPCAwKQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC04MzgsNyArODczLDcgQEAKICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikrKzsKICAgICAgICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIFB5X1NJWkUoc2VsZikrMSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKS0xXSA9IHZhbHVlOworICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbUHlfU0laRShzZWxmKS0xXSA9IHZhbHVlOwogICAgIH0KIAogICAgIC8qIENsZWFuIHVwIGFuZCByZXR1cm4gc3VjY2VzcyAqLwpAQCAtODYyLDkgKzg5NywxMCBAQAogICAgIC8qIDE1ID09IHN0cmxlbihxdW90ZV9wcmVmaXgpICsgMiArIHN0cmxlbihxdW90ZV9wb3N0Zml4KSArIDEgKi8KICAgICBzaXplX3QgbmV3c2l6ZTsKICAgICBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgY2hhciBjOwotICAgIHJlZ2lzdGVyIGNoYXIgKnA7CisgICAgUHlfc3NpemVfdCBpOworICAgIGNoYXIgKmJ5dGVzOworICAgIGNoYXIgYzsKKyAgICBjaGFyICpwOwogICAgIGludCBxdW90ZTsKICAgICBjaGFyICp0ZXN0LCAqc3RhcnQ7CiAgICAgY2hhciAqYnVmZmVyOwpAQCAtODk5LDExICs5MzUsMTIgQEAKICAgICAgICAgKnArKyA9ICpxdW90ZV9wcmVmaXgrKzsKICAgICAqcCsrID0gcXVvdGU7CiAKKyAgICBieXRlcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCBlbm91Z2ggcm9vbSBmb3IgYSBoZXggZXNjYXBlCiAgICAgICAgICAgIGFuZCBhIGNsb3NpbmcgcXVvdGUuICovCiAgICAgICAgIGFzc2VydChuZXdzaXplIC0gKHAgLSBidWZmZXIpID49IDUpOwotICAgICAgICBjID0gc2VsZi0+b2JfYnl0ZXNbaV07CisgICAgICAgIGMgPSBieXRlc1tpXTsKICAgICAgICAgaWYgKGMgPT0gJ1wnJyB8fCBjID09ICdcXCcpCiAgICAgICAgICAgICAqcCsrID0gJ1xcJywgKnArKyA9IGM7CiAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1x0JykKQEAgLTEwMzgsNiArMTA3NSw3IEBACiAjZGVmaW5lIEZBU1RTRUFSQ0ggZmFzdHNlYXJjaAogI2RlZmluZSBTVFJJTkdMSUIoRikgc3RyaW5nbGliXyMjRgogI2RlZmluZSBTVFJJTkdMSUJfQ0hBUiBjaGFyCisjZGVmaW5lIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiAxCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gUHlCeXRlQXJyYXlfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX1NUUiBQeUJ5dGVBcnJheV9BU19TVFJJTkcKICNkZWZpbmUgU1RSSU5HTElCX05FVyBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZQpAQCAtMTA0OSw2ICsxMDg3LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL2pvaW4uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2N0eXBlLmgiCkBAIC0xNDI5LDkgKzE0NjgsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVhcnJheV90cmFuc2xhdGUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJlZ2lzdGVyIGNoYXIgKmlucHV0LCAqb3V0cHV0OwotICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnRhYmxlOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgYzsKKyAgICBjaGFyICppbnB1dCwgKm91dHB1dDsKKyAgICBjb25zdCBjaGFyICp0YWJsZTsKKyAgICBQeV9zc2l6ZV90IGksIGM7CiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQ7CiAgICAgUHlfc3NpemVfdCBpbmxlbjsKQEAgLTIxOTIsNyArMjIzMSw3IEBACiAgICAgUHlfc3NpemVfdCBpLCBqLCBuID0gUHlfU0laRShzZWxmKTsKIAogICAgIGogPSBuIC8gMjsKLSAgICBoZWFkID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgaGVhZCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICB0YWlsID0gaGVhZCArIG4gLSAxOwogICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKICAgICAgICAgc3dhcCA9ICpoZWFkOwpAQCAtMjIxMyw2ICsyMjUyLDcgQEAKICAgICBQeU9iamVjdCAqdmFsdWU7CiAgICAgaW50IGl2YWw7CiAgICAgUHlfc3NpemVfdCB3aGVyZSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuTzppbnNlcnQiLCAmd2hlcmUsICZ2YWx1ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjIyNiw2ICsyMjY2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuICsgMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAod2hlcmUgPCAwKSB7CiAgICAgICAgIHdoZXJlICs9IG47CkBAIC0yMjM0LDggKzIyNzUsOCBAQAogICAgIH0KICAgICBpZiAod2hlcmUgPiBuKQogICAgICAgICB3aGVyZSA9IG47Ci0gICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHdoZXJlICsgMSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgbiAtIHdoZXJlKTsKLSAgICBzZWxmLT5vYl9ieXRlc1t3aGVyZV0gPSBpdmFsOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUgKyAxLCBidWYgKyB3aGVyZSwgbiAtIHdoZXJlKTsKKyAgICBidWZbd2hlcmVdID0gaXZhbDsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjI2MCw3ICsyMzAxLDcgQEAKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gKyAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZi0+b2JfYnl0ZXNbbl0gPSB2YWx1ZTsKKyAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbbl0gPSB2YWx1ZTsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjI5MSw3ICsyMzMyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlIGFyZ3VtZW50LiAzMiBpcyBhcmJpdHJhcnkuICovCi0gICAgYnVmX3NpemUgPSBfUHlPYmplY3RfTGVuZ3RoSGludChhcmcsIDMyKTsKKyAgICBidWZfc2l6ZSA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoYXJnLCAzMik7CiAgICAgaWYgKGJ1Zl9zaXplID09IC0xKSB7CiAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM1Myw2ICsyMzk0LDcgQEAKIHsKICAgICBpbnQgdmFsdWU7CiAgICAgUHlfc3NpemVfdCB3aGVyZSA9IC0xLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWY7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnBvcCIsICZ3aGVyZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM3MSw4ICsyNDEzLDkgQEAKICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgdmFsdWUgPSBzZWxmLT5vYl9ieXRlc1t3aGVyZV07Ci0gICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHdoZXJlLCBzZWxmLT5vYl9ieXRlcyArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgdmFsdWUgPSBidWZbd2hlcmVdOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUsIGJ1ZiArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gLSAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMzg4LDEyICsyNDMxLDEzIEBACiB7CiAgICAgaW50IHZhbHVlOwogICAgIFB5X3NzaXplX3Qgd2hlcmUsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmICghIF9nZXRieXRldmFsdWUoYXJnLCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAod2hlcmUgPSAwOyB3aGVyZSA8IG47IHdoZXJlKyspIHsKLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzW3doZXJlXSA9PSB2YWx1ZSkKKyAgICAgICAgaWYgKGJ1Zlt3aGVyZV0gPT0gdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHdoZXJlID09IG4pIHsKQEAgLTI0MDMsNyArMjQ0Nyw3IEBACiAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgbWVtbW92ZShidWYgKyB3aGVyZSwgYnVmICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiAtIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI0MTMsMjEgKzI0NTcsMjEgQEAKIC8qIFhYWCBUaGVzZSB0d28gaGVscGVycyBjb3VsZCBiZSBvcHRpbWl6ZWQgaWYgYXJnc2l6ZSA9PSAxICovCiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1sc3RyaXBfaGVscGVyKHVuc2lnbmVkIGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKK2xzdHJpcF9oZWxwZXIoY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAogICAgICAgICAgICAgICB2b2lkICphcmdwdHIsIFB5X3NzaXplX3QgYXJnc2l6ZSkKIHsKICAgICBQeV9zc2l6ZV90IGkgPSAwOwotICAgIHdoaWxlIChpIDwgbXlzaXplICYmIG1lbWNocihhcmdwdHIsIG15cHRyW2ldLCBhcmdzaXplKSkKKyAgICB3aGlsZSAoaSA8IG15c2l6ZSAmJiBtZW1jaHIoYXJncHRyLCAodW5zaWduZWQgY2hhcikgbXlwdHJbaV0sIGFyZ3NpemUpKQogICAgICAgICBpKys7CiAgICAgcmV0dXJuIGk7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1yc3RyaXBfaGVscGVyKHVuc2lnbmVkIGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKK3JzdHJpcF9oZWxwZXIoY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAogICAgICAgICAgICAgICB2b2lkICphcmdwdHIsIFB5X3NzaXplX3QgYXJnc2l6ZSkKIHsKICAgICBQeV9zc2l6ZV90IGkgPSBteXNpemUgLSAxOwotICAgIHdoaWxlIChpID49IDAgJiYgbWVtY2hyKGFyZ3B0ciwgbXlwdHJbaV0sIGFyZ3NpemUpKQorICAgIHdoaWxlIChpID49IDAgJiYgbWVtY2hyKGFyZ3B0ciwgKHVuc2lnbmVkIGNoYXIpIG15cHRyW2ldLCBhcmdzaXplKSkKICAgICAgICAgaS0tOwogICAgIHJldHVybiBpICsgMTsKIH0KQEAgLTI0NDIsNyArMjQ4Niw3IEBACiBieXRlYXJyYXlfc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKLSAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKKyAgICBjaGFyICpteXB0ciwgKmFyZ3B0cjsKICAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdmFyZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnN0cmlwIiwgJmFyZykpCkBAIC0yNDU0LDEwICsyNDk4LDEwIEBACiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIGxlZnQgPSBsc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgaWYgKGxlZnQgPT0gbXlzaXplKQpAQCAtMjQ2Niw3ICsyNTEwLDcgQEAKICAgICAgICAgcmlnaHQgPSByc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgaWYgKGFyZyAhPSBQeV9Ob25lKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2YXJnKTsKLSAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMgKyBsZWZ0LCByaWdodCAtIGxlZnQpOworICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CiB9CiAKIFB5RG9jX1NUUlZBUihsc3RyaXBfX2RvY19fLApAQCAtMjQ3OSw3ICsyNTIzLDcgQEAKIGJ5dGVhcnJheV9sc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKLSAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKKyAgICBjaGFyICpteXB0ciwgKmFyZ3B0cjsKICAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdmFyZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOmxzdHJpcCIsICZhcmcpKQpAQCAtMjQ5MSwxNiArMjUzNSwxNiBAQAogICAgIGVsc2UgewogICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICBsZWZ0ID0gbHN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIHJpZ2h0ID0gbXlzaXplOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIgKyBsZWZ0LCByaWdodCAtIGxlZnQpOwogfQogCiBQeURvY19TVFJWQVIocnN0cmlwX19kb2NfXywKQEAgLTI1MTMsNyArMjU1Nyw3IEBACiBieXRlYXJyYXlfcnN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzpyc3RyaXAiLCAmYXJnKSkKQEAgLTI1MjUsMTUgKzI1NjksMTUgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgcmlnaHQgPSByc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgaWYgKGFyZyAhPSBQeV9Ob25lKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2YXJnKTsKLSAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMsIHJpZ2h0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIsIHJpZ2h0KTsKIH0KIAogUHlEb2NfU1RSVkFSKGRlY29kZV9kb2MsCkBAIC0yNTc4LDczICsyNjIyLDkgQEAKIGluIGJldHdlZW4gZWFjaCBwYWlyLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBuZXcgYnl0ZWFycmF5LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X2pvaW4oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdCkKK2J5dGVhcnJheV9qb2luKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7Ci0gICAgUHlPYmplY3QgKnNlcTsKLSAgICBQeV9zc2l6ZV90IG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5X3NzaXplX3QgbjsKLSAgICBQeU9iamVjdCAqKml0ZW1zOwotICAgIFB5X3NzaXplX3QgdG90YWxzaXplID0gMDsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGNoYXIgKmRlc3Q7Ci0KLSAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QoaXQsICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIik7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBuID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKHNlcSk7Ci0gICAgaXRlbXMgPSBQeVNlcXVlbmNlX0Zhc3RfSVRFTVMoc2VxKTsKLQotICAgIC8qIENvbXB1dGUgdGhlIHRvdGFsIHNpemUsIGFuZCBjaGVjayB0aGF0IHRoZXkgYXJlIGFsbCBieXRlcyAqLwotICAgIC8qIFhYWCBTaG91bGRuJ3Qgd2UgdXNlIF9nZXRidWZmZXIoKSBvbiB0aGVzZSBpdGVtcyBpbnN0ZWFkPyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKm9iaiA9IGl0ZW1zW2ldOwotICAgICAgICBpZiAoIVB5Qnl0ZUFycmF5X0NoZWNrKG9iaikgJiYgIVB5Qnl0ZXNfQ2hlY2sob2JqKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSBvZiBieXRlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIihpdGVtICVsZCBoYXMgdHlwZSAnJS4xMDBzJykiLAotICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCAlbGQgaXNuJ3QgcmlnaHQgb24gV2luNjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylpLCBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICB0b3RhbHNpemUgKz0gbXlzaXplOwotICAgICAgICB0b3RhbHNpemUgKz0gUHlfU0laRShvYmopOwotICAgICAgICBpZiAodG90YWxzaXplIDwgMCkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBBbGxvY2F0ZSB0aGUgcmVzdWx0LCBhbmQgY29weSB0aGUgYnl0ZXMgKi8KLSAgICByZXN1bHQgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB0b3RhbHNpemUpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBkZXN0ID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHJlc3VsdCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqb2JqID0gaXRlbXNbaV07Ci0gICAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IFB5X1NJWkUob2JqKTsKLSAgICAgICAgY2hhciAqYnVmOwotICAgICAgICBpZiAoUHlCeXRlQXJyYXlfQ2hlY2sob2JqKSkKLSAgICAgICAgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKG9iaik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgYnVmID0gUHlCeXRlc19BU19TVFJJTkcob2JqKTsKLSAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzZWxmLT5vYl9ieXRlcywgbXlzaXplKTsKLSAgICAgICAgICAgIGRlc3QgKz0gbXlzaXplOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShkZXN0LCBidWYsIHNpemUpOwotICAgICAgICBkZXN0ICs9IHNpemU7Ci0gICAgfQotCi0gICAgLyogRG9uZSAqLwotICAgIFB5X0RFQ1JFRihzZXEpOwotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvKiBFcnJvciBoYW5kbGluZyAqLwotICBlcnJvcjoKLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gc3RyaW5nbGliX2J5dGVzX2pvaW4oc2VsZiwgaXRlcmFibGUpOwogfQogCiBQeURvY19TVFJWQVIoc3BsaXRsaW5lc19fZG9jX18sCkBAIC0yNzQ4LDYgKzI3MjgsNyBAQAogewogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKKyAgICBjaGFyICpidWY7CiAKICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9fX2RpY3RfXyk7CiAgICAgaWYgKGRpY3QgPT0gTlVMTCkgewpAQCAtMjc1NiwxOSArMjczNywyMCBAQAogICAgICAgICBQeV9JTkNSRUYoZGljdCk7CiAgICAgfQogCisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIGlmIChwcm90byA8IDMpIHsKICAgICAgICAgLyogdXNlIHN0ciBiYXNlZCByZWR1Y3Rpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIueCAqLwogICAgICAgICBQeU9iamVjdCAqbGF0aW4xOwotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMpCi0gICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHNlbGYtPm9iX2J5dGVzLCBQeV9TSVpFKHNlbGYpLCBOVUxMKTsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikpCisgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKGJ1ZiwgUHlfU0laRShzZWxmKSwgTlVMTCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKE5zKU4pIiwgUHlfVFlQRShzZWxmKSwgbGF0aW4xLCAibGF0aW4tMSIsIGRpY3QpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogdXNlIG1vcmUgZWZmaWNpZW50IGJ5dGUgYmFzZWQgcmVkdWN0aW9uICovCi0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlcykgewotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKHkjKU4pIiwgUHlfVFlQRShzZWxmKSwgc2VsZi0+b2JfYnl0ZXMsIFB5X1NJWkUoc2VsZiksIGRpY3QpOworICAgICAgICBpZiAoUHlfU0laRShzZWxmKSkgeworICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKHkjKU4pIiwgUHlfVFlQRShzZWxmKSwgYnVmLCBQeV9TSVpFKHNlbGYpLCBkaWN0KTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTygpTikiLCBQeV9UWVBFKHNlbGYpLCBkaWN0KTsKQEAgLTI4NDksNyArMjgzMSw3IEBACiAgICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfY291bnQsIE1FVEhfVkFSQVJHUywgY291bnRfX2RvY19ffSwKICAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZGVjb2RlLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkZWNvZGVfZG9jfSwKICAgICB7ImVuZHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLCBlbmRzd2l0aF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLAorICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZXh0ZW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9leHRlbmQsIE1FVEhfTywgZXh0ZW5kX19kb2NfX30sCiAgICAgeyJmaW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKQEAgLTMwMDAsNyArMjk4Miw3IEBACiAKICAgICBpZiAoaXQtPml0X2luZGV4IDwgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VxKSkgewogICAgICAgICBpdGVtID0gUHlMb25nX0Zyb21Mb25nKAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc2VxLT5vYl9ieXRlc1tpdC0+aXRfaW5kZXhdKTsKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKVB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZXEpW2l0LT5pdF9pbmRleF0pOwogICAgICAgICBpZiAoaXRlbSAhPSBOVUxMKQogICAgICAgICAgICAgKytpdC0+aXRfaW5kZXg7CiAgICAgICAgIHJldHVybiBpdGVtOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMgYi9PYmplY3RzL2J5dGVzX21ldGhvZHMuYwppbmRleCBlZjNjMmY3Li40ZTgxMDdiIDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVzX21ldGhvZHMuYworKysgYi9PYmplY3RzL2J5dGVzX21ldGhvZHMuYwpAQCAtMTAsOSArMTAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNzcGFjZShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU1NQQUNFKCpwKSkKQEAgLTQwLDkgKzQwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzYWxwaGEoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNBTFBIQSgqcCkpCkBAIC03MCw5ICs3MCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2FsbnVtKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTQUxOVU0oKnApKQpAQCAtMTAwLDkgKzEwMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2RpZ2l0KGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTRElHSVQoKnApKQpAQCAtMTMwLDkgKzEzMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2xvd2VyKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAgICAgaW50IGNhc2VkOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwpAQCAtMTY0LDkgKzE2NCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc3VwcGVyKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAgICAgaW50IGNhc2VkOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwpAQCAtMjAwLDkgKzIwMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc3RpdGxlKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAgICAgaW50IGNhc2VkLCBwcmV2aW91c19pc19jYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgIGNhc2VkID0gMDsKICAgICBwcmV2aW91c19pc19jYXNlZCA9IDA7CiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKLSAgICAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciBjaCA9ICpwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNoID0gKnA7CiAKICAgICAgICAgaWYgKFB5X0lTVVBQRVIoY2gpKSB7CiAgICAgICAgICAgICBpZiAocHJldmlvdXNfaXNfY2FzZWQpCmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzb2JqZWN0LmMgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKaW5kZXggNDc4OThmZS4uODIxN2IxZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc29iamVjdC5jCisrKyBiL09iamVjdHMvYnl0ZXNvYmplY3QuYwpAQCAtMTAsOSArMTAsMTggQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBfZ2V0YnVmZmVyKFB5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldykKIHsKLSAgICBQeUJ1ZmZlclByb2NzICpidWZmZXIgPSBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlcjsKKyAgICBQeUJ1ZmZlclByb2NzICpidWZmZXJwcm9jczsKKyAgICBpZiAoUHlCeXRlc19DaGVja0V4YWN0KG9iaikpIHsKKyAgICAgICAgLyogRmFzdCBwYXRoLCBlLmcuIGZvciAuam9pbigpIG9mIG1hbnkgYnl0ZXMgb2JqZWN0cyAqLworICAgICAgICBQeV9JTkNSRUYob2JqKTsKKyAgICAgICAgdmlldy0+b2JqID0gb2JqOworICAgICAgICB2aWV3LT5idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhvYmopOworICAgICAgICB2aWV3LT5sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKG9iaik7CisgICAgICAgIHJldHVybiB2aWV3LT5sZW47CisgICAgfQogCi0gICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8IGJ1ZmZlci0+YmZfZ2V0YnVmZmVyID09IE5VTEwpCisgICAgYnVmZmVycHJvY3MgPSBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlcjsKKyAgICBpZiAoYnVmZmVycHJvY3MgPT0gTlVMTCB8fCBidWZmZXJwcm9jcy0+YmZfZ2V0YnVmZmVyID09IE5VTEwpCiAgICAgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSSIsCkBAIC0yMCw3ICsyOSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoYnVmZmVyLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKKyAgICBpZiAoYnVmZmVycHJvY3MtPmJmX2dldGJ1ZmZlcihvYmosIHZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHZpZXctPmxlbjsKIH0KQEAgLTY1LDcgKzc0LDcgQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoY29uc3QgY2hhciAqc3RyLCBQeV9zc2l6ZV90IHNpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqb3A7CisgICAgUHlCeXRlc09iamVjdCAqb3A7CiAgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICJOZWdhdGl2ZSBzaXplIHBhc3NlZCB0byBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplIik7CkBAIC0xMTcsOCArMTI2LDggQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHNpemU7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqb3A7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlCeXRlc09iamVjdCAqb3A7CiAKICAgICBhc3NlcnQoc3RyICE9IE5VTEwpOwogICAgIHNpemUgPSBzdHJsZW4oc3RyKTsKQEAgLTUwNCw3ICs1MTMsNyBAQAogLyogb2JqZWN0IGFwaSAqLwogCiBQeV9zc2l6ZV90Ci1QeUJ5dGVzX1NpemUocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlCeXRlc19TaXplKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MTUsNyArNTI0LDcgQEAKIH0KIAogY2hhciAqCi1QeUJ5dGVzX0FzU3RyaW5nKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5Qnl0ZXNfQXNTdHJpbmcoUHlPYmplY3QgKm9wKQogewogICAgIGlmICghUHlCeXRlc19DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTUyNiw5ICs1MzUsOSBAQAogfQogCiBpbnQKLVB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY2hhciAqKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuKQorUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpsZW4pCiB7CiAgICAgaWYgKHMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTU2MCw2ICs1NjksNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvam9pbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY3R5cGUuaCIKQEAgLTU2OSw3ICs1NzksNyBAQAogUHlPYmplY3QgKgogUHlCeXRlc19SZXByKFB5T2JqZWN0ICpvYmosIGludCBzbWFydHF1b3RlcykKIHsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0KiBvcCA9IChQeUJ5dGVzT2JqZWN0Kikgb2JqOworICAgIFB5Qnl0ZXNPYmplY3QqIG9wID0gKFB5Qnl0ZXNPYmplY3QqKSBvYmo7CiAgICAgUHlfc3NpemVfdCBpLCBsZW5ndGggPSBQeV9TSVpFKG9wKTsKICAgICBzaXplX3QgbmV3c2l6ZSwgc3F1b3RlcywgZHF1b3RlczsKICAgICBQeU9iamVjdCAqdjsKQEAgLTcwOCwxMiArNzE4LDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZXBlYXQocmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBuKQorYnl0ZXNfcmVwZWF0KFB5Qnl0ZXNPYmplY3QgKmEsIFB5X3NzaXplX3QgbikKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKICAgICBzaXplX3QgbmJ5dGVzOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgbiA9IDA7CkBAIC03ODMsNyArNzkzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2l0ZW0oUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQorYnl0ZXNfaXRlbShQeUJ5dGVzT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtNzkyLDYgKzgwMiwyMyBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpYS0+b2Jfc3ZhbFtpXSk7CiB9CiAKK1B5X0xPQ0FMKGludCkKK2J5dGVzX2NvbXBhcmVfZXEoUHlCeXRlc09iamVjdCAqYSwgUHlCeXRlc09iamVjdCAqYikKK3sKKyAgICBpbnQgY21wOworICAgIFB5X3NzaXplX3QgbGVuOworCisgICAgbGVuID0gUHlfU0laRShhKTsKKyAgICBpZiAoUHlfU0laRShiKSAhPSBsZW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGEtPm9iX3N2YWxbMF0gIT0gYi0+b2Jfc3ZhbFswXSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjbXAgPSBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgbGVuKTsKKyAgICByZXR1cm4gKGNtcCA9PSAwKTsKK30KKwogc3RhdGljIFB5T2JqZWN0KgogYnl0ZXNfcmljaGNvbXBhcmUoUHlCeXRlc09iamVjdCAqYSwgUHlCeXRlc09iamVjdCAqYiwgaW50IG9wKQogewpAQCAtODEyLDUzICs4MzksNTUgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBQeV9Ob3RJbXBsZW1lbnRlZDsKLSAgICAgICAgZ290byBvdXQ7CiAgICAgfQotICAgIGlmIChhID09IGIpIHsKKyAgICBlbHNlIGlmIChhID09IGIpIHsKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFB5X0VROmNhc2UgUHlfTEU6Y2FzZSBQeV9HRToKKyAgICAgICAgY2FzZSBQeV9FUToKKyAgICAgICAgY2FzZSBQeV9MRToKKyAgICAgICAgY2FzZSBQeV9HRToKKyAgICAgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLwogICAgICAgICAgICAgcmVzdWx0ID0gUHlfVHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICBjYXNlIFB5X05FOmNhc2UgUHlfTFQ6Y2FzZSBQeV9HVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5X05FOgorICAgICAgICBjYXNlIFB5X0xUOgorICAgICAgICBjYXNlIFB5X0dUOgogICAgICAgICAgICAgcmVzdWx0ID0gUHlfRmFsc2U7Ci0gICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChvcCA9PSBQeV9FUSkgewotICAgICAgICAvKiBTdXBwb3J0aW5nIFB5X05FIGhlcmUgYXMgd2VsbCBkb2VzIG5vdCBzYXZlCi0gICAgICAgICAgIG11Y2ggdGltZSwgc2luY2UgUHlfTkUgaXMgcmFyZWx5IHVzZWQuICAqLwotICAgICAgICBpZiAoUHlfU0laRShhKSA9PSBQeV9TSVpFKGIpCi0gICAgICAgICAgICAmJiAoYS0+b2Jfc3ZhbFswXSA9PSBiLT5vYl9zdmFsWzBdCi0gICAgICAgICAgICAmJiBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgUHlfU0laRShhKSkgPT0gMCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeV9GYWxzZTsKKyAgICBlbHNlIGlmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkgeworICAgICAgICBpbnQgZXEgPSBieXRlc19jb21wYXJlX2VxKGEsIGIpOworICAgICAgICBlcSBePSAob3AgPT0gUHlfTkUpOworICAgICAgICByZXN1bHQgPSBlcSA/IFB5X1RydWUgOiBQeV9GYWxzZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxlbl9hID0gUHlfU0laRShhKTsKKyAgICAgICAgbGVuX2IgPSBQeV9TSVpFKGIpOworICAgICAgICBtaW5fbGVuID0gUHlfTUlOKGxlbl9hLCBsZW5fYik7CisgICAgICAgIGlmIChtaW5fbGVuID4gMCkgeworICAgICAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCphLT5vYl9zdmFsKSAtIFB5X0NIQVJNQVNLKCpiLT5vYl9zdmFsKTsKKyAgICAgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICAgICAgYyA9IG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBtaW5fbGVuKTsKICAgICAgICAgfQotICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IDA7CisgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICBjID0gKGxlbl9hIDwgbGVuX2IpID8gLTEgOiAobGVuX2EgPiBsZW5fYikgPyAxIDogMDsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFB5X0xUOiBjID0gYyA8ICAwOyBicmVhazsKKyAgICAgICAgY2FzZSBQeV9MRTogYyA9IGMgPD0gMDsgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfR1Q6IGMgPSBjID4gIDA7IGJyZWFrOworICAgICAgICBjYXNlIFB5X0dFOiBjID0gYyA+PSAwOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBjID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOwogICAgIH0KLSAgICBsZW5fYSA9IFB5X1NJWkUoYSk7IGxlbl9iID0gUHlfU0laRShiKTsKLSAgICBtaW5fbGVuID0gKGxlbl9hIDwgbGVuX2IpID8gbGVuX2EgOiBsZW5fYjsKLSAgICBpZiAobWluX2xlbiA+IDApIHsKLSAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCphLT5vYl9zdmFsKSAtIFB5X0NIQVJNQVNLKCpiLT5vYl9zdmFsKTsKLSAgICAgICAgaWYgKGM9PTApCi0gICAgICAgICAgICBjID0gbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIG1pbl9sZW4pOwotICAgIH0gZWxzZQotICAgICAgICBjID0gMDsKLSAgICBpZiAoYyA9PSAwKQotICAgICAgICBjID0gKGxlbl9hIDwgbGVuX2IpID8gLTEgOiAobGVuX2EgPiBsZW5fYikgPyAxIDogMDsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBQeV9MVDogYyA9IGMgPCAgMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9MRTogYyA9IGMgPD0gMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9FUTogYXNzZXJ0KDApOyAgYnJlYWs7IC8qIHVucmVhY2hhYmxlICovCi0gICAgY2FzZSBQeV9ORTogYyA9IGMgIT0gMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9HVDogYyA9IGMgPiAgMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9HRTogYyA9IGMgPj0gMDsgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmVzdWx0ID0gUHlfTm90SW1wbGVtZW50ZWQ7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICByZXN1bHQgPSBjID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOwotICBvdXQ6CisKICAgICBQeV9JTkNSRUYocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtODY4LDcgKzg5Nyw3IEBACiB7CiAgICAgaWYgKGEtPm9iX3NoYXNoID09IC0xKSB7CiAgICAgICAgIC8qIENhbid0IGZhaWwgKi8KLSAgICAgICAgYS0+b2Jfc2hhc2ggPSBfUHlfSGFzaEJ5dGVzKCh1bnNpZ25lZCBjaGFyICopIGEtPm9iX3N2YWwsIFB5X1NJWkUoYSkpOworICAgICAgICBhLT5vYl9zaGFzaCA9IF9QeV9IYXNoQnl0ZXMoYS0+b2Jfc3ZhbCwgUHlfU0laRShhKSk7CiAgICAgfQogICAgIHJldHVybiBhLT5vYl9zaGFzaDsKIH0KQEAgLTExMTIsOTQgKzExNDEsOSBAQAogRXhhbXBsZTogYicuJy5qb2luKFtiJ2FiJywgYidwcScsIGIncnMnXSkgLT4gYidhYi5wcS5ycycuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19qb2luKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3JpZykKK2J5dGVzX2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKLSAgICBjaGFyICpzZXAgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKTsKLSAgICBjb25zdCBQeV9zc2l6ZV90IHNlcGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZik7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgY2hhciAqcDsKLSAgICBQeV9zc2l6ZV90IHNlcWxlbiA9IDA7Ci0gICAgc2l6ZV90IHN6ID0gMDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKnNlcSwgKml0ZW07Ci0KLSAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3Qob3JpZywgIiIpOwotICAgIGlmIChzZXEgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX1NpemUoc2VxKTsKLSAgICBpZiAoc2VxbGVuID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoIiIpOwotICAgIH0KLSAgICBpZiAoc2VxbGVuID09IDEpIHsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIDApOwotICAgICAgICBpZiAoUHlCeXRlc19DaGVja0V4YWN0KGl0ZW0pKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBpdGVtOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogVGhlcmUgYXJlIGF0IGxlYXN0IHR3byB0aGluZ3MgdG8gam9pbiwgb3IgZWxzZSB3ZSBoYXZlIGEgc3ViY2xhc3MKLSAgICAgKiBvZiB0aGUgYnVpbHRpbiB0eXBlcyBpbiB0aGUgc2VxdWVuY2UuCi0gICAgICogRG8gYSBwcmUtcGFzcyB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbCBhbW91bnQgb2Ygc3BhY2Ugd2UnbGwKLSAgICAgKiBuZWVkIChzeiksIGFuZCBzZWUgd2hldGhlciBhbGwgYXJndW1lbnQgYXJlIGJ5dGVzLgotICAgICAqLwotICAgIC8qIFhYWCBTaG91bGRuJ3Qgd2UgdXNlIF9nZXRidWZmZXIoKSBvbiB0aGVzZSBpdGVtcyBpbnN0ZWFkPyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47IGkrKykgewotICAgICAgICBjb25zdCBzaXplX3Qgb2xkX3N6ID0gc3o7Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKLSAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGl0ZW0pICYmICFQeUJ5dGVBcnJheV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgaXRlbSAlemQ6IGV4cGVjdGVkIGJ5dGVzLCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICUuODBzIGZvdW5kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgc3ogKz0gUHlfU0laRShpdGVtKTsKLSAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICAgIHN6ICs9IHNlcGxlbjsKLSAgICAgICAgaWYgKHN6IDwgb2xkX3N6IHx8IHN6ID4gUFlfU1NJWkVfVF9NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIGZvciBieXRlcyIpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEFsbG9jYXRlIHJlc3VsdCBzcGFjZS4gKi8KLSAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyKilOVUxMLCBzeik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBDYXRlbmF0ZSBldmVyeXRoaW5nLiAqLwotICAgIC8qIEknbSBub3Qgd29ycmllZCBhYm91dCBhIFB5Qnl0ZUFycmF5IGl0ZW0gZ3Jvd2luZyBiZWNhdXNlIHRoZXJlJ3MKLSAgICAgICBub3doZXJlIGluIHRoaXMgZnVuY3Rpb24gd2hlcmUgd2UgcmVsZWFzZSB0aGUgR0lMLiAqLwotICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgewotICAgICAgICBzaXplX3QgbjsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAgIFB5X01FTUNQWShwLCBzZXAsIHNlcGxlbik7Ci0gICAgICAgICAgICBwICs9IHNlcGxlbjsKLSAgICAgICAgfQotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7Ci0gICAgICAgIG4gPSBQeV9TSVpFKGl0ZW0pOwotICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhpdGVtKSkKLSAgICAgICAgICAgIHEgPSBQeUJ5dGVzX0FTX1NUUklORyhpdGVtKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcSA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhpdGVtKTsKLSAgICAgICAgUHlfTUVNQ1BZKHAsIHEsIG4pOwotICAgICAgICBwICs9IG47Ci0gICAgfQotCi0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICByZXR1cm4gc3RyaW5nbGliX2J5dGVzX2pvaW4oc2VsZiwgaXRlcmFibGUpOwogfQogCiBQeU9iamVjdCAqCkBAIC0xNDIyLDcgKzEzNjYsNyBAQAogewogICAgIFB5T2JqZWN0ICpzZXAgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyICopc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZXAgIT0gTlVMTCAmJiBzZXAgIT0gUHlfTm9uZSkgewpAQCAtMTUzNiw5ICsxNDgwLDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc190cmFuc2xhdGUoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgY2hhciAqaW5wdXQsICpvdXRwdXQ7CiAgICAgY29uc3QgY2hhciAqdGFibGU7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBjLCBjaGFuZ2VkID0gMDsKKyAgICBQeV9zc2l6ZV90IGksIGMsIGNoYW5nZWQgPSAwOwogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7CiAgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0LCAqZGVsX3RhYmxlPU5VTEw7CiAgICAgUHlfc3NpemVfdCBpbmxlbiwgdGFibGVuLCBkZWxsZW4gPSAwOwpAQCAtMjMxNiw4ICsyMjYwLDYgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxzczpkZWNvZGUiLCBrd2xpc3QsICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKQotICAgICAgICBlbmNvZGluZyA9IFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcoKTsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOwogfQogCkBAIC0yNDQ3LDcgKzIzODksNyBAQAogICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX19kb2NfX30sCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlc19lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLAogICAgICBlbmRzd2l0aF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLAorICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlc19maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKICAgICB7ImZyb21oZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZnJvbWhleCwgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsCkBAIC0yNjc5LDcgKzI2MjEsNyBAQAogICAgIH0KIAogICAgIC8qIEZvciBpdGVyYXRvciB2ZXJzaW9uLCBjcmVhdGUgYSBzdHJpbmcgb2JqZWN0IGFuZCByZXNpemUgYXMgbmVlZGVkICovCi0gICAgc2l6ZSA9IF9QeU9iamVjdF9MZW5ndGhIaW50KHgsIDY0KTsKKyAgICBzaXplID0gUHlPYmplY3RfTGVuZ3RoSGludCh4LCA2NCk7CiAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogQWxsb2NhdGUgYW4gZXh0cmEgYnl0ZSB0byBwcmV2ZW50IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKSBmcm9tCkBAIC0yNzM3LDkgKzI2NzksOCBAQAogICAgIHJldHVybiBuZXc7CiAKICAgZXJyb3I6Ci0gICAgLyogRXJyb3IgaGFuZGxpbmcgd2hlbiBuZXcgIT0gTlVMTCAqLwogICAgIFB5X1hERUNSRUYoaXQpOwotICAgIFB5X0RFQ1JFRihuZXcpOworICAgIFB5X1hERUNSRUYobmV3KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjgyNSw5ICsyNzY2LDkgQEAKIH07CiAKIHZvaWQKLVB5Qnl0ZXNfQ29uY2F0KHJlZ2lzdGVyIFB5T2JqZWN0ICoqcHYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorUHlCeXRlc19Db25jYXQoUHlPYmplY3QgKipwdiwgUHlPYmplY3QgKncpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgYXNzZXJ0KHB2ICE9IE5VTEwpOwogICAgIGlmICgqcHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg0MSw3ICsyNzgyLDcgQEAKIH0KIAogdm9pZAotUHlCeXRlc19Db25jYXRBbmREZWwocmVnaXN0ZXIgUHlPYmplY3QgKipwdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitQeUJ5dGVzX0NvbmNhdEFuZERlbChQeU9iamVjdCAqKnB2LCBQeU9iamVjdCAqdykKIHsKICAgICBQeUJ5dGVzX0NvbmNhdChwdiwgdyk7CiAgICAgUHlfWERFQ1JFRih3KTsKQEAgLTI4NjUsOCArMjgwNiw4IEBACiBpbnQKIF9QeUJ5dGVzX1Jlc2l6ZShQeU9iamVjdCAqKnB2LCBQeV9zc2l6ZV90IG5ld3NpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqc3Y7CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlCeXRlc09iamVjdCAqc3Y7CiAgICAgdiA9ICpwdjsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sodikgfHwgUHlfUkVGQ05UKHYpICE9IDEgfHwgbmV3c2l6ZSA8IDApIHsKICAgICAgICAgKnB2ID0gMDsKZGlmZiAtLWdpdCBhL09iamVjdHMvY2xhc3NvYmplY3QuYyBiL09iamVjdHMvY2xhc3NvYmplY3QuYwppbmRleCBjZGM5YjFjLi4yNzJmNTc1IDEwMDY0NAotLS0gYS9PYmplY3RzL2NsYXNzb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCkBAIC00NCw3ICs0NCw3IEBACiBQeU9iamVjdCAqCiBQeU1ldGhvZF9OZXcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpzZWxmKQogewotICAgIHJlZ2lzdGVyIFB5TWV0aG9kT2JqZWN0ICppbTsKKyAgICBQeU1ldGhvZE9iamVjdCAqaW07CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02OSw2ICs2OSwzMCBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKilpbTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK21ldGhvZF9yZWR1Y2UoUHlNZXRob2RPYmplY3QgKmltKQoreworICAgIFB5T2JqZWN0ICpzZWxmID0gUHlNZXRob2RfR0VUX1NFTEYoaW0pOworICAgIFB5T2JqZWN0ICpmdW5jID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKGltKTsKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgUHlPYmplY3QgKmZ1bmNuYW1lOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgZnVuY25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZ1bmMsICZQeUlkX19fbmFtZV9fKTsKKyAgICBpZiAoZnVuY25hbWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9OKSIsIGdldGF0dHIsIHNlbGYsIGZ1bmNuYW1lKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1ldGhvZF9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKW1ldGhvZF9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIC8qIERlc2NyaXB0b3JzIGZvciBQeU1ldGhvZCBhdHRyaWJ1dGVzICovCiAKIC8qIGltX2Z1bmMgYW5kIGltX3NlbGYgYXJlIHN0b3JlZCBpbiB0aGUgUHlNZXRob2Qgb2JqZWN0ICovCkBAIC0xNjQsNyArMTg4LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1ldGhvZF9kZWFsbG9jKHJlZ2lzdGVyIFB5TWV0aG9kT2JqZWN0ICppbSkKK21ldGhvZF9kZWFsbG9jKFB5TWV0aG9kT2JqZWN0ICppbSkKIHsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhpbSk7CiAgICAgaWYgKGltLT5pbV93ZWFrcmVmbGlzdCAhPSBOVUxMKQpAQCAtMzY3LDcgKzM5MSw3IEBACiAgICAgb2Zmc2V0b2YoUHlNZXRob2RPYmplY3QsIGltX3dlYWtyZWZsaXN0KSwgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aG9kX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbWV0aG9kX21lbWJlcmxpc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aG9kX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTUwOSw3ICs1MzMsNyBAQAogCiBzdGF0aWMgUHlPYmplY3QgKgogaW5zdGFuY2VtZXRob2RfZGVzY3JfZ2V0KFB5T2JqZWN0ICpkZXNjciwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnR5cGUpIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqZnVuYyA9IFB5SW5zdGFuY2VNZXRob2RfR0VUX0ZVTkNUSU9OKGRlc2NyKTsKKyAgICBQeU9iamVjdCAqZnVuYyA9IFB5SW5zdGFuY2VNZXRob2RfR0VUX0ZVTkNUSU9OKGRlc2NyKTsKICAgICBpZiAob2JqID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgICAgICByZXR1cm4gZnVuYzsKZGlmZiAtLWdpdCBhL09iamVjdHMvY29kZW9iamVjdC5jIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKaW5kZXggOTcxM2Y2MS4uMzUzZjQxNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKQEAgLTc0LDYgKzc0LDExIEBACiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICAvKiBFbnN1cmUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYSByZWFkeSBVbmljb2RlIHN0cmluZyAqLworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoZmlsZW5hbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBuX2NlbGx2YXJzID0gUHlUdXBsZV9HRVRfU0laRShjZWxsdmFycyk7CiAgICAgaW50ZXJuX3N0cmluZ3MobmFtZXMpOwogICAgIGludGVybl9zdHJpbmdzKHZhcm5hbWVzKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvY29tcGxleG9iamVjdC5jIGIvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKaW5kZXggYjA4YWE2Zi4uNjBhMzg4ZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogUHlPYmplY3QgKgogUHlDb21wbGV4X0Zyb21DQ29tcGxleChQeV9jb21wbGV4IGN2YWwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlDb21wbGV4T2JqZWN0ICpvcDsKKyAgICBQeUNvbXBsZXhPYmplY3QgKm9wOwogCiAgICAgLyogSW5saW5lIFB5T2JqZWN0X05ldyAqLwogICAgIG9wID0gKFB5Q29tcGxleE9iamVjdCAqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKFB5Q29tcGxleE9iamVjdCkpOwpAQCAtMjcxLDYgKzI3MSwxMiBAQAogICAgIGlmIChmKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGYsIE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoZik7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCAmJiAhUHlDb21wbGV4X0NoZWNrKHJlcykpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIl9fY29tcGxleF9fIHNob3VsZCByZXR1cm4gYSBjb21wbGV4IG9iamVjdCIpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKQEAgLTI5NiwxMiArMzAyLDYgQEAKICAgICBuZXdvcCA9IHRyeV9jb21wbGV4X3NwZWNpYWxfbWV0aG9kKG9wKTsKIAogICAgIGlmIChuZXdvcCkgewotICAgICAgICBpZiAoIVB5Q29tcGxleF9DaGVjayhuZXdvcCkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIl9fY29tcGxleF9fIHNob3VsZCByZXR1cm4gYSBjb21wbGV4IG9iamVjdCIpOwotICAgICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKLSAgICAgICAgICAgIHJldHVybiBjdjsKLSAgICAgICAgfQogICAgICAgICBjdiA9ICgoUHlDb21wbGV4T2JqZWN0ICopbmV3b3ApLT5jdmFsOwogICAgICAgICBQeV9ERUNSRUYobmV3b3ApOwogICAgICAgICByZXR1cm4gY3Y7CkBAIC03MDUsNyArNzA1LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlDb21wbGV4X0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtNzczLDggKzc3Myw5IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk1Myw4ICs5NTQsOSBAQAogICAgICAgICBuYmkgPSBpLT5vYl90eXBlLT50cF9hc19udW1iZXI7CiAgICAgaWYgKG5iciA9PSBOVUxMIHx8IG5ici0+bmJfZmxvYXQgPT0gTlVMTCB8fAogICAgICAgICAoKGkgIT0gTlVMTCkgJiYgKG5iaSA9PSBOVUxMIHx8IG5iaS0+bmJfZmxvYXQgPT0gTlVMTCkpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHIpLT50cF9uYW1lKTsKICAgICAgICAgaWYgKG93bl9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvZGVzY3JvYmplY3QuYyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwppbmRleCBiYTk4YTMwLi4zMTJmYzQwIDEwMDY0NAotLS0gYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICgoUHlUeXBlT2JqZWN0ICopdHlwZSktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHR5cGUpOworICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHR5cGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICBpZiAoZGVzY3JfY2hlY2soKFB5RGVzY3JPYmplY3QgKilkZXNjciwgb2JqLCAmcmVzKSkKICAgICAgICAgcmV0dXJuIHJlczsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgb2JqKTsKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBvYmosIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCBzZWxmKTsKKyAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBzZWxmLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBhcmdjKTsKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgc2VsZik7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgc2VsZiwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CkBAIC0zOTgsNiArMzk4LDI0IEBACiAgICAgcmV0dXJuIGRlc2NyLT5kX3F1YWxuYW1lOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGVzY3JfcmVkdWNlKFB5RGVzY3JPYmplY3QgKmRlc2NyKQoreworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTykiLCBnZXRhdHRyLCBQeURlc2NyX1RZUEUoZGVzY3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGVzY3JfTkFNRShkZXNjcikpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgZGVzY3JfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilkZXNjcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIHN0YXRpYyBQeU1lbWJlckRlZiBkZXNjcl9tZW1iZXJzW10gPSB7CiAgICAgeyJfX29iamNsYXNzX18iLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlEZXNjck9iamVjdCwgZF90eXBlKSwgUkVBRE9OTFl9LAogICAgIHsiX19uYW1lX18iLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlEZXNjck9iamVjdCwgZF9uYW1lKSwgUkVBRE9OTFl9LApAQCAtNDk0LDcgKzUxMiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTMyLDcgKzU1MCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTY5LDcgKzU4Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZW1iZXJfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNjQzLDcgKzY2MSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICB3cmFwcGVyZGVzY3JfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMTAwOSw3ICsxMDI3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB3cmFwcGVyX3JpY2hjb21wYXJlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG9wKQogewotICAgIGludCByZXN1bHQ7CisgICAgUHlfaW50cHRyX3QgcmVzdWx0OwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5V3JhcHBlckRlc2NyT2JqZWN0ICphX2Rlc2NyLCAqYl9kZXNjcjsKIApAQCAtMTA4NSw2ICsxMTAzLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3AtPnNlbGYpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgord3JhcHBlcl9yZWR1Y2Uod3JhcHBlcm9iamVjdCAqd3ApCit7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9PKSIsIGdldGF0dHIsIHdwLT5zZWxmLCBQeURlc2NyX05BTUUod3AtPmRlc2NyKSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiB3cmFwcGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pd3JhcHBlcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIHN0YXRpYyBQeU1lbWJlckRlZiB3cmFwcGVyX21lbWJlcnNbXSA9IHsKICAgICB7Il9fc2VsZl9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHdyYXBwZXJvYmplY3QsIHNlbGYpLCBSRUFET05MWX0sCiAgICAgezB9CkBAIC0xMTkzLDcgKzEyMjgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgd3JhcHBlcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgd3JhcHBlcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgd3JhcHBlcl9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZGljdG9iamVjdC5jIGIvT2JqZWN0cy9kaWN0b2JqZWN0LmMKaW5kZXggN2FhNWVhOC4uYmZjNzMwYiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9kaWN0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kaWN0b2JqZWN0LmMKQEAgLTY5LDYgKzY5LDExIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2VxLmgiCiAKKy8qW2NsaW5pY10KK2NsYXNzIGRpY3QKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiBtZV9rZXkuICovCiAgICAgUHlfaGFzaF90IG1lX2hhc2g7CkBAIC05NSwyMCArMTAwLDYgQEAKIGl0J3MgVVNBQkxFX0ZSQUNUSU9OIChjdXJyZW50bHkgdHdvLXRoaXJkcykgZnVsbC4KICovCiAKLS8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKLSAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCi0gKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwotc3RhdGljIHZvaWQKLXNldF9rZXlfZXJyb3IoUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqdHVwOwotICAgIHR1cCA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOwotICAgIGlmICghdHVwKQotICAgICAgICByZXR1cm47IC8qIGNhbGxlciB3aWxsIGV4cGVjdCBlcnJvciB0byBiZSBzZXQgYW55d2F5ICovCi0gICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCB0dXApOwotICAgIFB5X0RFQ1JFRih0dXApOwotfQotCiAjZGVmaW5lIFBFUlRVUkJfU0hJRlQgNQogCiAvKgpAQCAtMzA1LDkgKzI5Niw5IEBACiAgKiAjZGVmaW5lIFVTQUJMRV9GUkFDVElPTihuKSAoKChuKSA+PiAxKSArICgobikgPj4gMikgLSAoKG4pID4+IDMpKQogKi8KIAotLyogR1JPV1RIX1JBVEUuIEdyb3d0aCByYXRlIHVwb24gaGl0dGluZyBtYXhpbXVtIGxvYWQuIAotICogQ3VycmVudGx5IHNldCB0byB1c2VkKjIgKyBjYXBhY2l0eS8yLiAKLSAqIFRoaXMgbWVhbnMgdGhhdCBkaWN0cyBkb3VibGUgaW4gc2l6ZSB3aGVuIGdyb3dpbmcgd2l0aG91dCBkZWxldGlvbnMsIAorLyogR1JPV1RIX1JBVEUuIEdyb3d0aCByYXRlIHVwb24gaGl0dGluZyBtYXhpbXVtIGxvYWQuCisgKiBDdXJyZW50bHkgc2V0IHRvIHVzZWQqMiArIGNhcGFjaXR5LzIuCisgKiBUaGlzIG1lYW5zIHRoYXQgZGljdHMgZG91YmxlIGluIHNpemUgd2hlbiBncm93aW5nIHdpdGhvdXQgZGVsZXRpb25zLAogICogYnV0IGhhdmUgbW9yZSBoZWFkIHJvb20gd2hlbiB0aGUgbnVtYmVyIG9mIGRlbGV0aW9ucyBpcyBvbiBhIHBhciB3aXRoIHRoZQogICogbnVtYmVyIG9mIGluc2VydGlvbnMuCiAgKiBSYWlzaW5nIHRoaXMgdG8gdXNlZCo0IGRvdWJsZXMgbWVtb3J5IGNvbnN1bXB0aW9uIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZgpAQCAtMzg5LDYgKzM4MCw3IEBACiBuZXdfZGljdChQeURpY3RLZXlzT2JqZWN0ICprZXlzLCBQeU9iamVjdCAqKnZhbHVlcykKIHsKICAgICBQeURpY3RPYmplY3QgKm1wOworICAgIGFzc2VydChrZXlzICE9IE5VTEwpOwogICAgIGlmIChudW1mcmVlKSB7CiAgICAgICAgIG1wID0gZnJlZV9saXN0Wy0tbnVtZnJlZV07CiAgICAgICAgIGFzc2VydCAobXAgIT0gTlVMTCk7CkBAIC00MzEsNyArNDIzLDEwIEBACiBQeU9iamVjdCAqCiBQeURpY3RfTmV3KHZvaWQpCiB7Ci0gICAgcmV0dXJuIG5ld19kaWN0KG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCksIE5VTEwpOworICAgIFB5RGljdEtleXNPYmplY3QgKmtleXMgPSBuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpOworICAgIGlmIChrZXlzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBuZXdfZGljdChrZXlzLCBOVUxMKTsKIH0KIAogLyoKQEAgLTQ2MywxMyArNDU4LDEzIEBACiBsb29rZGljdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKKyAgICBzaXplX3QgbWFzazsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKLSAgICByZWdpc3RlciBpbnQgY21wOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBpbnQgY21wOwogICAgIFB5T2JqZWN0ICpzdGFydGtleTsKIAogdG9wOgpAQCAtNTU1LDEyICs1NTAsMTIgQEAKIGxvb2tkaWN0X3VuaWNvZGUoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtNjIwLDExICs2MTUsMTEgQEAKIGxvb2tkaWN0X3VuaWNvZGVfbm9kdW1teShQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwID0gJm1wLT5tYV9rZXlzLT5ka19lbnRyaWVzWzBdOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCiAgICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCkBAIC02NjUsMTEgKzY2MCwxMSBAQAogbG9va2RpY3Rfc3BsaXQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwID0gJm1wLT5tYV9rZXlzLT5ka19lbnRyaWVzWzBdOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAKICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkpIHsKICAgICAgICAgZXAgPSBsb29rZGljdChtcCwga2V5LCBoYXNoLCB2YWx1ZV9hZGRyKTsKQEAgLTEyMzcsNyArMTIzMiw3IEBACiAgICAgaWYgKGVwID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoKnZhbHVlX2FkZHIgPT0gTlVMTCkgewotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIG9sZF92YWx1ZSA9ICp2YWx1ZV9hZGRyOwpAQCAtMTM5MSw3ICsxMzg2LDcgQEAKICAgICAgICAgfQogICAgICAgICBES19ERUNSRUYoa2V5cyk7CiAgICAgfQotICAgIGVsc2UgeworICAgIGVsc2UgaWYgKGtleXMgIT0gTlVMTCkgewogICAgICAgICBhc3NlcnQoa2V5cy0+ZGtfcmVmY250ID09IDEpOwogICAgICAgICBES19ERUNSRUYoa2V5cyk7CiAgICAgfQpAQCAtMTQwNyw5ICsxNDAyLDkgQEAKIGRpY3RfcmVwcihQeURpY3RPYmplY3QgKm1wKQogewogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqcywgKnRlbXAsICpjb2xvbiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnBpZWNlcyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOwotICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKyAgICBQeU9iamVjdCAqa2V5ID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKKyAgICBpbnQgZmlyc3Q7CiAKICAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKW1wKTsKICAgICBpZiAoaSAhPSAwKSB7CkBAIC0xNDE3LDcxICsxNDEyLDczIEBACiAgICAgfQogCiAgICAgaWYgKG1wLT5tYV91c2VkID09IDApIHsKLSAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoInt9Iik7Ci0gICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1wKTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ7fSIpOwogICAgIH0KIAotICAgIHBpZWNlcyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHBpZWNlcyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIC8qICJ7IiArICIxOiAyIiArICIsIDM6IDQiICogKGxlbiAtIDEpICsgIn0iICovCisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAxICsgNCArICgyICsgNCkgKiAobXAtPm1hX3VzZWQgLSAxKSArIDE7CiAKLSAgICBjb2xvbiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI6ICIpOwotICAgIGlmIChjb2xvbiA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICd7JykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgLyogRG8gcmVwcigpIG9uIGVhY2gga2V5K3ZhbHVlIHBhaXIsIGFuZCBpbnNlcnQgIjogIiBiZXR3ZWVuIHRoZW0uCiAgICAgICAgTm90ZSB0aGF0IHJlcHIgbWF5IG11dGF0ZSB0aGUgZGljdC4gKi8KICAgICBpID0gMDsKKyAgICBmaXJzdCA9IDE7CiAgICAgd2hpbGUgKFB5RGljdF9OZXh0KChQeU9iamVjdCAqKW1wLCAmaSwgJmtleSwgJnZhbHVlKSkgewotICAgICAgICBpbnQgc3RhdHVzOworICAgICAgICBQeU9iamVjdCAqczsKKyAgICAgICAgaW50IHJlczsKKwogICAgICAgICAvKiBQcmV2ZW50IHJlcHIgZnJvbSBkZWxldGluZyBrZXkgb3IgdmFsdWUgZHVyaW5nIGtleSBmb3JtYXQuICovCiAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworCisgICAgICAgIGlmICghZmlyc3QpIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZmlyc3QgPSAwOworCiAgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKGtleSk7Ci0gICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJnMsIGNvbG9uKTsKLSAgICAgICAgUHlVbmljb2RlX0FwcGVuZEFuZERlbCgmcywgUHlPYmplY3RfUmVwcih2YWx1ZSkpOwotICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgc3RhdHVzID0gUHlMaXN0X0FwcGVuZChwaWVjZXMsIHMpOwotICAgICAgICBQeV9ERUNSRUYocyk7ICAvKiBhcHBlbmQgY3JlYXRlZCBhIG5ldyByZWYgKi8KLSAgICAgICAgaWYgKHN0YXR1cyA8IDApCi0gICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpOworICAgICAgICBQeV9ERUNSRUYocyk7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICI6ICIsIDIpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIodmFsdWUpOworICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKTsKKyAgICAgICAgUHlfREVDUkVGKHMpOworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgUHlfQ0xFQVIoa2V5KTsKKyAgICAgICAgUHlfQ0xFQVIodmFsdWUpOwogICAgIH0KIAotICAgIC8qIEFkZCAie30iIGRlY29yYXRpb25zIHRvIHRoZSBmaXJzdCBhbmQgbGFzdCBpdGVtcy4gKi8KLSAgICBhc3NlcnQoUHlMaXN0X0dFVF9TSVpFKHBpZWNlcykgPiAwKTsKLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoInsiKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgdGVtcCA9IFB5TGlzdF9HRVRfSVRFTShwaWVjZXMsIDApOwotICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnMsIHRlbXApOwotICAgIFB5TGlzdF9TRVRfSVRFTShwaWVjZXMsIDAsIHMpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ30nKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIn0iKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgdGVtcCA9IFB5TGlzdF9HRVRfSVRFTShwaWVjZXMsIFB5TGlzdF9HRVRfU0laRShwaWVjZXMpIC0gMSk7Ci0gICAgUHlVbmljb2RlX0FwcGVuZEFuZERlbCgmdGVtcCwgcyk7Ci0gICAgUHlMaXN0X1NFVF9JVEVNKHBpZWNlcywgUHlMaXN0X0dFVF9TSVpFKHBpZWNlcykgLSAxLCB0ZW1wKTsKLSAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0KLSAgICAvKiBQYXN0ZSB0aGVtIGFsbCB0b2dldGhlciB3aXRoICIsICIgYmV0d2Vlbi4gKi8KLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwgIik7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Kb2luKHMsIHBpZWNlcyk7Ci0gICAgUHlfREVDUkVGKHMpOwotCi1Eb25lOgotICAgIFB5X1hERUNSRUYocGllY2VzKTsKLSAgICBQeV9YREVDUkVGKGNvbG9uKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbXApOwotICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CisKK2Vycm9yOgorICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltcCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOworICAgIFB5X1hERUNSRUYoa2V5KTsKKyAgICBQeV9YREVDUkVGKHZhbHVlKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKQEAgLTE0OTEsNyArMTQ4OCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3N1YnNjcmlwdChQeURpY3RPYmplY3QgKm1wLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGljdF9zdWJzY3JpcHQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBQeU9iamVjdCAqdjsKICAgICBQeV9oYXNoX3QgaGFzaDsKQEAgLTE1MjMsNyArMTUyMCw3IEBACiAgICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlCkBAIC0xNTQ3LDEwICsxNTQ0LDEwIEBACiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9rZXlzKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2tleXMoUHlEaWN0T2JqZWN0ICptcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGo7CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlfc3NpemVfdCBpLCBqOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeV9zc2l6ZV90IHNpemUsIG4sIG9mZnNldDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKQEAgLTE1OTEsMTAgKzE1ODgsMTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfdmFsdWVzKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X3ZhbHVlcyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGo7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTE2MzMsMTAgKzE2MzAsMTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfaXRlbXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfaXRlbXMoUHlEaWN0T2JqZWN0ICptcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIG47CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlfc3NpemVfdCBpLCBqLCBuOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICppdGVtLCAqa2V5OwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKQEAgLTE5MDgsOCArMTkwNSw4IEBACiBpbnQKIFB5RGljdF9NZXJnZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIsIGludCBvdmVycmlkZSkKIHsKLSAgICByZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCAqb3RoZXI7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBuOworICAgIFB5RGljdE9iamVjdCAqbXAsICpvdGhlcjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgUHlEaWN0S2V5RW50cnkgKmVudHJ5OwogCiAgICAgLyogV2UgYWNjZXB0IGZvciB0aGUgYXJndW1lbnQgZWl0aGVyIGEgY29uY3JldGUgZGljdGlvbmFyeSBvYmplY3QsCkBAIC0yMDA2LDcgKzIwMDMsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jb3B5KHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2NvcHkoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICByZXR1cm4gUHlEaWN0X0NvcHkoKFB5T2JqZWN0KiltcCk7CiB9CkBAIC0yMTE4LDEzICsyMTE1LDE4IEBACiAgICAgICAgIGlmIChhdmFsICE9IE5VTEwpIHsKICAgICAgICAgICAgIGludCBjbXA7CiAgICAgICAgICAgICBQeU9iamVjdCAqYnZhbDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqdmFkZHI7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gZXAtPm1lX2tleTsKICAgICAgICAgICAgIC8qIHRlbXBvcmFyaWx5IGJ1bXAgYXZhbCdzIHJlZmNvdW50IHRvIGVuc3VyZSBpdCBzdGF5cwogICAgICAgICAgICAgICAgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoIGl0ICovCiAgICAgICAgICAgICBQeV9JTkNSRUYoYXZhbCk7CiAgICAgICAgICAgICAvKiBkaXR0byBmb3Iga2V5ICovCiAgICAgICAgICAgICBQeV9JTkNSRUYoa2V5KTsKLSAgICAgICAgICAgIGJ2YWwgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcigoUHlPYmplY3QgKiliLCBrZXkpOworICAgICAgICAgICAgLyogcmV1c2UgdGhlIGtub3duIGhhc2ggdmFsdWUgKi8KKyAgICAgICAgICAgIGlmICgoYi0+bWFfa2V5cy0+ZGtfbG9va3VwKShiLCBrZXksIGVwLT5tZV9oYXNoLCAmdmFkZHIpID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnZhbCA9IE5VTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnZhbCA9ICp2YWRkcjsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICAgICAgaWYgKGJ2YWwgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhdmFsKTsKQEAgLTIxNjIsOSArMjE2NCwyOSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qW2NsaW5pY10KKworQGNvZXhpc3QKK2RpY3QuX19jb250YWluc19fCisKKyAga2V5OiBvYmplY3QKKyAgLworCitUcnVlIGlmIEQgaGFzIGEga2V5IGssIGVsc2UgRmFsc2UiCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihkaWN0X19fY29udGFpbnNfX19fZG9jX18sCisiX19jb250YWluc19fKGtleSlcbiIKKyJUcnVlIGlmIEQgaGFzIGEga2V5IGssIGVsc2UgRmFsc2VcIiIpOworCisjZGVmaW5lIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRiAgICBcCisgICAgeyJfX2NvbnRhaW5zX18iLCAoUHlDRnVuY3Rpb24pZGljdF9fX2NvbnRhaW5zX18sIE1FVEhfT3xNRVRIX0NPRVhJU1QsIGRpY3RfX19jb250YWluc19fX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NvbnRhaW5zKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpCitkaWN0X19fY29udGFpbnNfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSkKKy8qW2NsaW5pYyBjaGVja3N1bTogM2JiYWM1Y2U4OThhZTYzMGQ5NjY4ZmExYzhiM2FmYjY0NWZmMjJlOF0qLwogeworICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopc2VsZjsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9hZGRyOwpAQCAtMjE4Miw3ICsyMjA0LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfZ2V0KHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQorZGljdF9nZXQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeU9iamVjdCAqZmFpbG9iaiA9IFB5X05vbmU7CkBAIC0yMjEwLDE5ICsyMjMyLDE5IEBACiAgICAgcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfc2V0ZGVmYXVsdChyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK1B5T2JqZWN0ICoKK1B5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpkLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdG9iaikKIHsKLSAgICBQeU9iamVjdCAqa2V5OwotICAgIFB5T2JqZWN0ICpmYWlsb2JqID0gUHlfTm9uZTsKKyAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7CiAgICAgUHlPYmplY3QgKnZhbCA9IE5VTEw7CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5T2JqZWN0ICoqdmFsdWVfYWRkcjsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNldGRlZmF1bHQiLCAxLCAyLCAma2V5LCAmZmFpbG9iaikpCisgICAgaWYgKCFQeURpY3RfQ2hlY2soZCkpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwotCisgICAgfQogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fAogICAgICAgICAoaGFzaCA9ICgoUHlBU0NJSU9iamVjdCAqKSBrZXkpLT5oYXNoKSA9PSAtMSkgewogICAgICAgICBoYXNoID0gUHlPYmplY3RfSGFzaChrZXkpOwpAQCAtMjI0MCwyMyArMjI2MiwzNSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXAgPSBmaW5kX2VtcHR5X3Nsb3QobXAsIGtleSwgaGFzaCwgJnZhbHVlX2FkZHIpOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihmYWlsb2JqKTsKKyAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHRvYmopOwogICAgICAgICBQeV9JTkNSRUYoa2V5KTsKLSAgICAgICAgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgZmFpbG9iaik7CisgICAgICAgIE1BSU5UQUlOX1RSQUNLSU5HKG1wLCBrZXksIGRlZmF1bHRvYmopOwogICAgICAgICBlcC0+bWVfa2V5ID0ga2V5OwogICAgICAgICBlcC0+bWVfaGFzaCA9IGhhc2g7Ci0gICAgICAgICp2YWx1ZV9hZGRyID0gZmFpbG9iajsKLSAgICAgICAgdmFsID0gZmFpbG9iajsKKyAgICAgICAgKnZhbHVlX2FkZHIgPSBkZWZhdWx0b2JqOworICAgICAgICB2YWwgPSBkZWZhdWx0b2JqOwogICAgICAgICBtcC0+bWFfa2V5cy0+ZGtfdXNhYmxlLS07CiAgICAgICAgIG1wLT5tYV91c2VkKys7CiAgICAgfQotICAgIFB5X0lOQ1JFRih2YWwpOwogICAgIHJldHVybiB2YWw7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0X3NldGRlZmF1bHQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmtleSwgKnZhbDsKKyAgICBQeU9iamVjdCAqZGVmYXVsdG9iaiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJmtleSwgJmRlZmF1bHRvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHZhbCA9IFB5RGljdF9TZXREZWZhdWx0KChQeU9iamVjdCAqKW1wLCBrZXksIGRlZmF1bHRvYmopOworICAgIFB5X1hJTkNSRUYodmFsKTsKKyAgICByZXR1cm4gdmFsOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jbGVhcihyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9jbGVhcihQeURpY3RPYmplY3QgKm1wKQogewogICAgIFB5RGljdF9DbGVhcigoUHlPYmplY3QgKiltcCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0yMjc4LDcgKzIzMTIsNyBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmx0KTsKICAgICAgICAgICAgIHJldHVybiBkZWZsdDsKICAgICAgICAgfQotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CkBAIC0yMjk2LDcgKzIzMzAsNyBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmx0KTsKICAgICAgICAgICAgIHJldHVybiBkZWZsdDsKICAgICAgICAgfQotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgKnZhbHVlX2FkZHIgPSBOVUxMOwpAQCAtMjQzNyw5ICsyNDcxLDYgQEAKICAgICByZXR1cm4gc2l6ZW9mKFB5RGljdEtleXNPYmplY3QpICsgKERLX1NJWkUoa2V5cyktMSkgKiBzaXplb2YoUHlEaWN0S2V5RW50cnkpOwogfQogCi1QeURvY19TVFJWQVIoY29udGFpbnNfX2RvY19fLAotIkQuX19jb250YWluc19fKGspIC0+IFRydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZSIpOwotCiBQeURvY19TVFJWQVIoZ2V0aXRlbV9fZG9jX18sICJ4Ll9fZ2V0aXRlbV9fKHkpIDw9PT4geFt5XSIpOwogCiBQeURvY19TVFJWQVIoc2l6ZW9mX19kb2NfXywKQEAgLTI0NjAsMTAgKzI0OTEsMTAgQEAKIDItdHVwbGU7IGJ1dCByYWlzZSBLZXlFcnJvciBpZiBEIGlzIGVtcHR5LiIpOwogCiBQeURvY19TVFJWQVIodXBkYXRlX19kb2NfXywKLSJELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gZGljdC9pdGVyYWJsZSBFIGFuZCBGLlxuIgotIklmIEUgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgayBpbiBFOiBEW2tdID0gRVtrXVxuXAotSWYgRSBwcmVzZW50IGFuZCBsYWNrcyAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciAoaywgdikgaW4gRTogRFtrXSA9IHZcblwKLUluIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgayBpbiBGOiBEW2tdID0gRltrXSIpOworIkQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBkaWN0L2l0ZXJhYmxlIEUgYW5kIEYuXG5cCitJZiBFIGlzIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCB0aGVuIGRvZXM6ICBmb3IgayBpbiBFOiBEW2tdID0gRVtrXVxuXAorSWYgRSBpcyBwcmVzZW50IGFuZCBsYWNrcyBhIC5rZXlzKCkgbWV0aG9kLCB0aGVuIGRvZXM6ICBmb3IgaywgdiBpbiBFOiBEW2tdID0gdlxuXAorSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrIGluIEY6ICBEW2tdID0gRltrXSIpOwogCiBQeURvY19TVFJWQVIoZnJvbWtleXNfX2RvY19fLAogImRpY3QuZnJvbWtleXMoU1ssdl0pIC0+IE5ldyBkaWN0IHdpdGgga2V5cyBmcm9tIFMgYW5kIHZhbHVlcyBlcXVhbCB0byB2LlxuXApAQCAtMjQ4OCw4ICsyNTE5LDcgQEAKICAgICAgICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtYXBwX21ldGhvZHNbXSA9IHsKLSAgICB7Il9fY29udGFpbnNfXyIsKFB5Q0Z1bmN0aW9uKWRpY3RfY29udGFpbnMsICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCi0gICAgIGNvbnRhaW5zX19kb2NfX30sCisgICAgRElDVF9fX0NPTlRBSU5TX19fTUVUSE9EREVGCiAgICAgeyJfX2dldGl0ZW1fXyIsIChQeUNGdW5jdGlvbilkaWN0X3N1YnNjcmlwdCwgICAgICAgIE1FVEhfTyB8IE1FVEhfQ09FWElTVCwKICAgICAgZ2V0aXRlbV9fZG9jX199LAogICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3Rfc2l6ZW9mLCAgICAgICBNRVRIX05PQVJHUywKQEAgLTI1NjgsMjIgKzI1OTgsMjMgQEAKIGRpY3RfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICpzZWxmOworICAgIFB5RGljdE9iamVjdCAqZDsKIAogICAgIGFzc2VydCh0eXBlICE9IE5VTEwgJiYgdHlwZS0+dHBfYWxsb2MgIT0gTlVMTCk7CiAgICAgc2VsZiA9IHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwotICAgIGlmIChzZWxmICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0T2JqZWN0ICpkID0gKFB5RGljdE9iamVjdCAqKXNlbGY7Ci0gICAgICAgIGQtPm1hX2tleXMgPSBuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpOwotICAgICAgICAvKiBYWFggLSBTaG91bGQgd2UgcmFpc2UgYSBuby1tZW1vcnkgZXJyb3I/ICovCi0gICAgICAgIGlmIChkLT5tYV9rZXlzID09IE5VTEwpIHsKLSAgICAgICAgICAgIERLX0lOQ1JFRihQeV9FTVBUWV9LRVlTKTsKLSAgICAgICAgICAgIGQtPm1hX2tleXMgPSBQeV9FTVBUWV9LRVlTOwotICAgICAgICAgICAgZC0+bWFfdmFsdWVzID0gZW1wdHlfdmFsdWVzOwotICAgICAgICB9Ci0gICAgICAgIGQtPm1hX3VzZWQgPSAwOwotICAgICAgICAvKiBUaGUgb2JqZWN0IGhhcyBiZWVuIGltcGxpY2l0bHkgdHJhY2tlZCBieSB0cF9hbGxvYyAqLwotICAgICAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCi0gICAgICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhkKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkID0gKFB5RGljdE9iamVjdCAqKXNlbGY7CisKKyAgICAvKiBUaGUgb2JqZWN0IGhhcyBiZWVuIGltcGxpY2l0bHkgdHJhY2tlZCBieSB0cF9hbGxvYyAqLworICAgIGlmICh0eXBlID09ICZQeURpY3RfVHlwZSkKKyAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisKKyAgICBkLT5tYV91c2VkID0gMDsKKyAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKKyAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMjY1OSw4ICsyNjkwLDEwIEBACiB7CiAgICAgUHlPYmplY3QgKmt2OwogICAgIGt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KLSAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICBpZiAoa3YgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9HZXRJdGVtKGRwLCBrdik7CiB9CiAKQEAgLTI2NzEsOCArMjcwNCwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdiwgKnJ2OwogICAgIGt2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoa2V5KTsKLSAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICBpZiAoa3YgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcnYgPSBQeURpY3RfR2V0SXRlbSh2LCBrdik7CiAgICAgUHlfREVDUkVGKGt2KTsKICAgICByZXR1cm4gcnY7CkBAIC0yNzAzLDYgKzI3MzgsMTUgQEAKIH0KIAogaW50CitfUHlEaWN0X0RlbEl0ZW1JZChQeU9iamVjdCAqdiwgX1B5X0lkZW50aWZpZXIgKmtleSkKK3sKKyAgICBQeU9iamVjdCAqa3YgPSBfUHlVbmljb2RlX0Zyb21JZChrZXkpOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChrdiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFB5RGljdF9EZWxJdGVtKHYsIGt2KTsKK30KKworaW50CiBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqdiwgY29uc3QgY2hhciAqa2V5KQogewogICAgIFB5T2JqZWN0ICprdjsKQEAgLTI3OTUsOCArMjgzOSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0a2V5KGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwotICAgIHJlZ2lzdGVyIFB5RGljdEtleXNPYmplY3QgKms7CisgICAgUHlfc3NpemVfdCBpLCBtYXNrLCBvZmZzZXQ7CisgICAgUHlEaWN0S2V5c09iamVjdCAqazsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjg3OCw3ICsyOTIyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHR2YWx1ZShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCkBAIC0yOTU5LDcgKzMwMDMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGl0ZW0oZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZSwgKnJlc3VsdCA9IGRpLT5kaV9yZXN1bHQ7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBtYXNrLCBvZmZzZXQ7CisgICAgUHlfc3NpemVfdCBpLCBtYXNrLCBvZmZzZXQ7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvZXhjZXB0aW9ucy5jIGIvT2JqZWN0cy9leGNlcHRpb25zLmMKaW5kZXggNmIwNDcwMC4uYWY0MGJjOCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9leGNlcHRpb25zLmMKKysrIGIvT2JqZWN0cy9leGNlcHRpb25zLmMKQEAgLTEyMSwxMSArMTIxLDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogQmFzZUV4Y2VwdGlvbl9yZXByKFB5QmFzZUV4Y2VwdGlvbk9iamVjdCAqc2VsZikKIHsKLSAgICBjaGFyICpuYW1lOwotICAgIGNoYXIgKmRvdDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGNoYXIgKmRvdDsKIAotICAgIG5hbWUgPSAoY2hhciAqKVB5X1RZUEUoc2VsZiktPnRwX25hbWU7Ci0gICAgZG90ID0gc3RycmNocihuYW1lLCAnLicpOworICAgIG5hbWUgPSBQeV9UWVBFKHNlbGYpLT50cF9uYW1lOworICAgIGRvdCA9IChjb25zdCBjaGFyICopIHN0cnJjaHIobmFtZSwgJy4nKTsKICAgICBpZiAoZG90ICE9IE5VTEwpIG5hbWUgPSBkb3QrMTsKIAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMlUiIsIG5hbWUsIHNlbGYtPmFyZ3MpOwpAQCAtODQ1LDcgKzg0NSw3IEBACiAgICAgLyogU3RlYWxzIHRoZSByZWZlcmVuY2UgdG8gYXJncyAqLwogICAgIFB5X0NMRUFSKHNlbGYtPmFyZ3MpOwogICAgIHNlbGYtPmFyZ3MgPSBhcmdzOwotICAgIGFyZ3MgPSBOVUxMOworICAgICpwX2FyZ3MgPSBhcmdzID0gTlVMTDsKIAogICAgIHJldHVybiAwOwogfQpAQCAtODg1LDExICs4ODUsMTIgQEAKICAgICBQeU9iamVjdCAqd2luZXJyb3IgPSBOVUxMOwogI2VuZGlmCiAKKyAgICBQeV9JTkNSRUYoYXJncyk7CisKICAgICBpZiAoIW9zZXJyb3JfdXNlX2luaXQodHlwZSkpIHsKICAgICAgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3Jkcyh0eXBlLT50cF9uYW1lLCBrd2RzKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICBQeV9JTkNSRUYoYXJncyk7CiAgICAgICAgIGlmIChvc2Vycm9yX3BhcnNlX2FyZ3MoJmFyZ3MsICZteWVycm5vLCAmc3RyZXJyb3IsICZmaWxlbmFtZQogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICZ3aW5lcnJvcgpAQCAtOTMyLDYgKzkzMyw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAorICAgIFB5X1hERUNSRUYoYXJncyk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOwogCiBlcnJvcjoKQEAgLTIzMjcsNyArMjMyOSw3IEBACiAgICAgfQogCiAjaWZkZWYgTVNfV0lORE9XUwotI2luY2x1ZGUgPFdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KIC8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHdlcmUgYWRkZWQgdG8gZXJybm8uaCBpbiBWUzIwMTAgYnV0IGhhdmUKICAgIHByZWZlcnJlZCBXU0EgZXF1aXZhbGVudHMuICovCiAjdW5kZWYgRUFERFJJTlVTRQpAQCAtMjU5MSwzICsyNTkzLDEzMSBAQAogICAgIGZyZWVfcHJlYWxsb2NhdGVkX21lbWVycm9ycygpOwogICAgIFB5X0NMRUFSKGVycm5vbWFwKTsKIH0KKworLyogSGVscGVyIHRvIGRvIHRoZSBlcXVpdmFsZW50IG9mICJyYWlzZSBYIGZyb20gWSIgaW4gQywgYnV0IGFsd2F5cyB1c2luZworICogdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHJhdGhlciB0aGFuIHBhc3Npbmcgb25lIGluLgorICoKKyAqIFdlIGN1cnJlbnRseSBsaW1pdCB0aGlzIHRvICpvbmx5KiBleGNlcHRpb25zIHRoYXQgdXNlIHRoZSBCYXNlRXhjZXB0aW9uCisgKiB0cF9pbml0IGFuZCB0cF9uZXcgbWV0aG9kcywgc2luY2Ugd2UgY2FuIGJlIHJlYXNvbmFibHkgc3VyZSB3ZSBjYW4gd3JhcAorICogdGhvc2UgY29ycmVjdGx5IHdpdGhvdXQgbG9zaW5nIGRhdGEgYW5kIHdpdGhvdXQgbG9zaW5nIGJhY2t3YXJkcworICogY29tcGF0aWJpbGl0eS4KKyAqCisgKiBXZSBhbHNvIGFpbSB0byBydWxlIG91dCAqYWxsKiBleGNlcHRpb25zIHRoYXQgbWlnaHQgYmUgc3RvcmluZyBhZGRpdGlvbmFsCisgKiBzdGF0ZSwgd2hldGhlciBieSBoYXZpbmcgYSBzaXplIGRpZmZlcmVuY2UgcmVsYXRpdmUgdG8gQmFzZUV4Y2VwdGlvbiwKKyAqIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCBpbiBkdXJpbmcgY29uc3RydWN0aW9uIG9yIGJ5IGhhdmluZyBhCisgKiBub24tZW1wdHkgaW5zdGFuY2UgZGljdC4KKyAqCisgKiBXZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB3aXRoIHdoYXQgd2Ugd3JhcCwgc2luY2UgY2hhbmdpbmcgdHlwZXMgdG8KKyAqIGEgYnJvYWRlciBleGNlcHRpb24gdHlwZSB3b3VsZCBiZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGZvcgorICogZXhpc3RpbmcgY29kZWNzLCBhbmQgd2l0aCBkaWZmZXJlbnQgaW5pdCBvciBuZXcgbWV0aG9kIGltcGxlbWVudGF0aW9ucworICogbWF5IGVpdGhlciBub3Qgc3VwcG9ydCBpbnN0YW50aWF0aW9uIHdpdGggUHlFcnJfRm9ybWF0IG9yIGxvc2UKKyAqIGluZm9ybWF0aW9uIHdoZW4gaW5zdGFudGlhdGVkIHRoYXQgd2F5LgorICoKKyAqIFhYWCAobmNvZ2hsYW4pOiBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wcmVoZW5zaXZlIGJ5IGV4cGxvaXRpbmcgdGhlCisgKiBmYWN0IHRoYXQgZXhjZXB0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gc3VwcG9ydCBwaWNrbGluZy4gSWYgbW9yZSBidWlsdGluCisgKiBleGNlcHRpb25zIChlLmcuIEF0dHJpYnV0ZUVycm9yKSBzdGFydCB0byBiZSBjb252ZXJ0ZWQgdG8gcmljaAorICogZXhjZXB0aW9ucyB3aXRoIGFkZGl0aW9uYWwgYXR0cmlidXRlcywgdGhhdCdzIHByb2JhYmx5IGEgYmV0dGVyIGFwcHJvYWNoCisgKiB0byBwdXJzdWUgb3ZlciBhZGRpbmcgc3BlY2lhbCBjYXNlcyBmb3IgcGFydGljdWxhciBzdGF0ZWZ1bCBzdWJjbGFzc2VzLgorICoKKyAqIFJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gdGhlIG5ldyBleGNlcHRpb24gKGlmIGFueSksIE5VTEwgaWYgdGhlCisgKiBleGlzdGluZyBleGNlcHRpb24gd2FzIGxlZnQgaW4gcGxhY2UuCisgKi8KK1B5T2JqZWN0ICoKK19QeUVycl9UcnlTZXRGcm9tQ2F1c2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgUHlPYmplY3QqIG1zZ19wcmVmaXg7CisgICAgUHlPYmplY3QgKmV4YywgKnZhbCwgKnRiOworICAgIFB5VHlwZU9iamVjdCAqY2F1Z2h0X3R5cGU7CisgICAgUHlPYmplY3QgKipkaWN0cHRyOworICAgIFB5T2JqZWN0ICppbnN0YW5jZV9hcmdzOworICAgIFB5X3NzaXplX3QgbnVtX2FyZ3MsIGNhdWdodF90eXBlX3NpemUsIGJhc2VfZXhjX3NpemU7CisgICAgUHlPYmplY3QgKm5ld19leGMsICpuZXdfdmFsLCAqbmV3X3RiOworICAgIHZhX2xpc3QgdmFyZ3M7CisgICAgaW50IHNhbWVfYmFzaWNfc2l6ZTsKKworICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CisgICAgY2F1Z2h0X3R5cGUgPSAoUHlUeXBlT2JqZWN0ICopZXhjOworICAgIC8qIEVuc3VyZSB0eXBlIGluZm8gaW5kaWNhdGVzIG5vIGV4dHJhIHN0YXRlIGlzIHN0b3JlZCBhdCB0aGUgQyBsZXZlbAorICAgICAqIGFuZCB0aGF0IHRoZSB0eXBlIGNhbiBiZSByZWluc3RhbnRpYXRlZCB1c2luZyBQeUVycl9Gb3JtYXQKKyAgICAgKi8KKyAgICBjYXVnaHRfdHlwZV9zaXplID0gY2F1Z2h0X3R5cGUtPnRwX2Jhc2ljc2l6ZTsKKyAgICBiYXNlX2V4Y19zaXplID0gX1B5RXhjX0Jhc2VFeGNlcHRpb24udHBfYmFzaWNzaXplOworICAgIHNhbWVfYmFzaWNfc2l6ZSA9ICgKKyAgICAgICAgY2F1Z2h0X3R5cGVfc2l6ZSA9PSBiYXNlX2V4Y19zaXplIHx8CisgICAgICAgIChQeVR5cGVfU1VQUE9SVFNfV0VBS1JFRlMoY2F1Z2h0X3R5cGUpICYmCisgICAgICAgICAgICAoY2F1Z2h0X3R5cGVfc2l6ZSA9PSBiYXNlX2V4Y19zaXplICsgc2l6ZW9mKFB5T2JqZWN0ICopKQorICAgICAgICApCisgICAgKTsKKyAgICBpZiAoY2F1Z2h0X3R5cGUtPnRwX2luaXQgIT0gKGluaXRwcm9jKUJhc2VFeGNlcHRpb25faW5pdCB8fAorICAgICAgICBjYXVnaHRfdHlwZS0+dHBfbmV3ICE9IEJhc2VFeGNlcHRpb25fbmV3IHx8CisgICAgICAgICFzYW1lX2Jhc2ljX3NpemUgfHwKKyAgICAgICAgY2F1Z2h0X3R5cGUtPnRwX2l0ZW1zaXplICE9IF9QeUV4Y19CYXNlRXhjZXB0aW9uLnRwX2l0ZW1zaXplKSB7CisgICAgICAgIC8qIFdlIGNhbid0IGJlIHN1cmUgd2UgY2FuIHdyYXAgdGhpcyBzYWZlbHksIHNpbmNlIGl0IG1heSBjb250YWluCisgICAgICAgICAqIG1vcmUgc3RhdGUgdGhhbiBqdXN0IHRoZSBleGNlcHRpb24gdHlwZS4gQWNjb3JkaW5nbHksIHdlIGp1c3QKKyAgICAgICAgICogbGVhdmUgaXQgYWxvbmUuCisgICAgICAgICAqLworICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsLCB0Yik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIENoZWNrIHRoZSBhcmdzIGFyZSBlbXB0eSBvciBjb250YWluIGEgc2luZ2xlIHN0cmluZyAqLworICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsLCAmdGIpOworICAgIGluc3RhbmNlX2FyZ3MgPSAoKFB5QmFzZUV4Y2VwdGlvbk9iamVjdCAqKXZhbCktPmFyZ3M7CisgICAgbnVtX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGluc3RhbmNlX2FyZ3MpOworICAgIGlmIChudW1fYXJncyA+IDEgfHwKKyAgICAgICAgKG51bV9hcmdzID09IDEgJiYKKyAgICAgICAgICFQeVVuaWNvZGVfQ2hlY2tFeGFjdChQeVR1cGxlX0dFVF9JVEVNKGluc3RhbmNlX2FyZ3MsIDApKSkpIHsKKyAgICAgICAgLyogTW9yZSB0aGFuIDEgYXJnLCBvciB0aGUgb25lIGFyZyB3ZSBkbyBoYXZlIGlzbid0IGEgc3RyaW5nCisgICAgICAgICAqLworICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsLCB0Yik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIEVuc3VyZSB0aGUgaW5zdGFuY2UgZGljdCBpcyBhbHNvIGVtcHR5ICovCisgICAgZGljdHB0ciA9IF9QeU9iamVjdF9HZXREaWN0UHRyKHZhbCk7CisgICAgaWYgKGRpY3RwdHIgIT0gTlVMTCAmJiAqZGljdHB0ciAhPSBOVUxMICYmCisgICAgICAgIFB5T2JqZWN0X0xlbmd0aCgqZGljdHB0cikgPiAwKSB7CisgICAgICAgIC8qIFdoaWxlIHdlIGNvdWxkIHBvdGVudGlhbGx5IGNvcHkgYSBub24tZW1wdHkgaW5zdGFuY2UgZGljdGlvbmFyeQorICAgICAgICAgKiB0byB0aGUgcmVwbGFjZW1lbnQgZXhjZXB0aW9uLCBmb3Igbm93IHdlIHRha2UgdGhlIG1vcmUKKyAgICAgICAgICogY29uc2VydmF0aXZlIHBhdGggb2YgbGVhdmluZyBleGNlcHRpb25zIHdpdGggYXR0cmlidXRlcyBzZXQKKyAgICAgICAgICogYWxvbmUuCisgICAgICAgICAqLworICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsLCB0Yik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIEZvciBleGNlcHRpb25zIHRoYXQgd2UgY2FuIHdyYXAgc2FmZWx5LCB3ZSBjaGFpbiB0aGUgb3JpZ2luYWwKKyAgICAgKiBleGNlcHRpb24gdG8gYSBuZXcgb25lIG9mIHRoZSBleGFjdCBzYW1lIHR5cGUgd2l0aCBhbgorICAgICAqIGVycm9yIG1lc3NhZ2UgdGhhdCBtZW50aW9ucyB0aGUgYWRkaXRpb25hbCBkZXRhaWxzIGFuZCB0aGUKKyAgICAgKiBvcmlnaW5hbCBleGNlcHRpb24uCisgICAgICoKKyAgICAgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIHdyYXAgT1NFcnJvciBhbmQgdmFyaW91cyBvdGhlciBleGNlcHRpb24KKyAgICAgKiB0eXBlcyBhcyB3ZWxsLCBidXQgdGhhdCdzIHF1aXRlIGEgYml0IHRyaWNraWVyIGR1ZSB0byB0aGUgZXh0cmEKKyAgICAgKiBzdGF0ZSBwb3RlbnRpYWxseSBzdG9yZWQgb24gT1NFcnJvciBpbnN0YW5jZXMuCisgICAgICovCisKKyAgICBQeV9YREVDUkVGKHRiKTsKKworI2lmZGVmIEhBVkVfU1REQVJHX1BST1RPVFlQRVMKKyAgICB2YV9zdGFydCh2YXJncywgZm9ybWF0KTsKKyNlbHNlCisgICAgdmFfc3RhcnQodmFyZ3MpOworI2VuZGlmCisgICAgbXNnX3ByZWZpeCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKKyAgICB2YV9lbmQodmFyZ3MpOworICAgIGlmIChtc2dfcHJlZml4ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGV4Yyk7CisgICAgICAgIFB5X0RFQ1JFRih2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeUVycl9Gb3JtYXQoZXhjLCAiJVUgKCVzOiAlUykiLAorICAgICAgICAgICAgICAgICBtc2dfcHJlZml4LCBQeV9UWVBFKHZhbCktPnRwX25hbWUsIHZhbCk7CisgICAgUHlfREVDUkVGKGV4Yyk7CisgICAgUHlfREVDUkVGKG1zZ19wcmVmaXgpOworICAgIFB5RXJyX0ZldGNoKCZuZXdfZXhjLCAmbmV3X3ZhbCwgJm5ld190Yik7CisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZuZXdfZXhjLCAmbmV3X3ZhbCwgJm5ld190Yik7CisgICAgUHlFeGNlcHRpb25fU2V0Q2F1c2UobmV3X3ZhbCwgdmFsKTsKKyAgICBQeUVycl9SZXN0b3JlKG5ld19leGMsIG5ld192YWwsIG5ld190Yik7CisgICAgcmV0dXJuIG5ld192YWw7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZpbGVvYmplY3QuYyBiL09iamVjdHMvZmlsZW9iamVjdC5jCmluZGV4IDk4ZjQyYTkuLjU5NmY5MDkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmlsZW9iamVjdC5jCisrKyBiL09iamVjdHMvZmlsZW9iamVjdC5jCkBAIC0yNiw4ICsyNiw4IEBACiAvKiBFeHRlcm5hbCBDIGludGVyZmFjZSAqLwogCiBQeU9iamVjdCAqCi1QeUZpbGVfRnJvbUZkKGludCBmZCwgY2hhciAqbmFtZSwgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgIGNoYXIgKmVycm9ycywgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCitQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiB7CiAgICAgUHlPYmplY3QgKmlvLCAqc3RyZWFtOwogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwpAQCAtMzkwLDcgKzM5MCw3IEBACiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZXJybm8gPSAwOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKG4gPiBJTlRfTUFYKQogICAgICAgICBuID0gSU5UX01BWDsKICAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIGMsIChpbnQpbik7CmRpZmYgLS1naXQgYS9PYmplY3RzL2Zsb2F0b2JqZWN0LmMgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKaW5kZXggYTA4YTg1Mi4uMjljM2IzMiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jCisrKyBiL09iamVjdHMvZmxvYXRvYmplY3QuYwpAQCAtOSwxMSArOSw2IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxmbG9hdC5oPgogCi0jdW5kZWYgTUFYCi0jdW5kZWYgTUlOCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKLQogCiAvKiBTcGVjaWFsIGZyZWUgbGlzdAogICAgZnJlZV9saXN0IGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGF2YWlsYWJsZSBQeUZsb2F0T2JqZWN0cywgbGlua2VkCkBAIC0xMTQsNyArMTA5LDcgQEAKIFB5T2JqZWN0ICoKIFB5RmxvYXRfRnJvbURvdWJsZShkb3VibGUgZnZhbCkKIHsKLSAgICByZWdpc3RlciBQeUZsb2F0T2JqZWN0ICpvcCA9IGZyZWVfbGlzdDsKKyAgICBQeUZsb2F0T2JqZWN0ICpvcCA9IGZyZWVfbGlzdDsKICAgICBpZiAob3AgIT0gTlVMTCkgewogICAgICAgICBmcmVlX2xpc3QgPSAoUHlGbG9hdE9iamVjdCAqKSBQeV9UWVBFKG9wKTsKICAgICAgICAgbnVtZnJlZS0tOwpAQCAtMTQ5LDggKzE0NCw5IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHYsICZzLCAmbGVuKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImZsb2F0KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciIpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImZsb2F0KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbGFzdCA9IHMgKyBsZW47CkBAIC0yNDYsNyArMjQyLDcgQEAKIHN0YXRpYyBpbnQKIGNvbnZlcnRfdG9fZG91YmxlKFB5T2JqZWN0ICoqdiwgZG91YmxlICpkYmwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9iaiA9ICp2OworICAgIFB5T2JqZWN0ICpvYmogPSAqdjsKIAogICAgIGlmIChQeUxvbmdfQ2hlY2sob2JqKSkgewogICAgICAgICAqZGJsID0gUHlMb25nX0FzRG91YmxlKG9iaik7CkBAIC0xMTMxLDcgKzExMjcsNyBAQAogICAgIH0KIAogICAgIG0gPSBmcmV4cChmYWJzKHgpLCAmZSk7Ci0gICAgc2hpZnQgPSAxIC0gTUFYKERCTF9NSU5fRVhQIC0gZSwgMCk7CisgICAgc2hpZnQgPSAxIC0gUHlfTUFYKERCTF9NSU5fRVhQIC0gZSwgMCk7CiAgICAgbSA9IGxkZXhwKG0sIHNoaWZ0KTsKICAgICBlIC09IHNoaWZ0OwogCkBAIC0xMjg1LDggKzEyODEsOCBAQAogICAgIGZkaWdpdHMgPSBjb2VmZl9lbmQgLSBzX3N0b3JlOwogICAgIGlmIChuZGlnaXRzID09IDApCiAgICAgICAgIGdvdG8gcGFyc2VfZXJyb3I7Ci0gICAgaWYgKG5kaWdpdHMgPiBNSU4oREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcgLSBMT05HX01JTi8yLAotICAgICAgICAgICAgICAgICAgICAgIExPTkdfTUFYLzIgKyAxIC0gREJMX01BWF9FWFApLzQpCisgICAgaWYgKG5kaWdpdHMgPiBQeV9NSU4oREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcgLSBMT05HX01JTi8yLAorICAgICAgICAgICAgICAgICAgICAgICAgIExPTkdfTUFYLzIgKyAxIC0gREJMX01BWF9FWFApLzQpCiAgICAgICAgIGdvdG8gaW5zYW5lX2xlbmd0aF9lcnJvcjsKIAogICAgIC8qIFtwIDxleHBvbmVudD5dICovCkBAIC0xMzQyLDcgKzEzMzgsNyBAQAogCiAgICAgLyogbHNiID0gZXhwb25lbnQgb2YgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSAqcm91bmRlZCogdmFsdWUuCiAgICAgICAgVGhpcyBpcyB0b3BfZXhwIC0gREJMX01BTlRfRElHIHVubGVzcyByZXN1bHQgaXMgc3Vibm9ybWFsLiAqLwotICAgIGxzYiA9IE1BWCh0b3BfZXhwLCAobG9uZylEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUc7CisgICAgbHNiID0gUHlfTUFYKHRvcF9leHAsIChsb25nKURCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRzsKIAogICAgIHggPSAwLjA7CiAgICAgaWYgKGV4cCA+PSBsc2IpIHsKQEAgLTE0MjEsNyArMTQxNyw3IEBACiA+Pj4gZmxvYXQuZnJvbWhleCgnMHgxLmZmZmZwMTAnKVxuXAogMjA0Ny45ODQzNzVcblwKID4+PiBmbG9hdC5mcm9taGV4KCctMHgxcC0xMDc0JylcblwKLS00Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCIpOworLTVlLTMyNCIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNzExLDcgKzE3MDcsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeUZsb2F0X0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtMTg1OCw3ICsxODU0LDcgQEAKICAgICBmbG9hdF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKIAotdm9pZAoraW50CiBfUHlGbG9hdF9Jbml0KHZvaWQpCiB7CiAgICAgLyogV2UgYXR0ZW1wdCB0byBkZXRlcm1pbmUgaWYgdGhpcyBtYWNoaW5lIGlzIHVzaW5nIElFRUUKQEAgLTE5MDgsOCArMTkwNCwxMSBAQAogICAgIGZsb2F0X2Zvcm1hdCA9IGRldGVjdGVkX2Zsb2F0X2Zvcm1hdDsKIAogICAgIC8qIEluaXQgZmxvYXQgaW5mbyAqLwotICAgIGlmIChGbG9hdEluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmRmxvYXRJbmZvVHlwZSwgJmZsb2F0aW5mb19kZXNjKTsKKyAgICBpZiAoRmxvYXRJbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZGbG9hdEluZm9UeXBlLCAmZmxvYXRpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKaW5kZXggODA4ZTU5NS4uNjNmMDNhNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jCisrKyBiL09iamVjdHMvZnJhbWVvYmplY3QuYwpAQCAtNywxMSArNyw2IEBACiAjaW5jbHVkZSAib3Bjb2RlLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSN1bmRlZiBNSU4KLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIE1BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQotCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeUZyYW1lT2JqZWN0LCB4KQogCiBzdGF0aWMgUHlNZW1iZXJEZWYgZnJhbWVfbWVtYmVybGlzdFtdID0gewpAQCAtMjYsNyArMjEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX2dldGxvY2FscyhQeUZyYW1lT2JqZWN0ICpmLCB2b2lkICpjbG9zdXJlKQogewotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGYpOworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0lOQ1JFRihmLT5mX2xvY2Fscyk7CiAgICAgcmV0dXJuIGYtPmZfbG9jYWxzOwogfQpAQCAtMTYwLDggKzE1Niw4IEBACiAKICAgICAvKiBXZSdyZSBub3cgcmVhZHkgdG8gbG9vayBhdCB0aGUgYnl0ZWNvZGUuICovCiAgICAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoZi0+Zl9jb2RlLT5jb19jb2RlLCAoY2hhciAqKikmY29kZSwgJmNvZGVfbGVuKTsKLSAgICBtaW5fYWRkciA9IE1JTihuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwotICAgIG1heF9hZGRyID0gTUFYKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CisgICAgbWluX2FkZHIgPSBQeV9NSU4obmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKKyAgICBtYXhfYWRkciA9IFB5X01BWChuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwogCiAgICAgLyogWW91IGNhbid0IGp1bXAgb250byBhIGxpbmUgd2l0aCBhbiAnZXhjZXB0JyBzdGF0ZW1lbnQgb24gaXQgLQogICAgICAqIHRoZXkgZXhwZWN0IHRvIGhhdmUgYW4gZXhjZXB0aW9uIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCB3aGljaApAQCAtMjkzLDcgKzI4OSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG1pbl9kZWx0YV9pYmxvY2sgPSBNSU4obWluX2RlbHRhX2libG9jaywgZGVsdGFfaWJsb2NrKTsKKyAgICAgICAgbWluX2RlbHRhX2libG9jayA9IFB5X01JTihtaW5fZGVsdGFfaWJsb2NrLCBkZWx0YV9pYmxvY2spOwogCiAgICAgICAgIGlmIChvcCA+PSBIQVZFX0FSR1VNRU5UKSB7CiAgICAgICAgICAgICBhZGRyICs9IDI7CkBAIC00NjYsNyArNDYyLDcgQEAKIGZyYW1lX3RyYXZlcnNlKFB5RnJhbWVPYmplY3QgKmYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwOwotICAgIGludCBpLCBzbG90czsKKyAgICBQeV9zc2l6ZV90IGksIHNsb3RzOwogCiAgICAgUHlfVklTSVQoZi0+Zl9iYWNrKTsKICAgICBQeV9WSVNJVChmLT5mX2NvZGUpOwpAQCAtNDkzLDEwICs0ODksMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWZyYW1lX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCitmcmFtZV90cF9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwLCAqKm9sZHRvcDsKLSAgICBpbnQgaSwgc2xvdHM7CisgICAgUHlfc3NpemVfdCBpLCBzbG90czsKIAogICAgIC8qIEJlZm9yZSBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgdGhhdCB0aGlzIGZyYW1lIGlzIGNsZWFybHkgbWFya2VkCiAgICAgICogYXMgYmVpbmcgZGVmdW5jdCEgIEVsc2UsIGUuZy4sIGEgZ2VuZXJhdG9yIHJlYWNoYWJsZSBmcm9tIHRoaXMKQEAgLTUwNSw2ICs1MDEsNyBAQAogICAgICAqLwogICAgIG9sZHRvcCA9IGYtPmZfc3RhY2t0b3A7CiAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOwogCiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdHlwZSk7CiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdmFsdWUpOwpAQCAtNTI1LDYgKzUyMiwyNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZnJhbWVfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKK3sKKyAgICBpZiAoZi0+Zl9leGVjdXRpbmcpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY2xlYXIgYW4gZXhlY3V0aW5nIGZyYW1lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoZi0+Zl9nZW4pIHsKKyAgICAgICAgX1B5R2VuX0ZpbmFsaXplKGYtPmZfZ2VuKTsKKyAgICAgICAgYXNzZXJ0KGYtPmZfZ2VuID09IE5VTEwpOworICAgIH0KKyAgICBmcmFtZV90cF9jbGVhcihmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGNsZWFyX19kb2NfXywKKyJGLmNsZWFyKCk6IGNsZWFyIG1vc3QgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSBmcmFtZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgogZnJhbWVfc2l6ZW9mKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgUHlfc3NpemVfdCByZXMsIGV4dHJhcywgbmNlbGxzLCBuZnJlZXM7CkBAIC01NDMsNiArNTU5LDggQEAKICJGLl9fc2l6ZW9mX18oKSAtPiBzaXplIG9mIEYgaW4gbWVtb3J5LCBpbiBieXRlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgZnJhbWVfbWV0aG9kc1tdID0geworICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWZyYW1lX2NsZWFyLCAgICAgICBNRVRIX05PQVJHUywKKyAgICAgY2xlYXJfX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilmcmFtZV9zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCiAgICAgIHNpemVvZl9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwpAQCAtNTcxLDcgKzU4OSw3IEBACiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWZyYW1lX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpZnJhbWVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIChpbnF1aXJ5KWZyYW1lX3RwX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNTgzLDEzICs2MDEsMTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqYnVpbHRpbl9vYmplY3Q7CitfUHlfSURFTlRJRklFUihfX2J1aWx0aW5zX18pOwogCiBpbnQgX1B5RnJhbWVfSW5pdCgpCiB7Ci0gICAgYnVpbHRpbl9vYmplY3QgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19idWlsdGluc19fIik7Ci0gICAgaWYgKGJ1aWx0aW5fb2JqZWN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOworICAgIC8qIEJlZm9yZSwgUHlJZF9fX2J1aWx0aW5zX18gd2FzIGEgc3RyaW5nIGNyZWF0ZWQgZXhwbGljaXRseSBpbgorICAgICAgIHRoaXMgZnVuY3Rpb24uIE5vdyB0aGVyZSBpcyBub3RoaW5nIHRvIGluaXRpYWxpemUgYW55bW9yZSwgYnV0CisgICAgICAgdGhlIGZ1bmN0aW9uIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTYxMCw3ICs2MjgsNyBAQAogICAgIH0KICNlbmRpZgogICAgIGlmIChiYWNrID09IE5VTEwgfHwgYmFjay0+Zl9nbG9iYWxzICE9IGdsb2JhbHMpIHsKLSAgICAgICAgYnVpbHRpbnMgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBidWlsdGluX29iamVjdCk7CisgICAgICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKTsKICAgICAgICAgaWYgKGJ1aWx0aW5zKSB7CiAgICAgICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2soYnVpbHRpbnMpKSB7CiAgICAgICAgICAgICAgICAgYnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJ1aWx0aW5zKTsKQEAgLTcxMyw2ICs3MzEsOCBAQAogICAgIGYtPmZfbGFzdGkgPSAtMTsKICAgICBmLT5mX2xpbmVubyA9IGNvZGUtPmNvX2ZpcnN0bGluZW5vOwogICAgIGYtPmZfaWJsb2NrID0gMDsKKyAgICBmLT5mX2V4ZWN1dGluZyA9IDA7CisgICAgZi0+Zl9nZW4gPSBOVUxMOwogCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKGYpOwogICAgIHJldHVybiBmOwpAQCAtNzUzLDEyICs3NzMsOSBAQAogICAgSWYgZGVyZWYgaXMgdHJ1ZSwgdGhlbiB0aGUgdmFsdWVzIGJlaW5nIGNvcGllZCBhcmUgY2VsbCB2YXJpYWJsZXMKICAgIGFuZCB0aGUgdmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGNlbGwgdmFyaWFibGUgYmVmb3JlIGJlaW5nIHB1dAogICAgaW4gZGljdC4KLQotICAgRXhjZXB0aW9ucyByYWlzZWQgd2hpbGUgbW9kaWZ5aW5nIHRoZSBkaWN0IGFyZSBzaWxlbnRseSBpZ25vcmVkLAotICAgYmVjYXVzZSB0aGVyZSBpcyBubyBnb29kIHdheSB0byByZXBvcnQgdGhlbS4KICAqLwogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogbWFwX3RvX2RpY3QoUHlPYmplY3QgKm1hcCwgUHlfc3NpemVfdCBubWFwLCBQeU9iamVjdCAqZGljdCwgUHlPYmplY3QgKip2YWx1ZXMsCiAgICAgICAgICAgICBpbnQgZGVyZWYpCiB7CkBAIC03NzUsMTQgKzc5MiwxOSBAQAogICAgICAgICAgICAgdmFsdWUgPSBQeUNlbGxfR0VUKHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfRGVsSXRlbShkaWN0LCBrZXkpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0SXRlbShkaWN0LCBrZXksIHZhbHVlKSAhPSAwKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiAwOwogfQogCiAvKiBDb3B5IHZhbHVlcyBmcm9tIHRoZSAibG9jYWxzIiBkaWN0IGludG8gdGhlIGZhc3QgbG9jYWxzLgpAQCAtODM5LDQyICs4NjEsNDkgQEAKICAgICB9CiB9CiAKLXZvaWQKLVB5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKmYpCitpbnQKK1B5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgLyogTWVyZ2UgZmFzdCBsb2NhbHMgaW50byBmLT5mX2xvY2FscyAqLwogICAgIFB5T2JqZWN0ICpsb2NhbHMsICptYXA7CiAgICAgUHlPYmplY3QgKipmYXN0OwotICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOwotICAgIGlmIChmID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKyAgICBQeV9zc2l6ZV90IG5jZWxscywgbmZyZWV2YXJzOworCisgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBsb2NhbHMgPSBmLT5mX2xvY2FsczsKICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogQ2FuJ3QgcmVwb3J0IGl0IDotKCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgY28gPSBmLT5mX2NvZGU7CiAgICAgbWFwID0gY28tPmNvX3Zhcm5hbWVzOwotICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKQotICAgICAgICByZXR1cm47Ci0gICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG1hcCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNvX3Zhcm5hbWVzIG11c3QgYmUgYSB0dXBsZSwgbm90ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobWFwKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgZmFzdCA9IGYtPmZfbG9jYWxzcGx1czsKICAgICBqID0gUHlUdXBsZV9HRVRfU0laRShtYXApOwogICAgIGlmIChqID4gY28tPmNvX25sb2NhbHMpCiAgICAgICAgIGogPSBjby0+Y29fbmxvY2FsczsKLSAgICBpZiAoY28tPmNvX25sb2NhbHMpCi0gICAgICAgIG1hcF90b19kaWN0KG1hcCwgaiwgbG9jYWxzLCBmYXN0LCAwKTsKKyAgICBpZiAoY28tPmNvX25sb2NhbHMpIHsKKyAgICAgICAgaWYgKG1hcF90b19kaWN0KG1hcCwgaiwgbG9jYWxzLCBmYXN0LCAwKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIG5jZWxscyA9IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKTsKICAgICBuZnJlZXZhcnMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19mcmVldmFycyk7CiAgICAgaWYgKG5jZWxscyB8fCBuZnJlZXZhcnMpIHsKLSAgICAgICAgbWFwX3RvX2RpY3QoY28tPmNvX2NlbGx2YXJzLCBuY2VsbHMsCi0gICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKTsKKyAgICAgICAgaWYgKG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCBmYXN0ICsgY28tPmNvX25sb2NhbHMsIDEpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCiAgICAgICAgIC8qIElmIHRoZSBuYW1lc3BhY2UgaXMgdW5vcHRpbWl6ZWQsIHRoZW4gb25lIG9mIHRoZQogICAgICAgICAgICBmb2xsb3dpbmcgY2FzZXMgYXBwbGllczoKICAgICAgICAgICAgMS4gSXQgZG9lcyBub3QgY29udGFpbiBmcmVlIHZhcmlhYmxlcywgYmVjYXVzZSBpdApAQCAtODg0LDExICs5MTMsMjQgQEAKICAgICAgICAgICAgaW50byB0aGUgbG9jYWxzIGRpY3QgdXNlZCBieSB0aGUgY2xhc3MuCiAgICAgICAgICovCiAgICAgICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19PUFRJTUlaRUQpIHsKLSAgICAgICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19mcmVldmFycywgbmZyZWV2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCBmYXN0ICsgY28tPmNvX25sb2NhbHMgKyBuY2VsbHMsIDEpOworICAgICAgICAgICAgaWYgKG1hcF90b19kaWN0KGNvLT5jb19mcmVldmFycywgbmZyZWV2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK1B5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaW50IHJlczsKKworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisKKyAgICByZXMgPSBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIH0KIAogdm9pZApAQCAtOTAwLDcgKzk0Miw3IEBACiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5X3NzaXplX3QgajsKLSAgICBpbnQgbmNlbGxzLCBuZnJlZXZhcnM7CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKICAgICBpZiAoZiA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CkBAIC05NTIsOCArOTk0LDYgQEAKIFB5RnJhbWVfRmluaSh2b2lkKQogewogICAgICh2b2lkKVB5RnJhbWVfQ2xlYXJGcmVlTGlzdCgpOwotICAgIFB5X1hERUNSRUYoYnVpbHRpbl9vYmplY3QpOwotICAgIGJ1aWx0aW5fb2JqZWN0ID0gTlVMTDsKIH0KIAogLyogUHJpbnQgc3VtbWFyeSBpbmZvIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgb3B0aW1pemVkIGFsbG9jYXRvciAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMgYi9PYmplY3RzL2Z1bmNvYmplY3QuYwppbmRleCA0OTQxNWI5Li5iMDQzOTM0IDEwMDY0NAotLS0gYS9PYmplY3RzL2Z1bmNvYmplY3QuYworKysgYi9PYmplY3RzL2Z1bmNvYmplY3QuYwpAQCAtOCw2MCArOCw1OSBAQAogUHlPYmplY3QgKgogUHlGdW5jdGlvbl9OZXdXaXRoUXVhbE5hbWUoUHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqcXVhbG5hbWUpCiB7Ci0gICAgUHlGdW5jdGlvbk9iamVjdCAqb3AgPSBQeU9iamVjdF9HQ19OZXcoUHlGdW5jdGlvbk9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlGdW5jdGlvbl9UeXBlKTsKLSAgICBzdGF0aWMgUHlPYmplY3QgKl9fbmFtZV9fID0gMDsKLSAgICBpZiAob3AgIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqZG9jOwotICAgICAgICBQeU9iamVjdCAqY29uc3RzOwotICAgICAgICBQeU9iamVjdCAqbW9kdWxlOwotICAgICAgICBvcC0+ZnVuY193ZWFrcmVmbGlzdCA9IE5VTEw7Ci0gICAgICAgIFB5X0lOQ1JFRihjb2RlKTsKLSAgICAgICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7Ci0gICAgICAgIFB5X0lOQ1JFRihnbG9iYWxzKTsKLSAgICAgICAgb3AtPmZ1bmNfZ2xvYmFscyA9IGdsb2JhbHM7Ci0gICAgICAgIG9wLT5mdW5jX25hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19uYW1lOwotICAgICAgICBQeV9JTkNSRUYob3AtPmZ1bmNfbmFtZSk7Ci0gICAgICAgIG9wLT5mdW5jX2RlZmF1bHRzID0gTlVMTDsgLyogTm8gZGVmYXVsdCBhcmd1bWVudHMgKi8KLSAgICAgICAgb3AtPmZ1bmNfa3dkZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGtleXdvcmQgb25seSBkZWZhdWx0cyAqLwotICAgICAgICBvcC0+ZnVuY19jbG9zdXJlID0gTlVMTDsKLSAgICAgICAgY29uc3RzID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fY29uc3RzOwotICAgICAgICBpZiAoUHlUdXBsZV9TaXplKGNvbnN0cykgPj0gMSkgewotICAgICAgICAgICAgZG9jID0gUHlUdXBsZV9HZXRJdGVtKGNvbnN0cywgMCk7Ci0gICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhkb2MpKQotICAgICAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKGRvYyk7Ci0gICAgICAgIG9wLT5mdW5jX2RvYyA9IGRvYzsKLSAgICAgICAgb3AtPmZ1bmNfZGljdCA9IE5VTEw7Ci0gICAgICAgIG9wLT5mdW5jX21vZHVsZSA9IE5VTEw7Ci0gICAgICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gTlVMTDsKKyAgICBQeUZ1bmN0aW9uT2JqZWN0ICpvcDsKKyAgICBQeU9iamVjdCAqZG9jLCAqY29uc3RzLCAqbW9kdWxlOworICAgIHN0YXRpYyBQeU9iamVjdCAqX19uYW1lX18gPSBOVUxMOwogCi0gICAgICAgIC8qIF9fbW9kdWxlX186IElmIG1vZHVsZSBuYW1lIGlzIGluIGdsb2JhbHMsIHVzZSBpdC4KLSAgICAgICAgICAgT3RoZXJ3aXNlLCB1c2UgTm9uZS4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKCFfX25hbWVfXykgewotICAgICAgICAgICAgX19uYW1lX18gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgICAgIGlmICghX19uYW1lX18pIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYob3ApOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIF9fbmFtZV9fKTsKLSAgICAgICAgaWYgKG1vZHVsZSkgewotICAgICAgICAgICAgUHlfSU5DUkVGKG1vZHVsZSk7Ci0gICAgICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBtb2R1bGU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHF1YWxuYW1lKQotICAgICAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBvcC0+ZnVuY19uYW1lOwotICAgICAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOworICAgIGlmIChfX25hbWVfXyA9PSBOVUxMKSB7CisgICAgICAgIF9fbmFtZV9fID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7CisgICAgICAgIGlmIChfX25hbWVfXyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgb3AgPSBQeU9iamVjdF9HQ19OZXcoUHlGdW5jdGlvbk9iamVjdCwgJlB5RnVuY3Rpb25fVHlwZSk7CisgICAgaWYgKG9wID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb3AtPmZ1bmNfd2Vha3JlZmxpc3QgPSBOVUxMOworICAgIFB5X0lOQ1JFRihjb2RlKTsKKyAgICBvcC0+ZnVuY19jb2RlID0gY29kZTsKKyAgICBQeV9JTkNSRUYoZ2xvYmFscyk7CisgICAgb3AtPmZ1bmNfZ2xvYmFscyA9IGdsb2JhbHM7CisgICAgb3AtPmZ1bmNfbmFtZSA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX25hbWU7CisgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUpOworICAgIG9wLT5mdW5jX2RlZmF1bHRzID0gTlVMTDsgLyogTm8gZGVmYXVsdCBhcmd1bWVudHMgKi8KKyAgICBvcC0+ZnVuY19rd2RlZmF1bHRzID0gTlVMTDsgLyogTm8ga2V5d29yZCBvbmx5IGRlZmF1bHRzICovCisgICAgb3AtPmZ1bmNfY2xvc3VyZSA9IE5VTEw7CisKKyAgICBjb25zdHMgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19jb25zdHM7CisgICAgaWYgKFB5VHVwbGVfU2l6ZShjb25zdHMpID49IDEpIHsKKyAgICAgICAgZG9jID0gUHlUdXBsZV9HZXRJdGVtKGNvbnN0cywgMCk7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGRvYykpCisgICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwogICAgIH0KICAgICBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBkb2MgPSBQeV9Ob25lOworICAgIFB5X0lOQ1JFRihkb2MpOworICAgIG9wLT5mdW5jX2RvYyA9IGRvYzsKKworICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOworICAgIG9wLT5mdW5jX21vZHVsZSA9IE5VTEw7CisgICAgb3AtPmZ1bmNfYW5ub3RhdGlvbnMgPSBOVUxMOworCisgICAgLyogX19tb2R1bGVfXzogSWYgbW9kdWxlIG5hbWUgaXMgaW4gZ2xvYmFscywgdXNlIGl0LgorICAgICAgIE90aGVyd2lzZSwgdXNlIE5vbmUuICovCisgICAgbW9kdWxlID0gUHlEaWN0X0dldEl0ZW0oZ2xvYmFscywgX19uYW1lX18pOworICAgIGlmIChtb2R1bGUpIHsKKyAgICAgICAgUHlfSU5DUkVGKG1vZHVsZSk7CisgICAgICAgIG9wLT5mdW5jX21vZHVsZSA9IG1vZHVsZTsKKyAgICB9CisgICAgaWYgKHF1YWxuYW1lKQorICAgICAgICBvcC0+ZnVuY19xdWFsbmFtZSA9IHF1YWxuYW1lOworICAgIGVsc2UKKyAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBvcC0+ZnVuY19uYW1lOworICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19xdWFsbmFtZSk7CisKICAgICBfUHlPYmplY3RfR0NfVFJBQ0sob3ApOwogICAgIHJldHVybiAoUHlPYmplY3QgKilvcDsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvZ2Vub2JqZWN0LmMgYi9PYmplY3RzL2dlbm9iamVjdC5jCmluZGV4IDAxNmJmYTIuLjA4ZDMwYmYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZ2Vub2JqZWN0LmMKKysrIGIvT2JqZWN0cy9nZW5vYmplY3QuYwpAQCAtMTUsNiArMTUsMzEgQEAKICAgICByZXR1cm4gMDsKIH0KIAordm9pZAorX1B5R2VuX0ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5R2VuT2JqZWN0ICpnZW4gPSAoUHlHZW5PYmplY3QgKilzZWxmOworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKworICAgIGlmIChnZW4tPmdpX2ZyYW1lID09IE5VTEwgfHwgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCA9PSBOVUxMKQorICAgICAgICAvKiBHZW5lcmF0b3IgaXNuJ3QgcGF1c2VkLCBzbyBubyBuZWVkIHRvIGNsb3NlICovCisgICAgICAgIHJldHVybjsKKworICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKKyAgICByZXMgPSBnZW5fY2xvc2UoZ2VuLCBOVUxMKTsKKworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlbGYpOworICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKK30KKwogc3RhdGljIHZvaWQKIGdlbl9kZWFsbG9jKFB5R2VuT2JqZWN0ICpnZW4pCiB7CkBAIC0yNywxMiArNTIsOCBAQAogCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKHNlbGYpOwogCi0gICAgaWYgKGdlbi0+Z2lfZnJhbWUgIT0gTlVMTCAmJiBnZW4tPmdpX2ZyYW1lLT5mX3N0YWNrdG9wICE9IE5VTEwpIHsKLSAgICAgICAgLyogR2VuZXJhdG9yIGlzIHBhdXNlZCwgc28gd2UgbmVlZCB0byBjbG9zZSAqLwotICAgICAgICBQeV9UWVBFKGdlbiktPnRwX2RlbChzZWxmKTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApCi0gICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQuICA6KCAqLwotICAgIH0KKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpKQorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQuICA6KCAqLwogCiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgUHlfQ0xFQVIoZ2VuLT5naV9mcmFtZSk7CkBAIC00MCw3ICs2MSw2IEBACiAgICAgUHlPYmplY3RfR0NfRGVsKGdlbik7CiB9CiAKLQogc3RhdGljIFB5T2JqZWN0ICoKIGdlbl9zZW5kX2V4KFB5R2VuT2JqZWN0ICpnZW4sIFB5T2JqZWN0ICphcmcsIGludCBleGMpCiB7CkBAIC0xMjAsNiArMTQwLDcgQEAKICAgICAgICAgUHlfWERFQ1JFRih0KTsKICAgICAgICAgUHlfWERFQ1JFRih2KTsKICAgICAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgICAgIGdlbi0+Z2lfZnJhbWUtPmZfZ2VuID0gTlVMTDsKICAgICAgICAgZ2VuLT5naV9mcmFtZSA9IE5VTEw7CiAgICAgICAgIFB5X0RFQ1JFRihmKTsKICAgICB9CkBAIC0yMjIsNjggKzI0Myw2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1nZW5fZGVsKFB5T2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKLSAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKLQotICAgIGlmIChnZW4tPmdpX2ZyYW1lID09IE5VTEwgfHwgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCA9PSBOVUxMKQotICAgICAgICAvKiBHZW5lcmF0b3IgaXNuJ3QgcGF1c2VkLCBzbyBubyBuZWVkIHRvIGNsb3NlICovCi0gICAgICAgIHJldHVybjsKLQotICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7Ci0gICAgc2VsZi0+b2JfcmVmY250ID0gMTsKLQotICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCi0gICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICByZXMgPSBnZW5fY2xvc2UoZ2VuLCBOVUxMKTsKLQotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlbGYpOwotICAgIGVsc2UKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0KLSAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCi0gICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKLQotICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKLSAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgotICAgICAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKLSAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKLSAgICAgICAgcmV0dXJuOyAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KLQotICAgIC8qIGNsb3NlKCkgcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCi0gICAgICogbmV2ZXIgaGFwcGVuZWQuCi0gICAgICovCi0gICAgewotICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OwotICAgIH0KLSAgICBhc3NlcnQoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpICYmCi0gICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7Ci0KLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tKFB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzKTsKLSAgICAtLShQeV9UWVBFKHNlbGYpLT50cF9hbGxvY3MpOwotI2VuZGlmCi19Ci0KLQogCiBQeURvY19TVFJWQVIodGhyb3dfZG9jLAogInRocm93KHR5cFssdmFsWyx0Yl1dKSAtPiByYWlzZSBleGNlcHRpb24gaW4gZ2VuZXJhdG9yLFxuXApAQCAtNTE3LDcgKzQ3Niw4IEBACiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8CisgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylnZW5fdHJhdmVyc2UsICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTU0NCw3ICs1MDQsOSBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCi0gICAgZ2VuX2RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICBfUHlHZW5fRmluYWxpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiBQeU9iamVjdCAqCkBAIC01NTYsNiArNTE4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGdlbi0+Z2lfZnJhbWUgPSBmOworICAgIGYtPmZfZ2VuID0gKFB5T2JqZWN0ICopIGdlbjsKICAgICBQeV9JTkNSRUYoZi0+Zl9jb2RlKTsKICAgICBnZW4tPmdpX2NvZGUgPSAoUHlPYmplY3QgKikoZi0+Zl9jb2RlKTsKICAgICBnZW4tPmdpX3J1bm5pbmcgPSAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9pdGVyb2JqZWN0LmMgYi9PYmplY3RzL2l0ZXJvYmplY3QuYwppbmRleCAzY2ZiZWFmLi43N2ZmODEwIDEwMDY0NAotLS0gYS9PYmplY3RzL2l0ZXJvYmplY3QuYworKysgYi9PYmplY3RzL2l0ZXJvYmplY3QuYwpAQCAtNCw3ICs0LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBsb25nICAgICAgaXRfaW5kZXg7CisgICAgUHlfc3NpemVfdCBpdF9pbmRleDsKICAgICBQeU9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSBzZXFpdGVyb2JqZWN0OwogCkBAIC03Niw5ICs3NiwxNCBAQAogICAgIFB5X3NzaXplX3Qgc2Vxc2l6ZSwgbGVuOwogCiAgICAgaWYgKGl0LT5pdF9zZXEpIHsKLSAgICAgICAgc2Vxc2l6ZSA9IFB5U2VxdWVuY2VfU2l6ZShpdC0+aXRfc2VxKTsKLSAgICAgICAgaWYgKHNlcXNpemUgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNMZW4oaXQtPml0X3NlcSkpIHsKKyAgICAgICAgICAgIHNlcXNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXQtPml0X3NlcSk7CisgICAgICAgICAgICBpZiAoc2Vxc2l6ZSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKyAgICAgICAgfQogICAgICAgICBsZW4gPSBzZXFzaXplIC0gaXQtPml0X2luZGV4OwogICAgICAgICBpZiAobGVuID49IDApCiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGxlbik7CmRpZmYgLS1naXQgYS9PYmplY3RzL2xpc3RvYmplY3QuYyBiL09iamVjdHMvbGlzdG9iamVjdC5jCmluZGV4IDZlMGQwOTQuLjViNzU5NjggMTAwNjQ0Ci0tLSBhL09iamVjdHMvbGlzdG9iamVjdC5jCisrKyBiL09iamVjdHMvbGlzdG9iamVjdC5jCkBAIC0yMTMsMTEgKzIxMywxMSBAQAogfQogCiBpbnQKLVB5TGlzdF9TZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLAotICAgICAgICAgICAgICAgcmVnaXN0ZXIgUHlPYmplY3QgKm5ld2l0ZW0pCitQeUxpc3RfU2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSwKKyAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdpdGVtKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvbGRpdGVtOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeU9iamVjdCAqb2xkaXRlbTsKKyAgICBQeU9iamVjdCAqKnA7CiAgICAgaWYgKCFQeUxpc3RfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5X1hERUNSRUYobmV3aXRlbSk7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMzM4LDU3ICszMzgsNTcgQEAKIGxpc3RfcmVwcihQeUxpc3RPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpzID0gTlVMTDsKLSAgICBfUHlBY2N1IGFjYzsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnNlcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnM7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKICAgICBpZiAoUHlfU0laRSh2KSA9PSAwKSB7CiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiW10iKTsKICAgICB9CiAKLSAgICBpZiAoc2VwID09IE5VTEwpIHsKLSAgICAgICAgc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwgIik7Ci0gICAgICAgIGlmIChzZXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIGkgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0Kil2KTsKICAgICBpZiAoaSAhPSAwKSB7CiAgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJbLi4uXSIpIDogTlVMTDsKICAgICB9CiAKLSAgICBpZiAoX1B5QWNjdV9Jbml0KCZhY2MpKQotICAgICAgICBnb3RvIGVycm9yOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICAvKiAiWyIgKyAiMSIgKyAiLCAyIiAqIChsZW4gLSAxKSArICJdIiAqLworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDEgKyAoMiArIDEpICogKFB5X1NJWkUodikgLSAxKSArIDE7CiAKLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlsiKTsKLSAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ1snKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CiAKICAgICAvKiBEbyByZXByKCkgb24gZWFjaCBlbGVtZW50LiAgTm90ZSB0aGF0IHRoaXMgbWF5IG11dGF0ZSB0aGUgbGlzdCwKICAgICAgICBzbyBtdXN0IHJlZmV0Y2ggdGhlIGxpc3Qgc2l6ZSBvbiBlYWNoIGl0ZXJhdGlvbi4gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRSh2KTsgKytpKSB7CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCAiLCAyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBnZXR0aW5nIHRoZSByZXByIG9mIGEgbGlzdCIpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIodi0+b2JfaXRlbVtpXSk7CiAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBpZiAoaSA+IDAgJiYgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHNlcCkpCisgICAgICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIFB5X0NMRUFSKHMpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICB9Ci0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJdIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ10nKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CiAKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7Ci0gICAgcmV0dXJuIF9QeUFjY3VfRmluaXNoKCZhY2MpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogZXJyb3I6Ci0gICAgX1B5QWNjdV9EZXN0cm95KCZhY2MpOwotICAgIFB5X1hERUNSRUYocyk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKil2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTY0NCw5ICs2NDQsMTQgQEAKICAgICBtZW1jcHkocmVjeWNsZSwgJml0ZW1baWxvd10sIHMpOwogCiAgICAgaWYgKGQgPCAwKSB7IC8qIERlbGV0ZSAtZCBpdGVtcyAqLwotICAgICAgICBtZW1tb3ZlKCZpdGVtW2loaWdoK2RdLCAmaXRlbVtpaGlnaF0sCi0gICAgICAgICAgICAoUHlfU0laRShhKSAtIGloaWdoKSpzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICBsaXN0X3Jlc2l6ZShhLCBQeV9TSVpFKGEpICsgZCk7CisgICAgICAgIFB5X3NzaXplX3QgdGFpbDsKKyAgICAgICAgdGFpbCA9IChQeV9TSVpFKGEpIC0gaWhpZ2gpICogc2l6ZW9mKFB5T2JqZWN0ICopOworICAgICAgICBtZW1tb3ZlKCZpdGVtW2loaWdoK2RdLCAmaXRlbVtpaGlnaF0sIHRhaWwpOworICAgICAgICBpZiAobGlzdF9yZXNpemUoYSwgUHlfU0laRShhKSArIGQpIDwgMCkgeworICAgICAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaF0sICZpdGVtW2loaWdoK2RdLCB0YWlsKTsKKyAgICAgICAgICAgIG1lbWNweSgmaXRlbVtpbG93XSwgcmVjeWNsZSwgcyk7CisgICAgICAgICAgICBnb3RvIEVycm9yOworICAgICAgICB9CiAgICAgICAgIGl0ZW0gPSBhLT5vYl9pdGVtOwogICAgIH0KICAgICBlbHNlIGlmIChkID4gMCkgeyAvKiBJbnNlcnQgZCBpdGVtcyAqLwpAQCAtODI2LDcgKzgzMSw3IEBACiAgICAgaXRlcm5leHQgPSAqaXQtPm9iX3R5cGUtPnRwX2l0ZXJuZXh0OwogCiAgICAgLyogR3Vlc3MgYSByZXN1bHQgbGlzdCBzaXplLiAqLwotICAgIG4gPSBfUHlPYmplY3RfTGVuZ3RoSGludChiLCA4KTsKKyAgICBuID0gUHlPYmplY3RfTGVuZ3RoSGludChiLCA4KTsKICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTg3MSw4ICs4NzYsMTAgQEAKICAgICB9CiAKICAgICAvKiBDdXQgYmFjayByZXN1bHQgbGlzdCBpZiBpbml0aWFsIGd1ZXNzIHdhcyB0b28gbGFyZ2UuICovCi0gICAgaWYgKFB5X1NJWkUoc2VsZikgPCBzZWxmLT5hbGxvY2F0ZWQpCi0gICAgICAgIGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpOyAgLyogc2hyaW5raW5nIGNhbid0IGZhaWwgKi8KKyAgICBpZiAoUHlfU0laRShzZWxmKSA8IHNlbGYtPmFsbG9jYXRlZCkgeworICAgICAgICBpZiAobGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICBQeV9ERUNSRUYoaXQpOwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtOTI1LDE3ICs5MzIsMTcgQEAKICAgICB2ID0gc2VsZi0+b2JfaXRlbVtpXTsKICAgICBpZiAoaSA9PSBQeV9TSVpFKHNlbGYpIC0gMSkgewogICAgICAgICBzdGF0dXMgPSBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpIC0gMSk7Ci0gICAgICAgIGFzc2VydChzdGF0dXMgPj0gMCk7Ci0gICAgICAgIHJldHVybiB2OyAvKiBhbmQgdiBub3cgb3ducyB0aGUgcmVmZXJlbmNlIHRoZSBsaXN0IGhhZCAqLworICAgICAgICBpZiAoc3RhdHVzID49IDApCisgICAgICAgICAgICByZXR1cm4gdjsgLyogYW5kIHYgbm93IG93bnMgdGhlIHJlZmVyZW5jZSB0aGUgbGlzdCBoYWQgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0lOQ1JFRih2KTsKICAgICBzdGF0dXMgPSBsaXN0X2Fzc19zbGljZShzZWxmLCBpLCBpKzEsIChQeU9iamVjdCAqKU5VTEwpOwotICAgIGFzc2VydChzdGF0dXMgPj0gMCk7Ci0gICAgLyogVXNlIHN0YXR1cywgc28gdGhhdCBpbiBhIHJlbGVhc2UgYnVpbGQgY29tcGlsZXJzIGRvbid0Ci0gICAgICogY29tcGxhaW4gYWJvdXQgdGhlIHVudXNlZCBuYW1lLgotICAgICAqLwotICAgICh2b2lkKSBzdGF0dXM7Ci0KKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gdjsKIH0KIApAQCAtMTA1MSw5ICsxMDU4LDkgQEAKIHN0YXRpYyBpbnQKIGJpbmFyeXNvcnQoc29ydHNsaWNlIGxvLCBQeU9iamVjdCAqKmhpLCBQeU9iamVjdCAqKnN0YXJ0KQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgazsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKmwsICoqcCwgKipyOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpwaXZvdDsKKyAgICBQeV9zc2l6ZV90IGs7CisgICAgUHlPYmplY3QgKipsLCAqKnAsICoqcjsKKyAgICBQeU9iamVjdCAqcGl2b3Q7CiAKICAgICBhc3NlcnQobG8ua2V5cyA8PSBzdGFydCAmJiBzdGFydCA8PSBoaSk7CiAgICAgLyogYXNzZXJ0IFtsbywgc3RhcnQpIGlzIHNvcnRlZCAqLwpAQCAtMjQ3Niw2ICsyNDgzLDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICoqZ2FyYmFnZTsKICAgICAgICAgICAgIHNpemVfdCBjdXI7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgICAgICBpbnQgcmVzOwogCiAgICAgICAgICAgICBpZiAoc2xpY2VsZW5ndGggPD0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTI1MjYsMTQgKzI1MzQsMTQgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtPSBzbGljZWxlbmd0aDsKLSAgICAgICAgICAgIGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpOworICAgICAgICAgICAgcmVzID0gbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSk7CiAKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbGljZWxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGdhcmJhZ2VbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlNZW1fRlJFRShnYXJiYWdlKTsKIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLyogYXNzaWduIHNsaWNlICovCkBAIC0yNjYwLDcgKzI2NjgsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGxvbmcgaXRfaW5kZXg7CisgICAgUHlfc3NpemVfdCBpdF9pbmRleDsKICAgICBQeUxpc3RPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gbGlzdGl0ZXJvYmplY3Q7CiAKQEAgLTI3OTcsNyArMjgwNSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogbGlzdGl0ZXJfc2V0c3RhdGUobGlzdGl0ZXJvYmplY3QgKml0LCBQeU9iamVjdCAqc3RhdGUpCiB7Ci0gICAgbG9uZyBpbmRleCA9IFB5TG9uZ19Bc0xvbmcoc3RhdGUpOworICAgIFB5X3NzaXplX3QgaW5kZXggPSBQeUxvbmdfQXNTc2l6ZV90KHN0YXRlKTsKICAgICBpZiAoaW5kZXggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGl0LT5pdF9zZXEgIT0gTlVMTCkgewpAQCAtMjk1OCw3ICsyOTY2LDcgQEAKICAgICBpZiAoZm9yd2FyZCkgewogICAgICAgICBsaXN0aXRlcm9iamVjdCAqaXQgPSAobGlzdGl0ZXJvYmplY3QgKilfaXQ7CiAgICAgICAgIGlmIChpdC0+aXRfc2VxKQotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTylsIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKKyAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbiIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+aXRfc2VxLCBpdC0+aXRfaW5kZXgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGxpc3RyZXZpdGVyb2JqZWN0ICppdCA9IChsaXN0cmV2aXRlcm9iamVjdCAqKV9pdDsKZGlmZiAtLWdpdCBhL09iamVjdHMvbG9uZ29iamVjdC5jIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKaW5kZXggNjM4MzUwNy4uYTVjMGQxYiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9sb25nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKQEAgLTE3LDcgKzE3LDggQEAKICNlbmRpZgogCiAvKiBjb252ZXJ0IGEgUHlMb25nIG9mIHNpemUgMSwgMCBvciAtMSB0byBhbiBzZGlnaXQgKi8KLSNkZWZpbmUgTUVESVVNX1ZBTFVFKHgpIChQeV9TSVpFKHgpIDwgMCA/IC0oc2RpZ2l0KSh4KS0+b2JfZGlnaXRbMF0gOiAgIFwKKyNkZWZpbmUgTUVESVVNX1ZBTFVFKHgpIChhc3NlcnQoLTEgPD0gUHlfU0laRSh4KSAmJiBQeV9TSVpFKHgpIDw9IDEpLCAgIFwKKyAgICAgICAgIFB5X1NJWkUoeCkgPCAwID8gLShzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSA6ICAgXAogICAgICAgICAgICAgIChQeV9TSVpFKHgpID09IDAgPyAoc2RpZ2l0KTAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAoc2RpZ2l0KSh4KS0+b2JfZGlnaXRbMF0pKQogI2RlZmluZSBBQlMoeCkgKCh4KSA8IDAgPyAtKHgpIDogKHgpKQpAQCAtNzAsMTEgKzcxLDIxIEBACiAKIC8qIElmIGEgZnJlc2hseS1hbGxvY2F0ZWQgaW50IGlzIGFscmVhZHkgc2hhcmVkLCBpdCBtdXN0CiAgICBiZSBhIHNtYWxsIGludGVnZXIsIHNvIG5lZ2F0aW5nIGl0IG11c3QgZ28gdG8gUHlMb25nX0Zyb21Mb25nICovCi0jZGVmaW5lIE5FR0FURSh4KSBcCi0gICAgZG8gaWYgKFB5X1JFRkNOVCh4KSA9PSAxKSBQeV9TSVpFKHgpID0gLVB5X1NJWkUoeCk7ICBcCi0gICAgICAgZWxzZSB7IFB5T2JqZWN0KiB0bXA9UHlMb25nX0Zyb21Mb25nKC1NRURJVU1fVkFMVUUoeCkpOyAgXAotICAgICAgICAgICBQeV9ERUNSRUYoeCk7ICh4KSA9IChQeUxvbmdPYmplY3QqKXRtcDsgfSAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSgwKQorUHlfTE9DQUxfSU5MSU5FKHZvaWQpCitfUHlMb25nX05lZ2F0ZShQeUxvbmdPYmplY3QgKip4X3ApCit7CisgICAgUHlMb25nT2JqZWN0ICp4OworCisgICAgeCA9IChQeUxvbmdPYmplY3QgKikqeF9wOworICAgIGlmIChQeV9SRUZDTlQoeCkgPT0gMSkgeworICAgICAgICBQeV9TSVpFKHgpID0gLVB5X1NJWkUoeCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqeF9wID0gKFB5TG9uZ09iamVjdCAqKVB5TG9uZ19Gcm9tTG9uZygtTUVESVVNX1ZBTFVFKHgpKTsKKyAgICBQeV9ERUNSRUYoeCk7Cit9CisKIC8qIEZvciBpbnQgbXVsdGlwbGljYXRpb24sIHVzZSB0aGUgTyhOKioyKSBzY2hvb2wgYWxnb3JpdGhtIHVubGVzcwogICogYm90aCBvcGVyYW5kcyBjb250YWluIG1vcmUgdGhhbiBLQVJBVFNVQkFfQ1VUT0ZGIGRpZ2l0cyAodGhpcwogICogYmVpbmcgYW4gaW50ZXJuYWwgUHl0aG9uIGludCBkaWdpdCwgaW4gYmFzZSBCQVNFKS4KQEAgLTg5LDExICsxMDAsNiBAQAogICovCiAjZGVmaW5lIEZJVkVBUllfQ1VUT0ZGIDgKIAotI3VuZGVmIE1JTgotI3VuZGVmIE1BWAotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLSNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPiAoeSkgPyAoeSkgOiAoeCkpCi0KICNkZWZpbmUgU0lHQ0hFQ0soUHlUcnlCbG9jaykgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSBQeVRyeUJsb2NrICAgIFwKQEAgLTEwNCw3ICsxMTAsNyBAQAogICAgb2YgdGhlIGFsZ29yaXRobXMgdXNlZCwgdGhpcyBjb3VsZCBzYXZlIGF0IG1vc3QgYmUgb25lIHdvcmQgYW55d2F5LiAqLwogCiBzdGF0aWMgUHlMb25nT2JqZWN0ICoKLWxvbmdfbm9ybWFsaXplKHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdikKK2xvbmdfbm9ybWFsaXplKFB5TG9uZ09iamVjdCAqdikKIHsKICAgICBQeV9zc2l6ZV90IGogPSBBQlMoUHlfU0laRSh2KSk7CiAgICAgUHlfc3NpemVfdCBpID0gajsKQEAgLTMzNCw3ICszNDAsNyBAQAogUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICp2diwgaW50ICpvdmVyZmxvdykKIHsKICAgICAvKiBUaGlzIHZlcnNpb24gYnkgVGltIFBldGVycyAqLwotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgbG9uZyB4LCBwcmV2OwogICAgIGxvbmcgcmVzOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTQ1Nyw3ICs0NjMsNyBAQAogCiBQeV9zc2l6ZV90CiBQeUxvbmdfQXNTc2l6ZV90KFB5T2JqZWN0ICp2dikgewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgc2l6ZV90IHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaWduOwpAQCAtNTEzLDcgKzUxOSw3IEBACiB1bnNpZ25lZCBsb25nCiBQeUxvbmdfQXNVbnNpZ25lZExvbmcoUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgbG9uZyB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKIApAQCAtNTQzLDcgKzU0OSw3IEBACiAgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpIHwgdi0+b2JfZGlnaXRbaV07CiAgICAgICAgIGlmICgoeCA+PiBQeUxvbmdfU0hJRlQpICE9IHByZXYpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24gaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIEMgdW5zaWduZWQgbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtMTsKICAgICAgICAgfQpAQCAtNTU3LDcgKzU2Myw3IEBACiBzaXplX3QKIFB5TG9uZ19Bc1NpemVfdChQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICBzaXplX3QgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAKQEAgLTYwMCw3ICs2MDYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcKIF9QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CkBAIC02MjgsNyArNjM0LDcgQEAKIH0KIAogdW5zaWduZWQgbG9uZwotUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrKFB5T2JqZWN0ICpvcCkKIHsKICAgICBQeU51bWJlck1ldGhvZHMgKm5iOwogICAgIFB5TG9uZ09iamVjdCAqbG87CkBAIC05NTQsOSArOTYwLDYgQEAKIFB5TG9uZ19Gcm9tVm9pZFB0cih2b2lkICpwKQogewogI2lmIFNJWkVPRl9WT0lEX1AgPD0gU0laRU9GX0xPTkcKLSAgICAvKiBzcGVjaWFsLWNhc2UgbnVsbCBwb2ludGVyICovCi0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykoUHlfdWludHB0cl90KXApOwogI2Vsc2UKIApAQCAtOTY2LDkgKzk2OSw2IEBACiAjaWYgU0laRU9GX0xPTkdfTE9ORyA8IFNJWkVPRl9WT0lEX1AKICMgICBlcnJvciAiUHlMb25nX0Zyb21Wb2lkUHRyOiBzaXplb2YoUFlfTE9OR19MT05HKSA8IHNpemVvZih2b2lkKikiCiAjZW5kaWYKLSAgICAvKiBzcGVjaWFsLWNhc2UgbnVsbCBwb2ludGVyICovCi0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykoUHlfdWludHB0cl90KXApOwogI2VuZGlmIC8qIFNJWkVPRl9WT0lEX1AgPD0gU0laRU9GX0xPTkcgKi8KIApAQCAtMTAxNCw3ICsxMDE0LDYgQEAKICAqIHJld3JpdHRlbiB0byB1c2UgdGhlIG5ld2VyIFB5TG9uZ197QXMsRnJvbX1CeXRlQXJyYXkgQVBJLgogICovCiAKLSNkZWZpbmUgSVNfTElUVExFX0VORElBTiAoaW50KSoodW5zaWduZWQgY2hhciopJm9uZQogI2RlZmluZSBQWV9BQlNfTExPTkdfTUlOICgwLSh1bnNpZ25lZCBQWV9MT05HX0xPTkcpUFlfTExPTkdfTUlOKQogCiAvKiBDcmVhdGUgYSBuZXcgaW50IG9iamVjdCBmcm9tIGEgQyBQWV9MT05HX0xPTkcgaW50LiAqLwpAQCAtMTE2Nyw3ICsxMTY2LDYgQEAKIHsKICAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgUFlfTE9OR19MT05HIGJ5dGVzOwotICAgIGludCBvbmUgPSAxOwogICAgIGludCByZXM7CiAKICAgICBpZiAodnYgPT0gTlVMTCkgewpAQCAtMTIwMiw3ICsxMjAwLDcgQEAKICAgICBjYXNlIDE6IHJldHVybiB2LT5vYl9kaWdpdFswXTsKICAgICB9CiAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBQWV9MSVRUTEVfRU5ESUFOLCAxKTsKIAogICAgIC8qIFBsYW4gOSBjYW4ndCBoYW5kbGUgUFlfTE9OR19MT05HIGluID8gOiBleHByZXNzaW9ucyAqLwogICAgIGlmIChyZXMgPCAwKQpAQCAtMTIxOSw3ICsxMjE3LDYgQEAKIHsKICAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIGJ5dGVzOwotICAgIGludCBvbmUgPSAxOwogICAgIGludCByZXM7CiAKICAgICBpZiAodnYgPT0gTlVMTCkgewpAQCAtMTIzOCw3ICsxMjM1LDcgQEAKICAgICB9CiAKICAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2diwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIFBZX0xJVFRMRV9FTkRJQU4sIDApOwogCiAgICAgLyogUGxhbiA5IGNhbid0IGhhbmRsZSBQWV9MT05HX0xPTkcgaW4gPyA6IGV4cHJlc3Npb25zICovCiAgICAgaWYgKHJlcyA8IDApCkBAIC0xMjUzLDcgKzEyNTAsNyBAQAogc3RhdGljIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwogX1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB4OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTEyODEsNyArMTI3OCw3IEBACiB9CiAKIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwotUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soUHlPYmplY3QgKm9wKQogewogICAgIFB5TnVtYmVyTWV0aG9kcyAqbmI7CiAgICAgUHlMb25nT2JqZWN0ICpsbzsKQEAgLTEzMTQsNyArMTMxMSw2IEBACiAgICAgICAgIHJldHVybiAodW5zaWduZWQgUFlfTE9OR19MT05HKS0xOwogICAgIH0KIH0KLSN1bmRlZiBJU19MSVRUTEVfRU5ESUFOCiAKIC8qIEdldCBhIEMgbG9uZyBsb25nIGludCBmcm9tIGFuIGludCBvYmplY3Qgb3IgYW55IG9iamVjdCB0aGF0IGhhcyBhbgogICAgX19pbnRfXyBtZXRob2QuCkBAIC0xMzMwLDcgKzEzMjYsNyBAQAogUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB4LCBwcmV2OwogICAgIFBZX0xPTkdfTE9ORyByZXM7CiAgICAgUHlfc3NpemVfdCBpOwpAQCAtMTYwNiw3ICsxNjAyLDcgQEAKICAgICAqLwogICAgIGlmIChzaXplX2EgPiBQWV9TU0laRV9UX01BWCAvIFB5TG9uZ19TSElGVCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGlzIHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIC8qIHRoZSBleHByZXNzaW9uIHNpemVfYSAqIFB5TG9uZ19TSElGVCBpcyBub3cgc2FmZSBmcm9tIG92ZXJmbG93ICovCkBAIC0xNjc2LDcgKzE2NzIsNiBAQAogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHAgPSAoVFlQRSopUHlVbmljb2RlX0RBVEEoc3RyKSArIHN0cmxlbjsgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgLyogcG91dFswXSB0aHJvdWdoIHBvdXRbc2l6ZS0yXSBjb250cmlidXRlIGV4YWN0bHkgICAgICAgICAgICBcCiAgICAgICAgICAgIF9QeUxvbmdfREVDSU1BTF9TSElGVCBkaWdpdHMgZWFjaCAqLyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBmb3IgKGk9MDsgaSA8IHNpemUgLSAxOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE3NDksNyArMTc0NCw3IEBACiBsb25nX2Zvcm1hdF9iaW5hcnkoUHlPYmplY3QgKmFhLCBpbnQgYmFzZSwgaW50IGFsdGVybmF0ZSwKICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnBfb3V0cHV0LCBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICphID0gKFB5TG9uZ09iamVjdCAqKWFhOworICAgIFB5TG9uZ09iamVjdCAqYSA9IChQeUxvbmdPYmplY3QgKilhYTsKICAgICBQeU9iamVjdCAqdjsKICAgICBQeV9zc2l6ZV90IHN6OwogICAgIFB5X3NzaXplX3Qgc2l6ZV9hOwpAQCAtMTc5MCw3ICsxNzg1LDcgQEAKICAgICAgICAgLyogRW5zdXJlIG92ZXJmbG93IGRvZXNuJ3Qgb2NjdXIgZHVyaW5nIGNvbXB1dGF0aW9uIG9mIHN6LiAqLwogICAgICAgICBpZiAoc2l6ZV9hID4gKFBZX1NTSVpFX1RfTUFYIC0gMykgLyBQeUxvbmdfU0hJRlQpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIHNpemVfYV9pbl9iaXRzID0gKHNpemVfYSAtIDEpICogUHlMb25nX1NISUZUICsKQEAgLTE5NDYsMTAgKzE5NDEsMTAgQEAKICAqIHN0cmluZyBjaGFyYWN0ZXJzLgogICovCiBzdGF0aWMgUHlMb25nT2JqZWN0ICoKLWxvbmdfZnJvbV9iaW5hcnlfYmFzZShjaGFyICoqc3RyLCBpbnQgYmFzZSkKK2xvbmdfZnJvbV9iaW5hcnlfYmFzZShjb25zdCBjaGFyICoqc3RyLCBpbnQgYmFzZSkKIHsKLSAgICBjaGFyICpwID0gKnN0cjsKLSAgICBjaGFyICpzdGFydCA9IHA7CisgICAgY29uc3QgY2hhciAqcCA9ICpzdHI7CisgICAgY29uc3QgY2hhciAqc3RhcnQgPSBwOwogICAgIGludCBiaXRzX3Blcl9jaGFyOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeUxvbmdPYmplY3QgKno7CkBAIC0yMDE0LDEwICsyMDA5LDEwIEBACiAgKiBJZiB1bnN1Y2Nlc3NmdWwsIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4KICAqLwogUHlPYmplY3QgKgotUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCitQeUxvbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKIHsKICAgICBpbnQgc2lnbiA9IDEsIGVycm9yX2lmX25vbnplcm8gPSAwOwotICAgIGNoYXIgKnN0YXJ0LCAqb3JpZ19zdHIgPSBzdHI7CisgICAgY29uc3QgY2hhciAqc3RhcnQsICpvcmlnX3N0ciA9IHN0cjsKICAgICBQeUxvbmdPYmplY3QgKnogPSBOVUxMOwogICAgIFB5T2JqZWN0ICpzdHJvYmo7CiAgICAgUHlfc3NpemVfdCBzbGVuOwpAQCAtMjE0NiwxMyArMjE0MSwxMyBAQAoganVzdCAxIGRpZ2l0IGF0IHRoZSBzdGFydCwgc28gdGhhdCB0aGUgY29weWluZyBjb2RlIHdhcyBleGVyY2lzZWQgZm9yIGV2ZXJ5CiBkaWdpdCBiZXlvbmQgdGhlIGZpcnN0LgogKioqLwotICAgICAgICByZWdpc3RlciB0d29kaWdpdHMgYzsgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCisgICAgICAgIHR3b2RpZ2l0cyBjOyAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KICAgICAgICAgUHlfc3NpemVfdCBzaXplX3o7CiAgICAgICAgIGludCBpOwogICAgICAgICBpbnQgY29udndpZHRoOwogICAgICAgICB0d29kaWdpdHMgY29udm11bHRtYXgsIGNvbnZtdWx0OwogICAgICAgICBkaWdpdCAqcHosICpwenN0b3A7Ci0gICAgICAgIGNoYXIqIHNjYW47CisgICAgICAgIGNvbnN0IGNoYXIqIHNjYW47CiAKICAgICAgICAgc3RhdGljIGRvdWJsZSBsb2dfYmFzZV9CQVNFWzM3XSA9IHswLjBlMCx9OwogICAgICAgICBzdGF0aWMgaW50IGNvbnZ3aWR0aF9iYXNlWzM3XSA9IHswLH07CkBAIC0yMjgwLDE5ICsyMjc1LDE5IEBACiAgICAgaWYgKHogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHBlbmQgIT0gTlVMTCkKLSAgICAgICAgKnBlbmQgPSBzdHI7CisgICAgICAgICpwZW5kID0gKGNoYXIgKilzdHI7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSB6OwogCiAgIG9uRXJyb3I6CiAgICAgaWYgKHBlbmQgIT0gTlVMTCkKLSAgICAgICAgKnBlbmQgPSBzdHI7CisgICAgICAgICpwZW5kID0gKGNoYXIgKilzdHI7CiAgICAgUHlfWERFQ1JFRih6KTsKICAgICBzbGVuID0gc3RybGVuKG9yaWdfc3RyKSA8IDIwMCA/IHN0cmxlbihvcmlnX3N0cikgOiAyMDA7CiAgICAgc3Ryb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKG9yaWdfc3RyLCBzbGVuKTsKICAgICBpZiAoc3Ryb2JqID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAogICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwogICAgIFB5X0RFQ1JFRihzdHJvYmopOwogICAgIHJldHVybiBOVUxMOwpAQCAtMjMxNiw3ICsyMzExLDcgQEAKICAgICBzdHJvYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIFB5X01JTihsZW4sIDIwMCkpOwogICAgIGlmIChzdHJvYmogIT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAorICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAogICAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3Ryb2JqKTsKICAgICAgICAgUHlfREVDUkVGKHN0cm9iaik7CiAgICAgfQpAQCAtMjMzNyw3ICsyMzMyLDcgQEAKIFB5T2JqZWN0ICoKIFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdChQeU9iamVjdCAqdSwgaW50IGJhc2UpCiB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCwgKmFzY2lpZGlnLCAqc3Ryb2JqOworICAgIFB5T2JqZWN0ICpyZXN1bHQsICphc2NpaWRpZzsKICAgICBjaGFyICpidWZmZXIsICplbmQgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgYnVmbGVuOwogCkBAIC0yMzU5LDEzICsyMzU0LDkgQEAKICAgICAgICAgUHlfREVDUkVGKGFzY2lpZGlnKTsKICAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwogICAgIH0KLSAgICBzdHJvYmogPSBQeVNlcXVlbmNlX0dldFNsaWNlKHUsIDAsIDIwMCk7Ci0gICAgaWYgKHN0cm9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCi0gICAgICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwotICAgICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKLSAgICB9CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJS4yMDBSIiwKKyAgICAgICAgICAgICAgICAgYmFzZSwgdSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI0MTksMTAgKzI0MTAsMjEgQEAKICAgICAgICBUaGUgcXVvdGllbnQgeiBoYXMgdGhlIHNpZ24gb2YgYSpiOwogICAgICAgIHRoZSByZW1haW5kZXIgciBoYXMgdGhlIHNpZ24gb2YgYSwKICAgICAgICBzbyBhID0gYip6ICsgci4gKi8KLSAgICBpZiAoKFB5X1NJWkUoYSkgPCAwKSAhPSAoUHlfU0laRShiKSA8IDApKQotICAgICAgICBORUdBVEUoeik7Ci0gICAgaWYgKFB5X1NJWkUoYSkgPCAwICYmIFB5X1NJWkUoKnByZW0pICE9IDApCi0gICAgICAgIE5FR0FURSgqcHJlbSk7CisgICAgaWYgKChQeV9TSVpFKGEpIDwgMCkgIT0gKFB5X1NJWkUoYikgPCAwKSkgeworICAgICAgICBfUHlMb25nX05lZ2F0ZSgmeik7CisgICAgICAgIGlmICh6ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpwcmVtKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoUHlfU0laRShhKSA8IDAgJiYgUHlfU0laRSgqcHJlbSkgIT0gMCkgeworICAgICAgICBfUHlMb25nX05lZ2F0ZShwcmVtKTsKKyAgICAgICAgaWYgKCpwcmVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih6KTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpwcmVtKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KICAgICAqcGRpdiA9IG1heWJlX3NtYWxsX2xvbmcoeik7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yNjk4LDcgKzI3MDAsNyBAQAogICAgIHggPSBfUHlMb25nX0ZyZXhwKChQeUxvbmdPYmplY3QgKil2LCAmZXhwb25lbnQpOwogICAgIGlmICgoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHx8IGV4cG9uZW50ID4gREJMX01BWF9FWFApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibG9uZyBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gZmxvYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gZmxvYXQiKTsKICAgICAgICAgcmV0dXJuIC0xLjA7CiAgICAgfQogICAgIHJldHVybiBsZGV4cCh4LCAoaW50KWV4cG9uZW50KTsKQEAgLTI5MTgsOCArMjkyMCwxMSBAQAogICAgICAgICBib3Jyb3cgJj0gMTsgLyogS2VlcCBvbmx5IG9uZSBzaWduIGJpdCAqLwogICAgIH0KICAgICBhc3NlcnQoYm9ycm93ID09IDApOwotICAgIGlmIChzaWduIDwgMCkKLSAgICAgICAgTkVHQVRFKHopOworICAgIGlmIChzaWduIDwgMCkgeworICAgICAgICBfUHlMb25nX05lZ2F0ZSgmeik7CisgICAgICAgIGlmICh6ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIGxvbmdfbm9ybWFsaXplKHopOwogfQogCkBAIC0zMDg2LDcgKzMwOTEsNyBAQAogICAgIFB5X3NzaXplX3Qgc2l6ZV9sbywgc2l6ZV9oaTsKICAgICBjb25zdCBQeV9zc2l6ZV90IHNpemVfbiA9IEFCUyhQeV9TSVpFKG4pKTsKIAotICAgIHNpemVfbG8gPSBNSU4oc2l6ZV9uLCBzaXplKTsKKyAgICBzaXplX2xvID0gUHlfTUlOKHNpemVfbiwgc2l6ZSk7CiAgICAgc2l6ZV9oaSA9IHNpemVfbiAtIHNpemVfbG87CiAKICAgICBpZiAoKGhpID0gX1B5TG9uZ19OZXcoc2l6ZV9oaSkpID09IE5VTEwpCkBAIC0zMzU3LDcgKzMzNjIsNyBAQAogICAgIG5iZG9uZSA9IDA7CiAgICAgd2hpbGUgKGJzaXplID4gMCkgewogICAgICAgICBQeUxvbmdPYmplY3QgKnByb2R1Y3Q7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgbmJ0b3VzZSA9IE1JTihic2l6ZSwgYXNpemUpOworICAgICAgICBjb25zdCBQeV9zc2l6ZV90IG5idG91c2UgPSBQeV9NSU4oYnNpemUsIGFzaXplKTsKIAogICAgICAgICAvKiBNdWx0aXBseSB0aGUgbmV4dCBzbGljZSBvZiBiIGJ5IGEuICovCiAgICAgICAgIG1lbWNweShic2xpY2UtPm9iX2RpZ2l0LCBiLT5vYl9kaWdpdCArIG5iZG9uZSwKQEAgLTM0MTAsOCArMzQxNSwxMSBAQAogCiAgICAgeiA9IGtfbXVsKGEsIGIpOwogICAgIC8qIE5lZ2F0ZSBpZiBleGFjdGx5IG9uZSBvZiB0aGUgaW5wdXRzIGlzIG5lZ2F0aXZlLiAqLwotICAgIGlmICgoKFB5X1NJWkUoYSkgXiBQeV9TSVpFKGIpKSA8IDApICYmIHopCi0gICAgICAgIE5FR0FURSh6KTsKKyAgICBpZiAoKChQeV9TSVpFKGEpIF4gUHlfU0laRShiKSkgPCAwKSAmJiB6KSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gKFB5T2JqZWN0ICopejsKIH0KIApAQCAtMzY0OCw3ICszNjU2LDcgQEAKICAgICAgICAgZ290byB1bmRlcmZsb3dfb3JfemVybzsKIAogICAgIC8qIENob29zZSB2YWx1ZSBmb3Igc2hpZnQ7IHNlZSBjb21tZW50cyBmb3Igc3RlcCAxIGFib3ZlLiAqLwotICAgIHNoaWZ0ID0gTUFYKGRpZmYsIERCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRyAtIDI7CisgICAgc2hpZnQgPSBQeV9NQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKIAogICAgIGluZXhhY3QgPSAwOwogCkBAIC0zNzE5LDcgKzM3MjcsNyBAQAogICAgIHhfYml0cyA9ICh4X3NpemUtMSkqUHlMb25nX1NISUZUK2JpdHNfaW5fZGlnaXQoeC0+b2JfZGlnaXRbeF9zaXplLTFdKTsKIAogICAgIC8qIFRoZSBudW1iZXIgb2YgZXh0cmEgYml0cyB0aGF0IGhhdmUgdG8gYmUgcm91bmRlZCBhd2F5LiAqLwotICAgIGV4dHJhX2JpdHMgPSBNQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRzsKKyAgICBleHRyYV9iaXRzID0gUHlfTUFYKHhfYml0cywgREJMX01JTl9FWFAgLSBzaGlmdCkgLSBEQkxfTUFOVF9ESUc7CiAgICAgYXNzZXJ0KGV4dHJhX2JpdHMgPT0gMiB8fCBleHRyYV9iaXRzID09IDMpOwogCiAgICAgLyogUm91bmQgYnkgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBsb3cgZGlnaXQgb2YgeC4gKi8KQEAgLTM4NTgsNyArMzg2Niw5IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoYyk7CiAgICAgICAgICAgICBjID0gdGVtcDsKICAgICAgICAgICAgIHRlbXAgPSBOVUxMOwotICAgICAgICAgICAgTkVHQVRFKGMpOworICAgICAgICAgICAgX1B5TG9uZ19OZWdhdGUoJmMpOworICAgICAgICAgICAgaWYgKGMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwogICAgICAgICB9CiAKICAgICAgICAgLyogaWYgbW9kdWx1cyA9PSAxOgpAQCAtMzk2NCwxMCArMzk3NCw3IEBACiAgICAgZ290byBEb25lOwogCiAgIEVycm9yOgotICAgIGlmICh6ICE9IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHopOwotICAgICAgICB6ID0gTlVMTDsKLSAgICB9CisgICAgUHlfQ0xFQVIoeik7CiAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgIERvbmU6CiAgICAgaWYgKFB5X1NJWkUoYikgPiBGSVZFQVJZX0NVVE9GRikgewpAQCAtNDA5NywxMCArNDEwNCwxMCBAQAogCiAgICAgc2hpZnRieSA9IFB5TG9uZ19Bc1NzaXplX3QoKFB5T2JqZWN0ICopYik7CiAgICAgaWYgKHNoaWZ0YnkgPT0gLTFMICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2hpZnRieSA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJuZWdhdGl2ZSBzaGlmdCBjb3VudCIpOwotICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIC8qIHdvcmRzaGlmdCwgcmVtc2hpZnQgPSBkaXZtb2Qoc2hpZnRieSwgUHlMb25nX1NISUZUKSAqLwogICAgIHdvcmRzaGlmdCA9IHNoaWZ0YnkgLyBQeUxvbmdfU0hJRlQ7CkBAIC00MTEyLDkgKzQxMTksMTEgQEAKICAgICAgICAgKytuZXdzaXplOwogICAgIHogPSBfUHlMb25nX05ldyhuZXdzaXplKTsKICAgICBpZiAoeiA9PSBOVUxMKQotICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKLSAgICBpZiAoUHlfU0laRShhKSA8IDApCi0gICAgICAgIE5FR0FURSh6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5X1NJWkUoYSkgPCAwKSB7CisgICAgICAgIGFzc2VydChQeV9SRUZDTlQoeikgPT0gMSk7CisgICAgICAgIFB5X1NJWkUoeikgPSAtUHlfU0laRSh6KTsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IHdvcmRzaGlmdDsgaSsrKQogICAgICAgICB6LT5vYl9kaWdpdFtpXSA9IDA7CiAgICAgYWNjdW0gPSAwOwpAQCAtNDEyOCw3ICs0MTM3LDYgQEAKICAgICBlbHNlCiAgICAgICAgIGFzc2VydCghYWNjdW0pOwogICAgIHogPSBsb25nX25vcm1hbGl6ZSh6KTsKLSAgbHNoaWZ0X2Vycm9yOgogICAgIHJldHVybiAoUHlPYmplY3QgKikgbWF5YmVfc21hbGxfbG9uZyh6KTsKIH0KIApAQCAtNDE1Myw3ICs0MTYxLDcgQEAKIAogc3RhdGljIFB5T2JqZWN0ICoKIGxvbmdfYml0d2lzZShQeUxvbmdPYmplY3QgKmEsCi0gICAgICAgICAgICAgaW50IG9wLCAgLyogJyYnLCAnfCcsICdeJyAqLworICAgICAgICAgICAgIGNoYXIgb3AsICAvKiAnJicsICd8JywgJ14nICovCiAgICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpiKQogewogICAgIGludCBuZWdhLCBuZWdiLCBuZWd6OwpAQCAtNDMyOCw4ICs0MzM2LDcgQEAKIGxvbmdfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICpvYmFzZSA9IE5VTEwsICp4ID0gTlVMTDsKLSAgICBsb25nIGJhc2U7Ci0gICAgaW50IG92ZXJmbG93OworICAgIFB5X3NzaXplX3QgYmFzZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7IngiLCAiYmFzZSIsIDB9OwogCiAgICAgaWYgKHR5cGUgIT0gJlB5TG9uZ19UeXBlKQpAQCAtNDM0OCwxMCArNDM1NSwxMCBAQAogICAgIGlmIChvYmFzZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlOdW1iZXJfTG9uZyh4KTsKIAotICAgIGJhc2UgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2Jhc2UsICZvdmVyZmxvdyk7CisgICAgYmFzZSA9IFB5TnVtYmVyX0FzU3NpemVfdChvYmFzZSwgTlVMTCk7CiAgICAgaWYgKGJhc2UgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKG92ZXJmbG93IHx8IChiYXNlICE9IDAgJiYgYmFzZSA8IDIpIHx8IGJhc2UgPiAzNikgeworICAgIGlmICgoYmFzZSAhPSAwICYmIGJhc2UgPCAyKSB8fCBiYXNlID4gMzYpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiaW50KCkgYmFzZSBtdXN0IGJlID49IDIgYW5kIDw9IDM2Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDQzMiw3ICs0NDM5LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlMb25nX0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtNTA4OSw4ICs1MDk2LDEwIEBACiAgICAgfQogI2VuZGlmCiAgICAgLyogaW5pdGlhbGl6ZSBpbnRfaW5mbyAqLwotICAgIGlmIChJbnRfSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZJbnRfSW5mb1R5cGUsICZpbnRfaW5mb19kZXNjKTsKKyAgICBpZiAoSW50X0luZm9UeXBlLnRwX25hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkludF9JbmZvVHlwZSwgJmludF9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KIAogICAgIHJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tZW1vcnlvYmplY3QuYyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKaW5kZXggMTg5YWY4OC4uY2I2NDRiOCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9tZW1vcnlvYmplY3QuYworKysgYi9PYmplY3RzL21lbW9yeW9iamVjdC5jCkBAIC0yNDAyLDcgKzI0MDIsNyBAQAogCiAvKiBBcyBzZXF1ZW5jZSAqLwogc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIG1lbW9yeV9hc19zZXF1ZW5jZSA9IHsKLSAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworICAgICAgICAobGVuZnVuYyltZW1vcnlfbGVuZ3RoLCAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLwogICAgICAgICAoc3NpemVhcmdmdW5jKW1lbW9yeV9pdGVtLCAgICAgICAgLyogc3FfaXRlbSAqLwpAQCAtMjc0Miw3ICsyNzQyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIENhbid0IGZhaWwgKi8KLSAgICAgICAgc2VsZi0+aGFzaCA9IF9QeV9IYXNoQnl0ZXMoKHVuc2lnbmVkIGNoYXIgKiltZW0sIHZpZXctPmxlbik7CisgICAgICAgIHNlbGYtPmhhc2ggPSBfUHlfSGFzaEJ5dGVzKG1lbSwgdmlldy0+bGVuKTsKIAogICAgICAgICBpZiAobWVtICE9IHZpZXctPmJ1ZikKICAgICAgICAgICAgIFB5TWVtX0ZyZWUobWVtKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMgYi9PYmplY3RzL21ldGhvZG9iamVjdC5jCmluZGV4IGYwNjg1ZGQuLjU1YTdkNmEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwpAQCAtMTMsNiArMTMsMTUgQEAKICNkZWZpbmUgUHlDRnVuY3Rpb25fTUFYRlJFRUxJU1QgMjU2CiAjZW5kaWYKIAorLyogdW5kZWZpbmUgbWFjcm8gdHJhbXBvbGluZSB0byBQeUNGdW5jdGlvbl9OZXdFeCAqLworI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldworCitQeU9iamVjdCAqCitQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgobWwsIHNlbGYsIE5VTEwpOworfQorCiBQeU9iamVjdCAqCiBQeUNGdW5jdGlvbl9OZXdFeChQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlKQogewpAQCAtNzAsMjMgKzc5LDM0IEBACiBQeU9iamVjdCAqCiBQeUNGdW5jdGlvbl9DYWxsKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnLCBQeU9iamVjdCAqa3cpCiB7CisjZGVmaW5lIENIRUNLX1JFU1VMVChyZXMpIGFzc2VydChyZXMgIT0gTlVMTCB8fCBQeUVycl9PY2N1cnJlZCgpKQorCiAgICAgUHlDRnVuY3Rpb25PYmplY3QqIGYgPSAoUHlDRnVuY3Rpb25PYmplY3QqKWZ1bmM7CiAgICAgUHlDRnVuY3Rpb24gbWV0aCA9IFB5Q0Z1bmN0aW9uX0dFVF9GVU5DVElPTihmdW5jKTsKICAgICBQeU9iamVjdCAqc2VsZiA9IFB5Q0Z1bmN0aW9uX0dFVF9TRUxGKGZ1bmMpOworICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlfc3NpemVfdCBzaXplOwogCiAgICAgc3dpdGNoIChQeUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYykgJiB+KE1FVEhfQ0xBU1MgfCBNRVRIX1NUQVRJQyB8IE1FVEhfQ09FWElTVCkpIHsKICAgICBjYXNlIE1FVEhfVkFSQVJHUzoKLSAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApCi0gICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBhcmcpOworICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgeworICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBhcmcpOworICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUzoKLSAgICAgICAgcmV0dXJuICgqKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKW1ldGgpKHNlbGYsIGFyZywga3cpOworICAgICAgICByZXMgPSAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3JkcyltZXRoKShzZWxmLCBhcmcsIGt3KTsKKyAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CiAgICAgY2FzZSBNRVRIX05PQVJHUzoKICAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKICAgICAgICAgICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIE5VTEwpOworICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIG5vIGFyZ3VtZW50cyAoJXpkIGdpdmVuKSIsCiAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6ZSk7CkBAIC05Niw4ICsxMTYsMTEgQEAKICAgICBjYXNlIE1FVEhfTzoKICAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKICAgICAgICAgICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oYXJnLCAwKSk7CisgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCkpOworICAgICAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCAoJXpkIGdpdmVuKSIsCiAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6ZSk7CkBAIC0xMTQsNiArMTM3LDggQEAKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJS4yMDBzKCkgdGFrZXMgbm8ga2V5d29yZCBhcmd1bWVudHMiLAogICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lKTsKICAgICByZXR1cm4gTlVMTDsKKworI3VuZGVmIENIRUNLX1JFU1VMVAogfQogCiAvKiBNZXRob2RzICh0aGUgc3RhbmRhcmQgYnVpbHQtaW4gbWV0aG9kcywgdGhhdCBpcykgKi8KQEAgLTEzNSwxNCArMTYwLDk0IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCittZXRoX3JlZHVjZShQeUNGdW5jdGlvbk9iamVjdCAqbSkKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBpZiAobS0+bV9zZWxmID09IE5VTEwgfHwgUHlNb2R1bGVfQ2hlY2sobS0+bV9zZWxmKSkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKG0tPm1fbWwtPm1sX25hbWUpOworCisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9zKSIsIGdldGF0dHIsIG0tPm1fc2VsZiwgbS0+bV9tbC0+bWxfbmFtZSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtZXRoX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pbWV0aF9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKKy8qCisgKiBmaW5kcyB0aGUgZG9jc3RyaW5nJ3MgaW50cm9zcGVjdGlvbiBzaWduYXR1cmUuCisgKiBpZiBwcmVzZW50LCByZXR1cm5zIGEgcG9pbnRlciBwb2ludGluZyB0byB0aGUgZmlyc3QgJygnLgorICogb3RoZXJ3aXNlIHJldHVybnMgTlVMTC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfc2lnbmF0dXJlKFB5Q0Z1bmN0aW9uT2JqZWN0ICptKQoreworICAgIGNvbnN0IGNoYXIgKnRyYWNlID0gbS0+bV9tbC0+bWxfZG9jOworICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBtLT5tX21sLT5tbF9uYW1lOworICAgIHNpemVfdCBsZW5ndGg7CisgICAgaWYgKCF0cmFjZSB8fCAhbmFtZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgIGlmIChzdHJuY21wKHRyYWNlLCBuYW1lLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0cmFjZSArPSBsZW5ndGg7CisgICAgaWYgKCp0cmFjZSAhPSAnKCcpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiB0cmFjZTsKK30KKworLyoKKyAqIHNraXBzIHRvIHRoZSBlbmQgb2YgdGhlIGRvY3N0cmluZydzIGluc3Ryb3NwZWN0aW9uIHNpZ25hdHVyZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfc2lnbmF0dXJlKGNvbnN0IGNoYXIgKnRyYWNlKQoreworICAgIHdoaWxlICgqdHJhY2UgJiYgKnRyYWNlICE9ICdcbicpCisgICAgICAgIHRyYWNlKys7CisgICAgcmV0dXJuIHRyYWNlOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcF9lb2xzKGNvbnN0IGNoYXIgKnRyYWNlKQoreworICAgIHdoaWxlICgqdHJhY2UgPT0gJ1xuJykKKyAgICAgICAgdHJhY2UrKzsKKyAgICByZXR1cm4gdHJhY2U7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZXRoX2dldF9fdGV4dF9zaWduYXR1cmVfXyhQeUNGdW5jdGlvbk9iamVjdCAqbSwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydCA9IGZpbmRfc2lnbmF0dXJlKG0pOworICAgIGNvbnN0IGNoYXIgKnRyYWNlOworCisgICAgaWYgKCFzdGFydCkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKworICAgIHRyYWNlID0gc2tpcF9zaWduYXR1cmUoc3RhcnQpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoc3RhcnQsIHRyYWNlIC0gc3RhcnQpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogbWV0aF9nZXRfX2RvY19fKFB5Q0Z1bmN0aW9uT2JqZWN0ICptLCB2b2lkICpjbG9zdXJlKQogewotICAgIGNvbnN0IGNoYXIgKmRvYyA9IG0tPm1fbWwtPm1sX2RvYzsKKyAgICBjb25zdCBjaGFyICpkb2MgPSBmaW5kX3NpZ25hdHVyZShtKTsKIAotICAgIGlmIChkb2MgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRvYyk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIGlmIChkb2MpCisgICAgICAgIGRvYyA9IHNraXBfZW9scyhza2lwX3NpZ25hdHVyZShkb2MpKTsKKyAgICBlbHNlCisgICAgICAgIGRvYyA9IG0tPm1fbWwtPm1sX2RvYzsKKyAgICAKKyAgICBpZiAoIWRvYykgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkb2MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjExLDYgKzMxNiw3IEBACiAgICAgeyJfX25hbWVfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX25hbWVfXywgTlVMTCwgTlVMTH0sCiAgICAgeyJfX3F1YWxuYW1lX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X19xdWFsbmFtZV9fLCBOVUxMLCBOVUxMfSwKICAgICB7Il9fc2VsZl9fIiwgKGdldHRlciltZXRoX2dldF9fc2VsZl9fLCBOVUxMLCBOVUxMfSwKKyAgICB7Il9fdGV4dF9zaWduYXR1cmVfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX3RleHRfc2lnbmF0dXJlX18sIE5VTEwsIE5VTEx9LAogICAgIHswfQogfTsKIApAQCAtMzA4LDcgKzQxNCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBtZXRoX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBtZXRoX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRoX2dldHNldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMzQ2LDE3ICs0NTIsMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZWUgUHlDRnVuY3Rpb25PYmplY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZnJlZSwgc2l6ZW9mKFB5Q0Z1bmN0aW9uT2JqZWN0KSk7CiB9Ci0KLS8qIFB5Q0Z1bmN0aW9uX05ldygpIGlzIG5vdyBqdXN0IGEgbWFjcm8gdGhhdCBjYWxscyBQeUNGdW5jdGlvbl9OZXdFeCgpLAotICAgYnV0IGl0J3MgcGFydCBvZiB0aGUgQVBJIHNvIHdlIG5lZWQgdG8ga2VlcCBhIGZ1bmN0aW9uIGFyb3VuZCB0aGF0Ci0gICBleGlzdGluZyBDIGV4dGVuc2lvbnMgY2FuIGNhbGwuCi0qLwotCi0jdW5kZWYgUHlDRnVuY3Rpb25fTmV3Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q0Z1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqLCBQeU9iamVjdCAqKTsKLQotUHlPYmplY3QgKgotUHlDRnVuY3Rpb25fTmV3KFB5TWV0aG9kRGVmICptbCwgUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ld0V4KG1sLCBzZWxmLCBOVUxMKTsKLX0KZGlmZiAtLWdpdCBhL09iamVjdHMvbW9kdWxlb2JqZWN0LmMgYi9PYmplY3RzL21vZHVsZW9iamVjdC5jCmluZGV4IDJmMmJkMzYuLmQ1OTQ3NWUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tb2R1bGVvYmplY3QuYwpAQCAtMTEsNiArMTEsOCBAQAogICAgIFB5T2JqZWN0ICptZF9kaWN0OwogICAgIHN0cnVjdCBQeU1vZHVsZURlZiAqbWRfZGVmOwogICAgIHZvaWQgKm1kX3N0YXRlOworICAgIFB5T2JqZWN0ICptZF93ZWFrbGlzdDsKKyAgICBQeU9iamVjdCAqbWRfbmFtZTsgIC8qIGZvciBsb2dnaW5nIHB1cnBvc2VzIGFmdGVyIG1kX2RpY3QgaXMgY2xlYXJlZCAqLwogfSBQeU1vZHVsZU9iamVjdDsKIAogc3RhdGljIFB5TWVtYmVyRGVmIG1vZHVsZV9tZW1iZXJzW10gPSB7CkBAIC0yNiw2ICsyOCwzNSBAQAogfTsKIAogCitzdGF0aWMgaW50Cittb2R1bGVfaW5pdF9kaWN0KFB5TW9kdWxlT2JqZWN0ICptb2QsIFB5T2JqZWN0ICptZF9kaWN0LAorICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmRvYykKK3sKKyAgICBpZiAobWRfZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGRvYyA9PSBOVUxMKQorICAgICAgICBkb2MgPSBQeV9Ob25lOworCisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX25hbWVfXyIsIG5hbWUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fZG9jX18iLCBkb2MpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fcGFja2FnZV9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19sb2FkZXJfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fc3BlY19fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChuYW1lKSkgeworICAgICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgICAgIFB5X1hERUNSRUYobW9kLT5tZF9uYW1lKTsKKyAgICAgICAgbW9kLT5tZF9uYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCiBQeU9iamVjdCAqCiBQeU1vZHVsZV9OZXdPYmplY3QoUHlPYmplY3QgKm5hbWUpCiB7CkBAIC0zNSwxNCArNjYsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbS0+bWRfZGVmID0gTlVMTDsKICAgICBtLT5tZF9zdGF0ZSA9IE5VTEw7CisgICAgbS0+bWRfd2Vha2xpc3QgPSBOVUxMOworICAgIG0tPm1kX25hbWUgPSBOVUxMOwogICAgIG0tPm1kX2RpY3QgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKG0tPm1kX2RpY3QgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19uYW1lX18iLCBuYW1lKSAhPSAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG0tPm1kX2RpY3QsICJfX2RvY19fIiwgUHlfTm9uZSkgIT0gMCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19wYWNrYWdlX18iLCBQeV9Ob25lKSAhPSAwKQorICAgIGlmIChtb2R1bGVfaW5pdF9kaWN0KG0sIG0tPm1kX2RpY3QsIG5hbWUsIE5VTEwpICE9IDApCiAgICAgICAgIGdvdG8gZmFpbDsKICAgICBQeU9iamVjdF9HQ19UcmFjayhtKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbTsKQEAgLTM0Nyw5ICszNzQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBtLT5tZF9kaWN0ID0gZGljdDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJfX25hbWVfXyIsIG5hbWUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19kb2NfXyIsIGRvYykgPCAwKQorICAgIGlmIChtb2R1bGVfaW5pdF9kaWN0KG0sIGRpY3QsIG5hbWUsIGRvYykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNTgsMTIgKzM4MywxNSBAQAogbW9kdWxlX2RlYWxsb2MoUHlNb2R1bGVPYmplY3QgKm0pCiB7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhtKTsKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgbS0+bWRfbmFtZSkgeworICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgZGVzdHJveSAlU1xuIiwgbS0+bWRfbmFtZSk7CisgICAgfQorICAgIGlmIChtLT5tZF93ZWFrbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtKTsKICAgICBpZiAobS0+bWRfZGVmICYmIG0tPm1kX2RlZi0+bV9mcmVlKQogICAgICAgICBtLT5tZF9kZWYtPm1fZnJlZShtKTsKLSAgICBpZiAobS0+bWRfZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcigoUHlPYmplY3QgKiltKTsKLSAgICAgICAgUHlfREVDUkVGKG0tPm1kX2RpY3QpOwotICAgIH0KKyAgICBQeV9YREVDUkVGKG0tPm1kX2RpY3QpOworICAgIFB5X1hERUNSRUYobS0+bWRfbmFtZSk7CiAgICAgaWYgKG0tPm1kX3N0YXRlICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZSRUUobS0+bWRfc3RhdGUpOwogICAgIFB5X1RZUEUobSktPnRwX2ZyZWUoKFB5T2JqZWN0ICopbSk7CkBAIC0zNzIsNTUgKzQwMCwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1vZHVsZV9yZXByKFB5TW9kdWxlT2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpuYW1lLCAqZmlsZW5hbWUsICpyZXByLCAqbG9hZGVyID0gTlVMTDsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CiAKLSAgICAvKiBTZWUgaWYgdGhlIG1vZHVsZSBoYXMgYW4gX19sb2FkZXJfXy4gIElmIGl0IGRvZXMsIGdpdmUgdGhlIGxvYWRlciB0aGUKLSAgICAgKiBmaXJzdCBzaG90IGF0IHByb2R1Y2luZyBhIHJlcHIgZm9yIHRoZSBtb2R1bGUuCi0gICAgICovCi0gICAgaWYgKG0tPm1kX2RpY3QgIT0gTlVMTCkgewotICAgICAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19sb2FkZXJfXyIpOwotICAgIH0KLSAgICBpZiAobG9hZGVyICE9IE5VTEwpIHsKLSAgICAgICAgcmVwciA9IFB5T2JqZWN0X0NhbGxNZXRob2QobG9hZGVyLCAibW9kdWxlX3JlcHIiLCAiKE8pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopbSwgTlVMTCk7Ci0gICAgICAgIGlmIChyZXByID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVwcjsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBfX2xvYWRlcl9fLm1vZHVsZV9yZXByKG0pIGRpZCBub3QgcHJvdmlkZSB1cyB3aXRoIGEgcmVwci4gIE5leHQsIHNlZSBpZgotICAgICAqIHRoZSBtb2R1bGUgaGFzIGFuIF9fZmlsZV9fLiAgSWYgaXQgZG9lc24ndCB0aGVuIHVzZSByZXByKF9fbG9hZGVyX18pIGlmCi0gICAgICogaXQgZXhpc3RzLCBvdGhlcndpc2UsIGp1c3QgdXNlIG1vZHVsZS5fX25hbWVfXy4KLSAgICAgKi8KLSAgICBuYW1lID0gUHlNb2R1bGVfR2V0TmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIG5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIj8iLCAxKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBmaWxlbmFtZSA9IFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KChQeU9iamVjdCAqKW0pOwotICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIC8qIFRoZXJlJ3Mgbm8gbS5fX2ZpbGVfXywgc28gaWYgdGhlcmUgd2FzIGFuIF9fbG9hZGVyX18sIHVzZSB0aGF0IGluCi0gICAgICAgICAqIHRoZSByZXByLCBvdGhlcndpc2UsIHRoZSBvbmx5IHRoaW5nIHlvdSBjYW4gdXNlIGlzIG0uX19uYW1lX18KLSAgICAgICAgICovCi0gICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSPiIsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSICglUik+IiwgbmFtZSwgbG9hZGVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBGaW5hbGx5LCB1c2UgbS5fX2ZpbGVfXyAqLwotICAgIGVsc2UgewotICAgICAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxtb2R1bGUgJVIgZnJvbSAlUj4iLCBuYW1lLCBmaWxlbmFtZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gcmVwcjsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnRlcnAtPmltcG9ydGxpYiwgIl9tb2R1bGVfcmVwciIsICJPIiwgbSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTUwOSw3ICs0OTIsNyBAQAogICAgICh0cmF2ZXJzZXByb2MpbW9kdWxlX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSltb2R1bGVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihQeU1vZHVsZU9iamVjdCwgbWRfd2Vha2xpc3QpLCAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIG1vZHVsZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYyBiL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKaW5kZXggZmYyNzhkMy4uNzIwYWMwZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYworKysgYi9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCkBAIC00NCw3ICs0NCw3IEBACiAgICAgaWYgKGFyZ3MgIT0gTlVMTCkgewogICAgICAgICBQeV9zc2l6ZV90IGFyZ2NvdW50ID0gUHlPYmplY3RfU2l6ZShhcmdzKTsKICAgICAgICAgaWYgKGFyZ2NvdW50IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBhcmdjb3VudDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZWxzZSBpZiAoYXJnY291bnQgPiAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAibm8gcG9zaXRpb25hbCBhcmd1bWVudHMgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTY2LDE2ICs2NiwyMCBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uYW1lc3BhY2VfcmVwcihfUHlOYW1lc3BhY2VPYmplY3QgKm5zKQorbmFtZXNwYWNlX3JlcHIoUHlPYmplY3QgKm5zKQogewogICAgIGludCBpLCBsb29wX2Vycm9yID0gMDsKICAgICBQeU9iamVjdCAqcGFpcnMgPSBOVUxMLCAqZCA9IE5VTEwsICprZXlzID0gTlVMTCwgKmtleXNfaXRlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeU9iamVjdCAqc2VwYXJhdG9yLCAqcGFpcnNyZXByLCAqcmVwciA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIG5hbWU7CiAKLSAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKW5zKTsKKyAgICBuYW1lID0gKFB5X1RZUEUobnMpID09ICZfUHlOYW1lc3BhY2VfVHlwZSkgPyAibmFtZXNwYWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5zLT5vYl90eXBlLT50cF9uYW1lOworCisgICAgaSA9IFB5X1JlcHJFbnRlcihucyk7CiAgICAgaWYgKGkgIT0gMCkgewotICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygibmFtZXNwYWNlKC4uLikiKSA6IE5VTEw7CisgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyguLi4pIiwgbmFtZSkgOiBOVUxMOwogICAgIH0KIAogICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKQEAgLTk3LDcgKzEwMSw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICB3aGlsZSAoKGtleSA9IFB5SXRlcl9OZXh0KGtleXNfaXRlcikpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5VW5pY29kZV9HRVRfU0laRShrZXkpID4gMCkgeworICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlVbmljb2RlX0dFVF9MRU5HVEgoa2V5KSA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSwgKml0ZW07CiAKICAgICAgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZCwga2V5KTsKQEAgLTEyNyw4ICsxMzEsNyBAQAogICAgIGlmIChwYWlyc3JlcHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeU9iamVjdCAqKW5zKS0+b2JfdHlwZS0+dHBfbmFtZSwgcGFpcnNyZXByKTsKKyAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVTKSIsIG5hbWUsIHBhaXJzcmVwcik7CiAgICAgUHlfREVDUkVGKHBhaXJzcmVwcik7CiAKIGVycm9yOgpAQCAtMTM2LDcgKzEzOSw3IEBACiAgICAgUHlfWERFQ1JFRihkKTsKICAgICBQeV9YREVDUkVGKGtleXMpOwogICAgIFB5X1hERUNSRUYoa2V5c19pdGVyKTsKLSAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbnMpOworICAgIFB5X1JlcHJMZWF2ZShucyk7CiAKICAgICByZXR1cm4gcmVwcjsKIH0KQEAgLTE1OCwxNCArMTYxLDQ5IEBACiB9CiAKIAorc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCit7CisgICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2Uoc2VsZiwgKFB5T2JqZWN0ICopJl9QeU5hbWVzcGFjZV9UeXBlKSAmJgorICAgICAgICAgICAgUHlPYmplY3RfSXNJbnN0YW5jZShvdGhlciwgKFB5T2JqZWN0ICopJl9QeU5hbWVzcGFjZV9UeXBlKSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKCgoX1B5TmFtZXNwYWNlT2JqZWN0ICopc2VsZiktPm5zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX1B5TmFtZXNwYWNlT2JqZWN0ICopb3RoZXIpLT5uc19kaWN0LCBvcCk7CisgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7Cit9CisKKworUHlEb2NfU1RSVkFSKG5hbWVzcGFjZV9yZWR1Y2VfX2RvY19fLCAiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZyIpOworCitzdGF0aWMgUHlPYmplY3QgKgorbmFtZXNwYWNlX3JlZHVjZShfUHlOYW1lc3BhY2VPYmplY3QgKm5zKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQsICphcmdzID0gUHlUdXBsZV9OZXcoMCk7CisKKyAgICBpZiAoIWFyZ3MpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmVzdWx0ID0gUHlUdXBsZV9QYWNrKDMsIChQeU9iamVjdCAqKVB5X1RZUEUobnMpLCBhcmdzLCBucy0+bnNfZGljdCk7CisgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIG5hbWVzcGFjZV9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKW5hbWVzcGFjZV9yZWR1Y2UsIE1FVEhfTk9BUkdTLAorICAgICBuYW1lc3BhY2VfcmVkdWNlX19kb2NfX30sCisgICAge05VTEwsICAgICAgICAgTlVMTH0gIC8qIHNlbnRpbmVsICovCit9OworCisKIFB5RG9jX1NUUlZBUihuYW1lc3BhY2VfZG9jLAogIkEgc2ltcGxlIGF0dHJpYnV0ZS1iYXNlZCBuYW1lc3BhY2UuXG5cCiBcblwKLW5hbWVzcGFjZSgqKmt3YXJncykiKTsKK1NpbXBsZU5hbWVzcGFjZSgqKmt3YXJncykiKTsKIAogUHlUeXBlT2JqZWN0IF9QeU5hbWVzcGFjZV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0gICAgIm5hbWVzcGFjZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgInR5cGVzLlNpbXBsZU5hbWVzcGFjZSIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCiAgICAgc2l6ZW9mKF9QeU5hbWVzcGFjZU9iamVjdCksICAgICAgICAgICAgICAgICAvKiB0cF9zaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwogICAgIChkZXN0cnVjdG9yKW5hbWVzcGFjZV9kZWFsbG9jLCAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwpAQCAtMTg4LDExICsyMjYsMTEgQEAKICAgICBuYW1lc3BhY2VfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpbmFtZXNwYWNlX3RyYXZlcnNlLCAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSluYW1lc3BhY2VfY2xlYXIsICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG5hbWVzcGFjZV9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIG5hbWVzcGFjZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIG5hbWVzcGFjZV9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCmRpZmYgLS1naXQgYS9PYmplY3RzL29iamVjdC5jIGIvT2JqZWN0cy9vYmplY3QuYwppbmRleCA5NDllN2RjLi4xMTcxOGFhIDEwMDY0NAotLS0gYS9PYmplY3RzL29iamVjdC5jCisrKyBiL09iamVjdHMvb2JqZWN0LmMKQEAgLTgsNiArOCwxMiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoUHlfUmVwcik7CitfUHlfSURFTlRJRklFUihfX2J5dGVzX18pOworX1B5X0lERU5USUZJRVIoX19kaXJfXyk7CitfUHlfSURFTlRJRklFUihfX2lzYWJzdHJhY3RtZXRob2RfXyk7CitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CisKICNpZmRlZiBQeV9SRUZfREVCVUcKIFB5X3NzaXplX3QgX1B5X1JlZlRvdGFsOwogCkBAIC0yMiw3ICsyOCw3IEBACiAgICAgbyA9IF9QeURpY3RfRHVtbXkoKTsKICAgICBpZiAobyAhPSBOVUxMKQogICAgICAgICB0b3RhbCAtPSBvLT5vYl9yZWZjbnQ7Ci0gICAgbyA9IF9QeVNldF9EdW1teSgpOworICAgIG8gPSBfUHlTZXRfRHVtbXk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwogICAgIHJldHVybiB0b3RhbDsKQEAgLTI1NSw2ICsyNjEsNzIgQEAKICAgICByZXR1cm4gUHlPYmplY3RfSU5JVF9WQVIob3AsIHRwLCBuaXRlbXMpOwogfQogCit2b2lkCitQeU9iamVjdF9DYWxsRmluYWxpemVyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKHNlbGYpOworCisgICAgLyogVGhlIGZvcm1lciBjb3VsZCBoYXBwZW4gb24gaGVhcHR5cGVzIGNyZWF0ZWQgZnJvbSB0aGUgQyBBUEksIGUuZy4KKyAgICAgICBQeVR5cGVfRnJvbVNwZWMoKS4gKi8KKyAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHRwLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpIHx8CisgICAgICAgIHRwLT50cF9maW5hbGl6ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgLyogdHBfZmluYWxpemUgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuICovCisgICAgaWYgKFB5VHlwZV9JU19HQyh0cCkgJiYgX1B5R0NfRklOQUxJWkVEKHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICB0cC0+dHBfZmluYWxpemUoc2VsZik7CisgICAgaWYgKFB5VHlwZV9JU19HQyh0cCkpCisgICAgICAgIF9QeUdDX1NFVF9GSU5BTElaRUQoc2VsZiwgMSk7Cit9CisKK2ludAorUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgcmVmY250OworCisgICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCisgICAgaWYgKHNlbGYtPm9iX3JlZmNudCAhPSAwKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyBjYWxsZWQgb24gIgorICAgICAgICAgICAgICAgICAgICAgICJvYmplY3Qgd2l0aCBhIG5vbi16ZXJvIHJlZmNvdW50Iik7CisgICAgfQorICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7CisKKyAgICBQeU9iamVjdF9DYWxsRmluYWxpemVyKHNlbGYpOworCisgICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAorICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCisgICAgICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOworICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQorICAgICAgICByZXR1cm4gMDsgICAgICAgICAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KKworICAgIC8qIHRwX2ZpbmFsaXplIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgorICAgICAqIG5ldmVyIGhhcHBlbmVkLgorICAgICAqLworICAgIHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKKyAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOworICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKKworICAgIGlmIChQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkpIHsKKyAgICAgICAgYXNzZXJ0KF9QeUdDX1JFRlMoc2VsZikgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIH0KKyAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KKyAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KKyAgICBfUHlfREVDX1JFRlRPVEFMOworICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0CisgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCisgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCisgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCisgICAgICogdW5kb25lLgorICAgICAqLworI2lmZGVmIENPVU5UX0FMTE9DUworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7CisgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7CisjZW5kaWYKKyAgICByZXR1cm4gLTE7Cit9CisKIGludAogUHlPYmplY3RfUHJpbnQoUHlPYmplY3QgKm9wLCBGSUxFICpmcCwgaW50IGZsYWdzKQogewpAQCAtMzQwLDExICs0MTIsMTcgQEAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbDsKICNlbmRpZgorICAgICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib2JqZWN0ICA6ICIpOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgIGdpbCA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKKworICAgICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKICAgICAgICAgKHZvaWQpUHlPYmplY3RfUHJpbnQob3AsIHN0ZGVyciwgMCk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsKTsKICNlbmRpZgpAQCAtMzc3LDYgKzQ1NSwxNCBAQAogICAgIGlmIChQeV9UWVBFKHYpLT50cF9yZXByID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi0+b2JfdHlwZS0+dHBfbmFtZSwgdik7CisKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5T2JqZWN0X1JlcHIoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgcmVzID0gKCp2LT5vYl90eXBlLT50cF9yZXByKSh2KTsKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDE5LDYgKzUwNSwxMyBAQAogICAgIGlmIChQeV9UWVBFKHYpLT50cF9zdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIodik7CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5T2JqZWN0X1N0cigpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCisgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKyAgICAgICBjYWxsZXIgbG9vc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCisKICAgICAvKiBJdCBpcyBwb3NzaWJsZSBmb3IgYSB0eXBlIHRvIGhhdmUgYSB0cF9zdHIgcmVwcmVzZW50YXRpb24gdGhhdCBsb29wcwogICAgICAgIGluZmluaXRlbHkuICovCiAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGdldHRpbmcgdGhlIHN0ciBvZiBhbiBvYmplY3QiKSkKQEAgLTQ1MSw2ICs1NDQsOSBAQAogICAgIGlmIChyZXByID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSShyZXByKSkKKyAgICAgICAgcmV0dXJuIHJlcHI7CisKICAgICAvKiByZXByIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBQeVVuaWNvZGUgb2JqZWN0IGJ5IFB5T2JqZWN0X1JlcHIgKi8KICAgICBhc2NpaSA9IF9QeVVuaWNvZGVfQXNBU0NJSVN0cmluZyhyZXByLCAiYmFja3NsYXNocmVwbGFjZSIpOwogICAgIFB5X0RFQ1JFRihyZXByKTsKQEAgLTQ3MCw3ICs1NjYsNiBAQAogUHlPYmplY3RfQnl0ZXMoUHlPYmplY3QgKnYpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKmZ1bmM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19ieXRlc19fKTsKIAogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoIjxOVUxMPiIpOwpAQCAtNjM2LDE1MCArNzMxLDYgQEAKICAgICByZXR1cm4gb2s7CiB9CiAKLS8qIFNldCBvZiBoYXNoIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhlbHAgbWFpbnRhaW5pbmcgdGhlIGludmFyaWFudCB0aGF0Ci0gICAgaWYgYT09YiB0aGVuIGhhc2goYSk9PWhhc2goYikKLQotICAgQWxsIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucyAoX1B5X0hhc2gqKCkpIHJldHVybiAiLTEiIHRvIHNpZ25pZnkgYW4gZXJyb3IuCi0qLwotCi0vKiBGb3IgbnVtZXJpYyB0eXBlcywgdGhlIGhhc2ggb2YgYSBudW1iZXIgeCBpcyBiYXNlZCBvbiB0aGUgcmVkdWN0aW9uCi0gICBvZiB4IG1vZHVsbyB0aGUgcHJpbWUgUCA9IDIqKl9QeUhBU0hfQklUUyAtIDEuICBJdCdzIGRlc2lnbmVkIHNvIHRoYXQKLSAgIGhhc2goeCkgPT0gaGFzaCh5KSB3aGVuZXZlciB4IGFuZCB5IGFyZSBudW1lcmljYWxseSBlcXVhbCwgZXZlbiBpZgotICAgeCBhbmQgeSBoYXZlIGRpZmZlcmVudCB0eXBlcy4KLQotICAgQSBxdWljayBzdW1tYXJ5IG9mIHRoZSBoYXNoaW5nIHN0cmF0ZWd5OgotCi0gICAoMSkgRmlyc3QgZGVmaW5lIHRoZSAncmVkdWN0aW9uIG9mIHggbW9kdWxvIFAnIGZvciBhbnkgcmF0aW9uYWwKLSAgIG51bWJlciB4OyB0aGlzIGlzIGEgc3RhbmRhcmQgZXh0ZW5zaW9uIG9mIHRoZSB1c3VhbCBub3Rpb24gb2YKLSAgIHJlZHVjdGlvbiBtb2R1bG8gUCBmb3IgaW50ZWdlcnMuICBJZiB4ID09IHAvcSAod3JpdHRlbiBpbiBsb3dlc3QKLSAgIHRlcm1zKSwgdGhlIHJlZHVjdGlvbiBpcyBpbnRlcnByZXRlZCBhcyB0aGUgcmVkdWN0aW9uIG9mIHAgdGltZXMKLSAgIHRoZSBpbnZlcnNlIG9mIHRoZSByZWR1Y3Rpb24gb2YgcSwgYWxsIG1vZHVsbyBQOyBpZiBxIGlzIGV4YWN0bHkKLSAgIGRpdmlzaWJsZSBieSBQIHRoZW4gZGVmaW5lIHRoZSByZWR1Y3Rpb24gdG8gYmUgaW5maW5pdHkuICBTbyB3ZSd2ZQotICAgZ290IGEgd2VsbC1kZWZpbmVkIG1hcAotCi0gICAgICByZWR1Y2UgOiB7IHJhdGlvbmFsIG51bWJlcnMgfSAtPiB7IDAsIDEsIDIsIC4uLiwgUC0xLCBpbmZpbml0eSB9LgotCi0gICAoMikgTm93IGZvciBhIHJhdGlvbmFsIG51bWJlciB4LCBkZWZpbmUgaGFzaCh4KSBieToKLQotICAgICAgcmVkdWNlKHgpICAgaWYgeCA+PSAwCi0gICAgICAtcmVkdWNlKC14KSBpZiB4IDwgMAotCi0gICBJZiB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24gaXMgaW5maW5pdHkgKHRoaXMgaXMgaW1wb3NzaWJsZSBmb3IKLSAgIGludGVnZXJzLCBmbG9hdHMgYW5kIERlY2ltYWxzKSB0aGVuIHVzZSB0aGUgcHJlZGVmaW5lZCBoYXNoIHZhbHVlCi0gICBfUHlIQVNIX0lORiBmb3IgeCA+PSAwLCBvciAtX1B5SEFTSF9JTkYgZm9yIHggPCAwLCBpbnN0ZWFkLgotICAgX1B5SEFTSF9JTkYsIC1fUHlIQVNIX0lORiBhbmQgX1B5SEFTSF9OQU4gYXJlIGFsc28gdXNlZCBmb3IgdGhlCi0gICBoYXNoZXMgb2YgZmxvYXQgYW5kIERlY2ltYWwgaW5maW5pdGllcyBhbmQgbmFucy4KLQotICAgQSBzZWxsaW5nIHBvaW50IGZvciB0aGUgYWJvdmUgc3RyYXRlZ3kgaXMgdGhhdCBpdCBtYWtlcyBpdCBwb3NzaWJsZQotICAgdG8gY29tcHV0ZSBoYXNoZXMgb2YgZGVjaW1hbCBhbmQgYmluYXJ5IGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgIGVmZmljaWVudGx5LCBldmVuIGlmIHRoZSBleHBvbmVudCBvZiB0aGUgYmluYXJ5IG9yIGRlY2ltYWwgbnVtYmVyCi0gICBpcyBsYXJnZS4gIFRoZSBrZXkgcG9pbnQgaXMgdGhhdAotCi0gICAgICByZWR1Y2UoeCAqIHkpID09IHJlZHVjZSh4KSAqIHJlZHVjZSh5KSAobW9kdWxvIF9QeUhBU0hfTU9EVUxVUykKLQotICAgcHJvdmlkZWQgdGhhdCB7cmVkdWNlKHgpLCByZWR1Y2UoeSl9ICE9IHswLCBpbmZpbml0eX0uICBUaGUgcmVkdWN0aW9uIG9mIGEKLSAgIGJpbmFyeSBvciBkZWNpbWFsIGZsb2F0IGlzIG5ldmVyIGluZmluaXR5LCBzaW5jZSB0aGUgZGVub21pbmF0b3IgaXMgYSBwb3dlcgotICAgb2YgMiAoZm9yIGJpbmFyeSkgb3IgYSBkaXZpc29yIG9mIGEgcG93ZXIgb2YgMTAgKGZvciBkZWNpbWFsKS4gIFNvIHdlIGhhdmUsCi0gICBmb3Igbm9ubmVnYXRpdmUgeCwKLQotICAgICAgcmVkdWNlKHggKiAyKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMioqZSkgJSBfUHlIQVNIX01PRFVMVVMKLQotICAgICAgcmVkdWNlKHggKiAxMCoqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDEwKiplKSAlIF9QeUhBU0hfTU9EVUxVUwotCi0gICBhbmQgcmVkdWNlKDEwKiplKSBjYW4gYmUgY29tcHV0ZWQgZWZmaWNpZW50bHkgYnkgdGhlIHVzdWFsIG1vZHVsYXIKLSAgIGV4cG9uZW50aWF0aW9uIGFsZ29yaXRobS4gIEZvciByZWR1Y2UoMioqZSkgaXQncyBldmVuIGJldHRlcjogc2luY2UKLSAgIFAgaXMgb2YgdGhlIGZvcm0gMioqbi0xLCByZWR1Y2UoMioqZSkgaXMgMioqKGUgbW9kIG4pLCBhbmQgbXVsdGlwbGljYXRpb24KLSAgIGJ5IDIqKihlIG1vZCBuKSBtb2R1bG8gMioqbi0xIGp1c3QgYW1vdW50cyB0byBhIHJvdGF0aW9uIG9mIGJpdHMuCi0KLSAgICovCi0KLVB5X2hhc2hfdAotX1B5X0hhc2hEb3VibGUoZG91YmxlIHYpCi17Ci0gICAgaW50IGUsIHNpZ247Ci0gICAgZG91YmxlIG07Ci0gICAgUHlfdWhhc2hfdCB4LCB5OwotCi0gICAgaWYgKCFQeV9JU19GSU5JVEUodikpIHsKLSAgICAgICAgaWYgKFB5X0lTX0lORklOSVRZKHYpKQotICAgICAgICAgICAgcmV0dXJuIHYgPiAwID8gX1B5SEFTSF9JTkYgOiAtX1B5SEFTSF9JTkY7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBfUHlIQVNIX05BTjsKLSAgICB9Ci0KLSAgICBtID0gZnJleHAodiwgJmUpOwotCi0gICAgc2lnbiA9IDE7Ci0gICAgaWYgKG0gPCAwKSB7Ci0gICAgICAgIHNpZ24gPSAtMTsKLSAgICAgICAgbSA9IC1tOwotICAgIH0KLQotICAgIC8qIHByb2Nlc3MgMjggYml0cyBhdCBhIHRpbWU7ICB0aGlzIHNob3VsZCB3b3JrIHdlbGwgYm90aCBmb3IgYmluYXJ5Ci0gICAgICAgYW5kIGhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50LiAqLwotICAgIHggPSAwOwotICAgIHdoaWxlIChtKSB7Ci0gICAgICAgIHggPSAoKHggPDwgMjgpICYgX1B5SEFTSF9NT0RVTFVTKSB8IHggPj4gKF9QeUhBU0hfQklUUyAtIDI4KTsKLSAgICAgICAgbSAqPSAyNjg0MzU0NTYuMDsgIC8qIDIqKjI4ICovCi0gICAgICAgIGUgLT0gMjg7Ci0gICAgICAgIHkgPSAoUHlfdWhhc2hfdCltOyAgLyogcHVsbCBvdXQgaW50ZWdlciBwYXJ0ICovCi0gICAgICAgIG0gLT0geTsKLSAgICAgICAgeCArPSB5OwotICAgICAgICBpZiAoeCA+PSBfUHlIQVNIX01PRFVMVVMpCi0gICAgICAgICAgICB4IC09IF9QeUhBU0hfTU9EVUxVUzsKLSAgICB9Ci0KLSAgICAvKiBhZGp1c3QgZm9yIHRoZSBleHBvbmVudDsgIGZpcnN0IHJlZHVjZSBpdCBtb2R1bG8gX1B5SEFTSF9CSVRTICovCi0gICAgZSA9IGUgPj0gMCA/IGUgJSBfUHlIQVNIX0JJVFMgOiBfUHlIQVNIX0JJVFMtMS0oKC0xLWUpICUgX1B5SEFTSF9CSVRTKTsKLSAgICB4ID0gKCh4IDw8IGUpICYgX1B5SEFTSF9NT0RVTFVTKSB8IHggPj4gKF9QeUhBU0hfQklUUyAtIGUpOwotCi0gICAgeCA9IHggKiBzaWduOwotICAgIGlmICh4ID09IChQeV91aGFzaF90KS0xKQotICAgICAgICB4ID0gKFB5X3VoYXNoX3QpLTI7Ci0gICAgcmV0dXJuIChQeV9oYXNoX3QpeDsKLX0KLQotUHlfaGFzaF90Ci1fUHlfSGFzaFBvaW50ZXIodm9pZCAqcCkKLXsKLSAgICBQeV9oYXNoX3QgeDsKLSAgICBzaXplX3QgeSA9IChzaXplX3QpcDsKLSAgICAvKiBib3R0b20gMyBvciA0IGJpdHMgYXJlIGxpa2VseSB0byBiZSAwOyByb3RhdGUgeSBieSA0IHRvIGF2b2lkCi0gICAgICAgZXhjZXNzaXZlIGhhc2ggY29sbGlzaW9ucyBmb3IgZGljdHMgYW5kIHNldHMgKi8KLSAgICB5ID0gKHkgPj4gNCkgfCAoeSA8PCAoOCAqIFNJWkVPRl9WT0lEX1AgLSA0KSk7Ci0gICAgeCA9IChQeV9oYXNoX3QpeTsKLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOwotICAgIHJldHVybiB4OwotfQotCi1QeV9oYXNoX3QKLV9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciAqcCwgUHlfc3NpemVfdCBsZW4pCi17Ci0gICAgUHlfdWhhc2hfdCB4OwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qCi0gICAgICBXZSBtYWtlIHRoZSBoYXNoIG9mIHRoZSBlbXB0eSBzdHJpbmcgYmUgMCwgcmF0aGVyIHRoYW4gdXNpbmcKLSAgICAgIChwcmVmaXggXiBzdWZmaXgpLCBzaW5jZSB0aGlzIHNsaWdodGx5IG9iZnVzY2F0ZXMgdGhlIGhhc2ggc2VjcmV0Ci0gICAgKi8KLSNpZmRlZiBQeV9ERUJVRwotICAgIGFzc2VydChfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZCk7Ci0jZW5kaWYKLSAgICBpZiAobGVuID09IDApIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQucHJlZml4OwotICAgIHggXj0gKFB5X3VoYXNoX3QpICpwIDw8IDc7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gKFB5X3VoYXNoX3QpICpwKys7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgbGVuOwotICAgIHggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LnN1ZmZpeDsKLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOwotICAgIHJldHVybiB4OwotfQotCiBQeV9oYXNoX3QKIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZChQeU9iamVjdCAqdikKIHsKQEAgLTc4OCw4ICs3MzksNiBAQAogICAgIHJldHVybiAtMTsKIH0KIAotX1B5X0hhc2hTZWNyZXRfdCBfUHlfSGFzaFNlY3JldDsKLQogUHlfaGFzaF90CiBQeU9iamVjdF9IYXNoKFB5T2JqZWN0ICp2KQogewpAQCAtODU5LDcgKzgwOCw2IEBACiB7CiAgICAgaW50IHJlczsKICAgICBQeU9iamVjdCogaXNhYnN0cmFjdDsKLSAgICBfUHlfSURFTlRJRklFUihfX2lzYWJzdHJhY3RtZXRob2RfXyk7CiAKICAgICBpZiAob2JqID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTAzMiw4ICs5ODAsMTIgQEAKIFB5T2JqZWN0ICoKIF9QeU9iamVjdF9HZXRCdWlsdGluKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZCwgKmF0dHI7Ci0gICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJidWlsdGlucyIpOworICAgIFB5T2JqZWN0ICptb2RfbmFtZSwgKm1vZCwgKmF0dHI7CisKKyAgICBtb2RfbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2J1aWx0aW5zKTsgICAvKiBib3Jyb3dlZCAqLworICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnQobW9kX25hbWUpOwogICAgIGlmIChtb2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXR0ciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobW9kLCBuYW1lKTsKQEAgLTEzMTcsMTIgKzEyNjksMTEgQEAKIF9kaXJfbG9jYWxzKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm5hbWVzOwotICAgIFB5T2JqZWN0ICpsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgUHlPYmplY3QgKmxvY2FsczsKIAotICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJmcmFtZSBkb2VzIG5vdCBleGlzdCIpOworICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICBpZiAobG9jYWxzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAogICAgIG5hbWVzID0gUHlNYXBwaW5nX0tleXMobG9jYWxzKTsKICAgICBpZiAoIW5hbWVzKQpAQCAtMTM0Nyw3ICsxMjk4LDYgQEAKIF9kaXJfb2JqZWN0KFB5T2JqZWN0ICpvYmopCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKnNvcnRlZDsKLSAgICBfUHlfSURFTlRJRklFUihfX2Rpcl9fKTsKICAgICBQeU9iamVjdCAqZGlyZnVuYyA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG9iaiwgJlB5SWRfX19kaXJfXyk7CiAKICAgICBhc3NlcnQob2JqKTsKQEAgLTE1MTUsNiArMTQ2NSwxNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorTm90SW1wbGVtZW50ZWRfcmVkdWNlKFB5T2JqZWN0ICpvcCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIk5vdEltcGxlbWVudGVkIik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBub3RpbXBsZW1lbnRlZF9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKU5vdEltcGxlbWVudGVkX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5T2JqZWN0ICoKIG5vdGltcGxlbWVudGVkX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewogICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIHx8IChrd2FyZ3MgJiYgUHlEaWN0X1NpemUoa3dhcmdzKSkpIHsKQEAgLTE1MjQsMTIgKzE0ODUsMjEgQEAKICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CiB9CiAKK3N0YXRpYyB2b2lkCitub3RpbXBsZW1lbnRlZF9kZWFsbG9jKFB5T2JqZWN0KiBpZ25vcmUpCit7CisgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgZ2V0IGNhbGxlZCwgYnV0IHdlIGFsc28gZG9uJ3Qgd2FudCB0byBTRUdWIGlmCisgICAgICogd2UgYWNjaWRlbnRhbGx5IGRlY3JlZiBOb3RJbXBsZW1lbnRlZCBvdXQgb2YgZXhpc3RlbmNlLgorICAgICAqLworICAgIFB5X0ZhdGFsRXJyb3IoImRlYWxsb2NhdGluZyBOb3RJbXBsZW1lbnRlZCIpOworfQorCiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5Tm90SW1wbGVtZW50ZWRfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJOb3RJbXBsZW1lbnRlZFR5cGUiLAogICAgIDAsCiAgICAgMCwKLSAgICBub25lX2RlYWxsb2MsICAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KKyAgICBub3RpbXBsZW1lbnRlZF9kZWFsbG9jLCAgICAgICAvKnRwX2RlYWxsb2MqLyAvKm5ldmVyIGNhbGxlZCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwpAQCAtMTU1Miw3ICsxNTIyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzICovCisgICAgbm90aW1wbGVtZW50ZWRfbWV0aG9kcywgLyp0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UgKi8KQEAgLTE2OTksMTUgKzE2NjksNiBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TWVtYmVyRGVzY3JfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG1lbWJlciBkZXNjcmlwdG9yIHR5cGUiKTsKIAotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RmlsdGVyX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBmaWx0ZXIgdHlwZSIpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNYXBfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG1hcCB0eXBlIik7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVppcF9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgemlwIHR5cGUiKTsKLQogICAgIGlmIChQeVR5cGVfUmVhZHkoJl9QeU5hbWVzcGFjZV9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbmFtZXNwYWNlIHR5cGUiKTsKIApAQCAtMTc0OSwxMCArMTcxMCwxMCBAQAogfQogCiB2b2lkCi1fUHlfRm9yZ2V0UmVmZXJlbmNlKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK19QeV9Gb3JnZXRSZWZlcmVuY2UoUHlPYmplY3QgKm9wKQogewogI2lmZGVmIFNMT1dfVU5SRUZfQ0hFQ0sKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcDsKKyAgICBQeU9iamVjdCAqcDsKICNlbmRpZgogICAgIGlmIChvcC0+b2JfcmVmY250IDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiVU5SRUYgbmVnYXRpdmUgcmVmY250Iik7CkBAIC0xODU2LDI2ICsxODE3LDYgQEAKIFB5X3NzaXplX3QgKCpfUHlfYWJzdHJhY3RfaGFjaykoUHlPYmplY3QgKikgPSBQeU9iamVjdF9TaXplOwogCiAKLS8qIFB5dGhvbidzIG1hbGxvYyB3cmFwcGVycyAoc2VlIHB5bWVtLmgpICovCi0KLXZvaWQgKgotUHlNZW1fTWFsbG9jKHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIFB5TWVtX01BTExPQyhuYnl0ZXMpOwotfQotCi12b2lkICoKLVB5TWVtX1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gUHlNZW1fUkVBTExPQyhwLCBuYnl0ZXMpOwotfQotCi12b2lkCi1QeU1lbV9GcmVlKHZvaWQgKnApCi17Ci0gICAgUHlNZW1fRlJFRShwKTsKLX0KLQogdm9pZAogX1B5T2JqZWN0X0RlYnVnVHlwZVN0YXRzKEZJTEUgKm91dCkKIHsKQEAgLTE4ODUsNyArMTgyNiw2IEBACiAgICAgX1B5RnJhbWVfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeUxpc3RfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeU1ldGhvZF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7Ci0gICAgX1B5U2V0X0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKICAgICBfUHlUdXBsZV9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiB9CiAKQEAgLTE5MDEsOCArMTg0MSw2IEBACiAgICBTZWUgZGljdG9iamVjdC5jIGFuZCBsaXN0b2JqZWN0LmMgZm9yIGV4YW1wbGVzIG9mIHVzZS4KICovCiAKLSNkZWZpbmUgS0VZICJQeV9SZXByIgotCiBpbnQKIFB5X1JlcHJFbnRlcihQeU9iamVjdCAqb2JqKQogewpAQCAtMTkxMywxMiArMTg1MSwxMiBAQAogICAgIGRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBsaXN0ID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZGljdCwgS0VZKTsKKyAgICBsaXN0ID0gX1B5RGljdF9HZXRJdGVtSWQoZGljdCwgJlB5SWRfUHlfUmVwcik7CiAgICAgaWYgKGxpc3QgPT0gTlVMTCkgewogICAgICAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICAgICAgaWYgKGxpc3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSwgbGlzdCkgPCAwKQorICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQoZGljdCwgJlB5SWRfUHlfUmVwciwgbGlzdCkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBQeV9ERUNSRUYobGlzdCk7CiAgICAgfQpAQCAtMTkyNyw3ICsxODY1LDggQEAKICAgICAgICAgaWYgKFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKSA9PSBvYmopCiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgUHlMaXN0X0FwcGVuZChsaXN0LCBvYmopOworICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIG9iaikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE5MzcsMTMgKzE4NzYsMTggQEAKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU9iamVjdCAqbGlzdDsKICAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwogCiAgICAgZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOwogICAgIGlmIChkaWN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSAgICBsaXN0ID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZGljdCwgS0VZKTsKKyAgICAgICAgZ290byBmaW5hbGx5OworCisgICAgbGlzdCA9IF9QeURpY3RfR2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIpOwogICAgIGlmIChsaXN0ID09IE5VTEwgfHwgIVB5TGlzdF9DaGVjayhsaXN0KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBnb3RvIGZpbmFsbHk7CisKICAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwogICAgIC8qIENvdW50IGJhY2t3YXJkcyBiZWNhdXNlIHdlIGFsd2F5cyBleHBlY3Qgb2JqIHRvIGJlIGxpc3RbLTFdICovCiAgICAgd2hpbGUgKC0taSA+PSAwKSB7CkBAIC0xOTUyLDYgKzE4OTYsMTAgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorCitmaW5hbGx5OgorICAgIC8qIGlnbm9yZSBleGNlcHRpb25zIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJlcG9ydCB0aGVtLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CiB9CiAKIC8qIFRyYXNoY2FuIHN1cHBvcnQuICovCkBAIC0xOTcyLDcgKzE5MjAsNyBAQAogX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QoUHlPYmplY3QgKm9wKQogewogICAgIGFzc2VydChQeU9iamVjdF9JU19HQyhvcCkpOwotICAgIGFzc2VydChfUHlfQVNfR0Mob3ApLT5nYy5nY19yZWZzID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICBhc3NlcnQoX1B5R0NfUkVGUyhvcCkgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOwogICAgIGFzc2VydChvcC0+b2JfcmVmY250ID09IDApOwogICAgIF9QeV9BU19HQyhvcCktPmdjLmdjX3ByZXYgPSAoUHlHQ19IZWFkICopX1B5VHJhc2hfZGVsZXRlX2xhdGVyOwogICAgIF9QeVRyYXNoX2RlbGV0ZV9sYXRlciA9IG9wOwpAQCAtMTk4NCw3ICsxOTMyLDcgQEAKIHsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIGFzc2VydChQeU9iamVjdF9JU19HQyhvcCkpOwotICAgIGFzc2VydChfUHlfQVNfR0Mob3ApLT5nYy5nY19yZWZzID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICBhc3NlcnQoX1B5R0NfUkVGUyhvcCkgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOwogICAgIGFzc2VydChvcC0+b2JfcmVmY250ID09IDApOwogICAgIF9QeV9BU19HQyhvcCktPmdjLmdjX3ByZXYgPSAoUHlHQ19IZWFkICopIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX2xhdGVyOwogICAgIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX2xhdGVyID0gb3A7CmRpZmYgLS1naXQgYS9PYmplY3RzL29ibWFsbG9jLmMgYi9PYmplY3RzL29ibWFsbG9jLmMKaW5kZXggYzI2MWI2OC4uMDA0Y2ZhYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYm1hbGxvYy5jCisrKyBiL09iamVjdHMvb2JtYWxsb2MuYwpAQCAtMSwxNCArMSwzNzQgQEAKICNpbmNsdWRlICJQeXRob24uaCIKIAotI2lmZGVmIFdJVEhfUFlNQUxMT0MKKy8qIFB5dGhvbidzIG1hbGxvYyB3cmFwcGVycyAoc2VlIHB5bWVtLmgpICovCiAKLSNpZmRlZiBIQVZFX01NQVAKLSAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSAjaWZkZWYgTUFQX0FOT05ZTU9VUwotICAjZGVmaW5lIEFSRU5BU19VU0VfTU1BUAorI2lmZGVmIFBZTUFMTE9DX0RFQlVHICAgLyogV0lUSF9QWU1BTExPQyAmJiBQWU1BTExPQ19ERUJVRyAqLworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQqIF9QeU1lbV9EZWJ1Z01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIF9QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkKiBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKK3N0YXRpYyB2b2lkIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzKGNvbnN0IHZvaWQgKnApOworc3RhdGljIHZvaWQgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGNoYXIgYXBpX2lkLCBjb25zdCB2b2lkICpwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKSAgLyogQ2xhbmcgKi8KKyAjaWYgX19oYXNfZmVhdHVyZShhZGRyZXNzX3Nhbml0aXplcikgIC8qIGlzIEFTQU4gZW5hYmxlZD8gKi8KKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fKChub19hZGRyZXNzX3NhZmV0eV9hbmFseXNpcykpIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyAjZWxzZQorICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUworICNlbmRpZgorI2Vsc2UKKyAjaWYgZGVmaW5lZChfX1NBTklUSVpFX0FERFJFU1NfXykgIC8qIEdDQyA0LjgueCwgaXMgQVNBTiBlbmFibGVkPyAqLworICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUyBcCisgICAgICAgIF9fYXR0cmlidXRlX18oKG5vX2FkZHJlc3Nfc2FmZXR5X2FuYWx5c2lzKSkgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICNlbHNlCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCiAgI2VuZGlmCiAjZW5kaWYKIAorI2lmZGVmIFdJVEhfUFlNQUxMT0MKKworI2lmZGVmIE1TX1dJTkRPV1MKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9NTUFQKQorIyAgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgIGlmZGVmIE1BUF9BTk9OWU1PVVMKKyMgICAgZGVmaW5lIEFSRU5BU19VU0VfTU1BUAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCogX1B5T2JqZWN0X01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIF9QeU9iamVjdF9GcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCogX1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKyNlbmRpZgorCisKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9SYXdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBQeU1lbV9NYWxsb2MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKKyAgICAgICBmb3IgbWFsbG9jKDApLCB3aGljaCB3b3VsZCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiBTb21lIHBsYXRmb3JtcyB3b3VsZAorICAgICAgIHJldHVybiBhIHBvaW50ZXIgd2l0aCBubyBtZW1vcnkgYmVoaW5kIGl0LCB3aGljaCB3b3VsZCBicmVhayBweW1hbGxvYy4KKyAgICAgICBUbyBzb2x2ZSB0aGVzZSBwcm9ibGVtcywgYWxsb2NhdGUgYW4gZXh0cmEgYnl0ZS4gKi8KKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBzaXplID0gMTsKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK19QeU1lbV9SYXdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcHRyKQoreworICAgIGZyZWUocHRyKTsKK30KKworCisjaWZkZWYgTVNfV0lORE9XUworc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X0FyZW5hVmlydHVhbEFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIFZpcnR1YWxBbGxvYyhOVUxMLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdFX1JFQURXUklURSk7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlPYmplY3RfQXJlbmFWaXJ0dWFsRnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgVmlydHVhbEZyZWUocHRyLCAwLCBNRU1fUkVMRUFTRSk7Cit9CisKKyNlbGlmIGRlZmluZWQoQVJFTkFTX1VTRV9NTUFQKQorc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X0FyZW5hTW1hcCh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHZvaWQgKnB0cjsKKyAgICBwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApOworICAgIGlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYXNzZXJ0KHB0ciAhPSBOVUxMKTsKKyAgICByZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hTXVubWFwKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBtdW5tYXAocHRyLCBzaXplKTsKK30KKworI2Vsc2UKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYU1hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlPYmplY3RfQXJlbmFGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBmcmVlKHB0cik7Cit9CisjZW5kaWYKKworCisjZGVmaW5lIFBZUkFXX0ZVTkNTIF9QeU1lbV9SYXdNYWxsb2MsIF9QeU1lbV9SYXdSZWFsbG9jLCBfUHlNZW1fUmF3RnJlZQorI2lmZGVmIFdJVEhfUFlNQUxMT0MKKyMgIGRlZmluZSBQWU9CSl9GVU5DUyBfUHlPYmplY3RfTWFsbG9jLCBfUHlPYmplY3RfUmVhbGxvYywgX1B5T2JqZWN0X0ZyZWUKKyNlbHNlCisjICBkZWZpbmUgUFlPQkpfRlVOQ1MgUFlSQVdfRlVOQ1MKKyNlbmRpZgorI2RlZmluZSBQWU1FTV9GVU5DUyBQWVJBV19GVU5DUworCisjaWZkZWYgUFlNQUxMT0NfREVCVUcKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBXZSB0YWcgZWFjaCBibG9jayB3aXRoIGFuIEFQSSBJRCBpbiBvcmRlciB0byB0YWcgQVBJIHZpb2xhdGlvbnMgKi8KKyAgICBjaGFyIGFwaV9pZDsKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKK30gZGVidWdfYWxsb2NfYXBpX3Q7CitzdGF0aWMgc3RydWN0IHsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCByYXc7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgbWVtOworICAgIGRlYnVnX2FsbG9jX2FwaV90IG9iajsKK30gX1B5TWVtX0RlYnVnID0geworICAgIHsncicsIHtOVUxMLCBQWVJBV19GVU5DU319LAorICAgIHsnbScsIHtOVUxMLCBQWU1FTV9GVU5DU319LAorICAgIHsnbycsIHtOVUxMLCBQWU9CSl9GVU5DU319CisgICAgfTsKKworI2RlZmluZSBQWURCR19GVU5DUyBfUHlNZW1fRGVidWdNYWxsb2MsIF9QeU1lbV9EZWJ1Z1JlYWxsb2MsIF9QeU1lbV9EZWJ1Z0ZyZWUKKyNlbmRpZgorCitzdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5TWVtX1JhdyA9IHsKKyNpZmRlZiBQWU1BTExPQ19ERUJVRworICAgICZfUHlNZW1fRGVidWcucmF3LCBQWURCR19GVU5DUworI2Vsc2UKKyAgICBOVUxMLCBQWVJBV19GVU5DUworI2VuZGlmCisgICAgfTsKKworc3RhdGljIFB5TWVtQWxsb2NhdG9yIF9QeU1lbSA9IHsKKyNpZmRlZiBQWU1BTExPQ19ERUJVRworICAgICZfUHlNZW1fRGVidWcubWVtLCBQWURCR19GVU5DUworI2Vsc2UKKyAgICBOVUxMLCBQWU1FTV9GVU5DUworI2VuZGlmCisgICAgfTsKKworc3RhdGljIFB5TWVtQWxsb2NhdG9yIF9QeU9iamVjdCA9IHsKKyNpZmRlZiBQWU1BTExPQ19ERUJVRworICAgICZfUHlNZW1fRGVidWcub2JqLCBQWURCR19GVU5DUworI2Vsc2UKKyAgICBOVUxMLCBQWU9CSl9GVU5DUworI2VuZGlmCisgICAgfTsKKworI3VuZGVmIFBZUkFXX0ZVTkNTCisjdW5kZWYgUFlNRU1fRlVOQ1MKKyN1bmRlZiBQWU9CSl9GVU5DUworI3VuZGVmIFBZREJHX0ZVTkNTCisKK3N0YXRpYyBQeU9iamVjdEFyZW5hQWxsb2NhdG9yIF9QeU9iamVjdF9BcmVuYSA9IHtOVUxMLAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBfUHlPYmplY3RfQXJlbmFWaXJ0dWFsQWxsb2MsIF9QeU9iamVjdF9BcmVuYVZpcnR1YWxGcmVlCisjZWxpZiBkZWZpbmVkKEFSRU5BU19VU0VfTU1BUCkKKyAgICBfUHlPYmplY3RfQXJlbmFNbWFwLCBfUHlPYmplY3RfQXJlbmFNdW5tYXAKKyNlbHNlCisgICAgX1B5T2JqZWN0X0FyZW5hTWFsbG9jLCBfUHlPYmplY3RfQXJlbmFGcmVlCisjZW5kaWYKKyAgICB9OworCit2b2lkCitQeU1lbV9TZXR1cERlYnVnSG9va3Modm9pZCkKK3sKKyNpZmRlZiBQWU1BTExPQ19ERUJVRworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworCisgICAgYWxsb2MubWFsbG9jID0gX1B5TWVtX0RlYnVnTWFsbG9jOworICAgIGFsbG9jLnJlYWxsb2MgPSBfUHlNZW1fRGVidWdSZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSBfUHlNZW1fRGVidWdGcmVlOworCisgICAgaWYgKF9QeU1lbV9SYXcubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLnJhdzsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9SQVcsICZfUHlNZW1fRGVidWcucmF3LmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9SQVcsICZhbGxvYyk7CisgICAgfQorCisgICAgaWYgKF9QeU1lbS5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcubWVtOworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJl9QeU1lbV9EZWJ1Zy5tZW0uYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jKTsKKyAgICB9CisKKyAgICBpZiAoX1B5T2JqZWN0Lm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5vYmo7CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmX1B5TWVtX0RlYnVnLm9iai5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2MpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkCitQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogKmFsbG9jYXRvciA9IF9QeU1lbV9SYXc7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogKmFsbG9jYXRvciA9IF9QeU1lbTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiAqYWxsb2NhdG9yID0gX1B5T2JqZWN0OyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiB1bmtub3duIGRvbWFpbiAqLworICAgICAgICBhbGxvY2F0b3ItPmN0eCA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+bWFsbG9jID0gTlVMTDsKKyAgICAgICAgYWxsb2NhdG9yLT5yZWFsbG9jID0gTlVMTDsKKyAgICAgICAgYWxsb2NhdG9yLT5mcmVlID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQKK1B5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiBfUHlNZW1fUmF3ID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiBfUHlNZW0gPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6IF9QeU9iamVjdCA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIC8qIGlnbm9yZSB1bmtub3duIGRvbWFpbiAqLworICAgIH0KKworfQorCit2b2lkCitQeU9iamVjdF9HZXRBcmVuYUFsbG9jYXRvcihQeU9iamVjdEFyZW5hQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgKmFsbG9jYXRvciA9IF9QeU9iamVjdF9BcmVuYTsKK30KKwordm9pZAorUHlPYmplY3RfU2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgIF9QeU9iamVjdF9BcmVuYSA9ICphbGxvY2F0b3I7Cit9CisKK3ZvaWQgKgorUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIC8qCisgICAgICogTGltaXQgb3Vyc2VsdmVzIHRvIFBZX1NTSVpFX1RfTUFYIGJ5dGVzIHRvIHByZXZlbnQgc2VjdXJpdHkgaG9sZXMuCisgICAgICogTW9zdCBweXRob24gaW50ZXJuYWxzIGJsaW5kbHkgdXNlIGEgc2lnbmVkIFB5X3NzaXplX3QgdG8gdHJhY2sKKyAgICAgKiB0aGluZ3Mgd2l0aG91dCBjaGVja2luZyBmb3Igb3ZlcmZsb3dzIG9yIG5lZ2F0aXZlcy4KKyAgICAgKiBBcyBzaXplX3QgaXMgdW5zaWduZWQsIGNoZWNraW5nIGZvciBzaXplIDwgMCBpcyBub3QgcmVxdWlyZWQuCisgICAgICovCisgICAgaWYgKHNpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfUHlNZW1fUmF3Lm1hbGxvYyhfUHlNZW1fUmF3LmN0eCwgc2l6ZSk7Cit9CisKK3ZvaWQqCitQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChuZXdfc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlNZW1fUmF3LnJlYWxsb2MoX1B5TWVtX1Jhdy5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkIFB5TWVtX1Jhd0ZyZWUodm9pZCAqcHRyKQoreworICAgIF9QeU1lbV9SYXcuZnJlZShfUHlNZW1fUmF3LmN0eCwgcHRyKTsKK30KKwordm9pZCAqCitQeU1lbV9NYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKHNpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtLm1hbGxvYyhfUHlNZW0uY3R4LCBzaXplKTsKK30KKwordm9pZCAqCitQeU1lbV9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChuZXdfc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlNZW0ucmVhbGxvYyhfUHlNZW0uY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZAorUHlNZW1fRnJlZSh2b2lkICpwdHIpCit7CisgICAgX1B5TWVtLmZyZWUoX1B5TWVtLmN0eCwgcHRyKTsKK30KKworY2hhciAqCitfUHlNZW1fUmF3U3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpjb3B5OworCisgICAgc2l6ZSA9IHN0cmxlbihzdHIpICsgMTsKKyAgICBjb3B5ID0gUHlNZW1fUmF3TWFsbG9jKHNpemUpOworICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbWNweShjb3B5LCBzdHIsIHNpemUpOworICAgIHJldHVybiBjb3B5OworfQorCitjaGFyICoKK19QeU1lbV9TdHJkdXAoY29uc3QgY2hhciAqc3RyKQoreworICAgIHNpemVfdCBzaXplOworICAgIGNoYXIgKmNvcHk7CisKKyAgICBzaXplID0gc3RybGVuKHN0cikgKyAxOworICAgIGNvcHkgPSBQeU1lbV9NYWxsb2Moc2l6ZSk7CisgICAgaWYgKGNvcHkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbWVtY3B5KGNvcHksIHN0ciwgc2l6ZSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK3ZvaWQgKgorUHlPYmplY3RfTWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU9iamVjdC5tYWxsb2MoX1B5T2JqZWN0LmN0eCwgc2l6ZSk7Cit9CisKK3ZvaWQgKgorUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5T2JqZWN0LnJlYWxsb2MoX1B5T2JqZWN0LmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQKK1B5T2JqZWN0X0ZyZWUodm9pZCAqcHRyKQoreworICAgIF9QeU9iamVjdC5mcmVlKF9QeU9iamVjdC5jdHgsIHB0cik7Cit9CisKKworI2lmZGVmIFdJVEhfUFlNQUxMT0MKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICNpbmNsdWRlIDx2YWxncmluZC92YWxncmluZC5oPgogCkBAIC01MjUsNiArODg1LDE1IEBACiAvKiBIaWdoIHdhdGVyIG1hcmsgKG1heCB2YWx1ZSBldmVyIHNlZW4pIGZvciBuYXJlbmFzX2N1cnJlbnRseV9hbGxvY2F0ZWQuICovCiBzdGF0aWMgc2l6ZV90IG5hcmVuYXNfaGlnaHdhdGVyID0gMDsKIAorc3RhdGljIFB5X3NzaXplX3QgX1B5X0FsbG9jYXRlZEJsb2NrcyA9IDA7CisKK1B5X3NzaXplX3QKK19QeV9HZXRBbGxvY2F0ZWRCbG9ja3Modm9pZCkKK3sKKyAgICByZXR1cm4gX1B5X0FsbG9jYXRlZEJsb2NrczsKK30KKworCiAvKiBBbGxvY2F0ZSBhIG5ldyBhcmVuYS4gIElmIHdlIHJ1biBvdXQgb2YgbWVtb3J5LCByZXR1cm4gTlVMTC4gIEVsc2UKICAqIGFsbG9jYXRlIGEgbmV3IGFyZW5hLCBhbmQgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIGFuIGFyZW5hX29iamVjdAogICogZGVzY3JpYmluZyB0aGUgbmV3IGFyZW5hLiAgSXQncyBleHBlY3RlZCB0aGF0IHRoZSBjYWxsZXIgd2lsbCBzZXQKQEAgLTUzNiw3ICs5MDUsNiBAQAogICAgIHN0cnVjdCBhcmVuYV9vYmplY3QqIGFyZW5hb2JqOwogICAgIHVpbnQgZXhjZXNzOyAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIGFib3ZlIHBvb2wgYWxpZ25tZW50ICovCiAgICAgdm9pZCAqYWRkcmVzczsKLSAgICBpbnQgZXJyOwogCiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKICAgICBpZiAoUHlfR0VURU5WKCJQWVRIT05NQUxMT0NTVEFUUyIpKQpAQCAtNTU4LDcgKzkyNiw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogb3ZlcmZsb3cgKi8KICNlbmRpZgogICAgICAgICBuYnl0ZXMgPSBudW1hcmVuYXMgKiBzaXplb2YoKmFyZW5hcyk7Ci0gICAgICAgIGFyZW5hb2JqID0gKHN0cnVjdCBhcmVuYV9vYmplY3QgKilyZWFsbG9jKGFyZW5hcywgbmJ5dGVzKTsKKyAgICAgICAgYXJlbmFvYmogPSAoc3RydWN0IGFyZW5hX29iamVjdCAqKVB5TWVtX1Jhd1JlYWxsb2MoYXJlbmFzLCBuYnl0ZXMpOwogICAgICAgICBpZiAoYXJlbmFvYmogPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBhcmVuYXMgPSBhcmVuYW9iajsKQEAgLTU4OSwxNSArOTU3LDggQEAKICAgICBhcmVuYW9iaiA9IHVudXNlZF9hcmVuYV9vYmplY3RzOwogICAgIHVudXNlZF9hcmVuYV9vYmplY3RzID0gYXJlbmFvYmotPm5leHRhcmVuYTsKICAgICBhc3NlcnQoYXJlbmFvYmotPmFkZHJlc3MgPT0gMCk7Ci0jaWZkZWYgQVJFTkFTX1VTRV9NTUFQCi0gICAgYWRkcmVzcyA9IG1tYXAoTlVMTCwgQVJFTkFfU0laRSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKLSAgICBlcnIgPSAoYWRkcmVzcyA9PSBNQVBfRkFJTEVEKTsKLSNlbHNlCi0gICAgYWRkcmVzcyA9IG1hbGxvYyhBUkVOQV9TSVpFKTsKLSAgICBlcnIgPSAoYWRkcmVzcyA9PSAwKTsKLSNlbmRpZgotICAgIGlmIChlcnIpIHsKKyAgICBhZGRyZXNzID0gX1B5T2JqZWN0X0FyZW5hLmFsbG9jKF9QeU9iamVjdF9BcmVuYS5jdHgsIEFSRU5BX1NJWkUpOworICAgIGlmIChhZGRyZXNzID09IE5VTEwpIHsKICAgICAgICAgLyogVGhlIGFsbG9jYXRpb24gZmFpbGVkOiByZXR1cm4gTlVMTCBhZnRlciBwdXR0aW5nIHRoZQogICAgICAgICAgKiBhcmVuYW9iaiBiYWNrLgogICAgICAgICAgKi8KQEAgLTc2MCwxNSArMTEyMSwxNiBAQAogICogVW5sZXNzIHRoZSBvcHRpbWl6ZXIgcmVvcmRlcnMgZXZlcnl0aGluZywgYmVpbmcgdG9vIHNtYXJ0Li4uCiAgKi8KIAotI3VuZGVmIFB5T2JqZWN0X01hbGxvYwotdm9pZCAqCi1QeU9iamVjdF9NYWxsb2Moc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9NYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmJ5dGVzKQogewogICAgIGJsb2NrICpicDsKICAgICBwb29scCBwb29sOwogICAgIHBvb2xwIG5leHQ7CiAgICAgdWludCBzaXplOwogCisgICAgX1B5X0FsbG9jYXRlZEJsb2NrcysrOworCiAjaWZkZWYgV0lUSF9WQUxHUklORAogICAgIGlmIChVTkxJS0VMWShydW5uaW5nX29uX3ZhbGdyaW5kID09IC0xKSkKICAgICAgICAgcnVubmluZ19vbl92YWxncmluZCA9IFJVTk5JTkdfT05fVkFMR1JJTkQ7CkBAIC03NzcsMTUgKzExMzksNiBAQAogI2VuZGlmCiAKICAgICAvKgotICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgotICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCi0gICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCi0gICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3IgbmJ5dGVzIDwgMCBpcyBub3QgcmVxdWlyZWQuCi0gICAgICovCi0gICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qCiAgICAgICogVGhpcyBpbXBsaWNpdGx5IHJlZGlyZWN0cyBtYWxsb2MoMCkuCiAgICAgICovCiAgICAgaWYgKChuYnl0ZXMgLSAxKSA8IFNNQUxMX1JFUVVFU1RfVEhSRVNIT0xEKSB7CkBAIC05MDEsNiArMTI1NCw3IEBACiAgICAgICAgICAgICAgICAgICogYW5kIGZyZWUgbGlzdCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBicCA9IHBvb2wtPmZyZWVibG9jazsKKyAgICAgICAgICAgICAgICBhc3NlcnQoYnAgIT0gTlVMTCk7CiAgICAgICAgICAgICAgICAgcG9vbC0+ZnJlZWJsb2NrID0gKihibG9jayAqKilicDsKICAgICAgICAgICAgICAgICBVTkxPQ0soKTsKICAgICAgICAgICAgICAgICByZXR1cm4gKHZvaWQgKilicDsKQEAgLTk1NiwxNiArMTMxMCwxOSBAQAogICAgICAqIGxhc3QgY2hhbmNlIHRvIHNlcnZlIHRoZSByZXF1ZXN0KSBvciB3aGVuIHRoZSBtYXggbWVtb3J5IGxpbWl0CiAgICAgICogaGFzIGJlZW4gcmVhY2hlZC4KICAgICAgKi8KLSAgICBpZiAobmJ5dGVzID09IDApCi0gICAgICAgIG5ieXRlcyA9IDE7Ci0gICAgcmV0dXJuICh2b2lkICopbWFsbG9jKG5ieXRlcyk7CisgICAgeworICAgICAgICB2b2lkICpyZXN1bHQgPSBQeU1lbV9SYXdNYWxsb2MobmJ5dGVzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBfUHlfQWxsb2NhdGVkQmxvY2tzLS07CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogfQogCiAvKiBmcmVlICovCiAKLSN1bmRlZiBQeU9iamVjdF9GcmVlCi12b2lkCi1QeU9iamVjdF9GcmVlKHZvaWQgKnApCitBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKK3N0YXRpYyB2b2lkCitfUHlPYmplY3RfRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApCiB7CiAgICAgcG9vbHAgcG9vbDsKICAgICBibG9jayAqbGFzdGZyZWU7CkBAIC05NzgsNiArMTMzNSw4IEBACiAgICAgaWYgKHAgPT0gTlVMTCkgICAgICAvKiBmcmVlKE5VTEwpIGhhcyBubyBlZmZlY3QgKi8KICAgICAgICAgcmV0dXJuOwogCisgICAgX1B5X0FsbG9jYXRlZEJsb2Nrcy0tOworCiAjaWZkZWYgV0lUSF9WQUxHUklORAogICAgIGlmIChVTkxJS0VMWShydW5uaW5nX29uX3ZhbGdyaW5kID4gMCkpCiAgICAgICAgIGdvdG8gcmVkaXJlY3Q7CkBAIC0xMDcyLDExICsxNDMxLDggQEAKICAgICAgICAgICAgICAgICB1bnVzZWRfYXJlbmFfb2JqZWN0cyA9IGFvOwogCiAgICAgICAgICAgICAgICAgLyogRnJlZSB0aGUgZW50aXJlIGFyZW5hLiAqLwotI2lmZGVmIEFSRU5BU19VU0VfTU1BUAotICAgICAgICAgICAgICAgIG11bm1hcCgodm9pZCAqKWFvLT5hZGRyZXNzLCBBUkVOQV9TSVpFKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgZnJlZSgodm9pZCAqKWFvLT5hZGRyZXNzKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgIF9QeU9iamVjdF9BcmVuYS5mcmVlKF9QeU9iamVjdF9BcmVuYS5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhby0+YWRkcmVzcywgQVJFTkFfU0laRSk7CiAgICAgICAgICAgICAgICAgYW8tPmFkZHJlc3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1hcmsgdW5hc3NvY2lhdGVkICovCiAgICAgICAgICAgICAgICAgLS1uYXJlbmFzX2N1cnJlbnRseV9hbGxvY2F0ZWQ7CiAKQEAgLTExODUsNyArMTU0MSw3IEBACiByZWRpcmVjdDoKICNlbmRpZgogICAgIC8qIFdlIGRpZG4ndCBhbGxvY2F0ZSB0aGlzIGFkZHJlc3MuICovCi0gICAgZnJlZShwKTsKKyAgICBQeU1lbV9SYXdGcmVlKHApOwogfQogCiAvKiByZWFsbG9jLiAgSWYgcCBpcyBOVUxMLCB0aGlzIGFjdHMgbGlrZSBtYWxsb2MobmJ5dGVzKS4gIEVsc2UgaWYgbmJ5dGVzPT0wLApAQCAtMTE5Myw5ICsxNTQ5LDkgQEAKICAqIHJldHVybiBhIG5vbi1OVUxMIHJlc3VsdC4KICAqLwogCi0jdW5kZWYgUHlPYmplY3RfUmVhbGxvYwotdm9pZCAqCi1QeU9iamVjdF9SZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCitBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9SZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKIHsKICAgICB2b2lkICpicDsKICAgICBwb29scCBwb29sOwpAQCAtMTIwNSwxNiArMTU2MSw3IEBACiAjZW5kaWYKIAogICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9NYWxsb2MobmJ5dGVzKTsKLQotICAgIC8qCi0gICAgICogTGltaXQgb3Vyc2VsdmVzIHRvIFBZX1NTSVpFX1RfTUFYIGJ5dGVzIHRvIHByZXZlbnQgc2VjdXJpdHkgaG9sZXMuCi0gICAgICogTW9zdCBweXRob24gaW50ZXJuYWxzIGJsaW5kbHkgdXNlIGEgc2lnbmVkIFB5X3NzaXplX3QgdG8gdHJhY2sKLSAgICAgKiB0aGluZ3Mgd2l0aG91dCBjaGVja2luZyBmb3Igb3ZlcmZsb3dzIG9yIG5lZ2F0aXZlcy4KLSAgICAgKiBBcyBzaXplX3QgaXMgdW5zaWduZWQsIGNoZWNraW5nIGZvciBuYnl0ZXMgPCAwIGlzIG5vdCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBpZiAobmJ5dGVzID4gUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gX1B5T2JqZWN0X01hbGxvYyhjdHgsIG5ieXRlcyk7CiAKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgLyogVHJlYXQgcnVubmluZ19vbl92YWxncmluZCA9PSAtMSB0aGUgc2FtZSBhcyAwICovCkBAIC0xMjQyLDEwICsxNTg5LDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzaXplID0gbmJ5dGVzOwogICAgICAgICB9Ci0gICAgICAgIGJwID0gUHlPYmplY3RfTWFsbG9jKG5ieXRlcyk7CisgICAgICAgIGJwID0gX1B5T2JqZWN0X01hbGxvYyhjdHgsIG5ieXRlcyk7CiAgICAgICAgIGlmIChicCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBtZW1jcHkoYnAsIHAsIHNpemUpOwotICAgICAgICAgICAgUHlPYmplY3RfRnJlZShwKTsKKyAgICAgICAgICAgIF9QeU9iamVjdF9GcmVlKGN0eCwgcCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJwOwogICAgIH0KQEAgLTEyNjMsMTQgKzE2MTAsMTQgQEAKICAgICAgKiBhdCBwLiAgSW5zdGVhZCB3ZSBwdW50OiAgbGV0IEMgY29udGludWUgdG8gbWFuYWdlIHRoaXMgYmxvY2suCiAgICAgICovCiAgICAgaWYgKG5ieXRlcykKLSAgICAgICAgcmV0dXJuIHJlYWxsb2MocCwgbmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIFB5TWVtX1Jhd1JlYWxsb2MocCwgbmJ5dGVzKTsKICAgICAvKiBDIGRvZXNuJ3QgZGVmaW5lIHRoZSByZXN1bHQgb2YgcmVhbGxvYyhwLCAwKSAoaXQgbWF5IG9yIG1heSBub3QKICAgICAgKiByZXR1cm4gTlVMTCB0aGVuKSwgYnV0IFB5dGhvbidzIGRvY3MgcHJvbWlzZSB0aGF0IG5ieXRlcz09MCBuZXZlcgogICAgICAqIHJldHVybnMgTlVMTC4gIFdlIGRvbid0IHBhc3MgMCB0byByZWFsbG9jKCksIHRvIGF2b2lkIHRoYXQgZW5kY2FzZQogICAgICAqIHRvIGJlZ2luIHdpdGguICBFdmVuIHRoZW4sIHdlIGNhbid0IGJlIHN1cmUgdGhhdCByZWFsbG9jKCkgd29uJ3QKICAgICAgKiByZXR1cm4gTlVMTC4KICAgICAgKi8KLSAgICBicCA9IHJlYWxsb2MocCwgMSk7CisgICAgYnAgPSBQeU1lbV9SYXdSZWFsbG9jKHAsIDEpOwogICAgIHJldHVybiBicCA/IGJwIDogcDsKIH0KIApAQCAtMTI4MCwyMyArMTYyNywxMiBAQAogLyogcHltYWxsb2Mgbm90IGVuYWJsZWQ6ICBSZWRpcmVjdCB0aGUgZW50cnkgcG9pbnRzIHRvIG1hbGxvYy4gIFRoZXNlIHdpbGwKICAqIG9ubHkgYmUgdXNlZCBieSBleHRlbnNpb25zIHRoYXQgYXJlIGNvbXBpbGVkIHdpdGggcHltYWxsb2MgZW5hYmxlZC4gKi8KIAotdm9pZCAqCi1QeU9iamVjdF9NYWxsb2Moc2l6ZV90IG4pCitQeV9zc2l6ZV90CitfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpCiB7Ci0gICAgcmV0dXJuIFB5TWVtX01BTExPQyhuKTsKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCAqCi1QeU9iamVjdF9SZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQotewotICAgIHJldHVybiBQeU1lbV9SRUFMTE9DKHAsIG4pOwotfQotCi12b2lkCi1QeU9iamVjdF9GcmVlKHZvaWQgKnApCi17Ci0gICAgUHlNZW1fRlJFRShwKTsKLX0KICNlbmRpZiAvKiBXSVRIX1BZTUFMTE9DICovCiAKICNpZmRlZiBQWU1BTExPQ19ERUJVRwpAQCAtMTMxNiwxMCArMTY1Miw2IEBACiAjZGVmaW5lIERFQURCWVRFICAgICAgIDB4REIgICAgLyogZGVhZCAobmV3bHkgZnJlZWQpIG1lbW9yeSAqLwogI2RlZmluZSBGT1JCSURERU5CWVRFICAweEZCICAgIC8qIHVudG91Y2hhYmxlIGJ5dGVzIGF0IGVhY2ggZW5kIG9mIGEgYmxvY2sgKi8KIAotLyogV2UgdGFnIGVhY2ggYmxvY2sgd2l0aCBhbiBBUEkgSUQgaW4gb3JkZXIgdG8gdGFnIEFQSSB2aW9sYXRpb25zICovCi0jZGVmaW5lIF9QWU1BTExPQ19NRU1fSUQgJ20nICAgLyogdGhlIFB5TWVtX01hbGxvYygpIEFQSSAqLwotI2RlZmluZSBfUFlNQUxMT0NfT0JKX0lEICdvJyAgIC8qIFRoZSBQeU9iamVjdF9NYWxsb2MoKSBBUEkgKi8KLQogc3RhdGljIHNpemVfdCBzZXJpYWxubyA9IDA7ICAgICAvKiBpbmNyZW1lbnRlZCBvbiBlYWNoIGRlYnVnIHttLHJlfWFsbG9jICovCiAKIC8qIHNlcmlhbG5vIGlzIGFsd2F5cyBpbmNyZW1lbnRlZCB2aWEgY2FsbGluZyB0aGlzIHJvdXRpbmUuICBUaGUgcG9pbnQgaXMKQEAgLTEzOTIsNyArMTcyNCw5IEBACiBwWzA6IFNdCiAgICAgTnVtYmVyIG9mIGJ5dGVzIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBhIHNpemVfdCwgYmlnLWVuZGlhbiAoZWFzaWVyCiAgICAgdG8gcmVhZCBpbiBhIG1lbW9yeSBkdW1wKS4KLXBbUzogMipTXQorcFtTXQorICAgIEFQSSBJRC4gIFNlZSBQRVAgNDQ1LiAgVGhpcyBpcyBhIGNoYXJhY3RlciwgYnV0IHNlZW1zIHVuZG9jdW1lbnRlZC4KK3BbUysxOiAyKlNdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIHVuZGVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFsyKlM6IDIqUytuXQogICAgIFRoZSByZXF1ZXN0ZWQgbWVtb3J5LCBmaWxsZWQgd2l0aCBjb3BpZXMgb2YgQ0xFQU5CWVRFLgpAQCAtMTQwMiw1OCArMTczNiwxOCBAQAogcFsyKlMrbjogMipTK24rU10KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggb3Zlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbMipTK24rUzogMipTK24rMipTXQotICAgIEEgc2VyaWFsIG51bWJlciwgaW5jcmVtZW50ZWQgYnkgMSBvbiBlYWNoIGNhbGwgdG8gX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0gICAgYW5kIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MuCisgICAgQSBzZXJpYWwgbnVtYmVyLCBpbmNyZW1lbnRlZCBieSAxIG9uIGVhY2ggY2FsbCB0byBfUHlNZW1fRGVidWdNYWxsb2MKKyAgICBhbmQgX1B5TWVtX0RlYnVnUmVhbGxvYy4KICAgICBUaGlzIGlzIGEgYmlnLWVuZGlhbiBzaXplX3QuCiAgICAgSWYgImJhZCBtZW1vcnkiIGlzIGRldGVjdGVkIGxhdGVyLCB0aGUgc2VyaWFsIG51bWJlciBnaXZlcyBhbgogICAgIGV4Y2VsbGVudCB3YXkgdG8gc2V0IGEgYnJlYWtwb2ludCBvbiB0aGUgbmV4dCBydW4sIHRvIGNhcHR1cmUgdGhlCiAgICAgaW5zdGFudCBhdCB3aGljaCB0aGlzIGJsb2NrIHdhcyBwYXNzZWQgb3V0LgogKi8KIAotLyogZGVidWcgcmVwbGFjZW1lbnRzIGZvciB0aGUgUHlNZW1fKiBtZW1vcnkgQVBJICovCi12b2lkICoKLV9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKQorc3RhdGljIHZvaWQgKgorX1B5TWVtX0RlYnVnTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5ieXRlcykKIHsKLSAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKF9QWU1BTExPQ19NRU1fSUQsIG5ieXRlcyk7Ci19Ci12b2lkICoKLV9QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShfUFlNQUxMT0NfTUVNX0lELCBwLCBuYnl0ZXMpOwotfQotdm9pZAotX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpwKQotewotICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoX1BZTUFMTE9DX01FTV9JRCwgcCk7Ci19Ci0KLS8qIGRlYnVnIHJlcGxhY2VtZW50cyBmb3IgdGhlIFB5T2JqZWN0XyogbWVtb3J5IEFQSSAqLwotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKF9QWU1BTExPQ19PQkpfSUQsIG5ieXRlcyk7Ci19Ci12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShfUFlNQUxMT0NfT0JKX0lELCBwLCBuYnl0ZXMpOwotfQotdm9pZAotX1B5T2JqZWN0X0RlYnVnRnJlZSh2b2lkICpwKQotewotICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCk7Ci19Ci12b2lkCi1fUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MoY29uc3Qgdm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCk7Ci19Ci0KLQotLyogZ2VuZXJpYyBkZWJ1ZyBtZW1vcnkgYXBpLCB3aXRoIGFuICJpZCIgdG8gaWRlbnRpZnkgdGhlIEFQSSBpbiB1c2UgKi8KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGNoYXIgaWQsIHNpemVfdCBuYnl0ZXMpCi17CisgICAgZGVidWdfYWxsb2NfYXBpX3QgKmFwaSA9IChkZWJ1Z19hbGxvY19hcGlfdCAqKWN0eDsKICAgICB1Y2hhciAqcDsgICAgICAgICAgIC8qIGJhc2UgYWRkcmVzcyBvZiBtYWxsb2MnZWQgYmxvY2sgKi8KICAgICB1Y2hhciAqdGFpbDsgICAgICAgIC8qIHAgKyAyKlNTVCArIG5ieXRlcyA9PSBwb2ludGVyIHRvIHRhaWwgcGFkIGJ5dGVzICovCiAgICAgc2l6ZV90IHRvdGFsOyAgICAgICAvKiBuYnl0ZXMgKyA0KlNTVCAqLwpAQCAtMTQ2NCwxNCArMTc1OCwxNCBAQAogICAgICAgICAvKiBvdmVyZmxvdzogIGNhbid0IHJlcHJlc2VudCB0b3RhbCBhcyBhIHNpemVfdCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHAgPSAodWNoYXIgKilQeU9iamVjdF9NYWxsb2ModG90YWwpOworICAgIHAgPSAodWNoYXIgKilhcGktPmFsbG9jLm1hbGxvYyhhcGktPmFsbG9jLmN0eCwgdG90YWwpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogYXQgcCwgd3JpdGUgc2l6ZSAoU1NUIGJ5dGVzKSwgaWQgKDEgYnl0ZSksIHBhZCAoU1NULTEgYnl0ZXMpICovCiAgICAgd3JpdGVfc2l6ZV90KHAsIG5ieXRlcyk7Ci0gICAgcFtTU1RdID0gKHVjaGFyKWlkOwotICAgIG1lbXNldChwICsgU1NUICsgMSAsIEZPUkJJRERFTkJZVEUsIFNTVC0xKTsKKyAgICBwW1NTVF0gPSAodWNoYXIpYXBpLT5hcGlfaWQ7CisgICAgbWVtc2V0KHAgKyBTU1QgKyAxLCBGT1JCSURERU5CWVRFLCBTU1QtMSk7CiAKICAgICBpZiAobmJ5dGVzID4gMCkKICAgICAgICAgbWVtc2V0KHAgKyAyKlNTVCwgQ0xFQU5CWVRFLCBuYnl0ZXMpOwpAQCAtMTQ4OSwzNSArMTc4MywzNyBAQAogICAgVGhlbiBmaWxscyB0aGUgb3JpZ2luYWwgYnl0ZXMgd2l0aCBERUFEQllURS4KICAgIFRoZW4gY2FsbHMgdGhlIHVuZGVybHlpbmcgZnJlZS4KICovCi12b2lkCi1fUHlPYmplY3RfRGVidWdGcmVlQXBpKGNoYXIgYXBpLCB2b2lkICpwKQorc3RhdGljIHZvaWQKK19QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKQogeworICAgIGRlYnVnX2FsbG9jX2FwaV90ICphcGkgPSAoZGVidWdfYWxsb2NfYXBpX3QgKiljdHg7CiAgICAgdWNoYXIgKnEgPSAodWNoYXIgKilwIC0gMipTU1Q7ICAvKiBhZGRyZXNzIHJldHVybmVkIGZyb20gbWFsbG9jICovCiAgICAgc2l6ZV90IG5ieXRlczsKIAogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoYXBpLCBwKTsKKyAgICBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoYXBpLT5hcGlfaWQsIHApOwogICAgIG5ieXRlcyA9IHJlYWRfc2l6ZV90KHEpOwogICAgIG5ieXRlcyArPSA0KlNTVDsKICAgICBpZiAobmJ5dGVzID4gMCkKICAgICAgICAgbWVtc2V0KHEsIERFQURCWVRFLCBuYnl0ZXMpOwotICAgIFB5T2JqZWN0X0ZyZWUocSk7CisgICAgYXBpLT5hbGxvYy5mcmVlKGFwaS0+YWxsb2MuY3R4LCBxKTsKIH0KIAotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKGNoYXIgYXBpLCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQorc3RhdGljIHZvaWQgKgorX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCiB7Ci0gICAgdWNoYXIgKnEgPSAodWNoYXIgKilwOworICAgIGRlYnVnX2FsbG9jX2FwaV90ICphcGkgPSAoZGVidWdfYWxsb2NfYXBpX3QgKiljdHg7CisgICAgdWNoYXIgKnEgPSAodWNoYXIgKilwLCAqb2xkcTsKICAgICB1Y2hhciAqdGFpbDsKICAgICBzaXplX3QgdG90YWw7ICAgICAgIC8qIG5ieXRlcyArIDQqU1NUICovCiAgICAgc2l6ZV90IG9yaWdpbmFsX25ieXRlczsKICAgICBpbnQgaTsKIAogICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoYXBpLCBuYnl0ZXMpOworICAgICAgICByZXR1cm4gX1B5TWVtX0RlYnVnTWFsbG9jKGN0eCwgbmJ5dGVzKTsKIAotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShhcGksIHApOworICAgIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhhcGktPmFwaV9pZCwgcCk7CiAgICAgYnVtcHNlcmlhbG5vKCk7CiAgICAgb3JpZ2luYWxfbmJ5dGVzID0gcmVhZF9zaXplX3QocSAtIDIqU1NUKTsKICAgICB0b3RhbCA9IG5ieXRlcyArIDQqU1NUOwpAQCAtMTUyNSwyNCArMTgyMSwyNiBAQAogICAgICAgICAvKiBvdmVyZmxvdzogIGNhbid0IHJlcHJlc2VudCB0b3RhbCBhcyBhIHNpemVfdCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChuYnl0ZXMgPCBvcmlnaW5hbF9uYnl0ZXMpIHsKLSAgICAgICAgLyogc2hyaW5raW5nOiAgbWFyayBvbGQgZXh0cmEgbWVtb3J5IGRlYWQgKi8KLSAgICAgICAgbWVtc2V0KHEgKyBuYnl0ZXMsIERFQURCWVRFLCBvcmlnaW5hbF9uYnl0ZXMgLSBuYnl0ZXMgKyAyKlNTVCk7Ci0gICAgfQotCiAgICAgLyogUmVzaXplIGFuZCBhZGQgZGVjb3JhdGlvbnMuIFdlIG1heSBnZXQgYSBuZXcgcG9pbnRlciBoZXJlLCBpbiB3aGljaAogICAgICAqIGNhc2Ugd2UgZGlkbid0IGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgdGhlIG9sZCBtZW1vcnkgd2l0aCBERUFEQllURSwKICAgICAgKiBidXQgd2UgbGl2ZSB3aXRoIHRoYXQuCiAgICAgICovCi0gICAgcSA9ICh1Y2hhciAqKVB5T2JqZWN0X1JlYWxsb2MocSAtIDIqU1NULCB0b3RhbCk7CisgICAgb2xkcSA9IHE7CisgICAgcSA9ICh1Y2hhciAqKWFwaS0+YWxsb2MucmVhbGxvYyhhcGktPmFsbG9jLmN0eCwgcSAtIDIqU1NULCB0b3RhbCk7CiAgICAgaWYgKHEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAocSA9PSBvbGRxICYmIG5ieXRlcyA8IG9yaWdpbmFsX25ieXRlcykgeworICAgICAgICAvKiBzaHJpbmtpbmc6ICBtYXJrIG9sZCBleHRyYSBtZW1vcnkgZGVhZCAqLworICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyk7CisgICAgfQorCiAgICAgd3JpdGVfc2l6ZV90KHEsIG5ieXRlcyk7Ci0gICAgYXNzZXJ0KHFbU1NUXSA9PSAodWNoYXIpYXBpKTsKKyAgICBhc3NlcnQocVtTU1RdID09ICh1Y2hhcilhcGktPmFwaV9pZCk7CiAgICAgZm9yIChpID0gMTsgaSA8IFNTVDsgKytpKQogICAgICAgICBhc3NlcnQocVtTU1QgKyBpXSA9PSBGT1JCSURERU5CWVRFKTsKICAgICBxICs9IDIqU1NUOworCiAgICAgdGFpbCA9IHEgKyBuYnl0ZXM7CiAgICAgbWVtc2V0KHRhaWwsIEZPUkJJRERFTkJZVEUsIFNTVCk7CiAgICAgd3JpdGVfc2l6ZV90KHRhaWwgKyBTU1QsIHNlcmlhbG5vKTsKQEAgLTE1NjEsOCArMTg1OSw4IEBACiAgKiBhbmQgY2FsbCBQeV9GYXRhbEVycm9yIHRvIGtpbGwgdGhlIHByb2dyYW0uCiAgKiBUaGUgQVBJIGlkLCBpcyBhbHNvIGNoZWNrZWQuCiAgKi8KLSB2b2lkCi1fUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApCitzdGF0aWMgdm9pZAorX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKQogewogICAgIGNvbnN0IHVjaGFyICpxID0gKGNvbnN0IHVjaGFyICopcDsKICAgICBjaGFyIG1zZ2J1Zls2NF07CkBAIC0xNjE0LDcgKzE5MTIsNyBAQAogfQogCiAvKiBEaXNwbGF5IGluZm8gdG8gc3RkZXJyIGFib3V0IHRoZSBtZW1vcnkgYmxvY2sgYXQgcC4gKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKQogewogICAgIGNvbnN0IHVjaGFyICpxID0gKGNvbnN0IHVjaGFyICopcDsKZGlmZiAtLWdpdCBhL09iamVjdHMvcmFuZ2VvYmplY3QuYyBiL09iamVjdHMvcmFuZ2VvYmplY3QuYwppbmRleCBkNzkwY2E4Li5hNGQ5ZmIzIDEwMDY0NAotLS0gYS9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCkBAIC0zMTgsMTk1ICszMTgsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qIEFkZGl0aW9uYWwgaGVscGVycywgc2luY2UgdGhlIHN0YW5kYXJkIHNsaWNlIGhlbHBlcnMKLSAqIGFsbCBjbGlwIHRvIFBZX1NTSVpFX1RfTUFYCi0gKi8KLQotLyogUmVwbGFjZSBfUHlFdmFsX1NsaWNlSW5kZXggKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1jb21wdXRlX3NsaWNlX2VsZW1lbnQoUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAob2JqICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5SW5kZXhfQ2hlY2sob2JqKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUgb3IgaGF2ZSBhbiBfX2luZGV4X18gbWV0aG9kIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogUmVwbGFjZSBQeVNsaWNlX0dldEluZGljZXNFeAotICogICBSZXN1bHQgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBzbGljZSBpcyBlbXB0eQotICogICAgKC0xID0gZXJyb3IsIDAgPSBlbXB0eSBzbGljZSwgMSA9IHNsaWNlIGNvbnRhaW5zIGVsZW1lbnRzKQotICovCi1zdGF0aWMgaW50Ci1jb21wdXRlX3NsaWNlX2luZGljZXMocmFuZ2VvYmplY3QgKnIsIFB5U2xpY2VPYmplY3QgKnNsaWNlLAotICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RhcnQsIFB5T2JqZWN0ICoqc3RvcCwgUHlPYmplY3QgKipzdGVwKQotewotICAgIGludCBjbXBfcmVzdWx0LCBoYXNfZWxlbWVudHM7Ci0gICAgUHlfc3NpemVfdCBjbGFtcGVkX3N0ZXAgPSAwOwotICAgIFB5T2JqZWN0ICp6ZXJvID0gTlVMTCwgKm9uZSA9IE5VTEwsICpuZWdfb25lID0gTlVMTCwgKmNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnRtcF9zdGFydCA9IE5VTEwsICp0bXBfc3RvcCA9IE5VTEwsICp0bXBfc3RlcCA9IE5VTEw7Ci0gICAgemVybyA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKLSAgICBpZiAoemVybyA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDEpOwotICAgIGlmIChvbmUgPT0gTlVMTCkgZ290byBGYWlsOwotICAgIG5lZ19vbmUgPSBQeUxvbmdfRnJvbUxvbmcoLTEpOwotICAgIGlmIChuZWdfb25lID09IE5VTEwpIGdvdG8gRmFpbDsKLQotICAgIC8qIENhbGN1bGF0ZSBzdGVwIHZhbHVlICovCi0gICAgaWYgKHNsaWNlLT5zdGVwID09IFB5X05vbmUpIHsKLSAgICAgICAgY2xhbXBlZF9zdGVwID0gMTsKLSAgICAgICAgdG1wX3N0ZXAgPSBvbmU7Ci0gICAgICAgIFB5X0lOQ1JFRih0bXBfc3RlcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFfUHlFdmFsX1NsaWNlSW5kZXgoc2xpY2UtPnN0ZXAsICZjbGFtcGVkX3N0ZXApKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPT0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIHN0ZXAgY2Fubm90IGJlIHplcm8iKTsKLSAgICAgICAgICAgIGdvdG8gRmFpbDsKLSAgICAgICAgfQotICAgICAgICB0bXBfc3RlcCA9IGNvbXB1dGVfc2xpY2VfZWxlbWVudChzbGljZS0+c3RlcCk7Ci0gICAgICAgIGlmICh0bXBfc3RlcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgfQotCi0gICAgLyogQ2FsY3VsYXRlIHN0YXJ0IHZhbHVlICovCi0gICAgaWYgKHNsaWNlLT5zdGFydCA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICBpZiAodG1wX3N0YXJ0ID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRtcF9zdGFydCA9IHplcm87Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0YXJ0KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbmRpZGF0ZSA9IGNvbXB1dGVfc2xpY2VfZWxlbWVudChzbGljZS0+c3RhcnQpOwotICAgICAgICBpZiAoY2FuZGlkYXRlID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjYW5kaWRhdGUsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA8IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdGFydCA9IFB5TnVtYmVyX0FkZChyLT5sZW5ndGgsIGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBpZiAodG1wX3N0YXJ0ID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIFB5X0NMRUFSKGNhbmRpZGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPj0gMCAqLwotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgY2FuZGlkYXRlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogdG1wX3N0YXJ0IDwgMCAqLwotICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0YXJ0KTsKLSAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0YXJ0ID0gbmVnX29uZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0YXJ0ID0gemVybzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogdG1wX3N0YXJ0ID49IDAgKi8KLSAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCByLT5sZW5ndGgsIFB5X0dFKTsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgICAgIC8qIHRtcF9zdGFydCA+PSByLT5sZW5ndGggKi8KLSAgICAgICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RhcnQpOwotICAgICAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IFB5TnVtYmVyX1N1YnRyYWN0KHItPmxlbmd0aCwgb25lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0YXJ0ID0gci0+bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0YXJ0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RvcCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RvcCA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICB0bXBfc3RvcCA9IG5lZ19vbmU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0bXBfc3RvcCA9IHItPmxlbmd0aDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbmRpZGF0ZSA9IGNvbXB1dGVfc2xpY2VfZWxlbWVudChzbGljZS0+c3RvcCk7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNhbmRpZGF0ZSwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlIDwgMCAqLwotICAgICAgICAgICAgdG1wX3N0b3AgPSBQeU51bWJlcl9BZGQoci0+bGVuZ3RoLCBjYW5kaWRhdGUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdG9wID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIFB5X0NMRUFSKGNhbmRpZGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPj0gMCAqLwotICAgICAgICAgICAgdG1wX3N0b3AgPSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICBjYW5kaWRhdGUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0b3AsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdG9wIDwgMCAqLwotICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0b3ApOwotICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RvcCA9IG5lZ19vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gemVybzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RvcCA+PSAwICovCi0gICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdG9wLCByLT5sZW5ndGgsIFB5X0dFKTsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgICAgIC8qIHRtcF9zdG9wID49IHItPmxlbmd0aCAqLwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdG9wKTsKLSAgICAgICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RvcCA9IFB5TnVtYmVyX1N1YnRyYWN0KHItPmxlbmd0aCwgb25lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRtcF9zdG9wID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RvcCA9IHItPmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBDaGVjayBpZiB0aGUgc2xpY2UgaXMgZW1wdHkgb3Igbm90ICovCi0gICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgaGFzX2VsZW1lbnRzID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgdG1wX3N0b3AsIFB5X0dUKTsKLSAgICB9IGVsc2UgewotICAgICAgICBoYXNfZWxlbWVudHMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB0bXBfc3RvcCwgUHlfTFQpOwotICAgIH0KLSAgICBpZiAoaGFzX2VsZW1lbnRzID09IC0xKSBnb3RvIEZhaWw7Ci0KLSAgICAqc3RhcnQgPSB0bXBfc3RhcnQ7Ci0gICAgKnN0b3AgPSB0bXBfc3RvcDsKLSAgICAqc3RlcCA9IHRtcF9zdGVwOwotICAgIFB5X0RFQ1JFRihuZWdfb25lKTsKLSAgICBQeV9ERUNSRUYob25lKTsKLSAgICBQeV9ERUNSRUYoemVybyk7Ci0gICAgcmV0dXJuIGhhc19lbGVtZW50czsKLQotICBGYWlsOgotICAgIFB5X1hERUNSRUYodG1wX3N0YXJ0KTsKLSAgICBQeV9YREVDUkVGKHRtcF9zdG9wKTsKLSAgICBQeV9YREVDUkVGKHRtcF9zdGVwKTsKLSAgICBQeV9YREVDUkVGKGNhbmRpZGF0ZSk7Ci0gICAgUHlfWERFQ1JFRihuZWdfb25lKTsKLSAgICBQeV9YREVDUkVGKG9uZSk7Ci0gICAgUHlfWERFQ1JFRih6ZXJvKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBjb21wdXRlX3NsaWNlKHJhbmdlb2JqZWN0ICpyLCBQeU9iamVjdCAqX3NsaWNlKQogewpAQCAtNTE0LDEwICszMjUsMTEgQEAKICAgICByYW5nZW9iamVjdCAqcmVzdWx0OwogICAgIFB5T2JqZWN0ICpzdGFydCA9IE5VTEwsICpzdG9wID0gTlVMTCwgKnN0ZXAgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpzdWJzdGFydCA9IE5VTEwsICpzdWJzdG9wID0gTlVMTCwgKnN1YnN0ZXAgPSBOVUxMOwotICAgIGludCBoYXNfZWxlbWVudHM7CisgICAgaW50IGVycm9yOwogCi0gICAgaGFzX2VsZW1lbnRzID0gY29tcHV0ZV9zbGljZV9pbmRpY2VzKHIsIHNsaWNlLCAmc3RhcnQsICZzdG9wLCAmc3RlcCk7Ci0gICAgaWYgKGhhc19lbGVtZW50cyA9PSAtMSkgcmV0dXJuIE5VTEw7CisgICAgZXJyb3IgPSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhzbGljZSwgci0+bGVuZ3RoLCAmc3RhcnQsICZzdG9wLCAmc3RlcCk7CisgICAgaWYgKGVycm9yID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHN1YnN0ZXAgPSBQeU51bWJlcl9NdWx0aXBseShyLT5zdGVwLCBzdGVwKTsKICAgICBpZiAoc3Vic3RlcCA9PSBOVUxMKSBnb3RvIGZhaWw7CkBAIC01MjcsMTMgKzMzOSw4IEBACiAgICAgaWYgKHN1YnN0YXJ0ID09IE5VTEwpIGdvdG8gZmFpbDsKICAgICBQeV9DTEVBUihzdGFydCk7CiAKLSAgICBpZiAoaGFzX2VsZW1lbnRzKSB7Ci0gICAgICAgIHN1YnN0b3AgPSBjb21wdXRlX2l0ZW0ociwgc3RvcCk7Ci0gICAgICAgIGlmIChzdWJzdG9wID09IE5VTEwpIGdvdG8gZmFpbDsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWJzdG9wID0gc3Vic3RhcnQ7Ci0gICAgICAgIFB5X0lOQ1JFRihzdWJzdG9wKTsKLSAgICB9CisgICAgc3Vic3RvcCA9IGNvbXB1dGVfaXRlbShyLCBzdG9wKTsKKyAgICBpZiAoc3Vic3RvcCA9PSBOVUxMKSBnb3RvIGZhaWw7CiAgICAgUHlfQ0xFQVIoc3RvcCk7CiAKICAgICByZXN1bHQgPSBtYWtlX3JhbmdlX29iamVjdChQeV9UWVBFKHIpLCBzdWJzdGFydCwgc3Vic3RvcCwgc3Vic3RlcCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3NldG9iamVjdC5jIGIvT2JqZWN0cy9zZXRvYmplY3QuYwppbmRleCBlYTVhMjRjLi5hZGM5OWRhIDEwMDY0NAotLS0gYS9PYmplY3RzL3NldG9iamVjdC5jCisrKyBiL09iamVjdHMvc2V0b2JqZWN0LmMKQEAgLTEsMTU0ICsxLDEyMSBAQAogCiAvKiBzZXQgb2JqZWN0IGltcGxlbWVudGF0aW9uCisKICAgIFdyaXR0ZW4gYW5kIG1haW50YWluZWQgYnkgUmF5bW9uZCBELiBIZXR0aW5nZXIgPHB5dGhvbkByY24uY29tPgogICAgRGVyaXZlZCBmcm9tIExpYi9zZXRzLnB5IGFuZCBPYmplY3RzL2RpY3RvYmplY3QuYy4KIAotICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFRoZSBiYXNpYyBsb29rdXAgZnVuY3Rpb24gdXNlZCBieSBhbGwgb3BlcmF0aW9ucy4KKyAgIFRoaXMgaXMgYmFzZWQgb24gQWxnb3JpdGhtIEQgZnJvbSBLbnV0aCBWb2wuIDMsIFNlYy4gNi40LgorCisgICBUaGUgaW5pdGlhbCBwcm9iZSBpbmRleCBpcyBjb21wdXRlZCBhcyBoYXNoIG1vZCB0aGUgdGFibGUgc2l6ZS4KKyAgIFN1YnNlcXVlbnQgcHJvYmUgaW5kaWNlcyBhcmUgY29tcHV0ZWQgYXMgZXhwbGFpbmVkIGluIE9iamVjdHMvZGljdG9iamVjdC5jLgorCisgICBUbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5LCBlYWNoIHByb2JlIGluc3BlY3RzIGEgc2VyaWVzIG9mIGNvbnNlY3V0aXZlCisgICBuZWFyYnkgZW50cmllcyBiZWZvcmUgbW92aW5nIG9uIHRvIHByb2JlcyBlbHNld2hlcmUgaW4gbWVtb3J5LiAgVGhpcyBsZWF2ZXMKKyAgIHVzIHdpdGggYSBoeWJyaWQgb2YgbGluZWFyIHByb2JpbmcgYW5kIG9wZW4gYWRkcmVzc2luZy4gIFRoZSBsaW5lYXIgcHJvYmluZworICAgcmVkdWNlcyB0aGUgY29zdCBvZiBoYXNoIGNvbGxpc2lvbnMgYmVjYXVzZSBjb25zZWN1dGl2ZSBtZW1vcnkgYWNjZXNzZXMKKyAgIHRlbmQgdG8gYmUgbXVjaCBjaGVhcGVyIHRoYW4gc2NhdHRlcmVkIHByb2Jlcy4gIEFmdGVyIExJTkVBUl9QUk9CRVMgc3RlcHMsCisgICB3ZSB0aGVuIHVzZSBvcGVuIGFkZHJlc3Npbmcgd2l0aCB0aGUgdXBwZXIgYml0cyBmcm9tIHRoZSBoYXNoIHZhbHVlLiAgVGhpcworICAgaGVscHMgYnJlYWstdXAgbG9uZyBjaGFpbnMgb2YgY29sbGlzaW9ucy4KKworICAgQWxsIGFyaXRobWV0aWMgb24gaGFzaCBzaG91bGQgaWdub3JlIG92ZXJmbG93LgorCisgICBVbmxpa2UgdGhlIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb24sIHRoZSBsb29ra2V5IGZ1bmN0aW9ucyBjYW4gcmV0dXJuCisgICBOVUxMIGlmIHRoZSByaWNoIGNvbXBhcmlzb24gcmV0dXJucyBhbiBlcnJvci4KICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZXEuaCIKIAotLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQotICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKLSAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCi1zdGF0aWMgdm9pZAotc2V0X2tleV9lcnJvcihQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICp0dXA7Ci0gICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7Ci0gICAgaWYgKCF0dXApCi0gICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KLSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7Ci0gICAgUHlfREVDUkVGKHR1cCk7Ci19CisvKiBPYmplY3QgdXNlZCBhcyBkdW1teSBrZXkgdG8gZmlsbCBkZWxldGVkIGVudHJpZXMgKi8KK3N0YXRpYyBQeU9iamVjdCBfZHVtbXlfc3RydWN0OwogCi0vKiBUaGlzIG11c3QgYmUgPj0gMS4gKi8KKyNkZWZpbmUgZHVtbXkgKCZfZHVtbXlfc3RydWN0KQorCisvKiBFeHBvcnRlZCBmb3IgdGhlIGdkYiBwbHVnaW4ncyBiZW5lZml0LiAqLworUHlPYmplY3QgKl9QeVNldF9EdW1teSA9IGR1bW15OworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PSBCZWdpbiBsb2dpYyBmb3IgcHJvYmluZyB0aGUgaGFzaCB0YWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIFNldCB0aGlzIHRvIHplcm8gdG8gdHVybi1vZmYgbGluZWFyIHByb2JpbmcgKi8KKyNpZm5kZWYgTElORUFSX1BST0JFUworI2RlZmluZSBMSU5FQVJfUFJPQkVTIDkKKyNlbmRpZgorCisvKiBUaGlzIG11c3QgYmUgPj0gMSAqLwogI2RlZmluZSBQRVJUVVJCX1NISUZUIDUKIAotLyogT2JqZWN0IHVzZWQgYXMgZHVtbXkga2V5IHRvIGZpbGwgZGVsZXRlZCBlbnRyaWVzICovCi1zdGF0aWMgUHlPYmplY3QgKmR1bW15ID0gTlVMTDsgLyogSW5pdGlhbGl6ZWQgYnkgZmlyc3QgY2FsbCB0byBtYWtlX25ld19zZXQoKSAqLwotCi0jaWZkZWYgUHlfUkVGX0RFQlVHCi1QeU9iamVjdCAqCi1fUHlTZXRfRHVtbXkodm9pZCkKLXsKLSAgICByZXR1cm4gZHVtbXk7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBJTklUX05PTlpFUk9fU0VUX1NMT1RTKHNvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT50YWJsZSA9IChzbyktPnNtYWxsdGFibGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+bWFzayA9IFB5U2V0X01JTlNJWkUgLSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPmhhc2ggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0KLSNkZWZpbmUgRU1QVFlfVE9fTUlOU0laRShzbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWVtc2V0KChzbyktPnNtYWxsdGFibGUsIDAsIHNpemVvZigoc28pLT5zbWFsbHRhYmxlKSk7ICAgICAgXAotICAgIChzbyktPnVzZWQgPSAoc28pLT5maWxsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBJTklUX05PTlpFUk9fU0VUX1NMT1RTKHNvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKQotCi0vKiBSZXVzZSBzY2hlbWUgdG8gc2F2ZSBjYWxscyB0byBtYWxsb2MsIGZyZWUsIGFuZCBtZW1zZXQgKi8KLSNpZm5kZWYgUHlTZXRfTUFYRlJFRUxJU1QKLSNkZWZpbmUgUHlTZXRfTUFYRlJFRUxJU1QgODAKLSNlbmRpZgotc3RhdGljIFB5U2V0T2JqZWN0ICpmcmVlX2xpc3RbUHlTZXRfTUFYRlJFRUxJU1RdOwotc3RhdGljIGludCBudW1mcmVlID0gMDsKLQotCi0vKgotVGhlIGJhc2ljIGxvb2t1cCBmdW5jdGlvbiB1c2VkIGJ5IGFsbCBvcGVyYXRpb25zLgotVGhpcyBpcyBiYXNlZCBvbiBBbGdvcml0aG0gRCBmcm9tIEtudXRoIFZvbC4gMywgU2VjLiA2LjQuCi1PcGVuIGFkZHJlc3NpbmcgaXMgcHJlZmVycmVkIG92ZXIgY2hhaW5pbmcgc2luY2UgdGhlIGxpbmsgb3ZlcmhlYWQgZm9yCi1jaGFpbmluZyB3b3VsZCBiZSBzdWJzdGFudGlhbCAoMTAwJSB3aXRoIHR5cGljYWwgbWFsbG9jIG92ZXJoZWFkKS4KLQotVGhlIGluaXRpYWwgcHJvYmUgaW5kZXggaXMgY29tcHV0ZWQgYXMgaGFzaCBtb2QgdGhlIHRhYmxlIHNpemUuIFN1YnNlcXVlbnQKLXByb2JlIGluZGljZXMgYXJlIGNvbXB1dGVkIGFzIGV4cGxhaW5lZCBpbiBPYmplY3RzL2RpY3RvYmplY3QuYy4KLQotQWxsIGFyaXRobWV0aWMgb24gaGFzaCBzaG91bGQgaWdub3JlIG92ZXJmbG93LgotCi1Vbmxpa2UgdGhlIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb24sIHRoZSBsb29ra2V5IGZ1bmN0aW9ucyBjYW4gcmV0dXJuCi1OVUxMIGlmIHRoZSByaWNoIGNvbXBhcmlzb24gcmV0dXJucyBhbiBlcnJvci4KLSovCi0KIHN0YXRpYyBzZXRlbnRyeSAqCi1zZXRfbG9va2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoKQorc2V0X2xvb2trZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IHNvLT5tYXNrOwogICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7Ci0gICAgcmVnaXN0ZXIgaW50IGNtcDsKLSAgICBQeU9iamVjdCAqc3RhcnRrZXk7CisgICAgc2V0ZW50cnkgKmZyZWVzbG90ID0gTlVMTDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOworICAgIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7IC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLworICAgIHNpemVfdCBqOworICAgIGludCBjbXA7CiAKLSAgICBpID0gKHNpemVfdCloYXNoICYgbWFzazsKLSAgICBlbnRyeSA9ICZ0YWJsZVtpXTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMIHx8IGVudHJ5LT5rZXkgPT0ga2V5KQorICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gZW50cnk7CiAKLSAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSkKLSAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2gpIHsKLSAgICAgICAgICAgIHN0YXJ0a2V5ID0gZW50cnktPmtleTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydGtleSA9IGVudHJ5LT5rZXk7CiAgICAgICAgICAgICBQeV9JTkNSRUYoc3RhcnRrZXkpOwogICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0a2V5LCBrZXksIFB5X0VRKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7CiAgICAgICAgICAgICBpZiAoY21wIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YWJsZSA9PSBzby0+dGFibGUgJiYgZW50cnktPmtleSA9PSBzdGFydGtleSkgeworICAgICAgICAgICAgaWYgKHRhYmxlICE9IHNvLT50YWJsZSB8fCBlbnRyeS0+a2V5ICE9IHN0YXJ0a2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKworICAgICAgICBmb3IgKGogPSAxIDsgaiA8PSBMSU5FQVJfUFJPQkVTIDsgaisrKSB7CisgICAgICAgICAgICBlbnRyeSA9ICZ0YWJsZVsoaSArIGopICYgbWFza107CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0YXJ0a2V5ID0gZW50cnktPmtleTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoc3RhcnRrZXkpOworICAgICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlICE9IHNvLT50YWJsZSB8fCBlbnRyeS0+a2V5ICE9IHN0YXJ0a2V5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CiAgICAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIFRoZSBjb21wYXJlIGRpZCBtYWpvciBuYXN0eSBzdHVmZiB0byB0aGUKLSAgICAgICAgICAgICAgICAgKiBzZXQ6ICBzdGFydCBvdmVyLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKICAgICAgICAgfQotICAgICAgICBmcmVlc2xvdCA9IE5VTEw7Ci0gICAgfQogCi0gICAgLyogSW4gdGhlIGxvb3AsIGtleSA9PSBkdW1teSBpcyBieSBmYXIgKGZhY3RvciBvZiAxMDBzKSB0aGUKLSAgICAgICBsZWFzdCBsaWtlbHkgb3V0Y29tZSwgc28gdGVzdCBmb3IgdGhhdCBsYXN0LiAqLwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7CisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworCiAgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKGZyZWVzbG90ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgZW50cnkgPSBmcmVlc2xvdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7Ci0gICAgICAgICAgICBzdGFydGtleSA9IGVudHJ5LT5rZXk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoc3RhcnRrZXkpOwotICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0a2V5LCBrZXksIFB5X0VRKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7Ci0gICAgICAgICAgICBpZiAoY21wIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YWJsZSA9PSBzby0+dGFibGUgJiYgZW50cnktPmtleSA9PSBzdGFydGtleSkgewotICAgICAgICAgICAgICAgIGlmIChjbXAgPiAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIFRoZSBjb21wYXJlIGRpZCBtYWpvciBuYXN0eSBzdHVmZiB0byB0aGUKLSAgICAgICAgICAgICAgICAgKiBzZXQ6ICBzdGFydCBvdmVyLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCi0gICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOwogICAgIH0KLSAgICByZXR1cm4gZW50cnk7CisgIGZvdW5kX251bGw6CisgICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OwogfQogCiAvKgpAQCAtMTU3LDE0ICsxMjQsMTUgQEAKICAqIHNlZSBpZiB0aGUgY29tcGFyaXNvbiBhbHRlcmVkIHRoZSB0YWJsZS4KICAqLwogc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5X3VuaWNvZGUoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBQeV9oYXNoX3QgaGFzaCkKK3NldF9sb29ra2V5X3VuaWNvZGUoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IHNvLT5tYXNrOwogICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKmZyZWVzbG90ID0gTlVMTDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOworICAgIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7CisgICAgc2l6ZV90IGo7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCiAgICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCkBAIC0xNzQsNDYgKzE0Miw5NCBAQAogICAgICAgICBzby0+bG9va3VwID0gc2V0X2xvb2trZXk7CiAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKICAgICB9Ci0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCB8fCBlbnRyeS0+a2V5ID09IGtleSkKLSAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KQotICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwotICAgIGVsc2UgewotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpCi0gICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgIGZyZWVzbG90ID0gTlVMTDsKLSAgICB9CiAKLSAgICAvKiBJbiB0aGUgbG9vcCwga2V5ID09IGR1bW15IGlzIGJ5IGZhciAoZmFjdG9yIG9mIDEwMHMpIHRoZQotICAgICAgIGxlYXN0IGxpa2VseSBvdXRjb21lLCBzbyB0ZXN0IGZvciB0aGF0IGxhc3QuICovCi0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKLSAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OworICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gZW50cnk7CisKKyAgICB3aGlsZSAoMSkgewogICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkKICAgICAgICAgICAgIHx8IChlbnRyeS0+aGFzaCA9PSBoYXNoCi0gICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15Ci0gICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQorICAgICAgICAgICAgICAgICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkKKyAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQogICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQogICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKworICAgICAgICBmb3IgKGogPSAxIDsgaiA8PSBMSU5FQVJfUFJPQkVTIDsgaisrKSB7CisgICAgICAgICAgICBlbnRyeSA9ICZ0YWJsZVsoaSArIGopICYgbWFza107CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleQorICAgICAgICAgICAgICAgIHx8IChlbnRyeS0+aGFzaCA9PSBoYXNoCisgICAgICAgICAgICAgICAgICAgICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkKKyAgICAgICAgICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOworICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKworICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CiAgICAgfQotICAgIGFzc2VydCgwKTsgICAgICAgICAgLyogTk9UIFJFQUNIRUQgKi8KLSAgICByZXR1cm4gMDsKKyAgZm91bmRfbnVsbDoKKyAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CiB9CiAKIC8qCitJbnRlcm5hbCByb3V0aW5lIHVzZWQgYnkgc2V0X3RhYmxlX3Jlc2l6ZSgpIHRvIGluc2VydCBhbiBpdGVtIHdoaWNoIGlzCitrbm93biB0byBiZSBhYnNlbnQgZnJvbSB0aGUgc2V0LiAgVGhpcyByb3V0aW5lIGFsc28gYXNzdW1lcyB0aGF0Cit0aGUgc2V0IGNvbnRhaW5zIG5vIGRlbGV0ZWQgZW50cmllcy4gIEJlc2lkZXMgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQsCit1c2luZyBzZXRfaW5zZXJ0X2NsZWFuKCkgaW4gc2V0X3RhYmxlX3Jlc2l6ZSgpIGlzIGRhbmdlcm91cyAoU0YgYnVnICMxNDU2MjA5KS4KK05vdGUgdGhhdCBubyByZWZjb3VudHMgYXJlIGNoYW5nZWQgYnkgdGhpcyByb3V0aW5lOyBpZiBuZWVkZWQsIHRoZSBjYWxsZXIKK2lzIHJlc3BvbnNpYmxlIGZvciBpbmNyZWYnaW5nIGBrZXlgLgorKi8KK3N0YXRpYyB2b2lkCitzZXRfaW5zZXJ0X2NsZWFuKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCit7CisgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSAoc2l6ZV90KXNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOworICAgIHNpemVfdCBqOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICBmb3IgKGogPSAxIDsgaiA8PSBMSU5FQVJfUFJPQkVTIDsgaisrKSB7CisgICAgICAgICAgICBlbnRyeSA9ICZ0YWJsZVsoaSArIGopICYgbWFza107CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgfQorICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOworICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKyAgICB9CisgIGZvdW5kX251bGw6CisgICAgZW50cnktPmtleSA9IGtleTsKKyAgICBlbnRyeS0+aGFzaCA9IGhhc2g7CisgICAgc28tPmZpbGwrKzsKKyAgICBzby0+dXNlZCsrOworfQorCisvKiA9PT09PT09PSBFbmQgbG9naWMgZm9yIHByb2JpbmcgdGhlIGhhc2ggdGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qCiBJbnRlcm5hbCByb3V0aW5lIHRvIGluc2VydCBhIG5ldyBrZXkgaW50byB0aGUgdGFibGUuCiBVc2VkIGJ5IHRoZSBwdWJsaWMgaW5zZXJ0IHJvdXRpbmUuCiBFYXRzIGEgcmVmZXJlbmNlIHRvIGtleS4KICovCiBzdGF0aWMgaW50Ci1zZXRfaW5zZXJ0X2tleShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQorc2V0X2luc2VydF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogCiAgICAgYXNzZXJ0KHNvLT5sb29rdXAgIT0gTlVMTCk7CiAgICAgZW50cnkgPSBzby0+bG9va3VwKHNvLCBrZXksIGhhc2gpOwpAQCAtMjMwLDcgKzI0Niw2IEBACiAgICAgICAgIGVudHJ5LT5rZXkgPSBrZXk7CiAgICAgICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKICAgICAgICAgc28tPnVzZWQrKzsKLSAgICAgICAgUHlfREVDUkVGKGR1bW15KTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBBQ1RJVkUgKi8KICAgICAgICAgUHlfREVDUkVGKGtleSk7CkBAIC0yMzksMzUgKzI1NCw2IEBACiB9CiAKIC8qCi1JbnRlcm5hbCByb3V0aW5lIHVzZWQgYnkgc2V0X3RhYmxlX3Jlc2l6ZSgpIHRvIGluc2VydCBhbiBpdGVtIHdoaWNoIGlzCi1rbm93biB0byBiZSBhYnNlbnQgZnJvbSB0aGUgc2V0LiAgVGhpcyByb3V0aW5lIGFsc28gYXNzdW1lcyB0aGF0Ci10aGUgc2V0IGNvbnRhaW5zIG5vIGRlbGV0ZWQgZW50cmllcy4gIEJlc2lkZXMgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQsCi11c2luZyBzZXRfaW5zZXJ0X2NsZWFuKCkgaW4gc2V0X3RhYmxlX3Jlc2l6ZSgpIGlzIGRhbmdlcm91cyAoU0YgYnVnICMxNDU2MjA5KS4KLU5vdGUgdGhhdCBubyByZWZjb3VudHMgYXJlIGNoYW5nZWQgYnkgdGhpcyByb3V0aW5lOyBpZiBuZWVkZWQsIHRoZSBjYWxsZXIKLWlzIHJlc3BvbnNpYmxlIGZvciBpbmNyZWYnaW5nIGBrZXlgLgotKi8KLXN0YXRpYyB2b2lkCi1zZXRfaW5zZXJ0X2NsZWFuKHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCi17Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSAoc2l6ZV90KXNvLT5tYXNrOwotICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7Ci0KLSAgICBpID0gKHNpemVfdCloYXNoICYgbWFzazsKLSAgICBlbnRyeSA9ICZ0YWJsZVtpXTsKLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyBlbnRyeS0+a2V5ICE9IE5VTEw7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOwotICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgfQotICAgIHNvLT5maWxsKys7Ci0gICAgZW50cnktPmtleSA9IGtleTsKLSAgICBlbnRyeS0+aGFzaCA9IGhhc2g7Ci0gICAgc28tPnVzZWQrKzsKLX0KLQotLyoKIFJlc3RydWN0dXJlIHRoZSB0YWJsZSBieSBhbGxvY2F0aW5nIGEgbmV3IHRhYmxlIGFuZCByZWluc2VydGluZyBhbGwKIGtleXMgYWdhaW4uICBXaGVuIGVudHJpZXMgaGF2ZSBiZWVuIGRlbGV0ZWQsIHRoZSBuZXcgdGFibGUgbWF5CiBhY3R1YWxseSBiZSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBvbmUuCkBAIC0zMzAsMjMgKzMxNiwxNCBAQAogICAgIHNvLT50YWJsZSA9IG5ld3RhYmxlOwogICAgIHNvLT5tYXNrID0gbmV3c2l6ZSAtIDE7CiAgICAgbWVtc2V0KG5ld3RhYmxlLCAwLCBzaXplb2Yoc2V0ZW50cnkpICogbmV3c2l6ZSk7CisgICAgaSA9IHNvLT51c2VkOwogICAgIHNvLT51c2VkID0gMDsKLSAgICBpID0gc28tPmZpbGw7CiAgICAgc28tPmZpbGwgPSAwOwogCiAgICAgLyogQ29weSB0aGUgZGF0YSBvdmVyOyB0aGlzIGlzIHJlZmNvdW50LW5ldXRyYWwgZm9yIGFjdGl2ZSBlbnRyaWVzOwogICAgICAgIGR1bW15IGVudHJpZXMgYXJlbid0IGNvcGllZCBvdmVyLCBvZiBjb3Vyc2UgKi8KICAgICBmb3IgKGVudHJ5ID0gb2xkdGFibGU7IGkgPiAwOyBlbnRyeSsrKSB7Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIC8qIFVOVVNFRCAqLwotICAgICAgICAgICAgOwotICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpIHsKLSAgICAgICAgICAgIC8qIERVTU1ZICovCi0gICAgICAgICAgICAtLWk7Ci0gICAgICAgICAgICBhc3NlcnQoZW50cnktPmtleSA9PSBkdW1teSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBBQ1RJVkUgKi8KKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gTlVMTCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CiAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICBzZXRfaW5zZXJ0X2NsZWFuKHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCk7CiAgICAgICAgIH0KQEAgLTM2MCw5ICszMzcsOSBAQAogLyogQ0FVVElPTjogc2V0X2FkZF9rZXkvZW50cnkoKSBtdXN0IGd1YXJhbnRlZSBpdCB3b24ndCByZXNpemUgdGhlIHRhYmxlICovCiAKIHN0YXRpYyBpbnQKLXNldF9hZGRfZW50cnkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqZW50cnkpCitzZXRfYWRkX2VudHJ5KFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKmVudHJ5KQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgbl91c2VkOworICAgIFB5X3NzaXplX3Qgbl91c2VkOwogICAgIFB5T2JqZWN0ICprZXkgPSBlbnRyeS0+a2V5OwogICAgIFB5X2hhc2hfdCBoYXNoID0gZW50cnktPmhhc2g7CiAKQEAgLTM3OSwxMCArMzU2LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLXNldF9hZGRfa2V5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKK3NldF9hZGRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICByZWdpc3RlciBQeV9oYXNoX3QgaGFzaDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IG5fdXNlZDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKyAgICBQeV9zc2l6ZV90IG5fdXNlZDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fAogICAgICAgICAoaGFzaCA9ICgoUHlBU0NJSU9iamVjdCAqKSBrZXkpLT5oYXNoKSA9PSAtMSkgewpAQCAtNDA3LDcgKzM4NCw3IEBACiAKIHN0YXRpYyBpbnQKIHNldF9kaXNjYXJkX2VudHJ5KFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKm9sZGVudHJ5KQoteyAgICAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7Cit7ICAgICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqb2xkX2tleTsKIAogICAgIGVudHJ5ID0gKHNvLT5sb29rdXApKHNvLCBvbGRlbnRyeS0+a2V5LCBvbGRlbnRyeS0+aGFzaCk7CkBAIC00MTYsNyArMzkzLDYgQEAKICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMICB8fCAgZW50cnktPmtleSA9PSBkdW1teSkKICAgICAgICAgcmV0dXJuIERJU0NBUkRfTk9URk9VTkQ7CiAgICAgb2xkX2tleSA9IGVudHJ5LT5rZXk7Ci0gICAgUHlfSU5DUkVGKGR1bW15KTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CiAgICAgc28tPnVzZWQtLTsKICAgICBQeV9ERUNSRUYob2xkX2tleSk7CkBAIC00MjYsOCArNDAyLDggQEAKIHN0YXRpYyBpbnQKIHNldF9kaXNjYXJkX2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqb2xkX2tleTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKQEAgLTQ0NCwxMyArNDIwLDIzIEBACiAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCAgfHwgIGVudHJ5LT5rZXkgPT0gZHVtbXkpCiAgICAgICAgIHJldHVybiBESVNDQVJEX05PVEZPVU5EOwogICAgIG9sZF9rZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgUHlfREVDUkVGKG9sZF9rZXkpOwogICAgIHJldHVybiBESVNDQVJEX0ZPVU5EOwogfQogCitzdGF0aWMgdm9pZAorc2V0X2VtcHR5X3RvX21pbnNpemUoUHlTZXRPYmplY3QgKnNvKQoreworICAgIG1lbXNldChzby0+c21hbGx0YWJsZSwgMCwgc2l6ZW9mKHNvLT5zbWFsbHRhYmxlKSk7CisgICAgc28tPmZpbGwgPSAwOworICAgIHNvLT51c2VkID0gMDsKKyAgICBzby0+bWFzayA9IFB5U2V0X01JTlNJWkUgLSAxOworICAgIHNvLT50YWJsZSA9IHNvLT5zbWFsbHRhYmxlOworICAgIHNvLT5oYXNoID0gLTE7Cit9CisKIHN0YXRpYyBpbnQKIHNldF9jbGVhcl9pbnRlcm5hbChQeVNldE9iamVjdCAqc28pCiB7CkBAIC00NTgsMTQgKzQ0NCwxMyBAQAogICAgIGludCB0YWJsZV9pc19tYWxsb2NlZDsKICAgICBQeV9zc2l6ZV90IGZpbGw7CiAgICAgc2V0ZW50cnkgc21hbGxfY29weVtQeVNldF9NSU5TSVpFXTsKLSNpZmRlZiBQeV9ERUJVRwotICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAKLSAgICBuID0gc28tPm1hc2sgKyAxOwotICAgIGkgPSAwOworI2lmZGVmIFB5X0RFQlVHCisgICAgUHlfc3NpemVfdCBpID0gMDsKKyAgICBQeV9zc2l6ZV90IG4gPSBzby0+bWFzayArIDE7CiAjZW5kaWYKIAorICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKICAgICB0YWJsZSA9IHNvLT50YWJsZTsKICAgICBhc3NlcnQodGFibGUgIT0gTlVMTCk7CiAgICAgdGFibGVfaXNfbWFsbG9jZWQgPSB0YWJsZSAhPSBzby0+c21hbGx0YWJsZTsKQEAgLTQ3OCw3ICs0NjMsNyBAQAogICAgICAqLwogICAgIGZpbGwgPSBzby0+ZmlsbDsKICAgICBpZiAodGFibGVfaXNfbWFsbG9jZWQpCi0gICAgICAgIEVNUFRZX1RPX01JTlNJWkUoc28pOworICAgICAgICBzZXRfZW1wdHlfdG9fbWluc2l6ZShzbyk7CiAKICAgICBlbHNlIGlmIChmaWxsID4gMCkgewogICAgICAgICAvKiBJdCdzIGEgc21hbGwgdGFibGUgd2l0aCBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkLgpAQCAtNDg3LDcgKzQ3Miw3IEBACiAgICAgICAgICAqLwogICAgICAgICBtZW1jcHkoc21hbGxfY29weSwgdGFibGUsIHNpemVvZihzbWFsbF9jb3B5KSk7CiAgICAgICAgIHRhYmxlID0gc21hbGxfY29weTsKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7CisgICAgICAgIHNldF9lbXB0eV90b19taW5zaXplKHNvKTsKICAgICB9CiAgICAgLyogZWxzZSBpdCdzIGEgc21hbGwgdGFibGUgdGhhdCdzIGFscmVhZHkgZW1wdHkgKi8KIApAQCAtNTAyLDcgKzQ4Nyw4IEBACiAjZW5kaWYKICAgICAgICAgaWYgKGVudHJ5LT5rZXkpIHsKICAgICAgICAgICAgIC0tZmlsbDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IGR1bW15KQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKICAgICAgICAgfQogI2lmZGVmIFB5X0RFQlVHCiAgICAgICAgIGVsc2UKQEAgLTUzMyw3ICs1MTksNyBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IG1hc2s7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKnRhYmxlOworICAgIHNldGVudHJ5ICp0YWJsZTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKICAgICBpID0gKnBvc19wdHI7CkBAIC01NTMsNyArNTM5LDcgQEAKIHN0YXRpYyB2b2lkCiBzZXRfZGVhbGxvYyhQeVNldE9iamVjdCAqc28pCiB7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeV9zc2l6ZV90IGZpbGwgPSBzby0+ZmlsbDsKICAgICBQeU9iamVjdF9HQ19VblRyYWNrKHNvKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0JFR0lOKHNvKQpAQCAtNTYzLDE1ICs1NDksMTMgQEAKICAgICBmb3IgKGVudHJ5ID0gc28tPnRhYmxlOyBmaWxsID4gMDsgZW50cnkrKykgewogICAgICAgICBpZiAoZW50cnktPmtleSkgewogICAgICAgICAgICAgLS1maWxsOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gZHVtbXkpCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChzby0+dGFibGUgIT0gc28tPnNtYWxsdGFibGUpCiAgICAgICAgIFB5TWVtX0RFTChzby0+dGFibGUpOwotICAgIGlmIChudW1mcmVlIDwgUHlTZXRfTUFYRlJFRUxJU1QgJiYgUHlBbnlTZXRfQ2hlY2tFeGFjdChzbykpCi0gICAgICAgIGZyZWVfbGlzdFtudW1mcmVlKytdID0gc287Ci0gICAgZWxzZQotICAgICAgICBQeV9UWVBFKHNvKS0+dHBfZnJlZShzbyk7CisgICAgUHlfVFlQRShzbyktPnRwX2ZyZWUoc28pOwogICAgIFB5X1RSQVNIQ0FOX1NBRkVfRU5EKHNvKQogfQogCkBAIC02MzIsOCArNjE2LDggQEAKICAgICBQeVNldE9iamVjdCAqb3RoZXI7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeV9oYXNoX3QgaGFzaDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhvdGhlcnNldCkpOwpAQCAtNzAxLDggKzY4NSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3BvcChQeVNldE9iamVjdCAqc28pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpID0gMDsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfc3NpemVfdCBpID0gMDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKmtleTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKQEAgLTczNCw3ICs3MTgsNiBAQAogICAgICAgICB9CiAgICAgfQogICAgIGtleSA9IGVudHJ5LT5rZXk7Ci0gICAgUHlfSU5DUkVGKGR1bW15KTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CiAgICAgc28tPnVzZWQtLTsKICAgICBzby0+dGFibGVbMF0uaGFzaCA9IGkgKyAxOyAgLyogbmV4dCBwbGFjZSB0byBzdGFydCAqLwpAQCAtODY5LDggKzg1Miw4IEBACiBzdGF0aWMgUHlPYmplY3QgKnNldGl0ZXJfaXRlcm5leHQoc2V0aXRlcm9iamVjdCAqc2kpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2s7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaSwgbWFzazsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlTZXRPYmplY3QgKnNvID0gc2ktPnNpX3NldDsKIAogICAgIGlmIChzbyA9PSBOVUxMKQpAQCAtMTAyNCwzMyArMTAwNywxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ha2VfbmV3X3NldChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKLSAgICByZWdpc3RlciBQeVNldE9iamVjdCAqc28gPSBOVUxMOwotCi0gICAgaWYgKGR1bW15ID09IE5VTEwpIHsgLyogQXV0by1pbml0aWFsaXplIGR1bW15ICovCi0gICAgICAgIGR1bW15ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxkdW1teSBrZXk+Iik7Ci0gICAgICAgIGlmIChkdW1teSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIFB5U2V0T2JqZWN0ICpzbyA9IE5VTEw7CiAKICAgICAvKiBjcmVhdGUgUHlTZXRPYmplY3Qgc3RydWN0dXJlICovCi0gICAgaWYgKG51bWZyZWUgJiYKLSAgICAgICAgKHR5cGUgPT0gJlB5U2V0X1R5cGUgIHx8ICB0eXBlID09ICZQeUZyb3plblNldF9UeXBlKSkgewotICAgICAgICBzbyA9IGZyZWVfbGlzdFstLW51bWZyZWVdOwotICAgICAgICBhc3NlcnQgKHNvICE9IE5VTEwgJiYgUHlBbnlTZXRfQ2hlY2tFeGFjdChzbykpOwotICAgICAgICBQeV9UWVBFKHNvKSA9IHR5cGU7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopc28pOwotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKLSAgICAgICAgUHlPYmplY3RfR0NfVHJhY2soc28pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNvID0gKFB5U2V0T2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7Ci0gICAgICAgIGlmIChzbyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIC8qIHRwX2FsbG9jIGhhcyBhbHJlYWR5IHplcm9lZCB0aGUgc3RydWN0dXJlICovCi0gICAgICAgIGFzc2VydChzby0+dGFibGUgPT0gTlVMTCAmJiBzby0+ZmlsbCA9PSAwICYmIHNvLT51c2VkID09IDApOwotICAgICAgICBJTklUX05PTlpFUk9fU0VUX1NMT1RTKHNvKTsKLSAgICB9CisgICAgc28gPSAoUHlTZXRPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAoc28gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBzby0+ZmlsbCA9IDA7CisgICAgc28tPnVzZWQgPSAwOworICAgIHNvLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7CisgICAgc28tPnRhYmxlID0gc28tPnNtYWxsdGFibGU7CiAgICAgc28tPmxvb2t1cCA9IHNldF9sb29ra2V5X3VuaWNvZGU7CisgICAgc28tPmhhc2ggPSAtMTsKICAgICBzby0+d2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgaWYgKGl0ZXJhYmxlICE9IE5VTEwpIHsKQEAgLTExMTMsMzUgKzEwODIsMTUgQEAKIGludAogUHlTZXRfQ2xlYXJGcmVlTGlzdCh2b2lkKQogewotICAgIGludCBmcmVlbGlzdF9zaXplID0gbnVtZnJlZTsKLSAgICBQeVNldE9iamVjdCAqc287Ci0KLSAgICB3aGlsZSAobnVtZnJlZSkgewotICAgICAgICBudW1mcmVlLS07Ci0gICAgICAgIHNvID0gZnJlZV9saXN0W251bWZyZWVdOwotICAgICAgICBQeU9iamVjdF9HQ19EZWwoc28pOwotICAgIH0KLSAgICByZXR1cm4gZnJlZWxpc3Rfc2l6ZTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZAogUHlTZXRfRmluaSh2b2lkKQogewotICAgIFB5U2V0X0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9DTEVBUihkdW1teSk7CiAgICAgUHlfQ0xFQVIoZW1wdHlmcm96ZW5zZXQpOwogfQogCi0vKiBQcmludCBzdW1tYXJ5IGluZm8gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBvcHRpbWl6ZWQgYWxsb2NhdG9yICovCi12b2lkCi1fUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpCi17Ci0gICAgX1B5RGVidWdBbGxvY2F0b3JTdGF0cyhvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJlZSBQeVNldE9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBudW1mcmVlLCBzaXplb2YoUHlTZXRPYmplY3QpKTsKLX0KLQotCiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKQEAgLTE5NTIsNyArMTkwMSw3IEBACiAgICAgfQogCiAgICAgaWYgKHJ2ID09IERJU0NBUkRfTk9URk9VTkQpIHsKLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjQxNCw3ICsyMzYzLDcgQEAKICAgICBQeV9zc2l6ZV90IGNvdW50OwogICAgIGNoYXIgKnM7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICplbGVtPU5VTEwsICpkdXA9TlVMTCwgKnQsICpmLCAqZHVwMiwgKng7CisgICAgUHlPYmplY3QgKmVsZW09TlVMTCwgKmR1cD1OVUxMLCAqdCwgKmYsICpkdXAyLCAqeD1OVUxMOwogICAgIFB5T2JqZWN0ICpvYiA9IChQeU9iamVjdCAqKXNvOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5T2JqZWN0ICpzdHI7CkBAIC0yNTM3LDMgKzI0ODYsNDYgQEAKICN1bmRlZiBhc3NlcnRSYWlzZXMKIAogI2VuZGlmCisKKy8qKioqKiBEdW1teSBTdHJ1Y3QgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBQeU9iamVjdCAqCitkdW1teV9yZXByKFB5T2JqZWN0ICpvcCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxkdW1teSBrZXk+Iik7Cit9CisKK3N0YXRpYyB2b2lkCitkdW1teV9kZWFsbG9jKFB5T2JqZWN0KiBpZ25vcmUpCit7CisgICAgUHlfRmF0YWxFcnJvcigiZGVhbGxvY2F0aW5nIDxkdW1teSBrZXk+Iik7Cit9CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgX1B5U2V0RHVtbXlfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICI8ZHVtbXkga2V5PiB0eXBlIiwKKyAgICAwLAorICAgIDAsCisgICAgZHVtbXlfZGVhbGxvYywgICAgICAvKnRwX2RlYWxsb2MqLyAvKm5ldmVyIGNhbGxlZCovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCovCisgICAgZHVtbXlfcmVwciwgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgLyp0cF9mbGFncyAqLworfTsKKworc3RhdGljIFB5T2JqZWN0IF9kdW1teV9zdHJ1Y3QgPSB7CisgIF9QeU9iamVjdF9FWFRSQV9JTklUCisgIDIsICZfUHlTZXREdW1teV9UeXBlCit9OworCmRpZmYgLS1naXQgYS9PYmplY3RzL3NsaWNlb2JqZWN0LmMgYi9PYmplY3RzL3NsaWNlb2JqZWN0LmMKaW5kZXggMTU5MzMzNS4uMTA0OTUyMyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zbGljZW9iamVjdC5jCisrKyBiL09iamVjdHMvc2xpY2VvYmplY3QuYwpAQCAtMzMsNiArMzMsMTcgQEAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitlbGxpcHNpc19yZWR1Y2UoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiRWxsaXBzaXMiKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGVsbGlwc2lzX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZWxsaXBzaXNfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBQeVR5cGVPYmplY3QgUHlFbGxpcHNpc19UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgImVsbGlwc2lzIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwpAQCAtNjEsNyArNzIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGVsbGlwc2lzX21ldGhvZHMsICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMjk5LDIzICszMTAsMTk4IEBACiAgICAgezB9CiB9OwogCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIHNsaWNlIGFyZ3VtZW50IHRvIGEgUHlMb25nLCBhbmQgcmFpc2UgVHlwZUVycm9yCisgICB3aXRoIGEgc3VpdGFibGUgbWVzc2FnZSBvbiBmYWlsdXJlLiAqLworCitzdGF0aWMgUHlPYmplY3QqCitldmFsdWF0ZV9zbGljZV9pbmRleChQeU9iamVjdCAqdikKK3sKKyAgICBpZiAoUHlJbmRleF9DaGVjayh2KSkgeworICAgICAgICByZXR1cm4gUHlOdW1iZXJfSW5kZXgodik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisvKiBDb21wdXRlIHNsaWNlIGluZGljZXMgZ2l2ZW4gYSBzbGljZSBhbmQgbGVuZ3RoLiAgUmV0dXJuIC0xIG9uIGZhaWx1cmUuICBVc2VkCisgICBieSBzbGljZS5pbmRpY2VzIGFuZCByYW5nZW9iamVjdCBzbGljaW5nLiAgQXNzdW1lcyB0aGF0IGBsZW5gIGlzIGEKKyAgIG5vbm5lZ2F0aXZlIGluc3RhbmNlIG9mIFB5TG9uZy4gKi8KKworaW50CitfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydF9wdHIsIFB5T2JqZWN0ICoqc3RvcF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0ZXBfcHRyKQoreworICAgIFB5T2JqZWN0ICpzdGFydD1OVUxMLCAqc3RvcD1OVUxMLCAqc3RlcD1OVUxMOworICAgIFB5T2JqZWN0ICp1cHBlcj1OVUxMLCAqbG93ZXI9TlVMTDsKKyAgICBpbnQgc3RlcF9pc19uZWdhdGl2ZSwgY21wX3Jlc3VsdDsKKworICAgIC8qIENvbnZlcnQgc3RlcCB0byBhbiBpbnRlZ2VyOyByYWlzZSBmb3IgemVybyBzdGVwLiAqLworICAgIGlmIChzZWxmLT5zdGVwID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RlcCA9IFB5TG9uZ19Gcm9tTG9uZygxTCk7CisgICAgICAgIGlmIChzdGVwID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBzdGVwX2lzX25lZ2F0aXZlID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBzdGVwX3NpZ247CisgICAgICAgIHN0ZXAgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzZWxmLT5zdGVwKTsKKyAgICAgICAgaWYgKHN0ZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHN0ZXBfc2lnbiA9IF9QeUxvbmdfU2lnbihzdGVwKTsKKyAgICAgICAgaWYgKHN0ZXBfc2lnbiA9PSAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzdGVwX2lzX25lZ2F0aXZlID0gc3RlcF9zaWduIDwgMDsKKyAgICB9CisKKyAgICAvKiBGaW5kIGxvd2VyIGFuZCB1cHBlciBib3VuZHMgZm9yIHN0YXJ0IGFuZCBzdG9wLiAqLworICAgIGlmIChzdGVwX2lzX25lZ2F0aXZlKSB7CisgICAgICAgIGxvd2VyID0gUHlMb25nX0Zyb21Mb25nKC0xTCk7CisgICAgICAgIGlmIChsb3dlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICB1cHBlciA9IFB5TnVtYmVyX0FkZChsZW5ndGgsIGxvd2VyKTsKKyAgICAgICAgaWYgKHVwcGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbG93ZXIgPSBQeUxvbmdfRnJvbUxvbmcoMEwpOworICAgICAgICBpZiAobG93ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdXBwZXIgPSBsZW5ndGg7CisgICAgICAgIFB5X0lOQ1JFRih1cHBlcik7CisgICAgfQorCisgICAgLyogQ29tcHV0ZSBzdGFydC4gKi8KKyAgICBpZiAoc2VsZi0+c3RhcnQgPT0gUHlfTm9uZSkgeworICAgICAgICBzdGFydCA9IHN0ZXBfaXNfbmVnYXRpdmUgPyB1cHBlciA6IGxvd2VyOworICAgICAgICBQeV9JTkNSRUYoc3RhcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RhcnQgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzZWxmLT5zdGFydCk7CisgICAgICAgIGlmIChzdGFydCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoX1B5TG9uZ19TaWduKHN0YXJ0KSA8IDApIHsKKyAgICAgICAgICAgIC8qIHN0YXJ0ICs9IGxlbmd0aCAqLworICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5TnVtYmVyX0FkZChzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICBzdGFydCA9IHRtcDsKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnQsIGxvd2VyLCBQeV9MVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGxvd2VyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gbG93ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0LCB1cHBlciwgUHlfR1QpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih1cHBlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IHVwcGVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogQ29tcHV0ZSBzdG9wLiAqLworICAgIGlmIChzZWxmLT5zdG9wID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RvcCA9IHN0ZXBfaXNfbmVnYXRpdmUgPyBsb3dlciA6IHVwcGVyOworICAgICAgICBQeV9JTkNSRUYoc3RvcCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdG9wID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RvcCk7CisgICAgICAgIGlmIChzdG9wID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlMb25nX1NpZ24oc3RvcCkgPCAwKSB7CisgICAgICAgICAgICAvKiBzdG9wICs9IGxlbmd0aCAqLworICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5TnVtYmVyX0FkZChzdG9wLCBsZW5ndGgpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgc3RvcCA9IHRtcDsKKyAgICAgICAgICAgIGlmIChzdG9wID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdG9wLCBsb3dlciwgUHlfTFQpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihsb3dlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgICAgIHN0b3AgPSBsb3dlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RvcCwgdXBwZXIsIFB5X0dUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgICAgICBzdG9wID0gdXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc3RhcnRfcHRyID0gc3RhcnQ7CisgICAgKnN0b3BfcHRyID0gc3RvcDsKKyAgICAqc3RlcF9wdHIgPSBzdGVwOworICAgIFB5X0RFQ1JFRih1cHBlcik7CisgICAgUHlfREVDUkVGKGxvd2VyKTsKKyAgICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgICAqc3RhcnRfcHRyID0gKnN0b3BfcHRyID0gKnN0ZXBfcHRyID0gTlVMTDsKKyAgICBQeV9YREVDUkVGKHN0YXJ0KTsKKyAgICBQeV9YREVDUkVGKHN0b3ApOworICAgIFB5X1hERUNSRUYoc3RlcCk7CisgICAgUHlfWERFQ1JFRih1cHBlcik7CisgICAgUHlfWERFQ1JFRihsb3dlcik7CisgICAgcmV0dXJuIC0xOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBzbGljZS5pbmRpY2VzLiAqLworCiBzdGF0aWMgUHlPYmplY3QqCiBzbGljZV9pbmRpY2VzKFB5U2xpY2VPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBsZW4pCiB7Ci0gICAgUHlfc3NpemVfdCBpbGVuLCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW5ndGg7CisgICAgUHlPYmplY3QgKnN0YXJ0LCAqc3RvcCwgKnN0ZXA7CisgICAgUHlPYmplY3QgKmxlbmd0aDsKKyAgICBpbnQgZXJyb3I7CiAKLSAgICBpbGVuID0gUHlOdW1iZXJfQXNTc2l6ZV90KGxlbiwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CisgICAgLyogQ29udmVydCBsZW5ndGggdG8gYW4gaW50ZWdlciBpZiBuZWNlc3Nhcnk7IHJhaXNlIGZvciBuZWdhdGl2ZSBsZW5ndGguICovCisgICAgbGVuZ3RoID0gUHlOdW1iZXJfSW5kZXgobGVuKTsKKyAgICBpZiAobGVuZ3RoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGlsZW4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgIGlmIChfUHlMb25nX1NpZ24obGVuZ3RoKSA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKTsKKyAgICAgICAgUHlfREVDUkVGKGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlPYmplY3QqKXNlbGYsIGlsZW4sICZzdGFydCwgJnN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGVwLCAmc2xpY2VsZW5ndGgpIDwgMCkgeworICAgIGVycm9yID0gX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoc2VsZiwgbGVuZ3RoLCAmc3RhcnQsICZzdG9wLCAmc3RlcCk7CisgICAgUHlfREVDUkVGKGxlbmd0aCk7CisgICAgaWYgKGVycm9yID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKG5ubikiLCBzdGFydCwgc3RvcCwgc3RlcCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5OTikiLCBzdGFydCwgc3RvcCwgc3RlcCk7CiB9CiAKIFB5RG9jX1NUUlZBUihzbGljZV9pbmRpY2VzX2RvYywKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCmluZGV4IGY2MjgxM2QuLmQwZmMxOGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcoU1RSLExFTikgICBfUHlVbmljb2RlX0Zyb21BU0NJSSgoY2hhciopKFNUUiksKExFTikpCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKaW5kZXggZjM1MzM2Ny4uMmViMmQxNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKQEAgLTM4LDggKzM4LDggQEAKICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocywgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqX3MgPSBzOwotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIFNUUklOR0xJQl9DSEFSICpfcCA9IHA7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX3MgPSBzOworICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpfcCA9IHA7CiAgICAgICAgICAgICAgICAgd2hpbGUgKF9zIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBhIHdob2xlIGxvbmcgYXQgYSB0aW1lIChlaXRoZXIgNCBvciA4IGJ5dGVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRvIGEgZmFzdCB1bnJvbGxlZCBjb3B5IGlmIGl0IG9ubHkgY29udGFpbnMgQVNDSUkKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfczsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgICAgICAgICAgICAgICAgIF9wWzBdID0gKFNUUklOR0xJQl9DSEFSKSh2YWx1ZSAmIDB4RkZ1KTsKICAgICAgICAgICAgICAgICAgICAgX3BbMV0gPSAoU1RSSU5HTElCX0NIQVIpKCh2YWx1ZSA+PiA4KSAmIDB4RkZ1KTsKICAgICAgICAgICAgICAgICAgICAgX3BbMl0gPSAoU1RSSU5HTElCX0NIQVIpKCh2YWx1ZSA+PiAxNikgJiAweEZGdSk7CkBAIC00ODYsNyArNDg2LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxID0gKmlucHRyOwogICAgIFNUUklOR0xJQl9DSEFSICpwID0gZGVzdCArICpvdXRwb3M7CiAgICAgLyogT2Zmc2V0cyBmcm9tIHEgZm9yIHJldHJpZXZpbmcgYnl0ZSBwYWlycyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgaW50IGloaSA9ICEhbmF0aXZlX29yZGVyaW5nLCBpbG8gPSAhbmF0aXZlX29yZGVyaW5nOwogI2Vsc2UKICAgICBpbnQgaWhpID0gIW5hdGl2ZV9vcmRlcmluZywgaWxvID0gISFuYXRpdmVfb3JkZXJpbmc7CkBAIC00OTksNyArNDk5LDcgQEAKICAgICAgICAgICAgcmVhZHMgYXJlIG1vcmUgZXhwZW5zaXZlLCBiZXR0ZXIgdG8gZGVmZXIgdG8gYW5vdGhlciBpdGVyYXRpb24uICovCiAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChxLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCBmb3IgcnVucyBvZiBpbi1yYW5nZSBub24tc3Vycm9nYXRlIGNoYXJzLiAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqX3EgPSBxOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX3EgPSBxOwogICAgICAgICAgICAgd2hpbGUgKF9xIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrID0gKiAodW5zaWduZWQgbG9uZyAqKSBfcTsKICAgICAgICAgICAgICAgICBpZiAobmF0aXZlX29yZGVyaW5nKSB7CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBTV0FCKGJsb2NrKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICMgaWYgU0laRU9GX0xPTkcgPT0gNAogICAgICAgICAgICAgICAgIHBbMF0gPSAoU1RSSU5HTElCX0NIQVIpKGJsb2NrICYgMHhGRkZGdSk7CiAgICAgICAgICAgICAgICAgcFsxXSA9IChTVFJJTkdMSUJfQ0hBUikoYmxvY2sgPj4gMTYpOwpAQCAtNTk2LDI2ICs1OTYsMzAgQEAKICN1bmRlZiBTV0FCCiAKIAotUHlfTE9DQUxfSU5MSU5FKHZvaWQpCi1TVFJJTkdMSUIodXRmMTZfZW5jb2RlKSh1bnNpZ25lZCBzaG9ydCAqb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKmluLAorI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA+PSAweDgwCitQeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKK1NUUklOR0xJQih1dGYxNl9lbmNvZGUpKGNvbnN0IFNUUklOR0xJQl9DSEFSICppbiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKipvdXRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmF0aXZlX29yZGVyaW5nKQogeworICAgIHVuc2lnbmVkIHNob3J0ICpvdXQgPSAqb3V0cHRyOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICplbmQgPSBpbiArIGxlbjsKICNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMQotIyBkZWZpbmUgU1dBQjIoQ0gpICAoKENIKSA8PCA4KQotI2Vsc2UKLSMgZGVmaW5lIFNXQUIyKENIKSAgKCgoQ0gpIDw8IDgpIHwgKChDSCkgPj4gOCkpCi0jZW5kaWYKLSNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPCAweDEwMDAwCiAgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgewotIyBpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMgotICAgICAgICBQeV9NRU1DUFkob3V0LCBpbiwgMiAqIGxlbik7Ci0jIGVsc2UKLSAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKFNUUklOR0xJQl9DSEFSLCB1bnNpZ25lZCBzaG9ydCwgaW4sIGVuZCwgb3V0KTsKLSMgZW5kaWYKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOworICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKKyAgICAgICAgICAgIG91dFswXSA9IGluWzBdOworICAgICAgICAgICAgb3V0WzFdID0gaW5bMV07CisgICAgICAgICAgICBvdXRbMl0gPSBpblsyXTsKKyAgICAgICAgICAgIG91dFszXSA9IGluWzNdOworICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7CisgICAgICAgICAgICAqb3V0KysgPSAqaW4rKzsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CisjIGRlZmluZSBTV0FCMihDSCkgICgoQ0gpIDw8IDgpIC8qIGhpZ2ggYnl0ZSBpcyB6ZXJvICovCiAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKICAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CiAgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihpblswXSk7CkBAIC02MjUsMzcgKzYyOSw5NSBAQAogICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7Ci0gICAgICAgICAgICAqb3V0KysgPSBTV0FCMigqaW4pOwotICAgICAgICAgICAgKytpbjsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqaW4rKzsKKyAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKICAgICAgICAgfQorI3VuZGVmIFNXQUIyCiAgICAgfQorICAgICpvdXRwdHIgPSBvdXQ7CisgICAgcmV0dXJuIGxlbjsKICNlbHNlCiAgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgeworI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA8IDB4MTAwMDAKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOworICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKKyAgICAgICAgICAgIC8qIGNoZWNrIGlmIGFueSBjaGFyYWN0ZXIgaXMgYSBzdXJyb2dhdGUgY2hhcmFjdGVyICovCisgICAgICAgICAgICBpZiAoKChpblswXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMV0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzJdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblszXSBeIDB4ZDgwMCkgJiAweGY4MDApID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBvdXRbMF0gPSBpblswXTsKKyAgICAgICAgICAgIG91dFsxXSA9IGluWzFdOworICAgICAgICAgICAgb3V0WzJdID0gaW5bMl07CisgICAgICAgICAgICBvdXRbM10gPSBpblszXTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7Ci0gICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwKQorICAgICAgICAgICAgUHlfVUNTNCBjaDsKKyAgICAgICAgICAgIGNoID0gKmluKys7CisgICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDApCiAgICAgICAgICAgICAgICAgKm91dCsrID0gY2g7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhlMDAwKQorICAgICAgICAgICAgICAgIC8qIHJlamVjdCBzdXJyb2dhdGUgY2hhcmFjdGVycyAoVStEQzgwMC1VK0RGRkYpICovCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA+PSAweDEwMDAwCisgICAgICAgICAgICBlbHNlIGlmIChjaCA+PSAweDEwMDAwKSB7CiAgICAgICAgICAgICAgICAgb3V0WzBdID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgb3V0WzFdID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBvdXQgKz0gMjsKICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpvdXQrKyA9IGNoOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyNkZWZpbmUgU1dBQjIoQ0gpICAoKChDSCkgPDwgOCkgfCAoKENIKSA+PiA4KSkKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPCAweDEwMDAwCisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKKyAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CisgICAgICAgICAgICAvKiBjaGVjayBpZiBhbnkgY2hhcmFjdGVyIGlzIGEgc3Vycm9nYXRlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgaWYgKCgoaW5bMF0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzFdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsyXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bM10gXiAweGQ4MDApICYgMHhmODAwKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgb3V0WzBdID0gU1dBQjIoaW5bMF0pOworICAgICAgICAgICAgb3V0WzFdID0gU1dBQjIoaW5bMV0pOworICAgICAgICAgICAgb3V0WzJdID0gU1dBQjIoaW5bMl0pOworICAgICAgICAgICAgb3V0WzNdID0gU1dBQjIoaW5bM10pOworICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqaW4rKzsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMDApCisgICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDApCiAgICAgICAgICAgICAgICAgKm91dCsrID0gU1dBQjIoKFB5X1VDUzIpY2gpOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZTAwMCkKKyAgICAgICAgICAgICAgICAvKiByZWplY3Qgc3Vycm9nYXRlIGNoYXJhY3RlcnMgKFUrREM4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHgxMDAwMAorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIFB5X1VDUzIgY2gxID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgUHlfVUNTMiBjaDIgPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGNoMSk7CiAgICAgICAgICAgICAgICAgb3V0WzFdID0gU1dBQjIoY2gyKTsKICAgICAgICAgICAgICAgICBvdXQgKz0gMjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICNlbmRpZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKKyAgICAgICAgfQogI3VuZGVmIFNXQUIyCisgICAgfQorICAgICpvdXRwdHIgPSBvdXQ7CisgICAgcmV0dXJuIGxlbjsKKyAgZmFpbDoKKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW4gLSAoZW5kIC0gaW4gKyAxKTsKKyNlbmRpZgogfQorI2VuZGlmCisKICNlbmRpZiAvKiBTVFJJTkdMSUJfSVNfVU5JQ09ERSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaCBiL09iamVjdHMvc3RyaW5nbGliL2VxLmgKaW5kZXggM2U1ZjUxMC4uZjhmZDM4NCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCkBAIC02LDggKzYsOCBAQAogUHlfTE9DQUxfSU5MSU5FKGludCkKIHVuaWNvZGVfZXEoUHlPYmplY3QgKmFhLCBQeU9iamVjdCAqYmIpCiB7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICphID0gKFB5VW5pY29kZU9iamVjdCAqKWFhOwotICAgIHJlZ2lzdGVyIFB5VW5pY29kZU9iamVjdCAqYiA9IChQeVVuaWNvZGVPYmplY3QgKiliYjsKKyAgICBQeVVuaWNvZGVPYmplY3QgKmEgPSAoUHlVbmljb2RlT2JqZWN0ICopYWE7CisgICAgUHlVbmljb2RlT2JqZWN0ICpiID0gKFB5VW5pY29kZU9iamVjdCAqKWJiOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhKSA9PSAtMSB8fCBQeVVuaWNvZGVfUkVBRFkoYikgPT0gLTEpIHsKICAgICAgICAgYXNzZXJ0KDAgJiYgInVuaWNvZGVfZXEgcmVhZHkgZmFpbCIpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCmluZGV4IDU1YWM3N2QuLmNkN2NhYzQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKQEAgLTE0Miw2ICsxNDIsOCBAQAogICAgIG1hc2sgPSAwOwogCiAgICAgaWYgKG1vZGUgIT0gRkFTVF9SU0VBUkNIKSB7CisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpzcyA9IHMgKyBtIC0gMTsKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnBwID0gcCArIG0gLSAxOwogCiAgICAgICAgIC8qIGNyZWF0ZSBjb21wcmVzc2VkIGJveWVyLW1vb3JlIGRlbHRhIDEgdGFibGUgKi8KIApAQCAtMTU2LDcgKzE1OCw3IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8PSB3OyBpKyspIHsKICAgICAgICAgICAgIC8qIG5vdGU6IHVzaW5nIG1sYXN0IGluIHRoZSBza2lwIHBhdGggc2xvd3MgdGhpbmdzIGRvd24gb24geDg2ICovCi0gICAgICAgICAgICBpZiAoc1tpK20tMV0gPT0gcFttLTFdKSB7CisgICAgICAgICAgICBpZiAoc3NbaV0gPT0gcHBbMF0pIHsKICAgICAgICAgICAgICAgICAvKiBjYW5kaWRhdGUgbWF0Y2ggKi8KICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbWxhc3Q7IGorKykKICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaStqXSAhPSBwW2pdKQpAQCAtMTcyLDEzICsxNzQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8qIG1pc3M6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc3NbaSsxXSkpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgc2tpcDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogc2tpcDogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCi0gICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpK21dKSkKKyAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzc1tpKzFdKSkKICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBtOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmggYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKaW5kZXggMDY1NTljOC4uZWIzZmU4OCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaApAQCAtMjQsNyArMjQsNyBAQAogICAgIHdoaWxlIChwIDwgZW5kKSB7CiAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChwLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqX3AgPSBwOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX3AgPSBwOwogICAgICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIFVDUzFfQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNjYsNyArNjYsNyBAQAogI2Vsc2UKICNlcnJvciBJbnZhbGlkIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiAobXVzdCBiZSAxLCAyIG9yIDQpCiAjZW5kaWYKLSAgICByZWdpc3RlciBQeV9VQ1M0IG1hc2s7CisgICAgUHlfVUNTNCBtYXNrOwogICAgIFB5X3NzaXplX3QgbiA9IGVuZCAtIGJlZ2luOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpwID0gYmVnaW47CiAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGJlZ2luICsgX1B5X1NJWkVfUk9VTkRfRE9XTihuLCA0KTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaCBiL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY4YjMxCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oCkBAIC0wLDAgKzEsMTMzIEBACisvKiBzdHJpbmdsaWI6IGJ5dGVzIGpvaW5pbmcgaW1wbGVtZW50YXRpb24gKi8KKworI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiAhPSAxCisjZXJyb3Igam9pbi5oIG9ubHkgY29tcGF0aWJsZSB3aXRoIGJ5dGUtd2lzZSBzdHJpbmdzCisjZW5kaWYKKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitTVFJJTkdMSUIoYnl0ZXNfam9pbikoUHlPYmplY3QgKnNlcCwgUHlPYmplY3QgKml0ZXJhYmxlKQoreworICAgIGNoYXIgKnNlcHN0ciA9IFNUUklOR0xJQl9TVFIoc2VwKTsKKyAgICBjb25zdCBQeV9zc2l6ZV90IHNlcGxlbiA9IFNUUklOR0xJQl9MRU4oc2VwKTsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyAgICBjaGFyICpwOworICAgIFB5X3NzaXplX3Qgc2VxbGVuID0gMDsKKyAgICBQeV9zc2l6ZV90IHN6ID0gMDsKKyAgICBQeV9zc2l6ZV90IGksIG5idWZzOworICAgIFB5T2JqZWN0ICpzZXEsICppdGVtOworICAgIFB5X2J1ZmZlciAqYnVmZmVycyA9IE5VTEw7CisjZGVmaW5lIE5CX1NUQVRJQ19CVUZGRVJTIDEwCisgICAgUHlfYnVmZmVyIHN0YXRpY19idWZmZXJzW05CX1NUQVRJQ19CVUZGRVJTXTsKKworICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChpdGVyYWJsZSwgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUiKTsKKyAgICBpZiAoc2VxID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKHNlcSk7CisgICAgaWYgKHNlcWxlbiA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICByZXR1cm4gU1RSSU5HTElCX05FVyhOVUxMLCAwKTsKKyAgICB9CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgaWYgKHNlcWxlbiA9PSAxKSB7CisgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCAwKTsKKyAgICAgICAgaWYgKFNUUklOR0xJQl9DSEVDS19FWEFDVChpdGVtKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICByZXR1cm4gaXRlbTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChzZXFsZW4gPiBOQl9TVEFUSUNfQlVGRkVSUykgeworICAgICAgICBidWZmZXJzID0gUHlNZW1fTkVXKFB5X2J1ZmZlciwgc2VxbGVuKTsKKyAgICAgICAgaWYgKGJ1ZmZlcnMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGJ1ZmZlcnMgPSBzdGF0aWNfYnVmZmVyczsKKyAgICB9CisKKyAgICAvKiBIZXJlIGlzIHRoZSBnZW5lcmFsIGNhc2UuICBEbyBhIHByZS1wYXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHRvdGFsCisgICAgICogYW1vdW50IG9mIHNwYWNlIHdlJ2xsIG5lZWQgKHN6KSwgYW5kIHNlZSB3aGV0aGVyIGFsbCBhcmd1bWVudHMgYXJlCisgICAgICogYnVmZmVyLWNvbXBhdGlibGUuCisgICAgICovCisgICAgZm9yIChpID0gMCwgbmJ1ZnMgPSAwOyBpIDwgc2VxbGVuOyBpKyspIHsKKyAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7CisgICAgICAgIGlmIChfZ2V0YnVmZmVyKGl0ZW0sICZidWZmZXJzW2ldKSA8IDApIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlcXVlbmNlIGl0ZW0gJXpkOiBleHBlY3RlZCBieXRlcywgYnl0ZWFycmF5LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIGFuIG9iamVjdCB3aXRoIHRoZSBidWZmZXIgaW50ZXJmYWNlLCAlLjgwcyBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaSwgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIG5idWZzID0gaSArIDE7ICAvKiBmb3IgZXJyb3IgY2xlYW51cCAqLworICAgICAgICBpdGVtbGVuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgIGlmIChpdGVtbGVuID4gUFlfU1NJWkVfVF9NQVggLSBzeikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImpvaW4oKSByZXN1bHQgaXMgdG9vIGxvbmciKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc3ogKz0gaXRlbWxlbjsKKyAgICAgICAgaWYgKGkgIT0gMCkgeworICAgICAgICAgICAgaWYgKHNlcGxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gc3opIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImpvaW4oKSByZXN1bHQgaXMgdG9vIGxvbmciKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ogKz0gc2VwbGVuOworICAgICAgICB9CisgICAgICAgIGlmIChzZXFsZW4gIT0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKHNlcSkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcXVlbmNlIGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQWxsb2NhdGUgcmVzdWx0IHNwYWNlLiAqLworICAgIHJlcyA9IFNUUklOR0xJQl9ORVcoTlVMTCwgc3opOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIC8qIENhdGVuYXRlIGV2ZXJ5dGhpbmcuICovCisgICAgcCA9IFNUUklOR0xJQl9TVFIocmVzKTsKKyAgICBpZiAoIXNlcGxlbikgeworICAgICAgICAvKiBmYXN0IHBhdGggKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5idWZzOyBpKyspIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICAgICAgY2hhciAqcSA9IGJ1ZmZlcnNbaV0uYnVmOworICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIHEsIG4pOworICAgICAgICAgICAgcCArPSBuOworICAgICAgICB9CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IG5idWZzOyBpKyspIHsKKyAgICAgICAgUHlfc3NpemVfdCBuOworICAgICAgICBjaGFyICpxOworICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIHNlcHN0ciwgc2VwbGVuKTsKKyAgICAgICAgICAgIHAgKz0gc2VwbGVuOworICAgICAgICB9CisgICAgICAgIG4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgcSA9IGJ1ZmZlcnNbaV0uYnVmOworICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7CisgICAgICAgIHAgKz0gbjsKKyAgICB9CisgICAgZ290byBkb25lOworCitlcnJvcjoKKyAgICByZXMgPSBOVUxMOworZG9uZToKKyAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyc1tpXSk7CisgICAgaWYgKGJ1ZmZlcnMgIT0gc3RhdGljX2J1ZmZlcnMpCisgICAgICAgIFB5TWVtX0ZSRUUoYnVmZmVycyk7CisgICAgcmV0dXJuIHJlczsKK30KKworI3VuZGVmIE5CX1NUQVRJQ19CVUZGRVJTCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBiL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCmluZGV4IDQwY2I1MTIuLmVkMzJhNmYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCkBAIC0yOSw2ICsyOSwxMSBAQAogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgU1RSSU5HTElCX05FVyhzdHIsIHN0cl9sZW4pKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CisKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvdXQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICNlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIChQeU9iamVjdCopIHN0cl9vYmopOwpAQCAtNzksNiArODQsMTEgQEAKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCBTVFJJTkdMSUJfTkVXKHN0ciwgc3RyX2xlbikpOworCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob3V0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAjZWxzZQogICAgICAgICBQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIChQeU9iamVjdCopIFNUUklOR0xJQl9FTVBUWSk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmggYi9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzMThlZAotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaApAQCAtMCwwICsxLDUzIEBACisvKiBzdHJpbmdsaWI6IHJlcGxhY2UgaW1wbGVtZW50YXRpb24gKi8KKworI2lmbmRlZiBTVFJJTkdMSUJfRkFTVFNFQVJDSF9ICisjZXJyb3IgbXVzdCBpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIiBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgbW9kdWxlCisjZW5kaWYKKworUHlfTE9DQUxfSU5MSU5FKHZvaWQpCitTVFJJTkdMSUIocmVwbGFjZV8xY2hhcl9pbnBsYWNlKShTVFJJTkdMSUJfQ0hBUiogcywgU1RSSU5HTElCX0NIQVIqIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdTEsIFB5X1VDUzQgdTIsIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgKnMgPSB1MjsKKyAgICB3aGlsZSAoLS1tYXhjb3VudCAmJiArK3MgIT0gZW5kKSB7CisgICAgICAgIC8qIEZpbmQgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIHJlcGxhY2VkLgorCisgICAgICAgICAgIElmIGl0IG9jY3VycyBvZnRlbiwgaXQgaXMgZmFzdGVyIHRvIHNjYW4gZm9yIGl0IHVzaW5nIGFuIGlubGluZQorICAgICAgICAgICBsb29wLiAgSWYgaXQgb2NjdXJzIHNlbGRvbSwgaXQgaXMgZmFzdGVyIHRvIHNjYW4gZm9yIGl0IHVzaW5nIGEKKyAgICAgICAgICAgZnVuY3Rpb24gY2FsbDsgdGhlIG92ZXJoZWFkIG9mIHRoZSBmdW5jdGlvbiBjYWxsIGlzIGFtb3J0aXplZAorICAgICAgICAgICBhY3Jvc3MgdGhlIG1hbnkgY2hhcmFjdGVycyB0aGF0IGNhbGwgY292ZXJzLiAgV2Ugc3RhcnQgd2l0aCBhbgorICAgICAgICAgICBpbmxpbmUgbG9vcCBhbmQgdXNlIGEgaGV1cmlzdGljIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGZhbGwgYmFjaworICAgICAgICAgICB0byBhIGZ1bmN0aW9uIGNhbGwuICovCisgICAgICAgIGlmICgqcyAhPSB1MSkgeworICAgICAgICAgICAgaW50IGF0dGVtcHRzID0gMTA7CisgICAgICAgICAgICAvKiBzZWFyY2ggdTEgaW4gYSBkdW1teSBsb29wICovCisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmICgrK3MgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCpzID09IHUxKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIS0tYXR0ZW1wdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaWYgdTEgd2FzIG5vdCBmb3VuZCBmb3IgYXR0ZW1wdHMgaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlIEZBU1RTRUFSQ0goKSBvciBtZW1jaHIoKSAqLworI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA9PSAxCisgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICAgICAgcyA9IG1lbWNocihzLCB1MSwgZW5kIC0gcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSIGNoMSA9IChTVFJJTkdMSUJfQ0hBUikgdTE7CisgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICAgICAgaSA9IEZBU1RTRUFSQ0gocywgZW5kIC0gcywgJmNoMSwgMSwgMCwgRkFTVF9TRUFSQ0gpOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHMgKz0gaTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAvKiByZXN0YXJ0IHRoZSBkdW1teSBsb29wICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAqcyA9IHUyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggYi9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCmluZGV4IDk0N2RkMjguLjMxZjc3YTcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaApAQCAtMzQ1LDggKzM0NSw4IEBACiAgICAgICAgYW5kIHRoZSBhcHBlbmRzIG9ubHkgZG9uZSB3aGVuIHRoZSBwcmVhbGxvYyBidWZmZXIgaXMgZnVsbC4KICAgICAgICBUaGF0J3MgdG9vIG11Y2ggd29yayBmb3IgbGl0dGxlIGdhaW4uKi8KIAotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgajsKICAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgUHlPYmplY3QgKnN1YjsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCmluZGV4IDdiYjkxYTcuLmNlMjdmM2UgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBfUHlCeXRlc19SZXNpemUKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5Qnl0ZXNfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5Qnl0ZXNfQ2hlY2tFeGFjdAogI2RlZmluZSBTVFJJTkdMSUJfVE9TVFIgICAgICAgICAgUHlPYmplY3RfU3RyCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaCBiL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCmluZGV4IDkwZmExMjkuLmRkMDA5NzYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCkBAIC01LDIxICs1LDIzIEBACiAgICBzaGFyZWQgY29kZSBpbiBieXRlc19tZXRob2RzLmMgdG8gY3V0IGRvd24gb24gZHVwbGljYXRlIGNvZGUgYmxvYXQuICAqLwogCiBQeURvY19TVFJWQVIoZXhwYW5kdGFic19fZG9jX18sCi0iQi5leHBhbmR0YWJzKFt0YWJzaXplXSkgLT4gY29weSBvZiBCXG5cCisiQi5leHBhbmR0YWJzKHRhYnNpemU9OCkgLT4gY29weSBvZiBCXG5cCiBcblwKIFJldHVybiBhIGNvcHkgb2YgQiB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIGV4cGFuZGVkIHVzaW5nIHNwYWNlcy5cblwKIElmIHRhYnNpemUgaXMgbm90IGdpdmVuLCBhIHRhYiBzaXplIG9mIDggY2hhcmFjdGVycyBpcyBhc3N1bWVkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QqCi1zdHJpbmdsaWJfZXhwYW5kdGFicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzdHJpbmdsaWJfZXhwYW5kdGFicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIGNvbnN0IGNoYXIgKmUsICpwOwogICAgIGNoYXIgKnE7CiAgICAgc2l6ZV90IGksIGo7CiAgICAgUHlPYmplY3QgKnU7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0YWJzaXplIiwgMH07CiAgICAgaW50IHRhYnNpemUgPSA4OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpleHBhbmR0YWJzIiwgJnRhYnNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8aTpleHBhbmR0YWJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0YWJzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBGaXJzdCBwYXNzOiBkZXRlcm1pbmUgc2l6ZSBvZiBvdXRwdXQgc3RyaW5nICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKaW5kZXggZThjNmZjYi4uY2UxZWI1NyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1MxCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaAppbmRleCA0NWU1NzI5Li5mOTAwY2I2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzIKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCmluZGV4IDY0N2EyN2UuLjg2YTQ4MGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTNAotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAppbmRleCAwMzExN2VjLi5mOWQzZjFkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKQEAgLTYsNyArNiw2IEBACiAjdW5kZWYgIFNUUklOR0xJQl9TVFIKICN1bmRlZiAgU1RSSU5HTElCX0xFTgogI3VuZGVmICBTVFJJTkdMSUJfTkVXCi0jdW5kZWYgIFNUUklOR0xJQl9SRVNJWkUKICN1bmRlZiAgX1B5X0luc2VydFRob3VzYW5kc0dyb3VwaW5nCiAjdW5kZWYgU1RSSU5HTElCX0lTX1VOSUNPREUKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaCBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKaW5kZXggZDQ3MTlhNS4uYWVjMjIxYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCkBAIC01NDMsNyArNTQzLDcgQEAKIAogc3RhdGljIGludAogcGFyc2VfZmllbGQoU3ViU3RyaW5nICpzdHIsIFN1YlN0cmluZyAqZmllbGRfbmFtZSwgU3ViU3RyaW5nICpmb3JtYXRfc3BlYywKLSAgICAgICAgICAgIFB5X1VDUzQgKmNvbnZlcnNpb24pCisgICAgICAgICAgICBpbnQgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgUHlfVUNTNCAqY29udmVyc2lvbikKIHsKICAgICAvKiBOb3RlIHRoaXMgZnVuY3Rpb24gd29ya3MgaWYgdGhlIGZpZWxkIG5hbWUgaXMgemVybyBsZW5ndGgsCiAgICAgICAgd2hpY2ggaXMgZ29vZC4gIFplcm8gbGVuZ3RoIGZpZWxkIG5hbWVzIGFyZSBoYW5kbGVkIGxhdGVyLCBpbgpAQCAtNTYxLDYgKzU2MSwxNSBAQAogICAgIGZpZWxkX25hbWUtPnN0YXJ0ID0gc3RyLT5zdGFydDsKICAgICB3aGlsZSAoc3RyLT5zdGFydCA8IHN0ci0+ZW5kKSB7CiAgICAgICAgIHN3aXRjaCAoKGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspKSkgeworICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5leHBlY3RlZCAneycgaW4gZmllbGQgbmFtZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgZm9yICg7IHN0ci0+c3RhcnQgPCBzdHItPmVuZDsgc3RyLT5zdGFydCsrKQorICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KSA9PSAnXScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgJ30nOgogICAgICAgICBjYXNlICc6JzoKICAgICAgICAgY2FzZSAnISc6CiAgICAgICAgICAgICBicmVhazsKQEAgLTU3MCw0MSArNTc5LDYyIEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQgLSAxOwogICAgIGlmIChjID09ICchJyB8fCBjID09ICc6JykgeworICAgICAgICBQeV9zc2l6ZV90IGNvdW50OwogICAgICAgICAvKiB3ZSBoYXZlIGEgZm9ybWF0IHNwZWNpZmllciBhbmQvb3IgYSBjb252ZXJzaW9uICovCiAgICAgICAgIC8qIGRvbid0IGluY2x1ZGUgdGhlIGxhc3QgY2hhcmFjdGVyICovCi0gICAgICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQtMTsKLQotICAgICAgICAvKiB0aGUgZm9ybWF0IHNwZWNpZmllciBpcyB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nICovCi0gICAgICAgIGZvcm1hdF9zcGVjLT5zdHIgPSBzdHItPnN0cjsKLSAgICAgICAgZm9ybWF0X3NwZWMtPnN0YXJ0ID0gc3RyLT5zdGFydDsKLSAgICAgICAgZm9ybWF0X3NwZWMtPmVuZCA9IHN0ci0+ZW5kOwogCiAgICAgICAgIC8qIHNlZSBpZiB0aGVyZSdzIGEgY29udmVyc2lvbiBzcGVjaWZpZXIgKi8KICAgICAgICAgaWYgKGMgPT0gJyEnKSB7CiAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGFub3RoZXIgY2hhcmFjdGVyIHByZXNlbnQgKi8KLSAgICAgICAgICAgIGlmIChmb3JtYXRfc3BlYy0+c3RhcnQgPj0gZm9ybWF0X3NwZWMtPmVuZCkgeworICAgICAgICAgICAgaWYgKHN0ci0+c3RhcnQgPj0gc3RyLT5lbmQpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZCBvZiBmb3JtYXQgd2hpbGUgbG9va2luZyBmb3IgY29udmVyc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQgb2Ygc3RyaW5nIHdoaWxlIGxvb2tpbmcgZm9yIGNvbnZlcnNpb24gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVyIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAqY29udmVyc2lvbiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoZm9ybWF0X3NwZWMtPnN0ciwgZm9ybWF0X3NwZWMtPnN0YXJ0KyspOworICAgICAgICAgICAgKmNvbnZlcnNpb24gPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspOwogCi0gICAgICAgICAgICAvKiBpZiB0aGVyZSBpcyBhbm90aGVyIGNoYXJhY3RlciwgaXQgbXVzdCBiZSBhIGNvbG9uICovCi0gICAgICAgICAgICBpZiAoZm9ybWF0X3NwZWMtPnN0YXJ0IDwgZm9ybWF0X3NwZWMtPmVuZCkgewotICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKGZvcm1hdF9zcGVjLT5zdHIsIGZvcm1hdF9zcGVjLT5zdGFydCsrKTsKKyAgICAgICAgICAgIGlmIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKKyAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnfScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIGlmIChjICE9ICc6JykgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnOicgYWZ0ZXIgZm9ybWF0IHNwZWNpZmllciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICc6JyBhZnRlciBjb252ZXJzaW9uIHNwZWNpZmllciIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZm9ybWF0X3NwZWMtPnN0ciA9IHN0ci0+c3RyOworICAgICAgICBmb3JtYXRfc3BlYy0+c3RhcnQgPSBzdHItPnN0YXJ0OworICAgICAgICBjb3VudCA9IDE7CisgICAgICAgIHdoaWxlIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspKSkgeworICAgICAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAgICAgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZyA9IDE7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ30nOgorICAgICAgICAgICAgICAgIGNvdW50LS07CisgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWMtPmVuZCA9IHN0ci0+c3RhcnQgLSAxOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bm1hdGNoZWQgJ3snIGluIGZvcm1hdCBzcGVjIik7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIC8qIGVuZCBvZiBzdHJpbmcsIHRoZXJlJ3Mgbm8gZm9ybWF0X3NwZWMgb3IgY29udmVyc2lvbiAqLwotICAgICAgICBmaWVsZF9uYW1lLT5lbmQgPSBzdHItPnN0YXJ0OworICAgIGVsc2UgaWYgKGMgIT0gJ30nKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZXhwZWN0ZWQgJ30nIGJlZm9yZSBlbmQgb2Ygc3RyaW5nIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAogICAgIHJldHVybiAxOwogfQpAQCAtNjM4LDEwICs2NjgsOSBAQAogICAgICAgICAgICAgICAgICAgICBTdWJTdHJpbmcgKmZvcm1hdF9zcGVjLCBQeV9VQ1M0ICpjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICBpbnQgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZykKIHsKLSAgICBpbnQgYXRfZW5kLCBoaXRfZm9ybWF0X3NwZWM7CisgICAgaW50IGF0X2VuZDsKICAgICBQeV9VQ1M0IGMgPSAwOwogICAgIFB5X3NzaXplX3Qgc3RhcnQ7Ci0gICAgaW50IGNvdW50OwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGludCBtYXJrdXBfZm9sbG93cyA9IDA7CiAKQEAgLTcxMyw1MiArNzQyLDEyIEBACiAgICAgaWYgKCFtYXJrdXBfZm9sbG93cykKICAgICAgICAgcmV0dXJuIDI7CiAKLSAgICAvKiB0aGlzIGlzIG1hcmt1cCwgZmluZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgYnkgY291bnRpbmcgbmVzdGVkCi0gICAgICAgYnJhY2VzLiAgbm90ZSB0aGF0IHRoaXMgcHJvaGliaXRzIGVzY2FwZWQgYnJhY2VzLCBzbyB0aGF0Ci0gICAgICAgZm9ybWF0X3NwZWNzIGNhbm5vdCBoYXZlIGJyYWNlcyBpbiB0aGVtLiAqLworICAgIC8qIHRoaXMgaXMgbWFya3VwOyBwYXJzZSB0aGUgZmllbGQgKi8KICAgICAqZmllbGRfcHJlc2VudCA9IDE7Ci0gICAgY291bnQgPSAxOwotCi0gICAgc3RhcnQgPSBzZWxmLT5zdHIuc3RhcnQ7Ci0KLSAgICAvKiB3ZSBrbm93IHdlIGNhbid0IGhhdmUgYSB6ZXJvIGxlbmd0aCBzdHJpbmcsIHNvIGRvbid0IHdvcnJ5Ci0gICAgICAgYWJvdXQgdGhhdCBjYXNlICovCi0gICAgaGl0X2Zvcm1hdF9zcGVjID0gMDsKLSAgICB3aGlsZSAoc2VsZi0+c3RyLnN0YXJ0IDwgc2VsZi0+c3RyLmVuZCkgewotICAgICAgICBzd2l0Y2ggKGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHNlbGYtPnN0ci5zdHIsIHNlbGYtPnN0ci5zdGFydCsrKSkgewotICAgICAgICBjYXNlICc6JzoKLSAgICAgICAgICAgIGlmICghaGl0X2Zvcm1hdF9zcGVjKSB7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGhpdF9mb3JtYXRfc3BlYyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAneyc6Ci0gICAgICAgICAgICAvKiB0aGUgZm9ybWF0IHNwZWMgbmVlZHMgdG8gYmUgcmVjdXJzaXZlbHkgZXhwYW5kZWQuCi0gICAgICAgICAgICAgICB0aGlzIGlzIGFuIG9wdGltaXphdGlvbiwgYW5kIG5vdCBzdHJpY3RseSBuZWVkZWQgKi8KLSAgICAgICAgICAgIGlmIChoaXRfZm9ybWF0X3NwZWMpCi0gICAgICAgICAgICAgICAgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZyA9IDE7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ30nOgotICAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgICAgIGlmIChjb3VudCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgLyogd2UncmUgZG9uZS4gIHBhcnNlIGFuZCBnZXQgb3V0ICovCi0gICAgICAgICAgICAgICAgU3ViU3RyaW5nIHM7Ci0KLSAgICAgICAgICAgICAgICBTdWJTdHJpbmdfaW5pdCgmcywgc2VsZi0+c3RyLnN0ciwgc3RhcnQsIHNlbGYtPnN0ci5zdGFydCAtIDEpOwotICAgICAgICAgICAgICAgIGlmIChwYXJzZV9maWVsZCgmcywgZmllbGRfbmFtZSwgZm9ybWF0X3NwZWMsIGNvbnZlcnNpb24pID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICAgICAgLyogc3VjY2VzcyAqLwotICAgICAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBlbmQgb2Ygc3RyaW5nIHdoaWxlIHNlYXJjaGluZyBmb3IgbWF0Y2hpbmcgJ30nICovCi0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bm1hdGNoZWQgJ3snIGluIGZvcm1hdCIpOwotICAgIHJldHVybiAwOworICAgIGlmICghcGFyc2VfZmllbGQoJnNlbGYtPnN0ciwgZmllbGRfbmFtZSwgZm9ybWF0X3NwZWMsCisgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcsIGNvbnZlcnNpb24pKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMjsKIH0KIAogCkBAIC04NzcsMjUgKzg2NiwxOSBAQAogICAgIFN1YlN0cmluZyBsaXRlcmFsOwogICAgIFN1YlN0cmluZyBmaWVsZF9uYW1lOwogICAgIFN1YlN0cmluZyBmb3JtYXRfc3BlYzsKLSAgICBQeV9VQ1M0IGNvbnZlcnNpb24sIG1heGNoYXI7Ci0gICAgUHlfc3NpemVfdCBzdWJsZW47Ci0gICAgaW50IGVycjsKKyAgICBQeV9VQ1M0IGNvbnZlcnNpb247CiAKICAgICBNYXJrdXBJdGVyYXRvcl9pbml0KCZpdGVyLCBpbnB1dC0+c3RyLCBpbnB1dC0+c3RhcnQsIGlucHV0LT5lbmQpOwogICAgIHdoaWxlICgocmVzdWx0ID0gTWFya3VwSXRlcmF0b3JfbmV4dCgmaXRlciwgJmxpdGVyYWwsICZmaWVsZF9wcmVzZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmllbGRfbmFtZSwgJmZvcm1hdF9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZykpID09IDIpIHsKLSAgICAgICAgc3VibGVuID0gbGl0ZXJhbC5lbmQgLSBsaXRlcmFsLnN0YXJ0OwotICAgICAgICBpZiAoc3VibGVuKSB7Ci0gICAgICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihsaXRlcmFsLnN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwuc3RhcnQsIGxpdGVyYWwuZW5kKTsKLSAgICAgICAgICAgIGVyciA9IF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIHN1YmxlbiwgbWF4Y2hhcik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IC0xKQorICAgICAgICBpZiAobGl0ZXJhbC5lbmQgIT0gbGl0ZXJhbC5zdGFydCkgeworICAgICAgICAgICAgaWYgKCFmaWVsZF9wcmVzZW50ICYmIGl0ZXIuc3RyLnN0YXJ0ID09IGl0ZXIuc3RyLmVuZCkKKyAgICAgICAgICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyh3cml0ZXIsIGxpdGVyYWwuc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdGFydCwgbGl0ZXJhbC5lbmQpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwuc3RyLCBsaXRlcmFsLnN0YXJ0LCBzdWJsZW4pOwotICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gc3VibGVuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpZWxkX3ByZXNlbnQpIHsKQEAgLTkyMCw3ICs5MDMsNiBAQAogICAgICAgICAgICAgIGludCByZWN1cnNpb25fZGVwdGgsIEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKQogewogICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwotICAgIFB5X3NzaXplX3QgbWlubGVuOwogCiAgICAgLyogY2hlY2sgdGhlIHJlY3Vyc2lvbiBsZXZlbCAqLwogICAgIGlmIChyZWN1cnNpb25fZGVwdGggPD0gMCkgewpAQCAtOTI5LDggKzkxMSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG1pbmxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGlucHV0LT5zdHIpICsgMTAwOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCBtaW5sZW4pOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGlucHV0LT5zdHIpICsgMTAwOwogCiAgICAgaWYgKCFkb19tYXJrdXAoaW5wdXQsIGFyZ3MsIGt3YXJncywgJndyaXRlciwgcmVjdXJzaW9uX2RlcHRoLAogICAgICAgICAgICAgICAgICAgIGF1dG9fbnVtYmVyKSkgewpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaCBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKaW5kZXggZjE2ZjIxZS4uM2RiNTYyOSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCkBAIC0yMSwxNyArMjEsMTEgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgUHlVbmljb2RlX1Jlc2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwCi0jZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9Vbmljb2RlCi0jZGVmaW5lIFNUUklOR0xJQl9UT0FTQ0lJICAgICAgICBQeU9iamVjdF9SZXByCi0jZWxzZQogI2RlZmluZSBTVFJJTkdMSUJfVE9TVFIgICAgICAgICAgUHlPYmplY3RfU3RyCiAjZGVmaW5lIFNUUklOR0xJQl9UT0FTQ0lJICAgICAgICBQeU9iamVjdF9BU0NJSQotI2VuZGlmCiAKICNkZWZpbmUgU1RSSU5HTElCX1dBTlRfQ09OVEFJTlNfT0JKIDEKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJ1Y3RzZXEuYyBiL09iamVjdHMvc3RydWN0c2VxLmMKaW5kZXggYzNiOWE3Mi4uNjY0MzQ0YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJ1Y3RzZXEuYworKysgYi9PYmplY3RzL3N0cnVjdHNlcS5jCkBAIC0xMSwxNyArMTEsMjAgQEAKIC8qIEZpZWxkcyB3aXRoIHRoaXMgbmFtZSBoYXZlIG9ubHkgYSBmaWVsZCBpbmRleCwgbm90IGEgZmllbGQgbmFtZS4KICAgIFRoZXkgYXJlIG9ubHkgYWxsb3dlZCBmb3IgaW5kaWNlcyA8IG5fdmlzaWJsZV9maWVsZHMuICovCiBjaGFyICpQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZCA9ICJ1bm5hbWVkIGZpZWxkIjsKK19QeV9JREVOVElGSUVSKG5fc2VxdWVuY2VfZmllbGRzKTsKK19QeV9JREVOVElGSUVSKG5fZmllbGRzKTsKK19QeV9JREVOVElGSUVSKG5fdW5uYW1lZF9maWVsZHMpOwogCiAjZGVmaW5lIFZJU0lCTEVfU0laRShvcCkgUHlfU0laRShvcCkKICNkZWZpbmUgVklTSUJMRV9TSVpFX1RQKHRwKSBQeUxvbmdfQXNMb25nKCBcCi0gICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoKHRwKS0+dHBfZGljdCwgdmlzaWJsZV9sZW5ndGhfa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICBfUHlEaWN0X0dldEl0ZW1JZCgodHApLT50cF9kaWN0LCAmUHlJZF9uX3NlcXVlbmNlX2ZpZWxkcykpCiAKICNkZWZpbmUgUkVBTF9TSVpFX1RQKHRwKSBQeUxvbmdfQXNMb25nKCBcCi0gICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoKHRwKS0+dHBfZGljdCwgcmVhbF9sZW5ndGhfa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICBfUHlEaWN0X0dldEl0ZW1JZCgodHApLT50cF9kaWN0LCAmUHlJZF9uX2ZpZWxkcykpCiAjZGVmaW5lIFJFQUxfU0laRShvcCkgUkVBTF9TSVpFX1RQKFB5X1RZUEUob3ApKQogCiAjZGVmaW5lIFVOTkFNRURfRklFTERTX1RQKHRwKSBQeUxvbmdfQXNMb25nKCBcCi0gICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoKHRwKS0+dHBfZGljdCwgdW5uYW1lZF9maWVsZHNfa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICBfUHlEaWN0X0dldEl0ZW1JZCgodHApLT50cF9kaWN0LCAmUHlJZF9uX3VubmFtZWRfZmllbGRzKSkKICNkZWZpbmUgVU5OQU1FRF9GSUVMRFMob3ApIFVOTkFNRURfRklFTERTX1RQKFB5X1RZUEUob3ApKQogCiAKQEAgLTU5LDcgKzYyLDcgQEAKIHN0cnVjdHNlcV9kZWFsbG9jKFB5U3RydWN0U2VxdWVuY2UgKm9iaikKIHsKICAgICBQeV9zc2l6ZV90IGksIHNpemU7Ci0gICAgCisKICAgICBzaXplID0gUkVBTF9TSVpFKG9iaik7CiAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBQeV9YREVDUkVGKG9iai0+b2JfaXRlbVtpXSk7CkBAIC0yMzAsOCArMjMzLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzdHJ1Y3RzZXFfcmVkdWNlKFB5U3RydWN0U2VxdWVuY2UqIHNlbGYpCiB7Ci0gICAgUHlPYmplY3QqIHR1cDsKLSAgICBQeU9iamVjdCogZGljdDsKKyAgICBQeU9iamVjdCogdHVwID0gTlVMTDsKKyAgICBQeU9iamVjdCogZGljdCA9IE5VTEw7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKICAgICBQeV9zc2l6ZV90IG5fZmllbGRzLCBuX3Zpc2libGVfZmllbGRzLCBuX3VubmFtZWRfZmllbGRzOwogICAgIGludCBpOwpAQCAtMjQwLDE1ICsyNDMsMTIgQEAKICAgICBuX3Zpc2libGVfZmllbGRzID0gVklTSUJMRV9TSVpFKHNlbGYpOwogICAgIG5fdW5uYW1lZF9maWVsZHMgPSBVTk5BTUVEX0ZJRUxEUyhzZWxmKTsKICAgICB0dXAgPSBQeVR1cGxlX05ldyhuX3Zpc2libGVfZmllbGRzKTsKLSAgICBpZiAoIXR1cCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCF0dXApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBkaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmICghZGljdCkgewotICAgICAgICBQeV9ERUNSRUYodHVwKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghZGljdCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBuX3Zpc2libGVfZmllbGRzOyBpKyspIHsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPm9iX2l0ZW1baV0pOwpAQCAtMjU3LDggKzI1Nyw4IEBACiAKICAgICBmb3IgKDsgaSA8IG5fZmllbGRzOyBpKyspIHsKICAgICAgICAgY2hhciAqbiA9IFB5X1RZUEUoc2VsZiktPnRwX21lbWJlcnNbaS1uX3VubmFtZWRfZmllbGRzXS5uYW1lOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5vYl9pdGVtW2ldKTsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG4sIHNlbGYtPm9iX2l0ZW1baV0pIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgiKE8oT08pKSIsIFB5X1RZUEUoc2VsZiksIHR1cCwgZGljdCk7CkBAIC0yNjcsNiArMjY3LDExIEBACiAgICAgUHlfREVDUkVGKGRpY3QpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRih0dXApOworICAgIFB5X1hERUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBzdHJ1Y3RzZXFfbWV0aG9kc1tdID0gewpAQCAtMzE1LDEyICszMjAsMTMgQEAKICAgICBzdHJ1Y3RzZXFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKIAotdm9pZAotUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKK2ludAorUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCiB7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlNZW1iZXJEZWYqIG1lbWJlcnM7CiAgICAgaW50IG5fbWVtYmVycywgbl91bm5hbWVkX21lbWJlcnMsIGksIGs7CisgICAgUHlPYmplY3QgKnY7CiAKICNpZmRlZiBQeV9UUkFDRV9SRUZTCiAgICAgLyogaWYgdGhlIHR5cGUgb2JqZWN0IHdhcyBjaGFpbmVkLCB1bmNoYWluIGl0IGZpcnN0CkBAIC0zNDIsOCArMzQ4LDEwIEBACiAgICAgdHlwZS0+dHBfZG9jID0gZGVzYy0+ZG9jOwogCiAgICAgbWVtYmVycyA9IFB5TWVtX05FVyhQeU1lbWJlckRlZiwgbl9tZW1iZXJzLW5fdW5uYW1lZF9tZW1iZXJzKzEpOwotICAgIGlmIChtZW1iZXJzID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAobWVtYmVycyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBmb3IgKGkgPSBrID0gMDsgaSA8IG5fbWVtYmVyczsgKytpKSB7CiAgICAgICAgIGlmIChkZXNjLT5maWVsZHNbaV0ubmFtZSA9PSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZCkKQEAgLTM2MSwzMCArMzY5LDU2IEBACiAgICAgdHlwZS0+dHBfbWVtYmVycyA9IG1lbWJlcnM7CiAKICAgICBpZiAoUHlUeXBlX1JlYWR5KHR5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gLTE7CiAgICAgUHlfSU5DUkVGKHR5cGUpOwogCiAgICAgZGljdCA9IHR5cGUtPnRwX2RpY3Q7CiAjZGVmaW5lIFNFVF9ESUNUX0ZST01fSU5UKGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsgICAgICAgICAgICBcCi0gICAgICAgIGlmICh2ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwga2V5LCB2KTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICh2ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGtleSwgdikgPCAwKSB7ICAgICAgICAgICBcCiAgICAgICAgICAgICBQeV9ERUNSRUYodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKICAgICBTRVRfRElDVF9GUk9NX0lOVCh2aXNpYmxlX2xlbmd0aF9rZXksIGRlc2MtPm5faW5fc2VxdWVuY2UpOwogICAgIFNFVF9ESUNUX0ZST01fSU5UKHJlYWxfbGVuZ3RoX2tleSwgbl9tZW1iZXJzKTsKICAgICBTRVRfRElDVF9GUk9NX0lOVCh1bm5hbWVkX2ZpZWxkc19rZXksIG5fdW5uYW1lZF9tZW1iZXJzKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkCitQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQoreworICAgICh2b2lkKVB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKHR5cGUsIGRlc2MpOwogfQogCiBQeVR5cGVPYmplY3QqCiBQeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUoUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQogewotICAgIFB5VHlwZU9iamVjdCAqcmVzdWx0ID0gKFB5VHlwZU9iamVjdCopUHlUeXBlX0dlbmVyaWNBbGxvYygmUHlUeXBlX1R5cGUsIDApOwotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKHJlc3VsdCwgZGVzYyk7CisgICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQ7CisKKyAgICByZXN1bHQgPSAoUHlUeXBlT2JqZWN0KilQeVR5cGVfR2VuZXJpY0FsbG9jKCZQeVR5cGVfVHlwZSwgMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIocmVzdWx0LCBkZXNjKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQorCitpbnQgX1B5U3RydWN0U2VxdWVuY2VfSW5pdCh2b2lkKQoreworICAgIGlmIChfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9uX3NlcXVlbmNlX2ZpZWxkcykgPT0gTlVMTAorICAgICAgICB8fCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9uX2ZpZWxkcykgPT0gTlVMTAorICAgICAgICB8fCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9uX3VubmFtZWRfZmllbGRzKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL09iamVjdHMvdHVwbGVvYmplY3QuYyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwppbmRleCBlYzNmOTFiLi41NjI1YTY1IDEwMDY0NAotLS0gYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCkBAIC02Myw5ICs2Myw5IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5VHVwbGVfTmV3KHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZSkKK1B5VHVwbGVfTmV3KFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpvcDsKKyAgICBQeVR1cGxlT2JqZWN0ICpvcDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMTIyLDcgKzEyMiw3IEBACiB9CiAKIFB5X3NzaXplX3QKLVB5VHVwbGVfU2l6ZShyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeVR1cGxlX1NpemUoUHlPYmplY3QgKm9wKQogewogICAgIGlmICghUHlUdXBsZV9DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xMzMsNyArMTMzLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlUdXBsZV9HZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQorUHlUdXBsZV9HZXRJdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpKQogewogICAgIGlmICghUHlUdXBsZV9DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xNDcsMTAgKzE0NywxMCBAQAogfQogCiBpbnQKLVB5VHVwbGVfU2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm5ld2l0ZW0pCitQeVR1cGxlX1NldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICpuZXdpdGVtKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvbGRpdGVtOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeU9iamVjdCAqb2xkaXRlbTsKKyAgICBQeU9iamVjdCAqKnA7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSB8fCBvcC0+b2JfcmVmY250ICE9IDEpIHsKICAgICAgICAgUHlfWERFQ1JFRihuZXdpdGVtKTsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0yMjQsMTAgKzIyNCwxMCBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotdHVwbGVkZWFsbG9jKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm9wKQordHVwbGVkZWFsbG9jKFB5VHVwbGVPYmplY3QgKm9wKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGxlbiA9ICBQeV9TSVpFKG9wKTsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBsZW4gPSAgUHlfU0laRShvcCk7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhvcCk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihvcCkKICAgICBpZiAobGVuID4gMCkgewpAQCAtMjU1LDIwICsyNTUsMTIgQEAKIHR1cGxlcmVwcihQeVR1cGxlT2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBQeU9iamVjdCAqcyA9IE5VTEw7Ci0gICAgX1B5QWNjdSBhY2M7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzZXAgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgbiA9IFB5X1NJWkUodik7CiAgICAgaWYgKG4gPT0gMCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIoKSIpOwogCi0gICAgaWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIHNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgICAgICBpZiAoc2VwID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICAvKiBXaGlsZSBub3QgbXV0YWJsZSwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gZW5kIHVwIHdpdGggYSBjeWNsZSBpbiBhCiAgICAgICAgdHVwbGUgdGhyb3VnaCBhbiBvYmplY3QgdGhhdCBzdG9yZXMgaXRzZWxmIHdpdGhpbiBhIHR1cGxlIChhbmQgdGh1cwogICAgICAgIGluZmluaXRlbHkgYXNrcyBmb3IgdGhlIHJlcHIgb2YgaXRzZWxmKS4gVGhpcyBzaG91bGQgb25seSBiZQpAQCAtMjc4LDQwICsyNzAsNTggQEAKICAgICAgICAgcmV0dXJuIGkgPiAwID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiguLi4pIikgOiBOVUxMOwogICAgIH0KIAotICAgIGlmIChfUHlBY2N1X0luaXQoJmFjYykpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIGlmIChQeV9TSVpFKHYpID4gMSkgeworICAgICAgICAvKiAiKCIgKyAiMSIgKyAiLCAyIiAqIChsZW4gLSAxKSArICIpIiAqLworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyAxICsgKDIgKyAxKSAqIChQeV9TSVpFKHYpIC0gMSkgKyAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogIigxLCkiICovCisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gNDsKKyAgICB9CiAKLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIigiKTsKLSAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJygnKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CiAKICAgICAvKiBEbyByZXByKCkgb24gZWFjaCBlbGVtZW50LiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QgKnM7CisKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsICIsIDIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKICAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGdldHRpbmcgdGhlIHJlcHIgb2YgYSB0dXBsZSIpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIodi0+b2JfaXRlbVtpXSk7CiAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBpZiAoaSA+IDAgJiYgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHNlcCkpCisgICAgICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIFB5X0NMRUFSKHMpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICB9Ci0gICAgaWYgKG4gPiAxKQotICAgICAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIikiKTsKLSAgICBlbHNlCi0gICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCkiKTsKLSAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihzKTsKKworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgIGlmIChuID4gMSkgeworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJyknKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCkiLCAyKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKil2KTsKLSAgICByZXR1cm4gX1B5QWNjdV9GaW5pc2goJmFjYyk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiBlcnJvcjoKLSAgICBfUHlBY2N1X0Rlc3Ryb3koJmFjYyk7Ci0gICAgUHlfWERFQ1JFRihzKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMzIyLDE1ICszMzIsMTggQEAKIAogICAgICAxMDgyNTI3LCAxMTY1MDQ5LCAxMDgyNTMxLCAxMTY1MDU3LCAxMjQ3NTgxLCAxMzMwMTAzLCAxMDgyNTMzLAogICAgICAxMzMwMTExLCAxNDEyNjMzLCAxMTY1MDY5LCAxMjQ3NTk5LCAxNDk1MTc3LCAxNTc3Njk5CisKKyAgIFRlc3RzIGhhdmUgc2hvd24gdGhhdCBpdCdzIG5vdCB3b3J0aCB0byBjYWNoZSB0aGUgaGFzaCB2YWx1ZSwgc2VlCisgICBpc3N1ZSAjOTY4NS4KICovCiAKIHN0YXRpYyBQeV9oYXNoX3QKIHR1cGxlaGFzaChQeVR1cGxlT2JqZWN0ICp2KQogewotICAgIHJlZ2lzdGVyIFB5X3VoYXNoX3QgeDsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLwotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCB5OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgbGVuID0gUHlfU0laRSh2KTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlfdWhhc2hfdCB4OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgUHlfaGFzaF90IHk7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeV9TSVpFKHYpOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBQeV91aGFzaF90IG11bHQgPSBfUHlIQVNIX01VTFRJUExJRVI7CiAgICAgeCA9IDB4MzQ1Njc4VUw7CiAgICAgcCA9IHYtPm9iX2l0ZW07CkBAIC0zNjcsNyArMzgwLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlaXRlbShyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICphLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCit0dXBsZWl0ZW0oUHlUdXBsZU9iamVjdCAqYSwgUHlfc3NpemVfdCBpKQogewogICAgIGlmIChpIDwgMCB8fCBpID49IFB5X1NJWkUoYSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJ0dXBsZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTM3OCwxMiArMzkxLDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi10dXBsZXNsaWNlKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaWxvdywKLSAgICAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpaGlnaCkKK3R1cGxlc2xpY2UoUHlUdXBsZU9iamVjdCAqYSwgUHlfc3NpemVfdCBpbG93LAorICAgICAgICAgICBQeV9zc2l6ZV90IGloaWdoKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm5wOworICAgIFB5VHVwbGVPYmplY3QgKm5wOwogICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpZiAoaWxvdyA8IDApCiAgICAgICAgIGlsb3cgPSAwOwpAQCAtNDIwLDEwICs0MzMsMTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlY29uY2F0KHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5T2JqZWN0ICpiYikKK3R1cGxlY29uY2F0KFB5VHVwbGVPYmplY3QgKmEsIFB5T2JqZWN0ICpiYikKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IHNpemU7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKICAgICBQeVR1cGxlT2JqZWN0ICpucDsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYmIpKSB7CkBAIC04MzMsOCArODQ2LDggQEAKIGludAogX1B5VHVwbGVfUmVzaXplKFB5T2JqZWN0ICoqcHYsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKnN2OworICAgIFB5VHVwbGVPYmplY3QgKnY7CisgICAgUHlUdXBsZU9iamVjdCAqc3Y7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3Qgb2xkc2l6ZTsKIApAQCAtOTI3LDcgKzk0MCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5VHVwbGVPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gdHVwbGVpdGVyb2JqZWN0OwogCkBAIC05ODUsNyArOTk4LDcgQEAKIHR1cGxlaXRlcl9yZWR1Y2UodHVwbGVpdGVyb2JqZWN0ICppdCkKIHsKICAgICBpZiAoaXQtPml0X3NlcSkKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTylsIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQtPml0X3NlcSwgaXQtPml0X2luZGV4KTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKCgpKSIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIikpOwpAQCAtOTk0LDcgKzEwMDcsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHR1cGxlaXRlcl9zZXRzdGF0ZSh0dXBsZWl0ZXJvYmplY3QgKml0LCBQeU9iamVjdCAqc3RhdGUpCiB7Ci0gICAgbG9uZyBpbmRleCA9IFB5TG9uZ19Bc0xvbmcoc3RhdGUpOworICAgIFB5X3NzaXplX3QgaW5kZXggPSBQeUxvbmdfQXNTc2l6ZV90KHN0YXRlKTsKICAgICBpZiAoaW5kZXggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGl0LT5pdF9zZXEgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90eXBlb2JqZWN0LmMgYi9PYmplY3RzL3R5cGVvYmplY3QuYwppbmRleCAzZGNiYzg2Li40MmEwYTU4IDEwMDY0NAotLS0gYS9PYmplY3RzL3R5cGVvYmplY3QuYworKysgYi9PYmplY3RzL3R5cGVvYmplY3QuYwpAQCAtMzksMTUgKzM5LDIxIEBACiBzdGF0aWMgc3RydWN0IG1ldGhvZF9jYWNoZV9lbnRyeSBtZXRob2RfY2FjaGVbMSA8PCBNQ0FDSEVfU0laRV9FWFBdOwogc3RhdGljIHVuc2lnbmVkIGludCBuZXh0X3ZlcnNpb25fdGFnID0gMDsKIAorLyogYWxwaGFiZXRpY2FsIG9yZGVyICovCitfUHlfSURFTlRJRklFUihfX2Fic3RyYWN0bWV0aG9kc19fKTsKIF9QeV9JREVOVElGSUVSKF9fY2xhc3NfXyk7CitfUHlfSURFTlRJRklFUihfX2RlbGl0ZW1fXyk7CiBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CiBfUHlfSURFTlRJRklFUihfX2RvY19fKTsKLV9QeV9JREVOVElGSUVSKF9fZ2V0aXRlbV9fKTsKIF9QeV9JREVOVElGSUVSKF9fZ2V0YXR0cmlidXRlX18pOworX1B5X0lERU5USUZJRVIoX19nZXRpdGVtX18pOwogX1B5X0lERU5USUZJRVIoX19oYXNoX18pOworX1B5X0lERU5USUZJRVIoX19sZW5fXyk7CiBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKIF9QeV9JREVOVElGSUVSKF9fbmV3X18pOworX1B5X0lERU5USUZJRVIoX19zZXRpdGVtX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogc2xvdF90cF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOwpAQCAtMTAxLDE2ICsxMDcsMTcgQEAKICAgICAgICBuZWVkZWQuCiAgICAgICovCiAgICAgUHlPYmplY3QgKnJhdywgKnJlZjsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX1ZBTElEX1ZFUlNJT05fVEFHKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmF3ID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAocmF3ICE9IE5VTEwpIHsKLSAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShyYXcpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0ocmF3LCBpKTsKKyAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHJhdykpOworICAgICAgICBpID0gMDsKKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHJhdywgJmksIE5VTEwsICZyZWYpKSB7CisgICAgICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICAgICAgcmVmID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgICAgIGlmIChyZWYgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5VHlwZV9Nb2RpZmllZCgoUHlUeXBlT2JqZWN0ICopcmVmKTsKQEAgLTM0MywxMSArMzUwLDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogdHlwZV9tb2R1bGUoUHlUeXBlT2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQogewotICAgIFB5T2JqZWN0ICptb2Q7CiAgICAgY2hhciAqczsKIAogICAgIGlmICh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpIHsKLSAgICAgICAgbW9kID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXyk7CisgICAgICAgIFB5T2JqZWN0ICptb2QgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fKTsKICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fbW9kdWxlX18iKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzU2LDExICszNjIsMTQgQEAKICAgICAgICAgcmV0dXJuIG1vZDsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lOwogICAgICAgICBzID0gc3RycmNocih0eXBlLT50cF9uYW1lLCAnLicpOwogICAgICAgICBpZiAocyAhPSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCAoUHlfc3NpemVfdCkocyAtIHR5cGUtPnRwX25hbWUpKTsKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJidWlsdGlucyIpOworICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfYnVpbHRpbnMpOworICAgICAgICBQeV9YSU5DUkVGKG5hbWUpOworICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiB9CiAKQEAgLTM4Miw5ICszOTEsMTEgQEAKICAgICAvKiB0eXBlIGl0c2VsZiBoYXMgYW4gX19hYnN0cmFjdG1ldGhvZHNfXyBkZXNjcmlwdG9yICh0aGlzKS4gRG9uJ3QgcmV0dXJuCiAgICAgICAgdGhhdC4gKi8KICAgICBpZiAodHlwZSAhPSAmUHlUeXBlX1R5cGUpCi0gICAgICAgIG1vZCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIG1vZCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOwogICAgIGlmICghbW9kKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKKyAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfWElOQ1JFRihtb2QpOwpAQCAtNDAzLDEzICs0MTQsMTUgQEAKICAgICAgICAgYWJzdHJhY3QgPSBQeU9iamVjdF9Jc1RydWUodmFsdWUpOwogICAgICAgICBpZiAoYWJzdHJhY3QgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIsIHZhbHVlKTsKKyAgICAgICAgcmVzID0gX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXywgdmFsdWUpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYWJzdHJhY3QgPSAwOwotICAgICAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICByZXMgPSBfUHlEaWN0X0RlbEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKICAgICAgICAgaWYgKHJlcyAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC00MzUsNiArNDQ4LDcgQEAKIHN0YXRpYyBpbnQgY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICosIGNoYXIgKik7CiBzdGF0aWMgaW50IGFkZF9zdWJjbGFzcyhQeVR5cGVPYmplY3QqLCBQeVR5cGVPYmplY3QqKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICopOworc3RhdGljIHZvaWQgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfc2xvdHMoUHlUeXBlT2JqZWN0ICopOwogCiB0eXBlZGVmIGludCAoKnVwZGF0ZV9jYWxsYmFjaykoUHlUeXBlT2JqZWN0ICosIHZvaWQgKik7CkBAIC00NDgsMTUgKzQ2MiwxNSBAQAogewogICAgIFB5VHlwZU9iamVjdCAqc3ViY2xhc3M7CiAgICAgUHlPYmplY3QgKnJlZiwgKnN1YmNsYXNzZXMsICpvbGRfbXJvOwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBzdWJjbGFzc2VzID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAoc3ViY2xhc3NlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHN1YmNsYXNzZXMpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHN1YmNsYXNzZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHN1YmNsYXNzZXMsIGkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChzdWJjbGFzc2VzKSk7CisgICAgaSA9IDA7CisKKyAgICB3aGlsZSAoUHlEaWN0X05leHQoc3ViY2xhc3NlcywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKQEAgLTU3NSwxMyArNTg5LDcgQEAKICAgICAvKiBmb3Igbm93LCBzb2QgdGhhdDoganVzdCByZW1vdmUgZnJvbSBhbGwgb2xkX2Jhc2VzLAogICAgICAgIGFkZCB0byBhbGwgbmV3X2Jhc2VzICovCiAKLSAgICBmb3IgKGkgPSBQeVR1cGxlX0dFVF9TSVpFKG9sZF9iYXNlcykgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBvYiA9IFB5VHVwbGVfR0VUX0lURU0ob2xkX2Jhc2VzLCBpKTsKLSAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhvYikpIHsKLSAgICAgICAgICAgIHJlbW92ZV9zdWJjbGFzcygKLSAgICAgICAgICAgICAgICAoUHlUeXBlT2JqZWN0KilvYiwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKHR5cGUsIG9sZF9iYXNlcyk7CiAKICAgICBmb3IgKGkgPSBQeVR1cGxlX0dFVF9TSVpFKHZhbHVlKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTSh2YWx1ZSwgaSk7CkBAIC03MTEsNyArNzE5LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKG1vZCAhPSBOVUxMICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG1vZCwgImJ1aWx0aW5zIikpCisgICAgaWYgKG1vZCAhPSBOVUxMICYmIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2QsICZQeUlkX2J1aWx0aW5zKSkKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjbGFzcyAnJVUuJVUnPiIsIG1vZCwgbmFtZSk7CiAgICAgZWxzZQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGNsYXNzICclcyc+IiwgdHlwZS0+dHBfbmFtZSk7CkBAIC03MzMsNiArNzQxLDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogdHlwZV9jYWxsKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIG9iaiA9IHR5cGUtPnRwX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICBpZiAob2JqICE9IE5VTEwpIHsKICAgICAgICAgLyogVWdseSBleGNlcHRpb246IHdoZW4gdGhlIGNhbGwgd2FzIHR5cGUoc29tZXRoaW5nKSwKQEAgLTc0NywxMCArNzYyLDEyIEBACiAgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZShQeV9UWVBFKG9iaiksIHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgdHlwZSA9IFB5X1RZUEUob2JqKTsKLSAgICAgICAgaWYgKHR5cGUtPnRwX2luaXQgIT0gTlVMTCAmJgotICAgICAgICAgICAgdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICBpZiAodHlwZS0+dHBfaW5pdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgcmVzID0gdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpOworICAgICAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBvYmo7CkBAIC05MDksNiArOTI2LDcgQEAKICAgICBQeVR5cGVPYmplY3QgKnR5cGUsICpiYXNlOwogICAgIGRlc3RydWN0b3IgYmFzZWRlYWxsb2M7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBpbnQgaGFzX2ZpbmFsaXplcjsKIAogICAgIC8qIEV4dHJhY3QgdGhlIHR5cGU7IHdlIGV4cGVjdCBpdCB0byBiZSBhIGhlYXAgdHlwZSAqLwogICAgIHR5cGUgPSBQeV9UWVBFKHNlbGYpOwpAQCAtOTI0LDYgKzk0MiwxMCBAQAogICAgICAgICAgICBjbGVhcl9zbG90cygpLCBvciBERUNSRUYgdGhlIGRpY3QsIG9yIGNsZWFyIHdlYWtyZWZzLiAqLwogCiAgICAgICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlLT50cF9kZWwpIHsKICAgICAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKICAgICAgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQpAQCAtOTc1LDI1ICs5OTcsMzYgQEAKICAgICAgICAgYXNzZXJ0KGJhc2UpOwogICAgIH0KIAotICAgIC8qIElmIHdlIGFkZGVkIGEgd2Vha2xpc3QsIHdlIGNsZWFyIGl0LiAgICAgIERvIHRoaXMgKmJlZm9yZSogY2FsbGluZwotICAgICAgIHRoZSBmaW5hbGl6ZXIgKF9fZGVsX18pLCBjbGVhcmluZyBzbG90cywgb3IgY2xlYXJpbmcgdGhlIGluc3RhbmNlCi0gICAgICAgZGljdC4gKi8KKyAgICBoYXNfZmluYWxpemVyID0gdHlwZS0+dHBfZmluYWxpemUgfHwgdHlwZS0+dHBfZGVsOwogCisgICAgLyogTWF5YmUgY2FsbCBmaW5hbGl6ZXI7IGV4aXQgZWFybHkgaWYgcmVzdXJyZWN0ZWQgKi8KKyAgICBpZiAoaGFzX2ZpbmFsaXplcikKKyAgICAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKHNlbGYpOworCisgICAgaWYgKHR5cGUtPnRwX2ZpbmFsaXplKSB7CisgICAgICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZikgPCAwKSB7CisgICAgICAgICAgICAvKiBSZXN1cnJlY3RlZCAqLworICAgICAgICAgICAgZ290byBlbmRsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBJZiB3ZSBhZGRlZCBhIHdlYWtsaXN0LCB3ZSBjbGVhciBpdC4gICAgICBEbyB0aGlzICpiZWZvcmUqIGNhbGxpbmcKKyAgICAgICB0cF9kZWwsIGNsZWFyaW5nIHNsb3RzLCBvciBjbGVhcmluZyB0aGUgaW5zdGFuY2UgZGljdC4gKi8KICAgICBpZiAodHlwZS0+dHBfd2Vha2xpc3RvZmZzZXQgJiYgIWJhc2UtPnRwX3dlYWtsaXN0b2Zmc2V0KQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKHNlbGYpOwogCi0gICAgLyogTWF5YmUgY2FsbCBmaW5hbGl6ZXI7IGV4aXQgZWFybHkgaWYgcmVzdXJyZWN0ZWQgKi8KICAgICBpZiAodHlwZS0+dHBfZGVsKSB7Ci0gICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKICAgICAgICAgdHlwZS0+dHBfZGVsKHNlbGYpOwotICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkKLSAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7ICAgICAgICAgICAgICAvKiByZXN1cnJlY3RlZCAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKKyAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApIHsKKyAgICAgICAgICAgIC8qIFJlc3VycmVjdGVkICovCisgICAgICAgICAgICBnb3RvIGVuZGxhYmVsOworICAgICAgICB9CisgICAgfQorICAgIGlmIChoYXNfZmluYWxpemVyKSB7CisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgICAgICAvKiBOZXcgd2Vha3JlZnMgY291bGQgYmUgY3JlYXRlZCBkdXJpbmcgdGhlIGZpbmFsaXplciBjYWxsLgotICAgICAgICAgICAgSWYgdGhpcyBvY2N1cnMsIGNsZWFyIHRoZW0gb3V0IHdpdGhvdXQgY2FsbGluZyB0aGVpcgotICAgICAgICAgICAgZmluYWxpemVycyBzaW5jZSB0aGV5IG1pZ2h0IHJlbHkgb24gcGFydCBvZiB0aGUgb2JqZWN0Ci0gICAgICAgICAgICBiZWluZyBmaW5hbGl6ZWQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4gKi8KKyAgICAgICAgICAgSWYgdGhpcyBvY2N1cnMsIGNsZWFyIHRoZW0gb3V0IHdpdGhvdXQgY2FsbGluZyB0aGVpcgorICAgICAgICAgICBmaW5hbGl6ZXJzIHNpbmNlIHRoZXkgbWlnaHQgcmVseSBvbiBwYXJ0IG9mIHRoZSBvYmplY3QKKyAgICAgICAgICAgYmVpbmcgZmluYWxpemVkIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICovCiAgICAgICAgIGlmICh0eXBlLT50cF93ZWFrbGlzdG9mZnNldCAmJiAhYmFzZS0+dHBfd2Vha2xpc3RvZmZzZXQpIHsKICAgICAgICAgICAgIC8qIE1vZGVsZWQgYWZ0ZXIgR0VUX1dFQUtSRUZTX0xJU1RQVFIoKSAqLwogICAgICAgICAgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdCA9IChQeVdlYWtSZWZlcmVuY2UgKiopIFwKQEAgLTE0NTMsOCArMTQ4NiwxMCBAQAogICAgICAgIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIGFjYy4KICAgICAqLwogICAgIHJlbWFpbiA9IChpbnQgKilQeU1lbV9NQUxMT0MoU0laRU9GX0lOVCp0b19tZXJnZV9zaXplKTsKLSAgICBpZiAocmVtYWluID09IE5VTEwpCisgICAgaWYgKHJlbWFpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IHRvX21lcmdlX3NpemU7IGkrKykKICAgICAgICAgcmVtYWluW2ldID0gMDsKIApAQCAtMTQ4Niw3ICsxNTIxLDcgQEAKICAgICAgICAgfQogICAgICAgICBvayA9IFB5TGlzdF9BcHBlbmQoYWNjLCBjYW5kaWRhdGUpOwogICAgICAgICBpZiAob2sgPCAwKSB7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlbWFpbik7CisgICAgICAgICAgICBQeU1lbV9GUkVFKHJlbWFpbik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRvX21lcmdlX3NpemU7IGorKykgewpAQCAtMTk0Niw3ICsxOTgxLDcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1sb25nCit1bnNpZ25lZCBsb25nCiBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIHJldHVybiB0eXBlLT50cF9mbGFnczsKQEAgLTIxMTUsNyArMjE1MCw3IEBACiAgICAgICAgICAgICBpZiAoIXZhbGlkX2lkZW50aWZpZXIodG1wKSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayh0bXApKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyh0bXAsICJfX2RpY3RfXyIpID09IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQodG1wLCAmUHlJZF9fX2RpY3RfXykgPT0gMCkgewogICAgICAgICAgICAgICAgIGlmICghbWF5X2FkZF9kaWN0IHx8IGFkZF9kaWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19kaWN0X18gc2xvdCBkaXNhbGxvd2VkOiAiCkBAIC0yMTQ2LDcgKzIxODEsNyBAQAogICAgICAgICBmb3IgKGkgPSBqID0gMDsgaSA8IG5zbG90czsgaSsrKSB7CiAgICAgICAgICAgICB0bXAgPSBQeVR1cGxlX0dFVF9JVEVNKHNsb3RzLCBpKTsKICAgICAgICAgICAgIGlmICgoYWRkX2RpY3QgJiYKLSAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX19kaWN0X18iKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQodG1wLCAmUHlJZF9fX2RpY3RfXykgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAoYWRkX3dlYWsgJiYKICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX193ZWFrcmVmX18iKSA9PSAwKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIyMTcsNyArMjI1Miw3IEBACiAKICAgICAvKiBJbml0aWFsaXplIHRwX2ZsYWdzICovCiAgICAgdHlwZS0+dHBfZmxhZ3MgPSBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hFQVBUWVBFIHwKLSAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRTsKKyAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRTsKICAgICBpZiAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpCiAgICAgICAgIHR5cGUtPnRwX2ZsYWdzIHw9IFB5X1RQRkxBR1NfSEFWRV9HQzsKIApAQCAtMjI4Nyw4ICsyMzIyLDEwIEBACiAgICAgICAgICAgICAvKiBTaWxlbnRseSB0cnVuY2F0ZSB0aGUgZG9jc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG51bGwgYnl0ZXMuICovCiAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oZG9jX3N0cik7CiAgICAgICAgICAgICB0cF9kb2MgPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweSh0cF9kb2MsIGRvY19zdHIsIGxlbiArIDEpOwogICAgICAgICAgICAgdHlwZS0+dHBfZG9jID0gdHBfZG9jOwogICAgICAgICB9CkBAIC0yNDA4LDcgKzI0NDUsNyBAQAogICAgIGNoYXIgKnM7CiAgICAgY2hhciAqcmVzX3N0YXJ0ID0gKGNoYXIqKXJlczsKICAgICBQeVR5cGVfU2xvdCAqc2xvdDsKLSAgICAKKwogICAgIC8qIFNldCB0aGUgdHlwZSBuYW1lIGFuZCBxdWFsbmFtZSAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgPT0gTlVMTCkKQEAgLTI0MjksNyArMjQ2Niw3IEBACiAgICAgdHlwZS0+dHBfbmFtZSA9IHNwZWMtPm5hbWU7CiAgICAgaWYgKCF0eXBlLT50cF9uYW1lKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgCisKICAgICAvKiBBZGp1c3QgZm9yIGVtcHR5IHR1cGxlIGJhc2VzICovCiAgICAgaWYgKCFiYXNlcykgewogICAgICAgICBiYXNlID0gJlB5QmFzZU9iamVjdF9UeXBlOwpAQCAtMjQ5MSw4ICsyNTI4LDEwIEBACiAgICAgICAgIGlmIChzbG90LT5zbG90ID09IFB5X3RwX2RvYykgewogICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzbG90LT5wZnVuYykrMTsKICAgICAgICAgICAgIGNoYXIgKnRwX2RvYyA9IFB5T2JqZWN0X01BTExPQyhsZW4pOwotICAgICAgICAgICAgaWYgKHRwX2RvYyA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKHRwX2RvYyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBzbG90LT5wZnVuYywgbGVuKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQpAQCAtMjUxMyw3ICsyNTUyLDcgQEAKICAgICAvKiBTZXQgdHlwZS5fX21vZHVsZV9fICovCiAgICAgcyA9IHN0cnJjaHIoc3BlYy0+bmFtZSwgJy4nKTsKICAgICBpZiAocyAhPSBOVUxMKQotICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fLCAKKyAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywKICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICBzcGVjLT5uYW1lLCAoUHlfc3NpemVfdCkocyAtIHNwZWMtPm5hbWUpKSk7CiAKQEAgLTI3MDIsMTAgKzI3NDEsMTQgQEAKIHR5cGVfZGVhbGxvYyhQeVR5cGVPYmplY3QgKnR5cGUpCiB7CiAgICAgUHlIZWFwVHlwZU9iamVjdCAqZXQ7CisgICAgUHlPYmplY3QgKnRwLCAqdmFsLCAqdGI7CiAKICAgICAvKiBBc3NlcnQgdGhpcyBpcyBhIGhlYXAtYWxsb2NhdGVkIHR5cGUgb2JqZWN0ICovCiAgICAgYXNzZXJ0KHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSk7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sodHlwZSk7CisgICAgUHlFcnJfRmV0Y2goJnRwLCAmdmFsLCAmdGIpOworICAgIHJlbW92ZV9hbGxfc3ViY2xhc3Nlcyh0eXBlLCB0eXBlLT50cF9iYXNlcyk7CisgICAgUHlFcnJfUmVzdG9yZSh0cCwgdmFsLCB0Yik7CiAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKil0eXBlKTsKICAgICBldCA9IChQeUhlYXBUeXBlT2JqZWN0ICopdHlwZTsKICAgICBQeV9YREVDUkVGKHR5cGUtPnRwX2Jhc2UpOwpAQCAtMjczMCw3ICsyNzczLDcgQEAKIHR5cGVfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzX2lnbm9yZWQpCiB7CiAgICAgUHlPYmplY3QgKmxpc3QsICpyYXcsICpyZWY7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChsaXN0ID09IE5VTEwpCkBAIC0yNzM4LDEwICsyNzgxLDkgQEAKICAgICByYXcgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChyYXcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhyYXcpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHJhdyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0ocmF3LCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QocmF3KSk7CisgICAgaSA9IDA7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHJhdywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHJlZiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGlmIChyZWYgIT0gUHlfTm9uZSkgewpAQCAtMjkzMCw4ICsyOTcyLDggQEAKICAgICAgICAgICAgY2xhc3MncyBkaWN0OyB0aGUgY3ljbGUgd2lsbCBiZSBicm9rZW4gdGhhdCB3YXkuCiAKICAgICAgICB0cF9zdWJjbGFzc2VzOgotICAgICAgICAgICBBIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCi0gICAgICAgICAgIGxpc3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgorICAgICAgICAgICBBIGRpY3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCisgICAgICAgICAgIGRpY3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgogCiAgICAgICAgc2xvdHMgKGluIFB5SGVhcFR5cGVPYmplY3QpOgogICAgICAgICAgICBBIHR1cGxlIG9mIHN0cmluZ3MgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlLgpAQCAtMzE0OCw3ICszMTkwLDcgQEAKICAgICAgICAgUHlfWERFQ1JFRihtb2QpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKG1vZCAhPSBOVUxMICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG1vZCwgImJ1aWx0aW5zIikpCisgICAgaWYgKG1vZCAhPSBOVUxMICYmIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2QsICZQeUlkX2J1aWx0aW5zKSkKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlVS4lVSBvYmplY3QgYXQgJXA+IiwgbW9kLCBuYW1lLCBzZWxmKTsKICAgICBlbHNlCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0IGF0ICVwPiIsCkBAIC0zMzIwLDcgKzMzNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIl9fY2xhc3NfXyBhc3NpZ25tZW50OiBvbmx5IGZvciBoZWFwIHR5cGVzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaWYgKGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQobmV3dG8sIG9sZHRvLCAiX19jbGFzc19fIikpIHsKKyAgICBpZiAoY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChvbGR0bywgbmV3dG8sICJfX2NsYXNzX18iKSkgewogICAgICAgICBQeV9JTkNSRUYobmV3dG8pOwogICAgICAgICBQeV9UWVBFKHNlbGYpID0gbmV3dG87CiAgICAgICAgIFB5X0RFQ1JFRihvbGR0byk7CkBAIC0zMzYzLDE1MCArMzQwNSw0MjkgQEAKICAgICByZXR1cm4gY2FjaGVkX2NvcHlyZWdfbW9kdWxlOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotc2xvdG5hbWVzKFB5T2JqZWN0ICpjbHMpCitQeV9MT0NBTChQeU9iamVjdCAqKQorX1B5VHlwZV9HZXRTbG90TmFtZXMoUHlUeXBlT2JqZWN0ICpjbHMpCiB7Ci0gICAgUHlPYmplY3QgKmNsc2RpY3Q7CiAgICAgUHlPYmplY3QgKmNvcHlyZWc7CiAgICAgUHlPYmplY3QgKnNsb3RuYW1lczsKICAgICBfUHlfSURFTlRJRklFUihfX3Nsb3RuYW1lc19fKTsKICAgICBfUHlfSURFTlRJRklFUihfc2xvdG5hbWVzKTsKIAotICAgIGNsc2RpY3QgPSAoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX2RpY3Q7Ci0gICAgc2xvdG5hbWVzID0gX1B5RGljdF9HZXRJdGVtSWQoY2xzZGljdCwgJlB5SWRfX19zbG90bmFtZXNfXyk7Ci0gICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMICYmIFB5TGlzdF9DaGVjayhzbG90bmFtZXMpKSB7CisgICAgYXNzZXJ0KFB5VHlwZV9DaGVjayhjbHMpKTsKKworICAgIC8qIEdldCB0aGUgc2xvdCBuYW1lcyBmcm9tIHRoZSBjYWNoZSBpbiB0aGUgY2xhc3MgaWYgcG9zc2libGUuICovCisgICAgc2xvdG5hbWVzID0gX1B5RGljdF9HZXRJdGVtSWRXaXRoRXJyb3IoY2xzLT50cF9kaWN0LCAmUHlJZF9fX3Nsb3RuYW1lc19fKTsKKyAgICBpZiAoc2xvdG5hbWVzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzLl9fc2xvdG5hbWVzX18gc2hvdWxkIGJlIGEgbGlzdCBvciBOb25lLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNscy0+dHBfbmFtZSwgUHlfVFlQRShzbG90bmFtZXMpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0lOQ1JFRihzbG90bmFtZXMpOwogICAgICAgICByZXR1cm4gc2xvdG5hbWVzOwogICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qIFRoZSBjbGFzcyBkb2VzIG5vdCBoYXZlIHRoZSBzbG90IG5hbWVzIGNhY2hlZCB5ZXQuICovCisgICAgfQogCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CiAgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzbG90bmFtZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGNvcHlyZWcsICZQeUlkX19zbG90bmFtZXMsICJPIiwgY2xzKTsKKyAgICAvKiBVc2UgX3Nsb3RuYW1lcyBmdW5jdGlvbiBmcm9tIHRoZSBjb3B5cmVnIG1vZHVsZSB0byBmaW5kIHRoZSBzbG90cworICAgICAgIGJ5IHRoaXMgY2xhc3MgYW5kIGl0cyBiYXNlcy4gVGhpcyBmdW5jdGlvbiB3aWxsIGNhY2hlIHRoZSByZXN1bHQKKyAgICAgICBpbiBfX3Nsb3RuYW1lc19fLiAqLworICAgIHNsb3RuYW1lcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGNvcHlyZWcsICZQeUlkX19zbG90bmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLCBOVUxMKTsKICAgICBQeV9ERUNSRUYoY29weXJlZyk7Ci0gICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMICYmCi0gICAgICAgIHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmCi0gICAgICAgICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkKLSAgICB7CisgICAgaWYgKHNsb3RuYW1lcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiAhUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJjb3B5cmVnLl9zbG90bmFtZXMgZGlkbid0IHJldHVybiBhIGxpc3Qgb3IgTm9uZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNvcHlyZWcuX3Nsb3RuYW1lcyBkaWRuJ3QgcmV0dXJuIGEgbGlzdCBvciBOb25lIik7CiAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOwotICAgICAgICBzbG90bmFtZXMgPSBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gc2xvdG5hbWVzOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotcmVkdWNlXzIoUHlPYmplY3QgKm9iaikKK1B5X0xPQ0FMKFB5T2JqZWN0ICopCitfUHlPYmplY3RfR2V0U3RhdGUoUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeU9iamVjdCAqY2xzLCAqZ2V0bmV3YXJnczsKLSAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICphcmdzMiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmdldHN0YXRlID0gTlVMTCwgKnN0YXRlID0gTlVMTCwgKm5hbWVzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqc2xvdHMgPSBOVUxMLCAqbGlzdGl0ZW1zID0gTlVMTCwgKmRpY3RpdGVtcyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMLCAqbmV3b2JqID0gTlVMTCwgKnJlcyA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBpLCBuOwotICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19fKTsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisgICAgUHlPYmplY3QgKmdldHN0YXRlOwogICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0c3RhdGVfXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7Ci0KLSAgICBjbHMgPSAoUHlPYmplY3QgKikgUHlfVFlQRShvYmopOwotCi0gICAgZ2V0bmV3YXJncyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2dldG5ld2FyZ3NfXyk7Ci0gICAgaWYgKGdldG5ld2FyZ3MgIT0gTlVMTCkgewotICAgICAgICBhcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzLCBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3MpOwotICAgICAgICBpZiAoYXJncyAhPSBOVUxMICYmICFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUsICIKLSAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShhcmdzKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOwotICAgIH0KLSAgICBpZiAoYXJncyA9PSBOVUxMKQotICAgICAgICBnb3RvIGVuZDsKIAogICAgIGdldHN0YXRlID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fZ2V0c3RhdGVfXyk7Ci0gICAgaWYgKGdldHN0YXRlICE9IE5VTEwpIHsKKyAgICBpZiAoZ2V0c3RhdGUgPT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqc2xvdG5hbWVzOworCisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUHlPYmplY3QgKipkaWN0OworICAgICAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7CisgICAgICAgICAgICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBvYmplY3QncyBkaWN0IGlzIG5vdCBpbml0aWFsaXplZCAKKyAgICAgICAgICAgICAgIHlldC4gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIHJldHVybiBOb25lIGZvciB0aGUgc3RhdGUuCisgICAgICAgICAgICAgICBXZSBhbHNvIHJldHVybiBOb25lIGlmIHRoZSBkaWN0IGlzIGVtcHR5IHRvIG1ha2UgdGhlIGJlaGF2aW9yCisgICAgICAgICAgICAgICBjb25zaXN0ZW50IHJlZ2FyZGxlc3Mgd2hldGhlciB0aGUgZGljdCB3YXMgaW5pdGlhbGl6ZWQgb3Igbm90LgorICAgICAgICAgICAgICAgVGhpcyBtYWtlIHVuaXQgdGVzdGluZyBlYXNpZXIuICovCisgICAgICAgICAgICBpZiAoZGljdCAhPSBOVUxMICYmICpkaWN0ICE9IE5VTEwgJiYgUHlEaWN0X1NpemUoKmRpY3QpID4gMCkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gKmRpY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFB5X05vbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9JTkNSRUYoc3RhdGUpOworICAgICAgICB9CisKKyAgICAgICAgc2xvdG5hbWVzID0gX1B5VHlwZV9HZXRTbG90TmFtZXMoUHlfVFlQRShvYmopKTsKKyAgICAgICAgaWYgKHNsb3RuYW1lcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQoc2xvdG5hbWVzID09IFB5X05vbmUgfHwgUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpOworICAgICAgICBpZiAoc2xvdG5hbWVzICE9IFB5X05vbmUgJiYgUHlfU0laRShzbG90bmFtZXMpID4gMCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnNsb3RzOworICAgICAgICAgICAgUHlfc3NpemVfdCBzbG90bmFtZXNfc2l6ZSwgaTsKKworICAgICAgICAgICAgc2xvdHMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICBpZiAoc2xvdHMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNsb3RuYW1lc19zaXplID0gUHlfU0laRShzbG90bmFtZXMpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNsb3RuYW1lc19zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlOworCisgICAgICAgICAgICAgICAgbmFtZSA9IFB5TGlzdF9HRVRfSVRFTShzbG90bmFtZXMsIGkpOworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogSXQgaXMgbm90IGFuIGVycm9yIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQuICovCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oc2xvdHMsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFRoZSBsaXN0IGlzIHN0b3JlZCBvbiB0aGUgY2xhc3Mgc28gaXQgbWF5IG11dGF0ZXMgd2hpbGUgd2UKKyAgICAgICAgICAgICAgICAgICBpdGVyYXRlIG92ZXIgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoc2xvdG5hbWVzX3NpemUgIT0gUHlfU0laRShzbG90bmFtZXMpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zbG90c25hbWVfXyBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFdlIGhhbmRsZSBlcnJvcnMgd2l0aGluIHRoZSBsb29wIGhlcmUuICovCisgICAgICAgICAgICAgICAgaWYgKDApIHsKKyAgICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJZiB3ZSBmb3VuZCBzb21lIHNsb3QgYXR0cmlidXRlcywgcGFjayB0aGVtIGluIGEgdHVwbGUgYWxvbmcKKyAgICAgICAgICAgICAgIHRoZSBvcmdpbmFsIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LiAqLworICAgICAgICAgICAgaWYgKFB5RGljdF9TaXplKHNsb3RzKSA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUyOworCisgICAgICAgICAgICAgICAgc3RhdGUyID0gUHlUdXBsZV9QYWNrKDIsIHN0YXRlLCBzbG90cyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgfQorICAgIGVsc2UgeyAvKiBnZXRzdGF0ZSAhPSBOVUxMICovCiAgICAgICAgIHN0YXRlID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRzdGF0ZSwgTlVMTCk7CiAgICAgICAgIFB5X0RFQ1JFRihnZXRzdGF0ZSk7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICoqZGljdDsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7Ci0gICAgICAgIGlmIChkaWN0ICYmICpkaWN0KQotICAgICAgICAgICAgc3RhdGUgPSAqZGljdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoc3RhdGUpOwotICAgICAgICBuYW1lcyA9IHNsb3RuYW1lcyhjbHMpOwotICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICBpZiAobmFtZXMgIT0gUHlfTm9uZSAmJiBQeUxpc3RfR0VUX1NJWkUobmFtZXMpID4gMCkgewotICAgICAgICAgICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhuYW1lcykpOwotICAgICAgICAgICAgc2xvdHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgICAgICBpZiAoc2xvdHMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgLyogQ2FuJ3QgcHJlLWNvbXB1dGUgdGhlIGxpc3Qgc2l6ZTsgdGhlIGxpc3QKLSAgICAgICAgICAgICAgIGlzIHN0b3JlZCBvbiB0aGUgY2xhc3Mgc28gYWNjZXNzaWJsZSB0byBvdGhlcgotICAgICAgICAgICAgICAgdGhyZWFkcywgd2hpY2ggbWF5IGJlIHJ1biBieSBERUNSRUYgKi8KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeUxpc3RfR0VUX1NJWkUobmFtZXMpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlOwotICAgICAgICAgICAgICAgIG5hbWUgPSBQeUxpc3RfR0VUX0lURU0obmFtZXMsIGkpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oc2xvdHMsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBQeV9CdWlsZFZhbHVlKCIoTk8pIiwgc3RhdGUsIHNsb3RzKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICB9CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1B5X0xPQ0FMKGludCkKK19QeU9iamVjdF9HZXROZXdBcmd1bWVudHMoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKiphcmdzLCBQeU9iamVjdCAqKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqZ2V0bmV3YXJncywgKmdldG5ld2FyZ3NfZXg7CisgICAgX1B5X0lERU5USUZJRVIoX19nZXRuZXdhcmdzX2V4X18pOworICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19fKTsKKworICAgIGlmIChhcmdzID09IE5VTEwgfHwga3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBXZSBmaXJzdCBhdHRlbXB0IHRvIGZldGNoIHRoZSBhcmd1bWVudHMgZm9yIF9fbmV3X18gYnkgY2FsbGluZworICAgICAgIF9fZ2V0bmV3YXJnc19leF9fIG9uIHRoZSBvYmplY3QuICovCisgICAgZ2V0bmV3YXJnc19leCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2dldG5ld2FyZ3NfZXhfXyk7CisgICAgaWYgKGdldG5ld2FyZ3NfZXggIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqbmV3YXJncyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0bmV3YXJnc19leCwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihnZXRuZXdhcmdzX2V4KTsKKyAgICAgICAgaWYgKG5ld2FyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhuZXdhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gc2hvdWxkIHJldHVybiBhIHR1cGxlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUobmV3YXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChQeV9TSVpFKG5ld2FyZ3MpICE9IDIpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUgb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggMiwgbm90ICV6ZCIsIFB5X1NJWkUobmV3YXJncykpOworICAgICAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICphcmdzID0gUHlUdXBsZV9HRVRfSVRFTShuZXdhcmdzLCAwKTsKKyAgICAgICAgUHlfSU5DUkVGKCphcmdzKTsKKyAgICAgICAgKmt3YXJncyA9IFB5VHVwbGVfR0VUX0lURU0obmV3YXJncywgMSk7CisgICAgICAgIFB5X0lOQ1JFRigqa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworCisgICAgICAgIC8qIFhYWCBXZSBzaG91bGQgcGVyaGFwcyBhbGxvdyBOb25lIHRvIGJlIHBhc3NlZCBoZXJlLiAqLworICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soKmFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBpdGVtIG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIG11c3QgYmUgYSB0dXBsZSwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKCphcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqYXJncyk7CisgICAgICAgICAgICBQeV9DTEVBUigqa3dhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVB5RGljdF9DaGVjaygqa3dhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIGl0ZW0gb2YgdGhlIHR1cGxlIHJldHVybmVkIGJ5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gbXVzdCBiZSBhIGRpY3QsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSgqa3dhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqYXJncyk7CisgICAgICAgICAgICBQeV9DTEVBUigqa3dhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisKKyAgICAvKiBUaGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgX19nZXRuZXdhcmdzX2V4X18gc28gd2UgZmFsbGJhY2sgb24gdXNpbmcKKyAgICAgICBfX2dldG5ld2FyZ3NfXyBpbnN0ZWFkLiAqLworICAgIGdldG5ld2FyZ3MgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19nZXRuZXdhcmdzX18pOworICAgIGlmIChnZXRuZXdhcmdzICE9IE5VTEwpIHsKKyAgICAgICAgKmFyZ3MgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldG5ld2FyZ3MsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZ2V0bmV3YXJncyk7CisgICAgICAgIGlmICgqYXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKCphcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX18gc2hvdWxkIHJldHVybiBhIHR1cGxlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUoKmFyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCphcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqa3dhcmdzID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorCisgICAgLyogVGhlIG9iamVjdCBkb2VzIG5vdCBoYXZlIF9fZ2V0bmV3YXJnc19leF9fIGFuZCBfX2dldG5ld2FyZ3NfXy4gVGhpcyBtYXkKKyAgICAgICBtZWFucyBfX25ld19fIGRvZXMgbm90IHRha2VzIGFueSBhcmd1bWVudHMgb24gdGhpcyBvYmplY3QsIG9yIHRoYXQgdGhlCisgICAgICAgb2JqZWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgcmVkdWNlIHByb3RvY29sIGZvciBwaWNrbGluZyBvcgorICAgICAgIGNvcHlpbmcuICovCisgICAgKmFyZ3MgPSBOVUxMOworICAgICprd2FyZ3MgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCitQeV9MT0NBTChpbnQpCitfUHlPYmplY3RfR2V0SXRlbXNJdGVyKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICoqbGlzdGl0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKmRpY3RpdGVtcykKK3sKKyAgICBpZiAobGlzdGl0ZW1zID09IE5VTEwgfHwgZGljdGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoIVB5TGlzdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIGxpc3RpdGVtcyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihsaXN0aXRlbXMpOworICAgICAgICAqbGlzdGl0ZW1zID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKCpsaXN0aXRlbXMpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbGlzdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihvYmopOwotICAgICAgICBpZiAobGlzdGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgKmxpc3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIob2JqKTsKKyAgICAgICAgaWYgKCpsaXN0aXRlbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoIVB5RGljdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIGRpY3RpdGVtcyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkaWN0aXRlbXMpOworICAgICAgICAqZGljdGl0ZW1zID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKCpkaWN0aXRlbXMpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOwogICAgICAgICBfUHlfSURFTlRJRklFUihpdGVtcyk7Ci0gICAgICAgIFB5T2JqZWN0ICppdGVtcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQob2JqLCAmUHlJZF9pdGVtcywgIiIpOwotICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICBkaWN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZW1zKTsKKworICAgICAgICBpdGVtcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKG9iaiwgJlB5SWRfaXRlbXMsIE5VTEwpOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKmxpc3RpdGVtcyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmRpY3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlbXMpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOwotICAgICAgICBpZiAoZGljdGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgaWYgKCpkaWN0aXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKmxpc3RpdGVtcyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBhc3NlcnQoKmxpc3RpdGVtcyAhPSBOVUxMICYmICpkaWN0aXRlbXMgIT0gTlVMTCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JlZHVjZV80KFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqa3dhcmdzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29weXJlZzsKKyAgICBQeU9iamVjdCAqbmV3b2JqLCAqbmV3YXJncywgKnN0YXRlLCAqbGlzdGl0ZW1zLCAqZGljdGl0ZW1zOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7CisKKyAgICBpZiAoX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhvYmosICZhcmdzLCAma3dhcmdzKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICBpZiAoYXJncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChrd2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBrd2FyZ3MgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChrd2FyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOworICAgIGlmIChjb3B5cmVnID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5ld29iaiA9IF9QeU9iamVjdF9HZXRBdHRySWQoY29weXJlZywgJlB5SWRfX19uZXdvYmpfZXhfXyk7CisgICAgUHlfREVDUkVGKGNvcHlyZWcpOworICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3YXJncyA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9iaiksIGFyZ3MsIGt3YXJncyk7CisgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgIGlmIChuZXdhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzdGF0ZSA9IF9QeU9iamVjdF9HZXRTdGF0ZShvYmopOworICAgIGlmIChzdGF0ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0dldEl0ZW1zSXRlcihvYmosICZsaXN0aXRlbXMsICZkaWN0aXRlbXMpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeVR1cGxlX1BhY2soNSwgbmV3b2JqLCBuZXdhcmdzLCBzdGF0ZSwgbGlzdGl0ZW1zLCBkaWN0aXRlbXMpOworICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgIFB5X0RFQ1JFRihsaXN0aXRlbXMpOworICAgIFB5X0RFQ1JFRihkaWN0aXRlbXMpOworICAgIHJldHVybiByZXN1bHQ7ICAgIAorfQorCitzdGF0aWMgUHlPYmplY3QgKgorcmVkdWNlXzIoUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqY2xzOworICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKmFyZ3MyID0gTlVMTCwgKmt3YXJncyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0YXRlID0gTlVMTCwgKmxpc3RpdGVtcyA9IE5VTEwsICpkaWN0aXRlbXMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTCwgKm5ld29iaiA9IE5VTEwsICpyZXMgPSBOVUxMOworICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKKworICAgIGlmIChfUHlPYmplY3RfR2V0TmV3QXJndW1lbnRzKG9iaiwgJmFyZ3MsICZrd2FyZ3MpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICBhc3NlcnQoa3dhcmdzID09IE5VTEwpOworICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGt3YXJncyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChQeURpY3RfU2l6ZShrd2FyZ3MpID4gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IHVzZSBwcm90b2NvbCA0IG9yIGdyZWF0ZXIgdG8gY29weSB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0OyBzaW5jZSBfX2dldG5ld2FyZ3NfZXhfXyByZXR1cm5lZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmQgYXJndW1lbnRzLiIpOworICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihrd2FyZ3MpOworICAgIH0KKworICAgIHN0YXRlID0gX1B5T2JqZWN0X0dldFN0YXRlKG9iaik7CisgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKF9QeU9iamVjdF9HZXRJdGVtc0l0ZXIob2JqLCAmbGlzdGl0ZW1zLCAmZGljdGl0ZW1zKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CiAgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkKICAgICAgICAgZ290byBlbmQ7CkBAIC0zNTE4LDYgKzM4MzksNyBAQAogICAgIGFyZ3MyID0gUHlUdXBsZV9OZXcobisxKTsKICAgICBpZiAoYXJnczIgPT0gTlVMTCkKICAgICAgICAgZ290byBlbmQ7CisgICAgY2xzID0gKFB5T2JqZWN0ICopIFB5X1RZUEUob2JqKTsKICAgICBQeV9JTkNSRUYoY2xzKTsKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MyLCAwLCBjbHMpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTM1MzEsOSArMzg1Myw3IEBACiAgIGVuZDoKICAgICBQeV9YREVDUkVGKGFyZ3MpOwogICAgIFB5X1hERUNSRUYoYXJnczIpOwotICAgIFB5X1hERUNSRUYoc2xvdHMpOwogICAgIFB5X1hERUNSRUYoc3RhdGUpOwotICAgIFB5X1hERUNSRUYobmFtZXMpOwogICAgIFB5X1hERUNSRUYobGlzdGl0ZW1zKTsKICAgICBQeV9YREVDUkVGKGRpY3RpdGVtcyk7CiAgICAgUHlfWERFQ1JFRihjb3B5cmVnKTsKQEAgLTM1NjEsNyArMzg4MSw5IEBACiB7CiAgICAgUHlPYmplY3QgKmNvcHlyZWcsICpyZXM7CiAKLSAgICBpZiAocHJvdG8gPj0gMikKKyAgICBpZiAocHJvdG8gPj0gNCkKKyAgICAgICAgcmV0dXJuIHJlZHVjZV80KHNlbGYpOworICAgIGVsc2UgaWYgKHByb3RvID49IDIpCiAgICAgICAgIHJldHVybiByZWR1Y2VfMihzZWxmKTsKIAogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwpAQCAtMzY2NiwxNiArMzk4OCw5IEBACiAgICAgICAgIC8qIElzc3VlIDc5OTQ6IElmIHdlJ3JlIGNvbnZlcnRpbmcgdG8gYSBzdHJpbmcsIHdlCiAgICAgICAgICAgIHNob3VsZCByZWplY3QgZm9ybWF0IHNwZWNpZmljYXRpb25zICovCiAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChmb3JtYXRfc3BlYykgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKSB7Ci0gICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIEV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvcjoKLSAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgIm5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIHBhc3NlZCB0byBvYmplY3QuX19mb3JtYXRfXyIpOwotICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0Zvcm1hdChzZWxmX2FzX3N0ciwgZm9ybWF0X3NwZWMpOwpAQCAtMzgzMCw3ICs0MTQ1LDcgQEAKICAgICAgICAgICAgIGRlc2NyID0gUHlEZXNjcl9OZXdDbGFzc01ldGhvZCh0eXBlLCBtZXRoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChtZXRoLT5tbF9mbGFncyAmIE1FVEhfU1RBVElDKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY2Z1bmMgPSBQeUNGdW5jdGlvbl9OZXcobWV0aCwgKFB5T2JqZWN0Kil0eXBlKTsKKyAgICAgICAgICBQeU9iamVjdCAqY2Z1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeChtZXRoLCAoUHlPYmplY3QqKXR5cGUsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGNmdW5jID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgZGVzY3IgPSBQeVN0YXRpY01ldGhvZF9OZXcoY2Z1bmMpOwpAQCAtNDEwMCw2ICs0NDE1LDEwIEBACiAgICAgICAgIENPUFlTTE9UKHRwX2luaXQpOwogICAgICAgICBDT1BZU0xPVCh0cF9hbGxvYyk7CiAgICAgICAgIENPUFlTTE9UKHRwX2lzX2djKTsKKyAgICAgICAgaWYgKCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYKKyAgICAgICAgICAgIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkpIHsKKyAgICAgICAgICAgIENPUFlTTE9UKHRwX2ZpbmFsaXplKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKSA9PQogICAgICAgICAgICAgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKSkgewogICAgICAgICAgICAgLyogVGhleSBhZ3JlZSBhYm91dCBnYy4gKi8KQEAgLTQyNTIsMTEgKzQ1NzEsMTUgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpkb2MgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0eXBlLT50cF9kb2MpOwogICAgICAgICAgICAgaWYgKGRvYyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2RvY19fLCBkb2MpOworICAgICAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18sIGRvYykgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRvYyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihkb2MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19fZG9jX18sIFB5X05vbmUpOworICAgICAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX19kb2NfXywgUHlfTm9uZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzMDAsMTMgKzQ2MjMsMTEgQEAKICAgICAvKiBXYXJuIGZvciBhIHR5cGUgdGhhdCBpbXBsZW1lbnRzIHRwX2NvbXBhcmUgKG5vdyBrbm93biBhcwogICAgICAgIHRwX3Jlc2VydmVkKSBidXQgbm90IHRwX3JpY2hjb21wYXJlLiAqLwogICAgIGlmICh0eXBlLT50cF9yZXNlcnZlZCAmJiAhdHlwZS0+dHBfcmljaGNvbXBhcmUpIHsKLSAgICAgICAgaW50IGVycm9yOwotICAgICAgICBlcnJvciA9IFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRlZmluZXMgdHBfcmVzZXJ2ZWQgKGZvcm1lcmx5IHRwX2NvbXBhcmUpICIKICAgICAgICAgICAgICJidXQgbm90IHRwX3JpY2hjb21wYXJlLiBDb21wYXJpc29ucyBtYXkgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZC4iLAogICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgIGlmIChlcnJvciA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgLyogQWxsIGRvbmUgLS0gc2V0IHRoZSByZWFkeSBmbGFnICovCkBAIC00MzIzLDQ5ICs0NjQ0LDU3IEBACiBzdGF0aWMgaW50CiBhZGRfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICpiYXNlLCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIGludCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpyZWYsICpuZXdvYmo7CisgICAgaW50IHJlc3VsdCA9IC0xOworICAgIFB5T2JqZWN0ICpkaWN0LCAqa2V5LCAqbmV3b2JqOwogCi0gICAgbGlzdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBiYXNlLT50cF9zdWJjbGFzc2VzID0gbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgZGljdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICBiYXNlLT50cF9zdWJjbGFzc2VzID0gZGljdCA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhsaXN0KSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KGRpY3QpKTsKKyAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQgKikgdHlwZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgbmV3b2JqID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKil0eXBlLCBOVUxMKTsKLSAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIGlmIChQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpID09IFB5X05vbmUpCi0gICAgICAgICAgICByZXR1cm4gUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgbmV3b2JqKTsKKyAgICBpZiAobmV3b2JqICE9IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCBuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMaXN0X0FwcGVuZChsaXN0LCBuZXdvYmopOwotICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgIFB5X0RFQ1JFRihrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkCiByZW1vdmVfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICpiYXNlLCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqcmVmOworICAgIFB5T2JqZWN0ICpkaWN0LCAqa2V5OwogCi0gICAgbGlzdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgIGRpY3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGxpc3QpKTsKLSAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIGlmIChQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpID09IChQeU9iamVjdCopdHlwZSkgewotICAgICAgICAgICAgLyogdGhpcyBjYW4ndCBmYWlsLCByaWdodD8gKi8KLSAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsSXRlbShsaXN0LCBpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QoZGljdCkpOworICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKSB0eXBlKTsKKyAgICBpZiAoa2V5ID09IE5VTEwgfHwgUHlEaWN0X0RlbEl0ZW0oZGljdCwga2V5KSkgeworICAgICAgICAvKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHR5cGUgaW5pdGlhbGl6YXRpb24gZXJyb3JlZCBvdXQgYmVmb3JlCisgICAgICAgICAgIHRoZSBiYXNlIHN1YmNsYXNzZXMgd2VyZSB1cGRhdGVkIChlLmcuIGEgbm9uLXN0ciBfX3F1YWxuYW1lX18KKyAgICAgICAgICAgd2FzIHBhc3NlZCBpbiB0aGUgdHlwZSBkaWN0KS4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihrZXkpOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKQoreworICAgIGlmIChiYXNlcykgeworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKGJhc2VzKTsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOworICAgICAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhiYXNlKSkKKyAgICAgICAgICAgICAgICByZW1vdmVfc3ViY2xhc3MoKFB5VHlwZU9iamVjdCopIGJhc2UsIHR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDcyMiw2ICs1MDUxLDE4IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCit3cmFwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQpCit7CisgICAgZGVzdHJ1Y3RvciBmdW5jID0gKGRlc3RydWN0b3Ipd3JhcHBlZDsKKworICAgIGlmICghY2hlY2tfbnVtX2FyZ3MoYXJncywgMCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgKCpmdW5jKShzZWxmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBfcmljaGNtcGZ1bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCB2b2lkICp3cmFwcGVkLCBpbnQgb3ApCiB7CiAgICAgcmljaGNtcGZ1bmMgZnVuYyA9IChyaWNoY21wZnVuYyl3cmFwcGVkOwpAQCAtNDkwMCw3ICs1MjQxLDcgQEAKIAogICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX25ld19fKSAhPSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KHRwX25ld19tZXRob2RkZWYsIChQeU9iamVjdCAqKXR5cGUpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeCh0cF9uZXdfbWV0aG9kZGVmLCAoUHlPYmplY3QgKil0eXBlLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbmV3X18sIGZ1bmMpKSB7CkBAIC01MDEyLDcgKzUzNTMsNiBAQAogc3RhdGljIFB5X3NzaXplX3QKIHNsb3Rfc3FfbGVuZ3RoKFB5T2JqZWN0ICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKF9fbGVuX18pOwogICAgIFB5T2JqZWN0ICpyZXMgPSBjYWxsX21ldGhvZChzZWxmLCAmUHlJZF9fX2xlbl9fLCAiKCkiKTsKICAgICBQeV9zc2l6ZV90IGxlbjsKIApAQCAtNTA3Myw4ICs1NDEzLDYgQEAKIHNsb3Rfc3FfYXNzX2l0ZW0oUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGVsaXRlbV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX3NldGl0ZW1fXyk7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgcmVzID0gY2FsbF9tZXRob2Qoc2VsZiwgJlB5SWRfX19kZWxpdGVtX18sICIobikiLCBpbmRleCk7CkBAIC01MTI0LDggKzU0NjIsNiBAQAogc2xvdF9tcF9hc3Nfc3Vic2NyaXB0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihfX2RlbGl0ZW1fXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19zZXRpdGVtX18pOwogCiAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgIHJlcyA9IGNhbGxfbWV0aG9kKHNlbGYsICZQeUlkX19fZGVsaXRlbV9fLCAiKE8pIiwga2V5KTsKQEAgLTUxNzYsNyArNTUxMiw2IEBACiAgICAgUHlPYmplY3QgKmZ1bmMsICphcmdzOwogICAgIGludCByZXN1bHQgPSAtMTsKICAgICBpbnQgdXNpbmdfbGVuID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihfX2xlbl9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX2Jvb2xfXyk7CiAKICAgICBmdW5jID0gbG9va3VwX21heWJlKHNlbGYsICZQeUlkX19fYm9vbF9fKTsKQEAgLTUyNzgsMjggKzU2MTMsMTEgQEAKICAgICBfUHlfSURFTlRJRklFUihfX3N0cl9fKTsKIAogICAgIGZ1bmMgPSBsb29rdXBfbWV0aG9kKHNlbGYsICZQeUlkX19fc3RyX18pOwotICAgIGlmIChmdW5jICE9IE5VTEwpIHsKLSAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFB5T2JqZWN0ICpyZXNzOyAqLwotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICByZXMgPSBzbG90X3RwX3JlcHIoc2VsZik7Ci0gICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIC8qIFhYWCB0aGlzIGlzIG5vbi1zZW5zaWNhbC4gV2h5IHNob3VsZCB3ZSByZXR1cm4KLSAgICAgICAgICAgYSBieXRlcyBvYmplY3QgZnJvbSBfX3N0cl9fLiBJcyB0aGlzIGNvZGUgZXZlbgotICAgICAgICAgICB1c2VkPyAtIG12bCAqLwotICAgICAgICBhc3NlcnQoMCk7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIC8qCi0gICAgICAgIHJlc3MgPSBfUHlVbmljb2RlX0FzRGVmYXVsdEVuY29kZWRTdHJpbmcocmVzKTsKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgIHJldHVybiByZXNzOwotICAgICAgICAqLwotICAgIH0KKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5X2hhc2hfdApAQCAtNTU5NSw3ICs1OTEzLDYgQEAKICAgICBQeU9iamVjdCAqZnVuYzsKICAgICBQeU9iamVjdCAqbmV3YXJncywgKng7CiAgICAgUHlfc3NpemVfdCBpLCBuOwotICAgIF9QeV9JREVOVElGSUVSKF9fbmV3X18pOwogCiAgICAgZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopdHlwZSwgJlB5SWRfX19uZXdfXyk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKQEAgLTU2MTksMTYgKzU5MzYsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNsb3RfdHBfZGVsKFB5T2JqZWN0ICpzZWxmKQorc2xvdF90cF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKIHsKICAgICBfUHlfSURFTlRJRklFUihfX2RlbF9fKTsKICAgICBQeU9iamVjdCAqZGVsLCAqcmVzOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAKLSAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOwotICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7Ci0KICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLwogICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwogCkBAIC01NjQ1LDM3ICs1OTU4LDYgQEAKIAogICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwotCi0gICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAotICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCi0gICAgICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOwotICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQotICAgICAgICByZXR1cm47ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCi0KLSAgICAvKiBfX2RlbF9fIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgotICAgICAqIG5ldmVyIGhhcHBlbmVkLgotICAgICAqLwotICAgIHsKLSAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKLSAgICB9Ci0gICAgYXNzZXJ0KCFQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgfHwKLSAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7Ci0gICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7Ci0jZW5kaWYKIH0KIAogCkBAIC01Nzg0LDcgKzYwNjYsNyBAQAogICAgICAgICAgICAic2VlIGhlbHAodHlwZSh4KSkgZm9yIHNpZ25hdHVyZSIsCiAgICAgICAgICAgIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAogICAgIFRQU0xPVCgiX19uZXdfXyIsIHRwX25ldywgc2xvdF90cF9uZXcsIE5VTEwsICIiKSwKLSAgICBUUFNMT1QoIl9fZGVsX18iLCB0cF9kZWwsIHNsb3RfdHBfZGVsLCBOVUxMLCAiIiksCisgICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZmluYWxpemUsIHNsb3RfdHBfZmluYWxpemUsICh3cmFwcGVyZnVuYyl3cmFwX2RlbCwgIiIpLAogCiAgICAgQklOU0xPVCgiX19hZGRfXyIsIG5iX2FkZCwgc2xvdF9uYl9hZGQsCiAgICAgICAgICIrIiksCkBAIC02MTgxLDE1ICs2NDYzLDE0IEBACiB7CiAgICAgUHlUeXBlT2JqZWN0ICpzdWJjbGFzczsKICAgICBQeU9iamVjdCAqcmVmLCAqc3ViY2xhc3NlcywgKmRpY3Q7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIHN1YmNsYXNzZXMgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChzdWJjbGFzc2VzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2soc3ViY2xhc3NlcykpOwotICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoc3ViY2xhc3Nlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0oc3ViY2xhc3NlcywgaSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHN1YmNsYXNzZXMpKTsKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoUHlEaWN0X05leHQoc3ViY2xhc3NlcywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKQEAgLTYzMzUsOCArNjYxNiw4IEBACiAgICAgICAgIC8qIFdlIHdhbnQgX19jbGFzc19fIHRvIHJldHVybiB0aGUgY2xhc3Mgb2YgdGhlIHN1cGVyIG9iamVjdAogICAgICAgICAgICAoaS5lLiBzdXBlciwgb3IgYSBzdWJjbGFzcyksIG5vdCB0aGUgY2xhc3Mgb2Ygc3UtPm9iai4gKi8KICAgICAgICAgc2tpcCA9IChQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID09IDkgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSA9PSAwKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSA9PSA5ICYmCisgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG5hbWUsICZQeUlkX19fY2xhc3NfXykgPT0gMCk7CiAgICAgfQogCiAgICAgaWYgKCFza2lwKSB7CkBAIC02NTQyLDggKzY4MjMsNyBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oY28tPmNvX2ZyZWV2YXJzLCBpKTsKICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sobmFtZSkpOwotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19jbGFzc19fIikpIHsKKyAgICAgICAgICAgIGlmICghX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG5hbWUsICZQeUlkX19fY2xhc3NfXykpIHsKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4ID0gY28tPmNvX25sb2NhbHMgKwogICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykgKyBpOwogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZi0+Zl9sb2NhbHNwbHVzW2luZGV4XTsKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCmluZGV4IGE1NzJjMTIuLmVhNTQwZDYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMKKysrIGIvT2JqZWN0cy91bmljb2RlY3R5cGUuYwpAQCAtNjEsNyArNjEsNyBAQAogLyogUmV0dXJucyB0aGUgdGl0bGVjYXNlIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZXNwb25kaW5nIHRvIGNoIG9yIGp1c3QKICAgIGNoIGlmIG5vIHRpdGxlY2FzZSBtYXBwaW5nIGlzIGtub3duLiAqLwogCi1QeV9VQ1M0IF9QeVVuaWNvZGVfVG9UaXRsZWNhc2UocmVnaXN0ZXIgUHlfVUNTNCBjaCkKK1B5X1VDUzQgX1B5VW5pY29kZV9Ub1RpdGxlY2FzZShQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwppbmRleCBhMTQ5MTc3Li4zNGQ1MWU0IDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYworKysgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwpAQCAtNDcsMTMgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKLS8qIEVuZGlhbm5lc3Mgc3dpdGNoZXM7IGRlZmF1bHRzIHRvIGxpdHRsZSBlbmRpYW4gKi8KLQotI2lmZGVmIFdPUkRTX0JJR0VORElBTgotIyBkZWZpbmUgQllURU9SREVSX0lTX0JJR19FTkRJQU4KLSNlbHNlCi0jIGRlZmluZSBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotI2VuZGlmCisvKltjbGluaWNdCitjbGFzcyBzdHIKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLwogCiAvKiAtLS0gR2xvYmFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTMwLDE2ICsxMjcsMTQgQEAKIC8qIHRydWUgaWYgdGhlIFVuaWNvZGUgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgVVRGLTggbWVtb3J5IGJsb2NrCiAgICAobm90IHNoYXJlZCB3aXRoIG90aGVyIGRhdGEpICovCiAjZGVmaW5lIF9QeVVuaWNvZGVfSEFTX1VURjhfTUVNT1JZKG9wKSAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob3ApKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoIVB5VW5pY29kZV9JU19DT01QQUNUX0FTQ0lJKG9wKSAgICAgICAgICAgICAgICAgICBcCisgICAgKCghUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob3ApICAgICAgICAgICAgICAgICAgIFwKICAgICAgICYmIF9QeVVuaWNvZGVfVVRGOChvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgJiYgX1B5VW5pY29kZV9VVEY4KG9wKSAhPSBQeVVuaWNvZGVfREFUQShvcCkpKQogCiAvKiB0cnVlIGlmIHRoZSBVbmljb2RlIG9iamVjdCBoYXMgYW4gYWxsb2NhdGVkIHdzdHIgbWVtb3J5IGJsb2NrCiAgICAobm90IHNoYXJlZCB3aXRoIG90aGVyIGRhdGEpICovCiAjZGVmaW5lIF9QeVVuaWNvZGVfSEFTX1dTVFJfTUVNT1JZKG9wKSAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob3ApKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoX1B5VW5pY29kZV9XU1RSKG9wKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChfUHlVbmljb2RlX1dTVFIob3ApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICghUHlVbmljb2RlX0lTX1JFQURZKG9wKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIF9QeVVuaWNvZGVfV1NUUihvcCkgIT0gUHlVbmljb2RlX0RBVEEob3ApKSkpCiAKQEAgLTE1MCw5ICsxNDUsOSBAQAogICAgYnVmZmVyIHdoZXJlIHRoZSByZXN1bHQgY2hhcmFjdGVycyBhcmUgd3JpdHRlbiB0by4gKi8KICNkZWZpbmUgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKGZyb21fdHlwZSwgdG9fdHlwZSwgYmVnaW4sIGVuZCwgdG8pIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0b190eXBlICpfdG8gPSAodG9fdHlwZSAqKSB0bzsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2l0ZXIgPSAoYmVnaW4pOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgZnJvbV90eXBlICpfZW5kID0gKGVuZCk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0b190eXBlICpfdG8gPSAodG9fdHlwZSAqKSh0byk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29uc3QgZnJvbV90eXBlICpfaXRlciA9IChmcm9tX3R5cGUgKikoYmVnaW4pOyAgXAorICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9lbmQgPSAoZnJvbV90eXBlICopKGVuZCk7ICAgICBcCiAgICAgICAgIFB5X3NzaXplX3QgbiA9IChfZW5kKSAtIChfaXRlcik7ICAgICAgICAgICAgICAgIFwKICAgICAgICAgY29uc3QgZnJvbV90eXBlICpfdW5yb2xsZWRfZW5kID0gICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgX2l0ZXIgKyBfUHlfU0laRV9ST1VORF9ET1dOKG4sIDQpOyAgICAgICAgICBcCkBAIC0xOTksNiArMTk0LDEwIEBACiAgICAgICAgIHJldHVybiB1bmljb2RlX2VtcHR5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitQeV9MT0NBTF9JTkxJTkUoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9VQ1M0IGNoKTsKKwogLyogTGlzdCBvZiBzdGF0aWMgc3RyaW5ncy4gKi8KIHN0YXRpYyBfUHlfSWRlbnRpZmllciAqc3RhdGljX3N0cmluZ3MgPSBOVUxMOwogCkBAIC00MjcsOCArNDI2LDYgQEAKICNpZm5kZWYgUHlfREVCVUcKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGFzc2VydChQeV9SRUZDTlQodW5pY29kZSkgPT0gMSk7Ci0KICAgICBsZW4gPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKHVuaWNvZGUpOwogICAgIGlmIChsZW4gPT0gMCkgewogICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CkBAIC00NDUsMTAgKzQ0MiwxMiBAQAogICAgIH0KIAogICAgIGlmIChfUHlVbmljb2RlX1JlYWR5KHVuaWNvZGUpIDwgMCkgewotICAgICAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbHNlCisgICAgYXNzZXJ0KFB5X1JFRkNOVCh1bmljb2RlKSA9PSAxKTsKKwogICAgIC8qIGRvbid0IG1ha2UgdGhlIHJlc3VsdCByZWFkeSBpbiBkZWJ1ZyBtb2RlIHRvIGVuc3VyZSB0aGF0IHRoZSBjYWxsZXIKICAgICAgICBtYWtlcyB0aGUgc3RyaW5nIHJlYWR5IGJlZm9yZSB1c2luZyBpdCAqLwogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodW5pY29kZSwgMSkpOwpAQCAtNDcxLDcgKzQ3MCw5IEBACiAgICAgfQogCiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHVuaWNvZGUsIDApOworICAgICAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCAwKTsKICAgICAgICAgaWYgKGNoIDwgMjU2KSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbGF0aW4xX2NoYXIgPSB1bmljb2RlX2xhdGluMVtjaF07CiAgICAgICAgICAgICBpZiAobGF0aW4xX2NoYXIgIT0gTlVMTCkgewpAQCAtNTQ0LDcgKzU0NSw2IEBACiAKIHN0YXRpYyBCTE9PTV9NQVNLIGJsb29tX2xpbmVicmVhayA9IH4oQkxPT01fTUFTSykwOwogCi0jZGVmaW5lIEJMT09NX0FERChtYXNrLCBjaCkgKChtYXNrIHw9ICgxVUwgPDwgKChjaCkgJiAoQkxPT01fV0lEVEggLSAxKSkpKSkKICNkZWZpbmUgQkxPT00obWFzaywgY2gpICAgICAoKG1hc2sgJiAgKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogCiAjZGVmaW5lIEJMT09NX0xJTkVCUkVBSyhjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01NTQsMjEgKzU1NCw0MCBAQAogUHlfTE9DQUxfSU5MSU5FKEJMT09NX01BU0spCiBtYWtlX2Jsb29tX21hc2soaW50IGtpbmQsIHZvaWQqIHB0ciwgUHlfc3NpemVfdCBsZW4pCiB7CisjZGVmaW5lIEJMT09NX1VQREFURShUWVBFLCBNQVNLLCBQVFIsIExFTikgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVFlQRSAqZGF0YSA9IChUWVBFICopUFRSOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRZUEUgKmVuZCA9IGRhdGEgKyBMRU47ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9VQ1M0IGNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yICg7IGRhdGEgIT0gZW5kOyBkYXRhKyspIHsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjaCA9ICpkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUFTSyB8PSAoMVVMIDw8IChjaCAmIChCTE9PTV9XSURUSCAtIDEpKSk7IFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKICAgICAvKiBjYWxjdWxhdGUgc2ltcGxlIGJsb29tLXN0eWxlIGJpdG1hc2sgZm9yIGEgZ2l2ZW4gdW5pY29kZSBzdHJpbmcgKi8KIAogICAgIEJMT09NX01BU0sgbWFzazsKLSAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBtYXNrID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIEJMT09NX0FERChtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBwdHIsIGkpKTsKLQorICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgIEJMT09NX1VQREFURShQeV9VQ1MxLCBtYXNrLCBwdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgIEJMT09NX1VQREFURShQeV9VQ1MyLCBtYXNrLCBwdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgIEJMT09NX1VQREFURShQeV9VQ1M0LCBtYXNrLCBwdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CiAgICAgcmV0dXJuIG1hc2s7Ci19CiAKLSNkZWZpbmUgQkxPT01fTUVNQkVSKG1hc2ssIGNociwgc3RyKSBcCi0gICAgKEJMT09NKG1hc2ssIGNocikgXAotICAgICAmJiAoUHlVbmljb2RlX0ZpbmRDaGFyKHN0ciwgY2hyLCAwLCBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpLCAxKSA+PSAwKSkKKyN1bmRlZiBCTE9PTV9VUERBVEUKK30KIAogLyogQ29tcGlsYXRpb24gb2YgdGVtcGxhdGVkIHJvdXRpbmVzICovCiAKQEAgLTU4OCw2ICs2MDcsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC01OTgsNiArNjE4LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNjA4LDYgKzYyOSw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTY1NCw2ICs2NzYsMjUgQEAKICAgICB9CiB9CiAKKyNpZmRlZiBQeV9ERUJVRworLyogRmlsbCB0aGUgZGF0YSBvZiBhbiBVbmljb2RlIHN0cmluZyB3aXRoIGludmFsaWQgY2hhcmFjdGVycyB0byBkZXRlY3QgYnVncworICAgZWFybGllci4KKworICAgX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkgZGV0ZWN0cyBpbnZhbGlkIGNoYXJhY3RlcnMsIGF0IGxlYXN0IGZvcgorICAgQVNDSUkgYW5kIFVDUy00IHN0cmluZ3MuIFUrMDBGRiBpcyBpbnZhbGlkIGluIEFTQ0lJIGFuZCBVK0ZGRkZGRkZGIGlzIGFuCisgICBpbnZhbGlkIGNoYXJhY3RlciBpbiBVbmljb2RlIDYuMC4gKi8KK3N0YXRpYyB2b2lkCit1bmljb2RlX2ZpbGxfaW52YWxpZChQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBvbGRfbGVuZ3RoKQoreworICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgUHlfVUNTMSAqZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpOworICAgIFB5X3NzaXplX3QgbGVuZ3RoID0gX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSk7CisgICAgaWYgKGxlbmd0aCA8PSBvbGRfbGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgbWVtc2V0KGRhdGEgKyBvbGRfbGVuZ3RoICoga2luZCwgMHhmZiwgKGxlbmd0aCAtIG9sZF9sZW5ndGgpICoga2luZCk7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0KgogcmVzaXplX2NvbXBhY3QoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgbGVuZ3RoKQogewpAQCAtNjYyLDYgKzcwMywxMCBAQAogICAgIFB5X3NzaXplX3QgbmV3X3NpemU7CiAgICAgaW50IHNoYXJlX3dzdHI7CiAgICAgUHlPYmplY3QgKm5ld191bmljb2RlOworI2lmZGVmIFB5X0RFQlVHCisgICAgUHlfc3NpemVfdCBvbGRfbGVuZ3RoID0gX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSk7CisjZW5kaWYKKwogICAgIGFzc2VydCh1bmljb2RlX21vZGlmaWFibGUodW5pY29kZSkpOwogICAgIGFzc2VydChQeVVuaWNvZGVfSVNfUkVBRFkodW5pY29kZSkpOwogICAgIGFzc2VydChQeVVuaWNvZGVfSVNfQ09NUEFDVCh1bmljb2RlKSk7CkBAIC03MDEsNiArNzQ2LDkgQEAKICAgICAgICAgUHlPYmplY3RfREVMKF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSk7CiAgICAgICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9IE5VTEw7CiAgICAgfQorI2lmZGVmIFB5X0RFQlVHCisgICAgdW5pY29kZV9maWxsX2ludmFsaWQodW5pY29kZSwgb2xkX2xlbmd0aCk7CisjZW5kaWYKICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQodW5pY29kZSksIFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpLAogICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIDApOwogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodW5pY29kZSwgMCkpOwpAQCAtNzE5LDYgKzc2Nyw5IEBACiAgICAgICAgIFB5X3NzaXplX3QgY2hhcl9zaXplOwogICAgICAgICBpbnQgc2hhcmVfd3N0ciwgc2hhcmVfdXRmODsKICAgICAgICAgdm9pZCAqZGF0YTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyNlbmRpZgogCiAgICAgICAgIGRhdGEgPSBfUHlVbmljb2RlX0RBVEFfQU5ZKHVuaWNvZGUpOwogICAgICAgICBjaGFyX3NpemUgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKQEAgLTc1NCw2ICs4MDUsOSBAQAogICAgICAgICB9CiAgICAgICAgIF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID0gbGVuZ3RoOwogICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQodW5pY29kZSksIGRhdGEsIGxlbmd0aCwgMCk7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgdW5pY29kZV9maWxsX2ludmFsaWQodW5pY29kZSwgb2xkX2xlbmd0aCk7CisjZW5kaWYKICAgICAgICAgaWYgKHNoYXJlX3dzdHIgfHwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpID09IE5VTEwpIHsKICAgICAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodW5pY29kZSwgMCkpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC04MDYsOCArODYwLDggQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBjb3B5X2xlbmd0aCA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSk7CiAgICAgICAgIGNvcHlfbGVuZ3RoID0gUHlfTUlOKGNvcHlfbGVuZ3RoLCBsZW5ndGgpOwotICAgICAgICBQeV9VTklDT0RFX0NPUFkoX1B5VW5pY29kZV9XU1RSKHcpLCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3B5X2xlbmd0aCk7CisgICAgICAgIFB5X01FTUNQWShfUHlVbmljb2RlX1dTVFIodyksIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSwKKyAgICAgICAgICAgICAgICAgIGNvcHlfbGVuZ3RoICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgcmV0dXJuIHc7CiAgICAgfQogfQpAQCAtODI0LDcgKzg3OCw3IEBACiBzdGF0aWMgUHlVbmljb2RlT2JqZWN0ICoKIF9QeVVuaWNvZGVfTmV3KFB5X3NzaXplX3QgbGVuZ3RoKQogewotICAgIHJlZ2lzdGVyIFB5VW5pY29kZU9iamVjdCAqdW5pY29kZTsKKyAgICBQeVVuaWNvZGVPYmplY3QgKnVuaWNvZGU7CiAgICAgc2l6ZV90IG5ld19zaXplOwogCiAgICAgLyogT3B0aW1pemF0aW9uIGZvciBlbXB0eSBzdHJpbmdzICovCkBAIC04NDcsNiArOTAxLDE5IEBACiAgICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmV3X3NpemUgPSBzaXplb2YoUHlfVU5JQ09ERSkgKiAoKHNpemVfdClsZW5ndGggKyAxKTsKKworICAgIF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7CisgICAgX1B5VW5pY29kZV9IQVNIKHVuaWNvZGUpID0gLTE7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5pbnRlcm5lZCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5raW5kID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmNvbXBhY3QgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkucmVhZHkgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuYXNjaWkgPSAwOworICAgIF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSkgPSBOVUxMOworICAgIF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID0gMDsKKyAgICBfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPSBOVUxMOworICAgIF9QeVVuaWNvZGVfVVRGOF9MRU5HVEgodW5pY29kZSkgPSAwOworCiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpID0gKFB5X1VOSUNPREUqKSBQeU9iamVjdF9NQUxMT0MobmV3X3NpemUpOwogICAgIGlmICghX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpKSB7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKQEAgLTg2MywxNyArOTMwLDcgQEAKICAgICAgKi8KICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSlbMF0gPSAwOwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKVtsZW5ndGhdID0gMDsKLSAgICBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKHVuaWNvZGUpID0gbGVuZ3RoOwotICAgIF9QeVVuaWNvZGVfSEFTSCh1bmljb2RlKSA9IC0xOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuaW50ZXJuZWQgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkua2luZCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5jb21wYWN0ID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLnJlYWR5ID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmFzY2lpID0gMDsKLSAgICBfUHlVbmljb2RlX0RBVEFfQU5ZKHVuaWNvZGUpID0gTlVMTDsKLSAgICBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKSA9IDA7Ci0gICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gTlVMTDsKLSAgICBfUHlVbmljb2RlX1VURjhfTEVOR1RIKHVuaWNvZGUpID0gMDsKKwogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koKFB5T2JqZWN0ICopdW5pY29kZSwgMCkpOwogICAgIHJldHVybiB1bmljb2RlOwogfQpAQCAtMTA3OCwxMSArMTEzNSw3IEBACiAgICAgICAgIH0KICAgICB9CiAjaWZkZWYgUHlfREVCVUcKLSAgICAvKiBGaWxsIHRoZSBkYXRhIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzIGVhcmxpZXIuCi0gICAgICAgX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkgZGV0ZWN0cyBpbnZhbGlkIGNoYXJhY3RlcnMsCi0gICAgICAgYXQgbGVhc3QgZm9yIEFTQ0lJIGFuZCBVQ1MtNCBzdHJpbmdzLiBVKzAwRkYgaXMgaW52YWxpZCBpbiBBU0NJSQotICAgICAgIGFuZCBVK0ZGRkZGRkZGIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLwotICAgIG1lbXNldChkYXRhLCAweGZmLCBzaXplICoga2luZCk7CisgICAgdW5pY29kZV9maWxsX2ludmFsaWQoKFB5T2JqZWN0Kil1bmljb2RlLCAwKTsKICNlbmRpZgogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koKFB5T2JqZWN0Kil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIG9iajsKQEAgLTE1MTIsNyArMTU2NSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi11bmljb2RlX2RlYWxsb2MocmVnaXN0ZXIgUHlPYmplY3QgKnVuaWNvZGUpCit1bmljb2RlX2RlYWxsb2MoUHlPYmplY3QgKnVuaWNvZGUpCiB7CiAgICAgc3dpdGNoIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodW5pY29kZSkpIHsKICAgICBjYXNlIFNTVEFURV9OT1RfSU5URVJORUQ6CkBAIC0xNjQ0LDM4ICsxNjk3LDYgQEAKICAgICByZXR1cm4gdW5pY29kZV9yZXNpemUocF91bmljb2RlLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW50Ci11bmljb2RlX3dpZGVuKFB5T2JqZWN0ICoqcF91bmljb2RlLCBQeV9zc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heGNoYXIpCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBhc3NlcnQoUHlVbmljb2RlX0lTX1JFQURZKCpwX3VuaWNvZGUpKTsKLSAgICBhc3NlcnQobGVuZ3RoIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpwX3VuaWNvZGUpKTsKLSAgICBpZiAobWF4Y2hhciA8PSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoKnBfdW5pY29kZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJlc3VsdCA9IFB5VW5pY29kZV9OZXcoUHlVbmljb2RlX0dFVF9MRU5HVEgoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjaGFyKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXN1bHQsIDAsICpwX3VuaWNvZGUsIDAsIGxlbmd0aCk7Ci0gICAgUHlfREVDUkVGKCpwX3VuaWNvZGUpOwotICAgICpwX3VuaWNvZGUgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXVuaWNvZGVfcHV0Y2hhcihQeU9iamVjdCAqKnBfdW5pY29kZSwgUHlfc3NpemVfdCAqcG9zLAotICAgICAgICAgICAgICAgIFB5X1VDUzQgY2gpCi17Ci0gICAgYXNzZXJ0KGNoIDw9IE1BWF9VTklDT0RFKTsKLSAgICBpZiAodW5pY29kZV93aWRlbihwX3VuaWNvZGUsICpwb3MsIGNoKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EQVRBKCpwX3VuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAoKnBvcykrKywgY2gpOwotICAgIHJldHVybiAwOwotfQotCiAvKiBDb3B5IGEgQVNDSUkgb3IgbGF0aW4xIGNoYXIqIHN0cmluZyBpbnRvIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nLgogCiAgICBXQVJOSU5HOiBUaGUgZnVuY3Rpb24gZG9lc24ndCBjb3B5IHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlciBhbmQKQEAgLTE2OTIsNiArMTcxMywxNCBAQAogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6IHsKICAgICAgICAgYXNzZXJ0KGluZGV4ICsgbGVuIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKSB7CisgICAgICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSB1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoCisgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VDUzEqKXN0ciwKKyAgICAgICAgICAgICAgICAoY29uc3QgUHlfVUNTMSopc3RyICsgbGVuKTsKKyAgICAgICAgICAgIGFzc2VydChtYXhjaGFyIDwgMTI4KTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIG1lbWNweSgoY2hhciAqKSBkYXRhICsgaW5kZXgsIHN0ciwgbGVuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTkzNywxMyArMTk2NiwxNyBAQAogICAgIGFzc2VydChzaXplID4gMCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBQeV9VQ1M0IGNoID0gdVswXTsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgIGlmIChjaCA8IDI1NikKICAgICAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpY2gpOwogCiAgICAgICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOwogICAgICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHJlcyksIFB5VW5pY29kZV9EQVRBKHJlcyksIDAsIGNoKTsKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcyk7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXMpOworICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgMCwgY2gpOwogICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KQEAgLTE5NzMsMTMgKzIwMDYsMTcgQEAKICAgICBhc3NlcnQoc2l6ZSA+IDApOwogICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgUHlfVUNTNCBjaCA9IHVbMF07CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOwogICAgICAgICBpZiAoY2ggPCAyNTYpCiAgICAgICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKWNoKTsKIAogICAgICAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORChyZXMpLCBQeVVuaWNvZGVfREFUQShyZXMpLCAwLCBjaCk7CisgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChyZXMpOworICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEocmVzKTsKKyAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIDAsIGNoKTsKICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CkBAIC0yMjU4LDcgKzIyOTUsNyBAQAogI2lmZGVmIEhBVkVfV0NIQVJfSAogCiBQeU9iamVjdCAqCi1QeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHJlZ2lzdGVyIGNvbnN0IHdjaGFyX3QgKncsIFB5X3NzaXplX3Qgc2l6ZSkKK1B5VW5pY29kZV9Gcm9tV2lkZUNoYXIoY29uc3Qgd2NoYXJfdCAqdywgUHlfc3NpemVfdCBzaXplKQogewogICAgIGlmICh3ID09IE5VTEwpIHsKICAgICAgICAgaWYgKHNpemUgPT0gMCkKQEAgLTIyNzgsMTYgKzIzMTUsOSBAQAogCiBzdGF0aWMgdm9pZAogbWFrZWZtdChjaGFyICpmbXQsIGludCBsb25nZmxhZywgaW50IGxvbmdsb25nZmxhZywgaW50IHNpemVfdGZsYWcsCi0gICAgICAgIGludCB6ZXJvcGFkLCBpbnQgd2lkdGgsIGludCBwcmVjaXNpb24sIGNoYXIgYykKKyAgICAgICAgY2hhciBjKQogewogICAgICpmbXQrKyA9ICclJzsKLSAgICBpZiAod2lkdGgpIHsKLSAgICAgICAgaWYgKHplcm9wYWQpCi0gICAgICAgICAgICAqZm10KysgPSAnMCc7Ci0gICAgICAgIGZtdCArPSBzcHJpbnRmKGZtdCwgIiVkIiwgd2lkdGgpOwotICAgIH0KLSAgICBpZiAocHJlY2lzaW9uKQotICAgICAgICBmbXQgKz0gc3ByaW50ZihmbXQsICIuJWQiLCBwcmVjaXNpb24pOwogICAgIGlmIChsb25nZmxhZykKICAgICAgICAgKmZtdCsrID0gJ2wnOwogICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykgewpAQCAtMjMxMiw0NCArMjM0MiwxMzkgQEAKICAgICAqZm10ID0gJ1wwJzsKIH0KIAotLyogaGVscGVyIGZvciBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSAqLworLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsbGQgb3IgJXAuCisgICBXZSBuZWVkIGF0IG1vc3QgY2VpbChsb2cxMCgyNTYpKlNJWkVPRl9MT05HX0xPTkcpIGRpZ2l0cywKKyAgIHBsdXMgMSBmb3IgdGhlIHNpZ24uICA1My8yMiBpcyBhbiB1cHBlciBib3VuZCBmb3IgbG9nMTAoMjU2KS4gKi8KKyNkZWZpbmUgTUFYX0xPTkdfTE9OR19DSEFSUyAoMiArIChTSVpFT0ZfTE9OR19MT05HKjUzLTEpIC8gMjIpCisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoLCBQeV9zc2l6ZV90IHByZWNpc2lvbikKK3sKKyAgICBQeV9zc2l6ZV90IGxlbmd0aCwgZmlsbCwgYXJnbGVuOworICAgIFB5X1VDUzQgbWF4Y2hhcjsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKKyAgICBpZiAoKHByZWNpc2lvbiA9PSAtMSB8fCBwcmVjaXNpb24gPj0gbGVuZ3RoKQorICAgICAgICAmJiB3aWR0aCA8PSBsZW5ndGgpCisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgc3RyKTsKKworICAgIGlmIChwcmVjaXNpb24gIT0gLTEpCisgICAgICAgIGxlbmd0aCA9IFB5X01JTihwcmVjaXNpb24sIGxlbmd0aCk7CisKKyAgICBhcmdsZW4gPSBQeV9NQVgobGVuZ3RoLCB3aWR0aCk7CisgICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpID4gd3JpdGVyLT5tYXhjaGFyKQorICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihzdHIsIDAsIGxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGFyZ2xlbiwgbWF4Y2hhcikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh3aWR0aCA+IGxlbmd0aCkgeworICAgICAgICBmaWxsID0gd2lkdGggLSBsZW5ndGg7CisgICAgICAgIGlmIChQeVVuaWNvZGVfRmlsbCh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIGZpbGwsICcgJykgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGZpbGw7CisgICAgfQorCisgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgMCwgbGVuZ3RoKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW5ndGg7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9jc3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCB3aWR0aCwgUHlfc3NpemVfdCBwcmVjaXNpb24pCit7CisgICAgLyogVVRGLTggKi8KKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBpbnQgcmVzOworCisgICAgbGVuZ3RoID0gc3RybGVuKHN0cik7CisgICAgaWYgKHByZWNpc2lvbiAhPSAtMSkKKyAgICAgICAgbGVuZ3RoID0gUHlfTUlOKGxlbmd0aCwgcHJlY2lzaW9uKTsKKyAgICB1bmljb2RlID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzdHIsIGxlbmd0aCwgInJlcGxhY2UiLCBOVUxMKTsKKyAgICBpZiAodW5pY29kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXMgPSB1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgdW5pY29kZSwgd2lkdGgsIC0xKTsKKyAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgcmV0dXJuIHJlczsKK30KIAogc3RhdGljIGNvbnN0IGNoYXIqCi1wYXJzZV9mb3JtYXRfZmxhZ3MoY29uc3QgY2hhciAqZiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKnBfd2lkdGgsIGludCAqcF9wcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgaW50ICpwX2xvbmdmbGFnLCBpbnQgKnBfbG9uZ2xvbmdmbGFnLCBpbnQgKnBfc2l6ZV90ZmxhZykKK3VuaWNvZGVfZnJvbWZvcm1hdF9hcmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmLCB2YV9saXN0ICp2YXJncykKIHsKLSAgICBpbnQgd2lkdGgsIHByZWNpc2lvbiwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZzsKKyAgICBjb25zdCBjaGFyICpwOworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCB6ZXJvcGFkOworICAgIFB5X3NzaXplX3Qgd2lkdGg7CisgICAgUHlfc3NpemVfdCBwcmVjaXNpb247CisgICAgaW50IGxvbmdmbGFnOworICAgIGludCBsb25nbG9uZ2ZsYWc7CisgICAgaW50IHNpemVfdGZsYWc7CisgICAgUHlfc3NpemVfdCBmaWxsOworCisgICAgcCA9IGY7CisgICAgZisrOworICAgIHplcm9wYWQgPSAwOworICAgIGlmICgqZiA9PSAnMCcpIHsKKyAgICAgICAgemVyb3BhZCA9IDE7CisgICAgICAgIGYrKzsKKyAgICB9CiAKICAgICAvKiBwYXJzZSB0aGUgd2lkdGgucHJlY2lzaW9uIHBhcnQsIGUuZy4gIiUyLjVzIiA9PiB3aWR0aD0yLCBwcmVjaXNpb249NSAqLwotICAgIGYrKzsKLSAgICB3aWR0aCA9IDA7Ci0gICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkKLSAgICAgICAgd2lkdGggPSAod2lkdGgqMTApICsgKmYrKyAtICcwJzsKLSAgICBwcmVjaXNpb24gPSAwOworICAgIHdpZHRoID0gLTE7CisgICAgaWYgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICB3aWR0aCA9ICpmIC0gJzAnOworICAgICAgICBmKys7CisgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KSpmIC0gJzAnKSkgLyAxMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGggdG9vIGJpZyIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2lkdGggPSAod2lkdGggKiAxMCkgKyAoKmYgLSAnMCcpOworICAgICAgICAgICAgZisrOworICAgICAgICB9CisgICAgfQorICAgIHByZWNpc2lvbiA9IC0xOwogICAgIGlmICgqZiA9PSAnLicpIHsKICAgICAgICAgZisrOwotICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKQotICAgICAgICAgICAgcHJlY2lzaW9uID0gKHByZWNpc2lvbioxMCkgKyAqZisrIC0gJzAnOworICAgICAgICBpZiAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICBwcmVjaXNpb24gPSAoKmYgLSAnMCcpOworICAgICAgICAgICAgZisrOworICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgICAgIGlmIChwcmVjaXNpb24gPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludCkqZiAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlY2lzaW9uIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IChwcmVjaXNpb24gKiAxMCkgKyAoKmYgLSAnMCcpOworICAgICAgICAgICAgICAgIGYrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBpZiAoKmYgPT0gJyUnKSB7CiAgICAgICAgICAgICAvKiAiJS4zJXMiID0+IGYgcG9pbnRzIHRvICIzIiAqLwogICAgICAgICAgICAgZi0tOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICgqZiA9PSAnXDAnKSB7Ci0gICAgICAgIC8qIGJvZ3VzIGZvcm1hdCAiJS4xIiA9PiBnbyBiYWNrd2FyZCwgZiBwb2ludHMgdG8gIjEiICovCisgICAgICAgIC8qIGJvZ3VzIGZvcm1hdCAiJS4xMjMiID0+IGdvIGJhY2t3YXJkLCBmIHBvaW50cyB0byAiMyIgKi8KICAgICAgICAgZi0tOwogICAgIH0KLSAgICBpZiAocF93aWR0aCAhPSBOVUxMKQotICAgICAgICAqcF93aWR0aCA9IHdpZHRoOwotICAgIGlmIChwX3ByZWNpc2lvbiAhPSBOVUxMKQotICAgICAgICAqcF9wcmVjaXNpb24gPSBwcmVjaXNpb247CiAKICAgICAvKiBIYW5kbGUgJWxkLCAlbHUsICVsbGQgYW5kICVsbHUuICovCiAgICAgbG9uZ2ZsYWcgPSAwOwogICAgIGxvbmdsb25nZmxhZyA9IDA7CiAgICAgc2l6ZV90ZmxhZyA9IDA7Ci0KICAgICBpZiAoKmYgPT0gJ2wnKSB7CiAgICAgICAgIGlmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JyB8fCBmWzFdID09ICdpJykgewogICAgICAgICAgICAgbG9uZ2ZsYWcgPSAxOwpAQCAtMjM2OCw0OTkgKzI0OTMsMjg0IEBACiAgICAgICAgIHNpemVfdGZsYWcgPSAxOwogICAgICAgICArK2Y7CiAgICAgfQotICAgIGlmIChwX2xvbmdmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX2xvbmdmbGFnID0gbG9uZ2ZsYWc7Ci0gICAgaWYgKHBfbG9uZ2xvbmdmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX2xvbmdsb25nZmxhZyA9IGxvbmdsb25nZmxhZzsKLSAgICBpZiAocF9zaXplX3RmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX3NpemVfdGZsYWcgPSBzaXplX3RmbGFnOworCisgICAgaWYgKGZbMV0gPT0gJ1wwJykKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgc3dpdGNoICgqZikgeworICAgIGNhc2UgJ2MnOgorICAgIHsKKyAgICAgICAgaW50IG9yZGluYWwgPSB2YV9hcmcoKnZhcmdzLCBpbnQpOworICAgICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIGFyZ3VtZW50IG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIG9yZGluYWwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICd4JzoKKyAgICB7CisgICAgICAgIC8qIHVzZWQgYnkgc3ByaW50ZiAqLworICAgICAgICBjaGFyIGZtdFsxMF07IC8qIHNob3VsZCBiZSBlbm91Z2ggZm9yICIlMGxsZFwwIiAqLworICAgICAgICBjaGFyIGJ1ZmZlcltNQVhfTE9OR19MT05HX0NIQVJTXTsKKyAgICAgICAgUHlfc3NpemVfdCBhcmdsZW47CisKKyAgICAgICAgaWYgKCpmID09ICd1JykgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsICpmKTsKKworICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBsb25nKSk7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHNpemVfdCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgqZiA9PSAneCcpIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCAwLCAwLCAwLCAneCcpOworICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwgdmFfYXJnKCp2YXJncywgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgKmYpOworCisgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIGxvbmcpKTsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBQWV9MT05HX0xPTkcpKTsKKyNlbmRpZgorICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgUHlfc3NpemVfdCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQobGVuID49IDApOworCisgICAgICAgIGlmIChwcmVjaXNpb24gPCBsZW4pCisgICAgICAgICAgICBwcmVjaXNpb24gPSBsZW47CisKKyAgICAgICAgYXJnbGVuID0gUHlfTUFYKHByZWNpc2lvbiwgd2lkdGgpOworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgYXJnbGVuLCAxMjcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKHdpZHRoID4gcHJlY2lzaW9uKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGZpbGxjaGFyOworICAgICAgICAgICAgZmlsbCA9IHdpZHRoIC0gcHJlY2lzaW9uOworICAgICAgICAgICAgZmlsbGNoYXIgPSB6ZXJvcGFkPycwJzonICc7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCBmaWxsY2hhcikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBmaWxsOworICAgICAgICB9CisgICAgICAgIGlmIChwcmVjaXNpb24gPiBsZW4pIHsKKyAgICAgICAgICAgIGZpbGwgPSBwcmVjaXNpb24gLSBsZW47CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCAnMCcpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBidWZmZXIsIGxlbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ3AnOgorICAgIHsKKyAgICAgICAgY2hhciBudW1iZXJbTUFYX0xPTkdfTE9OR19DSEFSU107CisKKyAgICAgICAgbGVuID0gc3ByaW50ZihudW1iZXIsICIlcCIsIHZhX2FyZygqdmFyZ3MsIHZvaWQqKSk7CisgICAgICAgIGFzc2VydChsZW4gPj0gMCk7CisKKyAgICAgICAgLyogJXAgaXMgaWxsLWRlZmluZWQ6ICBlbnN1cmUgbGVhZGluZyAweC4gKi8KKyAgICAgICAgaWYgKG51bWJlclsxXSA9PSAnWCcpCisgICAgICAgICAgICBudW1iZXJbMV0gPSAneCc7CisgICAgICAgIGVsc2UgaWYgKG51bWJlclsxXSAhPSAneCcpIHsKKyAgICAgICAgICAgIG1lbW1vdmUobnVtYmVyICsgMiwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBzdHJsZW4obnVtYmVyKSArIDEpOworICAgICAgICAgICAgbnVtYmVyWzBdID0gJzAnOworICAgICAgICAgICAgbnVtYmVyWzFdID0gJ3gnOworICAgICAgICAgICAgbGVuICs9IDI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgbnVtYmVyLCBsZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdzJzoKKyAgICB7CisgICAgICAgIC8qIFVURi04ICovCisgICAgICAgIGNvbnN0IGNoYXIgKnMgPSB2YV9hcmcoKnZhcmdzLCBjb25zdCBjaGFyKik7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cih3cml0ZXIsIHMsIHdpZHRoLCBwcmVjaXNpb24pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdVJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgYXNzZXJ0KG9iaiAmJiBfUHlVbmljb2RlX0NIRUNLKG9iaikpOworCisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgb2JqLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdWJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyID0gdmFfYXJnKCp2YXJncywgY29uc3QgY2hhciAqKTsKKyAgICAgICAgaWYgKG9iaikgeworICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7CisgICAgICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIG9iaiwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoc3RyICE9IE5VTEwpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9jc3RyKHdyaXRlciwgc3RyLCB3aWR0aCwgcHJlY2lzaW9uKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnUyc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICpzdHI7CisgICAgICAgIGFzc2VydChvYmopOworICAgICAgICBzdHIgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBzdHIsIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdSJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgUHlPYmplY3QgKnJlcHI7CisgICAgICAgIGFzc2VydChvYmopOworICAgICAgICByZXByID0gUHlPYmplY3RfUmVwcihvYmopOworICAgICAgICBpZiAoIXJlcHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCByZXByLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdBJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgUHlPYmplY3QgKmFzY2lpOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgYXNjaWkgPSBQeU9iamVjdF9BU0NJSShvYmopOworICAgICAgICBpZiAoIWFzY2lpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgYXNjaWksIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXNjaWkpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnJSc6CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsICclJykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogaWYgd2Ugc3R1bWJsZSB1cG9uIGFuIHVua25vd24gZm9ybWF0dGluZyBjb2RlLCBjb3B5IHRoZSByZXN0CisgICAgICAgICAgIG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRvIHRoZSBvdXRwdXQgc3RyaW5nLiAod2UgY2Fubm90IGp1c3QKKyAgICAgICAgICAgc2tpcCB0aGUgY29kZSwgc2luY2UgdGhlcmUncyBubyB3YXkgdG8ga25vdyB3aGF0J3MgaW4gdGhlCisgICAgICAgICAgIGFyZ3VtZW50IGxpc3QpICovCisgICAgICAgIGxlbiA9IHN0cmxlbihwKTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcod3JpdGVyLCBwLCBsZW4pID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGYgPSBwK2xlbjsKKyAgICAgICAgcmV0dXJuIGY7CisgICAgfQorCisgICAgZisrOwogICAgIHJldHVybiBmOwogfQogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxkLiAgMjEgY2hhcmFjdGVycwotICAgYWxsb3dzIGZvciA2NC1iaXQgaW50ZWdlcnMgKGluIGRlY2ltYWwpIGFuZCBhbiBvcHRpb25hbCBzaWduLiAqLwotI2RlZmluZSBNQVhfTE9OR19DSEFSUyAyMQotLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsbGQuCi0gICBXZSBuZWVkIGF0IG1vc3QgY2VpbChsb2cxMCgyNTYpKlNJWkVPRl9MT05HX0xPTkcpIGRpZ2l0cywKLSAgIHBsdXMgMSBmb3IgdGhlIHNpZ24uICA1My8yMiBpcyBhbiB1cHBlciBib3VuZCBmb3IgbG9nMTAoMjU2KS4gKi8KLSNkZWZpbmUgTUFYX0xPTkdfTE9OR19DSEFSUyAoMiArIChTSVpFT0ZfTE9OR19MT05HKjUzLTEpIC8gMjIpCi0KIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiB7Ci0gICAgdmFfbGlzdCBjb3VudDsKLSAgICBQeV9zc2l6ZV90IGNhbGxjb3VudCA9IDA7Ci0gICAgUHlPYmplY3QgKipjYWxscmVzdWx0cyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKipjYWxscmVzdWx0ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IG4gPSAwOwotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgaW50IHplcm9wYWQ7Ci0gICAgY29uc3QgY2hhciogZjsKLSAgICBQeU9iamVjdCAqc3RyaW5nOwotICAgIC8qIHVzZWQgYnkgc3ByaW50ZiAqLwotICAgIGNoYXIgZm10WzYxXTsgLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgJTB3aWR0aC5wcmVjaXNpb25sbGQgKi8KLSAgICBQeV9VQ1M0IG1heGNoYXIgPSAxMjc7IC8qIHJlc3VsdCBpcyBBU0NJSSBieSBkZWZhdWx0ICovCi0gICAgUHlfVUNTNCBhcmdtYXhjaGFyOwotICAgIFB5X3NzaXplX3QgbnVtYmVyc2l6ZSA9IDA7Ci0gICAgY2hhciAqbnVtYmVycmVzdWx0cyA9IE5VTEw7Ci0gICAgY2hhciAqbnVtYmVycmVzdWx0ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IGtpbmQ7Ci0gICAgdm9pZCAqZGF0YTsKKyAgICB2YV9saXN0IHZhcmdzMjsKKyAgICBjb25zdCBjaGFyICpmOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCi0gICAgUHlfVkFfQ09QWShjb3VudCwgdmFyZ3MpOwotICAgIC8qIHN0ZXAgMTogY291bnQgdGhlIG51bWJlciBvZiAlUy8lUi8lQS8lcyBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKLSAgICAgKiAod2UgY2FsbCBQeU9iamVjdF9TdHIoKS9QeU9iamVjdF9SZXByKCkvUHlPYmplY3RfQVNDSUkoKS8KLSAgICAgKiBQeVVuaWNvZGVfRGVjb2RlVVRGOCgpIGZvciB0aGVzZSBvYmplY3RzIG9uY2UgZHVyaW5nIHN0ZXAgMyBhbmQgcHV0IHRoZQotICAgICAqIHJlc3VsdCBpbiBhbiBhcnJheSkKLSAgICAgKiBhbHNvIGVzdGltYXRlIGEgdXBwZXIgYm91bmQgZm9yIGFsbCB0aGUgbnVtYmVyIGZvcm1hdHMgaW4gdGhlIHN0cmluZywKLSAgICAgKiBudW1iZXJzIHdpbGwgYmUgZm9ybWF0dGVkIGluIHN0ZXAgMyBhbmQgYmUga2VwdCBpbiBhICdcMCctc2VwYXJhdGVkCi0gICAgICogYnVmZmVyIGJlZm9yZSBwdXR0aW5nIGV2ZXJ5dGhpbmcgdG9nZXRoZXIuICovCi0gICAgZm9yIChmID0gZm9ybWF0OyAqZjsgZisrKSB7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc3RybGVuKGZvcm1hdCkgKyAxMDA7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisKKyAgICAvKiB2YV9saXN0IG1heSBiZSBhbiBhcnJheSAob2YgMSBpdGVtKSBvbiBzb21lIHBsYXRmb3JtcyAoZXg6IEFNRDY0KS4KKyAgICAgICBDb3B5IGl0IHRvIGJlIGFibGUgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byBhIHN1YmZ1bmN0aW9uLiAqLworICAgIFB5X1ZBX0NPUFkodmFyZ3MyLCB2YXJncyk7CisKKyAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyApIHsKICAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZzsKLSAgICAgICAgICAgIC8qIHNraXAgd2lkdGggb3Igd2lkdGgucHJlY2lzaW9uIChlZy4gIjEuMiIgb2YgIiUxLjJmIikgKi8KLSAgICAgICAgICAgIGYgPSBwYXJzZV9mb3JtYXRfZmxhZ3MoZiwgJndpZHRoLCBOVUxMLCBOVUxMLCAmbG9uZ2xvbmdmbGFnLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICgqZiA9PSAncycgfHwgKmY9PSdTJyB8fCAqZj09J1InIHx8ICpmPT0nQScgfHwgKmY9PSdWJykKLSAgICAgICAgICAgICAgICArK2NhbGxjb3VudDsKLQotICAgICAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ2QnIHx8ICpmPT0ndScgfHwgKmY9PSdpJyB8fCAqZj09J3gnIHx8ICpmPT0ncCcpIHsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGlmIChsb25nbG9uZ2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgTUFYX0xPTkdfTE9OR19DSEFSUykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gTUFYX0xPTkdfTE9OR19DSEFSUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIC8qIE1BWF9MT05HX0NIQVJTIGlzIGVub3VnaCB0byBob2xkIGEgNjQtYml0IGludGVnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBzaWduLiAgRGVjaW1hbCB0YWtlcyB0aGUgbW9zdCBzcGFjZS4gIFRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgaXNuJ3QgZW5vdWdoIGZvciBvY3RhbC4gIElmIGEgd2lkdGggaXMgc3BlY2lmaWVkIHdlCi0gICAgICAgICAgICAgICAgICAgICAgIG5lZWQgbW9yZSAod2hpY2ggd2UgYWxsb2NhdGUgbGF0ZXIpLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPCBNQVhfTE9OR19DSEFSUykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gTUFYX0xPTkdfQ0hBUlM7Ci0KLSAgICAgICAgICAgICAgICAvKiBhY2NvdW50IGZvciB0aGUgc2l6ZSArICdcMCcgdG8gc2VwYXJhdGUgbnVtYmVycwotICAgICAgICAgICAgICAgICAgIGluc2lkZSBvZiB0aGUgbnVtYmVycmVzdWx0cyBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICBudW1iZXJzaXplICs9ICh3aWR0aCArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCh1bnNpZ25lZCBjaGFyKSpmID4gMTI3KSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAiCi0gICAgICAgICAgICAgICAgInN0cmluZywgZ290IGEgbm9uLUFTQ0lJIGJ5dGU6IDB4JTAyeCIsCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpKmYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogc3RlcCAyOiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSByZXN1bHRzIG9mCi0gICAgICogUHlPYmplY3RfU3RyKCkvUHlPYmplY3RfUmVwcigpL1B5VW5pY29kZV9EZWNvZGVVVEY4KCkgY2FsbHMgKi8KLSAgICBpZiAoY2FsbGNvdW50KSB7Ci0gICAgICAgIGNhbGxyZXN1bHRzID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGNhbGxjb3VudCk7Ci0gICAgICAgIGlmICghY2FsbHJlc3VsdHMpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjYWxscmVzdWx0ID0gY2FsbHJlc3VsdHM7Ci0gICAgfQotICAgIC8qIHN0ZXAgMi41OiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSByZXN1bHRzIG9mIGZvcm1hdGluZyBudW1iZXJzICovCi0gICAgaWYgKG51bWJlcnNpemUpIHsKLSAgICAgICAgbnVtYmVycmVzdWx0cyA9IFB5T2JqZWN0X01hbGxvYyhudW1iZXJzaXplKTsKLSAgICAgICAgaWYgKCFudW1iZXJyZXN1bHRzKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIG51bWJlcnJlc3VsdCA9IG51bWJlcnJlc3VsdHM7Ci0gICAgfQotCi0gICAgLyogc3RlcCAzOiBmb3JtYXQgbnVtYmVycyBhbmQgZmlndXJlIG91dCBob3cgbGFyZ2UgYSBidWZmZXIgd2UgbmVlZCAqLwotICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7IGYrKykgewotICAgICAgICBpZiAoKmYgPT0gJyUnKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwOwotICAgICAgICAgICAgaW50IGxvbmdmbGFnOwotICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZzsKLSAgICAgICAgICAgIGludCBzaXplX3RmbGFnOwotICAgICAgICAgICAgaW50IG51bXByaW50ZWQ7Ci0KLSAgICAgICAgICAgIHAgPSBmOwotICAgICAgICAgICAgemVyb3BhZCA9IChmWzFdID09ICcwJyk7Ci0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsICZ3aWR0aCwgJnByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvbmdmbGFnLCAmbG9uZ2xvbmdmbGFnLCAmc2l6ZV90ZmxhZyk7Ci0gICAgICAgICAgICBzd2l0Y2ggKCpmKSB7Ci0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgb3JkaW5hbCA9IHZhX2FyZyhjb3VudCwgaW50KTsKLSAgICAgICAgICAgICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVjIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCAoUHlfVUNTNClvcmRpbmFsKTsKLSAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCB6ZXJvcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHByZWNpc2lvbiwgKmYpOwotICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgbG9uZykpOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBQWV9MT05HX0xPTkcpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIFB5X3NzaXplX3QpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIGJ5ICsxIHRvIHNraXAgb3ZlciB0aGUgJ1wwJyAqLwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsIHplcm9wYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCAndScpOwotICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgbG9uZykpOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBQWV9MT05HX0xPTkcpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHNpemVfdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIDAsIDAsIDAsIHplcm9wYWQsIHdpZHRoLCBwcmVjaXNpb24sICd4Jyk7Ci0gICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsIHZhX2FyZyhjb3VudCwgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCAiJXAiLCB2YV9hcmcoY291bnQsIHZvaWQqKSk7Ci0gICAgICAgICAgICAgICAgLyogJXAgaXMgaWxsLWRlZmluZWQ6ICBlbnN1cmUgbGVhZGluZyAweC4gKi8KLSAgICAgICAgICAgICAgICBpZiAobnVtYmVycmVzdWx0WzFdID09ICdYJykKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzFdID0gJ3gnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bWJlcnJlc3VsdFsxXSAhPSAneCcpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtbW92ZShudW1iZXJyZXN1bHQgKyAyLCBudW1iZXJyZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKG51bWJlcnJlc3VsdCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzBdID0gJzAnOwotICAgICAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHRbMV0gPSAneCc7Ci0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogVVRGLTggKi8KLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzID0gdmFfYXJnKGNvdW50LCBjb25zdCBjaGFyKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwocywgc3RybGVuKHMpLCAicmVwbGFjZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgLyogc2luY2UgUHlVbmljb2RlX0RlY29kZVVURjggcmV0dXJucyBhbHJlYWR5IGZsZXhpYmxlCi0gICAgICAgICAgICAgICAgICAgdW5pY29kZSBvYmplY3RzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgcmVhZHkgb24gdGhlbSAqLwotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgc3RyIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdVJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqICYmIF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShvYmopOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyID0gdmFfYXJnKGNvdW50LCBjb25zdCBjaGFyICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJfb2JqOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmogfHwgc3RyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIW9iaiB8fCBfUHlVbmljb2RlX0NIRUNLKG9iaikpOwotICAgICAgICAgICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHJfb2JqID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzdHIsIHN0cmxlbihzdHIpLCAicmVwbGFjZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cl9vYmopCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyX29iaikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyX29iajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIHN0ciA9IFB5T2JqZWN0X1N0cihvYmopOwotICAgICAgICAgICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgc3RyIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVwcjsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICByZXByID0gUHlPYmplY3RfUmVwcihvYmopOwotICAgICAgICAgICAgICAgIGlmICghcmVwcikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwcikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcHIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUocmVwcik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcHIpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSByZXByIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSByZXByOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKmFzY2lpOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIGFzY2lpID0gUHlPYmplY3RfQVNDSUkob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIWFzY2lpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhc2NpaSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKGFzY2lpKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYXNjaWkpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSByZXByIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBhc2NpaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLyogaWYgd2Ugc3R1bWJsZSB1cG9uIGFuIHVua25vd24KLSAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nIGNvZGUsIGNvcHkgdGhlIHJlc3Qgb2YKLSAgICAgICAgICAgICAgICAgICB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgc3RyaW5nLiAod2UgY2Fubm90IGp1c3Qgc2tpcCB0aGUKLSAgICAgICAgICAgICAgICAgICBjb2RlLCBzaW5jZSB0aGVyZSdzIG5vIHdheSB0byBrbm93Ci0gICAgICAgICAgICAgICAgICAgd2hhdCdzIGluIHRoZSBhcmd1bWVudCBsaXN0KSAqLwotICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHApOwotICAgICAgICAgICAgICAgIGdvdG8gZXhwYW5kOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG4rKzsKLSAgICB9Ci0gIGV4cGFuZDoKLSAgICAvKiBzdGVwIDQ6IGZpbGwgdGhlIGJ1ZmZlciAqLwotICAgIC8qIFNpbmNlIHdlJ3ZlIGFuYWx5emVkIGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQsCi0gICAgICAgd2UgZG9uJ3QgaGF2ZSB0byByZXNpemUgdGhlIHN0cmluZy4KLSAgICAgICBUaGVyZSBjYW4gYmUgbm8gZXJyb3JzIGJleW9uZCB0aGlzIHBvaW50LiAqLwotICAgIHN0cmluZyA9IFB5VW5pY29kZV9OZXcobiwgbWF4Y2hhcik7Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKLSAgICBjYWxscmVzdWx0ID0gY2FsbHJlc3VsdHM7Ci0gICAgbnVtYmVycmVzdWx0ID0gbnVtYmVycmVzdWx0czsKLQotICAgIGZvciAoaSA9IDAsIGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKLSAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcDsKLQotICAgICAgICAgICAgcCA9IGY7Ci0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgLyogY2hlY2tpbmcgZm9yID09IGJlY2F1c2UgdGhlIGxhc3QgYXJndW1lbnQgY291bGQgYmUgYSBlbXB0eQotICAgICAgICAgICAgICAgc3RyaW5nLCB3aGljaCBjYXVzZXMgaSB0byBwb2ludCB0byBlbmQsIHRoZSBhc3NlcnQgYXQgdGhlIGVuZCBvZgotICAgICAgICAgICAgICAgdGhlIGxvb3AgKi8KLSAgICAgICAgICAgIGFzc2VydChpIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKCpmKSB7Ci0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgb3JkaW5hbCA9IHZhX2FyZyh2YXJncywgaW50KTsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCBvcmRpbmFsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgIGlmICgqZiA9PSAncCcpCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIHZvaWQgKik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBpbnQpOwotICAgICAgICAgICAgICAgIC8qIGV4dHJhY3QgdGhlIHJlc3VsdCBmcm9tIG51bWJlcnJlc3VsdHMgYW5kIGFwcGVuZC4gKi8KLSAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4obnVtYmVycmVzdWx0KTsKLSAgICAgICAgICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIoc3RyaW5nLCBpLCBudW1iZXJyZXN1bHQsIGxlbik7Ci0gICAgICAgICAgICAgICAgLyogc2tpcCBvdmVyIHRoZSBzZXBhcmF0aW5nICdcMCcgKi8KLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gbGVuOwotICAgICAgICAgICAgICAgIGFzc2VydCgqbnVtYmVycmVzdWx0ID09ICdcMCcpOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCsrOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBjaGFyICopOwotICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZSB1bmljb2RlKCkvcmVwcigpID0+IGZvcmdldCBpdCAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogc3dpdGNoIHRvIG5leHQgdW5pY29kZSgpL3JlcHIoKSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdVJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKG9iaikgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCBvYmosIDAsIHNpemUpOwotICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1YnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIGNvbnN0IGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKG9iaikgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgb2JqLCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgIGNhc2UgJ1InOgotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgKmNhbGxyZXN1bHQsIDAsICBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZSB1bmljb2RlKCkvcmVwcigpID0+IGZvcmdldCBpdCAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogc3dpdGNoIHRvIG5leHQgdW5pY29kZSgpL3JlcHIoKSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCAnJScpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIoc3RyaW5nLCBpLCBwLCBsZW4pOwotICAgICAgICAgICAgICAgIGkgKz0gbGVuOwotICAgICAgICAgICAgICAgIGFzc2VydChpID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgZiA9IHVuaWNvZGVfZnJvbWZvcm1hdF9hcmcoJndyaXRlciwgZiwgJnZhcmdzMik7CisgICAgICAgICAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydChpIDwgUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCAqZik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0KGkgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwOworICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgZW5kOgotICAgIGlmIChjYWxscmVzdWx0cykKLSAgICAgICAgUHlPYmplY3RfRnJlZShjYWxscmVzdWx0cyk7Ci0gICAgaWYgKG51bWJlcnJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUobnVtYmVycmVzdWx0cyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHN0cmluZyk7Ci0gIGZhaWw6Ci0gICAgaWYgKGNhbGxyZXN1bHRzKSB7Ci0gICAgICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdDIgPSBjYWxscmVzdWx0czsKLSAgICAgICAgd2hpbGUgKGNhbGxyZXN1bHQyIDwgY2FsbHJlc3VsdCkgewotICAgICAgICAgICAgUHlfWERFQ1JFRigqY2FsbHJlc3VsdDIpOwotICAgICAgICAgICAgKytjYWxscmVzdWx0MjsKKyAgICAgICAgICAgIHAgPSBmOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGNoYXIpKnAgPiAxMjcpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nLCBnb3QgYSBub24tQVNDSUkgYnl0ZTogMHglMDJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSpwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICclJyk7CisgICAgICAgICAgICBsZW4gPSBwIC0gZjsKKworICAgICAgICAgICAgaWYgKCpwID09ICdcMCcpCisgICAgICAgICAgICAgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgZiwgbGVuKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBmID0gcDsKICAgICAgICAgfQotICAgICAgICBQeU9iamVjdF9GcmVlKGNhbGxyZXN1bHRzKTsKICAgICB9Ci0gICAgaWYgKG51bWJlcnJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUobnVtYmVycmVzdWx0cyk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworCisgIGZhaWw6CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yOTY4LDYgKzI4NzgsOSBAQAogUHlVbmljb2RlX0Zyb21PcmRpbmFsKGludCBvcmRpbmFsKQogewogICAgIFB5T2JqZWN0ICp2OworICAgIHZvaWQgKmRhdGE7CisgICAgaW50IGtpbmQ7CisKICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNocigpIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7CkBAIC0yOTgwLDEzICsyODkzLDE1IEBACiAgICAgdiA9IFB5VW5pY29kZV9OZXcoMSwgb3JkaW5hbCk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHYpLCBQeVVuaWNvZGVfREFUQSh2KSwgMCwgb3JkaW5hbCk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHYpOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh2KTsKKyAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgMCwgb3JkaW5hbCk7CiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh2LCAxKSk7CiAgICAgcmV0dXJuIHY7CiB9CiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tT2JqZWN0KHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmopCitQeVVuaWNvZGVfRnJvbU9iamVjdChQeU9iamVjdCAqb2JqKQogewogICAgIC8qIFhYWCBQZXJoYXBzIHdlIHNob3VsZCBtYWtlIHRoaXMgQVBJIGFuIGFsaWFzIG9mCiAgICAgICAgUHlPYmplY3RfU3RyKCkgaW5zdGVhZCA/ISAqLwpAQCAtMzAwOCw3ICsyOTIzLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCitQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoUHlPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7CkBAIC0zMDYwLDE0ICsyOTc1LDE3IEBACiAgICAxIG9uIHN1Y2Nlc3MuICovCiBpbnQKIF9QeV9ub3JtYWxpemVfZW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCi0gICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvd2VyX2xlbikKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dlcl9sZW4pCiB7CiAgICAgY29uc3QgY2hhciAqZTsKICAgICBjaGFyICpsOwogICAgIGNoYXIgKmxfZW5kOwogCiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgLyogNiA9PSBzdHJsZW4oInV0Zi04IikgKyAxICovCisgICAgICAgIGlmIChsb3dlcl9sZW4gPCA2KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN0cmNweShsb3dlciwgInV0Zi04Iik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KQEAgLTMxMDksNyArMzAyNyw4IEBACiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzLCBzaXplLCBlcnJvcnMsIE5VTEwpOwogICAgICAgICBlbHNlIGlmICgoc3RyY21wKGxvd2VyLCAibGF0aW4tMSIpID09IDApIHx8CiAgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJsYXRpbjEiKSA9PSAwKSB8fAotICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApKQorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApIHx8CisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc284ODU5LTEiKSA9PSAwKSkKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHMsIHNpemUsIGVycm9ycyk7CiAjaWZkZWYgSEFWRV9NQkNTCiAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgIm1iY3MiKSA9PSAwKQpAQCAtMzEzMCwxMyArMzA0OSwxNSBAQAogICAgIGJ1ZmZlciA9IFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZpbmZvKTsKICAgICBpZiAoYnVmZmVyID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICB1bmljb2RlID0gUHlDb2RlY19EZWNvZGUoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzKTsKKyAgICB1bmljb2RlID0gX1B5Q29kZWNfRGVjb2RlVGV4dChidWZmZXIsIGVuY29kaW5nLCBlcnJvcnMpOwogICAgIGlmICh1bmljb2RlID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh1bmljb2RlKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImRlY29kZXIgZGlkIG5vdCByZXR1cm4gYSBzdHIgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZGVjb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGUoKSB0byBkZWNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSwgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KQEAgLTMxOTQsOCArMzExNSwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGRpZCBub3QgcmV0dXJuIGEgc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGRlY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUsIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zMzQzLDcgKzMyNjYsNyBAQAogICAgIH0KIAogICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKLSAgICAgICAgLyogbG9jYWxlIGVuY29kaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlICovCisgICAgICAgIC8qICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgKi8KICAgICAgICAgY2hhciAqc3RyOwogCiAgICAgICAgIHN0ciA9IF9QeV93Y2hhcjJjaGFyKHdzdHIsICZlcnJvcl9wb3MpOwpAQCAtMzM2Myw2ICszMjg2LDcgQEAKICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICAgICAgICAgc2l6ZV90IGxlbiwgbGVuMjsKIAogICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCB3c3RyLCAwKTsKQEAgLTM0MDEsNyArMzMyNSw3IEBACiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2cgPSBOVUxMOwogICAgIH0KQEAgLTM0NzksNyArMzQwMyw4IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc0xhdGluMVN0cmluZyh1bmljb2RlLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTM0OTAsNyArMzQxNSw3IEBACiAgICAgfQogCiAgICAgLyogRW5jb2RlIHZpYSB0aGUgY29kZWMgcmVnaXN0cnkgKi8KLSAgICB2ID0gUHlDb2RlY19FbmNvZGUodW5pY29kZSwgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgdiA9IF9QeUNvZGVjX0VuY29kZVRleHQodW5pY29kZSwgZW5jb2RpbmcsIGVycm9ycyk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM1MDQsNyArMzQyOSw4IEBACiAgICAgICAgIFB5T2JqZWN0ICpiOwogCiAgICAgICAgIGVycm9yID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SdW50aW1lV2FybmluZywgMSwKLSAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzIiwKKyAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzOyAiCisgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKICAgICAgICAgICAgIGVuY29kaW5nKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0zNTE3LDggKzM0NDMsMTAgQEAKICAgICB9CiAKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAiZW5jb2RlciBkaWQgbm90IHJldHVybiBhIGJ5dGVzIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ2J5dGVzJzsgIgorICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUsIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgIFB5X0RFQ1JFRih2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM1NDQsOCArMzQ3MiwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJlbmNvZGVyIGRpZCBub3QgcmV0dXJuIGFuIHN0ciBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZSgpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQpAQCAtMzYwOCw4ICszNTM4LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkKLSAgICB7CisgICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkgeworICAgICAgICAvKiAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyICovCiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihzdHIsICZ3bGVuKTsKICAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHdsZW4gPT0gKHNpemVfdCktMSkKQEAgLTM2MjAsOSArMzU1MCwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgd2xlbik7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3N0cik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICAvKiBzdHJpY3QgbW9kZSAqLwogI2lmbmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUwogICAgICAgICB3bGVuID0gbWJzdG93Y3MoTlVMTCwgc3RyLCAwKTsKICNlbHNlCkBAIC0zNjQyLDcgKzM1NzMsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICB9CiAKLSAgICAgICAgLyogVGhpcyBzaG91bGRuJ3QgZmFpbCBub3cgKi8KICAgICAgICAgd2xlbjIgPSBtYnN0b3djcyh3c3RyLCBzdHIsIHdsZW4rMSk7CiAgICAgICAgIGlmICh3bGVuMiA9PSAoc2l6ZV90KS0xKSB7CiAgICAgICAgICAgICBpZiAod3N0ciAhPSBzbWFsbGJ1ZikKQEAgLTM2NjgsNyArMzU5OCw3IEBACiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2cgPSBOVUxMOwogICAgIH0KQEAgLTM3MzYsMTggKzM2NjYsMjAgQEAKIAogCiBpbnQKLV9QeVVuaWNvZGVfSGFzTlVMQ2hhcnMoUHlPYmplY3QqIHMpCitfUHlVbmljb2RlX0hhc05VTENoYXJzKFB5T2JqZWN0KiBzdHIpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpudWwgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zOwogCi0gICAgaWYgKG51bCA9PSBOVUxMKQotICAgICAgICBudWwgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlwwIiwgMSk7Ci0gICAgaWYgKG51bCA9PSBOVUxMKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBQeVVuaWNvZGVfQ29udGFpbnMocywgbnVsKTsKKyAgICBwb3MgPSBmaW5kY2hhcihQeVVuaWNvZGVfREFUQShzdHIpLCBQeVVuaWNvZGVfS0lORChzdHIpLAorICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksICdcMCcsIDEpOworICAgIGlmIChwb3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CiB9CiAKLQogaW50CiBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIGFyZywgdm9pZCogYWRkcikKIHsKQEAgLTM4NTEsNiArMzc4Myw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNfR0VUX1NJWkUoYnl0ZXMpICsgMSk7CiAgICAgICAgIGlmIChfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNDAxOSw2ICszOTUyLDkgQEAKIFB5X1VDUzQKIFB5VW5pY29kZV9SZWFkQ2hhcihQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBpbmRleCkKIHsKKyAgICB2b2lkICpkYXRhOworICAgIGludCBraW5kOworCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodW5pY29kZSkgfHwgUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgIHJldHVybiAoUHlfVUNTNCktMTsKQEAgLTQwMjcsNyArMzk2Myw5IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAic3RyaW5nIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gKFB5X1VDUzQpLTE7CiAgICAgfQotICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRF9DSEFSKHVuaWNvZGUsIGluZGV4KTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbmRleCk7CiB9CiAKIGludApAQCAtNDA4Niw2ICs0MDI0LDcgQEAKICAgICAqZXhjZXB0aW9uT2JqZWN0ID0gTlVMTDsKIH0KIAorI2lmZGVmIEhBVkVfTUJDUwogLyogZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgaGVscGVyOgogICAgYnVpbGQgYXJndW1lbnRzLCBjYWxsIHRoZSBjYWxsYmFjayBhbmQgY2hlY2sgdGhlIGFyZ3VtZW50cywKICAgIGlmIG5vIGV4Y2VwdGlvbiBvY2N1cnJlZCwgY29weSB0aGUgcmVwbGFjZW1lbnQgdG8gdGhlIG91dHB1dApAQCAtNDA5NCwxMSArNDAzMywxMiBAQAogKi8KIAogc3RhdGljIGludAotdW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcykKK3VuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAorICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKKyAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKKyAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKKyAgICBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zKQogewogICAgIHN0YXRpYyBjaGFyICphcmdwYXJzZSA9ICJPIW47ZGVjb2RpbmcgZXJyb3IgaGFuZGxlciBtdXN0IHJldHVybiAoc3RyLCBpbnQpIHR1cGxlIjsKIApAQCAtNDEwOSwxMiArNDA0OSwxMSBAQAogICAgIFB5X3NzaXplX3QgcmVxdWlyZWRzaXplOwogICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIFB5T2JqZWN0ICppbnB1dG9iaiA9IE5VTEw7Ci0gICAgaW50IHJlcyA9IC0xOworICAgIHdjaGFyX3QgKnJlcHdzdHI7CisgICAgUHlfc3NpemVfdCByZXB3bGVuOwogCi0gICAgaWYgKF9QeVVuaWNvZGVfS0lORCgqb3V0cHV0KSAhPSBQeVVuaWNvZGVfV0NIQVJfS0lORCkKLSAgICAgICAgb3V0c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpvdXRwdXQpOwotICAgIGVsc2UKLSAgICAgICAgb3V0c2l6ZSA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgoKm91dHB1dCk7CisgICAgYXNzZXJ0IChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgPT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpOworICAgIG91dHNpemUgPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKCpvdXRwdXQpOwogCiAgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkgewogICAgICAgICAqZXJyb3JIYW5kbGVyID0gUHlDb2RlY19Mb29rdXBFcnJvcihlcnJvcnMpOwpAQCAtNDEzOSw3ICs0MDc4LDk4IEBACiAgICAgfQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShyZXN0dXBsZSwgYXJncGFyc2UsICZQeVVuaWNvZGVfVHlwZSwgJnJlcHVuaWNvZGUsICZuZXdwb3MpKQogICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXB1bmljb2RlKSA9PSAtMSkKKworICAgIC8qIENvcHkgYmFjayB0aGUgYnl0ZXMgdmFyaWFibGVzLCB3aGljaCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlCisgICAgICAgY2FsbGJhY2sgKi8KKyAgICBpbnB1dG9iaiA9IFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdCgqZXhjZXB0aW9uT2JqZWN0KTsKKyAgICBpZiAoIWlucHV0b2JqKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGlucHV0b2JqKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiZXhjZXB0aW9uIGF0dHJpYnV0ZSBvYmplY3QgbXVzdCBiZSBieXRlcyIpOworICAgIH0KKyAgICAqaW5wdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhpbnB1dG9iaik7CisgICAgaW5zaXplID0gUHlCeXRlc19HRVRfU0laRShpbnB1dG9iaik7CisgICAgKmluZW5kID0gKmlucHV0ICsgaW5zaXplOworICAgIC8qIHdlIGNhbiBERUNSRUYgc2FmZWx5LCBhcyB0aGUgZXhjZXB0aW9uIGhhcyBhbm90aGVyIHJlZmVyZW5jZSwKKyAgICAgICBzbyB0aGUgb2JqZWN0IHdvbid0IGdvIGF3YXkuICovCisgICAgUHlfREVDUkVGKGlucHV0b2JqKTsKKworICAgIGlmIChuZXdwb3M8MCkKKyAgICAgICAgbmV3cG9zID0gaW5zaXplK25ld3BvczsKKyAgICBpZiAobmV3cG9zPDAgfHwgbmV3cG9zPmluc2l6ZSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW5kZXhFcnJvciwgInBvc2l0aW9uICV6ZCBmcm9tIGVycm9yIGhhbmRsZXIgb3V0IG9mIGJvdW5kcyIsIG5ld3Bvcyk7CisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisKKyAgICByZXB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocmVwdW5pY29kZSwgJnJlcHdsZW4pOworICAgIGlmIChyZXB3c3RyID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKKyAgICAgICBoYXZlK3RoZSByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIChzdGFydGluZworICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCisgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCisgICAgcmVxdWlyZWRzaXplID0gKm91dHBvcyArIHJlcHdsZW4gKyBpbnNpemUtbmV3cG9zOworICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7CisgICAgICAgIGlmIChyZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCisgICAgICAgICAgICByZXF1aXJlZHNpemUgPSAyKm91dHNpemU7CisgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICB3Y3NuY3B5KF9QeVVuaWNvZGVfV1NUUigqb3V0cHV0KSArICpvdXRwb3MsIHJlcHdzdHIsIHJlcHdsZW4pOworICAgICpvdXRwb3MgKz0gcmVwd2xlbjsKKworICAgICplbmRpbnBvcyA9IG5ld3BvczsKKyAgICAqaW5wdHIgPSAqaW5wdXQgKyBuZXdwb3M7CisKKyAgICAvKiB3ZSBtYWRlIGl0ISAqLworICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOworICAgIHJldHVybiAwOworCisgIG9uRXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIC0xOworfQorI2VuZGlmICAgLyogSEFWRV9NQkNTICovCisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKKyAgICBjb25zdCBjaGFyICplcnJvcnMsIFB5T2JqZWN0ICoqZXJyb3JIYW5kbGVyLAorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCisgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCisgICAgUHlfc3NpemVfdCAqZW5kaW5wb3MsIFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LCBjb25zdCBjaGFyICoqaW5wdHIsCisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyIC8qIFB5T2JqZWN0ICoqb3V0cHV0LCBQeV9zc2l6ZV90ICpvdXRwb3MgKi8pCit7CisgICAgc3RhdGljIGNoYXIgKmFyZ3BhcnNlID0gIk8hbjtkZWNvZGluZyBlcnJvciBoYW5kbGVyIG11c3QgcmV0dXJuIChzdHIsIGludCkgdHVwbGUiOworCisgICAgUHlPYmplY3QgKnJlc3R1cGxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwdW5pY29kZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpbnNpemU7CisgICAgUHlfc3NpemVfdCBuZXdwb3M7CisgICAgUHlfc3NpemVfdCByZXBsZW47CisgICAgUHlPYmplY3QgKmlucHV0b2JqID0gTlVMTDsKKworICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpIHsKKyAgICAgICAgKmVycm9ySGFuZGxlciA9IFB5Q29kZWNfTG9va3VwRXJyb3IoZXJyb3JzKTsKKyAgICAgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisKKyAgICBtYWtlX2RlY29kZV9leGNlcHRpb24oZXhjZXB0aW9uT2JqZWN0LAorICAgICAgICBlbmNvZGluZywKKyAgICAgICAgKmlucHV0LCAqaW5lbmQgLSAqaW5wdXQsCisgICAgICAgICpzdGFydGlucG9zLCAqZW5kaW5wb3MsCisgICAgICAgIHJlYXNvbik7CisgICAgaWYgKCpleGNlcHRpb25PYmplY3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBvbkVycm9yOworCisgICAgcmVzdHVwbGUgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKCplcnJvckhhbmRsZXIsICpleGNlcHRpb25PYmplY3QsIE5VTEwpOworICAgIGlmIChyZXN0dXBsZSA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlc3R1cGxlKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAmYXJncGFyc2VbNF0pOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShyZXN0dXBsZSwgYXJncGFyc2UsICZQeVVuaWNvZGVfVHlwZSwgJnJlcHVuaWNvZGUsICZuZXdwb3MpKQogICAgICAgICBnb3RvIG9uRXJyb3I7CiAKICAgICAvKiBDb3B5IGJhY2sgdGhlIGJ5dGVzIHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoZQpAQCAtNDE2NCw1NCArNDE5NCwyNSBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKF9QeVVuaWNvZGVfS0lORCgqb3V0cHV0KSAhPSBQeVVuaWNvZGVfV0NIQVJfS0lORCkgewotICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKLSAgICAgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKLSAgICAgICAgICAgYXQgdGhlIG5ldyBpbnB1dCBwb3NpdGlvbiksIHNvIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UKLSAgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCi0gICAgICAgIFB5X3NzaXplX3QgcmVwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwdW5pY29kZSk7Ci0gICAgICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3MgKyByZXBsZW4gKyBpbnNpemUtbmV3cG9zOwotICAgICAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZTwyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1bmljb2RlX3dpZGVuKG91dHB1dCwgKm91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHJlcHVuaWNvZGUpKSA8IDApCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKCpvdXRwdXQsICpvdXRwb3MsIHJlcHVuaWNvZGUsIDAsIHJlcGxlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwbGVuOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgd2NoYXJfdCAqcmVwd3N0cjsKLSAgICAgICAgUHlfc3NpemVfdCByZXB3bGVuOwotICAgICAgICByZXB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocmVwdW5pY29kZSwgJnJlcHdsZW4pOwotICAgICAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKLSAgICAgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKLSAgICAgICAgICAgYXQgdGhlIG5ldyBpbnB1dCBwb3NpdGlvbiksIHNvIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UKLSAgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCi0gICAgICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3MgKyByZXB3bGVuICsgaW5zaXplLW5ld3BvczsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IG91dHNpemUpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIHdjc25jcHkoX1B5VW5pY29kZV9XU1RSKCpvdXRwdXQpICsgKm91dHBvcywgcmVwd3N0ciwgcmVwd2xlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwd2xlbjsKLSAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXB1bmljb2RlKSA8IDApCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICByZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKKyAgICB3cml0ZXItPm1pbl9sZW5ndGggKz0gcmVwbGVuOworICAgIGlmIChyZXBsZW4gPiAxKQorICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCByZXB1bmljb2RlKSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCiAgICAgKmVuZGlucG9zID0gbmV3cG9zOwogICAgICppbnB0ciA9ICppbnB1dCArIG5ld3BvczsKIAogICAgIC8qIHdlIG1hZGUgaXQhICovCi0gICAgcmVzID0gMDsKKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gMDsKIAogICBvbkVycm9yOgogICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIC0xOwogfQogCiAvKiAtLS0gVVRGLTcgQ29kZWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQzMTksOSArNDMyMCw4IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKICAgICBjb25zdCBjaGFyICplOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIGludCBpblNoaWZ0ID0gMDsKICAgICBQeV9zc2l6ZV90IHNoaWZ0T3V0U3RhcnQ7CkBAIC00MzMxLDE3ICs0MzMxLDE3IEBACiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKLSAgICAvKiBTdGFydCBvZmYgYXNzdW1pbmcgaXQncyBhbGwgQVNDSUkuIFdpZGVuIGxhdGVyIGFzIG5lY2Vzc2FyeS4gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNpemUgPT0gMCkgewogICAgICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICAgICAqY29uc3VtZWQgPSAwOwotICAgICAgICByZXR1cm4gdW5pY29kZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogCi0gICAgc2hpZnRPdXRTdGFydCA9IG91dHBvcyA9IDA7CisgICAgLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGl0J3MgYWxsIEFTQ0lJLiBXaWRlbiBsYXRlciBhcyBuZWNlc3NhcnkuICovCisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKworICAgIHNoaWZ0T3V0U3RhcnQgPSAwOwogICAgIGUgPSBzICsgc2l6ZTsKIAogICAgIHdoaWxlIChzIDwgZSkgewpAQCAtNDM2NCwxMyArNDM2NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhwZWN0aW5nIGEgc2Vjb25kIHN1cnJvZ2F0ZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShvdXRDaCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoMiA9IFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTKHN1cnJvZ2F0ZSwgb3V0Q2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoMikgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaDIpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBzdXJyb2dhdGUpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgc3Vycm9nYXRlKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDM4MCw3ICs0MzgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IG91dENoOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgb3V0Q2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBvdXRDaCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQzODksNyArNDM4OSw3IEBACiAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDA7CiAgICAgICAgICAgICAgICAgcysrOwogICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBzdXJyb2dhdGUpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICB9CkBAIC00NDEwLDcgKzQ0MTAsNyBAQAogICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnLScpIHsKICAgICAgICAgICAgICAgICAgICAgLyogJy0nIGlzIGFic29yYmVkOyBvdGhlciB0ZXJtaW5hdGluZwogICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGFyZSBwcmVzZXJ2ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDQyMCwyMCArNDQyMCwyMCBAQAogICAgICAgICAgICAgcysrOyAvKiBjb25zdW1lICcrJyAqLwogICAgICAgICAgICAgaWYgKHMgPCBlICYmICpzID09ICctJykgeyAvKiAnKy0nIGVuY29kZXMgJysnICovCiAgICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsICcrJykgPCAwKQorICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCAnKycpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7IC8qIGJlZ2luIGJhc2U2NC1lbmNvZGVkIHNlY3Rpb24gKi8KICAgICAgICAgICAgICAgICBpblNoaWZ0ID0gMTsKLSAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gb3V0cG9zOworICAgICAgICAgICAgICAgIHNoaWZ0T3V0U3RhcnQgPSB3cml0ZXIucG9zOwogICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgPSAwOwogICAgICAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoREVDT0RFX0RJUkVDVChjaCkpIHsgLyogY2hhcmFjdGVyIGRlY29kZXMgYXMgaXRzZWxmICovCi0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKQEAgLTQ0NDQsMTEgKzQ0NDQsMTEgQEAKICAgICAgICAgY29udGludWU7CiB1dGY3RXJyb3I6CiAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInV0ZjciLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKQEAgLTQ0NjAsMTEgKzQ0NjAsMTEgQEAKICAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+PSA2KSB8fAogICAgICAgICAgICAgICAgIChiYXNlNjRiaXRzID4gMCAmJiBiYXNlNjRidWZmZXIgIT0gMCkpIHsKICAgICAgICAgICAgIGVuZGlucG9zID0gc2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgInV0ZjciLCAidW50ZXJtaW5hdGVkIHNoaWZ0IHNlcXVlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGlmIChzIDwgZSkKICAgICAgICAgICAgICAgICBnb3RvIHJlc3RhcnQ7CkBAIC00NDc0LDcgKzQ0NzQsNyBAQAogICAgIC8qIHJldHVybiBzdGF0ZSAqLwogICAgIGlmIChjb25zdW1lZCkgewogICAgICAgICBpZiAoaW5TaGlmdCkgewotICAgICAgICAgICAgb3V0cG9zID0gc2hpZnRPdXRTdGFydDsgLyogYmFjayBvZmYgb3V0cHV0ICovCisgICAgICAgICAgICB3cml0ZXIucG9zID0gc2hpZnRPdXRTdGFydDsgLyogYmFjayBvZmYgb3V0cHV0ICovCiAgICAgICAgICAgICAqY29uc3VtZWQgPSBzdGFydGlucG9zOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtNDQ4MiwxNyArNDQ4MiwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NTc1LDcgKzQ1NzIsNyBAQAogCiAgICAgICAgICAgICAvKiBjb2RlIGZpcnN0IHN1cnJvZ2F0ZSAqLwogICAgICAgICAgICAgYmFzZTY0Yml0cyArPSAxNjsKLSAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IChiYXNlNjRidWZmZXIgPDwgMTYpIHwgMHhkODAwIHwgKChjaC0weDEwMDAwKSA+PiAxMCk7CisgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgd2hpbGUgKGJhc2U2NGJpdHMgPj0gNikgewogICAgICAgICAgICAgICAgICpvdXQrKyA9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPj4gKGJhc2U2NGJpdHMtNikpOwogICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgLT0gNjsKQEAgLTQ2NzYsOSArNDY3Myw5IEBACiAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAvKiBGYXN0IHBhdGgsIHNlZSBpbiBTVFJJTkdMSUIodXRmOF9kZWNvZGUpIGZvcgogICAgICAgICAgICBhbiBleHBsYW5hdGlvbi4gKi8KLSAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKLSAgICAgICAgcmVnaXN0ZXIgUHlfVUNTMSAqIHEgPSBkZXN0OworICAgICAgICAvKiBIZWxwIGFsbG9jYXRpb24gKi8KKyAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOworICAgICAgICBQeV9VQ1MxICogcSA9IGRlc3Q7CiAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNDcwMSw4ICs0Njk4LDggQEAKICAgICAgICAgLyogRmFzdCBwYXRoLCBzZWUgaW4gU1RSSU5HTElCKHV0ZjhfZGVjb2RlKSBpbiBzdHJpbmdsaWIvY29kZWNzLmgKICAgICAgICAgICAgZm9yIGFuIGV4cGxhbmF0aW9uLiAqLwogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7Ci0gICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIC8qIEhlbHAgYWxsb2NhdGlvbiAqLworICAgICAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOwogICAgICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKQEAgLTQ3MjcsMTAgKzQ3MjQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmNvbnN1bWVkKQogewotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgY29uc3QgY2hhciAqZW5kID0gcyArIHNpemU7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKQEAgLTQ3NTEsMjkgKzQ3NDcsMjYgQEAKICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhcilzWzBdKTsKICAgICB9CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZW5kLCBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSk7Ci0gICAgcyArPSBvdXRwb3M7CisgICAgd3JpdGVyLnBvcyA9IGFzY2lpX2RlY29kZShzLCBlbmQsIHdyaXRlci5kYXRhKTsKKyAgICBzICs9IHdyaXRlci5wb3M7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgUHlfVUNTNCBjaDsKLSAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSB3cml0ZXIua2luZDsKICAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCi0gICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKKyAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewotICAgICAgICAgICAgY2ggPSB1Y3MybGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwotICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChjaCkgewpAQCAtNDc5NywzNSArNDc5MCwzMSBAQAogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgY2ggLSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGYtOCIsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCiBFbmQ6Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAqY29uc3VtZWQgPSBzIC0gc3RhcnRzOwogCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDgzNSw3ICs0ODI0LDcgQEAKICAgIHVzZWQgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9uIE1hYyBPUyBYLgogCiAgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCi0gICBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSwgb3IgTlVMTCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4gKi8KKyAgIFB5TWVtX1Jhd0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpLCBvciBOVUxMIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLiAqLwogCiB3Y2hhcl90KgogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKQEAgLTQ4NDgsNyArNDgzNyw3IEBACiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCiAgICAgaWYgKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIDwgKHNpemUgKyAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdW5pY29kZSA9IFB5TWVtX01hbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB1bmljb2RlID0gUHlNZW1fUmF3TWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghdW5pY29kZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTQ5NzEsMTcgKzQ5NjAsMTEgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEsICplOwotICAgIGludCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLworICAgIGludCBsZSwgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKLSAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KLSAgICBpbnQgaW9yZGVyW10gPSB7MCwgMSwgMiwgM307Ci0jZWxzZQotICAgIGludCBpb3JkZXJbXSA9IHszLCAyLCAxLCAwfTsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCkBAIC00OTk1LDEwNyArNDk3OCwxMTggQEAKICAgICAgICBieXRlIG9yZGVyIHNldHRpbmcgYWNjb3JkaW5nbHkuIEluIG5hdGl2ZSBtb2RlLCB0aGUgbGVhZGluZyBCT00KICAgICAgICBtYXJrIGlzIHNraXBwZWQsIGluIGFsbCBvdGhlciBtb2RlcywgaXQgaXMgY29waWVkIHRvIHRoZSBvdXRwdXQKICAgICAgICBzdHJlYW0gYXMtaXMgKGdpdmluZyBhIFpXTkJTUCBjaGFyYWN0ZXIpLiAqLwotICAgIGlmIChibyA9PSAwKSB7Ci0gICAgICAgIGlmIChzaXplID49IDQpIHsKLSAgICAgICAgICAgIGNvbnN0IFB5X1VDUzQgYm9tID0gKHFbaW9yZGVyWzNdXSA8PCAyNCkgfCAocVtpb3JkZXJbMl1dIDw8IDE2KSB8Ci0gICAgICAgICAgICAgICAgKHFbaW9yZGVyWzFdXSA8PCA4KSB8IHFbaW9yZGVyWzBdXTsKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IDE7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGJvID09IDAgJiYgc2l6ZSA+PSA0KSB7CisgICAgICAgIFB5X1VDUzQgYm9tID0gKHFbM10gPDwgMjQpIHwgKHFbMl0gPDwgMTYpIHwgKHFbMV0gPDwgOCkgfCBxWzBdOworICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKKyAgICAgICAgICAgIGJvID0gLTE7CisgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKKyAgICAgICAgICAgIGJvID0gMTsKKyAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnl0ZW9yZGVyKQorICAgICAgICAgICAgKmJ5dGVvcmRlciA9IGJvOworICAgIH0KKworICAgIGlmIChxID09IGUpIHsKKyAgICAgICAgaWYgKGNvbnN1bWVkKQorICAgICAgICAgICAgKmNvbnN1bWVkID0gc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgfQorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgbGUgPSBibyA8IDA7CiAjZWxzZQotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9CisgICAgbGUgPSBibyA8PSAwOwogI2VuZGlmCisgICAgZW5jb2RpbmcgPSBsZSA/ICJ1dGYtMzItbGUiIDogInV0Zi0zMi1iZSI7CisKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAoZSAtIHEgKyAzKSAvIDQ7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IDA7CisgICAgICAgIFB5X1VDUzQgbWF4Y2ggPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUod3JpdGVyLmJ1ZmZlcik7CisKKyAgICAgICAgaWYgKGUgLSBxID49IDQpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQga2luZCA9IHdyaXRlci5raW5kOworICAgICAgICAgICAgdm9pZCAqZGF0YSA9IHdyaXRlci5kYXRhOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFzdCA9IGUgLSA0OworICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSB3cml0ZXIucG9zOworICAgICAgICAgICAgaWYgKGxlKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBjaCA9IChxWzNdIDw8IDI0KSB8IChxWzJdIDw8IDE2KSB8IChxWzFdIDw8IDgpIHwgcVswXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID4gbWF4Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgcG9zKyssIGNoKTsKKyAgICAgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHEgPD0gbGFzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKHFbMF0gPDwgMjQpIHwgKHFbMV0gPDwgMTYpIHwgKHFbMl0gPDwgOCkgfCBxWzNdOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPiBtYXhjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBwb3M7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoYm8gPT0gLTEpIHsKLSAgICAgICAgLyogZm9yY2UgTEUgKi8KLSAgICAgICAgaW9yZGVyWzBdID0gMDsKLSAgICAgICAgaW9yZGVyWzFdID0gMTsKLSAgICAgICAgaW9yZGVyWzJdID0gMjsKLSAgICAgICAgaW9yZGVyWzNdID0gMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYm8gPT0gMSkgewotICAgICAgICAvKiBmb3JjZSBCRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAzOwotICAgICAgICBpb3JkZXJbMV0gPSAyOwotICAgICAgICBpb3JkZXJbMl0gPSAxOwotICAgICAgICBpb3JkZXJbM10gPSAwOwotICAgIH0KLQotICAgIC8qIFRoaXMgbWlnaHQgYmUgb25lIHRvIG11Y2gsIGJlY2F1c2Ugb2YgYSBCT00gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldygoc2l6ZSszKS80LCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7Ci0gICAgb3V0cG9zID0gMDsKLQotICAgIHdoaWxlIChxIDwgZSkgewotICAgICAgICBQeV9VQ1M0IGNoOwotICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwotICAgICAgICBpZiAoZS1xPDQpIHsKLSAgICAgICAgICAgIGlmIChjb25zdW1lZCkKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgZXJybXNnID0gImNvZGVwb2ludCBpbiBzdXJyb2dhdGUgY29kZSBwb2ludCByYW5nZSgweGQ4MDAsIDB4ZTAwMCkiOworICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpIC0gc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaCA8PSBtYXhjaCkgeworICAgICAgICAgICAgaWYgKHEgPT0gZSB8fCBjb25zdW1lZCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qIHJlbWFpbmluZyBieXRlcyBhdCB0aGUgZW5kPyAoc2l6ZSBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IDQpICovCiAgICAgICAgICAgICBlcnJtc2cgPSAidHJ1bmNhdGVkIGRhdGEiOwotICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpLXN0YXJ0czsKLSAgICAgICAgICAgIGVuZGlucG9zID0gKChjb25zdCBjaGFyICopZSktc3RhcnRzOwotICAgICAgICAgICAgZ290byB1dGYzMkVycm9yOwotICAgICAgICAgICAgLyogVGhlIHJlbWFpbmluZyBpbnB1dCBjaGFycyBhcmUgaWdub3JlZCBpZiB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgIGNob29zZXMgdG8gc2tpcCB0aGUgaW5wdXQgKi8KKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gKChjb25zdCBjaGFyICopZSkgLSBzdGFydHM7CiAgICAgICAgIH0KLSAgICAgICAgY2ggPSAocVtpb3JkZXJbM11dIDw8IDI0KSB8IChxW2lvcmRlclsyXV0gPDwgMTYpIHwKLSAgICAgICAgICAgIChxW2lvcmRlclsxXV0gPDwgOCkgfCBxW2lvcmRlclswXV07Ci0KLSAgICAgICAgaWYgKGNoID49IDB4MTEwMDAwKQotICAgICAgICB7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGNoIDwgMHgxMTAwMDApIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm1zZyA9ICJjb2RlcG9pbnQgbm90IGluIHJhbmdlKDB4MTEwMDAwKSI7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSktc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzQ7Ci0gICAgICAgICAgICBnb3RvIHV0ZjMyRXJyb3I7CisgICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSkgLSBzdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyA0OwogICAgICAgICB9Ci0gICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIHEgKz0gNDsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB1dGYzMkVycm9yOgotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisKKyAgICAgICAgLyogVGhlIHJlbWFpbmluZyBpbnB1dCBjaGFycyBhcmUgaWdub3JlZCBpZiB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgY2hvb3NlcyB0byBza2lwIHRoZSBpbnB1dCAqLworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAidXRmMzIiLCBlcnJtc2csCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAoY29uc3QgY2hhciAqKikmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgKGNvbnN0IGNoYXIgKiopJnEsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChieXRlb3JkZXIpCi0gICAgICAgICpieXRlb3JkZXIgPSBibzsKLQogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01MTEzLDExICs1MTA3LDE1IEBACiAgICAgdW5zaWduZWQgY2hhciAqcDsKICAgICBQeV9zc2l6ZV90IG5zaXplLCBpOwogICAgIC8qIE9mZnNldHMgZnJvbSBwIGZvciBzdG9yaW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIGludCBpb3JkZXJbXSA9IHswLCAxLCAyLCAzfTsKICNlbHNlCiAgICAgaW50IGlvcmRlcltdID0gezMsIDIsIDEsIDB9OwogI2VuZGlmCisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CisgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcCA9IE5VTEw7CiAKICNkZWZpbmUgU1RPUkVDSEFSKENIKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUxNDksNyArNTE0Nyw3IEBACiAgICAgaWYgKGJ5dGVvcmRlciA9PSAwKQogICAgICAgICBTVE9SRUNIQVIoMHhGRUZGKTsKICAgICBpZiAobGVuID09IDApCi0gICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmV0dXJuIHY7CiAKICAgICBpZiAoYnl0ZW9yZGVyID09IC0xKSB7CiAgICAgICAgIC8qIGZvcmNlIExFICovCkBAIC01MTU3LDYgKzUxNTUsNyBAQAogICAgICAgICBpb3JkZXJbMV0gPSAxOwogICAgICAgICBpb3JkZXJbMl0gPSAyOwogICAgICAgICBpb3JkZXJbM10gPSAzOworICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiOwogICAgIH0KICAgICBlbHNlIGlmIChieXRlb3JkZXIgPT0gMSkgewogICAgICAgICAvKiBmb3JjZSBCRSAqLwpAQCAtNTE2NCwxMyArNTE2MywxMDMgQEAKICAgICAgICAgaW9yZGVyWzFdID0gMjsKICAgICAgICAgaW9yZGVyWzJdID0gMTsKICAgICAgICAgaW9yZGVyWzNdID0gMDsKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWJlIjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzIiOworCisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgU1RPUkVDSEFSKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKTsKKyAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICBTVE9SRUNIQVIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47KSB7CisgICAgICAgIFB5X3NzaXplX3QgcmVwc2l6ZSwgbW9yZXVuaXRzOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgYXNzZXJ0KGNoIDw9IE1BWF9VTklDT0RFKTsKKyAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gIGRvbmU6CisgICAgICAgIHJlcCA9IHVuaWNvZGVfZW5jb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgICAgICAgIHN0ciwgJmV4YywgaS0xLCBpLCAmaSk7CisKKyAgICAgICAgaWYgKCFyZXApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIHJlcHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlcCk7CisgICAgICAgICAgICBpZiAocmVwc2l6ZSAmIDMpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpIC0gMSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgLyA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhyZXApKTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXApOworICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfSVNfQVNDSUkocmVwKSkgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIGkgLSAxLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogZm91ciBieXRlcyBhcmUgcmVzZXJ2ZWQgZm9yIGVhY2ggc3Vycm9nYXRlICovCisgICAgICAgIGlmIChtb3JldW5pdHMgPiAxKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dHBvcyA9IHAgLSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgUHlfc3NpemVfdCBtb3JlYnl0ZXMgPSA0ICogKG1vcmV1bml0cyAtIDEpOworICAgICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodikgPiBQWV9TU0laRV9UX01BWCAtIG1vcmVieXRlcykgeworICAgICAgICAgICAgICAgIC8qIGludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZ2LCBQeUJ5dGVzX0dFVF9TSVpFKHYpICsgbW9yZWJ5dGVzKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHAgPSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpICsgb3V0cG9zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcCksIHJlcHNpemUpOworICAgICAgICAgICAgcCArPSByZXBzaXplOworICAgICAgICB9IGVsc2UgLyogcmVwIGlzIHVuaWNvZGUgKi8geworICAgICAgICAgICAgY29uc3QgUHlfVUNTMSAqcmVwZGF0YTsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChyZXApID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgICAgIHJlcGRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApOworICAgICAgICAgICAgd2hpbGUgKHJlcHNpemUtLSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqcmVwZGF0YSsrOworICAgICAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeV9DTEVBUihyZXApOworICAgIH0KKworICAgIC8qIEN1dCBiYWNrIHRvIHNpemUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IsIGZvciBleGFtcGxlLAorICAgICAgIGVuY29kaW5nIG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcgaXNvbGF0ZWQgc3Vycm9nYXRlcyBhbmQgdGhlICdpZ25vcmUnCisgICAgICAgaGFuZGxlciBpcyB1c2VkLiAqLworICAgIG5zaXplID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOwogI3VuZGVmIFNUT1JFQ0hBUgogfQogCkBAIC01MjE2LDE0ICs1MzA1LDE0IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKICAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwogCiAgICAgcSA9ICh1bnNpZ25lZCBjaGFyICopczsKICAgICBlID0gcSArIHNpemU7CkBAIC01MjU1LDQwICs1MzQ0LDQyIEBACiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIG5hdGl2ZV9vcmRlcmluZyA9IGJvIDw9IDA7CisgICAgZW5jb2RpbmcgPSBibyA8PSAwID8gInV0Zi0xNi1sZSIgOiAidXRmLTE2LWJlIjsKICNlbHNlCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPj0gMDsKKyAgICBlbmNvZGluZyA9IGJvID49IDAgPyAidXRmLTE2LWJlIiA6ICJ1dGYtMTYtbGUiOwogI2VuZGlmCiAKICAgICAvKiBOb3RlOiBzaXplIHdpbGwgYWx3YXlzIGJlIGxvbmdlciB0aGFuIHRoZSByZXN1bHRpbmcgVW5pY29kZQogICAgICAgIGNoYXJhY3RlciBjb3VudCAqLwotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KChlIC0gcSArIDEpIC8gMiwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChlIC0gcSArIDEpIC8gMjsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSAwOwogICAgICAgICBpZiAoZSAtIHEgPj0gMikgewotICAgICAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgICAgIGludCBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKICAgICAgICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMiopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwogICAgICAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0Kil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MzI0LDIzICs1NDE1LDIyIEBACiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLAogICAgICAgICAgICAgICAgICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgInV0ZjE2IiwgZXJybXNnLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmZSwKICAgICAgICAgICAgICAgICAmc3RhcnRpbnBvcywKICAgICAgICAgICAgICAgICAmZW5kaW5wb3MsCiAgICAgICAgICAgICAgICAgJmV4YywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmcSwKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwKLSAgICAgICAgICAgICAgICAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKQEAgLTUzNDgsMTYgKzU0MzgsMTIgQEAKICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICpjb25zdW1lZCA9IChjb25zdCBjaGFyICopcS1zdGFydHM7CiAKLSAgICAvKiBBZGp1c3QgbGVuZ3RoICovCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTM3MywxMyArNTQ1OSwxNyBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIHNob3J0ICpvdXQ7Ci0gICAgUHlfc3NpemVfdCBieXRlc2l6ZTsKICAgICBQeV9zc2l6ZV90IHBhaXJzOwotI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2lmIFBZX0JJR19FTkRJQU4KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyID49IDA7CiAjZWxzZQogICAgIGludCBuYXRpdmVfb3JkZXJpbmcgPSBieXRlb3JkZXIgPD0gMDsKICNlbmRpZgorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworICAgIFB5X3NzaXplX3QgbnNpemUsIHBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwID0gTlVMTDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHN0cikpIHsKICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKQEAgLTU0MDEsOCArNTQ5MSw4IEBACiAgICAgfQogICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSBwYWlycyAtIChieXRlb3JkZXIgPT0gMCkpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGJ5dGVzaXplID0gKGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKSkgKiAyOwotICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVzaXplKTsKKyAgICBuc2l6ZSA9IGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKTsKKyAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBuc2l6ZSAqIDIpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01NDE0LDI1ICs1NTA0LDEwNyBAQAogICAgIGlmIChsZW4gPT0gMCkKICAgICAgICAgZ290byBkb25lOwogCi0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewotICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDogewotICAgICAgICB1Y3MybGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MyICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDogewotICAgICAgICB1Y3M0bGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1M0ICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYXNzZXJ0KDApOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCisgICAgaWYgKGJ5dGVvcmRlciA8IDApCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNi1sZSI7CisgICAgZWxzZSBpZiAoYnl0ZW9yZGVyID4gMCkKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIjsKKyAgICBlbHNlCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNiI7CisKKyAgICBwb3MgPSAwOworICAgIHdoaWxlIChwb3MgPCBsZW4pIHsKKyAgICAgICAgUHlfc3NpemVfdCByZXBzaXplLCBtb3JldW5pdHM7CisKKyAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgIHBvcyArPSB1Y3MybGliX3V0ZjE2X2VuY29kZSgoY29uc3QgUHlfVUNTMiAqKWRhdGEgKyBwb3MsIGxlbiAtIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICAgICAgcG9zICs9IHVjczRsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1M0ICopZGF0YSArIHBvcywgbGVuIC0gcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvcyA9PSBsZW4pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZXAgPSB1bmljb2RlX2VuY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIiwKKyAgICAgICAgICAgICAgICBzdHIsICZleGMsIHBvcywgcG9zICsgMSwgJnBvcyk7CisgICAgICAgIGlmICghcmVwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICByZXBzaXplID0gUHlCeXRlc19HRVRfU0laRShyZXApOworICAgICAgICAgICAgaWYgKHJlcHNpemUgJiAxKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSAvIDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHJlcCkpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcCk7CisgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9JU19BU0NJSShyZXApKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogdHdvIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgZWFjaCBzdXJyb2dhdGUgKi8KKyAgICAgICAgaWYgKG1vcmV1bml0cyA+IDEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0cG9zID0gb3V0IC0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG1vcmVieXRlcyA9IDIgKiAobW9yZXVuaXRzIC0gMSk7CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRSh2KSA+IFBZX1NTSVpFX1RfTUFYIC0gbW9yZWJ5dGVzKSB7CisgICAgICAgICAgICAgICAgLyogaW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnYsIFB5Qnl0ZXNfR0VUX1NJWkUodikgKyBtb3JlYnl0ZXMpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgb3V0ID0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodikgKyBvdXRwb3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkob3V0LCBQeUJ5dGVzX0FTX1NUUklORyhyZXApLCByZXBzaXplKTsKKyAgICAgICAgICAgIG91dCArPSBtb3JldW5pdHM7CisgICAgICAgIH0gZWxzZSAvKiByZXAgaXMgdW5pY29kZSAqLyB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQocmVwKSA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CisgICAgICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApLCByZXBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKHJlcCk7CisgICAgfQorCisgICAgLyogQ3V0IGJhY2sgdG8gc2l6ZSBhY3R1YWxseSBuZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciwgZm9yIGV4YW1wbGUsCisgICAgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgY29udGFpbmluZyBpc29sYXRlZCBzdXJyb2dhdGVzIGFuZCB0aGUgJ2lnbm9yZScgaGFuZGxlcgorICAgIGlzIHVzZWQuICovCisgICAgbnNpemUgPSAodW5zaWduZWQgY2hhciopIG91dCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICBkb25lOgogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOworI3VuZGVmIFNUT1JFQ0hBUgogfQogCiBQeU9iamVjdCAqCkBAIC01NTIzLDI3ICs1Njk1LDI2IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY2hhciogbWVzc2FnZTsKICAgICBQeV9VQ1M0IGNociA9IDB4ZmZmZmZmZmY7IC8qIGluIGNhc2UgJ2dldGNvZGUnIG1lc3NlcyB1cCAqLwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxlbiA9IGxlbmd0aF9vZl9lc2NhcGVkX2FzY2lpX3N0cmluZyhzLCBzaXplKTsKKyAgICBpZiAobGVuID09IDApCisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogCiAgICAgLyogQWZ0ZXIgbGVuZ3RoX29mX2VzY2FwZWRfYXNjaWlfc3RyaW5nKCkgdGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZXMsCiAgICAgICAgZWl0aGVyIHRoZSBzdHJpbmcgaXMgcHVyZSBBU0NJSSB3aXRoIG5hbWVkIGVzY2FwZXMgbGlrZSBcbiwgZXRjLgogICAgICAgIGFuZCB3ZSBkZXRlcm1pbmVkIGl0J3MgZXhhY3Qgc2l6ZSAoY29tbW9uIGNhc2UpCiAgICAgICAgb3IgaXQgY29udGFpbnMgXHgsIFx1LCAuLi4gZXNjYXBlIHNlcXVlbmNlcy4gIHRoZW4gd2UgY3JlYXRlIGEKICAgICAgICBsZWdhY3kgd2NoYXIgc3RyaW5nIGFuZCByZXNpemUgaXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLiAqLwotICAgIGlmIChsZW4gPj0gMCkgewotICAgICAgICB2ID0gUHlVbmljb2RlX05ldyhsZW4sIDEyNyk7Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHYpID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBsZW47CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwpAQCAtNTU1MSwxNSArNTcyMiwxMSBAQAogICAgICAgICAgICBsZW5ndGggYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgdHJ1ZSB2YWx1ZS4KICAgICAgICAgICAgKGJ1dCBpZiB0aGUgZXJyb3IgY2FsbGJhY2sgcmV0dXJucyBhIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nCiAgICAgICAgICAgIHdlJ2xsIGhhdmUgdG8gYWxsb2NhdGUgbW9yZSBzcGFjZSkgKi8KLSAgICAgICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBzaXplOworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CiAgICAgfQogCiAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgaSA9IDA7CisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKICAgICBlbmQgPSBzICsgc2l6ZTsKIAogICAgIHdoaWxlIChzIDwgZW5kKSB7CkBAIC01NTY3LDEzICs1NzM0LDExIEBACiAgICAgICAgIFB5X1VDUzQgeDsKICAgICAgICAgaW50IGRpZ2l0czsKIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPD0gbGVuKTsKLQogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCAodW5zaWduZWQgY2hhcikgKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTU4NSwxOCArNTc1MCwxNCBAQAogICAgICAgICBpZiAocyA+IGVuZCkKICAgICAgICAgICAgIGMgPSAnXDAnOyAvKiBJbnZhbGlkIGFmdGVyIFwgKi8KIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPCBsZW4gfHwgKGkgPT0gbGVuICYmIGMgPT0gJ1xuJykpOwotCiAgICAgICAgIHN3aXRjaCAoYykgewogCiAgICAgICAgICAgICAvKiBceCBlc2NhcGVzICovCi0jZGVmaW5lIFdSSVRFQ0hBUihjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCBjaCkgPCAwKSAgICBcCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSBXUklURUNIQVIoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCAoY2gpKSA8IDApICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogICAgICAgICBjYXNlICdcbic6IGJyZWFrOwogICAgICAgICBjYXNlICdcXCc6IFdSSVRFQ0hBUignXFwnKTsgYnJlYWs7CkBAIC01NzIwLDM1ICs1ODgxLDMyIEBACiAKICAgICAgIGVycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlZXNjYXBlIiwgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdiwgJmkpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KTsKICAgICAgICAgY29udGludWU7CiAgICAgfQogI3VuZGVmIFdSSVRFQ0hBUgogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBpKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgdWNuaGFzaEVycm9yOgogICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAiXFxOIGVzY2FwZXMgbm90IHN1cHBvcnRlZCAoY2FuJ3QgbG9hZCB1bmljb2RlZGF0YSBtb2R1bGUpIgogICAgICAgICApOwotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTkwMSwyMyArNjA1OSwyMiBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNvbnN0IGNoYXIgKmJzOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisKICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwogICAgICAgIFVuaWNvZGUgc3RyaW5nLCBzbyB3ZSBzdGFydCB3aXRoIHNpemUgaGVyZSBhbmQgdGhlbiByZWR1Y2UgdGhlCiAgICAgICAgbGVuZ3RoIGFmdGVyIGNvbnZlcnNpb24gdG8gdGhlIHRydWUgdmFsdWUuIChCdXQgZGVjb2RpbmcgZXJyb3IKICAgICAgICBoYW5kbGVyIG1pZ2h0IGhhdmUgdG8gcmVzaXplIHRoZSBzdHJpbmcpICovCi0gICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworCiAgICAgZW5kID0gcyArIHNpemU7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjOwpAQCAtNTkyNyw3ICs2MDg0LDggQEAKIAogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsICh1bnNpZ25lZCBjaGFyKSpzKyspIDwgMCkKKyAgICAgICAgICAgIHggPSAodW5zaWduZWQgY2hhcikqcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTkzOSw3ICs2MDk3LDggQEAKICAgICAgICAgZm9yICg7cyA8IGVuZDspIHsKICAgICAgICAgICAgIGlmICgqcyAhPSAnXFwnKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgKHVuc2lnbmVkIGNoYXIpKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBpZiAoKChzIC0gYnMpICYgMSkgPT0gMCB8fApAQCAtNTk0Nyw3ICs2MTA2LDcgQEAKICAgICAgICAgICAgICgqcyAhPSAndScgJiYgKnMgIT0gJ1UnKSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0cG9zLS07CisgICAgICAgIHdyaXRlci5wb3MtLTsKICAgICAgICAgY291bnQgPSAqcz09J3UnID8gNCA6IDg7CiAgICAgICAgIHMrKzsKIApAQCAtNTk1NiwxMSArNjExNSwxMSBAQAogICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOwogICAgICAgICAgICAgaWYgKCFQeV9JU1hESUdJVChjKSkgewogICAgICAgICAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJ0cnVuY2F0ZWQgXFx1WFhYWCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgZ290byBuZXh0Qnl0ZTsKICAgICAgICAgICAgIH0KQEAgLTU5NzMsMjggKzYxMzIsMjcgQEAKICAgICAgICAgICAgICAgICB4ICs9IDEwICsgYyAtICdBJzsKICAgICAgICAgfQogICAgICAgICBpZiAoeCA8PSBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJcXFV4eHh4eHh4eCBvdXQgb2YgcmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgIG5leHRCeXRlOgogICAgICAgICA7CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjA5NCw4ICs2MjUyLDcgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjb25zdCBjaGFyICpyZWFzb247CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CkBAIC02MTA2LDE1ICs2MjYzLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICB2ID0gUHlVbmljb2RlX05ldygoc2l6ZStQeV9VTklDT0RFX1NJWkUtMSkvIFB5X1VOSUNPREVfU0laRSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7Ci0gICAgZW5kID0gcyArIHNpemU7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKHNpemUgLyBQeV9VTklDT0RFX1NJWkUgPiBQWV9TU0laRV9UX01BWCAtIDEpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChzaXplICsgKFB5X1VOSUNPREVfU0laRSAtIDEpKSAvIFB5X1VOSUNPREVfU0laRTsKKworICAgIGVuZCA9IHMgKyBzaXplOwogICAgIHdoaWxlIChzIDwgZW5kKSB7CiAgICAgICAgIFB5X1VOSUNPREUgdWNoOwogICAgICAgICBQeV9VQ1M0IGNoOwpAQCAtNjE1NiwyOCArNjMxNSwyNiBAQAogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgY29udGludWU7CiAKICAgZXJyb3I6CiAgICAgICAgIHN0YXJ0aW5wb3MgPSBzIC0gc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlX2ludGVybmFsIiwgcmVhc29uLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY1NDEsNyArNjY5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgaW50IGtpbmQ7CiAgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CkBAIC02NTU4LDQ2ICs2NzE1LDQ2IEBACiAgICAgaWYgKHNpemUgPT0gMSAmJiAodW5zaWduZWQgY2hhcilzWzBdIDwgMTI4KQogICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKXNbMF0pOwogCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodW5pY29kZSA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlID0gcyArIHNpemU7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpOworICAgIGRhdGEgPSB3cml0ZXIuZGF0YTsKICAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZSwgKFB5X1VDUzEgKilkYXRhKTsKLSAgICBpZiAob3V0cG9zID09IHNpemUpCi0gICAgICAgIHJldHVybiB1bmljb2RlOworICAgIHdyaXRlci5wb3MgPSBvdXRwb3M7CisgICAgaWYgKHdyaXRlci5wb3MgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCi0gICAgcyArPSBvdXRwb3M7Ci0gICAga2luZCA9IFB5VW5pY29kZV8xQllURV9LSU5EOworICAgIHMgKz0gd3JpdGVyLnBvczsKKyAgICBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikqczsKICAgICAgICAgaWYgKGMgPCAxMjgpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBvdXRwb3MrKywgYyk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgd3JpdGVyLnBvcywgYyk7CisgICAgICAgICAgICB3cml0ZXIucG9zKys7CiAgICAgICAgICAgICArK3M7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAiYXNjaWkiLCAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7Ci0gICAgICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAgICAgICAgICBraW5kID0gd3JpdGVyLmtpbmQ7CisgICAgICAgICAgICBkYXRhID0gd3JpdGVyLmRhdGE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7Ci0gICAgcmV0dXJuIHVuaWNvZGU7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY2MjksNyArNjc4Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIEZhc3QgcGF0aDogaWYgaXQgaXMgYW4gQVNDSUktb25seSBzdHJpbmcsIGNvbnN0cnVjdCBieXRlcyBvYmplY3QKICAgICAgICBkaXJlY3RseS4gRWxzZSBkZWZlciB0byBhYm92ZSBmdW5jdGlvbiB0byByYWlzZSB0aGUgZXhjZXB0aW9uLiAqLwotICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodW5pY29kZSkgPCAxMjgpCisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpKTsKICAgICByZXR1cm4gdW5pY29kZV9lbmNvZGVfdWNzMSh1bmljb2RlLCBlcnJvcnMsIDEyOCk7CkBAIC02NzA3LDggKzY4NjQsOCBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gdW5pY29kZSBvYmplY3QgaW4gc3RyaWN0CiAgKiBtb2RlLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGRlY29kZSBlcnJvciwgb3IgcmFpc2UgYQotICogV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZGVjb2RlIGVycm9yLCBvciByYWlzZSBhbgorICogT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZGVjb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsCkBAIC02NzU5LDcgKzY5MTYsNyBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIGNvZGUgcGFnZSBpbnRvIHVuaWNvZGUgb2JqZWN0IHdpdGggYW4gZXJyb3IKICAqIGhhbmRsZXIuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGEgV2luZG93c0Vycm9yIG9yCisgKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYW4gT1NFcnJvciBvcgogICogVW5pY29kZURlY29kZUVycm9yIGV4Y2VwdGlvbiBhbmQgcmV0dXJucyAtMSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNjc3OCw3ICs2OTM1LDggQEAKICAgICAvKiBlYWNoIHN0ZXAgY2Fubm90IGRlY29kZSBtb3JlIHRoYW4gMSBjaGFyYWN0ZXIsIGJ1dCBhIGNoYXJhY3RlciBjYW4gYmUKICAgICAgICByZXByZXNlbnRlZCBhcyBhIHN1cnJvZ2F0ZSBwYWlyICovCiAgICAgd2NoYXJfdCBidWZmZXJbMl0sICpzdGFydG91dCwgKm91dDsKLSAgICBpbnQgaW5zaXplLCBvdXRzaXplOworICAgIGludCBpbnNpemU7CisgICAgUHlfc3NpemVfdCBvdXRzaXplOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICplbmNvZGluZ19vYmogPSBOVUxMOwpAQCAtNjg1OCw3ICs3MDE2LDcgQEAKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBpbiAtIHN0YXJ0aW47CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwogICAgICAgICAgICAgb3V0cG9zID0gb3V0IC0gUHlVbmljb2RlX0FTX1VOSUNPREUoKnYpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCByZWFzb24sCiAgICAgICAgICAgICAgICAgICAgICZzdGFydGluLCAmZW5kaW4sICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZpbiwKQEAgLTcwMTQsNyArNzE3Miw3IEBACiAgKiBtb2RlLgogICoKICAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGVuY29kZSBlcnJvciwgb3IgcmFpc2UKLSAqIGEgV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogYW4gT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZW5jb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsIFB5T2JqZWN0ICoqb3V0Ynl0ZXMsCkBAIC03MDQ4LDEwICs3MjA2LDExIEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGFzc2VydChzaXplIDw9IElOVF9NQVgpOwogCiAgICAgLyogRmlyc3QgZ2V0IHRoZSBzaXplIG9mIHRoZSByZXN1bHQgKi8KICAgICBvdXRzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlX3BhZ2UsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgKGludClzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgaWYgKG91dHNpemUgPD0gMCkKQEAgLTcwODgsNyArNzI0Nyw3IEBACiAKICAgICAvKiBEbyB0aGUgY29udmVyc2lvbiAqLwogICAgIG91dHNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVfcGFnZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBvdXRzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHB1c2VkRGVmYXVsdENoYXIpOwogICAgIFB5X0NMRUFSKHN1YnN0cmluZyk7CkBAIC03MTEwLDcgKzcyNjksNyBAQAogICogRW5jb2RlIGEgVW5pY29kZSBzdHJpbmcgdG8gYSBXaW5kb3dzIGNvZGUgcGFnZSBpbnRvIGEgYnl0ZSBzdHJpbmcgdXNpbmcgYQogICogZXJyb3IgaGFuZGxlci4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIGNoYXJhY3RlcnMgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYSBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMKKyAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCBvciByYWlzZSBhbiBPU0Vycm9yIGFuZCByZXR1cm5zCiAgKiAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNzE5Niw5ICs3MzU1LDggQEAKICAgICAgICAgICAgIGNoYXJzaXplID0gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoIC09IDB4MTAwMDA7Ci0gICAgICAgICAgICBjaGFyc1swXSA9IDB4ZDgwMCArIChjaCA+PiAxMCk7Ci0gICAgICAgICAgICBjaGFyc1sxXSA9IDB4ZGMwMCArIChjaCAmIDB4M2ZmKTsKKyAgICAgICAgICAgIGNoYXJzWzBdID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CisgICAgICAgICAgICBjaGFyc1sxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICBjaGFyc2l6ZSA9IDI7CiAgICAgICAgIH0KIApAQCAtNzM5MSwyMjAgKzc1NDksMjU4IEBACiAKIC8qIC0tLSBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgaW50CitjaGFybWFwX2RlY29kZV9zdHJpbmcoY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBtYXBsZW47CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBtYXBraW5kOworICAgIHZvaWQgKm1hcGRhdGE7CisgICAgUHlfVUNTNCB4OworICAgIHVuc2lnbmVkIGNoYXIgY2g7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG1hcHBpbmcpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKKyAgICBtYXBkYXRhID0gUHlVbmljb2RlX0RBVEEobWFwcGluZyk7CisgICAgbWFwa2luZCA9IFB5VW5pY29kZV9LSU5EKG1hcHBpbmcpOworCisgICAgZSA9IHMgKyBzaXplOworCisgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgeworICAgICAgICAvKiBmYXN0LXBhdGggZm9yIGNwMDM3LCBjcDUwMCBhbmQgaXNvODg1OV8xIGVuY29kaW5ncy4gaXNvODg1OV8xCisgICAgICAgICAqIGlzIGRpc2FibGVkIGluIGVuY29kaW5nIGFsaWFzZXMsIGxhdGluMSBpcyBwcmVmZXJyZWQgYmVjYXVzZQorICAgICAgICAgKiBpdHMgaW1wbGVtZW50YXRpb24gaXMgZmFzdGVyLiAqLworICAgICAgICBQeV9VQ1MxICptYXBkYXRhX3VjczEgPSAoUHlfVUNTMSAqKW1hcGRhdGE7CisgICAgICAgIFB5X1VDUzEgKm91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworCisgICAgICAgIGFzc2VydCAod3JpdGVyLT5raW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMVtjaF07CisgICAgICAgICAgICBpZiAoeCA+IG1heGNoYXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMSwgMHhmZikgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgICAgICAgICAgICAgIG91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICArK3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgb3V0a2luZCA9IHdyaXRlci0+a2luZDsKKyAgICAgICAgICAgIFB5X1VDUzIgKm1hcGRhdGFfdWNzMiA9IChQeV9VQ1MyICopbWFwZGF0YTsKKyAgICAgICAgICAgIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSAqb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMltjaF07CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgKytzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MyICpvdXRkYXRhID0gKFB5X1VDUzIgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICAgICAgICAgIHggPSBtYXBkYXRhX3VjczJbY2hdOworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOworICAgICAgICAgICAgICAgICAgICBvdXRkYXRhW3dyaXRlci0+cG9zXSA9IHg7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICAgICAgICAgICsrczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCisgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQobWFwa2luZCwgbWFwZGF0YSwgY2gpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCitFcnJvcjoKKyAgICAgICAgaWYgKHggPT0gMHhmZmZlKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLworICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7CisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKKyAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgICAgICB3cml0ZXIpKSB7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB4KSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICsrczsKKyAgICB9CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gMDsKKworb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAorY2hhcm1hcF9kZWNvZGVfbWFwcGluZyhjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICBQeU9iamVjdCAqa2V5LCAqaXRlbSA9IE5VTEw7CisKKyAgICBlID0gcyArIHNpemU7CisKKyAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICAvKiBHZXQgbWFwcGluZyAoY2hhciBvcmRpbmFsIC0+IGludGVnZXIsIFVuaWNvZGUgY2hhciBvciBOb25lKSAqLworICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpY2gpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICAgICAgaXRlbSA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0xvb2t1cEVycm9yKSkgeworICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCisgICAgICAgIGlmIChpdGVtID09IFB5X05vbmUpCisgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5TG9uZ19BU19MT05HKGl0ZW0pOworICAgICAgICAgICAgaWYgKHZhbHVlID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfVU5JQ09ERSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKU1BWF9VTklDT0RFICsgMSk7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaXRlbSkgPT0gLTEpCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pID09IDEpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IHZhbHVlID0gUHlVbmljb2RlX1JFQURfQ0hBUihpdGVtLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBpdGVtKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IHJldHVybiBpbnRlZ2VyLCBOb25lIG9yIHN0ciIpOworICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICArK3M7CisgICAgICAgIGNvbnRpbnVlOworCitVbmRlZmluZWQ6CisgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCisgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgIHdyaXRlcikpIHsKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAwOworCitvbkVycm9yOgorICAgIFB5X1hERUNSRUYoaXRlbSk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gLTE7Cit9CisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwKGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKLSAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwotICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKLSAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIGNvbnN0IGNoYXIgKmU7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgUHlfc3NpemVfdCBleHRyYWNoYXJzID0gMDsKLSAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHMsIHNpemUsIGVycm9ycyk7CiAKLSAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOwotICAgIGUgPSBzICsgc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobWFwcGluZykpIHsKLSAgICAgICAgUHlfc3NpemVfdCBtYXBsZW47Ci0gICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgbWFwa2luZDsKLSAgICAgICAgdm9pZCAqbWFwZGF0YTsKLSAgICAgICAgUHlfVUNTNCB4OwotCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobWFwcGluZykgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKLSAgICAgICAgbWFwZGF0YSA9IFB5VW5pY29kZV9EQVRBKG1hcHBpbmcpOwotICAgICAgICBtYXBraW5kID0gUHlVbmljb2RlX0tJTkQobWFwcGluZyk7Ci0gICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaDsKLSAgICAgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKLSAgICAgICAgICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG91dGtpbmQgPSBQeVVuaWNvZGVfS0lORCh2KTsKLSAgICAgICAgICAgICAgICBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRkYXRhID0gUHlVbmljb2RlX0RBVEEodik7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh2KTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV8xQllURV9LSU5ELCBvdXRkYXRhLCBvdXRwb3MrKywgeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0ZGF0YSA9IFB5VW5pY29kZV9EQVRBKHYpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChQeVVuaWNvZGVfMkJZVEVfS0lORCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG91dGRhdGEsIG91dHBvcysrLCB4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaCA9ICpzOwotCi0gICAgICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCi0gICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKG1hcGtpbmQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCi1FcnJvcjoKLSAgICAgICAgICAgIGlmICh4ID09IDB4ZmZmZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLwotICAgICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgfQorICAgICAgICBpZiAoY2hhcm1hcF9kZWNvZGVfc3RyaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdywgKng7Ci0KLSAgICAgICAgICAgIC8qIEdldCBtYXBwaW5nIChjaGFyIG9yZGluYWwgLT4gaW50ZWdlciwgVW5pY29kZSBjaGFyIG9yIE5vbmUpICovCi0gICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKWNoKTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTG9va3VwRXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLwotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCi0gICAgICAgICAgICBpZiAoeCA9PSBQeV9Ob25lKQotICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh4KSkgewotICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUgPSBQeUxvbmdfQVNfTE9ORyh4KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gTUFYX1VOSUNPREUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylNQVhfVU5JQ09ERSArIDEpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgdmFsdWUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soeCkpIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHRhcmdldHNpemU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHgpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0YXJnZXRzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoeCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDEtMSBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdmFsdWUgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHgsIDApOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIHZhbHVlKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXRzaXplID4gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiAxLW4gbWFwcGluZyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA+IGV4dHJhY2hhcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2l6ZSBmaXJzdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuZWVkZWQgPSAodGFyZ2V0c2l6ZSAtIGV4dHJhY2hhcnMpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRzaXplIDw8IDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjaGFycyArPSBuZWVkZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSArIG5lZWRlZCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfd2lkZW4oJnYsIG91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHgpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29weUNoYXJhY3RlcnModiwgb3V0cG9zLCB4LCAwLCB0YXJnZXRzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0cG9zICs9IHRhcmdldHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhY2hhcnMgLT0gdGFyZ2V0c2l6ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogMS0wIG1hcHBpbmc6IHNraXAgdGhlIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgcmV0dXJuIGludGVnZXIsIE5vbmUgb3Igc3RyIik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotVW5kZWZpbmVkOgotICAgICAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KLSAgICAgICAgICAgIFB5X1hERUNSRUYoeCk7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKSB7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGlmIChjaGFybWFwX2RlY29kZV9tYXBwaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODExOCwxMCArODMxNCwxNCBAQAogICAgICAqIC0xPW5vdCBpbml0aWFsaXplZCwgMD11bmtub3duLCAxPXN0cmljdCwgMj1yZXBsYWNlLAogICAgICAqIDM9aWdub3JlLCA0PXhtbGNoYXJyZWZyZXBsYWNlICovCiAgICAgaW50IGtub3duX2Vycm9ySGFuZGxlciA9IC0xOworICAgIHZvaWQgKmRhdGE7CisgICAgaW50IGtpbmQ7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCkBAIC04MTM2LDcgKzgzMzYsNyBAQAogICAgICAgICByZXR1cm4gcmVzOwogCiAgICAgd2hpbGUgKGlucG9zPHNpemUpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgaW5wb3MpOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5wb3MpOwogICAgICAgICAvKiB0cnkgdG8gZW5jb2RlIGl0ICovCiAgICAgICAgIGNoYXJtYXBlbmNvZGVfcmVzdWx0IHggPSBjaGFybWFwZW5jb2RlX291dHB1dChjaCwgbWFwcGluZywgJnJlcywgJnJlc3Bvcyk7CiAgICAgICAgIGlmICh4PT1lbmNfRVhDRVBUSU9OKSAvKiBlcnJvciAqLwpAQCAtODIyMiwxOSArODQyMiw2IEBACiAgICAgfQogfQogCi0vKiByYWlzZXMgYSBVbmljb2RlVHJhbnNsYXRlRXJyb3IgKi8KLXN0YXRpYyB2b2lkCi1yYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikKLXsKLSAgICBtYWtlX3RyYW5zbGF0ZV9leGNlcHRpb24oZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlLCBzdGFydHBvcywgZW5kcG9zLCByZWFzb24pOwotICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ICE9IE5VTEwpCi0gICAgICAgIFB5Q29kZWNfU3RyaWN0RXJyb3JzKCpleGNlcHRpb25PYmplY3QpOwotfQotCiAvKiBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBoZWxwZXI6CiAgICBidWlsZCBhcmd1bWVudHMsIGNhbGwgdGhlIGNhbGxiYWNrIGFuZCBjaGVjayB0aGUgYXJndW1lbnRzLAogICAgcHV0IHRoZSByZXN1bHQgaW50byBuZXdwb3MgYW5kIHJldHVybiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLCB3aGljaApAQCAtODUxMCw4ICs4Njk3LDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzd2l0Y2ggKGtub3duX2Vycm9ySGFuZGxlcikgewogICAgICAgICAgICAgY2FzZSAxOiAvKiBzdHJpY3QgKi8KLSAgICAgICAgICAgICAgICByYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKCZleGMsIGlucHV0LCBjb2xsc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIG1ha2VfdHJhbnNsYXRlX2V4Y2VwdGlvbigmZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgY29sbHN0YXJ0LCBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIGlmIChleGMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgUHlDb2RlY19TdHJpY3RFcnJvcnMoZXhjKTsKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjYXNlIDI6IC8qIHJlcGxhY2UgKi8KICAgICAgICAgICAgICAgICAvKiBObyBuZWVkIHRvIGNoZWNrIGZvciBzcGFjZSwgdGhpcyBpcyBhIDE6MSByZXBsYWNlbWVudCAqLwpAQCAtOTEwMyw3ICs5MjkyLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEgfHwKICAgICAgICAgUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3Vic3RyaW5nKSA9PSAwKQogICAgICAgICByZXR1cm4gMTsKQEAgLTkxNDEsNyArOTMzMCw2IEBACiAgICAgICAgICAgICAvKiBXZSBkbyBub3QgbmVlZCB0byBjb21wYXJlIDAgYW5kIGxlbihzdWJzdHJpbmcpLTEgYmVjYXVzZQogICAgICAgICAgICAgICAgdGhlIGlmIHN0YXRlbWVudCBhYm92ZSBlbnN1cmVkIGFscmVhZHkgdGhhdCB0aGV5IGFyZSBlcXVhbAogICAgICAgICAgICAgICAgd2hlbiB3ZSBlbmQgdXAgaGVyZS4gKi8KLSAgICAgICAgICAgIC8qIFRPRE86IGhvbm9yIGRpcmVjdGlvbiBhbmQgZG8gYSBmb3J3YXJkIG9yIGJhY2t3YXJkcyBzZWFyY2ggKi8KICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBlbmRfc3ViOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZF9zZWxmLCBkYXRhX3NlbGYsIG9mZnNldCArIGkpICE9CiAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmRfc3ViLCBkYXRhX3N1YiwgaSkpCkBAIC05NjAzLDQxICs5NzkxLDQ5IEBACiAgICAgICAgICAgICBzZXBfZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHNlcCk7CiAgICAgfQogI2VuZGlmCi0gICAgZm9yIChpID0gMCwgcmVzX29mZnNldCA9IDA7IGkgPCBzZXFsZW47ICsraSkgewotICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47Ci0gICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KLSAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKLSAgICAgICAgICAgIGlmICh1c2VfbWVtY3B5KSB7CisgICAgaWYgKHVzZV9tZW1jcHkpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47CisgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgICAgIC8qIENvcHkgaXRlbSwgYW5kIG1heWJlIHRoZSBzZXBhcmF0b3IuICovCisgICAgICAgICAgICBpZiAoaSAmJiBzZXBsZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIFB5X01FTUNQWShyZXNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgKiBzZXBsZW4pOwogICAgICAgICAgICAgICAgIHJlc19kYXRhICs9IGtpbmQgKiBzZXBsZW47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIHNlcCwgMCwgc2VwbGVuKTsKLSAgICAgICAgICAgICAgICByZXNfb2Zmc2V0ICs9IHNlcGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpdGVtbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSk7Ci0gICAgICAgIGlmIChpdGVtbGVuICE9IDApIHsKLSAgICAgICAgICAgIGlmICh1c2VfbWVtY3B5KSB7CisKKyAgICAgICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKKyAgICAgICAgICAgIGlmIChpdGVtbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBQeV9NRU1DUFkocmVzX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EQVRBKGl0ZW0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kICogaXRlbWxlbik7CiAgICAgICAgICAgICAgICAgcmVzX2RhdGEgKz0ga2luZCAqIGl0ZW1sZW47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQocmVzX2RhdGEgPT0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBraW5kICogUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwLCByZXNfb2Zmc2V0ID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47CisgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgICAgIC8qIENvcHkgaXRlbSwgYW5kIG1heWJlIHRoZSBzZXBhcmF0b3IuICovCisgICAgICAgICAgICBpZiAoaSAmJiBzZXBsZW4gIT0gMCkgeworICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgc2VwLCAwLCBzZXBsZW4pOworICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gc2VwbGVuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVtbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBpdGVtLCAwLCBpdGVtbGVuKTsKICAgICAgICAgICAgICAgICByZXNfb2Zmc2V0ICs9IGl0ZW1sZW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHVzZV9tZW1jcHkpCi0gICAgICAgIGFzc2VydChyZXNfZGF0YSA9PSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICArIGtpbmQgKiBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKLSAgICBlbHNlCiAgICAgICAgIGFzc2VydChyZXNfb2Zmc2V0ID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOworICAgIH0KIAogICAgIFB5X0RFQ1JFRihmc2VxKTsKICAgICBQeV9YREVDUkVGKHNlcCk7CkBAIC0xMDAyOSw2ICsxMDIyNSwzMSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorcmVwbGFjZV8xY2hhcl9pbnBsYWNlKFB5T2JqZWN0ICp1LCBQeV9zc2l6ZV90IHBvcywKKyAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHUxLCBQeV9VQ1M0IHUyLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodSk7CisgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHUpOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodSk7CisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgdWNzMWxpYl9yZXBsYWNlXzFjaGFyX2lucGxhY2UoKFB5X1VDUzEgKilkYXRhICsgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSAqKWRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLCB1MiwgbWF4Y291bnQpOworICAgIH0KKyAgICBlbHNlIGlmIChraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7CisgICAgICAgIHVjczJsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1MyICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzIgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChraW5kID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKKyAgICAgICAgdWNzNGxpYl9yZXBsYWNlXzFjaGFyX2lucGxhY2UoKFB5X1VDUzQgKilkYXRhICsgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTNCAqKWRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLCB1MiwgbWF4Y291bnQpOworICAgIH0KK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIHJlcGxhY2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHIxLAogICAgICAgICBQeU9iamVjdCAqc3RyMiwgUHlfc3NpemVfdCBtYXhjb3VudCkKQEAgLTEwMDQ1LDcgKzEwMjY2LDcgQEAKICAgICBQeV9zc2l6ZV90IGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIxKTsKICAgICBQeV9zc2l6ZV90IGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKTsKICAgICBpbnQgbWF5c2hyaW5rOwotICAgIFB5X1VDUzQgbWF4Y2hhciwgbWF4Y2hhcl9zdHIyOworICAgIFB5X1VDUzQgbWF4Y2hhciwgbWF4Y2hhcl9zdHIxLCBtYXhjaGFyX3N0cjI7CiAKICAgICBpZiAobWF4Y291bnQgPCAwKQogICAgICAgICBtYXhjb3VudCA9IFBZX1NTSVpFX1RfTUFYOwpAQCAtMTAwNTQsMTUgKzEwMjc1LDE2IEBACiAKICAgICBpZiAoc3RyMSA9PSBzdHIyKQogICAgICAgICBnb3RvIG5vdGhpbmc7Ci0gICAgaWYgKHNraW5kIDwga2luZDEpCi0gICAgICAgIC8qIHN1YnN0cmluZyB0b28gd2lkZSB0byBiZSBwcmVzZW50ICovCi0gICAgICAgIGdvdG8gbm90aGluZzsKIAogICAgIG1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc2VsZik7CisgICAgbWF4Y2hhcl9zdHIxID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cjEpOworICAgIGlmIChtYXhjaGFyIDwgbWF4Y2hhcl9zdHIxKQorICAgICAgICAvKiBzdWJzdHJpbmcgdG9vIHdpZGUgdG8gYmUgcHJlc2VudCAqLworICAgICAgICBnb3RvIG5vdGhpbmc7CiAgICAgbWF4Y2hhcl9zdHIyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cjIpOwogICAgIC8qIFJlcGxhY2luZyBzdHIxIHdpdGggc3RyMiBtYXkgY2F1c2UgYSBtYXhjaGFyIHJlZHVjdGlvbiBpbiB0aGUKICAgICAgICByZXN1bHQgc3RyaW5nLiAqLwotICAgIG1heXNocmluayA9IChtYXhjaGFyX3N0cjIgPCBtYXhjaGFyKTsKKyAgICBtYXlzaHJpbmsgPSAobWF4Y2hhcl9zdHIyIDwgbWF4Y2hhcl9zdHIxKSAmJiAobWF4Y2hhciA9PSBtYXhjaGFyX3N0cjEpOwogICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgbWF4Y2hhcl9zdHIyKTsKIAogICAgIGlmIChsZW4xID09IGxlbjIpIHsKQEAgLTEwMDcyLDM1ICsxMDI5NCwxOSBAQAogICAgICAgICBpZiAobGVuMSA9PSAxKSB7CiAgICAgICAgICAgICAvKiByZXBsYWNlIGNoYXJhY3RlcnMgKi8KICAgICAgICAgICAgIFB5X1VDUzQgdTEsIHUyOwotICAgICAgICAgICAgaW50IHJraW5kOwotICAgICAgICAgICAgUHlfc3NpemVfdCBpbmRleCwgcG9zOwotICAgICAgICAgICAgY2hhciAqc3JjOworICAgICAgICAgICAgUHlfc3NpemVfdCBwb3M7CiAKLSAgICAgICAgICAgIHUxID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHIxLCAwKTsKLSAgICAgICAgICAgIHBvcyA9IGZpbmRjaGFyKHNidWYsIFB5VW5pY29kZV9LSU5EKHNlbGYpLCBzbGVuLCB1MSwgMSk7CisgICAgICAgICAgICB1MSA9IFB5VW5pY29kZV9SRUFEKGtpbmQxLCBidWYxLCAwKTsKKyAgICAgICAgICAgIHBvcyA9IGZpbmRjaGFyKHNidWYsIHNraW5kLCBzbGVuLCB1MSwgMSk7CiAgICAgICAgICAgICBpZiAocG9zIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG5vdGhpbmc7Ci0gICAgICAgICAgICB1MiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyMiwgMCk7CisgICAgICAgICAgICB1MiA9IFB5VW5pY29kZV9SRUFEKGtpbmQyLCBidWYyLCAwKTsKICAgICAgICAgICAgIHUgPSBQeVVuaWNvZGVfTmV3KHNsZW4sIG1heGNoYXIpOwogICAgICAgICAgICAgaWYgKCF1KQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh1LCAwLCBzZWxmLCAwLCBzbGVuKTsKLSAgICAgICAgICAgIHJraW5kID0gUHlVbmljb2RlX0tJTkQodSk7CiAKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShya2luZCwgUHlVbmljb2RlX0RBVEEodSksIHBvcywgdTIpOwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICAgICAgc3JjID0gc2J1ZjsKLSAgICAgICAgICAgIHdoaWxlICgtLW1heGNvdW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcysrOwotICAgICAgICAgICAgICAgIHNyYyArPSBwb3MgKiBQeVVuaWNvZGVfS0lORChzZWxmKTsKLSAgICAgICAgICAgICAgICBzbGVuIC09IHBvczsKLSAgICAgICAgICAgICAgICBpbmRleCArPSBwb3M7Ci0gICAgICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc3JjLCBQeVVuaWNvZGVfS0lORChzZWxmKSwgc2xlbiwgdTEsIDEpOwotICAgICAgICAgICAgICAgIGlmIChwb3MgPCAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUocmtpbmQsIFB5VW5pY29kZV9EQVRBKHUpLCBpbmRleCArIHBvcywgdTIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnModSwgMCwgc2VsZiwgMCwgc2xlbik7CisgICAgICAgICAgICByZXBsYWNlXzFjaGFyX2lucGxhY2UodSwgcG9zLCB1MSwgdTIsIG1heGNvdW50KTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGludCBya2luZCA9IHNraW5kOwpAQCAtMTA0MTIsOSArMTA2MTgsMjQgQEAKIHN0YXRpYyBpbnQKIHVuaWNvZGVfY29tcGFyZShQeU9iamVjdCAqc3RyMSwgUHlPYmplY3QgKnN0cjIpCiB7CisjZGVmaW5lIENPTVBBUkUoVFlQRTEsIFRZUEUyKSBcCisgICAgZG8geyBcCisgICAgICAgIFRZUEUxKiBwMSA9IChUWVBFMSAqKWRhdGExOyBcCisgICAgICAgIFRZUEUyKiBwMiA9IChUWVBFMiAqKWRhdGEyOyBcCisgICAgICAgIFRZUEUxKiBlbmQgPSBwMSArIGxlbjsgXAorICAgICAgICBQeV9VQ1M0IGMxLCBjMjsgXAorICAgICAgICBmb3IgKDsgcDEgIT0gZW5kOyBwMSsrLCBwMisrKSB7IFwKKyAgICAgICAgICAgIGMxID0gKnAxOyBcCisgICAgICAgICAgICBjMiA9ICpwMjsgXAorICAgICAgICAgICAgaWYgKGMxICE9IGMyKSBcCisgICAgICAgICAgICAgICAgcmV0dXJuIChjMSA8IGMyKSA/IC0xIDogMTsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICB3aGlsZSAoMCkKKwogICAgIGludCBraW5kMSwga2luZDI7CiAgICAgdm9pZCAqZGF0YTEsICpkYXRhMjsKLSAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGk7CisgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBsZW47CiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHN0cjEpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3RyMik7CkBAIC0xMDQyMiwxOSArMTA2NDMsMTE2IEBACiAgICAgZGF0YTIgPSBQeVVuaWNvZGVfREFUQShzdHIyKTsKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CiAgICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpOworICAgIGxlbiA9IFB5X01JTihsZW4xLCBsZW4yKTsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBsZW4xICYmIGkgPCBsZW4yOyArK2kpIHsKLSAgICAgICAgUHlfVUNTNCBjMSwgYzI7Ci0gICAgICAgIGMxID0gUHlVbmljb2RlX1JFQUQoa2luZDEsIGRhdGExLCBpKTsKLSAgICAgICAgYzIgPSBQeVVuaWNvZGVfUkVBRChraW5kMiwgZGF0YTIsIGkpOwotCi0gICAgICAgIGlmIChjMSAhPSBjMikKLSAgICAgICAgICAgIHJldHVybiAoYzEgPCBjMikgPyAtMSA6IDE7CisgICAgc3dpdGNoKGtpbmQxKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgY21wID0gbWVtY21wKGRhdGExLCBkYXRhMiwgbGVuKTsKKyAgICAgICAgICAgIC8qIG5vcm1hbGl6ZSByZXN1bHQgb2YgbWVtY21wKCkgaW50byB0aGUgcmFuZ2UgWy0xOyAxXSAqLworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MxLCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MxLCBQeV9VQ1M0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgc3dpdGNoKGtpbmQyKSB7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1M0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgIHsKKyAgICAgICAgc3dpdGNoKGtpbmQyKSB7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgIHsKKyNpZiBkZWZpbmVkKEhBVkVfV01FTUNNUCkgJiYgU0laRU9GX1dDSEFSX1QgPT0gNAorICAgICAgICAgICAgaW50IGNtcCA9IHdtZW1jbXAoKHdjaGFyX3QgKilkYXRhMSwgKHdjaGFyX3QgKilkYXRhMiwgbGVuKTsKKyAgICAgICAgICAgIC8qIG5vcm1hbGl6ZSByZXN1bHQgb2Ygd21lbWNtcCgpIGludG8gdGhlIHJhbmdlIFstMTsgMV0gKi8KKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworI2Vsc2UKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTNCwgUHlfVUNTNCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKICAgICB9CiAKLSAgICByZXR1cm4gKGxlbjEgPCBsZW4yKSA/IC0xIDogKGxlbjEgIT0gbGVuMik7CisgICAgaWYgKGxlbjEgPT0gbGVuMikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbjEgPCBsZW4yKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKKworI3VuZGVmIENPTVBBUkUKIH0KIAorUHlfTE9DQUwoaW50KQordW5pY29kZV9jb21wYXJlX2VxKFB5T2JqZWN0ICpzdHIxLCBQeU9iamVjdCAqc3RyMikKK3sKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhMSwgKmRhdGEyOworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCBjbXA7CisKKyAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIxKTsKKyAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMikgIT0gbGVuKQorICAgICAgICByZXR1cm4gMDsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyMSk7CisgICAgaWYgKFB5VW5pY29kZV9LSU5EKHN0cjIpICE9IGtpbmQpCisgICAgICAgIHJldHVybiAwOworICAgIGRhdGExID0gUHlVbmljb2RlX0RBVEEoc3RyMSk7CisgICAgZGF0YTIgPSBQeVVuaWNvZGVfREFUQShzdHIyKTsKKworICAgIGNtcCA9IG1lbWNtcChkYXRhMSwgZGF0YTIsIGxlbiAqIGtpbmQpOworICAgIHJldHVybiAoY21wID09IDApOworfQorCisKIGludAogUHlVbmljb2RlX0NvbXBhcmUoUHlPYmplY3QgKmxlZnQsIFB5T2JqZWN0ICpyaWdodCkKIHsKQEAgLTEwNDQyLDYgKzEwNzYwLDExIEBACiAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEWShyaWdodCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgLyogYSBzdHJpbmcgaXMgZXF1YWwgdG8gaXRzZWxmICovCisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKICAgICAgICAgcmV0dXJuIHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CiAgICAgfQogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC0xMDQ1MiwyOSArMTA3NzUsNTkgQEAKIH0KIAogaW50CitfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQoUHlPYmplY3QgKmxlZnQsIF9QeV9JZGVudGlmaWVyICpyaWdodCkKK3sKKyAgICBQeU9iamVjdCAqcmlnaHRfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQocmlnaHQpOyAgIC8qIGJvcnJvd2VkICovCisgICAgaWYgKHJpZ2h0X3N0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Db21wYXJlKGxlZnQsIHJpZ2h0X3N0cik7Cit9CisKK2ludAogUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoUHlPYmplY3QqIHVuaSwgY29uc3QgY2hhciogc3RyKQogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X1VDUzQgY2hyOwogCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sodW5pKSk7CiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh1bmkpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaSk7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaSk7Ci0gICAgLyogQ29tcGFyZSBVbmljb2RlIHN0cmluZyBhbmQgc291cmNlIGNoYXJhY3RlciBzZXQgc3RyaW5nICovCi0gICAgZm9yIChpID0gMDsgKGNociA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSAmJiBzdHJbaV07IGkrKykKLSAgICAgICAgaWYgKGNociAhPSBzdHJbaV0pCi0gICAgICAgICAgICByZXR1cm4gKGNociA8ICh1bnNpZ25lZCBjaGFyKShzdHJbaV0pKSA/IC0xIDogMTsKLSAgICAvKiBUaGlzIGNoZWNrIGtlZXBzIFB5dGhvbiBzdHJpbmdzIHRoYXQgZW5kIGluICdcMCcgZnJvbSBjb21wYXJpbmcgZXF1YWwKLSAgICAgdG8gQyBzdHJpbmdzIGlkZW50aWNhbCB1cCB0byB0aGF0IHBvaW50LiAqLwotICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpICE9IGkgfHwgY2hyKQotICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLwotICAgIGlmIChzdHJbaV0pCi0gICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLwotICAgIHJldHVybiAwOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmkpOworICAgICAgICBzaXplX3QgbGVuMSA9IChzaXplX3QpUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pKTsKKyAgICAgICAgc2l6ZV90IGxlbiwgbGVuMiA9IHN0cmxlbihzdHIpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIGxlbiA9IFB5X01JTihsZW4xLCBsZW4yKTsKKyAgICAgICAgY21wID0gbWVtY21wKGRhdGEsIHN0ciwgbGVuKTsKKyAgICAgICAgaWYgKGNtcCAhPSAwKSB7CisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlbjEgPiBsZW4yKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KKyAgICAgICAgaWYgKGxlbjIgPiBsZW4xKQorICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaSk7CisgICAgICAgIC8qIENvbXBhcmUgVW5pY29kZSBzdHJpbmcgYW5kIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHN0cmluZyAqLworICAgICAgICBmb3IgKGkgPSAwOyAoY2hyID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpICYmIHN0cltpXTsgaSsrKQorICAgICAgICAgICAgaWYgKGNociAhPSBzdHJbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIChjaHIgPCAodW5zaWduZWQgY2hhcikoc3RyW2ldKSkgPyAtMSA6IDE7CisgICAgICAgIC8qIFRoaXMgY2hlY2sga2VlcHMgUHl0aG9uIHN0cmluZ3MgdGhhdCBlbmQgaW4gJ1wwJyBmcm9tIGNvbXBhcmluZyBlcXVhbAorICAgICAgICAgdG8gQyBzdHJpbmdzIGlkZW50aWNhbCB1cCB0byB0aGF0IHBvaW50LiAqLworICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pKSAhPSBpIHx8IGNocikKKyAgICAgICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCisgICAgICAgIGlmIChzdHJbaV0pCisgICAgICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogfQogCiAKQEAgLTEwNDg1LDM2ICsxMDgzOCw0MyBAQAogUHlVbmljb2RlX1JpY2hDb21wYXJlKFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQsIGludCBvcCkKIHsKICAgICBpbnQgcmVzdWx0OworICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhsZWZ0KSAmJiBQeVVuaWNvZGVfQ2hlY2socmlnaHQpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwotICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGxlZnQpID09IC0xIHx8Ci0gICAgICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQorICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGxlZnQpIHx8ICFQeVVuaWNvZGVfQ2hlY2socmlnaHQpKQorICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGxlZnQpID09IC0xIHx8CisgICAgICAgIFB5VW5pY29kZV9SRUFEWShyaWdodCkgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGxlZnQgPT0gcmlnaHQpIHsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFB5X0VROgorICAgICAgICBjYXNlIFB5X0xFOgorICAgICAgICBjYXNlIFB5X0dFOgorICAgICAgICAgICAgLyogYSBzdHJpbmcgaXMgZXF1YWwgdG8gaXRzZWxmICovCisgICAgICAgICAgICB2ID0gUHlfVHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5X05FOgorICAgICAgICBjYXNlIFB5X0xUOgorICAgICAgICBjYXNlIFB5X0dUOgorICAgICAgICAgICAgdiA9IFB5X0ZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChsZWZ0KSAhPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyaWdodCkgfHwKLSAgICAgICAgICAgIFB5VW5pY29kZV9LSU5EKGxlZnQpICE9IFB5VW5pY29kZV9LSU5EKHJpZ2h0KSkgewotICAgICAgICAgICAgaWYgKG9wID09IFB5X0VRKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfRmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3AgPT0gUHlfTkUpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X1RydWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOworICAgIH0KKyAgICBlbHNlIGlmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkgeworICAgICAgICByZXN1bHQgPSB1bmljb2RlX2NvbXBhcmVfZXEobGVmdCwgcmlnaHQpOworICAgICAgICByZXN1bHQgXj0gKG9wID09IFB5X05FKTsKKyAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlKGxlZnQsIHJpZ2h0KTsKIAogICAgICAgICAvKiBDb252ZXJ0IHRoZSByZXR1cm4gdmFsdWUgdG8gYSBCb29sZWFuICovCiAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBQeV9FUToKLSAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0ID09IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTkU6Ci0gICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCAhPSAwKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFB5X0xFOgogICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgPD0gMCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNTMxLDE4ICsxMDg5MSwxNiBAQAogICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgcmV0dXJuIHY7CiAgICAgfQotCi0gICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworICAgIFB5X0lOQ1JFRih2KTsKKyAgICByZXR1cm4gdjsKIH0KIAogaW50CiBQeVVuaWNvZGVfQ29udGFpbnMoUHlPYmplY3QgKmNvbnRhaW5lciwgUHlPYmplY3QgKmVsZW1lbnQpCiB7CiAgICAgUHlPYmplY3QgKnN0ciwgKnN1YjsKLSAgICBpbnQga2luZDEsIGtpbmQyLCBraW5kOworICAgIGludCBraW5kMSwga2luZDI7CiAgICAgdm9pZCAqYnVmMSwgKmJ1ZjI7CiAgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOwogICAgIGludCByZXN1bHQ7CkBAIC0xMDU2MSwyMyArMTA5MTksMTggQEAKICAgICAgICAgUHlfREVDUkVGKHN1Yik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWIpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzdWIpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICB9CiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHN0cik7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdWIpOwotICAgIGtpbmQgPSBraW5kMTsKICAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc3RyKTsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3ViKTsKLSAgICBpZiAoa2luZDIgIT0ga2luZCkgewotICAgICAgICBpZiAoa2luZDIgPiBraW5kKSB7CisgICAgaWYgKGtpbmQyICE9IGtpbmQxKSB7CisgICAgICAgIGlmIChraW5kMiA+IGtpbmQxKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHN1Yiwga2luZCk7CisgICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWIsIGtpbmQxKTsKICAgICB9CiAgICAgaWYgKCFidWYyKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwpAQCAtMTA1ODcsNyArMTA5NDAsNyBAQAogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWIpOwogCi0gICAgc3dpdGNoIChraW5kKSB7CisgICAgc3dpdGNoIChraW5kMSkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIHJlc3VsdCA9IHVjczFsaWJfZmluZChidWYxLCBsZW4xLCBidWYyLCBsZW4yLCAwKSAhPSAtMTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDYwNSw3ICsxMDk1OCw3IEBACiAgICAgUHlfREVDUkVGKHN0cik7CiAgICAgUHlfREVDUkVGKHN1Yik7CiAKLSAgICBpZiAoa2luZDIgIT0ga2luZCkKKyAgICBpZiAoa2luZDIgIT0ga2luZDEpCiAgICAgICAgIFB5TWVtX0ZyZWUoYnVmMik7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTA2ODEsNyArMTEwMzQsOCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGxlZnQgPSAqcF9sZWZ0OwotICAgIGlmIChyaWdodCA9PSBOVUxMIHx8IGxlZnQgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrKGxlZnQpKSB7CisgICAgaWYgKHJpZ2h0ID09IE5VTEwgfHwgbGVmdCA9PSBOVUxMCisgICAgICAgIHx8ICFQeVVuaWNvZGVfQ2hlY2sobGVmdCkgfHwgIVB5VW5pY29kZV9DaGVjayhyaWdodCkpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xMDcyMSwxNSArMTEwNzUsOSBAQAogICAgICAgICAmJiAhKFB5VW5pY29kZV9JU19BU0NJSShsZWZ0KSAmJiAhUHlVbmljb2RlX0lTX0FTQ0lJKHJpZ2h0KSkpCiAgICAgewogICAgICAgICAvKiBhcHBlbmQgaW5wbGFjZSAqLwotICAgICAgICBpZiAodW5pY29kZV9yZXNpemUocF9sZWZ0LCBuZXdfbGVuKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBYWFggaWYgX1B5VW5pY29kZV9SZXNpemUoKSBmYWlscywgJ2xlZnQnIGhhcyBiZWVuCi0gICAgICAgICAgICAgKiBkZWFsbG9jYXRlZCBzbyBpdCBjYW5ub3QgYmUgcHV0IGJhY2sgaW50bwotICAgICAgICAgICAgICogJ3ZhcmlhYmxlJy4gIFRoZSBNZW1vcnlFcnJvciBpcyByYWlzZWQgd2hlbiB0aGVyZQotICAgICAgICAgICAgICogaXMgbm8gdmFsdWUgaW4gJ3ZhcmlhYmxlJywgd2hpY2ggbWlnaHQgKHZlcnkKLSAgICAgICAgICAgICAqIHJlbW90ZWx5KSBiZSBhIGNhdXNlIG9mIGluY29tcGF0aWJpbGl0aWVzLgotICAgICAgICAgICAgICovCisgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShwX2xlZnQsIG5ld19sZW4pICE9IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9CisKICAgICAgICAgLyogY29weSAncmlnaHQnIGludG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBhcmVhIG9mICdsZWZ0JyAqLwogICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycygqcF9sZWZ0LCBsZWZ0X2xlbiwgcmlnaHQsIDAsIHJpZ2h0X2xlbik7CiAgICAgfQpAQCAtMTA3ODUsOCArMTExMzMsMTAgQEAKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdWJzdHJpbmcpOwotICAgIGlmIChraW5kMiA+IGtpbmQxKQorICAgIGlmIChraW5kMiA+IGtpbmQxKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOworICAgIH0KICAgICBraW5kID0ga2luZDE7CiAgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzdWJzdHJpbmcpOwpAQCAtMTA4NTcsMjMgKzExMjA3LDI1IEBACiB9CiAKIFB5RG9jX1NUUlZBUihleHBhbmR0YWJzX19kb2NfXywKLSAgICAgICAgICAgICAiUy5leHBhbmR0YWJzKFt0YWJzaXplXSkgLT4gc3RyXG5cCisgICAgICAgICAgICAgIlMuZXhwYW5kdGFicyh0YWJzaXplPTgpIC0+IHN0clxuXAogXG5cCiBSZXR1cm4gYSBjb3B5IG9mIFMgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSBleHBhbmRlZCB1c2luZyBzcGFjZXMuXG5cCiBJZiB0YWJzaXplIGlzIG5vdCBnaXZlbiwgYSB0YWIgc2l6ZSBvZiA4IGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0KgotdW5pY29kZV9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVfZXhwYW5kdGFicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5X3NzaXplX3QgaSwgaiwgbGluZV9wb3MsIHNyY19sZW4sIGluY3I7CiAgICAgUHlfVUNTNCBjaDsKICAgICBQeU9iamVjdCAqdTsKICAgICB2b2lkICpzcmNfZGF0YSwgKmRlc3RfZGF0YTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InRhYnNpemUiLCAwfTsKICAgICBpbnQgdGFic2l6ZSA9IDg7CiAgICAgaW50IGtpbmQ7CiAgICAgaW50IGZvdW5kOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpleHBhbmR0YWJzIiwgJnRhYnNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8aTpleHBhbmR0YWJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0YWJzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQpAQCAtMTA5NjQsMTAgKzExMzE2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTEwMzUsMzkgKzExMzkxLDggQEAKICAgICAgICAgX1B5VW5pY29kZV9IQVNIKHNlbGYpID0gMDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgLyogVGhlIGhhc2ggZnVuY3Rpb24gYXMgYSBtYWNybywgZ2V0cyBleHBhbmRlZCB0aHJlZSB0aW1lcyBiZWxvdy4gKi8KLSNkZWZpbmUgSEFTSChQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHggXj0gKFB5X3VoYXNoX3QpICpQIDw8IDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKC0tbGVuID49IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIChQeV91aGFzaF90KSAqUCsrOyAgXAotCi0gICAgeCA9IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5wcmVmaXg7Ci0gICAgc3dpdGNoIChQeVVuaWNvZGVfS0lORChzZWxmKSkgewotICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6IHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYyA9IFB5VW5pY29kZV8xQllURV9EQVRBKHNlbGYpOwotICAgICAgICBIQVNIKGMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDogewotICAgICAgICBjb25zdCBQeV9VQ1MyICpzID0gUHlVbmljb2RlXzJCWVRFX0RBVEEoc2VsZik7Ci0gICAgICAgIEhBU0gocyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OiB7Ci0gICAgICAgIFB5X1VDUzQgKmw7Ci0gICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChzZWxmKSA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCAmJgotICAgICAgICAgICAgICAgIkltcG9zc2libGUgc3dpdGNoIGNhc2UgaW4gdW5pY29kZV9oYXNoIik7Ci0gICAgICAgIGwgPSBQeVVuaWNvZGVfNEJZVEVfREFUQShzZWxmKTsKLSAgICAgICAgSEFTSChsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICB4IF49IChQeV91aGFzaF90KSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKLSAgICB4IF49IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5zdWZmaXg7Ci0KLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOworICAgIHggPSBfUHlfSGFzaEJ5dGVzKFB5VW5pY29kZV9EQVRBKHNlbGYpLAorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpICogUHlVbmljb2RlX0tJTkQoc2VsZikpOwogICAgIF9QeVVuaWNvZGVfSEFTSChzZWxmKSA9IHg7CiAgICAgcmV0dXJuIHg7CiB9CkBAIC0xMTA5MCwxMCArMTE0MTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgxLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMTYyMyw2ICsxMTk1Miw3IEBACiAgICAgaW50IGtpbmQ7CiAgICAgUHlfc3NpemVfdCBpLCBqLCBsZW47CiAgICAgQkxPT01fTUFTSyBzZXBtYXNrOworICAgIFB5X3NzaXplX3Qgc2VwbGVuOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSB8fCBQeVVuaWNvZGVfUkVBRFkoc2Vwb2JqKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMTYzMCwyNCArMTE5NjAsMzUgQEAKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpOworICAgIHNlcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlcG9iaik7CiAgICAgc2VwbWFzayA9IG1ha2VfYmxvb21fbWFzayhQeVVuaWNvZGVfS0lORChzZXBvYmopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoc2Vwb2JqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlcG9iaikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwbGVuKTsKIAogICAgIGkgPSAwOwogICAgIGlmIChzdHJpcHR5cGUgIT0gUklHSFRTVFJJUCkgewotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJgotICAgICAgICAgICAgICAgQkxPT01fTUVNQkVSKHNlcG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpLCBzZXBvYmopKSB7CisgICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgICAgICBpZiAoIUJMT09NKHNlcG1hc2ssIGNoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfRmluZENoYXIoc2Vwb2JqLCBjaCwgMCwgc2VwbGVuLCAxKSA8IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBqID0gbGVuOwogICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7Ci0gICAgICAgIGRvIHsKKyAgICAgICAgai0tOworICAgICAgICB3aGlsZSAoaiA+PSBpKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaik7CisgICAgICAgICAgICBpZiAoIUJMT09NKHNlcG1hc2ssIGNoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfRmluZENoYXIoc2Vwb2JqLCBjaCwgMCwgc2VwbGVuLCAxKSA8IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBqLS07Ci0gICAgICAgIH0gd2hpbGUgKGogPj0gaSAmJgotICAgICAgICAgICAgICAgICBCTE9PTV9NRU1CRVIoc2VwbWFzaywgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaiksIHNlcG9iaikpOworICAgICAgICB9CisKICAgICAgICAgaisrOwogICAgIH0KIApAQCAtMTE2OTQsMzAgKzEyMDM1LDYzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZG9fc3RyaXAoUHlPYmplY3QgKnNlbGYsIGludCBzdHJpcHR5cGUpCiB7Ci0gICAgaW50IGtpbmQ7Ci0gICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKIAotICAgIGkgPSAwOwotICAgIGlmIChzdHJpcHR5cGUgIT0gUklHSFRTVFJJUCkgewotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpKSB7Ci0gICAgICAgICAgICBpKys7CisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSShzZWxmKSkgeworICAgICAgICBQeV9VQ1MxICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEoc2VsZik7CisKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gUklHSFRTVFJJUCkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MxIGNoID0gZGF0YVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIV9QeV9hc2NpaV93aGl0ZXNwYWNlW2NoXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaiA9IGxlbjsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKKyAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIHdoaWxlIChqID49IGkpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MxIGNoID0gZGF0YVtqXTsKKyAgICAgICAgICAgICAgICBpZiAoIV9QeV9hc2NpaV93aGl0ZXNwYWNlW2NoXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgai0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaisrOwogICAgICAgICB9CiAgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOworICAgICAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAKLSAgICBqID0gbGVuOwotICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7Ci0gICAgICAgIGRvIHsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gUklHSFRTVFJJUCkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTU1BBQ0UoY2gpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBqID0gbGVuOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgewogICAgICAgICAgICAgai0tOwotICAgICAgICB9IHdoaWxlIChqID49IGkgJiYgUHlfVU5JQ09ERV9JU1NQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGopKSk7Ci0gICAgICAgIGorKzsKKyAgICAgICAgICAgIHdoaWxlIChqID49IGkpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaik7CisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTU1BBQ0UoY2gpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqKys7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gUHlVbmljb2RlX1N1YnN0cmluZyhzZWxmLCBpLCBqKTsKQEAgLTExNzI5LDcgKzEyMTAzLDcgQEAKIHsKICAgICBQeU9iamVjdCAqc2VwID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAoY2hhciAqKXN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoc2VwICE9IE5VTEwgJiYgc2VwICE9IFB5X05vbmUpIHsKQEAgLTExOTQxLDcgKzEyMzE1LDcgQEAKICAgICBQeV9zc2l6ZV90IGlzaXplOwogICAgIFB5X3NzaXplX3Qgb3NpemUsIHNxdW90ZSwgZHF1b3RlLCBpLCBvOwogICAgIFB5X1VDUzQgbWF4LCBxdW90ZTsKLSAgICBpbnQgaWtpbmQsIG9raW5kOworICAgIGludCBpa2luZCwgb2tpbmQsIHVuY2hhbmdlZDsKICAgICB2b2lkICppZGF0YSwgKm9kYXRhOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh1bmljb2RlKSA9PSAtMSkKQEAgLTExOTUyLDcgKzEyMzI2LDcgQEAKIAogICAgIC8qIENvbXB1dGUgbGVuZ3RoIG9mIG91dHB1dCwgcXVvdGUgY2hhcmFjdGVycywgYW5kCiAgICAgICAgbWF4aW11bSBjaGFyYWN0ZXIgKi8KLSAgICBvc2l6ZSA9IDI7IC8qIHF1b3RlcyAqLworICAgIG9zaXplID0gMDsKICAgICBtYXggPSAxMjc7CiAgICAgc3F1b3RlID0gZHF1b3RlID0gMDsKICAgICBpa2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwpAQCAtMTE5ODMsNyArMTIzNTcsOSBAQAogICAgIH0KIAogICAgIHF1b3RlID0gJ1wnJzsKKyAgICB1bmNoYW5nZWQgPSAob3NpemUgPT0gaXNpemUpOwogICAgIGlmIChzcXVvdGUpIHsKKyAgICAgICAgdW5jaGFuZ2VkID0gMDsKICAgICAgICAgaWYgKGRxdW90ZSkKICAgICAgICAgICAgIC8qIEJvdGggc3F1b3RlIGFuZCBkcXVvdGUgcHJlc2VudC4gVXNlIHNxdW90ZSwKICAgICAgICAgICAgICAgIGFuZCBlc2NhcGUgdGhlbSAqLwpAQCAtMTE5OTEsNiArMTIzNjcsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBxdW90ZSA9ICciJzsKICAgICB9CisgICAgb3NpemUgKz0gMjsgICAvKiBxdW90ZXMgKi8KIAogICAgIHJlcHIgPSBQeVVuaWNvZGVfTmV3KG9zaXplLCBtYXgpOwogICAgIGlmIChyZXByID09IE5VTEwpCkBAIC0xMjAwMCw4MSArMTIzNzcsODcgQEAKIAogICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIDAsIHF1b3RlKTsKICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvc2l6ZS0xLCBxdW90ZSk7CisgICAgaWYgKHVuY2hhbmdlZCkgeworICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXByLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwLCBvID0gMTsgaSA8IGlzaXplOyBpKyspIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChpa2luZCwgaWRhdGEsIGkpOwogCi0gICAgZm9yIChpID0gMCwgbyA9IDE7IGkgPCBpc2l6ZTsgaSsrKSB7Ci0gICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChpa2luZCwgaWRhdGEsIGkpOwotCi0gICAgICAgIC8qIEVzY2FwZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzICovCi0gICAgICAgIGlmICgoY2ggPT0gcXVvdGUpIHx8IChjaCA9PSAnXFwnKSkgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBNYXAgc3BlY2lhbCB3aGl0ZXNwYWNlIHRvICdcdCcsIFxuJywgJ1xyJyAqLwotICAgICAgICBpZiAoY2ggPT0gJ1x0JykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3QnKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnbicpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoID09ICdccicpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdyJyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBNYXAgbm9uLXByaW50YWJsZSBVUyBBU0NJSSB0byAnXHhoaCcgKi8KLSAgICAgICAgZWxzZSBpZiAoY2ggPCAnICcgfHwgY2ggPT0gMHg3RikgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIENvcHkgQVNDSUkgY2hhcmFjdGVycyBhcy1pcyAqLwotICAgICAgICBlbHNlIGlmIChjaCA8IDB4N0YpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogTm9uLUFTQ0lJIGNoYXJhY3RlcnMgKi8KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBNYXAgVW5pY29kZSB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMKLSAgICAgICAgICAgICAgIChjYXRlZ29yaWVzIFoqIGFuZCBDKiBleGNlcHQgQVNDSUkgc3BhY2UpCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTUFJJTlRBQkxFKGNoKSkgeworICAgICAgICAgICAgLyogRXNjYXBlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgKi8KKyAgICAgICAgICAgIGlmICgoY2ggPT0gcXVvdGUpIHx8IChjaCA9PSAnXFwnKSkgewogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICAgICAgLyogTWFwIDgtYml0IGNoYXJhY3RlcnMgdG8gJ1x4aGgnICovCi0gICAgICAgICAgICAgICAgaWYgKGNoIDw9IDB4ZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweDAwMEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogTWFwIDE2LWJpdCBjaGFyYWN0ZXJzIHRvICdcdXh4eHgnICovCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPD0gMHhmZmZmKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3UnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIE1hcCAyMS1iaXQgY2hhcmFjdGVycyB0byAnXFUwMHh4eHh4eCcgKi8KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnVScpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjgpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDIwKSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTYpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxMikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4Rl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIENvcHkgY2hhcmFjdGVycyBhcy1pcyAqLwotICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE1hcCBzcGVjaWFsIHdoaXRlc3BhY2UgdG8gJ1x0JywgXG4nLCAnXHInICovCisgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JykgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xuJykgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnbicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAncicpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBNYXAgbm9uLXByaW50YWJsZSBVUyBBU0NJSSB0byAnXHhoaCcgKi8KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoIDwgJyAnIHx8IGNoID09IDB4N0YpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweDAwMEZdKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDb3B5IEFTQ0lJIGNoYXJhY3RlcnMgYXMtaXMgKi8KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHg3RikgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBOb24tQVNDSUkgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogTWFwIFVuaWNvZGUgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgKGNhdGVnb3JpZXMgWiogYW5kIEMqIGV4Y2VwdCBBU0NJSSBzcGFjZSkKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1BSSU5UQUJMRShjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgLyogTWFwIDgtYml0IGNoYXJhY3RlcnMgdG8gJ1x4aGgnICovCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA8PSAweGZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweDAwMEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogTWFwIDE2LWJpdCBjaGFyYWN0ZXJzIHRvICdcdXh4eHgnICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoIDw9IDB4ZmZmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndScpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogTWFwIDIxLWJpdCBjaGFyYWN0ZXJzIHRvICdcVTAweHh4eHh4JyAqLworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyNCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyMCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxNikgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxMikgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIENvcHkgY2hhcmFjdGVycyBhcy1pcyAqLworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjEwNCwxMCArMTI0ODcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgtMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTIxMzYsMTAgKzEyNTIzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoLTEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTEyNDk2LDI4ICsxMjg4Nyw3NCBAQAogICAgIHJldHVybiBjYXNlX29wZXJhdGlvbihzZWxmLCBkb19zd2FwY2FzZSk7CiB9CiAKLVB5RG9jX1NUUlZBUihtYWtldHJhbnNfX2RvY19fLAotICAgICAgICAgICAgICJzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKSAtPiBkaWN0IChzdGF0aWMgbWV0aG9kKVxuXAotXG5cCi1SZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cblwKLUlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGVcblwKLW9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuXG5cCi1DaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLlxuXAotSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kXG5cCi1pbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlXG5cCi1jaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXRcblwKLW11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LiIpOworLypbY2xpbmljXQogCi1zdGF0aWMgUHlPYmplY3QqCi11bmljb2RlX21ha2V0cmFucyhQeU9iamVjdCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCitAc3RhdGljbWV0aG9kCitzdHIubWFrZXRyYW5zIGFzIHVuaWNvZGVfbWFrZXRyYW5zCisKKyAgeDogb2JqZWN0CisKKyAgeTogdW5pY29kZT1OVUxMCisKKyAgejogdW5pY29kZT1OVUxMCisKKyAgLworCitSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS4KKworSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZQorb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS4KK0NoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuCitJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmQKK2luIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGUKK2NoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdAorbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUih1bmljb2RlX21ha2V0cmFuc19fZG9jX18sCisibWFrZXRyYW5zKHgsIHk9Tm9uZSwgej1Ob25lKVxuIgorIlJldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLlxuIgorIlxuIgorIklmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGVcbiIKKyJvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLlxuIgorIkNoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG4iCisiSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kXG4iCisiaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZVxuIgorImNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdFxuIgorIm11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LiIpOworCisjZGVmaW5lIFVOSUNPREVfTUFLRVRSQU5TX01FVEhPRERFRiAgICBcCisgICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pdW5pY29kZV9tYWtldHJhbnMsIE1FVEhfVkFSQVJHU3xNRVRIX1NUQVRJQywgdW5pY29kZV9tYWtldHJhbnNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zX2ltcGwodm9pZCAqbnVsbCwgUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFucyh2b2lkICpudWxsLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqeCwgKnkgPSBOVUxMLCAqeiA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKng7CisgICAgUHlPYmplY3QgKnkgPSBOVUxMOworICAgIFB5T2JqZWN0ICp6ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiT3xVVTptYWtldHJhbnMiLAorICAgICAgICAmeCwgJnksICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVfbWFrZXRyYW5zX2ltcGwobnVsbCwgeCwgeSwgeik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zX2ltcGwodm9pZCAqbnVsbCwgUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeikKKy8qW2NsaW5pYyBjaGVja3N1bTogN2Y3NmY0MTRhMGRmZDBjNjE0ZTBkNDcxNzg3MmVlYjUyMDUxNmRhN10qLworewogICAgIFB5T2JqZWN0ICpuZXcgPSBOVUxMLCAqa2V5LCAqdmFsdWU7CiAgICAgUHlfc3NpemVfdCBpID0gMDsKICAgICBpbnQgcmVzOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfFVVOm1ha2V0cmFucyIsICZ4LCAmeSwgJnopKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXcgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKCFuZXcpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTI3MjgsNiArMTMxNjUsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgLTEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTI3NDQsNiArMTMxODMsOCBAQAogICAgIH0KICAgICByZXN1bHQgPSB0YWlsbWF0Y2goc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kLCAtMSk7CiAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXN1bHQpOwogfQogCkBAIC0xMjc3Nyw2ICsxMzIxOCw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICByZXN1bHQgPSB0YWlsbWF0Y2goc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kLCArMSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAgICAgICAgICAgICB9CkBAIC0xMjc5MiwzMyArMTMyMzUsNDggQEAKICAgICB9CiAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgKzEpOwogICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKIH0KIAogUHlfTE9DQUxfSU5MSU5FKHZvaWQpCiBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7Ci0gICAgd3JpdGVyLT5zaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgod3JpdGVyLT5idWZmZXIpOworICAgIGlmICghd3JpdGVyLT5yZWFkb25seSkKKyAgICAgICAgd3JpdGVyLT5zaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgod3JpdGVyLT5idWZmZXIpOworICAgIGVsc2UgeworICAgICAgICAvKiBDb3B5LW9uLXdyaXRlIG1vZGU6IHNldCBidWZmZXIgc2l6ZSB0byAwIHNvCisgICAgICAgICAqIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgpIHdpbGwgY29weSAoYW5kIGVubGFyZ2UpIHRoZSBidWZmZXIgb24KKyAgICAgICAgICogbmV4dCB3cml0ZS4gKi8KKyAgICAgICAgd3JpdGVyLT5zaXplID0gMDsKKyAgICB9CiAgICAgd3JpdGVyLT5tYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHdyaXRlci0+YnVmZmVyKTsKICAgICB3cml0ZXItPmRhdGEgPSBQeVVuaWNvZGVfREFUQSh3cml0ZXItPmJ1ZmZlcik7CiAgICAgd3JpdGVyLT5raW5kID0gUHlVbmljb2RlX0tJTkQod3JpdGVyLT5idWZmZXIpOwogfQogCiB2b2lkCi1fUHlVbmljb2RlV3JpdGVyX0luaXQoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9zc2l6ZV90IG1pbl9sZW5ndGgpCitfUHlVbmljb2RlV3JpdGVyX0luaXQoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewogICAgIG1lbXNldCh3cml0ZXIsIDAsIHNpemVvZigqd3JpdGVyKSk7CiAjaWZkZWYgUHlfREVCVUcKICAgICB3cml0ZXItPmtpbmQgPSA1OyAgICAvKiBpbnZhbGlkIGtpbmQgKi8KICNlbmRpZgotICAgIHdyaXRlci0+bWluX2xlbmd0aCA9IFB5X01BWChtaW5fbGVuZ3RoLCAxMDApOwotICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gKG1pbl9sZW5ndGggPiAwKTsKKyAgICB3cml0ZXItPm1pbl9jaGFyID0gMTI3OwogfQogCiBpbnQKIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZUludGVybmFsKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuZ3RoLCBQeV9VQ1M0IG1heGNoYXIpCiB7CisjaWZkZWYgTVNfV0lORE9XUworICAgLyogT24gV2luZG93cywgb3ZlcmFsbG9jYXRlIGJ5IDUwJSBpcyB0aGUgYmVzdCBmYWN0b3IgKi8KKyMgIGRlZmluZSBPVkVSQUxMT0NBVEVfRkFDVE9SIDIKKyNlbHNlCisgICAvKiBPbiBMaW51eCwgb3ZlcmFsbG9jYXRlIGJ5IDI1JSBpcyB0aGUgYmVzdCBmYWN0b3IgKi8KKyMgIGRlZmluZSBPVkVSQUxMT0NBVEVfRkFDVE9SIDQKKyNlbmRpZgogICAgIFB5X3NzaXplX3QgbmV3bGVuOwogICAgIFB5T2JqZWN0ICpuZXdidWZmZXI7CiAKQEAgLTEyODMwLDI5ICsxMzI4OCwzMCBAQAogICAgIH0KICAgICBuZXdsZW4gPSB3cml0ZXItPnBvcyArIGxlbmd0aDsKIAorICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgd3JpdGVyLT5taW5fY2hhcik7CisKICAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKLSAgICAgICAgICAgIC8qIG92ZXJhbGxvY2F0ZSAyNSUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZXNpemUgKi8KLSAgICAgICAgICAgIGlmIChuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gNCkpCi0gICAgICAgICAgICAgICAgbmV3bGVuICs9IG5ld2xlbiAvIDQ7Ci0gICAgICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQotICAgICAgICAgICAgICAgIG5ld2xlbiA9IHdyaXRlci0+bWluX2xlbmd0aDsKKyAgICAgICAgYXNzZXJ0KCF3cml0ZXItPnJlYWRvbmx5KTsKKyAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlCisgICAgICAgICAgICAmJiBuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUikpIHsKKyAgICAgICAgICAgIC8qIG92ZXJhbGxvY2F0ZSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlYWxsb2MoKSAqLworICAgICAgICAgICAgbmV3bGVuICs9IG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1I7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKKyAgICAgICAgICAgIG5ld2xlbiA9IHdyaXRlci0+bWluX2xlbmd0aDsKKwogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IFB5VW5pY29kZV9OZXcobmV3bGVuLCBtYXhjaGFyKTsKICAgICAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIGlmIChuZXdsZW4gPiB3cml0ZXItPnNpemUpIHsKLSAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7Ci0gICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgMjUlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVzaXplICovCi0gICAgICAgICAgICBpZiAobmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIDQpKQotICAgICAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyA0OwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKLSAgICAgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisgICAgZWxzZSBpZiAobmV3bGVuID4gd3JpdGVyLT5zaXplKSB7CisgICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZQorICAgICAgICAgICAgJiYgbmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1IpKSB7CisgICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZWFsbG9jKCkgKi8KKyAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SOwogICAgICAgICB9CisgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCisgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CiAKICAgICAgICAgaWYgKG1heGNoYXIgPiB3cml0ZXItPm1heGNoYXIgfHwgd3JpdGVyLT5yZWFkb25seSkgewogICAgICAgICAgICAgLyogcmVzaXplICsgd2lkZW4gKi8KQEAgLTEyODcwLDcgKzEzMzI5LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7Ci0gICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgfQogICAgIGVsc2UgaWYgKG1heGNoYXIgPiB3cml0ZXItPm1heGNoYXIpIHsKICAgICAgICAgYXNzZXJ0KCF3cml0ZXItPnJlYWRvbmx5KTsKQEAgLTEyODgxLDkgKzEzMzM5LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci0+YnVmZmVyLCAwLCB3cml0ZXItPnBvcyk7CiAgICAgICAgIFB5X0RFQ1JFRih3cml0ZXItPmJ1ZmZlcik7CiAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gbmV3YnVmZmVyOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwogICAgIH0KKyAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwogICAgIHJldHVybiAwOworCisjdW5kZWYgT1ZFUkFMTE9DQVRFX0ZBQ1RPUgorfQorCitQeV9MT0NBTF9JTkxJTkUoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9VQ1M0IGNoKQoreworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCAxLCBjaCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgY2gpOworICAgIHdyaXRlci0+cG9zKys7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9VQ1M0IGNoKQoreworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIGNoKTsKIH0KIAogaW50CkBAIC0xMjkwMCwxMSArMTMzNzYsMTAgQEAKICAgICBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7CiAgICAgaWYgKG1heGNoYXIgPiB3cml0ZXItPm1heGNoYXIgfHwgbGVuID4gd3JpdGVyLT5zaXplIC0gd3JpdGVyLT5wb3MpIHsKICAgICAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwgJiYgIXdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7CisgICAgICAgICAgICB3cml0ZXItPnJlYWRvbmx5ID0gMTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihzdHIpOwogICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBzdHI7CiAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwotICAgICAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7Ci0gICAgICAgICAgICB3cml0ZXItPnNpemUgPSAwOwogICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gbGVuOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTEyOTE3LDI4ICsxMzM5MiwxNDMgQEAKICAgICByZXR1cm4gMDsKIH0KIAoraW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCit7CisgICAgUHlfVUNTNCBtYXhjaGFyOworICAgIFB5X3NzaXplX3QgbGVuOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBhc3NlcnQoMCA8PSBzdGFydCk7CisgICAgYXNzZXJ0KGVuZCA8PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpKTsKKyAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKKworICAgIGlmIChlbmQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBzdHIpOworCisgICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpID4gd3JpdGVyLT5tYXhjaGFyKQorICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihzdHIsIHN0YXJ0LCBlbmQpOworICAgIGVsc2UKKyAgICAgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICBsZW4gPSBlbmQgLSBzdGFydDsKKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIG1heGNoYXIpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgc3RhcnQsIGxlbik7CisgICAgd3JpdGVyLT5wb3MgKz0gbGVuOworICAgIHJldHVybiAwOworfQorCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXNjaWksIFB5X3NzaXplX3QgbGVuKQoreworICAgIGlmIChsZW4gPT0gLTEpCisgICAgICAgIGxlbiA9IHN0cmxlbihhc2NpaSk7CisKKyAgICBhc3NlcnQodWNzMWxpYl9maW5kX21heF9jaGFyKChQeV9VQ1MxKilhc2NpaSwgKFB5X1VDUzEqKWFzY2lpICsgbGVuKSA8IDEyOCk7CisKKyAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCAmJiAhd3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKKyAgICAgICAgUHlPYmplY3QgKnN0cjsKKworICAgICAgICBzdHIgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShhc2NpaSwgbGVuKTsKKyAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOworICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IHN0cjsKKyAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gbGVuOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCAxMjcpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzd2l0Y2ggKHdyaXRlci0+a2luZCkKKyAgICB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIGNvbnN0IFB5X1VDUzEgKnN0ciA9IChjb25zdCBQeV9VQ1MxICopYXNjaWk7CisgICAgICAgIFB5X1VDUzEgKmRhdGEgPSB3cml0ZXItPmRhdGE7CisKKyAgICAgICAgUHlfTUVNQ1BZKGRhdGEgKyB3cml0ZXItPnBvcywgc3RyLCBsZW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUygKKyAgICAgICAgICAgIFB5X1VDUzEsIFB5X1VDUzIsCisgICAgICAgICAgICBhc2NpaSwgYXNjaWkgKyBsZW4sCisgICAgICAgICAgICAoUHlfVUNTMiAqKXdyaXRlci0+ZGF0YSArIHdyaXRlci0+cG9zKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoCisgICAgICAgICAgICBQeV9VQ1MxLCBQeV9VQ1M0LAorICAgICAgICAgICAgYXNjaWksIGFzY2lpICsgbGVuLAorICAgICAgICAgICAgKFB5X1VDUzQgKil3cml0ZXItPmRhdGEgKyB3cml0ZXItPnBvcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7CisgICAgfQorCisgICAgd3JpdGVyLT5wb3MgKz0gbGVuOworICAgIHJldHVybiAwOworfQorCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIsIFB5X3NzaXplX3QgbGVuKQoreworICAgIFB5X1VDUzQgbWF4Y2hhcjsKKworICAgIG1heGNoYXIgPSB1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoKFB5X1VDUzEqKXN0ciwgKFB5X1VDUzEqKXN0ciArIGxlbik7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgbWF4Y2hhcikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB1bmljb2RlX3dyaXRlX2NzdHIod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBzdHIsIGxlbik7CisgICAgd3JpdGVyLT5wb3MgKz0gbGVuOworICAgIHJldHVybiAwOworfQorCiBQeU9iamVjdCAqCiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CisgICAgUHlPYmplY3QgKnN0cjsKICAgICBpZiAod3JpdGVyLT5wb3MgPT0gMCkgewotICAgICAgICBQeV9YREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKKyAgICAgICAgUHlfQ0xFQVIod3JpdGVyLT5idWZmZXIpOwogICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKICAgICB9CiAgICAgaWYgKHdyaXRlci0+cmVhZG9ubHkpIHsKLSAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKSA9PSB3cml0ZXItPnBvcyk7Ci0gICAgICAgIHJldHVybiB3cml0ZXItPmJ1ZmZlcjsKKyAgICAgICAgc3RyID0gd3JpdGVyLT5idWZmZXI7CisgICAgICAgIHdyaXRlci0+YnVmZmVyID0gTlVMTDsKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cikgPT0gd3JpdGVyLT5wb3MpOworICAgICAgICByZXR1cm4gc3RyOwogICAgIH0KICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgod3JpdGVyLT5idWZmZXIpICE9IHdyaXRlci0+cG9zKSB7CiAgICAgICAgIFB5T2JqZWN0ICpuZXdidWZmZXI7CiAgICAgICAgIG5ld2J1ZmZlciA9IHJlc2l6ZV9jb21wYWN0KHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcyk7CiAgICAgICAgIGlmIChuZXdidWZmZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKKyAgICAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gTlVMTDsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gbmV3YnVmZmVyOwogICAgIH0KLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHdyaXRlci0+YnVmZmVyLCAxKSk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0X3JlYWR5KHdyaXRlci0+YnVmZmVyKTsKKyAgICBzdHIgPSB3cml0ZXItPmJ1ZmZlcjsKKyAgICB3cml0ZXItPmJ1ZmZlciA9IE5VTEw7CisgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShzdHIsIDEpKTsKKyAgICByZXR1cm4gdW5pY29kZV9yZXN1bHRfcmVhZHkoc3RyKTsKIH0KIAogdm9pZApAQCAtMTI5NzMsNyArMTM1NjMsNyBAQAogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlVbmljb2RlX0Zvcm1hdEFkdmFuY2VkV3JpdGVyKCZ3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBmb3JtYXRfc3BlYywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKGZvcm1hdF9zcGVjKSk7CkBAIC0xMzA0Miw3ICsxMzYzMiw4IEBACiAgICAgeyJ0aXRsZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV90aXRsZSwgTUVUSF9OT0FSR1MsIHRpdGxlX19kb2NfX30sCiAgICAgeyJjZW50ZXIiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfY2VudGVyLCBNRVRIX1ZBUkFSR1MsIGNlbnRlcl9fZG9jX199LAogICAgIHsiY291bnQiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfY291bnQsIE1FVEhfVkFSQVJHUywgY291bnRfX2RvY19ffSwKLSAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLCBleHBhbmR0YWJzX19kb2NfX30sCisgICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2V4cGFuZHRhYnMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCiAgICAgeyJwYXJ0aXRpb24iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcGFydGl0aW9uLCBNRVRIX08sIHBhcnRpdGlvbl9fZG9jX199LAogICAgIHsiaW5kZXgiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfaW5kZXgsIE1FVEhfVkFSQVJHUywgaW5kZXhfX2RvY19ffSwKQEAgLTEzMDU0LDcgKzEzNjQ1LDggQEAKICAgICB7InJqdXN0IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JqdXN0LCBNRVRIX1ZBUkFSR1MsIHJqdXN0X19kb2NfX30sCiAgICAgeyJyc3RyaXAiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcnN0cmlwLCBNRVRIX1ZBUkFSR1MsIHJzdHJpcF9fZG9jX199LAogICAgIHsicnBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9ycGFydGl0aW9uLCBNRVRIX08sIHJwYXJ0aXRpb25fX2RvY19ffSwKLSAgICB7InNwbGl0bGluZXMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfc3BsaXRsaW5lcywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgc3BsaXRsaW5lc19fZG9jX199LAorICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zcGxpdGxpbmVzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBzcGxpdGxpbmVzX19kb2NfX30sCiAgICAgeyJzdHJpcCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zdHJpcCwgTUVUSF9WQVJBUkdTLCBzdHJpcF9fZG9jX199LAogICAgIHsic3dhcGNhc2UiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfc3dhcGNhc2UsIE1FVEhfTk9BUkdTLCBzd2FwY2FzZV9fZG9jX199LAogICAgIHsidHJhbnNsYXRlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3RyYW5zbGF0ZSwgTUVUSF9PLCB0cmFuc2xhdGVfX2RvY19ffSwKQEAgLTEzMDc2LDggKzEzNjY4LDcgQEAKICAgICB7ImZvcm1hdCIsIChQeUNGdW5jdGlvbikgZG9fc3RyaW5nX2Zvcm1hdCwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZm9ybWF0X19kb2NfX30sCiAgICAgeyJmb3JtYXRfbWFwIiwgKFB5Q0Z1bmN0aW9uKSBkb19zdHJpbmdfZm9ybWF0X21hcCwgTUVUSF9PLCBmb3JtYXRfbWFwX19kb2NfX30sCiAgICAgeyJfX2Zvcm1hdF9fIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX19mb3JtYXRfXywgTUVUSF9WQVJBUkdTLCBwX2Zvcm1hdF9fZG9jX199LAotICAgIHsibWFrZXRyYW5zIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX21ha2V0cmFucywKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9TVEFUSUMsIG1ha2V0cmFuc19fZG9jX199LAorICAgIFVOSUNPREVfTUFLRVRSQU5TX01FVEhPRERFRgogICAgIHsiX19zaXplb2ZfXyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9fc2l6ZW9mX18sIE1FVEhfTk9BUkdTLCBzaXplb2ZfX2RvY19ffSwKICNpZiAwCiAgICAgLyogVGhlc2UgbWV0aG9kcyBhcmUganVzdCB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIGltcGxlbWVudGF0aW9uLiAqLwpAQCAtMTMxOTIsMTYgKzEzNzgzLDM5IEBACiAKIC8qIEhlbHBlcnMgZm9yIFB5VW5pY29kZV9Gb3JtYXQoKSAqLwogCitzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCB7CisgICAgUHlPYmplY3QgKmFyZ3M7CisgICAgaW50IGFyZ3Nfb3duZWQ7CisgICAgUHlfc3NpemVfdCBhcmdsZW4sIGFyZ2lkeDsKKyAgICBQeU9iamVjdCAqZGljdDsKKworICAgIGVudW0gUHlVbmljb2RlX0tpbmQgZm10a2luZDsKKyAgICBQeV9zc2l6ZV90IGZtdGNudCwgZm10cG9zOworICAgIHZvaWQgKmZtdGRhdGE7CisgICAgUHlPYmplY3QgKmZtdHN0cjsKKworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOworfTsKKworc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190IHsKKyAgICBQeV9VQ1M0IGNoOworICAgIGludCBmbGFnczsKKyAgICBQeV9zc2l6ZV90IHdpZHRoOworICAgIGludCBwcmVjOworICAgIGludCBzaWduOworfTsKKwogc3RhdGljIFB5T2JqZWN0ICoKLWdldG5leHRhcmcoUHlPYmplY3QgKmFyZ3MsIFB5X3NzaXplX3QgYXJnbGVuLCBQeV9zc2l6ZV90ICpwX2FyZ2lkeCkKK3VuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCkKIHsKLSAgICBQeV9zc2l6ZV90IGFyZ2lkeCA9ICpwX2FyZ2lkeDsKLSAgICBpZiAoYXJnaWR4IDwgYXJnbGVuKSB7Ci0gICAgICAgICgqcF9hcmdpZHgpKys7Ci0gICAgICAgIGlmIChhcmdsZW4gPCAwKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgUHlfc3NpemVfdCBhcmdpZHggPSBjdHgtPmFyZ2lkeDsKKworICAgIGlmIChhcmdpZHggPCBjdHgtPmFyZ2xlbikgeworICAgICAgICBjdHgtPmFyZ2lkeCsrOworICAgICAgICBpZiAoY3R4LT5hcmdsZW4gPCAwKQorICAgICAgICAgICAgcmV0dXJuIGN0eC0+YXJnczsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFB5VHVwbGVfR2V0SXRlbShhcmdzLCBhcmdpZHgpOworICAgICAgICAgICAgcmV0dXJuIFB5VHVwbGVfR2V0SXRlbShjdHgtPmFyZ3MsIGFyZ2lkeCk7CiAgICAgfQogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgZm9ybWF0IHN0cmluZyIpOwpAQCAtMTMyMTAsMzMgKzEzODI0LDQyIEBACiAKIC8qIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIHRvIGEgUHlVbmljb2RlIG9iamVjdCwgb3IgTlVMTCBvbiBmYWlsdXJlLiAqLwogCisvKiBGb3JtYXQgYSBmbG9hdCBpbnRvIHRoZSB3cml0ZXIgaWYgdGhlIHdyaXRlciBpcyBub3QgTlVMTCwgb3IgaW50byAqcF9vdXRwdXQKKyAgIG90aGVyd2lzZS4KKworICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiBzdGF0aWMgaW50Ci1mb3JtYXRmbG9hdChQeU9iamVjdCAqdiwgaW50IGZsYWdzLCBpbnQgcHJlYywgaW50IHR5cGUsCi0gICAgICAgICAgICBQeU9iamVjdCAqKnBfb3V0cHV0LCBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCitmb3JtYXRmbG9hdChQeU9iamVjdCAqdiwgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICBQeU9iamVjdCAqKnBfb3V0cHV0LAorICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewogICAgIGNoYXIgKnA7CiAgICAgZG91YmxlIHg7CiAgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IHByZWM7CisgICAgaW50IGR0b2FfZmxhZ3M7CiAKICAgICB4ID0gUHlGbG9hdF9Bc0RvdWJsZSh2KTsKICAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgIHByZWMgPSBhcmctPnByZWM7CiAgICAgaWYgKHByZWMgPCAwKQogICAgICAgICBwcmVjID0gNjsKIAotICAgIHAgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoeCwgdHlwZSwgcHJlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIEZfQUxUKSA/IFB5X0RUU0ZfQUxUIDogMCwgTlVMTCk7CisgICAgaWYgKGFyZy0+ZmxhZ3MgJiBGX0FMVCkKKyAgICAgICAgZHRvYV9mbGFncyA9IFB5X0RUU0ZfQUxUOworICAgIGVsc2UKKyAgICAgICAgZHRvYV9mbGFncyA9IDA7CisgICAgcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh4LCBhcmctPmNoLCBwcmVjLCBkdG9hX2ZsYWdzLCBOVUxMKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgbGVuID0gc3RybGVuKHApOwogICAgIGlmICh3cml0ZXIpIHsKLSAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgMTI3KSA9PSAtMSkgeworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgcCwgbGVuKSA8IDApIHsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUocCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgdW5pY29kZV93cml0ZV9jc3RyKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgcCwgbGVuKTsKLSAgICAgICAgd3JpdGVyLT5wb3MgKz0gbGVuOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgICpwX291dHB1dCA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKHAsIGxlbik7CkBAIC0xMzI2Myw3ICsxMzg4Niw3IEBACiAgKiBwcm9kdWNlIGEgJy0nIHNpZ24sIGJ1dCBjYW4gZm9yIFB5dGhvbidzIHVuYm91bmRlZCBpbnRzLgogICovCiBzdGF0aWMgUHlPYmplY3QqCi1mb3JtYXRsb25nKFB5T2JqZWN0ICp2YWwsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlKQorZm9ybWF0bG9uZyhQeU9iamVjdCAqdmFsLCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBjaGFyICpidWY7CkBAIC0xMzI3Myw2ICsxMzg5Niw4IEBACiAgICAgUHlfc3NpemVfdCBsbGVuOwogICAgIGludCBudW1kaWdpdHM7ICAgICAgLyogbGVuID09IG51bW5vbmRpZ2l0cyArIG51bWRpZ2l0cyAqLwogICAgIGludCBudW1ub25kaWdpdHMgPSAwOworICAgIGludCBwcmVjID0gYXJnLT5wcmVjOworICAgIGludCB0eXBlID0gYXJnLT5jaDsKIAogICAgIC8qIEF2b2lkIGV4Y2VlZGluZyBTU0laRV9UX01BWCAqLwogICAgIGlmIChwcmVjID4gSU5UX01BWC0zKSB7CkBAIC0xMzI4NCwxMyArMTM5MDksMTQgQEAKICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHZhbCkpOwogCiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCEiJ3R5cGUnIG5vdCBpbiBbZGl1b3hYXSIpOwogICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ2knOgogICAgIGNhc2UgJ3UnOgotICAgICAgICAvKiBTcGVjaWFsLWNhc2UgYm9vbGVhbjogd2Ugd2FudCAwLzEgKi8KLSAgICAgICAgaWYgKFB5Qm9vbF9DaGVjayh2YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfVG9CYXNlKHZhbCwgMTApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBQeV9UWVBFKHZhbCktPnRwX3N0cih2YWwpOworICAgICAgICAvKiBpbnQgYW5kIGludCBzdWJjbGFzc2VzIHNob3VsZCBwcmludCBudW1lcmljYWxseSB3aGVuIGEgbnVtZXJpYyAqLworICAgICAgICAvKiBmb3JtYXQgY29kZSBpcyB1c2VkIChzZWUgaXNzdWUxODc4MCkgKi8KKyAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfVG9CYXNlKHZhbCwgMTApOwogICAgICAgICBicmVhazsKICAgICBjYXNlICdvJzoKICAgICAgICAgbnVtbm9uZGlnaXRzID0gMjsKQEAgLTEzMzAxLDggKzEzOTI3LDYgQEAKICAgICAgICAgbnVtbm9uZGlnaXRzID0gMjsKICAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfVG9CYXNlKHZhbCwgMTYpOwogICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoISIndHlwZScgbm90IGluIFtkdW94WF0iKTsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMzMTMsMTIgKzEzOTM3LDE0IEBACiAKICAgICAvKiBUbyBtb2RpZnkgdGhlIHN0cmluZyBpbi1wbGFjZSwgdGhlcmUgY2FuIG9ubHkgYmUgb25lIHJlZmVyZW5jZS4gKi8KICAgICBpZiAoUHlfUkVGQ05UKHJlc3VsdCkgIT0gMSkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBidWYgPSBQeVVuaWNvZGVfREFUQShyZXN1bHQpOwogICAgIGxsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXN1bHQpOwogICAgIGlmIChsbGVuID4gSU5UX01BWCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsYXJnZSBpbiBfUHlCeXRlc19Gb3JtYXRMb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMzMzAsNyArMTM5NTYsNyBAQAogICAgIGFzc2VydChudW1kaWdpdHMgPiAwKTsKIAogICAgIC8qIEdldCByaWQgb2YgYmFzZSBtYXJrZXIgdW5sZXNzIEZfQUxUICovCi0gICAgaWYgKCgoZmxhZ3MgJiBGX0FMVCkgPT0gMCAmJgorICAgIGlmICgoKGFyZy0+ZmxhZ3MgJiBGX0FMVCkgPT0gMCAmJgogICAgICAgICAodHlwZSA9PSAnbycgfHwgdHlwZSA9PSAneCcgfHwgdHlwZSA9PSAnWCcpKSkgewogICAgICAgICBhc3NlcnQoYnVmW3NpZ25dID09ICcwJyk7CiAgICAgICAgIGFzc2VydChidWZbc2lnbisxXSA9PSAneCcgfHwgYnVmW3NpZ24rMV0gPT0gJ1gnIHx8CkBAIC0xMzM3NSwxNSArMTQwMDEsMTAwIEBACiAgICAgICAgICAgICBpZiAoYnVmW2ldID49ICdhJyAmJiBidWZbaV0gPD0gJ3gnKQogICAgICAgICAgICAgICAgIGJ1ZltpXSAtPSAnYSctJ0EnOwogICAgIH0KLSAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpIHx8IGxlbiAhPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXN1bHQpKSB7CisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2socmVzdWx0KQorICAgICAgICB8fCBidWYgIT0gUHlVbmljb2RlX0RBVEEocmVzdWx0KSkgewogICAgICAgICBQeU9iamVjdCAqdW5pY29kZTsKICAgICAgICAgdW5pY29kZSA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGJ1ZiwgbGVuKTsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJlc3VsdCA9IHVuaWNvZGU7CiAgICAgfQorICAgIGVsc2UgaWYgKGxlbiAhPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXN1bHQpKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZyZXN1bHQsIGxlbikgPCAwKQorICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogRm9ybWF0IGFuIGludGVnZXIuCisgKiBSZXR1cm4gMSBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIHRoZSB3cml0ZXIsCisgKiAgICAgICAgMCBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX291dHB1dAorICogICAgICAgLTEgYW5kIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBlcnJvciAqLworc3RhdGljIGludAorbWFpbmZvcm1hdGxvbmcoUHlPYmplY3QgKnYsCisgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCit7CisgICAgUHlPYmplY3QgKmlvYmosICpyZXM7CisgICAgY2hhciB0eXBlID0gKGNoYXIpYXJnLT5jaDsKKworICAgIGlmICghUHlOdW1iZXJfQ2hlY2sodikpCisgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworCisgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgIGlmIChpb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgZ290byB3cm9uZ3R5cGU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KFB5TG9uZ19DaGVjayhpb2JqKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpb2JqID0gdjsKKyAgICAgICAgUHlfSU5DUkVGKGlvYmopOworICAgIH0KKworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KQorICAgICAgICAmJiBhcmctPndpZHRoID09IC0xICYmIGFyZy0+cHJlYyA9PSAtMQorICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpCisgICAgICAgICYmIHR5cGUgIT0gJ1gnKQorICAgIHsKKyAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgIGludCBhbHRlcm5hdGUgPSBhcmctPmZsYWdzICYgRl9BTFQ7CisgICAgICAgIGludCBiYXNlOworCisgICAgICAgIHN3aXRjaCh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFzc2VydCgwICYmICIndHlwZScgbm90IGluIFtkaXVveFhdIik7CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbyc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgIGNhc2UgJ1gnOgorICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcih3cml0ZXIsIHYsIGJhc2UsIGFsdGVybmF0ZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJlcyA9IGZvcm1hdGxvbmcoaW9iaiwgYXJnKTsKKyAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgKnBfb3V0cHV0ID0gcmVzOworICAgIHJldHVybiAwOworCit3cm9uZ3R5cGU6CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICIlJSVjIGZvcm1hdDogYSBudW1iZXIgaXMgcmVxdWlyZWQsICIKKyAgICAgICAgICAgICJub3QgJS4yMDBzIiwKKyAgICAgICAgICAgIHR5cGUsIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgIHJldHVybiAtMTsKK30KKwogc3RhdGljIFB5X1VDUzQKIGZvcm1hdGNoYXIoUHlPYmplY3QgKnYpCiB7CkBAIC0xMzQxNiw1NDAgKzE0MTI3LDU4NyBAQAogICAgIHJldHVybiAoUHlfVUNTNCkgLTE7CiB9CiAKKy8qIFBhcnNlIG9wdGlvbnMgb2YgYW4gYXJndW1lbnQ6IGZsYWdzLCB3aWR0aCwgcHJlY2lzaW9uLgorICAgSGFuZGxlIGFsc28gIiUobmFtZSkiIHN5bnRheC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIGFyZy0+c3RyLgorICAgUmV0dXJuIDEgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHdyaXR0ZW4gaW50byBjdHgtPndyaXRlciwKKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcpCit7CisjZGVmaW5lIEZPUk1BVF9SRUFEKGN0eCkgXAorICAgICAgICBQeVVuaWNvZGVfUkVBRCgoY3R4KS0+Zm10a2luZCwgKGN0eCktPmZtdGRhdGEsIChjdHgpLT5mbXRwb3MpCisKKyAgICBQeU9iamVjdCAqdjsKKworICAgIGlmIChhcmctPmNoID09ICcoJykgeworICAgICAgICAvKiBHZXQgYXJndW1lbnQgdmFsdWUgZnJvbSBhIGRpY3Rpb25hcnkuIEV4YW1wbGU6ICIlKG5hbWUpcyIuICovCisgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7CisgICAgICAgIFB5X3NzaXplX3Qga2V5bGVuOworICAgICAgICBQeU9iamVjdCAqa2V5OworICAgICAgICBpbnQgcGNvdW50ID0gMTsKKworICAgICAgICBpZiAoY3R4LT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCByZXF1aXJlcyBhIG1hcHBpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICArK2N0eC0+Zm10cG9zOworICAgICAgICAtLWN0eC0+Zm10Y250OworICAgICAgICBrZXlzdGFydCA9IGN0eC0+Zm10cG9zOworICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KKyAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGlmIChhcmctPmNoID09ICcpJykKKyAgICAgICAgICAgICAgICAtLXBjb3VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJygnKQorICAgICAgICAgICAgICAgICsrcGNvdW50OworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgICAgICBrZXlsZW4gPSBjdHgtPmZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKKyAgICAgICAgaWYgKGN0eC0+Zm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQga2V5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gUHlVbmljb2RlX1N1YnN0cmluZyhjdHgtPmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzdGFydCwga2V5c3RhcnQgKyBrZXlsZW4pOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChjdHgtPmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjdHgtPmFyZ3MpOworICAgICAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMDsKKyAgICAgICAgfQorICAgICAgICBjdHgtPmFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGN0eC0+ZGljdCwga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChjdHgtPmFyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMTsKKyAgICAgICAgY3R4LT5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LT5hcmdpZHggPSAtMjsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBmbGFncy4gRXhhbXBsZTogIiUraSIgPT4gZmxhZ3M9Rl9TSUdOLiAqLworICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIHN3aXRjaCAoYXJnLT5jaCkgeworICAgICAgICBjYXNlICctJzogYXJnLT5mbGFncyB8PSBGX0xKVVNUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnKyc6IGFyZy0+ZmxhZ3MgfD0gRl9TSUdOOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnICc6IGFyZy0+ZmxhZ3MgfD0gRl9CTEFOSzsgY29udGludWU7CisgICAgICAgIGNhc2UgJyMnOiBhcmctPmZsYWdzIHw9IEZfQUxUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnMCc6IGFyZy0+ZmxhZ3MgfD0gRl9aRVJPOyBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBQYXJzZSB3aWR0aC4gRXhhbXBsZTogIiUxMHMiID0+IHdpZHRoPTEwICovCisgICAgaWYgKGFyZy0+Y2ggPT0gJyonKSB7CisgICAgICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFyZy0+d2lkdGggPSBQeUxvbmdfQXNTc2l6ZV90KHYpOworICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYXJnLT53aWR0aCA8IDApIHsKKyAgICAgICAgICAgIGFyZy0+ZmxhZ3MgfD0gRl9MSlVTVDsKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAtYXJnLT53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJnLT5jaCA+PSAnMCcgJiYgYXJnLT5jaCA8PSAnOScpIHsKKyAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+Y2ggLSAnMCc7CisgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBTaW5jZSBhcmctPmNoIGlzIHVuc2lnbmVkLCB0aGUgUkhTIHdvdWxkIGVuZCB1cCBhcyB1bnNpZ25lZCwKKyAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGFyZy0+Y2ggaXMgYmV0d2VlbgorICAgICAgICAgICAgICAgJzAnIGFuZCAnOScsIGNhc3RpbmcgdG8gaW50IGlzIHNhZmUuICovCisgICAgICAgICAgICBpZiAoYXJnLT53aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+d2lkdGgqMTAgKyAoYXJnLT5jaCAtICcwJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQYXJzZSBwcmVjaXNpb24uIEV4YW1wbGU6ICIlLjNmIiA9PiBwcmVjPTMgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAnLicpIHsKKyAgICAgICAgYXJnLT5wcmVjID0gMDsKKyAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgICAgIGlmIChhcmctPmNoID09ICcqJykgeworICAgICAgICAgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmctPnByZWMgPSBfUHlMb25nX0FzSW50KHYpOworICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhcmctPnByZWMgPCAwKQorICAgICAgICAgICAgICAgIGFyZy0+cHJlYyA9IDA7CisgICAgICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhcmctPmNoID49ICcwJyAmJiBhcmctPmNoIDw9ICc5JykgeworICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5jaCAtICcwJzsKKyAgICAgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChhcmctPnByZWMgPiAoSU5UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5wcmVjKjEwICsgKGFyZy0+Y2ggLSAnMCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSWdub3JlICJoIiwgImwiIGFuZCAiTCIgZm9ybWF0IHByZWZpeCAoZXg6ICIlaGkiIG9yICIlbHMiKSAqLworICAgIGlmIChjdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChhcmctPmNoID09ICdoJyB8fCBhcmctPmNoID09ICdsJyB8fCBhcmctPmNoID09ICdMJykgeworICAgICAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGN0eC0+Zm10Y250IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjdW5kZWYgRk9STUFUX1JFQUQKK30KKworLyogRm9ybWF0IG9uZSBhcmd1bWVudC4gU3VwcG9ydGVkIGNvbnZlcnNpb24gc3BlY2lmaWVyczoKKworICAgLSAicyIsICJyIiwgImEiOiBhbnkgdHlwZQorICAgLSAiaSIsICJkIiwgInUiLCAibyIsICJ4IiwgIlgiOiBpbnQKKyAgIC0gImUiLCAiRSIsICJmIiwgIkYiLCAiZyIsICJHIjogZmxvYXQKKyAgIC0gImMiOiBpbnQgb3Igc3RyICgxIGNoYXJhY3RlcikKKworICAgV2hlbiBwb3NzaWJsZSwgdGhlIG91dHB1dCBpcyB3cml0dGVuIGRpcmVjdGx5IGludG8gdGhlIFVuaWNvZGUgd3JpdGVyCisgICAoY3R4LT53cml0ZXIpLiBBIHN0cmluZyBpcyBjcmVhdGVkIHdoZW4gcGFkZGluZyBpcyByZXF1aXJlZC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX3N0ciwKKyAgICAgICAgICAxIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiB3cml0dGVuIGludG8gY3R4LT53cml0ZXIsCisgICAgICAgICAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZ19mb3JtYXQoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9zdHIpCit7CisgICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyID0gJmN0eC0+d3JpdGVyOworCisgICAgaWYgKGN0eC0+Zm10Y250ID09IDApCisgICAgICAgIGN0eC0+d3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisKKyAgICBpZiAoYXJnLT5jaCA9PSAnJScpIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgJyUnKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICBzd2l0Y2ggKGFyZy0+Y2gpIHsKKyAgICBjYXNlICdzJzoKKyAgICBjYXNlICdyJzoKKyAgICBjYXNlICdhJzoKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpICYmIGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xKSB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcih3cml0ZXIsIHYsIDEwLCBhcmctPmZsYWdzICYgRl9BTFQpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmIGFyZy0+Y2ggPT0gJ3MnKSB7CisgICAgICAgICAgICAqcF9zdHIgPSB2OworICAgICAgICAgICAgUHlfSU5DUkVGKCpwX3N0cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXJnLT5jaCA9PSAncycpCisgICAgICAgICAgICAgICAgKnBfc3RyID0gUHlPYmplY3RfU3RyKHYpOworICAgICAgICAgICAgZWxzZSBpZiAoYXJnLT5jaCA9PSAncicpCisgICAgICAgICAgICAgICAgKnBfc3RyID0gUHlPYmplY3RfUmVwcih2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqcF9zdHIgPSBQeU9iamVjdF9BU0NJSSh2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgJ2knOgorICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ3UnOgorICAgIGNhc2UgJ28nOgorICAgIGNhc2UgJ3gnOgorICAgIGNhc2UgJ1gnOgorICAgIHsKKyAgICAgICAgaW50IHJldCA9IG1haW5mb3JtYXRsb25nKHYsIGFyZywgcF9zdHIsIHdyaXRlcik7CisgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIGFyZy0+c2lnbiA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ2UnOgorICAgIGNhc2UgJ0UnOgorICAgIGNhc2UgJ2YnOgorICAgIGNhc2UgJ0YnOgorICAgIGNhc2UgJ2cnOgorICAgIGNhc2UgJ0cnOgorICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBhcmctPnByZWMgPT0gLTEKKyAgICAgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgICAgaWYgKGZvcm1hdGZsb2F0KHYsIGFyZywgTlVMTCwgd3JpdGVyKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZy0+c2lnbiA9IDE7CisgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBhcmcsIHBfc3RyLCBOVUxMKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdjJzoKKyAgICB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBmb3JtYXRjaGFyKHYpOworICAgICAgICBpZiAoY2ggPT0gKFB5X1VDUzQpIC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBhcmctPnByZWMgPT0gLTEpIHsKKyAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqcF9zdHIgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoY2gpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICclYycgKDB4JXgpICIKKyAgICAgICAgICAgICAgICAgICAgICJhdCBpbmRleCAlemQiLAorICAgICAgICAgICAgICAgICAgICAgKDMxPD1hcmctPmNoICYmIGFyZy0+Y2g8PTEyNikgPyAoY2hhcilhcmctPmNoIDogJz8nLAorICAgICAgICAgICAgICAgICAgICAgKGludClhcmctPmNoLAorICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MgLSAxKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoKnBfc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBhc3NlcnQgKFB5VW5pY29kZV9DaGVjaygqcF9zdHIpKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX291dHB1dChzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cikKK3sKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQ7CisgICAgdm9pZCAqcGJ1ZjsKKyAgICBQeV9zc2l6ZV90IHBpbmRleDsKKyAgICBQeV9VQ1M0IHNpZ25jaGFyOworICAgIFB5X3NzaXplX3QgYnVmbGVuOworICAgIFB5X1VDUzQgbWF4Y2hhcjsKKyAgICBQeV9zc2l6ZV90IHN1YmxlbjsKKyAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIgPSAmY3R4LT53cml0ZXI7CisgICAgUHlfVUNTNCBmaWxsOworCisgICAgZmlsbCA9ICcgJzsKKyAgICBpZiAoYXJnLT5zaWduICYmIGFyZy0+ZmxhZ3MgJiBGX1pFUk8pCisgICAgICAgIGZpbGwgPSAnMCc7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CisgICAgaWYgKChhcmctPndpZHRoID09IC0xIHx8IGFyZy0+d2lkdGggPD0gbGVuKQorICAgICAgICAmJiAoYXJnLT5wcmVjID09IC0xIHx8IGFyZy0+cHJlYyA+PSBsZW4pCisgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCisgICAgeworICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBzdHIpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBUcnVuY2F0ZSB0aGUgc3RyaW5nIGZvciAicyIsICJyIiBhbmQgImEiIGZvcm1hdHMKKyAgICAgICBpZiB0aGUgcHJlY2lzaW9uIGlzIHNldCAqLworICAgIGlmIChhcmctPmNoID09ICdzJyB8fCBhcmctPmNoID09ICdyJyB8fCBhcmctPmNoID09ICdhJykgeworICAgICAgICBpZiAoYXJnLT5wcmVjID49IDAgJiYgbGVuID4gYXJnLT5wcmVjKQorICAgICAgICAgICAgbGVuID0gYXJnLT5wcmVjOworICAgIH0KKworICAgIC8qIEFkanVzdCBzaWduIGFuZCB3aWR0aCAqLworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzdHIpOworICAgIHBidWYgPSBQeVVuaWNvZGVfREFUQShzdHIpOworICAgIHBpbmRleCA9IDA7CisgICAgc2lnbmNoYXIgPSAnXDAnOworICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCk7CisgICAgICAgIGlmIChjaCA9PSAnLScgfHwgY2ggPT0gJysnKSB7CisgICAgICAgICAgICBzaWduY2hhciA9IGNoOworICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICBwaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhcmctPmZsYWdzICYgRl9TSUdOKQorICAgICAgICAgICAgc2lnbmNoYXIgPSAnKyc7CisgICAgICAgIGVsc2UgaWYgKGFyZy0+ZmxhZ3MgJiBGX0JMQU5LKQorICAgICAgICAgICAgc2lnbmNoYXIgPSAnICc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZy0+c2lnbiA9IDA7CisgICAgfQorICAgIGlmIChhcmctPndpZHRoIDwgbGVuKQorICAgICAgICBhcmctPndpZHRoID0gbGVuOworCisgICAgLyogUHJlcGFyZSB0aGUgd3JpdGVyICovCisgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICBpZiAoIShhcmctPmZsYWdzICYgRl9MSlVTVCkpIHsKKyAgICAgICAgaWYgKGFyZy0+c2lnbikgeworICAgICAgICAgICAgaWYgKChhcmctPndpZHRoLTEpID4gbGVuKQorICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgZmlsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXJnLT53aWR0aCA+IGxlbikKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZpbGwpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKSA+IG1heGNoYXIpIHsKKyAgICAgICAgUHlfVUNTNCBzdHJtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihzdHIsIDAsIHBpbmRleCtsZW4pOworICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHN0cm1heGNoYXIpOworICAgIH0KKworICAgIGJ1ZmxlbiA9IGFyZy0+d2lkdGg7CisgICAgaWYgKGFyZy0+c2lnbiAmJiBsZW4gPT0gYXJnLT53aWR0aCkKKyAgICAgICAgYnVmbGVuKys7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGJ1ZmxlbiwgbWF4Y2hhcikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIFdyaXRlIHRoZSBzaWduIGlmIG5lZWRlZCAqLworICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBzaWduY2hhcik7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChhcmctPndpZHRoID4gbGVuKQorICAgICAgICAgICAgYXJnLT53aWR0aC0tOworICAgIH0KKworICAgIC8qIFdyaXRlIHRoZSBudW1lcmljIHByZWZpeCBmb3IgIngiLCAiWCIgYW5kICJvIiBmb3JtYXRzCisgICAgICAgaWYgdGhlIGFsdGVybmF0ZSBmb3JtIGlzIHVzZWQuCisgICAgICAgRm9yIGV4YW1wbGUsIHdyaXRlICIweCIgZm9yIHRoZSAiJSN4IiBmb3JtYXQuICovCisgICAgaWYgKChhcmctPmZsYWdzICYgRl9BTFQpICYmIChhcmctPmNoID09ICd4JyB8fCBhcmctPmNoID09ICdYJyB8fCBhcmctPmNoID09ICdvJykpIHsKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCArIDEpID09IGFyZy0+Y2gpOworICAgICAgICBpZiAoZmlsbCAhPSAnICcpIHsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsICcwJyk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zKzEsIGFyZy0+Y2gpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMjsKKyAgICAgICAgICAgIHBpbmRleCArPSAyOworICAgICAgICB9CisgICAgICAgIGFyZy0+d2lkdGggLT0gMjsKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPCAwKQorICAgICAgICAgICAgYXJnLT53aWR0aCA9IDA7CisgICAgICAgIGxlbiAtPSAyOworICAgIH0KKworICAgIC8qIFBhZCBsZWZ0IHdpdGggdGhlIGZpbGwgY2hhcmFjdGVyIGlmIG5lZWRlZCAqLworICAgIGlmIChhcmctPndpZHRoID4gbGVuICYmICEoYXJnLT5mbGFncyAmIEZfTEpVU1QpKSB7CisgICAgICAgIHN1YmxlbiA9IGFyZy0+d2lkdGggLSBsZW47CisgICAgICAgIEZJTEwod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIGZpbGwsIHdyaXRlci0+cG9zLCBzdWJsZW4pOworICAgICAgICB3cml0ZXItPnBvcyArPSBzdWJsZW47CisgICAgICAgIGFyZy0+d2lkdGggPSBsZW47CisgICAgfQorCisgICAgLyogSWYgcGFkZGluZyB3aXRoIHNwYWNlczogd3JpdGUgc2lnbiBpZiBuZWVkZWQgYW5kL29yIG51bWVyaWMgcHJlZml4IGlmCisgICAgICAgdGhlIGFsdGVybmF0ZSBmb3JtIGlzIHVzZWQgKi8KKyAgICBpZiAoZmlsbCA9PSAnICcpIHsKKyAgICAgICAgaWYgKGFyZy0+c2lnbikgeworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgc2lnbmNoYXIpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGFyZy0+ZmxhZ3MgJiBGX0FMVCkgJiYgKGFyZy0+Y2ggPT0gJ3gnIHx8IGFyZy0+Y2ggPT0gJ1gnIHx8IGFyZy0+Y2ggPT0gJ28nKSkgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgrMSkgPT0gYXJnLT5jaCk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCAnMCcpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcysxLCBhcmctPmNoKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDI7CisgICAgICAgICAgICBwaW5kZXggKz0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFdyaXRlIGNoYXJhY3RlcnMgKi8KKyAgICBpZiAobGVuKSB7CisgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBwaW5kZXgsIGxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICB9CisKKyAgICAvKiBQYWQgcmlnaHQgd2l0aCB0aGUgZmlsbCBjaGFyYWN0ZXIgaWYgbmVlZGVkICovCisgICAgaWYgKGFyZy0+d2lkdGggPiBsZW4pIHsKKyAgICAgICAgc3VibGVuID0gYXJnLT53aWR0aCAtIGxlbjsKKyAgICAgICAgRklMTCh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgJyAnLCB3cml0ZXItPnBvcywgc3VibGVuKTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gc3VibGVuOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogSGVscGVyIG9mIFB5VW5pY29kZV9Gb3JtYXQoKTogZm9ybWF0IG9uZSBhcmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZyhzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4KQoreworICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCBhcmc7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBpbnQgcmV0OworCisgICAgYXJnLmNoID0gUHlVbmljb2RlX1JFQUQoY3R4LT5mbXRraW5kLCBjdHgtPmZtdGRhdGEsIGN0eC0+Zm10cG9zKTsKKyAgICBhcmcuZmxhZ3MgPSAwOworICAgIGFyZy53aWR0aCA9IC0xOworICAgIGFyZy5wcmVjID0gLTE7CisgICAgYXJnLnNpZ24gPSAwOworICAgIHN0ciA9IE5VTEw7CisKKyAgICByZXQgPSB1bmljb2RlX2Zvcm1hdF9hcmdfcGFyc2UoY3R4LCAmYXJnKTsKKyAgICBpZiAocmV0ID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXQgPSB1bmljb2RlX2Zvcm1hdF9hcmdfZm9ybWF0KGN0eCwgJmFyZywgJnN0cik7CisgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHJldCAhPSAxKSB7CisgICAgICAgIHJldCA9IHVuaWNvZGVfZm9ybWF0X2FyZ19vdXRwdXQoY3R4LCAmYXJnLCBzdHIpOworICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5kaWN0ICYmIChjdHgtPmFyZ2lkeCA8IGN0eC0+YXJnbGVuKSAmJiBhcmcuY2ggIT0gJyUnKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRm9ybWF0KFB5T2JqZWN0ICpmb3JtYXQsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgZm10Y250LCBmbXRwb3MsIGFyZ2xlbiwgYXJnaWR4OwotICAgIGludCBhcmdzX293bmVkID0gMDsKLSAgICBQeU9iamVjdCAqZGljdCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnRlbXAgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp1Zm9ybWF0OwotICAgIHZvaWQgKmZtdDsKLSAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQsIGZtdGtpbmQ7Ci0gICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Ci0gICAgUHlfc3NpemVfdCBzdWJsZW47Ci0gICAgUHlfVUNTNCBtYXhjaGFyOworICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90IGN0eDsKIAogICAgIGlmIChmb3JtYXQgPT0gTlVMTCB8fCBhcmdzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICB1Zm9ybWF0ID0gUHlVbmljb2RlX0Zyb21PYmplY3QoZm9ybWF0KTsKLSAgICBpZiAodWZvcm1hdCA9PSBOVUxMKQorCisgICAgY3R4LmZtdHN0ciA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KGZvcm1hdCk7CisgICAgaWYgKGN0eC5mbXRzdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWSh1Zm9ybWF0KSA9PSAtMSkgewotICAgICAgICBQeV9ERUNSRUYodWZvcm1hdCk7CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShjdHguZm10c3RyKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmZtdHN0cik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBjdHguZm10ZGF0YSA9IFB5VW5pY29kZV9EQVRBKGN0eC5mbXRzdHIpOworICAgIGN0eC5mbXRraW5kID0gUHlVbmljb2RlX0tJTkQoY3R4LmZtdHN0cik7CisgICAgY3R4LmZtdGNudCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGN0eC5mbXRzdHIpOworICAgIGN0eC5mbXRwb3MgPSAwOwogCi0gICAgZm10ID0gUHlVbmljb2RlX0RBVEEodWZvcm1hdCk7Ci0gICAgZm10a2luZCA9IFB5VW5pY29kZV9LSU5EKHVmb3JtYXQpOwotICAgIGZtdGNudCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHVmb3JtYXQpOwotICAgIGZtdHBvcyA9IDA7Ci0KLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgZm10Y250ICsgMTAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJmN0eC53cml0ZXIpOworICAgIGN0eC53cml0ZXIubWluX2xlbmd0aCA9IGN0eC5mbXRjbnQgKyAxMDA7CisgICAgY3R4LndyaXRlci5vdmVyYWxsb2NhdGUgPSAxOwogCiAgICAgaWYgKFB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgYXJnbGVuID0gUHlUdXBsZV9TaXplKGFyZ3MpOwotICAgICAgICBhcmdpZHggPSAwOworICAgICAgICBjdHguYXJnbGVuID0gUHlUdXBsZV9TaXplKGFyZ3MpOworICAgICAgICBjdHguYXJnaWR4ID0gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGFyZ2xlbiA9IC0xOwotICAgICAgICBhcmdpZHggPSAtMjsKKyAgICAgICAgY3R4LmFyZ2xlbiA9IC0xOworICAgICAgICBjdHguYXJnaWR4ID0gLTI7CiAgICAgfQorICAgIGN0eC5hcmdzX293bmVkID0gMDsKICAgICBpZiAoUHlNYXBwaW5nX0NoZWNrKGFyZ3MpICYmICFQeVR1cGxlX0NoZWNrKGFyZ3MpICYmICFQeVVuaWNvZGVfQ2hlY2soYXJncykpCi0gICAgICAgIGRpY3QgPSBhcmdzOworICAgICAgICBjdHguZGljdCA9IGFyZ3M7CisgICAgZWxzZQorICAgICAgICBjdHguZGljdCA9IE5VTEw7CisgICAgY3R4LmFyZ3MgPSBhcmdzOwogCi0gICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKSAhPSAnJScpIHsKKyAgICB3aGlsZSAoLS1jdHguZm10Y250ID49IDApIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGN0eC5mbXRraW5kLCBjdHguZm10ZGF0YSwgY3R4LmZtdHBvcykgIT0gJyUnKSB7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IG5vbmZtdHBvczsKLSAgICAgICAgICAgIG5vbmZtdHBvcyA9IGZtdHBvcysrOwotICAgICAgICAgICAgd2hpbGUgKGZtdGNudCA+PSAwICYmCi0gICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpICE9ICclJykgewotICAgICAgICAgICAgICAgIGZtdHBvcysrOwotICAgICAgICAgICAgICAgIGZtdGNudC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA8IDApCi0gICAgICAgICAgICAgICAgZm10cG9zLS07Ci0gICAgICAgICAgICBzdWJsZW4gPSBmbXRwb3MgLSBub25mbXRwb3M7Ci0gICAgICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih1Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uZm10cG9zLCBub25mbXRwb3MgKyBzdWJsZW4pOwotICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCBzdWJsZW4sIG1heGNoYXIpID09IC0xKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKIAotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLmJ1ZmZlciwgd3JpdGVyLnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmb3JtYXQsIG5vbmZtdHBvcywgc3VibGVuKTsKLSAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gc3VibGVuOworICAgICAgICAgICAgbm9uZm10cG9zID0gY3R4LmZtdHBvcysrOworICAgICAgICAgICAgd2hpbGUgKGN0eC5mbXRjbnQgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGN0eC5mbXRraW5kLCBjdHguZm10ZGF0YSwgY3R4LmZtdHBvcykgIT0gJyUnKSB7CisgICAgICAgICAgICAgICAgY3R4LmZtdHBvcysrOworICAgICAgICAgICAgICAgIGN0eC5mbXRjbnQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdHguZm10Y250IDwgMCkgeworICAgICAgICAgICAgICAgIGN0eC5mbXRwb3MtLTsKKyAgICAgICAgICAgICAgICBjdHgud3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKCZjdHgud3JpdGVyLCBjdHguZm10c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uZm10cG9zLCBjdHguZm10cG9zKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogR290IGEgZm9ybWF0IHNwZWNpZmllciAqLwotICAgICAgICAgICAgaW50IGZsYWdzID0gMDsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGggPSAtMTsKLSAgICAgICAgICAgIGludCBwcmVjID0gLTE7Ci0gICAgICAgICAgICBQeV9VQ1M0IGMgPSAnXDAnOwotICAgICAgICAgICAgUHlfVUNTNCBmaWxsOwotICAgICAgICAgICAgaW50IHNpZ247Ci0gICAgICAgICAgICBQeV9VQ1M0IHNpZ25jaGFyOwotICAgICAgICAgICAgaW50IGlzbnVtb2s7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdiA9IE5VTEw7Ci0gICAgICAgICAgICB2b2lkICpwYnVmID0gTlVMTDsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgcGluZGV4LCBsZW47Ci0gICAgICAgICAgICBQeV9VQ1M0IGJ1Zm1heGNoYXI7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKLQotICAgICAgICAgICAgZm10cG9zKys7Ci0gICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpOwotICAgICAgICAgICAgaWYgKGMgPT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBrZXlzdGFydDsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGtleWxlbjsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICAgICAgICAgIGludCBwY291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCByZXF1aXJlcyBhIG1hcHBpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2ZtdHBvczsKLSAgICAgICAgICAgICAgICAtLWZtdGNudDsKLSAgICAgICAgICAgICAgICBrZXlzdGFydCA9IGZtdHBvczsKLSAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAocGNvdW50ID4gMCAmJiAtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcpJykKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tcGNvdW50OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICcoJykKLSAgICAgICAgICAgICAgICAgICAgICAgICsrcGNvdW50OwotICAgICAgICAgICAgICAgICAgICBmbXRwb3MrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5bGVuID0gZm10cG9zIC0ga2V5c3RhcnQgLSAxOwotICAgICAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwIHx8IHBjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQga2V5Iik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5ID0gUHlVbmljb2RlX1N1YnN0cmluZyh1Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5c3RhcnQsIGtleXN0YXJ0ICsga2V5bGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBpZiAoYXJnc19vd25lZCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3Nfb3duZWQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdzID0gUHlPYmplY3RfR2V0SXRlbShkaWN0LCBrZXkpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdzX293bmVkID0gMTsKLSAgICAgICAgICAgICAgICBhcmdsZW4gPSAtMTsKLSAgICAgICAgICAgICAgICBhcmdpZHggPSAtMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgICAgIGNhc2UgJy0nOiBmbGFncyB8PSBGX0xKVVNUOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlICcrJzogZmxhZ3MgfD0gRl9TSUdOOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlICcgJzogZmxhZ3MgfD0gRl9CTEFOSzsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnIyc6IGZsYWdzIHw9IEZfQUxUOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlICcwJzogZmxhZ3MgfD0gRl9aRVJPOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICB2ID0gZ2V0bmV4dGFyZyhhcmdzLCBhcmdsZW4sICZhcmdpZHgpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiogd2FudHMgaW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBQeUxvbmdfQXNTc2l6ZV90KHYpOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBGX0xKVVNUOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IC13aWR0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBjIC0gJzAnOwotICAgICAgICAgICAgICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvKiBTaW5jZSBjIGlzIHVuc2lnbmVkLCB0aGUgUkhTIHdvdWxkIGVuZCB1cCBhcyB1bnNpZ25lZCwKLSAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5nIHNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbi4gU2luY2UgYyBpcyBiZXR3ZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICcwJyBhbmQgJzknLCBjYXN0aW5nIHRvIGludCBpcyBzYWZlLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludCljIC0gJzAnKSkgLyAxMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIHRvbyBiaWciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHdpZHRoKjEwICsgKGMgLSAnMCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09ICcuJykgewotICAgICAgICAgICAgICAgIHByZWMgPSAwOwotICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByZWMgPSBfUHlMb25nX0FzSW50KHYpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZWMgPSBjIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjID4gKElOVF9NQVggLSAoKGludCljIC0gJzAnKSkgLyAxMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlYyB0b28gYmlnIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IHByZWMqMTAgKyAoYyAtICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IC8qIHByZWMgKi8KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmIChjID09ICdoJyB8fCBjID09ICdsJyB8fCBjID09ICdMJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm10Y250IDwgMCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQiKTsKKyAgICAgICAgICAgIGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zvcm1hdF9hcmcoJmN0eCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA9PSAwKQotICAgICAgICAgICAgICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICBpZiAoYyA9PSAnJScpIHsKLSAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIDEsICclJykgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnJScpOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdiA9IGdldG5leHRhcmcoYXJncywgYXJnbGVuLCAmYXJnaWR4KTsKLSAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgICAgICAgICBzaWduID0gMDsKLSAgICAgICAgICAgIHNpZ25jaGFyID0gJ1wwJzsKLSAgICAgICAgICAgIGZpbGwgPSAnICc7Ci0gICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLQotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSAmJiB3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTAsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmIGMgPT0gJ3MnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSB2OwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGVtcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAncycpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfU3RyKHYpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICdyJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBQeU9iamVjdF9SZXByKHYpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfQVNDSUkodik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgY2FzZSAnWCc6Ci0gICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpCi0gICAgICAgICAgICAgICAgICAgICYmIHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEKLSAgICAgICAgICAgICAgICAgICAgJiYgIShmbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCAxMCwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCAxNiwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCA4LCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlzbnVtb2sgPSAwOwotICAgICAgICAgICAgICAgIGlmIChQeU51bWJlcl9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW9iaj1OVUxMOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvYmogPSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlvYmohPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soaW9iaikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc251bW9rID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZm9ybWF0bG9uZyhpb2JqLCBmbGFncywgcHJlYywgKGMgPT0gJ2knPyAnZCc6IGMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFpc251bW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSUlYyBmb3JtYXQ6IGEgbnVtYmVyIGlzIHJlcXVpcmVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIChjaGFyKWMsIFB5X1RZUEUodiktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZfWkVSTykKLSAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICcwJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnZSc6Ci0gICAgICAgICAgICBjYXNlICdFJzoKLSAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICBjYXNlICdnJzoKLSAgICAgICAgICAgIGNhc2UgJ0cnOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xCi0gICAgICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYywgTlVMTCwgJndyaXRlcikgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCi0gICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdGZsb2F0KHYsIGZsYWdzLCBwcmVjLCBjLCAmdGVtcCwgTlVMTCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gZm9ybWF0Y2hhcih2KTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gKFB5X1VDUzQpIC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgMSwgY2gpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJyVjJyAoMHgleCkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgaW5kZXggJXpkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMxPD1jICYmIGM8PTEyNikgPyAoY2hhciljIDogJz8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdHBvcyAtIDEpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2sodGVtcCkpOwotCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMQotICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHRlbXApID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHRlbXApID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodGVtcCk7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHRlbXApOwotICAgICAgICAgICAgcGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHRlbXApOwotICAgICAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodGVtcCk7Ci0KLSAgICAgICAgICAgIGlmIChjID09ICdzJyB8fCBjID09ICdyJyB8fCBjID09ICdhJykgewotICAgICAgICAgICAgICAgIGlmIChwcmVjID49IDAgJiYgbGVuID4gcHJlYykKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gcHJlYzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogcGJ1ZiBpcyBpbml0aWFsaXplZCBoZXJlLiAqLwotICAgICAgICAgICAgcGluZGV4ID0gMDsKLSAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICctJyB8fCBjaCA9PSAnKycpIHsKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZfU0lHTikKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSAnKyc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGX0JMQU5LKQotICAgICAgICAgICAgICAgICAgICBzaWduY2hhciA9ICcgJzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNpZ24gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoIDwgbGVuKQotICAgICAgICAgICAgICAgIHdpZHRoID0gbGVuOwotCi0gICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBsZW5ndGggYW5kIG1heGltdW0gY2hhcmFjdGVyIG9mIHRoZQotICAgICAgICAgICAgICAgd3JpdHRlbiBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgICBidWZtYXhjaGFyID0gMTI3OwotICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBGX0xKVVNUKSkgewotICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgod2lkdGgtMSkgPiBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBidWZtYXhjaGFyID0gUHlfTUFYKGJ1Zm1heGNoYXIsIGZpbGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmbWF4Y2hhciA9IFB5X01BWChidWZtYXhjaGFyLCBmaWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih0ZW1wLCAwLCBwaW5kZXgrbGVuKTsKLSAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSBQeV9NQVgoYnVmbWF4Y2hhciwgbWF4Y2hhcik7Ci0KLSAgICAgICAgICAgIGJ1ZmxlbiA9IHdpZHRoOwotICAgICAgICAgICAgaWYgKHNpZ24gJiYgbGVuID09IHdpZHRoKQotICAgICAgICAgICAgICAgIGJ1ZmxlbisrOwotCi0gICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIGJ1ZmxlbiwgYnVmbWF4Y2hhcikgPT0gLTEpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgICAgICAgICAvKiBXcml0ZSBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCBzaWduY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKQotICAgICAgICAgICAgICAgICAgICB3aWR0aC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChmbGFncyAmIEZfQUxUKSAmJiAoYyA9PSAneCcgfHwgYyA9PSAnWCcgfHwgYyA9PSAnbycpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4ICsgMSkgPT0gYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MrMSwgYyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgcGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpZHRoIC09IDI7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgICAgIGxlbiAtPSAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuICYmICEoZmxhZ3MgJiBGX0xKVVNUKSkgewotICAgICAgICAgICAgICAgIHN1YmxlbiA9IHdpZHRoIC0gbGVuOwotICAgICAgICAgICAgICAgIEZJTEwod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCBmaWxsLCB3cml0ZXIucG9zLCBzdWJsZW4pOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gc3VibGVuOwotICAgICAgICAgICAgICAgIHdpZHRoID0gbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpbGwgPT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgc2lnbmNoYXIpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGX0FMVCkgJiYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnIHx8IGMgPT0gJ28nKSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KSA9PSAnMCcpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KzEpID09IGMpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnMCcpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zKzEsIGMpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxlbikgewotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci5idWZmZXIsIHdyaXRlci5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCwgcGluZGV4LCBsZW4pOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKSB7Ci0gICAgICAgICAgICAgICAgc3VibGVuID0gd2lkdGggLSBsZW47Ci0gICAgICAgICAgICAgICAgRklMTCh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsICcgJywgd3JpdGVyLnBvcywgc3VibGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKLSAgICAgICAgICAgIH0KLQotbmV4dGFyZzoKLSAgICAgICAgICAgIGlmIChkaWN0ICYmIChhcmdpZHggPCBhcmdsZW4pICYmIGMgIT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9DTEVBUih0ZW1wKTsKLSAgICAgICAgfSAvKiAnJScgKi8KLSAgICB9IC8qIHVudGlsIGVuZCAqLwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4gJiYgIWRpY3QpIHsKKyAgICBpZiAoY3R4LmFyZ2lkeCA8IGN0eC5hcmdsZW4gJiYgIWN0eC5kaWN0KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIGlmIChjdHguYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmFyZ3MpOwogICAgIH0KLSAgICBQeV9ERUNSRUYodWZvcm1hdCk7Ci0gICAgUHlfWERFQ1JFRih0ZW1wKTsKLSAgICBQeV9YREVDUkVGKHNlY29uZCk7Ci0gICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJmN0eC53cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVmb3JtYXQpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0gICAgUHlfWERFQ1JFRihzZWNvbmQpOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKLSAgICBpZiAoYXJnc19vd25lZCkgewotICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGN0eC5mbXRzdHIpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmY3R4LndyaXRlcik7CisgICAgaWYgKGN0eC5hcmdzX293bmVkKSB7CisgICAgICAgIFB5X0RFQ1JFRihjdHguYXJncyk7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMTQyMDksNyArMTQ5NjcsNyBAQAogdm9pZAogUHlVbmljb2RlX0ludGVybkluUGxhY2UoUHlPYmplY3QgKipwKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpzID0gKnA7CisgICAgUHlPYmplY3QgKnMgPSAqcDsKICAgICBQeU9iamVjdCAqdDsKICNpZmRlZiBQeV9ERUJVRwogICAgIGFzc2VydChzICE9IE5VTEwpOwpAQCAtMTQyMzgsMTIgKzE0OTk2LDEyIEBACiAgICAgdCA9IFB5RGljdF9HZXRJdGVtKGludGVybmVkLCBzKTsKICAgICBQeV9FTkRfQUxMT1dfUkVDVVJTSU9OCiAKLSAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih0KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRigqcCk7Ci0gICAgICAgICAgICAqcCA9IHQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAodCkgeworICAgICAgICBQeV9JTkNSRUYodCk7CisgICAgICAgIFB5X0RFQ1JFRigqcCk7CisgICAgICAgICpwID0gdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFB5VGhyZWFkU3RhdGVfR0VUKCktPnJlY3Vyc2lvbl9jcml0aWNhbCA9IDE7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtKGludGVybmVkLCBzLCBzKSA8IDApIHsKQEAgLTE0NTQyLDcgKzE1MzAwLDcgQEAKIGludAogUHlfVU5JQ09ERV9zdHJuY21wKGNvbnN0IFB5X1VOSUNPREUgKnMxLCBjb25zdCBQeV9VTklDT0RFICpzMiwgc2l6ZV90IG4pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfVU5JQ09ERSB1MSwgdTI7CisgICAgUHlfVU5JQ09ERSB1MSwgdTI7CiAgICAgZm9yICg7IG4gIT0gMDsgbi0tKSB7CiAgICAgICAgIHUxID0gKnMxOwogICAgICAgICB1MiA9ICpzMjsKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaCBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAppbmRleCA0NmE5MmJiLi4xZmRjMDkyIDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKKysrIGIvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCkBAIC0xNTg5LDcgKzE1ODksNyBAQAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNSwgNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgCiAgICAgMjEsIDIxLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDUsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMjUsIDI1LCAyNSwgNSwgMjEsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgOTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA3LCA4LCAKQEAgLTE4MDEsNyArMTgwMSw3IEBACiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCA1LCA5NiwgNSwgNSwgNSwgNSwgNTUsIDI1LCAwLCAwLCA3LCAKICAgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDI1LCAyNSwgMjUsIDIsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNSwgMjUsIDI1LCAyMSwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgOTYsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIApAQCAtMTgyOCw3ICsxODI4LDcgQEAKICAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTMyLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDE4LCAxOCwgMCwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDE4LCAyNSwgMCwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMjUsIDE4LCAyNSwgCkBAIC0xOTE1LDExICsxOTE1LDExIEBACiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNSwgNSwgNiwgMywgMywgMjEsIDIxLCAyMSwgMjEsIDIxLCAyLCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI0NSwgOTUsIDAsIDAsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjQ1LCA5NSwgMCwgMCwgCiAgICAgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgNSwgNSwgNSwgNSwgNSwgOTUsIDI0NSwgMjYsIDIyLCAyMywgMjQ2LCAKICAgICAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgNSwgNSwgNSwgNSwgNSwgMCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAogICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCA2LCA2LCA2LCA2LCAyNSwgNiwgNiwgNiwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgMTEzLCA1LCA1LCAKQEAgLTI1OTMsMTAgKzI1OTMsMTAgQEAKICAgICAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMjUyLCAyNTIsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMjUyLCAyNTIsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIApAQCAtMzM4MCw2ICszMzgwLDcgQEAKICAgICBjYXNlIDB4MTI0MzU6CiAgICAgY2FzZSAweDEyNDRBOgogICAgIGNhc2UgMHgxMjQ1MDoKKyAgICBjYXNlIDB4MTI0NTY6CiAgICAgY2FzZSAweDEyNDU5OgogICAgIGNhc2UgMHgxRDM2MToKICAgICBjYXNlIDB4MUQ3RDA6CkBAIC0zNDI3LDYgKzM0MjgsOCBAQAogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDAuMDsKICAgICBjYXNlIDB4MzI1MToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxLjA7CisgICAgY2FzZSAweDEyNDMyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjE2MDAwLjA7CiAgICAgY2FzZSAweDMyNTI6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMi4wOwogICAgIGNhc2UgMHgzMjUzOgpAQCAtMzUzNCw2ICszNTM3LDcgQEAKICAgICBjYXNlIDB4MTI0M0I6CiAgICAgY2FzZSAweDEyNDRCOgogICAgIGNhc2UgMHgxMjQ1MToKKyAgICBjYXNlIDB4MTI0NTc6CiAgICAgY2FzZSAweDFEMzYyOgogICAgIGNhc2UgMHgxRDdEMToKICAgICBjYXNlIDB4MUQ3REI6CkBAIC0zNzIxLDYgKzM3MjUsOCBAQAogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDIuMDsKICAgICBjYXNlIDB4MzJCODoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzLjA7CisgICAgY2FzZSAweDEyNDMzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDMyMDAwLjA7CiAgICAgY2FzZSAweDMyQjk6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0NC4wOwogICAgIGNhc2UgMHgzMkJBOgpAQCAtNDI3MSw3ICs0Mjc3LDcgQEAKIC8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbAogICogdHlwZSAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4KICAqLwotaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpCitpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoY29uc3QgUHlfVUNTNCBjaCkKIHsKICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgY2FzZSAweDAwMDk6CkBAIC00Mjg3LDcgKzQyOTMsNiBAQAogICAgIGNhc2UgMHgwMDg1OgogICAgIGNhc2UgMHgwMEEwOgogICAgIGNhc2UgMHgxNjgwOgotICAgIGNhc2UgMHgxODBFOgogICAgIGNhc2UgMHgyMDAwOgogICAgIGNhc2UgMHgyMDAxOgogICAgIGNhc2UgMHgyMDAyOgpAQCAtNDMxMyw3ICs0MzE4LDcgQEAKICAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbAogICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLgogICovCi1pbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoraW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsoY29uc3QgUHlfVUNTNCBjaCkKIHsKICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgY2FzZSAweDAwMEE6CmRpZmYgLS1naXQgYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCmluZGV4IGI0OWRjZWUuLmMwODNmOGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCisrKyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCkBAIC0zMzgsNiArMzM4LDExIEBACiB9CiAKIAorc3RhdGljIFB5TWVtYmVyRGVmIHdlYWtyZWZfbWVtYmVyc1tdID0geworICAgIHsiX19jYWxsYmFja19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5V2Vha1JlZmVyZW5jZSwgd3JfY2FsbGJhY2spLCBSRUFET05MWX0sCisgICAge05VTEx9IC8qIFNlbnRpbmVsICovCit9OworCiBQeVR5cGVPYmplY3QKIF9QeVdlYWtyZWZfUmVmVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQpAQCAtMzY5LDcgKzM3NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLworICAgIHdlYWtyZWZfbWVtYmVycywgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlcy5kc3AgYi9QQy9WQzYvX2N0eXBlcy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOThlYWMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19jdHlwZXMuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlcyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIiBDRkc9Il9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlcyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbHByb2MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xtYWxsb2NfY2xvc3VyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcCBiL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWViMjE3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzX3Rlc3QiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIgQ0ZHPSJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXNfdGVzdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3QucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwIGIvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzBjZGQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfZWxlbWVudHRyZWUiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9lbGVtZW50dHJlZS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIgQ0ZHPSJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9lbGVtZW50dHJlZSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19tc2kuZHNwIGIvUEMvVkM2L19tc2kuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmE2MWJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fbXNpLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX21zaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXNpIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIiBDRkc9Il9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX21zaSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX21zaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX21zaSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfbXNpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX21zaV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfbXNpIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQQ1xfbXNpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AgYi9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjg0NzAuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX211bHRpcHJvY2Vzc2luZyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIiBDRkc9Il9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmcucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tdWx0aXByb2Nlc3NpbmciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMWQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmdfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzZW1hcGhvcmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NvY2tldC5kc3AgYi9QQy9WQzYvX3NvY2tldC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZWU4ZjIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zb2NrZXQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc29ja2V0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9zb2NrZXQgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiIENGRz0iX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfc29ja2V0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NvY2tldC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NvY2tldCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NvY2tldF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc29ja2V0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zcWxpdGUzLmRzcCBiL1BDL1ZDNi9fc3FsaXRlMy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Njk5MzguLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zcWxpdGUzLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zcWxpdGUzIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9zcWxpdGUzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiIENGRz0iX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfc3FsaXRlMyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EIE1PRFVMRV9OQU1FPVwic3FsaXRlM1wiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zcWxpdGUzLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NxbGl0ZTMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlM19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3NsLmRzcCBiL1BDL1ZDNi9fc3NsLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiYjk5My4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NzbC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zc2wiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIgMHgwMTA2DQotDQotQ0ZHPV9zc2wgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NzbC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NzbC5tYWsiIENGRz0iX3NzbCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc3NsIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiKQ0KLSFNRVNTQUdFICJfc3NsIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBDbWRfTGluZSAiTk1BS0UgL2YgX3NzbC5tYWsiDQotIyBQUk9QIEJBU0UgUmVidWlsZF9PcHQgIi9hIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsLmV4ZSINCi0jIFBST1AgQkFTRSBCc2NfTmFtZSAiX3NzbC5ic2MiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NzbCINCi0jIFBST1AgQ21kX0xpbmUgInB5dGhvbiBidWlsZF9zc2wucHkiDQotIyBQUk9QIFJlYnVpbGRfT3B0ICItYSINCi0jIFBST1AgVGFyZ2V0X0ZpbGUgIl9zc2wucHlkIg0KLSMgUFJPUCBCc2NfTmFtZSAiIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIEJBU0UgQ21kX0xpbmUgIk5NQUtFIC9mIF9zc2wubWFrIg0KLSMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCINCi0jIFBST1AgQkFTRSBCc2NfTmFtZSAiX3NzbF9kLmJzYyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQ21kX0xpbmUgInB5dGhvbl9kIC11IGJ1aWxkX3NzbC5weSAtZCINCi0jIFBST1AgUmVidWlsZF9PcHQgIi1hIg0KLSMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCINCi0jIFBST1AgQnNjX05hbWUgIiINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zc2wuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3NsLm1hayBiL1BDL1ZDNi9fc3NsLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3YTYxNC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NzbC5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0KLSFJRkRFRiBERUJVRwotTU9EVUxFPV9zc2xfZC5weWQKLVRFTVBfRElSPXg4Ni10ZW1wLWRlYnVnL19zc2wKLUNGTEFHUz0vT2QgL1ppIC9NRGQgL0xEZCAvRERFQlVHIC9EX0RFQlVHIC9EV0lOMzIKLUxGTEFHUz0vbm9kZWZhdWx0bGliOiJtc3ZjcnQiCi0hRUxTRQotTU9EVUxFPV9zc2wucHlkCi1URU1QX0RJUj14ODYtdGVtcC1yZWxlYXNlL19zc2wKLUNGTEFHUz0vT3ggL01EIC9MRCAvRFdJTjMyCi1MRkxBR1M9Ci0hRU5ESUYKLQotSU5DTFVERVM9LUkgLi4vLi4vSW5jbHVkZSAtSSAuLiAtSSAkKFNTTF9ESVIpL2luYzMyCi1TU0xfTElCX0RJUj0kKFNTTF9ESVIpL291dDMyCi1MSUJTPWdkaTMyLmxpYiB3c29jazMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbGlicGF0aDokKFNTTF9MSUJfRElSKSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliCi0KLVNPVVJDRT0uLi8uLi9Nb2R1bGVzL19zc2wuYyAkKFNTTF9MSUJfRElSKS9saWJlYXkzMi5saWIgJChTU0xfTElCX0RJUikvc3NsZWF5MzIubGliCi0KLSQoTU9EVUxFKTogJChTT1VSQ0UpIC4uLyouaCAuLi8uLi9JbmNsdWRlLyouaAotICAgIEBpZiBub3QgZXhpc3QgIiQoVEVNUF9ESVIpLy4iIG1rZGlyICIkKFRFTVBfRElSKSIKLSAgICBjbCAvbm9sb2dvICQoU09VUkNFKSAkKENGTEFHUykgL0ZvJChURU1QX0RJUilcJCoub2JqICQoSU5DTFVERVMpIC9saW5rIC9vdXQ6JChNT0RVTEUpICQoTElCUykgJChMRkxBR1MpCmRpZmYgLS1naXQgYS9QQy9WQzYvX3Rlc3RjYXBpLmRzcCBiL1BDL1ZDNi9fdGVzdGNhcGkuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWFhMjVhLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fdGVzdGNhcGkuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfdGVzdGNhcGkiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3Rlc3RjYXBpIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90ZXN0Y2FwaS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIgQ0ZHPSJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl90ZXN0Y2FwaSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGkucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3Rlc3RjYXBpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L190a2ludGVyLmRzcCBiL1BDL1ZDNi9fdGtpbnRlci5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNjlmNTkuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L190a2ludGVyLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90a2ludGVyIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV90a2ludGVyIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3RraW50ZXIubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90a2ludGVyLm1hayIgQ0ZHPSJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl90a2ludGVyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3RraW50ZXIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXC4uXC4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3RraW50ZXIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXHRjbHRrXGxpYlx0azg1Zy5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1Zy5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlcl9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsdGtcbGliXHRrODUubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NS5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlci5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGtpbnRlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvYnVpbGRfc3NsLnB5IGIvUEMvVkM2L2J1aWxkX3NzbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhZjA4NC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBtb2R1bGUgZm9yIFdpbmRvd3MuCi0jIFVzZXMgUGVybCB0byBzZXR1cCB0aGUgT3BlblNTTCBlbnZpcm9ubWVudCBjb3JyZWN0bHkKLSMgYW5kIGJ1aWxkIE9wZW5TU0wsIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBubWFrZSBzZXNzaW9uCi0jIGZvciBfc3NsLnB5ZCBpdHNlbGYuCi0KLSMgVEhFT1JFVElDQUxMWSwgeW91IGNhbjoKLSMgKiBVbnBhY2sgdGhlIGxhdGVzdCBTU0wgcmVsZWFzZSBvbmUgbGV2ZWwgYWJvdmUgeW91ciBtYWluIFB5dGhvbiBzb3VyY2UKLSMgICBkaXJlY3RvcnkuICBJdCBpcyBsaWtlbHkgeW91IHdpbGwgYWxyZWFkeSBmaW5kIHRoZSB6bGliIGxpYnJhcnkgYW5kCi0jICAgYW55IG90aGVyIGV4dGVybmFsIHBhY2thZ2VzIHRoZXJlLgotIyAqIEluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGlzIHNvbWV3aGVyZSBvbiB5b3VyIHBhdGguCi0jICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDL1ZDNiBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgc3NsIFB5dGhvbiBleHRlbnNpb24KLSMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLSMgTW9kaWZpZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcwotIyBOb3cgdGhpcyBzY3JpcHQgc3VwcG9ydHMgcHJlLWdlbmVyYXRlZCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotIyBEZXZlbG9wZXJzIGRvbid0IG5lZWQgYW4gaW5zdGFsbGF0aW9uIG9mIFBlcmwgYW55bW9yZSB0byBidWlsZCBQeXRob24uIEEgc3ZuCi0jIGNoZWNrb3V0IGZyb20gb3VyIHN2biByZXBvc2l0b3J5IGlzIGVub3VnaC4KLQotaW1wb3J0IG9zLCBzeXMsIHJlLCBzaHV0aWwKLQotIyBGaW5kIGFsbCAiZm9vLmV4ZSIgZmlsZXMgb24gdGhlIFBBVEguCi1kZWYgZmluZF9hbGxfb25fcGF0aChmaWxlbmFtZSwgZXh0cmFzID0gTm9uZSk6Ci0gICAgZW50cmllcyA9IG9zLmVudmlyb25bIlBBVEgiXS5zcGxpdChvcy5wYXRoc2VwKQotICAgIHJldCA9IFtdCi0gICAgZm9yIHAgaW4gZW50cmllczoKLSAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICBpZiBleHRyYXM6Ci0gICAgICAgIGZvciBwIGluIGV4dHJhczoKLSAgICAgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICByZXR1cm4gcmV0Ci0KLSMgRmluZCBhIHN1aXRhYmxlIFBlcmwgaW5zdGFsbGF0aW9uIGZvciBPcGVuU1NMLgotIyBjeWd3aW4gcGVybCBkb2VzICpub3QqIHdvcmsuICBBY3RpdmVQZXJsIGRvZXMuCi0jIEJlaW5nIGEgUGVybCBkdW1teSwgdGhlIHNpbXBsZXN0IHdheSBJIGNhbiBjaGVjayBpcyBpZiB0aGUgIldpbjMyIiBwYWNrYWdlCi0jIGlzIGF2YWlsYWJsZS4KLWRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6Ci0gICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4oJyIlcyIgLWUgInVzZSBXaW4zMjsiJyAlIHBlcmwpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50KCJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIpCi0gICAgaWYgcGVybHM6Ci0gICAgICAgIHByaW50KCIgdGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCi0gICAgICAgIGZvciBwIGluIHBlcmxzOgotICAgICAgICAgICAgcHJpbnQoIiAiLCBwKQotICAgICAgICBwcmludCgiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIikKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiIE5PIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQgb24gdGhpcyBtYWNoaW5lIGF0IGFsbCEiKQotICAgIHByaW50KCIgUGxlYXNlIGluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGFwcGVhcnMgb24geW91ciBwYXRoIikKLSAgICByZXR1cm4gTm9uZQotCi0jIExvY2F0ZSB0aGUgYmVzdCBTU0wgZGlyZWN0b3J5IGdpdmVuIGEgZmV3IHJvb3RzIHRvIGxvb2sgaW50by4KLWRlZiBmaW5kX2Jlc3Rfc3NsX2Rpcihzb3VyY2VzKToKLSAgICBjYW5kaWRhdGVzID0gW10KLSAgICBmb3IgcyBpbiBzb3VyY2VzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IGRvIG5vdCBhYnNwYXRoIHM7IHRoZSBidWlsZCB3aWxsIGZhaWwgaWYgYW55Ci0gICAgICAgICAgICAjIGhpZ2hlciB1cCBkaXJlY3RvcnkgbmFtZSBoYXMgc3BhY2VzIGluIGl0LgotICAgICAgICAgICAgZm5hbWVzID0gb3MubGlzdGRpcihzKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICBmbmFtZXMgPSBbXQotICAgICAgICBmb3IgZm5hbWUgaW4gZm5hbWVzOgotICAgICAgICAgICAgZnFuID0gb3MucGF0aC5qb2luKHMsIGZuYW1lKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcW4pIGFuZCBmbmFtZS5zdGFydHN3aXRoKCJvcGVuc3NsLSIpOgotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGZxbikKLSAgICAjIE5vdyB3ZSBoYXZlIGFsbCB0aGUgY2FuZGlkYXRlcywgbG9jYXRlIHRoZSBiZXN0LgotICAgIGJlc3RfcGFydHMgPSBbXQotICAgIGJlc3RfbmFtZSA9IE5vbmUKLSAgICBmb3IgYyBpbiBjYW5kaWRhdGVzOgotICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KCJbLi1dIiwgb3MucGF0aC5iYXNlbmFtZShjKSlbMTpdCi0gICAgICAgICMgZWcgLSBvcGVuc3NsLTAuOS43LWJldGExIC0gaWdub3JlIGFsbCAiYmV0YSIgb3IgYW55IG90aGVyIHF1YWxpZmllcnMKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+PSA0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgcGFydHMgPiBiZXN0X3BhcnRzOgotICAgICAgICAgICAgYmVzdF9wYXJ0cyA9IHBhcnRzCi0gICAgICAgICAgICBiZXN0X25hbWUgPSBjCi0gICAgaWYgYmVzdF9uYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcmludCgiRm91bmQgYW4gU1NMIGRpcmVjdG9yeSBhdCAnJXMnIiAlIChiZXN0X25hbWUsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiQ291bGQgbm90IGZpbmQgYW4gU1NMIGRpcmVjdG9yeSBpbiAnJXMnIiAlIChzb3VyY2VzLCkpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIGJlc3RfbmFtZQotCi1kZWYgZml4X21ha2VmaWxlKG1ha2VmaWxlKToKLSAgICAiIiJGaXggc29tZSBzdHVmZiBpbiBhbGwgbWFrZWZpbGVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgcmV0dXJuCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlKSBhcyBmaW46Ci0gICAgICAgIGxpbmVzID0gZmluLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQRVJMPSIpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNQPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiQ1A9Y29weVxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJNS0RJUj0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIk1LRElSPW1rZGlyXG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNGTEFHPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBmb3IgYWxnbyBpbiAoIlJDNSIsICJNREMyIiwgIklERUEiKToKLSAgICAgICAgICAgICAgICAgICAgbm9hbGdvID0gIiAtRE9QRU5TU0xfTk9fJXMiICUgYWxnbwotICAgICAgICAgICAgICAgICAgICBpZiBub2FsZ28gbm90IGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArIG5vYWxnbwotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJ1xuJwotICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotCi1kZWYgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCk6Ci0gICAgcHJpbnQoInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUpCi0gICAgcHJpbnQoZG9fc2NyaXB0KQotICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCi0KLWRlZiBjbXAoZjEsIGYyKToKLSAgICBidWZzaXplID0gMTAyNCAqIDgKLSAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQotICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQotICAgICAgICAgICAgaWYgYjEgIT0gYjI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgYjE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotZGVmIGNvcHkoc3JjLCBkc3QpOgotICAgIGlmIG9zLnBhdGguaXNmaWxlKGRzdCkgYW5kIGNtcChzcmMsIGRzdCk6Ci0gICAgICAgIHJldHVybgotICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQotCi1kZWYgbWFpbigpOgotICAgIGRlYnVnID0gIi1kIiBpbiBzeXMuYXJndgotICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKLSAgICBpZiAxOiAjIFdpbjMyCi0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbmFzbSIKLSAgICAgICAgbWFrZWZpbGU9Im1zXFxudC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlCi0gICAgICAgIGRpcnN1ZmZpeCA9ICIzMiIKLSAgICBjb25maWd1cmUgKz0gIiBuby1pZGVhIG5vLXJjNSBuby1tZGMyIgotICAgIG1ha2VfZmxhZ3MgPSAiIgotICAgIGlmIGJ1aWxkX2FsbDoKLSAgICAgICAgbWFrZV9mbGFncyA9ICItYSIKLSAgICAjIHBlcmwgc2hvdWxkIGJlIG9uIHRoZSBwYXRoLCBidXQgd2UgYWxzbyBsb29rIGluICJccGVybCIgYW5kICJjOlxccGVybCIKLSAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKLSAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCi0gICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmw6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIk5vIFBlcmwgaW5zdGFsbGF0aW9uIHdhcyBmb3VuZC4gRXhpc3RpbmcgTWFrZWZpbGVzIGFyZSB1c2VkLiIpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMyBsZXZlbHMgdXAgZnJvbSBQQy9WQzYgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KLSAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi5cXC4uIiwpKQotICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIG9sZF9jZCA9IG9zLmdldGN3ZCgpCi0gICAgdHJ5OgotICAgICAgICBvcy5jaGRpcihzc2xfZGlyKQotICAgICAgICAjIElmIHRoZSBzc2wgbWFrZWZpbGVzIGRvIG5vdCBleGlzdCwgd2UgaW52b2tlIFBlcmwgdG8gZ2VuZXJhdGUgdGhlbS4KLSAgICAgICAgIyBEdWUgdG8gYSBidWcgaW4gdGhpcyBzY3JpcHQsIHRoZSBtYWtlZmlsZSBzb21ldGltZXMgZW5kZWQgdXAgZW1wdHkKLSAgICAgICAgIyBGb3JjZSBhIHJlZ2VuZXJhdGlvbiBpZiBpdCBpcy4KLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKSBvciBvcy5wYXRoLmdldHNpemUobWFrZWZpbGUpPT0wOgotICAgICAgICAgICAgaWYgcGVybCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHByaW50KCJQZXJsIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYWtlZmlsZXMhIikKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgICAgICAgICBwcmludCgiQ3JlYXRpbmcgdGhlIG1ha2VmaWxlcy4uLiIpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgICMgUHV0IG91ciB3b3JraW5nIFBlcmwgYXQgdGhlIGZyb250IG9mIG91ciBwYXRoCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0gPSBvcy5wYXRoLmRpcm5hbWUocGVybCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdCi0gICAgICAgICAgICBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KQotICAgICAgICAgICAgaWYgZGVidWc6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIk9wZW5TU0wgZGVidWcgYnVpbGRzIGFyZW4ndCBzdXBwb3J0ZWQuIikKLSAgICAgICAgICAgICNpZiBhcmNoPT0ieDg2IiBhbmQgZGVidWc6Ci0gICAgICAgICAgICAjICAgICMgdGhlIGRvX21hc20gc2NyaXB0IGluIG9wZW5zc2wgZG9lc24ndCBnZW5lcmF0ZSBhIGRlYnVnCi0gICAgICAgICAgICAjICAgICMgYnVpbGQgbWFrZWZpbGUgc28gd2UgZ2VuZXJhdGUgaXQgaGVyZToKLSAgICAgICAgICAgICMgICAgb3Muc3lzdGVtKCJwZXJsIHV0aWxcbWsxbWYucGwgZGVidWcgIitjb25maWd1cmUrIiA+IittYWtlZmlsZSkKLQotICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQotCi0gICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCi0gICAgICAgIGlmIHBlcmwgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXGJ1aWxkaW5mLmgiKQotICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cb3BlbnNzbGNvbmYuaCIpCi0KLSAgICAgICAgI21ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQotICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIC1mIFwiJXNcIiIgJSBtYWtlZmlsZQotICAgICAgICBwcmludCgiRXhlY3V0aW5nIHNzbCBtYWtlZmlsZXM6IiwgbWFrZUNvbW1hbmQpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByYyA9IG9zLnN5c3RlbShtYWtlQ29tbWFuZCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBwcmludCgiRXhlY3V0aW5nICIrbWFrZWZpbGUrIiBmYWlsZWQiKQotICAgICAgICAgICAgcHJpbnQocmMpCi0gICAgICAgICAgICBzeXMuZXhpdChyYykKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy5jaGRpcihvbGRfY2QpCi0gICAgIyBBbmQgZmluYWxseSwgd2UgY2FuIGJ1aWxkIHRoZSBfc3NsIG1vZHVsZSBpdHNlbGYgZm9yIFB5dGhvbi4KLSAgICBkZWZzID0gIlNTTF9ESVI9JXMiICUgKHNzbF9kaXIsKQotICAgIGlmIGRlYnVnOgotICAgICAgICBkZWZzID0gZGVmcyArICIgIiArICJERUJVRz0xIgotICAgIHJjID0gb3Muc3lzdGVtKCdubWFrZSAvbm9sb2dvIC1mIF9zc2wubWFrICcgKyBkZWZzICsgIiAiICsgbWFrZV9mbGFncykKLSAgICBzeXMuZXhpdChyYykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WQzYvYnVpbGRfdGtpbnRlci5weSBiL1BDL1ZDNi9idWlsZF90a2ludGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWNhOTJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9idWlsZF90a2ludGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2VzcwotCi1UQ0xfTUFKT1IgPSA4Ci1UQ0xfTUlOT1IgPSA1Ci1UQ0xfUEFUQ0ggPSAyCi0KLVRJWF9NQUpPUiA9IDgKLVRJWF9NSU5PUiA9IDQKLVRJWF9QQVRDSCA9IDMKLQotZGVmIGFic3BhdGgobmFtZSk6Ci0gICAgcGFyID0gb3MucGF0aC5wYXJkaXIKLSAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihfX2ZpbGVfXywgcGFyLCBwYXIsIHBhciwgcGFyLCBuYW1lKSkKLQotVENMX0RJUiA9IGFic3BhdGgoInRjbCVkLiVkLiVkIiAlIChUQ0xfTUFKT1IsIFRDTF9NSU5PUiwgVENMX1BBVENIKSkKLVRLX0RJUiAgPSBhYnNwYXRoKCJ0ayVkLiVkLiVkIiAgJSAoVENMX01BSk9SLCBUQ0xfTUlOT1IsIFRDTF9QQVRDSCkpCi1USVhfRElSID0gYWJzcGF0aCgidGl4JWQuJWQuJWQiICUgKFRJWF9NQUpPUiwgVElYX01JTk9SLCBUSVhfUEFUQ0gpKQotT1VUX0RJUiA9IGFic3BhdGgoInRjbHRrIikKLQotZGVmIGhhdmVfYXJncygqYSk6Ci0gICAgcmV0dXJuIGFueShzIGluIHN5cy5hcmd2WzE6XSBmb3IgcyBpbiBhKQotCi1kZWYgZW50ZXIoZGlyKToKLSAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oZGlyLCAid2luIikpCi0KLWRlZiBtYWluKCk6Ci0gICAgZGVidWcgPSBoYXZlX2FyZ3MoIi1kIiwgIi0tZGVidWciKQotICAgIGNsZWFuID0gaGF2ZV9hcmdzKCJjbGVhbiIpCi0gICAgaW5zdGFsbCA9IGhhdmVfYXJncygiaW5zdGFsbCIpCi0gICAgdGNsID0gaGF2ZV9hcmdzKCJ0Y2wiKQotICAgIHRrID0gaGF2ZV9hcmdzKCJ0ayIpCi0gICAgdGl4ID0gaGF2ZV9hcmdzKCJ0aXgiKQotICAgIGlmIG5vdCh0Y2wpIGFuZCBub3QodGspIGFuZCBub3QodGl4KToKLSAgICAgICAgdGNsID0gdGsgPSB0aXggPSBUcnVlCi0KLSAgICBkZWYgbm1ha2UobWFrZWZpbGUsICphKToKLSAgICAgICAgYXJncyA9IFsibm1ha2UiLCAiL25vbG9nbyIsICIvZiIsIG1ha2VmaWxlLCAiREVCVUc9JWQiICUgZGVidWddCi0gICAgICAgIGFyZ3MuZXh0ZW5kKGEpCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChhcmdzKQotCi0gICAgaWYgdGNsOgotICAgICAgICBlbnRlcihUQ0xfRElSKQotICAgICAgICBkZWYgbm1ha2VfdGNsKCphKToKLSAgICAgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICphKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlX3RjbCgiY2xlYW4iKQotICAgICAgICBlbGlmIGluc3RhbGw6Ci0gICAgICAgICAgICBubWFrZV90Y2woImluc3RhbGwiLCAiSU5TVEFMTERJUj0iICsgT1VUX0RJUikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5tYWtlX3RjbCgpCi0KLSAgICBpZiB0azoKLSAgICAgICAgZW50ZXIoVEtfRElSKQotICAgICAgICBkZWYgbm1ha2VfdGsoKmEpOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgIlRDTERJUj0iICsgVENMX0RJUiwgKmEpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2VfdGsoImNsZWFuIikKLSAgICAgICAgZWxpZiBpbnN0YWxsOgotICAgICAgICAgICAgbm1ha2VfdGsoImluc3RhbGwiLCAiSU5TVEFMTERJUj0iICsgT1VUX0RJUikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5tYWtlX3RrKCkKLQotICAgIGlmIHRpeDoKLSAgICAgICAgZW50ZXIoVElYX0RJUikKLSAgICAgICAgZGVmIG5tYWtlX3RpeCgqYSk6Ci0gICAgICAgICAgICBubWFrZSgicHl0aG9uLm1hayIsCi0gICAgICAgICAgICAgICAgICAiVENMX01BSk9SPSVkIiAlIFRDTF9NQUpPUiwKLSAgICAgICAgICAgICAgICAgICJUQ0xfTUlOT1I9JWQiICUgVENMX01JTk9SLAotICAgICAgICAgICAgICAgICAgIlRDTF9QQVRDSD0lZCIgJSBUQ0xfUEFUQ0gsCi0gICAgICAgICAgICAgICAgICAiTUFDSElORT1JWDg2IiwgKmEpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2VfdGl4KCJjbGVhbiIpCi0gICAgICAgIGVsaWYgaW5zdGFsbDoKLSAgICAgICAgICAgIG5tYWtlX3RpeCgiaW5zdGFsbCIsICJJTlNUQUxMX0RJUj0iICsgT1VUX0RJUikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5tYWtlX3RpeCgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WQzYvYnoyLmRzcCBiL1BDL1ZDNi9iejIuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTJjYmFkLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9iejIuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJiejIiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9YnoyIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgImJ6Mi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiYnoyLm1hayIgQ0ZHPSJiejIgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiYnoyIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgImJ6MiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgImJ6MiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxiejIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjYiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cYnppcDItMS4wLjZcbGliYnoyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTcwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL2J6Mi5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lIC9ub2RlZmF1bHRsaWINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiYnoyIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXGJ6MiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC42IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC42XGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL2J6Ml9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiYnoyIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgImJ6MiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcCBiL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTczNWUxMi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCi0NCi1DRkc9bWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm1ha2VfdmVyc2lvbmluZm8ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm1ha2VfdmVyc2lvbmluZm8ubWFrIiBDRkc9Im1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAibWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcbWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLSMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQotSW5wdXRQYXRoPS5cbWFrZV92ZXJzaW9uaW5mby5leGUNCi1TT1VSQ0U9IiQoSW5wdXRQYXRoKSINCi0NCi0iLi5ccHl0aG9ubnRfcmMuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCi0JLlxtYWtlX3ZlcnNpb25pbmZvLmV4ZSA+Li5ccHl0aG9ubnRfcmMuaA0KLQ0KLSMgRW5kIEN1c3RvbSBCdWlsZA0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXG1ha2VfdmVyc2lvbmluZm8iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9tYWtlX3ZlcnNpb25pbmZvX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotIyBCZWdpbiBDdXN0b20gQnVpbGQNCi1JbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlDQotU09VUkNFPSIkKElucHV0UGF0aCkiDQotDQotIi4uXHB5dGhvbm50X3JjX2QuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCi0JLlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlID4uLlxweXRob25udF9yY19kLmgNCi0NCi0jIEVuZCBDdXN0b20gQnVpbGQNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cbWFrZV92ZXJzaW9uaW5mby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3BjYnVpbGQuZHN3IGIvUEMvVkM2L3BjYnVpbGQuZHN3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2IyZWJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9wY2J1aWxkLmRzdworKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi1NaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfY3R5cGVzIj0iLlxfY3R5cGVzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfY3R5cGVzX3Rlc3QiPSIuXF9jdHlwZXNfdGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfZWxlbWVudHRyZWUiPSIuXF9lbGVtZW50dHJlZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfbXNpIj0iLlxfbXNpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfbXVsdGlwcm9jZXNzaW5nIj0iLlxfbXVsdGlwcm9jZXNzaW5nLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc29ja2V0Ij0iLlxfc29ja2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc3FsaXRlMyI9Ii5cX3NxbGl0ZTMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NzbCI9Ii5cX3NzbC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob24NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSB3OXhwb3Blbg0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfdGVzdGNhcGkiPSIuXF90ZXN0Y2FwaS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3RraW50ZXIiPSIuXF90a2ludGVyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJiejIiPSIuXGJ6Mi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJtYWtlX3ZlcnNpb25pbmZvIj0iLlxtYWtlX3ZlcnNpb25pbmZvLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5ZXhwYXQiPSIuXHB5ZXhwYXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbiI9Ii5ccHl0aG9uLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweXRob25jb3JlIj0iLlxweXRob25jb3JlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgbWFrZV92ZXJzaW9uaW5mbw0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweXRob253Ij0iLlxweXRob253LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzZWxlY3QiPSIuXHNlbGVjdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAidW5pY29kZWRhdGEiPSIuXHVuaWNvZGVkYXRhLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ3OXhwb3BlbiI9Ii5cdzl4cG9wZW4uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAid2luc291bmQiPSIuXHdpbnNvdW5kLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLUdsb2JhbDoNCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDM+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLQ0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weWV4cGF0LmRzcCBiL1BDL1ZDNi9weWV4cGF0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYxYzllZi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHlleHBhdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweWV4cGF0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIgQ0ZHPSJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJweWV4cGF0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHlleHBhdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgQllURU9SREVSPTEyMzQgL0QgWE1MX0NPTlRFWFRfQllURVM9MTAyNCAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5ZXhwYXQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweWV4cGF0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5ZXhwYXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJIQVZFX0VYUEFUX0giIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgQllURU9SREVSPTEyMzQgL0QgWE1MX0NPTlRFWFRfQllURVM9MTAyNCAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5ZXhwYXRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHlleHBhdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xweWV4cGF0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9uLmRzcCBiL1BDL1ZDNi9weXRob24uZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYThiNzcyLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob24uZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCi0NCi1DRkc9cHl0aG9uIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIiBDRkc9InB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInB5dGhvbiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9uIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLi4uXFxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N0YWNrOjB4MjAwMDAwIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5dGhvbl9kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHljb24uaWNvDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccHl0aG9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX2V4ZS5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob25jb3JlLmRzcCBiL1BDL1ZDNi9weXRob25jb3JlLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlOThkMS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHl0aG9uY29yZS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3ODAgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob25jb3JlIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIgQ0ZHPSJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJweXRob25jb3JlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uY29yZSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxtb2R1bGVzXHpsaWIiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJVU0VfRExfRVhQT1JUIiAvWVggL0ZEIC9abTIwMCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMzLmRsbCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob25jb3JlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJVU0VfRExfRVhQT1JUIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvWm0yMDAgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGxhcmdlaW50LmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9weXRob24zM19kLmRsbCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweXRob25jb3JlIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3N2LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2pzb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9sb2NhbGVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9sc3Byb2YuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tYXRoLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfcGlja2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3JlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3RydWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUENcX3N1YnByb2Nlc3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90aW1lLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXF93YXJuaW5ncy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGFic3RyYWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xhY2N1LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGFjY2VsZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYXNkbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxhc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGF0ZXhpdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXVkaW9vcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcYml0c2V0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZWFycmF5b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNhcHN1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY2V2YWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjbWF0aG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjb2RlY3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY29tcGlsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGNvbmZpZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkeW5hbWljX2Fubm90YXRpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xkaWN0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cZGxfbnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZHRvYS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZXJyb3JzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZpbGV1dGlscy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxmaXJzdHNldHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZsb2F0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmcm96ZW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZ1bmNvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZnV0dXJlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xnY21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGFyZ3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotIyBBREQgQ1BQIC9EIEJVSUxEPTQ2DQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRjb21waWxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0b3B0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cZ2V0cGF0aHAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxncmFtaW5pdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxncmFtbWFyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIxLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGltcG9ydGRsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbGlzdG5vZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1haW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbWFyc2hhbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxtb2RzdXBwb3J0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xtb2R1bGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxtc3ZjcnRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG15c25wcmludGYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG5vZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXHBhcnNlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXHBhcnNldG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHBlZXBob2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWFyZW5hLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5Y3R5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlmcGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHltYXRoLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJjbXAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJ0b2QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cUHl0aG9uXFB5dGhvbi1hc3QuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX250LnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXRob25ydW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHl0aW1lLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHJhbmRvbS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGExbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzbGljZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN5bXRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzeXNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cdGhyZWFkLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXHRva2VuaXplci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblx0cmFjZWJhY2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHR1cGxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHdpbnJlZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob253LmRzcCBiL1BDL1ZDNi9weXRob253LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTljMzI1Yy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHl0aG9udy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob253IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIgMHgwMTAxDQotDQotQ0ZHPXB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob253Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob253Lm1hayIgQ0ZHPSJweXRob253IC0gV2luMzIgQWxwaGEgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJweXRob253IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9udyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5ccGMiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob253IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob253IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbnciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHl0aG9ud19kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweXRob253IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fZXhlLnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXFdpbk1haW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9yZWFkbWUudHh0IGIvUEMvVkM2L3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NzhmODUuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotQnVpbGRpbmcgUHl0aG9uIHVzaW5nIFZDKysgNi4wIG9yIDUuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIHBsYXRmb3JtcywgZS5nLiBXaW5kb3dzCi0yMDAwIGFuZCBYUC4gIEl0IHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYueCBvciA1LnggYW5kIFBsYXRmb3JtCi1TREsgRmVicnVhcnkgMjAwMyBFZGl0aW9uIChDb3JlIFNESykuCi0oRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9yZWFkbWUudHh0LikKLQotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5kc3ciIGluIE1TVkMrKywgc2VsZWN0Ci10aGUgRGVidWcgb3IgUmVsZWFzZSBzZXR0aW5nICh1c2luZyBCdWlsZCAtPiBTZXQgQWN0aXZlIENvbmZpZ3VyYXRpb24uLi4pLAotYW5kIGJ1aWxkIHRoZSBwcm9qZWN0cy4KLQotVGhlIHByb3BlciBvcmRlciB0byBidWlsZCBzdWJwcm9qZWN0czoKLQotMSkgcHl0aG9uY29yZSAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIERMTCBhbmQgbGlicmFyeSBmaWxlcywKLSAgICAgICAgICAgICAgIHB5dGhvbjMzLntkbGwsIGxpYn0gaW4gUmVsZWFzZSBtb2RlKQotCi0yKSBweXRob24gKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBleGVjdXRhYmxlLAotICAgICAgICAgICBweXRob24uZXhlIGluIFJlbGVhc2UgbW9kZSkKLQotMykgdGhlIG90aGVyIHN1YnByb2plY3RzLCBhcyBkZXNpcmVkIG9yIG5lZWRlZCAobm90ZTogIHlvdSBwcm9iYWJseSBkb24ndAotICAgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzIHlvdSdyZSBidWlsZGluZyBhbgotICAgZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvciBzcGVjaWZpY2FsbHkgbWFraW5nIGNoYW5nZXMKLSAgIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50OyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcHlleHBhdF9kLnB5ZCwgYW5kIHNvIG9uLgotCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgotCi1weXRob25jb3JlCi0gICAgLmRsbCBhbmQgLmxpYgotcHl0aG9uCi0gICAgLmV4ZQotcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAotX21zaQotICAgIF9tc2kuYy4gWW91IG5lZWQgdG8gaW5zdGFsbCBXaW5kb3dzIEluc3RhbGxlciBTREsgdG8gYnVpbGQgdGhpcyBtb2R1bGUuCi1fc29ja2V0Ci0gICAgc29ja2V0bW9kdWxlLmMKLV90ZXN0Y2FwaQotICAgIHRlc3RzIG9mIHRoZSBQeXRob24gQyBBUEksIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwotcHlleHBhdAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBhY2NlbGVyYXRlZCBYTUwgcGFyc2luZywgd2hpY2ggaW5jb3Jwb3JhdGVzIHN0YWJsZQotICAgIGNvZGUgZnJvbSB0aGUgRXhwYXQgcHJvamVjdDogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwYXQvCi1zZWxlY3QKLSAgICBzZWxlY3Rtb2R1bGUuYwotdW5pY29kZWRhdGEKLSAgICBsYXJnZSB0YWJsZXMgb2YgVW5pY29kZSBkYXRhCi13aW5zb3VuZAotICAgIHBsYXkgc291bmRzICh0eXBpY2FsbHkgLndhdiBmaWxlcykgdW5kZXIgV2luZG93cwotCi1UaGUgZm9sbG93aW5nIHN1YnByb2plY3RzIHdpbGwgZ2VuZXJhbGx5IE5PVCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFRoZXkKLXdyYXAgY29kZSBQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgeW91J2xsIG5lZWQgdG8gZG93bmxvYWQgdGhlIGJhc2UKLXBhY2thZ2VzIGZpcnN0IGFuZCB1bnBhY2sgdGhlbSBpbnRvIHNpYmxpbmdzIG9mIFBDYnVpbGRzJ3MgcGFyZW50Ci1kaXJlY3Rvcnk7IGZvciBleGFtcGxlLCBpZiB5b3VyIFBDYnVpbGQgaXMgIC4uLi4uLi5cZGlzdFxzcmNcUENidWlsZFwsCi11bnBhY2sgaW50byBuZXcgc3ViZGlyZWN0b3JpZXMgb2YgZGlzdFwuCi0KLV90a2ludGVyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLiAgUmVxdWlyZXMgYnVpbGRpbmcKLSAgICBUY2wvVGsgZmlyc3QuICBGb2xsb3dpbmcgYXJlIGluc3RydWN0aW9ucyBmb3IgVGNsL1RrIDguNS4yLgotCi0gICAgR2V0IHNvdXJjZQotICAgIC0tLS0tLS0tLS0KLSAgICBJbiB0aGUgZGlzdCBkaXJlY3RvcnksIHJ1bgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbC04LjUuMi4xIHRjbDguNS4yCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC41LjIuMCB0azguNS4yCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGl4LTguNC4zLjEgdGl4OC40LjMKLQotICAgIERlYnVnIEJ1aWxkCi0gICAgLS0tLS0tLS0tLS0KLSAgICBUbyBidWlsZCBkZWJ1ZyB2ZXJzaW9uLCBhZGQgREVCVUc9MSB0byBhbGwgbm1ha2UgY2FsbCBiZWxsb3cuCi0KLSAgICBCdWlsZCBUY2wgZmlyc3QgKGRvbmUgaGVyZSB3LyBNU1ZDIDYgb24gV2luMkspCi0gICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgSWYgeW91ciBlbnZpcm9ubWVudCBkb2Vzbid0IGhhdmUgc3RydWN0IF9zdGF0NjQsIHlvdSBuZWVkIHRvIGFwcGx5Ci0gICAgdGNsODUyLnBhdGNoIGluIHRoaXMgZGlyZWN0b3J5IHRvIGRpc3RcdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaC4KLQotICAgIGNkIGRpc3RcdGNsOC41LjJcd2luCi0gICAgcnVuIHZjdmFyczMyLmJhdAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBPcHRpb25hbDogIHJ1biB0ZXN0cywgdmlhCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIHRlc3QKLQotICAgICAgICBhbGwudGNsOiAgICAgICAgVG90YWwgICAyNDI0MiAgIFBhc3NlZCAgMjMzNTggICBTa2lwcGVkIDg3NyAgICAgRmFpbGVkICA3Ci0gICAgICAgIFNvdXJjZWQgMTM3IFRlc3QgRmlsZXMuCi0gICAgICAgIEZpbGVzIHdpdGggZmFpbGluZyB0ZXN0czogZXhlYy50ZXN0IGh0dHAudGVzdCBpby50ZXN0IG1haW4udGVzdCBzdHJpbmcudGVzdCBzdHJpCi0gICAgICAgIG5nT2JqLnRlc3QKLQotICAgIEJ1aWxkIFRrCi0gICAgLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRrOC41LjJcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNS4yCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNS4yIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgWFhYIEkgaGF2ZSBubyBpZGVhIHdoZXRoZXIgIm5tYWtlIC1mIG1ha2VmaWxlLnZjIHRlc3QiIHBhc3NlZCBvcgotICAgIFhYWCBmYWlsZWQuICBJdCBwb3BwZWQgdXAgdG9ucyBvZiBsaXR0bGUgd2luZG93cywgYW5kIGRpZCBsb3RzIG9mCi0gICAgWFhYIHN0dWZmLCBhbmQgbm90aGluZyBibGV3IHVwLgotCi0gICAgQnVpbGQgVGl4Ci0gICAgLS0tLS0tLS0tCi0gICAgY2QgZGlzdFx0aXg4LjQuM1x3aW4KLSAgICBubWFrZSAtZiBweXRob24ubWFrIFRDTF9NQUpPUj04IFRDTF9NSU5PUj01IFRDTF9QQVRDSD0yIE1BQ0hJTkU9SVg4NiBERUJVRz0wCi0gICAgbm1ha2UgLWYgcHl0aG9uLm1hayBUQ0xfTUFKT1I9OCBUQ0xfTUlOT1I9NSBUQ0xfUEFUQ0g9MiBNQUNISU5FPUlYODYgREVCVUc9MCBJTlNUQUxMX0RJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLWJ6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQotICAgICAgICBodHRwOi8vd3d3LmJ6aXAub3JnLwotICAgIERvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgcHl0aG9uLm9yZyBjb3B5IGludG8gdGhlIGRpc3QKLSAgICBkaXJlY3Rvcnk6Ci0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9iemlwMi0xLjAuNgotCi0gICAgQW5kIHJlcXVpcmVzIGJ1aWxkaW5nIGJ6MiBmaXJzdC4KLQotICAgIGNkIGRpc3RcYnppcDItMS4wLjYKLSAgICBubWFrZSAtZiBtYWtlZmlsZS5tc2MKLQotICAgIEFsbCBvZiB0aGlzIG1hbmFnZWQgdG8gYnVpbGQgYnppcDItMS4wLjZcbGliYnoyLmxpYiwgd2hpY2ggdGhlIFB5dGhvbgotICAgIHByb2plY3QgbGlua3MgaW4uCi0KLQotX3NxbGl0ZTMKLSAgICBQeXRob24gd3JhcHBlciBmb3IgU1FMaXRlIGxpYnJhcnkuCi0gICAgCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0gICAgCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLXNvdXJjZS0zLjMuNAotICAgIAotICAgIFRvIHVzZSB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpbiBhIFB5dGhvbiBidWlsZCB0cmVlLCBjb3B5IHNxbGl0ZTMuZGxsIGludG8KLSAgICB0aGUgUEMvVkM2IGZvbGRlci4KLQotCi1fc3NsCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBzZWN1cmUgc29ja2V0cyBsaWJyYXJ5LgotCi0gICAgR2V0IHRoZSBsYXRlc3Qgc291cmNlIGNvZGUgZm9yIE9wZW5TU0wgZnJvbQotICAgICAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnCi0KLSAgICBZb3UgKHByb2JhYmx5KSBkb24ndCB3YW50IHRoZSAiZW5naW5lIiBjb2RlLiAgRm9yIGV4YW1wbGUsIGRvbid0IGdldAotICAgICAgICBvcGVuc3NsLWVuZ2luZS0wLjkuNmcudGFyLmd6Ci0KLSAgICBVbnBhY2sgaW50byB0aGUgImRpc3QiIGRpcmVjdG9yeSwgcmV0YWluaW5nIHRoZSBmb2xkZXIgbmFtZSBmcm9tCi0gICAgdGhlIGFyY2hpdmUgLSBmb3IgZXhhbXBsZSwgdGhlIGxhdGVzdCBzdGFibGUgT3BlblNTTCB3aWxsIGluc3RhbGwgYXMKLSAgICAgICAgZGlzdC9vcGVuc3NsLTEuMC4xZQotCi0gICAgWW91IG5lZWQgdG8gdXNlIHZlcnNpb24gMS4wLjFlIG9mIE9wZW5TU0wuCi0KLSAgICBZb3UgY2FuIGluc3RhbGwgdGhlIE5BU00gYXNzZW1ibGVyIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5uYXNtLnVzLwotICAgIGZvciB4ODYgYnVpbGRzLiAgUHV0IG5hc213LmV4ZSBhbnl3aGVyZSBpbiB5b3VyIFBBVEguCi0gICAgTm90ZTogcmVjZW50IHJlbGVhc2VzIG9mIG5hc20gb25seSBoYXZlIG5hc20uZXhlLiBKdXN0IHJlbmFtZSBpdCB0byAKLSAgICBuYXNtdy5leGUuCi0KLSAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KLSAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbSAKLSAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKLSAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQy9WQzYvYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KLSAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTAotICAgIGluc3RhbGxhdGlvbiwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBmaW5hbCAucHlkLgotCi0gICAgYnVpbGRfc3NsLnB5IGF0dGVtcHRzIHRvIGNhdGNoIHRoZSBtb3N0IGNvbW1vbiBlcnJvcnMgKHN1Y2ggYXMgbm90Ci0gICAgYmVpbmcgYWJsZSB0byBmaW5kIE9wZW5TU0wgc291cmNlcywgb3Igbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFBlcmwKLSAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuCi0gICAgSWYgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5Ci0gICAgKGVnLCB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UKLSAgICBhIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5Ci0gICAgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQtbGluZS4KLQotICAgIGJ1aWxkX3NzbC5weS9NU1ZDIGlzbid0IGNsZXZlciBlbm91Z2ggdG8gY2xlYW4gT3BlblNTTCAtIHlvdSBtdXN0IGRvCi0gICAgdGhpcyBieSBoYW5kLgotCi0KLVlPVVIgT1dOIEVYVEVOU0lPTiBETExzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMLCB0aGVyZSdzIGFuIGV4YW1wbGUKLXdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uL1BDL2V4YW1wbGUvOyByZWFkIHRoZSBmaWxlCi1yZWFkbWUudHh0IHRoZXJlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvUEMvVkM2L3JtcHljLnB5IGIvUEMvVkM2L3JtcHljLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGQ2ODIzLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uLy4uL0xpYiIpCi1wcmludCBucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiCmRpZmYgLS1naXQgYS9QQy9WQzYvcnQuYmF0IGIvUEMvVkM2L3J0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTllYWRkNy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcnQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotQHJlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4KLUByZW0gVXNhZ2U6ICBydCBbLWRdIFstT10gWy1xXSByZWdydGVzdF9hcmdzCi1AcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotQHJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotQHJlbSAtcSAgICJxdWljayIgLS0gbm9ybWFsbHkgdGhlIHRlc3RzIGFyZSBydW4gdHdpY2UsIHRoZSBmaXJzdCB0aW1lCi1AcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1AcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotQHJlbSBBbGwgbGVhZGluZyBpbnN0YW5jZXMgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIHNoaWZ0ZWQgb2ZmLCBhbmQKLUByZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLUByZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1AcmVtIHJ1bnMKLUByZW0gICAgIHB5dGhvbl9kIC1PIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1AcmVtIHR3aWNlLCBhbmQKLUByZW0gICAgIHJ0IC1xIC1nIHRlc3RfYmluYXNjaWkKLUByZW0gcnVucwotQHJlbSAgICAgcHl0aG9uX2QgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotQHJlbSB0byBnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQtb3V0cHV0IGZpbGUgZm9yIGJpbmFzY2lpIHF1aWNrbHkuCi1Ac2V0IF9leGU9cHl0aG9uCi1Ac2V0IF9xbW9kZT1ubwotQHNldCBfZGFzaE89Ci1AZ290byBDaGVja09wdHMKLTpBZ2FpbgotQHNoaWZ0Ci06Q2hlY2tPcHRzCi1AaWYgIiUxIj09Ii1PIiBzZXQgX2Rhc2hPPS1PCi1AaWYgIiUxIj09Ii1PIiBnb3RvIEFnYWluCi1AaWYgIiUxIj09Ii1xIiBzZXQgX3Ftb2RlPXllcwotQGlmICIlMSI9PSItcSIgZ290byBBZ2FpbgotQGlmICIlMSI9PSItZCIgc2V0IF9leGU9cHl0aG9uX2QKLUBpZiAiJTEiPT0iLWQiIGdvdG8gQWdhaW4KLUBpZiAiJV9xbW9kZSUiPT0ieWVzIiBnb3RvIFFtb2RlCi1AZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCi1AJV9leGUlIHJtcHljLnB5Ci0lX2V4ZSUgJV9kYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLUBlY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLUBwYXVzZQotOlFtb2RlCi0lX2V4ZSUgJV9kYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLUBzZXQgX2V4ZT0KLUBzZXQgX3Ftb2RlPQotQHNldCBfZGFzaE89CmRpZmYgLS1naXQgYS9QQy9WQzYvc2VsZWN0LmRzcCBiL1BDL1ZDNi9zZWxlY3QuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGU1MjhjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9zZWxlY3QuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJzZWxlY3QiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9c2VsZWN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInNlbGVjdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIgQ0ZHPSJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInNlbGVjdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInNlbGVjdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzb2NrMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vc2VsZWN0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAic2VsZWN0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHNlbGVjdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3c29jazMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9vdXQ6Ii4vc2VsZWN0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAic2VsZWN0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3RjbDg1Mi5wYXRjaCBiL1BDL1ZDNi90Y2w4NTIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNjc4MGEuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3RjbDg1Mi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS0tLSB0Y2w4LjUuMlxnZW5lcmljXHRjbC5oCUZyaSBKdW4gMTMgMDM6MzU6MzkgMjAwOAotKysrIHRjbDguNS4yXGdlbmVyaWNcdGNsLmgJU3VuIEphbiAgNCAxNjo1MjozMCAyMDA5Ci1AQCAtMzY3LDcgKzM2Nyw3IEBACi0gdHlwZWRlZiBzdHJ1Y3Qgc3RhdGk2NCBUY2xfU3RhdEJ1ZjsKLSAjICAgICAgICAgZGVmaW5lIFRDTF9MTF9NT0RJRklFUgkiTCIKLSAjICAgICAgZWxzZSAvKiBfX0JPUkxBTkRDX18gKi8KLS0jICAgICAgICAgaWYgX01TQ19WRVIgPCAxNDAwICYmICFkZWZpbmVkKF9NX0lYODYpCi0rIyAgICAgICAgIGlmIF9NU0NfVkVSIDwgMTQwMCAvKiYmICFkZWZpbmVkKF9NX0lYODYpKi8KLSB0eXBlZGVmIHN0cnVjdCBfc3RhdGk2NAlUY2xfU3RhdEJ1ZjsKLSAjICAgICAgICAgZWxzZQotIHR5cGVkZWYgc3RydWN0IF9zdGF0NjQJVGNsX1N0YXRCdWY7CmRpZmYgLS1naXQgYS9QQy9WQzYvdW5pY29kZWRhdGEuZHNwIGIvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA0ZGI2Ny4uMDAwMDAwMAotLS0gYS9QQy9WQzYvdW5pY29kZWRhdGEuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ1bmljb2RlZGF0YSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz11bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ1bmljb2RlZGF0YS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIiBDRkc9InVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAidW5pY29kZWRhdGEiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcdW5pY29kZWRhdGEiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi91bmljb2RlZGF0YV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi93OXhwb3Blbi5kc3AgYi9QQy9WQzYvdzl4cG9wZW4uZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTY0MDNjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi93OXhwb3Blbi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Inc5eHBvcGVuIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIgMHgwMTAxDQotDQotQ0ZHPXc5eHBvcGVuIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInc5eHBvcGVuLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3OXhwb3Blbi5tYWsiIENGRz0idzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcdzl4cG9wZW4iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcdzl4cG9wZW4iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIgL25vbG9nbyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3c5eHBvcGVuX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cdzl4cG9wZW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi93aW5zb3VuZC5kc3AgYi9QQy9WQzYvd2luc291bmQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTA5YjliLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi93aW5zb3VuZC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IndpbnNvdW5kIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXdpbnNvdW5kIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbnNvdW5kLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3aW5zb3VuZC5tYWsiIENGRz0id2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJ3aW5zb3VuZCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5ccGMiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgd2lubW0ubGliIHVzZXIzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE2MDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vd2luc291bmQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3aW5zb3VuZCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE2MDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3dpbnNvdW5kX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cd2luc291bmQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL1VuaW5zdGFsLndzZSBiL1BDL1ZTNy4xL1VuaW5zdGFsLndzZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2ZGQzMC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9Vbmluc3RhbC53c2UKKysrIC9kZXYvbnVsbApAQCAtMSw1MTQgKzAsMCBAQAotRG9jdW1lbnQgVHlwZTogV1NFCi1pdGVtOiBHbG9iYWwKLSAgVmVyc2lvbj04LjE0Ci0gIEZsYWdzPTAwMDAwMTAwCi0gIFNwbGl0PTE0MjAKLSAgTGFuZ3VhZ2VzPTY1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCi0gIENvcHkgRGVmYXVsdD0xCi0gIEphcGFuZXNlIEZvbnQgTmFtZT1NUyBHb3RoaWMKLSAgSmFwYW5lc2UgRm9udCBTaXplPTEwCi0gIFN0YXJ0IEdyYWRpZW50PTAgMCAyNTUKLSAgRW5kIEdyYWRpZW50PTAgMCAwCi0gIFdpbmRvd3MgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDEwMDAKLSAgTWVzc2FnZSBGb250PU1TIFNhbnMgU2VyaWYKLSAgRm9udCBTaXplPTgKLSAgRGlzayBMYWJlbD1HTEJTCi0gIERpc2sgRmlsZW5hbWU9SU5TVEFMTAotICBQYXRjaCBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gIFBhdGNoIFRocmVzaG9sZD0yMDAKLSAgUGF0Y2ggTWVtb3J5PTQwOTYKLSAgUGVyLVVzZXIgVmVyc2lvbiBJRD0xCi0gIENyeXN0YWwgRm9ybWF0PTEwMTExMTAwMTAxMTAwMDAwMDEwMDAxMDAxMDAxMDAxCi0gIFN0ZXAgVmlldz0mUHJvcGVydGllcwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgVGhpcyBpcyBhIHZlcmJhdGltIGNvcHkgb2YgV2lzZSdzIFVuaW5zdGFsLndzZSwgYWx0ZXJlZCBhdCB0aGUgZW5kIHRvIHdyaXRlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PXVuaW5zdGFsbCBpbmZvIHVuZGVyIEhLQ1UgaW5zdGVhZCBvZiBIS0xNIGlmIG91ciBET0FETUlOIHZhciBpcyBmYWxzZS4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgSW5zdGFsbCBTdXBwb3J0IGZvciB1bmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9QQVRICi0gIFZhbHVlPSVfTE9HRklMRV9QQVRIXyUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9QQVRICi0gIFZhbHVlPSVVTklOU1RBTExfUEFUSCVcVU5XSVNFLkVYRQotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fRVhFX09TX1RZUEVfCi0gIFZhbHVlPVdJTjMyCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcVU5XSVNFMzIuRVhFCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbHNlCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcVU5XSVNFLkVYRQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgIEluc3RhbGwgU3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX0xBTkcKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX0xBTkcKLSAgVmFsdWU9JVVOSU5TVEFMTF9MQU5HJVxVTldJU0UuSU5JCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfQ19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1ECi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0RfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREVVCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19FX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5ERVUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUYKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlBURwotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfRl9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuUFRHCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1HCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0dfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19IX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUkKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklUQQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfSV9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVRBCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1KCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5EQU4KLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0pfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRBTgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRklOCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19LX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GSU4KLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUwKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklTTAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfTF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVNMCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1NCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OTEQKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX01fTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5MRAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTk9SCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19OX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OT1IKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPU8KLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlNWRQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfT19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuU1ZFCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1QCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5KUE4KLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX1BfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkpQTgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgSW5zdGFsbCB0aGUgYWRkL3JlbW92ZSBvciB1bmluc3RhbGwgaWNvbgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9QQVRICi0gIFZhbHVlPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUlOU1RfTE9HX1BBVEgKLSAgVmFsdWU9JV9MT0dGSUxFX1BBVEhfJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMTExMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V3JpdGUgdW5pbnN0YWxsIGluZm8gdW5kZXIgSEtMTS4gIFRoaXMgaWYvZWxzZS9lbmQgYmxvY2sgYWRkZWQgYnkgVGltLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVBUFBUSVRMRSUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5TmFtZQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglICVJTlNUX0xPR19QQVRIJQotICBOZXcgVmFsdWU9Ci0gIFZhbHVlIE5hbWU9VW5pbnN0YWxsU3RyaW5nCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgc2FtZSwgYnV0IHdyaXRlIHVuZGVyIEhLQ1UgaW5zdGVhZC4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lQVBQVElUTEUlCi0gIFZhbHVlIE5hbWU9RGlzcGxheU5hbWUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJSAlSU5TVF9MT0dfUEFUSCUKLSAgTmV3IFZhbHVlPQotICBWYWx1ZSBOYW1lPVVuaW5zdGFsbFN0cmluZwotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEFkZCBQcm9nTWFuIEljb24KLSAgR3JvdXA9JUdST1VQJQotICBJY29uIE5hbWU9VW5pbnN0YWxsICVBUFBUSVRMRSUKLSAgQ29tbWFuZCBMaW5lPSVVTklOU1RBTExfUEFUSCUgJUlOU1RfTE9HX1BBVEglCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTExMTEwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTIKLSAgaXRlbTogS2V5Ci0gICAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gICAgTmV3IFZhbHVlPSVDT01QQU5ZJQotICAgIFZhbHVlIE5hbWU9UmVnQ29tcGFueQotICAgIFJvb3Q9MgotICBlbmQKLSAgaXRlbTogS2V5Ci0gICAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gICAgTmV3IFZhbHVlPSVOQU1FJQotICAgIFZhbHVlIE5hbWU9UmVnT3duZXIKLSAgICBSb290PTIKLSAgZW5kCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2N0eXBlcy52Y3Byb2ogYi9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1OWQ4OC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX2N0eXBlcyINCi0JUHJvamVjdEdVSUQ9IntGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iRkFMU0UiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc19kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iRkFMU0UiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsgL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NC10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIC9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbGJhY2tzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcc3RnZGljdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYyI+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjY0LmFzbSI+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJQ29tbWFuZExpbmU9ImFtZDY0X21sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsNCi0iDQotCQkJCQlPdXRwdXRzPSImcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7Ii8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvaiBiL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZThhMmMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX2N0eXBlc190ZXN0Ig0KLQlQcm9qZWN0R1VJRD0iezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0iDQotCUtleXdvcmQ9IldpbjMyUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2ogYi9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTJiOWQ5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9lbGVtZW50dHJlZSINCi0JUHJvamVjdEdVSUQ9InsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztIQVZFX0VYUEFUX0g7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZV9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWUubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWUubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fbXNpLnZjcHJvaiBiL1BDL1ZTNy4xL19tc2kudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGZkNDQ3Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19tc2kudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfbXNpIg0KLQlQcm9qZWN0R1VJRD0iezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0iDQotCVNjY1Byb2plY3ROYW1lPSJfbXNpIg0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXHBjIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgYnVmZmVyb3ZlcmZsb3dVLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiBidWZmZXJvdmVyZmxvd1UubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXF9tc2kuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qIGIvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZWQ4ZTQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9zb2NrZXQiDQotCVNjY1Byb2plY3ROYW1lPSJfc29ja2V0Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXRfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjdkOTkxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3NxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fSINCi0JU2NjUHJvamVjdE5hbWU9Il9zcWxpdGUzIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTNfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTNfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxpYTY0XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XGFtZDY0XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NzbC5tYWsgYi9QQy9WUzcuMS9fc3NsLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ3NmE2My4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc3NsLm1haworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLUVYVFJBX0xJQlM9Ci0KLSFJRkRFRiBERUJVRwotU1VGRklYPV9kLnB5ZAotVEVNUD14ODYtdGVtcC1kZWJ1Zy8KLUNGTEFHUz0vT2QgL1ppIC9NRGQgL0xEZCAvRERFQlVHIC9EX0RFQlVHIC9EV0lOMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIuZGJnCi0hRUxTRQotU1VGRklYPS5weWQKLVRFTVA9eDg2LXRlbXAtcmVsZWFzZS8KLUNGTEFHUz0vT3ggL01EIC9MRCAvRFdJTjMyCi1TU0xfTElCX0RJUj0kKFNTTF9ESVIpL291dDMyCi0hRU5ESUYKLQotSU5DTFVERVM9LUkgLi4vLi4vSW5jbHVkZSAtSSAuLi8uLi9QQyAtSSAkKFNTTF9ESVIpL2luYzMyCi0KLVNTTF9MSUJTPWdkaTMyLmxpYiB3c29jazMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvTElCUEFUSDokKFNTTF9MSUJfRElSKSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliCi1TU0xfU09VUkNFPS4uLy4uL01vZHVsZXMvX3NzbC5jIAotCi1IQVNIX0xJQlM9Z2RpMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9saWJwYXRoOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYgotSEFTSF9TT1VSQ0U9Li4vLi4vTW9kdWxlcy9faGFzaG9wZW5zc2wuYyAKLQotYWxsOiBfc3NsJChTVUZGSVgpIF9oYXNobGliJChTVUZGSVgpCi0KLSMgU3BsaXQgY29tcGlsZS9saW5rIGludG8gdHdvIHN0ZXBzIHRvIGJldHRlciBzdXBwb3J0IFZTRXh0Q29tcAotX3NzbCQoU1VGRklYKTogJChTU0xfU09VUkNFKSAkKFNTTF9MSUJfRElSKS9saWJlYXkzMi5saWIgJChTU0xfTElCX0RJUikvc3NsZWF5MzIubGliIC4uLy4uL1BDLyouaCAuLi8uLi9JbmNsdWRlLyouaAotCUBpZiBub3QgZXhpc3QgIiQoVEVNUCkvX3NzbC8uIiBta2RpciAiJChURU1QKS9fc3NsIgotCWNsIC9ub2xvZ28gL2MgJChTU0xfU09VUkNFKSAkKENGTEFHUykgL0ZvJChURU1QKVxfc3NsXCQqLm9iaiAkKElOQ0xVREVTKQotCWxpbmsgL25vbG9nbyBAPDwKLSAgICAgICAgICAgICAvZGxsIC9vdXQ6X3NzbCQoU1VGRklYKSAkKFRFTVApXF9zc2xcJCoub2JqICQoU1NMX0xJQlMpICQoRVhUUkFfTElCUykKLTw8Ci0KLV9oYXNobGliJChTVUZGSVgpOiAkKEhBU0hfU09VUkNFKSAkKFNTTF9MSUJfRElSKS9saWJlYXkzMi5saWIgLi4vLi4vUEMvKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0gICAgQGlmIG5vdCBleGlzdCAiJChURU1QKS9faGFzaGxpYi8uIiBta2RpciAiJChURU1QKS9faGFzaGxpYiIKLSAgICBjbCAvbm9sb2dvIC9jICQoSEFTSF9TT1VSQ0UpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgL0ZvJChURU1QKVxfaGFzaGxpYlwkKi5vYmogJChJTkNMVURFUykgCi0gICAgbGluayAvbm9sb2dvIEA8PAotCS9kbGwgL291dDpfaGFzaGxpYiQoU1VGRklYKSAkKEhBU0hfTElCUykgJChFWFRSQV9MSUJTKSAkKFRFTVApXF9oYXNobGliXCQqLm9iagotPDwKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zc2wudmNwcm9qIGIvUEMvVlM3LjEvX3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZDY1ZmUuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3NzbCINCi0JUm9vdE5hbWVzcGFjZT0iX3NzbCINCi0JU2NjUHJvamVjdE5hbWU9IiINCi0JU2NjTG9jYWxQYXRoPSIiDQotCUtleXdvcmQ9Ik1ha2VGaWxlUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbF9kLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NzbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oYXNob3BlbnNzbC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvaiBiL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxOTc4NDIuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3Rlc3RjYXBpIg0KLQlTY2NQcm9qZWN0TmFtZT0iX3Rlc3RjYXBpIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGkucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGlfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGkucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qIGIvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjczNDE2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3RraW50ZXIiDQotCVNjY1Byb2plY3ROYW1lPSJfdGtpbnRlciINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlwuLlwuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlci5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlci5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXJfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXJfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlci5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlci5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90a2ludGVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9hbWQ2NF9tbDY0LmJhdCBiL1BDL1ZTNy4xL2FtZDY0X21sNjQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTlhY2YxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2FtZDY0X21sNjQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gVHJ5IHRvIGZpbmQgdGhlIEFNRDY0IGFzc2VtYmxlciBhbmQgY2FsbCBpdCB3aXRoIHRoZSBzdXBwbGllZCBhcmd1bWVudHMuCi0KLXNldCBNTEVYRT1NaWNyb3NvZnQgUGxhdGZvcm0gU0RLXEJpblxXaW42NFx4ODZcQU1ENjRcbWw2NC5FWEUKLQotcmVtIEZvciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNlZSBhbHNvCi1yZW0gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2VuLXVzL3dpbjY0L3dpbjY0L3dvdzY0X2ltcGxlbWVudGF0aW9uX2RldGFpbHMuYXNwCi0KLWlmIGV4aXN0ICIlUHJvZ3JhbUZpbGVzJVwlTUxFWEUlIiAoCi0gIHNldCBNTDY0PSIlUHJvZ3JhbUZpbGVzJVwlTUxFWEUlIgotKSBlbHNlIGlmIGV4aXN0ICIlUHJvZ3JhbVc2NDMyJVwlTUxFWEUlIiAoCi0gIHNldCBNTDY0PSIlUHJvZ3JhbVc2NDMyJVwlTUxFWEUlIgotKSBlbHNlICgKLSAgc2V0IE1MNjQ9bWw2NC5leGUKLSkKLQotJU1MNjQlICUqCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9idWlsZF9zc2wuYmF0IGIvUEMvVlM3LjEvYnVpbGRfc3NsLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiZTNjMC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9idWlsZF9zc2wuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotaWYgIiUxIiA9PSAiUmVsZWFzZUFNRDY0IiBjYWxsICIlTVNTZGslXFNldEVudiIgL1hQNjQgL1JFVEFJTAotCi1AZWNobyBvZmYKLWlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKLSAgaWYgJTEgRVFVIERlYnVnICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICkgRUxTRSAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgKQotKQotJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIKLQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYnVpbGRfc3NsLnB5IGIvUEMvVlM3LjEvYnVpbGRfc3NsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTlmNGUzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0jIFNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIF9zc2wgYW5kIF9oYXNobGliIG1vZHVsZXMgZm9yIFdpbmRvd3MuCi0jIFVzZXMgUGVybCB0byBzZXR1cCB0aGUgT3BlblNTTCBlbnZpcm9ubWVudCBjb3JyZWN0bHkKLSMgYW5kIGJ1aWxkIE9wZW5TU0wsIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBubWFrZSBzZXNzaW9uCi0jIGZvciB0aGUgYWN0dWFsIF9zc2wucHlkIGFuZCBfaGFzaGxpYi5weWQgRExMcy4KLQotIyBUSEVPUkVUSUNBTExZLCB5b3UgY2FuOgotIyAqIFVucGFjayB0aGUgbGF0ZXN0IFNTTCByZWxlYXNlIG9uZSBsZXZlbCBhYm92ZSB5b3VyIG1haW4gUHl0aG9uIHNvdXJjZQotIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKLSMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCi0jICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUENCdWlsZCBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgX3NzbCBhbmQgX2hhc2hsaWIKLSMgUHl0aG9uIGV4dGVuc2lvbnMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLWltcG9ydCBvcywgc3lzLCByZQotCi0jIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KLWRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKLSAgICBlbnRyaWVzID0gb3MuZW52aXJvblsiUEFUSCJdLnNwbGl0KG9zLnBhdGhzZXApCi0gICAgcmV0ID0gW10KLSAgICBmb3IgcCBpbiBlbnRyaWVzOgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIGlmIGV4dHJhczoKLSAgICAgICAgZm9yIHAgaW4gZXh0cmFzOgotICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIHJldHVybiByZXQKLQotIyBGaW5kIGEgc3VpdGFibGUgUGVybCBpbnN0YWxsYXRpb24gZm9yIE9wZW5TU0wuCi0jIGN5Z3dpbiBwZXJsIGRvZXMgKm5vdCogd29yay4gIEFjdGl2ZVBlcmwgZG9lcy4KLSMgQmVpbmcgYSBQZXJsIGR1bW15LCB0aGUgc2ltcGxlc3Qgd2F5IEkgY2FuIGNoZWNrIGlzIGlmIHRoZSAiV2luMzIiIHBhY2thZ2UKLSMgaXMgYXZhaWxhYmxlLgotZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKLSAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbihwZXJsICsgJyAtZSAidXNlIFdpbjMyOyInKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCAiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiCi0gICAgaWYgcGVybHM6Ci0gICAgICAgIHByaW50ICIgdGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIKLSAgICAgICAgZm9yIHAgaW4gcGVybHM6Ci0gICAgICAgICAgICBwcmludCAiICIsIHAKLSAgICAgICAgcHJpbnQgIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIKLSAgICBlbHNlOgotICAgICAgICBwcmludCAiIE5PIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQgb24gdGhpcyBtYWNoaW5lIGF0IGFsbCEiCi0gICAgcHJpbnQgIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiCi0gICAgcHJpbnQgIlRoZSBQeXRob24gU1NMIG1vZHVsZSB3YXMgbm90IGJ1aWx0IgotICAgIHJldHVybiBOb25lCi0KLSMgTG9jYXRlIHRoZSBiZXN0IFNTTCBkaXJlY3RvcnkgZ2l2ZW4gYSBmZXcgcm9vdHMgdG8gbG9vayBpbnRvLgotZGVmIGZpbmRfYmVzdF9zc2xfZGlyKHNvdXJjZXMpOgotICAgIGNhbmRpZGF0ZXMgPSBbXQotICAgIGZvciBzIGluIHNvdXJjZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogZG8gbm90IGFic3BhdGggczsgdGhlIGJ1aWxkIHdpbGwgZmFpbCBpZiBhbnkKLSAgICAgICAgICAgICMgaGlnaGVyIHVwIGRpcmVjdG9yeSBuYW1lIGhhcyBzcGFjZXMgaW4gaXQuCi0gICAgICAgICAgICBmbmFtZXMgPSBvcy5saXN0ZGlyKHMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGZuYW1lcyA9IFtdCi0gICAgICAgIGZvciBmbmFtZSBpbiBmbmFtZXM6Ci0gICAgICAgICAgICBmcW4gPSBvcy5wYXRoLmpvaW4ocywgZm5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZxbikgYW5kIGZuYW1lLnN0YXJ0c3dpdGgoIm9wZW5zc2wtIik6Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoZnFuKQotICAgICMgTm93IHdlIGhhdmUgYWxsIHRoZSBjYW5kaWRhdGVzLCBsb2NhdGUgdGhlIGJlc3QuCi0gICAgYmVzdF9wYXJ0cyA9IFtdCi0gICAgYmVzdF9uYW1lID0gTm9uZQotICAgIGZvciBjIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIHBhcnRzID0gcmUuc3BsaXQoIlsuLV0iLCBvcy5wYXRoLmJhc2VuYW1lKGMpKVsxOl0KLSAgICAgICAgIyBlZyAtIG9wZW5zc2wtMC45LjctYmV0YTEgLSBpZ25vcmUgYWxsICJiZXRhIiBvciBhbnkgb3RoZXIgcXVhbGlmaWVycwotICAgICAgICBpZiBsZW4ocGFydHMpID49IDQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBwYXJ0cyA+IGJlc3RfcGFydHM6Ci0gICAgICAgICAgICBiZXN0X3BhcnRzID0gcGFydHMKLSAgICAgICAgICAgIGJlc3RfbmFtZSA9IGMKLSAgICBpZiBiZXN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50ICJGb3VuZCBhbiBTU0wgZGlyZWN0b3J5IGF0ICclcyciICUgKGJlc3RfbmFtZSwpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIGJlc3RfbmFtZQotCi1kZWYgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCk6Ci0gICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgbWFpbigpOgotICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKLSAgICBpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZSI6Ci0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19tYXNtIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQubWFrIgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIkRlYnVnIjoKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGRlYnVnID0gVHJ1ZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbWFzbSIKLSAgICAgICAgbWFrZWZpbGU9Im1zXFxkMzIubWFrIgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2VJdGFuaXVtIjoKLSAgICAgICAgYXJjaCA9ICJpYTY0IgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEkiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRpIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQubWFrIgotICAgICAgICBvcy5lbnZpcm9uWyJWU0VYVENPTVBfVVNFQ0wiXSA9ICJNU19JVEFOSVVNIgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2VBTUQ2NCI6Ci0gICAgICAgIGFyY2g9ImFtZDY0IgotICAgICAgICBkZWJ1Zz1GYWxzZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lONjRBIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX3dpbjY0YSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50Lm1hayIKLSAgICAgICAgb3MuZW52aXJvblsiVlNFWFRDT01QX1VTRUNMIl0gPSAiTVNfT1BURVJPTiIKLSAgICBtYWtlX2ZsYWdzID0gIiIKLSAgICBpZiBidWlsZF9hbGw6Ci0gICAgICAgIG1ha2VfZmxhZ3MgPSAiLWEiCi0gICAgIyBwZXJsIHNob3VsZCBiZSBvbiB0aGUgcGF0aCwgYnV0IHdlIGFsc28gbG9vayBpbiAiXHBlcmwiIGFuZCAiYzpcXHBlcmwiCi0gICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCi0gICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFsiXFxwZXJsXFxiaW4iLCAiQzpcXHBlcmxcXGJpbiJdKQotICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKLSAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBwcmludCAiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMiBsZXZlbHMgdXAgZnJvbSBwY2J1aWxkIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIHByaW50ICJDcmVhdGluZyB0aGUgbWFrZWZpbGVzLi4uIgotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGFyY2g9PSJ4ODYiIGFuZCBkZWJ1ZzoKLSAgICAgICAgICAgICAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgICAgICMgYnVpbGQgbWFrZWZpbGUgc28gd2UgZ2VuZXJhdGUgaXQgaGVyZToKLSAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oInBlcmwgdXRpbFxtazFtZi5wbCBkZWJ1ZyAiK2NvbmZpZ3VyZSsiID4iK21ha2VmaWxlKQotCi0gICAgICAgICMgTm93IHJ1biBtYWtlLgotICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgcHJpbnQgIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByYyA9IG9zLnN5c3RlbShtYWtlQ29tbWFuZCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBwcmludCAiRXhlY3V0aW5nICIrbWFrZWZpbGUrIiBmYWlsZWQiCi0gICAgICAgICAgICBwcmludCByYwotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgICMgQW5kIGZpbmFsbHksIHdlIGNhbiBidWlsZCB0aGUgX3NzbCBtb2R1bGUgaXRzZWxmIGZvciBQeXRob24uCi0gICAgZGVmcyA9ICJTU0xfRElSPVwiJXNcIiIgJSAoc3NsX2RpciwpCi0gICAgaWYgZGVidWc6Ci0gICAgICAgIGRlZnMgPSBkZWZzICsgIiAiICsgIkRFQlVHPTEiCi0gICAgaWYgYXJjaCBpbiAoJ2FtZDY0JywgJ2lhNjQnKToKLSAgICAgICAgZGVmcyA9IGRlZnMgKyAiIEVYVFJBX0NGTEFHUz0vR1MtIEVYVFJBX0xJQlM9YnVmZmVyb3ZlcmZsb3dVLmxpYiIKLSAgICBtYWtlQ29tbWFuZCA9ICdubWFrZSAvbm9sb2dvIC1mIF9zc2wubWFrICcgKyBkZWZzICsgIiAiICsgbWFrZV9mbGFncwotICAgIHByaW50ICJFeGVjdXRpbmc6IiwgbWFrZUNvbW1hbmQKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByYyA9IG9zLnN5c3RlbShtYWtlQ29tbWFuZCkKLSAgICBzeXMuZXhpdChyYykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9iejIudmNwcm9qIGIvUEMvVlM3LjEvYnoyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwMDVhMS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9iejIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJiejIiDQotCVJvb3ROYW1lc3BhY2U9ImJ6MiINCi0JU2NjUHJvamVjdE5hbWU9ImJ6MiINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejJfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJtc3ZjcnQsbGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MNCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Mi5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYg0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Mi5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYg0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYnoybW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9kYi5idWlsZCBiL1BDL1ZTNy4xL2RiLmJ1aWxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTg3Zjc0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2RiLmJ1aWxkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdD4KLSA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVzY3JpcHRpb249IkJ1aWxkIGFsbCB0YXJnZXRzLiI+Ci0gICA8c29sdXRpb24gY29uZmlndXJhdGlvbj0icmVsZWFzZSI+Ci0gICAgIDxwcm9qZWN0cz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJkYl9zdGF0aWMudmNwcm9qIiAvPgotICAgICA8L3Byb2plY3RzPgotICAgPC9zb2x1dGlvbj4KLSA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2ZpZWxkMy5weSBiL1BDL1ZTNy4xL2ZpZWxkMy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdmMjRjYS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9maWVsZDMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIEFuIGFic3VyZCB3b3JrYXJvdW5kIGZvciB0aGUgbGFjayBvZiBhcml0aG1ldGljIGluIE1TJ3MgcmVzb3VyY2UgY29tcGlsZXIuCi0jIEFmdGVyIGJ1aWxkaW5nIFB5dGhvbiwgcnVuIHRoaXMsIHRoZW4gcGFzdGUgdGhlIG91dHB1dCBpbnRvIHRoZSBhcHByb3ByaWF0ZQotIyBwYXJ0IG9mIFBDXHB5dGhvbl9udC5yYy4KLSMgRXhhbXBsZSBvdXRwdXQ6Ci0jCi0jICogRm9yIDIuM2EwLAotIyAqIFBZX01JQ1JPX1ZFUlNJT04gPSAwCi0jICogUFlfUkVMRUFTRV9MRVZFTCA9ICdhbHBoYScgPSAweEEKLSMgKiBQWV9SRUxFQVNFX1NFUklBTCA9IDEKLSMgKgotIyAqIGFuZCAwKjEwMDAgKyAxMCoxMCArIDEgPSAxMDEuCi0jICovCi0jICNkZWZpbmUgRklFTEQzIDEwMQotCi1pbXBvcnQgc3lzCi0KLW1ham9yLCBtaW5vciwgbWljcm8sIGxldmVsLCBzZXJpYWwgPSBzeXMudmVyc2lvbl9pbmZvCi1sZXZlbG51bSA9IHsnYWxwaGEnOiAweEEsCi0gICAgICAgICAgICAnYmV0YSc6IDB4QiwKLSAgICAgICAgICAgICdjYW5kaWRhdGUnOiAweEMsCi0gICAgICAgICAgICAnZmluYWwnOiAweEYsCi0gICAgICAgICAgIH1bbGV2ZWxdCi1zdHJpbmcgPSBzeXMudmVyc2lvbi5zcGxpdCgpWzBdICMgbGlrZSAnMi4zYTAnCi0KLXByaW50ICIgKiBGb3IgJXMsIiAlIHN0cmluZwotcHJpbnQgIiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAlZCIgJSBtaWNybwotcHJpbnQgIiAqIFBZX1JFTEVBU0VfTEVWRUwgPSAlciA9ICVzIiAlIChsZXZlbCwgaGV4KGxldmVsbnVtKSkKLXByaW50ICIgKiBQWV9SRUxFQVNFX1NFUklBTCA9ICVkIiAlIHNlcmlhbAotcHJpbnQgIiAqIgotCi1maWVsZDMgPSBtaWNybyAqIDEwMDAgKyBsZXZlbG51bSAqIDEwICsgc2VyaWFsCi0KLXByaW50ICIgKiBhbmQgJWQqMTAwMCArICVkKjEwICsgJWQgPSAlZCIgJSAobWljcm8sIGxldmVsbnVtLCBzZXJpYWwsIGZpZWxkMykKLXByaW50ICIgKi8iCi1wcmludCAiI2RlZmluZSBGSUVMRDMiLCBmaWVsZDMKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2luc3RhbGxlci5ibXAgYi9QQy9WUzcuMS9pbnN0YWxsZXIuYm1wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODc1ZTE5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2luc3RhbGxlci5ibXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby5jIGIvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFhMmI2Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENcVlM3LjFcZ2V0YnVpbGRpbmZvMi5jCi0gICBhbHNvLiBJZiB0aGlzIGlzbid0IGEgc3VidmVyc2lvbiBjaGVja291dCwgb3Igc3Vid2NyZXYgaXNuJ3QKLSAgIGZvdW5kLCBpdCBjb21waWxlcyAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGluc3RlYWQuCi0KLSAgIEN1cnJlbnRseSwgc3Vid2NyZXYuZXhlIGlzIGZvdW5kIGZyb20gdGhlIHJlZ2lzdHJ5IGVudHJpZXMKLSAgIG9mIFRvcnRvaXNlU1ZOLgotCi0gICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gcGxhY2UgZ2V0YnVpbGRpbmZvLm8gaW50byB0aGUgcHJvcGVyCi0gICBiaW5hcnkgZGlyZWN0b3J5LiBUaGlzIGlzbid0IG5lY2Vzc2FyeSwgYXMgdGhpcyB0b29sIGlzCi0gICBpbnZva2VkIGFzIGEgcHJlLWxpbmsgc3RlcCBmb3IgcHl0aG9uY29yZSwgc28gdGhhdCBvdmVyd3JpdGVzCi0gICBhbnkgcHJldmlvdXMgZ2V0YnVpbGRpbmZvLm8uCi0KLSovCi0KLWludCBtYWtlX2J1aWxkaW5mbzIoKQotewotICAgIHN0cnVjdCBfc3RhdCBzdDsKLSAgICBIS0VZIGhUb3J0b2lzZTsKLSAgICBjaGFyIGNvbW1hbmRbNTAwXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXQoY29tbWFuZCwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXQoY29tbWFuZCwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGdldGJ1aWxkaW5mbzIuYyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQotewotICAgIGNoYXIgY29tbWFuZFs1MDBdID0gImNsLmV4ZSAtYyAtRF9XSU4zMiAtRFVTRV9ETF9FWFBPUlQgLURfV0lORE9XUyAtRFdJTjMyIC1EX1dJTkRMTCAiOwotICAgIGludCBkb191bmxpbmssIHJlc3VsdDsKLSAgICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFrZV9idWlsZGluZm8gJChDb25maWd1cmF0aW9uTmFtZSlcbiIpOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLSAgICBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlIikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJEZWJ1ZyIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItRF9ERUJVRyAtTURkICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VJdGFuaXVtIikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAvVVNFQ0w6TVNfSVRBTklVTSAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlQU1ENjQiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EICIpOwotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAvVVNFQ0w6TVNfT1BURVJPTiAiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbiAlc1xuIiwgYXJndlsxXSk7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIoKSkpCi0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiZ2V0YnVpbGRpbmZvMi5jIC1EU1VCV0NSRVYgIik7Ci0gICAgZWxzZQotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMiKTsKLSAgICBzdHJjYXQoY29tbWFuZCwgIiAtRm9nZXRidWlsZGluZm8ubyAtSS4uXFwuLlxcSW5jbHVkZSAtSS4uXFwuLlxcUEMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICByZXN1bHQgPSBzeXN0ZW0oY29tbWFuZCk7Ci0gICAgaWYgKGRvX3VubGluaykKLSAgICAgICAgdW5saW5rKCJnZXRidWlsZGluZm8yLmMiKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLnZjcHJvaiBiL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBjOGE1ZC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Im1ha2VfYnVpbGRpbmZvIg0KLQlQcm9qZWN0R1VJRD0ie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotCUtleXdvcmQ9IldpbjMyUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcbWFrZV9idWlsZGluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSI1Ig0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfYnVpbGRpbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjQiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWtlX2J1aWxkaW5mby5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2ogYi9QQy9WUzcuMS9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZmYTRlYi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JUm9vdE5hbWVzcGFjZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JU2NjUHJvamVjdE5hbWU9Im1ha2VfdmVyc2lvbmluZm8iDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxtYWtlX3ZlcnNpb25pbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Ii5cbWFrZV92ZXJzaW9uaW5mby5leGUgJmd0Oy4uXC4uXFBDXHB5dGhvbm50X3JjLmgNCi0iDQotCQkJCU91dHB1dHM9Ii4uXC4uXFBDXHB5dGhvbm50X3JjLmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL21ha2VfdmVyc2lvbmluZm8uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mby5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIkKFRhcmdldEZpbGVOYW1lKSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udC5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXG1ha2VfdmVyc2lvbmluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIuXG1ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0Oy4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaA0KLSINCi0JCQkJT3V0cHV0cz0iLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL21ha2VfdmVyc2lvbmluZm9fZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIkKFRhcmdldEZpbGVOYW1lKSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udF9kLmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcbWFrZV92ZXJzaW9uaW5mby5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcGNidWlsZC5zbG4gYi9QQy9WUzcuMS9wY2J1aWxkLnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwZjE5Yy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9wY2J1aWxkLnNsbgorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA4LjAwDQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc29ja2V0IiwgIl9zb2NrZXQudmNwcm9qIiwgInszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NzbCIsICJfc3NsLnZjcHJvaiIsICJ7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0gPSB7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0Y2FwaSIsICJfdGVzdGNhcGkudmNwcm9qIiwgIns1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmNwcm9qIiwgIns1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYnoyIiwgImJ6Mi52Y3Byb2oiLCAie0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX3ZlcnNpb25pbmZvIiwgIm1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiwgIntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHlleHBhdCIsICJweWV4cGF0LnZjcHJvaiIsICJ7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbiIsICJweXRob24udmNwcm9qIiwgIntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uY29yZSIsICJweXRob25jb3JlLnZjcHJvaiIsICJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0gPSB7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfQ0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0gPSB7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbnciLCAicHl0aG9udy52Y3Byb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzZWxlY3QiLCAic2VsZWN0LnZjcHJvaiIsICJ7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInVuaWNvZGVkYXRhIiwgInVuaWNvZGVkYXRhLnZjcHJvaiIsICJ7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjcHJvaiIsICJ7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9lbGVtZW50dHJlZSIsICJfZWxlbWVudHRyZWUudmNwcm9qIiwgInsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX21zaSIsICJfbXNpLnZjcHJvaiIsICJ7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXMiLCAiX2N0eXBlcy52Y3Byb2oiLCAie0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzX3Rlc3QiLCAiX2N0eXBlc190ZXN0LnZjcHJvaiIsICJ7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0gPSB7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zcWxpdGUzIiwgIl9zcWxpdGUzLnZjcHJvaiIsICJ7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1HbG9iYWwNCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb24pID0gcHJlU29sdXRpb24NCi0JCURlYnVnID0gRGVidWcNCi0JCVJlbGVhc2UgPSBSZWxlYXNlDQotCQlSZWxlYXNlQU1ENjQgPSBSZWxlYXNlQU1ENjQNCi0JCVJlbGVhc2VJdGFuaXVtID0gUmVsZWFzZUl0YW5pdW0NCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uKSA9IHBvc3RTb2x1dGlvbg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHBvc3RTb2x1dGlvbg0KLQkJLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYyA9IC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0JCXJlYWRtZS50eHQgPSByZWFkbWUudHh0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5R2xvYmFscykgPSBwb3N0U29sdXRpb24NCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKEV4dGVuc2liaWxpdHlBZGRJbnMpID0gcG9zdFNvbHV0aW9uDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weWV4cGF0LnZjcHJvaiBiL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDczOWZhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweWV4cGF0Ig0KLQlTY2NQcm9qZWN0TmFtZT0icHlleHBhdCINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO0hBVkVfRVhQQVRfSDtXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXRfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAgL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbi5idWlsZCBiL1BDL1ZTNy4xL3B5dGhvbi5idWlsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcxMTAxZC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24uYnVpbGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0PgotIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXNjcmlwdGlvbj0iQnVpbGQgYWxsIHRhcmdldHMuIj4KLSAgIDxzb2x1dGlvbiBjb25maWd1cmF0aW9uPSJyZWxlYXNlIj4KLSAgICAgPHByb2plY3RzPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Im1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiAvPgotICAgICA8L3Byb2plY3RzPgotICAgPC9zb2x1dGlvbj4KLSAgIDxleGVjIHByb2dyYW09Im1ha2VfdmVyc2lvbmluZm8iIG91dHB1dD0icHl0aG9ubnRfcmMuaCIgLz4KLQotICAgPHNvbHV0aW9uIGNvbmZpZ3VyYXRpb249InJlbGVhc2UiIHNvbHV0aW9uZmlsZT0icGNidWlsZC5zbG4iPgotICAgICA8ZXhjbHVkZXByb2plY3RzPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Il90a2ludGVyLnZjcHJvaiIgLz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJiejIudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Il9zcWxpdGUzLnZjcHJvaiIgLz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJfc3NsLnZjcHJvaiIgLz4KLSAgICAgPC9leGNsdWRlcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLmlzcyBiL1BDL1ZTNy4xL3B5dGhvbi5pc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNmEzYzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uLmlzcworKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi07IFNjcmlwdCBnZW5lcmF0ZWQgYnkgdGhlIElubm8gU2V0dXAgU2NyaXB0IFdpemFyZC4KLTsgU0VFIFRIRSBET0NVTUVOVEFUSU9OIEZPUiBERVRBSUxTIE9OIENSRUFUSU5HIElOTk8gU0VUVVAgU0NSSVBUIEZJTEVTIQotCi07IFRoaXMgaXMgdGhlIHdob2xlIGJhbGwgb2Ygd2F4IGZvciBhbiBJbm5vIGluc3RhbGxlciBmb3IgUHl0aG9uLgotOyBUbyB1c2UsIGRvd25sb2FkIElubm8gU2V0dXAgZnJvbSBodHRwOi8vd3d3Lmpyc29mdHdhcmUub3JnL2lzZGwuaHRtLywKLTsgaW5zdGFsbCBpdCwgYW5kIGRvdWJsZS1jbGljayBvbiB0aGlzIGZpbGUuICBUaGF0IGxhdW5jaGVzIHRoZSBJbm5vCi07IHNjcmlwdCBjb21waWxlci4gIFRoZSBHVUkgaXMgZXh0ZW1lbHkgc2ltcGxlLCBhbmQgaGFzIG9ubHkgb25lIGJ1dHRvbgotOyB5b3UgbWF5IG5vdCByZWNvZ25pemUgaW5zdGFudGx5OiAgY2xpY2sgaXQuICBZb3UncmUgZG9uZS4gIEl0IGJ1aWxkcwotOyB0aGUgaW5zdGFsbGVyIGludG8gUENCdWlsZC9QeXRob24tMi4yYTEuZXhlLiAgU2l6ZSBhbmQgc3BlZWQgb2YgdGhlCi07IGluc3RhbGxlciBhcmUgY29tcGV0aXRpdmUgd2l0aCB0aGUgV2lzZSBpbnN0YWxsZXI7IElubm8gdW5pbnN0YWxsCi07IHNlZW1zIG11Y2ggcXVpY2tlciB0aGFuIFdpc2UgKGJ1dCBhbHNvIGZlZWJsZXIsIGFuZCB0aGUgdW5pbnN0YWxsCi07IGxvZyBpcyBpbiBzb21lIHVuKGh1bWFuKXJlYWRhYmxlIGJpbmFyeSBmb3JtYXQpLgotOwotOyBXaGF0J3MgRG9uZQotOyAtLS0tLS0tLS0tLQotOyBBbGwgdGhlIHVzdWFsIFdpbmRvd3MgUHl0aG9uIGZpbGVzIGFyZSBpbnN0YWxsZWQgYnkgdGhpcyBub3cuCi07IEFsbCB0aGUgdXN1YWwgV2luZG93cyBQeXRob24gU3RhcnQgbWVudSBlbnRyaWVzIGFyZSBjcmVhdGVkIGFuZAotOyB3b3JrIGZpbmUuCi07IC5weSwgLnB5dywgLnB5YyBhbmQgLnB5byBleHRlbnNpb25zIGFyZSByZWdpc3RlcmVkLgotOyAgICAgUFJPQkxFTTogIElubm8gdW5pbnN0YWxsIGRvZXMgbm90IHJlc3RvcmUgdGhlaXIgcHJldmlvdXMgcmVnaXN0cnkKLTsgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMgKGlmIGFueSkuICBXaXNlIGRpZC4gIFRoaXMgd2lsbCBtYWtlIGxpZmUKLTsgICAgICAgICAgICAgICBkaWZmaWN1bHQgZm9yIGFscGhhIChldGMpIHRlc3RlcnMuCi07IFRoZSBQeXRob24gaW5zdGFsbCBpcyBmdWxseSBmdW5jdGlvbmFsIGZvciAidHlwaWNhbCIgdXNlcy4KLTsKLTsgV2hhdCdzIE5vdCBEb25lCi07IC0tLS0tLS0tLS0tLS0tLQotOyBOb25lIG9mICJNYXJrIEhhbW1vbmQncyIgcmVnaXN0cnkgZW50cmllcyBhcmUgd3JpdHRlbi4KLTsgTm8gaW5zdGFsbGF0aW9uIG9mIGZpbGVzIGlzIGRvbmUgaW50byB0aGUgc3lzdGVtIGRpcjoKLTsgICAgIFRoZSBNUyBETExzIGFyZW4ndCBoYW5kbGVkIGF0IGFsbCBieSB0aGlzIHlldC4KLTsgICAgIFB5dGhvbjIyLmRsbCBpcyB1bnBhY2tlZCBpbnRvIHRoZSBtYWluIFB5dGhvbiBkaXIuCi07Ci07IElubm8gY2FuJ3QgZG8gZGlmZmVyZW50IHRoaW5ncyBvbiBOVC8yMDAwIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB1c2VyCi07IGhhcyBBZG1pbiBwcml2aWxlZ2VzLCBzbyBJIGRvbid0IGtub3cgaG93IHRvICJzb2x2ZSIgZWl0aGVyIG9mIHRob3NlLAotOyBzaG9ydCBvZiBidWlsZGluZyB0d28gaW5zdGFsbGVycyAob25lICpyZXF1aXJpbmcqIEFkbWluIHByaXZzLCB0aGUKLTsgb3RoZXIgbm90IGRvaW5nIGFueXRoaW5nIHRoYXQgbmVlZHMgQWRtaW4gcHJpdnMpLgotOwotOyBJbm5vIGhhcyBubyBjb25jZXB0IG9mIHZhcmlhYmxlcywgc28gbG90cyBvZiBsaW5lcyBpbiB0aGlzIGZpbGUgbmVlZAotOyB0byBiZSBmaWRkbGVkIGJ5IGhhbmQgYWNyb3NzIHJlbGVhc2VzLiAgU2ltcGxlc3Qgd2F5IG91dDogIHN0aWNrIHRoaXMKLTsgZmlsZSBpbiBhIGdpYW50IHRyaXBsZS1xdW90ZWQgci1zdHJpbmcgKG5vdGUgdGhhdCBiYWNrc2xhc2hlcyBhcmUKLTsgcmVxdWlyZWQgYWxsIG92ZXIgdGhlIHBsYWNlIGhlcmUgLS0gZm9yd2FyZCBzbGFzaGVzIERPTidUIFdPUksgaW4KLTsgSW5ubyksIGFuZCB1c2UgJSh5YWRkYSlzIHN0cmluZyBpbnRlcnBvbGF0aW9uIHRvIGRvIHN1YnN0aXR1dGlvbnM7IGkuZS4sCi07IHdyaXRlIGEgdmVyeSBzaW1wbGUgUHl0aG9uIHByb2dyYW0gdG8gKnByb2R1Y2UqIHRoaXMgc2NyaXB0LgotCi1bU2V0dXBdCi1BcHBOYW1lPVB5dGhvbiBhbmQgY29tYmluZWQgV2luMzIgRXh0ZW5zaW9ucwotQXBwVmVyTmFtZT1QeXRob24gMi4yLjIgYW5kIGNvbWJpbmVkIFdpbjMyIEV4dGVuc2lvbnMgMTUwCi1BcHBJZD1QeXRob24gMi4yLjIuMTUwCi1BcHBWZXJzaW9uPTIuMi4yLjE1MAotQXBwQ29weXJpZ2h0PVB5dGhvbiBpcyBDb3B5cmlnaHQgqSAyMDAxIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBXaW4zMiBFeHRlbnNpb25zIGFyZSBDb3B5cmlnaHQgqSAxOTk2LTIwMDEgR3JlZyBTdGVpbiBhbmQgTWFyayBIYW1tb25kLgotCi07IERlZmF1bHQgaW5zdGFsbCBkaXI7IHZhbHVlIG9mIHthcHB9IGxhdGVyICh1bmxlc3MgdXNlciBvdmVycmlkZXMpLgotOyB7c2R9ID0gc3lzdGVtIHJvb3QgZHJpdmUsIHByb2JhYmx5ICJDOiIuCi1EZWZhdWx0RGlyTmFtZT17c2R9XFB5dGhvbjIyCi07RGVmYXVsdERpck5hbWU9e3BmfVxQeXRob24KLQotOyBTdGFydCBtZW51IGZvbGRlciBuYW1lOyB2YWx1ZSBvZiB7Z3JvdXB9IGxhdGVyICh1bmxlc3MgdXNlciBvdmVycmlkZXMpLgotRGVmYXVsdEdyb3VwTmFtZT1QeXRob24gMi4yCi0KLTsgUG9pbnQgU291cmNlRGlyIHRvIG9uZSBhYm92ZSBQQ0J1aWxkID0gc3JjLgotOyBtZWFucyB0aGlzIHNjcmlwdCBjYW4gcnVuIHVuY2hhbmdlZCBmcm9tIGFueW9uZSdzIENWUyB0cmVlLCBubyBtYXR0ZXIKLTsgd2hhdCB0aGV5IGNhbGxlZCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yaWVzLgotU291cmNlRGlyPS4KLU91dHB1dERpcj0uLgotT3V0cHV0QmFzZUZpbGVuYW1lPVB5dGhvbi0yLjIuMi1XaW4zMi0xNTAtU2V0dXAKLQotQXBwUHVibGlzaGVyPVB5dGhvbkxhYnMgYXQgRGlnaXRhbCBDcmVhdGlvbnMKLUFwcFB1Ymxpc2hlclVSTD1odHRwOi8vd3d3LnB5dGhvbi5vcmcKLUFwcFN1cHBvcnRVUkw9aHR0cDovL3d3dy5weXRob24ub3JnCi1BcHBVcGRhdGVzVVJMPWh0dHA6Ly93d3cucHl0aG9uLm9yZwotCi1BbHdheXNDcmVhdGVVbmluc3RhbGxJY29uPXRydWUKLUNoYW5nZXNBc3NvY2lhdGlvbnM9dHJ1ZQotVW5pbnN0YWxsTG9nTW9kZT1uZXcKLUFsbG93Tm9JY29ucz10cnVlCi1BZG1pblByaXZpbGVnZXNSZXF1aXJlZD10cnVlCi1Vbmluc3RhbGxEaXNwbGF5SWNvbj17YXBwfVxweWMuaWNvCi1XaXphcmREZWJ1Zz1mYWxzZQotCi07IFRoZSBmZXdlciBzY3JlZW5zIHRoZSBiZXR0ZXI7IGxlYXZlIHRoZXNlIGNvbW1lbnRlZC4KLQotQ29tcHJlc3Npb249YnppcAotSW5mb0JlZm9yZUZpbGU9TElDRU5TRS50eHQKLTtJbmZvQmVmb3JlRmlsZT1NaXNjXE5FV1MKLQotOyB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSB3YW50IHlvdXIgaW5zdGFsbGF0aW9uIHRvIHJ1biBvbiBOVCAzLjUxIHRvby4KLTsgTWluVmVyc2lvbj00LDMuNTEKLQotW1R5cGVzXQotTmFtZTogbm9ybWFsOyBEZXNjcmlwdGlvbjogU2VsZWN0IGRlc2lyZWQgY29tcG9uZW50czsgRmxhZ3M6IGlzY3VzdG9tCi0KLVtDb21wb25lbnRzXQotTmFtZTogbWFpbjsgRGVzY3JpcHRpb246IFB5dGhvbiBhbmQgV2luMzIgRXh0ZW5zaW9uczsgVHlwZXM6IG5vcm1hbAotTmFtZTogZG9jczsgRGVzY3JpcHRpb246IFB5dGhvbiBkb2N1bWVudGF0aW9uIChIVE1MKTsgVHlwZXM6IG5vcm1hbAotTmFtZTogdGs7IERlc2NyaXB0aW9uOiBUQ0wvVEssIHRraW50ZXIsIGFuZCBJZGxlOyBUeXBlczogbm9ybWFsCi1OYW1lOiB0b29sczsgRGVzY3JpcHRpb246IFB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzXCk7IFR5cGVzOiBub3JtYWwKLU5hbWU6IHRlc3Q7IERlc2NyaXB0aW9uOiBQeXRob24gdGVzdCBzdWl0ZSAoTGliXHRlc3RcKTsgVHlwZXM6IG5vcm1hbAotCi1bVGFza3NdCi1OYW1lOiBleHRlbnNpb25zOyBEZXNjcmlwdGlvbjogUmVnaXN0ZXIgZmlsZSBhc3NvY2lhdGlvbnMgKC5weSwgLnB5dywgLnB5YywgLnB5byk7IENvbXBvbmVudHM6IG1haW47IENoZWNrOiBJc0FkbWluTG9nZ2VkT24KLQotW0ZpbGVzXQotOyBDYXV0aW9uOiAgVXNpbmcgZm9yd2FyZCBzbGFzaGVzIGluc3RlYWQgc2NyZXdzIHVwIGluIGFtYXppbmcgd2F5cy4KLTsgVW5rbm93bjogIEJ5IHRoZSB0aW1lIENvbXBvbmVudHMgKGFuZCBvdGhlciBhdHRycykgYXJlIGFkZGVkIHRvIHRoZXNlIGxpbmVzLCB0aGV5J3JlCi07IGdvaW5nIHRvIGdldCBhd2Z1bGx5IGxvbmcuICBCdXQgZG9uJ3Qgc2VlIGEgd2F5IHRvIGNvbnRpbnVlIGxvZ2ljYWwgbGluZXMgYWNyb3NzCi07IHBoeXNpY2FsIGxpbmVzLgotCi1Tb3VyY2U6IExJQ0VOU0UudHh0OyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZQotU291cmNlOiBSRUFETUUudHh0OyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZQotU291cmNlOiBOZXdzLnR4dDsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGUKLVNvdXJjZTogKi5pY287IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogcHl0aG9uLmV4ZTsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogcHl0aG9udy5leGU7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IHc5eHBvcGVuLmV4ZTsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotCi1Tb3VyY2U6IERMTHNcdGNsODMuZGxsOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotU291cmNlOiBETExzXHRrODMuZGxsOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotU291cmNlOiB0Y2xcKi4qOyBEZXN0RGlyOiB7YXBwfVx0Y2w7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBzeXNkaXJccHl0aG9uMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogc2hhcmVkZmlsZSByZXN0YXJ0cmVwbGFjZQotU291cmNlOiBzeXNkaXJcUHlXaW5UeXBlczIyLmRsbDsgRGVzdERpcjoge3N5c307IENvcHlNb2RlOiBhbHdheXNza2lwaWZzYW1lb3JvbGRlcjsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlc3RhcnRyZXBsYWNlIHNoYXJlZGZpbGUKLVNvdXJjZTogc3lzZGlyXHB5dGhvbmNvbTIyLmRsbDsgRGVzdERpcjoge3N5c307IENvcHlNb2RlOiBhbHdheXNza2lwaWZzYW1lb3JvbGRlcjsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlc3RhcnRyZXBsYWNlIHNoYXJlZGZpbGUKLQotU291cmNlOiBETExzXF9zb2NrZXQucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3NvY2tldC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF9zcmUucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3NyZS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF9zeW10YWJsZS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc3ltdGFibGUubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfdGVzdGNhcGkucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3Rlc3RjYXBpLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3RraW50ZXIucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotU291cmNlOiBsaWJzXF90a2ludGVyLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLQotU291cmNlOiBETExzXG1tYXAucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcbW1hcC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHBhcnNlci5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xwYXJzZXIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xweWV4cGF0LnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHB5ZXhwYXQubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xzZWxlY3QucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcc2VsZWN0LmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcdW5pY29kZWRhdGEucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcdW5pY29kZWRhdGEubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x3aW5yZWcucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcd2lucmVnLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcd2luc291bmQucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcd2luc291bmQubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x6bGliLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHpsaWIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogbGlic1xweXRob24yMi5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXGV4cGF0LmRsbDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi0KLQotU291cmNlOiBMaWJcKi5weTsgRGVzdERpcjoge2FwcH1cTGliOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IExpYlxjb21waWxlclwqLio7IERlc3REaXI6IHthcHB9XExpYlxjb21waWxlcjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxkaXN0dXRpbHNcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcZGlzdHV0aWxzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGVtYWlsXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGVtYWlsOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGVuY29kaW5nc1wqLio7IERlc3REaXI6IHthcHB9XExpYlxlbmNvZGluZ3M7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcaG90c2hvdFwqLio7IERlc3REaXI6IHthcHB9XExpYlxob3RzaG90OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGxpYi1vbGRcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcbGliLW9sZDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlx4bWxcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJceG1sOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGhvdHNob3RcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcaG90c2hvdDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlx0ZXN0XCouKjsgRGVzdERpcjoge2FwcH1cTGliXHRlc3Q7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRlc3Q7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcdGtpbnRlclwqLnB5OyBEZXN0RGlyOiB7YXBwfVxMaWJcdGtpbnRlcjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGs7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXFJFQURNRS50eHQ7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcUHlXaW4zMi5jaG07IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBkb2NzCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyXCouKjsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbVwqLio7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21leHRcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbWV4dDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogaW5jbHVkZVwqLmg7IERlc3REaXI6IHthcHB9XGluY2x1ZGU7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBUb29sc1xpZGxlXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcaWRsZTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGs7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IFRvb2xzXHB5bmNoZVwqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXHB5bmNoZTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBUb29sc1xzY3JpcHRzXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcU2NyaXB0czsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBUb29sc1x3ZWJjaGVja2VyXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcd2ViY2hlY2tlcjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBUb29sc1x2ZXJzaW9uY2hlY2tcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2s7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBEb2NcKi4qOyBEZXN0RGlyOiB7YXBwfVxEb2M7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IEZsYWdzOiByZWN1cnNlc3ViZGlyczsgQ29tcG9uZW50czogZG9jcwotCi0KLVtJY29uc10KLU5hbWU6IHtncm91cH1cUHl0aG9uIChjb21tYW5kIGxpbmUpOyBGaWxlbmFtZToge2FwcH1ccHl0aG9uLmV4ZTsgV29ya2luZ0Rpcjoge2FwcH07IENvbXBvbmVudHM6IG1haW4KLU5hbWU6IHtncm91cH1cUHl0aG9uIE1hbnVhbHM7IEZpbGVuYW1lOiB7YXBwfVxEb2NcaW5kZXguaHRtbDsgV29ya2luZ0Rpcjoge2FwcH07IENvbXBvbmVudHM6IGRvY3MKLU5hbWU6IHtncm91cH1cV2luMzIgRXh0ZW5zaW9ucyBIZWxwOyBGaWxlbmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcUHlXaW4zMi5jaG07IFdvcmtpbmdEaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBDb21wb25lbnRzOiBkb2NzCi1OYW1lOiB7Z3JvdXB9XE1vZHVsZSBEb2NzOyBGaWxlbmFtZToge2FwcH1ccHl0aG9udy5leGU7IFdvcmtpbmdEaXI6IHthcHB9OyBQYXJhbWV0ZXJzOiAiIiJ7YXBwfVxUb29sc1xTY3JpcHRzXHB5ZG9jLnB5dyIiIjsgQ29tcG9uZW50czogdG9vbHMKLU5hbWU6IHtncm91cH1cSURMRSAoUHl0aG9uIEdVSSk7IEZpbGVuYW1lOiB7YXBwfVxweXRob253LmV4ZTsgV29ya2luZ0Rpcjoge2FwcH07IFBhcmFtZXRlcnM6ICIiInthcHB9XFRvb2xzXGlkbGVcaWRsZS5weXciIiI7IENvbXBvbmVudHM6IHRvb2xzCi0KLVtSZWdpc3RyeV0KLTsgUmVnaXN0ZXIgLnB5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHk7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogQ29udGVudCBUeXBlOyBWYWx1ZURhdGE6IHRleHQvcGxhaW47IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gRmlsZTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlXERlZmF1bHRJY29uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YToge2FwcH1cUHkuaWNvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQ7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiAiIiJ7YXBwfVxweXRob24uZXhlIiIgIiIlMSIiICUqIgotCi07IFJlZ2lzdGVyIC5weWMKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weWM7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gQ29tcGlsZWRGaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIENvbXBpbGVkRmlsZTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IENvbXBpbGVkIFB5dGhvbiBGaWxlOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBDb21waWxlZEZpbGVcRGVmYXVsdEljb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiB7YXBwfVxweWMuaWNvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gQ29tcGlsZWRGaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbi5leGUiIiAiIiUxIiIgJSoiCi0KLTsgUmVnaXN0ZXIgLnB5bwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5bzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBDb21waWxlZEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi0KLTsgUmVnaXN0ZXIgLnB5dwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5dzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBOb0NvbkZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHl3OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiBDb250ZW50IFR5cGU7IFZhbHVlRGF0YTogdGV4dC9wbGFpbjsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBOb0NvbkZpbGU7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gRmlsZSAobm8gY29uc29sZSk7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIE5vQ29uRmlsZVxEZWZhdWx0SWNvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IHthcHB9XFB5LmljbwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIE5vQ29uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQ7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiAiIiJ7YXBwfVxweXRob253LmV4ZSIiICIiJTEiIiAlKiIKLQotCi07IFB5dGhvbiBSZWdpc3RyeSBLZXlzCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvbjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eTsgQ2hlY2s6IElzQWRtaW5Mb2dnZWRPbgotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjI7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXFB5dGhvblBhdGg7IFZhbHVlRGF0YTogInthcHB9XExpYjt7YXBwfVxETExzIjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcUHl0aG9uUGF0aFx3aW4zMjsgVmFsdWVEYXRhOiAie2FwcH1cbGliXHNpdGUtcGFja2FnZXNcd2luMzI7e2FwcH1cbGliXHNpdGUtcGFja2FnZXNcd2luMzJcbGliIjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxQeXRob25QYXRoXHdpbjMyY29tOyBWYWx1ZURhdGE6IEM6XFB5dGhvblxsaWJcc2l0ZS1wYWNrYWdlczsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxNb2R1bGVzOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxNb2R1bGVzXHB5dGhvbmNvbTsgVmFsdWVEYXRhOiB7c3lzfVxweXRob25jb20yMi5kbGw7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcTW9kdWxlc1xweXdpbnR5cGVzOyBWYWx1ZURhdGE6IHtzeXN9XFB5V2luVHlwZXMyMi5kbGw7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSW5zdGFsbFBhdGg7IFZhbHVlRGF0YToge2FwcH07IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHk7IFZhbHVlVHlwZTogc3RyaW5nCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXA7IFZhbHVlRGF0YToge2dyb3VwfTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxIZWxwOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZURhdGE6IHthcHB9XERvY1xpbmRleC5odG1sOyBGbGFnczogdW5pbnNkZWxldGVrZXk7IENvbXBvbmVudHM6IGRvY3MKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHBcUHl0aG9uIFdpbjMyIERvY3VtZW50YXRpb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZURhdGE6IHthcHB9XGxpYlxzaXRlLXBhY2thZ2VzXFB5V2luMzIuY2htOyBGbGFnczogdW5pbnNkZWxldGVrZXk7IENvbXBvbmVudHM6IGRvY3MKLQotW19JU1Rvb2xdCi1FbmFibGVJU1g9dHJ1ZQotCi0KLVtDb2RlXQotUHJvZ3JhbSBTZXR1cDsKLQotRnVuY3Rpb24gSXNBZG1pbk5vdExvZ2dlZE9uKCk6IEJvb2xlYW47Ci1iZWdpbgotICBSZXN1bHQgOj0gTm90IElzQWRtaW5Mb2dnZWRPbigpOwotZW5kOwotCi1iZWdpbgotZW5kLgotCi0KLQotCi1bVW5pbnN0YWxsRGVsZXRlXQotTmFtZToge2FwcH1cTGliXGNvbXBpbGVyXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGNvbXBpbGVyXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGNvbXBpbGVyOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXGNvbW1hbmQ7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsczsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGVtYWlsXHRlc3RcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWxcdGVzdFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFx0ZXN0OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZW1haWxcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWxcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWw7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxlbmNvZGluZ3NcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW5jb2RpbmdzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVuY29kaW5nczsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGhvdHNob3RcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcaG90c2hvdFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxob3RzaG90OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcbGliLW9sZFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxsaWItb2xkXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGxpYi1vbGQ7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx0a2ludGVyXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRraW50ZXJcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGtpbnRlcjsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHRlc3RcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGVzdFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0ZXN0OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXGRvbVwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcZG9tXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxkb207IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxccGFyc2Vyc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxccGFyc2Vyc1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxccGFyc2VyczsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFxzYXhcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHNheFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcc2F4OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWw7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzI7IFR5cGU6IGZpbGVzYW5kb3JkaXJzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbTsgVHlwZTogZmlsZXNhbmRvcmRpcnMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tZXh0OyBUeXBlOiBmaWxlc2FuZG9yZGlycwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNccHl0aG9uY29tLnB5KjsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XExpYlwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYjsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1xweW5jaGVcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xweW5jaGVcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xweW5jaGU7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcaWRsZVwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXGlkbGVcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xpZGxlOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHNjcmlwdHNcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xzY3JpcHRzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcc2NyaXB0czsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2tcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2tcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2s7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcd2ViY2hlY2tlclwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXJcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzOyBUeXBlOiBkaXJpZmVtcHR5Ci0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbi52Y3Byb2ogYi9QQy9WUzcuMS9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGI0NDAxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5dGhvbiINCi0JU2NjUHJvamVjdE5hbWU9InB5dGhvbiINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbl9kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbl9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAgL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsgL1ZTRVhUQ09NUF9WRVJCT1NFIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHljb24uaWNvIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5dGhvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uMjAud3NlIGIvUEMvVlM3LjEvcHl0aG9uMjAud3NlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTdmNmFkMy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24yMC53c2UKKysrIC9kZXYvbnVsbApAQCAtMSwzMTE3ICswLDAgQEAKLURvY3VtZW50IFR5cGU6IFdTRQotaXRlbTogR2xvYmFsCi0gIFZlcnNpb249OS4wCi0gIFRpdGxlPVB5dGhvbiAyLjRhMQotICBGbGFncz0wMDAxMDEwMAotICBMYW5ndWFnZXM9NjUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKLSAgSmFwYW5lc2UgRm9udCBOYW1lPU1TIEdvdGhpYwotICBKYXBhbmVzZSBGb250IFNpemU9MTAKLSAgU3RhcnQgR3JhZGllbnQ9MCAyNTUgMAotICBFbmQgR3JhZGllbnQ9MCAxMjggMAotICBXaW5kb3dzIEZsYWdzPTAwMDAwMTAwMDAwMDExMDEwMDEwMDEwMTAwMDAxMDEwCi0gIExvZyBQYXRobmFtZT0lTUFJTkRJUiVcSU5TVEFMTC5MT0cKLSAgTWVzc2FnZSBGb250PU1TIFNhbnMgU2VyaWYKLSAgRm9udCBTaXplPTgKLSAgUGFnZXMgTW9kaWZpZWQ9MDAwMTAwMDAwMTExMDEwMDAwMDAwMDAxMDAwMDAxMTEKLSAgRXh0cmEgUGFnZXM9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMTAwMTAKLSAgRGlzayBGaWxlbmFtZT1TRVRVUAotICBQYXRjaCBGbGFncz0wMDAwMDAwMDAwMDAxMDAxCi0gIFBhdGNoIFRocmVzaG9sZD04NQotICBQYXRjaCBNZW1vcnk9NDAwMAotICBNSUYgUERGIFZlcnNpb249MS4wCi0gIE1JRiBTTVMgVmVyc2lvbj0yLjAKLSAgRVhFIEZpbGVuYW1lPVB5dGhvbi0yLjRhMS5leGUKLSAgRGlhbG9ncyBWZXJzaW9uPTgKLSAgVmVyc2lvbiBGaWxlPTIuNGExCi0gIFZlcnNpb24gRGVzY3JpcHRpb249UHl0aG9uIFByb2dyYW1taW5nIExhbmd1YWdlCi0gIFZlcnNpb24gQ29weXJpZ2h0PakyMDAxLTIwMDcgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAgVmVyc2lvbiBDb21wYW55PVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gIENyeXN0YWwgRm9ybWF0PTEwMTExMTAwMTAxMTAwMDAwMDEwMDAxMDAxMDAxMDAxCi0gIFN0ZXAgVmlldz0mQWxsCi0gIFZhcmlhYmxlIE5hbWUxPV9XSVNFXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjE9V0lTRSByb290IGRpcmVjdG9yeQotICBWYXJpYWJsZSBEZWZhdWx0MT1DOlxQcm9ncmFtbWVcV2lzZSBJbnN0YWxsYXRpb24gU3lzdGVtCi0gIFZhcmlhYmxlIEZsYWdzMT0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lMj1fVENMRElSXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjI9VGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgVGNsL1RrIGluc3RhbGxhdGlvbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjI9bGl2ZXMuICBUaGlzIG11c3QgYmUgYSBzaWJsaW5nIG9mIHRoZSBQeXRob24KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24yPWRpcmVjdG9yeS4KLSAgVmFyaWFibGUgRGVmYXVsdDI9dGNsODQKLSAgVmFyaWFibGUgRmxhZ3MyPTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUzPV9ET0NfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMz1UaGUgdW5wYWNrZWQgSFRNTCBkb2MgZGlyZWN0b3J5LgotICBWYXJpYWJsZSBEZWZhdWx0Mz0uLlxodG1sCi0gIFZhcmlhYmxlIEZsYWdzMz0wMDAwMTAwMQotICBWYXJpYWJsZSBOYW1lND1fU1lTXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjQ9U3lzdGVtIGRpcmVjdG9yeSAod2hlcmUgdG8gZmluZCBNU1ZDUlQuRExMKQotICBWYXJpYWJsZSBEZWZhdWx0ND1DOlxXaW5kb3dzXFN5c3RlbQotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XFdpbmRvd3NcU3lzdGVtCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV0lOTlRcU3lzdGVtMzIKLSAgVmFyaWFibGUgVmFsdWVzND1DOlxDb2RlXE1TRExMcwotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XFdpbmRvd3NcU3lzdGVtMzIKLSAgVmFyaWFibGUgRmxhZ3M0PTAwMDAwMDEwCi0gIFZhcmlhYmxlIE5hbWU1PV9QWU1BSk9SXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjU9UHl0aG9uIG1ham9yIHZlcnNpb24gbnVtYmVyOyB0aGUgMiBpbiAyLjMuCi0gIFZhcmlhYmxlIERlZmF1bHQ1PTIKLSAgVmFyaWFibGUgRmxhZ3M1PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWU2PV9QWU1JTk9SXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjY9UHl0aG9uIG1pbm9yIHZlcnNpb24gbnVtYmVyOyB0aGUgMyBpbiAyLjMKLSAgVmFyaWFibGUgRGVmYXVsdDY9MwotICBWYXJpYWJsZSBGbGFnczY9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTc9X0RPQURNSU5fCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz1UaGUgaW5pdGlhbCB2YWx1ZSBmb3IgJURPQURNSU4lLgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9V2hlbiAwLCB3ZSBuZXZlciB0cnkgdG8gd3JpdGUgdW5kZXIgSEtMTSwKLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PWFuZCBpbnN0YWxsIHRoZSBQeXRob24gKyBNUyBydW50aW1lIERMTHMgaW4KLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PXRoZSBQeXRob24gZGlyZWN0b3J5IGluc3RlYWQgb2YgdGhlIHN5c3RlbSBkaXIuCi0gIFZhcmlhYmxlIERlZmF1bHQ3PTEKLSAgVmFyaWFibGUgVmFsdWVzNz0xCi0gIFZhcmlhYmxlIFZhbHVlczc9MAotICBWYXJpYWJsZSBGbGFnczc9MDAwMDEwMTAKLSAgVmFyaWFibGUgTmFtZTg9X0FMSUFTTkFNRV8KLSAgVmFyaWFibGUgRmxhZ3M4PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWU5PV9BTElBU1BBVEhfCi0gIFZhcmlhYmxlIEZsYWdzOT0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lMTA9X0FMSUFTVFlQRV8KLSAgVmFyaWFibGUgRmxhZ3MxMD0wMDAwMTAwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9UFlWRVJfU1RSSU5HCi0gIFZhbHVlPTIuMwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2hlbiB0aGUgdmVyc2lvbiBudW1iZXIgY2hhbmdlcywgc2V0IHRoZSBjb21waWxlcgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD12cmJscyBfUFlNQUpPUl8gYW5kICBfUFlNSU5PUl8uCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGhpbmcgaW4gdGhlIHNjcmlwdCBiZWxvdyBzaG91bGQgbmVlZCBmaWRkbGluZyB0aGVuLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1PdGhlciB0aGluZ3MgdGhhdCBuZWVkIGZpZGRsaW5nOgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgUFlWRVJfU1RSSU5HIGFib3ZlLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgVGhlICJUaXRsZToiIGluIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgR1VJLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgQnVpbGQgU2V0dGluZ3MgYW5kIFZlcnNpb24gUmVzb3VyY2Ugb24gc3RlcCA2IChGaW5pc2gpIG9mIHRoZSBJbnN0YWxsYXRpb24gRXhwZXJ0Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgICAgQmUgc3VyZSB0byBzZWxlY3QgU3RlcHMtPkFsbCBvciB5b3UgbWF5IG5vdCBzZWUgdGhlc2UhCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaGVuIHRoZSB2ZXJzaW9uIG9mIFRjbC9UayBjaGFuZ2VzLCB0aGUgY29tcGlsZXIgdnJibAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1fVENMRElSXyBtYXkgYWxzbyBuZWVkIHRvIGJlIGNoYW5nZWQuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QVBQVElUTEUKLSAgVmFsdWU9UHl0aG9uICVQWVZFUl9TVFJJTkclCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVBZX1ZFUlNJT04gc2hvdWxkIGJlIG1ham9yLm1pbm9yIG9ubHk7IHVzZWQgdG8gY3JlYXRlIHRoZSByZWdpc3RyeSBrZXk7IG11c3QgbWF0Y2ggTVNfRExMX0lEIGluIHB5dGhvbl9udC5yYwotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9UFlfVkVSU0lPTgotICBWYWx1ZT0lX1BZTUFKT1JfJS4lX1BZTUlOT1JfJQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1HUk9VUCBpcyB0aGUgU3RhcnQgbWVudSBncm91cCBuYW1lOyB1c2VyIGNhbiBvdmVycmlkZS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPVB5dGhvbiAlUFlfVkVSU0lPTiUKLSAgRmxhZ3M9MTAwMDAwMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TUFJTkRJUiBpcyB0aGUgYXBwIGRpcmVjdG9yeTsgdXNlciBjYW4gb3ZlcnJpZGUuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPVB5dGhvbiVfUFlNQUpPUl8lJV9QWU1JTk9SXyUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPSVfRE9BRE1JTl8lCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUdpdmUgbm9uLWFkbWluIHVzZXJzIGEgY2hhbmNlIHRvIGFib3J0LgotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMDExMTExCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogRGlzcGxheSBNZXNzYWdlCi0gIFRpdGxlPURvaW5nIG5vbi1hZG1pbiBpbnN0YWxsCi0gIFRleHQ9VGhlIGN1cnJlbnQgbG9naW4gZG9lcyBub3QgaGF2ZSBBZG1pbmlzdHJhdG9yIFByaXZpbGVnZXMgb24gdGhpcyBtYWNoaW5lLiAgUHl0aG9uIHdpbGwgaW5zdGFsbCBpdHMgcmVnaXN0cnkgaW5mb3JtYXRpb24gaW50byB0aGUgcGVyLXVzZXIgYXJlYSBvbmx5IGZvciB0aGUgY3VycmVudCBsb2dpbiwgaW5zdGVhZCBvZiBpbnRvIHRoZSBwZXItbWFjaGluZSBhcmVhIGZvciBldmVyeSBhY2NvdW50IG9uIHRoaXMgbWFjaGluZS4gIFNvbWUgYWR2YW5jZWQgdXNlcyBvZiBQeXRob24gbWF5IG5vdCB3b3JrIGFzIGEgcmVzdWx0IChmb3IgZXhhbXBsZSwgcnVubmluZyBhIFB5dGhvbiBzY3JpcHQgYXMgYSBzZXJ2aWNlKS4KLSAgVGV4dD0KLSAgVGV4dD1JZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50LCBwbGVhc2UgY2xpY2sgQ2FuY2VsIHRvIGFib3J0IHRoaXMgaW5zdGFsbGF0aW9uLCBsb2cgb24gYXMgYW4gQWRtaW5pc3RyYXRvciwgYW5kIHN0YXJ0IHRoZSBpbnN0YWxsYXRpb24gYWdhaW4uCi0gIEZsYWdzPTAwMDAxMDAwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkVHSU4gV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06IHRoZSAic3RvcCIgb24gdGhlIG5leHQgbGluZSBpcyBhY3R1YWxseSAicGF1c2UiLgotZW5kCi1pdGVtOiBPcGVuL0Nsb3NlIElOU1RBTEwuTE9HCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUlmIHRoZSBkZXN0aW5hdGlvbiBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBhIHdyaXRhYmxlIFdpbmRvd3NcU3lzdGVtIGRpcmVjdG9yeSwgc3lzdGVtIGZpbGVzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgV2luZG93c1wgZGlyZWN0b3J5Ci1lbmQKLWl0ZW06IENoZWNrIGlmIEZpbGUvRGlyIEV4aXN0cwotICBQYXRobmFtZT0lU1lTJQotICBGbGFncz0xMDAwMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1lTCi0gIFZhbHVlPSVXSU4lCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMTExMDExCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q09NTU9OCi0gIEtleT1TT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvbgotICBEZWZhdWx0PUM6XFByb2dyYW0gRmlsZXNcQ29tbW9uIEZpbGVzCi0gIFZhbHVlIE5hbWU9Q29tbW9uRmlsZXNEaXIKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1QUk9HUkFNX0ZJTEVTCi0gIEtleT1TT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvbgotICBEZWZhdWx0PUM6XFByb2dyYW0gRmlsZXMKLSAgVmFsdWUgTmFtZT1Qcm9ncmFtRmlsZXNEaXIKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUVYUExPUkVSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICBUaGUgV2l6YXJkIGhhcmRjb2QgIkM6IiBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlcGxhY2VtZW50IHRleHQgZm9yIE1BSU5ESVIuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoYXQncyBub3QgYXBwcm9wcmlhdGUgaWYgdGhlIHN5c3RlbSBkcml2ZSBkb2Vzbid0IGhhcHBlbiB0byBiZSBDOi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SSByZW1vdmVkIHRoZSAiQzoiLCBhbmQgdGhhdCBkaWQgdGhlIHJpZ2h0IHRoaW5nIGZvciB0d28gcGVvcGxlIHdobyB0ZXN0ZWQgaXQgb24gbm9uLUM6IG1hY2hpbmVzLAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1idXQgaXQncyB1bmNsZWFyIHdoZXRoZXIgaXQgd2lsbCBhbHdheXMgZG8gdGhlIHJpZ2h0IHRoaW5nLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9TUFJTkRJUgotICBWYWx1ZT1cJU1BSU5ESVIlCi0gIEZsYWdzPTAwMDAxMTAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJBQ0tVUCBpcyB0aGUgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUgcGF0aCB0aGF0IGFsbCBiYWNrdXAgZmlsZXMgd2lsbCBiZSBjb3BpZWQgdG8gd2hlbiBvdmVyd3JpdHRlbgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QkFDS1VQCi0gIFZhbHVlPSVNQUlORElSJVxCQUNLVVAKLSAgRmxhZ3M9MTAwMDAwMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RE9CQUNLVVAgZGV0ZXJtaW5lcyBpZiBhIGJhY2t1cCB3aWxsIGJlIHBlcmZvcm1lZC4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIEEgKGRvIGJhY2t1cCkgb3IgQiAoZG8gbm90IGRvIGJhY2t1cCkKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQkFDS1VQCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QlJBTkRJTkcgZGV0ZXJtaW5lcyBpZiB0aGUgaW5zdGFsbGF0aW9uIHdpbGwgYmUgYnJhbmRlZCB3aXRoIGEgbmFtZSBhbmQgY29tcGFueS4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgd3JpdHRlbiB0byB0aGUgSU5TVCBkaXJlY3RvcnkgKGluc3RhbGxhdGlvbiBtZWRpYSkuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CUkFORElORwotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1CUkFORElORwotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFJlYWQgSU5JIFZhbHVlCi0gIFZhcmlhYmxlPU5BTUUKLSAgUGF0aG5hbWU9JUlOU1QlXENVU1REQVRBLklOSQotICBTZWN0aW9uPVJlZ2lzdHJhdGlvbgotICBJdGVtPU5hbWUKLWVuZAotaXRlbTogUmVhZCBJTkkgVmFsdWUKLSAgVmFyaWFibGU9Q09NUEFOWQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNlY3Rpb249UmVnaXN0cmF0aW9uCi0gIEl0ZW09Q29tcGFueQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TkFNRQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9CUkFORAotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEdldCBTeXN0ZW0gSW5mb3JtYXRpb24KLSAgVmFyaWFibGU9TkFNRQotICBGbGFncz0wMDAwMDExMAotZW5kCi1pdGVtOiBHZXQgU3lzdGVtIEluZm9ybWF0aW9uCi0gIFZhcmlhYmxlPUNPTVBBTlkKLSAgRmxhZ3M9MDAwMDAxMTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FTkQgV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1TZXQgdnJibHMgZm9yIHRoZSAiQWR2YW5jZWQgT3B0aW9ucyIgc3ViZGlhbG9nIG9mIENvbXBvbmVudHMuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QgotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRBU0tTIHZhbHVlczoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QTogUmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUI6IENyZWF0ZSBTdGFydCBNZW51IHNob3J0Y3V0cwotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QUIKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUNPTVBPTkVOVFMgdmFsdWVzOgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BOiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUI6IFRjbC9UawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DOiBkb2NzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUQ6IHRvb2xzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUU6IHRlc3Qgc3VpdGUKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QUJDREUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1hcmNoIHRocnUgdGhlIHVzZXIgR1VJLgotZW5kCi1pdGVtOiBXaXphcmQgQmxvY2sKLSAgRGlyZWN0aW9uIFZhcmlhYmxlPURJUkVDVElPTgotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgQml0bWFwIFBhdGhuYW1lPS5caW5zdGFsbGVyLmJtcAotICBYIFBvc2l0aW9uPTkKLSAgWSBQb3NpdGlvbj0xMAotICBGaWxsZXIgQ29sb3I9MTExNzM3NTkKLSAgRGlhbG9nPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgRGlhbG9nPUJhY2t1cCBSZXBsYWNlZCBGaWxlcwotICBEaWFsb2c9U2VsZWN0IENvbXBvbmVudHMKLSAgRGlhbG9nPVNlbGVjdCBQcm9ncmFtIE1hbmFnZXIgR3JvdXAKLSAgVmFyaWFibGU9Ci0gIFZhcmlhYmxlPQotICBWYXJpYWJsZT0KLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9Ci0gIFZhbHVlPQotICBWYWx1ZT0KLSAgVmFsdWU9QgotICBDb21wYXJlPTAKLSAgQ29tcGFyZT0wCi0gIENvbXBhcmU9MAotICBDb21wYXJlPTMKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURJU1BMQVkKLSAgVmFsdWU9U3RhcnQgSW5zdGFsbGF0aW9uCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPUluc3RhbGwgZGlyZWN0b3J5OiAgJU1BSU5ESVIlJUNSTEYlCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9pbmcgYWRtaW4gaW5zdGFsbC4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9pbmcgbm9uLWFkbWluIGluc3RhbGwuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQkFDS1VQCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlTWFrZSBiYWNrdXBzLCBpbnRvICVCQUNLVVAlJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvbid0IG1ha2UgYmFja3Vwcy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVDb21wb25lbnRzOiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcyVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgVGNsL1RrIChUa2ludGVyLCBJRExFLCBweWRvYyklQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1ECi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBUb29sIGFuZCB1dGlsaXR5IHNjcmlwdHMlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFB5dGhvbiB0ZXN0IHN1aXRlJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlUmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb24ndCByZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlU3RhcnQgTWVudSBncm91cDogICVHUk9VUCUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlTm8gU3RhcnQgTWVudSBzaG9ydGN1dHMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDExIDMyMyAzMwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGUgculwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbgotICAgICAgVGV4dCBHZXJtYW49WmllbHZlcnplaWNobmlzIHfkaGxlbgotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgZWwgZGlyZWN0b3JpbyBkZSBkZXN0aW5vCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZQotICAgIGVuZAotICAgIGl0ZW06IExpc3Rib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNTggMzIxIDIxOQotICAgICAgVmFyaWFibGU9TUFJTkRJUgotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDEwMDAwMDAwMTAxMDAwMDAxCi0gICAgICBGbGFncz0wMDAwMTEwMDAwMDAxMDEwCi0gICAgICBUZXh0PSVNQUlORElSJQotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDAgMzEzIDU4Ci0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9UGxlYXNlIHNlbGVjdCBhIGRpcmVjdG9yeSBmb3IgdGhlICVBUFBUSVRMRSUgZmlsZXMuCi0gICAgZW5kCi0gIGVuZAotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgVGl0bGUgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBy6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uCi0gICAgVGl0bGUgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyB35GhsZW4KLSAgICBUaXRsZSBTcGFuaXNoPVNlbGVjY2lvbmUgZWwgZGlyZWN0b3JpbyBkZSBkZXN0aW5vCi0gICAgVGl0bGUgSXRhbGlhbj1TZWxlemlvbmFyZSBEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lCi0gICAgV2lkdGg9Mjc2Ci0gICAgSGVpZ2h0PTIxNgotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBMaXN0Ym94Ci0gICAgICBSZWN0YW5nbGU9NiA2IDIwNCAxODYKLSAgICAgIFZhcmlhYmxlPU1BSU5ESVIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAxMDAwMDAwMDEwMTAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDExMDAwMDEwMDAxMAotICAgICAgVGV4dD0lTUFJTkRJUiUKLSAgICAgIFRleHQgRnJlbmNoPSVNQUlORElSJQotICAgICAgVGV4dCBHZXJtYW49JU1BSU5ESVIlCi0gICAgICBUZXh0IFNwYW5pc2g9JU1BSU5ESVIlCi0gICAgICBUZXh0IEl0YWxpYW49JU1BSU5ESVIlCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgOCAyNjUgMjYKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1PSwotICAgICAgVGV4dCBGcmVuY2g9T0sKLSAgICAgIFRleHQgR2VybWFuPU9LCi0gICAgICBUZXh0IFNwYW5pc2g9QWNlcHRhcgotICAgICAgVGV4dCBJdGFsaWFuPU9LCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgMzEgMjY1IDUwCi0gICAgICBWYXJpYWJsZT1NQUlORElSCi0gICAgICBWYWx1ZT0lTUFJTkRJUl9TQVZFJQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PUNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9QW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49QWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9Q2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj1Bbm51bGxhCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPUJhY2t1cCBSZXBsYWNlZCBGaWxlcwotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9RmljaGllcnMgZGUgU2F1dmVnYXJkZSBSZW1wbGFj6XMKLSAgICBUaXRsZSBHZXJtYW49U2ljaGVydW5nc2tvcGllIHZvbiBlcnNldHp0ZW4gRGF0ZWllbiBlcnN0ZWxsZW4KLSAgICBUaXRsZSBQb3J0dWd1ZXNlPUZpY2hlaXJvcyBzdWJzdGl0de1kb3MgZGUgc2VndXJhbudhCi0gICAgVGl0bGUgU3BhbmlzaD1Db3BpYXMgZGUgc2VndXJpZGFkIGRlIGxvcyBhcmNoaXZvcyByZWVtcGxhemFkb3MKLSAgICBUaXRsZSBJdGFsaWFuPUJhY2t1cCBmaWxlIHNvc3RpdHVpdGkKLSAgICBUaXRsZSBEYW5pc2g9U2lra2VyaGVkc2tvcGllcmluZyBhZiBlcnN0YXR0ZWRlIGZpbGVyCi0gICAgVGl0bGUgRHV0Y2g9VmVydmFuZ2VuIGJlc3RhbmRlbiBrb3Bp63JlbgotICAgIFRpdGxlIE5vcndlZ2lhbj1TaWtrZXJoZXRza29waWVyZSBlcnN0YXR0ZWRlIGZpbGVyCi0gICAgVGl0bGUgU3dlZGlzaD1T5GtlcmhldHNrb3BpZXJhIHV0Ynl0dGEgZmlsZXIKLSAgICBXaWR0aD0zNTAKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUxCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdmFudD4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXI+Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JlBy83hpbW8+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgICBUZXh0IERhbmlzaD0mTuZzdGU+Ci0gICAgICBUZXh0IER1dGNoPSZWb2xnZW5kZT4KLSAgICAgIFRleHQgTm9yd2VnaWFuPSZOZXN0ZT4KLSAgICAgIFRleHQgU3dlZGlzaD0mTuRzdGEgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUxCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08JlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCZadXL8Y2sKLSAgICAgIFRleHQgUG9ydHVndWVzZT08JlJldG9ybmFyCi0gICAgICBUZXh0IFNwYW5pc2g9PCZSZXRyb2NlZGVyCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICAgIFRleHQgRGFuaXNoPTwmVGlsYmFnZQotICAgICAgVGV4dCBEdXRjaD08JlRlcnVnCi0gICAgICBUZXh0IE5vcndlZ2lhbj08JlRpbGJha2UKLSAgICAgIFRleHQgU3dlZGlzaD08ICZUaWxsYmFrYQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9Mjc4IDIzNCAzMzAgMjUxCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9QW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49QWJicmVjaGVuCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Q2FuY2VsYXIKLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICAgIFRleHQgRGFuaXNoPUFubnVsbGVyCi0gICAgICBUZXh0IER1dGNoPUFubnVsZXJlbgotICAgICAgVGV4dCBOb3J3ZWdpYW49QXZicnl0Ci0gICAgICBUZXh0IFN3ZWRpc2g9QXZicnl0Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTEgMjIxIDMyOSAyMjMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDYgMzIwIDk4Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9VGhpcyBpbnN0YWxsYXRpb24gcHJvZ3JhbSBjYW4gY3JlYXRlIGJhY2t1cCBjb3BpZXMgb2YgYWxsIGZpbGVzIHJlcGxhY2VkIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uLiBUaGVzZSBmaWxlcyB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgc29mdHdhcmUgaXMgdW5pbnN0YWxsZWQgYW5kIGEgcm9sbGJhY2sgaXMgcmVxdWVzdGVkLiAgSWYgYmFja3VwIGNvcGllcyBhcmUgbm90IGNyZWF0ZWQsIHlvdSB3aWxsIG9ubHkgYmUgYWJsZSB0byB1bmluc3RhbGwgdGhlIHNvZnR3YXJlIGFuZCBub3Qgcm9sbCB0aGUgc3lzdGVtIGJhY2sgdG8gYSBwcmV2aW91cyBzdGF0ZS4KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PURvIHlvdSB3YW50IHRvIGNyZWF0ZSBiYWNrdXBzIG9mIHJlcGxhY2VkIGZpbGVzPwotICAgICAgVGV4dCBGcmVuY2g9TGUgcHJvZ3JhbW1lIGQnaW5zdGFsbGF0aW9uIHBldXQgY3LpZXIgZGVzIGNvcGllcyBkZSBzYXV2ZWdhcmRlIGRlIHRvdXMgbGVzIGZpY2hpZXJzIHJlbXBsYWPpcyBwZW5kYW50IGwnaW5zdGFsbGF0aW9uLiBDZXMgZmljaGllcnMgc29udCB1dGlsaXPpcyBhdSBjYXMgb/kgbGUgbG9naWNpZWwgZXN0IGTpc2luc3RhbGzpIGV0IHF1ZSBsJ29uIHByb2PoZGUg4CBsYSByZXByaXNlIGR1IHN5c3TobWUuIFNpIGxlcyBjb3BpZXMgZGUgc2F1dmVnYXJkZSBuZSBzb250IHBhcyBjcunpZXMsIG9uIG5lIHBvdXJyYSBxdWUgZOlzaW5zdGFsbGVyIGxlIGxvZ2ljaWVsIHNhbnMgcmVwcmVuZHJlIGxlIHN5c3TobWUg4CB1biDpdGF0IHBy6WPpZGVudC4gVm91bGV6LXZvdXMgY3LpZXIgdW5lIHNhdXZlZ2FyZGUgZGVzIGZpY2hpZXJzIHJlbXBsYWPpcyA/Ci0gICAgICBUZXh0IEdlcm1hbj1EaWVzZXMgSW5zdGFsbGF0aW9uc3Byb2dyYW1tIGthbm4gU2ljaGVydW5nc2tvcGllbiB2b24gYWxsZW4gd+RocmVuZCBkZXIgSW5zdGFsbGF0aW9uIGVyc2V0enRlbiBEYXRlaWVuIGVyc3RlbGxlbi4gRGllc2UgRGF0ZWllbiB3ZXJkZW4genVyIFL8Y2tn5G5naWdtYWNodW5nIGRlciBJbnN0YWxsYXRpb24gdW5kIGJlaSBBbmZvcmRlcnVuZyBlaW5lcyBSb2xsYmFja3MgdmVyd2VuZGV0LiBPaG5lIFNpY2hlcnVuZ3Nrb3BpZW4gaXN0IG51ciBlaW5lIFL8Y2tn5G5naWdtYWNodW5nIGRlciBJbnN0YWxsYXRpb24gbfZnbGljaCwgbmljaHQgYWJlciBlaW4gUm9sbGJhY2sgZGVzIFN5c3RlbXMuIFNpY2hlcnVuZ3Nrb3BpZW4gZGVyIGVyc2V0enRlbiBEYXRlaWVuIGVyc3RlbGxlbj8KLSAgICAgIFRleHQgUG9ydHVndWVzZT1Fc3RlIHByb2dyYW1hIGRlIGluc3RhbGHn428gcG9kZSBjcmlhciBj83BpYXMgZGUgc2VndXJhbudhIGRlIHRvZG9zIG9zIGZpY2hlaXJvcyBzdWJzdGl0de1kb3MgZHVyYW50ZSBhIGluc3RhbGHn428uIEVzdGVzIGZpY2hlaXJvcyBzZXLjbyB1dGlsaXphZG9zIHF1YW5kbyBvIHByb2dyYW1hIGZvciBkZXNpbnN0YWxhZG8gIGUgZm9yIHJlcXVpc2l0YWRhIHVtYSByZXRvbWFkYS4gU2UgYXMgY/NwaWFzIGRlIHNlZ3VyYW7nYSBu428gZm9yZW0gY3JpYWRhcywgc/MgcG9kZXLhIGRlc2luc3RhbGFyIG8gcHJvZ3JhbWEgZSBu428gcG9kZSByZXRvbWFyICB1bSBlc3RhZG8gYW50ZXJpb3IgZG8gc2lzdGVtYS4gRGVzZWphIGNyaWFyIGPzcGlhcyBkZSBzZWd1cmFu52EgZG9zIGZpY2hlaXJvcyBzdWJzdGl0de1kb3M/Ci0gICAgICBUZXh0IFNwYW5pc2g9RXN0ZSBwcm9ncmFtYSBkZSBpbnN0YWxhY2nzbiBwdWVkZSBjcmVhciBjb3BpYXMgZGUgc2VndXJpZGFkIGRlIHRvZG9zIGxvcyBhcmNoaXZvcyByZWVtcGxhemFkb3MgZHVyYW50ZSBsYSBpbnN0YWxhY2nzbi4gRXN0b3MgYXJjaGl2b3Mgc2UgdXRpbGl6YXLhbiBjdWFuZG8gc2UgZGVzaW5zdGFsZSBlbCBzb2Z0d2FyZSB5IHNlIHNvbGljaXRlIHZvbHZlciBhbCBlc3RhZG8gYW50ZXJpb3IuIFNpIG5vIHNlIGNyZWFuIGNvcGlhcyBkZSBzZWd1cmlkYWQsIPpuaWNhbWVudGUgcG9kcuEgZGVzaW5zdGFsYXIgZWwgc29mdHdhcmUgeSBubyBwb2Ry4SBkZXZvbHZlciBlbCBzaXN0ZW1hIGFsIGVzdGFkbyBhbnRlcmlvci4gv0Rlc2VhIGNyZWFyIGFyY2hpdm9zIGRlIHNlZ3VyaWRhZCBkZSBsb3MgYXJjaGl2b3MgcmVlbXBsYXphZG9zPwotICAgICAgVGV4dCBJdGFsaWFuPVF1ZXN0byBwcm9ncmFtbWEgZGkgaW5zdGFsbGF6aW9uZSBwdfIgY3JlYXJlIGNvcGllIGRpIGJhY2t1cCBkaSB0dXR0aSBpIGZpbGUgc29zdGl0dWl0aSBkdXJhbnRlIGySaW5zdGFsbGF6aW9uZS4gUXVlc3RpIGZpbGUgc2FyYW5ubyB1c2F0aSBxdWFuZG8gaWwgc29mdHdhcmUgc2Fy4CBkaXNpbnN0YWxsYXRvIGUgc2Fy4CByaWNoaWVzdG8gdW4gcml0b3JubyBhbGxvIHN0YXRvIHByZWNlZGVudGUuIFNlIG5vbiBjcmVpIGxlIGNvcGllIGRpIGJhY2t1cCwgcG90cmFpIHNvbG8gZGlzaW5zdGFsbGFyZSBpbCBzb2Z0d2FyZSwgbWEgbm9uIHBvdHJhaSByaXBvcnRhcmUgaWwgc2lzdGVtYSBhbGxvIHN0YXRvIHByZWNlZGVudGUuIFZ1b2kgY3JlYXJlIGkgZmlsZSBkaSBiYWNrdXAgZGVpIGZpbGUgc29zdGl0dWl0aT8KLSAgICAgIFRleHQgRGFuaXNoPURldHRlIGluc3RhbGxhdGlvbnNwcm9ncmFtIGthbiBvcHJldHRlIHNpa2tlcmhlZHNrb3BpZXIgYWYgYWxsZSBmaWxlciwgc29tIGVyc3RhdHRlcyB1bmRlciBpbnN0YWxsYXRpb25lbi4gRGlzc2UgZmlsZXIgYmVueXR0ZXMsIG7lciBzb2Z0d2FyZW4gZmplcm5lcywgb2cgZGVuIHRpZGxpZ2VyZSBzeXN0ZW1rb25maWd1cmF0aW9uIGdlbmV0YWJsZXJlcy4gSHZpcyBkZXIgaWtrZSBvcHJldHRlcyBzaWtrZXJoZWRza29waWVyLCBrYW4gZHUga3VuIGZqZXJuZSBkZW4gaW5zdGFsbGVyZWRlIHNvZnR3YXJlIG9nIGlra2UgZ2VuZXRhYmxlcmUgZGVuIHRpZGxpZ2VyZSBzeXN0ZW1rb25maWd1cmF0aW9uLiBWaWwgZHUgb3ByZXR0ZSBzaWtrZXJoZWRza29waWVyIGFmIGZpbGVyLCBzb20gZXJzdGF0dGVzPwotICAgICAgVGV4dCBEdXRjaD1EaXQgaW5zdGFsbGF0aWVwcm9ncmFtbWEga2FuIGtvcGll624gbWFrZW4gdmFuIGFsbGUgYmVzdGFuZGVuIGRpZSB0aWpkZW5zIGRlIGluc3RhbGxhdGllIHdvcmRlbiB2ZXJ2YW5nZW4uIERlemUgd29yZGVuIGRhbiBnZWJydWlrdCBhbHMgZGUgc29mdHdhcmUtaW5zdGFsbGF0aWUgb25nZWRhYW4gd29yZHQgZ2VtYWFrdCBlbiB1IGhldCBzeXN0ZWVtIHdpbHQgbGF0ZW4gdGVydWdrZXJlbiBuYWFyIGRlIG9vcnNwcm9ua2VsaWprZSBzdGFhdC4gQWxzIGVyIGdlZW4gYmFjay11cCBrb3BpZetuIHdvcmRlbiBnZW1hYWt0LCBrdW50IHUgZGUgc29mdHdhcmUgZW5rZWwgdmVyd2lqZGVyZW4gbWFhciBoZXQgc3lzdGVlbSBuaWV0IGluIGRlIG9vcnNwcm9ua2VsaWprZSBzdGFhdCB0ZXJ1Z2JyZW5nZW4uIFdpbHQgdSBlZW4gYmFjay11cCBtYWtlbiB2YW4gZGUgdmVydmFuZ2VuIGJlc3RhbmRlbj8KLSAgICAgIFRleHQgTm9yd2VnaWFuPURldHRlIGluc3RhbGxhc2pvbnNwcm9ncmFtbWV0IGthbiBsYWdlIHNpa2tlcmhldHNrb3BpZXIgYXYgYWxsZSBmaWxlciBzb20gYmxpciBlcnN0YXR0ZXQgdW5kZXIgaW5zdGFsbGFzam9uZW4uIERpc3NlIGZpbGVuZSB2aWwgdGFzIGkgYnJ1ayBu5XIgcHJvZ3JhbXZhcmVuIGVyIGF2aW5zdGFsbGVydCBvZyBkZXQgZXIgYmVob3YgZm9yIHRpbGJha2VzdGlsbGluZy4gSHZpcyBkZXQgaWtrZSBlciBsYWdldCBzaWtrZXJoZXRza29waWVyLCBrYW4gZHUga3VuIGF2aW5zdGFsbGVyZSBwcm9ncmFtdmFyZW4gb2cgaWtrZSBzdGlsbGUgc3lzdGVtZXQgdGlsYmFrZSB0aWwgdGlkbGlnZXJlIHN0YXR1cy4g2G5za2VyIGR1IOUgbGFnZSBzaWtrZXJoZXRza29waWVyIGF2IGRlIGZpbGVuZSBzb20gYmxpciBlcnN0YXR0ZXQgbuU/Ci0gICAgICBUZXh0IFN3ZWRpc2g9SW5zdGFsbGF0aW9uc3Byb2dyYW1tZXQga2FuIHNrYXBhIHPka2VyaGV0c2tvcGlvciBhdiBhbGxhIGZpbGVyIHNvbSBieXRzIHV0IHVuZGVyIGluc3RhbGxhdGlvbmVuLiBEZXNzYSBmaWxlciBrYW4gc2VkYW4gYW525G5kYXMgbuRyIHByb2dyYW12YXJhbiBhdmluc3RhbGxlcmFzIG9jaCBkdSBiZWfkciByb2xsYmFjay4gT20gZHUgZOUgaW50ZSBoYXIgbuVncmEgc+RrZXJoZXRza29waW9yIGthbiBkdSBiYXJhIGF2aW5zdGFsbGVyYSBwcm9ncmFtdmFyYW4sIGludGUg5XRlcnNrYXBhIHN5c3RlbWV0IGkgZGVzcyB0aWRpZ2FyZSBza2ljay4gVmlsbCBkdSBn9nJhIHPka2VyaGV0c2tvcGlvciBhdiBkZSBlcnNhdHRhIGZpbGVybmE/Ci0gICAgZW5kCi0gICAgaXRlbTogUmFkaW8gQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTQxIDEwNiAyNjUgMTM2Ci0gICAgICBWYXJpYWJsZT1ET0JBQ0tVUAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxMDAxCi0gICAgICBUZXh0PSZZZXMsIG1ha2UgYmFja3VwcwotICAgICAgVGV4dD1OJm8sIGRvIG5vdCBtYWtlIGJhY2t1cHMKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD0mT3VpCi0gICAgICBUZXh0IEZyZW5jaD1OJm9uCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgR2VybWFuPSZKYQotICAgICAgVGV4dCBHZXJtYW49TiZlaW4KLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSZTaW0KLSAgICAgIFRleHQgUG9ydHVndWVzZT1O4yZvCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Ci0gICAgICBUZXh0IFNwYW5pc2g9JlPtCi0gICAgICBUZXh0IFNwYW5pc2g9TiZvCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IEl0YWxpYW49JlPsCi0gICAgICBUZXh0IEl0YWxpYW49TiZvCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IERhbmlzaD0mSmEKLSAgICAgIFRleHQgRGFuaXNoPSZOZWoKLSAgICAgIFRleHQgRGFuaXNoPQotICAgICAgVGV4dCBEdXRjaD0mSmEKLSAgICAgIFRleHQgRHV0Y2g9TiZlZQotICAgICAgVGV4dCBEdXRjaD0KLSAgICAgIFRleHQgTm9yd2VnaWFuPSZKYQotICAgICAgVGV4dCBOb3J3ZWdpYW49Jk5laQotICAgICAgVGV4dCBOb3J3ZWdpYW49Ci0gICAgICBUZXh0IFN3ZWRpc2g9JkphCi0gICAgICBUZXh0IFN3ZWRpc2g9TiZlagotICAgICAgVGV4dCBTd2VkaXNoPQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgQ29udHJvbCBOYW1lPUJBQ0syCi0gICAgICBSZWN0YW5nbGU9MTA4IDE3MyAzMjAgMjA4Ci0gICAgICBBY3Rpb249MQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgICBUZXh0PUJhY2t1cCBGaWxlIERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgICAgVGV4dCBGcmVuY2g9UulwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbiBkZXMgZmljaGllcnMgZGUgc2F1dmVnYXJkZQotICAgICAgVGV4dCBHZXJtYW49WmllbHZlcnplaWNobmlzIGb8ciBkaWUgU2ljaGVydW5nc2RhdGVpCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9RGlyZWN083JpbyBkZSBkZXN0aW5vIGRlIGZpY2hlaXJvIGRlIHNlZ3VyYW7nYQotICAgICAgVGV4dCBTcGFuaXNoPURpcmVjdG9yaW8gZGUgRGVzdGlubyBkZSBsb3MgQXJjaGl2b3MgZGUgU2VndXJpZGFkCi0gICAgICBUZXh0IEl0YWxpYW49RGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZSBkZWkgZmlsZSBkaSBiYWNrdXAKLSAgICAgIFRleHQgRGFuaXNoPURlc3RpbmF0aW9uc2JpYmxpb3RlayB0aWwgc2lra2VyaGVkc2tvcGllcgotICAgICAgVGV4dCBEdXRjaD1Eb2VsZGlyZWN0b3J5IGJhY2t1cC1iZXN0YW5kCi0gICAgICBUZXh0IE5vcndlZ2lhbj1N5WxrYXRhbG9nIGZvciBzaWtrZXJoZXRza29waWVyCi0gICAgICBUZXh0IFN3ZWRpc2g9S2F0YWxvZyBm9nIgc+RrZXJoZXRza29waWVyYWRlIGZpbGVyCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMwotICAgICAgUmVjdGFuZ2xlPTI2NSAxODUgMzE4IDIwMwotICAgICAgVmFyaWFibGU9QkFDS1VQX1NBVkUKLSAgICAgIFZhbHVlPSVCQUNLVVAlCi0gICAgICBEZXN0aW5hdGlvbiBEaWFsb2c9MQotICAgICAgQWN0aW9uPTIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1CJnJvd3NlLi4uCi0gICAgICBUZXh0IEZyZW5jaD1QJmFyY291cmlyCi0gICAgICBUZXh0IEdlcm1hbj1CJmzkdHRlcm4uLi4KLSAgICAgIFRleHQgUG9ydHVndWVzZT1QJnJvY3VyYXIKLSAgICAgIFRleHQgU3BhbmlzaD1WJmlzdWFsaXphci4uLgotICAgICAgVGV4dCBJdGFsaWFuPVNmb2dsaWEuLi4KLSAgICAgIFRleHQgRGFuaXNoPSZHZW5uZW1zZS4uLgotICAgICAgVGV4dCBEdXRjaD1CJmxhZGVyZW4uLi4KLSAgICAgIFRleHQgTm9yd2VnaWFuPUJsYSBpZ2plbm5vbQotICAgICAgVGV4dCBTd2VkaXNoPSZCbORkZHJhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzQKLSAgICAgIFJlY3RhbmdsZT0xMjkgMTg4IDI1NCAyMDAKLSAgICAgIERlc3RpbmF0aW9uIERpYWxvZz0yCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JUJBQ0tVUCUKLSAgICAgIFRleHQgRnJlbmNoPSVCQUNLVVAlCi0gICAgICBUZXh0IEdlcm1hbj0lQkFDS1VQJQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSVCQUNLVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgSXRhbGlhbj0lQkFDS1VQJQotICAgICAgVGV4dCBEYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRHV0Y2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgTm9yd2VnaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IFN3ZWRpc2g9JUJBQ0tVUCUKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTEgMzIzIDM2Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PUJhY2t1cCBSZXBsYWNlZCBGaWxlcwotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlcyBjb21wb3NhbnRzCi0gICAgICBUZXh0IEdlcm1hbj1Lb21wb25lbnRlbiBhdXN35GhsZW4KLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGNvbXBvbmVudGVzCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgaSBjb21wb25lbnRpCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ET0JBQ0tVUAotICAgICAgVmFsdWU9QgotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0szCi0gICAgICBPcGVyYXRpb249MQotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0s0Ci0gICAgICBPcGVyYXRpb249MQotICAgIGVuZAotICAgIGl0ZW06IEVsc2UgU3RhdGVtZW50Ci0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzMKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLNAotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICBlbmQKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgIFRpdGxlIEZyZW5jaD1DaG9pc2lzc2V6IGxlIHLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24KLSAgICBUaXRsZSBHZXJtYW49WmllbHZlcnplaWNobmlzIHfkaGxlbgotICAgIFRpdGxlIFBvcnR1Z3Vlc2U9U2VsZWNjaW9uYXIgRGlyZWN083JpbyBkZSBEZXN0aW5vCi0gICAgVGl0bGUgU3BhbmlzaD1TZWxlY2Npb25lIGVsIERpcmVjdG9yaW8gZGUgRGVzdGlubwotICAgIFRpdGxlIEl0YWxpYW49U2VsZXppb25hIERpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUKLSAgICBUaXRsZSBEYW5pc2g9VuZsZyBEZXN0aW5hdGlvbnNiaWJsaW90ZWsKLSAgICBUaXRsZSBEdXRjaD1LaWVzIERvZWxkaXJlY3RvcnkKLSAgICBUaXRsZSBOb3J3ZWdpYW49VmVsZyBt5WxrYXRhbG9nCi0gICAgVGl0bGUgU3dlZGlzaD1W5GxqIGRlc3RpbmF0aW9uc2thbGF0b2cKLSAgICBXaWR0aD0yNzYKLSAgICBIZWlnaHQ9MjE2Ci0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IExpc3Rib3gKLSAgICAgIFJlY3RhbmdsZT02IDMgMjAwIDE4NgotICAgICAgVmFyaWFibGU9QkFDS1VQCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMTAwMDAwMDAxMDEwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAxMTAwMDAxMDAwMTAKLSAgICAgIFRleHQ9JUJBQ0tVUCUKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD0lQkFDS1VQJQotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEdlcm1hbj0lQkFDS1VQJQotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JUJBQ0tVUCUKLSAgICAgIFRleHQgUG9ydHVndWVzZT0KLSAgICAgIFRleHQgU3BhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBJdGFsaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IERhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBEYW5pc2g9Ci0gICAgICBUZXh0IER1dGNoPSVCQUNLVVAlCi0gICAgICBUZXh0IER1dGNoPQotICAgICAgVGV4dCBOb3J3ZWdpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgTm9yd2VnaWFuPQotICAgICAgVGV4dCBTd2VkaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IFN3ZWRpc2g9Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgOCAyNjUgMjYKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1PSwotICAgICAgVGV4dCBGcmVuY2g9T0sKLSAgICAgIFRleHQgR2VybWFuPU9LCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9T0sKLSAgICAgIFRleHQgU3BhbmlzaD1BQ0VQVEFSCi0gICAgICBUZXh0IEl0YWxpYW49T0sKLSAgICAgIFRleHQgRGFuaXNoPU9LCi0gICAgICBUZXh0IER1dGNoPU9LCi0gICAgICBUZXh0IE5vcndlZ2lhbj1PSwotICAgICAgVGV4dCBTd2VkaXNoPU9LCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgMzEgMjY1IDUwCi0gICAgICBWYXJpYWJsZT1CQUNLVVAKLSAgICAgIFZhbHVlPSVCQUNLVVBfU0FWRSUKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1DYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPUFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPUFiYnJlY2hlbgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPUNhbmNlbGFyCi0gICAgICBUZXh0IFNwYW5pc2g9Q2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj1Bbm51bGxhCi0gICAgICBUZXh0IERhbmlzaD1TbGV0Ci0gICAgICBUZXh0IER1dGNoPUFubnVsZXJlbgotICAgICAgVGV4dCBOb3J3ZWdpYW49QXZicnl0Ci0gICAgICBUZXh0IFN3ZWRpc2g9QXZicnl0Ci0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVNlbGVjdCBDb21wb25lbnRzCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCAmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08ICZadXL8Y2sKLSAgICAgIFRleHQgU3BhbmlzaD08ICZBdHLhcwotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IENoZWNrYm94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDY2IDMxMyAxNTYKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAxMQotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDExMAotICAgICAgVGV4dD1QeXRob24gaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcwotICAgICAgVGV4dD1UY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKQotICAgICAgVGV4dD1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0PVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQ9UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQ1IDMyMCA2MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNob29zZSB3aGljaCBjb21wb25lbnRzIHRvIGluc3RhbGwgYnkgY2hlY2tpbmcgdGhlIGJveGVzIGJlbG93LgotICAgICAgVGV4dCBGcmVuY2g9Q2hvaXNpc3NleiBsZXMgY29tcG9zYW50cyBxdWUgdm91cyB2b3VsZXogaW5zdGFsbGVyIGVuIGNvY2hhbnQgbGVzIGNhc2VzIGNpLWRlc3NvdXMuCi0gICAgICBUZXh0IEdlcm1hbj1X5GhsZW4gU2llIGRpZSB6dSBpbnN0YWxsaWVyZW5kZW4gS29tcG9uZW50ZW4sIGluZGVtIFNpZSBpbiBkaWUgZW50c3ByZWNoZW5kZW4gS+RzdGNoZW4ga2xpY2tlbi4KLSAgICAgIFRleHQgU3BhbmlzaD1FbGlqYSBsb3MgY29tcG9uZW50ZXMgcXVlIGRlc2VlIGluc3RhbGFyIG1hcmNhbmRvIGxvcyBjdWFkcm9zIGRlIGFiYWpvLgotICAgICAgVGV4dCBJdGFsaWFuPVNjZWdsaWVyZSBxdWFsaSBjb21wb25lbnRpIGluc3RhbGxhcmUgc2VsZXppb25hbmRvIGxlIGNhc2VsbGUgc290dG9zdGFudGkuCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjAzIDI2OSAyMjAKLSAgICAgIERlc3RpbmF0aW9uIERpYWxvZz0xCi0gICAgICBBY3Rpb249MgotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUFkdmFuY2VkIE9wdGlvbnMgLi4uCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDQzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVNlbGVjdCBDb21wb25lbnRzCi0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGVzIGNvbXBvc2FudHMKLSAgICAgIFRleHQgR2VybWFuPUtvbXBvbmVudGVuIGF1c3fkaGxlbgotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgY29tcG9uZW50ZXMKLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBpIGNvbXBvbmVudGkKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0yNTEgMTgwIDMxMSAxOTMKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIFZhbHVlPU1BSU5ESVIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTI1MSAxNjggMzExIDE3OQotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTIzIDE2OCAyMzQgMTgxCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9RGlzayBTcGFjZSBSZXF1aXJlZDoKLSAgICAgIFRleHQgRnJlbmNoPUVzcGFjZSBkaXNxdWUgcmVxdWlzIDoKLSAgICAgIFRleHQgR2VybWFuPU5vdHdlbmRpZ2VyIFNwZWljaGVycGxhdHo6Ci0gICAgICBUZXh0IFNwYW5pc2g9RXNwYWNpbyByZXF1ZXJpZG8gZW4gZWwgZGlzY286Ci0gICAgICBUZXh0IEl0YWxpYW49U3BhemlvIHN1IGRpc2NvIG5lY2Vzc2FyaW86Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTIzIDE4MCAyMzQgMTkzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9RGlzayBTcGFjZSBSZW1haW5pbmc6Ci0gICAgICBUZXh0IEZyZW5jaD1Fc3BhY2UgZGlzcXVlIGRpc3BvbmlibGUgOgotICAgICAgVGV4dCBHZXJtYW49VmVyYmxlaWJlbmRlciBTcGVpY2hlcnBsYXR6OgotICAgICAgVGV4dCBTcGFuaXNoPUVzcGFjaW8gZW4gZGlzY28gZGlzcG9uaWJsZToKLSAgICAgIFRleHQgSXRhbGlhbj1TcGF6aW8gc3UgZGlzY28gZGlzcG9uaWJpbGU6Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDE1OCAzMjAgMTk2Ci0gICAgICBBY3Rpb249MQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ETEdfRVZFTlRfVFlQRQotICAgICAgVmFsdWU9VkVSSUZZCi0gICAgZW5kCi0gICAgaXRlbTogUmVtYXJrCi0gICAgICBUZXh0PUlmIHRoZXkncmUgaW5zdGFsbGluZyBUY2wvVGssIFRvb2xzLCBvciB0aGUgdGVzdCBzdWl0ZSwgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdW5sZXNzIHRoZXkncmUgaW5zdGFsbGluZyBQeXRob24gdG9vLgotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgVmFsdWU9QkRFCi0gICAgICBGbGFncz0wMDAwMTAxMAotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgVmFsdWU9QQotICAgICAgRmxhZ3M9MDAwMDAwMTEKLSAgICBlbmQKLSAgICBpdGVtOiBEaXNwbGF5IE1lc3NhZ2UKLSAgICAgIFRpdGxlPUFyZSB5b3Ugc3VyZT8KLSAgICAgIFRleHQ9SW5zdGFsbGluZyBUY2wvVGssIFRvb2xzIG9yIHRoZSB0ZXN0IHN1aXRlIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHVubGVzcyB5b3UgaW5zdGFsbCB0aGUgUHl0aG9uIGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMgdG9vLgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9Q2xpY2sgWWVzIGlmIHRoYXQncyByZWFsbHkgd2hhdCB5b3Ugd2FudC4KLSAgICAgIEZsYWdzPTAwMTAxMTAxCi0gICAgZW5kCi0gICAgaXRlbTogUmVtYXJrCi0gICAgICBUZXh0PU5vdGhpbmcgLS0ganVzdCBwcm9jZWVkIHRvIHRoZSBuZXh0IGRpYWxvZy4KLSAgICBlbmQKLSAgICBpdGVtOiBFbHNlIFN0YXRlbWVudAotICAgIGVuZAotICAgIGl0ZW06IFJlbWFyawotICAgICAgVGV4dD1SZXR1cm4gdG8gdGhlIGRpYWxvZy4KLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgVmFyaWFibGUKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gIGVuZAotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT1BZHZhbmNlZCBPcHRpb25zCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTIxMwotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBSYWRpbyBCdXR0b24KLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjIKLSAgICAgIFJlY3RhbmdsZT0xMSA0NiA5MCA3NgotICAgICAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMDEKLSAgICAgIFRleHQ9QWRtaW4gaW5zdGFsbAotICAgICAgVGV4dD1Ob24tQWRtaW4gaW5zdGFsbGwKLSAgICAgIFRleHQ9Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMTcwIDI0NCAxODkKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9NSAzIDMyNiA4MwotICAgICAgQWN0aW9uPTEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMQotICAgICAgUmVjdGFuZ2xlPTExIDExIDMyMSA0NQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUJ5IGRlZmF1bHQsIHRoZSBpbnN0YWxsIHJlY29yZHMgc2V0dGluZ3MgaW4gdGhlIHBlci1tYWNoaW5lIGFyZWEgb2YgdGhlIHJlZ2lzdHJ5IChIS0xNKSwgYW5kIGluc3RhbGxzIHRoZSBQeXRob24gYW5kIEMgcnVudGltZSBETExzIHRvICVTWVMzMiUuICBDaG9vc2UgIk5vbi1BZG1pbiBpbnN0YWxsIiBpZiB5b3Ugd291bGQgcHJlZmVyIHNldHRpbmdzIG1hZGUgaW4gdGhlIHBlci11c2VyIHJlZ2lzdHJ5IChIS0NVKSwgYW5kIERMTHMgaW5zdGFsbGVkIGluICVNQUlORElSJS4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT01IDkwIDMyNiAxNTcKLSAgICAgIEFjdGlvbj0xCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBDaGVja2JveAotICAgICAgUmVjdGFuZ2xlPTExIDEyMSAyNDMgMTUxCi0gICAgICBWYXJpYWJsZT1UQVNLUwotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDExCi0gICAgICBUZXh0PVJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucyAoLnB5LCAucHl3LCAucHljLCAucHlvKQotICAgICAgVGV4dD1DcmVhdGUgU3RhcnQgTWVudSBzaG9ydGN1dHMKLSAgICAgIFRleHQ9Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTEgMTAzIDMyMCAxMjEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DaG9vc2UgdGFza3MgdG8gcGVyZm9ybSBieSBjaGVja2luZyB0aGUgYm94ZXMgYmVsb3cuCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ETEdfRVZFTlRfVFlQRQotICAgICAgVmFsdWU9SU5JVAotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RE9BRE1JTgotICAgICAgVmFsdWU9MQotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgIGVuZAotICAgIGl0ZW06IEVsc2UgU3RhdGVtZW50Ci0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgVGV4dAotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMQotICAgICAgQ29udHJvbCBUZXh0PVRoaXMgc2VjdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiBsb2dnZWQgaW4gdG8gYW4gYWNjb3VudCB3aXRoIEFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcy4KLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjIKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVNlbGVjdCBQcm9ncmFtIE1hbmFnZXIgR3JvdXAKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08ICZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwgJlp1cvxjawotICAgICAgVGV4dCBTcGFuaXNoPTwgJkF0cuFzCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDUzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVNlbGVjdCBTdGFydCBNZW51IEdyb3VwCi0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGUgZ3JvdXBlIGR1IEdlc3Rpb25uYWlyZSBkZSBwcm9ncmFtbWUKLSAgICAgIFRleHQgR2VybWFuPUJlc3RpbW11bmcgZGVyIFByb2dyYW1tLU1hbmFnZXJncnVwcGUKLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGdydXBvIGRlbCBBZG1pbmlzdHJhZG9yIGRlIHByb2dyYW1hcwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIGlsIGdydXBwbyBQcm9nTWFuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDM1IDMyMCA2NQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUVudGVyIHRoZSBuYW1lIG9mIHRoZSBTdGFydCBNZW51IHByb2dyYW0gZ3JvdXAgdG8gd2hpY2ggdG8gYWRkIHRoZSAlQVBQVElUTEUlIGljb25zOgotICAgICAgVGV4dCBGcmVuY2g9RW50cmV6IGxlIG5vbSBkdSBncm91cGUgZHUgR2VzdGlvbm5haXJlIGRlIHByb2dyYW1tZSBkYW5zIGxlcXVlbCB2b3VzIHNvdWhhaXRleiBham91dGVyIGxlcyBpY/RuZXMgZGUgJUFQUFRJVExFJSA6Ci0gICAgICBUZXh0IEdlcm1hbj1HZWJlbiBTaWUgZGVuIE5hbWVuIGRlciBQcm9ncmFtbWdydXBwZSBlaW4sIGRlciBkYXMgU3ltYm9sICVBUFBUSVRMRSUgaGluenVnZWb8Z3Qgd2VyZGVuIHNvbGw6Ci0gICAgICBUZXh0IFNwYW5pc2g9RXNjcmliYSBlbCBub21icmUgZGVsIGdydXBvIGRlbCBBZG1pbmlzdHJhZG9yIGRlIHByb2dyYW1hcyBlbiBlbCBxdWUgZGVzZWEgYWdyZWdhciBsb3MgaWNvbm9zIGRlICVBUFBUSVRMRSU6Ci0gICAgICBUZXh0IEl0YWxpYW49SW5zZXJpcmUgaWwgbm9tZSBkZWwgZ3J1cHBvIFByb2dyYW0gTWFuYWdlciBwZXIgYWdnaXVuZ2VyZSBsZSBpY29uZSAlQVBQVElUTEUlIGE6Ci0gICAgZW5kCi0gICAgaXRlbTogQ29tYm9ib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNTYgMzIwIDIxOQotICAgICAgVmFyaWFibGU9R1JPVVAKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMTAwMDAxMDAwMDAwMTEwMDAwMDAwMQotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0lR1JPVVAlCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9JUdST1VQJQotICAgICAgVGV4dCBHZXJtYW49JUdST1VQJQotICAgICAgVGV4dCBTcGFuaXNoPSVHUk9VUCUKLSAgICAgIFRleHQgSXRhbGlhbj0lR1JPVVAlCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVN0YXJ0IEluc3RhbGxhdGlvbgotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwgJlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCAmWnVy/GNrCi0gICAgICBUZXh0IFNwYW5pc2g9PCAmQXRy4XMKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9UmVhZHkgdG8gSW5zdGFsbCEKLSAgICAgIFRleHQgRnJlbmNoPVBy6nQg4CBpbnN0YWxsZXIgIQotICAgICAgVGV4dCBHZXJtYW49SW5zdGFsbGF0aW9uc2JlcmVpdCEKLSAgICAgIFRleHQgU3BhbmlzaD2hUHJlcGFyYWRvIHBhcmEgbGEgaW5zdGFsYWNp824hCi0gICAgICBUZXh0IEl0YWxpYW49UHJvbnRvIHBlciBsJ2luc3RhbGxhemlvbmUhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQwIDMyMCA2MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNsaWNrIHRoZSBOZXh0IGJ1dHRvbiB0byBpbnN0YWxsICVBUFBUSVRMRSUsIG9yIHRoZSBCYWNrIGJ1dHRvbiB0byBjaGFuZ2UgY2hvaWNlczoKLSAgICAgIFRleHQgRnJlbmNoPVZvdXMg6nRlcyBtYWludGVuYW50IHBy6nQg4CBpbnN0YWxsZXIgbGVzIGZpY2hpZXJzICVBUFBUSVRMRSUuCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgRnJlbmNoPUNsaXF1ZXogc3VyIGxlIGJvdXRvbiBTdWl0ZSBwb3VyIGNvbW1lbmNlciBsJ2luc3RhbGxhdGlvbiBvdSBzdXIgbGUgYm91dG9uIFJldG91ciBwb3VyIGVudHJlciBsZXMgaW5mb3JtYXRpb25zIGQnaW5zdGFsbGF0aW9uIOAgbm91dmVhdS4KLSAgICAgIFRleHQgR2VybWFuPVNpZSBr9m5uZW4gJUFQUFRJVExFJSBudW4gaW5zdGFsbGllcmVuLgotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IEdlcm1hbj1LbGlja2VuIFNpZSBhdWYgIldlaXRlciIsIHVtIG1pdCBkZXIgSW5zdGFsbGF0aW9uIHp1IGJlZ2lubmVuLiBLbGlja2VuIFNpZSBhdWYgIlp1cvxjayIsIHVtIGRpZSBJbnN0YWxsYXRpb25zaW5mb3JtYXRpb25lbiBuZXUgZWluenVnZWJlbi4KLSAgICAgIFRleHQgU3BhbmlzaD1ZYSBlc3ThIGxpc3RvIHBhcmEgaW5zdGFsYXIgJUFQUFRJVExFJS4KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgU3BhbmlzaD1QcmVzaW9uZSBlbCBib3TzbiBTaWd1aWVudGUgcGFyYSBjb21lbnphciBsYSBpbnN0YWxhY2nzbiBvIHByZXNpb25lIEF0cuFzIHBhcmEgdm9sdmVyIGEgaW5ncmVzYXIgbGEgaW5mb3JtYWNp824gcGFyYSBsYSBpbnN0YWxhY2nzbi4KLSAgICAgIFRleHQgSXRhbGlhbj1PcmEg6CBwb3NzaWJpbGUgaW5zdGFsbGFyZSAlQVBQVElUTEUlLgotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBJdGFsaWFuPVByZW1lcmUgaWwgcHVsc2FudGUgQXZhbnRpIHBlciBhdnZpYXJlIGwnaW5zdGFsbGF6aW9uZSBvIGlsIHB1bHNhbnRlIEluZGlldHJvIHBlciByZWluc2VyaXJlIGxlIGluZm9ybWF6aW9uaSBkaSBpbnN0YWxsYXppb25lLgotICAgIGVuZAotICAgIGl0ZW06IEVkaXRib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNjYgMzI0IDIxOQotICAgICAgSGVscCBDb250ZXh0PTE2NzExNjgxCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMDAwMDExMDAwMTEwMDAxMDAKLSAgICAgIFRleHQ9JVNVTU1BUlklCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURJU1BMQVkKLSAgVmFsdWU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Vc2VyIG1heSBoYXZlIGNoYW5nZWQgTUFJTkRJUiwgc28gcmVzZXQgQkFDS1VQIHRvIG1hdGNoLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QkFDS1VQCi0gIFZhbHVlPSVNQUlORElSJVxCQUNLVVAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJFR0lOIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaGVuIHRoZSBCQUNLVVAgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgQkFDS1VQRElSIGlzIGluaXRpYWxpemVkCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JBQ0tVUAotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVBESVIKLSAgVmFsdWU9JUJBQ0tVUCUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSBCUkFORElORyBpbmZvcm1hdGlvbiBpcyB3cml0dGVuIHRvIHRoZSBJTkkgZmlsZSBvbiB0aGUgaW5zdGFsbGF0aW9uIG1lZGlhLgotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9QlJBTkRJTkcKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CUkFORAotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgSU5JIEZpbGUKLSAgUGF0aG5hbWU9JUlOU1QlXENVU1REQVRBLklOSQotICBTZXR0aW5ncz1bUmVnaXN0cmF0aW9uXQotICBTZXR0aW5ncz1OQU1FPSVOQU1FJQotICBTZXR0aW5ncz1DT01QQU5ZPSVDT01QQU5ZJQotICBTZXR0aW5ncz0KLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CZWdpbiB3cml0aW5nIHRvIHRoZSBJTlNUQUxMLkxPRwotZW5kCi1pdGVtOiBPcGVuL0Nsb3NlIElOU1RBTEwuTE9HCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUNoZWNrIGZyZWUgZGlzayBzcGFjZSBjYWxjdWxhdGVzIGZyZWUgZGlzayBzcGFjZSBhcyB3ZWxsIGFzIGNvbXBvbmVudCBzaXplcy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SXQgc2hvdWxkIGJlIGxvY2F0ZWQgYmVmb3JlIGFsbCBJbnN0YWxsIEZpbGUgYWN0aW9ucy4KLWVuZAotaXRlbTogQ2hlY2sgRGlzayBTcGFjZQotICBDb21wb25lbnQ9Q09NUE9ORU5UUwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIGluY2x1ZGUgc2NyaXB0IGFsbG93cyB1bmluc3RhbGwgc3VwcG9ydAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgdGhpcyBpcyBvdXIgb3duIFVuaW5zdGFsLndzZSwgYSBjb3B5IG9mIFdpc2UncyBleGNlcHQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9aXQgd3JpdGVzIHRvIEhLQ1UgKGluc3RlYWQgb2YgSEtMTSkgaWYgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGFkbWluIHByaXZzLgotZW5kCi1pdGVtOiBJbmNsdWRlIFNjcmlwdAotICBQYXRobmFtZT0uXFVuaW5zdGFsLndzZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiB0aGVzZSBzZWVtaW5nIG5vLW9wcyBhY3R1YWxseSBjb252ZXJ0IHRvIHNob3J0IGZpbGVuYW1lcy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUNPTU1PTgotICBWYWx1ZT0lQ09NTU9OJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9TUFJTkRJUgotICBWYWx1ZT0lTUFJTkRJUiUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBJRi9USEVOL0VMU0UgcmVhZHMgdGhlIGNvcnJlY3QgcmVnaXN0cnkgZW50cmllcyBmb3Igc2hvcnRjdXQvaWNvbiBwbGFjZW1lbnQKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDExMTAxMQotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPVNUQVJUVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxTdGFydCBNZW51XFByb2dyYW1zXFN0YXJ0VXAKLSAgVmFsdWUgTmFtZT1TdGFydFVwCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9REVTS1RPUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXERlc2t0b3AKLSAgVmFsdWUgTmFtZT1EZXNrdG9wCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9U1RBUlRNRU5VRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcU3RhcnQgTWVudQotICBWYWx1ZSBOYW1lPVN0YXJ0IE1lbnUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1HUk9VUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXFN0YXJ0IE1lbnVcUHJvZ3JhbXMKLSAgVmFsdWUgTmFtZT1Qcm9ncmFtcwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNTVEFSVFVQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVNUQVJUVVBESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIFN0YXJ0dXAKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DREVTS1RPUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVERVNLVE9QRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBEZXNrdG9wCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q1NUQVJUTUVOVURJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVTVEFSVE1FTlVESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIFN0YXJ0IE1lbnUKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DR1JPVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lR1JPVVBESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIFByb2dyYW1zCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICB0aGUgV2l6YXJkIGxlZnQgdGhpcyBibG9jayBlbXB0eSEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UGVyaGFwcyBpdCdzIG9ubHkgcmVsZXZhbnQgb24gV2luZG93cyAzLjEuCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FTkQgV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUIKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIHVzZXIgY2hvc2UgYSBub24tYWRtaW4gaW5zdGFsbCBpbiAiQWR2YW5jZWQgT3B0aW9ucyIuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIGluY2x1ZGUgb2YgVW5pbnN0YWwud3NlIGFib3ZlLCBiZWNhdXNlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PXdyaXRpbmcgdW5pbnN0YWxsIGluZm8gdG8gSEtDVSBpcyBpbmVmZmVjdGl2ZSBleGNlcHQgdW5kZXIgV2luMksuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q0dST1VQX1NBVkUKLSAgVmFsdWU9JUdST1VQJQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1HUk9VUAotICBWYWx1ZT0lQ0dST1VQRElSJVwlR1JPVVAlCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1HUk9VUAotICBWYWx1ZT0lR1JPVVBESVIlXCVHUk9VUCUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TG9uZyBzZWN0aW9uIHRvIGluc3RhbGwgZmlsZXMuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ETExERVNUCi0gIFZhbHVlPSVTWVMzMiUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURMTERFU1QKLSAgVmFsdWU9JU1BSU5ESVIlCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SW5zdGFsbCB0aGUgbGljZW5zZSBldmVuIGlmIHRoZXkgZGVzZWxlY3QgZXZlcnl0aGluZyA8d2luaz4uCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGljZW5zZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTElDRU5TRS50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcUkVBRE1FLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbWlzY1xuZXdzCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxORVdTLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUljb25zIC0tIGFsd2F5cyBpbnN0YWxsIHNvIHRoYXQgdGhlIHVuaW5zdGFsbGVyIGNhbiB1c2UgdGhlbSBmb3IgaXRzIG93biBkaXNwbGF5LgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5Y29uLmljbwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHljb24uaWNvCi0gIEZsYWdzPTAwMDAwMDAwMTAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweWMuaWNvCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweWMuaWNvCi0gIEZsYWdzPTAwMDAwMDAwMTAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweS5pY28KLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5LmljbwotICBGbGFncz0wMDAwMDAwMDEwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGVzZSBhcnJhbmdlIHRvIChyZWN1cnNpdmVseSEpIGRlbGV0ZSBhbGwgLnB5YyBhbmQgLnB5byBmaWxlcyBhdCB1bmluc3RhbGwgdGltZS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyAiZG9lcyB0aGUgcmlnaHQgdGhpbmciOiAgYW55IGRpcmVjdG9yaWVzIGxlZnQgZW1wdHkgYXQgdGhlIGVuZCBhcmUgcmVtb3ZlZC4KLWVuZAotaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1GaWxlIFRyZWU6ICVNQUlORElSJVwqLnB5YwotZW5kCi1pdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PUZpbGUgVHJlZTogJU1BSU5ESVIlXCoucHlvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BOiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RXhlY3V0YWJsZXMKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbi5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5dGhvbi5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9udy5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5dGhvbncuZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHc5eHBvcGVuLmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcdzl4cG9wZW4uZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUV4dGVuc2lvbiBtb2R1bGUgRExMcyAoLnB5ZCk7IGtlZXAgaW4gc3luY2ggd2l0aCBsaWJzIGRpcmVjdG9yeSBuZXh0Ci1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5yZWcucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHdpbnJlZy5weWQKLSAgRGVzY3JpcHRpb249RXh0ZW5zaW9uIG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX2Nzdi5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX2Nzdi5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NyZS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3NyZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NzbC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3NzbC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3N5bXRhYmxlLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3ltdGFibGUucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90ZXN0Y2FwaS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3Rlc3RjYXBpLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGtpbnRlci5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3RraW50ZXIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zb2NrZXQucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zb2NrZXQucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGJ6Mi5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcYnoyLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxkYXRldGltZS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcZGF0ZXRpbWUucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXG1tYXAucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXG1tYXAucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHBhcnNlci5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNccGFyc2VyLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweWV4cGF0LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xweWV4cGF0LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxzZWxlY3QucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHNlbGVjdC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdW5pY29kZWRhdGEucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHVuaWNvZGVkYXRhLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5zb3VuZC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcd2luc291bmQucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHpsaWIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHpsaWIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUxpbmsgbGlicmFyaWVzICgubGliKTsga2VlcCBpbiBzeW5jaCB3aXRoIERMTHMgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZSBQeXRob24gbGliIGxpdmVzIGhlcmUuCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5yZWcubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHdpbnJlZy5saWIKLSAgRGVzY3JpcHRpb249TGluayBsaWJyYXJ5IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9jc3YubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9jc3YubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zcmUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zcmUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zc2wubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zc2wubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zeW10YWJsZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3N5bXRhYmxlLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGVzdGNhcGkubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF90ZXN0Y2FwaS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3RraW50ZXIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF90a2ludGVyLmxpYgotICBEZXNjcmlwdGlvbj1FeHRlbnNpb24gbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc29ja2V0LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc29ja2V0LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxiejIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXGJ6Mi5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cZGF0ZXRpbWUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXGRhdGV0aW1lLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxtbWFwLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xtbWFwLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxwYXJzZXIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHBhcnNlci5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHlleHBhdC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNccHlleHBhdC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cc2VsZWN0LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xzZWxlY3QubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHVuaWNvZGVkYXRhLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x1bmljb2RlZGF0YS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2luc291bmQubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHdpbnNvdW5kLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx6bGliLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x6bGliLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uJV9weW1ham9yXyUlX3B5bWlub3JfJS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNccHl0aG9uJV9QWU1BSk9SXyUlX1BZTUlOT1JfJS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWFpbiBQeXRob24gRExMCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRlbGwgV2lzZSBpdCdzIE9LIHRvIGRlbGV0ZSB0aGUgUHl0aG9uIERMTCBhdCB1bmluc3RhbGwgdGltZSwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ZGVzcGl0ZSB0aGF0IHdlIChtYXkpIHdyaXRlIGl0IGludG8gYSBzeXN0ZW0gZGlyZWN0b3J5LgotZW5kCi1pdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PU5vbi1TeXN0ZW0gRmlsZToKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbiVfcHltYWpvcl8lJV9weW1pbm9yXyUuZGxsCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxweXRob24lX1BZTUFKT1JfJSVfUFlNSU5PUl8lLmRsbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1MaWJyYXJpZXMgKExpYi8pCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYgotICBEZXNjcmlwdGlvbj1MaWJyYXJ5IE1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcY29tcGlsZXJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGNvbXBpbGVyCi0gIERlc2NyaXB0aW9uPVB5dGhvbiBjb21waWxlciB3cml0dGVuIGluIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlscwotICBEZXNjcmlwdGlvbj1EaXN0cmlidXRpb24gdXRpbGl0eSBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xSRUFETUUudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXGNvbW1hbmRfdGVtcGxhdGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcY29tbWFuZFxjb21tYW5kX3RlbXBsYXRlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbAotICBEZXNjcmlwdGlvbj1MaWJyYXJ5IGVtYWlsIHBhY2thZ2UKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0Ci0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3RzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFxkYXRhXCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcZGF0YVwqLmdpZgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3RcZGF0YQotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0IGRhdGEKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XGRhdGFcKi5hdQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3RcZGF0YQotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0IGRhdGEKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW5jb2RpbmdzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbmNvZGluZ3MKLSAgRGVzY3JpcHRpb249VW5pY29kZSBlbmNvZGluZyB0YWJsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcaG90c2hvdFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaG90c2hvdAotICBEZXNjcmlwdGlvbj1GYXN0IFB5dGhvbiBwcm9maWxlcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxsaWItb2xkXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxsaWItb2xkCi0gIERlc2NyaXB0aW9uPU9ic29sZXRlIG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGtpbnRlclwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGtpbnRlcgotICBEZXNjcmlwdGlvbj1Ua2ludGVyIHJlbGF0ZWQgbGlicmFyeSBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGxvZ2dpbmdcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGxvZ2dpbmcKLSAgRGVzY3JpcHRpb249TG9nZ2luZyBwYWNrYWdlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHNpdGUtcGFja2FnZXNccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcc2l0ZS1wYWNrYWdlc1xSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVNpdGUgcGFja2FnZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWwKLSAgRGVzY3JpcHRpb249WE1MIHN1cHBvcnQgcGFja2FnZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcZG9tXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWxcZG9tCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXHBhcnNlcnNcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbFxwYXJzZXJzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXHNheFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sXHNheAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DIEluY2x1ZGUgZmlsZXMKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxpbmNsdWRlXCouaAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcaW5jbHVkZQotICBEZXNjcmlwdGlvbj1IZWFkZXIgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5Y29uZmlnLmgKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGluY2x1ZGVccHljb25maWcuaAotICBEZXNjcmlwdGlvbj1IZWFkZXIgZmlsZXMgKHB5Y29uZmlnLmgpCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1pY3Jvc29mdCBDIHJ1bnRpbWUgbGlicmFyaWVzCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9TWVNfJVxNU1ZDSVJULkRMTAotICBEZXN0aW5hdGlvbj0lRExMREVTVCVcTVNWQ0lSVC5ETEwKLSAgRGVzY3JpcHRpb249VmlzdWFsIEMrKyBSdW50aW1lIERMTHMKLSAgRmxhZ3M9MDAwMDAxMTAwMDAxMDAxMQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfU1lTXyVcTVNWQ1JULkRMTAotICBEZXN0aW5hdGlvbj0lRExMREVTVCVcTVNWQ1JULkRMTAotICBEZXNjcmlwdGlvbj1WaXN1YWwgQysrIFJ1bnRpbWUgRExMcwotICBGbGFncz0wMDAwMDExMDAwMDEwMDExCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogVGNsL1RrIChUa2ludGVyLCBJRExFLCBweWRvYykKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UY2wvVGsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlwuLlwlX3RjbGRpcl8lXGJpblwqLmRsbAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMcwotICBEZXNjcmlwdGlvbj1UY2wvVGsgYmluYXJpZXMgYW5kIGxpYnJhcmllcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cLi5cJV90Y2xkaXJfJVxsaWJcKi4qCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVx0Y2wKLSAgRGVzY3JpcHRpb249VGNsL1RrIGJpbmFyaWVzIGFuZCBsaWJyYXJpZXMKLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SURMRQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcKi5kZWYKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcSWNvbnNcKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWJcSWNvbnMKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxUb29sc1xzY3JpcHRzXGlkbGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3Ci0gIERlc2NyaXB0aW9uPUlETEUgYm9vdHN0cmFwIHNjcmlwdAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaW5kb3dzIHB5ZG9jIGRyaXZlcgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNcKi5weXcKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHMKLSAgRGVzY3JpcHRpb249V2luZG93cyBweWRvYyBkcml2ZXIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUM6IGRvY3MKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfRE9DXyVcKi4qCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxEb2MKLSAgRGVzY3JpcHRpb249UHl0aG9uIERvY3VtZW50YXRpb24gKEhUTUwpCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1EOiB0b29scwotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1ECi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzCi0gIERlc2NyaXB0aW9uPVV0aWxpdHkgU2NyaXB0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1wqLmRvYwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0cwotICBEZXNjcmlwdGlvbj1VdGlsaXR5IFNjcmlwdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249VXRpbGl0eSBTY3JpcHRzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcd2ViY2hlY2tlclwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x3ZWJjaGVja2VyCi0gIERlc2NyaXB0aW9uPVdlYiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHdlYmNoZWNrZXJccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x3ZWJjaGVja2VyXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249V2ViIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHZlcnNpb25jaGVja1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x2ZXJzaW9uY2hlY2sKLSAgRGVzY3JpcHRpb249VmVyc2lvbiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHZlcnNpb25jaGVja1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHZlcnNpb25jaGVja1xSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVZlcnNpb24gY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZQotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZQotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVceFwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXFgKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIFggZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVxyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBSRUFETUUKLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVxweW5jaGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxweW5jaGUucHkKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIG1haW4KLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVxweW5jaGUucHl3Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVccHluY2hlLnB5dwotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gbm9jb25zb2xlIG1haW4KLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xpMThuXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXGkxOG4KLSAgRGVzY3JpcHRpb249SW50ZXJuYXRpb25hbGl6YXRpb24gaGVscGVycwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RTogdGVzdCBzdWl0ZQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1FCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcYXVkaW90ZXN0LmF1Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdFxhdWRpb3Rlc3QuYXUKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoudXVlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoueG1sCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5vdXQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLmJ6MgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoudGFyCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5negotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XG91dHB1dFwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0XG91dHB1dAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBvdXRwdXQgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PURPTkUgd2l0aCBmaWxlIGNvcHlpbmcuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSByZXN0IGlzIHJlZ2lzdHJ5IGFuZCBTdGFydCBNZW51IGZpZGRsaW5nLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1SZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMuICBBcyB1c3VhbCwgQWRtaW4gcHJpdnMgZ2V0IGluIHRoZSB3YXksIGJ1dCB3aXRoIGEgdHdpc3Q6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVlvdSBkb24ndCBuZWVkIGFkbWluIHByaXZzIHRvIHdyaXRlIHRvIEhLRVlfQ0xBU1NFU19ST09UICpleGNlcHQqIHVuZGVyIFdpbjJLLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1PbiBXaW4ySywgYSB1c2VyIHdpdGhvdXQgQWRtaW4gcHJpdnMgaGFzIHRvIHJlZ2lzdGVyIGV4dGVuc2lvbnMgdW5kZXIgSEtDVVxTb2Z0d2FyZVxDTEFTU0VTIGluc3RlYWQuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJ1dCB3aGlsZSB5b3UgY2FuICpkbyogdGhhdCB1bmRlciBvdGhlciBmbGF2b3JzIG9mIFdpbmRvd3MgdG9vLCBpdCBoYXMgbm8gdXNlZnVsIGVmZmVjdCBleGNlcHQgaW4gV2luMksuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTExMTAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgdHlwZXMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlIChubyBjb25zb2xlKQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAiJSUxIiAlJSoKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlCi0gIE5ldyBWYWx1ZT1Db21waWxlZCBQeXRob24gRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkNvbXBpbGVkRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkNvbXBpbGVkRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5Yy5pY28KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgZXh0ZW5zaW9ucy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weQotICBOZXcgVmFsdWU9UHl0aG9uLkZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weQotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weXcKLSAgTmV3IFZhbHVlPVB5dGhvbi5Ob0NvbkZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weXcKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHljCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHlvCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgdHlwZXMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICIlJTEiICUlKgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGUKLSAgTmV3IFZhbHVlPUNvbXBpbGVkIFB5dGhvbiBGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uQ29tcGlsZWRGaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uQ29tcGlsZWRGaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHljLmljbwotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgZXh0ZW5zaW9ucy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5Ci0gIE5ldyBWYWx1ZT1QeXRob24uRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5dwotICBOZXcgVmFsdWU9UHl0aG9uLk5vQ29uRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5dwotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weWMKLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weW8KLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWYgd2UncmUgaW5zdGFsbGluZyBJRExFLCBhbHNvIHNldCBhbiBFZGl0IGNvbnRleHQgbWVudSBhY3Rpb24gdG8gdXNlIElETEUsIGZvciAucHkgYW5kIC5weXcgZmlsZXMuCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1SZWdpc3RlciBQeXRob24gcGF0aHMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdyaXRlIHRvIEhLTE0gZm9yIGFkbWluLCBlbHNlIEhLQ1UuICBLZWVwIHRoZXNlIGJsb2NrcyBvdGhlcndpc2UgaWRlbnRpY2FsIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVxDdXJyZW50VmVyc2lvbgotICBSb290PTEzMAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiUKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGhcSW5zdGFsbEdyb3VwCi0gIE5ldyBWYWx1ZT0lQ0dST1VQX1NBVkUlCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcUHl0aG9uUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXExpYjslTUFJTkRJUiVcRExMcwotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXE1vZHVsZXMKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxBcHAgUGF0aHNcUHl0aG9uLmV4ZQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5dGhvbi5leGUKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVxDdXJyZW50VmVyc2lvbgotICBSb290PTEyOQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGhcSW5zdGFsbEdyb3VwCi0gIE5ldyBWYWx1ZT0lQ0dST1VQX1NBVkUlCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcUHl0aG9uUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXExpYjslTUFJTkRJUiVcRExMcwotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXE1vZHVsZXMKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxBcHAgUGF0aHNcUHl0aG9uLmV4ZQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5dGhvbi5leGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdHJ5IGZpZGRsaW5nIGZvciBkb2NzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Xcml0ZSB0byBIS0xNIGZvciBhZG1pbiwgZWxzZSBIS0NVLiAgS2VlcCB0aGVzZSBibG9ja3Mgb3RoZXJ3aXNlIGlkZW50aWNhbCEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSGVscFxNYWluIFB5dGhvbiBEb2N1bWVudGF0aW9uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcRG9jXGluZGV4Lmh0bWwKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSGVscFxNYWluIFB5dGhvbiBEb2N1bWVudGF0aW9uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcRG9jXGluZGV4Lmh0bWwKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNldCB0aGUgYXBwIHB1Ymxpc2hlciBhbmQgVVJMIGVudHJpZXMgZm9yIFdpbjJLIGFkZC9yZW1vdmUuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUl0IGRvZXNuJ3QgaHVydCBvbiBvdGhlciBzeXN0ZW1zLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BcyB1c3VhbCwgd3JpdGUgdG8gSEtMTSBvciBIS0NVIGRlcGVuZGluZyBvbiBBZG1pbiBwcml2cy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q0FVVElPTjogIElmIHlvdSBzZXQgdGhpcyBpbmZvIG9uIHRoZSAiV2luZG93cyAyMDAwIiBwYWdlIChzdGVwIDYpIG9mIHRoZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsYXRpb24gRXhwZXJ0LCBpdCBvbmx5IHNob3dzIHVwIGluIHRoZSAiSWYiIGJsb2NrIGJlbG93LiAgS2VlcCBpbiBzeW5jaCEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1IZWxwTGluawotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1QeXRob25MYWJzIGF0IFpvcGUgQ29ycG9yYXRpb24KLSAgVmFsdWUgTmFtZT1QdWJsaXNoZXIKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPVVSTEluZm9BYm91dAotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lUFlWRVJfU1RSSU5HJQotICBWYWx1ZSBOYW1lPURpc3BsYXlWZXJzaW9uCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweS5pY28sLTAKLSAgVmFsdWUgTmFtZT1EaXNwbGF5SWNvbgotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9SGVscExpbmsKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9UHl0aG9uTGFicyBhdCBab3BlIENvcnBvcmF0aW9uCi0gIFZhbHVlIE5hbWU9UHVibGlzaGVyCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1VUkxJbmZvQWJvdXQKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVBZVkVSX1NUUklORyUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5VmVyc2lvbgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHkuaWNvLC0wCi0gIFZhbHVlIE5hbWU9RGlzcGxheUljb24KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UG9wdWxhdGUgU3RhcnQgTWVudSBncm91cAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1TaG9ydGN1dCB0byBpbnN0YWxsZXIgbm8gbWF0dGVyIHdoYXQuCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHVud2lzZS5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxVbmluc3RhbGwgUHl0aG9uLmxuawotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxweXRob24uZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcUHl0aG9uIChjb21tYW5kIGxpbmUpLmxuawotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgSWNvbiBQYXRobmFtZT0lTUFJTkRJUiVccHljb24uaWNvCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbncuZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcSURMRSAoUHl0aG9uIEdVSSkubG5rCi0gIENvbW1hbmQgT3B0aW9ucz0iJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IgotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxweXRob253LmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXE1vZHVsZSBEb2NzLmxuawotICBDb21tYW5kIE9wdGlvbnM9IiVNQUlORElSJVxUb29sc1xTY3JpcHRzXHB5ZG9jZ3VpLnB5dyIKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXERvY1xpbmRleC5odG1sCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcUHl0aG9uIE1hbnVhbHMubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzLCBidXQgaGF2ZSBhbHdheXMgZG9uZSBpdC4KLWVuZAotaXRlbTogU2VsZi1SZWdpc3RlciBPQ1hzL0RMTHMKLSAgRGVzY3JpcHRpb249VXBkYXRpbmcgU3lzdGVtIENvbmZpZ3VyYXRpb24sIFBsZWFzZSBXYWl0Li4uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1yZW1hcmtlZCBpdGVtOiBSZW1hcmsKLSAgVGV4dD1Eb24ndCBlbmFibGUgIkRlbGV0ZSBpbi11c2UgZmlsZXMiLiAgSGVyZSdzIHdoYXQgaGFwcGVuczoKLWVuZAotcmVtYXJrZWQgaXRlbTogUmVtYXJrCi0gIFRleHQ9SW5zdGFsbCBQeXRob247IHVuaW5zdGFsbCBQeXRob247IGluc3RhbGwgUHl0aG9uIGFnYWluLiAgUmVib290IHRoZSBtYWNoaW5lLgotZW5kCi1yZW1hcmtlZCBpdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3cgVU5XSVNFLkVYRSBpcyBtaXNzaW5nLiAgSSB0aGluayB0aGlzIGlzIGEgV2lzZSBidWcsIGJ1dCBzbyBpdCBnb2VzLgotZW5kCi1yZW1hcmtlZCBpdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PURlbGV0ZSBpbi11c2UgZmlsZXM6IE9uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBXaXphcmQgQmxvY2sKLSAgRGlyZWN0aW9uIFZhcmlhYmxlPURJUkVDVElPTgotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgQml0bWFwIFBhdGhuYW1lPS5caW5zdGFsbGVyLmJtcAotICBYIFBvc2l0aW9uPTkKLSAgWSBQb3NpdGlvbj0xMAotICBGaWxsZXIgQ29sb3I9MTExNzM3NTkKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1GaW5pc2hlZAotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mRmluaXNoCi0gICAgICBUZXh0IEZyZW5jaD0mRmluCi0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyCi0gICAgICBUZXh0IFNwYW5pc2g9JlRlcm1pbmFyCi0gICAgICBUZXh0IEl0YWxpYW49JkZpbmUKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgVmFyaWFibGU9RElTQUJMRUQKLSAgICAgIFZhbHVlPSEKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNDgKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9SW5zdGFsbGF0aW9uIENvbXBsZXRlZCEKLSAgICAgIFRleHQgRnJlbmNoPUluc3RhbGxhdGlvbiB0ZXJtaW7pZSAhCi0gICAgICBUZXh0IEdlcm1hbj1EaWUgSW5zdGFsbGF0aW9uIGlzdCBhYmdlc2NobG9zc2VuIQotICAgICAgVGV4dCBTcGFuaXNoPaFJbnN0YWxhY2nzbiB0ZXJtaW5hZGEhCi0gICAgICBUZXh0IEl0YWxpYW49SW5zdGFsbGF6aW9uZSBjb21wbGV0YXRhIQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0NCAzMjAgODIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0lQVBQVElUTEUlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuCi0gICAgICBUZXh0PQotICAgICAgVGV4dD1QcmVzcyB0aGUgRmluaXNoIGJ1dHRvbiB0byBleGl0IHRoaXMgaW5zdGFsbGF0aW9uLgotICAgICAgVGV4dCBGcmVuY2g9JUFQUFRJVExFJSBlc3QgbWFpbnRlbmFudCBpbnN0YWxs6S4KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBGcmVuY2g9Q2xpcXVleiBzdXIgbGUgYm91dG9uIEZpbiBwb3VyIHF1aXR0ZXIgbCdpbnN0YWxsYXRpb24uCi0gICAgICBUZXh0IEdlcm1hbj0lQVBQVElUTEUlIHd1cmRlIGVyZm9sZ3JlaWNoIGluc3RhbGxpZXJ0LgotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IEdlcm1hbj1LbGlja2VuIFNpZSBhdWYgIldlaXRlciIsIHVtIGRpZSBJbnN0YWxsYXRpb24genUgYmVlbmRlbi4KLSAgICAgIFRleHQgU3BhbmlzaD0lQVBQVElUTEUlIHNlIGhhIGluc3RhbGFkbyBjb24g6XhpdG8uCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IFNwYW5pc2g9UHJlc2lvbmUgZWwgYm90824gVGVybWluYXIgcGFyYSBzYWxpciBkZSBlc3RhIGluc3RhbGFjafNuLgotICAgICAgVGV4dCBJdGFsaWFuPUwnaW5zdGFsbGF6aW9uZSAlQVBQVElUTEUlIOggc3RhdGEgcG9ydGF0YSBhIHRlcm1pbmUgY29uIHN1Y2Nlc3NvLgotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBJdGFsaWFuPVByZW1lcmUgaWwgcHVsc2FudGUgRmluZSBwZXIgdXNjaXJlIGRhbGwnaW5zdGFsbGF6aW9uZS4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwNiAxMDUgMzEyIDIxMAotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PVNwZWNpYWwgV2luZG93cyB0aGFua3MgdG86Ci0gICAgICBUZXh0PQotICAgICAgVGV4dD1XaXNlIFNvbHV0aW9ucywgZm9yIHRoZSB1c2Ugb2YgSW5zdGFsbE1hc3RlciA4LjEuCi0gICAgICBUZXh0PSAgICBodHRwOi8vd3d3Lndpc2Vzb2x1dGlvbnMuY29tLwotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PUxldHRFcnJvciwgRXJpayB2YW4gQmxva2xhbmQsIGZvciB0aGUgUHl0aG9uIGZvciBXaW5kb3dzIGdyYXBoaWMuCi0gICAgICBUZXh0PSAgICBodHRwOi8vd3d3LmxldHRlcnJvci5jb20vCi0gICAgICBUZXh0PQotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9TWFyayBIYW1tb25kLCB3aXRob3V0IHdob3NlIHllYXJzIG9mIGZyZWVseSBzaGFyZWQgV2luZG93cyBleHBlcnRpc2UsIFB5dGhvbiBmb3IgV2luZG93cyB3b3VsZCBzdGlsbCBiZSBQeXRob24gZm9yIERPUy4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDYgOTUgMzEyIDk2Ci0gICAgICBBY3Rpb249MwotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAxCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogTmV3IEV2ZW50Ci0gIE5hbWU9Q2FuY2VsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgaW5jbHVkZSBzY3JpcHQgc3VwcG9ydHMgYSByb2xsYmFjayB0byBwcmVpbnN0YWxsYXRpb24gc3RhdGUgaWYgdGhlIHVzZXIgY2hvb3NlcyB0byBjYW5jZWwgYmVmb3JlIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGUuCi1lbmQKLWl0ZW06IEluY2x1ZGUgU2NyaXB0Ci0gIFBhdGhuYW1lPSVfV0lTRV8lXElOQ0xVREVccm9sbGJhY2sud3NlCi1lbmQKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qIGIvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YzQxODQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw4MjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5dGhvbmNvcmUiDQotCVByb2plY3RHVUlEPSJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTMwfSINCi0JUm9vdE5hbWVzcGFjZT0icHl0aG9uY29yZSINCi0JU2NjUHJvamVjdE5hbWU9InB5dGhvbmNvcmUiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMy5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7VVNFX0RMX0VYUE9SVDtXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzX2QuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzNfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zM19kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMy5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJGQUxTRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxhbWQ2NC10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMy5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iX2lvIg0KLSAgICAgICAgICAgIEZpbHRlcj0iIj4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotDQotCQk8RmlsdGVyDQotCQkJTmFtZT0iemxpYiINCi0JCQlGaWx0ZXI9IiI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY29tcHJlc3MuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMiPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyI+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2lzbzIwMjIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Nzdi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfanNvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sb2NhbGVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcGlja2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3RydWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBjXF9zdWJwcm9jZXNzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXF93YXJuaW5ncy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhY2N1LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxhY2NlbGVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzZGwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF0ZXhpdG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYml0c2V0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZWFycmF5b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjYXBzdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY2V2YWwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb2RlY3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb21waWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xjb25maWcuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZGxfbnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR0b2EuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxlcnJvcnMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZmlsZXV0aWxzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxmaXJzdHNldHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZyb3plbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZ1bmNvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZ1dHVyZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRhcmdzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb21waWxlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRvcHQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZ2V0cGF0aHAuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHBsYXRmb3JtLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxncmFtaW5pdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZ3JhbW1hci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0ZGwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxsaXN0bm9kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsb25nb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWFpbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbWFyc2hhbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotIAkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtb2R1bGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcbXN2Y3J0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXN0cnRvdWwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG5vZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYm1hbGxvYy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNldG9rLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxwZWVwaG9sZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWFyZW5hLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWN0eXBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWZwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHltYXRoLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0YXRlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cmNtcC5jIg0KLQkJCT4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJ0b2QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGltZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fbnQucmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRob25ydW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHJhbmRvbS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHJhbmdlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMjU2bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzdHJ1Y3RtZW1iZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5bXRhYmxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5c21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHRva2VuaXplci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdHJhY2ViYWNrLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQY1x3aW5yZWcuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob253LnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbncudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2Q3ZjUwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbncudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweXRob253Ig0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9udyINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlxwYyI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9ud19kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbndfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob253LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcV2luTWFpbi5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcmVhZG1lLnR4dCBiL1BDL1ZTNy4xL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZDhhNzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyA3LjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgUHl0aG9uIGZvciBXaW4zMiBwbGF0Zm9ybXMsIGUuZy4gV2luZG93cwotOTUsIDk4IGFuZCBOVC4gIEl0IHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgQysrIDcuMQotKGEuay5hLiBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMykuCi0oRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9QQy9yZWFkbWUudHh0LikKLQotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5zbG4iIGluIE1TVkMrKywgc2VsZWN0Ci10aGUgRGVidWcgb3IgUmVsZWFzZSBzZXR0aW5nICh1c2luZyAiU29sdXRpb24gQ29uZmlndXJhdGlvbiIgZnJvbQotdGhlICJTdGFuZGFyZCIgdG9vbGJhciIpLCBhbmQgYnVpbGQgdGhlIHByb2plY3RzLgotCi1UaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgotCi0xKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMzMue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCi0gICAgICAgICAgICAgIE5PVEU6ICBpbiBwcmV2aW91cyByZWxlYXNlcywgdGhpcyBzdWJwcm9qZWN0IHdhcwotICAgICAgICAgICAgICBuYW1lZCBhZnRlciB0aGUgcmVsZWFzZSBudW1iZXIsIGUuZy4gcHl0aG9uMjAuCi0KLTIpIHB5dGhvbiAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIGV4ZWN1dGFibGUsCi0gICAgICAgICAgIHB5dGhvbi5leGUgaW4gUmVsZWFzZSBtb2RlKQotCi0zKSB0aGUgb3RoZXIgc3VicHJvamVjdHMsIGFzIGRlc2lyZWQgb3IgbmVlZGVkIChub3RlOiAgeW91IHByb2JhYmx5IGRvbid0Ci0gICB3YW50IHRvIGJ1aWxkIG1vc3Qgb2YgdGhlIG90aGVyIHN1YnByb2plY3RzLCB1bmxlc3MgeW91J3JlIGJ1aWxkaW5nIGFuCi0gICBlbnRpcmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiBmcm9tIHNjcmF0Y2gsIG9yIHNwZWNpZmljYWxseSBtYWtpbmcgY2hhbmdlcwotICAgdG8gdGhlIHN1YnN5c3RlbXMgdGhleSBpbXBsZW1lbnQsIG9yIGFyZSBydW5uaW5nIGEgUHl0aG9uIGNvcmUgYnVpbGRib3QKLSAgIHRlc3Qgc2xhdmU7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKLQotV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24zM19kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4KLQotU1VCUFJPSkVDVFMKLS0tLS0tLS0tLS0tCi1UaGVzZSBzdWJwcm9qZWN0cyBzaG91bGQgYnVpbGQgb3V0IG9mIHRoZSBib3guICBTdWJwcm9qZWN0cyBvdGhlciB0aGFuIHRoZQotbWFpbiBvbmVzIChweXRob25jb3JlLCBweXRob24sIHB5dGhvbncpIGdlbmVyYWxseSBidWlsZCBhIERMTCAocmVuYW1lZCB0bwotLnB5ZCkgZnJvbSBhIHNwZWNpZmljIG1vZHVsZSBzbyB0aGF0IHVzZXJzIGRvbid0IGhhdmUgdG8gbG9hZCB0aGUgY29kZQotc3VwcG9ydGluZyB0aGF0IG1vZHVsZSB1bmxlc3MgdGhleSBpbXBvcnQgdGhlIG1vZHVsZS4KLQotcHl0aG9uY29yZQotICAgIC5kbGwgYW5kIC5saWIKLXB5dGhvbgotICAgIC5leGUKLXB5dGhvbncKLSAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IHBvcCB1cCBhIERPUyBib3gKLV9zb2NrZXQKLSAgICBzb2NrZXRtb2R1bGUuYwotX3Rlc3RjYXBpCi0gICAgdGVzdHMgb2YgdGhlIFB5dGhvbiBDIEFQSSwgcnVuIHZpYSBMaWIvdGVzdC90ZXN0X2NhcGkucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCi1weWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KLXNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCi11bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKLXdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCi0KLVRoZSBmb2xsb3dpbmcgc3VicHJvamVjdHMgd2lsbCBnZW5lcmFsbHkgTk9UIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgVGhleQotd3JhcCBjb2RlIFB5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCB0aGUgYmFzZQotcGFja2FnZXMgZmlyc3QgYW5kIHVucGFjayB0aGVtIGludG8gc2libGluZ3Mgb2YgUEMncyBwYXJlbnQKLWRpcmVjdG9yeTsgZm9yIGV4YW1wbGUsIGlmIHRoaXMgZGlyZWN0b3J5IGlzIC4uLi5cZGlzdFx0cnVua1xQQ1xWUzcuMSwKLXVucGFjayBpbnRvIG5ldyBzdWJkaXJlY3RvcmllcyBvZiBkaXN0XC4KLQotX3RraW50ZXIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBSZXF1aXJlcyBidWlsZGluZwotICAgIFRjbC9UayBmaXJzdC4gIEZvbGxvd2luZyBhcmUgaW5zdHJ1Y3Rpb25zIGZvciBUY2wvVGsgOC40LjEyLgotCi0gICAgR2V0IHNvdXJjZQotICAgIC0tLS0tLS0tLS0KLSAgICBJbiB0aGUgZGlzdCBkaXJlY3RvcnksIHJ1bgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbDguNC4xMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrOC40LjEyCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGl4LTguNC4wCi0KLSAgICBCdWlsZCBUY2wgZmlyc3QgKGRvbmUgaGVyZSB3LyBNU1ZDIDcuMSBvbiBXaW5kb3dzIFhQKQotICAgIC0tLS0tLS0tLS0tLS0tLQotICAgIFVzZSAiU3RhcnQgLT4gQWxsIFByb2dyYW1zIC0+IE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMwotICAgICAgICAgLT4gVmlzdWFsIFN0dWRpbyAuTkVUIFRvb2xzIC0+IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzIENvbW1hbmQgUHJvbXB0IgotICAgIHRvIGdldCBhIHNoZWxsIHdpbmRvdyB3aXRoIHRoZSBjb3JyZWN0IGVudmlyb25tZW50IHNldHRpbmdzCi0gICAgY2QgZGlzdFx0Y2w4LjQuMTJcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdAotCi0gICAgICAgIE9uIFdpblhQIFBybywgd2hvbGx5IHVwIHRvIGRhdGUgYXMgb2YgMzAtQXVnLTIwMDQ6Ci0gICAgICAgIGFsbC50Y2w6ICAgICAgICBUb3RhbCAgIDEwNjc4ICAgUGFzc2VkICA5OTY5ICAgIFNraXBwZWQgNzA5ICAgICBGYWlsZWQgIDAKLSAgICAgICAgU291cmNlZCAxMjkgVGVzdCBGaWxlcy4KLQotICAgIEJ1aWxkIFRrCi0gICAgLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRrOC40LjEyXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC40LjEyIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgWFhYIE91ciBpbnN0YWxsZXIgY29waWVzIGEgbG90IG9mIHN0dWZmIG91dCBvZiB0aGUgVGNsL1RrIGluc3RhbGwKLSAgICBYWFggZGlyZWN0b3J5LiAgSXMgYWxsIG9mIHRoYXQgcmVhbGx5IG5lZWRlZCBmb3IgUHl0aG9uIHVzZSBvZiBUY2wvVGs/Ci0KLSAgICBPcHRpb25hbDogIHJ1biB0ZXN0cywgdmlhCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgdGVzdAotCi0gICAgICAgIE9uIFdpblhQIFBybywgd2hvbGx5IHVwIHRvIGRhdGUgYXMgb2YgMzAtQXVnLTIwMDQ6Ci0gICAgICAgIGFsbC50Y2w6ICAgICAgICBUb3RhbCAgIDg0MjAgICAgUGFzc2VkICA2ODI2ICAgIFNraXBwZWQgMTU4MSAgICBGYWlsZWQgIDEzCi0gICAgICAgIFNvdXJjZWQgOTEgVGVzdCBGaWxlcy4KLSAgICAgICAgRmlsZXMgd2l0aCBmYWlsaW5nIHRlc3RzOiBjYW52SW1nLnRlc3Qgc2Nyb2xsYmFyLnRlc3QgdGV4dFdpbmQudGVzdCB3aW5XbS50ZXN0Ci0KLSAgIEJ1aWx0IFRpeAotICAgLS0tLS0tLS0tCi0gICBjZCBkaXN0XHRpeC04LjQuMFx3aW4KLSAgIG5tYWtlIC1mIHB5dGhvbi5tYWsKLSAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgaW5zdGFsbAotCi1iejIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmJ6MiBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgSG9tZXBhZ2UKLSAgICAgICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9iemlwMi8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjMKLQotICAgIEEgY3VzdG9tIHByZS1saW5rIHN0ZXAgaW4gdGhlIGJ6MiBwcm9qZWN0IHNldHRpbmdzIHNob3VsZCBtYW5hZ2UgdG8KLSAgICBidWlsZCBiemlwMi0xLjAuM1xsaWJiejIubGliIGJ5IG1hZ2ljIGJlZm9yZSBiejIucHlkIChvciBiejJfZC5weWQpIGlzCi0gICAgbGlua2VkIGluIFZTNy4xXC4KLSAgICBIb3dldmVyLCB0aGUgYnoyIHByb2plY3QgaXMgbm90IHNtYXJ0IGVub3VnaCB0byByZW1vdmUgYW55dGhpbmcgdW5kZXIKLSAgICBiemlwMi0xLjAuM1wgd2hlbiB5b3UgZG8gYSBjbGVhbiwgc28gaWYgeW91IHdhbnQgdG8gcmVidWlsZCBiemlwMi5saWIKLSAgICB5b3UgbmVlZCB0byBjbGVhbiB1cCBiemlwMi0xLjAuM1wgYnkgaGFuZC4KLQotICAgIFRoZSBidWlsZCBzdGVwIHNob3VsZG4ndCB5aWVsZCBhbnkgd2FybmluZ3Mgb3IgZXJyb3JzLCBhbmQgc2hvdWxkIGVuZAotICAgIGJ5IGRpc3BsYXlpbmcgNiBibG9ja3MgZWFjaCB0ZXJtaW5hdGVkIHdpdGgKLSAgICAgICAgRkM6IG5vIGRpZmZlcmVuY2VzIGVuY291bnRlcmVkCi0KLSAgICBBbGwgb2YgdGhpcyBtYW5hZ2VkIHRvIGJ1aWxkIGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIsIHdoaWNoIHRoZSBQeXRob24KLSAgICBwcm9qZWN0IGxpbmtzIGluLgotCi1fc3FsaXRlMwotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBTUUxpdGUgbGlicmFyeS4KLSAgICAKLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKLSAgICAKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtc291cmNlLTMuMy40Ci0gICAgCi0gICAgVG8gdXNlIHRoZSBleHRlbnNpb24gbW9kdWxlIGluIGEgUHl0aG9uIGJ1aWxkIHRyZWUsIGNvcHkgc3FsaXRlMy5kbGwgaW50bwotICAgIHRoZSBWUzcuMSBmb2xkZXIuCi0KLV9zc2wKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHNlY3VyZSBzb2NrZXRzIGxpYnJhcnkuCi0KLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL29wZW5zc2wtMC45LjhhCi0KLSAgICBBbHRlcm5hdGl2ZWx5LCBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gaHR0cDovL3d3dy5vcGVuc3NsLm9yZy4KLSAgICBZb3UgY2FuICh0aGVvcmV0aWNhbGx5KSB1c2UgYW55IHZlcnNpb24gb2YgT3BlblNTTCB5b3UgbGlrZSAtIHRoZQotICAgIGJ1aWxkIHByb2Nlc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24uCi0KLSAgICBZb3UgbXVzdCBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL1Byb2R1Y3RzL0FjdGl2ZVBlcmwvCi0gICAgYXMgdGhpcyBpcyB1c2VkIGJ5IHRoZSBPcGVuU1NMIGJ1aWxkIHByb2Nlc3MuICBDb21wbGFpbiB0byB0aGVtIDx3aW5rPi4KLQotICAgIFRoZSBNU1ZDIHByb2plY3Qgc2ltcGx5IGludm9rZXMgYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KLSAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTAotICAgIGluc3RhbGxhdGlvbiwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBmaW5hbCAucHlkLgotCi0gICAgYnVpbGRfc3NsLnB5IGF0dGVtcHRzIHRvIGNhdGNoIHRoZSBtb3N0IGNvbW1vbiBlcnJvcnMgKHN1Y2ggYXMgbm90Ci0gICAgYmVpbmcgYWJsZSB0byBmaW5kIE9wZW5TU0wgc291cmNlcywgb3Igbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFBlcmwKLSAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuCi0gICAgSWYgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5Ci0gICAgKGVnLCB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UKLSAgICBhIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5Ci0gICAgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQtbGluZS4KLQotICAgIGJ1aWxkX3NzbC5weS9NU1ZDIGlzbid0IGNsZXZlciBlbm91Z2ggdG8gY2xlYW4gT3BlblNTTCAtIHlvdSBtdXN0IGRvCi0gICAgdGhpcyBieSBoYW5kLgotCi1CdWlsZGluZyBmb3IgSXRhbml1bQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHByb2plY3QgZmlsZXMgc3VwcG9ydCBhIFJlbGVhc2VJdGFuaXVtIGNvbmZpZ3VyYXRpb24gd2hpY2ggY3JlYXRlcwotV2luNjQvSXRhbml1bSBiaW5hcmllcy4gRm9yIHRoaXMgdG8gd29yaywgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgUGxhdGZvcm0KLVNESywgaW4gcGFydGljdWxhciB0aGUgNjQtYml0IHN1cHBvcnQuIFRoaXMgaW5jbHVkZXMgYW4gSXRhbml1bSBjb21waWxlcgotKGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgU0RLIGxpa2VseSBpbmNsdWRlIGFuIEFNRDY0IGNvbXBpbGVyIGFzIHdlbGwpLgotSW4gYWRkaXRpb24sIHlvdSBuZWVkIHRoZSBWaXN1YWwgU3R1ZGlvIHBsdWdpbiBmb3IgZXh0ZXJuYWwgQyBjb21waWxlcnMsCi1mcm9tIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvdnNleHRjb21wLiBUaGUgcGx1Z2luIHdpbGwgd3JhcCBjbC5leGUsIHRvCi1sb2NhdGUgdGhlIHByb3BlciB0YXJnZXQgY29tcGlsZXIsIGFuZCBjb252ZXJ0IGNvbXBpbGVyIG9wdGlvbnMKLWFjY29yZGluZ2x5LiBUaGUgcHJvamVjdCBmaWxlcyByZXF1aXJlIGF0bGVhc3QgdmVyc2lvbiAwLjkuCi0KLUJ1aWxkaW5nIGZvciBBTUQ2NAotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgUmVsZWFzZUFNRDY0IGNvbmZpZ3VyYXRpb24gaXMgdmVyeSBzaW1pbGFyCi10byB0aGUgSXRhbml1bSBjb25maWd1cmF0aW9uOyBtYWtlIHN1cmUgeW91IHVzZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YKLXZzZXh0Y29tcC4KLQotQnVpbGRpbmcgUHl0aG9uIFVzaW5nIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBidWlsZCBwcm9jZXNzIGZvciBWaXN1YWwgQysrIGNhbiBiZSB1c2VkIGFsbW9zdCB1bmNoYW5nZWQgd2l0aCB0aGUgZnJlZSBNUwotVG9vbGtpdCBDb21waWxlci4gVGhpcyBwcm92aWRlcyBhIHdheSBvZiBidWlsZGluZyBQeXRob24gdXNpbmcgZnJlZWx5Ci1hdmFpbGFibGUgc29mdHdhcmUuCi0KLU5vdGUgdGhhdCBNaWNyb3NvZnQgaGF2ZSB3aXRoZHJhd24gdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlciwgc28gdGhpcyBjYW4KLW5vIGxvbmdlciBiZSBjb25zaWRlcmVkIGEgc3VwcG9ydGVkIG9wdGlvbi4gVGhlIGluc3RydWN0aW9ucyBhcmUgc3RpbGwKLWNvcnJlY3QsIGJ1dCB5b3UgbmVlZCB0byBhbHJlYWR5IGhhdmUgYSBjb3B5IG9mIHRoZSBjb21waWxlciBpbiBvcmRlciB0byB1c2UKLXRoZW0uIE1pY3Jvc29mdCBub3cgc3VwcGx5IFZpc3VhbCBDKysgMjAwOCBFeHByZXNzIEVkaXRpb24gZm9yIGZyZWUsIGJ1dCB0aGlzCi1pcyBOT1QgY29tcGF0aWJsZSB3aXRoIFZpc3VhbCBDKysgNy4xIChpdCB1c2VzIGEgZGlmZmVyZW50IEMgcnVudGltZSksIGFuZCBzbwotY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSB2ZXJzaW9uIG9mIFB5dGhvbiBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkCi1weXRob24ub3JnIGJ1aWxkLiBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdXNpbmcgVmlzdWFsIEMrKyAyMDA4IEV4cHJlc3MKLUVkaXRpb24sIGhvd2V2ZXIsIHlvdSBzaG91bGQgbG9vayBhdCB0aGUgUENCdWlsZCBkaXJlY3RvcnkuCi0KLVJlcXVpcmVtZW50cwotCi0gICAgVG8gYnVpbGQgUHl0aG9uLCB0aGUgZm9sbG93aW5nIHRvb2xzIGFyZSByZXF1aXJlZDoKLQotICAgICogVGhlIFZpc3VhbCBDKysgVG9vbGtpdCBDb21waWxlcgotICAgICAgICBubyBsb25nZXIgYXZhaWxhYmxlIGZvciBkb3dubG9hZCAtIHNlZSBhYm92ZQotICAgICogQSByZWNlbnQgUGxhdGZvcm0gU0RLCi0gICAgICAgIGZyb20gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2Rvd25sb2Fkcy9kZXRhaWxzLmFzcHg/RmFtaWx5SUQ9NDg0MjY5ZTItM2I4OS00N2UzLThlYjctMWYyYmU2ZDcxMjNhCi0gICAgKiBUaGUgLk5FVCAxLjEgU0RLCi0gICAgICAgIGZyb20gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2Rvd25sb2Fkcy9kZXRhaWxzLmFzcHg/RmFtaWx5SUQ9OWIzYTJjYTYtMzY0Ny00MDcwLTlmNDEtYTMzM2M2YjkxODFkCi0KLSAgICBbRG9lcyBhbnlvbmUgaGF2ZSBiZXR0ZXIgVVJMcyBmb3IgdGhlIGxhc3QgMiBvZiB0aGVzZT9dCi0KLSAgICBUaGUgdG9vbGtpdCBjb21waWxlciBpcyBuZWVkZWQgYXMgaXQgaXMgYW4gb3B0aW1pc2luZyBjb21waWxlciAodGhlCi0gICAgY29tcGlsZXIgc3VwcGxpZWQgd2l0aCB0aGUgLk5FVCBTREsgaXMgYSBub24tb3B0aW1pc2luZyB2ZXJzaW9uKS4gVGhlCi0gICAgcGxhdGZvcm0gU0RLIGlzIG5lZWRlZCB0byBwcm92aWRlIHRoZSBXaW5kb3dzIGhlYWRlciBmaWxlcyBhbmQgbGlicmFyaWVzCi0gICAgKHRoZSBXaW5kb3dzIDIwMDMgU2VydmVyIFNQMSBlZGl0aW9uLCB0eXBpY2FsIGluc3RhbGwsIGlzIGtub3duIHRvIHdvcmsgLQotICAgIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHZlcnNpb25zIGFyZSBwcm9iYWJseSBmaW5lIGFzIHdlbGwpLiBUaGUgLk5FVCAxLjEKLSAgICBTREsgaXMgbmVlZGVkIGJlY2F1c2UgaXQgY29udGFpbnMgYSB2ZXJzaW9uIG9mIG1zdmNydC5kbGwgd2hpY2ggbGlua3MgdG8KLSAgICB0aGUgbXN2Y3I3MS5kbGwgQ1JULiBOb3RlIHRoYXQgdGhlIC5ORVQgMi4wIFNESyBpcyBOT1QgYWNjZXB0YWJsZSwgYXMgaXQKLSAgICByZWZlcmVuY2VzIG1zdmNyODAuZGxsLgotCi0gICAgQWxsIG9mIHRoZSBhYm92ZSBpdGVtcyBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIG5vcm1hbC4KLQotICAgIElmIHlvdSBpbnRlbmQgdG8gYnVpbGQgdGhlIG9wZW5zc2wgKG5lZWRlZCBmb3IgdGhlIF9zc2wgZXh0ZW5zaW9uKSB5b3UKLSAgICB3aWxsIG5lZWQgdGhlIEMgcnVudGltZSBzb3VyY2VzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBwbGF0Zm9ybSBTREsuCi0KLSAgICBJbiBhZGRpdGlvbiwgeW91IHdpbGwgbmVlZCBOYW50LCBhdmFpbGFibGUgZnJvbQotICAgIGh0dHA6Ly9uYW50LnNvdXJjZWZvcmdlLm5ldC4gVGhlIDAuODUgcmVsZWFzZSBjYW5kaWRhdGUgMyB2ZXJzaW9uIGlzIGtub3duCi0gICAgdG8gd29yay4gVGhpcyBpcyB0aGUgbGF0ZXN0IHJlbGVhc2VkIHZlcnNpb24gYXQgdGhlIHRpbWUgb2Ygd3JpdGluZy4gTGF0ZXIKLSAgICAibmlnaHRseSBidWlsZCIgdmVyc2lvbnMgYXJlIGtub3duIE5PVCB0byB3b3JrIC0gaXQgaXMgbm90IGNsZWFyIGF0Ci0gICAgcHJlc2VudCB3aGV0aGVyIGZ1dHVyZSByZWxlYXNlZCB2ZXJzaW9ucyB3aWxsIHdvcmsuCi0KLVNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50Ci0KLSAgICBTdGFydCBhIHBsYXRmb3JtIFNESyAiYnVpbGQgZW52aXJvbm1lbnQgd2luZG93IiBmcm9tIHRoZSBzdGFydCBtZW51LiBUaGUKLSAgICAiV2luZG93cyBYUCAzMi1iaXQgcmV0YWlsIiB2ZXJzaW9uIGlzIGtub3duIHRvIHdvcmsuCi0KLSAgICBBZGQgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB0byB5b3VyIFBBVEg6Ci0gICAgICAgICogVGhlIHRvb2xraXQgY29tcGlsZXIgZGlyZWN0b3J5Ci0gICAgICAgICogVGhlIFNESyAiV2luNjQiIGJpbmFyaWVzIGRpcmVjdG9yeQotCSogVGhlIE5hbnQgZGlyZWN0b3J5Ci0gICAgQWRkIHRvIHlvdXIgSU5DTFVERSBlbnZpcm9ubWVudCB2YXJpYWJsZToKLSAgICAgICAgKiBUaGUgdG9vbGtpdCBjb21waWxlciBJTkNMVURFIGRpcmVjdG9yeQotICAgIEFkZCB0byB5b3VyIExJQiBlbnZpcm9ubWVudCB2YXJpYWJsZToKLSAgICAgICAgKiBUaGUgdG9vbGtpdCBjb21waWxlciBMSUIgZGlyZWN0b3J5Ci0JKiBUaGUgLk5FVCBTREsgVmlzdWFsIFN0dWRpbyAyMDAzIFZDN1xsaWIgZGlyZWN0b3J5Ci0KLSAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHNob3VsZCBzZXQgdGhpbmdzIHVwIGFzIHlvdSBuZWVkIHRoZW06Ci0KLSAgICAgICAgcmVtIFNldCB0aGVzZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHdoZXJlIHlvdSBpbnN0YWxsZWQgdGhlIHNvZnR3YXJlCi0gICAgICAgIHNldCBUT09MS0lUPUM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBDKysgVG9vbGtpdCAyMDAzCi0gICAgICAgIHNldCBTREs9QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgUGxhdGZvcm0gU0RLCi0gICAgICAgIHNldCBORVQ9QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMKLSAgICAgICAgc2V0IE5BTlQ9QzpcVXRpbHNcTmFudAotCi0gICAgICAgIHNldCBQQVRIPSVUT09MS0lUJVxiaW47JVBBVEglOyVTREslXEJpblx3aW42NDslTkFOVCVcYmluCi0gICAgICAgIHNldCBJTkNMVURFPSVUT09MS0lUJVxpbmNsdWRlOyVJTkNMVURFJQotICAgICAgICBzZXQgTElCPSVUT09MS0lUJVxsaWI7JU5FVCVcVkM3XGxpYjslTElCJQotCi0gICAgVGhlICJ3aW42NCIgZGlyZWN0b3J5IGZyb20gdGhlIFNESyBpcyBhZGRlZCB0byBzdXBwbHkgZXhlY3V0YWJsZXMgc3VjaCBhcwotICAgICJjdnRyZXMiIGFuZCAibGliIiwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgZWxzZXdoZXJlLiBUaGUgdmVyc2lvbnMgaW4gdGhlCi0gICAgIndpbjY0IiBkaXJlY3RvcnkgYXJlIDMyLWJpdCBwcm9ncmFtcywgc28gdGhleSBhcmUgZmluZSB0byB1c2UgaGVyZS4KLQotICAgIFRoYXQncyBpdC4gVG8gYnVpbGQgUHl0aG9uICh0aGUgY29yZSBvbmx5LCBubyBiaW5hcnkgZXh0ZW5zaW9ucyB3aGljaAotICAgIGRlcGVuZCBvbiBleHRlcm5hbCBsaWJyYXJpZXMpIHlvdSBqdXN0IG5lZWQgdG8gaXNzdWUgdGhlIGNvbW1hbmQKLQotICAgICAgICBuYW50IC1idWlsZGZpbGU6cHl0aG9uLmJ1aWxkIGFsbAotCi0gICAgZnJvbSB3aXRoaW4gdGhlIFZTNy4xIGRpcmVjdG9yeS4KLQotRXh0ZW5zaW9uIG1vZHVsZXMKLQotICAgIFRvIGJ1aWxkIHRob3NlIGV4dGVuc2lvbiBtb2R1bGVzIHdoaWNoIHJlcXVpcmUgZXh0ZXJuYWwgbGlicmFyaWVzCi0gICAgKF90a2ludGVyLCBiejIsIF9zcWxpdGUzLCBfc3NsKSB5b3UgY2FuIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zCi0gICAgZm9yIHRoZSBWaXN1YWwgU3R1ZGlvIGJ1aWxkIGFib3ZlLCB3aXRoIGEgZmV3IG1pbm9yIG1vZGlmaWNhdGlvbnMuIFRoZXNlCi0gICAgaW5zdHJ1Y3Rpb25zIGhhdmUgb25seSBiZWVuIHRlc3RlZCB1c2luZyB0aGUgc291cmNlcyBpbiB0aGUgUHl0aG9uCi0gICAgc3VidmVyc2lvbiByZXBvc2l0b3J5IC0gYnVpbGRpbmcgZnJvbSBvcmlnaW5hbCBzb3VyY2VzIHNob3VsZCB3b3JrLCBidXQKLSAgICBoYXMgbm90IGJlZW4gdGVzdGVkLgotCi0gICAgRm9yIGVhY2ggZXh0ZW5zaW9uIG1vZHVsZSB5b3Ugd2lzaCB0byBidWlsZCwgeW91IHNob3VsZCByZW1vdmUgdGhlCi0gICAgYXNzb2NpYXRlZCBpbmNsdWRlIGxpbmUgZnJvbSB0aGUgZXhjbHVkZXByb2plY3RzIHNlY3Rpb24gb2YgcGMuYnVpbGQuCi0KLSAgICBUaGUgY2hhbmdlcyByZXF1aXJlZCBhcmU6Ci0KLSAgICBfdGtpbnRlcgotICAgICAgICBUaGUgdGl4IG1ha2VmaWxlICh0aXgtOC40LjBcd2luXG1ha2VmaWxlLnZjKSBtdXN0IGJlIG1vZGlmaWVkIHRvCi0JcmVtb3ZlIHJlZmVyZW5jZXMgdG8gVE9PTFMzMi4gVGhlIHJlbGV2YW50IGxpbmVzIHNob3VsZCBiZSBjaGFuZ2VkIHRvCi0JcmVhZDoKLSAgICAgICAgICAgIGNjMzIgPSBjbC5leGUKLSAgICAgICAgICAgIGxpbmszMiA9IGxpbmsuZXhlCi0gICAgICAgICAgICBpbmNsdWRlMzIgPSAKLQlUaGUgcmVtYWluZGVyIG9mIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgd2lsbCB3b3JrIGFzIGdpdmVuLgotCi0gICAgYnoyCi0gICAgICAgIE5vIGNoYW5nZXMgYXJlIG5lZWRlZAotCi0gICAgX3NxbGl0ZTMKLSAgICAgICAgTm8gY2hhbmdlcyBhcmUgbmVlZGVkLiBIb3dldmVyLCBpbiBvcmRlciBmb3IgdGhlIHRlc3RzIHRvIHN1Y2NlZWQsIGEKLQljb3B5IG9mIHNxbGl0ZTMuZGxsIG11c3QgYmUgZG93bmxvYWRlZCwgYW5kIHBsYWNlZCBhbG9uZ3NpZGUKLQlweXRob24uZXhlLgotCi0gICAgX3NzbAotICAgICAgICBUaGUgZG9jdW1lbnRlZCBidWlsZCBwcm9jZXNzIHdvcmtzIGFzIHdyaXR0ZW4uIEhvd2V2ZXIsIGl0IG5lZWRzIGEKLQljb3B5IG9mIHRoZSBmaWxlIHNldGFyZ3Yub2JqLCB3aGljaCBpcyBub3Qgc3VwcGxpZWQgaW4gdGhlIHBsYXRmb3JtCi0JU0RLLiBIb3dldmVyLCB0aGUgc291cmNlcyBhcmUgYXZhaWxhYmxlIChpbiB0aGUgY3J0IHNvdXJjZSBjb2RlKS4gVG8KLQlidWlsZCBzZXRhcmd2Lm9iaiwgcHJvY2VlZCBhcyBmb2xsb3dzOgotCi0gICAgICAgIENvcHkgc2V0YXJndi5jLCBjcnVudGltZS5oIGFuZCBpbnRlcm5hbC5oIGZyb20gJVNESyVcc3JjXGNydCB0byBhCi0JdGVtcG9yYXJ5IGRpcmVjdG9yeS4KLQlDb21waWxlIHVzaW5nICJjbCAvYyAvSS4gL01EIC9EX0NSVEJMRCBzZXRhcmd2LmMiCi0JQ29weSB0aGUgcmVzdWx0aW5nIHNldGFyZ3Yub2JqIHRvIHNvbWV3aGVyZSBvbiB5b3VyIExJQiBlbnZpcm9ubWVudAotCSglU0RLJVxsaWIgaXMgYSByZWFzb25hYmxlIHBsYWNlKS4KLQotCVdpdGggc2V0YXJndi5vYmogaW4gcGxhY2UsIHRoZSBzdGFuZGFyZCBidWlsZCBwcm9jZXNzIHNob3VsZCB3b3JrCi0JZmluZS4KLQotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9ybXB5Yy5weSBiL1BDL1ZTNy4xL3JtcHljLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2M4NTc2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3JtcHljLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBSZW1vdmUgYWxsIHRoZSAucHljIGFuZCAucHlvIGZpbGVzIHVuZGVyIC4uL0xpYi4KLQotCi1kZWYgZGVsdHJlZShyb290KToKLSAgICBpbXBvcnQgb3MKLSAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KLQotICAgIG5weWMgPSBucHlvID0gMAotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHJvb3QpOgotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGRlbGV0ZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcucHljJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weWMgKz0gMQotICAgICAgICAgICAgZWxpZiBuYW1lLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weW8gKz0gMQotCi0gICAgICAgICAgICBpZiBkZWxldGU6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGpvaW4ocm9vdCwgbmFtZSkpCi0KLSAgICByZXR1cm4gbnB5YywgbnB5bwotCi1ucHljLCBucHlvID0gZGVsdHJlZSgiLi4vTGliIikKLXByaW50IG5weWMsICIucHljIGRlbGV0ZWQsIiwgbnB5bywgIi5weW8gZGVsZXRlZCIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3J0LmJhdCBiL1BDL1ZTNy4xL3J0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTkxMGE3OS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9ydC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4KLXJlbSBVc2FnZTogIHJ0IFstZF0gWy1PXSBbLXFdIHJlZ3J0ZXN0X2FyZ3MKLXJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLXJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLXJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1yZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAtTyAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotcmVtIHR3aWNlLCBhbmQKLXJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLXJlbQotcmVtIENvbmZ1c2luZzogIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgbGlrZQotcmVtICAgICAtdSBuZXR3b3JrLGxhcmdlZmlsZQotcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UKLXJlbSAgICAgcnQgLXUgIm5ldHdvcmssbGFyZ2VmaWxlIgotCi1zZXRsb2NhbAotCi1zZXQgZXhlPXB5dGhvbgotc2V0IHFtb2RlPQotc2V0IGRhc2hPPQotUEFUSCAlUEFUSCU7JX5kcDAuLlwuLlwuLlx0Y2x0a1xiaW4KLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1PIiAoc2V0IGRhc2hPPS1PKSAgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXEiIChzZXQgcW1vZGU9eWVzKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPSVleGUlICVkYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLWlmIGRlZmluZWQgcW1vZGUgZ290byBRbW9kZQotCi1lY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLSVleGUlIHJtcHljLnB5Ci0KLWVjaG8gb24KLSVjbWQlCi1AZWNobyBvZmYKLQotZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6Ci1wYXVzZQotCi06UW1vZGUKLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9zZWxlY3QudmNwcm9qIGIvUEMvVlM3LjEvc2VsZWN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI1MmQ0NS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9zZWxlY3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJzZWxlY3QiDQotCVNjY1Byb2plY3ROYW1lPSJzZWxlY3QiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyxtc3ZjcnQiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qIGIvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3ZjliLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0idW5pY29kZWRhdGEiDQotCVNjY1Byb2plY3ROYW1lPSJ1bmljb2RlZGF0YSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGEucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGFfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGEucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2ogYi9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZjNiNGUuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJ3OXhwb3BlbiINCi0JU2NjUHJvamVjdE5hbWU9IiINCi0JU2NjTG9jYWxQYXRoPSIiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHc5eHBvcGVuIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vdzl4cG9wZW5fZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93OXhwb3Blbl9kLnBkYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2Vcdzl4cG9wZW4iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3c5eHBvcGVuLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93OXhwb3Blbi5wZGIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcdzl4cG9wZW4uYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvaiBiL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0Y2YzOS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9IndpbnNvdW5kIg0KLQlTY2NQcm9qZWN0TmFtZT0id2luc291bmQiDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5ccGMiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcd2luc291bmQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19jdHlwZXMudmNwcm9qIGIvUEMvVlM4LjAvX2N0eXBlcy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzMyMzMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2N0eXBlcy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw3MDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9jdHlwZXMiDQotCVByb2plY3RHVUlEPSJ7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlcyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY3R5cGVzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY3R5cGVzX2RsZmNuLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpX2NvbW1vbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaWNvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaXRhcmdldC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbGJhY2tzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbHByb2MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xtYWxsb2NfY2xvc3VyZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcc3RnZGljdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjY0LmFzbSINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL1ppIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1N2RhNzIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0iDQotCVJvb3ROYW1lc3BhY2U9Il9lbGVtZW50dHJlZSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWl0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXRfY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0X2V4dGVybmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGlhc2NpaXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxpbnRlcm5hbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxsYXRpbjF0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbWFjY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XG5hbWV0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRccHlleHBhdG5zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHV0Zjh0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcd2luY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2ogYi9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMzFlMmUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfaGFzaGxpYiINCi0JUHJvamVjdEdVSUQ9Ins0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlSb290TmFtZXNwYWNlPSJfaGFzaGxpYiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oYXNob3BlbnNzbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tc2kudmNwcm9qIGIvUEMvVlM4LjAvX21zaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OTcxYzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX21zaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tc2kiDQotCVByb2plY3RHVUlEPSJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUm9vdE5hbWVzcGFjZT0iX21zaSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX21zaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qIGIvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMWNhZmMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tdWx0aXByb2Nlc3NpbmciDQotCVByb2plY3RHVUlEPSJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSINCi0JUm9vdE5hbWVzcGFjZT0iX211bHRpcHJvY2Vzc2luZyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2ogYi9QQy9WUzguMC9fc29ja2V0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFiZDk4Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc29ja2V0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3NvY2tldCINCi0JUHJvamVjdEdVSUQ9Ins4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9Ig0KLQlSb290TmFtZXNwYWNlPSJfc29ja2V0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+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+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmMTlmMS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0iezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVJvb3ROYW1lc3BhY2U9Il9zcWxpdGUzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zc2wudmNwcm9qIGIvUEMvVlM4LjAvX3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjY3YTQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zc2wiDQotCVByb2plY3RHVUlEPSJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCi0JUm9vdE5hbWVzcGFjZT0iX3NzbCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zc2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MDBiZGUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfdGtpbnRlciINCi0JUHJvamVjdEdVSUQ9Ins0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KLQlSb290TmFtZXNwYWNlPSJfdGtpbnRlciINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliRGVidWcpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYkRlYnVnKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGtpbnRlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvaiBiL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTFlZGYyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJiZGlzdF93aW5pbnN0Ig0KLQlQcm9qZWN0R1VJRD0ie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotCVJvb3ROYW1lc3BhY2U9Indpbmluc3QiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LnRsYiINCi0JCQkJSGVhZGVyRmlsZU5hbWU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZTsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJjb21jdGwzMi5saWIgaW1hZ2VobHAubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjEiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iY29tY3RsMzIubGliIGltYWdlaGxwLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLWFtZDY0LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC1hbWQ2NC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxleHRyYWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9InpsaWIiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmwiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxhcmNoaXZlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XFB5dGhvblBvd2VyZWQuYm1wIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkLmJhdCBiL1BDL1ZTOC4wL2J1aWxkLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJjODE4Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgb3IgcmVidWlsZCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KLXJlbSBqdXN0IGZvciBjb252ZW5pZW5jZS4KLQotc2V0bG9jYWwKLXNldCBwbGF0Zj1XaW4zMgotc2V0IGNvbmY9UmVsZWFzZQotc2V0IGJ1aWxkPS9idWlsZAotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLWMiIChzZXQgY29uZj0lMikgICAgICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXAiIChzZXQgcGxhdGY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXIiIChzZXQgYnVpbGQ9L3JlYnVpbGQpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPWRldmVudiBwY2J1aWxkLnNsbiAlYnVpbGQlICIlY29uZiV8JXBsYXRmJSIKLWVjaG8gJWNtZCUKLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0IGIvUEMvVlM4LjAvYnVpbGRfZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM2N2FlMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQCVjb21zcGVjJSAvayBlbnYuYmF0ICUqCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0IGIvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3YjViZi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIFBHTyAoUHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uKSBieSBmaXJzdAotcmVtIGJ1aWxkaW5nIGluc3RydW1lbnRlZCBiaW5hcmllcywgdGhlbiBydW5uaW5nIHRoZSB0ZXN0c3VpdGUsIGFuZAotcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLgotcmVtIE5vdGUsIGFmdGVyIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgcnVuLCBvbmUgY2FuIGp1c3Qga2VlcCBvbgotcmVtIGJ1aWxkaW5nIHRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHdoaWxlIGRldmVsb3BpbmcuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLQotcmVtIHVzZSB0aGUgcGVyZm9ybWFuY2UgdGVzdHN1aXRlLiAgVGhpcyBpcyBxdWljayBhbmQgc2ltcGxlCi1zZXQgam9iMT0uLlwuLlx0b29sc1xweWJlbmNoXHB5YmVuY2gucHkgLW4gMSAtQyAxIC0td2l0aC1nYwotc2V0IHBhdGgxPS4uXC4uXHRvb2xzXHB5YmVuY2gKLQotcmVtIG9yIHRoZSB3aG9sZSB0ZXN0c3VpdGUgZm9yIG1vcmUgdGhvcm91Z2ggdGVzdGluZwotc2V0IGpvYjI9Li5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLXNldCBwYXRoMj0uLlwuLlxsaWIKLQotc2V0IGpvYj0lam9iMSUKLXNldCBjbHJwYXRoPSVwYXRoMSUKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii0yIiAoc2V0IGpvYj0lam9iMiUpICYgKHNldCBjbHJwYXRoPSVwYXRoMiUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgUEdJPSVwbGF0ZiUtcGdpCi1zZXQgUEdPPSVwbGF0ZiUtcGdvCi0KLUBlY2hvIG9uCi1yZW0gYnVpbGQgdGhlIGluc3RydW1lbnRlZCB2ZXJzaW9uCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50Ci0KLXJlbSByZW1vdmUgLnB5YyBmaWxlcywgLnBnYyBmaWxlcyBhbmQgZXhlY3V0ZSB0aGUgam9iCi0lUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQotZGVsICVQR0klXCoucGdjCi0lUEdJJVxweXRob24uZXhlICVqb2IlCi0KLXJlbSBmaW5hbGx5IGJ1aWxkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbgotaWYgZXhpc3QgJVBHTyUgZGVsIC9zIC9xICVQR08lCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUKLQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2IwOGIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLUBlY2hvIG9mZgotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAotICBpZiAlMSBFUVUgRGVidWcgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzNfZC5kbGwgZXhpdCAxCi0gICkgRUxTRSAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzMuZGxsIGV4aXQgMQotICApCi0pCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMwotCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wucHkgYi9QQy9WUzguMC9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMTNlZjUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBhbmQgX2hhc2hsaWIgbW9kdWxlcyBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIHRoZSBhY3R1YWwgX3NzbC5weWQgYW5kIF9oYXNobGliLnB5ZCBETExzLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQy9WUzguMCBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgX3NzbCBhbmQgX2hhc2hsaWIKLSMgUHl0aG9uIGV4dGVuc2lvbnMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLSMgTW9kaWZpZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcwotIyBOb3cgdGhpcyBzY3JpcHQgc3VwcG9ydHMgcHJlLWdlbmVyYXRlZCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotIyBEZXZlbG9wZXJzIGRvbid0IG5lZWQgYW4gaW5zdGFsbGF0aW9uIG9mIFBlcmwgYW55bW9yZSB0byBidWlsZCBQeXRob24uIEEgc3ZuCi0jIGNoZWNrb3V0IGZyb20gb3VyIHN2biByZXBvc2l0b3J5IGlzIGVub3VnaC4KLSMKLSMgSW4gT3JkZXIgdG8gY3JlYXRlIHRoZSBmaWxlcyBpbiB0aGUgY2FzZSBvZiBhbiB1cGRhdGUgeW91IHN0aWxsIG5lZWQgUGVybC4KLSMgUnVuIGJ1aWxkX3NzbCBpbiB0aGlzIG9yZGVyOgotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIHg2NAotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIFdpbjMyCi0KLWltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCgiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiKQotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiKQotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50KCIgIiwgcCkKLSAgICAgICAgcHJpbnQoIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKLSAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQoIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpOgotICAgICIiIkNyZWF0ZSBhbmQgZml4IG1ha2VmaWxlIGZvciA2NGJpdAotCi0gICAgUmVwbGFjZSAzMiB3aXRoIDY0Yml0IGRpcmVjdG9yaWVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG0zMik6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtMzIpIGFzIGZpbjoKLSAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPXRtcDMyIiwgIj10bXA2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPW91dDMyIiwgIj1vdXQ2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPWluYzMyIiwgIj1pbmM2NCIpCi0gICAgICAgICAgICAgICAgIyBmb3JjZSA2NCBiaXQgbWFjaGluZQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIk1LTElCPWxpYiIsICJNS0xJQj1saWIgL01BQ0hJTkU6WDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJMRkxBR1M9IiwgIkxGTEFHUz0vTUFDSElORTpYNjQgIikKLSAgICAgICAgICAgICAgICAjIGRvbid0IGxpbmsgYWdhaW5zdCB0aGUgbGliIG9uIDY0Yml0IHN5c3RlbXMKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJidWZmZXJvdmVyZmxvd3UubGliIiwgIiIpCi0gICAgICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotICAgIG9zLnVubGluayhtMzIpCi0KLWRlZiBmaXhfbWFrZWZpbGUobWFrZWZpbGUpOgotICAgICIiIkZpeCBzb21lIHN0dWZmIGluIGFsbCBtYWtlZmlsZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKLSAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBFUkw9Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ1A9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJDUD1jb3B5XG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk1LRElSPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiTUtESVI9bWtkaXJcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ0ZMQUc9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvciBhbGdvIGluICgiUkM1IiwgIk1EQzIiLCAiSURFQSIpOgotICAgICAgICAgICAgICAgICAgICBub2FsZ28gPSAiIC1ET1BFTlNTTF9OT18lcyIgJSBhbGdvCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vYWxnbyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbm9hbGdvCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIHByaW50KGRvX3NjcmlwdCkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgY21wKGYxLCBmMik6Ci0gICAgYnVmc2l6ZSA9IDEwMjQgKiA4Ci0gICAgd2l0aCBvcGVuKGYxLCAncmInKSBhcyBmcDEsIG9wZW4oZjIsICdyYicpIGFzIGZwMjoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGIxID0gZnAxLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGlmIGIxICE9IGIyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGIxOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLWRlZiBjb3B5KHNyYywgZHN0KToKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShkc3QpIGFuZCBjbXAoc3JjLCBkc3QpOgotICAgICAgICByZXR1cm4KLSAgICBzaHV0aWwuY29weShzcmMsIGRzdCkKLQotZGVmIG1haW4oKToKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2UiOgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiRGVidWciOgotICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHN0cihzeXMuYXJndikpCi0KLSAgICBpZiBzeXMuYXJndlsyXSA9PSAiV2luMzIiOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZQotICAgICAgICBkaXJzdWZmaXggPSAiMzIiCi0gICAgZWxpZiBzeXMuYXJndlsyXSA9PSAieDY0IjoKLSAgICAgICAgYXJjaD0iYW1kNjQiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQ2NC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlLnJlcGxhY2UoJzY0JywgJycpCi0gICAgICAgIGRpcnN1ZmZpeCA9ICI2NCIKLSAgICAgICAgI29zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQotCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZTOC4wIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyByZWJ1aWxkIG1ha2VmaWxlIHdoZW4gd2UgZG8gdGhlIHJvbGUgb3ZlciBmcm9tIDMyIHRvIDY0IGJ1aWxkCi0gICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IiBhbmQgb3MucGF0aC5pc2ZpbGUobTMyKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgICAgIG9zLnVubGluayhtMzIpCi0KLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludCgiUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFrZWZpbGVzISIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGRlYnVnOgotICAgICAgICAgICAgICAgIHByaW50KCJPcGVuU1NMIGRlYnVnIGJ1aWxkcyBhcmVuJ3Qgc3VwcG9ydGVkLiIpCi0gICAgICAgICAgICAjaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgIyAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgIyAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKLSAgICAgICAgICAgICAgICBjcmVhdGVfbWFrZWZpbGU2NChtYWtlZmlsZSwgbTMyKQotICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQotCi0gICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCi0gICAgICAgIGlmIHBlcmwgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgotICAgICAgICAgICAgcmMgPSBvcy5zeXN0ZW0oIm1sNjQgLWMgLUZvbXNcXHVwdGFibGUub2JqIG1zXFx1cHRhYmxlLmFzbSIpCi0gICAgICAgICAgICBpZiByYzoKLSAgICAgICAgICAgICAgICBwcmludCgibWw2NCBhc3NlbWJsZXIgaGFzIGZhaWxlZC4iKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KHJjKQotCi0gICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiKQotCi0gICAgICAgICNtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyAtZiBcIiVzXCIiICUgbWFrZWZpbGUKLSAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIikKLSAgICAgICAgICAgIHByaW50KHJjKQotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkgYi9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTU5MDM5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0iIiJTY3JpcHQgdG8gY29tcGlsZSB0aGUgZGVwZW5kZW5jaWVzIG9mIF90a2ludGVyCi0KLUNvcHlyaWdodCAoYykgMjAwNyBieSBDaHJpc3RpYW4gSGVpbWVzIDxjaHJpc3RpYW5AY2hlaW1lcy5kZT4KLQotTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1oZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi1wYXIgPSBvcy5wYXRoLnBhcmRpcgotCi1pZiAxOgotICAgIFRDTCA9ICJ0Y2w4LjQuMTYiCi0gICAgVEsgPSAidGs4LjQuMTYiCi0gICAgVElYID0gInRpeC04LjQuMCIKLWVsc2U6Ci0gICAgVENMID0gInRjbDguNWIzIgotICAgIFRLID0gInRjbDguNWIzIgotICAgIFRJWCA9ICJUaXg4LjQuMiIKLQotUk9PVCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgcGFyLCBwYXIsIHBhcikpCi0jIFdpbmRvd3MgMjAwMCBjb21wYXRpYmlsaXR5OiBXSU5WRVIgMHgwNTAwCi0jIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzODM3NDUuYXNweAotTk1BS0UgPSAibm1ha2UgL25vbG9nbyAvZiAlcyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCAlcyAlcyIKLQotZGVmIG5tYWtlKG1ha2VmaWxlLCBjb21tYW5kPSIiLCAqKmt3KToKLSAgICBkZWZpbmVzID0gJyAnLmpvaW4oaysnPScrdiBmb3IgaywgdiBpbiBrdy5pdGVtcygpKQotICAgIGNtZCA9IE5NQUtFICUgKG1ha2VmaWxlLCBkZWZpbmVzLCBjb21tYW5kKQotICAgIHByaW50KCJcblxuIitjbWQrIlxuIikKLSAgICBpZiBvcy5zeXN0ZW0oY21kKSAhPSAwOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoY21kKQotCi1kZWYgYnVpbGQocGxhdGZvcm0sIGNsZWFuKToKLSAgICBpZiBwbGF0Zm9ybSA9PSAiV2luMzIiOgotICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKFJPT1QsICJ0Y2x0ayIpCi0gICAgICAgIG1hY2hpbmUgPSAiWDg2IgotICAgIGVsaWYgcGxhdGZvcm0gPT0gIng2NCI6Ci0gICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oUk9PVCwgInRjbHRrNjQiKQotICAgICAgICBtYWNoaW5lID0gIlg2NCIKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHBsYXRmb3JtKQotCi0gICAgIyBUQ0wKLSAgICB0Y2xkaXIgPSBvcy5wYXRoLmpvaW4oUk9PVCwgVENMKQotICAgIGlmIDE6Ci0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbih0Y2xkaXIsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVEsKLSAgICBpZiAxOgotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVEssICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIFRDTERJUj10Y2xkaXIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVElYCi0gICAgaWYgMToKLSAgICAgICAgIyBweXRob245Lm1hayBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3N2bi5weXRob24ub3JnCi0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihST09ULCBUSVgsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCBNQUNISU5FPW1hY2hpbmUpCi0gICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsICJpbnN0YWxsIikKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMiBvciBzeXMuYXJndlsxXSBub3QgaW4gKCJXaW4zMiIsICJ4NjQiKToKLSAgICAgICAgcHJpbnQoIiVzIFdpbjMyfHg2NCIgJSBzeXMuYXJndlswXSkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIGlmICItYyIgaW4gc3lzLmFyZ3Y6Ci0gICAgICAgIGNsZWFuID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIGNsZWFuID0gRmFsc2UKLQotICAgIGJ1aWxkKHN5cy5hcmd2WzFdLCBjbGVhbikKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnoyLnZjcHJvaiBiL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTE5NzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnoyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYnoyIg0KLQlQcm9qZWN0R1VJRD0iezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQotCVJvb3ROYW1lc3BhY2U9ImJ6MiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9ImJ6aXAyIDEuMC42IEhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYl9wcml2YXRlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJiemlwMiAxLjAuNiBTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJsb2Nrc29ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjcmN0YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGRlY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxodWZmbWFuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilccmFuZHRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcyBiL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjQzY2IuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJkZWJ1ZyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IktpbGxQeXRob25FeGUiDQotCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9lbnYuYmF0IGIvUEMvVlM4LjAvZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5OTBhOC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AZWNobyBvZmYKLXNldCBWUzg9JVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gOAotZWNobyBCdWlsZCBlbnZpcm9ubWVudHM6IHg4NiwgaWE2NCwgYW1kNjQsIHg4Nl9hbWQ2NCwgeDg2X2lhNjQKLWVjaG8uCi1jYWxsICIlVlM4JVxWQ1x2Y3ZhcnNhbGwuYmF0IiAlMQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZmllbGQzLnB5IGIvUEMvVlM4LjAvZmllbGQzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNiZTM2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2ZpZWxkMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQW4gYWJzdXJkIHdvcmthcm91bmQgZm9yIHRoZSBsYWNrIG9mIGFyaXRobWV0aWMgaW4gTVMncyByZXNvdXJjZSBjb21waWxlci4KLSMgQWZ0ZXIgYnVpbGRpbmcgUHl0aG9uLCBydW4gdGhpcywgdGhlbiBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIGFwcHJvcHJpYXRlCi0jIHBhcnQgb2YgUENccHl0aG9uX250LnJjLgotIyBFeGFtcGxlIG91dHB1dDoKLSMKLSMgKiBGb3IgMi4zYTAsCi0jICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSMgKiBQWV9SRUxFQVNFX0xFVkVMID0gJ2FscGhhJyA9IDB4QQotIyAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQotIyAqCi0jICogYW5kIDAqMTAwMCArIDEwKjEwICsgMSA9IDEwMS4KLSMgKi8KLSMgI2RlZmluZSBGSUVMRDMgMTAxCi0KLWltcG9ydCBzeXMKLQotbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8KLWxldmVsbnVtID0geydhbHBoYSc6IDB4QSwKLSAgICAgICAgICAgICdiZXRhJzogMHhCLAotICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IDB4QywKLSAgICAgICAgICAgICdmaW5hbCc6IDB4RiwKLSAgICAgICAgICAgfVtsZXZlbF0KLXN0cmluZyA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0gIyBsaWtlICcyLjNhMCcKLQotcHJpbnQoIiAqIEZvciAlcywiICUgc3RyaW5nKQotcHJpbnQoIiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAlZCIgJSBtaWNybykKLXByaW50KCIgKiBQWV9SRUxFQVNFX0xFVkVMID0gJXIgPSAlcyIgJSAobGV2ZWwsIGhleChsZXZlbG51bSkpKQotcHJpbnQoIiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gJWQiICUgc2VyaWFsKQotcHJpbnQoIiAqIikKLQotZmllbGQzID0gbWljcm8gKiAxMDAwICsgbGV2ZWxudW0gKiAxMCArIHNlcmlhbAotCi1wcmludCgiICogYW5kICVkKjEwMDAgKyAlZCoxMCArICVkID0gJWQiICUgKG1pY3JvLCBsZXZlbG51bSwgc2VyaWFsLCBmaWVsZDMpKQotcHJpbnQoIiAqLyIpCi1wcmludCgiI2RlZmluZSBGSUVMRDMiLCBmaWVsZDMpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9pZGxlLmJhdCBiL1BDL1ZTOC4wL2lkbGUuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjNlNzA0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2lkbGUuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gc3RhcnQgaWRsZQotcmVtIFVzYWdlOiAgaWRsZSBbLWRdCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi0KLXNldGxvY2FsCi1zZXQgZXhlPXB5dGhvbgotUEFUSCAlUEFUSCU7Li5cLi5cLi5cdGNsdGtcYmluCi0KLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQKLQotc2V0IGNtZD0lZXhlJSAuLi8uLi9MaWIvaWRsZWxpYi9pZGxlLnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci0KLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM4LjAva2lsbF9weXRob24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIzMjNkMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBIZWxwZXIgcHJvZ3JhbSBmb3Iga2lsbGluZyBsaW5nZXJpbmcgcHl0aG9uW19kXS5leGUgcHJvY2Vzc2VzIGJlZm9yZQotICogYnVpbGRpbmcsIHRodXMgYXR0ZW1wdGluZyB0byBhdm9pZCBidWlsZCBmYWlsdXJlcyBkdWUgdG8gZmlsZXMgYmVpbmcKLSAqIGxvY2tlZC4KLSAqLwotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHdjaGFyLmg+Ci0jaW5jbHVkZSA8dGxoZWxwMzIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jcHJhZ21hIGNvbW1lbnQobGliLCAicHNhcGkiKQotCi0jaWZkZWYgX0RFQlVHCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgUFlUSE9OX0VYRV9MRU4gICAgICAoMTIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRSAgICAgKEwia2lsbF9weXRob25fZC5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNykKLSNlbHNlCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEwKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uLmV4ZSIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRV9MRU4gKDE1KQotI2VuZGlmCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgSEFORExFICAgaHAsIGhzcCwgaHNtOyAvKiBwcm9jZXNzLCBzbmFwc2hvdCBwcm9jZXNzZXMsIHNuYXBzaG90IG1vZHVsZXMgKi8KLSAgICBEV09SRCAgICBkYWMsIG91cl9waWQ7Ci0gICAgc2l6ZV90ICAgbGVuOwotICAgIHdjaGFyX3QgIHBhdGhbTUFYX1BBVEgrMV07Ci0KLSAgICBNT0RVTEVFTlRSWTMyVyAgbWU7Ci0gICAgUFJPQ0VTU0VOVFJZMzJXIHBlOwotCi0gICAgbWUuZHdTaXplID0gc2l6ZW9mKE1PRFVMRUVOVFJZMzJXKTsKLSAgICBwZS5kd1NpemUgPSBzaXplb2YoUFJPQ0VTU0VOVFJZMzJXKTsKLQotICAgIG1lbXNldChwYXRoLCAwLCBNQVhfUEFUSCsxKTsKLQotICAgIG91cl9waWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0KLSAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIG91cl9waWQpOwotICAgIGlmIChoc20gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMV0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBFbnVtZXJhdGUgb3ZlciB0aGUgbW9kdWxlcyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBpbiBvcmRlciB0byBmaW5kCi0gICAgICoga2lsbF9wcm9jZXNzW19kXS5leGUsIHRoZW4gdGFrZSBhIG5vdGUgb2YgdGhlIGRpcmVjdG9yeSBpdCBsaXZlcyBpbi4KLSAgICAgKi8KLSAgICBkbyB7Ci0gICAgICAgIGlmIChfd2NzbmljbXAobWUuc3pNb2R1bGUsIEtJTExfUFlUSE9OX0VYRSwgS0lMTF9QWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBsZW4gPSB3Y3NubGVuX3MobWUuc3pFeGVQYXRoLCBNQVhfUEFUSCkgLSBLSUxMX1BZVEhPTl9FWEVfTEVOOwotICAgICAgICB3Y3NuY3B5X3MocGF0aCwgTUFYX1BBVEgrMSwgbWUuc3pFeGVQYXRoLCBsZW4pOyAKLQotICAgICAgICBicmVhazsKLQotICAgIH0gd2hpbGUgKE1vZHVsZTMyTmV4dFcoaHNtLCAmbWUpKTsKLQotICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICBpZiAocGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiZmFpbGVkIHRvIGRpc2Nlcm4gZGlyZWN0b3J5IG9mIHJ1bm5pbmcgcHJvY2Vzc1xuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVGFrZSBhIHNuYXBzaG90IG9mIHN5c3RlbSBwcm9jZXNzZXMuICBFbnVtZXJhdGUgb3ZlciB0aGUgc25hcHNob3QsCi0gICAgICogbG9va2luZyBmb3IgcHl0aG9uIHByb2Nlc3Nlcy4gIFdoZW4gd2UgZmluZCBvbmUsIHZlcmlmeSBpdCBsaXZlcwotICAgICAqIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3ZSBsaXZlIGluLiAgSWYgaXQgZG9lcywga2lsbCBpdC4gIElmIHdlJ3JlCi0gICAgICogdW5hYmxlIHRvIGtpbGwgaXQsIHRyZWF0IHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgcmV0dXJuIDEuCi0gICAgICogCi0gICAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0aGF0IHdlJ3JlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIAotICAgICAqIGJ1aWxkIHByb2Nlc3Mgb24gdGhlIGJhc2lzIHRoYXQgd2UnbGwgdGFrZSBjYXJlIG9mIGtpbGxpbmcgYW55Ci0gICAgICogcnVubmluZyBpbnN0YW5jZXMsIHN1Y2ggdGhhdCB0aGUgYnVpbGQgd29uJ3QgZW5jb3VudGVyIHBlcm1pc3Npb24KLSAgICAgKiBkZW5pZWQgZXJyb3JzIGR1cmluZyBsaW5raW5nLiBJZiB3ZSBjYW4ndCBraWxsIG9uZSBvZiB0aGUgcHJvY2Vzc2VzLAotICAgICAqIHdlIGNhbid0IHByb3ZpZGUgdGhpcyBhc3N1cmFuY2UsIGFuZCB0aGUgYnVpbGQgc2hvdWxkbid0IHN0YXJ0LgotICAgICAqLwotCi0gICAgaHNwID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQUFJPQ0VTUywgMCk7Ci0gICAgaWYgKGhzcCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBwcmludGYoIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdFsyXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICghUHJvY2VzczMyRmlyc3RXKGhzcCwgJnBlKSkgewotICAgICAgICBwcmludGYoIlByb2Nlc3MzMkZpcnN0VyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGRhYyA9IFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04gfCBQUk9DRVNTX1ZNX1JFQUQgfCBQUk9DRVNTX1RFUk1JTkFURTsKLSAgICBkbyB7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKLSAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCi0gICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgotICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCi0gICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKF93Y3NuaWNtcChwZS5zekV4ZUZpbGUsIFBZVEhPTl9FWEUsIFBZVEhPTl9FWEVfTEVOKSkKLSAgICAgICAgICAgIC8qIFRoaXMgaXNuJ3QgYSBweXRob24gcHJvY2Vzcy4gKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIEl0J3MgYSBweXRob24gcHJvY2Vzcywgc28gZmlndXJlIG91dCB3aGljaCBkaXJlY3RvcnkgaXQncyBpbi4uLiAqLwotICAgICAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIHBlLnRoMzJQcm9jZXNzSUQpOwotICAgICAgICBpZiAoaHNtID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICAgICAgLyogCi0gICAgICAgICAgICAgKiBJZiBvdXIgbW9kdWxlIHNuYXBzaG90IGZhaWxzICh3aGljaCB3aWxsIGhhcHBlbiBpZiB3ZSBkb24ndCBvd24KLSAgICAgICAgICAgICAqIHRoZSBwcm9jZXNzKSwganVzdCBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlLiAgKEl0IHNlZW1zIGRpZmZlcmVudAotICAgICAgICAgICAgICogdmVyc2lvbnMgb2YgV2luZG93cyByZXR1cm4gZGlmZmVyZW50IHZhbHVlcyBmb3IgR2V0TGFzdEVycm9yKCkKLSAgICAgICAgICAgICAqIGluIHRoaXMgc2l0dWF0aW9uOyBpdCdzIGVhc2llciB0byBqdXN0IGlnbm9yZSBpdCBhbmQgbW92ZSBvbiB2cy4KLSAgICAgICAgICAgICAqIHN0b3BwaW5nIHRoZSBidWlsZCBmb3Igd2hhdCBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLikKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghTW9kdWxlMzJGaXJzdFcoaHNtLCAmbWUpKSB7Ci0gICAgICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzJdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoX3djc25pY21wKG1lLnN6TW9kdWxlLCBQWVRIT05fRVhFLCBQWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICAgICAgLyogV3JvbmcgbW9kdWxlLCB3ZSdyZSBsb29raW5nIGZvciBweXRob25bX2RdLmV4ZS4uLiAqLwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoX3djc25pY21wKHBhdGgsIG1lLnN6RXhlUGF0aCwgbGVuKSkKLSAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGRvZXNuJ3QgbGl2ZSBpbiBvdXIgZGlyZWN0b3J5LiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvKiBQeXRob24gcHJvY2VzcyByZXNpZGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LCBraWxsIGl0ISAgKi8KLSAgICAgICAgICAgIGhwID0gT3BlblByb2Nlc3MoZGFjLCBGQUxTRSwgcGUudGgzMlByb2Nlc3NJRCk7Ci0gICAgICAgICAgICBpZiAoIWhwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJPcGVuUHJvY2VzcyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIVRlcm1pbmF0ZVByb2Nlc3MoaHAsIDEpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJUZXJtaW5hdGVQcm9jZXNzIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHApOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDbG9zZUhhbmRsZShocCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9IHdoaWxlIChNb2R1bGUzMk5leHRXKGhzbSwgJm1lKSk7Ci0KLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLQotICAgIH0gd2hpbGUgKFByb2Nlc3MzMk5leHRXKGhzcCwgJnBlKSk7Ci0KLSAgICBDbG9zZUhhbmRsZShoc3ApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHZpOiBzZXQgdHM9OCBzdz00IHN0cz00IGV4cGFuZHRhYiAqLwpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qIGIvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWJlMzMwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ia2lsbF9weXRob24iDQotCVByb2plY3RHVUlEPSJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi0JUm9vdE5hbWVzcGFjZT0ia2lsbF9weXRob24iDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLlxraWxsX3B5dGhvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWZhMDdhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUgQ01EX1NJWkUgNTAwCi0KLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENCdWlsZFxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotICAgSG93ZXZlciwgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB1c2VkCi0gICBhcyBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlcmUgYW55IGdldGJ1aWxkaW5mbzIuYyBhbmQKLSAgIGdldGJ1aWxkaW5mby5vIGZpbGVzIGFyZSBwdXQuICBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZQotICAgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGluIHBhcmFsbGVsLCB0byBhdm9pZCB0aGVtCi0gICB0cmFtcGxpbmcgZWFjaCBvdGhlcidzIGZpbGVzLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKGNvbnN0IGNoYXIgKnRtcHBhdGgpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRSsxXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jICIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuYyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQotewotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRV0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgY2hhciB0bXBwYXRoW0NNRF9TSVpFXSA9ICIiOwotICAgIGludCBkb191bmxpbmssIHJlc3VsdDsKLSAgICBjaGFyICp0bXBkaXIgPSBOVUxMOwotICAgIGlmIChhcmdjIDw9IDIgfHwgYXJnYyA+IDMpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKSBbdG1wZGlyXVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKGFyZ2MgPiAyKSB7Ci0gICAgICAgIHRtcGRpciA9IGFyZ3ZbMl07Ci0gICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCB0bXBkaXIpOwotICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgIlxcIik7Ci0gICAgfQotCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIodG1wcGF0aCkpKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIgLUZvIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvLm8gLUkuLlxcLi5cXEluY2x1ZGUgLUkuLlxcLi5cXFBDIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwotICAgIGlmIChkb191bmxpbmspIHsKLSAgICAgICAgY29tbWFuZFswXSA9ICdcMCc7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMiKTsKLSAgICAgICAgX3VubGluayhjb21tYW5kKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2ogYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNWNjY2QuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX2J1aWxkaW5mbyINCi0JUHJvamVjdEdVSUQ9IntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlSb290TmFtZXNwYWNlPSJtYWtlX2J1aWxkaW5mbyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFrZV9idWlsZGluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiBiL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGJmMTBkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlQcm9qZWN0R1VJRD0ie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotCVJvb3ROYW1lc3BhY2U9Im1ha2VfdmVyc2lvbmluZm8iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250LmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnQuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnRfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1ha2VfdmVyc2lvbmluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wY2J1aWxkLnNsbiBiL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNhNGFhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsNTYwICswLDAgQEAKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDkuMDANCi0jIFZpc3VhbCBTdHVkaW8gMjAwNQ0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9ID0ge0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX3ZlcnNpb25pbmZvIiwgIm1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiwgIntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmUiLCAicHl0aG9uY29yZS52Y3Byb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9ID0ge0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0NCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9ID0ge0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmNwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gIlNvbHV0aW9uIEl0ZW1zIiwgIlNvbHV0aW9uIEl0ZW1zIiwgIns1NTNFQzMzRS05ODE2LTQ5OTYtQTY2MC01RDYxODZBMEIwQjN9Ig0KLQlQcm9qZWN0U2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHByZVByb2plY3QNCi0JCS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMgPSAuLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotCQlyZWFkbWUudHh0ID0gcmVhZG1lLnR4dA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjcHJvaiIsICJ7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXMiLCAiX2N0eXBlcy52Y3Byb2oiLCAiezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzX3Rlc3QiLCAiX2N0eXBlc190ZXN0LnZjcHJvaiIsICJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9lbGVtZW50dHJlZSIsICJfZWxlbWVudHRyZWUudmNwcm9qIiwgInsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX21zaSIsICJfbXNpLnZjcHJvaiIsICJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zb2NrZXQiLCAiX3NvY2tldC52Y3Byb2oiLCAiezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3FsaXRlMyIsICJfc3FsaXRlMy52Y3Byb2oiLCAiezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9ID0ge0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3NsIiwgIl9zc2wudmNwcm9qIiwgIntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSA9IHs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3Byb2oiLCAiezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiejIiLCAiYnoyLnZjcHJvaiIsICJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNlbGVjdCIsICJzZWxlY3QudmNwcm9qIiwgInsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidW5pY29kZWRhdGEiLCAidW5pY29kZWRhdGEudmNwcm9qIiwgIntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHlleHBhdCIsICJweWV4cGF0LnZjcHJvaiIsICJ7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJkaXN0X3dpbmluc3QiLCAiYmRpc3Rfd2luaW5zdC52Y3Byb2oiLCAie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2hhc2hsaWIiLCAiX2hhc2hsaWIudmNwcm9qIiwgIns0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3FsaXRlMyIsICJzcWxpdGUzLnZjcHJvaiIsICJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tdWx0aXByb2Nlc3NpbmciLCAiX211bHRpcHJvY2Vzc2luZy52Y3Byb2oiLCAiezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2wiLCAic3NsLnZjcHJvaiIsICJ7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImtpbGxfcHl0aG9uIiwgImtpbGxfcHl0aG9uLnZjcHJvaiIsICJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQotCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQNCi0JCVBHSW5zdHJ1bWVudHxXaW4zMiA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJUEdJbnN0cnVtZW50fHg2NCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCVBHVXBkYXRlfFdpbjMyID0gUEdVcGRhdGV8V2luMzINCi0JCVBHVXBkYXRlfHg2NCA9IFBHVXBkYXRlfHg2NA0KLQkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzINCi0JCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KLQkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcyBiL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGM1ZjE4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBnaW5zdHJ1bWVudCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKE91dERpclBHSSkiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC1wZ2lcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJRmF2b3JTaXplT3JTcGVlZD0iMiINCi0JCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KLQkJRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz0iZmFsc2UiDQotCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiDQotCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQotCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCi0JCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSIyIg0KLQkJUHJvZmlsZUd1aWRlZERhdGFiYXNlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcJChUYXJnZXROYW1lKS5wZ2QiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSlcJChUYXJnZXROYW1lKS5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Ik91dERpclBHSSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzIGIvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZjZmMyZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBndXBkYXRlIg0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnb1wiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFNvbHV0aW9uRGlyKVxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJQWRkaXRpb25hbE1hbmlmZXN0RGVwZW5kZW5jaWVzPSIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSI0Ig0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWQudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGMyMWUxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMiINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5weWQiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucGRiIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCUVtYmVkTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQlDb21tYW5kTGluZT0iIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWRfZC52c3Byb3BzIGIvUEMvVlM4LjAvcHlkX2QudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzYTMwYi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWRfZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZF9kIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjAiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMyINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnB5ZCINCi0JCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnBkYiINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJQ29tbWFuZExpbmU9IiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWV4cGF0LnZjcHJvaiBiL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTllNGVjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWV4cGF0Ig0KLQlQcm9qZWN0R1VJRD0ie0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0iDQotCVJvb3ROYW1lc3BhY2U9InB5ZXhwYXQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzFiZDNmLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5cHJvamVjdCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbk5hbWUpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsgLi5cLi5cUEMiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCVdhcm5pbmdMZXZlbD0iMyINCi0JCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQlDb21waWxlQXM9IjAiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiDQotCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCVN1YlN5c3RlbT0iMiINCi0JCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxJbmNsdWRlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzMiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKVxweXRob24uZXhlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJleHRlcm5hbHNEaXIiDQotCQlWYWx1ZT0iLi5cLi5cLi4iDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InNxbGl0ZTNEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjYuMjEiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImJ6MkRpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjYiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGsiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjREaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrNjQiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrTGliIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0a0RpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjRMaWIiDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliICQodGNsdGs2NERpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliRGVidWciDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2ogYi9QQy9WUzguMC9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjQ3YzBlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbiINCi0JUHJvamVjdEdVSUQ9IntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob25fZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIxMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YmI5ZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE5MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbmNvcmUiDQotCVByb2plY3RHVUlEPSJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUm9vdE5hbWVzcGFjZT0icHl0aG9uY29yZSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgKCRJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSW5jbHVkZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFic3RyYWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFjY3UuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYXNkbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYml0c2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJvb2xvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNfbWV0aG9kcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlYXJyYXlvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2VsbG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjZXZhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjbGFzc29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvZGVjcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb21waWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvbXBsZXhvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGF0ZXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGVzY3JvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGljdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkeW5hbWljX2Fubm90YXRpb25zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGVudW1vYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZXJyY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxldmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZpbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmlsZXV0aWxzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZsb2F0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZvcm1hdHRlcl91bmljb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZyYW1lb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZ1bmNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ2Vub2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1pbml0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1tYXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaW1wb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGludHJjaGVjay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpdGVyb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxpc3RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ2ludHJlcHIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtYXJzaGFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1lbW9yeW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRhZ3JhbW1hci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRob2RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbW9kc3VwcG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtb2R1bGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbm9kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb2JqaW1wbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvcGNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb3NkZWZzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhcnNldG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhdGNobGV2ZWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGdlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwZ2VuaGVhZGVycy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweV9jdXJzZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlhcmVuYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWNhcHN1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljdHlwZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWRlYnVnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXJyb3JzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlmcGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlnZXRvcHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltYWN0b29sYm94LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWF0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltZW0uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlwb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RhdGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJjbXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJ0b2QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZHRvYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxQeXRob24tYXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXFB5dGhvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRob25ydW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aHJlYWQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccmFuZ2VvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc2V0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHNsaWNlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN0cnVjdG1lbWJlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzdHJ1Y3RzZXEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3ltdGFibGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3lzbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRpbWVmdW5jcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0b2tlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0cmFjZWJhY2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdHVwbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdWNuaGFzaC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx1bmljb2Rlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik1vZHVsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jc3YuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2pzb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9waWNrbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJfaW8iDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJ6bGliIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiDQotCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmaXhlZC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5pbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6bGliLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9ImNqa2NvZGVjcyINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGFsZ19qaXN4MDIwMS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGNqa2NvZGVjcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGVtdV9qaXN4MDIxM18yMDAwLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfY24uaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19oay5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19qcC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2tyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfdHcuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik9iamVjdHMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhY2N1LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcY291bnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGZhc3RzZWFyY2guaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmluZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGV0eXBlX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlBhcnNlciINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYWNjZWxlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGJpdHNldC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNldG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQQyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfc3VicHJvY2Vzcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcd2lucmVnLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xjb25maWcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGRsX250LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xlcnJtYXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGdldHBhdGhwLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtc3ZjcnRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5Y29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQeXRob24iDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXF93YXJuaW5ncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzZGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNldmFsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29kZWNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29tcGlsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGVycm9ycy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZpbGV1dGlscy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnJvemVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnV0dXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0YXJncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0b3B0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ3JhbWluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbWFyc2hhbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccGVlcGhvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWFyZW5hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHltYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdGF0ZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RyY21wLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJ0b2QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHJhbmRvbS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5bXRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkX250LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdHJhY2ViYWNrLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fbnQucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2ogYi9QQy9WUzguMC9weXRob253LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzN2I3OC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob253LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHl0aG9udyINCi0JUHJvamVjdEdVSUQ9IntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbndfZC5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzIGIvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGRlZjkwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJyZWxlYXNlIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob24uZXhlIg0KLQkvPgkNCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcm1weWMucHkgYi9QQy9WUzguMC9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThlMTcwNS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uLy4uL0xpYiIpCi1wcmludChucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcnQuYmF0IGIvUEMvVlM4LjAvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI5ZTE5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1yZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1yZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1yZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1yZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLXJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC1PIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1yZW0gdHdpY2UsIGFuZAotcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotcmVtCi1yZW0gQ29uZnVzaW5nOiAgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBsaWtlCi1yZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlCi1yZW0gdGhlbiB5b3UgaGF2ZSB0byBxdW90ZSBpdCBvbiB0aGUgcnQgbGluZSwgbGlrZQotcmVtICAgICBydCAtdSAibmV0d29yayxsYXJnZWZpbGUiCi0KLXNldGxvY2FsCi0KLXNldCBleGU9cHl0aG9uCi1zZXQgcW1vZGU9Ci1zZXQgZGFzaE89Ci1QQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzguMC9zZWxlY3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzFmYzE2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNlbGVjdCINCi0JUHJvamVjdEdVSUQ9InsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlSb290TmFtZXNwYWNlPSJzZWxlY3QiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmJlNWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUm9vdE5hbWVzcGFjZT0ic3FsaXRlMyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5cZGVidWcudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90Oy4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTNleHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMgYi9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDAzMjguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSINCi0JCVdhcm5pbmdMZXZlbD0iMSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc3NsLnZjcHJvaiBiL1BDL1ZTOC4wL3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDYzNWUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic3NsIg0KLQlQcm9qZWN0R1VJRD0ie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQotCVJvb3ROYW1lc3BhY2U9InNzbCINCi0JS2V5d29yZD0iTWFrZUZpbGVQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjdkMjMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ1bmljb2RlZGF0YSINCi0JUHJvamVjdEdVSUQ9IntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlSb290TmFtZXNwYWNlPSJ1bmljb2RlZGF0YSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGFfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZW5hbWVfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTRkMjA2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvaiBiL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3OTM1Ny4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9IndpbnNvdW5kIg0KLQlQcm9qZWN0R1VJRD0iezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQotCVJvb3ROYW1lc3BhY2U9IndpbnNvdW5kIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnNvdW5kLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAveDY0LnZzcHJvcHMgYi9QQy9WUzguMC94NjQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY4OGQ0NC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC94NjQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJhbWQ2NCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKVxhbWQ2NFwiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lONjQ7X01fWDY0Ig0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKEhPU1RfUFlUSE9OKSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvaiBiL1BDL1ZTOS4wL19zaGEzLnZjcHJvagpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBQQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qCnJlbmFtZSB0byBQQy9WUzkuMC9fc2hhMy52Y3Byb2oKaW5kZXggMDk3MjQxZS4uNWZlMThkNSAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvagorKysgYi9QQy9WUzkuMC9fc2hhMy52Y3Byb2oKQEAgLTEsMTAgKzEsMTAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KIDxWaXN1YWxTdHVkaW9Qcm9qZWN0DQogCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlc190ZXN0Ig0KKwlWZXJzaW9uPSI5LDAwIg0KKwlOYW1lPSJfc2hhMyINCisJUHJvamVjdEdVSUQ9InswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9Ig0KKwlSb290TmFtZXNwYWNlPSJfc2hhMyINCiAJS2V5d29yZD0iV2luMzJQcm9qIg0KIAlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQogCT4NCkBAIC01MDAsMTggKzUwMCwxMCBAQAogCTwvUmVmZXJlbmNlcz4NCiAJPEZpbGVzPg0KIAkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCiAJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQogCQkJPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NoYTNcc2hhM21vZHVsZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCmluZGV4IGY3MTAwZjEuLjgyYzU3YWUgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagorKysgYi9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKQEAgLTU1NSwxMCArNTU1LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19zc2wudmNwcm9qIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKaW5kZXggOTdhYTI5NC4uYjQ3ZGMyNyAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvX3NzbC52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCisJVmVyc2lvbj0iOSwwMCINCiAJTmFtZT0iX3NzbCINCiAJUHJvamVjdEdVSUQ9IntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KIAlSb290TmFtZXNwYWNlPSJfc3NsIg0KQEAgLTU2LDcgKzU2LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTM2OCw3ICszNjgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00MzEsNyArNDMxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQogCQkJLz4NCiAJCQk8VG9vbA0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2ogYi9QQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBQQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCnJlbmFtZSB0byBQQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagppbmRleCA3NmFkMmQ4Li4xNGQ5MTBkIDEwMDY0NAotLS0gYS9QQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCisrKyBiL1BDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCkBAIC0xLDEwICsxLDEwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3Rlc3RjYXBpIg0KLQlQcm9qZWN0R1VJRD0iezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVJvb3ROYW1lc3BhY2U9Il90ZXN0Y2FwaSINCisJVmVyc2lvbj0iOS4wMCINCisJTmFtZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZSINCisJUHJvamVjdEdVSUQ9InszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KKwlSb290TmFtZXNwYWNlPSJfdGVzdGltcG9ydG11bHRpcGxlIg0KIAlLZXl3b3JkPSJXaW4zMlByb2oiDQogCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCiAJPg0KQEAgLTUxMSw3ICs1MTEsNyBAQAogCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KIAkJCT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM5LjAva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42MDQ3MzFmIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCisrKyBiL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAogICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zM1tfZF0uZGxsKSwKKyAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zNFtfZF0uZGxsKSwKICAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCiAgICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKICAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcGNidWlsZC5zbG4gYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgppbmRleCA4ZjhjYmI2Li4zYjczZmNlIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9wY2J1aWxkLnNsbgorKysgYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgpAQCAtMjAsMTEgKzIwLDYgQEAKIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KIAlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJTb2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NTUzRUMzM0UtOTgxNi00OTk2LUE2NjAtNUQ2MTg2QTBCMEIzfSINCkBAIC04Nyw2ICs4MiwxMSBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsICJfdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvaiIsICJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KKwlFbmRQcm9qZWN0U2VjdGlvbg0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjcHJvaiIsICJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCiAJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KQEAgLTE1Miw2ICsxNTIsOCBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NoYTMiLCAiX3NoYTMudmNwcm9qIiwgInswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9Ig0KK0VuZFByb2plY3QNCiBHbG9iYWwNCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24NCiAJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzINCkBAIC00MjAsNiArNDIyLDIyIEBACiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQpAQCAtNjUxLDYgKzY2OSwyMiBAQAogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCmluZGV4IGZmMzc1OWUuLmVkNTQ2NGQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCisrKyBiL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCkBAIC0zOCw3ICszOCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjMzIg0KKwkJVmFsdWU9InB5dGhvbjM0Ig0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeXRob25FeGUiDQpAQCAtNTAsNyArNTAsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9InNxbGl0ZTNEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjcuMTIiDQorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjguMSINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iYnoyRGlyIg0KQEAgLTU4LDcgKzU4LDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJsem1hRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuMyINCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilceHotNS4wLjUiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Im9wZW5zc2xEaXIiDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagppbmRleCA5ZmI2M2ZmLi5jZjYwNDcwIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xvcGVyYXRvci5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX29wZXJhdG9yLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkBAIC0xMTU1LDYgKzExNTUsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmVfbGliLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdGF0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTI0Miw3NCArMTI1OCw2IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIg0KLQkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTU4Nyw2ICsxNTM1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTg1YjAwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL19tc2kuYyBiL1BDL19tc2kuYwppbmRleCAwYjViOTRlLi42YTk5YjQwIDEwMDY0NAotLS0gYS9QQy9fbXNpLmMKKysrIGIvUEMvX21zaS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBGTkZDSU9QRU4oY2Jfb3BlbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcsIHBtb2RlKTsKKyAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcgfCBPX05PSU5IRVJJVCwgcG1vZGUpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjMsNyArNjMsNyBAQAogCiBzdGF0aWMgRk5GQ0lSRUFEKGNiX3JlYWQpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZChoZiwgbWVtb3J5LCBjYik7CisgICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZCgoaW50KWhmLCBtZW1vcnksIGNiKTsKICAgICBpZiAocmVzdWx0ICE9IGNiKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcxLDcgKzcxLDcgQEAKIAogc3RhdGljIEZORkNJV1JJVEUoY2Jfd3JpdGUpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfd3JpdGUoaGYsIG1lbW9yeSwgY2IpOworICAgIFVJTlQgcmVzdWx0ID0gKFVJTlQpX3dyaXRlKChpbnQpaGYsIG1lbW9yeSwgY2IpOwogICAgIGlmIChyZXN1bHQgIT0gY2IpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzksNyArNzksNyBAQAogCiBzdGF0aWMgRk5GQ0lDTE9TRShjYl9jbG9zZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKGhmKTsKKyAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKChpbnQpaGYpOwogICAgIGlmIChyZXN1bHQgIT0gMCkKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04Nyw3ICs4Nyw3IEBACiAKIHN0YXRpYyBGTkZDSVNFRUsoY2Jfc2VlaykKIHsKLSAgICBsb25nIHJlc3VsdCA9IChsb25nKV9sc2VlayhoZiwgZGlzdCwgc2Vla3R5cGUpOworICAgIGxvbmcgcmVzdWx0ID0gKGxvbmcpX2xzZWVrKChpbnQpaGYsIGRpc3QsIHNlZWt0eXBlKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKIAotICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkpOworICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkgfCBPX05PSU5IRVJJVCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCogZmNpY3JlYXRlKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBhcmdzKQpAQCAtMTAzMCw0MCArMTAzMCw0MCBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lEQk9QRU5fVFJBTlNBQ1QiLCAoaW50KU1TSURCT1BFTl9UUkFOU0FDVCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSURCT1BFTl9QQVRDSEZJTEUiLCAoaW50KU1TSURCT1BFTl9QQVRDSEZJTEUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSUNPTElORk9fTkFNRVMiLCBNU0lDT0xJTkZPX05BTUVTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJQ09MSU5GT19UWVBFUyIsIE1TSUNPTElORk9fVFlQRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fTkFNRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fVFlQRVMpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9TRUVLIiwgTVNJTU9ESUZZX1NFRUspOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfUkVGUkVTSCIsIE1TSU1PRElGWV9SRUZSRVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVCIsIE1TSU1PRElGWV9JTlNFUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVVBEQVRFIiwgTVNJTU9ESUZZX1VQREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9BU1NJR04iLCBNU0lNT0RJRllfQVNTSUdOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1JFUExBQ0UiLCBNU0lNT0RJRllfUkVQTEFDRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9NRVJHRSIsIE1TSU1PRElGWV9NRVJHRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9ERUxFVEUiLCBNU0lNT0RJRllfREVMRVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkiLCBNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURSIsIE1TSU1PRElGWV9WQUxJREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURV9ORVciLCBNU0lNT0RJRllfVkFMSURBVEVfTkVXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEIiwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0RFTEVURSIsIE1TSU1PRElGWV9WQUxJREFURV9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9TRUVLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfUkVGUkVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1VQREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0FTU0lHTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1JFUExBQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9NRVJHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX05FVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfREVMRVRFKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09ERVBBR0UiLCBQSURfQ09ERVBBR0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVElUTEUiLCBQSURfVElUTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfU1VCSkVDVCIsIFBJRF9TVUJKRUNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0FVVEhPUiIsIFBJRF9BVVRIT1IpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfS0VZV09SRFMiLCBQSURfS0VZV09SRFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09NTUVOVFMiLCBQSURfQ09NTUVOVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVEVNUExBVEUiLCBQSURfVEVNUExBVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVEFVVEhPUiIsIFBJRF9MQVNUQVVUSE9SKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1JFVk5VTUJFUiIsIFBJRF9SRVZOVU1CRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVFBSSU5URUQiLCBQSURfTEFTVFBSSU5URUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ1JFQVRFX0RUTSIsIFBJRF9DUkVBVEVfRFRNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0xBU1RTQVZFX0RUTSIsIFBJRF9MQVNUU0FWRV9EVE0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfUEFHRUNPVU5UIiwgUElEX1BBR0VDT1VOVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9XT1JEQ09VTlQiLCBQSURfV09SRENPVU5UKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0NIQVJDT1VOVCIsIFBJRF9DSEFSQ09VTlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQVBQTkFNRSIsIFBJRF9BUFBOQU1FKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1NFQ1VSSVRZIiwgUElEX1NFQ1VSSVRZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ09ERVBBR0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9USVRMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NVQkpFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9BVVRIT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9LRVlXT1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NPTU1FTlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfVEVNUExBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUQVVUSE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUkVWTlVNQkVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFBSSU5URUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DUkVBVEVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFNBVkVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUEFHRUNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfV09SRENPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ0hBUkNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQVBQTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NFQ1VSSVRZKTsKIAogICAgIE1TSUVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uICgiX21zaS5NU0lFcnJvciIsIE5VTEwsIE5VTEwpOwogICAgIGlmICghTVNJRXJyb3IpCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCmluZGV4IGMxMWQ0NWQuLmU5NDAxZDkgMTAwNjQ0Ci0tLSBhL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCisrKyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCkBAIC03NDMsNyArNzQzLDcgQEAKICAgICBpZiAocGF0aG5hbWUgPT0gTlVMTCB8fCBwYXRobmFtZVswXSA9PSAnXDAnKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIGZoID0gb3BlbihwYXRobmFtZSwgX09fUkRPTkxZKTsKKyAgICBmaCA9IG9wZW4ocGF0aG5hbWUsIF9PX1JET05MWSB8IE9fTk9JTkhFUklUKTsKICAgICBpZiAoLTEgPT0gZmgpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBwb3N0aW5zdGFsbC1zY3JpcHQgJXNcbiIsCiAgICAgICAgICAgICBwYXRobmFtZSk7CmRpZmYgLS1naXQgYS9QQy9jb25maWcuYyBiL1BDL2NvbmZpZy5jCmluZGV4IDU3YjUwNzMuLjcyYzkzODEgMTAwNjQ0Ci0tLSBhL1BDL2NvbmZpZy5jCisrKyBiL1BDL2NvbmZpZy5jCkBAIC0xMywxMSArMTMsMTIgQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2NtYXRoKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZXJybm8odm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mYXVsdGhhbmRsZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2VtYWxsb2Modm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9nYyh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X21hdGgodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fbWQ1KHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbnQodm9pZCk7Ci1leHRlcm4gUHlPYmplY3QqIFB5SW5pdF9vcGVyYXRvcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19vcGVyYXRvcih2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X3NpZ25hbCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zaGExKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTI1Nih2b2lkKTsKQEAgLTY0LDYgKzY1LDggQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2F0ZXhpdCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogX1B5V2FybmluZ3NfSW5pdCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zdHJpbmcodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RhdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19vcGNvZGUodm9pZCk7CiAKIC8qIHRvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5IG1hcmtlciBmb3IgYWRkaXRpb25hbCAiZXh0ZXJuIiAqLwogLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCkBAIC04Nyw3ICs5MCw3IEBACiAgICAgeyJnYyIsIFB5SW5pdF9nY30sCiAgICAgeyJtYXRoIiwgUHlJbml0X21hdGh9LAogICAgIHsibnQiLCBQeUluaXRfbnR9LCAvKiBVc2UgdGhlIE5UIG9zIGZ1bmN0aW9ucywgbm90IHBvc2l4ICovCi0gICAgeyJvcGVyYXRvciIsIFB5SW5pdF9vcGVyYXRvcn0sCisgICAgeyJfb3BlcmF0b3IiLCBQeUluaXRfX29wZXJhdG9yfSwKICAgICB7InNpZ25hbCIsIFB5SW5pdF9zaWduYWx9LAogICAgIHsiX21kNSIsIFB5SW5pdF9fbWQ1fSwKICAgICB7Il9zaGExIiwgUHlJbml0X19zaGExfSwKQEAgLTEwMSw2ICsxMDQsNyBAQAogICAgIHsibXN2Y3J0IiwgUHlJbml0X21zdmNydH0sCiAgICAgeyJfbG9jYWxlIiwgUHlJbml0X19sb2NhbGV9LAogI2VuZGlmCisgICAgeyJfdHJhY2VtYWxsb2MiLCBQeUluaXRfX3RyYWNlbWFsbG9jfSwKICAgICAvKiBYWFggU2hvdWxkIF93aW5hcGkgZ28gaW4gYSBXSU4zMiBibG9jaz8gIG5vdCBXSU42ND8gKi8KICAgICB7Il93aW5hcGkiLCBQeUluaXRfX3dpbmFwaX0sCiAKQEAgLTE1NCw2ICsxNTgsOCBAQAogICAgIHsiX2lvIiwgUHlJbml0X19pb30sCiAgICAgeyJfcGlja2xlIiwgUHlJbml0X19waWNrbGV9LAogICAgIHsiYXRleGl0IiwgUHlJbml0X2F0ZXhpdH0sCisgICAgeyJfc3RhdCIsIFB5SW5pdF9fc3RhdH0sCisgICAgeyJfb3Bjb2RlIiwgUHlJbml0X19vcGNvZGV9LAogCiAgICAgLyogU2VudGluZWwgKi8KICAgICB7MCwgMH0KZGlmZiAtLWdpdCBhL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2ogYi9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCmluZGV4IGZiYTAwYjYuLmRmMzYzNDEgMTAwNjQ0Ci0tLSBhL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKKysrIGIvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagpAQCAtMzksNyArMzksNyBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzMubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zNC5saWIiDQogCQkJCU91dHB1dEZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnB5ZCINCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvZXhwb3J0OmluaXRleGFtcGxlIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zM19kLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzRfZC5saWIiDQogCQkJCU91dHB1dEZpbGU9Ii5cRGVidWcvZXhhbXBsZV9kLnB5ZCINCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQpkaWZmIC0tZ2l0IGEvUEMvZ2V0cGF0aHAuYyBiL1BDL2dldHBhdGhwLmMKaW5kZXggYjViZjMyNS4uZGViNDBlNyAxMDA2NDQKLS0tIGEvUEMvZ2V0cGF0aHAuYworKysgYi9QQy9nZXRwYXRocC5jCkBAIC0xLDYgKzEsNiBAQAogCiAvKiBSZXR1cm4gdGhlIGluaXRpYWwgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLwotLyogVXNlZCBieSBET1MsIE9TLzIsIFdpbmRvd3MgMy4xLCBXaW5kb3dzIDk1Lzk4LCBXaW5kb3dzIE5ULiAqLworLyogVXNlZCBieSBET1MsIFdpbmRvd3MgMy4xLCBXaW5kb3dzIDk1Lzk4LCBXaW5kb3dzIE5ULiAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBQQVRIIFJVTEVTIEZPUiBXSU5ET1dTOgpAQCAtMjQ1LDkgKzI0NSw5IEBACiAgICAgLyogVHJpZWQgdG8gdXNlIHN5c2dldCgid2ludmVyIikgYnV0IGhlcmUgaXMgdG9vIGVhcmx5IDotKCAqLwogICAgIHZlcnNpb25MZW4gPSBzdHJsZW4oUHlXaW5fRExMVmVyc2lvblN0cmluZyk7CiAgICAgLyogU3BhY2UgZm9yIGFsbCB0aGUgY2hhcnMsIHBsdXMgb25lIFwwICovCi0gICAga2V5QnVmID0ga2V5QnVmUHRyID0gbWFsbG9jKHNpemVvZihrZXlQcmVmaXgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdDSEFSKSoodmVyc2lvbkxlbi0xKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrZXlTdWZmaXgpKTsKKyAgICBrZXlCdWYgPSBrZXlCdWZQdHIgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKGtleVByZWZpeCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV0NIQVIpKih2ZXJzaW9uTGVuLTEpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtleVN1ZmZpeCkpOwogICAgIGlmIChrZXlCdWY9PU5VTEwpIGdvdG8gZG9uZTsKIAogICAgIG1lbWNweShrZXlCdWZQdHIsIGtleVByZWZpeCwgc2l6ZW9mKGtleVByZWZpeCktc2l6ZW9mKFdDSEFSKSk7CkBAIC0yNzEsNyArMjcxLDcgQEAKICAgICAvKiBBbGxvY2F0ZSBhIHRlbXAgYXJyYXkgb2YgY2hhciBidWZmZXJzLCBzbyB3ZSBvbmx5IG5lZWQgdG8gbG9vcAogICAgICAgIHJlYWRpbmcgdGhlIHJlZ2lzdHJ5IG9uY2UKICAgICAqLwotICAgIHBwUGF0aHMgPSBtYWxsb2MoIHNpemVvZihXQ0hBUiAqKSAqIG51bUtleXMgKTsKKyAgICBwcFBhdGhzID0gUHlNZW1fUmF3TWFsbG9jKCBzaXplb2YoV0NIQVIgKikgKiBudW1LZXlzICk7CiAgICAgaWYgKHBwUGF0aHM9PU5VTEwpIGdvdG8gZG9uZTsKICAgICBtZW1zZXQocHBQYXRocywgMCwgc2l6ZW9mKFdDSEFSICopICogbnVtS2V5cyk7CiAgICAgLyogTG9vcCBvdmVyIGFsbCBzdWJrZXlzLCBhbGxvY2F0aW5nIGEgdGVtcCBzdWItYnVmZmVyLiAqLwpAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgICAgIC8qIEZpbmQgdGhlIHZhbHVlIG9mIHRoZSBidWZmZXIgc2l6ZSwgbWFsbG9jLCB0aGVuIHJlYWQgaXQgKi8KICAgICAgICAgUmVnUXVlcnlWYWx1ZUV4VyhzdWJLZXksIE5VTEwsIDAsIE5VTEwsIE5VTEwsICZyZXFkU2l6ZSk7CiAgICAgICAgIGlmIChyZXFkU2l6ZSkgewotICAgICAgICAgICAgcHBQYXRoc1tpbmRleF0gPSBtYWxsb2MocmVxZFNpemUpOworICAgICAgICAgICAgcHBQYXRoc1tpbmRleF0gPSBQeU1lbV9SYXdNYWxsb2MocmVxZFNpemUpOwogICAgICAgICAgICAgaWYgKHBwUGF0aHNbaW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgUmVnUXVlcnlWYWx1ZUV4VyhzdWJLZXksIE5VTEwsIDAsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUEJZVEUpcHBQYXRoc1tpbmRleF0sCkBAIC0zMDgsNyArMzA4LDcgQEAKICAgICBpZiAoZGF0YVNpemUgPT0gMCkgZ290byBkb25lOwogCiAgICAgLyogb3JpZ2luYWwgZGF0YXNpemUgZnJvbSBSZWdRdWVyeUluZm8gZG9lc24ndCBpbmNsdWRlIHRoZSBcMCAqLwotICAgIGRhdGFCdWYgPSBtYWxsb2MoKGRhdGFTaXplKzEpICogc2l6ZW9mKFdDSEFSKSk7CisgICAgZGF0YUJ1ZiA9IFB5TWVtX1Jhd01hbGxvYygoZGF0YVNpemUrMSkgKiBzaXplb2YoV0NIQVIpKTsKICAgICBpZiAoZGF0YUJ1ZikgewogICAgICAgICBXQ0hBUiAqc3pDdXIgPSBkYXRhQnVmOwogICAgICAgICBEV09SRCByZXFkU2l6ZSA9IGRhdGFTaXplOwpAQCAtMzQ2LDE0ICszNDYsMTMgQEAKIGRvbmU6CiAgICAgLyogTG9vcCBmcmVlaW5nIG15IHRlbXAgYnVmZmVycyAqLwogICAgIGlmIChwcFBhdGhzKSB7Ci0gICAgICAgIGZvcihpbmRleD0wO2luZGV4PG51bUtleXM7aW5kZXgrKykKLSAgICAgICAgICAgIGlmIChwcFBhdGhzW2luZGV4XSkgZnJlZShwcFBhdGhzW2luZGV4XSk7Ci0gICAgICAgIGZyZWUocHBQYXRocyk7CisgICAgICAgIGZvcihpbmRleD0wOyBpbmRleDxudW1LZXlzOyBpbmRleCsrKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwcFBhdGhzW2luZGV4XSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocHBQYXRocyk7CiAgICAgfQogICAgIGlmIChuZXdLZXkpCiAgICAgICAgIFJlZ0Nsb3NlS2V5KG5ld0tleSk7Ci0gICAgaWYgKGtleUJ1ZikKLSAgICAgICAgZnJlZShrZXlCdWYpOworICAgIFB5TWVtX1Jhd0ZyZWUoa2V5QnVmKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogI2VuZGlmIC8qIFB5X0VOQUJMRV9TSEFSRUQgKi8KQEAgLTQzNCw3ICs0MzMsNyBAQAogICAgICAgICBjaGFyICogcCA9IGZnZXRzKGJ1ZmZlciwgTUFYUEFUSExFTioyLCBlbnZfZmlsZSk7CiAgICAgICAgIHdjaGFyX3QgdG1wYnVmZmVyW01BWFBBVEhMRU4qMisxXTsKICAgICAgICAgUHlPYmplY3QgKiBkZWNvZGVkOwotICAgICAgICBpbnQgbjsKKyAgICAgICAgc2l6ZV90IG47CiAKICAgICAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjE2LDcgKzYxNSw3IEBACiAgICAgaWYgKGVudnBhdGggIT0gTlVMTCkKICAgICAgICAgYnVmc3ogKz0gd2NzbGVuKGVudnBhdGgpICsgMTsKIAotICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZiA9IG1hbGxvYyhidWZzeipzaXplb2Yod2NoYXJfdCkpOworICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZiA9IFB5TWVtX1Jhd01hbGxvYyhidWZzeipzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBtYWxsb2MgZHluYW1pYyBQWVRIT05QQVRILlxuIik7CkBAIC02MjksMTAgKzYyOCw4IEBACiAgICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwogICAgICAgICB9CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICBpZiAobWFjaGluZXBhdGgpCi0gICAgICAgICAgICBmcmVlKG1hY2hpbmVwYXRoKTsKLSAgICAgICAgaWYgKHVzZXJwYXRoKQotICAgICAgICAgICAgZnJlZSh1c2VycGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobWFjaGluZXBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHVzZXJwYXRoKTsKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NTIsMTMgKzY0OSwxMyBAQAogICAgICAgICB3Y3NjcHkoYnVmLCB1c2VycGF0aCk7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIGZyZWUodXNlcnBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHVzZXJwYXRoKTsKICAgICB9CiAgICAgaWYgKG1hY2hpbmVwYXRoKSB7CiAgICAgICAgIHdjc2NweShidWYsIG1hY2hpbmVwYXRoKTsKICAgICAgICAgYnVmID0gd2NzY2hyKGJ1ZiwgTCdcMCcpOwogICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgZnJlZShtYWNoaW5lcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobWFjaGluZXBhdGgpOwogICAgIH0KICAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghc2tpcGRlZmF1bHQpIHsKQEAgLTc0NSw3ICs3NDIsNyBAQAogUHlfU2V0UGF0aChjb25zdCB3Y2hhcl90ICpwYXRoKQogewogICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkgewotICAgICAgICBmcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobW9kdWxlX3NlYXJjaF9wYXRoKTsKICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKICAgICB9CiAgICAgaWYgKHBhdGggIT0gTlVMTCkgewpAQCAtNzUzLDEwICs3NTAsMTAgQEAKICAgICAgICAgd2NoYXJfdCAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7CiAgICAgICAgIHdjc25jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOwogICAgICAgICBwcmVmaXhbMF0gPSBMJ1wwJzsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gbWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpCiAgICAgICAgICAgICB3Y3NjcHkobW9kdWxlX3NlYXJjaF9wYXRoLCBwYXRoKTsKLQl9CisgICAgfQogfQogCiB3Y2hhcl90ICoKZGlmZiAtLWdpdCBhL1BDL2xhdW5jaGVyLmMgYi9QQy9sYXVuY2hlci5jCmluZGV4IDIxNmE1NjIuLmVlM2NkNDQgMTAwNjQ0Ci0tLSBhL1BDL2xhdW5jaGVyLmMKKysrIGIvUEMvbGF1bmNoZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBWaW5heSBTYWppcC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFZpbmF5IFNhamlwLgogICogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgogICoKICAqIEJhc2VkIG9uIHRoZSB3b3JrIG9mOgpAQCAtMTgsNyArMTgsMjggQEAKIAogLyogQnVpbGQgb3B0aW9ucy4gKi8KICNkZWZpbmUgU0tJUF9QUkVGSVgKLS8qICNkZWZpbmUgU0VBUkNIX1BBVEggKi8KKyNkZWZpbmUgU0VBUkNIX1BBVEgKKworLyogRXJyb3IgY29kZXMgKi8KKworI2RlZmluZSBSQ19OT19TVERfSEFORExFUyAgIDEwMAorI2RlZmluZSBSQ19DUkVBVEVfUFJPQ0VTUyAgIDEwMQorI2RlZmluZSBSQ19CQURfVklSVFVBTF9QQVRIIDEwMgorI2RlZmluZSBSQ19OT19QWVRIT04gICAgICAgIDEwMworI2RlZmluZSBSQ19OT19NRU1PUlkgICAgICAgIDEwNAorLyoKKyAqIFNDUklQVF9XUkFQUEVSIGlzIHVzZWQgdG8gY2hvb3NlIGJldHdlZW4gdHdvIHZhcmlhbnRzIG9mIGFuIGV4ZWN1dGFibGUgYnVpbHQKKyAqIGZyb20gdGhpcyBzb3VyY2UgZmlsZS4gSWYgbm90IGRlZmluZWQsIHRoZSBQRVAgMzk3IFB5dGhvbiBsYXVuY2hlciBpcyBidWlsdDsKKyAqIGlmIGRlZmluZWQsIGEgc2NyaXB0IGxhdW5jaGVyIG9mIHRoZSB0eXBlIHVzZWQgYnkgc2V0dXB0b29scyBpcyBidWlsdCwgd2hpY2gKKyAqIGxvb2tzIGZvciBhIHNjcmlwdCBuYW1lIHJlbGF0ZWQgdG8gdGhlIGV4ZWN1dGFibGUgbmFtZSBhbmQgcnVucyB0aGF0IHNjcmlwdAorICogd2l0aCB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uIGludGVycHJldGVyLgorICoKKyAqIFNDUklQVF9XUkFQUEVSIHNob3VsZCBiZSB1bmRlZmluZWQgaW4gdGhlIHNvdXJjZSwgYW5kIGRlZmluZWQgaW4gYSBWUyBwcm9qZWN0CisgKiB3aGljaCBidWlsZHMgdGhlIHNldHVwdG9vbHMtc3R5bGUgbGF1bmNoZXIuCisgKi8KKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorI2RlZmluZSBSQ19OT19TQ1JJUFQgICAgICAgIDEwNQorI2VuZGlmCiAKIC8qIEp1c3QgZm9yIG5vdyAtIHN0YXRpYyBkZWZpbml0aW9uICovCiAKQEAgLTMyLDMyICs1Myw2IEBACiAgICAgcmV0dXJuIHA7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQKLSAqIGFuZCB0byB0cmVhdCBibGFuayB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgYWJzZW50LgotICovCi1zdGF0aWMgd2NoYXJfdCAqIGdldF9lbnYod2NoYXJfdCAqIGtleSkKLXsKLSAgICAvKiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwganVzdCBsaWtlIGdldGVudiAqLwotICAgIHN0YXRpYyB3Y2hhcl90IGJ1ZlsyNTZdOwotICAgIERXT1JEIHJlc3VsdCA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmLCAyNTYpOwotCi0gICAgaWYgKHJlc3VsdCA+IDI1NSkgewotICAgICAgICAvKiBMYXJnZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWNjZXB0IHNvbWUgbGVha2FnZSAqLwotICAgICAgICB3Y2hhcl90ICpidWYyID0gKHdjaGFyX3QqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiAocmVzdWx0KzEpKTsKLSAgICAgICAgR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYyLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gYnVmMjsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IDApCi0gICAgICAgIC8qIEVpdGhlciBzb21lIGVycm9yLCBlLmcuIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQsCi0gICAgICAgICAgIG9yIGFuIGVtcHR5IGVudmlyb25tZW50IHZhcmlhYmxlLiAqLwotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBidWY7Ci19Ci0KLQogc3RhdGljIHZvaWQKIGRlYnVnKHdjaGFyX3QgKiBmb3JtYXQsIC4uLikKIHsKQEAgLTEwMCwxMSArOTUsNDAgQEAKICNpZiAhZGVmaW5lZChfV0lORE9XUykKICAgICBmd3ByaW50ZihzdGRlcnIsIEwiJXNcbiIsIG1lc3NhZ2UpOwogI2Vsc2UKLSAgICBNZXNzYWdlQm94KE5VTEwsIG1lc3NhZ2UsIFRFWFQoIlB5dGhvbiBMYXVuY2hlciBpcyBzb3JyeSB0byBzYXkgLi4uIiksIE1CX09LKTsgCisgICAgTWVzc2FnZUJveChOVUxMLCBtZXNzYWdlLCBURVhUKCJQeXRob24gTGF1bmNoZXIgaXMgc29ycnkgdG8gc2F5IC4uLiIpLAorICAgICAgICAgICAgICAgTUJfT0spOyAKICNlbmRpZgogICAgIEV4aXRQcm9jZXNzKHJjKTsKIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBzaW1wbGlmeSBtZW1vcnkgbWFuYWdlbWVudAorICogYW5kIHRvIHRyZWF0IGJsYW5rIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBhYnNlbnQuCisgKi8KK3N0YXRpYyB3Y2hhcl90ICogZ2V0X2Vudih3Y2hhcl90ICoga2V5KQoreworICAgIC8qIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLCBqdXN0IGxpa2UgZ2V0ZW52ICovCisgICAgc3RhdGljIHdjaGFyX3QgYnVmW0JVRlNJWkVdOworICAgIERXT1JEIHJlc3VsdCA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmLCBCVUZTSVpFKTsKKworICAgIGlmIChyZXN1bHQgPj0gQlVGU0laRSkgeworICAgICAgICAvKiBMYXJnZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWNjZXB0IHNvbWUgbGVha2FnZSAqLworICAgICAgICB3Y2hhcl90ICpidWYyID0gKHdjaGFyX3QqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiAocmVzdWx0KzEpKTsKKyAgICAgICAgaWYgKGJ1ZjIgPSBOVUxMKSB7CisgICAgICAgICAgICBlcnJvcihSQ19OT19NRU1PUlksIEwiQ291bGQgbm90IGFsbG9jYXRlIGVudmlyb25tZW50IGJ1ZmZlciIpOworICAgICAgICB9CisgICAgICAgIEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmMiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGJ1ZjI7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCA9PSAwKQorICAgICAgICAvKiBFaXRoZXIgc29tZSBlcnJvciwgZS5nLiBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5ELAorICAgICAgICAgICBvciBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gYnVmOworfQorCiAjaWYgZGVmaW5lZChfV0lORE9XUykKIAogI2RlZmluZSBQWVRIT05fRVhFQ1VUQUJMRSBMInB5dGhvbncuZXhlIgpAQCAtMTE1LDExICsxMzksNiBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBSQ19OT19TVERfSEFORExFUyAgIDEwMAotI2RlZmluZSBSQ19DUkVBVEVfUFJPQ0VTUyAgIDEwMQotI2RlZmluZSBSQ19CQURfVklSVFVBTF9QQVRIIDEwMgotI2RlZmluZSBSQ19OT19QWVRIT04gICAgICAgIDEwMwotCiAjZGVmaW5lIE1BWF9WRVJTSU9OX1NJWkUgICAgNAogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC00NTcsNiArNDc2LDUxIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisvKgorICogQ2hlY2sgZm9yIGEgc2NyaXB0IGxvY2F0ZWQgYWxvbmdzaWRlIHRoZSBleGVjdXRhYmxlCisgKi8KKworI2lmIGRlZmluZWQoX1dJTkRPV1MpCisjZGVmaW5lIFNDUklQVF9TVUZGSVggTCItc2NyaXB0LnB5dyIKKyNlbHNlCisjZGVmaW5lIFNDUklQVF9TVUZGSVggTCItc2NyaXB0LnB5IgorI2VuZGlmCisKK3N0YXRpYyB3Y2hhcl90IHdyYXBwZWRfc2NyaXB0X3BhdGhbTUFYX1BBVEhdOworCisvKiBMb2NhdGUgdGhlIHNjcmlwdCBiZWluZyB3cmFwcGVkLgorICoKKyAqIFRoaXMgY29kZSBzaG91bGQgc3RvcmUgdGhlIG5hbWUgb2YgdGhlIHdyYXBwZWQgc2NyaXB0IGluCisgKiB3cmFwcGVkX3NjcmlwdF9wYXRoLCBvciB0ZXJtaW5hdGUgdGhlIHByb2dyYW0gd2l0aCBhbiBlcnJvciBpZiB0aGVyZSBpcyBubworICogdmFsaWQgd3JhcHBlZCBzY3JpcHQgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK2xvY2F0ZV93cmFwcGVkX3NjcmlwdCgpCit7CisgICAgd2NoYXJfdCAqIHA7CisgICAgc2l6ZV90IHBsZW47CisgICAgRFdPUkQgYXR0cnM7CisKKyAgICBwbGVuID0gR2V0TW9kdWxlRmlsZU5hbWVXKE5VTEwsIHdyYXBwZWRfc2NyaXB0X3BhdGgsIE1BWF9QQVRIKTsKKyAgICBwID0gd2NzcmNocih3cmFwcGVkX3NjcmlwdF9wYXRoLCBMJy4nKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIGRlYnVnKEwiR2V0TW9kdWxlRmlsZU5hbWVXIHJldHVybmVkIHZhbHVlIGhhcyBubyBleHRlbnNpb246ICVzXG4iLAorICAgICAgICAgICAgICB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgZXJyb3IoUkNfTk9fU0NSSVBULCBMIldyYXBwZXIgbmFtZSAnJXMnIGlzIG5vdCB2YWxpZC4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICB9CisKKyAgICB3Y3NuY3B5X3MocCwgTUFYX1BBVEggLSAocCAtIHdyYXBwZWRfc2NyaXB0X3BhdGgpICsgMSwgU0NSSVBUX1NVRkZJWCwgX1RSVU5DQVRFKTsKKyAgICBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICBpZiAoYXR0cnMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKKyAgICAgICAgZGVidWcoTCJGaWxlICclcycgbm9uLWV4aXN0ZW50XG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgZXJyb3IoUkNfTk9fU0NSSVBULCBMIlNjcmlwdCBmaWxlICclcycgaXMgbm90IHByZXNlbnQuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgfQorCisgICAgZGVidWcoTCJVc2luZyB3cmFwcGVkIHNjcmlwdCBmaWxlICclcydcbiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworfQorI2VuZGlmCisKIC8qCiAgKiBQcm9jZXNzIGNyZWF0aW9uIGNvZGUKICAqLwpAQCAtNTUwLDcgKzYxNCw3IEBACiAgICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIlVuYWJsZSB0byBjcmVhdGUgcHJvY2VzcyB1c2luZyAnJXMnIiwgY21kbGluZSk7CiAgICAgQXNzaWduUHJvY2Vzc1RvSm9iT2JqZWN0KGpvYiwgcGkuaFByb2Nlc3MpOwogICAgIENsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotICAgIFdhaXRGb3JTaW5nbGVPYmplY3QocGkuaFByb2Nlc3MsIElORklOSVRFKTsKKyAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgocGkuaFByb2Nlc3MsIElORklOSVRFLCBGQUxTRSk7CiAgICAgb2sgPSBHZXRFeGl0Q29kZVByb2Nlc3MocGkuaFByb2Nlc3MsICZyYyk7CiAgICAgaWYgKCFvaykKICAgICAgICAgZXJyb3IoUkNfQ1JFQVRFX1BST0NFU1MsIEwiRmFpbGVkIHRvIGdldCBleGl0IGNvZGUgb2YgcHJvY2VzcyIpOwpAQCAtNTk1LDEyICs2NTksMTcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyB3Y2hhcl90ICogYnVpbHRpbl92aXJ0dWFsX3BhdGhzIFtdID0gewotICAgIEwiL3Vzci9iaW4vZW52IHB5dGhvbiIsCi0gICAgTCIvdXNyL2Jpbi9weXRob24iLAotICAgIEwiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiwKLSAgICBMInB5dGhvbiIsCi0gICAgTlVMTAordHlwZWRlZiBzdHJ1Y3QgeworICAgIHdjaGFyX3QgKnNoZWJhbmc7CisgICAgQk9PTCBzZWFyY2g7Cit9IFNIRUJBTkc7CisKK3N0YXRpYyBTSEVCQU5HIGJ1aWx0aW5fdmlydHVhbF9wYXRocyBbXSA9IHsKKyAgICB7IEwiL3Vzci9iaW4vZW52IHB5dGhvbiIsIFRSVUUgfSwKKyAgICB7IEwiL3Vzci9iaW4vcHl0aG9uIiwgRkFMU0UgfSwKKyAgICB7IEwiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiwgRkFMU0UgfSwKKyAgICB7IEwicHl0aG9uIiwgRkFMU0UgfSwKKyAgICB7IE5VTEwsIEZBTFNFIH0sCiB9OwogCiAvKiBGb3Igbm93LCBhIHN0YXRpYyBhcnJheSBvZiBjb21tYW5kcy4gKi8KQEAgLTc3NiwxMCArODQ1LDEwIEBACiAKIHN0YXRpYyBCT09MCiBwYXJzZV9zaGViYW5nKHdjaGFyX3QgKiBzaGViYW5nX2xpbmUsIGludCBuY2hhcnMsIHdjaGFyX3QgKiogY29tbWFuZCwKLSAgICAgICAgICAgICAgd2NoYXJfdCAqKiBzdWZmaXgpCisgICAgICAgICAgICAgIHdjaGFyX3QgKiogc3VmZml4LCBCT09MICpzZWFyY2gpCiB7CiAgICAgQk9PTCByYyA9IEZBTFNFOwotICAgIHdjaGFyX3QgKiogdnBwOworICAgIFNIRUJBTkcgKiB2cHA7CiAgICAgc2l6ZV90IHBsZW47CiAgICAgd2NoYXJfdCAqIHA7CiAgICAgd2NoYXJfdCB6YXBwZWQ7CkBAIC03ODksMTUgKzg1OCwxNyBAQAogCiAgICAgKmNvbW1hbmQgPSBOVUxMOyAgICAvKiBmYWlsdXJlIHJldHVybiAqLwogICAgICpzdWZmaXggPSBOVUxMOworICAgICpzZWFyY2ggPSBGQUxTRTsKIAogICAgIGlmICgoKnNoZWJhbmdfbGluZSsrID09IEwnIycpICYmICgqc2hlYmFuZ19saW5lKysgPT0gTCchJykpIHsKICAgICAgICAgc2hlYmFuZ19saW5lID0gc2tpcF93aGl0ZXNwYWNlKHNoZWJhbmdfbGluZSk7CiAgICAgICAgIGlmICgqc2hlYmFuZ19saW5lKSB7CiAgICAgICAgICAgICAqY29tbWFuZCA9IHNoZWJhbmdfbGluZTsKLSAgICAgICAgICAgIGZvciAodnBwID0gYnVpbHRpbl92aXJ0dWFsX3BhdGhzOyAqdnBwOyArK3ZwcCkgewotICAgICAgICAgICAgICAgIHBsZW4gPSB3Y3NsZW4oKnZwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHdjc25jbXAoc2hlYmFuZ19saW5lLCAqdnBwLCBwbGVuKSA9PSAwKSB7CisgICAgICAgICAgICBmb3IgKHZwcCA9IGJ1aWx0aW5fdmlydHVhbF9wYXRoczsgdnBwLT5zaGViYW5nOyArK3ZwcCkgeworICAgICAgICAgICAgICAgIHBsZW4gPSB3Y3NsZW4odnBwLT5zaGViYW5nKTsKKyAgICAgICAgICAgICAgICBpZiAod2NzbmNtcChzaGViYW5nX2xpbmUsIHZwcC0+c2hlYmFuZywgcGxlbikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICByYyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICpzZWFyY2ggPSB2cHAtPnNlYXJjaDsKICAgICAgICAgICAgICAgICAgICAgLyogV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSBhbGwgYnVpbHRpbiBjb21tYW5kcyBjb250YWluCiAgICAgICAgICAgICAgICAgICAgICAqICJweXRob24iLgogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTgwNSw3ICs4NzYsNyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKnZwcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAodnBwLT5zaGViYW5nID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIE5vdCBmb3VuZCBpbiBidWlsdGlucyAtIGxvb2sgaW4gY3VzdG9taXplZCBjb21tYW5kcy4KICAgICAgICAgICAgICAgICAgKgpAQCAtODU2LDcgKzkyNyw3IEBACiB9IEJPTTsKIAogLyoKLSAqIFN0cmljdGx5LCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBVVEYtMTYgYW5mIFVURi0zMiwgc2luY2UgUHl0aG9uIGl0c2VsZgorICogU3RyaWN0bHksIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIFVURi0xNiBhbmQgVVRGLTMyLCBzaW5jZSBQeXRob24gaXRzZWxmCiAgKiBkb2Vzbid0LiBOZXZlciBtaW5kLCBvbmUgZGF5IGl0IG1pZ2h0IC0gdGhlcmUncyBubyBoYXJtIGxlYXZpbmcgaXQgaW4uCiAgKi8KIHN0YXRpYyBCT00gQk9Nc1tdID0gewpAQCAtMTAxMiw4ICsxMDgzLDEwIEBACiAgICAgaW50IGksIGosIG5jaGFycyA9IDA7CiAgICAgaW50IGhlYWRlcl9sZW47CiAgICAgQk9PTCBpc192aXJ0OworICAgIEJPT0wgc2VhcmNoOwogICAgIHdjaGFyX3QgKiBjb21tYW5kOwogICAgIHdjaGFyX3QgKiBzdWZmaXg7CisgICAgQ09NTUFORCAqY21kID0gTlVMTDsKICAgICBJTlNUQUxMRURfUFlUSE9OICogaXA7CiAKICAgICBpZiAocmMgPT0gMCkgewpAQCAtMTEyNSw3ICsxMTk4LDcgQEAKICAgICAgICAgICAgIGlmIChuY2hhcnMgPiAwKSB7CiAgICAgICAgICAgICAgICAgc2hlYmFuZ19saW5lWy0tbmNoYXJzXSA9IEwnXDAnOwogICAgICAgICAgICAgICAgIGlzX3ZpcnQgPSBwYXJzZV9zaGViYW5nKHNoZWJhbmdfbGluZSwgbmNoYXJzLCAmY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3VmZml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3VmZml4LCAmc2VhcmNoKTsKICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwicGFyc2Vfc2hlYmFuZzogZm91bmQgY29tbWFuZDogJXNcbiIsIGNvbW1hbmQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX3ZpcnQpIHsKQEAgLTExNDEsNiArMTIxNCwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKFJDX0JBRF9WSVJUVUFMX1BBVEgsIEwiVW5rbm93biB2aXJ0dWFsIFwKIHBhdGggJyVzJyIsIGNvbW1hbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCArPSA2OyAgIC8qIHNraXAgcGFzdCAicHl0aG9uIiAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiAoKCpjb21tYW5kID09IEwnXDAnKSB8fCBpc3NwYWNlKCpjb21tYW5kKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGlzIGVsaWdpYmxlIGZvciBwYXRoIHNlYXJjaCwgYW5kIHRoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaXMgbm8gdmVyc2lvbiBzcGVjaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwic2VhcmNoaW5nIFBBVEggZm9yIHB5dGhvbiBleGVjdXRhYmxlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBmaW5kX29uX3BhdGgoTCJweXRob24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIlB5dGhvbiBvbiBwYXRoOiAlc1xuIiwgY21kID8gY21kLT52YWx1ZSA6IEwiPG5vdCBmb3VuZD4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlZCBweXRob24gb24gUEFUSDogJXNcbiIsIGNtZC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VfY2hpbGQoY21kLT52YWx1ZSwgc3VmZml4LCBjbWRsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBoZXJlLCBhcyB3ZSBoYXZlIGZvdW5kIHRoZSBjb21tYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRkFMTCBUSFJPVUdIOiBObyBweXRob24gZm91bmQgb24gUEFUSCwgc28gZmFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJhY2sgdG8gbG9jYXRpbmcgdGhlIGNvcnJlY3QgaW5zdGFsbGVkIHB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqY29tbWFuZCAmJiAhdmFsaWRhdGVfdmVyc2lvbihjb21tYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIkludmFsaWQgdmVyc2lvbiBcCiBzcGVjaWZpY2F0aW9uOiAnJXMnLlxuSW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNjcmlwdCwgJ3B5dGhvbicgbmVlZHMgdG8gYmUgXApAQCAtMTIyMyw2ICsxMzEzLDEyIEBACiAgICAgdm9pZCAqIHZlcnNpb25fZGF0YTsKICAgICBWU19GSVhFREZJTEVJTkZPICogZmlsZV9pbmZvOwogICAgIFVJTlQgYmxvY2tfc2l6ZTsKKyAgICBpbnQgaW5kZXg7CisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyAgICBpbnQgbmV3bGVuOworICAgIHdjaGFyX3QgKiBuZXdjb21tYW5kOworICAgIHdjaGFyX3QgKiBhdlsyXTsKKyNlbmRpZgogCiAgICAgd3AgPSBnZXRfZW52KEwiUFlMQVVOQ0hfREVCVUciKTsKICAgICBpZiAoKHdwICE9IE5VTEwpICYmICgqd3AgIT0gTCdcMCcpKQpAQCAtMTI3MSw4ICsxMzY3LDggQEAKICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgZGVidWcoTCJHZXRGaWxlVmVyc2lvbkluZm8gZmFpbGVkOiAlWFxuIiwgR2V0TGFzdEVycm9yKCkpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uX2RhdGEsIEwiXFwiLCAmZmlsZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2NrX3NpemUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbl9kYXRhLCBMIlxcIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFZPSUQgKikgJmZpbGVfaW5mbywgJmJsb2NrX3NpemUpOwogICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiVmVyUXVlcnlWYWx1ZSBmYWlsZWQ6ICVYXG4iLCBHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0xMzAyLDcgKzEzOTgsNDAgQEAKICAgICB9CiAKICAgICBjb21tYW5kID0gc2tpcF9tZShHZXRDb21tYW5kTGluZVcoKSk7Ci0gICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzIiwgY29tbWFuZCk7CisgICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzXG4iLCBjb21tYW5kKTsKKworI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisgICAgLyogVGhlIGxhdW5jaGVyIGlzIGJlaW5nIHVzZWQgaW4gInNjcmlwdCB3cmFwcGVyIiBtb2RlLgorICAgICAqIFRoZXJlIHNob3VsZCB0aGVyZWZvcmUgYmUgYSBQeXRob24gc2NyaXB0IG5hbWVkIDxleGVuYW1lPi1zY3JpcHQucHkgaW4KKyAgICAgKiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGxhdW5jaGVyIGV4ZWN1dGFibGUuCisgICAgICogUHV0IHRoZSBzY3JpcHQgbmFtZSBpbnRvIGFyZ3YgYXMgdGhlIGZpcnN0IChzY3JpcHQgbmFtZSkgYXJndW1lbnQuCisgICAgICovCisKKyAgICAvKiBHZXQgdGhlIHdyYXBwZWQgc2NyaXB0IG5hbWUgLSBpZiB0aGUgc2NyaXB0IGlzIG5vdCBwcmVzZW50LCB0aGlzIHdpbGwKKyAgICAgKiB0ZXJtaW5hdGUgdGhlIHByb2dyYW0gd2l0aCBhbiBlcnJvci4KKyAgICAgKi8KKyAgICBsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKTsKKworICAgIC8qIEFkZCB0aGUgd3JhcHBlZCBzY3JpcHQgdG8gdGhlIHN0YXJ0IG9mIGNvbW1hbmQgKi8KKyAgICBuZXdsZW4gPSB3Y3NsZW4od3JhcHBlZF9zY3JpcHRfcGF0aCkgKyB3Y3NsZW4oY29tbWFuZCkgKyAyOyAvKiAnICcgKyBOVUwgKi8KKyAgICBuZXdjb21tYW5kID0gbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIG5ld2xlbik7CisgICAgaWYgKCFuZXdjb21tYW5kKSB7CisgICAgICAgIGVycm9yKFJDX05PX01FTU9SWSwgTCJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IGNvbW1hbmQgbGluZSIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd2NzY3B5X3MobmV3Y29tbWFuZCwgbmV3bGVuLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBMIiAiKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBjb21tYW5kKTsKKyAgICAgICAgZGVidWcoTCJSdW5uaW5nIHdyYXBwZWQgc2NyaXB0IHdpdGggY29tbWFuZCBsaW5lICclcydcbiIsIG5ld2NvbW1hbmQpOworICAgICAgICByZWFkX2NvbW1hbmRzKCk7CisgICAgICAgIGF2WzBdID0gd3JhcHBlZF9zY3JpcHRfcGF0aDsKKyAgICAgICAgYXZbMV0gPSBOVUxMOworICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZyhhdiwgbmV3Y29tbWFuZCk7CisgICAgICAgIC8qIFJldHVybnMgaWYgbm8gc2hlYmFuZyBsaW5lIC0gcGFzcyB0byBkZWZhdWx0IHByb2Nlc3NpbmcgKi8KKyAgICAgICAgY29tbWFuZCA9IG5ld2NvbW1hbmQ7CisgICAgICAgIHZhbGlkID0gRkFMU0U7CisgICAgfQorI2Vsc2UKICAgICBpZiAoYXJnYyA8PSAxKSB7CiAgICAgICAgIHZhbGlkID0gRkFMU0U7CiAgICAgICAgIHAgPSBOVUxMOwpAQCAtMTMxMCwxMyArMTQzOSw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIHAgPSBhcmd2WzFdOwogICAgICAgICBwbGVuID0gd2NzbGVuKHApOwotICAgICAgICBpZiAocFswXSAhPSBMJy0nKSB7Ci0gICAgICAgICAgICByZWFkX2NvbW1hbmRzKCk7Ci0gICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndlsxXSwgY29tbWFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogTm8gZmlsZSB3aXRoIHNoZWJhbmcsIG9yIGFuIHVucmVjb2duaXNlZCBzaGViYW5nLgotICAgICAgICAgKiBJcyB0aGUgZmlyc3QgYXJnIGEgc3BlY2lhbCB2ZXJzaW9uIHF1YWxpZmllcj8KLSAgICAgICAgICovCiAgICAgICAgIHZhbGlkID0gKCpwID09IEwnLScpICYmIHZhbGlkYXRlX3ZlcnNpb24oJnBbMV0pOwogICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbigmcFsxXSk7CkBAIC0xMzI2LDcgKzE0NDgsMTkgQEAKICAgICAgICAgICAgIGNvbW1hbmQgKz0gd2NzbGVuKHApOwogICAgICAgICAgICAgY29tbWFuZCA9IHNraXBfd2hpdGVzcGFjZShjb21tYW5kKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAxOyBpbmRleCA8IGFyZ2M7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoKmFyZ3ZbaW5kZXhdICE9IEwnLScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4IDwgYXJnYykgeworICAgICAgICAgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKKyAgICAgICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndltpbmRleF0sIGNvbW1hbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQorI2VuZGlmCisKICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbihMIiIpOwogICAgICAgICBpZiAoaXAgPT0gTlVMTCkKQEAgLTEzNDQsNyArMTQ3OCw3IEBACiAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiXAogUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzIFZlcnNpb24gJXNcblxuIiwgdmVyc2lvbl90ZXh0KTsKICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCJcCi11c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7Cit1c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBbIHB5dGhvbi1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7CiAgICAgICAgICAgICBmcHV0d3MoTCJcCiBMYXVuY2hlciBhcmd1bWVudHM6XG5cblwKIC0yICAgICA6IExhdW5jaCB0aGUgbGF0ZXN0IFB5dGhvbiAyLnggdmVyc2lvblxuXApkaWZmIC0tZ2l0IGEvUEMvbXN2Y3J0bW9kdWxlLmMgYi9QQy9tc3ZjcnRtb2R1bGUuYwppbmRleCAwNGQyMDg4Li4xOGRlYzZkIDEwMDc1NQotLS0gYS9QQy9tc3ZjcnRtb2R1bGUuYworKysgYi9QQy9tc3ZjcnRtb2R1bGUuYwpAQCAtMTEzLDExICsxMTMsMTIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGxvbmcgaGFuZGxlOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKICAgICBpbnQgZmxhZ3M7CiAgICAgaW50IGZkOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsaTpvcGVuX29zZmhhbmRsZSIsICZoYW5kbGUsICZmbGFncykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6b3Blbl9vc2ZoYW5kbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZkID0gX29wZW5fb3NmaGFuZGxlKGhhbmRsZSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L01ha2VmaWxlIGIvUEMvb3MyZW14L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDA2MTBlLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDY3MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyM9PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tCi0jCi0jIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIDIuNiBmb3IgT1MvMiB1c2luZyBHQ0MvRU1YCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbmRyZXcgWmFib2xvdG55LCA8Yml0QGVsdGVjaC5ydT4gZm9yIFB5dGhvbiAxLjUuMgotIyBNb2RpZmllZCBieSBBbmRyZXcgTWFjSW50eXJlLCA8YW5keW1hY0BwY3VnLm9yZy5hdT4gZm9yIFB5dGhvbiAyLjYKLSMKLSMgVGhpcyBtYWtlZmlsZSB3YXMgZGV2ZWxvcGVkIGZvciB1c2Ugd2l0aCBbUF1HQ0MvRU1YIGNvbXBpbGVyIGFueQotIyB2ZXJzaW9uIGFuZCBHTlUgTWFrZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjI2LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gV2hlbiBlbWJlZGRpbmcgUHl0aG9uIHdpdGhpbiBhbm90aGVyIHByb2dyYW0sIG9ubHkKLSMgUHl0aG9uMjYuRExMIGlzIG5lZWRlZC4gV2UgYWxzbyBidWlsZCBweXRob25fcy5hIHN0YXRpYyBsaWJyYXJ5ICh3aGljaAotIyBjYW4gYmUgY29udmVydGVkIGludG8gT01GICgubGliKSBmb3JtYXQgdXNpbmcgZW14b21mIHRvb2wpIGFuZCBib3RoCi0jIHB5dGhvbi5hIGFuZCBweXRob24ubGliIGltcG9ydCBsaWJyYXJpZXMuICBUaGVuIHRoZSBvcHRpb25hbCAKLSMgZXh0ZW5zaW9uIG1vZHVsZXMsIHdoaWNoIGFyZSBPUy8yIERMTHMgcmVuYW1lZCB3aXRoIGEgUFlEIGZpbGUgZXh0ZW5zaW9uLgotIwotIyBSZWNvbW1lbmRlZCBidWlsZCBvcmRlcjoKLSMgICBtYWtlIGRlcGVuZAkJKGlmIHlvdSBoYXZlIG1ha2VkZXApCi0jICAgbWFrZSBhbGwKLSMgICBtYWtlIGx4CQkoaWYgeW91IGhhdmUgbHhsaXRlKQotIyAgIG1ha2UgdGVzdAkJKG9wdGlvbmFsKQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PT09PT09PT09PT09PT09LS0tLS0tLS0tLS0tLS0tLQotCi0jID09PSBDb21waWxhdGlvbiBtb2RlOiBkZWJ1ZyBvciByZWxlYXNlID09PQotTU9ERT0JCW9wdGltaXplCi0jTU9ERT0JCWRlYnVnCi0jID09PSBBc3NlcnQoKSBlbmFibGVkID09PQotQVNTRVJUSU9OUz1ubwotI0FTU0VSVElPTlM9eWVzCi0jID09PSBIYXJkLXdpcmUgaW5zdGFsbGF0aW9uIGxvY2F0aW9uID09PQotRklYRURfUFlIT01FPW5vCi0jRklYRURfUFlIT01FPXllcwotCi0jID09PSBPcHRpb25hbCBtb2R1bGVzID09PQotIyBEbyB5b3UgaGF2ZSB0aGUgSW5mb1ppcCBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfWkxJQj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFVsdHJhIEZhc3QgQ3J5cHQgKFVGQykgbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1VGQz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFRjbC9UayBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfVENMVEs9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBHTlUgcmVhZGxpbmUgbGlicmFyeSBpbnN0YWxsZWQ/Ci0jIE5PVEU6IEknbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgS2FpIFV3ZSBSb21tZWwncyBwb3J0IHRoYXQgCi0jICAgICAgIC0gaXMgY29tcGlsZWQgd2l0aCBtdWx0aXRocmVhZGluZyBlbmFibGVkCi0jICAgICAgIC0gaXMgbGlua2VkIHN0YXRpY2FsbHkKLSMgICAgICAgSSBoYXZlIGhhZCBubyBzdWNjZXNzIHRyeWluZyB0byB1c2UgYSBETEwgdmVyc2lvbiwgZXZlbiB3aGVuCi0jICAgICAgIGNvbXBpbGVkIHdpdGggbXVsdGl0aHJlYWRpbmcgZW5hYmxlZC4KLUhBVkVfR1JFQURMSU5FPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgQlNEIERCIGxpYnJhcnkgKHYxLjg1KSBhcyBpbmNsdWRlZCBpbiB0aGUgRU1YQlNEIHBhY2thZ2U/Ci0jIE5PVEU6IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSByZWNvbXBpbGVkIHdpdGggYSBzdHJ1Y3R1cmUgbWVtYmVyCi0jICAgICAgIHJlbmFtZWQgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgbXVsdGl0aHJlYWRlZCBlcnJubyBzdXBwb3J0Ci0jICAgICAgICh0aGVyZSBpcyBhIHN0cnVjdHVyZSBtZW1iZXIgY2FsbGVkIGVycm5vLCB1c2VkIGZvciBzaGFkb3dpbmcgdGhlCi0jICAgICAgIHJlYWwgZXJybm8sIHdoaWNoIGNvbmZsaWN0cyB3aXRoIHRoZSBlcnJubyByZWRlZmluaXRpb24gb2YgLVptdCkKLUhBVkVfQlNEREI9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBuY3Vyc2VzIGxpYnJhcnkgaW5zdGFsbGVkPyBFTVgncyBCU0QgY3Vyc2VzIGFyZW4ndCBlbm91Z2ghIAotSEFWRV9OQ1VSU0VTPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgR0RCTSBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfR0RCTT0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEJaMiBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfQloyPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgT3BlblNTTCBsaWJyYXJpZXMgaW5zdGFsbGVkCi1IQVZFX09QRU5TU0w9CW5vCi0KLSMgPT09IGluc3RhbGwgbG9jYXRpb25zID09PQotIyBkZWZhdWx0IHZhbHVlIG9mIFBZVEhPTkhPTUUKLUxJQl9ESVI9QzovUHl0aG9uMjYKLSMgZGVmYXVsdCBpcyB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gb3IgdW5kZXIgUFlUSE9OSE9NRQotRVhFX0RJUj0kKExJQl9ESVIpCi1ETExfRElSPSQoRVhFX0RJUikKLQotCi0jID09PSBUaGUgVG9vbHMgPT09Ci1DQz0JCWdjYwotQ0ZMQUdTPQkJLVptdCAtV2FsbCAkKElOQ0xVREUpCi1DRkxBR1MuTElCPQkkKENGTEFHUykKLUxEPQkJZ2NjCi1MREZMQUdTPQktWm10IC1aY3J0ZGxsIC1MLiAtbGdjYwotTERGTEFHUy5FWEU9CSQoTERGTEFHUykKLUxERkxBR1MuRExMPQkkKExERkxBR1MpIC1aZGxsCi1MREZMQUdTLkE9CSQoTERGTEFHUykgJChMSUJTKQotQVJGTEFHUz0JY3JzCi1JTVBMSUI9CQllbXhpbXAKLUVYUExJQj0JCWVteGV4cAotRVhFT1BUPQkJZW14YmluZAotUFlfREVGPQkJLURQeV9CVUlMRF9DT1JFCi0KLQotIyBhZGp1c3QgQyBjb21waWxlciBzZXR0aW5ncyBiYXNlZCBvbiBidWlsZCBvcHRpb25zCi1pZmVxICgkKE1PREUpLGRlYnVnKQotICBDRkxBR1MrPQktZyAtTwotICBMREZMQUdTKz0JLWcKLWVsc2UKLSAgQ0ZMQUdTKz0JLXMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tcHJvYmUKLSAgTERGTEFHUys9CS1zCi1lbmRpZgotQ0ZMQUdTKz0JJChQWV9ERUYpCi1pZmVxICgkKEFTU0VSVElPTlMpLG5vKQotICBDRkxBR1MrPQktRE5ERUJVRwotZW5kaWYKLWlmZXEgKCQoRklYRURfUFlIT01FKSx5ZXMpCi0gIENGTEFHUys9CS1EUFJFRklYPSQoRFFVT1RFKSQoTElCX0RJUikkKERRVU9URSkKLWVuZGlmCi0KLSMgV2UncmUgdXNpbmcgdGhlIE9NRiBmb3JtYXQgc2luY2UgRU1YJ3MgbGQgaGFzIGEgb2JzY3VyZSBidWcKLSMgYmVjYXVzZSBvZiB3aGljaCBpdCBzb21ldGltZXMgZmFpbHMgdG8gYnVpbGQgcmVsb2NhdGlvbnMKLSMgaW4gLmRhdGEgc2VnbWVudCB0aGF0IHBvaW50IHRvIGFub3RoZXIgLmRhdGEgbG9jYXRpb25zCi0jIChleGNlcHQgZm9yIHRoZSBmaW5hbCBsaW5raW5nIGlmIHRoZSAuRVhFcykKLU9NRj0JCXllcwotCi0jIGlmIGZvcmsoKSBzdXBwb3J0IGlzIHJlcXVpcmVkLCB0aGUgbWFpbiBleGVjdXRhYmxlIG11c3QgYmUgbGlua2VkIHdpdGggbGQKLUVYRU9NRj0JCW5vCi0KLSMgRmlsZSBleHRlbnNpb25zCi1NT0RVTEUuRVhUPQkucHlkCi1NT0RMSUIuRVhUPQkuZGxsCi1pZmVxICgkKE9NRikseWVzKQotICBPPQkJLm9iagotICBBPQkJLmxpYgotICBBUj0JCWVteG9tZmFyCi0gIENGTEFHUys9CS1ab21mCi0gIExERkxBR1MrPQktWm9tZgotICBpZmVxICgkKE1PREUpLGRlYnVnKQotICAgIEFSRkxBR1M9CS1wNjQgY3JzCi0gIGVsc2UKLSAgICBBUkZMQUdTPQktcDMyIGNycwotICBlbmRpZgotZWxzZQotICBPPQkJLm8KLSAgQT0JCS5hCi0gIEFSPQkJYXIKLWVuZGlmCi0KLQotIyA9PT0gQnVpbGQgdGltZSByZXNvdXJjZSBzZXR0aW5ncyA9PT0KLQotIyBFTVgncyBkZWZhdWx0IG51bWJlciBvZiBmaWxlIGhhbmRsZXMgaXMgNDAsIHdoaWNoIGlzIHNvbWV0aW1lcyBpbnN1ZmZpY2llbnQKLSMgKHRoZSB0ZW1wZmlsZSByZWdyZXNzaW9uIHRlc3QgdHJpZXMgdG8gY3JlYXRlIDEwMCB0ZW1wb3JhcnkgZmlsZXMpCi1ORklMRVM9MjUwCi0KLSMgVGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3IgY2hpbGQgdGhyZWFkcyBpcyA2NGsgYnl0ZXMsIHdoaWNoIGlzCi0jIGluc3VmZmljaWVudCBmb3Igc29tZSBhcHBsaWNhdGlvbnMgd2hpY2ggZG8gYSBsb3Qgb2Ygd29yayBpbiB0aHJlYWRzCi0jIChzdWNoIGFzIFpvcGUsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCBQbG9uZSkuCi0jIE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgaXMgZGlzdGluY3QgZnJvbSB0aGUgc3RhY2sgc2l6ZSBmb3IgdGhlIG1haW4KLSMgdGhyZWFkLCB3aGljaCBpcyBzZXQgdmlhIHRoZSAlLmRlZiBydWxlIGJlbG93LgotIyBFTVggZG9jdW1lbnRzIHRoYXQgdGhlIHRocmVhZCBzdGFjayBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAzMjc2OCBieXRlczsKLSMgZm9yIFpvcGUvUGxvbmUgYXQgbGVhc3QgMTI4ayBieXRlcyBpcyByZWNvbW1lbmRlZC4KLSMgVW5jb21tZW50ICYgYWRqdXN0IHRoZSBuZXh0IGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZToKLSNDRkxBR1MrPQktRFRIUkVBRF9TVEFDS19TSVpFPTB4MjAwMDAKLQotCi0jID09PSBUaGUgZW52aXJvbm1lbnQgPT09Ci0KLSMgU291cmNlIGZpbGUgcGF0aHMKLVNSQ1BBVEg9LjsuLi8uLi9QeXRob247Li4vLi4vUGFyc2VyOy4uLy4uL09iamVjdHM7Li4vLi4vSW5jbHVkZTsuLi8uLi9Nb2R1bGVzCi0jIFB5dGhvbiBjb250YWlucyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi0jIFBhcnNlciBjb250YWlucyBQeXRob24ncyBJbnRlcm5hbCBQYXJzZXIgYW5kCi0jICAgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi0jIE9iamVjdHMgY29udGFpbnMgUHl0aG9uIE9iamVjdCBUeXBlcwotIyBNb2R1bGVzIGNvbnRhaW5zIGV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotCi0jIFVuaXggc2hlbGxzIHRlbmQgdG8gdXNlICIkIiBhcyBkZWxpbWl0ZXIgZm9yIHZhcmlhYmxlIG5hbWVzLgotIyBUZXN0IGZvciB0aGlzIGJlaGF2aW91ciBhbmQgc2V0ICQoQlVDSykgdmFyaWFibGUgY29ycmVzcG9uZGlnbHkgLi4uCi1fX1RNUF9fOj0kKHNoZWxsIGVjaG8gJCQkJCkKLWlmZXEgKCQoX19UTVBfXyksJCQkJCkKLSAgQlVDSz0JCSQkCi0gIEJSTz0JCSgKLSAgQlJDPQkJKQotZWxzZQotICBCVUNLPQkJXCQkCi0gIEJSTz0JCVwoCi0gIEJSQz0JCVwpCi1lbmRpZgotIyBDb21wdXRlIHRoZSAiZG91YmxlIHF1b3RlIiB2YXJpYWJsZQotX19UTVBfXzo9JChzaGVsbCBlY2hvICIiKQotaWZlcSAoJChfX1RNUF9fKSwiIikKLSAgRFFVT1RFPQkiCi1lbHNlCi0gIERRVU9URT0JXCIKLWVuZGlmCi0KLSMgSW5jbHVkZSBwYXRocwotI0lOQ0xVREU9CS1JJChzdWJzdCA7LCAtSSwgJChTUkNQQVRIKSkKLUlOQ0xVREU9CS1JLiAtSS4uLy4uL0luY2x1ZGUKLQotIyBQYXRoIHRvIHNlYXJjaCBmb3IgLmMgZmlsZXMKLXZwYXRoICUuYyAuOy4uOyQoU1JDUEFUSCkKLQotIyBUb3Agb2YgdGhlIHBhY2thZ2UgdHJlZQotVE9QPQkJLi4vLi4vCi0KLSMgRGlyZWN0b3J5IGZvciBvdXRwdXQgZmlsZXMKLU9VVEJBU0U9CW91dC8KLU9VVD0JCSQoT1VUQkFTRSkkKE1PREUpLwotCi0jIEFkZGl0aW9uYWwgbGlicmFyaWVzCi1MSUJTPQkJLWxzb2NrZXQKLQotIyBVdGlsaXR5IG1hY3JvOiByZXBsYWNlbWVudCBmb3IgJF4KLV5ePQkJJChmaWx0ZXItb3V0ICUkQSwkXikKLSMgVXNlICQoTF4pIHRvIGxpbmsgd2l0aCBhbGwgbGlicmFyaWVzIHNwZWNpZmllZCBhcyBkZXBlbmRlbmNpZXMKLUxePQkJJChhZGRwcmVmaXggLWwsJChiYXNlbmFtZSAkKG5vdGRpciAkKGZpbHRlciAlJEEsJCspKSkpCi0KLSMgQnVpbGQgcnVsZXMKLSQoT1VUKSUkTzogJS5jCi0JJChDQykgJChDRkxBR1MuTElCKSAtYyAkPCAtbyAkQAotCi0lLmE6Ci0JJChMRCkgJChMREZMQUdTLkEpIC1vICRAICQoXl4pICQoTF4pCi0KLSUuZGxsOgotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotJS5weWQ6ICQoT1VUKSVtb2R1bGUkTyAkKE9VVCklX20uZGVmCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChQWVRIT04uSU1QTElCKSAkKExJQlMpCi0KLSUuZXhlOgotCSQoTEQpICQoTERGTEFHUy5FWEUpIC1vICRAICQoXl4pICQoTF4pCi0KLSVfbS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChub3RkaXIgJCopIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0gICAgICAgIGlmZXEgKCQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RVTEUuRVhUKSksKQotCSAgQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uIHN0YW5kYXJkIG1vZHVsZSAkKG5vdGRpciAkKikkKERRVU9URSkgPj4kQAotICAgICAgICBlbHNlCi0JICBAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9EVUxFLkVYVCkpJChEUVVPVEUpID4+JEAKLSAgICAgICAgZW5kaWYKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXQkKG5vdGRpciAkKikgPj4kQAotCi0lLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTkFNRSAkKG5vdGRpciAkKikgJChFWEVUWVBFLiQobm90ZGlyICQqKS5leGUpID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopLmV4ZSkkKERRVU9URSkgPj4kQAotCUBlY2hvIFNUQUNLU0laRSAyMDk3MTUyID4+JEAKLQotIyBPdXRwdXQgZmlsZSBuYW1lcwotUFlUSE9OX1ZFUj0JMi42Ci1QWVRIT05fTElCPQlweXRob24zMwotUFlUSE9OLkxJQj0JJChQWVRIT05fTElCKV9zJEEKLVBZVEhPTi5JTVBMSUI9CSQoUFlUSE9OX0xJQikkQQotaWZlcSAoJChFWEVPTUYpLHllcykKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT04uSU1QTElCKQotICBMRE1PREUuRVhFPQkJLVpvbWYKLWVsc2UKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT05fTElCKS5hCi0gIExETU9ERS5FWEUgPSAKLWVuZGlmCi1QWVRIT04uRExMPQkkKFBZVEhPTl9MSUIpLmRsbAotUFlUSE9OLkRFRj0JJChQWVRIT05fTElCKS5kZWYKLVBZVEhPTi5FWEU9CXB5dGhvbi5leGUKLVBZVEhPTlBNLkVYRT0JcHl0aG9ucG0uZXhlCi1QR0VOLkVYRT0JcGdlbi5leGUKLUxJQlJBUlk9CSQoUFlUSE9OLkxJQikKLUxEX0xJQlJBUlk9CSQoUFlUSE9OLklNUExJQikKLQotIyBBZGRpdGlvbmFsIGV4ZWN1dGFibGUgcGFyYW1ldGVycwotRVhFVFlQRS4kKFBZVEhPTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1FWEVUWVBFLiQoUFlUSE9OUE0uRVhFKT0JV0lORE9XQVBJCi1FWEVUWVBFLiQoUEdFTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1ERVNDUklQVElPTi4kKFBZVEhPTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyIGZvciBPUy8yCi1ERVNDUklQVElPTi4kKFBZVEhPTlBNLkVYRSk9CSQoREVTQ1JJUFRJT04uJChQWVRIT04uRVhFKSkKLURFU0NSSVBUSU9OLiQoUEdFTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHBhcnNlciBnZW5lcmF0b3IgZm9yIE9TLzIKLQotIyBNb2R1bGUgZGVzY3JpcHRpb25zCi1ERVNDUklQVElPTi56bGliJChNT0RVTEUuRVhUKT0JCVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3NpbmcgdGhlIEluZm9aaXAgY29tcHJlc3Npb24gbGlicmFyeQotREVTQ1JJUFRJT04uY3J5cHQkKE1PRFVMRS5FWFQpPQkJUHl0aG9uIEV4dGVuc2lvbiBETEwgaW1wbGVtZW50aW5nIHRoZSBjcnlwdCQoQlJPKSQoQlJDKSBmdW5jdGlvbgotREVTQ1JJUFRJT04uX3RraW50ZXIkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIFRjbC9UayBFbnZpcm9ubWVudAotREVTQ1JJUFRJT04ucmVhZGxpbmUkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIEdOVSBSZWFkTGluZSBsaWJyYXJ5Ci1ERVNDUklQVElPTi5fY3Vyc2VzJChNT0RMSUIuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBuY3Vyc2VzIGxpYnJhcnkKLURFU0NSSVBUSU9OLnB5ZXhwYXQkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIGV4cGF0IGxpYnJhcnkKLURFU0NSSVBUSU9OLmJ6MiQoTU9EVUxFLkVYVCk9CQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzaW5nIHRoZSBiejIgY29tcHJlc3Npb24gbGlicmFyeQotCi0jIFNvdXJjZSBmaWxlcwotU1JDLk9TMkVNWD0JY29uZmlnLmMgZGxmY24uYyBnZXRwYXRocC5jCi1TUkMuTUFJTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU1vZHVsZXMvZ2V0YnVpbGRpbmZvLmMgXAotCQlNb2R1bGVzL21haW4uYykKLVNSQy5NT0RVTEVTPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJTW9kdWxlcy9nY21vZHVsZS5jIFwKLQkJTW9kdWxlcy9zaWduYWxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvcG9zaXhtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX3RocmVhZG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9hcnJheW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9iaW5hc2NpaS5jIFwKLQkJTW9kdWxlcy9jbWF0aG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgXAotCQlNb2R1bGVzL2NvbGxlY3Rpb25zbW9kdWxlLmMgXAotCQlNb2R1bGVzL19jc3YuYyBcCi0JCU1vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvZXJybm9tb2R1bGUuYyBcCi0JCU1vZHVsZXMvZmNudGxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9faGVhcHFtb2R1bGUuYyBcCi0JCU1vZHVsZXMvaW1hZ2VvcC5jIFwKLQkJTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9tYXRobW9kdWxlLmMgXAotCQlNb2R1bGVzL29wZXJhdG9yLmMgXAotCQlNb2R1bGVzL19yYW5kb21tb2R1bGUuYyBcCi0JCU1vZHVsZXMvc2hhMjU2bW9kdWxlLmMgXAotCQlNb2R1bGVzL3NoYTUxMm1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fc3JlLmMgXAotCQlNb2R1bGVzL19zdHJ1Y3QuYyBcCi0JCU1vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvdGVybWlvcy5jIFwKLQkJTW9kdWxlcy90aW1lbW9kdWxlLmMgXAotCQlNb2R1bGVzL193ZWFrcmVmLmMgXAotCQlNb2R1bGVzL3h4c3VidHlwZS5jIFwKLQkJTW9kdWxlcy96aXBpbXBvcnQuYykKLVNSQy5QQVJTRTE9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvYWNjZWxlci5jIFwKLQkJUGFyc2VyL2dyYW1tYXIxLmMgXAotCQlQYXJzZXIvbGlzdG5vZGUuYyBcCi0JCVBhcnNlci9ub2RlLmMgXAotCQlQYXJzZXIvcGFyc2VyLmMgXAotCQlQYXJzZXIvcGFyc2V0b2suYyBcCi0JCVBhcnNlci9iaXRzZXQuYyBcCi0JCVBhcnNlci9tZXRhZ3JhbW1hci5jKQotU1JDLlBBUlNFMj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVBhcnNlci90b2tlbml6ZXIuYyBcCi0JCVBhcnNlci9teXJlYWRsaW5lLmMpCi1TUkMuUEFSU0VSPQkkKFNSQy5QQVJTRTEpIFwKLQkJJChTUkMuUEFSU0UyKQotU1JDLlBZVEhPTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVB5dGhvbi9QeXRob24tYXN0LmMgXAotCQlQeXRob24vYXNkbC5jIFwKLQkJUHl0aG9uL2FzdC5jIFwKLQkJUHl0aG9uL2JsdGlubW9kdWxlLmMgXAotCQlQeXRob24vZXhjZXB0aW9ucy5jIFwKLQkJUHl0aG9uL2NldmFsLmMgXAotCQlQeXRob24vY29tcGlsZS5jIFwKLQkJUHl0aG9uL2NvZGVjcy5jIFwKLQkJUHl0aG9uL2R5bmFtaWNfYW5ub3RhdGlvbnMuYyBcCi0JCVB5dGhvbi9lcnJvcnMuYyBcCi0JCVB5dGhvbi9mcm96ZW4uYyBcCi0JCVB5dGhvbi9mcm96ZW5tYWluLmMgXAotCQlQeXRob24vZnV0dXJlLmMgXAotCQlQeXRob24vZ2V0YXJncy5jIFwKLQkJUHl0aG9uL2dldGNvbXBpbGVyLmMgXAotCQlQeXRob24vZ2V0Y29weXJpZ2h0LmMgXAotCQlQeXRob24vZ2V0cGxhdGZvcm0uYyBcCi0JCVB5dGhvbi9nZXR2ZXJzaW9uLmMgXAotCQlQeXRob24vZ3JhbWluaXQuYyBcCi0JCVB5dGhvbi9pbXBvcnQuYyBcCi0JCVB5dGhvbi9pbXBvcnRkbC5jIFwKLQkJUHl0aG9uL21hcnNoYWwuYyBcCi0JCVB5dGhvbi9tb2RzdXBwb3J0LmMgXAotCQlQeXRob24vbXlzbnByaW50Zi5jIFwKLQkJUHl0aG9uL215c3RydG91bC5jIFwKLQkJUHl0aG9uL3B5YXJlbmEuYyBcCi0JCVB5dGhvbi9weWN0eXBlLmMgXAotCQlQeXRob24vcHlmcGUuYyBcCi0JCVB5dGhvbi9weXN0YXRlLmMgXAotCQlQeXRob24vcHlzdHJ0b2QuYyBcCi0JCVB5dGhvbi9weXRob25ydW4uYyBcCi0JCVB5dGhvbi9zdHJ1Y3RtZW1iZXIuYyBcCi0JCVB5dGhvbi9zeW10YWJsZS5jIFwKLQkJUHl0aG9uL3N5c21vZHVsZS5jIFwKLQkJUHl0aG9uL3RyYWNlYmFjay5jIFwKLQkJUHl0aG9uL2dldG9wdC5jIFwKLQkJUHl0aG9uL2R5bmxvYWRfc2hsaWIuYyBcCi0JCVB5dGhvbi90aHJlYWQuYykKLVNSQy5PQkpFQ1Q9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlPYmplY3RzL2Fic3RyYWN0LmMgXAotCQlPYmplY3RzL2Jvb2xvYmplY3QuYyBcCi0JCU9iamVjdHMvY2VsbG9iamVjdC5jIFwKLQkJT2JqZWN0cy9jbGFzc29iamVjdC5jIFwKLQkJT2JqZWN0cy9jb2JqZWN0LmMgXAotCQlPYmplY3RzL2NvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvY29tcGxleG9iamVjdC5jIFwKLQkJT2JqZWN0cy9kZXNjcm9iamVjdC5jIFwKLQkJT2JqZWN0cy9kaWN0b2JqZWN0LmMgXAotCQlPYmplY3RzL2VudW1vYmplY3QuYyBcCi0JCU9iamVjdHMvZmlsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mbG9hdG9iamVjdC5jIFwKLQkJT2JqZWN0cy9mcmFtZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mdW5jb2JqZWN0LmMgXAotCQlPYmplY3RzL2dlbm9iamVjdC5jIFwKLQkJT2JqZWN0cy9pdGVyb2JqZWN0LmMgXAotCQlPYmplY3RzL2xpc3RvYmplY3QuYyBcCi0JCU9iamVjdHMvbG9uZ29iamVjdC5jIFwKLQkJT2JqZWN0cy9tZXRob2RvYmplY3QuYyBcCi0JCU9iamVjdHMvbW9kdWxlb2JqZWN0LmMgXAotCQlPYmplY3RzL29iamVjdC5jIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jIFwKLQkJT2JqZWN0cy9yYW5nZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9zZXRvYmplY3QuYyBcCi0JCU9iamVjdHMvc2xpY2VvYmplY3QuYyBcCi0JCU9iamVjdHMvc3RyaW5nb2JqZWN0LmMgXAotCQlPYmplY3RzL3N0cnVjdHNlcS5jIFwKLQkJT2JqZWN0cy90dXBsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy90eXBlb2JqZWN0LmMgXAotCQlPYmplY3RzL3VuaWNvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvdW5pY29kZWN0eXBlLmMgXAotCQlPYmplY3RzL3dlYWtyZWZvYmplY3QuYykKLQotU1JDLkxJQj0JJChTUkMuT1MyRU1YKSBcCi0JCSQoU1JDLk1BSU4pIFwKLQkJJChTUkMuUEFSU0VSKSBcCi0JCSQoU1JDLk9CSkVDVCkgXAotCQkkKFNSQy5QWVRIT04pIFwKLQkJJChTUkMuTU9EVUxFUykKLU9CSi5MSUI9CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5MSUI6LmM9JE8pKSkKLQotU1JDLlBHRU49CSQoU1JDLlBBUlNFMSkgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQeXRob24vbXlzbnByaW50Zi5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvdG9rZW5pemVyX3BnZW4uYyBcCi0JCVBhcnNlci9wZ2VubWFpbi5jIFwKLQkJUGFyc2VyL3BnZW4uYyBcCi0JCVBhcnNlci9wcmludGdyYW1tYXIuYyBcCi0JCVBhcnNlci9ncmFtbWFyLmMgXAotCQlQYXJzZXIvZmlyc3RzZXRzLmMpIFwKLQotT0JKLlBHRU49CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5QR0VOOi5jPSRPKSkpCi0KLVNSQy5FWEU9CSQoVE9QKU1vZHVsZXMvcHl0aG9uLmMKLVNSQy5QTUVYRT0JcHl0aG9ucG0uYwotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0OgotIyAgIDEpIGhhdmUgb25seSBzaW5nbGUgc291cmNlIGZpbGUgYW5kIHJlcXVpcmUgbm8gZXh0cmEgbGlicwotIyAgIDIpIHVzZSB0aGUgc3RhbmRhcmQgbW9kdWxlIG5hbWluZyBjb252ZW50aW9uCi0jICAgICAgKHRoZSAnbW9kdWxlJyBpbiA/Pz8/P21vZHVsZS5jIGlzIGFzc3VtZWQpCi0jIC0gdGhlc2UgY2FuIGJlIGJ1aWx0IHdpdGggaW1wbGljaXQgcnVsZXMKLUVBU1lFWFRNT0RVTEVTPQlmcGVjdGwgXAotCQlmcGV0ZXN0IFwKLQkJcGFyc2VyIFwKLQkJcHdkIFwKLQkJc2VsZWN0IAotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0IG5lZWQgZXhwbGljaXQgYnVpbGQgcnVsZXMKLSMgIChlaXRoZXIgbXVsdGlwbGUgc291cmNlIGZpbGVzIGFuZC9vciBub24tc3RhbmRhcmQgbW9kdWxlIG5hbWluZykKLSMgIChOT1RFOiB1c2Ugc2hvcnRlbmVkIG5hbWVzIGZvciBtb2R1bGVzIGFmZmVjdGVkIGJ5IDggY2hhciBuYW1lIGxpbWl0KQotSEFSREVYVE1PRFVMRVM9CV9zb2NrZXQgXAotCQlfdGVzdGNhcCBcCi0JCXVuaWNvZGVkCi0KLSMgUHl0aG9uIG1vZHVsZXMgdGhhdCBhcmUgdXNlZCBhcyBsaWJyYXJpZXMgYW5kIHRoZXJlZm9yZSBtdXN0IHVzZQotIyBhIC5ETEwgZXh0ZW5zaW9uCi1MSUJFWFRNT0RVTEVTPQotCi0jIFB5dGhvbiBleHRlcm5hbCAoJChNT0RVTEUuRVhUKSkgbW9kdWxlcyAtIGNhbiBiZSBFQVNZIG9yIEhBUkQKLWlmZXEgKCQoSEFWRV9aTElCKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JemxpYgotZW5kaWYKLWlmZXEgKCQoSEFWRV9VRkMpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQljcnlwdAotZW5kaWYKLWlmZXEgKCQoSEFWRV9UQ0xUSykseWVzKQotICBIQVJERVhUTU9EVUxFUys9CV90a2ludGVyCi0gIENGTEFHUys9CQktREhBU19ESVJFTlQgLUkvVGNsVGs4MC9pbmNsdWRlCi0gIFRLX0xJQlMrPQkJLUwvVGNsVGs4MC9saWIgLWx0Y2w4MCAtbHRrODAKLWVuZGlmCi1pZmVxICgkKEhBVkVfR1JFQURMSU5FKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JcmVhZGxpbmUKLWVuZGlmCi1pZmVxICgkKEhBVkVfTkNVUlNFUykseWVzKQotICBMSUJFWFRNT0RVTEVTKz0JX2N1cnNlcwotICBIQVJERVhUTU9EVUxFUys9CV9jdXJzZXNfCi1lbmRpZgotaWZlcSAoJChIQVZFX0dEQk0pLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlfZ2RibSBfZGJtCi1lbmRpZgotaWZlcSAoJChIQVZFX0JaMikseWVzKQotICBIQVJERVhUTU9EVUxFUys9CWJ6MgotZW5kaWYKLWlmZXEgKCQoSEFWRV9PUEVOU1NMKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JX3NzbAotZW5kaWYKLQotIyBFeHBhdCBpcyBub3cgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgUHl0aG9uIHNvdXJjZQotSEFSREVYVE1PRFVMRVMrPQlweWV4cGF0Ci1FWFBBVC5JTkM9CS1JLi4vLi4vTW9kdWxlcy9leHBhdAotRVhQQVQuREVGPQktREhBVkVfRVhQQVRfSCAtRFhNTF9OUz0xIC1EWE1MX0RURD0xIC1EWE1MX0JZVEVfT1JERVI9MTIgXAotCQktRFhNTF9DT05URU5UX0JZVEVTPTEwMjQgLURIQVZFX01FTU1PVkU9MSAtREhBVkVfQkNPUFk9MQotRVhQQVQuU1JDPQkkKGFkZHByZWZpeCAuLi8uLi9Nb2R1bGVzL2V4cGF0LywgXAotCQl4bWxwYXJzZS5jIFwKLQkJeG1scm9sZS5jIFwKLQkJeG1sdG9rLmMpCi0KLSMgYWxsIHRoZSBleHRlcm5hbCBtb2R1bGVzCi1FWFRFUk5ETExTPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoRUFTWUVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoSEFSREVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRExJQi5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoTElCRVhUTU9EVUxFUykpKQotCi0jIFRhcmdldHMKLWFsbDogICQoT1VUKSAkKFBZVEhPTi5MSUIpICQoUFlUSE9OLkRFRikgJChQWVRIT04uSU1QTElCKSAkKFBZVEhPTi5ETEwpIFwKLQlweXRob25fbm9uY29yZQotCi1weXRob25fbm9uY29yZToKLQltYWtlIFBZX0RFRj0gJChQWVRIT04uRVhFKSAkKFBZVEhPTlBNLkVYRSkgJChQR0VOLkVYRSkgJChFWFRFUk5ETExTKQotCi1jbGVhbjoKLQlybSAtZiAkKE9VVCkqCi0Jcm0gLWYgJChQWVRIT04uTElCKSAkKFBZVEhPTi5JTVBMSUIpICQoUFlUSE9OLkVYRUlNUCkgJChQWVRIT04uRExMKSBcCi0JICAkKFBZVEhPTi5FWEUpICQoUFlUSE9OUE0uRVhFKSAkKFBHRU4uRVhFKSAqJChNT0RVTEUuRVhUKSAqLmRsbAotCWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0KLWx4OgotCUBlY2hvIFBhY2tpbmcgZXZlcnl0aGluZyB3aXRoIGx4TGl0ZS4uLgotCWx4bGl0ZSAkKFBZVEhPTi5ETEwpICQoUFlUSE9OLkVYRSkgJChQWVRIT05QTS5FWEUpICQoUEdFTi5FWEUpCi0KLWRlcGVuZDogJChPVVRCQVNFKQotCW1ha2VkZXAgLWYgJChPVVRCQVNFKXB5dGhvbi5kZXAgLW8gJChCVUNLKU8gLXAgJChCVUNLKVwoT1VUXCkgXAotCSAgLXIgLWMgJChJTkNMVURFKSAkKFNSQy5MSUIpICQoU1JDLlBHRU4pCi0KLSQoT1VUKTogJChPVVRCQVNFKQotCi0kKE9VVCkgJChPVVRCQVNFKToKLQlta2Rpci5leGUgJEAKLQotJChQWVRIT04uTElCKTogJChPQkouTElCKQotCXJtLmV4ZSAtZiAkQAotCSQoQVIpICQoQVJGTEFHUykgJEAgJF4KLQotIyB0aGUgUHl0aG9uIGNvcmUgRExMIC5kZWYgZmlsZSBuZWVkcyB0byBoYXZlIGEgbnVtYmVyIG9mIG5vbi1zdGF0aWMKLSMgc3ltYm9scyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBQeXRob24gQyBBUEkgcmVtb3ZlZCAoY29tbWVudGVkIG91dCkKLSMgZnJvbSB0aGUgRExMIGV4cG9ydCBsaXN0LgotJChQWVRIT04uREVGKTogJChQWVRIT04uTElCKQotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQoUFlUSE9OX0xJQikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gJChQWVRIT05fVkVSKSBDb3JlIERMTCQoRFFVT1RFKSA+PiRACi0JQGVjaG8gUFJPVE1PREUgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQkkKEVYUExJQikgLXUgJChQWVRIT04uTElCKSB8XAotCSBzZWQgLWUgIi9eICAuaW5pdC4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLnBjcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuYXJyYXlfbWV0aG9kcy9zL14gLzsgLyIgXAotCQktZSAiL14gIC5mYXN0X3NhdmVfbGVhdmUvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxvcGVuL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsc3ltL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsY2xvc2Uvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxlcnJvci9zL14gLzsgLyIgXAotCQktZSAiL14gIC5fUHlfcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuX1B5X01ENS4qL3MvXiAvOyAvIiA+PiRACi0KLSQoUFlUSE9OLklNUExJQik6ICQoUFlUSE9OLkRFRikKLQkkKElNUExJQikgLW8gJEAgJF4KLQotJChQWVRIT04uRVhFSU1QKTogJChQWVRIT04uREVGKQotCSQoSU1QTElCKSAtbyAkQCAkXgotCi0kKFBZVEhPTi5ETEwpOiAkKE9VVClkbGxlbnRyeSRPICQoUFlUSE9OLkxJQikgJChQWVRIT04uREVGKQotCi0jIEV4cGxpY2l0IG1ha2UgdGFyZ2V0cyBmb3IgdGhlIC5FWEVzIHRvIGJlIGFibGUgdG8gdXNlIExEIHRvIGxpbmsKLSMgKHNvIHRoYXQgZm9yaygpIHdpbGwgd29yayBpZiByZXF1aXJlZCkKLQotJChQWVRIT04uRVhFKTogJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbi5kZWYKLQkkKENDKSAtWm10ICQoTERNT0RFLkVYRSkgLVpjcnRkbGwgLVdhbGwgJChJTkNMVURFKSAtTC4gLWxnY2MgLW8gJEAgJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoTElCUykgJChPVVQpcHl0aG9uLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT04uRVhFKSAtaCQoTkZJTEVTKQotCi0kKFBZVEhPTlBNLkVYRSk6ICQoU1JDLlBNRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoQ0MpIC1abXQgJChMRE1PREUuRVhFKSAtWmNydGRsbCAtV2FsbCAkKElOQ0xVREUpIC1MLiAtbGdjYyAtbyAkQCAkKFNSQy5QTUVYRSkgJChQWVRIT04uRVhFSU1QKSAkKExJQlMpICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT05QTS5FWEUpIC1oJChORklMRVMpCi0KLSQoUEdFTi5FWEUpOiAkKE9CSi5QR0VOKSAkKE9VVClwZ2VuLmRlZgotCi0jIEV4cGxpY2l0IGJ1aWxkaW5nIGluc3RydWN0aW9ucyBmb3IgdGhvc2UgZXh0ZXJuYWwgbW9kdWxlcyB0aGF0IHJlcXVpcmUgCi0jIGF3a3dhcmQgaGFuZGxpbmcgKGR1ZSBlLmcuIHRvIG5vbi1zdGQgbmFtaW5nLCBvciBtdWx0aXBsZSBzb3VyY2UgZmlsZXMpCi0jIC0gc3RhbmRhcmQgbW9kdWxlcwotCi1fc29ja2V0JChNT0RVTEUuRVhUKTogJChPVVQpc29ja2V0bW9kdWxlJE8gJChPVVQpX3NvY2tldF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi0jIF90ZXN0Y2FwaSBuZWVkcyB0byBiZSByZW5hbWVkIHRvIGJlIHVzZWZ1bAotX3Rlc3RjYXBpJChNT0RVTEUuRVhUKTogJChPVVQpX3Rlc3RjYXBpbW9kdWxlJE8gJChPVVQpX3Rlc3RjYXBpX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLV90ZXN0Y2FwJChNT0RVTEUuRVhUKTogX3Rlc3RjYXBpJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLSMgdW5pY29kZWRhdGEgbmVlZHMgdG8gYmUgcmVuYW1lZCB0byBiZSB1c2VmdWwKLXVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKTogJChPVVQpdW5pY29kZWRhdGEkTyAkKE9VVCl1bmljb2RlZGF0YV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAkKE1PRFVMRV9MSUJTKQotCi11bmljb2RlZCQoTU9EVUxFLkVYVCk6IHVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLWNyeXB0JChNT0RVTEUuRVhUKTogJChPVVQpY3J5cHRtb2R1bGUkTyAkKE9VVCljcnlwdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgLWx1ZmMgJChMSUJTKQotCi0jIFRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSByZXF1aXJlcyBhIGNvdXBsZSBvZiBuY3Vyc2VzIGxpYnJhcnkgZW50cnkKLSMgcG9pbnRzLCB3aGljaCBhcmUgYmVzdCBleHBvc2VkIGFzIGV4cG9ydHMgZnJvbSB0aGUgX2N1cnNlcyBtb2R1bGUgRExMCi0kKE9VVClfY3Vyc2VzX20uZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQobm90ZGlyICQqKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RMSUIuRVhUKSkkKERRVU9URSkgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXMgPj4kQAotCUBlY2hvIAl3bm91dHJlZnJlc2ggPj4kQAotCUBlY2hvIAlfbmNfcGFuZWxob29rID4+JEAKLQlAZWNobyAJaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAltdndpbiA+PiRACi0JQGVjaG8gCXN0ZHNjciA+PiRACi0JQGVjaG8gCXd0b3VjaGxuID4+JEAKLQotJChPVVQpX2N1cnNlc19wYW5lbF9tLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKG5vdGRpciAkKikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gc3RhbmRhcmQgbW9kdWxlICQobm90ZGlyICQqKSQoRFFVT1RFKSA+PiRACi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIElNUE9SVFMgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLndub3V0cmVmcmVzaCA+PiRACi0JQGVjaG8gCV9jdXJzZXMuX25jX3BhbmVsaG9vayA+PiRACi0JQGVjaG8gCV9jdXJzZXMuaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLm12d2luID4+JEAKLQlAZWNobyAJX2N1cnNlcy5zdGRzY3IgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLnd0b3VjaGxuID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXNfcGFuZWwgPj4kQAotCi1fY3Vyc2VzJChNT0RMSUIuRVhUKTogJChPVVQpX2N1cnNlc21vZHVsZSRPICQoT1VUKV9jdXJzZXNfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxuY3Vyc2VzCi0KLSMgY3Vyc2VzX3BhbmVsIG5lZWRzIHRvIGJlIHJlbmFtZWQgdG8gYmUgdXNlZnVsCi1fY3Vyc2VzX3BhbmVsJChNT0RVTEUuRVhUKTogJChPVVQpX2N1cnNlc19wYW5lbCRPICQoT1VUKV9jdXJzZXNfcGFuZWxfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxwYW5lbAotCi1fY3Vyc2VzXyQoTU9EVUxFLkVYVCk6IF9jdXJzZXNfcGFuZWwkKE1PRFVMRS5FWFQpCi0JY3AgJF4gJEAKLQotX2RibSQoTU9EVUxFLkVYVCk6ICQoT1VUKV9kYm1tb2R1bGUkTyAkKE9VVClkYm1fbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxnZGJtCi0KLV9nZGJtJChNT0RVTEUuRVhUKTogJChPVVQpX2dkYm1tb2R1bGUkTyAkKE9VVClnZGJtX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sZ2RibQotCi0KLSMgRXhwYXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uLCBzbyB1c2UgdGhlIGluY2x1ZGVkIHZlcnNpb24KLSQoT1VUKXB5ZXhwYXQkTzoJLi4vLi4vTW9kdWxlcy9weWV4cGF0LmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpIC1jIC1vICRAICReCi0kKE9VVCl4bWxwYXJzZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotJChPVVQpeG1scm9sZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi0kKE9VVCl4bWx0b2skTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWx0b2suYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi1weWV4cGF0JChNT0RVTEUuRVhUKTogJChPVVQpcHlleHBhdCRPICQoT1VUKXhtbHBhcnNlJE8gJChPVVQpeG1scm9sZSRPIFwKLQkJJChPVVQpeG1sdG9rJE8gJChPVVQpcHlleHBhdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi1yZWFkbGluZSQoTU9EVUxFLkVYVCk6ICQoT1VUKXJlYWRsaW5lJE8gJChPVVQpcmVhZGxpbmVfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxyZWFkbGluZSAtbG5jdXJzZXMKLQotI190a2ludGVyJChNT0RVTEUuRVhUKTogJChPVVQpX3RraW50ZXIkTyAkKE9VVCl0Y2xOb3RpZnkkTyAkKE9VVCl0a2FwcGluaXQkTwotX3RraW50ZXIkKE1PRFVMRS5FWFQpOiAkKE9VVClfdGtpbnRlciRPICQoT1VUKXRjbE5vdGlmeSRPIFwKLQkJJChPVVQpX3RraW50ZXJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgJChUS19MSUJTKQotCi16bGliJChNT0RVTEUuRVhUKTogJChPVVQpemxpYm1vZHVsZSRPICQoT1VUKXpsaWJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWx6Ci0KLWJ6MiQoTU9EVUxFLkVYVCk6ICQoT1VUKWJ6Mm1vZHVsZSRPICQoT1VUKWJ6Ml9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbGJ6MgotCi1fc3NsJChNT0RVTEUuRVhUKTogJChPVVQpX3NzbCRPICQoT1VUKV9zc2xfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxzc2wgLWxjcnlwdG8KLQotIyB0aGUgdGVzdCB0YXJnZXQKLXRlc3Q6Ci0JLWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0JLS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCi0taW5jbHVkZSAkKE9VVEJBU0UpcHl0aG9uLmRlcApkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L1JFQURNRS5vczJlbXggYi9QQy9vczJlbXgvUkVBRE1FLm9zMmVteApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjZjZkZi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvUkVBRE1FLm9zMmVteAorKysgL2Rldi9udWxsCkBAIC0xLDY2MyArMCwwIEBACi1UaGlzIGlzIGEgcG9ydCBvZiBQeXRob24gMi42IHRvIE9TLzIgdXNpbmcgdGhlIEVNWCBkZXZlbG9wbWVudCB0b29scwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XaGF0J3MgbmV3IHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFub3RoZXIgZGF5LCBhbm90aGVyIHZlcnNpb24uLi4KLQotCi1MaWNlbnNlcyBhbmQgaW5mbyBhYm91dCBQeXRob24gYW5kIEVNWAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGxlYXNlIHJlYWQgdGhlIGZpbGUgUkVBRE1FLlB5dGhvbi0yLjYgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlIGZvciAKLWluZm9ybWF0aW9uIGFib3V0IFB5dGhvbiAyLjYuICBUaGlzIGZpbGUgaXMgdGhlIFJFQURNRSBmaWxlIGZyb20gdGhlIAotUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGF2YWlsYWJsZSB2aWEgaHR0cDovL3d3dy5weXRob24ub3JnLyAKLWFuZCBpdHMgbWlycm9ycy4gIFRoZSBmaWxlIExJQ0VOQ0UuUHl0aG9uLTIuNiBpcyB0aGUgdGV4dCBvZiB0aGUgTGljZW5jZSAKLWZyb20gdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbi4KLQotTm90ZSB0aGF0IHRoZSBFTVggcGFja2FnZSB0aGF0IHRoaXMgcGFja2FnZSBkZXBlbmRzIG9uIGlzIHJlbGVhc2VkIHVuZGVyIAotdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAotYWNjb21wYW55aW5nIHRoZSBFTVggUnVudGltZSBsaWJyYXJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIAotaW1wbGljYXRpb25zIG9mIHRoaXMuICBBIGNvcHkgb2YgdmVyc2lvbiAyIG9mIHRoZSBHUEwgaXMgaW5jbHVkZWQgYXMgdGhlIAotZmlsZSBDT1BZSU5HLmdwbDIuCi0KLVJlYWRsaW5lIGFuZCBHREJNIGFyZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4gIEkgdGhpbmsgCi1FYmVyaGFyZCBNYXR0ZXMnIHBvcnRpbmcgY2hhbmdlcyB0byBCU0QgREIgdjEuODUgYXJlIGFsc28gR1BMJ2VkIChCU0QgREIgCi1pdHNlbGYgaXMgQlNEIExpY2VuY2VkKS4gIG5jdXJzZXMgYW5kIGV4cGF0IGFwcGVhciB0byBiZSBjb3ZlcmVkIGJ5IE1JVCAKLXN0eWxlIGxpY2VuY2VzIC0gcGxlYXNlIHJlZmVyIHRvIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgbW9yZSBkZXRhaWwuICAKLXpsaWIgaXMgZGlzdHJpYnV0YWJsZSB1bmRlciBhIHZlcnkgZnJlZSBsaWNlbnNlLiAgR05VIFVGQyBpcyB1bmRlciB0aGUgCi1HTlUgTEdQTCAoc2VlIGZpbGUgQ09QWUlORy5saWIpLgotCi1NeSBwYXRjaGVzIHRvIHRoZSBQeXRob24tMi54IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhbmQgYW55IG90aGVyIHBhY2thZ2VzIAotdXNlZCBpbiB0aGlzIHBvcnQsIGFyZSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLVRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIAotdXNlIG9mIHRoZSBzb2Z0d2FyZS4KLQotSSBkbyBob3BlIGhvd2V2ZXIgdGhhdCBpdCBwcm92ZXMgdXNlZnVsIHRvIHNvbWVvbmUuCi0KLQotT3RoZXIgcG9ydHMKLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGhhdmUgYmVlbiBwb3J0cyBvZiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24gdG8gT1MvMi4KLQotVGhlIGJlc3Qga25vd24gd291bGQgYmUgdGhhdCBieSBKZWZmIFJ1c2gsIG1vc3QgcmVjZW50bHkgb2YgdmVyc2lvbiAKLTEuNS4yLiAgSmVmZiB1c2VkIElCTSdzIFZpc3VhbCBBZ2UgQysrICh2MykgZm9yIGhpcyBwb3J0cywgYW5kIGhpcyAKLXBhdGNoZXMgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLUFuZHkgWmFib2xvdG55IGltcGxlbWVudGVkIGEgcG9ydCBvZiBQeXRob24gdjEuNS4yIHVzaW5nIHRoZSBFTVggCi1kZXZlbG9wbWVudCB0b29scy4gIEhpcyBwYXRjaGVzIGFnYWluc3QgdGhlIFB5dGhvbiB2MS41LjIgc291cmNlIAotZGlzdHJpYnV0aW9uIGhhdmUgYmVjb21lIHRoZSBjb3JlIG9mIHRoaXMgcG9ydCwgYW5kIHdpdGhvdXQgaGlzIGVmZm9ydHMgCi10aGlzIHBvcnQgd291bGRuJ3QgZXhpc3QuICBBbmR5J3MgcG9ydCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIAotY29tcGlsZWQgd2l0aCBoaXMgcG9ydCBvZiBnY2MgMi45NS4yIHRvIEVNWCwgd2hpY2ggSSBoYXZlIGJ1dCBoYXZlIAotY2hvc2VuIG5vdCB0byB1c2UgZm9yIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcG9ydCAoc2VlIGl0ZW0gMTYgCi1vZiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93KS4KLQotSXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0aGVzZSBlYXJsaWVyIHBvcnRzIHN0aWxsIHVzYWJsZSBhZnRlciBpbnN0YWxsaW5nIAotdGhpcyBwb3J0IC0gc2VlIHRoZSBSRUFETUUub3MyZW14Lm11bHRpcGxlX3ZlcnNpb25zIGZpbGUsIGNvbnRyaWJ1dGVkIGJ5Ci1EciBEYXZpZCBNZXJ0eiwgZm9yIGEgc3VnZ2VzdGVkIGFwcHJvYWNoIHRvIGFjaGlldmluZyB0aGlzLgotCi0KLVNvZnR3YXJlIHJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgcGFja2FnZSByZXF1aXJlcyB0aGUgRU1YIFJ1bnRpbWUgcGFja2FnZSwgYXZhaWxhYmxlIGZyb20gdGhlIAotSG9iYmVzIChodHRwOi8vaG9iYmVzLm5tc3UuZWR1LykgYW5kIExFTyAoaHR0cDovL2FyY2hpdi5sZW8ub3JnLykgCi1hcmNoaXZlcyBvZiBPUy8yIHNvZnR3YXJlLiAgSSBoYXZlIHVzZWQgRU1YIHZlcnNpb24gMC45ZCBmaXgwNCBpbiAKLWRldmVsb3BpbmcgdGhpcyBwb3J0LgotCi1NeSBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgcnVubmluZyBPUy8yIHY0IHdpdGggZml4cGFjayAxMi4KLQotM3JkIHBhcnR5IHNvZnR3YXJlIHdoaWNoIGhhcyBiZWVuIGxpbmtlZCBpbnRvIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzOgotLSBuY3Vyc2VzICAgICAgKHNlZSBodHRwOi8vZGlja2V5Lmhpcy5jb20vIGZvciBtb3JlIGluZm8sIHY1LjIpCi0tIEdOVSBSZWFkbGluZSAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYyLjEpCi0tIEdOVSBHREJNICAgICAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYxLjcuMykKLS0gemxpYiAgICAgICAgIChkZXJpdmVkIGZyb20gSHVuZy1DaGkgQ2h1J3MgcG9ydCBvZiB2MS4xLjMsIHYxLjEuNCkKLS0gZXhwYXQgICAgICAgIChkaXN0cmlidXRlZCB3aXRoIFB5dGhvbiwgdjEuOTUuNikKLS0gR05VIFVGQyAgICAgIChLYWkgVXdlIFJvbW1lbCdzIHBvcnQgYXZhaWxhYmxlIGZyb20gTEVPLCB2Mi4wLjQpCi0KLQotQWJvdXQgdGhpcyBwb3J0Ci0tLS0tLS0tLS0tLS0tLS0KLQotSSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHRoaXMgcG9ydCBhcyBjb21wbGV0ZSBhbmQgZnVuY3Rpb25hbCBhcyBJIGNhbiwgCi1ub3R3aXRoc3RhbmRpbmcgdGhlIGlzc3VlcyBpbiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93LgotCi1Db3JlIGNvbXBvbmVudHM6Ci0KLVB5dGhvbi5leGUgaXMgbGlua2VkIGFzIGFuIGEub3V0IGV4ZWN1dGFibGUsIGllIHVzaW5nIEVNWCBtZXRob2QgRTEgCi10byBjb21waWxlICYgbGluayB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgaXMgc28gdGhhdCBmb3JrKCkgd29ya3MgKHNlZSAKLSJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAxKS4KLQotUHl0aG9uMjYuZGxsIGlzIGNyZWF0ZWQgYXMgYSBub3JtYWwgT01GIERMTCwgd2l0aCBhbiBPTUYgaW1wb3J0IAotbGlicmFyeSBhbmQgbW9kdWxlIGRlZmluaXRpb24gZmlsZS4gIFRoZXJlIGlzIGFsc28gYW4gYS5vdXQgKC5hKSBpbXBvcnQgCi1saWJyYXJ5IHRvIHN1cHBvcnQgbGlua2luZyB0aGUgRExMIHRvIGEub3V0IGV4ZWN1dGFibGVzLiAgVGhlIERMTCAKLXJlcXVpcmVzIHRoZSBFTVggcnVudGltZSBETExzLgotCi1UaGlzIHBvcnQgaGFzIGJlZW4gYnVpbHQgd2l0aCBjb21wbGV0ZSBzdXBwb3J0IGZvciBtdWx0aXRocmVhZGluZy4KLQotTW9kdWxlczoKLQotV2l0aCB0aGUgZXhjZXB0aW9uIG9mIG1vZHVsZXMgdGhhdCBoYXZlIGEgc2lnbmlmaWNhbnQgY29kZSBzaXplLCBvciBhcmUgCi1ub3QgcmVjb21tZW5kZWQgb3IgZGVzaXJlZCBmb3Igbm9ybWFsIHVzZSwgdGhlIHN0YW5kYXJkIG1vZHVsZXMgYXJlIG5vdyAKLWJ1aWx0IGludG8gdGhlIGNvcmUgRExMIHJhdGhlciB0aGFuIGNvbmZpZ3VyZWQgYXMgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzLiAgVGhpcyBpcyBmb3IgYm90aCByZWFzb25zIG9mIHBlcmZvcm1hbmNlIChzdGFydHVwIHRpbWUpIGFuZCAKLW1lbW9yeSB1c2UgKGxvdHMgb2Ygc21hbGwgRExMcyBmcmFnbWVudCB0aGUgYWRkcmVzcyBzcGFjZSkuCi0KLUkgaGF2ZW4ndCB5ZXQgY2hhbmdlZCB0aGUgYnVpbGRpbmcgb2YgUHl0aG9uJ3MgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzIG92ZXIgdG8gdXNpbmcgdGhlIERpc3RVdGlscy4KLQotU2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAzIGZvciBub3RlcyBhYm91dCB0aGUgZmNudGwgbW9kdWxlLCBhbmQgCi0iWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMTAgZm9yIG5vdGVzIGFib3V0IHRoZSBwd2QgYW5kIGdycCBtb2R1bGVzLgotCi1UaGlzIHBvcnQgc3VwcG9ydHMgY2FzZSBzZW5zaXRpdmUgbW9kdWxlIGltcG9ydCBzZW1hbnRpY3MsIG1hdGNoaW5nIAotdGhlIFdpbmRvd3MgcmVsZWFzZS4gIFRoaXMgY2FuIGJlIGRlYWN0aXZhdGVkIGJ5IHNldHRpbmcgdGhlIFBZVEhPTkNBU0VPSyAKLWVudmlyb25tZW50IHZhcmlhYmxlICh0aGUgdmFsdWUgZG9lc24ndCBtYXR0ZXIpIC0gc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgCi1pdGVtIDEyLgotCi1PcHRpb25hbCBtb2R1bGVzOgotCi1XaGVyZSBJJ3ZlIGJlZW4gYWJsZSB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIDNyZCBwYXJ0eSBwYWNrYWdlcyBhbHJlYWR5IAotcG9ydGVkIHRvIE9TLzIsIEkndmUgYnVpbHQgYW5kIGluY2x1ZGVkIHRoZW0uCi0KLVRoZXNlIGluY2x1ZGUgbmN1cnNlcyAoX2N1cnNlcywgX2N1cnNlc19wYW5lbCksCi1HTlUgR0RCTSAoZ2RibSwgZGJtKSwgemxpYiAoemxpYiksIEdOVSBSZWFkbGluZSAocmVhZGxpbmUpLCBhbmQgR05VIFVGQyAKLShjcnlwdCkuCi0KLUV4cGF0IGlzIG5vdyBpbmNsdWRlZCBpbiB0aGUgUHl0aG9uIHJlbGVhc2Ugc291cmNlYmFsbCwgYW5kIHRoZSBweWV4cGF0IAotbW9kdWxlIGlzIGFsd2F5cyBidWlsdC4KLQotSSBoYXZlIGJ1aWx0IHRoZXNlIG1vZHVsZXMgc3RhdGljYWxseSBsaW5rZWQgYWdhaW5zdCB0aGUgM3JkIHBhcnR5IAotbGlicmFyaWVzLiAgVW5mb3J0dW5hdGVseSBteSBhdHRlbXB0cyB0byB1c2UgdGhlIGRsbCB2ZXJzaW9uIG9mIEdOVSAKLXJlYWRsaW5lIGhhdmUgYmVlbiBhIGRpc21hbCBmYWlsdXJlLCBpbiB0aGF0IHdoZW4gdGhlIGR5bmFtaWNhbGx5IAotbGlua2VkIHJlYWRsaW5lIG1vZHVsZSBpcyBhY3RpdmUgb3RoZXIgbW9kdWxlcyBpbW1lZGlhdGVseSBwcm92b2tlIGEgCi1jb3JlIGR1bXAgd2hlbiBpbXBvcnRlZC4KLQotT25seSB0aGUgQlNEIERCIHBhY2thZ2UgKHBhcnQgb2YgdGhlIEJTRCBwYWNrYWdlIGRpc3RyaWJ1dGVkIHdpdGggRU1YKSAKLW5lZWRzIHNvdXJjZSBtb2RpZmljYXRpb25zIHRvIGJlIHVzZWQgZm9yIHRoaXMgcG9ydCwgcGVydGFpbmluZyB0byB1c2UgCi1vZiBlcnJubyB3aXRoIG11bHRpdGhyZWFkaW5nLgotCi1UaGUgb3RoZXIgcGFja2FnZXMsIGV4Y2VwdCBmb3IgbmN1cnNlcyBhbmQgemxpYiwgbmVlZGVkIE1ha2VmaWxlIGNoYW5nZXMgCi1mb3IgbXVsdGl0aHJlYWRpbmcgc3VwcG9ydCBidXQgbm8gc291cmNlIGNoYW5nZXMuCi0KLVRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSBpcyBhIHBvdGVudGlhbCBwcm9ibGVtIC0gc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDEzLgotCi1VcHN0cmVhbSBzb3VyY2UgcGF0Y2hlczoKLQotTm8gdXBkYXRlcyB0byB0aGUgUHl0aG9uIDIuNiByZWxlYXNlIGhhdmUgYmVjb21lIGF2YWlsYWJsZS4KLQotTGlicmFyeSBhbmQgb3RoZXIgZGlzdHJpYnV0ZWQgUHl0aG9uIGNvZGU6Ci0KLVRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSBsaXZlcyBpbiB0aGUgTGliIGRpcmVjdG9yeS4gIEFsbCB0aGUgc3RhbmRhcmQgCi1saWJyYXJ5IGNvZGUgaW5jbHVkZWQgd2l0aCB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzIGluY2x1ZGVkIAotaW4gdGhlIGJpbmFyeSBhcmNoaXZlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRvcy04eDMgYW5kIHRraW50ZXIgCi1zdWJkaXJlY3RvcmllcyB3aGljaCBoYXZlIGJlZW4gb21pdHRlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSAKLWFyY2hpdmUgLSB0aGUgZG9zLTh4MyBjb21wb25lbnRzIGFyZSB1bm5lY2Vzc2FyeSBkdXBsaWNhdGVzIGFuZCBUa2ludGVyIAotaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBvcnQgKHlldCkuICBBbGwgdGhlIHBsYXQtKiBzdWJkaXJlY3RvcmllcyBpbiB0aGUgCi1zb3VyY2UgZGlzdHJpYnV0aW9uIGhhdmUgYWxzbyBiZWVuIG9taXR0ZWQsIGV4Y2VwdCBmb3IgdGhlIHBsYXQtb3MyZW14IAotc3ViZGlyZWN0b3J5LgotCi1UaGUgVG9vbHMgYW5kIERlbW8gZGlyZWN0b3JpZXMgY29udGFpbiBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNjcmlwdHMuICAKLVRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgYmluYXJ5IGFyY2hpdmUsIHRoZSBEZW1vL3NnaSwgRGVtby9UaXgsIAotRGVtby90a2ludGVyLCBUb29scy9hdWRpb3B5IGFuZCBUb29scy9JRExFIHN1YmRpcmVjdG9yaWVzIGhhdmUgYmVlbiAKLW9taXR0ZWQgYXMgbm90IGJlaW5nIHN1cHBvcnRlZCBieSB0aGlzIHBvcnQuICBUaGUgTWlzYyBkaXJlY3RvcnkgaGFzIAotYWxzbyBiZWVuIG9taXR0ZWQuCi0KLUFsbCBzdWJkaXJlY3RvcmllcyBvbWl0dGVkIGZyb20gdGhlIGJpbmFyeSBhcmNoaXZlIGNhbiBiZSByZWNvbnN0aXR1dGVkIAotZnJvbSB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uLCBpZiBkZXNpcmVkLgotCi1TdXBwb3J0IGZvciBidWlsZGluZyBQeXRob24gZXh0ZW5zaW9uczoKLQotVGhlIENvbmZpZyBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGVzIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gCi1vZiB0aGUgaW50ZXJwcmV0ZXIgYW5kIHRoZSBNYWtlZmlsZSwgaW1wb3J0IGxpYnJhcmllcyBmb3IgdGhlIFB5dGhvbiBETEwsIAotYW5kIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlIHVzZWQgdG8gY3JlYXRlIHRoZSBQeXRob24gRExMLiAgVGhlIAotSW5jbHVkZSBzdWJkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBzdGFuZGFyZCBQeXRob24gaGVhZGVyIGZpbGVzIAotbmVlZGVkIGZvciBidWlsZGluZyBleHRlbnNpb25zLgotCi1BcyBJIGRvbid0IGhhdmUgdGhlIFZpc3VhbCBBZ2UgQysrIGNvbXBpbGVyLCBJJ3ZlIG1hZGUgbm8gYXR0ZW1wdCB0byAKLWhhdmUgdGhpcyBwb3J0IHN1cHBvcnQgZXh0ZW5zaW9ucyBidWlsdCB3aXRoIHRoYXQgY29tcGlsZXIuCi0KLQotUGFja2FnaW5nCi0tLS0tLS0tLS0KLQotVGhpcyBwb3J0IGlzIHBhY2thZ2VkIGFzIGZvbGxvd3M6Ci0tIHB5dGhvbi0yLjYtb3MyZW14LWJpbi0wMz8/Pz8uemlwICAoYmluYXJpZXMsIGxpYnJhcnkgbW9kdWxlcykKLS0gcHl0aG9uLTIuNi1vczJlbXgtc3JjLTAzPz8/PyAgICAgIChwYXRjaGVzK21ha2VmaWxlcyBmb3Igbm9uLVB5dGhvbiBjb2RlKQotCi1BcyBhbGwgdGhlIFB5dGhvbiBzcGVjaWZpYyBwYXRjaGVzIGZvciB0aGUgcG9ydCBhcmUgbm93IHBhcnQgb2YgdGhlIAotUHl0aG9uIHJlbGVhc2UgdGFyYmFsbCwgb25seSB0aGUgcGF0Y2hlcyBhbmQgbWFrZWZpbGVzIGludm9sdmVkIGluIAotYnVpbGRpbmcgZXh0ZXJuYWwgbGlicmFyaWVzIGZvciBvcHRpb25hbCBleHRlbnNpb25zIGFyZSBpbmNsdWRlZCBpbiAKLXRoZSBzb3VyY2UgYXJjaGl2ZS4KLQotRG9jdW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBsYW5ndWFnZSwgYXMgd2VsbCBhcyB0aGUgUHl0aG9uIDIuNiAKLXNvdXJjZSBkaXN0aWJ1dGlvbiwgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIFB5dGhvbiB3ZWJzaXRlIAotKGh0dHA6Ly93d3cucHl0aG9uLm9yZy8pIG9yIHRoZSBQeXRob24gcHJvamVjdCBwYWdlcyBhdCBTb3VyY2Vmb3JnZSAKLShodHRwOi8vc2YubmV0L3Byb2plY3RzL3B5dGhvbi8pLgotCi0KLUluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0tCi0KLU9idGFpbiBhbmQgaW5zdGFsbCwgYXMgcGVyIHRoZSBpbmNsdWRlZCBpbnN0cnVjdGlvbnMsIHRoZSBFTVggcnVudGltZSAKLXBhY2thZ2UuCi0KLVVucGFjayB0aGlzIGFyY2hpdmUsIHByZXNlcnZpbmcgdGhlIHN1YmRpcmVjdG9yaWVzLCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgCi1vZiB0aGUgZHJpdmUgd2hlcmUgeW91IHdhbnQgUHl0aG9uIHRvIGxpdmUuCi0KLUFkZCB0aGUgUHl0aG9uIGRpcmVjdG9yeSAoZWcgQzpcUHl0aG9uMjYpIHRvIHRoZSBQQVRIIGFuZCBMSUJQQVRIIAotdmFyaWFibGVzIGluIENPTkZJRy5TWVMuCi0KLVlvdSBzaG91bGQgdGhlbiBzZXQgdGhlIFBZVEhPTkhPTUUgYW5kIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzIAotaW4gQ09ORklHLlNZUy4KLQotUFlUSE9OSE9NRSBzaG91bGQgYmUgc2V0IHRvIFB5dGhvbidzIHRvcCBsZXZlbCBkaXJlY3RvcnkuICBQWVRIT05QQVRIIAotc2hvdWxkIGJlIHNldCB0byB0aGUgc2VtaWNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHByaW5jaXBhbCBQeXRob24gbGlicmFyeSAKLWRpcmVjdG9yaWVzLgotSSB1c2U6Ci0gIFNFVCBQWVRIT05IT01FPUY6L1B5dGhvbjI2Ci0gIFNFVCBQWVRIT05QQVRIPUY6L1B5dGhvbjI2L0xpYjtGOi9QeXRob24yNi9MaWIvcGxhdC1vczJlbXg7Ci0gICAgICAgICAgICAgICAgIEY6L1B5dGhvbjI2L0xpYi9saWItZHlubG9hZDtGOi9QeXRob24yNi9MaWIvc2l0ZS1wYWNrYWdlcwotCi1OT1RFITogIHRoZSBQWVRIT05QQVRIIHNldHRpbmcgYWJvdmUgaXMgbGluZXdyYXBwZWQgZm9yIHRoaXMgZG9jdW1lbnQgLSBpdCAKLXNob3VsZCBhbGwgYmUgb24gb25lIGxpbmUgaW4gQ09ORklHLlNZUyEKLQotSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBjdXJzZXMgbW9kdWxlLCB5b3Ugc2hvdWxkIHNldCB0aGUgVEVSTSBhbmQgVEVSTUlORk8gCi1lbnZpcm9ubWVudCB2YXJpYWJsZXMgYXBwcm9wcmlhdGVseS4KLQotSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBuY3Vyc2VzIGluc3RhbGxlZCwgSSBoYXZlIGluY2x1ZGVkIGEgY29weSBvZiB0aGUgCi1FTVggc3Vic2V0IG9mIHRoZSBUZXJtaW5mbyBkYXRhYmFzZSBpbmNsdWRlZCB3aXRoIHRoZSBuY3Vyc2VzLTUuMiBzb3VyY2UgCi1kaXN0cmlidXRpb24uICBUaGlzIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhlIFRFUk1JTkZPIGVudmlyb25tZW50IHZhcmlhYmxlIAotdG8gdGhlIHBhdGggb2YgdGhlIFRlcm1pbmZvIHN1YmRpcmVjdG9yeSBiZWxvdyB0aGUgUHl0aG9uIGhvbWUgZGlyZWN0b3J5LgotT24gbXkgc3lzdGVtIHRoaXMgbG9va3MgbGlrZToKLSAgU0VUIFRFUk1JTkZPPUY6L1B5dGhvbjI2L1Rlcm1pbmZvCi0KLUZvciB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgSSB3b3VsZCB0cnkgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gIFNFVCBURVJNPWFuc2kKLSAgU0VUIFRFUk09b3MyCi0gIFNFVCBURVJNPXdpbmRvdwotCi1Zb3Ugd2lsbCBoYXZlIHRvIHJlYm9vdCB5b3VyIHN5c3RlbSBmb3IgdGhlc2UgY2hhbmdlcyB0byBDT05GSUcuU1lTIHRvIHRha2UgCi1lZmZlY3QuCi0KLUlmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYWxsIHRoZSBpbmNsdWRlZCBQeXRob24gbGlicmFyeSBtb2R1bGVzIHRvIGJ5dGVjb2RlLCAKLXlvdSBjYW4gY2hhbmdlIGludG8gdGhlIFB5dGhvbiBob21lIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBDT01QSUxFQUxMLkNNRCAKLWJhdGNoIGZpbGUuCi0KLVlvdSBjYW4gZXhlY3V0ZSB0aGUgcmVncmVzc2lvbiB0ZXN0cyBpbmNsdWRlZCB3aXRoIHRoZSBQeXRob24gMi42IHNvdXJjZSAKLWRpc3RyaWJ1dGlvbiBieSBjaGFuZ2luZyB0byB0aGUgUHl0aG9uIDIuNiBob21lIGRpcmVjdG9yeSBhbmQgZXhlY3V0aW5nIHRoZSAKLVJFR1JURVNULkNNRCBiYXRjaCBmaWxlLiAgVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUga25vd24gdG8gZmFpbCBhdCB0aGlzIAotdGltZToKLS0gdGVzdF9taGxpYiAoSSBkb24ndCBrbm93IG9mIGFueSBwb3J0IG9mIE1IIHRvIE9TLzIpOwotLSB0ZXN0X3N0cnB0aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF90aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF9wb3NpeHBhdGggKHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMjMpLgotCi1Ob3RlIHRoYXQgc29tZSBvZiB0aGUgbmV0d29yayByZWxhdGVkIHRlc3RzIGV4cGVjdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlCi0oaW50ZXJmYWNlICJsbyIsIHdpdGggSVAgYWRkcmVzcyAxMjcuMC4wLjEpIHRvIGJlIGVuYWJsZWQsIHdoaWNoIGZyb20gbXkKLWV4cGVyaWVuY2UgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uICBBZGRpdGlvbmFsbHksIHRlc3RfcG9wZW4yCi1leHBlY3RzIHRoZSAiY2F0IiB1dGlsaXR5IChzdWNoIGFzIGZvdW5kIGluIHBvcnRzIG9mIHRoZSBHTlUgdG9vbHMpIHRvCi1iZSBpbnN0YWxsZWQuCi0KLQotQnVpbGRpbmcgZnJvbSBzb3VyY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdpdGggdGhlIEVNWCBwb3J0IG5vdyBjaGVja2VkIGludG8gUHl0aG9uJ3MgQ1ZTIHJlcG9zaXRvcnksIHRoZSBidWlsZCAKLWluZnJhc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIFB5dGhvbiByZWxlYXNlIHNvdXJjZWJhbGwuCi0KLVByZXJlcXVpc2l0ZXMKLQotRmlyc3QgYW5kIGZvcmVtb3N0LCB5b3UgbmVlZCBhbiBvcGVyYXRpb25hbCBFTVggZGV2ZWxvcG1lbnQgaW5zdGFsbGF0aW9uIC0gCi1FTVggdjAuOWQgd2l0aCBmaXgwNCAodGhlIGxhdGVzdCBhdCB0aW1lIG9mIHdyaXRpbmcpICYgdGhlIGdjYyAyLjguMSAKLWNvbXBpbGVyIHJlbGVhc2VkIGJ5IEViZXJoYXJkIE1hdHRlcyBpcyB0aGUgcmVjb21tZW5kZWQgc2V0dXAuCi0KLUlmIHlvdSBoYXZlIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgZ2NjIGluc3RhbGxlZCwgc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDE2LgotCi1PdGhlciBpdGVtcyBvZiBzb2Z0d2FyZSByZXF1aXJlZDotCi0KLS0gR05VIG1ha2UgKEknbSB1c2luZyB2My43Ni4xKQotLSBybSwgY3AsIG1rZGlyIGZyb20gdGhlIEdOVSBmaWxlIHV0aWxpdGllcyBwYWNrYWdlCi0tIEdOVSBmaW5kCi0tIEdOVSBzZWQKLQotUHJvY2VkdXJlCi0KLTAuIGFsbCBjaGFuZ2VzIG1lbnRpb25lZCBhcHBseSB0byBmaWxlcyBpbiB0aGUgUEMvb3MyZW14IHN1YmRpcmVjdG9yeSAKLSAgIG9mIHRoZSBQeXRob24gcmVsZWFzZSBzb3VyY2UgdHJlZS4gIG1ha2UgaXMgYWxzbyBleGVjdXRlZCBmcm9tIHRoaXMgCi0gICBkaXJlY3RvcnksIHNvIGNoYW5nZSBpbnRvIHRoaXMgZGlyZWN0b3J5IGJlZm9yZSBwcm9jZWVkaW5nLgotCi0xLiBkZWNpZGUgaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbi4KLSAgIElmIHlvdSB3aXNoIHRvIGRvIHRoaXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJQl9ESVIgCi0gICB0byB0aGUgZGlyZWN0b3J5IHlvdSB3aXNoIHRvIHVzZSBmb3IgUFlUSE9OSE9NRSAKLSAgIChlZyAvdXNyL2xvY2FsL2xpYi9weXRob24yLjYpLgotCi0gICBJZiB5b3Ugd2FudCBQeXRob24gdG8gZmluZCBpdHMgbGlicmFyeSB3aXRob3V0IHRoZSBQWVRIT05IT01FIAotICAgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0LCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSAKLSAgIEZJWEVEX1BZSE9NRSB0byAieWVzIiAodW5jb21tZW50IHRoZSBhcHByb3ByaWF0ZSBsaW5lKS4KLQotMi4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyAocHl0aG9uLmV4ZSwgcHl0aG9ucG0uZXhlICYgcGdlbi5leGUpIAotICAgdG8gYmUgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIFBZVEhPTkhPTUUgZGlyZWN0b3J5LCBzZXQgCi0gICB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIEVYRV9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4KLQotMy4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBjb3JlIERMTCAocHl0aG9uMzMuZGxsKSB0byBiZSBpbnN0YWxsZWQgaW4gYSAKLSAgIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyBhcmUgCi0gICBpbnN0YWxsZWQgKGJ5IGRlZmF1bHQsIHRoZSBQWVRIT05IT01FIGRpcmVjdG9yeSksIHNldCB0aGUgdmFsdWUgb2YgdGhlIAotICAgTWFrZWZpbGUgdmFyaWFibGUgRExMX0RJUiB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5LiAgVGhpcyBETEwgbXVzdCAKLSAgIGJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSBvbiB0aGUgc3lzdGVtJ3MgTElCUEFUSCwgb3IgdGhhdCBnZXRzIHNldCAKLSAgIHdpdGggQkVHSU5MSUJQQVRIIG9yIEVORExJQlBBVEguCi0KLTQuIElmIHlvdSBoYXZlIGluc3RhbGxlZCBhbnkgb2YgdGhlIGxpYnJhcmllcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIAotICAgb3B0aW9uYWwgUHl0aG9uIG1vZHVsZXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIHJlbGV2YW50IEhBVkVfPHBhY2thZ2U+IAotICAgTWFrZWZpbGUgdmFyaWFibGUgdG8gInllcyIuICBUaGUgTWFrZWZpbGUgY3VycmVudGx5IHN1cHBvcnRzOgotCi0gICBsaWJyYXJ5ICAgICAgICAgICAgICAgTWFrZWZpbGUgdmFyaWFibGUKLSAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgIHpsaWIgKDEuMS40KSAgICAgICAgICBIQVZFX1pMSUIKLSAgIEdOVSBVbHRyYUZhc3QgQ3J5cHQgICBIQVZFX1VGQwotICAgVGNsL1RrICAgICAgICAgICAgICAgIEhBVkVfVENMVEsgKG5vdCBrbm93biB0byB3b3JrKQotICAgR05VIFJlYWRsaW5lICAgICAgICAgIEhBVkVfR1JFQURMSU5FCi0gICBuY3Vyc2VzICAgICAgICAgICAgICAgSEFWRV9OQ1VSU0VTCi0gICBHTlUgZ2RibSAgICAgICAgICAgICAgSEFWRV9HREJNCi0gICBsaWJiejIgICAgICAgICAgICAgICAgSEFWRV9CWjIKLSAgIE9wZW5TU0wgICAgICAgICAgICAgICBIQVZFX09QRU5TU0wKLQotICAgUGxlYXNlIG5vdGUgdGhhdCB5b3UgbmVlZCB0byBjaGVjayB0aGF0IHdoYXQgeW91IGhhdmUgaW5zdGFsbGVkIAotICAgaXMgY29tcGF0aWJsZSB3aXRoIFB5dGhvbidzIGJ1aWxkIG9wdGlvbnMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgCi0gICBCU0QgREIgdjEuODUgbGlicmFyeSBuZWVkcyB0byBiZSByZWJ1aWx0IHdpdGggYSBzb3VyY2UgcGF0Y2ggZm9yIAotICAgbXVsdGl0aHJlYWQgc3VwcG9ydCAoZG9lc24ndCBjaGFuZ2UgdGhlIGxpYnJhcnkncyByZWVudHJhbnQgc3RhdHVzIAotICAgYnV0IGFsbG93cyBpdCB0byBiZSBsaW5rZWQgdG8gUHl0aG9uIHdoaWNoIGlzIG11bHRpdGhyZWFkZWQpLiAgCi0gICBXaWRlbHkgYXZhaWxhYmxlIGJpbmFyeSBwYWNrYWdlcyBvZiBvdGhlciBsaWJyYXJ5cyAmIERMTHMgYXJlIAotICAgbm90IGJ1aWx0L2xpbmtlZCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuICBCZXdhcmUhCi0KLSAgIEFsc28gbm90ZSB0aGF0IHRoZSBNYWtlZmlsZSBjdXJyZW50bHkgZXhwZWN0cyBhbnkgbGlicmFyaWVzIHRvIGJlIAotICAgZm91bmQgd2l0aCB0aGUgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoLiAgWW91IG1heSBuZWVkIHRvIGFkZCAKLSAgIC1MIHN3aXRjaGVzIHRvIHRoZSBMREZMQUdTIE1ha2VmaWxlIHZhcmlhYmxlIGlmIHlvdSBoYXZlIGluc3RhbGxlZCAKLSAgIGxpYnJhcmllcyBpbiBkaXJlY3RvcmllcyBub3QgaW4gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggKHdoaWNoIGNhbiAKLSAgIGJlIGNvbnRyb2xsZWQgYnkgdGhlIExJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2VkIGJ5IEVNWCkuCi0KLTUuIG1ha2UKLQotICAgSXQgaXMgdXN1YWxseSBhIGdvb2QgaWRlYSB0byByZWRpcmVjdCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyAKLSAgIG9mIHRoZSBtYWtlIHByb2Nlc3MgdG8gbG9nIGZpbGVzLCBzbyB0aGF0IHlvdSBjYW4gcmV2aWV3IGFueSBtZXNzYWdlcy4gCi0KLTYuIG1ha2UgdGVzdAotCi0gICBUaGlzIHJ1bnMgdGhlIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLCBhbmQgY29tcGxldGlvbiBpcyBhIHNpZ24gb2YgCi0gICBhIHVzYWJsZSBidWlsZC4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGxpc3Qgb2Ygc2tpcHBlZCBtb2R1bGVzIHRvIAotICAgZW5zdXJlIHRoYXQgYW55IG9wdGlvbmFsIG1vZHVsZXMgeW91IHNlbGVjdGVkIGhhdmUgYmVlbiBidWlsdDsgCi0gICBjaGVja2luZyB0aGUgbGlzdCBvZiBmYWlsdXJlcyBhZ2FpbnN0IHRoZSBsaXN0IG9mIGtub3duIGZhaWx1cmVzIAotICAgZWxzZXdoZXJlIGluIHRoaXMgZG9jdW1lbnQgaXMgYWxzbyBwcnVkZW50LgotCi03LiBtYWtlIGluc3RhbGwKLSAgID4+Pj4+PiBOT1QgWUVUIENPTVBMRVRFIDw8PDw8PCAKLQotOC4gY2hhbmdlIHRvIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZSBhbmQgc3RhcnQgUHl0aG9uLiAKLSAgIENoZWNrIHRoZSB2ZXJzaW9uIGFuZCBidWlsZCBkYXRlIHRvIGNvbmZpcm0gc2F0aXNmYWN0b3J5IGluc3RhbGxhdGlvbi4KLQotCi1ZT1UgSEFWRSBCRUVOIFdBUk5FRCEhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUkga25vdyBhYm91dCBhIG51bWJlciBvZiBuYXN0aWVzIGluIHRoaXMgcG9ydC4KLQotMS4gIEViZXJoYXJkIE1hdHRlcywgYXV0aG9yIG9mIEVNWCwgd3JpdGVzIGluIGhpcyBkb2N1bWVudGF0aW9uIHRoYXQgZm9yaygpIAotaXMgdmVyeSBpbmVmZmljaWVudCBpbiB0aGUgT1MvMiBlbnZpcm9ubWVudC4gIEl0IGFsc28gcmVxdWlyZXMgdGhhdCB0aGUgCi1leGVjdXRhYmxlIGJlIGxpbmtlZCBpbiBhLm91dCBmb3JtYXQgcmF0aGVyIHRoYW4gT01GLiAgVXNlIHRoZSBvcy5leGVjIAotYW5kL29yIHRoZSBvcy5zcGF3biBmYW1pbHkgb2YgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLgotCi0yLiAgSW4gdGhlIGFic2VuY2Ugb2YgR05VIFJlYWRsaW5lLCB0ZXJtaW5hdGluZyB0aGUgaW50ZXJwcmV0ZXIgcmVxdWlyZXMgYSAKLWNvbnRyb2wtWiAoXlopIGZvbGxvd2VkIGJ5IGEgY2FycmlhZ2UgcmV0dXJuLiAgSmVmZiBSdXNoIGRvY3VtZW50ZWQgdGhpcyAKLXByb2JsZW0gaW4gaGlzIFB5dGhvbiAxLjUuMiBwb3J0LiAgV2l0aCBSZWFkbGluZSwgYSBjb250cm9sLUQgKF5EKSB3b3JrcyAKLWFzIHBlciB0aGUgc3RhbmRhcmQgVW5peCBlbnZpcm9ubWVudC4KLQotMy4gIEVNWCBvbmx5IGhhcyBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgZmNudGwoKS4gIFRoZSBmY250bCBtb2R1bGUgCi1pbiB0aGlzIHBvcnQgc3VwcG9ydHMgd2hhdCBFTVggc3VwcG9ydHMuICBJZiBmY250bCBpcyBpbXBvcnRhbnQgdG8geW91LCAKLXBsZWFzZSByZXZpZXcgdGhlIEVNWCBDIExpYnJhcnkgUmVmZXJlbmNlIChpbmNsdWRlZCBpbiAuSU5GIGZvcm1hdCBpbiB0aGUgCi1FTVhWSUVXLlpJUCBhcmNoaXZlIGFzIHBhcnQgb2YgdGhlIGNvbXBsZXRlIEVNWCBkZXZlbG9wbWVudCB0b29scyBzdWl0ZSkuCi1CZWNhdXNlIG9mIG90aGVyIHNpZGUtZWZmZWN0cyBJIGhhdmUgbW9kaWZpZWQgdGhlIHRlc3RfZmNudGwucHkgdGVzdCAKLXNjcmlwdCB0byBkZWFjdGl2YXRlIHRoZSBleGVyY2lzaW5nIG9mIHRoZSBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkuCi0KLTQuICBUaGUgcmVhZGxpbmUgbW9kdWxlIGhhcyBiZWVuIGxpbmtlZCBhZ2FpbnN0IG5jdXJzZXMgcmF0aGVyIHRoYW4gdGhlIAotdGVybWNhcCBsaWJyYXJ5IHN1cHBsaWVkIHdpdGggRU1YLgotCi01LiAgSSBoYXZlIGNvbmZpZ3VyZWQgdGhpcyBwb3J0IHRvIHVzZSAiLyIgYXMgdGhlIHByZWZlcnJlZCBwYXRoIHNlcGFyYXRvciAKLWNoYXJhY3RlciwgcmF0aGVyIHRoYW4gIlwiICgnXFwnKSwgaW4gbGluZSB3aXRoIHRoZSBjb252ZW50aW9uIHN1cHBvcnRlZCAKLWJ5IEVNWC4gIEJhY2tzbGFzaGVzIGFyZSBzdGlsbCBzdXBwb3J0ZWQgb2YgY291cnNlLCBhbmQgc3RpbGwgYXBwZWFyIGluIAotdW5leHBlY3RlZCBwbGFjZXMgZHVlIHRvIG91dHNpZGUgc291cmNlcyB0aGF0IGRvbid0IGdldCBub3JtYWxpc2VkLgotCi02LiAgV2hpbGUgdGhlIERpc3RVdGlscyBjb21wb25lbnRzIGFyZSBub3cgZnVuY3Rpb25hbCwgb3RoZXIgCi1wYWNrYWdpbmcvYmluYXJ5IGhhbmRsaW5nIHRvb2xzIGFuZCB1dGlsaXRpZXMgc3VjaCBhcyB0aG9zZSBpbmNsdWRlZCBpbgotdGhlIERlbW8gYW5kIFRvb2xzIGRpcmVjdG9yaWVzIC0gZnJlZXplIGluIHBhcnRpY3VsYXIgLSBhcmUgdW5saWtlbHkgdG8gCi13b3JrLiAgSWYgeW91IGRvIGdldCB0aGVtIGdvaW5nLCBJJ2QgbGlrZSB0byBrbm93IGFib3V0IHlvdXIgc3VjY2Vzcy4KLQotNy4gIEkgaGF2ZW4ndCBzZXQgb3V0IHRvIHN1cHBvcnQgdGhlIFtCRUdJTnxFTkRdTElCUEFUSCBmdW5jdGlvbmFsaXR5IAotc3VwcG9ydGVkIGJ5IG9uZSBvZiB0aGUgZWFybGllciBwb3J0cyAoUnVzaCdzPz8pLiAgSWYgaXQgd29ya3MgbGV0IG1lIGtub3cuCi0KLTguIEFzIGEgcmVzdWx0IG9mIHRoZSBsaW1pdGF0aW9ucyBpbXBvc2VkIGJ5IEVNWCdzIGxpYnJhcnkgcm91dGluZXMsIHRoZSAKLXN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUgcHdkIG9ubHkgc3ludGhlc2lzZXMgYSBzaW1wbGUgcGFzc3dkIGRhdGFiYXNlLCAKLWFuZCB0aGUgZ3JwIG1vZHVsZSBjYW5ub3QgYmUgc3VwcG9ydGVkIGF0IGFsbC4KLQotSSBoYXZlIHdyaXR0ZW4gcHVyZSBQeXRob24gc3Vic3RpdHV0ZXMgZm9yIHB3ZCBhbmQgZ3JwLCB3aGljaCBjYW4gcHJvY2VzcyAKLXJlYWwgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBmb3IgdGhvc2UgYXBwbGljYXRpb25zIChzdWNoIGFzIE1haWxNYW4pIHRoYXQgCi1yZXF1aXJlIG1vcmUgdGhhbiBFTVggZW11bGF0ZXMuICBJIGhhdmUgcGxhY2VkIHB3ZC5weSBhbmQgZ3JwLnB5IGluIAotTGliL3BsYXQtb3MyZW14LCB3aGljaCBpcyB1c3VhbGx5IGJlZm9yZSBMaWIvbGliLWR5bmxvYWQgKHdoaWNoIGNvbnRhaW5zIAotcHdkLnB5ZCkgaW4gdGhlIFBZVEhPTlBBVEguICBJZiB5b3UgaGF2ZSBiZWNvbWUgYXR0YWNoZWQgdG8gd2hhdCBwd2QucHlkIAotc3VwcG9ydHMsIHlvdSBjYW4gcHV0IExpYi9saWItZHlubG9hZCBiZWZvcmUgTGliL3BsYXQtb3MyZW14IGluIFBZVEhPTlBBVEggCi1vciBkZWxldGUvcmVuYW1lIHB3ZC5weSAmIGdycC5weS4KLQotcHdkLnB5ICYgZ3JwLnB5IHN1cHBvcnQgbG9jYXRpbmcgdGhlaXIgZGF0YSBmaWxlcyBieSBsb29raW5nIGluIHRoZSAKLWVudmlyb25tZW50IGZvciB0aGVtIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6Ci1wd2QucHk6ICAkRVRDX1BBU1NXRCAgICAgICAgICAgICAoJUVUQ19QQVNTV0QlKQotICAgICAgICAgJEVUQy9wYXNzd2QgICAgICAgICAgICAgKCVFVEMlL3Bhc3N3ZCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9wYXNzd2QgICglUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLWdycC5weTogICRFVENfR1JPVVAgICAgICAgICAgICAgICglRVRDX0dST1VQJSkKLSAgICAgICAgICRFVEMvZ3JvdXAgICAgICAgICAgICAgICglRVRDJS9ncm91cCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9ncm91cCAgICglUFlUSE9OSE9NRSUvRXRjL2dyb3VwKQotCi1UaGUgRVRDX1BBU1NXRCBhbmQgRVRDX0dST1VQIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgCi1zdXBwb3J0IGZvciBtdWx0aXBsZSBwYXNzd2QvZ3JwIGZpbGVzLCB3aGVyZSBvdGhlciBhcHBsaWNhdGlvbnMgbWF5IG5vdCAKLXN1cHBvcnQgYXMgd2lkZSBhIHZhcmlldHkgb2YgaW5wdXQgdmFyaWF0aW9ucyAoZHJpdmUgcmVtYXBwaW5ncywgCi1zZXBhcmF0b3JzIGV0YykuCi0KLUJvdGggbW9kdWxlcyBzdXBwb3J0IHVzaW5nIGVpdGhlciB0aGUgIjoiIGNoYXJhY3RlciAoVW5peCBzdGFuZGFyZCkgb3IgCi0iOyIgKE9TLzIsIERPUywgV2luZG93cyBzdGFuZGFyZCkgZmllbGQgc2VwYXJhdG9yIGNoYXJhY3RlciwgYW5kIHB3ZC5weSAKLWltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBkcml2ZSBsZXR0ZXIgY29udmVyc2lvbnMgZm9yIHRoZSBob21lX2RpcmVjdG9yeSBhbmQgCi1zaGVsbCBmaWVsZHMgKGZvciB0aGUgIjoiIHNlcGFyYXRvciBvbmx5KToKLSAgICAgICAgICR4ICAtPiAgeDoKLSAgICAgICAgIHg7ICAtPiAgeDoKLQotRXhhbXBsZSB2ZXJzaW9ucyBvZiBwYXNzd2QgYW5kIGdyb3VwIGFyZSBpbiB0aGUgRXRjIHN1YmRpcmVjdG9yeS4gIFRoZSAKLXJlZ3Jlc3Npb24gdGVzdHMgKHRlc3RfcHdkIGFuZCB0ZXN0X2dycCkgd2lsbCBmYWlsIGlmIHZhbGlkIHBhc3N3b3JkIGFuZCAKLWdyb3VwIGZpbGVzIGNhbm5vdCBiZSBmb3VuZCwgYnV0IHNob3VsZCBwYXNzIG90aGVyd2lzZS4KLQotQmUgYXdhcmUgdGhhdCBQeXRob24ncyBwd2QgJiBncm91cCBtb2R1bGVzIGFyZSBmb3IgcmVhZGluZyBwYXNzd29yZCBhbmQgCi1ncm91cCBpbmZvcm1hdGlvbiBvbmx5LgotCi0xMS4gRU1YJ3MgdGVybWlvcyByb3V0aW5lcyBkb24ndCBzdXBwb3J0IGFsbCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBub3cgCi1leHBvc2VkIGJ5IHRoZSB0ZXJtaW9zIG1vZHVsZSAtIHJlZmVyIHRvIHRoZSBFTVggZG9jdW1lbnRhdGlvbiB0byBmaW5kIAotb3V0IHdoYXQgaXMgc3VwcG9ydGVkLgotCi0xMi4gVGhlIGNhc2Ugc2Vuc2l0aXZlIGltcG9ydCBzZW1hbnRpY3MgaW50cm9kdWNlZCBpbiBQeXRob24gMi4xIGZvciBvdGhlciAKLWNhc2UgaW5zZW5zaXRpdmUgYnV0IGNhc2UgcHJlc2VydmluZyBmaWxlL29wZXJhdGluZyBzeXN0ZW1zIChXaW5kb3dzIGV0YyksIAotaGF2ZSBiZWVuIGluY29ycG9yYXRlZCBpbnRvIHRoaXMgcG9ydCwgYW5kIGFyZSBhY3RpdmUgYnkgZGVmYXVsdC4gIFNldHRpbmcgCi10aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50IHZhcmlhYmxlICh0byBhbnkgdmFsdWUpIHJldmVydHMgdG8gdGhlIAotcHJldmlvdXMgKGNhc2UgaW5zZW5zaXRpdmUpIHNlbWFudGljcy4gIFRoaXMgY2FuIGJlIGFuIGlzc3VlIHdpdGggc29tZSAKLWZpbGUgbWFuYWdlbWVudCB1dGlsaXRpZXMgdGhhdCBkbyBub3QgcHJlc2VydmUgdGhlIGNhc2Ugb2YgZmlsZSBhbmQKLWRpcmVjdG9yeSBuYW1lcy4KLQotMTMuIEJlY2F1c2UgSSBhbSBzdGF0aWNhbGx5IGxpbmtpbmcgbmN1cnNlcywgdGhlIF9jdXJzZXNfcGFuZWwgCi1tb2R1bGUgaGFzIHBvdGVudGlhbCBwcm9ibGVtcyBhcmlzaW5nIGZyb20gc2VwYXJhdGUgbGlicmFyeSBkYXRhIGFyZWFzLgotVG8gYXZvaWQgdGhpcywgSSBoYXZlIGNvbmZpZ3VyZWQgdGhlIF9jdXJzZXNfLnB5ZCAoaW1wb3J0ZWQgYXMgCi0iX2N1cnNlc19wYW5lbCIpIHRvIGltcG9ydCB0aGUgbmN1cnNlcyBzeW1ib2xzIGl0IG5lZWRzIGZyb20gX2N1cnNlcy5kbGwgCi0od2hpY2ggaXMgdGhlIGN1cnNlcyBtb2R1bGUsIGJ1dCB3aXRoIGEgLmRsbCBleHRlbnNpb24gcmF0aGVyIHRoYW4gLnB5ZCAKLXNvIHRoYXQgdGhlIGR5bmFtaWMgbG9hZGVyIGNhbiBhY3R1YWxseSBpbXBvcnQgdGhlIHN5bWJvbHMgZnJvbSBpdCBhcyBhIAotRExMKS4KLQotVGhlIHNpdGUgbW9kdWxlIChMaWIvc2l0ZS5weSkgaGFzIGNvZGUgYWRkZWQgdG8gdHdlYWsgQkVHSU5MSUJQQVRIIHNvCi10aGF0IF9jdXJzZXMuZGxsIGlzIGZvdW5kIHdoZW4gX2N1cnNlc19wYW5lbCBpcyBpbXBvcnRlZC4gIElmIHlvdSBoYXZlCi1wcm9ibGVtcyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgX2N1cnNlc19wYW5lbCBzdXBwb3J0IHBsZWFzZSBsZXQgbWUga25vdywKLWFuZCBJJ2xsIGhhdmUgYW5vdGhlciBsb29rIGF0IHRoaXMuCi0KLTE0LiBzeXMucGxhdGZvcm0gcmVwb3J0cyAib3MyZW14IiBpbnN0ZWFkIG9mICJvczIiLiAgb3MubmFtZSBzdGlsbCAKLXJlcG9ydHMgIm9zMiIuICBUaGlzIGNoYW5nZSB3YXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAKLXRoZSBWQUMrKyBidWlsZCAoZm9ybWVybHkgbWFpbnRhaW5lZCBieSBNaWNoYWVsIE11bGxlcikgYW5kIHRoZSBFTVggYnVpbGQgCi0odGhpcyBwb3J0KSwgcHJpbmNpcGFsbHkgZm9yIERpc3RVdGlscy4KLQotMTUuIGl0IGFwcGVhcnMgdGhhdCB0aGUgJVcgc3Vic3RpdHV0aW9uIGluIHRoZSBFTVggc3RyZnRpbWUoKSByb3V0aW5lIGhhcyAKLWFuIG9mZi1ieS1vbmUgYnVnLiAgc3RyZnRpbWUgd2FzIGxpc3RlZCBhcyBwYXNzaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIAotaW4gcHJldmlvdXMgcmVsZWFzZXMsIGJ1dCB0aGlzIGZhY3QgYXBwZWFycyB0byBoYXZlIGJlZW4gYW4gb3ZlcnNpZ2h0IGluIAotdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4gIFRvIGZpeCB0aGlzIHJlYWxseSByZXF1aXJlcyBhIHBvcnRhYmxlIAotc3RyZnRpbWUgcm91dGluZSAtIEknbSBsb29raW5nIGludG8gdXNpbmcgb25lIGZyb20gRnJlZUJTRCwgYnV0IGl0cyBub3QgCi1yZWFkeSB5ZXQuCi0KLTE2LiBJIGhhdmUgc3VjY2Vzc2Z1bGx5IGJ1aWx0IHRoaXMgcG9ydCB3aXRoIEFuZHkgWmFib2xvdG55J3MgcG9ydHMgb2YgCi1wZ2NjIDIuOTUgYW5kIGdjYyAzLjIuMSwgaW4gYWRkaXRpb24gdG8gRU0ncyBnY2MgMi44LjEuCi0KLUkgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIGNvbXBpbGUgUHl0aG9uIHdpdGggYW55IHZlcnNpb24gb2YgZ2NjIHByaW9yIHRvIAotdjIuOC4xLgotCi1UaGlzIHJlbGVhc2Ugc2VlcyB0aGUgZGVmYXVsdCBvcHRpbWlzYXRpb24gY2hhbmdlIHRvIAotIi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIi4gIFRoaXMgd29ya3MgZmluZSB0b28gZm9yIHBnY2MgMi45NSAKLWJ1dCBub3QgZm9yIGdjYyAzLjIuMS4KLQotV2l0aCBnY2MgMy4yLjEsIC1PMyBjYXVzZXMgMiB1bmV4cGVjdGVkIHRlc3QgZmFpbHVyZXM6IHRlc3RfZm9ybWF0IGFuZCAKLXRlc3RfdW5pY29kZS4gIEJvdGggdGhlc2UgdGVzdHMgcGFzcyBpZiAtTzIgaXMgaW5zdGVhZCBvZiAtTzMgd2l0aCB0aGlzIAotY29tcGlsZXIsIGFuZCB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBpcyBuZWdsaWdpYmxlIChpbiBjb250cmFzdCB0byAKLWdjYyAyLjguMSBhbmQgcGdjYyAyLjk1LCB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAKLTIgb3B0aW1pc2F0aW9uIHNldHRpbmdzIGFwcHJvYWNoZXMgMTAlKS4KLQotMTcuICBvcy5zcGF3bnYoKSBhbmQgb3Muc3Bhd252ZSgpIGV4cG9zZSBFTVgncyBsaWJyYXJ5IHJvdXRpbmVzIHJhdGhlciAKLXRoYW4gdXNlIHRoZSBlbXVsYXRpb24gaW4gb3MucHkuCi0KLUluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIHNvbWUgb2YgdGhlIGZlYXR1cmVzIHRoaXMgbWFrZXMgYXZhaWxhYmxlIGluIAotdGhlIE9TLzIgZW52aXJvbm1lbnQsIHlvdSBzaG91bGQgcGVydXNlIHRoZSByZWxldmFudCBFTVggZG9jdW1lbnRhdGlvbiAKLShFTVhMSUIuSU5GIGluIHRoZSBFTVhWSUVXLlpJUCBhcmNoaXZlIGFjY29tcGFueWluZyB0aGUgRU1YIGFyY2hpdmVzIAotb24gSG9iYmVzIG9yIExFTykuICBCZSBhd2FyZSB0aGF0IEkgaGF2ZSBleHBvc2VkIGFsbCB0aGUgIm1vZGUiIG9wdGlvbnMgCi1zdXBwb3J0ZWQgYnkgRU1YLCBidXQgdGhlcmUgYXJlIGNvbWJpbmF0aW9ucyB0aGF0IGVpdGhlciBjYW5ub3QgYmUgCi1wcmFjdGljYWxseSB1c2VkIGJ5L2luIFB5dGhvbiBvciBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gY29tcHJvbWlzZSB5b3VyIAotc3lzdGVtJ3Mgc3RhYmlsaXR5LgotCi0xOC4gIHB5dGhvbnBtLmV4ZSB1c2VkIHRvIGJlIGp1c3QgcHl0aG9uLmV4ZSB3aXRoIHRoZSBXSU5ET1dBUEkgbGlua2VyIAotb3B0aW9uIHNldCBpbiB0aGUgcHl0aG9ucG0uZGVmIGZpbGUuICBJbiBwcmFjdGljZSwgdGhpcyB0dXJucyBvdXQgdG8gZG8gCi1ub3RoaW5nIHVzZWZ1bC4KLQotSSBoYXZlIHdyaXR0ZW4gYSByZXBsYWNlbWVudCB3aGljaCB3cmFwcyB0aGUgUHl0aG9uIERMTCBpbiBhIGdlbnVpbmUgCi1QcmVzZW50YXRpb24gTWFuYWdlciBhcHBsaWNhdGlvbi4gIFRoaXMgdmVyc2lvbiBhY3R1YWxseSBydW5zIHRoZSAKLVB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHNlcGFyYXRlIHRocmVhZCBmcm9tIHRoZSBQTSBzaGVsbCwgaW4gb3JkZXIgCi10aGF0IFB5dGhvblBNIGhhcyBhIGZ1bmN0aW9uaW5nIG1lc3NhZ2UgcXVldWUgYXMgZ29vZCBQTSBhcHBzIHNob3VsZC4KLUluIGl0cyBjdXJyZW50IHN0YXRlLCBQeXRob25QTSdzIHdpbmRvdyBpcyBoaWRkZW4uICBJdCBjYW4gYmUgZGlzcGxheWVkLCAKLWFsdGhvdWdoIGl0IHdpbGwgaGF2ZSBubyBjb250ZW50IGFzIG5vdGhpbmcgaXMgZXZlciB3cml0dGVuIHRvIHRoZSAKLXdpbmRvdy4gIE9ubHkgdGhlICJoaWRlIiBidXR0b24gaXMgYXZhaWxhYmxlLiAgQWx0aG91Z2ggdGhlIGNvZGUgCi1oYXMgc3VwcG9ydCBmb3Igc2h1dHRpbmcgUHl0aG9uUE0gZG93biB3aGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgCi1zdGlsbCBidXN5ICh2aWEgdGhlICJjb250cm9sIiBtZW51KSwgdGhpcyBpcyBub3Qgd2VsbCB0ZXN0ZWQgYW5kIGdpdmVuIAotY29tbWVudHMgSSd2ZSBjb21lIGFjcm9zcyBpbiBFTVggZG9jdW1lbnRhdGlvbiBzdWdnZXN0aW5nIHRoYXQgdGhlIAotdGhyZWFkIGtpbGxpbmcgb3BlcmF0aW9uIGhhcyBwcm9ibGVtcyBJIHdvdWxkIHN1Z2dlc3QgY2F1dGlvbiBpbiAKLXJlbHlpbmcgb24gdGhpcyBjYXBhYmlsaXR5LgotCi1QeXRob25QTSBwcm9jZXNzZXMgY29tbWFuZGxpbmUgcGFyYW1ldGVycyBub3JtYWxseS4gIFRoZSBzdGFuZGFyZCBpbnB1dCwgCi1vdXRwdXQgYW5kIGVycm9yIHN0cmVhbXMgYXJlIG9ubHkgdXNlZnVsIGlmIHJlZGlyZWN0ZWQsIGFzIFB5dGhvblBNJ3MgCi13aW5kb3cgaXMgbm90IGEgY29uc29sZSBpbiBhbnkgZm9ybSBhbmQgc28gY2Fubm90IGFjY2VwdCBvciBkaXNwbGF5IAotYW55dGhpbmcuICBUaGlzIG1lYW5zIHRoYXQgdGhlIC1pIG9wdGlvbiBpcyBpbmVmZmVjdGl2ZS4KLQotQmVjYXVzZSB0aGUgUHl0aG9uIHRocmVhZCBkb2Vzbid0IGNyZWF0ZSBpdHMgb3duIG1lc3NhZ2UgcXVldWUsIGNyZWF0aW5nIAotUE0gV2luZG93cyBhbmQgcGVyZm9ybWluZyBtb3N0IFBNIG9wZXJhdGlvbnMgaXMgbm90IHBvc3NpYmxlIGZyb20gd2l0aGluIAotdGhpcyB0aHJlYWQuICBIb3cgdGhpcyB3aWxsIGFmZmVjdCBzdXBwb3J0aW5nIFBNIGV4dGVuc2lvbnMgKHN1Y2ggYXMgCi1Ua2ludGVyIHVzaW5nIGEgUE0gcG9ydCBvZiBUY2wvVGssIG9yIHd4UHl0aG9uIHVzaW5nIHRoZSBQTSBwb3J0IG9mIAotV3hXaW5kb3dzKSBpcyBzdGlsbCBiZWluZyByZXNlYXJjaGVkLgotCi1Ob3RlIHRoYXQgb3MuZm9yaygpIF9ET0VTX05PVF9XT1JLXyBpbiBQeXRob25QTSAtIFNZUzMxNzVzIGFyZSB0aGUgcmVzdWx0IAotb2YgdHJ5aW5nLiAgb3Muc3Bhd252KCkgX2RvZXNfIHdvcmsuICBQeXRob25QTSBwYXNzZXMgYWxsIHJlZ3Jlc3Npb24gdGVzdHMgCi10aGF0IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIgKHB5dGhvbi5leGUpIHBhc3Nlcywgd2l0aCB0aGUgZXhjZXB0aW9uIAotb2YgdGVzdF9mb3JrMSBhbmQgdGVzdF9zb2NrZXQgd2hpY2ggYm90aCBhdHRlbXB0IHRvIHVzZSBvcy5mb3JrKCkuCi0KLUkgdmVyeSBtdWNoIHdhbnQgZmVlZGJhY2sgb24gdGhlIHBlcmZvcm1hbmNlLCBiZWhhdmlvdXIgYW5kIHV0aWxpdHkgb2YgCi1QeXRob25QTS4gIEkgd291bGQgbGlrZSB0byBhZGQgYSBQTSBjb25zb2xlIGNhcGFiaWxpdHkgdG8gaXQsIGJ1dCB0aGF0IAotd2lsbCBiZSBhIG5vbi10cml2aWFsIGVmZm9ydC4gIEkgbWF5IGJlIGFibGUgdG8gbGV2ZXJhZ2UgdGhlIGNvZGUgaW4gCi1JbGx5YSBWYWVzJyBUY2wvVGsgcG9ydCwgd2hpY2ggd291bGQgbWFrZSBpdCBlYXNpZXIuCi0KLTE5LiAgb3MuY2hkaXIoKSB1c2VzIEVNWCdzIF9jaGRpcjIoKSwgd2hpY2ggc3VwcG9ydHMgY2hhbmdpbmcgYm90aCBkcml2ZSAKLWFuZCBkaXJlY3RvcnkgYXQgb25jZS4gIFNpbWlsYXJseSwgb3MuZ2V0Y3dkKCkgdXNlcyBFTVgncyBfZ2V0Y3dkKCkgCi13aGljaCByZXR1cm5zIGRyaXZlIGFzIHdlbGwgYXMgcGF0aC4KLQotMjAuICBweWNvbmZpZy5oIGlzIGluc3RhbGxlZCBpbiB0aGUgSW5jbHVkZSBzdWJkaXJlY3Rvcnkgd2l0aCBhbGwgCi1vdGhlciBpbmNsdWRlIGZpbGVzLgotCi0yMS4gIHRoZSBkZWZhdWx0IGJ1aWxkIGV4cGxpY2l0bHkgc2V0cyB0aGUgbnVtYmVyIG9mIGZpbGUgaGFuZGxlcyAKLWF2YWlsYWJsZSB0byBhIFB5dGhvbiBwcm9jZXNzIHRvIDI1MC4gIEVNWCBkZWZhdWx0IGlzIDQwLCB3aGljaCBpcyAKLWluc3VmZmljaWVudCBmb3IgdGhlIHRlbXBmaWxlIHJlZ3Jlc3Npb24gdGVzdCAodGVzdF90ZW1wZmlsZSkgd2hpY2ggCi10cmllcyB0byBjcmVhdGUgMTAwIHRlbXBvcmFyeSBmaWxlcy4KLQotVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgRU1YT1BUIGVudmlyb25tZW50IHZhcmlhYmxlOgotICBzZXQgRU1YT1BUPS1oMjUwCi1pcyBlcXVpdmFsZW50IHRvIHRoZSBzZXR0aW5nIGN1cnJlbnRseSB1c2VkLiAgVGhlIGVteGJpbmQgdXRpbGl0eSAoaWYgeW91IAotaGF2ZSBpdCBpbnN0YWxsZWQpIGNhbiBhbHNvIGJlIHVzZWQgdG8gcGVybWFuZW50bHkgY2hhbmdlIHRoZSBzZXR0aW5nIGluIAotcHl0aG9uLmV4ZSAtIHBsZWFzZSByZWZlciB0byB0aGUgRU1YIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLTIyLiAgYSBwdXJlIHB5dGhvbiBzdHJwdGltZSBtb2R1bGUgaXMgbm93IHBhcnQgb2YgdGhlIFB5dGhvbiBzdGFuZGFyZAotbGlicmFyeSwgc3VwZXJjZWRpbmcgYSBwbGF0Zm9ybSBzcGVjaWZpYyBleHRlbnNpb24gbW9kdWxlLiBUaGlzIG1vZHVsZQotbGV2ZXJhZ2VzIHRoZSBzdHJmdGltZSBtb2R1bGUsIGFuZCBhcyBhIHJlc3VsdCB0ZXN0X3N0cnB0aW1lIGZhaWxzCi1kdWUgdG8gdGhlIEVNWCBzdHJmdGltZSBidWcgaW4gaXRlbSAyMCBhYm92ZS4KLQotMjMuICB0ZXN0X3Bvc2l4cGF0aCBhdHRlbXB0cyB0byBleGVyY2lzZSB2YXJpb3VzIFBvc2l4IHBhdGggcmVsYXRlZAotZnVuY3Rpb25hbGl0eS4gIE1vc3Qgb2YgdGhlIHN1Yi10ZXN0cyBwYXNzLCBidXQgdGhlICJpc21vdW50IiBhbmQKLSJzYW1lc3RhdCIgc3VidGVzdHMgZmFpbDoKLS0gRU1YIHByb3ZpZGVzIG5vdCBzYXRpc2ZhY3RvcnkgbW91bnQgcG9pbnQgZW11bGF0aW9uLCBzbyAiaXNtb3VudCIKLSAgY2Fubm90IHN1Y2NlZWQ7Ci0tIEVNWCBkb2N1bWVudHMgdGhhdCBzdWNjZXNzaXZlIHN0YXQoKSBjYWxscyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50Ci0gIHJlc3VsdHMsIHNvICJzYW1lc3RhdCIgY2Fubm90IHN1Y2NlZWQuCi0KLXRlc3RfcG9zaXhwYXRoIHNob3VsZCBza2lwIHRoZXNlIHRlc3RzIG9uIEVNWC4KLQotMjQuICBJIGhhdmUgcmVwb3J0cyBvZiBCaXRUb3JyZW50IG5vdCB3b3JraW5nLiAgSXQgYXBwZWFycyB0aGF0IHRoZQotRU1YIHNlbGVjdCgpIGVtdWxhdGlvbiwgcG9zc2libHkgaW4gY29uY2VydCB3aXRoIGJ1Z3MgaW4gdGhlIFRDUC9JUAotc3RhY2ssIHJ1bnMgaW50byBwcm9ibGVtcyB1bmRlciB0aGUgc3RyZXNzIGltcG9zZWQgYnkgdGhpcyBhcHBsaWNhdGlvbi4KLUkgdGhpbmsgaXQgc3VmZmljZXMgdG8gc2F5IHRoYXQgQml0VG9ycmVudCBpcyBhIGZhaXIgc3RyZXNzIHRlc3Qgb2YgYQotc3lzdGVtJ3MgbmV0d29ya2luZyBjYXBhYmlsaXR5LgotCi0yNS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIEVNWCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGluaygpIGZ1bmN0aW9uLCBJJ3ZlIAotaW1wbGVtZW50ZWQgYSBjcnVkZSBQeXRob24gZW11bGF0aW9uLCBpbiB0aGUgZmlsZSAKLUxpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkuICBUaGlzIGlzIGltcG9ydGVkIGludG8gdGhlIG9zIG1vZHVsZSwgYW5kIAotYmVjb21lcyBhdmFpbGFibGUgYXMgb3MubGluaygpIGluIHRoZSBub3JtYWwgd2F5LgotCi1UaGUgZW11bGF0aW9uIGNvcGllcyB0aGUgc291cmNlIGZpbGUgaW4gYmluYXJ5IG1vZGUsIGFuZCB3aWxsIGZhaWwgaWYgCi1kaXNrIHNwYWNlIGlzIGV4aGF1c3RlZC4gVGhlIGNhbGwgZmFpbHMgaWYgdGhlIHRhcmdldCBhbHJlYWR5IGV4aXN0cy4gCi1UaGVyZSBhcmUgbm8gZ3VhcmFudGVlcyB0byB0aHJlYWQgc2FmZXR5IHdpdGggdGhpcyBlbXVsYXRpb24gLSBiZXdhcmUhCi0KLVRoZSBlbXVsYXRpb24gd2FzIHdyaXR0ZW4gdG8gc3VwcG9ydCBhIGxpbmsoKSBiYXNlZCBmaWxlIGxvY2tpbmcgc3lzdGVtIAotdXNlZCBpbiBHTlUgTWFpbG1hbi4KLQotMjYuICBBRl9VTklYIHNvY2tldHMsIG90aGVyd2lzZSBrbm93biBhcyBVbml4IGRvbWFpbiBzb2NrZXRzLCBhcmUgbm93Ci1zdXBwb3J0ZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc29tZSB0cmFwcyBhcmlzaW5nIGZyb20gdGhlCi1pbXBsZW1lbnRhdGlvbiBpbiBJQk0ncyBUQ1AvSVAgc3RhY2s6LQotLSB0aGUgcGF0aCBuYW1lIG11c3Qgc3RhcnQgd2l0aCAnXFxzb2NrZXRcXCcgKCcvc29ja2V0Lycgd29uJ3Qgd29yayEpLAotICB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBuYW1lIGxlc3MgdGhhbiAxMDggY2hhcmFjdGVyczsKLS0gdW5saWtlIFVuaXgsIHRoZSBzb2NrZXQgZW5kcG9pbnRzIGRvbid0IGV4aXN0IGluIHRoZSBmaWxlc3lzdGVtOwotLSBieSBkZWZhdWx0LCBzb2NrZXRzIGFyZSBpbiBiaW5hcnkgbW9kZS4KLQotMjcuICBBcyBvZiBQeXRob24gMi40LCB0aGUgbXB6LCByb3RvciBhbmQgeHJlYWRsaW5lcyBtb2R1bGVzIGhhdmUgYmVlbiAKLWRyb3BwZWQgZnJvbSB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlLgotCi0yOC4gIFRoZSBzdWJwcm9jZXNzIG1vZHVsZSB3YXMgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgcmVsYXRpdmVseQotbGF0ZSBpbiB0aGUgMi40IGRldmVsb3BtZW50IGN5Y2xlLiAgVW5mb3J0dW5hdGVseSBJIGhhdmVuJ3QgaGFkIHRoZQotcm91bmQgdHVpdHMgdG8gYWRhcHQgdGhlIG1vZHVsZSB0byB0aGUgRU1YIGVudmlyb25tZW50IHlldCwgYW5kCi10ZXN0X3N1YnByb2Nlc3MgaGFzIGEgbnVtYmVyIG9mIGZhaWx1cmVzIGFzIGEgcmVzdWx0LgotCi0yOS4gIFRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIHRocmVhZHMgaGFzIGJlZW4gNjRrLiAgVGhpcyBpcyBwcm92aW5nCi1pbnN1ZmZpY2llbnQgZm9yIHNvbWUgY29kZWJhc2VzLCBzdWNoIGFzIFpvcGUuICBUaGUgdGhyZWFkIHN0YWNrIHNpemUKLXN0aWxsIGRlZmF1bHRzIHRvIDY0aywgYnV0IHRoaXMgY2FuIG5vdyBiZSBpbmNyZWFzZWQgdmlhIHRoZSBzdGFja19zaXplKCkKLWZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRocmVhZGluZyAmIHRocmVhZCBtb2R1bGVzIGFzIHdlbGwgYXMgYnkgZGVmaW5pbmcKLVRIUkVBRF9TVEFDS19TSVpFIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGluIHRoZSBNYWtlZmlsZSAod2hpY2ggY29udGFpbnMKLWEgY29tbWVudGVkIG91dCBkZWZpbml0aW9uIGZvciAxMjhrQiB0aHJlYWQgc3RhY2tzKS4gIEkgaGF2ZSBzZWVuCi1yZWZlcmVuY2VzIHRvIGhlYXZ5IFpvcGUvUGxvbmUgdXNhZ2UgcmVxdWlyaW5nIDFNQiB0aHJlYWQgc3RhY2tzIG9uCi1GcmVlQlNEIGFuZCBMaW51eCwgYnV0IGRvdWJ0IHRoYXQgZm9yIG1vc3QgbGlrZWx5IHVzYWdlIG9uIE9TLzIgdGhhdAotbW9yZSB0aGFuIDI1NmtCIGlzIG5lY2Vzc2FyeS4gIFRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBzdGFja3MgKG1haW4gCi1hbmQgdGhyZWFkKSBjYW4gdmFyeSBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB3aGljaCB2ZXJzaW9uIG9mIGdjYwotaXMgdXNlZCBhbG9uZyB3aXRoIHRoZSBjb21waWxlciBvcHRpbWlzYXRpb25zIHNlbGVjdGVkLiAgTm90ZSB0aGF0IHRoZQotbWFpbiB0aHJlYWQgc3RhY2sgc2l6ZSBpcyBzZXQgZHVyaW5nIGxpbmtpbmcgYW5kIGlzIGN1cnJlbnRseSAyTUIuCi0KLS4uLiBwcm9iYWJseSBvdGhlciBpc3N1ZXMgdGhhdCBJJ3ZlIG5vdCBlbmNvdW50ZXJlZCwgb3IgZG9uJ3QgcmVtZW1iZXIgOi0oCi0KLUlmIHlvdSBlbmNvdW50ZXIgb3RoZXIgZGlmZmljdWx0aWVzIHdpdGggdGhpcyBwb3J0LCB3aGljaCBjYW4gYmUgCi1jaGFyYWN0ZXJpc2VkIGFzIHBlY3VsaWFyIHRvIHRoaXMgcG9ydCByYXRoZXIgdGhhbiB0byB0aGUgUHl0aG9uIHJlbGVhc2UsCi1JIHdvdWxkIGxpa2UgdG8gaGVhciBhYm91dCB0aGVtLiAgSG93ZXZlciBJIGNhbm5vdCBwcm9taXNlIHRvIGJlIGFibGUgdG8gZG8gCi1hbnl0aGluZyB0byByZXNvbHZlIHN1Y2ggcHJvYmxlbXMuICBTZWUgdGhlIENvbnRhY3Qgc2VjdGlvbiBiZWxvdy4uLgotCi0KLVRvIGRvLi4uCi0tLS0tLS0tLQotCi1JbiBubyBwYXJ0aWN1bGFyIG9yZGVyIG9mIGFwcGFyZW50IGltcG9ydGFuY2Ugb3IgbGlrZWxpaG9vZC4uLgotCi0tIHN1cHBvcnQgVGtpbnRlciBhbmQvb3IgYWx0ZXJuYXRpdmUgR1VJICh3eFdpbmRvd3M/PykKLQotCi1DcmVkaXRzCi0tLS0tLS0tCi0KLUluIGFkZGl0aW9uIHRvIHBlb3BsZSBpZGVudGlmaWVkIGFib3ZlLCBJJ2QgbGlrZSB0byB0aGFuazoKLS0gdGhlIEJERkwsIEd1aWRvIHZhbiBSb3NzdW0sIGFuZCBjcmV3IGZvciBQeXRob247Ci0tIERyIERhdmlkIE1lcnR6LCBmb3IgdHJ5aW5nIG91dCBhIHByZS1yZWxlYXNlIG9mIHRoaXMgcG9ydDsKLS0gdGhlIFB5dGhvbi1saXN0L2NvbXAubGFuZy5weXRob24gY29tbXVuaXR5OwotLSBKb2huIFBvbHRvcmFrLCBmb3IgaW5wdXQgYWJvdXQgcHdkL2dycC4KLQotQ29udGFjdAotLS0tLS0tLQotCi1Db25zdHJ1Y3RpdmUgZmVlZGJhY2ssIG5lZ2F0aXZlIG9yIHBvc2l0aXZlLCBhYm91dCB0aGlzIHBvcnQgaXMgd2VsY29tZSAKLWFuZCBzaG91bGQgYmUgYWRkcmVzc2VkIHRvIG1lIGF0IHRoZSBlLW1haWwgYWRkcmVzc2VzIGJlbG93LgotCi1JIGhhdmUgYSBwcml2YXRlIG1haWxpbmcgbGlzdCBmb3IgYW5ub3VuY2VtZW50cyBvZiBmaXhlcyAmIHVwZGF0ZXMgdG8gCi10aGlzIHBvcnQuICBJZiB5b3Ugd2lzaCB0byByZWNlaXZlIHN1Y2ggZS1tYWlsIGFubm91bmNtZW50cywgcGxlYXNlIHNlbmQgCi1tZSBhbiBlLW1haWwgcmVxdWVzdGluZyB0aGF0IHlvdSBiZSBhZGRlZCB0byB0aGlzIGxpc3QuCi0KLUFuZHJldyBNYWNJbnR5cmUKLUUtbWFpbDogYW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXUsIG9yIGFuZHltYWNAcGN1Zy5vcmcuYXUKLVdlYjogICAgaHR0cDovL3d3dy5hbmR5bWFjLm9yZy8KLQotMjggSmFudWFyeSwgMjAwOC4KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9jb25maWcuYyBiL1BDL29zMmVteC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3OTExMC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyogLSotIEMgLSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk1IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBvciBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgb3IKLUNOUkkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotV2hpbGUgQ1dJIGlzIHRoZSBpbml0aWFsIHNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSwgYSBtb2RpZmllZCB2ZXJzaW9uCi1pcyBtYWRlIGF2YWlsYWJsZSBieSB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzCi0oQ05SSSkgYXQgdGhlIEludGVybmV0IGFkZHJlc3MgZnRwOi8vZnRwLnB5dGhvbi5vcmcuCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBBTkQgQ05SSSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRICi1SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSAotQ0VOVFJVTSBPUiBDTlJJIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgotICAgU2VlIGluaXRfYnVpbHRpbigpIGluIGltcG9ydC5jLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLWV4dGVybiB2b2lkIGluaXRvczIoKTsKLWV4dGVybiB2b2lkIGluaXRzaWduYWwoKTsKLSNpZmRlZiBXSVRIX1RIUkVBRAotZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWQoKTsKLSNlbmRpZgotZXh0ZXJuIHZvaWQgaW5pdF9jb2RlY3MoKTsKLWV4dGVybiB2b2lkIGluaXRfY3N2KCk7Ci1leHRlcm4gdm9pZCBpbml0X2xvY2FsZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9yYW5kb20oKTsKLWV4dGVybiB2b2lkIGluaXRfc3JlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N5bXRhYmxlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3dlYWtyZWYoKTsKLWV4dGVybiB2b2lkIGluaXRhcnJheSgpOwotZXh0ZXJuIHZvaWQgaW5pdGJpbmFzY2lpKCk7Ci1leHRlcm4gdm9pZCBpbml0Y29sbGVjdGlvbnMoKTsKLWV4dGVybiB2b2lkIGluaXRjbWF0aCgpOwotZXh0ZXJuIHZvaWQgaW5pdGRhdGV0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0ZGwoKTsKLWV4dGVybiB2b2lkIGluaXRlcnJubygpOwotZXh0ZXJuIHZvaWQgaW5pdGZjbnRsKCk7Ci1leHRlcm4gdm9pZCBpbml0X2Z1bmN0b29scygpOwotZXh0ZXJuIHZvaWQgaW5pdF9oZWFwcSgpOwotZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3AoKTsKLWV4dGVybiB2b2lkIGluaXRpdGVydG9vbHMoKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKCk7Ci1leHRlcm4gdm9pZCBpbml0X21kNSgpOwotZXh0ZXJuIHZvaWQgaW5pdG9wZXJhdG9yKCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoYSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9zaGEyNTYoKTsKLWV4dGVybiB2b2lkIGluaXRfc2hhNTEyKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N0cnVjdCgpOwotZXh0ZXJuIHZvaWQgaW5pdHRlcm1pb3MoKTsKLWV4dGVybiB2b2lkIGluaXR0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0eHhzdWJ0eXBlKCk7Ci1leHRlcm4gdm9pZCBpbml0emlwaW1wb3J0KCk7Ci0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi1leHRlcm4gdm9pZCBpbml0X2N1cnNlcygpOwotZXh0ZXJuIHZvaWQgaW5pdF9jdXJzZXNfcGFuZWwoKTsKLWV4dGVybiB2b2lkIGluaXRfdGVzdGNhcGkoKTsKLWV4dGVybiB2b2lkIGluaXRiejIoKTsKLWV4dGVybiB2b2lkIGluaXRmcGVjdGwoKTsKLWV4dGVybiB2b2lkIGluaXRmcGV0ZXN0KCk7Ci1leHRlcm4gdm9pZCBpbml0cGFyc2VyKCk7Ci1leHRlcm4gdm9pZCBpbml0cHdkKCk7Ci1leHRlcm4gdm9pZCBpbml0dW5pY29kZWRhdGEoKTsKLWV4dGVybiB2b2lkIGluaXR6bGliKCk7Ci0jaWZkZWYgVVNFX1NPQ0tFVAotZXh0ZXJuIHZvaWQgaW5pdF9zb2NrZXQoKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3QoKTsKLSNlbmRpZgotI2VuZGlmCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0gKi8KLQotZXh0ZXJuIHZvaWQgUHlNYXJzaGFsX0luaXQoKTsKLWV4dGVybiB2b2lkIGluaXRpbXAoKTsKLWV4dGVybiB2b2lkIGluaXRnYygpOwotCi1zdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXSA9IHsKLQotICAgIHsib3MyIiwgaW5pdG9zMn0sCi0gICAgeyJzaWduYWwiLCBpbml0c2lnbmFsfSwKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgIHsiX2NvZGVjcyIsIGluaXRfY29kZWNzfSwKLSAgICB7Il9jc3YiLCBpbml0X2Nzdn0sCi0gICAgeyJfbG9jYWxlIiwgaW5pdF9sb2NhbGV9LAotICAgIHsiX3JhbmRvbSIsIGluaXRfcmFuZG9tfSwKLSAgICB7Il9zcmUiLCBpbml0X3NyZX0sCi0gICAgeyJfc3ltdGFibGUiLCBpbml0X3N5bXRhYmxlfSwKLSAgICB7Il93ZWFrcmVmIiwgaW5pdF93ZWFrcmVmfSwKLSAgICB7ImFycmF5IiwgaW5pdGFycmF5fSwKLSAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICB7ImNvbGxlY3Rpb25zIiwgaW5pdGNvbGxlY3Rpb25zfSwKLSAgICB7ImNtYXRoIiwgaW5pdGNtYXRofSwKLSAgICB7ImRhdGV0aW1lIiwgaW5pdGRhdGV0aW1lfSwKLSAgICB7ImRsIiwgaW5pdGRsfSwKLSAgICB7ImVycm5vIiwgaW5pdGVycm5vfSwKLSAgICB7ImZjbnRsIiwgaW5pdGZjbnRsfSwKLSAgICB7Il9mdW5jdG9vbHMiLCBpbml0X2Z1bmN0b29sc30sCi0gICAgeyJfaGVhcHEiLCBpbml0X2hlYXBxfSwKLSAgICB7ImltYWdlb3AiLCBpbml0aW1hZ2VvcH0sCi0gICAgeyJpdGVydG9vbHMiLCBpbml0aXRlcnRvb2xzfSwKLSAgICB7Im1hdGgiLCBpbml0bWF0aH0sCi0gICAgeyJvcGVyYXRvciIsIGluaXRvcGVyYXRvcn0sCi0gICAgeyJfc2hhMjU2IiwgaW5pdF9zaGEyNTZ9LAotICAgIHsiX3NoYTUxMiIsIGluaXRfc2hhNTEyfSwKLSAgICB7Il9zdHJ1Y3QiLCBpbml0X3N0cnVjdH0sCi0gICAgeyJ0ZXJtaW9zIiwgaW5pdHRlcm1pb3N9LAotICAgIHsidGltZSIsIGluaXR0aW1lfSwKLSAgICB7Inh4c3VidHlwZSIsIGluaXR4eHN1YnR5cGV9LAotICAgIHsiemlwaW1wb3J0IiwgaW5pdHppcGltcG9ydH0sCi0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi0gICAgeyJfY3Vyc2VzIiwgaW5pdF9jdXJzZXN9LAotICAgIHsiX2N1cnNlc19wYW5lbCIsIGluaXRfY3Vyc2VzX3BhbmVsfSwKLSAgICB7Il90ZXN0Y2FwaSIsIGluaXRfdGVzdGNhcGl9LAotICAgIHsiYnoyIiwgaW5pdGJ6Mn0sCi0gICAgeyJmcGVjdGwiLCBpbml0ZnBlY3RsfSwKLSAgICB7ImZwZXRlc3QiLCBpbml0ZnBldGVzdH0sCi0gICAgeyJwYXJzZXIiLCBpbml0cGFyc2VyfSwKLSAgICB7InB3ZCIsIGluaXRwd2R9LAotICAgIHsidW5pY29kZWRhdGEiLCBpbml0dW5pY29kZWRhdGF9LAotICAgIHsiemxpYiIsIGluaXR6bGlifSwKLSNpZmRlZiBVU0VfU09DS0VUCi0gICAgeyJfc29ja2V0IiwgaW5pdF9zb2NrZXR9LAotICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSNlbmRpZgotLyogLS0gQURETU9EVUxFIE1BUktFUiAyIC0tICovCi0KLSAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgeyJtYXJzaGFsIiwgUHlNYXJzaGFsX0luaXR9LAotCi0gICAgLyogVGhpcyBsaXZlcyBpdCB3aXRoIGltcG9ydC5jICovCi0gICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAvKiBUaGVzZSBlbnRyaWVzIGFyZSBoZXJlIGZvciBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMgKi8KLSAgICB7ImJ1aWx0aW5zIiwgTlVMTH0sCi0gICAgeyJzeXMiLCBOVUxMfSwKLQotICAgIC8qIFRoaXMgbGl2ZXMgaW4gZ2Ntb2R1bGUuYyAqLwotICAgIHsiZ2MiLCBpbml0Z2N9LAotCi0gICAgLyogU2VudGluZWwgKi8KLSAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZGxmY24uYyBiL1BDL29zMmVteC9kbGZjbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmRhOWNkLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9kbGZjbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSBJTkNMX0RPU1NFU01HUgotI2RlZmluZSBJTkNMX1dJTlBST0dSQU1MSVNUCi0jZGVmaW5lIElOQ0xfV0lORlJBTUVNR1IKLSNpbmNsdWRlIDxvczIuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF90cmFja19yZWMgewotICAgIGNoYXIgKm5hbWU7Ci0gICAgSE1PRFVMRSBoYW5kbGU7Ci0gICAgdm9pZCAqaWQ7Ci0gICAgc3RydWN0IF90cmFja19yZWMgKm5leHQ7Ci19IHRETExjaGFpbiwgKkRMTGNoYWluOwotCi1zdGF0aWMgRExMY2hhaW4gZGxsb2FkID0gTlVMTDsgIC8qIEEgc2ltcGxlIGNoYWluZWQgbGlzdCBvZiBETEwgbmFtZXMgKi8KLXN0YXRpYyBjaGFyIGRsZXJyIFsyNTZdOyAgICAgICAgLyogbGFzdCBlcnJvciB0ZXh0IHN0cmluZyAqLwotc3RhdGljIHZvaWQgKmxhc3RfaWQ7Ci0KLXN0YXRpYyBETExjaGFpbiBmaW5kX2lkKHZvaWQgKmlkKQotewotICAgIERMTGNoYWluIHRtcDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKGlkID09IHRtcC0+aWQpCi0gICAgICAgICAgICByZXR1cm4gdG1wOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGxvYWQgYSBkeW5hbWljLWxpbmsgbGlicmFyeSBhbmQgcmV0dXJuIGhhbmRsZSAqLwotdm9pZCAqZGxvcGVuKGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpCi17Ci0gICAgSE1PRFVMRSBobTsKLSAgICBETExjaGFpbiB0bXA7Ci0gICAgY2hhciBlcnJbMjU2XTsKLSAgICBjaGFyICplcnJ0eHQ7Ci0gICAgaW50IHJjID0gMCwgc2V0X2NoYWluID0gMDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKHN0cm5pY21wKHRtcC0+bmFtZSwgZmlsZW5hbWUsIDk5OSkgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgaWYgKCF0bXApCi0gICAgewotICAgICAgICB0bXAgPSAoRExMY2hhaW4pIG1hbGxvYyhzaXplb2YodERMTGNoYWluKSk7Ci0gICAgICAgIGlmICghdG1wKQotICAgICAgICAgICAgZ290byBub21lbTsKLSAgICAgICAgdG1wLT5uYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKLSAgICAgICAgdG1wLT5uZXh0ID0gZGxsb2FkOwotICAgICAgICBzZXRfY2hhaW4gPSAxOwotICAgIH0KLQotICAgIHN3aXRjaCAocmMgPSBEb3NMb2FkTW9kdWxlKChQU1opJmVyciwgc2l6ZW9mKGVyciksIGZpbGVuYW1lLCAmaG0pKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIHRtcC0+aGFuZGxlID0gaG07Ci0gICAgICAgICAgICBpZiAoc2V0X2NoYWluKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgICAgICAgIGxhc3RfaWQrKzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGxhc3RfaWQgPT0gMCkgfHwgKGZpbmRfaWQobGFzdF9pZCkpKTsKLSAgICAgICAgICAgICAgICB0bXAtPmlkID0gbGFzdF9pZDsKLSAgICAgICAgICAgICAgICBkbGxvYWQgPSB0bXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdG1wLT5pZDsKLSAgICAgICAgY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDoKLSAgICAgICAgY2FzZSBFUlJPUl9QQVRIX05PVF9GT1VORDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgYCVzJyBub3QgZm91bmQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzoKLSAgICAgICAgY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWToKLSAgICAgICAgY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDoKLW5vbWVtOgotICAgICAgICAgICAgZXJydHh0ID0gIm91dCBvZiBzeXN0ZW0gcmVzb3VyY2VzIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiYWNjZXNzIGRlbmllZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9CQURfRk9STUFUOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfU0VHTUVOVF9OVU1CRVI6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9PUkRJTkFMOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTU9EVUxFVFlQRToKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0VYRV9TSUdOQVRVUkU6Ci0gICAgICAgIGNhc2UgRVJST1JfRVhFX01BUktFRF9JTlZBTElEOgotICAgICAgICBjYXNlIEVSUk9SX0lURVJBVEVEX0RBVEFfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9NSU5BTExPQ1NJWkU6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9TRUdEUEw6Ci0gICAgICAgIGNhc2UgRVJST1JfQVVUT0RBVEFTRUdfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfUkVMT0NTUkNfQ0hBSU5fRVhDRUVEU19TRUdMSU1JVDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBmb3JtYXQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gImZpbGVuYW1lIGRvZXNuJ3QgbWF0Y2ggbW9kdWxlIG5hbWUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046Ci0gICAgICAgIGNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046Ci0gICAgICAgICAgICBlcnJ0eHQgPSAic2hhcmluZyB2aW9sYXRpb24iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5JVF9ST1VUSU5FX0ZBSUxFRDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJydHh0ID0gImNhdXNlIGAlcycsIGVycm9yIGNvZGUgPSAlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc25wcmludGYoZGxlcnIsIHNpemVvZihkbGVyciksIGVycnR4dCwgJmVyciwgcmMpOwotICAgIGlmICh0bXApCi0gICAgewotICAgICAgICBpZiAodG1wLT5uYW1lKQotICAgICAgICAgICAgZnJlZSh0bXAtPm5hbWUpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBgc3ltYm9sJyBpbiBETEwgKi8KLXZvaWQgKmRsc3ltKHZvaWQgKmhhbmRsZSwgY2hhciAqc3ltYm9sKQotewotICAgIGludCByYyA9IDA7Ci0gICAgUEZOIGFkZHI7Ci0gICAgY2hhciAqZXJydHh0OwotICAgIGludCBzeW1vcmQgPSAwOwotICAgIERMTGNoYWluIHRtcCA9IGZpbmRfaWQoaGFuZGxlKTsKLQotICAgIGlmICghdG1wKQotICAgICAgICBnb3RvIGludl9oYW5kbGU7Ci0KLSAgICBpZiAoKnN5bWJvbCA9PSAnIycpCi0gICAgICAgIHN5bW9yZCA9IGF0b2koc3ltYm9sICsgMSk7Ci0KLSAgICBzd2l0Y2ggKHJjID0gRG9zUXVlcnlQcm9jQWRkcih0bXAtPmhhbmRsZSwgc3ltb3JkLCBzeW1ib2wsICZhZGRyKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICByZXR1cm4gKHZvaWQgKilhZGRyOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBoYW5kbGUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfUFJPQ19OT1RfRk9VTkQ6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gIm5vIHN5bWJvbCBgJXMnIGluIG1vZHVsZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJzeW1ib2wgYCVzJywgZXJyb3IgY29kZSA9ICVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzbnByaW50ZihkbGVyciwgc2l6ZW9mKGRsZXJyKSwgZXJydHh0LCBzeW1ib2wsIHJjKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogZnJlZSBkeW5hbWljYWxseS1saW5rZWQgbGlicmFyeSAqLwotaW50IGRsY2xvc2Uodm9pZCAqaGFuZGxlKQotewotICAgIGludCByYzsKLSAgICBETExjaGFpbiB0bXAgPSBmaW5kX2lkKGhhbmRsZSk7Ci0KLSAgICBpZiAoIXRtcCkKLSAgICAgICAgZ290byBpbnZfaGFuZGxlOwotCi0gICAgc3dpdGNoIChyYyA9IERvc0ZyZWVNb2R1bGUodG1wLT5oYW5kbGUpKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIGZyZWUodG1wLT5uYW1lKTsKLSAgICAgICAgICAgIGRsbG9hZCA9IHRtcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIHN0cmNweShkbGVyciwgImludmFsaWQgbW9kdWxlIGhhbmRsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfQUNDRVNTOgotICAgICAgICAgICAgc3RyY3B5KGRsZXJyLCAiYWNjZXNzIGRlbmllZCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotLyogcmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgbGFzdCBvY2N1cnJlZCBkbCBlcnJvciAqLwotY2hhciAqZGxlcnJvcigpCi17Ci0gICAgcmV0dXJuIGRsZXJyOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2RsZmNuLmggYi9QQy9vczJlbXgvZGxmY24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYWU2OS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZGxmY24uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2lmbmRlZiBfRExGQ05fSAotI2RlZmluZSBfRExGQ05fSAotCi0vKiBsb2FkIGEgZHluYW1pYy1saW5rIGxpYnJhcnkgYW5kIHJldHVybiBoYW5kbGUgKi8KLXZvaWQgKmRsb3BlbihjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzKTsKLQotLyogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYHN5bWJvbCcgaW4gRExMICovCi12b2lkICpkbHN5bSh2b2lkICpoYW5kbGUsIGNoYXIgKnN5bWJvbCk7Ci0KLS8qIGZyZWUgZHluYW1pY2FsbHktbGlua2VkIGxpYnJhcnkgKi8KLWludCBkbGNsb3NlKHZvaWQgKmhhbmRsZSk7Ci0KLS8qIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGxhc3Qgb2NjdXJyZWQgZGwgZXJyb3IgKi8KLWNoYXIgKmRsZXJyb3Iodm9pZCk7Ci0KLSNlbmRpZiAvKiAhX0RMRkNOX0ggKi8KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9kbGxlbnRyeS5jIGIvUEMvb3MyZW14L2RsbGVudHJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2NhMWMuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2RsbGVudHJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBQeXRob24gMi4zIGNvcmUgRExMLgotICovCi0KLSNkZWZpbmUgTlVMTCAwCi0KLSNkZWZpbmUgUkVGKHMpICBleHRlcm4gdm9pZCBzKCk7IHZvaWQgKl9fX19yZWZfIyNzID0gJnM7Ci0KLS8qIE1ha2UgcmVmZXJlbmNlcyB0byBpbXBvcnRlZCBzeW1ib2xzIHRvIHB1bGwgdGhlbSBmcm9tIHN0YXRpYyBsaWJyYXJ5ICovCi1SRUYoUHlfTWFpbik7Ci0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotZXh0ZXJuIGludCBfQ1JUX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfQ1JUX3Rlcm0odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2N0b3JkdG9ySW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fY3RvcmR0b3JUZXJtKHZvaWQpOwotCi11bnNpZ25lZCBsb25nIF9ETExfSW5pdFRlcm0odW5zaWduZWQgbG9uZyBtb2RfaGFuZGxlLCB1bnNpZ25lZCBsb25nIGZsYWcpCi17Ci0gICAgc3dpdGNoIChmbGFnKQotICAgIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgaWYgKF9DUlRfaW5pdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX19jdG9yZHRvckluaXQoKTsKLQotICAgICAgICAgICAgLyogSWdub3JlIGZhdGFsIHNpZ25hbHMgKi8KLSAgICAgICAgICAgIHNpZ25hbChTSUdTRUdWLCBTSUdfSUdOKTsKLSAgICAgICAgICAgIHNpZ25hbChTSUdGUEUsIFNJR19JR04pOwotCi0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBfX2N0b3JkdG9yVGVybSgpOwotICAgICAgICAgICAgX0NSVF90ZXJtKCk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2dldHBhdGhwLmMgYi9QQy9vczJlbXgvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3Mzc3NC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZ2V0cGF0aHAuYworKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0KLS8qIFJldHVybiB0aGUgaW5pdGlhbCBtb2R1bGUgc2VhcmNoIHBhdGguICovCi0vKiBUaGlzIHZlcnNpb24gdXNlZCBieSBPUy8yK0VNWCAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBQQVRIIFJVTEVTIEZPUiBPUy8yK0VNWDoKLSAgIFRoaXMgZGVzY3JpYmVzIGhvdyBzeXMucGF0aCBpcyBmb3JtZWQgb24gT1MvMitFTVguICBJdCBkZXNjcmliZXMgdGhlCi0gICBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIGltcGxlbWVudGF0aW9uIChpZSwgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlCi0gICBhcmUgYWN0dWFsbHkgZmV0Y2hlZCBpcyBkaWZmZXJlbnQpCi0KLSAgICogUHl0aG9uIGFsd2F5cyBhZGRzIGFuIGVtcHR5IGVudHJ5IGF0IHRoZSBzdGFydCwgd2hpY2ggY29ycmVzcG9uZHMKLSAgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCi0gICAqIElmIHRoZSBQWVRIT05QQVRIIGVudi4gdmFyLiBleGlzdHMsIGl0cyBlbnRyaWVzIGFyZSBhZGRlZCBuZXh0LgotCi0gICAqIFdlIGF0dGVtcHQgdG8gbG9jYXRlIHRoZSAiUHl0aG9uIEhvbWUiIC0gaWYgdGhlIFBZVEhPTkhPTUUgZW52IHZhcgotICAgICBpcyBzZXQsIHdlIGJlbGlldmUgaXQuICBPdGhlcndpc2UsIHdlIHVzZSB0aGUgcGF0aCBvZiBvdXIgaG9zdCAuRVhFJ3MKLSAgICAgdG8gdHJ5IGFuZCBsb2NhdGUgb3VyICJsYW5kbWFyayIgKGxpYlxcb3MucHkpIGFuZCBkZWR1Y2Ugb3VyIGhvbWUuCi0gICAgIC0gSWYgd2UgRE8gaGF2ZSBhIFB5dGhvbiBIb21lOiBUaGUgcmVsZXZhbnQgc3ViLWRpcmVjdG9yaWVzIChMaWIsCi0gICAgICAgcGxhdC13aW4sIGV0YykgYXJlIGJhc2VkIG9uIHRoZSBQeXRob24gSG9tZQotICAgICAtIElmIHdlIERPIE5PVCBoYXZlIGEgUHl0aG9uIEhvbWUsIHRoZSBjb3JlIFB5dGhvbiBQYXRoIGlzCi0gICAgICAgbG9hZGVkIGZyb20gdGhlIHJlZ2lzdHJ5LiAgVGhpcyBpcyB0aGUgbWFpbiBQeXRob25QYXRoIGtleSwKLSAgICAgICBhbmQgYm90aCBIS0xNIGFuZCBIS0NVIGFyZSBjb21iaW5lZCB0byBmb3JtIHRoZSBwYXRoKQotCi0gICAqIElmZiAtIHdlIGNhbiBub3QgbG9jYXRlIHRoZSBQeXRob24gSG9tZSwgYW5kIGhhdmUgbm90IGhhZCBhIFBZVEhPTlBBVEgKLSAgICAgc3BlY2lmaWVkIChpZSwgd2UgaGF2ZSBfbm90aGluZ18gd2UgY2FuIGFzc3VtZSBpcyBhIGdvb2QgcGF0aCksIGEKLSAgICAgZGVmYXVsdCBwYXRoIHdpdGggcmVsYXRpdmUgZW50cmllcyBpcyB1c2VkIChlZy4gLlxMaWI7LlxwbGF0LXdpbiwgZXRjKQotCi0KLSAgVGhlIGVuZCByZXN1bHQgb2YgYWxsIHRoaXMgaXM6Ci0gICogV2hlbiBydW5uaW5nIHB5dGhvbi5leGUsIG9yIGFueSBvdGhlciAuZXhlIGluIHRoZSBtYWluIFB5dGhvbiBkaXJlY3RvcnkKLSAgICAoZWl0aGVyIGFuIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBkaXJlY3RseSBmcm9tIHRoZSBQQ2J1aWxkIGRpcmVjdG9yeSksCi0gICAgdGhlIGNvcmUgcGF0aCBpcyBkZWR1Y2VkLgotCi0gICogV2hlbiBQeXRob24gaXMgaG9zdGVkIGluIGFub3RoZXIgZXhlIChkaWZmZXJlbnQgZGlyZWN0b3J5LCBlbWJlZGRlZCB2aWEKLSAgICBDT00sIGV0YyksIHRoZSBQeXRob24gSG9tZSB3aWxsIG5vdCBiZSBkZWR1Y2VkLCBzbyB0aGUgY29yZSBwYXRoIGZyb20KLSAgICB0aGUgcmVnaXN0cnkgaXMgdXNlZC4gIE90aGVyICJhcHBsaWNhdGlvbiBwYXRocyAiaW4gdGhlIHJlZ2lzdHJ5IGFyZQotICAgIGFsd2F5cyByZWFkLgotCi0gICogSWYgUHl0aG9uIGNhbid0IGZpbmQgaXRzIGhvbWUgYW5kIHRoZXJlIGlzIG5vIHJlZ2lzdHJ5IChlZywgZnJvemVuCi0gICAgZXhlLCBzb21lIHZlcnkgc3RyYW5nZSBpbnN0YWxsYXRpb24gc2V0dXApIHlvdSBnZXQgYSBwYXRoIHdpdGgKLSAgICBzb21lIGRlZmF1bHQsIGJ1dCByZWxhdGl2ZSwgcGF0aHMuCi0KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAib3NkZWZzLmgiCi0KLSNpZm5kZWYgUFlPU19PUzIKLSNlcnJvciBUaGlzIGZpbGUgb25seSBjb21waWxhYmxlIG9uIE9TLzIKLSNlbmRpZgotCi0jZGVmaW5lIElOQ0xfRE9TCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLQotLyogU2VhcmNoIGluIHNvbWUgY29tbW9uIGxvY2F0aW9ucyBmb3IgdGhlIGFzc29jaWF0ZWQgUHl0aG9uIGxpYnJhcmllcy4KLSAqCi0gKiBQeV9HZXRQYXRoKCkgdHJpZXMgdG8gcmV0dXJuIGEgc2Vuc2libGUgUHl0aG9uIG1vZHVsZSBzZWFyY2ggcGF0aC4KLSAqCi0gKiBUaGUgYXBwcm9hY2ggaXMgYW4gYWRhcHRhdGlvbiBmb3IgV2luZG93cyBvZiB0aGUgc3RyYXRlZ3kgdXNlZCBpbgotICogLi4vTW9kdWxlcy9nZXRwYXRoLmM7IGl0IHVzZXMgdGhlIFdpbmRvd3MgUmVnaXN0cnkgYXMgb25lIG9mIGl0cwotICogaW5mb3JtYXRpb24gc291cmNlcy4KLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTEFORE1BUksgImxpYi9vcy5weSIKLSNlbHNlCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0jZW5kaWYKLQotc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0KLQotc3RhdGljIGludAotaXNfc2VwKGNoYXIgY2gpIC8qIGRldGVybWluZSBpZiAiY2giIGlzIGEgc2VwYXJhdG9yIGNoYXJhY3RlciAqLwotewotI2lmZGVmIEFMVFNFUAotICAgIHJldHVybiBjaCA9PSBTRVAgfHwgY2ggPT0gQUxUU0VQOwotI2Vsc2UKLSAgICByZXR1cm4gY2ggPT0gU0VQOwotI2VuZGlmCi19Ci0KLS8qIGFzc3VtZXMgJ2RpcicgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4KLSAqIE5ldmVyIHdyaXRlcyBiZXlvbmQgZXhpc3RpbmcgdGVybWluYXRvci4KLSAqLwotc3RhdGljIHZvaWQKLXJlZHVjZShjaGFyICpkaXIpCi17Ci0gICAgc2l6ZV90IGkgPSBzdHJsZW4oZGlyKTsKLSAgICB3aGlsZSAoaSA+IDAgJiYgIWlzX3NlcChkaXJbaV0pKQotICAgICAgICAtLWk7Ci0gICAgZGlyW2ldID0gJ1wwJzsKLX0KLQotc3RhdGljIGludAotZXhpc3RzKGNoYXIgKmZpbGVuYW1lKQotewotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICByZXR1cm4gc3RhdChmaWxlbmFtZSwgJmJ1ZikgPT0gMDsKLX0KLQotLyogSXMgbW9kdWxlICAoY2hlY2sgZm9yIC5weWMvLnB5byB0b28pCi0gKiBBc3N1bWVzICdmaWxlbmFtZScgTUFYUEFUSExFTisxIGJ5dGVzIGxvbmcgLQotICogbWF5IGV4dGVuZCAnZmlsZW5hbWUnIGJ5IG9uZSBjaGFyYWN0ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWlzbW9kdWxlKGNoYXIgKmZpbGVuYW1lKQotewotICAgIGlmIChleGlzdHMoZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIENoZWNrIGZvciB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiBwcmVmaXguICovCi0gICAgaWYgKHN0cmxlbihmaWxlbmFtZSkgPCBNQVhQQVRITEVOKSB7Ci0gICAgICAgIHN0cmNhdChmaWxlbmFtZSwgUHlfT3B0aW1pemVGbGFnID8gIm8iIDogImMiKTsKLSAgICAgICAgaWYgKGV4aXN0cyhmaWxlbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEFkZCBhIHBhdGggY29tcG9uZW50LCBieSBhcHBlbmRpbmcgc3R1ZmYgdG8gYnVmZmVyLgotICAgYnVmZmVyIG11c3QgaGF2ZSBhdCBsZWFzdCBNQVhQQVRITEVOICsgMSBieXRlcyBhbGxvY2F0ZWQsIGFuZCBjb250YWluIGEKLSAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgKG5vdCBjb3VudGluZwotICAgdGhlIHRyYWlsaW5nIE5VTCkuICBJdCdzIGEgZmF0YWwgZXJyb3IgaWYgaXQgY29udGFpbnMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4KLSAgIHRoYXQgKGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsISkuICBJZiB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgaXQncwotICAgZ3VhcmFudGVlZCB0aGF0IGJ1ZmZlciB3aWxsIHN0aWxsIGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZQotICAgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgYXQgZXhpdC4gIElmIHN0dWZmIGlzIHRvbyBsb25nLCBvbmx5IGFzIG11Y2ggb2YKLSAgIHN0dWZmIGFzIGZpdHMgd2lsbCBiZSBhcHBlbmRlZC4KLSovCi0KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgc2l6ZV90IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0vKiBnb3RsYW5kbWFyayBvbmx5IGNhbGxlZCBieSBzZWFyY2hfZm9yX3ByZWZpeCwgd2hpY2ggZW5zdXJlcwotICogJ3ByZWZpeCcgaXMgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4gIGpvaW4oKSBlbnN1cmVzCi0gKiAnbGFuZG1hcmsnIGNhbiBub3Qgb3ZlcmZsb3cgcHJlZml4IGlmIHRvbyBsb25nLgotICovCi1zdGF0aWMgaW50Ci1nb3RsYW5kbWFyayhjaGFyICpsYW5kbWFyaykKLXsKLSAgICBpbnQgbiwgb2s7Ci0KLSAgICBuID0gc3RybGVuKHByZWZpeCk7Ci0gICAgam9pbihwcmVmaXgsIGxhbmRtYXJrKTsKLSAgICBvayA9IGlzbW9kdWxlKHByZWZpeCk7Ci0gICAgcHJlZml4W25dID0gJ1wwJzsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLS8qIGFzc3VtZXMgYXJndjBfcGF0aCBpcyBNQVhQQVRITEVOKzEgYnl0ZXMgbG9uZywgYWxyZWFkeSBcMCB0ZXJtJ2QuCi0gKiBhc3N1bXB0aW9uIHByb3ZpZGVkIGJ5IG9ubHkgY2FsbGVyLCBjYWxjdWxhdGVfcGF0aCgpCi0gKi8KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIC8qIFNlYXJjaCBmcm9tIGFyZ3YwX3BhdGgsIHVudGlsIGxhbmRtYXJrIGlzIGZvdW5kICovCi0gICAgc3RyY3B5KHByZWZpeCwgYXJndjBfcGF0aCk7Ci0gICAgZG8gewotICAgICAgICBpZiAoZ290bGFuZG1hcmsobGFuZG1hcmspKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIHJlZHVjZShwcmVmaXgpOwotICAgIH0gd2hpbGUgKHByZWZpeFswXSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSAgICBQUElCIHBpYjsKLSAgICBpZiAoKERvc0dldEluZm9CbG9ja3MoTlVMTCwgJnBpYikgPT0gMCkgJiYKLSAgICAgICAgKERvc1F1ZXJ5TW9kdWxlTmFtZShwaWItPnBpYl9obXRlLCBzaXplb2YocHJvZ3BhdGgpLCBwcm9ncGF0aCkgPT0gMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOwotICAgIGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGNoYXIgKmRlbGltID0gc3RyY2hyKHBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlbGltKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IGRlbGltIC0gcGF0aDsKLSAgICAgICAgICAgICAgICAvKiBlbnN1cmUgd2UgY2FuJ3Qgb3ZlcndyaXRlIGJ1ZmZlciAqLwotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgICAgICAgICAgICAgIGxlbiA9IG1pbihNQVhQQVRITEVOLGxlbik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGxlbiA9IE1BWFBBVEhMRU4gPCBsZW4gPyBNQVhQQVRITEVOIDogbGVuOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKHByb2dwYXRoICsgbGVuKSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgTUFYUEFUSExFTik7Ci0KLSAgICAgICAgICAgIC8qIGpvaW4oKSBpcyBzYWZlIGZvciBNQVhQQVRITEVOKzEgc2l6ZSBidWZmZXIgKi8KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgc2l6ZV90IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IGdldGVudigiUFlUSE9OUEFUSCIpOwotICAgIGNoYXIgemlwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBzaXplX3QgbGVuOwotCi0gICAgZ2V0X3Byb2dwYXRoKCk7Ci0gICAgLyogcHJvZ3BhdGggZ3VhcmFudGVlZCBcMCB0ZXJtaW5hdGVkIGluIE1BWFBBVEgrMSBieXRlcy4gKi8KLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHN0cm5jcHkocHJlZml4LCBweXRob25ob21lLCBNQVhQQVRITEVOKTsKLQotICAgIGlmIChlbnZwYXRoICYmICplbnZwYXRoID09ICdcMCcpCi0gICAgICAgIGVudnBhdGggPSBOVUxMOwotCi0gICAgLyogQ2FsY3VsYXRlIHppcCBhcmNoaXZlIHBhdGggKi8KLSAgICBzdHJuY3B5KHppcF9wYXRoLCBwcm9ncGF0aCwgTUFYUEFUSExFTik7Ci0gICAgemlwX3BhdGhbTUFYUEFUSExFTl0gPSAnXDAnOwotICAgIGxlbiA9IHN0cmxlbih6aXBfcGF0aCk7Ci0gICAgaWYgKGxlbiA+IDQpIHsKLSAgICAgICAgemlwX3BhdGhbbGVuLTNdID0gJ3onOyAgLyogY2hhbmdlIGVuZGluZyB0byAiemlwIiAqLwotICAgICAgICB6aXBfcGF0aFtsZW4tMl0gPSAnaSc7Ci0gICAgICAgIHppcF9wYXRoW2xlbi0xXSA9ICdwJzsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHppcF9wYXRoWzBdID0gMDsKLSAgICB9Ci0KLSAgICAvKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHBhdGggZnJvbSB0aGUgZm9sbG93aW5nIHBhcnRzLgotICAgICAqICgxKSB0aGUgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0OwotICAgICAqICgyKSB0aGUgemlwIGFyY2hpdmUgZmlsZSBwYXRoOwotICAgICAqICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICogICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAqICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAqIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAgKi8KLQotICAgIC8qIENhbGN1bGF0ZSBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KLSAgICBpZiAocHl0aG9uaG9tZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKnA7Ci0gICAgICAgIGJ1ZnN6ID0gMTsKLSAgICAgICAgZm9yIChwID0gUFlUSE9OUEFUSDsgKnA7IHArKykgewotICAgICAgICAgICAgaWYgKCpwID09IERFTElNKQotICAgICAgICAgICAgICAgIGJ1ZnN6Kys7IC8qIG51bWJlciBvZiBERUxJTSBwbHVzIG9uZSAqLwotICAgICAgICB9Ci0gICAgICAgIGJ1ZnN6ICo9IHN0cmxlbihweXRob25ob21lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBidWZzeiA9IDA7Ci0gICAgYnVmc3ogKz0gc3RybGVuKFBZVEhPTlBBVEgpICsgMTsKLSAgICBidWZzeiArPSBzdHJsZW4oYXJndjBfcGF0aCkgKyAxOwotICAgIGJ1ZnN6ICs9IHN0cmxlbih6aXBfcGF0aCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0KLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3opOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBtYWxsb2MgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGVudmlyb25tZW50ICRQWVRIT05QQVRILlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBlbnZwYXRoOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBwYXRoLlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBlbnZwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAoemlwX3BhdGhbMF0pIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgemlwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgc2l6ZV90IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIG1vZHVsZV9zZWFyY2hfcGF0aDsKLX0KLQotY2hhciAqCi1QeV9HZXRQcmVmaXgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1jaGFyICoKLVB5X0dldEV4ZWNQcmVmaXgodm9pZCkKLXsKLSAgICByZXR1cm4gUHlfR2V0UHJlZml4KCk7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIHByb2dwYXRoOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5Y29uZmlnLmggYi9QQy9vczJlbXgvcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MTA1YS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0jaWZuZGVmIFB5X0NPTkZJR19ICi0jZGVmaW5lIFB5X0NPTkZJR19ICi0KLSNlcnJvciAiUEVQIDExOiBPUy8yIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLQotLyogY29uZmlnLmguCi0gKiBBdCBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5L2Zyb20gY29uZmlndXJlLgotICogbm93IG1haW50YWluZWQgbWFudWFsbHkuCi0gKi8KLQotLyogYnVpbGQgZW52aXJvbm1lbnQgKi8KLSNkZWZpbmUgUExBVEZPUk0JIm9zMmVteCIKLSNkZWZpbmUgQ09NUElMRVIJIltFTVggR0NDICIgX19WRVJTSU9OX18gIl0iCi0jZGVmaW5lIFBZT1NfT1MyCTEKLSNkZWZpbmUgUFlDQ19HQ0MJMQotCi0vKiBkZWZhdWx0IGxvY2F0aW9uKHMpICovCi0jaWZuZGVmIFBSRUZJWAotI2RlZmluZSBQUkVGSVgJCSIiCi0jZW5kaWYKLSNpZm5kZWYgUFlUSE9OUEFUSAotI2RlZmluZSBQWVRIT05QQVRICSIuL0xpYjsuL0xpYi9wbGF0LSIgUExBVEZPUk0gXAotCQkJIjsuL0xpYi9saWItZHlubG9hZDsuL0xpYi9zaXRlLXBhY2thZ2VzIgotI2VuZGlmCi0KLS8qIERlYnVnZ2luZyAqLwotI2lmbmRlZiBQeV9ERUJVRwotLyojZGVmaW5lIFB5X0RFQlVHIDEqLwotI2VuZGlmCi0KLS8qIGlmIGJ1aWxkaW5nIGFuIGV4dGVuc2lvbiBvciB3cmFwcGVyIGV4ZWN1dGFibGUsCi0gKiBtYXJrIFB5dGhvbiBBUEkgc3ltYm9scyAiZXh0ZXJuIiBzbyB0aGF0IHN5bWJvbHMKLSAqIGltcG9ydGVkIGZyb20gdGhlIFB5dGhvbiBjb3JlIERMTCBhcmVuJ3QgZHVwbGljYXRlZC4KLSAqLwotI2lmZGVmIFB5X0JVSUxEX0NPUkUKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlSVFlQRQotI2Vsc2UKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNlbmRpZgotI2RlZmluZSBQeUFQSV9EQVRBKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNkZWZpbmUgUHlNT0RJTklUX0ZVTkMJdm9pZAotCi0vKiBVc2UgT1MvMiBmbGF2b3VyIG9mIHRocmVhZHMgKi8KLSNkZWZpbmUgV0lUSF9USFJFQUQJMQotI2RlZmluZSBPUzJfVEhSRUFEUwkxCi0KLS8qIFdlIHdhbnQgc29ja2V0cyAqLwotI2RlZmluZSBUQ1BJUFY0CQkxCi0jZGVmaW5lIFVTRV9TT0NLRVQJMQotI2RlZmluZSBzb2NrbGVuX3QJaW50Ci0jZGVmaW5lIEZEX1NFVFNJWkUJMTAyNAotCi0vKiBlbmFibGUgdGhlIFB5dGhvbiBvYmplY3QgYWxsb2NhdG9yICovCi0jZGVmaW5lCVdJVEhfUFlNQUxMT0MJMQotCi0vKiBlbmFibGUgdGhlIEdDIG1vZHVsZSAqLwotI2RlZmluZSBXSVRIX0NZQ0xFX0dDCTEKLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotLyogVW5pY29kZSByZWxhdGVkICovCi0jZGVmaW5lIFBZX1VOSUNPREVfVFlQRQl3Y2hhcl90Ci0jZGVmaW5lIFB5X1VOSUNPREVfU0laRSBTSVpFT0ZfU0hPUlQKLQotLyogRU1YIGRlZmluZXMgc3NpemVfdCAqLwotI2RlZmluZSBIQVZFX1NTSVpFX1QJMQotCi0vKiBzeXN0ZW0gY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIEhBVkVfVFRZTkFNRQkxCi0jZGVmaW5lIEhBVkVfV0FJVAkxCi0jZGVmaW5lIEhBVkVfR0VURUdJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VURVVJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUR0lEICAgICAxCi0jZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUVUlEICAgICAxCi0jZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCi0jZGVmaW5lIEhBVkVfUElQRSAgICAgICAxCi0jZGVmaW5lIEhBVkVfUE9QRU4gICAgICAxCi0jZGVmaW5lIEhBVkVfU1lTVEVNCTEKLSNkZWZpbmUgSEFWRV9UVFlOQU1FCTEKLSNkZWZpbmUgSEFWRV9EWU5BTUlDX0xPQURJTkcJMQotCi0vKiBpZiBwb3J0IG9mIEdEQk0gaW5zdGFsbGVkLCBpdCBpbmNsdWRlcyBOREJNIGVtdWxhdGlvbiAqLwotI2RlZmluZSBIQVZFX05EQk1fSCAxCi0KLS8qIG5lZWQgdGhpcyBmb3Igc3Bhd252IGNvZGUgaW4gcG9zaXhtb2R1bGUgKGNsb25lZCBmcm9tIFdJTjMyIGRlZiduKSAqLwotdHlwZWRlZiBsb25nIGludHB0cl90OwotCi0vKiB3ZSBkb24ndCBoYXZlIHRtX3pvbmUgYnV0IGRvIGhhdmUgdGhlIGV4dGVybmFsIGFycmF5IHR6bmFtZSAqLwotI2RlZmluZSBIQVZFX1RaTkFNRSAxCi0KLS8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKLQotLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBsb25nLiAqLwotI2RlZmluZSBIQVZFX0xPTkdfTE9ORyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZXMuICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHZhcmlhYmxlIGxlbmd0aCBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKiAoZS5nLiB2b2lkIGZwcmludGYoRklMRSAqLCBjaGFyICosIC4uLik7KSAqYW5kKiA8c3RkYXJnLmg+LgotICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX1BST1RPVFlQRVMgMQotCi0vKiBEZWZpbmUgaWYgbWFsbG9jKDApIHJldHVybnMgYSBOVUxMIHBvaW50ZXIuICovCi0jZGVmaW5lIE1BTExPQ19aRVJPX1JFVFVSTlNfTlVMTCAxCi0KLS8qIERlZmluZSB0byBmb3JjZSB1c2Ugb2YgdGhyZWFkLXNhZmUgZXJybm8sIGhfZXJybm8sIGFuZCBvdGhlciBmdW5jdGlvbnMuICovCi0jZGVmaW5lIF9SRUVOVFJBTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4KLSAqICh3aGljaCB5b3UgY2FuJ3Qgb24gU0NPIE9EVCAzLjApLgotICovCi0jZGVmaW5lIFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSAxCi0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gb2ZmX3QuICovCi0jZGVmaW5lIFNJWkVPRl9PRkZfVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gdGltZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfVElNRV9UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHNob3J0LiAqLwotI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgaW50LiAqLwotI2RlZmluZSBTSVpFT0ZfSU5UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcuICovCi0jZGVmaW5lIFNJWkVPRl9MT05HIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcgbG9uZy4gKi8KLSNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSB2b2lkICouICovCi0jZGVmaW5lIFNJWkVPRl9WT0lEX1AgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc2l6ZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9BTEFSTSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2sgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGR1cDIgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRFVQMiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZXhlY3YgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVhFQ1YgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNwYXdudiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TUEFXTlYgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZsb2NrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZMT0NLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmb3JrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZPUksgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZzeW5jIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZTWU5DIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVElNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZnRydW5jYXRlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0Y3dkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGVlcm5hbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEVFUk5BTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cHdlbnQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUFdFTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHdkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFdEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBoeXBvdCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUga2lsbCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9LSUxMIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtZW1tb3ZlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG1rdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NS1RJTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBhdXNlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BBVVNFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwdXRlbnYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUFVURU5WIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRnaWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUR0lEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRsb2NhbGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRwZ2lkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFBHSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHVpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRVSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHZidWYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2lnYWN0aW9uIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR0FDVElPTiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3IgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSRVJST1IgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y2dldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENHRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y3NldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENTRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0bXBmaWxlIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgSEFWRV9UTVBGSUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0aW1lcyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdHJ1bmNhdGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVFJVTkNBVEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuYW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1VOQU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB3YWl0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1dBSVRQSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxjb25pby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0NPTklPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRElSRUNUX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0RJUkVOVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfRVJSTk9fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0lPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmN1cnNlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9OQ1VSU0VTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdW4uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VOX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdXRzbmFtZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVVRTTkFNRV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHV0aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VUSU1FX0ggMQotCi0vKiBFTVggaGFzIGFuIHNucHJpbnRmKCkuICovCi0jZGVmaW5lIEhBVkVfU05QUklOVEYgMQotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weXRob24zMy5kZWYgYi9QQy9vczJlbXgvcHl0aG9uMzMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTY3MjZiLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9weXRob24zMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE0ICswLDAgQEAKLUxJQlJBUlkgcHl0aG9uMzMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSAKLURFU0NSSVBUSU9OICJQeXRob24gMi42IENvcmUgRExMIiAKLVBST1RNT0RFIAotREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgCi1FWFBPUlRTIAotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29uZmlnKQotICAiX1B5SW1wb3J0X0luaXR0YWIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkbGZjbikKLTsgICJkbG9wZW4iCi07ICAiZGxzeW0iCi07ICAiZGxjbG9zZSIKLTsgICJkbGVycm9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0cGF0aHApCi0gICJQeV9HZXRQcm9ncmFtRnVsbFBhdGgiCi0gICJQeV9HZXRQcmVmaXgiCi0gICJQeV9HZXRFeGVjUHJlZml4IgotICAiUHlfR2V0UGF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGJ1aWxkaW5mbykKLSAgIlB5X0dldEJ1aWxkSW5mbyIKLSAgIl9QeV9zdm52ZXJzaW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFpbikKLSAgIlB5X01haW4iCi0gICJQeV9HZXRBcmdjQXJndiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFjY2VsZXIpCi0gICJQeUdyYW1tYXJfQWRkQWNjZWxlcmF0b3JzIgotICAiUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1tYXIxKQotICAiUHlHcmFtbWFyX0ZpbmRERkEiCi0gICJQeUdyYW1tYXJfTGFiZWxSZXByIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobGlzdG5vZGUpCi0gICJQeU5vZGVfTGlzdFRyZWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihub2RlKQotICAiUHlOb2RlX05ldyIKLSAgIlB5Tm9kZV9BZGRDaGlsZCIKLSAgIlB5Tm9kZV9GcmVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocGFyc2VyKQotICAiUHlQYXJzZXJfQWRkVG9rZW4iCi0gICJQeVBhcnNlcl9OZXciCi0gICJQeVBhcnNlcl9EZWxldGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihwYXJzZXRvaykKLSAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nIgotICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MiCi0gICJQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYml0c2V0KQotICAiX1B5X25ld2JpdHNldCIKLSAgIl9QeV9kZWxiaXRzZXQiCi0gICJfUHlfYWRkYml0IgotICAiX1B5X3NhbWViaXRzZXQiCi0gICJfUHlfbWVyZ2ViaXRzZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZXRhZ3JhbW1hcikKLSAgIl9QeV9tZXRhX2dyYW1tYXIiCi0gICJQeV9tZXRhX2dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0b2tlbml6ZXIpCi0gICJQeVRva2VuX09uZUNoYXIiCi0gICJQeVRva2VuX1R3b0NoYXJzIgotICAiUHlUb2tlbl9UaHJlZUNoYXJzIgotICAiUHlUb2tlbml6ZXJfRnJvbVN0cmluZyIKLSAgIlB5VG9rZW5pemVyX0ZyZWUiCi0gICJQeVRva2VuaXplcl9Gcm9tRmlsZSIKLSAgIlB5VG9rZW5pemVyX0dldCIKLSAgIl9QeVBhcnNlcl9Ub2tlbk5hbWVzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobXlyZWFkbGluZSkKLSAgIl9QeU9TX1JlYWRsaW5lVFN0YXRlIgotICAiUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciIKLSAgIlB5T1NfU3RkaW9SZWFkbGluZSIKLSAgIlB5T1NfUmVhZGxpbmUiCi0gICJQeU9TX0lucHV0SG9vayIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFic3RyYWN0KQotICAiX1B5T2JqZWN0X0xlbmd0aEhpbnQiCi0gICJQeU1hcHBpbmdfU2l6ZSIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2QiCi0gICJQeU9iamVjdF9HZXRJdGVtIgotICAiUHlTZXF1ZW5jZV9HZXRJdGVtIgotICAiUHlPYmplY3RfU2V0SXRlbSIKLSAgIlB5U2VxdWVuY2VfU2V0SXRlbSIKLSAgIlB5T2JqZWN0X0RlbEl0ZW0iCi0gICJQeVNlcXVlbmNlX0RlbEl0ZW0iCi0gICJQeU51bWJlcl9NdWx0aXBseSIKLSAgIlB5TnVtYmVyX0luUGxhY2VBZGQiCi0gICJQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkiCi0gICJQeU51bWJlcl9JbnQiCi0gICJQeU51bWJlcl9Mb25nIgotICAiUHlOdW1iZXJfRmxvYXQiCi0gICJQeVNlcXVlbmNlX0NvbmNhdCIKLSAgIlB5U2VxdWVuY2VfUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9HZXRTbGljZSIKLSAgIlB5U2VxdWVuY2VfU2V0U2xpY2UiCi0gICJQeVNlcXVlbmNlX1R1cGxlIgotICAiUHlPYmplY3RfR2V0SXRlciIKLSAgIlB5SXRlcl9OZXh0IgotICAiUHlTZXF1ZW5jZV9GYXN0IgotICAiX1B5U2VxdWVuY2VfSXRlclNlYXJjaCIKLSAgIlB5T2JqZWN0X0NhbGxGdW5jdGlvbiIKLSAgIl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQiCi0gICJfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVCIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzIgotICAiUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyIKLSAgIlB5T2JqZWN0X0NtcCIKLSAgIlB5T2JqZWN0X0NhbGwiCi0gICJQeU9iamVjdF9DYWxsT2JqZWN0IgotICAiUHlPYmplY3RfVHlwZSIKLSAgIlB5T2JqZWN0X1NpemUiCi0gICJQeU9iamVjdF9MZW5ndGgiCi0gICJQeU9iamVjdF9EZWxJdGVtU3RyaW5nIgotICAiUHlPYmplY3RfQXNDaGFyQnVmZmVyIgotICAiUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNXcml0ZUJ1ZmZlciIKLSAgIlB5TnVtYmVyX0NoZWNrIgotICAiUHlOdW1iZXJfQWRkIgotICAiUHlOdW1iZXJfU3VidHJhY3QiCi0gICJQeU51bWJlcl9EaXZpZGUiCi0gICJQeU51bWJlcl9GbG9vckRpdmlkZSIKLSAgIlB5TnVtYmVyX1RydWVEaXZpZGUiCi0gICJQeU51bWJlcl9SZW1haW5kZXIiCi0gICJQeU51bWJlcl9EaXZtb2QiCi0gICJQeU51bWJlcl9Qb3dlciIKLSAgIlB5TnVtYmVyX05lZ2F0aXZlIgotICAiUHlOdW1iZXJfUG9zaXRpdmUiCi0gICJQeU51bWJlcl9BYnNvbHV0ZSIKLSAgIlB5TnVtYmVyX0ludmVydCIKLSAgIlB5TnVtYmVyX0xzaGlmdCIKLSAgIlB5TnVtYmVyX1JzaGlmdCIKLSAgIlB5TnVtYmVyX0FuZCIKLSAgIlB5TnVtYmVyX1hvciIKLSAgIlB5TnVtYmVyX09yIgotICAiUHlOdW1iZXJfSW5kZXgiCi0gICJQeU51bWJlcl9JblBsYWNlU3VidHJhY3QiCi0gICJQeU51bWJlcl9JblBsYWNlRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUiCi0gICJQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyIgotICAiUHlOdW1iZXJfSW5QbGFjZVBvd2VyIgotICAiUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCIKLSAgIlB5TnVtYmVyX0luUGxhY2VSc2hpZnQiCi0gICJQeU51bWJlcl9JblBsYWNlQW5kIgotICAiUHlOdW1iZXJfSW5QbGFjZVhvciIKLSAgIlB5TnVtYmVyX0luUGxhY2VPciIKLSAgIlB5U2VxdWVuY2VfQ2hlY2siCi0gICJQeVNlcXVlbmNlX1NpemUiCi0gICJQeVNlcXVlbmNlX0xlbmd0aCIKLSAgIlB5U2VxdWVuY2VfRGVsU2xpY2UiCi0gICJQeVNlcXVlbmNlX0xpc3QiCi0gICJQeVNlcXVlbmNlX0NvdW50IgotICAiUHlTZXF1ZW5jZV9Db250YWlucyIKLSAgIlB5U2VxdWVuY2VfSW4iCi0gICJQeVNlcXVlbmNlX0luZGV4IgotICAiUHlNYXBwaW5nX0NoZWNrIgotICAiUHlNYXBwaW5nX0xlbmd0aCIKLSAgIlB5TWFwcGluZ19IYXNLZXlTdHJpbmciCi0gICJQeU1hcHBpbmdfSGFzS2V5IgotICAiUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmciCi0gICJQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyIKLSAgIlB5T2JqZWN0X0lzSW5zdGFuY2UiCi0gICJQeU9iamVjdF9Jc1N1YmNsYXNzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYm9vbG9iamVjdCkKLSAgIlB5Qm9vbF9Gcm9tTG9uZyIKLSAgIlB5Qm9vbF9UeXBlIgotICAiX1B5X1plcm9TdHJ1Y3QiCi0gICJfUHlfVHJ1ZVN0cnVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJ1ZmZlcm9iamVjdCkKLSAgIlB5QnVmZmVyX0Zyb21PYmplY3QiCi0gICJQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0IgotICAiUHlCdWZmZXJfRnJvbU1lbW9yeSIKLSAgIlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnkiCi0gICJQeUJ1ZmZlcl9OZXciCi0gICJQeUJ1ZmZlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2VsbG9iamVjdCkKLSAgIlB5Q2VsbF9OZXciCi0gICJQeUNlbGxfR2V0IgotICAiUHlDZWxsX1NldCIKLSAgIlB5Q2VsbF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2xhc3NvYmplY3QpCi0gICJQeUNsYXNzX05ldyIKLSAgIlB5Q2xhc3NfSXNTdWJjbGFzcyIKLSAgIlB5SW5zdGFuY2VfTmV3IgotICAiUHlJbnN0YW5jZV9OZXdSYXciCi0gICJQeU1ldGhvZF9OZXciCi0gICJQeU1ldGhvZF9GdW5jdGlvbiIKLSAgIlB5TWV0aG9kX1NlbGYiCi0gICJQeU1ldGhvZF9DbGFzcyIKLSAgIl9QeUluc3RhbmNlX0xvb2t1cCIKLSAgIlB5TWV0aG9kX0ZpbmkiCi0gICJQeUNsYXNzX1R5cGUiCi0gICJQeUluc3RhbmNlX1R5cGUiCi0gICJQeU1ldGhvZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2Fwc3VsZSkKLSAgIlB5Q2Fwc3VsZV9HZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX0dldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfR2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIgotICAiUHlDYXBzdWxlX0ltcG9ydCIKLSAgIlB5Q2Fwc3VsZV9Jc1ZhbGlkIgotICAiUHlDYXBzdWxlX05ldyIKLSAgIlB5Q2Fwc3VsZV9TZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX1NldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfU2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9TZXRQb2ludGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29iamVjdCkKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ciIKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ckFuZERlc2MiCi0gICJQeUNPYmplY3RfQXNWb2lkUHRyIgotICAiUHlDT2JqZWN0X0dldERlc2MiCi0gICJQeUNPYmplY3RfSW1wb3J0IgotICAiUHlDT2JqZWN0X1NldFZvaWRQdHIiCi0gICJQeUNPYmplY3RfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvZGVvYmplY3QpCi0gICJQeUNvZGVfTmV3IgotICAiUHlDb2RlX0FkZHIyTGluZSIKLSAgIlB5Q29kZV9DaGVja0xpbmVOdW1iZXIiCi0gICJQeUNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbXBsZXhvYmplY3QpCi0gICJfUHlfY19wb3ciCi0gICJfUHlfY19zdW0iCi0gICJfUHlfY19kaWZmIgotICAiX1B5X2NfbmVnIgotICAiX1B5X2NfcHJvZCIKLSAgIl9QeV9jX3F1b3QiCi0gICJQeUNvbXBsZXhfRnJvbUNDb21wbGV4IgotICAiUHlDb21wbGV4X0Zyb21Eb3VibGVzIgotICAiUHlDb21wbGV4X1JlYWxBc0RvdWJsZSIKLSAgIlB5Q29tcGxleF9JbWFnQXNEb3VibGUiCi0gICJQeUNvbXBsZXhfQXNDQ29tcGxleCIKLSAgIlB5Q29tcGxleF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGVzY3JvYmplY3QpCi0gICJQeVdyYXBwZXJfTmV3IgotICAiUHlEZXNjcl9OZXdNZXRob2QiCi0gICJQeURlc2NyX05ld0NsYXNzTWV0aG9kIgotICAiUHlEZXNjcl9OZXdNZW1iZXIiCi0gICJQeURlc2NyX05ld0dldFNldCIKLSAgIlB5RGVzY3JfTmV3V3JhcHBlciIKLSAgIlB5RGljdFByb3h5X05ldyIKLSAgIlB5V3JhcHBlckRlc2NyX1R5cGUiCi0gICJQeVByb3BlcnR5X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkaWN0b2JqZWN0KQotICAiUHlEaWN0X05ldyIKLSAgIlB5RGljdF9HZXRJdGVtIgotICAiUHlEaWN0X1NldEl0ZW0iCi0gICJQeURpY3RfRGVsSXRlbSIKLSAgIlB5RGljdF9DbGVhciIKLSAgIlB5RGljdF9NZXJnZUZyb21TZXEyIgotICAiUHlEaWN0X01lcmdlIgotICAiUHlEaWN0X0tleXMiCi0gICJQeURpY3RfVmFsdWVzIgotICAiUHlEaWN0X0NvbnRhaW5zIgotICAiUHlEaWN0X05leHQiCi0gICJQeURpY3RfSXRlbXMiCi0gICJQeURpY3RfU2l6ZSIKLSAgIlB5RGljdF9Db3B5IgotICAiUHlEaWN0X1VwZGF0ZSIKLSAgIlB5RGljdF9HZXRJdGVtU3RyaW5nIgotICAiUHlEaWN0X1NldEl0ZW1TdHJpbmciCi0gICJQeURpY3RfRGVsSXRlbVN0cmluZyIKLSAgIlB5RGljdF9UeXBlIgotICAiUHlEaWN0SXRlcktleV9UeXBlIgotICAiUHlEaWN0SXRlclZhbHVlX1R5cGUiCi0gICJQeURpY3RJdGVySXRlbV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZW51bW9iamVjdCkKLSAgIlB5RW51bV9UeXBlIgotICAiUHlSZXZlcnNlZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmlsZW9iamVjdCkKLSAgIlB5RmlsZV9Gcm9tU3RyaW5nIgotICAiUHlfVW5pdmVyc2FsTmV3bGluZUZyZWFkIgotICAiUHlGaWxlX0dldExpbmUiCi0gICJQeUZpbGVfU29mdFNwYWNlIgotICAiUHlGaWxlX1dyaXRlT2JqZWN0IgotICAiUHlGaWxlX1dyaXRlU3RyaW5nIgotICAiUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciIKLSAgIlB5X1VuaXZlcnNhbE5ld2xpbmVGZ2V0cyIKLSAgIlB5RmlsZV9TZXRCdWZTaXplIgotICAiUHlGaWxlX1NldEVuY29kaW5nIgotICAiUHlGaWxlX0Zyb21GaWxlIgotICAiUHlGaWxlX0FzRmlsZSIKLSAgIlB5RmlsZV9OYW1lIgotICAiUHlGaWxlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmbG9hdG9iamVjdCkKLSAgIlB5RmxvYXRfRnJvbVN0cmluZyIKLSAgIlB5RmxvYXRfQXNEb3VibGUiCi0gICJQeUZsb2F0X0ZpbmkiCi0gICJfUHlGbG9hdF9QYWNrNCIKLSAgIl9QeUZsb2F0X1BhY2s4IgotICAiX1B5RmxvYXRfVW5wYWNrNCIKLSAgIl9QeUZsb2F0X1VucGFjazgiCi0gICJQeUZsb2F0X0Zyb21Eb3VibGUiCi0gICJQeUZsb2F0X0FzUmVwclN0cmluZyIKLSAgIlB5RmxvYXRfQXNTdHJpbmciCi0gICJfUHlGbG9hdF9Jbml0IgotICAiUHlGbG9hdF9Bc1N0cmluZ0V4IgotICAiUHlGbG9hdF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnJhbWVvYmplY3QpCi0gICJQeUZyYW1lX05ldyIKLSAgIlB5RnJhbWVfRmFzdFRvTG9jYWxzIgotICAiUHlGcmFtZV9Mb2NhbHNUb0Zhc3QiCi0gICJfUHlGcmFtZV9Jbml0IgotICAiUHlGcmFtZV9GaW5pIgotICAiUHlGcmFtZV9CbG9ja1NldHVwIgotICAiUHlGcmFtZV9CbG9ja1BvcCIKLSAgIlB5RnJhbWVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1bmNvYmplY3QpCi0gICJQeUZ1bmN0aW9uX05ldyIKLSAgIlB5RnVuY3Rpb25fR2V0Q29kZSIKLSAgIlB5RnVuY3Rpb25fR2V0R2xvYmFscyIKLSAgIlB5RnVuY3Rpb25fR2V0TW9kdWxlIgotICAiUHlGdW5jdGlvbl9HZXREZWZhdWx0cyIKLSAgIlB5RnVuY3Rpb25fU2V0RGVmYXVsdHMiCi0gICJQeUZ1bmN0aW9uX0dldENsb3N1cmUiCi0gICJQeUZ1bmN0aW9uX1NldENsb3N1cmUiCi0gICJQeUNsYXNzTWV0aG9kX05ldyIKLSAgIlB5U3RhdGljTWV0aG9kX05ldyIKLSAgIlB5RnVuY3Rpb25fVHlwZSIKLSAgIlB5Q2xhc3NNZXRob2RfVHlwZSIKLSAgIlB5U3RhdGljTWV0aG9kX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZW5vYmplY3QpCi0gICJQeUdlbl9OZXciCi0gICJQeUdlbl9OZWVkc0ZpbmFsaXppbmciCi0gICJQeUdlbl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW50b2JqZWN0KQotICAiUHlJbnRfQXNMb25nIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdNYXNrIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdMb25nTWFzayIKLSAgIlB5SW50X0Zyb21TdHJpbmciCi0gICJQeUludF9Bc1NzaXplX3QiCi0gICJQeUludF9GaW5pIgotICAiUHlJbnRfRnJvbVVuaWNvZGUiCi0gICJQeUludF9Gcm9tTG9uZyIKLSAgIlB5SW50X0Zyb21TaXplX3QiCi0gICJQeUludF9Gcm9tU3NpemVfdCIKLSAgIlB5SW50X0dldE1heCIKLSAgIl9QeUludF9Jbml0IgotICAiUHlJbnRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJvYmplY3QpCi0gICJQeVNlcUl0ZXJfTmV3IgotICAiUHlDYWxsSXRlcl9OZXciCi0gICJQeVNlcUl0ZXJfVHlwZSIKLSAgIlB5Q2FsbEl0ZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGxpc3RvYmplY3QpCi0gICJQeUxpc3RfTmV3IgotICAiUHlMaXN0X0FwcGVuZCIKLSAgIlB5TGlzdF9TaXplIgotICAiUHlMaXN0X0dldEl0ZW0iCi0gICJQeUxpc3RfU2V0SXRlbSIKLSAgIlB5TGlzdF9JbnNlcnQiCi0gICJQeUxpc3RfR2V0U2xpY2UiCi0gICJQeUxpc3RfU2V0U2xpY2UiCi0gICJQeUxpc3RfU29ydCIKLSAgIlB5TGlzdF9SZXZlcnNlIgotICAiUHlMaXN0X0FzVHVwbGUiCi0gICJfUHlMaXN0X0V4dGVuZCIKLSAgIlB5TGlzdF9GaW5pIgotICAiUHlMaXN0X1R5cGUiCi0gICJQeUxpc3RJdGVyX1R5cGUiCi0gICJQeUxpc3RSZXZJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihsb25nb2JqZWN0KQotICAiUHlMb25nX0Zyb21Eb3VibGUiCi0gICJQeUxvbmdfQXNMb25nIgotICAiX1B5TG9uZ19Bc1NzaXplX3QiCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmciCi0gICJfUHlMb25nX0Zyb21CeXRlQXJyYXkiCi0gICJfUHlMb25nX0FzQnl0ZUFycmF5IgotICAiUHlMb25nX0FzRG91YmxlIgotICAiUHlMb25nX0Zyb21Mb25nTG9uZyIKLSAgIlB5TG9uZ19Bc0xvbmdMb25nIgotICAiUHlMb25nX0Zyb21TdHJpbmciCi0gICJQeUxvbmdfRnJvbUxvbmciCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2siCi0gICJfUHlMb25nX0Zyb21TaXplX3QiCi0gICJfUHlMb25nX0Zyb21Tc2l6ZV90IgotICAiX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSIKLSAgIlB5TG9uZ19Gcm9tVm9pZFB0ciIKLSAgIlB5TG9uZ19Bc1ZvaWRQdHIiCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmciCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nIgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2siCi0gICJQeUxvbmdfRnJvbVVuaWNvZGUiCi0gICJfUHlMb25nX1NpZ24iCi0gICJfUHlMb25nX051bUJpdHMiCi0gICJfUHlMb25nX05ldyIKLSAgIl9QeUxvbmdfQ29weSIKLSAgIlB5TG9uZ19UeXBlIgotICAiX1B5TG9uZ19EaWdpdFZhbHVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWV0aG9kb2JqZWN0KQotICAiUHlDRnVuY3Rpb25fQ2FsbCIKLSAgIlB5X0ZpbmRNZXRob2RJbkNoYWluIgotICAiUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24iCi0gICJQeUNGdW5jdGlvbl9HZXRTZWxmIgotICAiUHlDRnVuY3Rpb25fR2V0RmxhZ3MiCi0gICJQeV9GaW5kTWV0aG9kIgotICAiUHlDRnVuY3Rpb25fTmV3RXgiCi0gICJQeUNGdW5jdGlvbl9GaW5pIgotICAiUHlDRnVuY3Rpb25fTmV3IgotICAiUHlDRnVuY3Rpb25fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1vZHVsZW9iamVjdCkKLSAgIlB5TW9kdWxlX05ldyIKLSAgIl9QeU1vZHVsZV9DbGVhciIKLSAgIlB5TW9kdWxlX0dldERpY3QiCi0gICJQeU1vZHVsZV9HZXROYW1lIgotICAiUHlNb2R1bGVfR2V0RmlsZW5hbWUiCi0gICJQeU1vZHVsZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JqZWN0KQotICAiUHlfRGl2aXNpb25XYXJuaW5nRmxhZyIKLSAgIlB5T2JqZWN0X1N0ciIKLSAgIlB5T2JqZWN0X1JlcHIiCi0gICJfUHlPYmplY3RfU3RyIgotICAiUHlPYmplY3RfVW5pY29kZSIKLSAgIlB5T2JqZWN0X0dldEF0dHIiCi0gICJQeU9iamVjdF9Jc1RydWUiCi0gICJQeU51bWJlcl9Db2VyY2VFeCIKLSAgIlB5T2JqZWN0X0NvbXBhcmUiCi0gICJQeU9iamVjdF9SaWNoQ29tcGFyZSIKLSAgIl9QeV9IYXNoRG91YmxlIgotICAiUHlPYmplY3RfSGFzaCIKLSAgIlB5T2JqZWN0X1NldEF0dHIiCi0gICJQeU9iamVjdF9HZW5lcmljR2V0QXR0ciIKLSAgIlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyIgotICAiUHlDYWxsYWJsZV9DaGVjayIKLSAgIlB5T2JqZWN0X0RpciIKLSAgIlB5TWVtX01hbGxvYyIKLSAgIlB5TWVtX1JlYWxsb2MiCi0gICJQeU1lbV9GcmVlIgotICAiUHlPYmplY3RfUHJpbnQiCi0gICJfUHlPYmplY3RfRHVtcCIKLSAgIlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCIKLSAgIlB5T2JqZWN0X0dldEF0dHJTdHJpbmciCi0gICJQeU9iamVjdF9TZXRBdHRyU3RyaW5nIgotICAiUHlPYmplY3RfSGFzQXR0clN0cmluZyIKLSAgIlB5T2JqZWN0X0hhc0F0dHIiCi0gICJfUHlPYmplY3RfR2V0RGljdFB0ciIKLSAgIlB5T2JqZWN0X1NlbGZJdGVyIgotICAiUHlPYmplY3RfTm90IgotICAiUHlOdW1iZXJfQ29lcmNlIgotICAiUHlfUmVwckVudGVyIgotICAiUHlfUmVwckxlYXZlIgotICAiX1B5X0hhc2hQb2ludGVyIgotICAiUHlfSW5jUmVmIgotICAiUHlfRGVjUmVmIgotICAiX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QiCi0gICJfUHlUcmFzaF9kZXN0cm95X2NoYWluIgotICAiUHlPYmplY3RfSW5pdCIKLSAgIlB5T2JqZWN0X0luaXRWYXIiCi0gICJfUHlPYmplY3RfTmV3IgotICAiX1B5T2JqZWN0X05ld1ZhciIKLSAgIl9QeU9iamVjdF9EZWwiCi0gICJfUHlfUmVhZHlUeXBlcyIKLSAgIl9QeV9Td2FwcGVkT3AiCi0gICJfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QiCi0gICJfUHlfTm9uZVN0cnVjdCIKLSAgIl9QeV9jb2JqZWN0X2hhY2siCi0gICJfUHlfYWJzdHJhY3RfaGFjayIKLSAgIl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIgotICAiX1B5VHJhc2hfZGVsZXRlX2xhdGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JtYWxsb2MpCi0gICJQeU9iamVjdF9NYWxsb2MiCi0gICJQeU9iamVjdF9GcmVlIgotICAiUHlPYmplY3RfUmVhbGxvYyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJhbmdlb2JqZWN0KQotICAiUHlSYW5nZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2V0b2JqZWN0KQotICAiUHlTZXRfUG9wIgotICAiUHlTZXRfTmV3IgotICAiUHlGcm96ZW5TZXRfTmV3IgotICAiUHlTZXRfU2l6ZSIKLSAgIlB5U2V0X0NsZWFyIgotICAiUHlTZXRfQ29udGFpbnMiCi0gICJQeVNldF9EaXNjYXJkIgotICAiUHlTZXRfQWRkIgotICAiX1B5U2V0X05leHQiCi0gICJfUHlTZXRfVXBkYXRlIgotICAiUHlTZXRfRmluaSIKLSAgIlB5U2V0X1R5cGUiCi0gICJQeUZyb3plblNldF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2xpY2VvYmplY3QpCi0gICJfUHlTbGljZV9Gcm9tSW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlc0V4IgotICAiUHlTbGljZV9OZXciCi0gICJfUHlfRWxsaXBzaXNPYmplY3QiCi0gICJQeVNsaWNlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJpbmdvYmplY3QpCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSIKLSAgIlB5U3RyaW5nX0ludGVybkluUGxhY2UiCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nIgotICAiUHlTdHJpbmdfRnJvbUZvcm1hdFYiCi0gICJQeVN0cmluZ19Bc1N0cmluZyIKLSAgIl9QeVN0cmluZ19SZXNpemUiCi0gICJQeVN0cmluZ19Gcm9tRm9ybWF0IgotICAiUHlTdHJpbmdfQXNEZWNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfRGVjb2RlRXNjYXBlIgotICAiUHlTdHJpbmdfUmVwciIKLSAgIlB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZSIKLSAgIl9QeVN0cmluZ19Gb3JtYXRMb25nIgotICAiUHlTdHJpbmdfRm9ybWF0IgotICAiX1B5X1JlbGVhc2VJbnRlcm5lZFN0cmluZ3MiCi0gICJQeVN0cmluZ19TaXplIgotICAiUHlTdHJpbmdfQ29uY2F0IgotICAiUHlTdHJpbmdfQ29uY2F0QW5kRGVsIgotICAiX1B5U3RyaW5nX0VxIgotICAiUHlTdHJpbmdfSW50ZXJuSW1tb3J0YWwiCi0gICJQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nIgotICAiX1B5U3RyaW5nX0pvaW4iCi0gICJQeVN0cmluZ19EZWNvZGUiCi0gICJQeVN0cmluZ19FbmNvZGUiCi0gICJQeVN0cmluZ19Bc0VuY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19Bc0RlY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19GaW5pIgotICAiUHlTdHJpbmdfVHlwZSIKLSAgIlB5QmFzZVN0cmluZ19UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RydWN0c2VxKQotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSIKLSAgIlB5U3RydWN0U2VxdWVuY2VfTmV3IgotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0dXBsZW9iamVjdCkKLSAgIlB5VHVwbGVfTmV3IgotICAiUHlUdXBsZV9QYWNrIgotICAiX1B5VHVwbGVfUmVzaXplIgotICAiUHlUdXBsZV9TaXplIgotICAiUHlUdXBsZV9HZXRJdGVtIgotICAiUHlUdXBsZV9TZXRJdGVtIgotICAiUHlUdXBsZV9HZXRTbGljZSIKLSAgIlB5VHVwbGVfRmluaSIKLSAgIlB5VHVwbGVfVHlwZSIKLSAgIlB5VHVwbGVJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0eXBlb2JqZWN0KQotICAiUHlUeXBlX0lzU3VidHlwZSIKLSAgIl9QeVR5cGVfTG9va3VwIgotICAiUHlUeXBlX1JlYWR5IgotICAiUHlUeXBlX0dlbmVyaWNBbGxvYyIKLSAgIl9QeU9iamVjdF9TbG90Q29tcGFyZSIKLSAgIlB5VHlwZV9HZW5lcmljTmV3IgotICAiUHlUeXBlX1R5cGUiCi0gICJQeUJhc2VPYmplY3RfVHlwZSIKLSAgIlB5U3VwZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVvYmplY3QpCi0gICJQeVVuaWNvZGVVQ1MyX1Jlc2l6ZSIKLSAgIlB5VW5pY29kZVVDUzJfRnJvbU9yZGluYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21PYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVBU0NJSSIKLSAgIlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjhTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc0FTQ0lJU3RyaW5nIgotICAiUHlVbmljb2RlX0RlY29kZVVURjciCi0gICJQeVVuaWNvZGVfRW5jb2RlVVRGNyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEY4IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNlN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiX1B5VW5pY29kZV9EZWNvZGVVbmljb2RlSW50ZXJuYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlRGVjaW1hbCIKLSAgIlB5VW5pY29kZVVDUzJfQ291bnQiCi0gICJQeVVuaWNvZGVVQ1MyX0ZpbmQiCi0gICJQeVVuaWNvZGVVQ1MyX0pvaW4iCi0gICJQeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbXBhcmUiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbnRhaW5zIgotICAiUHlVbmljb2RlVUNTMl9Db25jYXQiCi0gICJfUHlVbmljb2RlX1hTdHJpcCIKLSAgIlB5VW5pY29kZVVDUzJfUmVwbGFjZSIKLSAgIlB5VW5pY29kZVVDUzJfU3BsaXQiCi0gICJQeVVuaWNvZGVVQ1MyX1JTcGxpdCIKLSAgIlB5VW5pY29kZVVDUzJfRm9ybWF0IgotICAiX1B5VW5pY29kZVVDUzJfSW5pdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0ZpbmkiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21Vbmljb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldFNpemUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldE1heCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0FzRGVmYXVsdEVuY29kZWRTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2IgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEYxNiIKLSAgIlB5VW5pY29kZVVDUzJfQXNVbmljb2RlRXNjYXBlU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUxhdGluMSIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQVNDSUkiCi0gICJQeVVuaWNvZGVVQ1MyX0FzQ2hhcm1hcFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9SUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9UcmFuc2xhdGUiCi0gICJQeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaCIKLSAgIlB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVjdHlwZSkKLSAgIl9QeVVuaWNvZGVfVHlwZVJlY29yZHMiCi0gICJfUHlVbmljb2RlVUNTMl9Ub051bWVyaWMiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xvd2VyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzVXBwZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNUaXRsZWNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc1doaXRlc3BhY2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xpbmVicmVhayIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvTG93ZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfVG9VcHBlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Ub1RpdGxlY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfVG9EaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfSXNEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzTnVtZXJpYyIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzQWxwaGEiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih3ZWFrcmVmb2JqZWN0KQotICAiUHlXZWFrcmVmX05ld1JlZiIKLSAgIlB5V2Vha3JlZl9OZXdQcm94eSIKLSAgIlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMiCi0gICJQeVdlYWtyZWZfR2V0T2JqZWN0IgotICAiX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQiCi0gICJfUHlXZWFrcmVmX0NsZWFyUmVmIgotICAiX1B5V2Vha3JlZl9SZWZUeXBlIgotICAiX1B5V2Vha3JlZl9Qcm94eVR5cGUiCi0gICJfUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoUHl0aG9uLWFzdCkKLTsgICJpbml0X2FzdCIKLSAgIk1vZHVsZSIKLSAgIkludGVyYWN0aXZlIgotICAiRXhwcmVzc2lvbiIKLSAgIlN1aXRlIgotICAiRnVuY3Rpb25EZWYiCi0gICJDbGFzc0RlZiIKLSAgIlJldHVybiIKLSAgIkRlbGV0ZSIKLSAgIkFzc2lnbiIKLSAgIkF1Z0Fzc2lnbiIKLSAgIlByaW50IgotICAiRm9yIgotICAiV2hpbGUiCi0gICJJZiIKLSAgIldpdGgiCi0gICJSYWlzZSIKLSAgIlRyeUV4Y2VwdCIKLSAgIlRyeUZpbmFsbHkiCi0gICJBc3NlcnQiCi0gICJJbXBvcnQiCi0gICJJbXBvcnRGcm9tIgotICAiRXhlYyIKLSAgIkdsb2JhbCIKLSAgIkV4cHIiCi0gICJQYXNzIgotICAiQnJlYWsiCi0gICJDb250aW51ZSIKLSAgIkJvb2xPcCIKLSAgIkJpbk9wIgotICAiVW5hcnlPcCIKLSAgIkxhbWJkYSIKLSAgIklmRXhwIgotICAiRGljdCIKLSAgIkxpc3RDb21wIgotICAiR2VuZXJhdG9yRXhwIgotICAiWWllbGQiCi0gICJDb21wYXJlIgotICAiQ2FsbCIKLSAgIlJlcHIiCi0gICJOdW0iCi0gICJTdHIiCi0gICJBdHRyaWJ1dGUiCi0gICJTdWJzY3JpcHQiCi0gICJOYW1lIgotICAiTGlzdCIKLSAgIlR1cGxlIgotICAiRWxsaXBzaXMiCi0gICJTbGljZSIKLSAgIkV4dFNsaWNlIgotICAiSW5kZXgiCi0gICJjb21wcmVoZW5zaW9uIgotICAiZXhjZXB0aGFuZGxlciIKLSAgImFyZ3VtZW50cyIKLSAgImtleXdvcmQiCi0gICJhbGlhcyIKLSAgIlB5QVNUX21vZDJvYmoiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhc2RsKQotICAiYXNkbF9zZXFfbmV3IgotICAiYXNkbF9pbnRfc2VxX25ldyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFzdCkKLSAgIlB5QVNUX0Zyb21Ob2RlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYmx0aW5tb2R1bGUpCi0gICJfUHlCdWlsdGluX0luaXQiCi0gICJQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXhjZXB0aW9ucykKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQiCi0gICJfUHlFeGNfSW5pdCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbiIKLSAgIl9QeUV4Y19GaW5pIgotICAiUHlFeGNfQmFzZUV4Y2VwdGlvbiIKLSAgIlB5RXhjX0V4Y2VwdGlvbiIKLSAgIlB5RXhjX1N0YW5kYXJkRXJyb3IiCi0gICJQeUV4Y19UeXBlRXJyb3IiCi0gICJQeUV4Y19TdG9wSXRlcmF0aW9uIgotICAiUHlFeGNfR2VuZXJhdG9yRXhpdCIKLSAgIlB5RXhjX1N5c3RlbUV4aXQiCi0gICJQeUV4Y19LZXlib2FyZEludGVycnVwdCIKLSAgIlB5RXhjX0ltcG9ydEVycm9yIgotICAiUHlFeGNfRW52aXJvbm1lbnRFcnJvciIKLSAgIlB5RXhjX0lPRXJyb3IiCi0gICJQeUV4Y19PU0Vycm9yIgotICAiUHlFeGNfRU9GRXJyb3IiCi0gICJQeUV4Y19SdW50aW1lRXJyb3IiCi0gICJQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIgotICAiUHlFeGNfTmFtZUVycm9yIgotICAiUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IiCi0gICJQeUV4Y19BdHRyaWJ1dGVFcnJvciIKLSAgIlB5RXhjX0luZGV4RXJyb3IiCi0gICJQeUV4Y19TeW50YXhFcnJvciIKLSAgIlB5RXhjX0luZGVudGF0aW9uRXJyb3IiCi0gICJQeUV4Y19UYWJFcnJvciIKLSAgIlB5RXhjX0xvb2t1cEVycm9yIgotICAiUHlFeGNfS2V5RXJyb3IiCi0gICJQeUV4Y19WYWx1ZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVuY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZURlY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIgotICAiUHlFeGNfQXNzZXJ0aW9uRXJyb3IiCi0gICJQeUV4Y19Bcml0aG1ldGljRXJyb3IiCi0gICJQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IiCi0gICJQeUV4Y19PdmVyZmxvd0Vycm9yIgotICAiUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IiCi0gICJQeUV4Y19TeXN0ZW1FcnJvciIKLSAgIlB5RXhjX1JlZmVyZW5jZUVycm9yIgotICAiUHlFeGNfTWVtb3J5RXJyb3IiCi0gICJQeUV4Y19XYXJuaW5nIgotICAiUHlFeGNfVXNlcldhcm5pbmciCi0gICJQeUV4Y19EZXByZWNhdGlvbldhcm5pbmciCi0gICJQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIgotICAiUHlFeGNfU3ludGF4V2FybmluZyIKLSAgIlB5RXhjX1J1bnRpbWVXYXJuaW5nIgotICAiUHlFeGNfRnV0dXJlV2FybmluZyIKLSAgIlB5RXhjX0ltcG9ydFdhcm5pbmciCi0gICJQeUV4Y19NZW1vcnlFcnJvckluc3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjZXZhbCkKLSAgIlB5RXZhbF9FdmFsRnJhbWVFeCIKLSAgIlB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzIgotICAiUHlFdmFsX0V2YWxDb2RlRXgiCi0gICJQeUV2YWxfR2V0RnJhbWUiCi0gICJQeUV2YWxfQ2FsbE9iamVjdCIKLSAgIlB5RXZhbF9TZXRQcm9maWxlIgotICAiUHlFdmFsX1NldFRyYWNlIgotICAiUHlFdmFsX0dldEJ1aWx0aW5zIgotICAiUHlFdmFsX0dldEdsb2JhbHMiCi0gICJQeUV2YWxfR2V0TG9jYWxzIgotICAiUHlFdmFsX0dldFJlc3RyaWN0ZWQiCi0gICJQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzIgotICAiUHlfRmx1c2hMaW5lIgotICAiUHlfQWRkUGVuZGluZ0NhbGwiCi0gICJQeV9NYWtlUGVuZGluZ0NhbGxzIgotICAiUHlfU2V0UmVjdXJzaW9uTGltaXQiCi0gICJQeV9HZXRSZWN1cnNpb25MaW1pdCIKLSAgIl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwiCi0gICJQeUV2YWxfR2V0RnVuY05hbWUiCi0gICJQeUV2YWxfR2V0RnVuY0Rlc2MiCi0gICJQeUV2YWxfR2V0Q2FsbFN0YXRzIgotICAiUHlFdmFsX0V2YWxGcmFtZSIKLSAgIlB5RXZhbF9TYXZlVGhyZWFkIgotICAiUHlFdmFsX1Jlc3RvcmVUaHJlYWQiCi0gICJQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkIgotICAiUHlFdmFsX0luaXRUaHJlYWRzIgotICAiUHlFdmFsX0FjcXVpcmVMb2NrIgotICAiUHlFdmFsX1JlbGVhc2VMb2NrIgotICAiUHlFdmFsX0FjcXVpcmVUaHJlYWQiCi0gICJQeUV2YWxfUmVsZWFzZVRocmVhZCIKLSAgIlB5RXZhbF9SZUluaXRUaHJlYWRzIgotICAiX1B5RXZhbF9TbGljZUluZGV4IgotICAiUHlFdmFsX0V2YWxDb2RlIgotICAiX1B5RXZhbF9DYWxsVHJhY2luZyIKLSAgIl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IgotICAiX1B5X0NoZWNrSW50ZXJ2YWwiCi0gICJfUHlfVGlja2VyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29tcGlsZSkKLSAgIl9QeV9NYW5nbGUiCi0gICJQeUFTVF9Db21waWxlIgotICAiUHlOb2RlX0NvbXBpbGUiCi0gICJQeV9PcHRpbWl6ZUZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2RlY3MpCi0gICJfUHlDb2RlY19Mb29rdXAiCi0gICJQeUNvZGVjX0VuY29kZSIKLSAgIlB5Q29kZWNfRGVjb2RlIgotICAiUHlDb2RlY19JZ25vcmVFcnJvcnMiCi0gICJQeUNvZGVjX1JlcGxhY2VFcnJvcnMiCi0gICJQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19SZWdpc3RlciIKLSAgIlB5Q29kZWNfRW5jb2RlciIKLSAgIlB5Q29kZWNfRGVjb2RlciIKLSAgIlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyIgotICAiUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIiCi0gICJQeUNvZGVjX1N0cmVhbVJlYWRlciIKLSAgIlB5Q29kZWNfU3RyZWFtV3JpdGVyIgotICAiUHlDb2RlY19SZWdpc3RlckVycm9yIgotICAiUHlDb2RlY19Mb29rdXBFcnJvciIKLSAgIlB5Q29kZWNfU3RyaWN0RXJyb3JzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJyb3JzKQotICAiUHlFcnJfU2V0Tm9uZSIKLSAgIlB5RXJyX1NldFN0cmluZyIKLSAgIlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyIKLSAgIlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbiIKLSAgIlB5RXJyX0ZldGNoIgotICAiUHlFcnJfQ2xlYXIiCi0gICJQeUVycl9Ob01lbW9yeSIKLSAgIlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdCIKLSAgIlB5RXJyX0Zvcm1hdCIKLSAgIlB5RXJyX05ld0V4Y2VwdGlvbiIKLSAgIlB5RXJyX1dyaXRlVW5yYWlzYWJsZSIKLSAgIlB5RXJyX1N5bnRheExvY2F0aW9uIgotICAiUHlFcnJfUHJvZ3JhbVRleHQiCi0gICJQeUVycl9TZXRPYmplY3QiCi0gICJQeUVycl9PY2N1cnJlZCIKLSAgIlB5RXJyX1Jlc3RvcmUiCi0gICJQeUVycl9FeGNlcHRpb25NYXRjaGVzIgotICAiUHlFcnJfQmFkQXJndW1lbnQiCi0gICJQeUVycl9TZXRGcm9tRXJybm8iCi0gICJQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUiCi0gICJQeUVycl9CYWRJbnRlcm5hbENhbGwiCi0gICJfUHlFcnJfQmFkSW50ZXJuYWxDYWxsIgotICAiUHlFcnJfV2FybiIKLSAgIlB5RXJyX1dhcm5FeHBsaWNpdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZyb3plbikKLSAgIlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmcm96ZW5tYWluKQotICAiUHlfRnJvemVuTWFpbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1dHVyZSkKLSAgIlB5RnV0dXJlX0Zyb21BU1QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRhcmdzKQotICAiUHlBcmdfUGFyc2UiCi0gICJfUHlBcmdfUGFyc2VfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlIgotICAiX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMiCi0gICJfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotICAiUHlBcmdfVW5wYWNrVHVwbGUiCi0gICJfUHlBcmdfTm9LZXl3b3JkcyIKLSAgIlB5QXJnX1ZhUGFyc2UiCi0gICJQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcyIKLSAgIl9QeUFyZ19WYVBhcnNlX1NpemVUIgotICAiX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0Y29tcGlsZXIpCi0gICJQeV9HZXRDb21waWxlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGNvcHlyaWdodCkKLSAgIlB5X0dldENvcHlyaWdodCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldHBsYXRmb3JtKQotICAiUHlfR2V0UGxhdGZvcm0iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXR2ZXJzaW9uKQotICAiUHlfR2V0VmVyc2lvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1pbml0KQotICAiX1B5UGFyc2VyX0dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbXBvcnQpCi0gICJfUHlJbXBvcnRfSW5pdCIKLSAgIl9QeUltcG9ydEhvb2tzX0luaXQiCi0gICJQeUltcG9ydF9JbXBvcnRNb2R1bGUiCi0gICJQeUltcG9ydF9DbGVhbnVwIgotICAiX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uIgotICAiUHlJbXBvcnRfQWRkTW9kdWxlIgotICAiUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCIKLSAgIlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSIKLSAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4IgotICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwiCi0gICJQeUltcG9ydF9SZWxvYWRNb2R1bGUiCi0gICJQeUltcG9ydF9JbXBvcnQiCi07ICAiaW5pdGltcCIKLSAgIl9QeUltcG9ydF9GaW5pIgotICAiUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIiCi0gICJQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSIKLSAgIlB5SW1wb3J0X0dldE1vZHVsZURpY3QiCi0gICJfUHlJbXBvcnRfRmluZE1vZHVsZSIKLSAgIl9QeUltcG9ydF9Jc1NjcmlwdCIKLSAgIl9QeUltcG9ydF9SZUluaXRMb2NrIgotICAiX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24iCi0gICJQeUltcG9ydF9BcHBlbmRJbml0dGFiIgotICAiUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYiIKLSAgIlB5SW1wb3J0X0luaXR0YWIiCi0gICJfUHlJbXBvcnRfRmlsZXRhYiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGltcG9ydGRsKQotICAiX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFyc2hhbCkKLSAgIlB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmciCi0gICJQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nIgotICAiUHlNYXJzaGFsX0luaXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtb2RzdXBwb3J0KQotICAiUHlfSW5pdE1vZHVsZTQiCi0gICJQeV9CdWlsZFZhbHVlIgotICAiX1B5X0J1aWxkVmFsdWVfU2l6ZVQiCi0gICJQeUV2YWxfQ2FsbEZ1bmN0aW9uIgotICAiUHlFdmFsX0NhbGxNZXRob2QiCi0gICJfUHlfVmFCdWlsZFZhbHVlX1NpemVUIgotICAiUHlfVmFCdWlsZFZhbHVlIgotICAiUHlNb2R1bGVfQWRkT2JqZWN0IgotICAiUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQiCi0gICJQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudCIKLSAgIl9QeV9QYWNrYWdlQ29udGV4dCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG15c25wcmludGYpCi0gICJQeU9TX3NucHJpbnRmIgotICAiUHlPU192c25wcmludGYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihteXN0cnRvdWwpCi0gICJQeU9TX3N0cnRvdWwiCi0gICJQeU9TX3N0cnRvbCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5YXJlbmEpCi0gICJQeUFyZW5hX05ldyIKLSAgIlB5QXJlbmFfRnJlZSIKLSAgIlB5QXJlbmFfTWFsbG9jIgotICAiUHlBcmVuYV9BZGRQeU9iamVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5ZnBlKQotICAiUHlGUEVfZHVtbXkiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweXN0YXRlKQotICAiUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyIgotICAiUHlUaHJlYWRTdGF0ZV9DbGVhciIKLSAgIl9QeVRocmVhZF9DdXJyZW50RnJhbWVzIgotICAiUHlHSUxTdGF0ZV9FbnN1cmUiCi0gICJQeUdJTFN0YXRlX1JlbGVhc2UiCi0gICJQeUludGVycHJldGVyU3RhdGVfTmV3IgotICAiUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZSIKLSAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlIgotICAiUHlUaHJlYWRTdGF0ZV9OZXciCi0gICJQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQiCi0gICJQeVRocmVhZFN0YXRlX0dldCIKLSAgIlB5VGhyZWFkU3RhdGVfU3dhcCIKLSAgIlB5VGhyZWFkU3RhdGVfR2V0RGljdCIKLSAgIlB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMiCi0gICJQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkIgotICAiUHlJbnRlcnByZXRlclN0YXRlX05leHQiCi0gICJQeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZCIKLSAgIlB5VGhyZWFkU3RhdGVfTmV4dCIKLSAgIl9QeUdJTFN0YXRlX0luaXQiCi0gICJfUHlHSUxTdGF0ZV9GaW5pIgotICAiX1B5VGhyZWFkU3RhdGVfQ3VycmVudCIKLSAgIl9QeVRocmVhZFN0YXRlX0dldEZyYW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHl0aG9ucnVuKQotICAiUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnIgotICAiUHlfRGVidWdGbGFnIgotICAiUHlfVmVyYm9zZUZsYWciCi0gICJQeV9Ob1NpdGVGbGFnIgotICAiUHlfSW50ZXJhY3RpdmVGbGFnIgotICAiUHlfRnJvemVuRmxhZyIKLSAgIlB5X0luaXRpYWxpemVFeCIKLSAgIlB5X0ZhdGFsRXJyb3IiCi0gICJQeV9OZXdJbnRlcnByZXRlciIKLSAgIlB5RXJyX1ByaW50IgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyIKLSAgIlB5UGFyc2VyX0FTVEZyb21GaWxlIgotICAiUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9GaWxlRXhGbGFncyIKLSAgIlB5X0V4aXQiCi0gICJQeUVycl9QcmludEV4IgotICAiUHlFcnJfRGlzcGxheSIKLSAgIlB5X1NldFByb2dyYW1OYW1lIgotICAiUHlfR2V0UHJvZ3JhbU5hbWUiCi0gICJQeV9TZXRQeXRob25Ib21lIgotICAiUHlfR2V0UHl0aG9uSG9tZSIKLSAgIlB5X0luaXRpYWxpemUiCi0gICJQeV9GaW5hbGl6ZSIKLSAgIlB5X0lzSW5pdGlhbGl6ZWQiCi0gICJQeV9FbmRJbnRlcnByZXRlciIKLSAgIlB5UnVuX0FueUZpbGVGbGFncyIKLSAgIlB5X0ZkSXNJbnRlcmFjdGl2ZSIKLSAgIlB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzIgotICAiUHlSdW5fQW55RmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmdGbGFncyIKLSAgIlB5UnVuX1N0cmluZ0ZsYWdzIgotICAiUHlQYXJzZXJfQVNURnJvbVN0cmluZyIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncyIKLSAgIlB5X0NvbXBpbGVTdHJpbmdGbGFncyIKLSAgIlB5X1N5bXRhYmxlU3RyaW5nIgotICAiUHlfQXRFeGl0IgotICAiUHlPU19nZXRzaWciCi0gICJQeU9TX3NldHNpZyIKLSAgIlB5UGFyc2VyX1NldEVycm9yIgotICAiUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmciCi0gICJQeVJ1bl9BbnlGaWxlIgotICAiUHlSdW5fQW55RmlsZUV4IgotICAiUHlSdW5fRmlsZSIKLSAgIlB5UnVuX0ZpbGVFeCIKLSAgIlB5UnVuX0ZpbGVGbGFncyIKLSAgIlB5UnVuX1NpbXBsZUZpbGUiCi0gICJQeVJ1bl9TaW1wbGVGaWxlRXgiCi0gICJQeVJ1bl9TdHJpbmciCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmciCi0gICJQeV9Db21waWxlU3RyaW5nIgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmUiCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZUxvb3AiCi0gICJQeV9Vc2VDbGFzc0V4Y2VwdGlvbnNGbGFnIgotICAiUHlfVW5pY29kZUZsYWciCi0gICJfUHlfUW5ld0ZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJ1Y3RtZW1iZXIpCi0gICJQeU1lbWJlcl9HZXQiCi0gICJQeU1lbWJlcl9HZXRPbmUiCi0gICJQeU1lbWJlcl9TZXRPbmUiCi0gICJQeU1lbWJlcl9TZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZSkKLSAgIlB5U3ltdGFibGVfQnVpbGQiCi0gICJQeVN5bXRhYmxlX0ZyZWUiCi0gICJQeVNUX0dldFNjb3BlIgotICAiUHlTeW10YWJsZV9Mb29rdXAiCi0gICJQeVNURW50cnlfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN5c21vZHVsZSkKLSAgIl9QeVN5c19Jbml0IgotICAiUHlTeXNfV3JpdGVTdGRlcnIiCi0gICJQeVN5c19TZXRQYXRoIgotICAiUHlTeXNfU2V0QXJndiIKLSAgIlB5U3lzX1dyaXRlU3Rkb3V0IgotICAiUHlfU3VidmVyc2lvblJldmlzaW9uIgotICAiUHlfU3VidmVyc2lvblNob3J0QnJhbmNoIgotICAiUHlTeXNfR2V0T2JqZWN0IgotICAiUHlTeXNfU2V0T2JqZWN0IgotICAiUHlTeXNfR2V0RmlsZSIKLSAgIlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMiCi0gICJQeVN5c19BZGRXYXJuT3B0aW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHJhY2ViYWNrKQotICAiUHlUcmFjZUJhY2tfSGVyZSIKLSAgIlB5VHJhY2VCYWNrX1ByaW50IgotICAiUHlUcmFjZUJhY2tfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldG9wdCkKLSAgIl9QeU9TX0dldE9wdCIKLSAgIl9QeU9TX29wdGVyciIKLSAgIl9QeU9TX29wdGluZCIKLSAgIl9QeU9TX29wdGFyZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGR5bmxvYWRfc2hsaWIpCi0gICJfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWIiCi0gICJfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0aHJlYWQpCi0gICJQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfaW5pdF90aHJlYWQiCi0gICJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIgotICAiUHlUaHJlYWRfZXhpdF90aHJlYWQiCi0gICJQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50IgotICAiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayIKLSAgIlB5VGhyZWFkX2ZyZWVfbG9jayIKLSAgIlB5VGhyZWFkX2FjcXVpcmVfbG9jayIKLSAgIlB5VGhyZWFkX3JlbGVhc2VfbG9jayIKLSAgIlB5VGhyZWFkX2dldF9zdGFja3NpemUiCi0gICJQeVRocmVhZF9zZXRfc3RhY2tzaXplIgotICAiUHlUaHJlYWRfY3JlYXRlX2tleSIKLSAgIlB5VGhyZWFkX2RlbGV0ZV9rZXkiCi0gICJQeVRocmVhZF9zZXRfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdjbW9kdWxlKQotOyAgImluaXRnYyIKLSAgIl9QeU9iamVjdF9HQ19OZXciCi0gICJfUHlPYmplY3RfR0NfTmV3VmFyIgotICAiUHlHQ19Db2xsZWN0IgotICAiX1B5T2JqZWN0X0dDX1Jlc2l6ZSIKLSAgIl9QeU9iamVjdF9HQ19NYWxsb2MiCi0gICJQeU9iamVjdF9HQ19UcmFjayIKLSAgIlB5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJQeU9iamVjdF9HQ19EZWwiCi0gICJfUHlHQ19EdW1wIgotICAiX1B5T2JqZWN0X0dDX1RyYWNrIgotICAiX1B5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJfUHlPYmplY3RfR0NfRGVsIgotICAiX1B5R0NfZ2VuZXJhdGlvbjAiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzaWduYWxtb2R1bGUpCi07ICAiaW5pdHNpZ25hbCIKLSAgIlB5RXJyX0NoZWNrU2lnbmFscyIKLSAgIlB5RXJyX1NldEludGVycnVwdCIKLSAgIlB5T1NfRmluaUludGVycnVwdHMiCi0gICJQeU9TX0ludGVycnVwdE9jY3VycmVkIgotICAiUHlPU19Jbml0SW50ZXJydXB0cyIKLSAgIlB5T1NfQWZ0ZXJGb3JrIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocG9zaXhtb2R1bGUpCi07ICAiaW5pdG9zMiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF90aHJlYWRtb2R1bGUpCi07ICAiaW5pdF90aHJlYWQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhcnJheW1vZHVsZSkKLTsgICJpbml0YXJyYXkiCi07ICAiYXJyYXlfbWV0aG9kcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJpbmFzY2lpKQotOyAgImluaXRiaW5hc2NpaSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNtYXRobW9kdWxlKQotOyAgImluaXRjbWF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9jb2RlY3Ntb2R1bGUpCi07ICAiaW5pdF9jb2RlY3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2xsZWN0aW9uc21vZHVsZSkKLTsgICJpbml0Y29sbGVjdGlvbnMiCi0gICJkZXF1ZWl0ZXJfdHlwZSIKLSAgImRlcXVlcmV2aXRlcl90eXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY1BpY2tsZSkKLTsgICJpbml0Y1BpY2tsZSIKLTsgICJmYXN0X3NhdmVfbGVhdmUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfY3N2KQotOyAgImluaXRfY3N2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGF0ZXRpbWVtb2R1bGUpCi07ICAiaW5pdGRhdGV0aW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGxtb2R1bGUpCi07ICAiaW5pdGRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJybm9tb2R1bGUpCi07ICAiaW5pdGVycm5vIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmNudGxtb2R1bGUpCi07ICAiaW5pdGZjbnRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2Z1bmN0b29sc21vZHVsZSkKLTsgICJpbml0X2Z1bmN0b29scyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9oZWFwcW1vZHVsZSkKLTsgICJpbml0X2hlYXBxIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW1hZ2VvcCkKLTsgICJpbml0aW1hZ2VvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJ0b29sc21vZHVsZSkKLTsgICJpbml0aXRlcnRvb2xzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2xvY2FsZW1vZHVsZSkKLTsgICJpbml0X2xvY2FsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1hdGhtb2R1bGUpCi07ICAiaW5pdG1hdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZDUpCi0gICJtZDVfZmluaXNoIgotICAibWQ1X2luaXQiCi0gICJtZDVfYXBwZW5kIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWQ1bW9kdWxlKQotOyAgImluaXRfbWQ1IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob3BlcmF0b3IpCi07ICAiaW5pdG9wZXJhdG9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3JhbmRvbW1vZHVsZSkKLTsgICJpbml0X3JhbmRvbSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJnYmltZ21vZHVsZSkKLTsgICJpbml0cmdiaW1nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhbW9kdWxlKQotOyAgImluaXRfc2hhIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhMjU2bW9kdWxlKQotOyAgImluaXRfc2hhMjU2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhNTEybW9kdWxlKQotOyAgImluaXRfc2hhNTEyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3NyZSkKLTsgICJpbml0X3NyZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cm9wbW9kdWxlKQotOyAgImluaXRzdHJvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9zdHJ1Y3QpCi07ICAiaW5pdF9zdHJ1Y3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZW1vZHVsZSkKLTsgICJpbml0X3N5bXRhYmxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGVybWlvcykKLTsgICJpbml0dGVybWlvcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRpbWVtb2R1bGUpCi07ICAiaW5pdHRpbWUiCi0gICJfUHlUaW1lX0RvdWJsZVRvVGltZXQiCi07ICAiaW5pdHRpbWV6b25lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGltaW5nbW9kdWxlKQotOyAgImluaXR0aW1pbmciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfd2Vha3JlZikKLTsgICJpbml0X3dlYWtyZWYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih4eHN1YnR5cGUpCi07ICAiaW5pdHh4c3VidHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHppcGltcG9ydCkKLTsgICJpbml0emlwaW1wb3J0IgpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5dGhvbnBtLmMgYi9QQy9vczJlbXgvcHl0aG9ucG0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0N2Y0Yi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHl0aG9ucG0uYworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKiBPUy8yIFBNIG1haW4gcHJvZ3JhbSAtIGNyZWF0ZXMgYSBoaWRkZW4gd2luZG93LCBhbmQgc3RhcnRzIFB5dGhvbgotICogaW50ZXJwcmV0ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIHNvIHRoYXQgUHl0aG9uIHNjcmlwdHMgY2FuIGJlCi0gKiBydW4gaW4gUE0gcHJvY2VzcyBzcGFjZSB3aXRob3V0IGEgY29uc29sZSBXaW5kb3cuICBUaGUgaW50ZXJwcmV0ZXIKLSAqIGlzIGluY29ycG9yYXRlZCBieSBsaW5raW5nIGluIHRoZSBQeXRob24gRExMLgotICoKLSAqIEFzIGl0IHN0YW5kcywgSSBkb24ndCB0aGluayB0aGlzIGlzIGFkZXF1YXRlIGZvciBzdXBwb3J0aW5nIFB5dGhvbgotICogR1VJIG1vZHVsZXMsIGFzIHRoZSBQeXRob24gdGhyZWFkIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIG1lc3NhZ2UKLSAqIHF1ZXVlIC0gd2hpY2ggaXMgcmVxdWlyZWQgb2YgdGhyZWFkcyB0aGF0IHdhbnQgdG8gY3JlYXRlL3VzZQotICogUE0gd2luZG93cy4KLSAqCi0gKiBUaGlzIGNvZGUgb3dlcyBhIGxvdCB0byAiT1MvMiBQcmVzZW50YXRpb24gTWFuYWdlciBQcm9ncmFtbWluZyIsIGJ5Ci0gKiBDaGFybGVzIFBldHpvbGQuCi0gKgotICogQW5kcmV3IE1hY0ludHlyZSA8YW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXU+LCBBdWd1c3QgMjAwMS4KLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgUHl0aG9uIDIuMS4xIGxpY2VuY2UgLSBzZWUgdGhlIExJQ0VOQ0UKLSAqIGZpbGUgaW4gdGhlIFB5dGhvbiB2Mi4xLjEgKG9yIGxhdGVyKSBzb3VyY2UgZGlzdHJpYnV0aW9uLgotICogQ29weXJpZ2h0IGFzc2lnbmVkIHRvIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgMjAwMS4KLSAqLwotCi0jZGVmaW5lIElOQ0xfRE9TCi0jZGVmaW5lIElOQ0xfV0lOCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLS8qIHVzZSBzdHJ1Y3R1cmUgdG8gcGFzcyBjb21tYW5kIGxpbmUgdG8gUHl0aG9uIHRocmVhZCAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQgYXJnYzsKLSAgICBjaGFyICoqYXJndjsKLSAgICBIV05EIEZyYW1lOwotICAgIGludCBydW5uaW5nOwotfSBhcmdsaXN0OwotCi0vKiBtYWtlIHRoaXMgYSBnbG9iYWwgdG8gc2ltcGxpZnkgYWNjZXNzLgotICogaXQgc2hvdWxkIG9ubHkgYmUgc2V0IGZyb20gdGhlIFB5dGhvbiB0aHJlYWQsIG9yIGJ5IHRoZSBjb2RlIHRoYXQKLSAqIGluaXRpYXRlcyB0aGUgUHl0aG9uIHRocmVhZCB3aGVuIHRoZSB0aHJlYWQgY2Fubm90IGJlIGNyZWF0ZWQuCi0gKi8KLWludCBQeXRob25SQzsKLQotZXh0ZXJuIERMX0VYUE9SVChpbnQpIFB5X01haW4oaW50LCBjaGFyICoqKTsKLXZvaWQgUHl0aG9uVGhyZWFkKHZvaWQgKik7Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgVUxPTkcgRnJhbWVGbGFncyA9IEZDRl9USVRMRUJBUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TWVNNRU5VIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1NJWkVCT1JERVIgfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfSElERUJVVFRPTiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TSEVMTFBPU0lUSU9OIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1RBU0tMSVNUOwotICAgIEhBQiBoYWI7Ci0gICAgSE1RIGhtcTsKLSAgICBIV05EIENsaWVudDsKLSAgICBRTVNHIHFtc2c7Ci0gICAgYXJnbGlzdCBhcmdzOwotICAgIGludCBweXRob25fdGlkOwotCi0gICAgLyogaW5pdCBQTSBhbmQgY3JlYXRlIG1lc3NhZ2UgcXVldWUgKi8KLSAgICBoYWIgPSBXaW5Jbml0aWFsaXplKDApOwotICAgIGhtcSA9IFdpbkNyZWF0ZU1zZ1F1ZXVlKGhhYiwgMCk7Ci0KLSAgICAvKiBjcmVhdGUgYSAoaGlkZGVuKSBXaW5kb3cgdG8gaG91c2UgdGhlIHdpbmRvdyBwcm9jZWR1cmUgKi8KLSAgICBhcmdzLkZyYW1lID0gV2luQ3JlYXRlU3RkV2luZG93KEhXTkRfREVTS1RPUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRnJhbWVGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uUE0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDbGllbnQpOwotCi0gICAgLyogcnVuIFB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHRocmVhZCAqLwotICAgIGFyZ3MuYXJnYyA9IGFyZ2M7Ci0gICAgYXJncy5hcmd2ID0gYXJndjsKLSAgICBhcmdzLnJ1bm5pbmcgPSAwOwotICAgIGlmICgtMSA9PSAocHl0aG9uX3RpZCA9IF9iZWdpbnRocmVhZChQeXRob25UaHJlYWQsIE5VTEwsIDEwMjQgKiAxMDI0LCAmYXJncykpKQotICAgIHsKLSAgICAgICAgLyogY291bGRuJ3Qgc3RhcnQgdGhyZWFkICovCi0gICAgICAgIFdpbkFsYXJtKEhXTkRfREVTS1RPUCwgV0FfRVJST1IpOwotICAgICAgICBQeXRob25SQyA9IDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8qIHByb2Nlc3MgUE0gbWVzc2FnZXMsIHVudGlsIFB5dGhvbiBleGl0cyAqLwotICAgICAgICB3aGlsZSAoV2luR2V0TXNnKGhhYiwgJnFtc2csIE5VTExIQU5ETEUsIDAsIDApKQotICAgICAgICAgICAgV2luRGlzcGF0Y2hNc2coaGFiLCAmcW1zZyk7Ci0gICAgICAgIGlmIChhcmdzLnJ1bm5pbmcgPiAwKQotICAgICAgICAgICAgRG9zS2lsbFRocmVhZChweXRob25fdGlkKTsKLSAgICB9Ci0KLSAgICAvKiBkZXN0cm95IHdpbmRvdywgc2h1dGRvd24gbWVzc2FnZSBxdWV1ZSBhbmQgUE0gKi8KLSAgICBXaW5EZXN0cm95V2luZG93KGFyZ3MuRnJhbWUpOwotICAgIFdpbkRlc3Ryb3lNc2dRdWV1ZShobXEpOwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotCi0gICAgcmV0dXJuIFB5dGhvblJDOwotfQotCi12b2lkIFB5dGhvblRocmVhZCh2b2lkICphcmdsKQotewotICAgIEhBQiBoYWI7Ci0gICAgYXJnbGlzdCAqYXJnczsKLQotICAgIC8qIFBNIGluaXRpYWxpc2F0aW9uICovCi0gICAgaGFiID0gV2luSW5pdGlhbGl6ZSgwKTsKLQotICAgIC8qIHN0YXJ0IFB5dGhvbiAqLwotICAgIGFyZ3MgPSAoYXJnbGlzdCAqKWFyZ2w7Ci0gICAgYXJncy0+cnVubmluZyA9IDE7Ci0gICAgUHl0aG9uUkMgPSBQeV9NYWluKGFyZ3MtPmFyZ2MsIGFyZ3MtPmFyZ3YpOwotCi0gICAgLyogZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBzZW5kIHRoZSB0ZXJtaW5hdGlvbiBtZXNzYWdlICovCi0gICAgRG9zRW50ZXJDcml0U2VjKCk7Ci0gICAgYXJncy0+cnVubmluZyA9IDA7Ci0gICAgV2luUG9zdE1zZyhhcmdzLT5GcmFtZSwgV01fUVVJVCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAvKiBzaHV0ZG93biBQTSBhbmQgdGVybWluYXRlIHRocmVhZCAqLwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL190a2ludGVyLmRlZiBiL1BDL29zMnZhY3BwL190a2ludGVyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlkYWI4ZC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUxJQlJBUlkgICAgICAgIF9US0lOVEVSIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UKLURFU0NSSVBUSU9OICAgICdQeXRob24gRXh0ZW5zaW9uIERMTCB2MS4wIGZvciBBY2Nlc3MgdG8gVGNsL1RrIEVudmlyb25tZW50JwotUFJPVE1PREUKLURBVEEgICAgICAgICAgIE1VTFRJUExFIE5PTlNIQVJFRAotCi1FWFBPUlRTCi0gICAgICAgICAgICAgICBpbml0X3RraW50ZXIKLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvY29uZmlnLmMgYi9QQy9vczJ2YWNwcC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2YjUyMS4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9jb25maWcuYworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IChjKSAyMDAwLCBCZU9wZW4uY29tLgotQ29weXJpZ2h0IChjKSAxOTk1LTIwMDAsIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcy4KLUNvcHlyaWdodCAoYykgMTk5MC0xOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1TZWUgdGhlIGZpbGUgIk1pc2MvQ09QWVJJR0hUIiBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kCi1yZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIGFuZCBmb3IgYSBESVNDTEFJTUVSIE9GIEFMTCBXQVJSQU5USUVTLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNb2R1bGUgY29uZmlndXJhdGlvbiAqLwotCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHRhYmxlIG9mIGJ1aWx0LWluIG1vZHVsZXMuCi0gICBTZWUgaW5pdF9idWlsdGluKCkgaW4gaW1wb3J0LmMuICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotZXh0ZXJuIHZvaWQgaW5pdGFycmF5KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGF1ZGlvb3Aodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0YmluYXNjaWkodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0Y21hdGgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0ZXJybm8odm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0aW1hZ2VvcCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG1kNSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRudCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRvczIodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0b3BlcmF0b3Iodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cG9zaXgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cmdiaW1nKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHNpZ25hbCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3NvY2tldCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzdHJ1Y3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0dGltZSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfdGhyZWFkKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHBjcmUodm9pZCk7Ci0jaWZkZWYgV0lOMzIKLWV4dGVybiB2b2lkIGluaXRtc3ZjcnQodm9pZCk7Ci0jZW5kaWYKLQotLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCi0KLWV4dGVybiB2b2lkIFB5TWFyc2hhbF9Jbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGltcCh2b2lkKTsKLQotc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7Ci0KLSAgICAgICAgeyJhcnJheSIsIGluaXRhcnJheX0sCi0jaWZkZWYgTV9JMzg2Ci0gICAgICAgIHsiYXVkaW9vcCIsIGluaXRhdWRpb29wfSwKLSNlbmRpZgotICAgICAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICAgICAgeyJjbWF0aCIsIGluaXRjbWF0aH0sCi0gICAgICAgIHsiZXJybm8iLCBpbml0ZXJybm99LAotLy8gICAgICAgIHsiaW1hZ2VvcCIsIGluaXRpbWFnZW9wfSwKLSAgICAgICAgeyJtYXRoIiwgaW5pdG1hdGh9LAotICAgICAgICB7Im1kNSIsIGluaXRtZDV9LAotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCi0gICAgICAgIHsibnQiLCBpbml0bnR9LCAvKiBVc2UgdGhlIE5UIG9zIGZ1bmN0aW9ucywgbm90IHBvc2l4ICovCi0jZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIHsib3MyIiwgaW5pdG9zMn0sCi0jZWxzZQotICAgICAgICB7InBvc2l4IiwgaW5pdHBvc2l4fSwKLSNlbmRpZgotI2VuZGlmCi0gICAgICAgIHsib3BlcmF0b3IiLCBpbml0b3BlcmF0b3J9LAotLy8gICAgICAgIHsicmdiaW1nIiwgaW5pdHJnYmltZ30sCi0gICAgICAgIHsic2lnbmFsIiwgaW5pdHNpZ25hbH0sCi0jaWZkZWYgVVNFX1NPQ0tFVAotICAgICAgICB7Il9zb2NrZXQiLCBpbml0X3NvY2tldH0sCi0gICAgICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSAgICAgICAgeyJzdHJ1Y3QiLCBpbml0c3RydWN0fSwKLSAgICAgICAgeyJ0aW1lIiwgaW5pdHRpbWV9LAotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgICAgICB7InBjcmUiLCBpbml0cGNyZX0sCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgeyJtc3ZjcnQiLCBpbml0bXN2Y3J0fSwKLSNlbmRpZgotCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDIgLS0gKi8KLQotICAgICAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgICAgIHsibWFyc2hhbCIsIFB5TWFyc2hhbF9Jbml0fSwKLQotICAgICAgICAvKiBUaGlzIGxpdmVzIGl0IHdpdGggaW1wb3J0LmMgKi8KLSAgICAgICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAgICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzICovCi0gICAgICAgIHsiYnVpbHRpbnMiLCBOVUxMfSwKLSAgICAgICAgeyJzeXMiLCBOVUxMfSwKLQotICAgICAgICAvKiBTZW50aW5lbCAqLwotICAgICAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jIGIvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJjMjgyNy4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLQotLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMS4gIFdvcmtzIG9uIE5UIHRvby4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgIm9zZGVmcy5oIgotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci1leHRlcm4gQk9PTCBQeVdpbl9Jc1dpbjMycyh2b2lkKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZiAvKiBIQVZFX1VOSVNURF9IICovCi0KLS8qIFNlYXJjaCBpbiBzb21lIGNvbW1vbiBsb2NhdGlvbnMgZm9yIHRoZSBhc3NvY2lhdGVkIFB5dGhvbiBsaWJyYXJpZXMuCi0gKgotICogVHdvIGRpcmVjdG9yaWVzIG11c3QgYmUgZm91bmQsIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBkaXJlY3RvcnkKLSAqIChwcmVmaXgpLCBjb250YWluaW5nIHRoZSBjb21tb24gLnB5IGFuZCAucHljIGZpbGVzLCBhbmQgdGhlIHBsYXRmb3JtCi0gKiBkZXBlbmRlbnQgZGlyZWN0b3J5IChleGVjX3ByZWZpeCksIGNvbnRhaW5pbmcgdGhlIHNoYXJlZCBsaWJyYXJ5Ci0gKiBtb2R1bGVzLiAgTm90ZSB0aGF0IHByZWZpeCBhbmQgZXhlY19wcmVmaXggY2FuIGJlIHRoZSBzYW1lIGRpcmVjdG9yeSwKLSAqIGJ1dCBmb3Igc29tZSBpbnN0YWxsYXRpb25zLCB0aGV5IGFyZSBkaWZmZXJlbnQuCi0gKgotICogUHlfR2V0UGF0aCgpIHRyaWVzIHRvIHJldHVybiBhIHNlbnNpYmxlIFB5dGhvbiBtb2R1bGUgc2VhcmNoIHBhdGguCi0gKgotICogRmlyc3QsIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBleGVjdXRhYmxlIGlzIGluIGEgc3ViZGlyZWN0b3J5IG9mCi0gKiB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeS4gIFdlIGNhbGN1bGF0ZSB0aGUgZnVsbCBwYXRoIG9mIHRoZQotICogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgYXMgcHJvZ3BhdGguICBXZSB3b3JrIGJhY2t3YXJkcwotICogYWxvbmcgcHJvZ3BhdGggYW5kIGxvb2sgZm9yICRkaXIvTW9kdWxlcy9TZXR1cC5pbiwgYSBkaXN0aW5jdGl2ZQotICogbGFuZG1hcmsuICBJZiBmb3VuZCwgd2UgdXNlICRkaXIvTGliIGFzICRyb290LiAgVGhlIHJldHVybmVkCi0gKiBQeXRob24gcGF0aCBpcyB0aGUgY29tcGlsZWQgI2RlZmluZSBQWVRIT05QQVRIIHdpdGggYWxsIHRoZSBpbml0aWFsCi0gKiAiLi9saWIiIHJlcGxhY2VkIGJ5ICRyb290LgotICoKLSAqIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCB3ZSByZXR1cm4gdGhhdC4KLSAqCi0gKiBPdGhlcndpc2Ugd2UgdHJ5IHRvIGZpbmQgJHByb2dwYXRoL2xpYi9vcy5weSwgYW5kIGlmIGZvdW5kLCB0aGVuCi0gKiByb290IGlzICRwcm9ncGF0aC9saWIsIGFuZCB3ZSByZXR1cm4gUHl0aG9uIHBhdGggYXMgY29tcGlsZWQgUFlUSE9OUEFUSAotICogd2l0aCBhbGwgIi4vbGliIiByZXBsYWNlZCBieSAkcm9vdCAoYXMgYWJvdmUpLgotICoKLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLQotCi1zdGF0aWMgaW50Ci1pc19zZXAoY2hhciBjaCkgLyogZGV0ZXJtaW5lIGlmICJjaCIgaXMgYSBzZXBhcmF0b3IgY2hhcmFjdGVyICovCi17Ci0jaWZkZWYgQUxUU0VQCi0gICAgcmV0dXJuIGNoID09IFNFUCB8fCBjaCA9PSBBTFRTRVA7Ci0jZWxzZQotICAgIHJldHVybiBjaCA9PSBTRVA7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgdm9pZAotcmVkdWNlKGNoYXIgKmRpcikKLXsKLSAgICBpbnQgaSA9IHN0cmxlbihkaXIpOwotICAgIHdoaWxlIChpID4gMCAmJiAhaXNfc2VwKGRpcltpXSkpCi0gICAgICAgIC0taTsKLSAgICBkaXJbaV0gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLWV4aXN0cyhjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgcmV0dXJuIHN0YXQoZmlsZW5hbWUsICZidWYpID09IDA7Ci19Ci0KLQotLyogQWRkIGEgcGF0aCBjb21wb25lbnQsIGJ5IGFwcGVuZGluZyBzdHVmZiB0byBidWZmZXIuCi0gICBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IE1BWFBBVEhMRU4gKyAxIGJ5dGVzIGFsbG9jYXRlZCwgYW5kIGNvbnRhaW4gYQotICAgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZSB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyAobm90IGNvdW50aW5nCi0gICB0aGUgdHJhaWxpbmcgTlVMKS4gIEl0J3MgYSBmYXRhbCBlcnJvciBpZiBpdCBjb250YWlucyBhIHN0cmluZyBsb25nZXIgdGhhbgotICAgdGhhdCAoY2FsbGVycyBtdXN0IGJlIGNhcmVmdWwhKS4gIElmIHRoZXNlIHJlcXVpcmVtZW50cyBhcmUgbWV0LCBpdCdzCi0gICBndWFyYW50ZWVkIHRoYXQgYnVmZmVyIHdpbGwgc3RpbGwgYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlCi0gICB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyBhdCBleGl0LiAgSWYgc3R1ZmYgaXMgdG9vIGxvbmcsIG9ubHkgYXMgbXVjaCBvZgotICAgc3R1ZmYgYXMgZml0cyB3aWxsIGJlIGFwcGVuZGVkLgotKi8KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgaW50IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIGludCBuOwotCi0gICAgLyogU2VhcmNoIGZyb20gYXJndjBfcGF0aCwgdW50aWwgcm9vdCBpcyBmb3VuZCAqLwotICAgIHN0cmNweShwcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgIGRvIHsKLSAgICAgICAgbiA9IHN0cmxlbihwcmVmaXgpOwotICAgICAgICBqb2luKHByZWZpeCwgbGFuZG1hcmspOwotICAgICAgICBpZiAoZXhpc3RzKHByZWZpeCkpIHsKLSAgICAgICAgICAgIHByZWZpeFtuXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBwcmVmaXhbbl0gPSAnXDAnOwotICAgICAgICByZWR1Y2UocHJlZml4KTsKLSAgICB9IHdoaWxlIChwcmVmaXhbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlICJtYWxsb2MuaCIgLy8gZm9yIGFsbG9jYSAtIHNlZSBjb21tZW50cyBiZWxvdyEKLWV4dGVybiBjb25zdCBjaGFyICpQeVdpbl9ETExWZXJzaW9uU3RyaW5nOyAvLyBhIHN0cmluZyBsb2FkZWQgZnJvbSB0aGUgRExMIGF0IHN0YXJ0dXAuCi0KLQotLyogTG9hZCBhIFBZVEhPTlBBVEggdmFsdWUgZnJvbSB0aGUgcmVnaXN0cnkuCi0gICBMb2FkIGZyb20gZWl0aGVyIEhLRVlfTE9DQUxfTUFDSElORSBvciBIS0VZX0NVUlJFTlRfVVNFUi4KLQotICAgUmV0dXJucyBOVUxMLCBvciBhIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgZnJlZWQuCi0qLwotCi1zdGF0aWMgY2hhciAqCi1nZXRweXRob25yZWdwYXRoKEhLRVkga2V5QmFzZSwgQk9PTCBiV2luMzJzKQotewotICAgIEhLRVkgbmV3S2V5ID0gMDsKLSAgICBEV09SRCBuYW1lU2l6ZSA9IDA7Ci0gICAgRFdPUkQgZGF0YVNpemUgPSAwOwotICAgIERXT1JEIG51bUVudHJpZXMgPSAwOwotICAgIExPTkcgcmM7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsKLSAgICBjaGFyICpkYXRhQnVmOwotICAgIGNvbnN0IGNoYXIga2V5UHJlZml4W10gPSAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxcIjsKLSAgICBjb25zdCBjaGFyIGtleVN1ZmZpeFtdID0gIlxcUHl0aG9uUGF0aCI7Ci0gICAgaW50IHZlcnNpb25MZW47Ci0gICAgY2hhciAqa2V5QnVmOwotCi0gICAgLy8gVHJpZWQgdG8gdXNlIHN5c2dldCgid2ludmVyIikgYnV0IGhlcmUgaXMgdG9vIGVhcmx5IDotKAotICAgIHZlcnNpb25MZW4gPSBzdHJsZW4oUHlXaW5fRExMVmVyc2lvblN0cmluZyk7Ci0gICAgLy8gYWxsb2NhID09IG5vIGZyZWUgcmVxdWlyZWQsIGJ1dCBtZW1vcnkgb25seSBsb2NhbCB0byBmbi4KLSAgICAvLyBhbHNvIG5vIGhlYXAgZnJhZ21lbnRhdGlvbiEgIEFtIEkgYmVpbmcgc2lsbHk/Ci0gICAga2V5QnVmID0gYWxsb2NhKHNpemVvZihrZXlQcmVmaXgpLTEgKyB2ZXJzaW9uTGVuICsgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBjaGFycyBvbmx5LCBwbHVzIDEgTlVMTC4KLSAgICAvLyBsb3RzIG9mIGNvbnN0YW50cyBoZXJlIGZvciB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgYXdheSA6LSkKLSAgICBtZW1jcHkoa2V5QnVmLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLTEpOwotICAgIG1lbWNweShrZXlCdWYrc2l6ZW9mKGtleVByZWZpeCktMSwgUHlXaW5fRExMVmVyc2lvblN0cmluZywgdmVyc2lvbkxlbik7Ci0gICAgbWVtY3B5KGtleUJ1ZitzaXplb2Yoa2V5UHJlZml4KS0xK3ZlcnNpb25MZW4sIGtleVN1ZmZpeCwgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBOVUxMIGNvbWVzIHdpdGggdGhpcyBvbmUhCi0KLSAgICByYz1SZWdPcGVuS2V5KGtleUJhc2UsCi0gICAgICAgICAgICAgICAgICBrZXlCdWYsCi0gICAgICAgICAgICAgICAgICAmbmV3S2V5KTsKLSAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgUmVnUXVlcnlJbmZvS2V5KG5ld0tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZudW1FbnRyaWVzLCAmbmFtZVNpemUsICZkYXRhU2l6ZSwgTlVMTCwgTlVMTCk7Ci0gICAgfQotICAgIGlmIChiV2luMzJzICYmIG51bUVudHJpZXM9PTAgJiYgZGF0YVNpemU9PTApIHsKLSAgICAgICAgLyogbXVzdCBoYXJkY29kZSBmb3IgV2luMzJzICovCi0gICAgICAgIG51bUVudHJpZXMgPSAxOwotICAgICAgICBkYXRhU2l6ZSA9IDUxMTsKLSAgICB9Ci0gICAgaWYgKG51bUVudHJpZXMpIHsKLSAgICAgICAgLyogTG9vcCBvdmVyIGFsbCBzdWJrZXlzLiAqLwotICAgICAgICAvKiBXaW4zMnMgZG9lc250IGtub3cgaG93IG1hbnkgc3Via2V5cywgc28gd2UgZG8KLSAgICAgICAgICAgaXQgdHdpY2UgKi8KLSAgICAgICAgY2hhciBrZXlCdWZbTUFYX1BBVEgrMV07Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGludCBvZmYgPSAwOwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgbG9uZyByZXFkU2l6ZSA9IDA7Ci0gICAgICAgICAgICBEV09SRCByYyA9IFJlZ0VudW1LZXkobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBrZXlCdWYsIE1BWF9QQVRIKzEpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZShuZXdLZXksIGtleUJ1ZiwgTlVMTCwgJnJlcWRTaXplKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoYldpbjMycyAmJiByZXFkU2l6ZT09MCkgcmVxZFNpemUgPSA1MTI7Ci0gICAgICAgICAgICBkYXRhU2l6ZSArPSByZXFkU2l6ZSArIDE7IC8qIDEgZm9yIHRoZSAiOyIgKi8KLSAgICAgICAgfQotICAgICAgICBkYXRhQnVmID0gbWFsbG9jKGRhdGFTaXplKzEpOwotICAgICAgICBpZiAoZGF0YUJ1Zj09TlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBwcmV0dHkgc2VyaW91cz8gIFJhaXNlIGVycm9yPyAqLwotICAgICAgICAvKiBOb3cgbG9vcCBvdmVyLCBncmFiYmluZyB0aGUgcGF0aHMuCi0gICAgICAgICAgIFN1YmtleXMgYmVmb3JlIG1haW4gbGlicmFyeSAqLwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgaW50IGFkanVzdDsKLSAgICAgICAgICAgIGxvbmcgcmVxZFNpemUgPSBkYXRhU2l6ZTsKLSAgICAgICAgICAgIERXT1JEIHJjID0gUmVnRW51bUtleShuZXdLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGtleUJ1ZixNQVhfUEFUSCsxKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWUobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUJ1ZiwgZGF0YUJ1ZitvZmYsICZyZXFkU2l6ZSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJlcWRTaXplPjEpIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBOb3RoaW5nLCBvciBvbmx5ICdcMCcgY29waWVkLiAqLwotICAgICAgICAgICAgICAgIGFkanVzdCA9IHN0cmxlbihkYXRhQnVmK29mZik7Ci0gICAgICAgICAgICAgICAgZGF0YVNpemUgLT0gYWRqdXN0OwotICAgICAgICAgICAgICAgIG9mZiArPSBhZGp1c3Q7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmYrK10gPSAnOyc7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmZdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBkYXRhU2l6ZS0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIEFkZGl0aW9uYWxseSwgd2luMzJzIGRvZXNudCB3b3JrIGFzIGV4cGVjdGVkLCBzbwotICAgICAgICAgICB0aGUgc3BlY2lmaWMgc3RybGVuKCkgaXMgcmVxdWlyZWQgZm9yIDMuMS4gKi8KLSAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlKG5ld0tleSwgIiIsIGRhdGFCdWYrb2ZmLCAmZGF0YVNpemUpOwotICAgICAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGlmIChzdHJsZW4oZGF0YUJ1Zik9PTApCi0gICAgICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBkYXRhQnVmOyAvKiBjYWxsZXIgd2lsbCBmcmVlICovCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3S2V5KQotICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIHJldHVybiByZXR2YWw7Ci19Ci0jZW5kaWYgLyogTVNfV0lOMzIgKi8KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChHZXRNb2R1bGVGaWxlTmFtZShOVUxMLCBwcm9ncGF0aCwgTUFYUEFUSExFTikpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cmNweShwcm9ncGF0aCwgcHJvZyk7Ci0gICAgZWxzZSBpZiAocGF0aCkgewotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgY2hhciAqZGVsaW0gPSBzdHJjaHIocGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gZGVsaW0gLSBwYXRoOwotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihwcm9ncGF0aCArIGxlbikgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0cmNweShwcm9ncGF0aCwgcGF0aCk7Ci0KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IFB5X0dFVEVOVigiUFlUSE9OUEFUSCIpOwotI2lmZGVmIE1TX1dJTjMyCi0gICAgY2hhciAqbWFjaGluZXBhdGgsICp1c2VycGF0aDsKLQotICAgIC8qIEFyZSB3ZSBydW5uaW5nIHVuZGVyIFdpbmRvd3MgMy4xKDEpIFdpbjMycz8gKi8KLSAgICBpZiAoUHlXaW5fSXNXaW4zMnMoKSkgewotICAgICAgICAvKiBPbmx5IENMQVNTRVNfUk9PVCBpcyBzdXBwb3J0ZWQgKi8KLSAgICAgICAgbWFjaGluZXBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ0xBU1NFU19ST09ULCBUUlVFKTsKLSAgICAgICAgdXNlcnBhdGggPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hY2hpbmVwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0xPQ0FMX01BQ0hJTkUsIEZBTFNFKTsKLSAgICAgICAgdXNlcnBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ1VSUkVOVF9VU0VSLCBGQUxTRSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBnZXRfcHJvZ3BhdGgoKTsKLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICBjaGFyICpkZWxpbTsKLQotICAgICAgICBzdHJjcHkocHJlZml4LCBweXRob25ob21lKTsKLQotICAgIC8qIEV4dHJhY3QgQW55IE9wdGlvbmFsIFRyYWlsaW5nIEVYRUNfUFJFRklYICovCi0gICAgLyogZS5nLiBQWVRIT05IT01FPTxwcmVmaXg+OjxleGVjX3ByZWZpeD4gICAqLwotICAgIGRlbGltID0gc3RyY2hyKHByZWZpeCwgREVMSU0pOwotICAgIGlmIChkZWxpbSkgewotICAgICAgICAqZGVsaW0gPSAnXDAnOwotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIGRlbGltKzEpOwotICAgIH0gZWxzZQotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIEVYRUNfUFJFRklYKTsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCAmJiAqZW52cGF0aCA9PSAnXDAnKQotICAgICAgICBlbnZwYXRoID0gTlVMTDsKLQotICAgIC8qIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgcGF0aCBmcm9tIHRoZSBmb2xsb3dpbmcgcGFydHM6Ci0gICAgICAgKDEpIHRoZSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBzZXQ7Ci0gICAgICAgKDIpIGZvciBXaW4zMiwgdGhlIG1hY2hpbmVwYXRoIGFuZCB1c2VycGF0aCwgaWYgc2V0OwotICAgICAgICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICAgICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAgICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAgIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAqLwotCi0gICAgLyogQ2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqLwotICAgIGlmIChweXRob25ob21lICE9IE5VTEwpIHsKLSAgICAgICAgY2hhciAqcDsKLSAgICAgICAgYnVmc3ogPSAxOwotICAgICAgICBmb3IgKHAgPSBQWVRIT05QQVRIOyAqcDsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gREVMSU0pCi0gICAgICAgICAgICAgICAgYnVmc3orKzsgLyogbnVtYmVyIG9mIERFTElNIHBsdXMgb25lICovCi0gICAgICAgIH0KLSAgICAgICAgYnVmc3ogKj0gc3RybGVuKHB5dGhvbmhvbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGJ1ZnN6ID0gMDsKLSAgICBidWZzeiArPSBzdHJsZW4oUFlUSE9OUEFUSCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0gICAgYnVmc3ogKz0gc3RybGVuKGFyZ3YwX3BhdGgpICsgMTsKLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChtYWNoaW5lcGF0aCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKG1hY2hpbmVwYXRoKSArIDE7Ci0gICAgaWYgKHVzZXJwYXRoKQotICAgICAgICBidWZzeiArPSBzdHJsZW4odXNlcnBhdGgpICsgMTsKLSNlbmRpZgotCi0gICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gbWFsbG9jKGJ1ZnN6KTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBpZiAoZW52cGF0aCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyAkUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gZW52cGF0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZW52aXJvbm1lbnQgJFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIGVudnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2lmZGVmIE1TX1dJTjMyCi0gICAgaWYgKG1hY2hpbmVwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIG1hY2hpbmVwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAodXNlcnBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgdXNlcnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgaW50IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gbW9kdWxlX3NlYXJjaF9wYXRoOwotfQotCi1jaGFyICoKLVB5X0dldFByZWZpeCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotY2hhciAqCi1QeV9HZXRFeGVjUHJlZml4KHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gZXhlY19wcmVmaXg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gcHJvZ3BhdGg7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZSBiL1BDL29zMnZhY3BwL21ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmYwYWRjLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTU0OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdmVyc2lvbiA0LjAgb2YgdGhlIE5NQUtFIHRvb2wgdGhhdCBjb21lcyB3aXRoIHRoYXQgcGFja2FnZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjIzLkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjIzLkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLiAgUmV2aWV3IHRoZSAvR2QrIGNvbXBpbGVyIG9wdGlvbiBmb3IKLSMgaG93IHRvIGRvIHRoaXMuCi0jCi0jIE5PVEU6IElCTSdzIE5NQUtFIDQuMCBpcyByYXRoZXIgZHVtYiwgcmVxdWlyaW5nIHRoaXMgbWFrZWZpbGUgdG8KLSMgICAgICAgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gbmVjZXNzYXJ5LiAgSSB1c2UgT3B1c01BS0UKLSMgICAgICAgbXlzZWxmIGZvciBhIG11Y2ggbW9yZSBwb3dlcmZ1bCBNQUtFIHRvb2wgYnV0IG5vdCBldmVyeW9uZQotIyAgICAgICB3aXNoZXMgdG8gYnV5IGl0LiAgSG93ZXZlciwgYXMgYSByZXN1bHQgSSBkaWRuJ3QgaG9vayBpbgotIyAgICAgICB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoZSBpbmNsdWRlIGZpbGVzIGFzIE5NQUtFIGhhcyBubyBlYXN5Ci0jICAgICAgIHdheSB0byBkbyB0aGlzIHdpdGhvdXQgZXhwbGljaXRseSBzcGVsbGluZyBpdCBhbGwgb3V0LgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjYtU2VwLTk4IGpyciBSZXRlc3RlZCBhbmQgYWRqdXN0ZWQgZm9yIGJ1aWxkaW5nIHcvUHl0aG9uIDEuNS4yYTEKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgRmlsZSB0byBDb2xsZWN0IFdvcmR5IENvbXBpbGVyIE91dHB1dCByZSBFcnJvcnMKLUVSUlMJCT0gbWFrZS5vdXQKLQotIyBXaGVyZSB0byBGaW5kIHRoZSBJQk0gVENQL0lQIFNvY2tldCBJbmNsdWRlcyBhbmQgTGlicmFyaWVzCi1PUzJUQ1BJUCAgICAgICAgPSBDOlxNUFROCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgVGNsL1RrIEJhc2UgRGlyZWN0b3J5IGZvciBMaWJzL0luY2x1ZGVzCi1UQ0xUSwkJPSBEOlxUY2xUawotVENMQkFTRQkJPSBEOlxUY2w3LjZcT1MyCi1US0JBU0UJCT0gRDpcVGs0LjJcT1MyCi0KLSMgV2hlcmUgdG8gUHV0IHRoZSAuT0JKIEZpbGVzLCBUbyBLZWVwIFRoZW0gT3V0IG9mIHRoZSBXYXkKLVBBVEhPQkoJCT0gb2JqCi0KLSMgU2VhcmNoIFBhdGggZm9yIEluY2x1ZGUgRmlsZXMKLVBST0pJTkNMVURFCT0gLjskKFRDTEJBU0UpOyQoVEtCQVNFKTskKE9TMlRDUElQKVxJbmNsdWRlOyQoUFlfSU5DTFVERVMpCi0KLSMgUGxhY2UgdG8gU2VhcmNoIGZvciBTb3VyY2VzIHJlIE9wdXNNQUtFIERlcGVuZGVuY3kgR2VuZXJhdG9yIChDb21tZXJjaWFsKQotTUtNRl9TUkNTCT0gJChQWV9NT0RVTEVTKVwqLmMgJChQWV9PQkpFQ1RTKVwqLmMgJChQWV9QQVJTRVIpXCouYyAkKFBZX1BZVEhPTilcKi5jCi0KLSMuSERSUEFUSC5jCTo9ICQoUFJPSklOQ0xVREUsOz0gKSAkKC5IRFJQQVRILmMpCi0jLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gc28zMmRsbC5saWIgdGNwMzJkbGwubGliICMgVGNsNzYubGliIFRrNDIubGliCi0KLSMjIyMjIyMjIyMjIyMjIyMjCi0jIEluZmVyZW5jZSBSdWxlcwotIyMjIyMjIyMjIyMjIyMjIyMKLXskKFBZX01PRFVMRVMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX09CSkVDVFMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX1BBUlNFUilcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQoteyQoUFlfUFlUSE9OKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi0uY3skKFBBVEhPQkopXH0ub2JqOgkJCSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQeXRob24gU3Vic3lzdGVtcwotIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFBZVEhPTiBpcyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi1QWVRIT04JCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDRXZhbC5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDb21waWxlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW4ub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRhcmdzLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb3B5cmlnaHQub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRNVGltZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRQbGF0Zm9ybS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRWZXJzaW9uLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnRETC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNb2RTdXBwb3J0Lm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVN0cnRvdWwub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeXRob25SdW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RNZW1iZXIub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaHJlYWQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUcmFjZUJhY2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW5NYWluLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxleGNlcHRpb25zLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxzeW10YWJsZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxjb2RlY3Mub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxmdXR1cmUub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxkeW5sb2FkX29zMi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxteXNucHJpbnRmLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxpdGVyb2JqZWN0Lm9iagotCi0jIFB5dGhvbidzIEludGVybmFsIFBhcnNlcgotUEFSU0VSCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxBY2NlbGVyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIxLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTGlzdE5vZGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxOb2RlLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBhcnNlci5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ldGFHcmFtbWFyLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVG9rZW5pemVyLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVJlYWRsaW5lLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEFic3RyYWN0Lm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQm9vbE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCdWZmZXJPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENlbGxPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDT2JqZWN0Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENvbXBsZXhPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRGVzY3JPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxEaWN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEVudW1PYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGbG9hdE9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZyYW1lT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJdGVyT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExpc3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNZXRob2RPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1vZHVsZU9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxPYk1hbGxvYy5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFJhbmdlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJpbmdPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cnVjdFNlcS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUeXBlT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFVuaWNvZGVPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVW5pY29kZUNUeXBlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxXZWFrcmVmT2JqZWN0Lm9iagotCi0jIEV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotTU9EVUxFUwkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQXJyYXlNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaW5Bc2NpaS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRXJybm9Nb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHQ01vZHVsZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0UGF0aFAub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYWluLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTUQ1Yy5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNRDVNb2R1bGUub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUENSRU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVBDUkUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUmVnZXhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxSZWdFeHByLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2lnbmFsTW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTb2NrZXRNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaW1lTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRocmVhZE1vZHVsZS5vYmoKLQotIyBTdGFuZGFsb25lIFBhcnNlciBHZW5lcmF0b3IgUHJvZ3JhbSAoU2hhcmVzIFNvbWUgb2YgUHl0aG9uJ3MgTW9kdWxlcykKLVBHRU4gICAgICAgICAgICA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBHZW5NYWluLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlTTlByaW50Zi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUb2tlbml6ZXJfUGdlbi5vYmogXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlyc3RTZXRzLm9iagotCi0jIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWFjcm9zIGFuZCBGbGFncwotIyMjIyMjIyMjIyMjIyMjIyMjCi1fQkFTRQkJPSAvUSAvVzIgL0kkKFBST0pJTkNMVURFKQotCQkjIC9RICAgPSBPbWl0IElCTSBDb3B5cmlnaHQKLQkJIyAvVzIgID0gU2hvdyBXYXJuaW5ncy9FcnJvcnMgT25seQotCi1fR0VOCQk9IC9HNCAvR20gL0dkLQotCQkjIC9HNCAgPSBHZW5lcmF0ZSBDb2RlIGZvciA0ODYgKFVzZSAzODYgZm9yIERlYnVnZ2VyKQotCQkjIC9HbSAgPSBVc2UgTXVsdGl0aHJlYWQgUnVudGltZQotCQkjIC9HZCAgPSBEeW5hbWljYWxseSBMb2FkIFJ1bnRpbWUKLQkJIyAvTXMgID0gVXNlIF9TeXN0ZW0gQ2FsbGluZyBDb252ZW50aW9uICh2cyBfT3B0bGluaykKLQkJIyAgICAgICAgKHRvIGFsbG93IG5vbi1WQUMrKyBjb2RlIHRvIGNhbGwgaW50byBQeXRob24yMy5kbGwpCi0KLV9PUFQJCT0gL08gL0dsCi0JCSMgL08gICA9IEVuYWJsZSBTcGVlZC1PcHRpbWl6YXRpb25zCi0JCSMgL09sICA9IFBhc3MgQ29kZSBUaHJ1IEludGVybWVkaWF0ZSBMaW5rZXIKLQkJIyAvR3UgID0gQWR2aXNlIExpbmtlciBBbGwgRXh0IERhdGEgaXMgSUQnZAotCQkjIC9HbCAgPSBIYXZlIExpbmtlciBSZW1vdmUgVW51c2VkIEZucwotCi1fREJHCQk9IC9XcHJvLSAvVGktIC9ESEFWRV9DT05GSUdfSCAvRFVTRV9TT0NLRVQKLSAgICAgICAgICAgICAgICAjIC9XcHJvPSBHZW5lcmF0ZSBDb21waWxlciBXYXJuaW5ncyByZSBNaXNzaW5nIFByb3RvdHlwZXMKLQkJIyAvVGkgID0gRW1iZWQgRGVidWdnZXIvQW5hbHl6ZXIgUmVjcwotCQkjIC9UbSAgPSBFbmFibGUgRGVidWcgTWVtb3J5IEZucwotCQkjIC9UeCAgPSBSZXF1ZXN0IEZ1bGwgRHVtcCBVcG9uIEV4Y2VwdGlvbgotCQkjIC9ESEFWRV9DT05GSUdfSCA9IENhdXNlcyBVc2Ugb2YgQ09ORklHLkggU2V0dGluZ3MKLSAgICAgICAgICAgICAgICAjIC9EVVNFX1NPQ0tFVCA9IEVuYWJsZXMgQnVpbGRpbmcgSW4gb2YgU29ja2V0IEFQSQotCi1fT1VUCQk9IAotCQkjIC9GYiAgPSBFbWJlZCBCcm93c2VyIFJlY3MKLQkJIyAvR2ggID0gR2VuZXJhdGUgQ29kZSBmb3IgUHJvZmlsZXIgSG9va3MKLQkJIyAvRmwgID0gT3V0cHV0IEMvQysrIExpc3RpbmcgRmlsZXMKLSAgICAgICAgICAgICAgICAjIC9MZiAgPSBQcm92aWRlIEZ1bGwgKERldGFpbGVkKSBMaXN0aW5nIEZpbGVzCi0JCSMgL0ZtLiA9IE91dHB1dCBMaW5rZXIgTWFwIEZpbGUKLQkJIyAvRnQuID0gT3V0cHV0IEMrKyBUZW1wbGF0ZSBSZXNvbHV0aW9uIEZpbGVzCi0KLV9NQVAJCT0gL0ZtTm9pc2VcJChAUikubWFwCi0KLV9ETEwJCT0gL0dlLQotX0VYRQkJPSAvR2UKLQkJIyAvR2UgPSBDcmVhdGUgYW4gRVhFLCBub3QgRExMCi0KLUNGTEFHUwkJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkgL1NzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHJpbWFyeSBUYXJnZXQocykKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLUFsbDogIG9iaiBub2lzZSBQeUNvcmUubGliIFB5dGhvbjIzLmxpYiBQR2VuLmV4ZSBcCi0gICAgICBQeXRob24uZXhlIFB5dGhvblBNLmV4ZSBQeXRob24yMy5kbGwgIyBfdGtpbnRlci5kbGwKLQotTW9kdWxlczogJChNT0RVTEVTKQotT2JqZWN0czogJChPQkpFQ1RTKQotUGFyc2VyOiAgJChQQVJTRVIpCi1QeXRob246ICAkKFBZVEhPTikKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuT0JKIEZpbGVzIE91dCBvZiB0aGUgV2F5Ci1vYmo6Ci0JQC1ta2RpciBvYmogPj5OVUwKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuTUFQIGFuZCBTdWNoIFRleHQgRmlsZXMgT3V0IG9mIHRoZSBXYXkKLW5vaXNlOgotCUAtbWtkaXIgbm9pc2UgPj5OVUwKLQotIyMjIyMjIyMjIyMjIyMKLSMKLSMjIyMjIyMjIyMjIyMjCi0KLSMgUHl0aG9uIEV4dGVuc2lvbiBETEw6IFRjbC9UayBJbnRlcmZhY2UKLSNfdGtpbnRlci5kbGw6ICQoUEFUSE9CSilcX3RraW50ZXIub2JqIFB5dGhvbjIzLmxpYiBfdGtpbnRlci5kZWYKLSMJQCBFY2hvIExpbmtpbmcgJEAgQXMgRExMCi0jCUAgJChDQykgJChDRkxBR1MpIC9CIi9OT0UiICQoX0RMTCkgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jJChQQVRIT0JKKVxfdGtpbnRlci5vYmo6ICQoUFlfTU9EVUxFUylcX3RraW50ZXIuYwotIwlAIEVjaG8gQ29tcGlsaW5nICQqKgotIwlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAkKF9ETEwpIC1GbyRAICQqKiA+PiQoRVJSUykKLQotIyBPYmplY3QgTGlicmFyeSBvZiBBbGwgRXNzZW50aWFsIFB5dGhvbiBSb3V0aW5lcwotUHlDb3JlLmxpYjogJChNT0RVTEVTKSAkKE9CSkVDVFMpICQoUEFSU0VSKSAkKFBZVEhPTikgJChQQVRIT0JKKVxDb25maWcub2JqCi0JQCBFY2hvIEFkZGluZyBVcGRhdGVkIE9iamVjdCBGaWxlcyB0byBMaW5rIExpYnJhcnkgJEAKLQlAICEgSUxJQiAkQCAvTk9MT0dPIC9OT0JBQ0tVUCAtKyQ/IDsgPj4kKEVSUlMpCi0KLVB5dGhvbjIzLmRsbDogJChQQVRIT0JKKVxDb21waWxlLm9iaiBQeUNvcmUubGliIFB5dGhvbi5kZWYKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBETEwKLQlAICQoQ0MpICQoQ0ZMQUdTKSAvQiIvTk9FIiAkKF9ETEwpIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLSMJQCBFY2hvIENvbXByZXNzaW5nICRAIHdpdGggTHhMaXRlCi0jCUAgbHhsaXRlICRACi0KLSMgSUJNIExpbmtlciBSZXF1aXJlcyBPbmUgRXhwbGljaXQgLk9CSiBUbyBCdWlsZCBhIC5ETEwgZnJvbSBhIC5MSUIKLSQoUEFUSE9CSilcQ29tcGlsZS5vYmo6ICQoUFlfUFlUSE9OKVxDb21waWxlLmMKLQlAIEVjaG8gQ29tcGlsaW5nICQqKgotCUAgJChDQykgLWMgJChDRkxBR1MpICQoX0RMTCkgLUZvJEAgJCoqID4+JChFUlJTKQotCi0jIEltcG9ydCBMaWJyYXJ5IGZvciBVc2luZyB0aGUgUHl0aG9uMjMuZGxsCi1QeXRob24yMy5saWI6IFB5dGhvbi5kZWYKLQlAIEVjaG8gTWFraW5nICRACi0JQCBJTVBMSUIgL05PTE9HTyAvTk9JR05PUkUgJEAgJCoqID4+JChFUlJTKQotCUAgSUxJQiAvTk9MT0dPIC9DT05WRk9STUFUIC9OT0VYVERJQ1RJT05BUlkgL05PQlJPV1NFIC9OT0JBQ0tVUCAkQDsgPj4kKEVSUlMpCi0KLSMgU21hbGwgQ29tbWFuZC1MaW5lIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMjMuZGxsCi1QeXRob24uZXhlOiAkKFBBVEhPQkopXFB5dGhvbi5vYmogUHl0aG9uMjMubGliCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRVhFCi0JQCAkKENDKSAkKENGTEFHUykgJChfRVhFKSAvQiIvUE06VklPIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyBTbWFsbCBQTS1HVUkgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24yMy5kbGwKLVB5dGhvblBNLmV4ZTogJChQQVRIT0JKKVxQeXRob24ub2JqIFB5dGhvbjIzLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1BNOlBNIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotUEdlbi5leGU6ICQoUEdFTikgUHlDb3JlLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1NUQUNLOjM2MDAwMCIgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBNaXNjZWxsYW5lb3VzIFRhcmdldHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUmVtb3ZlIEludGVybWVkaWF0ZSBUYXJnZXRzIGJ1dCBMZWF2ZSBFeGVjdXRhYmxlIEJpbmFyaWVzCi1jbGVhbjoKLQktLSBEZWwgL1EgJChQQVRIT0JKKVwqLm9iagkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RIC9ZIE5vaXNlCQkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RICQoRVJSUykJCQk+TlVMIDI+JjEKLQotIyBSZW1vdmUgQWxsIFRhcmdldHMsIEluY2x1ZGluZyBGaW5hbCBCaW5hcmllcwotZGlzdGNsZWFuOiBjbGVhbgotICAgICAgICAtLSBEZWwgL1EgUHlDb3JlLmxpYiBQeXRob24yMy5saWIgICAgICAgPk5VTCAyPiYxCi0gICAgICAgIC0tIERlbCAvUSBQeXRob24yMy5kbGwgUHl0aG9uLmV4ZSBQR2VuLmV4ZSA+TlVMIDI+JjEKLQotcmVsZWFzZTogUHl0aG9uLmV4ZSBQeXRob24yMy5kbGwgUHl0aG9uMjMubGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgUHl0aG9uLmV4ZSAgIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSBQeXRob24yMy5kbGwgRDpcRExMcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIFB5dGhvbjIzLmxpYiBFOlxUYXVcTGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgX3RraW50ZXIuZGxsIEQ6XFB5dGhvbgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hcnJheW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hdWRpb29wLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNtYXRobW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNyeXB0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWN1cnNlc21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZGJtbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJybm9tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmNudGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNcaW9jdGwuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcGVjdGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnBldGVzdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZ2RibW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxvc2RlZnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ3JwbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxncnAuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotaW1hZ2VvcC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1wem1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdpbnRyZXByLmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbmlzbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vcGVyYXRvci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCBcCi0JICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1pbml0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wb3NpeC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXBvc2l4bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChPUzJUQ1BJUClcSW5jbHVkZVxwd2QuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcmVhZGxpbmUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zZWxlY3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxteXNlbGVjdC5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2lnbmFsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNvY2tldG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXG5ldGluZXRcaW4uaCBcCi0JICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHNvY2tldC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChPUzJUQ1BJUClcSW5jbHVkZVxuZXRkYi5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cnVjdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c2xvZ21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzbG9nLmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLV90aHJlYWRtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdGhyZWFkLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQoteHhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWFic3RyYWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jbGFzc29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvbXBsZXhvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1kaWN0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1maWxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmxvYXRvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmcmFtZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvcGNvZGUuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnVuY29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxpc3RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxvbmdvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHVsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR1cGxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR5cGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hY2NlbGVyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9QQVJTRVIpXHBhcnNlci5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1iaXRzZXQub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLWZpcnN0c2V0cy5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWludHJjaGVjay5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLW1ldGFncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLW15cmVhZGxpbmUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwYXJzZXIuaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotcGFyc2V0b2sub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGFyc2VyLmggJChQWV9JTkNMVURFKVxwYXJzZXRvay5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1wZ2VuLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwYXJzZXRvay5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXRva2VuaXplci5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1hdG9mLm9iajogcHljb25maWcuaAotCi1ibHRpbm1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY2V2YWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnJhbWVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3Bjb2RlLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtaW5pdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9wY29kZS5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJvcnMub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmgKLQotZnJvemVuLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRhcmdzLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb21waWxlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb3B5cmlnaHQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0cGxhdGZvcm0ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0dmVyc2lvbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccGF0Y2hsZXZlbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1ncmFtaW5pdC5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1pbXBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1pbXBvcnRkbC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1hcnNoYWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHN1cHBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW15c3RydG91bC5vYmo6IHB5Y29uZmlnLmgKLQotcHlmcGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlccHlmcGUuaAotCi1weXN0YXRlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1weXRob25ydW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxiaXRzZXQuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCBcCi0JICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNpZ2NoZWNrLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1zdHJ0b2Qub2JqOiBweWNvbmZpZy5oCi0KLXN0cnVjdG1lbWJlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlcb3NkZWZzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVx0aHJlYWQuaAotCi10cmFjZWJhY2sub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZyYW1lb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTJjOTYuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCisrKyAvZGV2L251bGwKQEAgLTEsMTA0NyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdGhlIGNvbW1lcmNpYWwgT3B1c01BS0UgdG9vbC4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjE1LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjE1LkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgSUJNIFRDUC9JUCBTb2NrZXQgSW5jbHVkZXMgYW5kIExpYnJhcmllcwotT1MyVENQSVAgICAgICAgID0gQzpcTVBUTgotCi0jIFdoZXJlIHRvIFB1dCB0aGUgLk9CSiBGaWxlcywgVG8gS2VlcCBUaGVtIE91dCBvZiB0aGUgV2F5Ci0uUEFUSC5vYmoJPSBvYmoKLQotIyBTZWFyY2ggUGF0aCBmb3IgSW5jbHVkZSBGaWxlcwotUFJPSklOQ0xVREUJPSAuOyQoT1MyVENQSVApXEluY2x1ZGU7JChQWV9JTkNMVURFUykKLQotIyBQbGFjZSB0byBTZWFyY2ggZm9yIFNvdXJjZXMgcmUgT3B1c01BS0UgRGVwZW5kZW5jeSBHZW5lcmF0b3IgKENvbW1lcmNpYWwpCi1NS01GX1NSQ1MJPSAkKFBZX01PRFVMRVMpXCouYyAkKFBZX09CSkVDVFMpXCouYyAkKFBZX1BBUlNFUilcKi5jICQoUFlfUFlUSE9OKVwqLmMKLQotLkhEUlBBVEguYwk6PSAkKFBST0pJTkNMVURFLDs9ICkgJCguSERSUEFUSC5jKQotLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gJChPUzJUQ1BJUClcbGliXHNvMzJkbGwubGliICQoT1MyVENQSVApXGxpYlx0Y3AzMmRsbC5saWIKLQotIyMjIyMjIyMjIyMjIyMjIyMKLSMgSW5mZXJlbmNlIFJ1bGVzCi0jIyMjIyMjIyMjIyMjIyMjIwotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHl0aG9uIFN1YnN5c3RlbXMKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBQWVRIT04gaXMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotUFlUSE9OCQk9ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgQ0V2YWwub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENvbXBpbGUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRnJvemVuLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldGFyZ3Mub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgR2V0Q29weXJpZ2h0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldE1UaW1lLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0UGxhdGZvcm0ub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldFZlcnNpb24ub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgSW1wb3J0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEltcG9ydERMLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgTW9kU3VwcG9ydC5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE15U3RydG91bC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUHl0aG9uUnVuLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1lbWJlci5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVGhyZWFkLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRyYWNlQmFjay5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBGcm96ZW5NYWluLm9iagotCi0jIE9taXR0ZWQgUHl0aG9uIEVsZW1lbnRzIChhbmQgUmVhc29uKToKLSAgIyBhdG9mLmMgICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGR1cDIuYyAgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgZm1vZC5jICAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBnZXRjd2QuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGh5cG90LmMgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgbWVtbW92ZS5jICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBzdHJkdXAuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIHN0cmVycm9yLmMgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgc3RydG9kLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLQotICAjIHNpZ2NoZWNrLmMgICAgICAtLSBQcmltaXRpdmUgU2lnbmFsIENhdGNoZXIgKFNpZ25hbE1vZHVsZS5jIFVzZWQgSW5zdGVhZCkKLSAgIyBweWZwZS5jICAgICAgICAgLS0gUHJpbWl0aXZlIEZQRSBDYXRjaGVyIChOb3QgUmVmZXJlbmNlZCBieSBBbnlvbmUpCi0gICMgZnJvemVubWFpbi5jCi0KLSMgUHl0aG9uJ3MgSW50ZXJuYWwgUGFyc2VyCi1QQVJTRVIJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWNjZWxlci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbW1hcjEub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgTXlSZWFkbGluZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTm9kZS5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VyLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVG9rZW5pemVyLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWJzdHJhY3Qub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgQ09iamVjdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgQ29tcGxleE9iamVjdC5vYmogXAotICAgICAgICAgICAgICAgICAgRGljdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmxvYXRPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnJhbWVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTGlzdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTWV0aG9kT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgTW9kdWxlT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUmFuZ2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU3RyaW5nT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgVHlwZU9iamVjdC5vYmoKLQotIyBPbWl0dGVkIE9iamVjdHMgKGFuZCBSZWFzb24pOgotICAjIHh4b2JqZWN0LmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gT2JqZWN0IFR5cGVzCi0KLSMgRXh0ZW5zaW9uIE1vZHVsZXMgKEJ1aWx0LUluIG9yIGFzIFNlcGFyYXRlIERMTHMpCi1NT0RVTEVTCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFycmF5TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEJpbkFzY2lpLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEVycm5vTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgIEdldFBhdGhQLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1haW4ub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENWMub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENU1vZHVsZS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ2V4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ0V4cHIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFJlb3BNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNpZ25hbE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvY2tldE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvdW5kRXgub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFRpbWVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFRocmVhZE1vZHVsZS5vYmoKLQotIyBPbWl0dGVkIE1vZHVsZXMgKGFuZCBEZXNjcmlwdGlvbi9SZWFzb24pOgotICAjCi0gICMgTXVsdGltZWRpYToKLSAgIyBhdWRpb29wLmMgICAgICAgLS0gVmFyaW91cyBDb21wdXRlIE9wZXJhdGlvbnMgb24gQXVkaW8gU2FtcGxlcwotCi0gICMgRGF0YWJhc2U6Ci0gICMgX2RibW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR2VuZXJpYyBGbGF2b3IpCi0gICMgX2dkYm1tb2R1bGUuYyAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR05VIEZsYXZvcikKLQotICAjIENyeXB0b2dyYXBoeToKLSAgIyBjcnlwdG1vZHVsZS5jICAgLS0gU2ltcGxlIFdyYXBwZXIgZm9yIGNyeXB0KCkgRnVuY3Rpb24KLQotIyAgICAgICAgICAgICAgICAgIGZjbnRsbW9kdWxlLm9iaiAgIFwKLSMgICAgICAgICAgICAgICAgICBmcGVjdGxtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgZnBldGVzdG1vZHVsZS5vYmogXAotIyBVbml4LVNwZWNpZmljICAgIGdldHBhdGgub2JqICAgICAgIFwKLSMgICAgICAgICAgICAgICAgICBncnBtb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgbXB6bW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIG5pc21vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICBwYXJzZXJtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgcHdkbW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHJlYWRsaW5lLm9iaiAgICAgIFwKLSMgICAgICAgICAgICAgICAgICByZXNvdXJjZS5vYmogICAgICBcCi0jICAgICAgICAgICAgICAgICAgc3lzbG9nbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHRlcm1pb3Mub2JqICAgICAgIFwKLQotICAjIFVzZXIgSW50ZXJmYWNlOgotIyAgICAgICAgICAgICAgICAgIF90a2ludGVyLm9iaiAgICAgIFwgICAgIAotIyAgICAgICAgICAgICAgICAgIHN0ZHdpbm1vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICBjdXJzZXNtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgdGNsTm90aWZ5Lm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHRrYXBwaW5pdC5vYmogICAgIFwKLSAgIyBmbG1vZHVsZS5jICAgICAgLS0gV3JhcHBlciBvZiBGT1JNUyBMaWJyYXJ5IChTY3JlZW4gRm9ybXMpCi0KLSAgIyB6bGlibW9kdWxlLmMgICAgLS0gV3JhcHBlciBvZiBaTGliIENvbXByZXNzaW9uIEFQSSAoR1ppcCBGb3JtYXQpCi0gICMgcHVyZW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgUHVyaWZ5IERlYnVnZ2luZyBBUEkgKFByb2JhYmx5IE5vbi1PUy8yKQotICAjIHh4bW9kdWxlLmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gTW9kdWxlCi0KLSMKLSMgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi1QR0VOICAgICAgICAgICAgPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuTWFpbi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICBMaXN0Tm9kZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtbWFyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBGaXJzdFNldHMub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBNZXRhR3JhbW1hci5vYmoKLQotIyBPbWl0dGVkIFBhcnNlciBFbGVtZW50cyAoYW5kIFJlYXNvbik6Ci0gICMgaW50cmNoZWNrLmMgICAgIC0tIE5vdCBSZWZlcmVuY2VkIGJ5IEFueW9uZSAoPykKLQotIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1hY3JvcyBhbmQgRmxhZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIwotX0JBU0UJCT0gL1EgL1cyIC9JJChQUk9KSU5DTFVERSkKLQkJIyAvUSAgID0gT21pdCBJQk0gQ29weXJpZ2h0Ci0JCSMgL1cyICA9IFNob3cgV2FybmluZ3MvRXJyb3JzIE9ubHkKLQkJIyAvRmkgID0gQ3JlYXRlIFByZWNvbXBpbGVkIEhlYWRlcnMKLQkJIyAvU2kgID0gVXRpbGl6ZSBQcmVjb21waWxlZCBIZWFkZXJzCi0KLV9HRU4JCT0gL0c0IC9HbSAvR2QgL0IiL1NUQUNLOjM2MDAwMCIKLQkJIyAvRzQgID0gR2VuZXJhdGUgQ29kZSBmb3IgNDg2IChVc2UgMzg2IGZvciBEZWJ1Z2dlcikKLQkJIyAvR20gID0gVXNlIE11bHRpdGhyZWFkIFJ1bnRpbWUKLQkJIyAvR2QgID0gRHluYW1pY2FsbHkgTG9hZCBSdW50aW1lCi0JCSMgL0dzICA9IFJlbW92ZSBDb2RlIGZvciBTdGFjayBQcm9iZXMKLQkJIyAvR3ggID0gUmVtb3ZlIEMrKyBFeGNlcHRpb24tSGFuZGxpbmcgSW5mbwotCQkjIC9UZHAgPSBHZW5lcmF0ZSBDb2RlIGZvciBDKysgVGVtcGxhdGVzCi0JCSMgL1JuICA9IEdlbmVyYXRlIENvZGUgd2l0aG91dCBhIFJ1bnRpbWUKLQkJIyAvQiIvU1RBQ0s6biIgPSBTZXQgU3RhY2sgU2l6ZQotCi1fT1BUCQk9IC9PIC9HbAotCQkjIC9PICAgPSBFbmFibGUgU3BlZWQtT3B0aW1pemF0aW9ucwotCQkjIC9PbCAgPSBQYXNzIENvZGUgVGhydSBJbnRlcm1lZGlhdGUgTGlua2VyCi0JCSMgL0d1ICA9IEFkdmlzZSBMaW5rZXIgQWxsIEV4dCBEYXRhIGlzIElEJ2QKLQkJIyAvR2wgID0gSGF2ZSBMaW5rZXIgUmVtb3ZlIFVudXNlZCBGbnMKLQotX0RCRwkJPSAvREhBVkVfQ09ORklHX0ggL0RVU0VfU09DS0VUCi0JCSMgL1RpICA9IEVtYmVkIERlYnVnZ2VyL0FuYWx5emVyIFJlY3MKLQkJIyAvVG0gID0gRW5hYmxlIERlYnVnIE1lbW9yeSBGbnMKLQkJIyAvVHggID0gUmVxdWVzdCBGdWxsIER1bXAgVXBvbiBFeGNlcHRpb24KLQkJIyAvRERFQlVHID0gRW5hYmxlIEFwcC1JbnRlcm5hbCBEZWJ1Z2dpbmcgQ29kZQotICAgICAgICAgICAgICAgICMgL0RVU0VfU09DS0VUID0gCi0gICAgICAgICAgICAgICAgIyAvRFVTRV9ETF9FWFBPUlQgPSAKLQotX09VVAkJPSAKLQkJIyAvRmIgID0gRW1iZWQgQnJvd3NlciBSZWNzCi0JCSMgL0doICA9IEdlbmVyYXRlIENvZGUgZm9yIFByb2ZpbGVyIEhvb2tzCi0JCSMgL0ZsICA9IE91dHB1dCBDL0MrKyBMaXN0aW5nIEZpbGVzCi0gICAgICAgICAgICAgICAgIyAvTGYgID0gUHJvdmlkZSBGdWxsIChEZXRhaWxlZCkgTGlzdGluZyBGaWxlcwotCQkjIC9GbS4gPSBPdXRwdXQgTGlua2VyIE1hcCBGaWxlCi0JCSMgL0Z0LiA9IE91dHB1dCBDKysgVGVtcGxhdGUgUmVzb2x1dGlvbiBGaWxlcwotCi1fTUFQCQk9IC9GbU5vaXNlXCQoLlRBUkdFVCxCLD4ubWFwKQotCi1fRExMCQk9IC9HZS0KLV9FWEUJCT0gL0dlCi0JCSMgL0dlID0gQ3JlYXRlIGFuIEVYRSwgbm90IERMTAotCi1DRkxBR1MJCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpIC9TcwotQ1BQRkxBR1MJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQcmltYXJ5IFRhcmdldChzKQotIyMjIyMjIyMjIyMjIyMjIyMjIwotQWxsOiAgb2JqIG5vaXNlIFB5Q29yZS5saWIgUHl0aG9uMTUubGliIFB5dGhvbjE1LmRsbCBQeXRob24uZXhlIFBHZW4uZXhlCi0KLSMjIyMjIyMjIyMjIyMjCi0jCi0jIyMjIyMjIyMjIyMjIwotCi0jIE9iamVjdCBMaWJyYXJ5IG9mIEFsbCBFc3NlbnRpYWwgUHl0aG9uIFJvdXRpbmVzCi1QeUNvcmUubGliOiAkKE1PRFVMRVMpICQoT0JKRUNUUykgJChQQVJTRVIpICQoUFlUSE9OKSBDb25maWcub2JqCi0gICAgICAgICVkbyAiJS5saWIiCi0KLVB5dGhvbjE1LmRsbDogQ29tcGlsZS5vYmogUHlDb3JlLmxpYiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiJS5kbGwiIENQUEZMQUdTKz0vQiIvTk9FIiBDUFBGTEFHUys9JChfTUFQKQotCi1Db21waWxlLm9iajogQ29tcGlsZS5jCi0gICAgICAgICVkbyAiLmMub2JqIiBDRkxBR1MrPSQoX0RMTCkKLQotIyBJbXBvcnQgTGlicmFyeSBmb3IgVXNpbmcgdGhlIFB5dGhvbjE1LmRsbAotUHl0aG9uMTUubGliOiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiLmRlZi5saWIiCi0KLSMgU21hbGwgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24xNS5kbGwKLVB5dGhvbi5leGU6IFB5dGhvbi5vYmogUHl0aG9uMTUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSNQeXRob24ub2JqOiBQeXRob24uYwotIyAgICAgICAgJWRvICIuYy5vYmoiIENGTEFHUys9JChfRVhFKQotCi1QR2VuLmV4ZTogJChQR0VOKSBQeUNvcmUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1pc2NlbGxhbmVvdXMgVGFyZ2V0cwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBSZW1vdmUgSW50ZXJtZWRpYXRlIFRhcmdldHMgYnV0IExlYXZlIEV4ZWN1dGFibGUgQmluYXJpZXMKLWNsZWFuOgotCS0tIERlbCAvUSAkKC5QQVRILm9iailcKi5vYmoJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAvWSBOb2lzZQkJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAkKEVSUlMpCQkJPk5VTCAyPiYxCi0KLSMgUmVtb3ZlIEFsbCBUYXJnZXRzLCBJbmNsdWRpbmcgRmluYWwgQmluYXJpZXMKLWRpc3RjbGVhbjogY2xlYW4KLSAgICAgICAgLS0gRGVsIC9RIFB5Q29yZS5saWIgUHl0aG9uMTUubGliICAgICAgID5OVUwgMj4mMQotICAgICAgICAtLSBEZWwgL1EgUHl0aG9uMTUuZGxsIFB5dGhvbi5leGUgICAgICAgPk5VTCAyPiYxCi0KLXJlbGVhc2U6IFB5dGhvbi5leGUgUHl0aG9uMTUuZGxsIFB5dGhvbjE1LmxpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VICQoLlNPVVJDRVMsTSIqLmV4ZSIpIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSAkKC5TT1VSQ0VTLE0iKi5kbGwiKSBEOlxETExzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgJCguU09VUkNFUyxNIioubGliIikgRTpcVGF1XExpYgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFycmF5bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWF1ZGlvb3Aub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY21hdGhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jcnlwdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jdXJzZXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2RibW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJub21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mY250bG1vZHVsZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXHN5c1xpb2N0bC5oIGNldmFsLmggXAotCSBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggXAotCSBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnBlY3RsbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZwZXRlc3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2dkYm1tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdycG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBncnAuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1pbWFnZW9wLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1haW4ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tcHptb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1uaXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxzeXNcdGltZS5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBcCi0JIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb3BlcmF0b3Iub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXgub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHdkLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlYWRsaW5lLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcc3lzXHRpbWUuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggXAotCSBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNlbGVjdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbXlzZWxlY3QuaCBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNpZ25hbG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zb2NrZXRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxuZXRpbmV0XGluLmggXAotCSBjOlxtcHRuXGluY2x1ZGVcc3lzXHNvY2tldC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG15dGltZS5oIG5ldGRiLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIFwKLQkgcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJ1Y3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3lzbG9nbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNsb2cuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX3RocmVhZG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdGhyZWFkLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYWJzdHJhY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY2xhc3NvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jb21wbGV4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWRpY3RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmlsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mbG9hdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmcmFtZW9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9wY29kZS5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZ1bmNvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotbGlzdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1sb25nb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tb2R1bGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10dXBsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10eXBlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFjY2VsZXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggXAotCSBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWJpdHNldC5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotZmlyc3RzZXRzLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWdyYW1tYXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotaW50cmNoZWNrLm9iajogcHljb25maWcuaCBpbnRyY2hlY2suaCBteW1hbGxvYy5oIG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIFwKLQkgdG9rZW4uaAotCi1tZXRhZ3JhbW1hci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG1ldGFncmFtbWFyLmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotbXlyZWFkbGluZS5vYmo6IHB5Y29uZmlnLmggaW50cmNoZWNrLmggbXltYWxsb2MuaCBteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZXJyY29kZS5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG5vZGUuaCBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBhcnNldG9rLm9iajogYml0c2V0LmggcHljb25maWcuaCBlcnJjb2RlLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIHBhcnNlci5oIHBhcnNldG9rLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaCBcCi0JIHRva2VuaXplci5oCi0KLXBnZW4ub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBtZXRhZ3JhbW1hci5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbm9kZS5oIHBnZW4uaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIFwKLQkgcGFyc2V0b2suaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi10b2tlbml6ZXIub2JqOiBweWNvbmZpZy5oIGVycmNvZGUuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBwZ2VuaGVhZGVycy5oIFwKLQkgcHlkZWJ1Zy5oIHRva2VuLmggdG9rZW5pemVyLmgKLQotYXRvZi5vYmo6IHB5Y29uZmlnLmgKLQotYmx0aW5tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGV2YWwuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIFwKLQkgb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jZXZhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXZhbC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnJhbWVvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvcGNvZGUuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgb3Bjb2RlLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJyb3JzLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oIG15bWF0aC5oCi0KLWZyb3plbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGFyZ3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29tcGlsZXIub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29weXJpZ2h0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHBsYXRmb3JtLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHZlcnNpb24ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBwYXRjaGxldmVsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdyYW1pbml0Lm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggbXltYXRoLmggbXlwcm90by5oCi0KLWltcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXJyY29kZS5oIGV2YWwuaCBcCi0JIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbXBvcnRkbC5oIFwKLQkgaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtYXJzaGFsLmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWltcG9ydGRsLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGltcG9ydGRsLmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWFyc2hhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbW9kc3VwcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1teXN0cnRvdWwub2JqOiBweWNvbmZpZy5oCi0KLXB5ZnBlLm9iajogcHljb25maWcuaCBweWZwZS5oCi0KLXB5c3RhdGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHl0aG9ucnVuLm9iajogYWJzdHJhY3QuaCBiaXRzZXQuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGlsZS5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBlcnJjb2RlLmggZXZhbC5oIFwKLQkgZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGdyYW1tYXIuaCBpbXBvcnQuaCBcCi0JIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBwYXJzZXRvay5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zaWdjaGVjay5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oCi0KLXN0cnRvZC5vYmo6IHB5Y29uZmlnLmgKLQotc3RydWN0bWVtYmVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotc3lzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggdGhyZWFkLmgKLQotdHJhY2ViYWNrLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZyYW1lb2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmggYi9QQy9vczJ2YWNwcC9weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY1YjQ0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotI2lmbmRlZiBQeV9DT05GSUdfSAotI2RlZmluZSBQeV9DT05GSUdfSAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHljb25maWcuaC4gIE5PVCBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuCi0gKgotICogVGhpcyBpcyBhIG1hbnVhbGx5IG1haW50YWluZWQgdmVyc2lvbiB1c2VkIGZvciB0aGUgSUJNIFZpc3VhbEFnZQotICogQy9DKysgY29tcGlsZXIgb24gdGhlIE9TLzIgcGxhdGZvcm0uICBJdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YKLSAqIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgotICoKLSAqIEZJTEVTWVNURU0gREVGSU5FUzoKLSAqIFRoZSBjb2RlIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB3YXkgb2YgbmFtaW5nIGZpbGVzIGFuZAotICogZGlyZWN0b3J5IHBhdGhzIHNob3VsZCBiZSB3cmFwcGVkIGFyb3VuZCBvbmUgb2YgdGhlIGZvbGxvd2luZwotICogI2RlZmluZXM6Ci0gKgotICogICAgIERPU0ZJTEVTWVMgICBQQ0RPUy1TdHlsZSAoZm9yIFBDRE9TLCBXaW5kb3dzIGFuZCBPUy8yKQotICogICAgIE1BQ0ZJTEVTWVMgICBNYWNpbnRvc2gtU3R5bGUKLSAqICAgICBVTklYRklMRVNZUyAgVW5peC1TdHlsZQotICogICAgIEFNSUdBRklMRVNZUyBBbWlnYURPUy1TdHlsZQotICogCi0gKiBCZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcyBpbgotICogdXNlIG9uIHRoZSBJbnRlbCBwbGF0Zm9ybSwgbmVpdGhlciB0aGUgY29tcGlsZXIgbmFtZSBub3IKLSAqIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgaXMgc3VmZmljaWVudC4KLSAqCi0gKiBPUy8yIERFRklORVM6Ci0gKiBUaGUgY29kZSBzcGVjaWZpYyB0byBPUy8yJ3MgUHJvZ3JhbSBBUEkgc2hvdWxkIGJlIHdyYXBwZWQgYXJvdW5kCi0gKgotICogX19UT1NfT1MyX18gICBUYXJnZXQgT3BlcmF0aW5nIFN5c3RlbSwgT1MvMgotICoKLSAqIEFueSBjb2RlIHNwZWNpZmljIHRvIHRoZSBjb21waWxlciBpdHNlbGYgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aAotICoKLSAqIF9fSUJNQ19fICAgICAgSUJNIEMgQ29tcGlsZXIKLSAqIF9fSUJNQ1BQX18gICAgSUJNIEMrKyBDb21waWxlcgotICoKLSAqIE5vdGUgdGhhdCBzaW5jZSB0aGUgVmlzdWFsQWdlIEMvQysrIGNvbXBpbGVyIGlzIGFsc28gYXZhaWxhYmxlCi0gKiBmb3IgdGhlIFdpbmRvd3MgcGxhdGZvcm0sIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIGJvdGggYQotICogX19UT1NfT1MyX18gYW5kIGEgX19JQk1DX18gdG8gc2VsZWN0IGEgdmVyeSBzcGVjaWZpYyBlbnZpcm9ubWVudC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvbWUgc3lzdGVtcyByZXF1aXJlIHNwZWNpYWwgZGVjbGFyYXRpb25zIGZvciBkYXRhIGl0ZW1zIGltcG9ydGVkCi0gKiBvciBleHBvcnRlZCBmcm9tIGR5bmFtaWMgbGluayBsaWJyYXJpZXMuICBOb3RlIHRoYXQgdGhlIGRlZmluaXRpb24KLSAqIG9mIERMX0lNUE9SVCBjb3ZlcnMgYm90aCBjYXNlcy4gIERlZmluZSBVU0VfRExfSU1QT1JUIGZvciB0aGUgY2xpZW50Ci0gKiBvZiBhIERMTC4gIERlZmluZSBVU0VfRExfRVhQT1JUIHdoZW4gbWFraW5nIGEgRExMLgotICovCi0KLSNpbmNsdWRlIDxpby5oPgotCi0vKiBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEZpbmRpbmcgTW9kdWxlcyAqLwotI2RlZmluZSBQUkVGSVggICAgICAgICAgICAgICAgICIiCi0jZGVmaW5lIEVYRUNfUFJFRklYICAgICAgICAgICAgIiIKLQotLyogUHJvdmlkZSBhIGRlZmF1bHQgbGlicmFyeSBzbyB3cml0ZXJzIG9mIGV4dGVuc2lvbiBtb2R1bGVzCi0gKiB3b24ndCBoYXZlIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdCBhbnltb3JlCi0gKi8KLSNwcmFnbWEgbGlicmFyeSgiUHl0aG9uMjQubGliIikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgIDMyLUJpdCBJQk0gVmlzdWFsQWdlIEMvQysrIHYzLjAgZm9yIE9TLzIgICAgICovCi0vKiAgKENvbnZlcnQgQ29tcGlsZXIgRmxhZ3MgaW50byBVc2VmdWwgU3dpdGNoZXMpICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUExBVEZPUk0gICAgIm9zMiIKLSNkZWZpbmUgQ09NUElMRVIgICAgIltWaXN1YWxBZ2UgQy9DKytdIgotI2RlZmluZSBQWU9TX09TMiAgICAvKiBEZWZpbmUgSW5kaWNhdG9yIG9mIE9wZXJhdGluZyBTeXN0ZW0gKi8KLSNkZWZpbmUgUFlDQ19WQUNQUCAgLyogRGVmaW5lIEluZGljYXRvciBvZiBDIENvbXBpbGVyICovCi0KLSAgLyogUGxhdGZvcm0gRmlsZXN5c3RlbSAqLwotI2RlZmluZSBQWVRIT05QQVRIICAiLjsuXFxsaWI7LlxcbGliXFxwbGF0LXdpbiIKLSNkZWZpbmUgRE9TRklMRVNZUyAgLyogT1MvMiBVc2VzIHRoZSBET1MgRmlsZSBOYW1pbmcgQ29udmVudGlvbnMgKi8KLS8qICNkZWZpbmUgSU1QT1JUXzh4M19OQU1FUyAobGV0J3MgbW92ZSB1cCB0byBsb25nIGZpbGVuYW1lcykgKi8KLQotICAvKiBQbGF0Zm9ybSBDUFUtTW9kZSBEZXBlbmRlbmNpZXMgKi8KLSNkZWZpbmUgV09SRF9CSVQgICAgICAgICAgICAgICAgMzIgLyogT1MvMiBpcyBhIDMyLUJpdCBPcGVyYXRpbmcgU3lzdGVtICovCi0jZGVmaW5lIExPTkdfQklUICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIFNJWkVPRl9JTlQgICAgICAgICAgICAgICA0IC8qIENvdW50IG9mIEJ5dGVzIGluIGFuIChpbnQpICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0laRU9GX0xPTkcgICAgICAgICAgICAgIDQgLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZykgICAgICAgICAgICAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgICAgNCAvKiBDb3VudCBvZiBCeXRlcyBpbiBhICh2b2lkICopICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTE9OR19MT05HICAgICAxICovIC8qIFZBQysrIGRvZXMgbm90IHN1cHBvcnQgKGxvbmcgbG9uZykgICAgKi8KLS8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyAgIDggKi8gLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZyBsb25nKSAgICAgICAqLwotCi0vKiB1bmljb2RlIGRlZmluaW5lcyAqLwotI2RlZmluZSBQWV9VTklDT0RFX1RZUEUgICAgd2NoYXJfdAotI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgU0laRU9GX1NIT1JUCi0KLS8qIGR5bmFtaWMgbG9hZGluZyAqLwotI2RlZmluZSBIQVZFX0RZTkFNSUNfTE9BRElORyAxCi0KLS8qIERlZmluZSBpZiB0eXBlIGNoYXIgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCi0jaWZuZGVmIF9fQ0hBUl9VTlNJR05FRF9fCi0vKiAjdW5kZWYgX19DSEFSX1VOU0lHTkVEX18gKi8KLSNlbmRpZgotCi10eXBlZGVmIGludCBtb2RlX3Q7Ci10eXBlZGVmIGludCB1aWRfdDsKLXR5cGVkZWYgaW50IGdpZF90OwotdHlwZWRlZiBpbnQgcGlkX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fTVVMVElfXykgICAgIC8qIElmIENvbXBpbGVyIC9HdCsgTXVsdGl0aHJlYWQgT3B0aW9uIEVuYWJsZWQsICAqLwotICAjZGVmaW5lIFdJVEhfVEhSRUFEICAgICAgICAgICAgMSAvKiBFbmFibGUgVGhyZWFkaW5nIFRocm91Z2hvdXQgUHl0aG9uICAgICovCi0gICNkZWZpbmUgT1MyX1RIUkVBRFMgICAgICAgICAgICAxIC8qIEFuZCBVc2UgdGhlIE9TLzIgRmxhdm9yIG9mIFRocmVhZHMgICAgKi8KLS8qICNkZWZpbmUgX1JFRU5UUkFOVCAxICovIC8qIFVzZSB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywgYW5kIG90aGVyIGZucyAqLwotI2VuZGlmCi0KLSAgLyogQ29tcGlsZXIgUnVudGltZSBMaWJyYXJ5IENhcGFiaWxpdGllcyAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0vKiAjdW5kZWYgQkFEX1NUQVRJQ19GT1JXQVJEICovIC8qIGlmIGNvbXBpbGVyIGJvdGNoZXMgc3RhdGljIGZ3ZCBkZWNscyAqLwotCi0jZGVmaW5lIFNURENfSEVBREVSUyAgICAgICAgICAgICAxIC8qIFZBQysrIGlzIGFuIEFOU0kgQyBDb21waWxlciAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAgICAgICAgICAgICAgIDEgLyogaHlwb3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BVVEVOViAgICAgICAgICAgICAgMSAvKiBwdXRlbnYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFZBX0xJU1RfSVNfQVJSQVkgICAxICovIC8qIGlmIHZhX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc29tZSBraW5kICAgKi8KLS8qICNkZWZpbmUgSEFWRV9DT05JT19IICAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGNvbmlvLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvc3RhdC5oPiAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFZhcmlhYmxlLUFyZ3VtZW50cy9Qcm90b3R5cGVzICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAgICAgICAgICAxIC8qIFZBQysrIHN1cHBvcnRzIEMgRnVuY3Rpb24gUHJvdG90eXBlcyAgKi8KLSNkZWZpbmUgSEFWRV9TVERBUkdfUFJPVE9UWVBFUyAgIDEgLyogT3VyIDxzdGRhcmcuaD4gaGFzIHByb3RvdHlwZXMgICAgICAgICAqLwotCi0gIC8qIFN0cmluZy9NZW1vcnkvTG9jYWxlIE9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFICAgICAgICAgICAgIDEgLyogbWVtbW92ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SICAgICAgICAgICAgMSAvKiBzdHJlcnJvcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFICAgICAgICAgICAxIC8qIHNldGxvY2FsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTUFMTE9DX1pFUk9fUkVUVVJOU19OVUxMIDEgLyogT3VyIG1hbGxvYygwKSByZXR1cm5zIGEgTlVMTCBwdHIgICAgICAqLwotCi0gIC8qIFNpZ25hbCBIYW5kbGluZyAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IICAgICAgICAgICAgMSAvKiBzaWduYWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgICAgICAgICAgICB2b2lkIC8qIFJldHVybiB0eXBlIG9mIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkgKi8KLS8qICN1bmRlZiBXQU5UX1NJR0ZQRV9IQU5ETEVSICAgKi8gLyogSGFuZGxlIFNJR0ZQRSAoc2VlIEluY2x1ZGUvcHlmcGUuaCkgICAqLwotLyogI2RlZmluZSBIQVZFX0FMQVJNICAgICAgICAgMSAqLyAvKiBhbGFybSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUICAxICovIC8qIHNpZ2ludGVycnVwdCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TSUdSRUxTRSAgICAgIDEgKi8gLyogc2lncmVsc2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBET05UX0hBVkVfU0lHX0FMQVJNICAgICAgMQotI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFICAgICAgMQotCi0gIC8qIENsb2NrL1RpbWUgU3VwcG9ydCAqLwotI2RlZmluZSBIQVZFX0ZUSU1FICAgICAgICAgICAgICAgMSAvKiBXZSBoYXZlIGZ0aW1lKCkgaW4gPHN5cy90aW1lYi5oPiAgICAgICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgICAgICAgICAgICAgICAxIC8qIGNsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TVFJGVElNRSAgICAgICAgICAgIDEgLyogc3RyZnRpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX01LVElNRSAgICAgICAgICAgICAgMSAvKiBta3RpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfVFpOQU1FICAgICAgICAgICAgICAxIC8qIE5vIHRtX3pvbmUgYnV0IGRvIGhhdmUgdHpuYW1lW10gICAgICAgKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAgICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lcy5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19VVElNRV9IICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3V0aW1lLmg+ICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVVRJTUVfSCAgICAgICAxICovIC8qICNpbmNsdWRlIDx1dGltZS5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lLmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUTV9JTl9TWVNfVElNRSAgICAgMSAqLyAvKiA8c3lzL3RpbWUuaD4gZGVjbGFyZXMgc3RydWN0IHRtICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZICAgICAgICAxIC8qIGdldHRpbWVvZmRheSgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgR0VUVElNRU9GREFZX05PX1RaIDEgKi8gLyogZ2V0dGltZW9mZGF5KCkgZG9lcyBub3QgaGF2ZSAybmQgYXJnICAqLwotLyogI2RlZmluZSBIQVZFX1RJTUVHTSAgICAgICAgMSAqLyAvKiB0aW1lZ20oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAgICAgICAxIC8qIE1peCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+ICAgICAgICAgKi8KLSNkZWZpbmUgU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FIDEgLyogTWl4IDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4gICAqLwotLyogI2RlZmluZSBIQVZFX0FMVFpPTkUgICAgICAgMSAqLyAvKiBpZiA8dGltZS5oPiBkZWZpbmVzIGFsdHpvbmUgICAgICAgICAgICovCi0KLSAgLyogTmV0d29yay9Tb2NrZXRzIFN1cHBvcnQgKi8KLSNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBCU0RfU0VMRUNUICAgICAgICAgICAgICAxIC8qIFVzZSBCU0QgdmVyc3VzIE9TLzIgZm9ybSBvZiBzZWxlY3QoKSAgICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUICAgICAgICAgICAgIDEgLyogc2VsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQRUVSTkFNRSAgICAgICAgMSAvKiBnZXRwZWVybmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI3VuZGVmIEhBVkVfR0VUSE9TVE5BTUVfUiAxICovIC8qIGdldGhvc3RuYW1lX3IoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogRmlsZSBJL08gKi8KLSNkZWZpbmUgSEFWRV9EVVAyICAgICAgICAgICAgICAgIDEgLyogZHVwMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VYRUNWICAgICAgICAgICAgICAgMSAvKiBleGVjdigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAgICAgICAgICAgICAxIC8qIHNldHZidWYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgICAgICAgICAgIDEgLyogZ2V0Y3dkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BJUEUgICAgICAgICAgICAgICAgMSAvKiBwaXBlKCkgICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0jZGVmaW5lIEhBVkVfSU9fSCAgICAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxpby5oPiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9GQ05UTF9IICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0RJUkVDVF9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZGlyZWN0Lmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRkxPQ0sgICAgICAgICAxICovIC8qIGZsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9UUlVOQ0FURSAgICAgIDEgKi8gLyogdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAgICAgMSAqLyAvKiBmdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTFNUQVQgICAgICAgICAxICovIC8qIGxzdGF0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9ESVJFTlRfSCAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGRpcmVudC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgICAgMSAqLyAvKiBvcGVuZGlyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogUHJvY2VzcyBPcGVyYXRpb25zICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxwcm9jZXNzLmg+ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQSUQgICAgICAgICAgICAgIDEgLyogZ2V0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgICAgICAgICAgMSAvKiBzeXN0ZW0oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfV0FJVCAgICAgICAgICAgICAgICAxIC8qIHdhaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9LSUxMICAgICAgICAgICAgICAgIDEgLyoga2lsbCgpICAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotI2RlZmluZSBIQVZFX1BPUEVOICAgICAgICAgICAgICAgMSAvKiBwb3BlbigpICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAgICAxICovIC8qIGdldHBwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9XQUlUUElEICAgICAgIDEgKi8gLyogd2FpdHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZPUksgICAgICAgICAgMSAqLyAvKiBmb3JrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogVXNlci9Hcm91cCBJRCBRdWVyaWVzICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURUdJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURVVJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUR0lEICAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUVUlEICAgICAgICAxICovCi0KLSAgLyogVW5peC1TcGVjaWZpYyAqLwotLyogI2RlZmluZSBIQVZFX1NZU19VTl9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3VuLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxICovIC8qICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IICAgIDEgKi8gLyogI2luY2x1ZGUgPHN5cy93YWl0Lmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VOSVNURF9IICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVU5BTUUgICAgICAgICAxICovIC8qIHVuYW1lICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotI2lmZGVmIFVTRV9ETF9FWFBPUlQKLSAgI2RlZmluZSBETF9JTVBPUlQoUlRZUEUpIFJUWVBFIF9TeXN0ZW0KLSNlbmRpZgotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYgYi9QQy9vczJ2YWNwcC9weXRob24uZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTI1YzJhLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotTElCUkFSWSAgICAgICAgUFlUSE9OMjQgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQotREVTQ1JJUFRJT04gICAgJ1B5dGhvbiAyLjQgQ29yZSBETEwnCi1QUk9UTU9ERQotREFUQSAgICAgICAgICAgTVVMVElQTEUgTk9OU0hBUkVECi0KLUVYUE9SVFMKLSAgICAgICAgICAgICAgIDsgRGF0YQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9UeXBlCi0gICAgICAgICAgICAgICBQeUNsYXNzX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q29kZV9UeXBlCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfVHlwZQotICAgICAgICAgICAgICAgUHlEaWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5RXhjX0FyaXRobWV0aWNFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfQXNzZXJ0aW9uRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0F0dHJpYnV0ZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FT0ZFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0lPRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0ltcG9ydEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JbmRleEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19LZXlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXhjX0xvb2t1cEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19NZW1vcnlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0Ci0gICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3ludGF4RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FeGl0Ci0gICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yCi0gICAgICAgICAgICAgICBQeUZpbGVfVHlwZQotICAgICAgICAgICAgICAgUHlGbG9hdF9UeXBlCi0gICAgICAgICAgICAgICBQeUZyYW1lX1R5cGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfRnJvemVuTW9kdWxlcwotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9UeXBlCi0gICAgICAgICAgICAgICBQeUludF9UeXBlCi0gICAgICAgICAgICAgICBQeUxpc3RfVHlwZQotICAgICAgICAgICAgICAgUHlMb25nX1R5cGUKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1R5cGUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5T1NfSW5wdXRIb29rCi0gICAgICAgICAgICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyCi0gICAgICAgICAgICAgICBQeVJhbmdlX1R5cGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfVHlwZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfVHlwZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfVHlwZQotICAgICAgICAgICAgICAgUHlUdXBsZV9UeXBlCi0gICAgICAgICAgICAgICBQeVR5cGVfVHlwZQotICAgICAgICAgICAgICAgUHlfRGVidWdGbGFnCi0gICAgICAgICAgICAgICBQeV9Gcm96ZW5GbGFnCi0gICAgICAgICAgICAgICBQeV9JbnRlcmFjdGl2ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X05vU2l0ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X09wdGltaXplRmxhZwotICAgICAgICAgICAgICAgUHlfVXNlQ2xhc3NFeGNlcHRpb25zRmxhZwotICAgICAgICAgICAgICAgUHlfVmVyYm9zZUZsYWcKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaWxldGFiCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgX1B5UGFyc2VyX0dyYW1tYXIKLSAgICAgICAgICAgICAgIF9QeVBhcnNlcl9Ub2tlbk5hbWVzCi0gICAgICAgICAgICAgICBfUHlfRWxsaXBzaXNPYmplY3QKLSAgICAgICAgICAgICAgIF9QeV9Ob25lU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfUGFja2FnZUNvbnRleHQKLSAgICAgICAgICAgICAgIF9QeV9UcnVlU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfWmVyb1N0cnVjdAotICAgICAgICAgICAgICAgX1B5X2Fic3RyYWN0X2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9jYXBzdWxlX2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXgKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXhfdGFibGUKLQotICAgICAgICAgICAgICAgOyBDb2RlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUFyZ19WYVBhcnNlCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9GaW5pCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRGbGFncwotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldFNlbGYKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX05ldwotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldENvbnRleHQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0TmFtZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfTmV3Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0Q29udGV4dAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXROYW1lCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0UG9pbnRlcgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfR2V0RGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0ltcG9ydAotICAgICAgICAgICAgICAgUHlDYWxsYWJsZV9DaGVjawotICAgICAgICAgICAgICAgUHlDbGFzc19Jc1N1YmNsYXNzCi0gICAgICAgICAgICAgICBQeUNsYXNzX05ldwotICAgICAgICAgICAgICAgUHlDb2RlX0FkZHIyTGluZQotICAgICAgICAgICAgICAgUHlDb2RlX05ldwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0FzQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tRG91YmxlcwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlEaWN0X0NsZWFyCi0gICAgICAgICAgICAgICBQeURpY3RfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X0l0ZW1zCi0gICAgICAgICAgICAgICBQeURpY3RfS2V5cwotICAgICAgICAgICAgICAgUHlEaWN0X05ldwotICAgICAgICAgICAgICAgUHlEaWN0X05leHQKLSAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X1NpemUKLSAgICAgICAgICAgICAgIFB5RGljdF9WYWx1ZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50Ci0gICAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgICAgICAgICAgICAgIFB5RXJyX0NoZWNrU2lnbmFscwotICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0ZldGNoCi0gICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQKLSAgICAgICAgICAgICAgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICAgICAgICAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeQotICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9PY2N1cnJlZAotICAgICAgICAgICAgICAgUHlFcnJfUHJpbnQKLSAgICAgICAgICAgICAgIFB5RXJyX1ByaW50RXgKLSAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubwotICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gICAgICAgICAgICAgICBQeUVycl9TZXRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdAotICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nCi0gICAgICAgICAgICAgICBQeUV2YWxfQWNxdWlyZUxvY2sKLSAgICAgICAgICAgICAgIFB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE1ldGhvZAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxPYmplY3QKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUV2YWxfRXZhbENvZGUKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucwotICAgICAgICAgICAgICAgUHlFdmFsX0dldEZyYW1lCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldExvY2FscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldFJlc3RyaWN0ZWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9Jbml0VGhyZWFkcwotICAgICAgICAgICAgICAgUHlFdmFsX1JlbGVhc2VMb2NrCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVsZWFzZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9TYXZlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUZpbGVfQXNGaWxlCi0gICAgICAgICAgICAgICBQeUZpbGVfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZpbGVfR2V0TGluZQotICAgICAgICAgICAgICAgUHlGaWxlX05hbWUKLSAgICAgICAgICAgICAgIFB5RmlsZV9TZXRCdWZTaXplCi0gICAgICAgICAgICAgICBQeUZpbGVfU29mdFNwYWNlCi0gICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QKLSAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc0RvdWJsZQotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc1N0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9GaW5pCi0gICAgICAgICAgICAgICBQeUZsb2F0X0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tQb3AKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cAotICAgICAgICAgICAgICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMKLSAgICAgICAgICAgICAgIFB5RnJhbWVfRmluaQotICAgICAgICAgICAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QKLSAgICAgICAgICAgICAgIFB5RnJhbWVfTmV3Ci0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldENvZGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9OZXcKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9BZGRBY2NlbGVyYXRvcnMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9GaW5kREZBCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzCi0gICAgICAgICAgICAgICBQeUltcG9ydF9BZGRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0NsZWFudXAKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9FeHRlbmRJbml0dGFiCi0gICAgICAgICAgICAgICBQeUltcG9ydF9HZXRNYWdpY051bWJlcgotICAgICAgICAgICAgICAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9Eb0Jpbk9wCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX05ldwotICAgICAgICAgICAgICAgUHlJbnRfQXNMb25nCi0gICAgICAgICAgICAgICBQeUludF9GaW5pCi0gICAgICAgICAgICAgICBQeUludF9Gcm9tTG9uZwotICAgICAgICAgICAgICAgUHlJbnRfR2V0TWF4Ci0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQKLSAgICAgICAgICAgICAgIFB5TGlzdF9Bc1R1cGxlCi0gICAgICAgICAgICAgICBQeUxpc3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlMaXN0X0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeUxpc3RfSW5zZXJ0Ci0gICAgICAgICAgICAgICBQeUxpc3RfTmV3Ci0gICAgICAgICAgICAgICBQeUxpc3RfUmV2ZXJzZQotICAgICAgICAgICAgICAgUHlMaXN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5TGlzdF9TZXRTbGljZQotICAgICAgICAgICAgICAgUHlMaXN0X1NpemUKLSAgICAgICAgICAgICAgIFB5TGlzdF9Tb3J0Ci0gICAgICAgICAgICAgICBQeUxvbmdfQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5Ci0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXJzaGFsX0luaXQKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUKLSAgICAgICAgICAgICAgIFB5TWVtX01hbGxvYwotICAgICAgICAgICAgICAgUHlNZW1fUmVhbGxvYwotICAgICAgICAgICAgICAgUHlNZXRob2RfQ2xhc3MKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0ZpbmkKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0Z1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9OZXcKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1NlbGYKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldE5hbWUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX05ldwotICAgICAgICAgICAgICAgUHlOb2RlX0FkZENoaWxkCi0gICAgICAgICAgICAgICBQeU5vZGVfQ29tcGlsZQotICAgICAgICAgICAgICAgUHlOb2RlX0ZyZWUKLTsgICAgICAgICAgICAgICBQeU5vZGVfTGlzdFRyZWUKLSAgICAgICAgICAgICAgIFB5Tm9kZV9OZXcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Fic29sdXRlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9BZGQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0FuZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NvZXJjZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ29lcmNlRXgKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0RpdmlkZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfRGl2bW9kCi0gICAgICAgICAgICAgICBQeU51bWJlcl9GbG9hdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfSW50Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9JbnZlcnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xvbmcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfTXVsdGlwbHkKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX05lZ2F0aXZlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9PcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUG9zaXRpdmUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1Bvd2VyCi0gICAgICAgICAgICAgICBQeU51bWJlcl9SZW1haW5kZXIKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1JzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfU3VidHJhY3QKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1hvcgotICAgICAgICAgICAgICAgUHlPU19BZnRlckZvcmsKLSAgICAgICAgICAgICAgIFB5T1NfRmluaUludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW5pdEludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgICAgICAgICAgICAgIFB5T1NfUmVhZGxpbmUKLSAgICAgICAgICAgICAgIFB5T1NfU3RkaW9SZWFkbGluZQotICAgICAgICAgICAgICAgUHlPU19zdHJ0b2wKLSAgICAgICAgICAgICAgIFB5T1Nfc3RydG91bAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsTWV0aG9kCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsT2JqZWN0Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9DbXAKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NvbXBhcmUKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc2gKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZQotICAgICAgICAgICAgICAgUHlPYmplY3RfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Ob3QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1ByaW50Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9SZXByCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TdHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX0FkZFRva2VuCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9EZWxldGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX05ldwotICAgICAgICAgICAgICAgUHlQYXJzZXJfUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9QYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlSYW5nZV9OZXcKLSAgICAgICAgICAgICAgIFB5UnVuX0FueUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ludGVyYWN0aXZlTG9vcAotICAgICAgICAgICAgICAgUHlSdW5fSW50ZXJhY3RpdmVPbmUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZVN0cmluZwotICAgICAgICAgICAgICAgUHlSdW5fU3RyaW5nCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NoZWNrCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvbmNhdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db250YWlucwotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db3VudAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0RlbFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW4KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW5kZXgKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0xpc3QKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfUmVwZWF0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfVHVwbGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfR2V0SW5kaWNlcwotICAgICAgICAgICAgICAgUHlTbGljZV9OZXcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Db25jYXQKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0NvbmNhdEFuZERlbAotICAgICAgICAgICAgICAgUHlTdHJpbmdfRmluaQotICAgICAgICAgICAgICAgUHlTdHJpbmdfRm9ybWF0Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuSW5QbGFjZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfU2l6ZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0RmlsZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRBcmd2Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5U3lzX1NldFBhdGgKLSAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyCi0gICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZG91dAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcgotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfTmV3Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX1N3YXAKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZG93bl9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9leGl0X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3VwX3NlbWEKLSAgICAgICAgICAgICAgIFB5VG9rZW5fT25lQ2hhcgotICAgICAgICAgICAgICAgUHlUb2tlbl9Ud29DaGFycwotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZQotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0dldAotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfSGVyZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfUHJpbnQKLSAgICAgICAgICAgICAgIFB5VHVwbGVfRmluaQotICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeVR1cGxlX05ldwotICAgICAgICAgICAgICAgUHlUdXBsZV9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX1NpemUKLSAgICAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsCi0gICAgICAgICAgICAgICBQeV9BdEV4aXQKLSAgICAgICAgICAgICAgIFB5X0J1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIFB5X0NvbXBpbGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5X0VuZEludGVycHJldGVyCi0gICAgICAgICAgICAgICBQeV9FeGl0Ci0gICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yCi0gICAgICAgICAgICAgICBQeV9GZElzSW50ZXJhY3RpdmUKLSAgICAgICAgICAgICAgIFB5X0ZpbmFsaXplCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kSW5DaGFpbgotICAgICAgICAgICAgICAgUHlfRmx1c2hMaW5lCi0gICAgICAgICAgICAgICBQeV9GcmVlCi0gICAgICAgICAgICAgICBQeV9HZXRBcmdjQXJndgotICAgICAgICAgICAgICAgUHlfR2V0QnVpbGRJbmZvCi0gICAgICAgICAgICAgICBQeV9HZXRDb21waWxlcgotICAgICAgICAgICAgICAgUHlfR2V0Q29weXJpZ2h0Ci0gICAgICAgICAgICAgICBQeV9HZXRFeGVjUHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQYXRoCi0gICAgICAgICAgICAgICBQeV9HZXRQbGF0Zm9ybQotICAgICAgICAgICAgICAgUHlfR2V0UHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtRnVsbFBhdGgKLSAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9HZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9HZXRWZXJzaW9uCi0gICAgICAgICAgICAgICBQeV9Jbml0TW9kdWxlNAotICAgICAgICAgICAgICAgUHlfSW5pdGlhbGl6ZQotICAgICAgICAgICAgICAgUHlfSXNJbml0aWFsaXplZAotICAgICAgICAgICAgICAgUHlfTWFpbgotICAgICAgICAgICAgICAgUHlfTWFrZVBlbmRpbmdDYWxscwotICAgICAgICAgICAgICAgUHlfTWFsbG9jCi0gICAgICAgICAgICAgICBQeV9OZXdJbnRlcnByZXRlcgotICAgICAgICAgICAgICAgUHlfUmVhbGxvYwotICAgICAgICAgICAgICAgUHlfUmVwckVudGVyCi0gICAgICAgICAgICAgICBQeV9SZXByTGVhdmUKLSAgICAgICAgICAgICAgIFB5X1NldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9TZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9WYUJ1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fRmluaV8xCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0ZpbmlfMgotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9Jbml0XzEKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fSW5pdF8yCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbmkKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0luaXQKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZQotICAgICAgICAgICAgICAgX1B5TG9uZ19OZXcKLSAgICAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcgotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ldwotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ld1ZhcgotICAgICAgICAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5U3lzX0luaXQKLSAgICAgICAgICAgICAgIF9QeVR1cGxlX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5X01ENUZpbmFsCi0gICAgICAgICAgICAgICBfUHlfTUQ1SW5pdAotICAgICAgICAgICAgICAgX1B5X01ENVVwZGF0ZQotOyAgICAgICAgICAgICAgIF9QeV9hZGRiaXQKLSAgICAgICAgICAgICAgIF9QeV9jX2RpZmYKLSAgICAgICAgICAgICAgIF9QeV9jX25lZwotICAgICAgICAgICAgICAgX1B5X2NfcG93Ci0gICAgICAgICAgICAgICBfUHlfY19wcm9kCi0gICAgICAgICAgICAgICBfUHlfY19xdW90Ci0gICAgICAgICAgICAgICBfUHlfY19zdW0KLTsgICAgICAgICAgICAgICBfUHlfZGVsYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21lcmdlYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21ldGFfZ3JhbW1hcgotOyAgICAgICAgICAgICAgIF9QeV9uZXdiaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfc2FtZWJpdHNldAotICAgICAgICAgICAgICAgUHlCdWZmZXJfVHlwZQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU9iamVjdAotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfTmV3Ci0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQgYi9QQy9vczJ2YWNwcC9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU4NjA0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotSUJNIFZpc3VhbEFnZSBDL0MrKyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UbyBidWlsZCBQeXRob24gZm9yIE9TLzIsIGNoYW5nZSBpbnRvIC4vb3MydmFjcHAgYW5kIGlzc3VlIGFuICdOTUFLRScKLWNvbW1hbmQuICBUaGlzIHdpbGwgYnVpbGQgYSBQWVRIT04xNS5ETEwgY29udGFpbmluZyB0aGUgc2V0IG9mIFB5dGhvbgotbW9kdWxlcyBsaXN0ZWQgaW4gY29uZmlnLmMgYW5kIGEgc21hbGwgUFlUSE9OLkVYRSB0byBzdGFydCB0aGUKLWludGVycHJldGVyLgotCi1CeSBjaGFuZ2luZyB0aGUgQyBjb21waWxlciBmbGFnIC9HZC0gaW4gdGhlIG1ha2VmaWxlIHRvIC9HZCssIHlvdSBjYW4KLXJlZHVjZSB0aGUgc2l6ZSBvZiB0aGVzZSBieSBjYXVzaW5nIFB5dGhvbiB0byBkeW5hbWljYWxseSBsaW5rIHRvIHRoZQotQyBydW50aW1lIERMTHMgaW5zdGVhZCBvZiBpbmNsdWRpbmcgdGhlaXIgYnVsayBpbiB5b3VyIGJpbmFyaWVzLiAKLUhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCBhbnkgc3lzdGVtIG9uIHdoaWNoIHlvdSBydW4gUHl0aG9uIG11c3QgaGF2ZQotdGhlIFZBQysrIGNvbXBpbGVyIGluc3RhbGxlZCBpbiBvcmRlciB0byBoYXZlIHRob3NlIERMTHMgYXZhaWxhYmxlLgotCi1EdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgeW91IG1heSBzZWUgYSBjb3VwbGUgb2YgaGFybWxlc3Mgd2FybmluZ3M6Ci0KLSAgRnJvbSB0aGUgQyBDb21waWxlciwgIk5vIGZ1bmN0aW9uIHByb3RvdHlwZSBnaXZlbiBmb3IgWFhYIiwgd2hpY2gKLSAgY29tZXMgZnJvbSB0aGUgdXNlIG9mIEsmUiBwYXJhbWV0ZXJzIHdpdGhpbiBQeXRob24gZm9yIHBvcnRhYmlsaXR5LgotCi0gIEZyb20gdGhlIElMSUIgbGlicmFyaWFuLCAiTW9kdWxlIE5vdCBGb3VuZCAoWFhYKSIsIHdoaWNoIGNvbWVzCi0gIGZyb20gaXRzIGF0dGVtcHQgdG8gcGVyZm9ybSB0aGUgKC0rKSBvcGVyYXRpb24sIHdoaWNoIHJlbW92ZXMgYW5kCi0gIHRoZW4gYWRkcyBhIC5PQkogdG8gdGhlIGxpYnJhcnkuICBUaGUgZmlyc3QgdGltZSBhIGJ1aWxkIGlzIGRvbmUsCi0gIGl0IG9idmlvdXNseSBjYW5ub3QgcmVtb3ZlIHdoYXQgaXMgbm90IHlldCBidWlsdC4KLQotVGhpcyBidWlsZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBtb3N0IFB5dGhvbiBmdW5jdGlvbmFsaXR5IGFzIHdlbGwgYXMKLVRDUC9JUCBzb2NrZXRzLiAgSXQgb21pdHMgdGhlIFBvc2l4IGFiaWxpdHkgdG8gJ2ZvcmsnIGEgcHJvY2VzcyBidXQKLXN1cHBvcnRzIHRocmVhZHMgdXNpbmcgT1MvMiBuYXRpdmUgY2FwYWJpbGl0aWVzLiAgSSBoYXZlIHRyaWVkIHRvCi1zdXBwb3J0IGV2ZXJ5dGhpbmcgcG9zc2libGUgYnV0IGhlcmUgYXJlIGEgZmV3IHVzYWdlIG5vdGVzLgotCi0KLS0tIG9zLnBvcGVuKCkgVXNhZ2UgV2FybmluZ3MKLQotV2l0aCByZXNwZWN0IHRvIG15IGltcGxlbWVudGF0aW9uIG9mIHBvcGVuKCkgdW5kZXIgT1MvMjoKLQotICAgIGltcG9ydCBvcwotCi0gICAgZmQgPSBvcy5wb3BlbigicGt6aXAuZXhlIC1AIGp1bmsuemlwIiwgJ3diJykKLSAgICBmZC53cml0ZSgiZmlsZTEudHh0XG4iKQotICAgIGZkLndyaXRlKCJmaWxlMi50eHRcbiIpCi0gICAgZmQud3JpdGUoImZpbGUzLnR4dFxuIikKLSAgICBmZC53cml0ZSgiXHgxYSIpICAjIFNob3VsZCBOb3QgQmUgTmVjZXNzYXJ5IEJ1dCBJcwotICAgIGZkLmNsb3NlKCkKLQotVGhlcmUgaXMgYSBidWcsIGVpdGhlciBpbiB0aGUgVkFDKysgY29tcGlsZXIgb3IgT1MvMiBpdHNlbGYsIHdoZXJlIHRoZQotc2ltcGxlIGNsb3N1cmUgb2YgdGhlIHdyaXRlLXNpZGUgb2YgYSBwaXBlIC10by0gYSBwcm9jZXNzIGRvZXMgbm90Ci1zZW5kIGFuIEVPRiB0byB0aGF0IHByb2Nlc3MuICBJIGZpbmQgSSBtdXN0IGV4cGxpY2l0bHkgd3JpdGUgYQotY29udHJvbC1aIChFT0YpIGJlZm9yZSBjbG9zaW5nIHRoZSBwaXBlLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIHdoZW4KLXVzaW5nIHBvcGVuKCkgaW4gcmVhZCBtb2RlLgotCi1PbmUgb3RoZXIgc2xpZ2h0IGRpZmZlcmVuY2Ugd2l0aCBteSBwb3BlbigpIGlzIHRoYXQgSSByZXR1cm4gTm9uZQotZnJvbSB0aGUgY2xvc2UoKSwgaW5zdGVhZCBvZiB0aGUgVW5peCBjb252ZW50aW9uIG9mIHRoZSByZXR1cm4gY29kZQotb2YgdGhlIHNwYXduZWQgcHJvZ3JhbS4gIEkgY291bGQgZmluZCBubyBlYXN5IHdheSB0byBkbyB0aGlzIHVuZGVyCi1PUy8yLgotCi0KLS0tIEJFR0lOTElCUEFUSC9FTkRMSUJQQVRICi0KLVdpdGggcmVzcGVjdCB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoaXMgT1MvMiBwb3J0IHN1cHBvcnRzIHRoZQotc3BlY2lhbC10by1PUy8yIG1hZ2ljIG5hbWVzIG9mICdCRUdJTkxJQlBBVEgnIGFuZCAnRU5ETElCUEFUSCcgdG8KLWNvbnRyb2wgd2hlcmUgdG8gbG9hZCBjb252ZW50aW9uYWwgRExMcyBmcm9tLiAgVGhvc2UgbmFtZXMgYXJlCi1pbnRlcmNlcHRlZCBhbmQgY29udmVydGVkIHRvIGNhbGxzIG9uIHRoZSBPUy8yIGtlcm5lbCBBUElzIGFuZAotYXJlIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMsIHdoZXRoZXIgUHl0aG9uLWJhc2VkIG9yIG5vdC4KLQotQSBmZXcgbmV3IGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBvcyBtb2R1bGU6Ci0KLSAgICBvcy5tZW1pbnN0YWxsZWQgICMgQ291bnQgb2YgQnl0ZXMgb2YgUkFNIEluc3RhbGxlZCBvbiBNYWNoaW5lCi0gICAgb3MubWVta2VybmVsICAgICAjIENvdW50IG9mIEJ5dGVzIG9mIFJBTSBSZXNlcnZlZCAoTm9uLVN3YXBwYWJsZSkKLSAgICBvcy5tZW12aXJ0dWFsICAgICMgQ291bnQgb2YgQnl0ZXMgb2YgVmlydHVhbCBSQU0gUG9zc2libGUKLSAgICBvcy50aW1lc2xpY2UgICAgICMgRHVyYXRpb24gb2YgU2NoZWR1bGVyIFRpbWVzbGljZSwgaW4gTWlsbGlzZWNvbmRzCi0gICAgb3MubWF4cGF0aGxlbiAgICAjIE1heGltdW0gTGVuZ3RoIG9mIGEgUGF0aCBTcGVjaWZpY2F0aW9uLCBpbiBjaGFycwotICAgIG9zLm1heG5hbWVsZW4gICAgIyBNYXhpbXVtIExlbmd0aCBvZiBhIFNpbmdsZSBEaXIvRmlsZSBOYW1lLCBpbiBjaGFycwotICAgIG9zLnZlcnNpb24gICAgICAgIyBWZXJzaW9uIG9mIE9TLzIgQmVpbmcgUnVuIGUuZy4gIjQuMDAiCi0gICAgb3MucmV2aXNpb24gICAgICAjIFJldmlzaW9uIG9mIE9TLzIgQmVpbmcgUnVuICh1c3VhbGx5IHplcm8pCi0gICAgb3MuYm9vdGRyaXZlICAgICAjIERyaXZlIHRoYXQgU3lzdGVtIEJvb3RlZCBGcm9tIGUuZy4gIkM6IgotICAgICAgICAgICAgICAgICAgICAgIyAodXNlZnVsIHRvIGZpbmQgdGhlIENPTkZJRy5TWVMgdXNlZCB0byBib290IHdpdGgpCi0KLQotLS0gVXNpbmcgUHl0aG9uIGFzIHRoZSBEZWZhdWx0IE9TLzIgQmF0Y2ggTGFuZ3VhZ2UKLQotTm90ZSB0aGF0IE9TLzIgc3VwcG9ydHMgdGhlIFVuaXggdGVjaG5pcXVlIG9mIHB1dHRpbmcgdGhlIHNwZWNpYWwKLWNvbW1lbnQgbGluZSBhdCB0aGUgdGltZSBvZiBzY3JpcHRzIGUuZy4gIiMhL3Vzci9iaW4vcHl0aG9uIiBpbgotYSBkaWZmZXJlbnQgc3ludGFjdGljIGZvcm0uICBUbyBkbyB0aGlzLCBwdXQgeW91ciBzY3JpcHQgaW50byBhIGZpbGUKLXdpdGggYSAuQ01EIGV4dGVuc2lvbiBhbmQgYWRkZWQgJ2V4dHByb2MnIHRvIHRoZSB0b3AgYXMgZm9sbG93czoKLQotICAgIGV4dHByb2MgQzpcUHl0aG9uXFB5dGhvbi5leGUgLXgKLSAgICBpbXBvcnQgb3MKLSAgICBwcmludCAiSGVsbG8gZnJvbSBQeXRob24iCi0KLVRoZSAnLXgnIG9wdGlvbiB0ZWxscyBQeXRob24gdG8gc2tpcCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZQotd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVzdCBhcyBub3JtYWwgUHl0aG9uIHNvdXJjZS4KLQotCi0tLSBTdWdnZXN0ZWQgRW52aXJvbm1lbnQgVmFyaWFibGUgU2V0dXAKLQotV2l0aCByZXNwZWN0IHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFB5dGhvbiwgSSB1c2UgdGhlCi1mb2xsb3dpbmcgc2V0dXA6Ci0KLSAgICBTZXQgUFlUSE9OSE9NRT1FOlxUYXVcUHJvamVjdHNcUHl0aG9uO0Q6XERMTHMKLSAgICBTZXQgUFlUSE9OUEFUSD0uO0U6XFRhdVxQcm9qZWN0c1xQeXRob25cTGliOyBcCi0gICAgICAgICAgICAgICAgICAgICBFOlxUYXVcUHJvamVjdHNcUHl0aG9uXExpYlxwbGF0LXdpbgotCi1UaGUgRVhFQ19QUkVGSVggKG9wdGlvbmFsIHNlY29uZCBwYXRoc3BlYyBvbiBQWVRIT05IT01FKSBpcyB3aGVyZQoteW91IHB1dCBhbnkgUHl0aG9uIGV4dGVuc2lvbiBETExzIHlvdSBtYXkgY3JlYXRlL29idGFpbi4gIFRoZXJlCi1hcmUgbm9uZSBwcm92aWRlZCB3aXRoIHRoaXMgcmVsZWFzZS4KLQotCi0tLSBDb250YWN0IEluZm8KLQotSmVmZiBSdXNoIGlzIG5vIGxvbmdlciBzdXBwb3J0aW5nIHRoZSBWQUNQUCBwb3J0IDotKAotCi1JIGRvbid0IGhhdmUgdGhlIFZBQ1BQIGNvbXBpbGVyLCBzbyBjYW4ndCByZWxpYWJseSBtYWludGFpbiB0aGlzIHBvcnQuIAotCi1BbnlvbmUgd2l0aCBWQUNQUCB3aG8gY2FuIGNvbnRyaWJ1dGUgcGF0Y2hlcyB0byBrZWVwIHRoaXMgcG9ydCBidWlsZGFibGUKLXNob3VsZCB1cGxvYWQgdGhlbSB0byB0aGUgUHl0aG9uIFBhdGNoIE1hbmFnZXIgYXQgU291cmNlZm9yZ2UgYW5kIAotYXNzaWduIHRoZW0gdG8gbWUgZm9yIHJldmlldy9jaGVja2luLgotCi1BbmRyZXcgTWFjSW50eXJlCi1haW1hY2ludHlyZSBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKLUF1Z3VzdCAxOCwgMjAwMi4KZGlmZiAtLWdpdCBhL1BDL3B5Y29uZmlnLmggYi9QQy9weWNvbmZpZy5oCmluZGV4IGYzMjBjY2YuLjI5OTUyN2QgMTAwNjQ0Ci0tLSBhL1BDL3B5Y29uZmlnLmgKKysrIGIvUEMvcHljb25maWcuaApAQCAtNzQsOCArNzQsNiBAQAogI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFCiAjZGVmaW5lIExPTkdfQklUCTMyCiAjZGVmaW5lIFdPUkRfQklUIDMyCi0jZGVmaW5lIFBSRUZJWCAiIgotI2RlZmluZSBFWEVDX1BSRUZJWCAiIgogCiAjZGVmaW5lIE1TX1dJTjMyIC8qIG9ubHkgc3VwcG9ydCB3aW4zMiBhbmQgZ3JlYXRlci4gKi8KICNkZWZpbmUgTVNfV0lORE9XUwpAQCAtMTU2LDE1ICsxNTQsOSBAQAogI2VuZGlmIC8qIE1TX1dJTjY0ICovCiAKIC8qIHNldCB0aGUgdmVyc2lvbiBtYWNyb3MgZm9yIHRoZSB3aW5kb3dzIGhlYWRlcnMgKi8KLSNpZmRlZiBNU19XSU5YNjQKLS8qIDY0IGJpdCBvbmx5IHJ1bnMgb24gWFAgb3IgZ3JlYXRlciAqLworLyogUHl0aG9uIDMuNCsgcmVxdWlyZXMgV2luZG93cyBYUCBvciBncmVhdGVyICovCiAjZGVmaW5lIFB5X1dJTlZFUiAweDA1MDEgLyogX1dJTjMyX1dJTk5UX1dJTlhQICovCiAjZGVmaW5lIFB5X05URERJIE5URERJX1dJTlhQCi0jZWxzZQotLyogUHl0aG9uIDIuNisgcmVxdWlyZXMgV2luZG93cyAyMDAwIG9yIGdyZWF0ZXIgKi8KLSNkZWZpbmUgUHlfV0lOVkVSIDB4MDUwMCAvKiBfV0lOMzJfV0lOTlRfV0lOMksgKi8KLSNkZWZpbmUgUHlfTlREREkgTlRERElfV0lOMktTUDQKLSNlbmRpZgogCiAvKiBXZSBvbmx5IHNldCB0aGVzZSB2YWx1ZXMgd2hlbiBidWlsZGluZyBQeXRob24gLSB3ZSBkb24ndCB3YW50IHRvIGZvcmNlCiAgICB0aGVzZSB2YWx1ZXMgb24gZXh0ZW5zaW9ucywgYXMgdGhhdCB3aWxsIGFmZmVjdCB0aGUgcHJvdG90eXBlcyBhbmQKQEAgLTE5OSw4ICsxOTEsMTAgQEAKICNkZWZpbmUgSEFWRV9TU0laRV9UIDEKIAogI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKE1TX1dJTjY0KQotI2lmZGVmIF9NX0lYODYKKyNpZiBkZWZpbmVkKF9NX0lYODYpCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKEludGVsKSIpCisjZWxpZiBkZWZpbmVkKF9NX0FSTSkKKyNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoQVJNKSIpCiAjZWxzZQogI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChVbmtub3duKSIpCiAjZW5kaWYKQEAgLTMyNCwxMSArMzE4LDExIEBACiAJCQl0aGVpciBNYWtlZmlsZSAob3RoZXIgY29tcGlsZXJzIGFyZSBnZW5lcmFsbHkKIAkJCXRha2VuIGNhcmUgb2YgYnkgZGlzdHV0aWxzLikgKi8KICMJCQlpZiBkZWZpbmVkKF9ERUJVRykKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zM19kLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzRfZC5saWIiKQogIwkJCWVsaWYgZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkKICMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zLmxpYiIpCiAjCQkJZWxzZQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMzLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzQubGliIikKICMJCQllbmRpZiAvKiBfREVCVUcgKi8KICMJCWVuZGlmIC8qIF9NU0NfVkVSICovCiAjCWVuZGlmIC8qIFB5X0JVSUxEX0NPUkUgKi8KQEAgLTcyNyw2ICs3MjEsOSBAQAogLyogVGhlIHNpemUgb2YgYHdjaGFyX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9XQ0hBUl9UIDIKIAorLyogVGhlIHNpemUgb2YgYHBpZF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfUElEX1QgU0laRU9GX0lOVAorCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGRsIGxpYnJhcnkgKC1sZGwpLiAgKi8KIC8qICN1bmRlZiBIQVZFX0xJQkRMICovCiAKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbi5tayBiL1BDL3B5dGhvbi5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2NTEwNi4uMDAwMDAwMAotLS0gYS9QQy9weXRob24ubWsKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXByb2plY3QgOiBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIuZXhlIG46XHB5dGhvblxweXRob24tMS4mDQotNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MuZXhlIC5TWU1CT0xJQw0KLQ0KLSFpbmNsdWRlIG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X29zMlxweXRoX29zMi5tazENCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MubWsxDQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5kZWYgYi9QQy9weXRob24zLmRlZgppbmRleCBkNzI2NTI1Li4wY2YwZDk0IDEwMDY0NAotLS0gYS9QQy9weXRob24zLmRlZgorKysgYi9QQy9weXRob24zLmRlZgpAQCAtMSw2OTkgKzEsNzAwIEBACi07IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzNnZW4ucHkKKzsgV2hlbiBjaGFuZ2luZyB0aGlzIGZpbGUsIHJ1biBweXRob24zNGdlbi5weQogTElCUkFSWQkicHl0aG9uMyIKIEVYUE9SVFMKLSAgUHlBcmdfUGFyc2U9cHl0aG9uMzMuUHlBcmdfUGFyc2UKLSAgUHlBcmdfUGFyc2VUdXBsZT1weXRob24zMy5QeUFyZ19QYXJzZVR1cGxlCi0gIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMy5QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMKLSAgUHlBcmdfVW5wYWNrVHVwbGU9cHl0aG9uMzMuUHlBcmdfVW5wYWNrVHVwbGUKLSAgUHlBcmdfVmFQYXJzZT1weXRob24zMy5QeUFyZ19WYVBhcnNlCi0gIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjMzLlB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cz1weXRob24zMy5QeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHMKLSAgUHlCYXNlT2JqZWN0X1R5cGU9cHl0aG9uMzMuUHlCYXNlT2JqZWN0X1R5cGUgREFUQQotICBQeUJvb2xfRnJvbUxvbmc9cHl0aG9uMzMuUHlCb29sX0Zyb21Mb25nCi0gIFB5Qm9vbF9UeXBlPXB5dGhvbjMzLlB5Qm9vbF9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlJdGVyX1R5cGU9cHl0aG9uMzMuUHlCeXRlQXJyYXlJdGVyX1R5cGUgREFUQQotICBQeUJ5dGVBcnJheV9Bc1N0cmluZz1weXRob24zMy5QeUJ5dGVBcnJheV9Bc1N0cmluZwotICBQeUJ5dGVBcnJheV9Db25jYXQ9cHl0aG9uMzMuUHlCeXRlQXJyYXlfQ29uY2F0Ci0gIFB5Qnl0ZUFycmF5X0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlCeXRlQXJyYXlfRnJvbU9iamVjdAotICBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeUJ5dGVBcnJheV9SZXNpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfUmVzaXplCi0gIFB5Qnl0ZUFycmF5X1NpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfU2l6ZQotICBQeUJ5dGVBcnJheV9UeXBlPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1R5cGUgREFUQQotICBQeUJ5dGVzSXRlcl9UeXBlPXB5dGhvbjMzLlB5Qnl0ZXNJdGVyX1R5cGUgREFUQQotICBQeUJ5dGVzX0FzU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZXNfQXNTdHJpbmcKLSAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19Db25jYXQ9cHl0aG9uMzMuUHlCeXRlc19Db25jYXQKLSAgUHlCeXRlc19Db25jYXRBbmREZWw9cHl0aG9uMzMuUHlCeXRlc19Db25jYXRBbmREZWwKLSAgUHlCeXRlc19EZWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlCeXRlc19EZWNvZGVFc2NhcGUKLSAgUHlCeXRlc19Gcm9tRm9ybWF0PXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbUZvcm1hdAotICBQeUJ5dGVzX0Zyb21Gb3JtYXRWPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbUZvcm1hdFYKLSAgUHlCeXRlc19Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbU9iamVjdAotICBQeUJ5dGVzX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlCeXRlc19Gcm9tU3RyaW5nCi0gIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeUJ5dGVzX1JlcHI9cHl0aG9uMzMuUHlCeXRlc19SZXByCi0gIFB5Qnl0ZXNfU2l6ZT1weXRob24zMy5QeUJ5dGVzX1NpemUKLSAgUHlCeXRlc19UeXBlPXB5dGhvbjMzLlB5Qnl0ZXNfVHlwZSBEQVRBCi0gIFB5Q0Z1bmN0aW9uX0NhbGw9cHl0aG9uMzMuUHlDRnVuY3Rpb25fQ2FsbAotICBQeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0PXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3QKLSAgUHlDRnVuY3Rpb25fR2V0RmxhZ3M9cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0RmxhZ3MKLSAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb249cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KLSAgUHlDRnVuY3Rpb25fR2V0U2VsZj1weXRob24zMy5QeUNGdW5jdGlvbl9HZXRTZWxmCi0gIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX05ld0V4Ci0gIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzMuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCi0gIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjMzLlB5Q2FsbEl0ZXJfTmV3Ci0gIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zMy5QeUNhbGxJdGVyX1R5cGUgREFUQQotICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjMzLlB5Q2FsbGFibGVfQ2hlY2sKLSAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzMuUHlDYXBzdWxlX0dldENvbnRleHQKLSAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzMuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzMuUHlDYXBzdWxlX0dldE5hbWUKLSAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzMuUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zMy5QeUNhcHN1bGVfSW1wb3J0Ci0gIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjMzLlB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzMuUHlDYXBzdWxlX05ldwotICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zMy5QeUNhcHN1bGVfU2V0Q29udGV4dAotICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zMy5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgotICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zMy5QeUNhcHN1bGVfU2V0TmFtZQotICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zMy5QeUNhcHN1bGVfU2V0UG9pbnRlcgotICBQeUNhcHN1bGVfVHlwZT1weXRob24zMy5QeUNhcHN1bGVfVHlwZSBEQVRBCi0gIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjMzLlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX0RlY29kZT1weXRob24zMy5QeUNvZGVjX0RlY29kZQotICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzMuUHlDb2RlY19EZWNvZGVyCi0gIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjMzLlB5Q29kZWNfRW5jb2RlCi0gIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zMy5QeUNvZGVjX0VuY29kZXIKLSAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19JZ25vcmVFcnJvcnMKLSAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzMuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKLSAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzMuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKLSAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjMzLlB5Q29kZWNfS25vd25FbmNvZGluZwotICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjMzLlB5Q29kZWNfTG9va3VwRXJyb3IKLSAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zMy5QeUNvZGVjX1JlZ2lzdGVyCi0gIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zMy5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKLSAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zMy5QeUNvZGVjX1N0cmVhbVJlYWRlcgotICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zMy5QeUNvZGVjX1N0cmVhbVdyaXRlcgotICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zMy5QeUNvZGVjX1N0cmljdEVycm9ycwotICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKLSAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjMzLlB5Q29tcGxleF9Gcm9tRG91YmxlcwotICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjMzLlB5Q29tcGxleF9JbWFnQXNEb3VibGUKLSAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zMy5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCi0gIFB5Q29tcGxleF9UeXBlPXB5dGhvbjMzLlB5Q29tcGxleF9UeXBlIERBVEEKLSAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zMy5QeURlc2NyX05ld0NsYXNzTWV0aG9kCi0gIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjMzLlB5RGVzY3JfTmV3R2V0U2V0Ci0gIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjMzLlB5RGVzY3JfTmV3TWVtYmVyCi0gIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjMzLlB5RGVzY3JfTmV3TWV0aG9kCi0gIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zMy5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQotICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zMy5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCi0gIFB5RGljdEtleXNfVHlwZT1weXRob24zMy5QeURpY3RLZXlzX1R5cGUgREFUQQotICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzMuUHlEaWN0UHJveHlfTmV3Ci0gIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzMuUHlEaWN0UHJveHlfVHlwZSBEQVRBCi0gIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjMzLlB5RGljdFZhbHVlc19UeXBlIERBVEEKLSAgUHlEaWN0X0NsZWFyPXB5dGhvbjMzLlB5RGljdF9DbGVhcgotICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzMuUHlEaWN0X0NvbnRhaW5zCi0gIFB5RGljdF9Db3B5PXB5dGhvbjMzLlB5RGljdF9Db3B5Ci0gIFB5RGljdF9EZWxJdGVtPXB5dGhvbjMzLlB5RGljdF9EZWxJdGVtCi0gIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9EZWxJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtCi0gIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCi0gIFB5RGljdF9JdGVtcz1weXRob24zMy5QeURpY3RfSXRlbXMKLSAgUHlEaWN0X0tleXM9cHl0aG9uMzMuUHlEaWN0X0tleXMKLSAgUHlEaWN0X01lcmdlPXB5dGhvbjMzLlB5RGljdF9NZXJnZQotICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zMy5QeURpY3RfTWVyZ2VGcm9tU2VxMgotICBQeURpY3RfTmV3PXB5dGhvbjMzLlB5RGljdF9OZXcKLSAgUHlEaWN0X05leHQ9cHl0aG9uMzMuUHlEaWN0X05leHQKLSAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzMuUHlEaWN0X1NldEl0ZW0KLSAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlEaWN0X1NldEl0ZW1TdHJpbmcKLSAgUHlEaWN0X1NpemU9cHl0aG9uMzMuUHlEaWN0X1NpemUKLSAgUHlEaWN0X1R5cGU9cHl0aG9uMzMuUHlEaWN0X1R5cGUgREFUQQotICBQeURpY3RfVXBkYXRlPXB5dGhvbjMzLlB5RGljdF9VcGRhdGUKLSAgUHlEaWN0X1ZhbHVlcz1weXRob24zMy5QeURpY3RfVmFsdWVzCi0gIFB5RWxsaXBzaXNfVHlwZT1weXRob24zMy5QeUVsbGlwc2lzX1R5cGUgREFUQQotICBQeUVudW1fVHlwZT1weXRob24zMy5QeUVudW1fVHlwZSBEQVRBCi0gIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjMzLlB5RXJyX0JhZEFyZ3VtZW50Ci0gIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zMy5QeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjMzLlB5RXJyX0NoZWNrU2lnbmFscwotICBQeUVycl9DbGVhcj1weXRob24zMy5QeUVycl9DbGVhcgotICBQeUVycl9EaXNwbGF5PXB5dGhvbjMzLlB5RXJyX0Rpc3BsYXkKLSAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMy5QeUVycl9FeGNlcHRpb25NYXRjaGVzCi0gIFB5RXJyX0ZldGNoPXB5dGhvbjMzLlB5RXJyX0ZldGNoCi0gIFB5RXJyX0Zvcm1hdD1weXRob24zMy5QeUVycl9Gb3JtYXQKLSAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjMzLlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzMuUHlFcnJfTmV3RXhjZXB0aW9uCi0gIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzMuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYwotICBQeUVycl9Ob01lbW9yeT1weXRob24zMy5QeUVycl9Ob01lbW9yeQotICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzMuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gIFB5RXJyX09jY3VycmVkPXB5dGhvbjMzLlB5RXJyX09jY3VycmVkCi0gIFB5RXJyX1ByaW50PXB5dGhvbjMzLlB5RXJyX1ByaW50Ci0gIFB5RXJyX1ByaW50RXg9cHl0aG9uMzMuUHlFcnJfUHJpbnRFeAotICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zMy5QeUVycl9Qcm9ncmFtVGV4dAotICBQeUVycl9SZXN0b3JlPXB5dGhvbjMzLlB5RXJyX1Jlc3RvcmUKLSAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJubwotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKLSAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjMzLlB5RXJyX1NldEludGVycnVwdAotICBQeUVycl9TZXROb25lPXB5dGhvbjMzLlB5RXJyX1NldE5vbmUKLSAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjMzLlB5RXJyX1NldE9iamVjdAotICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzMuUHlFcnJfU2V0U3RyaW5nCi0gIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjMzLlB5RXJyX1N5bnRheExvY2F0aW9uCi0gIFB5RXJyX1dhcm5FeD1weXRob24zMy5QeUVycl9XYXJuRXgKLSAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjMzLlB5RXJyX1dhcm5FeHBsaWNpdAotICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjMzLlB5RXJyX1dhcm5Gb3JtYXQKLSAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjMzLlB5RXJyX1dyaXRlVW5yYWlzYWJsZQotICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzMuUHlFdmFsX0FjcXVpcmVMb2NrCi0gIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzMuUHlFdmFsX0NhbGxGdW5jdGlvbgotICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zMy5QeUV2YWxfQ2FsbE1ldGhvZAotICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zMy5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcwotICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzMuUHlFdmFsX0V2YWxDb2RlCi0gIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjMzLlB5RXZhbF9FdmFsQ29kZUV4Ci0gIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzMuUHlFdmFsX0V2YWxGcmFtZQotICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzMuUHlFdmFsX0V2YWxGcmFtZUV4Ci0gIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zMy5QeUV2YWxfR2V0QnVpbHRpbnMKLSAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zMy5QeUV2YWxfR2V0Q2FsbFN0YXRzCi0gIFB5RXZhbF9HZXRGcmFtZT1weXRob24zMy5QeUV2YWxfR2V0RnJhbWUKLSAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjMzLlB5RXZhbF9HZXRGdW5jRGVzYwotICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzMuUHlFdmFsX0dldEZ1bmNOYW1lCi0gIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjMzLlB5RXZhbF9HZXRHbG9iYWxzCi0gIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzMuUHlFdmFsX0dldExvY2FscwotICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzMuUHlFdmFsX0luaXRUaHJlYWRzCi0gIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjMzLlB5RXZhbF9SZUluaXRUaHJlYWRzCi0gIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zMy5QeUV2YWxfUmVsZWFzZUxvY2sKLSAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1JlbGVhc2VUaHJlYWQKLSAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1NhdmVUaHJlYWQKLSAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zMy5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCi0gIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zMy5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQotICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zMy5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjMzLlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKLSAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zMy5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKLSAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzMuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQotICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzMuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKLSAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCi0gIFB5RXhjX0VPRkVycm9yPXB5dGhvbjMzLlB5RXhjX0VPRkVycm9yIERBVEEKLSAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zMy5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKLSAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXhjX0V4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zMy5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQotICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQotICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjMzLlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQotICBQeUV4Y19JT0Vycm9yPXB5dGhvbjMzLlB5RXhjX0lPRXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zMy5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCi0gIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCi0gIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzMuUHlFeGNfSW5kZXhFcnJvciBEQVRBCi0gIFB5RXhjX0tleUVycm9yPXB5dGhvbjMzLlB5RXhjX0tleUVycm9yIERBVEEKLSAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzMuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQotICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zMy5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjMzLlB5RXhjX01lbW9yeUVycm9yIERBVEEKLSAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjMzLlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX05hbWVFcnJvcj1weXRob24zMy5QeUV4Y19OYW1lRXJyb3IgREFUQQotICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjMzLlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQotICBQeUV4Y19PU0Vycm9yPXB5dGhvbjMzLlB5RXhjX09TRXJyb3IgREFUQQotICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjMzLlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQotICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzMuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKLSAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzMuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQotICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzMuUHlFeGNfUnVudGltZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQotICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjMzLlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQotICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zMy5QeUV4Y19TeW50YXhFcnJvciBEQVRBCi0gIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCi0gIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjMzLlB5RXhjX1N5c3RlbUVycm9yIERBVEEKLSAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zMy5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKLSAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzMuUHlFeGNfVGFiRXJyb3IgREFUQQotICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVHlwZUVycm9yIERBVEEKLSAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQotICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zMy5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCi0gIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVmFsdWVFcnJvciBEQVRBCi0gIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzMuUHlFeGNfV2FybmluZyBEQVRBCi0gIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjMzLlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKLSAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zMy5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zMy5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKLSAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zMy5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zMy5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKLSAgUHlGaWxlX0Zyb21GZD1weXRob24zMy5QeUZpbGVfRnJvbUZkCi0gIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjMzLlB5RmlsZV9HZXRMaW5lCi0gIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zMy5QeUZpbGVfV3JpdGVPYmplY3QKLSAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjMzLlB5RmlsZV9Xcml0ZVN0cmluZwotICBQeUZpbHRlcl9UeXBlPXB5dGhvbjMzLlB5RmlsdGVyX1R5cGUgREFUQQotICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjMzLlB5RmxvYXRfQXNEb3VibGUKLSAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjMzLlB5RmxvYXRfRnJvbURvdWJsZQotICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlGbG9hdF9Gcm9tU3RyaW5nCi0gIFB5RmxvYXRfR2V0SW5mbz1weXRob24zMy5QeUZsb2F0X0dldEluZm8KLSAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzMuUHlGbG9hdF9HZXRNYXgKLSAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzMuUHlGbG9hdF9HZXRNaW4KLSAgUHlGbG9hdF9UeXBlPXB5dGhvbjMzLlB5RmxvYXRfVHlwZSBEQVRBCi0gIFB5RnJvemVuU2V0X05ldz1weXRob24zMy5QeUZyb3plblNldF9OZXcKLSAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zMy5QeUZyb3plblNldF9UeXBlIERBVEEKLSAgUHlHQ19Db2xsZWN0PXB5dGhvbjMzLlB5R0NfQ29sbGVjdAotICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zMy5QeUdJTFN0YXRlX0Vuc3VyZQotICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zMy5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQotICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzMuUHlHSUxTdGF0ZV9SZWxlYXNlCi0gIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zMy5QeUdldFNldERlc2NyX1R5cGUgREFUQQotICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfQWRkTW9kdWxlCi0gIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzMuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgotICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjMzLlB5SW1wb3J0X0NsZWFudXAKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zMy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zMy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKLSAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzMuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TWFnaWNUYWcKLSAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zMy5QeUltcG9ydF9HZXRNb2R1bGVEaWN0Ci0gIFB5SW1wb3J0X0ltcG9ydD1weXRob24zMy5QeUltcG9ydF9JbXBvcnQKLSAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jawotICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zMy5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zMy5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX05ldwotICBQeUl0ZXJfTmV4dD1weXRob24zMy5QeUl0ZXJfTmV4dAotICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzMuUHlMaXN0SXRlcl9UeXBlIERBVEEKLSAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjMzLlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzMuUHlMaXN0X0FwcGVuZAotICBQeUxpc3RfQXNUdXBsZT1weXRob24zMy5QeUxpc3RfQXNUdXBsZQotICBQeUxpc3RfR2V0SXRlbT1weXRob24zMy5QeUxpc3RfR2V0SXRlbQotICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzMuUHlMaXN0X0dldFNsaWNlCi0gIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzMuUHlMaXN0X0luc2VydAotICBQeUxpc3RfTmV3PXB5dGhvbjMzLlB5TGlzdF9OZXcKLSAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzMuUHlMaXN0X1JldmVyc2UKLSAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzMuUHlMaXN0X1NldEl0ZW0KLSAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjMzLlB5TGlzdF9TZXRTbGljZQotICBQeUxpc3RfU2l6ZT1weXRob24zMy5QeUxpc3RfU2l6ZQotICBQeUxpc3RfU29ydD1weXRob24zMy5QeUxpc3RfU29ydAotICBQeUxpc3RfVHlwZT1weXRob24zMy5QeUxpc3RfVHlwZSBEQVRBCi0gIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjMzLlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjMzLlB5TG9uZ19Bc0RvdWJsZQotICBQeUxvbmdfQXNMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmcKLSAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdwotICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zMy5QeUxvbmdfQXNMb25nTG9uZwotICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Bc1NpemVfdAotICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Bc1NzaXplX3QKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwotICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCi0gIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzMuUHlMb25nX0FzVm9pZFB0cgotICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zMy5QeUxvbmdfRnJvbURvdWJsZQotICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21Mb25nCi0gIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21Mb25nTG9uZwotICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zMy5QeUxvbmdfRnJvbVNpemVfdAotICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzMuUHlMb25nX0Zyb21Tc2l6ZV90Ci0gIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tU3RyaW5nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjMzLlB5TG9uZ19Gcm9tVm9pZFB0cgotICBQeUxvbmdfR2V0SW5mbz1weXRob24zMy5QeUxvbmdfR2V0SW5mbwotICBQeUxvbmdfVHlwZT1weXRob24zMy5QeUxvbmdfVHlwZSBEQVRBCi0gIFB5TWFwX1R5cGU9cHl0aG9uMzMuUHlNYXBfVHlwZSBEQVRBCi0gIFB5TWFwcGluZ19DaGVjaz1weXRob24zMy5QeU1hcHBpbmdfQ2hlY2sKLSAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zMy5QeU1hcHBpbmdfSGFzS2V5Ci0gIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX0hhc0tleVN0cmluZwotICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzMuUHlNYXBwaW5nX0l0ZW1zCi0gIFB5TWFwcGluZ19LZXlzPXB5dGhvbjMzLlB5TWFwcGluZ19LZXlzCi0gIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzMuUHlNYXBwaW5nX0xlbmd0aAotICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zMy5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICBQeU1hcHBpbmdfU2l6ZT1weXRob24zMy5QeU1hcHBpbmdfU2l6ZQotICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjMzLlB5TWFwcGluZ19WYWx1ZXMKLSAgUHlNZW1fRnJlZT1weXRob24zMy5QeU1lbV9GcmVlCi0gIFB5TWVtX01hbGxvYz1weXRob24zMy5QeU1lbV9NYWxsb2MKLSAgUHlNZW1fUmVhbGxvYz1weXRob24zMy5QeU1lbV9SZWFsbG9jCi0gIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zMy5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQotICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zMy5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAotICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zMy5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cwotICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zMy5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCi0gIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zMy5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQotICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zMy5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAotICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzMuUHlNb2R1bGVfQWRkT2JqZWN0Ci0gIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjMzLlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50Ci0gIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzMuUHlNb2R1bGVfQ3JlYXRlMgotICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RGVmCi0gIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RGljdAotICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zMy5QeU1vZHVsZV9HZXRGaWxlbmFtZQotICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zMy5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAotICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjMzLlB5TW9kdWxlX0dldE5hbWUKLSAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0U3RhdGUKLSAgUHlNb2R1bGVfTmV3PXB5dGhvbjMzLlB5TW9kdWxlX05ldwotICBQeU1vZHVsZV9UeXBlPXB5dGhvbjMzLlB5TW9kdWxlX1R5cGUgREFUQQotICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjMzLlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQotICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zMy5QeU51bWJlcl9BYnNvbHV0ZQotICBQeU51bWJlcl9BZGQ9cHl0aG9uMzMuUHlOdW1iZXJfQWRkCi0gIFB5TnVtYmVyX0FuZD1weXRob24zMy5QeU51bWJlcl9BbmQKLSAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjMzLlB5TnVtYmVyX0FzU3NpemVfdAotICBQeU51bWJlcl9DaGVjaz1weXRob24zMy5QeU51bWJlcl9DaGVjawotICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzMuUHlOdW1iZXJfRGl2bW9kCi0gIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjMzLlB5TnVtYmVyX0Zsb2F0Ci0gIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0Zsb29yRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZUFkZAotICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VBbmQKLSAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQotICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZU9yCi0gIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlUG93ZXIKLSAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCi0gIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAotICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0Ci0gIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVhvcgotICBQeU51bWJlcl9JbmRleD1weXRob24zMy5QeU51bWJlcl9JbmRleAotICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzMuUHlOdW1iZXJfSW52ZXJ0Ci0gIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzMuUHlOdW1iZXJfTG9uZwotICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfTHNoaWZ0Ci0gIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjMzLlB5TnVtYmVyX011bHRpcGx5Ci0gIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjMzLlB5TnVtYmVyX05lZ2F0aXZlCi0gIFB5TnVtYmVyX09yPXB5dGhvbjMzLlB5TnVtYmVyX09yCi0gIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjMzLlB5TnVtYmVyX1Bvc2l0aXZlCi0gIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjMzLlB5TnVtYmVyX1Bvd2VyCi0gIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zMy5QeU51bWJlcl9SZW1haW5kZXIKLSAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX1JzaGlmdAotICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zMy5QeU51bWJlcl9TdWJ0cmFjdAotICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzMuUHlOdW1iZXJfVG9CYXNlCi0gIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzMuUHlOdW1iZXJfVHJ1ZURpdmlkZQotICBQeU51bWJlcl9Yb3I9cHl0aG9uMzMuUHlOdW1iZXJfWG9yCi0gIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjMzLlB5T1NfQWZ0ZXJGb3JrCi0gIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzMuUHlPU19Jbml0SW50ZXJydXB0cwotICBQeU9TX0lucHV0SG9vaz1weXRob24zMy5QeU9TX0lucHV0SG9vayBEQVRBCi0gIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzMuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAotICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjMzLlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQotICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzMuUHlPU19kb3VibGVfdG9fc3RyaW5nCi0gIFB5T1NfZ2V0c2lnPXB5dGhvbjMzLlB5T1NfZ2V0c2lnCi0gIFB5T1NfbXlzdHJpY21wPXB5dGhvbjMzLlB5T1NfbXlzdHJpY21wCi0gIFB5T1NfbXlzdHJuaWNtcD1weXRob24zMy5QeU9TX215c3RybmljbXAKLSAgUHlPU19zZXRzaWc9cHl0aG9uMzMuUHlPU19zZXRzaWcKLSAgUHlPU19zbnByaW50Zj1weXRob24zMy5QeU9TX3NucHJpbnRmCi0gIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zMy5QeU9TX3N0cmluZ190b19kb3VibGUKLSAgUHlPU19zdHJ0b2w9cHl0aG9uMzMuUHlPU19zdHJ0b2wKLSAgUHlPU19zdHJ0b3VsPXB5dGhvbjMzLlB5T1Nfc3RydG91bAotICBQeU9TX3ZzbnByaW50Zj1weXRob24zMy5QeU9TX3ZzbnByaW50ZgotICBQeU9iamVjdF9BU0NJST1weXRob24zMy5QeU9iamVjdF9BU0NJSQotICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNDaGFyQnVmZmVyCi0gIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzMuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgotICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgotICBQeU9iamVjdF9CeXRlcz1weXRob24zMy5QeU9iamVjdF9CeXRlcwotICBQeU9iamVjdF9DYWxsPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGwKLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxGdW5jdGlvbgotICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKLSAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zMy5QeU9iamVjdF9DYWxsTWV0aG9kCi0gIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE9iamVjdAotICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzMuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcwotICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjMzLlB5T2JqZWN0X0RlbEl0ZW0KLSAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zMy5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCi0gIFB5T2JqZWN0X0Rpcj1weXRob24zMy5QeU9iamVjdF9EaXIKLSAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjMzLlB5T2JqZWN0X0Zvcm1hdAotICBQeU9iamVjdF9GcmVlPXB5dGhvbjMzLlB5T2JqZWN0X0ZyZWUKLSAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjMzLlB5T2JqZWN0X0dDX0RlbAotICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zMy5QeU9iamVjdF9HQ19UcmFjawotICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjMzLlB5T2JqZWN0X0dDX1VuVHJhY2sKLSAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKLSAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKLSAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zMy5QeU9iamVjdF9HZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfR2V0QXR0clN0cmluZwotICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjMzLlB5T2JqZWN0X0dldEl0ZW0KLSAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zMy5QeU9iamVjdF9HZXRJdGVyCi0gIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzMuUHlPYmplY3RfSGFzQXR0cgotICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgUHlPYmplY3RfSGFzaD1weXRob24zMy5QeU9iamVjdF9IYXNoCi0gIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zMy5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKLSAgUHlPYmplY3RfSW5pdD1weXRob24zMy5QeU9iamVjdF9Jbml0Ci0gIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzMuUHlPYmplY3RfSW5pdFZhcgotICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjMzLlB5T2JqZWN0X0lzSW5zdGFuY2UKLSAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zMy5QeU9iamVjdF9Jc1N1YmNsYXNzCi0gIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zMy5QeU9iamVjdF9Jc1RydWUKLSAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjMzLlB5T2JqZWN0X0xlbmd0aAotICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzMuUHlPYmplY3RfTWFsbG9jCi0gIFB5T2JqZWN0X05vdD1weXRob24zMy5QeU9iamVjdF9Ob3QKLSAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zMy5QeU9iamVjdF9SZWFsbG9jCi0gIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzMuUHlPYmplY3RfUmVwcgotICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zMy5QeU9iamVjdF9SaWNoQ29tcGFyZQotICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzMuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCi0gIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjMzLlB5T2JqZWN0X1NlbGZJdGVyCi0gIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfU2V0QXR0cgotICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zMy5QeU9iamVjdF9TZXRJdGVtCi0gIFB5T2JqZWN0X1NpemU9cHl0aG9uMzMuUHlPYmplY3RfU2l6ZQotICBQeU9iamVjdF9TdHI9cHl0aG9uMzMuUHlPYmplY3RfU3RyCi0gIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzMuUHlPYmplY3RfVHlwZSBEQVRBCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjMzLlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzMuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncwotICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzMuUHlQcm9wZXJ0eV9UeXBlIERBVEEKLSAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zMy5QeVJhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlSYW5nZV9UeXBlPXB5dGhvbjMzLlB5UmFuZ2VfVHlwZSBEQVRBCi0gIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zMy5QeVJldmVyc2VkX1R5cGUgREFUQQotICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjMzLlB5U2VxSXRlcl9OZXcKLSAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzMuUHlTZXFJdGVyX1R5cGUgREFUQQotICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjMzLlB5U2VxdWVuY2VfQ2hlY2sKLSAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db25jYXQKLSAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zMy5QeVNlcXVlbmNlX0NvbnRhaW5zCi0gIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db3VudAotICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9EZWxJdGVtCi0gIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9EZWxTbGljZQotICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzMuUHlTZXF1ZW5jZV9GYXN0Ci0gIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zMy5QeVNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX0dldFNsaWNlCi0gIFB5U2VxdWVuY2VfSW49cHl0aG9uMzMuUHlTZXF1ZW5jZV9JbgotICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0Ci0gIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zMy5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKLSAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zMy5QeVNlcXVlbmNlX0luZGV4Ci0gIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjMzLlB5U2VxdWVuY2VfTGVuZ3RoCi0gIFB5U2VxdWVuY2VfTGlzdD1weXRob24zMy5QeVNlcXVlbmNlX0xpc3QKLSAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9SZXBlYXQKLSAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2V0SXRlbQotICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2l6ZQotICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjMzLlB5U2VxdWVuY2VfVHVwbGUKLSAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzMuUHlTZXRJdGVyX1R5cGUgREFUQQotICBQeVNldF9BZGQ9cHl0aG9uMzMuUHlTZXRfQWRkCi0gIFB5U2V0X0NsZWFyPXB5dGhvbjMzLlB5U2V0X0NsZWFyCi0gIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjMzLlB5U2V0X0NvbnRhaW5zCi0gIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzMuUHlTZXRfRGlzY2FyZAotICBQeVNldF9OZXc9cHl0aG9uMzMuUHlTZXRfTmV3Ci0gIFB5U2V0X1BvcD1weXRob24zMy5QeVNldF9Qb3AKLSAgUHlTZXRfU2l6ZT1weXRob24zMy5QeVNldF9TaXplCi0gIFB5U2V0X1R5cGU9cHl0aG9uMzMuUHlTZXRfVHlwZSBEQVRBCi0gIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zMy5QeVNsaWNlX0dldEluZGljZXMKLSAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzMuUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAgUHlTbGljZV9OZXc9cHl0aG9uMzMuUHlTbGljZV9OZXcKLSAgUHlTbGljZV9UeXBlPXB5dGhvbjMzLlB5U2xpY2VfVHlwZSBEQVRBCi0gIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zMy5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQotICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzMuUHlTdGF0ZV9GaW5kTW9kdWxlCi0gIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfQWRkTW9kdWxlCi0gIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfUmVtb3ZlTW9kdWxlCi0gIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQotICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCi0gIFB5U3VwZXJfVHlwZT1weXRob24zMy5QeVN1cGVyX1R5cGUgREFUQQotICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjMzLlB5U3lzX0FkZFdhcm5PcHRpb24KLSAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzMuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKLSAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjMzLlB5U3lzX0Zvcm1hdFN0ZGVycgotICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzMuUHlTeXNfRm9ybWF0U3Rkb3V0Ci0gIFB5U3lzX0dldE9iamVjdD1weXRob24zMy5QeVN5c19HZXRPYmplY3QKLSAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzMuUHlTeXNfSGFzV2Fybk9wdGlvbnMKLSAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zMy5QeVN5c19SZXNldFdhcm5PcHRpb25zCi0gIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzMuUHlTeXNfU2V0QXJndgotICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzMuUHlTeXNfU2V0QXJndkV4Ci0gIFB5U3lzX1NldE9iamVjdD1weXRob24zMy5QeVN5c19TZXRPYmplY3QKLSAgUHlTeXNfU2V0UGF0aD1weXRob24zMy5QeVN5c19TZXRQYXRoCi0gIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjMzLlB5U3lzX1dyaXRlU3RkZXJyCi0gIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjMzLlB5U3lzX1dyaXRlU3Rkb3V0Ci0gIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9DbGVhcgotICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zMy5QeVRocmVhZFN0YXRlX0RlbGV0ZQotICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50Ci0gIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfR2V0Ci0gIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zMy5QeVRocmVhZFN0YXRlX0dldERpY3QKLSAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9OZXcKLSAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zMy5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCi0gIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zMy5QeVRocmVhZFN0YXRlX1N3YXAKLSAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zMy5QeVRyYWNlQmFja19IZXJlCi0gIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjMzLlB5VHJhY2VCYWNrX1ByaW50Ci0gIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzMuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCi0gIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzMuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCi0gIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zMy5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKLSAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjMzLlB5VHVwbGVfR2V0SXRlbQotICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjMzLlB5VHVwbGVfR2V0U2xpY2UKLSAgUHlUdXBsZV9OZXc9cHl0aG9uMzMuUHlUdXBsZV9OZXcKLSAgUHlUdXBsZV9QYWNrPXB5dGhvbjMzLlB5VHVwbGVfUGFjawotICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzMuUHlUdXBsZV9TZXRJdGVtCi0gIFB5VHVwbGVfU2l6ZT1weXRob24zMy5QeVR1cGxlX1NpemUKLSAgUHlUdXBsZV9UeXBlPXB5dGhvbjMzLlB5VHVwbGVfVHlwZSBEQVRBCi0gIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjMzLlB5VHlwZV9DbGVhckNhY2hlCi0gIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zMy5QeVR5cGVfRnJvbVNwZWMKLSAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjMzLlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcwotICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjMzLlB5VHlwZV9HZW5lcmljQWxsb2MKLSAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzMuUHlUeXBlX0dlbmVyaWNOZXcKLSAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjMzLlB5VHlwZV9HZXRGbGFncwotICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjMzLlB5VHlwZV9Jc1N1YnR5cGUKLSAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjMzLlB5VHlwZV9Nb2RpZmllZAotICBQeVR5cGVfUmVhZHk9cHl0aG9uMzMuUHlUeXBlX1JlYWR5Ci0gIFB5VHlwZV9UeXBlPXB5dGhvbjMzLlB5VHlwZV9UeXBlIERBVEEKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZwotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zMy5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FwcGVuZAotICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXBwZW5kQW5kRGVsCi0gIFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNBU0NJSVN0cmluZwotICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNDaGFybWFwU3RyaW5nCi0gIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0RlY29kZWRPYmplY3QKLSAgUHlVbmljb2RlX0FzRGVjb2RlZFVuaWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0RlY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRPYmplY3QKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFN0cmluZwotICBQeVVuaWNvZGVfQXNFbmNvZGVkVW5pY29kZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFVuaWNvZGUKLSAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNMYXRpbjFTdHJpbmcKLSAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZwotICBQeVVuaWNvZGVfQXNVVEYxNlN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzVVRGMTZTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1VURjMyU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1VURjhTdHJpbmcKLSAgUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzVW5pY29kZUVzY2FwZVN0cmluZwotICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzV2lkZUNoYXIKLSAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9DbGVhckZyZWVsaXN0Ci0gIFB5VW5pY29kZV9Db21wYXJlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQ29tcGFyZQotICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQ29uY2F0Ci0gIFB5VW5pY29kZV9Db250YWlucz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0NvbnRhaW5zCi0gIFB5VW5pY29kZV9Db3VudD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0NvdW50Ci0gIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGUKLSAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlQVNDSUkKLSAgUHlVbmljb2RlX0RlY29kZUNoYXJtYXA9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVDaGFybWFwCi0gIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVGU0RlZmF1bHQKLSAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVGU0RlZmF1bHRBbmRTaXplCi0gIFB5VW5pY29kZV9EZWNvZGVMYXRpbjE9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVMYXRpbjEKLSAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTZTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjMyU3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVURjg9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4U3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVbmljb2RlRXNjYXBlCi0gIFB5VW5pY29kZV9GU0NvbnZlcnRlcj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0ZTQ29udmVydGVyCi0gIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9GU0RlY29kZXIKLSAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9GaW5kCi0gIFB5VW5pY29kZV9Gb3JtYXQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gb3JtYXQKLSAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbUVuY29kZWRPYmplY3QKLSAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tRm9ybWF0Ci0gIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21Gb3JtYXRWCi0gIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbU9iamVjdAotICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tT3JkaW5hbAotICBQeVVuaWNvZGVfRnJvbVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21TdHJpbmcKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21XaWRlQ2hhcgotICBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfR2V0RGVmYXVsdEVuY29kaW5nCi0gIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfR2V0U2l6ZQotICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfSXNJZGVudGlmaWVyCi0gIFB5VW5pY29kZV9Kb2luPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfSm9pbgotICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfUGFydGl0aW9uCi0gIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfUlBhcnRpdGlvbgotICBQeVVuaWNvZGVfUlNwbGl0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfUlNwbGl0Ci0gIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfUmVwbGFjZQotICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfUmVzaXplCi0gIFB5VW5pY29kZV9SaWNoQ29tcGFyZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1JpY2hDb21wYXJlCi0gIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9TZXREZWZhdWx0RW5jb2RpbmcKLSAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfU3BsaXQKLSAgUHlVbmljb2RlX1NwbGl0bGluZXM9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9TcGxpdGxpbmVzCi0gIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9UYWlsbWF0Y2gKLSAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1RyYW5zbGF0ZQotICBQeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcD1weXRob24zMy5QeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcAotICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZwotICBQeVVuaWNvZGVfRGVjb2RlVVRGNz1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGNwotICBQeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwKLSAgUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdD1weXRob24zMy5QeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0Ci0gIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nCi0gIFB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbD1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWwKLSAgUHlVbmljb2RlX0ludGVybkluUGxhY2U9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkluUGxhY2UKLSAgUHlVbmljb2RlX1R5cGU9cHl0aG9uMzMuUHlVbmljb2RlX1R5cGUgREFUQQotICBQeVdlYWtyZWZfR2V0T2JqZWN0PXB5dGhvbjMzLlB5V2Vha3JlZl9HZXRPYmplY3QgREFUQQotICBQeVdlYWtyZWZfTmV3UHJveHk9cHl0aG9uMzMuUHlXZWFrcmVmX05ld1Byb3h5Ci0gIFB5V2Vha3JlZl9OZXdSZWY9cHl0aG9uMzMuUHlXZWFrcmVmX05ld1JlZgotICBQeVdyYXBwZXJEZXNjcl9UeXBlPXB5dGhvbjMzLlB5V3JhcHBlckRlc2NyX1R5cGUgREFUQQotICBQeVdyYXBwZXJfTmV3PXB5dGhvbjMzLlB5V3JhcHBlcl9OZXcKLSAgUHlaaXBfVHlwZT1weXRob24zMy5QeVppcF9UeXBlIERBVEEKLSAgUHlfQWRkUGVuZGluZ0NhbGw9cHl0aG9uMzMuUHlfQWRkUGVuZGluZ0NhbGwKLSAgUHlfQXRFeGl0PXB5dGhvbjMzLlB5X0F0RXhpdAotICBQeV9CdWlsZFZhbHVlPXB5dGhvbjMzLlB5X0J1aWxkVmFsdWUKLSAgUHlfQ29tcGlsZVN0cmluZz1weXRob24zMy5QeV9Db21waWxlU3RyaW5nCi0gIFB5X0RlY1JlZj1weXRob24zMy5QeV9EZWNSZWYKLSAgUHlfRW5kSW50ZXJwcmV0ZXI9cHl0aG9uMzMuUHlfRW5kSW50ZXJwcmV0ZXIKLSAgUHlfRXhpdD1weXRob24zMy5QeV9FeGl0Ci0gIFB5X0ZhdGFsRXJyb3I9cHl0aG9uMzMuUHlfRmF0YWxFcnJvcgotICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nPXB5dGhvbjMzLlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgREFUQQotICBQeV9GaW5hbGl6ZT1weXRob24zMy5QeV9GaW5hbGl6ZQotICBQeV9HZXRCdWlsZEluZm89cHl0aG9uMzMuUHlfR2V0QnVpbGRJbmZvCi0gIFB5X0dldENvbXBpbGVyPXB5dGhvbjMzLlB5X0dldENvbXBpbGVyCi0gIFB5X0dldENvcHlyaWdodD1weXRob24zMy5QeV9HZXRDb3B5cmlnaHQKLSAgUHlfR2V0RXhlY1ByZWZpeD1weXRob24zMy5QeV9HZXRFeGVjUHJlZml4Ci0gIFB5X0dldFBhdGg9cHl0aG9uMzMuUHlfR2V0UGF0aAotICBQeV9HZXRQbGF0Zm9ybT1weXRob24zMy5QeV9HZXRQbGF0Zm9ybQotICBQeV9HZXRQcmVmaXg9cHl0aG9uMzMuUHlfR2V0UHJlZml4Ci0gIFB5X0dldFByb2dyYW1GdWxsUGF0aD1weXRob24zMy5QeV9HZXRQcm9ncmFtRnVsbFBhdGgKLSAgUHlfR2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzMuUHlfR2V0UHJvZ3JhbU5hbWUKLSAgUHlfR2V0UHl0aG9uSG9tZT1weXRob24zMy5QeV9HZXRQeXRob25Ib21lCi0gIFB5X0dldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLlB5X0dldFJlY3Vyc2lvbkxpbWl0Ci0gIFB5X0dldFZlcnNpb249cHl0aG9uMzMuUHlfR2V0VmVyc2lvbgotICBQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nPXB5dGhvbjMzLlB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgREFUQQotICBQeV9JbmNSZWY9cHl0aG9uMzMuUHlfSW5jUmVmCi0gIFB5X0luaXRpYWxpemU9cHl0aG9uMzMuUHlfSW5pdGlhbGl6ZQotICBQeV9Jbml0aWFsaXplRXg9cHl0aG9uMzMuUHlfSW5pdGlhbGl6ZUV4Ci0gIFB5X0lzSW5pdGlhbGl6ZWQ9cHl0aG9uMzMuUHlfSXNJbml0aWFsaXplZAotICBQeV9NYWluPXB5dGhvbjMzLlB5X01haW4KLSAgUHlfTWFrZVBlbmRpbmdDYWxscz1weXRob24zMy5QeV9NYWtlUGVuZGluZ0NhbGxzCi0gIFB5X05ld0ludGVycHJldGVyPXB5dGhvbjMzLlB5X05ld0ludGVycHJldGVyCi0gIFB5X1JlcHJFbnRlcj1weXRob24zMy5QeV9SZXByRW50ZXIKLSAgUHlfUmVwckxlYXZlPXB5dGhvbjMzLlB5X1JlcHJMZWF2ZQotICBQeV9TZXRQcm9ncmFtTmFtZT1weXRob24zMy5QeV9TZXRQcm9ncmFtTmFtZQotICBQeV9TZXRQeXRob25Ib21lPXB5dGhvbjMzLlB5X1NldFB5dGhvbkhvbWUKLSAgUHlfU2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuUHlfU2V0UmVjdXJzaW9uTGltaXQKLSAgUHlfU3ltdGFibGVTdHJpbmc9cHl0aG9uMzMuUHlfU3ltdGFibGVTdHJpbmcKLSAgUHlfVmFCdWlsZFZhbHVlPXB5dGhvbjMzLlB5X1ZhQnVpbGRWYWx1ZQotICBfUHlFcnJfQmFkSW50ZXJuYWxDYWxsPXB5dGhvbjMzLl9QeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVD1weXRob24zMy5fUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUCi0gIF9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUPXB5dGhvbjMzLl9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUCi0gIF9QeU9iamVjdF9HQ19NYWxsb2M9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX01hbGxvYwotICBfUHlPYmplY3RfR0NfTmV3PXB5dGhvbjMzLl9QeU9iamVjdF9HQ19OZXcKLSAgX1B5T2JqZWN0X0dDX05ld1Zhcj1weXRob24zMy5fUHlPYmplY3RfR0NfTmV3VmFyCi0gIF9QeU9iamVjdF9HQ19SZXNpemU9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX1Jlc2l6ZQotICBfUHlPYmplY3RfTmV3PXB5dGhvbjMzLl9QeU9iamVjdF9OZXcKLSAgX1B5T2JqZWN0X05ld1Zhcj1weXRob24zMy5fUHlPYmplY3RfTmV3VmFyCi0gIF9QeVN0YXRlX0FkZE1vZHVsZT1weXRob24zMy5fUHlTdGF0ZV9BZGRNb2R1bGUKLSAgX1B5VGhyZWFkU3RhdGVfSW5pdD1weXRob24zMy5fUHlUaHJlYWRTdGF0ZV9Jbml0Ci0gIF9QeVRocmVhZFN0YXRlX1ByZWFsbG9jPXB5dGhvbjMzLl9QeVRocmVhZFN0YXRlX1ByZWFsbG9jCi0gIF9QeVRyYXNoX2RlbGV0ZV9sYXRlcj1weXRob24zMy5fUHlUcmFzaF9kZWxldGVfbGF0ZXIgREFUQQotICBfUHlUcmFzaF9kZWxldGVfbmVzdGluZz1weXRob24zMy5fUHlUcmFzaF9kZWxldGVfbmVzdGluZyBEQVRBCi0gIF9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0PXB5dGhvbjMzLl9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0Ci0gIF9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW49cHl0aG9uMzMuX1B5VHJhc2hfZGVzdHJveV9jaGFpbgotICBfUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlPXB5dGhvbjMzLl9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGUgREFUQQotICBfUHlXZWFrcmVmX1Byb3h5VHlwZT1weXRob24zMy5fUHlXZWFrcmVmX1Byb3h5VHlwZSBEQVRBCi0gIF9QeVdlYWtyZWZfUmVmVHlwZT1weXRob24zMy5fUHlXZWFrcmVmX1JlZlR5cGUgREFUQQotICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zMy5fUHlfQnVpbGRWYWx1ZV9TaXplVAotICBfUHlfQ2hlY2tSZWN1cnNpb25MaW1pdD1weXRob24zMy5fUHlfQ2hlY2tSZWN1cnNpb25MaW1pdCBEQVRBCi0gIF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGw9cHl0aG9uMzMuX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbAotICBfUHlfRGVhbGxvYz1weXRob24zMy5fUHlfRGVhbGxvYwotICBfUHlfRWxsaXBzaXNPYmplY3Q9cHl0aG9uMzMuX1B5X0VsbGlwc2lzT2JqZWN0IERBVEEKLSAgX1B5X0ZhbHNlU3RydWN0PXB5dGhvbjMzLl9QeV9GYWxzZVN0cnVjdCBEQVRBCi0gIF9QeV9Ob25lU3RydWN0PXB5dGhvbjMzLl9QeV9Ob25lU3RydWN0IERBVEEKLSAgX1B5X05vdEltcGxlbWVudGVkU3RydWN0PXB5dGhvbjMzLl9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdCBEQVRBCi0gIF9QeV9Td2FwcGVkT3A9cHl0aG9uMzMuX1B5X1N3YXBwZWRPcCBEQVRBCi0gIF9QeV9UcnVlU3RydWN0PXB5dGhvbjMzLl9QeV9UcnVlU3RydWN0IERBVEEKLSAgX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVD1weXRob24zMy5fUHlfVmFCdWlsZFZhbHVlX1NpemVUCi0gIF9QeUFyZ19QYXJzZV9TaXplVD1weXRob24zMy5fUHlBcmdfUGFyc2VfU2l6ZVQKLSAgX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQKLSAgX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVD1weXRob24zMy5fUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCi0gIF9QeUFyZ19WYVBhcnNlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19WYVBhcnNlX1NpemVUCi0gIF9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVD1weXRob24zMy5fUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKLSAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKKyAgUHlBcmdfUGFyc2U9cHl0aG9uMzQuUHlBcmdfUGFyc2UKKyAgUHlBcmdfUGFyc2VUdXBsZT1weXRob24zNC5QeUFyZ19QYXJzZVR1cGxlCisgIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zNC5QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMKKyAgUHlBcmdfVW5wYWNrVHVwbGU9cHl0aG9uMzQuUHlBcmdfVW5wYWNrVHVwbGUKKyAgUHlBcmdfVmFQYXJzZT1weXRob24zNC5QeUFyZ19WYVBhcnNlCisgIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjM0LlB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzCisgIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cz1weXRob24zNC5QeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHMKKyAgUHlCYXNlT2JqZWN0X1R5cGU9cHl0aG9uMzQuUHlCYXNlT2JqZWN0X1R5cGUgREFUQQorICBQeUJvb2xfRnJvbUxvbmc9cHl0aG9uMzQuUHlCb29sX0Zyb21Mb25nCisgIFB5Qm9vbF9UeXBlPXB5dGhvbjM0LlB5Qm9vbF9UeXBlIERBVEEKKyAgUHlCeXRlQXJyYXlJdGVyX1R5cGU9cHl0aG9uMzQuUHlCeXRlQXJyYXlJdGVyX1R5cGUgREFUQQorICBQeUJ5dGVBcnJheV9Bc1N0cmluZz1weXRob24zNC5QeUJ5dGVBcnJheV9Bc1N0cmluZworICBQeUJ5dGVBcnJheV9Db25jYXQ9cHl0aG9uMzQuUHlCeXRlQXJyYXlfQ29uY2F0CisgIFB5Qnl0ZUFycmF5X0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlCeXRlQXJyYXlfRnJvbU9iamVjdAorICBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZQorICBQeUJ5dGVBcnJheV9SZXNpemU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfUmVzaXplCisgIFB5Qnl0ZUFycmF5X1NpemU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfU2l6ZQorICBQeUJ5dGVBcnJheV9UeXBlPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1R5cGUgREFUQQorICBQeUJ5dGVzSXRlcl9UeXBlPXB5dGhvbjM0LlB5Qnl0ZXNJdGVyX1R5cGUgREFUQQorICBQeUJ5dGVzX0FzU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZXNfQXNTdHJpbmcKKyAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUKKyAgUHlCeXRlc19Db25jYXQ9cHl0aG9uMzQuUHlCeXRlc19Db25jYXQKKyAgUHlCeXRlc19Db25jYXRBbmREZWw9cHl0aG9uMzQuUHlCeXRlc19Db25jYXRBbmREZWwKKyAgUHlCeXRlc19EZWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlCeXRlc19EZWNvZGVFc2NhcGUKKyAgUHlCeXRlc19Gcm9tRm9ybWF0PXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbUZvcm1hdAorICBQeUJ5dGVzX0Zyb21Gb3JtYXRWPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbUZvcm1hdFYKKyAgUHlCeXRlc19Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbU9iamVjdAorICBQeUJ5dGVzX0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlCeXRlc19Gcm9tU3RyaW5nCisgIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQorICBQeUJ5dGVzX1JlcHI9cHl0aG9uMzQuUHlCeXRlc19SZXByCisgIFB5Qnl0ZXNfU2l6ZT1weXRob24zNC5QeUJ5dGVzX1NpemUKKyAgUHlCeXRlc19UeXBlPXB5dGhvbjM0LlB5Qnl0ZXNfVHlwZSBEQVRBCisgIFB5Q0Z1bmN0aW9uX0NhbGw9cHl0aG9uMzQuUHlDRnVuY3Rpb25fQ2FsbAorICBQeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3QKKyAgUHlDRnVuY3Rpb25fR2V0RmxhZ3M9cHl0aG9uMzQuUHlDRnVuY3Rpb25fR2V0RmxhZ3MKKyAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb249cHl0aG9uMzQuUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KKyAgUHlDRnVuY3Rpb25fR2V0U2VsZj1weXRob24zNC5QeUNGdW5jdGlvbl9HZXRTZWxmCisgIFB5Q0Z1bmN0aW9uX05ldz1weXRob24zNC5QeUNGdW5jdGlvbl9OZXcKKyAgUHlDRnVuY3Rpb25fTmV3RXg9cHl0aG9uMzQuUHlDRnVuY3Rpb25fTmV3RXgKKyAgUHlDRnVuY3Rpb25fVHlwZT1weXRob24zNC5QeUNGdW5jdGlvbl9UeXBlIERBVEEKKyAgUHlDYWxsSXRlcl9OZXc9cHl0aG9uMzQuUHlDYWxsSXRlcl9OZXcKKyAgUHlDYWxsSXRlcl9UeXBlPXB5dGhvbjM0LlB5Q2FsbEl0ZXJfVHlwZSBEQVRBCisgIFB5Q2FsbGFibGVfQ2hlY2s9cHl0aG9uMzQuUHlDYWxsYWJsZV9DaGVjaworICBQeUNhcHN1bGVfR2V0Q29udGV4dD1weXRob24zNC5QeUNhcHN1bGVfR2V0Q29udGV4dAorICBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3Rvcj1weXRob24zNC5QeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcgorICBQeUNhcHN1bGVfR2V0TmFtZT1weXRob24zNC5QeUNhcHN1bGVfR2V0TmFtZQorICBQeUNhcHN1bGVfR2V0UG9pbnRlcj1weXRob24zNC5QeUNhcHN1bGVfR2V0UG9pbnRlcgorICBQeUNhcHN1bGVfSW1wb3J0PXB5dGhvbjM0LlB5Q2Fwc3VsZV9JbXBvcnQKKyAgUHlDYXBzdWxlX0lzVmFsaWQ9cHl0aG9uMzQuUHlDYXBzdWxlX0lzVmFsaWQKKyAgUHlDYXBzdWxlX05ldz1weXRob24zNC5QeUNhcHN1bGVfTmV3CisgIFB5Q2Fwc3VsZV9TZXRDb250ZXh0PXB5dGhvbjM0LlB5Q2Fwc3VsZV9TZXRDb250ZXh0CisgIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yPXB5dGhvbjM0LlB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yCisgIFB5Q2Fwc3VsZV9TZXROYW1lPXB5dGhvbjM0LlB5Q2Fwc3VsZV9TZXROYW1lCisgIFB5Q2Fwc3VsZV9TZXRQb2ludGVyPXB5dGhvbjM0LlB5Q2Fwc3VsZV9TZXRQb2ludGVyCisgIFB5Q2Fwc3VsZV9UeXBlPXB5dGhvbjM0LlB5Q2Fwc3VsZV9UeXBlIERBVEEKKyAgUHlDbGFzc01ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzQuUHlDbGFzc01ldGhvZERlc2NyX1R5cGUgREFUQQorICBQeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzCisgIFB5Q29kZWNfRGVjb2RlPXB5dGhvbjM0LlB5Q29kZWNfRGVjb2RlCisgIFB5Q29kZWNfRGVjb2Rlcj1weXRob24zNC5QeUNvZGVjX0RlY29kZXIKKyAgUHlDb2RlY19FbmNvZGU9cHl0aG9uMzQuUHlDb2RlY19FbmNvZGUKKyAgUHlDb2RlY19FbmNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfRW5jb2RlcgorICBQeUNvZGVjX0lnbm9yZUVycm9ycz1weXRob24zNC5QeUNvZGVjX0lnbm9yZUVycm9ycworICBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2Rlcj1weXRob24zNC5QeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlcgorICBQeUNvZGVjX0luY3JlbWVudGFsRW5jb2Rlcj1weXRob24zNC5QeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlcgorICBQeUNvZGVjX0tub3duRW5jb2Rpbmc9cHl0aG9uMzQuUHlDb2RlY19Lbm93bkVuY29kaW5nCisgIFB5Q29kZWNfTG9va3VwRXJyb3I9cHl0aG9uMzQuUHlDb2RlY19Mb29rdXBFcnJvcgorICBQeUNvZGVjX1JlZ2lzdGVyPXB5dGhvbjM0LlB5Q29kZWNfUmVnaXN0ZXIKKyAgUHlDb2RlY19SZWdpc3RlckVycm9yPXB5dGhvbjM0LlB5Q29kZWNfUmVnaXN0ZXJFcnJvcgorICBQeUNvZGVjX1JlcGxhY2VFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19SZXBsYWNlRXJyb3JzCisgIFB5Q29kZWNfU3RyZWFtUmVhZGVyPXB5dGhvbjM0LlB5Q29kZWNfU3RyZWFtUmVhZGVyCisgIFB5Q29kZWNfU3RyZWFtV3JpdGVyPXB5dGhvbjM0LlB5Q29kZWNfU3RyZWFtV3JpdGVyCisgIFB5Q29kZWNfU3RyaWN0RXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfU3RyaWN0RXJyb3JzCisgIFB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycworICBQeUNvbXBsZXhfRnJvbURvdWJsZXM9cHl0aG9uMzQuUHlDb21wbGV4X0Zyb21Eb3VibGVzCisgIFB5Q29tcGxleF9JbWFnQXNEb3VibGU9cHl0aG9uMzQuUHlDb21wbGV4X0ltYWdBc0RvdWJsZQorICBQeUNvbXBsZXhfUmVhbEFzRG91YmxlPXB5dGhvbjM0LlB5Q29tcGxleF9SZWFsQXNEb3VibGUKKyAgUHlDb21wbGV4X1R5cGU9cHl0aG9uMzQuUHlDb21wbGV4X1R5cGUgREFUQQorICBQeURlc2NyX05ld0NsYXNzTWV0aG9kPXB5dGhvbjM0LlB5RGVzY3JfTmV3Q2xhc3NNZXRob2QKKyAgUHlEZXNjcl9OZXdHZXRTZXQ9cHl0aG9uMzQuUHlEZXNjcl9OZXdHZXRTZXQKKyAgUHlEZXNjcl9OZXdNZW1iZXI9cHl0aG9uMzQuUHlEZXNjcl9OZXdNZW1iZXIKKyAgUHlEZXNjcl9OZXdNZXRob2Q9cHl0aG9uMzQuUHlEZXNjcl9OZXdNZXRob2QKKyAgUHlEaWN0SXRlbXNfVHlwZT1weXRob24zNC5QeURpY3RJdGVtc19UeXBlIERBVEEKKyAgUHlEaWN0SXRlckl0ZW1fVHlwZT1weXRob24zNC5QeURpY3RJdGVySXRlbV9UeXBlIERBVEEKKyAgUHlEaWN0SXRlcktleV9UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZXJLZXlfVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJWYWx1ZV9UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZXJWYWx1ZV9UeXBlIERBVEEKKyAgUHlEaWN0S2V5c19UeXBlPXB5dGhvbjM0LlB5RGljdEtleXNfVHlwZSBEQVRBCisgIFB5RGljdFByb3h5X05ldz1weXRob24zNC5QeURpY3RQcm94eV9OZXcKKyAgUHlEaWN0UHJveHlfVHlwZT1weXRob24zNC5QeURpY3RQcm94eV9UeXBlIERBVEEKKyAgUHlEaWN0VmFsdWVzX1R5cGU9cHl0aG9uMzQuUHlEaWN0VmFsdWVzX1R5cGUgREFUQQorICBQeURpY3RfQ2xlYXI9cHl0aG9uMzQuUHlEaWN0X0NsZWFyCisgIFB5RGljdF9Db250YWlucz1weXRob24zNC5QeURpY3RfQ29udGFpbnMKKyAgUHlEaWN0X0NvcHk9cHl0aG9uMzQuUHlEaWN0X0NvcHkKKyAgUHlEaWN0X0RlbEl0ZW09cHl0aG9uMzQuUHlEaWN0X0RlbEl0ZW0KKyAgUHlEaWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlEaWN0X0RlbEl0ZW1TdHJpbmcKKyAgUHlEaWN0X0dldEl0ZW09cHl0aG9uMzQuUHlEaWN0X0dldEl0ZW0KKyAgUHlEaWN0X0dldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlEaWN0X0dldEl0ZW1TdHJpbmcKKyAgUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3I9cHl0aG9uMzQuUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IKKyAgUHlEaWN0X0l0ZW1zPXB5dGhvbjM0LlB5RGljdF9JdGVtcworICBQeURpY3RfS2V5cz1weXRob24zNC5QeURpY3RfS2V5cworICBQeURpY3RfTWVyZ2U9cHl0aG9uMzQuUHlEaWN0X01lcmdlCisgIFB5RGljdF9NZXJnZUZyb21TZXEyPXB5dGhvbjM0LlB5RGljdF9NZXJnZUZyb21TZXEyCisgIFB5RGljdF9OZXc9cHl0aG9uMzQuUHlEaWN0X05ldworICBQeURpY3RfTmV4dD1weXRob24zNC5QeURpY3RfTmV4dAorICBQeURpY3RfU2V0SXRlbT1weXRob24zNC5QeURpY3RfU2V0SXRlbQorICBQeURpY3RfU2V0SXRlbVN0cmluZz1weXRob24zNC5QeURpY3RfU2V0SXRlbVN0cmluZworICBQeURpY3RfU2l6ZT1weXRob24zNC5QeURpY3RfU2l6ZQorICBQeURpY3RfVHlwZT1weXRob24zNC5QeURpY3RfVHlwZSBEQVRBCisgIFB5RGljdF9VcGRhdGU9cHl0aG9uMzQuUHlEaWN0X1VwZGF0ZQorICBQeURpY3RfVmFsdWVzPXB5dGhvbjM0LlB5RGljdF9WYWx1ZXMKKyAgUHlFbGxpcHNpc19UeXBlPXB5dGhvbjM0LlB5RWxsaXBzaXNfVHlwZSBEQVRBCisgIFB5RW51bV9UeXBlPXB5dGhvbjM0LlB5RW51bV9UeXBlIERBVEEKKyAgUHlFcnJfQmFkQXJndW1lbnQ9cHl0aG9uMzQuUHlFcnJfQmFkQXJndW1lbnQKKyAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsPXB5dGhvbjM0LlB5RXJyX0JhZEludGVybmFsQ2FsbAorICBQeUVycl9DaGVja1NpZ25hbHM9cHl0aG9uMzQuUHlFcnJfQ2hlY2tTaWduYWxzCisgIFB5RXJyX0NsZWFyPXB5dGhvbjM0LlB5RXJyX0NsZWFyCisgIFB5RXJyX0Rpc3BsYXk9cHl0aG9uMzQuUHlFcnJfRGlzcGxheQorICBQeUVycl9FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjM0LlB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMKKyAgUHlFcnJfRmV0Y2g9cHl0aG9uMzQuUHlFcnJfRmV0Y2gKKyAgUHlFcnJfRm9ybWF0PXB5dGhvbjM0LlB5RXJyX0Zvcm1hdAorICBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzQuUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzCisgIFB5RXJyX05ld0V4Y2VwdGlvbj1weXRob24zNC5QeUVycl9OZXdFeGNlcHRpb24KKyAgUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYz1weXRob24zNC5QeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jCisgIFB5RXJyX05vTWVtb3J5PXB5dGhvbjM0LlB5RXJyX05vTWVtb3J5CisgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbj1weXRob24zNC5QeUVycl9Ob3JtYWxpemVFeGNlcHRpb24KKyAgUHlFcnJfT2NjdXJyZWQ9cHl0aG9uMzQuUHlFcnJfT2NjdXJyZWQKKyAgUHlFcnJfUHJpbnQ9cHl0aG9uMzQuUHlFcnJfUHJpbnQKKyAgUHlFcnJfUHJpbnRFeD1weXRob24zNC5QeUVycl9QcmludEV4CisgIFB5RXJyX1Byb2dyYW1UZXh0PXB5dGhvbjM0LlB5RXJyX1Byb2dyYW1UZXh0CisgIFB5RXJyX1Jlc3RvcmU9cHl0aG9uMzQuUHlFcnJfUmVzdG9yZQorICBQeUVycl9TZXRGcm9tRXJybm89cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vCisgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZT1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUKKyAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0PXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdAorICBQeUVycl9TZXRJbnRlcnJ1cHQ9cHl0aG9uMzQuUHlFcnJfU2V0SW50ZXJydXB0CisgIFB5RXJyX1NldE5vbmU9cHl0aG9uMzQuUHlFcnJfU2V0Tm9uZQorICBQeUVycl9TZXRPYmplY3Q9cHl0aG9uMzQuUHlFcnJfU2V0T2JqZWN0CisgIFB5RXJyX1NldFN0cmluZz1weXRob24zNC5QeUVycl9TZXRTdHJpbmcKKyAgUHlFcnJfU3ludGF4TG9jYXRpb249cHl0aG9uMzQuUHlFcnJfU3ludGF4TG9jYXRpb24KKyAgUHlFcnJfV2FybkV4PXB5dGhvbjM0LlB5RXJyX1dhcm5FeAorICBQeUVycl9XYXJuRXhwbGljaXQ9cHl0aG9uMzQuUHlFcnJfV2FybkV4cGxpY2l0CisgIFB5RXJyX1dhcm5Gb3JtYXQ9cHl0aG9uMzQuUHlFcnJfV2FybkZvcm1hdAorICBQeUVycl9Xcml0ZVVucmFpc2FibGU9cHl0aG9uMzQuUHlFcnJfV3JpdGVVbnJhaXNhYmxlCisgIFB5RXZhbF9BY3F1aXJlTG9jaz1weXRob24zNC5QeUV2YWxfQWNxdWlyZUxvY2sKKyAgUHlFdmFsX0FjcXVpcmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX0FjcXVpcmVUaHJlYWQKKyAgUHlFdmFsX0NhbGxGdW5jdGlvbj1weXRob24zNC5QeUV2YWxfQ2FsbEZ1bmN0aW9uCisgIFB5RXZhbF9DYWxsTWV0aG9kPXB5dGhvbjM0LlB5RXZhbF9DYWxsTWV0aG9kCisgIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzPXB5dGhvbjM0LlB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzCisgIFB5RXZhbF9FdmFsQ29kZT1weXRob24zNC5QeUV2YWxfRXZhbENvZGUKKyAgUHlFdmFsX0V2YWxDb2RlRXg9cHl0aG9uMzQuUHlFdmFsX0V2YWxDb2RlRXgKKyAgUHlFdmFsX0V2YWxGcmFtZT1weXRob24zNC5QeUV2YWxfRXZhbEZyYW1lCisgIFB5RXZhbF9FdmFsRnJhbWVFeD1weXRob24zNC5QeUV2YWxfRXZhbEZyYW1lRXgKKyAgUHlFdmFsX0dldEJ1aWx0aW5zPXB5dGhvbjM0LlB5RXZhbF9HZXRCdWlsdGlucworICBQeUV2YWxfR2V0Q2FsbFN0YXRzPXB5dGhvbjM0LlB5RXZhbF9HZXRDYWxsU3RhdHMKKyAgUHlFdmFsX0dldEZyYW1lPXB5dGhvbjM0LlB5RXZhbF9HZXRGcmFtZQorICBQeUV2YWxfR2V0RnVuY0Rlc2M9cHl0aG9uMzQuUHlFdmFsX0dldEZ1bmNEZXNjCisgIFB5RXZhbF9HZXRGdW5jTmFtZT1weXRob24zNC5QeUV2YWxfR2V0RnVuY05hbWUKKyAgUHlFdmFsX0dldEdsb2JhbHM9cHl0aG9uMzQuUHlFdmFsX0dldEdsb2JhbHMKKyAgUHlFdmFsX0dldExvY2Fscz1weXRob24zNC5QeUV2YWxfR2V0TG9jYWxzCisgIFB5RXZhbF9Jbml0VGhyZWFkcz1weXRob24zNC5QeUV2YWxfSW5pdFRocmVhZHMKKyAgUHlFdmFsX1JlSW5pdFRocmVhZHM9cHl0aG9uMzQuUHlFdmFsX1JlSW5pdFRocmVhZHMKKyAgUHlFdmFsX1JlbGVhc2VMb2NrPXB5dGhvbjM0LlB5RXZhbF9SZWxlYXNlTG9jaworICBQeUV2YWxfUmVsZWFzZVRocmVhZD1weXRob24zNC5QeUV2YWxfUmVsZWFzZVRocmVhZAorICBQeUV2YWxfUmVzdG9yZVRocmVhZD1weXRob24zNC5QeUV2YWxfUmVzdG9yZVRocmVhZAorICBQeUV2YWxfU2F2ZVRocmVhZD1weXRob24zNC5QeUV2YWxfU2F2ZVRocmVhZAorICBQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkPXB5dGhvbjM0LlB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQKKyAgUHlFeGNfQXJpdGhtZXRpY0Vycm9yPXB5dGhvbjM0LlB5RXhjX0FyaXRobWV0aWNFcnJvciBEQVRBCisgIFB5RXhjX0Fzc2VydGlvbkVycm9yPXB5dGhvbjM0LlB5RXhjX0Fzc2VydGlvbkVycm9yIERBVEEKKyAgUHlFeGNfQXR0cmlidXRlRXJyb3I9cHl0aG9uMzQuUHlFeGNfQXR0cmlidXRlRXJyb3IgREFUQQorICBQeUV4Y19CYXNlRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXhjX0Jhc2VFeGNlcHRpb24gREFUQQorICBQeUV4Y19CdWZmZXJFcnJvcj1weXRob24zNC5QeUV4Y19CdWZmZXJFcnJvciBEQVRBCisgIFB5RXhjX0J5dGVzV2FybmluZz1weXRob24zNC5QeUV4Y19CeXRlc1dhcm5pbmcgREFUQQorICBQeUV4Y19EZXByZWNhdGlvbldhcm5pbmc9cHl0aG9uMzQuUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKKyAgUHlFeGNfRU9GRXJyb3I9cHl0aG9uMzQuUHlFeGNfRU9GRXJyb3IgREFUQQorICBQeUV4Y19FbnZpcm9ubWVudEVycm9yPXB5dGhvbjM0LlB5RXhjX0Vudmlyb25tZW50RXJyb3IgREFUQQorICBQeUV4Y19FeGNlcHRpb249cHl0aG9uMzQuUHlFeGNfRXhjZXB0aW9uIERBVEEKKyAgUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yPXB5dGhvbjM0LlB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvciBEQVRBCisgIFB5RXhjX0Z1dHVyZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfRnV0dXJlV2FybmluZyBEQVRBCisgIFB5RXhjX0dlbmVyYXRvckV4aXQ9cHl0aG9uMzQuUHlFeGNfR2VuZXJhdG9yRXhpdCBEQVRBCisgIFB5RXhjX0lPRXJyb3I9cHl0aG9uMzQuUHlFeGNfSU9FcnJvciBEQVRBCisgIFB5RXhjX0ltcG9ydEVycm9yPXB5dGhvbjM0LlB5RXhjX0ltcG9ydEVycm9yIERBVEEKKyAgUHlFeGNfSW1wb3J0V2FybmluZz1weXRob24zNC5QeUV4Y19JbXBvcnRXYXJuaW5nIERBVEEKKyAgUHlFeGNfSW5kZW50YXRpb25FcnJvcj1weXRob24zNC5QeUV4Y19JbmRlbnRhdGlvbkVycm9yIERBVEEKKyAgUHlFeGNfSW5kZXhFcnJvcj1weXRob24zNC5QeUV4Y19JbmRleEVycm9yIERBVEEKKyAgUHlFeGNfS2V5RXJyb3I9cHl0aG9uMzQuUHlFeGNfS2V5RXJyb3IgREFUQQorICBQeUV4Y19LZXlib2FyZEludGVycnVwdD1weXRob24zNC5QeUV4Y19LZXlib2FyZEludGVycnVwdCBEQVRBCisgIFB5RXhjX0xvb2t1cEVycm9yPXB5dGhvbjM0LlB5RXhjX0xvb2t1cEVycm9yIERBVEEKKyAgUHlFeGNfTWVtb3J5RXJyb3I9cHl0aG9uMzQuUHlFeGNfTWVtb3J5RXJyb3IgREFUQQorICBQeUV4Y19NZW1vcnlFcnJvckluc3Q9cHl0aG9uMzQuUHlFeGNfTWVtb3J5RXJyb3JJbnN0IERBVEEKKyAgUHlFeGNfTmFtZUVycm9yPXB5dGhvbjM0LlB5RXhjX05hbWVFcnJvciBEQVRBCisgIFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3I9cHl0aG9uMzQuUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciBEQVRBCisgIFB5RXhjX09TRXJyb3I9cHl0aG9uMzQuUHlFeGNfT1NFcnJvciBEQVRBCisgIFB5RXhjX092ZXJmbG93RXJyb3I9cHl0aG9uMzQuUHlFeGNfT3ZlcmZsb3dFcnJvciBEQVRBCisgIFB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmc9cHl0aG9uMzQuUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCisgIFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdD1weXRob24zNC5QeUV4Y19SZWN1cnNpb25FcnJvckluc3QgREFUQQorICBQeUV4Y19SZWZlcmVuY2VFcnJvcj1weXRob24zNC5QeUV4Y19SZWZlcmVuY2VFcnJvciBEQVRBCisgIFB5RXhjX1J1bnRpbWVFcnJvcj1weXRob24zNC5QeUV4Y19SdW50aW1lRXJyb3IgREFUQQorICBQeUV4Y19SdW50aW1lV2FybmluZz1weXRob24zNC5QeUV4Y19SdW50aW1lV2FybmluZyBEQVRBCisgIFB5RXhjX1N0b3BJdGVyYXRpb249cHl0aG9uMzQuUHlFeGNfU3RvcEl0ZXJhdGlvbiBEQVRBCisgIFB5RXhjX1N5bnRheEVycm9yPXB5dGhvbjM0LlB5RXhjX1N5bnRheEVycm9yIERBVEEKKyAgUHlFeGNfU3ludGF4V2FybmluZz1weXRob24zNC5QeUV4Y19TeW50YXhXYXJuaW5nIERBVEEKKyAgUHlFeGNfU3lzdGVtRXJyb3I9cHl0aG9uMzQuUHlFeGNfU3lzdGVtRXJyb3IgREFUQQorICBQeUV4Y19TeXN0ZW1FeGl0PXB5dGhvbjM0LlB5RXhjX1N5c3RlbUV4aXQgREFUQQorICBQeUV4Y19UYWJFcnJvcj1weXRob24zNC5QeUV4Y19UYWJFcnJvciBEQVRBCisgIFB5RXhjX1R5cGVFcnJvcj1weXRob24zNC5QeUV4Y19UeXBlRXJyb3IgREFUQQorICBQeUV4Y19VbmJvdW5kTG9jYWxFcnJvcj1weXRob24zNC5QeUV4Y19VbmJvdW5kTG9jYWxFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZUVuY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlV2FybmluZz1weXRob24zNC5QeUV4Y19Vbmljb2RlV2FybmluZyBEQVRBCisgIFB5RXhjX1VzZXJXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1VzZXJXYXJuaW5nIERBVEEKKyAgUHlFeGNfVmFsdWVFcnJvcj1weXRob24zNC5QeUV4Y19WYWx1ZUVycm9yIERBVEEKKyAgUHlFeGNfV2FybmluZz1weXRob24zNC5QeUV4Y19XYXJuaW5nIERBVEEKKyAgUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IgREFUQQorICBQeUV4Y2VwdGlvbl9HZXRDYXVzZT1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRDYXVzZQorICBQeUV4Y2VwdGlvbl9HZXRDb250ZXh0PXB5dGhvbjM0LlB5RXhjZXB0aW9uX0dldENvbnRleHQKKyAgUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrPXB5dGhvbjM0LlB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaworICBQeUV4Y2VwdGlvbl9TZXRDYXVzZT1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRDYXVzZQorICBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0PXB5dGhvbjM0LlB5RXhjZXB0aW9uX1NldENvbnRleHQKKyAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrPXB5dGhvbjM0LlB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaworICBQeUZpbGVfRnJvbUZkPXB5dGhvbjM0LlB5RmlsZV9Gcm9tRmQKKyAgUHlGaWxlX0dldExpbmU9cHl0aG9uMzQuUHlGaWxlX0dldExpbmUKKyAgUHlGaWxlX1dyaXRlT2JqZWN0PXB5dGhvbjM0LlB5RmlsZV9Xcml0ZU9iamVjdAorICBQeUZpbGVfV3JpdGVTdHJpbmc9cHl0aG9uMzQuUHlGaWxlX1dyaXRlU3RyaW5nCisgIFB5RmlsdGVyX1R5cGU9cHl0aG9uMzQuUHlGaWx0ZXJfVHlwZSBEQVRBCisgIFB5RmxvYXRfQXNEb3VibGU9cHl0aG9uMzQuUHlGbG9hdF9Bc0RvdWJsZQorICBQeUZsb2F0X0Zyb21Eb3VibGU9cHl0aG9uMzQuUHlGbG9hdF9Gcm9tRG91YmxlCisgIFB5RmxvYXRfRnJvbVN0cmluZz1weXRob24zNC5QeUZsb2F0X0Zyb21TdHJpbmcKKyAgUHlGbG9hdF9HZXRJbmZvPXB5dGhvbjM0LlB5RmxvYXRfR2V0SW5mbworICBQeUZsb2F0X0dldE1heD1weXRob24zNC5QeUZsb2F0X0dldE1heAorICBQeUZsb2F0X0dldE1pbj1weXRob24zNC5QeUZsb2F0X0dldE1pbgorICBQeUZsb2F0X1R5cGU9cHl0aG9uMzQuUHlGbG9hdF9UeXBlIERBVEEKKyAgUHlGcm96ZW5TZXRfTmV3PXB5dGhvbjM0LlB5RnJvemVuU2V0X05ldworICBQeUZyb3plblNldF9UeXBlPXB5dGhvbjM0LlB5RnJvemVuU2V0X1R5cGUgREFUQQorICBQeUdDX0NvbGxlY3Q9cHl0aG9uMzQuUHlHQ19Db2xsZWN0CisgIFB5R0lMU3RhdGVfRW5zdXJlPXB5dGhvbjM0LlB5R0lMU3RhdGVfRW5zdXJlCisgIFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlPXB5dGhvbjM0LlB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlCisgIFB5R0lMU3RhdGVfUmVsZWFzZT1weXRob24zNC5QeUdJTFN0YXRlX1JlbGVhc2UKKyAgUHlHZXRTZXREZXNjcl9UeXBlPXB5dGhvbjM0LlB5R2V0U2V0RGVzY3JfVHlwZSBEQVRBCisgIFB5SW1wb3J0X0FkZE1vZHVsZT1weXRob24zNC5QeUltcG9ydF9BZGRNb2R1bGUKKyAgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYj1weXRob24zNC5QeUltcG9ydF9BcHBlbmRJbml0dGFiCisgIFB5SW1wb3J0X0NsZWFudXA9cHl0aG9uMzQuUHlJbXBvcnRfQ2xlYW51cAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZT1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZQorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4PXB5dGhvbjM0LlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzPXB5dGhvbjM0LlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcworICBQeUltcG9ydF9HZXRJbXBvcnRlcj1weXRob24zNC5QeUltcG9ydF9HZXRJbXBvcnRlcgorICBQeUltcG9ydF9HZXRNYWdpY051bWJlcj1weXRob24zNC5QeUltcG9ydF9HZXRNYWdpY051bWJlcgorICBQeUltcG9ydF9HZXRNYWdpY1RhZz1weXRob24zNC5QeUltcG9ydF9HZXRNYWdpY1RhZworICBQeUltcG9ydF9HZXRNb2R1bGVEaWN0PXB5dGhvbjM0LlB5SW1wb3J0X0dldE1vZHVsZURpY3QKKyAgUHlJbXBvcnRfSW1wb3J0PXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydAorICBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZT1weXRob24zNC5QeUltcG9ydF9JbXBvcnRNb2R1bGUKKyAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWw9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwKKyAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaz1weXRob24zNC5QeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrCisgIFB5SW1wb3J0X1JlbG9hZE1vZHVsZT1weXRob24zNC5QeUltcG9ydF9SZWxvYWRNb2R1bGUKKyAgUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyPXB5dGhvbjM0LlB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcgorICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlPXB5dGhvbjM0LlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUKKyAgUHlJbnRlcnByZXRlclN0YXRlX05ldz1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfTmV3CisgIFB5SXRlcl9OZXh0PXB5dGhvbjM0LlB5SXRlcl9OZXh0CisgIFB5TGlzdEl0ZXJfVHlwZT1weXRob24zNC5QeUxpc3RJdGVyX1R5cGUgREFUQQorICBQeUxpc3RSZXZJdGVyX1R5cGU9cHl0aG9uMzQuUHlMaXN0UmV2SXRlcl9UeXBlIERBVEEKKyAgUHlMaXN0X0FwcGVuZD1weXRob24zNC5QeUxpc3RfQXBwZW5kCisgIFB5TGlzdF9Bc1R1cGxlPXB5dGhvbjM0LlB5TGlzdF9Bc1R1cGxlCisgIFB5TGlzdF9HZXRJdGVtPXB5dGhvbjM0LlB5TGlzdF9HZXRJdGVtCisgIFB5TGlzdF9HZXRTbGljZT1weXRob24zNC5QeUxpc3RfR2V0U2xpY2UKKyAgUHlMaXN0X0luc2VydD1weXRob24zNC5QeUxpc3RfSW5zZXJ0CisgIFB5TGlzdF9OZXc9cHl0aG9uMzQuUHlMaXN0X05ldworICBQeUxpc3RfUmV2ZXJzZT1weXRob24zNC5QeUxpc3RfUmV2ZXJzZQorICBQeUxpc3RfU2V0SXRlbT1weXRob24zNC5QeUxpc3RfU2V0SXRlbQorICBQeUxpc3RfU2V0U2xpY2U9cHl0aG9uMzQuUHlMaXN0X1NldFNsaWNlCisgIFB5TGlzdF9TaXplPXB5dGhvbjM0LlB5TGlzdF9TaXplCisgIFB5TGlzdF9Tb3J0PXB5dGhvbjM0LlB5TGlzdF9Tb3J0CisgIFB5TGlzdF9UeXBlPXB5dGhvbjM0LlB5TGlzdF9UeXBlIERBVEEKKyAgUHlMb25nUmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzQuUHlMb25nUmFuZ2VJdGVyX1R5cGUgREFUQQorICBQeUxvbmdfQXNEb3VibGU9cHl0aG9uMzQuUHlMb25nX0FzRG91YmxlCisgIFB5TG9uZ19Bc0xvbmc9cHl0aG9uMzQuUHlMb25nX0FzTG9uZworICBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3c9cHl0aG9uMzQuUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93CisgIFB5TG9uZ19Bc0xvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdMb25nCisgIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3c9cHl0aG9uMzQuUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdworICBQeUxvbmdfQXNTaXplX3Q9cHl0aG9uMzQuUHlMb25nX0FzU2l6ZV90CisgIFB5TG9uZ19Bc1NzaXplX3Q9cHl0aG9uMzQuUHlMb25nX0FzU3NpemVfdAorICBQeUxvbmdfQXNVbnNpZ25lZExvbmc9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZworICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzaz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzaworICBQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2sKKyAgUHlMb25nX0FzVm9pZFB0cj1weXRob24zNC5QeUxvbmdfQXNWb2lkUHRyCisgIFB5TG9uZ19Gcm9tRG91YmxlPXB5dGhvbjM0LlB5TG9uZ19Gcm9tRG91YmxlCisgIFB5TG9uZ19Gcm9tTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbUxvbmcKKyAgUHlMb25nX0Zyb21Mb25nTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbUxvbmdMb25nCisgIFB5TG9uZ19Gcm9tU2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Gcm9tU2l6ZV90CisgIFB5TG9uZ19Gcm9tU3NpemVfdD1weXRob24zNC5QeUxvbmdfRnJvbVNzaXplX3QKKyAgUHlMb25nX0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21TdHJpbmcKKyAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21VbnNpZ25lZExvbmcKKyAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZworICBQeUxvbmdfRnJvbVZvaWRQdHI9cHl0aG9uMzQuUHlMb25nX0Zyb21Wb2lkUHRyCisgIFB5TG9uZ19HZXRJbmZvPXB5dGhvbjM0LlB5TG9uZ19HZXRJbmZvCisgIFB5TG9uZ19UeXBlPXB5dGhvbjM0LlB5TG9uZ19UeXBlIERBVEEKKyAgUHlNYXBfVHlwZT1weXRob24zNC5QeU1hcF9UeXBlIERBVEEKKyAgUHlNYXBwaW5nX0NoZWNrPXB5dGhvbjM0LlB5TWFwcGluZ19DaGVjaworICBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZz1weXRob24zNC5QeU1hcHBpbmdfR2V0SXRlbVN0cmluZworICBQeU1hcHBpbmdfSGFzS2V5PXB5dGhvbjM0LlB5TWFwcGluZ19IYXNLZXkKKyAgUHlNYXBwaW5nX0hhc0tleVN0cmluZz1weXRob24zNC5QeU1hcHBpbmdfSGFzS2V5U3RyaW5nCisgIFB5TWFwcGluZ19JdGVtcz1weXRob24zNC5QeU1hcHBpbmdfSXRlbXMKKyAgUHlNYXBwaW5nX0tleXM9cHl0aG9uMzQuUHlNYXBwaW5nX0tleXMKKyAgUHlNYXBwaW5nX0xlbmd0aD1weXRob24zNC5QeU1hcHBpbmdfTGVuZ3RoCisgIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5TWFwcGluZ19TZXRJdGVtU3RyaW5nCisgIFB5TWFwcGluZ19TaXplPXB5dGhvbjM0LlB5TWFwcGluZ19TaXplCisgIFB5TWFwcGluZ19WYWx1ZXM9cHl0aG9uMzQuUHlNYXBwaW5nX1ZhbHVlcworICBQeU1lbV9GcmVlPXB5dGhvbjM0LlB5TWVtX0ZyZWUKKyAgUHlNZW1fTWFsbG9jPXB5dGhvbjM0LlB5TWVtX01hbGxvYworICBQeU1lbV9SZWFsbG9jPXB5dGhvbjM0LlB5TWVtX1JlYWxsb2MKKyAgUHlNZW1iZXJEZXNjcl9UeXBlPXB5dGhvbjM0LlB5TWVtYmVyRGVzY3JfVHlwZSBEQVRBCisgIFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0CisgIFB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzPXB5dGhvbjM0LlB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzCisgIFB5TWVtb3J5Vmlld19UeXBlPXB5dGhvbjM0LlB5TWVtb3J5Vmlld19UeXBlIERBVEEKKyAgUHlNZXRob2REZXNjcl9UeXBlPXB5dGhvbjM0LlB5TWV0aG9kRGVzY3JfVHlwZSBEQVRBCisgIFB5TW9kdWxlX0FkZEludENvbnN0YW50PXB5dGhvbjM0LlB5TW9kdWxlX0FkZEludENvbnN0YW50CisgIFB5TW9kdWxlX0FkZE9iamVjdD1weXRob24zNC5QeU1vZHVsZV9BZGRPYmplY3QKKyAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQ9cHl0aG9uMzQuUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQKKyAgUHlNb2R1bGVfQ3JlYXRlMj1weXRob24zNC5QeU1vZHVsZV9DcmVhdGUyCisgIFB5TW9kdWxlX0dldERlZj1weXRob24zNC5QeU1vZHVsZV9HZXREZWYKKyAgUHlNb2R1bGVfR2V0RGljdD1weXRob24zNC5QeU1vZHVsZV9HZXREaWN0CisgIFB5TW9kdWxlX0dldEZpbGVuYW1lPXB5dGhvbjM0LlB5TW9kdWxlX0dldEZpbGVuYW1lCisgIFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0PXB5dGhvbjM0LlB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0CisgIFB5TW9kdWxlX0dldE5hbWU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0TmFtZQorICBQeU1vZHVsZV9HZXRTdGF0ZT1weXRob24zNC5QeU1vZHVsZV9HZXRTdGF0ZQorICBQeU1vZHVsZV9OZXc9cHl0aG9uMzQuUHlNb2R1bGVfTmV3CisgIFB5TW9kdWxlX1R5cGU9cHl0aG9uMzQuUHlNb2R1bGVfVHlwZSBEQVRBCisgIFB5TnVsbEltcG9ydGVyX1R5cGU9cHl0aG9uMzQuUHlOdWxsSW1wb3J0ZXJfVHlwZSBEQVRBCisgIFB5TnVtYmVyX0Fic29sdXRlPXB5dGhvbjM0LlB5TnVtYmVyX0Fic29sdXRlCisgIFB5TnVtYmVyX0FkZD1weXRob24zNC5QeU51bWJlcl9BZGQKKyAgUHlOdW1iZXJfQW5kPXB5dGhvbjM0LlB5TnVtYmVyX0FuZAorICBQeU51bWJlcl9Bc1NzaXplX3Q9cHl0aG9uMzQuUHlOdW1iZXJfQXNTc2l6ZV90CisgIFB5TnVtYmVyX0NoZWNrPXB5dGhvbjM0LlB5TnVtYmVyX0NoZWNrCisgIFB5TnVtYmVyX0Rpdm1vZD1weXRob24zNC5QeU51bWJlcl9EaXZtb2QKKyAgUHlOdW1iZXJfRmxvYXQ9cHl0aG9uMzQuUHlOdW1iZXJfRmxvYXQKKyAgUHlOdW1iZXJfRmxvb3JEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfRmxvb3JEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZUFkZD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlQWRkCisgIFB5TnVtYmVyX0luUGxhY2VBbmQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUFuZAorICBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VMc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUxzaGlmdAorICBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHk9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5CisgIFB5TnVtYmVyX0luUGxhY2VPcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlT3IKKyAgUHlOdW1iZXJfSW5QbGFjZVBvd2VyPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VQb3dlcgorICBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIKKyAgUHlOdW1iZXJfSW5QbGFjZVJzaGlmdD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUnNoaWZ0CisgIFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlU3VidHJhY3QKKyAgUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZVhvcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlWG9yCisgIFB5TnVtYmVyX0luZGV4PXB5dGhvbjM0LlB5TnVtYmVyX0luZGV4CisgIFB5TnVtYmVyX0ludmVydD1weXRob24zNC5QeU51bWJlcl9JbnZlcnQKKyAgUHlOdW1iZXJfTG9uZz1weXRob24zNC5QeU51bWJlcl9Mb25nCisgIFB5TnVtYmVyX0xzaGlmdD1weXRob24zNC5QeU51bWJlcl9Mc2hpZnQKKyAgUHlOdW1iZXJfTXVsdGlwbHk9cHl0aG9uMzQuUHlOdW1iZXJfTXVsdGlwbHkKKyAgUHlOdW1iZXJfTmVnYXRpdmU9cHl0aG9uMzQuUHlOdW1iZXJfTmVnYXRpdmUKKyAgUHlOdW1iZXJfT3I9cHl0aG9uMzQuUHlOdW1iZXJfT3IKKyAgUHlOdW1iZXJfUG9zaXRpdmU9cHl0aG9uMzQuUHlOdW1iZXJfUG9zaXRpdmUKKyAgUHlOdW1iZXJfUG93ZXI9cHl0aG9uMzQuUHlOdW1iZXJfUG93ZXIKKyAgUHlOdW1iZXJfUmVtYWluZGVyPXB5dGhvbjM0LlB5TnVtYmVyX1JlbWFpbmRlcgorICBQeU51bWJlcl9Sc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfUnNoaWZ0CisgIFB5TnVtYmVyX1N1YnRyYWN0PXB5dGhvbjM0LlB5TnVtYmVyX1N1YnRyYWN0CisgIFB5TnVtYmVyX1RvQmFzZT1weXRob24zNC5QeU51bWJlcl9Ub0Jhc2UKKyAgUHlOdW1iZXJfVHJ1ZURpdmlkZT1weXRob24zNC5QeU51bWJlcl9UcnVlRGl2aWRlCisgIFB5TnVtYmVyX1hvcj1weXRob24zNC5QeU51bWJlcl9Yb3IKKyAgUHlPU19BZnRlckZvcms9cHl0aG9uMzQuUHlPU19BZnRlckZvcmsKKyAgUHlPU19Jbml0SW50ZXJydXB0cz1weXRob24zNC5QeU9TX0luaXRJbnRlcnJ1cHRzCisgIFB5T1NfSW5wdXRIb29rPXB5dGhvbjM0LlB5T1NfSW5wdXRIb29rIERBVEEKKyAgUHlPU19JbnRlcnJ1cHRPY2N1cnJlZD1weXRob24zNC5QeU9TX0ludGVycnVwdE9jY3VycmVkCisgIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXI9cHl0aG9uMzQuUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciBEQVRBCisgIFB5T1NfZG91YmxlX3RvX3N0cmluZz1weXRob24zNC5QeU9TX2RvdWJsZV90b19zdHJpbmcKKyAgUHlPU19nZXRzaWc9cHl0aG9uMzQuUHlPU19nZXRzaWcKKyAgUHlPU19teXN0cmljbXA9cHl0aG9uMzQuUHlPU19teXN0cmljbXAKKyAgUHlPU19teXN0cm5pY21wPXB5dGhvbjM0LlB5T1NfbXlzdHJuaWNtcAorICBQeU9TX3NldHNpZz1weXRob24zNC5QeU9TX3NldHNpZworICBQeU9TX3NucHJpbnRmPXB5dGhvbjM0LlB5T1Nfc25wcmludGYKKyAgUHlPU19zdHJpbmdfdG9fZG91YmxlPXB5dGhvbjM0LlB5T1Nfc3RyaW5nX3RvX2RvdWJsZQorICBQeU9TX3N0cnRvbD1weXRob24zNC5QeU9TX3N0cnRvbAorICBQeU9TX3N0cnRvdWw9cHl0aG9uMzQuUHlPU19zdHJ0b3VsCisgIFB5T1NfdnNucHJpbnRmPXB5dGhvbjM0LlB5T1NfdnNucHJpbnRmCisgIFB5T2JqZWN0X0FTQ0lJPXB5dGhvbjM0LlB5T2JqZWN0X0FTQ0lJCisgIFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcj1weXRob24zNC5QeU9iamVjdF9Bc0NoYXJCdWZmZXIKKyAgUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcj1weXRob24zNC5QeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yCisgIFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcj1weXRob24zNC5QeU9iamVjdF9Bc1JlYWRCdWZmZXIKKyAgUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcj1weXRob24zNC5QeU9iamVjdF9Bc1dyaXRlQnVmZmVyCisgIFB5T2JqZWN0X0J5dGVzPXB5dGhvbjM0LlB5T2JqZWN0X0J5dGVzCisgIFB5T2JqZWN0X0NhbGw9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbAorICBQeU9iamVjdF9DYWxsRnVuY3Rpb249cHl0aG9uMzQuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uCisgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3M9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncworICBQeU9iamVjdF9DYWxsTWV0aG9kPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxNZXRob2QKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MKKyAgUHlPYmplY3RfQ2FsbE9iamVjdD1weXRob24zNC5QeU9iamVjdF9DYWxsT2JqZWN0CisgIFB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcj1weXRob24zNC5QeU9iamVjdF9DaGVja1JlYWRCdWZmZXIKKyAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcz1weXRob24zNC5QeU9iamVjdF9DbGVhcldlYWtSZWZzCisgIFB5T2JqZWN0X0RlbEl0ZW09cHl0aG9uMzQuUHlPYmplY3RfRGVsSXRlbQorICBQeU9iamVjdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcKKyAgUHlPYmplY3RfRGlyPXB5dGhvbjM0LlB5T2JqZWN0X0RpcgorICBQeU9iamVjdF9Gb3JtYXQ9cHl0aG9uMzQuUHlPYmplY3RfRm9ybWF0CisgIFB5T2JqZWN0X0ZyZWU9cHl0aG9uMzQuUHlPYmplY3RfRnJlZQorICBQeU9iamVjdF9HQ19EZWw9cHl0aG9uMzQuUHlPYmplY3RfR0NfRGVsCisgIFB5T2JqZWN0X0dDX1RyYWNrPXB5dGhvbjM0LlB5T2JqZWN0X0dDX1RyYWNrCisgIFB5T2JqZWN0X0dDX1VuVHJhY2s9cHl0aG9uMzQuUHlPYmplY3RfR0NfVW5UcmFjaworICBQeU9iamVjdF9HZW5lcmljR2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9HZW5lcmljR2V0QXR0cgorICBQeU9iamVjdF9HZW5lcmljU2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9HZW5lcmljU2V0QXR0cgorICBQeU9iamVjdF9HZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0dldEF0dHIKKyAgUHlPYmplY3RfR2V0QXR0clN0cmluZz1weXRob24zNC5QeU9iamVjdF9HZXRBdHRyU3RyaW5nCisgIFB5T2JqZWN0X0dldEl0ZW09cHl0aG9uMzQuUHlPYmplY3RfR2V0SXRlbQorICBQeU9iamVjdF9HZXRJdGVyPXB5dGhvbjM0LlB5T2JqZWN0X0dldEl0ZXIKKyAgUHlPYmplY3RfSGFzQXR0cj1weXRob24zNC5QeU9iamVjdF9IYXNBdHRyCisgIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfSGFzQXR0clN0cmluZworICBQeU9iamVjdF9IYXNoPXB5dGhvbjM0LlB5T2JqZWN0X0hhc2gKKyAgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkPXB5dGhvbjM0LlB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZAorICBQeU9iamVjdF9Jbml0PXB5dGhvbjM0LlB5T2JqZWN0X0luaXQKKyAgUHlPYmplY3RfSW5pdFZhcj1weXRob24zNC5QeU9iamVjdF9Jbml0VmFyCisgIFB5T2JqZWN0X0lzSW5zdGFuY2U9cHl0aG9uMzQuUHlPYmplY3RfSXNJbnN0YW5jZQorICBQeU9iamVjdF9Jc1N1YmNsYXNzPXB5dGhvbjM0LlB5T2JqZWN0X0lzU3ViY2xhc3MKKyAgUHlPYmplY3RfSXNUcnVlPXB5dGhvbjM0LlB5T2JqZWN0X0lzVHJ1ZQorICBQeU9iamVjdF9MZW5ndGg9cHl0aG9uMzQuUHlPYmplY3RfTGVuZ3RoCisgIFB5T2JqZWN0X01hbGxvYz1weXRob24zNC5QeU9iamVjdF9NYWxsb2MKKyAgUHlPYmplY3RfTm90PXB5dGhvbjM0LlB5T2JqZWN0X05vdAorICBQeU9iamVjdF9SZWFsbG9jPXB5dGhvbjM0LlB5T2JqZWN0X1JlYWxsb2MKKyAgUHlPYmplY3RfUmVwcj1weXRob24zNC5QeU9iamVjdF9SZXByCisgIFB5T2JqZWN0X1JpY2hDb21wYXJlPXB5dGhvbjM0LlB5T2JqZWN0X1JpY2hDb21wYXJlCisgIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbD1weXRob24zNC5QeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wKKyAgUHlPYmplY3RfU2VsZkl0ZXI9cHl0aG9uMzQuUHlPYmplY3RfU2VsZkl0ZXIKKyAgUHlPYmplY3RfU2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9TZXRBdHRyCisgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfU2V0QXR0clN0cmluZworICBQeU9iamVjdF9TZXRJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X1NldEl0ZW0KKyAgUHlPYmplY3RfU2l6ZT1weXRob24zNC5QeU9iamVjdF9TaXplCisgIFB5T2JqZWN0X1N0cj1weXRob24zNC5QeU9iamVjdF9TdHIKKyAgUHlPYmplY3RfVHlwZT1weXRob24zNC5QeU9iamVjdF9UeXBlIERBVEEKKyAgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3M9cHl0aG9uMzQuUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3MKKyAgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncz1weXRob24zNC5QeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzCisgIFB5UHJvcGVydHlfVHlwZT1weXRob24zNC5QeVByb3BlcnR5X1R5cGUgREFUQQorICBQeVJhbmdlSXRlcl9UeXBlPXB5dGhvbjM0LlB5UmFuZ2VJdGVyX1R5cGUgREFUQQorICBQeVJhbmdlX1R5cGU9cHl0aG9uMzQuUHlSYW5nZV9UeXBlIERBVEEKKyAgUHlSZXZlcnNlZF9UeXBlPXB5dGhvbjM0LlB5UmV2ZXJzZWRfVHlwZSBEQVRBCisgIFB5U2VxSXRlcl9OZXc9cHl0aG9uMzQuUHlTZXFJdGVyX05ldworICBQeVNlcUl0ZXJfVHlwZT1weXRob24zNC5QeVNlcUl0ZXJfVHlwZSBEQVRBCisgIFB5U2VxdWVuY2VfQ2hlY2s9cHl0aG9uMzQuUHlTZXF1ZW5jZV9DaGVjaworICBQeVNlcXVlbmNlX0NvbmNhdD1weXRob24zNC5QeVNlcXVlbmNlX0NvbmNhdAorICBQeVNlcXVlbmNlX0NvbnRhaW5zPXB5dGhvbjM0LlB5U2VxdWVuY2VfQ29udGFpbnMKKyAgUHlTZXF1ZW5jZV9Db3VudD1weXRob24zNC5QeVNlcXVlbmNlX0NvdW50CisgIFB5U2VxdWVuY2VfRGVsSXRlbT1weXRob24zNC5QeVNlcXVlbmNlX0RlbEl0ZW0KKyAgUHlTZXF1ZW5jZV9EZWxTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX0RlbFNsaWNlCisgIFB5U2VxdWVuY2VfRmFzdD1weXRob24zNC5QeVNlcXVlbmNlX0Zhc3QKKyAgUHlTZXF1ZW5jZV9HZXRJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfR2V0SXRlbQorICBQeVNlcXVlbmNlX0dldFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfR2V0U2xpY2UKKyAgUHlTZXF1ZW5jZV9Jbj1weXRob24zNC5QeVNlcXVlbmNlX0luCisgIFB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdD1weXRob24zNC5QeVNlcXVlbmNlX0luUGxhY2VDb25jYXQKKyAgUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0PXB5dGhvbjM0LlB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdAorICBQeVNlcXVlbmNlX0luZGV4PXB5dGhvbjM0LlB5U2VxdWVuY2VfSW5kZXgKKyAgUHlTZXF1ZW5jZV9MZW5ndGg9cHl0aG9uMzQuUHlTZXF1ZW5jZV9MZW5ndGgKKyAgUHlTZXF1ZW5jZV9MaXN0PXB5dGhvbjM0LlB5U2VxdWVuY2VfTGlzdAorICBQeVNlcXVlbmNlX1JlcGVhdD1weXRob24zNC5QeVNlcXVlbmNlX1JlcGVhdAorICBQeVNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9TZXRJdGVtCisgIFB5U2VxdWVuY2VfU2V0U2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9TZXRTbGljZQorICBQeVNlcXVlbmNlX1NpemU9cHl0aG9uMzQuUHlTZXF1ZW5jZV9TaXplCisgIFB5U2VxdWVuY2VfVHVwbGU9cHl0aG9uMzQuUHlTZXF1ZW5jZV9UdXBsZQorICBQeVNldEl0ZXJfVHlwZT1weXRob24zNC5QeVNldEl0ZXJfVHlwZSBEQVRBCisgIFB5U2V0X0FkZD1weXRob24zNC5QeVNldF9BZGQKKyAgUHlTZXRfQ2xlYXI9cHl0aG9uMzQuUHlTZXRfQ2xlYXIKKyAgUHlTZXRfQ29udGFpbnM9cHl0aG9uMzQuUHlTZXRfQ29udGFpbnMKKyAgUHlTZXRfRGlzY2FyZD1weXRob24zNC5QeVNldF9EaXNjYXJkCisgIFB5U2V0X05ldz1weXRob24zNC5QeVNldF9OZXcKKyAgUHlTZXRfUG9wPXB5dGhvbjM0LlB5U2V0X1BvcAorICBQeVNldF9TaXplPXB5dGhvbjM0LlB5U2V0X1NpemUKKyAgUHlTZXRfVHlwZT1weXRob24zNC5QeVNldF9UeXBlIERBVEEKKyAgUHlTbGljZV9HZXRJbmRpY2VzPXB5dGhvbjM0LlB5U2xpY2VfR2V0SW5kaWNlcworICBQeVNsaWNlX0dldEluZGljZXNFeD1weXRob24zNC5QeVNsaWNlX0dldEluZGljZXNFeAorICBQeVNsaWNlX05ldz1weXRob24zNC5QeVNsaWNlX05ldworICBQeVNsaWNlX1R5cGU9cHl0aG9uMzQuUHlTbGljZV9UeXBlIERBVEEKKyAgUHlTb3J0V3JhcHBlcl9UeXBlPXB5dGhvbjM0LlB5U29ydFdyYXBwZXJfVHlwZSBEQVRBCisgIFB5U3RhdGVfRmluZE1vZHVsZT1weXRob24zNC5QeVN0YXRlX0ZpbmRNb2R1bGUKKyAgUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzQuUHlTdGF0ZV9BZGRNb2R1bGUKKyAgUHlTdGF0ZV9SZW1vdmVNb2R1bGU9cHl0aG9uMzQuUHlTdGF0ZV9SZW1vdmVNb2R1bGUKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbQorICBQeVN0cnVjdFNlcXVlbmNlX05ldz1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX05ldworICBQeVN0cnVjdFNlcXVlbmNlX05ld1R5cGU9cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlCisgIFB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW0KKyAgUHlTdXBlcl9UeXBlPXB5dGhvbjM0LlB5U3VwZXJfVHlwZSBEQVRBCisgIFB5U3lzX0FkZFdhcm5PcHRpb249cHl0aG9uMzQuUHlTeXNfQWRkV2Fybk9wdGlvbgorICBQeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZT1weXRob24zNC5QeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZQorICBQeVN5c19Gb3JtYXRTdGRlcnI9cHl0aG9uMzQuUHlTeXNfRm9ybWF0U3RkZXJyCisgIFB5U3lzX0Zvcm1hdFN0ZG91dD1weXRob24zNC5QeVN5c19Gb3JtYXRTdGRvdXQKKyAgUHlTeXNfR2V0T2JqZWN0PXB5dGhvbjM0LlB5U3lzX0dldE9iamVjdAorICBQeVN5c19IYXNXYXJuT3B0aW9ucz1weXRob24zNC5QeVN5c19IYXNXYXJuT3B0aW9ucworICBQeVN5c19SZXNldFdhcm5PcHRpb25zPXB5dGhvbjM0LlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMKKyAgUHlTeXNfU2V0QXJndj1weXRob24zNC5QeVN5c19TZXRBcmd2CisgIFB5U3lzX1NldEFyZ3ZFeD1weXRob24zNC5QeVN5c19TZXRBcmd2RXgKKyAgUHlTeXNfU2V0T2JqZWN0PXB5dGhvbjM0LlB5U3lzX1NldE9iamVjdAorICBQeVN5c19TZXRQYXRoPXB5dGhvbjM0LlB5U3lzX1NldFBhdGgKKyAgUHlTeXNfV3JpdGVTdGRlcnI9cHl0aG9uMzQuUHlTeXNfV3JpdGVTdGRlcnIKKyAgUHlTeXNfV3JpdGVTdGRvdXQ9cHl0aG9uMzQuUHlTeXNfV3JpdGVTdGRvdXQKKyAgUHlUaHJlYWRTdGF0ZV9DbGVhcj1weXRob24zNC5QeVRocmVhZFN0YXRlX0NsZWFyCisgIFB5VGhyZWFkU3RhdGVfRGVsZXRlPXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfRGVsZXRlCisgIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudD1weXRob24zNC5QeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQKKyAgUHlUaHJlYWRTdGF0ZV9HZXQ9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9HZXQKKyAgUHlUaHJlYWRTdGF0ZV9HZXREaWN0PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfR2V0RGljdAorICBQeVRocmVhZFN0YXRlX05ldz1weXRob24zNC5QeVRocmVhZFN0YXRlX05ldworICBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjPXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMKKyAgUHlUaHJlYWRTdGF0ZV9Td2FwPXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfU3dhcAorICBQeVRyYWNlQmFja19IZXJlPXB5dGhvbjM0LlB5VHJhY2VCYWNrX0hlcmUKKyAgUHlUcmFjZUJhY2tfUHJpbnQ9cHl0aG9uMzQuUHlUcmFjZUJhY2tfUHJpbnQKKyAgUHlUcmFjZUJhY2tfVHlwZT1weXRob24zNC5QeVRyYWNlQmFja19UeXBlIERBVEEKKyAgUHlUdXBsZUl0ZXJfVHlwZT1weXRob24zNC5QeVR1cGxlSXRlcl9UeXBlIERBVEEKKyAgUHlUdXBsZV9DbGVhckZyZWVMaXN0PXB5dGhvbjM0LlB5VHVwbGVfQ2xlYXJGcmVlTGlzdAorICBQeVR1cGxlX0dldEl0ZW09cHl0aG9uMzQuUHlUdXBsZV9HZXRJdGVtCisgIFB5VHVwbGVfR2V0U2xpY2U9cHl0aG9uMzQuUHlUdXBsZV9HZXRTbGljZQorICBQeVR1cGxlX05ldz1weXRob24zNC5QeVR1cGxlX05ldworICBQeVR1cGxlX1BhY2s9cHl0aG9uMzQuUHlUdXBsZV9QYWNrCisgIFB5VHVwbGVfU2V0SXRlbT1weXRob24zNC5QeVR1cGxlX1NldEl0ZW0KKyAgUHlUdXBsZV9TaXplPXB5dGhvbjM0LlB5VHVwbGVfU2l6ZQorICBQeVR1cGxlX1R5cGU9cHl0aG9uMzQuUHlUdXBsZV9UeXBlIERBVEEKKyAgUHlUeXBlX0NsZWFyQ2FjaGU9cHl0aG9uMzQuUHlUeXBlX0NsZWFyQ2FjaGUKKyAgUHlUeXBlX0Zyb21TcGVjPXB5dGhvbjM0LlB5VHlwZV9Gcm9tU3BlYworICBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXM9cHl0aG9uMzQuUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzCisgIFB5VHlwZV9HZW5lcmljQWxsb2M9cHl0aG9uMzQuUHlUeXBlX0dlbmVyaWNBbGxvYworICBQeVR5cGVfR2VuZXJpY05ldz1weXRob24zNC5QeVR5cGVfR2VuZXJpY05ldworICBQeVR5cGVfR2V0RmxhZ3M9cHl0aG9uMzQuUHlUeXBlX0dldEZsYWdzCisgIFB5VHlwZV9Jc1N1YnR5cGU9cHl0aG9uMzQuUHlUeXBlX0lzU3VidHlwZQorICBQeVR5cGVfTW9kaWZpZWQ9cHl0aG9uMzQuUHlUeXBlX01vZGlmaWVkCisgIFB5VHlwZV9SZWFkeT1weXRob24zNC5QeVR5cGVfUmVhZHkKKyAgUHlUeXBlX1R5cGU9cHl0aG9uMzQuUHlUeXBlX1R5cGUgREFUQQorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGU9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZworICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlSXRlcl9UeXBlPXB5dGhvbjM0LlB5VW5pY29kZUl0ZXJfVHlwZSBEQVRBCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVfQXBwZW5kPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXBwZW5kCisgIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9BcHBlbmRBbmREZWwKKyAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0FTQ0lJU3RyaW5nCisgIFB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0NoYXJtYXBTdHJpbmcKKyAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzRGVjb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzRGVjb2RlZFVuaWNvZGUKKyAgUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkU3RyaW5nCisgIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkVW5pY29kZQorICBQeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0xhdGluMVN0cmluZworICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNVVEYxNlN0cmluZworICBQeVVuaWNvZGVfQXNVVEYzMlN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzVVRGMzJTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzVVRGOFN0cmluZworICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNVbmljb2RlRXNjYXBlU3RyaW5nCisgIFB5VW5pY29kZV9Bc1dpZGVDaGFyPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNXaWRlQ2hhcgorICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0NsZWFyRnJlZWxpc3QKKyAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Db21wYXJlCisgIFB5VW5pY29kZV9Db25jYXQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Db25jYXQKKyAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQ29udGFpbnMKKyAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQ291bnQKKyAgUHlVbmljb2RlX0RlY29kZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZQorICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVBU0NJSQorICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAKKyAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZUZTRGVmYXVsdAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKKyAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZUxhdGluMQorICBQeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTYKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNlN0YXRlZnVsCisgIFB5VW5pY29kZV9EZWNvZGVVVEYzMj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjMyCisgIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMzJTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjgKKyAgUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjhTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRlNDb252ZXJ0ZXIKKyAgUHlVbmljb2RlX0ZTRGVjb2Rlcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0ZTRGVjb2RlcgorICBQeVVuaWNvZGVfRmluZD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0ZpbmQKKyAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zvcm1hdAorICBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbUZvcm1hdFYKKyAgUHlVbmljb2RlX0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tT2JqZWN0CisgIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21PcmRpbmFsCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbVN0cmluZworICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tU3RyaW5nQW5kU2l6ZQorICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbVdpZGVDaGFyCisgIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9HZXREZWZhdWx0RW5jb2RpbmcKKyAgUHlVbmljb2RlX0dldFNpemU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9HZXRTaXplCisgIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Jc0lkZW50aWZpZXIKKyAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Kb2luCisgIFB5VW5pY29kZV9QYXJ0aXRpb249cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9QYXJ0aXRpb24KKyAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9SUGFydGl0aW9uCisgIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9SU3BsaXQKKyAgUHlVbmljb2RlX1JlcGxhY2U9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9SZXBsYWNlCisgIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9SZXNpemUKKyAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUmljaENvbXBhcmUKKyAgUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9TcGxpdAorICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMKKyAgUHlVbmljb2RlX1RhaWxtYXRjaD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaAorICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlCisgIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjM0LlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCisgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCisgIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY3CisgIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjM0LlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKKyAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAorICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQorICBQeVVuaWNvZGVfVHlwZT1weXRob24zNC5QeVVuaWNvZGVfVHlwZSBEQVRBCisgIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCisgIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zNC5QeVdlYWtyZWZfTmV3UHJveHkKKyAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zNC5QeVdlYWtyZWZfTmV3UmVmCisgIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzQuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCisgIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzQuUHlXcmFwcGVyX05ldworICBQeVppcF9UeXBlPXB5dGhvbjM0LlB5WmlwX1R5cGUgREFUQQorICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zNC5QeV9BZGRQZW5kaW5nQ2FsbAorICBQeV9BdEV4aXQ9cHl0aG9uMzQuUHlfQXRFeGl0CisgIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzQuUHlfQnVpbGRWYWx1ZQorICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjM0LlB5X0NvbXBpbGVTdHJpbmcKKyAgUHlfRGVjUmVmPXB5dGhvbjM0LlB5X0RlY1JlZgorICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zNC5QeV9FbmRJbnRlcnByZXRlcgorICBQeV9FeGl0PXB5dGhvbjM0LlB5X0V4aXQKKyAgUHlfRmF0YWxFcnJvcj1weXRob24zNC5QeV9GYXRhbEVycm9yCisgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0ZpbmFsaXplPXB5dGhvbjM0LlB5X0ZpbmFsaXplCisgIFB5X0dldEJ1aWxkSW5mbz1weXRob24zNC5QeV9HZXRCdWlsZEluZm8KKyAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzQuUHlfR2V0Q29tcGlsZXIKKyAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjM0LlB5X0dldENvcHlyaWdodAorICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjM0LlB5X0dldEV4ZWNQcmVmaXgKKyAgUHlfR2V0UGF0aD1weXRob24zNC5QeV9HZXRQYXRoCisgIFB5X0dldFBsYXRmb3JtPXB5dGhvbjM0LlB5X0dldFBsYXRmb3JtCisgIFB5X0dldFByZWZpeD1weXRob24zNC5QeV9HZXRQcmVmaXgKKyAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjM0LlB5X0dldFByb2dyYW1GdWxsUGF0aAorICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zNC5QeV9HZXRQcm9ncmFtTmFtZQorICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjM0LlB5X0dldFB5dGhvbkhvbWUKKyAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuUHlfR2V0UmVjdXJzaW9uTGltaXQKKyAgUHlfR2V0VmVyc2lvbj1weXRob24zNC5QeV9HZXRWZXJzaW9uCisgIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0luY1JlZj1weXRob24zNC5QeV9JbmNSZWYKKyAgUHlfSW5pdGlhbGl6ZT1weXRob24zNC5QeV9Jbml0aWFsaXplCisgIFB5X0luaXRpYWxpemVFeD1weXRob24zNC5QeV9Jbml0aWFsaXplRXgKKyAgUHlfSXNJbml0aWFsaXplZD1weXRob24zNC5QeV9Jc0luaXRpYWxpemVkCisgIFB5X01haW49cHl0aG9uMzQuUHlfTWFpbgorICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjM0LlB5X01ha2VQZW5kaW5nQ2FsbHMKKyAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzQuUHlfTmV3SW50ZXJwcmV0ZXIKKyAgUHlfUmVwckVudGVyPXB5dGhvbjM0LlB5X1JlcHJFbnRlcgorICBQeV9SZXByTGVhdmU9cHl0aG9uMzQuUHlfUmVwckxlYXZlCisgIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjM0LlB5X1NldFByb2dyYW1OYW1lCisgIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzQuUHlfU2V0UHl0aG9uSG9tZQorICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zNC5QeV9TZXRSZWN1cnNpb25MaW1pdAorICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zNC5QeV9TeW10YWJsZVN0cmluZworICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzQuUHlfVmFCdWlsZFZhbHVlCisgIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzQuX1B5RXJyX0JhZEludGVybmFsQ2FsbAorICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjM0Ll9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKKyAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzQuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKKyAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zNC5fUHlPYmplY3RfR0NfTWFsbG9jCisgIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX05ldworICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19OZXdWYXIKKyAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zNC5fUHlPYmplY3RfR0NfUmVzaXplCisgIF9QeU9iamVjdF9OZXc9cHl0aG9uMzQuX1B5T2JqZWN0X05ldworICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjM0Ll9QeU9iamVjdF9OZXdWYXIKKyAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0Ll9QeVN0YXRlX0FkZE1vZHVsZQorICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjM0Ll9QeVRocmVhZFN0YXRlX0luaXQKKyAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzQuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKKyAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjM0Ll9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCisgIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjM0Ll9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKKyAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzQuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKKyAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zNC5fUHlUcmFzaF9kZXN0cm95X2NoYWluCisgIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCisgIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9CdWlsZFZhbHVlX1NpemVUCisgIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0Ll9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKKyAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zNC5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCisgIF9QeV9EZWFsbG9jPXB5dGhvbjM0Ll9QeV9EZWFsbG9jCisgIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zNC5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQorICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzQuX1B5X0ZhbHNlU3RydWN0IERBVEEKKyAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzQuX1B5X05vbmVTdHJ1Y3QgREFUQQorICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzQuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKKyAgX1B5X1N3YXBwZWRPcD1weXRob24zNC5fUHlfU3dhcHBlZE9wIERBVEEKKyAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzQuX1B5X1RydWVTdHJ1Y3QgREFUQQorICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZV9TaXplVD1weXRob24zNC5fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNC5fUHlfQnVpbGRWYWx1ZV9TaXplVApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5tYWsgYi9QQy9weXRob24zLm1hawppbmRleCA5Y2YxODA3Li5mYjhlN2FhIDEwMDY0NAotLS0gYS9QQy9weXRob24zLm1haworKysgYi9QQy9weXRob24zLm1hawpAQCAtMSwxNCArMSwxNCBAQAotJChPdXREaXIpcHl0aG9uMy5kbGw6CXB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKLQljbCAvTEQgL0ZlJChPdXREaXIpcHl0aG9uMy5kbGwgcHl0aG9uM2RsbC5jIHB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKKyQoT3V0RGlyKXB5dGhvbjMuZGxsOglweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCisJY2wgL0xEIC9GZSQoT3V0RGlyKXB5dGhvbjMuZGxsIHB5dGhvbjNkbGwuYyBweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCiAKLSQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWI6CXB5dGhvbjMzc3R1Yi5kZWYKLQlsaWIgL2RlZjpweXRob24zM3N0dWIuZGVmIC9vdXQ6JChPdXREaXIpcHl0aG9uMzNzdHViLmxpYiAvTUFDSElORTokKE1BQ0hJTkUpCiskKE91dERpcilweXRob24zNHN0dWIubGliOglweXRob24zNHN0dWIuZGVmCisJbGliIC9kZWY6cHl0aG9uMzRzdHViLmRlZiAvb3V0OiQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIgL01BQ0hJTkU6JChNQUNISU5FKQogCiBjbGVhbjoKIAlJRiBFWElTVCAkKE91dERpcilweXRob24zLmRsbCBkZWwgJChPdXREaXIpcHl0aG9uMy5kbGwKIAlJRiBFWElTVCAkKE91dERpcilweXRob24zLmxpYiBkZWwgJChPdXREaXIpcHl0aG9uMy5saWIKLQlJRiBFWElTVCAkKE91dERpcilweXRob24zM3N0dWIubGliIGRlbCAkKE91dERpcilweXRob24zM3N0dWIubGliCisJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYiBkZWwgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYgogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMuZXhwIGRlbCAkKE91dERpcilweXRob24zLmV4cAotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5leHAKKwlJRiBFWElTVCAkKE91dERpcilweXRob24zNHN0dWIuZXhwIGRlbCAkKE91dERpcilweXRob24zNHN0dWIuZXhwCiAKIHJlYnVpbGQ6IGNsZWFuICQoT3V0RGlyKXB5dGhvbjMuZGxsCmRpZmYgLS1naXQgYS9QQy9weXRob24zM2dlbi5weSBiL1BDL3B5dGhvbjM0Z2VuLnB5CnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIFBDL3B5dGhvbjMzZ2VuLnB5CnJlbmFtZSB0byBQQy9weXRob24zNGdlbi5weQppbmRleCAyMWI5ZjU2Li4xODBjZTExIDEwMDY0NAotLS0gYS9QQy9weXRob24zM2dlbi5weQorKysgYi9QQy9weXRob24zNGdlbi5weQpAQCAtMSw5ICsxLDkgQEAKLSMgR2VuZXJhdGUgcHl0aG9uMzNzdHViLmRlZiBvdXQgb2YgcHl0aG9uMy5kZWYKKyMgR2VuZXJhdGUgcHl0aG9uMzRzdHViLmRlZiBvdXQgb2YgcHl0aG9uMy5kZWYKICMgVGhlIHJlZ3VsYXIgaW1wb3J0IGxpYnJhcnkgY2Fubm90IGJlIHVzZWQsCiAjIHNpbmNlIGl0IGRvZXNuJ3QgcHJvdmlkZSB0aGUgcmlnaHQgc3ltYm9scyBmb3IKICMgZGF0YSBmb3J3YXJkaW5nCi1vdXQgPSBvcGVuKCJweXRob24zM3N0dWIuZGVmIiwgInciKQotb3V0LndyaXRlKCdMSUJSQVJZICJweXRob24zMyJcbicpCitvdXQgPSBvcGVuKCJweXRob24zNHN0dWIuZGVmIiwgInciKQorb3V0LndyaXRlKCdMSUJSQVJZICJweXRob24zNCJcbicpCiBvdXQud3JpdGUoJ0VYUE9SVFNcbicpCiAKIGlucCA9IG9wZW4oInB5dGhvbjMuZGVmIikKQEAgLTE0LDcgKzE0LDcgQEAKIGFzc2VydCBsaW5lLnN0cmlwKCk9PSdFWFBPUlRTJwogCiBmb3IgbGluZSBpbiBpbnA6Ci0gICAgIyBTWU0xPXB5dGhvbjMzLlNZTTJbIERBVEFdCisgICAgIyBTWU0xPXB5dGhvbjM0LlNZTTJbIERBVEFdCiAgICAgaGVhZCwgdGFpbCA9IGxpbmUuc3BsaXQoJy4nKQogICAgIGlmICdEQVRBJyBpbiB0YWlsOgogICAgICAgICBzeW1ib2wsIHRhaWwgPSB0YWlsLnNwbGl0KCcgJykKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMzc3R1Yi5kZWYgYi9QQy9weXRob24zNHN0dWIuZGVmCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIFBDL3B5dGhvbjMzc3R1Yi5kZWYKcmVuYW1lIHRvIFBDL3B5dGhvbjM0c3R1Yi5kZWYKaW5kZXggNWI4Y2NmNi4uYzBmM2IzNSAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMzNzdHViLmRlZgorKysgYi9QQy9weXRob24zNHN0dWIuZGVmCkBAIC0xLDQgKzEsNCBAQAotTElCUkFSWSAicHl0aG9uMzMiCitMSUJSQVJZICJweXRob24zNCIKIEVYUE9SVFMKIFB5QXJnX1BhcnNlCiBQeUFyZ19QYXJzZVR1cGxlCkBAIC0zNyw2ICszNyw3IEBACiBQeUNGdW5jdGlvbl9HZXRGbGFncwogUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KIFB5Q0Z1bmN0aW9uX0dldFNlbGYKK1B5Q0Z1bmN0aW9uX05ldwogUHlDRnVuY3Rpb25fTmV3RXgKIFB5Q0Z1bmN0aW9uX1R5cGUKIFB5Q2FsbEl0ZXJfTmV3CmRpZmYgLS1naXQgYS9QQy9yZWFkbWUudHh0IGIvUEMvcmVhZG1lLnR4dAppbmRleCBmZGMwOWFiLi42MGYyMzFlIDEwMDY0NAotLS0gYS9QQy9yZWFkbWUudHh0CisrKyBiL1BDL3JlYWRtZS50eHQKQEAgLTc5LDE5ICs3OSw2IEBACiBUaGUgc3ViZGlyZWN0b3JpZXMgVkM2LCBWUzcuMSBhbmQgVlM4LjAgY29udGFpbiBsZWdhY3kgc3VwcG9ydCBvbGRlcgogdmVyc2lvbnMgb2YgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIFNlZSBQQ2J1aWxkL3JlYWRtZS50eHQuCiAKLUVNWCBkZXZlbG9wbWVudCB0b29scyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVNlZSBvczJlbXgvcmVhZG1lLnR4dC4gVGhpcyBwbGF0Zm9ybSBpcyBtYWludGFpbmVkIGJ5IEFuZHJldyBNYWNJbnR5cmUuCi0KLUlCTSBWaXN1YWxBZ2UgQy9DKysgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU2VlIG9zMnZhY3BwL3JlYWRtZS50eHQuICBUaGlzIHBsYXRmb3JtIGlzIHN1cHBvcnRlZCBieSBKZWZmIFJ1c2guCi0KLU5PVEU6IFN1cHBvcnQgZm9yIG9zMnZhY3BwIG1heSBiZSBkcm9wcGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4gUGxlYXNlIG1vdmUKLSAgICAgIHRvIEVNWC4KLQogTm90ZSBmb3IgV2luZG93cyAzLnggYW5kIERPUyB1c2VycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9QQy93OXhwb3Blbi5jIGIvUEMvdzl4cG9wZW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5NzhkZC4uMDAwMDAwMAotLS0gYS9QQy93OXhwb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiB3OXhwb3Blbi5jCi0gKgotICogU2VydmVzIGFzIGFuIGludGVybWVkaWF0ZSBzdHViIFdpbjMyIGNvbnNvbGUgYXBwbGljYXRpb24gdG8KLSAqIGF2b2lkIGEgaGFuZ2luZyBwaXBlIHdoZW4gcmVkaXJlY3RpbmcgMTYtYml0IGNvbnNvbGUgYmFzZWQKLSAqIHByb2dyYW1zIChpbmNsdWRpbmcgTVMtRE9TIGNvbnNvbGUgYmFzZWQgcHJvZ3JhbXMgYW5kIGJhdGNoCi0gKiBmaWxlcykgb24gV2luZG93IDk1IGFuZCBXaW5kb3dzIDk4LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyB0byBiZSBsYXVuY2hlZCB3aXRoIHJlZGlyZWN0ZWQgc3RhbmRhcmQKLSAqIGhhbmRsZXMuIEl0IHdpbGwgbGF1bmNoIHRoZSBjb21tYW5kIGxpbmUgc3BlY2lmaWVkIDE2LWJpdAotICogY29uc29sZSBiYXNlZCBhcHBsaWNhdGlvbiBpbiB0aGUgc2FtZSBjb25zb2xlLCBmb3J3YXJkaW5nCi0gKiBpdHMgb3duIHJlZGlyZWN0ZWQgc3RhbmRhcmQgaGFuZGxlcyB0byB0aGUgMTYtYml0IGNoaWxkLgotCi0gKiBBS0Egc29sdXRpb24gdG8gdGhlIHByb2JsZW0gZGVzY3JpYmVkIGluIEtCOiBRMTUwOTU2LgotICovICAgIAotCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4gIC8qIGZvciBtYWxsb2MgYW5kIGl0cyBmcmllbmRzICovCi0KLWNvbnN0IGNoYXIgKnVzYWdlID0KLSJUaGlzIHByb2dyYW0gaXMgdXNlZCBieSBQeXRob24ncyBvcy5wb3BlbiBmdW5jdGlvblxuIgotInRvIHdvcmsgYXJvdW5kIGEgbGltaXRhdGlvbiBpbiBXaW5kb3dzIDk1Lzk4LiAgSXQgaXNcbiIKLSJub3QgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIHN0YW5kLWFsb25lIHByb2dyYW0uIjsKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgICBCT09MIGJSZXQ7Ci0gICAgU1RBUlRVUElORk8gc2k7Ci0gICAgUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKLSAgICBEV09SRCBleGl0X2NvZGU9MDsKLSAgICBzaXplX3QgY21kbGVuID0gMDsKLSAgICBpbnQgaTsKLSAgICBjaGFyICpjbWRsaW5lLCAqY21kbGluZWZpbGw7Ci0KLSAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgaWYgKEdldEZpbGVUeXBlKEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKSk9PUZJTEVfVFlQRV9DSEFSKQotICAgICAgICAgICAgLyogQXR0YWNoZWQgdG8gYSBjb25zb2xlLCBhbmQgdGhlcmVmb3JlIG5vdCBleGVjdXRlZCBieSBQeXRob24KLSAgICAgICAgICAgICAgIERpc3BsYXkgYSBtZXNzYWdlIGJveCBmb3IgdGhlIGlucXVpc2l0aXZlIHVzZXIKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBNZXNzYWdlQm94KE5VTEwsIHVzYWdlLCBhcmd2WzBdLCBNQl9PSyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogRWVlayAtIGV4ZWN1dGVkIGJ5IFB5dGhvbiwgYnV0IGFyZ3MgYXJlIHNjcmV3ZWQhCi0gICAgICAgICAgICAgICBXcml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvIHN0ZG91dCBzbyB0aGVyZSBpcyBhdAotICAgICAgICAgICAgICAgbGVhc3Qgc29tZSBjbHVlIGZvciB0aGUgZW5kIHVzZXIgd2hlbiBpdCBhcHBlYXJzCi0gICAgICAgICAgICAgICBpbiB0aGVpciBvdXRwdXQuCi0gICAgICAgICAgICAgICBBIG1lc3NhZ2UgYm94IHdvdWxkIGJlIGhpZGRlbiBhbmQgYmxvY2tzIHRoZSBhcHAuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiSW50ZXJuYWwgcG9wZW4gZXJyb3IgLSBubyBhcmdzIHNwZWNpZmllZFxuJXNcbiIsIHVzYWdlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgLyogQnVpbGQgdXAgdGhlIGNvbW1hbmQtbGluZSBmcm9tIHRoZSBhcmdzLgotICAgICAgIEFyZ3Mgd2l0aCBhIHNwYWNlIGFyZSBxdW90ZWQsIGV4aXN0aW5nIHF1b3RlcyBhcmUgZXNjYXBlZC4KLSAgICAgICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBzaXplLCB3ZSBhc3N1bWUKLSAgICAgICBldmVyeSBjaGFyYWN0ZXIgaXMgYSBxdW90ZSAtIGllLCB3ZSBhbGxvY2F0ZSBkb3VibGUgd2hhdCB3ZSBuZWVkCi0gICAgICAgaW4gdGhlIHdvcnN0IGNhc2UuICBBcyB0aGlzIGlzIG9ubHkgZG91YmxlIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkCi0gICAgICAgdG8gdXMsIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhpcyBpcyByZWFzb25hYmx5IHNtYWxsLCBzbyB0aGUgdG90YWwgCi0gICAgICAgYWxsb2NhdGlvbiB3aWxsIGFsbW9zdCBhbHdheXMgYmUgPCA1MTIgYnl0ZXMuCi0gICAgKi8KLSAgICBmb3IgKGk9MTtpPGFyZ2M7aSsrKQotICAgICAgICBjbWRsZW4gKz0gc3RybGVuKGFyZ3ZbaV0pKjIgKyAzOyAvKiBvbmUgc3BhY2UsIG1heWJlIDIgcXVvdGVzICovCi0gICAgY21kbGluZSA9IGNtZGxpbmVmaWxsID0gKGNoYXIgKiltYWxsb2MoY21kbGVuKzEpOwotICAgIGlmIChjbWRsaW5lID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBmb3IgKGk9MTtpPGFyZ2M7aSsrKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFyZ2xvb2s7Ci0gICAgICAgIGludCBiUXVvdGUgPSBzdHJjaHIoYXJndltpXSwgJyAnKSAhPSBOVUxMOwotICAgICAgICBpZiAoYlF1b3RlKQotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnIic7Ci0gICAgICAgIC8qIGVzY2FwZSBxdW90ZXMgKi8KLSAgICAgICAgZm9yIChhcmdsb29rPWFyZ3ZbaV07KmFyZ2xvb2s7YXJnbG9vaysrKSB7Ci0gICAgICAgICAgICBpZiAoKmFyZ2xvb2s9PSciJykKLSAgICAgICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICdcXCc7Ci0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICphcmdsb29rOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiUXVvdGUpCi0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICciJzsKLSAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnICc7Ci0gICAgfQotICAgICpjbWRsaW5lZmlsbCA9ICdcMCc7Ci0KLSAgICAvKiBNYWtlIGNoaWxkIHByb2Nlc3MgdXNlIHRoaXMgYXBwJ3Mgc3RhbmRhcmQgZmlsZXMuICovCi0gICAgWmVyb01lbW9yeSgmc2ksIHNpemVvZiBzaSk7Ci0gICAgc2kuY2IgPSBzaXplb2Ygc2k7Ci0gICAgc2kuZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOwotICAgIHNpLmhTdGRJbnB1dCA9IEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKTsKLSAgICBzaS5oU3RkT3V0cHV0ID0gR2V0U3RkSGFuZGxlKFNURF9PVVRQVVRfSEFORExFKTsKLSAgICBzaS5oU3RkRXJyb3IgPSBHZXRTdGRIYW5kbGUoU1REX0VSUk9SX0hBTkRMRSk7Ci0KLSAgICBiUmV0ID0gQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgTlVMTCwgY21kbGluZSwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgVFJVRSwgMCwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgJnNpLCAmcGkKLSAgICAgICAgKTsKLQotICAgIGZyZWUoY21kbGluZSk7Ci0KLSAgICBpZiAoYlJldCkgewotICAgICAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChwaS5oUHJvY2VzcywgSU5GSU5JVEUpICE9IFdBSVRfRkFJTEVEKSB7Ci0JICAgIEdldEV4aXRDb2RlUHJvY2VzcyhwaS5oUHJvY2VzcywgJmV4aXRfY29kZSk7Ci0JfQotICAgICAgICBDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0gICAgICAgIENsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotICAgICAgICByZXR1cm4gZXhpdF9jb2RlOwotICAgIH0KLQotICAgIHJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvUEMvd2lucmVnLmMgYi9QQy93aW5yZWcuYwppbmRleCAzYjk2OTNjLi41NjNhM2ViIDEwMDY0NAotLS0gYS9QQy93aW5yZWcuYworKysgYi9QQy93aW5yZWcuYwpAQCAtOTM3LDcgKzkzNyw3IEBACiAgICAgICAgICAgICAgICAgd2NoYXJfdCAqZGF0YSA9ICh3Y2hhcl90ICopcmV0RGF0YUJ1ZjsKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gcmV0RGF0YVNpemUgLyAyOwogICAgICAgICAgICAgICAgIGludCBzID0gY291bnRTdHJpbmdzKGRhdGEsIGxlbik7Ci0gICAgICAgICAgICAgICAgd2NoYXJfdCAqKnN0ciA9ICh3Y2hhcl90ICoqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCAqKSpzKTsKKyAgICAgICAgICAgICAgICB3Y2hhcl90ICoqc3RyID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90ICopKnMpOwogICAgICAgICAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKQEAgLTk1OCw3ICs5NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihzdHJbaW5kZXhdLCBsZW4pKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoc3RyKTsKIAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTc5Myw5ICsxNzkzLDkgQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkhLRVlUeXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlB5SEtFWV9UeXBlKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlFeGNfV2luZG93c0Vycm9yKTsKKyAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvcikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvcikgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBBZGQgdGhlIHJlbGV2YW50IGNvbnN0YW50cyAqLwpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpyZW5hbWUgdG8gUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLmQwZWU3MmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X292ZXJsYXBwZWQ8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjcgKzE1MCw4MyBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG92ZXJsYXBwZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fc2hhMy52Y3hwcm9qCnNpbWlsYXJpdHkgaW5kZXggNjUlCmNvcHkgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2oKY29weSB0byBQQ2J1aWxkL19zaGEzLnZjeHByb2oKaW5kZXggZDFhZmUyMi4uZjI0Y2JkYyAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NoYTMudmN4cHJvagpAQCAtMzUsMTA0ICszNSw5NSBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT53OXhwb3BlbjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8UHJvamVjdEd1aWQ+ezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPl9zaGEzPC9Sb290TmFtZXNwYWNlPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KLSAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgogICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KICAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CkBAIC0xNTksMTI3ICsxNTAsNjcgQEAKICAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc2hhM1xzaGEzbW9kdWxlLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qIGIvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCmluZGV4IDM5MmRhZDEuLmVkMzVkNWIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagorKysgYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKQEAgLTI0Myw3ICsyNDMsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmgiIC8+CiAgIDwvSXRlbUdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ouZmlsdGVycwppbmRleCA4OGU1ZmRiLi5kY2U3N2M5IDEwMDY0NAotLS0gYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ouZmlsdGVycworKysgYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ouZmlsdGVycwpAQCAtMzAsOSArMzAsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcc3FsaXRlY29tcGF0LmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fc3NsLnZjeHByb2ogYi9QQ2J1aWxkL19zc2wudmN4cHJvagppbmRleCBhZTcxZDE5Li43Mzc4Nzk0IDEwMDY0NAotLS0gYS9QQ2J1aWxkL19zc2wudmN4cHJvagorKysgYi9QQ2J1aWxkL19zc2wudmN4cHJvagpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgpAQCAtMjAwLDcgKzIwMCw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+CkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+CkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjN2FkMgotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qCkBAIC0wLDAgKzEsMTYxIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPl90ZXN0ZW1iZWQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGVtYmVkLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KKyAgICAgIDxQcml2YXRlPnRydWU8L1ByaXZhdGU+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+dHJ1ZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgICA8Q29weUxvY2FsU2F0ZWxsaXRlQXNzZW1ibGllcz5mYWxzZTwvQ29weUxvY2FsU2F0ZWxsaXRlQXNzZW1ibGllcz4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz50cnVlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICAgIDxVc2VMaWJyYXJ5RGVwZW5kZW5jeUlucHV0cz5mYWxzZTwvVXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE1NGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDIyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5oO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPnJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4O3RpZmY7dGlmO3BuZzt3YXY7bWZjcmliYm9uLW1zPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RlbWJlZC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvaiBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCnNpbWlsYXJpdHkgaW5kZXggNjUlCmNvcHkgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2oKY29weSB0byBQQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagppbmRleCBkMWFmZTIyLi44NDk4NGZmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2oKKysrIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKQEAgLTM1LDEwNCArMzUsOTUgQEAKICAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgogICA8L0l0ZW1Hcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fTwvUHJvamVjdEd1aWQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+dzl4cG9wZW48L1Jvb3ROYW1lc3BhY2U+CisgICAgPFByb2plY3RHdWlkPnszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5fdGVzdGltcG9ydG11bHRpcGxlPC9Sb290TmFtZXNwYWNlPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KLSAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgogICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KICAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CkBAIC0xNTksMTI5ICsxNTAsNjkgQEAKICAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1x3OXhwb3Blbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qLmZpbHRlcnMKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKcmVuYW1lIHRvIFBDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGVjNjdhZC4uZGIwZDBhNiAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwpAQCAtMiwxMiArMiwxMiBAQAogPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwPgogICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthYmMyZGZmZC0zZjJhLTQ3YmQtYjg5Yi0wMzE0Yzk5ZWYyMWV9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezFlYzM4YWQ5LTFhYmYtNGI4MC04NjI4LWFjNDNjY2JhMzI0Yn08L1VuaXF1ZUlkZW50aWZpZXI+CiAgICAgPC9GaWx0ZXI+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKaW5kZXggMzU3YjA4Yi4uODA1ZDc3YSAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9zc2wuYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfc3NsLmJhdApAQCAtMiwxMCArMiwxMCBAQAogaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAogICBpZiAlMSBFUVUgRGVidWcgKAogICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzNfZC5kbGwgZXhpdCAxCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0X2QuZGxsIGV4aXQgMQogICApIEVMU0UgKAogICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzLmRsbCBleGl0IDEKKyAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzQuZGxsIGV4aXQgMQogICApCiApCiAlSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMwpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZF90a2ludGVyLnB5IGIvUENidWlsZC9idWlsZF90a2ludGVyLnB5CmluZGV4IDQxOTZjZjMuLmM4MDdlN2IgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQorKysgYi9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKQEAgLTExLDE2ICsxMSwxMiBAQAogaGVyZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQogcGFyID0gb3MucGF0aC5wYXJkaXIKIAotVENMID0gInRjbDguNS4xMSIKLVRLID0gInRrOC41LjExIgotVElYID0gInRpeC04LjQuMy54IgorVENMID0gInRjbDguNi4xIgorVEsgPSAidGs4LjYuMSIKK1RJWCA9ICJ0aXgtOC40LjMuMyIKIAogUk9PVCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgcGFyLCBwYXIpKQotIyBXaW5kb3dzIDIwMDAgY29tcGF0aWJpbGl0eTogV0lOVkVSIDB4MDUwMAotIyBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzgzNzQ1LmFzcHgKLU5NQUtFID0gKCdubWFrZSAvbm9sb2dvIC9mICVzICcKLSAgICAnQ09NUElMRVJGTEFHUz1cIi1EV0lOVkVSPTB4MDUwMCAtRF9XSU4zMl9XSU5OVD0weDA1MDAgLUROVERESV9WRVJTSU9OPU5URERJX1dJTjJLU1A0XCIgJwotICAgICclcyAlcycpCitOTUFLRSA9ICgnbm1ha2UgL25vbG9nbyAvZiAlcyAlcyAlcycpCiAKIGRlZiBubWFrZShtYWtlZmlsZSwgY29tbWFuZD0iIiwgKiprdyk6CiAgICAgZGVmaW5lcyA9ICcgJy5qb2luKGsrJz0nK3N0cih2KSBmb3IgaywgdiBpbiBrdy5pdGVtcygpKQpkaWZmIC0tZ2l0IGEvUENidWlsZC9raWxsX3B5dGhvbi5jIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCmluZGV4IGJiMzIzZDMuLjYwNDczMWYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQva2lsbF9weXRob24uYworKysgYi9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAogICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zM1tfZF0uZGxsKSwKKyAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zNFtfZF0uZGxsKSwKICAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCiAgICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKICAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvUENidWlsZC9wY2J1aWxkLnNsbiBiL1BDYnVpbGQvcGNidWlsZC5zbG4KaW5kZXggZDZhMDIyZi4uZTQzMWM5MSAxMDA2NDQKLS0tIGEvUENidWlsZC9wY2J1aWxkLnNsbgorKysgYi9QQ2J1aWxkL3BjYnVpbGQuc2xuCkBAIC0xNCw4ICsxNCw2IEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmN4cHJvaiIsICJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCiBFbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3OXhwb3BlbiIsICJ3OXhwb3Blbi52Y3hwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLUVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjeHByb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAid2luc291bmQiLCAid2luc291bmQudmN4cHJvaiIsICJ7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fSINCkBAIC0zOCw2ICszNiw4IEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGNhcGkiLCAiX3Rlc3RjYXBpLnZjeHByb2oiLCAiezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsICJfdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oiLCAiezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0iDQorRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmN4cHJvaiIsICJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfYnoyIiwgIl9iejIudmN4cHJvaiIsICJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCkBAIC03NCw2ICs3NCwxMiBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2ZyZWV6ZV9pbXBvcnRsaWIiLCAiX2ZyZWV6ZV9pbXBvcnRsaWIudmN4cHJvaiIsICJ7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfSINCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc2hhMyIsICJfc2hhMy52Y3hwcm9qIiwgInsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9vdmVybGFwcGVkIiwgIl9vdmVybGFwcGVkLnZjeHByb2oiLCAie0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RlbWJlZCIsICJfdGVzdGVtYmVkLnZjeHByb2oiLCAiezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0iDQorRW5kUHJvamVjdA0KIEdsb2JhbA0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KIAkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KQEAgLTE1MCwyMiArMTU2LDYgQEAKIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KQEAgLTM0Miw2ICszMzIsMjIgQEAKIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCkBAIC02MTEsNiArNjE3LDU0IEBACiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCUVuZEdsb2JhbFNlY3Rpb24NCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCiAJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzIGIvUENidWlsZC9weXByb2plY3QucHJvcHMKaW5kZXggODE1NTIzMS4uN2I2NTk2MSAxMDA2NDQKLS0tIGEvUENidWlsZC9weXByb2plY3QucHJvcHMKKysrIGIvUENidWlsZC9weXByb2plY3QucHJvcHMKQEAgLTEzLDIwICsxMywyMCBAQAogICAgIDxJbnREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIj4KLSAgICA8UHlEbGxOYW1lPnB5dGhvbjMzJChQeURlYnVnRXh0KTwvUHlEbGxOYW1lPgorICAgIDxQeURsbE5hbWU+cHl0aG9uMzQkKFB5RGVidWdFeHQpPC9QeURsbE5hbWU+CiAgICAgPFB5dGhvbkV4ZT4kKE91dERpcilweXRob24kKFB5RGVidWdFeHQpLmV4ZTwvUHl0aG9uRXhlPgogICAgIDxLaWxsUHl0aG9uRXhlPiQoT3V0RGlyKWtpbGxfcHl0aG9uJChQeURlYnVnRXh0KS5leGU8L0tpbGxQeXRob25FeGU+CiAgICAgPGV4dGVybmFsc0Rpcj4uLlwuLjwvZXh0ZXJuYWxzRGlyPgotICAgIDxzcWxpdGUzRGlyPiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy43LjEyPC9zcWxpdGUzRGlyPgorICAgIDxzcWxpdGUzRGlyPiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy44LjE8L3NxbGl0ZTNEaXI+CiAgICAgPGJ6MkRpcj4kKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjY8L2J6MkRpcj4KLSAgICA8bHptYURpcj4kKGV4dGVybmFsc0RpcilceHotNS4wLjM8L2x6bWFEaXI+CisgICAgPGx6bWFEaXI+JChleHRlcm5hbHNEaXIpXHh6LTUuMC41PC9sem1hRGlyPgogICAgIDxvcGVuc3NsRGlyPiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4xZTwvb3BlbnNzbERpcj4KICAgICA8dGNsdGtEaXI+JChleHRlcm5hbHNEaXIpXHRjbHRrPC90Y2x0a0Rpcj4KICAgICA8dGNsdGs2NERpcj4kKGV4dGVybmFsc0RpcilcdGNsdGs2NDwvdGNsdGs2NERpcj4KLSAgICA8dGNsdGtMaWI+JCh0Y2x0a0RpcilcbGliXHRjbDg1LmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NS5saWI8L3RjbHRrTGliPgotICAgIDx0Y2x0a0xpYkRlYnVnPiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliOyQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWI8L3RjbHRrTGliRGVidWc+Ci0gICAgPHRjbHRrNjRMaWI+JCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliOyQodGNsdGs2NERpcilcbGliXHRrODUubGliPC90Y2x0azY0TGliPgotICAgIDx0Y2x0azY0TGliRGVidWc+JCh0Y2x0azY0RGlyKVxsaWJcdGNsODVnLmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg1Zy5saWI8L3RjbHRrNjRMaWJEZWJ1Zz4KKyAgICA8dGNsdGtMaWI+JCh0Y2x0a0RpcilcbGliXHRjbDg2dC5saWI7JCh0Y2x0a0RpcilcbGliXHRrODZ0LmxpYjwvdGNsdGtMaWI+CisgICAgPHRjbHRrTGliRGVidWc+JCh0Y2x0a0RpcilcbGliXHRjbDg2dGcubGliOyQodGNsdGtEaXIpXGxpYlx0azg2dGcubGliPC90Y2x0a0xpYkRlYnVnPgorICAgIDx0Y2x0azY0TGliPiQodGNsdGs2NERpcilcbGliXHRjbDg2dC5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NnQubGliPC90Y2x0azY0TGliPgorICAgIDx0Y2x0azY0TGliRGVidWc+JCh0Y2x0azY0RGlyKVxsaWJcdGNsODZ0Zy5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NnRnLmxpYjwvdGNsdGs2NExpYkRlYnVnPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxDbENvbXBpbGU+CkBAIC00OSw5ICs0OSw4IEBACiAgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KICAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YWJhc2VGaWxlPgogICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+Ci0gICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPmZhbHNlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+Ci0gICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+Ci0gICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz50cnVlPC9SYW5kb21pemVkQmFzZUFkZHJlc3M+CisgICAgICA8RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+dHJ1ZTwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgICA8UmVzb3VyY2VDb21waWxlPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob24udmN4cHJvaiBiL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKaW5kZXggZDBhOWRlMC4uYmQxMjYyNCAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob24udmN4cHJvagorKysgYi9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICA8TGluaz4KICAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbl9kLmV4ZTwvT3V0cHV0RmlsZT4KICAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+MjEwMDAwMDwvU3RhY2tSZXNlcnZlU2l6ZT4KKyAgICAgIDxTdGFja1Jlc2VydmVTaXplPjQxOTQzMDQ8L1N0YWNrUmVzZXJ2ZVNpemU+CiAgICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CkBAIC0zNTcsMTIgKzM1Nyw4IEBACiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CiAgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Inc5eHBvcGVuLnZjeHByb2oiPgotICAgICAgPFByb2plY3Q+e2U5ZTBhMWY2LTAwMDktNGU4Yy1iOGY4LTFiOGY1ZDQ5YTA1OH08L1Byb2plY3Q+Ci0gICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagppbmRleCA4OWE2M2QxLi4xMWI3MDU0IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagorKysgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagpAQCAtNDYwLDYgKzQ2MCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHBhdGNobGV2ZWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGdlbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxwZ2VuaGVhZGVycy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWhhc2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHlfY3Vyc2VzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5YXJlbmEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHljYXBzdWxlLmgiIC8+CkBAIC00OTYsNyArNDk3LDExIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHVuaWNvZGVvYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVcd2Vha3JlZm9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfbWF0aC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xoYXNodGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfY29uc3RhbnRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9saWIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6bGliXGNyYzMyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5oIiAvPgpAQCAtNTIzLDYgKzUyOCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxmYXN0c2VhcmNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxmaW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHVuaWNvZGV0eXBlX2RiLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxQYXJzZXJccGFyc2VyLmgiIC8+CkBAIC01NDgsNiArNTU0LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3BpY2tsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcmUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0YXQuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0cnVjdC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfd2Vha3JlZi5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jIiAvPgpAQCAtNTU5LDEyICs1NjYsMTQgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZmF1bHRoYW5kbGVyLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGdjbW9kdWxlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGhhc2h0YWJsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWFpbi5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1kNW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG9wZXJhdG9yLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGNvZGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wZXJhdG9yLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYyIgLz4KQEAgLTU3NCw2ICs1ODMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdHJhY2VtYWxsb2MuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcdGltZW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x4eHN1YnR5cGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemlwaW1wb3J0LmMiIC8+CkBAIC02NTksNiArNjY5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXGRsX250LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xnZXRwYXRocC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcbXN2Y3J0bW9kdWxlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHloYXNoLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccmFuZG9tLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25cX3dhcm5pbmdzLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25cYXNkbC5jIiAvPgpAQCAtNzI1LDQgKzczNiw0IEBACiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMDliNGJiNC4uNDFmZTFiMiAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0zMDAsNiArMzAwLDE1IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmUuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfbGliLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNcX2lvPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0zNzgsNiArMzg3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIj4KICAgICAgIDxGaWx0ZXI+T2JqZWN0czwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccmVwbGFjZS5oIj4KKyAgICAgIDxGaWx0ZXI+T2JqZWN0czwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcc3BsaXQuaCI+CiAgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQwOSw2ICs0MjEsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cUHl0aG9uXGNldmFsX2dpbC5oIj4KICAgICAgIDxGaWx0ZXI+UHl0aG9uPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5aGFzaC5oIj4KKyAgICAgIDxGaWx0ZXI+SW5jbHVkZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jIj4KQEAgLTQ5OCw3ICs1MTMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG9wZXJhdG9yLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfb3BlcmF0b3IuYyI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiPgpAQCAtOTE2LDYgKzkzMSwxMiBAQAogICAgICAgPEZpbHRlcj5QQzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xuYW1lc3BhY2VvYmplY3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0YXQuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWhhc2guYyI+CisgICAgICA8RmlsdGVyPlB5dGhvbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3JlYWRtZS50eHQgYi9QQ2J1aWxkL3JlYWRtZS50eHQKaW5kZXggNmYwNzY4OS4uMzI2MzU3MCAxMDA2NDQKLS0tIGEvUENidWlsZC9yZWFkbWUudHh0CisrKyBiL1BDYnVpbGQvcmVhZG1lLnR4dApAQCAtMSwyMDAgKzEsMjU5IEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyAxMC4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWlsZGluZyBQeXRob24gdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgYW5kIHg2NCBwbGF0Zm9ybXMsIGUuZy4KLVdpbmRvd3MgWFAsIFZpc3RhIGFuZCBXaW5kb3dzIFNlcnZlciAyMDA4LiAgSW4gb3JkZXIgdG8gYnVpbGQgMzItYml0Ci1kZWJ1ZyBhbmQgcmVsZWFzZSBleGVjdXRhYmxlcywgTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCBFeHByZXNzIEVkaXRpb24gaXMKLXJlcXVpcmVkIGF0IHRoZSB2ZXJ5IGxlYXN0LiAgSW4gb3JkZXIgdG8gYnVpbGQgNjQtYml0IGRlYnVnIGFuZCByZWxlYXNlCi1leGVjdXRhYmxlcywgVmlzdWFsIFN0dWRpbyAyMDEwIFN0YW5kYXJkIEVkaXRpb24gaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkKLWxlYXN0LiAgSW4gb3JkZXIgdG8gYnVpbGQgYWxsIG9mIHRoZSBhYm92ZSwgYXMgd2VsbCBhcyBnZW5lcmF0ZSByZWxlYXNlIGJ1aWxkcwotdGhhdCBtYWtlIHVzZSBvZiBQcm9maWxlIEd1aWRlZCBPcHRpbWlzYXRpb24gKFBHMCksIFZpc3VhbCBTdHVkaW8gMjAxMAotUHJvZmVzc2lvbmFsIEVkaXRpb24gaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkgbGVhc3QuICBUaGUgb2ZmaWNpYWwgUHl0aG9uCi1yZWxlYXNlcyBhcmUgYnVpbHQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmlzdWFsIFN0dWRpby4KK1RoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgQ1B5dGhvbiBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgTlQgdmVyc2lvbgorNS4xIG9yIGhpZ2hlciAoV2luZG93cyBYUCwgV2luZG93cyBTZXJ2ZXIgMjAwMywgb3IgbGF0ZXIpIG9uIDMyIGFuZCA2NAorYml0IHBsYXRmb3Jtcy4gIFVzaW5nIHRoaXMgZGlyZWN0b3J5IHJlcXVpcmVzIGFuIGluc3RhbGxhdGlvbiBvZgorTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCAoTVNWQyAxMC4wKSBvZiBhbnkgZWRpdGlvbi4gIFRoZSBzcGVjaWZpYworcmVxdWlyZW1lbnRzIGFyZSBhcyBmb2xsb3dzOgorVmlzdWFsIEMrKyAyMDEwIEV4cHJlc3MgRWRpdGlvbgorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyAzMi1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMuCisgICAgVGhpcyBlZGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgInNvbHV0aW9uIGZvbGRlcnMiLCB3aGljaCBwY2J1aWxkLnNsbgorICAgIHVzZXM7IHRoaXMgd2lsbCBub3QgcHJldmVudCBidWlsZGluZy4KK1Zpc3VhbCBTdHVkaW8gMjAxMCBTdGFuZGFyZCBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIDY0LWJpdCBEZWJ1ZyBhbmQgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcworVmlzdWFsIFN0dWRpbyAyMDEwIFByb2Zlc3Npb25hbCBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMgdGhhdCBtYWtlIHVzZSBvZgorICAgIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbiAoUEdPKSwgb24gZWl0aGVyIHBsYXRmb3JtLiAgVGhlIG9mZmljaWFsCisgICAgUHl0aG9uIHJlbGVhc2VzIGFyZSBidWlsdCB3aXRoIFByb2Zlc3Npb25hbCBFZGl0aW9uIHVzaW5nIFBHTy4KIAotRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9QQy9yZWFkbWUudHh0LgorQWxsIHlvdSBuZWVkIHRvIGRvIHRvIGJ1aWxkIGlzIG9wZW4gdGhlIHNvbHV0aW9uICJwY2J1aWxkLnNsbiIgaW4gVmlzdWFsCitTdHVkaW8sIHNlbGVjdCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBwbGF0Zm9ybSwKK3RoZW4gYnVpbGQgd2l0aCAiQnVpbGQgU29sdXRpb24iIG9yIHRoZSBGNyBrZXlib2FyZCBzaG9ydGN1dC4gIFlvdSBjYW4KK2Fsc28gYnVpbGQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHVzaW5nIHRoZSAiYnVpbGQuYmF0IiBzY3JpcHQgaW4gdGhpcworZGlyZWN0b3J5LiAgVGhlIHNvbHV0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgdGhlIHByb2plY3RzIGluIHRoZQorY29ycmVjdCBvcmRlci4KIAotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5zbG4iIGluIFZpc3VhbCBTdHVkaW8sCi1zZWxlY3QgdGhlIGRlc2lyZWQgY29tYmluYXRpb24gb2YgY29uZmlndXJhdGlvbiBhbmQgcGxhdGZvcm0gYW5kIGV2ZW50dWFsbHkKLWJ1aWxkIHRoZSBzb2x1dGlvbi4gVW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcgYSBwcm9ibGVtIGluIHRoZSBjb3JlIG9yCi15b3UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhbiBvcHRpbWl6ZWQgYnVpbGQgeW91IHdhbnQgdG8gc2VsZWN0ICJSZWxlYXNlIiBhcwotY29uZmlndXJhdGlvbi4KK1RoZSBzb2x1dGlvbiBjdXJyZW50bHkgc3VwcG9ydHMgdHdvIHBsYXRmb3Jtcy4gIFRoZSBXaW4zMiBwbGF0Zm9ybSBpcwordXNlZCB0byBidWlsZCBzdGFuZGFyZCB4ODYtY29tcGF0aWJsZSAzMi1iaXQgYmluYXJpZXMsIG91dHB1dCBpbnRvIHRoaXMKK2RpcmVjdG9yeS4gIFRoZSB4NjQgcGxhdGZvcm0gaXMgdXNlZCBmb3IgYnVpbGRpbmcgNjQtYml0IEFNRDY0IChha2EKK3g4Nl82NCBvciBFTTY0VCkgYmluYXJpZXMsIG91dHB1dCBpbnRvIHRoZSBhbWQ2NCBzdWItZGlyZWN0b3J5IHdoaWNoCit3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgVGhlIEl0YW5pdW0gKElBLTY0KQorcGxhdGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFNlZSB0aGUgIkJ1aWxkaW5nIGZvciBBTUQ2NCIgc2VjdGlvbgorYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgNjQtYml0IGJ1aWxkcy4KIAotVGhlIFBDYnVpbGQgZGlyZWN0b3J5IGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpbyBmcm9tCi1WUyBDKysgRXhwcmVzcyBFZGl0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIGVkaXRpb24gdXAgdG8gdGhlIHByb2Zlc3Npb25hbAotZWRpdGlvbi4gSG93ZXZlciB0aGUgZXhwcmVzcyBlZGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZXMgbGlrZSBzb2x1dGlvbgotZm9sZGVycyBvciBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24gKFBHTykuIFRoZSBtaXNzaW5nIGJpdHMgYW5kIHBpZWNlcwotd29uJ3Qgc3RvcCB5b3UgZnJvbSBidWlsZGluZyBQeXRob24uCitGb3VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBzb2x1dGlvbjoKK0RlYnVnCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gd2l0aCBleHRyYSBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLCBlcXVpdmFsZW50CisgICAgdG8gdXNpbmcgLi9jb25maWd1cmUgLS13aXRoLXB5ZGVidWcgb24gVU5JWC4gIEFsbCBiaW5hcmllcyBidWlsdAorICAgIHVzaW5nIHRoaXMgY29uZmlndXJhdGlvbiBoYXZlICJfZCIgYWRkZWQgdG8gdGhlaXIgbmFtZToKKyAgICBweXRob24zNF9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4gIEJvdGggdGhlCisgICAgYnVpbGQgYW5kIHJ0IChydW4gdGVzdCkgYmF0Y2ggZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgYWNjZXB0IGEgLWQKKyAgICBvcHRpb24gZm9yIGRlYnVnIGJ1aWxkcy4gIElmIHlvdSBhcmUgYnVpbGRpbmcgUHl0aG9uIHRvIGhlbHAgd2l0aAorICAgIGRldmVsb3BtZW50IG9mIENQeXRob24sIHlvdSB3aWxsIG1vc3QgbGlrZWx5IHVzZSB0aGlzIGNvbmZpZ3VyYXRpb24uCitQR0luc3RydW1lbnQsIFBHVXBkYXRlCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gaW4gUmVsZWFzZSBjb25maWd1cmF0aW9uIHVzaW5nIFBHTywgd2hpY2gKKyAgICByZXF1aXJlcyBQcm9mZXNzaW9uYWwgRWRpdGlvbiBvZiBWaXN1YWwgU3R1ZGlvLiAgU2VlIHRoZSAiUHJvZmlsZQorICAgIEd1aWRlZCBPcHRpbWl6YXRpb24iIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBCdWlsZAorICAgIG91dHB1dCBmcm9tIGVhY2ggb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgbGFuZHMgaW4gaXRzIG93bgorICAgIHN1Yi1kaXJlY3Rvcnkgb2YgdGhpcyBkaXJlY3RvcnkuICBUaGUgb2ZmaWNpYWwgUHl0aG9uIHJlbGVhc2VzIGFyZQorICAgIGJ1aWx0IHVzaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgorUmVsZWFzZQorICAgIFVzZWQgdG8gYnVpbGQgUHl0aG9uIGFzIGl0IGlzIG1lYW50IHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbgorICAgIHNldHRpbmdzLCB0aG91Z2ggd2l0aG91dCBQR08uCiAKLVRoZSBzb2x1dGlvbiBpcyBjb25maWd1cmVkIHRvIGJ1aWxkIHRoZSBwcm9qZWN0cyBpbiB0aGUgY29ycmVjdCBvcmRlci4gIkJ1aWxkCi1Tb2x1dGlvbiIgb3IgRjcgdGFrZXMgY2FyZSBvZiBkZXBlbmRlbmNpZXMgZXhjZXB0IGZvciB4NjQgYnVpbGRzLiBUbyBtYWtlCi1jcm9zcyBjb21waWxpbmcgeDY0IGJ1aWxkcyBvbiBhIDMyYml0IE9TIHBvc3NpYmxlIHRoZSB4NjQgYnVpbGRzIHJlcXVpcmUgYQotMzJiaXQgdmVyc2lvbiBvZiBQeXRob24uCi0KLU5PVEU6Ci0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzCi0gICB5b3UncmUgYnVpbGRpbmcgYW4gZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvcgotICAgc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50LCBvciBhcmUKLSAgIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdCB0ZXN0IHNsYXZlOyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uIEJvdGgKLXRoZSBidWlsZCBhbmQgcnQgYmF0Y2ggZmlsZXMgYWNjZXB0IGEgLWQgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuCi0KLVRoZSAzMmJpdCBidWlsZHMgZW5kIHVwIGluIHRoZSBzb2x1dGlvbiBmb2xkZXIgUENidWlsZCB3aGlsZSB0aGUgeDY0IGJ1aWxkcwotbGFuZCBpbiB0aGUgYW1kNjQgc3ViZm9sZGVyLiBUaGUgUEdJIGFuZCBQR08gYnVpbGRzIGZvciBwcm9maWxlIGd1aWRlZAotb3B0aW1pemF0aW9uIGVuZCB1cCBpbiB0aGVpciBvd24gZm9sZGVycywgdG9vLgogCiBMZWdhY3kgc3VwcG9ydAogLS0tLS0tLS0tLS0tLS0KIAogWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZAotVmlzdWFsIEMrKyBpbiB0aGUgUEMgZGlyZWN0b3J5LiBUaGUgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBubyBsb25nZXIKLWFjdGl2ZWx5IG1haW50YWluZWQgYW5kIG1heSBub3Qgd29yayBvdXQgb2YgdGhlIGJveC4KK1Zpc3VhbCBDKysgaW4gdGhlIFBDIGRpcmVjdG9yeS4gVGhlIGxlZ2FjeSBidWlsZCBkaXJlY3RvcmllcyBhcmUgbm8KK2xvbmdlciBhY3RpdmVseSBtYWludGFpbmVkIGFuZCBtYXkgbm90IHdvcmsgb3V0IG9mIHRoZSBib3guCiAKLVBDL1ZDNi8KLSAgICBWaXN1YWwgQysrIDYuMAotUEMvVlM3LjEvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDAzICg3LjEpCi1QQy9WUzguMC8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDUgKDguMCkKLVBDL1ZTOS4wLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwOCAoOS4wKQorQ3VycmVudGx5LCB0aGUgb25seSBsZWdhY3kgYnVpbGQgZGlyZWN0b3J5IGlzIFBDXFZTOS4wLCBmb3IgVmlzdWFsCitTdHVkaW8gMjAwOCAoOS4wKS4KIAogCi1DIFJVTlRJTUUKK0MgUnVudGltZQogLS0tLS0tLS0tCiAKLVZpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlIGV4ZWN1dGFibGVzCi1ubyBsb25nZXIgdXNlIHRoZSAiU2lkZSBieSBTaWRlIiBhc3NlbWJsaWVzIHVzZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlCi1jb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLgotVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXIgdmlzdWFsIHN0dWRpbwotZGlzdHJpYnV0aW9uLiBGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFJlYWRtZSBpbiB0aGUgVkMvUmVkaXN0IGZvbGRlci4KK1Zpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlCitleGVjdXRhYmxlcyBubyBsb25nZXIgdXNlIHRoZSAiU2lkZSBieSBTaWRlIiBhc3NlbWJsaWVzIHVzZWQgaW4gcHJldmlvdXMKK3ZlcnNpb25zIG9mIHRoZSBjb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLgogCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgorVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXIKK1Zpc3VhbCBTdHVkaW8gZGlzdHJpYnV0aW9uLiBGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFJlYWRtZSBpbiB0aGUKK1ZDL1JlZGlzdCBmb2xkZXIuCiAKKworU3ViLVByb2plY3RzCistLS0tLS0tLS0tLS0KKworVGhlIENQeXRob24gcHJvamVjdCBpcyBzcGxpdCB1cCBpbnRvIHNldmVyYWwgc21hbGxlciBzdWItcHJvamVjdHMgd2hpY2gKK2FyZSBtYW5hZ2VkIGJ5IHRoZSBwY2J1aWxkLnNsbiBzb2x1dGlvbiBmaWxlLiAgRWFjaCBzdWItcHJvamVjdCBpcworcmVwcmVzZW50ZWQgYnkgYSAudmN4cHJvaiBhbmQgYSAudmN4cHJvai5maWx0ZXJzIGZpbGUgc3RhcnRpbmcgd2l0aCB0aGUKK25hbWUgb2YgdGhlIHN1Yi1wcm9qZWN0LiAgVGhlc2Ugc3ViLXByb2plY3RzIGZhbGwgaW50byBhIGZldyBnZW5lcmFsCitjYXRlZ29yaWVzOgorCitUaGUgZm9sbG93aW5nIHN1Yi1wcm9qZWN0cyByZXByZXNlbnQgdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCB0byBidWlsZAorYSBmdW5jdGlvbmluZyBDUHl0aG9uIGludGVycHJldGVyLiAgSWYgbm90aGluZyBlbHNlIGJ1aWxkcyBidXQgdGhlc2UsCit5b3UnbGwgaGF2ZSBhIHZlcnkgbGltaXRlZCBidXQgdXNhYmxlIHB5dGhvbi5leGU6CiBweXRob25jb3JlCiAgICAgLmRsbCBhbmQgLmxpYgogcHl0aG9uCiAgICAgLmV4ZQora2lsbF9weXRob24KKyAgICBraWxsX3B5dGhvbi5leGUsIGEgc21hbGwgcHJvZ3JhbSBkZXNpZ25lZCB0byBraWxsIGFueSBpbnN0YW5jZXMgb2YKKyAgICBweXRob24oX2QpLmV4ZSB0aGF0IGFyZSBydW5uaW5nIGFuZCBsaXZlIGluIHRoZSBidWlsZCBvdXRwdXQKKyAgICBkaXJlY3Rvcnk7IHRoaXMgaXMgbWVhbnQgdG8gYXZvaWQgYnVpbGQgaXNzdWVzIGR1ZSB0byBsb2NrZWQgZmlsZXMKK21ha2VfYnVpbGRpbmZvLCBtYWtlX3ZlcnNpb25pbmZvCisgICAgaGVscGVycyB0byBwcm92aWRlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byB0aGUgYnVpbGQgcHJvY2VzcworCitUaGVzZSBzdWItcHJvamVjdHMgcHJvdmlkZSBleHRyYSBleGVjdXRhYmxlcyB0aGF0IGFyZSB1c2VmdWwgZm9yIHJ1bm5pbmcKK0NQeXRob24gaW4gZGlmZmVyZW50IHdheXM6CiBweXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94CisgICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBvcGVuIGEgQ29tbWFuZAorICAgIFByb21wdCB3aW5kb3cKK3B5bGF1bmNoZXIKKyAgICBweS5leGUsIHRoZSBQeXRob24gTGF1bmNoZXIgZm9yIFdpbmRvd3MsIHNlZQorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI2xhdW5jaGVyCitweXdsYXVuY2hlcgorICAgIHB5dy5leGUsIGEgdmFyaWFudCBvZiBweS5leGUgdGhhdCBkb2Vzbid0IG9wZW4gYSBDb21tYW5kIFByb21wdAorICAgIHdpbmRvdworX3Rlc3RlbWJlZAorICAgIF90ZXN0ZW1iZWQuZXhlLCBhIHNtYWxsIHByb2dyYW0gdGhhdCBlbWJlZHMgUHl0aG9uIGZvciB0ZXN0aW5nCisgICAgcHVycG9zZXMsIHVzZWQgYnkgdGVzdF9jYXBpLnB5CisKK1RoZXNlIGFyZSBtaXNjZWxsYW5lb3VzIHN1Yi1wcm9qZWN0cyB0aGF0IGRvbid0IHJlYWxseSBmaXQgdGhlIG90aGVyCitjYXRlZ29yaWVzLiAgQnkgZGVmYXVsdCwgdGhlc2UgcHJvamVjdHMgZG8gbm90IGJ1aWxkIGluIERlYnVnCitjb25maWd1cmF0aW9uOgorX2ZyZWV6ZV9pbXBvcnRsaWIKKyAgICBfZnJlZXplX2ltcG9ydGxpYi5leGUsIHVzZWQgdG8gcmVnZW5lcmF0ZSBQeXRob25caW1wb3J0bGliLmggYWZ0ZXIKKyAgICBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weQorYmRpc3Rfd2luaW5zdAorICAgIC4uXExpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTEwLjBbLWFtZDY0XS5leGUsIHRoZSBiYXNlCisgICAgZXhlY3V0YWJsZSB1c2VkIGJ5IHRoZSBkaXN0dXRpbHMgYmRpc3Rfd2luaW5zdCBjb21tYW5kCitweXRob24zZGxsCisgICAgcHl0aG9uMy5kbGwsIHRoZSBQRVAgMzg0IFN0YWJsZSBBQkkgZGxsCit4eGxpbWl0ZWQKKyAgICBidWlsZHMgYW4gZXhhbXBsZSBtb2R1bGUgdGhhdCBtYWtlcyB1c2Ugb2YgdGhlIFBFUCAzODQgU3RhYmxlIEFCSSwKKyAgICBzZWUgTW9kdWxlc1x4eGxpbWl0ZWQuYworCitUaGUgZm9sbG93aW5nIHN1Yi1wcm9qZWN0cyBhcmUgZm9yIGluZGl2aWR1YWwgbW9kdWxlcyBvZiB0aGUgc3RhbmRhcmQKK2xpYnJhcnkgd2hpY2ggYXJlIGltcGxlbWVudGVkIGluIEM7IGVhY2ggb25lIGJ1aWxkcyBhIERMTCAocmVuYW1lZCB0bworLnB5ZCkgb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcHJvamVjdDoKK19jdHlwZXMKK19jdHlwZXNfdGVzdAorX2RlY2ltYWwKK19lbGVtZW50dHJlZQorX2hhc2hsaWIKK19tc2kKK19tdWx0aXByb2Nlc3NpbmcKK19vdmVybGFwcGVkCitfc2hhMwogX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCiBfdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKIF90ZXN0YnVmZmVyCi0gICAgYnVmZmVyIHByb3RvY29sIHRlc3RzLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCitfdGVzdGltcG9ydG11bHRpcGxlCiBweWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KIHNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCiB1bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKIHdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCiAKLVB5dGhvbi1jb250cm9sbGVkIHN1YnByb2plY3RzIHRoYXQgd3JhcCBleHRlcm5hbCBwcm9qZWN0czoKLV9zcWxpdGUzCi0gICAgV3JhcHMgU1FMaXRlIDMuNy4xMiwgd2hpY2ggaXMgY3VycmVudGx5IGJ1aWx0IGJ5IHNxbGl0ZTMudmN4cHJvai4KLV90a2ludGVyCi0gICAgV3JhcHMgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBVbmxpa2UgX3NxbGl0ZTMsIHRoZXJlJ3Mgbm8KLSAgICBjb3JyZXNwb25kaW5nIHRjbHRrLnZjeHByb2otdHlwZSBwcm9qZWN0IHRoYXQgYnVpbGRzIFRjbC9UayBmcm9tIHZjeHByb2oncwotICAgIHdpdGhpbiBvdXIgcGNidWlsZC5zbG4sIHdoaWNoIG1lYW5zIHRoaXMgbW9kdWxlIGV4cGVjdHMgdG8gZmluZCBhCi0gICAgcHJlLWJ1aWx0IFRjbC9UayBpbiBlaXRoZXIgLi5cLi5cdGNsdGsgZm9yIDMyLWJpdCBvciAuLlwuLlx0Y2x0azY0IGZvcgotICAgIDY0LWJpdCAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpLiAgU2VlIGJlbG93IGZvciBpbnN0cnVjdGlvbnMgdG8gYnVpbGQKLSAgICBUY2wvVGsuCitUaGUgZm9sbG93aW5nIFB5dGhvbi1jb250cm9sbGVkIHN1Yi1wcm9qZWN0cyB3cmFwIGV4dGVybmFsIHByb2plY3RzLgorTm90ZSB0aGF0IHRoZXNlIGV4dGVybmFsIGxpYnJhcmllcyBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYSB3b3JraW5nCitpbnRlcnByZXRlciwgYnV0IHRoZXkgZG8gaW1wbGVtZW50IHNldmVyYWwgbWFqb3IgZmVhdHVyZXMuICBTZWUgdGhlCisiR2V0dGluZyBFeHRlcm5hbCBTb3VyY2VzIiBzZWN0aW9uIGJlbG93IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCithYm91dCBnZXR0aW5nIHRoZSBzb3VyY2UgZm9yIGJ1aWxkaW5nIHRoZXNlIGxpYnJhcmllcy4gIFRoZSBzdWItcHJvamVjdHMKK2FyZToKIF9iejIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmJ6aXAyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB2ZXJzaW9uIDEuMC42IG9mIHRoZSBsaWJiemlwMiBjb21wcmVzc2lvbiBsaWJyYXJ5CisgICAgSG9tZXBhZ2U6CiAgICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcvCi0gICAgRG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBweXRob24ub3JnIGNvcHkgaW50byB0aGUgZGlzdAotICAgIGRpcmVjdG9yeToKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC42Ci0KLSAgICAqKiBOT1RFOiBpZiB5b3UgdXNlIHRoZSBUb29sc1xidWlsZGJvdFxleHRlcm5hbCgtYW1kNjQpLmJhdCBhcHByb2FjaCBmb3IKLSAgICBvYnRhaW5pbmcgZXh0ZXJuYWwgc291cmNlcyB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIG1hbnVhbGx5IGdldCB0aGUgc291cmNlCi0gICAgYWJvdmUgdmlhIHN1YnZlcnNpb24uICoqCiBfbHptYQotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGlibHptYSBjb21wcmVzc2lvbiBsaWJyYXJ5LgotCi0gICAgRG93bmxvYWQgdGhlIHByZS1idWlsdCBXaW5kb3dzIGJpbmFyaWVzIGZyb20gaHR0cDovL3R1a2Fhbmkub3JnL3h6LywgYW5kCi0gICAgZXh0cmFjdCB0byAuLlx4ei01LjAuMy4gSWYgeW91IGFyZSB1c2luZyBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgbGlibHptYSwKLSAgICBpdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byByZW5hbWUgdGhlIGRpcmVjdG9yeSBmcm9tIHh6LTxWRVJTSU9OPiB0byB4ei01LjAuMy4KLQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGlibHptYSBjb21wcmVzc2lvbiBsaWJyYXJ5LCB1c2luZyBwcmUtYnVpbHQKKyAgICBiaW5hcmllcyBvZiBYWiBVdGlscyB2ZXJzaW9uIDUuMC41CisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly90dWthYW5pLm9yZy94ei8KIF9zc2wKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHNlY3VyZSBzb2NrZXRzIGxpYnJhcnkuCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjFlIG9mIHRoZSBPcGVuU1NMIHNlY3VyZSBzb2NrZXRzCisgICAgbGlicmFyeSwgd2hpY2ggaXMgYnVpbHQgYnkgc3NsLnZjeHByb2oKKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8KIAotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAorICAgIEJ1aWxkaW5nIE9wZW5TU0wgcmVxdWlyZXMgbmFzbS5leGUgKHRoZSBOZXR3aWRlIEFzc2VtYmxlciksIHZlcnNpb24KKyAgICAyLjEwIG9yIG5ld2VyIGZyb20KKyAgICAgICAgaHR0cDovL3d3dy5uYXNtLnVzLworICAgIHRvIGJlIHNvbWV3aGVyZSBvbiB5b3VyIFBBVEguICBNb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heQorICAgIG5lZWQgYSBsYXRlciB2ZXJzaW9uIG9mIE5BU00uIElmIE9wZW5TU0wncyBzZWxmIHRlc3RzIGRvbid0IHBhc3MsCisgICAgeW91IHNob3VsZCBmaXJzdCB0cnkgdG8gdXBkYXRlIE5BU00gYW5kIGRvIGEgZnVsbCByZWJ1aWxkIG9mCisgICAgT3BlblNTTC4KIAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL29wZW5zc2wtMS4wLjFlCi0KLSAgICAqKiBOT1RFOiBpZiB5b3UgdXNlIHRoZSBUb29sc1xidWlsZGJvdFxleHRlcm5hbCgtYW1kNjQpLmJhdCBhcHByb2FjaCBmb3IKLSAgICBvYnRhaW5pbmcgZXh0ZXJuYWwgc291cmNlcyB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIG1hbnVhbGx5IGdldCB0aGUgc291cmNlCi0gICAgYWJvdmUgdmlhIHN1YnZlcnNpb24uICoqCi0KLSAgICBBbHRlcm5hdGl2ZWx5LCBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gaHR0cDovL3d3dy5vcGVuc3NsLm9yZy4KLSAgICBZb3UgY2FuICh0aGVvcmV0aWNhbGx5KSB1c2UgYW55IHZlcnNpb24gb2YgT3BlblNTTCB5b3UgbGlrZSAtIHRoZQotICAgIGJ1aWxkIHByb2Nlc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24uCi0KLSAgICBZb3UgbXVzdCBpbnN0YWxsIHRoZSBOQVNNIGFzc2VtYmxlciAyLjEwIG9yIG5ld2VyIGZyb20KLSAgICAgICAgaHR0cDovL25hc20uc2YubmV0Ci0gICAgZm9yIHg4NiBidWlsZHMuICBQdXQgbmFzbS5leGUgYW55d2hlcmUgaW4geW91ciBQQVRILiBNb3JlIHJlY2VudAotICAgIHZlcnNpb25zIG9mIE9wZW5TU0wgbWF5IG5lZWQgYSBsYXRlciB2ZXJzaW9uIG9mIE5BU00uIElmIE9wZW5TU0wncyBzZWxmCi0gICAgdGVzdHMgZG9uJ3QgcGFzcywgeW91IHNob3VsZCBmaXJzdCB0cnkgdG8gdXBkYXRlIE5BU00gYW5kIGRvIGEgZnVsbAotICAgIHJlYnVpbGQgb2YgT3BlblNTTC4KLQotICAgIFlvdSBjYW4gYWxzbyBpbnN0YWxsIEFjdGl2ZVBlcmwgZnJvbQorICAgIElmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tCisgICAgcHl0aG9uLm9yZydzIHN1YnZlcnNpb24gcmVwb3NpdG9yeSwgUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUKKyAgICBuZWNlc3NhcnkgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4gIEFjdGl2ZVBlcmwgaXMgYXZhaWxhYmxlCisgICAgZnJvbQogICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVwZXJsLwotICAgIGlmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tCi0gICAgcHl0aG9uJ3Mgc3VidmVyc2lvbiByZXBvc2l0b3J5LiBUaGUgc3ZuIHZlcnNpb24gY29udGFpbnMgcHJlLWJ1aWxkCi0gICAgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KKyAgICBUaGUgc3ZuLnB5dGhvbi5vcmcgdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbHQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseQorICAgIGZpbGVzLgogCi0gICAgVGhlIGJ1aWxkIHByb2Nlc3MgbWFrZXMgc3VyZSB0aGF0IG5vIHBhdGVudGVkIGFsZ29yaXRobXMgYXJlIGluY2x1ZGVkLgotICAgIEZvciBub3cgUkM1LCBNREMyIGFuZCBJREVBIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4gWW91IG1heSBoYXZlCi0gICAgdG8gbWFudWFsbHkgcmVtb3ZlICQoT0JKX0QpXGlfKi5vYmogZnJvbSBtc1xudC5tYWsgaWYgdGhlIGJ1aWxkIHByb2Nlc3MKLSAgICBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBmaWxlcyBvciBmb3JiaWRkZW4gSURFQS4gQWdhaW4gdGhlIGZpbGVzIHByb3ZpZGVkCi0gICAgaW4gdGhlIHN1YnZlcnNpb24gcmVwb3NpdG9yeSBhcmUgYWxyZWFkeSBmaXhlZC4KKyAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUKKyAgICBpbmNsdWRlZC4gIEZvciBub3cgUkM1LCBNREMyIGFuZCBJREVBIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4KKyAgICBZb3UgbWF5IGhhdmUgdG8gbWFudWFsbHkgcmVtb3ZlICQoT0JKX0QpXGlfKi5vYmogZnJvbSBtc1xudC5tYWsgaWYKKyAgICB1c2luZyBvZmZpY2lhbCBzb3VyY2VzOyB0aGUgc3ZuLnB5dGhvbi5vcmctaG9zdGVkIHZlcnNpb24gaXMgYWxyZWFkeQorICAgIGZpeGVkLgogCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ0J1aWxkL2J1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KKyAgICBUaGUgc3NsLnZjeHByb2ogc3ViLXByb2plY3Qgc2ltcGx5IGludm9rZXMgUENidWlsZC9idWlsZF9zc2wucHksCisgICAgd2hpY2ggbG9jYXRlcyBhbmQgYnVpbGRzIE9wZW5TU0wuCiAKICAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKICAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKKyAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuICBJZgorICAgIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseSAoZS5nLiwKKyAgICB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UgYQorICAgIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5CiAgICAgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQtbGluZS4KIAotICAgIGJ1aWxkX3NzbC5weS9NU1ZDIGlzbid0IGNsZXZlciBlbm91Z2ggdG8gY2xlYW4gT3BlblNTTCAtIHlvdSBtdXN0IGRvCi0gICAgdGhpcyBieSBoYW5kLgorICAgIFRoZSBzc2wgc3ViLXByb2plY3QgZG9lcyBub3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBjbGVhbiB0aGUgT3BlblNTTAorICAgIGJ1aWxkOyBpZiB5b3UgbmVlZCB0byByZWJ1aWxkLCB5b3UnbGwgaGF2ZSB0byBjbGVhbiBpdCBieSBoYW5kLgorX3NxbGl0ZTMKKyAgICBXcmFwcyBTUUxpdGUgMy44LjEsIHdoaWNoIGlzIGl0c2VsZiBidWlsdCBieSBzcWxpdGUzLnZjeHByb2oKKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3d3dy5zcWxpdGUub3JnLworX3RraW50ZXIKKyAgICBXcmFwcyB2ZXJzaW9uIDguNi4xIG9mIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLgorICAgIEhvbWVwYWdlOgorICAgICAgICBodHRwOi8vd3d3LnRjbC50ay8KIAotVGhlIHN1YnByb2plY3RzIGFib3ZlIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzCi1zdWNoLCBhIGxpdHRsZSBtb3JlIHdvcmsgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZQotZmlsZXMgZm9yIGVhY2ggcHJvamVjdCBiZWZvcmUgdGhleSBjYW4gYmUgYnVpbHQuICBUaGUgYnVpbGRib3RzIGRvIHRoaXMgZWFjaAotdGltZSB0aGV5J3JlIGJ1aWx0LCBzbyB0aGUgZWFzaWVzdCBhcHByb2FjaCBpcyB0byBydW4gZWl0aGVyIGV4dGVybmFsLmJhdCBvcgotZXh0ZXJuYWwtYW1kNjQuYmF0IGluIHRoZSAuLlxUb29sc1xidWlsZGJvdCBkaXJlY3RvcnkgZnJvbSAuLlwsIGkuZS46CisgICAgVW5saWtlIHRoZSBvdGhlciBleHRlcm5hbCBsaWJyYXJpZXMgbGlzdGVkIGFib3ZlLCBUayBtdXN0IGJlIGJ1aWx0CisgICAgc2VwYXJhdGVseSBiZWZvcmUgdGhlIF90a2ludGVyIG1vZHVsZSBjYW4gYmUgYnVpbHQuIFRoaXMgbWVhbnMgdGhhdAorICAgIGEgcHJlLWJ1aWx0IFRjbC9UayBpbnN0YWxsYXRpb24gaXMgZXhwZWN0ZWQgaW4gLi5cLi5cdGNsdGsgKHRjbHRrNjQKKyAgICBmb3IgNjQtYml0KSByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4gIFNlZSAiR2V0dGluZyBFeHRlcm5hbAorICAgIFNvdXJjZXMiIGJlbG93IGZvciB0aGUgZWFzaWVzdCBtZXRob2QgdG8gZW5zdXJlIFRjbC9UayBpcyBidWlsdC4KIAotICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVua1xQQ2J1aWxkPmNkIC4uCi0gICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXHRydW5rPlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAogCi1UaGlzIGV4dHJhY3RzIGFsbCB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMgZnJvbSBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvZXh0ZXJuYWwKLXZpYSBTdWJ2ZXJzaW9uIChzbyB5b3UnbGwgbmVlZCBhbiBzdm4uZXhlIG9uIHlvdXIgUEFUSCkgYW5kIHBsYWNlcyB0aGVtIGluCi0uLlwuLiAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpLiAgVGhlIGV4dGVybmFsKC1hbWQ2NCkuYmF0IHNjcmlwdHMgd2lsbAotYWxzbyBidWlsZCBhIGRlYnVnIGJ1aWxkIG9mIFRjbC9UazsgdGhlcmUgYXJlbid0IGFueSBlcXVpdmFsZW50IGJhdGNoIGZpbGVzCi1mb3IgYnVpbGRpbmcgcmVsZWFzZSB2ZXJzaW9ucyBvZiBUY2wvVGsgbHlpbmcgYXJvdW5kIGluIHRoZSBUb29sc1xidWlsZGJvdAotZGlyZWN0b3J5LiAgSWYgeW91IG5lZWQgdG8gYnVpbGQgYSByZWxlYXNlIHZlcnNpb24gb2YgVGNsL1RrIGl0IGlzbid0IGhhcmQKLXRob3VnaCwgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGV4dGVybmFsKC1hbWQ2NCkuYmF0IGZpbGUgYW5kIGZpbmQgdGhlCi10d28gbm1ha2UgbGluZXMsIHRoZW4gY2FsbCBlYWNoIG9uZSB3aXRob3V0IHRoZSAnREVCVUc9MScgcGFyYW1ldGVyLCBpLmUuOgorR2V0dGluZyBFeHRlcm5hbCBTb3VyY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgY2F0ZWdvcnkgb2Ygc3ViLXByb2plY3RzIGxpc3RlZCBhYm92ZSB3cmFwIGV4dGVybmFsIHByb2plY3RzCitQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgYXMgc3VjaCBhIGxpdHRsZSBtb3JlIHdvcmsgaXMgcmVxdWlyZWQgaW4KK29yZGVyIHRvIGRvd25sb2FkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgZm9yIGVhY2ggcHJvamVjdCBiZWZvcmUgdGhleQorY2FuIGJlIGJ1aWx0LiAgVGhlIGJ1aWxkYm90cyBtdXN0IGVuc3VyZSB0aGF0IGFsbCBsaWJyYXJpZXMgYXJlIHByZXNlbnQKK2JlZm9yZSBidWlsZGluZywgc28gdGhlIGVhc2llc3QgYXBwcm9hY2ggaXMgdG8gcnVuIGVpdGhlciBleHRlcm5hbC5iYXQKK29yIGV4dGVybmFsLWFtZDY0LmJhdCAoZGVwZW5kaW5nIG9uIHBsYXRmb3JtKSBpbiB0aGUgLi5cVG9vbHNcYnVpbGRib3QKK2RpcmVjdG9yeSBmcm9tIC4uXCwgaS5lLjoKKworICAgIEM6XHB5dGhvblxjcHl0aG9uXFBDYnVpbGQ+Y2QgLi4KKyAgICBDOlxweXRob25cY3B5dGhvbj5Ub29sc1xidWlsZGJvdFxleHRlcm5hbC5iYXQKKworVGhpcyBleHRyYWN0cyBhbGwgdGhlIGV4dGVybmFsIHN1Yi1wcm9qZWN0cyBmcm9tCisgICAgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsCit2aWEgU3VidmVyc2lvbiAoc28geW91J2xsIG5lZWQgYW4gc3ZuLmV4ZSBvbiB5b3VyIFBBVEgpIGFuZCBwbGFjZXMgdGhlbQoraW4gLi5cLi4gKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkb3dubG9hZCBzb3VyY2VzIGZyb20gZWFjaCBwcm9qZWN0J3MgaG9tZXBhZ2UsCit0aG91Z2ggeW91IG1heSBoYXZlIHRvIGNoYW5nZSB0aGUgbmFtZXMgb2Ygc29tZSBmb2xkZXJzIGluIG9yZGVyIHRvIG1ha2UKK3RoaW5ncyB3b3JrLiAgRm9yIGluc3RhbmNlLCBpZiB5b3Ugd2VyZSB0byBkb3dubG9hZCBhIHZlcnNpb24gNS4wLjcgb2YKK1haIFV0aWxzLCB5b3Ugd291bGQgbmVlZCB0byBleHRyYWN0IHRoZSBhcmNoaXZlIGludG8gLi5cLi5ceHotNS4wLjUKK2FueXdheSwgc2luY2UgdGhhdCBpcyB3aGVyZSB0aGUgc29sdXRpb24gaXMgc2V0IHRvIGxvb2sgZm9yIHh6LiAgVGhlCitzYW1lIGlzIHRydWUgZm9yIGFsbCBvdGhlciBleHRlcm5hbCBwcm9qZWN0cy4KKworVGhlIGV4dGVybmFsKC1hbWQ2NCkuYmF0IHNjcmlwdHMgd2lsbCBhbHNvIGJ1aWxkIGEgZGVidWcgYnVpbGQgb2YKK1RjbC9UaywgYnV0IHRoZXJlIGFyZW4ndCBhbnkgZXF1aXZhbGVudCBiYXRjaCBmaWxlcyBmb3IgYnVpbGRpbmcgcmVsZWFzZQordmVyc2lvbnMgb2YgVGNsL1RrIGN1cnJlbnRseSBhdmFpbGFibGUuICBJZiB5b3UgbmVlZCB0byBidWlsZCBhIHJlbGVhc2UKK3ZlcnNpb24gb2YgVGNsL1RrLCBqdXN0IHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBleHRlcm5hbCgtYW1kNjQpLmJhdAorZmlsZSBhbmQgZmluZCB0aGUgdHdvIG5tYWtlIGxpbmVzLCB0aGVuIGNhbGwgZWFjaCBvbmUgd2l0aG91dCB0aGUKKydERUJVRz0xJyBwYXJhbWV0ZXIsIGkuZS46CiAKIFRoZSBleHRlcm5hbC1hbWQ2NC5iYXQgZmlsZSBjb250YWlucyB0aGlzIGZvciB0Y2w6CiAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBjbGVhbiBhbGwgaW5zdGFsbApAQCAtMjAyLDg5ICsyNjEsNTQgQEAKIFNvIGZvciBhIHJlbGVhc2UgYnVpbGQsIHlvdSdkIGNhbGwgaXQgYXM6CiAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsIGluc3RhbGwKIAotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KK05vdGUgdGhhdCB0aGUgYWJvdmUgY29tbWFuZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gLi5cLi5cdGNsLTguNi4xLjBcd2luCisocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpOyBkb24ndCBmb3JnZXQgdG8gYnVpbGQgVGsgYXMgd2VsbCBhcyBUY2whCiAKLVRoaXMgd2lsbCBiZSBjbGVhbmVkIHVwIGluIHRoZSBmdXR1cmU7IGlkZWFsbHkgVGNsL1RrIHdpbGwgYmUgYnJvdWdodCBpbnRvIG91cgotcGNidWlsZC5zbG4gYXMgY3VzdG9tIC52Y3hwcm9qIGZpbGVzLCBqdXN0IGFzIHdlJ3ZlIHJlY2VudGx5IGRvbmUgd2l0aCB0aGUKLXNxbGl0ZTMudmN4cHJvaiBmaWxlLCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgbmVlZCBmb3IgVGNsL1RrIHRvIGJlIGJ1aWx0Ci1zZXBhcmF0ZWx5IHZpYSBhIGJhdGNoIGZpbGUuCitUaGlzIHdpbGwgYmUgY2xlYW5lZCB1cCBpbiB0aGUgZnV0dXJlOyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTU5NjgKK3RyYWNrcyBhZGRpbmcgYSBuZXcgdGNsdGsudmN4cHJvaiBmaWxlIHRoYXQgd2lsbCBidWlsZCBUY2wvVGsgYW5kIFRpeAordGhlIHNhbWUgd2F5IHRoZSBvdGhlciBleHRlcm5hbCBwcm9qZWN0cyBsaXN0ZWQgYWJvdmUgYXJlIGJ1aWx0LgogCi1YWFggdHJlbnQubmVsc29uIDAyLUFwci0wODoKLSAgICBIYXZpbmcgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzIGluIC4uXC4uIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5IGlzIGEKLSAgICBiaXQgb2YgYSBudWlzYW5jZSB3aGVuIHlvdSdyZSB3b3JraW5nIG9uIHB5M2sgYW5kIHRydW5rIGluIHBhcmFsbGVsIGFuZAotICAgIHlvdXIgZGlyZWN0b3J5IGxheW91dCBtaW1pY3MgdGhhdCBvZiBQeXRob24ncyBzdWJ2ZXJzaW9uIGxheW91dCwgZS5nLjoKLQotICAgICAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bmsKLSAgICAgICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXGJyYW5jaGVzXHB5M2sKLSAgICAgICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXGJyYW5jaGVzXHJlbGVhc2UyNS1tYWludAotCi0gICAgSSdkIGxpa2UgdG8gY2hhbmdlIHRoaW5ncyBzbyB0aGF0IGV4dGVybmFsIHN1YnByb2plY3RzIGFyZSBmZXRjaGVkIGZyb20KLSAgICAuLlxleHRlcm5hbCBpbnN0ZWFkIG9mIC4uXC4uLCB0aGVuIHByb3ZpZGUgc29tZSBoZWxwZXIgc2NyaXB0cyBvciBiYXRjaAotICAgIGZpbGVzIHRoYXQgd291bGQgc2V0IHVwIGEgbmV3IC4uXGV4dGVybmFsIGRpcmVjdG9yeSB3aXRoIHN2biBjaGVja291dHMgb2YKLSAgICB0aGUgcmVsZXZhbnQgYnJhbmNoZXMgaW4gaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsLywgb3IKLSAgICBhbHRlcm5hdGl2ZWx5LCB1c2UganVuY3Rpb25zIHRvIGxpbmsgLi5cZXh0ZXJuYWwgd2l0aCBhIHByZS1leGlzdGluZwotICAgIGV4dGVybmFscyBkaXJlY3RvcnkgYmVpbmcgdXNlZCBieSBhbm90aGVyIGJyYW5jaC4gIGkuZS4gaWYgSSdtIHVzdWFsbHkKLSAgICB3b3JraW5nIG9uIHRydW5rIChhbmQgaGF2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgdHJ1bmtcZXh0ZXJuYWwgdmlhIHRoZQotICAgIHByb3ZpZGVkIGJhdGNoIGZpbGUpLCBhbmQgd2FudCB0byBkbyBzb21lIHdvcmsgb24gcHkzaywgSSdkIHNldCB1cCBhCi0gICAganVuY3Rpb24gYXMgZm9sbG93cyAodXNpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYWJvdmUgYXMgYW4gZXhhbXBsZSk6Ci0KLSAgICAgICAgQzpcLi5ccHl0aG9uXHRydW5rXGV4dGVybmFsIDwtIGFscmVhZHkgZXhpc3RzIGFuZCBoYXMgYnVpbHQgdmVyc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBleHRlcm5hbCBzdWJwcm9qZWN0cwotCi0gICAgICAgIEM6XC4uXHB5dGhvblxicmFuY2hlc1xweTNrPmxpbmtkLmV4ZSBleHRlcm5hbCAuLlwuLlx0cnVua1xleHRlcm5hbAotICAgICAgICBMaW5rIGNyZWF0ZWQgYXQ6IGV4dGVybmFsCi0KLSAgICBPbmx5IGEgc2xpZ2h0IHR3ZWFrIHdvdWxkIGJlIG5lZWRlZCB0byB0aGUgYnVpbGRib3RzIHN1Y2ggdGhhdCBib3RzCi0gICAgYnVpbGRpbmcgdHJ1bmsgYW5kIHB5M2sgY291bGQgbWFrZSB1c2Ugb2YgdGhlIHNhbWUgZmFjaWxpdHkuICAoMi41LngKLSAgICBidWlsZHMgbmVlZCB0byBiZSBrZXB0IHNlcGFyYXRlIGFzIHRoZXkncmUgdXNpbmcgVmlzdWFsIFN0dWRpbyA3LjEuKQotL1hYWCB0cmVudC5uZWxzb24gMDItQXByLTA4Ci0KLUJ1aWxkaW5nIGZvciBJdGFuaXVtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1PZmZpY2lhbCBzdXBwb3J0IGZvciBJdGFuaXVtIGJ1aWxkcyBoYXZlIGJlZW4gZHJvcHBlZCBmcm9tIHRoZSBidWlsZC4gUGxlYXNlCi1jb250YWN0IHVzIGFuZCBwcm92aWRlIHBhdGNoZXMgaWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIEl0YW5pdW0gYnVpbGRzLgogCiBCdWlsZGluZyBmb3IgQU1ENjQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgYnVpbGQgcHJvY2VzcyBmb3IgQU1ENjQgLyB4NjQgaXMgdmVyeSBzaW1pbGFyIHRvIHN0YW5kYXJkIGJ1aWxkcy4gWW91IGp1c3QKLWhhdmUgdG8gc2V0IHg2NCBhcyBwbGF0Zm9ybS4gSW4gYWRkaXRpb24sIHRoZSBIT1NUX1BZVEhPTiBlbnZpcm9ubWVudCB2YXJpYWJsZQotbXVzdCBwb2ludCB0byBhIFB5dGhvbiBpbnRlcnByZXRlciAoYXQgbGVhc3QgMi40KSwgdG8gc3VwcG9ydCBjcm9zcy1jb21waWxhdGlvbi4KK1RoZSBidWlsZCBwcm9jZXNzIGZvciBBTUQ2NCAvIHg2NCBpcyB2ZXJ5IHNpbWlsYXIgdG8gc3RhbmRhcmQgYnVpbGRzLAoreW91IGp1c3QgaGF2ZSB0byBzZXQgeDY0IGFzIHBsYXRmb3JtLiBJbiBhZGRpdGlvbiwgdGhlIEhPU1RfUFlUSE9OCitlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IHBvaW50IHRvIGEgUHl0aG9uIGludGVycHJldGVyIChhdCBsZWFzdCAyLjQpLAordG8gc3VwcG9ydCBjcm9zcy1jb21waWxhdGlvbiBmcm9tIFdpbjMyLiAgTm90ZSB0aGF0IFZpc3VhbCBTdHVkaW8KK3JlcXVpcmVzIGVpdGhlciBTdGFuZGFyZCBFZGl0aW9uIG9yIGJldHRlciwgb3IgRXhwcmVzcyBFZGl0aW9uIHdpdGggdGhlCitXaW5kb3dzIFNESyA2NC1iaXQgY29tcGlsZXJzIHRvIGJlIGF2YWlsYWJsZSBpbiBvcmRlciB0byBidWlsZCA2NC1iaXQKK2JpbmFyaWVzLgogCi1CdWlsZGluZyBQeXRob24gVXNpbmcgdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWljcm9zb2Z0IGhhcyB3aXRoZHJhd24gdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlciwgc28gdGhpcyBjYW4gbm8gbG9uZ2VyCi1iZSBjb25zaWRlcmVkIGEgc3VwcG9ydGVkIG9wdGlvbi4gSW5zdGVhZCB5b3UgY2FuIHVzZSB0aGUgZnJlZSBWUyBDKysgRXhwcmVzcwotRWRpdGlvbi4KIAogUHJvZmlsZSBHdWlkZWQgT3B0aW1pemF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIHNvbHV0aW9uIGhhcyB0d28gY29uZmlndXJhdGlvbnMgZm9yIFBHTy4gVGhlIFBHSW5zdHJ1bWVudAotY29uZmlndXJhdGlvbiBtdXN0IGJlIGJ1aWxkIGZpcnN0LiBUaGUgUEdJbnN0cnVtZW50IGJpbmFyaWVzIGFyZQotbGlua2VkIGFnYWluc3QgYSBwcm9maWxpbmcgbGlicmFyeSBhbmQgY29udGFpbiBleHRyYSBkZWJ1ZwotaW5mb3JtYXRpb24uIFRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHRha2VzIHRoZSBwcm9maWxpbmcgZGF0YSBhbmQKLWdlbmVyYXRlcyBvcHRpbWl6ZWQgYmluYXJpZXMuCitjb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbHQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlIGxpbmtlZAorYWdhaW5zdCBhIHByb2ZpbGluZyBsaWJyYXJ5IGFuZCBjb250YWluIGV4dHJhIGRlYnVnIGluZm9ybWF0aW9uLiBUaGUKK1BHVXBkYXRlIGNvbmZpZ3VyYXRpb24gdGFrZXMgdGhlIHByb2ZpbGluZyBkYXRhIGFuZCBnZW5lcmF0ZXMgb3B0aW1pemVkCitiaW5hcmllcy4KIAotVGhlIGJ1aWxkX3Bnby5iYXQgc2NyaXB0IGF1dG9tYXRlcyB0aGUgY3JlYXRpb24gb2Ygb3B0aW1pemVkIGJpbmFyaWVzLiBJdAotY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZSBQR0kKLXB5dGhvbiBhbmQgZmluYWxseSBjcmVhdGVzIHRoZSBvcHRpbWl6ZWQgZmlsZXMuCitUaGUgYnVpbGRfcGdvLmJhdCBzY3JpcHQgYXV0b21hdGVzIHRoZSBjcmVhdGlvbiBvZiBvcHRpbWl6ZWQgYmluYXJpZXMuCitJdCBjcmVhdGVzIHRoZSBQR0kgZmlsZXMsIHJ1bnMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBvciBQeUJlbmNoIHdpdGggdGhlCitQR0kgcHl0aG9uLCBhbmQgZmluYWxseSBjcmVhdGVzIHRoZSBvcHRpbWl6ZWQgZmlsZXMuCiAKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9lN2szMmY0ayhWUy4xMDApLmFzcHgKK1NlZQorICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9lN2szMmY0ayhWUy4xMDApLmFzcHgKK2ZvciBtb3JlIG9uIHRoaXMgdG9waWMuCisKIAogU3RhdGljIGxpYnJhcnkKIC0tLS0tLS0tLS0tLS0tCiAKLVRoZSBzb2x1dGlvbiBoYXMgbm8gY29uZmlndXJhdGlvbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gSG93ZXZlciBpdCBpcyBlYXN5Ci1pdCBidWlsZCBhIHN0YXRpYyBsaWJyYXJ5IGluc3RlYWQgb2YgYSBETEwuIFlvdSBzaW1wbHkgaGF2ZSB0byBzZXQgdGhlCi0iQ29uZmlndXJhdGlvbiBUeXBlIiB0byAiU3RhdGljIExpYnJhcnkgKC5saWIpIiBhbmQgYWx0ZXIgdGhlIHByZXByb2Nlc3NvcgotbWFjcm8gIlB5X0VOQUJMRV9TSEFSRUQiIHRvICJQeV9OT19FTkFCTEVfU0hBUkVEIi4gWW91IG1heSBhbHNvIGhhdmUgdG8KLWNoYW5nZSB0aGUgIlJ1bnRpbWUgTGlicmFyeSIgZnJvbSAiTXVsdGktdGhyZWFkZWQgRExMICgvTUQpIiB0bwotIk11bHRpLXRocmVhZGVkICgvTVQpIi4KK1RoZSBzb2x1dGlvbiBoYXMgbm8gY29uZmlndXJhdGlvbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gSG93ZXZlciBpdCBpcworZWFzeSB0byBidWlsZCBhIHN0YXRpYyBsaWJyYXJ5IGluc3RlYWQgb2YgYSBETEwuIFlvdSBzaW1wbHkgaGF2ZSB0byBzZXQKK3RoZSAiQ29uZmlndXJhdGlvbiBUeXBlIiB0byAiU3RhdGljIExpYnJhcnkgKC5saWIpIiBhbmQgYWx0ZXIgdGhlCitwcmVwcm9jZXNzb3IgbWFjcm8gIlB5X0VOQUJMRV9TSEFSRUQiIHRvICJQeV9OT19FTkFCTEVfU0hBUkVEIi4gWW91IG1heQorYWxzbyBoYXZlIHRvIGNoYW5nZSB0aGUgIlJ1bnRpbWUgTGlicmFyeSIgZnJvbSAiTXVsdGktdGhyZWFkZWQgRExMCisoL01EKSIgdG8gIk11bHRpLXRocmVhZGVkICgvTVQpIi4KKwogCiBWaXN1YWwgU3R1ZGlvIHByb3BlcnRpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjkzLDYgKzMxNyw3IEBACiAoKi5wcm9wcykuIFRoZSBwcm9wZXJ0aWVzIGNhbiBiZSB2aWV3ZWQgYW5kIGFsdGVyZWQgaW4gdGhlIFByb3BlcnR5CiBNYW5hZ2VyIChWaWV3IC0+IE90aGVyIFdpbmRvd3MgLT4gUHJvcGVydHkgTWFuYWdlcikuCiAKK1RoZSBwcm9wZXJ0eSBmaWxlcyB1c2VkIGFyZSAoKy0tID0gImFsc28gaW1wb3J0cyIpOgogICogZGVidWcgKGRlYnVnIG1hY3JvOiBfREVCVUcpCiAgKiBwZ2luc3RydW1lbnQgKFBHTykKICAqIHBndXBkYXRlIChQR08pCkBAIC0zMDUsMTUgKzMzMCwxOCBAQAogICAgICstLSBweXByb2plY3QKICAqIHB5cHJvamVjdCAoYmFzZSBzZXR0aW5ncyBmb3IgYWxsIHByb2plY3RzLCB1c2VyIG1hY3JvcyBsaWtlIFB5RGxsTmFtZSkKICAqIHJlbGVhc2UgKHJlbGVhc2UgbWFjcm86IE5ERUJVRykKKyAqIHNxbGl0ZTMgKHVzZWQgb25seSBieSBzcWxpdGUzLnZjeHByb2opCiAgKiB4NjQgKEFNRDY0IC8geDY0IHBsYXRmb3JtIHNwZWNpZmljIHNldHRpbmdzKQogCi1UaGUgcHlwcm9qZWN0IHByb3BlcnR5ZmlsZSBkZWZpbmVzIF9XSU4zMiBhbmQgeDY0IGRlZmluZXMgX1dJTjY0IGFuZCBfTV9YNjQKLWFsdGhvdWdoIHRoZSBtYWNyb3MgYXJlIHNldCBieSB0aGUgY29tcGlsZXIsIHRvby4gVGhlIEdVSSBkb2Vzbid0IGFsd2F5cyBrbm93Ci1hYm91dCB0aGUgbWFjcm9zIGFuZCBjb25mdXNlIHRoZSB1c2VyIHdpdGggZmFsc2UgaW5mb3JtYXRpb24uCitUaGUgcHlwcm9qZWN0IHByb3BlcnR5IGZpbGUgZGVmaW5lcyBfV0lOMzIgYW5kIHg2NCBkZWZpbmVzIF9XSU42NCBhbmQKK19NX1g2NCBhbHRob3VnaCB0aGUgbWFjcm9zIGFyZSBzZXQgYnkgdGhlIGNvbXBpbGVyLCB0b28uIFRoZSBHVUkgZG9lc24ndAorYWx3YXlzIGtub3cgYWJvdXQgdGhlIG1hY3JvcyBhbmQgY29uZnVzZSB0aGUgdXNlciB3aXRoIGZhbHNlCitpbmZvcm1hdGlvbi4KIAotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKKworWW91ciBPd24gRXh0ZW5zaW9uIERMTHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KK0lmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCAoLnB5ZCksIHRoZXJlJ3MgYW4KK2V4YW1wbGUgd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi5cUENcZXhhbXBsZVw7IHJlYWQgdGhlCitmaWxlIHJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCmRpZmYgLS1naXQgYS9QYXJzZXIvUHl0aG9uLmFzZGwgYi9QYXJzZXIvUHl0aG9uLmFzZGwKaW5kZXggYzI0ZDg0MC4uZGViZDg5ZSAxMDA2NDQKLS0tIGEvUGFyc2VyL1B5dGhvbi5hc2RsCisrKyBiL1BhcnNlci9QeXRob24uYXNkbApAQCAtMSw0ICsxLDQgQEAKLS0tIEFTREwncyBmaXZlIGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0CistLSBBU0RMJ3Mgc2l4IGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0LCBzaW5nbGV0b24KIAogbW9kdWxlIFB5dGhvbgogewpAQCAtNjksOCArNjksOCBAQAogICAgICAgICAgfCBOdW0ob2JqZWN0IG4pIC0tIGEgbnVtYmVyIGFzIGEgUHlPYmplY3QuCiAgICAgICAgICB8IFN0cihzdHJpbmcgcykgLS0gbmVlZCB0byBzcGVjaWZ5IHJhdywgdW5pY29kZSwgZXRjPwogICAgICAgICAgfCBCeXRlcyhieXRlcyBzKQorICAgICAgICAgfCBOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlKQogICAgICAgICAgfCBFbGxpcHNpcwotICAgICAgICAgLS0gb3RoZXIgbGl0ZXJhbHM/IGJvb2xzPwogCiAgICAgICAgICAtLSB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb24gY2FuIGFwcGVhciBpbiBhc3NpZ25tZW50IGNvbnRleHQKICAgICAgICAgIHwgQXR0cmlidXRlKGV4cHIgdmFsdWUsIGlkZW50aWZpZXIgYXR0ciwgZXhwcl9jb250ZXh0IGN0eCkKQEAgLTEwMywxMSArMTAzLDExIEBACiAgICAgZXhjZXB0aGFuZGxlciA9IEV4Y2VwdEhhbmRsZXIoZXhwcj8gdHlwZSwgaWRlbnRpZmllcj8gbmFtZSwgc3RtdCogYm9keSkKICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKLSAgICBhcmd1bWVudHMgPSAoYXJnKiBhcmdzLCBpZGVudGlmaWVyPyB2YXJhcmcsIGV4cHI/IHZhcmFyZ2Fubm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBhcmcqIGt3b25seWFyZ3MsIGlkZW50aWZpZXI/IGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAgZXhwcj8ga3dhcmdhbm5vdGF0aW9uLCBleHByKiBkZWZhdWx0cywKLSAgICAgICAgICAgICAgICAgICAgIGV4cHIqIGt3X2RlZmF1bHRzKQorICAgIGFyZ3VtZW50cyA9IChhcmcqIGFyZ3MsIGFyZz8gdmFyYXJnLCBhcmcqIGt3b25seWFyZ3MsIGV4cHIqIGt3X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICBhcmc/IGt3YXJnLCBleHByKiBkZWZhdWx0cykKKwogICAgIGFyZyA9IChpZGVudGlmaWVyIGFyZywgZXhwcj8gYW5ub3RhdGlvbikKKyAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKICAgICAtLSBrZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBjYWxsCiAgICAga2V5d29yZCA9IChpZGVudGlmaWVyIGFyZywgZXhwciB2YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsLnB5IGIvUGFyc2VyL2FzZGwucHkKaW5kZXggMDhhYTA1Yi4uZmMxYjE2YyAxMDA2NDQKLS0tIGEvUGFyc2VyL2FzZGwucHkKKysrIGIvUGFyc2VyL2FzZGwucHkKQEAgLTE2LDggKzE2LDkgQEAKIAogaW1wb3J0IHNwYXJrCiAKLWRlZiBvdXRwdXQoc3RyaW5nKToKLSAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cmluZyArICJcbiIpCitkZWYgb3V0cHV0KCpzdHJpbmdzKToKKyAgICBmb3IgcyBpbiBzdHJpbmdzOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihzKSArICJcbiIpCiAKIAogY2xhc3MgVG9rZW4ob2JqZWN0KToKQEAgLTE1OCwxMSArMTU5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHBlY3RlZCBhdHRyaWJ1dGVzLCBmb3VuZCAlcyIgJSBpZCkKICAgICAgICAgcmV0dXJuIFN1bShzdW0sIGF0dHJpYnV0ZXMpCiAKLSAgICBkZWYgcF9wcm9kdWN0KHNlbGYsIGluZm8pOgorICAgIGRlZiBwX3Byb2R1Y3RfMChzZWxmLCBpbmZvKToKICAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApICIKICAgICAgICAgXzAsIGZpZWxkcywgXzEgPSBpbmZvCiAgICAgICAgIHJldHVybiBQcm9kdWN0KGZpZWxkcykKIAorICAgIGRlZiBwX3Byb2R1Y3RfMShzZWxmLCBpbmZvKToKKyAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApIElkICggZmllbGRzICkgIgorICAgICAgICBfMCwgZmllbGRzLCBfMSwgaWQsIF8yLCBhdHRyaWJ1dGVzLCBfMyA9IGluZm8KKyAgICAgICAgaWYgaWQudmFsdWUgIT0gImF0dHJpYnV0ZXMiOgorICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKGlkLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQorICAgICAgICByZXR1cm4gUHJvZHVjdChmaWVsZHMsIGF0dHJpYnV0ZXMpCisKICAgICBkZWYgcF9zdW1fMChzZWxmLCBjb25zdHJ1Y3Rvcik6CiAgICAgICAgICIgc3VtIDo6PSBjb25zdHJ1Y3RvciAiCiAgICAgICAgIHJldHVybiBbY29uc3RydWN0b3JbMF1dCkBAIC0yMjIsNyArMjMxLDcgQEAKICAgICAgICAgIiBmaWVsZCA6Oj0gSWQgPyAiCiAgICAgICAgIHJldHVybiBGaWVsZCh0eXBlWzBdLCBvcHQ9VHJ1ZSkKIAotYnVpbHRpbl90eXBlcyA9ICgiaWRlbnRpZmllciIsICJzdHJpbmciLCAiYnl0ZXMiLCAiaW50IiwgIm9iamVjdCIpCitidWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJieXRlcyIsICJpbnQiLCAib2JqZWN0IiwgInNpbmdsZXRvbiIpCiAKICMgYmVsb3cgaXMgYSBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgdG8gY2FwdHVyZSB0aGUgQVNUIG9mIGFuIEFTVCA6LSkKICMgbm90IHN1cmUgaWYgYW55IG9mIHRoZSBtZXRob2RzIGFyZSB1c2VmdWwgeWV0LCBidXQgSSdtIGFkZGluZyB0aGVtCkBAIC0yODksMTEgKzI5OCwxNSBAQAogICAgICAgICAgICAgcmV0dXJuICJTdW0oJXMsICVzKSIgJSAoc2VsZi50eXBlcywgc2VsZi5hdHRyaWJ1dGVzKQogCiBjbGFzcyBQcm9kdWN0KEFTVCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcywgYXR0cmlidXRlcz1Ob25lKToKICAgICAgICAgc2VsZi5maWVsZHMgPSBmaWVsZHMKKyAgICAgICAgc2VsZi5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyBvciBbXQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMpIiAlIHNlbGYuZmllbGRzCisgICAgICAgIGlmIHNlbGYuYXR0cmlidXRlcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzKSIgJSBzZWxmLmZpZWxkcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzLCAlcykiICUgKHNlbGYuZmllbGRzLCBzZWxmLmF0dHJpYnV0ZXMpCiAKIGNsYXNzIFZpc2l0b3JCYXNlKG9iamVjdCk6CiAKQEAgLTM4NSw3ICszOTgsMTEgQEAKICAgICBzY2FubmVyID0gQVNETFNjYW5uZXIoKQogICAgIHBhcnNlciA9IEFTRExQYXJzZXIoKQogCi0gICAgYnVmID0gb3BlbihmaWxlKS5yZWFkKCkKKyAgICBmID0gb3BlbihmaWxlKQorICAgIHRyeToKKyAgICAgICAgYnVmID0gZi5yZWFkKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBmLmNsb3NlKCkKICAgICB0b2tlbnMgPSBzY2FubmVyLnRva2VuaXplKGJ1ZikKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UodG9rZW5zKQpAQCAtNDE2LDQgKzQzMyw0IEBACiAgICAgICAgICAgICBvdXRwdXQoIkNoZWNrIGZhaWxlZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgotICAgICAgICAgICAgICAgIG91dHB1dChkZm4udHlwZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQoZGZuLm5hbWUsIGRmbi52YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsX2MucHkgYi9QYXJzZXIvYXNkbF9jLnB5CmluZGV4IDBiNmM4OGMuLjgwZTQzMmEgMTAwNzU1Ci0tLSBhL1BhcnNlci9hc2RsX2MucHkKKysrIGIvUGFyc2VyL2FzZGxfYy5weQpAQCAtMjA5LDYgKzIwOSwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoInN0cnVjdCBfJShuYW1lKXMgeyIgJSBsb2NhbHMoKSwgZGVwdGgpCiAgICAgICAgIGZvciBmIGluIHByb2R1Y3QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdChmLCBkZXB0aCArIDEpCisgICAgICAgIGZvciBmaWVsZCBpbiBwcm9kdWN0LmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAjIHJ1ZGltZW50YXJ5IGF0dHJpYnV0ZSBoYW5kbGluZworICAgICAgICAgICAgdHlwZSA9IHN0cihmaWVsZC50eXBlKQorICAgICAgICAgICAgYXNzZXJ0IHR5cGUgaW4gYXNkbC5idWlsdGluX3R5cGVzLCB0eXBlCisgICAgICAgICAgICBzZWxmLmVtaXQoIiVzICVzOyIgJSAodHlwZSwgZmllbGQubmFtZSksIGRlcHRoICsgMSk7CiAgICAgICAgIHNlbGYuZW1pdCgifTsiLCBkZXB0aCkKICAgICAgICAgc2VsZi5lbWl0KCIiLCBkZXB0aCkKIApAQCAtNDkzLDcgKzQ5OCwxMSBAQAogCiAgICAgZGVmIHZpc2l0RmllbGQoc2VsZiwgZmllbGQsIG5hbWUsIHN1bT1Ob25lLCBwcm9kPU5vbmUsIGRlcHRoPTApOgogICAgICAgICBjdHlwZSA9IGdldF9jX3R5cGUoZmllbGQudHlwZSkKLSAgICAgICAgc2VsZi5lbWl0KCJpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkXyVzKSkgeyIgJSBmaWVsZC5uYW1lLCBkZXB0aCkKKyAgICAgICAgaWYgZmllbGQub3B0OgorICAgICAgICAgICAgY2hlY2sgPSAiZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfJXMpIiAlIChmaWVsZC5uYW1lLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gIl9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF8lcykiICUgKGZpZWxkLm5hbWUsKQorICAgICAgICBzZWxmLmVtaXQoImlmICglcykgeyIgJSAoY2hlY2ssKSwgZGVwdGgsIHJlZmxvdz1GYWxzZSkKICAgICAgICAgc2VsZi5lbWl0KCJpbnQgcmVzOyIsIGRlcHRoKzEpCiAgICAgICAgIGlmIGZpZWxkLnNlcToKICAgICAgICAgICAgIHNlbGYuZW1pdCgiUHlfc3NpemVfdCBsZW47IiwgZGVwdGgrMSkKQEAgLTUxMCw5ICs1MTksOSBAQAogICAgICAgICAgICAgc2VsZi5lbWl0KCJ9IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgibGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIGlmIHNlbGYuaXNTaW1wbGVUeXBlKGZpZWxkKToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gX1B5X2FzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImlmICglcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgdmFsdWU7IiAlIGN0eXBlLCBkZXB0aCsyKQpAQCAtNTU4LDYgKzU2NywxMyBAQAogICAgIGRlZiB2aXNpdFByb2R1Y3Qoc2VsZiwgcHJvZCwgbmFtZSk6CiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIFB5VHlwZU9iamVjdCAqJXNfdHlwZTsiICUgbmFtZSwgMCkKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfJXModm9pZCopOyIgJSBuYW1lLCAwKQorICAgICAgICBpZiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoYS5uYW1lKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgY2hhciAqJXNfYXR0cmlidXRlc1tdID0geyIgJSBuYW1lLCAwKQorICAgICAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnIiVzIiwnICUgYS5uYW1lLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJ9OyIsIDApCiAgICAgICAgIGlmIHByb2QuZmllbGRzOgogICAgICAgICAgICAgZm9yIGYgaW4gcHJvZC5maWVsZHM6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoZi5uYW1lKQpAQCAtODE5LDYgKzgzNSw3IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopbyk7CiAgICAgcmV0dXJuIChQeU9iamVjdCopbzsKIH0KKyNkZWZpbmUgYXN0Mm9ial9zaW5nbGV0b24gYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9pZGVudGlmaWVyIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfc3RyaW5nIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfYnl0ZXMgYXN0Mm9ial9vYmplY3QKQEAgLTgzMCw2ICs4NDcsMTcgQEAKIAogLyogQ29udmVyc2lvbiBQeXRob24gLT4gQVNUICovCiAKK3N0YXRpYyBpbnQgb2JqMmFzdF9zaW5nbGV0b24oUHlPYmplY3QgKm9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQoreworICAgIGlmIChvYmogIT0gUHlfTm9uZSAmJiBvYmogIT0gUHlfVHJ1ZSAmJiBvYmogIT0gUHlfRmFsc2UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQVNUIHNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gb2JqOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9iajJhc3Rfb2JqZWN0KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKIHsKICAgICBpZiAob2JqID09IFB5X05vbmUpCkBAIC05MDQsNiArOTMyLDE5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXhpc3RzX25vdF9ub25lKFB5T2JqZWN0ICpvYmosIF9QeV9JZGVudGlmaWVyICppZCkKK3sKKyAgICBpbnQgaXNub25lOworICAgIFB5T2JqZWN0ICphdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosIGlkKTsKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlzbm9uZSA9IGF0dHIgPT0gUHlfTm9uZTsKKyAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgcmV0dXJuICFpc25vbmU7Cit9CisKICIiIiwgMCwgcmVmbG93PUZhbHNlKQogCiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIGludCBpbml0X3R5cGVzKHZvaWQpIiwwKQpAQCAtOTI1LDYgKzk2NiwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoJyVzX3R5cGUgPSBtYWtlX3R5cGUoIiVzIiwgJkFTVF90eXBlLCAlcywgJWQpOycgJQogICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGZpZWxkcywgbGVuKHByb2QuZmllbGRzKSksIDEpCiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCElc190eXBlKSByZXR1cm4gMDsiICUgbmFtZSwgMSkKKyAgICAgICAgaWYgcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIWFkZF9hdHRyaWJ1dGVzKCVzX3R5cGUsICVzX2F0dHJpYnV0ZXMsICVkKSkgcmV0dXJuIDA7IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGxlbihwcm9kLmF0dHJpYnV0ZXMpKSwgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFhZGRfYXR0cmlidXRlcyglc190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7IiAlIG5hbWUsIDEpCiAKICAgICBkZWYgdmlzaXRTdW0oc2VsZiwgc3VtLCBuYW1lKToKICAgICAgICAgc2VsZi5lbWl0KCclc190eXBlID0gbWFrZV90eXBlKCIlcyIsICZBU1RfdHlwZSwgTlVMTCwgMCk7JyAlCkBAIC05NjgsNyArMTAxNCw3IEBACiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFtKSByZXR1cm4gTlVMTDsiLCAxKQogICAgICAgICBzZWxmLmVtaXQoImQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsnLCAxKQotICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlDRl9PTkxZX0FTVCIsIFB5Q0ZfT05MWV9BU1QpIDwgMCknLCAxKQorICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUNGX09OTFlfQVNUKSA8IDApJywgMSkKICAgICAgICAgc2VsZi5lbWl0KCJyZXR1cm4gTlVMTDsiLCAyKQogICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgogICAgICAgICAgICAgc2VsZi52aXNpdChkZm4pCkBAIC0xMDgwLDYgKzExMjYsMTIgQEAKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIXJlc3VsdCkgcmV0dXJuIE5VTEw7IiwgMSkKICAgICAgICAgZm9yIGZpZWxkIGluIHByb2QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdEZpZWxkKGZpZWxkLCBuYW1lLCAxLCBUcnVlKQorICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBzZWxmLmVtaXQoInZhbHVlID0gYXN0Mm9ial8lcyhvLT4lcyk7IiAlIChhLnR5cGUsIGEubmFtZSksIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghdmFsdWUpIGdvdG8gZmFpbGVkOyIsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ2lmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfJXMsIHZhbHVlKSA8IDApJyAlIGEubmFtZSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnZ290byBmYWlsZWQ7JywgMikKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnUHlfREVDUkVGKHZhbHVlKTsnLCAxKQogICAgICAgICBzZWxmLmZ1bmNfZW5kKCkKIAogICAgIGRlZiB2aXNpdENvbnN0cnVjdG9yKHNlbGYsIGNvbnMsIGVudW0sIG5hbWUpOgpAQCAtMTE0Miw3ICsxMTk0LDggQEAKICAgICBDT0RFID0gIiIiCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtMTE1Niw3ICsxMjA5LDggQEAKICAgICBpbnQgaXNpbnN0YW5jZTsKICAgICBhc3NlcnQoMCA8PSBtb2RlICYmIG1vZGUgPD0gMik7CiAKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2UoYXN0LCByZXFfdHlwZVttb2RlXSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpCkBAIC0xMTc0LDcgKzEyMjgsOCBAQAogCiBpbnQgUHlBU1RfQ2hlY2soUHlPYmplY3QqIG9iaikKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopJkFTVF90eXBlKTsKIH0KICIiIgpkaWZmIC0tZ2l0IGEvUGFyc2VyL2dyYW1tYXIuYyBiL1BhcnNlci9ncmFtbWFyLmMKaW5kZXggZjJhMjVjYS4uYjU5ODI5NCAxMDA2NDQKLS0tIGEvUGFyc2VyL2dyYW1tYXIuYworKysgYi9QYXJzZXIvZ3JhbW1hci5jCkBAIC0yOSw3ICsyOSw3IEBACiB9CiAKIGRmYSAqCi1hZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNoYXIgKm5hbWUpCithZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgZGZhICpkOwogCkBAIC02Myw3ICs2Myw3IEBACiAgICAgcy0+c191cHBlciA9IDA7CiAgICAgcy0+c19hY2NlbCA9IE5VTEw7CiAgICAgcy0+c19hY2NlcHQgPSAwOwotICAgIHJldHVybiBzIC0gZC0+ZF9zdGF0ZTsKKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChzIC0gZC0+ZF9zdGF0ZSwgUHlfaW50cHRyX3QsIGludCk7CiB9CiAKIHZvaWQKQEAgLTg1LDcgKzg1LDcgQEAKIH0KIAogaW50Ci1hZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBpbnQgaTsKICAgICBsYWJlbCAqbGI7CkBAIC0xMDUsMTMgKzEwNSwxMyBAQAogICAgIGlmIChQeV9EZWJ1Z0ZsYWcpCiAgICAgICAgIHByaW50ZigiTGFiZWwgQCAlOHAsICVkOiAlc1xuIiwgbGwsIGxsLT5sbF9ubGFiZWxzLAogICAgICAgICAgICAgICAgUHlHcmFtbWFyX0xhYmVsUmVwcihsYikpOwotICAgIHJldHVybiBsYiAtIGxsLT5sbF9sYWJlbDsKKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChsYiAtIGxsLT5sbF9sYWJlbCwgUHlfaW50cHRyX3QsIGludCk7CiB9CiAKIC8qIFNhbWUsIGJ1dCByYXRoZXIgZGllcyB0aGFuIGFkZHMgKi8KIAogaW50Ci1maW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cikKK2ZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGludCBpOwogCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hcjEuYyBiL1BhcnNlci9ncmFtbWFyMS5jCmluZGV4IDQ0MGJhNDQuLjMwYTZmMDcgMTAwNjQ0Ci0tLSBhL1BhcnNlci9ncmFtbWFyMS5jCisrKyBiL1BhcnNlci9ncmFtbWFyMS5jCkBAIC05LDkgKzksOSBAQAogLyogUmV0dXJuIHRoZSBERkEgZm9yIHRoZSBnaXZlbiB0eXBlICovCiAKIGRmYSAqCi1QeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCByZWdpc3RlciBpbnQgdHlwZSkKK1B5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIGludCB0eXBlKQogewotICAgIHJlZ2lzdGVyIGRmYSAqZDsKKyAgICBkZmEgKmQ7CiAjaWYgMQogICAgIC8qIE1hc3NpdmUgc3BlZWQtdXAgKi8KICAgICBkID0gJmctPmdfZGZhW3R5cGUgLSBOVF9PRkZTRVRdOwpAQCAtMTksNyArMTksNyBAQAogICAgIHJldHVybiBkOwogI2Vsc2UKICAgICAvKiBPbGQsIHNsb3cgdmVyc2lvbiAqLwotICAgIHJlZ2lzdGVyIGludCBpOworICAgIGludCBpOwogCiAgICAgZm9yIChpID0gZy0+Z19uZGZhcywgZCA9IGctPmdfZGZhOyAtLWkgPj0gMDsgZCsrKSB7CiAgICAgICAgIGlmIChkLT5kX3R5cGUgPT0gdHlwZSkKQEAgLTMwLDcgKzMwLDcgQEAKICNlbmRpZgogfQogCi1jaGFyICoKK2NvbnN0IGNoYXIgKgogUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpCiB7CiAgICAgc3RhdGljIGNoYXIgYnVmWzEwMF07CmRpZmYgLS1naXQgYS9QYXJzZXIvbXlyZWFkbGluZS5jIGIvUGFyc2VyL215cmVhZGxpbmUuYwppbmRleCA5ZjFmYzFlLi5hMWM0YjVjIDEwMDY0NAotLS0gYS9QYXJzZXIvbXlyZWFkbGluZS5jCisrKyBiL1BhcnNlci9teXJlYWRsaW5lLmMKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgKi8KICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpPT1FUlJPUl9PUEVSQVRJT05fQUJPUlRFRCkgewogICAgICAgICAgICAgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIDEwKSkgeworICAgICAgICAgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCAxMCwgRkFMU0UpKSB7CiAgICAgICAgICAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CiAgICAgICAgICAgICAgICAgUmVzZXRFdmVudChoSW50ZXJydXB0RXZlbnQpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBJbnRlcnJ1cHQgKi8KQEAgLTEwOSwyMiArMTA5LDI2IEBACiAvKiBSZWFkbGluZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBmZ2V0cygpICovCiAKIGNoYXIgKgotUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuOwogICAgIGNoYXIgKnAsICpwcjsKKwogICAgIG4gPSAxMDA7Ci0gICAgaWYgKChwID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobikpID09IE5VTEwpCisgICAgcCA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKG4pOworICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgZmZsdXNoKHN5c19zdGRvdXQpOwogICAgIGlmIChwcm9tcHQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBwcm9tcHQpOwogICAgIGZmbHVzaChzdGRlcnIpOworCiAgICAgc3dpdGNoIChteV9mZ2V0cyhwLCAoaW50KW4sIHN5c19zdGRpbikpIHsKICAgICBjYXNlIDA6IC8qIE5vcm1hbCBjYXNlICovCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMTogLyogSW50ZXJydXB0ICovCi0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGNhc2UgLTE6IC8qIEVPRiAqLwogICAgIGNhc2UgLTI6IC8qIEVycm9yICovCkBAIC0xMzYsMTMgKzE0MCwxMyBAQAogICAgIHdoaWxlIChuID4gMCAmJiBwW24tMV0gIT0gJ1xuJykgewogICAgICAgICBzaXplX3QgaW5jciA9IG4rMjsKICAgICAgICAgaWYgKGluY3IgPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAiaW5wdXQgbGluZSB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbiArIGluY3IpOworICAgICAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuICsgaW5jcik7CiAgICAgICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTUxLDkgKzE1NSw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbiArPSBzdHJsZW4ocCtuKTsKICAgICB9Ci0gICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbisxKTsKKyAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuKzEpOwogICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE2NiwxNSArMTcwLDE2IEBACiAKICAgIE5vdGU6IFB5dGhvbiBleHBlY3RzIGluIHJldHVybiBhIGJ1ZmZlciBhbGxvY2F0ZWQgd2l0aCBQeU1lbV9NYWxsb2MuICovCiAKLWNoYXIgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitjaGFyICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogCiAKIC8qIEludGVyZmFjZSB1c2VkIGJ5IHRva2VuaXplci5jIGFuZCBibHRpbm1vZHVsZS5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7Ci0gICAgY2hhciAqcnY7CisgICAgY2hhciAqcnYsICpyZXM7CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmIChfUHlPU19SZWFkbGluZVRTdGF0ZSA9PSBQeVRocmVhZFN0YXRlX0dFVCgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0yMjEsNSArMjI2LDE0IEBACiAKICAgICBfUHlPU19SZWFkbGluZVRTdGF0ZSA9IE5VTEw7CiAKLSAgICByZXR1cm4gcnY7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbGVuID0gc3RybGVuKHJ2KSArIDE7CisgICAgcmVzID0gUHlNZW1fTWFsbG9jKGxlbik7CisgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICBtZW1jcHkocmVzLCBydiwgbGVuKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ2KTsKKworICAgIHJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9QYXJzZXIvbm9kZS5jIGIvUGFyc2VyL25vZGUuYwppbmRleCAxZTRmMGRhLi5iMjZjZTYxIDEwMDY0NAotLS0gYS9QYXJzZXIvbm9kZS5jCisrKyBiL1BhcnNlci9ub2RlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCiBpbnQKLVB5Tm9kZV9BZGRDaGlsZChyZWdpc3RlciBub2RlICpuMSwgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeU5vZGVfQWRkQ2hpbGQobm9kZSAqbjEsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGNvbnN0IGludCBuY2ggPSBuMS0+bl9uY2hpbGRyZW47CiAgICAgaW50IGN1cnJlbnRfY2FwYWNpdHk7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2VyLmMgYi9QYXJzZXIvcGFyc2VyLmMKaW5kZXggYjUwNWZlMC4uNTZlYzUxNCAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNlci5jCisrKyBiL1BhcnNlci9wYXJzZXIuYwpAQCAtMzUsOSArMzUsOSBAQAogI2RlZmluZSBzX2VtcHR5KHMpICgocyktPnNfdG9wID09ICYocyktPnNfYmFzZVtNQVhTVEFDS10pCiAKIHN0YXRpYyBpbnQKLXNfcHVzaChyZWdpc3RlciBzdGFjayAqcywgZGZhICpkLCBub2RlICpwYXJlbnQpCitzX3B1c2goc3RhY2sgKnMsIGRmYSAqZCwgbm9kZSAqcGFyZW50KQogewotICAgIHJlZ2lzdGVyIHN0YWNrZW50cnkgKnRvcDsKKyAgICBzdGFja2VudHJ5ICp0b3A7CiAgICAgaWYgKHMtPnNfdG9wID09IHMtPnNfYmFzZSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNfcHVzaDogcGFyc2VyIHN0YWNrIG92ZXJmbG93XG4iKTsKICAgICAgICAgcmV0dXJuIEVfTk9NRU07CkBAIC01Miw3ICs1Miw3IEBACiAjaWZkZWYgUHlfREVCVUcKIAogc3RhdGljIHZvaWQKLXNfcG9wKHJlZ2lzdGVyIHN0YWNrICpzKQorc19wb3Aoc3RhY2sgKnMpCiB7CiAgICAgaWYgKHNfZW1wdHkocykpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInNfcG9wOiBwYXJzZXIgc3RhY2sgdW5kZXJmbG93IC0tIEZBVEFMIik7CkBAIC0xMDUsNyArMTA1LDcgQEAKIC8qIFBBUlNFUiBTVEFDSyBPUEVSQVRJT05TICovCiAKIHN0YXRpYyBpbnQKLXNoaWZ0KHJlZ2lzdGVyIHN0YWNrICpzLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorc2hpZnQoc3RhY2sgKnMsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIH0KIAogc3RhdGljIGludAotcHVzaChyZWdpc3RlciBzdGFjayAqcywgaW50IHR5cGUsIGRmYSAqZCwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3B1c2goc3RhY2sgKnMsIGludCB0eXBlLCBkZmEgKmQsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKLSAgICByZWdpc3RlciBub2RlICpuOworICAgIG5vZGUgKm47CiAgICAgbiA9IHMtPnNfdG9wLT5zX3BhcmVudDsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwogICAgIGVyciA9IFB5Tm9kZV9BZGRDaGlsZChuLCB0eXBlLCAoY2hhciAqKU5VTEwsIGxpbmVubywgY29sX29mZnNldCk7CkBAIC0xMzQsMTUgKzEzNCwxNSBAQAogLyogUEFSU0VSIFBST1BFUiAqLwogCiBzdGF0aWMgaW50Ci1jbGFzc2lmeShwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorY2xhc3NpZnkocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBncmFtbWFyICpnID0gcHMtPnBfZ3JhbW1hcjsKLSAgICByZWdpc3RlciBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKKyAgICBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKIAogICAgIGlmICh0eXBlID09IE5BTUUpIHsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciAqcyA9IHN0cjsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IHN0cjsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSAhPSBOQU1FIHx8IGwtPmxiX3N0ciA9PSBOVUxMIHx8CiAgICAgICAgICAgICAgICAgbC0+bGJfc3RyWzBdICE9IHNbMF0gfHwKQEAgLTE2NSw4ICsxNjUsOCBAQAogICAgIH0KIAogICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSA9PSB0eXBlICYmIGwtPmxiX3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgRChwcmludGYoIkl0J3MgYSB0b2tlbiB3ZSBrbm93XG4iKSk7CkBAIC0yMjUsMTAgKzIyNSwxMCBAQAogI2VuZGlmIC8qIGZ1dHVyZSBrZXl3b3JkICovCiAKIGludAotUHlQYXJzZXJfQWRkVG9rZW4ocmVnaXN0ZXIgcGFyc2VyX3N0YXRlICpwcywgcmVnaXN0ZXIgaW50IHR5cGUsIGNoYXIgKnN0ciwKK1B5UGFyc2VyX0FkZFRva2VuKHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgaW50ICpleHBlY3RlZF9yZXQpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IGlsYWJlbDsKKyAgICBpbnQgaWxhYmVsOwogICAgIGludCBlcnI7CiAKICAgICBEKHByaW50ZigiVG9rZW4gJXMvJyVzJyAuLi4gIiwgX1B5UGFyc2VyX1Rva2VuTmFtZXNbdHlwZV0sIHN0cikpOwpAQCAtMjQxLDE1ICsyNDEsMTUgQEAKICAgICAvKiBMb29wIHVudGlsIHRoZSB0b2tlbiBpcyBzaGlmdGVkIG9yIGFuIGVycm9yIG9jY3VycmVkICovCiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBGZXRjaCB0aGUgY3VycmVudCBkZmEgYW5kIHN0YXRlICovCi0gICAgICAgIHJlZ2lzdGVyIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKLSAgICAgICAgcmVnaXN0ZXIgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CisgICAgICAgIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKKyAgICAgICAgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CiAKICAgICAgICAgRChwcmludGYoIiBERkEgJyVzJywgc3RhdGUgJWQ6IiwKICAgICAgICAgICAgIGQtPmRfbmFtZSwgcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGUpKTsKIAogICAgICAgICAvKiBDaGVjayBhY2NlbGVyYXRvciAqLwogICAgICAgICBpZiAocy0+c19sb3dlciA8PSBpbGFiZWwgJiYgaWxhYmVsIDwgcy0+c191cHBlcikgewotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOworICAgICAgICAgICAgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOwogICAgICAgICAgICAgaWYgKHggIT0gLTEpIHsKICAgICAgICAgICAgICAgICBpZiAoeCAmICgxPDw3KSkgewogICAgICAgICAgICAgICAgICAgICAvKiBQdXNoIG5vbi10ZXJtaW5hbCAqLwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNldG9rLmMgYi9QYXJzZXIvcGFyc2V0b2suYwppbmRleCA3YmViNzM1Li42MjlkZWU1IDEwMDY0NAotLS0gYS9QYXJzZXIvcGFyc2V0b2suYworKysgYi9QYXJzZXIvcGFyc2V0b2suYwpAQCAtMTMsNyArMTMsNyBAQAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgbm9kZSAqcGFyc2V0b2soc3RydWN0IHRva19zdGF0ZSAqLCBncmFtbWFyICosIGludCwgcGVycmRldGFpbCAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IGluaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgY29uc3QgY2hhciogZmlsZW5hbWUpOworc3RhdGljIGludCBpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIFB5T2JqZWN0ICogZmlsZW5hbWUpOwogCiAvKiBQYXJzZSBpbnB1dCBjb21pbmcgZnJvbSBhIHN0cmluZy4gIFJldHVybiBlcnJvciBjb2RlLCBwcmludCBzb21lIGVycm9ycy4gKi8KIG5vZGUgKgpAQCAtNDEsOSArNDEsOSBAQAogfQogCiBub2RlICoKLVB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCitQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKICAgICBpbnQgZXhlY19pbnB1dCA9IHN0YXJ0ID09IGZpbGVfaW5wdXQ7CkBAIC02NywxMSArNjcsMzUgQEAKICAgICByZXR1cm4gcGFyc2V0b2sodG9rLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOwogfQogCitub2RlICoKK1B5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKKyNpZm5kZWYgUEdFTgorICAgIGlmIChmaWxlbmFtZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbjsKK30KKwogLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gYSBmaWxlLiAgUmV0dXJuIGVycm9yIGNvZGUsIHByaW50IHNvbWUgZXJyb3JzLiAqLwogCiBub2RlICoKIFB5UGFyc2VyX1BhcnNlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0KQogewogICAgIHJldHVybiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhmcCwgZmlsZW5hbWUsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgMCk7CkBAIC04MCw3ICsxMDQsOCBAQAogbm9kZSAqCiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMSwgY2hhciAqcHMyLCBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCBmbGFncykKIHsKICAgICBpbnQgaWZsYWdzID0gZmxhZ3M7CiAgICAgcmV0dXJuIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsIGcsIHN0YXJ0LCBwczEsCkBAIC04OCwxNiArMTEzLDE3IEBACiB9CiAKIG5vZGUgKgotUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK1B5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChGSUxFICpmcCwgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rOwogCiAgICAgaWYgKGluaXRlcnIoZXJyX3JldCwgZmlsZW5hbWUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21GaWxlKGZwLCAoY2hhciAqKWVuYywgcHMxLCBwczIpKSA9PSBOVUxMKSB7CisgICAgaWYgKCh0b2sgPSBQeVRva2VuaXplcl9Gcm9tRmlsZShmcCwgZW5jLCBwczEsIHBzMikpID09IE5VTEwpIHsKICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDgsNiArMTM0LDMxIEBACiAgICAgcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAorbm9kZSAqCitQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVvYmogPSBOVUxMOworI2lmbmRlZiBQR0VOCisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVvYmosIGVuYywgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlb2JqKTsKKyNlbmRpZgorICAgIHJldHVybiBuOworfQorCiAjaWZkZWYgUFlfUEFSU0VSX1JFUVVJUkVTX0ZVVFVSRV9LRVlXT1JECiAjaWYgMAogc3RhdGljIGNoYXIgd2l0aF9tc2dbXSA9CkBAIC0xMzgsNyArMTg5LDYgQEAKICAgICBpbnQgc3RhcnRlZCA9IDA7CiAKICAgICBpZiAoKHBzID0gUHlQYXJzZXJfTmV3KGcsIHN0YXJ0KSkgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbSBmb3IgbmV3IHBhcnNlclxuIik7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3OCw3ICsyMjgsNiBAQAogICAgICAgICBsZW4gPSBiIC0gYTsgLyogWFhYIHRoaXMgbWF5IGNvbXB1dGUgTlVMTCAtIE5VTEwgKi8KICAgICAgICAgc3RyID0gKGNoYXIgKikgUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwogICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gbWVtIGZvciBuZXh0IHRva2VuXG4iKTsKICAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsNyArMjU0LDggQEAKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChhID49IHRvay0+bGluZV9zdGFydCkKLSAgICAgICAgICAgIGNvbF9vZmZzZXQgPSBhIC0gdG9rLT5saW5lX3N0YXJ0OworICAgICAgICAgICAgY29sX29mZnNldCA9IFB5X1NBRkVfRE9XTkNBU1QoYSAtIHRvay0+bGluZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2ludHB0cl90LCBpbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2xfb2Zmc2V0ID0gLTE7CiAKQEAgLTMwOCw3ICszNTgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1pbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoraW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX09LOwogICAgIGVycl9yZXQtPmxpbmVubyA9IDA7CkBAIC0zMTcsMTMgKzM2NywxNiBAQAogICAgIGVycl9yZXQtPnRva2VuID0gLTE7CiAgICAgZXJyX3JldC0+ZXhwZWN0ZWQgPSAtMTsKICNpZm5kZWYgUEdFTgotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICBlbHNlCisgICAgaWYgKGZpbGVuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CisgICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gZmlsZW5hbWU7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8c3RyaW5nPiIpOwotICAgIGlmIChlcnJfcmV0LT5maWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoZXJyX3JldC0+ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGdlbm1haW4uYyBiL1BhcnNlci9wZ2VubWFpbi5jCmluZGV4IDUyYjgzODAuLjAxN2E0ZjkgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wZ2VubWFpbi5jCisrKyBiL1BhcnNlci9wZ2VubWFpbi5jCkBAIC0xMTMsNiArMTEzLDcgQEAKICAgICAgICAgUHlfRXhpdCgxKTsKICAgICB9CiAgICAgZyA9IHBnZW4obik7CisgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgaWYgKGcgPT0gTlVMTCkgewogICAgICAgICBwcmludGYoIkJhZCBncmFtbWFyLlxuIik7CiAgICAgICAgIFB5X0V4aXQoMSk7CkBAIC0xMzcsNyArMTM4LDcgQEAKIC8qIE5vLW5vbnNlbnNlIG15X3JlYWRsaW5lKCkgZm9yIHRva2VuaXplci5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7CiAgICAgc2l6ZV90IG4gPSAxMDAwOwogICAgIGNoYXIgKnAgPSAoY2hhciAqKVB5TWVtX01BTExPQyhuKTsKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuYyBiL1BhcnNlci90b2tlbml6ZXIuYwppbmRleCA1YzBiZDZlLi41YmY3ZTg0IDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmMKKysrIGIvUGFyc2VyL3Rva2VuaXplci5jCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgICB8fCBjID09ICdfJ1wKICAgICAgICAgICAgICAgIHx8IChjID49IDEyOCkpCiAKLWV4dGVybiBjaGFyICpQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworZXh0ZXJuIGNoYXIgKlB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAvKiBSZXR1cm4gbWFsbG9jJ2VkIHN0cmluZyBpbmNsdWRpbmcgdHJhaWxpbmcgXG47CiAgICBlbXB0eSBtYWxsb2MnZWQgc3RyaW5nIGZvciBFT0Y7CiAgICBOVUxMIGlmIGludGVycnVwdGVkICovCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qIFRva2VuIG5hbWVzICovCiAKLWNoYXIgKl9QeVBhcnNlcl9Ub2tlbk5hbWVzW10gPSB7Citjb25zdCBjaGFyICpfUHlQYXJzZXJfVG9rZW5OYW1lc1tdID0gewogICAgICJFTkRNQVJLRVIiLAogICAgICJOQU1FIiwKICAgICAiTlVNQkVSIiwKQEAgLTY3MSw3ICs2NzEsOCBAQAogCiBzdGF0aWMgY2hhciAqCiB0cmFuc2xhdGVfbmV3bGluZXMoY29uc3QgY2hhciAqcywgaW50IGV4ZWNfaW5wdXQsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykgewotICAgIGludCBza2lwX25leHRfbGYgPSAwLCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOworICAgIGludCBza2lwX25leHRfbGYgPSAwOworICAgIHNpemVfdCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOwogICAgIGNoYXIgKmJ1ZiwgKmN1cnJlbnQ7CiAgICAgY2hhciBjID0gJ1wwJzsKICAgICBidWYgPSBQeU1lbV9NQUxMT0MobmVlZGVkX2xlbmd0aCk7CkBAIC03NzksNyArNzgwLDcgQEAKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2sgPSB0b2tfbmV3KCk7CiAgICAgaWYgKHRvayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzdHIgPSAoY2hhciAqKWRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOworICAgIHN0ciA9IGRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOwogICAgIGlmIChzdHIgPT0gTlVMTCkgewogICAgICAgICBQeVRva2VuaXplcl9GcmVlKHRvayk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODIyLDcgKzgyMyw4IEBACiAvKiBTZXQgdXAgdG9rZW5pemVyIGZvciBmaWxlICovCiAKIHN0cnVjdCB0b2tfc3RhdGUgKgotUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqZnAsIGNoYXIqIGVuYywgY2hhciAqcHMxLCBjaGFyICpwczIpCitQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKQEAgLTg3Myw3ICs4NzUsNyBAQAogLyogR2V0IG5leHQgY2hhciwgdXBkYXRpbmcgc3RhdGU7IGVycm9yIGNvZGUgZ29lcyBpbnRvIHRvay0+ZG9uZSAqLwogCiBzdGF0aWMgaW50Ci10b2tfbmV4dGMocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rKQordG9rX25leHRjKHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICh0b2stPmN1ciAhPSB0b2stPmlucCkgewpAQCAtMTA3MCw3ICsxMDcyLDcgQEAKIC8qIEJhY2stdXAgb25lIGNoYXJhY3RlciAqLwogCiBzdGF0aWMgdm9pZAotdG9rX2JhY2t1cChyZWdpc3RlciBzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIHJlZ2lzdGVyIGludCBjKQordG9rX2JhY2t1cChzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIGludCBjKQogewogICAgIGlmIChjICE9IEVPRikgewogICAgICAgICBpZiAoLS10b2stPmN1ciA8IHRvay0+YnVmKQpAQCAtMTMwMCw5ICsxMzAyLDkgQEAKIC8qIEdldCBuZXh0IHRva2VuLCBhZnRlciBzcGFjZSBzdHJpcHBpbmcgZXRjLiAqLwogCiBzdGF0aWMgaW50Ci10b2tfZ2V0KHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgY2hhciAqKnBfc3RhcnQsIGNoYXIgKipwX2VuZCkKK3Rva19nZXQoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBjaGFyICoqcF9zdGFydCwgY2hhciAqKnBfZW5kKQogewotICAgIHJlZ2lzdGVyIGludCBjOworICAgIGludCBjOwogICAgIGludCBibGFua2xpbmUsIG5vbmFzY2lpOwogCiAgICAgKnBfc3RhcnQgPSAqcF9lbmQgPSBOVUxMOwpAQCAtMTMxMiw4ICsxMzE0LDggQEAKIAogICAgIC8qIEdldCBpbmRlbnRhdGlvbiBsZXZlbCAqLwogICAgIGlmICh0b2stPmF0Ym9sKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGludCBjb2wgPSAwOwotICAgICAgICByZWdpc3RlciBpbnQgYWx0Y29sID0gMDsKKyAgICAgICAgaW50IGNvbCA9IDA7CisgICAgICAgIGludCBhbHRjb2wgPSAwOwogICAgICAgICB0b2stPmF0Ym9sID0gMDsKICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwpAQCAtMTcyOSwxMCArMTczMSwxNSBAQAogICAgIEZJTEUgKmZwOwogICAgIGNoYXIgKnBfc3RhcnQgPU5VTEwgLCAqcF9lbmQgPU5VTEwgLCAqZW5jb2RpbmcgPSBOVUxMOwogCisjaWZuZGVmIFBHRU4KKyAgICBmZCA9IF9QeV9kdXAoZmQpOworI2Vsc2UKICAgICBmZCA9IGR1cChmZCk7CisjZW5kaWYKICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKwogICAgIGZwID0gZmRvcGVuKGZkLCAiciIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3Rva2VuaXplci5oIGIvUGFyc2VyL3Rva2VuaXplci5oCmluZGV4IGVkMWYzYWEuLjFjZTZlZWIgMTAwNjQ0Ci0tLSBhL1BhcnNlci90b2tlbml6ZXIuaAorKysgYi9QYXJzZXIvdG9rZW5pemVyLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBpbnQgaW5kc3RhY2tbTUFYSU5ERU5UXTsgICAgICAgICAgICAvKiBTdGFjayBvZiBpbmRlbnRzICovCiAgICAgaW50IGF0Ym9sOyAgICAgICAgICAvKiBOb256ZXJvIGlmIGF0IGJlZ2luIG9mIG5ldyBsaW5lICovCiAgICAgaW50IHBlbmRpbjsgICAgICAgICAvKiBQZW5kaW5nIGluZGVudHMgKGlmID4gMCkgb3IgZGVkZW50cyAoaWYgPCAwKSAqLwotICAgIGNoYXIgKnByb21wdCwgKm5leHRwcm9tcHQ7ICAgICAgICAgIC8qIEZvciBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwcm9tcHQsICpuZXh0cHJvbXB0OyAgICAgICAgICAvKiBGb3IgaW50ZXJhY3RpdmUgcHJvbXB0aW5nICovCiAgICAgaW50IGxpbmVubzsgICAgICAgICAvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGxldmVsOyAgICAgICAgICAvKiAoKSBbXSB7fSBQYXJlbnRoZXNlcyBuZXN0aW5nIGxldmVsICovCiAgICAgICAgICAgICAvKiBVc2VkIHRvIGFsbG93IGZyZWUgY29udGludWF0aW9ucyBpbnNpZGUgdGhlbSAqLwpAQCAtNjksOCArNjksOCBAQAogCiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVVURjgoY29uc3QgY2hhciAqLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY2hhciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgUHlUb2tlbml6ZXJfRnJlZShzdHJ1Y3QgdG9rX3N0YXRlICopOwogZXh0ZXJuIGludCBQeVRva2VuaXplcl9HZXQoc3RydWN0IHRva19zdGF0ZSAqLCBjaGFyICoqLCBjaGFyICoqKTsKIGV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfUmVzdG9yZUVuY29kaW5nKHN0cnVjdCB0b2tfc3RhdGUqIHRvaywKZGlmZiAtLWdpdCBhL1B5dGhvbi9QeXRob24tYXN0LmMgYi9QeXRob24vUHl0aG9uLWFzdC5jCmluZGV4IDdiZjJjNTAuLmUwN2E5M2YgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9QeXRob24tYXN0LmMKKysrIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwpAQCAtMjcxLDYgKzI3MSwxMCBAQAogc3RhdGljIGNoYXIgKkJ5dGVzX2ZpZWxkc1tdPXsKICAgICAicyIsCiB9Oworc3RhdGljIFB5VHlwZU9iamVjdCAqTmFtZUNvbnN0YW50X3R5cGU7CitzdGF0aWMgY2hhciAqTmFtZUNvbnN0YW50X2ZpZWxkc1tdPXsKKyAgICAidmFsdWUiLAorfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKkVsbGlwc2lzX3R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpBdHRyaWJ1dGVfdHlwZTsKIF9QeV9JREVOVElGSUVSKGF0dHIpOwpAQCAtNDA4LDI0ICs0MTIsMjQgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgKmFyZ3VtZW50c190eXBlOwogc3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqX2FyZ3VtZW50cyh2b2lkKik7CiBfUHlfSURFTlRJRklFUih2YXJhcmcpOwotX1B5X0lERU5USUZJRVIodmFyYXJnYW5ub3RhdGlvbik7CiBfUHlfSURFTlRJRklFUihrd29ubHlhcmdzKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnYW5ub3RhdGlvbik7Ci1fUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBfUHlfSURFTlRJRklFUihrd19kZWZhdWx0cyk7CitfUHlfSURFTlRJRklFUihrd2FyZyk7CitfUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBzdGF0aWMgY2hhciAqYXJndW1lbnRzX2ZpZWxkc1tdPXsKICAgICAiYXJncyIsCiAgICAgInZhcmFyZyIsCi0gICAgInZhcmFyZ2Fubm90YXRpb24iLAogICAgICJrd29ubHlhcmdzIiwKLSAgICAia3dhcmciLAotICAgICJrd2FyZ2Fubm90YXRpb24iLAotICAgICJkZWZhdWx0cyIsCiAgICAgImt3X2RlZmF1bHRzIiwKKyAgICAia3dhcmciLAorICAgICJkZWZhdWx0cyIsCiB9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqYXJnX3R5cGU7CiBzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfYXJnKHZvaWQqKTsKK3N0YXRpYyBjaGFyICphcmdfYXR0cmlidXRlc1tdID0geworICAgICJsaW5lbm8iLAorICAgICJjb2xfb2Zmc2V0IiwKK307CiBfUHlfSURFTlRJRklFUihhcmcpOwogX1B5X0lERU5USUZJRVIoYW5ub3RhdGlvbik7CiBzdGF0aWMgY2hhciAqYXJnX2ZpZWxkc1tdPXsKQEAgLTY3Myw2ICs2NzcsNyBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKW8pOwogICAgIHJldHVybiAoUHlPYmplY3QqKW87CiB9CisjZGVmaW5lIGFzdDJvYmpfc2luZ2xldG9uIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfaWRlbnRpZmllciBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX3N0cmluZyBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2J5dGVzIGFzdDJvYmpfb2JqZWN0CkBAIC02ODQsNiArNjg5LDE3IEBACiAKIC8qIENvbnZlcnNpb24gUHl0aG9uIC0+IEFTVCAqLwogCitzdGF0aWMgaW50IG9iajJhc3Rfc2luZ2xldG9uKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKK3sKKyAgICBpZiAob2JqICE9IFB5X05vbmUgJiYgb2JqICE9IFB5X1RydWUgJiYgb2JqICE9IFB5X0ZhbHNlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFTVCBzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IG9iajsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvYmoyYXN0X29iamVjdChQeU9iamVjdCogb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCiB7CiAgICAgaWYgKG9iaiA9PSBQeV9Ob25lKQpAQCAtNzU4LDYgKzc3NCwxOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV4aXN0c19ub3Rfbm9uZShQeU9iamVjdCAqb2JqLCBfUHlfSWRlbnRpZmllciAqaWQpCit7CisgICAgaW50IGlzbm9uZTsKKyAgICBQeU9iamVjdCAqYXR0ciA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCBpZCk7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpc25vbmUgPSBhdHRyID09IFB5X05vbmU7CisgICAgUHlfREVDUkVGKGF0dHIpOworICAgIHJldHVybiAhaXNub25lOworfQorCiAKIHN0YXRpYyBpbnQgaW5pdF90eXBlcyh2b2lkKQogewpAQCAtODYyLDYgKzg5MSw5IEBACiAgICAgaWYgKCFTdHJfdHlwZSkgcmV0dXJuIDA7CiAgICAgQnl0ZXNfdHlwZSA9IG1ha2VfdHlwZSgiQnl0ZXMiLCBleHByX3R5cGUsIEJ5dGVzX2ZpZWxkcywgMSk7CiAgICAgaWYgKCFCeXRlc190eXBlKSByZXR1cm4gMDsKKyAgICBOYW1lQ29uc3RhbnRfdHlwZSA9IG1ha2VfdHlwZSgiTmFtZUNvbnN0YW50IiwgZXhwcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9maWVsZHMsIDEpOworICAgIGlmICghTmFtZUNvbnN0YW50X3R5cGUpIHJldHVybiAwOwogICAgIEVsbGlwc2lzX3R5cGUgPSBtYWtlX3R5cGUoIkVsbGlwc2lzIiwgZXhwcl90eXBlLCBOVUxMLCAwKTsKICAgICBpZiAoIUVsbGlwc2lzX3R5cGUpIHJldHVybiAwOwogICAgIEF0dHJpYnV0ZV90eXBlID0gbWFrZV90eXBlKCJBdHRyaWJ1dGUiLCBleHByX3R5cGUsIEF0dHJpYnV0ZV9maWVsZHMsIDMpOwpAQCAtMTAzOSw2ICsxMDcxLDcgQEAKICAgICBjb21wcmVoZW5zaW9uX3R5cGUgPSBtYWtlX3R5cGUoImNvbXByZWhlbnNpb24iLCAmQVNUX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fZmllbGRzLCAzKTsKICAgICBpZiAoIWNvbXByZWhlbnNpb25fdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhjb21wcmVoZW5zaW9uX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBleGNlcHRoYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoImV4Y2VwdGhhbmRsZXIiLCAmQVNUX3R5cGUsIE5VTEwsIDApOwogICAgIGlmICghZXhjZXB0aGFuZGxlcl90eXBlKSByZXR1cm4gMDsKICAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGV4Y2VwdGhhbmRsZXJfdHlwZSwgZXhjZXB0aGFuZGxlcl9hdHRyaWJ1dGVzLCAyKSkKQEAgLTEwNDYsMTYgKzEwNzksMjEgQEAKICAgICBFeGNlcHRIYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoIkV4Y2VwdEhhbmRsZXIiLCBleGNlcHRoYW5kbGVyX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdEhhbmRsZXJfZmllbGRzLCAzKTsKICAgICBpZiAoIUV4Y2VwdEhhbmRsZXJfdHlwZSkgcmV0dXJuIDA7Ci0gICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgOCk7CisgICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgNik7CiAgICAgaWYgKCFhcmd1bWVudHNfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhcmd1bWVudHNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGFyZ190eXBlID0gbWFrZV90eXBlKCJhcmciLCAmQVNUX3R5cGUsIGFyZ19maWVsZHMsIDIpOwogICAgIGlmICghYXJnX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYXJnX3R5cGUsIGFyZ19hdHRyaWJ1dGVzLCAyKSkgcmV0dXJuIDA7CiAgICAga2V5d29yZF90eXBlID0gbWFrZV90eXBlKCJrZXl3b3JkIiwgJkFTVF90eXBlLCBrZXl3b3JkX2ZpZWxkcywgMik7CiAgICAgaWYgKCFrZXl3b3JkX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoa2V5d29yZF90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgYWxpYXNfdHlwZSA9IG1ha2VfdHlwZSgiYWxpYXMiLCAmQVNUX3R5cGUsIGFsaWFzX2ZpZWxkcywgMik7CiAgICAgaWYgKCFhbGlhc190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFsaWFzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICB3aXRoaXRlbV90eXBlID0gbWFrZV90eXBlKCJ3aXRoaXRlbSIsICZBU1RfdHlwZSwgd2l0aGl0ZW1fZmllbGRzLCAyKTsKICAgICBpZiAoIXdpdGhpdGVtX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMod2l0aGl0ZW1fdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGluaXRpYWxpemVkID0gMTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTE5MjMsNiArMTk2MSwyNSBAQAogfQogCiBleHByX3R5CitOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgZXhwcl90eSBwOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIE5hbWVDb25zdGFudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcCA9IChleHByX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHAtPmtpbmQgPSBOYW1lQ29uc3RhbnRfa2luZDsKKyAgICBwLT52Lk5hbWVDb25zdGFudC52YWx1ZSA9IHZhbHVlOworICAgIHAtPmxpbmVubyA9IGxpbmVubzsKKyAgICBwLT5jb2xfb2Zmc2V0ID0gY29sX29mZnNldDsKKyAgICByZXR1cm4gcDsKK30KKworZXhwcl90eQogRWxsaXBzaXMoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGV4cHJfdHkgcDsKQEAgLTIxNzcsOSArMjIzNCw4IEBACiB9CiAKIGFyZ3VtZW50c190eQotYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgaWRlbnRpZmllciB2YXJhcmcsIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICBhc2RsX3NlcSAqIGt3b25seWFyZ3MsIGlkZW50aWZpZXIga3dhcmcsIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uLAotICAgICAgICAgIGFzZGxfc2VxICogZGVmYXVsdHMsIGFzZGxfc2VxICoga3dfZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKQorYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBhc2RsX3NlcSAqCisgICAgICAgICAga3dfZGVmYXVsdHMsIGFyZ190eSBrd2FyZywgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXJndW1lbnRzX3R5IHA7CiAgICAgcCA9IChhcmd1bWVudHNfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOwpAQCAtMjE4NywxMiArMjI0MywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwLT5hcmdzID0gYXJnczsKICAgICBwLT52YXJhcmcgPSB2YXJhcmc7Ci0gICAgcC0+dmFyYXJnYW5ub3RhdGlvbiA9IHZhcmFyZ2Fubm90YXRpb247CiAgICAgcC0+a3dvbmx5YXJncyA9IGt3b25seWFyZ3M7Ci0gICAgcC0+a3dhcmcgPSBrd2FyZzsKLSAgICBwLT5rd2FyZ2Fubm90YXRpb24gPSBrd2FyZ2Fubm90YXRpb247Ci0gICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICBwLT5rd19kZWZhdWx0cyA9IGt3X2RlZmF1bHRzOworICAgIHAtPmt3YXJnID0ga3dhcmc7CisgICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICByZXR1cm4gcDsKIH0KIApAQCAtMjk0Myw2ICsyOTk3LDE1IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKKyAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoTmFtZUNvbnN0YW50X3R5cGUsIE5VTEwsIE5VTEwpOworICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CisgICAgICAgIHZhbHVlID0gYXN0Mm9ial9zaW5nbGV0b24oby0+di5OYW1lQ29uc3RhbnQudmFsdWUpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YWx1ZSwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoRWxsaXBzaXNfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTMzNjEsMjkgKzM0MjQsMjQgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2FyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT52YXJhcmcpOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+dmFyYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhcmFyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3b25seWFyZ3MsIGFzdDJvYmpfYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3b25seWFyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT5rd2FyZyk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dfZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT5rd2FyZ2Fubm90YXRpb24pOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+a3dhcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmRlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwpAQCAtMzM5MSwxMSArMzQ0OSw2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9kZWZhdWx0cywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3X2RlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodmFsdWUpOwpAQCAtMzQyNSw2ICszNDc4LDE2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9hbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2ludChvLT5saW5lbm8pOworICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfbGluZW5vLCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHZhbHVlID0gYXN0Mm9ial9pbnQoby0+Y29sX29mZnNldCk7CisgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9jb2xfb2Zmc2V0LCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CkBAIC0zNTQ5LDcgKzM2MTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNTg0LDcgKzM2NDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNjQxLDcgKzM3MDQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzQ0LDcgKzM4MDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzY4LDcgKzM4MzEsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zNzgxLDcgKzM4NDQsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVjb3JhdG9yX2xpc3RcIiBtaXNzaW5nIGZyb20gRnVuY3Rpb25EZWYiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfcmV0dXJucykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3JldHVybnMpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3JldHVybnMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4MzEsNyArMzg5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJhc2VzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYmFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJhc2VzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM4NTUsNyArMzkxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTM4NjgsNyArMzkzMSw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDbGFzc0RlZiIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0YXJhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzg3OCw3ICszOTQxLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXJhcmdzID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODk5LDcgKzM5NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zOTIzLDcgKzM5ODYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zOTQ4LDcgKzQwMTEsNyBAQAogICAgIGlmIChpc2luc3RhbmNlKSB7CiAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhbHVlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzk4MCw3ICs0MDQzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDAxNiw3ICs0MDc5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDEzMyw3ICs0MTk2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDE1Nyw3ICs0MjIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIwNSw3ICs0MjY4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIyOSw3ICs0MjkyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDI3Nyw3ICs0MzQwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMwMSw3ICs0MzY0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMzNyw3ICs0NDAwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgaXRlbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICB3aXRoaXRlbV90eSB2YWx1ZTsKQEAgLTQzNjEsNyArNDQyNCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzODYsNyArNDQ0OSw3IEBACiAgICAgICAgIGV4cHJfdHkgZXhjOwogICAgICAgICBleHByX3R5IGNhdXNlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZXhjKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfZXhjKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9leGMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQzOTYsNyArNDQ1OSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGMgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9jYXVzZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ0MzEsNyArNDQ5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ0NTUsNyArNDUxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhjZXB0aGFuZGxlcl90eSB2YWx1ZTsKQEAgLTQ0NzksNyArNDU0Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1MDMsNyArNDU2Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGZpbmFsYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGZpbmFsYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZmluYWxib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1NDAsNyArNDYwMyw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJ0ZXN0XCIgbWlzc2luZyBmcm9tIEFzc2VydCIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9tc2cpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9tc2cpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX21zZyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDU3Miw3ICs0NjM1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBhbGlhc190eSB2YWx1ZTsKQEAgLTQ1OTgsNyArNDY2MSw3IEBACiAgICAgICAgIGFzZGxfc2VxKiBuYW1lczsKICAgICAgICAgaW50IGxldmVsOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbW9kdWxlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbW9kdWxlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9tb2R1bGUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ2MTksNyArNDY4Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgYWxpYXNfdHkgdmFsdWU7CkBAIC00NjMyLDcgKzQ2OTUsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibmFtZXNcIiBtaXNzaW5nIGZyb20gSW1wb3J0RnJvbSIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sZXZlbCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xldmVsKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sZXZlbCk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDY2NCw3ICs0NzI3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDY5OSw3ICs0NzYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDg0MCw3ICs0OTAzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTAzNiw3ICs1MDk5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA2MCw3ICs1MTIzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA5NSw3ICs1MTU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTE0Miw3ICs1MjA1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTE4OSw3ICs1MjUyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI0OCw3ICs1MzExLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI5NSw3ICs1MzU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTMxOSw3ICs1MzgyLDcgQEAKICAgICBpZiAoaXNpbnN0YW5jZSkgewogICAgICAgICBleHByX3R5IHZhbHVlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YWx1ZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTUzODYsNyArNTQ0OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9wcyA9IGFzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcHMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjbXBvcF90eSB2YWx1ZTsKQEAgLTU0MTAsNyArNTQ3Myw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGNvbXBhcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgY29tcGFyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0NjAsNyArNTUyMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0ODQsNyArNTU0Nyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTU0OTcsNyArNTU2MCw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDYWxsIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01NTA3LDcgKzU1NzAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhcmFyZ3MgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU1ODgsNiArNTY1MSwyOCBAQAogICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilOYW1lQ29uc3RhbnRfdHlwZSk7CisgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgIHNpbmdsZXRvbiB2YWx1ZTsKKworICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9zaW5nbGV0b24odG1wLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidmFsdWVcIiBtaXNzaW5nIGZyb20gTmFtZUNvbnN0YW50Iik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqb3V0ID0gTmFtZUNvbnN0YW50KHZhbHVlLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGFyZW5hKTsKKyAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopRWxsaXBzaXNfdHlwZSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC01Nzc3LDcgKzU4NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01ODI0LDcgKzU5MDksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01OTM3LDcgKzYwMjIsNyBAQAogICAgICAgICBleHByX3R5IHVwcGVyOwogICAgICAgICBleHByX3R5IHN0ZXA7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sb3dlcikpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xvd2VyKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sb3dlcik7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk0Nyw3ICs2MDMyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxvd2VyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3VwcGVyKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdXBwZXIpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3VwcGVyKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTU3LDcgKzYwNDIsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdXBwZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RlcCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0ZXApKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0ZXApOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5ODksNyArNjA3NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRpbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkaW1zID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkaW1zID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc2xpY2VfdHkgdmFsdWU7CkBAIC02MzQwLDcgKzY0MjUsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGlmcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgaWZzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGlmcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjQwNCw3ICs2NDg5LDcgQEAKICAgICAgICAgaWRlbnRpZmllciBuYW1lOwogICAgICAgICBhc2RsX3NlcSogYm9keTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3R5cGUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF90eXBlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF90eXBlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NDE0LDcgKzY0OTksNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHlwZSA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9uYW1lKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbmFtZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbmFtZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjQzNSw3ICs2NTIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNjQ2NCwxMyArNjU0OSwxMSBAQAogewogICAgIFB5T2JqZWN0KiB0bXAgPSBOVUxMOwogICAgIGFzZGxfc2VxKiBhcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxKiBrd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogICAgIGFzZGxfc2VxKiBrd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogCiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hcmdzKSkgewogICAgICAgICBpbnQgcmVzOwpAQCAtNjQ4Myw3ICs2NTY2LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgYXJnX3R5IHZhbHVlOwpAQCAtNjQ5NiwyNiArNjU3OSwxNiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJhcmdzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmcpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhcmFyZykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhcmFyZyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZ2YXJhcmcsIGFyZW5hKTsKKyAgICAgICAgcmVzID0gb2JqMmFzdF9hcmcodG1wLCAmdmFyYXJnLCBhcmVuYSk7CiAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0NMRUFSKHRtcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmFyYXJnID0gTlVMTDsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZ2YXJhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IE5VTEw7Ci0gICAgfQogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dvbmx5YXJncykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTI3LDcgKzY2MDAsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3b25seWFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGt3b25seWFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoa3dvbmx5YXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBhcmdfdHkgdmFsdWU7CkBAIC02NTQwLDUwICs2NjEzLDYgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia3dvbmx5YXJnc1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZrd2FyZywgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGt3YXJnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAma3dhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3dhcmdhbm5vdGF0aW9uID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cykpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgICAgIFB5X3NzaXplX3QgaTsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50cyBmaWVsZCBcImRlZmF1bHRzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgfQotICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgZGVmYXVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7Ci0gICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBleHByX3R5IHZhbHVlOwotICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd19kZWZhdWx0cykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTk1LDcgKzY2MjQsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3X2RlZmF1bHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBrd19kZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChrd19kZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjYwOCw4ICs2NjM3LDQyIEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImt3X2RlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsIGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uLCBkZWZhdWx0cywga3dfZGVmYXVsdHMsIGFyZW5hKTsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmcpKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJlcyA9IG9iajJhc3RfYXJnKHRtcCwgJmt3YXJnLCBhcmVuYSk7CisgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAga3dhcmcgPSBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKSkgeworICAgICAgICBpbnQgcmVzOworICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpOworICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnRzIGZpZWxkIFwiZGVmYXVsdHNcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICBkZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBleHByX3R5IHZhbHVlOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0bXApOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3X2RlZmF1bHRzLCBrd2FyZywgZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICBhcmVuYSk7CiAgICAgcmV0dXJuIDA7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih0bXApOwpAQCAtNjYzNCw3ICs2Njk3LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiYXJnXCIgbWlzc2luZyBmcm9tIGFyZyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYW5ub3RhdGlvbik7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzA1LDcgKzY3NjgsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJuYW1lXCIgbWlzc2luZyBmcm9tIGFsaWFzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2FzbmFtZSkpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfYXNuYW1lKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYXNuYW1lKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3NDAsNyArNjgwMyw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImNvbnRleHRfZXhwclwiIG1pc3NpbmcgZnJvbSB3aXRoaXRlbSIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzcwLDcgKzY4MzMsNyBAQAogICAgIGlmICghbSkgcmV0dXJuIE5VTEw7CiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5Q0ZfT05MWV9BU1QiLCBQeUNGX09OTFlfQVNUKSA8IDApCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5Q0ZfT05MWV9BU1QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJtb2QiLCAoUHlPYmplY3QqKW1vZF90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTW9kdWxlIiwgKFB5T2JqZWN0KilNb2R1bGVfdHlwZSkgPCAwKSByZXR1cm4KQEAgLTY4NTAsNiArNjkxMyw4IEBACiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJTdHIiLCAoUHlPYmplY3QqKVN0cl90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQnl0ZXMiLCAoUHlPYmplY3QqKUJ5dGVzX3R5cGUpIDwgMCkgcmV0dXJuCiAgICAgICAgIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJOYW1lQ29uc3RhbnQiLCAoUHlPYmplY3QqKU5hbWVDb25zdGFudF90eXBlKSA8CisgICAgICAgIDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiRWxsaXBzaXMiLCAoUHlPYmplY3QqKUVsbGlwc2lzX3R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBdHRyaWJ1dGUiLCAoUHlPYmplY3QqKUF0dHJpYnV0ZV90eXBlKSA8IDApCkBAIC02OTQ5LDcgKzcwMTQsOCBAQAogCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtNjk2Myw3ICs3MDI5LDggQEAKICAgICBpbnQgaXNpbnN0YW5jZTsKICAgICBhc3NlcnQoMCA8PSBtb2RlICYmIG1vZGUgPD0gMik7CiAKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2UoYXN0LCByZXFfdHlwZVttb2RlXSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpCkBAIC02OTgxLDcgKzcwNDgsOCBAQAogCiBpbnQgUHlBU1RfQ2hlY2soUHlPYmplY3QqIG9iaikKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopJkFTVF90eXBlKTsKIH0KIApkaWZmIC0tZ2l0IGEvUHl0aG9uL193YXJuaW5ncy5jIGIvUHl0aG9uL193YXJuaW5ncy5jCmluZGV4IGYzM2U0NzcuLjYwMTNkN2QgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9fd2FybmluZ3MuYworKysgYi9QeXRob24vX3dhcm5pbmdzLmMKQEAgLTEzLDYgKzEzLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqX29uY2VfcmVnaXN0cnk7ICAvKiBEaWN0ICovCiBzdGF0aWMgUHlPYmplY3QgKl9kZWZhdWx0X2FjdGlvbjsgLyogU3RyaW5nICovCiAKK19QeV9JREVOVElGSUVSKGFyZ3YpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogc3RhdGljIGludAogY2hlY2tfbWF0Y2hlZChQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqYXJnKQpAQCAtOTksNyArMTAxLDcgQEAKIAogCiAvKiBUaGUgaXRlbSBpcyBhIGJvcnJvd2VkIHJlZmVyZW5jZS4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKK3N0YXRpYyBQeU9iamVjdCoKIGdldF9maWx0ZXIoUHlPYmplY3QgKmNhdGVnb3J5LCBQeU9iamVjdCAqdGV4dCwgUHlfc3NpemVfdCBsaW5lbm8sCiAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICoqaXRlbSkKIHsKQEAgLTE0NCwyMSArMTQ2LDI4IEBACiAgICAgICAgIGxuX29iaiA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDQpOwogCiAgICAgICAgIGdvb2RfbXNnID0gY2hlY2tfbWF0Y2hlZChtc2csIHRleHQpOworICAgICAgICBpZiAoZ29vZF9tc2cgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBnb29kX21vZCA9IGNoZWNrX21hdGNoZWQobW9kLCBtb2R1bGUpOworICAgICAgICBpZiAoZ29vZF9tb2QgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBpc19zdWJjbGFzcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoY2F0ZWdvcnksIGNhdCk7CisgICAgICAgIGlmIChpc19zdWJjbGFzcyA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIGxuID0gUHlMb25nX0FzU3NpemVfdChsbl9vYmopOwotICAgICAgICBpZiAoZ29vZF9tc2cgPT0gLTEgfHwgZ29vZF9tb2QgPT0gLTEgfHwgaXNfc3ViY2xhc3MgPT0gLTEgfHwKLSAgICAgICAgICAgIChsbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSkKKyAgICAgICAgaWYgKGxuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBpZiAoZ29vZF9tc2cgJiYgaXNfc3ViY2xhc3MgJiYgZ29vZF9tb2QgJiYgKGxuID09IDAgfHwgbGluZW5vID09IGxuKSkKLSAgICAgICAgICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKGFjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwogICAgIH0KIAogICAgIGFjdGlvbiA9IGdldF9kZWZhdWx0X2FjdGlvbigpOwotICAgIGlmIChhY3Rpb24gIT0gTlVMTCkgewotICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc1N0cmluZyhhY3Rpb24pOwotICAgIH0KKyAgICBpZiAoYWN0aW9uICE9IE5VTEwpCisgICAgICAgIHJldHVybiBhY3Rpb247CiAKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX05BTUUgIi5kZWZhdWx0YWN0aW9uIG5vdCBmb3VuZCIpOwpAQCAtMTkyLDIzICsyMDEsMjYgQEAKIG5vcm1hbGl6ZV9tb2R1bGUoUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICptb2R1bGU7Ci0gICAgY29uc3QgY2hhciAqbW9kX3N0cjsKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaW50IHJjID0gUHlPYmplY3RfSXNUcnVlKGZpbGVuYW1lKTsKLSAgICBpZiAocmMgPT0gLTEpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsc2UgaWYgKHJjID09IDApCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHVua25vd24+Iik7Ci0KLSAgICBtb2Rfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhmaWxlbmFtZSk7Ci0gICAgaWYgKG1vZF9zdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbGVuID0gUHlVbmljb2RlX0dldExlbmd0aChmaWxlbmFtZSk7CiAgICAgaWYgKGxlbiA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjx1bmtub3duPiIpOworCisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKGZpbGVuYW1lKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoZmlsZW5hbWUpOworCisgICAgLyogaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOiAqLwogICAgIGlmIChsZW4gPj0gMyAmJgotICAgICAgICBzdHJuY21wKG1vZF9zdHIgKyAobGVuIC0gMyksICIucHkiLCAzKSA9PSAwKSB7CisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0zKSA9PSAnLicgJiYKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTIpID09ICdwJyAmJgorICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMSkgPT0gJ3knKQorICAgIHsKICAgICAgICAgbW9kdWxlID0gUHlVbmljb2RlX1N1YnN0cmluZyhmaWxlbmFtZSwgMCwgbGVuLTMpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTI1MywzOSArMjY1LDYzIEBACiAKICAgICBuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChjYXRlZ29yeSwgJlB5SWRfX19uYW1lX18pOwogICAgIGlmIChuYW1lID09IE5VTEwpICAvKiBYWFggQ2FuIGFuIG9iamVjdCBsYWNrIGEgJ19fbmFtZV9fJyBhdHRyaWJ1dGU/ICovCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGZfc3RkZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBmX3N0ZGVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIGlmIChmX3N0ZGVyciA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9zdCBzeXMuc3RkZXJyXG4iKTsKLSAgICAgICAgUHlfREVDUkVGKG5hbWUpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgLyogUHJpbnQgImZpbGVuYW1lOmxpbmVubzogY2F0ZWdvcnk6IHRleHRcbiIgKi8KLSAgICBQeUZpbGVfV3JpdGVPYmplY3QoZmlsZW5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwotICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhsaW5lbm9fc3RyLCBmX3N0ZGVycik7Ci0gICAgUHlGaWxlX1dyaXRlT2JqZWN0KG5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwotICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmX3N0ZGVycik7Ci0gICAgUHlGaWxlX1dyaXRlT2JqZWN0KHRleHQsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwotICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmX3N0ZGVycik7Ci0gICAgUHlfWERFQ1JFRihuYW1lKTsKKyAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KGZpbGVuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZyhsaW5lbm9fc3RyLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QobmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KHRleHQsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgUHlfQ0xFQVIobmFtZSk7CiAKICAgICAvKiBQcmludCAiICBzb3VyY2VfbGluZVxuIiAqLwogICAgIGlmIChzb3VyY2VsaW5lKSB7Ci0gICAgICAgIGNoYXIgKnNvdXJjZV9saW5lX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoc291cmNlbGluZSk7Ci0gICAgICAgIGlmIChzb3VyY2VfbGluZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdoaWxlICgqc291cmNlX2xpbmVfc3RyID09ICcgJyB8fCAqc291cmNlX2xpbmVfc3RyID09ICdcdCcgfHwKLSAgICAgICAgICAgICAgICAqc291cmNlX2xpbmVfc3RyID09ICdcMDE0JykKLSAgICAgICAgICAgIHNvdXJjZV9saW5lX3N0cisrOworICAgICAgICBpbnQga2luZDsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBsZW47CisgICAgICAgIFB5X1VDUzQgY2g7CisgICAgICAgIFB5T2JqZWN0ICp0cnVuY2F0ZWQ7CiAKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKHNvdXJjZV9saW5lX3N0ciwgZl9zdGRlcnIpOworICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNvdXJjZWxpbmUpIDwgMSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHNvdXJjZWxpbmUpOworICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc291cmNlbGluZSk7CisgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNvdXJjZWxpbmUpOworICAgICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgeworICAgICAgICAgICAgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgIGlmIChjaCAhPSAnICcgJiYgY2ggIT0gJ1x0JyAmJiBjaCAhPSAnXDAxNCcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB0cnVuY2F0ZWQgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHNvdXJjZWxpbmUsIGksIGxlbik7CisgICAgICAgIGlmICh0cnVuY2F0ZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHNvdXJjZWxpbmUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOworICAgICAgICBQeV9ERUNSRUYodHJ1bmNhdGVkKTsKICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICBpZiAoX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKGZfc3RkZXJyLCBmaWxlbmFtZSwgbGluZW5vLCAyKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgIGVsc2UgeworICAgICAgICBfUHlfRGlzcGxheVNvdXJjZUxpbmUoZl9zdGRlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIDIpOworICAgIH0KKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICBQeUVycl9DbGVhcigpOwogfQogCkBAIC0yOTYsOSArMzMyLDE2IEBACiB7CiAgICAgUHlPYmplY3QgKmtleSA9IE5VTEwsICp0ZXh0ID0gTlVMTCwgKnJlc3VsdCA9IE5VTEwsICpsaW5lbm9fb2JqID0gTlVMTDsKICAgICBQeU9iamVjdCAqaXRlbSA9IFB5X05vbmU7Ci0gICAgY29uc3QgY2hhciAqYWN0aW9uOworICAgIFB5T2JqZWN0ICphY3Rpb247CiAgICAgaW50IHJjOwogCisgICAgLyogbW9kdWxlIGNhbiBiZSBOb25lIGlmIGEgd2FybmluZyBpcyBlbWl0dGVkIGxhdGUgZHVyaW5nIFB5dGhvbiBzaHV0ZG93bi4KKyAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBQeXRob24gd2FybmluZ3MgbW9kdWxlIHdhcyBwcm9iYWJseSB1bmxvYWRlZCwgZmlsdGVycworICAgICAgIGFyZSBubyBtb3JlIGF2YWlsYWJsZSB0byBjaG9vc2UgYXMgYWN0aW9uLiBJdCBpcyBzYWZlciB0byBpZ25vcmUgdGhlCisgICAgICAgd2FybmluZyBhbmQgZG8gbm90aGluZy4gKi8KKyAgICBpZiAobW9kdWxlID09IFB5X05vbmUpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCiAgICAgaWYgKHJlZ2lzdHJ5ICYmICFQeURpY3RfQ2hlY2socmVnaXN0cnkpICYmIChyZWdpc3RyeSAhPSBQeV9Ob25lKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ3JlZ2lzdHJ5JyBtdXN0IGJlIGEgZGljdCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM1NCw3ICszOTcsNyBAQAogICAgIGlmIChhY3Rpb24gPT0gTlVMTCkKICAgICAgICAgZ290byBjbGVhbnVwOwogCi0gICAgaWYgKHN0cmNtcChhY3Rpb24sICJlcnJvciIpID09IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiZXJyb3IiKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChjYXRlZ29yeSwgbWVzc2FnZSk7CiAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICB9CkBAIC0zNjIsMTMgKzQwNSwxMyBAQAogICAgIC8qIFN0b3JlIGluIHRoZSByZWdpc3RyeSB0aGF0IHdlJ3ZlIGJlZW4gaGVyZSwgKmV4Y2VwdCogd2hlbiB0aGUgYWN0aW9uCiAgICAgICAgaXMgImFsd2F5cyIuICovCiAgICAgcmMgPSAwOwotICAgIGlmIChzdHJjbXAoYWN0aW9uLCAiYWx3YXlzIikgIT0gMCkgeworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJhbHdheXMiKSAhPSAwKSB7CiAgICAgICAgIGlmIChyZWdpc3RyeSAhPSBOVUxMICYmIHJlZ2lzdHJ5ICE9IFB5X05vbmUgJiYKICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWdpc3RyeSwga2V5LCBQeV9UcnVlKSA8IDApCiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJpZ25vcmUiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJpZ25vcmUiKSA9PSAwKQogICAgICAgICAgICAgZ290byByZXR1cm5fbm9uZTsKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm9uY2UiKSA9PSAwKSB7CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgIm9uY2UiKSA9PSAwKSB7CiAgICAgICAgICAgICBpZiAocmVnaXN0cnkgPT0gTlVMTCB8fCByZWdpc3RyeSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgcmVnaXN0cnkgPSBnZXRfb25jZV9yZWdpc3RyeSgpOwogICAgICAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMKQpAQCAtMzc3LDI0ICs0MjAsMTUgQEAKICAgICAgICAgICAgIC8qIF9vbmNlX3JlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSldID0gMSAqLwogICAgICAgICAgICAgcmMgPSB1cGRhdGVfcmVnaXN0cnkocmVnaXN0cnksIHRleHQsIGNhdGVnb3J5LCAwKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAibW9kdWxlIikgPT0gMCkgeworICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJtb2R1bGUiKSA9PSAwKSB7CiAgICAgICAgICAgICAvKiByZWdpc3RyeVsodGV4dCwgY2F0ZWdvcnksIDApXSA9IDEgKi8KICAgICAgICAgICAgIGlmIChyZWdpc3RyeSAhPSBOVUxMICYmIHJlZ2lzdHJ5ICE9IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgcmMgPSB1cGRhdGVfcmVnaXN0cnkocmVnaXN0cnksIHRleHQsIGNhdGVnb3J5LCAwKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAiZGVmYXVsdCIpICE9IDApIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0b19zdHIgPSBQeU9iamVjdF9TdHIoaXRlbSk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICplcnJfc3RyID0gIj8/PyI7Ci0KLSAgICAgICAgICAgIGlmICh0b19zdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGVycl9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHRvX3N0cik7Ci0gICAgICAgICAgICAgICAgaWYgKGVycl9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiZGVmYXVsdCIpICE9IDApIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIGFjdGlvbiAoJXMpIGluIHdhcm5pbmdzLmZpbHRlcnM6XG4gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBlcnJfc3RyKTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodG9fc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglUikgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGl0ZW0pOwogICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI4LDEzICs1NjIsMTIgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoKm1vZHVsZSk7CiAgICAgICAgICpmaWxlbmFtZSA9IE5VTEw7Ci0gICAgICAgIGlmIChtb2R1bGVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7Ci0gICAgICAgIGlmIChzdHJjbXAobW9kdWxlX3N0ciwgIl9fbWFpbl9fIikgPT0gMCkgewotICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3YgPSBQeVN5c19HZXRPYmplY3QoImFyZ3YiKTsKLSAgICAgICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7CisgICAgICAgIGlmICgqbW9kdWxlICE9IFB5X05vbmUgJiYgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoKm1vZHVsZSwgIl9fbWFpbl9fIikgPT0gMCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3YgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfYXJndik7CisgICAgICAgICAgICAvKiBQeUxpc3RfQ2hlY2soKSBpcyBuZWVkZWQgYmVjYXVzZSBzeXMuYXJndiBpcyBzZXQgdG8gTm9uZSBkdXJpbmcKKyAgICAgICAgICAgICAgIFB5dGhvbiBmaW5hbGl6YXRpb24gKi8KKyAgICAgICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X0NoZWNrKGFyZ3YpICYmIFB5TGlzdF9TaXplKGFyZ3YpID4gMCkgewogICAgICAgICAgICAgICAgIGludCBpc190cnVlOwogICAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5TGlzdF9HZXRJdGVtKGFyZ3YsIDApOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwpAQCAtNTU0LDggKzU4Nyw4IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBlbWJlZGRlZCBpbnRlcnByZXRlcnMgZG9uJ3QgaGF2ZSBzeXMuYXJndiwgc2VlIGJ1ZyAjODM5MTUxICovCiAgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIl9fbWFpbl9fIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKSB7CkBAIC02NDksNyArNjgyLDcgQEAKICAgICBQeU9iamVjdCAqcmVnaXN0cnkgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfZ2xvYmFscyA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09PaXxPT086d2Fybl9leHBsaWNpdCIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PVWl8T09POndhcm5fZXhwbGljaXQiLAogICAgICAgICAgICAgICAgIGt3ZF9saXN0LCAmbWVzc2FnZSwgJmNhdGVnb3J5LCAmZmlsZW5hbWUsICZsaW5lbm8sICZtb2R1bGUsCiAgICAgICAgICAgICAgICAgJnJlZ2lzdHJ5LCAmbW9kdWxlX2dsb2JhbHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcwNywxNCArNzQwLDE0IEBACiAKICAgICAgICAgLyogSGFuZGxlIHRoZSB3YXJuaW5nLiAqLwogICAgICAgICByZXR1cm5lZCA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIHNvdXJjZV9saW5lKTsKICAgICAgICAgUHlfREVDUkVGKHNvdXJjZV9saXN0KTsKICAgICAgICAgcmV0dXJuIHJldHVybmVkOwogICAgIH0KIAogIHN0YW5kYXJkX2NhbGw6CiAgICAgcmV0dXJuIHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBOVUxMKTsKIH0KIAogCkBAIC03ODYsMTEgKzgxOSwyNiBAQAogCiAvKiBXYXJuaW5nIHdpdGggZXhwbGljaXQgb3JpZ2luICovCiBpbnQKK1B5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKKyAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKKyAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAogUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqdGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5KQogewotICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0ZXh0KTsKICAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CiAgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CkBAIC04MDAsMTggKzg0OCwxMiBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgewogICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKLSAgICAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKLSAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKLSAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsIHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgcmV0ID0gMDsKKyAgICByZXQgPSBQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnkpOwogCiAgZXhpdDoKICAgICBQeV9YREVDUkVGKG1lc3NhZ2UpOwpAQCAtODIwLDYgKzg2Miw0OSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK2ludAorUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIFB5T2JqZWN0ICptZXNzYWdlOworICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpbnQgcmV0ID0gLTE7CisgICAgdmFfbGlzdCB2YXJnczsKKworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmZGVmIEhBVkVfU1REQVJHX1BST1RPVFlQRVMKKyAgICB2YV9zdGFydCh2YXJncywgZm9ybWF0KTsKKyNlbHNlCisgICAgdmFfc3RhcnQodmFyZ3MpOworI2VuZGlmCisgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgdmFfZW5kKHZhcmdzKTsKK2V4aXQ6CisgICAgUHlfWERFQ1JFRihtb2R1bGUpOworICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiByZXQ7Cit9CisKIAogUHlEb2NfU1RSVkFSKHdhcm5fZG9jLAogIklzc3VlIGEgd2FybmluZywgb3IgbWF5YmUgaWdub3JlIGl0IG9yIHJhaXNlIGFuIGV4Y2VwdGlvbi4iKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9hc2RsLmMgYi9QeXRob24vYXNkbC5jCmluZGV4IGU3ZTMyODAuLjc0ZmE5NDEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9hc2RsLmMKKysrIGIvUHl0aG9uL2FzZGwuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlICJhc2RsLmgiCiAKIGFzZGxfc2VxICoKLWFzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfc2VxICpzZXEgPSBOVUxMOwogICAgIHNpemVfdCBuID0gKHNpemUgPyAoc2l6ZW9mKHZvaWQgKikgKiAoc2l6ZSAtIDEpKSA6IDApOwpAQCAtMzMsNyArMzMsNyBAQAogfQogCiBhc2RsX2ludF9zZXEgKgotYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBhc2RsX2ludF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CmRpZmYgLS1naXQgYS9QeXRob24vYXN0LmMgYi9QeXRob24vYXN0LmMKaW5kZXggOWEwYjA2NC4uM2JkMjRmZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzdC5jCisrKyBiL1B5dGhvbi9hc3QuYwpAQCAtMTA5LDIyICsxMDksMTQgQEAKIHsKICAgICBpZiAoIXZhbGlkYXRlX2FyZ3MoYXJncy0+YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhcmdzLT52YXJhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+dmFyYXJnKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInZhcmFyZ2Fubm90YXRpb24gYnV0IG5vIHZhcmFyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmdhbm5vdGF0aW9uLCBMb2FkKSkKKyAgICBpZiAoYXJncy0+dmFyYXJnICYmIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbgorICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZV9hcmdzKGFyZ3MtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXJncy0+a3dhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+a3dhcmcpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAia3dhcmdhbm5vdGF0aW9uIGJ1dCBubyBrd2FyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZ2Fubm90YXRpb24sIExvYWQpKQorICAgIGlmIChhcmdzLT5rd2FyZyAmJiBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiAKKyAgICAgICAgJiYgIXZhbGlkYXRlX2V4cHIoYXJncy0+a3dhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKGFzZGxfc2VxX0xFTihhcmdzLT5kZWZhdWx0cykgPiBhc2RsX3NlcV9MRU4oYXJncy0+YXJncykpIHsKQEAgLTI4Miw2ICsyNzQsNyBAQAogICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcnMoZXhwLT52LlR1cGxlLmVsdHMsIGN0eCwgMCk7CiAgICAgLyogVGhlc2UgbGFzdCBjYXNlcyBkb24ndCBoYXZlIGFueSBjaGVja2luZy4gKi8KICAgICBjYXNlIE5hbWVfa2luZDoKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmV0dXJuIDE7CiAgICAgZGVmYXVsdDoKQEAgLTQ5OCw3ICs0OTEsNyBAQAogc3RydWN0IGNvbXBpbGluZyB7CiAgICAgY2hhciAqY19lbmNvZGluZzsgLyogc291cmNlIGVuY29kaW5nICovCiAgICAgUHlBcmVuYSAqY19hcmVuYTsgLyogYXJlbmEgZm9yIGFsbG9jYXRpbmcgbWVtZW9yeSAqLwotICAgIGNvbnN0IGNoYXIgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCisgICAgUHlPYmplY3QgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplOyAvKiBOb3JtYWxpemF0aW9uIGZ1bmN0aW9uIGZyb20gdW5pY29kZWRhdGEuICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplX2FyZ3M7IC8qIE5vcm1hbGl6YXRpb24gYXJndW1lbnQgdHVwbGUuICovCiB9OwpAQCAtNTY3LDcgKzU2MCwxMCBAQAogICAgICAgICBpZCA9IGlkMjsKICAgICB9CiAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJmlkKTsKLSAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIGlkKTsKKyAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBpZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gaWQ7CiB9CiAKQEAgLTU3NywyNCArNTczLDEzIEBACiBhc3RfZXJyb3Ioc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgY29uc3QgY2hhciAqZXJybXNnKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZSwgKmVycnN0ciwgKmxvYywgKnRtcDsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2JqOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgTElORU5PKG4pKTsKKyAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obikpOwogICAgIGlmICghbG9jKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgbG9jID0gUHlfTm9uZTsKICAgICB9Ci0gICAgaWYgKGMtPmNfZmlsZW5hbWUpIHsKLSAgICAgICAgZmlsZW5hbWVfb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChjLT5jX2ZpbGVuYW1lKTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZV9vYmopIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsb2MpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIGZpbGVuYW1lX29iaiA9IFB5X05vbmU7Ci0gICAgfQotICAgIHRtcCA9IFB5X0J1aWxkVmFsdWUoIihOaWlOKSIsIGZpbGVuYW1lX29iaiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CisgICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKE9paU4pIiwgYy0+Y19maWxlbmFtZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CiAgICAgaWYgKCF0bXApCiAgICAgICAgIHJldHVybiAwOwogICAgIGVycnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVycm1zZyk7CkBAIC02NzcsOCArNjYyLDggQEAKICovCiAKIG1vZF90eQotUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK1B5QVNUX0Zyb21Ob2RlT2JqZWN0KGNvbnN0IG5vZGUgKm4sIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGludCBpLCBqLCBrLCBudW07CiAgICAgYXNkbF9zZXEgKnN0bXRzID0gTlVMTDsKQEAgLTY4OCw2ICs2NzMsNyBAQAogICAgIG1vZF90eSByZXMgPSBOVUxMOwogCiAgICAgYy5jX2FyZW5hID0gYXJlbmE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgYy5jX2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAgICAgYy5jX25vcm1hbGl6ZSA9IGMuY19ub3JtYWxpemVfYXJncyA9IE5VTEw7CiAgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5jZl9mbGFncyAmIFB5Q0ZfU09VUkNFX0lTX1VURjgpIHsKQEAgLTcxMCw3ICs2OTYsNyBAQAogICAgIGsgPSAwOwogICAgIHN3aXRjaCAoVFlQRShuKSkgewogICAgICAgICBjYXNlIGZpbGVfaW5wdXQ6Ci0gICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKKyAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMTsgaSsrKSB7CkBAIC03NTAsNyArNzM2LDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXNlIHNpbmdsZV9pbnB1dDoKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBORVdMSU5FKSB7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcoMSwgYXJlbmEpOworICAgICAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldygxLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHN0bXRzLCAwLCBQYXNzKG4tPm5fbGluZW5vLCBuLT5uX2NvbF9vZmZzZXQsCkBAIC03NjIsNyArNzQ4LDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBudW0gPSBudW1fc3RtdHMobik7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KG51bSwgYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgIGlmIChudW0gPT0gMSkgewpAQCAtODAxLDYgKzc4NywyMSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKK21vZF90eQorUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLAorICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgbW9kX3R5IG1vZDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKKworfQorCiAvKiBSZXR1cm4gdGhlIEFTVCByZXByLiBvZiB0aGUgb3BlcmF0b3IgcmVwcmVzZW50ZWQgYXMgc3ludGF4ICh8LCBeLCBldGMuKQogKi8KIApAQCAtOTAzLDcgKzkwNCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgICAgICBpZiAoY3R4ID09IFN0b3JlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMSkpCisgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBmb3JiaWRkZW5fbmFtZSgpIGNhbGxzIGFzdF9lcnJvcigpICovCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlLT52Lk5hbWUuY3R4ID0gY3R4OwpAQCAtOTU1LDYgKzk1Niw5IEBACiAgICAgICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJsaXRlcmFsIjsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICAgICAgZXhwcl9uYW1lID0gImtleXdvcmQiOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJFbGxpcHNpcyI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwOTUsNyArMTA5OSw3IEBACiAgICAgaW50IGk7CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3QgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9zdGFyX2V4cHIgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wKTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTExOSw2ICsxMTIzLDcgQEAKICAgICBpZGVudGlmaWVyIG5hbWU7CiAgICAgZXhwcl90eSBhbm5vdGF0aW9uID0gTlVMTDsKICAgICBub2RlICpjaDsKKyAgICBhcmdfdHkgdG1wOwogCiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGZwZGVmIHx8IFRZUEUobikgPT0gdmZwZGVmKTsKICAgICBjaCA9IENISUxEKG4sIDApOwpAQCAtMTEzNCw3ICsxMTM5LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gYXJnKG5hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgIHRtcCA9IGFyZyhuYW1lLCBhbm5vdGF0aW9uLCBjLT5jX2FyZW5hKTsKKyAgICBpZiAoIXRtcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0bXAtPmxpbmVubyA9IExJTkVOTyhuKTsKKyAgICB0bXAtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CisgICAgcmV0dXJuIHRtcDsKIH0KIAogLyogcmV0dXJucyAtMSBpZiBmYWlsZWQgdG8gaGFuZGxlIGtleXdvcmQgb25seSBhcmd1bWVudHMKQEAgLTEyMzAsMTUgKzEyNDEsMTMgQEAKICAgICBpbnQgaSwgaiwgaywgbnBvc2FyZ3MgPSAwLCBua3dvbmx5YXJncyA9IDA7CiAgICAgaW50IG5wb3NkZWZhdWx0cyA9IDAsIGZvdW5kX2RlZmF1bHQgPSAwOwogICAgIGFzZGxfc2VxICpwb3NhcmdzLCAqcG9zZGVmYXVsdHMsICprd29ubHlhcmdzLCAqa3dkZWZhdWx0czsKLSAgICBpZGVudGlmaWVyIHZhcmFyZyA9IE5VTEwsIGt3YXJnID0gTlVMTDsKKyAgICBhcmdfdHkgdmFyYXJnID0gTlVMTCwga3dhcmcgPSBOVUxMOwogICAgIGFyZ190eSBhcmc7Ci0gICAgZXhwcl90eSB2YXJhcmdhbm5vdGF0aW9uID0gTlVMTCwga3dhcmdhbm5vdGF0aW9uID0gTlVMTDsKICAgICBub2RlICpjaDsKIAogICAgIGlmIChUWVBFKG4pID09IHBhcmFtZXRlcnMpIHsKICAgICAgICAgaWYgKE5DSChuKSA9PSAyKSAvKiAoKSBhcyBhcmd1bWVudCBsaXN0ICovCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgbiA9IENISUxEKG4sIDEpOwogICAgIH0KICAgICBhc3NlcnQoVFlQRShuKSA9PSB0eXBlZGFyZ3NsaXN0IHx8IFRZUEUobikgPT0gdmFyYXJnc2xpc3QpOwpAQCAtMTI3MCwyMiArMTI3OSwyMiBAQAogICAgICAgICBpZiAoVFlQRShjaCkgPT0gRE9VQkxFU1RBUikgYnJlYWs7CiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSB0ZnBkZWYgfHwgVFlQRShjaCkgPT0gdmZwZGVmKSBua3dvbmx5YXJncysrOwogICAgIH0KLSAgICBwb3NhcmdzID0gKG5wb3NhcmdzID8gYXNkbF9zZXFfbmV3KG5wb3NhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgIHBvc2FyZ3MgPSAobnBvc2FyZ3MgPyBfUHlfYXNkbF9zZXFfbmV3KG5wb3NhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICghcG9zYXJncyAmJiBucG9zYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAga3dvbmx5YXJncyA9IChua3dvbmx5YXJncyA/Ci0gICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgIF9QeV9hc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFrd29ubHlhcmdzICYmIG5rd29ubHlhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwb3NkZWZhdWx0cyA9IChucG9zZGVmYXVsdHMgPwotICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobnBvc2RlZmF1bHRzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5wb3NkZWZhdWx0cywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIXBvc2RlZmF1bHRzICYmIG5wb3NkZWZhdWx0cykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogVGhlIGxlbmd0aCBvZiBrd29ubHlhcmdzIGFuZCBrd2RlZmF1bHRzIGFyZSBzYW1lCiAgICAgICAgc2luY2Ugd2Ugc2V0IE5VTEwgYXMgZGVmYXVsdCBmb3Iga2V5d29yZCBvbmx5IGFyZ3VtZW50IHcvbyBkZWZhdWx0CiAgICAgICAgLSB3ZSBoYXZlIHNlcXVlbmNlIGRhdGEgc3RydWN0dXJlLCBidXQgbm8gZGljdGlvbmFyeSAqLwogICAgIGt3ZGVmYXVsdHMgPSAobmt3b25seWFyZ3MgPwotICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICgha3dkZWZhdWx0cyAmJiBua3dvbmx5YXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTEzNDQsMTcgKzEzNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaSA9IHJlczsgLyogcmVzIGhhcyBuZXcgcG9zaXRpb24gdG8gcHJvY2VzcyAqLwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyYXJnID0gYXN0X2Zvcl9hcmcoYywgY2gpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmFyZykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgdmFyYXJnLCBDSElMRChjaCwgMCksIDApKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBvbiB0aGUgdmFyYXJnICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJhcmdhbm5vdGF0aW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmFyZ2Fubm90YXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgTkNIKG4pICYmIChUWVBFKENISUxEKG4sIGkpKSA9PSB0ZnBkZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFRZUEUoQ0hJTEQobiwgaSkpID09IHZmcGRlZikpIHsKQEAgLTEzNjksMTcgKzEzNzEsOSBAQAogICAgICAgICAgICAgY2FzZSBET1VCTEVTVEFSOgogICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQobiwgaSsxKTsgIC8qIHRmcGRlZiAqLwogICAgICAgICAgICAgICAgIGFzc2VydChUWVBFKGNoKSA9PSB0ZnBkZWYgfHwgVFlQRShjaCkgPT0gdmZwZGVmKTsKLSAgICAgICAgICAgICAgICBrd2FyZyA9IE5FV19JREVOVElGSUVSKENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICAgICAga3dhcmcgPSBhc3RfZm9yX2FyZyhjLCBjaCk7CiAgICAgICAgICAgICAgICAgaWYgKCFrd2FyZykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKE5DSChjaCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGFubm90YXRpb24gb24gdGhlIGt3YXJnICovCi0gICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWt3YXJnYW5ub3RhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywga3dhcmcsIENISUxEKGNoLCAwKSwgMCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzg5LDggKzEzODMsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBhcmd1bWVudHMocG9zYXJncywgdmFyYXJnLCB2YXJhcmdhbm5vdGF0aW9uLCBrd29ubHlhcmdzLCBrd2FyZywKLSAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uLCBwb3NkZWZhdWx0cywga3dkZWZhdWx0cywgYy0+Y19hcmVuYSk7CisgICAgcmV0dXJuIGFyZ3VtZW50cyhwb3NhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGt3YXJnLCBwb3NkZWZhdWx0cywgYy0+Y19hcmVuYSk7CiB9CiAKIHN0YXRpYyBleHByX3R5CkBAIC0xNDY5LDcgKzE0NjIsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIGRlY29yYXRvcnMpOwotICAgIGRlY29yYXRvcl9zZXEgPSBhc2RsX3NlcV9uZXcoTkNIKG4pLCBjLT5jX2FyZW5hKTsKKyAgICBkZWNvcmF0b3Jfc2VxID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobiksIGMtPmNfYXJlbmEpOwogICAgIGlmICghZGVjb3JhdG9yX3NlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE1NTUsOCArMTU0OCw3IEBACiAgICAgZXhwcl90eSBleHByZXNzaW9uOwogCiAgICAgaWYgKE5DSChuKSA9PSAzKSB7Ci0gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgYXJncyA9IGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMikpOwpAQCAtMTY2Niw3ICsxNjU4LDcgQEAKICAgICBpZiAobl9mb3JzID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGNvbXBzID0gYXNkbF9zZXFfbmV3KG5fZm9ycywgYy0+Y19hcmVuYSk7CisgICAgY29tcHMgPSBfUHlfYXNkbF9zZXFfbmV3KG5fZm9ycywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFjb21wcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE3MDcsNyArMTY5OSw3IEBACiAgICAgICAgICAgICBpZiAobl9pZnMgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmcyA9IGFzZGxfc2VxX25ldyhuX2lmcywgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZnMgPSBfUHlfYXNkbF9zZXFfbmV3KG5faWZzLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghaWZzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xODE5LDExICsxODExLDIxIEBACiAKICAgICBzd2l0Y2ggKFRZUEUoY2gpKSB7CiAgICAgY2FzZSBOQU1FOiB7Ci0gICAgICAgIC8qIEFsbCBuYW1lcyBzdGFydCBpbiBMb2FkIGNvbnRleHQsIGJ1dCBtYXkgbGF0ZXIgYmUKLSAgICAgICAgICAgY2hhbmdlZC4gKi8KLSAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBORVdfSURFTlRJRklFUihjaCk7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lOworICAgICAgICBjb25zdCBjaGFyICpzID0gU1RSKGNoKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzKTsKKyAgICAgICAgaWYgKGxlbiA+PSA0ICYmIGxlbiA8PSA1KSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiTm9uZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfTm9uZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIlRydWUiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X1RydWUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJGYWxzZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfRmFsc2UsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gbmV3X2lkZW50aWZpZXIocywgYyk7CiAgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBBbGwgbmFtZXMgc3RhcnQgaW4gTG9hZCBjb250ZXh0LCBidXQgbWF5IGxhdGVyIGJlIGNoYW5nZWQuICovCiAgICAgICAgIHJldHVybiBOYW1lKG5hbWUsIExvYWQsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgY2FzZSBTVFJJTkc6IHsKQEAgLTE4NDgsMTIgKzE4NTAsMTUgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGMsIG4sIGJ1Zik7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR5cGUpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0YmFjayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGlmIChieXRlc21vZGUpCiAgICAgICAgICAgICByZXR1cm4gQnl0ZXMoc3RyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGVsc2UKQEAgLTE4NjQsNyArMTg2OSwxMCBAQAogICAgICAgICBpZiAoIXB5bnVtKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBweW51bSk7CisgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHB5bnVtKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihweW51bSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gTnVtKHB5bnVtLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgRUxMSVBTSVM6IC8qIEVsbGlwc2lzICovCkBAIC0xOTEzLDcgKzE5MjEsNyBAQAogICAgICAgICAgICAgLyogaXQncyBhIHNpbXBsZSBzZXQgKi8KICAgICAgICAgICAgIGFzZGxfc2VxICplbHRzOwogICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyAyOyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWVsdHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKGNoKTsgaSArPSAyKSB7CkBAIC0xOTMyLDExICsxOTQwLDExIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBpdCdzIGEgZGljdCAqLwogICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyA0OyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBrZXlzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAga2V5cyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWtleXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjA5MywxNSArMjEwMSwyMiBAQAogICAgICAgICBpZiAoTkNIKG4pID09IDIpCiAgICAgICAgICAgICByZXR1cm4gQ2FsbChsZWZ0X2V4cHIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXhwcl90eSB0bXAgPSBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CisgICAgICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgdG1wLT5saW5lbm8gPSBMSU5FTk8obik7CisgICAgICAgICAgICB0bXAtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gdG1wOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IERPVCApIHsKICAgICAgICAgUHlPYmplY3QgKmF0dHJfaWQgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAxKSk7CiAgICAgICAgIGlmICghYXR0cl9pZCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gQXR0cmlidXRlKGxlZnRfZXhwciwgYXR0cl9pZCwgTG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKENISUxEKG4sIDEpKSwgQ0hJTEQobiwgMSktPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBSRVEoQ0hJTEQobiwgMCksIExTUUIpOwpAQCAtMjEyNCw3ICsyMTM5LDcgQEAKICAgICAgICAgICAgIGV4cHJfdHkgZTsKICAgICAgICAgICAgIGludCBzaW1wbGUgPSAxOwogICAgICAgICAgICAgYXNkbF9zZXEgKnNsaWNlcywgKmVsdHM7Ci0gICAgICAgICAgICBzbGljZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBzbGljZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzbGljZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTkNIKG4pOyBqICs9IDIpIHsKQEAgLTIxNDAsNyArMjE1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBleHRyYWN0IEluZGV4IHZhbHVlcyBhbmQgcHV0IHRoZW0gaW4gYSBUdXBsZSAqLwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWVsdHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXNkbF9zZXFfTEVOKHNsaWNlcyk7ICsraikgewpAQCAtMjIwMiw4ICsyMjE3LDYgQEAKICAgICAgICAgdG1wID0gYXN0X2Zvcl90cmFpbGVyKGMsIGNoLCBlKTsKICAgICAgICAgaWYgKCF0bXApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdG1wLT5saW5lbm8gPSBlLT5saW5lbm87Ci0gICAgICAgIHRtcC0+Y29sX29mZnNldCA9IGUtPmNvbF9vZmZzZXQ7CiAgICAgICAgIGUgPSB0bXA7CiAgICAgfQogICAgIGlmIChUWVBFKENISUxEKG4sIE5DSChuKSAtIDEpKSA9PSBmYWN0b3IpIHsKQEAgLTIyNzUsNyArMjI4OCw3IEBACiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIGdvdG8gbG9vcDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXNlcSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjMxMSwxMCArMjMyNCwxMCBAQAogICAgICAgICAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICBhc2RsX2ludF9zZXEgKm9wczsKICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqY21wczsKLSAgICAgICAgICAgICAgICBvcHMgPSBhc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIG9wcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghb3BzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBjbXBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIGNtcHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghY21wcykgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CkBAIC0yNDQwLDEwICsyNDUzLDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CisgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOworICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOwogICAgIGlmICgha2V5d29yZHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5hcmdzID0gMDsKQEAgLTI2MjAsNyArMjYzMyw3IEBACiAKICAgICAgICAgLyogYSBub3JtYWwgYXNzaWdubWVudCAqLwogICAgICAgICBSRVEoQ0hJTEQobiwgMSksIEVRVUFMKTsKLSAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghdGFyZ2V0cykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0yNjYxLDcgKzI2NzQsNyBAQAogCiAgICAgUkVRKG4sIGV4cHJsaXN0KTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTI4NDYsMTMgKzI4NTksMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgc3RyID0gdW5pOwogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZzdHIpOwotICAgICAgICAgICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU1RBUjoKICAgICAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCIqIik7Ci0gICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFsaWFzKHN0ciwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0yODg1LDcgKzI5MDQsNyBAQAogICAgIGlmIChUWVBFKG4pID09IGltcG9ydF9uYW1lKSB7CiAgICAgICAgIG4gPSBDSElMRChuLCAxKTsKICAgICAgICAgUkVRKG4sIGRvdHRlZF9hc19uYW1lcyk7Ci0gICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWFsaWFzZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjk0Nyw3ICsyOTY2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgYWxpYXNlcyA9IGFzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChuX2NoaWxkcmVuICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI5ODYsNyArMzAwNSw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgZ2xvYmFsX3N0bXQpOwotICAgIHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTMwMDcsNyArMzAyNiw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgbm9ubG9jYWxfc3RtdCk7Ci0gICAgcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDE7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMzA2MCw3ICszMDc5LDcgQEAKICAgICBSRVEobiwgc3VpdGUpOwogCiAgICAgdG90YWwgPSBudW1fc3RtdHMobik7Ci0gICAgc2VxID0gYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IHNpbXBsZV9zdG10KSB7CkBAIC0zMTc5LDcgKzMxOTgsNyBAQAogICAgICAgICBpZiAoaGFzX2Vsc2UpIHsKICAgICAgICAgICAgIGFzZGxfc2VxICpzdWl0ZV9zZXEyOwogCi0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFvcmVsc2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIE5DSChuKSAtIDYpKTsKQEAgLTMyMDMsNyArMzIyMiw3IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5fZWxpZjsgaSsrKSB7CiAgICAgICAgICAgICBpbnQgb2ZmID0gNSArIChuX2VsaWYgLSBpIC0gMSkgKiA0OwotICAgICAgICAgICAgYXNkbF9zZXEgKm5ld29iaiA9IGFzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGFzZGxfc2VxICpuZXdvYmogPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFuZXdvYmopCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIG9mZikpOwpAQCAtMzQxNSw3ICszNDM0LDcgQEAKICAgICBpZiAobl9leGNlcHQgPiAwKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICAvKiBwcm9jZXNzIGV4Y2VwdCBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBhIHRyeSAuLi4gZXhjZXB0ICovCi0gICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzQ2Niw3ICszNDg1LDcgQEAKICAgICBSRVEobiwgd2l0aF9zdG10KTsKIAogICAgIG5faXRlbXMgPSAoTkNIKG4pIC0gMikgLyAyOwotICAgIGl0ZW1zID0gYXNkbF9zZXFfbmV3KG5faXRlbXMsIGMtPmNfYXJlbmEpOworICAgIGl0ZW1zID0gX1B5X2FzZGxfc2VxX25ldyhuX2l0ZW1zLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWl0ZW1zKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0zNjMyLDE4ICszNjUxLDE2IEBACiAgICAgZW5kID0gcyArIHN0cmxlbihzKSAtIDE7CiAgICAgaW1mbGFnID0gKmVuZCA9PSAnaicgfHwgKmVuZCA9PSAnSic7CiAgICAgaWYgKHNbMF0gPT0gJzAnKSB7Ci0gICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKHMsIChjaGFyICoqKSZlbmQsIDApOwogICAgICAgICBpZiAoeCA8IDAgJiYgZXJybm8gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHMsIChjaGFyICoqKTAsIDApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgeCA9IFB5T1Nfc3RydG9sKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSBQeU9TX3N0cnRvbChzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICBpZiAoKmVuZCA9PSAnXDAnKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywgKGNoYXIgKiopMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcocywgKGNoYXIgKiopMCwgMCk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoeCk7CiAgICAgfQogICAgIC8qIFhYWCBIdWdlIGZsb2F0cyBtYXkgc2lsZW50bHkgZmFpbCAqLwpAQCAtMzY2Niw4ICszNjgzLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWNvZGVfdXRmOChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBjaGFyICoqc1B0ciwgY29uc3QgY2hhciAqZW5kKQogewotICAgIGNoYXIgKnMsICp0OwotICAgIHQgPSBzID0gKGNoYXIgKikqc1B0cjsKKyAgICBjb25zdCBjaGFyICpzLCAqdDsKKyAgICB0ID0gcyA9ICpzUHRyOwogICAgIC8qIHdoaWxlIChzIDwgZW5kICYmICpzICE9ICdcXCcpIHMrKzsgKi8gLyogaW5lZmZpY2llbnQgZm9yIHUiLi4iICovCiAgICAgd2hpbGUgKHMgPCBlbmQgJiYgKCpzICYgMHg4MCkpIHMrKzsKICAgICAqc1B0ciA9IHM7CmRpZmYgLS1naXQgYS9QeXRob24vYmx0aW5tb2R1bGUuYyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCmluZGV4IGRmZmRmNDYuLjA1N2FiNDcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jCisrKyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCkBAIC0zMiw4ICszMiwxOSBAQAogaW50IFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAwOwogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKF9fYnVpbHRpbnNfXyk7CitfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CitfUHlfSURFTlRJRklFUihfX3ByZXBhcmVfXyk7CitfUHlfSURFTlRJRklFUihfX3JvdW5kX18pOworX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworX1B5X0lERU5USUZJRVIoZXJyb3JzKTsKIF9QeV9JREVOVElGSUVSKGZpbGVubyk7CiBfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihtZXRhY2xhc3MpOworX1B5X0lERU5USUZJRVIoc29ydCk7CitfUHlfSURFTlRJRklFUihzdGRpbik7CitfUHlfSURFTlRJRklFUihzdGRvdXQpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fX19idWlsZF9jbGFzc19fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC00Miw3ICs1Myw2IEBACiAgICAgUHlPYmplY3QgKmNscyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBuYXJnczsKICAgICBpbnQgaXNjbGFzczsKLSAgICBfUHlfSURFTlRJRklFUihfX3ByZXBhcmVfXyk7CiAKICAgICBhc3NlcnQoYXJncyAhPSBOVUxMKTsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKQEAgLTU3LDYgKzY3LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBmdW5jID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKTsgLyogQmV0dGVyIGJlIGNhbGxhYmxlICovCisgICAgaWYgKCFQeUZ1bmN0aW9uX0NoZWNrKGZ1bmMpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9fY2xhc3NfXzogZnVuYyBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDEpOwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG5hbWUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC03NywxMCArOTIsMTAgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBtZXRhID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWt3LCAibWV0YWNsYXNzIik7CisgICAgICAgIG1ldGEgPSBfUHlEaWN0X0dldEl0ZW1JZChta3csICZQeUlkX21ldGFjbGFzcyk7CiAgICAgICAgIGlmIChtZXRhICE9IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRihtZXRhKTsKLSAgICAgICAgICAgIGlmIChQeURpY3RfRGVsSXRlbVN0cmluZyhta3csICJtZXRhY2xhc3MiKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlEaWN0X0RlbEl0ZW1JZChta3csICZQeUlkX21ldGFjbGFzcykgPCAwKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1ldGEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihta3cpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlcyk7CkBAIC0xNTUsNyArMTcwLDkgQEAKICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGNlbGwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGZ1bmMsIG5zLCBOVUxMKTsKKyAgICBjZWxsID0gUHlFdmFsX0V2YWxDb2RlRXgoUHlGdW5jdGlvbl9HRVRfQ09ERShmdW5jKSwgUHlGdW5jdGlvbl9HRVRfR0xPQkFMUyhmdW5jKSwgbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR0VUX0NMT1NVUkUoZnVuYykpOwogICAgIGlmIChjZWxsICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKm1hcmdzOwogICAgICAgICBtYXJncyA9IFB5VHVwbGVfUGFjaygzLCBuYW1lLCBiYXNlcywgbnMpOwpAQCAtMzMzLDcgKzM1MCwxMSBAQAogUHlEb2NfU1RSVkFSKGJpbl9kb2MsCiAiYmluKG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIik7CitSZXR1cm4gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gYmluKDI3OTYyMDIpXG5cCisgICAnMGIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwJ1xuXAorIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTU3Miw4ICs1OTMsNyBAQAogYnVpbHRpbl9jb21waWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgY2hhciAqc3RyOwotICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYmo7Ci0gICAgY2hhciAqZmlsZW5hbWU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogICAgIGNoYXIgKnN0YXJ0c3RyOwogICAgIGludCBtb2RlID0gLTE7CiAgICAgaW50IGRvbnRfaW5oZXJpdCA9IDA7CkBAIC01ODksMTIgKzYwOSwxMSBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJnN8aWlpOmNvbXBpbGUiLCAga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmZmlsZW5hbWVfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzdHIsICZzdXBwbGllZF9mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9udF9pbmhlcml0LCAmb3B0aW1pemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGZpbGVuYW1lID0gUHlCeXRlc19BU19TVFJJTkcoZmlsZW5hbWVfb2JqKTsKICAgICBjZi5jZl9mbGFncyA9IHN1cHBsaWVkX2ZsYWdzIHwgUHlDRl9TT1VSQ0VfSVNfVVRGODsKIAogICAgIGlmIChzdXBwbGllZF9mbGFncyAmCkBAIC02NTIsMjQgKzY3MSwyNCBAQAogICAgICAgICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCA9IChQeU9iamVjdCopUHlBU1RfQ29tcGlsZUV4KG1vZCwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2YsIG9wdGltaXplLCBhcmVuYSk7CisgICAgICAgICAgICByZXN1bHQgPSAoUHlPYmplY3QqKVB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2YsIG9wdGltaXplLCBhcmVuYSk7CiAgICAgICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICB9CiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICB9CiAKLSAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImNvbXBpbGUiLCAic3RyaW5nLCBieXRlcywgQVNUIG9yIGNvZGUiLCAmY2YpOworICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcoY21kLCAiY29tcGlsZSIsICJzdHJpbmcsIGJ5dGVzIG9yIEFTVCIsICZjZik7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3Moc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZiwgb3B0aW1pemUpOworICAgIHJlc3VsdCA9IFB5X0NvbXBpbGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZiwgb3B0aW1pemUpOwogICAgIGdvdG8gZmluYWxseTsKIAogZXJyb3I6CiAgICAgcmVzdWx0ID0gTlVMTDsKIGZpbmFsbHk6Ci0gICAgUHlfREVDUkVGKGZpbGVuYW1lX29iaik7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03NTAsOCArNzY5LDExIEBACiAgICAgfQogICAgIGlmIChnbG9iYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgZ2xvYmFscyA9IFB5RXZhbF9HZXRHbG9iYWxzKCk7Ci0gICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkKKyAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAobG9jYWxzID09IFB5X05vbmUpCiAgICAgICAgIGxvY2FscyA9IGdsb2JhbHM7CkBAIC03NjMsOSArNzg1LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQorICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18pID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC04MTUsNiArODM3LDggQEAKICAgICAgICAgZ2xvYmFscyA9IFB5RXZhbF9HZXRHbG9iYWxzKCk7CiAgICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2xvYmFscyB8fCAhbG9jYWxzKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC04MzYsOSArODYwLDkgQEAKICAgICAgICAgICAgIGxvY2Fscy0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCisgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXykgPT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEyNTYsNyArMTI4MCwxMSBAQAogUHlEb2NfU1RSVkFSKGhleF9kb2MsCiAiaGV4KG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK1xuXAorICAgPj4+IGhleCgzNzM1OTI4NTU5KVxuXAorICAgJzB4ZGVhZGJlZWYnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTMyMiwyNiArMTM1MCwzNSBAQAogbWluX21heChQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMsIGludCBvcCkKIHsKICAgICBQeU9iamVjdCAqdiwgKml0LCAqaXRlbSwgKnZhbCwgKm1heGl0ZW0sICptYXh2YWwsICprZXlmdW5jPU5VTEw7CisgICAgUHlPYmplY3QgKmVtcHR5dHVwbGUsICpkZWZhdWx0dmFsID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtleSIsICJkZWZhdWx0IiwgTlVMTH07CiAgICAgY29uc3QgY2hhciAqbmFtZSA9IG9wID09IFB5X0xUID8gIm1pbiIgOiAibWF4IjsKKyAgICBjb25zdCBpbnQgcG9zaXRpb25hbCA9IFB5VHVwbGVfU2l6ZShhcmdzKSA+IDE7CisgICAgaW50IHJldDsKIAotICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgPiAxKQorICAgIGlmIChwb3NpdGlvbmFsKQogICAgICAgICB2ID0gYXJnczsKLSAgICBlbHNlIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgKGNoYXIgKiluYW1lLCAxLCAxLCAmdikpCisgICAgZWxzZSBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsIG5hbWUsIDEsIDEsICZ2KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoa3dkcyAhPSBOVUxMICYmIFB5RGljdF9DaGVjayhrd2RzKSAmJiBQeURpY3RfU2l6ZShrd2RzKSkgewotICAgICAgICBrZXlmdW5jID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoa3dkcywgImtleSIpOwotICAgICAgICBpZiAoUHlEaWN0X1NpemUoa3dkcykhPTEgIHx8ICBrZXlmdW5jID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIiVzKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCIsIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKGtleWZ1bmMpOworICAgIGVtcHR5dHVwbGUgPSBQeVR1cGxlX05ldygwKTsKKyAgICBpZiAoZW1wdHl0dXBsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXQgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoZW1wdHl0dXBsZSwga3dkcywgInwkT08iLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlmdW5jLCAmZGVmYXVsdHZhbCk7CisgICAgUHlfREVDUkVGKGVtcHR5dHVwbGUpOworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChwb3NpdGlvbmFsICYmIGRlZmF1bHR2YWwgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBmb3IgJXMoKSB3aXRoIG11bHRpcGxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbmFsIGFyZ3VtZW50cyIsIG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIodik7CiAgICAgaWYgKGl0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMzg1LDE0ICsxNDIyLDE4IEBACiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIGdvdG8gRmFpbF9pdDsKICAgICBpZiAobWF4dmFsID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMoKSBhcmcgaXMgYW4gZW1wdHkgc2VxdWVuY2UiLCBuYW1lKTsKICAgICAgICAgYXNzZXJ0KG1heGl0ZW0gPT0gTlVMTCk7CisgICAgICAgIGlmIChkZWZhdWx0dmFsICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0dmFsKTsKKyAgICAgICAgICAgIG1heGl0ZW0gPSBkZWZhdWx0dmFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKCkgYXJnIGlzIGFuIGVtcHR5IHNlcXVlbmNlIiwgbmFtZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgICAgICBQeV9ERUNSRUYobWF4dmFsKTsKICAgICBQeV9ERUNSRUYoaXQpOwotICAgIFB5X1hERUNSRUYoa2V5ZnVuYyk7CiAgICAgcmV0dXJuIG1heGl0ZW07CiAKIEZhaWxfaXRfaXRlbV9hbmRfdmFsOgpAQCAtMTQwMyw3ICsxNDQ0LDYgQEAKICAgICBQeV9YREVDUkVGKG1heHZhbCk7CiAgICAgUHlfWERFQ1JFRihtYXhpdGVtKTsKICAgICBQeV9ERUNSRUYoaXQpOwotICAgIFB5X1hERUNSRUYoa2V5ZnVuYyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE0NDQsNyArMTQ4NCwxMSBAQAogUHlEb2NfU1RSVkFSKG9jdF9kb2MsCiAib2N0KG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK1xuXAorICAgPj4+IG9jdCgzNDIzOTEpXG5cCisgICAnMG8xMjM0NTY3J1xuXAorIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE1MzAsNyArMTU3NCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnNlcCwgJmVuZCwgJmZpbGUsICZmbHVzaCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChmaWxlID09IE5VTEwgfHwgZmlsZSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZG91dCk7CisgICAgICAgIGlmIChmaWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKICAgICAgICAgLyogc3lzLnN0ZG91dCBtYXkgYmUgTm9uZSB3aGVuIEZJTEUqIHN0ZG91dCBpc24ndCBjb25uZWN0ZWQgKi8KICAgICAgICAgaWYgKGZpbGUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMTU4NCw3ICsxNjMzLDcgQEAKICAgICAgICAgaWYgKGRvX2ZsdXNoID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGVsc2UgaWYgKGRvX2ZsdXNoKSB7Ci0gICAgICAgICAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZpbGUsICJmbHVzaCIsICIiKTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZmlsZSwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGVsc2UKQEAgLTE2MTAsOSArMTY1OSw5IEBACiBidWlsdGluX2lucHV0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcHJvbXB0YXJnID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZmluID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRpbiIpOwotICAgIFB5T2JqZWN0ICpmb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKLSAgICBQeU9iamVjdCAqZmVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmZpbiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRpbik7CisgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIFB5T2JqZWN0ICp0bXA7CiAgICAgbG9uZyBmZDsKICAgICBpbnQgdHR5OwpAQCAtMTY4Myw4ICsxNzMyLDYgQEAKICAgICAgICAgY2hhciAqc3RkaW5fZW5jb2Rpbmdfc3RyLCAqc3RkaW5fZXJyb3JzX3N0cjsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOwotICAgICAgICBfUHlfSURFTlRJRklFUihlcnJvcnMpOwogCiAgICAgICAgIHN0ZGluX2VuY29kaW5nID0gX1B5T2JqZWN0X0dldEF0dHJJZChmaW4sICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgc3RkaW5fZXJyb3JzID0gX1B5T2JqZWN0X0dldEF0dHJJZChmaW4sICZQeUlkX2Vycm9ycyk7CkBAIC0xODEwLDEwICsxODU3LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX3JvdW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpyb3VuZF9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuZGlnaXRzID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im51bWJlciIsICJuZGlnaXRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm51bWJlciwgKnJvdW5kOworICAgIFB5T2JqZWN0ICpudW1iZXIsICpyb3VuZCwgKnJlc3VsdDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86cm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm51bWJlciwgJm5kaWdpdHMpKQpAQCAtMTgyNCwyNCArMTg3MCwyMSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKHJvdW5kX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHJvdW5kX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JvdW5kX18iKTsKLSAgICAgICAgaWYgKHJvdW5kX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcm91bmQgPSBfUHlUeXBlX0xvb2t1cChQeV9UWVBFKG51bWJlciksIHJvdW5kX3N0cik7CisgICAgcm91bmQgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChudW1iZXIsICZQeUlkX19fcm91bmRfXyk7CiAgICAgaWYgKHJvdW5kID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJ0eXBlICUuMTAwcyBkb2Vzbid0IGRlZmluZSBfX3JvdW5kX18gbWV0aG9kIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobnVtYmVyKS0+dHBfbmFtZSk7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fcm91bmRfXyBtZXRob2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobnVtYmVyKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChuZGlnaXRzID09IE5VTEwpCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocm91bmQsICJPIiwgbnVtYmVyKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhyb3VuZCwgTlVMTCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJvdW5kLCAiT08iLCBudW1iZXIsIG5kaWdpdHMpOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHJvdW5kLCBuZGlnaXRzLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYocm91bmQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihyb3VuZF9kb2MsCkBAIC0xODU5LDcgKzE5MDIsNiBAQAogICAgIFB5T2JqZWN0ICpjYWxsYWJsZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Iml0ZXJhYmxlIiwgImtleSIsICJyZXZlcnNlIiwgMH07CiAgICAgaW50IHJldmVyc2U7Ci0gICAgX1B5X0lERU5USUZJRVIoc29ydCk7CiAKICAgICAvKiBhcmdzIDEtMyBzaG91bGQgbWF0Y2ggbGlzdHNvcnQgaW4gT2JqZWN0cy9saXN0b2JqZWN0LmMgKi8KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPaTpzb3J0ZWQiLApAQCAtMTkwNywxNiArMTk0OSwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIGQgPSBQeUV2YWxfR2V0TG9jYWxzKCk7Ci0gICAgICAgIGlmIChkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXJzKCk6IG5vIGxvY2FscyE/Iik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlfSU5DUkVGKGQpOworICAgICAgICBpZiAoZCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5X0lOQ1JFRihkKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKICAgICAgICAgZCA9IF9QeU9iamVjdF9HZXRBdHRySWQodiwgJlB5SWRfX19kaWN0X18pOwogICAgICAgICBpZiAoZCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtMjQxMyw2ICsyNDUwLDEyIEBACiBfUHlCdWlsdGluX0luaXQodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbW9kLCAqZGljdCwgKmRlYnVnOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWx0ZXJfVHlwZSkgPCAwIHx8CisgICAgICAgIFB5VHlwZV9SZWFkeSgmUHlNYXBfVHlwZSkgPCAwIHx8CisgICAgICAgIFB5VHlwZV9SZWFkeSgmUHlaaXBfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIG1vZCA9IFB5TW9kdWxlX0NyZWF0ZSgmYnVpbHRpbnNtb2R1bGUpOwogICAgIGlmIChtb2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9QeXRob24vY2V2YWwuYyBiL1B5dGhvbi9jZXZhbC5jCmluZGV4IDczOTI1ZGMuLjgyZjA2NTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jZXZhbC5jCisrKyBiL1B5dGhvbi9jZXZhbC5jCkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMgdm9pZAogcHBjX2dldGNvdW50ZXIodWludDY0ICp2KQogewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdGJ1LCB0YiwgdGJ1MjsKKyAgICB1bnNpZ25lZCBsb25nIHRidSwgdGIsIHRidTI7CiAKICAgbG9vcDoKICAgICBhc20gdm9sYXRpbGUgKCJtZnRidSAlMCIgOiAiPXIiICh0YnUpICk7CkBAIC0xNDIsOCArMTQyLDYgQEAKIAogI2RlZmluZSBOQU1FX0VSUk9SX01TRyBcCiAgICAgIm5hbWUgJyUuMjAwcycgaXMgbm90IGRlZmluZWQiCi0jZGVmaW5lIEdMT0JBTF9OQU1FX0VSUk9SX01TRyBcCi0gICAgImdsb2JhbCBuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIgogI2RlZmluZSBVTkJPVU5ETE9DQUxfRVJST1JfTVNHIFwKICAgICAibG9jYWwgdmFyaWFibGUgJyUuMjAwcycgcmVmZXJlbmNlZCBiZWZvcmUgYXNzaWdubWVudCIKICNkZWZpbmUgVU5CT1VOREZSRUVfRVJST1JfTVNHIFwKQEAgLTM2NCwyOSArMzYyLDI4IEBACiAgICAgZHJvcF9naWwodHN0YXRlKTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBQeU9TX0FmdGVyRm9yayB0byBlbnN1cmUgdGhhdCBuZXdseQotICAgY3JlYXRlZCBjaGlsZCBwcm9jZXNzZXMgZG9uJ3QgaG9sZCBsb2NrcyByZWZlcnJpbmcgdG8gdGhyZWFkcyB3aGljaAotICAgYXJlIG5vdCBydW5uaW5nIGluIHRoZSBjaGlsZCBwcm9jZXNzLiAgKFRoaXMgY291bGQgYWxzbyBiZSBkb25lIHVzaW5nCi0gICBwdGhyZWFkX2F0Zm9yayBtZWNoYW5pc20sIGF0IGxlYXN0IGZvciB0aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24uKSAqLworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBQeU9TX0FmdGVyRm9yayB0byBkZXN0cm95IGFsbCB0aHJlYWRzIHdoaWNoIGFyZQorICogbm90IHJ1bm5pbmcgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGFuZCBjbGVhciBpbnRlcm5hbCBsb2NrcyB3aGljaCBtaWdodCBiZQorICogaGVsZCBieSB0aG9zZSB0aHJlYWRzLiAoVGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgdXNpbmcgcHRocmVhZF9hdGZvcmsKKyAqIG1lY2hhbmlzbSwgYXQgbGVhc3QgZm9yIHRoZSBwdGhyZWFkcyBpbXBsZW1lbnRhdGlvbi4pICovCiAKIHZvaWQKIFB5RXZhbF9SZUluaXRUaHJlYWRzKHZvaWQpCiB7CiAgICAgX1B5X0lERU5USUZJRVIoX2FmdGVyX2ZvcmspOwogICAgIFB5T2JqZWN0ICp0aHJlYWRpbmcsICpyZXN1bHQ7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeVRocmVhZFN0YXRlICpjdXJyZW50X3RzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAKICAgICBpZiAoIWdpbF9jcmVhdGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICByZWNyZWF0ZV9naWwoKTsKICAgICBwZW5kaW5nX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7Ci0gICAgdGFrZV9naWwodHN0YXRlKTsKKyAgICB0YWtlX2dpbChjdXJyZW50X3RzdGF0ZSk7CiAgICAgbWFpbl90aHJlYWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CiAKICAgICAvKiBVcGRhdGUgdGhlIHRocmVhZGluZyBtb2R1bGUgd2l0aCB0aGUgbmV3IHN0YXRlLgogICAgICAqLwotICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7Ci0gICAgdGhyZWFkaW5nID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcodHN0YXRlLT5pbnRlcnAtPm1vZHVsZXMsCisgICAgdGhyZWFkaW5nID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoY3VycmVudF90c3RhdGUtPmludGVycC0+bW9kdWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZWFkaW5nIik7CiAgICAgaWYgKHRocmVhZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIHRocmVhZGluZyBub3QgaW1wb3J0ZWQgKi8KQEAgLTM5OSw2ICszOTYsOSBAQAogICAgIGVsc2UKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgUHlfREVDUkVGKHRocmVhZGluZyk7CisKKyAgICAvKiBEZXN0cm95IGFsbCB0aHJlYWRzIGV4Y2VwdCB0aGUgY3VycmVudCBvbmUgKi8KKyAgICBfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoY3VycmVudF90c3RhdGUpOwogfQogCiAjZWxzZQpAQCAtNzQyLDcgKzc0Miw2IEBACiBlbnVtIHdoeV9jb2RlIHsKICAgICAgICAgV0hZX05PVCA9ICAgICAgIDB4MDAwMSwgLyogTm8gZXJyb3IgKi8KICAgICAgICAgV0hZX0VYQ0VQVElPTiA9IDB4MDAwMiwgLyogRXhjZXB0aW9uIG9jY3VycmVkICovCi0gICAgICAgIFdIWV9SRVJBSVNFID0gICAweDAwMDQsIC8qIEV4Y2VwdGlvbiByZS1yYWlzZWQgYnkgJ2ZpbmFsbHknICovCiAgICAgICAgIFdIWV9SRVRVUk4gPSAgICAweDAwMDgsIC8qICdyZXR1cm4nIHN0YXRlbWVudCAqLwogICAgICAgICBXSFlfQlJFQUsgPSAgICAgMHgwMDEwLCAvKiAnYnJlYWsnIHN0YXRlbWVudCAqLwogICAgICAgICBXSFlfQ09OVElOVUUgPSAgMHgwMDIwLCAvKiAnY29udGludWUnIHN0YXRlbWVudCAqLwpAQCAtNzUzLDcgKzc1Miw3IEBACiBzdGF0aWMgdm9pZCBzYXZlX2V4Y19zdGF0ZShQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgdm9pZCBzd2FwX2V4Y19zdGF0ZShQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgdm9pZCByZXN0b3JlX2FuZF9jbGVhcl9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwotc3RhdGljIGVudW0gd2h5X2NvZGUgZG9fcmFpc2UoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitzdGF0aWMgaW50IGRvX3JhaXNlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogc3RhdGljIGludCB1bnBhY2tfaXRlcmFibGUoUHlPYmplY3QgKiwgaW50LCBpbnQsIFB5T2JqZWN0ICoqKTsKIAogLyogUmVjb3JkcyB3aGV0aGVyIHRyYWNpbmcgaXMgb24gZm9yIGFueSB0aHJlYWQuICBDb3VudHMgdGhlIG51bWJlciBvZgpAQCAtNzkzLDE4ICs3OTIsMTIgQEAKICNpZmRlZiBEWFBBSVJTCiAgICAgaW50IGxhc3RvcGNvZGUgPSAwOwogI2VuZGlmCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipzdGFja19wb2ludGVyOyAgLyogTmV4dCBmcmVlIHNsb3QgaW4gdmFsdWUgc3RhY2sgKi8KLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpuZXh0X2luc3RyOwotICAgIHJlZ2lzdGVyIGludCBvcGNvZGU7ICAgICAgICAvKiBDdXJyZW50IG9wY29kZSAqLwotICAgIHJlZ2lzdGVyIGludCBvcGFyZzsgICAgICAgICAvKiBDdXJyZW50IG9wY29kZSBhcmd1bWVudCwgaWYgYW55ICovCi0gICAgcmVnaXN0ZXIgZW51bSB3aHlfY29kZSB3aHk7IC8qIFJlYXNvbiBmb3IgYmxvY2sgc3RhY2sgdW53aW5kICovCi0gICAgcmVnaXN0ZXIgaW50IGVycjsgICAgICAgICAgIC8qIEVycm9yIHN0YXR1cyAtLSBub256ZXJvIGlmIGVycm9yICovCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKng7ICAgICAgIC8qIFJlc3VsdCBvYmplY3QgLS0gTlVMTCBpZiBlcnJvciAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OyAgICAgICAvKiBUZW1wb3Jhcnkgb2JqZWN0cyBwb3BwZWQgb2ZmIHN0YWNrICovCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnc7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnU7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnQ7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOworICAgIFB5T2JqZWN0ICoqc3RhY2tfcG9pbnRlcjsgIC8qIE5leHQgZnJlZSBzbG90IGluIHZhbHVlIHN0YWNrICovCisgICAgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cjsKKyAgICBpbnQgb3Bjb2RlOyAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgKi8KKyAgICBpbnQgb3Bhcmc7ICAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgYXJndW1lbnQsIGlmIGFueSAqLworICAgIGVudW0gd2h5X2NvZGUgd2h5OyAvKiBSZWFzb24gZm9yIGJsb2NrIHN0YWNrIHVud2luZCAqLworICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsgICAgICAgICAgICAvKiBSZXR1cm4gdmFsdWUgKi8KICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIFB5Q29kZU9iamVjdCAqY287CkBAIC0xMTg5LDYgKzExODIsNyBAQAogICAgIHN0YWNrX3BvaW50ZXIgPSBmLT5mX3N0YWNrdG9wOwogICAgIGFzc2VydChzdGFja19wb2ludGVyICE9IE5VTEwpOwogICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOyAgICAgICAvKiByZW1haW5zIE5VTEwgdW5sZXNzIHlpZWxkIHN1c3BlbmRzIGZyYW1lICovCisgICAgZi0+Zl9leGVjdXRpbmcgPSAxOwogCiAgICAgaWYgKGNvLT5jb19mbGFncyAmIENPX0dFTkVSQVRPUiAmJiAhdGhyb3dmbGFnKSB7CiAgICAgICAgIGlmIChmLT5mX2V4Y190eXBlICE9IE5VTEwgJiYgZi0+Zl9leGNfdHlwZSAhPSBQeV9Ob25lKSB7CkBAIC0xMjA2LDE0ICsxMjAwLDE2IEBACiAjZW5kaWYKIAogICAgIHdoeSA9IFdIWV9OT1Q7Ci0gICAgZXJyID0gMDsKLSAgICB4ID0gUHlfTm9uZTsgICAgICAgIC8qIE5vdCBhIHJlZmVyZW5jZSwganVzdCBhbnl0aGluZyBub24tTlVMTCAqLwotICAgIHcgPSBOVUxMOwogCi0gICAgaWYgKHRocm93ZmxhZykgeyAvKiBzdXBwb3J0IGZvciBnZW5lcmF0b3IudGhyb3coKSAqLwotICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgIH0KKyAgICBpZiAodGhyb3dmbGFnKSAvKiBzdXBwb3J0IGZvciBnZW5lcmF0b3IudGhyb3coKSAqLworICAgICAgICBnb3RvIGVycm9yOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeUV2YWxfRXZhbEZyYW1lRXgoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgogCiAgICAgZm9yICg7OykgewogI2lmZGVmIFdJVEhfVFNDCkBAIC0xMjM1LDYgKzEyMzEsNyBAQAogI2VuZGlmCiAgICAgICAgIGFzc2VydChzdGFja19wb2ludGVyID49IGYtPmZfdmFsdWVzdGFjayk7IC8qIGVsc2UgdW5kZXJmbG93ICovCiAgICAgICAgIGFzc2VydChTVEFDS19MRVZFTCgpIDw9IGNvLT5jb19zdGFja3NpemUpOyAgLyogZWxzZSBvdmVyZmxvdyAqLworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOwogCiAgICAgICAgIC8qIERvIHBlcmlvZGljIHRoaW5ncy4gIERvaW5nIHRoaXMgZXZlcnkgdGltZSB0aHJvdWdoCiAgICAgICAgICAgIHRoZSBsb29wIHdvdWxkIGFkZCB0b28gbXVjaCBvdmVyaGVhZCwgc28gd2UgZG8gaXQKQEAgLTEyNTAsMTUgKzEyNDcsMTIgQEAKICAgICAgICAgICAgICAgICAgICBhIHRyeTogZmluYWxseTogYmxvY2sgdW5pbnRlcnJ1cHRpYmxlLiAqLwogICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRzdGF0ZS0+dGlja19jb3VudGVyKys7CiAjaWZkZWYgV0lUSF9UU0MKICAgICAgICAgICAgIHRpY2tlZCA9IDE7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmcGVuZGluZ2NhbGxzX3RvX2RvKSkgewotICAgICAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9kcm9wX3JlcXVlc3QpKSB7CkBAIC0xMjc2LDEzICsxMjcwLDEyIEBACiAjZW5kaWYKICAgICAgICAgICAgIC8qIENoZWNrIGZvciBhc3luY2hyb25vdXMgZXhjZXB0aW9ucy4gKi8KICAgICAgICAgICAgIGlmICh0c3RhdGUtPmFzeW5jX2V4YyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHRzdGF0ZS0+YXN5bmNfZXhjOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSB0c3RhdGUtPmFzeW5jX2V4YzsKICAgICAgICAgICAgICAgICB0c3RhdGUtPmFzeW5jX2V4YyA9IE5VTEw7CiAgICAgICAgICAgICAgICAgVU5TSUdOQUxfQVNZTkNfRVhDKCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZSh4KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOworICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoZXhjKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEyOTMsNiArMTI4Niw3IEBACiAKICAgICAgICAgaWYgKF9QeV9UcmFjaW5nUG9zc2libGUgJiYKICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCAmJiAhdHN0YXRlLT50cmFjaW5nKSB7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgLyogc2VlIG1heWJlX2NhbGxfbGluZV90cmFjZQogICAgICAgICAgICAgICAgZm9yIGV4cG9zaXRvcnkgY29tbWVudHMgKi8KICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwpAQCAtMTMwNywxMCArMTMwMSw5IEBACiAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciA9IGYtPmZfc3RhY2t0b3A7CiAgICAgICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBpZiAoZXJyKQogICAgICAgICAgICAgICAgIC8qIHRyYWNlIGZ1bmN0aW9uIHJhaXNlZCBhbiBleGNlcHRpb24gKi8KLSAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBFeHRyYWN0IG9wY29kZSBhbmQgYXJndW1lbnQgKi8KQEAgLTEzNTcsODcgKzEzNTAsOTkgQEAKICAgICAgICAgVEFSR0VUKE5PUCkKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKIAotICAgICAgICBUQVJHRVQoTE9BRF9GQVNUKQotICAgICAgICAgICAgeCA9IEdFVExPQ0FMKG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIFRBUkdFVChMT0FEX0ZBU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IEdFVExPQ0FMKG9wYXJnKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19VbmJvdW5kTG9jYWxFcnJvciwKLSAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAotICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9DT05TVCkKLSAgICAgICAgICAgIHggPSBHRVRJVEVNKGNvbnN0cywgb3BhcmcpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX0NPTlNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBHRVRJVEVNKGNvbnN0cywgb3BhcmcpOworICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOworICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFNUT1JFX0ZBU1QpOwotICAgICAgICBUQVJHRVQoU1RPUkVfRkFTVCkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCB2KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0ZBU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIHZhbHVlKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfVE9QKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICBUQVJHRVQoUE9QX1RPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFJPVF9UV08pCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICBTRVRfVE9QKHcpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh2KTsKKyAgICAgICAgVEFSR0VUKFJPVF9UV08pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2Vjb25kKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQodG9wKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChST1RfVEhSRUUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICB4ID0gVEhJUkQoKTsKLSAgICAgICAgICAgIFNFVF9UT1Aodyk7Ci0gICAgICAgICAgICBTRVRfU0VDT05EKHgpOwotICAgICAgICAgICAgU0VUX1RISVJEKHYpOworICAgICAgICBUQVJHRVQoUk9UX1RIUkVFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdGhpcmQgPSBUSElSRCgpOworICAgICAgICAgICAgU0VUX1RPUChzZWNvbmQpOworICAgICAgICAgICAgU0VUX1NFQ09ORCh0aGlyZCk7CisgICAgICAgICAgICBTRVRfVEhJUkQodG9wKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChEVVBfVE9QKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwotICAgICAgICAgICAgUFVTSCh2KTsKKyAgICAgICAgVEFSR0VUKERVUF9UT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih0b3ApOworICAgICAgICAgICAgUFVTSCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERVUF9UT1BfVFdPKQotICAgICAgICAgICAgeCA9IFRPUCgpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHcpOworICAgICAgICBUQVJHRVQoRFVQX1RPUF9UV08pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih0b3ApOworICAgICAgICAgICAgUHlfSU5DUkVGKHNlY29uZCk7CiAgICAgICAgICAgICBTVEFDS0FESigyKTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBTRVRfU0VDT05EKHcpOworICAgICAgICAgICAgU0VUX1RPUCh0b3ApOworICAgICAgICAgICAgU0VUX1NFQ09ORChzZWNvbmQpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX1BPU0lUSVZFKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1Bvc2l0aXZlKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKFVOQVJZX1BPU0lUSVZFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Qb3NpdGl2ZSh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX05FR0FUSVZFKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX05lZ2F0aXZlKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKFVOQVJZX05FR0FUSVZFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9OZWdhdGl2ZSh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX05PVCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgVEFSR0VUKFVOQVJZX05PVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyID0gUHlPYmplY3RfSXNUcnVlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAoZXJyID09IDApIHsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7CiAgICAgICAgICAgICAgICAgU0VUX1RPUChQeV9UcnVlKTsKQEAgLTE0NTAsNDE2ICsxNDU1LDQ2NCBAQAogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfSU5WRVJUKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0ludmVydCh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9JTlZFUlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0ludmVydCh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9QT1dFUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Qb3dlcih2LCB3LCBQeV9Ob25lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfUE9XRVIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleHAgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUG93ZXIoYmFzZSwgZXhwLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihleHApOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9NVUxUSVBMWSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9NdWx0aXBseSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfTVVMVElQTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9NdWx0aXBseShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9UUlVFX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9UcnVlRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9UUlVFX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfVHJ1ZURpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfRkxPT1JfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0Zsb29yRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9GTE9PUl9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX0Zsb29yRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9NT0RVTE8pCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikpCi0gICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9Gb3JtYXQodiwgdyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1JlbWFpbmRlcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfTU9EVUxPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlVbmljb2RlX0NoZWNrRXhhY3QoZGl2aWRlbmQpID8KKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRm9ybWF0KGRpdmlkZW5kLCBkaXZpc29yKSA6CisgICAgICAgICAgICAgICAgUHlOdW1iZXJfUmVtYWluZGVyKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0FERCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QodykpIHsKLSAgICAgICAgICAgICAgICB4ID0gdW5pY29kZV9jb25jYXRlbmF0ZSh2LCB3LCBmLCBuZXh0X2luc3RyKTsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdW07CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobGVmdCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVja0V4YWN0KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHN1bSA9IHVuaWNvZGVfY29uY2F0ZW5hdGUobGVmdCwgcmlnaHQsIGYsIG5leHRfaW5zdHIpOwogICAgICAgICAgICAgICAgIC8qIHVuaWNvZGVfY29uY2F0ZW5hdGUgY29uc3VtZWQgdGhlIHJlZiB0byB2ICovCi0gICAgICAgICAgICAgICAgZ290byBza2lwX2RlY3JlZl92eDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9BZGQodiwgdyk7CisgICAgICAgICAgICAgICAgc3VtID0gUHlOdW1iZXJfQWRkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChzdW0pOworICAgICAgICAgICAgaWYgKHN1bSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJUUkFDVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpZmYgPSBQeU51bWJlcl9TdWJ0cmFjdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgU0VUX1RPUChkaWZmKTsKKyAgICAgICAgICAgIGlmIChkaWZmID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlNDUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnN1YiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0dldEl0ZW0oY29udGFpbmVyLCBzdWIpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfTFNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTHNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1JTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1JzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9BTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9BbmQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfWE9SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfWG9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX09SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfT3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMSVNUX0FQUEVORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0ID0gUEVFSyhvcGFyZyk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlMaXN0X0FwcGVuZChsaXN0LCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICBza2lwX2RlY3JlZl92eDoKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJUUkFDVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9TdWJ0cmFjdCh2LCB3KTsKKyAgICAgICAgVEFSR0VUKFNFVF9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2V0ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZChzZXQsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlNDUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfUE9XRVIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleHAgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVBvd2VyKGJhc2UsIGV4cCwgUHlfTm9uZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXhwKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTFNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0xzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX01VTFRJUExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1JTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Sc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9UUlVFX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0FORCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9BbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9GTE9PUl9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfWE9SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1hvcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX01PRFVMTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm1vZCA9IFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AobW9kKTsKKyAgICAgICAgICAgIGlmIChtb2QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfT3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMSVNUX0FQUEVORCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBQRUVLKG9wYXJnKTsKLSAgICAgICAgICAgIGVyciA9IFB5TGlzdF9BcHBlbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoU0VUX0FERCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBzdGFja19wb2ludGVyWy1vcGFyZ107Ci0gICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9QT1dFUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlUG93ZXIodiwgdywgUHlfTm9uZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX01VTFRJUExZKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfVFJVRV9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0ZMT09SX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX01PRFVMTykKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVja0V4YWN0KHcpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHVuaWNvZGVfY29uY2F0ZW5hdGUodiwgdywgZiwgbmV4dF9pbnN0cik7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnN1bTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChsZWZ0KSAmJiBQeVVuaWNvZGVfQ2hlY2tFeGFjdChyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzdW0gPSB1bmljb2RlX2NvbmNhdGVuYXRlKGxlZnQsIHJpZ2h0LCBmLCBuZXh0X2luc3RyKTsKICAgICAgICAgICAgICAgICAvKiB1bmljb2RlX2NvbmNhdGVuYXRlIGNvbnN1bWVkIHRoZSByZWYgdG8gdiAqLwotICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9kZWNyZWZfdjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlQWRkKHYsIHcpOworICAgICAgICAgICAgICAgIHN1bSA9IFB5TnVtYmVyX0luUGxhY2VBZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICBza2lwX2RlY3JlZl92OgotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHN1bSk7CisgICAgICAgICAgICBpZiAoc3VtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9TVUJUUkFDVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Qodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9TVUJUUkFDVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpZmYgPSBQeU51bWJlcl9JblBsYWNlU3VidHJhY3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AoZGlmZik7CisgICAgICAgICAgICBpZiAoZGlmZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTFNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VMc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9MU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlTHNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9SU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVJzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1JTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VSc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0FORCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlQW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfQU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZUFuZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfWE9SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VYb3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9YT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlWG9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9PUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlT3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9PUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VPcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX1NVQlNDUikKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIHUgPSBUSElSRCgpOworICAgICAgICBUQVJHRVQoU1RPUkVfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFRISVJEKCk7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgU1RBQ0tBREooLTMpOwogICAgICAgICAgICAgLyogdlt3XSA9IHUgKi8KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0odiwgdywgdSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKGNvbnRhaW5lciwgc3ViLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgdiA9IFNFQ09ORCgpOworICAgICAgICBUQVJHRVQoREVMRVRFX1NVQlNDUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnN1YiA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciA9IFNFQ09ORCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKICAgICAgICAgICAgIC8qIGRlbCB2W3ddICovCi0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKGNvbnRhaW5lciwgc3ViKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUFJJTlRfRVhQUikKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIHcgPSBQeVN5c19HZXRPYmplY3QoImRpc3BsYXlob29rIik7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChQUklOVF9FWFBSKSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihkaXNwbGF5aG9vayk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpob29rID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX2Rpc3BsYXlob29rKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpZiAoaG9vayA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvc3Qgc3lzLmRpc3BsYXlob29rIik7Ci0gICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5VHVwbGVfUGFjaygxLCB2KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIHcgPSBQeUV2YWxfQ2FsbE9iamVjdCh3LCB4KTsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHcpOwotICAgICAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhob29rLCB2YWx1ZSwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogI2lmZGVmIENBU0VfVE9PX0JJRwogICAgICAgICBkZWZhdWx0OiBzd2l0Y2ggKG9wY29kZSkgewogI2VuZGlmCi0gICAgICAgIFRBUkdFVChSQUlTRV9WQVJBUkdTKQotICAgICAgICAgICAgdiA9IHcgPSBOVUxMOworICAgICAgICBUQVJHRVQoUkFJU0VfVkFSQVJHUykgeworICAgICAgICAgICAgUHlPYmplY3QgKmNhdXNlID0gTlVMTCwgKmV4YyA9IE5VTEw7CiAgICAgICAgICAgICBzd2l0Y2ggKG9wYXJnKSB7CiAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgdiA9IFBPUCgpOyAvKiBjYXVzZSAqLworICAgICAgICAgICAgICAgIGNhdXNlID0gUE9QKCk7IC8qIGNhdXNlICovCiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBleGMgKi8KKyAgICAgICAgICAgICAgICBleGMgPSBQT1AoKTsgLyogZXhjICovCiAgICAgICAgICAgICBjYXNlIDA6IC8qIEZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgd2h5ID0gZG9fcmFpc2Uodywgdik7CisgICAgICAgICAgICAgICAgaWYgKGRvX3JhaXNlKGV4YywgY2F1c2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIFJBSVNFX1ZBUkFSR1Mgb3BhcmciKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0xPQ0FMUykKLSAgICAgICAgICAgIHggPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBmLT5mX2xvY2FsczsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodik7Ci0gICAgICAgICAgICBmLT5mX2xvY2FscyA9IHg7Ci0gICAgICAgICAgICBESVNQQVRDSCgpOwotCi0gICAgICAgIFRBUkdFVChSRVRVUk5fVkFMVUUpCisgICAgICAgIFRBUkdFVChSRVRVUk5fVkFMVUUpIHsKICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwogICAgICAgICAgICAgd2h5ID0gV0hZX1JFVFVSTjsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoWUlFTERfRlJPTSkKLSAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgIHggPSBUT1AoKTsKLSAgICAgICAgICAgIC8qIHNlbmQgdSB0byB4ICovCi0gICAgICAgICAgICBpZiAoUHlHZW5fQ2hlY2tFeGFjdCh4KSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeUdlbl9TZW5kKChQeUdlbk9iamVjdCAqKXgsIHUpOworICAgICAgICBUQVJHRVQoWUlFTERfRlJPTSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZWNpZXZlciA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KHJlY2lldmVyKSkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeUdlbl9TZW5kKChQeUdlbk9iamVjdCAqKXJlY2lldmVyLCB2KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoc2VuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHUgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUHlfVFlQRSh4KS0+dHBfaXRlcm5leHQoeCk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUHlfVFlQRShyZWNpZXZlciktPnRwX2l0ZXJuZXh0KHJlY2lldmVyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoeCwgJlB5SWRfc2VuZCwgIk8iLCB1KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChyZWNpZXZlciwgJlB5SWRfc2VuZCwgIk8iLCB2KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBpZiAocmV0dmFsID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsOwotICAgICAgICAgICAgICAgIHggPSBQT1AoKTsgLyogUmVtb3ZlIGl0ZXIgZnJvbSBzdGFjayAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIGYpOwogICAgICAgICAgICAgICAgIGVyciA9IF9QeUdlbl9GZXRjaFN0b3BJdGVyYXRpb25WYWx1ZSgmdmFsKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHggPSB2YWw7Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVjaWV2ZXIpOworICAgICAgICAgICAgICAgIFNFVF9UT1AodmFsKTsKKyAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogeCByZW1haW5zIG9uIHN0YWNrLCByZXR2YWwgaXMgdmFsdWUgdG8gYmUgeWllbGRlZCAqLwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CkBAIC0xODY3LDM5ICsxOTIwLDM4IEBACiAgICAgICAgICAgICAvKiBhbmQgcmVwZWF0Li4uICovCiAgICAgICAgICAgICBmLT5mX2xhc3RpLS07CiAgICAgICAgICAgICBnb3RvIGZhc3RfeWllbGQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoWUlFTERfVkFMVUUpCisgICAgICAgIFRBUkdFVChZSUVMRF9WQUxVRSkgewogICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKICAgICAgICAgICAgIHdoeSA9IFdIWV9ZSUVMRDsKICAgICAgICAgICAgIGdvdG8gZmFzdF95aWVsZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfRVhDRVBUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOwotICAgICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgIT0gRVhDRVBUX0hBTkRMRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInBvcHBlZCBibG9jayBpcyBub3QgYW4gZXhjZXB0IGhhbmRsZXIiKTsKLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKKyAgICAgICAgVEFSR0VUKFBPUF9FWENFUFQpIHsKKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgaWYgKGItPmJfdHlwZSAhPSBFWENFUFRfSEFORExFUikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHBlZCBibG9jayBpcyBub3QgYW4gZXhjZXB0IGhhbmRsZXIiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfQkxPQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7Ci0gICAgICAgICAgICAgICAgVU5XSU5EX0JMT0NLKGIpOwotICAgICAgICAgICAgfQorICAgICAgICBUQVJHRVQoUE9QX0JMT0NLKSB7CisgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKKyAgICAgICAgICAgIFVOV0lORF9CTE9DSyhiKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURUQoRU5EX0ZJTkFMTFkpOwotICAgICAgICBUQVJHRVQoRU5EX0ZJTkFMTFkpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgd2h5ID0gKGVudW0gd2h5X2NvZGUpIFB5TG9uZ19BU19MT05HKHYpOwotICAgICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEKTsKKyAgICAgICAgVEFSR0VUKEVORF9GSU5BTExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhdHVzID0gUE9QKCk7CisgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICB3aHkgPSAoZW51bSB3aHlfY29kZSkgUHlMb25nX0FTX0xPTkcoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCAmJiB3aHkgIT0gV0hZX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVUVVJOIHx8CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9PSBXSFlfQ09OVElOVUUpCiAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwpAQCAtMTkxMiwyNDggKzE5NjQsMjgwIEBACiAgICAgICAgICAgICAgICAgICAgIGFzc2VydChiLT5iX3R5cGUgPT0gRVhDRVBUX0hBTkRMRVIpOwogICAgICAgICAgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9OT1Q7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZSh2LCB3LCB1KTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfUkVSQUlTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGIgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHN0YXR1cywgZXhjLCB0Yik7CisgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodiAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgIidmaW5hbGx5JyBwb3BzIGJhZCBleGNlcHRpb24iKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0JVSUxEX0NMQVNTKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChMT0FEX0JVSUxEX0NMQVNTKSB7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2J1aWxkX2NsYXNzX18pOwogCisgICAgICAgICAgICBQeU9iamVjdCAqYmM7CiAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICB4ID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19idWlsZF9jbGFzc19fKTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYmMgPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2J1aWxkX2NsYXNzX18pOworICAgICAgICAgICAgICAgIGlmIChiYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19OYW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihiYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYnVpbGRfY2xhc3Nfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19idWlsZF9jbGFzc19fKTsKICAgICAgICAgICAgICAgICBpZiAoYnVpbGRfY2xhc3Nfc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIGJ1aWxkX2NsYXNzX3N0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJjID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBidWlsZF9jbGFzc19zdHIpOworICAgICAgICAgICAgICAgIGlmIChiYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19OYW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfY2xhc3NfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChiYyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKCh4ID0gZi0+Zl9sb2NhbHMpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoeCkpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHgsIHcsIHYpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbSh4LCB3LCB2KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpucyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIHdoZW4gc3RvcmluZyAlUiIsIG5hbWUpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIHdoZW4gc3RvcmluZyAlUiIsIHcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobnMpKQorICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG5zLCBuYW1lLCB2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKG5zLCBuYW1lLCB2KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmICgoZXJyID0gUHlPYmplY3RfRGVsSXRlbSh4LCB3KSkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChERUxFVEVfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbnMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGRlbGV0aW5nICVSIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gZGVsZXRpbmcgJVIiLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbShucywgbmFtZSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoVU5QQUNLX1NFUVVFTkNFKTsKLSAgICAgICAgVEFSR0VUKFVOUEFDS19TRVFVRU5DRSkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHYpID09IG9wYXJnKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKippdGVtcyA9IFwKLSAgICAgICAgICAgICAgICAgICAgKChQeVR1cGxlT2JqZWN0ICopdiktPm9iX2l0ZW07CisgICAgICAgIFRBUkdFVChVTlBBQ0tfU0VRVUVOQ0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXEgPSBQT1AoKSwgKml0ZW0sICoqaXRlbXM7CisgICAgICAgICAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KHNlcSkgJiYKKyAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHNlcSkgPT0gb3BhcmcpIHsKKyAgICAgICAgICAgICAgICBpdGVtcyA9ICgoUHlUdXBsZU9iamVjdCAqKXNlcSktPm9iX2l0ZW07CiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wYXJnLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IGl0ZW1zW29wYXJnXTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQVVNIKHcpOworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbb3BhcmddOworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIFBVU0goaXRlbSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUodikgPT0gb3BhcmcpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqKml0ZW1zID0gXAotICAgICAgICAgICAgICAgICAgICAoKFB5TGlzdE9iamVjdCAqKXYpLT5vYl9pdGVtOworICAgICAgICAgICAgfSBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdChzZXEpICYmCisgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShzZXEpID09IG9wYXJnKSB7CisgICAgICAgICAgICAgICAgaXRlbXMgPSAoKFB5TGlzdE9iamVjdCAqKXNlcSktPm9iX2l0ZW07CiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wYXJnLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IGl0ZW1zW29wYXJnXTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQVVNIKHcpOworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbb3BhcmddOworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIFBVU0goaXRlbSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh1bnBhY2tfaXRlcmFibGUodiwgb3BhcmcsIC0xLAorICAgICAgICAgICAgfSBlbHNlIGlmICh1bnBhY2tfaXRlcmFibGUoc2VxLCBvcGFyZywgLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICsgb3BhcmcpKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREoob3BhcmcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiB1bnBhY2tfaXRlcmFibGUoKSByYWlzZWQgYW4gZXhjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5QQUNLX0VYKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChVTlBBQ0tfRVgpIHsKICAgICAgICAgICAgIGludCB0b3RhbGFyZ3MgPSAxICsgKG9wYXJnICYgMHhGRikgKyAob3BhcmcgPj4gOCk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2VxID0gUE9QKCk7CiAKLSAgICAgICAgICAgIGlmICh1bnBhY2tfaXRlcmFibGUodiwgb3BhcmcgJiAweEZGLCBvcGFyZyA+PiA4LAorICAgICAgICAgICAgaWYgKHVucGFja19pdGVyYWJsZShzZXEsIG9wYXJnICYgMHhGRiwgb3BhcmcgPj4gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArIHRvdGFsYXJncykpIHsKICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICs9IHRvdGFsYXJnczsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB1ID0gU0VDT05EKCk7CisgICAgICAgIFRBUkdFVChTVE9SRV9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKHYsIHcsIHUpOyAvKiB2LncgPSB1ICovCisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKG93bmVyLCBuYW1lLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKHYsIHcsIChQeU9iamVjdCAqKU5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWwgdi53ICovCisgICAgICAgIFRBUkdFVChERUxFVEVfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKG93bmVyLCBuYW1lLCAoUHlPYmplY3QgKilOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoU1RPUkVfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShmLT5mX2dsb2JhbHMsIHcsIHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKERFTEVURV9HTE9CQUwpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKChlcnIgPSBQeURpY3RfRGVsSXRlbShmLT5mX2dsb2JhbHMsIHcpKSAhPSAwKQorICAgICAgICBUQVJHRVQoREVMRVRFX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X0RlbEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAotICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgodiA9IGYtPmZfbG9jYWxzKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gbG9hZGluZyAlUiIsIHcpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICAgICAgUHlfWElOQ1JFRih4KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gbG9hZGluZyAlUiIsIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobG9jYWxzKSkgeworICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMICYmIF9QeUVycl9PQ0NVUlJFRCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX0tleUVycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCAmJiBfUHlFcnJfT0NDVVJSRUQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICAgICAgUHlfWElOQ1JFRih4KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHYpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgIFRBUkdFVChMT0FEX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2dsb2JhbHMpCiAgICAgICAgICAgICAgICAgJiYgUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICB4ID0gX1B5RGljdF9Mb2FkR2xvYmFsKChQeURpY3RPYmplY3QgKilmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgdiA9IF9QeURpY3RfTG9hZEdsb2JhbCgoUHlEaWN0T2JqZWN0ICopZi0+Zl9nbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5RGljdE9iamVjdCAqKWYtPmZfYnVpbHRpbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghX1B5RXJyX09DQ1VSUkVEKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8qIFNsb3ctcGF0aCBpZiBnbG9iYWxzIG9yIGJ1aWx0aW5zIGlzIG5vdCBhIGRpY3QgKi8KLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSCh2KTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0ZBU1QpCi0gICAgICAgICAgICB4ID0gR0VUTE9DQUwob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoREVMRVRFX0ZBU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gR0VUTE9DQUwob3BhcmcpOworICAgICAgICAgICAgaWYgKHYgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCBOVUxMKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQpAQCAtMjE2MiwyNTIgKzIyNDYsMzEyIEBACiAgICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKICAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykKICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9ERVJFRikKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBpZiAoUHlDZWxsX0dFVCh4KSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlDZWxsX1NldCh4LCBOVUxMKTsKKyAgICAgICAgVEFSR0VUKERFTEVURV9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBpZiAoUHlDZWxsX0dFVChjZWxsKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlDZWxsX1NldChjZWxsLCBOVUxMKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gLTE7CiAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0NMT1NVUkUpCi0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9ERVJFRikKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICB3ID0gUHlDZWxsX0dldCh4KTsKLSAgICAgICAgICAgIGlmICh3ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQVVNIKHcpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNUT1JFX0RFUkVGKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIFB5Q2VsbF9TZXQoeCwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChMT0FEX0NMT1NVUkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgUHlfSU5DUkVGKGNlbGwpOworICAgICAgICAgICAgUFVTSChjZWxsKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlVJTERfVFVQTEUpCi0gICAgICAgICAgICB4ID0gUHlUdXBsZV9OZXcob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh4LCBvcGFyZywgdyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfQ0xBU1NERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZSwgKmxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgUHlfc3NpemVfdCBpZHg7CisgICAgICAgICAgICBhc3NlcnQobG9jYWxzKTsKKyAgICAgICAgICAgIGFzc2VydChvcGFyZyA+PSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykpOworICAgICAgICAgICAgaWR4ID0gb3BhcmcgLSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CisgICAgICAgICAgICBhc3NlcnQoaWR4ID49IDAgJiYgaWR4IDwgUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpKTsKKyAgICAgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb19mcmVldmFycywgaWR4KTsKKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChsb2NhbHMpKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKEJVSUxEX0xJU1QpCi0gICAgICAgICAgICB4ID0gIFB5TGlzdF9OZXcob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHgsIG9wYXJnLCB3KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChCVUlMRF9TRVQpCi0gICAgICAgICAgICB4ID0gUHlTZXRfTmV3KE5VTEwpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHgsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeUNlbGxfR0VUKGNlbGwpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9NQVApCi0gICAgICAgICAgICB4ID0gX1B5RGljdF9OZXdQcmVzaXplZCgoUHlfc3NpemVfdClvcGFyZyk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTVE9SRV9NQVApCi0gICAgICAgICAgICB3ID0gVE9QKCk7ICAgICAvKiBrZXkgKi8KLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsgIC8qIHZhbHVlICovCi0gICAgICAgICAgICB2ID0gVEhJUkQoKTsgICAvKiBkaWN0ICovCi0gICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICBhc3NlcnQgKFB5RGljdF9DaGVja0V4YWN0KHYpKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHYsIHcsIHUpOyAgLyogdlt3XSA9IHUgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChNQVBfQUREKQotICAgICAgICAgICAgdyA9IFRPUCgpOyAgICAgLyoga2V5ICovCi0gICAgICAgICAgICB1ID0gU0VDT05EKCk7ICAvKiB2YWx1ZSAqLwotICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgdiA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsgIC8qIGRpY3QgKi8KLSAgICAgICAgICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrRXhhY3QodikpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0odiwgdywgdSk7ICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUNlbGxfR0VUKGNlbGwpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0QXR0cih2LCB3KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeUNlbGxfU2V0KGNlbGwsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ09NUEFSRV9PUCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBjbXBfb3V0Y29tZShvcGFyZywgdiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgYnJlYWs7CisgICAgICAgIFRBUkdFVChCVUlMRF9UVVBMRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5VHVwbGVfTmV3KG9wYXJnKTsKKyAgICAgICAgICAgIGlmICh0dXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIG9wYXJnLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0godHVwKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfTElTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QgPSAgUHlMaXN0X05ldyhvcGFyZyk7CisgICAgICAgICAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgb3BhcmcsIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChsaXN0KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfU0VUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2V0ID0gUHlTZXRfTmV3KE5VTEwpOworICAgICAgICAgICAgaW50IGVyciA9IDA7CisgICAgICAgICAgICBpZiAoc2V0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHNldCwgaXRlbSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNldCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0goc2V0KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfTUFQKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwID0gX1B5RGljdF9OZXdQcmVzaXplZCgoUHlfc3NpemVfdClvcGFyZyk7CisgICAgICAgICAgICBpZiAobWFwID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBVU0gobWFwKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoU1RPUkVfTUFQKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXAgPSBUSElSRCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChtYXApKTsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTUFQX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKKyAgICAgICAgICAgIG1hcCA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsgIC8qIGRpY3QgKi8KKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChtYXApKTsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7ICAvKiB2W3ddID0gdSAqLworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfR2V0QXR0cihvd25lciwgbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKENPTVBBUkVfT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBjbXBfb3V0Y29tZShvcGFyZywgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgUFJFRElDVChQT1BfSlVNUF9JRl9GQUxTRSk7CiAgICAgICAgICAgICBQUkVESUNUKFBPUF9KVU1QX0lGX1RSVUUpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKLQotICAgICAgICBUQVJHRVQoSU1QT1JUX05BTUUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOwotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHggPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2ltcG9ydF9fKTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2ltcG9ydF9fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19Bc0xvbmcodSkgIT0gLTEgfHwgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICB3ID0gUHlUdXBsZV9QYWNrKDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdyA9IFB5VHVwbGVfUGFjayg0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgdiA9IHg7Ci0gICAgICAgICAgICB4ID0gUHlFdmFsX0NhbGxPYmplY3Qodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElNUE9SVF9TVEFSKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoZik7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgPT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoSU1QT1JUX05BTUUpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19faW1wb3J0X18pOworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20sICpsZXZlbCwgKmFyZ3MsICpyZXM7CisgICAgICAgICAgICBpZiAoZnVuYyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19pbXBvcnRfXyBub3QgZm91bmQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOworICAgICAgICAgICAgZnJvbSA9IFBPUCgpOworICAgICAgICAgICAgbGV2ZWwgPSBUT1AoKTsKKyAgICAgICAgICAgIGlmIChQeUxvbmdfQXNMb25nKGxldmVsKSAhPSAtMSB8fCBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfUGFjayg0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZXZlbCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJvbSk7CisgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOworICAgICAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgYXJncyk7CisgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoSU1QT1JUX1NUQVIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9tID0gUE9QKCksICpsb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGYpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyBmb3VuZCBkdXJpbmcgJ2ltcG9ydCAqJyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICBlcnIgPSBpbXBvcnRfYWxsX2Zyb20oeCwgdik7CisgICAgICAgICAgICBlcnIgPSBpbXBvcnRfYWxsX2Zyb20obG9jYWxzLCBmcm9tKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKICAgICAgICAgICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGYsIDApOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJvbSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU1QT1JUX0ZST00pCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFRPUCgpOworICAgICAgICBUQVJHRVQoSU1QT1JUX0ZST00pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20gPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB4ID0gaW1wb3J0X2Zyb20odiwgdyk7CisgICAgICAgICAgICByZXMgPSBpbXBvcnRfZnJvbShmcm9tLCBuYW1lKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9GT1JXQVJEKQorICAgICAgICBUQVJHRVQoSlVNUF9GT1JXQVJEKSB7CiAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX0ZBTFNFKTsKLSAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX0ZBTFNFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX0ZBTFNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKQogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX1RSVUUpOwotICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfVFJVRSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfVFJVRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwpAQCAtMjQxNSw1OCArMjU1OSw2MyBAQAogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfSUZfRkFMU0VfT1JfUE9QKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgeworICAgICAgICBUQVJHRVQoSlVNUF9JRl9GQUxTRV9PUl9QT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgewogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0lGX1RSVUVfT1JfUE9QKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgVEFSR0VUKEpVTVBfSUZfVFJVRV9PUl9QT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgIFRBUkdFVChKVU1QX0FCU09MVVRFKQorICAgICAgICBUQVJHRVQoSlVNUF9BQlNPTFVURSkgewogICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICNpZiBGQVNUX0xPT1BTCiAgICAgICAgICAgICAvKiBFbmFibGluZyB0aGlzIHBhdGggc3BlZWRzLXVwIGFsbCB3aGlsZSBhbmQgZm9yLWxvb3BzIGJ5IGJ5cGFzc2luZwpAQCAtMjQ4MCw2MCArMjYyOSw2MiBAQAogI2Vsc2UKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAjZW5kaWYKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChHRVRfSVRFUikKKyAgICAgICAgVEFSR0VUKEdFVF9JVEVSKSB7CiAgICAgICAgICAgICAvKiBiZWZvcmU6IFtvYmpdOyBhZnRlciBbZ2V0aXRlcihvYmopXSAqLwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZXIodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEZPUl9JVEVSKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlcmFibGUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcmFibGUpOworICAgICAgICAgICAgU0VUX1RPUChpdGVyKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoRk9SX0lURVIpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhGT1JfSVRFUik7Ci0gICAgICAgIFRBUkdFVChGT1JfSVRFUikKKyAgICAgICAgVEFSR0VUKEZPUl9JVEVSKSB7CiAgICAgICAgICAgICAvKiBiZWZvcmU6IFtpdGVyXTsgYWZ0ZXI6IFtpdGVyLCBpdGVyKCldICpvciogW10gKi8KLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSAoKnYtPm9iX3R5cGUtPnRwX2l0ZXJuZXh0KSh2KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuZXh0ID0gKCppdGVyLT5vYl90eXBlLT50cF9pdGVybmV4dCkoaXRlcik7CisgICAgICAgICAgICBpZiAobmV4dCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUFVTSChuZXh0KTsKICAgICAgICAgICAgICAgICBQUkVESUNUKFNUT1JFX0ZBU1QpOwogICAgICAgICAgICAgICAgIFBSRURJQ1QoVU5QQUNLX1NFUVVFTkNFKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1N0b3BJdGVyYXRpb24pKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIGYpOwogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBpdGVyYXRvciBlbmRlZCBub3JtYWxseSAqLwotICAgICAgICAgICAgeCA9IHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJSRUFLX0xPT1ApCisgICAgICAgIFRBUkdFVChCUkVBS19MT09QKSB7CiAgICAgICAgICAgICB3aHkgPSBXSFlfQlJFQUs7CiAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKENPTlRJTlVFX0xPT1ApCisgICAgICAgIFRBUkdFVChDT05USU5VRV9MT09QKSB7CiAgICAgICAgICAgICByZXR2YWwgPSBQeUxvbmdfRnJvbUxvbmcob3BhcmcpOwotICAgICAgICAgICAgaWYgKCFyZXR2YWwpIHsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgd2h5ID0gV0hZX0NPTlRJTlVFOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoU0VUVVBfTE9PUCwgX3NldHVwX2ZpbmFsbHkpCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoU0VUVVBfRVhDRVBULCBfc2V0dXBfZmluYWxseSkKICAgICAgICAgVEFSR0VUKFNFVFVQX0ZJTkFMTFkpCi0gICAgICAgIF9zZXR1cF9maW5hbGx5OgorICAgICAgICBfc2V0dXBfZmluYWxseTogewogICAgICAgICAgICAgLyogTk9URTogSWYgeW91IGFkZCBhbnkgbmV3IGJsb2NrLXNldHVwIG9wY29kZXMgdGhhdAogICAgICAgICAgICAgICAgYXJlIG5vdCB0cnkvZXhjZXB0L2ZpbmFsbHkgaGFuZGxlcnMsIHlvdSBtYXkgbmVlZAogICAgICAgICAgICAgICAgdG8gdXBkYXRlIHRoZSBQeUdlbl9OZWVkc0ZpbmFsaXppbmcoKSBmdW5jdGlvbi4KQEAgLTI1NDIsMzcgKzI2OTMsMzUgQEAKICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBvcGNvZGUsIElOU1RSX09GRlNFVCgpICsgb3BhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNFVFVQX1dJVEgpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFNFVFVQX1dJVEgpIHsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZXhpdF9fKTsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZW50ZXJfXyk7Ci0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gc3BlY2lhbF9sb29rdXAodywgJlB5SWRfX19leGl0X18pOwotICAgICAgICAgICAgaWYgKCF4KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIHUgPSBzcGVjaWFsX2xvb2t1cCh3LCAmUHlJZF9fX2VudGVyX18pOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKCF1KSB7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyh1LCBOVUxMKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICgheCkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptZ3IgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGl0ID0gc3BlY2lhbF9sb29rdXAobWdyLCAmUHlJZF9fX2V4aXRfXyksICplbnRlcjsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpZiAoZXhpdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBTRVRfVE9QKGV4aXQpOworICAgICAgICAgICAgZW50ZXIgPSBzcGVjaWFsX2xvb2t1cChtZ3IsICZQeUlkX19fZW50ZXJfXyk7CisgICAgICAgICAgICBQeV9ERUNSRUYobWdyKTsKKyAgICAgICAgICAgIGlmIChlbnRlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGVudGVyLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRlcik7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBmaW5hbGx5IGJsb2NrIGJlZm9yZSBwdXNoaW5nIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgIG9mIF9fZW50ZXJfXyBvbiB0aGUgc3RhY2suICovCiAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrU2V0dXAoZiwgU0VUVVBfRklOQUxMWSwgSU5TVFJfT0ZGU0VUKCkgKyBvcGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19MRVZFTCgpKTsKIAotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoV0lUSF9DTEVBTlVQKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChXSVRIX0NMRUFOVVApIHsKICAgICAgICAgICAgIC8qIEF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFyZSAxLTYgdmFsdWVzIGluZGljYXRpbmcKICAgICAgICAgICAgICAgIGhvdy93aHkgd2UgZW50ZXJlZCB0aGUgZmluYWxseSBjbGF1c2U6CiAgICAgICAgICAgICAgICAtIFRPUCA9IE5vbmUKQEAgLTI1OTksNDIgKzI3NDgsNDIgQEAKICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIFB5T2JqZWN0ICpleGl0X2Z1bmM7Ci0gICAgICAgICAgICB1ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhjID0gVE9QKCksICp2YWwgPSBQeV9Ob25lLCAqdGIgPSBQeV9Ob25lLCAqcmVzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChleGMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgICh2b2lkKVBPUCgpOwogICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFRPUCgpOwotICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7Ci0gICAgICAgICAgICAgICAgdiA9IHcgPSBQeV9Ob25lOworICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayh1KSkgewotICAgICAgICAgICAgICAgICh2b2lkKVBPUCgpOwotICAgICAgICAgICAgICAgIHN3aXRjaChQeUxvbmdfQXNMb25nKHUpKSB7CisgICAgICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soZXhjKSkgeworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKFB5TG9uZ19Bc0xvbmcoZXhjKSkgewogICAgICAgICAgICAgICAgIGNhc2UgV0hZX1JFVFVSTjoKICAgICAgICAgICAgICAgICBjYXNlIFdIWV9DT05USU5VRToKICAgICAgICAgICAgICAgICAgICAgLyogUmV0dmFsIGluIFRPUC4gKi8KICAgICAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gU0VDT05EKCk7CiAgICAgICAgICAgICAgICAgICAgIFNFVF9TRUNPTkQoVE9QKCkpOwotICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOworICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKGV4Yyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFRPUCgpOwotICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOworICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKGV4Yyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB1ID0gdiA9IHcgPSBQeV9Ob25lOworICAgICAgICAgICAgICAgIGV4YyA9IFB5X05vbmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqdHAsICpleGMsICp0YjsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdHAyLCAqZXhjMiwgKnRiMjsKICAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpibG9jazsKLSAgICAgICAgICAgICAgICB2ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICAgICAgdyA9IFRISVJEKCk7Ci0gICAgICAgICAgICAgICAgdHAgPSBGT1VSVEgoKTsKLSAgICAgICAgICAgICAgICBleGMgPSBQRUVLKDUpOwotICAgICAgICAgICAgICAgIHRiID0gUEVFSyg2KTsKKyAgICAgICAgICAgICAgICB2YWwgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgICAgICB0YiA9IFRISVJEKCk7CisgICAgICAgICAgICAgICAgdHAyID0gRk9VUlRIKCk7CisgICAgICAgICAgICAgICAgZXhjMiA9IFBFRUsoNSk7CisgICAgICAgICAgICAgICAgdGIyID0gUEVFSyg2KTsKICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBQRUVLKDcpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg3LCB0Yik7Ci0gICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDYsIGV4Yyk7Ci0gICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDUsIHRwKTsKKyAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNywgdGIyKTsKKyAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNiwgZXhjMik7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDUsIHRwMik7CiAgICAgICAgICAgICAgICAgLyogVU5XSU5EX0VYQ0VQVF9IQU5ETEVSIHdpbGwgcG9wIHRoaXMgb2ZmLiAqLwogICAgICAgICAgICAgICAgIFNFVF9GT1VSVEgoTlVMTCk7CiAgICAgICAgICAgICAgICAgLyogV2UganVzdCBzaGlmdGVkIHRoZSBzdGFjayBkb3duLCBzbyB3ZSBoYXZlCkBAIC0yNjQ1LDU2ICsyNzk0LDUzIEBACiAgICAgICAgICAgICAgICAgYmxvY2stPmJfbGV2ZWwtLTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIFhYWCBOb3QgdGhlIGZhc3Rlc3Qgd2F5IHRvIGNhbGwgaXQuLi4gKi8KLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGV4aXRfZnVuYywgdSwgdiwgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhleGl0X2Z1bmMsIGV4YywgdmFsLCB0YiwgTlVMTCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZXhpdF9mdW5jKTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7IC8qIEdvIHRvIGVycm9yIGV4aXQgKi8KKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgICAgICBpZiAodSAhPSBQeV9Ob25lKQotICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh4KTsKKyAgICAgICAgICAgIGlmIChleGMgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAKICAgICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBHbyB0byBlcnJvciBleGl0ICovCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgICAgIC8qIFRoZXJlIHdhcyBhbiBleGNlcHRpb24gYW5kIGEgVHJ1ZSByZXR1cm4gKi8KICAgICAgICAgICAgICAgICBQVVNIKFB5TG9uZ19Gcm9tTG9uZygobG9uZykgV0hZX1NJTEVOQ0VEKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQUkVESUNUKEVORF9GSU5BTExZKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqKnNwOworICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTikgeworICAgICAgICAgICAgUHlPYmplY3QgKipzcCwgKnJlczsKICAgICAgICAgICAgIFBDQUxMKFBDQUxMX0FMTCk7CiAgICAgICAgICAgICBzcCA9IHN0YWNrX3BvaW50ZXI7CiAjaWZkZWYgV0lUSF9UU0MKLSAgICAgICAgICAgIHggPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcsICZpbnRyMCwgJmludHIxKTsKKyAgICAgICAgICAgIHJlcyA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZywgJmludHIwLCAmaW50cjEpOwogI2Vsc2UKLSAgICAgICAgICAgIHggPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcpOworICAgICAgICAgICAgcmVzID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnKTsKICNlbmRpZgogICAgICAgICAgICAgc3RhY2tfcG9pbnRlciA9IHNwOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChDQUxMX0ZVTkNUSU9OX1ZBUiwgX2NhbGxfZnVuY3Rpb25fdmFyX2t3KQogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKENBTExfRlVOQ1RJT05fS1csIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdykKICAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT05fVkFSX0tXKQotICAgICAgICBfY2FsbF9mdW5jdGlvbl92YXJfa3c6Ci0gICAgICAgIHsKKyAgICAgICAgX2NhbGxfZnVuY3Rpb25fdmFyX2t3OiB7CiAgICAgICAgICAgICBpbnQgbmEgPSBvcGFyZyAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgbmsgPSAob3Bhcmc+PjgpICYgMHhmZjsKICAgICAgICAgICAgIGludCBmbGFncyA9IChvcGNvZGUgLSBDQUxMX0ZVTkNUSU9OKSAmIDM7CiAgICAgICAgICAgICBpbnQgbiA9IG5hICsgMiAqIG5rOwotICAgICAgICAgICAgUHlPYmplY3QgKipwZnVuYywgKmZ1bmMsICoqc3A7CisgICAgICAgICAgICBQeU9iamVjdCAqKnBmdW5jLCAqZnVuYywgKipzcCwgKnJlczsKICAgICAgICAgICAgIFBDQUxMKFBDQUxMX0FMTCk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBDQUxMX0ZMQUdfVkFSKQogICAgICAgICAgICAgICAgIG4rKzsKQEAgLTI3MTcsMTM3ICsyODYzLDE1NiBAQAogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICAgICAgICAgIHNwID0gc3RhY2tfcG9pbnRlcjsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIHggPSBleHRfZG9fY2FsbChmdW5jLCAmc3AsIGZsYWdzLCBuYSwgbmspOworICAgICAgICAgICAgcmVzID0gZXh0X2RvX2NhbGwoZnVuYywgJnNwLCBmbGFncywgbmEsIG5rKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBzcDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKIAogICAgICAgICAgICAgd2hpbGUgKHN0YWNrX3BvaW50ZXIgPiBwZnVuYykgewotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm8gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKE1BS0VfQ0xPU1VSRSwgX21ha2VfZnVuY3Rpb24pCiAgICAgICAgIFRBUkdFVChNQUtFX0ZVTkNUSU9OKQotICAgICAgICBfbWFrZV9mdW5jdGlvbjoKLSAgICAgICAgeworICAgICAgICBfbWFrZV9mdW5jdGlvbjogewogICAgICAgICAgICAgaW50IHBvc2RlZmF1bHRzID0gb3BhcmcgJiAweGZmOwogICAgICAgICAgICAgaW50IGt3ZGVmYXVsdHMgPSAob3Bhcmc+PjgpICYgMHhmZjsKICAgICAgICAgICAgIGludCBudW1fYW5ub3RhdGlvbnMgPSAob3BhcmcgPj4gMTYpICYgMHg3ZmZmOwogCi0gICAgICAgICAgICB3ID0gUE9QKCk7IC8qIHF1YWxuYW1lICovCi0gICAgICAgICAgICB2ID0gUE9QKCk7IC8qIGNvZGUgb2JqZWN0ICovCi0gICAgICAgICAgICB4ID0gUHlGdW5jdGlvbl9OZXdXaXRoUXVhbE5hbWUodiwgZi0+Zl9nbG9iYWxzLCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdWFsbmFtZSA9IFBPUCgpOyAvKiBxdWFsbmFtZSAqLworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGUgPSBQT1AoKTsgLyogY29kZSBvYmplY3QgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlGdW5jdGlvbl9OZXdXaXRoUXVhbE5hbWUoY29kZSwgZi0+Zl9nbG9iYWxzLCBxdWFsbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29kZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocXVhbG5hbWUpOwogCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIG9wY29kZSA9PSBNQUtFX0NMT1NVUkUpIHsKLSAgICAgICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0Q2xvc3VyZSh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gTUFLRV9DTE9TVVJFKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNsb3N1cmUgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRDbG9zdXJlKGZ1bmMsIGNsb3N1cmUpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcyBieXRlY29kZSBpcyBjb3JydXB0LiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjbG9zdXJlKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjbG9zdXJlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBudW1fYW5ub3RhdGlvbnMgPiAwKSB7CisgICAgICAgICAgICBpZiAobnVtX2Fubm90YXRpb25zID4gMCkgewogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbmFtZV9peDsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7IC8qIG5hbWVzIG9mIGFyZ3Mgd2l0aCBhbm5vdGF0aW9ucyAqLwotICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZXMgPSBQT1AoKTsgLyogbmFtZXMgb2YgYXJncyB3aXRoIGFubm90YXRpb25zICovCisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFubnMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICAgICAgaWYgKGFubnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5hbWVfaXggPSBQeVR1cGxlX1NpemUodSk7CisgICAgICAgICAgICAgICAgbmFtZV9peCA9IFB5VHVwbGVfU2l6ZShuYW1lcyk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG51bV9hbm5vdGF0aW9ucyA9PSBuYW1lX2l4KzEpOwogICAgICAgICAgICAgICAgIHdoaWxlIChuYW1lX2l4ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlOworICAgICAgICAgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgICAgICAgICAtLW5hbWVfaXg7Ci0gICAgICAgICAgICAgICAgICAgIHQgPSBQeVR1cGxlX0dFVF9JVEVNKHUsIG5hbWVfaXgpOwotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFhYWChubm9yd2l0eik6IGNoZWNrIGZvciBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0odiwgdCwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0obmFtZXMsIG5hbWVfaXgpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShhbm5zLCBuYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zKHgsIHYpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyhmdW5jLCBhbm5zKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogWFhYIE1heWJlIHRoaXMgc2hvdWxkIGJlIGEgc2VwYXJhdGUgb3Bjb2RlPyAqLwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBwb3NkZWZhdWx0cyA+IDApIHsKLSAgICAgICAgICAgICAgICB2ID0gUHlUdXBsZV9OZXcocG9zZGVmYXVsdHMpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdoaWxlICgtLXBvc2RlZmF1bHRzID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHYsIHBvc2RlZmF1bHRzLCB3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMoeCwgdikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCi0gICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMgY2hhbmdlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBrd2RlZmF1bHRzID4gMCkgewotICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChrd2RlZmF1bHRzID4gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZzID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgICAgIGlmIChkZWZzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB3aGlsZSAoLS1rd2RlZmF1bHRzID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBkZWZhdWx0IHZhbHVlICovCi0gICAgICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsgLyoga3cgb25seSBhcmcgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAvKiBYWFgobm5vcndpdHopOiBjaGVjayBmb3IgZXJyb3JzICovCi0gICAgICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHYsIHUsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsgLyogZGVmYXVsdCB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gUE9QKCk7IC8qIGt3IG9ubHkgYXJnIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgaW50IGVyciA9IFB5RGljdF9TZXRJdGVtKGRlZnMsIGtleSwgdik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRLd0RlZmF1bHRzKHgsIHYpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRLd0RlZmF1bHRzKGZ1bmMsIGRlZnMpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwogICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMgY2hhbmdlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAocG9zZGVmYXVsdHMgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZnMgPSBQeVR1cGxlX05ldyhwb3NkZWZhdWx0cyk7CisgICAgICAgICAgICAgICAgaWYgKGRlZnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlICgtLXBvc2RlZmF1bHRzID49IDApCisgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oZGVmcywgcG9zZGVmYXVsdHMsIFBPUCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXREZWZhdWx0cyhmdW5jLCBkZWZzKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXREZWZhdWx0cyBjaGFuZ2VzLiAqLworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChmdW5jKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlVJTERfU0xJQ0UpCisgICAgICAgIFRBUkdFVChCVUlMRF9TTElDRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnN0YXJ0LCAqc3RvcCwgKnN0ZXAsICpzbGljZTsKICAgICAgICAgICAgIGlmIChvcGFyZyA9PSAzKQotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBzdGVwID0gUE9QKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdyA9IE5VTEw7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB1ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlTbGljZV9OZXcodSwgdiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzdGVwID0gTlVMTDsKKyAgICAgICAgICAgIHN0b3AgPSBQT1AoKTsKKyAgICAgICAgICAgIHN0YXJ0ID0gVE9QKCk7CisgICAgICAgICAgICBzbGljZSA9IFB5U2xpY2VfTmV3KHN0YXJ0LCBzdG9wLCBzdGVwKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICBQeV9YREVDUkVGKHN0ZXApOworICAgICAgICAgICAgU0VUX1RPUChzbGljZSk7CisgICAgICAgICAgICBpZiAoc2xpY2UgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChFWFRFTkRFRF9BUkcpCisgICAgICAgIFRBUkdFVChFWFRFTkRFRF9BUkcpIHsKICAgICAgICAgICAgIG9wY29kZSA9IE5FWFRPUCgpOwogICAgICAgICAgICAgb3BhcmcgPSBvcGFyZzw8MTYgfCBORVhUQVJHKCk7CiAgICAgICAgICAgICBnb3RvIGRpc3BhdGNoX29wY29kZTsKKyAgICAgICAgfQogCiAjaWYgVVNFX0NPTVBVVEVEX0dPVE9TCiAgICAgICAgIF91bmtub3duX29wY29kZToKQEAgLTI4NTgsOCArMzAyMyw3IEBACiAgICAgICAgICAgICAgICAgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGYpLAogICAgICAgICAgICAgICAgIG9wY29kZSk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJ1bmtub3duIG9wY29kZSIpOwotICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKIAogI2lmZGVmIENBU0VfVE9PX0JJRwogICAgICAgICB9CkBAIC0yODY3LDcxICszMDMxLDM1IEBACiAKICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KIAotICAgICAgICBvbl9lcnJvcjoKKyAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZC4gRXZlcnkgb3Bjb2RlIHNob3VsZCBlbmQgd2l0aCBESVNQQVRDSCgpCisgICAgICAgICAgIG9yIGdvdG8gZXJyb3IuICovCisgICAgICAgIGFzc2VydCgwKTsKIAorZXJyb3I6CiAgICAgICAgIFJFQURfVElNRVNUQU1QKGluc3QxKTsKIAotICAgICAgICAvKiBRdWlja2x5IGNvbnRpbnVlIGlmIG5vIGVycm9yIG9jY3VycmVkICovCisgICAgICAgIGFzc2VydCh3aHkgPT0gV0hZX05PVCk7CisgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAKLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfTk9UKSB7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDAgJiYgeCAhPSBOVUxMKSB7Ci0jaWZkZWYgQ0hFQ0tFWEMKLSAgICAgICAgICAgICAgICAvKiBUaGlzIGNoZWNrIGlzIGV4cGVuc2l2ZSEgKi8KLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiWFhYIHVuZGV0ZWN0ZWQgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIGVsc2UgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGxvb3AxKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIE5vcm1hbCwgZmFzdCBwYXRoICovCi0jaWZkZWYgQ0hFQ0tFWEMKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB4ID0gUHlfTm9uZTsKLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBEb3VibGUtY2hlY2sgZXhjZXB0aW9uIHN0YXR1cyAqLwotCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTiB8fCB3aHkgPT0gV0hZX1JFUkFJU0UpIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImVycm9yIHJldHVybiB3aXRob3V0IGV4Y2VwdGlvbiBzZXQiKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZkZWYgQ0hFQ0tFWEMKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGNoZWNrIGlzIGV4cGVuc2l2ZSEgKi8KLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBidWZbMTI4XTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIlN0YWNrIHVud2luZCB3aXRoIGV4Y2VwdGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICJzZXQgYW5kIHdoeT0lZCIsIHdoeSk7Ci0gICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcihidWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIC8qIERvdWJsZS1jaGVjayBleGNlcHRpb24gc3RhdHVzLiAqLworI2lmZGVmIE5ERUJVRworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHJldHVybiB3aXRob3V0IGV4Y2VwdGlvbiBzZXQiKTsKKyNlbHNlCisgICAgICAgIGFzc2VydChQeUVycl9PY2N1cnJlZCgpKTsKICNlbmRpZgogCi0gICAgICAgIC8qIExvZyB0cmFjZWJhY2sgaW5mbyBpZiB0aGlzIGlzIGEgcmVhbCBleGNlcHRpb24gKi8KKyAgICAgICAgLyogTG9nIHRyYWNlYmFjayBpbmZvLiAqLworICAgICAgICBQeVRyYWNlQmFja19IZXJlKGYpOwogCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTikgewotICAgICAgICAgICAgUHlUcmFjZUJhY2tfSGVyZShmKTsKLQotICAgICAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwgZik7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBGb3IgdGhlIHJlc3QsIHRyZWF0IFdIWV9SRVJBSVNFIGFzIFdIWV9FWENFUFRJT04gKi8KLQotICAgICAgICBpZiAod2h5ID09IFdIWV9SRVJBSVNFKQotICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLQotICAgICAgICAvKiBVbndpbmQgc3RhY2tzIGlmIGEgKHBzZXVkbykgZXhjZXB0aW9uIG9jY3VycmVkICovCisgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCisgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIGYpOwogCiBmYXN0X2Jsb2NrX2VuZDoKKyAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfTk9UKTsKKworICAgICAgICAvKiBVbndpbmQgc3RhY2tzIGlmIGEgKHBzZXVkbykgZXhjZXB0aW9uIG9jY3VycmVkICovCiAgICAgICAgIHdoaWxlICh3aHkgIT0gV0hZX05PVCAmJiBmLT5mX2libG9jayA+IDApIHsKICAgICAgICAgICAgIC8qIFBlZWsgYXQgdGhlIGN1cnJlbnQgYmxvY2suICovCiAgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gJmYtPmZfYmxvY2tzdGFja1tmLT5mX2libG9jayAtIDFdOwpAQCAtMjk3OCw3ICszMTA2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgUHl0aG9uIG1haW4gbG9vcC4gKi8KICAgICAgICAgICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICZleGMsICZ2YWwsICZ0Yik7Ci0gICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgICAgICAgIGlmICh0YiAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCBQeV9Ob25lKTsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZXhjKTsKICAgICAgICAgICAgICAgICB0c3RhdGUtPmV4Y190eXBlID0gZXhjOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWwpOwpAQCAtMzAxMCwxOCArMzE0MSwyMyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFJFQURfVElNRVNUQU1QKGxvb3AxKTsKIAorICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCiAgICAgfSAvKiBtYWluIGxvb3AgKi8KIAogICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEKTsKICAgICAvKiBQb3AgcmVtYWluaW5nIHN0YWNrIGVudHJpZXMuICovCiAgICAgd2hpbGUgKCFFTVBUWSgpKSB7Ci0gICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgUHlfWERFQ1JFRih2KTsKKyAgICAgICAgUHlPYmplY3QgKm8gPSBQT1AoKTsKKyAgICAgICAgUHlfWERFQ1JFRihvKTsKICAgICB9CiAKICAgICBpZiAod2h5ICE9IFdIWV9SRVRVUk4pCiAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAKKyAgICBhc3NlcnQoKHJldHZhbCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgfHwgKHJldHZhbCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKKwogZmFzdF95aWVsZDoKICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SICYmICh3aHkgPT0gV0hZX1lJRUxEIHx8IHdoeSA9PSBXSFlfUkVUVVJOKSkgewogICAgICAgICAvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGJsb2NrIGlzIHRvIHB1dCBhc2lkZSB0aGUgZ2VuZXJhdG9yJ3MgZXhjZXB0aW9uCkBAIC0zMDc4LDYgKzMyMTQsNyBAQAogICAgIC8qIHBvcCBmcmFtZSAqLwogZXhpdF9ldmFsX2ZyYW1lOgogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgIGYtPmZfZXhlY3V0aW5nID0gMDsKICAgICB0c3RhdGUtPmZyYW1lID0gZi0+Zl9iYWNrOwogCiAgICAgcmV0dXJuIHJldHZhbDsKQEAgLTMyNDMsOSArMzM4MCw5IEBACiAgICAgICAgICAgIFB5T2JqZWN0ICoqZGVmcywgaW50IGRlZmNvdW50LCBQeU9iamVjdCAqa3dkZWZzLCBQeU9iamVjdCAqY2xvc3VyZSkKIHsKICAgICBQeUNvZGVPYmplY3QqIGNvID0gKFB5Q29kZU9iamVjdCopX2NvOwotICAgIHJlZ2lzdGVyIFB5RnJhbWVPYmplY3QgKmY7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOworICAgIFB5RnJhbWVPYmplY3QgKmY7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgUHlPYmplY3QgKngsICp1OwogICAgIGludCB0b3RhbF9hcmdzID0gY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50OwpAQCAtMzUyMiw3ICszNjU5LDcgQEAKIAogLyogTG9naWMgZm9yIHRoZSByYWlzZSBzdGF0ZW1lbnQgKHRvbyBjb21wbGljYXRlZCBmb3IgaW5saW5pbmcpLgogICAgVGhpcyAqY29uc3VtZXMqIGEgcmVmZXJlbmNlIGNvdW50IHRvIGVhY2ggb2YgaXRzIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyBlbnVtIHdoeV9jb2RlCitzdGF0aWMgaW50CiBkb19yYWlzZShQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqY2F1c2UpCiB7CiAgICAgUHlPYmplY3QgKnR5cGUgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOwpAQCAtMzUzNywxMyArMzY3NCwxMyBAQAogICAgICAgICBpZiAodHlwZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBhY3RpdmUgZXhjZXB0aW9uIHRvIHJlcmFpc2UiKTsKLSAgICAgICAgICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgUHlfWElOQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWElOQ1JFRih2YWx1ZSk7CiAgICAgICAgIFB5X1hJTkNSRUYodGIpOwogICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0Yik7Ci0gICAgICAgIHJldHVybiBXSFlfUkVSQUlTRTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgLyogV2Ugc3VwcG9ydCB0aGUgZm9sbG93aW5nIGZvcm1zIG9mIHJhaXNlOgpAQCAtMzYwNiwxMyArMzc0MywxMyBAQAogICAgIC8qIFB5RXJyX1NldE9iamVjdCBpbmNyZWYncyBpdHMgYXJndW1lbnRzICovCiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIAogcmFpc2VfZXJyb3I6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICBQeV9YREVDUkVGKGNhdXNlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIH0KIAogLyogSXRlcmF0ZSB2IGFyZ2NudCB0aW1lcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgb24gdGhlIHN0YWNrICh2aWEgZGVjcmVhc2luZwpAQCAtMzcxMSwyNyArMzg0OCwyOCBAQAogc3RhdGljIHZvaWQKIGNhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqc2VsZiwgUHlGcmFtZU9iamVjdCAqZikKIHsKLSAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqYXJnOworICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2ssICpvcmlnX3RyYWNlYmFjaywgKmFyZzsKICAgICBpbnQgZXJyOwotICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOworICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZvcmlnX3RyYWNlYmFjayk7CiAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKICAgICAgICAgdmFsdWUgPSBQeV9Ob25lOwogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgIH0KLSAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZvcmlnX3RyYWNlYmFjayk7CisgICAgdHJhY2ViYWNrID0gKG9yaWdfdHJhY2ViYWNrICE9IE5VTEwpID8gb3JpZ190cmFjZWJhY2sgOiBQeV9Ob25lOwogICAgIGFyZyA9IFB5VHVwbGVfUGFjaygzLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKICAgICBpZiAoYXJnID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgb3JpZ190cmFjZWJhY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGVyciA9IGNhbGxfdHJhY2UoZnVuYywgc2VsZiwgZiwgUHlUcmFjZV9FWENFUFRJT04sIGFyZyk7CiAgICAgUHlfREVDUkVGKGFyZyk7CiAgICAgaWYgKGVyciA9PSAwKQotICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOworICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCBvcmlnX3RyYWNlYmFjayk7CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X1hERUNSRUYodHlwZSk7CiAgICAgICAgIFB5X1hERUNSRUYodmFsdWUpOwotICAgICAgICBQeV9YREVDUkVGKHRyYWNlYmFjayk7CisgICAgICAgIFB5X1hERUNSRUYob3JpZ190cmFjZWJhY2spOwogICAgIH0KIH0KIApAQCAtMzc2MCw3ICszODk4LDcgQEAKIGNhbGxfdHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmosIFB5RnJhbWVPYmplY3QgKmZyYW1lLAogICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICByZWdpc3RlciBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gZnJhbWUtPmZfdHN0YXRlOwogICAgIGludCByZXN1bHQ7CiAgICAgaWYgKHRzdGF0ZS0+dHJhY2luZykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zODcxLDkgKzQwMDksMTUgQEAKIFB5RXZhbF9HZXRMb2NhbHModm9pZCkKIHsKICAgICBQeUZyYW1lT2JqZWN0ICpjdXJyZW50X2ZyYW1lID0gUHlFdmFsX0dldEZyYW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRfZnJhbWUgPT0gTlVMTCkKKyAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgImZyYW1lIGRvZXMgbm90IGV4aXN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGN1cnJlbnRfZnJhbWUpOworICAgIH0KKworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihjdXJyZW50X2ZyYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXNzZXJ0KGN1cnJlbnRfZnJhbWUtPmZfbG9jYWxzICE9IE5VTEwpOwogICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2xvY2FsczsKIH0KIApAQCAtMzg4Myw4ICs0MDI3LDkgQEAKICAgICBQeUZyYW1lT2JqZWN0ICpjdXJyZW50X2ZyYW1lID0gUHlFdmFsX0dldEZyYW1lKCk7CiAgICAgaWYgKGN1cnJlbnRfZnJhbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzOworCisgICAgYXNzZXJ0KGN1cnJlbnRfZnJhbWUtPmZfZ2xvYmFscyAhPSBOVUxMKTsKKyAgICByZXR1cm4gY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzOwogfQogCiBQeUZyYW1lT2JqZWN0ICoKQEAgLTM5MjYsNiArNDA3MSwxMyBAQAogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uCisgICAgICAgc2V0LCBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkKKyAgICAgICBhbmQgc28gdGhlIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIGlmIChhcmcgPT0gTlVMTCkgewogICAgICAgICBhcmcgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgaWYgKGFyZyA9PSBOVUxMKQpAQCAtMzk0OCw2ICs0MTAwLDkgQEAKIAogICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgYXJnLCBrdyk7CiAgICAgUHlfREVDUkVGKGFyZyk7CisKKyAgICBhc3NlcnQoKHJlc3VsdCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAocmVzdWx0ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQwNjUsMTAgKzQyMjAsMTUgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqY2FsbGFyZ3M7CiAgICAgICAgICAgICBjYWxsYXJncyA9IGxvYWRfYXJncyhwcF9zdGFjaywgbmEpOwotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMCk7Ci0gICAgICAgICAgICBDX1RSQUNFKHgsIFB5Q0Z1bmN0aW9uX0NhbGwoZnVuYyxjYWxsYXJncyxOVUxMKSk7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOworICAgICAgICAgICAgaWYgKGNhbGxhcmdzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIwKTsKKyAgICAgICAgICAgICAgICBDX1RSQUNFKHgsIFB5Q0Z1bmN0aW9uX0NhbGwoZnVuYyxjYWxsYXJncyxOVUxMKSk7CisgICAgICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMSk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB4ID0gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChQeU1ldGhvZF9DaGVjayhmdW5jKSAmJiBQeU1ldGhvZF9HRVRfU0VMRihmdW5jKSAhPSBOVUxMKSB7CkBAIC00MDkzLDYgKzQyNTMsOCBAQAogICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwogICAgIH0KKyAgICBhc3NlcnQoKHggIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHggPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAKICAgICAvKiBDbGVhciB0aGUgc3RhY2sgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIEFsc28gcmVtb3ZlcwogICAgICAgIHRoZSBhcmd1bWVudHMgaW4gY2FzZSB0aGV5IHdlcmVuJ3QgY29uc3VtZWQgYWxyZWFkeQpAQCAtNDEwMyw2ICs0MjY1LDkgQEAKICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICBQQ0FMTChQQ0FMTF9QT1ApOwogICAgIH0KKworICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKICAgICByZXR1cm4geDsKIH0KIApAQCAtNDM4Niw2ICs0NTUxLDggQEAKICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKICAgICBQeV9YREVDUkVGKGt3ZGljdCk7CiAgICAgUHlfWERFQ1JFRihzdGFyYXJnKTsKKyAgICBhc3NlcnQoKHJlc3VsdCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAocmVzdWx0ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ0MjQsNyArNDU5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc2VFeGNlcHRpb24gaXMgbm90IGFsbG93ZWQiCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jbXBfb3V0Y29tZShpbnQgb3AsIHJlZ2lzdGVyIFB5T2JqZWN0ICp2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK2NtcF9vdXRjb21lKGludCBvcCwgUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIGludCByZXMgPSAwOwogICAgIHN3aXRjaCAob3ApIHsKQEAgLTQ0ODIsNyArNDY0OSw3IEBACiAKICAgICB4ID0gUHlPYmplY3RfR2V0QXR0cih2LCBuYW1lKTsKICAgICBpZiAoeCA9PSBOVUxMICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgImNhbm5vdCBpbXBvcnQgbmFtZSAlUyIsIG5hbWUpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJjYW5ub3QgaW1wb3J0IG5hbWUgJVIiLCBuYW1lKTsKICAgICB9CiAgICAgcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vY29kZWNzLmMgYi9QeXRob24vY29kZWNzLmMKaW5kZXggZmQ2N2QxYi4uNWZmNDFiNSAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvZGVjcy5jCisrKyBiL1B5dGhvbi9jb2RlY3MuYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljCiBQeU9iamVjdCAqbm9ybWFsaXplc3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKKyAgICBzaXplX3QgaTsKICAgICBzaXplX3QgbGVuID0gc3RybGVuKHN0cmluZyk7CiAgICAgY2hhciAqcDsKICAgICBQeU9iamVjdCAqdjsKQEAgLTY1LDkgKzY1LDkgQEAKIAogICAgIHAgPSBQeU1lbV9NYWxsb2MobGVuICsgMSk7CiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICByZWdpc3RlciBjaGFyIGNoID0gc3RyaW5nW2ldOworICAgICAgICBjaGFyIGNoID0gc3RyaW5nW2ldOwogICAgICAgICBpZiAoY2ggPT0gJyAnKQogICAgICAgICAgICAgY2ggPSAnLSc7CiAgICAgICAgIGVsc2UKQEAgLTMzMiwzMCArMzMyLDQ1IEBACiAgICAgcmV0dXJuIGNvZGVjX2dldHN0cmVhbWNvZGVjKGVuY29kaW5nLCBzdHJlYW0sIGVycm9ycywgMyk7CiB9CiAKKy8qIEhlbHBlciB0aGF0IHRyaWVzIHRvIGVuc3VyZSB0aGUgcmVwb3J0ZWQgZXhjZXB0aW9uIGNoYWluIGluZGljYXRlcyB0aGUKKyAqIGNvZGVjIHRoYXQgd2FzIGludm9rZWQgdG8gdHJpZ2dlciB0aGUgZmFpbHVyZSB3aXRob3V0IGNoYW5naW5nIHRoZSB0eXBlCisgKiBvZiB0aGUgZXhjZXB0aW9uIHJhaXNlZC4KKyAqLworc3RhdGljIHZvaWQKK3dyYXBfY29kZWNfZXJyb3IoY29uc3QgY2hhciAqb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAgICAvKiBUcnlTZXRGcm9tQ2F1c2Ugd2lsbCByZXBsYWNlIHRoZSBhY3RpdmUgZXhjZXB0aW9uIHdpdGggYSBzdWl0YWJseQorICAgICAqIHVwZGF0ZWQgY2xvbmUgaWYgaXQgY2FuLCBvdGhlcndpc2UgaXQgd2lsbCBsZWF2ZSB0aGUgb3JpZ2luYWwKKyAgICAgKiBleGNlcHRpb24gYWxvbmUuCisgICAgICovCisgICAgX1B5RXJyX1RyeVNldEZyb21DYXVzZSgiJXMgd2l0aCAnJXMnIGNvZGVjIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIGVuY29kaW5nKTsKK30KKwogLyogRW5jb2RlIGFuIG9iamVjdCAoZS5nLiBhbiBVbmljb2RlIG9iamVjdCkgdXNpbmcgdGhlIGdpdmVuIGVuY29kaW5nCiAgICBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgZW5jb2RlZCBvYmplY3QgKHVzdWFsbHkgYSBQeXRob24gc3RyaW5nKS4KIAogICAgZXJyb3JzIGlzIHBhc3NlZCB0byB0aGUgZW5jb2RlciBmYWN0b3J5IGFzIGFyZ3VtZW50IGlmIG5vbi1OVUxMLiAqLwogCi1QeU9iamVjdCAqUHlDb2RlY19FbmNvZGUoUHlPYmplY3QgKm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCitzdGF0aWMgUHlPYmplY3QgKgorX1B5Q29kZWNfRW5jb2RlSW50ZXJuYWwoUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7Ci0gICAgUHlPYmplY3QgKmVuY29kZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnYgPSBOVUxMOwogCi0gICAgZW5jb2RlciA9IFB5Q29kZWNfRW5jb2RlcihlbmNvZGluZyk7Ci0gICAgaWYgKGVuY29kZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgYXJncyA9IGFyZ3NfdHVwbGUob2JqZWN0LCBlcnJvcnMpOwogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGVuY29kZXIsIGFyZ3MpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgd3JhcF9jb2RlY19lcnJvcigiZW5jb2RpbmciLCBlbmNvZGluZyk7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CiAKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdWx0KSB8fAogICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHJlc3VsdCkgIT0gMikgewpAQCAtMzg0LDI1ICszOTksMjQgQEAKIAogICAgZXJyb3JzIGlzIHBhc3NlZCB0byB0aGUgZGVjb2RlciBmYWN0b3J5IGFzIGFyZ3VtZW50IGlmIG5vbi1OVUxMLiAqLwogCi1QeU9iamVjdCAqUHlDb2RlY19EZWNvZGUoUHlPYmplY3QgKm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCitzdGF0aWMgUHlPYmplY3QgKgorX1B5Q29kZWNfRGVjb2RlSW50ZXJuYWwoUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7Ci0gICAgUHlPYmplY3QgKmRlY29kZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnY7CiAKLSAgICBkZWNvZGVyID0gUHlDb2RlY19EZWNvZGVyKGVuY29kaW5nKTsKLSAgICBpZiAoZGVjb2RlciA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBhcmdzID0gYXJnc190dXBsZShvYmplY3QsIGVycm9ycyk7CiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgZ290byBvbkVycm9yOwogCiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoZGVjb2RlcixhcmdzKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHdyYXBfY29kZWNfZXJyb3IoImRlY29kaW5nIiwgZW5jb2RpbmcpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQogICAgIGlmICghUHlUdXBsZV9DaGVjayhyZXN1bHQpIHx8CiAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUocmVzdWx0KSAhPSAyKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC00MjUsNiArNDM5LDExOCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKiBHZW5lcmljIGVuY29kaW5nL2RlY29kaW5nIEFQSSAqLworUHlPYmplY3QgKlB5Q29kZWNfRW5jb2RlKFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIFB5T2JqZWN0ICplbmNvZGVyOworCisgICAgZW5jb2RlciA9IFB5Q29kZWNfRW5jb2RlcihlbmNvZGluZyk7CisgICAgaWYgKGVuY29kZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5Q29kZWNfRW5jb2RlSW50ZXJuYWwob2JqZWN0LCBlbmNvZGVyLCBlbmNvZGluZywgZXJyb3JzKTsKK30KKworUHlPYmplY3QgKlB5Q29kZWNfRGVjb2RlKFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIFB5T2JqZWN0ICpkZWNvZGVyOworCisgICAgZGVjb2RlciA9IFB5Q29kZWNfRGVjb2RlcihlbmNvZGluZyk7CisgICAgaWYgKGRlY29kZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5Q29kZWNfRGVjb2RlSW50ZXJuYWwob2JqZWN0LCBkZWNvZGVyLCBlbmNvZGluZywgZXJyb3JzKTsKK30KKworLyogVGV4dCBlbmNvZGluZy9kZWNvZGluZyBBUEkgKi8KK3N0YXRpYworUHlPYmplY3QgKmNvZGVjX2dldGl0ZW1fY2hlY2tlZChjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3BlcmF0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkKK3sKKyAgICBfUHlfSURFTlRJRklFUihfaXNfdGV4dF9lbmNvZGluZyk7CisgICAgUHlPYmplY3QgKmNvZGVjOworICAgIFB5T2JqZWN0ICphdHRyOworICAgIFB5T2JqZWN0ICp2OworICAgIGludCBpc190ZXh0X2NvZGVjOworCisgICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOworICAgIGlmIChjb2RlYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBhc3N1bWUgYW55IHJhdyB0dXBsZSBkZXNjcmliZXMgYSB0ZXh0CisgICAgICogZW5jb2RpbmcsIGFuZCB0aGUgc2FtZSBmb3IgYW55dGhpbmcgbGFja2luZyB0aGUgcHJpdmF0ZQorICAgICAqIGF0dHJpYnV0ZS4KKyAgICAgKi8KKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2tFeGFjdChjb2RlYykpIHsKKyAgICAgICAgYXR0ciA9IF9QeU9iamVjdF9HZXRBdHRySWQoY29kZWMsICZQeUlkX19pc190ZXh0X2VuY29kaW5nKTsKKyAgICAgICAgaWYgKGF0dHIgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvZGVjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlzX3RleHRfY29kZWMgPSBQeU9iamVjdF9Jc1RydWUoYXR0cik7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgICAgICAgICBpZiAoIWlzX3RleHRfY29kZWMpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29kZWMpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19Mb29rdXBFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuJXMoKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBvcGVyYXRpb25fbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2ID0gUHlUdXBsZV9HRVRfSVRFTShjb2RlYywgaW5kZXgpOworICAgIFB5X0RFQ1JFRihjb2RlYyk7CisgICAgUHlfSU5DUkVGKHYpOworICAgIHJldHVybiB2OworfQorCitzdGF0aWMgUHlPYmplY3QgKiBfUHlDb2RlY19UZXh0RW5jb2Rlcihjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAgICByZXR1cm4gY29kZWNfZ2V0aXRlbV9jaGVja2VkKGVuY29kaW5nLCAiZW5jb2RlIiwgMCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqIF9QeUNvZGVjX1RleHREZWNvZGVyKGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworICAgIHJldHVybiBjb2RlY19nZXRpdGVtX2NoZWNrZWQoZW5jb2RpbmcsICJkZWNvZGUiLCAxKTsKK30KKworUHlPYmplY3QgKl9QeUNvZGVjX0VuY29kZVRleHQoUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIFB5T2JqZWN0ICplbmNvZGVyOworCisgICAgZW5jb2RlciA9IF9QeUNvZGVjX1RleHRFbmNvZGVyKGVuY29kaW5nKTsKKyAgICBpZiAoZW5jb2RlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfUHlDb2RlY19FbmNvZGVJbnRlcm5hbChvYmplY3QsIGVuY29kZXIsIGVuY29kaW5nLCBlcnJvcnMpOworfQorCitQeU9iamVjdCAqX1B5Q29kZWNfRGVjb2RlVGV4dChQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgUHlPYmplY3QgKmRlY29kZXI7CisKKyAgICBkZWNvZGVyID0gX1B5Q29kZWNfVGV4dERlY29kZXIoZW5jb2RpbmcpOworICAgIGlmIChkZWNvZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeUNvZGVjX0RlY29kZUludGVybmFsKG9iamVjdCwgZGVjb2RlciwgZW5jb2RpbmcsIGVycm9ycyk7Cit9CisKIC8qIFJlZ2lzdGVyIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBmdW5jdGlvbiBlcnJvciB1bmRlciB0aGUgbmFtZQogICAgbmFtZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgY29kZWMgd2hlbiBpdCBlbmNvdW50ZXJzCiAgICBhbiB1bmVuY29kYWJsZSBjaGFyYWN0ZXJzL3VuZGVjb2RhYmxlIGJ5dGVzIGFuZCBkb2Vzbid0IGtub3cgdGhlCkBAIC00NDEsNyArNTY3LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICByZXR1cm4gUHlEaWN0X1NldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiluYW1lLCBlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGVycm9yKTsKIH0KIAogLyogTG9va3VwIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIHVuZGVyIHRoZQpAQCAtNDU3LDcgKzU4Myw3IEBACiAKICAgICBpZiAobmFtZT09TlVMTCkKICAgICAgICAgbmFtZSA9ICJzdHJpY3QiOwotICAgIGhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhpbnRlcnAtPmNvZGVjX2Vycm9yX3JlZ2lzdHJ5LCAoY2hhciAqKW5hbWUpOworICAgIGhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhpbnRlcnAtPmNvZGVjX2Vycm9yX3JlZ2lzdHJ5LCBuYW1lKTsKICAgICBpZiAoIWhhbmRsZXIpCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19Mb29rdXBFcnJvciwgInVua25vd24gZXJyb3IgaGFuZGxlciBuYW1lICclLjQwMHMnIiwgbmFtZSk7CiAgICAgZWxzZQpAQCAtNzMzLDYgKzg1OSw2NSBAQAogICAgIH0KIH0KIAorI2RlZmluZSBFTkNfVVRGOCAgICAgICAgMAorI2RlZmluZSBFTkNfVVRGMTZCRSAgICAgMQorI2RlZmluZSBFTkNfVVRGMTZMRSAgICAgMgorI2RlZmluZSBFTkNfVVRGMzJCRSAgICAgMworI2RlZmluZSBFTkNfVVRGMzJMRSAgICAgNAorCitzdGF0aWMgaW50CitnZXRfc3RhbmRhcmRfZW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcsIGludCAqYnl0ZWxlbmd0aCkKK3sKKyAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ3UnICYmCisgICAgICAgIFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICd0JyAmJgorICAgICAgICBQeV9UT0xPV0VSKGVuY29kaW5nWzJdKSA9PSAnZicpIHsKKyAgICAgICAgZW5jb2RpbmcgKz0gMzsKKyAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnLScgfHwgKmVuY29kaW5nID09ICdfJyApCisgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICBpZiAoZW5jb2RpbmdbMF0gPT0gJzEnICYmIGVuY29kaW5nWzFdID09ICc2JykgeworICAgICAgICAgICAgZW5jb2RpbmcgKz0gMjsKKyAgICAgICAgICAgICpieXRlbGVuZ3RoID0gMjsKKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJ1wwJykgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZCRTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYxNkxFOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKKyAgICAgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICdlJyAmJiBlbmNvZGluZ1syXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdiJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYxNkJFOworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlbmNvZGluZ1swXSA9PSAnMycgJiYgZW5jb2RpbmdbMV0gPT0gJzInKSB7CisgICAgICAgICAgICBlbmNvZGluZyArPSAyOworICAgICAgICAgICAgKmJ5dGVsZW5ndGggPSA0OworICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnXDAnKSB7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkJFOworI2Vsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjMyTEU7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJy0nIHx8ICplbmNvZGluZyA9PSAnXycgKQorICAgICAgICAgICAgICAgIGVuY29kaW5nKys7CisgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1sxXSkgPT0gJ2UnICYmIGVuY29kaW5nWzJdID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2InKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjMyQkU7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdsJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkxFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIHV0Zi04ICovCisgICAgKmJ5dGVsZW5ndGggPSAzOworICAgIHJldHVybiBFTkNfVVRGODsKK30KKwogLyogVGhpcyBoYW5kbGVyIGlzIGRlY2xhcmVkIHN0YXRpYyB1bnRpbCBzb21lb25lIGRlbW9uc3RyYXRlcwogICAgYSBuZWVkIHRvIGNhbGwgaXQgZGlyZWN0bHkuICovCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzQwLDM3ICs5MjUsNzcgQEAKIHsKICAgICBQeU9iamVjdCAqcmVzdHVwbGU7CiAgICAgUHlPYmplY3QgKm9iamVjdDsKKyAgICBQeU9iamVjdCAqZW5jb2RlOworICAgIGNoYXIgKmVuY29kaW5nOworICAgIGludCBjb2RlOworICAgIGludCBieXRlbGVuZ3RoOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IHN0YXJ0OwogICAgIFB5X3NzaXplX3QgZW5kOwogICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UoZXhjLCBQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7Ci0gICAgICAgIGNoYXIgKm91dHA7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHA7CiAgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydChleGMsICZzdGFydCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZChleGMsICZlbmQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKG9iamVjdCA9IFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdChleGMpKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDMqKGVuZC1zdGFydCkpOworICAgICAgICBpZiAoIShlbmNvZGUgPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyhleGMpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGluZyA9IFB5VW5pY29kZV9Bc1VURjgoZW5jb2RlKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjb2RlID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGVuY29kaW5nLCAmYnl0ZWxlbmd0aCk7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworCisgICAgICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnl0ZWxlbmd0aCooZW5kLXN0YXJ0KSk7CiAgICAgICAgIGlmICghcmVzKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIG91dHAgPSBQeUJ5dGVzX0FzU3RyaW5nKHJlcyk7CisgICAgICAgIG91dHAgPSAodW5zaWduZWQgY2hhciopUHlCeXRlc19Bc1N0cmluZyhyZXMpOwogICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICAgICAvKiBvYmplY3QgaXMgZ3VhcmFudGVlZCB0byBiZSAicmVhZHkiICovCiAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQURfQ0hBUihvYmplY3QsIGkpOwotICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwIHx8IGNoID4gMHhkZmZmKSB7CisgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgewogICAgICAgICAgICAgICAgIC8qIE5vdCBhIHN1cnJvZ2F0ZSwgZmFpbCB3aXRoIG9yaWdpbmFsIGV4Y2VwdGlvbiAqLwogICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y2VwdGlvbkluc3RhbmNlX0NsYXNzKGV4YyksIGV4Yyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAqb3V0cCsrID0gKGNoYXIpKDB4ZTAgfCAoY2ggPj4gMTIpKTsKLSAgICAgICAgICAgICpvdXRwKysgPSAoY2hhcikoMHg4MCB8ICgoY2ggPj4gNikgJiAweDNmKSk7Ci0gICAgICAgICAgICAqb3V0cCsrID0gKGNoYXIpKDB4ODAgfCAoY2ggJiAweDNmKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjg6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSgweGUwIHwgKGNoID4+IDEyKSk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSgweDgwIHwgKChjaCA+PiA2KSAmIDB4M2YpKTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKDB4ODAgfCAoY2ggJiAweDNmKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkxFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiA4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2QkU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiA4KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJMRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiAxNik7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiAyNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkJFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMjQpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMTYpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXN0dXBsZSA9IFB5X0J1aWxkVmFsdWUoIihPbikiLCByZXMsIGVuZCk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtNzgyLDM0ICsxMDA3LDY0IEBACiAgICAgICAgIFB5X1VDUzQgY2ggPSAwOwogICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQoZXhjLCAmc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoIShvYmplY3QgPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QoZXhjKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCEocCA9ICh1bnNpZ25lZCBjaGFyKilQeUJ5dGVzX0FzU3RyaW5nKG9iamVjdCkpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIGlmICghKGVuY29kZSA9IFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nKGV4YykpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICghKGVuY29kaW5nID0gUHlVbmljb2RlX0FzVVRGOChlbmNvZGUpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGNvZGUgPSBnZXRfc3RhbmRhcmRfZW5jb2RpbmcoZW5jb2RpbmcsICZieXRlbGVuZ3RoKTsKKyAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisKICAgICAgICAgLyogVHJ5IGRlY29kaW5nIGEgc2luZ2xlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuIElmCiAgICAgICAgICAgIHRoZXJlIGFyZSBtb3JlLCBsZXQgdGhlIGNvZGVjIGNhbGwgdXMgYWdhaW4uICovCiAgICAgICAgIHAgKz0gc3RhcnQ7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKG9iamVjdCkgLSBzdGFydCA+PSAzICYmCi0gICAgICAgICAgICAocFswXSAmIDB4ZjApID09IDB4ZTAgJiYKLSAgICAgICAgICAgIChwWzFdICYgMHhjMCkgPT0gMHg4MCAmJgotICAgICAgICAgICAgKHBbMl0gJiAweGMwKSA9PSAweDgwKSB7Ci0gICAgICAgICAgICAvKiBpdCdzIGEgdGhyZWUtYnl0ZSBjb2RlICovCi0gICAgICAgICAgICBjaCA9ICgocFswXSAmIDB4MGYpIDw8IDEyKSArICgocFsxXSAmIDB4M2YpIDw8IDYpICsgKHBbMl0gJiAweDNmKTsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCB8fCBjaCA+IDB4ZGZmZikKLSAgICAgICAgICAgICAgICAvKiBpdCdzIG5vdCBhIHN1cnJvZ2F0ZSAtIGZhaWwgKi8KLSAgICAgICAgICAgICAgICBjaCA9IDA7CisgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKG9iamVjdCkgLSBzdGFydCA+PSBieXRlbGVuZ3RoKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjg6CisgICAgICAgICAgICAgICAgaWYgKChwWzBdICYgMHhmMCkgPT0gMHhlMCAmJgorICAgICAgICAgICAgICAgICAgICAocFsxXSAmIDB4YzApID09IDB4ODAgJiYKKyAgICAgICAgICAgICAgICAgICAgKHBbMl0gJiAweGMwKSA9PSAweDgwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSB0aHJlZS1ieXRlIGNvZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgY2ggPSAoKHBbMF0gJiAweDBmKSA8PCAxMikgKyAoKHBbMV0gJiAweDNmKSA8PCA2KSArIChwWzJdICYgMHgzZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZMRToKKyAgICAgICAgICAgICAgICBjaCA9IHBbMV0gPDwgOCB8IHBbMF07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkJFOgorICAgICAgICAgICAgICAgIGNoID0gcFswXSA8PCA4IHwgcFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyTEU6CisgICAgICAgICAgICAgICAgY2ggPSAocFszXSA8PCAyNCkgfCAocFsyXSA8PCAxNikgfCAocFsxXSA8PCA4KSB8IHBbMF07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkJFOgorICAgICAgICAgICAgICAgIGNoID0gKHBbMF0gPDwgMjQpIHwgKHBbMV0gPDwgMTYpIHwgKHBbMl0gPDwgOCkgfCBwWzNdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7Ci0gICAgICAgIGlmIChjaCA9PSAwKSB7CisgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CisgICAgICAgICAgICAvKiBpdCdzIG5vdCBhIHN1cnJvZ2F0ZSAtIGZhaWwgKi8KICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y2VwdGlvbkluc3RhbmNlX0NsYXNzKGV4YyksIGV4Yyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoY2gpOwogICAgICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXMsIHN0YXJ0KzMpOworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5uKSIsIHJlcywgc3RhcnQgKyBieXRlbGVuZ3RoKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHdyb25nX2V4Y2VwdGlvbl90eXBlKGV4Yyk7CkBAIC0xMDI2LDcgKzEyODEsNyBAQAogCiAgICAgaWYgKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnkpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5X0FSUkFZX0xFTkdUSChtZXRob2RzKTsgKytpKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldygmbWV0aG9kc1tpXS5kZWYsIE5VTEwpOworICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeCgmbWV0aG9kc1tpXS5kZWYsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIGlmICghZnVuYykKICAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBpbml0aWFsaXplIGNvZGVjIGVycm9yIHJlZ2lzdHJ5Iik7CmRpZmYgLS1naXQgYS9QeXRob24vY29tcGlsZS5jIGIvUHl0aG9uL2NvbXBpbGUuYwppbmRleCA2ZDY2MjU1Li4wZmM5MTg2IDEwMDY0NAotLS0gYS9QeXRob24vY29tcGlsZS5jCisrKyBiL1B5dGhvbi9jb21waWxlLmMKQEAgLTk0LDYgKzk0LDcgQEAKICAgICBDT01QSUxFUl9TQ09QRV9NT0RVTEUsCiAgICAgQ09NUElMRVJfU0NPUEVfQ0xBU1MsCiAgICAgQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04sCisgICAgQ09NUElMRVJfU0NPUEVfTEFNQkRBLAogICAgIENPTVBJTEVSX1NDT1BFX0NPTVBSRUhFTlNJT04sCiB9OwogCkBAIC0xMTksOCArMTIwLDggQEAKIAogICAgIFB5T2JqZWN0ICp1X3ByaXZhdGU7ICAgICAgICAvKiBmb3IgcHJpdmF0ZSBuYW1lIG1hbmdsaW5nICovCiAKLSAgICBpbnQgdV9hcmdjb3VudDsgICAgICAgIC8qIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGJsb2NrICovCi0gICAgaW50IHVfa3dvbmx5YXJnY291bnQ7IC8qIG51bWJlciBvZiBrZXl3b3JkIG9ubHkgYXJndW1lbnRzIGZvciBibG9jayAqLworICAgIFB5X3NzaXplX3QgdV9hcmdjb3VudDsgICAgICAgIC8qIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGJsb2NrICovCisgICAgUHlfc3NpemVfdCB1X2t3b25seWFyZ2NvdW50OyAvKiBudW1iZXIgb2Yga2V5d29yZCBvbmx5IGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KICAgICAvKiBQb2ludGVyIHRvIHRoZSBtb3N0IHJlY2VudGx5IGFsbG9jYXRlZCBibG9jay4gIEJ5IGZvbGxvd2luZyBiX2xpc3QKICAgICAgICBtZW1iZXJzLCB5b3UgY2FuIHJlYWNoIGFsbCBlYXJseSBhbGxvY2F0ZWQgYmxvY2tzLiAqLwogICAgIGJhc2ljYmxvY2sgKnVfYmxvY2tzOwpAQCAtMTQ5LDggKzE1MCw3IEBACiAqLwogCiBzdHJ1Y3QgY29tcGlsZXIgewotICAgIGNvbnN0IGNoYXIgKmNfZmlsZW5hbWU7Ci0gICAgUHlPYmplY3QgKmNfZmlsZW5hbWVfb2JqOworICAgIFB5T2JqZWN0ICpjX2ZpbGVuYW1lOwogICAgIHN0cnVjdCBzeW10YWJsZSAqY19zdDsKICAgICBQeUZ1dHVyZUZlYXR1cmVzICpjX2Z1dHVyZTsgLyogcG9pbnRlciB0byBtb2R1bGUncyBfX2Z1dHVyZV9fICovCiAgICAgUHlDb21waWxlckZsYWdzICpjX2ZsYWdzOwpAQCAtMTcwLDcgKzE3MCw3IEBACiBzdGF0aWMgaW50IGNvbXBpbGVyX25leHRfaW5zdHIoc3RydWN0IGNvbXBpbGVyICosIGJhc2ljYmxvY2sgKik7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wKHN0cnVjdCBjb21waWxlciAqLCBpbnQpOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9vKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwotc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIGludCk7CitzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX2koc3RydWN0IGNvbXBpbGVyICosIGludCwgUHlfc3NpemVfdCk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX2ooc3RydWN0IGNvbXBpbGVyICosIGludCwgYmFzaWNibG9jayAqLCBpbnQpOwogc3RhdGljIGJhc2ljYmxvY2sgKmNvbXBpbGVyX3VzZV9uZXdfYmxvY2soc3RydWN0IGNvbXBpbGVyICopOwogc3RhdGljIGludCBjb21waWxlcl9lcnJvcihzdHJ1Y3QgY29tcGlsZXIgKiwgY29uc3QgY2hhciAqKTsKQEAgLTE5NSwxMiArMTk1LDEzIEBACiBzdGF0aWMgaW50IGV4cHJfY29uc3RhbnQoc3RydWN0IGNvbXBpbGVyICosIGV4cHJfdHkpOwogCiBzdGF0aWMgaW50IGNvbXBpbGVyX3dpdGgoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHksIGludCk7Ci1zdGF0aWMgaW50IGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgaW50IG4sCitzdGF0aWMgaW50IGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgUHlfc3NpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGt3YXJncyk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX3RyeV9leGNlcHQoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHkpOworc3RhdGljIGludCBjb21waWxlcl9zZXRfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICopOwogCiBzdGF0aWMgUHlDb2RlT2JqZWN0ICphc3NlbWJsZShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50IGFkZE5vbmUpOwogc3RhdGljIFB5T2JqZWN0ICpfX2RvY19fOwpAQCAtMjg4LDggKzI4OSw4IEBACiB9CiAKIFB5Q29kZU9iamVjdCAqCi1QeUFTVF9Db21waWxlRXgobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCi0gICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKK1B5QVNUX0NvbXBpbGVPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgc3RydWN0IGNvbXBpbGVyIGM7CiAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IE5VTEw7CkBAIC0zMDQsMTIgKzMwNSwxMCBAQAogCiAgICAgaWYgKCFjb21waWxlcl9pbml0KCZjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKICAgICBjLmNfZmlsZW5hbWUgPSBmaWxlbmFtZTsKLSAgICBjLmNfZmlsZW5hbWVfb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7Ci0gICAgaWYgKCFjLmNfZmlsZW5hbWVfb2JqKQotICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgYy5jX2FyZW5hID0gYXJlbmE7Ci0gICAgYy5jX2Z1dHVyZSA9IFB5RnV0dXJlX0Zyb21BU1QobW9kLCBmaWxlbmFtZSk7CisgICAgYy5jX2Z1dHVyZSA9IFB5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kLCBmaWxlbmFtZSk7CiAgICAgaWYgKGMuY19mdXR1cmUgPT0gTlVMTCkKICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGlmICghZmxhZ3MpIHsKQEAgLTMyMyw3ICszMjIsNyBAQAogICAgIGMuY19vcHRpbWl6ZSA9IChvcHRpbWl6ZSA9PSAtMSkgPyBQeV9PcHRpbWl6ZUZsYWcgOiBvcHRpbWl6ZTsKICAgICBjLmNfbmVzdGxldmVsID0gMDsKIAotICAgIGMuY19zdCA9IFB5U3ltdGFibGVfQnVpbGQobW9kLCBmaWxlbmFtZSwgYy5jX2Z1dHVyZSk7CisgICAgYy5jX3N0ID0gUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2QsIGZpbGVuYW1lLCBjLmNfZnV0dXJlKTsKICAgICBpZiAoYy5jX3N0ID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAibm8gc3ltdGFibGUiKTsKQEAgLTMzOSw2ICszMzgsMjEgQEAKIH0KIAogUHlDb2RlT2JqZWN0ICoKK1B5QVNUX0NvbXBpbGVFeChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgUHlDb2RlT2JqZWN0ICpjbzsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGNvOworCit9CisKK1B5Q29kZU9iamVjdCAqCiBQeU5vZGVfQ29tcGlsZShzdHJ1Y3QgX25vZGUgKm4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5Q29kZU9iamVjdCAqY28gPSBOVUxMOwpAQCAtMzYwLDggKzM3NCw3IEBACiAgICAgICAgIFB5U3ltdGFibGVfRnJlZShjLT5jX3N0KTsKICAgICBpZiAoYy0+Y19mdXR1cmUpCiAgICAgICAgIFB5T2JqZWN0X0ZyZWUoYy0+Y19mdXR1cmUpOwotICAgIGlmIChjLT5jX2ZpbGVuYW1lX29iaikKLSAgICAgICAgUHlfREVDUkVGKGMtPmNfZmlsZW5hbWVfb2JqKTsKKyAgICBQeV9YREVDUkVGKGMtPmNfZmlsZW5hbWUpOwogICAgIFB5X0RFQ1JFRihjLT5jX3N0YWNrKTsKIH0KIApAQCAtMzc1LDcgKzM4OCw3IEBACiAKICAgICBuID0gUHlMaXN0X1NpemUobGlzdCk7CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICB2ID0gUHlMb25nX0Zyb21Mb25nKGkpOworICAgICAgICB2ID0gUHlMb25nX0Zyb21Tc2l6ZV90KGkpOwogICAgICAgICBpZiAoIXYpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDAzLDcgKzQxNiw3IEBACiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdGJ5dHlwZShQeU9iamVjdCAqc3JjLCBpbnQgc2NvcGVfdHlwZSwgaW50IGZsYWcsIGludCBvZmZzZXQpCitkaWN0Ynl0eXBlKFB5T2JqZWN0ICpzcmMsIGludCBzY29wZV90eXBlLCBpbnQgZmxhZywgUHlfc3NpemVfdCBvZmZzZXQpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gb2Zmc2V0LCBzY29wZSwgbnVtX2tleXMsIGtleV9pOwogICAgIFB5T2JqZWN0ICprLCAqdiwgKmRlc3QgPSBQeURpY3RfTmV3KCk7CkBAIC00MzcsNyArNDUwLDcgQEAKICAgICAgICAgc2NvcGUgPSAodmkgPj4gU0NPUEVfT0ZGU0VUKSAmIFNDT1BFX01BU0s7CiAKICAgICAgICAgaWYgKHNjb3BlID09IHNjb3BlX3R5cGUgfHwgdmkgJiBmbGFnKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdHVwbGUsICppdGVtID0gUHlMb25nX0Zyb21Mb25nKGkpOworICAgICAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqaXRlbSA9IFB5TG9uZ19Gcm9tU3NpemVfdChpKTsKICAgICAgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc29ydGVkX2tleXMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZXN0KTsKQEAgLTUzNSw2ICs1NDgsMzcgQEAKICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKHUtPnVfc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSkgeworICAgICAgICAvKiBDb29rIHVwIGEgaW1wbGljaXQgX19jbGFzc19fIGNlbGwuICovCisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fY2xhc3NfXyk7CisgICAgICAgIFB5T2JqZWN0ICp0dXBsZSwgKm5hbWUsICp6ZXJvOworICAgICAgICBpbnQgcmVzOworICAgICAgICBhc3NlcnQodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTKTsKKyAgICAgICAgYXNzZXJ0KFB5RGljdF9TaXplKHUtPnVfY2VsbHZhcnMpID09IDApOworICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19jbGFzc19fKTsKKyAgICAgICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0dXBsZSA9IFB5VHVwbGVfUGFjaygyLCBuYW1lLCBQeV9UWVBFKG5hbWUpKTsKKyAgICAgICAgaWYgKCF0dXBsZSkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgemVybyA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICAgICAgaWYgKCF6ZXJvKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW0odS0+dV9jZWxsdmFycywgdHVwbGUsIHplcm8pOworICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICBQeV9ERUNSRUYoemVybyk7CisgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHUtPnVfZnJlZXZhcnMgPSBkaWN0Ynl0eXBlKHUtPnVfc3RlLT5zdGVfc3ltYm9scywgRlJFRSwgREVGX0ZSRUVfQ0xBU1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NpemUodS0+dV9jZWxsdmFycykpOwpAQCAtNTgwLDEzICs2MjQsMTggQEAKICAgICBpZiAoY29tcGlsZXJfdXNlX25ld19ibG9jayhjKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGlmICh1LT51X3Njb3BlX3R5cGUgIT0gQ09NUElMRVJfU0NPUEVfTU9EVUxFKSB7CisgICAgICAgIGlmICghY29tcGlsZXJfc2V0X3F1YWxuYW1lKGMpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkCiBjb21waWxlcl9leGl0X3Njb3BlKHN0cnVjdCBjb21waWxlciAqYykKIHsKLSAgICBpbnQgbjsKKyAgICBQeV9zc2l6ZV90IG47CiAgICAgUHlPYmplY3QgKmNhcHN1bGU7CiAKICAgICBjLT5jX25lc3RsZXZlbC0tOwpAQCAtNjA3LDU3ICs2NTYsNzcgQEAKIAogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICpjKQorc3RhdGljIGludAorY29tcGlsZXJfc2V0X3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqYykKIHsKLSAgICBQeV9zc2l6ZV90IHN0YWNrX3NpemUsIGk7CiAgICAgX1B5X3N0YXRpY19zdHJpbmcoZG90LCAiLiIpOwotICAgIF9QeV9zdGF0aWNfc3RyaW5nKGxvY2FscywgIjxsb2NhbHM+Iik7Ci0gICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnU7Ci0gICAgUHlPYmplY3QgKmNhcHN1bGUsICpuYW1lLCAqc2VxLCAqZG90X3N0ciwgKmxvY2Fsc19zdHI7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoZG90X2xvY2FscywgIi48bG9jYWxzPiIpOworICAgIFB5X3NzaXplX3Qgc3RhY2tfc2l6ZTsKKyAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqdSA9IGMtPnU7CisgICAgUHlPYmplY3QgKm5hbWUsICpiYXNlLCAqZG90X3N0ciwgKmRvdF9sb2NhbHNfc3RyOwogCi0gICAgdSA9IGMtPnU7Ci0gICAgaWYgKHUtPnVfcXVhbG5hbWUgIT0gTlVMTCkgewotICAgICAgICBQeV9JTkNSRUYodS0+dV9xdWFsbmFtZSk7Ci0gICAgICAgIHJldHVybiB1LT51X3F1YWxuYW1lOwotICAgIH0KLQotICAgIHNlcSA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIGJhc2UgPSBOVUxMOwogICAgIHN0YWNrX3NpemUgPSBQeUxpc3RfR0VUX1NJWkUoYy0+Y19zdGFjayk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHN0YWNrX3NpemU7IGkrKykgewotICAgICAgICBjYXBzdWxlID0gUHlMaXN0X0dFVF9JVEVNKGMtPmNfc3RhY2ssIGkpOwotICAgICAgICB1ID0gKHN0cnVjdCBjb21waWxlcl91bml0ICopUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgQ09NUElMRVJfQ0FQU1VMRV9OQU1FX0NPTVBJTEVSX1VOSVQpOwotICAgICAgICBhc3NlcnQodSk7Ci0gICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfTU9EVUxFKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlcSwgdS0+dV9uYW1lKSkKLSAgICAgICAgICAgIGdvdG8gX2Vycm9yOwotICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OKSB7Ci0gICAgICAgICAgICBsb2NhbHNfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmxvY2Fscyk7Ci0gICAgICAgICAgICBpZiAobG9jYWxzX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gX2Vycm9yOwotICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VxLCBsb2NhbHNfc3RyKSkKLSAgICAgICAgICAgICAgICBnb3RvIF9lcnJvcjsKKyAgICBhc3NlcnQoc3RhY2tfc2l6ZSA+PSAxKTsKKyAgICBpZiAoc3RhY2tfc2l6ZSA+IDEpIHsKKyAgICAgICAgaW50IHNjb3BlLCBmb3JjZV9nbG9iYWwgPSAwOworICAgICAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqcGFyZW50OworICAgICAgICBQeU9iamVjdCAqbWFuZ2xlZCwgKmNhcHN1bGU7CisKKyAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBzdGFja19zaXplIC0gMSk7CisgICAgICAgIHBhcmVudCA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUKTsKKyAgICAgICAgYXNzZXJ0KHBhcmVudCk7CisKKyAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiB8fCB1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MpIHsKKyAgICAgICAgICAgIGFzc2VydCh1LT51X25hbWUpOworICAgICAgICAgICAgbWFuZ2xlZCA9IF9QeV9NYW5nbGUocGFyZW50LT51X3ByaXZhdGUsIHUtPnVfbmFtZSk7CisgICAgICAgICAgICBpZiAoIW1hbmdsZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBzY29wZSA9IFB5U1RfR2V0U2NvcGUocGFyZW50LT51X3N0ZSwgbWFuZ2xlZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobWFuZ2xlZCk7CisgICAgICAgICAgICBhc3NlcnQoc2NvcGUgIT0gR0xPQkFMX0lNUExJQ0lUKTsKKyAgICAgICAgICAgIGlmIChzY29wZSA9PSBHTE9CQUxfRVhQTElDSVQpCisgICAgICAgICAgICAgICAgZm9yY2VfZ2xvYmFsID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm9yY2VfZ2xvYmFsKSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04KKyAgICAgICAgICAgICAgICB8fCBwYXJlbnQtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9MQU1CREEpIHsKKyAgICAgICAgICAgICAgICBkb3RfbG9jYWxzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZkb3RfbG9jYWxzKTsKKyAgICAgICAgICAgICAgICBpZiAoZG90X2xvY2Fsc19zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYmFzZSA9IFB5VW5pY29kZV9Db25jYXQocGFyZW50LT51X3F1YWxuYW1lLCBkb3RfbG9jYWxzX3N0cik7CisgICAgICAgICAgICAgICAgaWYgKGJhc2UgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYocGFyZW50LT51X3F1YWxuYW1lKTsKKyAgICAgICAgICAgICAgICBiYXNlID0gcGFyZW50LT51X3F1YWxuYW1lOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHUgPSBjLT51OwotICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlcSwgdS0+dV9uYW1lKSkKLSAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgZG90X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZkb3QpOwotICAgIGlmIChkb3Rfc3RyID09IE5VTEwpCi0gICAgICAgIGdvdG8gX2Vycm9yOwotICAgIG5hbWUgPSBQeVVuaWNvZGVfSm9pbihkb3Rfc3RyLCBzZXEpOwotICAgIFB5X0RFQ1JFRihzZXEpOwotICAgIHUtPnVfcXVhbG5hbWUgPSBuYW1lOwotICAgIFB5X1hJTkNSRUYobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7CiAKLV9lcnJvcjoKLSAgICBQeV9YREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGJhc2UgIT0gTlVMTCkgeworICAgICAgICBkb3Rfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmRvdCk7CisgICAgICAgIGlmIChkb3Rfc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG5hbWUgPSBQeVVuaWNvZGVfQ29uY2F0KGJhc2UsIGRvdF9zdHIpOworICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmbmFtZSwgdS0+dV9uYW1lKTsKKyAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKHUtPnVfbmFtZSk7CisgICAgICAgIG5hbWUgPSB1LT51X25hbWU7CisgICAgfQorICAgIHUtPnVfcXVhbG5hbWUgPSBuYW1lOworCisgICAgcmV0dXJuIDE7CiB9CiAKIC8qIEFsbG9jYXRlIGEgbmV3IGJsb2NrIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LgpAQCAtNzg0LDggKzg1Myw4IEBACiAgICAgYi0+Yl9pbnN0cltvZmZdLmlfbGluZW5vID0gYy0+dS0+dV9saW5lbm87CiB9CiAKLXN0YXRpYyBpbnQKLW9wY29kZV9zdGFja19lZmZlY3QoaW50IG9wY29kZSwgaW50IG9wYXJnKQoraW50CitQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3QoaW50IG9wY29kZSwgaW50IG9wYXJnKQogewogICAgIHN3aXRjaCAob3Bjb2RlKSB7CiAgICAgICAgIGNhc2UgUE9QX1RPUDoKQEAgLTg2Miw4ICs5MzEsNiBAQAogICAgICAgICAgICAgcmV0dXJuIDc7CiAgICAgICAgIGNhc2UgV0lUSF9DTEVBTlVQOgogICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBYWFggU29tZXRpbWVzIG1vcmUgKi8KLSAgICAgICAgY2FzZSBTVE9SRV9MT0NBTFM6Ci0gICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgUkVUVVJOX1ZBTFVFOgogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIElNUE9SVF9TVEFSOgpAQCAtOTcwLDE3ICsxMDM3LDE2IEBACiAgICAgICAgIGNhc2UgTE9BRF9DTE9TVVJFOgogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgTE9BRF9ERVJFRjoKKyAgICAgICAgY2FzZSBMT0FEX0NMQVNTREVSRUY6CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBTVE9SRV9ERVJFRjoKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBERUxFVEVfREVSRUY6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3Bjb2RlID0gJWRcbiIsIG9wY29kZSk7Ci0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJvcGNvZGVfc3RhY2tfZWZmZWN0KCkiKTsKLQorICAgICAgICAgICAgcmV0dXJuIFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUOwogICAgIH0KLSAgICByZXR1cm4gMDsgLyogbm90IHJlYWNoYWJsZSAqLworICAgIHJldHVybiBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVDsgLyogbm90IHJlYWNoYWJsZSAqLwogfQogCiAvKiBBZGQgYW4gb3Bjb2RlIHdpdGggbm8gYXJndW1lbnQuCkBAIC0xMDA2LDcgKzEwNzIsNyBAQAogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgUHlfc3NpemVfdAogY29tcGlsZXJfYWRkX28oc3RydWN0IGNvbXBpbGVyICpjLCBQeU9iamVjdCAqZGljdCwgUHlPYmplY3QgKm8pCiB7CiAgICAgUHlPYmplY3QgKnQsICp2OwpAQCAtMTA2MCw3ICsxMTI2LDcgQEAKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGFyZyA9IFB5RGljdF9TaXplKGRpY3QpOwotICAgICAgICB2ID0gUHlMb25nX0Zyb21Mb25nKGFyZyk7CisgICAgICAgIHYgPSBQeUxvbmdfRnJvbVNzaXplX3QoYXJnKTsKICAgICAgICAgaWYgKCF2KSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0xMDgyLDcgKzExNDgsNyBAQAogY29tcGlsZXJfYWRkb3BfbyhzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpkaWN0LAogICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm8pCiB7Ci0gICAgaW50IGFyZyA9IGNvbXBpbGVyX2FkZF9vKGMsIGRpY3QsIG8pOworICAgIFB5X3NzaXplX3QgYXJnID0gY29tcGlsZXJfYWRkX28oYywgZGljdCwgbyk7CiAgICAgaWYgKGFyZyA8IDApCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBjb21waWxlcl9hZGRvcF9pKGMsIG9wY29kZSwgYXJnKTsKQEAgLTEwOTIsNyArMTE1OCw3IEBACiBjb21waWxlcl9hZGRvcF9uYW1lKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgUHlPYmplY3QgKmRpY3QsCiAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvKQogewotICAgIGludCBhcmc7CisgICAgUHlfc3NpemVfdCBhcmc7CiAgICAgUHlPYmplY3QgKm1hbmdsZWQgPSBfUHlfTWFuZ2xlKGMtPnUtPnVfcHJpdmF0ZSwgbyk7CiAgICAgaWYgKCFtYW5nbGVkKQogICAgICAgICByZXR1cm4gMDsKQEAgLTExMDgsMTYgKzExNzQsMjIgQEAKICovCiAKIHN0YXRpYyBpbnQKLWNvbXBpbGVyX2FkZG9wX2koc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBpbnQgb3BhcmcpCitjb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgUHlfc3NpemVfdCBvcGFyZykKIHsKICAgICBzdHJ1Y3QgaW5zdHIgKmk7CiAgICAgaW50IG9mZjsKKworICAgIC8qIEludGVnZXIgYXJndW1lbnRzIGFyZSBsaW1pdCB0byAxNi1iaXQuIFRoZXJlIGlzIGFuIGV4dGVuc2lvbiBmb3IgMzItYml0CisgICAgICAgaW50ZWdlciBhcmd1bWVudHMuICovCisgICAgYXNzZXJ0KCgtMjE0NzQ4MzY0Ny0xKSA8PSBvcGFyZyk7CisgICAgYXNzZXJ0KG9wYXJnIDw9IDIxNDc0ODM2NDcpOworCiAgICAgb2ZmID0gY29tcGlsZXJfbmV4dF9pbnN0cihjLCBjLT51LT51X2N1cmJsb2NrKTsKICAgICBpZiAob2ZmIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaSA9ICZjLT51LT51X2N1cmJsb2NrLT5iX2luc3RyW29mZl07CiAgICAgaS0+aV9vcGNvZGUgPSBvcGNvZGU7Ci0gICAgaS0+aV9vcGFyZyA9IG9wYXJnOworICAgIGktPmlfb3BhcmcgPSBQeV9TQUZFX0RPV05DQVNUKG9wYXJnLCBQeV9zc2l6ZV90LCBpbnQpOwogICAgIGktPmlfaGFzYXJnID0gMTsKICAgICBjb21waWxlcl9zZXRfbGluZW5vKGMsIG9mZik7CiAgICAgcmV0dXJuIDE7CkBAIC0xMzMwLDE2ICsxNDAyLDE5IEBACiBzdGF0aWMgaW50CiBnZXRfcmVmX3R5cGUoc3RydWN0IGNvbXBpbGVyICpjLCBQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBpbnQgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBuYW1lKTsKKyAgICBpbnQgc2NvcGU7CisgICAgaWYgKGMtPnUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUyAmJgorICAgICAgICAhUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpKQorICAgICAgICByZXR1cm4gQ0VMTDsKKyAgICBzY29wZSA9IFB5U1RfR2V0U2NvcGUoYy0+dS0+dV9zdGUsIG5hbWUpOwogICAgIGlmIChzY29wZSA9PSAwKSB7CiAgICAgICAgIGNoYXIgYnVmWzM1MF07CiAgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBzY29wZSBmb3IgJS4xMDBzIGluICUuMTAwcyglcykgaW4gJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBzY29wZSBmb3IgJS4xMDBzIGluICUuMTAwcyglcylcbiIKICAgICAgICAgICAgICAgICAgICAgICAic3ltYm9sczogJXNcbmxvY2FsczogJXNcbmdsb2JhbHM6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjLT51LT51X25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV9zdGUtPnN0ZV9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfc3RlLT5zdGVfc3ltYm9scyksCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3Zhcm5hbWVzKSwKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfbmFtZXMpCkBAIC0xMzY1LDkgKzE0NDAsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1jb21waWxlcl9tYWtlX2Nsb3N1cmUoc3RydWN0IGNvbXBpbGVyICpjLCBQeUNvZGVPYmplY3QgKmNvLCBpbnQgYXJncywgUHlPYmplY3QgKnF1YWxuYW1lKQorY29tcGlsZXJfbWFrZV9jbG9zdXJlKHN0cnVjdCBjb21waWxlciAqYywgUHlDb2RlT2JqZWN0ICpjbywgUHlfc3NpemVfdCBhcmdzLCBQeU9iamVjdCAqcXVhbG5hbWUpCiB7Ci0gICAgaW50IGksIGZyZWUgPSBQeUNvZGVfR2V0TnVtRnJlZShjbyk7CisgICAgUHlfc3NpemVfdCBpLCBmcmVlID0gUHlDb2RlX0dldE51bUZyZWUoY28pOwogICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMKQogICAgICAgICBxdWFsbmFtZSA9IGNvLT5jb19uYW1lOwogCkBAIC0xNDk0LDIyICsxNTY5LDIyIEBACiAgICAgICAgKi8KICAgICBzdGF0aWMgaWRlbnRpZmllciByZXR1cm5fc3RyOwogICAgIFB5T2JqZWN0ICpuYW1lczsKLSAgICBpbnQgbGVuOworICAgIFB5X3NzaXplX3QgbGVuOwogICAgIG5hbWVzID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoIW5hbWVzKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbnMoYywgYXJncy0+YXJncywgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmIChhcmdzLT52YXJhcmdhbm5vdGF0aW9uICYmCi0gICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+dmFyYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24sIG5hbWVzKSkKKyAgICBpZiAoYXJncy0+dmFyYXJnICYmIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbiAmJgorICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPnZhcmFyZy0+YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbiwgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmIChjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5rd29ubHlhcmdzLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKGFyZ3MtPmt3YXJnYW5ub3RhdGlvbiAmJgotICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPmt3YXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3YXJnYW5ub3RhdGlvbiwgbmFtZXMpKQorICAgIGlmIChhcmdzLT5rd2FyZyAmJiBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiAmJgorICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPmt3YXJnLT5hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dhcmctPmFubm90YXRpb24sIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmICghcmV0dXJuX3N0cikgewpAQCAtMTUzMSw3ICsxNjA2LDcgQEAKICAgICBpZiAobGVuKSB7CiAgICAgICAgIC8qIGNvbnZlcnQgbmFtZXMgdG8gYSB0dXBsZSBhbmQgcGxhY2Ugb24gc3RhY2sgKi8KICAgICAgICAgUHlPYmplY3QgKmVsdDsKLSAgICAgICAgaW50IGk7CisgICAgICAgIFB5X3NzaXplX3QgaTsKICAgICAgICAgUHlPYmplY3QgKnMgPSBQeVR1cGxlX05ldyhsZW4pOwogICAgICAgICBpZiAoIXMpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTU0NSw3ICsxNjIwLDkgQEAKICAgICAgICAgbGVuKys7IC8qIGluY2x1ZGUgdGhlIGp1c3QtcHVzaGVkIHR1cGxlICovCiAgICAgfQogICAgIFB5X0RFQ1JFRihuYW1lcyk7Ci0gICAgcmV0dXJuIGxlbjsKKworICAgIC8qIFdlIGp1c3QgY2hlY2tlZCB0aGF0IGxlbiA8PSA2NTUzNSwgc2VlIGFib3ZlICovCisgICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QobGVuLCBQeV9zc2l6ZV90LCBpbnQpOwogCiBlcnJvcjoKICAgICBQeV9ERUNSRUYobmFtZXMpOwpAQCAtMTU2MSwxMyArMTYzOCwxNiBAQAogICAgIGV4cHJfdHkgcmV0dXJucyA9IHMtPnYuRnVuY3Rpb25EZWYucmV0dXJuczsKICAgICBhc2RsX3NlcSogZGVjb3MgPSBzLT52LkZ1bmN0aW9uRGVmLmRlY29yYXRvcl9saXN0OwogICAgIHN0bXRfdHkgc3Q7Ci0gICAgaW50IGksIG4sIGRvY3N0cmluZywga3dfZGVmYXVsdF9jb3VudCA9IDAsIGFyZ2xlbmd0aDsKKyAgICBQeV9zc2l6ZV90IGksIG4sIGFyZ2xlbmd0aDsKKyAgICBpbnQgZG9jc3RyaW5nLCBrd19kZWZhdWx0X2NvdW50ID0gMDsKICAgICBpbnQgbnVtX2Fubm90YXRpb25zOwogCiAgICAgYXNzZXJ0KHMtPmtpbmQgPT0gRnVuY3Rpb25EZWZfa2luZCk7CiAKICAgICBpZiAoIWNvbXBpbGVyX2RlY29yYXRvcnMoYywgZGVjb3MpKQogICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCisgICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7CkBAIC0xNTc1LDggKzE2NTUsNiBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXM7CiAgICAgfQotICAgIGlmIChhcmdzLT5kZWZhdWx0cykKLSAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBudW1fYW5ub3RhdGlvbnMgPSBjb21waWxlcl92aXNpdF9hbm5vdGF0aW9ucyhjLCBhcmdzLCByZXR1cm5zKTsKICAgICBpZiAobnVtX2Fubm90YXRpb25zIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjA1LDkgKzE2ODMsMTAgQEAKICAgICAgICAgVklTSVRfSU5fU0NPUEUoYywgc3RtdCwgc3QpOwogICAgIH0KICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKSB7CisgICAgaWYgKGNvID09IE5VTEwpIHsKICAgICAgICAgUHlfWERFQ1JFRihxdWFsbmFtZSk7CiAgICAgICAgIFB5X1hERUNSRUYoY28pOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE2NjEsMTIgKzE3NDAsNiBAQAogICAgICAgICBQeV9JTkNSRUYocy0+di5DbGFzc0RlZi5uYW1lKTsKICAgICAgICAgUHlfWERFQ1JFRihjLT51LT51X3ByaXZhdGUpOwogICAgICAgICBjLT51LT51X3ByaXZhdGUgPSBzLT52LkNsYXNzRGVmLm5hbWU7Ci0gICAgICAgIC8qIGZvcmNlIGl0IHRvIGhhdmUgb25lIG1hbmRhdG9yeSBhcmd1bWVudCAqLwotICAgICAgICBjLT51LT51X2FyZ2NvdW50ID0gMTsKLSAgICAgICAgLyogbG9hZCB0aGUgZmlyc3QgYXJndW1lbnQgKF9fbG9jYWxzX18pIC4uLiAqLwotICAgICAgICBBRERPUF9JKGMsIExPQURfRkFTVCwgMCk7Ci0gICAgICAgIC8qIC4uLiBhbmQgc3RvcmUgaXQgaW50byBmX2xvY2FscyAqLwotICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBTVE9SRV9MT0NBTFMpOwogICAgICAgICAvKiBsb2FkIChnbG9iYWwpIF9fbmFtZV9fIC4uLiAqLwogICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKICAgICAgICAgaWYgKCFzdHIgfHwgIWNvbXBpbGVyX25hbWVvcChjLCBzdHIsIExvYWQpKSB7CkBAIC0xNjgzLDE0ICsxNzU2LDggQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAvKiBzdG9yZSB0aGUgX19xdWFsbmFtZV9fICovCi0gICAgICAgIHN0ciA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOwotICAgICAgICBpZiAoIXN0cikgewotICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgc3RyLCBjb25zdHMpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgYXNzZXJ0KGMtPnUtPnVfcXVhbG5hbWUpOworICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGMtPnUtPnVfcXVhbG5hbWUsIGNvbnN0cyk7CiAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3F1YWxuYW1lX18iKTsKICAgICAgICAgaWYgKCFzdHIgfHwgIWNvbXBpbGVyX25hbWVvcChjLCBzdHIsIFN0b3JlKSkgewogICAgICAgICAgICAgUHlfWERFQ1JFRihzdHIpOwpAQCAtMTcwMywyNCArMTc3MCwyOCBAQAogICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIC8qIHJldHVybiB0aGUgKGVtcHR5KSBfX2NsYXNzX18gY2VsbCAqLwotICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7Ci0gICAgICAgIGlmIChzdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGkgPSBjb21waWxlcl9sb29rdXBfYXJnKGMtPnUtPnVfY2VsbHZhcnMsIHN0cik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICBpZiAoaSA9PSAtMSkgewotICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIHdoZW4gbm9ib2R5IHJlZmVyZW5jZXMgdGhlIGNlbGwgKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAvKiBSZXR1cm4gTm9uZSAqLwotICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoYy0+dS0+dV9zdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlKSB7CisgICAgICAgICAgICAvKiByZXR1cm4gdGhlIChlbXB0eSkgX19jbGFzc19fIGNlbGwgKi8KKyAgICAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKKyAgICAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gY29tcGlsZXJfbG9va3VwX2FyZyhjLT51LT51X2NlbGx2YXJzLCBzdHIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0KGkgPT0gMCk7CiAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIGNlbGwgd2hlcmUgdG8gc3RvcmUgX19jbGFzc19fICovCiAgICAgICAgICAgICBBRERPUF9JKGMsIExPQURfQ0xPU1VSRSwgaSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlEaWN0X1NpemUoYy0+dS0+dV9jZWxsdmFycykgPT0gMCk7CisgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgd2hlbiBub2JvZHkgcmVmZXJlbmNlcyB0aGUgY2VsbC4gUmV0dXJuIE5vbmUuICovCisgICAgICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7CisgICAgICAgIH0KICAgICAgICAgQURET1BfSU5fU0NPUEUoYywgUkVUVVJOX1ZBTFVFKTsKICAgICAgICAgLyogY3JlYXRlIHRoZSBjb2RlIG9iamVjdCAqLwogICAgICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwpAQCAtMTc4Nyw3ICsxODU4LDggQEAKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5T2JqZWN0ICpxdWFsbmFtZTsKICAgICBzdGF0aWMgaWRlbnRpZmllciBuYW1lOwotICAgIGludCBrd19kZWZhdWx0X2NvdW50ID0gMCwgYXJnbGVuZ3RoOworICAgIGludCBrd19kZWZhdWx0X2NvdW50ID0gMDsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbmd0aDsKICAgICBhcmd1bWVudHNfdHkgYXJncyA9IGUtPnYuTGFtYmRhLmFyZ3M7CiAgICAgYXNzZXJ0KGUtPmtpbmQgPT0gTGFtYmRhX2tpbmQpOwogCkBAIC0xNzk3LDE1ICsxODY5LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCisgICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7CiAgICAgICAgIGlmIChyZXMgPCAwKSByZXR1cm4gMDsKICAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKICAgICB9Ci0gICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQotICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwotICAgIGlmICghY29tcGlsZXJfZW50ZXJfc2NvcGUoYywgbmFtZSwgQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04sCisgICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCBDT01QSUxFUl9TQ09QRV9MQU1CREEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWUsIGUtPmxpbmVubykpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xODI0LDkgKzE4OTYsMTAgQEAKICAgICAgICAgQURET1BfSU5fU0NPUEUoYywgUkVUVVJOX1ZBTFVFKTsKICAgICB9CiAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBxdWFsbmFtZSA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOworICAgIHF1YWxuYW1lID0gYy0+dS0+dV9xdWFsbmFtZTsKKyAgICBQeV9JTkNSRUYocXVhbG5hbWUpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgaWYgKHF1YWxuYW1lID09IE5VTEwgfHwgY28gPT0gTlVMTCkKKyAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBhcmdsZW5ndGggPSBhc2RsX3NlcV9MRU4oYXJncy0+ZGVmYXVsdHMpOwpAQCAtMjA5Nyw3ICsyMTcwLDcgQEAKIGNvbXBpbGVyX3RyeV9leGNlcHQoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7CiAgICAgYmFzaWNibG9jayAqYm9keSwgKm9yZWxzZSwgKmV4Y2VwdCwgKmVuZDsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICBib2R5ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIGV4Y2VwdCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKQEAgLTIyNjMsNyArMjMzNiw3IEBACiAgICAgICAgbW9kdWxlIG5hbWVzLgogICAgICAgIFhYWCBQZXJoYXBzIGNoYW5nZSB0aGUgcmVwcmVzZW50YXRpb24gdG8gbWFrZSB0aGlzIGNhc2Ugc2ltcGxlcj8KICAgICAgKi8KLSAgICBpbnQgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydC5uYW1lcyk7CisgICAgUHlfc3NpemVfdCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0Lm5hbWVzKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgYWxpYXNfdHkgYWxpYXMgPSAoYWxpYXNfdHkpYXNkbF9zZXFfR0VUKHMtPnYuSW1wb3J0Lm5hbWVzLCBpKTsKQEAgLTIyODgsOCArMjM2MSwxMSBAQAogICAgICAgICAgICAgaWRlbnRpZmllciB0bXAgPSBhbGlhcy0+bmFtZTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgZG90ID0gUHlVbmljb2RlX0ZpbmRDaGFyKAogICAgICAgICAgICAgICAgIGFsaWFzLT5uYW1lLCAnLicsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKGFsaWFzLT5uYW1lKSwgMSk7Ci0gICAgICAgICAgICBpZiAoZG90ICE9IC0xKQorICAgICAgICAgICAgaWYgKGRvdCAhPSAtMSkgewogICAgICAgICAgICAgICAgIHRtcCA9IFB5VW5pY29kZV9TdWJzdHJpbmcoYWxpYXMtPm5hbWUsIDAsIGRvdCk7CisgICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHIgPSBjb21waWxlcl9uYW1lb3AoYywgdG1wLCBTdG9yZSk7CiAgICAgICAgICAgICBpZiAoZG90ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CkBAIC0yMzA0LDcgKzIzODAsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfZnJvbV9pbXBvcnQoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7Ci0gICAgaW50IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnRGcm9tLm5hbWVzKTsKKyAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnRGcm9tLm5hbWVzKTsKIAogICAgIFB5T2JqZWN0ICpuYW1lcyA9IFB5VHVwbGVfTmV3KG4pOwogICAgIFB5T2JqZWN0ICpsZXZlbDsKQEAgLTIzODAsNiArMjQ1Niw3IEBACiB7CiAgICAgc3RhdGljIFB5T2JqZWN0ICphc3NlcnRpb25fZXJyb3IgPSBOVUxMOwogICAgIGJhc2ljYmxvY2sgKmVuZDsKKyAgICBQeU9iamVjdCogbXNnOwogCiAgICAgaWYgKGMtPmNfb3B0aW1pemUpCiAgICAgICAgIHJldHVybiAxOwpAQCAtMjM5MCwxMSArMjQ2NywxNyBAQAogICAgIH0KICAgICBpZiAocy0+di5Bc3NlcnQudGVzdC0+a2luZCA9PSBUdXBsZV9raW5kICYmCiAgICAgICAgIGFzZGxfc2VxX0xFTihzLT52LkFzc2VydC50ZXN0LT52LlR1cGxlLmVsdHMpID4gMCkgewotICAgICAgICBjb25zdCBjaGFyKiBtc2cgPQotICAgICAgICAgICAgImFzc2VydGlvbiBpcyBhbHdheXMgdHJ1ZSwgcGVyaGFwcyByZW1vdmUgcGFyZW50aGVzZXM/IjsKLSAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csIGMtPmNfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9saW5lbm8sIE5VTEwsIE5VTEwpID09IC0xKQorICAgICAgICBtc2cgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiYXNzZXJ0aW9uIGlzIGFsd2F5cyB0cnVlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJoYXBzIHJlbW92ZSBwYXJlbnRoZXNlcz8iKTsKKyAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlFeGNfU3ludGF4V2FybmluZywgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobXNnKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihtc2cpOwogICAgIH0KICAgICBWSVNJVChjLCBleHByLCBzLT52LkFzc2VydC50ZXN0KTsKICAgICBlbmQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0yNDE0LDcgKzI0OTcsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfdmlzaXRfc3RtdChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICAvKiBBbHdheXMgYXNzaWduIGEgbGluZW5vIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGZvciBhIHN0bXQuICovCiAgICAgYy0+dS0+dV9saW5lbm8gPSBzLT5saW5lbm87CkBAIC0yNDYyLDEyICsyNTQ1LDEyIEBACiAgICAgICAgIGlmIChzLT52LlJhaXNlLmV4YykgewogICAgICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5SYWlzZS5leGMpOwogICAgICAgICAgICAgbisrOwotICAgICAgICBpZiAocy0+di5SYWlzZS5jYXVzZSkgewotICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LlJhaXNlLmNhdXNlKTsKLSAgICAgICAgbisrOworICAgICAgICAgICAgaWYgKHMtPnYuUmFpc2UuY2F1c2UpIHsKKyAgICAgICAgICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LlJhaXNlLmNhdXNlKTsKKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBBRERPUF9JKGMsIFJBSVNFX1ZBUkFSR1MsIG4pOworICAgICAgICBBRERPUF9JKGMsIFJBSVNFX1ZBUkFSR1MsIChpbnQpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVHJ5X2tpbmQ6CiAgICAgICAgIHJldHVybiBjb21waWxlcl90cnkoYywgcyk7CkBAIC0yNjI3LDcgKzI3MTAsOCBAQAogc3RhdGljIGludAogY29tcGlsZXJfbmFtZW9wKHN0cnVjdCBjb21waWxlciAqYywgaWRlbnRpZmllciBuYW1lLCBleHByX2NvbnRleHRfdHkgY3R4KQogewotICAgIGludCBvcCwgc2NvcGUsIGFyZzsKKyAgICBpbnQgb3AsIHNjb3BlOworICAgIFB5X3NzaXplX3QgYXJnOwogICAgIGVudW0geyBPUF9GQVNULCBPUF9HTE9CQUwsIE9QX0RFUkVGLCBPUF9OQU1FIH0gb3B0eXBlOwogCiAgICAgUHlPYmplY3QgKmRpY3QgPSBjLT51LT51X25hbWVzOwpAQCAtMjYzOCw2ICsyNzIyLDEwIEBACiAgICAgaWYgKCFtYW5nbGVkKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGFzc2VydChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiTm9uZSIpICYmCisgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJUcnVlIikgJiYKKyAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIkZhbHNlIikpOworCiAgICAgb3AgPSAwOwogICAgIG9wdHlwZSA9IE9QX05BTUU7CiAgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBtYW5nbGVkKTsKQEAgLTI2NzMsNyArMjc2MSw5IEBACiAgICAgc3dpdGNoIChvcHR5cGUpIHsKICAgICBjYXNlIE9QX0RFUkVGOgogICAgICAgICBzd2l0Y2ggKGN0eCkgewotICAgICAgICBjYXNlIExvYWQ6IG9wID0gTE9BRF9ERVJFRjsgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgIG9wID0gKGMtPnUtPnVfc3RlLT5zdGVfdHlwZSA9PSBDbGFzc0Jsb2NrKSA/IExPQURfQ0xBU1NERVJFRiA6IExPQURfREVSRUY7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdG9yZTogb3AgPSBTVE9SRV9ERVJFRjsgYnJlYWs7CiAgICAgICAgIGNhc2UgQXVnTG9hZDoKICAgICAgICAgY2FzZSBBdWdTdG9yZToKQEAgLTI3NDcsNyArMjgzNyw4IEBACiBjb21waWxlcl9ib29sb3Aoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7CiAgICAgYmFzaWNibG9jayAqZW5kOwotICAgIGludCBqdW1waSwgaSwgbjsKKyAgICBpbnQganVtcGk7CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIGFzZGxfc2VxICpzOwogCiAgICAgYXNzZXJ0KGUtPmtpbmQgPT0gQm9vbE9wX2tpbmQpOwpAQCAtMjc3Myw3ICsyODY0LDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2xpc3Qoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5MaXN0LmVsdHMpOworICAgIFB5X3NzaXplX3QgbiA9IGFzZGxfc2VxX0xFTihlLT52Lkxpc3QuZWx0cyk7CiAgICAgaWYgKGUtPnYuTGlzdC5jdHggPT0gU3RvcmUpIHsKICAgICAgICAgaW50IGksIHNlZW5fc3RhciA9IDA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTI4MDYsNyArMjg5Nyw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl90dXBsZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgbiA9IGFzZGxfc2VxX0xFTihlLT52LlR1cGxlLmVsdHMpOworICAgIFB5X3NzaXplX3QgbiA9IGFzZGxfc2VxX0xFTihlLT52LlR1cGxlLmVsdHMpOwogICAgIGlmIChlLT52LlR1cGxlLmN0eCA9PSBTdG9yZSkgewogICAgICAgICBpbnQgaSwgc2Vlbl9zdGFyID0gMDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMjgzOSw3ICsyOTMwLDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2NvbXBhcmUoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIGJhc2ljYmxvY2sgKmNsZWFudXAgPSBOVUxMOwogCiAgICAgLyogWFhYIHRoZSBsb2dpYyBjYW4gYmUgY2xlYW5lZCB1cCBmb3IgMSBvciBtdWx0aXBsZSBjb21wYXJpc29ucyAqLwpAQCAtMjg5NSwxMSArMjk4NiwxMSBAQAogLyogc2hhcmVkIGNvZGUgYmV0d2VlbiBjb21waWxlcl9jYWxsIGFuZCBjb21waWxlcl9jbGFzcyAqLwogc3RhdGljIGludAogY29tcGlsZXJfY2FsbF9oZWxwZXIoc3RydWN0IGNvbXBpbGVyICpjLAotICAgICAgICAgICAgICAgICAgICAgaW50IG4sIC8qIEFyZ3MgYWxyZWFkeSBwdXNoZWQgKi8KLSAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKLSAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMsCi0gICAgICAgICAgICAgZXhwcl90eSBzdGFyYXJncywKLSAgICAgICAgICAgICBleHByX3R5IGt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbiwgLyogQXJncyBhbHJlYWR5IHB1c2hlZCAqLworICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAorICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpCiB7CiAgICAgaW50IGNvZGUgPSAwOwogCkBAIC0yOTYwLDcgKzMwNTEsNyBAQAogCiAgICAgY29tcHJlaGVuc2lvbl90eSBnZW47CiAgICAgYmFzaWNibG9jayAqc3RhcnQsICphbmNob3IsICpza2lwLCAqaWZfY2xlYW51cDsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICBzdGFydCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBza2lwID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwpAQCAtMzA4NSw5ICszMTc2LDEwIEBACiAgICAgfQogCiAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBxdWFsbmFtZSA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOworICAgIHF1YWxuYW1lID0gYy0+dS0+dV9xdWFsbmFtZTsKKyAgICBQeV9JTkNSRUYocXVhbG5hbWUpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgaWYgKHF1YWxuYW1lID09IE5VTEwgfHwgY28gPT0gTlVMTCkKKyAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmICghY29tcGlsZXJfbWFrZV9jbG9zdXJlKGMsIGNvLCAwLCBxdWFsbmFtZSkpCkBAIC0zMTk3LDEyICszMjg5LDE4IEBACiAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgIC8qIG9wdGltaXplIGF3YXkgbmFtZXMgdGhhdCBjYW4ndCBiZSByZWFzc2lnbmVkICovCiAgICAgICAgIGlkID0gUHlVbmljb2RlX0FzVVRGOChlLT52Lk5hbWUuaWQpOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiVHJ1ZSIpID09IDApIHJldHVybiAxOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiRmFsc2UiKSA9PSAwKSByZXR1cm4gMDsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIk5vbmUiKSA9PSAwKSByZXR1cm4gMDsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIl9fZGVidWdfXyIpID09IDApCi0gICAgICAgICAgICByZXR1cm4gISBjLT5jX29wdGltaXplOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgaWYgKGlkICYmIHN0cmNtcChpZCwgIl9fZGVidWdfXyIpID09IDApCisgICAgICAgICAgICByZXR1cm4gIWMtPmNfb3B0aW1pemU7CisgICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOiB7CisgICAgICAgIFB5T2JqZWN0ICpvID0gZS0+di5OYW1lQ29uc3RhbnQudmFsdWU7CisgICAgICAgIGlmIChvID09IFB5X05vbmUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZSBpZiAobyA9PSBQeV9UcnVlKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UgaWYgKG8gPT0gUHlfRmFsc2UpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTMyOTIsNyArMzM5MCw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl92aXNpdF9leHByKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIC8qIElmIGV4cHIgZSBoYXMgYSBkaWZmZXJlbnQgbGluZSBudW1iZXIgdGhhbiB0aGUgbGFzdCBleHByL3N0bXQsCiAgICAgICAgc2V0IGEgbmV3IGxpbmUgbnVtYmVyIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KQEAgLTMzMjEsNiArMzQxOSw4IEBACiAgICAgICAgIHJldHVybiBjb21waWxlcl9pZmV4cChjLCBlKTsKICAgICBjYXNlIERpY3Rfa2luZDoKICAgICAgICAgbiA9IGFzZGxfc2VxX0xFTihlLT52LkRpY3QudmFsdWVzKTsKKyAgICAgICAgLyogQlVJTERfTUFQIHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgdG8gcHJlYWxsb2NhdGUgdGhlIGRpY3Rpb25hcnksCisgICAgICAgICAgIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBleGFjdCAqLwogICAgICAgICBBRERPUF9JKGMsIEJVSUxEX01BUCwgKG4+MHhGRkZGID8gMHhGRkZGIDogbikpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICBWSVNJVChjLCBleHByLApAQCAtMzM3OCw2ICszNDc4LDkgQEAKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CiAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfRWxsaXBzaXMsIGNvbnN0cyk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CisgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgZS0+di5OYW1lQ29uc3RhbnQudmFsdWUsIGNvbnN0cyk7CisgICAgICAgIGJyZWFrOwogICAgIC8qIFRoZSBmb2xsb3dpbmcgZXhwcnMgY2FuIGJlIGFzc2lnbm1lbnQgdGFyZ2V0cy4gKi8KICAgICBjYXNlIEF0dHJpYnV0ZV9raW5kOgogICAgICAgICBpZiAoZS0+di5BdHRyaWJ1dGUuY3R4ICE9IEF1Z1N0b3JlKQpAQCAtMzU0NywxMiArMzY1MCwxMiBAQAogICAgIFB5T2JqZWN0ICpsb2M7CiAgICAgUHlPYmplY3QgKnUgPSBOVUxMLCAqdiA9IE5VTEw7CiAKLSAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dChjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubyk7CisgICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8pOwogICAgIGlmICghbG9jKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgbG9jID0gUHlfTm9uZTsKICAgICB9Ci0gICAgdSA9IFB5X0J1aWxkVmFsdWUoIihPaWlPKSIsIGMtPmNfZmlsZW5hbWVfb2JqLCBjLT51LT51X2xpbmVubywKKyAgICB1ID0gUHlfQnVpbGRWYWx1ZSgiKE9paU8pIiwgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9jb2xfb2Zmc2V0LCBsb2MpOwogICAgIGlmICghdSkKICAgICAgICAgZ290byBleGl0OwpAQCAtMzY2NSw3ICszNzY4LDcgQEAKICAgICBjYXNlIEV4dFNsaWNlX2tpbmQ6CiAgICAgICAgIGtpbmRuYW1lID0gImV4dGVuZGVkIHNsaWNlIjsKICAgICAgICAgaWYgKGN0eCAhPSBBdWdTdG9yZSkgewotICAgICAgICAgICAgaW50IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5FeHRTbGljZS5kaW1zKTsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkV4dFNsaWNlLmRpbXMpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgICAgIHNsaWNlX3R5IHN1YiA9IChzbGljZV90eSlhc2RsX3NlcV9HRVQoCiAgICAgICAgICAgICAgICAgICAgIHMtPnYuRXh0U2xpY2UuZGltcywgaSk7CkBAIC0zNzI0LDcgKzM4MjcsNyBAQAogc3RhdGljIGludAogc3RhY2tkZXB0aF93YWxrKHN0cnVjdCBjb21waWxlciAqYywgYmFzaWNibG9jayAqYiwgaW50IGRlcHRoLCBpbnQgbWF4ZGVwdGgpCiB7Ci0gICAgaW50IGksIHRhcmdldF9kZXB0aDsKKyAgICBpbnQgaSwgdGFyZ2V0X2RlcHRoLCBlZmZlY3Q7CiAgICAgc3RydWN0IGluc3RyICppbnN0cjsKICAgICBpZiAoYi0+Yl9zZWVuIHx8IGItPmJfc3RhcnRkZXB0aCA+PSBkZXB0aCkKICAgICAgICAgcmV0dXJuIG1heGRlcHRoOwpAQCAtMzczMiw3ICszODM1LDEzIEBACiAgICAgYi0+Yl9zdGFydGRlcHRoID0gZGVwdGg7CiAgICAgZm9yIChpID0gMDsgaSA8IGItPmJfaXVzZWQ7IGkrKykgewogICAgICAgICBpbnN0ciA9ICZiLT5iX2luc3RyW2ldOwotICAgICAgICBkZXB0aCArPSBvcGNvZGVfc3RhY2tfZWZmZWN0KGluc3RyLT5pX29wY29kZSwgaW5zdHItPmlfb3BhcmcpOworICAgICAgICBlZmZlY3QgPSBQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3QoaW5zdHItPmlfb3Bjb2RlLCBpbnN0ci0+aV9vcGFyZyk7CisgICAgICAgIGlmIChlZmZlY3QgPT0gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1QpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3Bjb2RlID0gJWRcbiIsIGluc3RyLT5pX29wY29kZSk7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3QoKSIpOworICAgICAgICB9CisgICAgICAgIGRlcHRoICs9IGVmZmVjdDsKKwogICAgICAgICBpZiAoZGVwdGggPiBtYXhkZXB0aCkKICAgICAgICAgICAgIG1heGRlcHRoID0gZGVwdGg7CiAgICAgICAgIGFzc2VydChkZXB0aCA+PSAwKTsgLyogaW52YWxpZCBjb2RlIG9yIGJ1ZyBpbiBzdGFja2RlcHRoKCkgKi8KQEAgLTM4NDMsNyArMzk1Miw3IEBACiBhc3NlbWJsZV9sbm90YWIoc3RydWN0IGFzc2VtYmxlciAqYSwgc3RydWN0IGluc3RyICppKQogewogICAgIGludCBkX2J5dGVjb2RlLCBkX2xpbmVubzsKLSAgICBpbnQgbGVuOworICAgIFB5X3NzaXplX3QgbGVuOwogICAgIHVuc2lnbmVkIGNoYXIgKmxub3RhYjsKIAogICAgIGRfYnl0ZWNvZGUgPSBhLT5hX29mZnNldCAtIGEtPmFfbGluZW5vX29mZjsKQEAgLTQwMzQsNyArNDE0Myw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2tleXNfaW5vcmRlcihQeU9iamVjdCAqZGljdCwgaW50IG9mZnNldCkKK2RpY3Rfa2V5c19pbm9yZGVyKFB5T2JqZWN0ICpkaWN0LCBQeV9zc2l6ZV90IG9mZnNldCkKIHsKICAgICBQeU9iamVjdCAqdHVwbGUsICprLCAqdjsKICAgICBQeV9zc2l6ZV90IGksIHBvcyA9IDAsIHNpemUgPSBQeURpY3RfU2l6ZShkaWN0KTsKQEAgLTQwNTksMTAgKzQxNjgsMTAgQEAKIGNvbXB1dGVfY29kZV9mbGFncyhzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7CiAgICAgUHlTVEVudHJ5T2JqZWN0ICpzdGUgPSBjLT51LT51X3N0ZTsKLSAgICBpbnQgZmxhZ3MgPSAwLCBuOwotICAgIGlmIChzdGUtPnN0ZV90eXBlICE9IE1vZHVsZUJsb2NrKQotICAgICAgICBmbGFncyB8PSBDT19ORVdMT0NBTFM7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICBQeV9zc2l6ZV90IG47CiAgICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jaykgeworICAgICAgICBmbGFncyB8PSBDT19ORVdMT0NBTFM7CiAgICAgICAgIGlmICghc3RlLT5zdGVfdW5vcHRpbWl6ZWQpCiAgICAgICAgICAgICBmbGFncyB8PSBDT19PUFRJTUlaRUQ7CiAgICAgICAgIGlmIChzdGUtPnN0ZV9uZXN0ZWQpCkBAIC00MDg0LDkgKzQxOTMsOSBAQAogICAgIGlmIChuID09IDApIHsKICAgICAgICAgbiA9IFB5RGljdF9TaXplKGMtPnUtPnVfY2VsbHZhcnMpOwogICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKG4gPT0gMCkgewotICAgICAgICBmbGFncyB8PSBDT19OT0ZSRUU7CisgICAgICAgICAgICBmbGFncyB8PSBDT19OT0ZSRUU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQxMDUsNyArNDIxNCwxMCBAQAogICAgIFB5T2JqZWN0ICpmcmVldmFycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNlbGx2YXJzID0gTlVMTDsKICAgICBQeU9iamVjdCAqYnl0ZWNvZGUgPSBOVUxMOwotICAgIGludCBubG9jYWxzLCBmbGFnczsKKyAgICBQeV9zc2l6ZV90IG5sb2NhbHM7CisgICAgaW50IG5sb2NhbHNfaW50OworICAgIGludCBmbGFnczsKKyAgICBpbnQgYXJnY291bnQsIGt3b25seWFyZ2NvdW50OwogCiAgICAgdG1wID0gZGljdF9rZXlzX2lub3JkZXIoYy0+dS0+dV9jb25zdHMsIDApOwogICAgIGlmICghdG1wKQpAQCAtNDEyNCw3ICs0MjM2LDExIEBACiAgICAgZnJlZXZhcnMgPSBkaWN0X2tleXNfaW5vcmRlcihjLT51LT51X2ZyZWV2YXJzLCBQeVR1cGxlX1NpemUoY2VsbHZhcnMpKTsKICAgICBpZiAoIWZyZWV2YXJzKQogICAgICAgICBnb3RvIGVycm9yOworCiAgICAgbmxvY2FscyA9IFB5RGljdF9TaXplKGMtPnUtPnVfdmFybmFtZXMpOworICAgIGFzc2VydChubG9jYWxzIDwgSU5UX01BWCk7CisgICAgbmxvY2Fsc19pbnQgPSBQeV9TQUZFX0RPV05DQVNUKG5sb2NhbHMsIFB5X3NzaXplX3QsIGludCk7CisKICAgICBmbGFncyA9IGNvbXB1dGVfY29kZV9mbGFncyhjKTsKICAgICBpZiAoZmxhZ3MgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtNDEzOSwxMSArNDI1NSwxMyBAQAogICAgIFB5X0RFQ1JFRihjb25zdHMpOwogICAgIGNvbnN0cyA9IHRtcDsKIAotICAgIGNvID0gUHlDb2RlX05ldyhjLT51LT51X2FyZ2NvdW50LCBjLT51LT51X2t3b25seWFyZ2NvdW50LAotICAgICAgICAgICAgICAgICAgICBubG9jYWxzLCBzdGFja2RlcHRoKGMpLCBmbGFncywKKyAgICBhcmdjb3VudCA9IFB5X1NBRkVfRE9XTkNBU1QoYy0+dS0+dV9hcmdjb3VudCwgUHlfc3NpemVfdCwgaW50KTsKKyAgICBrd29ubHlhcmdjb3VudCA9IFB5X1NBRkVfRE9XTkNBU1QoYy0+dS0+dV9rd29ubHlhcmdjb3VudCwgUHlfc3NpemVfdCwgaW50KTsKKyAgICBjbyA9IFB5Q29kZV9OZXcoYXJnY291bnQsIGt3b25seWFyZ2NvdW50LAorICAgICAgICAgICAgICAgICAgICBubG9jYWxzX2ludCwgc3RhY2tkZXB0aChjKSwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlLCBjb25zdHMsIG5hbWVzLCB2YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICAgZnJlZXZhcnMsIGNlbGx2YXJzLAotICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lX29iaiwgYy0+dS0+dV9uYW1lLAorICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lLCBjLT51LT51X25hbWUsCiAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfZmlyc3RsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgIGEtPmFfbG5vdGFiKTsKICBlcnJvcjoKQEAgLTQyNTksNCArNDM3NywzIEBACiAgICAgcmV0dXJuIFB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLCBmbGFncywgLTEsIGFyZW5hKTsKIH0KIAotCmRpZmYgLS1naXQgYS9QeXRob24vY29uZHZhci5oIGIvUHl0aG9uL2NvbmR2YXIuaAppbmRleCBiYmI0MGJhLi5lMDIyZGM3IDEwMDY0NAotLS0gYS9QeXRob24vY29uZHZhci5oCisrKyBiL1B5dGhvbi9jb25kdmFyLmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgICAqIGJ1dCB3ZSBhcmUgc2FmZSBiZWNhdXNlIHdlIGFyZSB1c2luZyBhIHNlbWFwaG9yZSB3aWNoIGhhcyBhbiBpbnRlcm5hbAogICAgICAqIGNvdW50LgogICAgICAqLwotICAgIHdhaXQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGN2LT5zZW0sIG1zKTsKKyAgICB3YWl0ID0gV2FpdEZvclNpbmdsZU9iamVjdEV4KGN2LT5zZW0sIG1zLCBGQUxTRSk7CiAgICAgUHlNVVRFWF9MT0NLKGNzKTsKICAgICBpZiAod2FpdCAhPSBXQUlUX09CSkVDVF8wKQogICAgICAgICAtLWN2LT53YWl0aW5nOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMgYi9QeXRob24vZHlubG9hZF9haXguYwppbmRleCBmNDBhMGJlLi41YWMzMGVkIDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9haXguYworKysgYi9QeXRob24vZHlubG9hZF9haXguYwpAQCAtMzAsMTEgKzMwLDExIEBACiBzdGF0aWMgaW50CiBhaXhfZ2V0b2xkbW9kdWxlcyh2b2lkICoqbW9kbGlzdHB0cikKIHsKLSAgICByZWdpc3RlciBNb2R1bGVQdHIgICAgICAgbW9kcHRyLCBwcmV2bW9kcHRyOwotICAgIHJlZ2lzdGVyIHN0cnVjdCBsZF9pbmZvICAqbGRpcHRyOwotICAgIHJlZ2lzdGVyIGNoYXIgICAgICAgICAgICAqbGRpYnVmOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgICBlcnJmbGFnLCBidWZzaXplID0gMTAyNDsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgICAgb2Zmc2V0OworICAgIE1vZHVsZVB0ciAgICAgICBtb2RwdHIsIHByZXZtb2RwdHI7CisgICAgc3RydWN0IGxkX2luZm8gICpsZGlwdHI7CisgICAgY2hhciAgICAgICAgICAgICpsZGlidWY7CisgICAgaW50ICAgICAgICAgICAgIGVycmZsYWcsIGJ1ZnNpemUgPSAxMDI0OworICAgIHVuc2lnbmVkIGludCAgICBvZmZzZXQ7CiAgICAgY2hhciAqcHJvZ25hbWUgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogCiAgICAgLyoKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIGNoYXIgKm1lc3NhZ2VbMTAyNF0sIGVycmJ1ZlsxMDI0XTsKICAgICBQeU9iamVjdCAqcGF0aG5hbWVfb2IgPSBOVUxMOwogICAgIFB5T2JqZWN0ICplcnJidWZfb2IgPSBOVUxMOwotICAgIHJlZ2lzdGVyIGludCBpLGo7CisgICAgaW50IGksajsKIAogICAgIHN0cnVjdCBlcnJ0YWIgewogICAgICAgICBpbnQgZXJyTm87CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9vczIuYyBiL1B5dGhvbi9keW5sb2FkX29zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTFiOTA3Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi9keW5sb2FkX29zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotCi0vKiBTdXBwb3J0IGZvciBkeW5hbWljIGxvYWRpbmcgb2YgZXh0ZW5zaW9uIG1vZHVsZXMgKi8KLQotI2RlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSNkZWZpbmUgIElOQ0xfRE9TTU9EVUxFTUdSCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJpbXBvcnRkbC5oIgotCi0KLWNvbnN0IGNoYXIgKl9QeUltcG9ydF9EeW5Mb2FkRmlsZXRhYltdID0geyIucHlkIiwgIi5kbGwiLCBOVUxMfTsKLQotZGxfZnVuY3B0ciBfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMoY29uc3QgY2hhciAqc2hvcnRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKQotewotICAgIGRsX2Z1bmNwdHIgcDsKLSAgICBBUElSRVQgIHJjOwotICAgIEhNT0RVTEUgaERMTDsKLSAgICBjaGFyIGZhaWxyZWFzb25bMjU2XTsKLSAgICBjaGFyIGZ1bmNuYW1lWzI1OF07Ci0KLSAgICByYyA9IERvc0xvYWRNb2R1bGUoZmFpbHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZhaWxyZWFzb24pLAotICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgJmhETEwpOwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGNoYXIgZXJyQnVmWzI1Nl07Ci0gICAgICAgIFB5T1Nfc25wcmludGYoZXJyQnVmLCBzaXplb2YoZXJyQnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAiRExMIGxvYWQgZmFpbGVkLCByYyA9ICVkOiAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgIHJjLCBmYWlscmVhc29uKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCBlcnJCdWYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBQeU9TX3NucHJpbnRmKGZ1bmNuYW1lLCBzaXplb2YoZnVuY25hbWUpLCAiUHlJbml0XyUuMjAwcyIsIHNob3J0bmFtZSk7Ci0gICAgcmMgPSBEb3NRdWVyeVByb2NBZGRyKGhETEwsIDBMLCBmdW5jbmFtZSwgJnApOwotICAgIGlmIChyYyAhPSBOT19FUlJPUikKLSAgICAgICAgcCA9IE5VTEw7IC8qIFNpZ25pZnkgRmFpbHVyZSB0byBBY3F1aXJlIEVudHJ5cG9pbnQgKi8KLSAgICByZXR1cm4gcDsKLX0KZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMgYi9QeXRob24vZHlubG9hZF9zaGxpYi5jCmluZGV4IDc1NTQ0ZWQuLjg4OGZiZmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwpAQCAtMTgsMTAgKzE4LDYgQEAKIAogI2lmZGVmIEhBVkVfRExGQ05fSAogI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSAiZGxmY24uaCIKLSNlbmRpZgogI2VuZGlmCiAKICNpZiAoZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSkgJiYgIWRlZmluZWQoX19FTEZfXykKQEAgLTQwLDEwICszNiw2IEBACiAjaWZkZWYgX19DWUdXSU5fXwogICAgICIuZGxsIiwKICNlbHNlICAvKiAhX19DWUdXSU5fXyAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgIi5weWQiLAotICAgICIuZGxsIiwKLSNlbHNlICAvKiAhKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKSAqLwogI2lmZGVmIF9fVk1TCiAgICAgIi5leGUiLAogICAgICIuRVhFIiwKQEAgLTUyLDcgKzQ0LDYgQEAKICAgICAiLmFiaSIgUFlUSE9OX0FCSV9TVFJJTkcgIi5zbyIsCiAgICAgIi5zbyIsCiAjZW5kaWYgIC8qIF9fVk1TICovCi0jZW5kaWYgIC8qIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpICovCiAjZW5kaWYgIC8qIF9fQ1lHV0lOX18gKi8KICAgICBOVUxMLAogfTsKQEAgLTExNCw5ICsxMDUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0jaWYgIShkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSkKICAgICBkbG9wZW5mbGFncyA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycC0+ZGxvcGVuZmxhZ3M7Ci0jZW5kaWYKIAogI2lmZGVmIF9fVk1TCiAgICAgLyogVk1TIGN1cnJlbnRseSBkb24ndCBhbGxvdyBhIHBhdGhuYW1lLCB1c2UgYSBsb2dpY2FsIG5hbWUgaW5zdGVhZCAqLwpAQCAtMTMyLDE5ICsxMjEsMzAgQEAKICAgICBoYW5kbGUgPSBkbG9wZW4ocGF0aG5hbWUsIGRsb3BlbmZsYWdzKTsKIAogICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqbW9kX25hbWUgPSBOVUxMOwotICAgICAgICBQeU9iamVjdCAqcGF0aCA9IE5VTEw7Ci0gICAgICAgIFB5T2JqZWN0ICplcnJvcl9vYiA9IE5VTEw7CisgICAgICAgIFB5T2JqZWN0ICptb2RfbmFtZTsKKyAgICAgICAgUHlPYmplY3QgKnBhdGg7CisgICAgICAgIFB5T2JqZWN0ICplcnJvcl9vYjsKICAgICAgICAgY29uc3QgY2hhciAqZXJyb3IgPSBkbGVycm9yKCk7CiAgICAgICAgIGlmIChlcnJvciA9PSBOVUxMKQogICAgICAgICAgICAgZXJyb3IgPSAidW5rbm93biBkbG9wZW4oKSBlcnJvciI7CiAgICAgICAgIGVycm9yX29iID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZXJyb3IpOwotICAgICAgICBwYXRoID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocGF0aG5hbWUpOworICAgICAgICBpZiAoZXJyb3Jfb2IgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBtb2RfbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHNob3J0bmFtZSk7CisgICAgICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHBhdGhuYW1lKTsKKyAgICAgICAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeUVycl9TZXRJbXBvcnRFcnJvcihlcnJvcl9vYiwgbW9kX25hbWUsIHBhdGgpOwotICAgICAgICBQeV9YREVDUkVGKGVycm9yX29iKTsKLSAgICAgICAgUHlfWERFQ1JFRihwYXRoKTsKLSAgICAgICAgUHlfWERFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgIFB5X0RFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihwYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChmcCAhPSBOVUxMICYmIG5oYW5kbGVzIDwgMTI4KQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Vycm9ycy5jIGIvUHl0aG9uL2Vycm9ycy5jCmluZGV4IDYyNmIxNmUuLjkwZGM3MjkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9lcnJvcnMuYworKysgYi9QeXRob24vZXJyb3JzLmMKQEAgLTIwLDYgKzIwLDkgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CisKIAogdm9pZAogUHlFcnJfUmVzdG9yZShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdHJhY2ViYWNrKQpAQCAtNzEsNiArNzQsMTEgQEAKICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgIVB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgICAgICAvKiBXZSBtdXN0IG5vcm1hbGl6ZSB0aGUgdmFsdWUgcmlnaHQgbm93ICovCiAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgKmZpeGVkX3ZhbHVlOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgICAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbgorICAgICAgICAgICAgICAgZXJyb3IgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgewpAQCAtMTEyLDYgKzEyMCwyMCBAQAogICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOwogfQogCisvKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCisgKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQorICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KK3ZvaWQKK19QeUVycl9TZXRLZXlFcnJvcihQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICp0dXA7CisgICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7CisgICAgaWYgKCF0dXApCisgICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KKyAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7CisgICAgUHlfREVDUkVGKHR1cCk7Cit9CisKIHZvaWQKIFB5RXJyX1NldE5vbmUoUHlPYmplY3QgKmV4Y2VwdGlvbikKIHsKQEAgLTIyNywxMiArMjQ5LDIxIEBACiAgICAgICAgdmFsdWUgd2lsbCBiZSBhbiBpbnN0YW5jZS4KICAgICAqLwogICAgIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHR5cGUpKSB7CisgICAgICAgIGludCBpc19zdWJjbGFzczsKKyAgICAgICAgaWYgKGluY2xhc3MpIHsKKyAgICAgICAgICAgIGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhpbmNsYXNzLCB0eXBlKTsKKyAgICAgICAgICAgIGlmIChpc19zdWJjbGFzcyA8IDApCisgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzX3N1YmNsYXNzID0gMDsKKwogICAgICAgICAvKiBpZiB0aGUgdmFsdWUgd2FzIG5vdCBhbiBpbnN0YW5jZSwgb3IgaXMgbm90IGFuIGluc3RhbmNlCiAgICAgICAgICAgIHdob3NlIGNsYXNzIGlzIChvciBpcyBkZXJpdmVkIGZyb20pIHR5cGUsIHRoZW4gdXNlIHRoZQogICAgICAgICAgICB2YWx1ZSBhcyBhbiBhcmd1bWVudCB0byBpbnN0YW50aWF0aW9uIG9mIHRoZSB0eXBlCiAgICAgICAgICAgIGNsYXNzLgogICAgICAgICAqLwotICAgICAgICBpZiAoIWluY2xhc3MgfHwgIVB5T2JqZWN0X0lzU3ViY2xhc3MoaW5jbGFzcywgdHlwZSkpIHsKKyAgICAgICAgaWYgKCFpbmNsYXNzIHx8ICFpc19zdWJjbGFzcykgewogICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsICpyZXM7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBQeV9Ob25lKQpAQCAtMzY2LDYgKzM5NywxMiBAQAogUHlPYmplY3QgKgogUHlFcnJfTm9NZW1vcnkodm9pZCkKIHsKKyAgICBpZiAoUHlfVFlQRShQeUV4Y19NZW1vcnlFcnJvcikgPT0gTlVMTCkgeworICAgICAgICAvKiBQeUVycl9Ob01lbW9yeSgpIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUgUHlFeGNfTWVtb3J5RXJyb3IgaGFzIGJlZW4KKyAgICAgICAgICAgaW5pdGlhbGl6ZWQgYnkgX1B5RXhjX0luaXQoKSAqLworICAgICAgICBQeV9GYXRhbEVycm9yKCJPdXQgb2YgbWVtb3J5IGFuZCBQeUV4Y19NZW1vcnlFcnJvciBpcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsaXplZCB5ZXQiKTsKKyAgICB9CiAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19NZW1vcnlFcnJvcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC01ODgsNyArNjI1LDcgQEAKIAogUHlPYmplY3QgKlB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQogewotICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIE5VTEwpOwogfQogUHlPYmplY3QgKlB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKApAQCAtNTk3LDcgKzYzNCw3IEBACiB7CiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpIDogTlVMTDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjExLDcgKzY0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoZmlsZW5hbWUsIHdjc2xlbihmaWxlbmFtZSkpIDoKICAgICAgICAgICAgICBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBuYW1lKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC02NDYsOCArNjgzLDExIEBACiAKICAgICBQeV9JTkNSRUYobXNnKTsKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIG1zZyk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAibmFtZSIsIG5hbWUpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgInBhdGgiLCBwYXRoKTsKKworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJuYW1lIiwgbmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAicGF0aCIsIHBhdGgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGwoUHlFeGNfSW1wb3J0RXJyb3IsIGFyZ3MsIGt3YXJncyk7CiAgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKQEAgLTY3NSw2ICs3MTUsNyBAQAogdm9pZAogUHlFcnJfQmFkSW50ZXJuYWxDYWxsKHZvaWQpCiB7CisgICAgYXNzZXJ0KDAgJiYgImJhZCBhcmd1bWVudCB0byBpbnRlcm5hbCBmdW5jdGlvbiIpOwogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgImJhZCBhcmd1bWVudCB0byBpbnRlcm5hbCBmdW5jdGlvbiIpOwogfQpAQCAtNjk0LDYgKzczNSwxMiBAQAogICAgIHZhX3N0YXJ0KHZhcmdzKTsKICNlbmRpZgogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbiBlcnJvcgorICAgICAgIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCisKICAgICBzdHJpbmcgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7CiAgICAgUHlFcnJfU2V0T2JqZWN0KGV4Y2VwdGlvbiwgc3RyaW5nKTsKICAgICBQeV9YREVDUkVGKHN0cmluZyk7CkBAIC03OTUsNjAgKzg0Miw4NCBAQAogewogICAgIF9QeV9JREVOVElGSUVSKF9fbW9kdWxlX18pOwogICAgIFB5T2JqZWN0ICpmLCAqdCwgKnYsICp0YjsKLSAgICBQeUVycl9GZXRjaCgmdCwgJnYsICZ0Yik7Ci0gICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7Ci0gICAgaWYgKGYgIT0gTlVMTCAmJiBmICE9IFB5X05vbmUpIHsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJFeGNlcHRpb24gIiwgZik7Ci0gICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICBQeU9iamVjdCogbW9kdWxlTmFtZTsKLSAgICAgICAgICAgIGNoYXIqIGNsYXNzTmFtZTsKLSAgICAgICAgICAgIGFzc2VydChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHQpKTsKLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IFB5RXhjZXB0aW9uQ2xhc3NfTmFtZSh0KTsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNoYXIgKmRvdCA9IHN0cnJjaHIoY2xhc3NOYW1lLCAnLicpOwotICAgICAgICAgICAgICAgIGlmIChkb3QgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gZG90KzE7Ci0gICAgICAgICAgICB9CisgICAgUHlPYmplY3QgKm1vZHVsZU5hbWUgPSBOVUxMOworICAgIGNoYXIqIGNsYXNzTmFtZTsKIAotICAgICAgICAgICAgbW9kdWxlTmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQodCwgJlB5SWRfX19tb2R1bGVfXyk7Ci0gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjaGFyKiBtb2RzdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG1vZHVsZU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChtb2RzdHIgJiYKLSAgICAgICAgICAgICAgICAgICAgc3RyY21wKG1vZHN0ciwgImJ1aWx0aW5zIikgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhtb2RzdHIsIGYpOwotICAgICAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIi4iLCBmKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoY2xhc3NOYW1lLCBmKTsKLSAgICAgICAgICAgIGlmICh2ICYmIHYgIT0gUHlfTm9uZSkgewotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmKTsKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QodiwgZiwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9YREVDUkVGKG1vZHVsZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiIGluICIsIGYpOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KG9iaiwgZiwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgaWdub3JlZFxuIiwgZik7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIEp1c3QgaW4gY2FzZSAqLworICAgIFB5RXJyX0ZldGNoKCZ0LCAmdiwgJnRiKTsKKworICAgIGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKKyAgICBpZiAoZiA9PSBOVUxMIHx8IGYgPT0gUHlfTm9uZSkKKyAgICAgICAgZ290byBkb25lOworCisgICAgaWYgKG9iaikgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJFeGNlcHRpb24gaWdub3JlZCBpbjogIiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KG9iaiwgZiwgMCkgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CisKKyAgICBpZiAoUHlUcmFjZUJhY2tfUHJpbnQodGIsIGYpIDwgMCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgaWYgKCF0KQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0KSk7CisgICAgY2xhc3NOYW1lID0gUHlFeGNlcHRpb25DbGFzc19OYW1lKHQpOworICAgIGlmIChjbGFzc05hbWUgIT0gTlVMTCkgeworICAgICAgICBjaGFyICpkb3QgPSBzdHJyY2hyKGNsYXNzTmFtZSwgJy4nKTsKKyAgICAgICAgaWYgKGRvdCAhPSBOVUxMKQorICAgICAgICAgICAgY2xhc3NOYW1lID0gZG90KzE7CisgICAgfQorCisgICAgbW9kdWxlTmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQodCwgJlB5SWRfX19tb2R1bGVfXyk7CisgICAgaWYgKG1vZHVsZU5hbWUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZHVsZU5hbWUsICZQeUlkX2J1aWx0aW5zKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KG1vZHVsZU5hbWUsIGYsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIi4iLCBmKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjbGFzc05hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKGNsYXNzTmFtZSwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIGlmICh2ICYmIHYgIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdCh2LCBmLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKSA8IDApCisgICAgICAgIGdvdG8gZG9uZTsKKworZG9uZToKKyAgICBQeV9YREVDUkVGKG1vZHVsZU5hbWUpOwogICAgIFB5X1hERUNSRUYodCk7CiAgICAgUHlfWERFQ1JFRih2KTsKICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICBQeUVycl9DbGVhcigpOyAvKiBKdXN0IGluIGNhc2UgKi8KIH0KIAogZXh0ZXJuIFB5T2JqZWN0ICpQeU1vZHVsZV9HZXRXYXJuaW5nc01vZHVsZSh2b2lkKTsKIAogCiB2b2lkCi1QeUVycl9TeW50YXhMb2NhdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykgeworUHlFcnJfU3ludGF4TG9jYXRpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CiAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgbGluZW5vLCAtMSk7CiB9CiAKQEAgLTg1OCw3ICs5MjksNyBAQAogICAgdG8gbWFrZSBwcmludGluZyBvZiBleGNlcHRpb25zIGJlbGlldmUgaXQgaXMgYSBzeW50YXggZXJyb3IuICovCiAKIHZvaWQKLVB5RXJyX1N5bnRheExvY2F0aW9uRXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBQeU9iamVjdCAqZXhjLCAqdiwgKnRiLCAqdG1wOwogICAgIF9QeV9JREVOVElGSUVSKGZpbGVuYW1lKTsKQEAgLTg5MiwxNiArOTYzLDEwIEBACiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgdG1wID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQodiwgJlB5SWRfZmlsZW5hbWUsIGZpbGVuYW1lKSkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQodiwgJlB5SWRfZmlsZW5hbWUsIHRtcCkpCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwotICAgICAgICB9CiAKLSAgICAgICAgdG1wID0gUHlFcnJfUHJvZ3JhbVRleHQoZmlsZW5hbWUsIGxpbmVubyk7CisgICAgICAgIHRtcCA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGZpbGVuYW1lLCBsaW5lbm8pOwogICAgICAgICBpZiAodG1wKSB7CiAgICAgICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF90ZXh0LCB0bXApKQogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC05MzEsMjIgKzk5NiwzMyBAQAogICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2LCB0Yik7CiB9CiAKK3ZvaWQKK1B5RXJyX1N5bnRheExvY2F0aW9uRXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQoreworICAgIFB5T2JqZWN0ICpmaWxlb2JqOworICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVvYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGZpbGVvYmogPT0gTlVMTCkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZmlsZW9iaiA9IE5VTEw7CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW9iaiwgbGluZW5vLCBjb2xfb2Zmc2V0KTsKKyAgICBQeV9YREVDUkVGKGZpbGVvYmopOworfQorCiAvKiBBdHRlbXB0IHRvIGxvYWQgdGhlIGxpbmUgb2YgdGV4dCB0aGF0IHRoZSBleGNlcHRpb24gcmVmZXJzIHRvLiAgSWYgaXQKICAgIGZhaWxzLCBpdCB3aWxsIHJldHVybiBOVUxMIGJ1dCB3aWxsIG5vdCBzZXQgYW4gZXhjZXB0aW9uLgogCiAgICBYWFggVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBxdWl0ZSBzaW1pbGFyIHRvIHRoZQogICAgZnVuY3Rpb25hbGl0eSBpbiB0Yl9kaXNwbGF5bGluZSgpIGluIHRyYWNlYmFjay5jLiAqLwogCi1QeU9iamVjdCAqCi1QeUVycl9Qcm9ncmFtVGV4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3N0YXRpYyBQeU9iamVjdCAqCitlcnJfcHJvZ3JhbXRleHQoRklMRSAqZnAsIGludCBsaW5lbm8pCiB7Ci0gICAgRklMRSAqZnA7CiAgICAgaW50IGk7CiAgICAgY2hhciBsaW5lYnVmWzEwMDBdOwogCi0gICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgKmZpbGVuYW1lID09ICdcMCcgfHwgbGluZW5vIDw9IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKICAgICBpZiAoZnAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVubzsgaSsrKSB7CkBAIC05NzcsNiArMTA1MywyNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitQeU9iamVjdCAqCitQeUVycl9Qcm9ncmFtVGV4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCAqZmlsZW5hbWUgPT0gJ1wwJyB8fCBsaW5lbm8gPD0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZnAgPSBfUHlfZm9wZW4oZmlsZW5hbWUsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKKyAgICByZXR1cm4gZXJyX3Byb2dyYW10ZXh0KGZwLCBsaW5lbm8pOworfQorCitQeU9iamVjdCAqCitQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CisgICAgRklMRSAqZnA7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGluZW5vIDw9IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZwID0gX1B5X2ZvcGVuX29iaihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIHJldHVybiBlcnJfcHJvZ3JhbXRleHQoZnAsIGxpbmVubyk7Cit9CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vZmlsZXV0aWxzLmMgYi9QeXRob24vZmlsZXV0aWxzLmMKaW5kZXggZGJjYjkyMy4uODE0ZjA3NiAxMDA2NDQKLS0tIGEvUHl0aG9uL2ZpbGV1dGlscy5jCisrKyBiL1B5dGhvbi9maWxldXRpbHMuYwpAQCAtOSwyMCArOSwzOSBAQAogI2luY2x1ZGUgPGxhbmdpbmZvLmg+CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZiAvKiBIQVZFX0ZDTlRMX0ggKi8KKwogI2lmZGVmIF9fQVBQTEVfXwogZXh0ZXJuIHdjaGFyX3QqIF9QeV9EZWNvZGVVVEY4X3N1cnJvZ2F0ZWVzY2FwZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUpOwogI2VuZGlmCiAKKyNpZmRlZiBPX0NMT0VYRUMKKy8qIERvZXMgb3BlbigpIHN1cHBvcnQgdGhlIE9fQ0xPRVhFQyBmbGFnPyBQb3NzaWJsZSB2YWx1ZXM6CisKKyAgIC0xOiB1bmtub3duCisgICAgMDogb3BlbigpIGlnbm9yZXMgT19DTE9FWEVDIGZsYWcsIGV4OiBMaW51eCBrZXJuZWwgb2xkZXIgdGhhbiAyLjYuMjMKKyAgICAxOiBvcGVuKCkgc3VwcG9ydHMgT19DTE9FWEVDIGZsYWcsIGNsb3NlLW9uLWV4ZWMgaXMgc2V0CisKKyAgIFRoZSBmbGFnIGlzIHVzZWQgYnkgX1B5X29wZW4oKSwgaW8uRmlsZUlPIGFuZCBvcy5vcGVuKCkgKi8KK2ludCBfUHlfb3Blbl9jbG9leGVjX3dvcmtzID0gLTE7CisjZW5kaWYKKwogUHlPYmplY3QgKgogX1B5X2RldmljZV9lbmNvZGluZyhpbnQgZmQpCiB7Ci0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKE1TX1dJTjY0KQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICAgICBVSU5UIGNwOwogI2VuZGlmCiAgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpIHx8ICFpc2F0dHkoZmQpKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoTVNfV0lONjQpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIGlmIChmZCA9PSAwKQogICAgICAgICBjcCA9IEdldENvbnNvbGVDUCgpOwogICAgIGVsc2UgaWYgKGZkID09IDEgfHwgZmQgPT0gMikKQEAgLTYwLDcgKzc5LDcgQEAKICAgIHdvcmthcm91bmQgaXMgYWxzbyBlbmFibGVkIG9uIGVycm9yLCBmb3IgZXhhbXBsZSBpZiBnZXR0aW5nIHRoZSBsb2NhbGUKICAgIGZhaWxlZC4KIAotICAgVmFsdWVzIG9mIGxvY2FsZV9pc19hc2NpaToKKyAgIFZhbHVlcyBvZiBmb3JjZV9hc2NpaToKIAogICAgICAgIDE6IHRoZSB3b3JrYXJvdW5kIGlzIHVzZWQ6IF9QeV93Y2hhcjJjaGFyKCkgdXNlcwogICAgICAgICAgIGVuY29kZV9hc2NpaV9zdXJyb2dhdGVlc2NhcGUoKSBhbmQgX1B5X2NoYXIyd2NoYXIoKSB1c2VzCkBAIC0yMDEsNyArMjIwLDcgQEAKICAgICB1bnNpZ25lZCBjaGFyICppbjsKICAgICB3Y2hhcl90ICpvdXQ7CiAKLSAgICByZXMgPSBQeU1lbV9NYWxsb2MoKHN0cmxlbihhcmcpKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgcmVzID0gUHlNZW1fUmF3TWFsbG9jKChzdHJsZW4oYXJnKSsxKSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghcmVzKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjI5LDcgKzI0OCw3IEBACiAgICBVc2UgX1B5X3djaGFyMmNoYXIoKSB0byBlbmNvZGUgdGhlIGNoYXJhY3RlciBzdHJpbmcgYmFjayB0byBhIGJ5dGUgc3RyaW5nLgogCiAgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCi0gICBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSBhbmQgd3JpdGUgdGhlIG51bWJlciBvZiB3cml0dGVuIHdpZGUKKyAgIFB5TWVtX1Jhd0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpIGFuZCB3cml0ZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gd2lkZQogICAgY2hhcmFjdGVycyBleGNsdWRpbmcgdGhlIG51bGwgY2hhcmFjdGVyIGludG8gKnNpemUgaWYgc2l6ZSBpcyBub3QgTlVMTCwgb3IKICAgIE5VTEwgb24gZXJyb3IgKGRlY29kaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yKS4gSWYgc2l6ZSBpcyBub3QgTlVMTCwKICAgICpzaXplIGlzIHNldCB0byAoc2l6ZV90KS0xIG9uIG1lbW9yeSBlcnJvciBhbmQgKHNpemVfdCktMiBvbiBkZWNvZGluZwpAQCAtMjU0LDkgKzI3Myw5IEBACiAgICAgd2NoYXJfdCAqcmVzOwogICAgIHNpemVfdCBhcmdzaXplOwogICAgIHNpemVfdCBjb3VudDsKKyNpZmRlZiBIQVZFX01CUlRPV0MKICAgICB1bnNpZ25lZCBjaGFyICppbjsKICAgICB3Y2hhcl90ICpvdXQ7Ci0jaWZkZWYgSEFWRV9NQlJUT1dDCiAgICAgbWJzdGF0ZV90IG1iczsKICNlbmRpZgogCkBAIC0yODMsNyArMzAyLDcgQEAKICAgICBhcmdzaXplID0gbWJzdG93Y3MoTlVMTCwgYXJnLCAwKTsKICNlbmRpZgogICAgIGlmIChhcmdzaXplICE9IChzaXplX3QpLTEpIHsKLSAgICAgICAgcmVzID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGFyZ3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgcmVzID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2MoKGFyZ3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKCFyZXMpCiAgICAgICAgICAgICBnb3RvIG9vbTsKICAgICAgICAgY291bnQgPSBtYnN0b3djcyhyZXMsIGFyZywgYXJnc2l6ZSsxKTsKQEAgLTI5Miw3ICszMTEsNyBAQAogICAgICAgICAgICAgLyogT25seSB1c2UgdGhlIHJlc3VsdCBpZiBpdCBjb250YWlucyBubwogICAgICAgICAgICAgICAgc3Vycm9nYXRlIGNoYXJhY3RlcnMuICovCiAgICAgICAgICAgICBmb3IgKHRtcCA9IHJlczsgKnRtcCAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCp0bXAgPCAweGQ4MDAgfHwgKnRtcCA+IDB4ZGZmZik7IHRtcCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICFQeV9VTklDT0RFX0lTX1NVUlJPR0FURSgqdG1wKTsgdG1wKyspCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgaWYgKCp0bXAgPT0gMCkgewogICAgICAgICAgICAgICAgIGlmIChzaXplICE9IE5VTEwpCkBAIC0zMDAsNyArMzE5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIFB5TWVtX0ZyZWUocmVzKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShyZXMpOwogICAgIH0KICAgICAvKiBDb252ZXJzaW9uIGZhaWxlZC4gRmFsbCBiYWNrIHRvIGVzY2FwaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlLiAqLwogI2lmZGVmIEhBVkVfTUJSVE9XQwpAQCAtMzA5LDcgKzMyOCw3IEBACiAgICAgLyogT3ZlcmFsbG9jYXRlOyBhcyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgYXJlIGluIHRoZSBhcmd1bWVudCwgdGhlCiAgICAgICAgYWN0dWFsIG91dHB1dCBjb3VsZCB1c2UgbGVzcyBtZW1vcnkuICovCiAgICAgYXJnc2l6ZSA9IHN0cmxlbihhcmcpICsgMTsKLSAgICByZXMgPSAod2NoYXJfdCopUHlNZW1fTWFsbG9jKGFyZ3NpemUqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICByZXMgPSAod2NoYXJfdCopUHlNZW1fUmF3TWFsbG9jKGFyZ3NpemUqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIXJlcykKICAgICAgICAgZ290byBvb207CiAgICAgaW4gPSAodW5zaWduZWQgY2hhciopYXJnOwpAQCAtMzI1LDcgKzM0NCw3IEBACiAgICAgICAgICAgICAgICBzaW5jZSB3ZSBwcm92aWRlIGV2ZXJ5dGhpbmcgdGhhdCB3ZSBoYXZlIC0KICAgICAgICAgICAgICAgIHVubGVzcyB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgQyBsaWJyYXJ5LCBvciBJCiAgICAgICAgICAgICAgICBtaXN1bmRlcnN0b29kIGhvdyBtYnJ0b3djIHdvcmtzLiAqLwotICAgICAgICAgICAgUHlNZW1fRnJlZShyZXMpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShyZXMpOwogICAgICAgICAgICAgaWYgKHNpemUgIT0gTlVMTCkKICAgICAgICAgICAgICAgICAqc2l6ZSA9IChzaXplX3QpLTI7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMzOCw3ICszNTcsNyBAQAogICAgICAgICAgICAgbWVtc2V0KCZtYnMsIDAsIHNpemVvZiBtYnMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCpvdXQgPj0gMHhkODAwICYmICpvdXQgPD0gMHhkZmZmKSB7CisgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX1NVUlJPR0FURSgqb3V0KSkgewogICAgICAgICAgICAgLyogU3Vycm9nYXRlIGNoYXJhY3Rlci4gIEVzY2FwZSB0aGUgb3JpZ2luYWwKICAgICAgICAgICAgICAgIGJ5dGUgc2VxdWVuY2Ugd2l0aCBzdXJyb2dhdGVlc2NhcGUuICovCiAgICAgICAgICAgICBhcmdzaXplIC09IGNvbnZlcnRlZDsKQEAgLTU0NywxNCArNTY2LDIxNSBAQAogCiAjZW5kaWYKIAotLyogT3BlbiBhIGZpbGUuIFVzZSBfd2ZvcGVuKCkgb24gV2luZG93cywgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBsb2NhbGUKLSAgIGVuY29kaW5nIGFuZCB1c2UgZm9wZW4oKSBvdGhlcndpc2UuICovCitzdGF0aWMgaW50CitnZXRfaW5oZXJpdGFibGUoaW50IGZkLCBpbnQgcmFpc2UpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CiAKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghR2V0SGFuZGxlSW5mb3JtYXRpb24oaGFuZGxlLCAmZmxhZ3MpKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIChmbGFncyAmIEhBTkRMRV9GTEFHX0lOSEVSSVQpOworI2Vsc2UKKyAgICBpbnQgZmxhZ3M7CisKKyAgICBmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZELCAwKTsKKyAgICBpZiAoZmxhZ3MgPT0gLTEpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAhKGZsYWdzICYgRkRfQ0xPRVhFQyk7CisjZW5kaWYKK30KKworLyogR2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgorICAgUmV0dXJuIDEgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBjYW4gYmUgaW5oZXJpdGVkLCAwIGlmIGl0IGNhbm5vdCwKKyAgIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworaW50CitfUHlfZ2V0X2luaGVyaXRhYmxlKGludCBmZCkKK3sKKyAgICByZXR1cm4gZ2V0X2luaGVyaXRhYmxlKGZkLCAxKTsKK30KKworc3RhdGljIGludAorc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLCBpbnQgcmFpc2UsIGludCAqYXRvbWljX2ZsYWdfd29ya3MpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPQ0xFWCkgJiYgZGVmaW5lZChGSU9OQ0xFWCkKKyAgICBpbnQgcmVxdWVzdDsKKyAgICBpbnQgZXJyOworI2VsaWYgZGVmaW5lZChIQVZFX0ZDTlRMX0gpCisgICAgaW50IGZsYWdzOworICAgIGludCByZXM7CisjZW5kaWYKKworICAgIC8qIGF0b21pY19mbGFnX3dvcmtzIGNhbiBvbmx5IGJlIHVzZWQgdG8gbWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgbm9uLWluaGVyaXRhYmxlICovCisgICAgYXNzZXJ0KCEoYXRvbWljX2ZsYWdfd29ya3MgIT0gTlVMTCAmJiBpbmhlcml0YWJsZSkpOworCisgICAgaWYgKGF0b21pY19mbGFnX3dvcmtzICE9IE5VTEwgJiYgIWluaGVyaXRhYmxlKSB7CisgICAgICAgIGlmICgqYXRvbWljX2ZsYWdfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgIGludCBpbmhlcml0YWJsZSA9IGdldF9pbmhlcml0YWJsZShmZCwgcmFpc2UpOworICAgICAgICAgICAgaWYgKGluaGVyaXRhYmxlID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICphdG9taWNfZmxhZ193b3JrcyA9ICFpbmhlcml0YWJsZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqYXRvbWljX2ZsYWdfd29ya3MpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoaW5oZXJpdGFibGUpCisgICAgICAgIGZsYWdzID0gSEFORExFX0ZMQUdfSU5IRVJJVDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzID0gMDsKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKGhhbmRsZSwgSEFORExFX0ZMQUdfSU5IRVJJVCwgZmxhZ3MpKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPQ0xFWCkgJiYgZGVmaW5lZChGSU9OQ0xFWCkKKyAgICBpZiAoaW5oZXJpdGFibGUpCisgICAgICAgIHJlcXVlc3QgPSBGSU9OQ0xFWDsKKyAgICBlbHNlCisgICAgICAgIHJlcXVlc3QgPSBGSU9DTEVYOworICAgIGVyciA9IGlvY3RsKGZkLCByZXF1ZXN0LCBOVUxMKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKKworI2Vsc2UKKyAgICBmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZEKTsKKyAgICBpZiAoZmxhZ3MgPCAwKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgJj0gfkZEX0NMT0VYRUM7CisgICAgZWxzZQorICAgICAgICBmbGFncyB8PSBGRF9DTE9FWEVDOworICAgIHJlcyA9IGZjbnRsKGZkLCBGX1NFVEZELCBmbGFncyk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qIE1ha2UgdGhlIGZpbGUgZGVzY3JpcHRvciBub24taW5oZXJpdGFibGUuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBzZXQgZXJybm8gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK21ha2Vfbm9uX2luaGVyaXRhYmxlKGludCBmZCkKK3sKKyAgICByZXR1cm4gc2V0X2luaGVyaXRhYmxlKGZkLCAwLCAwLCBOVUxMKTsKK30KKworLyogU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgorICAgT24gc3VjY2VzczogcmV0dXJuIDAsIG9uIGVycm9yOiByYWlzZSBhbiBleGNlcHRpb24gaWYgcmFpc2UgaXMgbm9uemVybworICAgYW5kIHJldHVybiAtMS4KKworICAgSWYgYXRvbWljX2ZsYWdfd29ya3MgaXMgbm90IE5VTEw6CisKKyAgICAqIGlmICphdG9taWNfZmxhZ193b3Jrcz09LTEsIGNoZWNrIGlmIHRoZSBpbmhlcml0YWJsZSBpcyBzZXQgb24gdGhlIGZpbGUKKyAgICAgIGRlc2NyaXB0b3I6IGlmIHllcywgc2V0ICphdG9taWNfZmxhZ193b3JrcyB0byAxLCBvdGhlcndpc2Ugc2V0IHRvIDAgYW5kCisgICAgICBzZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcKKyAgICAqIGlmICphdG9taWNfZmxhZ193b3Jrcz09MTogZG8gbm90aGluZworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0wOiBzZXQgaW5oZXJpdGFibGUgZmxhZyB0byBGYWxzZQorCisgICBTZXQgYXRvbWljX2ZsYWdfd29ya3MgdG8gTlVMTCBpZiBubyBhdG9taWMgZmxhZyB3YXMgdXNlZCB0byBjcmVhdGUgdGhlCisgICBmaWxlIGRlc2NyaXB0b3IuCisKKyAgIGF0b21pY19mbGFnX3dvcmtzIGNhbiBvbmx5IGJlIHVzZWQgdG8gbWFrZSBhIGZpbGUgZGVzY3JpcHRvcgorICAgbm9uLWluaGVyaXRhYmxlOiBhdG9taWNfZmxhZ193b3JrcyBtdXN0IGJlIE5VTEwgaWYgaW5oZXJpdGFibGU9MS4gKi8KK2ludAorX1B5X3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwgaW50ICphdG9taWNfZmxhZ193b3JrcykKK3sKKyAgICByZXR1cm4gc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSwgMSwgYXRvbWljX2ZsYWdfd29ya3MpOworfQorCisvKiBPcGVuIGEgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MgKHdyYXBwZXIgdG8gb3BlbigpIGZ1bmN0aW9uKS4KKyAgIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZCBub24taW5oZXJpdGFibGUuICovCitpbnQKK19QeV9vcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MpCit7CisgICAgaW50IGZkOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzIHwgT19OT0lOSEVSSVQpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBmZDsKKyNlbHNlCisKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGF0b21pY19mbGFnX3dvcmtzID0gJl9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2Vsc2UKKyAgICBhdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKyAgICBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4gZmQ7CisKKyAgICBpZiAoc2V0X2luaGVyaXRhYmxlKGZkLCAwLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZiAgIC8qICFNU19XSU5ET1dTICovCisgICAgcmV0dXJuIGZkOworfQorCisvKiBPcGVuIGEgZmlsZS4gVXNlIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZQorICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkCisgICBub24taW5oZXJpdGFibGUuICovCiBGSUxFICoKIF9QeV93Zm9wZW4oY29uc3Qgd2NoYXJfdCAqcGF0aCwgY29uc3Qgd2NoYXJfdCAqbW9kZSkKIHsKLSNpZm5kZWYgTVNfV0lORE9XUwogICAgIEZJTEUgKmY7CisjaWZuZGVmIE1TX1dJTkRPV1MKICAgICBjaGFyICpjcGF0aDsKICAgICBjaGFyIGNtb2RlWzEwXTsKICAgICBzaXplX3QgcjsKQEAgLTU2OCwyMSArNzg4LDQyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihjcGF0aCwgY21vZGUpOwogICAgIFB5TWVtX0ZyZWUoY3BhdGgpOwotICAgIHJldHVybiBmOwogI2Vsc2UKLSAgICByZXR1cm4gX3dmb3BlbihwYXRoLCBtb2RlKTsKKyAgICBmID0gX3dmb3BlbihwYXRoLCBtb2RlKTsKICNlbmRpZgorICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKIH0KIAotLyogQ2FsbCBfd2ZvcGVuKCkgb24gV2luZG93cywgb3IgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIGFuZAotICAgY2FsbCBmb3BlbigpIG90aGVyd2lzZS4KKy8qIFdyYXBwZXIgdG8gZm9wZW4oKS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4gKi8KK0ZJTEUqCitfUHlfZm9wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisgICAgRklMRSAqZiA9IGZvcGVuKHBhdGhuYW1lLCBtb2RlKTsKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7Cit9CisKKy8qIE9wZW4gYSBmaWxlLiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0KKyAgIGVuY29kaW5nIGFuZCBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQKKyAgIG5vbi1pbmhlcml0YWJsZS4KIAogICAgUmV0dXJuIHRoZSBuZXcgZmlsZSBvYmplY3Qgb24gc3VjY2Vzcywgb3IgTlVMTCBpZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbiBvcgotICAgKGlmIFB5RXJyX09jY3VycmVkKCkpIG9uIHVuaWNvZGUgZXJyb3IgKi8KLQorICAgKGlmIFB5RXJyX09jY3VycmVkKCkpIG9uIHVuaWNvZGUgZXJyb3IuICovCiBGSUxFKgotX1B5X2ZvcGVuKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQorX1B5X2ZvcGVuX29iaihQeU9iamVjdCAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKIHsKKyAgICBGSUxFICpmOwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICB3Y2hhcl90ICp3cGF0aDsKICAgICB3Y2hhcl90IHdtb2RlWzEwXTsKQEAgLTYwMiwxNiArODQzLDIxIEBACiAgICAgaWYgKHVzaXplID09IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIF93Zm9wZW4od3BhdGgsIHdtb2RlKTsKKyAgICBmID0gX3dmb3Blbih3cGF0aCwgd21vZGUpOwogI2Vsc2UKLSAgICBGSUxFICpmOwogICAgIFB5T2JqZWN0ICpieXRlczsKICAgICBpZiAoIVB5VW5pY29kZV9GU0NvbnZlcnRlcihwYXRoLCAmYnl0ZXMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmID0gZm9wZW4oUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpLCBtb2RlKTsKICAgICBQeV9ERUNSRUYoYnl0ZXMpOwotICAgIHJldHVybiBmOwogI2VuZGlmCisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOwogfQogCiAjaWZkZWYgSEFWRV9SRUFETElOSwpAQCAtNjQ4LDEyICs4OTQsMTIgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoYnVmc2l6IDw9IHIxKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod2J1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1Zik7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHdjc25jcHkoYnVmLCB3YnVmLCBidWZzaXopOwotICAgIFB5TWVtX0ZyZWUod2J1Zik7CisgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICByZXR1cm4gKGludClyMTsKIH0KICNlbmRpZgpAQCAtNjg5LDEyICs5MzUsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChyZXNvbHZlZF9wYXRoX3NpemUgPD0gcikgewotICAgICAgICBQeU1lbV9GcmVlKHdyZXNvbHZlZF9wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3cmVzb2x2ZWRfcGF0aCk7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgd2NzbmNweShyZXNvbHZlZF9wYXRoLCB3cmVzb2x2ZWRfcGF0aCwgcmVzb2x2ZWRfcGF0aF9zaXplKTsKLSAgICBQeU1lbV9GcmVlKHdyZXNvbHZlZF9wYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKHdyZXNvbHZlZF9wYXRoKTsKICAgICByZXR1cm4gcmVzb2x2ZWRfcGF0aDsKIH0KICNlbmRpZgpAQCAtNzA3LDcgKzk1Myw4IEBACiBfUHlfd2dldGN3ZCh3Y2hhcl90ICpidWYsIHNpemVfdCBzaXplKQogewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICByZXR1cm4gX3dnZXRjd2QoYnVmLCBzaXplKTsKKyAgICBpbnQgaXNpemUgPSAoaW50KVB5X01JTihzaXplLCBJTlRfTUFYKTsKKyAgICByZXR1cm4gX3dnZXRjd2QoYnVmLCBpc2l6ZSk7CiAjZWxzZQogICAgIGNoYXIgZm5hbWVbTUFYUEFUSExFTl07CiAgICAgd2NoYXJfdCAqd25hbWU7CkBAIC03MTksMTIgKzk2Niw4MSBAQAogICAgIGlmICh3bmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2l6ZSA8PSBsZW4pIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3bmFtZSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHduYW1lLCBzaXplKTsKLSAgICBQeU1lbV9GcmVlKHduYW1lKTsKKyAgICBQeU1lbV9SYXdGcmVlKHduYW1lKTsKICAgICByZXR1cm4gYnVmOwogI2VuZGlmCiB9CiAKKy8qIER1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvci4gVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZCBhcworICAgbm9uLWluaGVyaXRhYmxlLiBSZXR1cm4gYSBuZXcgZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIE9TRXJyb3IKKyAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLgorCisgICBUaGUgR0lMIGlzIHJlbGVhc2VkIHRvIGNhbGwgZHVwKCkuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBHSUwuICovCitpbnQKK19QeV9kdXAoaW50IGZkKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZ0eXBlOworI2VuZGlmCisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBnZXQgdGhlIGZpbGUgdHlwZSwgaWdub3JlIHRoZSBlcnJvciBpZiBpdCBmYWlsZWQgKi8KKyAgICBmdHlwZSA9IEdldEZpbGVUeXBlKGhhbmRsZSk7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBkdXAoZmQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDaGFyYWN0ZXIgZmlsZXMgbGlrZSBjb25zb2xlIGNhbm5vdCBiZSBtYWtlIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGlmIChmdHlwZSAhPSBGSUxFX1RZUEVfQ0hBUikgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUEZEX0NMT0VYRUMpCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGZkID0gZmNudGwoZmQsIEZfRFVQRkRfQ0xPRVhFQywgMCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2Vsc2UKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBkdXAoZmQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBmZDsKK30KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwppbmRleCBhNjUxNmRjLi4wYTNjYzU5IDEwMDY0NAotLS0gYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYworKysgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIC8qIERvIHRoZSBwYWRkaW5nLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgY2FsbGVyLXN1cHBsaWVkCiAgICBjb250ZW50IGdvZXMuICovCi1zdGF0aWMgUHlfc3NpemVfdAorc3RhdGljIGludAogZmlsbF9wYWRkaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5jaGFycywKICAgICAgICAgICAgICBQeV9VQ1M0IGZpbGxfY2hhciwgUHlfc3NpemVfdCBuX2xwYWRkaW5nLApAQCAtNTU2LDcgKzU1Niw3IEBACiB7CiAgICAgLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGRpZ2l0cywgZGVjaW1hbCwgYW5kIHJlbWFpbmRlci4gKi8KICAgICBQeV9zc2l6ZV90IGRfcG9zID0gZF9zdGFydDsKLSAgICBjb25zdCBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQgPSB3cml0ZXItPmtpbmQ7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGtpbmQgPSB3cml0ZXItPmtpbmQ7CiAgICAgY29uc3Qgdm9pZCAqZGF0YSA9IHdyaXRlci0+ZGF0YTsKICAgICBQeV9zc2l6ZV90IHI7CiAKQEAgLTc1Nyw3ICs3NTcsOCBAQAogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdC0+d2lkdGggPT0gLTEgJiYgZm9ybWF0LT5wcmVjaXNpb24gPT0gLTEpIHsKKyAgICBpZiAoKGZvcm1hdC0+d2lkdGggPT0gLTEgfHwgZm9ybWF0LT53aWR0aCA8PSBsZW4pCisgICAgICAgICYmIChmb3JtYXQtPnByZWNpc2lvbiA9PSAtMSB8fCBmb3JtYXQtPnByZWNpc2lvbiA+PSBsZW4pKSB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwogICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHZhbHVlKTsKICAgICB9CkBAIC03NzAsOSArNzcxLDEzIEBACiAKICAgICBjYWxjX3BhZGRpbmcobGVuLCBmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmFsaWduLCAmbHBhZCwgJnJwYWQsICZ0b3RhbCk7CiAKLSAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih2YWx1ZSwgMCwgbGVuKTsKKyAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOwogICAgIGlmIChscGFkICE9IDAgfHwgcnBhZCAhPSAwKQogICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZvcm1hdC0+ZmlsbF9jaGFyKTsKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHZhbHVlKSA+IG1heGNoYXIpIHsKKyAgICAgICAgUHlfVUNTNCB2YWxtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih2YWx1ZSwgMCwgbGVuKTsKKyAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCB2YWxtYXhjaGFyKTsKKyAgICB9CiAKICAgICAvKiBhbGxvY2F0ZSB0aGUgcmVzdWx0aW5nIHN0cmluZyAqLwogICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCB0b3RhbCwgbWF4Y2hhcikgPT0gLTEpCkBAIC05NzcsOCArOTgyLDcgQEAKICAgICBQeV9zc2l6ZV90IG5fdG90YWw7CiAgICAgaW50IGhhc19kZWNpbWFsOwogICAgIGRvdWJsZSB2YWw7Ci0gICAgUHlfc3NpemVfdCBwcmVjaXNpb247Ci0gICAgUHlfc3NpemVfdCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CisgICAgaW50IHByZWNpc2lvbiwgZGVmYXVsdF9wcmVjaXNpb24gPSA2OwogICAgIFB5X1VDUzQgdHlwZSA9IGZvcm1hdC0+dHlwZTsKICAgICBpbnQgYWRkX3BjdCA9IDA7CiAgICAgUHlfc3NpemVfdCBpbmRleDsKQEAgLTEwNDksMjQgKzEwNTMsMjQgQEAKICAgICAgICAgbl9kaWdpdHMgKz0gMTsKICAgICB9CiAKLSAgICAvKiBTaW5jZSB0aGVyZSBpcyBubyB1bmljb2RlIHZlcnNpb24gb2YgUHlPU19kb3VibGVfdG9fc3RyaW5nLAotICAgICAgIGp1c3QgdXNlIHRoZSA4IGJpdCB2ZXJzaW9uIGFuZCB0aGVuIGNvbnZlcnQgdG8gdW5pY29kZS4gKi8KLSAgICB1bmljb2RlX3RtcCA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGJ1Ziwgbl9kaWdpdHMpOwotICAgIFB5TWVtX0ZyZWUoYnVmKTsKLSAgICBpZiAodW5pY29kZV90bXAgPT0gTlVMTCkKLSAgICAgICAgZ290byBkb25lOwotCiAgICAgaWYgKGZvcm1hdC0+c2lnbiAhPSAnKycgJiYgZm9ybWF0LT5zaWduICE9ICcgJwogICAgICAgICAmJiBmb3JtYXQtPndpZHRoID09IC0xCiAgICAgICAgICYmIGZvcm1hdC0+dHlwZSAhPSAnbicKICAgICAgICAgJiYgIWZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMpCiAgICAgewogICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgcmVzdWx0ID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHVuaWNvZGVfdG1wKTsKLSAgICAgICAgUHlfREVDUkVGKHVuaWNvZGVfdG1wKTsKKyAgICAgICAgcmVzdWx0ID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgYnVmLCBuX2RpZ2l0cyk7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvKiBTaW5jZSB0aGVyZSBpcyBubyB1bmljb2RlIHZlcnNpb24gb2YgUHlPU19kb3VibGVfdG9fc3RyaW5nLAorICAgICAgIGp1c3QgdXNlIHRoZSA4IGJpdCB2ZXJzaW9uIGFuZCB0aGVuIGNvbnZlcnQgdG8gdW5pY29kZS4gKi8KKyAgICB1bmljb2RlX3RtcCA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGJ1Ziwgbl9kaWdpdHMpOworICAgIFB5TWVtX0ZyZWUoYnVmKTsKKyAgICBpZiAodW5pY29kZV90bXAgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCiAgICAgLyogSXMgYSBzaWduIGNoYXJhY3RlciBwcmVzZW50IGluIHRoZSBvdXRwdXQ/ICBJZiBzbywgcmVtZW1iZXIgaXQKICAgICAgICBhbmQgc2tpcCBpdCAqLwogICAgIGluZGV4ID0gMDsKQEAgLTExMzMsOCArMTEzNyw3IEBACiAgICAgUHlfc3NpemVfdCBuX2ltX3RvdGFsOwogICAgIGludCByZV9oYXNfZGVjaW1hbDsKICAgICBpbnQgaW1faGFzX2RlY2ltYWw7Ci0gICAgaW50IHByZWNpc2lvbjsKLSAgICBQeV9zc2l6ZV90IGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKKyAgICBpbnQgcHJlY2lzaW9uLCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CiAgICAgUHlfVUNTNCB0eXBlID0gZm9ybWF0LT50eXBlOwogICAgIFB5X3NzaXplX3QgaV9yZTsKICAgICBQeV9zc2l6ZV90IGlfaW07CmRpZmYgLS1naXQgYS9QeXRob24vZnJvemVuLmMgYi9QeXRob24vZnJvemVuLmMKaW5kZXggMjVmZGMxNy4uOWJjNjYyYiAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zyb3plbi5jCisrKyBiL1B5dGhvbi9mcm96ZW4uYwpAQCAtMjgsNyArMjgsNyBAQAogCiAjZGVmaW5lIFNJWkUgKGludClzaXplb2YoTV9fX2hlbGxvX18pCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CiAgICAgLyogaW1wb3J0bGliICovCiAgICAgeyJfZnJvemVuX2ltcG9ydGxpYiIsIF9QeV9NX19pbXBvcnRsaWIsIChpbnQpc2l6ZW9mKF9QeV9NX19pbXBvcnRsaWIpfSwKICAgICAvKiBUZXN0IG1vZHVsZSAqLwpAQCAtNDIsNCArNDIsNCBAQAogLyogRW1iZWRkaW5nIGFwcHMgbWF5IGNoYW5nZSB0aGlzIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlaXIgZmF2b3JpdGUKICAgIGNvbGxlY3Rpb24gb2YgZnJvemVuIG1vZHVsZXM6ICovCiAKLXN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzID0gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXM7Citjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlcyA9IF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zyb3plbm1haW4uYyBiL1B5dGhvbi9mcm96ZW5tYWluLmMKaW5kZXggOGIxZjJkNC4uNTVkMDVmYyAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zyb3plbm1haW4uYworKysgYi9QeXRob24vZnJvemVubWFpbi5jCkBAIC0xNiwxOSArMTYsMTkgQEAKIFB5X0Zyb3plbk1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICAgIGNoYXIgKnA7Ci0gICAgaW50IGksIG4sIHN0czsKKyAgICBpbnQgaSwgbiwgc3RzID0gMTsKICAgICBpbnQgaW5zcGVjdCA9IDA7CiAgICAgaW50IHVuYnVmZmVyZWQgPSAwOwotICAgIGNoYXIgKm9sZGxvYzsKLSAgICB3Y2hhcl90ICoqYXJndl9jb3B5OworICAgIGNoYXIgKm9sZGxvYyA9IE5VTEw7CisgICAgd2NoYXJfdCAqKmFyZ3ZfY29weSA9IE5VTEw7CiAgICAgLyogV2UgbmVlZCBhIHNlY29uZCBjb3BpZXMsIGFzIFB5dGhvbiBtaWdodCBtb2RpZnkgdGhlIGZpcnN0IG9uZS4gKi8KLSAgICB3Y2hhcl90ICoqYXJndl9jb3B5MjsKKyAgICB3Y2hhcl90ICoqYXJndl9jb3B5MiA9IE5VTEw7CiAKLSAgICBhcmd2X2NvcHkgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSphcmdjKTsKLSAgICBhcmd2X2NvcHkyID0gUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqYXJnYyk7CisgICAgYXJndl9jb3B5ID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKKyAgICBhcmd2X2NvcHkyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKICAgICBpZiAoIWFyZ3ZfY29weSB8fCAhYXJndl9jb3B5MikgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICBQeV9Gcm96ZW5GbGFnID0gMTsgLyogU3VwcHJlc3MgZXJyb3JzIGZyb20gZ2V0cGF0aC5jICovCkBAIC00NCwzMiArNDQsMjYgQEAKICAgICAgICAgc2V0YnVmKHN0ZGVyciwgKGNoYXIgKilOVUxMKTsKICAgICB9CiAKLSAgICBvbGRsb2MgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKwogICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0jaWZkZWYgSEFWRV9CUk9LRU5fTUJTVE9XQ1MKLSAgICAgICAgc2l6ZV90IGFyZ3NpemUgPSBzdHJsZW4oYXJndltpXSk7Ci0jZWxzZQotICAgICAgICBzaXplX3QgYXJnc2l6ZSA9IG1ic3Rvd2NzKE5VTEwsIGFyZ3ZbaV0sIDApOwotI2VuZGlmCi0gICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgaWYgKGFyZ3NpemUgPT0gKHNpemVfdCktMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAlZCB0byBzdHJpbmdcbiIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgYXJndl9jb3B5W2ldID0gUHlNZW1fTWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGFyZ3ZfY29weVtpXSA9IF9QeV9jaGFyMndjaGFyKGFyZ3ZbaV0sIE5VTEwpOwogICAgICAgICBhcmd2X2NvcHkyW2ldID0gYXJndl9jb3B5W2ldOwogICAgICAgICBpZiAoIWFyZ3ZfY29weVtpXSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50ID0gbWJzdG93Y3MoYXJndl9jb3B5W2ldLCBhcmd2W2ldLCBhcmdzaXplKzEpOwotICAgICAgICBpZiAoY291bnQgPT0gKHNpemVfdCktMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAlZCB0byBzdHJpbmdcbiIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOworICAgICAgICAgICAgYXJnYyA9IGk7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgfQogICAgIHNldGxvY2FsZShMQ19BTEwsIG9sZGxvYyk7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOworICAgIG9sZGxvYyA9IE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlJbml0RnJvemVuRXh0ZW5zaW9ucygpOwpAQCAtMTAzLDEwICs5NywxNCBAQAogICAgIFB5V2luRnJlZXplX0V4ZVRlcm0oKTsKICNlbmRpZgogICAgIFB5X0ZpbmFsaXplKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTJbaV0pOworCitlcnJvcjoKKyAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weSk7CisgICAgaWYgKGFyZ3ZfY29weTIpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5MltpXSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgfQotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5KTsKLSAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTIpOworICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICByZXR1cm4gc3RzOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Z1dHVyZS5jIGIvUHl0aG9uL2Z1dHVyZS5jCmluZGV4IGQyNGFlNDEuLjgxZWFiNTQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mdXR1cmUuYworKysgYi9QeXRob24vZnV0dXJlLmMKQEAgLTExLDcgKzExLDcgQEAKICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0cyBtdXN0IG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUiCiAKIHN0YXRpYyBpbnQKLWZ1dHVyZV9jaGVja19mZWF0dXJlcyhQeUZ1dHVyZUZlYXR1cmVzICpmZiwgc3RtdF90eSBzLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2Z1dHVyZV9jaGVja19mZWF0dXJlcyhQeUZ1dHVyZUZlYXR1cmVzICpmZiwgc3RtdF90eSBzLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgaW50IGk7CiAgICAgYXNkbF9zZXEgKm5hbWVzOwpAQCAtNDMsMTIgKzQzLDEyIEBACiAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZlYXR1cmUsICJicmFjZXMiKSA9PSAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNoYW5jZSIpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVU5ERUZJTkVEX0ZVVFVSRV9GRUFUVVJFLCBmZWF0dXJlKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNTYsMTMgKzU2LDE3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWZ1dHVyZV9wYXJzZShQeUZ1dHVyZUZlYXR1cmVzICpmZiwgbW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitmdXR1cmVfcGFyc2UoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKLSAgICBpbnQgaSwgZm91bmRfZG9jc3RyaW5nID0gMCwgZG9uZSA9IDAsIHByZXZfbGluZSA9IDA7CisgICAgaW50IGksIGRvbmUgPSAwLCBwcmV2X2xpbmUgPSAwOworICAgIHN0bXRfdHkgZmlyc3Q7CiAKICAgICBpZiAoIShtb2QtPmtpbmQgPT0gTW9kdWxlX2tpbmQgfHwgbW9kLT5raW5kID09IEludGVyYWN0aXZlX2tpbmQpKQogICAgICAgICByZXR1cm4gMTsKIAorICAgIGlmIChhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKwogICAgIC8qIEEgc3Vic2VxdWVudCBwYXNzIHdpbGwgZGV0ZWN0IGZ1dHVyZSBpbXBvcnRzIHRoYXQgZG9uJ3QKICAgICAgICBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZXJlJ3Mgb25lIGNhc2UsCiAgICAgICAgaG93ZXZlciwgdGhhdCBpcyBlYXNpZXIgdG8gaGFuZGxlIGhlcmU6IEEgc2VyaWVzIG9mIGltcG9ydHMKQEAgLTcxLDggKzc1LDEzIEBACiAgICAgICAgYnV0IGlzIHByZWNlZGVkIGJ5IGEgcmVndWxhciBpbXBvcnQuCiAgICAgKi8KIAorICAgIGkgPSAwOworICAgIGZpcnN0ID0gKHN0bXRfdHkpYXNkbF9zZXFfR0VUKG1vZC0+di5Nb2R1bGUuYm9keSwgaSk7CisgICAgaWYgKGZpcnN0LT5raW5kID09IEV4cHJfa2luZCAmJiBmaXJzdC0+di5FeHByLnZhbHVlLT5raW5kID09IFN0cl9raW5kKQorICAgICAgICBpKys7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXNkbF9zZXFfTEVOKG1vZC0+di5Nb2R1bGUuYm9keSk7IGkrKykgeworCisgICAgZm9yICg7IGkgPCBhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KTsgaSsrKSB7CiAgICAgICAgIHN0bXRfdHkgcyA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChtb2QtPnYuTW9kdWxlLmJvZHksIGkpOwogCiAgICAgICAgIGlmIChkb25lICYmIHMtPmxpbmVubyA+IHByZXZfbGluZSkKQEAgLTkyLDMyICsxMDEsMjcgQEAKICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfTEFURV9GVVRVUkUpOwotICAgICAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKGZmLCBzLCBmaWxlbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGZmLT5mZl9saW5lbm8gPSBzLT5saW5lbm87CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzLT5raW5kID09IEV4cHJfa2luZCAmJiAhZm91bmRfZG9jc3RyaW5nKSB7Ci0gICAgICAgICAgICBleHByX3R5IGUgPSBzLT52LkV4cHIudmFsdWU7Ci0gICAgICAgICAgICBpZiAoZS0+a2luZCAhPSBTdHJfa2luZCkKLSAgICAgICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3VuZF9kb2NzdHJpbmcgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMTsKIH0KIAogCiBQeUZ1dHVyZUZlYXR1cmVzICoKLVB5RnV0dXJlX0Zyb21BU1QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBQeUZ1dHVyZUZlYXR1cmVzICpmZjsKIApAQCAtMTM1LDMgKzEzOSwxOCBAQAogICAgIH0KICAgICByZXR1cm4gZmY7CiB9CisKKworUHlGdXR1cmVGZWF0dXJlcyAqCitQeUZ1dHVyZV9Gcm9tQVNUKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0cikKK3sKKyAgICBQeUZ1dHVyZUZlYXR1cmVzICpmZjsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZmYgPSBQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZCwgZmlsZW5hbWUpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGZmOworfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGFyZ3MuYyBiL1B5dGhvbi9nZXRhcmdzLmMKaW5kZXggYWU5MzFiOS4uNjA4NDU2OCAxMDA2NDQKLS0tIGEvUHl0aG9uL2dldGFyZ3MuYworKysgYi9QeXRob24vZ2V0YXJncy5jCkBAIC00NiwxNCArNDYsMTYgQEAKIH0gZnJlZWxpc3RlbnRyeV90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIGludCBmaXJzdF9hdmFpbGFibGU7CiAgIGZyZWVsaXN0ZW50cnlfdCAqZW50cmllczsKKyAgaW50IGZpcnN0X2F2YWlsYWJsZTsKKyAgaW50IGVudHJpZXNfbWFsbG9jZWQ7CiB9IGZyZWVsaXN0X3Q7CiAKKyNkZWZpbmUgU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMgOAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgaW50IHZnZXRhcmdzMShQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QgKiwgaW50KTsKLXN0YXRpYyB2b2lkIHNldGVycm9yKGludCwgY29uc3QgY2hhciAqLCBpbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworc3RhdGljIHZvaWQgc2V0ZXJyb3IoUHlfc3NpemVfdCwgY29uc3QgY2hhciAqLCBpbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogc3RhdGljIGNoYXIgKmNvbnZlcnRpdGVtKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiosIHZhX2xpc3QgKiwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIHNpemVfdCwgZnJlZWxpc3RfdCAqKTsKIHN0YXRpYyBjaGFyICpjb252ZXJ0dHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKiwgdmFfbGlzdCAqLCBpbnQsCkBAIC0xODcsNyArMTg5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlbGlzdC0+ZW50cmllc1tpbmRleF0uaXRlbSk7CiAgICAgICB9CiAgICAgfQotICAgIFB5TWVtX0ZSRUUoZnJlZWxpc3QtPmVudHJpZXMpOworICAgIGlmIChmcmVlbGlzdC0+ZW50cmllc19tYWxsb2NlZCkKKyAgICAgICAgUHlNZW1fRlJFRShmcmVlbGlzdC0+ZW50cmllcyk7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTk3LDYgKzIwMCw4IEBACiB7CiAgICAgY2hhciBtc2didWZbMjU2XTsKICAgICBpbnQgbGV2ZWxzWzMyXTsKKyAgICBmcmVlbGlzdGVudHJ5X3Qgc3RhdGljX2VudHJpZXNbU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVNdOworICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7c3RhdGljX2VudHJpZXMsIDAsIDB9OwogICAgIGNvbnN0IGNoYXIgKmZuYW1lID0gTlVMTDsKICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gTlVMTDsKICAgICBpbnQgbWluID0gLTE7CkBAIC0yMDYsNyArMjExLDYgQEAKICAgICBjb25zdCBjaGFyICpmb3JtYXRzYXZlID0gZm9ybWF0OwogICAgIFB5X3NzaXplX3QgaSwgbGVuOwogICAgIGNoYXIgKm1zZzsKLSAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0gezAsIE5VTEx9OwogICAgIGludCBjb21wYXQgPSBmbGFncyAmIEZMQUdfQ09NUEFUOwogCiAgICAgYXNzZXJ0KGNvbXBhdCB8fCAoYXJncyAhPSAoUHlPYmplY3QqKU5VTEwpKTsKQEAgLTI0MCwxNSArMjQ0LDE1IEBACiAgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWF0OwogICAgICAgICAgICAgZW5kZm10ID0gMTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIGlmIChsZXZlbCA9PSAwKQorICAgICAgICAgICAgICAgIG1pbiA9IG1heDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGxldmVsID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnTycpCi0gICAgICAgICAgICAgICAgICAgIG1heCsrOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKQogICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnZScpIC8qIHNraXAgZW5jb2RlZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4Kys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICd8JykKLSAgICAgICAgICAgICAgICAgICAgbWluID0gbWF4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2MiwxMCArMjY2LDEzIEBACiAKICAgICBmb3JtYXQgPSBmb3JtYXRzYXZlOwogCi0gICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7Ci0gICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobWF4ID4gU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMpIHsKKyAgICAgICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7CisgICAgICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMTsKICAgICB9CiAKICAgICBpZiAoY29tcGF0KSB7CkBAIC0zNTAsNyArMzU3LDcgQEAKIAogCiBzdGF0aWMgdm9pZAotc2V0ZXJyb3IoaW50IGlhcmcsIGNvbnN0IGNoYXIgKm1zZywgaW50ICpsZXZlbHMsIGNvbnN0IGNoYXIgKmZuYW1lLAorc2V0ZXJyb3IoUHlfc3NpemVfdCBpYXJnLCBjb25zdCBjaGFyICptc2csIGludCAqbGV2ZWxzLCBjb25zdCBjaGFyICpmbmFtZSwKICAgICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgY2hhciBidWZbNTEyXTsKQEAgLTM2NiwxMCArMzczLDEwIEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGlhcmcgIT0gMCkgewogICAgICAgICAgICAgUHlPU19zbnByaW50ZihwLCBzaXplb2YoYnVmKSAtIChwIC0gYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICVkIiwgaWFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwgaWFyZyk7CiAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwotICAgICAgICAgICAgd2hpbGUgKGxldmVsc1tpXSA+IDAgJiYgaSA8IDMyICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCAzMiAmJiBsZXZlbHNbaV0gPiAwICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgewogICAgICAgICAgICAgICAgIFB5T1Nfc25wcmludGYocCwgc2l6ZW9mKGJ1ZikgLSAocCAtIGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBpdGVtICVkIiwgbGV2ZWxzW2ldLTEpOwogICAgICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwpAQCAtNDE0LDYgKzQyMSw3IEBACiAgICAgaW50IG4gPSAwOwogICAgIGNvbnN0IGNoYXIgKmZvcm1hdCA9ICpwX2Zvcm1hdDsKICAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IGxlbjsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgaW50IGMgPSAqZm9ybWF0Kys7CkBAIC00NDMsMTIgKzQ1MSwyMCBAQAogICAgICAgICByZXR1cm4gbXNnYnVmOwogICAgIH0KIAotICAgIGlmICgoaSA9IFB5U2VxdWVuY2VfU2l6ZShhcmcpKSAhPSBuKSB7CisgICAgbGVuID0gUHlTZXF1ZW5jZV9TaXplKGFyZyk7CisgICAgaWYgKGxlbiAhPSBuKSB7CiAgICAgICAgIGxldmVsc1swXSA9IDA7Ci0gICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAotICAgICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID8gImV4cGVjdGVkICVkIGFyZ3VtZW50cywgbm90ICVkIiA6Ci0gICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzZXF1ZW5jZSBvZiBsZW5ndGggJWQsIG5vdCAlZCIsCi0gICAgICAgICAgICAgICAgICBuLCBpKTsKKyAgICAgICAgaWYgKHRvcGxldmVsKSB7CisgICAgICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVkIGFyZ3VtZW50cywgbm90ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBsZW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHNlcXVlbmNlIG9mIGxlbmd0aCAlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBsZW4pOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtc2didWY7CiAgICAgfQogCkBAIC01NjMsNyArNTc5LDcgQEAKICAgICAgICAgICAgICAgICAic2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gaW50Iik7IFwKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCIiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7IFwKICAgICAgICAgfSBcCi0gICAgICAgICpxPXM7IFwKKyAgICAgICAgKnEgPSAoaW50KXM7IFwKICAgICB9CiAjZGVmaW5lIEJVRkZFUl9MRU4gICAgICAoKGZsYWdzICYgRkxBR19TSVpFX1QpID8gKnEyOipxKQogI2RlZmluZSBSRVRVUk5fRVJSX09DQ1VSUkVEIHJldHVybiBtc2didWYKQEAgLTE0MTksOSArMTQzNSwxMSBAQAogICAgIGNvbnN0IGNoYXIgKmZuYW1lLCAqbXNnLCAqY3VzdG9tX21zZywgKmtleXdvcmQ7CiAgICAgaW50IG1pbiA9IElOVF9NQVg7CiAgICAgaW50IG1heCA9IElOVF9NQVg7Ci0gICAgaW50IGksIGxlbiwgbmFyZ3MsIG5rZXl3b3JkczsKKyAgICBpbnQgaSwgbGVuOworICAgIFB5X3NzaXplX3QgbmFyZ3MsIG5rZXl3b3JkczsKICAgICBQeU9iamVjdCAqY3VycmVudF9hcmc7Ci0gICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHswLCBOVUxMfTsKKyAgICBmcmVlbGlzdGVudHJ5X3Qgc3RhdGljX2VudHJpZXNbU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVNdOworICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7c3RhdGljX2VudHJpZXMsIDAsIDB9OwogCiAgICAgYXNzZXJ0KGFyZ3MgIT0gTlVMTCAmJiBQeVR1cGxlX0NoZWNrKGFyZ3MpKTsKICAgICBhc3NlcnQoa2V5d29yZHMgPT0gTlVMTCB8fCBQeURpY3RfQ2hlY2soa2V5d29yZHMpKTsKQEAgLTE0NDUsMTcgKzE0NjMsMjAgQEAKICAgICBmb3IgKGxlbj0wOyBrd2xpc3RbbGVuXTsgbGVuKyspCiAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIGxlbik7Ci0gICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobGVuID4gU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMpIHsKKyAgICAgICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIGxlbik7CisgICAgICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMTsKICAgICB9CiAKICAgICBuYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoYXJncyk7CiAgICAgbmtleXdvcmRzID0gKGtleXdvcmRzID09IE5VTEwpID8gMCA6IFB5RGljdF9TaXplKGtleXdvcmRzKTsKICAgICBpZiAobmFyZ3MgKyBua2V5d29yZHMgPiBsZW4pIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcyVzIHRha2VzIGF0IG1vc3QgJWQgYXJndW1lbnQlcyAoJWQgZ2l2ZW4pIiwKKyAgICAgICAgICAgICAgICAgICAgICIlcyVzIHRha2VzIGF0IG1vc3QgJWQgYXJndW1lbnQlcyAoJXpkIGdpdmVuKSIsCiAgICAgICAgICAgICAgICAgICAgICAoZm5hbWUgPT0gTlVMTCkgPyAiZnVuY3Rpb24iIDogZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAoZm5hbWUgPT0gTlVMTCkgPyAiIiA6ICIoKSIsCiAgICAgICAgICAgICAgICAgICAgICBsZW4sCkBAIC0xNTc0LDIwICsxNTk1LDE1IEBACiAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKICAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGtleXdvcmRzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CiAgICAgICAgICAgICBpbnQgbWF0Y2ggPSAwOwotICAgICAgICAgICAgY2hhciAqa3M7CiAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhrZXkpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBjbGVhbnJldHVybigwLCAmZnJlZWxpc3QpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogY2hlY2sgdGhhdCBfUHlVbmljb2RlX0FzU3RyaW5nKCkgcmVzdWx0IGlzIG5vdCBOVUxMICovCi0gICAgICAgICAgICBrcyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoa2V5KTsKLSAgICAgICAgICAgIGlmIChrcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RyY21wKGtzLCBrd2xpc3RbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksIGt3bGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW1hdGNoKSB7CmRpZmYgLS1naXQgYS9QeXRob24vZ2V0Y3dkLmMgYi9QeXRob24vZ2V0Y3dkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZWRiZDEuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL2dldGN3ZC5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotCi0vKiBUd28gUEQgZ2V0Y3dkKCkgaW1wbGVtZW50YXRpb25zLgotICAgQXV0aG9yOiBHdWlkbyB2YW4gUm9zc3VtLCBDV0kgQW1zdGVyZGFtLCBKYW4gMTk5MSwgPGd1aWRvQGN3aS5ubD4uICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZmRlZiBIQVZFX0dFVFdECi0KLS8qIFZlcnNpb24gZm9yIEJTRCBzeXN0ZW1zIC0tIHVzZSBnZXR3ZCgpICovCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBNQVhQQVRITEVOCi0jaWYgZGVmaW5lZChQQVRIX01BWCkgJiYgUEFUSF9NQVggPiAxMDI0Ci0jZGVmaW5lIE1BWFBBVEhMRU4gUEFUSF9NQVgKLSNlbHNlCi0jZGVmaW5lIE1BWFBBVEhMRU4gMTAyNAotI2VuZGlmCi0jZW5kaWYKLQotZXh0ZXJuIGNoYXIgKmdldHdkKGNoYXIgKik7Ci0KLWNoYXIgKgotZ2V0Y3dkKGNoYXIgKmJ1ZiwgaW50IHNpemUpCi17Ci0gICAgY2hhciBsb2NhbGJ1ZltNQVhQQVRITEVOKzFdOwotICAgIGNoYXIgKnJldDsKLQotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXQgPSBnZXR3ZChsb2NhbGJ1Zik7Ci0gICAgaWYgKHJldCAhPSBOVUxMICYmIHN0cmxlbihsb2NhbGJ1ZikgPj0gKHNpemVfdClzaXplKSB7Ci0gICAgICAgIGVycm5vID0gRVJBTkdFOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm5vID0gRUFDQ0VTOyAvKiBNb3N0IGxpa2VseSBlcnJvciAqLwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc3RybmNweShidWYsIGxvY2FsYnVmLCBzaXplKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi0jZWxzZSAvKiAhSEFWRV9HRVRXRCAqLwotCi0vKiBWZXJzaW9uIGZvciByZWFsbHkgb2xkIFVOSVggc3lzdGVtcyAtLSB1c2UgcGlwZSBmcm9tIHB3ZCAqLwotCi0jaWZuZGVmIFBXRF9DTUQKLSNkZWZpbmUgUFdEX0NNRCAiL2Jpbi9wd2QiCi0jZW5kaWYKLQotY2hhciAqCi1nZXRjd2QoY2hhciAqYnVmLCBpbnQgc2l6ZSkKLXsKLSAgICBGSUxFICpmcDsKLSAgICBjaGFyICpwOwotICAgIGludCBzdHM7Ci0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmICgoZnAgPSBwb3BlbihQV0RfQ01ELCAiciIpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZmdldHMoYnVmLCBzaXplLCBmcCkgPT0gTlVMTCB8fCAoc3RzID0gcGNsb3NlKGZwKSkgIT0gMCkgewotICAgICAgICBlcnJubyA9IEVBQ0NFUzsgLyogTW9zdCBsaWtlbHkgZXJyb3IgKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1xuJzsgcCsrKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgICpwID0gJ1wwJzsKLSAgICByZXR1cm4gYnVmOwotfQotCi0jZW5kaWYgLyogIUhBVkVfR0VUV0QgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnQuYyBiL1B5dGhvbi9pbXBvcnQuYwppbmRleCBlOTFjZWY4Li41ODRiMWI0IDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0LmMKKysrIGIvUHl0aG9uL2ltcG9ydC5jCkBAIC0xOSwyMiArMTksMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiBNU19XSU5ET1dTCi0vKiBmb3Igc3RhdC5zdF9tb2RlICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKLS8qIGZvciBfbWtkaXIgKi8KLSNpbmNsdWRlIDxkaXJlY3QuaD4KLSNlbmRpZgotCi0KICNkZWZpbmUgQ0FDSEVESVIgIl9fcHljYWNoZV9fIgogCiAvKiBTZWUgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkgYmVsb3cgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9ucyA9IE5VTEw7CiAKLS8qIEZ1bmN0aW9uIGZyb20gUGFyc2VyL3Rva2VuaXplci5jICovCi1leHRlcm4gY2hhciAqIFB5VG9rZW5pemVyX0ZpbmRFbmNvZGluZ0ZpbGVuYW1lKGludCwgUHlPYmplY3QgKik7Ci0KIC8qIFRoaXMgdGFibGUgaXMgZGVmaW5lZCBpbiBjb25maWcuYzogKi8KIGV4dGVybiBzdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXTsKIApAQCAtOTMsOCArODIsMTAgQEAKICAgICBpbnQgZXJyID0gMDsKIAogICAgIHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKTsKLSAgICBpZiAocGF0aF9ob29rcyA9PSBOVUxMKQorICAgIGlmIChwYXRoX2hvb2tzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLnBhdGhfaG9va3MiKTsKICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCiAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGluc3RhbGxpbmcgemlwaW1wb3J0IGhvb2tcbiIpOwpAQCAtMjA0LDggKzE5NSwxMSBAQAogICAgIGlmIChpbXBvcnRfbG9ja19sZXZlbCA+IDEpIHsKICAgICAgICAgLyogRm9ya2VkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgaW1wb3J0ICovCiAgICAgICAgIGxvbmcgbWUgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7Ci0gICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhpbXBvcnRfbG9jaywgMCk7Ci0gICAgICAgIC8qIFhYWDogY2FuIHRoZSBwcmV2aW91cyBsaW5lIGZhaWw/ICovCisgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY291bGQgZmFpbCBpZiB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGQsIGJ1dCBmb3JraW5nIGFzCisgICAgICAgICAgIGEgc2lkZS1lZmZlY3Qgb2YgYW4gaW1wb3J0IGlzIGEpIHJhcmUsIGIpIG51dHMsIGFuZCBjKSBkaWZmaWN1bHQgdG8KKyAgICAgICAgICAgZG8gdGhhbmtzIHRvIHRoZSBsb2NrIG9ubHkgYmVpbmcgaGVsZCB3aGVuIGRvaW5nIGluZGl2aWR1YWwgbW9kdWxlCisgICAgICAgICAgIGxvY2tzIHBlciBpbXBvcnQuICovCisgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhpbXBvcnRfbG9jaywgTk9XQUlUX0xPQ0spOwogICAgICAgICBpbXBvcnRfbG9ja190aHJlYWQgPSBtZTsKICAgICAgICAgaW1wb3J0X2xvY2tfbGV2ZWwtLTsKICAgICB9IGVsc2UgewpAQCAtMjgwLDYgKzI3NCw3IEBACiAgICAgInBhdGgiLCAiYXJndiIsICJwczEiLCAicHMyIiwKICAgICAibGFzdF90eXBlIiwgImxhc3RfdmFsdWUiLCAibGFzdF90cmFjZWJhY2siLAogICAgICJwYXRoX2hvb2tzIiwgInBhdGhfaW1wb3J0ZXJfY2FjaGUiLCAibWV0YV9wYXRoIiwKKyAgICAiX19pbnRlcmFjdGl2ZWhvb2tfXyIsCiAgICAgLyogbWlzYyBzdHVmZiAqLwogICAgICJmbGFncyIsICJmbG9hdF9pbmZvIiwKICAgICBOVUxMCkBAIC0yOTIsMTYgKzI4NywxNyBAQAogICAgIE5VTEwKIH07CiAKLQogLyogVW4taW5pdGlhbGl6ZSB0aGluZ3MsIGFzIGdvb2QgYXMgd2UgY2FuICovCiAKIHZvaWQKIFB5SW1wb3J0X0NsZWFudXAodm9pZCkKIHsKLSAgICBQeV9zc2l6ZV90IHBvcywgbmRvbmU7CisgICAgUHlfc3NpemVfdCBwb3M7CiAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVlLCAqZGljdDsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKICAgICBQeU9iamVjdCAqbW9kdWxlcyA9IGludGVycC0+bW9kdWxlczsKKyAgICBQeU9iamVjdCAqYnVpbHRpbnMgPSBpbnRlcnAtPmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICp3ZWFrbGlzdCA9IE5VTEw7CiAKICAgICBpZiAobW9kdWxlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm47IC8qIEFscmVhZHkgZG9uZSAqLwpAQCAtMzEyLDYgKzMwOCw4IEBACiAgICAgICAgZGVsZXRlZCAqbGFzdCogb2YgYWxsLCB0aGV5IHdvdWxkIGNvbWUgdG9vIGxhdGUgaW4gdGhlIG5vcm1hbAogICAgICAgIGRlc3RydWN0aW9uIG9yZGVyLiAgU2lnaC4gKi8KIAorICAgIC8qIFhYWCBQZXJoYXBzIHRoZXNlIHByZWNhdXRpb25zIGFyZSBvYnNvbGV0ZS4gV2hvIGtub3dzPyAqLworCiAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKICAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgZGljdCA9IFB5TW9kdWxlX0dldERpY3QodmFsdWUpOwpAQCAtMzM5LDg3ICszMzcsODcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIEZpcnN0LCBkZWxldGUgX19tYWluX18gKi8KLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJfX21haW5fXyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIF9fbWFpbl9fXG4iKTsKLSAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgIl9fbWFpbl9fIiwgUHlfTm9uZSk7CisgICAgLyogV2UgcHJlcGFyZSBhIGxpc3Qgd2hpY2ggd2lsbCByZWNlaXZlIChuYW1lLCB3ZWFrcmVmKSB0dXBsZXMgb2YKKyAgICAgICBtb2R1bGVzIHdoZW4gdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLiAgVGhlIG5hbWUgaXMgdXNlZAorICAgICAgIGZvciBkaWFnbm9zaXMgbWVzc2FnZXMgKGluIHZlcmJvc2UgbW9kZSksIHdoaWxlIHRoZSB3ZWFrcmVmIGhlbHBzCisgICAgICAgZGV0ZWN0IHRob3NlIG1vZHVsZXMgd2hpY2ggaGF2ZSBiZWVuIGhlbGQgYWxpdmUuICovCisgICAgd2Vha2xpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmICh3ZWFrbGlzdCA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworCisjZGVmaW5lIFNUT1JFX01PRFVMRV9XRUFLUkVGKG5hbWUsIG1vZCkgXAorICAgIGlmICh3ZWFrbGlzdCAhPSBOVUxMKSB7IFwKKyAgICAgICAgUHlPYmplY3QgKndyID0gUHlXZWFrcmVmX05ld1JlZihtb2QsIE5VTEwpOyBcCisgICAgICAgIGlmIChuYW1lICYmIHdyKSB7IFwKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgd3IpOyBcCisgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHdlYWtsaXN0LCB0dXApOyBcCisgICAgICAgICAgICBQeV9YREVDUkVGKHR1cCk7IFwKKyAgICAgICAgfSBcCisgICAgICAgIFB5X1hERUNSRUYod3IpOyBcCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSBcCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOyBcCiAgICAgfQogCi0gICAgLyogVGhlIHNwZWNpYWwgdHJlYXRtZW50IG9mICJidWlsdGlucyIgaGVyZSBpcyBiZWNhdXNlIGV2ZW4KLSAgICAgICB3aGVuIGl0J3Mgbm90IHJlZmVyZW5jZWQgYXMgYSBtb2R1bGUsIGl0cyBkaWN0aW9uYXJ5IGlzCi0gICAgICAgcmVmZXJlbmNlZCBieSBhbG1vc3QgZXZlcnkgbW9kdWxlJ3MgX19idWlsdGluc19fLiAgU2luY2UKLSAgICAgICBkZWxldGluZyBhIG1vZHVsZSBjbGVhcnMgaXRzIGRpY3Rpb25hcnkgKGV2ZW4gaWYgdGhlcmUgYXJlCi0gICAgICAgcmVmZXJlbmNlcyBsZWZ0IHRvIGl0KSwgd2UgbmVlZCB0byBkZWxldGUgdGhlICJidWlsdGlucyIKLSAgICAgICBtb2R1bGUgbGFzdC4gIExpa2V3aXNlLCB3ZSBkb24ndCBkZWxldGUgc3lzIHVudGlsIHRoZSB2ZXJ5Ci0gICAgICAgZW5kIGJlY2F1c2UgaXQgaXMgaW1wbGljaXRseSByZWZlcmVuY2VkIChlLmcuIGJ5IHByaW50KS4KLQotICAgICAgIEFsc28gbm90ZSB0aGF0IHdlICdkZWxldGUnIG1vZHVsZXMgYnkgcmVwbGFjaW5nIHRoZWlyIGVudHJ5Ci0gICAgICAgaW4gdGhlIG1vZHVsZXMgZGljdCB3aXRoIE5vbmUsIHJhdGhlciB0aGFuIHJlYWxseSBkZWxldGluZwotICAgICAgIHRoZW07IHRoaXMgYXZvaWRzIGEgcmVoYXNoIG9mIHRoZSBtb2R1bGVzIGRpY3Rpb25hcnkgYW5kCi0gICAgICAgYWxzbyBtYXJrcyB0aGVtIGFzICJub24gZXhpc3RlbnQiIHNvIHRoZXkgd29uJ3QgYmUKLSAgICAgICByZS1pbXBvcnRlZC4gKi8KLQotICAgIC8qIE5leHQsIHJlcGVhdGVkbHkgZGVsZXRlIG1vZHVsZXMgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZgotICAgICAgIG9uZSAoc2tpcHBpbmcgYnVpbHRpbnMgYW5kIHN5cykgYW5kIGRlbGV0ZSB0aGVtICovCi0gICAgZG8gewotICAgICAgICBuZG9uZSA9IDA7Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPm9iX3JlZmNudCAhPSAxKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJidWlsdGlucyIpID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJzeXMiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigKLSAgICAgICAgICAgICAgICAgICAgICAgICIjIGNsZWFudXBbMV0gJVVcbiIsIGtleSk7Ci0gICAgICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShtb2R1bGVzLCBrZXksIFB5X05vbmUpOwotICAgICAgICAgICAgICAgIG5kb25lKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChuZG9uZSA+IDApOwotCi0gICAgLyogTmV4dCwgZGVsZXRlIGFsbCBtb2R1bGVzIChzdGlsbCBza2lwcGluZyBidWlsdGlucyBhbmQgc3lzKSAqLworICAgIC8qIFJlbW92ZSBhbGwgbW9kdWxlcyBmcm9tIHN5cy5tb2R1bGVzLCBob3BpbmcgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICBjYW4gcmVjbGFpbSBtb3N0IG9mIHRoZW0uICovCiAgICAgcG9zID0gMDsKICAgICB3aGlsZSAoUHlEaWN0X05leHQobW9kdWxlcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewotICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAiYnVpbHRpbnMiKSA9PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgInN5cyIpID09IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbMl0gJVVcbiIsIGtleSk7Ci0gICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOworICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgUHlVbmljb2RlX0NoZWNrKGtleSkpCisgICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbMl0gcmVtb3ZpbmcgJVVcbiIsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgU1RPUkVfTU9EVUxFX1dFQUtSRUYoa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShtb2R1bGVzLCBrZXksIFB5X05vbmUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogTmV4dCwgZGVsZXRlIHN5cyBhbmQgYnVpbHRpbnMgKGluIHRoYXQgb3JkZXIpICovCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAic3lzIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFudXAgc3lzXG4iKTsKLSAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgInN5cyIsIFB5X05vbmUpOwotICAgIH0KLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIGJ1aWx0aW5zXG4iKTsKLSAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIiwgUHlfTm9uZSk7CisgICAgLyogQ2xlYXIgdGhlIG1vZHVsZXMgZGljdC4gKi8KKyAgICBQeURpY3RfQ2xlYXIobW9kdWxlcyk7CisgICAgLyogUmVwbGFjZSB0aGUgaW50ZXJwcmV0ZXIncyByZWZlcmVuY2UgdG8gYnVpbHRpbnMgd2l0aCBhbiBlbXB0eSBkaWN0CisgICAgICAgKG1vZHVsZSBnbG9iYWxzIHN0aWxsIGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGJ1aWx0aW5zKS4gKi8KKyAgICBidWlsdGlucyA9IGludGVycC0+YnVpbHRpbnM7CisgICAgaW50ZXJwLT5idWlsdGlucyA9IFB5RGljdF9OZXcoKTsKKyAgICBQeV9ERUNSRUYoYnVpbHRpbnMpOworICAgIC8qIENsZWFyIG1vZHVsZSBkaWN0IGNvcGllcyBzdG9yZWQgaW4gdGhlIGludGVycHJldGVyIHN0YXRlICovCisgICAgX1B5U3RhdGVfQ2xlYXJNb2R1bGVzKCk7CisgICAgLyogQ29sbGVjdCByZWZlcmVuY2VzICovCisgICAgX1B5R0NfQ29sbGVjdE5vRmFpbCgpOworICAgIC8qIER1bXAgR0Mgc3RhdHMgYmVmb3JlIGl0J3MgdG9vIGxhdGUsIHNpbmNlIGl0IHVzZXMgdGhlIHdhcm5pbmdzCisgICAgICAgbWFjaGluZXJ5LiAqLworICAgIF9QeUdDX0R1bXBTaHV0ZG93blN0YXRzKCk7CisKKyAgICAvKiBOb3csIGlmIHRoZXJlIGFyZSBhbnkgbW9kdWxlcyBsZWZ0IGFsaXZlLCBjbGVhciB0aGVpciBnbG9iYWxzIHRvCisgICAgICAgbWluaW1pemUgcG90ZW50aWFsIGxlYWtzLiAgQWxsIEMgZXh0ZW5zaW9uIG1vZHVsZXMgYWN0dWFsbHkgZW5kCisgICAgICAgdXAgaGVyZSwgc2luY2UgdGhleSBhcmUga2VwdCBhbGl2ZSBpbiB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUuICovCisgICAgaWYgKHdlYWtsaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBuOworICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHdlYWtsaXN0KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5TGlzdF9HRVRfSVRFTSh3ZWFrbGlzdCwgaSk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0odHVwLCAwKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptb2QgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChQeVR1cGxlX0dFVF9JVEVNKHR1cCwgMSkpOworICAgICAgICAgICAgaWYgKG1vZCA9PSBQeV9Ob25lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CisgICAgICAgICAgICBhc3NlcnQoUHlNb2R1bGVfQ2hlY2sobW9kKSk7CisgICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgUHlVbmljb2RlX0NoZWNrKG5hbWUpKQorICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzNdIHdpcGluZyAlVVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbW9kKTsKKyAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcihtb2QpOworICAgICAgICAgICAgUHlfREVDUkVGKG1vZCk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHdlYWtsaXN0KTsKICAgICB9CiAKLSAgICAvKiBGaW5hbGx5LCBjbGVhciBhbmQgZGVsZXRlIHRoZSBtb2R1bGVzIGRpcmVjdG9yeSAqLwotICAgIFB5RGljdF9DbGVhcihtb2R1bGVzKTsKKyAgICAvKiBDbGVhciBhbmQgZGVsZXRlIHRoZSBtb2R1bGVzIGRpcmVjdG9yeS4gIEFjdHVhbCBtb2R1bGVzIHdpbGwKKyAgICAgICBzdGlsbCBiZSB0aGVyZSBvbmx5IGlmIGltcG9ydGVkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHNvbWUKKyAgICAgICBkZXN0cnVjdG9yLiAqLwogICAgIGludGVycC0+bW9kdWxlcyA9IE5VTEw7CiAgICAgUHlfREVDUkVGKG1vZHVsZXMpOworCisgICAgLyogT25jZSBtb3JlICovCisgICAgX1B5R0NfQ29sbGVjdE5vRmFpbCgpOworCisjdW5kZWYgU1RPUkVfTU9EVUxFX1dFQUtSRUYKIH0KIAogCkBAIC00NTEsMTIgKzQ0OSwxMiBAQAogCiAvKiBNYWdpYyBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgKGJ1aWx0LWluIGFzIHdlbGwgYXMgZHluYW1pY2FsbHkKICAgIGxvYWRlZCkuICBUbyBwcmV2ZW50IGluaXRpYWxpemluZyBhbiBleHRlbnNpb24gbW9kdWxlIG1vcmUgdGhhbgotICAgb25jZSwgd2Uga2VlcCBhIHN0YXRpYyBkaWN0aW9uYXJ5ICdleHRlbnNpb25zJyBrZXllZCBieSBtb2R1bGUgbmFtZQotICAgKGZvciBidWlsdC1pbiBtb2R1bGVzKSBvciBieSBmaWxlbmFtZSAoZm9yIGR5bmFtaWNhbGx5IGxvYWRlZAotICAgbW9kdWxlcyksIGNvbnRhaW5pbmcgdGhlc2UgbW9kdWxlcy4gIEEgY29weSBvZiB0aGUgbW9kdWxlJ3MKLSAgIGRpY3Rpb25hcnkgaXMgc3RvcmVkIGJ5IGNhbGxpbmcgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc3VjY2VlZHMuICBBCi0gICBjb3B5IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGVyZSBieSBjYWxsaW5nCisgICBvbmNlLCB3ZSBrZWVwIGEgc3RhdGljIGRpY3Rpb25hcnkgJ2V4dGVuc2lvbnMnIGtleWVkIGJ5IHRoZSB0dXBsZQorICAgKG1vZHVsZSBuYW1lLCBtb2R1bGUgbmFtZSkgIChmb3IgYnVpbHQtaW4gbW9kdWxlcykgb3IgYnkKKyAgIChmaWxlbmFtZSwgbW9kdWxlIG5hbWUpIChmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMpLCBjb250YWluaW5nIHRoZXNlCisgICBtb2R1bGVzLiAgQSBjb3B5IG9mIHRoZSBtb2R1bGUncyBkaWN0aW9uYXJ5IGlzIHN0b3JlZCBieSBjYWxsaW5nCisgICBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoKSBpbW1lZGlhdGVseSBhZnRlciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uCisgICBmdW5jdGlvbiBzdWNjZWVkcy4gIEEgY29weSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlcmUgYnkgY2FsbGluZwogICAgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoKS4KIAogICAgTW9kdWxlcyB3aGljaCBkbyBzdXBwb3J0IG11bHRpcGxlIGluaXRpYWxpemF0aW9uIHNldCB0aGVpciBtX3NpemUKQEAgLTQ2OSw4ICs0NjcsOSBAQAogX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0ICptb2QsIFB5T2JqZWN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kdWxlcywgKmRpY3Q7CisgICAgUHlPYmplY3QgKm1vZHVsZXMsICpkaWN0LCAqa2V5OwogICAgIHN0cnVjdCBQeU1vZHVsZURlZiAqZGVmOworICAgIGludCByZXM7CiAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkgewogICAgICAgICBleHRlbnNpb25zID0gUHlEaWN0X05ldygpOwogICAgICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKQpAQCAtNTA3LDEyICs1MDYsMTggQEAKICAgICAgICAgaWYgKGRlZi0+bV9iYXNlLm1fY29weSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBQeURpY3RfU2V0SXRlbShleHRlbnNpb25zLCBmaWxlbmFtZSwgKFB5T2JqZWN0KilkZWYpOworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBmaWxlbmFtZSwgbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmVzID0gUHlEaWN0X1NldEl0ZW0oZXh0ZW5zaW9ucywga2V5LCAoUHlPYmplY3QgKilkZWYpOworICAgIFB5X0RFQ1JFRihrZXkpOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludAotX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbihQeU9iamVjdCAqbW9kLCBjaGFyICpuYW1lKQorX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbihQeU9iamVjdCAqbW9kLCBjb25zdCBjaGFyICpuYW1lKQogewogICAgIGludCByZXM7CiAgICAgUHlPYmplY3QgKm5hbWVvYmo7CkBAIC01MjcsMTEgKzUzMiwxNSBAQAogUHlPYmplY3QgKgogX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kLCAqbWRpY3Q7CisgICAgUHlPYmplY3QgKm1vZCwgKm1kaWN0LCAqa2V5OwogICAgIFB5TW9kdWxlRGVmKiBkZWY7CiAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZGVmID0gKFB5TW9kdWxlRGVmKilQeURpY3RfR2V0SXRlbShleHRlbnNpb25zLCBmaWxlbmFtZSk7CisgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIGZpbGVuYW1lLCBuYW1lKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGRlZiA9IChQeU1vZHVsZURlZiAqKVB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbnMsIGtleSk7CisgICAgUHlfREVDUkVGKGtleSk7CiAgICAgaWYgKGRlZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZGVmLT5tX3NpemUgPT0gLTEpIHsKQEAgLTY0NywyMiArNjU2LDIzIEBACiAgKiBpbnRlcmZhY2UuICBUaGUgb3RoZXIgdHdvIGV4aXN0IHByaW1hcmlseSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAqLwogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogewogICAgIHJldHVybiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCiAgICAgICAgIG5hbWUsIGNvLCAoY2hhciAqKU5VTEwsIChjaGFyICopTlVMTCk7CiB9CiAKIFB5T2JqZWN0ICoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSkKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjb25zdCBjaGFyICpwYXRobmFtZSkKIHsKICAgICByZXR1cm4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAogICAgICAgICBuYW1lLCBjbywgcGF0aG5hbWUsIChjaGFyICopTlVMTCk7CiB9CiAKIFB5T2JqZWN0ICoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcyhjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwYXRobmFtZSkKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcyhjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3BhdGhuYW1lKQogewogICAgIFB5T2JqZWN0ICptID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnBhdGhvYmogPSBOVUxMLCAqY3BhdGhvYmogPSBOVUxMOwpAQCAtNjkzLDcgKzcwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBpbnRlcnByZXRlciEiKTsKICAgICAgICAgfQogCi0gICAgICAgIHBhdGhvYmogPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgcGF0aG9iaiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2dldF9zb3VyY2VmaWxlLCBjcGF0aG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICBpZiAocGF0aG9iaiA9PSBOVUxMKQpAQCAtODM1LDcgKzg0NSw3IEBACiAKIAogLyogRm9yd2FyZCAqLwotc3RhdGljIHN0cnVjdCBfZnJvemVuICogZmluZF9mcm96ZW4oUHlPYmplY3QgKik7CitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gKiBmaW5kX2Zyb3plbihQeU9iamVjdCAqKTsKIAogCiAvKiBIZWxwZXIgdG8gdGVzdCBmb3IgYnVpbHQtaW4gbW9kdWxlICovCkBAIC05MTcsMTEgKzkyNywxMSBAQAogUHlJbXBvcnRfR2V0SW1wb3J0ZXIoUHlPYmplY3QgKnBhdGgpIHsKICAgICBQeU9iamVjdCAqaW1wb3J0ZXI9TlVMTCwgKnBhdGhfaW1wb3J0ZXJfY2FjaGU9TlVMTCwgKnBhdGhfaG9va3M9TlVMTDsKIAotICAgIGlmICgocGF0aF9pbXBvcnRlcl9jYWNoZSA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9pbXBvcnRlcl9jYWNoZSIpKSkgewotICAgICAgICBpZiAoKHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKSkpIHsKLSAgICAgICAgICAgIGltcG9ydGVyID0gZ2V0X3BhdGhfaW1wb3J0ZXIocGF0aF9pbXBvcnRlcl9jYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcywgcGF0aCk7Ci0gICAgICAgIH0KKyAgICBwYXRoX2ltcG9ydGVyX2NhY2hlID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2ltcG9ydGVyX2NhY2hlIik7CisgICAgcGF0aF9ob29rcyA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9ob29rcyIpOworICAgIGlmIChwYXRoX2ltcG9ydGVyX2NhY2hlICE9IE5VTEwgJiYgcGF0aF9ob29rcyAhPSBOVUxMKSB7CisgICAgICAgIGltcG9ydGVyID0gZ2V0X3BhdGhfaW1wb3J0ZXIocGF0aF9pbXBvcnRlcl9jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzLCBwYXRoKTsKICAgICB9CiAgICAgUHlfWElOQ1JFRihpbXBvcnRlcik7IC8qIGdldF9wYXRoX2ltcG9ydGVyIHJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UgKi8KICAgICByZXR1cm4gaW1wb3J0ZXI7CkBAIC05MzgsOCArOTQ4LDEyIEBACiBpbml0X2J1aWx0aW4oUHlPYmplY3QgKm5hbWUpCiB7CiAgICAgc3RydWN0IF9pbml0dGFiICpwOworICAgIFB5T2JqZWN0ICptb2Q7CiAKLSAgICBpZiAoX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QobmFtZSwgbmFtZSkgIT0gTlVMTCkKKyAgICBtb2QgPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBuYW1lKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtb2QgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICBmb3IgKHAgPSBQeUltcG9ydF9Jbml0dGFiOyBwLT5uYW1lICE9IE5VTEw7IHArKykgewpAQCAtOTcyLDEwICs5ODYsMTAgQEAKIAogLyogRnJvemVuIG1vZHVsZXMgKi8KIAotc3RhdGljIHN0cnVjdCBfZnJvemVuICoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqCiBmaW5kX2Zyb3plbihQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcDsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKIAogICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTkyLDcgKzEwMDYsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9mcm96ZW5fb2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICBpbnQgc2l6ZTsKIAogICAgIGlmIChwID09IE5VTEwpIHsKQEAgLTEwMTAsMTMgKzEwMjQsMTMgQEAKICAgICBzaXplID0gcC0+c2l6ZTsKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHNpemUgPSAtc2l6ZTsKLSAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgcmV0dXJuIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY29uc3QgY2hhciAqKXAtPmNvZGUsIHNpemUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogaXNfZnJvemVuX3BhY2thZ2UoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOwogICAgIGludCBzaXplOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgewpAQCAtMTA0Myw3ICsxMDU3LDcgQEAKIGludAogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogICAgIFB5T2JqZWN0ICpjbywgKm0sICpwYXRoOwogICAgIGludCBpc3BhY2thZ2U7CiAgICAgaW50IHNpemU7CkBAIC0xMDYyLDcgKzEwNzYsNyBAQAogICAgIGlzcGFja2FnZSA9IChzaXplIDwgMCk7CiAgICAgaWYgKGlzcGFja2FnZSkKICAgICAgICAgc2l6ZSA9IC1zaXplOwotICAgIGNvID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgY28gPSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNvbnN0IGNoYXIgKilwLT5jb2RlLCBzaXplKTsKICAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghUHlDb2RlX0NoZWNrKGNvKSkgewpAQCAtMTA3MiwxOSArMTA4NiwxNyBAQAogICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgfQogICAgIGlmIChpc3BhY2thZ2UpIHsKLSAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBwYWNrYWdlIG5hbWUgKi8KKyAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBlbXB0eSBsaXN0ICovCiAgICAgICAgIFB5T2JqZWN0ICpkLCAqbDsKICAgICAgICAgaW50IGVycjsKICAgICAgICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZU9iamVjdChuYW1lKTsKICAgICAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgICAgIGwgPSBQeUxpc3RfTmV3KDEpOworICAgICAgICBsID0gUHlMaXN0X05ldygwKTsKICAgICAgICAgaWYgKGwgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGwsIDAsIG5hbWUpOwogICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19wYXRoX18iLCBsKTsKICAgICAgICAgUHlfREVDUkVGKGwpOwogICAgICAgICBpZiAoZXJyICE9IDApCkBAIC0xMTA2LDcgKzExMTgsNyBAQAogfQogCiBpbnQKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjaGFyICpuYW1lKQorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWVvYmo7CiAgICAgaW50IHJldDsKQEAgLTEyMjAsNyArMTIzMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwpCiB7CiAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19pbml0aWFsaXppbmdfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19zcGVjX18pOworICAgIF9QeV9JREVOVElGSUVSKF9pbml0aWFsaXppbmcpOwogICAgIF9QeV9JREVOVElGSUVSKF9fcGFja2FnZV9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX3BhdGhfXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOwpAQCAtMTM1Niw3ICsxMzY5LDExIEBACiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHBhY2thZ2UsIDAsIGxhc3RfZG90KTsKKyAgICAgICAgaWYgKGJhc2UgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID4gMCkgewogICAgICAgICAgICAgUHlPYmplY3QgKmJvcnJvd2VkX2RvdCwgKnNlcSA9IE5VTEw7CiAKQEAgLTE0MTAsMTYgKzE0MjcsMjEgQEAKICAgICAgICAgZ290byBlcnJvcl93aXRoX3VubG9jazsKICAgICB9CiAgICAgZWxzZSBpZiAobW9kICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnZhbHVlOworICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqc3BlYzsKICAgICAgICAgaW50IGluaXRpYWxpemluZyA9IDA7CiAKICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CiAgICAgICAgIC8qIE9wdGltaXphdGlvbjogb25seSBjYWxsIF9ib290c3RyYXAuX2xvY2tfdW5sb2NrX21vZHVsZSgpIGlmCi0gICAgICAgICAgIF9faW5pdGlhbGl6aW5nX18gaXMgdHJ1ZS4KLSAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBfX2luaXRpYWxpemluZ19fIG11c3QgYmUgc2V0ICpiZWZvcmUqCisgICAgICAgICAgIF9fc3BlY19fLl9pbml0aWFsaXppbmcgaXMgdHJ1ZS4KKyAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBpbml0aWFsaXppbmcgbXVzdCBiZSBzZXQgKmJlZm9yZSoKICAgICAgICAgICAgc3R1ZmZpbmcgdGhlIG5ldyBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX2luaXRpYWxpemluZ19fKTsKKyAgICAgICAgc3BlYyA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX3NwZWNfXyk7CisgICAgICAgIGlmIChzcGVjICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0dldEF0dHJJZChzcGVjLCAmUHlJZF9faW5pdGlhbGl6aW5nKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzcGVjKTsKKyAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTQzMCw3ICsxNDUyLDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoaW5pdGlhbGl6aW5nID4gMCkgewogICAgICAgICAgICAgLyogX2Jvb3RzdHJhcC5fbG9ja191bmxvY2tfbW9kdWxlKCkgcmVsZWFzZXMgdGhlIGltcG9ydCBsb2NrICovCi0gICAgICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2xvY2tfdW5sb2NrX21vZHVsZSwgYWJzX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCkBAIC0xNDQ4LDcgKzE0NzAsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogX2Jvb3RzdHJhcC5fZmluZF9hbmRfbG9hZCgpIHJlbGVhc2VzIHRoZSBpbXBvcnQgbG9jayAqLwotICAgICAgICBtb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19maW5kX2FuZF9sb2FkLCBhYnNfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbnNfaW1wb3J0LCBOVUxMKTsKICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CkBAIC0xNTE3LDcgKzE1MzksNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBmaW5hbF9tb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgZmluYWxfbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19oYW5kbGVfZnJvbWxpc3QsIG1vZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3QsIGJ1aWx0aW5zX2ltcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CkBAIC0xNzcxLDcgKzE3OTMsNyBAQAogaW1wX2lzX2Zyb3plbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKm5hbWU7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnA7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnA7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmlzX2Zyb3plbiIsICZuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcCA9IGZpbmRfZnJvemVuKG5hbWUpOwpAQCAtMTc5MCw3ICsxODEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsIFB5VW5pY29kZV9GU0RlY29kZXIsICZwYXRobmFtZSwgJmZvYikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChmb2IgIT0gTlVMTCkgewotICAgICAgICBmcCA9IF9QeV9mb3BlbihwYXRobmFtZSwgInIiKTsKKyAgICAgICAgZnAgPSBfUHlfZm9wZW5fb2JqKHBhdGhuYW1lLCAiciIpOwogICAgICAgICBpZiAoZnAgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKHBhdGhuYW1lKTsKICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRkbC5jIGIvUHl0aG9uL2ltcG9ydGRsLmMKaW5kZXggMGVhOTU0Yy4uYjYwZjFjNyAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGRsLmMKKysrIGIvUHl0aG9uL2ltcG9ydGRsLmMKQEAgLTc3LDYgKzc3LDggQEAKICAgICAgICAgUHlPYmplY3QgKm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJkeW5hbWljIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXQgZnVuY3Rpb24gKFB5SW5pdF8lcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRuYW1lKTsKKyAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IobXNnLCBuYW1lLCBwYXRoKTsKICAgICAgICAgUHlfREVDUkVGKG1zZyk7CiAgICAgICAgIGdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0ZGwuaCBiL1B5dGhvbi9pbXBvcnRkbC5oCmluZGV4IDZiOWNmNzUuLjZhNTFhOTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRkbC5oCisrKyBiL1B5dGhvbi9pbXBvcnRkbC5oCkBAIC0xOCwxMyArMTgsOCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIHR5cGVkZWYgRkFSUFJPQyBkbF9mdW5jcHRyOwogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxvczJkZWYuaD4KLXR5cGVkZWYgaW50ICgqIEFQSUVOVFJZIGRsX2Z1bmNwdHIpKCk7Ci0jZWxzZQogdHlwZWRlZiB2b2lkICgqZGxfZnVuY3B0cikodm9pZCk7CiAjZW5kaWYKLSNlbmRpZgogCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGxpYi5oIGIvUHl0aG9uL2ltcG9ydGxpYi5oCmluZGV4IGNiNmFmYzUuLmZjZDIyNGYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRsaWIuaAorKysgYi9QeXRob24vaW1wb3J0bGliLmgKQEAgLTEsMzk3ICsxLDMzNiBAQAogLyogQXV0by1nZW5lcmF0ZWQgYnkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jICovCi11bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKLSAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwKLSAgICAwLDY0LDAsMCwwLDExNSwyMDYsMywwLDAsMTAwLDAsMCw5MCwwLDAsCi0gICAgMTAwLDEzMSwwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKK2NvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0geworICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDE4Miw0LDAsMCwxMDAsMCwwLDkwLDAsMCwKKyAgICAxMDAsMTU3LDAsOTAsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAogICAgIDIsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCwzLDAsMTAwLDgsCiAgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNCwwLDEwMCwxMCwwLDEwMCwxMSwwLAogICAgIDEzMiwwLDAsOTAsNSwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsCiAgICAgNiwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxNiwKICAgICAwLDEwMCwxNywwLDEzMiwwLDAsOTAsOCwwLDEwMCwxOCwwLDEwMCwxOSwwLAotICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEwMCwyMiwwLDEzMiwKLSAgICAxLDAsOTAsMTAsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMCwwLDkwLDExLAotICAgIDAsMTAxLDEyLDAsMTAxLDExLDAsMTA2LDEzLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwyNSwwLDEwMCwyNiwwLDEzMiwwLDAsOTAsMTUsMCwxMDUsMCwwLDkwLAotICAgIDE2LDAsMTA1LDAsMCw5MCwxNywwLDcxLDEwMCwyNywwLDEwMCwyOCwwLDEzMiwKLSAgICAwLDAsMTAwLDI4LDAsMTAxLDE4LDAsMTMxLDMsMCw5MCwxOSwwLDcxLDEwMCwKLSAgICAyOSwwLDEwMCwzMCwwLDEzMiwwLDAsMTAwLDMwLDAsMTMxLDIsMCw5MCwyMCwKLSAgICAwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLDAsMTAwLDMyLDAsMTMxLDIsCi0gICAgMCw5MCwyMSwwLDEwMCwzMywwLDEwMCwzNCwwLDEzMiwwLDAsOTAsMjIsMCwKLSAgICAxMDAsMzUsMCwxMDAsMzYsMCwxMzIsMCwwLDkwLDIzLDAsMTAwLDM3LDAsMTAwLAotICAgIDM4LDAsMTMyLDAsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMSwyNSwwLDEwMCw0MCwKLSAgICAwLDEzMSwxLDAsMTAwLDQxLDAsNjIsNjYsMTAxLDI1LDAsMTAwLDQyLDAsMTMxLAotICAgIDEsMCwxMDAsNDMsMCw2Miw2Niw5MCwyNiwwLDEwMSwyNywwLDEwMCw0NCwwLAotICAgIDEwMCw0NSwwLDEzMiwwLDAsMTAxLDI4LDAsMTAwLDQ2LDAsMTAwLDQ3LDAsMTAwLAotICAgIDQ4LDAsMTMxLDMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsOTAsMjksMCwxMDAsCi0gICAgNDksMCw5MCwzMCwwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzEsMCwxMDAsNTEsCi0gICAgMCwxMDMsMSwwLDkwLDMyLDAsMTAwLDUyLDAsMTAzLDEsMCw5MCwzMywwLAotICAgIDEwMCwxMzAsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMzIsMSwwLDkwLDM1LDAsMTAwLAotICAgIDU1LDAsMTAwLDU2LDAsMTMyLDAsMCw5MCwzNiwwLDEwMCw1NywwLDEwMCw1OCwKLSAgICAwLDEzMiwwLDAsOTAsMzcsMCwxMDAsNTksMCwxMDAsNjAsMCwxMDAsNjEsMCwKLSAgICAxMDAsNjIsMCwxMzIsMCwxLDkwLDM4LDAsMTAwLDYzLDAsMTAwLDY0LDAsMTMyLAotICAgIDAsMCw5MCwzOSwwLDEwMCw2NSwwLDEwMCw2NiwwLDEzMiwwLDAsOTAsNDAsCi0gICAgMCwxMDAsNjcsMCwxMDAsNjgsMCwxMzIsMCwwLDkwLDQxLDAsMTAwLDY5LDAsCi0gICAgMTAwLDcwLDAsMTMyLDAsMCw5MCw0MiwwLDEwMCw3MSwwLDEwMCw3MiwwLDEzMiwKLSAgICAwLDAsOTAsNDMsMCwxMDAsNzMsMCwxMDAsNzQsMCwxMzIsMCwwLDkwLDQ0LAotICAgIDAsMTAwLDc1LDAsMTAwLDc2LDAsMTMyLDAsMCw5MCw0NSwwLDcxLDEwMCw3NywKLSAgICAwLDEwMCw3OCwwLDEzMiwwLDAsMTAwLDc4LDAsMTMxLDIsMCw5MCw0NiwwLAotICAgIDcxLDEwMCw3OSwwLDEwMCw4MCwwLDEzMiwwLDAsMTAwLDgwLDAsMTMxLDIsMCwKLSAgICA5MCw0NywwLDcxLDEwMCw4MSwwLDEwMCw4MiwwLDEzMiwwLDAsMTAwLDgyLDAsCi0gICAgMTMxLDIsMCw5MCw0OCwwLDcxLDEwMCw4MywwLDEwMCw4NCwwLDEzMiwwLDAsCi0gICAgMTAwLDg0LDAsMTMxLDIsMCw5MCw0OSwwLDcxLDEwMCw4NSwwLDEwMCw4NiwwLAotICAgIDEzMiwwLDAsMTAwLDg2LDAsMTAxLDQ5LDAsMTMxLDMsMCw5MCw1MCwwLDcxLAotICAgIDEwMCw4NywwLDEwMCw4OCwwLDEzMiwwLDAsMTAwLDg4LDAsMTMxLDIsMCw5MCwKLSAgICA1MSwwLDcxLDEwMCw4OSwwLDEwMCw5MCwwLDEzMiwwLDAsMTAwLDkwLDAsMTAxLAotICAgIDUxLDAsMTAxLDUwLDAsMTMxLDQsMCw5MCw1MiwwLDcxLDEwMCw5MSwwLDEwMCwKLSAgICA5MiwwLDEzMiwwLDAsMTAwLDkyLDAsMTAxLDUxLDAsMTAxLDQ5LDAsMTMxLDQsCi0gICAgMCw5MCw1MywwLDEwMywwLDAsOTAsNTQsMCw3MSwxMDAsOTMsMCwxMDAsOTQsCi0gICAgMCwxMzIsMCwwLDEwMCw5NCwwLDEzMSwyLDAsOTAsNTUsMCw3MSwxMDAsOTUsCi0gICAgMCwxMDAsOTYsMCwxMzIsMCwwLDEwMCw5NiwwLDEzMSwyLDAsOTAsNTYsMCwKLSAgICA3MSwxMDAsOTcsMCwxMDAsOTgsMCwxMzIsMCwwLDEwMCw5OCwwLDEzMSwyLDAsCi0gICAgOTAsNTcsMCw3MSwxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDAsMCwxMDAsMTAwLDAsCi0gICAgMTMxLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwxMDAsMTAyLDAsMTMyLDAsMCwKLSAgICAxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDcxLDEwMCwxMDMsMCwxMDAsMTA0LDAsCi0gICAgMTMyLDAsMCwxMDAsMTA0LDAsMTMxLDIsMCw5MCw2MCwwLDEwMCwxMDUsMCwxMDAsCi0gICAgMTA2LDAsMTMyLDAsMCw5MCw2MSwwLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsCi0gICAgMCw5MCw2MiwwLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLDAsMCw5MCw2MywwLAotICAgIDEwMCwxMTEsMCw5MCw2NCwwLDEwMCwxMTIsMCwxMDAsMTEzLDAsMTMyLDAsMCw5MCwKLSAgICA2NSwwLDEwMCwxMTQsMCwxMDAsMTE1LDAsMTMyLDAsMCw5MCw2NiwwLDEwMCwxMzAsCi0gICAgMCwxMDAsNDYsMCwxMDAsMTE2LDAsMTAwLDExNywwLDEzMiwyLDAsOTAsNjcsMCwKLSAgICAxMDAsMTE4LDAsMTAwLDExOSwwLDEzMiwwLDAsOTAsNjgsMCwxMDAsMTIwLDAsMTAwLAotICAgIDEyMSwwLDEzMiwwLDAsOTAsNjksMCwxMDAsMTIyLDAsMTAwLDEyMywwLDEzMiwwLAotICAgIDAsOTAsNzAsMCwxMDAsMTMwLDAsMTAwLDEzMCwwLDEwMiwwLDAsMTAwLDQ2LDAsCi0gICAgMTAwLDEyNCwwLDEwMCwxMjUsMCwxMzIsNCwwLDkwLDcxLDAsMTAwLDEyNiwwLDEwMCwKLSAgICAxMjcsMCwxMzIsMCwwLDkwLDcyLDAsMTAwLDEyOCwwLDEwMCwxMjksMCwxMzIsMCwKLSAgICAwLDkwLDczLDAsMTAwLDEzMCwwLDgzLDQwLDEzMiwwLDAsMCwxMTcsODMsMSwKLSAgICAwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsCi0gICAgMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsMTE2LDExMSwzMiw5OCwxMDEsCi0gICAgMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsCi0gICAgMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LDk5LDEwNCwxMCwxMTYsMTA0LAotICAgIDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiw4MCwKLSAgICAxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LDExNyw5OSwxMDQsMzIsMTA1LAotICAgIDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwKLSAgICAxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwKLSAgICAzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTExLAotICAgIDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LDEwNyw0NiwzMiw3OSwxMTAsCi0gICAgMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTcsCi0gICAgOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsMzIsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNyw2LDAsCi0gICAgMCwwLDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMTE3LDYsMCwwLDAsMTAwLDk3LDExNCwKLSAgICAxMTksMTA1LDExMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywKLSAgICAwLDEwMCwyLDAsMTMyLDAsMCwxMjUsMCwwLDEyNCwwLDAsODMsNDAsNCwKLSAgICAwLDAsMCw3OCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDgzLDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMSwKLSAgICAwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDUzLDAsMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LAotICAgIDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsCi0gICAgMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsMTE1LDEyLDAsMCwwLDgwLAotICAgIDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDQwLDIsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNywwLDAsMCwxMDEsMTEwLDExOCwKLSAgICAxMDUsMTE0LDExMSwxMTAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSwzNCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTE3LDM3LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCwKLSAgICA5NSw5OSw5NywxMTUsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTMsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTksMTA0LDEwMSw5OSwKLSAgICAxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsCi0gICAgMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMzgsMCwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwyLDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsCi0gICAgMTE3LDgsMCwwLDAsMTEyLDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLAotICAgIDAsMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMjcsMCwwLAotICAgIDAsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsCi0gICAgODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsODMsNDAsMSwwLDAsCi0gICAgMCwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwKLSAgICAxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwKLSAgICAwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LAotICAgIDExNSwxMDEsMzIsMCwwLDAsMTE1LDgsMCwwLDAsMCwxLDE4LDEsMTUsCi0gICAgNCwxMiwzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLAotICAgIDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDAsMCwxMDMsMCwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDEsMCwKLSAgICA2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDIsCi0gICAgMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsMSwwLDEwNiwxLDAsCi0gICAgMTI0LDAsMCwxMDAsMywwLDYzLDEwMCwxLDAsNjQsMTMxLDEsMCwxLDEyNCwKLSAgICAxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCw0LDAsNjMsMTAwLDEsMCw2NCwKLSAgICAxMzEsMSwwLDEsMTE2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsMTExLDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLAotICAgIDk3LDMyLDUxLDUwLDQ1LDk4LDEwNSwxMTYsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LAotICAgIDMyLDExNiwxMTEsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LAotICAgIDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4OCw4OCw4OCwzMiw4NCwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTE3LDExMCwxMTYsMTA1LDEwOCwzMiwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDM5LDExNSwzMiwxMDgsMTExLDExMCwxMDMsMzIsMTAyLDExNywxMTAsOTksMTE2LAotICAgIDEwNSwxMTEsMTEwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMDUsMjU1LDAsMCwwLDEwNSw4LDAsMCwKLSAgICAwLDEwNSwxNiwwLDAsMCwxMDUsMjQsMCwwLDAsNDAsMywwLDAsMCwKLSAgICAxMTcsMywwLDAsMCwxMDUsMTEwLDExNiwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLAotICAgIDEwMSwxMTAsMTAwLDExNyw5LDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk3LDExNCwxMTQsOTcsCi0gICAgMTIxLDQwLDIsMCwwLDAsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTAsMTE2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsMCwwLDk1LDExOSw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsNDUsMCwwLDAsMTE1LDE0LDAsMCwwLDAsNiwxMiwxLDYsCi0gICAgMSwxNywxLDIxLDEsMjEsMSwyMSwxLDExNyw3LDAsMCwwLDk1LDExOSwKLSAgICA5NSwxMDgsMTExLDExMCwxMDMsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LAotICAgIDAsMCwxMDAsMSwwLDI1LDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwKLSAgICAyLDAsMjUsMTAwLDMsMCw2Miw3OSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsCi0gICAgMCwxMDAsNCwwLDI1LDEwMCw1LDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLAotICAgIDEyNCwwLDAsMTAwLDYsMCwyNSwxMDAsNywwLDYyLDc5LDEyNSwxLDAsMTI0LAotICAgIDEsMCw4Myw0MCw4LDAsMCwwLDExNywxMTUsMCwwLDAsNjcsMTExLDExMCwKLSAgICAxMTgsMTAxLDExNCwxMTYsMzIsNTIsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsCi0gICAgMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNiwxMDEsMTAzLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsMTExLDExNCw5NywxMTQsMTIxLDMyLAotICAgIDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwzOSwxMTUsMzIsCi0gICAgMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMDUsMCwwLDAsMCwxMDUsMSwwLDAsMCwxMDUsOCwwLDAsMCwxMDUsCi0gICAgMiwwLDAsMCwxMDUsMTYsMCwwLDAsMTA1LDMsMCwwLDAsMTA1LDI0LAotICAgIDAsMCwwLDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsOSwwLAotICAgIDAsMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDEsMCwwLDAsCi0gICAgMTIwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsMCwKLSAgICAwLDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw2MSwwLDAsMCwxMTUsMTAsMCwKLSAgICAwLDAsMCw2LDEwLDEsMTgsMSwxOCwxLDE4LDEsMTE3LDcsMCwwLAotICAgIDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw5OSwwLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSwxMDMsMCwKLSAgICAwLDAsMTAzLDAsMCwxMjUsMSwwLDEyMCw3MSwwLDEyNCwwLDAsNjgsOTMsCi0gICAgNjMsMCwxMjUsMiwwLDEyNCwyLDAsMTE1LDMxLDAsMTEzLDEzLDAsMTEwLDAsCi0gICAgMCwxMjQsMSwwLDEwNiwwLDAsMTI0LDIsMCwxMzEsMSwwLDEsMTI0LDIsCi0gICAgMCwxMDAsNCwwLDI1LDExNiwxLDAsMTA3LDcsMCwxMTQsMTMsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTE2LDIsMCwxMzEsMSwwLDEsMTEzLDEzLDAsMTEzLDEzLAotICAgIDAsODcsMTAwLDIsMCwxMDYsMywwLDEyNCwxLDAsMTAwLDMsMCwxMDAsNSwKLSAgICAwLDEzMywyLDAsMjUsMTMxLDEsMCw4Myw0MCw2LDAsMCwwLDExNywzMSwKLSAgICAwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA2LDExMSwxMDUsMTEwLDQwLAotICAgIDQxLDQ2LDEwNSwxLDAsMCwwLDExNywwLDAsMCwwLDc4LDEwNSwyNTUsMjU1LAotICAgIDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw0LDAsMCwwLDExNyw2LDAsMCwKLSAgICAwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE3LDE1LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDQsMCwwLDAsMTA2LDExMSwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDExMiw5NywxMTQsMTE2LDExNSwxMTcsOSwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTIsOTcsCi0gICAgMTE0LDExNiwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNCwxMTYsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDc0LDAsMCwwLDExNSwxNiwwLDAsMCwKLSAgICAwLDIsNiwxLDEzLDEsNiwxLDYsMSwxMywxLDE2LDEsMjAsMSwKLSAgICAxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDg1LDAsMCwwLDEyMCw0OCwwLDExNiwwLDAsMTI0LAotICAgIDAsMCwxMzEsMSwwLDY4LDkzLDI4LDAsMTI1LDEsMCwxMjQsMSwwLDExNiwKLSAgICAxLDAsMTA3LDYsMCwxMTQsMTMsMCwxMjQsMSwwLDEyNSwyLDAsODAsMTEzLAotICAgIDEzLDAsMTEzLDEzLDAsODcsMTE2LDIsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LAotICAgIDMsMCwxMjQsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSwzLDAsMTI1LDQsCi0gICAgMCwxMjUsNSwwLDEyNCwzLDAsMTI0LDUsMCwxMDIsMiwwLDgzLDQwLDEsCi0gICAgMCwwLDAsMTE3LDMyLDAsMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwKLSAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDQwLDQxLDQ2LDQwLDQsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsMTAxLDEwMCwxMTcsMTUsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwxMTcsMTAsMCwwLDAsCi0gICAgMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsNiwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMSwwLDAsMCwxMjAsMTE3LDMsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDUsMCwwLDAsMTAyLDExNCwxMTEsMTEwLDExNiwKLSAgICAxMTcsMSwwLDAsMCw5NSwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDg2LDAsMCwwLDExNSwKLSAgICAxNCwwLDAsMCwwLDIsMTksMSwxMiwxLDYsMSw4LDIsNiwxLAotICAgIDI0LDEsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LAotICAgIDEwNSwxMTYsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDYxLDAsMCwwLDEyMSwxOSwwLDExNiwKLSAgICAwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsCi0gICAgMjIsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsMTAwLAotICAgIDIsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTA2LDQsMCwxMDAsMSwKLSAgICAwLDY0LDEyNCwxLDAsMTA3LDIsMCw4Myw0MCwzLDAsMCwwLDExNyw0OSwKLSAgICAwLDAsMCw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsCisgICAgMTMyLDAsMCw5MCw5LDAsMTAwLDIwLDAsMTAwLDIxLDAsMTMyLDAsMCw5MCwKKyAgICAxMCwwLDEwMCwyMiwwLDEwMCwyMywwLDEwMCwyNCwwLDEzMiwxLDAsOTAsMTEsCisgICAgMCwxMDAsMjUsMCwxMDAsMjYsMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDI3LDAsCisgICAgMTAwLDI4LDAsMTMyLDAsMCw5MCwxMywwLDEwMSwxNCwwLDEwMSwxMiwwLDEwNiwKKyAgICAxNSwwLDEzMSwxLDAsOTAsMTYsMCwxMDUsMCwwLDkwLDE3LDAsMTA1LDAsCisgICAgMCw5MCwxOCwwLDcxLDEwMCwyOSwwLDEwMCwzMCwwLDEzMiwwLDAsMTAwLDMwLAorICAgIDAsMTAxLDE5LDAsMTMxLDMsMCw5MCwyMCwwLDcxLDEwMCwzMSwwLDEwMCwzMiwKKyAgICAwLDEzMiwwLDAsMTAwLDMyLDAsMTMxLDIsMCw5MCwyMSwwLDcxLDEwMCwzMywKKyAgICAwLDEwMCwzNCwwLDEzMiwwLDAsMTAwLDM0LDAsMTMxLDIsMCw5MCwyMiwwLAorICAgIDcxLDEwMCwzNSwwLDEwMCwzNiwwLDEzMiwwLDAsMTAwLDM2LDAsMTMxLDIsMCwKKyAgICA5MCwyMywwLDEwMCwzNywwLDEwMCwzOCwwLDEzMiwwLDAsOTAsMjQsMCwxMDAsCisgICAgMzksMCwxMDAsNDAsMCwxMzIsMCwwLDkwLDI1LDAsMTAwLDQxLDAsMTAwLDQyLAorICAgIDAsMTMyLDAsMCw5MCwyNiwwLDEwMCw0MywwLDEwNiwyNywwLDEwMCw0NCwwLAorICAgIDEwMCw0NSwwLDEzMSwyLDAsMTAwLDQ2LDAsMjMsOTAsMjgsMCwxMDEsMjksMCwKKyAgICAxMDYsMzAsMCwxMDEsMjgsMCwxMDAsNDUsMCwxMzEsMiwwLDkwLDMxLDAsMTAwLAorICAgIDQ3LDAsOTAsMzIsMCwxMDAsNDgsMCwxMDMsMSwwLDkwLDMzLDAsMTAwLDQ5LAorICAgIDAsMTAzLDEsMCw5MCwzNCwwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzUsMCwKKyAgICAxMDAsNTEsMCwxMDAsNTIsMCwxMDAsNTMsMCwxMzIsMSwwLDkwLDM2LDAsMTAwLAorICAgIDU0LDAsMTAwLDU1LDAsMTMyLDAsMCw5MCwzNywwLDEwMCw1NiwwLDEwMCw1NywKKyAgICAwLDEzMiwwLDAsOTAsMzgsMCwxMDAsNTgsMCwxMDAsNTksMCwxMzIsMCwwLAorICAgIDkwLDM5LDAsMTAwLDYwLDAsMTAwLDYxLDAsMTAwLDYyLDAsMTAwLDYzLDAsMTMyLAorICAgIDAsMSw5MCw0MCwwLDEwMCw2NCwwLDEwMCw2NSwwLDEzMiwwLDAsOTAsNDEsCisgICAgMCwxMDAsNjYsMCwxMDAsNjcsMCwxMzIsMCwwLDkwLDQyLDAsMTAwLDY4LDAsCisgICAgMTAwLDY5LDAsMTMyLDAsMCw5MCw0MywwLDEwMCw3MCwwLDEwMCw3MSwwLDEzMiwKKyAgICAwLDAsOTAsNDQsMCwxMDAsNzIsMCwxMDAsNzMsMCwxMzIsMCwwLDkwLDQ1LAorICAgIDAsMTAwLDUxLDAsMTAwLDUxLDAsMTAwLDUxLDAsMTAwLDc0LDAsMTAwLDc1LDAsCisgICAgMTMyLDMsMCw5MCw0NiwwLDEwMCw1MSwwLDEwMCw1MSwwLDEwMCw1MSwwLDEwMCwKKyAgICA3NiwwLDEwMCw3NywwLDEzMiwzLDAsOTAsNDcsMCwxMDAsNzgsMCwxMDAsNzgsCisgICAgMCwxMDAsNzksMCwxMDAsODAsMCwxMzIsMiwwLDkwLDQ4LDAsMTAwLDgxLDAsCisgICAgMTAwLDgyLDAsMTMyLDAsMCw5MCw0OSwwLDEwMCw4MywwLDEwMCw4NCwwLDEzMiwKKyAgICAwLDAsOTAsNTAsMCw3MSwxMDAsODUsMCwxMDAsODYsMCwxMzIsMCwwLDEwMCwKKyAgICA4NiwwLDEzMSwyLDAsOTAsNTEsMCw3MSwxMDAsODcsMCwxMDAsODgsMCwxMzIsCisgICAgMCwwLDEwMCw4OCwwLDEzMSwyLDAsOTAsNTIsMCwxMDAsODksMCwxMDAsNTEsCisgICAgMCwxMDAsOTAsMCwxMDAsNTEsMCwxMDAsOTEsMCwxMDAsOTIsMCwxMzIsMCwyLAorICAgIDkwLDUzLDAsMTAxLDU0LDAsMTMxLDAsMCw5MCw1NSwwLDEwMCw1MSwwLDEwMCwKKyAgICA5MywwLDEwMCw1MSwwLDEwMCw5NCwwLDEwMSw1NSwwLDEwMCw5NSwwLDEwMCw5NiwKKyAgICAwLDEzMiwxLDIsOTAsNTYsMCwxMDAsNTEsMCwxMDAsNTEsMCwxMDAsOTcsMCwKKyAgICAxMDAsOTgsMCwxMzIsMiwwLDkwLDU3LDAsNzEsMTAwLDk5LDAsMTAwLDEwMCwwLAorICAgIDEzMiwwLDAsMTAwLDEwMCwwLDEzMSwyLDAsOTAsNTgsMCw3MSwxMDAsMTAxLDAsCisgICAgMTAwLDEwMiwwLDEzMiwwLDAsMTAwLDEwMiwwLDEzMSwyLDAsOTAsNTksMCw3MSwKKyAgICAxMDAsMTAzLDAsMTAwLDEwNCwwLDEzMiwwLDAsMTAwLDEwNCwwLDEzMSwyLDAsOTAsCisgICAgNjAsMCw3MSwxMDAsMTA1LDAsMTAwLDEwNiwwLDEzMiwwLDAsMTAwLDEwNiwwLDEzMSwKKyAgICAyLDAsOTAsNjEsMCw3MSwxMDAsMTA3LDAsMTAwLDEwOCwwLDEzMiwwLDAsMTAwLAorICAgIDEwOCwwLDEzMSwyLDAsOTAsNjIsMCw3MSwxMDAsMTA5LDAsMTAwLDExMCwwLDEzMiwKKyAgICAwLDAsMTAwLDExMCwwLDEwMSw2MiwwLDEzMSwzLDAsOTAsNjMsMCw3MSwxMDAsCisgICAgMTExLDAsMTAwLDExMiwwLDEzMiwwLDAsMTAwLDExMiwwLDEzMSwyLDAsOTAsNjQsCisgICAgMCw3MSwxMDAsMTEzLDAsMTAwLDExNCwwLDEzMiwwLDAsMTAwLDExNCwwLDEwMSw2NCwKKyAgICAwLDEwMSw2MywwLDEzMSw0LDAsOTAsNjUsMCw3MSwxMDAsMTE1LDAsMTAwLDExNiwKKyAgICAwLDEzMiwwLDAsMTAwLDExNiwwLDEwMSw2NCwwLDEwMSw2MiwwLDEzMSw0LDAsCisgICAgOTAsNjYsMCwxMDMsMCwwLDkwLDY3LDAsNzEsMTAwLDExNywwLDEwMCwxMTgsMCwKKyAgICAxMzIsMCwwLDEwMCwxMTgsMCwxMzEsMiwwLDkwLDY4LDAsNzEsMTAwLDExOSwwLAorICAgIDEwMCwxMjAsMCwxMzIsMCwwLDEwMCwxMjAsMCwxMzEsMiwwLDkwLDY5LDAsNzEsCisgICAgMTAwLDEyMSwwLDEwMCwxMjIsMCwxMzIsMCwwLDEwMCwxMjIsMCwxMzEsMiwwLDkwLAorICAgIDcwLDAsNzEsMTAwLDEyMywwLDEwMCwxMjQsMCwxMzIsMCwwLDEwMCwxMjQsMCwxMzEsCisgICAgMiwwLDkwLDcxLDAsNzEsMTAwLDEyNSwwLDEwMCwxMjYsMCwxMzIsMCwwLDEwMCwKKyAgICAxMjYsMCwxMzEsMiwwLDkwLDcyLDAsNzEsMTAwLDEyNywwLDEwMCwxMjgsMCwxMzIsCisgICAgMCwwLDEwMCwxMjgsMCwxMzEsMiwwLDkwLDczLDAsMTAwLDEyOSwwLDEwMCwxMzAsCisgICAgMCwxMzIsMCwwLDkwLDc0LDAsMTAwLDUxLDAsMTAwLDEzMSwwLDEwMCwxMzIsMCwKKyAgICAxMzIsMSwwLDkwLDc1LDAsMTAwLDEzMywwLDEwMCwxMzQsMCwxMzIsMCwwLDkwLAorICAgIDc2LDAsMTAwLDEzNSwwLDkwLDc3LDAsMTAxLDc3LDAsMTAwLDEzNiwwLDIzLDkwLAorICAgIDc4LDAsMTAwLDEzNywwLDEwMCwxMzgsMCwxMzIsMCwwLDkwLDc5LDAsMTAwLDEzOSwKKyAgICAwLDEwMCwxNDAsMCwxMzIsMCwwLDkwLDgwLDAsMTAwLDUxLDAsMTAwLDc4LDAsCisgICAgMTAwLDE0MSwwLDEwMCwxNDIsMCwxMzIsMiwwLDkwLDgxLDAsMTAwLDE0MywwLDEwMCwKKyAgICAxNDQsMCwxMzIsMCwwLDkwLDgyLDAsMTAwLDE0NSwwLDEwMCwxNDYsMCwxMzIsMCwKKyAgICAwLDkwLDgzLDAsMTAwLDE0NywwLDEwMCwxNDgsMCwxMzIsMCwwLDkwLDg0LDAsCisgICAgMTAwLDUxLDAsMTAwLDUxLDAsMTAyLDAsMCwxMDAsNzgsMCwxMDAsMTQ5LDAsMTAwLAorICAgIDE1MCwwLDEzMiw0LDAsOTAsODUsMCwxMDAsMTUxLDAsMTAwLDE1MiwwLDEzMiwwLAorICAgIDAsOTAsODYsMCwxMDAsMTUzLDAsMTAwLDE1NCwwLDEzMiwwLDAsOTAsODcsMCwKKyAgICAxMDAsMTU1LDAsMTAwLDE1NiwwLDEzMiwwLDAsOTAsODgsMCwxMDAsNTEsMCw4MywKKyAgICA0MSwxNTgsOTcsODMsMSwwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LAorICAgIDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsNDYsMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTA1LDExNSwzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsCisgICAgMTE2LDExMSwzMiw5OCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsCisgICAgOTgsMTAxLDEwMSwxMTAsMzIsMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LAorICAgIDk5LDEwNCwxMCwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwKKyAgICAxMDEsMzIsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwKKyAgICAxMTAsMTE2LDExMSwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsCisgICAgMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LAorICAgIDExNyw5OSwxMDQsMzIsMTA1LDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwKKyAgICAzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LAorICAgIDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LAorICAgIDEwNyw0NiwzMiw3OSwxMTAsMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsCisgICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMiwxMTcsOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsCisgICAgMzIsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDIxOCwzLDExOSwxMDUsMTEwLDIxOCwKKyAgICA2LDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMjE4LDYsMTAwLDk3LDExNCwxMTksMTA1LDExMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LAorICAgIDIsMCwxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLDEsMCwxMDAsMiwKKyAgICAwLDEzMiwwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywwLDEwMCwyLDAsCisgICAgMTMyLDAsMCwxMjUsMCwwLDEyNCwwLDAsODMsNDEsNCw3OCw5OSwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDgzLDAsCisgICAgMCwwLDExNSwxMywwLDAsMCwxMDAsMSwwLDExNiwwLDAsMTA2LDEsMCwKKyAgICAxMDcsNiwwLDgzLDQxLDIsMTIyLDUzLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsCisgICAgMTAxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsCisgICAgMTEwLDExNSwxMDEsMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsMTE1LDEyLDAsCisgICAgMCwwLDgwLDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDQxLDIsCisgICAgMjE4LDMsOTUsMTExLDExNSw5MCw3LDEwMSwxMTAsMTE4LDEwNSwxMTQsMTExLDExMCwxNjksMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwyNTAsMjksNjAsMTAyLDExNCwxMTEsCisgICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKKyAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMjE4LDExLDk1LDExNCwxMDEsMTA4LDk3LAorICAgIDEyMCw5NSw5OSw5NywxMTUsMTAxLDMwLDAsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMiwxMjIsMzcsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LAorICAgIDk3LDExNSwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsCisgICAgMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDk5LDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDEsMCwwLDAsODMsMCwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw1Myw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsCisgICAgMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LAorICAgIDMyLDk4LDEwMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsCisgICAgNDUsMTA1LDExMCwxMTUsMTAxLDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDcwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw2LDAsMCwwLDM0LDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMiw0MSw0LDIxOCwzLDExNSwxMjEsMTE1LAorICAgIDIxOCw4LDExMiwxMDgsOTcsMTE2LDEwMiwxMTEsMTE0LDEwOSwyMTgsMTAsMTE1LDExNiw5NywxMTQsCisgICAgMTE2LDExNSwxMTksMTA1LDExNiwxMDQsMjE4LDI3LDk1LDY3LDY1LDgzLDY5LDk1LDczLDc4LAorICAgIDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LDgwLDc2LDY1LDg0LDcwLDc5LAorICAgIDgyLDc3LDgzLDQxLDEsMTE0LDYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDEwOSw5NywxMDcsMTAxLAorICAgIDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDI4LDAsMCwwLDExNSwKKyAgICA4LDAsMCwwLDAsMSwxOCwxLDE1LDQsMTIsMywxMTQsMTEsMCwwLAorICAgIDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwxMjQsMCwKKyAgICAwLDEzMSwxLDAsMTAwLDEsMCw2NCwxMDYsMSwwLDEwMCwyLDAsMTAwLDMsCisgICAgMCwxMzEsMiwwLDgzLDQxLDQsMTIyLDQyLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LAorICAgIDMyLDk3LDMyLDUxLDUwLDQ1LDk4LDEwNSwxMTYsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsCisgICAgMTE0LDMyLDExNiwxMTEsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LAorICAgIDk3LDExMCw0NiwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsMywwLDIzMyw0LAorICAgIDAsMCwwLDIxOCw2LDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQxLDIsMjE4LDMsMTA1LAorICAgIDExMCwxMTYsMjE4LDgsMTE2LDExMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMSwyMTgsMSwKKyAgICAxMjAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDcsOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMyw0MCwwLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDIsMTE0LDE3LDAsMCwwLDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LAorICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLAorICAgIDIsMCw4Myw0MSwyLDEyMiw0Nyw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw1MiwKKyAgICAzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSwKKyAgICA0NSwxMDEsMTEwLDEwMCwxMDUsOTcsMTEwLDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLDEwNSwxMTAsCisgICAgMTE2LDEwMSwxMDMsMTAxLDExNCw0NiwxMTQsMTMsMCwwLDAsNDEsMiwxMTQsMTQsMCwKKyAgICAwLDAsMjE4LDEwLDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMSwKKyAgICA5MCw5LDEwNSwxMTAsMTE2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNyw5NSwxMTQsOTUsMTA4LAorICAgIDExMSwxMTAsMTAzLDQ1LDAsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTQsMTksCisgICAgMCwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCisgICAgMywwLDAsMCw3MSwwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwwLDAsNjgsCisgICAgMTMxLDEsMCwxMzEsMSwwLDgzLDQxLDMsMTIyLDMxLDgyLDEwMSwxMTIsMTA4LDk3LAorICAgIDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCw0NiwxMDYsMTExLDEwNSwxMTAsNDAsNDEsNDYsOTksMSwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsNCwwLDAsMCw4MywwLDAsMCwxMTUsCisgICAgMzcsMCwwLDAsMTAzLDAsMCwxMjQsMCwwLDkzLDI3LDAsMTI1LDEsMCwKKyAgICAxMjQsMSwwLDExNCw2LDAsMTI0LDEsMCwxMDYsMCwwLDExNiwxLDAsMTMxLAorICAgIDEsMCwxNDUsMiwwLDExMyw2LDAsODMsMTE0LDQsMCwwLDAsNDEsMiwKKyAgICAyMTgsNiwxMTQsMTE1LDExNiwxMTQsMTA1LDExMiwyMTgsMTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LAorICAgIDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSw0MSwyLDIxOCwyLDQ2LDQ4LDIxOCwKKyAgICA0LDExMiw5NywxMTQsMTE2LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDI1MCwxMCw2MCwxMDgsMTA1LDExNSwxMTYsOTksMTExLDEwOSwxMTIsNjIsCisgICAgNTIsMCwwLDAsMTE1LDIsMCwwLDAsOSwxLDEyMiwzMCw5NSwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAorICAgIDQ2LDYwLDEwOCwxMDUsMTE1LDExNiw5OSwxMTEsMTA5LDExMiw2Miw0MSwyLDIxOCw4LDExMiwKKyAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDIxOCw0LDEwNiwxMTEsMTA1LDExMCw0MSwxLDIxOCwKKyAgICAxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTIsOTcsMTE0LDExNiwxMTUsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw1MCwwLDAsMCwxMTUsNCwwLDAsMCwwLAorICAgIDIsMTUsMSwxMTQsMjgsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDUsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMTM0LDAsCisgICAgMCwwLDExNiwwLDAsMTE2LDEsMCwxMzEsMSwwLDEwMCwxLDAsMTA3LDIsCisgICAgMCwxMTQsNTIsMCwxMjQsMCwwLDEwNiwyLDAsMTE2LDMsMCwxMzEsMSwwLAorICAgIDkyLDMsMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyNCwKKyAgICAzLDAsMTAyLDIsMCw4MywxMjAsNjksMCwxMTYsNCwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCw2OCw5Myw1NSwwLDEyNSw0LDAsMTI0LDQsMCwxMTYsMSwwLDEwNywKKyAgICA2LDAsMTE0LDY1LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCw0LDAsMTAwLDIsCisgICAgMCwxMDAsMSwwLDEzMSwxLDEsOTIsMiwwLDEyNSwxLDAsMTI1LDMsMCwKKyAgICAxMjQsMSwwLDEyNCwzLDAsMTAyLDIsMCw4MywxMTMsNjUsMCw4NywxMDAsMywKKyAgICAwLDEyNCwwLDAsMTAyLDIsMCw4Myw0MSw0LDEyMiwzMiw4MiwxMDEsMTEyLDEwOCwKKyAgICA5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLAorICAgIDk3LDExNiwxMDQsNDYsMTE1LDExMiwxMDgsMTA1LDExNiw0MCw0MSw0NiwyMzMsMSwwLDAsCisgICAgMCw5MCw4LDEwOSw5NywxMjAsMTE1LDExMiwxMDgsMTA1LDExNiwyMTgsMCw0MSw2LDIxOCwKKyAgICAzLDEwOCwxMDEsMTEwLDExNCwyMSwwLDAsMCwyMTgsMTAsMTE0LDExMiw5NywxMTQsMTE2LAorICAgIDEwNSwxMTYsMTA1LDExMSwxMTAsMTE0LDI1LDAsMCwwLDIxOCw4LDExNCwxMDEsMTE4LDEwMSwKKyAgICAxMTQsMTE1LDEwMSwxMDAsMjE4LDYsMTE0LDExNSwxMTIsMTA4LDEwNSwxMTYsNDEsNSwyMTgsNCwKKyAgICAxMTIsOTcsMTE2LDEwNCw5MCw1LDEwMiwxMTQsMTExLDExMCwxMTYsMjE4LDEsOTUsMjE4LDQsCisgICAgMTE2LDk3LDEwNSwxMDgsMTE0LDE2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDU2LDAsMCwwLDExNSwxNiwwLDAsMCwwLDIsCisgICAgMTgsMSwyNCwxLDEwLDEsMTksMSwxMiwxLDI3LDEsMTQsMSwxMTQsMzgsCisgICAgMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEyNCwwLDAsMTMxLDEsMCw4Myw0MSwxLDEyMiwxMjYsODMsMTE2LAorICAgIDk3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw3Nyw5NywxMDAsMTAxLDMyLDk3LDMyLDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsCisgICAgMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDEwOSw5NywKKyAgICAxMDcsMTAxLDMyLDEwNSwxMTYsMzIsMTAxLDk3LDExNSwxMDUsMTAxLDExNCwzMiwxMTYsMTExLDMyLAorICAgIDExMSwxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExMCwzMiwxMDEsMTIwLDExMiwxMDEsCisgICAgMTE0LDEwNSwxMDksMTAxLDExMCwxMTYsMTE1LDEwLDMyLDMyLDMyLDMyLDQwLDEwMSw0NiwxMDMsCisgICAgNDYsMzIsOTksOTcsOTksMTA0LDEwMSwzMiwxMTUsMTE2LDk3LDExNiwzMiwxMTQsMTAxLDExNSwKKyAgICAxMTcsMTA4LDExNiwxMTUsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNDEsMiwxMTQsMywKKyAgICAwLDAsMCw5MCw0LDExNSwxMTYsOTcsMTE2LDQxLDEsMTE0LDM1LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiw2OCwwLDAsMCwxMTUsCisgICAgMiwwLDAsMCwwLDcsMTE0LDM5LDAsMCwwLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwzLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw1OCwwLDAsMCwxMjEsMTYsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsCisgICAgMCwxMjUsMiwwLDg3LDExMCwyMiwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsCisgICAgNDAsMCwxLDEsMSwxMDAsMSwwLDgzLDg5LDExMCwxLDAsODgsMTI0LDIsCisgICAgMCwxMDYsMiwwLDEwMCwyLDAsNjQsMTI0LDEsMCwxMDcsMiwwLDgzLDQxLAorICAgIDMsMTIyLDQ5LDg0LDEwMSwxMTUsMTE2LDMyLDExOSwxMDQsMTAxLDExNiwxMDQsMTAxLDExNCwzMiwKICAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLAogICAgIDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTAxLDMyLDExNiwKLSAgICAxMjEsMTEyLDEwMSw0NiwxMDUsMCwyNDAsMCwwLDcwLDQwLDUsMCwwLDAsMTE3LAotICAgIDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNCwwLDAsMCwxMTUsMTE2LDk3LDExNiwKLSAgICAxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDUsMCwwLAotICAgIDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDcsMCwwLDAsMTE1LDExNiw5NSwxMDksMTExLAotICAgIDEwMCwxMDEsNDAsMywwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsNCwwLDAsMCwxMDksMTExLDEwMCwxMDEsMTE3LDksMCwwLDAsMTE1LDExNiwKLSAgICA5NywxMTYsOTUsMTA1LDExMCwxMDIsMTExLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSw5OCwwLDAsMCwxMTUsMTAsCi0gICAgMCwwLDAsMCwyLDMsMSwxOSwxLDEzLDEsOSwxLDExNywxOCwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwKLSAgICAxMTYsMTIxLDExMiwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNywzMSwwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsNDYsMTA1LDAsMTI4LDAsMCw0MCwxLDAsMCwwLDExNywxOCwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSwKLSAgICA5NSwxMTYsMTIxLDExMiwxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMiwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICAxMDgsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwzNCwwLDAsMCwxMjQsMCwwLDExNSwyMSwwLDExNiwwLDAsMTA2LAotICAgIDEsMCwxMzEsMCwwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEyNCwwLAotICAgIDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQwLDIsMCwwLDAsMTE3LDMwLDAsCi0gICAgMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMCwxMDUsMTE0LDQ2LAotICAgIDEwNSwwLDY0LDAsMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk1LAotICAgIDExMSwxMTUsMTE3LDYsMCwwLDAsMTAzLDEwMSwxMTYsOTksMTE5LDEwMCwxMTcsMTgsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsCi0gICAgMTE2LDEyMSwxMTIsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTQsMCwKLSAgICAwLDAsMTE1LDYsMCwwLDAsMCwyLDYsMSwxNSwxLDExNywxMSwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDEwNSwxODIsMSwKLSAgICAwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTcsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwxMDAsMSwwLDEwNiwKLSAgICAwLDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwKLSAgICAwLDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTE2LDIsMCwKLSAgICAxMDYsNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwwLDEwNiw2LDAsCi0gICAgNjYsMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LDQsMCwxMjEsNjAsCi0gICAgMCwxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywwLDEzMSwyLDAsCi0gICAgMTQzLDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEsODcsMTAwLDQsMCw4MSw4OCwxMTYsMiwwLDEwNiwxMCwwLDEyNCwKLSAgICAzLDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLDU5LDAsNCwxMTYsMTEsCi0gICAgMCwxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LDAsMTE2LDIsMCwKLSAgICAxMDYsMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMTgsMCw0LDExNiwKLSAgICAxMSwwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwxMTAsMSwwLDg4LAotICAgIDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLDQwLDUsMCwwLAotICAgIDAsMTE3LDE2MiwwLDAsMCw2NiwxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LAotICAgIDEwNSwxMTYsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiw5NywxMTYsMTExLDEwOSwxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjYsMTAxLDMyLDExMiwxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksCi0gICAgMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsCi0gICAgMTEwLDk5LDExNywxMTQsMTE0LDEwMSwxMTAsMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywKLSAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LAotICAgIDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCw0NiwxMTcsNSwwLDAsMCwxMjMsMTI1LDQ2LAotICAgIDEyMywxMjUsMTA1LDE4MiwxLDAsMCwxMTcsMiwwLDAsMCwxMTksOTgsNzgsNDAsCi0gICAgMTMsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsCi0gICAgMiwwLDAsMCwxMDUsMTAwLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsCi0gICAgMCwwLDAsMTExLDExMiwxMDEsMTEwLDExNyw2LDAsMCwwLDc5LDk1LDY5LDg4LAotICAgIDY3LDc2LDExNyw3LDAsMCwwLDc5LDk1LDY3LDgyLDY5LDY1LDg0LDExNyw4LAotICAgIDAsMCwwLDc5LDk1LDg3LDgyLDc5LDc4LDc2LDg5LDExNywzLDAsMCwwLAotICAgIDk1LDEwNSwxMTEsMTE3LDYsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzMsNzksMTE3LDUsCi0gICAgMCwwLDAsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLDExMiwKLSAgICAxMDgsOTcsOTksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsNiwwLDAsMCwxMTcsMTEwLDEwOCwxMDUsMTEwLDEwNyw0MCw2LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNiwxMDksMTEyLDExNywyLDAsMCwwLDEwMiwxMDAsMTE3LAotICAgIDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEzLDAsMCwwLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsCi0gICAgOTcsMTE2LDExMSwxMDksMTA1LDk5LDEyMSwwLDAsMCwxMTUsMjYsMCwwLDAsMCwKKyAgICAxMjEsMTEyLDEwMSw0Niw3MCwxMDUsMCwyNDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwKKyAgICAwLDIxOCw3LDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwyMTgsNywxMTUsMTE2LDk1LDEwOSwKKyAgICAxMTEsMTAwLDEwMSw0MSwzLDExNCwzNSwwLDAsMCwyMTgsNCwxMDksMTExLDEwMCwxMDEsCisgICAgOTAsOSwxMTUsMTE2LDk3LDExNiw5NSwxMDUsMTEwLDEwMiwxMTEsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE4LDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSw3OCwwLAorICAgIDAsMCwxMTUsMTAsMCwwLDAsMCwyLDMsMSwxNiwxLDEzLDEsOSwKKyAgICAxLDExNCw0MywwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQxLDIsMTIyLAorICAgIDMxLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsCisgICAgMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw0NiwKKyAgICAxMDUsMCwxMjgsMCwwLDQxLDEsMTE0LDQzLDAsMCwwLDQxLDEsMTE0LDM1LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxMiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwKKyAgICA4NywwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE0LDQ0LDAsMCwwLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTE1LDIxLDAsCisgICAgMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwKKyAgICAyLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDEsMiwxMjIsMzAsCisgICAgODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwKKyAgICAxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAwLDEwNSwxMTQsNDYsMTA1LDAsCisgICAgNjQsMCwwLDQxLDMsMTE0LDMsMCwwLDAsMjE4LDYsMTAzLDEwMSwxMTYsOTksCisgICAgMTE5LDEwMCwxMTQsNDMsMCwwLDAsNDEsMSwxMTQsMzUsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsOTIsMCwwLDAsMTE1LDYsCisgICAgMCwwLDAsMCwyLDYsMSwxNSwxLDExNCw0NiwwLDAsMCwxMDUsMTgyLAorICAgIDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLAorICAgIDE3LDAsMCwwLDY3LDAsMCwwLDExNSwxOTIsMCwwLDAsMTAwLDEsMCwKKyAgICAxMDYsMCwwLDEyNCwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLAorICAgIDIsMCwxMjUsMywwLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDExNiwyLAorICAgIDAsMTA2LDQsMCwxMTYsMiwwLDEwNiw1LDAsNjYsMTE2LDIsMCwxMDYsNiwKKyAgICAwLDY2LDEyNCwyLDAsMTAwLDIsMCw2NCwxMzEsMywwLDEyNSw0LDAsMTIxLAorICAgIDYwLDAsMTE2LDcsMCwxMDYsOCwwLDEyNCw0LDAsMTAwLDMsMCwxMzEsMiwKKyAgICAwLDE0MywyMCwwLDEyNSw1LDAsMTI0LDUsMCwxMDYsOSwwLDEyNCwxLDAsCisgICAgMTMxLDEsMCwxLDg3LDEwMCw0LDAsODEsODgsMTE2LDIsMCwxMDYsMTAsMCwKKyAgICAxMjQsMywwLDEyNCwwLDAsMTMxLDIsMCwxLDg3LDExMCw1OSwwLDQsMTE2LAorICAgIDExLDAsMTA3LDEwLDAsMTE0LDE4NywwLDEsMSwxLDEyMSwxNywwLDExNiwyLAorICAgIDAsMTA2LDEyLDAsMTI0LDMsMCwxMzEsMSwwLDEsODcsMTEwLDE4LDAsNCwKKyAgICAxMTYsMTEsMCwxMDcsMTAsMCwxMTQsMTc5LDAsMSwxLDEsODksMTEwLDEsMCwKKyAgICA4OCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDQsMCw4Myw0MSw1LDEyMiwKKyAgICAxNjIsNjYsMTAxLDExNSwxMTYsNDUsMTAxLDEwMiwxMDIsMTExLDExNCwxMTYsMzIsMTAyLDExNywxMTAsCisgICAgOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwzMiwxMDAsCisgICAgOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE2LAorICAgIDExMSwxMDksMTA1LDk5LDk3LDEwOCwxMDgsMTIxLDQ2LDEwLDMyLDMyLDMyLDMyLDY2LDEwMSwKKyAgICAzMiwxMTIsMTE0LDEwMSwxMTIsOTcsMTE0LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLAorICAgIDEwMCwxMDgsMTAxLDMyLDk3LDMyLDcwLDEwNSwxMDgsMTAxLDY5LDEyMCwxMDUsMTE1LDExNiwxMTUsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMDIsMzIsOTksMTExLDExMCw5OSwxMTcsMTE0LDExNCwKKyAgICAxMDEsMTEwLDExNiwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiwxMTYsCisgICAgMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTAxLDEwOSwxMTIsMTExLDExNCw5NywxMTQsMTIxLAorICAgIDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDExNiwxMTYsMTAxLDEwOSwxMTIsMTE2LAorICAgIDEwMSwxMDAsNDYsMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDEwNSwxODIsMSwwLDAsOTAsCisgICAgMiwxMTksOTgsNzgsNDEsMTMsMjE4LDYsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwyMTgsMiwKKyAgICAxMDUsMTAwLDExNCwzLDAsMCwwLDkwLDQsMTExLDExMiwxMDEsMTEwLDkwLDYsNzksCisgICAgOTUsNjksODgsNjcsNzYsOTAsNyw3OSw5NSw2Nyw4Miw2OSw2NSw4NCw5MCw4LAorICAgIDc5LDk1LDg3LDgyLDc5LDc4LDc2LDg5LDIxOCwzLDk1LDEwNSwxMTEsMjE4LDYsNzAsCisgICAgMTA1LDEwOCwxMDEsNzMsNzksMjE4LDUsMTE5LDExNCwxMDUsMTE2LDEwMSwyMTgsNywxMTQsMTAxLAorICAgIDExMiwxMDgsOTcsOTksMTAxLDExNCw0MCwwLDAsMCw5MCw2LDExNywxMTAsMTA4LDEwNSwKKyAgICAxMTAsMTA3LDQxLDYsMTE0LDM1LDAsMCwwLDIxOCw0LDEwMCw5NywxMTYsOTcsMTE0LAorICAgIDQyLDAsMCwwLDkwLDgsMTEyLDk3LDExNiwxMDQsOTUsMTE2LDEwOSwxMTIsOTAsMiwKKyAgICAxMDIsMTAwLDIxOCw0LDEwMiwxMDUsMTA4LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSwKKyAgICA5NywxMTYsMTExLDEwOSwxMDUsOTksOTksMCwwLDAsMTE1LDI2LDAsMCwwLDAsCiAgICAgNSwyNCwxLDksMSwzMywxLDMsMywyMSwxLDE5LDEsMjAsMSwxMywKLSAgICAxLDMsMSwxNywxLDEzLDEsNSwxLDExNywxMywwLDAsMCw5NSwxMTksCi0gICAgMTE0LDEwNSwxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSw5OSwyLDAsMCwwLAotICAgIDAsMCwwLDAsMywwLDAsMCw3LDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5NSwwLDAsMCwxMjAsNjksMCwxMDAsMSwwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMDAsNCwwLDEwMyw0LDAsNjgsOTMsNDksMCwxMjUsMiwwLDExNiwwLAotICAgIDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDE5LDAsMTE2LDEsMCwKLSAgICAxMjQsMCwwLDEyNCwyLDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLAotICAgIDIsMCwxMzEsMywwLDEsMTEzLDE5LDAsMTEzLDE5LDAsODcsMTI0LDAsMCwKLSAgICAxMDYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwxLDAsMSwKLSAgICAxMDAsNSwwLDgzLDQwLDYsMCwwLDAsMTE3LDQ3LDAsMCwwLDgzLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMzIsMTE1LDExNyw5OCwxMTUsMTE2LDEwNSwxMTYsMTE3LDExNiwxMDEsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsMTAyLDExNywxMTAsOTksMTE2LDExMSwxMTEsMTA4LDExNSw0NiwxMTcsMTEyLAotICAgIDEwMCw5NywxMTYsMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQ2LDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSw3OCw0MCw1LDAsMCwwLDExNyw3LDAsMCwKLSAgICAwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDcsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTcsMTE2LDExNiwxMTQsMTE3LDcsMCwwLDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTAwLDEwNSw5OSwxMTYsOTUsOTUsMTE3LDYsMCwKLSAgICAwLDAsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw0MCwzLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDExMCwxMDEsMTE5LDExNywzLDAsMCwwLDExMSwxMDgsMTAwLDExNyw3LDAsCi0gICAgMCwwLDExNCwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiwxNDMsCi0gICAgMCwwLDAsMTE1LDgsMCwwLDAsMCwyLDI1LDEsMTUsMSwzMiwxLAotICAgIDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDk5LDEsMCwwLDAsMCwKLSAgICAwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LAotICAgIDE2LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMzEsMSwwLDEyNCwwLDAsCi0gICAgMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNyw3NSwwLDAsMCw2NywxMTQsCi0gICAgMTAxLDk3LDExNiwxMDEsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDEwMSwxMTAsMTE2LDEwMSwxMTQsMTAxLAotICAgIDEwMCwzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDQwLDIsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE2LDEyMSwxMTIsMTAxLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsNDAsCi0gICAgMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTAsMTAxLAotICAgIDExOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxNTQsMCwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCw2LDExNywxMCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSwyMCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwxMDgsCi0gICAgMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsNzgsNDAsMywwLDAsMCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LAotICAgIDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLDEsMCwwLDAsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNCwwLDAsMCwKLSAgICA5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwxNzEsMCwKLSAgICAwLDAsMTE1LDIsMCwwLDAsMTYsMSwxMTcsMTQsMCwwLDAsOTUsNjgsCi0gICAgMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsOTksMSwwLDAsCi0gICAgMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLDAsCi0gICAgMCwxMTUsODYsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwKLSAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKLSAgICAzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLDAsODMsNDAsMTMsMCwwLAotICAgIDAsMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LAotICAgIDEwNywxMTcsMTY5LDAsMCwwLDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwKKyAgICAxLDMsMSwxNywxLDEzLDEsNSwxLDExNCw1NSwwLDAsMCw5OSwyLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCw3LDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw5NSwwLDAsMCwxMjAsNjksMCwxMDAsMSwwLDEwMCwyLAorICAgIDAsMTAwLDMsMCwxMDAsNCwwLDEwMyw0LDAsNjgsOTMsNDksMCwxMjUsMiwKKyAgICAwLDExNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDE5LDAsCisgICAgMTE2LDEsMCwxMjQsMCwwLDEyNCwyLDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwKKyAgICAyLDAsMTMxLDIsMCwxMzEsMywwLDEsMTEzLDE5LDAsMTEzLDE5LDAsODcsCisgICAgMTI0LDAsMCwxMDYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwKKyAgICAxLDAsMSwxMDAsNSwwLDgzLDQxLDYsMTIyLDQ3LDgzLDEwNSwxMDksMTEyLDEwOCwKKyAgICAxMDEsMzIsMTE1LDExNyw5OCwxMTUsMTE2LDEwNSwxMTYsMTE3LDExNiwxMDEsMzIsMTAyLDExMSwxMTQsCisgICAgMzIsMTAyLDExNywxMTAsOTksMTE2LDExMSwxMTEsMTA4LDExNSw0NiwxMTcsMTEyLDEwMCw5NywxMTYsCisgICAgMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQ2LDIxOCwxMCw5NSw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwyMTgsOCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwKKyAgICAyMTgsMTIsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMjE4LDcsCisgICAgOTUsOTUsMTAwLDExMSw5OSw5NSw5NSw3OCw0MSw1LDIxOCw3LDEwNCw5NywxMTUsOTcsCisgICAgMTE2LDExNiwxMTQsMjE4LDcsMTE1LDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMjE4LDcsMTAzLDEwMSwKKyAgICAxMTYsOTcsMTE2LDExNiwxMTQsMjE4LDgsOTUsOTUsMTAwLDEwNSw5OSwxMTYsOTUsOTUsMjE4LAorICAgIDYsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw0MSwzLDkwLDMsMTEwLDEwMSwxMTksOTAsMywKKyAgICAxMTEsMTA4LDEwMCwxMTQsNTIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDUsOTUsMTE5LDExNCw5NywxMTIsMTIxLDAsCisgICAgMCwwLDExNSw4LDAsMCwwLDAsMiwyNSwxLDE1LDEsMzIsMSwxMTQsCisgICAgNjUsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsCisgICAgMCwxMTYsMSwwLDEzMSwxLDAsMTI0LDAsMCwxMzEsMSwwLDgzLDQxLDEsCisgICAgNzgsNDEsMiwyMTgsNCwxMTYsMTIxLDExMiwxMDEsMTE0LDcsMCwwLDAsNDEsMSwKKyAgICAyMTgsNCwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTI5LDAsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTQsNjgsMCwKKyAgICAwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCw2NCwwLDAsMCwxMTUsMTYsMCwwLDAsMTAxLDAsMCw5MCwKKyAgICAxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw4Myw0MSwyLDIxOCwxNCwKKyAgICA5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw3OCw0MSwKKyAgICAzLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw2OSwwLDAsMCwxNDQsMCwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMTIsMSwxMTQsNjksMCwwLDAsOTksMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsODIsCisgICAgMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAorICAgIDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwKKyAgICAwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLAorICAgIDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwKKyAgICAwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsOCwKKyAgICAwLDEwMCwxMiwwLDgzLDQxLDEzLDIxOCwxMSw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDc2LDExMSw5OSwxMDcsMTIyLDE2OSw2NSwzMiwxMTQsMTAxLDk5LDExNywxMTQsMTE1LDEwNSwxMTgsCiAgICAgMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAogICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA1LDExNSwzMiw5NywKICAgICA5OCwxMDgsMTAxLDMyLDExNiwxMTEsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwzMiwxMDAsMTAxLApAQCAtNDA2LDQ1ICszNDUsMzMgQEAKICAgICA2NywwLDAsMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKICAgICAwLDAsMTI0LDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLAogICAgIDAsMTI0LDAsMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwKLSAgICAxMDAsMCwwLDEyNCwwLDAsOTUsNiwwLDEwMCwxLDAsMTI0LDAsMCw5NSwKLSAgICA3LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDgsMCwxMDAsMCwwLDgzLDQwLAotICAgIDIsMCwwLDAsNzgsMTA1LDAsMCwwLDAsNDAsOSwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNywxMywwLDAsMCwKLSAgICA5NywxMDgsMTA4LDExMSw5OSw5NywxMTYsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNyw0LDAsCi0gICAgMCwwLDEwOCwxMTEsOTksMTA3LDExNyw2LDAsMCwwLDExOSw5NywxMDcsMTAxLDExNywKLSAgICAxMTIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNSwwLAotICAgIDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDcsMCwwLDAsMTE5LDk3LDEwNSwxMTYsCi0gICAgMTAxLDExNCwxMTUsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsMTgxLDAsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwKLSAgICAxNSwxLDksMSw5LDEsOSwxLDExNywyMCwwLDAsMCw5NSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAotICAgIDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsCi0gICAgMTIwLDU5LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsCi0gICAgMywwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw1NSwwLDEwMCwxLAotICAgIDAsODMsMTI0LDMsMCwxMDYsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsMSwKLSAgICAwLDEwNywyLDAsMTE0LDI0LDAsMTAwLDIsMCw4MywxMTMsMjQsMCwxMDAsMCwKLSAgICAwLDgzLDQwLDMsMCwwLDAsNzgsNzAsODQsNDAsOCwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNyw5LDAsMCwwLAotICAgIDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwKLSAgICAxMTAsMTAxLDExNCwxMTcsMTIsMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwKLSAgICAxMDMsOTUsMTExLDExMCwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsCi0gICAgNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSw0MCw0LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMiwwLDAsMCwxMDksMTAxLDExNywzLDAsCi0gICAgMCwwLDExNiwxMDUsMTAwLDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDEwNCwKLSAgICA5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMTg5LDAsMCwwLDExNSwKLSAgICAxOCwwLDAsMCwwLDIsMTIsMSw5LDEsMywxLDE1LDEsMTIsMSwKLSAgICA0LDEsOSwxLDEyLDEsMTE3LDI0LDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LAorICAgIDEwMCwwLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDEsMCwxMjQsMCwwLDk1LAorICAgIDYsMCwxMDAsMSwwLDEyNCwwLDAsOTUsNywwLDEwMCwwLDAsODMsNDEsCisgICAgMiw3OCwyMzMsMCwwLDAsMCw0MSw4LDIxOCw3LDk1LDExNiwxMDQsMTE0LDEwMSwKKyAgICA5NywxMDAsOTAsMTMsOTcsMTA4LDEwOCwxMTEsOTksOTcsMTE2LDEwMSw5NSwxMDgsMTExLDk5LAorICAgIDEwNywyMTgsNCwxMDgsMTExLDk5LDEwNywyMTgsNiwxMTksOTcsMTA3LDEwMSwxMTcsMTEyLDExNCwKKyAgICA2NywwLDAsMCwyMTgsNSwxMTEsMTE5LDExMCwxMDEsMTE0LDIxOCw1LDk5LDExMSwxMTcsCisgICAgMTEwLDExNiwyMTgsNywxMTksOTcsMTA1LDExNiwxMDEsMTE0LDExNSw0MSwyLDIxOCw0LDExNSwKKyAgICAxMDEsMTA4LDEwMiwxMTQsNjcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAorICAgIDk1LDE1NCwwLDAsMCwxMTUsMTIsMCwwLDAsMCwxLDE1LDEsMTUsMSwKKyAgICA5LDEsOSwxLDksMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwKKyAgICAxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsNCwwLDAsMCwyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw4NywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsCisgICAgMSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsMiwwLDEyMCw1OSwwLDExNiwzLAorICAgIDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywwLAorICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsNTUsMCwxMDAsMSwwLDgzLDEyNCwzLDAsCisgICAgMTA2LDIsMCwxMjUsMiwwLDEyNCwyLDAsMTI0LDEsMCwxMDcsMiwwLDExNCwKKyAgICAyNCwwLDEwMCwyLDAsODMsMTEzLDI0LDAsMTAwLDAsMCw4Myw0MSwzLDc4LAorICAgIDcwLDg0LDQxLDUsMTE0LDcyLDAsMCwwLDIxOCw5LDEwMywxMDEsMTE2LDk1LDEwNSwKKyAgICAxMDAsMTAxLDExMCwxMTYsMTE0LDc1LDAsMCwwLDIxOCwxMiw5NSw5OCwxMDgsMTExLDk5LAorICAgIDEwNywxMDUsMTEwLDEwMyw5NSwxMTEsMTEwLDIxOCwzLDEwMywxMDEsMTE2LDQxLDQsMTE0LDc4LAorICAgIDAsMCwwLDIxOCwyLDEwOSwxMDEsMjE4LDMsMTE2LDEwNSwxMDAsMTE0LDczLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxMiwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDE2MiwwLAorICAgIDAsMCwxMTUsMTgsMCwwLDAsMCwyLDEyLDEsOSwxLDMsMSwxNSwKKyAgICAxLDEyLDEsNCwxLDksMSwxMiwxLDEyMiwyNCw5NSw3NywxMTEsMTAwLDExNywKICAgICAxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsCiAgICAgMTExLDk5LDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKICAgICAxNywwLDAsMCw2NywwLDAsMCwxMTUsMjE0LDAsMCwwLDExNiwwLDAsCkBAIC00NTMsMjg2MSArMzgwLDMwMTYgQEAKICAgICAxMzAsMCwxLDEyNCwwLDAsMTA2LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE1LAogICAgIDY4LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwxLDAsMTA3LDIsMCwxMTQsOTYsCiAgICAgMCwxMjQsMSwwLDEyNCwwLDAsOTUsNSwwLDEyNCwwLDAsNCwxMDYsNCwKLSAgICAwLDEwMCwyLDAsNTUsMiw5NSw0LDAsMTAwLDUsMCw4MywxMjQsMCwwLAotICAgIDEwNiw3LDAsMTMxLDAsMCwxMTQsMTI3LDAsMTE2LDgsMCwxMDAsMywwLDEyNCwKKyAgICAwLDEwMCwyLDAsNTUsMiw5NSw0LDAsMTAwLDMsMCw4MywxMjQsMCwwLAorICAgIDEwNiw2LDAsMTMxLDAsMCwxMTQsMTI3LDAsMTE2LDcsMCwxMDAsNCwwLDEyNCwKICAgICAwLDAsMjIsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCi0gICAgOSwwLDEwNiwxMCwwLDEwMCw2LDAsMTMxLDEsMCwxMTQsMTYzLDAsMTI0LDAsCi0gICAgMCw0LDEwNiwxMiwwLDEwMCwyLDAsNTUsMiw5NSwxMiwwLDExMCwwLDAsCi0gICAgODcsMTAwLDQsMCw4MSw4OCwxMjQsMCwwLDEwNiw5LDAsMTA2LDEwLDAsMTMxLAotICAgIDAsMCwxLDEyNCwwLDAsMTA2LDksMCwxMDYsMTMsMCwxMzEsMCwwLDEsCi0gICAgMTEzLDI4LDAsODcsMTAwLDQsMCwxMTYsMiwwLDEyNCwxLDAsNjEsODgsMTAwLAotICAgIDQsMCw4Myw0MCw3LDAsMCwwLDExNywxODUsMCwwLDAsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNyw0NiwzMiwzMiwKLSAgICA3MywxMDIsMzIsOTcsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDAsCi0gICAgMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwKLSAgICAxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywzMiw5NSwKLSAgICA2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LAotICAgIDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsNzksMTE2LDEwNCwxMDEsMTE0LDExOSwxMDUsMTE1LDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiw5NywKLSAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiw5NywxMTAsMTAwLDMyLDg0LDExNCwxMTcsMTAxLAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCw0NiwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMDUsMSwwLDAsMCwKLSAgICAxMTcsMjMsMCwwLDAsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLDEwMSwKLSAgICAxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwzNywxMTQsNzgsODQsNzAsNDAsCi0gICAgMTQsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwKLSAgICAxMTcsOSwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNywxMiwKLSAgICAwLDAsMCw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLDEwMyw5NSwxMTEsMTEwLDExNywKLSAgICA0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsCi0gICAgMTEwLDExNiwxMTcsNSwwLDAsMCwxMTEsMTE5LDExMCwxMDEsMTE0LDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDExNywxMiwwLDAsMCwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsCi0gICAgOTcsMTAwLDEwOCwxMTEsOTksMTA3LDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLAotICAgIDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsMCwxMTksOTcsCi0gICAgMTA3LDEwMSwxMTcsMTEyLDExNyw3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDcsMCwwLDAsMTE5LAotICAgIDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LAotICAgIDExNSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsCi0gICAgMTE3LDMsMCwwLDAsMTE2LDEwNSwxMDAsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDIwMSwwLDAsMCwxMTUsMzIsMCwwLDAsMCw2LDEyLDEsMTAsMSwzLAotICAgIDEsMywxLDEwLDEsMzAsMSw5LDEsMTUsMSw0LDEsMTIsMSwxOSwKLSAgICAxLDE4LDEsMjQsMiwxMywxLDIwLDIsMTE3LDE5LDAsMCwwLDk1LDc3LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEwLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNjUsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTQzLDEzOCwwLAotICAgIDEsMTI0LDAsMCwxMDYsMywwLDEyNCwxLDAsMTA3LDMsMCwxMTQsNTIsMCwKLSAgICAxMTYsNCwwLDEwMCwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDQsMCwxMTUsNzMsMCwxMTYsNiwKLSAgICAwLDEzMCwxLDAsMTI0LDAsMCw0LDEwNiw1LDAsMTAwLDMsMCw1NiwyLAotICAgIDk1LDUsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLDIsMCwxMDcsMiwwLDExNCwKLSAgICAxNTUsMCwxMDAsMCwwLDEyNCwwLDAsOTUsMywwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMTQsMTU1LDAsMTI0LDAsMCw0LDEwNiw4LDAsMTAwLDMsMCw1NiwyLAotICAgIDk1LDgsMCwxMjQsMCwwLDEwNiw5LDAsMTA2LDEwLDAsMTMxLDAsMCwxLAotICAgIDExMywxNTUsMCwxMTAsMCwwLDg3LDEwMCwwLDAsODEsODgsMTAwLDAsMCw4MywKLSAgICA0MCw0LDAsMCwwLDc4LDExNywzMSwwLDAsMCw5OSw5NywxMTAsMTEwLDExMSwKLSAgICAxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMDUsMCwwLDAsMCwxMDUsCi0gICAgMSwwLDAsMCw0MCwxMSwwLDAsMCwxMTcsNywwLDAsMCw5NSwxMTYsCi0gICAgMTA0LDExNCwxMDEsOTcsMTAwLDExNyw5LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsCi0gICAgMTAxLDExMCwxMTYsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDUsMCwwLAotICAgIDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsMTIsMCwwLDAsODIsMTE3LDExMCwxMTYsMTA1LAotICAgIDEwOSwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLAotICAgIDExNiwxMTcsMTQsMCwwLDAsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsMTExLDExMCw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDcsMCwKLSAgICAwLDAsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsMTE3LDYsMCwwLDAsMTE5LDk3LAotICAgIDEwNywxMDEsMTE3LDExMiwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwKLSAgICA0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMywKLSAgICAwLDAsMCwxMTYsMTA1LDEwMCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDIyNiwwLAotICAgIDAsMCwxMTUsMjIsMCwwLDAsMCwxLDEyLDEsMTAsMSwxNSwxLDE1LAotICAgIDEsMjEsMSwxNSwxLDE1LDEsOSwxLDksMSwxNSwxLDExNywxOSwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsMTAwLAotICAgIDEsMCwxMjQsMCwwLDEwNiwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLAotICAgIDAsMTAyLDIsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywyMSwwLDAsCi0gICAgMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsMzcsMTE0LDQxLAotICAgIDMyLDk3LDExNiwzMiwzNywxMDAsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsMiwwLDAsMCwxMDUsMTAwLDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDk1LDk1LDIzOSwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDIwLDAsCi0gICAgMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwKLSAgICAxMTQsMTAxLDExMiwxMTQsOTUsOTUsNzgsNDAsOSwwLDAsMCwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywKLSAgICAxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNywxMiwwLDAsMCwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDExNyw3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LAotICAgIDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMTc1LDAsMCwwLDExNSwxMiwwLDAsCi0gICAgMCwxNiw0LDYsMiwxMiw4LDEyLDEyLDEyLDI1LDEyLDEzLDExNywxMSwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLAotICAgIDAsMCwxMTUsNzQsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsCi0gICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLAotICAgIDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwKLSAgICAwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsCi0gICAgMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsCi0gICAgODMsNDAsMTEsMCwwLDAsMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LAotICAgIDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMTE3LDg2LDAsMCwwLAotICAgIDY1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNzYsMTExLDk5LDEwNywzMiwxMDEsMTEzLDExNywxMDUsMTE4LDk3LDEwOCwxMDEsMTEwLDExNiwzMiwKLSAgICAxMDIsMTExLDExNCwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk4LDExNywxMDUsMTA4LDEwMCwKLSAgICAxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDExMSwxMTcsMTE2LDEwLDMyLDMyLDMyLDMyLDEwOSwxMTcsCi0gICAgMTA4LDExNiwxMDUsNDUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsMTE3LAotICAgIDExMiwxMTIsMTExLDExNCwxMTYsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsCi0gICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMSwwLDEyNCwwLDAsOTUsCi0gICAgMSwwLDEwMCwwLDAsODMsNDAsMiwwLDAsMCw3OCwxMDUsMCwwLDAsCi0gICAgMCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywKLSAgICA1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwyNDcsMCwwLDAsMTE1LDQsMCwKLSAgICAwLDAsMCwxLDksMSwxMTcsMjUsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksCi0gICAgMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLAotICAgIDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwwLDAsMTI0LDAsCi0gICAgMCw0LDEwNiwwLDAsMTAwLDEsMCw1NSwyLDk1LDAsMCwxMDAsMiwwLAotICAgIDgzLDQwLDMsMCwwLDAsNzgsMTA1LDEsMCwwLDAsODQsNDAsMiwwLAotICAgIDAsMCwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDQsMCwwLAotICAgIDAsODQsMTE0LDExNywxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDI1MSwwLDAsMCwxMTUsCi0gICAgNCwwLDAsMCwwLDEsMTUsMSwxMTcsMjQsMCwwLDAsOTUsNjgsMTE3LAotICAgIDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwKLSAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQ5LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDMwLDAsMTE2LDEsCi0gICAgMCwxMDAsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsCi0gICAgNCwxMDYsMCwwLDEwMCwzLDAsNTYsMiw5NSwwLDAsMTAwLDAsMCw4MywKLSAgICA0MCw0LDAsMCwwLDc4LDEwNSwwLDAsMCwwLDExNywzMSwwLDAsMCwKLSAgICA5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LAotICAgIDExMCw0NSw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMDUsCi0gICAgMSwwLDAsMCw0MCwyLDAsMCwwLDExNyw1LDAsMCwwLDk5LDExMSwKLSAgICAxMTcsMTEwLDExNiwxMTcsMTIsMCwwLDAsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsCi0gICAgMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMjU1LDAsMCwwLDExNSw2LAotICAgIDAsMCwwLDAsMSwxNSwxLDE1LDEsMTE3LDI0LDAsMCwwLDk1LDY4LAotICAgIDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTE0LAotICAgIDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsCi0gICAgMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsCi0gICAgMTAwLDEsMCwxMjQsMCwwLDEwNiwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwKLSAgICAxLDAsMTAyLDIsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywyNiwwLAotICAgIDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDQwLDM3LDExNCw0MSwzMiw5NywxMTYsMzIsMzcsMTAwLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDIsMCwwLDAsMTA1LAotICAgIDEwMCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0LDEsMCwwLDExNSwyLDAsMCwKLSAgICAwLDAsMSwxMTcsMjUsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsCi0gICAgOTUsNzgsNDAsOCwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNyw3LDAsCi0gICAgMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDcsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDI0MywwLDAsMCwxMTUsMTAsMCwwLDAsCi0gICAgMTYsMiw2LDIsMTIsNCwxMiw0LDEyLDUsMTE3LDE2LDAsMCwwLDk1LAotICAgIDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsOTksCi0gICAgMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsCi0gICAgMywwLDAsMCwxMTUsMTQyLDAsMCwwLDEwMCwzLDAsMTI1LDEsMCwxMjEsCi0gICAgMTcsMCwxMTYsMSwwLDEzNiwwLDAsMjUsMTMxLDAsMCwxMjUsMSwwLDg3LAotICAgIDExMCwxOCwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNDMsMCwxLDEsMSwKLSAgICA4OSwxMTAsMSwwLDg4LDEyNCwxLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxMzgsCi0gICAgMCwxMTYsMywwLDEwMCwzLDAsMTA3LDgsMCwxMTQsODMsMCwxMTYsNCwwLAotICAgIDEzNiwwLDAsMTMxLDEsMCwxMjUsMSwwLDExMCwxMiwwLDExNiw1LDAsMTM2LAotICAgIDAsMCwxMzEsMSwwLDEyNSwxLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLAotICAgIDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwyLDAsMTE2LDYsMCwxMDYsNywwLAotICAgIDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNiwxLDAsMTM2LDAsMCw2MCwKLSAgICAxMTAsMCwwLDEyNCwxLDAsODMsNDAsNCwwLDAsMCwxMTcsMTA5LDAsMCwKLSAgICAwLDcxLDEwMSwxMTYsMzIsMTExLDExNCwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MywxMDQsMTExLAotICAgIDExNywxMDgsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiw5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwKLSAgICAxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTYsOTcsMTA3LDEwMSwxMTAsNDYsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCwxOSwKLSAgICAwLDAsMCwxMTUsMTEsMCwwLDAsMTE2LDAsMCwxMzYsMCwwLDYxLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywxMywKLSAgICAwLDAsMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTUsCi0gICAgNDAsMSwwLDAsMCwxMTcsMSwwLDAsMCw5NSw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywyLDAsMCwwLDk5LDk4LDI0LDEsMCwwLDExNSwyLDAsMCwwLAotICAgIDAsMSwxMTcsMjgsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAotICAgIDQ2LDk5LDk4LDc4LDQwLDgsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLAotICAgIDExMCwxMDEsMTE3LDEzLDAsMCwwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwKLSAgICAxMTEsOTksMTA3LDExNSwxMTcsOCwwLDAsMCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLAotICAgIDExNCwxMTcsNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNywxNiwwLAotICAgIDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDExNywxMSwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsMTE3LDgsMCwwLDAsOTUsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsMTE3LAotICAgIDMsMCwwLDAsMTE0LDEwMSwxMDIsNDAsMywwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNywxMTcsMiwKLSAgICAwLDAsMCw5OSw5OCw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwKLSAgICAxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMCwKKyAgICA4LDAsMTA2LDksMCwxMDAsNSwwLDEzMSwxLDAsMTE0LDE2MywwLDEyNCwwLAorICAgIDAsNCwxMDYsMTAsMCwxMDAsMiwwLDU1LDIsOTUsMTAsMCwxMTAsMCwwLAorICAgIDg3LDEwMCw2LDAsODEsODgsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLAorICAgIDAsMCwxLDEyNCwwLDAsMTA2LDgsMCwxMDYsMTEsMCwxMzEsMCwwLDEsCisgICAgMTEzLDI4LDAsODcsMTAwLDYsMCwxMTYsMiwwLDEyNCwxLDAsNjEsODgsMTAwLAorICAgIDYsMCw4Myw0MSw3LDEyMiwxODUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNyw0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTEyLAorICAgIDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LAorICAgIDEwNywzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCw0NCwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywzMiw5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsCisgICAgOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwKKyAgICAxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzksMTE2LDEwNCwxMDEsMTE0LAorICAgIDExOSwxMDUsMTE1LDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsCisgICAgMTE1LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAorICAgIDEwMCwzMiw5NywxMTAsMTAwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDI5LDAsMCwwLDg0LDEyMiwyMywxMDAsMTAxLDk3LAorICAgIDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDEwMSwxMDAsMzIsOTgsCisgICAgMTIxLDMyLDM3LDExNCw3MCw3OCw0MSwxMiwxMTQsNzIsMCwwLDAsMTE0LDgwLDAsCisgICAgMCwwLDExNCw4MSwwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDc2LDAsMCwKKyAgICAwLDExNCw3NSwwLDAsMCwxMTQsODUsMCwwLDAsMTE0LDY5LDAsMCwwLAorICAgIDExNCw3NCwwLDAsMCwyMTgsNyw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNCw3NywKKyAgICAwLDAsMCwyMTgsNywxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw0MSwyLDExNCw3OCwKKyAgICAwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDg2LDAsMCwwLDE3NCwwLDAsMCwKKyAgICAxMTUsMzIsMCwwLDAsMCw2LDEyLDEsMTAsMSwzLDEsMywxLDEwLAorICAgIDEsMzAsMSw5LDEsMTUsMSw0LDEsMTIsMSwxOSwxLDE4LDEsMjQsCisgICAgMiwxMywxLDIwLDIsMTIyLDE5LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAorICAgIDk5LDEwNyw0Niw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAxNjUsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwKKyAgICAxMjQsMCwwLDEwNiwyLDAsMTQzLDEzOCwwLDEsMTI0LDAsMCwxMDYsMywwLAorICAgIDEyNCwxLDAsMTA3LDMsMCwxMTQsNTIsMCwxMTYsNCwwLDEwMCwxLDAsMTMxLAorICAgIDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLAorICAgIDAsMTA3LDQsMCwxMTUsNzMsMCwxMTYsNiwwLDEzMCwxLDAsMTI0LDAsMCwKKyAgICA0LDEwNiw1LDAsMTAwLDMsMCw1NiwyLDk1LDUsMCwxMjQsMCwwLDEwNiwKKyAgICA1LDAsMTAwLDIsMCwxMDcsMiwwLDExNCwxNTUsMCwxMDAsMCwwLDEyNCwwLAorICAgIDAsOTUsMywwLDEyNCwwLDAsMTA2LDcsMCwxMTQsMTU1LDAsMTI0LDAsMCwKKyAgICA0LDEwNiw3LDAsMTAwLDMsMCw1NiwyLDk1LDcsMCwxMjQsMCwwLDEwNiwKKyAgICA4LDAsMTA2LDksMCwxMzEsMCwwLDEsMTEzLDE1NSwwLDExMCwwLDAsODcsCisgICAgMTAwLDAsMCw4MSw4OCwxMDAsMCwwLDgzLDQxLDQsNzgsMTIyLDMxLDk5LDk3LAorICAgIDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsMTEwLDQ1LAorICAgIDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDExNCw3MSwwLAorICAgIDAsMCwxMTQsMjksMCwwLDAsNDEsMTAsMTE0LDcyLDAsMCwwLDExNCw4MCwKKyAgICAwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDc1LDAsMCwwLDIxOCwxMiw4MiwKKyAgICAxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDc2LDAsMCwwLAorICAgIDIxOCwxNCw2NSwxMTUsMTE1LDEwMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDY5LDExNCwxMTQsMTExLDExNCwKKyAgICAxMTQsNzcsMCwwLDAsMTE0LDc0LDAsMCwwLDExNCw4NywwLDAsMCw0MSwKKyAgICAyLDExNCw3OCwwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDg3LDAsMCwwLDE5OSwKKyAgICAwLDAsMCwxMTUsMjIsMCwwLDAsMCwxLDEyLDEsMTAsMSwxNSwxLAorICAgIDE1LDEsMjEsMSwxNSwxLDE1LDEsOSwxLDksMSwxNSwxLDEyMiwxOSwKKyAgICA5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTE0LDEwMSwxMDgsMTAxLAorICAgIDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCisgICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMjUsMCwwLDAsMTAwLDEsMCwKKyAgICAxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMTYsMiwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxMzEsMiwwLDgzLDQxLDIsNzgsMTIyLDIzLDk1LDc3LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0MCwxMjMsMzMsMTE0LDEyNSw0MSwzMiw5NywxMTYsMzIsCisgICAgMTIzLDEyNSw0MSwzLDExNCw0NywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDQ4LAorICAgIDAsMCwwLDQxLDEsMTE0LDc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDExNCwxMDEsMTEyLAorICAgIDExNCw5NSw5NSwyMTIsMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMCwKKyAgICA5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTE0LDEwMSwKKyAgICAxMTIsMTE0LDk1LDk1LDc4LDQxLDksMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsCisgICAgMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3OSwwLDAsMCwKKyAgICAxMTQsODUsMCwwLDAsMTE0LDg2LDAsMCwwLDExNCw4NywwLDAsMCwxMTQsCisgICAgOTAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDcwLDAsMCwwLDE0OCwwLDAsCisgICAgMCwxMTUsMTIsMCwwLDAsMTIsNCw2LDIsMTIsOCwxMiwxMiwxMiwyNSwKKyAgICAxMiwxMywxMTQsNzAsMCwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNzAsMCwwLAorICAgIDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwKKyAgICA5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCwKKyAgICA0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LAorICAgIDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsCisgICAgOTAsNywwLDEwMCwxMCwwLDgzLDQxLDExLDIxOCwxNiw5NSw2OCwxMTcsMTA5LDEwOSwKKyAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDEyMiw4Niw2NSwzMiwxMTUsCisgICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwKKyAgICAxMDcsMzIsMTAxLDExMywxMTcsMTA1LDExOCw5NywxMDgsMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsCisgICAgMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5OCwxMTcsMTA1LDEwOCwxMDAsMTE1LDMyLDExOSwKKyAgICAxMDUsMTE2LDEwNCwxMTEsMTE3LDExNiwxMCwzMiwzMiwzMiwzMiwxMDksMTE3LDEwOCwxMTYsMTA1LAorICAgIDQ1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE1LDExNywxMTIsMTEyLDExMSwKKyAgICAxMTQsMTE2LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsCisgICAgMTI0LDAsMCw5NSwwLDAsMTAwLDEsMCwxMjQsMCwwLDk1LDEsMCwxMDAsCisgICAgMCwwLDgzLDQxLDIsNzgsMTE0LDcxLDAsMCwwLDQxLDIsMTE0LDY3LDAsCisgICAgMCwwLDExNCw3NiwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsNjcsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDc5LDAsMCwwLDIyMCwwLDAsMCwxMTUsNCwwLDAsMCwKKyAgICAwLDEsOSwxLDEyMiwyNSw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxOSwwLDAsMCwxMjQsMCwwLDQsMTA2LDAsMCwKKyAgICAxMDAsMSwwLDU1LDIsOTUsMCwwLDEwMCwyLDAsODMsNDEsMyw3OCwxMTQsCisgICAgMjksMCwwLDAsODQsNDEsMSwxMTQsNzYsMCwwLDAsNDEsMSwxMTQsNzgsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDg2LDAsMCwwLDIyNCwwLDAsMCwxMTUsNCwwLDAsMCwKKyAgICAwLDEsMTUsMSwxMjIsMjQsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDQ5LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwKKyAgICAwLDEwNywyLDAsMTE0LDMwLDAsMTE2LDEsMCwxMDAsMiwwLDEzMSwxLDAsCisgICAgMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsNCwxMDYsMCwwLDEwMCwzLDAsCisgICAgNTYsMiw5NSwwLDAsMTAwLDAsMCw4Myw0MSw0LDc4LDExNCw3MSwwLDAsCisgICAgMCwxMjIsMzEsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsCisgICAgMTAxLDMyLDExNywxMTAsNDUsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSwKKyAgICA5OSwxMDcsMTE0LDI5LDAsMCwwLDQxLDIsMTE0LDc2LDAsMCwwLDExNCw4OCwKKyAgICAwLDAsMCw0MSwxLDExNCw3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODcsMCwwLDAsMjI4LDAsCisgICAgMCwwLDExNSw2LDAsMCwwLDAsMSwxNSwxLDE1LDEsMTIyLDI0LDk1LAorICAgIDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsCisgICAgMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMjUsMCwwLAorICAgIDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMTYsMiwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwwLDgzLDQxLDIsNzgsMTIyLDI4LDk1LAorICAgIDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsCisgICAgMTIzLDMzLDExNCwxMjUsNDEsMzIsOTcsMTE2LDMyLDEyMywxMjUsNDEsMywxMTQsNDcsMCwKKyAgICAwLDAsMTE0LDY3LDAsMCwwLDExNCw0OCwwLDAsMCw0MSwxLDExNCw3OCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsOTAsMCwwLDAsMjMzLDAsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMSwxMjIsMjUsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsNzgsNDEsOCwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsCisgICAgNTksMCwwLDAsMTE0LDc5LDAsMCwwLDExNCw4NiwwLDAsMCwxMTQsODcsCisgICAgMCwwLDAsMTE0LDkwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5MSwwLDAsCisgICAgMCwyMTYsMCwwLDAsMTE1LDEwLDAsMCwwLDEyLDIsNiwyLDEyLDQsCisgICAgMTIsNCwxMiw1LDExNCw5MSwwLDAsMCw5OSwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw1MiwKKyAgICAwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCisgICAgMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLDAsMTAwLDMsMCwxMDAsNCwKKyAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLAorICAgIDkwLDUsMCwxMDAsNywwLDgzLDQxLDgsMjE4LDE4LDk1LDc3LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywxMTAsOTcsMTAzLDEwMSwxMTQsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwKKyAgICAxMDAsMCwwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsMSw3OCwKKyAgICA0MSwyLDIxOCw1LDk1LDExMCw5NywxMDksMTAxLDIxOCw1LDk1LDEwOCwxMTEsOTksMTA3LAorICAgIDQxLDIsMTE0LDc4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzksMCwwLDAsCisgICAgMjM5LDAsMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI3LDk1LAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywxMTAsOTcsMTAzLDEwMSwKKyAgICAxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwxLDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA1MywwLDAsMCwxMjIsMjIsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwKKyAgICAxMzEsMSwwLDEyNCwwLDAsOTUsMiwwLDg3LDEwMCwwLDAsMTE2LDMsMCwKKyAgICAxMDYsNCwwLDEzMSwwLDAsMSw4OCwxMjQsMCwwLDEwNiwyLDAsMTA2LDUsCisgICAgMCwxMzEsMCwwLDEsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDYsMjE4LDE2LAorICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LAorICAgIDExNCw5MywwLDAsMCwxMTQsOTQsMCwwLDAsMjE4LDQsOTUsMTA1LDEwOSwxMTIsCisgICAgMjE4LDEyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNCw4NiwKKyAgICAwLDAsMCw0MSwxLDExNCw3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOSw5NSw5NSwxMDEsMTEwLDExNiwKKyAgICAxMDEsMTE0LDk1LDk1LDI0MywwLDAsMCwxMTUsOCwwLDAsMCwwLDEsMywKKyAgICAxLDIyLDIsMTEsMSwxMjIsMjgsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCisgICAgOTksMTA3LDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCw0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsCisgICAgMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDEsMCwwLDAsNzksMCwwLDAsMTE1LDE3LDAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMSwxMDAsMCwwLDgzLDQxLDEsCisgICAgNzgsNDEsMiwxMTQsOTQsMCwwLDAsMTE0LDg3LDAsMCwwLDQxLDMsMTE0LAorICAgIDc4LDAsMCwwLDIxOCw0LDk3LDExNCwxMDMsMTE1LDIxOCw2LDEwNywxMTksOTcsMTE0LAorICAgIDEwMywxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDgsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDI1MCwwLDAsMCwxMTUsCisgICAgMiwwLDAsMCwwLDEsMTIyLDI3LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsCisgICAgMTExLDk5LDEwNyw3Nyw5NywxMTAsOTcsMTAzLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDEyMCwxMDUsCisgICAgMTE2LDk1LDk1LDc4LDQxLDYsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwKKyAgICAxMTQsNTgsMCwwLDAsMTE0LDc5LDAsMCwwLDExNCw5OCwwLDAsMCwxMTQsCisgICAgMTAxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCw5MiwwLDAsMCwyMzcsMCwwLAorICAgIDAsMTE1LDYsMCwwLDAsMTIsMiwxMiw0LDEyLDcsMTE0LDkyLDAsMCwKKyAgICAwLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLDAsCisgICAgMCwwLDMsMCwwLDAsMTE1LDE0MiwwLDAsMCwxMDAsMSwwLDEyNSwxLAorICAgIDAsMTIxLDE3LDAsMTE2LDAsMCwxMzYsMCwwLDI1LDEzMSwwLDAsMTI1LDEsCisgICAgMCw4NywxMTAsMTgsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwKKyAgICAxLDEsODksMTEwLDEsMCw4OCwxMjQsMSwwLDEwMCwxLDAsMTA3LDgsMCwKKyAgICAxMTQsMTM4LDAsMTE2LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LAorICAgIDMsMCwxMzYsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTAsMTIsMCwxMTYsNCwKKyAgICAwLDEzNiwwLDAsMTMxLDEsMCwxMjUsMSwwLDEzNSwwLDAsMTAyLDEsMCwKKyAgICAxMDAsMiwwLDEwMCwzLDAsMTM0LDAsMCwxMjUsMiwwLDExNiw1LDAsMTA2LAorICAgIDYsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTYsMCwwLDEzNiwwLAorICAgIDAsNjAsMTEwLDAsMCwxMjQsMSwwLDgzLDQxLDQsMTIyLDEwOSw3MSwxMDEsMTE2LAorICAgIDMyLDExMSwxMTQsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDk3LAorICAgIDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LAorICAgIDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwKKyAgICAxMTEsMTEwLDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTksCisgICAgMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LAorICAgIDExMSw5OSwxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDc4LDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsMTksMCwwLDAsCisgICAgMTE1LDExLDAsMCwwLDExNiwwLDAsMTM2LDAsMCw2MSwxMDAsMCwwLDgzLAorICAgIDQxLDEsNzgsNDEsMSwyMTgsMTMsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LAorICAgIDExMSw5OSwxMDcsMTE1LDQxLDEsMTE0LDM2LDAsMCwwLDQxLDEsMTE0LDY3LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyLDk5LDk4LAorICAgIDE0LDEsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsOTUsMTAzLDEwMSwKKyAgICAxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDYsNjAsMTA4LAorICAgIDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk5LDk4LDQxLDcsMTE0LDEwMiwwLDAsMCwKKyAgICAyMTgsOCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsNzIsMCwwLDAsMTE0LAorICAgIDkxLDAsMCwwLDExNCw3MCwwLDAsMCwyMTgsOCw5NSwxMTksMTAxLDk3LDEwNywKKyAgICAxMTQsMTAxLDEwMiw5MCwzLDExNCwxMDEsMTAyLDQxLDMsMTE0LDY3LDAsMCwwLDExNCwKKyAgICA3MywwLDAsMCwxMTQsMTAzLDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsCisgICAgMTE0LDY3LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5NSwwLDAsMCwwLAogICAgIDEsMCwwLDExNSwyNCwwLDAsMCwwLDQsNiwxLDMsMSwxNywxLAogICAgIDEzLDEsNSwxLDEyLDEsMTIsMSwxNSwyLDEyLDEsMTgsMiwyNSwxLAotICAgIDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDgsMTExLDk5LDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDExNCw5NSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLAogICAgIDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNzEsMCwwLDAsMTE2LAogICAgIDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTYsMSwwLDEwNiwyLAogICAgIDAsMTMxLDAsMCwxLDEyMSwxNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMCwKICAgICAwLDEsODcsMTEwLDE4LDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw1NiwwLAogICAgIDEsMSwxLDg5LDExMCwxMSwwLDg4LDEyNCwxLDAsMTA2LDUsMCwxMzEsMCwKLSAgICAwLDEsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwxLDAsMCwKLSAgICA4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LAotICAgIDk3LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0NCwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLAotICAgIDExMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsMTExLAotICAgIDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMTUsMTE3LDExNCwKLSAgICAxMDEsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OSwxMTEsCi0gICAgMTA5LDExMiwxMDgsMTAxLDExNiwxMDEsMTA4LDEyMSwzMiwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwKLSAgICAxMDUsMTIyLDEwMSwxMDAsNDQsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDEsMTE4LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTYsMzIsMTA1LDExNSwzMiw5OCwxMDEsMTA1LAotICAgIDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTcsCi0gICAgMTEwLDExMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiwKLSAgICA5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTYsCi0gICAgOTcsMTA3LDEwMSwxMTAsNDYsNzgsNDAsNiwwLDAsMCwxMTcsMTYsMCwwLDAsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsCi0gICAgMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNyw3LDAsMCwwLDk3LAotICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDE0LDAsMCwwLDk1LDY4LDEwMSw5NywxMDAsCi0gICAgMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTksMCwwLDAsOTUsMTA4LDExMSwKLSAgICA5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAyOSwxLDAsMCwxMTUsMTQsMCwwLDAsMCw3LDEyLDEsMTAsMSwzLAotICAgIDEsMTQsMSwxMywzLDUsMiwxMTcsMTksMCwwLDAsOTUsMTA4LDExMSw5OSwKLSAgICAxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwKKyAgICAwLDEsMTAwLDEsMCw4Myw0MSwyLDk3LDIxLDEsMCwwLDgyLDEwMSwxMDgsCisgICAgMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ0LDMyLDk3LDExMCwxMDAsCisgICAgMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDExNCwKKyAgICAxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDk3LAorICAgIDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LAorICAgIDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA1LDExNSwzMiwKKyAgICAxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLDExNSwxMTcsMTE0LDEwMSwzMiw5NywKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk5LDExMSwxMDksMTEyLDEwOCwKKyAgICAxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLAorICAgIDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDEwMSwxMTgsCisgICAgMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5NywxMTAsMTExLDExNiwKKyAgICAxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDk4LDEwMSwzMiwKKyAgICA5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiw5NywxMDcsMTAxLAorICAgIDExMCw0Niw3OCw0MSw2LDExNCw5NSwwLDAsMCwxMTQsOTYsMCwwLDAsMTE0LAorICAgIDk3LDAsMCwwLDExNCw4NiwwLDAsMCwxMTQsNjksMCwwLDAsMTE0LDg3LAorICAgIDAsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLDExNCw3MywwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTksCisgICAgOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxOSwxLDAsMCwxMTUsMTQsMCwwLDAsMCw3LDEyLDEsCisgICAgMTAsMSwzLDEsMTQsMSwxMywzLDUsMiwxMTQsMTA2LDAsMCwwLDk5LAogICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCiAgICAgNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsCi0gICAgMiwwLDE0MiwwLDAsODMsNDAsMSwwLDAsMCwxMTcsNDYsMSwwLDAsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsOTksMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiwKLSAgICAxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMTE1LAotICAgIDEwLDMyLDMyLDMyLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwMSwxMTAsCi0gICAgMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiw5NywzMiw5OSw5NywxMDgsMTA4LDMyLDExNiwxMTEsCi0gICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwNSwxMTYsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSwKLSAgICA5NywxMDAsMzIsMTExLDEwMiwzMiw5NywzMiwxMTAsMTExLDExNCwxMDksOTcsMTA4LDMyLDk5LAotICAgIDk3LDEwOCwxMDgsMzIsMTA1LDExMCwzMiwxMTIsMTA4LDk3LDk5LDEwMSwxMTUsMzIsMTE5LDEwNCwKLSAgICAxMDEsMTE0LDEwMSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDExNiwxMTQsMTExLDEwMCwxMTcsOTksMTAxLAotICAgIDExNSwzMiwxMTcsMTEwLDExOSw5NywxMTAsMTE2LDEwMSwxMDAsMzIsMTEwLDExMSwxMDUsMTE1LDEwMSwKLSAgICAzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDExNCw5Nyw5OSwxMDEsOTgsCi0gICAgOTcsOTksMTA3LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwMSwKLSAgICAxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMCwxMDMsMTAsMzIsMzIsMzIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDEsMTAsMzIsMzIsMzIsMzIsNDAsMCwKLSAgICAwLDAsMCw0MCwzLDAsMCwwLDExNywxLDAsMCwwLDEwMiwxMTcsNCwKLSAgICAwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNCwwLDAsMCwxMDcsMTE5LDEwMCwxMTUsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLAotICAgIDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksCi0gICAgMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsNDksMSwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCw4LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LAotICAgIDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwKLSAgICAxMTgsMTAxLDEwMCwxMDUsMTU4LDEyLDAsMCwxMTcsMSwwLDAsMCwxMywxMDUsMTYsCi0gICAgMCwwLDAsMTE3LDEsMCwwLDAsMTAsMTA1LDI0LDAsMCwwLDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsOTksCi0gICAgMCwwLDAsMTE1LDI5LDAsMCwwLDEyNCwwLDAsOTMsMTksMCwxMjUsMSwKLSAgICAwLDExNiwwLDAsMTI0LDEsMCw2MywxMDAsMCwwLDY0LDg2LDEsMTEzLDMsCi0gICAgMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTA1LDI1NSwwLDAsMCw3OCwKLSAgICA0MCwxLDAsMCwwLDExNywxNywwLDAsMCw5NSw4Miw2NSw4Nyw5NSw3NywKLSAgICA2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4Miw0MCwyLDAsMCwwLAotICAgIDExNywyLDAsMCwwLDQ2LDQ4LDExNywxLDAsMCwwLDExMCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywKLSAgICAxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxNTAsMSwwLDAsMTE1LDIsMCwwLDAsCi0gICAgNiwwLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwKLSAgICAxMDUsMCwwLDAsMCwxMDUsMjUsMCwwLDAsMTA1LDgsMCwwLDAsMTE3LAotICAgIDExLDAsMCwwLDk1LDk1LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5NSw5NSwxMTcsCi0gICAgMywwLDAsMCw0NiwxMTIsMTIxLDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsOTksCi0gICAgMTE3LDQsMCwwLDAsNDYsMTEyLDEyMSwxMTEsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDExLDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LDE4MCwKLSAgICAwLDAsMCwxMjQsMSwwLDEwMCw1LDAsMTA3LDgsMCwxMTQsMjUsMCwxMTYsCi0gICAgMSwwLDEwNiwyLDAsMTA2LDMsMCwxMiwxMTAsMywwLDEyNCwxLDAsMTI1LAotICAgIDIsMCwxMjQsMiwwLDExNCw0NiwwLDExNiw0LDAsMTI1LDMsMCwxMTAsNiwKLSAgICAwLDExNiw1LDAsMTI1LDMsMCwxMTYsNiwwLDEyNCwwLDAsMTMxLDEsMCwKLSAgICA5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDcsMCwxMDAsCi0gICAgMSwwLDEzMSwxLDAsOTIsMywwLDEyNSw2LDAsMTI1LDcsMCwxMjUsOCwKLSAgICAwLDExNiwxLDAsMTA2LDgsMCwxMDYsOSwwLDEyNSw5LDAsMTI0LDksMCwKLSAgICAxMDAsNSwwLDEwNyw4LDAsMTE0LDEzMywwLDExNiwxMCwwLDEwMCwyLDAsMTMxLAotICAgIDEsMCwxMzAsMSwwLDExMCwwLDAsMTAwLDMsMCwxMDYsMTEsMCwxMjQsNiwKLSAgICAwLDEyNCw3LDAsMTI0LDksMCwxMjQsMywwLDEwMCw0LDAsMjUsMTAzLDQsCi0gICAgMCwxMzEsMSwwLDEyNSwxMCwwLDExNiwxMiwwLDEyNCw0LDAsMTE2LDEzLDAsCi0gICAgMTI0LDEwLDAsMTMxLDMsMCw4Myw0MCw2LDAsMCwwLDExNywyNDQsMSwwLAotICAgIDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAotICAgIDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTE0LAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LAotICAgIDExMSwzMiwxMDUsMTE2LDExNSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDQ2LAotICAgIDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTAsMTExLDExNiwKLSAgICAzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDU5LDMyLAotICAgIDExNiwxMDQsMTA1LDExNSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMTQsMTAxLDExNiwxMTcsCi0gICAgMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsCi0gICAgMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAotICAgIDEwMCwzMiw5NywxMTUsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMTksMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEwLDMyLDMyLDMyLDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsNDYsCi0gICAgMTEyLDEyMSw5OSwzMiwxMTcsMTEwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMDIsCi0gICAgMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwzMiwxMDUsMTE1LAotICAgIDMyLDExMCwxMTEsMTEwLDQ1LDEyMiwxMDEsMTE0LDExMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsCi0gICAgMTA1LDExNiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LDExMiwxMjEsMTExLDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLAotICAgIDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDc4LAotICAgIDExMSwxMTAsMTAxLDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsMTE2LDMyLDEwOSwxMTcsMTE1LAotICAgIDExNiwzMiw5OCwxMDEsMzIsOTcsMzIsOTgsMTExLDExMSwxMDgsMTAxLDk3LDExMCwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwxMDIsCi0gICAgMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwKLSAgICAzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDExNywxLDAsMCwwLDQ2LDExNywzNiwwLDAsMCwKLSAgICAxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LAotICAgIDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMTE3LDAsMCwwLDAsMTA1LDAsMCwwLDAsNzgsNDAsCi0gICAgMTQsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwKLSAgICAwLDAsMTE1LDEyMSwxMTUsMTE3LDUsMCwwLDAsMTAyLDEwOCw5NywxMDMsMTE1LDExNywKLSAgICA4LDAsMCwwLDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMTE3LDIzLDAsMCwKLSAgICAwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LAotICAgIDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywyNywwLDAsMCw3OSw4MCw4NCwKLSAgICA3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSwKLSAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsOSwwLDAsMCwxMTIsOTcsMTE0LAotICAgIDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxNCwwLDAsMCwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMTE3LDksMCwwLDAsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LAotICAgIDQsMCwwLDAsMTA2LDExMSwxMDUsMTEwLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsMTE3LDgsMCwwLDAsOTUsODAsODksNjcsCi0gICAgNjUsNjcsNzIsNjksNDAsMTEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDE0LDAsMCwwLDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwKLSAgICAxMTQsMTE0LDEwNSwxMDAsMTAxLDExNyw1LDAsMCwwLDEwMCwxMDEsOTgsMTE3LDEwMywxMTcsCi0gICAgOCwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDExNyw0LDAsMCwKLSAgICAwLDEwNCwxMDEsOTcsMTAwLDExNyw0LDAsMCwwLDExNiw5NywxMDUsMTA4LDExNywxMywKLSAgICAwLDAsMCw5OCw5NywxMTUsMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsMywwLDAsMCwxMTUsMTAxLDExMiwxMTcsMSwwLDAsMCw5NSwxMTcsMywKLSAgICAwLDAsMCwxMTYsOTcsMTAzLDExNyw4LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTAsCi0gICAgOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxNywwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDE1OSwxLDAsMCwxMTUsMjIsMCwwLDAsMCwxMywKLSAgICAzMSwxLDYsMSw5LDIsNiwxLDE4LDEsMjQsMSwxMiwxLDEyLDEsCi0gICAgMTUsMSwzMSwxLDExNywxNywwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwKLSAgICAxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDEsMCwwLDAsMCwKLSAgICAwLDAsMCw1LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LAotICAgIDE5MywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMDAsNywwLAotICAgIDEwNyw4LDAsMTE0LDMzLDAsMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLAotICAgIDEsMCwxMTAsMCwwLDExNiw1LDAsMTI0LDAsMCwxMzEsMSwwLDkyLDIsCi0gICAgMCwxMjUsMSwwLDEyNSwyLDAsMTE2LDUsMCwxMjQsMSwwLDEzMSwxLDAsCi0gICAgOTIsMiwwLDEyNSwxLDAsMTI1LDMsMCwxMjQsMywwLDExNiw2LDAsMTA3LAotICAgIDMsMCwxMTQsMTA4LDAsMTE2LDcsMCwxMDAsMiwwLDEwNiw4LDAsMTE2LDYsCi0gICAgMCwxMjQsMCwwLDEzMSwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsCi0gICAgMTI0LDIsMCwxMDYsOSwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNCwwLDEwNywKLSAgICAzLDAsMTE0LDE1MywwLDExNiw3LDAsMTAwLDUsMCwxMDYsOCwwLDEyNCwyLAotICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLAotICAgIDEwNiwxMCwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNiwwLDI1LDEyNSw0LDAsCi0gICAgMTE2LDExLDAsMTI0LDEsMCwxMjQsNCwwLDExNiwxMiwwLDEwMCw2LDAsMjUsCi0gICAgMjMsMTMxLDIsMCw4Myw0MCw4LDAsMCwwLDExNywxMjEsMSwwLDAsNzEsCi0gICAgMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsCi0gICAgMzIsOTcsMzIsNDYsMTEyLDEyMSw5OSw0Niw0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LAotICAgIDEwOCwxMDEsNDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAotICAgIDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwKLSAgICAxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDQ2LDExMiwKLSAgICAxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLAotICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLAotICAgIDEwNSwxMTUsMTE2LDU5LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwKLSAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKLSAgICAxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLAotICAgIDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwKLSAgICAzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsMTEyLDExMSwxMTAsMTAwLDMyLDExNiwKLSAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsNDYsMzIsMzIsNzMsMTAyLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMCwKLSAgICAxMTEsMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTAsMTExLDExNiwzMiw5OSwxMTEsMTEwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSwzMiwxMTYsMTExLDMyLDgwLDY5LDgwLDMyLDUxLDQ5LDUyLDU1LDMyLAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDQsMzIsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCw0NiwzMiw3MywxMDIsMTAsMzIsMzIsMzIsMzIsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwKKyAgICAyLDAsMTQyLDAsMCw4Myw0MSwxLDk3LDQ2LDEsMCwwLDExNCwxMDEsMTA5LAorICAgIDExMSwxMTgsMTAxLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsOTUsMTAyLDExNCwKKyAgICA5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDk5LAorICAgIDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsMTE0LDEwMSwxMDksCisgICAgMTExLDExOCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDExNSwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsMTAyLAorICAgIDExNCw5NywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTEwLDEwMCwzMiwxMTksCisgICAgMTA1LDExNiwxMDQsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwzMiwxMTYsMTExLDMyLDExNiwxMDQsCisgICAgMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsODUsMTE1LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDMyLAorICAgIDExMSwxMDIsMzIsOTcsMzIsMTEwLDExMSwxMTQsMTA5LDk3LDEwOCwzMiw5OSw5NywxMDgsMTA4LAorICAgIDMyLDEwNSwxMTAsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMTE1LDMyLDExOSwxMDQsMTAxLDExNCwxMDEsCisgICAgMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDEwLDMyLDMyLDMyLDMyLDEwMiwxMTQsOTcsCisgICAgMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwxMTYsMTE0LDExMSwxMDAsMTE3LDk5LDEwMSwxMTUsMzIsMTE3LAorICAgIDExMCwxMTksOTcsMTEwLDExNiwxMDEsMTAwLDMyLDExMCwxMTEsMTA1LDExNSwxMDEsMzIsMTA1LDExMCwKKyAgICAxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMTQsOTcsOTksMTAxLDk4LDk3LDk5LDEwNywKKyAgICAzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDEsMTIwLDEwMSw5OSwKKyAgICAxMTcsMTE2LDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDk5LDExMSwxMDAsMTAxLDQxLDEwLDMyLDMyLDMyLDMyLDExNCw0LDAsMCwwLAorICAgIDQxLDMsMjE4LDEsMTAyLDExNCw5OSwwLDAsMCw5MCw0LDEwNywxMTksMTAwLDExNSwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMjUsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksCisgICAgMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMzksMSwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCw4LDExNCwxMDgsMCwwLDAsMTA1LDIyOCwxMiwwLDAsMjMzLAorICAgIDIsMCwwLDAsMTE0LDEzLDAsMCwwLDExNSwyLDAsMCwwLDEzLDEwLAorICAgIDkwLDExLDk1LDk1LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5NSw5NSwxMjIsMyw0NiwKKyAgICAxMTIsMTIxLDEyMiw0LDQ2LDExMiwxMjEsOTksMTIyLDQsNDYsMTEyLDEyMSwxMTEsNzgsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDYsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDE4MCwwLDAsMCwxMjQsMSwwLDEwMCwxLDAsMTA3LAorICAgIDgsMCwxMTQsMjUsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMiwxMTAsCisgICAgMywwLDEyNCwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNCw0NiwwLDExNiwzLAorICAgIDAsMTI1LDMsMCwxMTAsNiwwLDExNiw0LDAsMTI1LDMsMCwxMTYsNSwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEyNCwKKyAgICA1LDAsMTA2LDYsMCwxMDAsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSw2LAorICAgIDAsMTI1LDcsMCwxMjUsOCwwLDExNiwwLDAsMTA2LDcsMCwxMDYsOCwwLAorICAgIDEyNSw5LDAsMTI0LDksMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzMywwLDExNiwKKyAgICA5LDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMDAsNCwKKyAgICAwLDEwNiwxMCwwLDEyNCw2LDAsMTI0LDcsMCwxMjQsOSwwLDEyNCwzLDAsCisgICAgMTAwLDUsMCwyNSwxMDMsNCwwLDEzMSwxLDAsMTI1LDEwLDAsMTE2LDExLDAsCisgICAgMTI0LDQsMCwxMTYsMTIsMCwxMjQsMTAsMCwxMzEsMywwLDgzLDQxLDYsOTcsCisgICAgMjQ0LDEsMCwwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLAorICAgIDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCisgICAgMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsCisgICAgMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LAorICAgIDEwMSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsCisgICAgMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsMTE1LAorICAgIDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsMTE0LAorICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAorICAgIDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsNDYsMTEyLDEyMSw5OSw0NywKKyAgICA0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsCisgICAgOTcsMTE2LDEwMSwxMDAsMzIsOTcsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsCisgICAgMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE5LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsCisgICAgMTEwLDExNSwxMDUsMTExLDExMCwxMCwzMiwzMiwzMiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsCisgICAgMTAxLDMyLDQ2LDExMiwxMjEsOTksMzIsMTE3LDExMCwxMDgsMTAxLDExNSwxMTUsMzIsMTE1LDEyMSwKKyAgICAxMTUsNDYsMTAyLDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsCisgICAgMzIsMTA1LDExNSwzMiwxMTAsMTExLDExMCw0NSwxMjIsMTAxLDExNCwxMTEsNDQsMzIsMTE2LDEwNCwKKyAgICAxMDEsMTEwLDMyLDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwxMTIsCisgICAgMTIxLDExMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTAwLDEwMSw5OCwxMTcsCisgICAgMTAzLDk1LDExMSwxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLAorICAgIDExNiwzMiw3OCwxMTEsMTEwLDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwKKyAgICAxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk3LDMyLDk4LDExMSwxMTEsMTA4LDEwMSw5NywKKyAgICAxMTAsMzIsOTcsMTEwLDEwMCwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDExMiwxMDgsOTcsOTksMTAxLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwKKyAgICAxMTUsNDYsMTAyLDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksCiAgICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwKICAgICAxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsCiAgICAgMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAogICAgIDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTcsMzYsMCwwLDAsMTE1LDEyMSwxMTUsCisgICAgMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDIxOCwxLDQ2LDEyMiwzNiwxMTUsMTIxLAorICAgIDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsCisgICAgNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLAorICAgIDExMCwxMDEsMTE0LDMwLDAsMCwwLDExNCw3MSwwLDAsMCw0MSwxMywxMTQsNywKKyAgICAwLDAsMCwyMTgsNSwxMDIsMTA4LDk3LDEwMywxMTUsMjE4LDgsMTExLDExMiwxMTYsMTA1LAorICAgIDEwOSwxMDUsMTIyLDEwMSwyMTgsMjMsNjgsNjksNjYsODUsNzEsOTUsNjYsODksODQsNjksCisgICAgNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMjE4LDI3LDc5LAorICAgIDgwLDg0LDczLDc3LDczLDkwLDY5LDY4LDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LAorICAgIDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNCwzOCwwLDAsMCwyMTgsCisgICAgOSwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDIxOCwxNCwxMDUsMTA5LDExMiwxMDgsCisgICAgMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMjE4LDksOTksOTcsOTksMTA0LAorICAgIDEwMSw5NSwxMTYsOTcsMTAzLDIxOCwxOSw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDI2LDAsMCwwLDExNCwKKyAgICAyOCwwLDAsMCwyMTgsOCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSw0MSwxMSwKKyAgICAxMTQsMzUsMCwwLDAsOTAsMTQsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwxMTgsMTAxLAorICAgIDExNCwxMTQsMTA1LDEwMCwxMDEsMjE4LDUsMTAwLDEwMSw5OCwxMTcsMTAzLDIxOCw4LDExNSwxMTcsCisgICAgMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMjE4LDQsMTA0LDEwMSw5NywxMDAsMTE0LDM3LDAsMCwKKyAgICAwLDIxOCwxMyw5OCw5NywxMTUsMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKKyAgICAyMTgsMywxMTUsMTAxLDExMiwxMTQsMzYsMCwwLDAsOTAsMywxMTYsOTcsMTAzLDIxOCwKKyAgICA4LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTksOTcsOTksMTA0LDEwMSw5NSwKKyAgICAxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxNjIsMSwwLDAsMTE1LAorICAgIDIyLDAsMCwwLDAsMTMsMzEsMSw2LDEsOSwyLDYsMSwxOCwxLAorICAgIDI0LDEsMTIsMSwxMiwxLDE1LDEsMzEsMSwxMTQsMTI2LDAsMCwwLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDUsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDE5MywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LAorICAgIDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDMzLDAsMTE2LDMsMCwxMDAsMiwKKyAgICAwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDExNiw0LDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDkyLDIsMCwxMjUsMSwwLDEyNSwyLDAsMTE2LDQsMCwxMjQsCisgICAgMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSwxLDAsMTI1LDMsMCwxMjQsMywKKyAgICAwLDExNiw1LDAsMTA3LDMsMCwxMTQsMTA4LDAsMTE2LDYsMCwxMDAsMywwLAorICAgIDEwNiw3LDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwyLDAsMTMxLDEsMCwxMzAsCisgICAgMSwwLDExMCwwLDAsMTI0LDIsMCwxMDYsOCwwLDEwMCw0LDAsMTMxLDEsCisgICAgMCwxMDAsNSwwLDEwNywzLDAsMTE0LDE1MywwLDExNiw2LDAsMTAwLDYsMCwKKyAgICAxMDYsNywwLDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLAorICAgIDAsMCwxMjQsMiwwLDEwNiw5LDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw3LAorICAgIDAsMjUsMTI1LDQsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCw0LDAsMTE2LDExLAorICAgIDAsMTAwLDcsMCwyNSwyMywxMzEsMiwwLDgzLDQxLDgsOTcsMTIxLDEsMCwKKyAgICAwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKKyAgICAxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsMTEyLDEyMSwxMTEsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSwKKyAgICAzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwKKyAgICA0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsCisgICAgMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsCisgICAgMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLAorICAgIDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwKKyAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsCisgICAgMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LAorICAgIDEwMSwxMDAsMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLDEwMCwKKyAgICAzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwKKyAgICAxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDMyLDMyLDczLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwKKyAgICAzMiwxMDAsMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsOTksMTExLAorICAgIDExMCwxMDIsMTExLDExNCwxMDksMzIsMTE2LDExMSwzMiw4MCw2OSw4MCwzMiw1MSw0OSw1MiwKKyAgICA1NSwzMiwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQ0LDMyLDg2LDk3LDEwOCwxMTcsMTAxLDY5LAorICAgIDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNCw5NywxMDUsCisgICAgMTE1LDEwMSwxMDAsNDYsMzIsNzMsMTAyLDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LAorICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwKKyAgICAxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMjIsMzYsMTE1LDEyMSwxMTUsCiAgICAgNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LAogICAgIDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNywzNywwLDAsMCwxMjMsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDk4LDExMSwxMTYsCi0gICAgMTE2LDExMSwxMDksNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LAotICAgIDExMSwxMTQsMTIxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE3LDEsMCwwLDAsCi0gICAgNDYsMTA1LDIsMCwwLDAsMTE3LDI4LDAsMCwwLDEwMSwxMjAsMTEyLDEwMSw5OSwKLSAgICAxMTYsMTAxLDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsNTAsMzIsMTAwLDExMSwxMTYsMTE1LDMyLAotICAgIDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTA1LDAsMCwwLDAsNzgsNDAsMTMsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDE0LDAsMCwwLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwxMTcsOSwwLAotICAgIDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMTE3LDQsMCwwLDAsCi0gICAgNzgsMTExLDExMCwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsOCwwLDAsCi0gICAgMCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSwxMTcsMTAsMCwwLDAsODYsOTcsCi0gICAgMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LAotICAgIDEwOSw5NywxMTYsMTE3LDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw5LDAsCi0gICAgMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsMTUsMCwwLDAsODMsCi0gICAgNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsMTYsMCwwLDAsMTEyLDEyMSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsCi0gICAgMTIxLDk5LDk3LDk5LDEwNCwxMDEsMTE3LDEzLDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsCi0gICAgMTAyLDExNCwxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTg2LDEsMCwwLDExNSwyNCwKLSAgICAwLDAsMCwwLDksMTgsMSwxNSwxLDE4LDEsMTgsMSwxMiwxLDksCi0gICAgMSwxOCwxLDIxLDEsOSwxLDE1LDEsMTksMSwxMTcsMTcsMCwwLDAsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwxMywwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTY0LDAsMCwwLDExNiwwLDAsMTI0LDAsCi0gICAgMCwxMzEsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjIsMCwxMDAsNiwwLAotICAgIDgzLDEyNCwwLDAsMTA2LDIsMCwxMDAsMiwwLDEzMSwxLDAsOTIsMywwLAotICAgIDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwxLDAsMTIsMTE1LDgxLDAsCi0gICAgMTI0LDMsMCwxMDYsMywwLDEzMSwwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMywKLSAgICAyLDAsMjUsMTAwLDUsMCwxMDcsMywwLDExNCw4NSwwLDEyNCwwLDAsODMsCi0gICAgMTIxLDE2LDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCw4NywKLSAgICAxMTAsNDAsMCw0LDExNiw1LDAsMTE2LDYsMCwxMDIsMiwwLDEwNywxMCwwLAotICAgIDExNCwxNDMsMCwxLDEsMSwxMjQsMCwwLDEwMCw2LDAsMTAwLDksMCwxMzMsCi0gICAgMiwwLDI1LDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMTYsNywwLDEyNCw0LAotICAgIDAsMTMxLDEsMCwxMTQsMTYwLDAsMTI0LDQsMCw4MywxMjQsMCwwLDgzLDQwLAotICAgIDEwLDAsMCwwLDExNywxODgsMCwwLDAsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsCi0gICAgMzIsOTcsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMDUsMTAyLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsCi0gICAgOTgsMTA4LDEwMSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwKLSAgICAxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMTUsMzIsCi0gICAgMTEyLDExNywxMTQsMTAxLDEwOCwxMjEsMzIsMTAyLDExMSwxMTQsMzIsOTgsOTcsOTksMTA3LDExOSwKLSAgICA5NywxMTQsMTAwLDExNSw0NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LDk4LDEwNSwxMDgsMTA1LAotICAgIDExNiwxMjEsMzIsMTAyLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsODAsMTIxLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsOTUsNjksMTIwLDEwMSw5OSw2NywxMTEsMTAwLDEwMSw3NywxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDg3LDEwNSwxMTYsMTA0LDcwLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSw0MCwKLSAgICA0MSwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDY3LDMyLDY1LDgwLDczLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDEwNSwwLDAsMCwwLDExNywxLDAsMCwwLDQ2LAotICAgIDEwNSwzLDAsMCwwLDEwNSwxLDAsMCwwLDExNywyLDAsMCwwLDExMiwKLSAgICAxMjEsNzgsMTA1LDI1MywyNTUsMjU1LDI1NSwxMDUsMjU1LDI1NSwyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwKLSAgICAyNTUsNDAsOCwwLDAsMCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsCi0gICAgMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDUsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCwKLSAgICAxMTcsMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMCwKLSAgICAwLDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDQwLDUsCi0gICAgMCwwLDAsMTE3LDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDExNCwxMDEsMTE1LDExNiwxMTcsMSwKLSAgICAwLDAsMCw5NSwxMTcsOSwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMTcsMTEsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwKLSAgICAwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwyMDksMSwwLDAsMTE1LDIwLDAsMCwwLDAsNywxOCwxLDQsCi0gICAgMSwyNCwxLDM1LDEsNCwxLDMsMSwxNiwxLDE5LDEsMjEsMSwxMTcsCi0gICAgMTUsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsMTE3LDksMCwwLDAsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsMTE2LAotICAgIDEyMSwxMDUsMSwwLDAsMCw5OSwxLDAsMCwwLDEsMCwwLDAsMywKKyAgICAxMDEsMTIyLDM3LDEyMywxMjUsMzIsMTEwLDExMSwxMTYsMzIsOTgsMTExLDExNiwxMTYsMTExLDEwOSwKKyAgICA0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsCisgICAgMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMTQsMTEwLDAsMCwwLDExNCwxMDksMCwKKyAgICAwLDAsMTIyLDI4LDEwMSwxMjAsMTEyLDEwMSw5OSwxMTYsMTAxLDEwMCwzMiwxMTEsMTEwLDEwOCwKKyAgICAxMjEsMzIsNTAsMzIsMTAwLDExMSwxMTYsMTE1LDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgMTE0LDcxLDAsMCwwLDQxLDEyLDExNCw3LDAsMCwwLDExNCwxMTYsMCwwLAorICAgIDAsMTE0LDExNywwLDAsMCwxMTQsMTE4LDAsMCwwLDExNCwzOCwwLDAsMCwKKyAgICAxMTQsMTE5LDAsMCwwLDIxOCwxMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwKKyAgICAxMTQsMTE0LDQ3LDAsMCwwLDExNCw3NiwwLDAsMCwxMTQsMTE1LDAsMCwwLAorICAgIDExNCwyOCwwLDAsMCwyMTgsMTUsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsCisgICAgNzAsNzAsNzMsODgsNjksODMsNDEsNSwxMTQsMzUsMCwwLDAsMTE0LDEyMiwwLAorICAgIDAsMCw5MCwxNiwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTAyLDEwNSwxMDgsMTAxLAorICAgIDExMCw5NywxMDksMTAxLDkwLDcsMTEyLDEyMSw5OSw5Nyw5OSwxMDQsMTAxLDExNCwxMjMsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDE3LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk5LAorICAgIDk3LDk5LDEwNCwxMDEsMTg5LDEsMCwwLDExNSwyNCwwLDAsMCwwLDksMTgsCisgICAgMSwxNSwxLDE4LDEsMTgsMSwxMiwxLDMsMSwyNCwxLDIxLDEsMywKKyAgICAxLDIxLDEsMTksMSwxMTQsMTI5LDAsMCwwLDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCw1LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAxNjQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTAwLDEsMCwKKyAgICAxMDcsMiwwLDExNCwyMiwwLDEwMCwyLDAsODMsMTI0LDAsMCwxMDYsMSwwLAorICAgIDEwMCwzLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwKKyAgICAzLDAsMTI0LDEsMCwxMiwxMTUsODEsMCwxMjQsMywwLDEwNiwyLDAsMTMxLAorICAgIDAsMCwxMDAsNywwLDEwMCw4LDAsMTMzLDIsMCwyNSwxMDAsNiwwLDEwNywKKyAgICAzLDAsMTE0LDg1LDAsMTI0LDAsMCw4MywxMjEsMTYsMCwxMTYsMywwLDEyNCwKKyAgICAwLDAsMTMxLDEsMCwxMjUsNCwwLDg3LDExMCw0MCwwLDQsMTE2LDQsMCwKKyAgICAxMTYsNSwwLDEwMiwyLDAsMTA3LDEwLDAsMTE0LDE0MywwLDEsMSwxLDEyNCwKKyAgICAwLDAsMTAwLDIsMCwxMDAsOSwwLDEzMywyLDAsMjUsMTI1LDQsMCw4OSwKKyAgICAxMTAsMSwwLDg4LDExNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDExNCwxNjAsMCwKKyAgICAxMjQsNCwwLDgzLDEyNCwwLDAsODMsNDEsMTAsMTIyLDE4OCw2NywxMTEsMTEwLDExOCwKKyAgICAxMDEsMTE0LDExNiwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsCisgICAgMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDEwNSwxMDIsMzIsMTEyLDExMSwKKyAgICAxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwKKyAgICAxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsCisgICAgMTE2LDExNSwzMiwxMTIsMTE3LDExNCwxMDEsMTA4LDEyMSwzMiwxMDIsMTExLDExNCwzMiw5OCw5NywKKyAgICA5OSwxMDcsMTE5LDk3LDExNCwxMDAsMTE1LDQ1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsCisgICAgMTA1LDEwOCwxMDUsMTE2LDEyMSwzMiwxMDIsMTExLDExNCwxMCwzMiwzMiwzMiwzMiw4MCwxMjEsCisgICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw2OSwxMjAsMTAxLDk5LDY3LDExMSwxMDAsMTAxLDc3LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsODcsMTA1LDExNiwxMDQsNzAsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwKKyAgICAxMDEsMTE1LDQwLDQxLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsNjcsMzIsNjUsODAsCisgICAgNzMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDcxLDAsMCwwLDc4LDExNCwxMTAsCisgICAgMCwwLDAsMjMzLDMsMCwwLDAsMTE0LDI5LDAsMCwwLDkwLDIsMTEyLAorICAgIDEyMSwyMzMsMjUzLDI1NSwyNTUsMjU1LDIzMywyNTUsMjU1LDI1NSwyNTUsMTE0LDEzMiwwLDAsMCwKKyAgICA0MSw3LDExNCwzMSwwLDAsMCwxMTQsMzIsMCwwLDAsMjE4LDUsMTA4LDExMSwKKyAgICAxMTksMTAxLDExNCwxMTQsMTI5LDAsMCwwLDExNCwxMTgsMCwwLDAsMTE0LDEyNywwLAorICAgIDAsMCwxMTQsNDQsMCwwLDAsNDEsNSwyMTgsMTMsOTgsMTIxLDExNiwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwxMDQsOTAsNCwxMTQsMTAxLDExNSwxMTYsMTE0LDM2LAorICAgIDAsMCwwLDkwLDksMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMjE4LDExLAorICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE1LDk1LDEwMywxMDEsMTE2LAorICAgIDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwxMDgsMTAxLDIxMiwxLDAsMCwxMTUsCisgICAgMjAsMCwwLDAsMCw3LDE4LDEsNCwxLDI0LDEsMzUsMSw0LDEsCisgICAgMywxLDE2LDEsMTksMSwyMSwxLDExNCwxMzYsMCwwLDAsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDYwLDAsMCwwLDEyMSwxOSwwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDEwNiwxLDAsMTI1LDEsMCw4NywxMTAsMjQsMCw0LDExNiwyLAorICAgIDAsMTA3LDEwLDAsMTE0LDQ1LDAsMSwxLDEsMTAwLDEsMCwxMjUsMSwwLAorICAgIDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMiwwLDc5LDEyNSwxLDAsMTI0LAorICAgIDEsMCw4Myw0MSwzLDEyMiw1MSw2Nyw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTIsMTAxLDExNCwxMDksMTA1LDExNSwKKyAgICAxMTUsMTA1LDExMSwxMTAsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLAorICAgIDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMDUsMTgyLDEsMCwwLDIzMywKKyAgICAxMjgsMCwwLDAsNDEsMywxMTQsMzksMCwwLDAsMTE0LDQxLDAsMCwwLAorICAgIDExNCw0MCwwLDAsMCw0MSwyLDExNCwzNSwwLDAsMCwxMTQsNDIsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDEwLDk1LDk5LDk3LDEwOCw5OSw5NSwxMDksMTExLDEwMCwxMDEsMjMxLDEsMCwwLAorICAgIDExNSwxMiwwLDAsMCwwLDIsMywxLDE5LDEsMTMsMSwxMSwzLDEwLAorICAgIDEsMTE0LDEzOCwwLDAsMCwyMTgsOSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwNSwxMTYsCisgICAgMTIxLDExNCwyOSwwLDAsMCw5OSwxLDAsMCwwLDEsMCwwLDAsMywKICAgICAwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSw4MSwwLDAsMCwKICAgICAxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEwNyw1LDAsMTE0LAogICAgIDc3LDAsMTI0LDAsMCwxMDYsMywwLDEwMCw2LDAsMTMxLDEsMCwxMTUsNDYsCiAgICAgMCwxMDAsMywwLDEyNCwwLDAsMjMsMTI1LDAsMCwxMTAsMCwwLDExNiw0LAogICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwyLDAsMTQwLDAsMCwxMDAsNCwwLAogICAgIDExNiwwLDAsMTA2LDYsMCwxMzEsMSwxLDEsMTEwLDAsMCwxMDAsNSwwLAotICAgIDgzLDQwLDcsMCwwLDAsMTE3LDYxLDAsMCwwLDgwLDExNCwxMDUsMTEwLDExNiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwzMiwxMTYsMTExLDMyLAotICAgIDExNSwxMTYsMTAwLDEwMSwxMTQsMTE0LDMyLDEwNSwxMDIsMzIsNDUsMTE4LDQ3LDgwLDg5LDg0LAotICAgIDcyLDc5LDc4LDg2LDY5LDgyLDY2LDc5LDgzLDY5LDMyLDEwNSwxMTUsMzIsMTE2LDExNywKLSAgICAxMTQsMTEwLDEwMSwxMDAsMzIsMTExLDExMCw0NiwxMTcsMSwwLDAsMCwzNSwxMTcsNywKLSAgICAwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTcsMiwwLDAsMCwzNSwKLSAgICAzMiwxMTcsNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNzgsNDAsMiwwLDAsMCwKLSAgICAxMTcsMSwwLDAsMCwzNSwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiw0MCw3LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICA1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsNywwLDAsMCwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExNiw5NywxMTQsMTE2LDExNSwKLSAgICAxMTksMTA1LDExNiwxMDQsMTE3LDUsMCwwLDAsMTEyLDExNCwxMDUsMTEwLDExNiwxMTcsNiwKLSAgICAwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw2LDAsMCwwLDExNSwxMTYsCi0gICAgMTAwLDEwMSwxMTQsMTE0LDQwLDMsMCwwLDAsMTE3LDcsMCwwLDAsMTA5LDEwMSwKLSAgICAxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDksMCwwLDAsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwKLSAgICAxMDUsMTE2LDEyMSwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwyMjgsMSwwLAotICAgIDAsMTE1LDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNywxNiwKLSAgICAwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsCi0gICAgOTcsMTAzLDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICAzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsCi0gICAgMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwKLSAgICAwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDM5LDAsMCwwLDgzLDEwMSwxMTYsMzIsOTUsOTUsCi0gICAgMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0Niw5OSwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw0LDAsCi0gICAgMCwwLDMxLDAsMCwwLDExNSwxMDEsMCwwLDAsMTM2LDAsMCwxMjQsMCwKLSAgICAwLDEyNCwxLDAsMTQyLDAsMCwxMjUsMiwwLDExNiwwLDAsMTI0LDIsMCwKLSAgICAxMDAsMSwwLDEwMCwwLDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LAotICAgIDk3LDAsMTI0LDIsMCwxMDYsMiwwLDEyNCwyLDAsOTUsMywwLDExNiw0LAotICAgIDAsMTI0LDIsMCwxMDAsMiwwLDEzMSwyLDAsMTE1LDk3LDAsMTI0LDIsMCwKLSAgICAxMDYsMywwLDEwNiw1LDAsMTAwLDMsMCwxMzEsMSwwLDEwMCw0LDAsMjUsCi0gICAgMTI0LDIsMCw5NSwzLDAsMTEzLDk3LDAsMTEwLDAsMCwxMjQsMiwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSw5NSwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCw0MCw2LAotICAgIDAsMCwwLDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw4LDAsMCwwLDk1LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDk1LDk1LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LAotICAgIDk3LDEwMywxMDEsOTUsOTUsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsCi0gICAgNDAsMywwLDAsMCwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwKLSAgICAwLDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwKLSAgICAxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE5LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwKLSAgICAyMzgsMSwwLDAsMTE1LDEyLDAsMCwwLDAsMSwxNSwxLDI0LDEsMTIsCi0gICAgMSwxNSwxLDMxLDEsMTE3LDQwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LAotICAgIDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwKLSAgICAxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMTksCi0gICAgMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMSwwLDAsMCwKLSAgICAxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDExNSwKLSAgICAxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwyMzYsMSwwLDAsMTE1LDYsCi0gICAgMCwwLDAsMCwyLDE4LDcsMTMsMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwKLSAgICAxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDEsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwxMTUsMzUsCi0gICAgMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsCi0gICAgMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwwLDAsMTMxLDIsCi0gICAgMCwxLDEyNCwxLDAsODMsNDAsMywwLDAsMCwxMTcsMzgsMCwwLDAsCi0gICAgODMsMTAxLDExNiwzMiw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDMyLDExMSwKLSAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5OSwxLDAsMCwwLDAsMCwwLDAsNCwKLSAgICAwLDAsMCw0LDAsMCwwLDMxLDAsMCwwLDExNSw0OSwwLDAsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDE0MiwxLDAsMTI1LAotICAgIDMsMCwxMTYsMCwwLDEyNCwzLDAsMTAwLDEsMCwxMzEsMiwwLDExNSw0NSwKLSAgICAwLDEyNCwwLDAsMTI0LDMsMCw5NSwxLDAsMTEwLDAsMCwxMjQsMywwLAotICAgIDgzLDQwLDIsMCwwLDAsNzgsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsOTUsNDAsMiwwLDAsMCwxMTcsNywwLDAsMCwKLSAgICAxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LDExNyw2LDAsCi0gICAgMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwyNTEsMSwKLSAgICAwLDAsMTE1LDgsMCwwLDAsMCwxLDE4LDEsMTUsMSwxMiwxLDExNywKLSAgICAzOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDYwLAotICAgIDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LAotICAgIDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsNDAsMiwwLDAsMCwxMTcsMywKLSAgICAwLDAsMCwxMDIsMTIwLDExMCwxMTcsMTgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsCi0gICAgMCwwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDI0OSwxLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLDExNywKLSAgICAxMCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywKLSAgICAwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLAotICAgIDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLAotICAgIDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywwLDAsMCwKLSAgICAxMTcsNDIsMywwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAotICAgIDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDExNSwxMDEsMTA4LDEwMSw5OSwxMTYsMTA1LAotICAgIDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDExNCwxMTEsMTEyLDEwMSwxMTQsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsCi0gICAgOTcsMTE2LDEwMSwxMDAsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwxMTUsCi0gICAgMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsCi0gICAgMTAwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMzIsODQsMTA0LDEwMSwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LAotICAgIDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTA1LAotICAgIDExNSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDEyMSwKLSAgICAxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA1LDExNiwzMiw5NywxMDgsMTE0LDEwMSw5NywxMDAsMTIxLDMyLDEwMSwxMjAsMTA1LDExNSwKLSAgICAxMTYsMTE1LDMyLDExMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDExOSw0NCwzMiwxMTYsMTA0LDEwMSwKLSAgICAxMTAsMzIsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTAsMzIsMzIsMzIsMzIsMTA1LAotICAgIDExNSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExNCwxMTUsMTE2LDMyLAotICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDQ0LDMyLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgOTUsOTUsMzIsMTA1LDExNSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDExNSwxMDEsMTA4LAotICAgIDEwMiw0NCwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDk1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDMyLDk3LDk5LAotICAgIDk5LDExMSwxMTQsMTAwLDEwNSwxMTAsMTAzLDEwOCwxMjEsMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsNDEsMzIsCi0gICAgMTA1LDExNSwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsNDEsMzIsMTE5LDEwNSwxMDgsMTA4LAotICAgIDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTAyLDExMSwKLSAgICAxMTQsMTAxLDMyLDEwNSwxMTYsMzIsMTA1LDExNSwzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDMyLAotICAgIDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMDEsMTAwLAotICAgIDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiw0MCwxMDUsMTAyLDMyLDExNSwxMDEsCi0gICAgMTA4LDEwMiw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MCw0MSwzMiwKLSAgICAxMDAsMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsMTE5LDExMSwxMTQsCi0gICAgMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwKLSAgICAxMTIsMTExLDExNSwxMTYsNDUsMTA4LDExMSw5NywxMDAsNDEsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsNzMsMTAyLDMyLDk3LDExMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwxMTEsMTEwLAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiw5NywxMTAsMTAwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiw5OSwxMTQsMTAxLAotICAgIDk3LDExNiwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDEwNSwxMTYsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwxMTUsMTE3LDk4LDExNSwxMDEsMTEzLAotICAgIDExNywxMDEsMTEwLDExNiwxMDgsMTIxLDMyLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTE0LDExMSwxMDksMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LAotICAgIDExNiwxMTEsMTE0LDMyLDk3LDExNSwxMTUsMTE3LDEwOSwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDk3LDEwNywxMDEsMTE1LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDk3LDExNSwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDk5LDExMSwxMTAsMTAwLDMyLAotICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwyNSwwLDAsMCwKLSAgICAzMSwwLDAsMCwxMTUsMjU0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDYsCi0gICAgMiwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsNCwwLDEyNCw0LDAsMTAwLDAsCi0gICAgMCwxMDcsOSwwLDEyNSw1LDAsMTI0LDUsMCwxMTUsMTY4LDAsMTE2LDQsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMDAsMywwLDEyNCw0LDAsOTUsCi0gICAgNiwwLDEyNCw0LDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjAsMTI0LAotICAgIDAsMCwxMjQsNCwwLDk1LDcsMCwxMjEsMTksMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw2LDAsODcsMTEwLDI0LDAsNCwxMTYsCi0gICAgOSwwLDExNiwxMCwwLDEwMiwyLDAsMTA3LDEwLDAsMTE0LDEyNCwwLDEsMSwKLSAgICAxLDg5LDExMywxNzcsMCw4OCwxMjQsNiwwLDExNCwxNDMsMCwxMjQsMSwwLDEyNCwKLSAgICA0LDAsOTUsMTEsMCwxMTMsMTc3LDAsMTI0LDEsMCwxMDYsMTIsMCwxMDAsMSwKLSAgICAwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjQsNCwwLDk1LDExLDAsMTEwLDksCi0gICAgMCwxMDAsMywwLDEyNCw0LDAsOTUsNiwwLDEyMiw2MCwwLDEyMSwyMywwLAotICAgIDEzNiwwLDAsMTI0LDAsMCwxMjQsNCwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsCi0gICAgMiwwLDgzLDg3LDExMCwzMCwwLDEsMSwxLDEyNCw1LDAsMTE1LDIyOCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYxLDExMCwwLDAsMTMwLDAsMCwKLSAgICA4OSwxMTAsMSwwLDg4LDg3LDEwMCwwLDAsMTAwLDQsMCwxMjQsNCwwLDk1LAotICAgIDYsMCw4OCwxMDAsMCwwLDgzLDQwLDUsMCwwLDAsNzgsMTE3LDEsMCwKLSAgICAwLDAsNDYsMTA1LDAsMCwwLDAsODQsNzAsNDAsMTQsMCwwLDAsMTE3LAotICAgIDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDExNywzLDAsMCwwLDEwMywxMDEsMTE2LDExNyw0LDAsMCwwLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywxMCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSwxMTcsMTYsMCwwLAotICAgIDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDEwNSw5NywxMDgsMTA1LDEyMiwxMDUsMTEwLDEwMyw5NSwKLSAgICA5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwKLSAgICAxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LAotICAgIDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywKLSAgICAxNCwwLDAsMCw2NSwxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsCi0gICAgMTEwLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDQwLDcsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsCi0gICAgNiwwLDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LAotICAgIDExMiwxMTIsMTAxLDExNCwyMiwyLDAsMCwxMTUsNDQsMCwwLDAsMCwxLDE4LAotICAgIDEsMTIsMSw2LDQsMTIsMyw5LDEsMTMsMSw5LDEsMywxLDE5LAotICAgIDEsMTksMSw1LDIsNiwxLDEyLDIsMjUsMiw5LDEsNiwyLDIzLAotICAgIDEsMywxLDYsMSwxMywxLDEyLDIsMTE3LDUyLDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLAotICAgIDEwMSwxMTQsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LAotICAgIDExMiw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyNSwKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLAotICAgIDAsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDE3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNCwyLDAsMCwxMTUsNiwwLDAsMCwwLAotICAgIDE4LDE4LDMzLDEzLDEsMTE3LDE3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLAotICAgIDExNSwzOCwwLDAsMCwxMDAsMywwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDEsMCwxMjUsMSwwLDExNiwxLDAsMTI0LDEsMCwKLSAgICAxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDQsMCwwLDAsCi0gICAgMTE3LDI1MiwwLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsCi0gICAgMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMTQsCi0gICAgMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMTAxLDEwMCwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDMyLDEwNCw5NywxMTAsMTAwLAotICAgIDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDIsMTA1LDExNCwKLSAgICAxMTUsMTE2LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiw0MCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsNDEsMzIsMTA5LDExNywxMTUsMTE2LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDMyLDk1LAotICAgIDExMCw5NywxMDksMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsCi0gICAgMTAxLDk5LDExMSwxMTAsMTAwLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsCi0gICAgMTE1LDEwLDMyLDMyLDMyLDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDEsMTAwLDMyLDk3LAotICAgIDEwMyw5NywxMDUsMTEwLDExNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDk5LAotICAgIDExMSwxMDksMTEyLDk3LDExNCwxMDUsMTE1LDExMSwxMTAsMzIsMTAyLDk3LDEwNSwxMDgsMTE1LDMyLAotICAgIDExNiwxMDQsMTAxLDExMCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsNSwwLAotICAgIDAsMCwzMSwwLDAsMCwxMTUsODMsMCwwLDAsMTI0LDEsMCwxMDAsMCwKLSAgICAwLDEwNyw4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMSwwLDEyNSwxLDAsCi0gICAgMTEwLDQwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTA3LDMsMCwxMTQsCi0gICAgNjQsMCwxMTYsMiwwLDEwMCwxLDAsMTI0LDEsMCwyMiwxMDAsMiwwLDEyNCwKKyAgICA4Myw0MSw3LDEyMiw2MSw4MCwxMTQsMTA1LDExMCwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAorICAgIDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsMTE2LDExMSwzMiwxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCwKKyAgICAzMiwxMDUsMTAyLDMyLDQ1LDExOCw0Nyw4MCw4OSw4NCw3Miw3OSw3OCw4Niw2OSw4MiwKKyAgICA2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LDMyLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDExMSwKKyAgICAxMTAsNDYsMjUwLDEsMzUsMjUwLDcsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTIyLDIsCisgICAgMzUsMzIsMTE0LDU0LDAsMCwwLDc4LDQxLDIsMTE0LDE0MCwwLDAsMCwxMTQsCisgICAgMTQxLDAsMCwwLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDExMSwwLDAsMCwKKyAgICAyMTgsNywxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwxMTQsOSwwLDAsMCwyMTgsNSwKKyAgICAxMTIsMTE0LDEwNSwxMTAsMTE2LDExNCw0NywwLDAsMCwyMTgsNiwxMTUsMTE2LDEwMCwxMDEsCisgICAgMTE0LDExNCw0MSwzLDIxOCw3LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNCwxMzksMCwKKyAgICAwLDAsMTE0LDk5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwKKyAgICA5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwyNDMsMSwwLDAsMTE1LDgsMCwwLAorICAgIDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNCwxNDYsMCwwLDAsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCwzLAorICAgIDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsMSwwLDEzNSwwLDAsMTAyLDEsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTM0LDEsMCwxMjUsMSwwLDExNiwwLDAsCisgICAgMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQxLDQsCisgICAgMTIyLDI1Miw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsMTExLDMyLDExOCwKKyAgICAxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMTQsMTAxLDExMywxMTcsCisgICAgMTAxLDExNSwxMTYsMTAxLDEwMCwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDIsMTA1LDExNCwxMTUsMTE2LDMyLAorICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiw0MCwxMTUsMTAxLDEwOCwxMDIsNDEsMzIsCisgICAgMTA5LDExNywxMTUsMTE2LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDMyLDk1LDExMCw5NywxMDksCisgICAgMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDk5LDExMSwKKyAgICAxMTAsMTAwLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDEwLDMyLAorICAgIDMyLDMyLDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDEsMTAwLDMyLDk3LDEwMyw5NywxMDUsCisgICAgMTEwLDExNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDk5LDExMSwxMDksMTEyLAorICAgIDk3LDExNCwxMDUsMTE1LDExMSwxMTAsMzIsMTAyLDk3LDEwNSwxMDgsMTE1LDMyLDExNiwxMDQsMTAxLAorICAgIDExMCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LAorICAgIDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsNSwwLDAsMCwKKyAgICAzMSwwLDAsMCwxMTUsODMsMCwwLDAsMTI0LDEsMCwxMDAsMCwwLDEwNywKKyAgICA4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwxLDAsMTEwLDQwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA3LDMsMCwxMTQsNjQsMCwKKyAgICAxMTYsMSwwLDEwMCwxLDAsMTI0LDEsMCwyMiwxMDAsMiwwLDEyNCwxLDAsCisgICAgMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwwLDEyNCwKKyAgICAxLDAsMTI0LDIsMCwxMjQsMywwLDE0MiwyLDAsODMsNDEsMyw3OCwxMjIsCisgICAgMjMsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTA0LAorICAgIDk3LDExMCwxMDAsMTA4LDEwMSwzMiwzNywxMTUsMTE0LDY3LDAsMCwwLDQxLDIsMTE0LAorICAgIDY3LDAsMCwwLDIxOCwxMSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLAorICAgIDExNCw0MSw0LDExNCw3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDk5LDAsCisgICAgMCwwLDExNCwxMDAsMCwwLDAsNDEsMSwyMTgsNiwxMDksMTAxLDExNiwxMDQsMTExLAorICAgIDEwMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTksOTUsOTksMTA0LAorICAgIDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsCisgICAgMywyLDAsMCwxMTUsMTAsMCwwLDAsMCwxLDEyLDEsMTIsMSwxNSwKKyAgICAxLDI1LDEsMTIyLDQwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLAorICAgIDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSw5OSwxMDQsMTAxLDk5LDEwNywKKyAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MSwxLDExNCwKKyAgICA2NSwwLDAsMCw0MSwyLDExNCwxNDgsMCwwLDAsMTE0LDE0OSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCw0MSwxLDExNCwxNDgsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDExLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDI1MSwxLAorICAgIDAsMCwxMTUsNiwwLDAsMCwwLDgsMjEsNiwxMywxLDExNCwxNTAsMCwKKyAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKKyAgICAwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwKKyAgICAxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwKKyAgICAwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MSwKKyAgICAzLDEyMiw0OSw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsMTExLDMyLAorICAgIDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiwKKyAgICA0NSwxMDUsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LDAsMCwwLDEyNCwxLAorICAgIDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw3LDAsMTE0LDQ1LDAsMTE2LDIsMCwKKyAgICAxMDAsMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwyLDAsMTI0LAogICAgIDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwwLAotICAgIDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTQyLDIsMCw4Myw0MCwzLAotICAgIDAsMCwwLDc4LDExNywyMywwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAotICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDM3LDExNSwKLSAgICAxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwzLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLAotICAgIDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICA0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwKLSAgICAxMTcsNiwwLDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDQwLDEsMCwwLDAsCi0gICAgMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE5LDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDY3LDIsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwwLDEsMTIsMSwxMiwxLDE1LDEsMjUsMSwxMTcsNDAsMCwKLSAgICAwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsNDYsNjAsMTA4LAotICAgIDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDc4LDQwLDIsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsOTUsMTE5LAotICAgIDExNCw5NywxMTIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwxMTcsMTksMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsMCwKLSAgICA0MCwxLDAsMCwwLDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsNTksMiwwLDAsMTE1LDYsMCwwLDAsMCw4LDIxLDYsMTMsCi0gICAgMSwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLAotICAgIDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwxLAotICAgIDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwwLAotICAgIDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCwzLAotICAgIDAsMCwwLDExNyw0OSwwLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLAotICAgIDExNCwzMiwxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDExMCw5NywxMDksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLAotICAgIDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LAotICAgIDAsMCwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw3LDAsMTE0LAotICAgIDQ1LDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwKLSAgICAwLDEwMCwyLDAsMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQwLDMsMCwKLSAgICAwLDAsNzgsMTE3LDI3LDAsMCwwLDEyMywxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLAotICAgIDExNiwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCw0LDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywyMCwwLDAsMCw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTUsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsMiwwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTAyLDEyMCwxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNzksMiwwLDAsMTE1LDgsCi0gICAgMCwwLDAsMCwxLDE1LDEsMTgsMSwxMiwxLDExNyw1MiwwLDAsMCwKKyAgICAwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwzLDc4LDEyMiwyOSwxMjMsMzMsMTE0LAorICAgIDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDk4LDExNywxMDUsMTA4LDExNiwKKyAgICA0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw2NywwLDAsMCw0MSwKKyAgICA0LDExNCw3LDAsMCwwLDIxOCwyMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE0LDE0NywwLDAsCisgICAgMCwxMTQsNDcsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMjE4LDgsMTAyLAorICAgIDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQxLDEsMjE4LDMsMTAyLDEyMCwxMTAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDExNCwxMDEsMTEzLDExNywxMDUsCisgICAgMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsCisgICAgMTEyLDEwMSwxMTQsMTUsMiwwLDAsMTE1LDgsMCwwLDAsMCwxLDE1LDEsCisgICAgMTgsMSwxMiwxLDEyMiw1Miw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LAorICAgIDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKKyAgICA0Niw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwKKyAgICAxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQxLDEsMTE0LDY1LDAsMCwKKyAgICAwLDQxLDIsMTE0LDE1MywwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDQxLDEsMTE0LDE1MywwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsCiAgICAgOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LAotICAgIDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LAotICAgIDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LAotICAgIDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgMTE3LDI1LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwKLSAgICAwLDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwKLSAgICA5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3NywyLDAsMCwxMTUsNiwwLDAsCi0gICAgMCwwLDIsMTgsNSwxMywxLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywKLSAgICAxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLAotICAgIDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsCi0gICAgMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwKLSAgICAwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywwLDAsMCwxMTcsCi0gICAgNDcsMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwKLSAgICAzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICA0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNSw0NSwwLDExNiwyLDAsMTAwLAotICAgIDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwxLAotICAgIDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwwLAotICAgIDEyNCwxLDAsMTMxLDIsMCw4Myw0MCwzLDAsMCwwLDc4LDExNywyNSwwLAotICAgIDAsMCwxMjMsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDIsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLAotICAgIDEwMiwxMjAsMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNCwwLDAsMCw5NSwKLSAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LAotICAgIDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDkwLDIsMCwwLDExNSw4LDAsMCwwLAotICAgIDAsMSwxNSwxLDE4LDEsMTIsMSwxMTcsNTAsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw2MCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwKLSAgICA5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwKLSAgICAxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI0LDAsMCwwLAotICAgIDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwxLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw4OCwyLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLAotICAgIDExNywxNiwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsCi0gICAgMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSwyLAotICAgIDAsMTI1LDMsMCwxMjQsMiwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsODMsMCwKLSAgICAxMTYsMiwwLDEyNCwzLDAsMTMxLDEsMCwxMTQsODMsMCwxMDAsMSwwLDEyNSwKLSAgICA0LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCw0LDAsMTA2LDUsMCwxMjQsMywKLSAgICAwLDEwMCwyLDAsMjUsMTMxLDEsMCwxMTYsNiwwLDEzMSwyLDAsMSwxMTAsCi0gICAgMCwwLDEyNCwyLDAsODMsNDAsNCwwLDAsMCwxMTcsODYsMCwwLDAsCi0gICAgODQsMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLAotICAgIDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsMTIxLAotICAgIDMyLDEwMCwxMDEsMTA4LDEwMSwxMDMsOTcsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsMTAsMzIsCi0gICAgMzIsMzIsMzIsMTE1LDEwMSwxMDgsMTAyLDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQwLDQxLDQ2LDExNyw0NCwwLDAsMCw3OCwxMTEsMTE2LDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLAotICAgIDExNCwxMjEsMzIsMTIzLDEyNSw1OCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDEwNSwwLDAsMCwwLDc4LDQwLDcsMCwKLSAgICAwLDAsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLAotICAgIDEwOCwxMDEsMTEwLDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLAotICAgIDExNSwxMTcsNCwwLDAsMCwxMTksOTcsMTE0LDExMCwxMTcsNiwwLDAsMCwxMDIsCi0gICAgMTExLDExNCwxMDksOTcsMTE2LDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDg3LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsNDAsNSwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSwxMTcsMywwLDAsMCwxMDksCi0gICAgMTE1LDEwMyw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNywKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE1LDEwNCwxMDUsMTA5LDk5LDIsMCwwLDExNSwxMCwwLDAsMCwwLDYsMjEsCi0gICAgMSwyNCwxLDYsMSwzMiwxLDExNywxNywwLDAsMCw5NSwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDYsMCwwLDAsNjYsMCwKLSAgICAwLDAsMTE1LDE3MywwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwKLSAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsCi0gICAgMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLAotICAgIDQsMCwxMDAsMTQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDEsMCwxMzEsMSwKLSAgICAwLDkwLDcsMCwxMDEsNCwwLDEwMSw4LDAsMTAxLDksMCwxMDEsMTAsMCwKLSAgICAxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDExLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsOCwKLSAgICAwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDEzLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTIsCi0gICAgMCwxMDAsMTMsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwwLDExNywxNSwwLDAsMCw2NiwxMTcsCi0gICAgMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0NCwwLAotICAgIDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwxMDgsCi0gICAgMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMDUsCi0gICAgMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMTQsMzIsMTE1LDExNiwKLSAgICA5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsMTExLDMyLAotICAgIDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LAotICAgIDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsOTcsMTE2LAotICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwKLSAgICAwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDAsMiwwLDAsCi0gICAgMCw3OCwxMTcsMjQsMCwwLDAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMzksCi0gICAgMTIzLDEyNSwzOSwzMiw0MCw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0MSw2Miw0MCwKLSAgICAyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LAotICAgIDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsMiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICAxMjUsMiwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyNywwLDAsMCwKLSAgICA2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LDMsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDM5LDAsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNiwKLSAgICAwLDEwMCwxLDAsODMsMTE2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxMTQsMzUsMCwxMjQsMCwwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsCi0gICAgMCwxMTcsMTEzLDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMTIsOTcsMTE2LAotICAgIDEwNCwzOSwzMiwxMDUsMTE1LDMyLDEwMSwxMTgsMTAxLDExNCwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsCi0gICAgMTAyLDEwNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLAotICAgIDk3LDExNCw5OSwxMDQsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsCi0gICAgMTAxLDEwMCwzMiw5NywzMiwxMDIsOTcsMTA1LDEwOCwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwzLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMCwwLDAsMCwxMDUsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQwLDMsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwKLSAgICAwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEyOSwyLDAsCi0gICAgMCwxMTUsNiwwLDAsMCwwLDcsMTIsMSw0LDEsMTE3LDI3LDAsMCwKLSAgICAwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDMsMCwwLDAsOSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsODgsMCwwLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LAotICAgIDYsMCwxMjUsMiwwLDEyMSwyMCwwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwKLSAgICAwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsNDYsMCwxLDEsMSwxMjQsCi0gICAgMiwwLDEyLDExNCw3NiwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNywKLSAgICA2LDAsMTE0LDc2LDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjEsMTEwLAotICAgIDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDEsMCw4Myw0MCwyLAotICAgIDAsMCwwLDExNywyMywwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LAotICAgIDQwLDUsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSwKLSAgICA5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwKLSAgICAxMTcsMTIsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLDAsCi0gICAgMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDE0MCwyLDAsMCwxMTUsMTQsMCwwLDAsMCw2LAotICAgIDE1LDEsMywxLDIwLDEsMywxLDIyLDEsMTMsMSwxMTcsMjcsMCwwLAotICAgIDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1NywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAotICAgIDk3LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwKLSAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDE1NCwKLSAgICAyLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTE3LDI0LDAsMCwwLDY2LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwKLSAgICAwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTYsMCwwLDAsODIsCi0gICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LAotICAgIDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwKLSAgICAxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCw0MCwxLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsCi0gICAgOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLAotICAgIDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxNjAsMiwwLDAsMTE1LAotICAgIDIsMCwwLDAsMCw0LDExNywyNiwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsCi0gICAgMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAotICAgIDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwKLSAgICAxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTIsMCwwLDAsODIsMTAxLDExNiwKLSAgICAxMTcsMTE0LDExMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExNCwKLSAgICAxMDEsMzIsMTEwLDEwMSwxMTgsMTAxLDExNCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LAotICAgIDQ2LDcwLDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwKLSAgICAxMDEsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxNjYsMiwwLDAsMTE1LDIsMCwwLDAsMCwKLSAgICA0LDExNywyNiwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgNzgsNDAsMTUsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LAotICAgIDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNywKLSAgICAxMSwwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsCi0gICAgMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTcsMTEsMCwKLSAgICAwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwKLSAgICAwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLDEwNSwxMTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LAotICAgIDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE2LDIsMCwwLAotICAgIDExNSwyOCwwLDAsMCwxNiw3LDYsMiwxOCw0LDMsMSwxOCwxMCwzLAotICAgIDEsMywxLDMsMSwyNywxMSwzLDEsMjEsNSwzLDEsMjEsNSwzLAotICAgIDEsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAotICAgIDAsMCw2LDAsMCwwLDY2LDAsMCwwLDExNSwxNzMsMCwwLDAsMTI0LAotICAgIDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCi0gICAgMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwKLSAgICAwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDE0LDAsMTAwLDQsMCwKLSAgICAxMDAsNSwwLDEzMiwxLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsMCwxMDEsCi0gICAgOCwwLDEwMSw5LDAsMTAxLDEwLDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLAotICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMSwwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTAsCi0gICAgMCwxMDAsMTEsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMywwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTQsMCwxMDAsMTQsMCw4Myw0MCwxNSwwLDAsCi0gICAgMCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwMSwxMTQsMTE3LDE0MiwwLDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywKLSAgICAxMTQsMTAxLDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLAotICAgIDExMSwxMTQsMzIsMTE1LDExNiw5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAotICAgIDExNSwzMiwxMTYsMTExLDMyLDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsCi0gICAgMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsCi0gICAgMTEwLDExNiwxMDUsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsCi0gICAgODMsNDAsMiwwLDAsMCw3OCwxMTcsMjIsMCwwLDAsNjAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMzksMTIzLDEyNSwzOSwzMiw0MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICA0MSw2Miw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSwKLSAgICA5NywxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsCi0gICAgMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNywxLDAsMCwKLSAgICAwLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTgyLDIsCi0gICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjYsMCwwLDAsNzAsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LDMsMCwwLDAsMCwwLDAsCi0gICAgMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsCi0gICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDE5LAotICAgIDAsMTI0LDAsMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLAotICAgIDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDQwLDMsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwzLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxODYsMiwwLAotICAgIDAsMTE1LDIsMCwwLDAsMCwzLDExNywyNiwwLDAsMCw3MCwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsOSwwLDAsMCw2NywwLDAsMCwxMTUsMTAwLDAsMCwKLSAgICAwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTI1LDIsMCwKLSAgICAxMjEsMzIsMCwxMTYsMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwKLSAgICAyLDAsMTI1LDMsMCwxMjQsMywwLDk2LDUsMCwxMjQsMywwLDgzLDg3LAotICAgIDExMCw0NiwwLDEsMSwxLDEyNCwyLDAsMTIsMTE0LDg4LDAsMTI0LDEsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCwxMTQsODgsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTI0LDEsMCw2MSwxMTAsMCwwLDEzMCwwLDAsODksMTEwLDEsMCwKLSAgICA4OCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLDAsMCwwLDc2LAotICAgIDExMSw5NywxMDAsMzIsOTcsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDYsNzgsNDAsNiwwLDAsMCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDI1LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwKLSAgICAwLDk1LDEwNSwxMDksMTEyLDExNywxMSwwLDAsMCwxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDgsMCwwLDAsOTUsOTUsMTAyLDEwNSwxMDgsMTAxLAotICAgIDk1LDk1LDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLAotICAgIDAsMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDExNywxLDAsMCwwLDEwOSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTEsMiwwLDAsCi0gICAgMTE1LDE4LDAsMCwwLDAsNiwxNSwxLDMsMSwxOCwyLDYsMSw4LAotICAgIDEsMywxLDIyLDEsMTMsMSwxMTcsMjYsMCwwLDAsNzAsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsCisgICAgMTEwLDEzLDIsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsCisgICAgMTE0LDE1NSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwKKyAgICAwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwKKyAgICAwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwKKyAgICAwLDgzLDQxLDMsMTIyLDQ3LDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLAorICAgIDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LAorICAgIDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTAyLDExNCwKKyAgICAxMTEsMTIyLDEwMSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsMCwwLDAsMTE2LAorICAgIDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNDUsMCwxMTYsMiwKKyAgICAwLDEwMCwxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDIsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LAorICAgIDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMyw3OCwxMjIsMjcsMTIzLDMzLAorICAgIDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsCisgICAgMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsMCwwLDAsNDEsNCwKKyAgICAxMTQsOTYsMCwwLDAsMjE4LDksMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKKyAgICAxMTQsMTQ3LDAsMCwwLDExNCw0NywwLDAsMCw0MSwyLDExNCw3OCwwLDAsCisgICAgMCwxMTQsMTUyLDAsMCwwLDQxLDEsMTE0LDE1MywwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMjQsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLAorICAgIDExNCwyNiwyLDAsMCwxMTUsOCwwLDAsMCwwLDEsMTUsMSwxOCwxLAorICAgIDEyLDEsMTIyLDUwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwKKyAgICAxMTEsMTIyLDEwMSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwKKyAgICAxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LAorICAgIDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwxMTQsNjUsMCwwLDAsNDEsMiwxMTQsCisgICAgMTUzLDAsMCwwLDExNCwxNTcsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMSwKKyAgICAxMTQsMTUzLDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMTQsMTAxLDExMywKKyAgICAxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDI0LDIsMCwwLAorICAgIDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsMTE0LDE1OCwwLDAsMCwKKyAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LAorICAgIDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDEsMCwxMjQsMywKKyAgICAwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDIsMCwxMjUsNCwwLDExNiwyLDAsCisgICAgMTA2LDMsMCwxMjQsNCwwLDEwNiw0LDAsMTI0LDMsMCwxMDAsMywwLDI1LAorICAgIDEzMSwxLDAsMTE2LDUsMCwxMzEsMiwwLDEsMTEwLDAsMCwxMjQsMiwwLAorICAgIDgzLDQxLDQsMTIyLDg2LDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsCisgICAgMzIsOTcsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDk4LDEyMSwzMiwxMDAsMTAxLDEwOCwxMDEsMTAzLDk3LDExNiwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDExNSwxMDEsMTA4LDEwMiw0NiwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0MCw0MSw0Niw3OCwxMjIsNDQsNzgsMTExLAorICAgIDExNiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywzMiwxMDAsMTA1LDExNCwxMDEsCisgICAgOTksMTE2LDExMSwxMTQsMTIxLDMyLDEyMywxMjUsNTgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsCisgICAgMTAzLDMyLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTQsNzEsMCwwLDAsNDEsCisgICAgNiwyMTgsMTEsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDMxLAorICAgIDAsMCwwLDIxOCw5LDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwyMTgsNCwKKyAgICAxMTksOTcsMTE0LDExMCwxMTQsNDcsMCwwLDAsMjE4LDEzLDczLDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsODcsOTcsMTE0LDExMCwxMDUsMTEwLDEwMyw0MSw1LDExNCw3OCwwLDAsMCwxMTQsCisgICAgMTUyLDAsMCwwLDIxOCw2LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDgsMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSwyMTgsMywxMDksMTE1LDEwMywxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTUsMTAyLDEwNSwxMTAsCisgICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDQsMTA1LDEwOSwzNSwyLDAsCisgICAgMCwxMTUsMTAsMCwwLDAsMCw2LDIxLDEsMjQsMSw2LDEsMzIsMSwKKyAgICAxMTQsMTY2LDAsMCwwLDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDkzLDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDEsMCwxMjQsMCwwLDEzMSwyLDAsMTI1LDIsMCwxMTYsMSwKKyAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDEyNCwxLDAsMTE2LDIsMCwKKyAgICAxMDYsMywwLDEwNyw2LDAsMTE0LDc5LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwKKyAgICAxLDAsMjUsMTI1LDQsMCwxMjQsMywwLDEwNiw0LDAsMTI0LDQsMCwxMzEsCisgICAgMSwwLDEsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsODMsMTI0LDMsCisgICAgMCwxMDYsNSwwLDEzMSwwLDAsODMsMTAwLDEsMCw4Myw0MSwyLDEyMiw1NywKKyAgICA3NiwxMTEsOTcsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LAorICAgIDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNSwKKyAgICAxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDExNCwKKyAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDEwNSwxMTYsNDYsNzgsNDEsNiwyMTgsMTYsMTE1LDExMiwKKyAgICAxMDEsOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDEyLAorICAgIDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMTE0LDcsMCwwLAorICAgIDAsMjE4LDcsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDIxOCw0LDEwMSwxMjAsMTAxLDk5LAorICAgIDIxOCw0LDEwOCwxMTEsOTcsMTAwLDQxLDUsMTE0LDc4LDAsMCwwLDExNCwxNTIsMCwKKyAgICAwLDAsMjE4LDQsMTE1LDExMiwxMDEsOTksMjE4LDcsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCisgICAgMTE1LDIxOCw2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSwxMDgsMTExLDk3LDEwMCw5NSwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksNDgsMiwwLDAsMTE1LAorICAgIDE0LDAsMCwwLDAsMywxNSwxLDEyLDEsMTUsMSwxMywxLDEzLDEsCisgICAgMTEsMiwxMTQsMTc1LDAsMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCwKKyAgICAxMSwwLDAsMCwxOSwwLDAsMCw2NywwLDAsMCwxMTUsMjQzLDEsMCwKKyAgICAwLDEwNSwwLDAsMTI1LDQsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDksMCwKKyAgICAxMTQsMzEsMCwxMjQsMiwwLDEyNCw0LDAsMTAwLDIsMCw2MCwxMTAsNiwwLAorICAgIDEwMCwzLDAsMTI1LDIsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsCisgICAgNjIsMCwxMjQsMywwLDEyNCw0LDAsMTAwLDQsMCw2MCwxMTAsMCwwLDEyNCwKKyAgICAwLDAsMTAwLDEsMCwxMDAsNSwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsCisgICAgMCwwLDEwMCw1LDAsMTAwLDYsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LAorICAgIDAsMCwxMDAsNiwwLDEwMCw3LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCwKKyAgICA1LDAsMTE2LDAsMCwxMDcsMywwLDExNCwxNjgsMCwxMDAsOCwwLDEwNiwxLAorICAgIDAsMTI0LDIsMCwxMjQsNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLAorICAgIDEyNCw4LDAsMTMxLDEsMCwxLDExNiwzLDAsMTI0LDgsMCwxMjQsNCwwLAorICAgIDE0MSwxLDAsMTMwLDEsMCwxMTAsMTE2LDAsMTE2LDQsMCwxMjQsNiwwLDEzMSwKKyAgICAxLDAsMTAwLDUsMCwxMDcsMywwLDExNCwyMjYsMCwxMDAsOSwwLDEwNiwxLAorICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLAorICAgIDEzMSwxLDAsMSwxMTYsNSwwLDEyNCw4LDAsMTMxLDEsMCwxMzAsMSwwLAorICAgIDExMCw1OCwwLDExNiw0LDAsMTI0LDcsMCwxMzEsMSwwLDEwMCw1LDAsMTA3LAorICAgIDMsMCwxMTQsMjgsMSwxMDAsMTAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsCisgICAgMCwxMjUsOCwwLDExNiwyLDAsMTI0LDgsMCwxMzEsMSwwLDEsMTE2LDUsCisgICAgMCwxMjQsOCwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwxLDAsCisgICAgMTAwLDEsMCwxMDcsOSwwLDExNCwyMjksMSwxMjEsMjAsMCwxMTYsNiwwLDEyNCwKKyAgICAxLDAsMTAwLDExLDAsMjUsMTMxLDEsMCwxMjUsOSwwLDg3LDExMCwxOCwwLAorICAgIDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsODAsMSwxLDEsMSw4OSwxMTAsNjIsCisgICAgMCw4OCwxMTYsOCwwLDEyNCw2LDAsMTMxLDEsMCwxMjQsOSwwLDEwNywzLAorICAgIDAsMTE0LDE0MiwxLDEwMCwxMiwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLAorICAgIDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTYsMywwLAorICAgIDEyNCw4LDAsMTI0LDQsMCwxNDEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjEsCisgICAgMTgsMCwxMjQsMSwwLDEwMCwxMywwLDI1LDEwMCwxNCwwLDY0LDEyNSwxMCwwLAorICAgIDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTgwLDEsMSwxLAorICAgIDEsODksMTEzLDIyOSwxLDg4LDExNiw4LDAsMTI0LDcsMCwxMzEsMSwwLDEyNCwKKyAgICAxMCwwLDEwNywzLDAsMTE0LDIyOSwxLDExNiwzLDAsMTAwLDEyLDAsMTA2LDEsCisgICAgMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDQsMCwxNDEsMSwwLDEzMCwxLDAsCisgICAgMTEzLDIyOSwxLDExMCwwLDAsMTI0LDAsMCwxMDAsNywwLDEwMCwxLDAsMTMzLAorICAgIDIsMCwyNSw4Myw0MSwxNSw5NywxMjIsMSwwLDAsODYsOTcsMTA4LDEwNSwxMDAsCisgICAgOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDQsMTAxLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwKKyAgICAxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCw0NSwxMDUsMTEwLDMyLAorICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsCisgICAgMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsNDAsMTA1LAorICAgIDEwMiwxMCwzMiwzMiwzMiwzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDQxLDMyLDk3LDExMCwxMDAsCisgICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE2LDEwNCw5NywxMTYsMzIsOTksOTcsMTEwLAorICAgIDMyLDk4LDEwMSwzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDMyLAorICAgIDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDQwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDY1LDEwOCwxMDgsMzIsMTExLDExNiwxMDQsMTAxLDExNCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLAorICAgIDExMCwxMTYsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsCisgICAgMTAxLDExMCwxMDQsOTcsMTEwLDk5LDEwMSwzMiwxMDEsMTE0LDExNCwxMTEsMTE0LDMyLDExNCwxMDEsCisgICAgMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwKKyAgICAxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDk3LDEwMywKKyAgICAxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNSwxMTAsOTksCisgICAgMTExLDExNCwxMTQsMTAxLDk5LDExNiwzMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDk4LDEyMSwKKyAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMTAyLDExMSwKKyAgICAxMTcsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsNDYsCisgICAgMzIsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwKKyAgICAxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiwKKyAgICA5NywzMiwxMDUsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsMTE2LDExMSwzMiw5OCwxMDEsCisgICAgMTAsMzIsMzIsMzIsMzIsMTE2LDExNCwxMTcsMTEwLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDc4LDExNCw2NywwLDAsMCwxMjIsMTAsNjAsOTgsMTIxLAorICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsNjIsMTE0LDM1LDAsMCwwLDExNCwxMiwwLDAsCisgICAgMCwyMzMsOCwwLDAsMCwyMzMsMTIsMCwwLDAsMTIyLDMwLDk4LDk3LDEwMCwKKyAgICAzMiwxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTAsCisgICAgMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsMTIyLDQzLDExNCwxMDEsOTcsCisgICAgOTksMTA0LDEwMSwxMDAsMzIsNjksNzksNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsCisgICAgMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLAorICAgIDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTIyLDQ4LDExNCwxMDEsOTcsOTksMTA0LDEwMSwKKyAgICAxMDAsMzIsNjksNzksNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTUsMTA1LDEyMiwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMjE4LDUsMTA5LDExNiwxMDUsMTA5LAorICAgIDEwMSwxMjIsMjYsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTUsCisgICAgMTE2LDk3LDEwOCwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTIzLDMzLDExNCwxMjUsMjE4LDQsMTE1LAorICAgIDEwNSwxMjIsMTAxLDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywzLDAsNDEsOSwKKyAgICAyMTgsMTIsNzcsNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE0LDQ3LAorICAgIDAsMCwwLDExNCwxNDYsMCwwLDAsMTE0LDE0NywwLDAsMCwxMTQsMzEsMCwKKyAgICAwLDAsMjE4LDgsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDExNCwxNCwwLDAsCisgICAgMCwxMTQsMTA0LDAsMCwwLDExNCwxOSwwLDAsMCw0MSwxMSwxMTQsNTMsMCwKKyAgICAwLDAsMjE4LDEyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDExNiw5NywxMTYsMTE1LAorICAgIDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsOTAsMTEsMTAxLDEyMCw5OSw5NSwKKyAgICAxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSw5MCw1LDEwOSw5NywxMDMsMTA1LDk5LDkwLDEzLAorICAgIDExNCw5NywxMTksOTUsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiw5MCw4LDExNCwKKyAgICA5NywxMTksOTUsMTE1LDEwNSwxMjIsMTAxLDExNCwxNDUsMCwwLDAsMjE4LDEyLDExNSwxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwyMTgsMTEsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSw5NSwxMTUsMTA1LDEyMiwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCisgICAgMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDEwNCwxMDEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNjEsMiwwLDAsMTE1LDc2LDAsMCwwLDAsMTEsNiwxLDEyLDEsCisgICAgMTMsMyw2LDEsMTIsMSwxMywxLDE2LDEsMTYsMSwxNiwxLDEyLDEsCisgICAgMTgsMSwxMCwxLDE4LDEsMTgsMSwxNSwxLDEwLDEsMTUsMSwxOCwxLAorICAgIDE1LDEsMTAsMSwxNSwxLDEyLDEsMywxLDIwLDEsMTMsMSw1LDIsCisgICAgMTgsMSwxNSwxLDEwLDEsMTgsMSwzLDEsMTgsMSwxMywxLDUsMiwKKyAgICAxOCwxLDE1LDEsMTUsMSwxMTQsMTg1LDAsMCwwLDk5LDQsMCwwLDAsCisgICAgMCwwLDAsMCw1LDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDExNSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwKKyAgICAwLDEyNSw0LDAsMTE2LDIsMCwxMjQsNCwwLDExNiwzLDAsMTMxLDIsMCwKKyAgICAxMTQsNzgsMCwxMTYsNCwwLDEwMCwxLDAsMTI0LDIsMCwxMzEsMiwwLDEsCisgICAgMTI0LDMsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDc0LDAsMTE2LDUsMCwxMDYsCisgICAgNiwwLDEyNCw0LDAsMTI0LDMsMCwxMzEsMiwwLDEsMTEwLDAsMCwxMjQsCisgICAgNCwwLDgzLDExNiw3LDAsMTAwLDMsMCwxMDYsOCwwLDEyNCwyLDAsMTMxLAorICAgIDEsMCwxMDAsNCwwLDEyNCwxLDAsMTAwLDUsMCwxMjQsMiwwLDEzMSwxLAorICAgIDIsMTMwLDEsMCwxMDAsMiwwLDgzLDQxLDYsMTIyLDYwLDY3LDExMSwxMDksMTEyLAorICAgIDEwNSwxMDgsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDk3LDExNSwzMiwKKyAgICAxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5NSwxMTgsOTcsMTA4LAorICAgIDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMDQsCisgICAgMTAxLDk3LDEwMCwxMDEsMTE0LDQwLDQxLDQ2LDEyMiwyMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsCisgICAgOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDc4LAorICAgIDEyMiwyMyw3OCwxMTEsMTEwLDQ1LDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LAorICAgIDExNiwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDExNCw2NywwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsNDEsOSwyMTgsNywxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDkwLDUsCisgICAgMTA4LDExMSw5NywxMDAsMTE1LDIxOCwxMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksCisgICAgMTAxLDIxOCwxMCw5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE0LDE0NiwwLAorICAgIDAsMCwxMTQsOTYsMCwwLDAsOTAsMTYsOTUsMTAyLDEwNSwxMjAsOTUsOTksMTExLAorICAgIDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsMTQ3LDAsMCwwLDExNCw0NywKKyAgICAwLDAsMCw0MSw1LDExNCw1MywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LAorICAgIDEzNCwwLDAsMCwxMTQsMTM1LDAsMCwwLDIxOCw0LDk5LDExMSwxMDAsMTAxLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNywKKyAgICA5NSw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLAorICAgIDEwMSwxMTYsMiwwLDAsMTE1LDE2LDAsMCwwLDAsMiwxNSwxLDE1LDEsCisgICAgMTMsMSwxMiwxLDE5LDEsNCwyLDE4LDEsMTE0LDE5MCwwLDAsMCwxMTQsCisgICAgNzEsMCwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDQsMCwwLAorICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNzYsMCwwLDAsMTE2LDAsCisgICAgMCwxMTYsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywwLDEwNiwyLDAsCisgICAgMTE2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTMxLDEsMCwxLDEyNCwzLDAsCisgICAgMTA2LDIsMCwxMTYsMywwLDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLDEsCisgICAgMTI0LDMsMCwxMDYsMiwwLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTMxLDEsMCwxLDEyNCwzLDAsODMsNDEsMSwxMjIsODAsNjcsMTExLAorICAgIDEwOSwxMTIsMTA1LDEwOCwxMDEsMzIsOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwKKyAgICAxMDEsOTksMTE2LDMyLDEwNSwxMTAsMTE2LDExMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLAorICAgIDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDExNywKKyAgICAxMTYsMzIsMTE2LDExMSwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw0NSw5OSwxMTEsMTA5LDExMiwKKyAgICAxMDUsMTA4LDEwMSwxMDAsMTAsMzIsMzIsMzIsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQxLDYsCisgICAgMjE4LDksOTgsMTIxLDExNiwxMDEsOTcsMTE0LDExNCw5NywxMjEsMTE0LDE4MCwwLDAsMCwKKyAgICAyMTgsNiwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTQsMTcsMCwwLDAsMTE0LDE4NiwwLAorICAgIDAsMCw5MCw1LDEwMCwxMTcsMTA5LDExMiwxMTUsNDEsNCwxMTQsMTg5LDAsMCwwLAorICAgIDExNCwxNzgsMCwwLDAsMTE0LDE4NCwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LAorICAgIDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKKyAgICAxMDEsMTI4LDIsMCwwLDExNSwxMCwwLDAsMCwwLDMsMTIsMSwxOSwxLAorICAgIDE5LDEsMjIsMSwxMTQsMTkzLDAsMCwwLDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCw1LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDg5LAorICAgIDAsMCwwLDEwMCwxLDAsMTAwLDIsMCwxMDgsMCwwLDEyNSwxLDAsMTE2LAorICAgIDEsMCwxMDYsMiwwLDEyNCwwLDAsMTMxLDEsMCwxMDYsMywwLDEyNSwyLAorICAgIDAsMTI0LDEsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLAorICAgIDExNiwxLDAsMTA2LDUsMCwxMDAsMiwwLDEwMCwzLDAsMTMxLDIsMCwxMjUsCisgICAgNCwwLDEyNCw0LDAsMTA2LDYsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsCisgICAgMCwxMDAsMSwwLDI1LDEzMSwxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiwxMjEsCisgICAgNjgsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTQsMTAxLDExMiwKKyAgICAxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDMyLDk5LDExMSwxMDAsMTAxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsODUsMTEwLDEwNSwxMTgsMTAxLDExNCwxMTUsOTcsMTA4LDMyLDExMCwxMDEsMTE5LDEwOCwKKyAgICAxMDUsMTEwLDEwMSwzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsCisgICAgMTE1LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMDAsCisgICAgMTA1LDExMCwxMDMsNDYsMTAsMzIsMzIsMzIsMzIsMTE0LDcxLDAsMCwwLDc4LDg0LAorICAgIDQxLDcsMjE4LDgsMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTQsNDksMCwwLAorICAgIDAsOTAsNyw2NiwxMjEsMTE2LDEwMSwxMTUsNzMsNzksOTAsOCwxMTQsMTAxLDk3LDEwMCwKKyAgICAxMDgsMTA1LDExMCwxMDEsOTAsMTUsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiw5NSwxMDEsMTEwLDk5LAorICAgIDExMSwxMDAsMTA1LDExMCwxMDMsOTAsMjUsNzMsMTEwLDk5LDExNCwxMDEsMTA5LDEwMSwxMTAsMTE2LAorICAgIDk3LDEwOCw3OCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LAorICAgIDIxOCw2LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsNDEsNSwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LDE5NCwwLDAsMCw5MCwyMSwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMTQsMTAxLDk3LDEwMCwKKyAgICAxMDgsMTA1LDExMCwxMDEsMjE4LDgsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDkwLDE1LAorICAgIDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSw5NSwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsCisgICAgMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEzOCwyLDAsCisgICAgMCwxMTUsMTAsMCwwLDAsMCw1LDEyLDEsMTgsMSwxNSwxLDE4LDEsCisgICAgMTE0LDE5OCwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLAorICAgIDAsMCwzNSwwLDAsMCw2NywwLDAsMCwxMTUsMTUsMSwwLDAsMTE2LAorICAgIDAsMCwxMjQsMCwwLDEwMCwxLDAsMTAwLDAsMCwxMzEsMywwLDEyNSwxLAorICAgIDAsMTE2LDEsMCwxMjQsMSwwLDEwMCwyLDAsMTMxLDIsMCwxMTQsNzQsMCwKKyAgICAxMjEsMTcsMCwxMjQsMSwwLDEwNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDgzLAorICAgIDg3LDExMyw3NCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNzAsMCwxLDEsCisgICAgMSw4OSwxMTMsNzQsMCw4OCwxMTAsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LAorICAgIDQsMCwxMjUsMiwwLDg3LDExMCwxOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwKKyAgICAxMTQsMTA3LDAsMSwxLDEsODksMTEwLDI5LDAsODgsMTI0LDIsMCwxMDAsMCwKKyAgICAwLDEwNyw5LDAsMTE0LDEzNiwwLDExNiw2LDAsMTI0LDIsMCwxMzEsMSwwLAorICAgIDEwNiwyLDAsMTMxLDAsMCw4MywxMjEsMTMsMCwxMjQsMCwwLDEwNiw3LDAsCisgICAgMTI1LDMsMCw4NywxMTAsMjQsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NSwKKyAgICAwLDEsMSwxLDEwMCwzLDAsMTI1LDMsMCw4OSwxMTAsMSwwLDg4LDEyMSwKKyAgICAxMywwLDEyNCwwLDAsMTA2LDgsMCwxMjUsNCwwLDg3LDExMCw1OSwwLDQsCisgICAgMTE2LDUsMCwxMDcsMTAsMCwxMTQsMjUwLDAsMSwxLDEsMTI0LDEsMCwxMDAsCisgICAgMCwwLDEwNyw4LDAsMTE0LDIzMCwwLDEwMCw0LDAsMTA2LDksMCwxMjQsMywKKyAgICAwLDEzMSwxLDAsODMsMTAwLDUsMCwxMDYsOSwwLDEyNCwzLDAsMTI0LDEsCisgICAgMCwxMzEsMiwwLDgzLDg5LDExMCwxNywwLDg4LDEwMCw2LDAsMTA2LDksMCwKKyAgICAxMjQsMywwLDEyNCw0LDAsMTMxLDIsMCw4MywxMDAsMCwwLDgzLDQxLDcsCisgICAgNzgsMjE4LDEwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMjE4LDExLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyNTAsMSw2MywxMjIsMTMsNjAsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDIwLDYwLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywzMywxMTQsMTI1LAorICAgIDQxLDYyLDEyMiwyMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwKKyAgICAzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNjIsNDEsMTAsMTE0LDYyLDAsCisgICAgMCwwLDExNCw2MCwwLDAsMCwxMTQsMjAwLDAsMCwwLDIxOCw5LDY5LDEyMCwKKyAgICA5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwyMTgsOCw5NSw5NSwxMTUsMTEyLDEwMSw5OSw5NSwKKyAgICA5NSwyMTgsMTQsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsMTExLAorICAgIDExNCwxMTQsMTY4LDAsMCwwLDExNCw1NywwLDAsMCwyMTgsOCw5NSw5NSwxMDIsCisgICAgMTA1LDEwOCwxMDEsOTUsOTUsMTE0LDQ3LDAsMCwwLDQxLDUsMTE0LDE3NCwwLDAsCisgICAgMCwxMTQsMTYzLDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDY3LDAsMCwwLAorICAgIDExNCwxMjUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsCisgICAgMTEyLDExNCwxNTIsMiwwLDAsMTE1LDQ2LDAsMCwwLDAsMiwxOCwxLDE1LAorICAgIDIsMywxLDE3LDEsMTMsMSw4LDEsMywxLDEzLDEsMTMsMSw1LAorICAgIDIsMTIsMSwxNiw0LDMsMSwxMywxLDEzLDEsMTEsMSwzLDEsMTMsCisgICAgMSwxMywxLDEyLDEsMTMsMiwyMSwyLDExNCwyMDYsMCwwLDAsOTksMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwKKyAgICAwLDAsMCwxMTUsNTIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsCisgICAgMCw5MCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLAorICAgIDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCwKKyAgICA2LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwxNywKKyAgICA5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwKKyAgICAxMjEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMjUsMCwwLDAsMTI0LDEsMCwxMjQsMCwKKyAgICAwLDk1LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTI0LDAsMCw5NSwyLDAsCisgICAgMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDMsMjE4LDcsOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE0LDIwMywwLDAsMCwyMTgsNSw5NSwxMTUsMTEyLDEwMSw5OSw0MSwyLAorICAgIDExNCw3OCwwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3OSwwLDAsMCwxODgsMiwKKyAgICAwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjYsOTUsMTA1LDExMCwKKyAgICAxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LAorICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsCisgICAgMCwxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCw5NSwxLDAsMTI0LDAsMCwKKyAgICAxMDYsMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LAorICAgIDUsMCw2MCwxMDAsMCwwLDgzLDQxLDIsNzgsODQsNDEsNiwxMTQsMjA5LDAsCisgICAgMCwwLDIxOCwxMyw5NSwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwNSwxMTAsCisgICAgMTAzLDExNCwyMDgsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDE2OSwwLDAsMCwKKyAgICAxMTQsNjcsMCwwLDAsNDEsMSwxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDk4LDAsMCwwLAorICAgIDE5MiwyLDAsMCwxMTUsNCwwLDAsMCwwLDQsMTIsMSwxMjIsMjcsOTUsCisgICAgMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLAorICAgIDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLAorICAgIDAsMCwwLDMsMCwwLDAsMTcsMCwwLDAsNzEsMCwwLDAsMTE1LAorICAgIDEyMSwwLDAsMCwxMjIsMTAxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwyLDAsCisgICAgMTE2LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCwxMjQsMSwwLDY4LAorICAgIDEzMSwxLDAsMTMxLDEsMCwxMTQsNzgsMCwxMjEsMTcsMCwxMTYsMiwwLDEwNiwKKyAgICAzLDAsMTI0LDIsMCwxMDYsNCwwLDYxLDg3LDExMywxMDAsMCw0LDExNiw1LAorICAgIDAsMTA3LDEwLDAsMTE0LDc0LDAsMSwxLDEsODksMTEzLDEwMCwwLDg4LDExMCwKKyAgICAyMiwwLDExNiw2LDAsMTAwLDMsMCwxMjQsMiwwLDEwNiw0LDAsMTI0LDIsCisgICAgMCwxMDYsNywwLDEzMSwzLDAsMSw4NywxMDAsMCwwLDEwMCw0LDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDk1LDgsMCw4OCwxMDAsMCwwLDgzLDQxLDUsNzgsCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsCisgICAgMCwxMTUsMCwwLDAsMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwKKyAgICAxMjUsMSwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOSwwLDg2LDEsMTEzLDMsCisgICAgMCwxMDAsMCwwLDgzLDQxLDEsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsCisgICAgMjIsMCwwLDAsOTAsMyw5NywxMTQsMTAzLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDI1MCw5LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsCisgICAgMTEyLDExNCw2MiwyMDIsMiwwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiw0NSwKKyAgICA5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwKKyAgICAxMjEsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsCisgICAgMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTIyLDE4LDEwNSwKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEyMywzMywxMTQsMTI1LDMyLDM1LDMyLDEyMywzMywxMTQsCisgICAgMTI1LDcwLDQxLDksMTE0LDIwOSwwLDAsMCwyMTgsMyw5NywxMTAsMTIxLDExNCw3LAorICAgIDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxMDQsMCwKKyAgICAwLDAsMTE0LDE0NiwwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyMTAsMCwwLAorICAgIDAsNDEsMywxMTQsNzgsMCwwLDAsMTE0LDk5LDAsMCwwLDExNCwxNzIsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDEwMSwwLDAsMCwxOTksMiwwLDAsMTE1LDE4LDAsMCwwLDAsCisgICAgMSwzLDEsOSwxLDI1LDEsMywxLDE3LDEsMTMsMSw4LDIsMjYsCisgICAgMiwxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsCisgICAgMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MSw2LAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA3OSwwLDAsMCwxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMjA3LDAsMCwwLDE4NiwyLDAsMCwxMTUsNiwwLDAsMCwKKyAgICAxMiwyLDEyLDQsMTIsNywxMTQsMjA3LDAsMCwwLDk5LDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDgsMCwwLDAsNjQsMCwwLDAsCisgICAgMTE1LDE1MSwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsCisgICAgMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwKKyAgICAxMDAsMywwLDEwMCw1LDAsMTAwLDMsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLAorICAgIDAsMyw5MCw0LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNSwKKyAgICAwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsNiwwLDEwMSw3LDAsCisgICAgMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsCisgICAgOCwwLDEwNiw5LDAsMTAwLDE0LDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwKKyAgICAwLDkwLDgsMCwxMDEsNywwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsCisgICAgMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDE3LDAsMTAwLDE4LDAsMTMyLAorICAgIDAsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDMsMCw4Myw0MSwxOSwyMTgsMTAsCisgICAgNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDk3LDIwOCw1LDAsMCw4NCwKKyAgICAxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCwKKyAgICAzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTcsCisgICAgMTE1LDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsNjUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LAorICAgIDMyLDExNSwxMTIsMTAxLDk5LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDUsMTEwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsMzIsOTcsOTgsMTExLDExNywxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNDYsMzIsMzIsNzAsMTExLDExNCwxMCwzMiwzMiwzMiwzMiwxMDAsCisgICAgOTcsMTE2LDk3LDMyLDk3LDExNSwxMTUsMTExLDk5LDEwNSw5NywxMTYsMTAxLDEwMCwzMiwxMTksCisgICAgMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsCisgICAgMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDQ0LDMyLDExNywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDk2LDExMCw5NywxMDksMTAxLDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgOTcsOTgsMTE1LDExMSwxMDgsMTE3LDExNiwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwzMiw5NiwxMDgsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLAorICAgIDExOSwxMDQsMTAxLDExMCwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwzMiw5NiwxMTIsOTcsMTE0LDEwMSwxMTAsCisgICAgMTE2LDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLAorICAgIDEwMiwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwKKyAgICAxMDUsMTEwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwKKyAgICAxMDUsMTE1LDMyLDEwMCwxMDEsMTE0LDEwNSwxMTgsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsCisgICAgMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTYsMzIsMTAwLDEwMSwxMTYsMTAxLAorICAgIDExNCwxMDksMTA1LDExMCwxMDEsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsCisgICAgMTAxLDEwMCwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTExLDExNCwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMTAsMTExLDExNiw0NiwzMiwzMiw3OSwxMTAsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE1LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTAyLAorICAgIDEwOCwxMDEsOTksMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDk2LDk1LAorICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsCisgICAgMTE2LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwKKyAgICA5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LAorICAgIDk5LDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNywxMTUsMTAxLDEwMCwzMiwKKyAgICA5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTE0LAorICAgIDExMSwxMDksMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsCisgICAgMTA4LDExMSw5NywxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsCisgICAgMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTEwLDEwMiwxMTEsMTE0LDEwOSw5NywKKyAgICAxMTYsMTA1LDExMSwxMTAsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsCisgICAgMTAxLDQ2LDMyLDMyLDg3LDEwNCwxMDEsMTEwLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LAorICAgIDEwMSwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDExNSwxMDEsMTE2LDQ0LDMyLDExMSwxMTQsCisgICAgMTA1LDEwMywxMDUsMTEwLDMyLDExOSwxMDUsMTA4LDEwOCwzMiwxMDksOTcsMTE2LDk5LDEwNCw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMDQsOTcsMTE1LDk1LDEwOCwxMTEsOTksOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDk2LDMyLDEwNSwxMTAsMTAwLDEwNSw5OSw5NywxMTYsMTAxLDExNSwzMiwxMTYsCisgICAgMTA0LDk3LDExNiwzMiw5NywzMiwxMTUsMTEyLDEwMSw5OSwzOSwxMTUsMzIsMzQsMTExLDExNCwKKyAgICAxMDUsMTAzLDEwNSwxMTAsMzQsMzIsMTE0LDEwMSwxMDIsMTA4LDEwMSw5OSwxMTYsMTE1LDMyLDk3LAorICAgIDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDEwLDMyLDMyLDMyLDMyLDg3LAorICAgIDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDUsMTE1LDMyLDg0LDExNCwxMTcsMTAxLAorICAgIDQ0LDMyLDk2LDk1LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSw5NSw5NiwzMiw5NywxMTYsMTE2LAorICAgIDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDk2LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLAorICAgIDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTA1LDEwMiwzMiw5NywxMTAsMTIxLDQ2LDMyLAorICAgIDMyLDczLDExNiwxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsCisgICAgMTEwLDEwMCwxMTUsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiw5Niw5NSw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDEwMCw5NSw5NSw5NiwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwKKyAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LAorICAgIDExMSwxMTAsMTE1LDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LAorICAgIDEwMSwxMTAsOTksMTAxLDMyLDExMSwxMDIsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsCisgICAgMTE0LDEwNSwxMDEsMTE1LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE1LDEwMSw5NywxMTQsCisgICAgOTksMTA0LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLAorICAgIDEwMywzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwzMiwzMiw3MywKKyAgICAxMDIsMzIsMTE1LDEwMSwxMTYsNDQsMzIsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDEwLDMyLDMyLDMyLDMyLAorICAgIDg0LDExNCwxMTcsMTAxLDQ1LDQ1LDk3LDExMCwxMDAsMzIsNzAsOTcsMTA4LDExNSwxMDEsMzIsCisgICAgMTExLDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgODAsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE1LDEwNSwxMDksCisgICAgMTEyLDEwOCwxMjEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LAorICAgIDMyLDQwLDEwOSw5NywxMjEsNDEsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExNyw5OCwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDExNSwxMTIsCisgICAgMTAxLDk5LDEwLDMyLDMyLDMyLDMyLDEwNCw5NywxMTUsMzIsOTcsMzIsMTEwLDExMSwxMTAsCisgICAgNDUsNzgsMTExLDExMCwxMDEsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTAsMzIsOTYsCisgICAgMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCisgICAgOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDk2LDQ0LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDExNiwKKyAgICAxMDEsMTA5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsCisgICAgMTAyLDExNCwxMTEsMTA5LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLDk3LDExNSwKKyAgICAzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDc5LDExMCwxMDgsMTIxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwzMiw0MCwxMTUsMTAxLAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk3LDk4LDk5LDQ2LAorICAgIDc3LDEwMSwxMTYsOTcsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDk3LAorICAgIDExMCwxMDAsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKKyAgICA0Niw5Nyw5OCw5OSw0Niw4MCw5NywxMTYsMTA0LDY5LDExMCwxMTYsMTE0LDEyMSw3MCwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDQxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDEwOSwxMTEsMTAwLAorICAgIDEwNSwxMDIsMTIxLDMyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSwzMiwxMDUsCisgICAgMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMjE4LAorICAgIDYsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsNzgsMjE4LDEyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgOTUsMTE1LDExNiw5NywxMTYsMTAxLDIxOCwxMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSw5OSwzLDAsMCwwLDMsMCwwLDAsNiwwLDAsMCwyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSw3OSwwLDAsMCwxMjQsMSwwLDEyNCwKKyAgICAwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTI0LDMsCisgICAgMCwxMjQsMCwwLDk1LDIsMCwxMjQsNCwwLDEyNCwwLDAsOTUsMywwLAorICAgIDEyNCw1LDAsMTE0LDQ4LDAsMTAzLDAsMCwxMTAsMywwLDEwMCwwLDAsMTI0LAorICAgIDAsMCw5NSw0LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwKKyAgICAwLDEyNCwwLDAsOTUsNiwwLDEwMCwwLDAsODMsNDEsMiw3OCw3MCw0MSwKKyAgICA3LDExNCw2NywwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyMTQsMCwwLDAsCisgICAgMTE0LDIxNSwwLDAsMCwyMTgsMjYsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsCisgICAgMTE1LDIxOCwxMyw5NSwxMTUsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsOTcsMTE2LDExNiwxMTQsCisgICAgMjE4LDcsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsNDEsNiwxMTQsNzgsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDIxNCwwLDAsMCwxMTQsCisgICAgMjE1LDAsMCwwLDExNCwyMTYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc5LDAsMCwwLDI1MCwyLDAsCisgICAgMCwxMTUsMTQsMCwwLDAsMCwyLDksMSw5LDEsOSwxLDksMSwKKyAgICAyMSwzLDksMSwxMjIsMTksNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LAorICAgIDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwxNTMsCisgICAgMCwwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsCisgICAgMSwwLDEwMCwyLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwyLDAsMTMxLDEsCisgICAgMCwxMDMsMiwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMywwLDEwMCwwLDAsCisgICAgMTA3LDksMCwxMTQsNzksMCwxMjQsMSwwLDEwNiw0LDAsMTAwLDMsMCwxMDYsCisgICAgMCwwLDEyNCwwLDAsMTA2LDMsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMTAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDUsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEyMiwKKyAgICAwLDEyNCwxLDAsMTA2LDQsMCwxMDAsNCwwLDEwNiwwLDAsMTI0LDAsMCwKKyAgICAxMDYsNSwwLDEzMSwxLDAsMTMxLDEsMCwxLDExMCwwLDAsMTAwLDUsMCwKKyAgICAxMDYsMCwwLDEyNCwwLDAsMTA2LDYsMCwxMDYsNywwLDEwMCw2LDAsMTA2LAorICAgIDgsMCwxMjQsMSwwLDEzMSwxLDAsMTMxLDIsMCw4Myw0MSw3LDc4LDEyMiwKKyAgICA5LDExMCw5NywxMDksMTAxLDYxLDEyMywzMywxMTQsMTI1LDEyMiwxMSwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDYxLDEyMywzMywxMTQsMTI1LDEyMiwxMSwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCw2MSwKKyAgICAxMjMsMzMsMTE0LDEyNSwxMjIsMjksMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKKyAgICAxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LAorICAgIDYxLDEyMywxMjUsMTIyLDYsMTIzLDEyNSw0MCwxMjMsMTI1LDQxLDEyMiwyLDQ0LDMyLDQxLAorICAgIDksMTE0LDQ3LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMTYzLDAsMCwwLAorICAgIDExNCwyMTQsMCwwLDAsMjE4LDYsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTQsMjE3LDAsCisgICAgMCwwLDIxOCw5LDk1LDk1LDk5LDEwOCw5NywxMTUsMTE1LDk1LDk1LDExNCw1NywwLAorICAgIDAsMCwxMTQsMjYsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDk5LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw5MCwwLDAsMCw2LDMsMCwwLDExNSwxNiwwLDAsMCwKKyAgICAwLDEsMTUsMSwyMSwxLDE1LDEsMjgsMSwxNSwxLDYsMSwyMiwxLAorICAgIDEyMiwxOSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsOTUsOTUsMTE0LAorICAgIDEwMSwxMTIsMTE0LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsCisgICAgMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwxNDUsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNSwyLDAsMTIxLDEwNywwLDEyNCwwLDAsMTA2LDEsCisgICAgMCwxMjQsMSwwLDEwNiwxLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwKKyAgICAxMDYsMiwwLDEyNCwxLDAsMTA2LDIsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsCisgICAgMCwwLDEwNiwzLDAsMTI0LDEsMCwxMDYsMywwLDEwNywyLDAsMTExLDExNCwKKyAgICAwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMCwwLDEwNywyLDAsMTExLDExNCwwLAorICAgIDEyNCwwLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiw0LDAsMTA3LDIsMCwxMTEsCisgICAgMTE0LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwxLDAsMTA2LDUsMCwxMDcsMiwKKyAgICAwLDgzLDg3LDExMCwyMiwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMTQwLDAsCisgICAgMSwxLDEsMTAwLDEsMCw4Myw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsCisgICAgNDEsMiw3OCw3MCw0MSw3LDExNCwyMTcsMCwwLDAsMTE0LDY3LDAsMCwwLAorICAgIDExNCwxNjMsMCwwLDAsMTE0LDIxNCwwLDAsMCwyMTgsNiw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDEwMCwyMTgsMTIsMTA0LDk3LDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwKKyAgICAxMTQsMjA0LDAsMCwwLDQxLDMsMTE0LDc4LDAsMCwwLDkwLDUsMTExLDExNiwKKyAgICAxMDQsMTAxLDExNCw5MCw0LDExNSwxMDksMTE1LDEwOCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNiw5NSw5NSwxMDEsMTEzLDk1LDk1LAorICAgIDE2LDMsMCwwLDExNSwyMCwwLDAsMCwwLDEsOSwxLDMsMSwxOCwKKyAgICAxLDE4LDEsMTgsMSwxNSwxLDE4LDEsMjAsMSwxMywxLDEyMiwxNyw3NywKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsOTUsOTUsMTAxLDExMyw5NSw5NSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMiwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMTU4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMDAsMCwwLDEwNyw4LDAsMTE0LDE1MSwwLDEyNCwwLDAsMTA2LDEsMCwxMDAsCisgICAgMCwwLDEwNyw5LDAsMTE0LDE1MSwwLDEyNCwwLDAsMTA2LDIsMCwxMTQsMTUxLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDExNiw0LDAsMTE2LDUsMCwxMzEsMSwwLDEzMSwxLDAsMTE0LDExMiwwLDEyMSwKKyAgICAxOSwwLDExNiw2LDAsMTI0LDEsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMCwKKyAgICAwLDg3LDExMywxNDUsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDEwOCwwLDEsCisgICAgMSwxLDg5LDExMywxNDUsMCw4OCwxMTMsMTQ4LDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDExNiw0LDAsMTE2LDgsMCwxMzEsMSwwLDEzMSwxLDAsMTE0LDE0OCwwLDEyNCwKKyAgICAxLDAsMTI0LDAsMCw5NSwwLDAsMTEzLDE0OCwwLDExMywxNTEsMCwxMTAsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCw4Myw0MSwxLDc4LDQxLDksMTE0LDIxOSwwLAorICAgIDAsMCwxMTQsMjE0LDAsMCwwLDExNCwyMTgsMCwwLDAsMjE4LDgsMTAxLDExMCwKKyAgICAxMDAsMTE1LDExOSwxMDUsMTE2LDEwNCwyMTgsNSwxMTYsMTE3LDExMiwxMDgsMTAxLDExNCwxMjgsMCwKKyAgICAwLDAsMTE0LDEyNiwwLDAsMCwxMTQsMTE4LDAsMCwwLDIxOCwxNyw2Niw4OSwKKyAgICA4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MSwKKyAgICAyLDExNCw3OCwwLDAsMCwxMTQsMTI1LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMjIsMCwwLDAsMjgsCisgICAgMywwLDAsMTE1LDIyLDAsMCwwLDAsMiwxNSwxLDI0LDEsOSwxLAorICAgIDIxLDEsMywxLDE5LDEsMTMsMSw4LDEsMjEsMSwxOCwxLDEyMiwxNywKKyAgICA3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsOTksOTcsOTksMTA0LDEwMSwKKyAgICAxMDAsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDEsMCwxMjQsMCwKKyAgICAwLDk1LDAsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMSwxMTQsMjE5LDAsCisgICAgMCwwLDQxLDIsMTE0LDc4LDAsMCwwLDExNCwyMjIsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyMiwwLAorICAgIDAsMCw0MiwzLDAsMCwxMTUsMiwwLDAsMCwwLDIsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNDYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsCisgICAgMTA3LDgsMCwxMTQsMzUsMCwxMjQsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMDAsCisgICAgMiwwLDEzMSwxLDAsMTAwLDMsMCwyNSw4MywxMjQsMCwwLDEwNiwxLDAsCisgICAgODMsMTAwLDEsMCw4Myw0MSw0LDEyMiwzMiw4NCwxMDQsMTAxLDMyLDExMCw5NywxMDksCisgICAgMTAxLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksCisgICAgMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDYsNzgsMTE0LDExMCwwLDAsMCwxMTQsCisgICAgNzEsMCwwLDAsNDEsMywxMTQsMjE3LDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsMzIsMCwwLDAsNDEsMSwxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDYsMTEyLDk3LDExNCwKKyAgICAxMDEsMTEwLDExNiw0NiwzLDAsMCwxMTUsNiwwLDAsMCwwLDMsMTUsMSwKKyAgICAyMCwyLDEyMiwxNyw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsMTEyLAorICAgIDk3LDExNCwxMDEsMTEwLDExNiw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAorICAgIDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCw4Myw0MSwxLDc4LDQxLDEsMTE0LDIxOCwwLDAsMCwKKyAgICA0MSwxLDExNCw3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsMjIzLDAsMCwwLDU0LDMsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsMiwxMjIsMjMsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsCisgICAgMTAxLDk5LDQ2LDEwNCw5NywxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsNDEsCisgICAgMTIsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDU5LDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsOTAsMCwwLDAsMTE0LAorICAgIDIyNCwwLDAsMCwyMTgsOCwxMTIsMTE0LDExMSwxMTIsMTAxLDExNCwxMTYsMTIxLDExNCwyMjIsCisgICAgMCwwLDAsMjE4LDYsMTE1LDEwMSwxMTYsMTE2LDEwMSwxMTQsMTE0LDIyOCwwLDAsMCwKKyAgICAxMTQsMjIzLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTMsMCwwLDAsMjEzLDIsCisgICAgMCwwLDExNSwxOCwwLDAsMCwxMiwzNSw2LDIsMTUsMSwxNSwxMSwxMiwKKyAgICAxMCwxMiwxMiwxOCwxNCwyMSw0LDE4LDgsMTE0LDIxMywwLDAsMCwxMTQsMjE0LAorICAgIDAsMCwwLDExNCwyMTYsMCwwLDAsOTksMiwwLDAsMCwyLDAsMCwKKyAgICAwLDUsMCwwLDAsMTUsMCwwLDAsNjcsMCwwLDAsMTE1LDE5MywwLAorICAgIDAsMCwxMTYsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDExNCw4MywKKyAgICAwLDEyNCwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw0MywwLDExNiwxLDAsCisgICAgMTI0LDAsMCwxMDAsMywwLDEyNCwxLDAsMTMxLDEsMSw4MywxMjQsMywwLAorICAgIDExNCw1NSwwLDEwMywwLDAsMTEwLDMsMCwxMDAsMiwwLDEyNSw0LDAsMTE2LAorICAgIDEsMCwxMjQsMCwwLDEwMCwzLDAsMTI0LDEsMCwxMDAsNCwwLDEyNCw0LAorICAgIDAsMTMxLDEsMiw4MywxMjQsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMTY4LAorICAgIDAsMTE2LDAsMCwxMjQsMSwwLDEwMCw1LDAsMTMxLDIsMCwxMTQsMTU5LDAsCisgICAgMTIxLDE5LDAsMTI0LDEsMCwxMDYsMiwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsCisgICAgMywwLDg3LDExMywxNjUsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDE1NSwwLAorICAgIDEsMSwxLDEwMCwyLDAsMTI1LDMsMCw4OSwxMTMsMTY1LDAsODgsMTEzLDE2OCwKKyAgICAwLDEwMCw2LDAsMTI1LDMsMCwxMTAsMCwwLDExNiw0LDAsMTI0LDAsMCwKKyAgICAxMjQsMSwwLDEwMCw3LDAsMTI0LDIsMCwxMDAsNSwwLDEyNCwzLDAsMTMxLAorICAgIDIsMiw4Myw0MSw4LDEyMiw1Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDk3LDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLDk4LDk3LDExNSwxMDEsCisgICAgMTAwLDMyLDExMSwxMTAsMzIsMTE4LDk3LDExNCwxMDUsMTExLDExNywxMTUsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMjE4LDEyLDEwMywxMDEsCisgICAgMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw3OCwxMTQsMTYzLDAsMCwwLAorICAgIDExNCwyMTcsMCwwLDAsMTE0LDIxNiwwLDAsMCw3MCwxMTQsMjE0LDAsMCwwLAorICAgIDQxLDUsMTE0LDYwLDAsMCwwLDIxOCwyMywxMTUsMTEyLDEwMSw5OSw5NSwxMDIsMTE0LAorICAgIDExMSwxMDksOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDExNCwyMTYsMCwwLDAsMTE0LDE0NywwLDAsMCwxMTQsMjEzLDAsMCwwLDQxLAorICAgIDUsMTE0LDY3LDAsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDIxNCwwLDAsMCwKKyAgICAxMTQsMjE2LDAsMCwwLDkwLDYsMTE1LDEwMSw5NywxMTQsOTksMTA0LDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNjcsMCwwLAorICAgIDAsNTksMywwLDAsMTE1LDI4LDAsMCwwLDAsMiwxNSwxLDEyLDEsCisgICAgMTYsMSwxOCwxLDE1LDEsNywyLDEyLDEsMTUsMSwzLDEsMTksMSwKKyAgICAxMywxLDE0LDMsOSwyLDExNCwxNjcsMCwwLDAsMTE0LDE2MywwLDAsMCwKKyAgICAxMTQsMjE3LDAsMCwwLDk5LDIsMCwwLDAsMiwwLDAsMCw5LDAsCisgICAgMCwwLDE5LDAsMCwwLDY3LDAsMCwwLDExNSwxMTAsMSwwLDAsMTI0LAorICAgIDEsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDc5LDAsMTAwLDIsMCwxMjUsMSwKKyAgICAwLDExNiwwLDAsMTI0LDIsMCwxMDAsMywwLDEzMSwyLDAsMTE0LDc5LDAsCisgICAgMTIxLDE5LDAsMTI0LDIsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsCisgICAgMSwwLDg3LDExMyw3NiwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNzIsMCwKKyAgICAxLDEsMSw4OSwxMTMsNzYsMCw4OCwxMTMsNzksMCwxMTAsMCwwLDExNiwzLAorICAgIDAsMTI0LDAsMCwxMjQsMiwwLDEwMCw0LDAsMTI0LDEsMCwxMzEsMiwxLAorICAgIDEyNSw0LDAsMTAwLDUsMCwxMjQsNCwwLDk1LDQsMCwxMjQsMiwwLDEwMCwKKyAgICAxLDAsMTA3LDgsMCwxMTQsMjAzLDAsMTIwLDc5LDAsMTE2LDUsMCwxMzEsMCwKKyAgICAwLDY4LDkzLDYxLDAsOTIsMiwwLDEyNSw1LDAsMTI1LDYsMCwxMjQsMSwKKyAgICAwLDEwNiw2LDAsMTE2LDcsMCwxMjQsNiwwLDEzMSwxLDAsMTMxLDEsMCwKKyAgICAxMTQsMTMxLDAsMTI0LDUsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwxMjUsCisgICAgMiwwLDEyNCwyLDAsMTI0LDQsMCw5NSw4LDAsODAsMTEzLDEzMSwwLDExMywKKyAgICAxMzEsMCw4NywxMDAsMSwwLDgzLDExMCwwLDAsMTI0LDMsMCwxMTYsOSwwLAorICAgIDEwNyw4LDAsMTE0LDM4LDEsMTE2LDAsMCwxMjQsMiwwLDEwMCw2LDAsMTMxLAorICAgIDIsMCwxMTQsNDcsMSwxMjEsMTksMCwxMjQsMiwwLDEwNiwxMCwwLDEyNCwwLAorICAgIDAsMTMxLDEsMCwxMjUsNywwLDg3LDExMCwxOCwwLDQsMTE2LDIsMCwxMDcsCisgICAgMTAsMCwxMTQsMTMsMSwxLDEsMSw4OSwxMTMsMzUsMSw4OCwxMjQsNywwLAorICAgIDExNCwzNSwxLDEwMywwLDAsMTI0LDQsMCw5NSwxMSwwLDExMywzNSwxLDExMywKKyAgICA0NywxLDExMCw5LDAsMTI0LDMsMCwxMjQsNCwwLDk1LDExLDAsMTI0LDQsCisgICAgMCwxMDYsMTEsMCwxMDMsMCwwLDEwNywyLDAsMTE0LDEwNiwxLDEyNCwxLDAsCisgICAgMTE0LDEwNiwxLDExNiwxMiwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsNywwLDI1LAorICAgIDEyNSw4LDAsMTI0LDQsMCwxMDYsMTEsMCwxMDYsMTMsMCwxMjQsOCwwLDEzMSwKKyAgICAxLDAsMSwxMTMsMTA2LDEsMTEwLDAsMCwxMjQsNCwwLDgzLDQxLDgsOTcsCisgICAgNjEsMSwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw5NywzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsCisgICAgMTEwLDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLAorICAgIDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMTEsMzIsMTA1LDExMCwxMDAsMTA1LDk5LAorICAgIDk3LDExNiwxMDEsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCisgICAgNDQsMzIsMTE1LDEwMSwxMTYsMTAsMzIsMzIsMzIsMzIsMTE1LDExNyw5OCwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMzIsOTcsMzIsMTA4LDEwNSwxMTUsMTE2LDMyLDExMSwKKyAgICAxMDIsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMTIsOTcsMTE2LDEwNCwKKyAgICAxMTUsNDYsMzIsMzIsNjUsMTEwLDEwLDMyLDMyLDMyLDMyLDEwMSwxMDksMTEyLDExNiwxMjEsCisgICAgMzIsMTA4LDEwNSwxMTUsMTE2LDMyLDEwNSwxMTUsMzIsMTE1LDExNywxMDIsMTAyLDEwNSw5OSwxMDUsCisgICAgMTAxLDExMCwxMTYsNDQsMzIsMTE2LDEwNCwxMTEsMTE3LDEwMywxMDQsMzIsMTA1LDExNiwxMTUsMzIsCisgICAgMTEwLDExMSwxMTYsMzIsMTExLDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsMzIsMTE3LDExNSwKKyAgICAxMDEsMTAyLDExNywxMDgsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTA5LAorICAgIDExNywxMTUsMTE2LDMyLDExNiw5NywxMDcsMTAxLDMyLDk3LDMyLDExNSwxMTIsMTAxLDk5LDMyLAorICAgIDk3LDExNSwzMiwxMDUsMTE2LDExNSwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsOTUsOTUsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDk1LDQwLDQxLDMyLDk3LDExNCwxMDMsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsNzgsMTIyLDksNjAsMTE3LDExMCwxMDcsMTEwLDExMSwxMTksMTEwLDYyLDExNCwyMzEsMCwKKyAgICAwLDAsMTE0LDIxNCwwLDAsMCw4NCwxMTQsMjE2LDAsMCwwLDExNCw3MSwwLAorICAgIDAsMCw0MSwxNCwxMTQsNjAsMCwwLDAsMTE0LDIzMSwwLDAsMCwxMTQsMTQ3LAorICAgIDAsMCwwLDExNCwyMTMsMCwwLDAsMTE0LDIxOCwwLDAsMCwyMTgsMjcsOTUsCisgICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNCwyMjUsMCwwLDAsMTE0LAorICAgIDIyNiwwLDAsMCwxMTQsMTYzLDAsMCwwLDIxOCw5LDk1LDgwLDc5LDgwLDg1LAorICAgIDc2LDY1LDg0LDY5LDExNCwyMTYsMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMzgsCisgICAgMCwwLDAsMTE0LDIyMCwwLDAsMCw0MSw5LDExNCw2NywwLDAsMCwyMTgsCisgICAgOCwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTQsMTYzLDAsMCwwLDExNCwyMTcsCisgICAgMCwwLDAsMTE0LDE3MiwwLDAsMCwyMTgsMTIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA5NSw5OSwxMDgsOTcsMTE1LDExNSwxMTQsMTIxLDAsMCwwLDExNCwyMTYsMCwwLDAsCisgICAgOTAsNywxMDAsMTA1LDExNCwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjMyLDAsMCwwLDg0LDMsMCwKKyAgICAwLDExNSw2MCwwLDAsMCwwLDEyLDEyLDQsNiwxLDE1LDIsMywxLAorICAgIDE5LDEsMTMsMSwxMSw4LDIxLDEsOSwzLDEyLDEsMjIsMSwyMSwxLAorICAgIDE1LDEsOSwxLDgsMiw3LDMsMTIsMiwxNSwxLDMsMSwxOSwxLAorICAgIDEzLDEsNSwyLDYsMSwxOCwyLDksMSwxNSwxLDYsMSwxNiwxLAorICAgIDIyLDIsMTE0LDIzMiwwLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsCisgICAgOCwwLDAsMCw1MywwLDAsMCw2NywwLDAsMCwxMTUsMTI0LDEsMCwKKyAgICAwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMywwLDg3LDExMCwxOCwKKyAgICAwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMzMsMCwxLDEsMSw4OSwxMTAsCisgICAgMTcsMCw4OCwxMjQsMywwLDEwMCwwLDAsMTA3LDksMCwxMTQsNTAsMCwxMjQsCisgICAgMywwLDgzLDEyNCwwLDAsMTA2LDIsMCwxMjUsNCwwLDEyNCwxLDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCwxMDgsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiwzLAorICAgIDAsMTI1LDEsMCw4NywxMTMsMTA4LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwKKyAgICAxMDQsMCwxLDEsMSw4OSwxMTMsMTA4LDAsODgsMTEwLDAsMCwxMjEsMTMsMCwKKyAgICAxMjQsMCwwLDEwNiw0LDAsMTI1LDUsMCw4NywxMTAsMjQsMCw0LDExNiwxLAorICAgIDAsMTA3LDEwLDAsMTE0LDE0NywwLDEsMSwxLDEwMCwwLDAsMTI1LDUsMCwKKyAgICA4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMjQsCisgICAgMCwxMjQsNSwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMjE1LDAsMTIxLDEzLDAsCisgICAgMTI0LDEsMCwxMDYsNSwwLDEyNSwyLDAsODcsMTEzLDIyMSwwLDQsMTE2LDEsCisgICAgMCwxMDcsMTAsMCwxMTQsMjExLDAsMSwxLDEsMTAwLDAsMCwxMjUsMiwwLAorICAgIDg5LDExMywyMjEsMCw4OCwxMTMsMjI0LDAsMTI0LDUsMCwxMjUsMiwwLDExMCwwLAorICAgIDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNiwwLDEyNSw2LDAsODcsMTEwLDI0LAorICAgIDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCw3LDEsMSwxLDEsMTAwLDAsCisgICAgMCwxMjUsNiwwLDg5LDExMCwxLDAsODgsMTIxLDE5LDAsMTE2LDcsMCwxMjQsCisgICAgMCwwLDEwNiw4LDAsMTMxLDEsMCwxMjUsNywwLDg3LDExMCwyNCwwLDQsCisgICAgMTE2LDEsMCwxMDcsMTAsMCwxMTQsNTMsMSwxLDEsMSwxMDAsMCwwLDEyNSwKKyAgICA3LDAsODksMTEwLDEsMCw4OCwxMTYsOSwwLDEyNCw0LDAsMTI0LDEsMCwKKyAgICAxMDAsMSwwLDEyNCwyLDAsMTMxLDIsMSwxMjUsMywwLDEyNCw1LDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCw5MywxLDEwMCwyLDAsMTEwLDMsMCwxMDAsMywKKyAgICAwLDEyNCwzLDAsOTUsMTAsMCwxMjQsNiwwLDEyNCwzLDAsOTUsMTEsMCwKKyAgICAxMjQsNywwLDEyNCwzLDAsOTUsMTIsMCwxMjQsMywwLDgzLDQxLDQsNzgsCisgICAgMTE0LDIxNCwwLDAsMCw3MCw4NCw0MSwxMywxMTQsMjAzLDAsMCwwLDExNCwyMDQsCisgICAgMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwxOTksMCwwLDAsMTE0LDIwNSwwLAorICAgIDAsMCw5MCw3LDk1LDc5LDgyLDczLDcxLDczLDc4LDIxOCwxMCw5NSw5NSw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDEwMCw5NSw5NSwyMTgsNCwxMDgsMTA1LDExNSwxMTYsMjE4LDgsOTUsCisgICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE0LDIxMywwLDAsMCwxMTQsMjE4LDAsMCwKKyAgICAwLDExNCwyMjIsMCwwLDAsMTE0LDIxNywwLDAsMCw0MSw4LDExNCwxNzQsMCwKKyAgICAwLDAsMTE0LDE2MywwLDAsMCwxMTQsMjE0LDAsMCwwLDExNCwxNzIsMCwwLAorICAgIDAsMTE0LDY3LDAsMCwwLDExNCwyMzUsMCwwLDAsMTE0LDIyMiwwLDAsMCwKKyAgICAxMTQsMjE3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxNyw5NSwxMTUsMTEyLDEwMSw5OSw5NSwxMDIsMTE0LDExMSwxMDksCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTQ4LDMsMCwwLDExNSw3MiwwLDAsMCwKKyAgICAwLDIsMywxLDEzLDEsMTMsMSw1LDIsMTIsMSw0LDIsOSwxLAorICAgIDEyLDEsMywxLDEzLDEsMTMsMiw4LDEsMywxLDEzLDEsMTMsMSwKKyAgICAxMSwxLDEyLDEsMTIsMSwzLDEsMTMsMSwxMywxLDE0LDIsOSwxLAorICAgIDMsMSwxMywxLDEzLDEsMTEsMSwzLDEsMTksMSwxMywxLDExLDIsCisgICAgMjEsMSwyNywxLDksMSw5LDEsMTE0LDI0MCwwLDAsMCw5OSwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDY0LDAsCisgICAgMCwwLDExNSwxNzIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCwKKyAgICA5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwKKyAgICAwLDAsOTAsNCwwLDEwMSw1LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAorICAgIDAsMTMxLDEsMCw5MCw2LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsCisgICAgOTAsNywwLDEwMCw4LDAsMTAwLDksMCwxMDAsMTAsMCwxMDAsMTEsMCwxMDAsCisgICAgMTIsMCwxMDAsMTMsMCwxMzIsMCwyLDkwLDgsMCwxMDAsMTQsMCwxMDAsMTUsCisgICAgMCwxMzIsMCwwLDkwLDksMCwxMDAsMTYsMCwxMDAsMTcsMCwxMzIsMCwwLAorICAgIDkwLDEwLDAsMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCw5MCwxMSwwLDEwMCwKKyAgICAyMCwwLDEwMCwyMSwwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjIsMCwxMDAsMjMsCisgICAgMCwxMzIsMCwwLDkwLDEzLDAsMTAwLDI0LDAsMTAwLDI1LDAsMTMyLDAsMCwKKyAgICA5MCwxNCwwLDEwMCwyNiwwLDEwMCwyNywwLDEzMiwwLDAsOTAsMTUsMCwxMDAsCisgICAgMjgsMCw4Myw0MSwyOSwxMTQsMTY4LDAsMCwwLDEyMiw3Nyw2NywxMTEsMTEwLDExOCwKKyAgICAxMDEsMTEwLDEwNSwxMDEsMTEwLDk5LDEwMSwzMiwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwzMiwKKyAgICA5NywxMTQsMTExLDExNywxMTAsMTAwLDMyLDExNSwxMTIsMTAxLDk5LDMyLDExMSw5OCwxMDYsMTAxLAorICAgIDk5LDExNiwxMTUsMzIsMTE2LDExMSwzMiwxMTIsMTE0LDExMSwxMTgsMTA1LDEwMCwxMDEsMzIsMTE1LAorICAgIDExMiwxMDEsOTksNDUsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMTAsMzIsMzIsMzIsCisgICAgMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAorICAgIDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDAsMCw4MywKKyAgICA0MSwxLDc4LDQxLDEsMTE0LDE3MiwwLDAsMCw0MSwyLDExNCw3OCwwLDAsCisgICAgMCwxMTQsMTcyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw3OSwwLDAsMCwxOTgsMywwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwxLDEyMiwyMSw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LAorICAgIDExMSwxMDAsMTE1LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsNCwwLDAsMCwxNywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTQ0LDAsMCwwLDEyMSwxMywwLDEyNCwxLDAsMTA2LDAsMCwxMjUsCisgICAgMiwwLDg3LDExMCwxMTgsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDEzMywwLAorICAgIDEsMSwxLDEyMSwxMywwLDEyNCwyLDAsMTA2LDIsMCwxMjUsMywwLDg3LAorICAgIDExMCw2NiwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMTEwLDAsMSwxLDEsCisgICAgMTE2LDMsMCwxMjQsMSwwLDEwNiw0LDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwKKyAgICAyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMDYsMCwxMTYsNSwwLDEyNCwxLAorICAgIDAsMTA2LDQsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDIsMCwxMTAsMCwwLAorICAgIDg5LDExMCwxOSwwLDg4LDExNiw1LDAsMTI0LDEsMCwxMDYsNCwwLDEyNCwzLAorICAgIDAsMTMxLDIsMCwxMjUsMiwwLDg5LDExMCwxLDAsODgsMTI0LDAsMCwxMjQsCisgICAgMiwwLDEzMSwxLDAsODMsNDEsMiwxMjIsNDEsNjcsMTE0LDEwMSw5NywxMTYsMTAxLAorICAgIDMyLDk3LDMyLDExNSwxMTIsMTAxLDk5LDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5NywzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsCisgICAgMTAxLDExNSw0Niw3OCw0MSw2LDExNCwyMDMsMCwwLDAsMTE0LDIwNCwwLDAsMCwKKyAgICAxMTQsMTk5LDAsMCwwLDIxOCwxMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsCisgICAgOTksMTE0LDU3LDAsMCwwLDExNCwxNjcsMCwwLDAsNDEsNCwyMTgsMyw5OSwKKyAgICAxMDgsMTE1LDExNCwxNzQsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsMTYzLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxMSwxMDIsMTE0LDExMSwxMDksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjAxLDMsMCwKKyAgICAwLDExNSwyMiwwLDAsMCwwLDMsMywxLDEzLDEsMTMsMSwzLDEsCisgICAgMTMsMSwxMywxLDE1LDEsMTIsMSwyNiwyLDIzLDEsMTIyLDI0LDk1LDgzLAorICAgIDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTAyLDExNCwxMTEsMTA5LDk1LAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLAorICAgIDEsMCwxMDcsOCwwLDExNCwzMCwwLDEwMCwyLDAsMTEwLDYsMCwxMjQsMSwKKyAgICAwLDEwNiwxLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDEsMCwKKyAgICAxMDcsOCwwLDExNCwxMDQsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsCisgICAgOCwwLDExNCw4MiwwLDEwMCwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLAorICAgIDAsODMsMTAwLDQsMCwxMDYsNCwwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMywKKyAgICAwLDEzMSwyLDAsODMsMTEwLDUwLDAsMTI0LDEsMCwxMDYsNSwwLDExNCwxMzIsCisgICAgMCwxMDAsNSwwLDEwNiw0LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiwyLDAsCisgICAgMTMxLDIsMCw4MywxMDAsNiwwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMSwwLAorICAgIDEyNCwxLDAsMTA2LDIsMCwxMzEsMiwwLDgzLDEwMCwxLDAsODMsNDEsNywKKyAgICAxMjIsMzgsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDExMiwKKyAgICAxMTQsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMjAxLDAsMCwwLDEyMiwxMywKKyAgICA2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMjAsNjAsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDMzLDExNCwKKyAgICAxMjUsNDEsNjIsMTIyLDIzLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMTgsNjAsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDEyNSw0MSw2MiwKKyAgICA0MSw2LDExNCwxNzIsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyMTQsMCwwLAorICAgIDAsMTE0LDE2MywwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDIyMywwLDAsMCwKKyAgICA0MSwzLDExNCw3OCwwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCw2NywwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjAwLDAsMCwwLDIxNywzLDAsMCwxMTUsMTgsMCwwLDAsMCwzLAorICAgIDksMSwzMCwxLDE1LDEsMTUsMSwxMywyLDIyLDIsOSwxLDE5LDIsCisgICAgMTIyLDI0LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDIxOCw5LDk1LDExMSwxMTgsMTAxLAorICAgIDExNCwxMTQsMTA1LDEwMCwxMDEsNzAsMjE4LDExLDk1LDEwMiwxMTEsMTE0LDk5LDEwMSw5NSwxMTAsCisgICAgOTcsMTA5LDEwMSw4NCw5OSwyLDAsMCwwLDIsMCwwLDAsNiwwLDAsCisgICAgMCw2NiwwLDAsMCw2NywwLDAsMCwxMTUsNzUsMiwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEyNSw0LDAsMTI0LDIsMCwxMTUsNDUsMCwxMjQsMywwLAorICAgIDExNSw0NSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLAorICAgIDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg1LDAsMTIxLDE2LDAsMTI0LDQsCisgICAgMCwxMDYsMiwwLDEyNCwxLDAsOTUsMywwLDg3LDExMyw4NSwwLDQsMTE2LAorICAgIDQsMCwxMDcsMTAsMCwxMTQsODEsMCwxLDEsMSw4OSwxMTMsODUsMCw4OCwKKyAgICAxMTAsMCwwLDEyNCwyLDAsMTE1LDExNSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsCisgICAgMywwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIyMSwKKyAgICAwLDEyNCw0LDAsMTA2LDUsMCwxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwKKyAgICAxMDcsOCwwLDExNCwxODQsMCwxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsCisgICAgOSwwLDExNCwxODQsMCwxMTYsNywwLDEwNiw4LDAsMTE2LDcsMCwxMzEsMSwKKyAgICAwLDEyNSw1LDAsMTI0LDQsMCwxMDYsNiwwLDEyNCw1LDAsOTUsOSwwLAorICAgIDExMywxODQsMCwxMTAsMCwwLDEyMSwxMywwLDEyNCw1LDAsMTI0LDEsMCw5NSwKKyAgICAxMCwwLDg3LDExMywyMjEsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIxNywwLAorICAgIDEsMSwxLDg5LDExMywyMjEsMCw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDI1MSwKKyAgICAwLDExNiwxLDAsMTI0LDEsMCwxMDAsNCwwLDEwMCwyLDAsMTMxLDMsMCwKKyAgICAxMDAsMiwwLDEwNyw4LDAsMTE0LDM1LDEsMTIxLDE2LDAsMTI0LDQsMCwxMDYsCisgICAgMTEsMCwxMjQsMSwwLDk1LDEyLDAsODcsMTEzLDM1LDEsNCwxMTYsNCwwLAorICAgIDEwNywxMCwwLDExNCwzMSwxLDEsMSwxLDg5LDExMywzNSwxLDg4LDExMCwwLAorICAgIDAsMTIxLDEzLDAsMTI0LDQsMCwxMjQsMSwwLDk1LDEzLDAsODcsMTEwLDE4LAorICAgIDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw2OCwxLDEsMSwxLDg5LDExMCwKKyAgICAxLDAsODgsMTI0LDIsMCwxMTUsOTksMSwxMTYsMSwwLDEyNCwxLDAsMTAwLAorICAgIDUsMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTcsCisgICAgMSwxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxNTcsMSwKKyAgICAxMjEsMTYsMCwxMjQsNCwwLDEwNiw2LDAsMTI0LDEsMCw5NSwxNCwwLDg3LAorICAgIDExMywxNTQsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDE1MCwxLDEsMSwxLAorICAgIDg5LDExMywxNTQsMSw4OCwxMTMsMTU3LDEsMTEwLDAsMCwxMjQsNCwwLDEwNiwxNSwKKyAgICAwLDExNCw3MSwyLDEyNCwyLDAsMTE1LDE5NiwxLDExNiwxLDAsMTI0LDEsMCwKKyAgICAxMDAsNiwwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LAorICAgIDIzNiwxLDEyMSwxNiwwLDEyNCw0LDAsMTA2LDE2LDAsMTI0LDEsMCw5NSwxNywKKyAgICAwLDg3LDExMywyMzYsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIzMiwxLDEsCisgICAgMSwxLDg5LDExMywyMzYsMSw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDEwLDIsCisgICAgMTE2LDEsMCwxMjQsMSwwLDEwMCw3LDAsMTAwLDIsMCwxMzEsMywwLDEwMCwKKyAgICAyLDAsMTA3LDgsMCwxMTQsNzEsMiwxMjQsNCwwLDEwNiwxOCwwLDEwMCwyLAorICAgIDAsMTA3LDksMCwxMTQsNjgsMiwxMjEsMTYsMCwxMjQsNCwwLDEwNiwxOCwwLAorICAgIDEyNCwxLDAsOTUsMTksMCw4NywxMTMsNjUsMiw0LDExNiw0LDAsMTA3LDEwLAorICAgIDAsMTE0LDYxLDIsMSwxLDEsODksMTEzLDY1LDIsODgsMTEzLDY4LDIsMTEzLAorICAgIDcxLDIsMTEwLDAsMCwxMDAsMiwwLDgzLDQxLDgsOTcsMjksMiwwLDAsCisgICAgODMsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsCisgICAgMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLAorICAgIDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NSwxMTQsMTAxLDEwOCw5NywxMTYsMTAxLDEwMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwKKyAgICAxMDEsMTE1LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsNDYsMzIsCisgICAgMzIsNzIsMTAxLDExNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDExNSwKKyAgICAzMiwxMDQsMTExLDExOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTYsCisgICAgMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwOSw5NywxMTIsMzIsMTExLDExMCwxMTYsCisgICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDU4LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExMCw5NywxMDksMTAxLAorICAgIDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMCw5NywxMDksCisgICAgMTAxLDk1LDk1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LAorICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDYsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAorICAgIDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMiw5Nyw5OSwKKyAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsCisgICAgMTEyLDEwMSw5OSwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwKKyAgICAxMTUsMTEyLDEwMSw5OSw5NSw5NSwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzMiw0NSw2MiwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsCisgICAgMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTUsMTAxLDExNiw5NSwxMDIsMTA1LAorICAgIDEwOCwxMDEsOTcsMTE2LDExNiwxMTQsMzIsMTA1LDExNSwzMiwxMTYsMTE0LDExNywxMDEsNDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsOTksOTcsOTksCisgICAgMTA0LDEwMSwxMDAsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsCisgICAgOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMzIsNDAsMTA1LDEwMiwzMiw5NSw5NSwxMDIsCisgICAgMTA1LDEwOCwxMDEsOTUsOTUsMzIsOTcsMTA4LDExNSwxMTEsMzIsMTE1LDEwMSwxMTYsNDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTE1LDExNyw5OCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSwKKyAgICA5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQ2LDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDQwLDEwNSwxMDIsMzIsMTE1LAorICAgIDEwMSwxMTYsNDEsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDU3LDAsCisgICAgMCwwLDc4LDExNCwxOTksMCwwLDAsMjE4LDExLDk1LDk1LDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSw5NSw5NSwxMTQsMjM5LDAsMCwwLDExNCwyMDUsMCwwLDAsMTE0LAorICAgIDIzNywwLDAsMCw0MSwyMCwxMTQsMTcyLDAsMCwwLDExNCw2MiwwLDAsMCwKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwyMDQsMCwwLDAsMTE0LAorICAgIDE2MywwLDAsMCwxMTQsMjE3LDAsMCwwLDIxOCwxNiw5NSw3OCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwyMTgsNyw5NSw5NSwxMTAsCisgICAgMTAxLDExOSw5NSw5NSwyMTgsNSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTk5LDAsMCwwLAorICAgIDExNCwyMjgsMCwwLDAsMTE0LDI0NiwwLDAsMCwxMTQsMjAzLDAsMCwwLDExNCwKKyAgICAyMzksMCwwLDAsMTE0LDIyMywwLDAsMCwxMTQsMjE0LDAsMCwwLDExNCwyMDUsCisgICAgMCwwLDAsMTE0LDIyMiwwLDAsMCwxMTQsMjM3LDAsMCwwLDQxLDYsMTE0LAorICAgIDc4LDAsMCwwLDExNCwxNzQsMCwwLDAsMTE0LDI0NCwwLDAsMCwxMTQsMjQ1LAorICAgIDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDE2MywwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSwyMzMsCisgICAgMywwLDAsMTE1LDg4LDAsMCwwLDAsMTcsOSw2LDEyLDEsMjQsMSwKKyAgICAzLDEsMTYsMSwxMywxLDgsMywzMCwxLDksMSwxMiwyLDE1LDEsCisgICAgMTUsMSwxOCwxLDMsMSwxMywxLDEzLDEsOCwzLDMwLDEsMywxLAorICAgIDE2LDEsMTMsMSw4LDMsMywxLDEzLDEsMTMsMSw1LDMsMzAsMSwKKyAgICAxNSwxLDMsMSwxNiwxLDEzLDEsMTEsMiw5LDIsMzAsMSwzLDEsCisgICAgMTYsMSwxMywxLDgsMywzMCwxLDE1LDEsMywxLDE2LDEsMTMsMSwKKyAgICAxMjIsMzAsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDUsCisgICAgMTEwLDEwNSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsMTE1LAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTI1LDEsMCwxMTYsMSwwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMSwwLDEzMSwKKyAgICAyLDAsMTE0LDQ4LDAsMTI0LDEsMCwxMDYsMiwwLDEwNiwzLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDEyNSwyLDAsMTEwLDYsMCwxMDAsMiwwLDEyNSwyLDAsCisgICAgMTI0LDIsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg0LDAsMTE2LDQsMCwxMjQsCisgICAgMSwwLDEwNiw1LDAsMTMxLDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsNiwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLDAsODMsNDEsCisgICAgMywxMjIsMTUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsCisgICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ1LDExNCwxMDEsMTA4LDk3LDExNiwxMDEsMTAwLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LAorICAgIDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiw5NywxMDgsMTE1LDExMSwzMiwxMTUsMTAxLDExNiwzMiwKKyAgICAxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsOTcsMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTE4LDk3LDEwOCwKKyAgICAxMTcsMTAxLDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCisgICAgOTksNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMjE4LDEzLDk5LDExNCwKKyAgICAxMDEsOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSw3LDExNCwxNzIsCisgICAgMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDI1MSwwLAorICAgIDAsMCwxMTQsNjgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNTAsMCwwLAorICAgIDAsNDEsMywxMTQsNzgsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsMTc0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCw2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw1Nyw0LDAsMCwxMTUsMTYsMCwKKyAgICAwLDAsMCw3LDksMiwxOCwzLDIxLDIsNiwxLDEyLDQsMTgsMSwKKyAgICAxMywxLDEyMiwxOSw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LAorICAgIDQ2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCisgICAgMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsCisgICAgMTMxLDEsMCwxLDEwMCwxLDAsODMsNDEsMiwxMjIsMTg5LDY4LDExMSwzMiwxMDEsCisgICAgMTE4LDEwMSwxMTQsMTIxLDExNiwxMDQsMTA1LDExMCwxMDMsMzIsMTEwLDEwMSw5OSwxMDEsMTE1LDExNSwKKyAgICA5NywxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAorICAgIDEwMSwzMiwxMTEsMTAyLDMyLDk2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk2LDMyLDEwNSwxMTUsCisgICAgMzIsMTE3LDExNSwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsOTcsMTE0LAorICAgIDEwMywxMDEsMTE2LDMyLDExMSwxMDIsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTExLDExMCwKKyAgICA0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwzOSwxMTUsMzIsOTYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNDAsNDEsOTYsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMywxMTQsMTcyLDAsMCwKKyAgICAwLDExNCwxNjMsMCwwLDAsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDQxLDIsMTE0LDc4LDAsMCwwLDExNCwxNzQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDUsCisgICAgOTUsMTAxLDEyMCwxMDEsOTksODAsNCwwLDAsMTE1LDIsMCwwLDAsMCw3LAorICAgIDEyMiwxOCw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LAorICAgIDEwMSwxMjAsMTAxLDk5LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwKKyAgICAwLDExLDAsMCwwLDY3LDAsMCwwLDExNSwxNywxLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDEsMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwKKyAgICAxMzEsMCwwLDEsMTE2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTQzLDIyNiwwLAorICAgIDEsMTE2LDUsMCwxMDYsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLAorICAgIDEyNCwxLDAsMTA3LDksMCwxMTQsOTUsMCwxMDAsMSwwLDEwNiw4LDAsMTI0LAorICAgIDIsMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDksMCwxMjQsMywwLDEwMCwyLAorICAgIDAsMTI0LDIsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTA2LDEwLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxODEsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsMTA2LDExLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxNTgsCisgICAgMCwxMTYsOSwwLDEwMCw0LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTA2LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwKKyAgICAxMiwwLDEyNCwxLDAsMTAwLDUsMCwxMDAsNiwwLDEzMSwxLDEsMSwxMjQsCisgICAgMSwwLDgzLDEyNCwwLDAsMTA2LDEyLDAsMTI0LDEsMCwxMDAsNSwwLDEwMCwKKyAgICA2LDAsMTMxLDEsMSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsCisgICAgMTAsMCwxMDAsNywwLDEzMSwyLDAsMTE1LDI0MywwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMDYsMTAsMCwxMDYsMTQsMCwxMjQsMiwwLDEzMSwxLDAsMSwxMTAsMTMsCisgICAgMCwxMjQsMCwwLDEwNiwxNSwwLDEyNCwxLDAsMTMxLDEsMCwxLDg3LDEwMCwKKyAgICAzLDAsODEsODgsMTE2LDUsMCwxMDYsNiwwLDEyNCwyLDAsMjUsODMsNDEsCisgICAgOCwxMjIsNTEsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsCisgICAgMTEyLDEwMSw5OSwzMiwxMDUsMTEwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwKKyAgICAxMTAsMTAzLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTAsOTcsMTA5LDEwMSwKKyAgICAxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMjIsMzAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLAorICAgIDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE0LDY3LDAsMCwwLDc4LDEyMiwxNCwxMDksMTA1LAorICAgIDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMjQ0LDAsMCwKKyAgICAwLDg0LDExNCwyNTMsMCwwLDAsNDEsMTYsMTE0LDE3MiwwLDAsMCwxMTQsNjcsCisgICAgMCwwLDAsMTE0LDk2LDAsMCwwLDIxOCwxMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNCw5MiwwLDAsMCwxMTQsNywwLDAsMCwKKyAgICAxMTQsMTY5LDAsMCwwLDExNCw4MiwwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LAorICAgIDE0NywwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDI1MCwKKyAgICAwLDAsMCwxMTQsNjAsMCwwLDAsMjE4LDExLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNCwyNTQsMCwwLDAsNDEsNCwxMTQsNzgsMCwwLAorICAgIDAsMTE0LDE3NCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE2NSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTcwLDAsMCwwLDkwLDQsMCwwLDExNSwzMiwwLDAsMCwwLDIsMTIsCisgICAgMSwxMCwxLDEzLDEsMjQsMSwxNSwxLDIxLDEsMTgsMSwxOCwxLDI3LAorICAgIDIsMTksMSw0LDEsMTksMSwyMSwyLDIyLDIsMTksMSwxMjIsMTcsOTUsCisgICAgODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDEsMTIwLDEwMSw5OSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwyNywwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMjQsMSwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDYsCisgICAgMywwLDEzMSwxLDAsMSwxMTYsNCwwLDEwNiw1LDAsMTI0LDEsMCwxMDYsCisgICAgMywwLDI1LDEyNSwyLDAsMTE2LDYsMCwxMjQsMiwwLDEwMCwxLDAsMTAwLAorICAgIDAsMCwxMzEsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTA4LDAsMTIxLDE2LAorICAgIDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwyLDAsOTUsNywwLDg3LDExMywxMDgsCisgICAgMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDEwNCwwLDEsMSwxLDg5LDExMywKKyAgICAxMDgsMCw4OCwxMTAsMCwwLDExNiw2LDAsMTI0LDIsMCwxMDAsMiwwLDEwMCwKKyAgICAwLDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDIxNSwwLDEyMSw1OSwKKyAgICAwLDEyNCwyLDAsMTA2LDksMCwxMjQsMiwwLDk1LDEwLDAsMTE2LDExLDAsCisgICAgMTI0LDIsMCwxMDAsMywwLDEzMSwyLDAsMTE1LDE5MCwwLDEyNCwxLDAsMTA2LAorICAgIDMsMCwxMDYsMTIsMCwxMDAsNCwwLDEzMSwxLDAsMTAwLDUsMCwyNSwxMjQsCisgICAgMiwwLDk1LDEwLDAsMTEwLDAsMCw4NywxMTMsMjE1LDAsNCwxMTYsOCwwLAorICAgIDEwNywxMCwwLDExNCwyMTEsMCwxLDEsMSw4OSwxMTMsMjE1LDAsODgsMTEwLDAsCisgICAgMCwxMTYsNiwwLDEyNCwyLDAsMTAwLDYsMCwxMDAsMCwwLDEzMSwzLDAsCisgICAgMTAwLDAsMCwxMDcsOCwwLDExNCwyMCwxLDEyMSwxMywwLDEyNCwxLDAsMTI0LAorICAgIDIsMCw5NSwxMywwLDg3LDExMywyMCwxLDQsMTE2LDgsMCwxMDcsMTAsMCwKKyAgICAxMTQsMTYsMSwxLDEsMSw4OSwxMTMsMjAsMSw4OCwxMTAsMCwwLDEyNCwyLAorICAgIDAsODMsNDEsNyw3OCwxMTQsMTk5LDAsMCwwLDExNCwyNDYsMCwwLDAsMTE0LAorICAgIDIzOSwwLDAsMCwxMTQsMTEwLDAsMCwwLDExNCw3MSwwLDAsMCwxMTQsMjAzLAorICAgIDAsMCwwLDQxLDE0LDExNCwxNzIsMCwwLDAsMTE0LDE2MywwLDAsMCwxMTQsCisgICAgMCwxLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDE2OSwKKyAgICAwLDAsMCwxMTQsNjIsMCwwLDAsMTE0LDE5OSwwLDAsMCwxMTQsMjA0LDAsCisgICAgMCwwLDExNCw1NywwLDAsMCwxMTQsMjQ2LDAsMCwwLDExNCw2MCwwLDAsCisgICAgMCwxMTQsMzIsMCwwLDAsMTE0LDIwMywwLDAsMCw0MSwzLDExNCw3OCwwLAorICAgIDAsMCwxMTQsMTcyLDAsMCwwLDExNCwxNzQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDEwOCwxMTEsCisgICAgOTcsMTAwLDk1LDk4LDk3LDk5LDEwNywxMTksOTcsMTE0LDEwMCw5NSw5OSwxMTEsMTA5LDExMiwKKyAgICA5NywxMTYsMTA1LDk4LDEwOCwxMDEsMTEyLDQsMCwwLDExNSw0MiwwLDAsMCwwLAorICAgIDIsOSwyLDE5LDEsMTYsMSwyNCwxLDMsMSwxNiwxLDEzLDEsOCwKKyAgICAxLDI0LDEsMyw0LDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwxLDI0LAorICAgIDEsMywxLDEzLDEsMTMsMSw4LDEsMTIyLDM4LDk1LDgzLDExMiwxMDEsOTksCisgICAgNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsOTgsOTcsCisgICAgOTksMTA3LDExOSw5NywxMTQsMTAwLDk1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA4LAorICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw5LDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsMCwxMTYsMCwwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxNDMsMjAsMCwxLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LDEyNCwyLDAsCisgICAgODMsNDEsMiwxMjIsNjAsNjksMTIwLDEwMSw5OSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwzOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTAsMTE2LAorICAgIDExMSwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsMTEwLDEwMywzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgNDYsNzgsNDEsMiwxMTQsMjA3LDAsMCwwLDExNCwxNzAsMCwwLDAsNDEsMywKKyAgICAxMTQsNzgsMCwwLDAsMTE0LDE3NCwwLDAsMCw5MCw2LDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDE0LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwMSwxMjAsMTA1LDExNSwxMTYsMTA1LDExMCwKKyAgICAxMDMsMTQyLDQsMCwwLDExNSw2LDAsMCwwLDAsMywxMywxLDIxLDEsCisgICAgMTIyLDI3LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsCisgICAgMTA4LDExMSw5NywxMDAsOTUsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsMTEwLDEwMyw5OSwxLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTc5LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLAorICAgIDEwMCwwLDAsMTA3LDksMCwxMTQsNTIsMCwxMTYsMiwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNTIsMCwxMjQsMCwKKyAgICAwLDEwNiwzLDAsMTMxLDAsMCw4MywxMTAsMCwwLDEyNCwwLDAsMTA2LDQsCisgICAgMCwxMzEsMCwwLDEyNSwxLDAsMTE2LDUsMCwxMjQsMSwwLDEzMSwxLDAsCisgICAgMTQzLDg0LDAsMSwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDAsMCwwLAorICAgIDEwNyw4LDAsMTE0LDE0MywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsNiwwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsMTU2LDAsMTE2LDcsMCwxMDAsMiwwLDEwMCwzLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwNiw4LDAsMTMxLDEsMSwxMzAsMSwwLAorICAgIDExMywxNTYsMCwxMTAsMTMsMCwxMjQsMCwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEsODcsMTAwLDAsMCw4MSw4OCwxMTYsMTAsMCwxMDYsMTEsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsMTA2LDgsMCwyNSw4Myw0MSw0LDc4LDExNCwyNTMsMCwKKyAgICAwLDAsMTIyLDE0LDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDExNCw2NywwLDAsMCw0MSwxMiwxMTQsMTcyLDAsMCwwLDExNCwxNjMsCisgICAgMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwxLDEsMCwwLDExNCwyNTIsMCwKKyAgICAwLDAsMTE0LDIwNywwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwxNDcsMCwwLAorICAgIDAsMTE0LDY3LDAsMCwwLDExNCwyNTQsMCwwLDAsMTE0LDcsMCwwLDAsCisgICAgMTE0LDE2OSwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTc0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxNCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsCisgICAgMTQ5LDQsMCwwLDExNSwyMCwwLDAsMCwwLDIsMTgsMiwyMSwxLDEzLAorICAgIDIsMTIsMSwxMywxLDE4LDEsMTgsMSwzMCwzLDE5LDUsMTIyLDI3LDk1LAorICAgIDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LDExMSw5NywKKyAgICAxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwxLDAsMCwwLDgsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDQ5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEsMTE2LDIsCisgICAgMCwxMjQsMCwwLDEwNiwzLDAsMTA2LDQsMCwxMzEsMSwwLDE0MywxNSwwLAorICAgIDEsMTI0LDAsMCwxMDYsNSwwLDEzMSwwLDAsODMsODcsMTAwLDEsMCw4MSwKKyAgICA4OCwxMDAsMSwwLDgzLDQxLDIsMTIyLDIwNyw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLAorICAgIDk3LDMyLDExMCwxMDEsMTE5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMSw5OCwxMDYsCisgICAgMTAxLDk5LDExNiw0NCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzOSwxMTUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTAwLDEwMCwKKyAgICAxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE0LDEwMSw5NywxMDAsCisgICAgMTIxLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LAorICAgIDQ0LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMTA1LDExMCwxMDMsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAzLDEwMSwxMTYsMTE1LDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDk5LDEwOCwxMTEsOTgsOTgsMTAxLDExNCwxMDEsMTAwLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDYsMTE0LDk2LDAsMCwwLAorICAgIDExNCwyNTUsMCwwLDAsMTE0LDkyLDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LAorICAgIDY3LDAsMCwwLDExNCwzLDEsMCwwLDQxLDEsMTE0LDc4LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAxNzEsMCwwLDAsMTcyLDQsMCwwLDExNSw2LDAsMCwwLDAsOSwxMCwKKyAgICAxLDE5LDEsMTIyLDE3LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAxMTUsNDYsMTA4LDExMSw5NywxMDAsNzgsNDEsMTYsMTE0LDU3LDAsMCwwLDExNCw1NiwKKyAgICAwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3OSwwLAorICAgIDAsMCwyMTgsMTEsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE0LAorICAgIDI0MywwLDAsMCwxMTQsMjAwLDAsMCwwLDExNCwyNTAsMCwwLDAsMTE0LDI1MiwKKyAgICAwLDAsMCwxMTQsMjU0LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDEsMSwKKyAgICAwLDAsMTE0LDIsMSwwLDAsMTE0LDMsMSwwLDAsMTE0LDE3MSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTY4LDAsMCwwLDE5MywzLDAsMCwxMTUsMjQsCisgICAgMCwwLDAsMTIsMyw2LDIsMTIsMywxOCwxNiwxMiwxNiwyNCw4MCwxMiwKKyAgICAyMywxMiwxMCwxMiwyMiwxMiwzMCwxMiw3LDEyLDIzLDExNCwxNjgsMCwwLDAsCisgICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsCisgICAgMCw2NCwwLDAsMCwxMTUsMTkzLDAsMCwwLDEwMSwwLDAsOTAsMSwwLAorICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsMTAwLAorICAgIDIsMCwxMDAsMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsCisgICAgMCwxMDAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwyLDAsCisgICAgMTMxLDEsMCw5MCw3LDAsMTAxLDYsMCwxMDAsNCwwLDEwMCw3LDAsMTAwLAorICAgIDgsMCwxMzIsMSwwLDEzMSwxLDAsOTAsOCwwLDEwMSw0LDAsMTAwLDksCisgICAgMCwxMDAsMTAsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLDEwMSw2LDAsCisgICAgMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLAorICAgIDYsMCwxMDEsMTEsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsMTMxLDEsMCw5MCwxMiwwLDEwMSw2LDAsMTAxLDExLDAsMTAwLDE1LDAsCisgICAgMTAwLDE2LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwxMDEsCisgICAgNiwwLDEwMSwxMSwwLDEwMCwxNywwLDEwMCwxOCwwLDEzMiwwLDAsMTMxLDEsCisgICAgMCwxMzEsMSwwLDkwLDE0LDAsMTAwLDQsMCw4Myw0MSwxOSwyMTgsMTUsNjYsCisgICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDEyMiwxNDQsCisgICAgNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAzMiwxMDIsMTExLDExNCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwKKyAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwxMDQsCisgICAgMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwxMTYsOTcsMTE2LAorICAgIDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwzMiw5NywxMTgsCisgICAgMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMTAsCisgICAgMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LDExNiwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsMCwwLAorICAgIDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsNzgsMTIyLDI0LDYwLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDk4LDExNywxMDUsCisgICAgMTA4LDExNiw0NSwxMDUsMTEwLDQxLDYyLDQxLDIsMTE0LDQ3LDAsMCwwLDExNCw1NywKKyAgICAwLDAsMCw0MSwxLDExNCwxNzQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIwMCwwLDAsMCwxOTcsNCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyNyw2NiwxMTcsMTA1LDEwOCwxMTYsCisgICAgMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDc4LDk5LDQsMCwwLDAsMCwwLDAsMCwKKyAgICA0LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwKKyAgICAwLDEyNCwyLDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxNiwwLDEwMCwwLDAsCisgICAgODMsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTQsNTAsMCwKKyAgICAxMTYsMiwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLAorICAgIDIsMSw4MywxMDAsMCwwLDgzLDEwMCwwLDAsODMsNDEsMyw3OCwxMTQsMjE0LAorICAgIDAsMCwwLDEyMiw4LDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQxLDMsMTE0LAorICAgIDk2LDAsMCwwLDIxOCwxMCwxMDUsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAorICAgIDExNCwxNjcsMCwwLDAsNDEsNCwxMTQsMjQyLDAsMCwwLDExNCwxNTIsMCwwLAorICAgIDAsMTE0LDM1LDAsMCwwLDIxOCw2LDExNiw5NywxMTQsMTAzLDEwMSwxMTYsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDksMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDIwMiw0LDAsMCwxMTUsMTAsMCwwLAorICAgIDAsMCwyLDEyLDEsNCwxLDE1LDEsMTksMiwxMjIsMjUsNjYsMTE3LDEwNSwKKyAgICAxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLAorICAgIDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLDAsMCwwLDAsMCwwLDAsNCwKKyAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTI1LAorICAgIDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsMzcsMCwxMjQsMywKKyAgICAwLDEwNiwxLDAsODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxMTMsNzAsMTA1LDExMCwKKyAgICAxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgNzMsMTAyLDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDEwNSwxMTUsMzIsMTAxLDExOCwxMDEsCisgICAgMTE0LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk5LAorICAgIDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLDk3LDMyLDEwMiw5NywxMDUsMTA4LAorICAgIDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLAorICAgIDIsMTE0LDgsMSwwLDAsMTE0LDE2MywwLDAsMCw0MSw0LDExNCwyNDIsMCwKKyAgICAwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE3MiwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTEsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDIxMSw0LDAsCisgICAgMCwxMTUsNCwwLDAsMCwwLDcsMTgsMSwxMjIsMjcsNjYsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCwKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMywwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwxMDksMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLAorICAgIDEyNSwyLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwyLDAsMTMxLDEsMCwxMTUsCisgICAgNjMsMCwxMTYsNCwwLDEwMCwxLDAsMTA2LDUsMCwxMjQsMiwwLDEzMSwxLAorICAgIDAsMTAwLDIsMCwxMjQsMiwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLAorICAgIDExNiw2LDAsMTE2LDIsMCwxMDYsNywwLDEyNCwyLDAsMTMxLDIsMCwxLAorICAgIDExNiw4LDAsMTI0LDEsMCwxMzEsMSwwLDEwNiw5LDAsMTE2LDEwLDAsMTA2LAorICAgIDExLDAsMTI0LDIsMCwyNSwxMzEsMSwwLDEsMTAwLDAsMCw4Myw0MSwzLAorICAgIDc4LDEyMiwyOSwxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LAorICAgIDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDExNCw2NywwLDAsMCw0MSwxMiwxMTQsMjAzLDAsMCwwLDExNCw2NywwLDAsCisgICAgMCwxMTQsOTYsMCwwLDAsMTE0LDYsMSwwLDAsMTE0LDE0NywwLDAsMCwKKyAgICAxMTQsNDcsMCwwLDAsMTE0LDEwOCwwLDAsMCw5MCwxMiwxMDUsMTEwLDEwNSwxMTYsCisgICAgOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE0LDE2OCwwLDAsMCwxMTQsMjUwLDAsCisgICAgMCwwLDExNCw3LDAsMCwwLDExNCwxNjksMCwwLDAsNDEsMywxMTQsMTc0LAorICAgIDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNTMsMCwwLAorICAgIDAsMjIxLDQsMCwwLDExNSwxNCwwLDAsMCwwLDIsOSwxLDksMSwKKyAgICAxNSwxLDE4LDEsMTIsMSwxNiw0LDEyMiwyNyw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LAorICAgIDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LAorICAgIDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwxLDEyMiwyMywKKyAgICA3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDQxLDEsMTE0LDE3NSwwLDAsMCw0MSwyLAorICAgIDExNCwyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMCwxLDAsMCwyMzQsNCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyNyw2NiwxMTcsMTA1LDEwOCwxMTYsCisgICAgMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsCiAgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDExNyw0NSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw0Niw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExNywxNywwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDAsMiwwLDAsMCwxMTcsMywwLAotICAgIDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDIwOCwyLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDQsMTE3LDIzLDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwKLSAgICAxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw1NCwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKKyAgICAwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLAorICAgIDEwMCwxLDAsODMsNDEsMiwxMjIsNTcsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwKKyAgICAxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsCiAgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LAotICAgIDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwKLSAgICA3OCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwyMTQsMiwwLDAsMTE1LDIsMCwwLDAsMCw0LDExNywKLSAgICAyNSwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwKLSAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLAotICAgIDEzMSwxLDAsODMsNDAsMSwwLDAsMCwxMTcsNDYsMCwwLDAsODIsMTAxLAotICAgIDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwKLSAgICAxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDE3LDAsMCwwLDEwNSwKLSAgICAxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsMjIwLDIsMCwwLDExNSwyLDAsMCwwLDAsNCwKLSAgICAxMTcsMjUsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNzgsNDAsCi0gICAgMTUsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LAotICAgIDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSwKLSAgICA5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNywxMSwwLAotICAgIDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTEsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTYsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwKLSAgICAxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTEsMCwwLDAsMTA4LAotICAgIDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxNCwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxNzMsMiwwLDAsMTE1LDI4LDAsMCwKLSAgICAwLDE2LDcsNiwyLDE4LDQsMywxLDE4LDQsMywxLDMsMSwzLAotICAgIDEsMjcsMTQsMywxLDIxLDUsMywxLDIxLDUsMywxLDExNywxNCwwLAotICAgIDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwKLSAgICAwLDY2LDAsMCwwLDExNSwxMDEsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwKLSAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKLSAgICAxMDAsMiwwLDkwLDQsMCwxMDAsMywwLDkwLDUsMCwxMDAsMTEsMCw5MCwKLSAgICA3LDAsMTAxLDgsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwxMzEsMSwKLSAgICAwLDkwLDksMCwxMDEsOCwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLAotICAgIDEzMSwxLDAsOTAsMTAsMCwxMDEsOCwwLDEwMCwxMCwwLDEwMCw4LDAsMTAwLAotICAgIDksMCwxMzIsMSwwLDEzMSwxLDAsOTAsMTIsMCwxMDAsMTAsMCw4Myw0MCwKLSAgICAxMiwwLDAsMCwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsCi0gICAgODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDY3LAotICAgIDAsMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLAotICAgIDEwMCwxMDEsOTksMTA4LDk3LDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwKLSAgICA0NiwxMCwzMiwzMiwzMiwzMiwxMTcsNTksMCwwLDAsODMsMTExLDEwMiwxMTYsMTE5LAotICAgIDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsCi0gICAgMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDExNyw2NSwwLDAsMCw4MywxMTEsMTAyLDExNiwxMTksCi0gICAgOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwKLSAgICAxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsCi0gICAgMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsOTIsNjgsMTAxLDk4LDExNywxMDMsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDY3LDAsMCwwLDEyMSwyMywwLDExNiwwLDAsMTA2LDEsMCwxMTYsCi0gICAgMCwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDExMCwzNywwLAotICAgIDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNjIsMCwxLDEsMSwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTE2LDAsMCwxMDYsNCwwLDEyNCwxLDAsMTMxLDIsMCw4MywKLSAgICA4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwKLSAgICA1LDAsMCwwLDExNyw3LDAsMCwwLDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLAotICAgIDExNyw3LDAsMCwwLDc5LDExMiwxMDEsMTEwLDc1LDEwMSwxMjEsMTE3LDE3LDAsMCwKLSAgICAwLDcyLDc1LDY5LDg5LDk1LDY3LDg1LDgyLDgyLDY5LDc4LDg0LDk1LDg1LDgzLAotICAgIDY5LDgyLDExNywxMiwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLDcyLDc1LDY5LDg5LDk1LDc2LDc5LDY3LAotICAgIDY1LDc2LDk1LDc3LDY1LDY3LDcyLDczLDc4LDY5LDQwLDIsMCwwLDAsMTE3LAotICAgIDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMywwLDAsMCwxMDcsMTAxLDEyMSw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNCwwLDAsMCwKLSAgICA5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwyNDAsMiwKLSAgICAwLDAsMTE1LDgsMCwwLDAsMCwyLDMsMSwyMywxLDEzLDEsMTE3LAotICAgIDM2LDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwKLSAgICAxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMSwxMTIsMTAxLDExMCw5NSwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDIsMCwwLDAsMCwwLDAsCi0gICAgMCw2LDAsMCwwLDE2LDAsMCwwLDY3LDAsMCwwLDExNSwxNDIsMCwKLSAgICAwLDAsMTI0LDAsMCwxMDYsMCwwLDExNCwyMSwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMjUsMiwwLDExMCw5LDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsCi0gICAgMTI0LDIsMCwxMDYsMywwLDEwMCwxLDAsMTI0LDEsMCwxMDAsMiwwLDExNiwKLSAgICA0LDAsMTA2LDUsMCwxMDAsMCwwLDEwMCwzLDAsMTMzLDIsMCwyNSwxMzEsCi0gICAgMCwyLDEyNSwzLDAsMTIxLDQ2LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLAotICAgIDAsMTMxLDEsMCwxNDMsMjUsMCwxMjUsNCwwLDExNiw3LDAsMTA2LDgsMCwKLSAgICAxMjQsNCwwLDEwMCw0LDAsMTMxLDIsMCwxMjUsNSwwLDg3LDEwMCwwLDAsCi0gICAgODEsODgsODcsMTEwLDIyLDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwxMzcsMCwKLSAgICAxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLDAsODgsMTI0LDUsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDEwNSwzLDAsMCwwLDExNywwLDAsMCwwLDQwLDExLDAsCi0gICAgMCwwLDExNywxMSwwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4NSw3MywKLSAgICA3Niw2OCwxMTcsMTgsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsODksOTUsCi0gICAgNzUsNjksODksOTUsNjgsNjksNjYsODUsNzEsMTE3LDEyLDAsMCwwLDgyLDY5LAotICAgIDcxLDczLDgzLDg0LDgyLDg5LDk1LDc1LDY5LDg5LDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwKLSAgICAwLDAsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNywxNCwwLDAsMCw5NSwxMTEsCi0gICAgMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsNywwLDAsCi0gICAgMCw5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMTAsMCwwLDAsODEsMTE3LDEwMSwKLSAgICAxMTQsMTIxLDg2LDk3LDEwOCwxMTcsMTAxLDExNywxMiwwLDAsMCw4NywxMDUsMTEwLDEwMCwKLSAgICAxMTEsMTE5LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwKLSAgICAxMDEsNDAsNiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5NSwxMDcsMTAxLDEyMSwxMTcsMywwLDAsCi0gICAgMCwxMDcsMTAxLDEyMSwxMTcsNCwwLDAsMCwxMDQsMTA3LDEwMSwxMjEsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDEwNSwxMDgsMTAxLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDExNSwxMDEsOTcsMTE0LAotICAgIDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDI0NywyLDAsMCwxMTUsCi0gICAgMjIsMCwwLDAsMCwyLDksMSwxMiwyLDksMSwxNSwxLDIyLDEsCi0gICAgMywxLDE4LDEsMjgsMSwxMywxLDksMSwxMTcsMzgsMCwwLDAsODcsCi0gICAgMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLAotICAgIDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwKLSAgICAwLDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTI0LDMsCi0gICAgMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDMxLDAsMTAwLDEsMCw4MywxMjEsMTcsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwxMzEsMSwwLDEsODcsMTEwLAotICAgIDIyLDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw3MiwwLDEsMSwxLDEwMCwKLSAgICAxLDAsODMsODksMTEwLDEsMCw4OCwxMjAsNTcsMCwxMTYsNSwwLDEzMSwwLAotICAgIDAsNjgsOTMsNDYsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEyNCwzLAotICAgIDAsMTA2LDYsMCwxMTYsNywwLDEyNCw1LDAsMTMxLDEsMCwxMzEsMSwwLAotICAgIDExNCw4MywwLDEyNCw0LDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsCi0gICAgMTEzLDgzLDAsODcsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywzNCwwLAotICAgIDAsMCw3MCwxMDUsMTEwLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LAotICAgIDExNiwxMTQsMTIxLDQ2LDc4LDQwLDgsMCwwLDAsMTE3LDE2LDAsMCwwLDk1LAotICAgIDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLDk1LDExMSwxMTUsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDcsMCwwLDAsNzksODMsCi0gICAgNjksMTE0LDExNCwxMTEsMTE0LDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTUsMTE3LDgsMCwwLDAsMTAxLDExMCwxMDAsMTE1LDExOSwxMDUsCi0gICAgMTE2LDEwNCwxMTcsNSwwLDAsMCwxMTYsMTE3LDExMiwxMDgsMTAxLDQwLDYsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDgsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLAotICAgIDEwNSwxMjAsMTAxLDExNSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNiwzLDAsMCwxMTUsMjAsMCwwLDAsMCwzLDE1LDEsMTIsMSw0LAotICAgIDEsMywxLDE3LDEsMTMsMSw5LDEsMjIsMSwyMSwxLDExNywzMywwLAotICAgIDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwKLSAgICAxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNzgsNzAsNDAsMTMsMCwwLDAsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLAotICAgIDk5LDk1LDk1LDExNywxMiwwLDAsMCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSwKLSAgICA5NSw3NSw2OSw4OSwxMTcsMTgsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsCi0gICAgODksOTUsNzUsNjksODksOTUsNjgsNjksNjYsODUsNzEsMTE3LDUsMCwwLDAsCi0gICAgNzAsOTcsMTA4LDExNSwxMDEsMTE3LDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LAotICAgIDY2LDg1LDczLDc2LDY4LDExNywxMSwwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksCi0gICAgMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTQsMCwwLDAsOTUsMTExLDExMiwxMDEsMTEwLDk1LAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDE2LDAsMCwwLDk1LDExNSwxMDEsCi0gICAgOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIxLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwKLSAgICAxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDIyNywyLDAsMCwxMTUsMTYsMCwwLDAsMTYsMyw2LDMsNiwzLDYsCi0gICAgMiw2LDIsMTgsNywxOCwxNSwzLDEsMTE3LDIxLDAsMCwwLDg3LDEwNSwKKyAgICA5NywxMTgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTUsCisgICAgNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjQyLDAsMCwwLDExNCwxNTIsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDgsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMjM5LDQsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsNCwxMjIsMjQsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsCisgICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwKKyAgICAyLDEyMiw1Niw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LAorICAgIDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCw0LDAsMCwKKyAgICAwLDQxLDIsMTE0LDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwxMDMsMTAxLAorICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDI0NSw0LDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDQsMTIyLDI2LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiwKKyAgICA1Miw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLDk3LDExNSwKKyAgICAzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTAsMTAxLDExOCwxMDEsMTE0LDMyLDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSwxMTUsNDYsNzAsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjQyLDAsCisgICAgMCwwLDExNCwxNTIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIxNiwwLDAsMCwyNTEsNCwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCw1LDEyMiwyNiw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LAorICAgIDEwMywxMDEsNDEsMTUsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsCisgICAgMCwwLDAsMTE0LDU5LDAsMCwwLDIxOCwxMiwxMTUsMTE2LDk3LDExNiwxMDUsOTksCisgICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE0LDIwMCwwLDAsMCwxMTQsNCwxLDAsMCwKKyAgICAxMTQsOCwxLDAsMCwxMTQsOSwxLDAsMCwxMTQsMjUzLDAsMCwwLDExNCwKKyAgICAwLDEsMCwwLDExNCwxNTUsMCwwLDAsMTE0LDEwLDEsMCwwLDExNCwxMSwKKyAgICAxLDAsMCwxMTQsMjE2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw1LDEsMCwKKyAgICAwLDE4OCw0LDAsMCwxMTUsMjgsMCwwLDAsMTIsNyw2LDIsMTgsNSwKKyAgICAzLDEsMjEsOCwzLDEsMTgsOSwxOCwxMywxOCw1LDMsMSwyMSw1LAorICAgIDMsMSwyMSw1LDMsMSwxMTQsNSwxLDAsMCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LDAsMCwwLAorICAgIDExNSwxOTMsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsCisgICAgMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNiwwLDEwMCw0LDAsMTAwLAorICAgIDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDIsMCwxMzEsMSwwLDkwLDcsCisgICAgMCwxMDEsNiwwLDEwMCw0LDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwxLDAsCisgICAgMTMxLDEsMCw5MCw4LDAsMTAxLDQsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwKKyAgICAwLDAsMTMxLDEsMCw5MCw5LDAsMTAxLDYsMCwxMDAsMTEsMCwxMDAsMTIsCisgICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNiwwLDEwMSwxMSwwLAorICAgIDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLAorICAgIDEyLDAsMTAxLDYsMCwxMDEsMTEsMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMCwKKyAgICAwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMywwLDEwMSw2LDAsMTAxLDExLDAsCisgICAgMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsCisgICAgMTQsMCwxMDAsNCwwLDgzLDQxLDE5LDIxOCwxNCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLAorICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMjIsMTQyLDc3LDEwMSwxMTYsOTcsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTAyLAorICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLAorICAgIDk3LDExNCwxMDEsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsOTksMTA4LDk3LDExNSwxMTUsCisgICAgMzIsMTExLDExNCwzMiwxMTUsMTE2LDk3LDExNiwxMDUsOTksMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMTE1LDMyLDExNiwxMTEsMzIsOTcsMTE4LDExMSwxMDUsMTAwLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE1LDExNiwKKyAgICA5NywxMTAsMTE2LDEwNSw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCw5NywxMTUsCisgICAgMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsCisgICAgMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsCisgICAgMCw4Myw0MSwyLDc4LDEyMiwyMiw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsCisgICAgMzMsMTE0LDEyNSwzMiw0MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MSw2Miw0MSwyLDExNCwKKyAgICA0NywwLDAsMCwxMTQsNTcsMCwwLDAsNDEsMSwyMTgsMSwxMDksMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIwMCwwLAorICAgIDAsMCwxMiw1LDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLDI2LDcwLAorICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw3OCw5OSw0LDAsMCwwLDAsCisgICAgMCwwLDAsNCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA0MiwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLAorICAgIDExNCwzNCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTAwLAorICAgIDIsMCwxMzEsMiwxLDgzLDEwMCwwLDAsODMsMTAwLDAsMCw4Myw0MSwzLAorICAgIDc4LDExNCwyMTQsMCwwLDAsOTAsNiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MSwzLAorICAgIDExNCw5NiwwLDAsMCwxMTQsMTU2LDAsMCwwLDExNCwxNjcsMCwwLDAsNDEsCisgICAgNCwxMTQsMjQyLDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDM1LDAsMCwwLAorICAgIDExNCw3LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw4LDEsMCwwLDE3LDUsMCwwLDExNSw2LDAsCisgICAgMCwwLDAsMiwxNSwxLDE5LDIsMTIyLDI0LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsCisgICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLAorICAgIDEwMSw5OSw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwxMTYsMCwwLDEwNiwKKyAgICAxLDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxOSwwLDEyNCwwLDAsODMsMTAwLAorICAgIDEsMCw4Myw0MSwyLDEyMiwyMSw3MCwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDIsMTE0LAorICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCw0MSwyLDExNCwKKyAgICA5NiwwLDAsMCwxMTQsMTU2LDAsMCwwLDQxLDMsMTE0LDI0MiwwLDAsMCwKKyAgICAxMTQsMTUyLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOSwxLDAsMCwyNCw1LAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLDI2LDcwLDExNCwxMTEsMTIyLDEwMSwKKyAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLAorICAgIDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw5NSwwLDAsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsMTA2LDEsMCwxMjUsMSwwLDExNiwyLDAsMTA2LDMsCisgICAgMCwxMjQsMSwwLDEzMSwxLDAsMTE1LDU3LDAsMTE2LDQsMCwxMDAsMSwwLAorICAgIDEwNiw1LDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwyLDAsMTI0LDEsMCwxMzEsCisgICAgMSwxLDEzMCwxLDAsMTEwLDAsMCwxMTYsNiwwLDExNiwyLDAsMTA2LDcsCisgICAgMCwxMjQsMSwwLDEzMSwyLDAsMTI1LDIsMCwxMTYsOCwwLDEyNCwyLDAsCisgICAgMTI0LDAsMCwxMDYsOSwwLDEzMSwyLDAsMSwxMDAsMCwwLDgzLDQxLDMsCisgICAgNzgsMTIyLDI3LDEyMywzMywxMTQsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsCisgICAgMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDY3LAorICAgIDAsMCwwLDQxLDEwLDExNCwyMDMsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwKKyAgICA5NiwwLDAsMCwxMTQsMTU2LDAsMCwwLDExNCwxNDcsMCwwLDAsMTE0LDQ3LAorICAgIDAsMCwwLDExNCwxMDgsMCwwLDAsMjE4LDE3LDEwMywxMDEsMTE2LDk1LDEwMiwxMTQsCisgICAgMTExLDEyMiwxMDEsMTEwLDk1LDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTQsMTcwLDAsMCwwLAorICAgIDExNCw2MywwLDAsMCw0MSwzLDExNCwxNzQsMCwwLDAsMTE0LDY3LDAsMCwKKyAgICAwLDExNCwxODksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDI1MywwLDAsMCwyOSw1LDAsMCwxMTUsMTIsCisgICAgMCwwLDAsMCwyLDEyLDEsMTUsMSwxOCwxLDEyLDEsMTgsMSwxMjIsCisgICAgMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCisgICAgMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsCisgICAgMCw4Myw0MSwxLDEyMiwyMSw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDQxLDEsMTE0LDE3NSwwLAorICAgIDAsMCw0MSwyLDExNCwyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMCwxLAorICAgIDAsMCwzOCw1LDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLDI2LDcwLAorICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOCwxMTEsCisgICAgOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAorICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsCisgICAgNDEsMSwxMjIsNDUsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKKyAgICAxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNDYsNDEsMiwxMTQsOTYsMCwwLDAsMTE0LDE1LDEsMCwwLDQxLDIsMTE0LAorICAgIDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMCwxLDAsMCw0Myw1LDAsCisgICAgMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDIzLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsCisgICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwKKyAgICAyLDEyMiw1NCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LAorICAgIDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsCisgICAgMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywKKyAgICAxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCw0LDAsMCwwLDQxLAorICAgIDIsMTE0LDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMSwxLDAsMCw0OSwKKyAgICA1LDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDI1LDcwLDExNCwxMTEsMTIyLAorICAgIDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwKKyAgICAxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LAorICAgIDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MSwxLDEyMiw0NiwKKyAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNDEsMiwKKyAgICAxMTQsOTYsMCwwLDAsOTAsMTcsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKKyAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsMiwxMTQsMjQyLDAsMCwwLDExNCwKKyAgICAxNTIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDIxNiwwLDAsMCw1NSw1LDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDQsMTIyLDI1LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLDE1LAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA1OSwwLDAsMCwxMTQsMTIsMSwwLDAsMTE0LDIwMCwwLDAsMCwxMTQsNCwKKyAgICAxLDAsMCwxMTQsOCwxLDAsMCwxMTQsOSwxLDAsMCwxMTQsMjUzLDAsCisgICAgMCwwLDExNCwwLDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDEwLDEsMCwKKyAgICAwLDExNCwxMSwxLDAsMCwxMTQsMjE2LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAxMywxLDAsMCwzLDUsMCwwLDExNSwyOCwwLDAsMCwxMiw3LDYsCisgICAgMiwxOCw1LDMsMSwyMSw2LDMsMSwxOCw0LDE4LDksMTgsNSwzLAorICAgIDEsMjEsNSwzLDEsMjEsNSwzLDEsMTE0LDEzLDEsMCwwLDk5LDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNjQsCisgICAgMCwwLDAsMTE1LDEyMSwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwKKyAgICAwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDkwLDQsMCwKKyAgICAxMDAsMywwLDkwLDUsMCwxMDAsNCwwLDkwLDYsMCwxMDEsNywwLDEwMCwKKyAgICA1LDAsMTAwLDYsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw3LAorICAgIDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDAsMTMxLDEsMCw5MCw5LDAsCisgICAgMTAxLDcsMCwxMDAsOSwwLDEwMCw5LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLAorICAgIDIsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDcsMCwxMDAsOSwwLDEwMCwxMiwKKyAgICAwLDEwMCwxMywwLDEzMiwxLDAsMTMxLDEsMCw5MCwxMSwwLDEwMCw5LDAsCisgICAgODMsNDEsMTQsMjE4LDIxLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LAorICAgIDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDEyMiw2Miw3NywxMDEsMTE2LDk3LAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTAxLDk5LDEwOCw5NywxMTQsMTAxLAorICAgIDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LAorICAgIDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNDYsMTIyLDU5LDgzLDExMSwxMDIsMTE2LAorICAgIDExOSw5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsCisgICAgMTExLDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LAorICAgIDEwNSwxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywKKyAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDEyNSwxMjIsNjUsODMsMTExLDEwMiwxMTYsMTE5LDk3LDExNCwKKyAgICAxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDY3LAorICAgIDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsCisgICAgMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwxMDgsMTEwLAorICAgIDk3LDEwOSwxMDEsMTI1LDkyLDY4LDEwMSw5OCwxMTcsMTAzLDcwLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw2NywwLDAsMCwxMjEsMjMsMCwxMTYsMCwwLDEwNiwxLDAsMTE2LDAsCisgICAgMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsMzcsMCw0LAorICAgIDExNiwzLDAsMTA3LDEwLDAsMTE0LDYyLDAsMSwxLDEsMTE2LDAsMCwxMDYsCisgICAgMSwwLDExNiwwLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwyLDAsODMsODksCisgICAgMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNSwyMTgsNyw5NSwKKyAgICAxMTksMTA1LDExMCwxMTQsMTAxLDEwMyw5MCw3LDc5LDExMiwxMDEsMTEwLDc1LDEwMSwxMjEsOTAsCisgICAgMTcsNzIsNzUsNjksODksOTUsNjcsODUsODIsODIsNjksNzgsODQsOTUsODUsODMsCisgICAgNjksODIsMTE0LDQwLDAsMCwwLDkwLDE4LDcyLDc1LDY5LDg5LDk1LDc2LDc5LAorICAgIDY3LDY1LDc2LDk1LDc3LDY1LDY3LDcyLDczLDc4LDY5LDQxLDIsMTE0LDI0MiwwLAorICAgIDAsMCwyMTgsMywxMDcsMTAxLDEyMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsMTQsOTUsMTExLDExMiwxMDEsMTEwLDk1LDExNCwxMDEsCisgICAgMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzQsNSwwLDAsMTE1LDgsMCwwLDAsMCwKKyAgICAyLDMsMSwyMywxLDEzLDEsMTIyLDM2LDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LAorICAgIDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LAorICAgIDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDIsMCwKKyAgICAwLDAsMCwwLDAsMCw2LDAsMCwwLDE2LDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxNDIsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDExNCwyMSwwLAorICAgIDEyNCwwLDAsMTA2LDEsMCwxMjUsMiwwLDExMCw5LDAsMTI0LDAsMCwxMDYsCisgICAgMiwwLDEyNSwyLDAsMTI0LDIsMCwxMDYsMywwLDEwMCwxLDAsMTI0LDEsCisgICAgMCwxMDAsMiwwLDExNiw0LDAsMTA2LDUsMCwxMDAsMCwwLDEwMCwzLDAsCisgICAgMTMzLDIsMCwyNSwxMzEsMCwyLDEyNSwzLDAsMTIxLDQ2LDAsMTI0LDAsMCwKKyAgICAxMDYsNiwwLDEyNCwzLDAsMTMxLDEsMCwxNDMsMjUsMCwxMjUsNCwwLDExNiwKKyAgICA3LDAsMTA2LDgsMCwxMjQsNCwwLDEwMCw0LDAsMTMxLDIsMCwxMjUsNSwKKyAgICAwLDg3LDEwMCwwLDAsODEsODgsODcsMTEwLDIyLDAsNCwxMTYsOSwwLDEwNywKKyAgICAxMCwwLDExNCwxMzcsMCwxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLDAsCisgICAgODgsMTI0LDUsMCw4Myw0MSw1LDc4LDExNCwxNTIsMCwwLDAsOTAsMTEsMTE1LAorICAgIDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNCwxMzAsMCwwLDAsMTE0LAorICAgIDMwLDAsMCwwLDQxLDEwLDIxOCwxMSw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4NSwKKyAgICA3Myw3Niw2OCwyMTgsMTgsODIsNjksNzEsNzMsODMsODQsODIsODksOTUsNzUsNjksCisgICAgODksOTUsNjgsNjksNjYsODUsNzEsMjE4LDEyLDgyLDY5LDcxLDczLDgzLDg0LDgyLAorICAgIDg5LDk1LDc1LDY5LDg5LDExNCw0NywwLDAsMCwxMTQsNywwLDAsMCwyMTgsCisgICAgNywxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE0LDE5LDEsMCwwLDExNCwxNywxLAorICAgIDAsMCw5MCwxMCw4MSwxMTcsMTAxLDExNCwxMjEsODYsOTcsMTA4LDExNywxMDEsMTE0LDQwLAorICAgIDAsMCwwLDQxLDYsMTE0LDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDkwLAorICAgIDEyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsMTE0LDE4LDEsCisgICAgMCwwLDkwLDQsMTA0LDEwNywxMDEsMTIxLDIxOCw4LDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsCisgICAgMTE2LDEwNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwyMTgsMTYsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsCisgICAgMTE2LDExNCwxMjEsODEsNSwwLDAsMTE1LDIyLDAsMCwwLDAsMiw5LDEsCisgICAgMTIsMiw5LDEsMTUsMSwyMiwxLDMsMSwxOCwxLDI4LDEsMTMsMSwKKyAgICA5LDEsMTIyLDM4LDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwKKyAgICAxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsOTcsMTE0LDk5LAorICAgIDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDc4LDk5LDQsMCwwLDAsCisgICAgMCwwLDAsMCw4LDAsMCwwLDE0LDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxNTUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCwxMjUsNCwwLDEyNCw0LDAsMTAwLDAsMCwxMDcsOCwwLDExNCwzMSwwLAorICAgIDEwMCwwLDAsODMsMTIxLDE0LDAsMTE2LDEsMCwxMjQsNCwwLDEzMSwxLDAsCisgICAgMSw4NywxMTAsMjIsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDY5LDAsMSwKKyAgICAxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLDg4LDEyMCw3OCwwLDExNiwzLAorICAgIDAsMTMxLDAsMCw2OCw5Myw2NywwLDkyLDIsMCwxMjUsNSwwLDEyNSw2LAorICAgIDAsMTI0LDQsMCwxMDYsNCwwLDExNiw1LDAsMTI0LDYsMCwxMzEsMSwwLAorICAgIDEzMSwxLDAsMTE0LDgwLDAsMTE2LDYsMCwxMjQsMSwwLDEyNCw1LDAsMTI0LAorICAgIDEsMCwxMjQsNCwwLDEzMSwyLDAsMTAwLDEsMCwxMjQsNCwwLDEzMSwyLAorICAgIDEsMTI1LDcsMCwxMjQsNywwLDgzLDExMyw4MCwwLDg3LDEwMCwwLDAsODMsCisgICAgNDEsMiw3OCwxMTQsMjE0LDAsMCwwLDQxLDcsMTE0LDI1LDEsMCwwLDExNCwKKyAgICAzOSwwLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDIzMywwLDAsMCwxMTQsMjI1LAorICAgIDAsMCwwLDExNCwyMjYsMCwwLDAsMTE0LDE2NywwLDAsMCw0MSw4LDExNCwKKyAgICAyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDcsCisgICAgMSwwLDAsMTE0LDI0LDEsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDEyMSwwLAorICAgIDAsMCwxMTQsMTcyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCw4LDEsMCwwLDk2LDUsMCwwLDExNSwKKyAgICAyNCwwLDAsMCwwLDMsMTUsMSwxMiwxLDQsMSwzLDEsMTQsMSwKKyAgICAxMywxLDksMSwyMiwxLDIxLDEsMjEsMSw5LDEsMTIyLDMxLDg3LDEwNSwKICAgICAxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDUsMCwwLDAsNjYsMCwwLDAsMTE1LDc0LDAsMCwwLDEyNCwwLDAsCi0gICAgNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwKLSAgICA5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCwKLSAgICA0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDEwMCw2LAotICAgIDAsMTAwLDEwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDEsMTMxLDEsMCwKLSAgICA5MCw4LDAsMTAwLDksMCw4Myw0MCwxMSwwLDAsMCwxMTcsMTMsMCwwLAotICAgIDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDExNyw4MywKLSAgICAwLDAsMCw2Niw5NywxMTUsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMDIsCi0gICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTAsMTAxLDEwMSwKLSAgICAxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTgsMTExLDExNiwxMDQsMzIsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLAotICAgIDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCw1LAotICAgIDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDg4LDAsMCwwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDEwMCwxLDAsMjUsMTI1LDIsMCwxMjQsMiwwLDEwNiwyLDAsMTAwLAotICAgIDIsMCwxMDAsMSwwLDEzMSwyLDAsMTAwLDMsMCwyNSwxMjUsMywwLDEyNCwKLSAgICAxLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDQsMCwyNSwxMjUsCi0gICAgNCwwLDEyNCwzLDAsMTAwLDUsMCwxMDcsMiwwLDExMSw4NywwLDEyNCw0LAotICAgIDAsMTAwLDUsMCwxMDcsMywwLDgzLDQwLDYsMCwwLDAsMTE3LDE0MSwwLAotICAgIDAsMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LAotICAgIDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwzMiw5OCwxMjEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTA1LDExMCwKLSAgICAxMDMsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDk4LAotICAgIDEyMSwzMiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTA0LAotICAgIDk3LDExNSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwKLSAgICAzMiwzOSw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsMTEyLDEyMSwzOSw0NiwxMDUsCi0gICAgMSwwLDAsMCwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCwxMDUsCi0gICAgMiwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsCi0gICAgOTUsNDAsNCwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwwLDExNCwxMTUsMTEyLDEwOCwKLSAgICAxMDUsMTE2LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLAotICAgIDExMCw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLAotICAgIDAsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNywxMywwLDAsMCwxMDIsMTA1LAotICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsOTcsMTA1LDEwOCw5NSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSwyNiwzLDAsMCwxMTUsOCwwLDAsMCwwLDMsMjUsCi0gICAgMSwyMiwxLDE5LDEsMTE3LDI0LDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5OSw1LDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMjIsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDIwOCwxLDAsMCwxMjQsMiwwLDEwMCwKLSAgICAxLDAsMTAwLDIsMCwxMzMsMiwwLDI1LDEyNSw1LDAsMTI0LDIsMCwxMDAsCi0gICAgMiwwLDEwMCwzLDAsMTMzLDIsMCwyNSwxMjUsNiwwLDEyNCwyLDAsMTAwLAotICAgIDMsMCwxMDAsNCwwLDEzMywyLDAsMjUsMTI1LDcsMCwxMjQsNSwwLDExNiwKLSAgICAwLDAsMTA3LDMsMCwxMTQsMTE1LDAsMTAwLDUsMCwxMDYsMSwwLDEyNCwxLAotICAgIDAsMTI0LDUsMCwxMzEsMiwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLAotICAgIDEzMSwxLDAsMSwxMTYsMywwLDEyNCw4LDAsMTAwLDYsMCwxMjQsMSwwLAotICAgIDEwMCw3LDAsMTI0LDMsMCwxMzEsMSwyLDEzMCwxLDAsMTEwLDExNiwwLDExNiwKLSAgICA0LDAsMTI0LDYsMCwxMzEsMSwwLDEwMCwyLDAsMTA3LDMsMCwxMTQsMTczLAotICAgIDAsMTAwLDgsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLAotICAgIDExNiwyLDAsMTI0LDksMCwxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOSwwLAotICAgIDEzMSwxLDAsMTMwLDEsMCwxMTAsNTgsMCwxMTYsNCwwLDEyNCw3LDAsMTMxLAotICAgIDEsMCwxMDAsMiwwLDEwNywzLDAsMTE0LDIzMSwwLDEwMCw5LDAsMTA2LDEsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwxMTYsMiwwLDEyNCw5LDAsCi0gICAgMTMxLDEsMCwxLDExNiw1LDAsMTI0LDksMCwxMzEsMSwwLDEzMCwxLDAsCi0gICAgMTEwLDAsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTk0LDEsMTIxLAotICAgIDIwLDAsMTE2LDcsMCwxMjQsNCwwLDEwMCwxMCwwLDI1LDEzMSwxLDAsMTI1LAotICAgIDEwLDAsODcsMTEwLDE4LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwyNywxLAotICAgIDEsMSwxLDg5LDExMCw3MSwwLDg4LDExNiw5LDAsMTI0LDYsMCwxMzEsMSwKLSAgICAwLDEyNCwxMCwwLDEwNywzLDAsMTE0LDk4LDEsMTAwLDExLDAsMTA2LDEsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwxMTYsMiwwLDEyNCw5LDAsMTMxLAotICAgIDEsMCwxLDExNiwzLDAsMTI0LDksMCwxMDAsNiwwLDEyNCwxLDAsMTAwLAotICAgIDcsMCwxMjQsMywwLDEzMSwxLDIsMTMwLDEsMCwxMTAsMCwwLDEyMSwxOCwKLSAgICAwLDEyNCw0LDAsMTAwLDEyLDAsMjUsMTAwLDEzLDAsNjQsMTI1LDExLDAsODcsCi0gICAgMTEwLDE4LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxMzYsMSwxLDEsMSwKLSAgICA4OSwxMTMsMTk0LDEsODgsMTE2LDksMCwxMjQsNywwLDEzMSwxLDAsMTI0LDExLAotICAgIDAsMTA3LDMsMCwxMTQsMTk0LDEsMTE2LDMsMCwxMDAsMTEsMCwxMDYsMSwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMDAsNiwwLDEyNCwxLDAsMTAwLDcsMCwxMjQsCi0gICAgMywwLDEzMSwxLDIsMTMwLDEsMCwxMTMsMTk0LDEsMTEwLDAsMCwxMjQsMiwKLSAgICAwLDEwMCw0LDAsMTAwLDEsMCwxMzMsMiwwLDI1LDgzLDQwLDE0LDAsMCwKLSAgICAwLDExNywxOTMsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLAotICAgIDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDQsCi0gICAgMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAotICAgIDk3LDEwMywxMDUsOTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEwLDExNywxMDksCi0gICAgOTgsMTAxLDExNCw0NCwzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDk3LAotICAgIDExMCwxMDAsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTUsMTA1LDEyMiwxMDEsMzIsOTcsCi0gICAgMTA4LDExMSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExOSw5NywxMjEsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDExNSwxMDcsMTA1LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDk5LDEwNCwxMDEsOTksMTA3LDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDEwNSw0LDAsMCwwLDEwNSw4LDAsCi0gICAgMCwwLDEwNSwxMiwwLDAsMCwxMTcsMzAsMCwwLDAsOTgsOTcsMTAwLDMyLAotICAgIDEwOSw5NywxMDMsMTA1LDk5LDMyLDExMCwxMTcsMTA5LDk4LDEwMSwxMTQsMzIsMTA1LDExMCwzMiwKLSAgICAxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsMTE0LDEyNSwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMTksMCwwLAotICAgIDAsOTgsOTcsMTAwLDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTA1LAotICAgIDExMCwzMiwxMjMsMTI1LDExNywxNCwwLDAsMCw5OCw5NywxMDAsMzIsMTE1LDEwNSwxMjIsCi0gICAgMTAxLDMyLDEwNSwxMTAsMzIsMTIzLDEyNSwxMTcsNSwwLDAsMCwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNywyNCwwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsCi0gICAgMTE1LDMyLDExNSwxMTYsOTcsMTA4LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNyw0LAotICAgIDAsMCwwLDExNSwxMDUsMTIyLDEwMSwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsCi0gICAgMywwLDQwLDEwLDAsMCwwLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSwKLSAgICA3Myw2Nyw5NSw2Niw4OSw4NCw2OSw4MywxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwKLSAgICA5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsCi0gICAgMTE3LDgsMCwwLDAsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLDEwNSwxMTAsMTE2LDExNyw4LAotICAgIDAsMCwwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLAotICAgIDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsNDAsMTIsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNywxMywwLDAsMCwKLSAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsMCwKLSAgICAwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDUsCi0gICAgMCwwLDAsMTA5LDk3LDEwMywxMDUsOTksMTE3LDEzLDAsMCwwLDExNCw5NywxMTksCi0gICAgOTUsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwxMTcsOCwwLDAsMCwxMTQsCi0gICAgOTcsMTE5LDk1LDExNSwxMDUsMTIyLDEwMSwxMTcsMywwLDAsMCwxMDksMTE1LDEwMywxMTcsCi0gICAgNywwLDAsMCwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTIsMCwwLDAsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMSwwLDAsCi0gICAgMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMDUsMTIyLDEwMSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMCwwLDAsMCw5NSw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsCi0gICAgMTAxLDM0LDMsMCwwLDExNSw2OCwwLDAsMCwwLDcsMTYsMSwxNiwxLAotICAgIDE2LDEsMTIsMSwxOCwxLDEwLDEsMjcsMSwxOCwxLDE1LDEsMTAsMSwKLSAgICAxNSwxLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsMjAsMSwKLSAgICAxMywxLDUsMiwxOCwxLDE1LDEsMTAsMSwxNSwxLDEyLDEsMywxLAotICAgIDE4LDEsMTMsMSw1LDIsMTgsMSwzLDEsMTUsMSwyMSwzLDExNywzNCwKLSAgICAwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsCi0gICAgNDYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICAxMDgsMTAxLDExNSwxMTUsOTksMiwwLDAsMCwxLDAsMCwwLDUsMCwwLAotICAgIDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyNywwLDAsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTI1LDMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDMsMCwKLSAgICAxMzEsMSwwLDEyNSw0LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwzLDAsMTMxLAotICAgIDEsMCwxMjQsMSwwLDk1LDMsMCwxMjQsMiwwLDExNSwxMDYsMCwxMjEsMjIsCi0gICAgMCwxMTYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwwLDEyNCwxLDAsCi0gICAgOTUsNSwwLDg3LDExMywxMTgsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDEwMiwKLSAgICAwLDEsMSwxLDEyNCwxLDAsMTA2LDMsMCwxMjQsMSwwLDk1LDUsMCwKLSAgICA4OSwxMTMsMTE4LDAsODgsMTEwLDEyLDAsMTI0LDEsMCwxMDYsMywwLDEyNCwxLAotICAgIDAsOTUsNSwwLDEyNCwzLDAsMTI0LDEsMCw5NSw3LDAsMTI0LDAsMCwKLSAgICAxMDYsOCwwLDEyNCwzLDAsMTMxLDEsMCwxMTQsMTcwLDAsMTE2LDksMCwxMjQsCi0gICAgMSwwLDEwNiwzLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEwMywxLDAsMTI0LAotICAgIDEsMCw5NSwxMCwwLDExMCwyNSwwLDEyNCwxLDAsMTA2LDcsMCwxMDYsMTEsCi0gICAgMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMjQsMSwwLDk1LDcsCi0gICAgMCwxMjQsMCwwLDEyNCwxLDAsOTUsMTIsMCwxMTYsMTMsMCwxMTYsMTQsMCwKLSAgICAxMjQsNCwwLDEyNCwxLDAsMTA2LDE1LDAsMTMxLDMsMCwxLDEyNCwxLDAsCi0gICAgODMsNDAsMywwLDAsMCwxMTcsODIsMCwwLDAsNzIsMTAxLDEwOCwxMTIsMTAxLAotICAgIDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiw5Nyw5OCwxMDgsMTAxLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKLSAgICAzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMSwKLSAgICAxMTQsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsNDYsMTA1LDAsMCwKLSAgICAwLDAsMTE3LDEsMCwwLDAsNDYsNDAsMTYsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsOTUsOTUsMTE3LDE3LDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LDExNywxOSwwLDAsMCw3OCwKLSAgICAxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwKLSAgICAxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywyNSwwLDAsCi0gICAgMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwKLSAgICAxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCwxMDEsCi0gICAgMTIwLDEwMSw5OSwxMTcsOCwwLDAsMCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwKLSAgICA0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDExLDAsMCwwLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwxMDYsMTAxLDk5LAotICAgIDExNiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLAotICAgIDAsMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw4MCwzLAotICAgIDAsMCwxMTUsMzIsMCwwLDAsMCw0LDksMSwxNSwxLDE4LDEsNiwKLSAgICAxLDMsMSwyMiwxLDEzLDEsMjAsMiwxMiwxLDksMSwxNSwxLDI4LAotICAgIDIsMjUsMSw5LDEsMTksMSwxMTcsMjYsMCwwLDAsOTUsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDk1LDEwOCwxMTEsOTcsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDcwLDQwLDksMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDAsMTExLDk5LDk1LDk1LDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMjAsMCwwLDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LAotICAgIDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTcsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LAotICAgIDExNSwyMSwzLDAsMCwxMTUsMTAsMCwwLDAsMTYsMyw2LDIsMTIsOCwKLSAgICAxMiw0Niw2LDEsMTE3LDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA2Niw5NywxMTUsMTA1LDk5LDExNSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLDExNSwxMDQsMCwwLDAsCi0gICAgMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKLSAgICAxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLDAsMTAwLDMsMCwxMDAsCi0gICAgNCwwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwKLSAgICAwLDkwLDUsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCw5MCw2LDAsCi0gICAgMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTEsMCwxMDAsCi0gICAgMTIsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwKLSAgICAwLDkwLDksMCwxMDAsMTUsMCw4Myw0MCwxNiwwLDAsMCwxMTcsMTIsMCwKLSAgICAwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxMCwwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsCi0gICAgMCw4Myw0MCwyLDAsMCwwLDExNywxMjEsMCwwLDAsNzksMTEyLDExNiwxMDUsCi0gICAgMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE2LDEwNCw5NywxMTYsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAotICAgIDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTA1LDEwOSwxMDEsMzIsNDAsCi0gICAgOTcsMTEwLDMyLDEwNSwxMTAsMTE2LDQxLDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwKLSAgICAxMDAsMzIsMTEyLDk3LDExNiwxMDQsNDQsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDExNSwxMTYsMTE0LDQ2LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDc4LDQwLDEsMCwwLDAsMTE3LDE5LDAsMCwwLAotICAgIDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwKLSAgICAxMTQsMTExLDExNCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMDksMTE2LDEwNSwxMDksMTAxLDEwNiwzLDAsMCwxMTUsMiwwLDAsMCwwLDQsCi0gICAgMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwyMCwwLDAsMCwxMDUsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDAsMTAwLDEsMCw1NCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICAxMTQsMSwwLDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsOTcsMzIsCi0gICAgMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDAsMTA1LDk5LDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsCi0gICAgOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDExNSwxMTYsMTE0LAotICAgIDQxLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgwLDExMSwxMTUsMTE1LDEwNSwKLSAgICA5OCwxMDgsMTAxLDMyLDEwNywxMDEsMTIxLDExNSw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw0NSwzMiwzOSwxMDksMTE2LDEwNSwxMDksMTAxLDM5LDMyLDQwLDEwOSw5NywxMTAsCi0gICAgMTAwLDk3LDExNiwxMTEsMTE0LDEyMSw0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCwKLSAgICAxMTcsMTA5LDEwMSwxMTQsMTA1LDk5LDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsCi0gICAgMzIsMTExLDEwMiwzMiwxMDgsOTcsMTE1LDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDExMSwxMDAsMTAxLDMyLDEwOSwKLSAgICAxMTEsMTAwLDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCw1OSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0NSwzMiwzOSwxMTUsMTA1LDEyMiwxMDEsMzksMzIsNDAsMTExLAotICAgIDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTE1LDEwNSwxMjIsMTAxLDMyLDEwNSwxMTAsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExMSwxMDIsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDk3LDEwMCwzMiw5OCwxMjEsCi0gICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA5LAotICAgIDExNiwxMDUsMTA5LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTEyLDMsMCwwLDExNSwyLDAsMCwwLDAsCi0gICAgMTAsMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwKKyAgICAxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywwLAogICAgIDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwyLDAsCi0gICAgMTI0LDMsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsMTE3LDIyOCwwLDAsCi0gICAgMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LAotICAgIDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LDExMSwzMiw5NywzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsMzIsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwKLSAgICAxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDk5LDExMSwKLSAgICAxMTQsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMTYsMTE0LDk3LDExMCwxMTUsMTAyLDEwMSwxMTQsCi0gICAgMzIsMTEyLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0MCwxLDAsMCwwLDExNyw4LDAsMCwwLDExNSwKLSAgICAxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDAsNCwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEwLDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwwLDAsMCw5NSw5OSwKLSAgICA5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDEyNCwzLDAsCi0gICAgMCwxMTUsMiwwLDAsMCwwLDgsMTE3LDI4LDAsMCwwLDgzLDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICA5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5OSwzLDAsMCwwLDAsMCwKLSAgICAwLDAsMywwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsMCw4Myw0MCwyLDAsCi0gICAgMCwwLDExNywxNTEsMCwwLDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LAotICAgIDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLAotICAgIDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAotICAgIDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwKLSAgICAxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsCi0gICAgMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwKLSAgICAxLDAsMCwwLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsNDAsMywwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwMCw5NywxMTYsOTcsMTM0LDMsMCwwLDExNSwyLDAsMCwwLDAsNiwKLSAgICAxMTcsMjEsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDk5LDIsMCwwLDAsMCwKLSAgICAwLDAsMCw5LDAsMCwwLDQ0LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICA2MiwxLDAsMCwxMDAsMSwwLDEwMCwyLDAsMTA4LDAsMCwxMjUsMiwwLAotICAgIDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjEsCi0gICAgMTksMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMzEsMSwwLDEyNSw0LAotICAgIDAsODcsMTEwLDU4LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCwxMDYsMCwxLAotICAgIDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCwzLDAsMTAwLDQsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLAotICAgIDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMTYsCi0gICAgNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEwNiw3LDAsMTI1LDYsCi0gICAgMCwxMjEsMTksMCwxMjQsMiwwLDEwNiw4LDAsMTI0LDYsMCwxMzEsMSwwLAotICAgIDEyNSw3LDAsODcsMTEwLDU4LDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwyMDQsCi0gICAgMCwxLDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw1LDAsMTAwLAotICAgIDQsMCwxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LAotICAgIDEwMCwyLDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCwKLSAgICA4OCwxMTYsNSwwLDEwNiwxMCwwLDEwMCwyLDAsMTAwLDcsMCwxMzEsMiwwLAotICAgIDEyNSw4LDAsMTIxLDMwLDAsMTI0LDgsMCwxMDYsMTMsMCwxMjQsNCwwLDEwNiwKLSAgICAxMywwLDEyNCw3LDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEzMSwxLDAsODMsCi0gICAgODcsMTEwLDU4LDAsNCwxMTYsMTQsMCwxMDcsMTAsMCwxMTQsNTcsMSwxLDEyNSwKLSAgICA1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw2LDAsMTAwLDQsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLDAsCi0gICAgMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMDAsMiwKLSAgICAwLDgzLDQwLDgsMCwwLDAsMTE3LDUyLDAsMCwwLDY3LDExMSwxMTAsOTksCi0gICAgMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwKLSAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsCi0gICAgMTA1LDAsMCwwLDAsNzgsMTE3LDM5LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwzMiwKLSAgICAxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCw0MSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMjUsMCwwLDAsCi0gICAgNzAsOTcsMTA1LDEwOCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwKLSAgICAzMiwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsMTE3LDI4LDAsMCwwLDcwLDk3LAotICAgIDEwNSwxMDgsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsODQsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDgsMCwwLDAsMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTcsMTIsMCwKLSAgICAwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LDcsMCwwLDAsCi0gICAgNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDExNywKLSAgICA3LDAsMCwwLDY2LDEyMSwxMTYsMTAxLDExNSw3Myw3OSwxMTcsOCwwLDAsMCwKLSAgICAxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsMTE3LDE1LDAsMCwwLDEwMCwxMDEsMTE2LAotICAgIDEwMSw5OSwxMTYsOTUsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDExNywxMSwwLDAsCi0gICAgMCw4MywxMjEsMTEwLDExNiw5NywxMjAsNjksMTE0LDExNCwxMTEsMTE0LDExNywyNSwwLDAsCi0gICAgMCw3MywxMTAsOTksMTE0LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTA4LDc4LDEwMSwxMTksMTA4LAotICAgIDEwNSwxMTAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDYsMCwwLAotICAgIDAsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTgsMCwwLDAsODUsMTEwLDEwNSw5OSwKLSAgICAxMTEsMTAwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDQwLDksCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCwxMTYsMTExLAotICAgIDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICAxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwKLSAgICAxMTcsMywwLDAsMCwxMDEsMTIwLDk5LDExNywxMCwwLDAsMCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsMCwwLDEwMSwxMTAsOTksMTExLAotICAgIDEwMCwxMDUsMTEwLDEwMywxMTcsMTUsMCwwLDAsMTEwLDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLAotICAgIDk1LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTQzLDMsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTIsMSwKLSAgICAxNSwxLDMsMSwxOSwxLDE4LDEsOSwxLDMxLDEsMTgsMSwzLDEsCi0gICAgMTksMSwxOCwxLDksMSwzMSwxLDE4LDEsMywxLDMwLDEsMTgsMSwKLSAgICA5LDEsMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsNDUsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUyLDIsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwKLSAgICAwLDEzMSwxLDAsMTI1LDIsMCwxMDAsMTAsMCwxMjUsMywwLDEyMSwxNiwwLAotICAgIDExNiwyLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDI0LDAsCi0gICAgNCwxMTYsMywwLDEwNywxMCwwLDExNCw2MywwLDEsMSwxLDEwMCwxMCwwLAotICAgIDEyNSw0LDAsODksMTEwLDE0LDEsODgsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNCwKLSAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNSwwLDg3LDExMCwxOCwwLDQsMTE2LAotICAgIDMsMCwxMDcsMTAsMCwxMTQsMTAzLDAsMSwxLDEsODksMTEwLDIzMCwwLDg4LAotICAgIDExNiw1LDAsMTI0LDUsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMTI1LDMsMCwKLSAgICAxMjEsMTksMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSwKLSAgICA2LDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTksMCwKLSAgICAxLDEsMSw4OSwxMTAsMTc0LDAsODgsMTIxLDI4LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTI0LDYsMCwxMjQsNCwwLDEyNCw1LDAsMTMxLDQsMCwKLSAgICAxMjUsNywwLDg3LDExMCwyNCwwLDQsMTE2LDksMCwxMTYsMTAsMCwxMDIsMiwKLSAgICAwLDEwNywxMCwwLDExNCwyMTQsMCwxLDEsMSw4OSwxMTAsMTE5LDAsODgsMTE2LAotICAgIDExLDAsMTAwLDIsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDMsMCwxLDExNiwKLSAgICAxMiwwLDEwNiwxMywwLDEyNCw3LDAsMTMxLDEsMCwxMjUsOCwwLDExNiwxNCwKLSAgICAwLDEyNCw4LDAsMTE2LDE1LDAsMTMxLDIsMCwxMTQsMzgsMSwxMTYsMTYsMCwKLSAgICAxMDYsMTcsMCwxMjQsOCwwLDEyNCwyLDAsMTMxLDIsMCwxLDExNiwxMSwwLAotICAgIDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwwLDEsMTI0LDgsMCw4MywxMDAsNCwKLSAgICAwLDEyNSw5LDAsMTE2LDksMCwxMjQsOSwwLDEwNiwxOCwwLDEyNCw0LDAsCi0gICAgMTMxLDEsMCwxMDAsNSwwLDEyNCwxLDAsMTAwLDYsMCwxMjQsNCwwLDEzMSwKLSAgICAxLDIsMTMwLDEsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwxMCwwLDExNiwxOSwwLDExNiwyMCwwLDEyNCwxMCwwLDEyNCwyLDAsCi0gICAgMTAwLDcsMCwxMDAsOCwwLDEwMCwxMSwwLDEzMSw0LDEsMTI1LDExLDAsMTE2LAotICAgIDExLDAsMTAwLDMsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMTYsMjIsMCwxMDYsCi0gICAgMjMsMCwxMiwxMTQsNDgsMiwxMjQsNCwwLDEwMCwxMCwwLDEwNyw5LDAsMTE0LAotICAgIDQ4LDIsMTI0LDMsMCwxMDAsMTAsMCwxMDcsOSwwLDExNCw0OCwyLDExNiwyNCwKLSAgICAwLDExNiwyNSwwLDEzMSwxLDAsMTI1LDYsMCwxMjQsNiwwLDEwNiwyNiwwLAotICAgIDExNiwyNywwLDEyNCwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDYsMCwKLSAgICAxMDYsMjYsMCwxMTYsMjcsMCwxMTYsMjgsMCwxMjQsMTAsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxLDEyNCw2LDAsMTA2LDI2LDAsMTE2LDEyLDAsMTA2LAotICAgIDI5LDAsMTI0LDExLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTIxLDM2LDAsMTI0LAotICAgIDAsMCwxMDYsMzAsMCwxMjQsMiwwLDEyNCw0LDAsMTI0LDYsMCwxMzEsMywKLSAgICAwLDEsMTE2LDExLDAsMTAwLDksMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywKLSAgICAxMTMsNDgsMiw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDQ0LDIsMSwxLDEsCi0gICAgODksMTEzLDQ4LDIsODgsMTEwLDAsMCwxMjQsMTEsMCw4Myw0MCwxMiwwLDAsCi0gICAgMCwxMTcsMTkwLDAsMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwKKyAgICAwLDAsMTE1LDQ1LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLAorICAgIDEyNCwyLDAsMTMxLDIsMCwxMjUsMywwLDEyNCwzLDAsMTAwLDEsMCwxMDcsCisgICAgOSwwLDExNCwzNywwLDEyNCwzLDAsMTA2LDIsMCw4MywxMDAsMSwwLDgzLAorICAgIDEwMCwxLDAsODMsNDEsMiwxMjIsMzQsNzAsMTA1LDExMCwxMDAsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0Niw3OCw0MSwzLDExNCw3OCwwLAorICAgIDAsMCwxMTQsOCwxLDAsMCwxMTQsMTYzLDAsMCwwLDQxLDQsMTE0LDI0MiwKKyAgICAwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTcyLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw5LDEsMCwwLDExMiw1LDAsMCwxMTUsOCwwLDAsMCwwLAorICAgIDMsMTgsMSwxMiwxLDcsMiwxMjIsMzMsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsCisgICAgODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQxLDEyLDExNCw1NywwLDAsCisgICAgMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwKKyAgICAxMTQsMjIsMSwwLDAsMTE0LDIxLDEsMCwwLDExNCwyMCwxLDAsMCwxMTQsCisgICAgNCwxLDAsMCwxMTQsMTksMSwwLDAsMTE0LDI1LDEsMCwwLDExNCw4LAorICAgIDEsMCwwLDExNCw5LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNiwxLDAsCisgICAgMCw2Miw1LDAsMCwxMTUsMjAsMCwwLDAsMTIsMiw2LDMsNiwzLAorICAgIDYsMiw2LDIsMTgsNywxOCwxNSwzLDEsMjEsMTUsMywxLDExNCwxNiwKKyAgICAxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDY0LDAsMCwwLDExNSw1MiwwLDAsMCwxMDEsMCwwLAorICAgIDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsCisgICAgMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwKKyAgICAwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsOTAsNywwLDEwMCw2LDAsCisgICAgODMsNDEsNywyMTgsMTMsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsCisgICAgOTksMTE1LDEyMiw4Myw2Niw5NywxMTUsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwKKyAgICAxMDIsMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTAsMTAxLAorICAgIDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTgsMTExLDExNiwxMDQsMzIsODMsMTExLDExNywKKyAgICAxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLAorICAgIDMyLDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICA1LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDg4LDAsMCwKKyAgICAwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxMzEsMSwwLDEwMCwxLDAsMjUsMTI1LDIsMCwxMjQsMiwwLDEwNiwyLDAsCisgICAgMTAwLDIsMCwxMDAsMSwwLDEzMSwyLDAsMTAwLDMsMCwyNSwxMjUsMywwLAorICAgIDEyNCwxLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDQsMCwyNSwKKyAgICAxMjUsNCwwLDEyNCwzLDAsMTAwLDUsMCwxMDcsMiwwLDExMSw4NywwLDEyNCwKKyAgICA0LDAsMTAwLDUsMCwxMDcsMywwLDgzLDQxLDYsMTIyLDE0MSw2NywxMTEsMTEwLAorICAgIDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywKKyAgICAxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKKyAgICAzMiw5OCwxMjEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTA1LDExMCwxMDMsMzIsMTA1LDEwMiwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwKKyAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMDMsMTAxLDExNiwKKyAgICA5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTA0LDk3LDExNSwzMiw5NywzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwzOSw5NSw5NSwxMDUsCisgICAgMTEwLDEwNSwxMTYsOTUsOTUsNDYsMTEyLDEyMSwzOSw0NiwxMTQsMjksMCwwLDAsMTE0LAorICAgIDExMCwwLDAsMCwxMTQsNzEsMCwwLDAsMTE0LDEwOSwwLDAsMCwxMTQsNzksCisgICAgMCwwLDAsNDEsNCwxMTQsMzgsMCwwLDAsMTE0LDIzMSwwLDAsMCwxMTQsCisgICAgMzQsMCwwLDAsMTE0LDMyLDAsMCwwLDQxLDUsMTE0LDc4LDAsMCwwLAorICAgIDExNCwxNTIsMCwwLDAsMTE0LDEyNSwwLDAsMCw5MCwxMywxMDIsMTA1LDEwOCwxMDEsCisgICAgMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSw5MCw5LDExNiw5NywxMDUsMTA4LDk1LAorICAgIDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwyMTYsMCwwLDAsMTI4LDUsMCwwLDExNSw4LDAsMCwKKyAgICAwLDAsMywyNSwxLDIyLDEsMTksMSwxMjIsMjQsOTUsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNywKKyAgICA5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDgwLDAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwKKyAgICAyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw1NywwLDExNiwyLDAsMTAwLDIsCisgICAgMCwxMDYsMywwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMTMwLDEsMCwxMTAsMCwwLDExNiw0LDAsMTE2LDUsMCwxMjQsMiwwLDEyNCwKKyAgICAxLDAsMTA2LDYsMCwxMzEsMywwLDEsMTAwLDEsMCw4Myw0MSwzLDEyMiwKKyAgICAxOSw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDQ2LDc4LDEyMiw1Miw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsMTE5LAorICAgIDEwNCwxMDEsMTEwLDMyLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQwLDQxLDMyLDExNCwKKyAgICAxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw3OCwxMTEsMTEwLDEwMSw0MSw3LDExNCwxMCwxLAorICAgIDAsMCwxMTQsNTcsMCwwLDAsMTE0LDE0NywwLDAsMCwxMTQsNDcsMCwwLAorICAgIDAsMTE0LDEwOCwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCw2MywwLDAsMCwKKyAgICA0MSwzLDExNCw3OCwwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCwxODksMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDI1MywwLDAsMCwxMzYsNSwwLDAsMTE1LDEwLDAsMCwwLDAsMiwKKyAgICAxOCwxLDEyLDEsMywxLDI0LDEsMTIyLDI1LDk1LDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw3OCw0MSw4LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsCisgICAgMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMjE2LDAsMCwwLDExNCwKKyAgICAyNTMsMCwwLDAsMTE0LDE3NSwwLDAsMCwxMTQsMCwxLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMjYsMSwwLDAsMTIyLDUsMCwwLDExNSw4LDAsMCwwLAorICAgIDEyLDMsNiwzLDEyLDgsMTIsOCwxMTQsMjYsMSwwLDAsOTksMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw2NCwwLAorICAgIDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsCisgICAgOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDkwLDMsMCwxMDAsCisgICAgMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDUsMCwxMDAsNiwKKyAgICAwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLAorICAgIDkwLDYsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwwLDAsOTAsNywwLDEwMCwKKyAgICAxMSwwLDEwMCwxOCwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLDEsOTAsOCwKKyAgICAwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsOTAsOSwwLDEwMCwxNywwLAorICAgIDgzLDQxLDE5LDIxOCwxMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDEwLDAsMCwwLDExNiwwLDAsMTMwLDEsCisgICAgMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDE3OCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LAorICAgIDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTQsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsCisgICAgOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsMTA5LDEwMSwzMiw0MCw5NywxMTAsMzIsCisgICAgMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAorICAgIDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsODIsOTcsMTA1LDExNSwxMDEsMTE1LDMyLDczLDc5LDY5LDExNCwxMTQsMTExLAorICAgIDExNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsCisgICAgOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk4LDEwMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLAorICAgIDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwxLDIxOCw3LAorICAgIDczLDc5LDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTQ5LDUsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsNiwxMjIsMjMsODMsMTExLDExNywxMTQsOTksCisgICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwKKyAgICAxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDIwLDAsMCwwLDEwNSwxLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMSwwLDU0LDgzLAorICAgIDQxLDIsOTcsMTcwLDEsMCwwLDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLAorICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwNSwxMTAsMTAzLAorICAgIDMyLDk3LDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAwLDEwNSw5OSwxMTYsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsCisgICAgMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAxMTYsMTExLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwKKyAgICAxMTUsMTE2LDExNCw0MSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MCwxMTEsCisgICAgMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMDcsMTAxLDEyMSwxMTUsNTgsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsNDUsMzIsMzksMTA5LDExNiwxMDUsMTA5LDEwMSwzOSwzMiw0MCwKKyAgICAxMDksOTcsMTEwLDEwMCw5NywxMTYsMTExLDExNCwxMjEsNDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTAsMTE3LDEwOSwxMDEsMTE0LDEwNSw5OSwzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiwKKyAgICA5NywxMDksMTEyLDMyLDExMSwxMDIsMzIsMTA4LDk3LDExNSwxMTYsMzIsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OSwxMTEsMTAwLAorICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsNTksMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDUsMzIsMzksMTE1LDEwNSwxMjIsMTAxLDM5LAorICAgIDMyLDQwLDExMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw0MSwzMiwxMDUsMTE1LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExNSwxMDUsMTIyLDEwMSwzMiwxMDUsMTEwLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwKKyAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksCisgICAgMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LAorICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsCisgICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMzIsMTE0LDEwMSw5NywxMDAsCisgICAgMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4Miw5NywxMDUsMTE1LDEwMSwxMTUsMzIsCisgICAgNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsOTgsMTAxLDMyLAorICAgIDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDExNCwxNzgsMCwwLDAsNDEsMSwxMTQsMjksMSwwLDAsNDEsMiwxMTQsCisgICAgNzgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsCisgICAgMTE2LDk3LDExNiwxMTUsMTU3LDUsMCwwLDExNSwyLDAsMCwwLDAsMTEsMTIyLAorICAgIDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLDAsCisgICAgMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLDIsCisgICAgMCw4Myw0MSwxLDEyMiwyMjgsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LAorICAgIDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwKKyAgICAxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLAorICAgIDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLAorICAgIDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwKKyAgICAxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLAorICAgIDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsCisgICAgMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLAorICAgIDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwKKyAgICAxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsCisgICAgMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsMTE2LDExNCw5NywKKyAgICAxMTAsMTE1LDEwMiwxMDEsMTE0LDMyLDExMiwxMDEsMTE0LDEwOSwxMDUsMTE1LDExNSwxMDUsMTExLDExMCwKKyAgICAxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDEsMSwyMTgsOCwxMTUsMTAxLAorICAgIDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDQsMTE0LDc4LDAsMCwwLDExNCwxMzUsMCwKKyAgICAwLDAsOTAsMTAsOTksOTcsOTksMTA0LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsNTMsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDE1LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsMTcwLDUsMCwwLDExNSwyLDAsMCwwLDAsOCwxMjIsMjgsCisgICAgODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk5LDMsMCwwLAorICAgIDAsMCwwLDAsMCwzLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiwxNTAsNzksMTEyLAorICAgIDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwKKyAgICAxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsCisgICAgNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsCisgICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAorICAgIDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsCisgICAgOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw3OCwxMTQsNCwwLDAsMCw0MSwzLDExNCw3OCwwLDAsCisgICAgMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzMSwxLDAsMCwxODAsCisgICAgNSwwLDAsMTE1LDAsMCwwLDAsMTIyLDIxLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwxNiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTA1LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsCisgICAgMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjEsMTksMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsODcsMTEwLDU4LDAsNCwxMTYsCisgICAgMiwwLDEwNywxMCwwLDExNCw5NCwwLDEsMTI1LDQsMCwxLDEyMiwyNiwwLAorICAgIDExNiwzLDAsMTAwLDEsMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMjQsCisgICAgNCwwLDEzMCwyLDAsODcsODksMTAwLDMsMCwxMDAsMywwLDEyNSw0LDAsCisgICAgMTI2LDQsMCw4OCwxMTAsMSwwLDg4LDExNiw0LDAsMTI0LDMsMCwxMzEsMSwKKyAgICAwLDgzLDQxLDQsMTIyLDUyLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwKICAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLAogICAgIDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDgyLDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwKLSAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDMyLDg0LDExMSwzMiwKLSAgICAxMTksMTE0LDEwNSwxMTYsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMzIsMTA5LDExNywxMTUsMTE2LDMyLDk3LDEwOCwxMTUsMTExLDMyLDk4LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDEzLAotICAgIDAsMCwwLDEyMywxMjUsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwxMjMsMTI1LAotICAgIDExNywxOSwwLDAsMCw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsCi0gICAgMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywxMjUsMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsCi0gICAgNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsCi0gICAgMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDEsMTIwLDEwMSw5OSwxMTcsMTIsMCwKLSAgICAwLDAsMTAwLDExMSwxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiwxMTcsMTAsCi0gICAgMCwwLDAsMTE5LDExNCwxMTEsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw3OCw4NCw0MCwKLSAgICAzMSwwLDAsMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEwLDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsMywwLDAsMCwKLSAgICAxMDUsMTEwLDExNiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDExNyw3LDAsMCwwLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjAsMCwwLAotICAgIDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDgsMCwwLDAsNjksNzksNzAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwKLSAgICAxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDExNyw1LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDExNSwxMTcsMTAsMCwKLSAgICAwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNyw0LDAsMCwwLAotICAgIDk1LDEwNSwxMDksMTEyLDExNywxNiwwLDAsMCw5NSwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwwLDEwMiwxMTEsCi0gICAgMTE0LDEwOSw5NywxMTYsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LAotICAgIDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwKLSAgICAxMDEsMTAwLDExNyw3LDAsMCwwLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDExNyw0LAotICAgIDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICAxOSwwLDAsMCwxMDAsMTExLDExMCwxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSwKLSAgICA5NywxMTQsMTE0LDk3LDEyMSwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsNzMsNjcsCi0gICAgOTUsNjYsODksODQsNjksODMsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMDAsMTE3LDcsMCwwLDAsOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMywxMTcsMywwLAotICAgIDAsMCwxMDgsMTAxLDExMCwxMTcsNSwwLDAsMCwxMDAsMTE3LDEwOSwxMTIsMTE1LDExNywKLSAgICAxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAotICAgIDExMSwxMDAsMTAxLDQwLDEyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDExLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsCi0gICAgMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDIsMCwwLDAsMTE1LDExNiwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LAotICAgIDk3LDExNywxMCwwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LDExNiw5NywKLSAgICAxMTcsNSwwLDAsMCwxMDIsMTExLDExNywxMTAsMTAwLDExNywzLDAsMCwwLDEwOSwKLSAgICAxMTUsMTAzLDExNywxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMTEsMCwwLDAsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwKLSAgICAxMDEsOTksMTE2LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTY1LDMsMCwwLAotICAgIDExNSw5OCwwLDAsMCwwLDcsMTUsMSw2LDEsMywxLDE2LDEsMTMsCi0gICAgMSwxMSwyLDMsMSwxOSwxLDEzLDEsNSwyLDE2LDEsMywxLDE5LAotICAgIDEsMTMsMSw1LDIsMywxLDEyLDEsMywxLDEzLDEsMTksMSw1LAotICAgIDIsOSwxLDcsMSwxNSwxLDE1LDEsMTYsMSw2LDEsNywxLDQsCi0gICAgMiw2LDEsMTgsMSwxNSwxLDE1LDEsNiwxLDEyLDEsOSwxLDEzLAotICAgIDEsMjIsMSwxMiwxLDEyLDEsMTksMSwyNSwxLDIyLDEsMywxLDE5LAotICAgIDEsMTcsMSwxMywxLDgsMSwxMTcsMjEsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAotICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDAsMSwKLSAgICAwLDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgyLDEwMSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDExNSwzMiw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMSwxMTAsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDgyLDEwMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTgsCi0gICAgMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDgsMTExLDk3LDEwMCwzMiwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDMyLDg1LDExNSwxMDEsMzIsMTExLAotICAgIDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDEwMCwxMDUsCi0gICAgOTksMTE2LDk3LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwKLSAgICAxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTAzLDEwMSwxMTYsOTUsOTksMTExLAotICAgIDEwMCwxMDEsMzIsMTE3LDExNSwxMDEsMTE1LDQ3LDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDk4LAotICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDQwLDEsMCwwLDAsMTE3LDEyLDAsMCwwLDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMjcsCi0gICAgMywwLDAsMTE1LDIsMCwwLDAsMCw4LDExNywyNCwwLDAsMCw4MywKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDEwLDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDEwLDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsMTUsMCwwLDAsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsOCwwLDAsCi0gICAgMCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDExNywxMCwwLDAsMCwxMDMsMTAxLAotICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LAotICAgIDk1LDk5LDExMSwxMDAsMTAxLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMDQsMywwLDAsMTE1LDE0LDAsMCwwLDE2LAotICAgIDIsMTIsNiwxMiwxMiwxMiwxMCwxMiw5LDEyLDIyLDEyLDYyLDExNywxMiwwLAotICAgIDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLDAsMiwKLSAgICAwLDAsMCwxMTUsOTIsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLAotICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwKLSAgICAwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAxLDUsMCwxMzUsMCwwLAotICAgIDEwMiwxLDAsMTAwLDQsMCwxMDAsNSwwLDEzNCwwLDAsMTMxLDEsMCw5MCwKLSAgICA2LDAsMTAxLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwKLSAgICAwLDkwLDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw4LDAsCi0gICAgMTM1LDAsMCw4Myw0MCwxMCwwLDAsMCwxMTcsMTAsMCwwLDAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMDMsMCwwLDAsNjYsOTcsMTE1LAotICAgIDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSwxMDgsCi0gICAgOTcsMTE1LDExNSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgMTEyLDExNCwxMTEsMTE2LDExMSw5OSwxMTEsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwKLSAgICAzMiwxMTYsMTA0LDk3LDExNiwxMCwzMiwzMiwzMiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDExNywxMTUsCi0gICAgOTcsMTAzLDEwMSw0Niw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsCi0gICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwKLSAgICAwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsCi0gICAgMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw3NSwwLDAsMCw2Nyw5NywKLSAgICA5OSwxMDQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCwKLSAgICA5NywxMDksMTAxLDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCi0gICAgMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAyLDExMSwxMTcsCi0gICAgMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNzgsNDAsMiwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMjQzLDMsCi0gICAgMCwwLDExNSw0LDAsMCwwLDAsMyw5LDEsMTE3LDE5LDAsMCwwLAotICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLAotICAgIDExNiwxLDAsMTI0LDAsMCwxMzEsMiwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDI2LDAsMCwwLDc2LDExMSw5NywKLSAgICAxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDk3LDMyLDEwMiwxMDUsMTA4LDEwMSw0Niw0MCwzLDAsMCwwLDExNyw1LDAsMCwKLSAgICAwLDExNSwxMTcsMTEyLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDEsMCwwLDAsMTE3LDksMCwwLDAsOTUsOTUsOTksMTA4LDk3LDExNSwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwKLSAgICAxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDI0OSwzLDAsMCwxMTUsMiwKLSAgICAwLDAsMCwwLDUsMTE3LDIyLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwKLSAgICA4Myw0MCwxLDAsMCwwLDExNyw1OCwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LAotICAgIDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwwLDQsMCwwLDExNSwKLSAgICAyLDAsMCwwLDAsMywxMTcsMjMsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw4LAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLDAsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTQzLDE3LDAsMTI1LDIsCi0gICAgMCwxMjQsMiwwLDEwNiwyLDAsMTMxLDAsMCw4Myw4NywxMDAsMiwwLDgxLAotICAgIDg4LDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMzksMCwwLDAsODIsCi0gICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsOTcsMTE2LDk3LDMyLDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5NywxMTUsMzIsMTE0LDk3LDExOSwzMiwKLSAgICA5OCwxMjEsMTE2LDEwMSwxMTUsNDYsMTE3LDEsMCwwLDAsMTE0LDc4LDQwLDMsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSwxMTcsNiwwLDAsMCw3MCwKLSAgICAxMDUsMTA4LDEwMSw3Myw3OSwxMTcsNCwwLDAsMCwxMTQsMTAxLDk3LDEwMCw0MCwzLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDUsNCwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwyLDIxLDEsMTE3LDE5LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDksMCwwLAotICAgIDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLAotICAgIDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywKLSAgICAwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSwKLSAgICA5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTAwLDk3LDExNiw5Nyw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwxLAotICAgIDAsMCwwLDExNyw5LDAsMCwwLDk1LDk1LDk5LDEwOCw5NywxMTUsMTE1LDk1LAotICAgIDk1LDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDIzOCwzLDAsMCwxMTUsMTAsMCwwLDAsMTYsMyw2LDIsMTIsCi0gICAgNiwyNCw3LDE4LDUsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCw0LDAsMCwwLDY2LDAsMCwwLDExNSw2OCwwLDAsMCwxMjQsMCwKLSAgICAwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLAorICAgIDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0NiwxMjIsMzksMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSwzMiwxMTAsMTExLDExNiwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLAorICAgIDMyLDExNiwxMDQsMTE0LDExMSwxMTcsMTAzLDEwNCwzMiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LAorICAgIDk3LDQwLDQxLDExNCw2NywwLDAsMCw3OCw0MSw1LDExNCwyMzEsMCwwLDAsCisgICAgMjE4LDgsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTQsNDAsMCwwLDAsMTE0LAorICAgIDE0NywwLDAsMCwxMTQsMTk4LDAsMCwwLDQxLDUsMTE0LDc4LDAsMCwwLAorICAgIDExNCwxNTIsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxOTYsMCwwLDAsMjE4LAorICAgIDMsMTAxLDEyMCw5OSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMTEsMSwwLDAsMTg3LDUsMCwwLDExNSwxNCwwLDAsCisgICAgMCwwLDIsMTUsMSwzLDEsMTksMSwxOCwxLDksMSwzMSwxLDEyMiwKKyAgICAyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsCisgICAgMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMjE4LDksOTUsMTExLDExMiwxMTYsMTA1LDEwOSwKKyAgICAxMDUsMTIyLDEwMSwxMTQsMjksMCwwLDAsOTksMywwLDAsMCwxLDAsMCwKKyAgICAwLDQsMCwwLDAsOSwwLDAsMCw2NywwLDAsMCwxMTUsMzEsMCwKKyAgICAwLDAsMTE2LDAsMCwxMTYsMSwwLDEyNCwxLDAsMTI0LDIsMCwxMDAsMSwKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMDAsNCwwLDEyNCwzLDAsMTMxLDQsMiwKKyAgICA4Myw0MSw1LDEyMiwxMzAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsOTksMTExLDEwOSwxMTIsCisgICAgMTA1LDEwOCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksCisgICAgMTAwLDk3LDExNiw5NywzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsOTksCisgICAgOTcsMTEwLDMyLDk4LDEwMSwzMiw5NywxMTAsMTIxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwKKyAgICAzMiwxMTYsMTIxLDExMiwxMDEsMzIsMTE2LDEwNCw5NywxMTYsMzIsOTksMTExLDEwOSwxMTIsMTA1LAorICAgIDEwOCwxMDEsNDAsNDEsMzIsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDExNSw0NiwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTcwLDAsMCwwLDIxOCwxMiwxMDAsMTExLAorICAgIDExMCwxMTYsOTUsMTA1LDExMCwxMDQsMTAxLDExNCwxMDUsMTE2LDg0LDExNCwxMTIsMCwwLDAsCisgICAgNDEsMiwxMTQsMTA4LDAsMCwwLDIxOCw3LDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLAorICAgIDQxLDQsMTE0LDc4LDAsMCwwLDExNCw1MywwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDM1LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwxNCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNiwxMTEsCisgICAgOTUsOTksMTExLDEwMCwxMDEsMTk3LDUsMCwwLDExNSw0LDAsMCwwLDAsNSwKKyAgICAxOCwxLDEyMiwyNyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ2LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE2LDExMSw5NSw5OSwxMTEsMTAwLDEwMSw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsNDUsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDE3NywxLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEyNSwyLDAsMTAwLDEsMCwxMjUsMywwLDEyMSwxNiwKKyAgICAwLDExNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDI0LAorICAgIDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw2MywwLDEsMSwxLDEwMCwxLAorICAgIDAsMTI1LDQsMCw4OSwxMTAsMjAyLDAsODgsMTIxLDE5LDAsMTI0LDAsMCwxMDYsCisgICAgMywwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNSwwLDg3LDExMCwxOCwwLDQsCisgICAgMTE2LDQsMCwxMDcsMTAsMCwxMTQsMTAzLDAsMSwxLDEsODksMTEwLDE2MiwwLAorICAgIDg4LDExNiw1LDAsMTI0LDUsMCwxMDAsMiwwLDI1LDEzMSwxLDAsMTI1LDMsCisgICAgMCwxMjEsMTksMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLAorICAgIDEyNSw2LDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTksCisgICAgMCwxLDEsMSw4OSwxMTAsMTA2LDAsODgsMTIxLDM0LDAsMTE2LDgsMCwxMjQsCisgICAgNiwwLDEwMCwzLDAsMTI0LDUsMCwxMDAsNCwwLDEyNCwxLDAsMTAwLDUsCisgICAgMCwxMjQsNCwwLDEzMSwxLDMsMTI1LDcsMCw4NywxMTAsMjQsMCw0LDExNiwKKyAgICA5LDAsMTE2LDEwLDAsMTAyLDIsMCwxMDcsMTAsMCwxMTQsMjIwLDAsMSwxLAorICAgIDEsODksMTEwLDQ1LDAsODgsMTE2LDExLDAsMTAwLDYsMCwxMjQsNCwwLDEyNCwKKyAgICAyLDAsMTMxLDMsMCwxLDExNiwxMiwwLDEyNCw3LDAsMTAwLDQsMCwxMjQsCisgICAgMSwwLDEwMCw3LDAsMTI0LDQsMCwxMDAsOCwwLDEyNCwyLDAsMTMxLDEsCisgICAgMyw4MywxMjQsMCwwLDEwNiw2LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw4LAorICAgIDAsMTI0LDAsMCwxMDYsMTMsMCwxMjQsOCwwLDEyNCwyLDAsMTMxLDIsMCwKKyAgICAxMjUsOSwwLDExNiwxMSwwLDEwMCw5LDAsMTI0LDIsMCwxMzEsMiwwLDEsCisgICAgMTE2LDE0LDAsMTA2LDE1LDAsMTIsMTE0LDE3MywxLDEyNCw0LDAsMTAwLDEsMCwKKyAgICAxMDcsOSwwLDExNCwxNzMsMSwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsCisgICAgMTczLDEsMTE2LDE2LDAsMTI0LDksMCwxMjQsMywwLDExNiwxNywwLDEyNCw4LAorICAgIDAsMTMxLDEsMCwxMzEsMywwLDEyNSw2LDAsMTIxLDM2LDAsMTI0LDAsMCwKKyAgICAxMDYsMTgsMCwxMjQsMiwwLDEyNCw0LDAsMTI0LDYsMCwxMzEsMywwLDEsCisgICAgMTE2LDExLDAsMTAwLDEwLDAsMTI0LDQsMCwxMzEsMiwwLDEsODcsMTEzLDE3MywKKyAgICAxLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsMTY5LDEsMSwxLDEsODksMTEzLAorICAgIDE3MywxLDg4LDExMCwwLDAsMTI0LDksMCw4Myw0MSwxMSwxMjIsMTkwLDY3LDExMSwKKyAgICAxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAorICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgyLDEwMSw5NywxMDAsMTA1LDExMCwKKyAgICAxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTQsMTAxLAorICAgIDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LAorICAgIDExNSwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLAorICAgIDExNiwxMDEsMTAwLDQ2LDMyLDg0LDExMSwzMiwxMTksMTE0LDEwNSwxMTYsMTAxLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LDMyLAorICAgIDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk3LDEwOCwKKyAgICAxMTUsMTExLDMyLDk4LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsCisgICAgMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDExNCwxNzgsMCwKKyAgICAwLDAsMTE0LDE4MiwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDEyMiwxMywxMjMsMTI1LDMyLDEwOSw5NywxMTYsOTksMTA0LDEwMSwxMTUsMzIsMTIzLDEyNSwKKyAgICAxMTQsMTM0LDAsMCwwLDExNCwxMzUsMCwwLDAsMTIyLDE5LDk5LDExMSwxMDAsMTAxLAorICAgIDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDEyNSwxMjIsCisgICAgMTAsMTE5LDExNCwxMTEsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw0MSwxOSwxMTQsMjMxLDAsCisgICAgMCwwLDExNCwxMjYsMCwwLDAsMTE0LDExOCwwLDAsMCwxMTQsMzAsMSwwLAorICAgIDAsMTE0LDI4LDEsMCwwLDExNCwxNCwwLDAsMCwxMTQsMzMsMSwwLDAsCisgICAgMTE0LDQwLDAsMCwwLDExNCwxODUsMCwwLDAsMTE0LDE0NywwLDAsMCwxMTQsCisgICAgMTgxLDAsMCwwLDExNCwxNDYsMCwwLDAsMTE0LDE5MCwwLDAsMCwxMTQsMzgsCisgICAgMSwwLDAsMTE0LDcsMCwwLDAsMjE4LDE5LDEwMCwxMTEsMTEwLDExNiw5NSwxMTksCisgICAgMTE0LDEwNSwxMTYsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxOTMsMCwKKyAgICAwLDAsMTE0LDMxLDAsMCwwLDExNCwzMiwxLDAsMCw0MSwxMCwxMTQsNzgsCisgICAgMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMTM1LDAsMCwwLDExNCwxODMsMCwKKyAgICAwLDAsMTE0LDEzNCwwLDAsMCwyMTgsMiwxMTUsMTE2LDExNCw1MywwLDAsMCwKKyAgICAyMTgsMTAsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMCw5NywxMTYsOTcsMTE0LDE5NiwwLDAsCisgICAgMCw5MCwxMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwLDEsCisgICAgMCwwLDIwNSw1LDAsMCwxMTUsNzgsMCwwLDAsMCw3LDE1LDEsNiwKKyAgICAxLDMsMSwxNiwxLDEzLDEsMTEsMiwzLDEsMTksMSwxMywxLDUsCisgICAgMiwxNiwxLDMsMSwxOSwxLDEzLDEsNSwyLDMsMSw5LDEsMTIsCisgICAgMSwxMywxLDE5LDEsNSwyLDksMSw3LDEsMTUsMSw2LDEsNywKKyAgICAxLDE1LDEsMTgsMSwxMywxLDIyLDEsMTIsMSw5LDEsMTUsMSwzLAorICAgIDEsMTksMSwxNywxLDEzLDEsOCwxLDEyMiwyMSw4MywxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLAorICAgIDc4LDExNCwxMzIsMCwwLDAsNDEsMTAsMTE0LDU3LDAsMCwwLDExNCw1NiwwLAorICAgIDAsMCwxMTQsNTgsMCwwLDAsMTE0LDI5LDEsMCwwLDExNCwzMCwxLDAsCisgICAgMCwxMTQsMzIsMSwwLDAsMTE0LDMxLDEsMCwwLDExNCwxMSwxLDAsMCwKKyAgICAxMTQsMzgsMSwwLDAsMTE0LDEwLDEsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNywKKyAgICAxLDAsMCwxNDcsNSwwLDAsMTE1LDE0LDAsMCwwLDEyLDIsMTIsOCwKKyAgICAxMiwxMywxMiwxMCwxMiw3LDEyLDEwLDE4LDgsMTE0LDI3LDEsMCwwLDk5LAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgMCwwLDAsMCwxMTUsODgsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLAorICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywKKyAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMSw1LDAsMTM1LDAsMCwxMDIsMSwwLAorICAgIDEwMCw0LDAsMTAwLDUsMCwxMzQsMCwwLDEzMSwxLDAsOTAsNiwwLDEwMSwKKyAgICA1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LAorICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsOCwwLDEzNSwwLDAsCisgICAgODMsNDEsMTAsMjE4LDEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsCisgICAgMTAzLDY2LDk3LDExNSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMDksCisgICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDMyLDExMiwxMTQsMTExLDExNiwxMTEsOTksMTExLDEwOCwzMiwxMDksMTAxLDExNiwKKyAgICAxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwKKyAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLAorICAgIDEwOSwzMiwxMTcsMTE1LDk3LDEwMywxMDEsNDYsOTksMywwLDAsMCwwLDAsMCwKKyAgICAwLDMsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwKKyAgICAwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLAorICAgIDAsOTUsMSwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNzUsNjcsOTcsOTksMTA0LAorICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LAorICAgIDEwMSwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKKyAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsCisgICAgMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDc4LDQxLDIsMTE0LDY3LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCw0MSwzLDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsMCwwLAorICAgIDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsNzksMCwwLDAsNiw2LDAsMCwxMTUsNCwwLAorICAgIDAsMCwwLDMsOSwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKKyAgICAxMTUsMjIsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDIsCisgICAgMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MSwxLDEyMiwyNiw3NiwKKyAgICAxMTEsOTcsMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTQsMTExLAorICAgIDEwOSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsNDYsNDEsMywyMTgsNSwxMTUsMTE3LDExMiwKKyAgICAxMDEsMTE0LDExNCw0MiwxLDAsMCwxMTQsMCwxLDAsMCw0MSwyLDExNCw3OCwKKyAgICAwLDAsMCwxMTQsMTUyLDAsMCwwLDQxLDEsMTE0LDIyMSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMCwxLDAsMCwxMiw2LAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCw4Myw0MSwxLDEyMiw1OCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwKKyAgICAxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAorICAgIDQxLDEsMTE0LDM1LDAsMCwwLDQxLDIsMTE0LDc4LDAsMCwwLDExNCwxNTIsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDIzMSwwLDAsMCwyMSw2LDAsMCwxMTUsMiwwLDAsMCwKKyAgICAwLDMsMTIyLDIzLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsCisgICAgMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDMsMCwwLDAsOCwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNDEsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTAwLDEsCisgICAgMCwxMzEsMiwwLDE0MywxNywwLDEyNSwyLDAsMTI0LDIsMCwxMDYsMiwwLAorICAgIDEzMSwwLDAsODMsODcsMTAwLDIsMCw4MSw4OCwxMDAsMiwwLDgzLDQxLDMsCisgICAgMTIyLDM5LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiwKKyAgICA5NywzMiwxMDIsMTE0LDExMSwxMDksMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE1LDMyLDExNCwKKyAgICA5NywxMTksMzIsOTgsMTIxLDExNiwxMDEsMTE1LDQ2LDIxOCwxLDExNCw3OCw0MSwzLDExNCwKKyAgICA0OSwwLDAsMCwxMTQsNTAsMCwwLDAsOTAsNCwxMTQsMTAxLDk3LDEwMCw0MSwKKyAgICAzLDExNCw3OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDU0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAzMywxLDAsMCwyNiw2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMjEsCisgICAgMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsCisgICAgMTE2LDk1LDEwMCw5NywxMTYsOTcsNDEsOSwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsCisgICAgMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDc5LDAsMCwKKyAgICAwLDExNCwxNTAsMCwwLDAsMTE0LDAsMSwwLDAsMTE0LDIzMSwwLDAsMCwKKyAgICAxMTQsMzMsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsNDEsCisgICAgMSwxMTQsMjIxLDAsMCwwLDExNCw1LDAsMCwwLDExNCw0MiwxLDAsMCwKKyAgICAxLDYsMCwwLDExNSwxMCwwLDAsMCwxMiwzLDYsMiwxMiw2LDI0LAorICAgIDksMTgsNSwxMTQsNDIsMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsNCwwLDAsMCw2NCwwLDAsMCwxMTUsNjQsMCwKKyAgICAwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsCiAgICAgMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLAogICAgIDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCwKICAgICA3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDEsOTAsNiwwLDEwMCwxMCwKLSAgICAwLDgzLDQwLDExLDAsMCwwLDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw2MiwwLDAsCi0gICAgMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDM5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDAsMTI1LDIsMCwxMDUsMiwwLDEyNCwyLDAsMTA2LDIsCi0gICAgMCwxMDAsMSwwLDU0LDEyNCwyLDAsMTA2LDMsMCwxMDAsMiwwLDU0LDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDMzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMTcsNSwwLDAsMCwKLSAgICAxMDksMTE2LDEwNSwxMDksMTAxLDExNyw0LDAsMCwwLDExNSwxMDUsMTIyLDEwMSw0MCw0LAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsCi0gICAgMTE1LDExNiw5NywxMTYsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNyw3LDAsMCwwLDExNSwxMTYsOTUsMTE1LDEwNSwxMjIsMTAxLDQwLDMsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNywyLDAsMCwwLDExNSwxMTYsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDE1LDQsMCwwLDExNSw0LDAsMCwwLDAsCi0gICAgMiwxNSwxLDExNywyNywwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsCi0gICAgOTcsMTE2LDExNSw5OSw0LDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKLSAgICAxMywwLDAsMCw2NywwLDAsMCwxMTUsODEsMCwwLDAsMTIxLDIyLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMDYsMiwwLDEyNSwKLSAgICA0LDAsODcsMTEwLDI0LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCw0OCwwLAotICAgIDEsMSwxLDEwMCwxLDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LAotICAgIDAsMTAwLDIsMCw3OSwxMjUsNCwwLDEyNCwwLDAsMTA2LDQsMCwxMjQsMiwKLSAgICAwLDEyNCwzLDAsMTAwLDMsMCwxMjQsNCwwLDEzMSwyLDEsODMsNDAsNCwKLSAgICAwLDAsMCw3OCwxMDUsMTgyLDEsMCwwLDEwNSwxMjgsMCwwLDAsMTE3LDUsCi0gICAgMCwwLDAsOTUsMTA5LDExMSwxMDAsMTAxLDQwLDUsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsOTUsMTExLDExNSwxMTcsNCwwLDAsMCwxMTUsMTE2LDk3LDExNiwxMTcsNywKLSAgICAwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTEsMTAwLDEwMSwxMTcsNywwLDAsMCw3OSwKLSAgICA4Myw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTAwLAotICAgIDk3LDExNiw5Nyw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsMTEsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5NywxMTcsNCwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTUsMCwwLDAsOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwyMCw0LDAsMCwxMTUsMTIsMCwwLDAsMCwyLAotICAgIDMsMSwyMiwxLDEzLDEsMTEsMywxMCwxLDExNywzMiwwLDAsMCw4MywKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LAotICAgIDUsMCwwLDAsOTUsMTA5LDExMSwxMDAsMTAxLDEwNSwxODIsMSwwLDAsOTksMywKLSAgICAwLDAsMCwxLDAsMCwwLDksMCwwLDAsMTgsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUzLDEsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwKLSAgICAwLDkyLDIsMCwxMjUsNCwwLDEyNSw1LDAsMTAzLDAsMCwxMjUsNiwwLAotICAgIDEyMCw1NCwwLDEyNCw0LDAsMTE0LDgwLDAsMTE2LDEsMCwxMjQsNCwwLDEzMSwKLSAgICAxLDAsMTIsMTE0LDgwLDAsMTE2LDAsMCwxMjQsNCwwLDEzMSwxLDAsOTIsCi0gICAgMiwwLDEyNSw0LDAsMTI1LDcsMCwxMjQsNiwwLDEwNiwyLDAsMTI0LDcsCi0gICAgMCwxMzEsMSwwLDEsMTEzLDI3LDAsODcsMTIwLDEzMiwwLDExNiwzLDAsMTI0LAotICAgIDYsMCwxMzEsMSwwLDY4LDkzLDExOCwwLDEyNSw3LDAsMTE2LDQsMCwxMjQsCi0gICAgNCwwLDEyNCw3LDAsMTMxLDIsMCwxMjUsNCwwLDEyMSwxNywwLDExNiw1LAotICAgIDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwxLDAsMSw4NywxMTMsOTQsMCw0LAotICAgIDExNiw3LDAsMTA3LDEwLDAsMTE0LDE1NSwwLDEsMSwxLDExOSw5NCwwLDg5LAotICAgIDExMyw5NCwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjExLDAsMSwxMjUsOCwKLSAgICAwLDEsMTIyLDI1LDAsMTE2LDksMCwxMDAsMSwwLDEyNCw0LDAsMTI0LDgsCi0gICAgMCwxMzEsMywwLDEsMTAwLDIsMCw4Myw4Nyw4OSwxMDAsMiwwLDEwMCwyLAotICAgIDAsMTI1LDgsMCwxMjYsOCwwLDg4LDExMyw5NCwwLDg4LDExMyw5NCwwLDg3LAotICAgIDEyMSwzMywwLDExNiwxMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwKLSAgICAzLDAsMSwxMTYsOSwwLDEwMCwzLDAsMTI0LDEsMCwxMzEsMiwwLDEsCi0gICAgODcsMTEwLDUzLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCw0OCwxLDEsMTI1LAotICAgIDgsMCwxLDEyMiwyMSwwLDExNiw5LDAsMTAwLDEsMCwxMjQsMSwwLDEyNCwKLSAgICA4LDAsMTMxLDMsMCwxLDg3LDg5LDEwMCwyLDAsMTAwLDIsMCwxMjUsOCwKLSAgICAwLDEyNiw4LDAsODgsMTEwLDEsMCw4OCwxMDAsMiwwLDgzLDQwLDQsMCwKLSAgICAwLDAsMTE3LDI3LDAsMCwwLDg3LDExNCwxMDUsMTE2LDEwMSwzMiw5OCwxMjEsMTE2LAotICAgIDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LAotICAgIDEwMSw0NiwxMTcsMjcsMCwwLDAsOTksMTExLDExNywxMDgsMTAwLDMyLDExMCwxMTEsMTE2LAotICAgIDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsCi0gICAgMTE0LDEyNSw3OCwxMTcsMTIsMCwwLDAsOTksMTE0LDEwMSw5NywxMTYsMTAxLDEwMCwzMiwKLSAgICAxMjMsMzMsMTE0LDEyNSw0MCwxMSwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsNiwwLDAsMCw5NywxMTIsCi0gICAgMTEyLDEwMSwxMTAsMTAwLDExNyw4LDAsMCwwLDExNCwxMDEsMTE4LDEwMSwxMTQsMTE1LDEwMSwKLSAgICAxMDAsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwKLSAgICAxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw1LDAsMCwwLDEwOSwxMDcsMTAwLAotICAgIDEwNSwxMTQsMTE3LDE1LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDY5LDEyMCwxMDUsMTE1LDExNiwKLSAgICAxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsCi0gICAgMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDEzLDAsMCwwLDk1LDExOSwxMTQsMTA1LAotICAgIDExNiwxMDEsOTUsOTcsMTE2LDExMSwxMDksMTA1LDk5LDQwLDksMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDUsMCwwLDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTAxLDExNyw2LDAsMCwwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNywxMCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTIsOTcsMTE0LDExNiwxMTUsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNCwxMTYsMTE3LDMsMCwwLDAsMTAxLDEyMCw5OSw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LDk1LAotICAgIDEwMCw5NywxMTYsOTcsMzEsNCwwLDAsMTE1LDM4LDAsMCwwLDAsMiwxOCwKLSAgICAxLDYsMiwyMiwxLDE4LDEsMTcsMiwxOSwxLDE1LDEsMywxLDE3LAotICAgIDEsMTMsMiw3LDEsMTgsMywxNiwxLDI3LDEsMywxLDE2LDEsMTcsCi0gICAgMSwxOCwyLDExNywyNSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsCi0gICAgOTcsNzgsNDAsNywwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsCi0gICAgMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsCi0gICAgMTUsMCwwLDAsOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsCi0gICAgMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExLDQsMCwwLDExNSw4LDAsMCwwLDE2LDIsCi0gICAgNiwyLDEyLDUsMTIsMTEsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLDAsMCwKLSAgICAxMTUsNjIsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsCi0gICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsCi0gICAgOCwwLDgzLDQwLDksMCwwLDAsMTE3LDIwLDAsMCwwLDgzLDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNyw0NSwwLDAsMCw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDUsCi0gICAgOTksMTA0LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTE1LDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwwLDAsMTI0LDAsMCwKLSAgICAxMDYsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzMSwxLDEsODMsCi0gICAgNDAsMywwLDAsMCw3OCwxMTcsMTAsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwxMDgsMTAxLDExNSwxMTUsODQsNDAsMiwwLDAsMCwxMTcsMTIsMCwwLDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLAotICAgIDAsODQsMTE0LDExNywxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDY0LDQsMCwwLAotICAgIDExNSwyLDAsMCwwLDAsMSwxMTcsMzIsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDYsMCwwLDAsNiwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMTM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwzLDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwxLDAsMTI0LDMsMCwKLSAgICAxMjQsMiwwLDEwMCwwLDAsMTMxLDQsMCwxMjUsNCwwLDExNiw0LDAsMTA2LAotICAgIDUsMCwxMjQsNCwwLDEzMSwxLDAsMTI1LDUsMCwxMTYsNiwwLDEyNCw1LAotICAgIDAsMTE2LDcsMCwxMzEsMiwwLDExNCwxMDEsMCwxMTYsOCwwLDEwMCwxLDAsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDEsMTI0LDUsMCw4MywxMTYsOSwwLDEwMCwyLAotICAgIDAsMTA2LDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEwMCwzLDAsMTI0LDEsMCwKLSAgICAxMDAsNCwwLDEyNCwyLDAsMTMxLDEsMiwxMzAsMSwwLDEwMCwwLDAsODMsCi0gICAgNDAsNSwwLDAsMCw3OCwxMTcsMjEsMCwwLDAsOTksMTExLDEwMCwxMDEsMzIsCi0gICAgMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSwKLSAgICAxMTcsMjEsMCwwLDAsNzgsMTExLDExMCw0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsCi0gICAgMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwxMjMsMTI1LDExNyw0LDAsMCwwLDExMCwKLSAgICA5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDExLDAsMCwKLSAgICAwLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsCi0gICAgMjAsMCwwLDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwKLSAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDEwOCwxMTEsOTcsMTAwLDExNSwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLAotICAgIDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMTAsMCwwLDAsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsCi0gICAgMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsMCwwLDAsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiw0MCw2LDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LAotICAgIDExNiw5NywxMTcsMTAsMCwwLDAsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMCw5NywxMTYsCi0gICAgOTcsMTE3LDUsMCwwLDAsMTAyLDExMSwxMTcsMTEwLDEwMCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDk5LDExMSwxMDAsMTAxLDY3LDQsMCwwLDExNSwxOCwwLDAsMCwwLDEsMTUsCi0gICAgMSwxNSwxLDI0LDEsMTUsMSwxNSwxLDEzLDEsNCwyLDE4LDEsMTE3LAotICAgIDI5LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCi0gICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDExNywzOSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTUsCi0gICAgMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LAotICAgIDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzksNCwwLDAsMTE1LDIsMCwwLDAsMCwyLAotICAgIDExNywzMSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLAotICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDc4LDQwLDcsMCwwLDAsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLAotICAgIDk5LDk1LDk1LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwKLSAgICAxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMjAsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjAsNCwwLDAsMTE1LDgsMCwwLAotICAgIDAsMTYsMiw2LDIsMTIsMywxMiwxMiwxMTcsMjAsMCwwLDAsODMsMTExLAotICAgIDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNSwKLSAgICAwLDAsMCw2NiwwLDAsMCwxMTUsMTA0LDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwKLSAgICAzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMSw1LAotICAgIDAsMTAxLDYsMCwxMDEsNywwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDgsMCwxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTMyLDAsMCw5MCw5LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLAotICAgIDAsOTAsMTAsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDkwLDExLDAsCi0gICAgMTAwLDEyLDAsODMsNDAsMTMsMCwwLDAsMTE3LDE5LDAsMCwwLDY5LDEyMCwKLSAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNyw5MywwLDAsMCw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsCisgICAgMCw4Myw0MSwxMSwyMTgsMTYsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsNjIsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsCisgICAgMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLAorICAgIDExMSwxMDIsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwKKyAgICAxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsCisgICAgMTIxLDExNSwxMTYsMTAxLDEwOSw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzNiwwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEwNSwyLDAsMTI0LAorICAgIDIsMCwxMDYsMSwwLDEwMCwxLDAsNTQsMTI0LDIsMCwxMDYsMiwwLDEwMCwKKyAgICAyLDAsNTQsODMsNDEsMywxMjIsMzMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMiwxMTEsMTE0LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDQ2LDExNCwxNzgsMCwwLDAsMTE0LDE3OSwKKyAgICAwLDAsMCw0MSwzLDExNCwzOSwwLDAsMCwyMTgsOCwxMTUsMTE2LDk1LDEwOSwKKyAgICAxMTYsMTA1LDEwOSwxMDEsOTAsNywxMTUsMTE2LDk1LDExNSwxMDUsMTIyLDEwMSw0MSwzLDExNCwKKyAgICA3OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQwLDEsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzMCwxLAorICAgIDAsMCwzNiw2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTIsMSwxMjIsCisgICAgMjcsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLDAsCisgICAgMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMzQsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LAorICAgIDQsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMjQsMywwLDEwMCwxLAorICAgIDAsMTI0LDQsMCwxMzEsMiwxLDgzLDQxLDIsNzgsMjE4LDUsOTUsMTA5LDExMSwKKyAgICAxMDAsMTAxLDQxLDIsMTE0LDEzOCwwLDAsMCwxMTQsMzEsMSwwLDAsNDEsNSwKKyAgICAxMTQsNzgsMCwwLDAsMTE0LDEzNSwwLDAsMCwxMTQsMTM0LDAsMCwwLDExNCwKKyAgICA1MywwLDAsMCwxMTQsNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDMyLDEsMCwwLDQxLDYsMCwKKyAgICAwLDExNSw0LDAsMCwwLDAsMiwxMiwxLDEyMiwzMiw4MywxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQ3LDEsMCwKKyAgICAwLDEwNSwxODIsMSwwLDAsOTksMywwLDAsMCwxLDAsMCwwLDksCisgICAgMCwwLDAsMTgsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDEsMCwwLAorICAgIDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsNCwwLDEyNSwKKyAgICA1LDAsMTAzLDAsMCwxMjUsNiwwLDEyMCw1NCwwLDEyNCw0LDAsMTE0LDgwLAorICAgIDAsMTE2LDEsMCwxMjQsNCwwLDEzMSwxLDAsMTIsMTE0LDgwLDAsMTE2LDAsCisgICAgMCwxMjQsNCwwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LDAsMTI1LDcsMCwKKyAgICAxMjQsNiwwLDEwNiwyLDAsMTI0LDcsMCwxMzEsMSwwLDEsMTEzLDI3LDAsCisgICAgODcsMTIwLDEzMiwwLDExNiwzLDAsMTI0LDYsMCwxMzEsMSwwLDY4LDkzLDExOCwKKyAgICAwLDEyNSw3LDAsMTE2LDQsMCwxMjQsNCwwLDEyNCw3LDAsMTMxLDIsMCwKKyAgICAxMjUsNCwwLDEyMSwxNywwLDExNiw1LDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwKKyAgICAxLDAsMSw4NywxMTMsOTQsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDE1NSwKKyAgICAwLDEsMSwxLDExOSw5NCwwLDg5LDExMyw5NCwwLDQsMTE2LDgsMCwxMDcsCisgICAgMTAsMCwxMTQsMjExLDAsMSwxMjUsOCwwLDEsMTIyLDI1LDAsMTE2LDksMCwKKyAgICAxMDAsMSwwLDEyNCw0LDAsMTI0LDgsMCwxMzEsMywwLDEsMTAwLDIsMCwKKyAgICA4Myw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsMCwxMjYsOCwwLDg4LAorICAgIDExMyw5NCwwLDg4LDExMyw5NCwwLDg3LDEyMSwzMywwLDExNiwxMCwwLDEyNCwxLAorICAgIDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMSwxMTYsOSwwLDEwMCwzLAorICAgIDAsMTI0LDEsMCwxMzEsMiwwLDEsODcsMTEwLDUzLDAsNCwxMTYsOCwwLAorICAgIDEwNywxMCwwLDExNCw0OCwxLDEsMTI1LDgsMCwxLDEyMiwyMSwwLDExNiw5LAorICAgIDAsMTAwLDEsMCwxMjQsMSwwLDEyNCw4LDAsMTMxLDMsMCwxLDg3LDg5LAorICAgIDEwMCwyLDAsMTAwLDIsMCwxMjUsOCwwLDEyNiw4LDAsODgsMTEwLDEsMCwKKyAgICA4OCwxMDAsMiwwLDgzLDQxLDQsMTIyLDI3LDg3LDExNCwxMDUsMTE2LDEwMSwzMiw5OCwKKyAgICAxMjEsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwKKyAgICAxMDUsMTA4LDEwMSw0NiwxMjIsMjcsOTksMTExLDExNywxMDgsMTAwLDMyLDExMCwxMTEsMTE2LDMyLAorICAgIDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsMTE0LAorICAgIDEyNSw3OCwxMjIsMTIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDEwMCwzMiwxMjMsMzMsMTE0LDEyNSwKKyAgICA0MSwxMSwxMTQsMzgsMCwwLDAsMTE0LDQ2LDAsMCwwLDExNCwyMjAsMCwwLAorICAgIDAsMTE0LDMzLDAsMCwwLDExNCwyOCwwLDAsMCwxMTQsMywwLDAsMCwKKyAgICA5MCw1LDEwOSwxMDcsMTAwLDEwNSwxMTQsMjE4LDE1LDcwLDEwNSwxMDgsMTAxLDY5LDEyMCwxMDUsCisgICAgMTE1LDExNiwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0MCwwLDAsMCwxMTQsMTQ2LDAsCisgICAgMCwwLDExNCw1NSwwLDAsMCw0MSw5LDExNCw3OCwwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0NywxLDAsMCwxMTQsMjI4LDAsCisgICAgMCwwLDExNCwxMjUsMCwwLDAsMTE0LDI3LDAsMCwwLDExNCwyMywwLDAsCisgICAgMCwxMTQsMzQsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDMxLDEsMCwwLDQ2LDYsMCwwLDExNSwzOCwKKyAgICAwLDAsMCwwLDIsMTgsMSw2LDIsMjIsMSwxOCwxLDE3LDIsMTksCisgICAgMSwxNSwxLDMsMSwxNywxLDEzLDIsNywxLDE4LDMsMTYsMSwyNywKKyAgICAxLDMsMSwxNiwxLDE3LDEsMTgsMiwxMjIsMjUsODMsMTExLDExNywxMTQsOTksCisgICAgMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiw5NSwKKyAgICAxMDAsOTcsMTE2LDk3LDc4LDQxLDcsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsCisgICAgMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCwzMCwxLDAsMCwKKyAgICAxMTQsMzIsMSwwLDAsMTE0LDMxLDEsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw0NSwKKyAgICAxLDAsMCwzMiw2LDAsMCwxMTUsOCwwLDAsMCwxMiwyLDYsMiwKKyAgICAxMiw1LDEyLDUsMTE0LDQ1LDEsMCwwLDk5LDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDQ2LAorICAgIDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwKKyAgICAxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsCisgICAgMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwKKyAgICA4Myw0MSw3LDIxOCwyMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLAorICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsNDUsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDExNSwzMiwKKyAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCw1LDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LDc2LDAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsCisgICAgMTE2LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LDEsMCwxMDAsMiwwLDEyNCwKKyAgICAyLDAsMTMxLDEsMiwxMjUsNCwwLDExNiwzLDAsMTI0LDQsMCwxMDAsMSwKKyAgICAwLDEyNCwxLDAsMTAwLDMsMCwxMjQsMiwwLDEzMSwxLDIsODMsNDEsNCwKKyAgICA3OCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxMzQsMCwwLDAsCisgICAgNDEsNCwxMTQsMjMxLDAsMCwwLDExNCwzMywxLDAsMCwxMTQsMTg1LDAsMCwKKyAgICAwLDExNCwxOTAsMCwwLDAsNDEsNSwxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0MSwxLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMTAsMSwwLDAsNzksNiwwLDAsMTE1LDgsMCwwLDAsMCwxLAorICAgIDE1LDEsMTUsMSwyNCwxLDEyMiwyOSw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwKKyAgICAxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKKyAgICA5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwKKyAgICAxLDAsODMsNDEsMiwxMjIsMzksODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsCisgICAgMTEwLDEwMSwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwKKyAgICAxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsCisgICAgNCwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAxMSwxLDAsMCw4NSw2LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLAorICAgIDMxLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgNzgsNDEsNiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLAorICAgIDAsMCwxMTQsNTksMCwwLDAsMTE0LDEwLDEsMCwwLDExNCwxMSwxLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsNDksMSwwLDAsNzUsNiwwLDAsMTE1LDYsCisgICAgMCwwLDAsMTIsMiw2LDIsMTIsNiwxMTQsNDksMSwwLDAsOTksMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw2NCwKKyAgICAwLDAsMCwxMTUsMTE4LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLAorICAgIDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwKKyAgICAxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKKyAgICA1LDAsMTAxLDYsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwKKyAgICAwLDkwLDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw4LDAsCisgICAgMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw5LDAsMTAwLDEyLDAsMTAwLAorICAgIDEzLDAsMTMyLDAsMCw5MCwxMCwwLDEwMSw2LDAsMTAwLDE0LDAsMTAwLDE1LAorICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDE2LDAsODMsNDEsMTcsCisgICAgMjE4LDE5LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDEyMiw5Myw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsOTksMTExLAorICAgIDExMCwxMTUsMTE2LDExNCwxMTcsOTksMTE2LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNSwKKyAgICAxMDUsMTAzLDExMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTE5LDExMSwxMTQsMTA3LDMyLDExOSwxMDUsCisgICAgMTE2LDEwNCwzMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICAwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLAorICAgIDAsMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwKKyAgICAxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsNjcsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDQxLDMsMTE0LDc4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsCisgICAgMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDc5LDAsMCwwLDEwMiw2LDAsMCwxMTUsNCwwLDAsCisgICAgMCwwLDEsOSwxLDEyMiwyOCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLAorICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKKyAgICAxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMTQwLDAsMCwwLDEyNCwxLDAsCisgICAgMTA2LDAsMCwxMjUsMiwwLDEyNCwyLDAsMTA2LDEsMCwxMjUsMywwLDExNiwKKyAgICAyLDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwzLDAsMTI0LDAsMCwxMDYsNSwKKyAgICAwLDEzMSwzLDAsMTI1LDEsMCwxMTYsNiwwLDEwMCwxLDAsMTI0LDAsMCwKKyAgICAxMDYsNSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiw3LDAsMTI0LDMsMCwKKyAgICAxMzEsMSwwLDExNCwxMTcsMCwxMTYsOCwwLDEyNCwxLDAsMTAwLDIsMCwxMzEsCisgICAgMiwwLDEyLDExNCwxMTcsMCwxMTYsOSwwLDEyNCwwLDAsMTA2LDUsMCwxMzEsCisgICAgMSwwLDEwMCwzLDAsMjUsMTAzLDEsMCwxMjQsMSwwLDk1LDEwLDAsMTEwLAorICAgIDAsMCwxMTYsMTEsMCwxMjQsMiwwLDEzMSwxLDAsMTA2LDEyLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDEsMTAwLDAsMCw4Myw0MSw0LDc4LDEyMiwzMywxMDEsMTIwLAorICAgIDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsCisgICAgMTExLDk3LDEwMCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSwxMTQsCisgICAgMjM5LDAsMCwwLDExNCw3MSwwLDAsMCw0MSwxMywxMTQsMjAzLDAsMCwwLAorICAgIDExNCw2NywwLDAsMCwxMTQsMTA4LDAsMCwwLDExNCw5NiwwLDAsMCw5MCwKKyAgICAxMiwxMDgsMTExLDk3LDEwMCw5NSwxMDAsMTIxLDExMCw5NywxMDksMTA1LDk5LDExNCwzNSwwLAorICAgIDAsMCwxMTQsMTQ2LDAsMCwwLDExNCwyMTYsMCwwLDAsMTE0LDYwLDAsMCwKKyAgICAwLDExNCwzOCwwLDAsMCwxMTQsMjM5LDAsMCwwLDExNCwxNjgsMCwwLDAsCisgICAgMTE0LDI1MCwwLDAsMCw0MSw0LDExNCw3OCwwLDAsMCwxMTQsMTc0LDAsMCwKKyAgICAwLDExNCwxNzIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjUzLDAsMCwwLDEwNiwKKyAgICA2LDAsMCwxMTUsMTYsMCwwLDAsMCwyLDksMSw5LDEsOSwxLAorICAgIDE1LDEsMTYsMSwzMSwxLDI4LDEsMTIyLDMxLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsCisgICAgMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMSwxMjAsCisgICAgMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAorICAgIDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsCisgICAgNDEsMSwxMjIsMjUsNzYsMTExLDk3LDEwMCwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLAorICAgIDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNDEsMSwxMTQsCisgICAgMTc1LDAsMCwwLDQxLDIsMTE0LDc4LDAsMCwwLDExNCwxNTIsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDAsMSwwLDAsMTE4LDYsMCwwLDExNSwyLDAsMCwwLDAsMywxMjIsCisgICAgMzEsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsCisgICAgMCwzLDAsMCwwLDExNSw0OCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsCisgICAgMTA2LDEsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTM3LDAsMCwxMTYsMiwwLAorICAgIDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LDAsMCwxMTYsCisgICAgMywwLDY4LDEzMSwxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiw0OSw4MiwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsCiAgICAgMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsOTksMTExLDExMCwKLSAgICAxMTUsMTE2LDExNCwxMTcsOTksMTE2LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNSwxMDUsCi0gICAgMTAzLDExMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTE5LDExMSwxMTQsMTA3LDMyLDExOSwxMDUsMTE2LAotICAgIDEwNCwzMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAotICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsCi0gICAgMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5Niw0LDAsMCwxMTUsNCwwLAotICAgIDAsMCwwLDEsOSwxLDExNywyOCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsCi0gICAgMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LDE3NSwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDEwNywwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTI0LAotICAgIDAsMCwxMDYsNSwwLDEzMSwzLDAsMTI1LDMsMCwxMTYsNiwwLDEwMCwxLAotICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiw3LAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxMTcsMCwxMTYsOCwwLDEyNCwzLDAsCi0gICAgMTAwLDIsMCwxMzEsMiwwLDEyLDExNCwxMTcsMCwxMTYsOSwwLDEyNCwwLDAsCi0gICAgMTA2LDUsMCwxMzEsMSwwLDEwMCwzLDAsMjUsMTAzLDEsMCwxMjQsMywwLAotICAgIDk1LDEwLDAsMTEwLDAsMCwxMjQsMywwLDgzLDg3LDExMCw0NiwwLDEsMSwKLSAgICAxLDEyNCwyLDAsMTIsMTE0LDE2MywwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEwNyw2LDAsMTE0LDE2MywwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLAotICAgIDYxLDExMCwwLDAsMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsCi0gICAgNDAsNSwwLDAsMCwxMTcsMjUsMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywKLSAgICAxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNDYsMTE3LDMzLDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsCi0gICAgMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDExNyw4LDAsMCwwLDk1LDk1LAotICAgIDExMiw5NywxMTYsMTA0LDk1LDk1LDEwNSwwLDAsMCwwLDc4LDQwLDExLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE3LDQsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwKLSAgICAxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDQsCi0gICAgOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDk1LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOSwKLSAgICAwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTAwLDQsMCwwLDExNSwyNCwwLDAsMCwwLDUsMTUsMSwKLSAgICAzLDEsOSwxLDE1LDEsMTYsMSwzMSwxLDI4LDEsOCwxLDMsMSwKLSAgICAyMiwxLDEzLDEsMTE3LDMxLDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAotICAgIDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwxMTUsNDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsMSwKLSAgICAwLDI1LDEzNywwLDAsMTE2LDIsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsCi0gICAgMCwxMDAsMywwLDEzNCwwLDAsMTE2LDMsMCw2OCwxMzEsMSwwLDEzMSwxLAotICAgIDAsODMsNDAsNCwwLDAsMCwxMTcsNDksMCwwLDAsODIsMTAxLDExNiwxMTcsCi0gICAgMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwMSwKLSAgICAxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDEwNSwxLDAsCi0gICAgMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsCi0gICAgMCwwLDAsNTEsMCwwLDAsMTE1LDMxLDAsMCwwLDEyNCwwLDAsOTMsCi0gICAgMjEsMCwxMjUsMSwwLDEzNiwwLDAsMTAwLDAsMCwxMjQsMSwwLDIzLDEwNywKLSAgICAyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNzgsNDAsMCwKLSAgICAwLDAsMCw0MCwyLDAsMCwwLDExNywyLDAsMCwwLDQ2LDQ4LDExNywKLSAgICA2LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDQwLDEsMCwwLDAsMTE3LAotICAgIDksMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLAotICAgIDExNCw2MiwxMjEsNCwwLDAsMTE1LDIsMCwwLDAsNiwxLDExNyw0OSwwLAotICAgIDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwxMTQsCisgICAgMjksMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsNCwwLDAsMCw1MSwwLDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsCisgICAgMCw5MywyMSwwLDEyNSwxLDAsMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsCisgICAgMjMsMTA3LDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MSwyLDExNCwKKyAgICA3OSwwLDAsMCw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsCisgICAgMCwyMTgsNiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw0MSwxLDIxOCw5LDEwMiwxMDUsMTA4LAorICAgIDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjExLDAsMCwwLDEyNiw2LDAsMCwxMTUsMiwwLDAsMCw2LDEsCisgICAgMTIyLDQ5LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsCiAgICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAogICAgIDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsNDAsNCwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMywwLDAsMCw5NywxMTAsMTIxLDExNywxOCwwLDAsMCw2OSw4OCwKLSAgICA4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwKLSAgICA0MCwxLDAsMCwwLDExNyw5LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDExOCw0LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTksCi0gICAgMSwxOCwxLDExNywzMCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKLSAgICAwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLAotICAgIDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNjMsMCwwLDAsODIsMTAxLAotICAgIDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTcsMTEwLDMyLAotICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsOTcsCi0gICAgMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLAotICAgIDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgMTI0LDQsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsMCwwLDAsCi0gICAgNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDUzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCi0gICAgOTcsMTE1LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsNDAsMSwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMjgsNCwKLSAgICAwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywzMCwwLDAsMCw2OSwxMjAsCi0gICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc4LDQwLDEyLDAsCi0gICAgMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCwKLSAgICA5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwKLSAgICAxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTksMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsODgsNCwwLDAsMTE1LDE2LAotICAgIDAsMCwwLDE2LDYsNiwyLDEyLDQsMywxLDMsMSwyNCwxNiwxMiwKLSAgICA2LDEyLDQsMTE3LDE5LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsCi0gICAgMTE1LDEzNCwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwKLSAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKLSAgICA5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCwKLSAgICA4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsMTEsCi0gICAgMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLAotICAgIDkwLDksMCwxMDAsMTQsMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDEwLDAsMTAwLAotICAgIDE2LDAsMTAwLDE3LDAsMTMyLDAsMCw5MCwxMSwwLDEwMCwxOCwwLDEwMCwxOSwKLSAgICAwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjAsMCw4Myw0MCwyMSwwLDAsMCwKLSAgICAxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCwKLSAgICA5NywxMTYsMTA0LDExNywzOCwxLDAsMCw4MiwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsCi0gICAgMTE2LDExNSwzMiw5NywzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMzksMTE1LDMyLDExMiw5NywxMTYsMTA0LDQ2LDMyLDMyLAotICAgIDczLDExNiwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTYsMzIsMTA4LDExMSwxMTEsMTA3LDExNSwzMiwxMTcsCi0gICAgMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzksMTE1LDEwLDMyLAotICAgIDMyLDMyLDMyLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQ2LDMyLDMyLDg3LDEwNCwKLSAgICAxMDEsMTEwLDMyLDExNiwxMDQsMTA1LDExNSwzMiw5OSwxMDQsOTcsMTEwLDEwMywxMDEsMTE1LDQ0LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTEsMTE5LAotICAgIDExMCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNCwxMDEsOTksMTExLDEwOSwxMTIsCi0gICAgMTE3LDExNiwxMDEsMTAwLDQ0LDEwLDMyLDMyLDMyLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMzIsMzIsNzAsMTExLAotICAgIDExNCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMDUsMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDk5LDQsCi0gICAgMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUyLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLAotICAgIDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMTYsMiwwLDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMzEsMCwwLDEzMSwxLDAsMTI0LDAsMCw5NSw0LDAsMTI0LAotICAgIDMsMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsNiwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNSwwLDAsMCwKLSAgICAxMTYsMTE3LDExMiwxMDgsMTAxLDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsCi0gICAgOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxNywwLDAsMCw5NSwKLSAgICAxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LAotICAgIDExNywxMiwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLAotICAgIDExNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwKLSAgICAxMTQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTQwLDQsMCwwLDExNSw4LAotICAgIDAsMCwwLDAsMSw5LDEsOSwxLDIxLDEsMTE3LDIzLDAsMCwwLAotICAgIDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNTMsMCwwLAotICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwwLAotICAgIDkyLDMsMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMiwwLDEwMCwKLSAgICAyLDAsMTA3LDIsMCwxMTQsNDMsMCwxMDAsNiwwLDgzLDEyNCwxLDAsMTAwLAotICAgIDUsMCwxMDIsMiwwLDgzLDQwLDcsMCwwLDAsMTE3LDYyLDAsMCwwLAotICAgIDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsMzIsCi0gICAgMTExLDEwMiwzMiw0MCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQ1LDExMCw5NywxMDksMTAxLDQ0LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsMTEyLAotICAgIDk3LDExNiwxMDQsNDUsOTcsMTE2LDExNiwxMTQsNDUsMTEwLDk3LDEwOSwxMDEsNDEsMTE3LDEsCi0gICAgMCwwLDAsNDYsMTE3LDAsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwKLSAgICAxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsNDAsMiwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCwxMTUsMTIxLDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwyLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDk1LDExMCw5NywxMDksMTAxLDExNywxMCwwLDAsCi0gICAgMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCw0MCw0LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwwLDAsMCwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDExNywzLDAsMCwwLDEwMCwxMTEsMTE2LDExNywyLDAsMCwKLSAgICAwLDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDE0Niw0LDAsMCwxMTUsCi0gICAgOCwwLDAsMCwwLDIsMjcsMSwxMiwyLDQsMywxMTcsMzgsMCwwLAotICAgIDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LAotICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSw5OSwxLDAsMCwwLDAsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsCi0gICAgMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsMCw5MiwyLDAsMTI1LDEsMCwKLSAgICAxMjUsMiwwLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsNCwwLAotICAgIDAsMCwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsCi0gICAgMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNyw3LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0MCwzLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMTgsMCwwLAotICAgIDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwKLSAgICAxMTQsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsCi0gICAgMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxNTYsNCwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwxLDE4LDEsMTE3LDMxLDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LAotICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEwMywwLAotICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLAotICAgIDAsMTI1LDEsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMDcsMywwLAotICAgIDExNCw5NiwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LAotICAgIDEsMCwxMzEsMiwwLDkyLDIsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsCi0gICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDg0LDAsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDYsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwyLDAsMTEwLAotICAgIDAsMCwxMjQsMCwwLDEwNiw2LDAsODMsNDAsMSwwLDAsMCw3OCw0MCwKLSAgICA3LDAsMCwwLDExNyw1LDAsMCwwLDExNiwxMTcsMTEyLDEwOCwxMDEsMTE3LDE2LAotICAgIDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDE3LDAsMCwwLDk1LDEwOCw5NywxMTUsMTE2LDk1LDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw1LDAsMCwwLDk1LAotICAgIDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNywxMSwwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgMTE3LDgsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEyLDk3LDExNiwxMDQsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsOTUsMTE0LAotICAgIDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDE2MCw0LDAsMCwxMTUsMTQsCi0gICAgMCwwLDAsMCwyLDE4LDEsMTUsMSwyNywzLDEyLDEsMTIsMSwxMiwKLSAgICAxLDExNywyNywwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDgwLDk3LDExNiwxMDQsNDYsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsCi0gICAgMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLAotICAgIDc4LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTA1LDExNiwxMDEsMTE0LDExNywKLSAgICAxMiwwLDAsMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMTcyLDQsMCwwLDExNSwyLDAsMCwwLAotICAgIDAsMSwxMTcsMjMsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAotICAgIDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwyLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsMSwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSw5NSwxMDgsMTAxLDExMCwKLSAgICA5NSw5NSwxNzUsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMiwwLAotICAgIDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCi0gICAgNDYsOTUsOTUsMTA4LDEwMSwxMTAsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwKLSAgICAwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwKLSAgICAwLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIwLDAsMCwwLDk1LDc4LDk3LAotICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0MCwxMjMsMzMsMTE0LDEyNSwKLSAgICA0MSw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsMTc4LDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjMsMCwKLSAgICAwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LAotICAgIDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwwLDEwNywKLSAgICA2LDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywxMiwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwKLSAgICAwLDAsMTA1LDExNiwxMDEsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsCi0gICAgMTE1LDk1LDk1LDE4MSw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDI3LAotICAgIDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LAotICAgIDEwNCw0Niw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwyMCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMSwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsMiwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDEwNSwKLSAgICAxMTYsMTAxLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTg0LDQsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsMSwxMTcsMjEsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsCi0gICAgMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNzgsCi0gICAgNDAsMTMsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMDEsMTEwLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LAotICAgIDExMCwxMTUsOTUsOTUsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywKLSAgICAxMTYsMTA0LDEzMyw0LDAsMCwxMTUsMjAsMCwwLDAsMTYsNSw2LDIsMTIsCi0gICAgNiwxMiwxMCwxMiw0LDEyLDEyLDEyLDMsMTIsMywxMiwzLDEyLDMsMTE3LAotICAgIDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsCi0gICAgMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSw2OCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLAotICAgIDIsMCwxMzIsMCwwLDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDUsMCwKLSAgICAxMDAsNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAwLDcsMCw4MywKLSAgICA0MCw4LDAsMCwwLDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSw0LDAsMCwwLDAsMCwKLSAgICAwLDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwKLSAgICAwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwKLSAgICAzLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDIsMCwwLDAsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwKLSAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsNSwwLDAsMCw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTg5LDQsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjQsMCwwLDAsNzgsOTcsMTA5LAotICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LAotICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwKLSAgICAxLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDc4LDExNywyNSwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwzOSwxMjMsMTI1LDM5LDMyLDQwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCi0gICAgMTAxLDQxLDYyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwKLSAgICA0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDYsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDE5Miw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LAotICAgIDI3LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAorICAgIDExMiwxMTQsNjIsNDEsNCwxMTQsMzgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICAyMTIsMCwwLDAsMjE4LDE4LDY5LDg4LDg0LDY5LDc4LDgzLDczLDc5LDc4LDk1LAorICAgIDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLDIsMTE0LDc4LDAsMCwwLDExNCwKKyAgICAxNTIsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsNTIsMSwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDIxNiwwLDAsMCwxMjMsNiwwLDAsMTE1LDYsCisgICAgMCwwLDAsMCwyLDE5LDEsMTgsMSwxMjIsMzAsNjksMTIwLDExNiwxMDEsMTEwLAorICAgIDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LAorICAgIDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwKKyAgICAwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDYzLDgyLDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk3LDExMCwzMiwxMDEsMTIwLDExNiwKKyAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OSw5NywKKyAgICAxMTAsMTEwLDExMSwxMTYsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDk3LDMyLDk5LDExMSwKKyAgICAxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiw0Niw3OCwxMTQsNCwwLDAsMCwKKyAgICA0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMCwxLDAsMCwKKyAgICAxMjksNiwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyOCw2OSwxMjAsMTE2LAorICAgIDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LAorICAgIDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTMsODIsMTAxLDExNiwxMTcsMTE0LAorICAgIDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsCisgICAgMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwNCw5NywxMTgsMTAxLAorICAgIDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwKKyAgICA3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwxMSwxLDAsMCwxMzMsNiwwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAyLDEyMiwzMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwKKyAgICAwLDgzLDQxLDEsMTIyLDU4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywKKyAgICAxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywxMTUsMzIsMTAyLDExMSwxMTcsMTEwLAorICAgIDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCisgICAgNDEsMSwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE1MiwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMjMxLDAsMCwwLDEzNyw2LDAsMCwxMTUsMiwwLDAsMCwKKyAgICAwLDMsMTIyLDMyLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwKKyAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwKKyAgICAxMTAsOTcsMTA5LDEwMSw3OCw0MSwxMiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwKKyAgICAwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDc5LDAsMCwwLAorICAgIDExNCwyNTMsMCwwLDAsMTE0LDE1MCwwLDAsMCwxMTQsMCwxLDAsMCwxMTQsCisgICAgMjE2LDAsMCwwLDExNCwxMCwxLDAsMCwxMTQsMTEsMSwwLDAsMTE0LDIzMSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNTAsMSwwLDAsOTQsNiwwLDAsCisgICAgMTE1LDE2LDAsMCwwLDEyLDYsNiwyLDEyLDQsMTIsMTIsMTgsNSwxMiwKKyAgICA2LDEyLDQsMTIsNCwxMTQsNTAsMSwwLDAsOTksMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsCisgICAgMTMwLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAorICAgIDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLAorICAgIDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsCisgICAgMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCw4LDAsMTAwLDksMCwKKyAgICAxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDkwLAorICAgIDgsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDkwLDksMCwxMDAsMTQsCisgICAgMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDEwLDAsMTAwLDE2LDAsMTAwLDE3LDAsCisgICAgMTMyLDAsMCw5MCwxMSwwLDEwMCwxOCwwLDEwMCwxOSwwLDEzMiwwLDAsOTAsCisgICAgMTIsMCwxMDAsMjAsMCw4Myw0MSwyMSwyMTgsMTQsOTUsNzgsOTcsMTA5LDEwMSwxMTUsCisgICAgMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDk3LDM4LDEsMCwwLDgyLDEwMSwxMTIsCisgICAgMTE0LDEwMSwxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzOSwxMTUsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsNDYsMzIsMzIsNzMsMTE2LDMyLDExNywxMTUsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiwxMDUsMTE2LDExNSwzMiwxMTIsOTcsMTE0LAorICAgIDEwMSwxMTAsMTE2LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwxMDAsMzIsCisgICAgMTAyLDExNCwxMTEsMTA5LDMyLDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNiwzMiwxMDgsMTExLAorICAgIDExMSwxMDcsMTE1LDMyLDExNywxMTIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLAorICAgIDExNiwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsCisgICAgNDYsMzIsMzIsODcsMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDk5LDEwNCw5NywKKyAgICAxMTAsMTAzLDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzksMTE1LDMyLDExMSwxMTksMTEwLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE0LAorICAgIDEwMSw5OSwxMTEsMTA5LDExMiwxMTcsMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMTE3LAorICAgIDExNSwxMDUsMTEwLDEwMywzMiwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0NiwzMiwzMiw3MCwxMTEsMTE0LDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMiw5NywKKyAgICAxMTYsMTA0LDEwLDMyLDMyLDMyLDMyLDEwNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsNDYsOTksNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsNTIsMCwwLDAsMTI0LDEsMCwKKyAgICAxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDExNiwKKyAgICAyLDAsMTI0LDAsMCwxMDYsMywwLDEzMSwwLDAsMTMxLDEsMCwxMjQsMCwKKyAgICAwLDk1LDQsMCwxMjQsMywwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsCisgICAgODMsNDEsMSw3OCw0MSw2LDExNCw5MywwLDAsMCwxMTQsMjQ5LDAsMCwwLAorICAgIDExNCwyMjYsMCwwLDAsMjE4LDE2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMjE4LDE3LDk1LDEwOCw5NywxMTUsMTE2LDk1LDExMiwKKyAgICA5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMjE4LDEyLDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQxLDQsMTE0LDc4LDAsMCwwLDExNCwKKyAgICA2NywwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDExLDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw3OSwwLDAsMCwxNTAsNiwwLDAsMTE1LDgsCisgICAgMCwwLDAsMCwxLDksMSw5LDEsMjEsMSwxMjIsMjMsOTUsNzgsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw1MywwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLDAsOTIsMywwLAorICAgIDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwyLDAsMTAwLDIsMCwxMDcsCisgICAgMiwwLDExNCw0MywwLDEwMCw2LDAsODMsMTI0LDEsMCwxMDAsNSwwLDEwMiwKKyAgICAyLDAsODMsNDEsNywxMjIsNjIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsCisgICAgMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiwxMTEsMTAyLDMyLDQwLDExMiw5NywxMTQsMTAxLDExMCwKKyAgICAxMTYsNDUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDUsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTEyLAorICAgIDk3LDExNCwxMDEsMTEwLDExNiw0NSwxMTIsOTcsMTE2LDEwNCw0NSw5NywxMTYsMTE2LDExNCw0NSwKKyAgICAxMTAsOTcsMTA5LDEwMSw0MSwxMTQsMTEwLDAsMCwwLDExNCwzMCwwLDAsMCwxMTQsCisgICAgNywwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDIzOSwwLDAsMCw0MSwyLAorICAgIDEyMiwzLDExNSwxMjEsMTE1LDEyMiw0LDExMiw5NywxMTYsMTA0LDQxLDIsMTE0LDkzLDAsCisgICAgMCwwLDExNCwzMiwwLDAsMCw0MSw0LDExNCw3OCwwLDAsMCwxMTQsMjI4LAorICAgIDAsMCwwLDIxOCwzLDEwMCwxMTEsMTE2LDExNCw4MywwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjMsOTUsMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTEwLDk3LDEwOSwxMDEsMTE1LDE1Niw2LDAsMCwxMTUsOCwwLDAsMCwwLDIsCisgICAgMjcsMSwxMiwyLDQsMywxMjIsMzgsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LAorICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwzOCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsCisgICAgMCw5MiwyLDAsMTI1LDEsMCwxMjUsMiwwLDExNiwxLDAsMTE2LDIsMCwKKyAgICAxMDYsMywwLDEyNCwxLDAsMjUsMTI0LDIsMCwxMzEsMiwwLDgzLDQxLDEsCisgICAgNzgsNDEsNCwxMTQsNjAsMSwwLDAsMTE0LDYyLDAsMCwwLDExNCw3LDAsCisgICAgMCwwLDExNCwxNjksMCwwLDAsNDEsMywxMTQsNzgsMCwwLDAsOTAsMTgsCisgICAgMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSw5MCwxNCwxMTIsOTcsMTE2LDEwNCw5NSw5NywxMTYsMTE2LDExNCw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsNTUsMSwwLDAsMTY2LDYsMCwwLDExNSw0LDAsMCwwLDAsCisgICAgMSwxOCwxLDEyMiwzMSw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLAorICAgIDk3LDExNiwxMDQsNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMjcsMCwwLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDEyNSwxLDAsCisgICAgMTI0LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTA3LDMsMCwxMTQsMTIwLDAsMTI0LAorICAgIDAsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwyLAorICAgIDAsMTI1LDIsMCwxMjQsMiwwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTA4LDAsCisgICAgMTI0LDIsMCwxMDYsNSwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTA4LDAsMTI0LAorICAgIDIsMCwxMDYsNiwwLDExNCwxMDgsMCwxMjQsMiwwLDEwNiw2LDAsMTI0LDAsCisgICAgMCw5NSw3LDAsMTEzLDEwOCwwLDExMCwwLDAsMTI0LDEsMCwxMjQsMCwwLAorICAgIDk1LDIsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDcsMCw4Myw0MSwxLDc4LAorICAgIDQxLDgsMTE0LDIyNiwwLDAsMCwxMTQsNTUsMSwwLDAsMTE0LDU2LDEsMCwKKyAgICAwLDExNCw1NywxLDAsMCwxMTQsOTMsMCwwLDAsMTE0LDE2MywwLDAsMCwKKyAgICAxMTQsMjE3LDAsMCwwLDExNCwyNDksMCwwLDAsNDEsMywxMTQsNzgsMCwwLAorICAgIDAsOTAsMTEsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTcyLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxMiw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsCisgICAgMTcwLDYsMCwwLDExNSwxNiwwLDAsMCwwLDIsMTgsMSwxNSwxLDIxLAorICAgIDMsMjcsMSw5LDEsMTgsMSwxMiwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTE0LDEwMSw5OSw5NywxMDgsCisgICAgOTksMTE3LDEwOCw5NywxMTYsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLAorICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLAorICAgIDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCw4MywKKyAgICA0MSwxLDc4LDQxLDIsMjE4LDQsMTA1LDExNiwxMDEsMTE0LDExNCw2MSwxLDAsMCwKKyAgICA0MSwxLDExNCw3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsCisgICAgMTgzLDYsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjMsOTUsNzgsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTYsCisgICAgMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsNDEsMSwKKyAgICA3OCw0MSwyLDExNCwzMSwwLDAsMCwxMTQsNjEsMSwwLDAsNDEsMSwxMTQsCisgICAgNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDcsOTUsOTUsMTA4LDEwMSwxMTAsOTUsOTUsMTg2LDYsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMSwxMjIsMjIsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAorICAgIDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsCisgICAgMCwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwyMCw5NSw3OCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDAsMTIzLDMzLDExNCwKKyAgICAxMjUsNDEsNDEsMiwxMTQsNDcsMCwwLDAsMTE0LDI0OSwwLDAsMCw0MSwxLAorICAgIDExNCw3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsOTAsMCwwLDAsMTg5LDYsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMSwxMjIsMjMsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxNiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMzEsMCwwLDEwNyw2LDAsODMsNDEsMSw3OCw0MSwxLDExNCw2MSwxLDAsCisgICAgMCw0MSwyLDExNCw3OCwwLDAsMCwyMTgsNCwxMDUsMTE2LDEwMSwxMDksMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEyLDk1LAorICAgIDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LDk1LDE5Miw2LDAsMCwxMTUsCisgICAgMiwwLDAsMCwwLDEsMTIyLDI3LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5NywKKyAgICA5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLAorICAgIDExNSw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSwyMCwwLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMSwxMDAsMCwwLAorICAgIDgzLDQxLDEsNzgsNDEsMiwxMTQsMjQ5LDAsMCwwLDExNCwyMjAsMCwwLDAsCisgICAgNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDY1LDEsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMjAsMCwwLDAsCisgICAgMTk1LDYsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjEsOTUsNzgsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk3LDExMiwxMTIsMTAxLAorICAgIDExMCwxMDAsNzgsNDEsMTMsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsCisgICAgNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsNjAsCisgICAgMSwwLDAsMTE0LDU1LDEsMCwwLDExNCw2MSwxLDAsMCwxMTQsNjMsMSwKKyAgICAwLDAsMTE0LDY0LDEsMCwwLDExNCw5MCwwLDAsMCwxMTQsNjYsMSwwLAorICAgIDAsMTE0LDIyMCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNTQsMSwwLDAsMTQzLAorICAgIDYsMCwwLDExNSwyMCwwLDAsMCwxMiw1LDYsMiwxMiw2LDEyLDEwLAorICAgIDEyLDQsMTIsMTMsMTIsMywxMiwzLDEyLDMsMTIsMywxMTQsNTQsMSwwLAorICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLAorICAgIDAsMCw2NCwwLDAsMCwxMTUsOTQsMCwwLDAsMTAxLDAsMCw5MCwxLAorICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsCisgICAgOTAsMywwLDEwMSw0LDAsMTAwLDMsMCwxMDAsNCwwLDEzMiwwLDAsMTMxLAorICAgIDEsMCw5MCw1LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNiwKKyAgICAwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDkwLDcsMCwxMDAsOSwwLAorICAgIDEwMCwxMCwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwKKyAgICAwLDAsOTAsOSwwLDEwMCwxMywwLDgzLDQxLDE0LDExNCwyNDcsMCwwLDAsCisgICAgOTksNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsNCwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMjUsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLAorICAgIDEyNCwyLDAsMTI0LDMsMCwxMzEsMywwLDEyNCwwLDAsOTUsMSwwLDEwMCwKKyAgICAwLDAsODMsNDEsMSw3OCw0MSwyLDExNCw1NCwxLDAsMCwxMTQsMjQ5LDAsCisgICAgMCwwLDQxLDQsMTE0LDc4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDU4LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCw3OSwwLDAsMCwyMDEsNiwwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCisgICAgOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsCisgICAgMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsNzgsMTIyLAorICAgIDI1LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDExMCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDQxLDYyLDQxLDIsMTE0LDQ3LDAsMCwKKyAgICAwLDExNCw1NywwLDAsMCw0MSwyLDExNCwyNDIsMCwwLDAsMTE0LDE3NCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMjAwLDAsMCwwLDIwNSw2LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDIsMTIyLDI4LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAogICAgIDEwMCwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwzMiwwLDAsMCwxMTYsMCwwLDEwMCwxLDAsMTI0LAotICAgIDAsMCwxMDYsMSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiwxLDAsMTI0LAotICAgIDEsMCw5NSwyLDAsMTI0LDEsMCw4Myw0MCwyLDAsMCwwLDExNywyNCwKLSAgICAwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDExNywzOCwwLDAsMCwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCwKKyAgICA4NCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwyMTYsMCwwLDAsMjA5LDYsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsNzgsMTE0LAorICAgIDMwLDAsMCwwLDExNCw0LDAsMCwwLDQxLDIsMTE0LDc4LDAsMCwwLAorICAgIDExNCwxNTIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDExLDEsMCwwLDIxMiw2LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDI3LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LDAsMCwxMDAsMSwKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMDAsNCwwLDEwMCw1LDAsMTMxLDMsMSwKKyAgICA4Myw0MSw2LDc4LDExNCwzMCwwLDAsMCwxMjIsOCw2MCwxMTUsMTE2LDExNCwxMDUsCisgICAgMTEwLDEwMyw2MiwxMTQsMTcwLDAsMCwwLDExNCwzNiwxLDAsMCw4NCw0MSwxLAorICAgIDExNCwzNywxLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwxMCwxLDAsMCwyMTUsNiwwLDAsMTE1LDIsMCwwLDAsMCwxLAorICAgIDEyMiwyNSw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwyOSwwLDAsMCwxMTYsMCwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMSwKKyAgICAwLDEzMSwyLDAsMSwxMTYsMiwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwKKyAgICAwLDgzLDQxLDIsMTIyLDI0LDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTEwLDk3LDEwOSwKKyAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTIyLDM4LAogICAgIDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAogICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDEyMywzMywxMTQsMTI1LDQwLDMsMCwwLDAsMTE3LDE2LDAsMCwwLAotICAgIDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLAotICAgIDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5Niw0LDAsMCwKLSAgICAxMTUsNiwwLDAsMCwwLDMsMTYsMSwxMiwxLDExNywyNywwLDAsMCwKLSAgICA3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICAxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCw4LDAsMCwKLSAgICAwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwKLSAgICAwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCwKLSAgICA5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTEsMCwwLDAsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNywxNywwLDAsMCwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LAotICAgIDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTg4LDQsMCwwLDExNSw2LDAsMCwwLDE2LDEsCi0gICAgMTIsMywxOCw0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMSwwLDAsMCw0LDAsMCwwLDY2LDAsMCwwLDExNSwxMTksMCwKLSAgICAwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLAotICAgIDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwKLSAgICAxMDAsNSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsCi0gICAgNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwKLSAgICAwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLAotICAgIDEwMSw0LDAsMTAwLDEyLDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDEsMCwxMzEsCi0gICAgMSwwLDkwLDEwLDAsMTAwLDEyLDAsODMsNDAsMTMsMCwwLDAsMTE3LDEwLAotICAgIDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNjIsMCwKLSAgICAwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSw5NSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDQ2LAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMDYsMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwxMjUsMSwwLAotICAgIDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDE2LDAsMTI0LAotICAgIDEsMCwxMDYsNCwwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsMTYsMCw4NywKLSAgICAxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDEyNSwwLDAsMCw2Nyw5NywKLSAgICAxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwKLSAgICAxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNDAsNDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKLSAgICAxMDAsMzIsMTExLDExMCwzMiw5NywxMDgsMTA4LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsCi0gICAgMTE2LDExNCwxMjEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDExNSwxMTYsMTExLDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwKLSAgICAxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDExNSwzMiw0MCwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsNDYsMTE3LDE3LDAsMCwwLAotICAgIDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICAxMTUsNzgsNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgMTksMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAotICAgIDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw2LDAsMCwwLDExOCw5NywxMDgsMTE3LAotICAgIDEwMSwxMTUsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTcsCi0gICAgMCwwLDAsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDExNSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwKLSAgICAxMTUsMTE3LDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsMCwwLDAsMTA1LDExMCwxMTgsCi0gICAgOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSwyMTAsNCwKLSAgICAwLDAsMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMTcsMjgsMCwKLSAgICAwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LAotICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDk0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsCi0gICAgMSwxMTAsMCwwLDEyMCw1OSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5Myw0NCwKLSAgICAwLDEyNSwyLDAsMTIxLDE0LDAsMTI0LDIsMCwxMjQsMSwwLDEzMSwxLDAsCi0gICAgODMsODcsMTEzLDM4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCw4MSwwLDEsCi0gICAgMSwxLDExOSwzOCwwLDg5LDExMywzOCwwLDg4LDExMywzOCwwLDg3LDEwMCwyLAotICAgIDAsODMsMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywxMTMsMCwwLDAsCi0gICAgODMsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDMyLAotICAgIDExMSwxMDIsMzIsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwzOSwxMTIsOTcsMTE2LDEwNCwzOSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMzksMTA0LAotICAgIDExMSwxMTEsMTA3LDExNSwzOSwzMiwxMDUsMTE1LDMyLDEwMiw5NywxMDgsMTE1LDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsMTE3LDExNSwxMDEsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwxMTcsMjMsMCwwLDAsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LAotICAgIDExMSwxMTEsMTA3LDExNSwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDAsNywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMTAsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwxMTcsOSwwLDAsMCw5NSwKLSAgICAxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTE3LDQsMCwwLDAsMTE5LDk3LDExNCwKLSAgICAxMTAsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsMTE0LDExMCwKLSAgICAxMDUsMTEwLDEwMywxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMywwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNyw0LDAsMCwwLDEwNCwxMTEsMTExLDEwNyw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDIxOCw0LDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCw3LDksMSwxOSwxLDE2LDEsMywxLDE0LDEsMTMsMSwxMiwyLAotICAgIDExNywyMiwwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw5OSwyLDAsMCwwLAotICAgIDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTEsMCwwLDAsMTI0LDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIxLAotICAgIDAsMTAwLDIsMCwxMjUsMSwwLDExMCwwLDAsMTIxLDE3LDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsMjUsMTI1LDIsMCw4NywxMTAsNDYsMCw0LDExNiwKLSAgICAyLDAsMTA3LDEwLDAsMTE0LDg2LDAsMSwxLDEsMTI0LDAsMCwxMDYsMywKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsNjAsODksMTEwLDEsMCw4OCwxMjQsMiwwLDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDIxMCwwLDAsMCw3MSwxMDEsMTE2LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsMTAyLDExNCwxMTEsMTA5LAotICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLAotICAgIDExMCwxMTYsMTE0LDEyMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDEwNSwxMTAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSw0NCwzMiwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsOTcsMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMTEwLAotICAgIDEwMCwzMiw5OSw5Nyw5OSwxMDQsMTAxLDMyLDEwNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExMCwKLSAgICAxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LAotICAgIDEwOCw5Nyw5OCwxMDgsMTAxLDQ0LDMyLDExNSwxMTYsMTExLDExNCwxMDEsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE3LDAsMCwwLAotICAgIDAsMTE3LDEsMCwwLDAsNDYsNDAsNCwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCwxMTUsMTIxLDExNSwxMTcsMTksMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw4LDAsMCwKLSAgICAwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQwLDMsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsOTksMTA4LDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjM1LAotICAgIDQsMCwwLDExNSwxNiwwLDAsMCwwLDgsMTIsMSw5LDEsMywxLAotICAgIDE3LDEsMTMsMSwxNSwxLDE4LDEsMTE3LDMxLDAsMCwwLDgwLDk3LDExNiwKKyAgICAxMDQsMzIsMTIzLDMzLDExNCwxMjUsNDEsMywxMTQsMTQ2LDAsMCwwLDExNCwyNDksMCwKKyAgICAwLDAsMTE0LDE3NSwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwwLDEsMCwwLDIxOSw2LDAsMCwxMTUsNCwwLDAsMCwKKyAgICAwLDIsMTYsMSwxMjIsMjgsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNzgsNDEsMTAsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsCisgICAgNTgsMCwwLDAsMTE0LDc5LDAsMCwwLDExNCw0LDEsMCwwLDExNCwyMDAsCisgICAgMCwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsMTEsMSwwLDAsMTE0LDEwLDEsCisgICAgMCwwLDExNCwwLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNDcsMCwwLDAsCisgICAgMjAwLDYsMCwwLDExNSwxMiwwLDAsMCwxMiwxLDEyLDQsMTgsNCwxMiwKKyAgICAzLDEyLDMsMTIsNCwxMTQsMjQ3LDAsMCwwLDk5LDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNjQsMCwwLDAsMTE1LAorICAgIDE2MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsCisgICAgMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwxMDAsNSwKKyAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsNiwwLAorICAgIDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwwLDEwMCwKKyAgICA4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw0LAorICAgIDAsMTAwLDEwLDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDEsMCwxMzEsMSwwLAorICAgIDkwLDksMCwxMDEsNCwwLDEwMCwxMCwwLDEwMCwxMCwwLDEwMCwxMywwLDEwMCwKKyAgICAxNCwwLDEzMiwyLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw0LDAsMTAwLDEwLAorICAgIDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDExLDAsCisgICAgMTAwLDEwLDAsODMsNDEsMTcsMjE4LDEwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCwxMjIsNjIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSw5NSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsCisgICAgMTE1LDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLDExNiwKKyAgICAwLDAsMTA2LDEsMCwxMDYsMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwxMjUsCisgICAgMSwwLDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDE2LAorICAgIDAsMTI0LDEsMCwxMDYsNCwwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsMTYsCisgICAgMCw4NywxMDAsMiwwLDgzLDQxLDMsMTIyLDEyNSw2Nyw5NywxMDgsMTA4LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSwxMTUsNDAsNDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTExLDExMCwKKyAgICAzMiw5NywxMDgsMTA4LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsCisgICAgMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDExNSwxMTYsMTExLDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDExNSwzMiw0MCwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsNDYsMjE4LDE3LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLAorICAgIDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNzgsNDEsNSwxMTQsNywwLAorICAgIDAsMCwyMTgsMTksMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIxOCw2LDExOCw5NywxMDgsMTE3LDEwMSwxMTUsMTE0LAorICAgIDYwLDAsMCwwLDExNCw2OCwxLDAsMCw0MSwyLDExNCwyNDIsMCwwLDAsCisgICAgMjE4LDYsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDY4LDEsMCwwLDIzMSw2LDAsMCwKKyAgICAxMTUsNiwwLDAsMCwwLDQsMjIsMSwxNSwxLDEyMiwyOCw4MCw5NywxMTYsCisgICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsCisgICAgMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMywwLDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsOTQsCisgICAgMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwwLDExNiwyLDAsMTA2LAorICAgIDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwxLDExMCwwLDAsMTIwLAorICAgIDU5LDAsMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDQ0LDAsMTI1LDIsMCwxMjEsCisgICAgMTQsMCwxMjQsMiwwLDEyNCwxLDAsMTMxLDEsMCw4Myw4NywxMTMsMzgsMCwKKyAgICA0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDgxLDAsMSwxLDEsMTE5LDM4LDAsCisgICAgODksMTEzLDM4LDAsODgsMTEzLDM4LDAsODcsMTAwLDIsMCw4MywxMDAsMiwwLAorICAgIDgzLDQxLDMsMTIyLDExMyw4MywxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTUsMTAxLDExMywxMTcsCisgICAgMTAxLDExMCw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDk3LDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDM5LAorICAgIDExMiw5NywxMTYsMTA0LDM5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDczLDEwMiwzMiwzOSwxMDQsMTExLDExMSwxMDcsMTE1LDM5LDMyLDEwNSwxMTUsMzIsMTAyLDk3LAorICAgIDEwOCwxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTcsMTE1LDEwMSwzMiwxMTUsMTIxLDExNSwKKyAgICA0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwyMywxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCwKKyAgICA0MSw2LDExNCw3LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLAorICAgIDExMSwxMDcsMTE1LDExNCwxNjAsMCwwLDAsMTE0LDE2MSwwLDAsMCwxMTQsMTYyLDAsCisgICAgMCwwLDExNCwxNDcsMCwwLDAsNDEsMywxMTQsMjQyLDAsMCwwLDExNCwzNSwKKyAgICAwLDAsMCw5MCw0LDEwNCwxMTEsMTExLDEwNywxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA0LDExMSwxMTEsMTA3LDExNSwyMzksNiwwLDAsMTE1LDE2LDAsMCwwLDAsNywKKyAgICA5LDEsMTksMSwxNiwxLDMsMSwxNCwxLDEzLDEsMTIsMiwxMjIsMjIsCisgICAgODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNCwxMTEsMTExLDEwNywxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDMsCisgICAgMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDk3LDAsMCwwLAorICAgIDEyNCwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsMTA2LAorICAgIDEsMCwxMzEsMCwwLDEyNSwxLDAsMTEwLDAsMCwxMjEsMTcsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTI0LDEsMCwyNSwxMjUsMiwwLDg3LDExMCw0NiwwLDQsCisgICAgMTE2LDQsMCwxMDcsMTAsMCwxMTQsOTIsMCwxLDEsMSwxMjQsMCwwLDEwNiwKKyAgICA1LDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTI0LDEsMCw2MCw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsCisgICAgODMsNDEsMiwxMjIsMjEwLDcxLDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsCisgICAgMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDEyMSwxMTUsNDYsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLAorICAgIDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDQ0LDMyLDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5NywxMTIsCisgICAgMTEyLDExNCwxMTEsMTEyLDExNCwxMDUsOTcsMTE2LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywxMTAsMTAwLDMyLDk5LDk3LDk5LAorICAgIDEwNCwxMDEsMzIsMTA1LDExNiw0NiwzMiw3MywxMDIsMzIsMTEwLDExMSwzMiwxMDIsMTA1LDExMCwKKyAgICAxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsCisgICAgNDQsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwzMiw3OCwxMTEsMTEwLDEwMSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMzAsMCwwLDAsNDEsNiwxMTQsMywKKyAgICAwLDAsMCwxMTQsNDUsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDY5LDEsCisgICAgMCwwLDExNCwxMDQsMCwwLDAsMTE0LDczLDEsMCwwLDQxLDMsMTE0LDI0MiwKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDcxLDEsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyMCw5NSwxMTIsCisgICAgOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsMCw3LDAsMCwxMTUsMTYsMCwwLDAsMCw4LDEyLDEsMTUsCisgICAgMSwzLDEsMTcsMSwxMywxLDE1LDEsMTgsMSwxMjIsMzEsODAsOTcsMTE2LAogICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCiAgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw5OSwzLDAsMCwKLSAgICAwLDAsMCwwLDAsOCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwxODksMCwwLDAsMTAzLDAsMCwxMjUsMywwLDEyMCwxNzYsMCwxMjQsCi0gICAgMiwwLDY4LDkzLDE1OCwwLDEyNSw0LDAsMTE2LDAsMCwxMjQsNCwwLDExNiwKLSAgICAxLDAsMTE2LDIsMCwxMDIsMiwwLDEzMSwyLDAsMTE1LDQ2LDAsMTEzLDEzLAotICAgIDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDQsMCwxMzEsMSwwLAotICAgIDEyNSw1LDAsMTI0LDUsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDEzLDAsMTE2LAotICAgIDUsMCwxMjQsNSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTEyLDAsMTI0LDUsCi0gICAgMCwxMDYsNiwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDYsMCwKLSAgICAxMjUsNywwLDExMCwyMSwwLDEyNCw1LDAsMTA2LDcsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDYsMCwxMDMsMCwwLDEyNSw3LDAsMTI0LDYsMCwxMDAsMiwKLSAgICAwLDEwNyw5LDAsMTE0LDE1NSwwLDEyNCw2LDAsMTI0LDMsMCwxMDIsMiwwLAotICAgIDgzLDEyNCwzLDAsMTA2LDgsMCwxMjQsNywwLDEzMSwxLDAsMSwxMTMsMTMsCi0gICAgMCwxMTMsMTMsMCw4NywxMDAsMiwwLDEyNCwzLDAsMTAyLDIsMCw4MywxMDAsCi0gICAgMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDYzLDAsMCwwLDcwLDEwNSwxMTAsCi0gICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTExLDExNCwzMiwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDcsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDExNywxMSwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw3OCw0MCw5LDAsCi0gICAgMCwwLDExNywxMCwwLDAsMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMTYsMTE0LDExNyw1LDAsMCwwLDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMjAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsNDAsOCwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgMTQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDUsMCwwLDAsMTAxLDExMCwxMTYsMTE0LDEyMSwxMTcsNiwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNyw4LDAsMCwwLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwyNTIsNCwwLDAsMTE1LAotICAgIDI4LDAsMCwwLDAsNSw2LDEsMTMsMSwyMSwxLDYsMSwxNSwxLAotICAgIDEyLDEsMTUsMSwyNCwyLDE1LDEsNiwxLDEyLDIsMTAsNSwyMCwyLAotICAgIDExNywyMiwwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwzLDAsMCwwLAotICAgIDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5NywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsCi0gICAgMCwxMTYsMSwwLDEwNiwyLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCw5MiwyLDAsMTI1LAotICAgIDMsMCwxMjUsNCwwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLDExNCw2NCwKLSAgICAwLDEyNCwzLDAsODMsMTI0LDQsMCwxMTQsODksMCwxMTYsNCwwLDEyNCwxLAotICAgIDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDMsMCw4MywxMDAsMSwKLSAgICAwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsOTgsMCwwLDAsCi0gICAgNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LAotICAgIDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LAotICAgIDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsCi0gICAgMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw0Niw3OCw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxMSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0MCw1LDAsMCwwLDExNywzLDAsMCwwLAotICAgIDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwyMyw1LDAsMCwxMTUsMTYsMCwwLDAsMCw0LDEyLDEsCi0gICAgMTIsMSwyNCwxLDEyLDEsNCwyLDYsMywxOSwyLDExNywyMiwwLDAsCi0gICAgMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDExLDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwKLSAgICAxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMTE3LDExLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMTE3LDIwLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsCi0gICAgMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSwKLSAgICA5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwKLSAgICAwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMjA2LDQsMCwKLSAgICAwLDExNSwxNCwwLDAsMCwxNiwyLDYsMiwxOCw4LDE4LDE3LDE4LDE3LAotICAgIDE4LDI3LDMsMSwxMTcsMTAsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDMsMCwwLDAsNjYsMCwwLDAsMTE1LDExMCwwLDAsMCwxMjQsMCwwLAotICAgIDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCi0gICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCi0gICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCw5MCw3LAotICAgIDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsOCwwLDEwMCw4LDAsCi0gICAgMTAwLDksMCwxMzIsMCwwLDkwLDksMCwxMDEsMTAsMCwxMDAsMTAsMCwxMDAsCi0gICAgMTEsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsMTIsMCwxMDAsMTMsCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDE3MiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTcsOTksMTE2LDEwNSwxMTEsMTEwLDExNSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDk3LDExNCwKLSAgICAxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTEyLDEwMSwxMTQsCi0gICAgMTAyLDExMSwxMTQsMTA5LDk3LDExMCw5OSwxMDEsNDQsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDEwLAotICAgIDMyLDMyLDMyLDMyLDExNCwxMDEsMTAyLDExNCwxMDEsMTE1LDEwNCwxMDEsMTAwLDMyLDExOSwxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsMTA0LAotICAgIDk3LDExMCwxMDAsMTA4LDEwNSwxMTAsMTAzLDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsCi0gICAgMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwKLSAgICAwLDcsMCwwLDAsMTE1LDEyMiwwLDAsMCwxMDMsMCwwLDEyNSwzLDAsCi0gICAgMTIwLDUyLDAsMTI0LDIsMCw2OCw5Myw0NCwwLDkyLDIsMCwxMzcsMCwwLAotICAgIDEyNSw0LDAsMTI0LDMsMCwxMDYsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsCi0gICAgMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjQsNCwwLDY4LDEzMSwxLDAsMTMxLAotICAgIDEsMCwxLDExMywxMywwLDg3LDEyNCwzLDAsMTI0LDAsMCw5NSwxLDAsCi0gICAgMTI0LDEsMCwxMTIsNzksMCwxMDAsMywwLDEyNCwwLDAsOTUsMiwwLDEwMCwKLSAgICA2LDAsMTI0LDAsMCw5NSwzLDAsMTE2LDQsMCwxMzEsMCwwLDEyNCwwLAotICAgIDAsOTUsNSwwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LDYsMCwKLSAgICAxMDAsNSwwLDgzLDQwLDcsMCwwLDAsMTE3LDE1NCwwLDAsMCw3MywxMTAsCisgICAgMCwwLDAsMCwwLDYsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTEzLDAsMCwwLDExNiwwLDAsMTI0LDIsMCwxMDAsMSwwLDEzMSwKKyAgICAyLDAsMTE0LDM5LDAsMTI0LDIsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCw5MiwyLDAsMTI1LDMsMCwxMjUsNCwwLDExMCwyMSwwLDEyNCwyLDAsCisgICAgMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMDAsMCwwLDEyNSwKKyAgICA0LDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDg1LDAsMTE2LDMsCisgICAgMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCw4MywxMTYsNCwwLDEyNCwxLAorICAgIDAsMTAwLDAsMCwxMzEsMiwwLDEyNSw1LDAsMTI0LDQsMCwxMjQsNSwwLAorICAgIDk1LDUsMCwxMjQsNSwwLDgzLDQxLDIsNzgsMTE0LDE1OSwwLDAsMCw0MSwKKyAgICA2LDExNCw2MCwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw5LDEsMCwwLAorICAgIDExNCwxNjcsMCwwLDAsMTE0LDIxMywwLDAsMCwxMTQsMjE3LDAsMCwwLDQxLAorICAgIDYsMTE0LDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCw3MSwxLDAsMCwKKyAgICAxMTQsMTYzLDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsCisgICAgOTUsMTA4LDEwMSwxMDMsOTcsOTksMTIxLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LAorICAgIDE3LDcsMCwwLDExNSwxOCwwLDAsMCwwLDIsMTUsMSwyNCwyLDE1LAorICAgIDEsNiwxLDEyLDEsMTMsMSwxNSwxLDksMSwxMjIsMjcsODAsOTcsMTE2LAorICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5NSwKKyAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSw3OCw5OSw0LDAsMCwwLDAsMCwKKyAgICAwLDAsOSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwyNTIsCisgICAgMCwwLDAsMTAzLDAsMCwxMjUsNCwwLDEyMCwyMzksMCwxMjQsMiwwLDY4LAorICAgIDkzLDIwMywwLDEyNSw1LDAsMTE2LDAsMCwxMjQsNSwwLDExNiwxLDAsMTE2LAorICAgIDIsMCwxMDIsMiwwLDEzMSwyLDAsMTE1LDQ2LDAsMTEzLDEzLDAsMTEwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDUsMCwxMzEsMSwwLDEyNSw2LDAsCisgICAgMTI0LDYsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDEzLDAsMTE2LDQsMCwxMjQsCisgICAgNiwwLDEwMCwyLDAsMTMxLDIsMCwxMTQsMTA5LDAsMTI0LDYsMCwxMDYsNSwKKyAgICAwLDEyNCwxLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw3LDAsMTEwLDE4LDAsCisgICAgMTI0LDAsMCwxMDYsNiwwLDEyNCwxLDAsMTI0LDYsMCwxMzEsMiwwLDEyNSwKKyAgICA3LDAsMTI0LDcsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDE0NSwwLDExMywxMywKKyAgICAwLDExMCwwLDAsMTI0LDcsMCwxMDYsNywwLDEwMCwxLDAsMTA3LDksMCwKKyAgICAxMTQsMTY0LDAsMTI0LDcsMCw4MywxMjQsNywwLDEwNiw4LDAsMTI1LDgsMCwKKyAgICAxMjQsOCwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjAwLDAsMTE2LDksMCwxMDAsCisgICAgMywwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCw0LDAsMTA2LDEwLAorICAgIDAsMTI0LDgsMCwxMzEsMSwwLDEsMTEzLDEzLDAsMTEzLDEzLDAsODcsMTE2LAorICAgIDExLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTI1LDcsMCwxMjQsNCwKKyAgICAwLDEyNCw3LDAsOTUsOCwwLDEyNCw3LDAsODMsMTAwLDEsMCw4Myw0MSwKKyAgICA0LDEyMiw2Myw3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDMyLDExMSwxMTQsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDQ3LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTAsOTcsMTA5LAorICAgIDEwMSw0Niw3OCwxMTQsOCwxLDAsMCwxMjIsMTksMTE1LDExMiwxMDEsOTksMzIsMTA5LAorICAgIDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDEsMTIsMTE0LAorICAgIDE4NywwLDAsMCwyMTgsMywxMTUsMTE2LDExNCwyMTgsNSw5OCwxMjEsMTE2LDEwMSwxMTUsCisgICAgMTE0LDc0LDEsMCwwLDExNCw2MCwwLDAsMCwxMTQsOCwxLDAsMCwxMTQsCisgICAgNzUsMSwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwxNDcsCisgICAgMCwwLDAsMTE0LDE5MiwwLDAsMCwxMTQsMjEzLDAsMCwwLDQxLDksMTE0LAorICAgIDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNywKKyAgICAxLDAsMCwyMTgsMTQsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLAorICAgIDk3LDExNiwxMDQsOTAsNSwxMDEsMTEwLDExNiwxMTQsMTIxLDExNCw3MSwxLDAsMCwxMTQsCisgICAgMTcyLDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDksOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAorICAgIDExMiwxMDEsOTksMzAsNywwLDAsMTE1LDQwLDAsMCwwLDAsNSw2LDEsCisgICAgMTMsMSwyMSwxLDYsMSwxNSwxLDEyLDEsMTUsMSwyMSwyLDE4LDEsCisgICAgMTIsMSw2LDEsMTUsMSw0LDEsOSwxLDEyLDEsMTUsNSwyMCwyLAorICAgIDE1LDEsOSwxLDEyMiwyMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksOTksNCwwLDAsMCwwLAorICAgIDAsMCwwLDYsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTQzLDAsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyNCwwLAorICAgIDExNiwwLDAsMTA2LDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgMiwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMTI1LDQsCisgICAgMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNjEsMCwxMDAsMSwwLAorICAgIDgzLDEyNCw0LDAsMTA2LDMsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzNSwwLAorICAgIDEyNCw0LDAsMTA2LDQsMCwxMjUsNSwwLDEyNCw1LDAsMTE0LDEyOCwwLDEwMCwKKyAgICAyLDAsMTI0LDQsMCw5NSw1LDAsMTE2LDYsMCwxMjQsMSwwLDEyNCw1LAorICAgIDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwzLDAsMTI0LDQsMCw5NSw0LDAsCisgICAgMTI0LDQsMCw4MywxMDAsMSwwLDgzLDExMCw0LDAsMTI0LDQsMCw4MywxMDAsCisgICAgMSwwLDgzLDQxLDMsMTIyLDk4LDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDMyLDExMSwxMTQsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksMzIsOTgsOTcsMTE1LAorICAgIDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCisgICAgMTExLDExMSwxMDcsMTE1LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDc4LDkwLDksMTEwLDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsNDEsNywxMTQsNywwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDc5LDEsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDIxNywwLDAsMCwKKyAgICAxMTQsMjE0LDAsMCwwLDExNCw1NCwxLDAsMCw0MSw2LDExNCwyNDIsMCwwLAorICAgIDAsMTE0LDE1MiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDcsMSwwLDAsCisgICAgMTE0LDE3MiwwLDAsMCwxMTQsNzgsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDgsMSwwLDAsNjIsNywKKyAgICAwLDAsMTE1LDI2LDAsMCwwLDAsNCwxMiwxLDEyLDEsMjEsMSwxMiwKKyAgICAxLDQsMSwxNSwxLDksMSw2LDMsOSwxLDI0LDEsNCwyLDcsCisgICAgMiwxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsCisgICAgMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsCisgICAgMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzQsMCwxMDAsCisgICAgMSwwLDgzLDEyNCwzLDAsMTA2LDEsMCw4Myw0MSwyLDEyMiw5OCwxMDIsMTA1LAorICAgIDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwKKyAgICAzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywKKyAgICAxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwKKyAgICA3OCw0MSwyLDExNCw4LDEsMCwwLDExNCwxNjMsMCwwLDAsNDEsNCwxMTQsCisgICAgMjQyLDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxNzIsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDksMSwwLDAsODQsNywwLDAsMTE1LDgsMCwwLDAsCisgICAgMCw1LDE4LDEsMTIsMSw0LDEsMTIyLDIyLDgwLDk3LDExNiwxMDQsNzAsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNDEsMTIsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLAorICAgIDAsMTE0LDU5LDAsMCwwLDExNCw0LDEsMCwwLDExNCw2OCwxLDAsMCwKKyAgICAxMTQsNzMsMSwwLDAsMTE0LDc0LDEsMCwwLDExNCw3NSwxLDAsMCwxMTQsCisgICAgNzksMSwwLDAsMTE0LDgsMSwwLDAsMTE0LDksMSwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDY3LDEsMCwwLDIyNyw2LDAsMCwxMTUsMjIsMCwwLDAsCisgICAgMTIsMiw2LDIsMTgsOCwxOCwxNywxOCwxNywxOCwxMywzLDEsMTgsMzEsCisgICAgMywxLDIxLDIxLDMsMSwxMTQsNjcsMSwwLDAsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsMTMzLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwKKyAgICAwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLAorICAgIDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLAorICAgIDYsMCw5MCw3LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsOCwKKyAgICAwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDksMCwxMDAsMTAsMCwKKyAgICAxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMSwwLDkwLDEwLDAsMTAwLDEzLDAsMTAwLAorICAgIDE0LDAsMTMyLDAsMCw5MCwxMSwwLDEwMSwxMiwwLDEwMCwxNSwwLDEwMCwxNiwKKyAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMywwLDEwMCwxNywwLDEwMCwxOCwwLAorICAgIDEzMiwwLDAsOTAsMTQsMCwxMDAsMTAsMCw4Myw0MSwxOSwyMTgsMTAsNzAsMTA1LAorICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsMTcyLDcwLDEwNSwxMDgsMTAxLDQ1LDk4LAorICAgIDk3LDExNSwxMDEsMTAwLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDczLDExMCwxMTYsMTAxLDExNCw5Nyw5OSwxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExOSwKKyAgICAxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsCisgICAgMTE2LDEwMSwxMDksMzIsOTcsMTE0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMTIsMTAxLDExNCwxMDIsMTExLDExNCwxMDksOTcsMTEwLDk5LDEwMSw0NCwzMiwKKyAgICA5OCwxMDEsMTA1LDExMCwxMDMsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwxMDIsMTE0LDEwMSwxMTUsCisgICAgMTA0LDEwMSwxMDAsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDUsMTE0LAorICAgIDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsMzIsMTA1LDExNSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTA1LDExMCwxMDMsMzIsMTA0LDk3LAorICAgIDExNSwzMiw5OCwxMDEsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEwNSwxMDEsMTAwLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDk5LDIsMCwwLDAsMCwwLDAsMCw1LAorICAgIDAsMCwwLDUsMCwwLDAsNywwLDAsMCwxMTUsMTIyLDAsMCwwLAorICAgIDEwMywwLDAsMTI1LDMsMCwxMjAsNTIsMCwxMjQsMiwwLDY4LDkzLDQ0LDAsCisgICAgOTIsMiwwLDEzNywwLDAsMTI1LDQsMCwxMjQsMywwLDEwNiwwLDAsMTM1LAorICAgIDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNCw0LAorICAgIDAsNjgsMTMxLDEsMCwxMzEsMSwwLDEsMTEzLDEzLDAsODcsMTI0LDMsMCwKKyAgICAxMjQsMCwwLDk1LDEsMCwxMjQsMSwwLDExMiw3OSwwLDEwMCwzLDAsMTI0LAorICAgIDAsMCw5NSwyLDAsMTAwLDYsMCwxMjQsMCwwLDk1LDMsMCwxMTYsNCwKKyAgICAwLDEzMSwwLDAsMTI0LDAsMCw5NSw1LDAsMTE2LDQsMCwxMzEsMCwwLAorICAgIDEyNCwwLDAsOTUsNiwwLDEwMCw1LDAsODMsNDEsNywxMjIsMTU0LDczLDExMCwKICAgICAxMDUsMTE2LDEwNSw5NywxMDgsMTA1LDEyMiwxMDEsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsCiAgICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE1LDEwMSw5NywxMTQsOTksMTA0LAogICAgIDMyLDExMSwxMTAsMzIsOTcsMTEwLDEwMCwzMiw5NywzMiwxMTgsOTcsMTE0LDEwNSw5Nyw5OCwKQEAgLTMzMjAsMjA3ICszNDAyLDE5NSBAQAogICAgIDExMSwxMDMsMTEwLDEwNSwxMjIsMTAxLDExNSw0Niw5OSwxLDAsMCwwLDAsMCwwLAogICAgIDAsMiwwLDAsMCwzLDAsMCwwLDUxLDAsMCwwLDExNSwyNywwLAogICAgIDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsMCwxMjQsMSwwLDEzNiwwLAotICAgIDAsMTAyLDIsMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDc4LDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsNiwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw0MCwKLSAgICAxLDAsMCwwLDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsMTAxLAotICAgIDEyMCwxMTIsMTE0LDYyLDU2LDUsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsCi0gICAgMzgsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwKKyAgICAwLDEwMiwyLDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsNDEsMSw3OCwKKyAgICAxMTQsNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwxMTQsNTEsMSwwLAorICAgIDAsNDEsMSwxMTQsMTYzLDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwyMTEsMCwwLDAsMTEwLDcsMCwwLDExNSwyLDAsMCwwLAorICAgIDYsMCwxMjIsMzgsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwKICAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAotICAgIDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMSwwLDAsMCw3OCwxMDUsMjU1LDI1NSwyNTUsMjU1LDQwLDcsMCwwLDAsCi0gICAgMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDgsMCwwLDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE5LDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLAotICAgIDEwNSwxMjAsMTAxLDExNSw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsMTE3LDYsCi0gICAgMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDUwLDUsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsMTUsMSw5LDEsMTIsCi0gICAgMSwxMTcsMTksMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsCi0gICAgMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsCi0gICAgMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwwLDgzLAotICAgIDQwLDQsMCwwLDAsMTE3LDMxLDAsMCwwLDczLDExMCwxMTgsOTcsMTA4LDEwNSwKLSAgICAxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEwOSwxMTYsMTA1LDEwOSwxMDEsNDYsMTA1LDEsMCwwLDAsNzgsMTA1LAotICAgIDI1NSwyNTUsMjU1LDI1NSw0MCwxLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAotICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNjQsNSwwLDAsMTE1LDIsMCwKLSAgICAwLDAsMCwyLDExNywyOCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDEyLDAsCi0gICAgMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwyMTYsMSwwLDAsMTAwLAotICAgIDgsMCwxMjUsMiwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLAotICAgIDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyMSwyNSwwLDExNiwyLDAsMTA2LDMsCi0gICAgMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsMCwxMDYsNSwwLDEyNSw0LDAsCi0gICAgODcsMTEwLDI0LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCw3NiwwLDEsMSwKLSAgICAxLDEwMCw5LDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LDAsMTI0LAotICAgIDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDExNCwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMzEsMCwwLDEsMTI0LDQsMCwxMjQsMCwwLDk1LDcsMCwxMTAsMCwKLSAgICAwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTQ3LDAsMTI0LDAsMCwxMDYsMTAsMCwKLSAgICAxMjUsNSwwLDEyNCwzLDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNiwwLDExMCwKLSAgICAxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDUsMCwxMjQsMywwLDEyNSw2LAotICAgIDAsMTI0LDYsMCwxMjQsNSwwLDEwNyw2LDAsMTE0LDQ1LDEsMTE2LDEzLDAsCi0gICAgMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExNiwKLSAgICAxNCwwLDEyNCw3LDAsMTMxLDEsMCwxMTQsNDUsMSwxMjAsOTEsMCwxMjQsMCwKLSAgICAwLDEwNiwxNSwwLDY4LDkzLDcxLDAsOTIsMiwwLDEyNSw4LDAsMTI1LDksCi0gICAgMCwxMDAsNCwwLDEyNCw4LDAsMjMsMTI1LDEwLDAsMTE2LDEzLDAsMTI0LDcsCi0gICAgMCwxMjQsMTAsMCwxMzEsMiwwLDEyNSwxMSwwLDExNiwxNiwwLDEyNCwxMSwwLAotICAgIDEzMSwxLDAsMTE0LDIxNCwwLDEyNCw5LDAsMTI0LDEsMCwxMjQsMTEsMCwxMzEsCi0gICAgMiwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDExMywyMTQsMCw4NywKLSAgICAxMDAsMTAsMCwxMjUsMiwwLDExMyw0NSwxLDExMCwwLDAsMTIwLDEyMCwwLDEyNCwKLSAgICAwLDAsMTA2LDE1LDAsNjgsOTMsMTA5LDAsOTIsMiwwLDEyNSw4LDAsMTI1LAotICAgIDksMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDMsMCwxMjQsOCwKLSAgICAwLDIzLDEzMSwyLDAsMTI1LDExLDAsMTE2LDE4LDAsMTAwLDUsMCwxMDYsMTksCi0gICAgMCwxMjQsMTEsMCwxMzEsMSwwLDEwMCw2LDAsMTAwLDIsMCwxMzEsMSwxLAotICAgIDEsMTI0LDYsMCwxMjQsOCwwLDIzLDEyNCw1LDAsMTA3LDYsMCwxMTQsNTUsCi0gICAgMSwxMTYsMTYsMCwxMjQsMTEsMCwxMzEsMSwwLDExNCwxNjQsMSwxMjQsOSwwLAotICAgIDEyNCwxLDAsMTI0LDExLDAsMTMxLDIsMCwxMDMsMCwwLDEwMiwyLDAsODMsCi0gICAgMTEzLDU1LDEsMTEzLDU1LDEsODcsMTI0LDIsMCwxMTQsMjA2LDEsMTE2LDE4LDAsCi0gICAgMTAwLDcsMCwxMDYsMTksMCwxMjQsNywwLDEzMSwxLDAsMTMxLDEsMCwxLAotICAgIDEwMCwxMSwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDEwMCwxMSwwLAotICAgIDEwMywwLDAsMTAyLDIsMCw4Myw0MCwxMiwwLDAsMCwxMTcsMTI1LDAsMCwKLSAgICAwLDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAotICAgIDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LDExNywxLAotICAgIDAsMCwwLDQ2LDEwNSwyLDAsMCwwLDEwNSwxLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNyw5LDAsMCwwLDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTA1LDExNiwxMjEsMTE3LDI1LDAsMCwwLDExMiwxMTEsMTE1LDExNSwKLSAgICAxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMjMsMTI1LDcwLDEwNSwyNTUsMjU1LDI1NSwyNTUsODQsNzgsNDAsMjEsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLDAsMCwwLAotICAgIDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNywxOSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsCi0gICAgMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsCi0gICAgOCwwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMTIsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsMTE3LDQsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw2LDAsMCwwLAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNSwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDExNywKLSAgICAxMiwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNyw5LDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsCi0gICAgMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTE3LDYsMCwwLDAsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNzAsNSwwLDAsMTE1LDY2LDAsMCwwLDAsMyw2LDEsMTksMSwzLAotICAgIDEsMjUsMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLDIsOSwxLDksCi0gICAgMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDEyLDEsMjIsMSwxMCwKLSAgICAxLDE1LDEsMTIsMSwyNiw0LDEyLDIsMjIsMSwyMiwxLDI1LDEsMTYsCi0gICAgMSwxMiwxLDI2LDEsNiwxLDE5LDEsMTMsMSwxMTcsMjIsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsOSwKLSAgICAwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsOCwxLDAsMCwKLSAgICAxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMTksMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwKLSAgICAxMTYsMywwLDExNiw0LDAsMTE2LDUsMCwxMDIsMywwLDEwNywxMCwwLDExNCwKLSAgICA2MywwLDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LAotICAgIDExNiw2LDAsMTA2LDcsMCwxMDYsOCwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsCi0gICAgMTAwLDAsMTE2LDksMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxMCwKLSAgICAwLDExMCwxMTEsMCwxMTYsOSwwLDEzMSwwLDAsMTI1LDMsMCwxMjAsOTAsMCwKLSAgICAxMjQsMiwwLDY4LDkzLDgyLDAsMTI1LDQsMCwxMjQsNCwwLDEwNiwxMSwwLAotICAgIDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDUsMCwxMjUsNiwwLDEyNSwKLSAgICA3LDAsMTI0LDYsMCwxMTQsMTc5LDAsMTAwLDMsMCwxMDYsMTIsMCwxMjQsNSwKLSAgICAwLDEyNCw3LDAsMTA2LDEzLDAsMTMxLDAsMCwxMzEsMiwwLDEyNSw4LDAsCi0gICAgMTEwLDYsMCwxMjQsNSwwLDEyNSw4LDAsMTI0LDMsMCwxMDYsMTQsMCwxMjQsCi0gICAgOCwwLDEzMSwxLDAsMSwxMTMsMTE2LDAsODcsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDEwLDAsMTE2LDYsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE1LDAsMTMxLAotICAgIDEsMCwxMTQsNCwxLDExNiw5LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsMTI0LDIsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxNiwKLSAgICAwLDExMCwwLDAsMTAwLDYsMCw4Myw0MCw3LDAsMCwwLDExNyw2OCwwLAotICAgIDAsMCw3MCwxMDUsMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDMyLDExMSwxMDIsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDAsMTA1LDExNCwxMDEsCi0gICAgOTksMTE2LDExMSwxMTQsMTIxLDQ2LDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNywxLAotICAgIDAsMCwwLDQ2LDExNyw1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDExNSwKLSAgICAwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEzMSwwLDAsODYsMSwxMTMsMywwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsMiwwLDAsMCwxMDIsMTEwLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsCi0gICAgMTAxLDEyMCwxMTIsMTE0LDYyLDE0Myw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsCi0gICAgMTE3LDQxLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw3OCw0MCwKLSAgICAxNywwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMywwLAotICAgIDAsMCw5NSwxMTEsMTE1LDExNyw3LDAsMCwwLDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LAotICAgIDExNCwxMTcsMTcsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzgsMTExLDExNiw3MCwxMTEsMTE3LAotICAgIDExMCwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxNSwwLDAsMCw4MCwxMDEsMTE0LDEwOSwKLSAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLAotICAgIDc4LDExMSwxMTYsNjUsNjgsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsOCwwLDAsMCwxMTIsCi0gICAgMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMTE3LDEwLDAsMCwwLDExNSwxMTYsOTcsMTE0LAotICAgIDExNiwxMTUsMTE5LDEwNSwxMTYsMTA0LDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw5LAotICAgIDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDYsMCwwLAotICAgIDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsCi0gICAgMTE0LDExNywzLDAsMCwwLDk3LDEwMCwxMDAsMTE3LDI3LDAsMCwwLDk1LDY3LAotICAgIDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LAotICAgIDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk5LDExMSwxMTAsCi0gICAgMTE2LDEwMSwxMTAsMTE2LDExNSwxMTcsMjEsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCw5NSwKLSAgICAxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE3LAotICAgIDQsMCwwLDAsMTA1LDExNiwxMDEsMTA5LDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDEwMCwxMTEsMTE2LDExNyw2LDAsMCwwLDExNSwxMTcsCi0gICAgMTAyLDEwMiwxMDUsMTIwLDExNyw4LDAsMCwwLDExMCwxMDEsMTE5LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNCw1LDAsCi0gICAgMCwxMTUsMzQsMCwwLDAsMCwyLDksMSwzLDEsMTksMSwyMiwzLAotICAgIDExLDMsMTgsMSwxOCw3LDksMSwxMywxLDI0LDEsNiwxLDI3LDIsCi0gICAgNiwxLDE3LDEsOSwxLDE4LDEsMTE3LDIyLDAsMCwwLDcwLDEwNSwxMDgsCi0gICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCi0gICAgMywwLDAsMCw3LDAsMCwwLDExNSwyNSwwLDAsMCwxMzUsMCwwLAotICAgIDEzNSwxLDAsMTAyLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsCi0gICAgMiwwLDEyNCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMjAsMSwwLDAsCisgICAgNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDExNCwxMTAsMCwwLDAsMTE0LAorICAgIDI5LDAsMCwwLDc4LDExNCwxMzIsMCwwLDAsNDEsNywxMTQsMTkyLDAsMCwKKyAgICAwLDIxOCw4LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNCwzNSwwLDAsMCwKKyAgICAyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwyMTgsMywxMTUsCisgICAgMTAxLDExNiwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwyMTgsCisgICAgMTksOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksCisgICAgOTcsOTksMTA0LDEwMSw0MSw1LDExNCw3OCwwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMjE4LDE0LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsCisgICAgOTAsNywxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTQsMTIxLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDQxLDEsMTE0LDE2MywwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgNzksMCwwLDAsMTA0LDcsMCwwLDExNSwxNiwwLDAsMCwwLDQsNiwKKyAgICAxLDE5LDEsMzYsMSw5LDIsMTUsMSw5LDEsMTIsMSwxMjIsMTksNzAsCisgICAgMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCisgICAgOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTAwLDMsMCwxMjQsCisgICAgMCwwLDk1LDAsMCwxMDAsMiwwLDgzLDQxLDQsMTIyLDMxLDczLDExMCwxMTgsCisgICAgOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsCisgICAgOTksMTE2LDExMSwxMTQsMTIxLDMyLDEwOSwxMTYsMTA1LDEwOSwxMDEsNDYsMTE0LDI5LDAsMCwKKyAgICAwLDc4LDExNCwxMzIsMCwwLDAsNDEsMSwxMTQsODIsMSwwLDAsNDEsMSwKKyAgICAxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDY4LDEsMCwwLDExOCw3LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDIsMTIyLDI4LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDExNSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSw1OSwwLDAsMCwxMjQsMCwwLDEwNiwKKyAgICAwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMDAsMSwKKyAgICAwLDEwNyw4LDAsMTE0LDM3LDAsMTAwLDEsMCwxMDMsMCwwLDEwMiwyLDAsCisgICAgODMsMTI0LDIsMCwxMDYsMSwwLDEyNCwyLDAsMTA2LDIsMCwxMTIsNTUsMCwKKyAgICAxMDMsMCwwLDEwMiwyLDAsODMsNDEsMiwxMjIsMTI1LDg0LDExNCwxMjEsMzIsMTE2LAorICAgIDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwKKyAgICAxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsCisgICAgMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMiwxMTEsMTE0LDExNiwxMDUsCisgICAgMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsNDAsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LDExNSwxMTYsNDUsMTExLDEwMiw0NSwxMTIsMTExLAorICAgIDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LDc4LDQxLDMsMTE0LDgsMSwwLDAsCisgICAgMTE0LDE2MywwLDAsMCwxMTQsMjE3LDAsMCwwLDQxLDMsMTE0LDc4LDAsMCwKKyAgICAwLDExNCwxNTIsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTU5LDAsMCwwLDEyNCwKKyAgICA3LDAsMCwxMTUsOCwwLDAsMCwwLDMsMTUsMSwxMiwxLDEwLDEsCisgICAgMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsCisgICAgMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksNiwwLDAsMCwwLDAsMCwKKyAgICAwLDgsMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDk3LDAsCisgICAgMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDYsCisgICAgMCwxMjEsMTMsMCwxMjQsNiwwLDEwNiwwLDAsMTI1LDcsMCw4NywxMTAsNDMsCisgICAgMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDczLDAsMSwxLDEsMTE2LDIsCisgICAgMCwxMjQsMiwwLDEyNCwzLDAsMTAwLDEsMCwxMjQsNiwwLDEwMCwyLDAsCisgICAgMTI0LDQsMCwxMzEsMiwyLDgzLDg5LDExMCwyMCwwLDg4LDEyNCw3LDAsMTI0LAorICAgIDIsMCwxMjQsMywwLDEyNCw0LDAsMTI0LDUsMCwxMzEsNCwwLDgzLDEwMCwKKyAgICAwLDAsODMsNDEsMyw3OCwxMTQsMTYzLDAsMCwwLDExNCwyMTcsMCwwLDAsCisgICAgNDEsMywxMTQsNzksMSwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsMjMyLDAsMCwKKyAgICAwLDQxLDgsMTE0LDc4LDAsMCwwLDExNCwyMzYsMCwwLDAsMTE0LDE1MiwwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsNywxLDAsCisgICAgMCwxMTQsMTYzLDAsMCwwLDkwLDgsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDc5LDEsMCwwLDEzMiw3LDAsMCwxMTUsMTQsMCwwLDAsMCwxLDE1LAorICAgIDEsMywxLDEzLDEsMTMsMSwxOCwxLDEyLDIsMTIyLDIwLDcwLDEwNSwxMDgsCisgICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsCisgICAgOTksNzgsOTksMywwLDAsMCwwLDAsMCwwLDE0LDAsMCwwLDE1LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyNDAsMSwwLDAsMTAwLDEsMCwxMjUsCisgICAgMywwLDEyNCwxLDAsMTA2LDAsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDMsCisgICAgMCwyNSwxMjUsNCwwLDEyMSwzNCwwLDExNiwxLDAsMTI0LDAsMCwxMDYsMiwKKyAgICAwLDExMiw0OSwwLDExNiwzLDAsMTA2LDQsMCwxMzEsMCwwLDEzMSwxLDAsCisgICAgMTA2LDUsMCwxMjUsNSwwLDg3LDExMCwyNCwwLDQsMTE2LDYsMCwxMDcsMTAsCisgICAgMCwxMTQsODUsMCwxLDEsMSwxMDAsMTAsMCwxMjUsNSwwLDg5LDExMCwxLAorICAgIDAsODgsMTI0LDUsMCwxMjQsMCwwLDEwNiw3LDAsMTA3LDMsMCwxMTQsMTIzLAorICAgIDAsMTI0LDAsMCwxMDYsOCwwLDEzMSwwLDAsMSwxMjQsNSwwLDEyNCwwLAorICAgIDAsOTUsNywwLDExMCwwLDAsMTE2LDksMCwxMzEsMCwwLDExNCwxNTYsMCwKKyAgICAxMjQsMCwwLDEwNiwxMCwwLDEyNSw2LDAsMTI0LDQsMCwxMDYsMTEsMCwxMzEsCisgICAgMCwwLDEyNSw3LDAsMTEwLDE1LDAsMTI0LDAsMCwxMDYsMTIsMCwxMjUsNiwKKyAgICAwLDEyNCw0LDAsMTI1LDcsMCwxMjQsNywwLDEyNCw2LDAsMTA3LDYsMCwKKyAgICAxMTQsNTEsMSwxMTYsMTMsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDQsMCwxMzEsCisgICAgMiwwLDEyNSw4LDAsMTIwLDEwMywwLDEyNCwwLDAsMTA2LDE0LDAsNjgsOTMsCisgICAgNzcsMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsMCwxMDAsNSwwLDEyNCw5LAorICAgIDAsMjMsMTI1LDExLDAsMTE2LDEzLDAsMTI0LDgsMCwxMjQsMTEsMCwxMzEsMiwKKyAgICAwLDEyNSwxMiwwLDExNiwxNSwwLDEyNCwxMiwwLDEzMSwxLDAsMTE0LDIxMSwwLAorICAgIDEyNCwwLDAsMTA2LDE2LDAsMTI0LDEwLDAsMTI0LDEsMCwxMjQsMTIsMCwxMjQsCisgICAgOCwwLDEwMywxLDAsMTI0LDIsMCwxMzEsNSwwLDgzLDExMywyMTEsMCw4NywKKyAgICAxMTYsMTcsMCwxMjQsOCwwLDEzMSwxLDAsMTI1LDMsMCwxMTAsMCwwLDEyMCwKKyAgICAxMjYsMCwxMjQsMCwwLDEwNiwxNCwwLDY4LDkzLDExNSwwLDkyLDIsMCwxMjUsCisgICAgOSwwLDEyNSwxMCwwLDExNiwxMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsNCwKKyAgICAwLDEyNCw5LDAsMjMsMTMxLDIsMCwxMjUsMTIsMCwxMTYsMTgsMCwxMDAsNiwKKyAgICAwLDEwNiwxOSwwLDEyNCwxMiwwLDEzMSwxLDAsMTAwLDcsMCwxMDAsMywwLAorICAgIDEzMSwxLDEsMSwxMjQsNywwLDEyNCw5LDAsMjMsMTI0LDYsMCwxMDcsNiwKKyAgICAwLDExNCw2MSwxLDExNiwxNSwwLDEyNCwxMiwwLDEzMSwxLDAsMTE0LDE3NiwxLAorICAgIDEyNCwwLDAsMTA2LDE2LDAsMTI0LDEwLDAsMTI0LDEsMCwxMjQsMTIsMCwxMDAsCisgICAgOCwwLDEyNCwyLDAsMTMxLDUsMCw4MywxMTMsNjEsMSwxMTMsNjEsMSw4NywKKyAgICAxMjQsMywwLDExNCwyMzYsMSwxMTYsMTgsMCwxMDAsOSwwLDEwNiwxOSwwLDEyNCwKKyAgICA4LDAsMTMxLDEsMCwxMzEsMSwwLDEsMTE2LDIwLDAsMTI0LDEsMCwxMDAsCisgICAgOCwwLDEzMSwyLDAsMTI1LDEzLDAsMTI0LDgsMCwxMDMsMSwwLDEyNCwxMywKKyAgICAwLDk1LDIxLDAsMTI0LDEzLDAsODMsMTAwLDgsMCw4Myw0MSwxMSwxMjIsMTI1LAorICAgIDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSwKKyAgICA5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDExMSwKKyAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLAorICAgIDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKKyAgICAxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LDExNSwxMTYsNDUsCisgICAgMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LDcwLDExNCwxMTAsCisgICAgMCwwLDAsMTE0LDEwOSwwLDAsMCwxMTQsMjksMCwwLDAsMTE0LDc5LDAsCisgICAgMCwwLDEyMiw5LDExNiwxMTQsMTIxLDEwNSwxMTAsMTAzLDMyLDEyMywxMjUsMTE0LDEzOSwwLAorICAgIDAsMCw3OCwxMjIsMjUsMTEyLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEyMywxMjUsMTE0LDEzMiwKKyAgICAwLDAsMCw0MSwyMiwxMTQsMzIsMCwwLDAsMTE0LDM5LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCwxMTQsMywwLDAsMCwxMTQsNDUsMCwwLDAsMTE0LDQ2LAorICAgIDEsMCwwLDExNCw0MCwwLDAsMCwxMTQsODIsMSwwLDAsMjE4LDExLDk1LAorICAgIDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNCw2LDAsMCwwLDExNCwKKyAgICA4NSwxLDAsMCwxMTQsMTMzLDAsMCwwLDExNCw4NCwxLDAsMCwxMTQsMjgsCisgICAgMCwwLDAsMTE0LDgxLDEsMCwwLDExNCw0NCwwLDAsMCwxMTQsNzksMSwKKyAgICAwLDAsMTE0LDQ2LDAsMCwwLDExNCwxNDYsMCwwLDAsMTE0LDQ3LDAsMCwKKyAgICAwLDExNCwyMTMsMCwwLDAsMTE0LDIxNywwLDAsMCw0MSwxNCwxMTQsNzgsMCwKKyAgICAwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNywxLDAsMCw5MCwxMiwxMDUsMTE1LAorICAgIDk1LDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDkwLDExLDExNiw5NywxMDUsMTA4LAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCwxNzgsMCwwLDAsOTAsNSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDkwLDEyLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTAsOSw5OCw5NywxMTUsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCw1MSwxLDAsCisgICAgMCwxMTQsMjM2LDAsMCwwLDkwLDEzLDEwNSwxMTAsMTA1LDExNiw5NSwxMDIsMTA1LDEwOCwKKyAgICAxMDEsMTEwLDk3LDEwOSwxMDEsOTAsOSwxMDIsMTE3LDEwOCwxMDgsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgMTE0LDE3MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsOCwxLDAsMCwxNDIsNywwLDAsMTE1LDY4LDAsCisgICAgMCwwLDAsMyw2LDEsMTksMSwzLDEsMzQsMSwxMywxLDExLDEsCisgICAgMTUsMSwxMCwxLDEyLDIsOSwxLDksMSwxNSwyLDksMSw2LDIsCisgICAgMTIsMSwxOCwxLDIyLDEsMTAsMSwxNSwxLDEyLDEsMzIsNCwxNSwyLAorICAgIDIyLDEsMjIsMSwyNSwxLDE2LDEsMTIsMSwzMiwxLDYsMSwxOSwxLAorICAgIDE1LDEsMTIsMSw0LDEsMTIyLDIwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLAorICAgIDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCw5LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwxNCwxLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsCisgICAgMzEsMCwxMTYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMTIsMzMsMCwxMTYsMSwKKyAgICAwLDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLAorICAgIDAsNCwxMTYsNCwwLDExNiw1LDAsMTE2LDYsMCwxMDIsMywwLDEwNywxMCwKKyAgICAwLDExNCw3NSwwLDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwKKyAgICAwLDg4LDExNiw3LDAsMTA2LDgsMCwxMDYsOSwwLDEwMCwxLDAsMTMxLDEsCisgICAgMCwxMTUsMTEyLDAsMTE2LDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwwLDAsCisgICAgOTUsMTEsMCwxMTAsMTExLDAsMTE2LDEwLDAsMTMxLDAsMCwxMjUsMywwLDEyMCwKKyAgICA5MCwwLDEyNCwyLDAsNjgsOTMsODIsMCwxMjUsNCwwLDEyNCw0LDAsMTA2LAorICAgIDEyLDAsMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNSwwLDEyNSw2LAorICAgIDAsMTI1LDcsMCwxMjQsNiwwLDExNCwxOTEsMCwxMDAsMywwLDEwNiwxMywwLAorICAgIDEyNCw1LDAsMTI0LDcsMCwxMDYsMTQsMCwxMzEsMCwwLDEzMSwyLDAsMTI1LAorICAgIDgsMCwxMTAsNiwwLDEyNCw1LDAsMTI1LDgsMCwxMjQsMywwLDEwNiwxNSwKKyAgICAwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMjgsMCw4NywxMjQsMywwLDEyNCwKKyAgICAwLDAsOTUsMTEsMCwxMTYsNywwLDEwNiw4LDAsMTA2LDksMCwxMTYsMTYsCisgICAgMCwxMzEsMSwwLDExNCwxMCwxLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAorICAgIDEyNCwyLDAsNjgsMTMxLDEsMCwxMjQsMCwwLDk1LDE3LDAsMTEwLDAsMCwKKyAgICAxMDAsNiwwLDgzLDQxLDcsMTIyLDY4LDcwLDEwNSwxMDgsMTA4LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTExLDEwMiwzMiwxMTIsMTExLDExNiwxMDEsMTEwLDExNiwKKyAgICAxMDUsOTcsMTA4LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsCisgICAgMTE1LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDYsMTE0LDAsMCwwLAorICAgIDAsMTE0LDExMCwwLDAsMCwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw4MywwLAorICAgIDAsMCwxMTUsMjgsMCwwLDAsMTA0LDAsMCwxMjQsMCwwLDkzLDE4LDAsCisgICAgMTI1LDEsMCwxMjQsMSwwLDEwNiwwLDAsMTMxLDAsMCwxNDYsMiwwLDExMywKKyAgICA2LDAsODMsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTMzLDAsMCwwLDQxLAorICAgIDIsMTE0LDIyLDAsMCwwLDkwLDIsMTAyLDExMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyNTAsOSw2MCwxMTUsMTAxLDExNiw5OSwKKyAgICAxMTEsMTA5LDExMiw2MiwyMTYsNywwLDAsMTE1LDIsMCwwLDAsOSwwLDEyMiwKKyAgICA0MSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LAorICAgIDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKKyAgICA0Niw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2Miw3OCw0MSwxOCwxMTQsMzUsMCwKKyAgICAwLDAsMTE0LDMsMCwwLDAsOTAsNywxMDgsMTA1LDExNSwxMTYsMTAwLDEwNSwxMTQsCisgICAgMTE0LDQ1LDAsMCwwLDIxOCwxNyw3MCwxMDUsMTA4LDEwMSw3OCwxMTEsMTE2LDcwLDExMSwKKyAgICAxMTcsMTEwLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMjE4LDE1LDgwLDEwMSwxMTQsMTA5LDEwNSwxMTUsCisgICAgMTE1LDEwNSwxMTEsMTEwLDY5LDExNCwxMTQsMTExLDExNCwyMTgsMTgsNzgsMTExLDExNiw2NSw2OCwKKyAgICAxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw3LDAsCisgICAgMCwwLDExNCw4LDAsMCwwLDExNCw5LDAsMCwwLDExNCw4MywxLDAsCisgICAgMCwxMTQsODQsMSwwLDAsMTE0LDExNSwwLDAsMCwxMTQsNDcsMCwwLDAsCisgICAgMTE0LDEzMywwLDAsMCwyMTgsMyw5NywxMDAsMTAwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgODUsMSwwLDAsNDEsOSwxMTQsNzgsMCwwLDAsMTE0LDM1LDAsMCwwLAorICAgIDkwLDgsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDkwLDIxLDEwOCwxMTEsMTE5LDEwMSwKKyAgICAxMTQsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsCisgICAgMTE1LDExNCw2NSwxLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDU5LDEsMCwwLAorICAgIDExNCw1MSwxLDAsMCw5MCw4LDExMCwxMDEsMTE5LDk1LDExMCw5NywxMDksMTAxLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4NywKKyAgICAxLDAsMCwxODcsNywwLDAsMTE1LDM0LDAsMCwwLDAsMiw5LDEsCisgICAgMywxLDMxLDEsMjIsMywxMSwzLDE4LDEsMTgsNyw5LDEsMTMsMSwKKyAgICAyNCwxLDYsMSwyNywyLDYsMSwxNywxLDksMSwxOCwxLDEyMiwyMiwKKyAgICA3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LDEwOCwKKyAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDMsMCwwLDAsNywwLDAsMCwxMTUsMjUsMCwwLDAsCisgICAgMTM1LDAsMCwxMzUsMSwwLDEwMiwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwKKyAgICAwLDAsMTI1LDIsMCwxMjQsMiwwLDgzLDQxLDMsOTcsMjAsMSwwLDAsCiAgICAgNjUsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LAogICAgIDEwNCwxMDUsOTksMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiw5OSwKICAgICAxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDExMSwxMTAsCkBAIC0zNTQyLDg4OSArMzYxMiw2MTUgQEAKICAgICAwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDQ2LDAsMCwwLDExNiwwLAogICAgIDAsMTI0LDAsMCwxMzEsMSwwLDExNSwzMywwLDExNiwxLDAsMTAwLDEsMCwKICAgICAxMDAsMiwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LAotICAgIDAsMCwxMjQsMCwwLDEzNiwxLDAsMTQwLDEsMCw4Myw0MCwzLDAsMCwKLSAgICAwLDExNyw0NSwwLDAsMCw4MCw5NywxMTYsMTA0LDMyLDEwNCwxMTEsMTExLDEwNywzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDEwOSw5NywKLSAgICA5OSwxMDQsMTA1LDExMCwxMDEsMTE0LDEyMSw0Niw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQ2LDExNywzMCwwLDAsMCwxMTEsMTEwLDEwOCwxMjEsMzIsMTAwLDEwNSwxMTQsCi0gICAgMTAxLDk5LDExNiwxMTEsMTE0LDEwNSwxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE1LDExNywxMTIsCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsCi0gICAgMiwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LAotICAgIDExNSwxMDAsMTA1LDExNCwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LAotICAgIDEwOCwxMTUsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSwKLSAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDE1NSw1LDAsMCwxMTUsNiwwLDAsMCwwLAotICAgIDIsMTIsMSwyMSwxLDExNyw1NCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsCi0gICAgMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDAsMCwwLDAsMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk5LAotICAgIDEwOCwxMTUsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwKLSAgICAxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDI0LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwKLSAgICAxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCw5OSwxMDgsMTE1LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LAotICAgIDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTQ1LDUsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMTAsMjEsNiwxMTcsMjAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTQsMCwwLDAsMTAwLDEsMCwxMjQsMCwwLDEwNiwwLDAsCi0gICAgMTAyLDEsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywxNCwwLDAsMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDM3LDExNCw0MSw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDEsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsCi0gICAgMTE0LDk1LDk1LDE2Myw1LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDE5LAotICAgIDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQwLDEzLDAsMCwwLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLAotICAgIDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsCi0gICAgMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCi0gICAgOTUsOTUsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwKLSAgICAxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMTE3LDE3LDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMSwKLSAgICAwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsOSwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCw3MCwxMDUsCi0gICAgMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQxLDUsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwxNiw3LDYsMiwxMiwxNCwxMiw0LDYsMiwxMiw0NCwxMiwzMSwxOCwKLSAgICAxOCwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwKLSAgICAwLDY2LDAsMCwwLDExNSw1MCwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLAorICAgIDAsMCwxMjQsMCwwLDEzNiwxLDAsMTQwLDEsMCw4Myw0MSwzLDEyMiw0NSwKKyAgICA4MCw5NywxMTYsMTA0LDMyLDEwNCwxMTEsMTExLDEwNywzMiwxMDIsMTExLDExNCwzMiwxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDEwOSw5Nyw5OSwxMDQsMTA1LDExMCwxMDEsMTE0LAorICAgIDEyMSw0Niw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEyMiwzMCwxMTEsCisgICAgMTEwLDEwOCwxMjEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEwNSwxMDEsMTE1LDMyLAorICAgIDk3LDExNCwxMDEsMzIsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMTE0LDM1LDAsCisgICAgMCwwLDQxLDIsMTE0LDQ2LDAsMCwwLDExNCwxNDcsMCwwLDAsNDEsMSwKKyAgICAxMTQsMzUsMCwwLDAsNDEsMiwxMTQsMjQyLDAsMCwwLDExNCw4NiwxLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjQsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMjI4LDcsMCwwLDExNSw2LDAsMCwwLDAsMiwKKyAgICAxMiwxLDIxLDEsMTIyLDU0LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsCisgICAgMTA4LDExNSw2Miw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTUsMTAyLDExMSwKKyAgICAxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTQsNCwwLDAsCisgICAgMCw0MSwzLDExNCwyNDIsMCwwLDAsMTE0LDg2LDEsMCwwLDExNCw5MywxLAorICAgIDAsMCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyNDIsMCwwLDAsMTE0LDg2LAorICAgIDEsMCwwLDExNCw1LDAsMCwwLDIxOCw5LDExMiw5NywxMTYsMTA0LDk1LDEwNCwKKyAgICAxMTEsMTExLDEwNywyMTgsNywwLDAsMTE1LDQsMCwwLDAsMCwxMCwyMSw2LAorICAgIDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwKKyAgICAxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsCisgICAgNDEsMiw3OCwxMjIsMTYsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwKKyAgICAxMjMsMzMsMTE0LDEyNSw0MSw0MSwyLDExNCw0NywwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsNDEsMSwxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDkwLDAsMCwwLDIzNiw3LDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsCisgICAgMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQxLDE1LDExNCw1NywKKyAgICAwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLAorICAgIDAsMCwxMTQsNzksMCwwLDAsMTE0LDY4LDEsMCwwLDExNCwxNjYsMCwwLAorICAgIDAsMTE0LDksMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNzksMSwwLDAsCisgICAgMTE0LDgsMSwwLDAsMTE0LDg3LDEsMCwwLDExNCw0LDEsMCwwLDExNCwKKyAgICA5NCwxLDAsMCwxMTQsOTAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDgwLDEsCisgICAgMCwwLDk1LDcsMCwwLDExNSwyMCwwLDAsMCwxMiw3LDYsMiwxMiwKKyAgICAxNCwxMiw0LDYsMiwxMiw4LDEyLDEwLDE1LDQ1LDEyLDMxLDE4LDE4LDExNCwKKyAgICA4MCwxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw0NiwwLDAsMCwxMDEsMCwKICAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKICAgICAxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsCi0gICAgNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsODMsNDAsNywwLDAsCi0gICAgMCwxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksCi0gICAgMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDExNywzNiwwLDAsMCw2NywxMTEsMTEwLAotICAgIDExNiwxMDEsMTIwLDExNiwzMiwxMDksOTcsMTEwLDk3LDEwMywxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAorICAgIDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDgzLDQxLDcsMjE4LDE4LAorICAgIDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsCisgICAgMTIwLDExNiwxMjIsMzYsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMzIsMTA5LDk3LDExMCw5NywKKyAgICAxMDMsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMSwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwxNCwwLAorICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDEwMCwxLDAsODMsCisgICAgNDEsMiwxMjIsMjQsNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MSwyLDExNCwKKyAgICA5NiwwLDAsMCwxMTQsMjU1LDAsMCwwLDQxLDEsMTE0LDc4LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICA5OCwwLDAsMCwyNDYsNywwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwKKyAgICAyOCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsCisgICAgMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSw0LDAsCisgICAgMCwwLDAsMCwwLDAsNCwwLDAsMCwxLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwKKyAgICAxLDEwMCwxLDAsODMsNDEsMiwxMjIsNjAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwKICAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywKLSAgICA0Niw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTMxLDAsMCwxLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjQsCi0gICAgMCwwLDAsNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwwLDAsMCw5NywKLSAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsOTUsOTUsMTAxLDExMCwxMTYsMTAxLAotICAgIDExNCw5NSw5NSwxNzMsNSwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyOCwKLSAgICAwLDAsMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLAotICAgIDExMCwxMTYsMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwKLSAgICA0LDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwxLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLAotICAgIDAsMCwxLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNjAsMCwwLAotICAgIDAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTQsMTAxLDEwMyw5NywxMTQsMTAwLDEwOCwKLSAgICAxMDEsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk3LDExMCwxMjEsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDExNSw0Niw3OCw0MCwyLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwwLDAsCi0gICAgMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0MCw0LDAsCi0gICAgMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwKLSAgICAxMDEsMTIwLDk5LDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsOSwwLDAsMCwxMDEsMTIwLDk5LAotICAgIDk1LDExOCw5NywxMDgsMTE3LDEwMSwxMTcsMTMsMCwwLDAsMTAxLDEyMCw5OSw5NSwxMTYsCi0gICAgMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsCi0gICAgOTUsMTc3LDUsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjcsMCwwLAotICAgIDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LAotICAgIDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MCw2LDAsCi0gICAgMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOSwwLDAsMCwKLSAgICA5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LAotICAgIDEwMSwxMjAsMTA1LDExNiw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDE2OSw1LDAsCi0gICAgMCwxMTUsNiwwLDAsMCwxNiwyLDYsMiwxMiw0LDExNywxOCwwLDAsCi0gICAgMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsCi0gICAgMTAxLDEyMCwxMTYsOTksMywwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCi0gICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsOTEsMCwwLDAsMTI0LDEsMCwKLSAgICAxMDYsMCwwLDEwMCwxLDAsMTI0LDIsMCwxMDAsMiwwLDI0LDEzMSwyLDAsCi0gICAgMTI1LDMsMCwxMTYsMSwwLDEyNCwzLDAsMTMxLDEsMCwxMjQsMiwwLDEwNywKLSAgICAwLDAsMTE0LDU1LDAsMTE2LDIsMCwxMDAsMywwLDEzMSwxLDAsMTMwLDEsCi0gICAgMCwxMTAsMCwwLDEyNCwzLDAsMTAwLDQsMCwyNSwxMjUsNCwwLDEyNCwwLAotICAgIDAsMTE0LDg3LDAsMTAwLDUsMCwxMDYsMywwLDEyNCw0LDAsMTI0LDAsMCwKLSAgICAxMzEsMiwwLDgzLDEyNCw0LDAsODMsNDAsNiwwLDAsMCwxMTcsNTAsMCwKLSAgICAwLDAsODIsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLAotICAgIDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLDk3LDk4LDExNSwxMTEsMTA4LDExNywxMTYsMTAxLDMyLAotICAgIDExMSwxMTAsMTAxLDQ2LDExNywxLDAsMCwwLDQ2LDEwNSwxLDAsMCwwLDExNywKLSAgICA1MCwwLDAsMCw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLDMyLDExNCwxMDEsCi0gICAgMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5OCwxMDEsCi0gICAgMTIxLDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDEwNSwwLDAsMCwwLDExNyw1LDAsMCwwLAotICAgIDEyMywxMjUsNDYsMTIzLDEyNSw0MCw0LDAsMCwwLDExNyw2LDAsMCwwLDExNCwKLSAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywxMCwwLAotICAgIDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLAotICAgIDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCw1LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw0LDAsMCwwLAotICAgIDk4LDEwNSwxMTYsMTE1LDExNyw0LDAsMCwwLDk4LDk3LDExNSwxMDEsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTMsMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywxMDksMTAxLDE4Miw1LDAsMCwxMTUsCi0gICAgMTAsMCwwLDAsMCwyLDIyLDEsMTgsMSwxNSwxLDEwLDEsMTE3LDEzLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwxMSwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsMTM4LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwKLSAgICAxMTUsMjgsMCwxMTYsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwKLSAgICAyLDAsMSwxMTAsMCwwLDEyMCwxMDMsMCwxMTYsMCwwLDEwNiwxLDAsNjgsCi0gICAgOTMsODgsMCwxMjUsMiwwLDExNiw1LDAsMTMxLDAsMCwxNDMsMjMsMCwxLAotICAgIDEyNCwyLDAsMTA2LDYsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwxMjUsCi0gICAgMywwLDg3LDEwMCwyLDAsODEsODgsMTI0LDMsMCwxMDAsMiwwLDEwNyw5LAotICAgIDAsMTE0LDM4LDAsMTI0LDAsMCwxMTYsMCwwLDEwNiw4LDAsMTA3LDcsMCwKLSAgICAxMTQsMTA5LDAsMTI0LDMsMCw4MywxMTYsMCwwLDEwNiw4LDAsMTI0LDAsMCwKLSAgICAyNSwxMDYsOSwwLDgzLDExMywzOCwwLDExMywzOCwwLDg3LDEwMCwyLDAsODMsCi0gICAgMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywyMywwLDAsMCw3MCwxMDUsCi0gICAgMTEwLDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMTcsMjIsMCwwLDAsMTE1LDEyMSwxMTUsNDYsMTA5LDEwMSwKLSAgICAxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLAotICAgIDc4LDQwLDEwLDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw5LAotICAgIDAsMCwwLDEwOSwxMDEsMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNyw5LDAsMCwKLSAgICAwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsNCwwLDAsMCwxMTksCi0gICAgOTcsMTE0LDExMCwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywKLSAgICAxMTQsMTEwLDEwNSwxMTAsMTAzLDExNywxOCwwLDAsMCw5NSw3MywxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTE3LDExLDAsMCwKLSAgICAwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDEwMiwKLSAgICAxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTEsNSwwLDAsMTE1LDIwLAotICAgIDAsMCwwLDAsMiw5LDEsMTksMSwxNiwxLDEwLDEsMjQsMSwxMiwKLSAgICAyLDE1LDEsNCwyLDIxLDIsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsMTEwLAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwzLDAsMCwwLDAsMCwwLAotICAgIDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwxOTQsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDExNiwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMTYsNCwwLDEyNCwwLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwKLSAgICAyLDAsMTAwLDIsMCwxMDcsMCwwLDExNCw3MiwwLDExNiw1LDAsMTAwLDMsCi0gICAgMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMSwwLDExNCwxNTYsMCwKLSAgICAxMTYsMCwwLDEyNCwxLDAsMTE2LDEsMCwxMzEsMiwwLDExNSwxMDgsMCwxMTYsCi0gICAgMiwwLDEwMCw0LDAsMTMxLDEsMCwxMzAsMSwwLDExMywxNTYsMCwxMjQsMSwKLSAgICAwLDExNiw2LDAsMTA2LDcsMCwxMDcsNywwLDExNCwxNTYsMCwxMDAsNSwwLAotICAgIDEyNSwzLDAsMTE2LDgsMCwxMjQsMywwLDEwNiwzLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTEwLDAsMCwxMjQsMCwKLSAgICAwLDEyLDExNCwxOTAsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsMTkwLAotICAgIDAsMTE2LDUsMCwxMDAsNiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEwMCw3LDAsODMsNDAsOCwwLDAsMCwxMTcsMjgsMCwwLDAsODYsMTAxLAotICAgIDExNCwxMDUsMTAyLDEyMSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LAotICAgIDExNCwxMDEsMzIsMzQsMTE1LDk3LDExMCwxMDEsMzQsNDYsMTE3LDMxLDAsMCwwLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwKLSAgICA5OCwxMDEsMzIsMTE1LDExNiwxMTQsNDQsMzIsMTEwLDExMSwxMTYsMzIsMTIzLDEyNSwxMDUsMCwKLSAgICAwLDAsMCwxMTcsMTgsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTE3LAotICAgIDExNSwxMTYsMzIsOTgsMTAxLDMyLDYyLDYxLDMyLDQ4LDExNywzMSwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTEwLDExMSwxMTYsMzIsMTE1LAotICAgIDEwMSwxMTYsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTE2LDExNCwxMDUsMTEwLDEwMywxMTcsNjEsCi0gICAgMCwwLDAsODAsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEyMywzMywxMTQsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsCi0gICAgNDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExMiwxMDEsMTE0LDEwMiwxMTEsMTE0LDEwOSwKLSAgICAzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTE3LDE3LDAsMCwwLDY5LDEwOSwxMTIsMTE2LDEyMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw3OCw0MCw5LDAsMCwwLDExNywxMCwwLDAsCi0gICAgMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksMTAxLDExNywzLDAsMCwwLAotICAgIDExNSwxMTYsMTE0LDExNyw5LDAsMCwwLDg0LDEyMSwxMTIsMTAxLDY5LDExNCwxMTQsMTExLAotICAgIDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw0LDAsMCwKLSAgICAwLDExNiwxMjEsMTEyLDEwMSwxMTcsMTAsMCwwLDAsODYsOTcsMTA4LDExNywxMDEsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMTEsMCwwLDAsODMsMTIxLDExNSwKLSAgICAxMTYsMTAxLDEwOSw2OSwxMTQsMTE0LDExMSwxMTQsNDAsNCwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsMywwLDAsCi0gICAgMCwxMDksMTE1LDEwMyw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LDEwNCwxMDEsCi0gICAgOTksMTA3LDIwOCw1LDAsMCwxMTUsMjQsMCwwLDAsMCwyLDE1LDEsMzAsCi0gICAgMSwxMiwxLDE1LDEsNiwxLDE1LDEsMTUsMSwxNSwxLDYsMiwyNywKLSAgICAxLDE5LDEsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsCi0gICAgOTksMTA0LDEwMSw5OSwxMDcsMTE3LDIwLDAsMCwwLDc4LDExMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTIzLDMzLDExNCwxMjUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDksMCwwLDAsMjcsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDEyLDIsMCwwLDEwMCwwLDAsMTI1LDIsMCwxMjQsMCwKLSAgICAwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI1LDMsCi0gICAgMCwxMjQsMywwLDExNCwxNzgsMCwxMjQsMywwLDExNiwyLDAsMTA2LDMsMCwKLSAgICAxMDcsNywwLDExNCw2MiwwLDExNiw0LDAsMTI0LDEsMCwxMjQsMywwLDEzMSwKLSAgICAyLDAsMSwxMTAsMCwwLDEyNCwwLDAsMTE2LDIsMCwxMDYsMywwLDEwNywKLSAgICA2LDAsMTE0LDg4LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwwLDAsMjUsODMsCi0gICAgMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMjUsMTI1LDQsMCwxMjEsMTMsMCwKLSAgICAxMjQsNCwwLDEwNiw1LDAsMTI1LDIsMCw4NywxMTMsMTc4LDAsNCwxMTYsNiwKLSAgICAwLDEwNywxMCwwLDExNCwxNzQsMCwxLDEsMSwxMTYsNywwLDEwMCwzLDAsCi0gICAgMjMsMTA2LDgsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNSwwLAotICAgIDExNiw5LDAsMTI0LDUsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsCi0gICAgMSwwLDg5LDExMywxNzgsMCw4OCwxMTAsMCwwLDExNiwxMCwwLDEyNCwwLDAsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMCwwLDEwNywKLSAgICA4LDAsMTE0LDI1MCwwLDExNiw5LDAsMTE2LDcsMCwxMDYsOCwwLDEyNCwwLAotICAgIDAsMTMxLDEsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwxMjUsNywwLAotICAgIDEwMCwxMCwwLDEyNCw3LDAsOTUsMTIsMCwxMjQsNywwLDEzMCwxLDAsMTEwLAotICAgIDQ3LDAsMTI0LDAsMCwxMTYsMiwwLDEwNiwzLDAsMTA3LDcsMCwxMTQsNDEsCi0gICAgMSwxMjQsNiwwLDEwNiwxMywwLDEyNCwwLDAsMTMxLDEsMCwxLDExNiwxNCwKLSAgICAwLDEwMCw1LDAsMTI0LDAsMCwxMjQsNiwwLDEzMSwzLDAsMSwxMTAsMCwKLSAgICAwLDExNiwyLDAsMTA2LDMsMCwxMjQsMCwwLDI1LDEyNSw4LDAsMTI0LDMsCi0gICAgMCwxMTQsMTA1LDEsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMjUsMTI1LDQsCi0gICAgMCwxMTYsMTUsMCwxMjQsNCwwLDEyNCwwLDAsMTA2LDEsMCwxMDAsMSwwLAotICAgIDEzMSwxLDAsMTAwLDYsMCwyNSwxMjQsOCwwLDEzMSwzLDAsMSwxMTAsMCwKLSAgICAwLDExNiwxNiwwLDEyNCw4LDAsMTAwLDcsMCwxMDAsMCwwLDEzMSwzLDAsCi0gICAgMTAwLDAsMCwxMDcsOCwwLDExNCwyMTIsMSwxMjEsNTksMCwxMjQsOCwwLDEwNiwKLSAgICAxNywwLDEyNCw4LDAsOTUsMTgsMCwxMTYsMTksMCwxMjQsOCwwLDEwMCw4LAotICAgIDAsMTMxLDIsMCwxMTUsMTg3LDEsMTI0LDgsMCwxMDYsMTgsMCwxMDYsMSwwLAotICAgIDEwMCwxLDAsMTMxLDEsMCwxMDAsMiwwLDI1LDEyNCw4LDAsOTUsMTgsMCwKLSAgICAxMTAsMCwwLDg3LDExMywyMTIsMSw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDIwOCwKLSAgICAxLDEsMSwxLDg5LDExMywyMTIsMSw4OCwxMTAsMCwwLDExNiwxOSwwLDEyNCwKLSAgICA4LDAsMTAwLDksMCwxMzEsMiwwLDExNSw4LDIsMTIxLDEzLDAsMTI0LDYsCi0gICAgMCwxMjQsOCwwLDk1LDIwLDAsODcsMTEzLDgsMiw0LDExNiw2LDAsMTA3LAotICAgIDEwLDAsMTE0LDQsMiwxLDEsMSw4OSwxMTMsOCwyLDg4LDExMCwwLDAsCi0gICAgMTI0LDgsMCw4Myw0MCwxMSwwLDAsMCw3OCwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMCwwLDAsMCwxMTcsMjEsMCwwLDAsNTksMzIsMTIzLDEyNSwzMiwxMDUsCi0gICAgMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMTgsMCwwLDAsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMzIsMTIzLDMzLDExNCwxMjUsMzIsMzUsMzIsMTIzLDMzLDExNCwxMjUsMTA1LAotICAgIDIsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICA5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwKLSAgICA4NCw0MCwyMSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsCi0gICAgMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDMsCi0gICAgMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LAotICAgIDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMTQsMCwKLSAgICAwLDAsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsOCwwLDAsMCw5NSw2OSw4Miw4Miw5NSw3Nyw4Myw3MSwxMTcsNiwwLAotICAgIDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywxMSwwLDAsMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTIsMCwwLDAsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwwLDg0LDExNCwKLSAgICAxMTcsMTAxLDExNywxMCwwLDAsMCw5NSwxMTAsMTExLDExNiw5NSwxMDIsMTExLDExNywxMTAsCi0gICAgMTAwLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LAotICAgIDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDcsMCwwLDAsMTE1LDEwMSwxMTYsOTcsMTE2LAotICAgIDExNiwxMTQsMTE3LDcsMCwwLDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsNywwLDAsMCwKLSAgICAxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsCi0gICAgMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiwxMTcsMTMsMCwwLDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMywwLDAsMCwxMDksMTE1LDEwMywxMTcsNiwKLSAgICAwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywzLDAsMCwwLDEwMSwxMjAsCi0gICAgOTksMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLAotICAgIDk5LDEwNywxMDEsMTAwLDIyNyw1LDAsMCwxMTUsNzYsMCwwLDAsMCwxLDYsCi0gICAgMSwxOSwxLDYsMSwxNSwxLDE2LDIsMTUsMSwxMSwyLDEzLDEsMywKLSAgICAxLDEzLDEsMTMsMSwyMiwxLDI2LDEsMTUsMSwxMiwxLDI3LDMsOSwKLSAgICAxLDksMSwxNSwyLDEzLDEsMTksMiwxMywxLDYsMiwxMywxLDMyLAotICAgIDIsMjQsMSwzLDEsMTIsMSwxNSwxLDMyLDEsMTMsMSw4LDIsMTUsCi0gICAgMSwzLDEsMTMsMSwxMywxLDgsMSwxMTcsMjMsMCwwLDAsOTUsMTAyLAotICAgIDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsCi0gICAgMTExLDk5LDEwNywxMDEsMTAwLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsCi0gICAgMCwwLDE4LDAsMCwwLDY3LDAsMCwwLDExNSw3NSwwLDAsMCwxMjIsCi0gICAgMTYsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMiwwLDg3LDEwMCwKLSAgICAxLDAsMTE2LDEsMCwxMDYsMiwwLDEzMSwwLDAsMSw4OCwxMjQsMiwwLAotICAgIDEwNiwzLDAsMTMxLDAsMCwxLDEyMiwxNywwLDExNiw0LDAsMTI0LDAsMCwKLSAgICAxMjQsMSwwLDEzMSwyLDAsODMsODcsMTAwLDEsMCwxMjQsMiwwLDEwNiw1LAotICAgIDAsMTMxLDAsMCwxLDg4LDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsCi0gICAgNTQsMCwwLDAsNzAsMTA1LDExMCwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMDgsMTExLDk3LAotICAgIDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsCi0gICAgMTAwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQwLDYsMCwwLDAsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDEwOCwxMTEsOTksMTA3LDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwKLSAgICAwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTcsCi0gICAgNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNywyMywwLDAsMCwKLSAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsCi0gICAgMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLAotICAgIDk3LDExNSwxMDEsNDAsMywwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMTcsNCwwLAotICAgIDAsMCwxMDgsMTExLDk5LDEwNyw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxNCwwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCwyMSw2LDAsMCwxMTUsMTQsMCwwLDAsMCwyLAotICAgIDMsMSwxNiwyLDExLDEsMTAsMSwzLDEsMTcsMiwxMTcsMTQsMCwwLAotICAgIDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTksCi0gICAgMywwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNCwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMTcyLDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMjQsCi0gICAgMSwwLDEyNCwyLDAsMTMxLDMsMCwxLDEyNCwyLDAsMTAwLDEsMCwxMDcsCi0gICAgNCwwLDExNCw0OSwwLDExNiwxLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLAotICAgIDAsMTMxLDMsMCwxMjUsMCwwLDExMCwwLDAsMTE2LDIsMCwxMDYsMywwLAotICAgIDEzMSwwLDAsMSwxMjQsMCwwLDExNiw0LDAsMTA2LDUsMCwxMDcsNywwLAotICAgIDExNCw4NywwLDExNiw2LDAsMTI0LDAsMCwxMTYsNywwLDEzMSwyLDAsODMsCi0gICAgMTE2LDQsMCwxMDYsNSwwLDEyNCwwLDAsMjUsMTI1LDMsMCwxMjQsMywwLAotICAgIDEwMCw0LDAsMTA3LDgsMCwxMTQsMTU4LDAsMTE2LDIsMCwxMDYsOSwwLDEzMSwKLSAgICAwLDAsMSwxMDAsMiwwLDEwNiwxMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsCi0gICAgNCwwLDExNiwxMSwwLDEyNCw0LDAsMTAwLDMsMCwxMjQsMCwwLDEzMSwxLAotICAgIDEsMTMwLDEsMCwxMTAsMCwwLDExNiwxMiwwLDEyNCwwLDAsMTMxLDEsMCwKLSAgICAxLDEyNCwzLDAsODMsNDAsNSwwLDAsMCwxMTcsNTAsMSwwLDAsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDk3LDExNSwxMDEsCi0gICAgMTAwLDMyLDExMSwxMTAsMzIsMTA1LDExNiwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LAotICAgIDk3LDEwOCwxMDgsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsCi0gICAgMzIsMTA5LDk3LDEwMCwxMDEsMzIsMTAyLDExNCwxMTEsMTA5LDQ0LDMyLDk3LDExMCwxMDAsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiw5NywxMDAsMTA2LDExNywxMTUsMTE2LAotICAgIDEwOSwxMDEsMTEwLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwKLSAgICAxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLAotICAgIDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMTQsMTAxLDk3LDExNiwxMDEsMTE1LDExNiwKLSAgICAzMiw5OSwxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDEwMCwxMDEsMTEwLDExMSwxMDksMTA1LDExMCw5NywKLSAgICAxMTYsMTExLDExNCwzMiwxMTEsMTAyLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw5NywKLSAgICAxMDgsMTA1LDExNiwxMjEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDExNiwxMTksMTAxLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSw0NiwzMiw4NCwKLSAgICAxMDQsMTA1LDExNSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLDEwMSwxMTUsMzIsMTE1LDEwMSwxMTYsCi0gICAgMTE2LDEwNSwxMTAsMTAzLDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwKLSAgICAzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsMzIsMTAwLDEwNSwxMDAsMzIsMTEwLDExMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA1LDAsMCwwLDAsMTE3LDQwLDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDExMSwxMDIsMzIsMTIzLDEyNSwzMiwxMDQsOTcsMTA4LDExNiwxMDEsMTAwLDU5LDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDc4LDQwLDEzLDAsCi0gICAgMCwwLDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LAotICAgIDEwNCwxMDEsOTksMTA3LDExNywxMywwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwKLSAgICAxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LAotICAgIDEyLDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsCi0gICAgMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE1LDExNywxNCwwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsCi0gICAgMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwKLSAgICAxMTcsMTIsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwKLSAgICAxMDcsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMTEsMCwwLAotICAgIDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE5LDAsMCwKLSAgICAwLDk1LDEwOCwxMTEsOTksMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDUsCi0gICAgMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsNywwLDAsMCwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMDMsOTksMTAwLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDM0LDYsMCwwLDExNSwKLSAgICAyOCwwLDAsMCwwLDksMTYsMSwxMiwxLDIxLDEsMTAsMSwxNSwxLAotICAgIDEzLDEsMTMsMSwxMiwxLDEwLDEsNiwxLDksMSwyMSwxLDEwLDEsCi0gICAgMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTcsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDI1NCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsCi0gICAgMTAwLDEsMCwxMzEsMiwwLDExNCwyNTAsMCwxMDAsMiwwLDEyNCwxLDAsMTA3LAotICAgIDYsMCwxMTQsODksMCwxMTYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMSwKLSAgICAwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMiwwLDEzMSwxLDAsMSwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTAwLDMsMCwxMzEsMiwwLDExNCw4OSwwLDEyNCwxLDAsCi0gICAgMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsMCwxLDExMyw4OSwwLAotICAgIDExMCwwLDAsMTIwLDE1OCwwLDEyNCwxLDAsNjgsOTMsMTQ3LDAsMTI1LDMsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLDExNSw5NiwwLDEwMCwKLSAgICA0LDAsMTA2LDUsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsMCwxMzEsMiwKLSAgICAwLDEyNSw0LDAsMTIxLDE3LDAsMTE2LDcsMCwxMjQsMiwwLDEyNCw0LDAsCi0gICAgMTMxLDIsMCwxLDg3LDExMywyNDMsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LAotICAgIDIzOSwwLDEsMTI1LDUsMCwxLDEyMiw1MCwwLDExNiw5LDAsMTI0LDUsMCwKLSAgICAxMDAsNSwwLDEwMCw3LDAsMTMxLDMsMCwxMTQsMjE4LDAsMTI0LDUsMCwxMDYsCi0gICAgMTEsMCwxMjQsNCwwLDEwNywyLDAsMTE0LDIxOCwwLDExOSw5NiwwLDExMywyMTgsCi0gICAgMCwxMTAsMCwwLDEzMCwwLDAsODcsODksMTAwLDYsMCwxMDAsNiwwLDEyNSwKLSAgICA1LDAsMTI2LDUsMCw4OCwxMTMsMjQzLDAsODgsMTEzLDk2LDAsMTEzLDk2LDAsCi0gICAgODcsMTEwLDAsMCwxMjQsMCwwLDgzLDQwLDgsMCwwLDAsMTE3LDIzOCwwLAotICAgIDAsMCw3MCwxMDUsMTAzLDExNywxMTQsMTAxLDMyLDExMSwxMTcsMTE2LDMyLDExOSwxMDQsOTcsCi0gICAgMTE2LDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDMyLDExNSwxMDQsMTExLAotICAgIDExNywxMDgsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMzIsMTEyLDk3LDExNCwKLSAgICA5NywxMDksMTAxLDExNiwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwKLSAgICA5Nyw5OCwxMDgsMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsOTcsMTA3LDEwMSwxMTUsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDQ2LDMyLDczLDExNiwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMTcsMTEyLDEwOCwxMDEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA5NywxMTUsMTE1LDExNywxMDksMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwKLSAgICAxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDExNCwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNywxLDAsCi0gICAgMCwwLDQyLDExNyw3LDAsMCwwLDk1LDk1LDk3LDEwOCwxMDgsOTUsOTUsMTE3LAotICAgIDUsMCwwLDAsMTIzLDEyNSw0NiwxMjMsMTI1LDExNywxMCwwLDAsMCw5NSwxMTAsCi0gICAgMTExLDExNiw5NSwxMDIsMTExLDExNywxMTAsMTAwLDc4LDcwLDQwLDEyLDAsMCwwLDExNywKLSAgICA3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDQsMCwwLDAsCi0gICAgMTA4LDEwNSwxMTUsMTE2LDExNyw2LDAsMCwwLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDExNywKLSAgICA2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDk3LDEwOCwxMDgsOTUsOTUsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LAotICAgIDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMjUsCi0gICAgMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCwKLSAgICA5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMTE3LDExLDAsMCwKLSAgICAwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwKLSAgICAwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNyw1LDAsMCwwLDcwLDk3LDEwOCwKLSAgICAxMTUsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDYsMCwwLDAsCi0gICAgMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw5NSwxMTcsMSwwLDAsMCwxMjAsMTE3LDksMCwwLDAsMTAyLAotICAgIDExNCwxMTEsMTA5LDk1LDExMCw5NywxMDksMTAxLDExNywzLDAsMCwwLDEwMSwxMjAsOTksCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDU4LDYsMCwwLDExNSwzNCwwLDAsMCwwLDEwLDE1LDEsMTIsMSwKLSAgICAxMiwxLDEzLDEsMTUsMSwyMiwxLDEzLDEsMTUsMSwyMSwxLDMsMSwKLSAgICAxNywxLDE4LDYsMTgsMSwxNSwxLDksMSwzMiwxLDExNywxNiwwLDAsCi0gICAgMCw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwKLSAgICAxMTYsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsNzgsMCwwLDAsMTI0LDAsMCwxMDYsMCwKLSAgICAwLDEwMCwxLDAsMTMxLDEsMCwxMjUsMSwwLDEyNCwxLDAsMTAwLDYsMCwKLSAgICAxMDcsOCwwLDExNCw3NCwwLDEyNCwwLDAsMTAwLDIsMCwyNSwxMjUsMSwwLAotICAgIDEwMCwzLDAsMTI0LDAsMCwxMDcsNywwLDExNCw3NCwwLDEyNCwxLDAsMTA2LAotICAgIDIsMCwxMDAsNCwwLDEzMSwxLDAsMTAwLDUsMCwyNSwxMjUsMSwwLDExMywKLSAgICA3NCwwLDExMCwwLDAsMTI0LDEsMCw4Myw0MCw3LDAsMCwwLDExNywxNjcsCi0gICAgMCwwLDAsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwzMiwxMTksMTA0LDk3LAotICAgIDExNiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTE1LDEwNCwKLSAgICAxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk1LDk1LAotICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LAotICAgIDMyLDEwMywxMTcsOTcsMTE0LDk3LDExMCwxMTYsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiw5OCwKLSAgICAxMDEsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDMyLDExMSwxMTQsMzIsOTksMTExLDExNywKLSAgICAxMDgsMTAwLDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLAotICAgIDExMCwxMTYsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDExNCwxMTEsMTEyLAotICAgIDEwMSwxMTQsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE3LDExMCwxMDcsMTEwLAotICAgIDExMSwxMTksMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywxMSwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsOTUsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsNzgsCi0gICAgNDAsMywwLDAsMCwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LAotICAgIDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsMiwwLDAsMCwxMTcsNywwLDAsMCwxMDMsCi0gICAgMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNywKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDkyLDYsMCwwLDExNSwxMiwwLDAsMCwwLDcsMTUsCi0gICAgMSwxMiwxLDEwLDEsMTIsMSwyNSwxLDExNywxNywwLDAsMCw5NSw5OSwKLSAgICA5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDk5LAorICAgIDMyLDExNCwxMDEsMTAzLDk3LDExNCwxMDAsMTA4LDEwMSwxMTUsMTE1LDMyLDExMSwxMDIsMzIsOTcsCisgICAgMTEwLDEyMSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDMyLDEwMSwxMjAsOTksMTAxLDExMiwxMTYsCisgICAgMTA1LDExMSwxMTAsMTE1LDQ2LDc4LDQxLDIsMTE0LDk2LDAsMCwwLDExNCw5NywwLAorICAgIDAsMCw0MSw0LDExNCw3OCwwLDAsMCw5MCw4LDEwMSwxMjAsOTksOTUsMTE2LAorICAgIDEyMSwxMTIsMTAxLDkwLDksMTAxLDEyMCw5OSw5NSwxMTgsOTcsMTA4LDExNywxMDEsOTAsMTMsCisgICAgMTAxLDEyMCw5OSw5NSwxMTYsMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsCisgICAgMCwyNTAsNywwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyNyw5NSw3MywKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsCisgICAgNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDYsMTE0LDU3LDAsMCwKKyAgICAwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLAorICAgIDExNCw5OCwwLDAsMCwxMTQsMTAxLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5NSwKKyAgICAxLDAsMCwyNDIsNywwLDAsMTE1LDYsMCwwLDAsMTIsMiw2LDIsCisgICAgMTIsNCwxMTQsOTUsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLAorICAgIDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsOTEsMCwwLAorICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEwMCwxLDAsMTI0LDIsMCwxMDAsMiwwLAorICAgIDI0LDEzMSwyLDAsMTI1LDMsMCwxMTYsMSwwLDEyNCwzLDAsMTMxLDEsMCwKKyAgICAxMjQsMiwwLDEwNywwLDAsMTE0LDU1LDAsMTE2LDIsMCwxMDAsMywwLDEzMSwKKyAgICAxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwzLDAsMTAwLDQsMCwyNSwxMjUsCisgICAgNCwwLDEyNCwwLDAsMTE0LDg3LDAsMTAwLDUsMCwxMDYsMywwLDEyNCw0LAorICAgIDAsMTI0LDAsMCwxMzEsMiwwLDgzLDEyNCw0LDAsODMsNDEsNiwxMjIsNTAsCisgICAgODIsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwKKyAgICAxMTgsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExNiwKKyAgICAxMTEsMzIsOTcsMTEwLDMyLDk3LDk4LDExNSwxMTEsMTA4LDExNywxMTYsMTAxLDMyLDExMSwxMTAsCisgICAgMTAxLDQ2LDExNCwxMTAsMCwwLDAsMTE0LDI5LDAsMCwwLDEyMiw1MCw5NywxMTYsCisgICAgMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5OCwxMDEsMTIxLDExMSwxMTAsMTAwLDMyLDExNiwKKyAgICAxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAorICAgIDExNCw3MSwwLDAsMCwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsNDEsNCwxMTQsMzQsCisgICAgMCwwLDAsMTE0LDMxLDAsMCwwLDExNCwxMjcsMCwwLDAsMTE0LDQ3LDAsCisgICAgMCwwLDQxLDUsMTE0LDY3LDAsMCwwLDIxOCw3LDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSwyMTgsNSwxMDgsMTAxLDExOCwxMDEsMTA4LDkwLDQsOTgsMTA1LDExNiwxMTUsOTAsCisgICAgNCw5OCw5NywxMTUsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxMyw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsMjU1LDcsMCwwLDExNSwxMCwwLDAsMCwwLDIsMjIsMSwKKyAgICAxOCwxLDE1LDEsMTAsMSwxMTQsOTgsMSwwLDAsOTksMywwLDAsMCwKKyAgICAwLDAsMCwwLDEwLDAsMCwwLDI3LDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw0OSwxLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLDEsMTEwLDAsCisgICAgMCwxMjQsMCwwLDExNiwwLDAsMTA2LDUsMCwxMDcsNiwwLDEyNSwzLDAsCisgICAgMTIwLDI1NSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5MywyNDAsMCwxMjUsNCwwLAorICAgIDExNiw2LDAsMTMxLDAsMCwxNDMsMTA4LDAsMSwxMjEsMTMsMCwxMjQsNCwwLAorICAgIDEwNiw3LDAsMTI1LDUsMCw4NywxMTAsNjksMCw0LDExNiw4LDAsMTA3LDEwLAorICAgIDAsMTE0LDE1MywwLDEsMSwxLDEyNCw0LDAsMTA2LDksMCwxMjQsMCwwLAorICAgIDEyNCwxLDAsMTMxLDIsMCwxMjUsNiwwLDEyNCw2LDAsMTAwLDIsMCwxMDcsCisgICAgOCwwLDExNCwxMzQsMCwxMTksNTMsMCwxMTAsMCwwLDExNiwxMCwwLDEyNCwwLAorICAgIDAsMTI0LDYsMCwxMzEsMiwwLDEyNSw3LDAsODksMTEwLDE5LDAsODgsMTI0LAorICAgIDUsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMywwLDEyNSw3LAorICAgIDAsODcsMTAwLDIsMCw4MSw4OCwxMjQsNywwLDEwMCwyLDAsMTA3LDksMCwKKyAgICAxMTQsNTMsMCwxMjQsMywwLDEyLDExNCwzMCwxLDEyNCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsNSwwLDEwNyw2LDAsMTE0LDMwLDEsMTE2LDAsMCwxMDYsNSwwLDEyNCwKKyAgICAwLDAsMjUsMTI1LDgsMCwxMjEsMTMsMCwxMjQsOCwwLDEwNiwxMSwwLDEyNSwKKyAgICA5LDAsODcsMTEwLDIyLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCw2LDEsCisgICAgMSwxLDEsMTI0LDcsMCw4Myw4OSwxMTMsMzQsMSw4OCwxMjQsOSwwLDEwMCwKKyAgICAyLDAsMTA3LDgsMCwxMTQsMjMsMSwxMjQsNywwLDgzLDEyNCw5LDAsODMsCisgICAgMTEzLDM3LDEsMTI0LDcsMCw4MywxMTMsNTMsMCwxMTMsNTMsMCw4NywxMDAsMiwKKyAgICAwLDgzLDEwMCwyLDAsODMsNDEsMywxMjIsMjMsNzAsMTA1LDExMCwxMDAsMzIsOTcsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTIyLDIyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMDEsMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LAorICAgIDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCw0MSwxMiwxMTQsNywwLDAsCisgICAgMCwyMTgsOSwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTYwLDAsMCwKKyAgICAwLDExNCwxNjEsMCwwLDAsMTE0LDE2MiwwLDAsMCwxMTQsMTY5LDAsMCwwLAorICAgIDExNCw5NSwxLDAsMCwxMTQsOCwxLDAsMCwxMTQsMjA0LDAsMCwwLDExNCwKKyAgICA5LDEsMCwwLDExNCwxNjcsMCwwLDAsMTE0LDIwMywwLDAsMCw0MSwxMCwKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw3LDEsMCwwLDkwLAorICAgIDksMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDExNCw3MSwxLDAsMCwxMTQsCisgICAgOCwxLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDE3NCwKKyAgICAwLDAsMCwxMTQsMjAzLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwyNDEsMCwwLDAsOCw4LDAsMCwKKyAgICAxMTUsNTAsMCwwLDAsMCwyLDksMSwxOSw0LDE1LDEsMTYsMSwxMCwKKyAgICAxLDMsMSwxMywxLDEzLDEsMTgsMSwxMiwxLDYsMSwyMCwyLDI0LAorICAgIDEsMTIsMiwyMiwxLDEzLDEsMywxLDEzLDEsMTMsNCw5LDIsMTIsCisgICAgMSw0LDIsNywyLDExLDIsMTE0LDI0MSwwLDAsMCw5OSwzLDAsMCwKKyAgICAwLDAsMCwwLDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwxOTQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDExNiwxLDAsMTMxLAorICAgIDIsMCwxMTUsNDUsMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMTYsNCwKKyAgICAwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwKKyAgICAxMTAsMCwwLDEyNCwyLDAsMTAwLDIsMCwxMDcsMCwwLDExNCw3MiwwLDExNiwKKyAgICA1LDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMSwKKyAgICAwLDExNCwxNTYsMCwxMTYsMCwwLDEyNCwxLDAsMTE2LDEsMCwxMzEsMiwwLAorICAgIDExNSwxMDgsMCwxMTYsMiwwLDEwMCw0LDAsMTMxLDEsMCwxMzAsMSwwLDExMywKKyAgICAxNTYsMCwxMjQsMSwwLDExNiw2LDAsMTA2LDcsMCwxMDcsNywwLDExNCwxNTYsCisgICAgMCwxMDAsNSwwLDEyNSwzLDAsMTE2LDgsMCwxMjQsMywwLDEwNiwzLDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTEwLAorICAgIDAsMCwxMjQsMCwwLDEyLDExNCwxOTAsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LAorICAgIDIsMCwxMTQsMTkwLDAsMTE2LDUsMCwxMDAsNiwwLDEzMSwxLDAsMTMwLDEsCisgICAgMCwxMTAsMCwwLDEwMCw3LDAsODMsNDEsOCwxMjIsMjgsODYsMTAxLDExNCwxMDUsCisgICAgMTAyLDEyMSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LDExNCwxMDEsCisgICAgMzIsMzQsMTE1LDk3LDExMCwxMDEsMzQsNDYsMTIyLDMxLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDExMCw5NywxMDksMTAxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsMTE1LDExNiwKKyAgICAxMTQsNDQsMzIsMTEwLDExMSwxMTYsMzIsMTIzLDEyNSwxMTQsNzEsMCwwLDAsMTIyLDE4LAorICAgIDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw2Miw2MSwKKyAgICAzMiw0OCwxMjIsMzEsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLAorICAgIDExMCwxMTEsMTE2LDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExNiwxMTQsCisgICAgMTA1LDExMCwxMDMsMTIyLDYxLDgwLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMTAsMTExLDExNiwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTAwLDQ0LDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTIsMTAxLDExNCwxMDIsMTExLAorICAgIDExNCwxMDksMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEyMiwxNyw2OSwxMDksMTEyLDExNiwxMjEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTEwLDk3LDEwOSwxMDEsNzgsNDEsOSwxMTQsMTg3LDAsMCwwLDExNCw3NiwxLAorICAgIDAsMCwyMTgsOSw4NCwxMjEsMTEyLDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDQ3LDAsCisgICAgMCwwLDExNCw2NiwwLDAsMCwxMTQsMTI3LDAsMCwwLDExNCw3LDAsMCwKKyAgICAwLDExNCwxNjksMCwwLDAsMjE4LDExLDgzLDEyMSwxMTUsMTE2LDEwMSwxMDksNjksMTE0LAorICAgIDExNCwxMTEsMTE0LDQxLDQsMTE0LDY3LDAsMCwwLDExNCw5NiwxLDAsMCwxMTQsCisgICAgOTcsMSwwLDAsMTE0LDE2NSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsOTUsMTE1LDk3LDExMCwxMDUsMTE2LAorICAgIDEyMSw5NSw5OSwxMDQsMTAxLDk5LDEwNyw0OSw4LDAsMCwxMTUsMjQsMCwwLDAsCisgICAgMCwyLDE1LDEsMzAsMSwxMiwxLDE1LDEsNiwxLDE1LDEsMTUsMSwKKyAgICAxNSwxLDYsMiwyNywxLDE5LDEsMTE0LDEwMiwxLDAsMCwxMjIsMTYsNzgsCisgICAgMTExLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjIsCisgICAgNCwxMjMsMzMsMTE0LDEyNSw5OSwyLDAsMCwwLDAsMCwwLDAsOCwwLAorICAgIDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsNTIsMSwwLDAsMTAwLAorICAgIDAsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLAorICAgIDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyNCwzLDAsMTE0LDE3OCwwLDEyNCwzLAorICAgIDAsMTE2LDEsMCwxMDYsMiwwLDEwNyw3LDAsMTE0LDYyLDAsMTE2LDMsMCwKKyAgICAxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDAsMCwKKyAgICAxMTYsMSwwLDEwNiwyLDAsMTA3LDYsMCwxMTQsODgsMCwxMTYsMSwwLDEwNiwKKyAgICAyLDAsMTI0LDAsMCwyNSw4MywxMTYsMSwwLDEwNiwyLDAsMTI0LDMsMCwKKyAgICAyNSwxMjUsNCwwLDEyMSwxMywwLDEyNCw0LDAsMTA2LDQsMCwxMjUsMiwwLAorICAgIDg3LDExMywxNzgsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NCwwLDEsMSwKKyAgICAxLDExNiw2LDAsMTAwLDMsMCwyMywxMDYsNywwLDEyNCwwLDAsMTI0LDMsCisgICAgMCwxMzEsMiwwLDEyNSw1LDAsMTE2LDgsMCwxMjQsNSwwLDEwMCw0LDAsCisgICAgMTI0LDAsMCwxMzEsMSwxLDEzMCwxLDAsODksMTEzLDE3OCwwLDg4LDExMCwwLAorICAgIDAsMTE2LDksMCwxMjQsMCwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsNiwwLAorICAgIDEyNCw2LDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMzUsMCwxMTYsOCwwLDExNiwKKyAgICA2LDAsMTA2LDcsMCwxMjQsMCwwLDEzMSwxLDAsMTAwLDQsMCwxMjQsMCwKKyAgICAwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMTgsMCwxMTYsMTAsMCwxMjQsNiwwLAorICAgIDEzMSwxLDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNywwLDEyNCwzLDAsMTE0LAorICAgIDQ4LDEsMTE2LDEsMCwxMDYsMiwwLDEyNCwzLDAsMjUsMTI1LDQsMCwxMTYsCisgICAgMTIsMCwxMjQsNCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLAorICAgIDAsMTAwLDUsMCwyNSwxMjQsNywwLDEzMSwzLDAsMSwxMTAsMCwwLDEyNCwKKyAgICA3LDAsODMsNDEsNiw3OCwxMTQsMTEwLDAsMCwwLDExNCw3MSwwLDAsMCwKKyAgICAxMjIsMjMsNTksMzIsMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwKKyAgICA5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE0LDY3LDAsMCwwLDExNCwxMDksCisgICAgMCwwLDAsNDEsMTMsMTE0LDMyLDAsMCwwLDExNCw3LDAsMCwwLDExNCwKKyAgICAxNjksMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsMjM5LDAsMCwwLDExNCwyMDQsCisgICAgMCwwLDAsMjE4LDgsOTUsNjksODIsODIsOTUsNzcsODMsNzEsMTE0LDQ3LDAsCisgICAgMCwwLDExNCwxNDcsMCwwLDAsMTE0LDI0MSwwLDAsMCwxMTQsMTY4LDAsMCwKKyAgICAwLDExNCwzLDEsMCwwLDExNCw2MSwwLDAsMCw0MSw4LDExNCw2NywwLAorICAgIDAsMCwyMTgsNywxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDIyOCwwLDAsMCw5MCwxMywxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNCwxNjUsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsMTc0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwyMyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLAorICAgIDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsNjksOCwwLDAsMTE1LAorICAgIDQyLDAsMCwwLDAsMSw2LDEsMTksMSw2LDEsMTUsMSwxNiwyLAorICAgIDE1LDEsMTEsMSwxMywxLDMsMSwxMywxLDEzLDEsMjIsMSwyNiwxLAorICAgIDE1LDEsMTIsMSwzMCwyLDE4LDEsNiwyLDEzLDEsMzIsMSwxMTQsMTA1LAorICAgIDEsMCwwLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDEwLDAsMCwwLDY3LDAsMCwwLDExNSwzNiwwLDAsMCwxMTYsMCwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCwxNDMsMTgsMCwxLDExNiwxLDAsMTI0LDAsMCwKKyAgICAxMjQsMSwwLDEzMSwyLDAsODMsODcsMTAwLDEsMCw4MSw4OCwxMDAsMSwwLAorICAgIDgzLDQxLDIsMTIyLDU0LDcwLDEwNSwxMTAsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsCisgICAgMTEwLDEwMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MSwyLDExNCw5MiwKKyAgICAwLDAsMCwxMTQsMTA1LDEsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLDExNCwKKyAgICAxMDQsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDE0LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwKKyAgICAxMTEsOTcsMTAwLDk2LDgsMCwwLDExNSw0LDAsMCwwLDAsMiwxMywxLAorICAgIDExNCwxMDYsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDUsMCwKKyAgICAwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTcyLDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDMsMCwxLDEyNCwKKyAgICAyLDAsMTAwLDEsMCwxMDcsNCwwLDExNCw0OSwwLDExNiwxLDAsMTI0LDAsCisgICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDMsMCwxMjUsMCwwLDExMCwwLDAsCisgICAgMTE2LDIsMCwxMDYsMywwLDEzMSwwLDAsMSwxMjQsMCwwLDExNiw0LDAsCisgICAgMTA2LDUsMCwxMDcsNywwLDExNCw4NywwLDExNiw2LDAsMTI0LDAsMCwxMTYsCisgICAgNywwLDEzMSwyLDAsODMsMTE2LDQsMCwxMDYsNSwwLDEyNCwwLDAsMjUsCisgICAgMTI1LDMsMCwxMjQsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMTU4LDAsMTE2LAorICAgIDIsMCwxMDYsOCwwLDEzMSwwLDAsMSwxMDAsMywwLDEwNiw5LDAsMTI0LAorICAgIDAsMCwxMzEsMSwwLDEyNSw0LDAsMTE2LDEwLDAsMTI0LDQsMCwxMDAsNCwKKyAgICAwLDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTE2LDExLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDEsMTI0LDMsMCw4Myw0MSw1LDk3LDUwLDEsCisgICAgMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwKKyAgICAxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwKKyAgICA5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDEwNSwxMTYsMTE1LDMyLDExMCw5NywxMDksMTAxLAorICAgIDQ0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiw5OSw5NywxMDgsMTA4LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLAorICAgIDEwNSwxMTAsMTAzLDMyLDEwOSw5NywxMDAsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSw0NCwzMiw5NywKKyAgICAxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsOTcsMTAwLDEwNiwKKyAgICAxMTcsMTE1LDExNiwxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LAorICAgIDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwKKyAgICAxMDEsMTE1LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTE0LDEwMSw5NywxMTYsCisgICAgMTAxLDExNSwxMTYsMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwxMDAsMTAxLDExMCwxMTEsMTA5LAorICAgIDEwNSwxMTAsOTcsMTE2LDExMSwxMTQsMzIsMTExLDEwMiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LAorICAgIDExMSwxMTAsOTcsMTA4LDEwNSwxMTYsMTIxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMTYsMTE5LAorICAgIDEwMSwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDMyLDk3LDExMCwxMDAsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsCisgICAgNDYsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDEsMTE1LDMyLAorICAgIDExNSwxMDEsMTE2LDExNiwxMDUsMTEwLDEwMywzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsOTUsOTUsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMCwxMDUsMTAwLDMyLDExMCwxMTEsMTE2LDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDExNCw3MSwwLDAsMCw3OCwxMjIsNDAsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMzIsMTExLDEwMiwzMiwxMjMsMTI1LDMyLDEwNCw5NywxMDgsMTE2LDEwMSwxMDAsNTksCisgICAgMzIsNzgsMTExLDExMCwxMDEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTUsMTE0LDY3LDAsMCwwLDQxLDEyLDExNCwxMDIsMSwwLDAsCisgICAgMTE0LDk4LDEsMCwwLDExNCw5NiwwLDAsMCwxMTQsMjU1LDAsMCwwLDExNCwKKyAgICA3LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDEwNiwxLDAsMCwyMTgsMTEsCisgICAgOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTQsOTcsMCwwLDAsCisgICAgMTE0LDQ3LDAsMCwwLDExNCwxNDcsMCwwLDAsMTE0LDEwNiwwLDAsMCw0MSwKKyAgICA1LDExNCw2NywwLDAsMCwxMTQsOTYsMSwwLDAsMTE0LDk3LDEsMCwwLAorICAgIDExNCwxNzQsMCwwLDAsMTE0LDE0NSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTA3LDEsMCwwLDEwMiw4LAorICAgIDAsMCwxMTUsMjYsMCwwLDAsMCw5LDE2LDEsMTIsMSwyMSwxLDEwLAorICAgIDEsMTUsMSwxMywxLDEzLDEsMTIsMSwxMCwyLDE1LDEsMjEsMSwxMCwKKyAgICAxLDExNCwxMDcsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsCisgICAgMCwwLDAsMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDEsMSwwLDAsCisgICAgMTE2LDAsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMjUzLDAsMTAwLAorICAgIDIsMCwxMjQsMSwwLDEwNyw2LDAsMTE0LDg5LDAsMTE2LDEsMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDIsMCwKKyAgICAxMzEsMSwwLDEsMTE2LDAsMCwxMjQsMCwwLDEwMCwzLDAsMTMxLDIsMCwKKyAgICAxMTQsODksMCwxMjQsMSwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwKKyAgICAxLDAsMSwxMTMsODksMCwxMTAsMCwwLDEyMCwxNjEsMCwxMjQsMSwwLDY4LAorICAgIDkzLDE1MCwwLDEyNSwzLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLAorICAgIDIsMCwxMTUsOTYsMCwxMDAsNCwwLDEwNiw1LDAsMTI0LDAsMCwxMDYsNiwKKyAgICAwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNCwwLDEyMSwxNywwLDExNiw3LDAsCisgICAgMTI0LDIsMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywxMTMsMjQ2LDAsNCwxMTYsCisgICAgOCwwLDEwNywxMCwwLDExNCwyNDIsMCwxLDEyNSw1LDAsMSwxMjIsNTMsMCwKKyAgICAxMTYsOSwwLDEyNCw1LDAsMTMxLDEsMCwxMDYsMTAsMCwxMTYsMTEsMCwxMzEsCisgICAgMSwwLDExNCwyMjEsMCwxMjQsNSwwLDEwNiwxMiwwLDEyNCw0LDAsMTA3LDIsCisgICAgMCwxMTQsMjIxLDAsMTE5LDk2LDAsMTEzLDIyMSwwLDExMCwwLDAsMTMwLDAsMCwKKyAgICA4Nyw4OSwxMDAsNSwwLDEwMCw1LDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMywKKyAgICAyNDYsMCw4OCwxMTMsOTYsMCwxMTMsOTYsMCw4NywxMTAsMCwwLDEyNCwwLDAsCisgICAgODMsNDEsNiwxMjIsMjM4LDcwLDEwNSwxMDMsMTE3LDExNCwxMDEsMzIsMTExLDExNywxMTYsMzIsCisgICAgMTE5LDEwNCw5NywxMTYsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMzIsCisgICAgMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwzMiwKKyAgICAxMTIsOTcsMTE0LDk3LDEwOSwxMDEsMTE2LDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiw5OSwKKyAgICA5NywxMDgsMTA4LDk3LDk4LDEwOCwxMDEsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiw5NywKKyAgICAxMDcsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsNDYsMzIsNzMsMTE2LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTMsMTE3LAorICAgIDEwNSwxMTQsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDExNywxMTIsMTA4LDEwMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDExNCwKKyAgICAxMTEsMTA5LDMyLDk3LDExNSwxMTUsMTE3LDEwOSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwxMDgsMTA1LDk4LDM5LDExNSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNSwxMDUsMTE0LDEwMSwxMDAsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMTE0LDIzOSwwLDAsMCwyNTAsMSw0MiwyMTgsNyw5NSw5NSw5NywKKyAgICAxMDgsMTA4LDk1LDk1LDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSw3OCw0MSwxMywxMTQsNjAsCisgICAgMCwwLDAsMTE0LDIzOCwwLDAsMCwyMTgsNiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwKKyAgICAxMTQsMTkyLDAsMCwwLDExNCwxMDksMSwwLDAsMTE0LDQ3LDAsMCwwLDExNCwKKyAgICA1NywwLDAsMCwxMTQsMTA4LDAsMCwwLDExNCwxNDcsMCwwLDAsMTE0LDc2LAorICAgIDEsMCwwLDExNCw5LDAsMCwwLDIxOCwxNSw5NSw2OSw4Miw4Miw5NSw3NywKKyAgICA4Myw3MSw5NSw4MCw4Miw2OSw3MCw3Myw4OCwxMTQsNjcsMCwwLDAsNDEsNiwKKyAgICAxMTQsMTc0LDAsMCwwLDIxOCw4LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE0LAorICAgIDEwNCwxLDAsMCwxMTQsMTYsMCwwLDAsOTAsOSwxMDIsMTE0LDExMSwxMDksOTUsCisgICAgMTEwLDk3LDEwOSwxMDEsMTE0LDM0LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsCisgICAgMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTI2LDgsMCwwLDExNSwzNCwKKyAgICAwLDAsMCwwLDEwLDE1LDEsMTIsMSwxMiwxLDEzLDEsMTUsMSwyMiwKKyAgICAxLDEzLDEsMTUsMSwyMSwxLDMsMSwxNywxLDE4LDQsMjEsMSwxNSwKKyAgICAxLDksMSwzMiwxLDExNCwxMTMsMSwwLDAsOTksMSwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNzgsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwKKyAgICAxMjUsMSwwLDEyNCwxLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw3NCwwLDEyNCwKKyAgICAwLDAsMTAwLDMsMCwyNSwxMjUsMSwwLDEwMCw0LDAsMTI0LDAsMCwxMDcsCisgICAgNywwLDExNCw3NCwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsNSwwLDEzMSwxLAorICAgIDAsMTAwLDYsMCwyNSwxMjUsMSwwLDExMyw3NCwwLDExMCwwLDAsMTI0LDEsCisgICAgMCw4Myw0MSw3LDEyMiwxNjcsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwzMiwKKyAgICAxMTksMTA0LDk3LDExNiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsCisgICAgMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLAorICAgIDExMCwxMTEsMTE2LDMyLDEwMywxMTcsOTcsMTE0LDk3LDExMCwxMTYsMTAxLDEwMSwxMDAsMzIsMTE2LAorICAgIDExMSwzMiw5OCwxMDEsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDMyLDExMSwxMTQsMzIsCisgICAgOTksMTExLDExNywxMDgsMTAwLDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLAorICAgIDc4LDExMSwxMTAsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE0LDEwMSwxMTIsMTE0LAorICAgIDEwMSwxMTUsMTAxLDExMCwxMTYsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwxMTUsMzIsMTEyLAorICAgIDExNCwxMTEsMTEyLDEwMSwxMTQsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE3LAorICAgIDExMCwxMDcsMTEwLDExMSwxMTksMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCwyNDYsMCwKKyAgICAwLDAsNzgsMTE0LDU3LDAsMCwwLDExNCwyMzksMCwwLDAsMTE0LDExMCwwLAorICAgIDAsMCwxMTQsNzEsMCwwLDAsNDEsMiwxMTQsODIsMCwwLDAsMTE0LDMyLAorICAgIDAsMCwwLDQxLDIsMjE4LDcsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTQsOTYsCisgICAgMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDE3LDk1LDk5LDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LAorICAgIDk3LDEwMywxMDEsOTUsOTUsMTU4LDgsMCwwLDExNSwxMiwwLDAsMCwwLDcsCisgICAgMTUsMSwxMiwxLDEwLDEsMTIsMSwyNSwxLDExNCwxMTUsMSwwLDAsOTksCiAgICAgMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKICAgICA2NywwLDAsMCwxMTUsNTUsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEwNiwKICAgICAyLDAsMTMxLDAsMCwxMDIsMiwwLDEyNSwwLDAsMTE2LDMsMCwxMTYsNCwKICAgICAwLDEwMiwyLDAsMTI1LDEsMCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwKICAgICAxMjUsMiwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEwMywzLDAsODMsCi0gICAgNDAsMSwwLDAsMCwxMTcsOTUsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAxMTUsMzIsOTcsMzIsMTA4LDEwNSwxMTUsMTE2LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDQ1LDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY5LDk3LDk5LDEwNCwKLSAgICAzMiwxMDUsMTE2LDEwMSwxMDksMzIsMTA1LDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLAotICAgIDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsCi0gICAgMTAxLDExNSw0MSw0NiwxMCwzMiwzMiwzMiwzMiw0MCw3LDAsMCwwLDExNywxOSwKLSAgICAwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywKLSAgICAxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTUsMCwwLDAsCi0gICAgODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LAotICAgIDIwLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLDAsMCw2Niw4OSw4NCwKLSAgICA2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MCwzLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCwxMTUsMTE3LDYsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLAotICAgIDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwKLSAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTA3LDYsMCwwLDExNSw4LDAsMCwwLDAsCi0gICAgNSwxOCwxLDEyLDEsMTIsMSwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDk5LDUsMCwwLDAsMCwwLDAsMCwKLSAgICA5LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDIyNywwLDAsCi0gICAgMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjcsMCwxMTYsMCwwLAotICAgIDEyNCwwLDAsMTMxLDEsMCwxMjUsNSwwLDExMCw1NCwwLDEyNCwxLDAsMTAwLAotICAgIDMsMCwxMDcsOSwwLDExNCw0NSwwLDEyNCwxLDAsMTEwLDMsMCwxMDUsMCwKLSAgICAwLDEyNSw2LDAsMTE2LDIsMCwxMjQsNiwwLDEzMSwxLDAsMTI1LDcsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTI0LDcsMCwxMjQsNCwwLDEzMSwzLDAsMTI1LAotICAgIDUsMCwxMjQsMywwLDExNSwyMDcsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsCi0gICAgMCwxMTQsMTIyLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDIsMCwKLSAgICAxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLDEsMCw4MywxMjQsMCwwLDExNSwxMzIsCi0gICAgMCwxMjQsNSwwLDgzLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDExNiw0LAotICAgIDAsMTI0LDAsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMSwwLAotICAgIDI1LDEzMSwxLDAsMjQsMTI1LDgsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDUsCi0gICAgMCwxMDYsNywwLDEwMCwzLDAsMTE2LDQsMCwxMjQsNSwwLDEwNiw3LDAsCi0gICAgMTMxLDEsMCwxMjQsOCwwLDI0LDEzMywyLDAsMjUsMjUsODMsMTEwLDE2LDAsCi0gICAgMTE2LDgsMCwxMjQsNSwwLDEyNCwzLDAsMTE2LDAsMCwxMzEsMywwLDgzLAotICAgIDEwMCwzLDAsODMsNDAsNCwwLDAsMCwxMTcsMjE0LDEsMCwwLDczLDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LAotICAgIDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsCi0gICAgMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTAsMTAyLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDEsMTE0LAotICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLAotICAgIDExMSw5OSw5OSwxMTcsMTE0LDEwNSwxMTAsMTAzLDMyLDEwMiwxMTQsMTExLDEwOSwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNSw0NiwzMiw4NCwxMDQsCi0gICAgMTAxLDMyLDM5LDEwOCwxMTEsOTksOTcsMTA4LDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMDUsMTAzLDExMCwxMTEsMTE0LDEwMSwxMDAsNDYsMzIsCi0gICAgODQsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzOSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSwxMDEsMTE1LDMyLDExOSwxMDQsOTcsMTE2LDMyLDExNSwxMDQsMTExLDExNywxMDgsCi0gICAgMTAwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMzIsOTcsMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSwKLSAgICA5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiw2MCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDYyLDk2LDk2LDQxLDQ2LAotICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwxMCwzMiwzMiwKLSAgICAzMiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwKLSAgICAxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMDUsMTEwLDMyLDk3LDMyLDExNCwKLSAgICAxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA0Niw0NiwxMTIsMTA3LDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksMTExLDEwMCwKLSAgICA5Niw5NiwzMiwxMTksMTExLDExNywxMDgsMTAwLDMyLDEwNCw5NywxMTgsMTAxLDMyLDk3LDMyLAotICAgIDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMzIsMTExLDEwMiwzMiw1MCw0MSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMTcsMSwwLDAsMCw0Niw3OCwKLSAgICA0MCw5LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDExNyw5LDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LAotICAgIDExMSwxMTAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywKLSAgICAwLDAsMCwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNyw2LDAsMCwwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwKLSAgICAxMTUsMTE2LDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwOCwxMTEsOTgsCi0gICAgOTcsMTA4LDExNSw5NSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgMTE3LDcsMCwwLDAsOTksMTE3LDExNiw5NSwxMTEsMTAyLDEwMiw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCw5NSw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwxMTgsNiwwLDAsMTE1LDI2LDAsMCwwLAotICAgIDAsMTEsMTIsMSwxNSwyLDI0LDEsMTIsMSwxOCwxLDYsMywxMiwxLAotICAgIDIzLDEsNiwxLDQsNCwzNSwzLDQwLDIsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxNiwwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMjQsCi0gICAgMywwLDAsMTI0LDEsMCw5NywwLDAsMTI0LDAsMCw5NywxLDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTE0LDMzLDAsMTE2LDQsMCw5Nyw1LAotICAgIDAsMTEwLDYsMCwxMTYsNiwwLDk3LDUsMCwxMTYsNywwLDExNiwxLDAsCi0gICAgMTMxLDEsMCwxMjUsMiwwLDEyMCwxMTksMCwxMTYsMSwwLDEwNiw4LDAsMTA2LAotICAgIDksMCwxMzEsMCwwLDY4LDkzLDEwMiwwLDkyLDIsMCwxMjUsMywwLDEyNSwKLSAgICA0LDAsMTE2LDEwLDAsMTI0LDQsMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDY3LAotICAgIDAsMTE2LDExLDAsMTI0LDQsMCwxMDAsMSwwLDEzMSwyLDAsMTE1LDE2OSwwLAotICAgIDEyNCwzLDAsMTE2LDEsMCwxMDYsMTIsMCwxMDcsNiwwLDExNCwxMzYsMCwxMTYsCi0gICAgMTMsMCwxMjQsNCwwLDk1LDE0LDAsMTEzLDE2NiwwLDExNiwwLDAsMTA2LDE1LAotICAgIDAsMTI0LDMsMCwxMzEsMSwwLDExNCwxNjYsMCwxMTYsMTYsMCwxMjQsNCwwLAotICAgIDk1LDE0LDAsMTEzLDE2NiwwLDExMywxNjksMCwxMTMsNjcsMCwxMTMsNjcsMCw4NywKLSAgICAxMTYsMSwwLDEwNiw4LDAsMTE2LDE3LDAsMjUsMTI1LDUsMCwxMjAsNzYsMCwKLSAgICAxMDAsMjgsMCw2OCw5Myw2OCwwLDEyNSw2LDAsMTI0LDYsMCwxMTYsMSwwLAotICAgIDEwNiw4LDAsMTA3LDcsMCwxMTQsMjMyLDAsMTE2LDEzLDAsMTA2LDE4LDAsMTI0LAotICAgIDYsMCwxMzEsMSwwLDEyNSw3LDAsMTEwLDEzLDAsMTE2LDEsMCwxMDYsOCwKLSAgICAwLDEyNCw2LDAsMjUsMTI1LDcsMCwxMTYsMTksMCwxMjQsNSwwLDEyNCw2LAotICAgIDAsMTI0LDcsMCwxMzEsMywwLDEsMTEzLDE5MywwLDg3LDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMDMsMSwwLDEwMiwyLDAsMTAwLDgsMCwxMDAsOSwwLDEwMCw3LAotICAgIDAsMTAzLDIsMCwxMDIsMiwwLDEwMCwxMCwwLDEwMCw5LDAsMTAwLDcsMCwKLSAgICAxMDMsMiwwLDEwMiwyLDAsMTAyLDMsMCwxMjUsOCwwLDEyMCwxODksMCwxMjQsCi0gICAgOCwwLDY4LDkzLDE2OSwwLDkyLDIsMCwxMjUsOSwwLDEyNSwxMCwwLDExNiwKLSAgICAyMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTI0LDEwLDAsNjgsMTMxLAotICAgIDEsMCwxMzEsMSwwLDExNSwxMDcsMSwxMTYsMjEsMCwxMzAsMSwwLDEyNCwxMCwKLSAgICAwLDEwMCwxMywwLDI1LDEyNSwxMSwwLDEyNCw5LDAsMTE2LDEsMCwxMDYsOCwKLSAgICAwLDEwNyw2LDAsMTE0LDE0OSwxLDExNiwxLDAsMTA2LDgsMCwxMjQsOSwwLAotICAgIDI1LDEyNSwxMiwwLDgwLDExMyw2NCwxLDEyMSw2MCwwLDExNiwxMywwLDEwNiwxOCwKLSAgICAwLDEyNCw5LDAsMTMxLDEsMCwxMjUsMTIsMCwxMjQsOSwwLDEwMCwxMCwwLAotICAgIDEwNywyLDAsMTE0LDIwNywxLDEwMCwxNCwwLDExNiwxLDAsMTA2LDIyLDAsMTA3LAotICAgIDYsMCwxMTQsMjA3LDEsMTI0LDEwLDAsMTAwLDE1LDAsMjUsMTI1LDExLDAsMTEwLAotICAgIDAsMCw4MCw4NywxMTMsNjQsMSw0LDExNiwyMywwLDEwNywxMCwwLDExNCwyMzIsCi0gICAgMSwxLDEsMSwxMTksNjQsMSw4OSwxMTMsNjQsMSw4OCwxMTMsNjQsMSw4NywKLSAgICAxMTYsMjMsMCwxMDAsMTYsMCwxMzEsMSwwLDEzMCwxLDAsMTIxLDE5LDAsMTE2LAotICAgIDEzLDAsMTA2LDE4LDAsMTAwLDE3LDAsMTMxLDEsMCwxMjUsMTMsMCw4NywxMTAsCi0gICAgMjQsMCw0LDExNiwyMywwLDEwNywxMCwwLDExNCwzOCwyLDEsMSwxLDEwMCwKLSAgICAyNywwLDEyNSwxMywwLDg5LDExMCwxLDAsODgsMTE2LDEzLDAsMTA2LDE4LDAsCi0gICAgMTAwLDE4LDAsMTMxLDEsMCwxMjUsMTQsMCwxMjQsOSwwLDEwMCw4LDAsMTA3LAotICAgIDIsMCwxMTQsMTAwLDIsMTE2LDEzLDAsMTA2LDE4LDAsMTAwLDE5LDAsMTMxLDEsCi0gICAgMCwxMjUsMTUsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMCwwLDEyNCwxNSwwLAotICAgIDEzMSwzLDAsMSwxMTAsMCwwLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIxLDAsCi0gICAgMTI0LDEyLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDE3LDAsCi0gICAgMTI0LDEzLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDE4LDAsCi0gICAgMTI0LDE0LDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIyLDAsCi0gICAgMTI0LDExLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIzLDAsCi0gICAgMTE2LDI1LDAsMTI0LDEwLDAsMTMxLDEsMCwxMzEsMywwLDEsMTE2LDE5LDAsCi0gICAgMTI0LDUsMCwxMDAsMjQsMCwxMTYsMjYsMCwxMzEsMCwwLDEzMSwzLDAsMSwKLSAgICAxMTYsMjcsMCwxMDYsMjgsMCwxMTYsMCwwLDEwNiwyOSwwLDEzMSwwLDAsMTMxLAotICAgIDEsMCwxLDEyNCw5LDAsMTAwLDgsMCwxMDcsMiwwLDExNCwyMCwzLDExNiwKLSAgICAzMCwwLDEwNiwzMSwwLDEwMCwyNSwwLDEzMSwxLDAsMSwxMDAsMjYsMCwxMTYsCi0gICAgMjcsMCwxMDcsNiwwLDExNCwyMCwzLDEwMCwyOSwwLDExNiwzMywwLDk1LDM0LAotICAgIDAsMTEzLDIwLDMsMTEwLDAsMCwxMDAsMjcsMCw4Myw0MCwzMCwwLDAsMCwKLSAgICAxMTcsMjUwLDAsMCwwLDgzLDEwMSwxMTYsMTE3LDExMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDMyLDk4LDEyMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLAotICAgIDEwMywzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LAotICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMDUsMTEwLAotICAgIDEwNiwxMDEsOTksMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDEwOSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LAotICAgIDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDY1LDExNSwzMiwxMTUsMTIxLDExNSwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsCi0gICAgMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNSwzMiw5Nyw5OSw5OSwxMDEsMTE1LDExNSwzMiw5NywxMTAsMTAwLDMyLDk1LDEwNSwxMDksCi0gICAgMTEyLDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDgsCi0gICAgMTExLDk3LDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMTEsMTE1LDEwMSwzMiwKLSAgICAxMTYsMTE5LDExMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LAotICAgIDMyLDk4LDEwMSwzMiwxMDEsMTIwLDExMiwxMDgsMTA1LDk5LDEwNSwxMTYsMTA4LDEyMSwzMiwxMTIsCi0gICAgOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LAotICAgIDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDMsCi0gICAgMCwwLDAsOTUsMTA1LDExMSwxMTcsOSwwLDAsMCw5NSwxMTksOTcsMTE0LDExMCwKLSAgICAxMDUsMTEwLDEwMywxMTUsMTE3LDgsMCwwLDAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsCi0gICAgMTE1LDExNyw3LDAsMCwwLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMTE3LDUsMCwKLSAgICAwLDAsMTEyLDExMSwxMTUsMTA1LDEyMCwxMTcsMSwwLDAsMCw0NywxMTcsMiwwLAotICAgIDAsMCwxMTAsMTE2LDExNywxLDAsMCwwLDkyLDExNywzLDAsMCwwLDExMSwKLSAgICAxMTUsNTAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKLSAgICAwLDAsMCwxMTUsMCwwLDAsMTE1LDMzLDAsMCwwLDEyNCwwLDAsOTMsCi0gICAgMjMsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwwLAotICAgIDAsMTA3LDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MCwyLDAsCi0gICAgMCwwLDEwNSwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTA4LDEwMSwxMTAsNDAsMiwwLDAsMCwxMTcsMiwwLDAsMCw0NiwKLSAgICA0OCwxMTcsMywwLDAsMCwxMTUsMTAxLDExMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsCi0gICAgMTEyLDExNCw2MiwxOTEsNiwwLDAsMTE1LDIsMCwwLDAsNiwwLDExNywyNSwKLSAgICAwLDAsMCw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTA1LDAsMCwwLAotICAgIDAsMTE3LDcsMCwwLDAsNjksNzcsODgsMzIsNzEsNjcsNjcsMTA1LDEsMCwKLSAgICAwLDAsMTE3LDMwLDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsMTExLDExNSwxMDUsMTIwLDMyLAotICAgIDExMSwxMTQsMzIsMTEwLDExNiwxMTcsNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsCi0gICAgMTAwLDExNyw4LDAsMCwwLDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDExNyw2LAotICAgIDAsMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDExNyw3LDAsMCwwLDk1LDExOSwKLSAgICAxMDUsMTEwLDExNCwxMDEsMTAzLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDE1LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNyw0LAotICAgIDAsMCwwLDQ2LDExMiwxMjEsMTE5LDExNyw2LDAsMCwwLDk1LDEwMCw0NiwxMTIsCi0gICAgMTIxLDEwMCw3OCw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsCi0gICAgMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw4LAotICAgIDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNSwxMTcsNywwLDAsMCwKLSAgICAxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDg0LDQwLDM1LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDk1LDEwNSwxMDksMTEyLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw1LAotICAgIDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsOCwwLDAsMCwxMTEsMTEyLDExNiwKLSAgICAxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyNywwLDAsMCw3OSw4MCw4NCw3Myw3Nyw3MywKLSAgICA5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCwKLSAgICA3MCw3Myw4OCw2OSw4MywxMTcsMTcsMCwwLDAsNjYsODksODQsNjksNjcsNzksCi0gICAgNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDIzLDAsMCwwLAotICAgIDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLAotICAgIDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNyw0LDAsMCwwLDExNiwxMjEsMTEyLDEwMSwKLSAgICAxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDUsMCwwLAotICAgIDAsMTA1LDExNiwxMDEsMTA5LDExNSwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwKLSAgICAxMTYsOTcsMTEwLDk5LDEwMSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywyMCwwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDE1LDAsMCwwLDY2LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMTcsOSwwLAotICAgIDAsMCwxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxNCwwLDAsMCwKLSAgICA3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDcsMCwwLDAsCi0gICAgMTE1LDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDMsMCwwLDAsOTcsMTA4LDEwOCwxMTcsCi0gICAgMTQsMCwwLDAsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsMTExLDExMCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDcsMCwwLDAsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNywxMSwKLSAgICAwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwxMTUsMTAxLDExNiwxMTcsCi0gICAgMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LAotICAgIDk5LDk3LDExNSwxMDEsMTE3LDE4LDAsMCwwLDY5LDg4LDg0LDY5LDc4LDgzLDczLAotICAgIDc5LDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNyw2LDAsMCwwLAotICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNywxOCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLAotICAgIDExNSwxMDUsMTExLDExMCw5NSwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDExNywxNSwwLAotICAgIDAsMCw4Myw3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSwKLSAgICA4MywxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LAotICAgIDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsCi0gICAgMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsNzMsNzYsNjgsNDAsCi0gICAgMTYsMCwwLDAsMTE3LDEwLDAsMCwwLDExNSwxMjEsMTE1LDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNywxMSwwLDAsMCw5NSwxMDUsMTA5LDExMiw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE2LAotICAgIDEyMSwxMTIsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEyLDAsMCwwLDk4LDExNywxMDUsMTA4LAotICAgIDExNiwxMDUsMTEwLDk1LDExMCw5NywxMDksMTAxLDExNywxNCwwLDAsMCw5OCwxMTcsMTA1LAotICAgIDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTExLDExNSw5NSwxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSwxMTcsMTAsMCwwLDAsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTExLDExNSwxMTcsMTUsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSwxMTcsOCwwLAotICAgIDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwxMTcsOSwwLDAsMCwxMTEsCi0gICAgMTE1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMywwLDAsMCwxMTYsMTA0LDExNCwKLSAgICAxMDEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxNCwwLDAsMCwxMTksCi0gICAgMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwKLSAgICAwLDAsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNiwwLDAsMCwKLSAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDE1NCw2LDAsMCwxMTUsMTA2LDAsMCwwLDAsCi0gICAgOSw2LDEsNiwyLDEyLDEsOSwyLDYsMiwxMiwxLDI4LDEsMTUsCi0gICAgMSwxNSwxLDE1LDEsMTIsMSwxNSwxLDIyLDIsMTMsMSwxMywxLDE1LAotICAgIDEsMTgsMiwxMywxLDIwLDIsNDgsMSwxOSwyLDMxLDEsMTAsMSwxNSwKLSAgICAxLDEzLDEsNCwyLDMsMSwxNSwyLDI3LDEsMTMsMSw1LDEsMTMsCi0gICAgMSwxMiwyLDEyLDIsMywxLDE5LDEsMTMsMiwxMSwxLDE1LDIsMTIsCi0gICAgMSwxNSwxLDE5LDIsMTYsMSwxNiwxLDE2LDEsMTYsMSwyMiwyLDE5LAotICAgIDEsMTksMSwxMiwxLDEzLDEsMTIsMSwxMTcsNiwwLDAsMCw5NSwxMTUsCi0gICAgMTAxLDExNiwxMTcsMTEyLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNiwwLDAsMCwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDEsMTE2LDEsMCwxMzEsMCwKLSAgICAwLDEyNSwyLDAsMTE2LDIsMCwxMDYsMywwLDEwNiw0LDAsMTE2LDUsMCwKLSAgICAxMDYsNiwwLDEyNCwyLDAsMTQwLDAsMCwxMDMsMSwwLDEzMSwxLDAsMSwKLSAgICAxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsOSwwLDEzMSwxLDAsMSwKLSAgICAxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTAsMCwxMzEsMSwwLDEsCi0gICAgMTE2LDExLDAsMTA2LDEyLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwxMTYsMCwxMTYsCi0gICAgMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTMsMCwxMzEsMSwwLDEsMTEwLAotICAgIDAsMCwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTQsMCwxMzEsMSwKLSAgICAwLDEsMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNyw1MCwwLDAsMCwKLSAgICA3MywxMTAsMTE1LDExNiw5NywxMDgsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwKLSAgICAxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDQ2LDExNywyLDAsMCwwLDExMCwxMTYsNzgsNDAsMTUsMCwwLDAsMTE3LAotICAgIDYsMCwwLDAsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxMTcsMjcsMCwwLDAsOTUsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsCi0gICAgMTE1LDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNywxMCwwLDAsCi0gICAgMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw5LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTcsOSwwLDAsMCwxMDksMTAxLAotICAgIDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwKLSAgICAxMTAsMTAwLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywzLDAsMCwwLDk1LDExMSwKLSAgICAxMTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDIxLAotICAgIDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsCi0gICAgMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw4MCw5NywxMTYsCi0gICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMywwLDAsMCwxMTcsMTAsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwNSwxMDksMTEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxNywwLDAsMCwKLSAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDExNSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsCi0gICAgMCwwLDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDIzMyw2LDAsMCwxMTUsMTYsCi0gICAgMCwwLDAsMCwyLDEzLDEsOSwxLDI4LDEsMTYsMSwxNiwxLDE1LAotICAgIDEsMTksMSwxMTcsOCwwLDAsMCw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwKLSAgICA3OCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNyw2LAotICAgIDAsMCwwLDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMTE3LDYsMCwwLDAsMTAwLDk3LAotICAgIDExNCwxMTksMTA1LDExMCw0MCw3NCwwLDAsMCwxMTcsNywwLDAsMCw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDExNywyNywwLDAsMCw5NSw2Nyw2NSw4Myw2OSw5NSwKLSAgICA3Myw3OCw4Myw2OSw3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSw4MCw3Niw2NSw4NCwKLSAgICA3MCw3OSw4Miw3Nyw4MywxMTcsMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsCi0gICAgMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMTE3LDcsMCwwLDAsOTUsCi0gICAgMTE5LDk1LDEwOCwxMTEsMTEwLDEwMywxMTcsNywwLDAsMCw5NSwxMTQsOTUsMTA4LDExMSwKLSAgICAxMTAsMTAzLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwKLSAgICAxMTAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwKLSAgICAxMTYsMTE3LDE4LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LAotICAgIDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTIsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LDEzLDAsMCwwLDk1LDExOSwKLSAgICAxMTQsMTA1LDExNiwxMDEsOTUsOTcsMTE2LDExMSwxMDksMTA1LDk5LDExNyw1LDAsMCwwLAotICAgIDk1LDExOSwxMTQsOTcsMTEyLDExNyw0LDAsMCwwLDExNiwxMjEsMTEyLDEwMSwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSw5OSwxMTEsMTAwLDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxMCwwLDAsMCwxMTAsCi0gICAgMTAxLDExOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LDExNywxMiwwLDAsMCwKLSAgICA5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLDEwMyw5NSwxMTEsMTEwLDExNywxMiwwLDAsCi0gICAgMCw4MiwxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE0LDAsCi0gICAgMCwwLDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNywxMSwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDc2LDExMSw5OSwxMDcsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNywxOSwwLDAsMCw5NSwKLSAgICAxMDgsMTExLDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LAotICAgIDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwKLSAgICAxMTcsMywwLDAsMCwxMTEsMTE0LDEwMCwxMTcsMTcsMCwwLDAsOTUsODIsNjUsCi0gICAgODcsOTUsNzcsNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE3LDUsCi0gICAgMCwwLDAsOTgsMTIxLDExNiwxMDEsMTE1LDExNyw1LDAsMCwwLDExNCw5NywxMTAsCi0gICAgMTAzLDEwMSwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsNzMsNjcsOTUsNjYsODksCi0gICAgODQsNjksODMsMTE3LDgsMCwwLDAsOTUsODAsODksNjcsNjUsNjcsNzIsNjksCi0gICAgMTE3LDE1LDAsMCwwLDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLAotICAgIDczLDg4LDY5LDgzLDExNywyMywwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSw2NiwKLSAgICA4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICAxMTcsMjcsMCwwLDAsNzksODAsODQsNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsCi0gICAgODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCi0gICAgMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDE3LDAsMCwwLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LAotICAgIDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE1LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwxMDgsMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsCi0gICAgMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwKLSAgICAwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTcsMTYsMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTcsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDExNSwxMDQsMTA1LDEwOSwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsCi0gICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNCwwLDAsMCw3MCwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMjEsMCwwLDAsCi0gICAgODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwxMTcsMTIsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwKLSAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywyMCwwLDAsCi0gICAgMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTgsMCwwLDAsNjksODgsODQsNjksNzgsODMsCi0gICAgNzMsNzksNzgsOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDE5LDAsMCwKLSAgICAwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNywxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsCi0gICAgMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCwKLSAgICA4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDcwLAotICAgIDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDE4LDAsMCwwLDk1LDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwKLSAgICAxMTcsMTMsMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywKLSAgICAxMDksMTAxLDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsCi0gICAgOTksMTA0LDEwMSw5OSwxMDcsMTE3LDgsMCwwLDAsOTUsNjksODIsODIsOTUsNzcsCi0gICAgODMsNzEsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCwxMTcsMTQsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTE3LDE2LDAsMCwwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwKLSAgICAxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwxMTcsMTcsMCwwLDAsOTUsOTksOTcsMTA4LDk5LAotICAgIDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsMjcsMCwwLAotICAgIDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNywxMCwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwxMTcsNiwwLDAsMCwKLSAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDExNyw4LDAsMCwwLDk1LDEwNSwxMTAsMTE1LDExNiwKLSAgICA5NywxMDgsMTA4LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA2Miw4LDAsMCwwLDExNSwxMzIsMCwwLDAsNiwyMSw2LDMsMTIsMTMsCi0gICAgMTIsMTYsMTIsMTMsMTIsMTIsMTIsMTIsMTIsMTAsMTIsNiwxMiw3LDE1LDIyLAotICAgIDEyLDgsMTUsMywxMiwxMiw2LDIsNiwzLDIyLDQsMTksNjgsMTksMjMsCi0gICAgMTIsMTksMTIsMjAsMTIsMTAwLDM0LDEsMzcsMiw2LDIsOSwyLDksMSwKLSAgICA5LDIsMTUsMjcsMTIsMjMsMTIsMTksMTgsOCwxMiwxMywxMiwxMSwxMiw1NSwKLSAgICAxMiwxOCwxMiwxMSwxMiwxMSwxMiwxNywxOSw1NywxOSw1NCwxOSw1MCwxOSw4MywKLSAgICAyMiwxMzQsMTksMjksMjUsNDksMjUsMjUsNiwzLDE5LDQ1LDE5LDU1LDE5LDE4LAotICAgIDE5LDkxLDE5LDEyOCwxOSwxMywxMiw5LDEyLDE3LDEyLDE3LDYsMiwxMiw1MCwKLSAgICAxMiwxMywxOCwyNCwxMiwzNCwxMiwxNSwxMiwxMSwyNCwzNiwxMiw3OSwKKyAgICA0MSwxLDEyMiw5NSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiwxMDgsMTA1LAorICAgIDExNSwxMTYsMzIsMTExLDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsNjksOTcsOTksMTA0LDMyLDEwNSwxMTYsMTAxLDEwOSwzMiwKKyAgICAxMDUsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsMzIsNDAsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw0NCwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDQxLDQ2LDEwLDMyLAorICAgIDMyLDMyLDMyLDQxLDcsMTE0LDUwLDEsMCwwLDExNCw5NiwwLDAsMCwyMTgsCisgICAgMTgsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwKKyAgICAxMjAsMTAxLDExNSwxMTQsNDUsMSwwLDAsMTE0LDEyOCwwLDAsMCwxMTQsNDksMSwKKyAgICAwLDAsMTE0LDIyNywwLDAsMCw0MSwzLDkwLDEwLDEwMSwxMjAsMTE2LDEwMSwxMTAsCisgICAgMTE1LDEwNSwxMTEsMTEwLDExNSw5MCw2LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTAsOCw5OCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsMjMzLDAsMCwwLDE3Myw4LDAsMCwxMTUsCisgICAgOCwwLDAsMCwwLDUsMTgsMSwxMiwxLDEyLDEsMTE0LDIzMywwLDAsCisgICAgMCw5OSw1LDAsMCwwLDAsMCwwLDAsOSwwLDAsMCw1LDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwyMjcsMCwwLDAsMTI0LDQsMCwxMDAsMSwKKyAgICAwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsCisgICAgMTI1LDUsMCwxMTAsNTQsMCwxMjQsMSwwLDEwMCwyLDAsMTA3LDksMCwxMTQsCisgICAgNDUsMCwxMjQsMSwwLDExMCwzLDAsMTA1LDAsMCwxMjUsNiwwLDExNiwxLAorICAgIDAsMTI0LDYsMCwxMzEsMSwwLDEyNSw3LDAsMTE2LDAsMCwxMjQsMCwwLAorICAgIDEyNCw3LDAsMTI0LDQsMCwxMzEsMywwLDEyNSw1LDAsMTI0LDMsMCwxMTUsCisgICAgMjA3LDAsMTI0LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDEyMiwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMiwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsMSwwLAorICAgIDI1LDEzMSwxLDAsODMsMTI0LDAsMCwxMTUsMTMyLDAsMTI0LDUsMCw4MywxMTYsCisgICAgMywwLDEyNCwwLDAsMTMxLDEsMCwxMTYsMywwLDEyNCwwLDAsMTA2LDIsCisgICAgMCwxMDAsMywwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDI0LDEyNSwKKyAgICA4LDAsMTE2LDQsMCwxMDYsNSwwLDEyNCw1LDAsMTA2LDYsMCwxMDAsMiwKKyAgICAwLDExNiwzLDAsMTI0LDUsMCwxMDYsNiwwLDEzMSwxLDAsMTI0LDgsMCwKKyAgICAyNCwxMzMsMiwwLDI1LDI1LDgzLDExMCwxNiwwLDExNiw3LDAsMTI0LDUsMCwKKyAgICAxMjQsMywwLDExNiwwLDAsMTMxLDMsMCw4MywxMDAsMiwwLDgzLDQxLDQsCisgICAgOTcsMjE0LDEsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwKKyAgICAxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLAorICAgIDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTAsMTAyLAorICAgIDEwMSwxMTQsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLDExMSw5OSw5OSwxMTcsMTE0LDEwNSwxMTAsMTAzLDMyLAorICAgIDEwMiwxMTQsMTExLDEwOSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLAorICAgIDEwOCwxMDEsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDExNSw0NiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMTEsOTksOTcsMTA4LDExNSwKKyAgICAzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMDUsMTAzLAorICAgIDExMCwxMTEsMTE0LDEwMSwxMDAsNDYsMzIsODQsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzOSwKKyAgICAxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsCisgICAgMTEwLDExNiwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTE1LDMyLDExOSwxMDQsOTcsCisgICAgMTE2LDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMzIsOTcsCisgICAgMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTExLDExMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMCwzMiwzMiwzMiwzMiw5OCwKKyAgICAxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw0MCwxMDEsCisgICAgNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw2MCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwKKyAgICAxMTUsMTE2LDYyLDk2LDk2LDQxLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDEwMSwKKyAgICAxMTgsMTAxLDEwOCwzOSwxMCwzMiwzMiwzMiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwKKyAgICAxMTYsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLAorICAgIDExMCwzMiwxMTYsMTExLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwKKyAgICAzMiwxMDUsMTEwLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwxMCwzMiwKKyAgICAzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLAorICAgIDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiw0Niw0NiwxMTIsMTA3LDEwMywzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwzMiwxMDksMTExLDEwMCw5Niw5NiwzMiwxMTksMTExLDExNywxMDgsMTAwLDMyLAorICAgIDEwNCw5NywxMTgsMTAxLDMyLDk3LDMyLDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMzIsMTExLAorICAgIDEwMiwzMiw1MCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTQsNzEsMCwwLDAsCisgICAgNzgsMTE0LDExMCwwLDAsMCw0MSw4LDExNCwxMDcsMSwwLDAsMTE0LDExNSwxLAorICAgIDAsMCwxMTQsMTE1LDAsMCwwLDExNCwzMSwwLDAsMCwxMTQsNywwLDAsCisgICAgMCwxMTQsMTY5LDAsMCwwLDExNCw1NywwLDAsMCwxMTQsMTEzLDEsMCwwLAorICAgIDQxLDksMTE0LDY3LDAsMCwwLDExNCwxMTQsMSwwLDAsMjE4LDYsMTA4LDExMSwKKyAgICA5OSw5NywxMDgsMTE1LDExNCwxMTIsMSwwLDAsMTE0LDk3LDEsMCwwLDExNCwxNzQsCisgICAgMCwwLDAsOTAsOCwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDk1LDExNCw5NiwxLAorICAgIDAsMCw5MCw3LDk5LDExNywxMTYsOTUsMTExLDEwMiwxMDIsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDk1LDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDk1LDk1LDE4NCw4LDAsMCwxMTUsMjYsMCwwLDAsMCwKKyAgICAxMSwxMiwxLDE1LDIsMjQsMSwxMiwxLDE4LDEsNiwzLDEyLDEsMjMsCisgICAgMSw2LDEsNCw0LDM1LDMsNDAsMiwxMTQsMTE4LDEsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDY4LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwKKyAgICAwLDEzMSwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwMCwwLDAsMTA3LDgsMCwKKyAgICAxMTQsNDYsMCwxMTYsMiwwLDEwMCwxLDAsMTI0LDAsMCwyMywxMzEsMSwwLAorICAgIDEzMCwxLDAsMTEwLDAsMCwxMTYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMjUsCisgICAgMiwwLDEyNCwyLDAsMTA2LDQsMCwxMzEsMCwwLDgzLDQxLDIsNzgsMTIyLAorICAgIDI1LDExMCwxMTEsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDQxLDUsMTE0LDUsMSwwLAorICAgIDAsMTE0LDgsMSwwLDAsMTE0LDE0NywwLDAsMCwxMTQsMTY4LDAsMCwwLAorICAgIDExNCwzLDEsMCwwLDQxLDMsMTE0LDY3LDAsMCwwLDExNCwxNzIsMCwwLAorICAgIDAsMTE0LDE3MywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMTgsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsCisgICAgMTAyLDExNCwxMTEsMTA5LDk1LDExMCw5NywxMDksMTAxLDIxOSw4LDAsMCwxMTUsMTAsMCwKKyAgICAwLDAsMCwxLDE1LDEsMTIsMSwxOSwxLDEyLDEsMTE0LDExOSwxLDAsCisgICAgMCw5OSwyLDAsMCwwLDAsMCwwLDAsMTksMCwwLDAsMTIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDIzMiwyLDAsMCwxMjQsMSwwLDk3LDAsCisgICAgMCwxMjQsMCwwLDk3LDEsMCwxMTYsMSwwLDEwNiwyLDAsMTA2LDMsMCwKKyAgICAxMTQsMzMsMCwxMTYsNCwwLDk3LDUsMCwxMTAsNiwwLDExNiw2LDAsOTcsCisgICAgNSwwLDExNiw3LDAsMTE2LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTIwLDEzOCwKKyAgICAwLDExNiwxLDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsNjgsOTMsMTIxLAorICAgIDAsOTIsMiwwLDEyNSwzLDAsMTI1LDQsMCwxMTYsMTAsMCwxMjQsNCwwLAorICAgIDEyNCwyLDAsMTMxLDIsMCwxMTQsNjcsMCwxMjQsMywwLDExNiwxLDAsMTA2LAorICAgIDExLDAsMTA3LDYsMCwxMTQsMTE4LDAsMTE2LDEyLDAsMTI1LDUsMCwxMTAsMjcsCisgICAgMCwxMTYsMCwwLDEwNiwxMywwLDEyNCwzLDAsMTMxLDEsMCwxMTQsNjcsMCwKKyAgICAxMTYsMTQsMCwxMjUsNSwwLDExMCwzLDAsMTEzLDY3LDAsMTE2LDE1LDAsMTI0LAorICAgIDQsMCwxMjQsNSwwLDEzMSwyLDAsMTI1LDYsMCwxMTYsMTYsMCwxMjQsNiwKKyAgICAwLDEzMSwxLDAsMTI1LDcsMCwxMjQsNywwLDEwNiwxNywwLDEyNCw0LDAsCisgICAgMTMxLDEsMCwxLDExMyw2NywwLDExMyw2NywwLDg3LDExNiwxLDAsMTA2LDgsCisgICAgMCwxMTYsMTgsMCwyNSwxMjUsOCwwLDEyMCw3MywwLDEwMCwyNiwwLDY4LDkzLAorICAgIDY1LDAsMTI1LDksMCwxMjQsOSwwLDExNiwxLDAsMTA2LDgsMCwxMDcsNywKKyAgICAwLDExNCwyNDgsMCwxMTYsMTksMCwxMjQsOSwwLDEzMSwxLDAsMTI1LDEwLDAsCisgICAgMTEwLDEzLDAsMTE2LDEsMCwxMDYsOCwwLDEyNCw5LDAsMjUsMTI1LDEwLDAsCisgICAgMTE2LDIwLDAsMTI0LDgsMCwxMjQsOSwwLDEyNCwxMCwwLDEzMSwzLDAsMSwKKyAgICAxMTMsMjEyLDAsODcsMTAwLDUsMCwxMDAsNiwwLDEwMywxLDAsMTAyLDIsMCwKKyAgICAxMDAsNywwLDEwMCw4LDAsMTAwLDYsMCwxMDMsMiwwLDEwMiwyLDAsMTAyLAorICAgIDIsMCwxMjUsMTEsMCwxMjAsMTQ2LDAsMTI0LDExLDAsNjgsOTMsMTI2LDAsOTIsCisgICAgMiwwLDEyNSwxMiwwLDEyNSwxMywwLDExNiwyMSwwLDEwMCw5LDAsMTAwLDEwLAorICAgIDAsMTMyLDAsMCwxMjQsMTMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTE1LDEwOCwKKyAgICAxLDExNiwyMiwwLDEzMCwxLDAsMTI0LDEzLDAsMTAwLDExLDAsMjUsMTI1LDE0LAorICAgIDAsMTI0LDEyLDAsMTE2LDEsMCwxMDYsOCwwLDEwNyw2LDAsMTE0LDE1MCwxLAorICAgIDExNiwxLDAsMTA2LDgsMCwxMjQsMTIsMCwyNSwxMjUsMTUsMCw4MCwxMTMsNjUsCisgICAgMSwxMjEsMTcsMCwxMTYsMTksMCwxMjQsMTIsMCwxMzEsMSwwLDEyNSwxNSwwLAorICAgIDgwLDg3LDExMyw2NSwxLDQsMTE2LDIzLDAsMTA3LDEwLDAsMTE0LDE5MCwxLDEsCisgICAgMSwxLDExOSw2NSwxLDg5LDExMyw2NSwxLDg4LDExMyw2NSwxLDg3LDExNiwyMywKKyAgICAwLDEwMCwxMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTYsMjAsMCwxMjQsOCwwLAorICAgIDEwMCwxMywwLDEyNCwxNSwwLDEzMSwzLDAsMSwxMTYsMjAsMCwxMjQsOCwwLAorICAgIDEwMCwxNCwwLDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMjAsMCwxMjQsOCwwLAorICAgIDEwMCwxNSwwLDEwMCwxNiwwLDEwNiwyNCwwLDEyNCwxMywwLDEzMSwxLDAsMTMxLAorICAgIDMsMCwxLDEyMSwxNiwwLDExNiwxOSwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LAorICAgIDE2LDAsODcsMTEwLDI0LDAsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsNTAsMiwKKyAgICAxLDEsMSwxMDAsMTgsMCwxMjUsMTYsMCw4OSwxMTAsMSwwLDg4LDExNiwyMCwKKyAgICAwLDEyNCw4LDAsMTAwLDE3LDAsMTI0LDE2LDAsMTMxLDMsMCwxLDExNiwxOSwKKyAgICAwLDEwMCwxOSwwLDEzMSwxLDAsMTI1LDE3LDAsMTE2LDIwLDAsMTI0LDgsMCwKKyAgICAxMDAsMTksMCwxMjQsMTcsMCwxMzEsMywwLDEsMTI0LDEyLDAsMTAwLDcsMCwKKyAgICAxMDcsMiwwLDExNCwxMzgsMiwxMTYsMTksMCwxMDAsMjAsMCwxMzEsMSwwLDEyNSwKKyAgICAxOCwwLDExNiwyMCwwLDEyNCw4LDAsMTAwLDIxLDAsMTI0LDE4LDAsMTMxLDMsCisgICAgMCwxLDExMCwwLDAsMTE2LDIwLDAsMTI0LDgsMCwxMDAsMjIsMCwxMTYsMjUsCisgICAgMCwxMzEsMCwwLDEzMSwzLDAsMSwxMTYsMjYsMCwxMDYsMjcsMCwxMTYsMCwKKyAgICAwLDEwNiwyOCwwLDEzMSwwLDAsMTMxLDEsMCwxLDEyNCwxMiwwLDEwMCw3LAorICAgIDAsMTA3LDIsMCwxMTQsMjI4LDIsMTE2LDI5LDAsMTA2LDMwLDAsMTAwLDIzLDAsCisgICAgMTMxLDEsMCwxLDEwMCwyNCwwLDExNiwyNiwwLDEwNyw2LDAsMTE0LDIyOCwyLAorICAgIDEwMCwyNSwwLDExNiwzMSwwLDk1LDMyLDAsMTEzLDIyOCwyLDExMCwwLDAsMTAwLAorICAgIDE4LDAsODMsNDEsMjcsMTIyLDI1MCw4MywxMDEsMTE2LDExNywxMTIsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5OCwxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTA1LDExMCwxMDMsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LAorICAgIDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsCisgICAgMTA1LDExMCwxMDYsMTAxLDk5LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwxMDksMTAsMzIsCisgICAgMzIsMzIsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LAorICAgIDk3LDEwOCwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw2NSwxMTUsMzIsMTE1LDEyMSwxMTUsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwKKyAgICAxMDAsMTAxLDEwMCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTUsMzIsOTcsOTksOTksMTAxLDExNSwxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NSwKKyAgICAxMDUsMTA5LDExMiwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDExNiwxMTEsCisgICAgMzIsMTA4LDExMSw5NywxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTExLDExNSwKKyAgICAxMDEsMzIsMTE2LDExOSwxMTEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOSwxMTcsCisgICAgMTE1LDExNiwzMiw5OCwxMDEsMzIsMTAxLDEyMCwxMTIsMTA4LDEwNSw5OSwxMDUsMTE2LDEwOCwxMjEsCisgICAgMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDExNCw0OSwwLDAsMCwxMTQsMTYwLDAsMCwwLDIxOCw4LDk4LDExNywxMDUsCisgICAgMTA4LDExNiwxMDUsMTEwLDExNSwxMTQsMTg2LDAsMCwwLDkwLDUsMTEyLDExMSwxMTUsMTA1LAorICAgIDEyMCwyNTAsMSw0NywyMTgsMiwxMTAsMTE2LDI1MCwxLDkyLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMTE1LDAsMCwwLAorICAgIDExNSwzMywwLDAsMCwxMjQsMCwwLDkzLDIzLDAsMTI1LDEsMCwxMTYsMCwKKyAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMCwwLDEwNywyLDAsODYsMSwxMTMsCisgICAgMywwLDEwMCwxLDAsODMsNDEsMiwxMTQsMjksMCwwLDAsNzgsNDEsMSwKKyAgICAxMTQsMzEsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsMTE0LDEyNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjExLDAsMCwwLDE1LDksMCwwLDExNSwyLDAsMCwwLDYsMCwKKyAgICAxMjIsMjUsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsCisgICAgNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDExNCw3MSwwLDAsMCwKKyAgICAxMjIsMzAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiwxMTQsMTAxLDExMywxMTcsCisgICAgMTA1LDExNCwxMDEsMTE1LDMyLDExMiwxMTEsMTE1LDEwNSwxMjAsMzIsMTExLDExNCwzMiwxMTAsMTE2LAorICAgIDExNCwzLDAsMCwwLDExNCwyNSwwLDAsMCwxMTQsMjEsMCwwLDAsMTE0LAorICAgIDMwLDAsMCwwLDExNCw3MiwwLDAsMCw3OCwxMTQsMTA1LDAsMCwwLDkwLAorICAgIDYsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsMTE0LDE3LDEsMCwwLDExNCw2LDAsMCwKKyAgICAwLDEyMiw0LDQ2LDExMiwxMjEsMTE5LDEyMiw2LDk1LDEwMCw0NiwxMTIsMTIxLDEwMCw4NCwKKyAgICA0MSw0LDEyMiwzLDk1LDEwNSwxMTEsMTIyLDksOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwKKyAgICAxMDMsMTE1LDEyMiw4LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNSwxMjIsNywxMDksOTcsCisgICAgMTE0LDExNSwxMDQsOTcsMTA4LDQxLDMzLDExNCw5NiwwLDAsMCwxMTQsNywwLDAsCisgICAgMCwxMTQsMTExLDAsMCwwLDExNCwxMTIsMCwwLDAsMTE0LDExNCwwLDAsMCwKKyAgICAxMTQsMjI3LDAsMCwwLDExNCwxMTMsMCwwLDAsMTE0LDY2LDAsMCwwLDExNCwKKyAgICAxNjksMCwwLDAsMjE4LDUsMTA1LDExNiwxMDEsMTA5LDExNSwxMTQsMTg3LDAsMCwwLAorICAgIDExNCwxNTEsMCwwLDAsMTE0LDUsMSwwLDAsMTE0LDE1NiwwLDAsMCwxMTQsCisgICAgMTMsMSwwLDAsMTE0LDI0MCwwLDAsMCwxMTQsMTY4LDAsMCwwLDExNCwyNTAsCisgICAgMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwxMTksMSwwLDAsMTE0LDYxLDAsCisgICAgMCwwLDIxOCwzLDk3LDEwOCwxMDgsMTE0LDg5LDAsMCwwLDExNCwxNDcsMCwwLAorICAgIDAsMTE0LDI2LDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsNTMsMSwwLDAsCisgICAgMTE0LDE5MiwwLDAsMCwxMTQsMTE2LDEsMCwwLDExNCwxMjgsMCwwLDAsMTE0LAorICAgIDIyMCwwLDAsMCwxMTQsMTYsMSwwLDAsMTE0LDIwLDEsMCwwLDQxLDE5LAorICAgIDIxOCwxMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMTgsMTEsOTUsMTA1LAorICAgIDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNCw2NywwLDAsMCwxMTQsMTc0LDAsMCwwLAorICAgIDExNCwxNjMsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsMTczLDAsMCwwLDkwLAorICAgIDExLDExNSwxMDEsMTA4LDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMiw5OCwxMTcsCisgICAgMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSw5MCwxNCw5OCwxMTcsMTA1LDEwOCwKKyAgICAxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMCwxMTEsMTE1LDk1LDEwMCwKKyAgICAxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDkwLDEwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LAorICAgIDExMSwxMTUsMTE0LDIxLDAsMCwwLDExNCwyNSwwLDAsMCw5MCw5LDExMSwxMTUsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw5NSwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxNCwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5NSwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMywxMTksMTA1LDExMCwxMTQsMTAxLDEwMyw5NSwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsNiw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDIyNyw4LDAsMCwKKyAgICAxMTUsMTA4LDAsMCwwLDAsOSw2LDEsNiwyLDEyLDEsOSwyLDYsCisgICAgMywxMiwxLDI4LDEsMTUsMSwxNSwxLDksMSwxNSwxLDksMiwzLAorICAgIDEsMTUsMSwxMiwxLDIwLDMsMTMsMSwxMywxLDE1LDEsMTUsMiwxMywKKyAgICAxLDIwLDMsMzMsMSwxOSwyLDMxLDEsMTAsMSwxNSwxLDEzLDEsNCwKKyAgICAyLDMsMSwxMiwxLDUsMSwxMywxLDEyLDIsMTIsMSwxNiwxLDE2LAorICAgIDEsMjUsMywzLDEsMTYsMSwxMywyLDExLDEsMTYsMywxMiwxLDE2LAorICAgIDMsMTIsMSwxMiwxLDE5LDMsMTksMSwxOSwxLDEyLDEsMTMsMSwxMiwKKyAgICAxLDExNCwxMjgsMSwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDMsCisgICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTM2LDAsMCwwLAorICAgIDExNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMSwxMTYsMSwwLAorICAgIDEzMSwwLDAsMTI1LDIsMCwxMTYsMiwwLDEwNiwzLDAsMTA2LDQsMCwxMTYsCisgICAgNSwwLDEwNiw2LDAsMTI0LDIsMCwxNDAsMCwwLDEwMywxLDAsMTMxLDEsCisgICAgMCwxLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiw5LDAsMTMxLDEsCisgICAgMCwxLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMCwwLDEzMSwxLAorICAgIDAsMSwxMTYsMTEsMCwxMDYsMTIsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDExNiwKKyAgICAwLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMywwLDEzMSwxLDAsCisgICAgMSwxMTAsMCwwLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxNCwwLAorICAgIDEzMSwxLDAsMSwxMDAsMiwwLDgzLDQxLDMsMTIyLDUwLDczLDExMCwxMTUsMTE2LAorICAgIDk3LDEwOCwxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywxMTUsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMTE0LDEyMiwKKyAgICAxLDAsMCw3OCw0MSwxNSwxMTQsMTI4LDEsMCwwLDExNCwyMzMsMCwwLDAsCisgICAgMTE0LDcsMCwwLDAsMTE0LDcyLDEsMCwwLDExNCwxOTIsMCwwLDAsMTE0LAorICAgIDgwLDEsMCwwLDExNCw5NCwxLDAsMCwxMTQsOTksMSwwLDAsMTE0LDIyMCwKKyAgICAwLDAsMCwxMTQsNSwxLDAsMCwxMTQsMTMsMSwwLDAsMTE0LDMsMCwKKyAgICAwLDAsMTE0LDU3LDAsMCwwLDExNCwxNiwxLDAsMCwxMTQsNjcsMSwwLAorICAgIDAsNDEsMywxMTQsMTI2LDEsMCwwLDExNCwxMjcsMSwwLDAsOTAsMTcsMTE1LAorICAgIDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDgsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsNTgsOSwwLDAsMTE1LDE2LDAsCisgICAgMCwwLDAsMiwxMywxLDksMSwyOCwxLDE2LDEsMTYsMSwxNSwxLAorICAgIDE5LDEsMTE0LDEyOSwxLDAsMCw0MSwzLDEyMiwzLDExOSwxMDUsMTEwLDExNCwxLAorICAgIDAsMCwwLDExNCwyLDAsMCwwLDQxLDg5LDExNCw1OSwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxNywwLDAsMCwxMTQsMTksCisgICAgMCwwLDAsMTE0LDI4LDAsMCwwLDExNCwzOCwwLDAsMCwxMTQsMzksMCwKKyAgICAwLDAsMTE0LDQzLDAsMCwwLDExNCw0NCwwLDAsMCwxMTQsNDYsMCwwLAorICAgIDAsMTE0LDU1LDAsMCwwLDExNCw2NSwwLDAsMCwxMTQsNjgsMCwwLDAsCisgICAgMTE0LDY2LDAsMCwwLDIxOCw4LDk1LDk1LDk5LDExMSwxMDAsMTAxLDk1LDk1LDExNCwKKyAgICAxODgsMCwwLDAsMTE0LDEwMiwwLDAsMCwxMTQsODEsMCwwLDAsMTE0LDg4LAorICAgIDAsMCwwLDExNCw2OSwwLDAsMCwxMTQsNzAsMCwwLDAsMTE0LDkxLDAsCisgICAgMCwwLDExNCw5MiwwLDAsMCwxMTQsOTUsMCwwLDAsMTE0LDEwNiwwLDAsCisgICAgMCwxMTQsMTA4LDAsMCwwLDExNCwxNSwwLDAsMCwxMTQsMTgwLDAsMCwwLAorICAgIDExNCwxNCwwLDAsMCwxMTQsMTgsMCwwLDAsOTAsMTcsOTUsODIsNjUsODcsCisgICAgOTUsNzcsNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE0LDExOSwwLAorICAgIDAsMCwxMTQsMTI4LDAsMCwwLDExNCwxMTMsMCwwLDAsMTE0LDExNCwwLDAsCisgICAgMCwxMTQsMTI2LDAsMCwwLDExNCwxMjksMCwwLDAsMTE0LDEzNiwwLDAsMCwKKyAgICAxMTQsMTM4LDAsMCwwLDExNCwxNDYsMCwwLDAsMTE0LDE1MCwwLDAsMCwxMTQsCisgICAgMTU1LDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDE2NiwwLDAsMCwxMTQsMTc1LAorICAgIDAsMCwwLDExNCwxODUsMCwwLDAsMTE0LDE5MCwwLDAsMCwxMTQsMTkzLDAsCisgICAgMCwwLDExNCwxOTgsMCwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsMjA3LDAsMCwKKyAgICAwLDExNCwyMTMsMCwwLDAsMTE0LDE2NywwLDAsMCwyMTgsNiwxMTEsOTgsMTA2LAorICAgIDEwMSw5OSwxMTYsMTE0LDIzNCwwLDAsMCwxMTQsMjMyLDAsMCwwLDExNCwyNDAsMCwKKyAgICAwLDAsMTE0LDE2OCwwLDAsMCwxMTQsNSwxLDAsMCwxMTQsMTMsMSwwLAorICAgIDAsMTE0LDE2LDEsMCwwLDExNCwyNiwxLDAsMCwxMTQsMjcsMSwwLDAsCisgICAgMTE0LDQyLDEsMCwwLDExNCw0NSwxLDAsMCwxMTQsNDksMSwwLDAsMTE0LAorICAgIDUzLDEsMCwwLDExNCw1MCwxLDAsMCwxMTQsNTQsMSwwLDAsMTE0LDI0NywKKyAgICAwLDAsMCwxMTQsNjcsMSwwLDAsMTE0LDgwLDEsMCwwLDExNCw5NSwxLAorICAgIDAsMCwxMTQsOTgsMSwwLDAsMTE0LDI0MSwwLDAsMCwxMTQsMTAyLDEsMCwKKyAgICAwLDExNCwxMTEsMSwwLDAsMTE0LDEwMywxLDAsMCwxMTQsMTA1LDEsMCwwLAorICAgIDExNCwxMDYsMSwwLDAsMTE0LDEwNywxLDAsMCwxMTQsMTEzLDEsMCwwLDExNCwKKyAgICAxMTUsMSwwLDAsMTE0LDIzMywwLDAsMCwxMTQsMTE4LDEsMCwwLDExNCwxMTksCisgICAgMSwwLDAsMTE0LDEyOCwxLDAsMCwxMTQsMTI5LDEsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCw4LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDYyLDgsMCwwLDAsMTE1LAorICAgIDE2NCwwLDAsMCw2LDE3LDYsMywxMiwxMiwxMiw1LDEyLDUsMTIsNiwKKyAgICAxMiwxMiwxMiwxMCwxMiw5LDEyLDUsMTIsNywxNSwyMiwxMiw4LDEyLDQsCisgICAgMTUsNiw2LDIsNiwzLDIyLDQsMTksNjgsMTksMjEsMTksMTksMTIsMTksCisgICAgMTIsMjAsMTIsMTEzLDIyLDEsMTgsMiw2LDIsOSwyLDksMSw5LDIsCisgICAgMTUsMjcsMTIsMjMsMTIsMTksMTIsMTIsMTgsOCwxMiwxOCwxMiwxMSwxMiwxMSwKKyAgICAxMiwxMywxMiwxMywyMSw1NSwyMSwxMiwxOCwxMCwxMiwxNCwxMiwzNCwxOSwyNywKKyAgICAxOSwxMDIsMjQsMjIsOSwzLDEyLDEsMTUsNjMsMTgsNDUsMTksMjUxLDE5LDcxLAorICAgIDE5LDU5LDE5LDYwLDE5LDI1LDIyLDExMCwxOSwzMSwyNSw0MywyNSwxNiw2LDMsCisgICAgMTksNDksMTksNTcsMTksMjcsMTksMTI0LDE5LDE0NywxOSwxMywxMiw5LDE1LDQxLAorICAgIDEyLDE3LDYsMSwxMCwyLDEyLDI3LDEyLDYsMTgsMjQsMTIsMzIsMTIsMTUsCisgICAgMTIsMTEsMjQsMzUsMTIsOCwxMiw4NywKIH07CmRpZmYgLS1naXQgYS9QeXRob24vbWFyc2hhbC5jIGIvUHl0aG9uL21hcnNoYWwuYwppbmRleCBjYzE3MzI5Li5kYzU0MTFjIDEwMDY0NAotLS0gYS9QeXRob24vbWFyc2hhbC5jCisrKyBiL1B5dGhvbi9tYXJzaGFsLmMKQEAgLTEsOCArMSwxMCBAQAogCiAvKiBXcml0ZSBQeXRob24gb2JqZWN0cyB0byBmaWxlcyBhbmQgcmVhZCB0aGVtIGJhY2suCi0gICBUaGlzIGlzIGludGVuZGVkIGZvciB3cml0aW5nIGFuZCByZWFkaW5nIGNvbXBpbGVkIFB5dGhvbiBjb2RlIG9ubHk7Ci0gICBhIHRydWUgcGVyc2lzdGVudCBzdG9yYWdlIGZhY2lsaXR5IHdvdWxkIGJlIG11Y2ggaGFyZGVyLCBzaW5jZQotICAgaXQgd291bGQgaGF2ZSB0byB0YWtlIGNpcmN1bGFyIGxpbmtzIGFuZCBzaGFyaW5nIGludG8gYWNjb3VudC4gKi8KKyAgIFRoaXMgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB3cml0aW5nIGFuZCByZWFkaW5nIGNvbXBpbGVkIFB5dGhvbiBjb2RlLAorICAgZXZlbiB0aG91Z2ggZGljdHMsIGxpc3RzLCBzZXRzIGFuZCBmcm96ZW5zZXRzLCBub3QgY29tbW9ubHkgc2VlbiBpbgorICAgY29kZSBvYmplY3RzLCBhcmUgc3VwcG9ydGVkLgorICAgVmVyc2lvbiAzIG9mIHRoaXMgcHJvdG9jb2wgcHJvcGVybHkgc3VwcG9ydHMgY2lyY3VsYXIgbGlua3MKKyAgIGFuZCBzaGFyaW5nLiAqLwogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KIApAQCAtMzEsMTYgKzMzLDE0IEBACiAjZGVmaW5lIFRZUEVfU1RPUElURVIgICAgICAgICAgICdTJwogI2RlZmluZSBUWVBFX0VMTElQU0lTICAgICAgICAgICAnLicKICNkZWZpbmUgVFlQRV9JTlQgICAgICAgICAgICAgICAgJ2knCi0vKiBUWVBFX0lOVDY0IGlzIGRlcHJlY2F0ZWQuIEl0IGlzIG5vdAotICAgZ2VuZXJhdGVkIGFueW1vcmUsIGFuZCBzdXBwb3J0IGZvciByZWFkaW5nIGl0Ci0gICB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNC4gKi8KLSNkZWZpbmUgVFlQRV9JTlQ2NCAgICAgICAgICAgICAgJ0knCiAjZGVmaW5lIFRZUEVfRkxPQVQgICAgICAgICAgICAgICdmJwogI2RlZmluZSBUWVBFX0JJTkFSWV9GTE9BVCAgICAgICAnZycKICNkZWZpbmUgVFlQRV9DT01QTEVYICAgICAgICAgICAgJ3gnCiAjZGVmaW5lIFRZUEVfQklOQVJZX0NPTVBMRVggICAgICd5JwogI2RlZmluZSBUWVBFX0xPTkcgICAgICAgICAgICAgICAnbCcKICNkZWZpbmUgVFlQRV9TVFJJTkcgICAgICAgICAgICAgJ3MnCisjZGVmaW5lIFRZUEVfSU5URVJORUQgICAgICAgICAgICd0JworI2RlZmluZSBUWVBFX1JFRiAgICAgICAgICAgICAgICAncicKICNkZWZpbmUgVFlQRV9UVVBMRSAgICAgICAgICAgICAgJygnCiAjZGVmaW5lIFRZUEVfTElTVCAgICAgICAgICAgICAgICdbJwogI2RlZmluZSBUWVBFX0RJQ1QgICAgICAgICAgICAgICAneycKQEAgLTQ5LDYgKzQ5LDEzIEBACiAjZGVmaW5lIFRZUEVfVU5LTk9XTiAgICAgICAgICAgICc/JwogI2RlZmluZSBUWVBFX1NFVCAgICAgICAgICAgICAgICAnPCcKICNkZWZpbmUgVFlQRV9GUk9aRU5TRVQgICAgICAgICAgJz4nCisjZGVmaW5lIEZMQUdfUkVGICAgICAgICAgICAgICAgICdceDgwJyAvKiB3aXRoIGEgdHlwZSwgYWRkIG9iaiB0byBpbmRleCAqLworCisjZGVmaW5lIFRZUEVfQVNDSUkgICAgICAgICAgICAgICdhJworI2RlZmluZSBUWVBFX0FTQ0lJX0lOVEVSTkVEICAgICAnQScKKyNkZWZpbmUgVFlQRV9TTUFMTF9UVVBMRSAgICAgICAgJyknCisjZGVmaW5lIFRZUEVfU0hPUlRfQVNDSUkgICAgICAgICd6JworI2RlZmluZSBUWVBFX1NIT1JUX0FTQ0lJX0lOVEVSTkVEICdaJwogCiAjZGVmaW5lIFdGRVJSX09LIDAKICNkZWZpbmUgV0ZFUlJfVU5NQVJTSEFMTEFCTEUgMQpAQCAtNjUsMTUgKzcyLDE4IEBACiAgICAgUHlPYmplY3QgKmN1cnJlbnRfZmlsZW5hbWU7CiAgICAgY2hhciAqcHRyOwogICAgIGNoYXIgKmVuZDsKKyAgICBjaGFyICpidWY7CisgICAgUHlfc3NpemVfdCBidWZfc2l6ZTsKKyAgICBQeU9iamVjdCAqcmVmczsgLyogZGljdCBvbiBtYXJzaGFsLCBsaXN0IG9uIHVubWFyc2hhbCAqLwogICAgIGludCB2ZXJzaW9uOwogfSBXRklMRTsKIAogI2RlZmluZSB3X2J5dGUoYywgcCkgaWYgKCgocCktPmZwKSkgcHV0YygoYyksIChwKS0+ZnApOyBcCiAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHApLT5wdHIgIT0gKHApLT5lbmQpICoocCktPnB0cisrID0gKGMpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdfbW9yZShjLCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB3X21vcmUoKGMpLCBwKQogCiBzdGF0aWMgdm9pZAotd19tb3JlKGludCBjLCBXRklMRSAqcCkKK3dfbW9yZShjaGFyIGMsIFdGSUxFICpwKQogewogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbmV3c2l6ZTsKICAgICBpZiAocC0+c3RyID09IE5VTEwpCkBAIC05MCw3ICsxMDAsNyBAQAogICAgICAgICBwLT5wdHIgPSBQeUJ5dGVzX0FTX1NUUklORygoUHlCeXRlc09iamVjdCAqKXAtPnN0cikgKyBzaXplOwogICAgICAgICBwLT5lbmQgPQogICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKilwLT5zdHIpICsgbmV3c2l6ZTsKLSAgICAgICAgKnAtPnB0cisrID0gUHlfU0FGRV9ET1dOQ0FTVChjLCBpbnQsIGNoYXIpOworICAgICAgICAqcC0+cHRyKysgPSBjOwogICAgIH0KIH0KIApAQCAtMTQ2LDYgKzE1NiwxMyBAQAogICAgICAgICB3X3N0cmluZyhzLCBuLCBwKTsKIH0KIAorc3RhdGljIHZvaWQKK3dfc2hvcnRfcHN0cmluZyhjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IG4sIFdGSUxFICpwKQoreworICAgIHdfYnl0ZShQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpLCBwKTsKKyAgICB3X3N0cmluZyhzLCBuLCBwKTsKK30KKwogLyogV2UgYXNzdW1lIHRoYXQgUHl0aG9uIGludHMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGluIGJhc2Ugc29tZSBwb3dlciBvZgogICAgMioqMTU7IGZvciB0aGUgc2FrZSBvZiBwb3J0YWJpbGl0eSB3ZSdsbCBhbHdheXMgcmVhZCBhbmQgd3JpdGUgdGhlbSBpbiBiYXNlCiAgICBleGFjdGx5IDIqKjE1LiAqLwpAQCAtMTU4LDEzICsxNzUsMTcgQEAKICNlbmRpZgogI2RlZmluZSBQeUxvbmdfTUFSU0hBTF9SQVRJTyAoUHlMb25nX1NISUZUIC8gUHlMb25nX01BUlNIQUxfU0hJRlQpCiAKKyNkZWZpbmUgV19UWVBFKHQsIHApIGRvIHsgXAorICAgIHdfYnl0ZSgodCkgfCBmbGFnLCAocCkpOyBcCit9IHdoaWxlKDApCisKIHN0YXRpYyB2b2lkCi13X1B5TG9uZyhjb25zdCBQeUxvbmdPYmplY3QgKm9iLCBXRklMRSAqcCkKK3dfUHlMb25nKGNvbnN0IFB5TG9uZ09iamVjdCAqb2IsIGNoYXIgZmxhZywgV0ZJTEUgKnApCiB7CiAgICAgUHlfc3NpemVfdCBpLCBqLCBuLCBsOwogICAgIGRpZ2l0IGQ7CiAKLSAgICB3X2J5dGUoVFlQRV9MT05HLCBwKTsKKyAgICBXX1RZUEUoVFlQRV9MT05HLCBwKTsKICAgICBpZiAoUHlfU0laRShvYikgPT0gMCkgewogICAgICAgICB3X2xvbmcoKGxvbmcpMCwgcCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIwMSwxMCArMjIyLDY0IEBACiAgICAgfSB3aGlsZSAoZCAhPSAwKTsKIH0KIAorc3RhdGljIGludAord19yZWYoUHlPYmplY3QgKnYsIGNoYXIgKmZsYWcsIFdGSUxFICpwKQoreworICAgIFB5T2JqZWN0ICppZDsKKyAgICBQeU9iamVjdCAqaWR4OworCisgICAgaWYgKHAtPnZlcnNpb24gPCAzIHx8IHAtPnJlZnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7IC8qIG5vdCB3cml0aW5nIG9iamVjdCByZWZlcmVuY2VzICovCisKKyAgICAvKiBpZiBpdCBoYXMgb25seSBvbmUgcmVmZXJlbmNlLCBpdCBkZWZpbml0ZWx5IGlzbid0IHNoYXJlZCAqLworICAgIGlmIChQeV9SRUZDTlQodikgPT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZCA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCopdik7CisgICAgaWYgKGlkID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyOworICAgIGlkeCA9IFB5RGljdF9HZXRJdGVtKHAtPnJlZnMsIGlkKTsKKyAgICBpZiAoaWR4ICE9IE5VTEwpIHsKKyAgICAgICAgLyogd3JpdGUgdGhlIHJlZmVyZW5jZSBpbmRleCB0byB0aGUgc3RyZWFtICovCisgICAgICAgIGxvbmcgdyA9IFB5TG9uZ19Bc0xvbmcoaWR4KTsKKyAgICAgICAgUHlfREVDUkVGKGlkKTsKKyAgICAgICAgaWYgKHcgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICAgICAgLyogd2UgZG9uJ3Qgc3RvcmUgImxvbmciIGluZGljZXMgaW4gdGhlIGRpY3QgKi8KKyAgICAgICAgYXNzZXJ0KDAgPD0gdyAmJiB3IDw9IDB4N2ZmZmZmZmYpOworICAgICAgICB3X2J5dGUoVFlQRV9SRUYsIHApOworICAgICAgICB3X2xvbmcodywgcCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBvazsKKyAgICAgICAgUHlfc3NpemVfdCBzID0gUHlEaWN0X1NpemUocC0+cmVmcyk7CisgICAgICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgbG9uZyBpbmRpY2VzICovCisgICAgICAgIGlmIChzID49IDB4N2ZmZmZmZmYpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidG9vIG1hbnkgb2JqZWN0cyIpOworICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICAgICAgaWR4ID0gUHlMb25nX0Zyb21Tc2l6ZV90KHMpOworICAgICAgICBvayA9IGlkeCAmJiBQeURpY3RfU2V0SXRlbShwLT5yZWZzLCBpZCwgaWR4KSA9PSAwOworICAgICAgICBQeV9ERUNSRUYoaWQpOworICAgICAgICBQeV9YREVDUkVGKGlkeCk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgKmZsYWcgfD0gRkxBR19SRUY7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK2VycjoKKyAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAord19jb21wbGV4X29iamVjdChQeU9iamVjdCAqdiwgY2hhciBmbGFnLCBXRklMRSAqcCk7CisKIHN0YXRpYyB2b2lkCiB3X29iamVjdChQeU9iamVjdCAqdiwgV0ZJTEUgKnApCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIGNoYXIgZmxhZyA9ICdcMCc7CiAKICAgICBwLT5kZXB0aCsrOwogCkBAIC0yMjksMjQgKzMwNCwzNSBAQAogICAgIGVsc2UgaWYgKHYgPT0gUHlfVHJ1ZSkgewogICAgICAgICB3X2J5dGUoVFlQRV9UUlVFLCBwKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikpIHsKKyAgICBlbHNlIGlmICghd19yZWYodiwgJmZsYWcsIHApKQorICAgICAgICB3X2NvbXBsZXhfb2JqZWN0KHYsIGZsYWcsIHApOworCisgICAgcC0+ZGVwdGgtLTsKK30KKworc3RhdGljIHZvaWQKK3dfY29tcGxleF9vYmplY3QoUHlPYmplY3QgKnYsIGNoYXIgZmxhZywgV0ZJTEUgKnApCit7CisgICAgUHlfc3NpemVfdCBpLCBuOworCisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpKSB7CiAgICAgICAgIGxvbmcgeCA9IFB5TG9uZ19Bc0xvbmcodik7CiAgICAgICAgIGlmICgoeCA9PSAtMSkgICYmIFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5TG9uZ09iamVjdCAqb2IgPSAoUHlMb25nT2JqZWN0ICopdjsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICB3X1B5TG9uZyhvYiwgcCk7CisgICAgICAgICAgICB3X1B5TG9uZyhvYiwgZmxhZywgcCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAjaWYgU0laRU9GX0xPTkcgPiA0CiAgICAgICAgICAgICBsb25nIHkgPSBQeV9BUklUSE1FVElDX1JJR0hUX1NISUZUKGxvbmcsIHgsIDMxKTsKICAgICAgICAgICAgIGlmICh5ICYmIHkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAvKiBUb28gbGFyZ2UgZm9yIFRZUEVfSU5UICovCi0gICAgICAgICAgICAgICAgd19QeUxvbmcoKFB5TG9uZ09iamVjdCopdiwgcCk7CisgICAgICAgICAgICAgICAgd19QeUxvbmcoKFB5TG9uZ09iamVjdCopdiwgZmxhZywgcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3X2J5dGUoVFlQRV9JTlQsIHApOworICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0lOVCwgcCk7CiAgICAgICAgICAgICAgICAgd19sb25nKHgsIHApOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTksNyArMzQ1LDcgQEAKICAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0JJTkFSWV9GTE9BVCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9CSU5BUllfRkxPQVQsIHApOwogICAgICAgICAgICAgd19zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC0yNzAsNyArMzU2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuID0gc3RybGVuKGJ1Zik7Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9GTE9BVCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9GTE9BVCwgcCk7CiAgICAgICAgICAgICB3X2J5dGUoKGludCluLCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKGJ1ZiwgbiwgcCk7CiAgICAgICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CkBAIC0yODQsNyArMzcwLDcgQEAKICAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0JJTkFSWV9DT01QTEVYLCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0JJTkFSWV9DT01QTEVYLCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKChjaGFyKilidWYsIDgsIHApOwogICAgICAgICAgICAgaWYgKF9QeUZsb2F0X1BhY2s4KFB5Q29tcGxleF9JbWFnQXNEb3VibGUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCAxKSA8IDApIHsKQEAgLTI5NSw3ICszODEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2hhciAqYnVmOwotICAgICAgICAgICAgd19ieXRlKFRZUEVfQ09NUExFWCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9DT01QTEVYLCBwKTsKICAgICAgICAgICAgIGJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyhQeUNvbXBsZXhfUmVhbEFzRG91YmxlKHYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnJywgMTcsIDAsIE5VTEwpOwogICAgICAgICAgICAgaWYgKCFidWYpIHsKQEAgLTMxOSwzMSArNDA1LDYxIEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlCeXRlc19DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgIHdfYnl0ZShUWVBFX1NUUklORywgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX1NUUklORywgcCk7CiAgICAgICAgIHdfcHN0cmluZyhQeUJ5dGVzX0FTX1NUUklORyh2KSwgUHlCeXRlc19HRVRfU0laRSh2KSwgcCk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp1dGY4OwotICAgICAgICB1dGY4ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh2LCAidXRmOCIsICJzdXJyb2dhdGVwYXNzIik7Ci0gICAgICAgIGlmICh1dGY4ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHAtPmRlcHRoLS07Ci0gICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocC0+dmVyc2lvbiA+PSA0ICYmIFB5VW5pY29kZV9JU19BU0NJSSh2KSkgeworICAgICAgICAgICAgaW50IGlzX3Nob3J0ID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodikgPCAyNTY7CisgICAgICAgICAgICBpZiAoaXNfc2hvcnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NIRUNLX0lOVEVSTkVEKHYpKQorICAgICAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9TSE9SVF9BU0NJSV9JTlRFUk5FRCwgcCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9TSE9SVF9BU0NJSSwgcCk7CisgICAgICAgICAgICAgICAgd19zaG9ydF9wc3RyaW5nKChjaGFyICopIFB5VW5pY29kZV8xQllURV9EQVRBKHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSwgcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NIRUNLX0lOVEVSTkVEKHYpKQorICAgICAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9BU0NJSV9JTlRFUk5FRCwgcCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9BU0NJSSwgcCk7CisgICAgICAgICAgICAgICAgd19wc3RyaW5nKChjaGFyICopIFB5VW5pY29kZV8xQllURV9EQVRBKHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSwgcCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgd19ieXRlKFRZUEVfVU5JQ09ERSwgcCk7Ci0gICAgICAgIHdfcHN0cmluZyhQeUJ5dGVzX0FTX1NUUklORyh1dGY4KSwgUHlCeXRlc19HRVRfU0laRSh1dGY4KSwgcCk7Ci0gICAgICAgIFB5X0RFQ1JFRih1dGY4KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdXRmODsKKyAgICAgICAgICAgIHV0ZjggPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHYsICJ1dGY4IiwgInN1cnJvZ2F0ZXBhc3MiKTsKKyAgICAgICAgICAgIGlmICh1dGY4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwLT5kZXB0aC0tOworICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHAtPnZlcnNpb24gPj0gMyAmJiAgUHlVbmljb2RlX0NIRUNLX0lOVEVSTkVEKHYpKQorICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0lOVEVSTkVELCBwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9VTklDT0RFLCBwKTsKKyAgICAgICAgICAgIHdfcHN0cmluZyhQeUJ5dGVzX0FTX1NUUklORyh1dGY4KSwgUHlCeXRlc19HRVRfU0laRSh1dGY4KSwgcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodXRmOCk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgIHdfYnl0ZShUWVBFX1RVUExFLCBwKTsKICAgICAgICAgbiA9IFB5VHVwbGVfU2l6ZSh2KTsKLSAgICAgICAgV19TSVpFKG4sIHApOworICAgICAgICBpZiAocC0+dmVyc2lvbiA+PSA0ICYmIG4gPCAyNTYpIHsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX1NNQUxMX1RVUExFLCBwKTsKKyAgICAgICAgICAgIHdfYnl0ZSgodW5zaWduZWQgY2hhciluLCBwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX1RVUExFLCBwKTsKKyAgICAgICAgICAgIFdfU0laRShuLCBwKTsKKyAgICAgICAgfQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB3X29iamVjdChQeVR1cGxlX0dFVF9JVEVNKHYsIGkpLCBwKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICB3X2J5dGUoVFlQRV9MSVNULCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfTElTVCwgcCk7CiAgICAgICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUodik7CiAgICAgICAgIFdfU0laRShuLCBwKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMzUzLDcgKzQ2OSw3IEBACiAgICAgZWxzZSBpZiAoUHlEaWN0X0NoZWNrRXhhY3QodikpIHsKICAgICAgICAgUHlfc3NpemVfdCBwb3M7CiAgICAgICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKLSAgICAgICAgd19ieXRlKFRZUEVfRElDVCwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX0RJQ1QsIHApOwogICAgICAgICAvKiBUaGlzIG9uZSBpcyBOVUxMIG9iamVjdCB0ZXJtaW5hdGVkISAqLwogICAgICAgICBwb3MgPSAwOwogICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQodiwgJnBvcywgJmtleSwgJnZhbHVlKSkgewpAQCAtMzY2LDkgKzQ4Miw5IEBACiAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSwgKml0OwogCiAgICAgICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2sodiwgJlB5U2V0X1R5cGUpKQotICAgICAgICAgICAgd19ieXRlKFRZUEVfU0VULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX1NFVCwgcCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0ZST1pFTlNFVCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9GUk9aRU5TRVQsIHApOwogICAgICAgICBuID0gUHlPYmplY3RfU2l6ZSh2KTsKICAgICAgICAgaWYgKG4gPT0gLTEpIHsKICAgICAgICAgICAgIHAtPmRlcHRoLS07CkBAIC0zOTUsNyArNTExLDcgQEAKICAgICB9CiAgICAgZWxzZSBpZiAoUHlDb2RlX0NoZWNrKHYpKSB7CiAgICAgICAgIFB5Q29kZU9iamVjdCAqY28gPSAoUHlDb2RlT2JqZWN0ICopdjsKLSAgICAgICAgd19ieXRlKFRZUEVfQ09ERSwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX0NPREUsIHApOwogICAgICAgICB3X2xvbmcoY28tPmNvX2FyZ2NvdW50LCBwKTsKICAgICAgICAgd19sb25nKGNvLT5jb19rd29ubHlhcmdjb3VudCwgcCk7CiAgICAgICAgIHdfbG9uZyhjby0+Y29fbmxvY2FscywgcCk7CkBAIC00MjEsMTUgKzUzNywxNCBAQAogICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB3X2J5dGUoVFlQRV9TVFJJTkcsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9TVFJJTkcsIHApOwogICAgICAgICB3X3BzdHJpbmcodmlldy5idWYsIHZpZXcubGVuLCBwKTsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB3X2J5dGUoVFlQRV9VTktOT1dOLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfVU5LTk9XTiwgcCk7CiAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgfQotICAgIHAtPmRlcHRoLS07CiB9CiAKIC8qIHZlcnNpb24gY3VycmVudGx5IGhhcyBubyBlZmZlY3QgZm9yIHdyaXRpbmcgaW50cy4gKi8KQEAgLTQ0MCw2ICs1NTUsNyBAQAogICAgIHdmLmZwID0gZnA7CiAgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CisgICAgd2YucmVmcyA9IE5VTEw7CiAgICAgd2YudmVyc2lvbiA9IHZlcnNpb247CiAgICAgd19sb25nKHgsICZ3Zik7CiB9CkBAIC00NTEsODEgKzU2NywxMDcgQEAKICAgICB3Zi5mcCA9IGZwOwogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOworICAgIGlmICh2ZXJzaW9uID49IDMpIHsKKyAgICAgICAgaWYgKCh3Zi5yZWZzID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgbXVzaCBjaGVjayBQeUVycl9PY2N1cnJlZCgpICovCisgICAgfSBlbHNlCisgICAgICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdfb2JqZWN0KHgsICZ3Zik7CisgICAgUHlfWERFQ1JFRih3Zi5yZWZzKTsKIH0KIAogdHlwZWRlZiBXRklMRSBSRklMRTsgLyogU2FtZSBzdHJ1Y3Qgd2l0aCBkaWZmZXJlbnQgaW52YXJpYW50cyAqLwogCi0jZGVmaW5lIHJzX2J5dGUocCkgKCgocCktPnB0ciA8IChwKS0+ZW5kKSA/ICh1bnNpZ25lZCBjaGFyKSoocCktPnB0cisrIDogRU9GKQotCi1zdGF0aWMgUHlfc3NpemVfdAotcl9zdHJpbmcoY2hhciAqcywgUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKK3N0YXRpYyBjaGFyICoKK3Jfc3RyaW5nKFB5X3NzaXplX3QgbiwgUkZJTEUgKnApCiB7Ci0gICAgY2hhciAqcHRyOwotICAgIFB5X3NzaXplX3QgcmVhZCwgbGVmdDsKKyAgICBQeV9zc2l6ZV90IHJlYWQgPSAtMTsKKworICAgIGlmIChwLT5wdHIgIT0gTlVMTCkgeworICAgICAgICAvKiBGYXN0IHBhdGggZm9yIGxvYWRzKCkgKi8KKyAgICAgICAgY2hhciAqcmVzID0gcC0+cHRyOworICAgICAgICBQeV9zc2l6ZV90IGxlZnQgPSBwLT5lbmQgLSBwLT5wdHI7CisgICAgICAgIGlmIChsZWZ0IDwgbikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJzaGFsIGRhdGEgdG9vIHNob3J0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwLT5wdHIgKz0gbjsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgaWYgKHAtPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIHAtPmJ1ZiA9IFB5TWVtX01BTExPQyhuKTsKKyAgICAgICAgaWYgKHAtPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcC0+YnVmX3NpemUgPSBuOworICAgIH0KKyAgICBlbHNlIGlmIChwLT5idWZfc2l6ZSA8IG4pIHsKKyAgICAgICAgcC0+YnVmID0gUHlNZW1fUkVBTExPQyhwLT5idWYsIG4pOworICAgICAgICBpZiAocC0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwLT5idWZfc2l6ZSA9IG47CisgICAgfQogCiAgICAgaWYgKCFwLT5yZWFkYWJsZSkgewotICAgICAgICBpZiAocC0+ZnAgIT0gTlVMTCkKLSAgICAgICAgICAgIC8qIFRoZSByZXN1bHQgZml0cyBpbnRvIGludCBiZWNhdXNlIGl0IG11c3QgYmUgPD1uLiAqLwotICAgICAgICAgICAgcmVhZCA9IGZyZWFkKHMsIDEsIG4sIHAtPmZwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsZWZ0ID0gcC0+ZW5kIC0gcC0+cHRyOwotICAgICAgICAgICAgcmVhZCA9IChsZWZ0IDwgbikgPyBsZWZ0IDogbjsKLSAgICAgICAgICAgIG1lbWNweShzLCBwLT5wdHIsIHJlYWQpOwotICAgICAgICAgICAgcC0+cHRyICs9IHJlYWQ7Ci0gICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHAtPmZwICE9IE5VTEwpOworICAgICAgICByZWFkID0gZnJlYWQocC0+YnVmLCAxLCBuLCBwLT5mcCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKKyAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZGludG8pOworICAgICAgICBQeU9iamVjdCAqcmVzLCAqbXZpZXc7CisgICAgICAgIFB5X2J1ZmZlciBidWY7CiAKLSAgICAgICAgUHlPYmplY3QgKmRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHAtPnJlYWRhYmxlLCAmUHlJZF9yZWFkLCAibiIsIG4pOwotICAgICAgICByZWFkID0gMDsKLSAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImYucmVhZCgpIHJldHVybmVkIG5vdCBieXRlcyBidXQgJS4xMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZWFkID0gUHlCeXRlc19HRVRfU0laRShkYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAocmVhZCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWQgPiBuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgcmV0dXJuZWQgdG9vIG11Y2ggZGF0YTogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV6ZCBieXRlcyByZXF1ZXN0ZWQsICV6ZCByZXR1cm5lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLCByZWFkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHMsIHB0ciwgcmVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgIGlmIChQeUJ1ZmZlcl9GaWxsSW5mbygmYnVmLCBOVUxMLCBwLT5idWYsIG4sIDAsIFB5QlVGX0NPTlRJRykgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbXZpZXcgPSBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcigmYnVmKTsKKyAgICAgICAgaWYgKG12aWV3ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHAtPnJlYWRhYmxlLCAmUHlJZF9yZWFkaW50bywgIk4iLCBtdmlldyk7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgeworICAgICAgICAgICAgcmVhZCA9IFB5TnVtYmVyX0FzU3NpemVfdChyZXMsIFB5RXhjX1ZhbHVlRXJyb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpICYmIChyZWFkIDwgbikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLCAiRU9GIHJlYWQgd2hlcmUgbm90IGV4cGVjdGVkIik7CisgICAgaWYgKHJlYWQgIT0gbikgeworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWFkID4gbikKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSByZXR1cm5lZCB0b28gbXVjaCBkYXRhOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlemQgYnl0ZXMgcmVxdWVzdGVkLCAlemQgcmV0dXJuZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLCByZWFkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBub3QgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIHJlYWQ7CisgICAgcmV0dXJuIHAtPmJ1ZjsKIH0KIAotCiBzdGF0aWMgaW50CiByX2J5dGUoUkZJTEUgKnApCiB7CiAgICAgaW50IGMgPSBFT0Y7Ci0gICAgdW5zaWduZWQgY2hhciBjaDsKLSAgICBQeV9zc2l6ZV90IG47CiAKLSAgICBpZiAoIXAtPnJlYWRhYmxlKQotICAgICAgICBjID0gcC0+ZnAgPyBnZXRjKHAtPmZwKSA6IHJzX2J5dGUocCk7CisgICAgaWYgKHAtPnB0ciAhPSBOVUxMKSB7CisgICAgICAgIGlmIChwLT5wdHIgPCBwLT5lbmQpCisgICAgICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpICpwLT5wdHIrKzsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorICAgIGlmICghcC0+cmVhZGFibGUpIHsKKyAgICAgICAgYXNzZXJ0KHAtPmZwKTsKKyAgICAgICAgYyA9IGdldGMocC0+ZnApOworICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbiA9IHJfc3RyaW5nKChjaGFyICopICZjaCwgMSwgcCk7Ci0gICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgIGMgPSBjaDsKKyAgICAgICAgY2hhciAqcHRyID0gcl9zdHJpbmcoMSwgcCk7CisgICAgICAgIGlmIChwdHIgIT0gTlVMTCkKKyAgICAgICAgICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgcHRyOwogICAgIH0KICAgICByZXR1cm4gYzsKIH0KQEAgLTUzMyw2OSArNjc1LDM3IEBACiBzdGF0aWMgaW50CiByX3Nob3J0KFJGSUxFICpwKQogewotICAgIHJlZ2lzdGVyIHNob3J0IHg7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbMl07CisgICAgc2hvcnQgeCA9IC0xOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAotICAgIHJfc3RyaW5nKChjaGFyICopIGJ1ZmZlciwgMiwgcCk7Ci0gICAgeCA9IGJ1ZmZlclswXTsKLSAgICB4IHw9IGJ1ZmZlclsxXSA8PCA4OwotICAgIC8qIFNpZ24tZXh0ZW5zaW9uLCBpbiBjYXNlIHNob3J0IGdyZWF0ZXIgdGhhbiAxNiBiaXRzICovCi0gICAgeCB8PSAtKHggJiAweDgwMDApOworICAgIGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDIsIHApOworICAgIGlmIChidWZmZXIgIT0gTlVMTCkgeworICAgICAgICB4ID0gYnVmZmVyWzBdOworICAgICAgICB4IHw9IGJ1ZmZlclsxXSA8PCA4OworICAgICAgICAvKiBTaWduLWV4dGVuc2lvbiwgaW4gY2FzZSBzaG9ydCBncmVhdGVyIHRoYW4gMTYgYml0cyAqLworICAgICAgICB4IHw9IC0oeCAmIDB4ODAwMCk7CisgICAgfQogICAgIHJldHVybiB4OwogfQogCiBzdGF0aWMgbG9uZwogcl9sb25nKFJGSUxFICpwKQogewotICAgIHJlZ2lzdGVyIGxvbmcgeDsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKKyAgICBsb25nIHggPSAtMTsKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAKLSAgICByX3N0cmluZygoY2hhciAqKSBidWZmZXIsIDQsIHApOwotICAgIHggPSBidWZmZXJbMF07Ci0gICAgeCB8PSAobG9uZylidWZmZXJbMV0gPDwgODsKLSAgICB4IHw9IChsb25nKWJ1ZmZlclsyXSA8PCAxNjsKLSAgICB4IHw9IChsb25nKWJ1ZmZlclszXSA8PCAyNDsKKyAgICBidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZyg0LCBwKTsKKyAgICBpZiAoYnVmZmVyICE9IE5VTEwpIHsKKyAgICAgICAgeCA9IGJ1ZmZlclswXTsKKyAgICAgICAgeCB8PSAobG9uZylidWZmZXJbMV0gPDwgODsKKyAgICAgICAgeCB8PSAobG9uZylidWZmZXJbMl0gPDwgMTY7CisgICAgICAgIHggfD0gKGxvbmcpYnVmZmVyWzNdIDw8IDI0OwogI2lmIFNJWkVPRl9MT05HID4gNAotICAgIC8qIFNpZ24gZXh0ZW5zaW9uIGZvciA2NC1iaXQgbWFjaGluZXMgKi8KLSAgICB4IHw9IC0oeCAmIDB4ODAwMDAwMDBMKTsKLSNlbmRpZgotICAgIHJldHVybiB4OwotfQotCi0vKiByX2xvbmc2NCBkZWFscyB3aXRoIHRoZSBUWVBFX0lOVDY0IGNvZGUuICBPbiBhIG1hY2hpbmUgd2l0aAotICAgc2l6ZW9mKGxvbmcpID4gNCwgaXQgcmV0dXJucyBhIFB5dGhvbiBpbnQgb2JqZWN0LCBlbHNlIGEgUHl0aG9uIGxvbmcKLSAgIG9iamVjdC4gIE5vdGUgdGhhdCB3X2xvbmc2NCB3cml0ZXMgb3V0IFRZUEVfSU5UIGlmIDMyIGJpdHMgaXMgZW5vdWdoLAotICAgc28gdGhlcmUncyBubyBpbmVmZmljaWVuY3kgaGVyZSBpbiByZXR1cm5pbmcgYSBQeUxvbmcgb24gMzItYml0IGJveGVzCi0gICBmb3IgZXZlcnl0aGluZyB3cml0dGVuIHZpYSBUWVBFX0lOVDY0IChpLmUuLCBpZiBhbiBpbnQgaXMgd3JpdHRlbiB2aWEKLSAgIFRZUEVfSU5UNjQsIGl0ICpuZWVkcyogbW9yZSB0aGFuIDMyIGJpdHMpLgotKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1yX2xvbmc2NChSRklMRSAqcCkKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLSAgICBsb25nIGxvNCA9IHJfbG9uZyhwKTsKLSAgICBsb25nIGhpNCA9IHJfbG9uZyhwKTsKLQotICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgewotI2lmIFNJWkVPRl9MT05HID4gNAotICAgICAgICBsb25nIHggPSAoaGk0IDw8IDMyKSB8IChsbzQgJiAweEZGRkZGRkZGTCk7Ci0gICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZyh4KTsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOwotICAgICAgICBpbnQgb25lID0gMTsKLSAgICAgICAgaW50IGlzX2xpdHRsZV9lbmRpYW4gPSAoaW50KSooY2hhciopJm9uZTsKLSAgICAgICAgaWYgKGlzX2xpdHRsZV9lbmRpYW4pIHsKLSAgICAgICAgICAgIG1lbWNweShidWYsICZsbzQsIDQpOwotICAgICAgICAgICAgbWVtY3B5KGJ1Zis0LCAmaGk0LCA0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1lbWNweShidWYsICZoaTQsIDQpOwotICAgICAgICAgICAgbWVtY3B5KGJ1Zis0LCAmbG80LCA0KTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmLCA4LCBpc19saXR0bGVfZW5kaWFuLCAxKTsKKyAgICAgICAgLyogU2lnbiBleHRlbnNpb24gZm9yIDY0LWJpdCBtYWNoaW5lcyAqLworICAgICAgICB4IHw9IC0oeCAmIDB4ODAwMDAwMDBMKTsKICNlbmRpZgogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB4OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjIyLDI1ICs3MzIsMzEgQEAKICAgICBvYiA9IF9QeUxvbmdfTmV3KHNpemUpOwogICAgIGlmIChvYiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFB5X1NJWkUob2IpID0gbiA+IDAgPyBzaXplIDogLXNpemU7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZS0xOyBpKyspIHsKICAgICAgICAgZCA9IDA7CiAgICAgICAgIGZvciAoaj0wOyBqIDwgUHlMb25nX01BUlNIQUxfUkFUSU87IGorKykgewogICAgICAgICAgICAgbWQgPSByX3Nob3J0KHApOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobWQgPCAwIHx8IG1kID4gUHlMb25nX01BUlNIQUxfQkFTRSkKICAgICAgICAgICAgICAgICBnb3RvIGJhZF9kaWdpdDsKICAgICAgICAgICAgIGQgKz0gKGRpZ2l0KW1kIDw8IGoqUHlMb25nX01BUlNIQUxfU0hJRlQ7CiAgICAgICAgIH0KICAgICAgICAgb2ItPm9iX2RpZ2l0W2ldID0gZDsKICAgICB9CisKICAgICBkID0gMDsKICAgICBmb3IgKGo9MDsgaiA8IHNob3J0c19pbl90b3BfZGlnaXQ7IGorKykgewogICAgICAgICBtZCA9IHJfc2hvcnQocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2IpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgaWYgKG1kIDwgMCB8fCBtZCA+IFB5TG9uZ19NQVJTSEFMX0JBU0UpCiAgICAgICAgICAgICBnb3RvIGJhZF9kaWdpdDsKICAgICAgICAgLyogdG9wbW9zdCBtYXJzaGFsIGRpZ2l0IHNob3VsZCBiZSBub256ZXJvICovCkBAIC02NjcsNiArNzgzLDU5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIGFsbG9jYXRlIHRoZSByZWZsaXN0IGluZGV4IGZvciBhIG5ldyBvYmplY3QuIFJldHVybiAtMSBvbiBmYWlsdXJlICovCitzdGF0aWMgUHlfc3NpemVfdAorcl9yZWZfcmVzZXJ2ZShpbnQgZmxhZywgUkZJTEUgKnApCit7CisgICAgaWYgKGZsYWcpIHsgLyogY3VycmVudGx5IG9ubHkgRkxBR19SRUYgaXMgZGVmaW5lZCAqLworICAgICAgICBQeV9zc2l6ZV90IGlkeCA9IFB5TGlzdF9HRVRfU0laRShwLT5yZWZzKTsKKyAgICAgICAgaWYgKGlkeCA+PSAweDdmZmZmZmZlKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGluZGV4IGxpc3QgdG9vIGxhcmdlKSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHAtPnJlZnMsIFB5X05vbmUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGlkeDsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qIGluc2VydCB0aGUgbmV3IG9iamVjdCAnbycgdG8gdGhlIHJlZmxpc3QgYXQgcHJldmlvdXNseQorICogYWxsb2NhdGVkIGluZGV4ICdpZHgnLgorICogJ28nIGNhbiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgaXMgZG9uZS4KKyAqIGlmICdvJyB3YXMgbm9uLU5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsICdvJyBpcyByZXR1cm5lZC4KKyAqIGlmICdvJyB3YXMgbm9uLU5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gZmFpbHMsICdvJyBpcyByZWxlYXNlZCBhbmQKKyAqIE5VTEwgcmV0dXJuZWQuIFRoaXMgc2ltcGxpZmllcyBlcnJvciBjaGVja2luZyBhdCB0aGUgY2FsbCBzaXRlIHNpbmNlCisgKiBhIHNpbmdsZSB0ZXN0IGZvciBOVUxMIGZvciB0aGUgZnVuY3Rpb24gcmVzdWx0IGlzIGVub3VnaC4KKyAqLworc3RhdGljIFB5T2JqZWN0ICoKK3JfcmVmX2luc2VydChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpZHgsIGludCBmbGFnLCBSRklMRSAqcCkKK3sKKyAgICBpZiAobyAhPSBOVUxMICYmIGZsYWcpIHsgLyogY3VycmVudGx5IG9ubHkgRkxBR19SRUYgaXMgZGVmaW5lZCAqLworICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlMaXN0X0dFVF9JVEVNKHAtPnJlZnMsIGlkeCk7CisgICAgICAgIFB5X0lOQ1JFRihvKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHAtPnJlZnMsIGlkeCwgbyk7CisgICAgICAgIFB5X0RFQ1JFRih0bXApOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KKworLyogY29tYmluYXRpb24gb2YgYm90aCBhYm92ZSwgdXNlZCB3aGVuIGFuIG9iamVjdCBjYW4gYmUKKyAqIGNyZWF0ZWQgd2hlbmV2ZXIgaXQgaXMgc2VlbiBpbiB0aGUgZmlsZSwgYXMgb3Bwb3NlZCB0bworICogYWZ0ZXIgaGF2aW5nIGxvYWRlZCBpdHMgc3ViLW9iamVjdHMuCisgKi8KK3N0YXRpYyBQeU9iamVjdCAqCityX3JlZihQeU9iamVjdCAqbywgaW50IGZsYWcsIFJGSUxFICpwKQoreworICAgIGFzc2VydChmbGFnICYgRkxBR19SRUYpOworICAgIGlmIChvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHAtPnJlZnMsIG8pIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobyk7IC8qIHJlbGVhc2UgdGhlIG5ldyBvYmplY3QgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBvOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcl9vYmplY3QoUkZJTEUgKnApCkBAIC02NzQsOSArODQzLDE3IEBACiAgICAgLyogTlVMTCBpcyBhIHZhbGlkIHJldHVybiB2YWx1ZSwgaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbnMgdGhhdAogICAgICAgIGFuIGV4Y2VwdGlvbiBpcyBzZXQuICovCiAgICAgUHlPYmplY3QgKnYsICp2MjsKKyAgICBQeV9zc2l6ZV90IGlkeCA9IDA7CiAgICAgbG9uZyBpLCBuOwotICAgIGludCB0eXBlID0gcl9ieXRlKHApOwotICAgIFB5T2JqZWN0ICpyZXR2YWw7CisgICAgaW50IHR5cGUsIGNvZGUgPSByX2J5dGUocCk7CisgICAgaW50IGZsYWcsIGlzX2ludGVybmVkID0gMDsKKyAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKKworICAgIGlmIChjb2RlID09IEVPRikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHAtPmRlcHRoKys7CiAKQEAgLTY4NiwxNiArODYzLDE3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGZsYWcgPSBjb2RlICYgRkxBR19SRUY7CisgICAgdHlwZSA9IGNvZGUgJiB+RkxBR19SRUY7CisKKyNkZWZpbmUgUl9SRUYoTykgZG97XAorICAgIGlmIChmbGFnKSBcCisgICAgICAgIE8gPSByX3JlZihPLCBmbGFnLCBwKTtcCit9IHdoaWxlICgwKQorCiAgICAgc3dpdGNoICh0eXBlKSB7CiAKLSAgICBjYXNlIEVPRjoKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOwotICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICBicmVhazsKLQogICAgIGNhc2UgVFlQRV9OVUxMOgotICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFlQRV9OT05FOgpAQCAtNzI2LDY3ICs5MDQsNjYgQEAKICAgICBjYXNlIFRZUEVfSU5UOgogICAgICAgICBuID0gcl9sb25nKHApOwogICAgICAgICByZXR2YWwgPSBQeUVycl9PY2N1cnJlZCgpID8gTlVMTCA6IFB5TG9uZ19Gcm9tTG9uZyhuKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICAgIHJldHZhbCA9IHJfbG9uZzY0KHApOworICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFlQRV9MT05HOgogICAgICAgICByZXR2YWwgPSByX1B5TG9uZyhwKTsKKyAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRZUEVfRkxPQVQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdLCAqcHRyOwogICAgICAgICAgICAgZG91YmxlIGR4OwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIG4gPSByX2J5dGUocCk7CiAgICAgICAgICAgICBpZiAobiA9PSBFT0YpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyX3N0cmluZyhidWYsIG4sIHApICE9IG4pCisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHB0ciwgbik7CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgZHggPSBQeU9TX3N0cmluZ190b19kb3VibGUoYnVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChkeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR2YWwgPSBQeUZsb2F0X0Zyb21Eb3VibGUoZHgpOworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICBjYXNlIFRZUEVfQklOQVJZX0ZMT0FUOgogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKICAgICAgICAgICAgIGRvdWJsZSB4OwotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKChjaGFyKilidWYsIDgsIHApICE9IDgpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoOCwgcCk7CisgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICB4ID0gX1B5RmxvYXRfVW5wYWNrOChidWYsIDEpOwotICAgICAgICAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHZhbCA9IFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX0NPTVBMRVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdLCAqcHRyOwogICAgICAgICAgICAgUHlfY29tcGxleCBjOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIG4gPSByX2J5dGUocCk7CiAgICAgICAgICAgICBpZiAobiA9PSBFT0YpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyX3N0cmluZyhidWYsIG4sIHApICE9IG4pCisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHB0ciwgbik7CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgYy5yZWFsID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoYy5yZWFsID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTc5NywxMTIgKzk3NCwxNTEgQEAKICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKGJ1ZiwgbiwgcCkgIT0gbikKKyAgICAgICAgICAgIHB0ciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKHB0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHRyLCBuKTsKICAgICAgICAgICAgIGJ1ZltuXSA9ICdcMCc7CiAgICAgICAgICAgICBjLmltYWcgPSBQeU9TX3N0cmluZ190b19kb3VibGUoYnVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChjLmltYWcgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dmFsID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChjKTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX0JJTkFSWV9DT01QTEVYOgogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKICAgICAgICAgICAgIFB5X2NvbXBsZXggYzsKLSAgICAgICAgICAgIGlmIChyX3N0cmluZygoY2hhciopYnVmLCA4LCBwKSAhPSA4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDgsIHApOworICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYy5yZWFsID0gX1B5RmxvYXRfVW5wYWNrOChidWYsIDEpOwotICAgICAgICAgICAgaWYgKGMucmVhbCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgaWYgKGMucmVhbCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCkgIT0gOCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBidWYgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZyg4LCBwKTsKKyAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGMuaW1hZyA9IF9QeUZsb2F0X1VucGFjazgoYnVmLCAxKTsKLSAgICAgICAgICAgIGlmIChjLmltYWcgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChjLmltYWcgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dmFsID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChjKTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX1NUUklORzoKLSAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKnB0cjsKKyAgICAgICAgICAgIG4gPSByX2xvbmcocCk7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoc3RyaW5nIHNpemUgb3V0IG9mIHJhbmdlKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBuKTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShQeUJ5dGVzX0FTX1NUUklORyh2KSwgcHRyLCBuKTsKKyAgICAgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHN0cmluZyBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIG4pOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJfc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHYpLCBuLCBwKSAhPSBuKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gdjsKLSAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFRZUEVfQVNDSUlfSU5URVJORUQ6CisgICAgICAgIGlzX2ludGVybmVkID0gMTsKKyAgICBjYXNlIFRZUEVfQVNDSUk6CisgICAgICAgIG4gPSByX2xvbmcocCk7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmljb2RlIHNpemUgb3V0IG9mIHJhbmdlKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZ290byBfcmVhZF9hc2NpaTsKKworICAgIGNhc2UgVFlQRV9TSE9SVF9BU0NJSV9JTlRFUk5FRDoKKyAgICAgICAgaXNfaW50ZXJuZWQgPSAxOworICAgIGNhc2UgVFlQRV9TSE9SVF9BU0NJSToKKyAgICAgICAgbiA9IHJfYnl0ZShwKTsKKyAgICAgICAgaWYgKG4gPT0gRU9GKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBfcmVhZF9hc2NpaToKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21LaW5kQW5kRGF0YShQeVVuaWNvZGVfMUJZVEVfS0lORCwgcHRyLCBuKTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXNfaW50ZXJuZWQpCisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnYpOworICAgICAgICAgICAgcmV0dmFsID0gdjsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBUWVBFX0lOVEVSTkVEOgorICAgICAgICBpc19pbnRlcm5lZCA9IDE7CiAgICAgY2FzZSBUWVBFX1VOSUNPREU6CiAgICAgICAgIHsKICAgICAgICAgY2hhciAqYnVmZmVyOwogCiAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmljb2RlIHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGJ1ZmZlciA9IFB5TWVtX05FVyhjaGFyLCBuKTsKLSAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChuICE9IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGJ1ZmZlciwgbiwgInN1cnJvZ2F0ZXBhc3MiKTsKICAgICAgICAgfQotICAgICAgICBpZiAocl9zdHJpbmcoYnVmZmVyLCBuLCBwKSAhPSBuKSB7Ci0gICAgICAgICAgICBQeU1lbV9ERUwoYnVmZmVyKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2ID0gUHlVbmljb2RlX05ldygwLCAwKTsKICAgICAgICAgfQotICAgICAgICB2ID0gUHlVbmljb2RlX0RlY29kZVVURjgoYnVmZmVyLCBuLCAic3Vycm9nYXRlcGFzcyIpOwotICAgICAgICBQeU1lbV9ERUwoYnVmZmVyKTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoaXNfaW50ZXJuZWQpCisgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmdik7CiAgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICBjYXNlIFRZUEVfU01BTExfVFVQTEU6CisgICAgICAgIG4gPSAodW5zaWduZWQgY2hhcikgcl9ieXRlKHApOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBnb3RvIF9yZWFkX3R1cGxlOwogICAgIGNhc2UgVFlQRV9UVVBMRToKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHR1cGxlIHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgX3JlYWRfdHVwbGU6CiAgICAgICAgIHYgPSBQeVR1cGxlX05ldyhuKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUl9SRUYodik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHYyID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAoIHYyID09IE5VTEwgKSB7CkBAIC05MjAsMjAgKzExMzYsMTYgQEAKIAogICAgIGNhc2UgVFlQRV9MSVNUOgogICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAobGlzdCBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB2ID0gUHlMaXN0X05ldyhuKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUl9SRUYodik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB2MiA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewpAQCAtOTUxLDIwICsxMTYzLDI2IEBACiAKICAgICBjYXNlIFRZUEVfRElDVDoKICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUl9SRUYodik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsOwogICAgICAgICAgICAga2V5ID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB2YWwgPSByX29iamVjdChwKTsKLSAgICAgICAgICAgIGlmICh2YWwgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCBrZXksIHZhbCk7CisgICAgICAgICAgICBpZiAodmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbSh2LCBrZXksIHZhbCkgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodmFsKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWwpOwogICAgICAgICB9CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC05NzYsMjAgKzExOTQsMjYgQEAKICAgICBjYXNlIFRZUEVfU0VUOgogICAgIGNhc2UgVFlQRV9GUk9aRU5TRVQ6CiAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChzZXQgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgdiA9ICh0eXBlID09IFRZUEVfU0VUKSA/IFB5U2V0X05ldyhOVUxMKSA6IFB5RnJvemVuU2V0X05ldyhOVUxMKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBUWVBFX1NFVCkgeworICAgICAgICAgICAgUl9SRUYodik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBtdXN0IHVzZSBkZWxheWVkIHJlZ2lzdHJhdGlvbiBvZiBmcm96ZW5zZXRzIGJlY2F1c2UgdGhleSBtdXN0CisgICAgICAgICAgICAgKiBiZSBpbml0IHdpdGggYSByZWZjb3VudCBvZiAxCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlkeCA9IHJfcmVmX3Jlc2VydmUoZmxhZywgcCk7CisgICAgICAgICAgICBpZiAoaWR4IDwgMCkKKyAgICAgICAgICAgICAgICBQeV9DTEVBUih2KTsgLyogc2lnbmFsIGVycm9yICovCiAgICAgICAgIH0KKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHYyID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAoIHYyID09IE5VTEwgKSB7CkBAIC0xMDA4LDYgKzEyMzIsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKHYyKTsKICAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBUWVBFX1NFVCkKKyAgICAgICAgICAgIHYgPSByX3JlZl9pbnNlcnQodiwgaWR4LCBmbGFnLCBwKTsKICAgICAgICAgcmV0dmFsID0gdjsKICAgICAgICAgYnJlYWs7CiAKQEAgLTEwMjksNiArMTI1NSwxMCBAQAogICAgICAgICAgICAgaW50IGZpcnN0bGluZW5vOwogICAgICAgICAgICAgUHlPYmplY3QgKmxub3RhYiA9IE5VTEw7CiAKKyAgICAgICAgICAgIGlkeCA9IHJfcmVmX3Jlc2VydmUoZmxhZywgcCk7CisgICAgICAgICAgICBpZiAoaWR4IDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgdiA9IE5VTEw7CiAKICAgICAgICAgICAgIC8qIFhYWCBpZ25vcmUgbG9uZy0+aW50IG92ZXJmbG93cyBmb3Igbm93ICovCkBAIC0xMDg0LDYgKzEzMTQsOCBAQAogICAgICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGNvZGVfZXJyb3I7CiAgICAgICAgICAgICBmaXJzdGxpbmVubyA9IChpbnQpcl9sb25nKHApOworICAgICAgICAgICAgaWYgKGZpcnN0bGluZW5vID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBsbm90YWIgPSByX29iamVjdChwKTsKICAgICAgICAgICAgIGlmIChsbm90YWIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGNvZGVfZXJyb3I7CkBAIC0xMDk0LDYgKzEzMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsIGNvbnN0cywgbmFtZXMsIHZhcm5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWV2YXJzLCBjZWxsdmFycywgZmlsZW5hbWUsIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RsaW5lbm8sIGxub3RhYik7CisgICAgICAgICAgICB2ID0gcl9yZWZfaW5zZXJ0KHYsIGlkeCwgZmxhZywgcCk7CiAKICAgICAgICAgICBjb2RlX2Vycm9yOgogICAgICAgICAgICAgUHlfWERFQ1JFRihjb2RlKTsKQEAgLTExMDksMTEgKzEzNDIsMjcgQEAKICAgICAgICAgcmV0dmFsID0gdjsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFRZUEVfUkVGOgorICAgICAgICBuID0gcl9sb25nKHApOworICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBQeUxpc3RfR0VUX1NJWkUocC0+cmVmcykpIHsKKyAgICAgICAgICAgIGlmIChuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGludmFsaWQgcmVmZXJlbmNlKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdiA9IFB5TGlzdF9HRVRfSVRFTShwLT5yZWZzLCBuKTsKKyAgICAgICAgaWYgKHYgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChpbnZhbGlkIHJlZmVyZW5jZSkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRih2KTsKKyAgICAgICAgcmV0dmFsID0gdjsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvKiBCb2d1cyBkYXRhIGdvdCB3cml0dGVuLCB3aGljaCBpc24ndCBpZGVhbC4KICAgICAgICAgICAgVGhpcyB3aWxsIGxldCB5b3Uga2VlcCB3b3JraW5nIGFuZCByZWNvdmVyLiAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHVua25vd24gdHlwZSBjb2RlKSIpOwotICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICBicmVhazsKIAogICAgIH0KQEAgLTExMzksMjMgKzEzODgsMzMgQEAKIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShGSUxFICpmcCkKIHsKICAgICBSRklMRSByZjsKKyAgICBpbnQgcmVzOwogICAgIGFzc2VydChmcCk7CiAgICAgcmYucmVhZGFibGUgPSBOVUxMOwogICAgIHJmLmZwID0gZnA7CiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7CiAgICAgcmYuZW5kID0gcmYucHRyID0gTlVMTDsKLSAgICByZXR1cm4gcl9zaG9ydCgmcmYpOworICAgIHJmLmJ1ZiA9IE5VTEw7CisgICAgcmVzID0gcl9zaG9ydCgmcmYpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgIHJldHVybiByZXM7CiB9CiAKIGxvbmcKIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKEZJTEUgKmZwKQogewogICAgIFJGSUxFIHJmOworICAgIGxvbmcgcmVzOwogICAgIHJmLmZwID0gZnA7CiAgICAgcmYucmVhZGFibGUgPSBOVUxMOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwogICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7Ci0gICAgcmV0dXJuIHJfbG9uZygmcmYpOworICAgIHJmLmJ1ZiA9IE5VTEw7CisgICAgcmVzID0gcl9sb25nKCZyZik7CisgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CisgICAgcmV0dXJuIHJlczsKIH0KIAogI2lmZGVmIEhBVkVfRlNUQVQKQEAgLTEyMTQsMjIgKzE0NzMsMzYgQEAKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKICAgICByZi5kZXB0aCA9IDA7CiAgICAgcmYucHRyID0gcmYuZW5kID0gTlVMTDsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZi5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJfb2JqZWN0KCZyZik7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5T2JqZWN0ICoKLVB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjaGFyICpzdHIsIFB5X3NzaXplX3QgbGVuKQorUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBsZW4pCiB7CiAgICAgUkZJTEUgcmY7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICByZi5mcCA9IE5VTEw7CiAgICAgcmYucmVhZGFibGUgPSBOVUxMOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwotICAgIHJmLnB0ciA9IHN0cjsKLSAgICByZi5lbmQgPSBzdHIgKyBsZW47CisgICAgcmYucHRyID0gKGNoYXIgKilzdHI7CisgICAgcmYuZW5kID0gKGNoYXIgKilzdHIgKyBsZW47CisgICAgcmYuYnVmID0gTlVMTDsKICAgICByZi5kZXB0aCA9IDA7CisgICAgcmYucmVmcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJmLnJlZnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzdWx0ID0gcl9vYmplY3QoJnJmKTsKKyAgICBQeV9ERUNSRUYocmYucmVmcyk7CisgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTI0OCw3ICsxNTIxLDEzIEBACiAgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CiAgICAgd2YudmVyc2lvbiA9IHZlcnNpb247CisgICAgaWYgKHZlcnNpb24gPj0gMykgeworICAgICAgICBpZiAoKHdmLnJlZnMgPSBQeURpY3RfTmV3KCkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UKKyAgICAgICAgd2YucmVmcyA9IE5VTEw7CiAgICAgd19vYmplY3QoeCwgJndmKTsKKyAgICBQeV9YREVDUkVGKHdmLnJlZnMpOwogICAgIGlmICh3Zi5zdHIgIT0gTlVMTCkgewogICAgICAgICBjaGFyICpiYXNlID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKil3Zi5zdHIpOwogICAgICAgICBpZiAod2YucHRyIC0gYmFzZSA+IFBZX1NTSVpFX1RfTUFYKSB7CkBAIC0xMzIwLDYgKzE1OTksOCBAQAogICAgICAqIE1ha2UgYSBjYWxsIHRvIHRoZSByZWFkIG1ldGhvZCwgYnV0IHJlYWQgemVybyBieXRlcy4KICAgICAgKiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgcGFzc2VkIGluIGF0IGxlYXN0CiAgICAgICogaGFzIGEgcmVhZCBtZXRob2Qgd2hpY2ggcmV0dXJucyBieXRlcy4KKyAgICAgKiBUaGlzIGNhbiBiZSByZW1vdmVkIGlmIHdlIGd1YXJhbnRlZSBnb29kIGVycm9yIGhhbmRsaW5nCisgICAgICogZm9yIHJfc3RyaW5nKCkKICAgICAgKi8KICAgICBkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmLCAmUHlJZF9yZWFkLCAiaSIsIDApOwogICAgIGlmIChkYXRhID09IE5VTEwpCkBAIC0xMzM1LDcgKzE2MTYsMTUgQEAKICAgICAgICAgcmYuZnAgPSBOVUxMOwogICAgICAgICByZi5yZWFkYWJsZSA9IGY7CiAgICAgICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwotICAgICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOworICAgICAgICByZi5wdHIgPSByZi5lbmQgPSBOVUxMOworICAgICAgICByZi5idWYgPSBOVUxMOworICAgICAgICBpZiAoKHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApKSAhPSBOVUxMKSB7CisgICAgICAgICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOworICAgICAgICAgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgICAgICAgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICAgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBOVUxMOwogICAgIH0KICAgICBQeV9ERUNSRUYoZGF0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEzOTIsOCArMTY4MSwxMSBAQAogICAgIHJmLnB0ciA9IHM7CiAgICAgcmYuZW5kID0gcyArIG47CiAgICAgcmYuZGVwdGggPSAwOworICAgIGlmICgocmYucmVmcyA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJlYWRfb2JqZWN0KCZyZik7CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcCk7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE0MzMsNiArMTcyNSw3IEBACiB2ZXJzaW9uIC0tIGluZGljYXRlcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZHVsZSB1c2VzLiBWZXJzaW9uIDAgaXMgdGhlXG5cCiAgICAgaGlzdG9yaWNhbCBmb3JtYXQsIHZlcnNpb24gMSBzaGFyZXMgaW50ZXJuZWQgc3RyaW5ncyBhbmQgdmVyc2lvbiAyXG5cCiAgICAgdXNlcyBhIGJpbmFyeSBmb3JtYXQgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG5cCisgICAgVmVyc2lvbiAzIHNoYXJlcyBjb21tb24gb2JqZWN0IHJlZmVyZW5jZXMgKE5ldyBpbiB2ZXJzaW9uIDMuNCkuXG5cCiBcblwKIEZ1bmN0aW9uczpcblwKIFxuXApkaWZmIC0tZ2l0IGEvUHl0aG9uL215c3RydG91bC5jIGIvUHl0aG9uL215c3RydG91bC5jCmluZGV4IDhhNTRjYmYuLjk4NDI5ZDQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9teXN0cnRvdWwuYworKysgYi9QeXRob24vbXlzdHJ0b3VsLmMKQEAgLTkyLDExICs5MiwxMSBAQAogKiogICAgICAgICAgICAgIGV4Y2VwdGlvbnMgLSB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbS4KICovCiB1bnNpZ25lZCBsb25nCi1QeU9TX3N0cnRvdWwocmVnaXN0ZXIgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKK1B5T1Nfc3RydG91bChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQogewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsgLyogcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiAqLwotICAgIHJlZ2lzdGVyIGludCBjOyAgICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLwotICAgIHJlZ2lzdGVyIGludCBvdmxpbWl0OyAgICAgICAvKiByZXF1aXJlZCBkaWdpdHMgdG8gb3ZlcmZsb3cgKi8KKyAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7IC8qIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gKi8KKyAgICBpbnQgYzsgICAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgb3ZsaW1pdDsgICAgICAgLyogcmVxdWlyZWQgZGlnaXRzIHRvIG92ZXJmbG93ICovCiAKICAgICAvKiBza2lwIGxlYWRpbmcgd2hpdGUgc3BhY2UgKi8KICAgICB3aGlsZSAoKnN0ciAmJiBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpzdHIpKSkKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDB4ICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAxNikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMG8gKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBiICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICAgICAgICB3aGlsZSAoUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqc3RyKSkpCiAgICAgICAgICAgICAgICAgICAgICsrc3RyOwogICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMHggKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwbyAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gOCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMGIgKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgIC8qIGNhdGNoIHNpbGx5IGJhc2VzICovCiAgICAgaWYgKGJhc2UgPCAyIHx8IGJhc2UgPiAzNikgewogICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgaWYgKG92bGltaXQgPiAwKSAvKiBubyBvdmVyZmxvdyBjaGVjayByZXF1aXJlZCAqLwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIGM7CiAgICAgICAgIGVsc2UgeyAvKiByZXF1aXJlcyBvdmVyZmxvdyBjaGVjayAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0ZW1wX3Jlc3VsdDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGVtcF9yZXN1bHQ7CiAKICAgICAgICAgICAgIGlmIChvdmxpbWl0IDwgMCkgLyogZ3VhcmFudGVlZCBvdmVyZmxvdyAqLwogICAgICAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3dlZDsKQEAgLTIzOSw3ICsyMzksNyBAQAogCiAgICAgLyogc2V0IHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIHNjYW5uZWQgKi8KICAgICBpZiAocHRyKQotICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAKICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgLyogc3Bvb2wgdGhyb3VnaCByZW1haW5pbmcgZGlnaXQgY2hhcmFjdGVycyAqLwogICAgICAgICB3aGlsZSAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKCpzdHIpXSA8IGJhc2UpCiAgICAgICAgICAgICArK3N0cjsKLSAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgIH0KICAgICBlcnJubyA9IEVSQU5HRTsKICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpLTE7CkBAIC0yNjAsNyArMjYwLDcgQEAKICNkZWZpbmUgUFlfQUJTX0xPTkdfTUlOICAgICAgICAgKDAtKHVuc2lnbmVkIGxvbmcpTE9OR19NSU4pCiAKIGxvbmcKLVB5T1Nfc3RydG9sKGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCitQeU9TX3N0cnRvbChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQogewogICAgIGxvbmcgcmVzdWx0OwogICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKZGlmZiAtLWdpdCBhL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oIGIvUHl0aG9uL29wY29kZV90YXJnZXRzLmgKaW5kZXggMmQ2YmNkYS4uZjkwYTE3YSAxMDA2NDQKLS0tIGEvUHl0aG9uL29wY29kZV90YXJnZXRzLmgKKysrIGIvUHl0aG9uL29wY29kZV90YXJnZXRzLmgKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAmJlRBUkdFVF9CSU5BUllfT1IsCiAgICAgJiZUQVJHRVRfSU5QTEFDRV9QT1dFUiwKICAgICAmJlRBUkdFVF9HRVRfSVRFUiwKLSAgICAmJlRBUkdFVF9TVE9SRV9MT0NBTFMsCisgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZUQVJHRVRfUFJJTlRfRVhQUiwKICAgICAmJlRBUkdFVF9MT0FEX0JVSUxEX0NMQVNTLAogICAgICYmVEFSR0VUX1lJRUxEX0ZST00sCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAmJlRBUkdFVF9MSVNUX0FQUEVORCwKICAgICAmJlRBUkdFVF9TRVRfQURELAogICAgICYmVEFSR0VUX01BUF9BREQsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCisgICAgJiZUQVJHRVRfTE9BRF9DTEFTU0RFUkVGLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLApkaWZmIC0tZ2l0IGEvUHl0aG9uL3BlZXBob2xlLmMgYi9QeXRob24vcGVlcGhvbGUuYwppbmRleCA1ZDUzNjc3Li40MTg1NDYyIDEwMDY0NAotLS0gYS9QeXRob24vcGVlcGhvbGUuYworKysgYi9QeXRob24vcGVlcGhvbGUuYwpAQCAtMjc1LDYgKzI3NSw3IEBACiAgICAgbGVuX2NvbnN0cyA9IFB5TGlzdF9HRVRfU0laRShjb25zdHMpOwogICAgIGlmIChQeUxpc3RfQXBwZW5kKGNvbnN0cywgbmV3Y29uc3QpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXdjb25zdCk7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBQeV9ERUNSRUYobmV3Y29uc3QpOwpAQCAtMzI3LDM3ICszMjgsNiBAQAogICAgIHJldHVybiBibG9ja3M7CiB9CiAKLS8qIEhlbHBlciB0byByZXBsYWNlIExPQURfTkFNRSBOb25lL1RydWUvRmFsc2Ugd2l0aCBMT0FEX0NPTlNUCi0gICBSZXR1cm5zOiAwIGlmIG5vIGNoYW5nZSwgMSBpZiBjaGFuZ2UsIC0xIGlmIGVycm9yICovCi1zdGF0aWMgaW50Ci1sb2FkX2dsb2JhbCh1bnNpZ25lZCBjaGFyICpjb2Rlc3RyLCBQeV9zc2l6ZV90IGksIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjb25zdHMpCi17Ci0gICAgUHlfc3NpemVfdCBqOwotICAgIFB5T2JqZWN0ICpvYmo7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAiTm9uZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X05vbmU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJUcnVlIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfVHJ1ZTsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIkZhbHNlIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfRmFsc2U7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKGogPSAwOyBqIDwgUHlMaXN0X0dFVF9TSVpFKGNvbnN0cyk7IGorKykgewotICAgICAgICBpZiAoUHlMaXN0X0dFVF9JVEVNKGNvbnN0cywgaikgPT0gb2JqKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChqID09IFB5TGlzdF9HRVRfU0laRShjb25zdHMpKSB7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNvbnN0cywgb2JqKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGFzc2VydChQeUxpc3RfR0VUX0lURU0oY29uc3RzLCBqKSA9PSBvYmopOwotICAgIGNvZGVzdHJbaV0gPSBMT0FEX0NPTlNUOwotICAgIFNFVEFSRyhjb2Rlc3RyLCBpLCBqKTsKLSAgICByZXR1cm4gMTsKLX0KLQogLyogUGVyZm9ybSBiYXNpYyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIHRvIGNvbXBvbmVudHMgb2YgYSBjb2RlIG9iamVjdC4KICAgIFRoZSBjb25zdHMgb2JqZWN0IHNob3VsZCBzdGlsbCBiZSBpbiBsaXN0IGZvcm0gdG8gYWxsb3cgbmV3IGNvbnN0YW50cwogICAgdG8gYmUgYXBwZW5kZWQuCkBAIC0zOTIsNyArMzYyLDYgQEAKICAgICBQeV9zc2l6ZV90IGNvbnN0X3N0YWNrX3NpemUgPSAwOwogICAgIGludCBpbl9jb25zdHMgPSAwOyAgLyogd2hldGhlciB3ZSBhcmUgaW4gYSBMT0FEX0NPTlNUIHNlcXVlbmNlICovCiAgICAgdW5zaWduZWQgaW50ICpibG9ja3MgPSBOVUxMOwotICAgIGNoYXIgKm5hbWU7CiAKICAgICAvKiBCYWlsIG91dCBpZiBhbiBleGNlcHRpb24gaXMgc2V0ICovCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC00MTMsOCArMzgyLDEwIEBACiAKICAgICAvKiBNYWtlIGEgbW9kaWZpYWJsZSBjb3B5IG9mIHRoZSBjb2RlIHN0cmluZyAqLwogICAgIGNvZGVzdHIgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYyhjb2RlbGVuKTsKLSAgICBpZiAoY29kZXN0ciA9PSBOVUxMKQorICAgIGlmIChjb2Rlc3RyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0RXJyb3I7CisgICAgfQogICAgIGNvZGVzdHIgPSAodW5zaWduZWQgY2hhciAqKW1lbWNweShjb2Rlc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjb2RlKSwgY29kZWxlbik7CiAKQEAgLTQyOCw4ICszOTksMTAgQEAKIAogICAgIC8qIE1hcHBpbmcgdG8gbmV3IGp1bXAgdGFyZ2V0cyBhZnRlciBOT1BzIGFyZSByZW1vdmVkICovCiAgICAgYWRkcm1hcCA9IChpbnQgKilQeU1lbV9NYWxsb2MoY29kZWxlbiAqIHNpemVvZihpbnQpKTsKLSAgICBpZiAoYWRkcm1hcCA9PSBOVUxMKQorICAgIGlmIChhZGRybWFwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0RXJyb3I7CisgICAgfQogCiAgICAgYmxvY2tzID0gbWFya2Jsb2Nrcyhjb2Rlc3RyLCBjb2RlbGVuKTsKICAgICBpZiAoYmxvY2tzID09IE5VTEwpCkBAIC00NzUsMjAgKzQ0OCw2IEBACiAgICAgICAgICAgICAgICAgY29kZXN0cltpKzNdID0gTk9QOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgLyogUmVwbGFjZSBMT0FEX0dMT0JBTC9MT0FEX05BTUUgTm9uZS9UcnVlL0ZhbHNlCi0gICAgICAgICAgICAgICAgICAgd2l0aCBMT0FEX0NPTlNUIE5vbmUvVHJ1ZS9GYWxzZSAqLwotICAgICAgICAgICAgY2FzZSBMT0FEX05BTUU6Ci0gICAgICAgICAgICBjYXNlIExPQURfR0xPQkFMOgotICAgICAgICAgICAgICAgIGogPSBHRVRBUkcoY29kZXN0ciwgaSk7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoUHlUdXBsZV9HRVRfSVRFTShuYW1lcywgaikpOwotICAgICAgICAgICAgICAgIGggPSBsb2FkX2dsb2JhbChjb2Rlc3RyLCBpLCBuYW1lLCBjb25zdHMpOwotICAgICAgICAgICAgICAgIGlmIChoIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBleGl0RXJyb3I7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaCA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBDT05TVF9TVEFDS19QVVNIX09QKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIExPQURfQ09OU1QgdHJ1ZWNvbnN0CiAgICAgICAgICAgICAgICAgICAgUE9QX0pVTVBfSUZfRkFMU0UgeHguIFRoaXMgaW1wcm92ZXMKICAgICAgICAgICAgICAgICAgICAid2hpbGUgMSIgcGVyZm9ybWFuY2UuICovCmRpZmYgLS1naXQgYS9QeXRob24vcHlhcmVuYS5jIGIvUHl0aG9uL3B5YXJlbmEuYwppbmRleCAwMmEzMWQ4Li4xMDM2MDNmIDEwMDY0NAotLS0gYS9QeXRob24vcHlhcmVuYS5jCisrKyBiL1B5dGhvbi9weWFyZW5hLmMKQEAgLTc3LDcgKzc3LDcgQEAKIHsKICAgICAvKiBBbGxvY2F0ZSBoZWFkZXIgYW5kIGJsb2NrIGFzIG9uZSB1bml0LgogICAgICAgIGFiX21lbSBwb2ludHMganVzdCBwYXN0IGhlYWRlci4gKi8KLSAgICBibG9jayAqYiA9IChibG9jayAqKW1hbGxvYyhzaXplb2YoYmxvY2spICsgc2l6ZSk7CisgICAgYmxvY2sgKmIgPSAoYmxvY2sgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKGJsb2NrKSArIHNpemUpOwogICAgIGlmICghYikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYi0+YWJfc2l6ZSA9IHNpemU7CkBAIC05Miw3ICs5Miw3IEBACiBibG9ja19mcmVlKGJsb2NrICpiKSB7CiAgICAgd2hpbGUgKGIpIHsKICAgICAgICAgYmxvY2sgKm5leHQgPSBiLT5hYl9uZXh0OwotICAgICAgICBmcmVlKGIpOworICAgICAgICBQeU1lbV9GcmVlKGIpOwogICAgICAgICBiID0gbmV4dDsKICAgICB9CiB9CkBAIC0xMjcsMjAgKzEyNywyMCBAQAogUHlBcmVuYSAqCiBQeUFyZW5hX05ldygpCiB7Ci0gICAgUHlBcmVuYSogYXJlbmEgPSAoUHlBcmVuYSAqKW1hbGxvYyhzaXplb2YoUHlBcmVuYSkpOworICAgIFB5QXJlbmEqIGFyZW5hID0gKFB5QXJlbmEgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5QXJlbmEpKTsKICAgICBpZiAoIWFyZW5hKQogICAgICAgICByZXR1cm4gKFB5QXJlbmEqKVB5RXJyX05vTWVtb3J5KCk7CiAKICAgICBhcmVuYS0+YV9oZWFkID0gYmxvY2tfbmV3KERFRkFVTFRfQkxPQ0tfU0laRSk7CiAgICAgYXJlbmEtPmFfY3VyID0gYXJlbmEtPmFfaGVhZDsKICAgICBpZiAoIWFyZW5hLT5hX2hlYWQpIHsKLSAgICAgICAgZnJlZSgodm9pZCAqKWFyZW5hKTsKKyAgICAgICAgUHlNZW1fRnJlZSgodm9pZCAqKWFyZW5hKTsKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICBhcmVuYS0+YV9vYmplY3RzID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoIWFyZW5hLT5hX29iamVjdHMpIHsKICAgICAgICAgYmxvY2tfZnJlZShhcmVuYS0+YV9oZWFkKTsKLSAgICAgICAgZnJlZSgodm9pZCAqKWFyZW5hKTsKKyAgICAgICAgUHlNZW1fRnJlZSgodm9pZCAqKWFyZW5hKTsKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICNpZiBkZWZpbmVkKFB5X0RFQlVHKQpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgKi8KIAogICAgIFB5X0RFQ1JFRihhcmVuYS0+YV9vYmplY3RzKTsKLSAgICBmcmVlKGFyZW5hKTsKKyAgICBQeU1lbV9GcmVlKGFyZW5hKTsKIH0KIAogdm9pZCAqCmRpZmYgLS1naXQgYS9QeXRob24vcHloYXNoLmMgYi9QeXRob24vcHloYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhZWViNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9weWhhc2guYwpAQCAtMCwwICsxLDQyNyBAQAorLyogU2V0IG9mIGhhc2ggdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGVscCBtYWludGFpbmluZyB0aGUgaW52YXJpYW50IHRoYXQKKyAgICBpZiBhPT1iIHRoZW4gaGFzaChhKT09aGFzaChiKQorCisgICBBbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIChfUHlfSGFzaCooKSkgcmV0dXJuICItMSIgdG8gc2lnbmlmeSBhbiBlcnJvci4KKyovCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKyNpZmRlZiBfX0FQUExFX18KKyMgIGluY2x1ZGUgPGxpYmtlcm4vT1NCeXRlT3JkZXIuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MRTY0VE9IKSAmJiBkZWZpbmVkKEhBVkVfRU5ESUFOX0gpCisjICBpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MRTY0VE9IKSAmJiBkZWZpbmVkKEhBVkVfU1lTX0VORElBTl9IKQorIyAgaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX1B5X0hhc2hTZWNyZXRfdCBfUHlfSGFzaFNlY3JldDsKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRVhURVJOQUwKK2V4dGVybiBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYzsKKyNlbHNlCitzdGF0aWMgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmM7CisjZW5kaWYKKworLyogQ291bnQgX1B5X0hhc2hCeXRlcygpIGNhbGxzICovCisjaWZkZWYgUHlfSEFTSF9TVEFUUworI2RlZmluZSBQeV9IQVNIX1NUQVRTX01BWCAzMgorc3RhdGljIFB5X3NzaXplX3QgaGFzaHN0YXRzW1B5X0hBU0hfU1RBVFNfTUFYICsgMV0gPSB7MH07CisjZW5kaWYKKworLyogRm9yIG51bWVyaWMgdHlwZXMsIHRoZSBoYXNoIG9mIGEgbnVtYmVyIHggaXMgYmFzZWQgb24gdGhlIHJlZHVjdGlvbgorICAgb2YgeCBtb2R1bG8gdGhlIHByaW1lIFAgPSAyKipfUHlIQVNIX0JJVFMgLSAxLiAgSXQncyBkZXNpZ25lZCBzbyB0aGF0CisgICBoYXNoKHgpID09IGhhc2goeSkgd2hlbmV2ZXIgeCBhbmQgeSBhcmUgbnVtZXJpY2FsbHkgZXF1YWwsIGV2ZW4gaWYKKyAgIHggYW5kIHkgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuCisKKyAgIEEgcXVpY2sgc3VtbWFyeSBvZiB0aGUgaGFzaGluZyBzdHJhdGVneToKKworICAgKDEpIEZpcnN0IGRlZmluZSB0aGUgJ3JlZHVjdGlvbiBvZiB4IG1vZHVsbyBQJyBmb3IgYW55IHJhdGlvbmFsCisgICBudW1iZXIgeDsgdGhpcyBpcyBhIHN0YW5kYXJkIGV4dGVuc2lvbiBvZiB0aGUgdXN1YWwgbm90aW9uIG9mCisgICByZWR1Y3Rpb24gbW9kdWxvIFAgZm9yIGludGVnZXJzLiAgSWYgeCA9PSBwL3EgKHdyaXR0ZW4gaW4gbG93ZXN0CisgICB0ZXJtcyksIHRoZSByZWR1Y3Rpb24gaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlZHVjdGlvbiBvZiBwIHRpbWVzCisgICB0aGUgaW52ZXJzZSBvZiB0aGUgcmVkdWN0aW9uIG9mIHEsIGFsbCBtb2R1bG8gUDsgaWYgcSBpcyBleGFjdGx5CisgICBkaXZpc2libGUgYnkgUCB0aGVuIGRlZmluZSB0aGUgcmVkdWN0aW9uIHRvIGJlIGluZmluaXR5LiAgU28gd2UndmUKKyAgIGdvdCBhIHdlbGwtZGVmaW5lZCBtYXAKKworICAgICAgcmVkdWNlIDogeyByYXRpb25hbCBudW1iZXJzIH0gLT4geyAwLCAxLCAyLCAuLi4sIFAtMSwgaW5maW5pdHkgfS4KKworICAgKDIpIE5vdyBmb3IgYSByYXRpb25hbCBudW1iZXIgeCwgZGVmaW5lIGhhc2goeCkgYnk6CisKKyAgICAgIHJlZHVjZSh4KSAgIGlmIHggPj0gMAorICAgICAgLXJlZHVjZSgteCkgaWYgeCA8IDAKKworICAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uIGlzIGluZmluaXR5ICh0aGlzIGlzIGltcG9zc2libGUgZm9yCisgICBpbnRlZ2VycywgZmxvYXRzIGFuZCBEZWNpbWFscykgdGhlbiB1c2UgdGhlIHByZWRlZmluZWQgaGFzaCB2YWx1ZQorICAgX1B5SEFTSF9JTkYgZm9yIHggPj0gMCwgb3IgLV9QeUhBU0hfSU5GIGZvciB4IDwgMCwgaW5zdGVhZC4KKyAgIF9QeUhBU0hfSU5GLCAtX1B5SEFTSF9JTkYgYW5kIF9QeUhBU0hfTkFOIGFyZSBhbHNvIHVzZWQgZm9yIHRoZQorICAgaGFzaGVzIG9mIGZsb2F0IGFuZCBEZWNpbWFsIGluZmluaXRpZXMgYW5kIG5hbnMuCisKKyAgIEEgc2VsbGluZyBwb2ludCBmb3IgdGhlIGFib3ZlIHN0cmF0ZWd5IGlzIHRoYXQgaXQgbWFrZXMgaXQgcG9zc2libGUKKyAgIHRvIGNvbXB1dGUgaGFzaGVzIG9mIGRlY2ltYWwgYW5kIGJpbmFyeSBmbG9hdGluZy1wb2ludCBudW1iZXJzCisgICBlZmZpY2llbnRseSwgZXZlbiBpZiB0aGUgZXhwb25lbnQgb2YgdGhlIGJpbmFyeSBvciBkZWNpbWFsIG51bWJlcgorICAgaXMgbGFyZ2UuICBUaGUga2V5IHBvaW50IGlzIHRoYXQKKworICAgICAgcmVkdWNlKHggKiB5KSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoeSkgKG1vZHVsbyBfUHlIQVNIX01PRFVMVVMpCisKKyAgIHByb3ZpZGVkIHRoYXQge3JlZHVjZSh4KSwgcmVkdWNlKHkpfSAhPSB7MCwgaW5maW5pdHl9LiAgVGhlIHJlZHVjdGlvbiBvZiBhCisgICBiaW5hcnkgb3IgZGVjaW1hbCBmbG9hdCBpcyBuZXZlciBpbmZpbml0eSwgc2luY2UgdGhlIGRlbm9taW5hdG9yIGlzIGEgcG93ZXIKKyAgIG9mIDIgKGZvciBiaW5hcnkpIG9yIGEgZGl2aXNvciBvZiBhIHBvd2VyIG9mIDEwIChmb3IgZGVjaW1hbCkuICBTbyB3ZSBoYXZlLAorICAgZm9yIG5vbm5lZ2F0aXZlIHgsCisKKyAgICAgIHJlZHVjZSh4ICogMioqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDIqKmUpICUgX1B5SEFTSF9NT0RVTFVTCisKKyAgICAgIHJlZHVjZSh4ICogMTAqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgxMCoqZSkgJSBfUHlIQVNIX01PRFVMVVMKKworICAgYW5kIHJlZHVjZSgxMCoqZSkgY2FuIGJlIGNvbXB1dGVkIGVmZmljaWVudGx5IGJ5IHRoZSB1c3VhbCBtb2R1bGFyCisgICBleHBvbmVudGlhdGlvbiBhbGdvcml0aG0uICBGb3IgcmVkdWNlKDIqKmUpIGl0J3MgZXZlbiBiZXR0ZXI6IHNpbmNlCisgICBQIGlzIG9mIHRoZSBmb3JtIDIqKm4tMSwgcmVkdWNlKDIqKmUpIGlzIDIqKihlIG1vZCBuKSwgYW5kIG11bHRpcGxpY2F0aW9uCisgICBieSAyKiooZSBtb2QgbikgbW9kdWxvIDIqKm4tMSBqdXN0IGFtb3VudHMgdG8gYSByb3RhdGlvbiBvZiBiaXRzLgorCisgICAqLworCitQeV9oYXNoX3QKK19QeV9IYXNoRG91YmxlKGRvdWJsZSB2KQoreworICAgIGludCBlLCBzaWduOworICAgIGRvdWJsZSBtOworICAgIFB5X3VoYXNoX3QgeCwgeTsKKworICAgIGlmICghUHlfSVNfRklOSVRFKHYpKSB7CisgICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh2KSkKKyAgICAgICAgICAgIHJldHVybiB2ID4gMCA/IF9QeUhBU0hfSU5GIDogLV9QeUhBU0hfSU5GOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9OQU47CisgICAgfQorCisgICAgbSA9IGZyZXhwKHYsICZlKTsKKworICAgIHNpZ24gPSAxOworICAgIGlmIChtIDwgMCkgeworICAgICAgICBzaWduID0gLTE7CisgICAgICAgIG0gPSAtbTsKKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIDI4IGJpdHMgYXQgYSB0aW1lOyAgdGhpcyBzaG91bGQgd29yayB3ZWxsIGJvdGggZm9yIGJpbmFyeQorICAgICAgIGFuZCBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludC4gKi8KKyAgICB4ID0gMDsKKyAgICB3aGlsZSAobSkgeworICAgICAgICB4ID0gKCh4IDw8IDI4KSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSAyOCk7CisgICAgICAgIG0gKj0gMjY4NDM1NDU2LjA7ICAvKiAyKioyOCAqLworICAgICAgICBlIC09IDI4OworICAgICAgICB5ID0gKFB5X3VoYXNoX3QpbTsgIC8qIHB1bGwgb3V0IGludGVnZXIgcGFydCAqLworICAgICAgICBtIC09IHk7CisgICAgICAgIHggKz0geTsKKyAgICAgICAgaWYgKHggPj0gX1B5SEFTSF9NT0RVTFVTKQorICAgICAgICAgICAgeCAtPSBfUHlIQVNIX01PRFVMVVM7CisgICAgfQorCisgICAgLyogYWRqdXN0IGZvciB0aGUgZXhwb25lbnQ7ICBmaXJzdCByZWR1Y2UgaXQgbW9kdWxvIF9QeUhBU0hfQklUUyAqLworICAgIGUgPSBlID49IDAgPyBlICUgX1B5SEFTSF9CSVRTIDogX1B5SEFTSF9CSVRTLTEtKCgtMS1lKSAlIF9QeUhBU0hfQklUUyk7CisgICAgeCA9ICgoeCA8PCBlKSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSBlKTsKKworICAgIHggPSB4ICogc2lnbjsKKyAgICBpZiAoeCA9PSAoUHlfdWhhc2hfdCktMSkKKyAgICAgICAgeCA9IChQeV91aGFzaF90KS0yOworICAgIHJldHVybiAoUHlfaGFzaF90KXg7Cit9CisKK1B5X2hhc2hfdAorX1B5X0hhc2hQb2ludGVyKHZvaWQgKnApCit7CisgICAgUHlfaGFzaF90IHg7CisgICAgc2l6ZV90IHkgPSAoc2l6ZV90KXA7CisgICAgLyogYm90dG9tIDMgb3IgNCBiaXRzIGFyZSBsaWtlbHkgdG8gYmUgMDsgcm90YXRlIHkgYnkgNCB0byBhdm9pZAorICAgICAgIGV4Y2Vzc2l2ZSBoYXNoIGNvbGxpc2lvbnMgZm9yIGRpY3RzIGFuZCBzZXRzICovCisgICAgeSA9ICh5ID4+IDQpIHwgKHkgPDwgKDggKiBTSVpFT0ZfVk9JRF9QIC0gNCkpOworICAgIHggPSAoUHlfaGFzaF90KXk7CisgICAgaWYgKHggPT0gLTEpCisgICAgICAgIHggPSAtMjsKKyAgICByZXR1cm4geDsKK30KKworUHlfaGFzaF90CitfUHlfSGFzaEJ5dGVzKGNvbnN0IHZvaWQgKnNyYywgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfaGFzaF90IHg7CisgICAgLyoKKyAgICAgIFdlIG1ha2UgdGhlIGhhc2ggb2YgdGhlIGVtcHR5IHN0cmluZyBiZSAwLCByYXRoZXIgdGhhbiB1c2luZworICAgICAgKHByZWZpeCBeIHN1ZmZpeCksIHNpbmNlIHRoaXMgc2xpZ2h0bHkgb2JmdXNjYXRlcyB0aGUgaGFzaCBzZWNyZXQKKyAgICAqLworICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNpZmRlZiBQeV9IQVNIX1NUQVRTCisgICAgaGFzaHN0YXRzWyhsZW4gPD0gUHlfSEFTSF9TVEFUU19NQVgpID8gbGVuIDogMF0rKzsKKyNlbmRpZgorCisjaWYgUHlfSEFTSF9DVVRPRkYgPiAwCisgICAgaWYgKGxlbiA8IFB5X0hBU0hfQ1VUT0ZGKSB7CisgICAgICAgIC8qIE9wdGltaXplIGhhc2hpbmcgb2YgdmVyeSBzbWFsbCBzdHJpbmdzIHdpdGggaW5saW5lIERKQlgzM0EuICovCisgICAgICAgIFB5X3VoYXNoX3QgaGFzaDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNyYzsKKyAgICAgICAgaGFzaCA9IDUzODE7IC8qIERKQlgzM0Egc3RhcnRzIHdpdGggNTM4MSAqLworCisgICAgICAgIHN3aXRjaChsZW4pIHsKKyAgICAgICAgICAgIC8qICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnAgPT0gaGFzaCAqIDMzICsgKnAgKi8KKyAgICAgICAgICAgIGNhc2UgNzogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNjogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNTogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNDogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMzogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMjogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMTogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBoYXNoIF49IGxlbjsKKyAgICAgICAgaGFzaCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZGpieDMzYS5zdWZmaXg7CisgICAgICAgIHggPSAoUHlfaGFzaF90KWhhc2g7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBQeV9IQVNIX0NVVE9GRiAqLworICAgICAgICB4ID0gUHlIYXNoX0Z1bmMuaGFzaChzcmMsIGxlbik7CisKKyAgICBpZiAoeCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0yOworICAgIHJldHVybiB4OworfQorCit2b2lkCitfUHlIYXNoX0Zpbmkodm9pZCkKK3sKKyNpZmRlZiBQeV9IQVNIX1NUQVRTCisgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7CisgICAgY2hhciAqZm10ID0gIiUyaSAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZCAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIjsKKworICAgIGZwcmludGYoc3RkZXJyLCAibGVuICAgY2FsbHMgICAgdG90YWxcbiIpOworICAgIGZvciAoaSA9IDE7IGkgPD0gUHlfSEFTSF9TVEFUU19NQVg7IGkrKykgeworICAgICAgICB0b3RhbCArPSBoYXNoc3RhdHNbaV07CisgICAgICAgIGZwcmludGYoc3RkZXJyLCBmbXQsIGksIGhhc2hzdGF0c1tpXSwgdG90YWwpOworICAgIH0KKyAgICB0b3RhbCArPSBoYXNoc3RhdHNbMF07CisgICAgZnByaW50ZihzdGRlcnIsICI+ICAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZCAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKKyAgICAgICAgICAgIGhhc2hzdGF0c1swXSwgdG90YWwpOworI2VuZGlmCit9CisKK1B5SGFzaF9GdW5jRGVmICoKK1B5SGFzaF9HZXRGdW5jRGVmKHZvaWQpCit7CisgICAgcmV0dXJuICZQeUhhc2hfRnVuYzsKK30KKworLyogT3B0aW1pemVkIG1lbWNweSgpIGZvciBXaW5kb3dzICovCisjaWZkZWYgX01TQ19WRVIKKyMgIGlmIFNJWkVPRl9QWV9VSEFTSF9UID09IDQKKyMgICAgZGVmaW5lIFBZX1VIQVNIX0NQWShkc3QsIHNyYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkc3RbMF0gPSBzcmNbMF07IGRzdFsxXSA9IHNyY1sxXTsgZHN0WzJdID0gc3JjWzJdOyBkc3RbM10gPSBzcmNbM107IFwKKyAgICAgICB9IHdoaWxlKDApCisjICBlbGlmIFNJWkVPRl9QWV9VSEFTSF9UID09IDgKKyMgICAgZGVmaW5lIFBZX1VIQVNIX0NQWShkc3QsIHNyYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkc3RbMF0gPSBzcmNbMF07IGRzdFsxXSA9IHNyY1sxXTsgZHN0WzJdID0gc3JjWzJdOyBkc3RbM10gPSBzcmNbM107IFwKKyAgICAgICBkc3RbNF0gPSBzcmNbNF07IGRzdFs1XSA9IHNyY1s1XTsgZHN0WzZdID0gc3JjWzZdOyBkc3RbN10gPSBzcmNbN107IFwKKyAgICAgICB9IHdoaWxlKDApCisjICBlbHNlCisjICAgIGVycm9yIFNJWkVPRl9QWV9VSEFTSF9UIG11c3QgYmUgNCBvciA4CisjICBlbmRpZiAvKiBTSVpFT0ZfUFlfVUhBU0hfVCAqLworI2Vsc2UgLyogbm90IFdpbmRvd3MgKi8KKyMgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIG1lbWNweShkc3QsIHNyYywgU0laRU9GX1BZX1VIQVNIX1QpCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworCisjaWYgUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9GTlYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2RpZmllZCBGb3dsZXItTm9sbC1WbyAoRk5WKSBoYXNoIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBQeV9oYXNoX3QKK2Zudihjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3QgbGVuKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzcmM7CisgICAgUHlfdWhhc2hfdCB4OworICAgIFB5X3NzaXplX3QgcmVtYWluZGVyLCBibG9ja3M7CisgICAgdW5pb24geworICAgICAgICBQeV91aGFzaF90IHZhbHVlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW1NJWkVPRl9QWV9VSEFTSF9UXTsKKyAgICB9IGJsb2NrOworCisjaWZkZWYgUHlfREVCVUcKKyAgICBhc3NlcnQoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpOworI2VuZGlmCisgICAgcmVtYWluZGVyID0gbGVuICUgU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgaWYgKHJlbWFpbmRlciA9PSAwKSB7CisgICAgICAgIC8qIFByb2Nlc3MgYXQgbGVhc3Qgb25lIGJsb2NrIGJ5dGUgYnkgYnl0ZSB0byByZWR1Y2UgaGFzaCBjb2xsaXNpb25zCisgICAgICAgICAqIGZvciBzdHJpbmdzIHdpdGggY29tbW9uIHByZWZpeGVzLiAqLworICAgICAgICByZW1haW5kZXIgPSBTSVpFT0ZfUFlfVUhBU0hfVDsKKyAgICB9CisgICAgYmxvY2tzID0gKGxlbiAtIHJlbWFpbmRlcikgLyBTSVpFT0ZfUFlfVUhBU0hfVDsKKworICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZm52LnByZWZpeDsKKyAgICB4IF49IChQeV91aGFzaF90KSAqcCA8PCA3OworICAgIHdoaWxlIChibG9ja3MtLSkgeworICAgICAgICBQWV9VSEFTSF9DUFkoYmxvY2suYnl0ZXMsIHApOworICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gYmxvY2sudmFsdWU7CisgICAgICAgIHAgKz0gU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgfQorICAgIC8qIGFkZCByZW1haW5kZXIgKi8KKyAgICBmb3IgKDsgcmVtYWluZGVyID4gMDsgcmVtYWluZGVyLS0pCisgICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKnArKzsKKyAgICB4IF49IChQeV91aGFzaF90KSBsZW47CisgICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZm52LnN1ZmZpeDsKKyAgICBpZiAoeCA9PSAtMSkgeworICAgICAgICB4ID0gLTI7CisgICAgfQorICAgIHJldHVybiB4OworfQorCitzdGF0aWMgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmMgPSB7Zm52LCAiZm52IiwgOCAqIFNJWkVPRl9QWV9IQVNIX1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgKiBTSVpFT0ZfUFlfSEFTSF9UfTsKKworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRk5WICovCisKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfU0lQSEFTSDI0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIDxNSVQgTGljZW5zZT4KKyBDb3B5cmlnaHQgKGMpIDIwMTMgIE1hcmVrIE1hamtvd3NraSA8bWFyZWtAcG9wY291bnQub3JnPgorCisgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIFRIRSBTT0ZUV0FSRS4KKyA8L01JVCBMaWNlbnNlPgorCisgT3JpZ2luYWwgbG9jYXRpb246CisgICAgaHR0cHM6Ly9naXRodWIuY29tL21hamVrL2NzaXBoYXNoLworCisgU29sdXRpb24gaW5zcGlyZWQgYnkgY29kZSBmcm9tOgorICAgIFNhbXVlbCBOZXZlcyAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZSkKKyAgICBkamIgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUyKQorICAgIEplYW4tUGhpbGlwcGUgQXVtYXNzb24gKGh0dHBzOi8vMTMxMDAyLm5ldC9zaXBoYXNoL3NpcGhhc2gyNC5jKQorCisgTW9kaWZpZWQgZm9yIFB5dGhvbiBieSBDaHJpc3RpYW4gSGVpbWVzOgorICAgIC0gQzg5IC8gTVNWQyBjb21wYXRpYmlsaXR5CisgICAgLSBQWV9VSU5UNjRfVCwgUFlfVUlOVDMyX1QgYW5kIFBZX1VJTlQ4X1QKKyAgICAtIF9yb3RsNjQoKSBvbiBXaW5kb3dzCisgICAgLSBsZXRvaDY0KCkgZmFsbGJhY2sKKyovCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBQWV9VSU5UOF9UOworCisvKiBieXRlIHN3YXAgbGl0dGxlIGVuZGlhbiB0byBob3N0IGVuZGlhbgorICogRW5kaWFuIGNvbnZlcnNpb24gbm90IG9ubHkgZW5zdXJlcyB0aGF0IHRoZSBoYXNoIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUKKyAqIHZhbHVlIG9uIGFsbCBwbGF0Zm9ybXMuIEl0IGlzIGFsc28gcmVxdWlyZWQgdG8gZm9yIGEgZ29vZCBkaXNwZXJzaW9uIG9mCisgKiB0aGUgaGFzaCB2YWx1ZXMnIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuCisgKi8KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisjICBkZWZpbmUgX2xlNjR0b2goeCkgKChQWV9VSU5UNjRfVCkoeCkpCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyMgIGRlZmluZSBfbGU2NHRvaCh4KSBPU1N3YXBMaXR0bGVUb0hvc3RJbnQ2NCh4KQorI2VsaWYgZGVmaW5lZChIQVZFX0xFVE9INjQpCisjICBkZWZpbmUgX2xlNjR0b2goeCkgbGU2NHRvaCh4KQorI2Vsc2UKKyMgIGRlZmluZSBfbGU2NHRvaCh4KSAoKChQWV9VSU5UNjRfVCkoeCkgPDwgNTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCA0MCkgJiAweGZmMDAwMDAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgMjQpICYgMHhmZjAwMDAwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCA4KSAgJiAweGZmMDAwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA+PiA4KSAgJiAweGZmMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gMjQpICYgMHhmZjAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA+PiA0MCkgJiAweGZmMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoUFlfVUlOVDY0X1QpKHgpICA+PiA1NikpCisjZW5kaWYKKworCisjaWZkZWYgX01TQ19WRVIKKyMgIGRlZmluZSBST1RBVEUoeCwgYikgIF9yb3RsNjQoeCwgYikKKyNlbHNlCisjICBkZWZpbmUgUk9UQVRFKHgsIGIpIChQWV9VSU5UNjRfVCkoICgoeCkgPDwgKGIpKSB8ICggKHgpID4+ICg2NCAtIChiKSkpICkKKyNlbmRpZgorCisjZGVmaW5lIEhBTEZfUk9VTkQoYSxiLGMsZCxzLHQpICAgICAgICAgXAorICAgIGEgKz0gYjsgYyArPSBkOyAgICAgICAgICAgICBcCisgICAgYiA9IFJPVEFURShiLCBzKSBeIGE7ICAgICAgICAgICBcCisgICAgZCA9IFJPVEFURShkLCB0KSBeIGM7ICAgICAgICAgICBcCisgICAgYSA9IFJPVEFURShhLCAzMik7CisKKyNkZWZpbmUgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKSAgICAgICBcCisgICAgSEFMRl9ST1VORCh2MCx2MSx2Mix2MywxMywxNik7ICAgICAgXAorICAgIEhBTEZfUk9VTkQodjIsdjEsdjAsdjMsMTcsMjEpOyAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYwLHYxLHYyLHYzLDEzLDE2KTsgICAgICBcCisgICAgSEFMRl9ST1VORCh2Mix2MSx2MCx2MywxNywyMSk7CisKKworc3RhdGljIFB5X2hhc2hfdAorc2lwaGFzaDI0KGNvbnN0IHZvaWQgKnNyYywgUHlfc3NpemVfdCBzcmNfc3opIHsKKyAgICBQWV9VSU5UNjRfVCBrMCA9IF9sZTY0dG9oKF9QeV9IYXNoU2VjcmV0LnNpcGhhc2guazApOworICAgIFBZX1VJTlQ2NF9UIGsxID0gX2xlNjR0b2goX1B5X0hhc2hTZWNyZXQuc2lwaGFzaC5rMSk7CisgICAgUFlfVUlOVDY0X1QgYiA9IChQWV9VSU5UNjRfVClzcmNfc3ogPDwgNTY7CisgICAgY29uc3QgUFlfVUlOVDY0X1QgKmluID0gKFBZX1VJTlQ2NF9UKilzcmM7CisKKyAgICBQWV9VSU5UNjRfVCB2MCA9IGswIF4gMHg3MzZmNmQ2NTcwNzM2NTc1VUxMOworICAgIFBZX1VJTlQ2NF9UIHYxID0gazEgXiAweDY0NmY3MjYxNmU2NDZmNmRVTEw7CisgICAgUFlfVUlOVDY0X1QgdjIgPSBrMCBeIDB4NmM3OTY3NjU2ZTY1NzI2MVVMTDsKKyAgICBQWV9VSU5UNjRfVCB2MyA9IGsxIF4gMHg3NDY1NjQ2Mjc5NzQ2NTczVUxMOworCisgICAgUFlfVUlOVDY0X1QgdDsKKyAgICBQWV9VSU5UOF9UICpwdDsKKyAgICBQWV9VSU5UOF9UICptOworCisgICAgd2hpbGUgKHNyY19zeiA+PSA4KSB7CisgICAgICAgIFBZX1VJTlQ2NF9UIG1pID0gX2xlNjR0b2goKmluKTsKKyAgICAgICAgaW4gKz0gMTsKKyAgICAgICAgc3JjX3N6IC09IDg7CisgICAgICAgIHYzIF49IG1pOworICAgICAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworICAgICAgICB2MCBePSBtaTsKKyAgICB9CisKKyAgICB0ID0gMDsKKyAgICBwdCA9IChQWV9VSU5UOF9UICopJnQ7CisgICAgbSA9IChQWV9VSU5UOF9UICopaW47CisgICAgc3dpdGNoIChzcmNfc3opIHsKKyAgICAgICAgY2FzZSA3OiBwdFs2XSA9IG1bNl07CisgICAgICAgIGNhc2UgNjogcHRbNV0gPSBtWzVdOworICAgICAgICBjYXNlIDU6IHB0WzRdID0gbVs0XTsKKyAgICAgICAgY2FzZSA0OiAqKChQWV9VSU5UMzJfVCopJnB0WzBdKSA9ICooKFBZX1VJTlQzMl9UKikmbVswXSk7IGJyZWFrOworICAgICAgICBjYXNlIDM6IHB0WzJdID0gbVsyXTsKKyAgICAgICAgY2FzZSAyOiBwdFsxXSA9IG1bMV07CisgICAgICAgIGNhc2UgMTogcHRbMF0gPSBtWzBdOworICAgIH0KKyAgICBiIHw9IF9sZTY0dG9oKHQpOworCisgICAgdjMgXj0gYjsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworICAgIHYwIF49IGI7CisgICAgdjIgXj0gMHhmZjsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworICAgIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2Myk7CisKKyAgICAvKiBtb2RpZmllZCAqLworICAgIHQgPSAodjAgXiB2MSkgXiAodjIgXiB2Myk7CisgICAgcmV0dXJuIChQeV9oYXNoX3QpdDsKK30KKworc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jID0ge3NpcGhhc2gyNCwgInNpcGhhc2gyNCIsIDY0LCAxMjh9OworCisjZW5kaWYgLyogUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9TSVBIQVNIMjQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0YXRlLmMgYi9QeXRob24vcHlzdGF0ZS5jCmluZGV4IDc3MmFhNTMuLjZiZTcxZGUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXN0YXRlLmMKKysrIGIvUHl0aG9uL3B5c3RhdGUuYwpAQCAtNiwxMSArNiwxMSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENBVVRJT04KIAotQWx3YXlzIHVzZSBtYWxsb2MoKSBhbmQgZnJlZSgpIGRpcmVjdGx5IGluIHRoaXMgZmlsZS4gIEEgbnVtYmVyIG9mIHRoZXNlCi1mdW5jdGlvbnMgYXJlIGFkdmVydGlzZWQgYXMgc2FmZSB0byBjYWxsIHdoZW4gdGhlIEdJTCBpc24ndCBoZWxkLCBhbmQgaW4KLWEgZGVidWcgYnVpbGQgUHl0aG9uIHJlZGlyZWN0cyAoZS5nLikgUHlNZW1fTkVXIChldGMpIHRvIFB5dGhvbidzIGRlYnVnZ2luZwotb2JtYWxsb2MgZnVuY3Rpb25zLiAgVGhvc2UgYXJlbid0IHRocmVhZC1zYWZlICh0aGV5IHJlbHkgb24gdGhlIEdJTCB0byBhdm9pZAotdGhlIGV4cGVuc2Ugb2YgZG9pbmcgdGhlaXIgb3duIGxvY2tpbmcpLgorQWx3YXlzIHVzZSBQeU1lbV9SYXdNYWxsb2MoKSBhbmQgUHlNZW1fUmF3RnJlZSgpIGRpcmVjdGx5IGluIHRoaXMgZmlsZS4gIEEKK251bWJlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFkdmVydGlzZWQgYXMgc2FmZSB0byBjYWxsIHdoZW4gdGhlIEdJTCBpc24ndAoraGVsZCwgYW5kIGluIGEgZGVidWcgYnVpbGQgUHl0aG9uIHJlZGlyZWN0cyAoZS5nLikgUHlNZW1fTkVXIChldGMpIHRvIFB5dGhvbidzCitkZWJ1Z2dpbmcgb2JtYWxsb2MgZnVuY3Rpb25zLiAgVGhvc2UgYXJlbid0IHRocmVhZC1zYWZlICh0aGV5IHJlbHkgb24gdGhlIEdJTAordG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgZG9pbmcgdGhlaXIgb3duIGxvY2tpbmcpLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2lmZGVmIEhBVkVfRExPUEVOCkBAIC02MCw3ICs2MCw3IEBACiBQeUludGVycHJldGVyU3RhdGVfTmV3KHZvaWQpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSAoUHlJbnRlcnByZXRlclN0YXRlICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFB5SW50ZXJwcmV0ZXJTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1fUmF3TWFsbG9jKHNpemVvZihQeUludGVycHJldGVyU3RhdGUpKTsKIAogICAgIGlmIChpbnRlcnAgIT0gTlVMTCkgewogICAgICAgICBIRUFEX0lOSVQoKTsKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeUludGVycHJldGVyU3RhdGVfRGVsZXRlOiByZW1haW5pbmcgdGhyZWFkcyIpOwogICAgICpwID0gaW50ZXJwLT5uZXh0OwogICAgIEhFQURfVU5MT0NLKCk7Ci0gICAgZnJlZShpbnRlcnApOworICAgIFB5TWVtX1Jhd0ZyZWUoaW50ZXJwKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChpbnRlcnBfaGVhZCA9PSBOVUxMICYmIGhlYWRfbXV0ZXggIT0gTlVMTCkgewogICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soaGVhZF9tdXRleCk7CkBAIC0xNjgsNyArMTY4LDcgQEAKIHN0YXRpYyBQeVRocmVhZFN0YXRlICoKIG5ld190aHJlYWRzdGF0ZShQeUludGVycHJldGVyU3RhdGUgKmludGVycCwgaW50IGluaXQpCiB7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUgKiltYWxsb2Moc2l6ZW9mKFB5VGhyZWFkU3RhdGUpKTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2YoUHlUaHJlYWRTdGF0ZSkpOwogCiAgICAgaWYgKF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID09IE5VTEwpCiAgICAgICAgIF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID0gdGhyZWFkc3RhdGVfZ2V0ZnJhbWU7CkBAIC0xODIsNyArMTgyLDYgQEAKICAgICAgICAgdHN0YXRlLT5yZWN1cnNpb25fY3JpdGljYWwgPSAwOwogICAgICAgICB0c3RhdGUtPnRyYWNpbmcgPSAwOwogICAgICAgICB0c3RhdGUtPnVzZV90cmFjaW5nID0gMDsKLSAgICAgICAgdHN0YXRlLT50aWNrX2NvdW50ZXIgPSAwOwogICAgICAgICB0c3RhdGUtPmdpbHN0YXRlX2NvdW50ZXIgPSAwOwogICAgICAgICB0c3RhdGUtPmFzeW5jX2V4YyA9IE5VTEw7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTIwOCwxMiArMjA3LDE3IEBACiAKICAgICAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbmVzdGluZyA9IDA7CiAgICAgICAgIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX2xhdGVyID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUgPSBOVUxMOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gTlVMTDsKIAogICAgICAgICBpZiAoaW5pdCkKICAgICAgICAgICAgIF9QeVRocmVhZFN0YXRlX0luaXQodHN0YXRlKTsKIAogICAgICAgICBIRUFEX0xPQ0soKTsKKyAgICAgICAgdHN0YXRlLT5wcmV2ID0gTlVMTDsKICAgICAgICAgdHN0YXRlLT5uZXh0ID0gaW50ZXJwLT50c3RhdGVfaGVhZDsKKyAgICAgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZTsKICAgICAgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZTsKICAgICAgICAgSEVBRF9VTkxPQ0soKTsKICAgICB9CkBAIC0zMTcsNiArMzIxLDMxIEBACiAgICAgcmV0dXJuIFB5TGlzdF9TZXRJdGVtKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LCBpbmRleCwgUHlfTm9uZSk7CiB9CiAKKy8qIHVzZWQgYnkgaW1wb3J0LmM6UHlJbXBvcnRfQ2xlYW51cCAqLwordm9pZAorX1B5U3RhdGVfQ2xlYXJNb2R1bGVzKHZvaWQpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICpzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKKyAgICBpZiAoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KTsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbSA9IFB5TGlzdF9HRVRfSVRFTShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwgaSk7CisgICAgICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2sobSkpIHsKKyAgICAgICAgICAgICAgICAvKiBjbGVhbnVwIHRoZSBzYXZlZCBjb3B5IG9mIG1vZHVsZSBkaWN0cyAqLworICAgICAgICAgICAgICAgIFB5TW9kdWxlRGVmICptZCA9IFB5TW9kdWxlX0dldERlZihtKTsKKyAgICAgICAgICAgICAgICBpZiAobWQpCisgICAgICAgICAgICAgICAgICAgIFB5X0NMRUFSKG1kLT5tX2Jhc2UubV9jb3B5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBTZXR0aW5nIG1vZHVsZXNfYnlfaW5kZXggdG8gTlVMTCBjb3VsZCBiZSBkYW5nZXJvdXMsIHNvIHdlCisgICAgICAgICAgIGNsZWFyIHRoZSBsaXN0IGluc3RlYWQuICovCisgICAgICAgIGlmIChQeUxpc3RfU2V0U2xpY2Uoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgUHlMaXN0X0dFVF9TSVpFKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCk7CisgICAgfQorfQorCiB2b2lkCiBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIHsKQEAgLTM0OSwzNyArMzc4LDIzIEBACiB0c3RhdGVfZGVsZXRlX2NvbW1vbihQeVRocmVhZFN0YXRlICp0c3RhdGUpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqKnA7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqcHJldl9wID0gTlVMTDsKICAgICBpZiAodHN0YXRlID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBOVUxMIHRzdGF0ZSIpOwogICAgIGludGVycCA9IHRzdGF0ZS0+aW50ZXJwOwogICAgIGlmIChpbnRlcnAgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IE5VTEwgaW50ZXJwIik7CiAgICAgSEVBRF9MT0NLKCk7Ci0gICAgZm9yIChwID0gJmludGVycC0+dHN0YXRlX2hlYWQ7IDsgcCA9ICYoKnApLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqcCA9PSBOVUxMKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IGludmFsaWQgdHN0YXRlIik7Ci0gICAgICAgIGlmICgqcCA9PSB0c3RhdGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLyogU2FuaXR5IGNoZWNrLiAgVGhlc2Ugc3RhdGVzIHNob3VsZCBuZXZlciBoYXBwZW4gYnV0IGlmCi0gICAgICAgICAqIHRoZXkgZG8gd2UgbXVzdCBhYm9ydC4gIE90aGVyd2lzZSB3ZSdsbCBlbmQgdXAgc3Bpbm5pbmcgaW4KLSAgICAgICAgICogaW4gYSB0aWdodCBsb29wIHdpdGggdGhlIGxvY2sgaGVsZC4gIEEgc2ltaWxhciBjaGVjayBpcyBkb25lCi0gICAgICAgICAqIGluIHRocmVhZC5jIGZpbmRfa2V5KCkuICAqLwotICAgICAgICBpZiAoKnAgPT0gcHJldl9wKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IHNtYWxsIGNpcmN1bGFyIGxpc3QoISkiCi0gICAgICAgICAgICAgICAgIiBhbmQgdHN0YXRlIG5vdCBmb3VuZC4iKTsKLSAgICAgICAgcHJldl9wID0gKnA7Ci0gICAgICAgIGlmICgoKnApLT5uZXh0ID09IGludGVycC0+dHN0YXRlX2hlYWQpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKAotICAgICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZTogY2lyY3VsYXIgbGlzdCghKSBhbmQiCi0gICAgICAgICAgICAgICAgIiB0c3RhdGUgbm90IGZvdW5kLiIpOwotICAgIH0KLSAgICAqcCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5wcmV2KQorICAgICAgICB0c3RhdGUtPnByZXYtPm5leHQgPSB0c3RhdGUtPm5leHQ7CisgICAgZWxzZQorICAgICAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZS0+cHJldjsKICAgICBIRUFEX1VOTE9DSygpOwotICAgIGZyZWUodHN0YXRlKTsKKyAgICBpZiAodHN0YXRlLT5vbl9kZWxldGUgIT0gTlVMTCkgeworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSh0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhKTsKKyAgICB9CisgICAgUHlNZW1fUmF3RnJlZSh0c3RhdGUpOwogfQogCiAKQEAgLTQxNCw2ICs0MjksNDMgQEAKICNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLwogCiAKKy8qCisgKiBEZWxldGUgYWxsIHRocmVhZCBzdGF0ZXMgZXhjZXB0IHRoZSBvbmUgcGFzc2VkIGFzIGFyZ3VtZW50LgorICogTm90ZSB0aGF0LCBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdGhyZWFkIHN0YXRlLCBpdCAqbXVzdCogYmUgdGhlIG9uZQorICogcGFzc2VkIGFzIGFyZ3VtZW50LiAgQWxzbywgdGhpcyB3b24ndCB0b3VjaCBhbnkgb3RoZXIgaW50ZXJwcmV0ZXJzCisgKiB0aGFuIHRoZSBjdXJyZW50IG9uZSwgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGljaCB0aHJlYWQgc3RhdGUgc2hvdWxkCisgKiBiZSBrZXB0IGluIHRob3NlIG90aGVyIGludGVycHJldGVyZXMuCisgKi8KK3ZvaWQKK19QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChQeVRocmVhZFN0YXRlICp0c3RhdGUpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSB0c3RhdGUtPmludGVycDsKKyAgICBQeVRocmVhZFN0YXRlICpwLCAqbmV4dCwgKmdhcmJhZ2U7CisgICAgSEVBRF9MT0NLKCk7CisgICAgLyogUmVtb3ZlIGFsbCB0aHJlYWQgc3RhdGVzLCBleGNlcHQgdHN0YXRlLCBmcm9tIHRoZSBsaW5rZWQgbGlzdCBvZgorICAgICAgIHRocmVhZCBzdGF0ZXMuICBUaGlzIHdpbGwgYWxsb3cgY2FsbGluZyBQeVRocmVhZFN0YXRlX0NsZWFyKCkKKyAgICAgICB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suICovCisgICAgZ2FyYmFnZSA9IGludGVycC0+dHN0YXRlX2hlYWQ7CisgICAgaWYgKGdhcmJhZ2UgPT0gdHN0YXRlKQorICAgICAgICBnYXJiYWdlID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPnByZXYpCisgICAgICAgIHRzdGF0ZS0+cHJldi0+bmV4dCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGUtPnByZXY7CisgICAgdHN0YXRlLT5wcmV2ID0gdHN0YXRlLT5uZXh0ID0gTlVMTDsKKyAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlOworICAgIEhFQURfVU5MT0NLKCk7CisgICAgLyogQ2xlYXIgYW5kIGRlYWxsb2NhdGUgYWxsIHN0YWxlIHRocmVhZCBzdGF0ZXMuICBFdmVuIGlmIHRoaXMKKyAgICAgICBleGVjdXRlcyBQeXRob24gY29kZSwgd2Ugc2hvdWxkIGJlIHNhZmUgc2luY2UgaXQgZXhlY3V0ZXMKKyAgICAgICBpbiB0aGUgY3VycmVudCB0aHJlYWQsIG5vdCBvbmUgb2YgdGhlIHN0YWxlIHRocmVhZHMuICovCisgICAgZm9yIChwID0gZ2FyYmFnZTsgcDsgcCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHAtPm5leHQ7CisgICAgICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CisgICAgfQorfQorCisKIFB5VGhyZWFkU3RhdGUgKgogUHlUaHJlYWRTdGF0ZV9HZXQodm9pZCkKIHsKQEAgLTY5Nyw2ICs3NDksMTUgQEAKICAgICByZXR1cm4gKFB5VGhyZWFkU3RhdGUgKilQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogfQogCitpbnQKK1B5R0lMU3RhdGVfQ2hlY2sodm9pZCkKK3sKKyAgICAvKiBjYW4ndCB1c2UgUHlUaHJlYWRTdGF0ZV9HZXQoKSBzaW5jZSBpdCB3aWxsIGFzc2VydCB0aGF0IGl0IGhhcyB0aGUgR0lMICovCisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgcmV0dXJuIHRzdGF0ZSAmJiAodHN0YXRlID09IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCkpOworfQorCiBQeUdJTFN0YXRlX1NUQVRFCiBQeUdJTFN0YXRlX0Vuc3VyZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5c3RydG9kLmMgYi9QeXRob24vcHlzdHJ0b2QuYwppbmRleCA0YWI4ZjA4Li5iOGRkOTE5IDEwMDY0NAotLS0gYS9QeXRob24vcHlzdHJ0b2QuYworKysgYi9QeXRob24vcHlzdHJ0b2QuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiBfUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKIHsKICAgICBjaGFyICpmYWlsX3BvczsKLSAgICBkb3VibGUgdmFsID0gLTEuMDsKKyAgICBkb3VibGUgdmFsOwogICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGE7CiAgICAgY29uc3QgY2hhciAqZGVjaW1hbF9wb2ludDsKICAgICBzaXplX3QgZGVjaW1hbF9wb2ludF9sZW47CkBAIC05MjMsNyArOTIzLDcgQEAKIAogc3RhdGljIGNoYXIgKgogZm9ybWF0X2Zsb2F0X3Nob3J0KGRvdWJsZSBkLCBjaGFyIGZvcm1hdF9jb2RlLAotICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBQeV9zc2l6ZV90IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgaW50IHByZWNpc2lvbiwKICAgICAgICAgICAgICAgICAgICBpbnQgYWx3YXlzX2FkZF9zaWduLCBpbnQgYWRkX2RvdF8wX2lmX2ludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgaW50IHVzZV9hbHRfZm9ybWF0dGluZywgY2hhciAqKmZsb2F0X3N0cmluZ3MsIGludCAqdHlwZSkKIHsKQEAgLTEwNTksNyArMTA1OSw3IEBACiAgICAgLyogaWYgdXNpbmcgYW4gZXhwb25lbnQsIHJlc2V0IGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gdG8gMSBhbmQgYWRqdXN0CiAgICAgICAgZXhwb25lbnQgYWNjb3JkaW5nbHkuKi8KICAgICBpZiAodXNlX2V4cCkgewotICAgICAgICBleHAgPSBkZWNwdCAtIDE7CisgICAgICAgIGV4cCA9IChpbnQpZGVjcHQgLSAxOwogICAgICAgICBkZWNwdCA9IDE7CiAgICAgfQogICAgIC8qIGVuc3VyZSB2ZGlnaXRzX3N0YXJ0IDwgZGVjcHQgPD0gdmRpZ2l0c19lbmQsIG9yIHZkaWdpdHNfc3RhcnQgPApkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGhvbnJ1bi5jIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCmluZGV4IGUwMmRiZTIuLjNhZGJiZDcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXRob25ydW4uYworKysgYi9QeXRob24vcHl0aG9ucnVuLmMKQEAgLTM1LDEyICszNSw0MiBAQAogI2RlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworX1B5X0lERU5USUZJRVIoZXhjZXB0aG9vayk7CitfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihsYXN0X3RyYWNlYmFjayk7CitfUHlfSURFTlRJRklFUihsYXN0X3R5cGUpOworX1B5X0lERU5USUZJRVIobGFzdF92YWx1ZSk7CitfUHlfSURFTlRJRklFUihuYW1lKTsKK19QeV9JREVOVElGSUVSKHBzMSk7CitfUHlfSURFTlRJRklFUihwczIpOworX1B5X0lERU5USUZJRVIoc3RkaW4pOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CitfUHlfc3RhdGljX3N0cmluZyhQeUlkX3N0cmluZywgIjxzdHJpbmc+Iik7CisKKyNpZmRlZiBQeV9SRUZfREVCVUcKK3N0YXRpYwordm9pZCBfcHJpbnRfdG90YWxfcmVmcyh2b2lkKSB7CisgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqdmFsdWU7CisgICAgX1B5X0lERU5USUZJRVIoc2hvd3JlZmNvdW50KTsKKworICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKKyAgICBpZiAoeG9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhbHVlID0gX1B5RGljdF9HZXRJdGVtSWQoeG9wdGlvbnMsICZQeUlkX3Nob3dyZWZjb3VudCk7CisgICAgaWYgKHZhbHVlID09IFB5X1RydWUpCisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJbJSIgUFlfRk9STUFUX1NJWkVfVCAiZCByZWZzLCAiCisgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgYmxvY2tzXVxuIiwKKyAgICAgICAgICAgICAgICBfUHlfR2V0UmVmVG90YWwoKSwgX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpKTsKK30KKyNlbmRpZgorCiAjaWZuZGVmIFB5X1JFRl9ERUJVRwogI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkKICNlbHNlIC8qIFB5X1JFRl9ERUJVRyAqLwotI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkgZnByaW50ZihzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICJbJSIgUFlfRk9STUFUX1NJWkVfVCAiZCByZWZzXVxuIiwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgIF9QeV9HZXRSZWZUb3RhbCgpKQorI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkgX3ByaW50X3RvdGFsX3JlZnMoKQogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNTcsNyArODcsNyBAQAogc3RhdGljIHZvaWQgaW5pdHNpdGUodm9pZCk7CiBzdGF0aWMgaW50IGluaXRzdGRpbyh2b2lkKTsKIHN0YXRpYyB2b2lkIGZsdXNoX2lvKHZvaWQpOwotc3RhdGljIFB5T2JqZWN0ICpydW5fbW9kKG1vZF90eSwgY29uc3QgY2hhciAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAorc3RhdGljIFB5T2JqZWN0ICpydW5fbW9kKG1vZF90eSwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICosIFB5QXJlbmEgKik7CiBzdGF0aWMgUHlPYmplY3QgKnJ1bl9weWNfZmlsZShGSUxFICosIGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqKTsKQEAgLTY4LDExICs5OCwxNCBAQAogc3RhdGljIHZvaWQgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKHZvaWQpOwogc3RhdGljIHZvaWQgY2FsbF9sbF9leGl0ZnVuY3Modm9pZCk7CiBleHRlcm4gaW50IF9QeVVuaWNvZGVfSW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX1B5U3RydWN0U2VxdWVuY2VfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeVVuaWNvZGVfRmluaSh2b2lkKTsKIGV4dGVybiBpbnQgX1B5TG9uZ19Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHlMb25nX0Zpbmkodm9pZCk7CiBleHRlcm4gaW50IF9QeUZhdWx0aGFuZGxlcl9Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX1B5RmF1bHRoYW5kbGVyX0Zpbmkodm9pZCk7CitleHRlcm4gdm9pZCBfUHlIYXNoX0Zpbmkodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0luaXQodm9pZCk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogZXh0ZXJuIHZvaWQgX1B5R0lMU3RhdGVfSW5pdChQeUludGVycHJldGVyU3RhdGUgKiwgUHlUaHJlYWRTdGF0ZSAqKTsKQEAgLTkzLDYgKzEyNiw3IEBACiBpbnQgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDA7IC8qIGZvciAtcyBhbmQgc2l0ZS5weSAqLwogaW50IFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcgPSAwOyAvKiBVbmJ1ZmZlcmVkIGJpbmFyeSBzdGR7aW4sb3V0LGVycn0gKi8KIGludCBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcgPSAwOyAvKiBmb3IgLVIgYW5kIFBZVEhPTkhBU0hTRUVEICovCitpbnQgUHlfSXNvbGF0ZWRGbGFnID0gMDsgLyogZm9yIC1JLCBpc29sYXRlIGZyb20gdXNlcidzIGVudiAqLwogCiBQeVRocmVhZFN0YXRlICpfUHlfRmluYWxpemluZyA9IE5VTEw7CiAKQEAgLTExOCw2ICsxNTIsNDUgQEAKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7CiB9CiAKKy8qIEhlbHBlciB0byBhbGxvdyBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlIG5vcm1hbAorICogbWVjaGFuaXNtIHRoYXQgYXR0ZW1wdHMgdG8gZmlndXJlIG91dCBhbiBhcHByb3ByaWF0ZSBJTyBlbmNvZGluZworICovCisKK3N0YXRpYyBjaGFyICpfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzID0gTlVMTDsKKworaW50CitQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgaWYgKFB5X0lzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAvKiBUaGlzIGlzIHRvbyBsYXRlIHRvIGhhdmUgYW55IGVmZmVjdCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIENhbid0IGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBlcnJvcnMsIGFzIFB5dGhvbiBoYXNuJ3QgYmVlbgorICAgICAqIGluaXRpYWxpc2VkIHlldC4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIHRoZSByYXcgbWVtb3J5IGFsbG9jYXRvcnMgYXJlIGluaXRpYWxpc2VkIGFwcHJvcHJpYXRlbHkKKyAgICAgKiBhcyBDIHN0YXRpYyB2YXJpYWJsZXMsIHNvIF9QeU1lbV9SYXdTdHJkdXAgaXMgT0sgZXZlbiB0aG91Z2gKKyAgICAgKiBQeV9Jbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCisgICAgICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gX1B5TWVtX1Jhd1N0cmR1cChlbmNvZGluZyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IF9QeU1lbV9SYXdTdHJkdXAoZXJyb3JzKTsKKyAgICAgICAgaWYgKCFfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZykgeworICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiAvKiBHbG9iYWwgaW5pdGlhbGl6YXRpb25zLiAgQ2FuIGJlIHVuZG9uZSBieSBQeV9GaW5hbGl6ZSgpLiAgRG9uJ3QKICAgIGNhbGwgdGhpcyB0d2ljZSB3aXRob3V0IGFuIGludGVydmVuaW5nIFB5X0ZpbmFsaXplKCkgY2FsbC4gIFdoZW4KICAgIGluaXRpYWxpemF0aW9ucyBmYWlsLCBhIGZhdGFsIGVycm9yIGlzIGlzc3VlZCBhbmQgdGhlIGZ1bmN0aW9uIGRvZXMKQEAgLTE0Niw3ICsyMTksNiBAQAogewogICAgIGNoYXIgKm5hbWVfdXRmOCwgKm5hbWVfc3RyOwogICAgIFB5T2JqZWN0ICpjb2RlYywgKm5hbWUgPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogCiAgICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOwogICAgIGlmICghY29kZWMpCkBAIC0xNjAsNyArMjMyLDcgQEAKICAgICBuYW1lX3V0ZjggPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOwogICAgIGlmIChuYW1lX3V0ZjggPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBuYW1lX3N0ciA9IHN0cmR1cChuYW1lX3V0ZjgpOworICAgIG5hbWVfc3RyID0gX1B5TWVtX1Jhd1N0cmR1cChuYW1lX3V0ZjgpOwogICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICBpZiAobmFtZV9zdHIgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMzEzLDcgKzM4NSw4IEBACiAgICAgaWYgKCFQeUJ5dGVBcnJheV9Jbml0KCkpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgYnl0ZWFycmF5Iik7CiAKLSAgICBfUHlGbG9hdF9Jbml0KCk7CisgICAgaWYgKCFfUHlGbG9hdF9Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgZmxvYXQiKTsKIAogICAgIGludGVycC0+bW9kdWxlcyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoaW50ZXJwLT5tb2R1bGVzID09IE5VTEwpCkBAIC0zMjIsNiArMzk1LDggQEAKICAgICAvKiBJbml0IFVuaWNvZGUgaW1wbGVtZW50YXRpb247IHJlbGllcyBvbiB0aGUgY29kZWMgcmVnaXN0cnkgKi8KICAgICBpZiAoX1B5VW5pY29kZV9Jbml0KCkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHVuaWNvZGUiKTsKKyAgICBpZiAoX1B5U3RydWN0U2VxdWVuY2VfSW5pdCgpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzdHJ1Y3RzZXEiKTsKIAogICAgIGJpbW9kID0gX1B5QnVpbHRpbl9Jbml0KCk7CiAgICAgaWYgKGJpbW9kID09IE5VTEwpCkBAIC0zNTIsNyArNDI3LDcgQEAKICAgICBwc3RkZXJyID0gUHlGaWxlX05ld1N0ZFByaW50ZXIoZmlsZW5vKHN0ZGVycikpOwogICAgIGlmIChwc3RkZXJyID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZGVyciIsIHBzdGRlcnIpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHBzdGRlcnIpOwogICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgIFB5X0RFQ1JFRihwc3RkZXJyKTsKIApAQCAtMzgwLDYgKzQ1NSw5IEBACiAgICAgaWYgKGluc3RhbGxfc2lncykKICAgICAgICAgaW5pdHNpZ3MoKTsgLyogU2lnbmFsIGhhbmRsaW5nIHN0dWZmLCBpbmNsdWRpbmcgaW5pdGludHIoKSAqLwogCisgICAgaWYgKF9QeVRyYWNlTWFsbG9jX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgdHJhY2VtYWxsb2MiKTsKKwogICAgIGluaXRtYWluKGludGVycCk7IC8qIE1vZHVsZSBfX21haW5fXyAqLwogICAgIGlmIChpbml0c3RkaW8oKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCkBAIC00MzcsMTAgKzUxNSw5IEBACiBzdGF0aWMgdm9pZAogZmx1c2hfc3RkX2ZpbGVzKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKmZvdXQgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgUHlPYmplY3QgKnRtcDsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAKICAgICBpZiAoZm91dCAhPSBOVUxMICYmIGZvdXQgIT0gUHlfTm9uZSAmJiAhZmlsZV9pc19jbG9zZWQoZm91dCkpIHsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmb3V0LCAmUHlJZF9mbHVzaCwgIiIpOwpAQCAtNTA0LDExICs1ODEsMTMgQEAKICAgICBfUHlfRmluYWxpemluZyA9IHRzdGF0ZTsKICAgICBpbml0aWFsaXplZCA9IDA7CiAKLSAgICAvKiBGbHVzaCBzdGRvdXQrc3RkZXJyICovCi0gICAgZmx1c2hfc3RkX2ZpbGVzKCk7Ci0KLSAgICAvKiBEaXNhYmxlIHNpZ25hbCBoYW5kbGluZyAqLwotICAgIFB5T1NfRmluaUludGVycnVwdHMoKTsKKyAgICAvKiBEZXN0cm95IHRoZSBzdGF0ZSBvZiBhbGwgdGhyZWFkcyBleGNlcHQgb2YgdGhlIGN1cnJlbnQgdGhyZWFkOiBpbgorICAgICAgIHByYWN0aWNlLCBvbmx5IGRhZW1vbiB0aHJlYWRzIHNob3VsZCBzdGlsbCBiZSBhbGl2ZS4gQ2xlYXIgZnJhbWVzIG9mCisgICAgICAgb3RoZXIgdGhyZWFkcyB0byBjYWxsIG9iamVjdHMgZGVzdHJ1Y3Rvci4gRGVzdHJ1Y3RvcnMgd2lsbCBiZSBjYWxsZWQgaW4KKyAgICAgICB0aGUgY3VycmVudCBQeXRob24gdGhyZWFkLiBTaW5jZSBfUHlfRmluYWxpemluZyBoYXMgYmVlbiBzZXQsIG5vIG90aGVyCisgICAgICAgUHl0aG9uIHRocmVhZHMgY2FuIGxvY2sgdGhlIEdJTCBhdCB0aGlzIHBvaW50IChpZiB0aGV5IHRyeSwgdGhleSB3aWxsCisgICAgICAgZXhpdCBpbW1lZGlhdGVseSkuICovCisgICAgX1B5VGhyZWFkU3RhdGVfRGVsZXRlRXhjZXB0KHRzdGF0ZSk7CiAKICAgICAvKiBDb2xsZWN0IGdhcmJhZ2UuICBUaGlzIG1heSBjYWxsIGZpbmFsaXplcnM7IGl0J3MgbmljZSB0byBjYWxsIHRoZXNlCiAgICAgICogYmVmb3JlIGFsbCBtb2R1bGVzIGFyZSBkZXN0cm95ZWQuCkBAIC01MjMsNiArNjAyLDcgQEAKICAgICAgKiBYWFggSSBoYXZlbid0IHNlZW4gYSByZWFsLWxpZmUgcmVwb3J0IG9mIGVpdGhlciBvZiB0aGVzZS4KICAgICAgKi8KICAgICBQeUdDX0NvbGxlY3QoKTsKKwogI2lmZGVmIENPVU5UX0FMTE9DUwogICAgIC8qIFdpdGggQ09VTlRfQUxMT0NTLCBpdCBoZWxwcyB0byBydW4gR0MgbXVsdGlwbGUgdGltZXM6CiAgICAgICAgZWFjaCBjb2xsZWN0aW9uIG1pZ2h0IHJlbGVhc2Ugc29tZSB0eXBlcyBmcm9tIHRoZSB0eXBlCkBAIC01MzAsOSArNjEwLDEyIEBACiAgICAgd2hpbGUgKFB5R0NfQ29sbGVjdCgpID4gMCkKICAgICAgICAgLyogbm90aGluZyAqLzsKICNlbmRpZgotICAgIC8qIFdlIHJ1biB0aGlzIHdoaWxlIG1vc3QgaW50ZXJwcmV0ZXIgc3RhdGUgaXMgc3RpbGwgYWxpdmUsIHNvIHRoYXQKLSAgICAgICBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgcHJpbnRlZCBvdXQgKi8KLSAgICBfUHlHQ19GaW5pKCk7CisKKyAgICAvKiBGbHVzaCBzdGRvdXQrc3RkZXJyICovCisgICAgZmx1c2hfc3RkX2ZpbGVzKCk7CisKKyAgICAvKiBEaXNhYmxlIHNpZ25hbCBoYW5kbGluZyAqLworICAgIFB5T1NfRmluaUludGVycnVwdHMoKTsKIAogICAgIC8qIERlc3Ryb3kgYWxsIG1vZHVsZXMgKi8KICAgICBQeUltcG9ydF9DbGVhbnVwKCk7CkBAIC01NzIsNiArNjU1LDggQEAKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICBkdW1wX2NvdW50cyhzdGRvdXQpOwogI2VuZGlmCisgICAgLyogZHVtcCBoYXNoIHN0YXRzICovCisgICAgX1B5SGFzaF9GaW5pKCk7CiAKICAgICBQUklOVF9UT1RBTF9SRUZTKCk7CiAKQEAgLTU5NiwxMSArNjgxLDYgQEAKIAogICAgIF9QeUV4Y19GaW5pKCk7CiAKLSAgICAvKiBDbGVhbnVwIGF1dG8tdGhyZWFkLXN0YXRlICovCi0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICBfUHlHSUxTdGF0ZV9GaW5pKCk7Ci0jZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KLQogICAgIC8qIFN1bmRyeSBmaW5hbGl6ZXJzICovCiAgICAgUHlNZXRob2RfRmluaSgpOwogICAgIFB5RnJhbWVfRmluaSgpOwpAQCAtNjE0LDE3ICs2OTQsMTUgQEAKICAgICBQeUZsb2F0X0ZpbmkoKTsKICAgICBQeURpY3RfRmluaSgpOwogICAgIFB5U2xpY2VfRmluaSgpOworICAgIF9QeUdDX0ZpbmkoKTsKKyAgICBfUHlSYW5kb21fRmluaSgpOwogCiAgICAgLyogQ2xlYW51cCBVbmljb2RlIGltcGxlbWVudGF0aW9uICovCiAgICAgX1B5VW5pY29kZV9GaW5pKCk7CiAKLSAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KLSAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOwotCiAgICAgLyogcmVzZXQgZmlsZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZyAqLwogICAgIGlmICghUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyAmJiBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKSB7Ci0gICAgICAgIGZyZWUoKGNoYXIqKVB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpOworICAgICAgICBQeU1lbV9SYXdGcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IE5VTEw7CiAgICAgfQogCkBAIC02MzYsNiArNzE0LDE1IEBACiAKICAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzKCZfUHlQYXJzZXJfR3JhbW1hcik7CiAKKyAgICAvKiBDbGVhbnVwIGF1dG8tdGhyZWFkLXN0YXRlICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBfUHlHSUxTdGF0ZV9GaW5pKCk7CisjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKworICAgIC8qIERlbGV0ZSBjdXJyZW50IHRocmVhZC4gQWZ0ZXIgdGhpcywgbWFueSBDIEFQSSBjYWxscyBiZWNvbWUgY3Jhc2h5LiAqLworICAgIFB5VGhyZWFkU3RhdGVfU3dhcChOVUxMKTsKKyAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7CisKICNpZmRlZiBQeV9UUkFDRV9SRUZTCiAgICAgLyogRGlzcGxheSBhZGRyZXNzZXMgKCYgcmVmY250cykgb2YgYWxsIG9iamVjdHMgc3RpbGwgYWxpdmUuCiAgICAgICogQW4gYWRkcmVzcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSByZXByIG9mIHRoZSBvYmplY3QsIHByaW50ZWQKQEAgLTcxOCw3ICs4MDUsNyBAQAogICAgICAgICBwc3RkZXJyID0gUHlGaWxlX05ld1N0ZFByaW50ZXIoZmlsZW5vKHN0ZGVycikpOwogICAgICAgICBpZiAocHN0ZGVyciA9PSBOVUxMKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3Qgc2V0IHByZWxpbWluYXJ5IHN0ZGVyciIpOwotICAgICAgICBQeVN5c19TZXRPYmplY3QoInN0ZGVyciIsIHBzdGRlcnIpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBwc3RkZXJyKTsKICAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgcHN0ZGVycik7CiAgICAgICAgIFB5X0RFQ1JFRihwc3RkZXJyKTsKIApAQCAtNzczLDYgKzg2MCw5IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiB0aHJlYWQgaXMgbm90IGN1cnJlbnQiKTsKICAgICBpZiAodHN0YXRlLT5mcmFtZSAhPSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIHN0aWxsIGhhcyBhIGZyYW1lIik7CisKKyAgICB3YWl0X2Zvcl90aHJlYWRfc2h1dGRvd24oKTsKKwogICAgIGlmICh0c3RhdGUgIT0gaW50ZXJwLT50c3RhdGVfaGVhZCB8fCB0c3RhdGUtPm5leHQgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IG5vdCB0aGUgbGFzdCB0aHJlYWQiKTsKIApAQCAtODAyLDcgKzg5Miw3IEBACiB9CiAKIHN0YXRpYyB3Y2hhcl90ICpkZWZhdWx0X2hvbWUgPSBOVUxMOwotc3RhdGljIHdjaGFyX3QgZW52X2hvbWVbUEFUSF9NQVgrMV07CitzdGF0aWMgd2NoYXJfdCBlbnZfaG9tZVtNQVhQQVRITEVOKzFdOwogCiB2b2lkCiBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKmhvbWUpCkBAIC04MzIsNyArOTIyLDcgQEAKIHN0YXRpYyB2b2lkCiBpbml0bWFpbihQeUludGVycHJldGVyU3RhdGUgKmludGVycCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQ7CisgICAgUHlPYmplY3QgKm0sICpkLCAqbG9hZGVyOwogICAgIG0gPSBQeUltcG9ydF9BZGRNb2R1bGUoIl9fbWFpbl9fIik7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgY3JlYXRlIF9fbWFpbl9fIG1vZHVsZSIpOwpAQCAtODUzLDcgKzk0Myw4IEBACiAgICAgICogYmUgc2V0IGlmIF9fbWFpbl9fIGdldHMgZnVydGhlciBpbml0aWFsaXplZCBsYXRlciBpbiB0aGUgc3RhcnR1cAogICAgICAqIHByb2Nlc3MuCiAgICAgICovCi0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsICJfX2xvYWRlcl9fIikgPT0gTlVMTCkgeworICAgIGxvYWRlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsICJfX2xvYWRlcl9fIik7CisgICAgaWYgKGxvYWRlciA9PSBOVUxMIHx8IGxvYWRlciA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5T2JqZWN0ICpsb2FkZXIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVpbHRpbkltcG9ydGVyIik7CiAgICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCkgewpAQCAtOTAzLDYgKzk5NCw3IEBACiAgICAgUHlPYmplY3QgKm07CiAgICAgbSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic2l0ZSIpOwogICAgIGlmIChtID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gaW1wb3J0IHRoZSBzaXRlIG1vZHVsZVxuIik7CiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0ZpbmFsaXplKCk7CiAgICAgICAgIGV4aXQoMSk7CkBAIC05MjUsNyArMTAxNyw2IEBACiAgICAgX1B5X0lERU5USUZJRVIob3Blbik7CiAgICAgX1B5X0lERU5USUZJRVIoaXNhdHR5KTsKICAgICBfUHlfSURFTlRJRklFUihUZXh0SU9XcmFwcGVyKTsKLSAgICBfUHlfSURFTlRJRklFUihuYW1lKTsKICAgICBfUHlfSURFTlRJRklFUihtb2RlKTsKIAogICAgIC8qIHN0ZGluIGlzIGFsd2F5cyBvcGVuZWQgaW4gYnVmZmVyZWQgbW9kZSwgZmlyc3QgYmVjYXVzZSBpdCBzaG91bGRuJ3QKQEAgLTEwMzUsNyArMTEyNiw3IEBACiAgICAgUHlPYmplY3QgKnN0ZCA9IE5VTEw7CiAgICAgaW50IHN0YXR1cyA9IDAsIGZkOwogICAgIFB5T2JqZWN0ICogZW5jb2RpbmdfYXR0cjsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEwsICplcnJvcnM7CisgICAgY2hhciAqcHl0aG9uaW9lbmNvZGluZyA9IE5VTEwsICplbmNvZGluZywgKmVycm9yczsKIAogICAgIC8qIEhhY2sgdG8gYXZvaWQgYSBuYXN0eSByZWN1cnNpb24gaXNzdWUgd2hlbiBQeXRob24gaXMgaW52b2tlZAogICAgICAgIGluIHZlcmJvc2UgbW9kZTogcHJlLWltcG9ydCB0aGUgTGF0aW4tMSBhbmQgVVRGLTggY29kZWNzICovCkBAIC0xMDY3LDE0ICsxMTU4LDI4IEBACiAgICAgfQogICAgIFB5X0RFQ1JFRih3cmFwcGVyKTsKIAotICAgIGVuY29kaW5nID0gUHlfR0VURU5WKCJQWVRIT05JT0VOQ09ESU5HIik7Ci0gICAgZXJyb3JzID0gTlVMTDsKLSAgICBpZiAoZW5jb2RpbmcpIHsKLSAgICAgICAgZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOwotICAgICAgICBlcnJvcnMgPSBzdHJjaHIoZW5jb2RpbmcsICc6Jyk7Ci0gICAgICAgIGlmIChlcnJvcnMpIHsKLSAgICAgICAgICAgICplcnJvcnMgPSAnXDAnOwotICAgICAgICAgICAgZXJyb3JzKys7CisgICAgZW5jb2RpbmcgPSBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZzsKKyAgICBlcnJvcnMgPSBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnM7CisgICAgaWYgKCFlbmNvZGluZyB8fCAhZXJyb3JzKSB7CisgICAgICAgIHB5dGhvbmlvZW5jb2RpbmcgPSBQeV9HRVRFTlYoIlBZVEhPTklPRU5DT0RJTkciKTsKKyAgICAgICAgaWYgKHB5dGhvbmlvZW5jb2RpbmcpIHsKKyAgICAgICAgICAgIGNoYXIgKmVycjsKKyAgICAgICAgICAgIHB5dGhvbmlvZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKHB5dGhvbmlvZW5jb2RpbmcpOworICAgICAgICAgICAgaWYgKHB5dGhvbmlvZW5jb2RpbmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVyciA9IHN0cmNocihweXRob25pb2VuY29kaW5nLCAnOicpOworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgICplcnIgPSAnXDAnOworICAgICAgICAgICAgICAgIGVycisrOworICAgICAgICAgICAgICAgIGlmICgqZXJyICYmICFlcnJvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqcHl0aG9uaW9lbmNvZGluZyAmJiAhZW5jb2RpbmcpIHsKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IHB5dGhvbmlvZW5jb2Rpbmc7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwOTQsNyArMTE5OSw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0gLyogaWYgKGZkIDwgMCkgKi8KICAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkaW5fXyIsIHN0ZCk7Ci0gICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRpbiIsIHN0ZCk7CisgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGluLCBzdGQpOwogICAgIFB5X0RFQ1JFRihzdGQpOwogCiAgICAgLyogU2V0IHN5cy5zdGRvdXQgKi8KQEAgLTExMDksNyArMTIxNCw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0gLyogaWYgKGZkIDwgMCkgKi8KICAgICBQeVN5c19TZXRPYmplY3QoIl9fc3Rkb3V0X18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3Rkb3V0Iiwgc3RkKTsKKyAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0LCBzdGQpOwogICAgIFB5X0RFQ1JFRihzdGQpOwogCiAjaWYgMSAvKiBEaXNhYmxlIHRoaXMgaWYgeW91IGhhdmUgdHJvdWJsZSBkZWJ1Z2dpbmcgYm9vdHN0cmFwIHN0dWZmICovCkBAIC0xMTI5LDE4ICsxMjM0LDI0IEBACiAgICAgICAgd2hlbiBpbXBvcnQuYyB0cmllcyB0byB3cml0ZSB0byBzdGRlcnIgaW4gdmVyYm9zZSBtb2RlLiAqLwogICAgIGVuY29kaW5nX2F0dHIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN0ZCwgImVuY29kaW5nIik7CiAgICAgaWYgKGVuY29kaW5nX2F0dHIgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBjaGFyICogZW5jb2Rpbmc7Ci0gICAgICAgIGVuY29kaW5nID0gX1B5VW5pY29kZV9Bc1N0cmluZyhlbmNvZGluZ19hdHRyKTsKLSAgICAgICAgaWYgKGVuY29kaW5nICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlY19pbmZvID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKKyAgICAgICAgY29uc3QgY2hhciAqIHN0ZF9lbmNvZGluZzsKKyAgICAgICAgc3RkX2VuY29kaW5nID0gX1B5VW5pY29kZV9Bc1N0cmluZyhlbmNvZGluZ19hdHRyKTsKKyAgICAgICAgaWYgKHN0ZF9lbmNvZGluZyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChzdGRfZW5jb2RpbmcpOwogICAgICAgICAgICAgUHlfWERFQ1JFRihjb2RlY19pbmZvKTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoZW5jb2RpbmdfYXR0cik7CiAgICAgfQogICAgIFB5RXJyX0NsZWFyKCk7ICAvKiBOb3QgYSBmYXRhbCBlcnJvciBpZiBjb2RlYyBpc24ndCBhdmFpbGFibGUgKi8KIAotICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHN0ZCk7Ci0gICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBzdGQpOworICAgIGlmIChQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc3RkKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHN0ZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdGQpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBQeV9ERUNSRUYoc3RkKTsKICNlbmRpZgogCkBAIC0xMTQ5LDggKzEyNjAsMTYgQEAKICAgICAgICAgc3RhdHVzID0gLTE7CiAgICAgfQogCi0gICAgaWYgKGVuY29kaW5nKQotICAgICAgICBmcmVlKGVuY29kaW5nKTsKKyAgICAvKiBXZSB3b24ndCBuZWVkIHRoZW0gYW55bW9yZS4gKi8KKyAgICBpZiAoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyk7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycykgeworICAgICAgICBQeU1lbV9SYXdGcmVlKF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyk7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IE5VTEw7CisgICAgfQorICAgIFB5TWVtX0ZyZWUocHl0aG9uaW9lbmNvZGluZyk7CiAgICAgUHlfWERFQ1JFRihiaW1vZCk7CiAgICAgUHlfWERFQ1JFRihpb21vZCk7CiAgICAgcmV0dXJuIHN0YXR1czsKQEAgLTExNzUsMzYgKzEyOTQsNDcgQEAKIH0KIAogaW50Ci1QeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCitQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogewotICAgIFB5T2JqZWN0ICp2OwotICAgIGludCByZXQ7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lLCAqdjsKKyAgICBpbnQgcmV0LCBlcnI7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsX2ZsYWdzOwogCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGZsYWdzID0gJmxvY2FsX2ZsYWdzOwogICAgICAgICBsb2NhbF9mbGFncy5jZl9mbGFncyA9IDA7CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMSIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMxKTsKICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgicHMxIiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI+Pj4gIikpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfcHMxLCB2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIj4+PiAiKSk7CiAgICAgICAgIFB5X1hERUNSRUYodik7CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMiIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMyKTsKICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgicHMyIiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuLi4gIikpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfcHMyLCB2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIi4uLiAiKSk7CiAgICAgICAgIFB5X1hERUNSRUYodik7CiAgICAgfQorICAgIGVyciA9IC0xOwogICAgIGZvciAoOzspIHsKLSAgICAgICAgcmV0ID0gUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyhmcCwgZmlsZW5hbWUsIGZsYWdzKTsKKyAgICAgICAgcmV0ID0gUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoZnAsIGZpbGVuYW1lLCBmbGFncyk7CiAgICAgICAgIFBSSU5UX1RPVEFMX1JFRlMoKTsKLSAgICAgICAgaWYgKHJldCA9PSBFX0VPRikKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAocmV0ID09IEVfRU9GKSB7CisgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgLyoKICAgICAgICAgaWYgKHJldCA9PSBFX05PTUVNKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICovCiAgICAgfQorICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGVycjsKIH0KIAogLyogY29tcHV0ZSBwYXJzZXIgZmxhZ3MgYmFzZWQgb24gY29tcGlsZXIgZmxhZ3MgKi8KQEAgLTEyMzIsMTggKzEzNjIsMjUgQEAKICNlbmRpZgogCiBpbnQKLVB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoRklMRSAqZnAsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqdywgKm9lbmMgPSBOVUxMOworICAgIFB5T2JqZWN0ICptLCAqZCwgKnYsICp3LCAqb2VuYyA9IE5VTEwsICptb2RfbmFtZTsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5QXJlbmEgKmFyZW5hOwogICAgIGNoYXIgKnBzMSA9ICIiLCAqcHMyID0gIiIsICplbmMgPSBOVUxMOwogICAgIGludCBlcnJjb2RlID0gMDsKICAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7CisgICAgX1B5X0lERU5USUZJRVIoX19tYWluX18pOworCisgICAgbW9kX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX21haW5fXyk7IC8qIGJvcnJvd2VkICovCisgICAgaWYgKG1vZF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmIChmcCA9PSBzdGRpbikgewogICAgICAgICAvKiBGZXRjaCBlbmNvZGluZyBmcm9tIHN5cy5zdGRpbiBpZiBwb3NzaWJsZS4gKi8KLSAgICAgICAgdiA9IFB5U3lzX0dldE9iamVjdCgic3RkaW4iKTsKKyAgICAgICAgdiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRpbik7CiAgICAgICAgIGlmICh2ICYmIHYgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgb2VuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQodiwgJlB5SWRfZW5jb2RpbmcpOwogICAgICAgICAgICAgaWYgKG9lbmMpCkBAIC0xMjUyLDcgKzEzODksNyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgdiA9IFB5U3lzX0dldE9iamVjdCgicHMxIik7CisgICAgdiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wczEpOwogICAgIGlmICh2ICE9IE5VTEwpIHsKICAgICAgICAgdiA9IFB5T2JqZWN0X1N0cih2KTsKICAgICAgICAgaWYgKHYgPT0gTlVMTCkKQEAgLTEyNjUsNyArMTQwMiw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgdyA9IFB5U3lzX0dldE9iamVjdCgicHMyIik7CisgICAgdyA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wczIpOwogICAgIGlmICh3ICE9IE5VTEwpIHsKICAgICAgICAgdyA9IFB5T2JqZWN0X1N0cih3KTsKICAgICAgICAgaWYgKHcgPT0gTlVMTCkKQEAgLTEyODUsOSArMTQyMiw5IEBACiAgICAgICAgIFB5X1hERUNSRUYob2VuYyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGUoZnAsIGZpbGVuYW1lLCBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc2luZ2xlX2lucHV0LCBwczEsIHBzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmVycmNvZGUsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zaW5nbGVfaW5wdXQsIHBzMSwgcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCAmZXJyY29kZSwgYXJlbmEpOwogICAgIFB5X1hERUNSRUYodik7CiAgICAgUHlfWERFQ1JFRih3KTsKICAgICBQeV9YREVDUkVGKG9lbmMpOwpAQCAtMTMwMCw3ICsxNDM3LDcgQEAKICAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOworICAgIG0gPSBQeUltcG9ydF9BZGRNb2R1bGVPYmplY3QobW9kX25hbWUpOwogICAgIGlmIChtID09IE5VTEwpIHsKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTMxNyw2ICsxNDU0LDIzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludAorUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBpbnQgcmVzOworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXMgPSBQeVJ1bl9JbnRlcmFjdGl2ZU9uZU9iamVjdChmcCwgZmlsZW5hbWUsIGZsYWdzKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiByZXM7Cit9CisKKwogLyogQ2hlY2sgd2hldGhlciBhIGZpbGUgbWF5YmUgYSBweWMgZmlsZTogTG9vayBhdCB0aGUgZXh0ZW5zaW9uLAogICAgdGhlIGZpbGUgdHlwZSwgYW5kLCBpZiB3ZSBtYXkgY2xvc2UgaXQsIGF0IHRoZSBmaXJzdCBmZXcgYnl0ZXMuICovCiAKQEAgLTEzNTcsOCArMTUxMSw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLWludAotc3RhdGljIHNldF9tYWluX2xvYWRlcihQeU9iamVjdCAqZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvYWRlcl9uYW1lKQorc3RhdGljIGludAorc2V0X21haW5fbG9hZGVyKFB5T2JqZWN0ICpkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbG9hZGVyX25hbWUpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOwpAQCAtMTQyNSw3ICsxNTc5LDcgQEAKICAgICAgICAgLyogVHJ5IHRvIHJ1biBhIHB5YyBmaWxlLiBGaXJzdCwgcmUtb3BlbiBpbiBiaW5hcnkgKi8KICAgICAgICAgaWYgKGNsb3NlaXQpCiAgICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBpZiAoKHB5Y19mcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKSkgPT0gTlVMTCkgeworICAgICAgICBpZiAoKHB5Y19mcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicHl0aG9uOiBDYW4ndCByZW9wZW4gLnB5YyBmaWxlXG4iKTsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQpAQCAtMTQ4NCw4ICsxNjM4LDggQEAKIH0KIAogc3RhdGljIGludAotcGFyc2Vfc3ludGF4X2Vycm9yKFB5T2JqZWN0ICplcnIsIFB5T2JqZWN0ICoqbWVzc2FnZSwgY29uc3QgY2hhciAqKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgIGludCAqbGluZW5vLCBpbnQgKm9mZnNldCwgY29uc3QgY2hhciAqKnRleHQpCitwYXJzZV9zeW50YXhfZXJyb3IoUHlPYmplY3QgKmVyciwgUHlPYmplY3QgKiptZXNzYWdlLCBQeU9iamVjdCAqKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgIGludCAqbGluZW5vLCBpbnQgKm9mZnNldCwgUHlPYmplY3QgKip0ZXh0KQogewogICAgIGxvbmcgaG9sZDsKICAgICBQeU9iamVjdCAqdjsKQEAgLTE0OTYsNiArMTY1MCw3IEBACiAgICAgX1B5X0lERU5USUZJRVIodGV4dCk7CiAKICAgICAqbWVzc2FnZSA9IE5VTEw7CisgICAgKmZpbGVuYW1lID0gTlVMTDsKIAogICAgIC8qIG5ldyBzdHlsZSBlcnJvcnMuICBgZXJyJyBpcyBhbiBpbnN0YW5jZSAqLwogICAgICptZXNzYWdlID0gX1B5T2JqZWN0X0dldEF0dHJJZChlcnIsICZQeUlkX21zZyk7CkBAIC0xNTA3LDEzICsxNjYyLDEzIEBACiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICBpZiAodiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgKmZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgKmZpbGVuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfc3RyaW5nKTsKKyAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgICpmaWxlbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgaWYgKCEqZmlsZW5hbWUpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgICpmaWxlbmFtZSA9IHY7CiAgICAgfQogCiAgICAgdiA9IF9QeU9iamVjdF9HZXRBdHRySWQoZXJyLCAmUHlJZF9saW5lbm8pOwpAQCAtMTU0NywxNSArMTcwMiwxMyBAQAogICAgICAgICAqdGV4dCA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAqdGV4dCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgaWYgKCEqdGV4dCkKLSAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgKnRleHQgPSB2OwogICAgIH0KICAgICByZXR1cm4gMTsKIAogZmluYWxseToKICAgICBQeV9YREVDUkVGKCptZXNzYWdlKTsKKyAgICBQeV9YREVDUkVGKCpmaWxlbmFtZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE1NjYsOSArMTcxOSwxNSBAQAogfQogCiBzdGF0aWMgdm9pZAotcHJpbnRfZXJyb3JfdGV4dChQeU9iamVjdCAqZiwgaW50IG9mZnNldCwgY29uc3QgY2hhciAqdGV4dCkKK3ByaW50X2Vycm9yX3RleHQoUHlPYmplY3QgKmYsIGludCBvZmZzZXQsIFB5T2JqZWN0ICp0ZXh0X29iaikKIHsKKyAgICBjaGFyICp0ZXh0OwogICAgIGNoYXIgKm5sOworCisgICAgdGV4dCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodGV4dF9vYmopOworICAgIGlmICh0ZXh0ID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChvZmZzZXQgPj0gMCkgewogICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPT0gc3RybGVuKHRleHQpICYmIHRleHRbb2Zmc2V0IC0gMV0gPT0gJ1xuJykKICAgICAgICAgICAgIG9mZnNldC0tOwpAQCAtMTYyNyw3ICsxNzg2LDcgQEAKICAgICBpZiAoUHlMb25nX0NoZWNrKHZhbHVlKSkKICAgICAgICAgZXhpdGNvZGUgPSAoaW50KVB5TG9uZ19Bc0xvbmcodmFsdWUpOwogICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqc3lzX3N0ZGVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgICAgIFB5T2JqZWN0ICpzeXNfc3RkZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgICAgIGlmIChzeXNfc3RkZXJyICE9IE5VTEwgJiYgc3lzX3N0ZGVyciAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QodmFsdWUsIHN5c19zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNjcwLDExICsxODI5LDExIEBACiAgICAgICAgIHJldHVybjsKICAgICAvKiBOb3cgd2Uga25vdyB2ICE9IE5VTEwgdG9vICovCiAgICAgaWYgKHNldF9zeXNfbGFzdF92YXJzKSB7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF90eXBlIiwgZXhjZXB0aW9uKTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJsYXN0X3ZhbHVlIiwgdik7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF90cmFjZWJhY2siLCB0Yik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3R5cGUsIGV4Y2VwdGlvbik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3ZhbHVlLCB2KTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX2xhc3RfdHJhY2ViYWNrLCB0Yik7CiAgICAgfQotICAgIGhvb2sgPSBQeVN5c19HZXRPYmplY3QoImV4Y2VwdGhvb2siKTsKKyAgICBob29rID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX2V4Y2VwdGhvb2spOwogICAgIGlmIChob29rKSB7CiAgICAgICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9QYWNrKDMsIGV4Y2VwdGlvbiwgdiwgdGIpOwogICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoaG9vaywgYXJncyk7CkBAIC0xNzM5LDI3ICsxODk4LDMwIEBACiAgICAgaWYgKGVyciA9PSAwICYmCiAgICAgICAgIF9QeU9iamVjdF9IYXNBdHRySWQodmFsdWUsICZQeUlkX3ByaW50X2ZpbGVfYW5kX2xpbmUpKQogICAgIHsKLSAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2U7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAqdGV4dDsKKyAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UsICpmaWxlbmFtZSwgKnRleHQ7CiAgICAgICAgIGludCBsaW5lbm8sIG9mZnNldDsKICAgICAgICAgaWYgKCFwYXJzZV9zeW50YXhfZXJyb3IodmFsdWUsICZtZXNzYWdlLCAmZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lbm8sICZvZmZzZXQsICZ0ZXh0KSkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhciBidWZbMTBdOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgIEZpbGUgXCIiLCBmKTsKLSAgICAgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiPHN0cmluZz4iLCBmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoZmlsZW5hbWUsIGYpOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcIiwgbGluZSAiLCBmKTsKLSAgICAgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgbGluZW5vKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhidWYsIGYpOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpOwotICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBwcmludF9lcnJvcl90ZXh0KGYsIG9mZnNldCwgdGV4dCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGluZTsKKwogICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIHZhbHVlID0gbWVzc2FnZTsKKworICAgICAgICAgICAgbGluZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIgIEZpbGUgXCIlVVwiLCBsaW5lICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgICAgICAgICAgaWYgKGxpbmUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChsaW5lLCBmLCBQeV9QUklOVF9SQVcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaW5lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHByaW50X2Vycm9yX3RleHQoZiwgb2Zmc2V0LCB0ZXh0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodGV4dCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8qIENhbid0IGJlIGJvdGhlcmVkIHRvIGNoZWNrIGFsbCB0aG9zZQogICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCkgY2FsbHMgKi8KICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtMTc4OCwxMCArMTk1MCw5IEBACiAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhciogbW9kc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhtb2R1bGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChtb2RzdHIgJiYgc3RyY21wKG1vZHN0ciwgImJ1aWx0aW5zIikpCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZHVsZU5hbWUsICZQeUlkX2J1aWx0aW5zKSAhPSAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZVN0cmluZyhtb2RzdHIsIGYpOworICAgICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZU9iamVjdChtb2R1bGVOYW1lLCBmLCBQeV9QUklOVF9SQVcpOwogICAgICAgICAgICAgICAgIGVyciArPSBQeUZpbGVfV3JpdGVTdHJpbmcoIi4iLCBmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGVOYW1lKTsKQEAgLTE4ODQsNyArMjA0NSw3IEBACiBQeUVycl9EaXNwbGF5KFB5T2JqZWN0ICpleGNlcHRpb24sIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiKQogewogICAgIFB5T2JqZWN0ICpzZWVuOwotICAgIFB5T2JqZWN0ICpmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIGlmIChQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKQogICAgICAgICAmJiB0YiAhPSBOVUxMICYmIFB5VHJhY2VCYWNrX0NoZWNrKHRiKSkgewogICAgICAgICAvKiBQdXQgdGhlIHRyYWNlYmFjayBvbiB0aGUgZXhjZXB0aW9uLCBvdGhlcndpc2UgaXQgd29uJ3QgZ2V0CkBAIC0xOTIwLDM3ICsyMDgxLDU0IEBACiB7CiAgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7CiAgICAgbW9kX3R5IG1vZDsKLSAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgUHlBcmVuYSAqYXJlbmE7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworCisgICAgZmlsZW5hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9zdHJpbmcpOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgIjxzdHJpbmc+Iiwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKICAgICBpZiAobW9kICE9IE5VTEwpCi0gICAgICAgIHJldCA9IHJ1bl9tb2QobW9kLCAiPHN0cmluZz4iLCBnbG9iYWxzLCBsb2NhbHMsIGZsYWdzLCBhcmVuYSk7CisgICAgICAgIHJldCA9IHJ1bl9tb2QobW9kLCBmaWxlbmFtZSwgZ2xvYmFscywgbG9jYWxzLCBmbGFncywgYXJlbmEpOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIAogUHlPYmplY3QgKgotUHlSdW5fRmlsZUV4RmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLAorUHlSdW5fRmlsZUV4RmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywKICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsb2NhbHMsIGludCBjbG9zZWl0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogewotICAgIFB5T2JqZWN0ICpyZXQ7CisgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7CiAgICAgbW9kX3R5IG1vZDsKLSAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7Ci0gICAgaWYgKGFyZW5hID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIFB5QXJlbmEgKmFyZW5hID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZShmcCwgZmlsZW5hbWUsIE5VTEwsIHN0YXJ0LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBOVUxMLCBhcmVuYSk7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBpZiAoYXJlbmEgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworCisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBOVUxMLCBzdGFydCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgTlVMTCwgYXJlbmEpOwogICAgIGlmIChjbG9zZWl0KQogICAgICAgICBmY2xvc2UoZnApOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewotICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICByZXQgPSBydW5fbW9kKG1vZCwgZmlsZW5hbWUsIGdsb2JhbHMsIGxvY2FscywgZmxhZ3MsIGFyZW5hKTsKLSAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOworCitleGl0OgorICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIGlmIChhcmVuYSAhPSBOVUxMKQorICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTE5NTksMTIgKzIxMzcsMTEgQEAKIHsKICAgICBQeU9iamVjdCAqZiwgKnI7CiAgICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjazsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAKICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiAqLwogICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOwogCi0gICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgaWYgKHIpCkBAIC0xOTcyLDcgKzIxNDksNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKKyAgICBmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZG91dCk7CiAgICAgaWYgKGYgIT0gTlVMTCkgewogICAgICAgICByID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmLCAmUHlJZF9mbHVzaCwgIiIpOwogICAgICAgICBpZiAocikKQEAgLTE5ODUsMTIgKzIxNjIsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXJ1bl9tb2QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLAotICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCitydW5fbW9kKG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsCisgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5T2JqZWN0ICp2OwotICAgIGNvID0gUHlBU1RfQ29tcGlsZShtb2QsIGZpbGVuYW1lLCBmbGFncywgYXJlbmEpOworICAgIGNvID0gUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLCBmbGFncywgLTEsIGFyZW5hKTsKICAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdiA9IFB5RXZhbF9FdmFsQ29kZSgoUHlPYmplY3QqKWNvLCBnbG9iYWxzLCBsb2NhbHMpOwpAQCAtMjAzMiw4ICsyMjA5LDggQEAKIH0KIAogUHlPYmplY3QgKgotUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorUHlfQ29tcGlsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBtb2RfdHkgbW9kOwpAQCAtMjA0MSw3ICsyMjE4LDcgQEAKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjA1MSwxMSArMjIyOCwyNCBAQAogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBjbyA9IFB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopY287CiB9CiAKK1B5T2JqZWN0ICoKK1B5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lLCAqY287CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGNvID0gUHlfQ29tcGlsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIG9wdGltaXplKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBjbzsKK30KKwogLyogRm9yIHVzZSBpbiBQeV9MSU1JVEVEX0FQSSAqLwogI3VuZGVmIFB5X0NvbXBpbGVTdHJpbmcKIFB5T2JqZWN0ICoKQEAgLTIwNjUsNDYgKzIyNTUsNjIgQEAKIH0KIAogc3RydWN0IHN5bXRhYmxlICoKLVB5X1N5bXRhYmxlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCkKK1B5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnN0ciwgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCiB7CiAgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBmbGFnczsKLSAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgUHlBcmVuYSAqYXJlbmE7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZmxhZ3MuY2ZfZmxhZ3MgPSAwOwotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQsICZmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsICZmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkKG1vZCwgZmlsZW5hbWUsIDApOworICAgIHN0ID0gUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2QsIGZpbGVuYW1lLCAwKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiBzdDsKIH0KIAorc3RydWN0IHN5bXRhYmxlICoKK1B5X1N5bXRhYmxlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIHN0cnVjdCBzeW10YWJsZSAqc3Q7CisKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBQeV9TeW10YWJsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gc3Q7Cit9CisKIC8qIFByZWZlcnJlZCBhY2Nlc3MgdG8gcGFyc2VyIGlzIHRocm91Z2ggQVNULiAqLwogbW9kX3R5Ci1QeVBhcnNlcl9BU1RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQorUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgbG9jYWxmbGFnczsKICAgICBwZXJyZGV0YWlsIGVycjsKICAgICBpbnQgaWZsYWdzID0gUEFSU0VSX0ZMQUdTKGZsYWdzKTsKIAotICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeChzLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwgc3RhcnQsICZlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZsYWdzKTsKKyAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QocywgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwgc3RhcnQsICZlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZmxhZ3MpOwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FsZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgICAgICBmbGFncyA9ICZsb2NhbGZsYWdzOwogICAgIH0KICAgICBpZiAobikgewogICAgICAgICBmbGFncy0+Y2ZfZmxhZ3MgfD0gaWZsYWdzICYgUHlDRl9NQVNLOwotICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CiAgICAgICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTIxMTYsMjYgKzIzMjIsNDAgQEAKIH0KIAogbW9kX3R5Ci1QeVBhcnNlcl9BU1RGcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGVuYywKLSAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAotICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK1B5UGFyc2VyX0FTVEZyb21TdHJpbmcoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBtb2RfdHkgbW9kOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBtb2Q7Cit9CisKK21vZF90eQorUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoRklMRSAqZnAsIFB5T2JqZWN0ICpmaWxlbmFtZSwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQogewogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsZmxhZ3M7CiAgICAgcGVycmRldGFpbCBlcnI7CiAgICAgaW50IGlmbGFncyA9IFBBUlNFUl9GTEFHUyhmbGFncyk7CiAKLSAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChmcCwgZmlsZW5hbWUsIGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgJmVyciwgJmlmbGFncyk7CisgICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgJmVyciwgJmlmbGFncyk7CiAgICAgaWYgKGZsYWdzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxmbGFncy5jZl9mbGFncyA9IDA7CiAgICAgICAgIGZsYWdzID0gJmxvY2FsZmxhZ3M7CiAgICAgfQogICAgIGlmIChuKSB7CiAgICAgICAgIGZsYWdzLT5jZl9mbGFncyB8PSBpZmxhZ3MgJiBQeUNGX01BU0s7Ci0gICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlKG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKICAgICAgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjE0OCw2ICsyMzY4LDIzIEBACiAgICAgcmV0dXJuIG1vZDsKIH0KIAorbW9kX3R5CitQeVBhcnNlcl9BU1RGcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBjb25zdCBjaGFyKiBlbmMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgbW9kX3R5IG1vZDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgZW5jLCBzdGFydCwgcHMxLCBwczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGVycmNvZGUsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBtb2Q7Cit9CisKIC8qIFNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIHBhcnNlZmlsZSAtLSByZXR1cm4gbm9kZSBvciBzZXQgZXhjZXB0aW9uICovCiAKIG5vZGUgKgpAQCAtMjQ3NCw2ICsyNzExLDkgQEAKICAgICBQeU9TX3NldHNpZyhTSUdYRlNaLCBTSUdfSUdOKTsKICNlbmRpZgogICAgIFB5T1NfSW5pdEludGVycnVwdHMoKTsgLyogTWF5IGltcGx5IGluaXRzaWduYWwoKSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGltcG9ydCBzaWduYWwiKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvUHl0aG9uL3JhbmRvbS5jIGIvUHl0aG9uL3JhbmRvbS5jCmluZGV4IDMzN2JlODYuLmRlOGU5ZTcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9yYW5kb20uYworKysgYi9QeXRob24vcmFuZG9tLmMKQEAgLTEyLDEzICsxMiw2IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEFDUVVJUkVDT05URVhUQSkoSENSWVBUUFJPViAqcGhQcm92LFwKLSAgICAgICAgICAgICAgTFBDU1RSIHBzekNvbnRhaW5lciwgTFBDU1RSIHBzelByb3ZpZGVyLCBEV09SRCBkd1Byb3ZUeXBlLFwKLSAgICAgICAgICAgICAgRFdPUkQgZHdGbGFncyApOwotdHlwZWRlZiBCT09MIChXSU5BUEkgKkNSWVBUR0VOUkFORE9NKShIQ1JZUFRQUk9WIGhQcm92LCBEV09SRCBkd0xlbixcCi0gICAgICAgICAgICAgIEJZVEUgKnBiQnVmZmVyICk7Ci0KLXN0YXRpYyBDUllQVEdFTlJBTkRPTSBwQ3J5cHRHZW5SYW5kb20gPSBOVUxMOwogLyogVGhpcyBoYW5kbGUgaXMgbmV2ZXIgZXhwbGljaXRseSByZWxlYXNlZC4gSW5zdGVhZCwgdGhlIG9wZXJhdGluZwogICAgc3lzdGVtIHdpbGwgcmVsZWFzZSBpdCB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuICovCiBzdGF0aWMgSENSWVBUUFJPViBoQ3J5cHRQcm92ID0gMDsKQEAgLTI2LDI5ICsxOSw5IEBACiBzdGF0aWMgaW50CiB3aW4zMl91cmFuZG9tX2luaXQoaW50IHJhaXNlKQogewotICAgIEhJTlNUQU5DRSBoQWR2QVBJMzIgPSBOVUxMOwotICAgIENSWVBUQUNRVUlSRUNPTlRFWFRBIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gTlVMTDsKLQotICAgIC8qIE9idGFpbiBoYW5kbGUgdG8gdGhlIERMTCBjb250YWluaW5nIENyeXB0b0FQSS4gVGhpcyBzaG91bGQgbm90IGZhaWwuICovCi0gICAgaEFkdkFQSTMyID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKLSAgICBpZihoQWR2QVBJMzIgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgIC8qIE9idGFpbiBwb2ludGVycyB0byB0aGUgQ3J5cHRvQVBJIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGZhaWwgb24gc29tZSBlYXJseQotICAgICAgIHZlcnNpb25zIG9mIFdpbjk1LiAqLwotICAgIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gKENSWVBUQUNRVUlSRUNPTlRFWFRBKUdldFByb2NBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhBZHZBUEkzMiwgIkNyeXB0QWNxdWlyZUNvbnRleHRBIik7Ci0gICAgaWYgKHBDcnlwdEFjcXVpcmVDb250ZXh0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBwQ3J5cHRHZW5SYW5kb20gPSAoQ1JZUFRHRU5SQU5ET00pR2V0UHJvY0FkZHJlc3MoaEFkdkFQSTMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3J5cHRHZW5SYW5kb20iKTsKLSAgICBpZiAocENyeXB0R2VuUmFuZG9tID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAvKiBBY3F1aXJlIGNvbnRleHQgKi8KLSAgICBpZiAoISBwQ3J5cHRBY3F1aXJlQ29udGV4dCgmaENyeXB0UHJvdiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKKyAgICBpZiAoIUNyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1ZfUlNBX0ZVTEwsIENSWVBUX1ZFUklGWUNPTlRFWFQpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgcmV0dXJuIDA7CkBAIC03Nyw3ICs1MCw3IEBACiAgICAgd2hpbGUgKHNpemUgPiAwKQogICAgIHsKICAgICAgICAgY2h1bmsgPSBzaXplID4gSU5UX01BWCA/IElOVF9NQVggOiBzaXplOwotICAgICAgICBpZiAoIXBDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCBjaHVuaywgYnVmZmVyKSkKKyAgICAgICAgaWYgKCFDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCAoRFdPUkQpY2h1bmssIGJ1ZmZlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIENyeXB0R2VuUmFuZG9tKCkgZmFpbGVkICovCiAgICAgICAgICAgICBpZiAocmFpc2UpCkBAIC0xMTcsMTggKzkwLDE5IEBACiAKIAogI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKQorc3RhdGljIGludCB1cmFuZG9tX2ZkID0gLTE7CiAKIC8qIFJlYWQgc2l6ZSBieXRlcyBmcm9tIC9kZXYvdXJhbmRvbSBpbnRvIGJ1ZmZlci4KICAgIENhbGwgUHlfRmF0YWxFcnJvcigpIG9uIGVycm9yLiAqLwogc3RhdGljIHZvaWQKLWRldl91cmFuZG9tX25vcmFpc2UoY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUpCitkZXZfdXJhbmRvbV9ub3JhaXNlKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQogewogICAgIGludCBmZDsKICAgICBQeV9zc2l6ZV90IG47CiAKICAgICBhc3NlcnQgKDAgPCBzaXplKTsKIAotICAgIGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gb3BlbiAvZGV2L3VyYW5kb20iKTsKIApAQCAtMTYwLDE4ICsxMzQsMzAgQEAKICAgICBpZiAoc2l6ZSA8PSAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChmZCA8IDApCi0gICAgewotICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOWElPIHx8Ci0gICAgICAgICAgICBlcnJubyA9PSBFTk9ERVYgfHwgZXJybm8gPT0gRUFDQ0VTKQotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvdXJhbmRvbSAob3IgZXF1aXZhbGVudCkgbm90IGZvdW5kIik7CisgICAgaWYgKHVyYW5kb21fZmQgPj0gMCkKKyAgICAgICAgZmQgPSB1cmFuZG9tX2ZkOworICAgIGVsc2UgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAorICAgICAgICAgICAgICAgIGVycm5vID09IEVOT0RFViB8fCBlcnJubyA9PSBFQUNDRVMpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXJhbmRvbV9mZCA+PSAwKSB7CisgICAgICAgICAgICAvKiB1cmFuZG9tX2ZkIHdhcyBpbml0aWFsaXplZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB3ZSB3ZXJlCisgICAgICAgICAgICAgICBub3QgaG9sZGluZyB0aGUgR0lMLCBrZWVwIGl0LiAqLworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgZmQgPSB1cmFuZG9tX2ZkOworICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgdXJhbmRvbV9mZCA9IGZkOwogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTE5NSwxMiArMTgxLDIwIEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCAlemkgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOwotICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZAorZGV2X3VyYW5kb21fY2xvc2Uodm9pZCkKK3sKKyAgICBpZiAodXJhbmRvbV9mZCA+PSAwKSB7CisgICAgICAgIGNsb3NlKHVyYW5kb21fZmQpOworICAgICAgICB1cmFuZG9tX2ZkID0gLTE7CisgICAgfQorfQorCiAjZW5kaWYgLyogIWRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoX19WTVMpICovCiAKIC8qIEZpbGwgYnVmZmVyIHdpdGggcHNldWRvLXJhbmRvbSBieXRlcyBnZW5lcmF0ZWQgYnkgYSBsaW5lYXIgY29uZ3J1ZW50CkBAIC0yNTUsOCArMjQ5LDkgQEAKIF9QeVJhbmRvbV9Jbml0KHZvaWQpCiB7CiAgICAgY2hhciAqZW52OwotICAgIHZvaWQgKnNlY3JldCA9ICZfUHlfSGFzaFNlY3JldDsKKyAgICB1bnNpZ25lZCBjaGFyICpzZWNyZXQgPSAodW5zaWduZWQgY2hhciAqKSZfUHlfSGFzaFNlY3JldC51YzsKICAgICBQeV9zc2l6ZV90IHNlY3JldF9zaXplID0gc2l6ZW9mKF9QeV9IYXNoU2VjcmV0X3QpOworICAgIGFzc2VydChzZWNyZXRfc2l6ZSA9PSBzaXplb2YoX1B5X0hhc2hTZWNyZXQudWMpKTsKIAogICAgIGlmIChfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg0LDE4ICsyNzksMjYgQEAKICAgICAgICAgICAgIG1lbXNldChzZWNyZXQsIDAsIHNlY3JldF9zaXplKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxjZ191cmFuZG9tKHNlZWQsICh1bnNpZ25lZCBjaGFyKilzZWNyZXQsIHNlY3JldF9zaXplKTsKKyAgICAgICAgICAgIGxjZ191cmFuZG9tKHNlZWQsIHNlY3JldCwgc2VjcmV0X3NpemUpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgKHZvaWQpd2luMzJfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKXNlY3JldCwgc2VjcmV0X3NpemUsIDApOworICAgICAgICAodm9pZCl3aW4zMl91cmFuZG9tKHNlY3JldCwgc2VjcmV0X3NpemUsIDApOwogI2Vsc2UgLyogI2lmZGVmIE1TX1dJTkRPV1MgKi8KICMgaWZkZWYgX19WTVMKLSAgICAgICAgdm1zX3VyYW5kb20oKHVuc2lnbmVkIGNoYXIgKilzZWNyZXQsIHNlY3JldF9zaXplLCAwKTsKKyAgICAgICAgdm1zX3VyYW5kb20oc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7CiAjIGVsc2UKLSAgICAgICAgZGV2X3VyYW5kb21fbm9yYWlzZSgoY2hhciopc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CisgICAgICAgIGRldl91cmFuZG9tX25vcmFpc2Uoc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CiAjIGVuZGlmCiAjZW5kaWYKICAgICB9CiB9CisKK3ZvaWQKK19QeVJhbmRvbV9GaW5pKHZvaWQpCit7CisjaWYgIWRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoX19WTVMpCisgICAgZGV2X3VyYW5kb21fY2xvc2UoKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N0cmR1cC5jIGIvUHl0aG9uL3N0cmR1cC5jCmluZGV4IDIwMTg3ZTAuLjc2OWQzZGIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zdHJkdXAuYworKysgYi9QeXRob24vc3RyZHVwLmMKQEAgLTYsNyArNiw3IEBACiBzdHJkdXAoY29uc3QgY2hhciAqc3RyKQogewogCWlmIChzdHIgIT0gTlVMTCkgewotCQlyZWdpc3RlciBjaGFyICpjb3B5ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7CisJCWNoYXIgKmNvcHkgPSBtYWxsb2Moc3RybGVuKHN0cikgKyAxKTsKIAkJaWYgKGNvcHkgIT0gTlVMTCkKIAkJCXJldHVybiBzdHJjcHkoY29weSwgc3RyKTsKIAl9CmRpZmYgLS1naXQgYS9QeXRob24vc3ltdGFibGUuYyBiL1B5dGhvbi9zeW10YWJsZS5jCmluZGV4IDFlMTNiNzkwLi5kYTE2NGFhIDEwMDY0NAotLS0gYS9QeXRob24vc3ltdGFibGUuYworKysgYi9QeXRob24vc3ltdGFibGUuYwpAQCAtMzcsMjQgKzM3LDE0IEBACiAgICAgc3RlLT5zdGVfdGFibGUgPSBzdDsKICAgICBzdGUtPnN0ZV9pZCA9IGs7IC8qIHN0ZSBvd25zIHJlZmVyZW5jZSB0byBrICovCiAKLSAgICBzdGUtPnN0ZV9uYW1lID0gbmFtZTsKICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgc3RlLT5zdGVfbmFtZSA9IG5hbWU7CiAKICAgICBzdGUtPnN0ZV9zeW1ib2xzID0gTlVMTDsKICAgICBzdGUtPnN0ZV92YXJuYW1lcyA9IE5VTEw7CiAgICAgc3RlLT5zdGVfY2hpbGRyZW4gPSBOVUxMOwogCi0gICAgc3RlLT5zdGVfc3ltYm9scyA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoc3RlLT5zdGVfc3ltYm9scyA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBzdGUtPnN0ZV92YXJuYW1lcyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHN0ZS0+c3RlX3Zhcm5hbWVzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoc3RlLT5zdGVfY2hpbGRyZW4gPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOworICAgIHN0ZS0+c3RlX2RpcmVjdGl2ZXMgPSBOVUxMOwogCiAgICAgc3RlLT5zdGVfdHlwZSA9IGJsb2NrOwogICAgIHN0ZS0+c3RlX3Vub3B0aW1pemVkID0gMDsKQEAgLTc1LDYgKzY1LDE1IEBACiAgICAgc3RlLT5zdGVfY2hpbGRfZnJlZSA9IDA7CiAgICAgc3RlLT5zdGVfZ2VuZXJhdG9yID0gMDsKICAgICBzdGUtPnN0ZV9yZXR1cm5zX3ZhbHVlID0gMDsKKyAgICBzdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlID0gMDsKKworICAgIHN0ZS0+c3RlX3N5bWJvbHMgPSBQeURpY3RfTmV3KCk7CisgICAgc3RlLT5zdGVfdmFybmFtZXMgPSBQeUxpc3RfTmV3KDApOworICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoc3RlLT5zdGVfc3ltYm9scyA9PSBOVUxMCisgICAgICAgIHx8IHN0ZS0+c3RlX3Zhcm5hbWVzID09IE5VTEwKKyAgICAgICAgfHwgc3RlLT5zdGVfY2hpbGRyZW4gPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOwogCiAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHN0LT5zdF9ibG9ja3MsIHN0ZS0+c3RlX2lkLCAoUHlPYmplY3QgKilzdGUpIDwgMCkKICAgICAgICAgZ290byBmYWlsOwpAQCAtMTAyLDYgKzEwMSw3IEBACiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9zeW1ib2xzKTsKICAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX3Zhcm5hbWVzKTsKICAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX2NoaWxkcmVuKTsKKyAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX2RpcmVjdGl2ZXMpOwogICAgIFB5T2JqZWN0X0RlbChzdGUpOwogfQogCkBAIC0xODgsNyArMTg4LDcgQEAKIAogc3RhdGljIGlkZW50aWZpZXIgdG9wID0gTlVMTCwgbGFtYmRhID0gTlVMTCwgZ2VuZXhwciA9IE5VTEwsCiAgICAgbGlzdGNvbXAgPSBOVUxMLCBzZXRjb21wID0gTlVMTCwgZGljdGNvbXAgPSBOVUxMLAotICAgIF9fY2xhc3NfXyA9IE5VTEwsIF9fbG9jYWxzX18gPSBOVUxMOworICAgIF9fY2xhc3NfXyA9IE5VTEw7CiAKICNkZWZpbmUgR0VUX0lERU5USUZJRVIoVkFSKSBcCiAgICAgKChWQVIpID8gKFZBUikgOiAoKFZBUikgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygjIFZBUikpKQpAQCAtMjMzLDcgKzIzMyw3IEBACiAjZGVmaW5lIENPTVBJTEVSX1NUQUNLX0ZSQU1FX1NDQUxFIDMKIAogc3RydWN0IHN5bXRhYmxlICoKLVB5U3ltdGFibGVfQnVpbGQobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSkKK1B5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpCiB7CiAgICAgc3RydWN0IHN5bXRhYmxlICpzdCA9IHN5bXRhYmxlX25ldygpOwogICAgIGFzZGxfc2VxICpzZXE7CkBAIC0yNDIsNyArMjQyLDEyIEBACiAgICAgaW50IHJlY3Vyc2lvbl9saW1pdCA9IFB5X0dldFJlY3Vyc2lvbkxpbWl0KCk7CiAKICAgICBpZiAoc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHN0OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBQeVN5bXRhYmxlX0ZyZWUoc3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKICAgICBzdC0+c3RfZmlsZW5hbWUgPSBmaWxlbmFtZTsKICAgICBzdC0+c3RfZnV0dXJlID0gZnV0dXJlOwogCkBAIC0zMDYsOSArMzExLDIzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0cnVjdCBzeW10YWJsZSAqCitQeVN5bXRhYmxlX0J1aWxkKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgZnV0dXJlKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBzdDsKK30KKwogdm9pZAogUHlTeW10YWJsZV9GcmVlKHN0cnVjdCBzeW10YWJsZSAqc3QpCiB7CisgICAgUHlfWERFQ1JFRihzdC0+c3RfZmlsZW5hbWUpOwogICAgIFB5X1hERUNSRUYoc3QtPnN0X2Jsb2Nrcyk7CiAgICAgUHlfWERFQ1JFRihzdC0+c3Rfc3RhY2spOwogICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilzdCk7CkBAIC0zNDYsNiArMzY1LDI0IEBACiAgICAgcmV0dXJuIChQeUxvbmdfQVNfTE9ORyh2KSA+PiBTQ09QRV9PRkZTRVQpICYgU0NPUEVfTUFTSzsKIH0KIAorc3RhdGljIGludAorZXJyb3JfYXRfZGlyZWN0aXZlKFB5U1RFbnRyeU9iamVjdCAqc3RlLCBQeU9iamVjdCAqbmFtZSkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgYXNzZXJ0KHN0ZS0+c3RlX2RpcmVjdGl2ZXMpOworICAgIGZvciAoaSA9IDA7IDsgaSsrKSB7CisgICAgICAgIGRhdGEgPSBQeUxpc3RfR0VUX0lURU0oc3RlLT5zdGVfZGlyZWN0aXZlcywgaSk7CisgICAgICAgIGFzc2VydChQeVR1cGxlX0NoZWNrRXhhY3QoZGF0YSkpOworICAgICAgICBpZiAoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAwKSA9PSBuYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAyKSkpOworICAgIHJldHVybiAwOworfQorCiAKIC8qIEFuYWx5emUgcmF3IHN5bWJvbCBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgc2NvcGUgb2YgZWFjaCBuYW1lLgogCkBAIC00MjAsMTYgKzQ1NywxMyBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBwYXJhbWV0ZXIgYW5kIGdsb2JhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9saW5lbm8sIHN0ZS0+c3RlX2NvbF9vZmZzZXQpOwotCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZmxhZ3MgJiBERUZfTk9OTE9DQUwpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSAnJVUnIGlzIG5vbmxvY2FsIGFuZCBnbG9iYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgU0VUX1NDT1BFKHNjb3BlcywgbmFtZSwgR0xPQkFMX0VYUExJQ0lUKTsKICAgICAgICAgaWYgKFB5U2V0X0FkZChnbG9iYWwsIG5hbWUpIDwgMCkKQEAgLTQ0MywxOSArNDc3LDE5IEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBwYXJhbWV0ZXIgYW5kIG5vbmxvY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGlmICghYm91bmQpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibm9ubG9jYWwgZGVjbGFyYXRpb24gbm90IGFsbG93ZWQgYXQgbW9kdWxlIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIVB5U2V0X0NvbnRhaW5zKGJvdW5kLCBuYW1lKSkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJubyBiaW5kaW5nIGZvciBub25sb2NhbCAnJVUnIGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgU0VUX1NDT1BFKHNjb3BlcywgbmFtZSwgRlJFRSk7CiAgICAgICAgIHN0ZS0+c3RlX2ZyZWUgPSAxOwpAQCAtNTAwLDEzICs1MzQsMTAgQEAKIAogICAgTm90ZSB0aGF0IHRoZSBjdXJyZW50IGJsb2NrJ3MgZnJlZSB2YXJpYWJsZXMgYXJlIGluY2x1ZGVkIGluIGZyZWUuCiAgICBUaGF0J3Mgc2FmZSBiZWNhdXNlIG5vIG5hbWUgY2FuIGJlIGZyZWUgYW5kIGxvY2FsIGluIHRoZSBzYW1lIHNjb3BlLgotCi0gICBUaGUgJ3Jlc3RyaWN0ZWQnIGFyZ3VtZW50IG1heSBiZSBzZXQgdG8gYSBzdHJpbmcgdG8gcmVzdHJpY3QgdGhlIGFuYWx5c2lzCi0gICB0byB0aGUgb25lIHZhcmlhYmxlIHdob3NlIG5hbWUgZXF1YWxzIHRoYXQgc3RyaW5nIChlLmcuICJfX2NsYXNzX18iKS4KICovCiAKIHN0YXRpYyBpbnQKLWFuYWx5emVfY2VsbHMoUHlPYmplY3QgKnNjb3BlcywgUHlPYmplY3QgKmZyZWUsIGNvbnN0IGNoYXIgKnJlc3RyaWN0ZWQpCithbmFseXplX2NlbGxzKFB5T2JqZWN0ICpzY29wZXMsIFB5T2JqZWN0ICpmcmVlKQogewogICAgIFB5T2JqZWN0ICpuYW1lLCAqdiwgKnZfY2VsbDsKICAgICBpbnQgc3VjY2VzcyA9IDA7CkBAIC01MjMsOSArNTU0LDYgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIVB5U2V0X0NvbnRhaW5zKGZyZWUsIG5hbWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyZXN0cmljdGVkICE9IE5VTEwgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsIHJlc3RyaWN0ZWQpKQotICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIC8qIFJlcGxhY2UgTE9DQUwgd2l0aCBDRUxMIGZvciB0aGlzIG5hbWUsIGFuZCByZW1vdmUKICAgICAgICAgICAgZnJvbSBmcmVlLiBJdCBpcyBzYWZlIHRvIHJlcGxhY2UgdGhlIHZhbHVlIG9mIG5hbWUKICAgICAgICAgICAgaW4gdGhlIGRpY3QsIGJlY2F1c2UgaXQgd2lsbCBub3QgY2F1c2UgYSByZXNpemUuCkBAIC01NDEsNiArNTY5LDIwIEBACiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKK3N0YXRpYyBpbnQKK2Ryb3BfY2xhc3NfZnJlZShQeVNURW50cnlPYmplY3QgKnN0ZSwgUHlPYmplY3QgKmZyZWUpCit7CisgICAgaW50IHJlczsKKyAgICBpZiAoIUdFVF9JREVOVElGSUVSKF9fY2xhc3NfXykpCisgICAgICAgIHJldHVybiAwOworICAgIHJlcyA9IFB5U2V0X0Rpc2NhcmQoZnJlZSwgX19jbGFzc19fKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHJlcykKKyAgICAgICAgc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA9IDE7CisgICAgcmV0dXJuIDE7Cit9CisKIC8qIENoZWNrIGZvciBpbGxlZ2FsIHN0YXRlbWVudHMgaW4gdW5vcHRpbWl6ZWQgbmFtZXNwYWNlcyAqLwogc3RhdGljIGludAogY2hlY2tfdW5vcHRpbWl6ZWQoY29uc3QgUHlTVEVudHJ5T2JqZWN0KiBzdGUpIHsKQEAgLTU2NCw4ICs2MDYsOSBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwgc3RlLT5zdGVfb3B0X2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX29wdF9jb2xfb2Zmc2V0KTsKKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfb3B0X2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9vcHRfY29sX29mZnNldCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTc3MSw3ICs4MTQsNiBAQAogICAgICAgICAvKiBTcGVjaWFsLWNhc2UgX19jbGFzc19fICovCiAgICAgICAgIGlmICghR0VUX0lERU5USUZJRVIoX19jbGFzc19fKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGFzc2VydChQeVNldF9Db250YWlucyhsb2NhbCwgX19jbGFzc19fKSA9PSAxKTsKICAgICAgICAgaWYgKFB5U2V0X0FkZChuZXdib3VuZCwgX19jbGFzc19fKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTgwNCwxMSArODQ2LDkgQEAKICAgICBQeV9ERUNSRUYodGVtcCk7CiAKICAgICAvKiBDaGVjayBpZiBhbnkgbG9jYWwgdmFyaWFibGVzIG11c3QgYmUgY29udmVydGVkIHRvIGNlbGwgdmFyaWFibGVzICovCi0gICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICBpZiAoc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlcywgbmV3ZnJlZSkpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZWxzZSBpZiAoc3RlLT5zdGVfdHlwZSA9PSBDbGFzc0Jsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlcywgbmV3ZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fY2xhc3NfXyIpKQorICAgIGVsc2UgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJiAhZHJvcF9jbGFzc19mcmVlKHN0ZSwgbmV3ZnJlZSkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgLyogUmVjb3JkcyB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMgaW4gdGhlIHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIGlmICghdXBkYXRlX3N5bWJvbHMoc3RlLT5zdGVfc3ltYm9scywgc2NvcGVzLCBib3VuZCwgbmV3ZnJlZSwKQEAgLTg5OSwxNSArOTM5LDIwIEBACiBzdGF0aWMgaW50CiBzeW10YWJsZV93YXJuKHN0cnVjdCBzeW10YWJsZSAqc3QsIGNoYXIgKm1zZywgaW50IGxpbmVubykKIHsKLSAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywgc3QtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBOVUxMLCBOVUxMKSA8IDApICAgICB7CisgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtc2cpOworICAgIGlmIChtZXNzYWdlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlFeGNfU3ludGF4V2FybmluZywgbWVzc2FnZSwgc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBOVUxMLCBOVUxMKSA8IDApICAgICB7CisgICAgICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3ludGF4V2FybmluZykpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwgbXNnKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsIHN0LT5zdF9jdXItPnN0ZV9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtOTkwLDkgKzEwMzUsOSBAQAogICAgICAgICBpZiAoKGZsYWcgJiBERUZfUEFSQU0pICYmICh2YWwgJiBERUZfUEFSQU0pKSB7CiAgICAgICAgICAgICAvKiBJcyBpdCBiZXR0ZXIgdG8gdXNlICdtYW5nbGVkJyBvciAnbmFtZScgaGVyZT8gKi8KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwgRFVQTElDQVRFX0FSR1VNRU5ULCBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICB2YWwgfD0gZmxhZzsKQEAgLTExMDIsNiArMTE0NywyNSBAQAogCiAKIHN0YXRpYyBpbnQKK3N5bXRhYmxlX3JlY29yZF9kaXJlY3RpdmUoc3RydWN0IHN5bXRhYmxlICpzdCwgaWRlbnRpZmllciBuYW1lLCBzdG10X3R5IHMpCit7CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgaW50IHJlczsKKyAgICBpZiAoIXN0LT5zdF9jdXItPnN0ZV9kaXJlY3RpdmVzKSB7CisgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9kaXJlY3RpdmVzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBkYXRhID0gUHlfQnVpbGRWYWx1ZSgiKE9paSkiLCBuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmVzID0gUHlMaXN0X0FwcGVuZChzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcywgZGF0YSk7CisgICAgUHlfREVDUkVGKGRhdGEpOworICAgIHJldHVybiByZXMgPT0gMDsKK30KKworCitzdGF0aWMgaW50CiBzeW10YWJsZV92aXNpdF9zdG10KHN0cnVjdCBzeW10YWJsZSAqc3QsIHN0bXRfdHkgcykKIHsKICAgICBpZiAoKytzdC0+cmVjdXJzaW9uX2RlcHRoID4gc3QtPnJlY3Vyc2lvbl9saW1pdCkgewpAQCAtMTE0NiwxMyArMTIxMCw2IEBACiAgICAgICAgIGlmICghc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHMtPnYuQ2xhc3NEZWYubmFtZSwgQ2xhc3NCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXMsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCkpCiAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKLSAgICAgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19jbGFzc19fLCBERUZfTE9DQUwpIHx8Ci0gICAgICAgICAgICAhR0VUX0lERU5USUZJRVIoX19sb2NhbHNfXykgfHwKLSAgICAgICAgICAgICFzeW10YWJsZV9hZGRfZGVmKHN0LCBfX2xvY2Fsc19fLCBERUZfUEFSQU0pKSB7Ci0gICAgICAgICAgICBzeW10YWJsZV9leGl0X2Jsb2NrKHN0LCBzKTsKLSAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOwotICAgICAgICB9CiAgICAgICAgIHRtcCA9IHN0LT5zdF9wcml2YXRlOwogICAgICAgICBzdC0+c3RfcHJpdmF0ZSA9IHMtPnYuQ2xhc3NEZWYubmFtZTsKICAgICAgICAgVklTSVRfU0VRKHN0LCBzdG10LCBzLT52LkNsYXNzRGVmLmJvZHkpOwpAQCAtMTI0MCwxNCArMTI5Nyw3IEBACiAgICAgICAgIGFzZGxfc2VxICpzZXEgPSBzLT52Lkdsb2JhbC5uYW1lczsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFzZGxfc2VxX0xFTihzZXEpOyBpKyspIHsKICAgICAgICAgICAgIGlkZW50aWZpZXIgbmFtZSA9IChpZGVudGlmaWVyKWFzZGxfc2VxX0dFVChzZXEsIGkpOwotICAgICAgICAgICAgbG9uZyBjdXI7Ci0gICAgICAgICAgICBpZiAoc3QtPnN0X2N1ci0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJgotICAgICAgICAgICAgICAgICFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiX19jbGFzc19fIikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsICJjYW5ub3QgbWFrZSBfX2NsYXNzX18gZ2xvYmFsIik7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXIgPSBzeW10YWJsZV9sb29rdXAoc3QsIG5hbWUpOworICAgICAgICAgICAgbG9uZyBjdXIgPSBzeW10YWJsZV9sb29rdXAoc3QsIG5hbWUpOwogICAgICAgICAgICAgaWYgKGN1ciA8IDApCiAgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgICAgICBpZiAoY3VyICYgKERFRl9MT0NBTCB8IFVTRSkpIHsKQEAgLTEyNjgsNiArMTMxOCw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIG5hbWUsIERFRl9HTE9CQUwpKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOworICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0LCBuYW1lLCBzKSkKKyAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjk3LDYgKzEzNDksOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBuYW1lLCBERUZfTk9OTE9DQUwpKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOworICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0LCBuYW1lLCBzKSkKKyAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDA3LDYgKzE0NjEsNyBAQAogICAgIGNhc2UgU3RyX2tpbmQ6CiAgICAgY2FzZSBCeXRlc19raW5kOgogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgogICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovCiAgICAgICAgIGJyZWFrOwogICAgIC8qIFRoZSBmb2xsb3dpbmcgZXhwcnMgY2FuIGJlIGFzc2lnbm1lbnQgdGFyZ2V0cy4gKi8KQEAgLTE0OTksMTAgKzE1NTQsMTAgQEAKIAogICAgIGlmIChhLT5hcmdzICYmICFzeW10YWJsZV92aXNpdF9hcmdhbm5vdGF0aW9ucyhzdCwgYS0+YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhLT52YXJhcmdhbm5vdGF0aW9uKQotICAgICAgICBWSVNJVChzdCwgZXhwciwgYS0+dmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgaWYgKGEtPmt3YXJnYW5ub3RhdGlvbikKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPmt3YXJnYW5ub3RhdGlvbik7CisgICAgaWYgKGEtPnZhcmFyZyAmJiBhLT52YXJhcmctPmFubm90YXRpb24pCisgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT52YXJhcmctPmFubm90YXRpb24pOworICAgIGlmIChhLT5rd2FyZyAmJiBhLT5rd2FyZy0+YW5ub3RhdGlvbikKKyAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPmt3YXJnLT5hbm5vdGF0aW9uKTsKICAgICBpZiAoYS0+a3dvbmx5YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocy0+di5GdW5jdGlvbkRlZi5yZXR1cm5zKQpAQCAtMTUyMSwxMiArMTU3NiwxMiBAQAogICAgIGlmIChhLT5rd29ubHlhcmdzICYmICFzeW10YWJsZV92aXNpdF9wYXJhbXMoc3QsIGEtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoYS0+dmFyYXJnKSB7Ci0gICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+dmFyYXJnLCBERUZfUEFSQU0pKQorICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPnZhcmFyZy0+YXJnLCBERUZfUEFSQU0pKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV92YXJhcmdzID0gMTsKICAgICB9CiAgICAgaWYgKGEtPmt3YXJnKSB7Ci0gICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+a3dhcmcsIERFRl9QQVJBTSkpCisgICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+a3dhcmctPmFyZywgREVGX1BBUkFNKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfdmFya2V5d29yZHMgPSAxOwogICAgIH0KQEAgLTE1ODcsNyArMTY0Miw3IEBACiAgICAgICAgICAgICBpbnQgbGluZW5vID0gc3QtPnN0X2N1ci0+c3RlX2xpbmVubzsKICAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0ID0gc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQ7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIElNUE9SVF9TVEFSX1dBUk5JTkcpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsIGxpbmVubywgY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsIGxpbmVubywgY29sX29mZnNldCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcmVfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5c21vZHVsZS5jIGIvUHl0aG9uL3N5c21vZHVsZS5jCmluZGV4IGRmOWRmYjEuLjQwMjhhMDEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zeXNtb2R1bGUuYworKysgYi9QeXRob24vc3lzbW9kdWxlLmMKQEAgLTQxLDYgKzQxLDI2IEBACiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCitfUHlfSURFTlRJRklFUihfKTsKK19QeV9JREVOVElGSUVSKF9fc2l6ZW9mX18pOworX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKK19QeV9JREVOVElGSUVSKHBhdGgpOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CitfUHlfSURFTlRJRklFUih3cml0ZSk7CisKK1B5T2JqZWN0ICoKK19QeVN5c19HZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5KQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlPYmplY3QgKnNkID0gdHN0YXRlLT5pbnRlcnAtPnN5c2RpY3Q7CisgICAgaWYgKHNkID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlEaWN0X0dldEl0ZW1JZChzZCwga2V5KTsKK30KKwogUHlPYmplY3QgKgogUHlTeXNfR2V0T2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01Miw2ICs3MiwyMSBAQAogfQogCiBpbnQKK19QeVN5c19TZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5LCBQeU9iamVjdCAqdikKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5T2JqZWN0ICpzZCA9IHRzdGF0ZS0+aW50ZXJwLT5zeXNkaWN0OworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHNkLCBrZXkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9QeURpY3RfRGVsSXRlbUlkKHNkLCBrZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBfUHlEaWN0X1NldEl0ZW1JZChzZCwga2V5LCB2KTsKK30KKworaW50CiBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKQEAgLTc5LDggKzExNCw2IEBACiAgICAgUHlPYmplY3QgKmVuY29kZWQsICplc2NhcGVkX3N0ciwgKnJlcHJfc3RyLCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIGNoYXIgKnN0ZG91dF9lbmNvZGluZ19zdHI7CiAgICAgaW50IHJldDsKLSAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7Ci0gICAgX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKIAogICAgIHN0ZG91dF9lbmNvZGluZyA9IF9QeU9iamVjdF9HZXRBdHRySWQob3V0ZiwgJlB5SWRfZW5jb2RpbmcpOwogICAgIGlmIChzdGRvdXRfZW5jb2RpbmcgPT0gTlVMTCkKQEAgLTEwMSw3ICsxMzQsNiBAQAogCiAgICAgYnVmZmVyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvdXRmLCAmUHlJZF9idWZmZXIpOwogICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJ1ZmZlciwgJlB5SWRfd3JpdGUsICIoTykiLCBlbmNvZGVkKTsKICAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CiAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKQEAgLTEzNywxMCArMTY5LDExIEBACiAgICAgUHlPYmplY3QgKm91dGY7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7Ci0gICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIHN0YXRpYyBQeU9iamVjdCAqbmV3bGluZSA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUihfKTsKIAorICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQobW9kdWxlcywgJlB5SWRfYnVpbHRpbnMpOwogICAgIGlmIChidWlsdGlucyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IGJ1aWx0aW5zIG1vZHVsZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1NSw3ICsxODgsNyBAQAogICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChidWlsdGlucywgJlB5SWRfXywgUHlfTm9uZSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgb3V0ZiA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgb3V0ZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwogICAgIGlmIChvdXRmID09IE5VTEwgfHwgb3V0ZiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMsNyArMjA2LDEyIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIG91dGYpICE9IDApCisgICAgaWYgKG5ld2xpbmUgPT0gTlVMTCkgeworICAgICAgICBuZXdsaW5lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlxuIik7CisgICAgICAgIGlmIChuZXdsaW5lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuZXdsaW5lLCBvdXRmLCBQeV9QUklOVF9SQVcpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGJ1aWx0aW5zLCAmUHlJZF9fLCBvKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMzMiwxMiArMzcwLDE2IEBACiBjYWxsX3RyYW1wb2xpbmUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCogY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMyk7CisgICAgUHlPYmplY3QgKmFyZ3M7CiAgICAgUHlPYmplY3QgKndoYXRzdHI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorICAgIGFyZ3MgPSBQeVR1cGxlX05ldygzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9JTkNSRUYoZnJhbWUpOwogICAgIHdoYXRzdHIgPSB3aGF0c3RyaW5nc1t3aGF0XTsKICAgICBQeV9JTkNSRUYod2hhdHN0cik7CkBAIC0zNDksNyArMzkxLDYgQEAKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDIsIGFyZyk7CiAKICAgICAvKiBjYWxsIHRoZSBQeXRob24tbGV2ZWwgZnVuY3Rpb24gKi8KLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmcmFtZSk7CiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoY2FsbGJhY2ssIGFyZ3MpOwogICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGZyYW1lLCAxKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCkBAIC02MTcsNyArNjU4LDcgQEAKICJoYXNoX2luZm9cblwKIFxuXAogQSBzdHJ1Y3Qgc2VxdWVuY2UgcHJvdmlkaW5nIHBhcmFtZXRlcnMgdXNlZCBmb3IgY29tcHV0aW5nXG5cCi1udW1lcmljIGhhc2hlcy4gIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CitoYXNoZXMuIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIGhhc2hfaW5mb19maWVsZHNbXSA9IHsKICAgICB7IndpZHRoIiwgIndpZHRoIG9mIHRoZSB0eXBlIHVzZWQgZm9yIGhhc2hpbmcsIGluIGJpdHMifSwKQEAgLTYyNiw2ICs2NjcsMTEgQEAKICAgICB7ImluZiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgcG9zaXRpdmUgaW5maW5pdHkifSwKICAgICB7Im5hbiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgbmFuIn0sCiAgICAgeyJpbWFnIiwgIm11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIifSwKKyAgICB7ImFsZ29yaXRobSIsICJuYW1lIG9mIHRoZSBhbGdvcml0aG0gZm9yIGhhc2hpbmcgb2Ygc3RyLCBieXRlcyBhbmQgIgorICAgICAgICAgICAgICAgICAgIm1lbW9yeXZpZXdzIn0sCisgICAgeyJoYXNoX2JpdHMiLCAiaW50ZXJuYWwgb3V0cHV0IHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7InNlZWRfYml0cyIsICJzZWVkIHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7ImN1dG9mZiIsICJzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uIGN1dG9mZiJ9LAogICAgIHtOVUxMLCBOVUxMfQogfTsKIApAQCAtNjMzLDcgKzY3OSw3IEBACiAgICAgInN5cy5oYXNoX2luZm8iLAogICAgIGhhc2hfaW5mb19kb2MsCiAgICAgaGFzaF9pbmZvX2ZpZWxkcywKLSAgICA1LAorICAgIDksCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjQxLDkgKzY4NywxMSBAQAogewogICAgIFB5T2JqZWN0ICpoYXNoX2luZm87CiAgICAgaW50IGZpZWxkID0gMDsKKyAgICBQeUhhc2hfRnVuY0RlZiAqaGFzaGZ1bmM7CiAgICAgaGFzaF9pbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJkhhc2hfSW5mb1R5cGUpOwogICAgIGlmIChoYXNoX2luZm8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGFzaGZ1bmMgPSBQeUhhc2hfR2V0RnVuY0RlZigpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKDgqc2l6ZW9mKFB5X2hhc2hfdCkpKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKQEAgLTY1NCw2ICs3MDIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhfUHlIQVNIX05BTikpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKF9QeUhBU0hfSU1BRykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoaGFzaGZ1bmMtPm5hbWUpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhoYXNoZnVuYy0+aGFzaF9iaXRzKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoaGFzaGZ1bmMtPnNlZWRfYml0cykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKFB5X0hBU0hfQ1VUT0ZGKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfQ0xFQVIoaGFzaF9pbmZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03NzQsNyArODMwLDcgQEAKIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlXG5cCiBhIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhc1xuXAogc3lzLnNldGRsb3BlbmZsYWdzKDApLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXNcblwKLXN5cy5zZXRkbG9wZW5mbGFncyhjdHlwZXMuUlRMRF9HTE9CQUwpLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXNcblwKK3N5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTCkuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlc1xuXAogY2FuIGJlIGZvdW5kIGluIHRoZSBvcyBtb2R1bGUgKFJUTERfeHh4IGNvbnN0YW50cywgZS5nLiBvcy5SVExEX0xBWlkpLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzkwLDcgKzg0Niw3IEBACiAiZ2V0ZGxvcGVuZmxhZ3MoKSAtPiBpbnRcblwKIFxuXAogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciBkbG9wZW4gY2FsbHMuXG5cCi1UaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIGN0eXBlcyBhbmQgRExGQ04gbW9kdWxlcy4iKTsKK1RoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgb3MgbW9kdWxlLiIpOwogCiAjZW5kaWYgIC8qIEhBVkVfRExPUEVOICovCiAKQEAgLTgxOCw3ICs4NzQsNiBAQAogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqZWN0IiwgImRlZmF1bHQiLCAwfTsKICAgICBQeU9iamVjdCAqbywgKmRmbHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptZXRob2Q7Ci0gICAgX1B5X0lERU5USUZJRVIoX19zaXplb2ZfXyk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOmdldHNpemVvZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbywgJmRmbHQpKQpAQCAtODk0LDYgKzk0OSwxOSBAQAogcmVmZXJlbmNlIGFzIGFuIGFyZ3VtZW50IHRvIGdldHJlZmNvdW50KCkuIgogKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3N5c19nZXRhbGxvY2F0ZWRibG9ja3MoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkpOworfQorCitQeURvY19TVFJWQVIoZ2V0YWxsb2NhdGVkYmxvY2tzX2RvYywKKyJnZXRhbGxvY2F0ZWRibG9ja3MoKSAtPiBpbnRlZ2VyXG5cCitcblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZCwgcmVnYXJkbGVzcyBvZiB0aGVpclxuXAorc2l6ZS4iCispOworCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiBzdGF0aWMgUHlPYmplY3QgKgogc3lzX2dldGNvdW50cyhQeU9iamVjdCAqc2VsZikKQEAgLTEwNjIsNiArMTEzMCw4IEBACiAgICAgeyJnZXRkbG9wZW5mbGFncyIsIChQeUNGdW5jdGlvbilzeXNfZ2V0ZGxvcGVuZmxhZ3MsIE1FVEhfTk9BUkdTLAogICAgICBnZXRkbG9wZW5mbGFnc19kb2N9LAogI2VuZGlmCisgICAgeyJnZXRhbGxvY2F0ZWRibG9ja3MiLCAoUHlDRnVuY3Rpb24pc3lzX2dldGFsbG9jYXRlZGJsb2NrcywgTUVUSF9OT0FSR1MsCisgICAgICBnZXRhbGxvY2F0ZWRibG9ja3NfZG9jfSwKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICB7ImdldGNvdW50cyIsICAgICAgIChQeUNGdW5jdGlvbilzeXNfZ2V0Y291bnRzLCBNRVRIX05PQVJHU30sCiAjZW5kaWYKQEAgLTEyODMsNiArMTM1Myw3IEBACiBleGVjdXRhYmxlIC0tIGFic29sdXRlIHBhdGggb2YgdGhlIGV4ZWN1dGFibGUgYmluYXJ5IG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXJcblwKIGZsb2F0X2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmxvYXQgaW1wbGVtZW50YXRpb24uXG5cCiBmbG9hdF9yZXByX3N0eWxlIC0tIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiByZXByKCkgb3V0cHV0IGZvciBmbG9hdHNcblwKK2hhc2hfaW5mbyAtLSBhIHN0cnVjdCBzZXF1ZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXNoIGFsZ29yaXRobS5cblwKIGhleHZlcnNpb24gLS0gdmVyc2lvbiBpbmZvcm1hdGlvbiBlbmNvZGVkIGFzIGEgc2luZ2xlIGludGVnZXJcblwKIGltcGxlbWVudGF0aW9uIC0tIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBpbmZvcm1hdGlvbi5cblwKIGludF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludCBpbXBsZW1lbnRhdGlvbi5cblwKQEAgLTEzNDksMTQgKzE0MjAsMTIgQEAKICAgICB7Im5vX3NpdGUiLCAgICAgICAgICAgICAgICAgIi1TIn0sCiAgICAgeyJpZ25vcmVfZW52aXJvbm1lbnQiLCAgICAgICItRSJ9LAogICAgIHsidmVyYm9zZSIsICAgICAgICAgICAgICAgICAiLXYifSwKLSNpZmRlZiBSSVNDT1MKLSAgICB7InJpc2Nvc193aW1wIiwgICAgICAgICAgICAgIj8/PyJ9LAotI2VuZGlmCiAgICAgLyogeyJ1bmJ1ZmZlcmVkIiwgICAgICAgICAgICAgICAgICAgIi11In0sICovCiAgICAgLyogeyJza2lwX2ZpcnN0IiwgICAgICAgICAgICAgICAgICAgIi14In0sICovCiAgICAgeyJieXRlc193YXJuaW5nIiwgICAgICAgICAgICItYiJ9LAogICAgIHsicXVpZXQiLCAgICAgICAgICAgICAgICAgICAiLXEifSwKICAgICB7Imhhc2hfcmFuZG9taXphdGlvbiIsICAgICAgIi1SIn0sCisgICAgeyJpc29sYXRlZCIsICAgICAgICAgICAgICAgICItSSJ9LAogICAgIHswfQogfTsKIApAQCAtMTM2NCwxMSArMTQzMyw3IEBACiAgICAgInN5cy5mbGFncyIsICAgICAgICAvKiBuYW1lICovCiAgICAgZmxhZ3NfX2RvY19fLCAgICAgICAvKiBkb2MgKi8KICAgICBmbGFnc19maWVsZHMsICAgICAgIC8qIGZpZWxkcyAqLwotI2lmZGVmIFJJU0NPUwogICAgIDEzCi0jZWxzZQotICAgIDEyCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTEzOTMsMTQgKzE0NTgsMTIgQEAKICAgICBTZXRGbGFnKFB5X05vU2l0ZUZsYWcpOwogICAgIFNldEZsYWcoUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnKTsKICAgICBTZXRGbGFnKFB5X1ZlcmJvc2VGbGFnKTsKLSNpZmRlZiBSSVNDT1MKLSAgICBTZXRGbGFnKFB5X1JJU0NPU1dpbXBGbGFnKTsKLSNlbmRpZgogICAgIC8qIFNldEZsYWcoc2F3X3VuYnVmZmVyZWRfZmxhZyk7ICovCiAgICAgLyogU2V0RmxhZyhza2lwZmlyc3RsaW5lKTsgKi8KICAgICBTZXRGbGFnKFB5X0J5dGVzV2FybmluZ0ZsYWcpOwogICAgIFNldEZsYWcoUHlfUXVpZXRGbGFnKTsKICAgICBTZXRGbGFnKFB5X0hhc2hSYW5kb21pemF0aW9uRmxhZyk7CisgICAgU2V0RmxhZyhQeV9Jc29sYXRlZEZsYWcpOwogI3VuZGVmIFNldEZsYWcKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CkBAIC0xNTYwLDE4ICsxNjIzLDM1IEBACiBQeU9iamVjdCAqCiBfUHlTeXNfSW5pdCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqdiwgKnN5c2RpY3QsICp2ZXJzaW9uX2luZm87Ci0gICAgY2hhciAqczsKKyAgICBQeU9iamVjdCAqbSwgKnN5c2RpY3QsICp2ZXJzaW9uX2luZm87CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzeXNtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN5c2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HKGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICBcCi0gICAgdiA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAodiAhPSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICAgICBcCi0gICAgUHlfWERFQ1JFRih2KQorI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVyhrZXksIHZhbHVlKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IHJlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqdiA9ICh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICh2ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICBcCisgICAgICAgIGlmIChyZXMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklORyhrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBQeV9ERUNSRUYodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChyZXMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogICAgIC8qIENoZWNrIHRoYXQgc3RkaW4gaXMgbm90IGEgZGlyZWN0b3J5CiAgICAgVXNpbmcgc2hlbGwgcmVkaXJlY3Rpb24sIHlvdSBjYW4gcmVkaXJlY3Qgc3RkaW4gdG8gYSBkaXJlY3RvcnksCkBAIC0xNTkzLDEwICsxNjczLDEwIEBACiAKICAgICAvKiBzdGRpbi9zdGRvdXQvc3RkZXJyIGFyZSBub3cgc2V0IGJ5IHB5dGhvbnJ1bi5jICovCiAKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX19kaXNwbGF5aG9va19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZGlzcGxheWhvb2siKSk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl9fZXhjZXB0aG9va19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZXhjZXB0aG9vayIpKTsKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygiX19kaXNwbGF5aG9va19fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZGlzcGxheWhvb2siKSk7CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl9fZXhjZXB0aG9va19fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZXhjZXB0aG9vayIpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJ2ZXJzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRWZXJzaW9uKCkpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJoZXh2ZXJzaW9uIiwKQEAgLTE2MzAsMjggKzE3MTAsMjQgQEAKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJpbnRfaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfR2V0SW5mbygpKTsKICAgICAvKiBpbml0aWFsaXplIGhhc2hfaW5mbyAqLwotICAgIGlmIChIYXNoX0luZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmSGFzaF9JbmZvVHlwZSwgJmhhc2hfaW5mb19kZXNjKTsKKyAgICBpZiAoSGFzaF9JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZIYXNoX0luZm9UeXBlLCAmaGFzaF9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJoYXNoX2luZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2hhc2hfaW5mbygpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJtYXh1bmljb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZygweDEwRkZGRikpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ1aWx0aW5fbW9kdWxlX25hbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbl9tb2R1bGVfbmFtZXMoKSk7Ci0gICAgewotICAgICAgICAvKiBBc3N1bWVzIHRoYXQgbG9uZ3MgYXJlIGF0IGxlYXN0IDIgYnl0ZXMgbG9uZy4KLSAgICAgICAgICAgU2hvdWxkIGJlIHNhZmUhICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyID0gMTsKLSAgICAgICAgY2hhciAqdmFsdWU7CisjaWYgUFlfQklHX0VORElBTgorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZygiYmlnIikpOworI2Vsc2UKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoImxpdHRsZSIpKTsKKyNlbmRpZgogCi0gICAgICAgIHMgPSAoY2hhciAqKSAmbnVtYmVyOwotICAgICAgICBpZiAoc1swXSA9PSAwKQotICAgICAgICAgICAgdmFsdWUgPSAiYmlnIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSAibGl0dGxlIjsKLSAgICAgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyh2YWx1ZSkpOwotICAgIH0KICNpZmRlZiBNU19DT1JFRExMCiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZGxsaGFuZGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVm9pZFB0cihQeVdpbl9ETExoTW9kdWxlKSk7CkBAIC0xNjY0LDIyICsxNzQwLDIyIEBACiAjZW5kaWYKICAgICBpZiAod2Fybm9wdGlvbnMgPT0gTlVMTCkgewogICAgICAgICB3YXJub3B0aW9ucyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmICh3YXJub3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9JTkNSRUYod2Fybm9wdGlvbnMpOwogICAgIH0KLSAgICBpZiAod2Fybm9wdGlvbnMgIT0gTlVMTCkgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAid2Fybm9wdGlvbnMiLCB3YXJub3B0aW9ucyk7Ci0gICAgfQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJ3YXJub3B0aW9ucyIsIHdhcm5vcHRpb25zKTsKIAotICAgIHYgPSBnZXRfeG9wdGlvbnMoKTsKLSAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfeG9wdGlvbnMiLCB2KTsKLSAgICB9CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl94b3B0aW9ucyIsIGdldF94b3B0aW9ucygpKTsKIAogICAgIC8qIHZlcnNpb25faW5mbyAqLwotICAgIGlmIChWZXJzaW9uSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZWZXJzaW9uSW5mb1R5cGUsICZ2ZXJzaW9uX2luZm9fZGVzYyk7CisgICAgaWYgKFZlcnNpb25JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZWZXJzaW9uSW5mb1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmVyc2lvbl9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICB2ZXJzaW9uX2luZm8gPSBtYWtlX3ZlcnNpb25faW5mbygpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInZlcnNpb25faW5mbyIsIHZlcnNpb25faW5mbyk7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwpAQCAtMTY5MCw4ICsxNzY2LDEwIEBACiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaW1wbGVtZW50YXRpb24iLCBtYWtlX2ltcGxfaW5mbyh2ZXJzaW9uX2luZm8pKTsKIAogICAgIC8qIGZsYWdzICovCi0gICAgaWYgKEZsYWdzVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkZsYWdzVHlwZSwgJmZsYWdzX2Rlc2MpOworICAgIGlmIChGbGFnc1R5cGUudHBfbmFtZSA9PSAwKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmRmxhZ3NUeXBlLCAmZmxhZ3NfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImZsYWdzIiwgbWFrZV9mbGFncygpKTsKICAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCiAgICAgRmxhZ3NUeXBlLnRwX2luaXQgPSBOVUxMOwpAQCAtMTcwMSw3ICsxNzc5LDkgQEAKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgLyogZ2V0d2luZG93c3ZlcnNpb24gKi8KICAgICBpZiAoV2luZG93c1ZlcnNpb25UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2luZG93c1ZlcnNpb25UeXBlLCAmd2luZG93c192ZXJzaW9uX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJldpbmRvd3NWZXJzaW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dzX3ZlcnNpb25fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwogICAgIFdpbmRvd3NWZXJzaW9uVHlwZS50cF9pbml0ID0gTlVMTDsKICAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfbmV3ID0gTlVMTDsKQEAgLTE3NjUsNyArMTg0NSw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAgICAgaWYgKCh2ID0gbWFrZXBhdGhvYmplY3QocGF0aCwgREVMSU0pKSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBjcmVhdGUgc3lzLnBhdGgiKTsKLSAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJwYXRoIiwgdikgIT0gMCkKKyAgICBpZiAoX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BhdGgsIHYpICE9IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGFzc2lnbiBzeXMucGF0aCIpOwogICAgIFB5X0RFQ1JFRih2KTsKIH0KQEAgLTE4MzQsNyArMTkxNCw3IEBACiAgICAgd2NoYXJfdCBmdWxscGF0aFtNQVhfUEFUSF07CiAjZW5kaWYKIAotICAgIHBhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKKyAgICBwYXRoID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BhdGgpOwogICAgIGlmIChwYXRoID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTkzMyw3ICsyMDEzLDcgQEAKIHZvaWQKIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogewotICAgIFB5U3lzX1NldEFyZ3ZFeChhcmdjLCBhcmd2LCAxKTsKKyAgICBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgUHlfSXNvbGF0ZWRGbGFnID09IDApOwogfQogCiAvKiBSZWltcGxlbWVudGF0aW9uIG9mIFB5RmlsZV9Xcml0ZVN0cmluZygpIG5vIGNhbGxpbmcgaW5kaXJlY3RseQpAQCAtMTk0NCw3ICsyMDI0LDYgQEAKIHsKICAgICBQeU9iamVjdCAqd3JpdGVyID0gTlVMTCwgKmFyZ3MgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKICAgICBpbnQgZXJyOwotICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKIAogICAgIGlmIChmaWxlID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTIwMjEsNyArMjEwMCw3IEBACiAgKi8KIAogc3RhdGljIHZvaWQKLXN5c193cml0ZShjaGFyICpuYW1lLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorc3lzX3dyaXRlKF9QeV9JZGVudGlmaWVyICprZXksIEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCiB7CiAgICAgUHlPYmplY3QgKmZpbGU7CiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKQEAgLTIwMjksNyArMjEwOCw3IEBACiAgICAgaW50IHdyaXR0ZW47CiAKICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLSAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KG5hbWUpOworICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoa2V5KTsKICAgICB3cml0dGVuID0gUHlPU192c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZm9ybWF0LCB2YSk7CiAgICAgaWYgKHN5c19weWZpbGVfd3JpdGUoYnVmZmVyLCBmaWxlKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0yMDQ5LDcgKzIxMjgsNyBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfd3JpdGUoInN0ZG91dCIsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CisgICAgc3lzX3dyaXRlKCZQeUlkX3N0ZG91dCwgc3Rkb3V0LCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQogCkBAIC0yMDU5LDE5ICsyMTM4LDE5IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c193cml0ZSgic3RkZXJyIiwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKKyAgICBzeXNfd3JpdGUoJlB5SWRfc3RkZXJyLCBzdGRlcnIsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1zeXNfZm9ybWF0KGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCitzeXNfZm9ybWF0KF9QeV9JZGVudGlmaWVyICprZXksIEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCiB7CiAgICAgUHlPYmplY3QgKmZpbGUsICptZXNzYWdlOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgY2hhciAqdXRmODsKIAogICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwotICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QobmFtZSk7CisgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZChrZXkpOwogICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YSk7CiAgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkgewogICAgICAgICBpZiAoc3lzX3B5ZmlsZV93cml0ZV91bmljb2RlKG1lc3NhZ2UsIGZpbGUpICE9IDApIHsKQEAgLTIwOTEsNyArMjE3MCw3IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c19mb3JtYXQoInN0ZG91dCIsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CisgICAgc3lzX2Zvcm1hdCgmUHlJZF9zdGRvdXQsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIApAQCAtMjEwMSw2ICsyMTgwLDYgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX2Zvcm1hdCgic3RkZXJyIiwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKKyAgICBzeXNfZm9ybWF0KCZQeUlkX3N0ZGVyciwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZC5jIGIvUHl0aG9uL3RocmVhZC5jCmluZGV4IGU1NWQzNDIuLjg1NDA5NDIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWQuYworKysgYi9QeXRob24vdGhyZWFkLmMKQEAgLTkxLDEwICs5MSw2IEBACiAjaW5jbHVkZSAidGhyZWFkX250LmgiCiAjZW5kaWYKIAotI2lmZGVmIE9TMl9USFJFQURTCi0jZGVmaW5lIFBZVEhSRUFEX05BTUUgIm9zMiIKLSNpbmNsdWRlICJ0aHJlYWRfb3MyLmgiCi0jZW5kaWYKIAogLyoKICNpZmRlZiBGT09CQVJfVEhSRUFEUwpAQCAtMjM1LDcgKzIzMSw3IEBACiAgICAgICAgIGFzc2VydChwID09IE5VTEwpOwogICAgICAgICBnb3RvIERvbmU7CiAgICAgfQotICAgIHAgPSAoc3RydWN0IGtleSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGtleSkpOworICAgIHAgPSAoc3RydWN0IGtleSAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yoc3RydWN0IGtleSkpOwogICAgIGlmIChwICE9IE5VTEwpIHsKICAgICAgICAgcC0+aWQgPSBpZDsKICAgICAgICAgcC0+a2V5ID0ga2V5OwpAQCAtMjc0LDcgKzI3MCw3IEBACiAgICAgd2hpbGUgKChwID0gKnEpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHAtPmtleSA9PSBrZXkpIHsKICAgICAgICAgICAgICpxID0gcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilwKTsKICAgICAgICAgICAgIC8qIE5CIFRoaXMgZG9lcyAqbm90KiBmcmVlIHAtPnZhbHVlISAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTMyOCw3ICszMjQsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5rZXkgPT0ga2V5ICYmIHAtPmlkID09IGlkKSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNjEsNyArMzU3LDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+aWQgIT0gaWQpIHsKICAgICAgICAgICAgICpxID0gcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilwKTsKICAgICAgICAgICAgIC8qIE5CIFRoaXMgZG9lcyAqbm90KiBmcmVlIHAtPnZhbHVlISAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQwMyw4ICszOTksMTAgQEAKICAgICBpbnQgbGVuOwogI2VuZGlmCiAKLSAgICBpZiAoVGhyZWFkSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZUaHJlYWRJbmZvVHlwZSwgJnRocmVhZGluZm9fZGVzYyk7CisgICAgaWYgKFRocmVhZEluZm9UeXBlLnRwX25hbWUgPT0gMCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRocmVhZEluZm9UeXBlLCAmdGhyZWFkaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICB0aHJlYWRpbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJlRocmVhZEluZm9UeXBlKTsKICAgICBpZiAodGhyZWFkaW5mbyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9udC5oIGIvUHl0aG9uL3RocmVhZF9udC5oCmluZGV4IDkzOGJmMWUuLmFiNWEwODEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfbnQuaAorKysgYi9QeXRob24vdGhyZWFkX250LmgKQEAgLTM0LDcgKzM0LDcgQEAKIFBOUk1VVEVYCiBBbGxvY05vblJlY3Vyc2l2ZU11dGV4KCkKIHsKLSAgICBQTlJNVVRFWCBtID0gKFBOUk1VVEVYKW1hbGxvYyhzaXplb2YoTlJNVVRFWCkpOworICAgIFBOUk1VVEVYIG0gPSAoUE5STVVURVgpUHlNZW1fUmF3TWFsbG9jKHNpemVvZihOUk1VVEVYKSk7CiAgICAgaWYgKCFtKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlDT05EX0lOSVQoJm0tPmN2KSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBtLT5sb2NrZWQgPSAwOwogICAgIHJldHVybiBtOwogZmFpbDoKLSAgICBmcmVlKG0pOworICAgIFB5TWVtX1Jhd0ZyZWUobSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBpZiAobXV0ZXgpIHsKICAgICAgICAgUHlDT05EX0ZJTkkoJm11dGV4LT5jdik7CiAgICAgICAgIFB5TVVURVhfRklOSSgmbXV0ZXgtPmNzKTsKLSAgICAgICAgZnJlZShtdXRleCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobXV0ZXgpOwogICAgIH0KIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgcmVzdWx0ID0gUHlDT05EX1NJR05BTCgmbXV0ZXgtPmN2KTsKICAgICByZXN1bHQgJj0gUHlNVVRFWF9VTkxPQ0soJm11dGV4LT5jcyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKLX0gICAgCit9CiAKICNlbHNlIC8qIGlmICEgX1BZX1VTRV9DVl9MT0NLUyAqLwogCkBAIC0xMzAsNyArMTMwLDcgQEAKIERXT1JECiBFbnRlck5vblJlY3Vyc2l2ZU11dGV4KFBOUk1VVEVYIG11dGV4LCBEV09SRCBtaWxsaXNlY29uZHMpCiB7Ci0gICAgcmV0dXJuIFdhaXRGb3JTaW5nbGVPYmplY3QobXV0ZXgsIG1pbGxpc2Vjb25kcyk7CisgICAgcmV0dXJuIFdhaXRGb3JTaW5nbGVPYmplY3RFeChtdXRleCwgbWlsbGlzZWNvbmRzLCBGQUxTRSk7CiB9CiAKIEJPT0wKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfb3MyLmggYi9QeXRob24vdGhyZWFkX29zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjI2NGI1Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi90aHJlYWRfb3MyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyogVGhpcyBjb2RlIGltcGxlbWVudGVkIGJ5IGN2YWxlQG5ldGNvbS5jb20gKi8KLQotI2RlZmluZSBJTkNMX0RPU1BST0NFU1MKLSNkZWZpbmUgSU5DTF9ET1NTRU1BUEhPUkVTCi0jaW5jbHVkZSAib3MyLmgiCi0jaW5jbHVkZSAibGltaXRzLmgiCi0KLSNpbmNsdWRlICJwcm9jZXNzLmgiCi0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy9idWlsdGluLmg+Ci0jaW5jbHVkZSA8c3lzL2ZtdXRleC5oPgotI2Vsc2UKLWxvbmcgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKTsKLSNlbmRpZgotCi0vKiBkZWZhdWx0IHRocmVhZCBzdGFjayBzaXplIG9mIDY0a0IgKi8KLSNpZiAhZGVmaW5lZChUSFJFQURfU1RBQ0tfU0laRSkKLSNkZWZpbmUgVEhSRUFEX1NUQUNLX1NJWkUgICAgICAgMHgxMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgT1MyX1NUQUNLU0laRSh4KSAgICAgICAgKHggPyB4IDogVEhSRUFEX1NUQUNLX1NJWkUpCi0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgQyBwYWNrYWdlLCBzaG91bGQgbm90IGJlIG5lZWRlZC4KLSAqLwotc3RhdGljIHZvaWQKLVB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQotewotfQotCi0vKgotICogVGhyZWFkIHN1cHBvcnQuCi0gKi8KLWxvbmcKLVB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKLXsKLSAgICBpbnQgdGhyZWFkX2lkOwotCi0gICAgdGhyZWFkX2lkID0gX2JlZ2ludGhyZWFkKGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUzJfU1RBQ0tTSVpFKF9weXRocmVhZF9zdGFja3NpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyk7Ci0KLSAgICBpZiAodGhyZWFkX2lkID09IC0xKSB7Ci0gICAgICAgIGRwcmludGYoKCJfYmVnaW50aHJlYWQgZmFpbGVkLiByZXR1cm4gJWxkXG4iLCBlcnJubykpOwotICAgIH0KLQotICAgIHJldHVybiB0aHJlYWRfaWQ7Ci19Ci0KLWxvbmcKLVB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCkKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBQUElCIHBpYjsKLSAgICBQVElCIHRpYjsKLSNlbmRpZgotCi0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgcmV0dXJuIF9nZXR0aWQoKTsKLSNlbHNlCi0gICAgRG9zR2V0SW5mb0Jsb2NrcygmdGliLCAmcGliKTsKLSAgICByZXR1cm4gdGliLT50aWJfcHRpYjItPnRpYjJfdWx0aWQ7Ci0jZW5kaWYKLX0KLQotdm9pZAotUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgZXhpdCgwKTsKLSAgICBfZW5kdGhyZWFkKCk7Ci19Ci0KLS8qCi0gKiBMb2NrIHN1cHBvcnQuICBUaGlzIGlzIGltcGxlbWVudGVkIHdpdGggYW4gZXZlbnQgc2VtYXBob3JlIGFuZCBjcml0aWNhbAotICogc2VjdGlvbnMgdG8gbWFrZSBpdCBiZWhhdmUgbW9yZSBsaWtlIGEgcG9zaXggbXV0ZXggdGhhbiBpdHMgT1MvMgotICogY291bnRlcnBhcnRzLgotICovCi0KLXR5cGVkZWYgc3RydWN0IG9zMl9sb2NrX3QgewotICAgIGludCBpc19zZXQ7Ci0gICAgSEVWIGNoYW5nZWQ7Ci19ICp0eXBlX29zMl9sb2NrOwotCi1QeVRocmVhZF90eXBlX2xvY2sKLVB5VGhyZWFkX2FsbG9jYXRlX2xvY2sodm9pZCkKLXsKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIF9mbXV0ZXggKnNlbSA9IG1hbGxvYyhzaXplb2YoX2ZtdXRleCkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIC0+ICVseFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgKGxvbmcpc2VtKSk7Ci0gICAgaWYgKF9mbXV0ZXhfY3JlYXRlKHNlbSwgMCkpIHsKLSAgICAgICAgZnJlZShzZW0pOwotICAgICAgICBzZW0gPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gKFB5VGhyZWFkX3R5cGVfbG9jaylzZW07Ci0jZWxzZQotICAgIEFQSVJFVCByYzsKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jayltYWxsb2Moc2l6ZW9mKHN0cnVjdCBvczJfbG9ja190KSk7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0gICAgbG9jay0+aXNfc2V0ID0gMDsKLQotICAgIERvc0NyZWF0ZUV2ZW50U2VtKE5VTEwsICZsb2NrLT5jaGFuZ2VkLCAwLCAwKTsKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlcFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgbG9jay0+Y2hhbmdlZCkpOwotCi0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spbG9jazsKLSNlbmRpZgotfQotCi12b2lkCi1QeVRocmVhZF9mcmVlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGFMb2NrKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKWFMb2NrOwotI2VuZGlmCi0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9mcmVlX2xvY2soJXApIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksYUxvY2spKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKGFMb2NrKSB7Ci0gICAgICAgIF9mbXV0ZXhfY2xvc2UoKF9mbXV0ZXggKilhTG9jayk7Ci0gICAgICAgIGZyZWUoKF9mbXV0ZXggKilhTG9jayk7Ci0gICAgfQotI2Vsc2UKLSAgICBEb3NDbG9zZUV2ZW50U2VtKGxvY2stPmNoYW5nZWQpOwotICAgIGZyZWUoYUxvY2spOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBSZXR1cm4gMSBvbiBzdWNjZXNzIGlmIHRoZSBsb2NrIHdhcyBhY3F1aXJlZAotICoKLSAqIGFuZCAwIGlmIHRoZSBsb2NrIHdhcyBub3QgYWNxdWlyZWQuCi0gKi8KLWludAotUHlUaHJlYWRfYWNxdWlyZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaywgaW50IHdhaXRmbGFnKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGludCAgIGRvbmUgPSAwOwotICAgIFVMT05HIGNvdW50OwotICAgIFBJRCAgIHBpZCA9IDA7Ci0gICAgVElEICAgdGlkID0gMDsKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICB3YWl0ZmxhZykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICAvKiBhbHdheXMgc3VjY2Vzc2Z1bCBpZiB0aGUgbG9jayBkb2Vzbid0IGV4aXN0ICovCi0gICAgaWYgKGFMb2NrICYmCi0gICAgICAgIF9mbXV0ZXhfcmVxdWVzdCgoX2ZtdXRleCAqKWFMb2NrLCB3YWl0ZmxhZyA/IDAgOiBfRk1SX05PV0FJVCkpCi0gICAgICAgIHJldHVybiAwOwotI2Vsc2UKLSAgICB3aGlsZSAoIWRvbmUpIHsKLSAgICAgICAgLyogaWYgdGhlIGxvY2sgaXMgY3VycmVudGx5IHNldCwgd2UgaGF2ZSB0byB3YWl0IGZvcgotICAgICAgICAgKiB0aGUgc3RhdGUgdG8gY2hhbmdlCi0gICAgICAgICAqLwotICAgICAgICBpZiAobG9jay0+aXNfc2V0KSB7Ci0gICAgICAgICAgICBpZiAoIXdhaXRmbGFnKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgRG9zV2FpdEV2ZW50U2VtKGxvY2stPmNoYW5nZWQsIFNFTV9JTkRFRklOSVRFX1dBSVQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCB0cnkgdG8gZ2V0IHRoZSBzZW1hcGhvcmUuICBJZgotICAgICAgICAgKiBpdCBpcyBzdGlsbCBsb2NrZWQsIHdlIHdpbGwgdHJ5IGFnYWluLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKERvc0VudGVyQ3JpdFNlYygpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKCFsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgICAgIGxvY2stPmlzX3NldCA9IDE7Ci0gICAgICAgICAgICBEb3NSZXNldEV2ZW50U2VtKGxvY2stPmNoYW5nZWQsICZjb3VudCk7Ci0gICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIERvc0V4aXRDcml0U2VjKCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gMTsKLX0KLQotdm9pZAotUHlUaHJlYWRfcmVsZWFzZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGFMb2NrKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChhTG9jaykKLSAgICAgICAgX2ZtdXRleF9yZWxlYXNlKChfZm11dGV4ICopYUxvY2spOwotI2Vsc2UKLSAgICBpZiAoIWxvY2stPmlzX3NldCkgewotICAgICAgICBkcHJpbnRmKCgiJWxkOiBDb3VsZCBub3QgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBlcnJvcjogJWxcbiIsCi0gICAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgICAgIEdldExhc3RFcnJvcigpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoRG9zRW50ZXJDcml0U2VjKCkpIHsKLSAgICAgICAgZHByaW50ZigoIiVsZDogQ291bGQgbm90IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgZXJyb3I6ICVsXG4iLAotICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgICAgICBHZXRMYXN0RXJyb3IoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9jay0+aXNfc2V0ID0gMDsKLSAgICBEb3NQb3N0RXZlbnRTZW0obG9jay0+Y2hhbmdlZCk7Ci0KLSAgICBEb3NFeGl0Q3JpdFNlYygpOwotI2VuZGlmCi19Ci0KLS8qIG1pbmltdW0vbWF4aW11bSB0aHJlYWQgc3RhY2sgc2l6ZXMgc3VwcG9ydGVkICovCi0jZGVmaW5lIFRIUkVBRF9NSU5fU1RBQ0tTSVpFICAgIDB4ODAwMCAgICAgICAgICAvKiAzMmtCICovCi0jZGVmaW5lIFRIUkVBRF9NQVhfU1RBQ0tTSVpFICAgIDB4MjAwMDAwMCAgICAgICAvKiAzMk1CICovCi0KLS8qIHNldCB0aGUgdGhyZWFkIHN0YWNrIHNpemUuCi0gKiBSZXR1cm4gMCBpZiBzaXplIGlzIHZhbGlkLCAtMSBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbnQKLV9weXRocmVhZF9vczJfc2V0X3N0YWNrc2l6ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICAvKiBzZXQgdG8gZGVmYXVsdCAqLwotICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgX3B5dGhyZWFkX3N0YWNrc2l6ZSA9IDA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qIHZhbGlkIHJhbmdlPyAqLwotICAgIGlmIChzaXplID49IFRIUkVBRF9NSU5fU1RBQ0tTSVpFICYmIHNpemUgPCBUSFJFQURfTUFYX1NUQUNLU0laRSkgewotICAgICAgICBfcHl0aHJlYWRfc3RhY2tzaXplID0gc2l6ZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0jZGVmaW5lIFRIUkVBRF9TRVRfU1RBQ0tTSVpFKHgpIF9weXRocmVhZF9vczJfc2V0X3N0YWNrc2l6ZSh4KQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGguaCBiL1B5dGhvbi90aHJlYWRfcHRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDQyNjYuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL3RocmVhZF9wdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0KLS8qIEdOVSBwdGggdGhyZWFkcyBpbnRlcmZhY2UKLSAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wdGgKLSAgIDIwMDAtMDUtMDMgQW5keSBEdXN0bWFuIDxhbmR5QGR1c3RtYW4ubmV0PgotCi0gICBBZGFwdGVkIGZyb20gUG9zaXggdGhyZWFkcyBpbnRlcmZhY2UKLSAgIDEyIE1heSAxOTk3IC0tIGRhdmlkIGFybm9sZCA8ZGF2aWRhQHBvYm94LmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHRoLmg+Ci0KLS8qIEEgcHRoIG11dGV4IGlzbid0IHN1ZmZpY2llbnQgdG8gbW9kZWwgdGhlIFB5dGhvbiBsb2NrIHR5cGUKLSAqIGJlY2F1c2UgcHRoIG11dGV4ZXMgY2FuIGJlIGFjcXVpcmVkIG11bHRpcGxlIHRpbWVzIGJ5IHRoZQotICogc2FtZSB0aHJlYWQuCi0gKgotICogVGhlIHB0aF9sb2NrIHN0cnVjdCBpbXBsZW1lbnRzIGEgUHl0aG9uIGxvY2sgYXMgYSAibG9ja2VkPyIgYml0Ci0gKiBhbmQgYSA8Y29uZGl0aW9uLCBtdXRleD4gcGFpci4gIEluIGdlbmVyYWwsIGlmIHRoZSBiaXQgY2FuIGJlIGFjcXVpcmVkCi0gKiBpbnN0YW50bHksIGl0IGlzLCBlbHNlIHRoZSBwYWlyIGlzIHVzZWQgdG8gYmxvY2sgdGhlIHRocmVhZCB1bnRpbCB0aGUKLSAqIGJpdCBpcyBjbGVhcmVkLgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyICAgICAgICAgICAgIGxvY2tlZDsgLyogMD11bmxvY2tlZCwgMT1sb2NrZWQgKi8KLSAgICAvKiBhIDxjb25kLCBtdXRleD4gcGFpciB0byBoYW5kbGUgYW4gYWNxdWlyZSBvZiBhIGxvY2tlZCBsb2NrICovCi0gICAgcHRoX2NvbmRfdCAgIGxvY2tfcmVsZWFzZWQ7Ci0gICAgcHRoX211dGV4X3QgIG11dDsKLX0gcHRoX2xvY2s7Ci0KLSNkZWZpbmUgQ0hFQ0tfU1RBVFVTKG5hbWUpICBpZiAoc3RhdHVzID09IC0xKSB7IHByaW50ZigiJWQgIiwgc3RhdHVzKTsgcGVycm9yKG5hbWUpOyBlcnJvciA9IDE7IH0KLQotcHRoX2F0dHJfdCBQeVRocmVhZF9hdHRyOwotCi0vKgotICogSW5pdGlhbGl6YXRpb24uCi0gKi8KLQotc3RhdGljIHZvaWQgUHlUaHJlYWRfX2luaXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgcHRoX2luaXQoKTsKLSAgICBQeVRocmVhZF9hdHRyID0gcHRoX2F0dHJfbmV3KCk7Ci0gICAgcHRoX2F0dHJfc2V0KFB5VGhyZWFkX2F0dHIsIFBUSF9BVFRSX1NUQUNLX1NJWkUsIDE8PDE4KTsKLSAgICBwdGhfYXR0cl9zZXQoUHlUaHJlYWRfYXR0ciwgUFRIX0FUVFJfSk9JTkFCTEUsIEZBTFNFKTsKLX0KLQotLyoKLSAqIFRocmVhZCBzdXBwb3J0LgotICovCi0KLQotbG9uZyBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0gICAgcHRoX3QgdGg7Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIHRoID0gcHRoX3NwYXduKFB5VGhyZWFkX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiAoKikodm9pZCAqKSlmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgcmV0dXJuIHRoOwotfQotCi1sb25nIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCkKLXsKLSAgICB2b2xhdGlsZSBwdGhfdCB0aHJlYWRpZDsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotICAgIHRocmVhZGlkID0gcHRoX3NlbGYoKTsKLSAgICByZXR1cm4gKGxvbmcpIHRocmVhZGlkOwotfQotCi12b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgZXhpdCgwKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBMb2NrIHN1cHBvcnQuCi0gKi8KLVB5VGhyZWFkX3R5cGVfbG9jayBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKHZvaWQpCi17Ci0gICAgcHRoX2xvY2sgKmxvY2s7Ci0gICAgaW50IHN0YXR1cywgZXJyb3IgPSAwOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIGxvY2sgPSAocHRoX2xvY2sgKikgbWFsbG9jKHNpemVvZihwdGhfbG9jaykpOwotICAgIG1lbXNldCgodm9pZCAqKWxvY2ssICdcMCcsIHNpemVvZihwdGhfbG9jaykpOwotICAgIGlmIChsb2NrKSB7Ci0gICAgICAgIGxvY2stPmxvY2tlZCA9IDA7Ci0gICAgICAgIHN0YXR1cyA9IHB0aF9tdXRleF9pbml0KCZsb2NrLT5tdXQpOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9pbml0Iik7Ci0gICAgICAgIHN0YXR1cyA9IHB0aF9jb25kX2luaXQoJmxvY2stPmxvY2tfcmVsZWFzZWQpOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9jb25kX2luaXQiKTsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopbG9jayk7Ci0gICAgICAgICAgICBsb2NrID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIC0+ICVwXG4iLCBsb2NrKSk7Ci0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spIGxvY2s7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfZnJlZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrKQotewotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9mcmVlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOwotfQotCi1pbnQgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrLCBpbnQgd2FpdGZsYWcpCi17Ci0gICAgaW50IHN1Y2Nlc3M7Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSBjYWxsZWRcbiIsIGxvY2ssIHdhaXRmbGFnKSk7Ci0KLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfYWNxdWlyZSgmdGhlbG9jay0+bXV0LCAhd2FpdGZsYWcsIE5VTEwpOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2FjcXVpcmVbMV0iKTsKLSAgICBzdWNjZXNzID0gdGhlbG9jay0+bG9ja2VkID09IDA7Ci0gICAgaWYgKHN1Y2Nlc3MpIHRoZWxvY2stPmxvY2tlZCA9IDE7Ci0gICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzFdIik7Ci0KLSAgICBpZiAoICFzdWNjZXNzICYmIHdhaXRmbGFnICkgewotICAgICAgICAvKiBjb250aW51ZSB0cnlpbmcgdW50aWwgd2UgZ2V0IHRoZSBsb2NrICovCi0KLSAgICAgICAgLyogbXV0IG11c3QgYmUgbG9ja2VkIGJ5IG1lIC0tIHBhcnQgb2YgdGhlIGNvbmRpdGlvbgotICAgICAgICAgKiBwcm90b2NvbCAqLwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfYWNxdWlyZSggJnRoZWxvY2stPm11dCwgIXdhaXRmbGFnLCBOVUxMICk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2FjcXVpcmVbMl0iKTsKLSAgICAgICAgd2hpbGUgKCB0aGVsb2NrLT5sb2NrZWQgKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBwdGhfY29uZF9hd2FpdCgmdGhlbG9jay0+bG9ja19yZWxlYXNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGVsb2NrLT5tdXQsIE5VTEwpOwotICAgICAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9hd2FpdCIpOwotICAgICAgICB9Ci0gICAgICAgIHRoZWxvY2stPmxvY2tlZCA9IDE7Ci0gICAgICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X3JlbGVhc2VbMl0iKTsKLSAgICAgICAgc3VjY2VzcyA9IDE7Ci0gICAgfQotICAgIGlmIChlcnJvcikgc3VjY2VzcyA9IDA7Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIC0+ICVkXG4iLCBsb2NrLCB3YWl0ZmxhZywgc3VjY2VzcykpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi12b2lkIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaykKLXsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0gICAgaW50IHN0YXR1cywgZXJyb3IgPSAwOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgY2FsbGVkXG4iLCBsb2NrKSk7Ci0KLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfYWNxdWlyZSggJnRoZWxvY2stPm11dCwgMCwgTlVMTCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2FjcXVpcmVbM10iKTsKLQotICAgIHRoZWxvY2stPmxvY2tlZCA9IDA7Ci0KLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X3JlbGVhc2VbM10iKTsKLQotICAgIC8qIHdha2UgdXAgc29tZW9uZSAoYW55b25lLCBpZiBhbnkpIHdhaXRpbmcgb24gdGhlIGxvY2sgKi8KLSAgICBzdGF0dXMgPSBwdGhfY29uZF9ub3RpZnkoICZ0aGVsb2NrLT5sb2NrX3JlbGVhc2VkLCAwICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9ub3RpZnkiKTsKLX0KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oIGIvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKaW5kZXggZTkwYWU3ZS4uMjBmODUzNSAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKKysrIGIvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKQEAgLTI4MiwxNCArMjgyLDE0IEBACiAgICAgaWYgKCFpbml0aWFsaXplZCkKICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKIAotICAgIGxvY2sgPSAoc2VtX3QgKiltYWxsb2Moc2l6ZW9mKHNlbV90KSk7CisgICAgbG9jayA9IChzZW1fdCAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yoc2VtX3QpKTsKIAogICAgIGlmIChsb2NrKSB7CiAgICAgICAgIHN0YXR1cyA9IHNlbV9pbml0KGxvY2ssMCwxKTsKICAgICAgICAgQ0hFQ0tfU1RBVFVTKCJzZW1faW5pdCIpOwogCiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKWxvY2spOwogICAgICAgICAgICAgbG9jayA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICBzdGF0dXMgPSBzZW1fZGVzdHJveSh0aGVsb2NrKTsKICAgICBDSEVDS19TVEFUVVMoInNlbV9kZXN0cm95Iik7CiAKLSAgICBmcmVlKCh2b2lkICopdGhlbG9jayk7CisgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXRoZWxvY2spOwogfQogCiAvKgpAQCAtNDEwLDcgKzQxMCw3IEBACiAgICAgaWYgKCFpbml0aWFsaXplZCkKICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKIAotICAgIGxvY2sgPSAocHRocmVhZF9sb2NrICopIG1hbGxvYyhzaXplb2YocHRocmVhZF9sb2NrKSk7CisgICAgbG9jayA9IChwdGhyZWFkX2xvY2sgKikgUHlNZW1fUmF3TWFsbG9jKHNpemVvZihwdGhyZWFkX2xvY2spKTsKICAgICBpZiAobG9jaykgewogICAgICAgICBtZW1zZXQoKHZvaWQgKilsb2NrLCAnXDAnLCBzaXplb2YocHRocmVhZF9sb2NrKSk7CiAgICAgICAgIGxvY2stPmxvY2tlZCA9IDA7CkBAIC00MzAsNyArNDMwLDcgQEAKICAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhyZWFkX2NvbmRfaW5pdCIpOwogCiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKWxvY2spOwogICAgICAgICAgICAgbG9jayA9IDA7CiAgICAgICAgIH0KICAgICB9CkBAIC00NTcsNyArNDU3LDcgQEAKICAgICBzdGF0dXMgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koICZ0aGVsb2NrLT5tdXQgKTsKICAgICBDSEVDS19TVEFUVVMoInB0aHJlYWRfbXV0ZXhfZGVzdHJveSIpOwogCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOworICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKil0aGVsb2NrKTsKIH0KIAogUHlMb2NrU3RhdHVzCmRpZmYgLS1naXQgYS9QeXRob24vdHJhY2ViYWNrLmMgYi9QeXRob24vdHJhY2ViYWNrLmMKaW5kZXggNzQwNzVjOS4uZTkxNjljZSAxMDA2NDQKLS0tIGEvUHl0aG9uL3RyYWNlYmFjay5jCisrKyBiL1B5dGhvbi90cmFjZWJhY2suYwpAQCAtMTMsNyArMTMsNyBAQAogCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeVRyYWNlYmFja09iamVjdCwgeCkKIAotI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKQorI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIChpbnQpc3RybGVuKHN0cikpCiAjZGVmaW5lIE1BWF9TVFJJTkdfTEVOR1RIIDUwMAogI2RlZmluZSBNQVhfRlJBTUVfREVQVEggMTAwCiAjZGVmaW5lIE1BWF9OVEhSRUFEUyAxMDAKQEAgLTIxLDYgKzIxLDExIEBACiAvKiBGdW5jdGlvbiBmcm9tIFBhcnNlci90b2tlbml6ZXIuYyAqLwogZXh0ZXJuIGNoYXIgKiBQeVRva2VuaXplcl9GaW5kRW5jb2RpbmdGaWxlbmFtZShpbnQsIFB5T2JqZWN0ICopOwogCitfUHlfSURFTlRJRklFUihUZXh0SU9XcmFwcGVyKTsKK19QeV9JREVOVElGSUVSKGNsb3NlKTsKK19QeV9JREVOVElGSUVSKG9wZW4pOworX1B5X0lERU5USUZJRVIocGF0aCk7CisKIHN0YXRpYyBQeU9iamVjdCAqCiB0Yl9kaXIoUHlUcmFjZWJhY2tPYmplY3QgKnNlbGYpCiB7CkBAIC0xNTIsNyArMTU3LDYgQEAKICAgICBjb25zdCBjaGFyKiBmaWxlcGF0aDsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBQeU9iamVjdCogcmVzdWx0OwotICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwogCiAgICAgZmlsZWJ5dGVzID0gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7CiAgICAgaWYgKGZpbGVieXRlcyA9PSBOVUxMKSB7CkBAIC0xNjksNyArMTczLDcgQEAKICAgICAgICAgdGFpbCsrOwogICAgIHRhaWxsZW4gPSBzdHJsZW4odGFpbCk7CiAKLSAgICBzeXNwYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7CisgICAgc3lzcGF0aCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wYXRoKTsKICAgICBpZiAoc3lzcGF0aCA9PSBOVUxMIHx8ICFQeUxpc3RfQ2hlY2soc3lzcGF0aCkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgbnBhdGggPSBQeUxpc3RfU2l6ZShzeXNwYXRoKTsKQEAgLTIzMiw5ICsyMzYsNiBAQAogICAgIGNoYXIgYnVmW01BWFBBVEhMRU4rMV07CiAgICAgaW50IGtpbmQ7CiAgICAgdm9pZCAqZGF0YTsKLSAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7Ci0gICAgX1B5X0lERU5USUZJRVIob3Blbik7Ci0gICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7CiAKICAgICAvKiBvcGVuIHRoZSBmaWxlICovCiAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCkBAIC0yNDYsMTAgKzI0NywxMiBAQAogICAgIGJpbmFyeSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoaW8sICZQeUlkX29wZW4sICJPcyIsIGZpbGVuYW1lLCAicmIiKTsKIAogICAgIGlmIChiaW5hcnkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOworCiAgICAgICAgIGJpbmFyeSA9IF9QeV9GaW5kU291cmNlRmlsZShmaWxlbmFtZSwgYnVmLCBzaXplb2YoYnVmKSwgaW8pOwogICAgICAgICBpZiAoYmluYXJ5ID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpbyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDY5LDEzICs0NzIsMTMgQEAKICAgICB3cml0ZShmZCwgYnVmZmVyLCBsZW4pOwogfQogCi0vKiBGb3JtYXQgYW4gaW50ZWdlciBpbiByYW5nZSBbMDsgMHhmZmZmZmZmZl0gdG8gaGV4ZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKKy8qIEZvcm1hdCBhbiBpbnRlZ2VyIGluIHJhbmdlIFswOyAweGZmZmZmZmZmXSB0byBoZXhhZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKICAgIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBmaWxlIGZkLgogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpZ25hbCBzYWZlLiAqLwogCiBzdGF0aWMgdm9pZAotZHVtcF9oZXhhZGVjaW1hbChpbnQgd2lkdGgsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBmZCkKK2R1bXBfaGV4YWRlY2ltYWwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgd2lkdGgpCiB7CiAgICAgaW50IGxlbjsKICAgICBjaGFyIGJ1ZmZlcltzaXplb2YodW5zaWduZWQgbG9uZykgKiAyICsgMV07CkBAIC01NDIsMTUgKzU0NSwxNSBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZikgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxceCIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCgyLCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZmZmKSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFx1Iik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDQsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgNCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFxVIik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDgsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgOCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHRydW5jYXRlZCkKQEAgLTYwMSw3ICs2MDQsNyBAQAogICAgIHVuc2lnbmVkIGludCBkZXB0aDsKIAogICAgIGlmICh3cml0ZV9oZWFkZXIpCi0gICAgICAgIFBVVFMoZmQsICJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CisgICAgICAgIFBVVFMoZmQsICJTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6XG4iKTsKIAogICAgIGZyYW1lID0gX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUodHN0YXRlKTsKICAgICBpZiAoZnJhbWUgPT0gTlVMTCkKQEAgLTYzOSw4ICs2NDIsOCBAQAogICAgICAgICBQVVRTKGZkLCAiQ3VycmVudCB0aHJlYWQgMHgiKTsKICAgICBlbHNlCiAgICAgICAgIFBVVFMoZmQsICJUaHJlYWQgMHgiKTsKLSAgICBkdW1wX2hleGFkZWNpbWFsKHNpemVvZihsb25nKSoyLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgZmQpOwotICAgIFBVVFMoZmQsICI6XG4iKTsKKyAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgc2l6ZW9mKGxvbmcpKjIpOworICAgIFBVVFMoZmQsICIgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CiB9CiAKIGNvbnN0IGNoYXIqCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggZjZmOGVhMC4uNmE3ODA0NiAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw1ICsxLDUgQEAKLVRoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy4zLjMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy40LjAgYmV0YSAxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsCiAyMDEyLCAyMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTUyLDkgKzUyLDkgQEAKIC0tLS0tLS0tLS0KIAogV2UgdHJ5IHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBjaGFuZ2VzIGluIHRoZSAiV2hhdCdzIE5ldyBpbgotUHl0aG9uIDMuMyIgZG9jdW1lbnQsIGZvdW5kIGF0CitQeXRob24gMy40IiBkb2N1bWVudCwgZm91bmQgYXQKIAotICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zL3doYXRzbmV3LzMuMy5odG1sCisgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvd2hhdHNuZXcvMy40Lmh0bWwKIAogRm9yIGEgbW9yZSBkZXRhaWxlZCBjaGFuZ2UgbG9nLCByZWFkIE1pc2MvTkVXUyAodGhvdWdoIHRoaXMgZmlsZSwgdG9vLCBpcwogaW5jb21wbGV0ZSwgYW5kIGFsc28gZG9lc24ndCBsaXN0IGFueXRoaW5nIG1lcmdlZCBpbiBmcm9tIHRoZSAyLjcgcmVsZWFzZSB1bmRlcgpAQCAtNjcsOSArNjcsOSBAQAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCi1Eb2N1bWVudGF0aW9uIGZvciBQeXRob24gMy4zIGlzIG9ubGluZSwgdXBkYXRlZCBkYWlseToKK0RvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAzLjQgaXMgb25saW5lLCB1cGRhdGVkIGRhaWx5OgogCi0gICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvCisgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvCiAKIEl0IGNhbiBhbHNvIGJlIGRvd25sb2FkZWQgaW4gbWFueSBmb3JtYXRzIGZvciBmYXN0ZXIgYWNjZXNzLiAgVGhlIGRvY3VtZW50YXRpb24KIGlzIGRvd25sb2FkYWJsZSBpbiBIVE1MLCBQREYsIGFuZCByZVN0cnVjdHVyZWRUZXh0IGZvcm1hdHM7IHRoZSBsYXR0ZXIgdmVyc2lvbgpAQCAtOTQsNyArOTQsNyBAQAogQSBzb3VyY2UtdG8tc291cmNlIHRyYW5zbGF0aW9uIHRvb2wsICIydG8zIiwgY2FuIHRha2UgY2FyZSBvZiB0aGUgbXVuZGFuZSB0YXNrCiBvZiBjb252ZXJ0aW5nIGxhcmdlIGFtb3VudHMgb2Ygc291cmNlIGNvZGUuICBJdCBpcyBub3QgYSBjb21wbGV0ZSBzb2x1dGlvbiBidXQKIGlzIGNvbXBsZW1lbnRlZCBieSB0aGUgZGVwcmVjYXRpb24gd2FybmluZ3MgaW4gMi42LiAgU2VlCi1odHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy9saWJyYXJ5LzJ0bzMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L2xpYnJhcnkvMnRvMy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAKIFRlc3RpbmcKQEAgLTEzMiw3ICsxMzIsNyBAQAogSW5zdGFsbCB0aGF0IHZlcnNpb24gdXNpbmcgIm1ha2UgaW5zdGFsbCIuICBJbnN0YWxsIGFsbCBvdGhlciB2ZXJzaW9ucyB1c2luZwogIm1ha2UgYWx0aW5zdGFsbCIuCiAKLUZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIFB5dGhvbiAyLjYsIDIuNyBhbmQgMy4zIHdpdGggMi43IGJlaW5nIHRoZQorRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgUHl0aG9uIDIuNiwgMi43IGFuZCAzLjQgd2l0aCAyLjcgYmVpbmcgdGhlCiBwcmltYXJ5IHZlcnNpb24sIHlvdSB3b3VsZCBleGVjdXRlICJtYWtlIGluc3RhbGwiIGluIHlvdXIgMi43IGJ1aWxkIGRpcmVjdG9yeQogYW5kICJtYWtlIGFsdGluc3RhbGwiIGluIHRoZSBvdGhlcnMuCiAKQEAgLTE2OCw3ICsxNjgsNyBAQAogUmVsZWFzZSBTY2hlZHVsZQogLS0tLS0tLS0tLS0tLS0tLQogCi1TZWUgUEVQIDM5OCBmb3IgcmVsZWFzZSBkZXRhaWxzOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAzOTgvCitTZWUgUEVQIDQyOSBmb3IgcmVsZWFzZSBkZXRhaWxzOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0MjkvCiAKIAogQ29weXJpZ2h0IGFuZCBMaWNlbnNlIEluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKaW5kZXggZDJmZjI1NS4uNGMzYjY3YiAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdApAQCAtNCwxOCArNCwxOCBAQAogY2FsbCAiVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwtY29tbW9uLmJhdCIKIGNhbGwgIiVWUzEwMENPTU5UT09MUyVcLi5cLi5cVkNcdmN2YXJzYWxsLmJhdCIgeDg2X2FtZDY0CiAKLWlmIG5vdCBleGlzdCB0Y2x0azY0XGJpblx0Y2w4NWcuZGxsICgKLSAgICBjZCB0Y2wtOC41LjExLjBcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBjbGVhbiBhbGwKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGluc3RhbGwKK2lmIG5vdCBleGlzdCB0Y2x0azY0XGJpblx0Y2w4NnRnLmRsbCAoCisgICAgY2QgdGNsLTguNi4xLjBcd2luCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBjbGVhbiBhbGwKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGluc3RhbGwKICAgICBjZCAuLlwuLgogKQogCi1pZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGs4NWcuZGxsICgKLSAgICBjZCB0ay04LjUuMTEuMFx3aW4gICAgCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBjbGVhbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBpbnN0YWxsCitpZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGs4NnRnLmRsbCAoCisgICAgY2QgdGstOC42LjEuMFx3aW4gICAgCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGNsZWFuCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKaW5kZXggYzYyNzhiMi4uMjQ0YWJkMiAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CkBAIC0zMCwxOSArMzAsMjAgQEAKICkKIAogQHJlbSB0Y2wvdGsKLWlmIG5vdCBleGlzdCB0Y2wtOC41LjExLjAgKAotICAgcmQgL3MvcSB0Y2x0ayB0Y2x0azY0Ci0gICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2wtOC41LjExLjAKK2lmIG5vdCBleGlzdCB0Y2wtOC42LjEuMCAoCisgICByZCAvcy9xIHRjbHRrIHRjbHRrNjQgdGNsLTguNS4xMS4wIHRrLTguNS4xMS4wCisgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2wtOC42LjEuMAogKQotaWYgbm90IGV4aXN0IHRrLTguNS4xMS4wIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrLTguNS4xMS4wCitpZiBub3QgZXhpc3QgdGstOC42LjEuMCBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjYuMS4wCiAKIEByZW0gc3FsaXRlMwotaWYgbm90IGV4aXN0IHNxbGl0ZS0zLjcuMTIgKAotICByZCAvcy9xIHNxbGl0ZS1zb3VyY2UtMy43LjQKLSAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLTMuNy4xMgoraWYgbm90IGV4aXN0IHNxbGl0ZS0zLjguMSAoCisgIHJkIC9zL3Egc3FsaXRlLXNvdXJjZS0zLjcuMTIKKyAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLTMuOC4xCiApCiAKIEByZW0gbHptYQotaWYgbm90IGV4aXN0IHh6LTUuMC4zICgKLSAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwveHotNS4wLjMKK2lmIG5vdCBleGlzdCB4ei01LjAuNSAoCisgIHJkIC9zL3EgeHotNS4wLjMKKyAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwveHotNS4wLjUKICkKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdAppbmRleCBlZDVjMTBlLi5jNTgwYTE0IDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CkBAIC00LDE4ICs0LDE4IEBACiBjYWxsICJUb29sc1xidWlsZGJvdFxleHRlcm5hbC1jb21tb24uYmF0IgogY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVx2c3ZhcnMzMi5iYXQiCiAKLWlmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGNsODVnLmRsbCAoCitpZiBub3QgZXhpc3QgdGNsdGtcYmluXHRjbDg2dGcuZGxsICgKICAgICBAcmVtIGFsbCBhbmQgaW5zdGFsbCBuZWVkIHRvIGJlIHNlcGFyYXRlIGludm9jYXRpb25zLCBvdGhlcndpc2Ugbm1ha2VobHAgaXMgbm90IGZvdW5kIG9uIGluc3RhbGwKLSAgICBjZCB0Y2wtOC41LjExLjBcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGNsZWFuIGFsbCAKKyAgICBjZCB0Y2wtOC42LjEuMFx3aW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgY2xlYW4gYWxsIAogICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKIAotaWYgbm90IGV4aXN0IHRjbHRrXGJpblx0azg1Zy5kbGwgKAotICAgIGNkIHRrLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBjbGVhbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBhbGwKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAoraWYgbm90IGV4aXN0IHRjbHRrXGJpblx0azg2dGcuZGxsICgKKyAgICBjZCB0ay04LjYuMS4wXHdpbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGNsZWFuCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgYWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCmRpZmYgLS1naXQgYS9Ub29scy9jbGluaWMvY2xpbmljLnB5IGIvVG9vbHMvY2xpbmljL2NsaW5pYy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzMyYjBjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvY2xpbmljL2NsaW5pYy5weQpAQCAtMCwwICsxLDI3MjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMKKyMgQXJndW1lbnQgQ2xpbmljCisjIENvcHlyaWdodCAyMDEyLTIwMTMgYnkgTGFycnkgSGFzdGluZ3MuCisjIExpY2Vuc2VkIHRvIHRoZSBQU0YgdW5kZXIgYSBjb250cmlidXRvciBhZ3JlZW1lbnQuCisjCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBhc3QKK2ltcG9ydCBhdGV4aXQKK2ltcG9ydCBjbGluaWMKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGlvCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNobGV4CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0ZXh0d3JhcAorCisjIFRPRE86CisjCisjIHNvb246CisjCisjICogYWxsb3cgbWl4aW5nIGFueSB0d28gb2Yge3Bvc2l0aW9uYWwtb25seSwgcG9zaXRpb25hbC1vci1rZXl3b3JkLAorIyAgIGtleXdvcmQtb25seX0KKyMgICAgICAgKiBkaWN0IGNvbnN0cnVjdG9yIHVzZXMgcG9zaXRpb25hbC1vbmx5IGFuZCBrZXl3b3JkLW9ubHkKKyMgICAgICAgKiBtYXggYW5kIG1pbiB1c2UgcG9zaXRpb25hbCBvbmx5IHdpdGggYW4gb3B0aW9uYWwgZ3JvdXAKKyMgICAgICAgICBhbmQga2V5d29yZC1vbmx5CisjCisKK3ZlcnNpb24gPSAnMScKKworX2VtcHR5ID0gaW5zcGVjdC5fZW1wdHkKK192b2lkID0gaW5zcGVjdC5fdm9pZAorCisKK2NsYXNzIFVuc3BlY2lmaWVkOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8VW5zcGVjaWZpZWQ+JworCit1bnNwZWNpZmllZCA9IFVuc3BlY2lmaWVkKCkKKworCitjbGFzcyBOdWxsOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8TnVsbD4nCisKK05VTEwgPSBOdWxsKCkKKworCitkZWYgX3RleHRfYWNjdW11bGF0b3IoKToKKyAgICB0ZXh0ID0gW10KKyAgICBkZWYgb3V0cHV0KCk6CisgICAgICAgIHMgPSAnJy5qb2luKHRleHQpCisgICAgICAgIHRleHQuY2xlYXIoKQorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiB0ZXh0LCB0ZXh0LmFwcGVuZCwgb3V0cHV0CisKKworZGVmIHRleHRfYWNjdW11bGF0b3IoKToKKyAgICAiIiIKKyAgICBDcmVhdGVzIGEgc2ltcGxlIHRleHQgYWNjdW11bGF0b3IgLyBqb2luZXIuCisKKyAgICBSZXR1cm5zIGEgcGFpciBvZiBjYWxsYWJsZXM6CisgICAgICAgIGFwcGVuZCwgb3V0cHV0CisgICAgImFwcGVuZCIgYXBwZW5kcyBhIHN0cmluZyB0byB0aGUgYWNjdW11bGF0b3IuCisgICAgIm91dHB1dCIgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGFjY3VtdWxhdG9yCisgICAgICAgam9pbmVkIHRvZ2V0aGVyICgnJy5qb2luKGFjY3VtdWxhdG9yKSkgYW5kCisgICAgICAgZW1wdGllcyB0aGUgYWNjdW11bGF0b3IuCisgICAgIiIiCisgICAgdGV4dCwgYXBwZW5kLCBvdXRwdXQgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisgICAgcmV0dXJuIGFwcGVuZCwgb3V0cHV0CisKKworZGVmIGZhaWwoKmFyZ3MsIGZpbGVuYW1lPU5vbmUsIGxpbmVfbnVtYmVyPU5vbmUpOgorICAgIGpvaW5lZCA9ICIgIi5qb2luKFtzdHIoYSkgZm9yIGEgaW4gYXJnc10pCisgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICBhZGQoIkVycm9yIikKKyAgICBpZiBjbGluaWM6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGNsaW5pYy5maWxlbmFtZQorICAgICAgICBpZiBjbGluaWMuYmxvY2tfcGFyc2VyIGFuZCAobGluZV9udW1iZXIgaXMgTm9uZSk6CisgICAgICAgICAgICBsaW5lX251bWJlciA9IGNsaW5pYy5ibG9ja19wYXJzZXIubGluZV9udW1iZXIKKyAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgYWRkKCcgaW4gZmlsZSAiJyArIGZpbGVuYW1lICsgJyInKQorICAgIGlmIGxpbmVfbnVtYmVyIGlzIG5vdCBOb25lOgorICAgICAgICBhZGQoIiBvbiBsaW5lICIgKyBzdHIobGluZV9udW1iZXIpKQorICAgIGFkZCgnOlxuJykKKyAgICBhZGQoam9pbmVkKQorICAgIHByaW50KG91dHB1dCgpKQorICAgIHN5cy5leGl0KC0xKQorCisKKworZGVmIHF1b3RlZF9mb3JfY19zdHJpbmcocyk6CisgICAgZm9yIG9sZCwgbmV3IGluICgKKyAgICAgICAgKCciJywgJ1xcIicpLAorICAgICAgICAoIiciLCAiXFwnIiksCisgICAgICAgICk6CisgICAgICAgIHMgPSBzLnJlcGxhY2Uob2xkLCBuZXcpCisgICAgcmV0dXJuIHMKKworaXNfbGVnYWxfY19pZGVudGlmaWVyID0gcmUuY29tcGlsZSgnXltBLVphLXpfXVtBLVphLXowLTlfXSokJykubWF0Y2gKKworZGVmIGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIocyk6CisgICAgcmV0dXJuIGFsbChpc19sZWdhbF9jX2lkZW50aWZpZXIoZmllbGQpIGZvciBmaWVsZCBpbiBzLnNwbGl0KCcuJykpCisKKyMgYWRkZWQgIm1vZHVsZSIsICJzZWxmIiwgImNscyIsIGFuZCAibnVsbCIganVzdCB0byBiZSBzYWZlCisjIChjbGluaWMgd2lsbCBnZW5lcmF0ZSB2YXJpYWJsZXMgd2l0aCB0aGVzZSBuYW1lcykKK2Nfa2V5d29yZHMgPSBzZXQoIiIiCithc20gYXV0byBicmVhayBjYXNlIGNoYXIgY2xzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZG8gZG91YmxlCitlbHNlIGVudW0gZXh0ZXJuIGZsb2F0IGZvciBnb3RvIGlmIGlubGluZSBpbnQgbG9uZyBtb2R1bGUgbnVsbAorcmVnaXN0ZXIgcmV0dXJuIHNlbGYgc2hvcnQgc2lnbmVkIHNpemVvZiBzdGF0aWMgc3RydWN0IHN3aXRjaAordHlwZWRlZiB0eXBlb2YgdW5pb24gdW5zaWduZWQgdm9pZCB2b2xhdGlsZSB3aGlsZQorIiIiLnN0cmlwKCkuc3BsaXQoKSkKKworZGVmIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIocyk6CisgICAgIyBmb3Igbm93LCBqdXN0IGNvbXBsYWluIGlmIHdoYXQgd2UncmUgZ2l2ZW4gaXNuJ3QgbGVnYWwKKyAgICBpZiBub3QgaXNfbGVnYWxfY19pZGVudGlmaWVyKHMpOgorICAgICAgICBmYWlsKCJJbGxlZ2FsIEMgaWRlbnRpZmllcjoge30iLmZvcm1hdChzKSkKKyAgICAjIGJ1dCBpZiB3ZSBwaWNrZWQgYSBDIGtleXdvcmQsIHBpY2sgc29tZXRoaW5nIGVsc2UKKyAgICBpZiBzIGluIGNfa2V5d29yZHM6CisgICAgICAgIHJldHVybiBzICsgIl92YWx1ZSIKKyAgICByZXR1cm4gcworCitkZWYgcnN0cmlwX2xpbmVzKHMpOgorICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgIGZvciBsaW5lIGluIHMuc3BsaXQoJ1xuJyk6CisgICAgICAgIGFkZChsaW5lLnJzdHJpcCgpKQorICAgICAgICBhZGQoJ1xuJykKKyAgICB0ZXh0LnBvcCgpCisgICAgcmV0dXJuIG91dHB1dCgpCisKK2RlZiBsaW5lYXJfZm9ybWF0KHMsICoqa3dhcmdzKToKKyAgICAiIiIKKyAgICBQZXJmb3JtIHN0ci5mb3JtYXQtbGlrZSBzdWJzdGl0dXRpb24sIGV4Y2VwdDoKKyAgICAgICogVGhlIHN0cmluZ3Mgc3Vic3RpdHV0ZWQgbXVzdCBiZSBvbiBsaW5lcyBieQorICAgICAgICB0aGVtc2VsdmVzLiAgKFRoaXMgbGluZSBpcyB0aGUgInNvdXJjZSBsaW5lIi4pCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBlbXB0eSwgdGhlIHNvdXJjZSBsaW5lCisgICAgICAgIGlzIHJlbW92ZWQgaW4gdGhlIG91dHB1dC4KKyAgICAgICogSWYgdGhlIHN1YnN0aXR1dGlvbiB0ZXh0IGlzIG5vdCBlbXB0eToKKyAgICAgICAgICAqIEVhY2ggbGluZSBvZiB0aGUgc3Vic3RpdHV0ZWQgdGV4dCBpcyBpbmRlbnRlZAorICAgICAgICAgICAgYnkgdGhlIGluZGVudCBvZiB0aGUgc291cmNlIGxpbmUuCisgICAgICAgICAgKiBBIG5ld2xpbmUgd2lsbCBiZSBhZGRlZCB0byB0aGUgZW5kLgorICAgICIiIgorCisgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCdcbicpOgorICAgICAgICBpbmRlbnQsIGN1cmx5LCB0cmFpbGluZyA9IGxpbmUucGFydGl0aW9uKCd7JykKKyAgICAgICAgaWYgbm90IGN1cmx5OgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmFtZSwgY3VybCwgdHJhaWxpbmcgPSB0cmFpbGluZy5wYXJ0aXRpb24oJ30nKQorICAgICAgICBpZiBub3QgY3VybHkgb3IgbmFtZSBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdHJhaWxpbmc6CisgICAgICAgICAgICBmYWlsKCJUZXh0IGZvdW5kIGFmdGVyIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorICAgICAgICBpZiBpbmRlbnQuc3RyaXAoKToKKyAgICAgICAgICAgIGZhaWwoIk5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgZm91bmQgYmVmb3JlIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorCisgICAgICAgIHZhbHVlID0ga3dhcmdzW25hbWVdCisgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdmFsdWUgPSB0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHZhbHVlKSwgaW5kZW50KQorICAgICAgICBhZGQodmFsdWUpCisgICAgICAgIGFkZCgnXG4nKQorCisgICAgcmV0dXJuIG91dHB1dCgpWzotMV0KKworZGVmIHZlcnNpb25fc3BsaXR0ZXIocyk6CisgICAgIiIiU3BsaXRzIGEgdmVyc2lvbiBzdHJpbmcgaW50byBhIHR1cGxlIG9mIGludGVnZXJzLgorCisgICAgVGhlIGZvbGxvd2luZyBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkLCBhbmQgZW1wbG95CisgICAgdGhlIGZvbGxvd2luZyBjb252ZXJzaW9uczoKKyAgICAgICAgYSAtPiAtMworICAgICAgICBiIC0+IC0yCisgICAgICAgIGMgLT4gLTEKKyAgICAoVGhpcyBwZXJtaXRzIFB5dGhvbi1zdHlsZSB2ZXJzaW9uIHN0cmluZ3Mgc3VjaCBhcyAiMS40YjMiLikKKyAgICAiIiIKKyAgICB2ZXJzaW9uID0gW10KKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgZGVmIGZsdXNoKCk6CisgICAgICAgIGlmIG5vdCBhY2N1bXVsYXRvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ01hbGZvcm1lZCB2ZXJzaW9uIHN0cmluZzogJyArIHJlcHIocykpCisgICAgICAgIHZlcnNpb24uYXBwZW5kKGludCgnJy5qb2luKGFjY3VtdWxhdG9yKSkpCisgICAgICAgIGFjY3VtdWxhdG9yLmNsZWFyKCkKKworICAgIGZvciBjIGluIHM6CisgICAgICAgIGlmIGMuaXNkaWdpdCgpOgorICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKGMpCisgICAgICAgIGVsaWYgYyA9PSAnLic6CisgICAgICAgICAgICBmbHVzaCgpCisgICAgICAgIGVsaWYgYyBpbiAnYWJjJzoKKyAgICAgICAgICAgIGZsdXNoKCkKKyAgICAgICAgICAgIHZlcnNpb24uYXBwZW5kKCdhYmMnLmluZGV4KGMpIC0gMykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lsbGVnYWwgY2hhcmFjdGVyICcgKyByZXByKGMpICsgJyBpbiB2ZXJzaW9uIHN0cmluZyAnICsgcmVwcihzKSkKKyAgICBmbHVzaCgpCisgICAgcmV0dXJuIHR1cGxlKHZlcnNpb24pCisKK2RlZiB2ZXJzaW9uX2NvbXBhcml0b3IodmVyc2lvbjEsIHZlcnNpb24yKToKKyAgICBpdGVyYXRvciA9IGl0ZXJ0b29scy56aXBfbG9uZ2VzdCh2ZXJzaW9uX3NwbGl0dGVyKHZlcnNpb24xKSwgdmVyc2lvbl9zcGxpdHRlcih2ZXJzaW9uMiksIGZpbGx2YWx1ZT0wKQorICAgIGZvciBpLCAoYSwgYikgaW4gZW51bWVyYXRlKGl0ZXJhdG9yKToKKyAgICAgICAgaWYgYSA8IGI6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgYSA+IGI6CisgICAgICAgICAgICByZXR1cm4gMQorICAgIHJldHVybiAwCisKKworY2xhc3MgQ1JlbmRlckRhdGE6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyB0byBkZWNsYXJlIHZhcmlhYmxlcy4KKyAgICAgICAgIyBTaG91bGQgYmUgZnVsbCBsaW5lcyB3aXRoIFxuIGVvbCBjaGFyYWN0ZXJzLgorICAgICAgICBzZWxmLmRlY2xhcmF0aW9ucyA9IFtdCisKKyAgICAgICAgIyBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlcyBiZWZvcmUgdGhlIHBhcnNlIGNhbGwuCisgICAgICAgICMgU2hvdWxkIGJlIGZ1bGwgbGluZXMgd2l0aCBcbiBlb2wgY2hhcmFjdGVycy4KKyAgICAgICAgc2VsZi5pbml0aWFsaXplcnMgPSBbXQorCisgICAgICAgICMgVGhlIGVudHJpZXMgZm9yIHRoZSAia2V5d29yZHMiIGFycmF5IGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICAjIFNob3VsZCBiZSBpbmRpdmlkdWFsIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBuYW1lcy4KKyAgICAgICAgc2VsZi5rZXl3b3JkcyA9IFtdCisKKyAgICAgICAgIyBUaGUgImZvcm1hdCB1bml0cyIgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgICMgU2hvdWxkIGJlIGluZGl2aWR1YWwgc3RyaW5ncyB0aGF0IHdpbGwgZ2V0CisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXRzID0gW10KKworICAgICAgICAjIFRoZSB2YXJhcmdzIGFyZ3VtZW50cyBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgc2VsZi5wYXJzZV9hcmd1bWVudHMgPSBbXQorCisgICAgICAgICMgVGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIHRoZSBpbXBsIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmltcGxfcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgIyBUaGUgYXJndW1lbnRzIHRvIHRoZSBpbXBsIGZ1bmN0aW9uIGF0IHRoZSB0aW1lIGl0J3MgY2FsbGVkLgorICAgICAgICBzZWxmLmltcGxfYXJndW1lbnRzID0gW10KKworICAgICAgICAjIEZvciByZXR1cm4gY29udmVydGVyczogdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRoYXQKKyAgICAgICAgIyBzaG91bGQgcmVjZWl2ZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGltcGwuCisgICAgICAgIHNlbGYucmV0dXJuX3ZhbHVlID0gInJldHVybl92YWx1ZSIKKworICAgICAgICAjIEZvciByZXR1cm4gY29udmVydGVyczogdGhlIGNvZGUgdG8gY29udmVydCB0aGUgcmV0dXJuCisgICAgICAgICMgdmFsdWUgZnJvbSB0aGUgcGFyc2UgZnVuY3Rpb24uICBUaGlzIGlzIGFsc28gd2hlcmUKKyAgICAgICAgIyB5b3Ugc2hvdWxkIGNoZWNrIHRoZSBfcmV0dXJuX3ZhbHVlIGZvciBlcnJvcnMsIGFuZAorICAgICAgICAjICJnb3RvIGV4aXQiIGlmIHRoZXJlIGFyZSBhbnkuCisgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnNpb24gPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBjbGVhbiB1cCBhZnRlciB0aGUgaW1wbCBjYWxsLgorICAgICAgICBzZWxmLmNsZWFudXAgPSBbXQorCisKK2NsYXNzIExhbmd1YWdlKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisKKyAgICBzdGFydF9saW5lID0gIiIKKyAgICBib2R5X3ByZWZpeCA9ICIiCisgICAgc3RvcF9saW5lID0gIiIKKyAgICBjaGVja3N1bV9saW5lID0gIiIKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGJsb2NrKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgorICAgICAgICBkZWYgYXNzZXJ0X29ubHlfb25lKGZpZWxkLCB0b2tlbj0nZHNsX25hbWUnKToKKyAgICAgICAgICAgIGxpbmUgPSBnZXRhdHRyKHNlbGYsIGZpZWxkKQorICAgICAgICAgICAgdG9rZW4gPSAneycgKyB0b2tlbiArICd9JworICAgICAgICAgICAgaWYgbGVuKGxpbmUuc3BsaXQodG9rZW4pKSAhPSAyOgorICAgICAgICAgICAgICAgIGZhaWwoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAiICIgKyBmaWVsZCArICIgbXVzdCBjb250YWluICIgKyB0b2tlbiArICIgZXhhY3RseSBvbmNlISIpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnc3RhcnRfbGluZScpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnc3RvcF9saW5lJykKKyAgICAgICAgYXNzZXJ0X29ubHlfb25lKCdjaGVja3N1bV9saW5lJykKKyAgICAgICAgYXNzZXJ0X29ubHlfb25lKCdjaGVja3N1bV9saW5lJywgJ2NoZWNrc3VtJykKKworICAgICAgICBpZiBsZW4oc2VsZi5ib2R5X3ByZWZpeC5zcGxpdCgne2RzbF9uYW1lfScpKSA+PSAzOgorICAgICAgICAgICAgZmFpbChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICIgYm9keV9wcmVmaXggbWF5IGNvbnRhaW4gIiArIHRva2VuICsgIiBvbmNlIGF0IG1vc3QhIikKKworCisKK2NsYXNzIFB5dGhvbkxhbmd1YWdlKExhbmd1YWdlKToKKworICAgIGxhbmd1YWdlICAgICAgPSAnUHl0aG9uJworICAgIHN0YXJ0X2xpbmUgICAgPSAiIy8qW3tkc2xfbmFtZX1dIgorICAgIGJvZHlfcHJlZml4ICAgPSAiIyIKKyAgICBzdG9wX2xpbmUgICAgID0gIiNbe2RzbF9uYW1lfV0qLyIKKyAgICBjaGVja3N1bV9saW5lID0gIiMvKlt7ZHNsX25hbWV9IGNoZWNrc3VtOiB7Y2hlY2tzdW19XSovIgorCisKK2RlZiBwZXJtdXRlX2xlZnRfb3B0aW9uX2dyb3VwcyhsKToKKyAgICAiIiIKKyAgICBHaXZlbiBbMSwgMiwgM10sIHNob3VsZCB5aWVsZDoKKyAgICAgICAoKQorICAgICAgICgzLCkKKyAgICAgICAoMiwgMykKKyAgICAgICAoMSwgMiwgMykKKyAgICAiIiIKKyAgICB5aWVsZCB0dXBsZSgpCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGZvciBncm91cCBpbiByZXZlcnNlZChsKToKKyAgICAgICAgYWNjdW11bGF0b3IgPSBsaXN0KGdyb3VwKSArIGFjY3VtdWxhdG9yCisgICAgICAgIHlpZWxkIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBwZXJtdXRlX3JpZ2h0X29wdGlvbl9ncm91cHMobCk6CisgICAgIiIiCisgICAgR2l2ZW4gWzEsIDIsIDNdLCBzaG91bGQgeWllbGQ6CisgICAgICAoKQorICAgICAgKDEsKQorICAgICAgKDEsIDIpCisgICAgICAoMSwgMiwgMykKKyAgICAiIiIKKyAgICB5aWVsZCB0dXBsZSgpCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGZvciBncm91cCBpbiBsOgorICAgICAgICBhY2N1bXVsYXRvci5leHRlbmQoZ3JvdXApCisgICAgICAgIHlpZWxkIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBwZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsZWZ0LCByZXF1aXJlZCwgcmlnaHQpOgorICAgICIiIgorICAgIEdlbmVyYXRvciBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzIHRoZSBzZXQgb2YgYWNjZXB0YWJsZQorICAgIGFyZ3VtZW50IGxpc3RzIGZvciB0aGUgcHJvdmlkZWQgaXRlcmFibGVzIG9mCisgICAgYXJndW1lbnQgZ3JvdXBzLiAgKEFjdHVhbGx5IGl0IGdlbmVyYXRlcyBhIHR1cGxlIG9mIHR1cGxlcy4pCisKKyAgICBBbGdvcml0aG06IHByZWZlciBsZWZ0IG9wdGlvbnMgb3ZlciByaWdodCBvcHRpb25zLgorCisgICAgSWYgcmVxdWlyZWQgaXMgZW1wdHksIGxlZnQgbXVzdCBhbHNvIGJlIGVtcHR5LgorICAgICIiIgorICAgIHJlcXVpcmVkID0gdHVwbGUocmVxdWlyZWQpCisgICAgcmVzdWx0ID0gW10KKworICAgIGlmIG5vdCByZXF1aXJlZDoKKyAgICAgICAgYXNzZXJ0IG5vdCBsZWZ0CisKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgY291bnRzID0gc2V0KCkKKyAgICBmb3IgciBpbiBwZXJtdXRlX3JpZ2h0X29wdGlvbl9ncm91cHMocmlnaHQpOgorICAgICAgICBmb3IgbCBpbiBwZXJtdXRlX2xlZnRfb3B0aW9uX2dyb3VwcyhsZWZ0KToKKyAgICAgICAgICAgIHQgPSBsICsgcmVxdWlyZWQgKyByCisgICAgICAgICAgICBpZiBsZW4odCkgaW4gY291bnRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjb3VudHMuYWRkKGxlbih0KSkKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZCh0KQorCisgICAgYWNjdW11bGF0b3Iuc29ydChrZXk9bGVuKQorICAgIHJldHVybiB0dXBsZShhY2N1bXVsYXRvcikKKworCitjbGFzcyBDTGFuZ3VhZ2UoTGFuZ3VhZ2UpOgorCisgICAgbGFuZ3VhZ2UgICAgICA9ICdDJworICAgIHN0YXJ0X2xpbmUgICAgPSAiLypbe2RzbF9uYW1lfV0iCisgICAgYm9keV9wcmVmaXggICA9ICIiCisgICAgc3RvcF9saW5lICAgICA9ICJbe2RzbF9uYW1lfV0qLyIKKyAgICBjaGVja3N1bV9saW5lID0gIi8qW3tkc2xfbmFtZX0gY2hlY2tzdW06IHtjaGVja3N1bX1dKi8iCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHNpZ25hdHVyZXMpOgorICAgICAgICBmdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgZm9yIG8gaW4gc2lnbmF0dXJlczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobywgRnVuY3Rpb24pOgorICAgICAgICAgICAgICAgIGlmIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJZb3UgbWF5IHNwZWNpZnkgYXQgbW9zdCBvbmUgZnVuY3Rpb24gcGVyIGJsb2NrLlxuRm91bmQgYSBibG9jayBjb250YWluaW5nIGF0IGxlYXN0IHR3bzpcblx0IiArIHJlcHIoZnVuY3Rpb24pICsgIiBhbmQgIiArIHJlcHIobykpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBvCisgICAgICAgIHJldHVybiBzZWxmLnJlbmRlcl9mdW5jdGlvbihmdW5jdGlvbikKKworICAgIGRlZiBkb2NzdHJpbmdfZm9yX2Nfc3RyaW5nKHNlbGYsIGYpOgorICAgICAgICB0ZXh0LCBhZGQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgIyB0dXJuIGRvY3N0cmluZyBpbnRvIGEgcHJvcGVybHkgcXVvdGVkIEMgc3RyaW5nCisgICAgICAgIGZvciBsaW5lIGluIGYuZG9jc3RyaW5nLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgYWRkKCciJykKKyAgICAgICAgICAgIGFkZChxdW90ZWRfZm9yX2Nfc3RyaW5nKGxpbmUpKQorICAgICAgICAgICAgYWRkKCdcXG4iXG4nKQorCisgICAgICAgIHRleHQucG9wKCkKKyAgICAgICAgYWRkKCciJykKKyAgICAgICAgcmV0dXJuICcnLmpvaW4odGV4dCkKKworICAgIGltcGxfcHJvdG90eXBlX3RlbXBsYXRlID0gIntjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX3BhcmFtZXRlcnN9KSIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdGVtcGxhdGVfYmFzZSgqYXJncyk6CisgICAgICAgIGZsYWdzID0gJ3wnLmpvaW4oZiBmb3IgZiBpbiBhcmdzIGlmIGYpCisgICAgICAgIHJldHVybiAiIiIKK1B5RG9jX1NUUlZBUih7Y19iYXNlbmFtZX1fX2RvY19fLAore2RvY3N0cmluZ30pOworCisjZGVmaW5lIHttZXRob2RkZWZfbmFtZX0gICAgXFwKKyAgICB7eyJ7bmFtZX0iLCAoUHlDRnVuY3Rpb24pe2NfYmFzZW5hbWV9LCB7bWV0aG9kZGVmX2ZsYWdzfSwge2NfYmFzZW5hbWV9X19kb2NfX319LAorIiIiLnJlcGxhY2UoJ3ttZXRob2RkZWZfZmxhZ3N9JywgZmxhZ3MpCisKKyAgICBkZWYgbWV0aF9ub2FyZ3NfcHlvYmplY3RfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9OT0FSR1MiLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQorIiIiCisKKyAgICBkZWYgbWV0aF9ub2FyZ3NfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9OT0FSR1MiLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9OworCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtzZWxmX3R5cGV9e3NlbGZfbmFtZX0pCit7eworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHtkZWNsYXJhdGlvbnN9CisgICAge2luaXRpYWxpemVyc30KKworICAgIHtyZXR1cm5fdmFsdWV9ID0ge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfYXJndW1lbnRzfSk7CisgICAge3JldHVybl9jb252ZXJzaW9ufQorCit7ZXhpdF9sYWJlbH0KKyAgICB7Y2xlYW51cH0KKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfX0KKworc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfQorIiIiCisKKyAgICBkZWYgbWV0aF9vX3RlbXBsYXRlKHNlbGYsIG1ldGhvZGRlZl9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfTyIsIG1ldGhvZGRlZl9mbGFncykgKyAiIiIKK3N0YXRpYyBQeU9iamVjdCAqCit7Y19iYXNlbmFtZX0oe2ltcGxfcGFyYW1ldGVyc30pCisiIiIKKworICAgIGRlZiBtZXRoX29fcmV0dXJuX2NvbnZlcnRlcl90ZW1wbGF0ZShzZWxmLCBtZXRob2RkZWZfZmxhZ3M9IiIpOgorICAgICAgICByZXR1cm4gc2VsZi50ZW1wbGF0ZV9iYXNlKCJNRVRIX08iLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9OworCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQore3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB7ZGVjbGFyYXRpb25zfQorICAgIHtpbml0aWFsaXplcnN9CisgICAgX3JldHVybl92YWx1ZSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgIHtyZXR1cm5fY29udmVyc2lvbn0KKwore2V4aXRfbGFiZWx9CisgICAge2NsZWFudXB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK319CisKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX0KKyIiIgorCisgICAgZGVmIG9wdGlvbl9ncm91cF90ZW1wbGF0ZShzZWxmLCBtZXRob2RkZWZfZmxhZ3M9IiIpOgorICAgICAgICByZXR1cm4gc2VsZi50ZW1wbGF0ZV9iYXNlKCJNRVRIX1ZBUkFSR1MiLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9OworCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtzZWxmX3R5cGV9e3NlbGZfbmFtZX0sIFB5T2JqZWN0ICphcmdzKQore3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB7ZGVjbGFyYXRpb25zfQorICAgIHtpbml0aWFsaXplcnN9CisKKyAgICB7b3B0aW9uX2dyb3VwX3BhcnNpbmd9CisgICAge3JldHVybl92YWx1ZX0gPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKK3tleGl0X2xhYmVsfQorICAgIHtjbGVhbnVwfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9fQorCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9CisiIiIKKworICAgIGRlZiBrZXl3b3Jkc190ZW1wbGF0ZShzZWxmLCBtZXRob2RkZWZfZmxhZ3M9IiIpOgorICAgICAgICByZXR1cm4gc2VsZi50ZW1wbGF0ZV9iYXNlKCJNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUyIsIG1ldGhvZGRlZl9mbGFncykgKyAiIiIKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX07CisKK3N0YXRpYyBQeU9iamVjdCAqCit7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7eworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHt7e2tleXdvcmRzfSwgTlVMTH19OworICAgIHtkZWNsYXJhdGlvbnN9CisgICAge2luaXRpYWxpemVyc30KKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIF9rZXl3b3JkcywKKyAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAge3JldHVybl92YWx1ZX0gPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKK3tleGl0X2xhYmVsfQorICAgIHtjbGVhbnVwfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9fQorCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9CisiIiIKKworICAgIGRlZiBwb3NpdGlvbmFsX29ubHlfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9WQVJBUkdTIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncykKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLAorICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB7cmV0dXJuX3ZhbHVlfSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgIHtyZXR1cm5fY29udmVyc2lvbn0KKwore2V4aXRfbGFiZWx9CisgICAge2NsZWFudXB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK319CisKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX0KKyIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKToKKyAgICAgICAgYWRqZWN0aXZlID0gImxlZnRfIiBpZiBncm91cCA8IDAgZWxzZSAicmlnaHRfIgorICAgICAgICByZXR1cm4gImdyb3VwXyIgKyBhZGplY3RpdmUgKyBzdHIoYWJzKGdyb3VwKSkKKworICAgIGRlZiByZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoc2VsZiwgZiwgdGVtcGxhdGVfZGljdCk6CisgICAgICAgICMgcG9zaXRpb25hbCBvbmx5LCBncm91cGVkLCBvcHRpb25hbCBhcmd1bWVudHMhCisgICAgICAgICMgY2FuIGJlIG9wdGlvbmFsIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LgorICAgICAgICAjIGhlcmUncyBhbiBleGFtcGxlOgorICAgICAgICAjCisgICAgICAgICMgWyBbIFsgQTEgQTIgXSBCMSBCMiBCMyBdIEMxIEMyIF0gRDEgRDIgRDMgWyBFMSBFMiBFMyBbIEYxIEYyIEYzIF0gXQorICAgICAgICAjCisgICAgICAgICMgSGVyZSBncm91cCBEIGFyZSByZXF1aXJlZCwgYW5kIGFsbCBvdGhlciBncm91cHMgYXJlIG9wdGlvbmFsLgorICAgICAgICAjIChHcm91cCBEJ3MgImdyb3VwIiBpcyBhY3R1YWxseSBOb25lLikKKyAgICAgICAgIyBXZSBjYW4gZmlndXJlIG91dCB3aGljaCBzZXRzIG9mIGFyZ3VtZW50cyB3ZSBoYXZlIGJhc2VkIG9uCisgICAgICAgICMgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBpbiB0aGUgdHVwbGUuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gY291bnQgdXAgb24gYm90aCBzaWRlcy4gIEZvciBleGFtcGxlLAorICAgICAgICAjIHlvdSBjb3VsZCBoYXZlIGdyb3VwcyBDK0QsIG9yIEMrRCtFLCBvciBDK0QrRStGLgorICAgICAgICAjCisgICAgICAgICMgV2hhdCBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWFkcyB1cyB0byBhbiBhbWJpZ3VvdXMgcmVzdWx0PworICAgICAgICAjIENsaW5pYyBwcmVmZXJzIGdyb3VwcyBvbiB0aGUgbGVmdC4gIFNvIGluIHRoZSBhYm92ZSBleGFtcGxlLAorICAgICAgICAjIGZpdmUgYXJndW1lbnRzIHdvdWxkIG1hcCB0byBCK0MsIG5vdCBDK0QuCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorCisgICAgICAgIGdyb3VwcyA9IFtdCisgICAgICAgIGdyb3VwID0gTm9uZQorICAgICAgICBsZWZ0ID0gW10KKyAgICAgICAgcmlnaHQgPSBbXQorICAgICAgICByZXF1aXJlZCA9IFtdCisgICAgICAgIGxhc3QgPSB1bnNwZWNpZmllZAorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBncm91cF9pZCA9IHAuZ3JvdXAKKyAgICAgICAgICAgIGlmIGdyb3VwX2lkICE9IGxhc3Q6CisgICAgICAgICAgICAgICAgbGFzdCA9IGdyb3VwX2lkCisgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXQorICAgICAgICAgICAgICAgIGlmIGdyb3VwX2lkIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgbGVmdC5hcHBlbmQoZ3JvdXApCisgICAgICAgICAgICAgICAgZWxpZiBncm91cF9pZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBncm91cCA9IHJlcXVpcmVkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHApCisKKyAgICAgICAgY291bnRfbWluID0gc3lzLm1heHNpemUKKyAgICAgICAgY291bnRfbWF4ID0gLTEKKworICAgICAgICBhZGQoInN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7e1xuIikKKyAgICAgICAgZm9yIHN1YnNldCBpbiBwZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsZWZ0LCByZXF1aXJlZCwgcmlnaHQpOgorICAgICAgICAgICAgY291bnQgPSBsZW4oc3Vic2V0KQorICAgICAgICAgICAgY291bnRfbWluID0gbWluKGNvdW50X21pbiwgY291bnQpCisgICAgICAgICAgICBjb3VudF9tYXggPSBtYXgoY291bnRfbWF4LCBjb3VudCkKKworICAgICAgICAgICAgZ3JvdXBfaWRzID0ge3AuZ3JvdXAgZm9yIHAgaW4gc3Vic2V0fSAgIyBlbGltaW5hdGUgZHVwbGljYXRlcworICAgICAgICAgICAgZCA9IHt9CisgICAgICAgICAgICBkWydjb3VudCddID0gY291bnQKKyAgICAgICAgICAgIGRbJ25hbWUnXSA9IGYubmFtZQorICAgICAgICAgICAgZFsnZ3JvdXBzJ10gPSBzb3J0ZWQoZ3JvdXBfaWRzKQorICAgICAgICAgICAgZFsnZm9ybWF0X3VuaXRzJ10gPSAiIi5qb2luKHAuY29udmVydGVyLmZvcm1hdF91bml0IGZvciBwIGluIHN1YnNldCkKKworICAgICAgICAgICAgcGFyc2VfYXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIHN1YnNldDoKKyAgICAgICAgICAgICAgICBwLmNvbnZlcnRlci5wYXJzZV9hcmd1bWVudChwYXJzZV9hcmd1bWVudHMpCisgICAgICAgICAgICBkWydwYXJzZV9hcmd1bWVudHMnXSA9ICIsICIuam9pbihwYXJzZV9hcmd1bWVudHMpCisKKyAgICAgICAgICAgIGdyb3VwX2lkcy5kaXNjYXJkKDApCisgICAgICAgICAgICBsaW5lcyA9IFtzZWxmLmdyb3VwX3RvX3ZhcmlhYmxlX25hbWUoZykgKyAiID0gMTsiIGZvciBnIGluIGdyb3VwX2lkc10KKyAgICAgICAgICAgIGxpbmVzID0gIlxuIi5qb2luKGxpbmVzKQorCisgICAgICAgICAgICBzID0gIiIiCisgICAgY2FzZSB7Y291bnR9OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB7Z3JvdXBfYm9vbGVhbnN9CisgICAgICAgIGJyZWFrOworIiIiWzE6XQorICAgICAgICAgICAgcyA9IGxpbmVhcl9mb3JtYXQocywgZ3JvdXBfYm9vbGVhbnM9bGluZXMpCisgICAgICAgICAgICBzID0gcy5mb3JtYXRfbWFwKGQpCisgICAgICAgICAgICBhZGQocykKKworICAgICAgICBhZGQoIiAgICBkZWZhdWx0OlxuIikKKyAgICAgICAgcyA9ICcgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ7fSByZXF1aXJlcyB7fSB0byB7fSBhcmd1bWVudHMiKTtcbicKKyAgICAgICAgYWRkKHMuZm9ybWF0KGYuZnVsbF9uYW1lLCBjb3VudF9taW4sIGNvdW50X21heCkpCisgICAgICAgIGFkZCgnICAgICAgICByZXR1cm4gTlVMTDtcbicpCisgICAgICAgIGFkZCgifX0iKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddID0gb3V0cHV0KCkKKworICAgIGRlZiByZW5kZXJfZnVuY3Rpb24oc2VsZiwgZik6CisgICAgICAgIGlmIG5vdCBmOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgZGF0YSA9IENSZW5kZXJEYXRhKCkKKworICAgICAgICBwYXJhbWV0ZXJzID0gbGlzdChmLnBhcmFtZXRlcnMudmFsdWVzKCkpCisgICAgICAgIGNvbnZlcnRlcnMgPSBbcC5jb252ZXJ0ZXIgZm9yIHAgaW4gcGFyYW1ldGVyc10KKworICAgICAgICB0ZW1wbGF0ZV9kaWN0ID0ge30KKworICAgICAgICBmdWxsX25hbWUgPSBmLmZ1bGxfbmFtZQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydmdWxsX25hbWUnXSA9IGZ1bGxfbmFtZQorCisgICAgICAgIG5hbWUgPSBmdWxsX25hbWUucnBhcnRpdGlvbignLicpWzJdCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ25hbWUnXSA9IG5hbWUKKworICAgICAgICBjX2Jhc2VuYW1lID0gZi5jX2Jhc2VuYW1lIG9yIGZ1bGxfbmFtZS5yZXBsYWNlKCIuIiwgIl8iKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjX2Jhc2VuYW1lJ10gPSBjX2Jhc2VuYW1lCisKKyAgICAgICAgbWV0aG9kZGVmX25hbWUgPSAie31fTUVUSE9EREVGIi5mb3JtYXQoY19iYXNlbmFtZS51cHBlcigpKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydtZXRob2RkZWZfbmFtZSddID0gbWV0aG9kZGVmX25hbWUKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydkb2NzdHJpbmcnXSA9IHNlbGYuZG9jc3RyaW5nX2Zvcl9jX3N0cmluZyhmKQorCisgICAgICAgIHBvc2l0aW9uYWwgPSBoYXNfb3B0aW9uX2dyb3VwcyA9ICBGYWxzZQorCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBsYXN0X2dyb3VwID0gMAorCisgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGMgPSBwLmNvbnZlcnRlcgorCisgICAgICAgICAgICAgICAgIyBpbnNlcnQgZ3JvdXAgdmFyaWFibGUKKyAgICAgICAgICAgICAgICBncm91cCA9IHAuZ3JvdXAKKyAgICAgICAgICAgICAgICBpZiBsYXN0X2dyb3VwICE9IGdyb3VwOgorICAgICAgICAgICAgICAgICAgICBsYXN0X2dyb3VwID0gZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cF9uYW1lID0gc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQoZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLmFwcGVuZCgiaW50ICIgKyBncm91cF9uYW1lICsgIiA9IDA7IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiaW50ICIgKyBncm91cF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBUcnVlCisgICAgICAgICAgICAgICAgYy5yZW5kZXIocCwgZGF0YSkKKworICAgICAgICAgICAgcG9zaXRpb25hbCA9IHBhcmFtZXRlcnNbLTFdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgICAgICBhc3NlcnQgcG9zaXRpb25hbAorCisgICAgICAgICMgbm93IGluc2VydCBvdXIgInNlbGYiIChvciB3aGF0ZXZlcikgcGFyYW1ldGVycworICAgICAgICAjICh3ZSBkZWxpYmVyYXRlbHkgZG9uJ3QgY2FsbCByZW5kZXIgb24gc2VsZiBjb252ZXJ0ZXJzKQorICAgICAgICBzdG9ja19zZWxmID0gc2VsZl9jb252ZXJ0ZXIoJ3NlbGYnLCBmKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydzZWxmX25hbWUnXSA9IHN0b2NrX3NlbGYubmFtZQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydzZWxmX3R5cGUnXSA9IHN0b2NrX3NlbGYudHlwZQorICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5pbnNlcnQoMCwgZi5zZWxmX2NvbnZlcnRlci50eXBlICsgKCIiIGlmIGYuc2VsZl9jb252ZXJ0ZXIudHlwZS5lbmRzd2l0aCgnKicpIGVsc2UgIiAiKSArIGYuc2VsZl9jb252ZXJ0ZXIubmFtZSkKKyAgICAgICAgaWYgZi5zZWxmX2NvbnZlcnRlci50eXBlICE9IHN0b2NrX3NlbGYudHlwZToKKyAgICAgICAgICAgIHNlbGZfY2FzdCA9ICcoJyArIGYuc2VsZl9jb252ZXJ0ZXIudHlwZSArICcpJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZl9jYXN0ID0gJycKKyAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5pbnNlcnQoMCwgc2VsZl9jYXN0ICsgc3RvY2tfc2VsZi5uYW1lKQorCisgICAgICAgIGYucmV0dXJuX2NvbnZlcnRlci5yZW5kZXIoZiwgZGF0YSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9yZXR1cm5fdHlwZSddID0gZi5yZXR1cm5fY29udmVydGVyLnR5cGUKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSA9ICJcbiIuam9pbihkYXRhLmRlY2xhcmF0aW9ucykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW5pdGlhbGl6ZXJzJ10gPSAiXG5cbiIuam9pbihkYXRhLmluaXRpYWxpemVycykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsna2V5d29yZHMnXSA9ICciJyArICciLCAiJy5qb2luKGRhdGEua2V5d29yZHMpICsgJyInCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2Zvcm1hdF91bml0cyddID0gJycuam9pbihkYXRhLmZvcm1hdF91bml0cykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncGFyc2VfYXJndW1lbnRzJ10gPSAnLCAnLmpvaW4oZGF0YS5wYXJzZV9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcGFyYW1ldGVycyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9wYXJhbWV0ZXJzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX2FyZ3VtZW50cyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10gPSAiIi5qb2luKGRhdGEucmV0dXJuX2NvbnZlcnNpb24pLnJzdHJpcCgpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSA9ICIiLmpvaW4oZGF0YS5jbGVhbnVwKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fdmFsdWUnXSA9IGRhdGEucmV0dXJuX3ZhbHVlCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9wcm90b3R5cGUnXSA9IHNlbGYuaW1wbF9wcm90b3R5cGVfdGVtcGxhdGUuZm9ybWF0X21hcCh0ZW1wbGF0ZV9kaWN0KQorCisgICAgICAgIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlciA9IChub3QgZi5yZXR1cm5fY29udmVydGVyIG9yCisgICAgICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIudHlwZSA9PSAnUHlPYmplY3QgKicpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnM6CisgICAgICAgICAgICBpZiBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfbm9hcmdzX3B5b2JqZWN0X3RlbXBsYXRlKGYubWV0aG9kZGVmX2ZsYWdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHNlbGYubWV0aF9ub2FyZ3NfdGVtcGxhdGUoZi5tZXRob2RkZWZfZmxhZ3MpCisgICAgICAgIGVsaWYgKGxlbihwYXJhbWV0ZXJzKSA9PSAxIGFuZAorICAgICAgICAgICAgICBwYXJhbWV0ZXJzWzBdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZIGFuZAorICAgICAgICAgICAgICBub3QgY29udmVydGVyc1swXS5pc19vcHRpb25hbCgpIGFuZAorICAgICAgICAgICAgICBpc2luc3RhbmNlKGNvbnZlcnRlcnNbMF0sIG9iamVjdF9jb252ZXJ0ZXIpIGFuZAorICAgICAgICAgICAgICBjb252ZXJ0ZXJzWzBdLmZvcm1hdF91bml0ID09ICdPJyk6CisgICAgICAgICAgICBpZiBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfb190ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBIQUNLCisgICAgICAgICAgICAgICAgIyB3ZSdyZSB1c2luZyAiaW1wbF9wYXJhbWV0ZXJzIiBmb3IgdGhlCisgICAgICAgICAgICAgICAgIyBub24taW1wbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IHdvcmtzCisgICAgICAgICAgICAgICAgIyBiZXR0ZXIgZm9yIE1FVEhfTy4gIGJ1dCB0aGF0IG1lYW5zIHdlCisgICAgICAgICAgICAgICAgIyBtdXN0IHN1cHJlc3MgYWN0dWFsbHkgZGVjbGFyaW5nIHRoZQorICAgICAgICAgICAgICAgICMgaW1wbCdzIHBhcmFtZXRlcnMgYXMgdmFyaWFibGVzIGluIHRoZQorICAgICAgICAgICAgICAgICMgbm9uLWltcGwuICBidXQgc2luY2UgaXQncyBNRVRIX08sIHdlCisgICAgICAgICAgICAgICAgIyBvbmx5IGhhdmUgb25lIGFueXdheSwgc28KKyAgICAgICAgICAgICAgICAjIHdlIGRvbid0IGhhdmUgYW55IHByb2JsZW0gZmluZGluZyBpdC4KKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNfY29weSA9IGxpc3QoZGF0YS5kZWNsYXJhdGlvbnMpCisgICAgICAgICAgICAgICAgYmVmb3JlLCBweW9iamVjdCwgYWZ0ZXIgPSBkZWNsYXJhdGlvbnNfY29weVswXS5wYXJ0aXRpb24oJ1B5T2JqZWN0IConKQorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgYmVmb3JlLCAiaGFjayBmYWlsZWQsIHNlZSBjb21tZW50IgorICAgICAgICAgICAgICAgIGFzc2VydCBweW9iamVjdCwgImhhY2sgZmFpbGVkLCBzZWUgY29tbWVudCIKKyAgICAgICAgICAgICAgICBhc3NlcnQgYWZ0ZXIgYW5kIGFmdGVyWzBdLmlzYWxwaGEoKSwgImhhY2sgZmFpbGVkLCBzZWUgY29tbWVudCIKKyAgICAgICAgICAgICAgICBkZWwgZGVjbGFyYXRpb25zX2NvcHlbMF0KKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSA9ICJcbiIuam9pbihkZWNsYXJhdGlvbnNfY29weSkKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHNlbGYubWV0aF9vX3JldHVybl9jb252ZXJ0ZXJfdGVtcGxhdGUoZi5tZXRob2RkZWZfZmxhZ3MpCisgICAgICAgIGVsaWYgaGFzX29wdGlvbl9ncm91cHM6CisgICAgICAgICAgICBzZWxmLnJlbmRlcl9vcHRpb25fZ3JvdXBfcGFyc2luZyhmLCB0ZW1wbGF0ZV9kaWN0KQorICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm9wdGlvbl9ncm91cF90ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICBvcHRpb25fZ3JvdXBfcGFyc2luZz10ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddKQorICAgICAgICBlbGlmIHBvc2l0aW9uYWw6CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IHNlbGYucG9zaXRpb25hbF9vbmx5X3RlbXBsYXRlKGYubWV0aG9kZGVmX2ZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLmtleXdvcmRzX3RlbXBsYXRlKGYubWV0aG9kZGVmX2ZsYWdzKQorCisgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGRlY2xhcmF0aW9ucz10ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSwKKyAgICAgICAgICAgIHJldHVybl9jb252ZXJzaW9uPXRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10sCisgICAgICAgICAgICBpbml0aWFsaXplcnM9dGVtcGxhdGVfZGljdFsnaW5pdGlhbGl6ZXJzJ10sCisgICAgICAgICAgICBjbGVhbnVwPXRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSwKKyAgICAgICAgICAgICkKKworICAgICAgICAjIE9ubHkgZ2VuZXJhdGUgdGhlICJleGl0OiIgbGFiZWwKKyAgICAgICAgIyBpZiB3ZSBoYXZlIGFueSBnb3RvcworICAgICAgICBuZWVkX2V4aXRfbGFiZWwgPSAiZ290byBleGl0OyIgaW4gdGVtcGxhdGUKKyAgICAgICAgdGVtcGxhdGUgPSBsaW5lYXJfZm9ybWF0KHRlbXBsYXRlLAorICAgICAgICAgICAgZXhpdF9sYWJlbD0iZXhpdDoiIGlmIG5lZWRfZXhpdF9sYWJlbCBlbHNlICcnCisgICAgICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmZvcm1hdF9tYXAodGVtcGxhdGVfZGljdCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIE92ZXJyaWRlU3RkaW9XaXRoKHN0ZG91dCk6CisgICAgc2F2ZWRfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKKyAgICB0cnk6CisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgYXNzZXJ0IHN5cy5zdGRvdXQgaXMgc3Rkb3V0CisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlZF9zdGRvdXQKKworCitkZWYgY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpOgorICAgICIiIkNyZWF0ZSBhbiByZSBvYmplY3QgZm9yIG1hdGNoaW5nIG1hcmtlciBsaW5lcy4iIiIKKyAgICBwYXR0ZXJuID0gcidee30oXHcrKXt9JCcKKyAgICByZXR1cm4gcmUuY29tcGlsZShwYXR0ZXJuLmZvcm1hdChyZS5lc2NhcGUoYmVmb3JlKSwgcmUuZXNjYXBlKGFmdGVyKSkpCisKKworY2xhc3MgQmxvY2s6CisgICAgciIiIgorICAgIFJlcHJlc2VudHMgYSBzaW5nbGUgYmxvY2sgb2YgdGV4dCBlbWJlZGRlZCBpbgorICAgIGFub3RoZXIgZmlsZS4gIElmIGRzbF9uYW1lIGlzIE5vbmUsIHRoZSBibG9jayByZXByZXNlbnRzCisgICAgdmVyYmF0aW0gdGV4dCwgcmF3IG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZSwgaW4KKyAgICB3aGljaCBjYXNlICJpbnB1dCIgd2lsbCBiZSB0aGUgb25seSBub24tZmFsc2UgbWVtYmVyLgorICAgIElmIGRzbF9uYW1lIGlzIG5vdCBOb25lLCB0aGUgYmxvY2sgcmVwcmVzZW50cyBhIENsaW5pYworICAgIGJsb2NrLgorCisgICAgaW5wdXQgaXMgYWx3YXlzIHN0ciwgd2l0aCBlbWJlZGRlZCBcbiBjaGFyYWN0ZXJzLgorICAgIGlucHV0IHJlcHJlc2VudHMgdGhlIG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZTsKKyAgICBpZiBpdCdzIGEgQ2xpbmljIGJsb2NrLCBpdCBpcyB0aGUgb3JpZ2luYWwgdGV4dCB3aXRoCisgICAgdGhlIGJvZHlfcHJlZml4IGFuZCByZWR1bmRhbnQgbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuCisKKyAgICBkc2xfbmFtZSBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIHRleHQKKyAgICBmb3VuZCBvbiB0aGUgc3RhcnQgbGluZSBvZiB0aGUgYmxvY2sgYmV0d2VlbiB0aGUgc3F1YXJlCisgICAgYnJhY2tldHMuCisKKyAgICBzaWduYXR1cmVzIGlzIGVpdGhlciBsaXN0IG9yIE5vbmUuICBJZiBpdCdzIGEgbGlzdCwKKyAgICBpdCBtYXkgb25seSBjb250YWluIGNsaW5pYy5Nb2R1bGUsIGNsaW5pYy5DbGFzcywgYW5kCisgICAgY2xpbmljLkZ1bmN0aW9uIG9iamVjdHMuICBBdCB0aGUgbW9tZW50IGl0IHNob3VsZAorICAgIGNvbnRhaW4gYXQgbW9zdCBvbmUgb2YgZWFjaC4KKworICAgIG91dHB1dCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIG91dHB1dAorICAgIGZyb20gdGhpcyBibG9jaywgd2l0aCBlbWJlZGRlZCAnXG4nIGNoYXJhY3RlcnMuCisKKyAgICBpbmRlbnQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSXQncyB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlCisgICAgdGhhdCB3YXMgZm91bmQgb24gZXZlcnkgbGluZSBvZiBpbnB1dC4gIChJZiBib2R5X3ByZWZpeCBpcworICAgIG5vdCBlbXB0eSwgdGhpcyBpcyB0aGUgaW5kZW50ICphZnRlciogcmVtb3ZpbmcgdGhlCisgICAgYm9keV9wcmVmaXguKQorCisgICAgcHJlaW5kZW50IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIEl0J3MgdGhlIHdoaXRlc3BhY2UgdGhhdAorICAgIHdhcyBmb3VuZCBpbiBmcm9udCBvZiBldmVyeSBsaW5lIG9mIGlucHV0ICpiZWZvcmUqIHRoZQorICAgICJib2R5X3ByZWZpeCIgKHNlZSB0aGUgTGFuZ3VhZ2Ugb2JqZWN0KS4gIElmIGJvZHlfcHJlZml4CisgICAgaXMgZW1wdHksIHByZWluZGVudCBtdXN0IGFsd2F5cyBiZSBlbXB0eSB0b28uCisKKyAgICBUbyBpbGx1c3RyYXRlIGluZGVudCBhbmQgcHJlaW5kZW50OiBBc3N1bWUgdGhhdCAnXycKKyAgICByZXByZXNlbnRzIHdoaXRlc3BhY2UuICBJZiB0aGUgYmxvY2sgcHJvY2Vzc2VkIHdhcyBpbiBhCisgICAgUHl0aG9uIGZpbGUsIGFuZCBsb29rZWQgbGlrZSB0aGlzOgorICAgICAgX19fXyMvKltweXRob25dCisgICAgICBfX19fI19fZm9yIGEgaW4gcmFuZ2UoMjApOgorICAgICAgX19fXyNfX19fcHJpbnQoYSkKKyAgICAgIF9fX18jW3B5dGhvbl0qLworICAgICJwcmVpbmRlbnQiIHdvdWxkIGJlICJfX19fIiBhbmQgImluZGVudCIgd291bGQgYmUgIl9fIi4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCwgZHNsX25hbWU9Tm9uZSwgc2lnbmF0dXJlcz1Ob25lLCBvdXRwdXQ9Tm9uZSwgaW5kZW50PScnLCBwcmVpbmRlbnQ9JycpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpbnB1dCwgc3RyKQorICAgICAgICBzZWxmLmlucHV0ID0gaW5wdXQKKyAgICAgICAgc2VsZi5kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgIHNlbGYuc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXMgb3IgW10KKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKKyAgICAgICAgc2VsZi5wcmVpbmRlbnQgPSBwcmVpbmRlbnQKKworCitjbGFzcyBCbG9ja1BhcnNlcjoKKyAgICAiIiIKKyAgICBCbG9jay1vcmllbnRlZCBwYXJzZXIgZm9yIEFyZ3VtZW50IENsaW5pYy4KKyAgICBJdGVyYXRvciwgeWllbGRzIEJsb2NrIG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXQsIGxhbmd1YWdlLCAqLCB2ZXJpZnk9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICAiaW5wdXQiIHNob3VsZCBiZSBhIHN0ciBvYmplY3QKKyAgICAgICAgd2l0aCBlbWJlZGRlZCBcbiBjaGFyYWN0ZXJzLgorCisgICAgICAgICJsYW5ndWFnZSIgc2hvdWxkIGJlIGEgTGFuZ3VhZ2Ugb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgbGFuZ3VhZ2UudmFsaWRhdGUoKQorCisgICAgICAgIHNlbGYuaW5wdXQgPSBjb2xsZWN0aW9ucy5kZXF1ZShyZXZlcnNlZChpbnB1dC5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKSkKKyAgICAgICAgc2VsZi5ibG9ja19zdGFydF9saW5lX251bWJlciA9IHNlbGYubGluZV9udW1iZXIgPSAwCisKKyAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGxhbmd1YWdlCisgICAgICAgIGJlZm9yZSwgXywgYWZ0ZXIgPSBsYW5ndWFnZS5zdGFydF9saW5lLnBhcnRpdGlvbigne2RzbF9uYW1lfScpCisgICAgICAgIGFzc2VydCBfID09ICd7ZHNsX25hbWV9JworICAgICAgICBzZWxmLnN0YXJ0X3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYubGFzdF9jaGVja3N1bV9yZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X2RzbF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgICAgICBpZiBzZWxmLmRzbF9uYW1lOgorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5wYXJzZV9jbGluaWNfYmxvY2soc2VsZi5kc2xfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuZHNsX25hbWUgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCisgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX3ZlcmJhdGltX2Jsb2NrKCkKKworICAgIGRlZiBpc19zdGFydF9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBtYXRjaCA9IHNlbGYuc3RhcnRfcmUubWF0Y2gobGluZS5sc3RyaXAoKSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorCisgICAgZGVmIF9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5wdXQucG9wKCkKKworICAgIGRlZiBwYXJzZV92ZXJiYXRpbV9ibG9jayhzZWxmKToKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgc2VsZi5ibG9ja19zdGFydF9saW5lX251bWJlciA9IHNlbGYubGluZV9udW1iZXIKKworICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgZHNsX25hbWUgPSBzZWxmLmlzX3N0YXJ0X2xpbmUobGluZSkKKyAgICAgICAgICAgIGlmIGRzbF9uYW1lOgorICAgICAgICAgICAgICAgIHNlbGYuZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBhZGQobGluZSkKKworICAgICAgICByZXR1cm4gQmxvY2sob3V0cHV0KCkpCisKKyAgICBkZWYgcGFyc2VfY2xpbmljX2Jsb2NrKHNlbGYsIGRzbF9uYW1lKToKKyAgICAgICAgaW5wdXRfYWRkLCBpbnB1dF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgc2VsZi5ibG9ja19zdGFydF9saW5lX251bWJlciA9IHNlbGYubGluZV9udW1iZXIgKyAxCisgICAgICAgIHN0b3BfbGluZSA9IHNlbGYubGFuZ3VhZ2Uuc3RvcF9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkgKyAnXG4nCisgICAgICAgIGJvZHlfcHJlZml4ID0gc2VsZi5sYW5ndWFnZS5ib2R5X3ByZWZpeC5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisKKyAgICAgICAgIyBjb25zdW1lIGJvZHkgb2YgcHJvZ3JhbQorICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgaWYgbGluZSA9PSBzdG9wX2xpbmUgb3Igc2VsZi5pc19zdGFydF9saW5lKGxpbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBib2R5X3ByZWZpeDoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQorICAgICAgICAgICAgICAgIGFzc2VydCBsaW5lLnN0YXJ0c3dpdGgoYm9keV9wcmVmaXgpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbbGVuKGJvZHlfcHJlZml4KTpdCisgICAgICAgICAgICBpbnB1dF9hZGQobGluZSkKKworICAgICAgICAjIGNvbnN1bWUgb3V0cHV0IGFuZCBjaGVja3N1bSBsaW5lLCBpZiBwcmVzZW50LgorICAgICAgICBpZiBzZWxmLmxhc3RfZHNsX25hbWUgPT0gZHNsX25hbWU6CisgICAgICAgICAgICBjaGVja3N1bV9yZSA9IHNlbGYubGFzdF9jaGVja3N1bV9yZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmVmb3JlLCBfLCBhZnRlciA9IHNlbGYubGFuZ3VhZ2UuY2hlY2tzdW1fbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUsIGNoZWNrc3VtPSd7Y2hlY2tzdW19JykucGFydGl0aW9uKCd7Y2hlY2tzdW19JykKKyAgICAgICAgICAgIGFzc2VydCBfID09ICd7Y2hlY2tzdW19JworICAgICAgICAgICAgY2hlY2tzdW1fcmUgPSBjcmVhdGVfcmVnZXgoYmVmb3JlLCBhZnRlcikKKyAgICAgICAgICAgIHNlbGYubGFzdF9kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgICAgICBzZWxmLmxhc3RfY2hlY2tzdW1fcmUgPSBjaGVja3N1bV9yZQorCisgICAgICAgICMgc2NhbiBmb3J3YXJkIGZvciBjaGVja3N1bSBsaW5lCisgICAgICAgIG91dHB1dF9hZGQsIG91dHB1dF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgY2hlY2tzdW0gPSBOb25lCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBtYXRjaCA9IGNoZWNrc3VtX3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgICAgICBjaGVja3N1bSA9IG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorICAgICAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG91dHB1dF9hZGQobGluZSkKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIG91dHB1dCA9IG91dHB1dF9vdXRwdXQoKQorICAgICAgICBpZiBjaGVja3N1bToKKyAgICAgICAgICAgIGlmIHNlbGYudmVyaWZ5OgorICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gY29tcHV0ZV9jaGVja3N1bShvdXRwdXQpCisgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW0gIT0gY29tcHV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkNoZWNrc3VtIG1pc21hdGNoIVxuRXhwZWN0ZWQ6IHt9XG5Db21wdXRlZDoge30iLmZvcm1hdChjaGVja3N1bSwgY29tcHV0ZWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwdXQgYmFjayBvdXRwdXQKKyAgICAgICAgICAgIHNlbGYuaW5wdXQuZXh0ZW5kKHJldmVyc2VkKG91dHB1dC5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKSkKKyAgICAgICAgICAgIHNlbGYubGluZV9udW1iZXIgLT0gbGVuKG91dHB1dCkKKyAgICAgICAgICAgIG91dHB1dCA9IE5vbmUKKworICAgICAgICByZXR1cm4gQmxvY2soaW5wdXRfb3V0cHV0KCksIGRzbF9uYW1lLCBvdXRwdXQ9b3V0cHV0KQorCisKK2NsYXNzIEJsb2NrUHJpbnRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSwgZj1Ob25lKToKKyAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGxhbmd1YWdlCisgICAgICAgIHNlbGYuZiA9IGYgb3IgaW8uU3RyaW5nSU8oKQorCisgICAgZGVmIHByaW50X2Jsb2NrKHNlbGYsIGJsb2NrKToKKyAgICAgICAgaW5wdXQgPSBibG9jay5pbnB1dAorICAgICAgICBvdXRwdXQgPSBibG9jay5vdXRwdXQKKyAgICAgICAgZHNsX25hbWUgPSBibG9jay5kc2xfbmFtZQorICAgICAgICB3cml0ZSA9IHNlbGYuZi53cml0ZQorCisgICAgICAgIGFzc2VydCBub3QgKChkc2xfbmFtZSA9PSBOb25lKSBeIChvdXRwdXQgPT0gTm9uZSkpLCAieW91IG11c3Qgc3BlY2lmeSBkc2xfbmFtZSBhbmQgb3V0cHV0IHRvZ2V0aGVyLCBkc2xfbmFtZSAiICsgcmVwcihkc2xfbmFtZSkKKworICAgICAgICBpZiBub3QgZHNsX25hbWU6CisgICAgICAgICAgICB3cml0ZShpbnB1dCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKHNlbGYubGFuZ3VhZ2Uuc3RhcnRfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIGJvZHlfcHJlZml4ID0gc2VsZi5sYW5ndWFnZS5ib2R5X3ByZWZpeC5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisgICAgICAgIGlmIG5vdCBib2R5X3ByZWZpeDoKKyAgICAgICAgICAgIHdyaXRlKGlucHV0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5wdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgd3JpdGUoYm9keV9wcmVmaXgpCisgICAgICAgICAgICAgICAgd3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIHdyaXRlKHNlbGYubGFuZ3VhZ2Uuc3RvcF9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkpCisgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICAgICAgb3V0cHV0ID0gYmxvY2sub3V0cHV0CisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIHdyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgd3JpdGUoJ1xuJykKKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLmNoZWNrc3VtX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lLCBjaGVja3N1bT1jb21wdXRlX2NoZWNrc3VtKG91dHB1dCkpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIExhbmd1YWdlIG9iamVjdHMuCisjICJsYW5ndWFnZXMiIG1hcHMgdGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlICgiQyIsICJQeXRob24iKS4KKyMgImV4dGVuc2lvbnMiIG1hcHMgdGhlIGZpbGUgZXh0ZW5zaW9uICgiYyIsICJweSIpLgorbGFuZ3VhZ2VzID0geyAnQyc6IENMYW5ndWFnZSwgJ1B5dGhvbic6IFB5dGhvbkxhbmd1YWdlIH0KK2V4dGVuc2lvbnMgPSB7ICdjJzogQ0xhbmd1YWdlLCAnaCc6IENMYW5ndWFnZSwgJ3B5JzogUHl0aG9uTGFuZ3VhZ2UgfQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbyhuYW1lLCBkZWZhdWx0LCAqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK2NvbnZlcnRlcnMgPSB7fQorCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgZm9yICJjb252ZXJ0ZXJzIiBhYm92ZS4KKyMgbm90ZSBob3dldmVyIHRoYXQgdGhleSB3aWxsIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorbGVnYWN5X2NvbnZlcnRlcnMgPSB7fQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbygqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK3JldHVybl9jb252ZXJ0ZXJzID0ge30KKworY2xhc3MgQ2xpbmljOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSwgcHJpbnRlcj1Ob25lLCAqLCB2ZXJpZnk9VHJ1ZSwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgICMgbWFwcyBzdHJpbmdzIHRvIFBhcnNlciBvYmplY3RzLgorICAgICAgICAjIChpbnN0YW50aWF0ZWQgZnJvbSB0aGUgInBhcnNlcnMiIGdsb2JhbC4pCisgICAgICAgIHNlbGYucGFyc2VycyA9IHt9CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyIG9yIEJsb2NrUHJpbnRlcihsYW5ndWFnZSkKKyAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorCisgICAgICAgIGdsb2JhbCBjbGluaWMKKyAgICAgICAgY2xpbmljID0gc2VsZgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGlucHV0KToKKyAgICAgICAgcHJpbnRlciA9IHNlbGYucHJpbnRlcgorICAgICAgICBzZWxmLmJsb2NrX3BhcnNlciA9IEJsb2NrUGFyc2VyKGlucHV0LCBzZWxmLmxhbmd1YWdlLCB2ZXJpZnk9c2VsZi52ZXJpZnkpCisgICAgICAgIGZvciBibG9jayBpbiBzZWxmLmJsb2NrX3BhcnNlcjoKKyAgICAgICAgICAgIGRzbF9uYW1lID0gYmxvY2suZHNsX25hbWUKKyAgICAgICAgICAgIGlmIGRzbF9uYW1lOgorICAgICAgICAgICAgICAgIGlmIGRzbF9uYW1lIG5vdCBpbiBzZWxmLnBhcnNlcnM6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBkc2xfbmFtZSBpbiBwYXJzZXJzLCAiTm8gcGFyc2VyIHRvIGhhbmRsZSB7IXJ9IGJsb2NrLiIuZm9ybWF0KGRzbF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlcnNbZHNsX25hbWVdID0gcGFyc2Vyc1tkc2xfbmFtZV0oc2VsZikKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLnBhcnNlcnNbZHNsX25hbWVdCisgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICAgICAgcHJpbnRlci5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgcmV0dXJuIHByaW50ZXIuZi5nZXR2YWx1ZSgpCisKKyAgICBkZWYgX21vZHVsZV9hbmRfY2xhc3Moc2VsZiwgZmllbGRzKToKKyAgICAgICAgIiIiCisgICAgICAgIGZpZWxkcyBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgZmllbGQgbmFtZXMuCisgICAgICAgIHJldHVybnMgYSB0dXBsZSBvZiAobW9kdWxlLCBjbGFzcykuCisgICAgICAgIHRoZSBtb2R1bGUgb2JqZWN0IGNvdWxkIGFjdHVhbGx5IGJlIHNlbGYgKGEgY2xpbmljIG9iamVjdCkuCisgICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgb25seSBldmVyIHVzZWQgdG8gZmluZCB0aGUgcGFyZW50IG9mIHdoZXJlCisgICAgICAgIGEgbmV3IGNsYXNzL21vZHVsZSBzaG91bGQgZ28uCisgICAgICAgICIiIgorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gbW9kdWxlID0gc2VsZgorICAgICAgICBjbHMgPSBOb25lCisgICAgICAgIHNvX2ZhciA9IFtdCisKKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIHNvX2Zhci5hcHBlbmQoZmllbGQpCisgICAgICAgICAgICBpZiBub3QgaW5fY2xhc3NlczoKKyAgICAgICAgICAgICAgICBjaGlsZCA9IHBhcmVudC5tb2R1bGVzLmdldChmaWVsZCkKKyAgICAgICAgICAgICAgICBpZiBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gbW9kdWxlID0gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpbl9jbGFzc2VzID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIocGFyZW50LCAnY2xhc3NlcycpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQuY2xhc3Nlcy5nZXQoZmllbGQpCisgICAgICAgICAgICBpZiBub3QgY2hpbGQ6CisgICAgICAgICAgICAgICAgZmFpbCgnUGFyZW50IGNsYXNzIG9yIG1vZHVsZSAnICsgJy4nLmpvaW4oc29fZmFyKSArICIgZG9lcyBub3QgZXhpc3QuIikKKyAgICAgICAgICAgIGNscyA9IHBhcmVudCA9IGNoaWxkCisKKyAgICAgICAgcmV0dXJuIG1vZHVsZSwgY2xzCisKKworZGVmIHBhcnNlX2ZpbGUoZmlsZW5hbWUsICosIHZlcmlmeT1UcnVlLCBvdXRwdXQ9Tm9uZSwgZW5jb2Rpbmc9J3V0Zi04Jyk6CisgICAgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMV1bMTpdCisgICAgaWYgbm90IGV4dGVuc2lvbjoKKyAgICAgICAgZmFpbCgiQ2FuJ3QgZXh0cmFjdCBmaWxlIHR5cGUgZm9yIGZpbGUgIiArIHJlcHIoZmlsZW5hbWUpKQorCisgICAgdHJ5OgorICAgICAgICBsYW5ndWFnZSA9IGV4dGVuc2lvbnNbZXh0ZW5zaW9uXSgpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBmYWlsKCJDYW4ndCBpZGVudGlmeSBmaWxlIHR5cGUgZm9yIGZpbGUgIiArIHJlcHIoZmlsZW5hbWUpKQorCisgICAgY2xpbmljID0gQ2xpbmljKGxhbmd1YWdlLCB2ZXJpZnk9dmVyaWZ5LCBmaWxlbmFtZT1maWxlbmFtZSkKKworICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgcmF3ID0gZi5yZWFkKCkKKworICAgIGNvb2tlZCA9IGNsaW5pYy5wYXJzZShyYXcpCisgICAgaWYgY29va2VkID09IHJhdzoKKyAgICAgICAgcmV0dXJuCisKKyAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpIG9yICcuJworCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkocHJlZml4PSJjbGluaWMiLCBkaXI9ZGlyZWN0b3J5KSBhcyB0bXBkaXI6CisgICAgICAgIGJ5dGVzID0gY29va2VkLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgdG1wZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgd2l0aCBvcGVuKHRtcGZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShieXRlcykKKyAgICAgICAgb3MucmVwbGFjZSh0bXBmaWxlbmFtZSwgb3V0cHV0IG9yIGZpbGVuYW1lKQorCisKK2RlZiBjb21wdXRlX2NoZWNrc3VtKGlucHV0KToKKyAgICBpbnB1dCA9IGlucHV0IG9yICcnCisgICAgcmV0dXJuIGhhc2hsaWIuc2hhMShpbnB1dC5lbmNvZGUoJ3V0Zi04JykpLmhleGRpZ2VzdCgpCisKKworCisKK2NsYXNzIFB5dGhvblBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCBPdmVycmlkZVN0ZGlvV2l0aChzKToKKyAgICAgICAgICAgIGV4ZWMoYmxvY2suaW5wdXQpCisgICAgICAgIGJsb2NrLm91dHB1dCA9IHMuZ2V0dmFsdWUoKQorCisKK2NsYXNzIE1vZHVsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbW9kdWxlPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gc2VsZi5wYXJlbnQgPSBtb2R1bGUKKworICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5mdW5jdGlvbnMgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxjbGluaWMuTW9kdWxlICIgKyByZXByKHNlbGYubmFtZSkgKyAiIGF0ICIgKyBzdHIoaWQoc2VsZikpICsgIj4iCisKK2NsYXNzIENsYXNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBtb2R1bGU9Tm9uZSwgY2xzPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuY2xzID0gY2xzCisgICAgICAgIHNlbGYucGFyZW50ID0gY2xzIG9yIG1vZHVsZQorCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5mdW5jdGlvbnMgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxjbGluaWMuQ2xhc3MgIiArIHJlcHIoc2VsZi5uYW1lKSArICIgYXQgIiArIHN0cihpZChzZWxmKSkgKyAiPiIKKworCitEQVRBLCBDQUxMQUJMRSwgTUVUSE9ELCBTVEFUSUNfTUVUSE9ELCBDTEFTU19NRVRIT0QgPSByYW5nZSg1KQorCitjbGFzcyBGdW5jdGlvbjoKKyAgICAiIiIKKyAgICBNdXRhYmxlIGR1Y2sgdHlwZSBmb3IgaW5zcGVjdC5GdW5jdGlvbi4KKworICAgIGRvY3N0cmluZyAtIGEgc3RyIGNvbnRhaW5pbmcKKyAgICAgICAgKiBlbWJlZGRlZCBsaW5lIGJyZWFrcworICAgICAgICAqIHRleHQgb3V0ZGVudGVkIHRvIHRoZSBsZWZ0IG1hcmdpbgorICAgICAgICAqIG5vIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisgICAgICAgIEl0IHdpbGwgYWx3YXlzIGJlIHRydWUgdGhhdAorICAgICAgICAgICAgKG5vdCBkb2NzdHJpbmcpIG9yICgobm90IGRvY3N0cmluZ1swXS5pc3NwYWNlKCkpIGFuZCAoZG9jc3RyaW5nLnJzdHJpcCgpID09IGRvY3N0cmluZykpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyYW1ldGVycz1Ob25lLCAqLCBuYW1lLAorICAgICAgICAgICAgICAgICBtb2R1bGUsIGNscz1Ob25lLCBjX2Jhc2VuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgIGZ1bGxfbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICByZXR1cm5fY29udmVydGVyLCByZXR1cm5fYW5ub3RhdGlvbj1fZW1wdHksCisgICAgICAgICAgICAgICAgIGRvY3N0cmluZz1Ob25lLCBraW5kPUNBTExBQkxFLCBjb2V4aXN0PUZhbHNlKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycyBvciBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYucmV0dXJuX2Fubm90YXRpb24gPSByZXR1cm5fYW5ub3RhdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZnVsbF9uYW1lID0gZnVsbF9uYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuY2xzID0gY2xzCisgICAgICAgIHNlbGYucGFyZW50ID0gY2xzIG9yIG1vZHVsZQorICAgICAgICBzZWxmLmNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lCisgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnRlciA9IHJldHVybl9jb252ZXJ0ZXIKKyAgICAgICAgc2VsZi5kb2NzdHJpbmcgPSBkb2NzdHJpbmcgb3IgJycKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmNvZXhpc3QgPSBjb2V4aXN0CisgICAgICAgIHNlbGYuc2VsZl9jb252ZXJ0ZXIgPSBOb25lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWV0aG9kZGVmX2ZsYWdzKHNlbGYpOgorICAgICAgICBmbGFncyA9IFtdCisgICAgICAgIGlmIHNlbGYua2luZCA9PSBDTEFTU19NRVRIT0Q6CisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ01FVEhfQ0xBU1MnKQorICAgICAgICBlbGlmIHNlbGYua2luZCA9PSBTVEFUSUNfTUVUSE9EOgorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdNRVRIX1NUQVRJQycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5raW5kID09IENBTExBQkxFLCAidW5rbm93biBraW5kOiAiICsgcmVwcihzZWxmLmtpbmQpCisgICAgICAgIGlmIHNlbGYuY29leGlzdDoKKyAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgnTUVUSF9DT0VYSVNUJykKKyAgICAgICAgcmV0dXJuICd8Jy5qb2luKGZsYWdzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxjbGluaWMuRnVuY3Rpb24gJyArIHNlbGYubmFtZSArICc+JworCisKK2NsYXNzIFBhcmFtZXRlcjoKKyAgICAiIiIKKyAgICBNdXRhYmxlIGR1Y2sgdHlwZSBvZiBpbnNwZWN0LlBhcmFtZXRlci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBraW5kLCAqLCBkZWZhdWx0PV9lbXB0eSwKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIGNvbnZlcnRlciwgYW5ub3RhdGlvbj1fZW1wdHksCisgICAgICAgICAgICAgICAgIGRvY3N0cmluZz1Ob25lLCBncm91cD0wKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmtpbmQgPSBraW5kCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYuY29udmVydGVyID0gY29udmVydGVyCisgICAgICAgIHNlbGYuYW5ub3RhdGlvbiA9IGFubm90YXRpb24KKyAgICAgICAgc2VsZi5kb2NzdHJpbmcgPSBkb2NzdHJpbmcgb3IgJycKKyAgICAgICAgc2VsZi5ncm91cCA9IGdyb3VwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPGNsaW5pYy5QYXJhbWV0ZXIgJyArIHNlbGYubmFtZSArICc+JworCisgICAgZGVmIGlzX2tleXdvcmRfb25seShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkKKworcHlfc3BlY2lhbF92YWx1ZXMgPSB7CisgICAgTlVMTDogIk5vbmUiLAorfQorCitkZWYgcHlfcmVwcihvKToKKyAgICBzcGVjaWFsID0gcHlfc3BlY2lhbF92YWx1ZXMuZ2V0KG8pCisgICAgaWYgc3BlY2lhbDoKKyAgICAgICAgcmV0dXJuIHNwZWNpYWwKKyAgICByZXR1cm4gcmVwcihvKQorCisKK2Nfc3BlY2lhbF92YWx1ZXMgPSB7CisgICAgTlVMTDogIk5VTEwiLAorICAgIE5vbmU6ICJQeV9Ob25lIiwKK30KKworZGVmIGNfcmVwcihvKToKKyAgICBzcGVjaWFsID0gY19zcGVjaWFsX3ZhbHVlcy5nZXQobykKKyAgICBpZiBzcGVjaWFsOgorICAgICAgICByZXR1cm4gc3BlY2lhbAorICAgIGlmIGlzaW5zdGFuY2Uobywgc3RyKToKKyAgICAgICAgcmV0dXJuICciJyArIHF1b3RlZF9mb3JfY19zdHJpbmcobykgKyAnIicKKyAgICByZXR1cm4gcmVwcihvKQorCitkZWYgYWRkX2NfY29udmVydGVyKGYsIG5hbWU9Tm9uZSk6CisgICAgaWYgbm90IG5hbWU6CisgICAgICAgIG5hbWUgPSBmLl9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCdfY29udmVydGVyJyk6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBuYW1lID0gbmFtZVs6LWxlbignX2NvbnZlcnRlcicpXQorICAgIGNvbnZlcnRlcnNbbmFtZV0gPSBmCisgICAgcmV0dXJuIGYKKworZGVmIGFkZF9kZWZhdWx0X2xlZ2FjeV9jX2NvbnZlcnRlcihjbHMpOgorICAgICMgYXV0b21hdGljYWxseSBhZGQgY29udmVydGVyIGZvciBkZWZhdWx0IGZvcm1hdCB1bml0CisgICAgIyAoYnV0IHdpdGhvdXQgc3RvbXBpbmcgb24gdGhlIGV4aXN0aW5nIG9uZSBpZiBpdCdzIGFscmVhZHkKKyAgICAjIHNldCwgaW4gY2FzZSB5b3Ugc3ViY2xhc3MpCisgICAgaWYgKChjbHMuZm9ybWF0X3VuaXQgIT0gJ08mJykgYW5kCisgICAgICAgIChjbHMuZm9ybWF0X3VuaXQgbm90IGluIGxlZ2FjeV9jb252ZXJ0ZXJzKSk6CisgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Nscy5mb3JtYXRfdW5pdF0gPSBjbHMKKyAgICByZXR1cm4gY2xzCisKK2RlZiBhZGRfbGVnYWN5X2NfY29udmVydGVyKGZvcm1hdF91bml0LCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgQWRkcyBhIGxlZ2FjeSBjb252ZXJ0ZXIuCisgICAgIiIiCisgICAgZGVmIGNsb3N1cmUoZik6CisgICAgICAgIGlmIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICBhZGRlZF9mID0gZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkZWRfZiA9IGZ1bmN0b29scy5wYXJ0aWFsKGYsICoqa3dhcmdzKQorICAgICAgICBsZWdhY3lfY29udmVydGVyc1tmb3JtYXRfdW5pdF0gPSBhZGRlZF9mCisgICAgICAgIHJldHVybiBmCisgICAgcmV0dXJuIGNsb3N1cmUKKworY2xhc3MgQ0NvbnZlcnRlckF1dG9SZWdpc3Rlcih0eXBlKToKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgYWRkX2NfY29udmVydGVyKGNscykKKyAgICAgICAgYWRkX2RlZmF1bHRfbGVnYWN5X2NfY29udmVydGVyKGNscykKKworY2xhc3MgQ0NvbnZlcnRlcihtZXRhY2xhc3M9Q0NvbnZlcnRlckF1dG9SZWdpc3Rlcik6CisgICAgIiIiCisgICAgRm9yIHRoZSBpbml0IGZ1bmN0aW9uLCBzZWxmLCBuYW1lLCBmdW5jdGlvbiwgYW5kIGRlZmF1bHQKKyAgICBtdXN0IGJlIGtleXdvcmQtb3ItcG9zaXRpb25hbCBwYXJhbWV0ZXJzLiAgQWxsIG90aGVyCisgICAgcGFyYW1ldGVycyAoaW5jbHVkaW5nICJyZXF1aXJlZCIgYW5kICJkb2NfZGVmYXVsdCIpCisgICAgbXVzdCBiZSBrZXl3b3JkLW9ubHkuCisgICAgIiIiCisKKyAgICB0eXBlID0gTm9uZQorICAgIGZvcm1hdF91bml0ID0gJ08mJworCisgICAgIyBUaGUgUHl0aG9uIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCBhcyBhIFB5dGhvbiB2YWx1ZS4KKyAgICAjIE9yICJ1bnNwZWNpZmllZCIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBkZWZhdWx0ID0gdW5zcGVjaWZpZWQKKworICAgICMgImRlZmF1bHQiIGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24sIGFzIGEgc3RyaW5nLgorICAgICMgT3IgTm9uZSBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorICAgIGRvY19kZWZhdWx0ID0gTm9uZQorCisgICAgIyAiZGVmYXVsdCIgY29udmVydGVkIGludG8gYSBzdHIgZm9yIHJlbmRlcmluZyBpbnRvIFB5dGhvbiBjb2RlLgorICAgIHB5X2RlZmF1bHQgPSBOb25lCisKKyAgICAjICJkZWZhdWx0IiBjb252ZXJ0ZWQgaW50byBhIEMgdmFsdWUsIGFzIGEgc3RyaW5nLgorICAgICMgT3IgTm9uZSBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorICAgIGNfZGVmYXVsdCA9IE5vbmUKKworICAgICMgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBDIHZhcmlhYmxlIHdoZW4KKyAgICAjIHRoZXJlIGlzIG5vIGRlZmF1bHQsIGJ1dCBub3Qgc3BlY2lmeWluZyBhIGRlZmF1bHQgbWF5CisgICAgIyByZXN1bHQgaW4gYW4gInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiIHdhcm5pbmcuICBUaGlzIGNhbgorICAgICMgZWFzaWx5IGhhcHBlbiB3aGVuIHVzaW5nIG9wdGlvbiBncm91cHMtLWFsdGhvdWdoCisgICAgIyBwcm9wZXJseS13cml0dGVuIGNvZGUgd29uJ3QgYWN0dWFsbHkgdXNlIHRoZSB2YXJpYWJsZSwKKyAgICAjIHRoZSB2YXJpYWJsZSBkb2VzIGdldCBwYXNzZWQgaW4gdG8gdGhlIF9pbXBsLiAgKEFoLCBpZgorICAgICMgb25seSBkYXRhZmxvdyBhbmFseXNpcyBjb3VsZCBpbmxpbmUgdGhlIHN0YXRpYyBmdW5jdGlvbiEpCisgICAgIworICAgICMgVGhpcyB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcuCisgICAgIyBFdmVyeSBub24tYWJzdHJhY3Qgc3ViY2xhc3Mgc2hvdWxkIHN1cHBseSBhIHZhbGlkIHZhbHVlLgorICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gJ05VTEwnCisKKyAgICAjIFRoZSBDIGNvbnZlcnRlciAqZnVuY3Rpb24qIHRvIGJlIHVzZWQsIGlmIGFueS4KKyAgICAjIChJZiB0aGlzIGlzIG5vdCBOb25lLCBmb3JtYXRfdW5pdCBtdXN0IGJlICdPJicuKQorICAgIGNvbnZlcnRlciA9IE5vbmUKKworICAgIGVuY29kaW5nID0gTm9uZQorICAgIGltcGxfYnlfcmVmZXJlbmNlID0gRmFsc2UKKyAgICBwYXJzZV9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgbGVuZ3RoID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBmdW5jdGlvbiwgZGVmYXVsdD11bnNwZWNpZmllZCwgKiwgZG9jX2RlZmF1bHQ9Tm9uZSwgcmVxdWlyZWQ9RmFsc2UsIGFubm90YXRpb249dW5zcGVjaWZpZWQsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKKyAgICAgICAgICAgIHNlbGYucHlfZGVmYXVsdCA9IHB5X3JlcHIoZGVmYXVsdCkKKyAgICAgICAgICAgIHNlbGYuZG9jX2RlZmF1bHQgPSBkb2NfZGVmYXVsdCBpZiBkb2NfZGVmYXVsdCBpcyBub3QgTm9uZSBlbHNlIHNlbGYucHlfZGVmYXVsdAorICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBjX3JlcHIoZGVmYXVsdCkKKyAgICAgICAgZWxpZiBkb2NfZGVmYXVsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZhaWwoZnVuY3Rpb24uZnVsbG5hbWUgKyAiIGFyZ3VtZW50ICIgKyBuYW1lICsgIiBzcGVjaWZpZWQgYSAnZG9jX2RlZmF1bHQnIHdpdGhvdXQgaGF2aW5nIGEgJ2RlZmF1bHQnIikKKyAgICAgICAgaWYgYW5ub3RhdGlvbiAhPSB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIGZhaWwoIlRoZSAnYW5ub3RhdGlvbicgcGFyYW1ldGVyIGlzIG5vdCBjdXJyZW50bHkgcGVybWl0dGVkLiIpCisgICAgICAgIHNlbGYucmVxdWlyZWQgPSByZXF1aXJlZAorICAgICAgICBzZWxmLmNvbnZlcnRlcl9pbml0KCoqa3dhcmdzKQorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaXNfb3B0aW9uYWwoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5kZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZCkgYW5kIChub3Qgc2VsZi5yZXF1aXJlZCkKKworICAgIGRlZiByZW5kZXIoc2VsZiwgcGFyYW1ldGVyLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIHBhcmFtZXRlciBpcyBhIGNsaW5pYy5QYXJhbWV0ZXIgaW5zdGFuY2UuCisgICAgICAgIGRhdGEgaXMgYSBDUmVuZGVyRGF0YSBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucGFyYW1ldGVyID0gcGFyYW1ldGVyCisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKworICAgICAgICAjIGRlY2xhcmF0aW9ucworICAgICAgICBkID0gc2VsZi5kZWNsYXJhdGlvbigpCisgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLmFwcGVuZChkKQorCisgICAgICAgICMgaW5pdGlhbGl6ZXJzCisgICAgICAgIGluaXRpYWxpemVycyA9IHNlbGYuaW5pdGlhbGl6ZSgpCisgICAgICAgIGlmIGluaXRpYWxpemVyczoKKyAgICAgICAgICAgIGRhdGEuaW5pdGlhbGl6ZXJzLmFwcGVuZCgnLyogaW5pdGlhbGl6ZXJzIGZvciAnICsgbmFtZSArICcgKi9cbicgKyBpbml0aWFsaXplcnMucnN0cmlwKCkpCisKKyAgICAgICAgIyBpbXBsX2FyZ3VtZW50cworICAgICAgICBzID0gKCImIiBpZiBzZWxmLmltcGxfYnlfcmVmZXJlbmNlIGVsc2UgIiIpICsgbmFtZQorICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChzKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKHNlbGYubGVuZ3RoX25hbWUoKSkKKworICAgICAgICAjIGtleXdvcmRzCisgICAgICAgIGRhdGEua2V5d29yZHMuYXBwZW5kKG5hbWUpCisKKyAgICAgICAgIyBmb3JtYXRfdW5pdHMKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpb25hbCgpIGFuZCAnfCcgbm90IGluIGRhdGEuZm9ybWF0X3VuaXRzOgorICAgICAgICAgICAgZGF0YS5mb3JtYXRfdW5pdHMuYXBwZW5kKCd8JykKKyAgICAgICAgaWYgcGFyYW1ldGVyLmlzX2tleXdvcmRfb25seSgpIGFuZCAnJCcgbm90IGluIGRhdGEuZm9ybWF0X3VuaXRzOgorICAgICAgICAgICAgZGF0YS5mb3JtYXRfdW5pdHMuYXBwZW5kKCckJykKKyAgICAgICAgZGF0YS5mb3JtYXRfdW5pdHMuYXBwZW5kKHNlbGYuZm9ybWF0X3VuaXQpCisKKyAgICAgICAgIyBwYXJzZV9hcmd1bWVudHMKKyAgICAgICAgc2VsZi5wYXJzZV9hcmd1bWVudChkYXRhLnBhcnNlX2FyZ3VtZW50cykKKworICAgICAgICAjIGltcGxfcGFyYW1ldGVycworICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oYnlfcmVmZXJlbmNlPXNlbGYuaW1wbF9ieV9yZWZlcmVuY2UpKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiUHlfc3NpemVfY2xlYW5fdCAiICsgc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBjbGVhbnVwID0gc2VsZi5jbGVhbnVwKCkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIGRhdGEuY2xlYW51cC5hcHBlbmQoJy8qIENsZWFudXAgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGNsZWFudXAucnN0cmlwKCkgKyAiXG4iKQorCisgICAgZGVmIGxlbmd0aF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlcyB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRlZCAibGVuZ3RoIiB2YXJpYWJsZS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSArICJfbGVuZ3RoIgorCisgICAgIyBXaHkgaXMgdGhpcyBvbmUgYnJva2VuIG91dCBzZXBhcmF0ZWx5PworICAgICMgRm9yICJwb3NpdGlvbmFsLW9ubHkiIGZ1bmN0aW9uIHBhcnNpbmcsCisgICAgIyB3aGljaCBnZW5lcmF0ZXMgYSBidW5jaCBvZiBQeUFyZ19QYXJzZVR1cGxlIGNhbGxzLgorICAgIGRlZiBwYXJzZV9hcmd1bWVudChzZWxmLCBsaXN0KToKKyAgICAgICAgYXNzZXJ0IG5vdCAoc2VsZi5jb252ZXJ0ZXIgYW5kIHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGlmIHNlbGYuZm9ybWF0X3VuaXQgPT0gJ08mJzoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvbnZlcnRlcgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5jb252ZXJ0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHNlbGYuZW5jb2RpbmcpCisKKyAgICAgICAgbGVnYWxfbmFtZSA9IGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKQorICAgICAgICBzID0gKCImIiBpZiBzZWxmLnBhcnNlX2J5X3JlZmVyZW5jZSBlbHNlICIiKSArIGxlZ2FsX25hbWUKKyAgICAgICAgbGlzdC5hcHBlbmQocykKKworICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKCImIiArIHNlbGYubGVuZ3RoX25hbWUoKSkKKworICAgICMKKyAgICAjIEFsbCB0aGUgZnVuY3Rpb25zIGFmdGVyIGhlcmUgYXJlIGludGVuZGVkIGFzIGV4dGVuc2lvbiBwb2ludHMuCisgICAgIworCisgICAgZGVmIHNpbXBsZV9kZWNsYXJhdGlvbihzZWxmLCBieV9yZWZlcmVuY2U9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tcHV0ZXMgdGhlIGJhc2ljIGRlY2xhcmF0aW9uIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgVXNlZCBpbiBjb21wdXRpbmcgdGhlIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBhbmQgdGhlCisgICAgICAgIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcHJvdG90eXBlID0gW3NlbGYudHlwZV0KKyAgICAgICAgaWYgYnlfcmVmZXJlbmNlIG9yIG5vdCBzZWxmLnR5cGUuZW5kc3dpdGgoJyonKToKKyAgICAgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoIiAiKQorICAgICAgICBpZiBieV9yZWZlcmVuY2U6CisgICAgICAgICAgICBwcm90b3R5cGUuYXBwZW5kKCcqJykKKyAgICAgICAgcHJvdG90eXBlLmFwcGVuZChlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkpCisgICAgICAgIHJldHVybiAiIi5qb2luKHByb3RvdHlwZSkKKworICAgIGRlZiBkZWNsYXJhdGlvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudCB0byBkZWNsYXJlIHRoaXMgdmFyaWFibGUuCisgICAgICAgICIiIgorICAgICAgICBkZWNsYXJhdGlvbiA9IFtzZWxmLnNpbXBsZV9kZWNsYXJhdGlvbigpXQorICAgICAgICBkZWZhdWx0ID0gc2VsZi5jX2RlZmF1bHQKKyAgICAgICAgaWYgbm90IGRlZmF1bHQgYW5kIHNlbGYucGFyYW1ldGVyLmdyb3VwOgorICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYuY19pZ25vcmVkX2RlZmF1bHQKKyAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgiID0gIikKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZChkZWZhdWx0KQorICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoIjsiKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgnXG5QeV9zc2l6ZV9jbGVhbl90ICcpCisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoc2VsZi5sZW5ndGhfbmFtZSgpKQorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCc7JykKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oZGVjbGFyYXRpb24pCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoaXMgdmFyaWFibGUgYmVmb3JlIHBhcnNpbmcuCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGlzIGNvZGUgaW5kZW50ZWQgYXQgY29sdW1uIDAuCisgICAgICAgIElmIG5vIGluaXRpYWxpemF0aW9uIGlzIG5lY2Vzc2FyeSwgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBjbGVhbiB1cCBhZnRlciB0aGlzIHZhcmlhYmxlLgorICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhpcyBjb2RlIGluZGVudGVkIGF0IGNvbHVtbiAwLgorICAgICAgICBJZiBubyBjbGVhbnVwIGlzIG5lY2Vzc2FyeSwgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIiIKKworCitjbGFzcyBib29sX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBmb3JtYXRfdW5pdCA9ICdwJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gJzAnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuZGVmYXVsdCA9IGJvb2woc2VsZi5kZWZhdWx0KQorICAgICAgICBzZWxmLmNfZGVmYXVsdCA9IHN0cihpbnQoc2VsZi5kZWZhdWx0KSkKKworY2xhc3MgY2hhcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjaGFyJworICAgIGZvcm1hdF91bml0ID0gJ2MnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiJ1wwJyIKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0InLCBiaXR3aXNlPVRydWUpCitjbGFzcyBieXRlX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2J5dGUnCisgICAgZm9ybWF0X3VuaXQgPSAnYicKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICInXDAnIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBiaXR3aXNlOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdCJworCitjbGFzcyBzaG9ydF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdzaG9ydCcKKyAgICBmb3JtYXRfdW5pdCA9ICdoJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKK2NsYXNzIHVuc2lnbmVkX3Nob3J0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIHNob3J0JworICAgIGZvcm1hdF91bml0ID0gJ0gnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBzaG9ydHMgbXVzdCBiZSBiaXR3aXNlIChmb3Igbm93KS4iKQorCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignQycsIHR5cGVzPSdzdHInKQorY2xhc3MgaW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBmb3JtYXRfdW5pdCA9ICdpJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZXM9J2ludCcpOgorICAgICAgICBpZiB0eXBlcyA9PSAnc3RyJzoKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnQycKKyAgICAgICAgZWxpZiB0eXBlcyAhPSAnaW50JzoKKyAgICAgICAgICAgIGZhaWwoImludF9jb252ZXJ0ZXI6IGlsbGVnYWwgJ3R5cGVzJyBhcmd1bWVudCIpCisKK2NsYXNzIHVuc2lnbmVkX2ludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgZm9ybWF0X3VuaXQgPSAnSScKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgYml0d2lzZToKKyAgICAgICAgICAgIGZhaWwoIlVuc2lnbmVkIGludHMgbXVzdCBiZSBiaXR3aXNlIChmb3Igbm93KS4iKQorCitjbGFzcyBsb25nX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2xvbmcnCisgICAgZm9ybWF0X3VuaXQgPSAnbCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9sb25nX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGxvbmcnCisgICAgZm9ybWF0X3VuaXQgPSAnaycKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgYml0d2lzZToKKyAgICAgICAgICAgIGZhaWwoIlVuc2lnbmVkIGxvbmdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUFlfTE9OR19MT05HX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1BZX0xPTkdfTE9ORycKKyAgICBmb3JtYXRfdW5pdCA9ICdMJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKK2NsYXNzIHVuc2lnbmVkX1BZX0xPTkdfTE9OR19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBQWV9MT05HX0xPTkcnCisgICAgZm9ybWF0X3VuaXQgPSAnSycKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgYml0d2lzZToKKyAgICAgICAgICAgIGZhaWwoIlVuc2lnbmVkIFBZX0xPTkdfTE9OR3MgbXVzdCBiZSBiaXR3aXNlIChmb3Igbm93KS4iKQorCitjbGFzcyBQeV9zc2l6ZV90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X3NzaXplX3QnCisgICAgZm9ybWF0X3VuaXQgPSAnbicKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisKK2NsYXNzIGZsb2F0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2Zsb2F0JworICAgIGZvcm1hdF91bml0ID0gJ2YnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMC4wIgorCitjbGFzcyBkb3VibGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZG91YmxlJworICAgIGZvcm1hdF91bml0ID0gJ2QnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMC4wIgorCisKK2NsYXNzIFB5X2NvbXBsZXhfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfY29tcGxleCcKKyAgICBmb3JtYXRfdW5pdCA9ICdEJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gInswLjAsIDAuMH0iCisKKworY2xhc3Mgb2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnTycKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCB0eXBlPU5vbmUpOgorICAgICAgICBpZiB0eXBlOgorICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodHlwZSwgc3RyKQorICAgICAgICAgICAgYXNzZXJ0IHR5cGUuaXNpZGVudGlmaWVyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0eXBlID0gZXZhbCh0eXBlKQorICAgICAgICAgICAgICAgICMgbmVlZCBtb3JlIG9mIHRoZXNlIQorICAgICAgICAgICAgICAgIHR5cGUgPSB7CisgICAgICAgICAgICAgICAgICAgIHN0cjogJyZQeVVuaWNvZGVfVHlwZScsCisgICAgICAgICAgICAgICAgICAgIH1bdHlwZV0KKyAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnTyEnCisgICAgICAgICAgICBzZWxmLmVuY29kaW5nID0gdHlwZQorCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCdzIycsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3knLCB0eXBlPSJieXRlcyIpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneSMnLCB0eXBlPSJieXRlcyIsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3onLCBudWxsYWJsZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3ojJywgbnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpCitjbGFzcyBzdHJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY29uc3QgY2hhciAqJworICAgIGZvcm1hdF91bml0ID0gJ3MnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgZW5jb2Rpbmc9Tm9uZSwgdHlwZXM9InN0ciIsCisgICAgICAgIGxlbmd0aD1GYWxzZSwgbnVsbGFibGU9RmFsc2UsIHplcm9lcz1GYWxzZSk6CisKKyAgICAgICAgdHlwZXMgPSBzZXQodHlwZXMuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBieXRlc190eXBlID0gc2V0KCgiYnl0ZXMiLCkpCisgICAgICAgIHN0cl90eXBlID0gc2V0KCgic3RyIiwpKQorICAgICAgICBhbGxfM190eXBlID0gc2V0KCgiYnl0ZWFycmF5IiwpKSB8IGJ5dGVzX3R5cGUgfCBzdHJfdHlwZQorICAgICAgICBpc19ieXRlcyA9IHR5cGVzID09IGJ5dGVzX3R5cGUKKyAgICAgICAgaXNfc3RyID0gdHlwZXMgPT0gc3RyX3R5cGUKKyAgICAgICAgaXNfYWxsXzMgPSB0eXBlcyA9PSBhbGxfM190eXBlCisKKyAgICAgICAgc2VsZi5sZW5ndGggPSBib29sKGxlbmd0aCkKKyAgICAgICAgZm9ybWF0X3VuaXQgPSBOb25lCisKKyAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAgICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKKworICAgICAgICAgICAgaWYgaXNfc3RyIGFuZCBub3QgKGxlbmd0aCBvciB6ZXJvZXMgb3IgbnVsbGFibGUpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2VzJworICAgICAgICAgICAgZWxpZiBpc19hbGxfMyBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCcKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBsZW5ndGggYW5kIHplcm9lcyBhbmQgbm90IG51bGxhYmxlOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2VzIycKKyAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIGxlbmd0aCBhbmQgbm90IChudWxsYWJsZSBvciB6ZXJvZXMpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2V0IycKKworICAgICAgICAgICAgaWYgZm9ybWF0X3VuaXQuZW5kc3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogY29kZSB1c2luZyBmb3JtYXQgdW5pdCAiLCByZXByKGZvcm1hdF91bml0KSwgInByb2JhYmx5IGRvZXNuJ3Qgd29yayBwcm9wZXJseS4iKQorICAgICAgICAgICAgICAgICMgVE9ETyBzZXQgcG9pbnRlciB0byBOVUxMCisgICAgICAgICAgICAgICAgIyBUT0RPIGFkZCBjbGVhbnVwIGZvciBidWZmZXIKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHplcm9lczoKKyAgICAgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAoemVyb2VzIGlzIG9ubHkgbGVnYWwgd2l0aCBhbiBlbmNvZGluZykiKQorCisgICAgICAgICAgICBpZiBpc19ieXRlcyBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3knCisgICAgICAgICAgICBlbGlmIGlzX2J5dGVzIGFuZCBsZW5ndGggYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5IycKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBub3QgKG51bGxhYmxlIG9yIGxlbmd0aCk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncycKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBsZW5ndGggYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdzIycKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBudWxsYWJsZSAgYW5kIG5vdCBsZW5ndGg6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneicKKyAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBudWxsYWJsZSBhbmQgbGVuZ3RoOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3ojJworCisgICAgICAgIGlmIG5vdCBmb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGZhaWwoInN0cl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIikKKyAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9IGZvcm1hdF91bml0CisKKworY2xhc3MgUHlCeXRlc09iamVjdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeUJ5dGVzT2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnUycKKworY2xhc3MgUHlCeXRlQXJyYXlPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlQXJyYXlPYmplY3QgKicKKyAgICBmb3JtYXRfdW5pdCA9ICdZJworCitjbGFzcyB1bmljb2RlX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnVScKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3UjJywgbGVuZ3RoPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignWicsIG51bGxhYmxlPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignWiMnLCBudWxsYWJsZT1UcnVlLCBsZW5ndGg9VHJ1ZSkKK2NsYXNzIFB5X1VOSUNPREVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfVU5JQ09ERSAqJworICAgIGZvcm1hdF91bml0ID0gJ3UnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgbnVsbGFibGU9RmFsc2UsIGxlbmd0aD1GYWxzZSk6CisgICAgICAgIGZvcm1hdF91bml0ID0gJ1onIGlmIG51bGxhYmxlIGVsc2UgJ3UnCisgICAgICAgIGlmIGxlbmd0aDoKKyAgICAgICAgICAgIGZvcm1hdF91bml0ICs9ICcjJworICAgICAgICAgICAgc2VsZi5sZW5ndGggPSBUcnVlCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisjCisjIFdlIGRlZmluZSB0aHJlZSBzdHJpbmcgY29udmVudGlvbnMgZm9yIGJ1ZmZlciB0eXBlcyBpbiB0aGUgJ3R5cGVzJyBhcmd1bWVudDoKKyMgICdidWZmZXInIDogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlCisjICAncndidWZmZXInOiBhbnkgb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGJ1ZmZlciBpbnRlcmZhY2UsIGJ1dCBtdXN0IGJlIHdyaXRlYWJsZQorIyAgJ3JvYnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBub3QgYmUgd3JpdGVhYmxlCisjCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigncyonLCB0eXBlcz0nc3RyIGJ5dGVzIGJ5dGVhcnJheSBidWZmZXInKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3oqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd3KicsIHR5cGVzPSdieXRlYXJyYXkgcndidWZmZXInKQorY2xhc3MgUHlfYnVmZmVyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2J1ZmZlcicKKyAgICBmb3JtYXRfdW5pdCA9ICd5KicKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IFRydWUKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICJ7TlVMTCwgTlVMTCwgMCwgMCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0iCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZXM9J2J5dGVzIGJ5dGVhcnJheSBidWZmZXInLCBudWxsYWJsZT1GYWxzZSk6CisgICAgICAgIHR5cGVzID0gc2V0KHR5cGVzLnN0cmlwKCkuc3BsaXQoKSkKKyAgICAgICAgYnl0ZXNfdHlwZSA9IHNldCgoJ2J5dGVzJywpKQorICAgICAgICBieXRlYXJyYXlfdHlwZSA9IHNldCgoJ2J5dGVhcnJheScsKSkKKyAgICAgICAgYnVmZmVyX3R5cGUgPSBzZXQoKCdidWZmZXInLCkpCisgICAgICAgIHJ3YnVmZmVyX3R5cGUgPSBzZXQoKCdyd2J1ZmZlcicsKSkKKyAgICAgICAgcm9idWZmZXJfdHlwZSA9IHNldCgoJ3JvYnVmZmVyJywpKQorICAgICAgICBzdHJfdHlwZSA9IHNldCgoJ3N0cicsKSkKKyAgICAgICAgYnl0ZXNfYnl0ZWFycmF5X2J1ZmZlcl90eXBlID0gYnl0ZXNfdHlwZSB8IGJ5dGVhcnJheV90eXBlIHwgYnVmZmVyX3R5cGUKKworICAgICAgICBmb3JtYXRfdW5pdCA9IE5vbmUKKyAgICAgICAgaWYgdHlwZXMgPT0gKHN0cl90eXBlIHwgYnl0ZXNfYnl0ZWFycmF5X2J1ZmZlcl90eXBlKToKKyAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3MqJyBpZiBub3QgbnVsbGFibGUgZWxzZSAneionCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmYWlsKCdQeV9idWZmZXJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAobnVsbGFibGU9VHJ1ZSknKQorICAgICAgICAgICAgZWxpZiB0eXBlcyA9PSAoYnl0ZXNfYnl0ZWFycmF5X2J1ZmZlcl90eXBlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5KicKKyAgICAgICAgICAgIGVsaWYgdHlwZXMgPT0gKGJ5dGVhcnJheV90eXBlIHwgcnd1ZmZlcl90eXBlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd3KicKKyAgICAgICAgaWYgbm90IGZvcm1hdF91bml0OgorICAgICAgICAgICAgZmFpbCgiUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMiKQorCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oWyJpZiAoIiwgbmFtZSwgIi5idWYpXG4gICBQeUJ1ZmZlcl9SZWxlYXNlKCYiLCBuYW1lLCAiKTtcbiJdKQorCisKK2NsYXNzIHNlbGZfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgICIiIgorICAgIEEgc3BlY2lhbC1jYXNlIGNvbnZlcnRlcjoKKyAgICB0aGlzIGlzIHRoZSBkZWZhdWx0IGNvbnZlcnRlciB1c2VkIGZvciAic2VsZiIuCisgICAgIiIiCisgICAgdHlwZSA9ICJQeU9iamVjdCAqIgorICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZnVuY3Rpb24KKyAgICAgICAgaWYgZi5raW5kID09IENBTExBQkxFOgorICAgICAgICAgICAgaWYgZi5jbHM6CisgICAgICAgICAgICAgICAgc2VsZi5uYW1lID0gInNlbGYiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9ICJtb2R1bGUiCisgICAgICAgICAgICAgICAgc2VsZi50eXBlID0gIlB5TW9kdWxlRGVmICoiCisgICAgICAgIGVsaWYgZi5raW5kID09IFNUQVRJQ19NRVRIT0Q6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSAibnVsbCIKKyAgICAgICAgICAgIHNlbGYudHlwZSA9ICJ2b2lkICoiCisgICAgICAgIGVsaWYgZi5raW5kID09IENMQVNTX01FVEhPRDoKKyAgICAgICAgICAgIHNlbGYubmFtZSA9ICJjbHMiCisgICAgICAgICAgICBzZWxmLnR5cGUgPSAiUHlUeXBlT2JqZWN0ICoiCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgIGZhaWwoInJlbmRlcigpIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gc2VsZl9jb252ZXJ0ZXIgaW5zdGFuY2VzIikKKworCisKK2RlZiBhZGRfY19yZXR1cm5fY29udmVydGVyKGYsIG5hbWU9Tm9uZSk6CisgICAgaWYgbm90IG5hbWU6CisgICAgICAgIG5hbWUgPSBmLl9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCdfcmV0dXJuX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19yZXR1cm5fY29udmVydGVyJyldCisgICAgcmV0dXJuX2NvbnZlcnRlcnNbbmFtZV0gPSBmCisgICAgcmV0dXJuIGYKKworCitjbGFzcyBDUmV0dXJuQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyKGNscykKKworY2xhc3MgQ1JldHVybkNvbnZlcnRlcihtZXRhY2xhc3M9Q1JldHVybkNvbnZlcnRlckF1dG9SZWdpc3Rlcik6CisKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZGVmYXVsdCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBkb2NfZGVmYXVsdD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZG9jX2RlZmF1bHQgPSBkb2NfZGVmYXVsdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJldHVybl9jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgcyA9ICcsICcuam9pbihuYW1lICsgJz0nICsgcmVwcih2YWx1ZSkgZm9yIG5hbWUsIHZhbHVlIGluIGt3YXJncy5pdGVtcygpKQorICAgICAgICAgICAgc3lzLmV4aXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnKCcgKyBzICsgJylcbicgKyBzdHIoZSkpCisKKyAgICBkZWYgcmV0dXJuX2NvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZGVjbGFyZShzZWxmLCBkYXRhLCBuYW1lPSJfcmV0dXJuX3ZhbHVlIik6CisgICAgICAgIGxpbmUgPSBbXQorICAgICAgICBhZGQgPSBsaW5lLmFwcGVuZAorICAgICAgICBhZGQoc2VsZi50eXBlKQorICAgICAgICBpZiBub3Qgc2VsZi50eXBlLmVuZHN3aXRoKCcqJyk6CisgICAgICAgICAgICBhZGQoJyAnKQorICAgICAgICBhZGQobmFtZSArICc7JykKKyAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMuYXBwZW5kKCcnLmpvaW4obGluZSkpCisgICAgICAgIGRhdGEucmV0dXJuX3ZhbHVlID0gbmFtZQorCisgICAgZGVmIGVycl9vY2N1cnJlZF9pZihzZWxmLCBleHByLCBkYXRhKToKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoJ2lmICgoe30pICYmIFB5RXJyX09jY3VycmVkKCkpXG4gICAgZ290byBleGl0O1xuJy5mb3JtYXQoZXhwcikpCisKKyAgICBkZWYgZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcihzZWxmLCB2YXJpYWJsZSwgZGF0YSk6CisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCdpZiAoe30gPT0gTlVMTClcbiAgICBnb3RvIGV4aXQ7XG4nLmZvcm1hdCh2YXJpYWJsZSkpCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIGZ1bmN0aW9uIGlzIGEgY2xpbmljLkZ1bmN0aW9uIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKK2FkZF9jX3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlciwgJ29iamVjdCcpCisKK2NsYXNzIGludF9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnaW50JworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTtcbicpCisKKworY2xhc3MgbG9uZ19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnbG9uZycKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICdyZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIFB5X3NzaXplX3RfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X3NzaXplX3QnCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmKCJfcmV0dXJuX3ZhbHVlID09IC0xIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9yZXR1cm5fdmFsdWUpO1xuJykKKworCitjbGFzcyBEZWNvZGVGU0RlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NoYXIgKicKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWZfbnVsbF9wb2ludGVyKCJfcmV0dXJuX3ZhbHVlIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTtcbicpCisKKworY2xhc3MgSW5kZW50U3RhY2s6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmluZGVudHMgPSBbXQorICAgICAgICBzZWxmLm1hcmdpbiA9IE5vbmUKKworICAgIGRlZiBfZW5zdXJlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgZmFpbCgnSW5kZW50U3RhY2sgZXhwZWN0ZWQgaW5kZW50cywgYnV0IG5vbmUgYXJlIGRlZmluZWQuJykKKworICAgIGRlZiBtZWFzdXJlKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5lJ3MgbWFyZ2luLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgZmFpbCgnVGFiIGNoYXJhY3RlcnMgYXJlIGlsbGVnYWwgaW4gdGhlIENsaW5pYyBEU0wuJykKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLmxzdHJpcCgpCisgICAgICAgIGlmIG5vdCBsZW4oc3RyaXBwZWQpOgorICAgICAgICAgICAgIyB3ZSBjYW4ndCB0ZWxsIGFueXRoaW5nIGZyb20gYW4gZW1wdHkgbGluZQorICAgICAgICAgICAgIyBzbyBqdXN0IHByZXRlbmQgaXQncyBpbmRlbnRlZCBsaWtlIG91ciBjdXJyZW50IGluZGVudAorICAgICAgICAgICAgc2VsZi5fZW5zdXJlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIHJldHVybiBsZW4obGluZSkgLSBsZW4oc3RyaXBwZWQpCisKKyAgICBkZWYgaW5mZXIoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBJbmZlciB3aGF0IGlzIG5vdyB0aGUgY3VycmVudCBtYXJnaW4gYmFzZWQgb24gdGhpcyBsaW5lLgorICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgMSBpZiB3ZSBoYXZlIGluZGVudGVkIChvciB0aGlzIGlzIHRoZSBmaXJzdCBtYXJnaW4pCisgICAgICAgICAgICAwIGlmIHRoZSBtYXJnaW4gaGFzIG5vdCBjaGFuZ2VkCisgICAgICAgICAgIC1OIGlmIHdlIGhhdmUgZGVkZW50ZWQgTiB0aW1lcworICAgICAgICAiIiIKKyAgICAgICAgaW5kZW50ID0gc2VsZi5tZWFzdXJlKGxpbmUpCisgICAgICAgIG1hcmdpbiA9ICcgJyAqIGluZGVudAorICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLmFwcGVuZChpbmRlbnQpCisgICAgICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgaW5kZW50ID09IGN1cnJlbnQ6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBpbmRlbnQgPiBjdXJyZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLmFwcGVuZChpbmRlbnQpCisgICAgICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgIyBpbmRlbnQgPCBjdXJyZW50CisgICAgICAgIGlmIGluZGVudCBub3QgaW4gc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgZmFpbCgiSWxsZWdhbCBvdXRkZW50LiIpCisgICAgICAgIG91dGRlbnRfY291bnQgPSAwCisgICAgICAgIHdoaWxlIGluZGVudCAhPSBjdXJyZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLnBvcCgpCisgICAgICAgICAgICBjdXJyZW50ID0gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICAgICAgb3V0ZGVudF9jb3VudCAtPSAxCisgICAgICAgIHNlbGYubWFyZ2luID0gbWFyZ2luCisgICAgICAgIHJldHVybiBvdXRkZW50X2NvdW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVwdGgoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGhvdyBtYW55IG1hcmdpbnMgYXJlIGN1cnJlbnRseSBkZWZpbmVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmluZGVudHMpCisKKyAgICBkZWYgaW5kZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5kZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLm1hcmdpbiArIGxpbmUKKworICAgIGRlZiBkZWRlbnQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBEZWRlbnRzIGEgbGluZSBieSB0aGUgY3VycmVudGx5IGRlZmluZWQgbWFyZ2luLgorICAgICAgICAoVGhlIGludmVyc2Ugb2YgJ2luZGVudCcuKQorICAgICAgICAiIiIKKyAgICAgICAgbWFyZ2luID0gc2VsZi5tYXJnaW4KKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKG1hcmdpbik6CisgICAgICAgICAgICBmYWlsKCdDYW5ub3QgZGVkZW50LCBsaW5lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZXZpb3VzIG1hcmdpbjonKQorICAgICAgICByZXR1cm4gbGluZVtpbmRlbnQ6XQorCisKK2NsYXNzIERTTFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgc2VsZi5jbGluaWMgPSBjbGluaWMKKworICAgICAgICBzZWxmLmRpcmVjdGl2ZXMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc2VsZik6CisgICAgICAgICAgICAjIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggZGlyZWN0aXZlXyBhcmUgYWRkZWQgdG8gZGlyZWN0aXZlcworICAgICAgICAgICAgXywgcywga2V5ID0gbmFtZS5wYXJ0aXRpb24oImRpcmVjdGl2ZV8iKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGl2ZXNba2V5XSA9IGdldGF0dHIoc2VsZiwgbmFtZSkKKworICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGF0XyBhcmUgdG9vLCB3aXRoIGFuIEAgaW4gZnJvbnQKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJhdF8iKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGl2ZXNbJ0AnICsga2V5XSA9IGdldGF0dHIoc2VsZiwgbmFtZSkKKworICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVfZHNsX3N0YXJ0CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2luZGVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXl3b3JkX29ubHkgPSBGYWxzZQorICAgICAgICBzZWxmLmdyb3VwID0gMAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfc3RhcnQKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBJbmRlbnRTdGFjaygpCisgICAgICAgIHNlbGYua2luZCA9IENBTExBQkxFCisgICAgICAgIHNlbGYuY29leGlzdCA9IEZhbHNlCisKKyAgICBkZWYgZGlyZWN0aXZlX3ZlcnNpb24oc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBnbG9iYWwgdmVyc2lvbgorICAgICAgICBpZiB2ZXJzaW9uX2NvbXBhcml0b3IodmVyc2lvbiwgcmVxdWlyZWQpIDwgMDoKKyAgICAgICAgICAgIGZhaWwoIkluc3VmZmljaWVudCBDbGluaWMgdmVyc2lvbiFcbiAgVmVyc2lvbjogIiArIHZlcnNpb24gKyAiXG4gIFJlcXVpcmVkOiAiICsgcmVxdWlyZWQpCisKKyAgICBkZWYgZGlyZWN0aXZlX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgZmllbGRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIG5ldyA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgbmVzdCBhIG1vZHVsZSBpbnNpZGUgYSBjbGFzcyEiKQorICAgICAgICBtID0gTW9kdWxlKG5hbWUsIG1vZHVsZSkKKyAgICAgICAgbW9kdWxlLm1vZHVsZXNbbmFtZV0gPSBtCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQobSkKKworICAgIGRlZiBkaXJlY3RpdmVfY2xhc3Moc2VsZiwgbmFtZSk6CisgICAgICAgIGZpZWxkcyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gc2VsZgorICAgICAgICBuYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgIHNvX2ZhciA9IFtdCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorCisgICAgICAgIGMgPSBDbGFzcyhuYW1lLCBtb2R1bGUsIGNscykKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgY2xzLmNsYXNzZXNbbmFtZV0gPSBjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGUuY2xhc3Nlc1tuYW1lXSA9IGMKKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChjKQorCisgICAgZGVmIGF0X2NsYXNzbWV0aG9kKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5raW5kIGlzIENBTExBQkxFCisgICAgICAgIHNlbGYua2luZCA9IENMQVNTX01FVEhPRAorCisgICAgZGVmIGF0X3N0YXRpY21ldGhvZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYua2luZCBpcyBDQUxMQUJMRQorICAgICAgICBzZWxmLmtpbmQgPSBTVEFUSUNfTUVUSE9ECisKKyAgICBkZWYgYXRfY29leGlzdChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuY29leGlzdCA9PSBGYWxzZQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBUcnVlCisKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBzZWxmLmJsb2NrID0gYmxvY2sKKyAgICAgICAgYmxvY2tfc3RhcnQgPSBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIubGluZV9udW1iZXIKKyAgICAgICAgbGluZXMgPSBibG9jay5pbnB1dC5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzLCBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIpOgorICAgICAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBDbGluaWMgRFNMLlxuXHQnICsgcmVwcihsaW5lKSwgbGluZV9udW1iZXI9YmxvY2tfc3RhcnQpCisgICAgICAgICAgICBzZWxmLnN0YXRlKGxpbmUpCisKKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfdGVybWluYWwpCisgICAgICAgIHNlbGYuc3RhdGUoTm9uZSkKKworICAgICAgICBibG9jay5vdXRwdXQgPSBzZWxmLmNsaW5pYy5sYW5ndWFnZS5yZW5kZXIoYmxvY2suc2lnbmF0dXJlcykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICMgaWdub3JlIGNvbW1lbnQtb25seSBsaW5lcworICAgICAgICBpZiBsaW5lLmxzdHJpcCgpLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBJZ25vcmUgZW1wdHkgbGluZXMgdG9vCisgICAgICAgICMgKGJ1dCBub3QgaW4gZG9jc3RyaW5nIHNlY3Rpb25zISkKKyAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNhbGN1bGF0ZV9pbmRlbnQobGluZSk6CisgICAgICAgIHJldHVybiBsZW4obGluZSkgLSBsZW4obGluZS5zdHJpcCgpKQorCisgICAgZGVmIG5leHQoc2VsZiwgc3RhdGUsIGxpbmU9Tm9uZSk6CisgICAgICAgICMgcmVhbF9wcmludChzZWxmLnN0YXRlLl9fbmFtZV9fLCAiLT4iLCBzdGF0ZS5fX25hbWVfXywgIiwgbGluZT0iLCBsaW5lKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKKyAgICAgICAgaWYgbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUobGluZSkKKworICAgIGRlZiBzdGF0ZV9kc2xfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgICMgc2VsZi5ibG9jayA9IHNlbGYuQ2xpbmljT3V0cHV0QmxvY2soc2VsZikKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLm5leHQoc2VsZi5zdGF0ZV9tb2R1bGVuYW1lX25hbWUsIGxpbmUpCisKKyAgICBkZWYgc3RhdGVfbW9kdWxlbmFtZV9uYW1lKHNlbGYsIGxpbmUpOgorICAgICAgICAjIGxvb2tpbmcgZm9yIGRlY2xhcmF0aW9uLCB3aGljaCBlc3RhYmxpc2hlcyB0aGUgbGVmdG1vc3QgY29sdW1uCisgICAgICAgICMgbGluZSBzaG91bGQgYmUKKyAgICAgICAgIyAgICAgbW9kdWxlbmFtZS5mbm5hbWUgW2FzIGNfYmFzZW5hbWVdIFstPiByZXR1cm4gYW5ub3RhdGlvbl0KKyAgICAgICAgIyBzcXVhcmUgYnJhY2tldHMgZGVub3RlIG9wdGlvbmFsIHN5bnRheC4KKyAgICAgICAgIworICAgICAgICAjIChidXQgd2UgbWlnaHQgZmluZCBhIGRpcmVjdGl2ZSBmaXJzdCEpCisgICAgICAgICMKKyAgICAgICAgIyB0aGlzIGxpbmUgaXMgcGVybWl0dGVkIHRvIHN0YXJ0IHdpdGggd2hpdGVzcGFjZS4KKyAgICAgICAgIyB3ZSdsbCBjYWxsIHRoaXMgbnVtYmVyIG9mIHNwYWNlcyBGIChmb3IgImZ1bmN0aW9uIikuCisKKyAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisKKyAgICAgICAgIyBpcyBpdCBhIGRpcmVjdGl2ZT8KKyAgICAgICAgZmllbGRzID0gc2hsZXguc3BsaXQobGluZSkKKyAgICAgICAgZGlyZWN0aXZlX25hbWUgPSBmaWVsZHNbMF0KKyAgICAgICAgZGlyZWN0aXZlID0gc2VsZi5kaXJlY3RpdmVzLmdldChkaXJlY3RpdmVfbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgZGlyZWN0aXZlOgorICAgICAgICAgICAgZGlyZWN0aXZlKCpmaWVsZHNbMTpdKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbGluZSwgXywgcmV0dXJucyA9IGxpbmUucGFydGl0aW9uKCctPicpCisKKyAgICAgICAgZnVsbF9uYW1lLCBfLCBjX2Jhc2VuYW1lID0gbGluZS5wYXJ0aXRpb24oJyBhcyAnKQorICAgICAgICBmdWxsX25hbWUgPSBmdWxsX25hbWUuc3RyaXAoKQorICAgICAgICBjX2Jhc2VuYW1lID0gY19iYXNlbmFtZS5zdHJpcCgpIG9yIE5vbmUKKworICAgICAgICBpZiBub3QgaXNfbGVnYWxfcHlfaWRlbnRpZmllcihmdWxsX25hbWUpOgorICAgICAgICAgICAgZmFpbCgiSWxsZWdhbCBmdW5jdGlvbiBuYW1lOiB7fSIuZm9ybWF0KGZ1bGxfbmFtZSkpCisgICAgICAgIGlmIGNfYmFzZW5hbWUgYW5kIG5vdCBpc19sZWdhbF9jX2lkZW50aWZpZXIoY19iYXNlbmFtZSk6CisgICAgICAgICAgICBmYWlsKCJJbGxlZ2FsIEMgYmFzZW5hbWU6IHt9Ii5mb3JtYXQoY19iYXNlbmFtZSkpCisKKyAgICAgICAgaWYgbm90IHJldHVybnM6CisgICAgICAgICAgICByZXR1cm5fY29udmVydGVyID0gQ1JldHVybkNvbnZlcnRlcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoKSAtPiB7fTogcGFzcyIuZm9ybWF0KHJldHVybnMpCisgICAgICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gYXN0LnBhcnNlKGFzdF9pbnB1dCkKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgICAgIGZhaWwoIkJhZGx5LWZvcm1lZCBhbm5vdGF0aW9uIGZvciAiICsgZnVsbF9uYW1lICsgIjogIiArIHJldHVybnMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSwgbGVnYWN5LCBrd2FyZ3MgPSBzZWxmLnBhcnNlX2NvbnZlcnRlcihtb2R1bGUuYm9keVswXS5yZXR1cm5zKQorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgbGVnYWN5CisgICAgICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gcmV0dXJuX2NvbnZlcnRlcnM6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkVycm9yOiBObyBhdmFpbGFibGUgcmV0dXJuIGNvbnZlcnRlciBjYWxsZWQgIiArIHJlcHIobmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IHJldHVybl9jb252ZXJ0ZXJzW25hbWVdKCoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgZmFpbCgiQmFkbHktZm9ybWVkIGFubm90YXRpb24gZm9yICIgKyBmdWxsX25hbWUgKyAiOiAiICsgcmV0dXJucykKKworICAgICAgICBmaWVsZHMgPSBbeC5zdHJpcCgpIGZvciB4IGluIGZ1bGxfbmFtZS5zcGxpdCgnLicpXQorICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorCisgICAgICAgIGlmIG5vdCBtb2R1bGU6CisgICAgICAgICAgICBmYWlsKCJVbmRlZmluZWQgbW9kdWxlIHVzZWQgaW4gZGVjbGFyYXRpb24gb2YgIiArIHJlcHIoZnVsbF9uYW1lLnN0cmlwKCkpICsgIi4iKQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gRnVuY3Rpb24obmFtZT1mdW5jdGlvbl9uYW1lLCBmdWxsX25hbWU9ZnVsbF9uYW1lLCBtb2R1bGU9bW9kdWxlLCBjbHM9Y2xzLCBjX2Jhc2VuYW1lPWNfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fY29udmVydGVyPXJldHVybl9jb252ZXJ0ZXIsIGtpbmQ9c2VsZi5raW5kLCBjb2V4aXN0PXNlbGYuY29leGlzdCkKKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJzX3N0YXJ0KQorCisgICAgIyBOb3cgZW50ZXJpbmcgdGhlIHBhcmFtZXRlcnMgc2VjdGlvbi4gIFRoZSBydWxlcywgZm9ybWFsbHkgc3RhdGVkOgorICAgICMKKyAgICAjICAgKiBBbGwgbGluZXMgbXVzdCBiZSBpbmRlbnRlZCB3aXRoIHNwYWNlcyBvbmx5LgorICAgICMgICAqIFRoZSBmaXJzdCBsaW5lIG11c3QgYmUgYSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uCisgICAgIyAgICogVGhlIGZpcnN0IGxpbmUgbXVzdCBiZSBpbmRlbnRlZC4KKyAgICAjICAgICAgICogVGhpcyBmaXJzdCBsaW5lIGVzdGFibGlzaGVzIHRoZSBpbmRlbnQgZm9yIHBhcmFtZXRlcnMuCisgICAgIyAgICAgICAqIFdlJ2xsIGNhbGwgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIFAgKGZvciAicGFyYW1ldGVyIikuCisgICAgIyAgICogVGhlbmNlZm9ydGg6CisgICAgIyAgICAgICAqIExpbmVzIGluZGVudGVkIHdpdGggUCBzcGFjZXMgc3BlY2lmeSBhIHBhcmFtZXRlci4KKyAgICAjICAgICAgICogTGluZXMgaW5kZW50ZWQgd2l0aCA+IFAgc3BhY2VzIGFyZSBkb2NzdHJpbmdzIGZvciB0aGUgcHJldmlvdXMKKyAgICAjICAgICAgICAgcGFyYW1ldGVyLgorICAgICMgICAgICAgICAgICogV2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRCAoZm9yICJkb2NzdHJpbmciKS4KKyAgICAjICAgICAgICAgICAqIEFsbCBzdWJzZXF1ZW50IGxpbmVzIGluZGVudGVkIHdpdGggPj0gRCBzcGFjZXMgYXJlIHN0b3JlZCBhcworICAgICMgICAgICAgICAgICAgcGFydCBvZiB0aGUgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcuCisgICAgIyAgICAgICAgICAgKiBBbGwgbGluZXMgd2lsbCBoYXZlIHRoZSBmaXJzdCBEIHNwYWNlcyBvZiB0aGUgaW5kZW50IHN0cmlwcGVkCisgICAgIyAgICAgICAgICAgICBiZWZvcmUgdGhleSBhcmUgc3RvcmVkLgorICAgICMgICAgICAgICAgICogSXQncyBpbGxlZ2FsIHRvIGhhdmUgYSBsaW5lIHN0YXJ0aW5nIHdpdGggYSBudW1iZXIgb2Ygc3BhY2VzIFgKKyAgICAjICAgICAgICAgICAgIHN1Y2ggdGhhdCBQIDwgWCA8IEQuCisgICAgIyAgICAgICAqIEEgbGluZSB3aXRoIDwgUCBzcGFjZXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZ1bmN0aW9uCisgICAgIyAgICAgICAgIGRvY3N0cmluZywgd2hpY2ggZW5kcyBwcm9jZXNzaW5nIGZvciBwYXJhbWV0ZXJzIGFuZCBwZXItcGFyYW1ldGVyCisgICAgIyAgICAgICAgIGRvY3N0cmluZ3MuCisgICAgIyAgICAgICAgICAgKiBUaGUgZmlyc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24gZG9jc3RyaW5nIG11c3QgYmUgYXQgdGhlIHNhbWUKKyAgICAjICAgICAgICAgICAgIGluZGVudCBhcyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAgIyAgICAgICAqIEl0J3MgaWxsZWdhbCB0byBoYXZlIGFueSBsaW5lIGluIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24gc3RhcnRpbmcKKyAgICAjICAgICAgICAgd2l0aCBYIHNwYWNlcyBzdWNoIHRoYXQgRiA8IFggPCBQLiAgKEFzIGJlZm9yZSwgRiBpcyB0aGUgaW5kZW50CisgICAgIyAgICAgICAgIG9mIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4pCisgICAgIworICAgICMjIyMjIyMjIyMjIyMjCisgICAgIworICAgICMgQWxzbywgY3VycmVudGx5IEFyZ3VtZW50IENsaW5pYyBwbGFjZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgb24gZ3JvdXBzOgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogRWFjaCBncm91cCBtYXkgY29udGFpbiBhdCBtb3N0IG9uZSBncm91cCwgd2hpY2ggbXVzdCBiZSB0aGUgZnVydGhlc3QKKyAgICAjICAgICB0aGluZyBpbiB0aGUgZ3JvdXAgZnJvbSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4gIChUaGUgbmVzdGVkIGdyb3VwCisgICAgIyAgICAgbXVzdCBiZSB0aGUgZmlyc3QgaW4gdGhlIGdyb3VwIHdoZW4gaXQncyBiZWZvcmUgdGhlIHJlcXVpcmVkCisgICAgIyAgICAgcGFyYW1ldGVycywgYW5kIHRoZSBsYXN0IHRoaW5nIGluIHRoZSBncm91cCB3aGVuIGFmdGVyIHRoZSByZXF1aXJlZAorICAgICMgICAgIHBhcmFtZXRlcnMuKQorICAgICMgICAqIFRoZXJlIG1heSBiZSBhdCBtb3N0IG9uZSAodG9wLWxldmVsKSBncm91cCB0byB0aGUgbGVmdCBvciByaWdodCBvZgorICAgICMgICAgIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgICAqIFlvdSBtdXN0IHNwZWNpZnkgYSBzbGFzaCwgYW5kIGl0IG11c3QgYmUgYWZ0ZXIgYWxsIHBhcmFtZXRlcnMuCisgICAgIyAgICAgKEluIG90aGVyIHdvcmRzOiBlaXRoZXIgYWxsIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWwtb25seSwKKyAgICAjICAgICAgb3Igbm9uZSBhcmUuKQorICAgICMKKyAgICAjICBTYWlkIGFub3RoZXIgd2F5OgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogQWxsIGxlZnQgc3F1YXJlIGJyYWNrZXRzIGJlZm9yZSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuICAoWW91IGNhbid0IGhhdmUgYSBsZWZ0IHNxdWFyZSBicmFja2V0IGZvbGxvd2VkCisgICAgIyAgICAgYnkgYSBwYXJhbWV0ZXIsIHRoZW4gYW5vdGhlciBsZWZ0IHNxdWFyZSBicmFja2V0LiAgWW91IGNhbid0CisgICAgIyAgICAgaGF2ZSBhIGxlZnQgc3F1YXJlIGJyYWNrZXQsIGEgcGFyYW1ldGVyLCBhIHJpZ2h0IHNxdWFyZSBicmFja2V0LAorICAgICMgICAgIGFuZCB0aGVuIGEgbGVmdCBzcXVhcmUgYnJhY2tldC4pCisgICAgIyAgICogQWxsIHJpZ2h0IHNxdWFyZSBicmFja2V0cyBhZnRlciB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuCisgICAgIworICAgICMgVGhlc2UgcnVsZXMgYXJlIGVuZm9yY2VkIHdpdGggYSBzaW5nbGUgc3RhdGUgdmFyaWFibGU6CisgICAgIyAicGFyYW1ldGVyX3N0YXRlIi4gIChQcmV2aW91c2x5IHRoZSBjb2RlIHdhcyBhIG1pYXNtYSBvZiBpZnMgYW5kCisgICAgIyBzZXBhcmF0ZSBib29sZWFuIHN0YXRlIHZhcmlhYmxlcy4pICBUaGUgc3RhdGVzIGFyZToKKyAgICAjCisgICAgIyAgWyBbIGEsIGIsIF0gYywgXSBkLCBlLCBmLCBbIGcsIGgsIFsgaSBdIF0gLyAgIDwtIGxpbmUKKyAgICAjIDAxICAgMiAgICAgICAgICAzICAgICAgICAgIDQgICAgICAgICAgIDUgICA2ICAgPC0gc3RhdGUgdHJhbnNpdGlvbnMKKyAgICAjCisgICAgIyAwOiBwc19zdGFydC4gIGJlZm9yZSB3ZSd2ZSBzZWVuIGFueXRoaW5nLiAgbGVnYWwgdHJhbnNpdGlvbnMgYXJlIHRvIDEgb3IgMy4KKyAgICAjIDE6IHBzX2xlZnRfc3F1YXJlX2JlZm9yZS4gIGxlZnQgc3F1YXJlIGJyYWNrZXRzIGJlZm9yZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgMjogcHNfZ3JvdXBfYmVmb3JlLiAgaW4gYSBncm91cCwgYmVmb3JlIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyAzOiBwc19yZXF1aXJlZC4gIHJlcXVpcmVkIHBhcmFtZXRlcnMuICAocmVudW1iZXIgbGVmdCBncm91cHMhKQorICAgICMgNDogcHNfZ3JvdXBfYWZ0ZXIuICBpbiBhIGdyb3VwLCBhZnRlciByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgNTogcHNfcmlnaHRfc3F1YXJlX2FmdGVyLiAgcmlnaHQgc3F1YXJlIGJyYWNrZXRzIGFmdGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyA2OiBwc19zZWVuX3NsYXNoLiAgc2VlbiBzbGFzaC4KKyAgICBwc19zdGFydCwgcHNfbGVmdF9zcXVhcmVfYmVmb3JlLCBwc19ncm91cF9iZWZvcmUsIHBzX3JlcXVpcmVkLCBcCisgICAgcHNfZ3JvdXBfYWZ0ZXIsIHBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgcHNfc2Vlbl9zbGFzaCA9IHJhbmdlKDcpCisKKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyc19zdGFydChzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgaWYgdGhpcyBsaW5lIGlzIG5vdCBpbmRlbnRlZCwgd2UgaGF2ZSBubyBwYXJhbWV0ZXJzCisgICAgICAgIGlmIG5vdCBzZWxmLmluZGVudC5pbmZlcihsaW5lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9mdW5jdGlvbl9kb2NzdHJpbmcsIGxpbmUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKworCisgICAgZGVmIHRvX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJhbnNpdGlvbiB0byB0aGUgInJlcXVpcmVkIiBwYXJhbWV0ZXIgc3RhdGUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSAhPSBzZWxmLnBzX3JlcXVpcmVkOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3JlcXVpcmVkCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcC5ncm91cCA9IC1wLmdyb3VwCisKKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBzZWxmLmlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuaW5kZW50LmRlcHRoID09IDIKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgaWYgaW5kZW50ID09IC0xOgorICAgICAgICAgICAgIyB3ZSBvdXRkZW50ZWQsIG11c3QgYmUgdG8gZGVmaW5pdGlvbiBjb2x1bW4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9mdW5jdGlvbl9kb2NzdHJpbmcsIGxpbmUpCisKKyAgICAgICAgaWYgaW5kZW50ID09IDE6CisgICAgICAgICAgICAjIHdlIGluZGVudGVkLCBtdXN0IGJlIHRvIG5ldyBwYXJhbWV0ZXIgZG9jc3RyaW5nIGNvbHVtbgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQsIGxpbmUpCisKKyAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKKworICAgICAgICBpZiBsaW5lIGluICgnKicsICcvJywgJ1snLCAnXScpOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9zcGVjaWFsX3N5bWJvbChsaW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfc3RhcnQsIHNlbGYucHNfcmVxdWlyZWQpOgorICAgICAgICAgICAgc2VsZi50b19yZXF1aXJlZCgpCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmU6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYmVmb3JlCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19ncm91cF9iZWZvcmU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ncm91cDoKKyAgICAgICAgICAgICAgICBzZWxmLnRvX3JlcXVpcmVkKCkKKyAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9PSBzZWxmLnBzX2dyb3VwX2FmdGVyOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIikiKQorCisgICAgICAgIGFzdF9pbnB1dCA9ICJkZWYgeCh7fSk6IHBhc3MiLmZvcm1hdChsaW5lKQorICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBpbnZhbGlkIHBhcmFtZXRlciBkZWNsYXJhdGlvbjpcblx0IiArIGxpbmUpCisKKyAgICAgICAgZnVuY3Rpb25fYXJncyA9IG1vZHVsZS5ib2R5WzBdLmFyZ3MKKyAgICAgICAgcGFyYW1ldGVyID0gZnVuY3Rpb25fYXJncy5hcmdzWzBdCisKKyAgICAgICAgaWYgZnVuY3Rpb25fYXJncy5kZWZhdWx0czoKKyAgICAgICAgICAgIGV4cHIgPSBmdW5jdGlvbl9hcmdzLmRlZmF1bHRzWzBdCisgICAgICAgICAgICAjIG1pbGQgaGFjazogZXhwbGljaXRseSBzdXBwb3J0IE5VTEwgYXMgYSBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cHIsIGFzdC5OYW1lKSBhbmQgZXhwci5pZCA9PSAnTlVMTCc6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBOVUxMCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYXN0LmxpdGVyYWxfZXZhbChleHByKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSB1bnNwZWNpZmllZAorCisgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLmFyZworICAgICAgICBuYW1lLCBsZWdhY3ksIGt3YXJncyA9IHNlbGYucGFyc2VfY29udmVydGVyKHBhcmFtZXRlci5hbm5vdGF0aW9uKQorICAgICAgICBkaWN0ID0gbGVnYWN5X2NvbnZlcnRlcnMgaWYgbGVnYWN5IGVsc2UgY29udmVydGVycworICAgICAgICBsZWdhY3lfc3RyID0gImxlZ2FjeSAiIGlmIGxlZ2FjeSBlbHNlICIiCisgICAgICAgIGlmIG5hbWUgbm90IGluIGRpY3Q6CisgICAgICAgICAgICBmYWlsKCd7fSBpcyBub3QgYSB2YWxpZCB7fWNvbnZlcnRlcicuZm9ybWF0KG5hbWUsIGxlZ2FjeV9zdHIpKQorICAgICAgICBjb252ZXJ0ZXIgPSBkaWN0W25hbWVdKHBhcmFtZXRlcl9uYW1lLCBzZWxmLmZ1bmN0aW9uLCB2YWx1ZSwgKiprd2FyZ3MpCisKKyAgICAgICAgIyBzcGVjaWFsIGNhc2U6IGlmIGl0J3MgdGhlIHNlbGYgY29udmVydGVyLAorICAgICAgICAjIGRvbid0IGFjdHVhbGx5IGFkZCBpdCB0byB0aGUgcGFyYW1ldGVyIGxpc3QKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKToKKyAgICAgICAgICAgIGlmIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycyBvciAoc2VsZi5wYXJhbWV0ZXJfc3RhdGUgIT0gc2VsZi5wc19yZXF1aXJlZCk6CisgICAgICAgICAgICAgICAgZmFpbCgiVGhlICdzZWxmJyBwYXJhbWV0ZXIsIGlmIHNwZWNpZmllZCwgbXVzdCBiZSB0aGUgdmVyeSBmaXJzdCB0aGluZyBpbiB0aGUgcGFyYW1ldGVyIGJsb2NrLiIpCisgICAgICAgICAgICBpZiBzZWxmLmZ1bmN0aW9uLnNlbGZfY29udmVydGVyOgorICAgICAgICAgICAgICAgIGZhaWwoIllvdSBjYW4ndCBzcGVjaWZ5IHRoZSAnc2VsZicgcGFyYW1ldGVyIG1vcmUgdGhhbiBvbmNlLiIpCisgICAgICAgICAgICBzZWxmLmZ1bmN0aW9uLnNlbGZfY29udmVydGVyID0gY29udmVydGVyCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfc3RhcnQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGtpbmQgPSBpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkgaWYgc2VsZi5rZXl3b3JkX29ubHkgZWxzZSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQKKyAgICAgICAgcCA9IFBhcmFtZXRlcihwYXJhbWV0ZXJfbmFtZSwga2luZCwgZnVuY3Rpb249c2VsZi5mdW5jdGlvbiwgY29udmVydGVyPWNvbnZlcnRlciwgZGVmYXVsdD12YWx1ZSwgZ3JvdXA9c2VsZi5ncm91cCkKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzW3BhcmFtZXRlcl9uYW1lXSA9IHAKKworICAgIGRlZiBwYXJzZV9jb252ZXJ0ZXIoc2VsZiwgYW5ub3RhdGlvbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0LlN0cik6CisgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5zLCBUcnVlLCB7fQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb24uaWQsIEZhbHNlLCB7fQorCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5DYWxsKQorCisgICAgICAgIG5hbWUgPSBhbm5vdGF0aW9uLmZ1bmMuaWQKKyAgICAgICAga3dhcmdzID0ge25vZGUuYXJnOiBhc3QubGl0ZXJhbF9ldmFsKG5vZGUudmFsdWUpIGZvciBub2RlIGluIGFubm90YXRpb24ua2V5d29yZHN9CisgICAgICAgIHJldHVybiBuYW1lLCBGYWxzZSwga3dhcmdzCisKKyAgICBkZWYgcGFyc2Vfc3BlY2lhbF9zeW1ib2woc2VsZiwgc3ltYm9sKToKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19zZWVuX3NsYXNoOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICIgKyBzeW1ib2wgKyAiIGFmdGVyIC8sIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisKKyAgICAgICAgaWYgc3ltYm9sID09ICcqJzoKKyAgICAgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIHVzZXMgJyonIG1vcmUgdGhhbiBvbmNlLiIpCisgICAgICAgICAgICBzZWxmLmtleXdvcmRfb25seSA9IFRydWUKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJ1snOgorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfc3RhcnQsIHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX2dyb3VwX2FmdGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYWZ0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIikiKQorICAgICAgICAgICAgc2VsZi5ncm91cCArPSAxCisgICAgICAgIGVsaWYgc3ltYm9sID09ICddJzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKyAgICAgICAgICAgIGlmIG5vdCBhbnkocC5ncm91cCA9PSBzZWxmLmdyb3VwIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKSk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIGVtcHR5IGdyb3VwLlxuQWxsIGdyb3VwcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgc2VsZi5ncm91cCAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmUsIHNlbGYucHNfZ3JvdXBfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX2dyb3VwX2FmdGVyLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgIiArIHN0cihzZWxmLnBhcmFtZXRlcl9zdGF0ZSkgKyAiKSIpCisgICAgICAgIGVsaWYgc3ltYm9sID09ICcvJzoKKyAgICAgICAgICAgICMgcHNfcmVxdWlyZWQgaXMgYWxsb3dlZCBoZXJlLCB0aGF0IGFsbG93cyBwb3NpdGlvbmFsLW9ubHkgd2l0aG91dCBvcHRpb24gZ3JvdXBzCisgICAgICAgICAgICAjIHRvIHdvcmsgKGFuZCBoYXZlIGRlZmF1bHQgdmFsdWVzISkKKyAgICAgICAgICAgIGlmIChzZWxmLnBhcmFtZXRlcl9zdGF0ZSBub3QgaW4gKHNlbGYucHNfcmVxdWlyZWQsIHNlbGYucHNfcmlnaHRfc3F1YXJlX2FmdGVyLCBzZWxmLnBzX2dyb3VwX2JlZm9yZSkpIG9yIHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIikiKQorICAgICAgICAgICAgaWYgc2VsZi5rZXl3b3JkX29ubHk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgbWl4ZXMga2V5d29yZC1vbmx5IGFuZCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIikKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19zZWVuX3NsYXNoCisgICAgICAgICAgICAjIGZpeHVwIHByZWNlZWRpbmcgcGFyYW1ldGVycworICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGlmIHAua2luZCAhPSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIG1peGVzIGtleXdvcmQtb25seSBhbmQgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisgICAgICAgICAgICAgICAgcC5raW5kID0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisKKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZ19zdGFydChzZWxmLCBsaW5lKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfZG9jc3RyaW5nX2luZGVudCA9IGxlbihzZWxmLmluZGVudC5tYXJnaW4pCisgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAzCisgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nLCBsaW5lKQorCisgICAgIyBldmVyeSBsaW5lIG9mIHRoZSBkb2NzdHJpbmcgbXVzdCBzdGFydCB3aXRoIGF0IGxlYXN0IEYgc3BhY2VzLAorICAgICMgd2hlcmUgRiA+IFAuCisgICAgIyB0aGVzZSBGIHNwYWNlcyB3aWxsIGJlIHN0cmlwcGVkLgorICAgIGRlZiBzdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nKHNlbGYsIGxpbmUpOgorICAgICAgICBzdHJpcHBlZCA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzdHJpcHBlZC5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpbmRlbnQgPSBzZWxmLmluZGVudC5tZWFzdXJlKGxpbmUpCisgICAgICAgIGlmIGluZGVudCA8IHNlbGYucGFyYW1ldGVyX2RvY3N0cmluZ19pbmRlbnQ6CisgICAgICAgICAgICBzZWxmLmluZGVudC5pbmZlcihsaW5lKQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuaW5kZW50LmRlcHRoIDwgMworICAgICAgICAgICAgaWYgc2VsZi5pbmRlbnQuZGVwdGggPT0gMjoKKyAgICAgICAgICAgICAgICAjIGJhY2sgdG8gYSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyLCBsaW5lKQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuaW5kZW50LmRlcHRoID09IDEKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9mdW5jdGlvbl9kb2NzdHJpbmcsIGxpbmUpCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycworICAgICAgICBsYXN0X3BhcmFtZXRlciA9IG5leHQocmV2ZXJzZWQobGlzdChzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCkpKSkKKworICAgICAgICBuZXdfZG9jc3RyaW5nID0gbGFzdF9wYXJhbWV0ZXIuZG9jc3RyaW5nCisKKyAgICAgICAgaWYgbmV3X2RvY3N0cmluZzoKKyAgICAgICAgICAgIG5ld19kb2NzdHJpbmcgKz0gJ1xuJworICAgICAgICBpZiBzdHJpcHBlZDoKKyAgICAgICAgICAgIG5ld19kb2NzdHJpbmcgKz0gc2VsZi5pbmRlbnQuZGVkZW50KGxpbmUpCisKKyAgICAgICAgbGFzdF9wYXJhbWV0ZXIuZG9jc3RyaW5nID0gbmV3X2RvY3N0cmluZworCisgICAgIyB0aGUgZmluYWwgc3RhbnphIG9mIHRoZSBEU0wgaXMgdGhlIGRvY3N0cmluZy4KKyAgICBkZWYgc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5mdW5jdGlvbi5zZWxmX2NvbnZlcnRlcjoKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24uc2VsZl9jb252ZXJ0ZXIgPSBzZWxmX2NvbnZlcnRlcigic2VsZiIsIHNlbGYuZnVuY3Rpb24pCisKKyAgICAgICAgaWYgc2VsZi5ncm91cDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKworICAgICAgICBzdHJpcHBlZCA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzdHJpcHBlZC5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXdfZG9jc3RyaW5nID0gc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcKKyAgICAgICAgaWYgbmV3X2RvY3N0cmluZzoKKyAgICAgICAgICAgIG5ld19kb2NzdHJpbmcgKz0gIlxuIgorICAgICAgICBpZiBzdHJpcHBlZDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmluZGVudC5kZWRlbnQobGluZSkucnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSAnJworICAgICAgICBuZXdfZG9jc3RyaW5nICs9IGxpbmUKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBuZXdfZG9jc3RyaW5nCisKKyAgICBkZWYgZm9ybWF0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZnVuY3Rpb24KKworICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBwYXJhbWV0ZXJzID0gbGlzdChmLnBhcmFtZXRlcnMudmFsdWVzKCkpCisKKyAgICAgICAgIyMKKyAgICAgICAgIyMgZG9jc3RyaW5nIGZpcnN0IGxpbmUKKyAgICAgICAgIyMKKworICAgICAgICBhZGQoZi5uYW1lKQorICAgICAgICBhZGQoJygnKQorCisgICAgICAgICMgcG9wdWxhdGUgInJpZ2h0X2JyYWNrZXRfY291bnQiIGZpZWxkIGZvciBldmVyeSBwYXJhbWV0ZXIKKyAgICAgICAgaWYgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICMgZm9yIG5vdywgdGhlIG9ubHkgd2F5IENsaW5pYyBzdXBwb3J0cyBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycworICAgICAgICAgICAgIyBpcyBpZiBhbGwgb2YgdGhlbSBhcmUgcG9zaXRpb25hbC1vbmx5LgorICAgICAgICAgICAgcG9zaXRpb25hbF9vbmx5X3BhcmFtZXRlcnMgPSBbcC5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSBmb3IgcCBpbiBwYXJhbWV0ZXJzXQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyc1swXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgICAgICBhc3NlcnQgYWxsKHBvc2l0aW9uYWxfb25seV9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IGFicyhwLmdyb3VwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGRvbid0IHB1dCBhbnkgcmlnaHQgYnJhY2tldHMgYXJvdW5kIG5vbi1wb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgZXZlci4KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgICAgICBwLnJpZ2h0X2JyYWNrZXRfY291bnQgPSAwCisKKyAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCA9IDAKKworICAgICAgICBkZWYgZml4X3JpZ2h0X2JyYWNrZXRfY291bnQoZGVzaXJlZCk6CisgICAgICAgICAgICBub25sb2NhbCByaWdodF9icmFja2V0X2NvdW50CisgICAgICAgICAgICBzID0gJycKKyAgICAgICAgICAgIHdoaWxlIHJpZ2h0X2JyYWNrZXRfY291bnQgPCBkZXNpcmVkOgorICAgICAgICAgICAgICAgIHMgKz0gJ1snCisgICAgICAgICAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCArPSAxCisgICAgICAgICAgICB3aGlsZSByaWdodF9icmFja2V0X2NvdW50ID4gZGVzaXJlZDoKKyAgICAgICAgICAgICAgICBzICs9ICddJworICAgICAgICAgICAgICAgIHJpZ2h0X2JyYWNrZXRfY291bnQgLT0gMQorICAgICAgICAgICAgcmV0dXJuIHMKKworICAgICAgICBhZGRlZF9zdGFyID0gRmFsc2UKKyAgICAgICAgYWRkX2NvbW1hID0gRmFsc2UKKworICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IHAubmFtZQorCisgICAgICAgICAgICBpZiBwLmlzX2tleXdvcmRfb25seSgpIGFuZCBub3QgYWRkZWRfc3RhcjoKKyAgICAgICAgICAgICAgICBhZGRlZF9zdGFyID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIGFkZF9jb21tYToKKyAgICAgICAgICAgICAgICAgICAgYWRkKCcsICcpCisgICAgICAgICAgICAgICAgYWRkKCcqJykKKworICAgICAgICAgICAgYSA9IFtwLm5hbWVdCisgICAgICAgICAgICBpZiBwLmNvbnZlcnRlci5pc19vcHRpb25hbCgpOgorICAgICAgICAgICAgICAgIGEuYXBwZW5kKCc9JykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHAuY29udmVydGVyLmRlZmF1bHQKKyAgICAgICAgICAgICAgICBhLmFwcGVuZChwLmNvbnZlcnRlci5kb2NfZGVmYXVsdCkKKyAgICAgICAgICAgIHMgPSBmaXhfcmlnaHRfYnJhY2tldF9jb3VudChwLnJpZ2h0X2JyYWNrZXRfY291bnQpCisgICAgICAgICAgICBzICs9ICIiLmpvaW4oYSkKKyAgICAgICAgICAgIGlmIGFkZF9jb21tYToKKyAgICAgICAgICAgICAgICBhZGQoJywgJykKKyAgICAgICAgICAgIGFkZChzKQorICAgICAgICAgICAgYWRkX2NvbW1hID0gVHJ1ZQorCisgICAgICAgIGFkZChmaXhfcmlnaHRfYnJhY2tldF9jb3VudCgwKSkKKyAgICAgICAgYWRkKCcpJykKKworICAgICAgICAjIGlmIGYucmV0dXJuX2NvbnZlcnRlci5kb2NfZGVmYXVsdDoKKyAgICAgICAgIyAgICAgYWRkKCcgLT4gJykKKyAgICAgICAgIyAgICAgYWRkKGYucmV0dXJuX2NvbnZlcnRlci5kb2NfZGVmYXVsdCkKKworICAgICAgICBkb2NzdHJpbmdfZmlyc3RfbGluZSA9IG91dHB1dCgpCisKKyAgICAgICAgIyBub3cgZml4IHVwIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGJyYWNrZXRzIGxvb2sgd3JvbmcKKyAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBkb2NzdHJpbmdfZmlyc3RfbGluZS5yZXBsYWNlKCcsIF0nLCAnLF0gJykKKworICAgICAgICAjIG9rYXkuICBub3cgd2UncmUgb2ZmaWNpYWxseSBidWlsZGluZyB0aGUgInBhcmFtZXRlcnMiIHNlY3Rpb24uCisgICAgICAgICMgY3JlYXRlIHN1YnN0aXR1dGlvbiB0ZXh0IGZvciB7cGFyYW1ldGVyc30KKyAgICAgICAgc3BhY2VyX2xpbmUgPSBGYWxzZQorICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgaWYgbm90IHAuZG9jc3RyaW5nLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNwYWNlcl9saW5lOgorICAgICAgICAgICAgICAgIGFkZCgnXG4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGFjZXJfbGluZSA9IFRydWUKKyAgICAgICAgICAgIGFkZCgiICAiKQorICAgICAgICAgICAgYWRkKHAubmFtZSkKKyAgICAgICAgICAgIGFkZCgnXG4nKQorICAgICAgICAgICAgYWRkKHRleHR3cmFwLmluZGVudChyc3RyaXBfbGluZXMocC5kb2NzdHJpbmcucnN0cmlwKCkpLCAiICAgICIpKQorICAgICAgICBwYXJhbWV0ZXJzID0gb3V0cHV0KCkKKyAgICAgICAgaWYgcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcnMgKz0gJ1xuJworCisgICAgICAgICMjCisgICAgICAgICMjIGRvY3N0cmluZyBib2R5CisgICAgICAgICMjCisKKyAgICAgICAgZG9jc3RyaW5nID0gZi5kb2NzdHJpbmcucnN0cmlwKCkKKyAgICAgICAgbGluZXMgPSBbbGluZS5yc3RyaXAoKSBmb3IgbGluZSBpbiBkb2NzdHJpbmcuc3BsaXQoJ1xuJyldCisKKyAgICAgICAgIyBFbmZvcmNlIHRoZSBzdW1tYXJ5IGxpbmUhCisgICAgICAgICMgVGhlIGZpcnN0IGxpbmUgb2YgYSBkb2NzdHJpbmcgc2hvdWxkIGJlIGEgc3VtbWFyeSBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICMgSXQgc2hvdWxkIGZpdCBvbiBvbmUgbGluZSAoODAgY29sdW1ucz8gNzkgbWF5YmU/KSBhbmQgYmUgYSBwYXJhZ3JhcGgKKyAgICAgICAgIyBieSBpdHNlbGYuCisgICAgICAgICMKKyAgICAgICAgIyBBcmd1bWVudCBDbGluaWMgZW5mb3JjZXMgdGhlIGZvbGxvd2luZyBydWxlOgorICAgICAgICAjICAqIGVpdGhlciB0aGUgZG9jc3RyaW5nIGlzIGVtcHR5LAorICAgICAgICAjICAqIG9yIGl0IG11c3QgaGF2ZSBhIHN1bW1hcnkgbGluZS4KKyAgICAgICAgIworICAgICAgICAjIEd1aWRvIHNhaWQgQ2xpbmljIHNob3VsZCBlbmZvcmNlIHRoaXM6CisgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDEzLUp1bmUvMTI3MTEwLmh0bWwKKworICAgICAgICBpZiBsZW4obGluZXMpID49IDI6CisgICAgICAgICAgICBpZiBsaW5lc1sxXToKKyAgICAgICAgICAgICAgICBmYWlsKCJEb2NzdHJpbmcgZm9yICIgKyBmLmZ1bGxfbmFtZSArICIgZG9lcyBub3QgaGF2ZSBhIHN1bW1hcnkgbGluZSFcbiIgKworICAgICAgICAgICAgICAgICAgICAiRXZlcnkgbm9uLWJsYW5rIGZ1bmN0aW9uIGRvY3N0cmluZyBtdXN0IHN0YXJ0IHdpdGhcbiIgKworICAgICAgICAgICAgICAgICAgICAiYSBzaW5nbGUgbGluZSBzdW1tYXJ5IGZvbGxvd2VkIGJ5IGFuIGVtcHR5IGxpbmUuIikKKyAgICAgICAgZWxpZiBsZW4obGluZXMpID09IDE6CisgICAgICAgICAgICAjIHRoZSBkb2NzdHJpbmcgaXMgb25seSBvbmUgbGluZSByaWdodCBub3ctLXRoZSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICAgICAjIGFkZCBhbiBlbXB0eSBsaW5lIGFmdGVyIHRoZSBzdW1tYXJ5IGxpbmUgc28gd2UgaGF2ZSBzcGFjZQorICAgICAgICAgICAgIyBiZXR3ZWVuIGl0IGFuZCB0aGUge3BhcmFtZXRlcnN9IHdlJ3JlIGFib3V0IHRvIGFkZC4KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBwYXJhbWV0ZXJzX21hcmtlcl9jb3VudCA9IGxlbihkb2NzdHJpbmcuc3BsaXQoJ3twYXJhbWV0ZXJzfScpKSAtIDEKKyAgICAgICAgaWYgcGFyYW1ldGVyc19tYXJrZXJfY291bnQgPiAxOgorICAgICAgICAgICAgZmFpbCgnWW91IG1heSBub3Qgc3BlY2lmeSB7cGFyYW1ldGVyc30gbW9yZSB0aGFuIG9uY2UgaW4gYSBkb2NzdHJpbmchJykKKworICAgICAgICBpZiBub3QgcGFyYW1ldGVyc19tYXJrZXJfY291bnQ6CisgICAgICAgICAgICAjIGluc2VydCBhZnRlciBzdW1tYXJ5IGxpbmUKKyAgICAgICAgICAgIGxpbmVzLmluc2VydCgyLCAne3BhcmFtZXRlcnN9JykKKworICAgICAgICAjIGluc2VydCBhdCBmcm9udCBvZiBkb2NzdHJpbmcKKyAgICAgICAgbGluZXMuaW5zZXJ0KDAsIGRvY3N0cmluZ19maXJzdF9saW5lKQorCisgICAgICAgIGRvY3N0cmluZyA9ICJcbiIuam9pbihsaW5lcykKKworICAgICAgICBhZGQoZG9jc3RyaW5nKQorICAgICAgICBkb2NzdHJpbmcgPSBvdXRwdXQoKQorCisgICAgICAgIGRvY3N0cmluZyA9IGxpbmVhcl9mb3JtYXQoZG9jc3RyaW5nLCBwYXJhbWV0ZXJzPXBhcmFtZXRlcnMpCisgICAgICAgIGRvY3N0cmluZyA9IGRvY3N0cmluZy5yc3RyaXAoKQorCisgICAgICAgIHJldHVybiBkb2NzdHJpbmcKKworICAgIGRlZiBzdGF0ZV90ZXJtaW5hbChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB3aGVuIHByb2Nlc3NpbmcgdGhlIGJsb2NrIGlzIGRvbmUuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgbm90IGxpbmUKKworICAgICAgICBpZiBub3Qgc2VsZi5mdW5jdGlvbjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgdmFsdWVzID0gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpCisgICAgICAgICAgICBpZiBub3QgdmFsdWVzOgorICAgICAgICAgICAgICAgIG5vX3BhcmFtZXRlcl9hZnRlcl9zdGFyID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsYXN0X3BhcmFtZXRlciA9IG5leHQocmV2ZXJzZWQobGlzdCh2YWx1ZXMpKSkKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IGxhc3RfcGFyYW1ldGVyLmtpbmQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZCisgICAgICAgICAgICBpZiBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhcjoKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBzcGVjaWZpZXMgJyonIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMgYWZ0ZXJ3YXJkcy4iKQorCisgICAgICAgICMgcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBhbGwgcGFyYW1ldGVyIGRvY3N0cmluZ3MKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB2YWx1ZS5kb2NzdHJpbmcgPSB2YWx1ZS5kb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICBzZWxmLmZ1bmN0aW9uLmRvY3N0cmluZyA9IHNlbGYuZm9ybWF0X2RvY3N0cmluZygpCisKKworIyBtYXBzIHN0cmluZ3MgdG8gY2FsbGFibGVzLgorIyB0aGUgY2FsbGFibGUgc2hvdWxkIHJldHVybiBhbiBvYmplY3QKKyMgdGhhdCBpbXBsZW1lbnRzIHRoZSBjbGluaWMgcGFyc2VyCisjIGludGVyZmFjZSAoX19pbml0X18gYW5kIHBhcnNlKS4KKyMKKyMgZXhhbXBsZSBwYXJzZXJzOgorIyAgICJjbGluaWMiLCBoYW5kbGVzIHRoZSBDbGluaWMgRFNMCisjICAgInB5dGhvbiIsIGhhbmRsZXMgcnVubmluZyBQeXRob24gY29kZQorIworcGFyc2VycyA9IHsnY2xpbmljJyA6IERTTFBhcnNlciwgJ3B5dGhvbic6IFB5dGhvblBhcnNlcn0KKworCitjbGluaWMgPSBOb25lCisKKworZGVmIG1haW4oYXJndik6CisgICAgaW1wb3J0IHN5cworCisgICAgaWYgc3lzLnZlcnNpb25faW5mby5tYWpvciA8IDMgb3Igc3lzLnZlcnNpb25faW5mby5taW5vciA8IDM6CisgICAgICAgIHN5cy5leGl0KCJFcnJvcjogY2xpbmljLnB5IHJlcXVpcmVzIFB5dGhvbiAzLjMgb3IgZ3JlYXRlci4iKQorCisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgY21kbGluZSA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLWYiLCAiLS1mb3JjZSIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoIi1vIiwgIi0tb3V0cHV0IiwgdHlwZT1zdHIpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoIi0tY29udmVydGVycyIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoIi0tbWFrZSIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoImZpbGVuYW1lIiwgdHlwZT1zdHIsIG5hcmdzPSIqIikKKyAgICBucyA9IGNtZGxpbmUucGFyc2VfYXJncyhhcmd2KQorCisgICAgaWYgbnMuY29udmVydGVyczoKKyAgICAgICAgaWYgbnMuZmlsZW5hbWU6CisgICAgICAgICAgICBwcmludCgiVXNhZ2UgZXJyb3I6IGNhbid0IHNwZWNpZnkgLS1jb252ZXJ0ZXJzIGFuZCBhIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuIikKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIGNtZGxpbmUucHJpbnRfdXNhZ2UoKQorICAgICAgICAgICAgc3lzLmV4aXQoLTEpCisgICAgICAgIGNvbnZlcnRlcnMgPSBbXQorICAgICAgICByZXR1cm5fY29udmVydGVycyA9IFtdCisgICAgICAgIGlnbm9yZWQgPSBzZXQoIiIiCisgICAgICAgICAgICBhZGRfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgIGFkZF9jX3JldHVybl9jb252ZXJ0ZXIKKyAgICAgICAgICAgIGFkZF9kZWZhdWx0X2xlZ2FjeV9jX2NvbnZlcnRlcgorICAgICAgICAgICAgYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcgorICAgICAgICAgICAgIiIiLnN0cmlwKCkuc3BsaXQoKSkKKyAgICAgICAgbW9kdWxlID0gZ2xvYmFscygpCisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZToKKyAgICAgICAgICAgIGZvciBzdWZmaXgsIGlkcyBpbiAoCisgICAgICAgICAgICAgICAgKCJfcmV0dXJuX2NvbnZlcnRlciIsIHJldHVybl9jb252ZXJ0ZXJzKSwKKyAgICAgICAgICAgICAgICAoIl9jb252ZXJ0ZXIiLCBjb252ZXJ0ZXJzKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBpZ25vcmVkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgICAgICAgICAgaWRzLmFwcGVuZCgobmFtZSwgbmFtZVs6LWxlbihzdWZmaXgpXSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHByaW50KCkKKworICAgICAgICBwcmludCgiTGVnYWN5IGNvbnZlcnRlcnM6IikKKyAgICAgICAgbGVnYWN5ID0gc29ydGVkKGxlZ2FjeV9jb252ZXJ0ZXJzKQorICAgICAgICBwcmludCgnICAgICcgKyAnICcuam9pbihjIGZvciBjIGluIGxlZ2FjeSBpZiBjWzBdLmlzdXBwZXIoKSkpCisgICAgICAgIHByaW50KCcgICAgJyArICcgJy5qb2luKGMgZm9yIGMgaW4gbGVnYWN5IGlmIGNbMF0uaXNsb3dlcigpKSkKKyAgICAgICAgcHJpbnQoKQorCisgICAgICAgIGZvciB0aXRsZSwgYXR0cmlidXRlLCBpZHMgaW4gKAorICAgICAgICAgICAgKCJDb252ZXJ0ZXJzIiwgJ2NvbnZlcnRlcl9pbml0JywgY29udmVydGVycyksCisgICAgICAgICAgICAoIlJldHVybiBjb252ZXJ0ZXJzIiwgJ3JldHVybl9jb252ZXJ0ZXJfaW5pdCcsIHJldHVybl9jb252ZXJ0ZXJzKSwKKyAgICAgICAgKToKKyAgICAgICAgICAgIHByaW50KHRpdGxlICsgIjoiKQorICAgICAgICAgICAgbG9uZ2VzdCA9IC0xCisgICAgICAgICAgICBmb3IgbmFtZSwgc2hvcnRfbmFtZSBpbiBpZHM6CisgICAgICAgICAgICAgICAgbG9uZ2VzdCA9IG1heChsb25nZXN0LCBsZW4oc2hvcnRfbmFtZSkpCisgICAgICAgICAgICBmb3IgbmFtZSwgc2hvcnRfbmFtZSBpbiBzb3J0ZWQoaWRzLCBrZXk9bGFtYmRhIHg6IHhbMV0ubG93ZXIoKSk6CisgICAgICAgICAgICAgICAgY2xzID0gbW9kdWxlW25hbWVdCisgICAgICAgICAgICAgICAgY2FsbGFibGUgPSBnZXRhdHRyKGNscywgYXR0cmlidXRlLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBjYWxsYWJsZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBpbnNwZWN0LnNpZ25hdHVyZShjYWxsYWJsZSkKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlciBpbiBzaWduYXR1cmUucGFyYW1ldGVycy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuZGVmYXVsdCAhPSBpbnNwZWN0LlBhcmFtZXRlci5lbXB0eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gJ3t9PXshcn0nLmZvcm1hdChwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyLmRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQocykKKyAgICAgICAgICAgICAgICBwcmludCgnICAgIHt9KHt9KScuZm9ybWF0KHNob3J0X25hbWUsICcsICcuam9pbihwYXJhbWV0ZXJzKSkpCisgICAgICAgICAgICAgICAgIyBhZGRfY29tbWEgPSBGYWxzZQorICAgICAgICAgICAgICAgICMgZm9yIHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIgaW4gc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAjICAgICBpZiBwYXJhbWV0ZXIua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFk6CisgICAgICAgICAgICAgICAgIyAgICAgICAgIGlmIGFkZF9jb21tYToKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCcsICcpCisgICAgICAgICAgICAgICAgIyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICBhZGRfY29tbWEgPSBUcnVlCisgICAgICAgICAgICAgICAgIyAgICAgICAgIHMgPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgICMgICAgICAgICBpZiBwYXJhbWV0ZXIuZGVmYXVsdCAhPSBpbnNwZWN0LlBhcmFtZXRlci5lbXB0eToKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgIHMgKz0gJz0nICsgcmVwcihwYXJhbWV0ZXIuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAjICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQocykKKyAgICAgICAgICAgICAgICAjIHBhcmFtZXRlcnMuYXBwZW5kKCcpJykKKworICAgICAgICAgICAgICAgICMgcHJpbnQoIiAgICIsIHNob3J0X25hbWUgKyAiIi5qb2luKHBhcmFtZXRlcnMpKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICBwcmludCgiQWxsIGNvbnZlcnRlcnMgYWxzbyBhY2NlcHQgKGRvY19kZWZhdWx0PU5vbmUsIHJlcXVpcmVkPUZhbHNlKS4iKQorICAgICAgICBwcmludCgiQWxsIHJldHVybiBjb252ZXJ0ZXJzIGFsc28gYWNjZXB0IChkb2NfZGVmYXVsdD1Ob25lKS4iKQorICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgaWYgbnMubWFrZToKKyAgICAgICAgaWYgbnMub3V0cHV0IG9yIG5zLmZpbGVuYW1lOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCB1c2UgLW8gb3IgZmlsZW5hbWVzIHdpdGggLS1tYWtlLiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KC0xKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsaygnLicpOgorICAgICAgICAgICAgZm9yIHJjc19kaXIgaW4gKCcuc3ZuJywgJy5naXQnLCAnLmhnJyk6CisgICAgICAgICAgICAgICAgaWYgcmNzX2RpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShyY3NfZGlyKQorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmaWxlbmFtZS5lbmRzd2l0aCgnLmMnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIHBhcnNlX2ZpbGUocGF0aCwgdmVyaWZ5PW5vdCBucy5mb3JjZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBub3QgbnMuZmlsZW5hbWU6CisgICAgICAgIGNtZGxpbmUucHJpbnRfdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgIGlmIG5zLm91dHB1dCBhbmQgbGVuKG5zLmZpbGVuYW1lKSA+IDE6CisgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3QgdXNlIC1vIHdpdGggbXVsdGlwbGUgZmlsZW5hbWVzLiIpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgIHN5cy5leGl0KC0xKQorCisgICAgZm9yIGZpbGVuYW1lIGluIG5zLmZpbGVuYW1lOgorICAgICAgICBwYXJzZV9maWxlKGZpbGVuYW1lLCBvdXRwdXQ9bnMub3V0cHV0LCB2ZXJpZnk9bm90IG5zLmZvcmNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5IGIvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYWYzODAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkKQEAgLTAsMCArMSw3MTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMKKyMgQXJndW1lbnQgQ2xpbmljCisjIENvcHlyaWdodCAyMDEyLTIwMTMgYnkgTGFycnkgSGFzdGluZ3MuCisjIExpY2Vuc2VkIHRvIHRoZSBQU0YgdW5kZXIgYSBjb250cmlidXRvciBhZ3JlZW1lbnQuCisjCisKK2ltcG9ydCBidWlsdGlucworaW1wb3J0IGNsaW5pYworZnJvbSBjbGluaWMgaW1wb3J0IERTTFBhcnNlcgoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW5zcGVjdAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCisKK2NsYXNzIEZha2VDb252ZXJ0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGFyZ3MpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworCitjbGFzcyBGYWtlQ29udmVydGVyRmFjdG9yeToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBuYW1lLCBkZWZhdWx0LCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBGYWtlQ29udmVydGVyKHNlbGYubmFtZSwga3dhcmdzKQorCisKK2NsYXNzIEZha2VDb252ZXJ0ZXJzRGljdDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudXNlZF9jb252ZXJ0ZXJzID0ge30KKworICAgIGRlZiBnZXQoc2VsZiwgbmFtZSwgZGVmYXVsdCk6CisgICAgICAgIHJldHVybiBzZWxmLnVzZWRfY29udmVydGVycy5zZXRkZWZhdWx0KG5hbWUsIEZha2VDb252ZXJ0ZXJGYWN0b3J5KG5hbWUpKQorCitjbGFzcyBGYWtlQ2xpbmljOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJzID0gRmFrZUNvbnZlcnRlcnNEaWN0KCkKKyAgICAgICAgc2VsZi5sZWdhY3lfY29udmVydGVycyA9IEZha2VDb252ZXJ0ZXJzRGljdCgpCisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBjbGluaWMuQ0xhbmd1YWdlKCkKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBjbGluaWMuQmxvY2tQYXJzZXIoJycsIHNlbGYubGFuZ3VhZ2UpCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgY2xpbmljLmNsaW5pYyA9IHNlbGYKKyAgICAgICAgc2VsZi5uYW1lID0gIkZha2VDbGluaWMiCisKKyAgICBkZWYgaXNfZGlyZWN0aXZlKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gbmFtZSA9PSAibW9kdWxlIgorCisgICAgZGVmIGRpcmVjdGl2ZShzZWxmLCBuYW1lLCBhcmdzKToKKyAgICAgICAgc2VsZi5jYWxsZWRfZGlyZWN0aXZlc1tuYW1lXSA9IGFyZ3MKKworICAgIF9tb2R1bGVfYW5kX2NsYXNzID0gY2xpbmljLkNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcworCisKKworY2xhc3MgQ2xpbmljR3JvdXBQZXJtdXRlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBsLCBtLCByLCBvdXRwdXQpOgorICAgICAgICBjb21wdXRlZCA9IGNsaW5pYy5wZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsLCBtLCByKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgY29tcHV0ZWQpCisKKyAgICBkZWYgdGVzdF9yYW5nZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbWydzdGFydCddXSwgWydzdG9wJ10sIFtbJ3N0ZXAnXV0sCisgICAgICAgICAgKAorICAgICAgICAgICAgKCdzdG9wJywpLAorICAgICAgICAgICAgKCdzdGFydCcsICdzdG9wJywpLAorICAgICAgICAgICAgKCdzdGFydCcsICdzdG9wJywgJ3N0ZXAnLCksCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X2FkZF93aW5kb3coc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1sneCcsICd5J11dLCBbJ2NoJ10sIFtbJ2F0dHInXV0sCisgICAgICAgICAgKAorICAgICAgICAgICAgKCdjaCcsKSwKKyAgICAgICAgICAgICgnY2gnLCAnYXR0cicpLAorICAgICAgICAgICAgKCd4JywgJ3knLCAnY2gnLCksCisgICAgICAgICAgICAoJ3gnLCAneScsICdjaCcsICdhdHRyJyksCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X2x1ZGljcm91cyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbWydhMScsICdhMicsICdhMyddLCBbJ2IxJywgJ2IyJ11dLCBbJ2MxJ10sIFtbJ2QxJywgJ2QyJ10sIFsnZTEnLCAnZTInLCAnZTMnXV0sCisgICAgICAgICAgKAorICAgICAgICAgICgnYzEnLCksCisgICAgICAgICAgKCdiMScsICdiMicsICdjMScpLAorICAgICAgICAgICgnYjEnLCAnYjInLCAnYzEnLCAnZDEnLCAnZDInKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScsICdkMScsICdkMicpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnLCAnZDEnLCAnZDInLCAnZTEnLCAnZTInLCAnZTMnKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfcmlnaHRfb25seShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbXSwgW10sIFtbJ2EnXSxbJ2InXSxbJ2MnXV0sCisgICAgICAgICAgKAorICAgICAgICAgICgpLAorICAgICAgICAgICgnYScsKSwKKyAgICAgICAgICAoJ2EnLCAnYicpLAorICAgICAgICAgICgnYScsICdiJywgJ2MnKQorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9oYXZlX2xlZnRfb3B0aW9uc19idXRfcmVxdWlyZWRfaXNfZW1wdHkoc2VsZik6CisgICAgICAgIGRlZiBmbigpOgorICAgICAgICAgICAgY2xpbmljLnBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKFsnYSddLCBbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBmbikKKworCitjbGFzcyBDbGluaWNMaW5lYXJGb3JtYXRUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgaW5wdXQsIG91dHB1dCwgKiprd2FyZ3MpOgorICAgICAgICBjb21wdXRlZCA9IGNsaW5pYy5saW5lYXJfZm9ybWF0KGlucHV0LCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgnJywgJycpCisKKyAgICBkZWYgdGVzdF9zb2xvX25ld2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoJ1xuJywgJ1xuJykKKworICAgIGRlZiB0ZXN0X25vX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICB7bmFtZX0KKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgbmFtZT0nJykKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9saW5lX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICB7bmFtZX0KKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIEdBUkdMRQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgbmFtZT0nR0FSR0xFJykKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBiaW5nbGUKKyAgICAgICAgICBidW5nbGUKKworICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgbmFtZT0nYmluZ2xlXG5idW5nbGVcbicpCisKK2NsYXNzIEluZXJ0UGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGluaWMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBwYXNzCisKK2NsYXNzIENvcHlQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIGJsb2NrLm91dHB1dCA9IGJsb2NrLmlucHV0CisKKworY2xhc3MgQ2xpbmljQmxvY2tQYXJzZXJUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgaW5wdXQsIG91dHB1dCk6CisgICAgICAgIGxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZSgpCisKKyAgICAgICAgYmxvY2tzID0gbGlzdChjbGluaWMuQmxvY2tQYXJzZXIoaW5wdXQsIGxhbmd1YWdlKSkKKyAgICAgICAgd3JpdGVyID0gY2xpbmljLkJsb2NrUHJpbnRlcihsYW5ndWFnZSkKKyAgICAgICAgZm9yIGJsb2NrIGluIGJsb2NrczoKKyAgICAgICAgICAgIHdyaXRlci5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgb3V0cHV0ID0gd3JpdGVyLmYuZ2V0dmFsdWUoKQorICAgICAgICBhc3NlcnQgb3V0cHV0ID09IGlucHV0LCAib3V0cHV0ICE9IGlucHV0IVxuXG5vdXRwdXQgIiArIHJlcHIob3V0cHV0KSArICJcblxuIGlucHV0ICIgKyByZXByKGlucHV0KQorCisgICAgZGVmIHJvdW5kX3RyaXAoc2VsZiwgaW5wdXQpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdChpbnB1dCwgaW5wdXQpCisKKyAgICBkZWYgdGVzdF9yb3VuZF90cmlwXzEoc2VsZik6CisgICAgICAgIHNlbGYucm91bmRfdHJpcCgiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorIiIiKQorICAgIGRlZiB0ZXN0X3JvdW5kX3RyaXBfMihzZWxmKToKKyAgICAgICAgc2VsZi5yb3VuZF90cmlwKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltpbmVydF0KK2FiYworW2luZXJ0XSovCitkZWYKKy8qW2luZXJ0IGNoZWNrc3VtOiA3YjE4ZDAxN2Y4OWY2MWNmMTdkNDdmOTI3NDllYTY5MzBhM2YxZGViXSovCit4eXoKKyIiIikKKworICAgIGRlZiBfdGVzdF9jbGluaWMoc2VsZiwgaW5wdXQsIG91dHB1dCk6CisgICAgICAgIGxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZSgpCisgICAgICAgIGMgPSBjbGluaWMuQ2xpbmljKGxhbmd1YWdlKQorICAgICAgICBjLnBhcnNlcnNbJ2luZXJ0J10gPSBJbmVydFBhcnNlcihjKQorICAgICAgICBjLnBhcnNlcnNbJ2NvcHknXSA9IENvcHlQYXJzZXIoYykKKyAgICAgICAgY29tcHV0ZWQgPSBjLnBhcnNlKGlucHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgY29tcHV0ZWQpCisKKyAgICBkZWYgdGVzdF9jbGluaWNfMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jbGluaWMoIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKy8qW2NvcHldCitkZWYKK1tjb3B5XSovCithYmMKKy8qW2NvcHkgY2hlY2tzdW06IDAzY2ZkNzQzNjYxZjA3OTc1ZmEyZjEyMjBjNTE5NGNiYWZmNDg0NTFdKi8KK3h5egorIiIiLCAiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorLypbY29weV0KK2RlZgorW2NvcHldKi8KK2RlZgorLypbY29weSBjaGVja3N1bTogN2IxOGQwMTdmODlmNjFjZjE3ZDQ3ZjkyNzQ5ZWE2OTMwYTNmMWRlYl0qLworeHl6CisiIiIpCisKKworY2xhc3MgQ2xpbmljUGFyc2VyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHJpdmlhbChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKEZha2VDbGluaWMoKSkKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2soIm1vZHVsZSBvc1xub3MuYWNjZXNzIikKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcyIsIG1vZHVsZS5uYW1lKQorCisgICAgZGVmIHRlc3RfaWdub3JlX2xpbmUoc2VsZik6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSgiI1xubW9kdWxlIG9zXG5vcy5hY2Nlc3MiKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcyIsIG1vZHVsZS5uYW1lKQorCisgICAgZGVmIHRlc3RfcGFyYW0oc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgIHBhdGg6IGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFjY2VzcyIsIGZ1bmN0aW9uLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BhdGgnLCBwLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLmNvbnZlcnRlciwgY2xpbmljLmludF9jb252ZXJ0ZXIpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHAuZGVmYXVsdCkKKworICAgIGRlZiB0ZXN0X3BhcmFtX25vX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5hY2Nlc3MKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgc29tZXRoaW5nX2Vsc2U6IHN0ciIiIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnVuY3Rpb24ucGFyYW1ldGVyc1snc29tZXRoaW5nX2Vsc2UnXS5jb252ZXJ0ZXIsIGNsaW5pYy5zdHJfY29udmVydGVyKQorCisgICAgZGVmIGRpc2FibGVkX3Rlc3RfY29udmVydGVyX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD0xKSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwLmNvbnZlcnRlci5hcmdzWydhbGxvd19mZCddKQorCisgICAgZGVmIHRlc3RfcGFyYW1fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQgYXMgb3Nfc3RhdF9mbiAtPiBvYmplY3QoZG9jX2RlZmF1bHQ9J3N0YXRfcmVzdWx0JykKKworICAgcGF0aDogc3RyCisgICAgICAgUGF0aCB0byBiZSBleGFtaW5lZCIiIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQYXRoIHRvIGJlIGV4YW1pbmVkIiwgcC5kb2NzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb24ucmV0dXJuX2NvbnZlcnRlci5kb2NfZGVmYXVsdCwgJ3N0YXRfcmVzdWx0JykKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0IGFzIG9zX3N0YXRfZm4KKworICAgcGF0aDogc3RyCisgICAgICAgUGF0aCB0byBiZSBleGFtaW5lZAorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KKworb3Muc3RhdChwYXRoKQorICBwYXRoCisgICAgUGF0aCB0byBiZSBleGFtaW5lZAorIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X3BhcmFtZXRlcnNfaW5fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgIHg6IGludAorICAgICBEb2N1bWVudGF0aW9uIGZvciB4LgorICB5OiBpbnQKKworVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZm9vLgorCitPa2F5LCB3ZSdyZSBkb25lIGhlcmUuCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiCitUaGlzIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciBmb28uCisKK2Zvby5iYXIoeCwgeSkKKyAgeAorICAgIERvY3VtZW50YXRpb24gZm9yIHguCisKK09rYXksIHdlJ3JlIGRvbmUgaGVyZS4KKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfcmVncmVzc2lvbl9zcGVjaWFsX2NoYXJhY3Rlcl9pbl9wYXJhbWV0ZXJfY29sdW1uX29mX2RvY3N0cmluZ19maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQKKyAgICBwYXRoOiBzdHIKK1RoaXMvdXNlZCB0byBicmVhayBDbGluaWMhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zLnN0YXQocGF0aClcblxuVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEiLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9jX25hbWUoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5zdGF0IGFzIG9zX3N0YXRfZm4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvc19zdGF0X2ZuIiwgZnVuY3Rpb24uY19iYXNlbmFtZSkKKworICAgIGRlZiB0ZXN0X3JldHVybl9jb252ZXJ0ZXIoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5zdGF0IC0+IGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdW5jdGlvbi5yZXR1cm5fY29udmVydGVyLCBjbGluaWMuaW50X3JldHVybl9jb252ZXJ0ZXIpCisKKyAgICBkZWYgdGVzdF9zdGFyKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgKlxuICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFksIHAua2luZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwLmdyb3VwKQorCisgICAgZGVmIHRlc3RfZ3JvdXAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIHdpbmRvd1xud2luZG93LmJvcmRlclxuIFtcbiBscyA6IGludFxuIF1cbiAvXG4iKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snbHMnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHAuZ3JvdXApCisKKyAgICBkZWYgdGVzdF9sZWZ0X2dyb3VwKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgY3Vyc2VzCitjdXJzZXMud2luZG93LmFkZGNoCisgICBbCisgICB5OiBpbnQKKyAgICAgWS1jb29yZGluYXRlLgorICAgeDogaW50CisgICAgIFgtY29vcmRpbmF0ZS4KKyAgIF0KKyAgIGNoOiBjaGFyCisgICAgIENoYXJhY3RlciB0byBhZGQuCisgICBbCisgICBhdHRyOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBdCisgICAvCisiIiIpCisgICAgICAgIGZvciBuYW1lLCBncm91cCBpbiAoCisgICAgICAgICAgICAoJ3knLCAtMSksICgneCcsIC0xKSwKKyAgICAgICAgICAgICgnY2gnLCAwKSwKKyAgICAgICAgICAgICgnYXR0cicsIDEpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzW25hbWVdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ3JvdXAsIGdyb3VwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtpbmQsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbi5kb2NzdHJpbmcuc3RyaXAoKSwgIiIiCitjdXJzZXMud2luZG93LmFkZGNoKFt5LCB4LF0gY2gsIFthdHRyXSkKKyAgeQorICAgIFktY29vcmRpbmF0ZS4KKyAgeAorICAgIFgtY29vcmRpbmF0ZS4KKyAgY2gKKyAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICBhdHRyCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICIiIi5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2dyb3VwcyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGN1cnNlcworY3Vyc2VzLndpbmRvdy5pbWFnaW5hcnkKKyAgIFsKKyAgIFsKKyAgIHkxOiBpbnQKKyAgICAgWS1jb29yZGluYXRlLgorICAgeTI6IGludAorICAgICBZLWNvb3JkaW5hdGUuCisgICBdCisgICB4MTogaW50CisgICAgIFgtY29vcmRpbmF0ZS4KKyAgIHgyOiBpbnQKKyAgICAgWC1jb29yZGluYXRlLgorICAgXQorICAgY2g6IGNoYXIKKyAgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgIFsKKyAgIGF0dHIxOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyMjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjM6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIFsKKyAgIGF0dHI0OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyNTogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjY6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIF0KKyAgIF0KKyAgIC8KKyIiIikKKyAgICAgICAgZm9yIG5hbWUsIGdyb3VwIGluICgKKyAgICAgICAgICAgICgneTEnLCAtMiksICgneTInLCAtMiksCisgICAgICAgICAgICAoJ3gxJywgLTEpLCAoJ3gyJywgLTEpLAorICAgICAgICAgICAgKCdjaCcsIDApLAorICAgICAgICAgICAgKCdhdHRyMScsIDEpLCAoJ2F0dHIyJywgMSksICgnYXR0cjMnLCAxKSwKKyAgICAgICAgICAgICgnYXR0cjQnLCAyKSwgKCdhdHRyNScsIDIpLCAoJ2F0dHI2JywgMiksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ncm91cCwgZ3JvdXApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2luZCwgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb24uZG9jc3RyaW5nLnN0cmlwKCksICIiIgorY3Vyc2VzLndpbmRvdy5pbWFnaW5hcnkoW1t5MSwgeTIsXSB4MSwgeDIsXSBjaCwgW2F0dHIxLCBhdHRyMiwgYXR0cjMsIFthdHRyNCwgYXR0cjUsIGF0dHI2XV0pCisgIHkxCisgICAgWS1jb29yZGluYXRlLgorICB5MgorICAgIFktY29vcmRpbmF0ZS4KKyAgeDEKKyAgICBYLWNvb3JkaW5hdGUuCisgIHgyCisgICAgWC1jb29yZGluYXRlLgorICBjaAorICAgIENoYXJhY3RlciB0byBhZGQuCisgIGF0dHIxCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjIKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyMworICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI0CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjUKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgIiIiLnN0cmlwKCkpCisKKyAgICBkZWYgcGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoc2VsZiwgcyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb24ocykKKyAgICAgICAgcmV0dXJuIHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX190d29fdG9wX2dyb3Vwc19vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby50d29fdG9wX2dyb3Vwc19vbl9sZWZ0CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLAorICAgICAgICAgICAgKCdFcnJvciBvbiBsaW5lIDA6XG4nCisgICAgICAgICAgICAnRnVuY3Rpb24gdHdvX3RvcF9ncm91cHNfb25fbGVmdCBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgMilcbicpKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fdHdvX3RvcF9ncm91cHNfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28udHdvX3RvcF9ncm91cHNfb25fcmlnaHQKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fcGFyYW1ldGVyX2FmdGVyX2dyb3VwX29uX3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLnBhcmFtZXRlcl9hZnRlcl9ncm91cF9vbl9yaWdodAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19ncm91cF9hZnRlcl9wYXJhbWV0ZXJfb25fbGVmdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5ncm91cF9hZnRlcl9wYXJhbWV0ZXJfb25fbGVmdAorICAgIFsKKyAgICBncm91cDIgOiBpbnQKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19lbXB0eV9ncm91cF9vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmVtcHR5X2dyb3VwCisgICAgWworICAgIFsKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2VtcHR5X2dyb3VwX29uX3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmVtcHR5X2dyb3VwCisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBbCisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X25vX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKworRG9jc3RyaW5nCisKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRG9jc3RyaW5nXG5cbmZvby5iYXIoKSIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX21vZHVsZV9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhciA9PiBpbnQKKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX2NfYmFzZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyIGFzIDkzNQorICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9zdGFyKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aG91dF9pbml0aWFsX3BhcmFtZXRlcnNfb3JfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRob3V0X2luaXRpYWxfcGFyYW1ldGVyc193aXRoX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCitEb2NzdHJpbmcgaGVyZS4KKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRoX2luaXRpYWxfcGFyYW1ldGVyc193aXRob3V0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICB0aGlzOiBpbnQKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aF9pbml0aWFsX3BhcmFtZXRlcnNfYW5kX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICB0aGlzOiBpbnQKKyAgICAqCitEb2NzdHJpbmcuCisiIiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc2xhc2goc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgLworICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X21peF9zdGFyX2FuZF9zbGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgIHg6IGludAorICAgeTogaW50CisgICAqCisgICB6OiBpbnQKKyAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfbm90X3Blcm1pdHRlZF9hZnRlcl9zbGFzaF9mb3Jfbm93KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIC8KKyAgICB4OiBpbnQKKyIiIikKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX25vdF9hdF9jb2x1bW5fMChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorICBtb2R1bGUgZm9vCisgIGZvby5iYXIKKyAgICB4OiBpbnQKKyAgICAgIE5lc3RlZCBkb2NzdHJpbmcgaGVyZSwgZ29ldGguCisgICAgKgorICAgIHk6IHN0cgorICBOb3QgYXQgY29sdW1uIDAhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiCitOb3QgYXQgY29sdW1uIDAhCisKK2Zvby5iYXIoeCwgKiwgeSkKKyAgeAorICAgIE5lc3RlZCBkb2NzdHJpbmcgaGVyZSwgZ29ldGguCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX3JlZ3Jlc3Npb25fc3BlY2lhbF9jaGFyYWN0ZXJfaW5fcGFyYW1ldGVyX2NvbHVtbl9vZl9kb2NzdHJpbmdfZmlyc3RfbGluZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0CisgICAgcGF0aDogc3RyCitUaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJUaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljIVxuXG5vcy5zdGF0KHBhdGgpIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZGlyZWN0aXZlKHNlbGYpOgorICAgICAgICBjID0gRmFrZUNsaW5pYygpCisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihjKQorICAgICAgICBwYXJzZXIuZmxhZyA9IEZhbHNlCisgICAgICAgIHBhcnNlci5kaXJlY3RpdmVzWydzZXRmbGFnJ10gPSBsYW1iZGEgOiBzZXRhdHRyKHBhcnNlciwgJ2ZsYWcnLCBUcnVlKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jaygic2V0ZmxhZyIpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcnNlci5mbGFnKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NvbnZlcnRlcnMoc2VsZik6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSgnbW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgIHBhdGg6ICJzIicpCisgICAgICAgIG1vZHVsZSwgZnVuY3Rpb24gPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgoZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddKS5jb252ZXJ0ZXIsIGNsaW5pYy5zdHJfY29udmVydGVyKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIHRleHQpOgorICAgICAgICBjID0gRmFrZUNsaW5pYygpCisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihjKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jayh0ZXh0KQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIHJldHVybiBibG9jaworCisgICAgZGVmIHBhcnNlX2Z1bmN0aW9uKHNlbGYsIHRleHQpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UodGV4dCkKKyAgICAgICAgcyA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgYXNzZXJ0IGxlbihzKSA9PSAyCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNbMF0sIGNsaW5pYy5Nb2R1bGUpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNbMV0sIGNsaW5pYy5GdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHNbMV0KKworICAgIGRlZiB0ZXN0X3NjYWZmb2xkaW5nKHNlbGYpOgorICAgICAgICAjIHRlc3QgcmVwciBvbiBzcGVjaWFsIHZhbHVlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY2xpbmljLnVuc3BlY2lmaWVkKSwgJzxVbnNwZWNpZmllZD4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY2xpbmljLk5VTEwpLCAnPE51bGw+JykKKworICAgICAgICAjIHRlc3QgdGhhdCBmYWlsIGZhaWxzCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGNsaW5pYy5mYWlsKCdUaGUgaWdsb29zIGFyZSBtZWx0aW5nIScsIGZpbGVuYW1lPSdjbG93bi50eHQnLCBsaW5lX251bWJlcj02OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0Vycm9yIGluIGZpbGUgImNsb3duLnR4dCIgb24gbGluZSA2OTpcblRoZSBpZ2xvb3MgYXJlIG1lbHRpbmchXG4nKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvYmtmaWxlLnB5IGIvVG9vbHMvZnJlZXplL2JrZmlsZS5weQppbmRleCAwZTg5NWYyLi41ODI0NmZhIDEwMDY0NAotLS0gYS9Ub29scy9mcmVlemUvYmtmaWxlLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKQEAgLTcsMTEgKzcsMTEgQEAKICAgICAgICAgc2VsZi5fX2JhY2t1cCA9IGZpbGUgKyAnficKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX19iYWNrdXApCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlLCBzZWxmLl9fYmFja3VwKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5fX2JhY2t1cCA9IE5vbmUKICAgICAgICAgc2VsZi5fX2ZpbGUgPSBfb3JpZ19vcGVuKGZpbGUsIG1vZGUsIGJ1ZnNpemUpCiAgICAgICAgIHNlbGYuY2xvc2VkID0gc2VsZi5fX2ZpbGUuY2xvc2VkCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvZnJlZXplLnB5IGIvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQppbmRleCBhNDEyNjdhLi40NzljYTNjIDEwMDc1NQotLS0gYS9Ub29scy9mcmVlemUvZnJlZXplLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICMgZGVmYXVsdCB0aGUgZXhjbHVkZSBsaXN0IGZvciBlYWNoIHBsYXRmb3JtCiAgICAgaWYgd2luOiBleGNsdWRlID0gZXhjbHVkZSArIFsKICAgICAgICAgJ2RvcycsICdkb3NwYXRoJywgJ21hYycsICdtYWNwYXRoJywgJ21hY2ZzJywgJ01BQ0ZTJywgJ3Bvc2l4JywKLSAgICAgICAgJ29zMicsICdjZScsCisgICAgICAgICdjZScsCiAgICAgICAgIF0KIAogICAgIGZhaWxfaW1wb3J0ID0gZXhjbHVkZVs6XQpAQCAtMzExLDcgKzMxMSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKG9kaXIpCiAgICAgICAgICAgICBwcmludCgiQ3JlYXRlZCBvdXRwdXQgZGlyZWN0b3J5Iiwgb2RpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgdXNhZ2UoJyVzOiBta2RpciBmYWlsZWQgKCVzKScgJSAob2Rpciwgc3RyKG1zZykpKQogICAgIGJhc2UgPSAnJwogICAgIGlmIG9kaXI6CmRpZmYgLS1naXQgYS9Ub29scy9nZGIvbGlicHl0aG9uLnB5IGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQppbmRleCAxYzJjM2NiLi4yYWQyMmUyIDEwMDY0NAotLS0gYS9Ub29scy9nZGIvbGlicHl0aG9uLnB5CisrKyBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKQEAgLTkzOSwyMSArOTM5LDI2IEBACiBjbGFzcyBQeVNldE9iamVjdFB0cihQeU9iamVjdFB0cik6CiAgICAgX3R5cGVuYW1lID0gJ1B5U2V0T2JqZWN0JwogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9kdW1teV9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX2dsb2JhbF9zeW1ib2woJ19QeVNldF9EdW1teScpLnZhbHVlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZHVtbXlfcHRyID0gc2VsZi5fZHVtbXlfa2V5KCkKKyAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpICsgMSk6CisgICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCisgICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KKyAgICAgICAgICAgIGlmIGtleSAhPSAwIGFuZCBrZXkgIT0gZHVtbXlfcHRyOgorICAgICAgICAgICAgICAgIHlpZWxkIFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkKKwogICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKICAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgogICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgogICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyVzKC4uLiknICUgc2VsZi5zYWZlX3RwX25hbWUoKSkKICAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCiAKLSAgICAgICAgbWVtYmVycyA9IFtdCi0gICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQotICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKLSAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KLSAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQotICAgICAgICAgICAgaWYga2V5ICE9IDA6Ci0gICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KS5wcm94eXZhbCh2aXNpdGVkKQotICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgotICAgICAgICAgICAgICAgICAgICBtZW1iZXJzLmFwcGVuZChrZXlfcHJveHkpCisgICAgICAgIG1lbWJlcnMgPSAoa2V5LnByb3h5dmFsKHZpc2l0ZWQpIGZvciBrZXkgaW4gc2VsZikKICAgICAgICAgaWYgc2VsZi5zYWZlX3RwX25hbWUoKSA9PSAnZnJvemVuc2V0JzoKICAgICAgICAgICAgIHJldHVybiBmcm96ZW5zZXQobWVtYmVycykKICAgICAgICAgZWxzZToKQEAgLTk4MiwxOCArOTg3LDExIEBACiAKICAgICAgICAgb3V0LndyaXRlKCd7JykKICAgICAgICAgZmlyc3QgPSBUcnVlCi0gICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQotICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKLSAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KLSAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQotICAgICAgICAgICAgaWYga2V5ICE9IDA6Ci0gICAgICAgICAgICAgICAgcHlvcF9rZXkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpCi0gICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gcHlvcF9rZXkucHJveHl2YWwodmlzaXRlZCkgIyBGSVhNRSEKLSAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0OgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgcHlvcF9rZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKKyAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGtleS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKICAgICAgICAgb3V0LndyaXRlKCd9JykKIAogICAgICAgICBpZiB0cF9uYW1lICE9ICdzZXQnOgpAQCAtMTE3Nyw3ICsxMTc1LDkgQEAKICAgICAgICAgIyBDb252ZXJ0IHRoZSBpbnQgY29kZSBwb2ludHMgdG8gdW5pY29kZSBjaGFyYWN0ZXJzLCBhbmQgZ2VuZXJhdGUgYQogICAgICAgICAjIGxvY2FsIHVuaWNvZGUgaW5zdGFuY2UuCiAgICAgICAgICMgVGhpcyBzcGxpdHMgc3Vycm9nYXRlIHBhaXJzIGlmIHNpemVvZihQeV9VTklDT0RFKSBpcyAyIGhlcmUgKGluIGdkYikuCi0gICAgICAgIHJlc3VsdCA9IHUnJy5qb2luKFtfdW5pY2hyKHVjcykgZm9yIHVjcyBpbiBQeV9VTklDT0RFc10pCisgICAgICAgIHJlc3VsdCA9IHUnJy5qb2luKFsKKyAgICAgICAgICAgIChfdW5pY2hyKHVjcykgaWYgdWNzIDw9IDB4MTBmZmZmIGVsc2UgJ1x1ZmZmZCcpCisgICAgICAgICAgICBmb3IgdWNzIGluIFB5X1VOSUNPREVzXSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vbXNnZm10LnB5IGIvVG9vbHMvaTE4bi9tc2dmbXQucHkKaW5kZXggY2Q5MDY5MS4uYjA3NTFhMSAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9tc2dmbXQucHkKKysrIGIvVG9vbHMvaTE4bi9tc2dmbXQucHkKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAgICBpZiBvcHQgaW4gKCctaCcsICctLWhlbHAnKToKICAgICAgICAgICAgIHVzYWdlKDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLVYnLCAnLS12ZXJzaW9uJyk6Ci0gICAgICAgICAgICBwcmludCgibXNnZm10LnB5IiwgX192ZXJzaW9uX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHByaW50KCJtc2dmbXQucHkiLCBfX3ZlcnNpb25fXykKICAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLW8nLCAnLS1vdXRwdXQtZmlsZScpOgogICAgICAgICAgICAgb3V0ZmlsZSA9IGFyZwpkaWZmIC0tZ2l0IGEvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQppbmRleCA3MTRjMGU0Li42MzVkZDU2IDEwMDY0NAotLS0gYS9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQorKysgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQpAQCAtNDYsOCArNDYsNyBAQAogICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICcnCiAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgYnVpbHRpbl9tb2Qoc2Vjb25kcywgcmVwZWF0KToKQEAgLTU2LDkgKzU1LDggQEAKICAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KICAgICAjIFJlbHlpbmcgb24gYnVpbHQtaW4gaW1wb3J0ZXIgYmVpbmcgaW1wbGljaXQuCi0gICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgIHlpZWxkIHJlc3VsdAorICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIHNvdXJjZV93b19ieXRlY29kZShzZWNvbmRzLCByZXBlYXQpOgpAQCAtNzMsOSArNzEsOCBAQAogICAgICAgICAgICAgbG9hZGVyID0gKGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUywgVHJ1ZSkKICAgICAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKGxvYWRlcikpCi0gICAgICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogICAgIGZpbmFsbHk6CiAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gRmFsc2UKIApAQCAtODksOSArODYsOCBAQAogICAgICAgICAgICAgb3MudW5saW5rKGJ5dGVjb2RlX3BhdGgpCiAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQogCkBAIC0xMjcsOCArMTIzLDcgQEAKICAgICAgICAgZGVmIGNsZWFudXAoKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzLnBvcChuYW1lKQogICAgICAgICAgICAgb3MudW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGNsZWFudXAsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBjbGVhbnVwLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAKICAgICB3cml0aW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0aW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fLmZvcm1hdChuYW1lKSkKQEAgLTE0OCw5ICsxNDMsOCBAQAogICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vayhsb2FkZXIpKQogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1tuYW1lXSkKICAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKSkKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBfdXNpbmdfYnl0ZWNvZGUobW9kdWxlKToKQEAgLTE1OCw5ICsxNTIsOCBAQAogICAgIGRlZiB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsoc2Vjb25kcywgcmVwZWF0KToKICAgICAgICAgIiIiU291cmNlIHcvIGJ5dGVjb2RlOiB7fSIiIgogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobW9kdWxlLl9fZmlsZV9fKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKICAgICB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18uZm9ybWF0KG5hbWUpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5IGIvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CmluZGV4IDUzMGJjNzkuLjcxMmU1ODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQorKysgYi9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKQEAgLTI0LDYgKzI0LDggQEAKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZyBvciBURVhUX0VOQ09ESU5HKQogICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGlmICdyJyBpbiBtb2RlOgorICAgICAgICAgICAgbW9kZSArPSAnVScgIyAnVScgbW9kZSBpcyBuZWVkZWQgb25seSBpbiBQeXRob24gMi54CiAgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlKQogCiBkZWYgZ2V0X2ZpbGVfc2l6ZXMoKToKQEAgLTM4MCw3ICszODIsNyBAQAogICAgICAgICAgICAgZi53cml0ZShvcy51cmFuZG9tKHNpemUpKQogICAgICMgVGV4dCBmaWxlcwogICAgIGNodW5rID0gW10KLSAgICB3aXRoIHRleHRfb3BlbihfX2ZpbGVfXywgInJVIiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgIHdpdGggdGV4dF9vcGVuKF9fZmlsZV9fLCAiciIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyA8aW9iZW5jaCB0ZXh0IGNodW5rIG1hcmtlcj4iKToKICAgICAgICAgICAgICAgICBicmVhawpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL21zaS5weSBiL1Rvb2xzL21zaS9tc2kucHkKaW5kZXggNWVkMDI1ZC4uNjk0ODc1YSAxMDA2NDQKLS0tIGEvVG9vbHMvbXNpL21zaS5weQorKysgYi9Ub29scy9tc2kvbXNpLnB5CkBAIC05OSw3ICs5OSwxMCBAQAogICAgICdfbXVsdGlwcm9jZXNzaW5nLnB5ZCcsCiAgICAgJ19sem1hLnB5ZCcsCiAgICAgJ19kZWNpbWFsLnB5ZCcsCi0gICAgJ190ZXN0YnVmZmVyLnB5ZCcKKyAgICAnX3Rlc3RidWZmZXIucHlkJywKKyAgICAnX3NoYTMucHlkJywKKyAgICAnX3Rlc3RpbXBvcnRtdWx0aXBsZS5weWQnLAorICAgICdfb3ZlcmxhcHBlZC5weWQnLAogXQogCiAjIFdlbGwta25vd24gY29tcG9uZW50IFVVSURzCkBAIC0xMTksNiArMTIyLDcgQEAKICAgICAiMzEiOiJ7NGFmY2JhMGItMTNlNC00N2MzLWJlYmUtNDc3NDI4YjQ2OTEzfSIsCiAgICAgIjMyIjoiezNmZjk1MzE1LTEwOTYtNGQzMS1iZDg2LTYwMWQ1NDM4YWQ1ZX0iLAogICAgICIzMyI6IntmNzU4MWNhNC1kMzY4LTRlZWEtOGY4Mi1kNDhjNjRjNGYwNDd9IiwKKyAgICAiMzQiOiJ7N0EwQzU4MTItMjU4My00MEQ5LUJDQkItQ0Q3NDg1RjExMzc3fSIsCiAgICAgfSBbbWFqb3IrbWlub3JdCiAKICMgQ29tcHV0ZSB0aGUgbmFtZSB0aGF0IFNwaGlueCBnaXZlcyB0byB0aGUgZG9jZmlsZQpAQCAtNDE3LDYgKzQyMSw4IEBACiAKICAgICBjb21waWxlYXJncyA9IHInLVdpICJbVEFSR0VURElSXUxpYlxjb21waWxlYWxsLnB5IiAtZiAteCAiYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xweTJffGxpYjJ0bzNcXHRlc3RzfHZlbnZcXHNjcmlwdHMiICJbVEFSR0VURElSXUxpYiInCiAgICAgbGliMnRvM2FyZ3MgPSByJy1jICJpbXBvcnQgbGliMnRvMy5weWdyYW0sIGxpYjJ0bzMucGF0Y29tcDtsaWIydG8zLnBhdGNvbXAuUGF0dGVybkNvbXBpbGVyKCkiJworICAgIHVwZGF0ZXBpcGFyZ3MgPSByJy1tIGVuc3VyZXBpcCAtVScKKyAgICByZW1vdmVwaXBhcmdzID0gcictbSBlbnN1cmVwaXAgLXInICMgZG9lcyBub3QgeWV0IHdvcmsKICAgICAjIFNlZSAiQ3VzdG9tQWN0aW9uIFRhYmxlIgogICAgIGFkZF9kYXRhKGRiLCAiQ3VzdG9tQWN0aW9uIiwgWwogICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZUZpcnN0U2VxdWVuY2UgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVUZXh0RGF0YSArIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZVByb3BlcnR5CkBAIC00MzMsNiArNDM5LDkgQEAKICAgICAgICAgKCJDb21waWxlUHljIiwgMTgsICJweXRob24uZXhlIiwgY29tcGlsZWFyZ3MpLAogICAgICAgICAoIkNvbXBpbGVQeW8iLCAxOCwgInB5dGhvbi5leGUiLCAiLU8gIitjb21waWxlYXJncyksCiAgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAxOCwgInB5dGhvbi5leGUiLCBsaWIydG8zYXJncyksCisgICAgICAgICMgbXNpZGJDdXN0b21BY3Rpb25UeXBlSW5TY3JpcHQgKDEwMjQpOyBydW4gZHVyaW5nIGFjdHVhbCBpbnN0YWxsYXRpb24KKyAgICAgICAgKCJVcGRhdGVQaXAiLCAxOCsxMDI0LCAicHl0aG9uLmV4ZSIsIHVwZGF0ZXBpcGFyZ3MpLAorICAgICAgICAjKCJSZW1vdmVQaXAiLCAxOCwgInB5dGhvbi5leGUiLCByZW1vdmVwaXBhcmdzKSwKICAgICAgICAgXSkKIAogICAgICMgVUkgU2VxdWVuY2VzLCBzZWUgIkluc3RhbGxVSVNlcXVlbmNlIFRhYmxlIiwgIlVzaW5nIGEgU2VxdWVuY2UgVGFibGUiCkBAIC00NTksNyArNDY4LDcgQEAKIAogICAgICMgUHJlcGVuZCBUQVJHRVRESVIgdG8gdGhlIHN5c3RlbSBwYXRoLCBhbmQgcmVtb3ZlIGl0IG9uIHVuaW5zdGFsbC4KICAgICBhZGRfZGF0YShkYiwgIkVudmlyb25tZW50IiwKLSAgICAgICAgICAgICBbKCJQYXRoQWRkaXRpb24iLCAiPS0qUGF0aCIsICJbVEFSR0VURElSXTtbfl0iLCAiUkVHSVNUUlkucGF0aCIpXSkKKyAgICAgICAgICAgICBbKCJQYXRoQWRkaXRpb24iLCAiPS0qUGF0aCIsICJbVEFSR0VURElSXTtbVEFSR0VURElSXVNjcmlwdHM7W35dIiwgIlJFR0lTVFJZLnBhdGgiKV0pCiAKICAgICAjIEV4ZWN1dGUgU2VxdWVuY2VzCiAgICAgYWRkX2RhdGEoZGIsICJJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlIiwKQEAgLTQ2OSw2ICs0NzgsMTIgQEAKICAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9XaW5kb3dzIiwgJ0xBVU5DSEVSRElSPSIiIGFuZCAnICsgc3lzMzJjb25kLCA3NTMpLAogICAgICAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1RhcmdldCIsICdMQVVOQ0hFUkRJUj0iIiBhbmQgbm90ICcgKyBzeXMzMmNvbmQsIDc1NCksCiAgICAgICAgICAgICAgKCJVcGRhdGVFZGl0SURMRSIsIE5vbmUsIDEwNTApLAorICAgICAgICAgICAgICMgcnVuIGNvbW1hbmQgaWYgaW5zdGFsbCBzdGF0ZSBvZiBwaXAgY2hhbmdlcyB0byBJTlNUQUxMU1RBVEVfTE9DQUwKKyAgICAgICAgICAgICAjIHJ1biBhZnRlciBJbnN0YWxsRmlsZXMKKyAgICAgICAgICAgICAoIlVwZGF0ZVBpcCIsICImcGlwPTMiLCA0MDAxKSwKKyAgICAgICAgICAgICAjIHJlbW92ZSBwaXAgd2hlbiBzdGF0ZSBjaGFuZ2VzIHRvIElOU1RBTExTVEFURV9BQlNFTlQKKyAgICAgICAgICAgICAjIHJ1biBiZWZvcmUgUmVtb3ZlRmlsZXMKKyAgICAgICAgICAgICAjKCJSZW1vdmVQaXAiLCAiJnBpcD0yIiwgMzQ5OSksCiAgICAgICAgICAgICAgKCJDb21waWxlUHljIiwgIkNPTVBJTEVBTEwiLCA2ODAwKSwKICAgICAgICAgICAgICAoIkNvbXBpbGVQeW8iLCAiQ09NUElMRUFMTCIsIDY4MDEpLAogICAgICAgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAiQ09NUElMRUFMTCIsIDY4MDIpLApAQCAtNzQ4LDcgKzc2Myw4IEBACiAgICAgYWR2YW5jZWQgPSBQeURpYWxvZyhkYiwgIkFkdmFuY2VkRGxnIiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBpbGVQeWMiLCAiT2siLCAiT2siKQogICAgIGFkdmFuY2VkLnRpdGxlKCJBZHZhbmNlZCBPcHRpb25zIGZvciBbUHJvZHVjdE5hbWVdIikKLSAgICAjIEEgcmFkaW8gZ3JvdXAgd2l0aCB0d28gb3B0aW9uczogYWxsdXNlcnMsIGp1c3RtZQorCisgICAgIyBBIGNoZWNrYm94IHdoZXRoZXIgdG8gYnVpbGQgcHljIGZpbGVzCiAgICAgYWR2YW5jZWQuY2hlY2tib3goIkNvbXBpbGVQeWMiLCAxMzUsIDYwLCAyMzAsIDUwLCAzLAogICAgICAgICAgICAgICAgICAgICAgICJDT01QSUxFQUxMIiwgIkNvbXBpbGUgLnB5IGZpbGVzIHRvIGJ5dGUgY29kZSBhZnRlciBpbnN0YWxsYXRpb24iLCAiT2siKQogCkBAIC04NDUsNyArODYxLDggQEAKICAgICAjIChpLmUuIGFkZGl0aW9uYWwgUHl0aG9uIGxpYnJhcmllcykgbmVlZCB0byBmb2xsb3cgdGhlIHBhcmVudCBmZWF0dXJlLgogICAgICMgRmVhdHVyZXMgdGhhdCBoYXZlIG5vIGFkdmVydGlzZW1lbnQgdHJpZ2dlciAoZS5nLiB0aGUgdGVzdCBzdWl0ZSkKICAgICAjIG11c3Qgbm90IHN1cHBvcnQgYWR2ZXJ0aXNlbWVudAotICAgIGdsb2JhbCBkZWZhdWx0X2ZlYXR1cmUsIHRjbHRrLCBodG1sZmlsZXMsIHRvb2xzLCB0ZXN0c3VpdGUsIGV4dF9mZWF0dXJlLCBwcml2YXRlX2NydCwgcHJlcGVuZF9wYXRoCisgICAgZ2xvYmFsIGRlZmF1bHRfZmVhdHVyZSwgdGNsdGssIGh0bWxmaWxlcywgdG9vbHMsIHRlc3RzdWl0ZQorICAgIGdsb2JhbCBleHRfZmVhdHVyZSwgcHJpdmF0ZV9jcnQsIHByZXBlbmRfcGF0aCwgdXBkYXRlX3BpcAogICAgIGRlZmF1bHRfZmVhdHVyZSA9IEZlYXR1cmUoZGIsICJEZWZhdWx0RmVhdHVyZSIsICJQeXRob24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBJbnRlcnByZXRlciBhbmQgTGlicmFyaWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGRpcmVjdG9yeSA9ICJUQVJHRVRESVIiKQpAQCAtODY3LDggKzg4NCwxNCBAQAogICAgIHRvb2xzID0gRmVhdHVyZShkYiwgIlRvb2xzIiwgIlV0aWxpdHkgU2NyaXB0cyIsCiAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pIiwgOSwKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTIpCisgICAgIyBwaXAgaW5zdGFsbGF0aW9uIGlzbid0IGVuYWJsZWQgYnkgZGVmYXVsdCB1bnRpbCBhIGNsZWFuIHVuaW5zdGFsbCBwcm9jZWR1cmUKKyAgICAjIGJlY29tZXMgcG9zc2libGUKKyAgICB1cGRhdGVfcGlwID0gRmVhdHVyZShkYiwgInBpcCIsICJwaXAiLAorICAgICAgICAgICAgICAgICAgICAiSW5zdGFsbCAob3IgdXBncmFkZSBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbikgcGlwLCAiCisgICAgICAgICAgICAgICAgICAgICJhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4iLCAxMSwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTJ8OCwgbGV2ZWw9MikKICAgICB0ZXN0c3VpdGUgPSBGZWF0dXJlKGRiLCAiVGVzdHN1aXRlIiwgIlRlc3Qgc3VpdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pIiwgMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykiLCAxMywKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgpCiAgICAgIyBwcmVwZW5kX3BhdGggaXMgYW4gYWRkaXRpb25hbCBmZWF0dXJlIHdoaWNoIGlzIHRvIGJlIG9mZiBieSBkZWZhdWx0LgogICAgICMgU2luY2UgdGhlIGRlZmF1bHQgbGV2ZWwgZm9yIHRoZSBhYm92ZSBmZWF0dXJlcyBpcyAxLCB0aGlzIG5lZWRzIHRvIGJlCkBAIC04NzYsNyArODk5LDcgQEAKICAgICBwcmVwZW5kX3BhdGggPSBGZWF0dXJlKGRiLCAiUHJlcGVuZFBhdGgiLCAiQWRkIHB5dGhvbi5leGUgdG8gUGF0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUHJlcGVuZCBbVEFSR0VURElSXSB0byB0aGUgc3lzdGVtIFBhdGggdmFyaWFibGUuICIKICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGFsbG93cyB5b3UgdG8gdHlwZSAncHl0aG9uJyBpbnRvIGEgY29tbWFuZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicHJvbXB0IHdpdGhvdXQgbmVlZGluZyB0aGUgZnVsbCBwYXRoLiIsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgInByb21wdCB3aXRob3V0IG5lZWRpbmcgdGhlIGZ1bGwgcGF0aC4iLCAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgsCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogCkBAIC05NTQsOCArOTc3LDYgQEAKICAgICAjIEFkZCBhbGwgZXhlY3V0YWJsZXMsIGljb25zLCB0ZXh0IGZpbGVzIGludG8gdGhlIFRBUkdFVERJUiBjb21wb25lbnQKICAgICByb290ID0gUHlEaXJlY3RvcnkoZGIsIGNhYiwgTm9uZSwgc3JjZGlyLCAiVEFSR0VURElSIiwgIlNvdXJjZURpciIpCiAgICAgZGVmYXVsdF9mZWF0dXJlLnNldF9jdXJyZW50KCkKLSAgICBpZiBub3QgbXNpbGliLldpbjY0OgotICAgICAgICByb290LmFkZF9maWxlKCIlcy93OXhwb3Blbi5leGUiICUgUENCVUlMRCkKICAgICByb290LmFkZF9maWxlKCJSRUFETUUudHh0Iiwgc3JjPSJSRUFETUUiKQogICAgIHJvb3QuYWRkX2ZpbGUoIk5FV1MudHh0Iiwgc3JjPSJNaXNjL05FV1MiKQogICAgIGdlbmVyYXRlX2xpY2Vuc2UoKQpAQCAtMTI2OSw2ICsxMjkwLDEwIEBACiAgICAgICAgICAgICAgICJ7NjAyNTRDQTUtOTUzQi0xMUNGLThDOTYtMDBBQTAwQjg3MDhDfSIsICJSRUdJU1RSWS5kZWYiKSwKICAgICAgICAgICAgIF0pCiAKKyAgICAjIFBBVEhFWFQKKyAgICBhZGRfZGF0YShkYiwgIkVudmlyb25tZW50IiwKKyAgICAgICAgICAgICBbKCJQYXRoRXh0QWRkaXRpb24iLCAiPS0qUGF0aEV4dCIsICJbfl07LlBZIiwgIlJFR0lTVFJZLmRlZiIpXSkKKwogICAgICMgUmVnaXN0cnkga2V5cwogICAgIHByZWZpeCA9IHIiU29mdHdhcmVcJXNQeXRob25cUHl0aG9uQ29yZVwlcyIgJSAodGVzdHByZWZpeCwgc2hvcnRfdmVyc2lvbikKICAgICBhZGRfZGF0YShkYiwgIlJlZ2lzdHJ5IiwKZGlmZiAtLWdpdCBhL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5IGIvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKaW5kZXggYjU1ZTJjNi4uODM3Y2Q4MSAxMDA2NDQKLS0tIGEvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKKysrIGIvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKQEAgLTMwNyw2ICszMDcsOSBAQAogICAgIGRlZiBfTmFtZShzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmlkKQogCisgICAgZGVmIF9OYW1lQ29uc3RhbnQoc2VsZiwgdCk6CisgICAgICAgIHNlbGYud3JpdGUocmVwcih0LnZhbHVlKSkKKwogICAgIGRlZiBfTnVtKHNlbGYsIHQpOgogICAgICAgICAjIFN1YnN0aXR1dGUgb3ZlcmZsb3dpbmcgZGVjaW1hbCBsaXRlcmFsIGZvciBBU1QgaW5maW5pdGllcy4KICAgICAgICAgc2VsZi53cml0ZShyZXByKHQubikucmVwbGFjZSgiaW5mIiwgSU5GU1RSKSkKQEAgLTUxNSwxMCArNTE4LDEwIEBACiAgICAgICAgICAgICBlbHNlOiBzZWxmLndyaXRlKCIsICIpCiAgICAgICAgICAgICBzZWxmLndyaXRlKCIqIikKICAgICAgICAgICAgIGlmIHQudmFyYXJnOgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUodC52YXJhcmcpCi0gICAgICAgICAgICAgICAgaWYgdC52YXJhcmdhbm5vdGF0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUodC52YXJhcmcuYXJnKQorICAgICAgICAgICAgICAgIGlmIHQudmFyYXJnLmFubm90YXRpb246CiAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIjogIikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhcmFyZ2Fubm90YXRpb24pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC52YXJhcmcuYW5ub3RhdGlvbikKIAogICAgICAgICAjIGtleXdvcmQtb25seSBhcmd1bWVudHMKICAgICAgICAgaWYgdC5rd29ubHlhcmdzOgpAQCAtNTM0LDEwICs1MzcsMTAgQEAKICAgICAgICAgaWYgdC5rd2FyZzoKICAgICAgICAgICAgIGlmIGZpcnN0OmZpcnN0ID0gRmFsc2UKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIit0Lmt3YXJnKQotICAgICAgICAgICAgaWYgdC5rd2FyZ2Fubm90YXRpb246CisgICAgICAgICAgICBzZWxmLndyaXRlKCIqKiIrdC5rd2FyZy5hcmcpCisgICAgICAgICAgICBpZiB0Lmt3YXJnLmFubm90YXRpb246CiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQotICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5rd2FyZ2Fubm90YXRpb24pCisgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJnLmFubm90YXRpb24pCiAKICAgICBkZWYgX2tleXdvcmQoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUodC5hcmcpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL1JFQURNRSBiL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCmluZGV4IGQ2NWQxZmQuLmM2YjIyODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCisrKyBiL1Rvb2xzL3NjcmlwdHMvUkVBRE1FCkBAIC0yLDY0ICsyLDY4IEBACiB1c2VmdWwgd2hpbGUgYnVpbGRpbmcsIGV4dGVuZGluZyBvciBtYW5hZ2luZyBQeXRob24uICBTb21lIChlLmcuLCBkdXRyZWUgb3IgbGxsKQogYXJlIGFsc28gZ2VuZXJhbGx5IHVzZWZ1bCBVTklYIHRvb2xzLgogCi0ydG8zICAgICAgICAgICAgICAgICAgICBNYWluIHNjcmlwdCBmb3IgcnVubmluZyB0aGUgMnRvMyBjb252ZXJzaW9uIHRvb2wKLWFuYWx5emVfZHhwLnB5ICAgICAgICAgIEFuYWx5emVzIHRoZSByZXN1bHQgb2Ygc3lzLmdldGR4cCgpCi1ieWV4dC5weSAgICAgICAgICAgICAgICBQcmludCBsaW5lcy93b3Jkcy9jaGFycyBzdGF0cyBvZiBmaWxlcyBieSBleHRlbnNpb24KLWJ5dGV5ZWFycy5weSAgICAgICAgICAgIFByaW50IHByb2R1Y3Qgb2YgYSBmaWxlJ3Mgc2l6ZSBhbmQgYWdlCi1jaGVja3B5Yy5weSAgICAgICAgICAgICBDaGVjayBwcmVzZW5jZSBhbmQgdmFsaWRpdHkgb2YgIi5weWMiIGZpbGVzCi1jbGVhbmZ1dHVyZS5weSAgICAgICAgICBGaXggcmVkdW5kYW50IFB5dGhvbiBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKLWNvbWJpbmVyZWZzLnB5ICAgICAgICAgIEEgaGVscGVyIGZvciBhbmFseXppbmcgUFlUSE9ORFVNUFJFRlMgb3V0cHV0Ci1jb3B5dGltZS5weSAgICAgICAgICAgICBDb3B5IG9uZSBmaWxlJ3MgYXRpbWUgYW5kIG10aW1lIHRvIGFub3RoZXIKLWNybGYucHkgICAgICAgICAgICAgICAgIENoYW5nZSBDUkxGIGxpbmUgZW5kaW5ncyB0byBMRiAoV2luZG93cyB0byBVbml4KQotZGIycGlja2xlLnB5ICAgICAgICAgICAgRHVtcCBhIGRhdGFiYXNlIGZpbGUgdG8gYSBwaWNrbGUKLWRpZmYucHkgICAgICAgICAgICAgICAgIFByaW50IGZpbGUgZGlmZnMgaW4gY29udGV4dCwgdW5pZmllZCwgb3IgbmRpZmYgZm9ybWF0cwotZHV0cmVlLnB5ICAgICAgICAgICAgICAgRm9ybWF0IGR1KDEpIG91dHB1dCBhcyBhIHRyZWUgc29ydGVkIGJ5IHNpemUKLWVwdGFncy5weSAgICAgICAgICAgICAgIENyZWF0ZSBFbWFjcyBUQUdTIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCi1maW5kX3JlY3Vyc2lvbmxpbWl0LnB5ICBGaW5kIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCBvbiB0aGlzIG1hY2hpbmUKLWZpbmRkaXYucHkgICAgICAgICAgICAgIEEgZ3JlcC1saWtlIHRvb2wgdGhhdCBsb29rcyBmb3IgZGl2aXNpb24gb3BlcmF0b3JzCi1maW5kbGlua3N0by5weSAgICAgICAgICBSZWN1cnNpdmVseSBmaW5kIHN5bWJvbGljIGxpbmtzIHRvIGEgZ2l2ZW4gcGF0aCBwcmVmaXgKLWZpbmRub2NvZGluZy5weSAgICAgICAgIEZpbmQgc291cmNlIGZpbGVzIHdoaWNoIG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24KLWZpeGNpZC5weSAgICAgICAgICAgICAgIE1hc3NpdmUgaWRlbnRpZmllciBzdWJzdGl0dXRpb24gb24gQyBzb3VyY2UgZmlsZXMKLWZpeGRpdi5weSAgICAgICAgICAgICAgIFRvb2wgdG8gZml4IGRpdmlzaW9uIG9wZXJhdG9ycy4KLWZpeGhlYWRlci5weSAgICAgICAgICAgIEFkZCBzb21lIGNwcCBtYWdpYyB0byBhIEMgaW5jbHVkZSBmaWxlCi1maXhub3RpY2UucHkgICAgICAgICAgICBGaXggdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gc291cmNlIGZpbGVzCi1maXhwcy5weSAgICAgICAgICAgICAgICBGaXggUHl0aG9uIHNjcmlwdHMnIGZpcnN0IGxpbmUgKGlmICMhKQotZnRwbWlycm9yLnB5ICAgICAgICAgICAgRlRQIG1pcnJvciBzY3JpcHQKLWdvb2dsZS5weSAgICAgICAgICAgICAgIE9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCi1ncHJvZjJodG1sLnB5ICAgICAgICAgICBUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwKLWgycHkucHkgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSAjZGVmaW5lJ3MgaW50byBQeXRob24gYXNzaWdubWVudHMKLWhpZ2hsaWdodC5weSAgICAgICAgICAgIFB5dGhvbiBzeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggSFRNTCBvdXRwdXQKLWlkbGUzICAgICAgICAgICAgICAgICAgIE1haW4gcHJvZ3JhbSB0byBzdGFydCBJRExFCi1pZmRlZi5weSAgICAgICAgICAgICAgICBSZW1vdmUgI2lmKG4pZGVmIGdyb3VwcyBmcm9tIEMgc291cmNlcwotbGZjci5weSAgICAgICAgICAgICAgICAgQ2hhbmdlIExGIGxpbmUgZW5kaW5ncyB0byBDUkxGIChVbml4IHRvIFdpbmRvd3MpCi1saW5rdHJlZS5weSAgICAgICAgICAgICBNYWtlIGEgY29weSBvZiBhIHRyZWUgd2l0aCBsaW5rcyB0byBvcmlnaW5hbCBmaWxlcwotbGxsLnB5ICAgICAgICAgICAgICAgICAgRmluZCBhbmQgbGlzdCBzeW1ib2xpYyBsaW5rcyBpbiBjdXJyZW50IGRpcmVjdG9yeQotbWFpbGVyZGFlbW9uLnB5ICAgICAgICAgUGFyc2UgZXJyb3IgbWVzc2FnZXMgZnJvbSBtYWlsZXIgZGFlbW9ucyAoU2pvZXJkJkphY2spCi1tYWtlX2N0eXBlLnB5ICAgICAgICAgICBHZW5lcmF0ZSBjdHlwZS5oIHJlcGxhY2VtZW50IGluIHN0cmluZ29iamVjdC5jCi1tZDVzdW0ucHkgICAgICAgICAgICAgICBQcmludCBNRDUgY2hlY2tzdW1zIG9mIGFyZ3VtZW50IGZpbGVzCi1ta3JlYWwucHkgICAgICAgICAgICAgICBUdXJuIGEgc3ltYm9saWMgbGluayBpbnRvIGEgcmVhbCBmaWxlIG9yIGRpcmVjdG9yeQotbmRpZmYucHkgICAgICAgICAgICAgICAgSW50ZWxsaWdlbnQgZGlmZiBiZXR3ZWVuIHRleHQgZmlsZXMgKFRpbSBQZXRlcnMpCi1ubTJkZWYucHkgICAgICAgICAgICAgICBDcmVhdGUgYSB0ZW1wbGF0ZSBmb3IgUEMvcHl0aG9uX250LmRlZiAoTWFyYyBMZW1idXJnKQotb2JqZ3JhcGgucHkgICAgICAgICAgICAgUHJpbnQgb2JqZWN0IGdyYXBoIGZyb20gbm0gb3V0cHV0IG9uIGEgbGlicmFyeQotcGFyc2VlbnRpdGllcy5weSAgICAgICAgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MIGVudGl0eSBkZWZpbml0aW9ucwotcGF0Y2hjaGVjay5weSAgICAgICAgICAgUGVyZm9ybSBjb21tb24gY2hlY2tzIGFuZCBjbGVhbnVwIGJlZm9yZSBjb21taXR0aW5nCi1wYXRoZml4LnB5ICAgICAgICAgICAgICBDaGFuZ2UgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24gaW50byBzb21ldGhpbmcgZWxzZQotcGRlcHMucHkgICAgICAgICAgICAgICAgUHJpbnQgZGVwZW5kZW5jaWVzIGJldHdlZW4gUHl0aG9uIG1vZHVsZXMKLXBpY2tsZTJkYi5weSAgICAgICAgICAgIExvYWQgYSBwaWNrbGUgZ2VuZXJhdGVkIGJ5IGRiMnBpY2tsZS5weSB0byBhIGRhdGFiYXNlCi1waW5kZW50LnB5ICAgICAgICAgICAgICBJbmRlbnQgUHl0aG9uIGNvZGUsIGdpdmluZyBibG9jay1jbG9zaW5nIGNvbW1lbnRzCi1wdGFncy5weSAgICAgICAgICAgICAgICBDcmVhdGUgdmkgdGFncyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwotcHlkb2MzICAgICAgICAgICAgICAgICAgUHl0aG9uIGRvY3VtZW50YXRpb24gYnJvd3NlcgotcHlzb3VyY2UucHkgICAgICAgICAgICAgRmluZCBQeXRob24gc291cmNlIGZpbGVzCi1yZWRlbW8ucHkgICAgICAgICAgICAgICBCYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZGVtb25zdHJhdGlvbiBmYWNpbGl0eQotcmVpbmRlbnQucHkgICAgICAgICAgICAgQ2hhbmdlIC5weSBmaWxlcyB0byB1c2UgNC1zcGFjZSBpbmRlbnRzCi1yZWluZGVudC1yc3QucHkgICAgICAgICBGaXgtdXAgcmVTdHJ1Y3R1cmVkVGV4dCBmaWxlIHdoaXRlc3BhY2UKLXJncmVwLnB5ICAgICAgICAgICAgICAgIFJldmVyc2UgZ3JlcCB0aHJvdWdoIGEgZmlsZSAodXNlZnVsIGZvciBiaWcgbG9nZmlsZXMpCi1ydW5fdGVzdHMucHkgICAgICAgICAgICBSdW4gdGhlIHRlc3Qgc3VpdGUgd2l0aCBtb3JlIHNlbnNpYmxlIGRlZmF1bHQgb3B0aW9ucwotc2VydmUucHkgICAgICAgICAgICAgICAgU21hbGwgd3NnaXJlZi1iYXNlZCB3ZWIgc2VydmVyLCB1c2VkIGluIG1ha2Ugc2VydmUgaW4gRG9jCi1zdWZmLnB5ICAgICAgICAgICAgICAgICBTb3J0IGEgbGlzdCBvZiBmaWxlcyBieSBzdWZmaXgKLXN2bmVvbC5weSAgICAgICAgICAgICAgIFNldCBzdm46ZW9sLXN0eWxlIG9uIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkKLXRleGkyaHRtbC5weSAgICAgICAgICAgIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCi10cmVlc3luYy5weSAgICAgICAgICAgICBTeW5jaHJvbml6ZSBzb3VyY2UgdHJlZXMgKHZlcnkgaWRpb3N5bmNyYXRpYykKLXVudGFiaWZ5LnB5ICAgICAgICAgICAgIFJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcyBpbiBhcmd1bWVudCBmaWxlcwotd2luX2FkZDJwYXRoLnB5ICAgICAgICAgQWRkIFB5dGhvbiB0byB0aGUgc2VhcmNoIHBhdGggb24gV2luZG93cwotd2hpY2gucHkgICAgICAgICAgICAgICAgRmluZCBhIHByb2dyYW0gaW4gJFBBVEgKKzJ0bzMgICAgICAgICAgICAgICAgICAgICAgTWFpbiBzY3JpcHQgZm9yIHJ1bm5pbmcgdGhlIDJ0bzMgY29udmVyc2lvbiB0b29sCithYml0eXBlLnB5ICAgICAgICAgICAgICAgIENvbnZlcnRzIGEgQyBmaWxlIHRvIHVzZSB0aGUgUEVQIDM4NCB0eXBlIGRlZmluaXRpb24gQVBJCithbmFseXplX2R4cC5weSAgICAgICAgICAgIEFuYWx5emVzIHRoZSByZXN1bHQgb2Ygc3lzLmdldGR4cCgpCitieWV4dC5weSAgICAgICAgICAgICAgICAgIFByaW50IGxpbmVzL3dvcmRzL2NoYXJzIHN0YXRzIG9mIGZpbGVzIGJ5IGV4dGVuc2lvbgorYnl0ZXllYXJzLnB5ICAgICAgICAgICAgICBQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQorY2hlY2tweWMucHkgICAgICAgICAgICAgICBDaGVjayBwcmVzZW5jZSBhbmQgdmFsaWRpdHkgb2YgIi5weWMiIGZpbGVzCitjbGVhbmZ1dHVyZS5weSAgICAgICAgICAgIEZpeCByZWR1bmRhbnQgUHl0aG9uIF9fZnV0dXJlX18gc3RhdGVtZW50cworY29tYmluZXJlZnMucHkgICAgICAgICAgICBBIGhlbHBlciBmb3IgYW5hbHl6aW5nIFBZVEhPTkRVTVBSRUZTIG91dHB1dAorY29weXRpbWUucHkgICAgICAgICAgICAgICBDb3B5IG9uZSBmaWxlJ3MgYXRpbWUgYW5kIG10aW1lIHRvIGFub3RoZXIKK2NybGYucHkgICAgICAgICAgICAgICAgICAgQ2hhbmdlIENSTEYgbGluZSBlbmRpbmdzIHRvIExGIChXaW5kb3dzIHRvIFVuaXgpCitkYjJwaWNrbGUucHkgICAgICAgICAgICAgIER1bXAgYSBkYXRhYmFzZSBmaWxlIHRvIGEgcGlja2xlCitkaWZmLnB5ICAgICAgICAgICAgICAgICAgIFByaW50IGZpbGUgZGlmZnMgaW4gY29udGV4dCwgdW5pZmllZCwgb3IgbmRpZmYgZm9ybWF0cworZHV0cmVlLnB5ICAgICAgICAgICAgICAgICBGb3JtYXQgZHUoMSkgb3V0cHV0IGFzIGEgdHJlZSBzb3J0ZWQgYnkgc2l6ZQorZXB0YWdzLnB5ICAgICAgICAgICAgICAgICBDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcworZmluZGRpdi5weSAgICAgICAgICAgICAgICBBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycworZmluZGxpbmtzdG8ucHkgICAgICAgICAgICBSZWN1cnNpdmVseSBmaW5kIHN5bWJvbGljIGxpbmtzIHRvIGEgZ2l2ZW4gcGF0aCBwcmVmaXgKK2ZpbmRub2NvZGluZy5weSAgICAgICAgICAgRmluZCBzb3VyY2UgZmlsZXMgd2hpY2ggbmVlZCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbgorZmluZF9yZWN1cnNpb25saW1pdC5weSAgICBGaW5kIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCBvbiB0aGlzIG1hY2hpbmUKK2ZpbmQtdW5hbWUucHkgICAgICAgICAgICAgTG9vayBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50cyBpbiB0aGUgc2V0cyBvZiBhbGwgVW5pY29kZSBuYW1lcworZml4Y2lkLnB5ICAgICAgICAgICAgICAgICBNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCitmaXhkaXYucHkgICAgICAgICAgICAgICAgIFRvb2wgdG8gZml4IGRpdmlzaW9uIG9wZXJhdG9ycy4KK2ZpeGhlYWRlci5weSAgICAgICAgICAgICAgQWRkIHNvbWUgY3BwIG1hZ2ljIHRvIGEgQyBpbmNsdWRlIGZpbGUKK2ZpeG5vdGljZS5weSAgICAgICAgICAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcworZml4cHMucHkgICAgICAgICAgICAgICAgICBGaXggUHl0aG9uIHNjcmlwdHMnIGZpcnN0IGxpbmUgKGlmICMhKQorZnRwbWlycm9yLnB5ICAgICAgICAgICAgICBGVFAgbWlycm9yIHNjcmlwdAorZ2V0LXJlbW90ZS1jZXJ0aWZpY2F0ZS5weSBGZXRjaCB0aGUgY2VydGlmaWNhdGUgdGhhdCB0aGUgc2VydmVyKHMpIGFyZSBwcm92aWRpbmcgaW4gUEVNIGZvcm0KK2dvb2dsZS5weSAgICAgICAgICAgICAgICAgT3BlbiBhIHdlYmJyb3dzZXIgd2l0aCBHb29nbGUKK2dwcm9mMmh0bWwucHkgICAgICAgICAgICAgVHJhbnNmb3JtIGdwcm9mKDEpIG91dHB1dCBpbnRvIHVzZWZ1bCBIVE1MCitoMnB5LnB5ICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSAjZGVmaW5lJ3MgaW50byBQeXRob24gYXNzaWdubWVudHMKK2hpZ2hsaWdodC5weSAgICAgICAgICAgICAgUHl0aG9uIHN5bnRheCBoaWdobGlnaHRpbmcgd2l0aCBIVE1MIG91dHB1dAoraWRsZTMgICAgICAgICAgICAgICAgICAgICBNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQoraWZkZWYucHkgICAgICAgICAgICAgICAgICBSZW1vdmUgI2lmKG4pZGVmIGdyb3VwcyBmcm9tIEMgc291cmNlcworaW1wb3J0X2RpYWdub3N0aWNzLnB5ICAgICBNaXNjZWxsYW5lb3VzIGRpYWdub3N0aWNzIGZvciB0aGUgaW1wb3J0IHN5c3RlbQorbGZjci5weSAgICAgICAgICAgICAgICAgICBDaGFuZ2UgTEYgbGluZSBlbmRpbmdzIHRvIENSTEYgKFVuaXggdG8gV2luZG93cykKK2xpbmt0cmVlLnB5ICAgICAgICAgICAgICAgTWFrZSBhIGNvcHkgb2YgYSB0cmVlIHdpdGggbGlua3MgdG8gb3JpZ2luYWwgZmlsZXMKK2xsbC5weSAgICAgICAgICAgICAgICAgICAgRmluZCBhbmQgbGlzdCBzeW1ib2xpYyBsaW5rcyBpbiBjdXJyZW50IGRpcmVjdG9yeQorbWFpbGVyZGFlbW9uLnB5ICAgICAgICAgICBQYXJzZSBlcnJvciBtZXNzYWdlcyBmcm9tIG1haWxlciBkYWVtb25zIChTam9lcmQmSmFjaykKK21ha2VfY3R5cGUucHkgICAgICAgICAgICAgR2VuZXJhdGUgY3R5cGUuaCByZXBsYWNlbWVudCBpbiBzdHJpbmdvYmplY3QuYworbWQ1c3VtLnB5ICAgICAgICAgICAgICAgICBQcmludCBNRDUgY2hlY2tzdW1zIG9mIGFyZ3VtZW50IGZpbGVzCitta3JlYWwucHkgICAgICAgICAgICAgICAgIFR1cm4gYSBzeW1ib2xpYyBsaW5rIGludG8gYSByZWFsIGZpbGUgb3IgZGlyZWN0b3J5CituZGlmZi5weSAgICAgICAgICAgICAgICAgIEludGVsbGlnZW50IGRpZmYgYmV0d2VlbiB0ZXh0IGZpbGVzIChUaW0gUGV0ZXJzKQorbm0yZGVmLnB5ICAgICAgICAgICAgICAgICBDcmVhdGUgYSB0ZW1wbGF0ZSBmb3IgUEMvcHl0aG9uX250LmRlZiAoTWFyYyBMZW1idXJnKQorb2JqZ3JhcGgucHkgICAgICAgICAgICAgICBQcmludCBvYmplY3QgZ3JhcGggZnJvbSBubSBvdXRwdXQgb24gYSBsaWJyYXJ5CitwYXJzZWVudGl0aWVzLnB5ICAgICAgICAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKK3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5ICAgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MNSBlbnRpdHkgZGVmaW5pdGlvbnMKK3BhdGNoY2hlY2sucHkgICAgICAgICAgICAgUGVyZm9ybSBjb21tb24gY2hlY2tzIGFuZCBjbGVhbnVwIGJlZm9yZSBjb21taXR0aW5nCitwYXRoZml4LnB5ICAgICAgICAgICAgICAgIENoYW5nZSAjIS91c3IvbG9jYWwvYmluL3B5dGhvbiBpbnRvIHNvbWV0aGluZyBlbHNlCitwZGVwcy5weSAgICAgICAgICAgICAgICAgIFByaW50IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFB5dGhvbiBtb2R1bGVzCitwaWNrbGUyZGIucHkgICAgICAgICAgICAgIExvYWQgYSBwaWNrbGUgZ2VuZXJhdGVkIGJ5IGRiMnBpY2tsZS5weSB0byBhIGRhdGFiYXNlCitwaW5kZW50LnB5ICAgICAgICAgICAgICAgIEluZGVudCBQeXRob24gY29kZSwgZ2l2aW5nIGJsb2NrLWNsb3NpbmcgY29tbWVudHMKK3B0YWdzLnB5ICAgICAgICAgICAgICAgICAgQ3JlYXRlIHZpIHRhZ3MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKK3B5ZG9jMyAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGRvY3VtZW50YXRpb24gYnJvd3NlcgorcHlzb3VyY2UucHkgICAgICAgICAgICAgICBGaW5kIFB5dGhvbiBzb3VyY2UgZmlsZXMKK3JlaW5kZW50LnB5ICAgICAgICAgICAgICAgQ2hhbmdlIC5weSBmaWxlcyB0byB1c2UgNC1zcGFjZSBpbmRlbnRzCityZWluZGVudC1yc3QucHkgICAgICAgICAgIEZpeC11cCByZVN0cnVjdHVyZWRUZXh0IGZpbGUgd2hpdGVzcGFjZQorcmdyZXAucHkgICAgICAgICAgICAgICAgICBSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQorcnVuX3Rlc3RzLnB5ICAgICAgICAgICAgICBSdW4gdGhlIHRlc3Qgc3VpdGUgd2l0aCBtb3JlIHNlbnNpYmxlIGRlZmF1bHQgb3B0aW9ucworc2VydmUucHkgICAgICAgICAgICAgICAgICBTbWFsbCB3c2dpcmVmLWJhc2VkIHdlYiBzZXJ2ZXIsIHVzZWQgaW4gbWFrZSBzZXJ2ZSBpbiBEb2MKK3N1ZmYucHkgICAgICAgICAgICAgICAgICAgU29ydCBhIGxpc3Qgb2YgZmlsZXMgYnkgc3VmZml4Citzdm5lb2wucHkgICAgICAgICAgICAgICAgIFNldCBzdm46ZW9sLXN0eWxlIG9uIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkKK3RleGkyaHRtbC5weSAgICAgICAgICAgICAgQ29udmVydCBHTlUgdGV4aW5mbyBmaWxlcyBpbnRvIEhUTUwKK3RyZWVzeW5jLnB5ICAgICAgICAgICAgICAgU3luY2hyb25pemUgc291cmNlIHRyZWVzICh2ZXJ5IGlkaW9zeW5jcmF0aWMpCit1bnRhYmlmeS5weSAgICAgICAgICAgICAgIFJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcyBpbiBhcmd1bWVudCBmaWxlcword2hpY2gucHkgICAgICAgICAgICAgICAgICBGaW5kIGEgcHJvZ3JhbSBpbiAkUEFUSAord2luX2FkZDJwYXRoLnB5ICAgICAgICAgICBBZGQgUHl0aG9uIHRvIHRoZSBzZWFyY2ggcGF0aCBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2FuYWx5emVfZHhwLnB5IGIvVG9vbHMvc2NyaXB0cy9hbmFseXplX2R4cC5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5IGIvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQppbmRleCBiNzlmZjM3Li43MzZhNDQxIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgc2VsZi5hZGRzdGF0cygiPGRpcj4iLCAiZGlycyIsIDEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGxpc3QgJXM6ICVzXG4iICUgKGRpciwgZXJyKSkKICAgICAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgInVubGlzdGFibGUiLCAxKQogICAgICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weSBiL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CmluZGV4IDQ5MGIzN2YuLmY1OGMzNDYgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CkBAIC00Myw3ICs0Myw3IEBACiAgICAgZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3QgPSBzdGF0ZnVuYyhmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiY2FuJ3Qgc3RhdCAlcjogJXJcbiIgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgICAgICBzdGF0dXMgPSAxCiAgICAgICAgICAgICBzdCA9ICgpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NoZWNrcGlwLnB5IGIvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzUxMDFlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weQpAQCAtMCwwICsxLDMyIEBACisjL3Vzci9iaW4vZW52IHB5dGhvbjMKKyIiIgorQ2hlY2tzIHRoYXQgdGhlIHZlcnNpb24gb2YgdGhlIHByb2plY3RzIGJ1bmRsZWQgaW4gZW5zdXJlcGlwIGFyZSB0aGUgbGF0ZXN0Cit2ZXJzaW9ucyBhdmFpbGFibGUuCisiIiIKK2ltcG9ydCBlbnN1cmVwaXAKK2ltcG9ydCBqc29uCitpbXBvcnQgdXJsbGliLnJlcXVlc3QKK2ltcG9ydCBzeXMKKworCitkZWYgbWFpbigpOgorICAgIG91dG9mZGF0ZSA9IEZhbHNlCisKKyAgICBmb3IgcHJvamVjdCwgdmVyc2lvbiBpbiBlbnN1cmVwaXAuX1BST0pFQ1RTOgorICAgICAgICBkYXRhID0ganNvbi5sb2Fkcyh1cmxsaWIucmVxdWVzdC51cmxvcGVuKAorICAgICAgICAgICAgImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkve30vanNvbiIuZm9ybWF0KHByb2plY3QpLAorICAgICAgICAgICAgY2FkZWZhdWx0PVRydWUsCisgICAgICAgICkucmVhZCgpLmRlY29kZSgidXRmOCIpKQorICAgICAgICB1cHN0cmVhbV92ZXJzaW9uID0gZGF0YVsiaW5mbyJdWyJ2ZXJzaW9uIl0KKworICAgICAgICBpZiB2ZXJzaW9uICE9IHVwc3RyZWFtX3ZlcnNpb246CisgICAgICAgICAgICBvdXRvZmRhdGUgPSBUcnVlCisgICAgICAgICAgICBwcmludCgiVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHt9IG9uIFB5UEkgaXMge30sIGJ1dCBlbnN1cmVwaXAgIgorICAgICAgICAgICAgICAgICAgImhhcyB7fSIuZm9ybWF0KHByb2plY3QsIHVwc3RyZWFtX3ZlcnNpb24sIHZlcnNpb24pKQorCisgICAgaWYgb3V0b2ZkYXRlOgorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5IGIvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQppbmRleCBkNGZkY2UyLi5iYmFhM2QxIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKQEAgLTUsMTEgKzUsMTEgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogZnJvbSBzdGF0IGltcG9ydCBTVF9NVElNRQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiAKICMgUEVQIDMxNDcgY29tcGF0aWJpbGl0eSAoUFlDIFJlcG9zaXRvcnkgRGlyZWN0b3JpZXMpCi1jYWNoZV9mcm9tX3NvdXJjZSA9IChpbXAuY2FjaGVfZnJvbV9zb3VyY2UgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJykgZWxzZQotICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHBhdGg6IHBhdGggKyAnYycpCitjYWNoZV9mcm9tX3NvdXJjZSA9IChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSBpZiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisgICAgICAgICAgICAgICAgICAgICBlbHNlIGxhbWJkYSBwYXRoOiBwYXRoICsgJ2MnKQogCiAKIGRlZiBtYWluKCk6CkBAIC0xOCwxMyArMTgsMTMgQEAKICAgICAgICAgc2lsZW50ID0gKHN5cy5hcmd2WzFdID09ICctcycpCiAgICAgZWxzZToKICAgICAgICAgdmVyYm9zZSA9IHNpbGVudCA9IEZhbHNlCi0gICAgTUFHSUMgPSBpbXAuZ2V0X21hZ2ljKCkKKyAgICBNQUdJQyA9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUgogICAgIGlmIG5vdCBzaWxlbnQ6CiAgICAgICAgIHByaW50KCdVc2luZyBNQUdJQyB3b3JkJywgcmVwcihNQUdJQykpCiAgICAgZm9yIGRpcm5hbWUgaW4gc3lzLnBhdGg6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBsaXN0IGRpcmVjdG9yeScsIHJlcHIoZGlybmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBub3Qgc2lsZW50OgpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgbmFtZSkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN0ID0gb3Muc3RhdChuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBzdGF0JywgcmVwcihuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weSBiL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKaW5kZXggZTAyMjBiNS4uNzE1NjgzZiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CkBAIC0xMywxMiArMTMsMTIgQEAKICAgICBmaWxlMSwgZmlsZTIgPSBzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0KICAgICB0cnk6CiAgICAgICAgIHN0YXQxID0gb3Muc3RhdChmaWxlMSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZmlsZTEgKyAnOiBjYW5ub3Qgc3RhdFxuJykKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICB0cnk6CiAgICAgICAgIG9zLnV0aW1lKGZpbGUyLCAoc3RhdDFbU1RfQVRJTUVdLCBzdGF0MVtTVF9NVElNRV0pKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShmaWxlMiArICc6IGNhbm5vdCBjaGFuZ2UgdGltZVxuJykKICAgICAgICAgc3lzLmV4aXQoMikKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9kaWZmLnB5IGIvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CmluZGV4IGY5YjE0YmYuLjhiZTUyN2YgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQorKysgYi9Ub29scy9zY3JpcHRzL2RpZmYucHkKQEAgLTM4LDkgKzM4LDkgQEAKIAogICAgIGZyb21kYXRlID0gZmlsZV9tdGltZShmcm9tZmlsZSkKICAgICB0b2RhdGUgPSBmaWxlX210aW1lKHRvZmlsZSkKLSAgICB3aXRoIG9wZW4oZnJvbWZpbGUsICdVJykgYXMgZmY6CisgICAgd2l0aCBvcGVuKGZyb21maWxlKSBhcyBmZjoKICAgICAgICAgZnJvbWxpbmVzID0gZmYucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4odG9maWxlLCAnVScpIGFzIHRmOgorICAgIHdpdGggb3Blbih0b2ZpbGUpIGFzIHRmOgogICAgICAgICB0b2xpbmVzID0gdGYucmVhZGxpbmVzKCkKIAogICAgIGlmIG9wdGlvbnMudToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQppbmRleCBmMjRhNzAyLi5hNzA1ZjU2IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CkBAIC03MCw3ICs3MCw3IEBACiBkZWYgcHJvY2Vzc2RpcihkaXIsIGxpc3RuYW1lcyk6CiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBsaXN0IGRpcmVjdG9yeTogJXNcbiIgJSBkaXIpCiAgICAgICAgIHJldHVybiAxCiAgICAgZmlsZXMgPSBbXQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKaW5kZXggYjRjMDllZi4uYjkyNGYyNyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICBsaW5rdG8gPSBvcy5yZWFkbGluayhuYW1lKQogICAgICAgICAgICAgaWYgcHJvZy5zZWFyY2gobGlua3RvKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBwcmludChuYW1lLCAnLT4nLCBsaW5rdG8pCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weSBiL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5CmluZGV4IDg3ZTJhMDkuLjFlNGM0MjggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgYmFkID0gMAogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihkaXJuYW1lICsgJzogY2Fubm90IGxpc3QgZGlyZWN0b3J5OiAnICsgc3RyKG1zZykgKyAnXG4nKQogICAgICAgICByZXR1cm4gMQogICAgIG5hbWVzLnNvcnQoKQpAQCAtMTc1LDE3ICsxNzUsMTcgQEAKICAgICB0cnk6CiAgICAgICAgIHN0YXRidWYgPSBvcy5zdGF0KGZpbGVuYW1lKQogICAgICAgICBvcy5jaG1vZCh0ZW1wbmFtZSwgc3RhdGJ1ZltTVF9NT0RFXSAmIDBvNzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKHRlbXBuYW1lICsgJzogd2FybmluZzogY2htb2QgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihmaWxlbmFtZSArICc6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKGZpbGVuYW1lICsgJzogcmVuYW1lIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgICAgIHJldHVybiAxCiAgICAgIyBSZXR1cm4gc3VjY2VzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkgYi9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQppbmRleCA5ZThiZTFkLi5hMWI2ODNhIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQorKysgYi9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCdDcmVhdGluZyBsb2NhbCBkaXJlY3RvcnknLCByZXByKGxvY2FsZGlyKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZWRpcihsb2NhbGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCB0byBlc3RhYmxpc2ggbG9jYWwgZGlyZWN0b3J5IiwgcmVwcihsb2NhbGRpcikpCiAgICAgICAgICAgICByZXR1cm4KICAgICBpbmZvZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4obG9jYWxkaXIsICcubWlycm9yaW5mbycpCkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsodGVtcG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIG1vZGVbMF0gPT0gJ2wnOgogICAgICAgICAgICAgaWYgdmVyYm9zZToKQEAgLTIxOCwxMSArMjE4LDExIEBACiAgICAgICAgICAgICAgICAgZnAxLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcyAgICAgICAgICAgICMgSWdub3JlIHRoZSBlcnJvcgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3QgcmVuYW1lICVyIHRvICVyOiAlcyIgJSAodGVtcG5hbWUsIGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaW5mb1tmaWxlbmFtZV0gPSBpbmZvc3R1ZmYKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgIHRyeToKICAgICAgICAgaWYgbm90IGxvY2FsZGlyOiBuYW1lcyA9IG9zLmxpc3RkaXIob3MuY3VyZGlyKQogICAgICAgICBlbHNlOiBuYW1lcyA9IG9zLmxpc3RkaXIobG9jYWxkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBuYW1lcyA9IFtdCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgIGlmIG5hbWVbMF0gPT0gJy4nIG9yIG5hbWUgaW4gaW5mbyBvciBuYW1lIGluIHN1YmRpcnM6CkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKGZ1bGxuYW1lKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbmFtZXMgPSBbXQogICAgICAgICBvayA9IDEKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC0zMjIsMTMgKzMyMiwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Mucm1kaXIoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgbG9jYWwgZGlyZWN0b3J5ICVyOiAlcyIgJSAoZnVsbG5hbWUsIG1zZykpCiAgICAgICAgICAgICByZXR1cm4gMAogICAgIGVsc2U6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbW92ZSBsb2NhbCBmaWxlICVyOiAlcyIgJSAoZnVsbG5hbWUsIG1zZykpCiAgICAgICAgICAgICByZXR1cm4gMAogICAgIHJldHVybiAxCkBAIC0zODYsNyArMzg2LDcgQEAKICAgICBiYWNrdXAgPSBvcy5wYXRoLmpvaW4oZGlyLCBmbmFtZSArICd+JykKICAgICB0cnk6CiAgICAgICAgIG9zLnVubGluayhiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgZnAgPSBvcGVuKHRlbXBuYW1lLCAndycpCiAgICAgZnAud3JpdGUoJ3tcbicpCkBAIC0zOTYsNyArMzk2LDcgQEAKICAgICBmcC5jbG9zZSgpCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5IGIvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQppbmRleCA5ODJmNDgwLi5lODNmMTk4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKQEAgLTMyLDEzICszMiwxMyBAQAogICAgICAgICByZXR1cm4gMQogICAgIHRyeToKICAgICAgICAgb3MubWtkaXIobmV3dHJlZSwgMG83NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50KG5ld3RyZWUgKyAnOiBjYW5ub3QgbWtkaXI6JywgbXNnKQogICAgICAgICByZXR1cm4gMQogICAgIGxpbmtuYW1lID0gb3MucGF0aC5qb2luKG5ld3RyZWUsIGxpbmspCiAgICAgdHJ5OgogICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguam9pbihvcy5wYXJkaXIsIG9sZHRyZWUpLCBsaW5rbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgaWYgbm90IGxpbmtfbWF5X2ZhaWw6CiAgICAgICAgICAgICBwcmludChsaW5rbmFtZSArICc6IGNhbm5vdCBzeW1saW5rOicsIG1zZykKICAgICAgICAgICAgIHJldHVybiAxCkBAIC01MSw3ICs1MSw3IEBACiAgICAgaWYgZGVidWc6IHByaW50KCdsaW5rbmFtZXMnLCAob2xkLCBuZXcsIGxpbmspKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKG9sZCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQob2xkICsgJzogd2FybmluZzogY2Fubm90IGxpc3RkaXI6JywgbXNnKQogICAgICAgICByZXR1cm4KICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkgYi9Ub29scy9zY3JpcHRzL25kaWZmLnB5CmluZGV4IDI0MjIwOTEuLmM2ZDA5YjggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQpAQCAtNjAsNyArNjAsNyBAQAogIyBjb3VsZG4ndCBiZSBvcGVuZWQKIGRlZiBmb3BlbihmbmFtZSk6CiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gb3BlbihmbmFtZSwgJ1UnKQorICAgICAgICByZXR1cm4gb3BlbihmbmFtZSkKICAgICBleGNlcHQgSU9FcnJvciBhcyBkZXRhaWw6CiAgICAgICAgIHJldHVybiBmYWlsKCJjb3VsZG4ndCBvcGVuICIgKyBmbmFtZSArICI6ICIgKyBzdHIoZGV0YWlsKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weSBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzAxMTMyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkKQEAgLTAsMCArMSwxMDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyIiIgorVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MNSBlbnRpdHkgZGVmaW5pdGlvbnMgYXZhaWxhYmxlIGZyb206CisKKyAgICBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL2VudGl0aWVzLmpzb24KKworV3JpdHRlbiBieSBFemlvIE1lbG90dGkgYW5kIEl1bGlpYSBQcm9za3VybmlhLgorCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQganNvbgorZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgorZnJvbSBodG1sLmVudGl0aWVzIGltcG9ydCBodG1sNQorCitlbnRpdGllc191cmwgPSAnaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9lbnRpdGllcy5qc29uJworCitkZWYgZ2V0X2pzb24odXJsKToKKyAgICAiIiJEb3dubG9hZCB0aGUganNvbiBmaWxlIGZyb20gdGhlIHVybCBhbmQgcmV0dXJucyBhIGRlY29kZWQgb2JqZWN0LiIiIgorICAgIHdpdGggdXJsb3Blbih1cmwpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICByZXR1cm4ganNvbi5sb2FkcyhkYXRhKQorCitkZWYgY3JlYXRlX2RpY3QoZW50aXRpZXMpOgorICAgICIiIkNyZWF0ZSB0aGUgaHRtbDUgZGljdCBmcm9tIHRoZSBkZWNvZGVkIGpzb24gb2JqZWN0LiIiIgorICAgIG5ld19odG1sNSA9IHt9CisgICAgZm9yIG5hbWUsIHZhbHVlIGluIGVudGl0aWVzLml0ZW1zKCk6CisgICAgICAgIG5ld19odG1sNVtuYW1lLmxzdHJpcCgnJicpXSA9IHZhbHVlWydjaGFyYWN0ZXJzJ10KKyAgICByZXR1cm4gbmV3X2h0bWw1CisKK2RlZiBjb21wYXJlX2RpY3RzKG9sZCwgbmV3KToKKyAgICAiIiJDb21wYXJlIHRoZSBvbGQgYW5kIG5ldyBkaWN0cyBhbmQgcHJpbnQgdGhlIGRpZmZlcmVuY2VzLiIiIgorICAgIGFkZGVkID0gbmV3LmtleXMoKSAtIG9sZC5rZXlzKCkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIGFkZGVkOicuZm9ybWF0KGxlbihhZGRlZCkpKQorICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoYWRkZWQpOgorICAgICAgICAgICAgcHJpbnQoJyAgeyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG5ld1tuYW1lXSkpCisgICAgcmVtb3ZlZCA9IG9sZC5rZXlzKCkgLSBuZXcua2V5cygpCisgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIHJlbW92ZWQ6Jy5mb3JtYXQobGVuKHJlbW92ZWQpKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHJlbW92ZWQpOgorICAgICAgICAgICAgcHJpbnQoJyAgeyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG9sZFtuYW1lXSkpCisgICAgY2hhbmdlZCA9IHNldCgpCisgICAgZm9yIG5hbWUgaW4gKG9sZC5rZXlzKCkgJiBuZXcua2V5cygpKToKKyAgICAgICAgaWYgb2xkW25hbWVdICE9IG5ld1tuYW1lXToKKyAgICAgICAgICAgIGNoYW5nZWQuYWRkKChuYW1lLCBvbGRbbmFtZV0sIG5ld1tuYW1lXSkpCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIG1vZGlmaWVkOicuZm9ybWF0KGxlbihjaGFuZ2VkKSkpCisgICAgICAgIGZvciBpdGVtIGluIHNvcnRlZChjaGFuZ2VkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0gLT4geyFyfScuZm9ybWF0KCppdGVtKSkKKworZGVmIHdyaXRlX2l0ZW1zKGVudGl0aWVzLCBmaWxlPXN5cy5zdGRvdXQpOgorICAgICIiIldyaXRlIHRoZSBpdGVtcyBvZiB0aGUgZGljdGlvbmFyeSBpbiB0aGUgc3BlY2lmaWVkIGZpbGUuIiIiCisgICAgIyBUaGUga2V5cyBpbiB0aGUgZ2VuZXJhdGVkIGRpY3Rpb25hcnkgc2hvdWxkIGJlIHNvcnRlZAorICAgICMgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIHdheSwgaG93ZXZlciwgd2hlbiB0d28ga2V5cyBhcmUgZXF1YWwsCisgICAgIyB0aGUgdXBwZXJjYXNlIHZlcnNpb24gc2hvdWxkIGNvbWUgZmlyc3Qgc28gdGhhdCB0aGUgcmVzdWx0CisgICAgIyBsb29rcyBsaWtlOiBbJ0FhY3V0ZScsICdhYWN1dGUnLCAnQWFjdXRlOycsICdhYWN1dGU7JywgLi4uXQorICAgICMgVG8gZG8gdGhpcyB3ZSBmaXJzdCBzb3J0IGluIGEgY2FzZS1zZW5zaXRpdmUgd2F5IChzbyBhbGwgdGhlCisgICAgIyB1cHBlcmNhc2UgY2hhcnMgY29tZSBmaXJzdCkgYW5kIHRoZW4gc29ydCB3aXRoIGtleT1zdHIubG93ZXIuCisgICAgIyBTaW5jZSB0aGUgc29ydGluZyBpcyBzdGFibGUgdGhlIHVwcGVyY2FzZSBrZXlzIHdpbGwgZXZlbnR1YWxseQorICAgICMgYmUgYmVmb3JlIHRoZWlyIGVxdWl2YWxlbnQgbG93ZXJjYXNlIHZlcnNpb24uCisgICAga2V5cyA9IHNvcnRlZChlbnRpdGllcy5rZXlzKCkpCisgICAga2V5cyA9IHNvcnRlZChrZXlzLCBrZXk9c3RyLmxvd2VyKQorICAgIHByaW50KCdodG1sNSA9IHsnLCBmaWxlPWZpbGUpCisgICAgZm9yIG5hbWUgaW4ga2V5czoKKyAgICAgICAgcHJpbnQoJyAgICB7IXJ9OiB7IWF9LCcuZm9ybWF0KG5hbWUsIGVudGl0aWVzW25hbWVdKSwgZmlsZT1maWxlKQorICAgIHByaW50KCd9JywgZmlsZT1maWxlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgIyB3aXRob3V0IGFyZ3MgcHJpbnQgYSBkaWZmIGJldHdlZW4gaHRtbC5lbnRpdGllcy5odG1sNSBhbmQgbmV3X2h0bWw1CisgICAgIyB3aXRoIC0tY3JlYXRlIHByaW50IHRoZSBuZXcgaHRtbDUgZGljdAorICAgICMgd2l0aCAtLXBhdGNoIHBhdGNoIHRoZSBMaWIvaHRtbC9lbnRpdGllcy5weSBmaWxlCisgICAgbmV3X2h0bWw1ID0gY3JlYXRlX2RpY3QoZ2V0X2pzb24oZW50aXRpZXNfdXJsKSkKKyAgICBpZiAnLS1jcmVhdGUnIGluIHN5cy5hcmd2OgorICAgICAgICBwcmludCgnIyBtYXAgdGhlIEhUTUw1IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIHRvIHRoZSAnCisgICAgICAgICAgICAgICdlcXVpdmFsZW50IFVuaWNvZGUgY2hhcmFjdGVyKHMpJykKKyAgICAgICAgcHJpbnQoJyMgR2VuZXJhdGVkIGJ5IHt9LiAgRG8gbm90IGVkaXQgbWFudWFsbHkuJy5mb3JtYXQoX19maWxlX18pKQorICAgICAgICB3cml0ZV9pdGVtcyhuZXdfaHRtbDUpCisgICAgZWxpZiAnLS1wYXRjaCcgaW4gc3lzLmFyZ3Y6CisgICAgICAgIGZuYW1lID0gJ0xpYi9odG1sL2VudGl0aWVzLnB5JworICAgICAgICB0ZW1wX2ZuYW1lID0gZm5hbWUgKyAnLnRlbXAnCisgICAgICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZjEsIG9wZW4odGVtcF9mbmFtZSwgJ3cnKSBhcyBmMjoKKyAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjE6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdodG1sNSA9IHsnKToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVfaXRlbXMobmV3X2h0bWw1LCBmaWxlPWYyKQorICAgICAgICAgICAgICAgICAgICBza2lwID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNraXA6CisgICAgICAgICAgICAgICAgICAgICMgc2tpcCB0aGUgb2xkIGl0ZW1zIHVudGlsIHRoZSB9CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnfScpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZjIud3JpdGUobGluZSkKKyAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorICAgICAgICBvcy5yZW5hbWUodGVtcF9mbmFtZSwgZm5hbWUpCisgICAgZWxzZToKKyAgICAgICAgaWYgaHRtbDUgPT0gbmV3X2h0bWw1OgorICAgICAgICAgICAgcHJpbnQoJ1RoZSBjdXJyZW50IGRpY3Rpb25hcnkgaXMgdXBkYXRlZC4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tcGFyZV9kaWN0cyhodG1sNSwgbmV3X2h0bWw1KQorICAgICAgICAgICAgcHJpbnQoJ1J1biAiLi9weXRob24gezB9IC0tcGF0Y2giIHRvIHVwZGF0ZSBMaWIvaHRtbC9lbnRpdGllcy5odG1sICcKKyAgICAgICAgICAgICAgICAgICdvciAiLi9weXRob24gezB9IC0tY3JlYXRlIiB0byBzZWUgdGhlIGdlbmVyYXRlZCAnICdkaWN0aW9uYXJ5LicuZm9ybWF0KF9fZmlsZV9fKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weSBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQppbmRleCAxM2NhODY2Li4yMjQzMmQxIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CkBAIC03Myw3ICs3Myw3IEBACiAgICAgYmFkID0gMAogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJXJcbicgJSAoZGlybmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTEzMSwyNCArMTMxLDI0IEBACiAgICAgICAgIG10aW1lID0gc3RhdGJ1Zi5zdF9tdGltZQogICAgICAgICBhdGltZSA9IHN0YXRidWYuc3RfYXRpbWUKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJXIpXG4nICUgKHRlbXBuYW1lLCBtc2cpKQogICAgICMgVGhlbiBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGZpbGVuYW1lfgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICd+JykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogcmVuYW1lIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4gMQogICAgIGlmIHByZXNlcnZlX3RpbWVzdGFtcHM6CiAgICAgICAgIGlmIGF0aW1lIGFuZCBtdGltZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgKGF0aW1lLCBtdGltZSkpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGVycignJXM6IHJlc2V0IG9mIHRpbWVzdGFtcCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weSBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQppbmRleCAyODcyZGMwLi4zMzMzNDIwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CkBAIC0zNzYsMTMgKzM3NiwxMyBAQAogICAgIGlmIG9zLnBhdGgubGV4aXN0cyhiYWNrdXApOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoYmFja3VwKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbW92ZSBiYWNrdXAgJXIiICUgKGJhY2t1cCwpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICMgZW5kIHRyeQogICAgICMgZW5kIGlmCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHByaW50KCJDYW4ndCByZW5hbWUgJXIgdG8gJXIiICUgKGZpbGVuYW1lLCBiYWNrdXApLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgIyBlbmQgdHJ5CiAjIGVuZCBkZWYgbWFrZV9iYWNrdXAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3IGIvVG9vbHMvc2NyaXB0cy9weWRvY2d1aS5weXcKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSBiL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKaW5kZXggNGE5MTZlYS4uMTg0MjRkZSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQorKysgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CkBAIC01Miw4ICs1Miw4IEBACiByZWN1cnNlID0gRmFsc2UKIGRyeXJ1biA9IEZhbHNlCiBtYWtlYmFja3VwID0gVHJ1ZQorIyBBIHNwZWNpZmllZCBuZXdsaW5lIHRvIGJlIHVzZWQgaW4gdGhlIG91dHB1dCAoc2V0IGJ5IC0tbmV3bGluZSBvcHRpb24pCiBzcGVjX25ld2xpbmUgPSBOb25lCi0iIiJBIHNwZWNpZmllZCBuZXdsaW5lIHRvIGJlIHVzZWQgaW4gdGhlIG91dHB1dCAoc2V0IGJ5IC0tbmV3bGluZSBvcHRpb24pIiIiCiAKIAogZGVmIHVzYWdlKG1zZz1Ob25lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkgYi9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CmluZGV4IGIyNjQ5YzQuLjY1MmQzOTQgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBwcmludCgiY3JlYXRpbmcgc2xhdmUgZGlyZWN0b3J5Iiwgc2xhdmUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKHNsYXZlKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiY2FuJ3QgbWFrZSBzbGF2ZSBkaXJlY3RvcnkiLCBzbGF2ZSwgIjoiLCBtc2cpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CmluZGV4IDRiNjdjMTUuLjg2MWM4M2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQpAQCAtMzksMTEgKzM5LDExIEBACiAgICAgYmFja3VwID0gZmlsZW5hbWUgKyAifiIKICAgICB0cnk6CiAgICAgICAgIG9zLnVubGluayhiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CiAgICAgICAgIGYud3JpdGUobmV3dGV4dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkgYi9Ub29scy9zY3JpcHRzL3doaWNoLnB5CmluZGV4IDRmYzM3YTAuLmRmNTRjZTAgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKKysrIGIvVG9vbHMvc2NyaXB0cy93aGljaC5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBwcm9nKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBub3QgU19JU1JFRyhzdFtTVF9NT0RFXSk6CiAgICAgICAgICAgICAgICAgbXNnKGZpbGVuYW1lICsgJzogbm90IGEgZGlzayBmaWxlJykKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5IGIvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA5MjU5YjQ0Li5jODViZWE1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5CkBAIC0zMCw3ICszMCw3IEBACiAgICAgd2l0aCB3aW5yZWcuQ3JlYXRlS2V5KEhLQ1UsIEVOVikgYXMga2V5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbnZwYXRoID0gd2lucmVnLlF1ZXJ5VmFsdWVFeChrZXksIFBBVEgpWzBdCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgZW52cGF0aCA9IERFRkFVTFQKIAogICAgICAgICBwYXRocyA9IFtlbnZwYXRoXQpkaWZmIC0tZ2l0IGEvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQppbmRleCAxNDJiM2NhLi41YWJjMjVhIDEwMDc1NQotLS0gYS9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQorKysgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQpAQCAtODA4LDcgKzgwOCw3IEBACiBwcm9ncmFtbWVycyByZXBvcnQgc3Vic3RhbnRpYWwgcHJvZHVjdGl2aXR5IGdhaW5zIGFuZCBmZWVsIHRoZSBsYW5ndWFnZQogZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQgb2YgaGlnaGVyIHF1YWxpdHksIG1vcmUgbWFpbnRhaW5hYmxlIGNvZGUuCiAKLVB5dGhvbiBydW5zIG9uIFdpbmRvd3MsIExpbnV4L1VuaXgsIE1hYyBPUyBYLCBPUy8yLCBBbWlnYSwgUGFsbQorUHl0aG9uIHJ1bnMgb24gV2luZG93cywgTGludXgvVW5peCwgTWFjIE9TIFgsIEFtaWdhLCBQYWxtCiBIYW5kaGVsZHMsIGFuZCBOb2tpYSBtb2JpbGUgcGhvbmVzLiBQeXRob24gaGFzIGFsc28gYmVlbiBwb3J0ZWQgdG8gdGhlCiBKYXZhIGFuZCAuTkVUIHZpcnR1YWwgbWFjaGluZXMuCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CmluZGV4IGY1YTFhZjMuLmY0YzdjMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKKysrIGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQpAQCAtMjkwLDI3ICsyOTAsMjcgQEAKIAogY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKIAotICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ18lcykKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LCBlcnJvcnMsIGVuY29kaW5nXyVzKQogCi0gICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nXyVzKQorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIGVycm9ycywgZGVjb2RpbmdfJXMpCiAnJycgJSAoZW5jb2RpbmduYW1lLCBuYW1lLCBzdWZmaXgsIHN1ZmZpeCldCiAgICAgbC5hcHBlbmQoJycnXAogY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgogICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ18lcylbMF0KKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCwgc2VsZi5lcnJvcnMsIGVuY29kaW5nXyVzKVswXQogCiBjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CiAgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nXyVzKVswXScnJyAlCisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzLCBkZWNvZGluZ18lcylbMF0nJycgJQogICAgICAgICAoc3VmZml4LCBzdWZmaXgpKQogCiAgICAgbC5hcHBlbmQoJycnCi1jbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgogICAgIHBhc3MKIAotY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtUmVhZGVyKToKICAgICBwYXNzCiAKICMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQpAQCAtMzQzLDcgKzM0Myw3IEBACiAgICAgaWYgZGVjb2RpbmdfdGFibGVfY29kZToKICAgICAgICAgbC5hcHBlbmQoJycnCiAjIyMgRW5jb2RpbmcgdGFibGUKLWVuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQorZW5jb2RpbmdfdGFibGUgPSBjb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKICcnJykKICAgICBlbHNlOgogICAgICAgICBsLmFwcGVuZCgnJycKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKaW5kZXggYmMzZDBjYi4uMDk0MjUwOCAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKKysrIGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKQEAgLTM3LDcgKzM3LDcgQEAKIFZFUlNJT04gPSAiMy4yIgogCiAjIFRoZSBVbmljb2RlIERhdGFiYXNlCi1VTklEQVRBX1ZFUlNJT04gPSAiNi4xLjAiCitVTklEQVRBX1ZFUlNJT04gPSAiNi4zLjAiCiBVTklDT0RFX0RBVEEgPSAiVW5pY29kZURhdGElcy50eHQiCiBDT01QT1NJVElPTl9FWENMVVNJT05TID0gIkNvbXBvc2l0aW9uRXhjbHVzaW9ucyVzLnR4dCIKIEVBU1RBU0lBTl9XSURUSCA9ICJFYXN0QXNpYW5XaWR0aCVzLnR4dCIKQEAgLTY4LDcgKzY4LDcgQEAKIAogQklESVJFQ1RJT05BTF9OQU1FUyA9IFsgIiIsICJMIiwgIkxSRSIsICJMUk8iLCAiUiIsICJBTCIsICJSTEUiLCAiUkxPIiwKICAgICAiUERGIiwgIkVOIiwgIkVTIiwgIkVUIiwgIkFOIiwgIkNTIiwgIk5TTSIsICJCTiIsICJCIiwgIlMiLCAiV1MiLAotICAgICJPTiIgXQorICAgICJPTiIsICJMUkkiLCAiUkxJIiwgIkZTSSIsICJQREkiIF0KIAogRUFTVEFTSUFOV0lEVEhfTkFNRVMgPSBbICJGIiwgIkgiLCAiVyIsICJOYSIsICJBIiwgIk4iIF0KIApAQCAtNTUyLDcgKzU1Miw3IEBACiAgICAgcHJpbnQoIi8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbCIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuIiwgZmlsZT1mcCkKICAgICBwcmludCgiICovIiwgZmlsZT1mcCkKLSAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKKyAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKICAgICBwcmludCgneycsIGZpbGU9ZnApCiAgICAgcHJpbnQoJyAgICBzd2l0Y2ggKGNoKSB7JywgZmlsZT1mcCkKIApAQCAtNTcwLDcgKzU3MCw3IEBACiAgICAgcHJpbnQoIiAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbCIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqIHR5cGUgJ0InLCAwIG90aGVyd2lzZS4iLCBmaWxlPWZwKQogICAgIHByaW50KCIgKi8iLCBmaWxlPWZwKQotICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKICAgICBwcmludCgneycsIGZpbGU9ZnApCiAgICAgcHJpbnQoJyAgICBzd2l0Y2ggKGNoKSB7JywgZmlsZT1mcCkKICAgICBmb3IgY29kZXBvaW50IGluIHNvcnRlZChsaW5lYnJlYWtzKToKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVCBiL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmI1ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvdW5pY29kZS9weXRob24tbWFwcGluZ3MvQ1AyNzMuVFhUCkBAIC0wLDAgKzEsMjU4IEBACisweDAwCTB4MDAwMAkjTlVMTCAoTlVMKQorMHgwMQkweDAwMDEJI1NUQVJUIE9GIEhFQURJTkcgKFNPSCkKKzB4MDIJMHgwMDAyCSNTVEFSVCBPRiBURVhUIChTVFgpCisweDAzCTB4MDAwMwkjRU5EIE9GIFRFWFQgKEVUWCkKKzB4MDQJMHgwMDlDCSNTVFJJTkcgVEVSTUlOQVRPUiAoU1QpCisweDA1CTB4MDAwOQkjQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKQorMHgwNgkweDAwODYJI1NUQVJUIE9GIFNFTEVDVEVEIEFSRUEgKFNTQSkKKzB4MDcJMHgwMDdGCSNERUxFVEUgKERFTCkKKzB4MDgJMHgwMDk3CSNFTkQgT0YgR1VBUkRFRCBBUkVBIChFUEEpCisweDA5CTB4MDA4RAkjUkVWRVJTRSBMSU5FIEZFRUQgKFJJKQorMHgwQQkweDAwOEUJI1NJTkdMRS1TSElGVCBUV08gKFNTMikKKzB4MEIJMHgwMDBCCSNMSU5FIFRBQlVMQVRJT04gKFZUKQorMHgwQwkweDAwMEMJI0ZPUk0gRkVFRCAoRkYpCisweDBECTB4MDAwRAkjQ0FSUklBR0UgUkVUVVJOIChDUikKKzB4MEUJMHgwMDBFCSNTSElGVCBPVVQgKFNPKQorMHgwRgkweDAwMEYJI1NISUZUIElOIChTSSkKKzB4MTAJMHgwMDEwCSNEQVRBTElOSyBFU0NBUEUgKERMRSkKKzB4MTEJMHgwMDExCSNERVZJQ0UgQ09OVFJPTCBPTkUgKERDMSkKKzB4MTIJMHgwMDEyCSNERVZJQ0UgQ09OVFJPTCBUV08gKERDMikKKzB4MTMJMHgwMDEzCSNERVZJQ0UgQ09OVFJPTCBUSFJFRSAoREMzKQorMHgxNAkweDAwOUQJI09QRVJBVElORyBTWVNURU0gQ09NTUFORCAoT1NDKQorMHgxNQkweDAwODUJI05FWFQgTElORSAoTkVMKQorMHgxNgkweDAwMDgJI0JBQ0tTUEFDRSAoQlMpCisweDE3CTB4MDA4NwkjRU5EIE9GIFNFTEVDVEVEIEFSRUEgKEVTQSkKKzB4MTgJMHgwMDE4CSNDQU5DRUwgKENBTikKKzB4MTkJMHgwMDE5CSNFTkQgT0YgTUVESVVNIChFTSkKKzB4MUEJMHgwMDkyCSNQUklWQVRFIFVTRSBUV08gKFBVMikKKzB4MUIJMHgwMDhGCSNTSU5HTEUtU0hJRlQgVEhSRUUgKFNTMykKKzB4MUMJMHgwMDFDCSNGSUxFIFNFUEFSQVRPUiAoSVM0KQorMHgxRAkweDAwMUQJI0dST1VQIFNFUEFSQVRPUiAoSVMzKQorMHgxRQkweDAwMUUJI1JFQ09SRCBTRVBBUkFUT1IgKElTMikKKzB4MUYJMHgwMDFGCSNVTklUIFNFUEFSQVRPUiAoSVMxKQorMHgyMAkweDAwODAJI1BBRERJTkcgQ0hBUkFDVEVSIChQQUQpCisweDIxCTB4MDA4MQkjSElHSCBPQ1RFVCBQUkVTRVQgKEhPUCkKKzB4MjIJMHgwMDgyCSNCUkVBSyBQRVJNSVRURUQgSEVSRSAoQlBIKQorMHgyMwkweDAwODMJI05PIEJSRUFLIEhFUkUgKE5CSCkKKzB4MjQJMHgwMDg0CSNJTkRFWCAoSU5EKQorMHgyNQkweDAwMEEJI0xJTkUgRkVFRCAoTEYpCisweDI2CTB4MDAxNwkjRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSyAoRVRCKQorMHgyNwkweDAwMUIJI0VTQ0FQRSAoRVNDKQorMHgyOAkweDAwODgJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFNFVCAoSFRTKQorMHgyOQkweDAwODkJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIFdJVEggSlVTVElGSUNBVElPTiAoSFRKKQorMHgyQQkweDAwOEEJI0xJTkUgVEFCVUxBVElPTiBTRVQgKFZUUykKKzB4MkIJMHgwMDhCCSNQQVJUSUFMIExJTkUgRk9SV0FSRCAoUExEKQorMHgyQwkweDAwOEMJI1BBUlRJQUwgTElORSBCQUNLV0FSRCAoUExVKQorMHgyRAkweDAwMDUJI0VOUVVJUlkgKEVOUSkKKzB4MkUJMHgwMDA2CSNBQ0tOT1dMRURHRSAoQUNLKQorMHgyRgkweDAwMDcJI0JFTEwgKEJFTCkKKzB4MzAJMHgwMDkwCSNERVZJQ0UgQ09OVFJPTCBTVFJJTkcgKERDUykKKzB4MzEJMHgwMDkxCSNQUklWQVRFIFVTRSBPTkUgKFBVMSkKKzB4MzIJMHgwMDE2CSNTWU5DSFJPTk9VUyBJRExFIChTWU4pCisweDMzCTB4MDA5MwkjU0VUIFRSQU5TTUlUIFNUQVRFIChTVFMpCisweDM0CTB4MDA5NAkjQ0FOQ0VMIENIQVJBQ1RFUiAoQ0NIKQorMHgzNQkweDAwOTUJI01FU1NBR0UgV0FJVElORyAoTVcpCisweDM2CTB4MDA5NgkjU1RBUlQgT0YgR1VBUkRFRCBBUkVBIChTUEEpCisweDM3CTB4MDAwNAkjRU5EIE9GIFRSQU5TTUlTU0lPTiAoRU9UKQorMHgzOAkweDAwOTgJI1NUQVJUIE9GIFNUUklORyAoU09TKQorMHgzOQkweDAwOTkJI1NJTkdMRSBHUkFQSElDIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTR0NJKQorMHgzQQkweDAwOUEJI1NJTkdMRSBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0NJKQorMHgzQgkweDAwOUIJI0NPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUiAoQ1NJKQorMHgzQwkweDAwMTQJI0RFVklDRSBDT05UUk9MIEZPVVIgKERDNCkKKzB4M0QJMHgwMDE1CSNORUdBVElWRSBBQ0tOT1dMRURHRSAoTkFLKQorMHgzRQkweDAwOUUJI1BSSVZBQ1kgTUVTU0FHRSAoUE0pCisweDNGCTB4MDAxQQkjU1VCU1RJVFVURSAoU1VCKQorMHg0MAkweDAwMjAJI1NQQUNFCisweDQxCTB4MDBBMAkjTk8tQlJFQUsgU1BBQ0UKKzB4NDIJMHgwMEUyCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKzB4NDMJMHgwMDdCCSNMRUZUIENVUkxZIEJSQUNLRVQKKzB4NDQJMHgwMEUwCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisweDQ1CTB4MDBFMQkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQorMHg0NgkweDAwRTMJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKzB4NDcJMHgwMEU1CSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKzB4NDgJMHgwMEU3CSNMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKzB4NDkJMHgwMEYxCSNMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFCisweDRBCTB4MDBDNAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworMHg0QgkweDAwMkUJI0ZVTEwgU1RPUAorMHg0QwkweDAwM0MJI0xFU1MtVEhBTiBTSUdOCisweDRECTB4MDAyOAkjTEVGVCBQQVJFTlRIRVNJUworMHg0RQkweDAwMkIJI1BMVVMgU0lHTgorMHg0RgkweDAwMjEJI0VYQ0xBTUFUSU9OIE1BUksKKzB4NTAJMHgwMDI2CSNBTVBFUlNBTkQKKzB4NTEJMHgwMEU5CSNMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFCisweDUyCTB4MDBFQQkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisweDUzCTB4MDBFQgkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKzB4NTQJMHgwMEU4CSNMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCisweDU1CTB4MDBFRAkjTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQorMHg1NgkweDAwRUUJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorMHg1NwkweDAwRUYJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisweDU4CTB4MDBFQwkjTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorMHg1OQkweDAwN0UJI1RJTERFCisweDVBCTB4MDBEQwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworMHg1QgkweDAwMjQJI0RPTExBUiBTSUdOCisweDVDCTB4MDAyQQkjQVNURVJJU0sKKzB4NUQJMHgwMDI5CSNSSUdIVCBQQVJFTlRIRVNJUworMHg1RQkweDAwM0IJI1NFTUlDT0xPTgorMHg1RgkweDAwNUUJI0NJUkNVTUZMRVggQUNDRU5UCisweDYwCTB4MDAyRAkjSFlQSEVOLU1JTlVTCisweDYxCTB4MDAyRgkjU09MSURVUworMHg2MgkweDAwQzIJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisweDYzCTB4MDA1QgkjTEVGVCBTUVVBUkUgQlJBQ0tFVAorMHg2NAkweDAwQzAJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRQorMHg2NQkweDAwQzEJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorMHg2NgkweDAwQzMJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorMHg2NwkweDAwQzUJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisweDY4CTB4MDBDNwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKzB4NjkJMHgwMEQxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKKzB4NkEJMHgwMEY2CSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworMHg2QgkweDAwMkMJI0NPTU1BCisweDZDCTB4MDAyNQkjUEVSQ0VOVCBTSUdOCisweDZECTB4MDA1RgkjTE9XIExJTkUKKzB4NkUJMHgwMDNFCSNHUkVBVEVSLVRIQU4gU0lHTgorMHg2RgkweDAwM0YJI1FVRVNUSU9OIE1BUksKKzB4NzAJMHgwMEY4CSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorMHg3MQkweDAwQzkJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorMHg3MgkweDAwQ0EJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisweDczCTB4MDBDQgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworMHg3NAkweDAwQzgJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQorMHg3NQkweDAwQ0QJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorMHg3NgkweDAwQ0UJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisweDc3CTB4MDBDRgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworMHg3OAkweDAwQ0MJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRQorMHg3OQkweDAwNjAJI0dSQVZFIEFDQ0VOVAorMHg3QQkweDAwM0EJI0NPTE9OCisweDdCCTB4MDAyMwkjTlVNQkVSIFNJR04KKzB4N0MJMHgwMEE3CSNTRUNUSU9OIFNJR04KKzB4N0QJMHgwMDI3CSNBUE9TVFJPUEhFCisweDdFCTB4MDAzRAkjRVFVQUxTIFNJR04KKzB4N0YJMHgwMDIyCSNRVU9UQVRJT04gTUFSSworMHg4MAkweDAwRDgJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKzB4ODEJMHgwMDYxCSNMQVRJTiBTTUFMTCBMRVRURVIgQQorMHg4MgkweDAwNjIJI0xBVElOIFNNQUxMIExFVFRFUiBCCisweDgzCTB4MDA2MwkjTEFUSU4gU01BTEwgTEVUVEVSIEMKKzB4ODQJMHgwMDY0CSNMQVRJTiBTTUFMTCBMRVRURVIgRAorMHg4NQkweDAwNjUJI0xBVElOIFNNQUxMIExFVFRFUiBFCisweDg2CTB4MDA2NgkjTEFUSU4gU01BTEwgTEVUVEVSIEYKKzB4ODcJMHgwMDY3CSNMQVRJTiBTTUFMTCBMRVRURVIgRworMHg4OAkweDAwNjgJI0xBVElOIFNNQUxMIExFVFRFUiBICisweDg5CTB4MDA2OQkjTEFUSU4gU01BTEwgTEVUVEVSIEkKKzB4OEEJMHgwMEFCCSNMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworMHg4QgkweDAwQkIJI1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworMHg4QwkweDAwRjAJI0xBVElOIFNNQUxMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKzB4OEQJMHgwMEZECSNMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisweDhFCTB4MDBGRQkjTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCisweDhGCTB4MDBCMQkjUExVUy1NSU5VUyBTSUdOCisweDkwCTB4MDBCMAkjREVHUkVFIFNJR04KKzB4OTEJMHgwMDZBCSNMQVRJTiBTTUFMTCBMRVRURVIgSgorMHg5MgkweDAwNkIJI0xBVElOIFNNQUxMIExFVFRFUiBLCisweDkzCTB4MDA2QwkjTEFUSU4gU01BTEwgTEVUVEVSIEwKKzB4OTQJMHgwMDZECSNMQVRJTiBTTUFMTCBMRVRURVIgTQorMHg5NQkweDAwNkUJI0xBVElOIFNNQUxMIExFVFRFUiBOCisweDk2CTB4MDA2RgkjTEFUSU4gU01BTEwgTEVUVEVSIE8KKzB4OTcJMHgwMDcwCSNMQVRJTiBTTUFMTCBMRVRURVIgUAorMHg5OAkweDAwNzEJI0xBVElOIFNNQUxMIExFVFRFUiBRCisweDk5CTB4MDA3MgkjTEFUSU4gU01BTEwgTEVUVEVSIFIKKzB4OUEJMHgwMEFBCSNGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorMHg5QgkweDAwQkEJI01BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorMHg5QwkweDAwRTYJI0xBVElOIFNNQUxMIExFVFRFUiBBRQorMHg5RAkweDAwQjgJI0NFRElMTEEKKzB4OUUJMHgwMEM2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorMHg5RgkweDAwQTQJI0NVUlJFTkNZIFNJR04KKzB4QTAJMHgwMEI1CSNNSUNSTyBTSUdOCisweEExCTB4MDBERgkjTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFMgKEdlcm1hbikKKzB4QTIJMHgwMDczCSNMQVRJTiBTTUFMTCBMRVRURVIgUworMHhBMwkweDAwNzQJI0xBVElOIFNNQUxMIExFVFRFUiBUCisweEE0CTB4MDA3NQkjTEFUSU4gU01BTEwgTEVUVEVSIFUKKzB4QTUJMHgwMDc2CSNMQVRJTiBTTUFMTCBMRVRURVIgVgorMHhBNgkweDAwNzcJI0xBVElOIFNNQUxMIExFVFRFUiBXCisweEE3CTB4MDA3OAkjTEFUSU4gU01BTEwgTEVUVEVSIFgKKzB4QTgJMHgwMDc5CSNMQVRJTiBTTUFMTCBMRVRURVIgWQorMHhBOQkweDAwN0EJI0xBVElOIFNNQUxMIExFVFRFUiBaCisweEFBCTB4MDBBMQkjSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworMHhBQgkweDAwQkYJI0lOVkVSVEVEIFFVRVNUSU9OIE1BUksKKzB4QUMJMHgwMEQwCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKzB4QUQJMHgwMERECSNMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEUKKzB4QUUJMHgwMERFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorMHhBRgkweDAwQUUJI1JFR0lTVEVSRUQgU0lHTgorMHhCMAkweDAwQTIJI0NFTlQgU0lHTgorMHhCMQkweDAwQTMJI1BPVU5EIFNJR04KKzB4QjIJMHgwMEE1CSNZRU4gU0lHTgorMHhCMwkweDAwQjcJI01JRERMRSBET1QKKzB4QjQJMHgwMEE5CSNDT1BZUklHSFQgU0lHTgorMHhCNQkweDAwNDAJI0NPTU1FUkNJQUwgQVQKKzB4QjYJMHgwMEI2CSNQSUxDUk9XIFNJR04KKzB4QjcJMHgwMEJDCSNWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKzB4QjgJMHgwMEJECSNWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYKKzB4QjkJMHgwMEJFCSNWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKzB4QkEJMHgwMEFDCSNOT1QgU0lHTgorMHhCQgkweDAwN0MJI1ZFUlRJQ0FMIExJTkUKKzB4QkMJMHgyMDNFCSNPVkVSTElORQorMHhCRAkweDAwQTgJI0RJQUVSRVNJUworMHhCRQkweDAwQjQJI0FDVVRFIEFDQ0VOVAorMHhCRgkweDAwRDcJI01VTFRJUExJQ0FUSU9OIFNJR04KKzB4QzAJMHgwMEU0CSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworMHhDMQkweDAwNDEJI0xBVElOIENBUElUQUwgTEVUVEVSIEEKKzB4QzIJMHgwMDQyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisweEMzCTB4MDA0MwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworMHhDNAkweDAwNDQJI0xBVElOIENBUElUQUwgTEVUVEVSIEQKKzB4QzUJMHgwMDQ1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisweEM2CTB4MDA0NgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorMHhDNwkweDAwNDcJI0xBVElOIENBUElUQUwgTEVUVEVSIEcKKzB4QzgJMHgwMDQ4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBICisweEM5CTB4MDA0OQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorMHhDQQkweDAwQUQJI1NPRlQgSFlQSEVOCisweENCCTB4MDBGNAkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisweENDCTB4MDBBNgkjQlJPS0VOIEJBUgorMHhDRAkweDAwRjIJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKzB4Q0UJMHgwMEYzCSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFCisweENGCTB4MDBGNQkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQorMHhEMAkweDAwRkMJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisweEQxCTB4MDA0QQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorMHhEMgkweDAwNEIJI0xBVElOIENBUElUQUwgTEVUVEVSIEsKKzB4RDMJMHgwMDRDCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisweEQ0CTB4MDA0RAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorMHhENQkweDAwNEUJI0xBVElOIENBUElUQUwgTEVUVEVSIE4KKzB4RDYJMHgwMDRGCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisweEQ3CTB4MDA1MAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorMHhEOAkweDAwNTEJI0xBVElOIENBUElUQUwgTEVUVEVSIFEKKzB4RDkJMHgwMDUyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisweERBCTB4MDBCOQkjU1VQRVJTQ1JJUFQgT05FCisweERCCTB4MDBGQgkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisweERDCTB4MDA3RAkjUklHSFQgQ1VSTFkgQlJBQ0tFVAorMHhERAkweDAwRjkJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKzB4REUJMHgwMEZBCSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisweERGCTB4MDBGRgkjTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKzB4RTAJMHgwMEQ2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisweEUxCTB4MDBGNwkjRElWSVNJT04gU0lHTgorMHhFMgkweDAwNTMJI0xBVElOIENBUElUQUwgTEVUVEVSIFMKKzB4RTMJMHgwMDU0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisweEU0CTB4MDA1NQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorMHhFNQkweDAwNTYJI0xBVElOIENBUElUQUwgTEVUVEVSIFYKKzB4RTYJMHgwMDU3CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisweEU3CTB4MDA1OAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorMHhFOAkweDAwNTkJI0xBVElOIENBUElUQUwgTEVUVEVSIFkKKzB4RTkJMHgwMDVBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisweEVBCTB4MDBCMgkjU1VQRVJTQ1JJUFQgVFdPCisweEVCCTB4MDBENAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKzB4RUMJMHgwMDVDCSNSRVZFUlNFIFNPTElEVVMKKzB4RUQJMHgwMEQyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKKzB4RUUJMHgwMEQzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEUKKzB4RUYJMHgwMEQ1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKKzB4RjAJMHgwMDMwCSNESUdJVCBaRVJPCisweEYxCTB4MDAzMQkjRElHSVQgT05FCisweEYyCTB4MDAzMgkjRElHSVQgVFdPCisweEYzCTB4MDAzMwkjRElHSVQgVEhSRUUKKzB4RjQJMHgwMDM0CSNESUdJVCBGT1VSCisweEY1CTB4MDAzNQkjRElHSVQgRklWRQorMHhGNgkweDAwMzYJI0RJR0lUIFNJWAorMHhGNwkweDAwMzcJI0RJR0lUIFNFVkVOCisweEY4CTB4MDAzOAkjRElHSVQgRUlHSFQKKzB4RjkJMHgwMDM5CSNESUdJVCBOSU5FCisweEZBCTB4MDBCMwkjU1VQRVJTQ1JJUFQgVEhSRUUKKzB4RkIJMHgwMERCCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorMHhGQwkweDAwNUQJI1JJR0hUIFNRVUFSRSBCUkFDS0VUCisweEZECTB4MDBEOQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCisweEZFCTB4MDBEQQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCisweEZGCTB4MDA5RgkjQVBQTElDQVRJT04gUFJPR1JBTSBDT01NQU5EIChBUEMpCisKKyAJICAJIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDZiZTQxZjUuLjVkNjY2ZWQgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuMy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBweXRob24gMy40LgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy8+LgogIwpAQCAtNTgwLDggKzU4MCw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0ncHl0aG9uJwogUEFDS0FHRV9UQVJOQU1FPSdweXRob24nCi1QQUNLQUdFX1ZFUlNJT049JzMuMycKLVBBQ0tBR0VfU1RSSU5HPSdweXRob24gMy4zJworUEFDS0FHRV9WRVJTSU9OPSczLjQnCitQQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuNCcKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5weXRob24ub3JnLycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTYyMyw4ICs2MjMsMTEgQEAKICNlbmRpZiIKIAogYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCitFTlNVUkVQSVAKIFNSQ0RJUlMKIFRIUkVBREhFQURFUlMKK0xJQlBMCitQWV9FTkFCTEVfU0hBUkVECiBFWFRfU1VGRklYCiBTT0FCSQogTElCQwpAQCAtNzEwLDYgKzcxMyw3IEBACiBNQUNIREVQCiBGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWAogRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYCitGUkFNRVdPUktQWVRIT05XCiBGUkFNRVdPUktBTFRJTlNUQUxMTEFTVAogRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUCiBGUkFNRVdPUktJTlNUQUxMTEFTVApAQCAtNzkwLDYgKzc5NCw3IEBACiBlbmFibGVfc2hhcmVkCiBlbmFibGVfcHJvZmlsaW5nCiB3aXRoX3B5ZGVidWcKK3dpdGhfaGFzaF9hbGdvcml0aG0KIHdpdGhfbGlicwogd2l0aF9zeXN0ZW1fZXhwYXQKIHdpdGhfc3lzdGVtX2ZmaQpAQCAtODExLDYgKzgxNiw3IEBACiB3aXRoX2xpYmMKIGVuYWJsZV9iaWdfZGlnaXRzCiB3aXRoX2NvbXB1dGVkX2dvdG9zCit3aXRoX2Vuc3VyZXBpcAogJwogICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKIGhvc3RfYWxpYXMKQEAgLTEzNjIsNyArMTM2OCw3IEBACiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgogICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCiAgIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuMyB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBweXRob24gMy40IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTE0MjcsNyArMTQzMyw3IEBACiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCiAgIGNhc2UgJGFjX2luaXRfaGVscCBpbgotICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgcHl0aG9uIDMuMzoiOzsKKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjQ6Ijs7CiAgICBlc2FjCiAgIGNhdCA8PFxfQUNFT0YKIApAQCAtMTQ1Myw3ICsxNDU5LDcgQEAKICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQogICAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzPUFSQ0gKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGFyY2hpdGVjdHVyZXMgZm9yIHVuaXZlcnNhbCBidWlsZCAoIjMyLWJpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI2NC1iaXQiLCAiMy13YXkiLCAiaW50ZWwiIG9yICJhbGwiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiwgImludGVsLTMyIiwgb3IgImFsbCIpCiAgIC0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUksKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBhbiBhbHRlcm5hdGUgbmFtZSBvZiB0aGUgZnJhbWV3b3JrIGJ1aWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggLS1lbmFibGUtZnJhbWV3b3JrCkBAIC0xNDYzLDYgKzE0NjksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcgogICAtLXdpdGgtc3VmZml4PS5leGUgICAgICBzZXQgZXhlY3V0YWJsZSBzdWZmaXgKICAgLS13aXRoLXB5ZGVidWcgICAgICAgICAgYnVpbGQgd2l0aCBQeV9ERUJVRyBkZWZpbmVkCisgIC0td2l0aC1oYXNoLWFsZ29yaXRobT1bZm52fHNpcGhhc2gyNF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGhhc2ggYWxnb3JpdGhtCiAgIC0td2l0aC1saWJzPSdsaWIxIC4uLicgIGxpbmsgYWdhaW5zdCBhZGRpdGlvbmFsIGxpYnMKICAgLS13aXRoLXN5c3RlbS1leHBhdCAgICAgYnVpbGQgcHlleHBhdCBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGV4cGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkKQEAgLTE0OTIsNiArMTUwMCw4IEBACiAgIC0td2l0aChvdXQpLWNvbXB1dGVkLWdvdG9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBjb21wdXRlZCBnb3RvcyBpbiBldmFsdWF0aW9uIGxvb3AgKGVuYWJsZWQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBvbiBzdXBwb3J0ZWQgY29tcGlsZXJzKQorICAtLXdpdGgob3V0KS1lbnN1cmVwaXA9Wz11cGdyYWRlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdGFsbCIgb3IgInVwZ3JhZGUiIHVzaW5nIGJ1bmRsZWQgcGlwCiAKIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgogICBNQUNIREVQICAgICBuYW1lIGZvciBtYWNoaW5lLWRlcGVuZGVudCBsaWJyYXJ5IGZpbGVzCkBAIC0xNTcwLDcgKzE1ODAsNyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLXB5dGhvbiBjb25maWd1cmUgMy4zCitweXRob24gY29uZmlndXJlIDMuNAogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5CiAKIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KQEAgLTI0MDksNyArMjQxOSw3IEBACiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjMsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjQsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQApAQCAtMjk3OSw3ICsyOTg5LDcgQEAKIG12IGNvbmZkZWZzLmgubmV3IGNvbmZkZWZzLmgKIAogCi1WRVJTSU9OPTMuMworVkVSU0lPTj0zLjQKIAogIyBWZXJzaW9uIG51bWJlciBvZiBQeXRob24ncyBvd24gc2hhcmVkIGxpYnJhcnkgZmlsZS4KIApAQCAtMzAzNSw3ICszMDQ1LDcgQEAKIAkJIyBMb2NhdGUgdGhlIGJlc3QgdXNhYmxlIFNESywgc2VlIE1hYy9SRUFETUUudHh0IGZvciBtb3JlCiAJCSMgaW5mb3JtYXRpb24KIAkJZW5hYmxldmFsPSJgL3Vzci9iaW4veGNvZGVidWlsZCAtdmVyc2lvbiAtc2RrIG1hY29zeCBQYXRoIDI+L2Rldi9udWxsYCIKLQkJaWYgdGVzdCAteiAiJHtlbmFibGV2YWx9IgorCQlpZiAhICggZWNobyAkZW5hYmxldmFsIHwgZ3JlcCAtRSAnXC5zZGsnIDE+L2Rldi9udWxsICkKIAkJdGhlbgogCQkJZW5hYmxldmFsPS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsKIAkJCWlmIHRlc3QgISAtZCAiJHtlbmFibGV2YWx9IgpAQCAtMzA3OCw2ICszMDg4LDcgQEAKIAogCiAKK0FSQ0hfUlVOXzMyQklUPSIiCiAKICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSBwcmVmZXIgdG8gc2VsZWN0ICczMi1iaXQnIGlmIGF2YWlsYWJsZSwKICMgb3RoZXJ3aXNlIHVzZSAnaW50ZWwnCkBAIC0zMDg2LDcgKzMwOTcsNyBAQAogdGhlbgogCWlmIHRlc3QgLW4gIiR7VU5JVkVSU0FMU0RLfSIKIAl0aGVuCi0JCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgorCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAtTCAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKIAkJdGhlbgogCQkJVU5JVkVSU0FMX0FSQ0hTPSJpbnRlbCIKIAkJZmkKQEAgLTMxMDAsMTkgKzMxMTEsMTggQEAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIHdhcyBnaXZlbi4KIGlmIHRlc3QgIiR7d2l0aF91bml2ZXJzYWxfYXJjaHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICB3aXRodmFsPSR3aXRoX3VuaXZlcnNhbF9hcmNoczsKLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGh2YWwiID4mNQotJGFzX2VjaG8gIiR3aXRodmFsIiA+JjY7IH0KIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgogCi1lbHNlCi0KLSAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY1Ci0kYXNfZWNobyAiJHtVTklWRVJTQUxfQVJDSFN9IiA+JjY7IH0KLQogZmkKIAotCi0KK2lmIHRlc3QgLW4gIiR7VU5JVkVSU0FMU0RLfSIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtVTklWRVJTQUxfQVJDSFN9IiA+JjUKKyRhc19lY2hvICIke1VOSVZFUlNBTF9BUkNIU30iID4mNjsgfQorZWxzZQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKIAogCiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWZyYW1ld29yay1uYW1lIHdhcyBnaXZlbi4KQEAgLTMxNDcsNiArMzE1Nyw3IEBACiAJCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCQlGUkFNRVdPUktQWVRIT05XPQogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSI7IHRoZW4KIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJCWVsc2UKQEAgLTMxNjEsNiArMzE3Miw3IEBACiAJCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0iZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZSAiCiAJCUZSQU1FV09SS0lOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHMiCiAJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzIGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHMiCisJCUZSQU1FV09SS1BZVEhPTlc9ImZyYW1ld29ya3B5dGhvbnciCiAJCUZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYPSIvQXBwbGljYXRpb25zIgogCiAJCWlmIHRlc3QgIngke3ByZWZpeH0iID0gInhOT05FIiA7IHRoZW4KQEAgLTMyMjgsNiArMzI0MCw3IEBACiAJRlJBTUVXT1JLSU5TVEFMTExBU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCUZSQU1FV09SS1BZVEhPTlc9CiAJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgogCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCWVsc2UKQEAgLTMyNTAsNiArMzI2Myw3IEBACiAKIAogCisKICMjQUNfQVJHX1dJVEgoZHlsZCwKICMjICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1keWxkXSwKICMjICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VzZSAoT3BlblN0ZXB8UmhhcHNvZHkpIGR5bmFtaWMgbGlua2VyXSkpCkBAIC00ODAxLDE2ICs0ODE1LDE2IEBACiBmaQogaWYgdGVzdCAiJHByZXNldF9jeHgiICE9ICIkQ1hYIgogdGhlbgotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfToKIAogICBCeSBkZWZhdWx0LCBkaXN0dXRpbHMgd2lsbCBidWlsZCBDKysgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBcIiRDWFhcIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KICAgIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6CiskYXNfZWNobyAiJGFzX21lOgogCiAgIEJ5IGRlZmF1bHQsIGRpc3R1dGlscyB3aWxsIGJ1aWxkIEMrKyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIFwiJENYWFwiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgotICAiID4mMjt9CisgICIgPiY2O30KIGZpCiAKIApAQCAtNTU4NCw2ICs1NTk4LDcgQEAKIAogIyBPdGhlciBwbGF0Zm9ybXMgZm9sbG93CiBpZiB0ZXN0ICRlbmFibGVfc2hhcmVkID0gInllcyI7IHRoZW4KKyAgUFlfRU5BQkxFX1NIQVJFRD0xCiAKICRhc19lY2hvICIjZGVmaW5lIFB5X0VOQUJMRV9TSEFSRUQgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTU2NDEsNiArNTY1Niw3IEBACiAKICAgZXNhYwogZWxzZSAjIHNoYXJlZCBpcyBkaXNhYmxlZAorICBQWV9FTkFCTEVfU0hBUkVEPTAKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCiAgICAgICAgICAgQkxETElCUkFSWT0nJChMSUJSQVJZKScKQEAgLTYzODEsNiArNjM5Nyw0OSBAQAogICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVduby11bnVzZWQtcmVzdWx0IgogICAgIGZpCiAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQuLi4gIiA+JjY7IH0KKyAgICAgYWNfc2F2ZV9jYz0iJENDIgorICAgICBDQz0iJENDIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgaWYgJHthY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz15ZXMKKworZWxzZQorCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgIENDPSIkYWNfc2F2ZV9jYyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmciID4mNjsgfQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcgPSB5ZXMKKyAgICB0aGVuCisgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICBmaQorCiAgICAgIyBpZiB1c2luZyBnY2Mgb24gYWxwaGEsIHVzZSAtbWllZWUgdG8gZ2V0IChuZWFyKSBmdWxsIElFRUUgNzU0CiAgICAgIyBzdXBwb3J0LiAgV2l0aG91dCB0aGlzLCB0cmVhdG1lbnQgb2Ygc3Vibm9ybWFscyBkb2Vzbid0IGZvbGxvdwogICAgICMgdGhlIHN0YW5kYXJkLgpAQCAtNjM5NCwxMTMgKzY0NTMsMTI0IEBACiAJU0NPX1NWKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW00ODYgLURTQ081IgogCSAgICA7OwotCSMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KLQlEYXJ3aW4qKQotCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAotCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLSAgICAgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwotCSAgICB0aGVuCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQiID4mNQorCisgICAgIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPworICAgIERhcndpbiopCisgICAgICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCisgICAgICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgorICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZC4uLiAiID4mNjsgfQotCQljYXNlICIke1VOSVZFUlNBTFNES30iIGluCi0JCSovTWFjT1NYMTAuNHUuc2RrKQotCQkJIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlCi0JCQkjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKLQkJCSMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKLQkJCUNDPWdjYy00LjAKLQkJCUNQUD1jcHAtNC4wCi0JCQk7OwotCQllc2FjCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorICAgICAgICAgICAgY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgorICAgICAgICAgICAgKi9NYWNPU1gxMC40dS5zZGspCisgICAgICAgICAgICAgICAgIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5CisgICAgICAgICAgICAgICAgIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgorICAgICAgICAgICAgICAgIENDPWdjYy00LjAKKyAgICAgICAgICAgICAgICBDUFA9Y3BwLTQuMAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKICRhc19lY2hvICIkQ0MiID4mNjsgfQotCSAgICBmaQorICAgICAgICBmaQogCisgICAgICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAzMi1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDY0LWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBhbGwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbC0zMikKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAzLXdheSkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheSIgIiRMSU5FTk8iIDUKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCiAKLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgIENGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCisgICAgICAgICAgICBMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCisgICAgICAgICAgICBpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIENQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAjIENhbGN1bGF0ZSBhbiBhcHByb3ByaWF0ZSBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZDoKKyAgICAgICAgIyBUaGUgZGVwbG95bWVudCB0YXJnZXQgdmFsdWUgaXMgdXNlZCBleHBsaWNpdGx5IHRvIGVuYWJsZSBjZXJ0YWluCisgICAgICAgICMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgKHN1Y2ggYXMgYnVpbHRpbiBsaWJlZGl0IHN1cHBvcnQgZm9yIHJlYWRsaW5lKQorICAgICAgICAjIHRocm91Z2ggdGhlIHVzZSBvZiBBcHBsZSdzIEF2YWlsYWJpbGl5IE1hY3JvcyBhbmQgaXMgdXNlZCBhcyBhCisgICAgICAgICMgY29tcG9uZW50IG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgZGlzdHV0aWxzLmdldF9wbGF0Zm9ybSgpLgorICAgICAgICAjCisgICAgICAgICMgVXNlIHRoZSB2YWx1ZSBmcm9tOgorICAgICAgICAjIDEuIHRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc3BlY2lmaWVkCisgICAgICAgICMgMi4gdGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiBvZiB0aGUgYnVpbGQgbWFjaGluZSBpZiA+PSAxMC42CisgICAgICAgICMgMy4gSWYgcnVubmluZyBvbiBPUyBYIDEwLjMgdGhyb3VnaCAxMC41LCB1c2UgdGhlIGxlZ2FjeSB0ZXN0cworICAgICAgICAjICAgICAgIGJlbG93IHRvIHBpY2sgZWl0aGVyIDEwLjMsIDEwLjQsIG9yIDEwLjUgYXMgdGhlIHRhcmdldC4KKyAgICAgICAgIyA0LiBJZiB3ZSBhcmUgcnVubmluZyBvbiBPUyBYIDEwLjIgb3IgZWFybGllciwgZ29vZCBsdWNrIQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlLi4uICIgPiY2OyB9CisgICAgICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLlswLTldKlwpLiovXDEvJ2AKKyAgICAgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKKyAgICAgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGN1cl90YXJnZXQ9MTAuMworICAgICAgICAgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9CisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgICAgICBhbGx8My13YXl8aW50ZWx8NjQtYml0KQorICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZmlyc3Qgc3VwcG9ydGVkIGluIDEwLjUKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0nMTAuNScKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiIKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICMgMTAuNCB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gc3VwcG9ydCBJbnRlbCBhcmNocworICAgICAgICAgICAgICAgICAgICBjdXJfdGFyZ2V0PSIxMC40IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19CiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjUKKyRhc19lY2hvICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjY7IH0KIAotCQkgZWxzZQotCSAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1Ci0KLQkJIGZpCi0KLQotCQlDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgotCQl0aGVuCi0JCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQkJTERGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCi0JCWZpCi0JICAgIGZpCi0KLQkgICAgIyBDYWxjdWxhdGUgdGhlIHJpZ2h0IGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkLgotCSAgICAjCi0JICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLlswLTldKlwpLiovXDEvJ2AKLQkgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKLQkgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42Ci0JICAgIHRoZW4KLQkJICAgIGN1cl90YXJnZXQ9MTAuMwotCQkgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9OyB0aGVuCi0JCQkgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxfQVJDSFN9IiA9ICJhbGwiOyB0aGVuCi0JCQkJICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZm9yIGEKLQkJCQkgICAgIyA0LXdheSB1bml2ZXJzYWwgYnVpbGQgaXMgT1NYIDEwLjUsCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlCi0JCQkJICAgICMgNC13YXkgYnVpbGRzIG1ha2Ugc2Vuc2UuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiMy13YXkiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiaW50ZWwiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiNjQtYml0IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCQkJICAgIGZpCi0JCSAgICBlbHNlCi0JCQkgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiI7IHRoZW4KLQkJCQkgICAgIyBPbiBJbnRlbCBtYWNzIGRlZmF1bHQgdG8gYSBkZXBsb3ltZW50Ci0JCQkJICAgICMgdGFyZ2V0IG9mIDEwLjQsIHRoYXQncyB0aGUgZmlyc3QgT1NYCi0JCQkJICAgICMgcmVsZWFzZSB3aXRoIEludGVsIHN1cHBvcnQuCi0JCQkJICAgIGN1cl90YXJnZXQ9IjEwLjQiCi0JCQkgICAgZmkKLQkJICAgIGZpCi0JICAgIGZpCi0JICAgIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtJHtjdXJfdGFyZ2V0fX0KLQotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCi0JICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKLQkgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCi0JICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KLQkgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKLQkgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotCSAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCi0KLQkgICAgOzsKKyAgICAgICAgIyBlbmQgb2YgRGFyd2luKiB0ZXN0cworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogCkBAIC02NTI3LDQ0ICs2NTk3LDYgQEAKIAlCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAkYWNfYXJjaF9mbGFncyIKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fLi4uICIgPiY2OyB9Ci0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAgIHZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpOwotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUgMSIgPj5jb25mZGVmcy5oCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi1lbHNlCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtNjkzNiw3ICs2OTY4LDggQEAKIHN5cy9zdGF0Lmggc3lzL3N5c2NhbGwuaCBzeXMvc3lzX2RvbWFpbi5oIHN5cy90ZXJtaW8uaCBzeXMvdGltZS5oIFwKIHN5cy90aW1lcy5oIHN5cy90eXBlcy5oIHN5cy91aW8uaCBzeXMvdW4uaCBzeXMvdXRzbmFtZS5oIHN5cy93YWl0LmggcHR5LmggXAogbGlidXRpbC5oIHN5cy9yZXNvdXJjZS5oIG5ldHBhY2tldC9wYWNrZXQuaCBzeXNleGl0cy5oIGJsdWV0b290aC5oIFwKLWJsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmgKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmggZW5kaWFuLmggXAorc3lzL2VuZGlhbi5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgpAQCAtNzIyOSw3ICs3MjYyLDcgQEAKIAogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1mb3IgYWNfaGVhZGVyIGluIGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaAorZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgpAQCAtNzMxMCw2ICs3MzQzLDQzIEBACiAKIGZpCiAKKyMgYnl0ZSBzd2FwcGluZworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGU2NHRvaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGU2NHRvaC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWZkZWYgSEFWRV9FTkRJQU5fSAorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1NZU19FTkRJQU5fSCkKKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgIGxlNjR0b2goMSkKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hhc19sZTY0dG9oPXllcworZWxzZQorICBhY19jdl9oYXNfbGU2NHRvaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhc19sZTY0dG9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGFzX2xlNjR0b2giID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X2hhc19sZTY0dG9oIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSFRPTEU2NCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogIyBFbmFibGluZyBMRlMgb24gU29sYXJpcyAoMi42IHRvIDkpIHdpdGggZ2NjIDIuOTUgdHJpZ2dlcnMgYSBidWcgaW4KICMgdGhlIHN5c3RlbSBoZWFkZXJzOiBJZiBfWE9QRU5fU09VUkNFIGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBhcmUKICMgZGVmaW5lZCwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHByYWdtYSByZWRlZmluZV9leHRuYW1lLApAQCAtODI3Niw3ICs4MzQ2LDYgQEAKIGVzYWMKIAogCi1BUkNIX1JVTl8zMkJJVD0iIgogCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vWzAxNTY3XVwuLiopCkBAIC04MzQ4LDE0ICs4NDE3LDEyIEBACiAgICAgCQk7OwogICAgIAllc2FjCiAKLQkjQVJDSF9SVU5fMzJCSVQ9InRydWUiCiAgICAgZmkKIAogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQiIC1sU3lzdGVtIC1sU3lzdGVtU3R1YnMgLWFyY2hfb25seSAke01BQ09TWF9ERUZBVUxUX0FSQ0h9IgogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1pbnN0YWxsX25hbWUgJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgLWN1cnJlbnRfdmVyc2lvbiAkKFZFUlNJT04pJzs7CiBlc2FjCi0KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yayIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS1lbmFibGUtZnJhbWV3b3JrLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKQEAgLTg0ODMsOSArODU1MCw2IEBACiAKIAkJaWYgdGVzdCAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gJz4nIDEwLjIKIAkJdGhlbgotCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlmaQogCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCkBAIC04NjEzLDYgKzg2NzcsMTIgQEAKIAkjIC11IGxpYnN5c19zIHB1bGxzIGluIGFsbCBzeW1ib2xzIGluIGxpYnN5cwogCURhcndpbi8qKQogCQlMSU5LRk9SU0hBUkVEPSIkZXh0cmFfdW5kZWZzIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCisKKwkJIyBJc3N1ZSAjMTgwNzU6IHRoZSBkZWZhdWx0IG1heGltdW0gc3RhY2sgc2l6ZSAoOE1CeXRlcykgaXMgdG9vCisJCSMgc21hbGwgZm9yIHRoZSBkZWZhdWx0IHJlY3Vyc2lvbiBsaW1pdC4gSW5jcmVhc2UgdGhlIHN0YWNrIHNpemUKKwkJIyB0byBlbnN1cmUgdGhhdCB0ZXN0cyBkb24ndCBjcmFzaAorCQlMSU5LRk9SU0hBUkVEPSItV2wsLXN0YWNrX3NpemUsMTAwMDAwMCAkTElOS0ZPUlNIQVJFRCIKKwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKIAkJdGhlbgogCQkJTElOS0ZPUlNIQVJFRD0iJExJTktGT1JTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCkBAIC04OTY3LDYgKzkwMzcsNzkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhbGlnbmVkX3JlcXVpcmVkPXllcworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFsaWduZWRfcmVxdWlyZWQ9bm8KK2Vsc2UKKyAgYWxpZ25lZF9yZXF1aXJlZD15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2lmIHRlc3QgIiRhbGlnbmVkX3JlcXVpcmVkIiA9IHllcyA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTElHTkVEX1JFUVVJUkVEIDEiID4+Y29uZmRlZnMuaAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbGlnbmVkX3JlcXVpcmVkIiA+JjUKKyRhc19lY2hvICIkYWxpZ25lZF9yZXF1aXJlZCIgPiY2OyB9CisKKworIyBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3IGhhc2ggYWxnb3JpdGhtCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtaGFzaC1hbGdvcml0aG0uLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1oYXNoX2FsZ29yaXRobSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaGFzaF9hbGdvcml0aG0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2hhc2hfYWxnb3JpdGhtOworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICIkd2l0aHZhbCIgPiY2OyB9CitjYXNlICIkd2l0aHZhbCIgaW4KKyAgICBzaXBoYXNoMjQpCisgICAgICAgICRhc19lY2hvICIjZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDs7CisgICAgZm52KQorICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBQeV9IQVNIX0FMR09SSVRITSAyIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA7OworICAgICopCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bmtub3duIGhhc2ggYWxnb3JpdGhtICckd2l0aHZhbCciICIkTElORU5PIiA1CisgICAgICAgIDs7Citlc2FjCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gImRlZmF1bHQiID4mNjsgfQorZmkKKworCiAjIE1vc3QgU1ZSNCBwbGF0Zm9ybXMgKGUuZy4gU29sYXJpcykgbmVlZCAtbHNvY2tldCBhbmQgLWxuc2wuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRfb3BlbiBpbiAtbG5zbC4uLiAiID4mNjsgfQpAQCAtMTAzMDgsNyArMTA0NTEsNyBAQAogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIGZvciBhY19mdW5jIGluIGFsYXJtIGFjY2VwdDQgc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCi0gY2xvY2sgY29uZnN0ciBjdGVybWlkIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKKyBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZHVwMyBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCiAgZmV4ZWN2ZSBmZG9wZW5kaXIgZm9yayBmcGF0aGNvbmYgZnN0YXRhdCBmdGltZSBmdHJ1bmNhdGUgZnV0aW1lc2F0IFwKICBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBcCiAgZ2V0Z3JvdXBsaXN0IGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKQEAgLTEwMzI4LDcgKzEwNDcxLDcgQEAKICBzaWd0aW1lZHdhaXQgc2lnd2FpdCBzaWd3YWl0aW5mbyBzbnByaW50ZiBzdHJmdGltZSBzdHJsY3B5IHN5bWxpbmthdCBzeW5jIFwKICBzeXNjb25mIHRjZ2V0cGdycCB0Y3NldHBncnAgdGVtcG5hbSB0aW1lZ20gdGltZXMgdG1wZmlsZSB0bXBuYW0gdG1wbmFtX3IgXAogIHRydW5jYXRlIHVuYW1lIHVubGlua2F0IHVuc2V0ZW52IHV0aW1lbnNhdCB1dGltZXMgd2FpdGlkIHdhaXRwaWQgd2FpdDMgd2FpdDQgXAotIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3cml0ZXYgX2dldHB0eQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5CiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgpAQCAtMTA1ODEsNiArMTA3MjQsMzUgQEAKIAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHJsaW1pdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHJsaW1pdC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworaW50CittYWluICgpCit7Cit2b2lkICp4PXBybGltaXQKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BSTElNSVQgMSIgPj5jb25mZGVmcy5oCisKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTExNDEyLDE5ICsxMTU4NCw2IEBACiAKIGZpCiAKLWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGN3ZCIgImFjX2N2X2Z1bmNfZ2V0Y3dkIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGN3ZCIgPSB4eWVzOyB0aGVuIDoKLSAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRDV0QgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgZ2V0Y3dkLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXRjd2QuJGFjX29iamV4dCIKLSA7OwotZXNhYwotCi1maQotCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJkdXAiICJhY19jdl9mdW5jX3N0cmR1cCIKIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJkdXAiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSRFVQIDEiID4+Y29uZmRlZnMuaApAQCAtMTM3NzgsNiArMTM5MzcsMTAgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTERWRVJTSU9OIiA+JjUKICRhc19lY2hvICIkTERWRVJTSU9OIiA+JjY7IH0KIAorCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCisKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0IiA+JjUKQEAgLTE1MTg1LDggKzE1MzQ4LDMzIEBACiAgICAgZXNhYwogZmkKIAorIyBlbnN1cmVwaXAgb3B0aW9uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlbnN1cmVwaXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVuc3VyZXBpcC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVuc3VyZXBpcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW5zdXJlcGlwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnN1cmVwaXA7CitlbHNlCisgIHdpdGhfZW5zdXJlcGlwPXVwZ3JhZGUKK2ZpCisKK2Nhc2UgJHdpdGhfZW5zdXJlcGlwIGluICMoCisgIHllc3x1cGdyYWRlKSA6CisgICAgRU5TVVJFUElQPXVwZ3JhZGUgOzsgIygKKyAgaW5zdGFsbCkgOgorICAgIEVOU1VSRVBJUD1pbnN0YWxsIDs7ICMoCisgIG5vKSA6CisgICAgRU5TVVJFUElQPW5vIDs7ICMoCisgICopIDoKKyAgICBhc19mbl9lcnJvciAkPyAiLS13aXRoLWVuc3VyZXBpcD11cGdyYWRlfGluc3RhbGx8bm8iICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVOU1VSRVBJUCIgPiY1CiskYXNfZWNobyAiJEVOU1VSRVBJUCIgPiY2OyB9CisKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLWFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCIKIAogYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1vZHVsZXMvbGRfc29fYWl4IgogCkBAIC0xNTY5Nyw3ICsxNTg4NSw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE1NzU5LDcgKzE1OTQ3LDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1weXRob24gY29uZmlnLnN0YXR1cyAzLjMKK3B5dGhvbiBjb25maWcuc3RhdHVzIDMuNAogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIApAQCAtMTU4OTAsNiArMTYwNzgsNyBAQAogICAgICJNYWtlZmlsZS5wcmUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUucHJlIiA7OwogICAgICJNb2R1bGVzL1NldHVwLmNvbmZpZyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL1NldHVwLmNvbmZpZyIgOzsKICAgICAiTWlzYy9weXRob24ucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24ucGMiIDs7CisgICAgIk1pc2MvcHl0aG9uLWNvbmZpZy5zaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNaXNjL3B5dGhvbi1jb25maWcuc2giIDs7CiAgICAgIk1vZHVsZXMvbGRfc29fYWl4IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1vZHVsZXMvbGRfc29fYWl4IiA7OwogCiAgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDZhNjRiZmYuLjE0YjNhZWYgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTMsNyArMyw3IEBACiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogIyBTZXQgVkVSU0lPTiBzbyB3ZSBvbmx5IG5lZWQgdG8gZWRpdCBpbiBvbmUgcGxhY2UgKGkuZS4sIGhlcmUpCi1tNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuMykKK200X2RlZmluZShQWVRIT05fVkVSU0lPTiwgMy40KQogCiBBQ19QUkVSRVEoMi42NSkKIApAQCAtMTUyLDcgKzE1Miw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTE4OSw2ICsxODksNyBAQAogQUNfU1VCU1QoVU5JVkVSU0FMU0RLKQogCiBBQ19TVUJTVChBUkNIX1JVTl8zMkJJVCkKK0FSQ0hfUlVOXzMyQklUPSIiCiAKICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSBwcmVmZXIgdG8gc2VsZWN0ICczMi1iaXQnIGlmIGF2YWlsYWJsZSwKICMgb3RoZXJ3aXNlIHVzZSAnaW50ZWwnCkBAIC0xOTcsNyArMTk4LDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0yMDcsMTYgKzIwOCwxNyBAQAogQUNfU1VCU1QoTElQT18zMkJJVF9GTEFHUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocykKIEFDX0FSR19XSVRIKHVuaXZlcnNhbC1hcmNocywKLSAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIildKSwKKyAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiwgImludGVsLTMyIiwgb3IgImFsbCIpXSksCiBbCi0JQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgogXSwKLVsKLSAJQUNfTVNHX1JFU1VMVCgke1VOSVZFUlNBTF9BUkNIU30pCi1dKQotCi0KK1tdKQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQogCiBBQ19BUkdfV0lUSChmcmFtZXdvcmstbmFtZSwKICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUktdLApAQCAtMjQ4LDYgKzI1MCw3IEBACiAJCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCQlGUkFNRVdPUktQWVRIT05XPQogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSI7IHRoZW4KIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJCWVsc2UKQEAgLTI2Miw2ICsyNjUsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjMsNiArMzI3LDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzQwLDYgKzM0NSw3IEBACiBBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMTEFTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExGSVJTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExMQVNUKQorQUNfU1VCU1QoRlJBTUVXT1JLUFlUSE9OVykKIEFDX1NVQlNUKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkKIEFDX1NVQlNUKEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYKQogCkBAIC02OTEsNyArNjk3LDcgQEAKIGZpCiBpZiB0ZXN0ICIkcHJlc2V0X2N4eCIgIT0gIiRDWFgiCiB0aGVuCi0gICAgICAgIEFDX01TR19XQVJOKFsKKyAgICAgICAgQUNfTVNHX05PVElDRShbCiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggIiRDWFgiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgpAQCAtOTE3LDYgKzkyMyw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogICBBQ19ERUZJTkUoUHlfRU5BQkxFX1NIQVJFRCwgMSwgW0RlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuXSkKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCkBAIC05NzIsNiArOTc5LDcgQEAKIAogICBlc2FjCiBlbHNlICMgc2hhcmVkIGlzIGRpc2FibGVkCisgIFBZX0VOQUJMRV9TSEFSRUQ9MAogICBjYXNlICRhY19zeXNfc3lzdGVtIGluCiAgICAgQ1lHV0lOKikKICAgICAgICAgICBCTERMSUJSQVJZPSckKExJQlJBUlkpJwpAQCAtMTE4Miw2ICsxMTkwLDI4IEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV25vLXVudXNlZC1yZXN1bHQiCiAgICAgZmkKIAorICAgIEFDX01TR19DSEVDS0lORyhmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCisgICAgIGFjX3NhdmVfY2M9IiRDQyIKKyAgICAgQ0M9IiRDQyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZywKKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgIFsKKwkgICBBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSkKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPXllcworCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9bm8KKwkgXSkpCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgIGZpCisKICAgICAjIGlmIHVzaW5nIGdjYyBvbiBhbHBoYSwgdXNlIC1taWVlZSB0byBnZXQgKG5lYXIpIGZ1bGwgSUVFRSA3NTQKICAgICAjIHN1cHBvcnQuICBXaXRob3V0IHRoaXMsIHRyZWF0bWVudCBvZiBzdWJub3JtYWxzIGRvZXNuJ3QgZm9sbG93CiAgICAgIyB0aGUgc3RhbmRhcmQuCkBAIC0xMTk1LDExMSArMTIyNSwxMjAgQEAKIAlTQ09fU1YqKQogCSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtbTQ4NiAtRFNDTzUiCiAJICAgIDs7Ci0JIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPwotCURhcndpbiopCi0JICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCi0JICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotICAgICAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCi0JICAgIHRoZW4KLQkJQUNfTVNHX0NIRUNLSU5HKHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkKQotCQljYXNlICIke1VOSVZFUlNBTFNES30iIGluCi0JCSovTWFjT1NYMTAuNHUuc2RrKQotCQkJIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlIAotCQkJIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5Ci0JCQkjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42Ci0JCQlDQz1nY2MtNC4wCi0JCQlDUFA9Y3BwLTQuMAotCQkJOzsKLQkJZXNhYwotCQlBQ19NU0dfUkVTVUxUKCRDQykKLQkgICAgZmkKIAorICAgICMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KKyAgICBEYXJ3aW4qKQorICAgICAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAorICAgICAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KKyAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKKyAgICAgICAgICAgIGNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KKyAgICAgICAgICAgICovTWFjT1NYMTAuNHUuc2RrKQorICAgICAgICAgICAgICAgICMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKKyAgICAgICAgICAgICAgICBDQz1nY2MtNC4wCisgICAgICAgICAgICAgICAgQ1BQPWNwcC00LjAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgkQ0MpCisgICAgICAgIGZpCiAKLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSIKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgIDMyLWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgNjQtYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGFsbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsLTMyKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDMtd2F5KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYwogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICBDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorICAgICAgICAgICAgTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgorICAgICAgICAgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImludGVsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgIyBDYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQ6CisgICAgICAgICMgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IHZhbHVlIGlzIHVzZWQgZXhwbGljaXRseSB0byBlbmFibGUgY2VydGFpbgorICAgICAgICAjIGZlYXR1cmVzIGFyZSBlbmFibGVkIChzdWNoIGFzIGJ1aWx0aW4gbGliZWRpdCBzdXBwb3J0IGZvciByZWFkbGluZSkKKyAgICAgICAgIyB0aHJvdWdoIHRoZSB1c2Ugb2YgQXBwbGUncyBBdmFpbGFiaWxpeSBNYWNyb3MgYW5kIGlzIHVzZWQgYXMgYQorICAgICAgICAjIGNvbXBvbmVudCBvZiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGRpc3R1dGlscy5nZXRfcGxhdGZvcm0oKS4KKyAgICAgICAgIworICAgICAgICAjIFVzZSB0aGUgdmFsdWUgZnJvbToKKyAgICAgICAgIyAxLiB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICAjIDIuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gb2YgdGhlIGJ1aWxkIG1hY2hpbmUgaWYgPj0gMTAuNgorICAgICAgICAjIDMuIElmIHJ1bm5pbmcgb24gT1MgWCAxMC4zIHRocm91Z2ggMTAuNSwgdXNlIHRoZSBsZWdhY3kgdGVzdHMKKyAgICAgICAgIyAgICAgICBiZWxvdyB0byBwaWNrIGVpdGhlciAxMC4zLCAxMC40LCBvciAxMC41IGFzIHRoZSB0YXJnZXQuCisgICAgICAgICMgNC4gSWYgd2UgYXJlIHJ1bm5pbmcgb24gT1MgWCAxMC4yIG9yIGVhcmxpZXIsIGdvb2QgbHVjayEKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMy13YXkiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlKQorICAgICAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bWzAtOV1dKlwpLiovXDEvJ2AKKyAgICAgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKKyAgICAgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGN1cl90YXJnZXQ9MTAuMworICAgICAgICAgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9CisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgICAgICBhbGx8My13YXl8aW50ZWx8NjQtYml0KQorICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZmlyc3Qgc3VwcG9ydGVkIGluIDEwLjUKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0nMTAuNScKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiIKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICMgMTAuNCB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gc3VwcG9ydCBJbnRlbCBhcmNocworICAgICAgICAgICAgICAgICAgICBjdXJfdGFyZ2V0PSIxMC40IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19CiAKLQkJIGVsc2UKLQkgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGlzIHNldCBpbiB0aGUKKyAgICAgICAgIyBlbnZpcm9ubWVudCB3aXRoIGEgdmFsdWUgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IHdlJ2xsIHVzZQorICAgICAgICAjIGluIHRoZSBNYWtlZmlsZSB0byBlbnN1cmUgdGhhdCB3ZSdsbCBnZXQgdGhlIHNhbWUgY29tcGlsZXIKKyAgICAgICAgIyBlbnZpcm9ubWVudCBkdXJpbmcgY29uZmlndXJlIGFuZCBidWlsZCB0aW1lLgorICAgICAgICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9IiRDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIgorICAgICAgICBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCisgICAgICAgIEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JycKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUKQogCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCi0JICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KLQkgICAgIwotCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bWzAtOV1dKlwpLiovXDEvJ2AKLQkgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKLQkgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42Ci0JICAgIHRoZW4KLQkJICAgIGN1cl90YXJnZXQ9MTAuMwotCQkgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9OyB0aGVuCi0JCQkgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxfQVJDSFN9IiA9ICJhbGwiOyB0aGVuCi0JCQkJICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZm9yIGEgCi0JCQkJICAgICMgNC13YXkgdW5pdmVyc2FsIGJ1aWxkIGlzIE9TWCAxMC41LCAKLQkJCQkgICAgIyB0aGF0J3MgdGhlIGZpcnN0IE9TIHJlbGVhc2Ugd2hlcmUgCi0JCQkJICAgICMgNC13YXkgYnVpbGRzIG1ha2Ugc2Vuc2UuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiMy13YXkiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiaW50ZWwiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiNjQtYml0IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCQkJICAgIGZpCi0JCSAgICBlbHNlCi0JCQkgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiI7IHRoZW4KLQkJCQkgICAgIyBPbiBJbnRlbCBtYWNzIGRlZmF1bHQgdG8gYSBkZXBsb3ltZW50Ci0JCQkJICAgICMgdGFyZ2V0IG9mIDEwLjQsIHRoYXQncyB0aGUgZmlyc3QgT1NYCi0JCQkJICAgICMgcmVsZWFzZSB3aXRoIEludGVsIHN1cHBvcnQuCi0JCQkJICAgIGN1cl90YXJnZXQ9IjEwLjQiCi0JCQkgICAgZmkKLQkJICAgIGZpCi0JICAgIGZpCi0JICAgIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtJHtjdXJfdGFyZ2V0fX0KLQkgICAgCi0JICAgICMgTWFrZSBzdXJlIHRoYXQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGlzIHNldCBpbiB0aGUgCi0JICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKLQkgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCi0JICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KLQkgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKLQkgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotCSAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCi0KLQkgICAgOzsKKyAgICAgICAgIyBlbmQgb2YgRGFyd2luKiB0ZXN0cworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogCkBAIC0xMzI2LDI0ICsxMzY1LDYgQEAKIAlCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAkYWNfYXJjaF9mbGFncyIKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLXRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXykKLSAgc2F2ZV9DRkxBR1M9JENGTEFHUwotICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV2Zvcm1hdCIKLSAgQUNfQ09NUElMRV9JRkVMU0UoWwotICAgIEFDX0xBTkdfUFJPR1JBTShbW3ZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpO11dLCBbW11dKQotICBdLFsKLSAgICBBQ19ERUZJTkUoSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUsIDEsCi0gICAgICBbRGVmaW5lIGlmIEdDQyBzdXBwb3J0cyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMiwgMykpKV0pCi0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIF0sWwotICAgIEFDX01TR19SRVNVTFQobm8pCi0gIF0pCi0gIENGTEFHUz0kc2F2ZV9DRkxBR1MKLWZpCi0KICMgT24gc29tZSBjb21waWxlcnMsIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBmdXJ0aGVyIG9wdGlvbnMKICMgKGUuZy4gTWFjT1MgWCkuIE9uIHNvbWUgb2YgdGhlc2Ugc3lzdGVtcywgdGhlIGNvbXBpbGVyIHdpbGwgbm90CiAjIGNvbXBsYWluIGlmIHVuYWNjZXB0ZWQgb3B0aW9ucyBhcmUgcGFzc2VkIChlLmcuIGdjYyBvbiBNYWMgT1MgWCkuCkBAIC0xNTI2LDcgKzE1NDcsOCBAQAogc3lzL3N0YXQuaCBzeXMvc3lzY2FsbC5oIHN5cy9zeXNfZG9tYWluLmggc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3Vpby5oIHN5cy91bi5oIHN5cy91dHNuYW1lLmggc3lzL3dhaXQuaCBwdHkuaCBcCiBsaWJ1dGlsLmggc3lzL3Jlc291cmNlLmggbmV0cGFja2V0L3BhY2tldC5oIHN5c2V4aXRzLmggYmx1ZXRvb3RoLmggXAotYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCBhbGxvY2EuaCkKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmggZW5kaWFuLmggXAorc3lzL2VuZGlhbi5oKQogQ1BQRkxBR1M9JGFjX3NhdmVfY3BwZmxhZ3MKIEFDX0hFQURFUl9ESVJFTlQKIEFDX0hFQURFUl9NQUpPUgpAQCAtMTU2Niw3ICsxNTg4LDcgQEAKIF0pCiAKICMgT24gTGludXgsIGNhbi5oIGFuZCBjYW4vcmF3LmggcmVxdWlyZSBzeXMvc29ja2V0LmgKLUFDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oLCwsWworQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oLCwsWwogI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xNTk3LDYgKzE2MTksMjIgQEAKICAgICBBQ19ERUZJTkUoSEFWRV9NQUtFREVWLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIG1ha2VkZXYgbWFjcm8uXSkKIGZpCiAKKyMgYnl0ZSBzd2FwcGluZworQUNfTVNHX0NIRUNLSU5HKGZvciBsZTY0dG9oKQorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfRU5ESUFOX0gKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRU5ESUFOX0gpCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCitdXSwgW1sKKyAgIGxlNjR0b2goMSkgXV0pCitdLFthY19jdl9oYXNfbGU2NHRvaD15ZXNdLFthY19jdl9oYXNfbGU2NHRvaD1ub10pCitBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXNfbGU2NHRvaCkKK2lmIHRlc3QgIiRhY19jdl9oYXNfbGU2NHRvaCIgPSAieWVzIjsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0hUT0xFNjQsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBsZTY0dG9oKCldKQorZmkKKwogIyBFbmFibGluZyBMRlMgb24gU29sYXJpcyAoMi42IHRvIDkpIHdpdGggZ2NjIDIuOTUgdHJpZ2dlcnMgYSBidWcgaW4KICMgdGhlIHN5c3RlbSBoZWFkZXJzOiBJZiBfWE9QRU5fU09VUkNFIGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBhcmUKICMgZGVmaW5lZCwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHByYWdtYSByZWRlZmluZV9leHRuYW1lLApAQCAtMTc5OCw3ICsxODM2LDYgQEAKIGVzYWMKIAogCi1BUkNIX1JVTl8zMkJJVD0iIgogQUNfU1VCU1QoTElCVE9PTF9DUlVGVCkKIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAgIERhcndpbi9APDpAMDE1NjdAOj5AXC4uKikgCkBAIC0xODU1LDE0ICsxODkyLDEyIEBACiAgICAgCQk7OwogICAgIAllc2FjCiAKLQkjQVJDSF9SVU5fMzJCSVQ9InRydWUiCiAgICAgZmkKIAogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQiIC1sU3lzdGVtIC1sU3lzdGVtU3R1YnMgLWFyY2hfb25seSAke01BQ09TWF9ERUZBVUxUX0FSQ0h9IgogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1pbnN0YWxsX25hbWUgJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgLWN1cnJlbnRfdmVyc2lvbiAkKFZFUlNJT04pJzs7CiBlc2FjCi0KIEFDX01TR19DSEVDS0lORyhmb3IgLS1lbmFibGUtZnJhbWV3b3JrKQogaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiB0aGVuCkBAIC0xOTgyLDkgKzIwMTcsNiBAQAogCiAJCWlmIHRlc3QgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9ICc+JyAxMC4yCiAJCXRoZW4KLQkJCWlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCQkJTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJZmkKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgpAQCAtMjEwOCw2ICsyMTQwLDEyIEBACiAJIyAtdSBsaWJzeXNfcyBwdWxscyBpbiBhbGwgc3ltYm9scyBpbiBsaWJzeXMKIAlEYXJ3aW4vKikgCiAJCUxJTktGT1JTSEFSRUQ9IiRleHRyYV91bmRlZnMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKKworCQkjIElzc3VlICMxODA3NTogdGhlIGRlZmF1bHQgbWF4aW11bSBzdGFjayBzaXplICg4TUJ5dGVzKSBpcyB0b28KKwkJIyBzbWFsbCBmb3IgdGhlIGRlZmF1bHQgcmVjdXJzaW9uIGxpbWl0LiBJbmNyZWFzZSB0aGUgc3RhY2sgc2l6ZQorCQkjIHRvIGVuc3VyZSB0aGF0IHRlc3RzIGRvbid0IGNyYXNoCisJCUxJTktGT1JTSEFSRUQ9Ii1XbCwtc3RhY2tfc2l6ZSwxMDAwMDAwICRMSU5LRk9SU0hBUkVEIgorCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogCQl0aGVuCiAJCQlMSU5LRk9SU0hBUkVEPSIkTElOS0ZPUlNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKQEAgLTIyMTIsNiArMjI1MCw1OSBAQAogCSopIDs7CiBlc2FjCiAKKyMgY2hlY2sgZm9yIHN5c3RlbXMgdGhhdCByZXF1aXJlIGFsaWduZWQgbWVtb3J5IGFjY2VzcworQUNfTVNHX0NIRUNLSU5HKGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZCkKK0FDX1RSWV9SVU4oWworaW50IG1haW4oKQoreworICAgIGNoYXIgc1sxNl07CisgICAgaW50IGksICpwMSwgKnAyOworICAgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykKKyAgICAgICAgc1tpXSA9IGk7CisgICAgcDEgPSAoaW50KikocysxKTsKKyAgICBwMiA9IChpbnQqKShzKzIpOworICAgIGlmICgqcDEgPT0gKnAyKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKyAgICAgICAgICAgICAgXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9bm9dLAorICAgICBbYWxpZ25lZF9yZXF1aXJlZD15ZXNdLAorICAgICBbYWxpZ25lZF9yZXF1aXJlZD15ZXNdKQorCitpZiB0ZXN0ICIkYWxpZ25lZF9yZXF1aXJlZCIgPSB5ZXMgOyB0aGVuCisgIEFDX0RFRklORShbSEFWRV9BTElHTkVEX1JFUVVJUkVEXSwgWzFdLAorICAgIFtEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkXSkKK2ZpCitBQ19NU0dfUkVTVUxUKCRhbGlnbmVkX3JlcXVpcmVkKQorCisKKyMgc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldyBoYXNoIGFsZ29yaXRobQorQUhfVEVNUExBVEUoUHlfSEFTSF9BTEdPUklUSE0sCisgIFtEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcuCisgICBTaXBIYXNoMjQ6IDEsIEZOVjogMiwgZXh0ZXJuYWxseSBkZWZpbmVkOiAwXSkKKworQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtaGFzaC1hbGdvcml0aG0pCitkbmwgcXVhZHJpZ3JhcGhzICJAPDpAIiBhbmQgIkA6PkAiIHByb2R1Y2UgIlsiIGFuZCAiXSIgaW4gdGhlIG91dHB1dAorQUNfQVJHX1dJVEgoaGFzaF9hbGdvcml0aG0sCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWhhc2gtYWxnb3JpdGhtPUA8OkBmbnZ8c2lwaGFzaDI0QDo+QF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0IGhhc2ggYWxnb3JpdGhtXSksCitbCitBQ19NU0dfUkVTVUxUKCR3aXRodmFsKQorY2FzZSAiJHdpdGh2YWwiIGluCisgICAgc2lwaGFzaDI0KQorICAgICAgICBBQ19ERUZJTkUoUHlfSEFTSF9BTEdPUklUSE0sIDEpCisgICAgICAgIDs7CisgICAgZm52KQorICAgICAgICBBQ19ERUZJTkUoUHlfSEFTSF9BTEdPUklUSE0sIDIpCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgQUNfTVNHX0VSUk9SKFt1bmtub3duIGhhc2ggYWxnb3JpdGhtICckd2l0aHZhbCddKQorICAgICAgICA7OworZXNhYworXSwKK1tBQ19NU0dfUkVTVUxUKGRlZmF1bHQpXSkKKwogIyBNb3N0IFNWUjQgcGxhdGZvcm1zIChlLmcuIFNvbGFyaXMpIG5lZWQgLWxzb2NrZXQgYW5kIC1sbnNsLgogQUNfQ0hFQ0tfTElCKG5zbCwgdF9vcGVuLCBbTElCUz0iLWxuc2wgJExJQlMiXSkgIyBTVlI0CiBBQ19DSEVDS19MSUIoc29ja2V0LCBzb2NrZXQsIFtMSUJTPSItbHNvY2tldCAkTElCUyJdLCBbXSwgJExJQlMpICMgU1ZSNCBzb2NrZXRzCkBAIC0yODIzLDcgKzI5MTQsNyBAQAogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIEFDX0NIRUNLX0ZVTkNTKGFsYXJtIGFjY2VwdDQgc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCi0gY2xvY2sgY29uZnN0ciBjdGVybWlkIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKKyBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZHVwMyBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCiAgZmV4ZWN2ZSBmZG9wZW5kaXIgZm9yayBmcGF0aGNvbmYgZnN0YXRhdCBmdGltZSBmdHJ1bmNhdGUgZnV0aW1lc2F0IFwKICBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBcCiAgZ2V0Z3JvdXBsaXN0IGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKQEAgLTI4NDMsNyArMjkzNCw3IEBACiAgc2lndGltZWR3YWl0IHNpZ3dhaXQgc2lnd2FpdGluZm8gc25wcmludGYgc3RyZnRpbWUgc3RybGNweSBzeW1saW5rYXQgc3luYyBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bmxpbmthdCB1bnNldGVudiB1dGltZW5zYXQgdXRpbWVzIHdhaXRpZCB3YWl0cGlkIHdhaXQzIHdhaXQ0IFwKLSB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd3JpdGV2IF9nZXRwdHkpCisgd2NzY29sbCB3Y3NmdGltZSB3Y3N4ZnJtIHdtZW1jbXAgd3JpdGV2IF9nZXRwdHkpCiAKIEFDX0NIRUNLX0RFQ0woZGlyZmQsCiAgICAgQUNfREVGSU5FKEhBVkVfRElSRkQsIDEsCkBAIC0yOTEwLDYgKzMwMDEsMTYgQEAKICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCiAgIFtBQ19NU0dfUkVTVUxUKG5vKQogXSkKK0FDX01TR19DSEVDS0lORyhmb3IgcHJsaW1pdCkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorICAgIF1dLCBbW3ZvaWQgKng9cHJsaW1pdF1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9QUkxJTUlULCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQorCiAjIE9uIHNvbWUgc3lzdGVtcyAoZWcuIEZyZWVCU0QgNSksIHdlIHdvdWxkIGZpbmQgYSBkZWZpbml0aW9uIG9mIHRoZQogIyBmdW5jdGlvbnMgY3Rlcm1pZF9yLCBzZXRncm91cHMgaW4gdGhlIGxpYnJhcnksIGJ1dCBubyBwcm90b3R5cGUKICMgKGUuZy4gYmVjYXVzZSB3ZSB1c2UgX1hPUEVOX1NPVVJDRSkuIFNlZSB3aGV0aGVyIHdlIGNhbiB0YWtlIHRoZWlyCkBAIC0zMTEwLDcgKzMyMTEsNyBAQAogIyBjaGVjayBmb3IgbG9uZyBmaWxlIHN1cHBvcnQgZnVuY3Rpb25zCiBBQ19DSEVDS19GVU5DUyhmc2VlazY0IGZzZWVrbyBmc3RhdHZmcyBmdGVsbDY0IGZ0ZWxsbyBzdGF0dmZzKQogCi1BQ19SRVBMQUNFX0ZVTkNTKGR1cDIgZ2V0Y3dkIHN0cmR1cCkKK0FDX1JFUExBQ0VfRlVOQ1MoZHVwMiBzdHJkdXApCiBBQ19DSEVDS19GVU5DUyhnZXRwZ3JwLCAKICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmlzdGQuaD5dXSwgW1tnZXRwZ3JwKDApO11dKV0sCiAgICAgW0FDX0RFRklORShHRVRQR1JQX0hBVkVfQVJHLCAxLCBbRGVmaW5lIGlmIGdldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBnZXRwZ3JwKDApLl0pXSwKQEAgLTM5ODMsNiArNDA4NCwxMSBAQAogTERWRVJTSU9OPSckKFZFUlNJT04pJChBQklGTEFHUyknCiBBQ19NU0dfUkVTVUxUKCRMRFZFUlNJT04pCiAKK2RubCBkZWZpbmUgTElCUEwgYWZ0ZXIgQUJJRkxBR1MgYW5kIExEVkVSU0lPTiBpcyBkZWZpbmVkLgorQUNfU1VCU1QoUFlfRU5BQkxFX1NIQVJFRCkKK0xJQlBMPSIke3ByZWZpeH0vbGliL3B5dGhvbiR7VkVSU0lPTn0vY29uZmlnLSR7TERWRVJTSU9OfSIKK0FDX1NVQlNUKExJQlBMKQorCiAjIENoZWNrIHdoZXRoZXIgcmlnaHQgc2hpZnRpbmcgYSBuZWdhdGl2ZSBpbnRlZ2VyIGV4dGVuZHMgdGhlIHNpZ24gYml0CiAjIG9yIGZpbGxzIHdpdGggemVyb3MgKGxpa2UgdGhlIENyYXkgSjkwLCBhY2NvcmRpbmcgdG8gVGltIFBldGVycykuCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdCkKQEAgLTQ2NjEsOCArNDc2NywyMyBAQAogICAgIGVzYWMKIGZpCiAKKyMgZW5zdXJlcGlwIG9wdGlvbgorQUNfTVNHX0NIRUNLSU5HKGZvciBlbnN1cmVwaXApCitBQ19BUkdfV0lUSChlbnN1cmVwaXAsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgob3V0KS1lbnN1cmVwaXA9QDw6QD11cGdyYWRlQDo+QF0sCisgICAgICAgIFsiaW5zdGFsbCIgb3IgInVwZ3JhZGUiIHVzaW5nIGJ1bmRsZWQgcGlwXSldLAorICAgIFtdLAorICAgIFt3aXRoX2Vuc3VyZXBpcD11cGdyYWRlXSkKK0FTX0NBU0UoJHdpdGhfZW5zdXJlcGlwLAorICAgIFt5ZXN8dXBncmFkZV0sW0VOU1VSRVBJUD11cGdyYWRlXSwKKyAgICBbaW5zdGFsbF0sW0VOU1VSRVBJUD1pbnN0YWxsXSwKKyAgICBbbm9dLFtFTlNVUkVQSVA9bm9dLAorICAgIFtBQ19NU0dfRVJST1IoWy0td2l0aC1lbnN1cmVwaXA9dXBncmFkZXxpbnN0YWxsfG5vXSldKQorQUNfTVNHX1JFU1VMVCgkRU5TVVJFUElQKQorQUNfU1VCU1QoRU5TVVJFUElQKQorCiAjIGdlbmVyYXRlIG91dHB1dCBmaWxlcwotQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYykKK0FDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMgTWlzYy9weXRob24tY29uZmlnLnNoKQogQUNfQ09ORklHX0ZJTEVTKFtNb2R1bGVzL2xkX3NvX2FpeF0sIFtjaG1vZCAreCBNb2R1bGVzL2xkX3NvX2FpeF0pCiBBQ19PVVRQVVQKIApkaWZmIC0tZ2l0IGEvcHljb25maWcuaC5pbiBiL3B5Y29uZmlnLmguaW4KaW5kZXggMDAyMDMwMC4uMjllMWJmYSAxMDA2NDQKLS0tIGEvcHljb25maWcuaC5pbgorKysgYi9weWNvbmZpZy5oLmluCkBAIC00OSw2ICs0OSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFsYXJtJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0FMQVJNCiAKKy8qIERlZmluZSBpZiBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQgKi8KKyN1bmRlZiBIQVZFX0FMSUdORURfUkVRVUlSRUQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhbGxvY2EuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9BTExPQ0FfSAogCkBAIC02NCw5ICs2Nyw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0YW5oJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0FUQU5ICiAKLS8qIERlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSkgKi8KLSN1bmRlZiBIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUCiAKQEAgLTE5Niw5ICsxOTYsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZHVwMicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9EVVAyCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZHVwMycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9EVVAzCisKIC8qIERlZmluZWQgd2hlbiBhbnkgZHluYW1pYyBtb2R1bGUgbG9hZGluZyBpcyBlbmFibGVkLiAqLwogI3VuZGVmIEhBVkVfRFlOQU1JQ19MT0FESU5HCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZW5kaWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRU5ESUFOX0gKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGwnIGZ1bmN0aW9ucy4gKi8KICN1bmRlZiBIQVZFX0VQT0xMCiAKQEAgLTMyMCw5ICszMjYsNiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y3dkJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVENXRAotCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBmbG9ja2ZpbGUoKSwgZ2V0Y191bmxvY2tlZCgpLCBhbmQgZnVubG9ja2ZpbGUoKSAqLwogI3VuZGVmIEhBVkVfR0VUQ19VTkxPQ0tFRAogCkBAIC00MTEsNiArNDE0LDkgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2hzdHJlcnJvcicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9IU1RSRVJST1IKIAorLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpICovCisjdW5kZWYgSEFWRV9IVE9MRTY0CisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaHlwb3QnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSFlQT1QKIApAQCAtNTA0LDYgKzUxMCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpbmthdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9MSU5LQVQKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9jYW4vYmNtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElOVVhfQ0FOX0JDTV9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfQ0FOX0gKIApAQCAtNjI3LDYgKzYzNiw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByZWFkJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BSRUFECiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3BybGltaXQnIGZ1bmN0aW9ucy4gKi8KKyN1bmRlZiBIQVZFX1BSTElNSVQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUFJPQ0VTU19ICiAKQEAgLTkyNCw2ICs5MzYsOSBAQAogICAgKi8KICN1bmRlZiBIQVZFX1NZU19ESVJfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lbmRpYW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfRU5ESUFOX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZXBvbGwuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfRVBPTExfSAogCkBAIC0xMTIxLDYgKzExMzYsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3N4ZnJtJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1dDU1hGUk0KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3bWVtY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1dNRU1DTVAKKwogLyogRGVmaW5lIGlmIHR6c2V0KCkgYWN0dWFsbHkgc3dpdGNoZXMgdGhlIGxvY2FsIHRpbWV6b25lIGluIGEgbWVhbmluZ2Z1bCB3YXkuCiAgICAqLwogI3VuZGVmIEhBVkVfV09SS0lOR19UWlNFVApAQCAtMTE4Nyw2ICsxMjA1LDEwIEBACiAvKiBEZWZpbmVkIGlmIFB5dGhvbiBpcyBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5LiAqLwogI3VuZGVmIFB5X0VOQUJMRV9TSEFSRUQKIAorLyogRGVmaW5lIGhhc2ggYWxnb3JpdGhtIGZvciBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3LiBTaXBIYXNoMjQ6IDEsIEZOVjogMiwKKyAgIGV4dGVybmFsbHkgZGVmaW5lZDogMCAqLworI3VuZGVmIFB5X0hBU0hfQUxHT1JJVEhNCisKIC8qIGFzc3VtZSBDODkgc2VtYW50aWNzIHRoYXQgUkVUU0lHVFlQRSBpcyBhbHdheXMgdm9pZCAqLwogI3VuZGVmIFJFVFNJR1RZUEUKIApkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQppbmRleCA5MDY0MDE0Li5kN2Y1MmFmIDEwMDY0NAotLS0gYS9zZXR1cC5weQorKysgYi9zZXR1cC5weQpAQCAtMSw3ICsxLDcgQEAKICMgQXV0b2RldGVjdGluZyBzZXR1cC5weSBzY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBQeXRob24gZXh0ZW5zaW9ucwogIwogCi1pbXBvcnQgc3lzLCBvcywgaW1wLCByZSwgb3B0cGFyc2UKK2ltcG9ydCBzeXMsIG9zLCBpbXBvcnRsaWIubWFjaGluZXJ5LCByZSwgb3B0cGFyc2UKIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgogaW1wb3J0IHN5c2NvbmZpZwogCkBAIC0yNTksOCArMjU5LDkgQEAKIAogICAgICAgICBpZiBtaXNzaW5nOgogICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoIlB5dGhvbiBidWlsZCBmaW5pc2hlZCwgYnV0IHRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCAiCi0gICAgICAgICAgICAgICAgICAgInRoZXNlIG1vZHVsZXMgd2VyZSBub3QgZm91bmQ6IikKKyAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5ISIpCisgICAgICAgICAgICBwcmludCgiVGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkIHRoZXNlIG9wdGlvbmFsIG1vZHVsZXMgd2VyZSBub3QgIgorICAgICAgICAgICAgICAgICAgImZvdW5kOiIpCiAgICAgICAgICAgICBwcmludF90aHJlZV9jb2x1bW4obWlzc2luZykKICAgICAgICAgICAgIHByaW50KCJUbyBmaW5kIHRoZSBuZWNlc3NhcnkgYml0cywgbG9vayBpbiBzZXR1cC5weSBpbiIKICAgICAgICAgICAgICAgICAgICIgZGV0ZWN0X21vZHVsZXMoKSBmb3IgdGhlIG1vZHVsZSdzIG5hbWUuIikKQEAgLTMyNSw4ICszMjYsOSBAQAogICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CiAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0Lm5hbWUsIGV4dF9maWxlbmFtZSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYyhleHQubmFtZSwgZXh0X2ZpbGVuYW1lKQorICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuZmFpbGVkLmFwcGVuZChleHQubmFtZSkKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyoqKiBXQVJOSU5HOiByZW5hbWluZyAiJXMiIHNpbmNlIGltcG9ydGluZyBpdCcKQEAgLTU4OCwxMCArNTkwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcz1bJ3Rlc3RjYXBpX2xvbmcuaCddKSApCiAgICAgICAgICMgUHl0aG9uIFBFUC0zMTE4IChidWZmZXIgcHJvdG9jb2wpIHRlc3QgbW9kdWxlCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ190ZXN0YnVmZmVyJywgWydfdGVzdGJ1ZmZlci5jJ10pICkKKyAgICAgICAgIyBUZXN0IGxvYWRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBjb21waWxlZCBmaWxlIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTY0MjEpCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ190ZXN0aW1wb3J0bXVsdGlwbGUnLCBbJ190ZXN0aW1wb3J0bXVsdGlwbGUuYyddKSApCiAgICAgICAgICMgcHJvZmlsZXIgKF9sc3Byb2YgaXMgZm9yIGNQcm9maWxlLnB5KQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfbHNwcm9mJywgWydfbHNwcm9mLmMnLCAncm90YXRpbmd0cmVlLmMnXSkgKQogICAgICAgICAjIHN0YXRpYyBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCd1bmljb2RlZGF0YScsIFsndW5pY29kZWRhdGEuYyddKSApCisgICAgICAgICMgX29wY29kZSBtb2R1bGUKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX29wY29kZScsIFsnX29wY29kZS5jJ10pICkKIAogICAgICAgICAjIE1vZHVsZXMgd2l0aCBzb21lIFVOSVggZGVwZW5kZW5jaWVzIC0tIG9uIGJ5IGRlZmF1bHQ6CiAgICAgICAgICMgKElmIHlvdSBoYXZlIGEgcmVhbGx5IGJhY2t3YXJkIFVOSVgsIHNlbGVjdCBhbmQgc29ja2V0IG1heSBub3QgYmUKQEAgLTc4NCwxMCArNzkwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGluY2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBtID0gb3BlbnNzbF92ZXJfcmUubWF0Y2gobGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbF92ZXIgPSBldmFsKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbF92ZXIgPSBpbnQobS5ncm91cCgxKSwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCgiSU9FcnJvciB3aGlsZSByZWFkaW5nIG9wZW5zc2h2Lmg6IiwgbXNnKQotICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAjcHJpbnQoJ29wZW5zc2xfdmVyID0gMHglMDh4JyAlIG9wZW5zc2xfdmVyKQogICAgICAgICBtaW5fb3BlbnNzbF92ZXIgPSAweDAwOTA3MDAwCkBAIC04MjEsNiArODI3LDE1IEBACiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19zaGExJywgWydzaGExbW9kdWxlLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnaGFzaGxpYi5oJ10pICkKIAorICAgICAgICAjIFNIQS0zIChLZWNjYWspIG1vZHVsZQorICAgICAgICBzaGEzX2RlcGVuZHMgPSBbJ2hhc2hsaWIuaCddCisgICAgICAgIGtlY2NhayA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgc3JjZGlyLCAnTW9kdWxlcycsICdfc2hhMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2VjY2FrJykKKyAgICAgICAgZm9yIHBhdHRlcm4gaW4gKCcqLmMnLCAnKi5oJywgJyoubWFjcm9zJyk6CisgICAgICAgICAgICBzaGEzX2RlcGVuZHMuZXh0ZW5kKGdsb2Iob3MucGF0aC5qb2luKGtlY2NhaywgcGF0dGVybikpKQorICAgICAgICBleHRzLmFwcGVuZChFeHRlbnNpb24oIl9zaGEzIiwgWyJfc2hhMy9zaGEzbW9kdWxlLmMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9c2hhM19kZXBlbmRzKSkKKwogICAgICAgICAjIE1vZHVsZXMgdGhhdCBwcm92aWRlIHBlcnNpc3RlbnQgZGljdGlvbmFyeS1saWtlIHNlbWFudGljcy4gIFlvdSB3aWxsCiAgICAgICAgICMgcHJvYmFibHkgd2FudCB0byBhcnJhbmdlIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlbSB0byBiZSBhdmFpbGFibGUgb24KICAgICAgICAgIyB5b3VyIG1hY2hpbmUsIHRob3VnaCBub25lIGFyZSBkZWZpbmVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBvZiBsaWJyYXJ5CkBAIC0xNTA5LDEwICsxNTI0LDYgQEAKIAogICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgZXh0cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbignX2dlc3RhbHQnLCBbJ19nZXN0YWx0LmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPVsnLWZyYW1ld29yaycsICdDYXJib24nXSkKLSAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZXh0cy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbignX3NjcHJveHknLCBbJ19zY3Byb3h5LmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPVsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZnJhbWV3b3JrJywgJ1N5c3RlbUNvbmZpZ3VyYXRpb24nLApAQCAtMjE1Niw3ICsyMTY3LDcgQEAKIHByb2dyYW1tYWJsZSBpbnRlcmZhY2UuCiAKIFRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gaXMgcG9ydGFibGU6IGl0IHJ1bnMgb24gbWFueSBicmFuZHMgb2YgVU5JWCwKLW9uIFdpbmRvd3MsIERPUywgT1MvMiwgTWFjLCBBbWlnYS4uLiBJZiB5b3VyIGZhdm9yaXRlIHN5c3RlbSBpc24ndAorb24gV2luZG93cywgRE9TLCBNYWMsIEFtaWdhLi4uIElmIHlvdXIgZmF2b3JpdGUgc3lzdGVtIGlzbid0CiBsaXN0ZWQgaGVyZSwgaXQgbWF5IHN0aWxsIGJlIHN1cHBvcnRlZCwgaWYgdGhlcmUncyBhIEMgY29tcGlsZXIgZm9yCiBpdC4gQXNrIGFyb3VuZCBvbiBjb21wLmxhbmcucHl0aG9uIC0tIG9yIGp1c3QgdHJ5IGNvbXBpbGluZyBQeXRob24KIHlvdXJzZWxmLgo=